diff --git a/Histogram/ClrRect.hpp b/Histogram/ClrRect.hpp new file mode 100644 index 0000000..c6c6aff --- /dev/null +++ b/Histogram/ClrRect.hpp @@ -0,0 +1,79 @@ +#ifndef _HISTOGRAM_COLORRECT_HPP_ +#define _HISTOGRAM_COLORRECT_HPP_ +#ifndef _ENGINE_RECT3D_HPP_ +#include +#endif + +class ColorRect : public Rect3D +{ +public: + ColorRect(void); + ColorRect(const ColorRect &someColorRect); + ColorRect(const Rect3D &someRect3D,BYTE paletteIndex); + ColorRect(const ColorRect &someColorRect,BYTE paletteIndex); + virtual~ColorRect(); + ColorRect &operator=(const ColorRect &someColorRect); + WORD operator==(const ColorRect &someColorRect); + BYTE paletteIndex(void)const; + void paletteIndex(BYTE paletteIndex); +private: + BYTE mPaletteIndex; +}; + +inline +ColorRect::ColorRect(void) +: mPaletteIndex(0) +{ +} + +inline +ColorRect::ColorRect(const ColorRect &someColorRect) +{ + *this=someColorRect; +} + +inline +ColorRect::ColorRect(const ColorRect &someColorRect,BYTE paletteIndex) +: Rect3D((Rect3D&)someColorRect), mPaletteIndex(paletteIndex) +{ +} + +inline +ColorRect::ColorRect(const Rect3D &someRect3D,BYTE paletteIndex) +: mPaletteIndex(paletteIndex) +{ + (Rect3D&)*this=(Rect3D&)someRect3D; +} + +inline +ColorRect::~ColorRect() +{ +} + +inline +ColorRect &ColorRect::operator=(const ColorRect &someColorRect) +{ + (Rect3D&)*this=(Rect3D&)someColorRect; + paletteIndex(someColorRect.paletteIndex()); + return *this; +} + +inline +WORD ColorRect::operator==(const ColorRect &someColorRect) +{ + return ((Rect3D&)*this==(Rect3D&)someColorRect&& + paletteIndex()==someColorRect.paletteIndex()); +} + +inline +BYTE ColorRect::paletteIndex(void)const +{ + return mPaletteIndex; +} + +inline +void ColorRect::paletteIndex(BYTE paletteIndex) +{ + mPaletteIndex=paletteIndex; +} +#endif diff --git a/Histogram/Debug/Graph3D.obj b/Histogram/Debug/Graph3D.obj new file mode 100644 index 0000000..267f461 Binary files /dev/null and b/Histogram/Debug/Graph3D.obj differ diff --git a/Histogram/Debug/GraphDlg.obj b/Histogram/Debug/GraphDlg.obj new file mode 100644 index 0000000..6daf660 Binary files /dev/null and b/Histogram/Debug/GraphDlg.obj differ diff --git a/Histogram/Debug/GraphWnd.obj b/Histogram/Debug/GraphWnd.obj new file mode 100644 index 0000000..c2a9097 Binary files /dev/null and b/Histogram/Debug/GraphWnd.obj differ diff --git a/Histogram/Debug/histogram.lib b/Histogram/Debug/histogram.lib new file mode 100644 index 0000000..85481b4 Binary files /dev/null and b/Histogram/Debug/histogram.lib differ diff --git a/Histogram/Debug/histogram.pch b/Histogram/Debug/histogram.pch new file mode 100644 index 0000000..3a0ec75 Binary files /dev/null and b/Histogram/Debug/histogram.pch differ diff --git a/Histogram/Debug/vc60.idb b/Histogram/Debug/vc60.idb new file mode 100644 index 0000000..7933358 Binary files /dev/null and b/Histogram/Debug/vc60.idb differ diff --git a/Histogram/Debug/vc60.pdb b/Histogram/Debug/vc60.pdb new file mode 100644 index 0000000..3194c47 Binary files /dev/null and b/Histogram/Debug/vc60.pdb differ diff --git a/Histogram/Graph3D.cpp b/Histogram/Graph3D.cpp new file mode 100644 index 0000000..1b39017 --- /dev/null +++ b/Histogram/Graph3D.cpp @@ -0,0 +1,25 @@ +#include + +Graph3D::Graph3D(GUIWindow &someGUIWindow) +: mGUIWindow(&someGUIWindow), DIB3D(someGUIWindow) +{ +} + +Graph3D::Graph3D(GUIWindow &someGUIWindow,PurePalette &purePalette) +: mGUIWindow(&someGUIWindow), DIB3D(someGUIWindow,purePalette) +{ +} + +Graph3D::~Graph3D() +{ +} + +WORD Graph3D::viewPortWidth(void)const +{ + return ((SmartPointer&)mGUIWindow)->width(); +} + +WORD Graph3D::viewPortHeight(void)const +{ + return ((SmartPointer&)mGUIWindow)->height(); +} diff --git a/Histogram/Graph3D.hpp b/Histogram/Graph3D.hpp new file mode 100644 index 0000000..05ac136 --- /dev/null +++ b/Histogram/Graph3D.hpp @@ -0,0 +1,32 @@ +#ifndef _HISTOGRAM_GRAPH3D_HPP_ +#define _HISTOGRAM_GRAPH3D_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _ENGINE_DIB3D_HPP_ +#include +#endif + +class Graph3D : public DIB3D +{ +public: + Graph3D(GUIWindow &someGUIWindow); + Graph3D(GUIWindow &someGUIWindow,PurePalette &purePalette); + virtual ~Graph3D(); +protected: + WORD viewPortWidth(void)const; + WORD viewPortHeight(void)const; +private: + Graph3D &operator=(const Graph3D &someGraph3D); + SmartPointer mGUIWindow; +}; + +inline +Graph3D &Graph3D::operator=(const Graph3D &/*someGraph3D*/) +{ // private implementation + return *this; +} +#endif diff --git a/Histogram/GraphDlg.cpp b/Histogram/GraphDlg.cpp new file mode 100644 index 0000000..9b6ae76 --- /dev/null +++ b/Histogram/GraphDlg.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include + +GraphDlg::GraphDlg(void) +{ + mDestroyHandler.setCallback(this,&GraphDlg::destroyHandler); + mInitHandler.setCallback(this,&GraphDlg::initHandler); + mCommandHandler.setCallback(this,&GraphDlg::commandHandler); + mCloseHandler.setCallback(this,&GraphDlg::closeHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +GraphDlg::~GraphDlg() +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +bool GraphDlg::perform(TabEntries &entries,HWND hParent) +{ + WORD returnCode; + mTabEntries=entries; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"GRAPHDIALOG",hParent,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType GraphDlg::initHandler(CallbackData &/*someCallbackData*/) +{ + mGraphWindow=::new GraphWindow(*this,Rect(3,3,width()-6,height()-58)); + mGraphWindow.disposition(PointerDisposition::Delete); + mGraphWindow->setFocus(); + mGraphWindow->showHistogram(mTabEntries); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GraphDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GraphDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + endDialog(TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GraphDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} diff --git a/Histogram/GraphDlg.hpp b/Histogram/GraphDlg.hpp new file mode 100644 index 0000000..2352433 --- /dev/null +++ b/Histogram/GraphDlg.hpp @@ -0,0 +1,40 @@ +#ifndef _HISTOGRAM_GRAPHDLG_HPP_ +#define _HISTOGRAM_GRAPHDLG_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _THREAD_THREADCALLBACK_HPP_ +#include +#endif + +class GraphWindow; + +class GraphDlg : private DWindow +{ +public: + GraphDlg(void); + virtual ~GraphDlg(); + bool perform(TabEntries &entries,HWND hParent); +private: + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + + Callback mCommandHandler; + Callback mDestroyHandler; + Callback mInitHandler; + Callback mCloseHandler; + SmartPointer mGraphWindow; + TabEntries mTabEntries; +}; +#endif diff --git a/Histogram/GraphWnd.cpp b/Histogram/GraphWnd.cpp new file mode 100644 index 0000000..c27d808 --- /dev/null +++ b/Histogram/GraphWnd.cpp @@ -0,0 +1,256 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char GraphWindow::smszClassName[]={"GraphWindow"}; +char GraphWindow::smszMenuName[]={""}; + +GraphWindow::GraphWindow(GUIWindow &parentWindow,const Rect &winRect) +{ + mPaintHandler.setCallback(this,&GraphWindow::paintHandler); + mCreateHandler.setCallback(this,&GraphWindow::createHandler); + mDestroyHandler.setCallback(this,&GraphWindow::destroyHandler); + mKeyDownHandler.setCallback(this,&GraphWindow::keyDownHandler); + mLeftButtonDownHandler.setCallback(this,&GraphWindow::leftButtonDownHandler); + mDialogCodeHandler.setCallback(this,&GraphWindow::dialogCodeHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + registerClass(); + initializePalette(); + createWindow(parentWindow,winRect); + mGraph3D=::new Graph3D(*this,mGraphPalette); + mGraph3D.disposition(PointerDisposition::Delete); + setPerspective(); + show(SW_SHOW); + update(); +} + +GraphWindow::GraphWindow(const GraphWindow &/*someGraphWindow*/) +{ // private implementation +} + +GraphWindow::~GraphWindow() +{ + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +void GraphWindow::initializePalette(void) +{ + Array rgbColors;; + + rgbColors.size(4); + rgbColors[0]=RGBColor(0,0,0); + rgbColors[1]=RGBColor(255,255,255); + rgbColors[2]=RGBColor(255,0,0); + rgbColors[3]=RGBColor(0,255,0); + mGraphPalette.setPaletteColors(rgbColors); +} + +void GraphWindow::registerClass(void)const +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,smszClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(GraphWindow*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(HOLLOW_BRUSH); + wndClass.lpszMenuName =smszMenuName; + wndClass.lpszClassName =smszClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,smszClassName,(WNDCLASS FAR*)&wndClass)); +} + +void GraphWindow::createWindow(GUIWindow &parentWindow,const Rect &winRect) +{ + Window::createWindow(WS_EX_CLIENTEDGE,String(smszClassName),String(smszMenuName), + WS_CHILD|WS_OVERLAPPED|WS_CLIPCHILDREN|WS_BORDER,winRect, + parentWindow,(HMENU)103,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); +} + +CallbackData::ReturnType GraphWindow::paintHandler(CallbackData &someCallbackData) +{ + if(!mGraph3D.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + mGraph3D->clearBits(); + for(int rectIndex=0;rectIndexrectangle(colorRect,colorRect.paletteIndex()); + } + mGraph3D->bitBlt((PureDevice&)*pPaintInfo); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GraphWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GraphWindow::leftButtonDownHandler(CallbackData &/*someCallbackData*/) +{ + setFocus(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GraphWindow::dialogCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS; +} + +CallbackData::ReturnType GraphWindow::keyDownHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case inKey : + if(shiftKeyPressed())mGraph3D->cameraTwistDegrees(mGraph3D->cameraTwistDegrees()-ThetaDelta); + mGraph3D->viewPlaneDistance(mGraph3D->viewPlaneDistance()+ViewDelta); + invalidate(FALSE); + break; + case outKey : + if(shiftKeyPressed())mGraph3D->cameraTwistDegrees(mGraph3D->cameraTwistDegrees()+ThetaDelta); + mGraph3D->viewPlaneDistance(mGraph3D->viewPlaneDistance()-ViewDelta); + invalidate(FALSE); + break; + case UpArrow : + if(handleUpArrow())invalidate(FALSE); + break; + case DownArrow : + if(handleDownArrow())invalidate(FALSE); + break; + case LeftArrow : + if(handleLeftArrow())invalidate(FALSE); + break; + case RightArrow : + if(handleRightArrow())invalidate(FALSE); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GraphWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +void GraphWindow::showHistogram(TabEntries &entries) +{ + Block vectorInt; + IonianScale ionianScale; + + mGraphRects.remove(); + setPerspective(); + for(int itemIndex=0;itemIndex vectorInt; + int itemIndex; + int vectorIndex; + + vectorInt.size((Note::B-Note::C)+1); + for(int index=0;indexgetPalette().paletteIndex(RGBColor(255,255,255))); +// invalidate(); +} + +void GraphWindow::showHistogram(Array &vectorInt,BYTE paletteIndex,int zDepth) +{ + Array scrnInt; + int widthAdjust(5); + + WORD sizeFactor(((((float)width()-20)/(float)widthAdjust)/(float)(Note::B-Note::C)+1)*100.00); + SpacialTransform resample; + resample.transform(vectorInt,scrnInt,sizeFactor); + for(int itemIndex=0,xPoint=widthAdjust;itemIndexcameraPoint()); + cameraPoint.y(cameraPoint.y()+TurnDelta); + mGraph3D->cameraPoint(cameraPoint); + return TRUE; +} + +bool GraphWindow::handleDownArrow(void) +{ + Point3D cameraPoint(mGraph3D->cameraPoint()); + cameraPoint.y(cameraPoint.y()-TurnDelta); + mGraph3D->cameraPoint(cameraPoint); + return TRUE; +} + +bool GraphWindow::handleLeftArrow(void) +{ + Point3D cameraPoint(mGraph3D->cameraPoint()); + if(shiftKeyPressed())mGraph3D->cameraTwistDegrees(mGraph3D->cameraTwistDegrees()-ThetaDelta); + else cameraPoint.x(cameraPoint.x()+TurnDelta); + mGraph3D->cameraPoint(cameraPoint); + return TRUE; +} + +bool GraphWindow::handleRightArrow(void) +{ + Point3D cameraPoint(mGraph3D->cameraPoint()); + if(shiftKeyPressed())mGraph3D->cameraTwistDegrees(mGraph3D->cameraTwistDegrees()+ThetaDelta); + else cameraPoint.x(cameraPoint.x()-TurnDelta); + mGraph3D->cameraPoint(cameraPoint); + return TRUE; +} + +void GraphWindow::setPerspective(void) +{ + mGraph3D->cameraTwistDegrees(134.64); + mGraph3D->viewPlaneDistance(40); + mGraph3D->cameraPoint(Point3D(-385,75,75)); + mGraph3D->focusPoint(Point3D(0,0,1)); +} diff --git a/Histogram/GraphWnd.hpp b/Histogram/GraphWnd.hpp new file mode 100644 index 0000000..36b8182 --- /dev/null +++ b/Histogram/GraphWnd.hpp @@ -0,0 +1,92 @@ +#ifndef _HISTOGRAM_GRAPHWINDOW_HPP_ +#define _HISTOGRAM_GRAPHWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_PUREPALETTE_HPP_ +#include +#endif +//#ifndef _HISTOGRAM_GRAPH3D_HPP_ +//#include +//#endif +//#ifndef _MUSIC_NOTE_HPP_ +//#include +//#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +template +class Block; +template +class Callback; +//template +//class PureCheck; +class Graph3D; +class Rect3D; +class ColorRect; +class FloatPairs; + +class GraphWindow : public Window +{ +public: + GraphWindow(GUIWindow &parentWindow,const Rect &winRect); + virtual ~GraphWindow(); + void showHistogram(TabEntries &entries); +// void showHistogram(Array ¬es); +// void showBalance(Block &pureChecks); +private: + enum {MaxRotate=360,MinRotate=-360}; + enum {ThetaDelta=10,ViewDelta=5,TurnDelta=20}; + enum {LeftArrow=0x25,RightArrow=0x27,UpArrow=0x26,DownArrow=0x28,inKey=0x49,outKey=0x4F}; + GraphWindow(const GraphWindow &someGraphWindow); + GraphWindow &operator=(const GraphWindow &someGraphWindow); + void registerClass(void)const; + void initializePalette(void); + void createWindow(GUIWindow &parentWindow,const Rect &winRect); + void clamp(Array &vector); +// void clamp(PureVector &vector); + void showHistogram(Array &vectorInt,BYTE paletteIndex,int zDepth=0); +// void showBalance(int baseMonths,PureVector &vectorInt,BYTE paletteIndex,int zDepth=0); + bool handleLeftArrow(void); + bool handleRightArrow(void); + bool handleUpArrow(void); + bool handleDownArrow(void); + void setPerspective(void); + bool shiftKeyPressed(void)const; + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mKeyDownHandler; + Callback mLeftButtonDownHandler; + Callback mDialogCodeHandler; + SmartPointer mGraph3D; + Block mGraphRects; + PurePalette mGraphPalette; + static char smszClassName[]; + static char smszMenuName[]; +}; + +inline +GraphWindow &GraphWindow::operator=(const GraphWindow &/*someGraphWindow*/) +{ // private implementation + return *this; +} + +inline +bool GraphWindow::shiftKeyPressed(void)const +{ + return ::GetKeyState(VK_SHIFT)&0x8000; +} +#endif diff --git a/Histogram/Histogram.rc b/Histogram/Histogram.rc new file mode 100644 index 0000000..1ea461d --- /dev/null +++ b/Histogram/Histogram.rc @@ -0,0 +1,9 @@ +GRAPHDIALOG DIALOG 6, 15, 340, 205 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Graph" +FONT 8, "MS Sans Serif" +{ + PUSHBUTTON "Dismiss", IDCANCEL, 171, 180, 50, 14 + GROUPBOX "", -1, 5, 4, 326, 166, BS_GROUPBOX + DEFPUSHBUTTON "Graph", IDOK, 119, 180, 50, 14 +} diff --git a/Histogram/histogram.dsp b/Histogram/histogram.dsp new file mode 100644 index 0000000..0735e48 --- /dev/null +++ b/Histogram/histogram.dsp @@ -0,0 +1,104 @@ +# Microsoft Developer Studio Project File - Name="histogram" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=histogram - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "histogram.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "histogram.mak" CFG="histogram - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "histogram - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "histogram - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "histogram - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "histogram - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "histogram - Win32 Release" +# Name "histogram - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\Graph3D.cpp +# End Source File +# Begin Source File + +SOURCE=.\GraphDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\GraphWnd.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/Histogram/histogram.dsw b/Histogram/histogram.dsw new file mode 100644 index 0000000..5821118 --- /dev/null +++ b/Histogram/histogram.dsw @@ -0,0 +1,59 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "engine"=..\engine\engine.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "histogram"=.\histogram.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name engine + End Project Dependency + Begin Project Dependency + Project_Dep_Name music + End Project Dependency +}}} + +############################################################################### + +Project: "music"=..\music\music.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Histogram/histogram.ncb b/Histogram/histogram.ncb new file mode 100644 index 0000000..6ff0273 Binary files /dev/null and b/Histogram/histogram.ncb differ diff --git a/Histogram/histogram.opt b/Histogram/histogram.opt new file mode 100644 index 0000000..544382c Binary files /dev/null and b/Histogram/histogram.opt differ diff --git a/Histogram/histogram.plg b/Histogram/histogram.plg new file mode 100644 index 0000000..71bc285 --- /dev/null +++ b/Histogram/histogram.plg @@ -0,0 +1,31 @@ + + +
+

Build Log

+

+--------------------Configuration: histogram - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP27E.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /Fp"Debug/histogram.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"F:\work\Histogram\Graph3D.cpp" +"F:\work\Histogram\GraphDlg.cpp" +"F:\work\Histogram\GraphWnd.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP27E.tmp" +Creating command line "link.exe -lib /nologo /out:"Debug\histogram.lib" .\Debug\Graph3D.obj .\Debug\GraphDlg.obj .\Debug\GraphWnd.obj \work\exe\msengine.lib \work\exe\music.lib " +

Output Window

+Compiling... +Graph3D.cpp +GraphDlg.cpp +GraphWnd.cpp +Creating library... + + + +

Results

+histogram.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/Histogram/scraps.txt b/Histogram/scraps.txt new file mode 100644 index 0000000..ee68689 --- /dev/null +++ b/Histogram/scraps.txt @@ -0,0 +1,92 @@ +/* + Array vectorCDB; + Array vectorInt; + int itemIndex; + int fvectorIndex; + + mGraphRects.remove(); + setPerspective(); + vectorCDB.size(pureChecks.size()*3); + vectorInt.size(pureChecks.size()); + + for(itemIndex=0,vectorIndex=0;itemIndexgetPalette().paletteIndex(RGBColor(255,255,255))); + for(itemIndex=0;itemIndexgetPalette().paletteIndex(RGBColor(255,0,0)),10); + for(itemIndex=0;itemIndexgetPalette().paletteIndex(RGBColor(0,255,0)),20); +*/ + + + + + + +/* + Array vectorCDB; + Array vectorInt; + int itemIndex; + int vectorIndex; + + mGraphRects.remove(); + setPerspective(); + vectorCDB.size(entries.size()); + vectorInt.size(entries.size()); + + for(itemIndex=0,vectorIndex=0;itemIndexgetPalette().paletteIndex(RGBColor(255,255,255))); +// showHistogram(vectorInt,mGraph3D->getPalette().paletteIndex(RGBColor(255,255,255))); +// } + + + +/* +void GraphWindow::clamp(Array &vector) +{ + float factor=0.00; + float vectorMax; + + if(!vector.size())return; + for(int itemIndex=0;itemIndexvectorMax)vectorMax=vector[itemIndex].column(); + } + factor=(1.00/(float)vectorMax); + for(itemIndex=0;itemIndex +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +class BltEffects : private DDBLTFX +{ +public: + BltEffects(void); + BltEffects(const BltEffects &someBltEffects); + BltEffects(const DDBLTFX &someDDBLTFX); + virtual ~BltEffects(); + BltEffects &operator=(const BltEffects &someBltEffects); + BltEffects &operator=(const DDBLTFX &someDDBLTFX); + DWORD ddFx(void)const; + void ddFx(DWORD ddFx); + DWORD rop(void)const; + void rop(DWORD rop); + DWORD ddRop(void)const; + void ddRop(DWORD ddRop); + DWORD rotationAngle(void)const; + void rotationAngle(DWORD rotationAngle); + DWORD zBufferOpCode(void)const; + void zBufferOpCode(DWORD zBufferOpCode); + DWORD zBufferLow(void)const; + void zBufferLow(DWORD zBufferLow); + DWORD zBufferHigh(void)const; + void zBufferHigh(DWORD zBufferHigh); + DWORD zBufferBaseDest(void)const; + void zBufferBaseDest(DWORD zBufferBaseDest); + DWORD zDestConstBitDepth(void)const; + void zDestConstBitDepth(DWORD zDestConstBitDepth); + DWORD zDestConst(void)const; + void zDestConst(DWORD zDestConst); + LPDIRECTDRAWSURFACE szBufferDest(void); + void szBufferDest(LPDIRECTDRAWSURFACE lpDirectDrawSurface); + DWORD zSrcConstBitDepth(void)const; + void zSrcConstBitDepth(DWORD zSrcConstBitDepth); + DWORD zSrcConst(void)const; + void zSrcConst(DWORD zSrcConst); + LPDIRECTDRAWSURFACE szBufferSrc(void); + void szBufferSrc(LPDIRECTDRAWSURFACE lpDirectDrawSurface); + DWORD alphaEdgeBlendBitDepth(void)const; + void alphaEdgeBlendBitDepth(DWORD alphaEdgeBlendBitDepth); + DWORD alphaEdgeBlend(void)const; + void alphaEdgeBlend(DWORD alphaEdgeBlend); + DWORD alphaDestConstBitDepth(void)const; + void alphaDestConstBitDepth(DWORD alphaDestConstBitDepth); + DWORD alphaDestConst(void)const; + void alphaDestConst(DWORD alphaDestConst); + LPDIRECTDRAWSURFACE lpAlphaDest(void); + void lpAlphaDest(LPDIRECTDRAWSURFACE lpAlphaConst); + DWORD alphaSrcConstBitDepth(void)const; + void alphaSrcConstBitDepth(DWORD alphaSrcConstBitDepth); + DWORD alphaSrcConst(void)const; + void alphaSrcConst(DWORD alphaSrcConst); + LPDIRECTDRAWSURFACE alphaSrc(void); + void alphaSrc(LPDIRECTDRAWSURFACE alphaSrc); + DWORD fillColor(void)const; + void fillColor(DWORD fillColor); + DWORD fillDepth(void)const; + void fillDepth(DWORD fillDepth); + DWORD fillPixel(void)const; + void fillPixel(DWORD fillPixel); + LPDIRECTDRAWSURFACE ddsPattern(void); + void ddsPattern(LPDIRECTDRAWSURFACE ddsPattern); + const DDCOLORKEY &ckDestColorKey(void)const; + void ckDestColorKey(const DDCOLORKEY &ckDestColorKey); + const DDCOLORKEY &ckSrcColorKey(void)const; + void ckSrcColorKey(const DDCOLORKEY &ckSrcColorKey); + DDBLTFX &getDDBLTFX(void); +private: + void zeroInit(void); +}; + +inline +BltEffects::BltEffects(void) +{ + zeroInit(); +} + +inline +BltEffects::BltEffects(const BltEffects &someBltEffects) +{ + zeroInit(); + *this=someBltEffects; +} + +inline +BltEffects::BltEffects(const DDBLTFX &someDDBLTFX) +{ + zeroInit(); + *this=someDDBLTFX; +} + +inline +BltEffects::~BltEffects() +{ +} + +inline +BltEffects &BltEffects::operator=(const BltEffects &someBltEffects) +{ + ddFx(someBltEffects.ddFx()); + rop(someBltEffects.rop()); + ddRop(someBltEffects.ddRop()); + rotationAngle(someBltEffects.rotationAngle()); + zBufferOpCode(someBltEffects.zBufferOpCode()); + zBufferLow(someBltEffects.zBufferLow()); + zBufferHigh(someBltEffects.zBufferHigh()); + zBufferBaseDest(someBltEffects.zBufferBaseDest()); + zDestConstBitDepth(someBltEffects.zDestConstBitDepth()); + zDestConst(someBltEffects.zDestConst()); + zSrcConstBitDepth(someBltEffects.zSrcConstBitDepth()); + zSrcConst(someBltEffects.zSrcConst()); + alphaEdgeBlendBitDepth(someBltEffects.alphaEdgeBlendBitDepth()); + alphaEdgeBlend(someBltEffects.alphaEdgeBlend()); + alphaDestConstBitDepth(someBltEffects.alphaDestConstBitDepth()); + alphaDestConst(someBltEffects.alphaDestConst()); + alphaSrcConstBitDepth(someBltEffects.alphaSrcConstBitDepth()); + alphaSrcConst(someBltEffects.alphaSrcConst()); + fillColor(someBltEffects.fillColor()); + ckDestColorKey(someBltEffects.ckDestColorKey()); + ckSrcColorKey(someBltEffects.ckSrcColorKey()); + return *this; +} + +inline +BltEffects &BltEffects::operator=(const DDBLTFX &someDDBLTFX) +{ + ddFx(someDDBLTFX.dwDDFX); + rop(someDDBLTFX.dwROP); + ddRop(someDDBLTFX.dwDDROP); + rotationAngle(someDDBLTFX.dwRotationAngle); + zBufferOpCode(someDDBLTFX.dwZBufferOpCode); + zBufferLow(someDDBLTFX.dwZBufferLow); + zBufferHigh(someDDBLTFX.dwZBufferHigh); + zBufferBaseDest(someDDBLTFX.dwZBufferBaseDest); + zDestConstBitDepth(someDDBLTFX.dwZDestConstBitDepth); + zDestConst(someDDBLTFX.dwZDestConst); + zSrcConstBitDepth(someDDBLTFX.dwZSrcConstBitDepth); + zSrcConst(someDDBLTFX.dwZSrcConst); + alphaEdgeBlendBitDepth(someDDBLTFX.dwAlphaEdgeBlendBitDepth); + alphaEdgeBlend(someDDBLTFX.dwAlphaEdgeBlend); + alphaDestConstBitDepth(someDDBLTFX.dwAlphaDestConstBitDepth); + alphaDestConst(someDDBLTFX.dwAlphaDestConst); + alphaSrcConstBitDepth(someDDBLTFX.dwAlphaSrcConstBitDepth); + alphaSrcConst(someDDBLTFX.dwAlphaSrcConst); + fillColor(someDDBLTFX.dwFillColor); + ckDestColorKey(someDDBLTFX.ddckDestColorkey); + ckSrcColorKey(someDDBLTFX.ddckDestColorkey); + return *this; +} + +inline +DWORD BltEffects::ddFx(void)const +{ + return DDBLTFX::dwDDFX; +} + +inline +void BltEffects::ddFx(DWORD ddFx) +{ + DDBLTFX::dwDDFX=ddFx; +} + +inline +DWORD BltEffects::rop(void)const +{ + return DDBLTFX::dwROP; +} + +inline +void BltEffects::rop(DWORD rop) +{ + DDBLTFX::dwROP=rop; +} + +inline +DWORD BltEffects::ddRop(void)const +{ + return DDBLTFX::dwDDROP; +} + +inline +void BltEffects::ddRop(DWORD ddRop) +{ + DDBLTFX::dwDDROP=ddRop; +} + +inline +DWORD BltEffects::rotationAngle(void)const +{ + return DDBLTFX::dwRotationAngle; +} + +inline +void BltEffects::rotationAngle(DWORD rotationAngle) +{ + DDBLTFX::dwRotationAngle=rotationAngle; +} + +inline +DWORD BltEffects::zBufferOpCode(void)const +{ + return DDBLTFX::dwZBufferOpCode; +} + +inline +void BltEffects::zBufferOpCode(DWORD zBufferOpCode) +{ + DDBLTFX::dwZBufferOpCode=zBufferOpCode; +} + +inline +DWORD BltEffects::zBufferLow(void)const +{ + return DDBLTFX::dwZBufferLow; +} + +inline +void BltEffects::zBufferLow(DWORD zBufferLow) +{ + DDBLTFX::dwZBufferLow=zBufferLow; +} + +inline +DWORD BltEffects::zBufferHigh(void)const +{ + return DDBLTFX::dwZBufferHigh; +} + +inline +void BltEffects::zBufferHigh(DWORD zBufferHigh) +{ + DDBLTFX::dwZBufferHigh=zBufferHigh; +} + +inline +DWORD BltEffects::zBufferBaseDest(void)const +{ + return DDBLTFX::dwZBufferBaseDest; +} + +inline +void BltEffects::zBufferBaseDest(DWORD zBufferBaseDest) +{ + DDBLTFX::dwZBufferBaseDest=zBufferBaseDest; +} + +inline +DWORD BltEffects::zDestConstBitDepth(void)const +{ + return DDBLTFX::dwZDestConstBitDepth; +} + +inline +void BltEffects::zDestConstBitDepth(DWORD zDestConstBitDepth) +{ + DDBLTFX::dwZDestConstBitDepth=zDestConstBitDepth; +} + +inline +DWORD BltEffects::zDestConst(void)const +{ + return DDBLTFX::dwZDestConst; +} + +inline +void BltEffects::zDestConst(DWORD zDestConst) +{ + DDBLTFX::dwZDestConst=zDestConst; +} + +inline +LPDIRECTDRAWSURFACE BltEffects::szBufferDest(void) +{ + return DDBLTFX::lpDDSZBufferDest; +} + +inline +void BltEffects::szBufferDest(LPDIRECTDRAWSURFACE lpDirectDrawSurface) +{ + DDBLTFX::lpDDSZBufferDest=lpDirectDrawSurface; +} + +inline +DWORD BltEffects::zSrcConstBitDepth(void)const +{ + return DDBLTFX::dwZSrcConstBitDepth; +} + +inline +void BltEffects::zSrcConstBitDepth(DWORD zSrcConstBitDepth) +{ + DDBLTFX::dwZSrcConstBitDepth=zSrcConstBitDepth; +} + +inline +DWORD BltEffects::zSrcConst(void)const +{ + return DDBLTFX::dwZSrcConst; +} + +inline +void BltEffects::zSrcConst(DWORD zSrcConst) +{ + DDBLTFX::dwZSrcConst; +} + +inline +LPDIRECTDRAWSURFACE BltEffects::szBufferSrc(void) +{ + return DDBLTFX::lpDDSZBufferSrc; +} + +inline +void BltEffects::szBufferSrc(LPDIRECTDRAWSURFACE lpDirectDrawSurface) +{ + DDBLTFX::lpDDSZBufferSrc=lpDirectDrawSurface; +} + +inline +DWORD BltEffects::alphaEdgeBlendBitDepth(void)const +{ + return DDBLTFX::dwAlphaEdgeBlendBitDepth; +} + +inline +void BltEffects::alphaEdgeBlendBitDepth(DWORD alphaEdgeBlendBitDepth) +{ + DDBLTFX::dwAlphaEdgeBlendBitDepth=alphaEdgeBlendBitDepth; +} + +inline +DWORD BltEffects::alphaEdgeBlend(void)const +{ + return DDBLTFX::dwAlphaEdgeBlend; +} + +inline +void BltEffects::alphaEdgeBlend(DWORD alphaEdgeBlend) +{ + DDBLTFX::dwAlphaEdgeBlend=alphaEdgeBlend; +} + +inline +DWORD BltEffects::alphaDestConstBitDepth(void)const +{ + return DDBLTFX::dwAlphaDestConstBitDepth; +} + +inline +void BltEffects::alphaDestConstBitDepth(DWORD alphaDestConstBitDepth) +{ + DDBLTFX::dwAlphaDestConstBitDepth=alphaDestConstBitDepth; +} + +inline +DWORD BltEffects::alphaDestConst(void)const +{ + return DDBLTFX::dwAlphaDestConst; +} + +inline +void BltEffects::alphaDestConst(DWORD alphaDestConst) +{ + DDBLTFX::dwAlphaDestConst=alphaDestConst; +} + +inline +LPDIRECTDRAWSURFACE BltEffects::lpAlphaDest(void) +{ + return DDBLTFX::lpDDSAlphaDest; +} + +inline +void BltEffects::lpAlphaDest(LPDIRECTDRAWSURFACE lpAlphaConst) +{ + DDBLTFX::lpDDSAlphaDest=lpAlphaConst; +} + +inline +DWORD BltEffects::alphaSrcConstBitDepth(void)const +{ + return DDBLTFX::dwAlphaSrcConstBitDepth; +} + +inline +void BltEffects::alphaSrcConstBitDepth(DWORD alphaSrcConstBitDepth) +{ + DDBLTFX::dwAlphaSrcConstBitDepth=alphaSrcConstBitDepth; +} + +inline +DWORD BltEffects::alphaSrcConst(void)const +{ + return DDBLTFX::dwAlphaSrcConst; +} + +inline +void BltEffects::alphaSrcConst(DWORD alphaSrcConst) +{ + DDBLTFX::dwAlphaSrcConst=alphaSrcConst; +} + +inline +LPDIRECTDRAWSURFACE BltEffects::alphaSrc(void) +{ + return DDBLTFX::lpDDSAlphaSrc; +} + +inline +void BltEffects::alphaSrc(LPDIRECTDRAWSURFACE alphaSrc) +{ + DDBLTFX::lpDDSAlphaSrc=alphaSrc; +} + +inline +DWORD BltEffects::fillColor(void)const +{ + return DDBLTFX::dwFillColor; +} + +inline +void BltEffects::fillColor(DWORD fillColor) +{ + DDBLTFX::dwFillColor=fillColor; +} + +inline +DWORD BltEffects::fillDepth(void)const +{ + return DDBLTFX::dwFillDepth; +} + +inline +void BltEffects::fillDepth(DWORD fillDepth) +{ + DDBLTFX::dwFillDepth=fillDepth; +} + +inline +DWORD BltEffects::fillPixel(void)const +{ + return DDBLTFX::dwFillPixel; +} + +inline +void BltEffects::fillPixel(DWORD fillPixel) +{ + DDBLTFX::dwFillPixel=fillPixel; +} + +inline +LPDIRECTDRAWSURFACE BltEffects::ddsPattern(void) +{ + return DDBLTFX::lpDDSPattern; +} + +inline +void BltEffects::ddsPattern(LPDIRECTDRAWSURFACE ddsPattern) +{ + DDBLTFX::lpDDSPattern=ddsPattern; +} + +inline +const DDCOLORKEY &BltEffects::ckDestColorKey(void)const +{ + return DDBLTFX::ddckDestColorkey; +} + +inline +void BltEffects::ckDestColorKey(const DDCOLORKEY &ckDestColorKey) +{ + DDBLTFX::ddckDestColorkey=ckDestColorKey; +} + +inline +const DDCOLORKEY &BltEffects::ckSrcColorKey(void)const +{ + return DDBLTFX::ddckSrcColorkey; +} + +inline +void BltEffects::ckSrcColorKey(const DDCOLORKEY &ckSrcColorKey) +{ + DDBLTFX::ddckSrcColorkey=ckSrcColorKey; +} + +inline +DDBLTFX &BltEffects::getDDBLTFX(void) +{ + return (DDBLTFX&)*this; +} + +inline +void BltEffects::zeroInit(void) +{ + ::memset(&getDDBLTFX(),0,sizeof(DDBLTFX)); + DDBLTFX::dwSize=sizeof(DDBLTFX); +} +#endif diff --git a/ddraw/DDRAW.BAK b/ddraw/DDRAW.BAK new file mode 100644 index 0000000..019ee3a --- /dev/null +++ b/ddraw/DDRAW.BAK @@ -0,0 +1,873 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=ddraw - Win32 Debug +!MESSAGE No configuration specified. Defaulting to ddraw - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "ddraw - Win32 Release" && "$(CFG)" != "ddraw - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "ddraw.mak" CFG="ddraw - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ddraw - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "ddraw - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "ddraw - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "ddraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\ddraw.exe" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(OUTDIR)\ddraw.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/ddraw.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/ddraw.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/ddraw.pdb" /machine:I386 /out:"$(OUTDIR)/ddraw.exe" +LINK32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msengine.lib" + +"$(OUTDIR)\ddraw.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\ddraw.exe" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(INTDIR)\Tmap32.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\ddraw.exe" + -@erase "$(OUTDIR)\ddraw.ilk" + -@erase "$(OUTDIR)\ddraw.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/ddraw.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/ddraw.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ddraw.lib dxguid.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ddraw.lib dxguid.lib\ + /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)/ddraw.pdb" /debug\ + /machine:I386 /out:"$(OUTDIR)/ddraw.exe" +LINK32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" \ + "$(INTDIR)\Tmap32.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msengine.lib" + +"$(OUTDIR)\ddraw.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "ddraw - Win32 Release" +# Name "ddraw - Win32 Debug" + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "ddraw - Win32 Release" + +DEP_CPP_MAIN_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +DEP_CPP_MAIN_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\devenum.cpp +DEP_CPP_DEVEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\devenum.obj" : $(SOURCE) $(DEP_CPP_DEVEN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp +DEP_CPP_MAINW=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Keydata.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Asmutil.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Texture.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\dspenum.cpp +DEP_CPP_DSPEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\dspenum.obj" : $(SOURCE) $(DEP_CPP_DSPEN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\draw.cpp +DEP_CPP_DRAW_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\draw.obj" : $(SOURCE) $(DEP_CPP_DRAW_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\direct3d.cpp +DEP_CPP_DIREC=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\direct3d.obj" : $(SOURCE) $(DEP_CPP_DIREC) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\palette.cpp +DEP_CPP_PALET=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\palette.obj" : $(SOURCE) $(DEP_CPP_PALET) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\drawsfc.cpp +DEP_CPP_DRAWS=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\drawsfc.obj" : $(SOURCE) $(DEP_CPP_DRAWS) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Tmap32.asm + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\msvcobj +InputPath=.\Tmap32.asm +InputName=Tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + tasm32 /zi /c /ml /m3 $(InputName).asm $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\texture.cpp + +!IF "$(CFG)" == "ddraw - Win32 Release" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msengine.lib + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/ddraw/DDRAW.DSW b/ddraw/DDRAW.DSW new file mode 100644 index 0000000..fcd1ea2 --- /dev/null +++ b/ddraw/DDRAW.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "ddraw"=.\ddraw.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/ddraw/DDRAW.HPP b/ddraw/DDRAW.HPP new file mode 100644 index 0000000..eb6cf04 --- /dev/null +++ b/ddraw/DDRAW.HPP @@ -0,0 +1,5 @@ +#ifndef _DDRAW_DDRAW_HPP_ +#define _DDRAW_DDRAW_HPP_ +#include +#include +#endif diff --git a/ddraw/DDRAW.MAK b/ddraw/DDRAW.MAK new file mode 100644 index 0000000..019ee3a --- /dev/null +++ b/ddraw/DDRAW.MAK @@ -0,0 +1,873 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=ddraw - Win32 Debug +!MESSAGE No configuration specified. Defaulting to ddraw - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "ddraw - Win32 Release" && "$(CFG)" != "ddraw - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "ddraw.mak" CFG="ddraw - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ddraw - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "ddraw - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "ddraw - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "ddraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\ddraw.exe" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(OUTDIR)\ddraw.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/ddraw.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/ddraw.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/ddraw.pdb" /machine:I386 /out:"$(OUTDIR)/ddraw.exe" +LINK32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msengine.lib" + +"$(OUTDIR)\ddraw.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\ddraw.exe" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(INTDIR)\Tmap32.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\ddraw.exe" + -@erase "$(OUTDIR)\ddraw.ilk" + -@erase "$(OUTDIR)\ddraw.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/ddraw.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/ddraw.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ddraw.lib dxguid.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ddraw.lib dxguid.lib\ + /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)/ddraw.pdb" /debug\ + /machine:I386 /out:"$(OUTDIR)/ddraw.exe" +LINK32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" \ + "$(INTDIR)\Tmap32.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msengine.lib" + +"$(OUTDIR)\ddraw.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "ddraw - Win32 Release" +# Name "ddraw - Win32 Debug" + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "ddraw - Win32 Release" + +DEP_CPP_MAIN_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +DEP_CPP_MAIN_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\devenum.cpp +DEP_CPP_DEVEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\devenum.obj" : $(SOURCE) $(DEP_CPP_DEVEN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp +DEP_CPP_MAINW=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Keydata.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Asmutil.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Texture.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\dspenum.cpp +DEP_CPP_DSPEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\dspenum.obj" : $(SOURCE) $(DEP_CPP_DSPEN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\draw.cpp +DEP_CPP_DRAW_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\draw.obj" : $(SOURCE) $(DEP_CPP_DRAW_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\direct3d.cpp +DEP_CPP_DIREC=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\direct3d.obj" : $(SOURCE) $(DEP_CPP_DIREC) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\palette.cpp +DEP_CPP_PALET=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\palette.obj" : $(SOURCE) $(DEP_CPP_PALET) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\drawsfc.cpp +DEP_CPP_DRAWS=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\drawsfc.obj" : $(SOURCE) $(DEP_CPP_DRAWS) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Tmap32.asm + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\msvcobj +InputPath=.\Tmap32.asm +InputName=Tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + tasm32 /zi /c /ml /m3 $(InputName).asm $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\texture.cpp + +!IF "$(CFG)" == "ddraw - Win32 Release" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\Ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msengine.lib + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/ddraw/DDRAW.MDP b/ddraw/DDRAW.MDP new file mode 100644 index 0000000..239ff84 Binary files /dev/null and b/ddraw/DDRAW.MDP differ diff --git a/ddraw/DDRAW.PLG b/ddraw/DDRAW.PLG new file mode 100644 index 0000000..d73233a --- /dev/null +++ b/ddraw/DDRAW.PLG @@ -0,0 +1,540 @@ + + +
+

Build Log

+

+--------------------Configuration: ddraw - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP2A.tmp" with contents +[ +/nologo /Zp1 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/ddraw.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\DDRAW\devenum.cpp" +"D:\work\DDRAW\direct3d.cpp" +"D:\work\DDRAW\draw.cpp" +"D:\work\DDRAW\drawsfc.cpp" +"D:\work\DDRAW\dspenum.cpp" +"D:\work\DDRAW\Main.cpp" +"D:\work\DDRAW\Mainwnd.cpp" +"D:\work\DDRAW\palette.cpp" +"D:\work\DDRAW\texture.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP2A.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP2B.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ddraw.lib c:\parts\mssdk\lib\dxguid.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/ddraw.pdb" /debug /machine:I386 /out:".\msvcobj/ddraw.exe" +.\msvcobj\devenum.obj +.\msvcobj\direct3d.obj +.\msvcobj\draw.obj +.\msvcobj\drawsfc.obj +.\msvcobj\dspenum.obj +.\msvcobj\Main.obj +.\msvcobj\Mainwnd.obj +.\msvcobj\palette.obj +.\msvcobj\texture.obj +..\Exe\mscommon.lib +..\Exe\msengine.lib +.\msvcobj\Tmap32.obj +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP2B.tmp" +

Output Window

+Compiling... +devenum.cpp +direct3d.cpp +d:\work\ddraw\direct3d.hpp(18) : error C2065: 'IDirect3D3' : undeclared identifier +d:\work\ddraw\direct3d.hpp(19) : fatal error C1903: unable to recover from previous error(s); stopping compilation +draw.cpp +d:\work\ddraw\draw.hpp(27) : error C2065: 'DDSCL_MULTITHREADED' : undeclared identifier +d:\work\ddraw\draw.hpp(27) : error C2057: expected constant expression +d:\work\ddraw\draw.hpp(28) : error C2065: 'DDSCL_FPUSETUP' : undeclared identifier +d:\work\ddraw\draw.hpp(28) : error C2057: expected constant expression +d:\work\ddraw\draw.hpp(51) : error C2065: 'IDirectDraw4' : undeclared identifier +d:\work\ddraw\draw.hpp(51) : error C2955: 'SmartPointer' : use of class template requires template argument list + d:\work\common\pointer.hpp(34) : see declaration of 'SmartPointer' +d:\work\ddraw\draw.hpp(51) : fatal error C1903: unable to recover from previous error(s); stopping compilation +drawsfc.cpp +d:\work\ddraw\pixform.hpp(13) : error C2065: 'DDPF_ALPHAPREMULT' : undeclared identifier +d:\work\ddraw\pixform.hpp(13) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(14) : error C2065: 'DDPF_BUMPLUMINANCE' : undeclared identifier +d:\work\ddraw\pixform.hpp(14) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(14) : error C2065: 'DDPF_BUMPDUDV' : undeclared identifier +d:\work\ddraw\pixform.hpp(14) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(15) : error C2065: 'DDPF_LUMINANCE' : undeclared identifier +d:\work\ddraw\pixform.hpp(15) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(18) : error C2065: 'DDPF_STENCILBUFFER' : undeclared identifier +d:\work\ddraw\pixform.hpp(18) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(214) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(214) : error C2065: 'dwLuminanceBitCount' : undeclared identifier +d:\work\ddraw\pixform.hpp(220) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(226) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(226) : error C2065: 'dwBumpBitCount' : undeclared identifier +d:\work\ddraw\pixform.hpp(232) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(286) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(286) : error C2065: 'dwZBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(292) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(322) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(322) : error C2065: 'dwStencilBitDepth' : undeclared identifier +d:\work\ddraw\pixform.hpp(328) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(334) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(334) : error C2065: 'dwLuminanceBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(340) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(346) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(346) : error C2065: 'dwBumpDuBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(352) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(358) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(358) : error C2065: 'dwBumpDvBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(364) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(370) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(370) : error C2065: 'dwStencilBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(376) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(382) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(382) : error C2065: 'dwBumpLuminanceBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(388) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(418) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(418) : error C2065: 'dwLuminanceAlphaBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(424) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\sfccaps.hpp(8) : error C2504: 'DDSCAPS2' : base class undefined +d:\work\ddraw\sfccaps.hpp(19) : error C2065: 'DDSCAPS2_HARDWAREDEINTERLACE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(19) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTANTIALIASING' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTDYNAMIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_HINTSTATIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_OPAQUE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_TEXTUREMANAGE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(24) : error C2629: unexpected 'class SurfaceCapabilities (' +d:\work\ddraw\sfccaps.hpp(24) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfccaps.hpp(28) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(28) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(40) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(40) : error C2065: 'dwCaps' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(41) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(41) : error C2065: 'dwCaps2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(42) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(42) : error C2065: 'dwCaps3' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(43) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(43) : error C2065: 'dwCaps4' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(55) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(56) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(57) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(58) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(62) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(62) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(63) : error C2511: 'SurfaceCapabilities::SurfaceCapabilities' : overloaded member function 'void (const int)' not found in 'SurfaceCapabilities' + d:\work\ddraw\sfccaps.hpp(7) : see declaration of 'SurfaceCapabilities' +d:\work\ddraw\sfccaps.hpp(81) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(81) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(83) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(83) : error C2065: 'someDDSCAPS2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(83) : error C2228: left of '.dwCaps' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(84) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(84) : error C2228: left of '.dwCaps2' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(85) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(85) : error C2228: left of '.dwCaps3' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(86) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(86) : error C2228: left of '.dwCaps4' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(93) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(99) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(105) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(111) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(115) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(115) : error C2433: 'DDSCAPS2' : 'inline' not permitted on data declarations +d:\work\ddraw\sfccaps.hpp(115) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(116) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(117) : error C2059: syntax error : ')' +d:\work\ddraw\sfcdesc.hpp(11) : error C2504: 'DDSURFACEDESC2' : base class undefined +d:\work\ddraw\sfcdesc.hpp(18) : error C2065: 'DDSD_TEXTURESTAGE' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(18) : error C2057: expected constant expression +d:\work\ddraw\sfcdesc.hpp(21) : error C2629: unexpected 'class SurfaceDescription (' +d:\work\ddraw\sfcdesc.hpp(21) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfcdesc.hpp(24) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfcdesc.hpp(24) : fatal error C1003: error count exceeds 100; stopping compilation +dspenum.cpp +d:\work\ddraw\sfccaps.hpp(8) : error C2504: 'DDSCAPS2' : base class undefined +d:\work\ddraw\sfccaps.hpp(19) : error C2065: 'DDSCAPS2_HARDWAREDEINTERLACE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(19) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTANTIALIASING' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTDYNAMIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_HINTSTATIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_OPAQUE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_TEXTUREMANAGE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(24) : error C2629: unexpected 'class SurfaceCapabilities (' +d:\work\ddraw\sfccaps.hpp(24) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfccaps.hpp(28) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(28) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(40) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(40) : error C2065: 'dwCaps' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(41) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(41) : error C2065: 'dwCaps2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(42) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(42) : error C2065: 'dwCaps3' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(43) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(43) : error C2065: 'dwCaps4' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(55) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(56) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(57) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(58) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(62) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(62) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(63) : error C2511: 'SurfaceCapabilities::SurfaceCapabilities' : overloaded member function 'void (const int)' not found in 'SurfaceCapabilities' + d:\work\ddraw\sfccaps.hpp(7) : see declaration of 'SurfaceCapabilities' +d:\work\ddraw\sfccaps.hpp(81) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(81) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(83) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(83) : error C2065: 'someDDSCAPS2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(83) : error C2228: left of '.dwCaps' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(84) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(84) : error C2228: left of '.dwCaps2' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(85) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(85) : error C2228: left of '.dwCaps3' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(86) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(86) : error C2228: left of '.dwCaps4' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(93) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(99) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(105) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(111) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(115) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(115) : error C2433: 'DDSCAPS2' : 'inline' not permitted on data declarations +d:\work\ddraw\sfccaps.hpp(115) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(116) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(117) : error C2059: syntax error : ')' +d:\work\ddraw\sfcdesc.hpp(11) : error C2504: 'DDSURFACEDESC2' : base class undefined +d:\work\ddraw\sfcdesc.hpp(18) : error C2065: 'DDSD_TEXTURESTAGE' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(18) : error C2057: expected constant expression +d:\work\ddraw\sfcdesc.hpp(21) : error C2629: unexpected 'class SurfaceDescription (' +d:\work\ddraw\sfcdesc.hpp(21) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfcdesc.hpp(24) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfcdesc.hpp(24) : error C2059: syntax error : '&' +d:\work\ddraw\sfcdesc.hpp(59) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfcdesc.hpp(59) : error C2501: 'DDSURFACEDESC2' : missing storage-class or type specifiers +d:\work\ddraw\sfcdesc.hpp(59) : error C2501: 'getDDSURFACEDESC2' : missing storage-class or type specifiers +d:\work\ddraw\sfcdesc.hpp(77) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfcdesc.hpp(77) : error C2059: syntax error : '&' +d:\work\ddraw\sfcdesc.hpp(78) : error C2511: 'SurfaceDescription::SurfaceDescription' : overloaded member function 'void (const int)' not found in 'SurfaceDescription' + d:\work\ddraw\sfcdesc.hpp(10) : see declaration of 'SurfaceDescription' +d:\work\ddraw\sfcdesc.hpp(90) : error C2065: 'DDSURFACEDESC2' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(95) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfcdesc.hpp(95) : error C2059: syntax error : '&' +d:\work\ddraw\sfcdesc.hpp(97) : error C2065: 'someDDSURFACEDESC2' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(98) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(98) : error C2065: 'dwSize' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(105) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(105) : error C2065: 'dwFlags' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(111) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(117) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(117) : error C2065: 'dwHeight' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(123) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(129) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(129) : error C2065: 'dwWidth' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(135) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(141) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(147) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(153) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(153) : error C2065: 'dwLinearSize' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(159) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(165) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(165) : error C2065: 'dwBackBufferCount' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(171) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(177) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(177) : error C2065: 'dwMipMapCount' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(183) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(189) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(189) : error C2065: 'dwRefreshRate' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(195) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(201) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(201) : error C2065: 'dwAlphaBitDepth' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(207) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(213) : error C2653: 'DDSURFACEDESC2' : is not a class or namespace name +d:\work\ddraw\sfcdesc.hpp(213) : fatal error C1003: error count exceeds 100; stopping compilation +Main.cpp +d:\work\ddraw\pixform.hpp(13) : error C2065: 'DDPF_ALPHAPREMULT' : undeclared identifier +d:\work\ddraw\pixform.hpp(13) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(14) : error C2065: 'DDPF_BUMPLUMINANCE' : undeclared identifier +d:\work\ddraw\pixform.hpp(14) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(14) : error C2065: 'DDPF_BUMPDUDV' : undeclared identifier +d:\work\ddraw\pixform.hpp(14) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(15) : error C2065: 'DDPF_LUMINANCE' : undeclared identifier +d:\work\ddraw\pixform.hpp(15) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(18) : error C2065: 'DDPF_STENCILBUFFER' : undeclared identifier +d:\work\ddraw\pixform.hpp(18) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(214) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(214) : error C2065: 'dwLuminanceBitCount' : undeclared identifier +d:\work\ddraw\pixform.hpp(220) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(226) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(226) : error C2065: 'dwBumpBitCount' : undeclared identifier +d:\work\ddraw\pixform.hpp(232) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(286) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(286) : error C2065: 'dwZBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(292) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(322) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(322) : error C2065: 'dwStencilBitDepth' : undeclared identifier +d:\work\ddraw\pixform.hpp(328) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(334) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(334) : error C2065: 'dwLuminanceBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(340) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(346) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(346) : error C2065: 'dwBumpDuBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(352) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(358) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(358) : error C2065: 'dwBumpDvBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(364) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(370) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(370) : error C2065: 'dwStencilBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(376) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(382) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(382) : error C2065: 'dwBumpLuminanceBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(388) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(418) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(418) : error C2065: 'dwLuminanceAlphaBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(424) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\sfccaps.hpp(8) : error C2504: 'DDSCAPS2' : base class undefined +d:\work\ddraw\sfccaps.hpp(19) : error C2065: 'DDSCAPS2_HARDWAREDEINTERLACE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(19) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTANTIALIASING' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTDYNAMIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_HINTSTATIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_OPAQUE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_TEXTUREMANAGE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(24) : error C2629: unexpected 'class SurfaceCapabilities (' +d:\work\ddraw\sfccaps.hpp(24) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfccaps.hpp(28) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(28) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(40) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(40) : error C2065: 'dwCaps' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(41) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(41) : error C2065: 'dwCaps2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(42) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(42) : error C2065: 'dwCaps3' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(43) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(43) : error C2065: 'dwCaps4' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(55) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(56) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(57) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(58) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(62) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(62) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(63) : error C2511: 'SurfaceCapabilities::SurfaceCapabilities' : overloaded member function 'void (const int)' not found in 'SurfaceCapabilities' + d:\work\ddraw\sfccaps.hpp(7) : see declaration of 'SurfaceCapabilities' +d:\work\ddraw\sfccaps.hpp(81) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(81) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(83) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(83) : error C2065: 'someDDSCAPS2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(83) : error C2228: left of '.dwCaps' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(84) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(84) : error C2228: left of '.dwCaps2' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(85) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(85) : error C2228: left of '.dwCaps3' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(86) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(86) : error C2228: left of '.dwCaps4' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(93) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(99) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(105) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(111) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(115) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(115) : error C2433: 'DDSCAPS2' : 'inline' not permitted on data declarations +d:\work\ddraw\sfccaps.hpp(115) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(116) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(117) : error C2059: syntax error : ')' +d:\work\ddraw\sfcdesc.hpp(11) : error C2504: 'DDSURFACEDESC2' : base class undefined +d:\work\ddraw\sfcdesc.hpp(18) : error C2065: 'DDSD_TEXTURESTAGE' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(18) : error C2057: expected constant expression +d:\work\ddraw\sfcdesc.hpp(21) : error C2629: unexpected 'class SurfaceDescription (' +d:\work\ddraw\sfcdesc.hpp(21) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfcdesc.hpp(24) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfcdesc.hpp(24) : fatal error C1003: error count exceeds 100; stopping compilation +Mainwnd.cpp +d:\work\ddraw\pixform.hpp(13) : error C2065: 'DDPF_ALPHAPREMULT' : undeclared identifier +d:\work\ddraw\pixform.hpp(13) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(14) : error C2065: 'DDPF_BUMPLUMINANCE' : undeclared identifier +d:\work\ddraw\pixform.hpp(14) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(14) : error C2065: 'DDPF_BUMPDUDV' : undeclared identifier +d:\work\ddraw\pixform.hpp(14) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(15) : error C2065: 'DDPF_LUMINANCE' : undeclared identifier +d:\work\ddraw\pixform.hpp(15) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(18) : error C2065: 'DDPF_STENCILBUFFER' : undeclared identifier +d:\work\ddraw\pixform.hpp(18) : error C2057: expected constant expression +d:\work\ddraw\pixform.hpp(214) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(214) : error C2065: 'dwLuminanceBitCount' : undeclared identifier +d:\work\ddraw\pixform.hpp(220) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(226) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(226) : error C2065: 'dwBumpBitCount' : undeclared identifier +d:\work\ddraw\pixform.hpp(232) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(286) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(286) : error C2065: 'dwZBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(292) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(322) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(322) : error C2065: 'dwStencilBitDepth' : undeclared identifier +d:\work\ddraw\pixform.hpp(328) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(334) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(334) : error C2065: 'dwLuminanceBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(340) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(346) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(346) : error C2065: 'dwBumpDuBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(352) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(358) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(358) : error C2065: 'dwBumpDvBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(364) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(370) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(370) : error C2065: 'dwStencilBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(376) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(382) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(382) : error C2065: 'dwBumpLuminanceBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(388) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(418) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\pixform.hpp(418) : error C2065: 'dwLuminanceAlphaBitMask' : undeclared identifier +d:\work\ddraw\pixform.hpp(424) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' + d:\parts\mssdk\include\ddraw.h(388) : see declaration of '_DDPIXELFORMAT' +d:\work\ddraw\sfccaps.hpp(8) : error C2504: 'DDSCAPS2' : base class undefined +d:\work\ddraw\sfccaps.hpp(19) : error C2065: 'DDSCAPS2_HARDWAREDEINTERLACE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(19) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTANTIALIASING' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTDYNAMIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(20) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_HINTSTATIC' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_OPAQUE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(21) : error C2065: 'DDSCAPS2_TEXTUREMANAGE' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(21) : error C2057: expected constant expression +d:\work\ddraw\sfccaps.hpp(24) : error C2629: unexpected 'class SurfaceCapabilities (' +d:\work\ddraw\sfccaps.hpp(24) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfccaps.hpp(28) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(28) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(33) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(40) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(40) : error C2065: 'dwCaps' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(41) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(41) : error C2065: 'dwCaps2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(42) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(42) : error C2065: 'dwCaps3' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(43) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(43) : error C2065: 'dwCaps4' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(55) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(56) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(57) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(58) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(62) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(62) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(63) : error C2511: 'SurfaceCapabilities::SurfaceCapabilities' : overloaded member function 'void (const int)' not found in 'SurfaceCapabilities' + d:\work\ddraw\sfccaps.hpp(7) : see declaration of 'SurfaceCapabilities' +d:\work\ddraw\sfccaps.hpp(81) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfccaps.hpp(81) : error C2059: syntax error : '&' +d:\work\ddraw\sfccaps.hpp(83) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(83) : error C2065: 'someDDSCAPS2' : undeclared identifier +d:\work\ddraw\sfccaps.hpp(83) : error C2228: left of '.dwCaps' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(84) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(84) : error C2228: left of '.dwCaps2' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(85) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(85) : error C2228: left of '.dwCaps3' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(86) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(86) : error C2228: left of '.dwCaps4' must have class/struct/union type +d:\work\ddraw\sfccaps.hpp(93) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(99) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(105) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(111) : error C2653: 'DDSCAPS2' : is not a class or namespace name +d:\work\ddraw\sfccaps.hpp(115) : error C2143: syntax error : missing ';' before '&' +d:\work\ddraw\sfccaps.hpp(115) : error C2433: 'DDSCAPS2' : 'inline' not permitted on data declarations +d:\work\ddraw\sfccaps.hpp(115) : error C2501: 'DDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(116) : error C2501: 'getDDSCAPS2' : missing storage-class or type specifiers +d:\work\ddraw\sfccaps.hpp(117) : error C2059: syntax error : ')' +d:\work\ddraw\sfcdesc.hpp(11) : error C2504: 'DDSURFACEDESC2' : base class undefined +d:\work\ddraw\sfcdesc.hpp(18) : error C2065: 'DDSD_TEXTURESTAGE' : undeclared identifier +d:\work\ddraw\sfcdesc.hpp(18) : error C2057: expected constant expression +d:\work\ddraw\sfcdesc.hpp(21) : error C2629: unexpected 'class SurfaceDescription (' +d:\work\ddraw\sfcdesc.hpp(21) : error C2238: unexpected token(s) preceding ';' +d:\work\ddraw\sfcdesc.hpp(24) : error C2143: syntax error : missing ',' before '&' +d:\work\ddraw\sfcdesc.hpp(24) : fatal error C1003: error count exceeds 100; stopping compilation +palette.cpp +d:\work\ddraw\palette.hpp(21) : error C2065: 'DDPCAPS_ALPHA' : undeclared identifier +d:\work\ddraw\palette.hpp(21) : error C2057: expected constant expression +texture.cpp +cl.exe terminated at user request. + +
+ + diff --git a/ddraw/DEVDESC.HPP b/ddraw/DEVDESC.HPP new file mode 100644 index 0000000..b88fcd4 --- /dev/null +++ b/ddraw/DEVDESC.HPP @@ -0,0 +1,156 @@ +#ifndef _DDRAW_DEVICEDESCRIPTION_HPP_ +#define _DDRAW_DEVICEDESCRIPTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +class DeviceDescription +{ +public: + DeviceDescription(void); + DeviceDescription(const DeviceDescription &someDeviceDescription); + virtual ~DeviceDescription(); + DeviceDescription &operator=(const DeviceDescription &someDeviceDescription); + const GUID &guid(void)const; + void guid(const GUID &guid); + const String &deviceName(void)const; + void deviceName(const String &deviceName); + const String &deviceDescription(void)const; + void deviceDescription(const String &deviceDescription); + const D3DDEVICEDESC &hwDeviceDescription(void)const; + void hwDeviceDescription(const D3DDEVICEDESC &hwDeviceDescription); + const D3DDEVICEDESC &swDeviceDescription(void)const; + void swDeviceDescription(const D3DDEVICEDESC &swDeviceDescription); + BOOL isHardware(void)const; + BOOL selected(void)const; + void selected(BOOL selected); +private: + void zeroInit(void); + + GUID mGUID; + String mDeviceName; + String mDeviceDescription; + D3DDEVICEDESC mHWDeviceDescription; + D3DDEVICEDESC mSWDeviceDescription; + BOOL mIsSelected; +}; + +inline +DeviceDescription::DeviceDescription(void) +{ + zeroInit(); +} + +inline +DeviceDescription::DeviceDescription(const DeviceDescription &someDeviceDescription) +{ + *this=someDeviceDescription; +} + +inline +DeviceDescription::~DeviceDescription() +{ +} + +inline +DeviceDescription &DeviceDescription::operator=(const DeviceDescription &someDeviceDescription) +{ + guid(someDeviceDescription.guid()); + deviceName(someDeviceDescription.deviceName()); + deviceDescription(someDeviceDescription.deviceDescription()); + hwDeviceDescription(someDeviceDescription.hwDeviceDescription()); + swDeviceDescription(someDeviceDescription.swDeviceDescription()); + selected(someDeviceDescription.selected()); + return *this; +} + +inline +const GUID &DeviceDescription::guid(void)const +{ + return mGUID; +} + +inline +void DeviceDescription::guid(const GUID &guid) +{ + ::memcpy(&mGUID,&((GUID&)guid),sizeof(GUID)); +} + +inline +const String &DeviceDescription::deviceName(void)const +{ + return mDeviceName; +} + +inline +void DeviceDescription::deviceName(const String &deviceName) +{ + mDeviceName=deviceName; +} + +inline +const String &DeviceDescription::deviceDescription(void)const +{ + return mDeviceDescription; +} + +inline +void DeviceDescription::deviceDescription(const String &deviceDescription) +{ + mDeviceDescription=deviceDescription; +} + +inline +const D3DDEVICEDESC &DeviceDescription::hwDeviceDescription(void)const +{ + return mHWDeviceDescription; +} + +inline +void DeviceDescription::hwDeviceDescription(const D3DDEVICEDESC &hwDeviceDescription) +{ + ::memcpy(&mHWDeviceDescription,&(D3DDEVICEDESC&)hwDeviceDescription,sizeof(D3DDEVICEDESC)); +} + +inline +const D3DDEVICEDESC &DeviceDescription::swDeviceDescription(void)const +{ + return mSWDeviceDescription; +} + +inline +void DeviceDescription::swDeviceDescription(const D3DDEVICEDESC &swDeviceDescription) +{ + ::memcpy(&mSWDeviceDescription,&(D3DDEVICEDESC&)swDeviceDescription,sizeof(D3DDEVICEDESC)); +} + +inline +BOOL DeviceDescription::isHardware(void)const +{ + return hwDeviceDescription().dcmColorModel; +} + +inline +BOOL DeviceDescription::selected(void)const +{ + return mIsSelected; +} + +inline +void DeviceDescription::selected(BOOL selected) +{ + mIsSelected=selected; +} + +inline +void DeviceDescription::zeroInit(void) +{ + ::memset(&mGUID,0,sizeof(mGUID)); + ::memset(&mHWDeviceDescription,0,sizeof(mHWDeviceDescription)); + ::memset(&mSWDeviceDescription,0,sizeof(mSWDeviceDescription)); + mIsSelected=FALSE; +} +#endif diff --git a/ddraw/DEVENUM.CPP b/ddraw/DEVENUM.CPP new file mode 100644 index 0000000..df4b471 --- /dev/null +++ b/ddraw/DEVENUM.CPP @@ -0,0 +1,63 @@ +#include + +DeviceEnumerator::DeviceEnumerator(void) +{ +} + +DeviceEnumerator::DeviceEnumerator(const DeviceEnumerator &someDeviceEnumerator) +{ // private implementation + *this=someDeviceEnumerator; +} + +DeviceEnumerator::~DeviceEnumerator() +{ +} + +DeviceEnumerator &DeviceEnumerator::operator=(const DeviceEnumerator &/*someDeviceEnumerator*/) +{ // private implementation + return *this; +} + +Block &DeviceEnumerator::enumeratedDevices(void) +{ + return mEnumeratedDevices; +} + +HRESULT WINAPI DeviceEnumerator::enumDeviceCallback(LPGUID lpGUID,LPSTR lpszDeviceDesc,LPSTR lpszDeviceName,LPD3DDEVICEDESC lpd3dHWDeviceDesc,LPD3DDEVICEDESC lpd3dSWDeviceDesc,LPVOID lpUserArg) +{ + DeviceEnumerator &deviceEnumerator=(*(DeviceEnumerator*)lpUserArg); + DeviceDescription deviceDescription; + + deviceDescription.guid(*lpGUID); + deviceDescription.deviceName(lpszDeviceName); + deviceDescription.deviceDescription(lpszDeviceDesc); + deviceDescription.hwDeviceDescription(*lpd3dHWDeviceDesc); + deviceDescription.swDeviceDescription(*lpd3dSWDeviceDesc); + deviceEnumerator.mEnumeratedDevices.insert(&deviceDescription); + DeviceDescription &currDeviceDescription=deviceEnumerator.mEnumeratedDevices[deviceEnumerator.mEnumeratedDevices.size()-1]; + deviceEnumerator.enumDevice(currDeviceDescription); + if(currDeviceDescription.selected())return D3DENUMRET_CANCEL; + return D3DENUMRET_OK; +} + +// virtuals +void DeviceEnumerator::enumDevice(DeviceDescription &deviceDescription) +{ + const D3DDEVICEDESC &swhwDeviceDescription=deviceDescription.isHardware()?deviceDescription.hwDeviceDescription():deviceDescription.swDeviceDescription(); + + if(deviceDescription.isHardware()) + { + deviceDescription.selected(TRUE); + return; + } + if(!(swhwDeviceDescription.dwDeviceRenderBitDepth&PreferredDeviceBitDepth))return; + if(D3DCOLOR_MONO==swhwDeviceDescription.dcmColorModel) + { + if(!(swhwDeviceDescription.dpcTriCaps.dwShadeCaps&D3DPSHADECAPS_COLORGOURAUDMONO))return; + } + else + { + if(!(swhwDeviceDescription.dpcTriCaps.dwShadeCaps&D3DPSHADECAPS_COLORGOURAUDRGB))return; + } + return; +} diff --git a/ddraw/DEVENUM.HPP b/ddraw/DEVENUM.HPP new file mode 100644 index 0000000..8f1be1c --- /dev/null +++ b/ddraw/DEVENUM.HPP @@ -0,0 +1,30 @@ +#ifndef _DDRAW_DEVICEENUMERATOR_HPP_ +#define _DDRAW_DEVICEENUMERATOR_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _DDRAW_DEVICEDESCRIPTION_HPP_ +#include +#endif + +class DeviceEnumerator +{ +public: + friend class Direct3D; + DeviceEnumerator(void); + virtual ~DeviceEnumerator(); + Block &enumeratedDevices(void); +protected: + virtual void enumDevice(DeviceDescription &deviceDescription); +private: + enum{PreferredDeviceBitDepth=24}; + DeviceEnumerator(const DeviceEnumerator &someDeviceEnumerator); + DeviceEnumerator &operator=(const DeviceEnumerator &someDeviceEnumerator); + static HRESULT WINAPI enumDeviceCallback(LPGUID lpGUID,LPSTR lpszDeviceDesc,LPSTR lpszDeviceName,LPD3DDEVICEDESC lpd3dHWDeviceDesc,LPD3DDEVICEDESC lpd3dSWDeviceDesc,LPVOID lpUserArg); + + Block mEnumeratedDevices; +}; +#endif diff --git a/ddraw/DEVICE3D.HPP b/ddraw/DEVICE3D.HPP new file mode 100644 index 0000000..5bc1427 --- /dev/null +++ b/ddraw/DEVICE3D.HPP @@ -0,0 +1,107 @@ +#ifndef _DDRAW_DIRECTDEVICE3D_HPP_ +#define _DDRAW_DIRECTDEVICE3D_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +class Matrix; + +class DirectDevice3D : public SmartPointer +{ +public: + enum DrawPrimitiveFlags{DoNotClip=D3DDP_DONOTCLIP,DoNotLight=D3DDP_DONOTLIGHT, + DoNotUpdateExtents=D3DDP_DONOTUPDATEEXTENTS,WaitUntilRendered=D3DDP_WAIT}; + enum TransformStateTypeFlags{World=D3DTRANSFORMSTATE_WORLD,View=D3DTRANSFORMSTATE_VIEW, + Projection=D3DTRANSFORMSTATE_PROJECTION,ForceDoubleWord=D3DTRANSFORMSTATE_FORCE_DWORD}; + DirectDevice3D(void); + virtual ~DirectDevice3D(); + DirectDevice3D &operator=(IDirect3DDevice3 *pIDirect3DDevice3); + BOOL setRenderState(D3DRENDERSTATETYPE renderStateType,DWORD renderState); + BOOL drawPrimitve(D3DPRIMITIVETYPE primitiveType,DWORD vertexTypeDesc,LPVOID pVertices,DWORD vertexCount,DrawPrimitiveFlags primitiveFlags=WaitUntilRendered); + BOOL setTransform(TransformStateTypeFlags transformType,Matrix &matrix); + BOOL beginScene(void); + BOOL endScene(void); + void destroy(void); +private: + DirectDevice3D(const DirectDevice3D &someDirectDevice3D); + DirectDevice3D &operator=(const DirectDevice3D &someDirectDevice3D); +}; + +inline +DirectDevice3D::DirectDevice3D(void) +{ +} + +inline +DirectDevice3D::~DirectDevice3D() +{ + destroy(); +} + +inline +void DirectDevice3D::destroy(void) +{ + if(!isOkay())return; + operator->()->Release(); + SmartPointer::destroy(); +} + +inline +DirectDevice3D::DirectDevice3D(const DirectDevice3D &someDirectDevice3D) +{ // private implementation + *this=someDirectDevice3D; +} + +inline +DirectDevice3D &DirectDevice3D::operator=(const DirectDevice3D &/*someDevice3D*/) +{ // private implementation + return *this; +} + +inline +DirectDevice3D &DirectDevice3D::operator=(IDirect3DDevice3 *pIDirect3DDevice3) +{ + destroy(); + SmartPointer::operator=(pIDirect3DDevice3); + return *this; +} + +inline +BOOL DirectDevice3D::setRenderState(D3DRENDERSTATETYPE renderStateType,DWORD renderState) +{ + if(!isOkay())return FALSE; + return D3D_OK==operator->()->SetRenderState(renderStateType,renderState); +} + +inline +BOOL DirectDevice3D::drawPrimitve(D3DPRIMITIVETYPE primitiveType,DWORD vertexTypeDesc,LPVOID pVertices,DWORD vertexCount,DrawPrimitiveFlags primitiveFlags) +{ + if(!isOkay())return FALSE; + return D3D_OK==operator->()->DrawPrimitive(primitiveType,vertexTypeDesc,pVertices,vertexCount,primitiveFlags); +} + +inline +BOOL DirectDevice3D::setTransform(TransformStateTypeFlags transformType,Matrix &matrix) +{ + if(!isOkay())return FALSE; + return D3D_OK==operator->()->SetTransform(D3DTRANSFORMSTATETYPE(transformType),(D3DMATRIX*)&matrix); +} + +inline +BOOL DirectDevice3D::beginScene(void) +{ + if(!isOkay())return FALSE; + return D3D_OK==operator->()->BeginScene(); +} + +inline +BOOL DirectDevice3D::endScene(void) +{ + if(!isOkay())return FALSE; + return D3D_OK==operator->()->EndScene(); +} +#endif + diff --git a/ddraw/DIRECT3D.CPP b/ddraw/DIRECT3D.CPP new file mode 100644 index 0000000..3219782 --- /dev/null +++ b/ddraw/DIRECT3D.CPP @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include + +Direct3D::Direct3D(void) +{ +} + +Direct3D::Direct3D(const Direct3D &someDirect3D) +{ // private implementation + *this=someDirect3D; +} + +Direct3D::~Direct3D() +{ + destroy(); +} + +Direct3D &Direct3D::operator=(const Direct3D &/*someDirect3D*/) +{ // private implementation + return *this; +} + +void Direct3D::destroy(void) +{ + if(!isOkay())return; + operator->()->Release(); + SmartPointer::destroy(); +} + +BOOL Direct3D::enumerateDevice(DeviceEnumerator &deviceEnumerator) +{ + if(!isOkay())return FALSE; + deviceEnumerator.enumeratedDevices().remove(); + operator->()->EnumDevices(DeviceEnumerator::enumDeviceCallback,&deviceEnumerator); + return TRUE; +} + +DirectDrawError Direct3D::createDevice(const DeviceDescription &deviceDescription,Surface &surface,DirectDevice3D &device3D) +{ + LPDIRECT3DDEVICE3 lpDirect3DDevice3; + DirectDrawError status; + +// device3D.destroy(); + if(!isOkay())return DirectDrawError::GenericFailure; + status=DirectDrawError::DirectDrawResult(operator->()->CreateDevice(deviceDescription.guid(),(IDirectDrawSurface4*)((SmartPointer&)surface),&lpDirect3DDevice3,0)); + if(!status.okResult())return status; + device3D=lpDirect3DDevice3; + return status; +// (SmartPointer&)device3D=lpDirect3DDevice3; +} diff --git a/ddraw/DIRECT3D.HPP b/ddraw/DIRECT3D.HPP new file mode 100644 index 0000000..20f70e7 --- /dev/null +++ b/ddraw/DIRECT3D.HPP @@ -0,0 +1,30 @@ +#ifndef _DDRAW_DIRECT3D_HPP_ +#define _DDRAW_DIRECT3D_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif +#ifndef _DDRAW_DIRECTDRAWERROR_HPP_ +#include +#endif + +class DeviceEnumerator; +class DeviceDescription; +class Surface; +class DirectDevice3D; + +class Direct3D : private SmartPointer +{ +public: + Direct3D(void); + virtual ~Direct3D(); + void destroy(void); + BOOL enumerateDevice(DeviceEnumerator &deviceEnumerator); + DirectDrawError createDevice(const DeviceDescription &deviceDescription,Surface &surface,DirectDevice3D &device3D); +private: + Direct3D(const Direct3D &someDirect3D); + Direct3D &operator=(const Direct3D &someDirect3D); +}; +#endif diff --git a/ddraw/DRAW.CPP b/ddraw/DRAW.CPP new file mode 100644 index 0000000..bf4c67a --- /dev/null +++ b/ddraw/DRAW.CPP @@ -0,0 +1,157 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +DirectDraw::DirectDraw(void) +{ + createDirectDraw(); +} + +DirectDraw::DirectDraw(const DirectDraw &directDraw) +{ // private implementation + *this=directDraw; +} + +DirectDraw &DirectDraw::operator=(const DirectDraw &/*directDraw*/) +{ + return *this; +} + +DirectDraw::~DirectDraw() +{ + destroy(); +} + +DirectDrawError DirectDraw::setCooperativeLevel(GUIWindow &parentWindow,CoopFlags coopFlags) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(mDirectDraw4->SetCooperativeLevel(parentWindow,coopFlags)); +} + +DirectDrawError DirectDraw::testCooperativeLevel(void) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(mDirectDraw4->TestCooperativeLevel()); +} + +DirectDrawError DirectDraw::setCooperativeLevel(CoopFlags coopFlags) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(mDirectDraw4->SetCooperativeLevel((HWND)0,coopFlags)); +} + +BOOL DirectDraw::enumerateModes(DisplayEnumerator &displayEnumerator) +{ + if(!isOkay())return FALSE; + displayEnumerator.enumeratedModes().remove(); + mDirectDraw4->EnumDisplayModes(DDEDM_REFRESHRATES,0,&displayEnumerator,DisplayEnumerator::enumModesCallback); + return TRUE; +} + +BOOL DirectDraw::setDisplayMode(int width,int height,int bpp,int refreshRate) +{ + if(!isOkay())return FALSE; + return (DD_OK==mDirectDraw4->SetDisplayMode(width,height,bpp,refreshRate,0)); +} + +BOOL DirectDraw::getDisplayMode(SurfaceDescription &surfaceDescription) +{ + if(!isOkay())return FALSE; + return (DD_OK==mDirectDraw4->GetDisplayMode(&surfaceDescription.getDDSURFACEDESC2())); +} + +BOOL DirectDraw::restoreDisplayMode(void) +{ + if(!isOkay())return FALSE; + return (DD_OK==mDirectDraw4->RestoreDisplayMode()); +} + +BOOL DirectDraw::restoreAllSurfaces(void) +{ + if(!isOkay())return FALSE; + return DD_OK==mDirectDraw4->RestoreAllSurfaces(); +} + +DirectDrawError DirectDraw::createSurface(const SurfaceDescription &surfaceDescription,Surface &surface) +{ + LPDIRECTDRAWSURFACE4 lpDDSurface4; + DirectDrawError errorResult(DirectDrawError::GenericFailure); + + surface.destroy(); + if(!isOkay())return DirectDrawError::GenericFailure; + errorResult=DirectDrawError::DirectDrawResult(mDirectDraw4->CreateSurface(&((SurfaceDescription&)surfaceDescription).getDDSURFACEDESC2(),&lpDDSurface4,0)); + if(!(DirectDrawError::Ok==errorResult.result()))return errorResult; + (SmartPointer&)surface=lpDDSurface4; + return errorResult; +} + +BOOL DirectDraw::createDirectDraw(void) +{ + HRESULT hResult; + LPDIRECTDRAW lpDirectDraw; + LPDIRECTDRAW4 lpDirectDraw4; + + hResult=::DirectDrawCreate(NULL,&lpDirectDraw,NULL); + if(hResult<0)return FALSE; + mDirectDraw=lpDirectDraw; + hResult=mDirectDraw->QueryInterface(IID_IDirectDraw4,(void**)&lpDirectDraw4); + if(hResult<0){mDirectDraw->Release();mDirectDraw.destroy();return FALSE;} + mDirectDraw4=lpDirectDraw4; + return isOkay(); +} + +DirectDrawError DirectDraw::createDirect3D(Surface &renderSurface,Direct3D &direct3D,DirectDevice3D &device3D) +{ + DirectDrawError status(DirectDrawError::GenericFailure); + LPDIRECT3D3 lpDirect3D3; + LPDIRECT3DDEVICE3 lpDirect3DDevice3; + DeviceEnumerator enumDevice; + + if(!isOkay())return status; + direct3D.destroy(); + status=DirectDrawError::DirectDrawResult(mDirectDraw->QueryInterface(IID_IDirect3D3,(void**)&lpDirect3D3)); + if(!status.okResult())return status; + (SmartPointer&)direct3D=lpDirect3D3; + direct3D.enumerateDevice(enumDevice); + if(!enumDevice.enumeratedDevices().size()){direct3D.destroy();status.result(DirectDrawError::GenericFailure);return status;} + status=direct3D.createDevice(enumDevice.enumeratedDevices()[0],renderSurface,device3D); + if(!status.okResult())return status; + return status; +} + +DirectDrawError DirectDraw::createPalette(DirectPalette &directPalette) +{ + DirectDrawError status(DirectDrawError::GenericFailure); + LPDIRECTDRAWPALETTE lpDDPalette; + + if(!isOkay())return status; + directPalette.destroy(); + status=DirectDrawError::DirectDrawResult(mDirectDraw4->CreatePalette(directPalette.flags(),&((PALETTEENTRY&)directPalette[0]),&lpDDPalette,0)); + if(!status.okResult())return status; + (SmartPointer&)directPalette=lpDDPalette; + return status; +} + +DirectDrawError DirectDraw::flipToGDISurface(void) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(mDirectDraw4->FlipToGDISurface()); +} + +void DirectDraw::destroy(void) +{ + if(!isOkay())return; + if(mDirectDraw4.isOkay()){mDirectDraw4->Release();mDirectDraw4.destroy();} + if(mDirectDraw.isOkay()){mDirectDraw->Release();mDirectDraw.destroy();} +} + +BOOL DirectDraw::isOkay(void)const +{ + return mDirectDraw.isOkay()&&mDirectDraw4.isOkay(); +} diff --git a/ddraw/DRAW.HPP b/ddraw/DRAW.HPP new file mode 100644 index 0000000..3ec58c3 --- /dev/null +++ b/ddraw/DRAW.HPP @@ -0,0 +1,53 @@ +#ifndef _DDRAW_DIRECTDRAW_HPP_ +#define _DDRAW_DIRECTDRAW_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif +#ifndef _DDRAW_DIRECTDRAWERROR_HPP_ +#include +#endif + +class SurfaceDescription; +class DisplayEnumerator; +class GUIWindow; +class Direct3D; +class DirectDevice3D; +class DirectPalette; +class Surface; + +class DirectDraw +{ +public: + enum CoopFlags{FullScreen=DDSCL_FULLSCREEN,AllowReboot=DDSCL_ALLOWREBOOT, + NoWindowChanges=DDSCL_NOWINDOWCHANGES,Normal=DDSCL_NORMAL,Exclusive=DDSCL_EXCLUSIVE, + SetFocusWindow=DDSCL_SETFOCUSWINDOW,SetDeviceWindow=DDSCL_SETDEVICEWINDOW, + CreateDeviceWindow=DDSCL_CREATEDEVICEWINDOW,Multithreaded=DDSCL_MULTITHREADED, + FPUSetup=DDSCL_FPUSETUP}; + DirectDraw(void); + virtual ~DirectDraw(); + BOOL enumerateModes(DisplayEnumerator &displayEnumerator); + BOOL setDisplayMode(int width,int height,int bpp,int refreshRate=0); + BOOL getDisplayMode(SurfaceDescription &surfaceDescription); + BOOL restoreDisplayMode(void); + BOOL restoreAllSurfaces(void); + DirectDrawError createSurface(const SurfaceDescription &surfaceDescription,Surface &surface); + DirectDrawError createDirect3D(Surface &renderSurface,Direct3D &direct3D,DirectDevice3D &device3D); + DirectDrawError setCooperativeLevel(GUIWindow &parentWindow,CoopFlags coopFlags); + DirectDrawError setCooperativeLevel(CoopFlags coopFlags); + DirectDrawError testCooperativeLevel(void); + DirectDrawError flipToGDISurface(void); + DirectDrawError createPalette(DirectPalette &directPalette); + BOOL isOkay(void)const; + void destroy(void); +private: + DirectDraw(const DirectDraw &directDraw); + DirectDraw &operator=(const DirectDraw &directDraw); + BOOL createDirectDraw(void); + + SmartPointer mDirectDraw; + SmartPointer mDirectDraw4; +}; +#endif \ No newline at end of file diff --git a/ddraw/DRAWSFC.CPP b/ddraw/DRAWSFC.CPP new file mode 100644 index 0000000..858e231 --- /dev/null +++ b/ddraw/DRAWSFC.CPP @@ -0,0 +1,161 @@ +#include +#include +#include +#include + +void DrawingSurface::setRowInfo(void) +{ + if(!isLocked())return; + mRowInfo.rowCount(mSurfaceDescription.height()); + for(int row=0;row>0x10,xRunning>>0x10,byteValue); + xRunning-=xDelta; + yRunning-=yDelta; + } + } + else if(-1==xDir&&1==yDir) + { + for(short stepIndex=0;stepIndex>0x10,xRunning>>0x10,byteValue); + xRunning-=xDelta; + yRunning+=yDelta; + } + } + else if(1==xDir&&-1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,byteValue); + xRunning+=xDelta; + yRunning-=yDelta; + } + } + else if(1==xDir&&1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,byteValue); + xRunning+=xDelta; + yRunning+=yDelta; + } + } +} + +WORD DrawingSurface::square(const Point ¢erPoint,WORD lineLength,BYTE palIndex) +{ + WORD halfLength(lineLength>>0x01); + Point topLeft; + Point topRight; + Point bottomLeft; + Point bottomRight; + + if(!isOkay())return FALSE; + topLeft.x(centerPoint.x()-halfLength); + topLeft.y(centerPoint.y()-halfLength); + topRight.x(centerPoint.x()+halfLength); + topRight.y(centerPoint.y()-halfLength); + bottomRight.x(centerPoint.x()+halfLength); + bottomRight.y(centerPoint.y()+halfLength); + bottomLeft.x(centerPoint.x()-halfLength); + bottomLeft.y(centerPoint.y()+halfLength); + line(topLeft,topRight,palIndex); + line(topRight,bottomRight,palIndex); + line(bottomRight,bottomLeft,palIndex); + line(bottomLeft,topLeft,palIndex); + return TRUE; +} + +WORD DrawingSurface::circle(const Point &xyPoint,WORD radius,WORD palIndex,WORD aspectValue) +{ + int a(radius); + int af; + int bf; + int b(0); + int target(1); + int radiusSquared(radius*radius); + + if(!isOkay())return FALSE; + while(a>=b) + { + b=(int)(Math::sqrt(radiusSquared-(a*a))+.50); + int temp(target); + target=b; + b=temp; + while(b +#endif +#ifndef _DDRAW_ROWINFO_HPP_ +#include +#endif + +class Point; +class RGBColor; + +class DrawingSurface : public Surface +{ +public: + DrawingSurface(void); + virtual ~DrawingSurface(); + void setByte(WORD row,WORD col,BYTE byteValue); + BYTE getByte(WORD row,WORD col); + void clear(void); + void setBits(BYTE byteValue); + void line(const Point &firstPoint,const Point &secondPoint,BYTE byteValue); + WORD square(const Point ¢erPoint,WORD lineLength,const RGBColor &lineColor); + WORD square(const Point ¢erPoint,WORD lineLength,BYTE indexColor); + WORD circle(const Point &xyPoint,WORD radius,WORD palIndex,WORD aspectValue=100); + BOOL lock(BOOL initRowArray=TRUE); + BOOL unlock(void); + BOOL isLocked(void)const; + DWORD width(void)const; + DWORD height(void)const; + DWORD pitch(void)const; + DWORD extent(void)const; + LPVOID ptrSurface(void); +private: + DrawingSurface(const DrawingSurface &someDrawingSurface); + DrawingSurface &operator=(const DrawingSurface &someDrawingSurface); + void setRowInfo(void); + void extent(DWORD extent); + + SurfaceDescription mSurfaceDescription; + RowInfo mRowInfo; + BOOL mIsLocked; + DWORD mExtent; +}; + +inline +DrawingSurface::DrawingSurface(void) +: mIsLocked(FALSE), mExtent(0) +{ +} + +inline +DrawingSurface::~DrawingSurface() +{ +} + +inline +DrawingSurface::DrawingSurface(const DrawingSurface &someDrawingSurface) +{ // private implementation + *this=someDrawingSurface; +} + +inline +DrawingSurface &DrawingSurface::operator=(const DrawingSurface &/*someDrawingSurface*/) +{ // private implementation + return *this; +} + +inline +BOOL DrawingSurface::lock(BOOL initRowArray) +{ + if(isLocked())return FALSE; + if(Surface::lock(mSurfaceDescription).okResult())mIsLocked=TRUE; + extent(width()*height()); + if(initRowArray)setRowInfo(); + return mIsLocked; +} + +inline +BOOL DrawingSurface::unlock(void) +{ + mIsLocked=FALSE; + return Surface::unlock().okResult(); +} + +inline +BOOL DrawingSurface::isLocked(void)const +{ + return mIsLocked; +} + +inline +DWORD DrawingSurface::width(void)const +{ + if(!isLocked())return FALSE; + return mSurfaceDescription.width(); +} + +inline +DWORD DrawingSurface::height(void)const +{ + if(!isLocked())return FALSE; + return mSurfaceDescription.height(); +} + +inline +DWORD DrawingSurface::pitch(void)const +{ + if(!isLocked())return FALSE; + return mSurfaceDescription.lPitch(); +} + +inline +DWORD DrawingSurface::extent(void)const +{ + if(!isLocked())return FALSE; + return mExtent; +} + +inline +void DrawingSurface::extent(DWORD extent) +{ + mExtent=extent; +} + +inline +void DrawingSurface::setByte(WORD row,WORD col,BYTE byteValue) +{ + if(!isLocked())return; + if(row>=mSurfaceDescription.height()||col>=mSurfaceDescription.width())return; + *((BYTE*)mRowInfo[row]+col)=byteValue; +} + +inline +BYTE DrawingSurface::getByte(WORD row,WORD col) +{ + if(!isLocked())return 0; + return *((BYTE*)mRowInfo[row]+col); +} + +inline +LPVOID DrawingSurface::ptrSurface(void) +{ + if(!isLocked())return 0; + return mSurfaceDescription.ptrSurface(); +} +#endif diff --git a/ddraw/DSPENUM.CPP b/ddraw/DSPENUM.CPP new file mode 100644 index 0000000..5e86541 --- /dev/null +++ b/ddraw/DSPENUM.CPP @@ -0,0 +1,32 @@ +#include + +DisplayEnumerator::DisplayEnumerator(void) +{ +} + +DisplayEnumerator::DisplayEnumerator(const DisplayEnumerator &someDisplayEnumerator) +{ // private implementation + *this=someDisplayEnumerator; +} + +DisplayEnumerator::~DisplayEnumerator() +{ +} + +DisplayEnumerator &DisplayEnumerator::operator=(const DisplayEnumerator &/*someDisplayEnumerator*/) +{ // private implementation + return *this; +} + +void DisplayEnumerator::enumModes(SurfaceDescription &surfaceDescription) +{ +} + +HRESULT WINAPI DisplayEnumerator::enumModesCallback(LPDDSURFACEDESC2 lpDDSurfaceDesc,LPVOID lpContext) +{ + DisplayEnumerator &displayEnumerator=*(DisplayEnumerator*)lpContext; + SurfaceDescription &surfaceDescription=*(SurfaceDescription*)lpDDSurfaceDesc; + displayEnumerator.mEnumeratedModes.insert(&surfaceDescription); + displayEnumerator.enumModes(displayEnumerator.mEnumeratedModes[displayEnumerator.mEnumeratedModes.size()-1]); + return DDENUMRET_OK; +} diff --git a/ddraw/DSPENUM.HPP b/ddraw/DSPENUM.HPP new file mode 100644 index 0000000..e01902e --- /dev/null +++ b/ddraw/DSPENUM.HPP @@ -0,0 +1,35 @@ +#ifndef _DDRAW_DISPLAYENUMERATOR_HPP_ +#define _DDRAW_DISPLAYENUMERATOR_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif +#ifndef _DDRAW_SURFACEDESCRIPTION_HPP_ +#include +#endif + +class DisplayEnumerator +{ +public: + friend class DirectDraw; + DisplayEnumerator(void); + virtual ~DisplayEnumerator(); + Block &enumeratedModes(void); +protected: + virtual void enumModes(SurfaceDescription &surfaceDescription); +private: + DisplayEnumerator(const DisplayEnumerator &someDisplayEnumerator); + DisplayEnumerator &operator=(const DisplayEnumerator &someDisplayEnumerator); + static HRESULT WINAPI enumModesCallback(LPDDSURFACEDESC2 lpDDSurfaceDesc,LPVOID lpContext); + + Block mEnumeratedModes; +}; + +inline +Block &DisplayEnumerator::enumeratedModes(void) +{ + return mEnumeratedModes; +} +#endif \ No newline at end of file diff --git a/ddraw/ERROR.HPP b/ddraw/ERROR.HPP new file mode 100644 index 0000000..25365a2 --- /dev/null +++ b/ddraw/ERROR.HPP @@ -0,0 +1,188 @@ +#ifndef _DDRAW_DIRECTDRAWERROR_HPP_ +#define _DDRAW_DIRECTDRAWERROR_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +class DirectDrawError +{ +public: + enum DirectDrawResult{Ok=DD_OK,GenericFailure=DDERR_GENERIC,IncompatiblePrimary=DDERR_INCOMPATIBLEPRIMARY, + InvalidCaps=DDERR_INVALIDCAPS,InvalidPixelFormat=DDERR_INVALIDPIXELFORMAT,Exception=DDERR_EXCEPTION, + NoAlphaHardware=DDERR_NOALPHAHW,NoCooperativeLevelSet=DDERR_NOCOOPERATIVELEVELSET, + NoDirectDrawHardware=DDERR_NODIRECTDRAWHW,NoEmulation=DDERR_NOEMULATION,InvalidObject=DDERR_INVALIDOBJECT, + NoExclusiveMode=DDERR_NOEXCLUSIVEMODE,NoFlipHardware=DDERR_NOFLIPHW,NoMipMapHardware=DDERR_NOMIPMAPHW, + NoOverlayHardware=DDERR_NOOVERLAYHW,NoZBufferHardware=DDERR_NOZBUFFERHW,OutOfMemory=DDERR_OUTOFMEMORY, + OutOfVideoMemory=DDERR_OUTOFVIDEOMEMORY,PrimarySurfaceAlreadyExists=DDERR_PRIMARYSURFACEALREADYEXISTS, + UnsupportedMode=DDERR_UNSUPPORTEDMODE,InvalidParams=DDERR_INVALIDPARAMS,InvalidRect=DDERR_INVALIDRECT, + NoBltHardware=DDERR_NOBLTHW,SurfaceBusy=DDERR_SURFACEBUSY,SurfaceLost=DDERR_SURFACELOST, + NoSupport=DDERR_UNSUPPORTED,WasStillDrawing=DDERR_WASSTILLDRAWING,InvalidClipList=DDERR_INVALIDCLIPLIST, + NoClipList=DDERR_NOCLIPLIST,NoRasterHardware=DDERR_NODDROPSHW,NoMirrorHardware=DDERR_NOMIRRORHW, + NoRasterOpHardware=DDERR_NORASTEROPHW,NoRotationHardware=DDERR_NOROTATIONHW, + NoStretchHardware=DDERR_NOSTRETCHHW,NoLockedSurfaces=DDERR_LOCKEDSURFACES,NotFound=DDERR_NOTFOUND}; + DirectDrawError(void); + DirectDrawError(const DirectDrawError &someDirectDrawError); + DirectDrawError(DirectDrawResult directDrawResult); + virtual ~DirectDrawError(); + DirectDrawError &operator=(const DirectDrawError &someDirectDrawError); + DirectDrawError &operator=(DirectDrawResult directDrawResult); + BOOL operator==(const DirectDrawError &someDirectDrawError)const; + BOOL operator==(DirectDrawResult directDrawResult)const; + operator String(void)const; + DirectDrawResult result(void)const; + void result(DirectDrawResult result); + BOOL okResult(void)const; +private: + DirectDrawResult mDirectDrawResult; +}; + +inline +DirectDrawError::DirectDrawError(void) +: mDirectDrawResult(GenericFailure) +{ +} + +inline +DirectDrawError::DirectDrawError(const DirectDrawError &someDirectDrawError) +{ + *this=someDirectDrawError; +} + +inline +DirectDrawError::DirectDrawError(DirectDrawResult directDrawResult) +{ + *this=directDrawResult; +} + +inline +DirectDrawError::~DirectDrawError() +{ +} + +inline +DirectDrawError &DirectDrawError::operator=(const DirectDrawError &someDirectDrawError) +{ + result(someDirectDrawError.result()); + return *this; +} + +inline +DirectDrawError &DirectDrawError::operator=(DirectDrawResult directDrawResult) +{ + result(directDrawResult); + return *this; +} + +inline +BOOL DirectDrawError::operator==(const DirectDrawError &someDirectDrawError)const +{ + return result()==someDirectDrawError.result(); +} + +inline +BOOL DirectDrawError::operator==(DirectDrawResult directDrawResult)const +{ + return result()==directDrawResult; +} + +inline +DirectDrawError::operator String(void)const +{ + switch(result()) + { + case Ok : + return String("Ok"); + case GenericFailure : + return String("GenericFailure"); + case IncompatiblePrimary : + return String("IncompatiblePrimary"); + case InvalidCaps : + return String("InvalidCaps"); + case InvalidPixelFormat : + return String("InvalidPixelFormat"); + case NoAlphaHardware : + return String("NoAlphaHardware"); + case NoCooperativeLevelSet : + return String("NoCooperativeLevelSet"); + case NoDirectDrawHardware : + return String("NoDirectDrawHardware"); + case NoEmulation : + return String("NoEmulation"); + case NoExclusiveMode : + return String("NoExclusiveMode"); + case NoFlipHardware : + return String("NoFlipHardware"); + case NoMipMapHardware : + return String("NoMipMapHardware"); + case NoOverlayHardware : + return String("NoOverlayHardware"); + case NoZBufferHardware : + return String("NoZBufferHardware"); + case OutOfMemory : + return String("OutOfMemory"); + case OutOfVideoMemory : + return String("OutOfVideoMemory"); + case PrimarySurfaceAlreadyExists : + return String("PrimarySurfaceAlreadyExists"); + case UnsupportedMode : + return String("UnsupportedMode"); + case Exception : + return String("Exception"); + case InvalidParams : + return String("InvalidParams"); + case InvalidRect : + return String("InvalidRect"); + case NoBltHardware : + return String("NoBltHardware"); + case SurfaceBusy : + return String("SurfaceBusy"); + case SurfaceLost : + return String("SurfaceLost"); + case NoSupport : + return String("NoSupport"); + case WasStillDrawing : + return String("WasStillDrawing"); + case InvalidClipList : + return String("InvalidClipList"); + case NoClipList : + return String("NoClipList"); + case NoRasterHardware : + return String("NoRasterHardware"); + case NoMirrorHardware : + return String("NoMirrorHardware"); + case NoRasterOpHardware : + return String("NoRasterOpHardware"); + case NoRotationHardware : + return String("NoRotationHardware"); + case NoStretchHardware : + return String("NoStretchHardware"); + case NoLockedSurfaces : + return String("NoLockedSurfaces"); + case NotFound : + return String("NotFound"); + default : + return String("UndefinedError"); + } +} + +inline +DirectDrawError::DirectDrawResult DirectDrawError::result(void)const +{ + return mDirectDrawResult; +} + +inline +void DirectDrawError::result(DirectDrawResult result) +{ + mDirectDrawResult=result; +} + +inline +BOOL DirectDrawError::okResult(void)const +{ + return Ok==mDirectDrawResult; +} +#endif diff --git a/ddraw/HOLD/ASMUTIL.ASM b/ddraw/HOLD/ASMUTIL.ASM new file mode 100644 index 0000000..0bfcea0 --- /dev/null +++ b/ddraw/HOLD/ASMUTIL.ASM @@ -0,0 +1,29 @@ +;************************************************************************************* +; MODULE: ASMUTIL.ASM DATE: JANUARY 29, 1999 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT TARGET (WIN32s, WIN95, WINNT) +; FUNCTION : UTLITITIES +;************************************************************************************* +INCLUDE ..\COMMON\COMMONM.INC +INCLUDE ..\COMMON\MATH.INC +.386 +.MODEL FLAT + +RowInfo STRUC + RowArray@@mvptr DD ? + RowArray@@mPtrRow DD 1024 DUP(?) + RowArray@@mRowCount DD ? +RowInfo ENDS +.DATA + +rowArray RowInfo ,0> + +_setRowInfo proc near ; void setRowInfo( + +_setRowInfo endp + + + +.CODE +END + diff --git a/ddraw/HOLD/ASMUTIL.HPP b/ddraw/HOLD/ASMUTIL.HPP new file mode 100644 index 0000000..babf9ce --- /dev/null +++ b/ddraw/HOLD/ASMUTIL.HPP @@ -0,0 +1,100 @@ +#ifndef _DDRAW_ASMUTIL_HPP_ +#define _DDRAW_ASMUTIL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Point; +class PureEdge; +class PureMap; + +extern "C" +{ + void clearBitmap(DWORD lpBitmapData,DWORD imageExtent); + void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE charByte); + void lineWINGBlt(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD height,WORD value); + void initEdge(int edgeType,PureEdge *lpPureEdge); + void mapTexture(PureMap *lpEdgeMap); + void setMaskInfo(WORD useMask,BYTE maskValue); + void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpSrcBitmapImage); + void setDstBitmapInfo(WORD width,WORD height,WORD pitch,UHUGE *lpDstBitmapImage); + void getSrcDataByte(WORD row,WORD col); + void resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClip); +} + +class ASMRoutines +{ +public: + static void clearBitmap(DWORD lpBitmapData,DWORD imageExtent); + static void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE charByte); + static void line(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD imageExtent,WORD value); + static void initEdge(int edgeType,PureEdge *lpPureEdge); + static void mapTexture(PureMap *lpEdgeMap); + static void setMaskInfo(WORD useMask,BYTE maskValue); + static void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpSrcBitmapImage); + static void setDstBitmapInfo(WORD width,WORD height,UHUGE *lpDstBitmapImage); + static void getSrcDataByte(WORD row,WORD col); + static void resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClip); +}; + +inline +void ASMRoutines::clearBitmap(DWORD lpBitmapData,DWORD imageExtent) +{ + ::clearBitmap(lpBitmapData,imageExtent); +} + +inline +void ASMRoutines::setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE charByte) +{ + ::setBits(lpBitmapData,imageExtent,charByte); +} + +inline +void ASMRoutines::line(DWORD ptrData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD height,WORD value) +{ + ::lineWINGBlt(ptrData,lpFirstPoint,lpSecondPoint,width,height,value); +} + +inline +void ASMRoutines::initEdge(int edgeType,PureEdge *lpPureEdge) +{ + ::initEdge(edgeType,lpPureEdge); +} + +inline +void ASMRoutines::mapTexture(PureMap *lpEdgeMap) +{ + ::mapTexture(lpEdgeMap); +} + +inline +void ASMRoutines::setMaskInfo(WORD useMask,BYTE maskValue) +{ + ::setMaskInfo(useMask,maskValue); +} + +inline +void ASMRoutines::setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpSrcBitmapImage) +{ + ::setSrcBitmapInfo(width,height,lpSrcBitmapImage); +} + +inline +void ASMRoutines::setDstBitmapInfo(WORD width,WORD height,UHUGE *lpDstBitmapImage) +{ + ::setDstBitmapInfo(width,height,lpDstBitmapImage); +} + +inline +void ASMRoutines::getSrcDataByte(WORD row,WORD col) +{ + ::getSrcDataByte(row,col); +} + +inline +void ASMRoutines::resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClip) +{ + ::resampleClip(lpIn,lpOut,inLen,outLen,outClip); +} +#endif + diff --git a/ddraw/HOLD/TRIMAP32.ASM b/ddraw/HOLD/TRIMAP32.ASM new file mode 100644 index 0000000..44d4e91 --- /dev/null +++ b/ddraw/HOLD/TRIMAP32.ASM @@ -0,0 +1,436 @@ +;******************************************************************************************************** +; MODULE: TRIMAP32.ASM DATE: FEBRUARY 11, 1999 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT TARGET +; FUNCTION : TEXTURE MAPPING TRIANGLES +;******************************************************************************************************** +SMART +.386 +.MODEL FLAT +.DATA + +BitShift EQU 0Bh + +bmData@@mSrcWidth DD ? +bmData@@mSrcHeight DD ? +bmData@@mSrcExtent DD ? +bmData@@mlpSrcPtr DD ? +bmData@@mDstWidth DD ? +bmData@@mDstPitch DD ? +bmData@@mDstHeight DD ? +bmData@@mDstExtent DD ? +bmData@@mlpDstPtr DD ? +bmData@@mlpDstIndexPtr DD ? +bmData@@mlpPixelCallback DD ? +bmData@@mlpEdgeCallback DD ? + +.LALL +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\DDRAW\TRIMAP32.INC +INCLUDE ..\DDRAW\UTIL32.INC +.CODE + +edgeCallback MACRO + pushad ; save all general purpose registers + push esi ; save pointer to edge + call bmData@@mlpEdgeCallback ; call handler + add esp,04h ; adjust stack + popad ; restore all general purpose registers +ENDM + +pixelCallback MACRO + pushad ; save all general purpose registers + mov eax,ui ; move ui to eax register + round eax ; adjust/round + push eax ; save ui + mov eax,vi ; move vi to eax register + round eax ; adjust/round + push eax ; save vi + push x ; save x + push y ; save y + call bmData@@mlpPixelCallback ; call callback + add esp,10h ; adjust stack + popad ; restore all general purpose registers +ENDM + +pixelMarker MACRO + pushad ; save all general purpose registers + push 0000h ; push 0 + push 0000h ; push 0 + push 0000h ; push 0 + push 0000h ; push 0 + call bmData@@mlpPixelCallback ; call callback + add esp,10h ; adjust stack + popad ; restore all general purpose registers +ENDM + +round MACRO register +LOCAL @@return + mov edx,register ; copy register to edx + and edx,7FFh ; get remainder to edx register + shr register,BitShift ; get whole number to register + cmp edx,400h ; if remainder>1024 then increment eax + jle @@return ; ... otherwise return + inc register ; increment value in eax +@@return: +ENDM + +scanline MACRO + mov ecx,[esi].DirectTriEdge@@mxRight ; move mxRight into ecx + sub ecx,[esi].DirectTriEdge@@mxLeft ; subtract out mxLeft, this is dx + cmp ecx,0000h ; compare dx to zero + je @@scanlineLoopEnd ; if dx is zero then don't scan the line +; mov eax,[esi].DirectTriEdge@@muRight ; move muRight into eax +; sub eax,[esi].DirectTriEdge@@muLeft ; subtract out muLeft + mov eax,[esi].DirectTriEdge@@muLeft ; move muLeft into eax register + sub eax,[esi].DirectTriEdge@@muRight ; subtract out muRight + shl eax,BitShift ; multiply this by 2048 + divide eax,ecx ; divide by dx, this is du + mov du,eax ; store du into local variable +; mov eax,[esi].DirectTriEdge@@mvRight ; move mvRight into eax +; sub eax,[esi].DirectTriEdge@@mvLeft ; subtract out mvLeft + mov eax,[esi].DirectTriEdge@@mvLeft ; move mvLeft into eax + sub eax,[esi].DirectTriEdge@@mvRight ; subtract out mvRight + shl eax,BitShift ; multiply this by 2048 + divide eax,ecx ; divide by dx, this is dv + mov dv,eax ; store dv into local variable + mov eax,[esi].DirectTriEdge@@muLeft ; move muLeft into eax + mov ui,eax ; muLeft is initial value for ui + mov eax,[esi].DirectTriEdge@@mvLeft ; move mvLeft into eax + mov vi,eax ; mvLeft is initial value for vi + mov eax,[esi].DirectTriEdge@@mxLeft ; move mxLeft into eax + mov x,eax ; mxLeft is initial value for x + shr x,BitShift ; truncate mxLeft value + pixelMarker +@@scanlineLoop: ; scanline loop sync address + mov eax,[esi].DirectTriEdge@@mxRight ; move mxRight into eax + shr eax,BitShift ; truncate mxRight + cmp x,eax ; compare x to mxRight + jg @@scanlineLoopEnd ; if x>mxRight then we're done with the scanline + pixelCallback + getSrcDataByte ; get source byte at [ui][vi] to cl register + setDstDataByte ; set destination byte at [x][y],cl + incrementScanLine ; advance along the scanline + jmp @@scanlineLoop ; continue execution +@@scanlineLoopEnd: ; end scanline sync address +ENDM + +incrementScanLine MACRO ; advance along the scanline + mov eax,ui ; move ui to eax + shl eax,BitShift ; multiply by 2048 + add eax,du ; add in du + shr eax,BitShift ; divide by 2048 + mov ui,eax ; update ui + mov eax,vi ; move vi to eax + shl eax,BitShift ; multiply by 2048 + add eax,dv ; add in dv + shr eax,BitShift ; divide by 2048 + mov vi,eax ; update vi + inc x ; increment x +ENDM + +getSrcDataByte MACRO ; cl=getSrcDataByte(ui,vi) +LOCAL @@continue + mov ebx,vi ; move column into ebx + round ebx ; round the result + cmp ebx,bmData@@mSrcWidth ; compare column to width + jge @@continue ; if column greater than width we're done + mov eax,ui ; move row into eax + round eax ; round the result + cmp eax,bmData@@mSrcHeight ; compare row to height + jge @@continue ; if row greater than height we're done + imul eax,bmData@@mSrcWidth ; multiply (row*width)->eax + add eax,bmData@@mSrcWidth ; add in the width + mov edx,bmData@@mSrcExtent ; move bitmap extent to edx + sub edx,eax ; subtract (row*width)+width from extent + add edx,ebx ; now add in the column + mov ebx,bmData@@mlpSrcPtr ; move bitmap pointer into ebx + mov cl,byte ptr[ebx+edx] ; get the byte +@@continue: +ENDM + +setDstDataByte MACRO ; setDstDataByte x,y,cl + mov eax,x ; move column into ebx + cmp eax,bmData@@mDstWidth ; compare column to width + jge @@continue ; if column greater than width, return + mov eax,y ; move row into eax + cmp eax,bmData@@mDstHeight ; compare row to height + jge @@continue ; if row greater than height, return + imul eax,bmData@@mDstWidth ; multiply (row*width)->eax + add eax,bmData@@mDstWidth ; add in the width + mov edx,bmData@@mDstExtent ; move bitmap extent to edx + sub edx,eax ; subtract (row*width)+width from extent + add edx,x ; now add in the column + mov eax,bmData@@mlpDstPtr ; move bitmap pointer into ebx + mov byte ptr[eax+edx],cl ; set the byte +@@continue: +ENDM + +verifyLeft MACRO ; verifyLeft(eax has mxLeft) +LOCAL @@noChangeDir ; local sync address + cmp scanMode,0002h ; check the scan mode + jne @@noChangeDir ; if scan mode is not LeftHandDiscontinuous then done + mov ebx,[esi].DirectTriEdge@@mx2 ; move x2 into ebx register + shl ebx,BitShift ; adjust ebx for precision + cmp eax,ebx ; compare mxLeft to x2 + jge @@noChangeDir ; if mxLeft>=x1 then we're okay + sub eax,[esi].DirectTriEdge@@mDXLeft ; subtract out mDXLeft, this is adjusted mxLeft + mov [esi].DirectTriEdge@@mxLeft,eax ; save adjusted mxLeft + mov ebx,[esi].DirectTriEdge@@my1 ; move y1 into ebx register + sub ebx,y ; subtract (y1-y) + mov ecx,[esi].DirectTriEdge@@mx1 ; move x1 into ecx register + sub ecx,[esi].DirectTriEdge@@mx2 ; subtract (x1-x2) + shl ecx,BitShift ; adjust eax for precision + divide ecx,ebx ; eax has (x1-x2)/(y1-y), result to eax + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is new mDXLeft + mov ebx,[esi].DirectTriEdge@@mxLeft ; move mxLeft into ebx register + add ebx,eax ; ebx has mxLeft+mDXLeft + mov [esi].DirectTriEdge@@mxLeft,ebx ; this is new mxLeft +@@noChangeDir: ; no change direction sync address +ENDM + +verifyRight MACRO ; verifyRight (eax has mxRight) +LOCAL @@noChangeDir ; local sync address + cmp scanMode,0001h ; check the scan mode + jne @@noChangeDir ; if scan mode is not RightHandDiscontinuous then done + mov ebx,[esi].DirectTriEdge@@mx2 ; is mxRight greater than x2 + shl ebx,BitShift ; adjust ebx for precision + cmp eax,ebx ; check mxLeft against x2 + jle @@noChangeDir ; if mxLeft<=x2 then we're okay + sub eax,[esi].DirectTriEdge@@mDXRight ; subtract mDXRight from mxRight + mov [esi].DirectTriEdge@@mxRight,eax ; this is new mxRight + mov ebx,[esi].DirectTriEdge@@my1 ; move y1 into ebx register + sub ebx,[esi].DirectTriEdge@@my2 ; subtract (y1-y2) this is new dy + mov ecx,[esi].DirectTriEdge@@mx1 ; move x1 into ecx + sub ecx,[esi].DirectTriEdge@@mx2 ; subtract (x1-x2) + shl ecx,BitShift ; muliply by 2048 for precision + divide ecx,ebx ; ecx has (x1-x2)/(y1-y), result to eax + mov [esi].DirectTriEdge@@mDXRight,eax ; this is new mDXRight + mov ebx,[esi].DirectTriEdge@@mxRight ; move mxRight into ebx register + add ebx,eax ; add mDXRight to mxRight + mov [esi].DirectTriEdge@@mxRight,ebx ; this is new mxRight +@@noChangeDir: +ENDM + +increment MACRO + mov eax,[esi].DirectTriEdge@@mxLeft ; move mxLeft into eax + add eax,[esi].DirectTriEdge@@mDXLeft ; add in the delta + mov [esi].DirectTriEdge@@mxLeft,eax ; this is new mxLeft + verifyLeft ; verify mxLeft + mov eax,[esi].DirectTriEdge@@mxRight ; move mxRight into eax + add eax,[esi].DirectTriEdge@@mDXRight ; add in the delta + mov [esi].DirectTriEdge@@mxRight,eax ; this is new mxRight + verifyRight ; verify mxLeft + mov eax,[esi].DirectTriEdge@@muLeft ; move muLeft into eax + add eax,[esi].DirectTriEdge@@mDULeft ; add in the delta + mov [esi].DirectTriEdge@@muLeft,eax ; this is new muLeft + mov eax,[esi].DirectTriEdge@@muRight ; move muRight into eax + add eax,[esi].DirectTriEdge@@mDURight ; add in the delta + mov [esi].DirectTriEdge@@muRight,eax ; this is new muRight + mov eax,[esi].DirectTriEdge@@mvLeft ; move mvLeft into eax + add eax,[esi].DirectTriEdge@@mDVLeft ; add in the delta + mov [esi].DirectTriEdge@@mvLeft,eax ; this is new mvLeft + mov eax,[esi].DirectTriEdge@@mvRight ; move mvRight into eax + add eax,[esi].DirectTriEdge@@mDVRight ; add in the delta + mov [esi].DirectTriEdge@@mvRight,eax ; this is new mvRight + inc y ; increment y +ENDM + +initialize MACRO +LOCAL @@RightHandDiscontinuous,@@LeftHandleDiscontinuous,@@LevelPlane,@@NonLevelPlane,@@PlaneInitSync, \ + @@InitFailed + mov eax,[esi].DirectTriEdge@@my2 ; move y2 into eax register + cmp eax,[esi].DirectTriEdge@@my0 ; does y2==y0 + je @@LevelPlane ; if so then handle initialization for it + mov eax,[esi].DirectTriEdge@@mx2 ; move x2 into eax register + cmp eax,[esi].DirectTriEdge@@mx1 ; compare x2 to x1 + jg @@RightHandDiscontinuous ; if x2>x1 then it's right handed + jmp @@LeftHandDiscontinuous ; otherwise we treat it as left handed +@@LevelPlane: ; LevelPlane sync address + mov scanMode,0000h ; set mode for traversal + mov ebx,[esi].DirectTriEdge@@my1 ; move y1 into ebx register + sub ebx,[esi].DirectTriEdge@@my2 ; ebx has (y1-y2), this is dy + cmp ebx,0000h ; is ebx zero? + je @@InitFail ; if so then set error code + mov eax,[esi].DirectTriEdge@@mx1 ; move x1 into eax + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x1-x0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,ebx ; eax has (x2-x0)/(y1-y2) + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is mDXLeft + mov eax,[esi].DirectTriEdge@@mx1 ; move x1 into eax register + sub eax,[esi].DirectTriEdge@@mx2 ; eax has (x1-x2) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,ebx ; eax has (x1-x2)/(y1-y2) + mov [esi].DirectTriEdge@@mDXRight,eax ; this is mDXRight + mov eax,[esi].DirectTriEdge@@mx0 ; move x0 into eax register + mov ebx,[esi].DirectTriEdge@@mx2 ; move x2 into ebx register + shl eax,BitShift ; adjust mxLeft for precision + shl ebx,BitShift ; adjust mxRight for precision + mov [esi].DirectTriEdge@@mxLeft,eax ; mxLeft=x0 + mov [esi].DirectTriEdge@@mxRight,ebx ; mxRight=x2 + jmp @@PlaneInitSync ; we're done initializing x,y params +@@RightHandDiscontinuous: ; RightHandDiscontinuous sync address + mov scanMode,0001h ; set mode for traversal + mov ebx,[esi].DirectTriEdge@@my1 ; move y1 to ebx register + sub ebx,[esi].DirectTriEdge@@my0 ; ebx has (y1-y0), this is dy + mov eax,[esi].DirectTriEdge@@mx1 ; move x1 to eax register + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x1-x0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,ebx ; eax has (x1-x0)/(y1-y0) + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is mDXLeft + mov ebx,[esi].DirectTriEdge@@my2 ; move y2 into ebx register + sub ebx,[esi].DirectTriEdge@@my0 ; ebx has (y2-y0), this is dy + mov eax,[esi].DirectTriEdge@@mx2 ; move x2 into eax register + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x2-x0) + shl eax,BitShift ; multiply eax by 2048 for precision + divide eax,ebx ; eax has (x2-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXRight,eax ; this is mDXRight + mov eax,[esi].DirectTriEdge@@mx0 ; move x0 into eax register + shl eax,BitShift ; adjust mxLeft/mxRight for precision + mov [esi].DirectTriEdge@@mxLeft,eax ; move x0 into mxLeft + mov [esi].DirectTriEdge@@mxRight,eax ; move x0 into mxRight + jmp @@PlaneInitSync ; we're done initializing x,y params +@@LeftHandDiscontinuous: ; LeftHandDiscontinuous sync address + mov scanMode,0002h ; set mode for traversal + mov ebx,[esi].DirectTriEdge@@my2 ; move y2 into ebx register + sub ebx,[esi].DirectTriEdge@@my0 ; subtract (y2-y0), this is dy + mov eax,[esi].DirectTriEdge@@mx2 ; move x2 into eax register + sub eax,[esi].DirectTriEdge@@mx0 ; subtract x2-x0 + shl eax,BitShift ; multiply by 2048 for precision + divide eax,ebx ; eax has (x2-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is mDXLeft + mov ebx,[esi].DirectTriEdge@@my1 ; move y1 into ebx register + sub ebx,[esi].DirectTriEdge@@my0 ; subtract (y1-y0), this is dy + mov eax,[esi].DirectTriEdge@@mx1 ; move x1 into eax register + sub eax,[esi].DirectTriEdge@@mx0 ; subtract (x0-x1) + shl eax,BitShift ; multiply by 2048 for precision + divide eax,ebx ; divide (x1-x0)/(y1-y0) + mov [esi].DirectTriEdge@@mDXRight,eax ; this is mDXRight + mov eax,[esi].DirectTriEdge@@mx0 ; move x0 into eax register + shl eax,BitShift ; adjust mxLeft/mxRight for precision + mov [esi].DirectTriEdge@@mxLeft,eax ; mxLeft=x0 + mov [esi].DirectTriEdge@@mxRight,eax ; mxRight=x0 + jmp @@PlaneInitSync ; we're done initializing x,y params +@@PlaneInitSync: ; PlaneInitSync address + mov eax,[esi].DirectTriEdge@@mu2 ; move u2 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u2-u0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,ebx ; eax has (u2-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDULeft,eax ; this is mDULeft + mov eax,[esi].DirectTriEdge@@mu1 ; move u1 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u1-u0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,ebx ; eax has (u1-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDURight,eax ; this is mDURight + mov eax,[esi].DirectTriEdge@@mv2 ; move v2 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v2-v0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,ebx ; eax has (v2-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVLeft,eax ; this is mDVLeft + mov eax,[esi].DirectTriEdge@@mv1 ; move v1 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v1-v0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,ebx ; eax has (v1-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVRight,eax ; this is mDVRight + mov eax,[esi].DirectTriEdge@@mu0 ; move u0 into eax + mov [esi].DirectTriEdge@@muLeft,eax ; muLeft=u0 + mov [esi].DirectTriEdge@@muRight,eax ; muRight=u0 + mov eax,[esi].DirectTriEdge@@mv0 ; move v0 into eax + mov [esi].DirectTriEdge@@mvLeft,eax ; mvLeft=v0 + mov [esi].DirectTriEdge@@mvRight,eax ; mvRight=v0 + jmp @@InitSuccess ; jump over failure code +@@InitFail: ; InitFail sync address + stc ; Carry Flag set on failure +@@InitSuccess: ; InitSuccess sync address +ENDM + +_directTriSetSrcBitmapInfo proc near ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov eax,dword ptr[ebp+08h] ; move width into eax register + mov bmData@@mSrcWidth,eax ; move width into bmData@@mSrcWidth + mov ebx,dword ptr[ebp+0Ch] ; move height into ebx register + mov bmData@@mSrcHeight,ebx ; move height into ebx register + imul eax,ebx ; multiply width*height, result to eax + mov bmData@@mSrcExtent,eax ; (width*height) to mSrcExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpSrcPtr ; restore in mlpSrcPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_directTriSetSrcBitmapInfo endp +_directTriSetDstBitmapInfo proc near ; void setDstBitmapInfo(WORD width,WORD height,WORD pitch,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov eax,dword ptr[ebp+10h] ; move pitch into eax register + mov bmData@@mDstPitch,eax ; move pitch into mDstPitch + mov eax,dword ptr[ebp+08h] ; move width into eeax register + mov bmData@@mDstWidth,eax ; move width into mDstWidth + mov ebx,dword ptr[ebp+0Ch] ; move height into ebx register + mov bmData@@mDstHeight,ebx ; move height into mDstHeight + imul eax,ebx ; multiply width*height, result to eax + mov bmData@@mDstExtent,eax ; move (width*height) into mDstExtent + push dword ptr[ebp+14h] ; save lpBitmapImage on stack + pop bmData@@mlpDstPtr ; restore in mlpDstPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_directTriSetDstBitmapInfo endp + +_directTriSetPixelCallback proc near + push ebp + mov ebp,esp + mov eax,[ebp+08h] + mov bmData@@mlpPixelCallback,eax + pop ebp + retn +_directTriSetPixelCallback endp + +_directTriSetEdgeCallback proc near + push ebp + mov ebp,esp + mov eax,[ebp+08h] + mov bmData@@mlpEdgeCallback,eax + pop ebp + retn +_directTriSetEdgeCallback endp + +_directTriMapTexture proc near ; void directTriMapTexture(DirectTriEdge *pEdge) +LOCAL y:DWORD,x:DWORD,du:DWORD,dv:DWORD,ui:DWORD,vi:DWORD,scanMode:DWORD=LocalLength ; local variables for proc + push ebp ; save prior stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; make room for local variables + pushad ; save all general purpose registers + mov esi,[ebp+08h] ; move pEdge to esi register + clc ; clear the carry flag + initialize ; initialize the edge + jc @@verticalLoopEnd ; if we failed to initialize edge then return + mov eax,[esi].DirectTriEdge@@my0 ; move y0 into eax + mov y,eax ; initialize y with y0 +@@verticalLoop: ; beginning of vertical loop + mov ecx,[esi].DirectTriEdge@@my1 ; move y1 into ecx + cmp y,ecx ; compare y to y1 + jg @@verticalLoopEnd ; if y>y1 then we're done + scanline ; perform scanline on the horizontal + increment ; increment along the vertical + edgeCallback ; call the edge handler + jmp @@verticalLoop ; continue execution +@@verticalLoopEnd: ; end loop sync address + popad ; restore all general purpose registers + add esp,LocalLength ; remove local variables from frame + pop ebp ; restore prior stack frame + retn ; return near to caller +_directTriMapTexture endp +public _directTriSetSrcBitmapInfo +public _directTriSetDstBitmapInfo +public _directTriMapTexture +public _directTriSetPixelCallback +public _directTriSetEdgeCallback + +END diff --git a/ddraw/HOLD/TRIMAP32.INC b/ddraw/HOLD/TRIMAP32.INC new file mode 100644 index 0000000..3bffba9 --- /dev/null +++ b/ddraw/HOLD/TRIMAP32.INC @@ -0,0 +1,32 @@ +;******************************************************************************************************** +; FILE:TRIMAP32.INC +; FUNCTION: INCLUDE FILE FOR ASM TRIANGLE TEXTURE MAPPING (DIRECT DRAW VERSION) +; AUTHOR:SEAN M. KESSLER +;******************************************************************************************************** +DirectTriEdge STRUC + DirectTriEdge@@vfptr DD ? + DirectTriEdge@@mDXLeft DD ? + DirectTriEdge@@mDXRight DD ? + DirectTriEdge@@mDULeft DD ? + DirectTriEdge@@mDURight DD ? + DirectTriEdge@@mDVLeft DD ? + DirectTriEdge@@mDVRight DD ? + DirectTriEdge@@mxLeft DD ? + DirectTriEdge@@mxRight DD ? + DirectTriEdge@@mvLeft DD ? + DirectTriEdge@@mvRight DD ? + DirectTriEdge@@muLeft DD ? + DirectTriEdge@@muRight DD ? + DirectTriEdge@@mx0 DD ? + DirectTriEdge@@my0 DD ? + DirectTriEdge@@mx1 DD ? + DirectTriEdge@@my1 DD ? + DirectTriEdge@@mx2 DD ? + DirectTriEdge@@my2 DD ? + DirectTriEdge@@mu0 DD ? + DirectTriEdge@@mv0 DD ? + DirectTriEdge@@mu1 DD ? + DirectTriEdge@@mv1 DD ? + DirectTriEdge@@mu2 DD ? + DirectTriEdge@@mv2 DD ? +DirectTriEdge ENDS diff --git a/ddraw/HOLD/TRITEXTR.CPP b/ddraw/HOLD/TRITEXTR.CPP new file mode 100644 index 0000000..8e24fe8 --- /dev/null +++ b/ddraw/HOLD/TRITEXTR.CPP @@ -0,0 +1,113 @@ +#include +#include +#include +#include +#include +#include + +File outFile("output.dat","wb"); + +DirectTriTexture::DirectTriTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DIBitmap &drawingSurface,Device3D &displayDevice,MapFrom mapFrom) +{ + mTriangle3D=angle3D; + displayDevice.mapCoordinates(mTriangle3D,mTriangle); +// mTriangle.orderPoints(); + mTriEdge.x0(mTriangle[0].x()); + mTriEdge.y0(mTriangle[0].y()); + mTriEdge.x1(mTriangle[1].x()); + mTriEdge.y1(mTriangle[1].y()); + mTriEdge.x2(mTriangle[2].x()); + mTriEdge.y2(mTriangle[2].y()); + if(MapFromUpperRight==mapFrom) + { + mTriEdge.u0(0); + mTriEdge.v0(0); + mTriEdge.u1(textureBitmap.width()-1); + mTriEdge.v1(0); + mTriEdge.u2(textureBitmap.width()-1); + mTriEdge.v2(textureBitmap.height()-1); + } + else + { + mTriEdge.u0(0); + mTriEdge.v0(0); + mTriEdge.u1(textureBitmap.width()-1); + mTriEdge.v1(textureBitmap.height()-1); + mTriEdge.u2(0); + mTriEdge.v2(textureBitmap.height()-1); + } + ::directTriSetSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::directTriSetDstBitmapInfo(drawingSurface.width(),drawingSurface.height(),drawingSurface.width(),(unsigned char*)drawingSurface.ptrData()); + ::directTriSetPixelCallback(&DirectTriTexture::pixelCallback); + ::directTriSetEdgeCallback(&DirectTriTexture::edgeCallback); +} + +DirectTriTexture::DirectTriTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DrawingSurface &drawingSurface,Device3D &displayDevice,MapFrom mapFrom) +{ + mTriangle3D=angle3D; + displayDevice.mapCoordinates(mTriangle3D,mTriangle); +// mTriangle.orderPoints(); + mTriEdge.x0(mTriangle[0].x()); + mTriEdge.y0(mTriangle[0].y()); + mTriEdge.x1(mTriangle[1].x()); + mTriEdge.y1(mTriangle[1].y()); + mTriEdge.x2(mTriangle[2].x()); + mTriEdge.y2(mTriangle[2].y()); + if(MapFromUpperRight==mapFrom) + { + mTriEdge.u0(0); + mTriEdge.v0(0); + mTriEdge.u1(textureBitmap.width()-1); + mTriEdge.v1(0); + mTriEdge.u2(textureBitmap.width()-1); + mTriEdge.v2(textureBitmap.height()-1); + } + else + { + mTriEdge.u0(0); + mTriEdge.v0(0); + mTriEdge.u1(textureBitmap.width()-1); + mTriEdge.v1(textureBitmap.height()-1); + mTriEdge.u2(0); + mTriEdge.v2(textureBitmap.height()-1); + } + ::directTriSetSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::directTriSetDstBitmapInfo(drawingSurface.width(),drawingSurface.height(),drawingSurface.pitch(),(unsigned char*)drawingSurface.ptrSurface()); + ::directTriSetPixelCallback(&DirectTriTexture::pixelCallback); + ::directTriSetEdgeCallback(&DirectTriTexture::edgeCallback); +} + +DirectTriTexture::~DirectTriTexture() +{ +} + +void DirectTriTexture::mapTexture(void) +{ + ::directTriMapTexture(&mTriEdge); +} + +void DirectTriTexture::pixelCallback(int y,int x,int vi,int ui) +{ +#if 0 + String strDebug; + + if(!y&&!x&&!vi&&!ui)outFile.writeLine("scanline"); + else + { + ::sprintf(strDebug,"ui: %d vi:%d x:%d y:%d",ui,vi,x,y); + outFile.writeLine(strDebug); + } +#endif +} + +void DirectTriTexture::edgeCallback(DirectTriEdge *pEdge) +{ +#if 0 + String strDebug; + strDebug.reserve(1024); + ::sprintf(strDebug,"xLeft:%d xRight:%d uLeft:%d uRight:%d vLeft:%d vRight:%d dxLeft:%d dxRight:%d duLeft:%d duRight:%d dvLeft:%d duRight:%d", + int((float)pEdge->xLeft()/2048.00),int((float)pEdge->xRight()/2048.00),int((float)pEdge->uLeft()/2048.00),int((float)pEdge->uRight()/2048.00),int((float)pEdge->vLeft()/2048.00),int((float)pEdge->vRight()/2048.00), + int((float)pEdge->dxLeft()/2048.00),int((float)pEdge->dxRight()/2048.00),int((float)pEdge->duLeft()/2048.00),int((float)pEdge->duRight()/2048.00),int((float)pEdge->dvLeft()/2048.00),int((float)pEdge->dvRight()/2048.00)); + outFile.writeLine(strDebug); +#endif +} diff --git a/ddraw/HOLD/TRITEXTR.HPP b/ddraw/HOLD/TRITEXTR.HPP new file mode 100644 index 0000000..5639e7e --- /dev/null +++ b/ddraw/HOLD/TRITEXTR.HPP @@ -0,0 +1,42 @@ +#ifndef _DDRAW_DIRECTTRITEXTURE_HPP_ +#define _DDRAW_DIRECTTRITEXTURE_HPP_ +#ifndef _ENGINE_TRIANGLE3D_HPP_ +#include +#endif +#ifndef _ENGINE_TRIANGLE_HPP_ +#include +#endif +#ifndef _DDRAW_TRIEDGE_HPP_ +#include +#endif + +class Bitmap; +class DrawingSurface; +class Device3D; +class DIBitmap; + +extern "C" +{ + void directTriSetSrcBitmapInfo(DWORD width,DWORD height,unsigned char *lpSrcBitmapImage); + void directTriSetDstBitmapInfo(DWORD width,DWORD height,DWORD pitch,unsigned char *lpDstBitmapImage); + void directTriMapTexture(DirectTriEdge *pDirectTriEdge); + void directTriSetPixelCallback(void (*PFNPIXELCALLBACK)(int ui,int vi,int x,int y)); + void directTriSetEdgeCallback(void (*PFNEDGECALLBACK)(DirectTriEdge *pEdge)); +} + +class DirectTriTexture +{ +public: + enum MapFrom{MapFromUpperRight,MapFromLowerLeft}; + DirectTriTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DrawingSurface &drawingSurface,Device3D &displayDevice,MapFrom mapFrom=MapFromUpperRight); + DirectTriTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DIBitmap &drawingSurface,Device3D &displayDevice,MapFrom mapFrom=MapFromUpperRight); + virtual ~DirectTriTexture(); + void mapTexture(void); +private: + static void pixelCallback(int ui,int vi,int x,int y); + static void edgeCallback(DirectTriEdge *pEdge); + Triangle3D mTriangle3D; + Triangle mTriangle; + DirectTriEdge mTriEdge; +}; +#endif \ No newline at end of file diff --git a/ddraw/MAIN.CPP b/ddraw/MAIN.CPP new file mode 100644 index 0000000..6b4590a --- /dev/null +++ b/ddraw/MAIN.CPP @@ -0,0 +1,8 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainWindow mainWindow; + return mainWindow.messageLoop(); +} diff --git a/ddraw/MAINWND.CPP b/ddraw/MAINWND.CPP new file mode 100644 index 0000000..c12e7a7 --- /dev/null +++ b/ddraw/MAINWND.CPP @@ -0,0 +1,393 @@ +//#define _USEDIRECTDRAW_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char MainWindow::szClassName[]="DDrawTest"; +char MainWindow::szMenuName[]=""; + +MainWindow::MainWindow(void) +: mTextureBitmap("c:\\work\\scene\\media\\bmp\\FLAT221.bmp") +{ + mPaintHandler.setCallback(this,&MainWindow::paintHandler); + mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); + mCommandHandler.setCallback(this,&MainWindow::commandHandler); + mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler); + mKeyUpHandler.setCallback(this,&MainWindow::keyUpHandler); + mSizeHandler.setCallback(this,&MainWindow::sizeHandler); + mCreateHandler.setCallback(this,&MainWindow::createHandler); + mTimerHandler.setCallback(this,&MainWindow::timerHandler); + mActivateAppHandler.setCallback(this,&MainWindow::activateAppHandler); + mDisplayChangeHandler.setCallback(this,&MainWindow::displayChangeHandler); + mDialogCodeHandler.setCallback(this,&MainWindow::dialogCodeHandler); + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN|WS_SIZEBOX, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::ActivateAppHandler,&mActivateAppHandler); + insertHandler(VectorHandler::DisplayChangeHandler,&mDisplayChangeHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::ActivateAppHandler,&mActivateAppHandler); + removeHandler(VectorHandler::DisplayChangeHandler,&mDisplayChangeHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_OWNDC|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =processInstance(); + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass)); +} + +#if defined(_USEDIRECTDRAW_) +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + SurfaceCapabilities surfaceCapabilities(SurfaceCapabilities::Capabilities(SurfaceCapabilities::PrimarySurface|SurfaceCapabilities::Device3D)); + SurfaceDescription surfaceDescription; + + mDevice3D=::new Device3D(*this); + mDevice3D.disposition(PointerDisposition::Delete); + mDevice3D->focusPoint(Point3D(0,0,-1)); + mDirectDraw=::new DirectDraw(); + mDirectDraw.disposition(PointerDisposition::Delete); + mDirectDraw->setCooperativeLevel(*this,DirectDraw::CoopFlags(DirectDraw::Exclusive|DirectDraw::FullScreen)); + mDirectDraw->setDisplayMode(DisplayWidth,DisplayHeight,DisplayBPP); + surfaceDescription.flags(SurfaceDescription::Capabilities); + surfaceDescription.surfaceCapabilities(surfaceCapabilities); + if(!mDirectDraw->createSurface(surfaceDescription,mPrimarySurface).okResult())return FALSE; + mDirectPalette.readPalette("c:\\work\\scene\\media\\bmp\\redwall1.pal"); +// mDirectPalette.systemPalette(); + mDirectDraw->createPalette(mDirectPalette); + mPrimarySurface.setPalette(mDirectPalette); + mPrimarySurface.lock(); + mPrimarySurface.unlock(); +// mDirectDraw->createDirect3D(mPrimarySurface,mDirect3D,mDirectDevice3D); + return FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + mDirectPalette.destroy(); + mDirectDevice3D.destroy(); + mDirect3D.destroy(); + mPrimarySurface.destroy(); + mDirectDraw.destroy(); + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} +#else +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ +// PurePalette purePalette("c:\\work\\scene\\media\\bmp\\redwall1.pal"); + mPalette="c:\\work\\scene\\media\\bmp\\redwall1.pal"; + mDevice3D=::new Device3D(*this); + mDevice3D.disposition(PointerDisposition::Delete); + mDevice3D->focusPoint(Point3D(0,0,-1)); + mDIBitmap=::new DIBitmap(*mDevice3D,width(),height(),mPalette); + mDIBitmap.disposition(PointerDisposition::Delete); + mPalette.usePalette(*mDevice3D,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return FALSE; +} +#endif + +CallbackData::ReturnType MainWindow::activateAppHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::displayChangeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +#if defined(_USEDIRECTDRAW_) +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + Vector3D dstPoints; + Triangle3D angle3D; + Triangle angle; + +// mDirectDraw->setCooperativeLevel(*this,DirectDraw::CoopFlags(DirectDraw::Normal)); + mDirectDraw->setCooperativeLevel(*this,DirectDraw::CoopFlags(DirectDraw::Exclusive|DirectDraw::FullScreen)); + mDirectDraw->setDisplayMode(DisplayWidth,DisplayHeight,DisplayBPP); + mDirectDraw->restoreAllSurfaces(); + +// dstPoints[0]=Point3D(-20,20,10); +// dstPoints[1]=Point3D(20,20,10); +// dstPoints[2]=Point3D(20,-20,10); +// dstPoints[3]=Point3D(-20,-20,10); + angle3D[0]=Point3D(-20,0,0); + angle3D[1]=Point3D(0,20,0); + angle3D[2]=Point3D(20,0,0); + + mPrimarySurface.lock(); + mPrimarySurface.clear(); +// DirectTexture directTexture(dstPoints,mTextureBitmap,mPrimarySurface,*mDevice3D); + DirectTexture directTexture(angle3D,mTextureBitmap,mPrimarySurface,*mDevice3D); + directTexture.mapTexture(); + + mDevice3D->mapCoordinates(angle3D,angle); + mPrimarySurface.line(angle[0],angle[1],192); + mPrimarySurface.line(angle[1],angle[2],192); + mPrimarySurface.line(angle[2],angle[0],192); + + mPrimarySurface.unlock(); + return (CallbackData::ReturnType)FALSE; +} +#else +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + Triangle3D angle3D[3]; + Triangle angle; + + +//VERTEX(-4,16,-25); +//VERTEX(-24,16,-25); +//VERTEX(-9,-10,11); +//VERTEX(5,-19,0); +//VERTEX(-11,12,-36); +//VERTEX(-31,12,-36); +//VERTEX(-11,-19,2); +//VERTEX(3,-28,-8); +//VERTEX(-2,1,-28); +//VERTEX(-17,10,-17); +//VERTEX(-10,14,-5); +//VERTEX(4,5,-16); +//SURFACE(3,0,2); +//SURFACE(2,0,1); +//SURFACE(7,3,2); +//SURFACE(7,2,6); +//SURFACE(3,7,0); +//SURFACE(0,7,4); +//SURFACE(0,4,1); +//SURFACE(1,4,5); +//SURFACE(6,2,1); +//SURFACE(6,1,5); +//SURFACE(5,4,6); +//SURFACE(6,4,7); + + (angle3D[0])[0]=Point3D(5,-19,0); + (angle3D[0])[1]=Point3D(-4,16,-25); + (angle3D[0])[2]=Point3D(-9,-10,11); + + (angle3D[1])[0]=Point3D(-9,-10,11); + (angle3D[1])[1]=Point3D(-4,16,-25); + (angle3D[1])[2]=Point3D(-24,-16,-25); + + (angle3D[2])[0]=Point3D(3,-28,-8); + (angle3D[2])[1]=Point3D(5,-19,0); + (angle3D[2])[2]=Point3D(-9,-10,11); + +// Vector3D dstPoints; +// dstPoints[0]=Point3D(-20,20,10); +// dstPoints[1]=Point3D(20,20,10); +// dstPoints[2]=Point3D(20,-20,10); +// dstPoints[3]=Point3D(-20,-20,10); +// Texture texture(dstPoints,mTextureBitmap,*mDIBitmap,*mDevice3D); + + + mDIBitmap->clearBits(); + for(int index=0;indexmapCoordinates(angle3D[index],angle); + mDIBitmap->line(angle[0],angle[1],192); + mDIBitmap->line(angle[1],angle[2],192); + mDIBitmap->line(angle[2],angle[0],192); + } + mDIBitmap->bitBlt(*mDevice3D); + +#if 0 + Triangle3D angle3D; + Triangle angle; + + mDIBitmap->clearBits(); + angle3D[0]=Point3D(0,0,0); + angle3D[1]=Point3D(128,0,0); + angle3D[2]=Point3D(0,128,0); + { + DirectTriTexture directTriTexture(angle3D,mTextureBitmap,*mDIBitmap,*mDevice3D); + directTriTexture.mapTexture(); + } + mDevice3D->mapCoordinates(angle3D,angle); + mDIBitmap->line(angle[0],angle[1],192); + mDIBitmap->line(angle[1],angle[2],192); + mDIBitmap->line(angle[2],angle[0],192); + mDIBitmap->bitBlt(*mDevice3D); +#endif + return (CallbackData::ReturnType)FALSE; +} +#endif + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::dialogCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +CallbackData::ReturnType MainWindow::keyUpHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &someCallbackData) +{ + KeyData keyData(someCallbackData); + int repeatIndex; + + switch(keyData.virtualKey()) + { + case inKey : + if(shiftKeyPressed())mDevice3D->cameraTwistDegrees(mDevice3D->cameraTwistDegrees()-ThetaDelta); + mDevice3D->viewPlaneDistance(mDevice3D->viewPlaneDistance()+ViewDelta); + invalidate(FALSE); + break; + case outKey : + if(shiftKeyPressed())mDevice3D->cameraTwistDegrees(mDevice3D->cameraTwistDegrees()+ThetaDelta); + mDevice3D->viewPlaneDistance(mDevice3D->viewPlaneDistance()-ViewDelta); + invalidate(FALSE); + break; + case VK_UP : + for(repeatIndex=0;repeatIndexcameraPoint()); + cameraPoint.y(cameraPoint.y()+TurnDelta); + mDevice3D->cameraPoint(cameraPoint); + return TRUE; +} + +WORD MainWindow::handleDownArrow(void) +{ + Point3D cameraPoint(mDevice3D->cameraPoint()); + cameraPoint.y(cameraPoint.y()-TurnDelta); + mDevice3D->cameraPoint(cameraPoint); + return TRUE; +} + +WORD MainWindow::handleLeftArrow(void) +{ + Point3D cameraPoint(mDevice3D->cameraPoint()); + if(shiftKeyPressed())mDevice3D->cameraTwistDegrees(mDevice3D->cameraTwistDegrees()-ThetaDelta); + else cameraPoint.x(cameraPoint.x()+TurnDelta); + mDevice3D->cameraPoint(cameraPoint); + return TRUE; +} + +WORD MainWindow::handleRightArrow(void) +{ + Point3D cameraPoint(mDevice3D->cameraPoint()); + if(shiftKeyPressed())mDevice3D->cameraTwistDegrees(mDevice3D->cameraTwistDegrees()+ThetaDelta); + else cameraPoint.x(cameraPoint.x()-TurnDelta); + mDevice3D->cameraPoint(cameraPoint); + return TRUE; +} + +inline +WORD MainWindow::shiftKeyPressed(void)const +{ + return ::GetKeyState(VK_SHIFT)&0x8000; +} diff --git a/ddraw/MAINWND.HPP b/ddraw/MAINWND.HPP new file mode 100644 index 0000000..04d6381 --- /dev/null +++ b/ddraw/MAINWND.HPP @@ -0,0 +1,97 @@ +#ifndef _DDRAW_MAINWINDOW_HPP_ +#define _DDRAW_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _DDRAW_DRAWINGSURFACE_HPP_ +#include +#endif +#ifndef _DDRAW_DIRECT3D_HPP_ +#include +#endif +#ifndef _DDRAW_DEVICE3D_HPP_ +#include +#endif +#ifndef _DDRAW_DIRECTPALETTE_HPP_ +#include +#endif + +class DirectDraw; +class Device3D; + +class MainWindow : public Window +{ +public: + MainWindow(void); + virtual ~MainWindow(); + static String className(void); +private: + enum {MaxRotate=360,MinRotate=-360}; + enum {ThetaDelta=10,ViewDelta=5,TurnDelta=20}; + enum {inKey=0x49,outKey=0x4F}; + enum{DisplayWidth=640,DisplayHeight=480,DisplayBPP=8}; + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType activateAppHandler(CallbackData &someCallbackData); + CallbackData::ReturnType displayChangeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + + WORD shiftKeyPressed(void)const; + WORD handleUpArrow(void); + WORD handleDownArrow(void); + WORD handleLeftArrow(void); + WORD handleRightArrow(void); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + + Callback mActivateAppHandler; + Callback mDisplayChangeHandler; + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mTimerHandler; + Callback mCreateHandler; + Callback mKeyUpHandler; + Callback mDialogCodeHandler; + static char szClassName[]; + static char szMenuName[]; + SmartPointer mDirectDraw; + DrawingSurface mPrimarySurface; + Direct3D mDirect3D; + DirectDevice3D mDirectDevice3D; + DirectPalette mDirectPalette; + SmartPointer mDevice3D; + SmartPointer mDIBitmap; + Bitmap mTextureBitmap; + PurePalette mPalette; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif + + diff --git a/ddraw/MATRIX.HPP b/ddraw/MATRIX.HPP new file mode 100644 index 0000000..7a0da7a --- /dev/null +++ b/ddraw/MATRIX.HPP @@ -0,0 +1,9 @@ +#ifndef _DDRAW_MATRIX_HPP_ +#define _DDRAW_MATRIX_HPP_ +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +typedef D3DMATRIX Matrix; +#endif + diff --git a/ddraw/MSDRAW.BAK b/ddraw/MSDRAW.BAK new file mode 100644 index 0000000..dbd22c9 --- /dev/null +++ b/ddraw/MSDRAW.BAK @@ -0,0 +1,782 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=msdraw - Win32 Debug +!MESSAGE No configuration specified. Defaulting to msdraw - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "msdraw - Win32 Release" && "$(CFG)" != "msdraw - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "msdraw.mak" CFG="msdraw - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "msdraw - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "msdraw - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "msdraw - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "msdraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\msdraw.lib" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(OUTDIR)\msdraw.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/msdraw.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/msdraw.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/msdraw.lib" +LIB32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" + +"$(OUTDIR)\msdraw.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msdraw.lib" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(INTDIR)\tmap32.obj" + -@erase "..\exe\msdraw.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"..\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"..\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/msdraw.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdraw.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msdraw.lib" +LIB32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" \ + "$(INTDIR)\tmap32.obj" + +"..\exe\msdraw.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "msdraw - Win32 Release" +# Name "msdraw - Win32 Debug" + +!IF "$(CFG)" == "msdraw - Win32 Release" + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\direct3d.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DIREC=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\direct3d.obj" : $(SOURCE) $(DEP_CPP_DIREC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DIREC=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\direct3d.obj" : $(SOURCE) $(DEP_CPP_DIREC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\draw.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DRAW_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\draw.obj" : $(SOURCE) $(DEP_CPP_DRAW_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DRAW_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\draw.obj" : $(SOURCE) $(DEP_CPP_DRAW_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\dspenum.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DSPEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\dspenum.obj" : $(SOURCE) $(DEP_CPP_DSPEN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DSPEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\dspenum.obj" : $(SOURCE) $(DEP_CPP_DSPEN) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\devenum.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DEVEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\devenum.obj" : $(SOURCE) $(DEP_CPP_DEVEN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DEVEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\devenum.obj" : $(SOURCE) $(DEP_CPP_DEVEN) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\drawsfc.cpp +DEP_CPP_DRAWS=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\drawsfc.obj" : $(SOURCE) $(DEP_CPP_DRAWS) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\texture.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\palette.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_PALET=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\palette.obj" : $(SOURCE) $(DEP_CPP_PALET) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_PALET=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\palette.obj" : $(SOURCE) $(DEP_CPP_PALET) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\tmap32.asm + +!IF "$(CFG)" == "msdraw - Win32 Release" + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\msvcobj +InputPath=.\tmap32.asm +InputName=tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + tasm32 /zi /c /ml /m3 $(InputName).asm $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/ddraw/MSDRAW.DSW b/ddraw/MSDRAW.DSW new file mode 100644 index 0000000..0f7eb28 --- /dev/null +++ b/ddraw/MSDRAW.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "msdraw"=.\msdraw.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/ddraw/MSDRAW.MAK b/ddraw/MSDRAW.MAK new file mode 100644 index 0000000..dbd22c9 --- /dev/null +++ b/ddraw/MSDRAW.MAK @@ -0,0 +1,782 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=msdraw - Win32 Debug +!MESSAGE No configuration specified. Defaulting to msdraw - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "msdraw - Win32 Release" && "$(CFG)" != "msdraw - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "msdraw.mak" CFG="msdraw - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "msdraw - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "msdraw - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "msdraw - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "msdraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\msdraw.lib" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(OUTDIR)\msdraw.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/msdraw.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/msdraw.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/msdraw.lib" +LIB32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" + +"$(OUTDIR)\msdraw.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msdraw.lib" + +CLEAN : + -@erase "$(INTDIR)\devenum.obj" + -@erase "$(INTDIR)\direct3d.obj" + -@erase "$(INTDIR)\draw.obj" + -@erase "$(INTDIR)\drawsfc.obj" + -@erase "$(INTDIR)\dspenum.obj" + -@erase "$(INTDIR)\palette.obj" + -@erase "$(INTDIR)\texture.obj" + -@erase "$(INTDIR)\tmap32.obj" + -@erase "..\exe\msdraw.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"..\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"..\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/msdraw.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdraw.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msdraw.lib" +LIB32_OBJS= \ + "$(INTDIR)\devenum.obj" \ + "$(INTDIR)\direct3d.obj" \ + "$(INTDIR)\draw.obj" \ + "$(INTDIR)\drawsfc.obj" \ + "$(INTDIR)\dspenum.obj" \ + "$(INTDIR)\palette.obj" \ + "$(INTDIR)\texture.obj" \ + "$(INTDIR)\tmap32.obj" + +"..\exe\msdraw.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "msdraw - Win32 Release" +# Name "msdraw - Win32 Debug" + +!IF "$(CFG)" == "msdraw - Win32 Release" + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\direct3d.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DIREC=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\direct3d.obj" : $(SOURCE) $(DEP_CPP_DIREC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DIREC=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\direct3d.obj" : $(SOURCE) $(DEP_CPP_DIREC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\draw.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DRAW_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\draw.obj" : $(SOURCE) $(DEP_CPP_DRAW_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DRAW_=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\.\device3d.hpp"\ + {$(INCLUDE)}"\.\direct3d.hpp"\ + {$(INCLUDE)}"\.\draw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\draw.obj" : $(SOURCE) $(DEP_CPP_DRAW_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\dspenum.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DSPEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\dspenum.obj" : $(SOURCE) $(DEP_CPP_DSPEN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DSPEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\dspenum.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\dspenum.obj" : $(SOURCE) $(DEP_CPP_DSPEN) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\devenum.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_DEVEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\devenum.obj" : $(SOURCE) $(DEP_CPP_DEVEN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_DEVEN=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\devdesc.hpp"\ + {$(INCLUDE)}"\.\devenum.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\devenum.obj" : $(SOURCE) $(DEP_CPP_DEVEN) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\drawsfc.cpp +DEP_CPP_DRAWS=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\drawsfc.obj" : $(SOURCE) $(DEP_CPP_DRAWS) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\texture.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_TEXTU=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\bltfx.hpp"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\drawsfc.hpp"\ + {$(INCLUDE)}"\.\error.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\.\pixform.hpp"\ + {$(INCLUDE)}"\.\rowinfo.hpp"\ + {$(INCLUDE)}"\.\sfccaps.hpp"\ + {$(INCLUDE)}"\.\sfcdesc.hpp"\ + {$(INCLUDE)}"\.\surface.hpp"\ + {$(INCLUDE)}"\.\texture.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\Engine\angle.hpp"\ + {$(INCLUDE)}"\Engine\angle3d.hpp"\ + {$(INCLUDE)}"\Engine\Device3d.hpp"\ + {$(INCLUDE)}"\Engine\Point3d.hpp"\ + {$(INCLUDE)}"\Engine\Pureedge.hpp"\ + {$(INCLUDE)}"\Engine\Puremap.hpp"\ + {$(INCLUDE)}"\Engine\Purevsys.hpp"\ + {$(INCLUDE)}"\Engine\Vector3d.hpp"\ + {$(INCLUDE)}"\Engine\Viewsys.hpp"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\palette.cpp + +!IF "$(CFG)" == "msdraw - Win32 Release" + +DEP_CPP_PALET=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\palette.obj" : $(SOURCE) $(DEP_CPP_PALET) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +DEP_CPP_PALET=\ + "..\..\parts\mssdk\include\d3dcaps.h"\ + "..\..\parts\mssdk\include\d3dtypes.h"\ + "..\..\parts\mssdk\include\d3dvec.inl"\ + {$(INCLUDE)}"\.\ddraw.hpp"\ + {$(INCLUDE)}"\.\palette.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\ddraw.h"\ + {$(INCLUDE)}"\mssdk\include\d3d.h"\ + + +"$(INTDIR)\palette.obj" : $(SOURCE) $(DEP_CPP_PALET) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\tmap32.asm + +!IF "$(CFG)" == "msdraw - Win32 Release" + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\msvcobj +InputPath=.\tmap32.asm +InputName=tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + tasm32 /zi /c /ml /m3 $(InputName).asm $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/ddraw/MSDRAW.MDP b/ddraw/MSDRAW.MDP new file mode 100644 index 0000000..df6c7f5 Binary files /dev/null and b/ddraw/MSDRAW.MDP differ diff --git a/ddraw/MSDRAW.PLG b/ddraw/MSDRAW.PLG new file mode 100644 index 0000000..2ba1b05 --- /dev/null +++ b/ddraw/MSDRAW.PLG @@ -0,0 +1,239 @@ +--------------------Configuration: msdraw - Win32 Debug-------------------- +Begining build with project "C:\WORK\ddraw\msdraw.dsp", at root. +Active configuration is Win32 (x86) Static Library (based on Win32 (x86) Static Library) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"..\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c " + "Browser Database Maker" with flags "/nologo /o".\msvcobj/msdraw.bsc" " + "Library Manager" with flags "/nologo /out:"..\exe\msdraw.lib" " + "Custom Build" with flags "" + "" with flags "" + +Creating temp file "C:\WINDOWS\TEMP\RSP9332.TMP" with contents +Creating command line "cl.exe @C:\WINDOWS\TEMP\RSP9332.TMP" +Creating command line "link.exe -lib /nologo /out:"..\exe\msdraw.lib" .\msvcobj\devenum.obj .\msvcobj\direct3d.obj .\msvcobj\draw.obj .\msvcobj\drawsfc.obj .\msvcobj\dspenum.obj .\msvcobj\palette.obj .\msvcobj\texture.obj .\msvcobj\tmap32.obj" +Compiling... +devenum.cpp +direct3d.cpp +c:\work\ddraw/direct3d.hpp(18) : error C2065: 'IDirect3D3' : undeclared identifier +c:\work\ddraw/pixform.hpp(13) : error C2065: 'DDPF_ALPHAPREMULT' : undeclared identifier +c:\work\ddraw/pixform.hpp(13) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(14) : error C2065: 'DDPF_BUMPLUMINANCE' : undeclared identifier +c:\work\ddraw/pixform.hpp(14) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(14) : error C2065: 'DDPF_BUMPDUDV' : undeclared identifier +c:\work\ddraw/pixform.hpp(14) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(15) : error C2065: 'DDPF_LUMINANCE' : undeclared identifier +c:\work\ddraw/pixform.hpp(15) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(18) : error C2065: 'DDPF_STENCILBUFFER' : undeclared identifier +c:\work\ddraw/pixform.hpp(18) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(19) : error C2065: 'DDPF_ZPIXELS' : undeclared identifier +c:\work\ddraw/pixform.hpp(19) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(214) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(214) : error C2065: 'dwLuminanceBitCount' : undeclared identifier +c:\work\ddraw/pixform.hpp(220) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(226) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(226) : error C2065: 'dwBumpBitCount' : undeclared identifier +c:\work\ddraw/pixform.hpp(232) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(286) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(286) : error C2065: 'dwZBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(292) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(322) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(322) : error C2065: 'dwStencilBitDepth' : undeclared identifier +c:\work\ddraw/pixform.hpp(328) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(334) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(334) : error C2065: 'dwLuminanceBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(340) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(346) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(346) : error C2065: 'dwBumpDuBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(352) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(358) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(358) : error C2065: 'dwBumpDvBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(364) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(370) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(370) : error C2065: 'dwStencilBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(376) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(382) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(382) : error C2065: 'dwBumpLuminanceBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(388) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(418) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(418) : error C2065: 'dwLuminanceAlphaBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(424) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(430) : error C2039: 'dwRGBZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(430) : error C2065: 'dwRGBZBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(436) : error C2039: 'dwRGBZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(442) : error C2039: 'dwYUVZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(442) : error C2065: 'dwYUVZBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(448) : error C2039: 'dwYUVZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/bltfx.hpp(450) : error C2039: 'dwFillPixel' : is not a member of '_DDBLTFX' +c:\work\ddraw/bltfx.hpp(450) : error C2065: 'dwFillPixel' : undeclared identifier +c:\work\ddraw/bltfx.hpp(456) : error C2039: 'dwFillPixel' : is not a member of '_DDBLTFX' +c:\work\ddraw/sfccaps.hpp(8) : error C2504: 'DDSCAPS2' : base class undefined +c:\work\ddraw/sfccaps.hpp(17) : error C2065: 'DDSCAPS_VIDEOPORT' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(17) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(17) : error C2065: 'DDSCAPS_LOCALVIDMEM' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(17) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(18) : error C2065: 'DDSCAPS_STANDARDVGAMODE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(18) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(18) : error C2065: 'DDSCAPS_OPTIMIZED' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(18) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(19) : error C2065: 'DDSCAPS2_HARDWAREDEINTERLACE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(19) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTANTIALIASING' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(20) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTDYNAMIC' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(20) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(21) : error C2065: 'DDSCAPS2_HINTSTATIC' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(21) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(21) : error C2065: 'DDSCAPS2_OPAQUE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(21) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(21) : error C2065: 'DDSCAPS2_TEXTUREMANAGE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(21) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(24) : error C2629: unexpected 'class SurfaceCapabilities (' +c:\work\ddraw/sfccaps.hpp(24) : error C2238: unexpected token(s) preceding ';' +c:\work\ddraw/sfccaps.hpp(28) : error C2143: syntax error : missing ')' before '&' +c:\work\ddraw/sfccaps.hpp(28) : error C2059: syntax error : '&' +c:\work\ddraw/sfccaps.hpp(28) : error C2143: syntax error : missing ';' before '&' +c:\work\ddraw/sfccaps.hpp(28) : error C2501: 'someDDSCAPS2' : missing decl-specifiers +c:\work\ddraw/sfccaps.hpp(28) : error C2143: syntax error : missing ';' before ')' +c:\work\ddraw/sfccaps.hpp(28) : error C2238: unexpected token(s) preceding ';' +c:\work\ddraw/sfccaps.hpp(33) : error C2501: 'DDSCAPS2' : missing decl-specifiers +c:\work\ddraw/sfccaps.hpp(33) : error C2143: syntax error : missing ';' before '&' +c:\work\ddraw/sfccaps.hpp(33) : error C2501: 'getDDSCAPS2' : missing decl-specifiers +c:\work\ddraw/sfccaps.hpp(40) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(40) : error C2065: 'dwCaps' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(41) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(41) : error C2065: 'dwCaps2' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(42) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(42) : error C2065: 'dwCaps3' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(43) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(43) : error C2065: 'dwCaps4' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(55) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(56) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(57) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(58) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(62) : error C2143: syntax error : missing ')' before '&' +c:\work\ddraw/sfccaps.hpp(62) : error C2511: 'SurfaceCapabilities::SurfaceCapabilities' : overloaded member function not found in 'SurfaceCapabilities' +C:\WORK\ddraw\direct3d.cpp(54) : fatal error C1004: unexpected end of file found +draw.cpp +c:\work\ddraw/draw.hpp(26) : error C2065: 'DDSCL_SETFOCUSWINDOW' : undeclared identifier +c:\work\ddraw/draw.hpp(26) : error C2057: expected constant expression +c:\work\ddraw/draw.hpp(26) : error C2065: 'DDSCL_SETDEVICEWINDOW' : undeclared identifier +c:\work\ddraw/draw.hpp(26) : error C2057: expected constant expression +c:\work\ddraw/draw.hpp(27) : error C2065: 'DDSCL_CREATEDEVICEWINDOW' : undeclared identifier +c:\work\ddraw/draw.hpp(27) : error C2057: expected constant expression +c:\work\ddraw/draw.hpp(27) : error C2065: 'DDSCL_MULTITHREADED' : undeclared identifier +c:\work\ddraw/draw.hpp(27) : error C2057: expected constant expression +c:\work\ddraw/draw.hpp(28) : error C2065: 'DDSCL_FPUSETUP' : undeclared identifier +c:\work\ddraw/draw.hpp(28) : error C2057: expected constant expression +c:\work\ddraw/draw.hpp(51) : error C2065: 'IDirectDraw4' : undeclared identifier +c:\work\ddraw/draw.hpp(51) : error C2955: 'SmartPointer' : use of class template requires template argument list +c:\work\ddraw/draw.hpp(51) : fatal error C1903: unable to recover from previous error(s); stopping compilation +drawsfc.cpp +c:\work\ddraw/pixform.hpp(13) : error C2065: 'DDPF_ALPHAPREMULT' : undeclared identifier +c:\work\ddraw/pixform.hpp(13) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(14) : error C2065: 'DDPF_BUMPLUMINANCE' : undeclared identifier +c:\work\ddraw/pixform.hpp(14) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(14) : error C2065: 'DDPF_BUMPDUDV' : undeclared identifier +c:\work\ddraw/pixform.hpp(14) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(15) : error C2065: 'DDPF_LUMINANCE' : undeclared identifier +c:\work\ddraw/pixform.hpp(15) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(18) : error C2065: 'DDPF_STENCILBUFFER' : undeclared identifier +c:\work\ddraw/pixform.hpp(18) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(19) : error C2065: 'DDPF_ZPIXELS' : undeclared identifier +c:\work\ddraw/pixform.hpp(19) : error C2057: expected constant expression +c:\work\ddraw/pixform.hpp(214) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(214) : error C2065: 'dwLuminanceBitCount' : undeclared identifier +c:\work\ddraw/pixform.hpp(220) : error C2039: 'dwLuminanceBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(226) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(226) : error C2065: 'dwBumpBitCount' : undeclared identifier +c:\work\ddraw/pixform.hpp(232) : error C2039: 'dwBumpBitCount' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(286) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(286) : error C2065: 'dwZBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(292) : error C2039: 'dwZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(322) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(322) : error C2065: 'dwStencilBitDepth' : undeclared identifier +c:\work\ddraw/pixform.hpp(328) : error C2039: 'dwStencilBitDepth' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(334) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(334) : error C2065: 'dwLuminanceBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(340) : error C2039: 'dwLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(346) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(346) : error C2065: 'dwBumpDuBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(352) : error C2039: 'dwBumpDuBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(358) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(358) : error C2065: 'dwBumpDvBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(364) : error C2039: 'dwBumpDvBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(370) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(370) : error C2065: 'dwStencilBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(376) : error C2039: 'dwStencilBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(382) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(382) : error C2065: 'dwBumpLuminanceBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(388) : error C2039: 'dwBumpLuminanceBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(418) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(418) : error C2065: 'dwLuminanceAlphaBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(424) : error C2039: 'dwLuminanceAlphaBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(430) : error C2039: 'dwRGBZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(430) : error C2065: 'dwRGBZBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(436) : error C2039: 'dwRGBZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(442) : error C2039: 'dwYUVZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/pixform.hpp(442) : error C2065: 'dwYUVZBitMask' : undeclared identifier +c:\work\ddraw/pixform.hpp(448) : error C2039: 'dwYUVZBitMask' : is not a member of '_DDPIXELFORMAT' +c:\work\ddraw/bltfx.hpp(450) : error C2039: 'dwFillPixel' : is not a member of '_DDBLTFX' +c:\work\ddraw/bltfx.hpp(450) : error C2065: 'dwFillPixel' : undeclared identifier +c:\work\ddraw/bltfx.hpp(456) : error C2039: 'dwFillPixel' : is not a member of '_DDBLTFX' +c:\work\ddraw/sfccaps.hpp(8) : error C2504: 'DDSCAPS2' : base class undefined +c:\work\ddraw/sfccaps.hpp(17) : error C2065: 'DDSCAPS_VIDEOPORT' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(17) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(17) : error C2065: 'DDSCAPS_LOCALVIDMEM' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(17) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(18) : error C2065: 'DDSCAPS_STANDARDVGAMODE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(18) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(18) : error C2065: 'DDSCAPS_OPTIMIZED' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(18) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(19) : error C2065: 'DDSCAPS2_HARDWAREDEINTERLACE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(19) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTANTIALIASING' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(20) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(20) : error C2065: 'DDSCAPS2_HINTDYNAMIC' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(20) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(21) : error C2065: 'DDSCAPS2_HINTSTATIC' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(21) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(21) : error C2065: 'DDSCAPS2_OPAQUE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(21) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(21) : error C2065: 'DDSCAPS2_TEXTUREMANAGE' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(21) : error C2057: expected constant expression +c:\work\ddraw/sfccaps.hpp(24) : error C2629: unexpected 'class SurfaceCapabilities (' +c:\work\ddraw/sfccaps.hpp(24) : error C2238: unexpected token(s) preceding ';' +c:\work\ddraw/sfccaps.hpp(28) : error C2143: syntax error : missing ')' before '&' +c:\work\ddraw/sfccaps.hpp(28) : error C2059: syntax error : '&' +c:\work\ddraw/sfccaps.hpp(28) : error C2143: syntax error : missing ';' before '&' +c:\work\ddraw/sfccaps.hpp(28) : error C2501: 'someDDSCAPS2' : missing decl-specifiers +c:\work\ddraw/sfccaps.hpp(28) : error C2143: syntax error : missing ';' before ')' +c:\work\ddraw/sfccaps.hpp(28) : error C2238: unexpected token(s) preceding ';' +c:\work\ddraw/sfccaps.hpp(33) : error C2501: 'DDSCAPS2' : missing decl-specifiers +c:\work\ddraw/sfccaps.hpp(33) : error C2143: syntax error : missing ';' before '&' +c:\work\ddraw/sfccaps.hpp(33) : error C2501: 'getDDSCAPS2' : missing decl-specifiers +c:\work\ddraw/sfccaps.hpp(40) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(40) : error C2065: 'dwCaps' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(41) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(41) : error C2065: 'dwCaps2' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(42) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(42) : error C2065: 'dwCaps3' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(43) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(43) : error C2065: 'dwCaps4' : undeclared identifier +c:\work\ddraw/sfccaps.hpp(55) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(56) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(57) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(58) : error C2653: 'DDSCAPS2' : is not a class or namespace name +c:\work\ddraw/sfccaps.hpp(62) : error C2143: syntax error : missing ')' before '&' +c:\work\ddraw/sfccaps.hpp(62) : error C2511: 'SurfaceCapabilities::SurfaceCapabilities' : overloaded member function not found in 'SurfaceCapabilities' +C:\WORK\ddraw\drawsfc.cpp(162) : fatal error C1004: unexpected end of file found +dspenum.cpp + diff --git a/ddraw/Msdraw.001 b/ddraw/Msdraw.001 new file mode 100644 index 0000000..17c6b1f --- /dev/null +++ b/ddraw/Msdraw.001 @@ -0,0 +1,208 @@ +# Microsoft Developer Studio Project File - Name="msdraw" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=msdraw - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "msdraw.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "msdraw.mak" CFG="msdraw - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "msdraw - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "msdraw - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "msdraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"..\exe\msvc42.pch" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdraw.lib" + +!ENDIF + +# Begin Target + +# Name "msdraw - Win32 Release" +# Name "msdraw - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\devenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\draw.cpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.cpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\palette.cpp +# End Source File +# Begin Source File + +SOURCE=.\texture.cpp +# End Source File +# Begin Source File + +SOURCE=.\tmap32.asm + +!IF "$(CFG)" == "msdraw - Win32 Release" + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\.\msvcobj +InputPath=.\tmap32.asm +InputName=tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\parts\tasm32\tasm32 /zi /c /ml /m3 $(InputName).asm\ + $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\bltfx.hpp +# End Source File +# Begin Source File + +SOURCE=.\ddraw.hpp +# End Source File +# Begin Source File + +SOURCE=.\devdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\devenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\device3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\draw.hpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.hpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\error.hpp +# End Source File +# Begin Source File + +SOURCE=.\palette.hpp +# End Source File +# Begin Source File + +SOURCE=.\pixform.hpp +# End Source File +# Begin Source File + +SOURCE=.\rowinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfccaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfcdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\surface.hpp +# End Source File +# Begin Source File + +SOURCE=.\texture.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ddraw/Msdraw.dsp b/ddraw/Msdraw.dsp new file mode 100644 index 0000000..0185d31 --- /dev/null +++ b/ddraw/Msdraw.dsp @@ -0,0 +1,213 @@ +# Microsoft Developer Studio Project File - Name="msdraw" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=msdraw - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Msdraw.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Msdraw.mak" CFG="msdraw - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "msdraw - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "msdraw - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "msdraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"..\exe\msvc42.pch" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdraw.lib" + +!ENDIF + +# Begin Target + +# Name "msdraw - Win32 Release" +# Name "msdraw - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\devenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\draw.cpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.cpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\palette.cpp +# End Source File +# Begin Source File + +SOURCE=.\texture.cpp +# End Source File +# Begin Source File + +SOURCE=.\tmap32.asm + +!IF "$(CFG)" == "msdraw - Win32 Release" + +!ELSEIF "$(CFG)" == "msdraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\msvcobj +InputPath=.\tmap32.asm +InputName=tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + \parts\tasm32\tasm32 /zi /c /ml /m3 $(InputName).asm $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\bltfx.hpp +# End Source File +# Begin Source File + +SOURCE=.\ddraw.hpp +# End Source File +# Begin Source File + +SOURCE=.\devdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\devenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\device3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\draw.hpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.hpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\error.hpp +# End Source File +# Begin Source File + +SOURCE=.\palette.hpp +# End Source File +# Begin Source File + +SOURCE=.\pixform.hpp +# End Source File +# Begin Source File + +SOURCE=.\rowinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfccaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfcdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\surface.hpp +# End Source File +# Begin Source File + +SOURCE=.\texture.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ddraw/OUTPUT.DAT b/ddraw/OUTPUT.DAT new file mode 100644 index 0000000..e69de29 diff --git a/ddraw/PALETTE.CPP b/ddraw/PALETTE.CPP new file mode 100644 index 0000000..8a87185 --- /dev/null +++ b/ddraw/PALETTE.CPP @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include + +WORD DirectPalette::systemPalette(void) +{ + PureDevice screenDevice; + WORD systemPaletteEntries; + + screenDevice.screenDevice(); + systemPaletteEntries=::GetSystemPaletteEntries(screenDevice,0,MaxColors,(PALETTEENTRY FAR*)&mPaletteEntries); + return systemPaletteEntries; +} + +BOOL DirectPalette::readPalette(const String &strPathFileName) +{ + FileHandle palFile(strPathFileName); + FileMap palMap(palFile); + PureViewOfFile palView(palMap); + PaletteEntry paletteEntry; + String strLine; + int palEntries; + char *pLine; + char strTokens[]={' ','\0'}; + + if(!palFile.isOkay())return FALSE; + palView.getLine(strLine); + if(!(strLine==String("JASC-PAL")))return FALSE; + palView.getLine(strLine); + if(!(strLine==String("0100")))return FALSE; + palView.getLine(strLine); + palEntries=::atoi(strLine); + if(palEntries!=MaxColors)return FALSE; + for(int palEntry=0;palEntry +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +class String; + +class DirectPalette : private SmartPointer +{ +public: + friend class DirectDraw; + friend class Surface; + enum CreationFlags{PalIndex1Bit=DDPCAPS_1BIT,PalIndex2Bit=DDPCAPS_2BIT,PalIndex4Bit=DDPCAPS_4BIT, + PalIndex8Bit=DDPCAPS_8BIT,PalIndex8BitEntries=DDPCAPS_8BITENTRIES,PalAlpha=DDPCAPS_ALPHA, + PalAllow256Entries=DDPCAPS_ALLOW256,PalInitialize=DDPCAPS_INITIALIZE,PalPrimarySurface=DDPCAPS_PRIMARYSURFACE, + PalPrimarySurfaceLeft=DDPCAPS_PRIMARYSURFACELEFT,PalVSync=DDPCAPS_VSYNC}; + DirectPalette(void); + virtual ~DirectPalette(); + DWORD flags(void); + void flags(DWORD flags); + PaletteEntry &operator[](int palIndex); + BOOL readPalette(const String &strPathFileName); + WORD systemPalette(void); + void destroy(void); +private: + enum {MaxColors=256}; + DirectPalette(const DirectPalette &someDirectPalette); + DirectPalette &operator=(const DirectPalette &someDirectPalette); + void initPalette(void); + + PaletteEntry mPaletteEntries[MaxColors]; + DWORD mPaletteFlags; +}; + +inline +DirectPalette::DirectPalette(void) +: mPaletteFlags(PalIndex8Bit|PalAllow256Entries) +{ + initPalette(); +} + +inline +DirectPalette::DirectPalette(const DirectPalette &someDirectPalette) +{ // private implementation + *this=someDirectPalette; +} + +inline +DirectPalette::~DirectPalette(void) +{ + destroy(); +} + +inline +DirectPalette &DirectPalette::operator=(const DirectPalette &/*someDirectPalette*/) +{ // private implementation + return *this; +} + +inline +PaletteEntry &DirectPalette::operator[](int palIndex) +{ + return mPaletteEntries[palIndex]; +} + +inline +DWORD DirectPalette::flags(void) +{ + return mPaletteFlags; +} + +inline +void DirectPalette::flags(DWORD flags) +{ + mPaletteFlags=flags; +} + +inline +void DirectPalette::destroy(void) +{ + if(!isOkay())return; + operator->()->Release(); + SmartPointer::destroy(); +} +#endif + + diff --git a/ddraw/PIXFORM.HPP b/ddraw/PIXFORM.HPP new file mode 100644 index 0000000..0469a2d --- /dev/null +++ b/ddraw/PIXFORM.HPP @@ -0,0 +1,469 @@ +#ifndef _DDRAW_PIXELFORMAT_HPP_ +#define _DDRAW_PIXELFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +class PixelFormat : private DDPIXELFORMAT +{ +public: + enum ControlFlags{Alpha=DDPF_ALPHA,AlphaPixels=DDPF_ALPHAPIXELS,AlphaPreMult=DDPF_ALPHAPREMULT, + BumpLuminance=DDPF_BUMPLUMINANCE,BumpDUDV=DDPF_BUMPDUDV,Compressed=DDPF_COMPRESSED, + FourCC=DDPF_FOURCC,Luminance=DDPF_LUMINANCE,PaletteIndexed1=DDPF_PALETTEINDEXED1, + PaletteIndexed2=DDPF_PALETTEINDEXED2,PaletteIndexed4=DDPF_PALETTEINDEXED4, + PaletteIndexed8=DDPF_PALETTEINDEXED8,PaletteIndexedTo8=DDPF_PALETTEINDEXEDTO8, + RGB=DDPF_RGB,RGBToYUV=DDPF_RGBTOYUV,StencilBuffer=DDPF_STENCILBUFFER,YUV=DDPF_YUV, + ZBuffer=DDPF_ZBUFFER,ZPixels=DDPF_ZPIXELS}; + PixelFormat(void); + PixelFormat(const PixelFormat &somePixelFormat); + PixelFormat(const DDPIXELFORMAT &someDDPIXELFORMAT); + virtual ~PixelFormat(); + PixelFormat &operator=(const PixelFormat &somePixelFormat); + PixelFormat &operator=(const DDPIXELFORMAT &someDDPIXELFORMAT); + DWORD flags(void)const; + void flags(DWORD flags); + void flags(ControlFlags controlFlags); + DWORD fourCC(void)const; + void fourCC(DWORD fourCC); + DWORD rgbBitCount(void)const; + void rgbBitCount(DWORD rgbBitCount); + DWORD yuvBitCount(void)const; + void yuvBitCount(DWORD yuvBitCount); + DWORD zBufferBitDepth(void)const; + void zBufferBitDepth(DWORD zBufferBitDepth); + DWORD alphaBitDepth(void)const; + void alphaBitDepth(DWORD alphaBitDepth); + DWORD luminanceBitCount(void)const; + void luminanceBitCount(DWORD luminanceBitCount); + DWORD bumpBitCount(void)const; + void bumpBitCount(DWORD bumpBitCount); + DWORD rBitMask(void)const; + void rBitMask(DWORD resBitMask); + DWORD yBitMask(void)const; + void yBitMask(DWORD yBitMask); + DWORD gBitMask(void)const; + void gBitMask(DWORD gBitMask); + DWORD uBitMask(void)const; + void uBitMask(DWORD uBitMask); + DWORD zBitMask(void)const; + void zBitMask(DWORD zBitMask); + DWORD bBitMask(void)const; + void bBitMask(DWORD bBitMask); + DWORD vBitMask(void)const; + void vBitMask(DWORD vBitMask); + DWORD stencilBitDepth(void)const; + void stencilBitDepth(DWORD stencilBitDepth); + DWORD luminanceBitMask(void)const; + void luminanceBitMask(DWORD luminanceBitMask); + DWORD bumpDuBitMask(void)const; + void bumpDuBitMask(DWORD bumpDuBitMask); + DWORD bumpDvBitMask(void)const; + void bumpDvBitMask(DWORD bumpDvBitMask); + DWORD stencilBitMask(void)const; + void stencilBitMask(DWORD stencilBitMask); + DWORD bumpLuminanceBitMask(void)const; + void bumpLuminanceBitMask(DWORD bumpLuminanceBitMask); + DWORD rgbAlphaBitMask(void)const; + void rgbAlphaBitMask(DWORD rgbAlphaBitMask); + DWORD yuvAlphaBitMask(void)const; + void yuvAlphaBitMask(DWORD yuvAlphaBitMask); + DWORD luminanceAlphaBitMask(void)const; + void luminanceAlphaBitMask(DWORD luminanceAlphaBitMask); + DWORD rgbZBitMask(void)const; + void rgbZBitMask(DWORD rgbZBitMask); + DWORD yuvZBitMask(void)const; + void yuvZBitMask(DWORD yuvZBitMask); + DDPIXELFORMAT &getDDPIXELFORMAT(void); +private: + void zeroInit(void); +}; + +inline +PixelFormat::PixelFormat(void) +{ + zeroInit(); +} + +inline +PixelFormat::PixelFormat(const PixelFormat &somePixelFormat) +{ + *this=somePixelFormat; +} + +inline +PixelFormat::PixelFormat(const DDPIXELFORMAT &someDDPIXELFORMAT) +{ + *this=someDDPIXELFORMAT; +} + +inline +PixelFormat::~PixelFormat() +{ +} + +inline +PixelFormat &PixelFormat::operator=(const PixelFormat &somePixelFormat) +{ + flags(somePixelFormat.flags()); + fourCC(somePixelFormat.fourCC()); + rgbBitCount(somePixelFormat.rgbBitCount()); + rBitMask(somePixelFormat.rBitMask()); + gBitMask(somePixelFormat.gBitMask()); + bBitMask(somePixelFormat.bBitMask()); + rgbAlphaBitMask(somePixelFormat.rgbAlphaBitMask()); + return *this; +} + +inline +PixelFormat &PixelFormat::operator=(const DDPIXELFORMAT &someDDPIXELFORMAT) +{ + flags(someDDPIXELFORMAT.dwFlags); + fourCC(someDDPIXELFORMAT.dwFourCC); + rgbBitCount(someDDPIXELFORMAT.dwRGBBitCount); + rBitMask(someDDPIXELFORMAT.dwRBitMask); + gBitMask(someDDPIXELFORMAT.dwGBitMask); + bBitMask(someDDPIXELFORMAT.dwBBitMask); + rgbAlphaBitMask(someDDPIXELFORMAT.dwRGBAlphaBitMask); + return *this; +} + +inline +DWORD PixelFormat::flags(void)const +{ + return DDPIXELFORMAT::dwFlags; +} + +inline +void PixelFormat::flags(DWORD flags) +{ + DDPIXELFORMAT::dwFlags=flags; +} + +inline +void PixelFormat::flags(ControlFlags controlFlags) +{ + DDPIXELFORMAT::dwFlags=(DWORD)controlFlags; +} + +inline +DWORD PixelFormat::fourCC(void)const +{ + return DDPIXELFORMAT::dwFourCC; +} + +inline +void PixelFormat::fourCC(DWORD fourCC) +{ + DDPIXELFORMAT::dwFourCC=fourCC; +} + +inline +DWORD PixelFormat::rgbBitCount(void)const +{ + return DDPIXELFORMAT::dwRGBBitCount; +} + +inline +void PixelFormat::rgbBitCount(DWORD rgbBitCount) +{ + DDPIXELFORMAT::dwRGBBitCount=rgbBitCount; +} + +inline +DWORD PixelFormat::yuvBitCount(void)const +{ + return DDPIXELFORMAT::dwYUVBitCount; +} + +inline +void PixelFormat::yuvBitCount(DWORD yuvBitCount) +{ + DDPIXELFORMAT::dwYUVBitCount=yuvBitCount; +} + +inline +DWORD PixelFormat::zBufferBitDepth(void)const +{ + return DDPIXELFORMAT::dwZBufferBitDepth; +} + +inline +void PixelFormat::zBufferBitDepth(DWORD zBufferBitDepth) +{ + DDPIXELFORMAT::dwZBufferBitDepth=zBufferBitDepth; +} + +inline +DWORD PixelFormat::alphaBitDepth(void)const +{ + return DDPIXELFORMAT::dwAlphaBitDepth; +} + +inline +void PixelFormat::alphaBitDepth(DWORD alphaBitDepth) +{ + DDPIXELFORMAT::dwAlphaBitDepth=alphaBitDepth; +} + +inline +DWORD PixelFormat::luminanceBitCount(void)const +{ + return DDPIXELFORMAT::dwLuminanceBitCount; +} + +inline +void PixelFormat::luminanceBitCount(DWORD luminanceBitCount) +{ + DDPIXELFORMAT::dwLuminanceBitCount=luminanceBitCount; +} + +inline +DWORD PixelFormat::bumpBitCount(void)const +{ + return DDPIXELFORMAT::dwBumpBitCount; +} + +inline +void PixelFormat::bumpBitCount(DWORD bumpBitCount) +{ + DDPIXELFORMAT::dwBumpBitCount=bumpBitCount; +} + +inline +DWORD PixelFormat::rBitMask(void)const +{ + return DDPIXELFORMAT::dwRBitMask; +} + +inline +void PixelFormat::rBitMask(DWORD rBitMask) +{ + DDPIXELFORMAT::dwRBitMask=rBitMask; +} + +inline +DWORD PixelFormat::yBitMask(void)const +{ + return DDPIXELFORMAT::dwYBitMask; +} + +inline +void PixelFormat::yBitMask(DWORD yBitMask) +{ + DDPIXELFORMAT::dwYBitMask=yBitMask; +} + +inline +DWORD PixelFormat::gBitMask(void)const +{ + return DDPIXELFORMAT::dwGBitMask; +} + +inline +void PixelFormat::gBitMask(DWORD gBitMask) +{ + DDPIXELFORMAT::dwGBitMask=gBitMask; +} + +inline +DWORD PixelFormat::uBitMask(void)const +{ + return DDPIXELFORMAT::dwUBitMask; +} + +inline +void PixelFormat::uBitMask(DWORD uBitMask) +{ + DDPIXELFORMAT::dwUBitMask=uBitMask; +} + +inline +DWORD PixelFormat::zBitMask(void)const +{ + return DDPIXELFORMAT::dwZBitMask; +} + +inline +void PixelFormat::zBitMask(DWORD zBitMask) +{ + DDPIXELFORMAT::dwZBitMask=zBitMask; +} + +inline +DWORD PixelFormat::bBitMask(void)const +{ + return DDPIXELFORMAT::dwBBitMask; +} + +inline +void PixelFormat::bBitMask(DWORD bBitMask) +{ + DDPIXELFORMAT::dwBBitMask=bBitMask; +} + +inline +DWORD PixelFormat::vBitMask(void)const +{ + return DDPIXELFORMAT::dwVBitMask; +} + +inline +void PixelFormat::vBitMask(DWORD vBitMask) +{ + DDPIXELFORMAT::dwVBitMask=vBitMask; +} + +inline +DWORD PixelFormat::stencilBitDepth(void)const +{ + return DDPIXELFORMAT::dwStencilBitDepth; +} + +inline +void PixelFormat::stencilBitDepth(DWORD stencilBitDepth) +{ + DDPIXELFORMAT::dwStencilBitDepth=stencilBitDepth; +} + +inline +DWORD PixelFormat::luminanceBitMask(void)const +{ + return DDPIXELFORMAT::dwLuminanceBitMask; +} + +inline +void PixelFormat::luminanceBitMask(DWORD luminanceBitMask) +{ + DDPIXELFORMAT::dwLuminanceBitMask=luminanceBitMask; +} + +inline +DWORD PixelFormat::bumpDuBitMask(void)const +{ + return DDPIXELFORMAT::dwBumpDuBitMask; +} + +inline +void PixelFormat::bumpDuBitMask(DWORD bumpDuBitMask) +{ + DDPIXELFORMAT::dwBumpDuBitMask=bumpDuBitMask; +} + +inline +DWORD PixelFormat::bumpDvBitMask(void)const +{ + return DDPIXELFORMAT::dwBumpDvBitMask; +} + +inline +void PixelFormat::bumpDvBitMask(DWORD bumpDvBitMask) +{ + DDPIXELFORMAT::dwBumpDvBitMask; +} + +inline +DWORD PixelFormat::stencilBitMask(void)const +{ + return DDPIXELFORMAT::dwStencilBitMask; +} + +inline +void PixelFormat::stencilBitMask(DWORD stencilBitMask) +{ + DDPIXELFORMAT::dwStencilBitMask=stencilBitMask; +} + +inline +DWORD PixelFormat::bumpLuminanceBitMask(void)const +{ + return DDPIXELFORMAT::dwBumpLuminanceBitMask; +} + +inline +void PixelFormat::bumpLuminanceBitMask(DWORD bumpLuminanceBitMask) +{ + DDPIXELFORMAT::dwBumpLuminanceBitMask=bumpLuminanceBitMask; +} + +inline +DWORD PixelFormat::rgbAlphaBitMask(void)const +{ + return DDPIXELFORMAT::dwRGBAlphaBitMask; +} + +inline +void PixelFormat::rgbAlphaBitMask(DWORD rgbAlphaBitMask) +{ + DDPIXELFORMAT::dwRGBAlphaBitMask=rgbAlphaBitMask; +} + +inline +DWORD PixelFormat::yuvAlphaBitMask(void)const +{ + return DDPIXELFORMAT::dwYUVAlphaBitMask; +} + +inline +void PixelFormat::yuvAlphaBitMask(DWORD yuvAlphaBitMask) +{ + DDPIXELFORMAT::dwYUVAlphaBitMask=yuvAlphaBitMask; +} + +inline +DWORD PixelFormat::luminanceAlphaBitMask(void)const +{ + return DDPIXELFORMAT::dwLuminanceAlphaBitMask; +} + +inline +void PixelFormat::luminanceAlphaBitMask(DWORD luminanceAlphaBitMask) +{ + DDPIXELFORMAT::dwLuminanceAlphaBitMask=luminanceAlphaBitMask; +} + +inline +DWORD PixelFormat::rgbZBitMask(void)const +{ + return DDPIXELFORMAT::dwRGBZBitMask; +} + +inline +void PixelFormat::rgbZBitMask(DWORD rgbZBitMask) +{ + DDPIXELFORMAT::dwRGBZBitMask=rgbZBitMask; +} + +inline +DWORD PixelFormat::yuvZBitMask(void)const +{ + return DDPIXELFORMAT::dwYUVZBitMask; +} + +inline +void PixelFormat::yuvZBitMask(DWORD yuvZBitMask) +{ + DDPIXELFORMAT::dwYUVZBitMask=yuvZBitMask=yuvZBitMask; +} + +inline +DDPIXELFORMAT &PixelFormat::getDDPIXELFORMAT(void) +{ + return (DDPIXELFORMAT&)*this; +} + +inline +void PixelFormat::zeroInit(void) +{ + DDPIXELFORMAT::dwSize=sizeof(DDPIXELFORMAT); + DDPIXELFORMAT::dwFlags=0; + DDPIXELFORMAT::dwFourCC=0; + DDPIXELFORMAT::dwRGBBitCount=0; + DDPIXELFORMAT::dwRBitMask=0; + DDPIXELFORMAT::dwGBitMask=0; + DDPIXELFORMAT::dwBBitMask=0; + DDPIXELFORMAT::dwRGBAlphaBitMask=0; +} +#endif diff --git a/ddraw/RESULT.HPP b/ddraw/RESULT.HPP new file mode 100644 index 0000000..1b083af --- /dev/null +++ b/ddraw/RESULT.HPP @@ -0,0 +1,11 @@ +#ifndef _DDRAW_RESULTCODE_HPP_ +#define _DDRAW_RESULTCODE_HPP_ + + enum DirectDrawResult{Ok=DD_OK,IncompatiblePrimary=DDERR_INCOMPATIBLEPRIMARY,InvalidCaps=DDERR_INVALIDCAPS, + InvalidPixelFormat=DDERR_INVALIDPIXELFORMAT,NoAlphaHardware=DDERR_NOALPHAHW, + NoCooperativeLevelSet=DDERR_NOCOOPERATIVELEVELSET,NoDirectDrawHardware=NODIRECTDRAWHW, + NoEmulation=DDERR_NOEMULATION,NoExclusiveMode=DDERR_NOEXCLUSIVEMODE,NoFlipHardware=DDERR_NOFLIPHW, + NoMipMapHardware=DDERR_NOMIMAPHW,NoOverlayHardware=DDERR_NOOVERLAYHW,NoZBufferHardware=DDERR_NOZBUFFERHW, + OutOfMemory=DDERR_OUTOFMEMORY,OutOfVideoMemory=DDERR_OUTOFVIDEOMEMORY, + PrimarySurfaceAlreadyExists=DDERR_PRIMARYSURFACEALREADYEXISTS,UnsupportedMode=DDERR_UNSUPPORTEDMODE}; + diff --git a/ddraw/ROWINFO.HPP b/ddraw/ROWINFO.HPP new file mode 100644 index 0000000..0e10257 --- /dev/null +++ b/ddraw/ROWINFO.HPP @@ -0,0 +1,57 @@ +#ifndef _DDRAW_ROWINFO_HPP_ +#define _DDRAW_ROWINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class RowInfo +{ +public: + enum {MaxRows=1024}; + RowInfo(void); + virtual ~RowInfo(); + int &operator[](int rowIndex); + int rowCount(void); + void rowCount(int rowCount); +private: + void zeroInit(void); + int mRowArray[MaxRows]; + int mRowCount; +}; + +inline +RowInfo::RowInfo(void) +: mRowCount(0) +{ + zeroInit(); +} + +inline +RowInfo::~RowInfo() +{ +} + +inline +int &RowInfo::operator[](int rowIndex) +{ + return mRowArray[rowIndex]; +} + +inline +int RowInfo::rowCount(void) +{ + return mRowCount; +} + +inline +void RowInfo::rowCount(int rowCount) +{ + mRowCount=rowCount; +} + +inline +void RowInfo::zeroInit(void) +{ + ::memset(mRowArray,0,sizeof(mRowArray)); +} +#endif \ No newline at end of file diff --git a/ddraw/SCRAPS.TXT b/ddraw/SCRAPS.TXT new file mode 100644 index 0000000..6b55611 --- /dev/null +++ b/ddraw/SCRAPS.TXT @@ -0,0 +1,439 @@ +// ************************** + +class MyDeviceEnumerator : public DeviceEnumerator +{ +public: +protected: + virtual void enumDevice(DeviceDescription &deviceDescription); +private: +}; + +void MyDeviceEnumerator::enumDevice(DeviceDescription &deviceDescription) +{ + ::OutputDebugString(deviceDescription.deviceName()+String(" ")+deviceDescription.deviceDescription()+String("\n")); + return; +} + + + + +DDPIXELFORMAT +The DDPIXELFORMAT structure describes the pixel format of a DirectDrawSurface object for the IDirectDrawSurface4::GetPixelFormat method. +typedef struct _DDPIXELFORMAT{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwFourCC; + union + { + DWORD dwRGBBitCount; + DWORD dwYUVBitCount; + DWORD dwZBufferBitDepth; + DWORD dwAlphaBitDepth; + DWORD dwLuminanceBitCount; // new for DirectX 6.0 + DWORD dwBumpBitCount; // new for DirectX 6.0 + } DUMMYUNIONNAMEN(1); + union + { + DWORD dwRBitMask; + DWORD dwYBitMask; + DWORD dwStencilBitDepth; // new for DirectX 6.0 + DWORD dwLuminanceBitMask; // new for DirectX 6.0 + DWORD dwBumpDuBitMask; // new for DirectX 6.0 + } DUMMYUNIONNAMEN(2); + union + { + DWORD dwGBitMask; + DWORD dwUBitMask; + DWORD dwZBitMask; // new for DirectX 6.0 + DWORD dwBumpDvBitMask; // new for DirectX 6.0 + } DUMMYUNIONNAMEN(3); + union + { + DWORD dwBBitMask; + DWORD dwVBitMask; + DWORD dwStencilBitMask; // new for DirectX 6.0 + DWORD dwBumpLuminanceBitMask; // new for DirectX 6.0 + } DUMMYUNIONNAMEN(4); + union + { + DWORD dwRGBAlphaBitMask; + DWORD dwYUVAlphaBitMask; + DWORD dwLuminanceAlphaBitMask; // new for DirectX 6.0 + DWORD dwRGBZBitMask; + DWORD dwYUVZBitMask; + } DUMMYUNIONNAMEN(5); +} DDPIXELFORMAT, FAR* LPDDPIXELFORMAT; + +Members +dwSize +Size of the structure, in bytes. This member must be initialized before the structure is used. +dwFlags +Optional control flags. +DDPF_ALPHA +The pixel format describes an alpha-only surface. +DDPF_ALPHAPIXELS +The surface has alpha channel information in the pixel format. +DDPF_ALPHAPREMULT +The surface uses the premultiplied alpha format. That is, the color components in each pixel are premultiplied by the alpha component. +DDPF_BUMPLUMINANCE +The luminance data in the pixel format is valid, and the dwLuminanceBitMask member descibes valid luminance bits for a luminance-only or luminance-alpha surface. +DDPF_BUMPDUDV +Bump-map data in the pixel format is valid. Bump-map information is in the dwBumpBitCount, dwBumpDuBitMask, dwBumpDvBitMask, and dwBumpLuminanceBitMask members. +DDPF_COMPRESSED +The surface will accept pixel data in the specified format and compress it during the write operation. +DDPF_FOURCC +The dwFourCC member is valid and contains a FOURCC code describing a non-RGB pixel format. +DDPF_LUMINANCE +The pixel format describes a luminance-only or luminance-alpha surface. +DDPF_PALETTEINDEXED1 +DDPF_PALETTEINDEXED2 +DDPF_PALETTEINDEXED4 +DDPF_PALETTEINDEXED8 +The surface is 1-, 2-, 4-, or 8-bit color indexed. +DDPF_PALETTEINDEXEDTO8 +The surface is 1-, 2-, or 4-bit color indexed to an 8-bit palette. +DDPF_RGB +The RGB data in the pixel format structure is valid. +DDPF_RGBTOYUV +The surface will accept RGB data and translate it during the write operation to YUV data. The format of the data to be written will be contained in the pixel format structure. The DDPF_RGB flag will be set. +DDPF_STENCILBUFFER +The surface encodes stencil and depth information in each pixel of the z-buffer. This flag can only be used if the DDPF_ZBUFFER flag is also specified. +DDPF_YUV +The YUV data in the pixel format structure is valid. +DDPF_ZBUFFER +The pixel format describes a z-buffer surface. +DDPF_ZPIXELS +The surface contains z information in the pixels. +dwFourCC +FourCC code. For more information see, Four Character Codes (FOURCC). +dwRGBBitCount +RGB bits per pixel (4, 8, 16, 24, or 32). +dwYUVBitCount +YUV bits per pixel (4, 8, 16, 24, or 32). +dwZBufferBitDepth +Z-buffer bit depth (8, 16, 24, or 32). +dwAlphaBitDepth +Alpha channel bit depth (1, 2, 4, or 8) for an alpha-only surface (DDPF_ALPHA). For pixel formats that contain alpha information interleaved with color data (DDPF_ALPHAPIXELS), you must count the bits in the dwRGBAlphaBitMask member to obtain the bit-depth of the alpha component. For more information, see Remarks. +dwLuminanceBitCount +Total luminance bits per pixel. This member applies only to luminance-only and luminance-alpha surfaces. +dwBumpBitCount +Total bump-map bits per pixel in a bump-map surface. +dwRBitMask +Mask for red bits. +dwYBitMask +Mask for Y bits. +dwStencilBitDepth +Bit depth of the stencil buffer. This member specifies how many bits are reserved within each pixel of the z-buffer for stencil information (the total number of z-bits is equal to dwZBufferBitDepth minus dwStencilBitDepth). +dwLuminanceBitMask +Mask for luminance bits. +dwBumpDuBitMask +Mask for bump-map U-delta bits. +dwGBitMask +Mask for green bits. +dwUBitMask +Mask for U bits. +dwZBitMask +Mask for z bits. +dwBumpDvBitMask +Mask for bump-map V-delta bits. +dwBBitMask +Mask for blue bits. +dwVBitMask +Mask for V bits. +dwStencilBitMask +Mask for stencil bits within each z-buffer pixel. +dwBumpLuminanceBitMask +Mask for luminance in a bump-map pixel. +dwRGBAlphaBitMask and dwYUVAlphaBitMask and dwLuminanceAlphaBitMask +Masks for alpha channel. +dwRGBZBitMask and dwYUVZBitMask +Masks for z channel. + +Remarks +The dwAlphaBitDepth member reflects the bit depth of an alpha-only pixel format (DDPF_ALPHA). For pixel formats that include the alpha component with color components (DDPF_ALPHAPIXELS), the alpha bit depth is obtained by counting the bits in the various mask members. The following example function returns the number of bits set in a given bitmask: +WORD GetNumberOfBits( DWORD dwMask ) +{ + WORD wBits = 0; + while( dwMask ) + { + dwMask = dwMask & ( dwMask - 1 ); + wBits++; + } + return wBits; +} + +The unions in this structure have been updated to work with compilers that don't support nameless unions. If your compiler doesn't support nameless unions, define the NONAMELESSUNION token before including the Ddraw.h header file. + + + + +CallbackData::ReturnType MainWindow::activateAppHandler(CallbackData &someCallbackData) +{ +#if 0 + if(!mDirectDraw.isOkay())return (CallbackData::ReturnType)FALSE; + if(someCallbackData.wParam()) + { + mDirectDraw->setCooperativeLevel(*this,DirectDraw::CoopFlags(DirectDraw::Exclusive|DirectDraw::FullScreen)); +// mDirectDraw->setDisplayMode(800,600,24); +// Surface primarySurface; +// SurfaceDescription surfaceDescription; +// SurfaceCapabilities surfaceCapabilities(SurfaceCapabilities::Capabilities(SurfaceCapabilities::PrimarySurface|SurfaceCapabilities::Device3D)); +// surfaceDescription.flags(SurfaceDescription::Capabilities); +// surfaceDescription.width(800); +// surfaceDescription.height(600); +// surfaceDescription.surfaceCapabilities(surfaceCapabilities); +// DirectDrawError errorResult(mDirectDraw->createSurface(surfaceDescription,primarySurface)); + } + else mDirectDraw->restoreDisplayMode(); +#endif + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::displayChangeHandler(CallbackData &someCallbackData) +{ +#if 0 + if(!mDirectDraw.isOkay())return (CallbackData::ReturnType)FALSE; + if(!mDirectDraw->testCooperativeLevel())::OutputDebugString("testCooperativeLevel failed\n"); + else ::OutputDebugString("testCooperativeLevel succeeded\n"); +#endif + return (CallbackData::ReturnType)FALSE; +} + + + + enum RenderState{RenderStateTextureHandler=D3DRENDERSTATE_TEXTUREHANDLE, + RenderStateAntialias=D3DRENDERSTATE_ANTIALIAS,RenderStateTextureAddress=D3DRENDERSTATE_TEXTUREADDRESS, + RenderStateTexturePerspective=D3DRENDERSTATE_TEXTUREPERSPECTIVE,RenderStateWrapU=D3DRENDERSTATE_WRAPU, + RenderStateWrapV=D3DRENDERSTATE_WRAPV,RenderStateZEnable=D3DRENDERSTATE_ZENABLE, + RenderStateFillMode=D3DRENDERSTATE_FILLMODE,RenderStateShadeMode=D3DRENDERSTATE_SHADEMODE, + RenderStateLinePattern=D3DRENDERSTATE_LINEPATTERN,RenderStateMonoEnable=D3DRENDERSTATE_MONOENABLE, + RenderStateROP2=D3DRENDERSTATE_ROP2,RenderStatePlaneMask=D3DRENDERSTATE_PLANEMASK, + RenderStateZWriteEnable=D3DRENDERSTATE_ZWRITEENABLE,RenderStateAlphaTestEnable=D3DRENDERSTATE_ALPHATESTENABLE, + RenderStateLastPixel=D3DRENDERSTATE_LASTPIXEL,RenderStateTextureMag=D3DRENDERSTATE_TEXTUREMAG, + RenderStateTextureMin=D3DRENDERSTATE_TEXTUREMIN,RenderStateSrcBlend=D3DRENDERSTATE_SRCBLEND, + RenderStateDestBlend=D3DRENDERSTATE_DESTBLEND,RenderStateTextureMapBlend=D3DRENDERSTATE_TEXTUREMAPBLEND, + RenderStateCullMode=D3DRENDERSTATE_CULLMODE,RenderStateZFunc=D3DRENDERSTATE_ZFUNC, + RenderStateAlphaRef=D3DRENDERSTATE_ALPHAREF,RenderStateAlphaFunc=D3DRENDERSTATE_ALPHAFUNC, + RenderStateDitherEnable=D3DRENDERSTATE_DITHERENABLE, + RenderStateAlphaBlendEnable=D3DRENDERSTATE_ALPHABLENDENABLE, + RenderStateFogEnable=D3DRENDERSTATE_FOGENABLE, + RenderStateSpecularEnable=D3DRENDERSTATE_SPECULARENABLE,RenderStateZVisible=D3DRENDERSTATE_ZVISIBLE, + RenderStateSubPixel=D3DRENDERSTATE_SUBPIXEL,RenderStateStippledAlpha=D3DRENDERSTATE_STIPPLEDALPHA, + RenderStateFogColor=D3DRENDERSTATE_FOGCOLOR,RenderStateFogTableMode=D3DRENDERSTATE_FOGTABLEMODE, + RenderStateFogTableStartD3DRENDERSTATE_FOGTABLESTART,RenderStateFogTableEnd=D3DRENDERSTATE_FOGTABLEEND, + RenderStateFogTableDensity=D3DRENDERSTATE_FOGTABLEDENSITY,RenderStateStippleEnable=D3DRENDERSTATE_STIPPLEENABLE, + RenderStateEdgeAntialias=D3DRENDERSTATE_EDGEANTIALIAS,RenderStateColorKeyEnable=D3DRENDERSTATE_COLORKEYENABLE, + RenderStateBorderColor=D3DRENDERSTATE_BORDERCOLOR,RenderStateTextureAddressU=D3DRENDERSTATE_TEXTUREADDRESSU, + RenderStateTextureAddressV=D3DRENDERSTATE_TEXTUREADDRESSV,RenderStateMipMapLODBias=D3DRENDERSTATE_MIPMAPLODBIAS, + RenderStateZBias=D3DRENDERSTATE_ZBIAS,RenderStateRangeFogEnable=D3DRENDERSTATE_RANGEFOGENABLE, + RenderStateAnisotropy=D3DRENDERSTATE_ANISOTROPY,RenderStateFlushBatch=D3DRENDERSTATE_FLUSHBATCH, + RenderStateTranslucentSortIndependent=D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT, + RenderStateStencilEnable=D3DRENDERSTATE_STENCILENABLE,RenderStateStencilFail=D3DRENDERSTATE_STENCILFAIL, + RenderStateStencilZFail=D3DRENDERSTATE_STENCILZFAIL,RenderStateStencilPass=D3DRENDERSTATE_STENCILPASS, + RenderStateStencilFunc=D3DRENDERSTATE_STENCILFUNC,RenderStateStencilRef=D3DRENDERSTATE_STENCILREF, + RenderStateStencilMask=D3DRENDERSTATE_STENCILMASK,RenderStateStencilWriteMask=D3DRENDERSTATE_STENCILWRITEMASK, + RenderStateTetxureFactor=D3DRENDERSTATE_TEXTUREFACTOR,RenderStateStipplePattern31=D3DRENDERSTATE_STIPPLEPATTERN31, + RenderStateWrap0=D3DRENDERSTATE_WRAP0,RenderStateWrap7=D3DRENDERSTATE_WRAP7, + RenderStateForceDoubleWord=D3DRENDERSTATE_FORCE_DWORD}; + + + surfaceDescription.flags(SurfaceDescription::Capabilities); // |SurfaceDescription::BackBufferCount + surfaceDescription.surfaceCapabilities(surfaceCapabilities); +// surfaceDescription.backBufferCount(1); + // |SurfaceCapabilities::Complex|SurfaceCapabilities::Flip + + PixelFormat pixelFormat; + BltEffects bltEffects; + DirectDrawError status; + + mDirectDraw->setCooperativeLevel(*this,DirectDraw::CoopFlags(DirectDraw::Exclusive|DirectDraw::FullScreen)); + mDirectDraw->setDisplayMode(DisplayWidth,DisplayHeight,DisplayBPP); + mDirectDraw->restoreAllSurfaces(); + mPrimarySurface.getPixelFormat(pixelFormat); + + +// BltEffects bltEffects; +// for(int i=0;i<100;i++) +// { +// bltEffects.fillColor(pixelFormat.bBitMask()); +// mPrimarySurface.blt(bltEffects,Surface::BltFlags((int)Surface::BltColorFill|(int)Surface::BltEffects)); +// bltEffects.fillColor(pixelFormat.rBitMask()); +// mPrimarySurface.blt(bltEffects,Surface::BltFlags((int)Surface::BltColorFill|(int)Surface::BltEffects)); +// bltEffects.fillColor(pixelFormat.gBitMask()); +// mPrimarySurface.blt(bltEffects,Surface::BltFlags((int)Surface::BltColorFill|(int)Surface::BltEffects)); +// } + + +#if 0 +// SurfaceDescription surfaceDescription; +// if(!mPrimarySurface.lock(surfaceDescription).okResult())::OutputDebugString("Lock Failed\n"); + DWORD ticks(::GetTickCount()); + if(!mPrimarySurface.lock(FALSE))::OutputDebugString("Lock Failed\n"); + else + { + int width(mPrimarySurface.width()); + int height(mPrimarySurface.height()); + + mPrimarySurface.setBits(255); + + for(int rep=0;rep<200;rep++) + { + for(int x=100;x<200;x++) + { + mPrimarySurface.circle(Point(x,100),50,0); + mPrimarySurface.circle(Point(x,100),50,255); + } + } + + +// for(int colorIndex=0;colorIndex<255;colorIndex++) +// { +// mPrimarySurface.setBits(colorIndex); +// for(int row=0;row1024 then increment eax + jle @@return ; ... otherwise return + inc eax ; increment value in eax +@@return: +ENDM + + + +;if 0 +;********************** + mov eax,[esi].DirectTriEdge@@mxLeft ; move mxLeft into eax + shl eax,BitShift ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDXLeft ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mxLeft,eax ; this is new mxLeft + verifyLeft ; check/adjust mxLeft + mov eax,[esi].DirectTriEdge@@mxRight ; move mxRight into eax + shl eax,BitShift ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDXRight ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mxRight,eax ; this is new mxRight + verifyRight ; check/adjust mxRight + mov eax,[esi].DirectTriEdge@@muLeft ; move muLeft into eax + shl eax,BitShift ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDULeft ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@muLeft,eax ; this is new muLeft + mov eax,[esi].DirectTriEdge@@muRight ; move muRight into eax + shl eax,BitShift ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDURight ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@muRight,eax ; this is new muRight + mov eax,[esi].DirectTriEdge@@mvLeft ; move mvLeft into eax + shl eax,BitShift ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDVLeft ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mvLeft,eax ; this is new mvLeft + mov eax,[esi].DirectTriEdge@@mvRight ; move mvRight into eax + shl eax,BitShift ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDVRight ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mvRight,eax ; this is new mvRight + inc y ; increment y +;********************** +;endif + + +if 0 +initialize MACRO + mov eax,[esi].DirectTriEdge@@my2 ; move my2 into eax + sub eax,[esi].DirectTriEdge@@my0 ; eax has (y2-y0) + mov [esi].DirectTriEdge@@mDY,eax ; move (y2-y0) into mDY variable + mov eax,[esi].DirectTriEdge@@mx2 ; move x2 into eax + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x2-x0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (x2-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is mDXLeft + mov eax,[esi].DirectTriEdge@@mx1 ; move x1 into eax + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x1-x0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (x1-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXRight,eax ; this is mDXRight + mov eax,[esi].DirectTriEdge@@mu2 ; move u2 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u2-u0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (u2-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDULeft,eax ; this is mDULeft + mov eax,[esi].DirectTriEdge@@mu1 ; move u1 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u1-u0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (u1-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDURight,eax ; this is mDURight + mov eax,[esi].DirectTriEdge@@mv2 ; move v2 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v2-v0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (v2-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVLeft,eax ; this is mDVLeft + mov eax,[esi].DirectTriEdge@@mv1 ; move v1 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v1-v0) + shl eax,BitShift ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (v1-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVRight,eax ; this is mDVRight + mov eax,[esi].DirectTriEdge@@mx0 ; move x0 into eax + mov [esi].DirectTriEdge@@mxLeft,eax ; mxLeft=x0 + mov [esi].DirectTriEdge@@mxRight,eax ; mxRight=x0 + mov eax,[esi].DirectTriEdge@@mu0 ; move u0 into eax + mov [esi].DirectTriEdge@@muLeft,eax ; muLeft=u0 + mov [esi].DirectTriEdge@@muRight,eax ; muRight=u0 + mov eax,[esi].DirectTriEdge@@mv0 ; move v0 into eax + mov [esi].DirectTriEdge@@mvLeft,eax ; mvLeft=v0 + mov [esi].DirectTriEdge@@mvRight,eax ; mvRight=v0 +ENDM +endif + + + + + +; cmp eax,[esi].DirectTriEdge@@mx2 ; is mxLeft less than x2 +; jge @@noChangeDir ; if not then continue +; shl eax,BitShift ; adjust mxLeft for precision + sub eax,[esi].DirectTriEdge@@mDXLeft ; subtract out mDXLeft, this is adjusted mxLeft + mov [esi].DirectTriEdge@@mxLeft,eax ; save adjusted mxLeft + mov ebx,[esi].DirectTriEdge@@my1 ; move y1 into ebx register + sub ebx,y ; subtract (y1-y) + mov ecx,[esi].DirectTriEdge@@mx1 ; move x1 into ecx register + sub ecx,[esi].DirectTriEdge@@mx2 ; subtract (x1-x2) + shl ecx,BitShift ; adjust eax for precision + divide ecx,ebx ; eax has (x1-x2)/(y1-y), result to eax + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is new mDXLeft + mov ebx,[esi].DirectTriEdge@@mxLeft ; move mxLeft into ebx register + add ebx,eax ; ebx has mxLeft+mDXLeft + shr ebx,BitShift ; adjust eax for precision + mov [esi].DirectTriEdge@@mxLeft,ebx ; this is new mxLeft +@@noChangeDir: diff --git a/ddraw/SFCCAPS.HPP b/ddraw/SFCCAPS.HPP new file mode 100644 index 0000000..e43fc46 --- /dev/null +++ b/ddraw/SFCCAPS.HPP @@ -0,0 +1,119 @@ +#ifndef _DDRAW_SURFACECAPABILITIES_HPP_ +#define _DDRAW_SURFACECAPABILITIES_HPP_ +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif + +class SurfaceCapabilities : private DDSCAPS2 +{ +public: + enum Capabilities{Alpha=DDSCAPS_ALPHA,BackBuffer=DDSCAPS_BACKBUFFER,Complex=DDSCAPS_COMPLEX,Flip=DDSCAPS_FLIP, + FrontBuffer=DDSCAPS_FRONTBUFFER,OffScreenPlain=DDSCAPS_OFFSCREENPLAIN,Overlay=DDSCAPS_OVERLAY, + Palette=DDSCAPS_PALETTE,PrimarySurface=DDSCAPS_PRIMARYSURFACE, + PrimarySurfaceLeft=DDSCAPS_PRIMARYSURFACELEFT,SystemMemory=DDSCAPS_SYSTEMMEMORY, + Texture=DDSCAPS_TEXTURE,Device3D=DDSCAPS_3DDEVICE,VideoMemory=DDSCAPS_VIDEOMEMORY, + Visible=DDSCAPS_VISIBLE,WriteOnly=DDSCAPS_WRITEONLY,ZBuffer=DDSCAPS_ZBUFFER, + OwnDC=DDSCAPS_OWNDC,LiveVideo=DDSCAPS_LIVEVIDEO,HardwareCodec=DDSCAPS_HWCODEC,Modex=DDSCAPS_MODEX, + AllocOnLoad=DDSCAPS_ALLOCONLOAD,VideoPort=DDSCAPS_VIDEOPORT,LocalVidMem=DDSCAPS_LOCALVIDMEM, + StandardVGAMode=DDSCAPS_STANDARDVGAMODE,Optimized=DDSCAPS_OPTIMIZED}; + enum AdditionalCapabilities{None=0,HardwareDeInterlace=DDSCAPS2_HARDWAREDEINTERLACE, + HintAntialiasing=DDSCAPS2_HINTANTIALIASING,HintDynamic=DDSCAPS2_HINTDYNAMIC, + HintStatic=DDSCAPS2_HINTSTATIC,Opaque=DDSCAPS2_OPAQUE,TextureManager=DDSCAPS2_TEXTUREMANAGE}; + SurfaceCapabilities(void); + SurfaceCapabilities(const SurfaceCapabilities &someSurfaceCapabilities); + SurfaceCapabilities(const DDSCAPS2 &someDDSCAPS2); + SurfaceCapabilities(Capabilities surfaceCapabilities,AdditionalCapabilities additionalCapabilities=None); + virtual ~SurfaceCapabilities(); + SurfaceCapabilities &operator=(const SurfaceCapabilities &someSurfaceCapabilities); + SurfaceCapabilities &operator=(const DDSCAPS2 &someDDSCAPS2); + Capabilities surfaceCapabilities(void)const; + void surfaceCapabilities(Capabilities surfaceCapabilities); + AdditionalCapabilities additionalCapabilities(void)const; + void additionalCapabilities(AdditionalCapabilities additionalCapabilities); + DDSCAPS2 &getDDSCAPS2(void); +private: +}; + +inline +SurfaceCapabilities::SurfaceCapabilities(void) +{ + DDSCAPS2::dwCaps=0; + DDSCAPS2::dwCaps2=0; + DDSCAPS2::dwCaps3=0; + DDSCAPS2::dwCaps4=0; +} + +inline +SurfaceCapabilities::SurfaceCapabilities(const SurfaceCapabilities &someSurfaceCapabilities) +{ + *this=someSurfaceCapabilities; +} + +inline +SurfaceCapabilities::SurfaceCapabilities(Capabilities surfaceCapabilities,AdditionalCapabilities additionalCapabilities) +{ + DDSCAPS2::dwCaps=(DWORD)surfaceCapabilities; + DDSCAPS2::dwCaps2=(DWORD)additionalCapabilities; + DDSCAPS2::dwCaps3=0; + DDSCAPS2::dwCaps4=0; +} + +inline +SurfaceCapabilities::SurfaceCapabilities(const DDSCAPS2 &someDDSCAPS2) +{ + *this=someDDSCAPS2; +} + +inline +SurfaceCapabilities::~SurfaceCapabilities() +{ +} + +inline +SurfaceCapabilities &SurfaceCapabilities::operator=(const SurfaceCapabilities &someSurfaceCapabilities) +{ + surfaceCapabilities(someSurfaceCapabilities.surfaceCapabilities()); + additionalCapabilities(someSurfaceCapabilities.additionalCapabilities()); + return *this; +} + +inline +SurfaceCapabilities &SurfaceCapabilities::operator=(const DDSCAPS2 &someDDSCAPS2) +{ + DDSCAPS2::dwCaps=someDDSCAPS2.dwCaps; + DDSCAPS2::dwCaps2=someDDSCAPS2.dwCaps2; + DDSCAPS2::dwCaps3=someDDSCAPS2.dwCaps3; + DDSCAPS2::dwCaps4=someDDSCAPS2.dwCaps4; + return *this; +} + +inline +SurfaceCapabilities::Capabilities SurfaceCapabilities::surfaceCapabilities(void)const +{ + return Capabilities(DDSCAPS2::dwCaps); +} + +inline +void SurfaceCapabilities::surfaceCapabilities(Capabilities surfaceCapabilities) +{ + DDSCAPS2::dwCaps=(DWORD)surfaceCapabilities; +} + +inline +SurfaceCapabilities::AdditionalCapabilities SurfaceCapabilities::additionalCapabilities(void)const +{ + return AdditionalCapabilities(DDSCAPS2::dwCaps2); +} + +inline +void SurfaceCapabilities::additionalCapabilities(AdditionalCapabilities additionalCapabilities) +{ + DDSCAPS2::dwCaps2=(DWORD)additionalCapabilities; +} + +inline +DDSCAPS2 &SurfaceCapabilities::getDDSCAPS2(void) +{ + return (DDSCAPS2&)*this; +} +#endif \ No newline at end of file diff --git a/ddraw/SFCDESC.HPP b/ddraw/SFCDESC.HPP new file mode 100644 index 0000000..d60786b --- /dev/null +++ b/ddraw/SFCDESC.HPP @@ -0,0 +1,318 @@ +#ifndef _DDRAW_SURFACEDESCRIPTION_HPP_ +#define _DDRAW_SURFACEDESCRIPTION_HPP_ +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif +#ifndef _DDRAW_SURFACECAPABILITIES_HPP_ +#include +#endif + +class SurfaceDescription : private DDSURFACEDESC2 +{ +public: +enum SurfaceFlags{Capabilities=DDSD_CAPS,Height=DDSD_HEIGHT,Width=DDSD_WIDTH,Pitch=DDSD_PITCH, + BackBufferCount=DDSD_BACKBUFFERCOUNT,ZBufferBitDepth=DDSD_ZBUFFERBITDEPTH, + AlphaBitDepth=DDSD_ALPHABITDEPTH,Surface=DDSD_LPSURFACE,PixelFormat=DDSD_PIXELFORMAT, + CKDestinationOverlay=DDSD_CKDESTOVERLAY,CKSourceOverlay=DDSD_CKSRCOVERLAY, + CKSourceBlt=DDSD_CKSRCBLT,MipMapCount=DDSD_MIPMAPCOUNT,RefreshRate=DDSD_REFRESHRATE, + LinearSize=DDSD_LINEARSIZE,TextureStage=DDSD_TEXTURESTAGE,All=DDSD_ALL}; + SurfaceDescription(void); + SurfaceDescription(const SurfaceDescription &someSurfaceDescription); + SurfaceDescription(const DDSURFACEDESC2 &someDDSURFACEDESC2); + virtual ~SurfaceDescription(); + SurfaceDescription &operator=(const SurfaceDescription &someSurfaceDescription); + SurfaceDescription &operator=(const DDSURFACEDESC2 &someDDSURFDESC2); + DWORD flags(void)const; + void flags(DWORD flags); + DWORD height(void)const; + void height(DWORD height); + DWORD width(void)const; + void width(DWORD width); + LONG lPitch(void)const; + void lPitch(LONG lPitch); + DWORD linearSize(void)const; + void linearSize(DWORD linearSize); + DWORD backBufferCount(void)const; + void backBufferCount(DWORD backBufferCount); + DWORD mipMapCount(void)const; + void mipMapCount(DWORD mipMapCount); + DWORD refreshRate(void)const; + void refreshRate(DWORD refreshRate); + DWORD alphaBitDepth(void)const; + void alphaBitDepth(DWORD alphaBitDepth); + LPVOID ptrSurface(void); + void ptrSurface(LPVOID pSurface); + const DDCOLORKEY &ckDestOverlay(void)const; + void ckDestOverlay(const DDCOLORKEY &ckDestOverlay); + const DDCOLORKEY &ckDestBlt(void)const; + void ckDestBlt(const DDCOLORKEY &ckDestBlt); + const DDCOLORKEY &ckSrcOverlay(void)const; + void ckSrcOverlay(const DDCOLORKEY &ckSrcOverlay); + const DDCOLORKEY &ckSrcBlt(void)const; + void ckSrcBlt(const DDCOLORKEY &ckSrcBlt); + const DDPIXELFORMAT &pixelFormat(void)const; + void pixelFormat(const DDPIXELFORMAT &pixelFormat); + SurfaceCapabilities surfaceCapabilities(void)const; + void surfaceCapabilities(const SurfaceCapabilities &surfaceCapabilities); + DWORD textureStage(void)const; + void textureStage(DWORD textureStage); + DDSURFACEDESC2 &getDDSURFACEDESC2(void); +private: + void zeroInit(void); +}; + +inline +SurfaceDescription::SurfaceDescription(void) +{ + zeroInit(); +} + +inline +SurfaceDescription::SurfaceDescription(const SurfaceDescription &someSurfaceDescription) +{ + *this=someSurfaceDescription; +} + +inline +SurfaceDescription::SurfaceDescription(const DDSURFACEDESC2 &someDDSURFACEDESC2) +{ + *this=someDDSURFACEDESC2; +} + +inline +SurfaceDescription::~SurfaceDescription() +{ +} + +inline +SurfaceDescription &SurfaceDescription::operator=(const SurfaceDescription &someSurfaceDescription) +{ + ::memcpy(&getDDSURFACEDESC2(),&((SurfaceDescription&)someSurfaceDescription).getDDSURFACEDESC2(),sizeof(DDSURFACEDESC2)); + return *this; +} + +inline +SurfaceDescription &SurfaceDescription::operator=(const DDSURFACEDESC2 &someDDSURFACEDESC2) +{ + ::memcpy(&getDDSURFACEDESC2(),&someDDSURFACEDESC2,sizeof(DDSURFACEDESC2)); + DDSURFACEDESC2::dwSize=sizeof(DDSURFACEDESC2); + return *this; +} + +inline +DWORD SurfaceDescription::flags(void)const +{ + return DDSURFACEDESC2::dwFlags; +} + +inline +void SurfaceDescription::flags(DWORD flags) +{ + DDSURFACEDESC2::dwFlags=flags; +} + +inline +DWORD SurfaceDescription::height(void)const +{ + return DDSURFACEDESC2::dwHeight; +} + +inline +void SurfaceDescription::height(DWORD height) +{ + DDSURFACEDESC2::dwHeight=height; +} + +inline +DWORD SurfaceDescription::width(void)const +{ + return DDSURFACEDESC2::dwWidth; +} + +inline +void SurfaceDescription::width(DWORD width) +{ + DDSURFACEDESC2::dwWidth=width; +} + +inline +LONG SurfaceDescription::lPitch(void)const +{ + return DDSURFACEDESC2::lPitch; +} + +inline +void SurfaceDescription::lPitch(LONG lPitch) +{ + DDSURFACEDESC2::lPitch=lPitch; +} + +inline +DWORD SurfaceDescription::linearSize(void)const +{ + return DDSURFACEDESC2::dwLinearSize; +} + +inline +void SurfaceDescription::linearSize(DWORD linearSize) +{ + DDSURFACEDESC2::dwLinearSize=linearSize; +} + +inline +DWORD SurfaceDescription::backBufferCount(void)const +{ + return DDSURFACEDESC2::dwBackBufferCount; +} + +inline +void SurfaceDescription::backBufferCount(DWORD backBufferCount) +{ + DDSURFACEDESC2::dwBackBufferCount=backBufferCount; +} + +inline +DWORD SurfaceDescription::mipMapCount(void)const +{ + return DDSURFACEDESC2::dwMipMapCount; +} + +inline +void SurfaceDescription::mipMapCount(DWORD mipMapCount) +{ + DDSURFACEDESC2::dwMipMapCount=mipMapCount; +} + +inline +DWORD SurfaceDescription::refreshRate(void)const +{ + return DDSURFACEDESC2::dwRefreshRate; +} + +inline +void SurfaceDescription::refreshRate(DWORD refreshRate) +{ + DDSURFACEDESC2::dwRefreshRate=refreshRate; +} + +inline +DWORD SurfaceDescription::alphaBitDepth(void)const +{ + return DDSURFACEDESC2::dwAlphaBitDepth; +} + +inline +void SurfaceDescription::alphaBitDepth(DWORD alphaBitDepth) +{ + DDSURFACEDESC2::dwAlphaBitDepth=alphaBitDepth; +} + +inline +LPVOID SurfaceDescription::ptrSurface(void) +{ + return DDSURFACEDESC2::lpSurface; +} + +inline +void SurfaceDescription::ptrSurface(LPVOID pSurface) +{ + DDSURFACEDESC2::lpSurface=pSurface; +} + +inline +const DDCOLORKEY &SurfaceDescription::ckDestOverlay(void)const +{ + return DDSURFACEDESC2::ddckCKDestOverlay; +} + +inline +void SurfaceDescription::ckDestOverlay(const DDCOLORKEY &ckDestOverlay) +{ + DDSURFACEDESC2::ddckCKDestOverlay=ckDestOverlay; +} + +inline +const DDCOLORKEY &SurfaceDescription::ckDestBlt(void)const +{ + return DDSURFACEDESC2::ddckCKDestBlt; +} + +inline +void SurfaceDescription::ckDestBlt(const DDCOLORKEY &ckDestBlt) +{ + DDSURFACEDESC2::ddckCKDestBlt=ckDestBlt; +} + +inline +const DDCOLORKEY &SurfaceDescription::ckSrcOverlay(void)const +{ + return DDSURFACEDESC2::ddckCKSrcOverlay; +} + +inline +void SurfaceDescription::ckSrcOverlay(const DDCOLORKEY &ckSrcOverlay) +{ + DDSURFACEDESC2::ddckCKSrcOverlay=ckSrcOverlay; +} + +inline +const DDCOLORKEY &SurfaceDescription::ckSrcBlt(void)const +{ + return DDSURFACEDESC2::ddckCKSrcBlt; +} + +inline +void SurfaceDescription::ckSrcBlt(const DDCOLORKEY &ckSrcBlt) +{ + DDSURFACEDESC2::ddckCKSrcBlt=ckSrcBlt; +} + +inline +const DDPIXELFORMAT &SurfaceDescription::pixelFormat(void)const +{ + return DDSURFACEDESC2::ddpfPixelFormat; +} + +inline +void SurfaceDescription::pixelFormat(const DDPIXELFORMAT &pixelFormat) +{ + DDSURFACEDESC2::ddpfPixelFormat=pixelFormat; +} + +inline +SurfaceCapabilities SurfaceDescription::surfaceCapabilities(void)const +{ + return SurfaceCapabilities(DDSURFACEDESC2::ddsCaps); +} + +inline +void SurfaceDescription::surfaceCapabilities(const SurfaceCapabilities &surfaceCapabilities) +{ + DDSURFACEDESC2::ddsCaps=((SurfaceCapabilities&)surfaceCapabilities).getDDSCAPS2(); +} + +inline +DWORD SurfaceDescription::textureStage(void)const +{ + return DDSURFACEDESC2::dwTextureStage; +} + +inline +void SurfaceDescription::textureStage(DWORD textureStage) +{ + DDSURFACEDESC2::dwTextureStage; +} + +inline +DDSURFACEDESC2 &SurfaceDescription::getDDSURFACEDESC2(void) +{ + return (DDSURFACEDESC2&)*this; +} + +inline +void SurfaceDescription::zeroInit(void) +{ + ::memset(&getDDSURFACEDESC2(),0,sizeof(DDSURFACEDESC2)); + DDSURFACEDESC2::dwSize=sizeof(DDSURFACEDESC2); +} +#endif \ No newline at end of file diff --git a/ddraw/SURFACE.HPP b/ddraw/SURFACE.HPP new file mode 100644 index 0000000..d4cb46c --- /dev/null +++ b/ddraw/SURFACE.HPP @@ -0,0 +1,222 @@ +#ifndef _DDRAW_SURFACE_HPP_ +#define _DDRAW_SURFACE_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _DDRAW_DDRAW_HPP_ +#include +#endif +#ifndef _DDRAW_PIXELFORMAT_HPP_ +#include +#endif +#ifndef _DDRAW_BLITEFFECTS_HPP_ +#include +#endif +#ifndef _DDRAW_SURFACEDESCRIPTION_HPP_ +#include +#endif +#ifndef _DDRAW_DIRECTPALETTE_HPP_ +#include +#endif +#ifndef _DDRAW_DIRECTDRAWERROR_HPP_ +#include +#endif + +class Surface : private SmartPointer +{ +public: + enum Disposition{Release,Assume}; + enum BltFastFlags{BltFastDstColorKey=DDBLTFAST_DESTCOLORKEY,BltFastNoColorKey=DDBLTFAST_NOCOLORKEY, + BltFastSrcColorKey=DDBLTFAST_SRCCOLORKEY,BltFastWait=DDBLTFAST_WAIT}; + enum BltFlags{BltColorFill=DDBLT_COLORFILL,BltEffects=DDBLT_DDFX,BltRaster=DDBLT_DDROPS, + BltDepthFill=DDBLT_DEPTHFILL,BltKeyDstOverride=DDBLT_KEYDESTOVERRIDE, + BltKeySrcOverride=DDBLT_KEYSRCOVERRIDE,BltUseWin32Raster=DDBLT_ROP,BltRotationAngle=DDBLT_ROTATIONANGLE, + BltKeyDst=DDBLT_KEYDEST,BltKeySrc=DDBLT_KEYSRC,BltAsync=DDBLT_ASYNC,BltWait=DDBLT_WAIT}; + enum LockFlags{LockNoSysLock=DDLOCK_NOSYSLOCK,LockReadOnly=DDLOCK_READONLY, + LockSurfaceMemPtr=DDLOCK_SURFACEMEMORYPTR,LockWait=DDLOCK_WAIT,LockWriteOnly=DDLOCK_WRITEONLY}; + friend class DirectDraw; + Surface(void); + virtual ~Surface(); + DirectDrawError getPixelFormat(PixelFormat &pixelFormat); + DirectDrawError bltFast(const GDIPoint &xyDstPoint,Surface &srcSurface,const Rect &srcRect,BltFastFlags bltFlags=BltFastWait); + DirectDrawError bltFast(const GDIPoint &xyDstPoint,Surface &srcSurface,BltFastFlags bltFlags=BltFastWait); + DirectDrawError bltFast(Surface &srcSurface,BltFastFlags bltFlags=BltFastWait); + DirectDrawError blt(const Rect &dstRect,Surface &srcSurface,const Rect &srcRect,BltFlags bltFlags=BltWait); + DirectDrawError blt(const Rect &dstRect,Surface &srcSurface,const Rect &srcRect,::BltEffects &bltEffects,BltFlags bltFlags=BltWait); + DirectDrawError blt(Surface &srcSurface,::BltEffects &bltEffects,BltFlags bltFlags=BltWait); + DirectDrawError blt(::BltEffects &bltEffects,BltFlags bltFlags=BltWait); + DirectDrawError setPalette(DirectPalette &directPalette); + DirectDrawError getDC(HDC &hDC); + DirectDrawError releaseDC(HDC hDC); + DirectDrawError lock(SurfaceDescription &surfaceDescription,LockFlags lockFlags=LockFlags((int)LockNoSysLock|(int)LockWriteOnly|(int)LockSurfaceMemPtr|(int)LockWait)); + DirectDrawError unlock(void); + DirectDrawError getAttachedSurface(const SurfaceCapabilities &surfaceCapabilities,Surface &surface); + DirectDrawError flip(void); + void destroy(void); + BOOL isOkay(void)const; +private: + Surface(const Surface &someSurface); + Surface &operator=(const Surface &someSurface); + Disposition mDisposition; +}; + +inline +Surface::Surface(void) +: mDisposition(Release) +{ +} + +inline +Surface::Surface(const Surface &someSurface) +{ // private implementation + *this=someSurface; +} + +inline +Surface::~Surface() +{ + destroy(); +} + +inline +Surface &Surface::operator=(const Surface &/*someSurface*/) +{ // private implementation + return *this; +} + +inline +DirectDrawError Surface::getPixelFormat(PixelFormat &pixelFormat) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->GetPixelFormat(&pixelFormat.getDDPIXELFORMAT())); +} + +inline +DirectDrawError Surface::bltFast(const GDIPoint &xyDstPoint,Surface &srcSurface,const Rect &srcRect,BltFastFlags bltFlags) +{ + if(!isOkay()||!srcSurface.isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->BltFast(xyDstPoint.x(),xyDstPoint.y(),(IDirectDrawSurface4*)((SmartPointer&)*this),(RECT*)(Rect&)srcRect,(DWORD)bltFlags)); +} + +inline +DirectDrawError Surface::bltFast(const GDIPoint &xyDstPoint,Surface &srcSurface,BltFastFlags bltFlags) +{ + if(!isOkay()||!srcSurface.isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->BltFast(xyDstPoint.x(),xyDstPoint.y(),(IDirectDrawSurface4*)((SmartPointer&)*srcSurface),0,(DWORD)bltFlags)); +} + +inline +DirectDrawError Surface::bltFast(Surface &srcSurface,BltFastFlags bltFlags) +{ + if(!isOkay()||!srcSurface.isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->BltFast(0,0,(IDirectDrawSurface4*)((SmartPointer&)srcSurface),0,(DWORD)bltFlags)); +} + +inline +DirectDrawError Surface::blt(const Rect &dstRect,Surface &srcSurface,const Rect &srcRect,BltFlags bltFlags) +{ + if(!isOkay()||!srcSurface.isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->Blt((RECT*)(Rect&)dstRect,(IDirectDrawSurface4*)((SmartPointer&)srcSurface),(RECT*)(Rect&)srcRect,(DWORD)bltFlags,0)); +} + +inline +DirectDrawError Surface::blt(const Rect &dstRect,Surface &srcSurface,const Rect &srcRect,::BltEffects &bltEffects,BltFlags bltFlags) +{ + if(!isOkay()||!srcSurface.isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->Blt((RECT*)(Rect&)dstRect,(IDirectDrawSurface4*)((SmartPointer&)srcSurface),(RECT*)(Rect&)srcRect,(DWORD)bltFlags|(DWORD)BltEffects,&bltEffects.getDDBLTFX())); +} + +inline +DirectDrawError Surface::blt(Surface &srcSurface,::BltEffects &bltEffects,BltFlags bltFlags) +{ + if(!isOkay()||!srcSurface.isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->Blt(0,(IDirectDrawSurface4*)((SmartPointer&)srcSurface),0,(DWORD)bltFlags,&bltEffects.getDDBLTFX())); +} + +inline +DirectDrawError Surface::blt(::BltEffects &bltEffects,BltFlags bltFlags) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->Blt(0,0,0,(DWORD)bltFlags|BltEffects,&bltEffects.getDDBLTFX())); +} + +inline +DirectDrawError Surface::setPalette(DirectPalette &directPalette) +{ + DirectDrawError status(DirectDrawError::GenericFailure); + + if(!isOkay()||!directPalette.isOkay())return status; + status=DirectDrawError::DirectDrawResult(operator->()->SetPalette((IDirectDrawPalette*)directPalette)); + return status; +} + +inline +DirectDrawError Surface::getDC(HDC &hDC) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->GetDC(&hDC)); +} + +inline +DirectDrawError Surface::releaseDC(HDC hDC) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->ReleaseDC(hDC)); +} + +inline +DirectDrawError Surface::lock(SurfaceDescription &surfaceDescription,LockFlags lockFlags) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->Lock(0,&surfaceDescription.getDDSURFACEDESC2(),lockFlags,0)); +} + +inline +DirectDrawError Surface::unlock(void) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->Unlock(0)); +} + +inline +DirectDrawError Surface::getAttachedSurface(const SurfaceCapabilities &surfaceCapabilities,Surface &surface) +{ + DirectDrawError status(DirectDrawError::GenericFailure); + LPDIRECTDRAWSURFACE4 lpDirectDrawSurface; + + if(!isOkay())return status; + surface.destroy(); + status=DirectDrawError::DirectDrawResult(operator->()->GetAttachedSurface(&((SurfaceCapabilities&)surfaceCapabilities).getDDSCAPS2(),&lpDirectDrawSurface)); + if(!status.okResult())return status; + (SmartPointer&)surface=lpDirectDrawSurface; + surface.mDisposition=Surface::Assume; + return status; +} + +inline +DirectDrawError Surface::flip(void) +{ + if(!isOkay())return DirectDrawError::GenericFailure; + return DirectDrawError::DirectDrawResult(operator->()->Flip(0,DDFLIP_WAIT)); +} + +inline +void Surface::destroy(void) +{ + if(!isOkay())return; + if(Release==mDisposition)operator->()->Release(); + SmartPointer::destroy(); +} + +inline +BOOL Surface::isOkay(void)const +{ + return SmartPointer::isOkay(); +} +#endif diff --git a/ddraw/TEXTURE.CPP b/ddraw/TEXTURE.CPP new file mode 100644 index 0000000..d038dbf --- /dev/null +++ b/ddraw/TEXTURE.CPP @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include + +DirectTexture::DirectTexture(const Vector3D &dstPoints,Bitmap &textureBitmap,DrawingSurface &drawingSurface,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + displayDevice.translatePoint(mDstPoints3D,mDstPoints2D); + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::directSetSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::directSetDstBitmapInfo(drawingSurface.width(),drawingSurface.height(),drawingSurface.pitch(),(unsigned char*)drawingSurface.ptrSurface()); +} + +DirectTexture::DirectTexture(const Vector2D &dstPoints,Bitmap &textureBitmap,DrawingSurface &drawingSurface) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints2D=dstPoints; + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::directSetSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::directSetDstBitmapInfo(drawingSurface.width(),drawingSurface.height(),drawingSurface.pitch(),(unsigned char*)drawingSurface.ptrSurface()); +} + +DirectTexture::DirectTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DrawingSurface &drawingSurface,Device3D &displayDevice,TriMap triMap) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + Triangle angle2D; + + displayDevice.mapCoordinates((Triangle3D&)angle3D,angle2D); + mDstPoints2D[0]=angle2D[0]; + mDstPoints2D[1]=angle2D[1]; + mDstPoints2D[2]=angle2D[2]; + mLeftEdge.numVertexes(Triangle::VectorPoints); + mRightEdge.numVertexes(Triangle::VectorPoints); + switch(triMap) + { + case MapCenter : + mTexturePoints[0]=Point(0,textureBitmap.height()-1); + mTexturePoints[1]=Point(textureBitmap.width()/2,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + break; + case MapUpperRight : + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + break; + case MapLowerLeft : + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[2]=Point(0,textureBitmap.height()-1); + break; + } + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::directSetSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::directSetDstBitmapInfo(drawingSurface.width(),drawingSurface.height(),drawingSurface.pitch(),(unsigned char*)drawingSurface.ptrSurface()); +} diff --git a/ddraw/TEXTURE.HPP b/ddraw/TEXTURE.HPP new file mode 100644 index 0000000..2f29b44 --- /dev/null +++ b/ddraw/TEXTURE.HPP @@ -0,0 +1,71 @@ +#ifndef _DDRAW_TEXTURE_HPP_ +#define _DDRAW_TEXTURE_HPP_ +#ifndef _COMMON_VECTOR2D_HPP_ +#include +#endif +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif +#ifndef _ENGINE_DEVICE3D_HPP_ +#include +#endif +#ifndef _ENGINE_PUREEDGE_HPP_ +#include +#endif +#ifndef _ENGINE_PUREMAP_HPP_ +#include +#endif + +class Bitmap; +class DrawingSurface; +class Triangle3D; + +extern "C" +{ + void directMapTexture(PureMap *lpEdgeMap); + void directInitEdge(int edgeType,PureEdge *lpPureEdge); + void directSetSrcBitmapInfo(WORD width,WORD height,UHUGE *lpSrcBitmapImage); + void directSetDstBitmapInfo(WORD width,WORD height,WORD pitch,UHUGE *lpDstBitmapImage); + void directSetMaskInfo(WORD useMask,BYTE maskValue); +} + +class DirectTexture +{ +public: + enum TriMap{MapCenter,MapLowerLeft,MapUpperRight}; + typedef void (DirectTexture::*PMFI)(long pixelPoint,long imagePoint); + DirectTexture(const Vector3D &dstPoints,Bitmap &textureBitmap,DrawingSurface &drawingSurface,Device3D &displayDevice); + DirectTexture(const Vector2D &dstPoints,Bitmap &textureBitmap,DrawingSurface &drawingSurface); + DirectTexture(const Triangle3D &angle3D,Bitmap &textureBitmap,DrawingSurface &drawingSurface,Device3D &displayDevice,TriMap triMap=MapCenter); + virtual ~DirectTexture(); + void mapTexture(void); +private: + enum EdgeType{LeftEdge=-1,RightEdge=1}; + DirectTexture &operator=(const DirectTexture &someTexture); + PureEdge mLeftEdge; + PureEdge mRightEdge; + PureMap mEdgeMap; + Vector2D mTexturePoints; + Vector2D mDstPoints2D; + Vector3D mDstPoints3D; +}; + +inline +DirectTexture &DirectTexture::operator=(const DirectTexture &/*someTexture*/) +{ // undefined + return *this; +} + +inline +DirectTexture::~DirectTexture() +{ +} + +inline +void DirectTexture::mapTexture(void) +{ + ::directInitEdge(LeftEdge,&mLeftEdge); + ::directInitEdge(RightEdge,&mRightEdge); + ::directMapTexture(&mEdgeMap); +} +#endif diff --git a/ddraw/TMAP32.ASM b/ddraw/TMAP32.ASM new file mode 100644 index 0000000..d0b5125 --- /dev/null +++ b/ddraw/TMAP32.ASM @@ -0,0 +1,493 @@ +;******************************************************************************************************** +; MODULE: TMAP32.ASM DATE: DECEMBER 28, 1994 +; AUTHOR: SEAN M. KESSLER JUNE 06, 1995 +; TARGET: 32 BIT TARGET JANUARY 29, 1999 (DIRECT DRAW VERSION) +; FUNCTION : TEXTURE MAPPING POLYGONS IN PERSPECTIVE +;******************************************************************************************************** +SMART +.386 +.MODEL FLAT +.DATA +.LALL +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\DDRAW\TMAP32.INC +INCLUDE ..\DDRAW\UTIL32.INC +bmData@@mSrcWidth DW 00h +bmData@@mSrcHeight DW 00h +bmData@@mSrcExtent DD 00h +bmData@@mlpSrcPtr DD 00h +bmData@@mDstWidth DW 00h +bmData@@mDstPitch DW 00h +bmData@@mDstHeight DW 00h +bmData@@mDstExtent DD 00h +bmData@@mlpDstPtr DD 00h +bmData@@mlpDstIndexPtr DD 00h +bmData@@mPrecision DW 4000h +bmData@@mMaskValue DB 0FFh +bmData@@mUseMask DB 00h + +MINVALUE EQU -32767 +MAXVALUE EQU 32767 +MINVERTEX EQU 3 +.CODE +LOCALS +roundEBX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov ebx,varOne ; move value into ebx register + and edx,00003FFFh ; get remainder into edx register + shr ebx,14 ; get whole number to ebx register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc ebx ; increment value in ebx +@@return: +ENDM +roundEAX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov eax,varOne ; move value into eax register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc eax ; increment value in eax +@@return: +ENDM +getPoint MACRO address,index + movzx eax,index ; move index into eax register + shl eax,02h ; multiply ax by size of far pointer + add eax,address ; add in the address + movzx ebx,[eax].Point@@y ; get the y value to bx register + movzx eax,[eax].Point@@x ; get the x value to ax register +ENDM +newEdge MACRO ; (PureEdge*) in eax, sets edx=1=error, otherwise edx=0 + movzx ebx,[eax].PureEdge@@mEdgeDirection ; save edgeDirection + push ebx ; push edgeDirection + push [eax].PureEdge@@mCurrentEdgeEnd ; push currentEdge end (ie) nextEdge index + mov ecx,eax ; move (PureEdge*) to ecx register + call _directSetupEdge ; attempt to setup new edge + add esp,06h ; readjust the stack + mov edx,eax ; move return code to edx register +ENDM +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + multiply ax,bmData@@mSrcWidth ; multiply (row*width)-> eax + movzx edx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl +ENDM +setDstDataByte MACRO ; void setDstDataByte(cl=charByte) + mov ebx,bmData@@mlpDstIndexPtr ; get scanline pointer to ebx + mov byte ptr[ebx],cl ; move byte into frame bitmap + inc bmData@@mlpDstIndexPtr ; increment scanline pointer +ENDM +setDstIndexPtr MACRO + multiply [esi].PureMap@@myValue,bmData@@mDstPitch ; multiply row*pitch result to eax + mov [esi].PureMap@@mBitmapIndex,eax ; save offset to row in bitmap +ENDM +adjDstIndexPtr MACRO + mov edx,[esi].PureMap@@mBitmapIndex ; retrieve offset into bitmap + movzx ebx,[esi].PureMap@@mxDest ; move column into bx register + add edx,ebx ; now add column number back in + add edx,bmData@@mlpDstPtr ; offset index by start + mov bmData@@mlpDstIndexPtr,edx ; store value into DstIndexPtr +ENDM +increment MACRO ; assumes (PureEdge*) is in eax register, sets carry on error + LOCAL @@newEdge,@@adjTerm,@@error,@@success,@@return + dec [eax].PureEdge@@mRemainingScanLines ; decrement mRemainingScanLines + jz @@newEdge ; if no more scan lines, try to setup new edge + mov ebx,[eax].PureEdge@@mxSourceStep ; get mxSourceStep to ebx register + add ebx,[eax].PureEdge@@mxSource ; add in mxSource + mov [eax].PureEdge@@mxSource,ebx ; replace mxSource with new value + mov ebx,[eax].PureEdge@@mySourceStep ; get mySourceStep into ebx register + add ebx,[eax].PureEdge@@mySource ; add in mySource + mov [eax].PureEdge@@mySource,ebx ; replace mySource with new value + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation into ebx register + add bx,[eax].PureEdge@@mxStep ; add in mxStep + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; get mxErrorTerm to bx register + add bx,[eax].PureEdge@@mxAdjustUp ; add in mxAdjustUp + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + cmp bx,00h ; compare mxErrorTerm to zero + jle @@success ; mxErrorTerm is less equal zero +@@adjTerm: ; adjTerm sync address + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation to bx register + add bx,[eax].PureEdge@@mxDirection ; add in mxDirection + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; move mxErrorTerm into bx register + sub bx,[eax].PureEdge@@mxAdjustDown ; add in mxAdjustDown + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + jmp @@success ; we're done here +@@newEdge: ; newEdge sync address + newEdge ; attempt to create new edge + cmp edx,0001h ; did prior call fail ? + jne @@success ; no, we're done here +@@error: ; error sync address + stc ; error sets carry + jmp @@return ; jump to return +@@success: ; ok sync address + clc ; success clears carry +@@return: ; return sync address +ENDM +scanOutputLine MACRO ; void scanOutputLine(ecx=(PureEdge*)) + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +scanOutputLineMask MACRO ; void scanOutputLineMask(ecx=(PureEdge*)) - uses mask settings + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + cmp cl,bmData@@mMaskValue ; are we attempting to output a byte in our mask + je @@skipImageBit ; if so then do not set the byte + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +_directMapTexture proc near ; void mapTexture(PureMap *lpTextureMap) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + pushad ; save all general purpose registers, required. + mov esi,dword ptr[ebp+8] ; move (PureMap*) to esi register + mov edx,[esi].PureMap@@mlpLeftEdge ; move PureMap->mlpLeftEdge to edx + mov bx,[edx].PureEdge@@mMaxVertex ; move left edge mMaxVertex to bx register + getPoint [edx].PureEdge@@mlpDstList,bx ; get point + mov [esi].PureMap@@myValue,bx ; myValue=mLeftEdge[mLeft.maxVertex()].y() +@@forever: ; (ie) while(TRUE) + mov ax,[esi].PureMap@@myValue ; move myValue to ax register + cmp ax,bmData@@mDstHeight ; is myValue greater than frame buffer height + jge @@return ; if so then we're done mapping the texture + cmp ax,00h ; is myValue within frame buffer at all + jl @@skipOutputLine ; if not then skip this output line + cmp bmData@@mUseMask,00h ; are we using mask settings + jne @@scanMask ; if so then scan the output line, excluding masked bits + scanOutputLine ; otherwise just scan the output line + jmp @@skipOutputLine ; jump over the mask code +@@scanMask: ; scanMask sync address + scanOutputLineMask ; scan the output line, apply mask where appropriate +@@skipOutputLine: ; skipOutputLine sync address + mov eax,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*) left edge to eax + increment ; increment along left edge + jc @@return ; if carry set, edge failed to increment, we're done + mov eax,[esi].PureMap@@mlpRightEdge ; move (PureEdge*) right edge to eax + increment ; increment along right edge + jc @@return ; if carry set, edge failed to increment, we're done + inc [esi].PureMap@@myValue ; increment y position + jmp @@forever ; loop until all edges are completed +@@return: ; return sync address + popad ; restore all general purpose registers + pop ebp ; restore old stack frame + retn ; return near to caller +_directMapTexture endp +_directInitEdge proc near ; void initEdge(long edgeType,PureEdge *lpEdge); + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push ebx ; save ebx register + mov ecx,dword ptr[ebp+12] ; move edge ptr to ecx register + call _directGetMinMaxInfo ; find minimum and maximum vertices + cmp eax,0000h ; make sure previous call returned success + jne @@return ; if not then return + push dword ptr[ebp+8] ; push edge type (-1:leftEdge,1:rightEdge) + push [ecx].PureEdge@@mStartVertex ; push startVertex + call _directSetupEdge ; now setup the edge + add esp,06h ; readjust the stack +@@return: ; return label + pop ebx ; restore ebx register + pop ebp ; restore old stack frame + retn ; return to caller +_directInitEdge endp +_directSetupEdge proc near ; long setupEge(long edgeType,int startVertex); +LOCAL nextVertex:WORD,startVertex:WORD,xDestWidth:WORD,yDestHeight:DWORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + mov bx,word ptr[ebp+10] ; move edge type to bx register + mov [ecx].PureEdge@@mEdgeDirection,bx ; store edge direction in variable + mov bx,word ptr[ebp+8] ; move startVertex to bx register + mov [ecx].PureEdge@@mStartVertex,bx ; move startVertex into mStartVertex + mov startVertex,bx ; move startVertex into startVertex +@@forever: ; forever loop label + mov bx,startVertex ; move startVertex to bx register + cmp bx,[ecx].PureEdge@@mMinVertex ; is startVertex same as mMinVertex ? + je @@error ; if so then we're all done here + add bx,[ecx].PureEdge@@mEdgeDirection ; add edge direction to startVertex + mov nextVertex,bx ; move result to nextVertex + mov bx,[ecx].PureEdge@@mNumVertexes ; move number of vertexes to bx register + cmp nextVertex,bx ; compare nextVertex to number of vertexes + jge @@zervert ; next vertex is greater eq number of vertexes + cmp nextVertex,00h ; compare nextVertex to zero + jl @@adjvert ; nextVertex is less than zero + jmp @@bypass ; jump over next conditonal +@@zervert: ; handle nextVertex>=number of vertexes + mov nextVertex,00h ; set nextVertex to zero + jmp @@bypass ; jump over next conditional +@@adjvert: ; handle nextVertex<0 + dec bx ; decrement value count in bx register + mov nextVertex,bx ; set nextVertex to (numVertex-1) +@@bypass: ; bypass sync address + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get mlpDstList[nextVertex] + push bx ; dstList[nextVertex].y() in bx, save it. + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + pop ax ; restore first x point to ax + sub ax,bx ; now subtract second x point + mov [ecx].PureEdge@@mRemainingScanLines,ax ; result is mRemainingScanLines + cmp ax,00h ; check scanlines==0 + je @@loopNext ; if it's zero, continue + mov yDestHeight,eax ; set yDestHeight + push nextVertex ; save nextVertex value + pop [ecx].PureEdge@@mCurrentEdgeEnd ; restore it to mCurrentEdgeEnd + getPoint [ecx].PureEdge@@mlpSrcList,startVertex ; get mlpSrcList[startVertex] + multiply ax,bmData@@mPrecision ; multiply mxSource by bmData@@mPrecision + mov [ecx].PureEdge@@mxSource,eax ; move srcList[startVertex].x() to mxSource + multiply bx,bmData@@mPrecision ; multiply mySource by bmData@@mPrecision + mov [ecx].PureEdge@@mySource,eax ; move srcList[startVertex].y() to mySource + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get mlpSrcList[nextVertex] + multiply ax,bmData@@mPrecision ; ax by bmData@@mPrecision + mov ebx,[ecx].PureEdge@@mxSource ; mxSource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].x-mxSource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mxSourceStep + mov [ecx].PureEdge@@mxSourceStep,eax ; move eax register into mxSourceStep + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get source point + mov eax,ebx ; move point.y into eax register + multiply ax,bmData@@mPrecision ; multiply by precision + mov ebx,[ecx].PureEdge@@mySource ; mySource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].y-mySource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mySourceStep + mov [ecx].PureEdge@@mySourceStep,eax ; move eax register into mySourceStep + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + mov [ecx].PureEdge@@mxDestLocation,ax ; mxDestLocation=mDstList[startVertex].x() + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get dstList[nextVertex] + sub ax,[ecx].PureEdge@@mxDestLocation ; get the width of the segment + mov xDestWidth,ax ; move the width into xDestWidth + cmp xDestWidth,00h ; is the direction negative (ie) left + jl @@negWidth ; yes, handle negative direction + mov [ecx].PureEdge@@mxDirection,01h ; set right direction indicator + mov [ecx].PureEdge@@mxErrorTerm,00h ; set mxErrorTerm to zero + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth.mRemainingScanLines + mov [ecx].PureEdge@@mxStep,ax ; move result into mxStep + jmp @@syncOne ; jump over following handler +@@negWidth: ; handle negative direction + mov [ecx].PureEdge@@mxDirection,-1 ; set left direction indicator + neg xDestWidth ; negate the width (ie) make it positive + mov ax,01h ; move one into ax register + sub ax,[ecx].PureEdge@@mRemainingScanLines ; subtract remaining scan lines from 1 + mov [ecx].PureEdge@@mxErrorTerm,ax ; move result to mxErrorTerm + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth/mRemainingScanLines + neg eax ; negate the result + mov [ecx].PureEdge@@mxStep,ax ; move result back into mxStep +@@syncOne: ; synchronization address + mov [ecx].PureEdge@@mxAdjustUp,dx ; move remainder into mxAdjustUp + push [ecx].PureEdge@@mRemainingScanLines ; save mRemainingScanLines + pop [ecx].PureEdge@@mxAdjustDown ; restore mRemainingScanLines into mxAdjustDown + jmp @@ok ; jump over forever loop +@@loopNext: ; forever loop address + push nextVertex ; save nextVertex on stack + pop [ecx].PureEdge@@mStartVertex ; restore into mStartVertex + push nextVertex ; save nextVertex on stack + pop startVertex ; restore it to local copy of startVertex + jmp @@forever ; continue with loop +@@error: ; error handler + mov eax,0001h ; set ax register to 01h to indicate failure + jmp @@return ; jump over to return label +@@ok: ; success handler + xor eax,eax ; clear out eax register to handle success +@@return: ; return label + add esp,LocalLength ; remove local variables from stack + pop ebp ; restore old stack frame + retn ; return near to caller +_directSetupEdge endp +_directGetMinMaxInfo proc near ; long getMinMaxInfo(void) +LOCAL yMin:WORD,yMax:WORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + push ecx ; save callers ecx register + mov edx,ecx ; move ecx into edx, edx has ptr to PureEdge + cmp [edx].PureEdge@@mNumVertexes,MINVERTEX ; make sure have at least 3 vertexes + jl @@error ; handle error condition + mov yMin,MINVALUE ; start yMin with some low value + mov yMax,MAXVALUE ; start yMax with some high value + xor ecx,ecx ; start at index zero + mov eax,[edx].PureEdge@@mlpDstList ; move address of (Point*) to ebx register +@@iterator: ; loop top + mov bx,[eax].Point@@y ; move point::y to bx register + cmp bx,yMin ; compare with current yMin value + jg @@greater ; point::y greater than current yMin +@@nexttest: ; if I handle the greater condition, still need to do less + cmp bx,yMax ; compare with current yMax value + jl @@less ; point::y less than current yMax + jmp @@looptest ; nuthin, continue with test +@@greater: ; handle greater condition + mov yMin,bx ; set yMin to bx register + mov [edx].PureEdge@@mMinVertex,cx ; move index number of vertex to mMinVertex + jmp @@nexttest ; go perform next test +@@less: ; handle less condition + mov yMax,bx ; set yMax to bx register + mov [edx].PureEdge@@mMaxVertex,cx ; update mMaxVertex with current index +@@looptest: ; falls through to loop + add eax,04h ; add 4 bytes to eax to address next (Point*) + inc cx ; increment cx register + cmp cx,[edx].PureEdge@@mNumVertexes ; have we reeached the number of vertexes yet? + jl @@iterator ; still more vertexes + push [edx].PureEdge@@mMaxVertex ; save mMaxVertex + pop [edx].PureEdge@@mStartVertex ; restore it to mStartVertex + jmp @@ok ; error return sync address +@@error: ; setup for error return code + mov eax,0001h ; move 01h into ax to indicate error + jmp @@return ; jump to return label +@@ok: ; setup for success return code + xor eax,eax ; clear out eax register +@@return: ; return label + pop ecx ; restore callers ecx register + add esp,LocalLength ; pop local variables off stack + pop ebp ; restore old stack frame + retn ; return near to caller +_directGetMinMaxInfo endp +_directSetSrcBitmapInfo proc near ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mSrcWidth,ax ; move width into bmData@@mSrcWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mSrcHeight,bx ; move height into bx register + multiply ax,bx ; multiply (width*height) + mov bmData@@mSrcExtent,eax ; (width*height) to mSrcExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpSrcPtr ; restore in mlpSrcPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_directSetSrcBitmapInfo endp +_directSetDstBitmapInfo proc near ; void setDstBitmapInfo(WORD width,WORD height,WORD pitch,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+10h] ; move pitch into ax register + mov bmData@@mDstPitch,ax ; move pitch into mDstPitch + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mDstWidth,ax ; move width into mDstWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mDstHeight,bx ; move height into mDstHeight + multiply ax,bx ; multiply (width*height) + mov bmData@@mDstExtent,eax ; move (width*height) into mDstExtent + push dword ptr[ebp+14h] ; save lpBitmapImage on stack + pop bmData@@mlpDstPtr ; restore in mlpDstPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_directSetDstBitmapInfo endp +_directSetMaskInfo proc near ; void setMaskInfo(WORD useMask,BYTE maskValue) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + mov eax,[ebp+08h] ; move useMask into eax register + mov bmData@@mUseMask,al ; move useMask into bmData@@mUseMask + cmp eax,0000h ; check to see if we are using the mask + je @@maskEndProc ; if we're not using mask, don't set mask value + mov eax,[ebp+0Ch] ; move mask value into eax register + mov bmData@@mMaskValue,al ; move mask value into bmData@@mMaskValue +@@maskEndProc: ; end procedure sync address + pop ebp ; restore previous stack frame + retn ; return near to caller +_directSetMaskInfo endp +public _directMapTexture +public _directInitEdge +public _directSetSrcBitmapInfo +public _directSetDstBitmapInfo +public _directSetMaskInfo +end + diff --git a/ddraw/TMAP32.INC b/ddraw/TMAP32.INC new file mode 100644 index 0000000..18df622 --- /dev/null +++ b/ddraw/TMAP32.INC @@ -0,0 +1,45 @@ +;******************************************************************************************************** +; FILE:TMAP32.INC +; FUNCTION: INCLUDE FILE FOR ASM TEXTURE MAPPING (DIRECT DRAW VERSION) +; AUTHOR:SEAN M. KESSLER +;******************************************************************************************************** +PureEdge STRUC + PureEdge@@mEdgeDirection DW ? + PureEdge@@mRemainingScanLines DW ? + PureEdge@@mCurrentEdgeEnd DW ? + PureEdge@@mxSource DD ? + PureEdge@@mySource DD ? + PureEdge@@mxSourceStep DD ? + PureEdge@@mySourceStep DD ? + PureEdge@@mxDestLocation DW ? + PureEdge@@mxStep DW ? + PureEdge@@mxDirection DW ? + PureEdge@@mxErrorTerm DW ? + PureEdge@@mxAdjustUp DW ? + PureEdge@@mxAdjustDown DW ? + PureEdge@@mMaxVertex DW ? + PureEdge@@mMinVertex DW ? + PureEdge@@mStartVertex DW ? + PureEdge@@mNumVertexes DW ? + PureEdge@@mlpSrcList DD NEAR PTR ? + PureEdge@@mlpDstList DD NEAR PTR ? +PureEdge ENDS +PureMap STRUC + PureMap@@mBitmapIndex DD ? + PureMap@@mxSource DD ? + PureMap@@mySource DD ? + PureMap@@mDestWidth DD ? + PureMap@@mxSourceStep DD ? + PureMap@@mySourceStep DD ? + PureMap@@mxDest DW ? + PureMap@@mxDestMax DW ? + PureMap@@myValue DW ? + PureMap@@mlpLeftEdge DD NEAR PTR ? + PureMap@@mlpRightEdge DD NEAR PTR ? +PureMap ENDS +MathCache STRUC + MathCache@@mCacheOne DD ? + MathCache@@mCacheTwo DD ? + MathCache@@mCacheVal DD ? +MathCache ENDS + diff --git a/ddraw/TRIEDGE.HPP b/ddraw/TRIEDGE.HPP new file mode 100644 index 0000000..4e98514 --- /dev/null +++ b/ddraw/TRIEDGE.HPP @@ -0,0 +1,462 @@ +#ifndef _DDRAW_TRIEDGE_HPP_ +#define _DDRAW_TRIEDGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class DirectTriEdge +{ +public: + DirectTriEdge(void); + DirectTriEdge(int x0,int y0,int x1,int y1,int x2,int y2,int u0,int v0,int u1,int v1,int u2,int v2); + DirectTriEdge(const DirectTriEdge &someDirectTriEdge); + virtual ~DirectTriEdge(); + DirectTriEdge &operator=(const DirectTriEdge &someDirectTriEdge); + BOOL operator==(const DirectTriEdge &someDirectTriEdge)const; + int dxLeft(void)const; + void dxLeft(int dxLeft); + int dxRight(void)const; + void dxRight(int dxRight); + int duLeft(void)const; + void duLeft(int duLeft); + int duRight(void)const; + void duRight(int duRight); + int dvLeft(void)const; + void dvLeft(int dvLeft); + int dvRight(void)const; + void dvRight(int dvRight); + int xLeft(void)const; + void xLeft(int xLeft); + int xRight(void)const; + void xRight(int xRight); + int vLeft(void)const; + void vLeft(int vLeft); + int vRight(void)const; + void vRight(int vRight); + int uLeft(void)const; + void uLeft(int uLeft); + int uRight(void)const; + void uRight(int uRight); + int x0(void)const; + void x0(int x0); + int y0(void)const; + void y0(int y0); + int x1(void)const; + void x1(int x1); + int y1(void)const; + void y1(int y1); + int x2(void)const; + void x2(int x2); + int y2(void)const; + void y2(int y2); + int u0(void)const; + void u0(int u0); + int v0(void)const; + void v0(int v0); + int u1(void)const; + void u1(int u1); + int v1(void)const; + void v1(int v1); + int u2(void)const; + void u2(int u2); + int v2(void)const; + void v2(int v2); +private: + int mDXLeft; + int mDXRight; + int mDULeft; + int mDURight; + int mDVLeft; + int mDVRight; + int mxLeft; + int mxRight; + int mvLeft; + int mvRight; + int muLeft; + int muRight; + int mx0; + int my0; + int mx1; + int my1; + int mx2; + int my2; + int mu0; + int mv0; + int mu1; + int mv1; + int mu2; + int mv2; +}; + +inline +DirectTriEdge::DirectTriEdge(void) +: mx0(0), my0(0), mx1(0), my1(0), mx2(0), my2(0), mu0(0), mv0(0), mu1(0), mv1(0), mu2(0), mv2(0), + mxLeft(0), mxRight(0), mvLeft(0), mvRight(0), muLeft(0), muRight(0), mDXLeft(0), mDXRight(0), + mDULeft(0), mDURight(0), mDVLeft(0), mDVRight(0) +{ +} + +inline +DirectTriEdge::DirectTriEdge(int x0,int y0,int x1,int y1,int x2,int y2,int u0,int v0,int u1,int v1,int u2,int v2) +: mx0(x0), my0(y0), mx1(x1), my1(y1), mx2(x2), my2(y2), mu0(u0), mv0(v0), mu1(u1), mv1(v1), mu2(u2), mv2(v2) +{ +} + +inline +DirectTriEdge::DirectTriEdge(const DirectTriEdge &someDirectTriEdge) +{ + *this=someDirectTriEdge; +} + +inline +DirectTriEdge::~DirectTriEdge() +{ +} + +inline +DirectTriEdge &DirectTriEdge::operator=(const DirectTriEdge &someDirectTriEdge) +{ + x0(someDirectTriEdge.x0()); + y0(someDirectTriEdge.y0()); + x1(someDirectTriEdge.x1()); + y1(someDirectTriEdge.y1()); + x2(someDirectTriEdge.x2()); + y2(someDirectTriEdge.y2()); + u0(someDirectTriEdge.u0()); + v0(someDirectTriEdge.v0()); + u1(someDirectTriEdge.u1()); + v1(someDirectTriEdge.v1()); + u2(someDirectTriEdge.u2()); + v2(someDirectTriEdge.v2()); + xLeft(someDirectTriEdge.xLeft()); + xRight(someDirectTriEdge.xRight()); + uLeft(someDirectTriEdge.uLeft()); + uRight(someDirectTriEdge.uRight()); + vLeft(someDirectTriEdge.vLeft()); + vRight(someDirectTriEdge.vRight()); + dxLeft(someDirectTriEdge.dxLeft()); + dxRight(someDirectTriEdge.dxRight()); + duLeft(someDirectTriEdge.duLeft()); + duRight(someDirectTriEdge.duRight()); + dvLeft(someDirectTriEdge.dvLeft()); + dvRight(someDirectTriEdge.dvRight()); + return *this; +} + +inline +BOOL DirectTriEdge::operator==(const DirectTriEdge &someDirectTriEdge)const +{ + return (x0()==someDirectTriEdge.x0()&& + y0()==someDirectTriEdge.y0()&& + x1()==someDirectTriEdge.x1()&& + y1()==someDirectTriEdge.y1()&& + x2()==someDirectTriEdge.x2()&& + y2()==someDirectTriEdge.y2()&& + u0()==someDirectTriEdge.u0()&& + v0()==someDirectTriEdge.v0()&& + u1()==someDirectTriEdge.u1()&& + v1()==someDirectTriEdge.v1()&& + u2()==someDirectTriEdge.u2()&& + v2()==someDirectTriEdge.v2()&& + xLeft()==someDirectTriEdge.xLeft()&& + xRight()==someDirectTriEdge.xRight()&& + uLeft()==someDirectTriEdge.uLeft()&& + uRight()==someDirectTriEdge.uRight()&& + vLeft()==someDirectTriEdge.vLeft()&& + vRight()==someDirectTriEdge.vRight()&& + dxLeft()==someDirectTriEdge.dxLeft()&& + dxRight()==someDirectTriEdge.dxRight()&& + duLeft()==someDirectTriEdge.duLeft()&& + duRight()==someDirectTriEdge.duRight()&& + dvLeft()==someDirectTriEdge.dvLeft()&& + dvRight()==someDirectTriEdge.dvRight()); +} + +inline +int DirectTriEdge::xLeft(void)const +{ + return mxLeft; +} + +inline +void DirectTriEdge::xLeft(int xLeft) +{ + mxLeft=xLeft; +} + +inline +int DirectTriEdge::xRight(void)const +{ + return mxRight; +} + +inline +void DirectTriEdge::xRight(int xRight) +{ + mxRight=xRight; +} + +inline +int DirectTriEdge::vLeft(void)const +{ + return mvLeft; +} + +inline +void DirectTriEdge::vLeft(int vLeft) +{ + mvLeft=vLeft; +} + +inline +int DirectTriEdge::vRight(void)const +{ + return mvRight; +} + +inline +void DirectTriEdge::vRight(int vRight) +{ + mvRight=vRight; +} + +inline +int DirectTriEdge::uLeft(void)const +{ + return muLeft; +} + +inline +void DirectTriEdge::uLeft(int uLeft) +{ + muLeft=uLeft; +} + +inline +int DirectTriEdge::uRight(void)const +{ + return muRight; +} + +inline +void DirectTriEdge::uRight(int uRight) +{ + muRight=uRight; +} + +inline +int DirectTriEdge::x0(void)const +{ + return mx0; +} + +inline +void DirectTriEdge::x0(int x0) +{ + mx0=x0; +} + +inline +int DirectTriEdge::y0(void)const +{ + return my0; +} + +inline +void DirectTriEdge::y0(int y0) +{ + my0=y0; +} + +inline +int DirectTriEdge::x1(void)const +{ + return mx1; +} + +inline +void DirectTriEdge::x1(int x1) +{ + mx1=x1; +} + +inline +int DirectTriEdge::y1(void)const +{ + return my1; +} + +inline +void DirectTriEdge::y1(int y1) +{ + my1=y1; +} + +inline +int DirectTriEdge::x2(void)const +{ + return mx2; +} + +inline +void DirectTriEdge::x2(int x2) +{ + mx2=x2; +} + +inline +int DirectTriEdge::y2(void)const +{ + return my2; +} + +inline +void DirectTriEdge::y2(int y2) +{ + my2=y2; +} + +inline +int DirectTriEdge::u0(void)const +{ + return mu0; +} + +inline +void DirectTriEdge::u0(int u0) +{ + mu0=u0; +} + +inline +int DirectTriEdge::v0(void)const +{ + return mv0; +} + +inline +void DirectTriEdge::v0(int v0) +{ + mv0=v0; +} + +inline +int DirectTriEdge::u1(void)const +{ + return mu1; +} + +inline +void DirectTriEdge::u1(int u1) +{ + mu1=u1; +} + +inline +int DirectTriEdge::v1(void)const +{ + return mv1; +} + +inline +void DirectTriEdge::v1(int v1) +{ + mv1=v1; +} + +inline +int DirectTriEdge::u2(void)const +{ + return mu2; +} + +inline +void DirectTriEdge::u2(int u2) +{ + mu2=u2; +} + +inline +int DirectTriEdge::v2(void)const +{ + return mv2; +} + +inline +void DirectTriEdge::v2(int v2) +{ + mv2=v2; +} + +inline +int DirectTriEdge::dxLeft(void)const +{ + return mDXLeft; +} + +inline +void DirectTriEdge::dxLeft(int dxLeft) +{ + mDXLeft=dxLeft; +} + +inline +int DirectTriEdge::dxRight(void)const +{ + return mDXRight; +} + +inline +void DirectTriEdge::dxRight(int dxRight) +{ + mDXRight=dxRight; +} + +inline +int DirectTriEdge::duLeft(void)const +{ + return mDULeft; +} + +inline +void DirectTriEdge::duLeft(int duLeft) +{ + mDULeft=duLeft; +} + +inline +int DirectTriEdge::duRight(void)const +{ + return mDURight; +} + +inline +void DirectTriEdge::duRight(int duRight) +{ + mDURight=duRight; +} + +inline +int DirectTriEdge::dvLeft(void)const +{ + return mDVLeft; +} + +inline +void DirectTriEdge::dvLeft(int dvLeft) +{ + mDVLeft=dvLeft; +} + +inline +int DirectTriEdge::dvRight(void)const +{ + return mDVRight; +} + +inline +void DirectTriEdge::dvRight(int dvRight) +{ + mDVRight=dvRight; +} +#endif diff --git a/ddraw/TRIMAP32.SAF b/ddraw/TRIMAP32.SAF new file mode 100644 index 0000000..f8b2067 --- /dev/null +++ b/ddraw/TRIMAP32.SAF @@ -0,0 +1,332 @@ +;******************************************************************************************************** +; MODULE: TRIMAP32.ASM DATE: FEBRUARY 11, 1999 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT TARGET +; FUNCTION : TEXTURE MAPPING TRIANGLES +;******************************************************************************************************** +SMART +.386 +.MODEL FLAT +.DATA +bmData@@mSrcWidth DD ? +bmData@@mSrcHeight DD ? +bmData@@mSrcExtent DD ? +bmData@@mlpSrcPtr DD ? +bmData@@mDstWidth DD ? +bmData@@mDstPitch DD ? +bmData@@mDstHeight DD ? +bmData@@mDstExtent DD ? +bmData@@mlpDstPtr DD ? +bmData@@mlpDstIndexPtr DD ? +.LALL +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\DDRAW\TRIMAP32.INC +INCLUDE ..\DDRAW\UTIL32.INC +.CODE + +roundEAX MACRO +LOCAL @@return + mov edx,eax ; copy eax to edx + and edx,7FFh ; get remainder to edx register + shr eax,0Bh ; get whole number to eax register + cmp edx,400h ; if remainder>1024 then increment eax + jle @@return ; ... otherwise return + inc eax ; increment value in eax +@@return: +ENDM + +scanline MACRO + mov ecx,[esi].DirectTriEdge@@mxRight ; move mxRight into ecx + sub ecx,[esi].DirectTriEdge@@mxLeft ; subtract out mxLeft, this is dx + cmp ecx,0000h ; compare dx to zero + je @@scanlineLoopEnd ; if dx is zero then don't scan the line + mov eax,[esi].DirectTriEdge@@muRight ; move muRight into eax + sub eax,[esi].DirectTriEdge@@muLeft ; subtract out muLeft + shl eax,0Bh ; multiply this by 2048 + divide eax,ecx ; divide by dx, this is du + mov du,eax ; store du into local variable + mov eax,[esi].DirectTriEdge@@mvRight ; move mvRight into eax + sub eax,[esi].DirectTriEdge@@mvLeft ; subtract out mvLeft + shl eax,0Bh ; multiply this by 2048 + divide eax,ecx ; divide by dx, this is dv + mov dv,eax ; store dv into local variable + mov eax,[esi].DirectTriEdge@@muLeft ; move muLeft into eax + mov ui,eax ; muLeft is initial value for ui + mov eax,[esi].DirectTriEdge@@mvLeft ; move mvLeft into eax + mov vi,eax ; mvLeft is initial value for vi + mov eax,[esi].DirectTriEdge@@mxLeft ; move mxLeft into eax + mov x,eax ; mxLeft is initial value for x +@@scanlineLoop: ; scanline loop sync address + mov eax,[esi].DirectTriEdge@@mxRight ; move mxRight into eax + cmp x,eax ; compare x to mxRight + jg @@scanlineLoopEnd ; if x>mxRight then we're done with the scanline + getSrcDataByte ; get source byte at [ui][vi] to cl register + setDstDataByte ; set destination byte at [x][y],cl + incrementScan ; advance along the scanline + jmp @@scanlineLoop ; continue execution +@@scanlineLoopEnd: ; end scanline sync address +ENDM + +incrementScan MACRO ; advance along the scanline + mov eax,ui ; move ui to eax + shl eax,0Bh ; multiply by 2048 + add eax,du ; add in du + shr eax,0Bh ; divide by 2048 + mov ui,eax ; update ui + mov eax,vi ; move vi to eax + shl eax,0Bh ; multiply by 2048 + add eax,dv ; add in dv + shr eax,0Bh ; divide by 2048 + mov vi,eax ; update vi + inc x ; increment x +ENDM + +increment MACRO + mov eax,[esi].DirectTriEdge@@mxLeft ; move mxLeft into eax + shl eax,0Bh ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDXLeft ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mxLeft,eax ; this is new mxLeft + mov eax,[esi].DirectTriEdge@@mxRight ; move mxRight into eax + shl eax,0Bh ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDXRight ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mxRight,eax ; this is new mxRight + mov eax,[esi].DirectTriEdge@@muLeft ; move muLeft into eax + shl eax,0Bh ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDULeft ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@muLeft,eax ; this is new muLeft + mov eax,[esi].DirectTriEdge@@muRight ; move muRight into eax + shl eax,0Bh ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDURight ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@muRight,eax ; this is new muRight + mov eax,[esi].DirectTriEdge@@mvLeft ; move mvLeft into eax + shl eax,0Bh ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDVLeft ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mvLeft,eax ; this is new mvLeft + mov eax,[esi].DirectTriEdge@@mvRight ; move mvRight into eax + shl eax,0Bh ; multiply by 2048 + add eax,[esi].DirectTriEdge@@mDVRight ; add in the delta + roundEAX ; adjust and round the value + mov [esi].DirectTriEdge@@mvRight,eax ; this is new mvRight + inc y ; increment y +ENDM + +initialize MACRO + mov eax,[esi].DirectTriEdge@@my2 ; move my2 into eax + sub eax,[esi].DirectTriEdge@@my0 ; eax has (y2-y0) + mov [esi].DirectTriEdge@@mDY,eax ; move (y2-y0) into mDY variable + mov eax,[esi].DirectTriEdge@@mx2 ; move x2 into eax + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x2-x0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (x2-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is mDXLeft + mov eax,[esi].DirectTriEdge@@mx1 ; move x1 into eax + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x1-x0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (x1-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXRight,eax ; this is mDXRight + mov eax,[esi].DirectTriEdge@@mu2 ; move u2 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u2-u0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (u2-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDULeft,eax ; this is mDULeft + mov eax,[esi].DirectTriEdge@@mu1 ; move u1 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u1-u0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (u1-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDURight,eax ; this is mDURight + mov eax,[esi].DirectTriEdge@@mv2 ; move v2 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v2-v0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (v2-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVLeft,eax ; this is mDVLeft + mov eax,[esi].DirectTriEdge@@mv1 ; move v1 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v1-v0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (v1-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVRight,eax ; this is mDVRight + mov eax,[esi].DirectTriEdge@@mx0 ; move x0 into eax + mov [esi].DirectTriEdge@@mxLeft,eax ; mxLeft=x0 + mov [esi].DirectTriEdge@@mxRight,eax ; mxRight=x0 + mov eax,[esi].DirectTriEdge@@mu0 ; move u0 into eax + mov [esi].DirectTriEdge@@muLeft,eax ; muLeft=u0 + mov [esi].DirectTriEdge@@muRight,eax ; muRight=u0 + mov eax,[esi].DirectTriEdge@@mv0 ; move v0 into eax + mov [esi].DirectTriEdge@@mvLeft,eax ; mvLeft=v0 + mov [esi].DirectTriEdge@@mvRight,eax ; mvRight=v0 +ENDM + +if 0 +initialize MACRO + mov eax,[esi].DirectTriEdge@@my2 ; move my2 into eax + sub eax,[esi].DirectTriEdge@@my0 ; eax has (y2-y0) + mov [esi].DirectTriEdge@@mDY,eax ; move (y2-y0) into mDY variable + mov eax,[esi].DirectTriEdge@@mx2 ; move x2 into eax + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x2-x0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (x2-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXLeft,eax ; this is mDXLeft + mov eax,[esi].DirectTriEdge@@mx1 ; move x1 into eax + sub eax,[esi].DirectTriEdge@@mx0 ; eax has (x1-x0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (x1-x0)/(y2-y0) + mov [esi].DirectTriEdge@@mDXRight,eax ; this is mDXRight + mov eax,[esi].DirectTriEdge@@mu2 ; move u2 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u2-u0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (u2-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDULeft,eax ; this is mDULeft + mov eax,[esi].DirectTriEdge@@mu1 ; move u1 into eax + sub eax,[esi].DirectTriEdge@@mu0 ; eax has (u1-u0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (u1-u0)/(y2-y0) + mov [esi].DirectTriEdge@@mDURight,eax ; this is mDURight + mov eax,[esi].DirectTriEdge@@mv2 ; move v2 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v2-v0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (v2-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVLeft,eax ; this is mDVLeft + mov eax,[esi].DirectTriEdge@@mv1 ; move v1 into eax + sub eax,[esi].DirectTriEdge@@mv0 ; eax has (v1-v0) + shl eax,0Bh ; multiply result by 2048 for precision + divide eax,[esi].DirectTriEdge@@mDY ; eax has (v1-v0)/(y2-y0) + mov [esi].DirectTriEdge@@mDVRight,eax ; this is mDVRight + mov eax,[esi].DirectTriEdge@@mx0 ; move x0 into eax + mov [esi].DirectTriEdge@@mxLeft,eax ; mxLeft=x0 + mov [esi].DirectTriEdge@@mxRight,eax ; mxRight=x0 + mov eax,[esi].DirectTriEdge@@mu0 ; move u0 into eax + mov [esi].DirectTriEdge@@muLeft,eax ; muLeft=u0 + mov [esi].DirectTriEdge@@muRight,eax ; muRight=u0 + mov eax,[esi].DirectTriEdge@@mv0 ; move v0 into eax + mov [esi].DirectTriEdge@@mvLeft,eax ; mvLeft=v0 + mov [esi].DirectTriEdge@@mvRight,eax ; mvRight=v0 +ENDM +endif + + +getSrcDataByte MACRO ; BYTE getSrcDataByte (ui,vi) +LOCAL @@continue + mov ebx,vi ; move column into ebx + cmp ebx,bmData@@mSrcWidth ; compare column to width + jge @@continue ; if column greater than width, return + mov eax,ui ; move row into eax + cmp eax,bmData@@mSrcHeight ; compare row to height + jge @@continue ; if row greater than height, return + imul eax,bmData@@mSrcWidth ; multiply (row*width)->eax + add eax,bmData@@mSrcWidth ; add in the width + mov edx,bmData@@mSrcExtent ; move bitmap extent to edx + sub edx,eax ; subtract (row*width)+width from extent + add edx,vi ; now add in the column + mov ebx,bmData@@mlpSrcPtr ; move bitmap pointer into ebx + mov cl,byte ptr[ebx+edx] ; set the byte +@@continue: +ENDM +if 0 +setDstDataByte MACRO ; setDstDataByte x,y,cl + mov ebx,y ; move column into ebx + cmp ebx,bmData@@mDstWidth ; compare column to width + jge @@continue ; if column greater than width, return + mov eax,x ; move row into eax + cmp eax,bmData@@mDstHeight ; compare row to height + jge @@continue ; if row greater than height, return + imul eax,bmData@@mDstWidth ; multiply (row*width)->eax + add eax,bmData@@mDstWidth ; add in the width + mov edx,bmData@@mDstExtent ; move bitmap extent to edx + sub edx,eax ; subtract (row*width)+width from extent + add edx,y ; now add in the column + mov ebx,bmData@@mlpDstPtr ; move bitmap pointer into ebx + mov byte ptr[ebx+edx],cl ; set the byte +@@continue: +ENDM +endif + +setDstDataByte MACRO ; setDstDataByte x,y,cl + mov ebx,x ; move column into ebx + cmp ebx,bmData@@mDstWidth ; compare column to width + jge @@continue ; if column greater than width, return + mov eax,y ; move row into eax + cmp eax,bmData@@mDstHeight ; compare row to height + jge @@continue ; if row greater than height, return + imul eax,bmData@@mDstWidth ; multiply (row*width)->eax + add eax,bmData@@mDstWidth ; add in the width + mov edx,bmData@@mDstExtent ; move bitmap extent to edx + sub edx,eax ; subtract (row*width)+width from extent + add edx,x ; now add in the column + mov ebx,bmData@@mlpDstPtr ; move bitmap pointer into ebx + mov byte ptr[ebx+edx],cl ; set the byte +@@continue: +ENDM + + + +_directTriSetSrcBitmapInfo proc near ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov eax,dword ptr[ebp+08h] ; move width into eax register + mov bmData@@mSrcWidth,eax ; move width into bmData@@mSrcWidth + mov ebx,dword ptr[ebp+0Ch] ; move height into ebx register + mov bmData@@mSrcHeight,ebx ; move height into ebx register + imul eax,ebx ; multiply width*height, result to eax + mov bmData@@mSrcExtent,eax ; (width*height) to mSrcExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpSrcPtr ; restore in mlpSrcPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_directTriSetSrcBitmapInfo endp +_directTriSetDstBitmapInfo proc near ; void setDstBitmapInfo(WORD width,WORD height,WORD pitch,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov eax,dword ptr[ebp+10h] ; move pitch into eax register + mov bmData@@mDstPitch,eax ; move pitch into mDstPitch + mov eax,dword ptr[ebp+08h] ; move width into eeax register + mov bmData@@mDstWidth,eax ; move width into mDstWidth + mov ebx,dword ptr[ebp+0Ch] ; move height into ebx register + mov bmData@@mDstHeight,ebx ; move height into mDstHeight + imul eax,ebx ; multiply width*height, result to eax + mov bmData@@mDstExtent,eax ; move (width*height) into mDstExtent + push dword ptr[ebp+14h] ; save lpBitmapImage on stack + pop bmData@@mlpDstPtr ; restore in mlpDstPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_directTriSetDstBitmapInfo endp + +_directTriMapTexture proc near ; void directTriMapTexture(DirectTriEdge *pEdge) +LOCAL y:DWORD,x:DWORD,du:DWORD,dv:DWORD,ui:DWORD,vi:DWORD=LocalLength ; local variables for proc + push ebp ; save prior stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; make room for local variables + pushad ; save all general purpose registers + mov esi,[ebp+08h] ; move pEdge to esi register + initialize ; initialize the edge + mov eax,[esi].DirectTriEdge@@my0 ; move y0 into eax + mov y,eax ; initialize y with y0 +@@verticalLoop: ; beginning of vertical loop + mov ecx,[esi].DirectTriEdge@@my1 ; move y1 into ecx + cmp y,ecx ; compare y to y1 + jg @@verticalLoopEnd ; if y>y1 then we're done + scanline ; perform scanline on the horizontal + increment ; increment along the vertical + jmp @@verticalLoop ; continue execution +@@verticalLoopEnd: ; end loop sync address + popad ; restore all general purpose registers + add esp,LocalLength ; remove local variables from frame + pop ebp ; restore prior stack frame + retn ; return near to caller +_directTriMapTexture endp + +public _directTriSetSrcBitmapInfo +public _directTriSetDstBitmapInfo +public _directTriMapTexture +END diff --git a/ddraw/UTIL32.INC b/ddraw/UTIL32.INC new file mode 100644 index 0000000..5e67894 --- /dev/null +++ b/ddraw/UTIL32.INC @@ -0,0 +1,16 @@ +;******************************************************************************************************** +; FILE:UTIL32.INC +; FUNCTION: INCLUDE FILE FOR MATH UTIL MACROS (DIRECT DRAW VERSION) +; AUTHOR:SEAN M. KESSLER +;******************************************************************************************************** +divide MACRO varOne,varTwo + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv varTwo ; divide eax/varTwo result to eax, remainder to edx +ENDM +multiply MACRO varOne,varTwo + movzx eax,varOne ; move varOne into eax register + movzx edx,varTwo ; move varTwo into ebx register + imul eax,edx ; perform multiply, result to eax +ENDM + diff --git a/ddraw/ddraw.001 b/ddraw/ddraw.001 new file mode 100644 index 0000000..41c7779 --- /dev/null +++ b/ddraw/ddraw.001 @@ -0,0 +1,239 @@ +# Microsoft Developer Studio Project File - Name="ddraw" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=ddraw - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "ddraw.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "ddraw.mak" CFG="ddraw - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ddraw - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "ddraw - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "ddraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ddraw.lib c:\parts\mssdk\lib\dxguid.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "ddraw - Win32 Release" +# Name "ddraw - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\devenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\draw.cpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.cpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msengine.lib +# End Source File +# Begin Source File + +SOURCE=.\palette.cpp +# End Source File +# Begin Source File + +SOURCE=.\texture.cpp +# End Source File +# Begin Source File + +SOURCE=.\Tmap32.asm + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\.\msvcobj +InputPath=.\Tmap32.asm +InputName=Tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\parts\tasm32\tasm32 /zi /c /ml /m3 $(InputName).asm\ + $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\bltfx.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ddraw.hpp +# End Source File +# Begin Source File + +SOURCE=.\devdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\devenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\device3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\draw.hpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.hpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\error.hpp +# End Source File +# Begin Source File + +SOURCE=.\mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\palette.hpp +# End Source File +# Begin Source File + +SOURCE=.\pixform.hpp +# End Source File +# Begin Source File + +SOURCE=.\rowinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfccaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfcdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\surface.hpp +# End Source File +# Begin Source File + +SOURCE=.\texture.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ddraw/ddraw.dsp b/ddraw/ddraw.dsp new file mode 100644 index 0000000..620c6e8 --- /dev/null +++ b/ddraw/ddraw.dsp @@ -0,0 +1,239 @@ +# Microsoft Developer Studio Project File - Name="ddraw" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=ddraw - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "ddraw.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "ddraw.mak" CFG="ddraw - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ddraw - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "ddraw - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "ddraw - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ddraw.lib c:\parts\mssdk\lib\dxguid.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "ddraw - Win32 Release" +# Name "ddraw - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\devenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\draw.cpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.cpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\palette.cpp +# End Source File +# Begin Source File + +SOURCE=.\texture.cpp +# End Source File +# Begin Source File + +SOURCE=.\Tmap32.asm + +!IF "$(CFG)" == "ddraw - Win32 Release" + +!ELSEIF "$(CFG)" == "ddraw - Win32 Debug" + +# Begin Custom Build +IntDir=.\msvcobj +InputPath=.\Tmap32.asm +InputName=Tmap32 + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + d:\parts\tasm32\tasm32 /zi /c /ml /m3 $(InputName).asm $(IntDir)\$(InputName).obj + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msengine.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\bltfx.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ddraw.hpp +# End Source File +# Begin Source File + +SOURCE=.\devdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\devenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\device3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\direct3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\draw.hpp +# End Source File +# Begin Source File + +SOURCE=.\drawsfc.hpp +# End Source File +# Begin Source File + +SOURCE=.\dspenum.hpp +# End Source File +# Begin Source File + +SOURCE=.\error.hpp +# End Source File +# Begin Source File + +SOURCE=.\mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\palette.hpp +# End Source File +# Begin Source File + +SOURCE=.\pixform.hpp +# End Source File +# Begin Source File + +SOURCE=.\rowinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfccaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\sfcdesc.hpp +# End Source File +# Begin Source File + +SOURCE=.\surface.hpp +# End Source File +# Begin Source File + +SOURCE=.\texture.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/dialog/DIALOG.BAK b/dialog/DIALOG.BAK new file mode 100644 index 0000000..30081b8 --- /dev/null +++ b/dialog/DIALOG.BAK @@ -0,0 +1,380 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=dialog - Win32 Debug +!MESSAGE No configuration specified. Defaulting to dialog - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "dialog - Win32 Release" && "$(CFG)" != "dialog - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Dialog.mak" CFG="dialog - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "dialog - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "dialog - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "dialog - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "dialog - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Dialog.lib" + +CLEAN : + -@erase "$(INTDIR)\Dlgtmpl.obj" + -@erase "$(INTDIR)\Dyndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(OUTDIR)\Dialog.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Dialog.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Dialog.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Dialog.lib" +LIB32_OBJS= \ + "$(INTDIR)\Dlgtmpl.obj" \ + "$(INTDIR)\Dyndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" + +"$(OUTDIR)\Dialog.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "dialog__" +# PROP BASE Intermediate_Dir "dialog__" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msdialog.lib" + +CLEAN : + -@erase "$(INTDIR)\Dlgtmpl.obj" + -@erase "$(INTDIR)\Dyndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "..\exe\msdialog.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)/" /c\ + +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Dialog.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdialog.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msdialog.lib" +LIB32_OBJS= \ + "$(INTDIR)\Dlgtmpl.obj" \ + "$(INTDIR)\Dyndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" + +"..\exe\msdialog.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "dialog - Win32 Release" +# Name "dialog - Win32 Debug" + +!IF "$(CFG)" == "dialog - Win32 Release" + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "dialog - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dyndlg.cpp + +!IF "$(CFG)" == "dialog - Win32 Release" + +DEP_CPP_DYNDL=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Dyndlg.obj" : $(SOURCE) $(DEP_CPP_DYNDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +DEP_CPP_DYNDL=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Dyndlg.obj" : $(SOURCE) $(DEP_CPP_DYNDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dlgtmpl.cpp + +!IF "$(CFG)" == "dialog - Win32 Release" + +DEP_CPP_DLGTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Dlgtmpl.obj" : $(SOURCE) $(DEP_CPP_DLGTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +DEP_CPP_DLGTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Dlgtmpl.obj" : $(SOURCE) $(DEP_CPP_DLGTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/dialog/DIALOG.DSW b/dialog/DIALOG.DSW new file mode 100644 index 0000000..b10fad4 --- /dev/null +++ b/dialog/DIALOG.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "dialog"=.\dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/dialog/DIALOG.PLG b/dialog/DIALOG.PLG new file mode 100644 index 0000000..a22c0cd --- /dev/null +++ b/dialog/DIALOG.PLG @@ -0,0 +1,27 @@ +--------------------Configuration: dialog - Win32 Debug-------------------- +Begining build with project "C:\work\DIALOG\dialog.dsp", at root. +Active configuration is Win32 (x86) Static Library (based on Win32 (x86) Static Library) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c " + "Browser Database Maker" with flags "/nologo /o".\msvcobj/dialog.bsc" " + "Library Manager" with flags "/nologo /out:"..\exe\msdialog.lib" " + "Custom Build" with flags "" + "" with flags "" + +Creating temp file "C:\WINDOWS\TEMP\RSPC1E1.TMP" with contents +Creating command line "cl.exe @C:\WINDOWS\TEMP\RSPC1E1.TMP" +Creating command line "link.exe -lib /nologo /out:"..\exe\msdialog.lib" .\msvcobj\Dlgtmpl.obj .\msvcobj\Dyndlg.obj .\msvcobj\Stdtmpl.obj" +Compiling... +Dlgtmpl.cpp +Dyndlg.cpp +Stdtmpl.cpp +Creating library... + + + +msdialog.lib - 0 error(s), 0 warning(s) diff --git a/dialog/DIALOG32.DSW b/dialog/DIALOG32.DSW new file mode 100644 index 0000000..faa7111 Binary files /dev/null and b/dialog/DIALOG32.DSW differ diff --git a/dialog/DIALOG32.IDE b/dialog/DIALOG32.IDE new file mode 100644 index 0000000..b69e424 Binary files /dev/null and b/dialog/DIALOG32.IDE differ diff --git a/dialog/DLGITEM.HPP b/dialog/DLGITEM.HPP new file mode 100644 index 0000000..4cce4c5 --- /dev/null +++ b/dialog/DLGITEM.HPP @@ -0,0 +1,155 @@ +#ifndef _DIALOG_DIALOGITEMTEMPLATE_HPP_ +#define _DIALOG_DIALOGITEMTEMPLATE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class DialogItemTemplate : private DLGITEMTEMPLATE +{ +public: + DialogItemTemplate(void); + DialogItemTemplate(const DialogItemTemplate &someDialogItemTemplate); + ~DialogItemTemplate(); + DialogItemTemplate &operator=(const DialogItemTemplate &someDialogItemTemplate); + WORD operator==(const DialogItemTemplate &someDialogItemTemplate)const; + String className(void)const; + void className(const String &className); + String titleText(void)const; + void titleText(const String &titleText); + DWORD style(void)const; + void style(DWORD style); + DWORD extendedStyle(void)const; + void extendedStyle(DWORD extendedStyle); + Rect posRect(void)const; + void posRect(const Rect &posRect); + WORD itemID(void)const; + void itemID(WORD itemID); +private: + String mClassName; + String mTitleText; +}; + +inline +DialogItemTemplate::DialogItemTemplate(void) +{ + style(0); + extendedStyle(0); + posRect(Rect(0,0,0,0)); + itemID(0); +} + +inline +DialogItemTemplate::DialogItemTemplate(const DialogItemTemplate &someDialogItemTemplate) +{ + *this=someDialogItemTemplate; +} + +inline +DialogItemTemplate::~DialogItemTemplate() +{ +} + +inline +DialogItemTemplate &DialogItemTemplate::operator=(const DialogItemTemplate &someDialogItemTemplate) +{ + style(someDialogItemTemplate.style()); + extendedStyle(someDialogItemTemplate.extendedStyle()); + posRect(someDialogItemTemplate.posRect()); + itemID(someDialogItemTemplate.itemID()); + className(someDialogItemTemplate.className()); + titleText(someDialogItemTemplate.titleText()); + return *this; +} + +inline +WORD DialogItemTemplate::operator==(const DialogItemTemplate &someDialogItemTemplate)const +{ + return (style()==someDialogItemTemplate.style()&& + extendedStyle()==someDialogItemTemplate.extendedStyle()&& + posRect()==someDialogItemTemplate.posRect()&& + itemID()==someDialogItemTemplate.itemID()&& + className()==someDialogItemTemplate.className()&& + titleText()==someDialogItemTemplate.titleText()); +} + +inline +DWORD DialogItemTemplate::style(void)const +{ + return DLGITEMTEMPLATE::style; +} + +inline +void DialogItemTemplate::style(DWORD style) +{ + DLGITEMTEMPLATE::style=style; +} + +inline +DWORD DialogItemTemplate::extendedStyle(void)const +{ + return DLGITEMTEMPLATE::dwExtendedStyle; +} + +inline +void DialogItemTemplate::extendedStyle(DWORD extendedStyle) +{ + DLGITEMTEMPLATE::dwExtendedStyle=extendedStyle; +} + +inline +Rect DialogItemTemplate::posRect(void)const +{ + return Rect(DLGITEMTEMPLATE::x,DLGITEMTEMPLATE::y,DLGITEMTEMPLATE::cx,DLGITEMTEMPLATE::cy); +} + +inline +void DialogItemTemplate::posRect(const Rect &posRect) +{ + DLGITEMTEMPLATE::x=posRect.left(); + DLGITEMTEMPLATE::y=posRect.top(); + DLGITEMTEMPLATE::cx=posRect.right(); + DLGITEMTEMPLATE::cy=posRect.bottom(); +} + +inline +WORD DialogItemTemplate::itemID(void)const +{ + return DLGITEMTEMPLATE::id; +} + +inline +void DialogItemTemplate::itemID(WORD itemID) +{ + DLGITEMTEMPLATE::id=itemID; +} + +inline +String DialogItemTemplate::className(void)const +{ + return mClassName; +} + +inline +void DialogItemTemplate::className(const String &className) +{ + mClassName=className; +} + +inline +String DialogItemTemplate::titleText(void)const +{ + return mTitleText; +} + +inline +void DialogItemTemplate::titleText(const String &titleText) +{ + mTitleText=titleText; +} +#endif \ No newline at end of file diff --git a/dialog/DLGTMPL.CPP b/dialog/DLGTMPL.CPP new file mode 100644 index 0000000..9795208 --- /dev/null +++ b/dialog/DLGTMPL.CPP @@ -0,0 +1,56 @@ +#include +#include + +DialogTemplate::operator DLGTEMPLATE *(void) +{ + DLGTEMPLATE *lpDLGTEMPLATE=0; + DLGITEMTEMPLATE *lpDLGITEMTEMPLATE; + BYTE *lpCharByte; + DWORD sizeData; + + if(!itemCount())return lpDLGTEMPLATE; + sizeData=MaxTemplateBytes; + mItemData.size(sizeData,GMEM_FIXED|GMEM_ZEROINIT); + lpDLGTEMPLATE=(DLGTEMPLATE*)((BYTE*)&mItemData[0]); + ::memcpy(lpDLGTEMPLATE,&((DLGTEMPLATE&)*this),sizeof(DLGTEMPLATE)); + lpCharByte=((BYTE*)lpDLGTEMPLATE)+sizeof(DLGTEMPLATE); + *((WORD*)lpCharByte)=0x0000; // no menu + lpCharByte+=sizeof(WORD); + if(className().isNull()){*((WORD*)lpCharByte)=0x0000;lpCharByte+=sizeof(WORD);} + else lpCharByte=copyString(lpCharByte,className()); + if(titleText().isNull()){*((WORD*)lpCharByte)=0x0000;lpCharByte+=sizeof(WORD);} + else lpCharByte=copyString(lpCharByte,titleText()); + if(style()&DS_SETFONT) + { + *((WORD*)lpCharByte)=pointSize(); + lpCharByte+=sizeof(WORD); + lpCharByte=copyString(lpCharByte,typeFace()); + } + lpCharByte=alignBoundary(lpCharByte); + lpDLGITEMTEMPLATE=(DLGITEMTEMPLATE*)lpCharByte; + for(short itemIndex=0;itemIndex +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _DIALOG_DIALOGITEMTEMPLATE_HPP_ +#include +#endif + +class DialogTemplate : private DLGTEMPLATE +{ +public: + DialogTemplate(void); + DialogTemplate(const DialogTemplate &someDialogTemplate); + ~DialogTemplate(); + DialogTemplate &operator=(const DialogTemplate &someDialogTemplate); + WORD operator==(const DialogTemplate &someDialogTemplate)const; + operator DLGTEMPLATE *(void); + DialogTemplate &operator+=(const DialogItemTemplate &someDialogItemTemplate); + DWORD style(void)const; + void style(DWORD style); + DWORD extendedStyle(void)const; + void extendedStyle(DWORD extendedStyle); + Rect posRect(void)const; + void posRect(const Rect &posRect); + WORD itemCount(void)const; + String className(void)const; + void className(const String &className); + String titleText(void)const; + void titleText(const String &titleText); + String typeFace(void)const; + void typeFace(const String &typeFace); + WORD pointSize(void)const; + void pointSize(WORD pointSize); +private: + enum{MaxTemplateBytes=16384}; + void itemCount(WORD itemCount); + BYTE *alignBoundary(BYTE *lpCharByte)const; + BYTE *copyString(BYTE *lpCharByte,const String &someString)const; + Block mDlgItems; + GlobalData mItemData; + WORD mPointSize; + String mClassName; + String mTitleText; + String mTypeFace; +}; + +inline +DialogTemplate::DialogTemplate(void) +{ + style(0); + extendedStyle(0); + itemCount(0); + posRect(Rect(0,0,0,0)); + pointSize(0); +} + +inline +DialogTemplate::DialogTemplate(const DialogTemplate &someDialogTemplate) +{ + pointSize(0); + *this=someDialogTemplate; +} + +inline +DialogTemplate::~DialogTemplate() +{ +} + +inline +DialogTemplate &DialogTemplate::operator=(const DialogTemplate &someDialogTemplate) +{ + style(someDialogTemplate.style()); + extendedStyle(someDialogTemplate.extendedStyle()); + itemCount(someDialogTemplate.itemCount()); + className(someDialogTemplate.className()); + titleText(someDialogTemplate.titleText()); + posRect(someDialogTemplate.posRect()); + pointSize(someDialogTemplate.pointSize()); + typeFace(someDialogTemplate.typeFace()); + return *this; +} + +inline +WORD DialogTemplate::operator==(const DialogTemplate &someDialogTemplate)const +{ + return (style()==someDialogTemplate.style()&& + extendedStyle()==someDialogTemplate.extendedStyle()&& + itemCount()==someDialogTemplate.itemCount()&& + className()==someDialogTemplate.className()&& + titleText()==someDialogTemplate.titleText()&& + posRect()==someDialogTemplate.posRect()&& + pointSize()==someDialogTemplate.pointSize()&& + typeFace()==someDialogTemplate.typeFace()); +} + +inline +DialogTemplate &DialogTemplate::operator+=(const DialogItemTemplate &someDialogItemTemplate) +{ + mDlgItems.insert(&someDialogItemTemplate); + itemCount(itemCount()+1); + return *this; +} + +inline +DWORD DialogTemplate::style(void)const +{ + return DLGTEMPLATE::style; +} + +inline +void DialogTemplate::style(DWORD style) +{ + DLGTEMPLATE::style=style; +} + +inline +DWORD DialogTemplate::extendedStyle(void)const +{ + return DLGTEMPLATE::dwExtendedStyle; +} + +inline +void DialogTemplate::extendedStyle(DWORD extendedStyle) +{ + DLGTEMPLATE::dwExtendedStyle=extendedStyle; +} + +inline +WORD DialogTemplate::itemCount(void)const +{ + return DLGTEMPLATE::cdit; +} + +inline +void DialogTemplate::itemCount(WORD itemCount) +{ + DLGTEMPLATE::cdit=itemCount; +} + +inline +Rect DialogTemplate::posRect(void)const +{ + return Rect(DLGTEMPLATE::x,DLGTEMPLATE::y,DLGTEMPLATE::cx,DLGTEMPLATE::cy); +} + +inline +void DialogTemplate::posRect(const Rect &posRect) +{ + DLGTEMPLATE::x=posRect.left(); + DLGTEMPLATE::y=posRect.top(); + DLGTEMPLATE::cx=posRect.right(); + DLGTEMPLATE::cy=posRect.bottom(); +} + +inline +String DialogTemplate::className(void)const +{ + return mClassName; +} + +inline +void DialogTemplate::className(const String &className) +{ + mClassName=className; +} + +inline +String DialogTemplate::titleText(void)const +{ + return mTitleText; +} + +inline +void DialogTemplate::titleText(const String &titleText) +{ + mTitleText=titleText; +} + +inline +String DialogTemplate::typeFace(void)const +{ + return mTypeFace; +} + +inline +void DialogTemplate::typeFace(const String &typeFace) +{ + mTypeFace=typeFace; +} + +inline +WORD DialogTemplate::pointSize(void)const +{ + return mPointSize; +} + +inline +void DialogTemplate::pointSize(WORD pointSize) +{ + mPointSize=pointSize; +} + +inline +BYTE *DialogTemplate::alignBoundary(BYTE *lpCharByte)const +{ + WORD *lpWORD=((WORD*)lpCharByte); + ULONG align; + + align=(ULONG)lpWORD; + align+=3; + align>>=2; + align<<=2; + return (BYTE*)align; +} +#endif diff --git a/dialog/DYNDLG.BAK b/dialog/DYNDLG.BAK new file mode 100644 index 0000000..dd32023 --- /dev/null +++ b/dialog/DYNDLG.BAK @@ -0,0 +1,85 @@ +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#define _DIALOG_DYNAMICDIALOG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _DIALOG_DIALOGITEMTEMPLATE_HPP_ +#include +#endif +#ifndef _DIALOG_DIALOGTEMPLATE_HPP_ +#include +#endif + +class DynamicDialog : public DWindow +{ +public: + enum DialogType{ModalDialog,ModelessDialog}; + DynamicDialog(void); + virtual ~DynamicDialog(); + void createDialog(HWND hParentWnd,DialogTemplate &someDialogTemplate,DialogType typeDialog=ModalDialog); + void createDialog(DialogTemplate &someDialogTemplate,DialogType typeDialog=ModalDialog); +protected: + virtual WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + virtual void dlgInitDialog(CallbackData &someCallbackData); + virtual void dlgDestroyDialog(CallbackData &someCallbackData); +private: + DynamicDialog(const DynamicDialog &someDynamicDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + Callback mInitDialogHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mDialogCodeHandler; + Callback mCommandHandler; +}; + +inline +DynamicDialog::DynamicDialog(void) +: mDestroyHandler(this,&DynamicDialog::destroyHandler), + mInitDialogHandler(this,&DynamicDialog::initDialogHandler), + mCloseHandler(this,&DynamicDialog::closeHandler), + mDialogCodeHandler(this,&DynamicDialog::dialogCodeHandler), + mCommandHandler(this,&DynamicDialog::commandHandler) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); +} + +inline +DynamicDialog::DynamicDialog(const DynamicDialog &someDynamicDialog) +: mDestroyHandler(this,&DynamicDialog::destroyHandler), + mInitDialogHandler(this,&DynamicDialog::initDialogHandler), + mCloseHandler(this,&DynamicDialog::closeHandler), + mDialogCodeHandler(this,&DynamicDialog::dialogCodeHandler), + mCommandHandler(this,&DynamicDialog::commandHandler) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); +} + +inline +DynamicDialog::~DynamicDialog() +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); +} +#endif + diff --git a/dialog/DYNDLG.CPP b/dialog/DYNDLG.CPP new file mode 100644 index 0000000..0d19f23 --- /dev/null +++ b/dialog/DYNDLG.CPP @@ -0,0 +1,104 @@ +#include +#include + +DynamicDialog::DynamicDialog(void) +{ + mDestroyHandler.setCallback(this,&DynamicDialog::destroyHandler); + mInitDialogHandler.setCallback(this,&DynamicDialog::initDialogHandler); + mCloseHandler.setCallback(this,&DynamicDialog::closeHandler); + mDialogCodeHandler.setCallback(this,&DynamicDialog::dialogCodeHandler); + mCommandHandler.setCallback(this,&DynamicDialog::commandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); +} + +DynamicDialog::DynamicDialog(const DynamicDialog &someDynamicDialog) +{ + mDestroyHandler.setCallback(this,&DynamicDialog::destroyHandler); + mInitDialogHandler.setCallback(this,&DynamicDialog::initDialogHandler); + mCloseHandler.setCallback(this,&DynamicDialog::closeHandler); + mDialogCodeHandler.setCallback(this,&DynamicDialog::dialogCodeHandler); + mCommandHandler.setCallback(this,&DynamicDialog::commandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); +} + +DynamicDialog::~DynamicDialog() +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); +} + +void DynamicDialog::createDialog(HWND hParent,DialogTemplate &someDialogTemplate,DialogType typeDialog) +{ + HINSTANCE hInstance((HINSTANCE)::GetWindowLong(hParent,GWL_HINSTANCE)); + if(ModalDialog==typeDialog)::DialogBoxIndirectParam(hInstance,(DLGTEMPLATE*)someDialogTemplate,hParent,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); + else if(!isValid())::CreateDialogIndirectParam(hInstance,(DLGTEMPLATE*)someDialogTemplate,hParent,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); +} + +void DynamicDialog::createDialog(DialogTemplate &someDialogTemplate,DialogType typeDialog) +{ + if(ModalDialog==typeDialog)::DialogBoxIndirectParam(processInstance(),(DLGTEMPLATE*)someDialogTemplate,(HWND)0,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); + else if(!isValid())::CreateDialogIndirectParam(processInstance(),(DLGTEMPLATE*)someDialogTemplate,(HWND)0,DWindow::DlgProc,(LONG)(LPSTR)(DWindow*)this); +} + +CallbackData::ReturnType DynamicDialog::closeHandler(CallbackData &/*someCallbackData*/) +{ + destroy(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DynamicDialog::destroyHandler(CallbackData &someCallbackData) +{ + dlgDestroyDialog(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DynamicDialog::initDialogHandler(CallbackData &someCallbackData) +{ + return dlgInitDialog(someCallbackData); +} + +CallbackData::ReturnType DynamicDialog::commandHandler(CallbackData &someCallbackData) +{ + WORD cmdReturn(dlgCommand(someCallbackData.wmCommandID(),someCallbackData)); + if(IDCANCEL==someCallbackData.wmCommandID()&&!cmdReturn)endDialog(FALSE); + else if(IDOK==someCallbackData.wmCommandID()&&!cmdReturn)endDialog(TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DynamicDialog::dialogCodeHandler(CallbackData &someCallbackData) +{ + return dlgCode(someCallbackData); +} + +// *** virtuals + +WORD DynamicDialog::dlgCommand(DWORD /*commandID*/,CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +WORD DynamicDialog::dlgCode(CallbackData &/*someCallbackData*/) +{ + return DLGC_WANTTAB; +} + +BOOL DynamicDialog::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + return TRUE; +} + +void DynamicDialog::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ +} + diff --git a/dialog/DYNDLG.HPP b/dialog/DYNDLG.HPP new file mode 100644 index 0000000..5bded49 --- /dev/null +++ b/dialog/DYNDLG.HPP @@ -0,0 +1,46 @@ +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#define _DIALOG_DYNAMICDIALOG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _DIALOG_DIALOGITEMTEMPLATE_HPP_ +#include +#endif +#ifndef _DIALOG_DIALOGTEMPLATE_HPP_ +#include +#endif + +class DynamicDialog : public DWindow +{ +public: + enum DialogType{ModalDialog,ModelessDialog}; + DynamicDialog(void); + virtual ~DynamicDialog(); + void createDialog(HWND hParentWnd,DialogTemplate &someDialogTemplate,DialogType typeDialog=ModalDialog); + void createDialog(DialogTemplate &someDialogTemplate,DialogType typeDialog=ModalDialog); +protected: + virtual WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + virtual WORD dlgCode(CallbackData &someCallbackData); + virtual BOOL dlgInitDialog(CallbackData &someCallbackData); + virtual void dlgDestroyDialog(CallbackData &someCallbackData); +private: + DynamicDialog(const DynamicDialog &someDynamicDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + Callback mInitDialogHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mDialogCodeHandler; + Callback mCommandHandler; +}; +#endif + diff --git a/dialog/Dialog.001 b/dialog/Dialog.001 new file mode 100644 index 0000000..a791a09 --- /dev/null +++ b/dialog/Dialog.001 @@ -0,0 +1,114 @@ +# Microsoft Developer Studio Project File - Name="dialog" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=dialog - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "dialog.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "dialog.mak" CFG="dialog - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "dialog - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "dialog - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "dialog - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\dialog__" +# PROP BASE Intermediate_Dir ".\dialog__" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdialog.lib" + +!ENDIF + +# Begin Target + +# Name "dialog - Win32 Release" +# Name "dialog - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Dlgtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Dyndlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Dlgitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dlgtmpl.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dyndlg.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/dialog/Dialog.dsp b/dialog/Dialog.dsp new file mode 100644 index 0000000..044985d --- /dev/null +++ b/dialog/Dialog.dsp @@ -0,0 +1,120 @@ +# Microsoft Developer Studio Project File - Name="dialog" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=dialog - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Dialog.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Dialog.mak" CFG="dialog - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "dialog - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "dialog - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "dialog - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\dialog__" +# PROP BASE Intermediate_Dir ".\dialog__" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdialog.lib" + +!ENDIF + +# Begin Target + +# Name "dialog - Win32 Release" +# Name "dialog - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Dlgtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Dyndlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Dlgitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dlgtmpl.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dyndlg.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/dialog/Dialog.mak b/dialog/Dialog.mak new file mode 100644 index 0000000..30081b8 --- /dev/null +++ b/dialog/Dialog.mak @@ -0,0 +1,380 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=dialog - Win32 Debug +!MESSAGE No configuration specified. Defaulting to dialog - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "dialog - Win32 Release" && "$(CFG)" != "dialog - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Dialog.mak" CFG="dialog - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "dialog - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "dialog - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "dialog - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "dialog - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Dialog.lib" + +CLEAN : + -@erase "$(INTDIR)\Dlgtmpl.obj" + -@erase "$(INTDIR)\Dyndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(OUTDIR)\Dialog.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Dialog.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Dialog.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Dialog.lib" +LIB32_OBJS= \ + "$(INTDIR)\Dlgtmpl.obj" \ + "$(INTDIR)\Dyndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" + +"$(OUTDIR)\Dialog.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "dialog__" +# PROP BASE Intermediate_Dir "dialog__" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msdialog.lib" + +CLEAN : + -@erase "$(INTDIR)\Dlgtmpl.obj" + -@erase "$(INTDIR)\Dyndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "..\exe\msdialog.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)/" /c\ + +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Dialog.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msdialog.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msdialog.lib" +LIB32_OBJS= \ + "$(INTDIR)\Dlgtmpl.obj" \ + "$(INTDIR)\Dyndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" + +"..\exe\msdialog.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "dialog - Win32 Release" +# Name "dialog - Win32 Debug" + +!IF "$(CFG)" == "dialog - Win32 Release" + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "dialog - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dyndlg.cpp + +!IF "$(CFG)" == "dialog - Win32 Release" + +DEP_CPP_DYNDL=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Dyndlg.obj" : $(SOURCE) $(DEP_CPP_DYNDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +DEP_CPP_DYNDL=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\.\Dyndlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Dyndlg.obj" : $(SOURCE) $(DEP_CPP_DYNDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dlgtmpl.cpp + +!IF "$(CFG)" == "dialog - Win32 Release" + +DEP_CPP_DLGTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Dlgtmpl.obj" : $(SOURCE) $(DEP_CPP_DLGTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "dialog - Win32 Debug" + +DEP_CPP_DLGTM=\ + {$(INCLUDE)}"\.\Dlgitem.hpp"\ + {$(INCLUDE)}"\.\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Widestr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Dlgtmpl.obj" : $(SOURCE) $(DEP_CPP_DLGTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/dialog/Release/Dialog.lib b/dialog/Release/Dialog.lib new file mode 100644 index 0000000..58631d8 Binary files /dev/null and b/dialog/Release/Dialog.lib differ diff --git a/dialog/Release/vc60.idb b/dialog/Release/vc60.idb new file mode 100644 index 0000000..acbe6a1 Binary files /dev/null and b/dialog/Release/vc60.idb differ diff --git a/dialog/STDTMPL.CPP b/dialog/STDTMPL.CPP new file mode 100644 index 0000000..f22b53f --- /dev/null +++ b/dialog/STDTMPL.CPP @@ -0,0 +1,14 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include + +typedef Block g; +#endif + diff --git a/dialog/dialog.mdp b/dialog/dialog.mdp new file mode 100644 index 0000000..8466c18 Binary files /dev/null and b/dialog/dialog.mdp differ diff --git a/docs/ABBOTT.TXT b/docs/ABBOTT.TXT new file mode 100644 index 0000000..82e1ee6 --- /dev/null +++ b/docs/ABBOTT.TXT @@ -0,0 +1,20 @@ +Tuesday July 14, 1998 + +This morning as I was leaving the house for work I found Abbott on the +front lawn. He was dead. He was not visibly bruised and I could see +no signs that he had been in a fight, except for a trickle of blood on +his front lip. I suppose he might have been hit by a car and managed +to work his way back onto the property where he just layed down and died. +I suppose it might also have been something he ate, though it would have +to be some potent poison for it to kill him in such a short period of +time, I had just seen him the night before. Needless to say, I am +very upset about Abbotts death. Moreso that it comes a year and seven +months after Costello (his brother) passed away. I took that pretty hard +as well. This is the last chapter of my tale of the two kittens that +strolled onto the back deck in the summer months of 1996. I loved them +both and cherished them and I can only hope that they are together in +heaven chasing down mice and romping around. I love you Abbott and I +love you Costello. I will never know where you came from or why you were +both taken so early in life. + + diff --git a/docs/ASCII1.GIF b/docs/ASCII1.GIF new file mode 100644 index 0000000..d5ac2c9 Binary files /dev/null and b/docs/ASCII1.GIF differ diff --git a/docs/ASCII2.GIF b/docs/ASCII2.GIF new file mode 100644 index 0000000..4fc7f59 Binary files /dev/null and b/docs/ASCII2.GIF differ diff --git a/docs/BENCHMK.FM3 b/docs/BENCHMK.FM3 new file mode 100644 index 0000000..30e5e41 Binary files /dev/null and b/docs/BENCHMK.FM3 differ diff --git a/docs/BENCHMK.WK3 b/docs/BENCHMK.WK3 new file mode 100644 index 0000000..6668986 Binary files /dev/null and b/docs/BENCHMK.WK3 differ diff --git a/docs/C3T3-2A.GIF b/docs/C3T3-2A.GIF new file mode 100644 index 0000000..8d524fa Binary files /dev/null and b/docs/C3T3-2A.GIF differ diff --git a/docs/C3T3-2B.GIF b/docs/C3T3-2B.GIF new file mode 100644 index 0000000..44cd9a8 Binary files /dev/null and b/docs/C3T3-2B.GIF differ diff --git a/docs/C3T3-2C.GIF b/docs/C3T3-2C.GIF new file mode 100644 index 0000000..a9f8560 Binary files /dev/null and b/docs/C3T3-2C.GIF differ diff --git a/docs/C3T3-2D.GIF b/docs/C3T3-2D.GIF new file mode 100644 index 0000000..3539214 Binary files /dev/null and b/docs/C3T3-2D.GIF differ diff --git a/docs/C3T3-2E.GIF b/docs/C3T3-2E.GIF new file mode 100644 index 0000000..048ea27 Binary files /dev/null and b/docs/C3T3-2E.GIF differ diff --git a/docs/C3T3-2F.GIF b/docs/C3T3-2F.GIF new file mode 100644 index 0000000..2727447 Binary files /dev/null and b/docs/C3T3-2F.GIF differ diff --git a/docs/CALLID.FM3 b/docs/CALLID.FM3 new file mode 100644 index 0000000..3003293 Binary files /dev/null and b/docs/CALLID.FM3 differ diff --git a/docs/CALLID.WK3 b/docs/CALLID.WK3 new file mode 100644 index 0000000..37e5e38 Binary files /dev/null and b/docs/CALLID.WK3 differ diff --git a/docs/CALS.FM3 b/docs/CALS.FM3 new file mode 100644 index 0000000..12e1500 Binary files /dev/null and b/docs/CALS.FM3 differ diff --git a/docs/CALS.WK3 b/docs/CALS.WK3 new file mode 100644 index 0000000..91a21b9 Binary files /dev/null and b/docs/CALS.WK3 differ diff --git a/docs/CONTACT.TXT b/docs/CONTACT.TXT new file mode 100644 index 0000000..7369abd --- /dev/null +++ b/docs/CONTACT.TXT @@ -0,0 +1,466 @@ +Chris Compoit +First Data +(631)843-6783 +3:00 p.m. +Jim Kirk (212)726-6650 + +Barra 9:00 a.m. Thursday September 14, 2000 +Rama Koduru +JAVA/Web Technologies +www.barra.com +posit.com + +(516)468-9155 +Periphonics +4250 Vets Memorial Highway +Bohemia +peri.com +right elevator to 2nd floor +severo mancebo +H.R. + +computer telephony +expertise: +C,C++,JAVA +tech lead, senior software engineer + +Glenna +(516)351-1800 +Irene Caine personnel +---------------------------------------------------------------------------------------- +Alan Yang +631-271-1102 8:00 +Arrow +---------------------------------------------------------------------------------------- + +Goldman Sacks 8:30 32 old slip +20th floor, Jim Barnet 357-8645 +and then Valentine Beskin 357-7337 + +12:00 Osprey Partners 405 Park Ave 53rd 54th +Tirdad Shojari +Patrick Allen + +Herb (212)683-8255 +Herb (212)686-0762 243 +Gail (212)856-4444 +gail@astorgroup.com + +http://www2.warehouse.com/product.asp?pf%5Fid=SH2912&blind=no&cat=micro +Jim Clifford - Remington (212)682-1300 call Monday morning +------------------------------------------------------------- +Justin McClusky Amalgamod (212)306-0130 +--------------------------------------- +Alan Bernstein (212)943-4015 +-------------------------- + +216.91.232.125 +Richard George (212)953-6066 (Atlantis) +Jim (212)682-1300 (Remington) +Justin (212)306-0130 +Brian (212)557-4200 + +Alex Kelly (212)358-9000 (Lisa Kennedy) +Steve Heller (212)943-6194 + +Sean 484-8460 +Dmitry (212)996-9666 + +costa morris +(516)671-8285 + +Roger Bergstein +(212)657-0280 - citibank +Roger.Bergstein@citicorp.com + +************************************************************************** +TRACY BATT MITCHEL MARTIN (212)943-6194 x-372 +TRACY BATT (212)843-6046 +CASTLENET +WWW.THEBEAST.COM GLOBAL FIN FRAMEWORK +JASON KATZ +TUESDAY LUNCH 12:00 +1 SEAPORT PLAZA +199 WATER STREET +JOHN AND FULTON 21ST FLOOR +ASK FOR JASON KATZ +CHARLENE FLETCHER +DEVELOPMENT +HAVE MAYBE 5 DEVELOPERS +CARL CARRIE PRESIDENT +C++ DEVELOPMENT +INTERNET BASED STUFF + +SOFTWARE ENGINEER +105,000.00 +15,000.00 GUARANTEED +VACA 3 WEEKS +LUNCH EVERYDAY +3 WEEKS VACATION +6 SICK +2 PERS +CASUAL +(212)251-0044 + + +************************************************************************** + + Name Company Phone/Fax Last +Discussion +============================================================================ +Paul Alliegro ph:(516)393-4959 +Stephen Kelly ph:(516)228-5000 x3622 +Hewlett Packard Tech Support ph:(970)346-8682 +Tim Valdner East West ph:(212)888-0005 tvaldner@ewc.co.jp +Lori at the Job (212)655-2000 x3671 +doyle@ewc.co.jp +Tim Valdner East West fx:(212)888-1265 +Beth Akins Landover Associates ph:(212)759-6400 Lehman Brothers +Beth Akins Landover Associates ph:(212)980-4523 Fax +Lisa Mann Concorde Holdings ph:(212)922-5700 Sigma Imaging (516)933-3055 +Lisa Mann Concorde Holdings ph:(212)922-0912 Fax number +Howard Goldsmith Concorde Holdings ph:(212)922-5700 +Frank Calasanto Rosato & Associates ph:(212)509-5700 Salomon Brothers +Mike Stevens Future Data ph:(212)421-6789 A.D.P.-- futuredata@aol.com +Mike Stevens Future Data fax ph:(212)421-3890 +Eric Walland ph:(212)586-9701 +Eric Walland (212)586-1729 FAX +Lisa Kennedy **************** ph:(212)358-9000 Symantec/Citibank/AIG +Lisa Kennedy **************** ph:(212)758-0223 Symantec/Citibank/AIG +Steve Harrison Technology Corp., ph:(212)802-7458 Citibank (L.I. City) +Steve Harrison Beeper Number ph:(917)935-4371 "" "" +Ken Tapp Ken Tapp Assoc., ph:(212)683-8255 Citibank (L.I. City) +Scott Gerson Focus Capital Markets ph:(212)986-3344/70 Micro Modelling +Len Golad Datacom ph:(212)629-5720 Microsoft/Chemical +Rick Murphy CompuSearch ph:(516)364-9290 Fax Resume +Rick Murphy CompuSearch (Fax) ph:(516)364-4478 Fax Resume +Glen Backman Backman Software ph:(201)729-8628 Backman Software +Nancy Shore ph:(908)750-2999 +Nancy Shore fax ph:(908)726-0967 +John Sullivan Design Strategy ph:(212)370-0000 +John Sullivan Design Strategy fax ph:(212)949-3648 +Theresa Reinersman ph:(212)513-7777 +Theresa Reinersman ph:(212)227-1854 (fax) +Doug Stone ph:(914)471-9700 x313 +Jason ph:(212)726-6632 (E-MAIL) jason.staller@ayers.com (ascii) +Jason fax:(212)661-7910 +Mark Saturn ph:(212)726-6630 +Bonae Barrett ph:(516)826-3588 +Pam Fried ph:(516)674-4832 +Madeline ph:(516)757-7868 +Post Office, East Northport ph:(516)368-5885 +Justin Wolffe ph:(800)848-6914 +John Byrnes ph:(516)589-3754 +Roger Bergstein ph:(212)657-0280 roger.bergstein@citicorp.com + +---------------------------------------------------------------------------- + Appointments + +Company Address Contact Phone Date/Time Agency Disposition +===================================================================================================================================================== +M.U.Z.E 155 6th Ave Suite 1104 Brian Berenbach (212)741-0353 Landover Bad Match +Salomon Bros. 7 World Trade 40th floor Steve Santini (212)783-3758 Wednesday 07/19, 5:30p Rosato & Assoc., Pending Offer +A.D.P. 2 Journal Square Carolyn Curry/Lillian (201)714-3059 Wednesday 08/09, 9:30a Future Data Declined offer of 77k+bonus +Lehman Brothers World Financial Center Kenny Chu (212)526-0767 Wednesday 8/23 4:00p Beth Akins Pending second interview +Lehman Brothers Jersey City Wayne Kunow (201)524-4244 Future Data have offer of $93,000.00 +Bankers Trust 130 Liberty St. Richard Waldstein (212)250-5928 Wednesday 9/6 1:00p Beth Akins Interview +Citibank 399 Park Ave.5th flr. Amy Rossoff/Phil (212)559-2885 Friday 8/25, 10:30a Ken Tapp Decided Against +Citibank Long Island City Steve Harrison Thursday 8/31 9:00a Steve Harrison Decided Against +Symantec Corp 1776 Jericho Tpke Hntgtn Betty McDonald (516)462-0440 Tuesday 9/13 5:30p Lisa Kennedy Decided Against +Symantec Corp 1776 Jericho Tpke Hntgtn Bill Donnovan (408)864-2810 Decided Against +Symantec Corp 1776 Jericho Tpke Hntgtn Nancy Kimpa (617)280-2652 Decided Against +Tech Hackers 50 Broad Street,17th floor Michael How (212)344-9500 Wednesday 9/14 5:30p Beth Akins Faded +Salomon Bros. 7 World Trade 40th floor Steve Santini (212)783-3758 Tuesday 9/27 5:30p Rosato & Assoc., Decided Against +Enterprise Data 80 Smith St. Farmingdale Claudio Ballard (516)756-7400 Saturday 10/15 10:00a Rick Murphy., No Funds +NatWest 175 Water St. Bill Kurz (Tsy) (212)602-4550 Tuesday 5/28 5:15 Mike Stevens Pending +NatWest 175 Water St. Carol Arthur (212)402-4085 17th flr. +EuroBrokers 2 World Trade Center Walter Danielson (212)748-7151 84th flr. +A.I.G. 72 Wall Street Elaine Miller (212)770-3564 Lisa Kennedy +Citibank 111 Wall Street Arlene Plutner/Jason (718)248-0633 +Gemco Ptnrs 120 Broadway & Liberty David Mushel (212)433-7633 suite 7015 12:30 Friday +Gemco Ptnrs (201)801-0618 +Yvonne DiStefano First Boston (212)239-0139 + + Professional Contacts +------------------------------------------------------------------------------------------------------------------------------------------------------ + Name Company Phone/Fax Last Discussion +============================================================================= +Tom Larounis ph:(516)393-5195 Real Estate Attny +Tom Larounis ph:(516)443-2197 Car Phone +Tom Larounis ph:(516)557-2020 beeper +Anita Anselmi ph:(516)757-7272 Coach Real Estate +Jane Tremayne 3612 Merrick Rd Seaford NY 11783 +Jane Tremayne ph:(516)783-0384 Nationwide Ins. +Doug Taylor Flagship ph:(516)757-4405 Mortgage +Doug Taylor Flagship (beeper) ph:(516)382-0497 Mortgage +Doug Taylor Flagship (FAX) ph:(516)757-4427 Mortgage +Doug Taylor 225 Main St. Northport NY,11768 +Michael Lee ph:(212)436-5683 +Michael Lee fax ph:(212)436-5973 +Michael Lee Internet Address miclee@dttus.com + + Personal Contacts +------------------------------------------------------------------------------------------------------------------------------------------------------ + Name Company Phone/Fax Last Discussion +============================================================================= +Robin Perjon Work Number ph:(800)398-6424 hit 3 then x-3017 +Roni Kessler ph:(516)234-4154 +57 Adams Rd. +Central Islip, NY 11722 +Unit 1C +Roni Perjon Robert Plan ph:(516)228-5000 x-3423 +Roni Perjon Robert Plan ph:(516)393-4954 (516)393-4959 +Feenie Jonathan Woodner Co., ph:(212)644-0630 +Scott & Carol Home phone number ph:(516)271-1338 kidhunt@aol.com +Kevin Home phone number ph:(516)821-4881 frugalkk@aol.com +82 Westchester Drive +Rocky Point, +Kevin Kessler work ph:(631)929-6530 +Uncle Bob Home phone number ph:(516)673-5834 +Uncle Bob internet address lnjl05a@prodigy.com +Uncle Bob internet address Robert_Yannacci_at_CCNYP33E1@ccmail.prusec.com +Jerry & Mary home phone ph:(516)269-5982 +Sean Kessler Cell phone number ph:(917)754-9783 +Sean Kessler work number ph:(212)553-4107 +Roni Cell phone number ph:(516)769-4181 +Sean & Roni Home Phone Number ph:(516)262-0924/(516)262-1265 +Sean & Roni 2 Rose Court Fort Salonga, N.Y. 11768 +Jim Dean Witter Reynolds ph:(212)392-1185 +Roni Waste Management ph:(215)633-2158 +Dave Alessio ph:(305)433-2158 +Gene Alessio GENEGPI@AOL.COM +Mom cell phone number ph:(516)578-7196 +Mom work number ph:(516)938-7007 +Mom work fax number ph:(516)938-7031 +Mom home fax number ph:(516)928-9606 +Barney Cell phone number ph:(516)658-4711 +Mom & Barney 3 Gregg La. Coram N.Y. ph:(516)331-8857 431,"METOO" +Robin Perjon ph:(215)946-5740 +Barbara Martin ph:(516)928-8220 +Sandy Natale ph:(516)737-1987 +Margurite Natale ph:(516)739-8051 +Cables & Chips Maiden La. N.Y. N.Y. ph:(212)619-3132 +Mike Tuttoro work ph:(212)302-6888 +Dimitri Vorona home phone ph:(201)985-0148 +Dimitri Vorona home phone ph:(201)246-1336 +Dimitri ph:(201)659-1911 +Maureen ph:(516)462-6652 +Jamie & Tracy internet address dansalt@aol.com +Jamie ph:(516)379-9738 +Bernie ph:(516)864-1100 +David Alessio ph:(305)433-2158 +David Alessio 1501 Southwest 119th Ave, Penbroke Pines Fla. 33025 +Robert McGarvey ph:(516)735-0086 +K.C. ph:(516)221-9597 (beep)(516)834-1567 +Angela (K.C.) ph:(516)221-4885 +Quinlan Taxi ph:(516)261-0235 +Sean Kessler ph:(212)325-6450 +Total Maintenance ph:(516)757-7163 John Kirby +Giovanni's restaurant ph:(516)261-1691 +Just Cats ph:(516)331-4967 +Len Bates (A.I.G.) ph:(212)770-8249 +Dennis Wu ph:(718)331-3022 home + +American Century ph:(800)345-2021 x-8765 +American Century Fund:Ultra Acc#:022-001300265 +$6,797.99 02/26/1997 $250/mo +$10,589.31 01/23/1998 +$11,223.43 02/11/1998 +$11,270.11 02/13/1998 389.027 shares +$14,588.87 06/26/1998 433.290 shares + 07/25/2001 322.385 shares price:28.02 price:$280.00 -> $320.00 (86327) + +1-888-345-7654 + +07-24-2001 shares= +monthly investment + +8606 form when filing + + +Chase Manhattan Bank ph:(212)935-9935 +Chase Manhattan Bank Acc#0261232813 +Long Island Link ph:(516)232-6100 fax:(516)232-9622 +Green Island Tree Spray ph:(516)549-5100 +J&R Music ph:(212)238-9000 +Hanya Kim ph:(212)912-9455 (home) +Lydia ph:(516)265-7453 +Grace Systems ph:(516)671-9400 "3478" "europa" + reset, hold 9 for a few seconds. if not then enter code and hold 9 for a few seconds +Bill Leigh, Smith Barney ph:(516)932-4800/4835 acc#4144086016074 +picked up 50 shares intel at 85.875 +(Intel(INTC),Boeing,Compaq(CPQ),Lilly,AmGen,Cisco(CSCO)) +Smith Barney +100 Jericho Quadrangle Suite 120 +Jericho, New York 11753 +Barnes & Noble ph:(516)462-0896 +Pape Chevrolet ph:(516)427-0900 +Tyrolean Motors Limited ph:(516)261-4079 contact:Walter,Diane,Dave Nostrand,Pete +389 Fort Salonga Road, Northport NY 11768 +Hanya ph:(212)541-4716 wk:(212)388-0098 +Suffolk County Police, 2nd pct. (Npt.) ph:(516)854-8200 +Serge ph:(203)625-2773 serge:(718)520-6746 +Communicar ph:(718)418-1200 Acc#:15666 Cost#020000 +auto barn (jericho tpke) ph:(516)673-7550 +U.S. 1 autoparts (huntington sta) ph:(516)427-3900 (1/4 mi north 110) +Aid Auto Parts ph:(516)549-0333 +F. Paul (bmw parts) ph:(516)427-8460 +Sean Kessler P.O. Box 341 East Northport NY 11731 +Home Depot ph:(516)462-5300 + + +WWW.MODEMHELP.ORG +DISABLE V.90 56K +MS=11,1 +FORCE V.90 +MS=12 +DISABLE V.90,FORCE KFLEX +MS=56 +Linux init string is :AT&F1&C1&D2+MS11,1 + +1989 BMW 325i +VIN:WBAAD2304K8847685 +DCAP INSURANCE (516)271-4600 +#1313840817 + +mike sullivan 757-6793 7:30 deck and cedar + +HABBERSTADT BMW (516)271-7177 +Tom - Service (516)271-7177 x-282 +Radio Code Light + +heater core - 3 bolt flange +oxygen sensor - $124.50 +heater valve - $68.00 part #707 +thermostat - $16.50 $.50 +antenna kit - $65.00 +antenna - $17.00 +valve adjustment (???) +Techron - fuel injector cleaner + +Aid Auto : 543-1919 +Auto Barn: 499-3300 +Roadside: 266-2515 +parts pkus +F. Paul - 427-8460 110.00 have socket too. +O2 sensor- + +================================================= +Basil Rabinowitz +1 chase plaza 41st floor +(212)859-7046 +Home Phone (718)253-6759 +================================================== +Sun Machine +user:Basil +pass:europa +basil@us.fortis.com +================================================== +(212)859-7202 +(212)859-7070 voice mail +First Fortis (212)859-7000 +Jodi Laurett (Fortis) (212)859-7055 +Jodi Laurett (Home) (212)721-4465 +Jackie (Fortis) (212)859-7006 fax(212)859-7058 +Gary Yalin 12:00 Fri 9/12/1997 +Mel Schneiderman 7059 +Kevin Michaels 12:00 Tuesday 09/16/1997 + +Danella Schiffer 260 Madison Ave 17th floor +38th&39th Professional Planners [8:30 - 4:00 Thursday 25th] +(212)251-0422 home(212)242-3560 +October 3 1997 8:30 +============================================================================ +wrote application for portfolio managers, using visual C++, sybase ODBC, +which calculates the cost of trading actual holdings (turnover), given +tax basis and then translates the dollar cost into a curve tightening +in terms of a basis point spread that is needed to offset losses. +The application is used extensively during portfolio rebalancing to +identify tax efficient trades. + +-------------------------------------------------------------------------- +Global Advanced Technology 401(k) GAT#(212)785-9630 +Charles Scwabb +(888)-444-4015 +1(800)724-7526 +July 1998 approximately $21,000.00 +------------------------------------------------------------------------ +SchwabPlan +PIN:2961 +1-800-SCH-PLAN +www.schwabplan.com +------------------------------------------------------------------------ +Fortis Advisers 401(k) 1-800-236-1400 PIN:9758 +-------------------------------------------------------------------------- +mike elsman +tracy batt +steve heller +212-943-6194 +Mitchell Martin +melsman@mitchellmartin.com +Lehman-developer/architect leader position. Java/C++ Equity/Derivative +Goldman Sachs-Brokerage. Senior Developer. 5 years, Large project. + Java/C++. Sybase. GUI. DCOM. +-------------------------------------------------------------------------- +lbailey@aol.com +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +SAFELITE AUTO GLASS +(516)864-8600 +(516)864-4855 + +$118.74 +2045 JERICHO TPKE +(516)864-6400 +11:00 +-------------------------------------------------------------------------- +san giacomo pizza 757-0005 + +dormant oil 108.25 85.00 + +paying for +120 - dormant oil (2x) [destroy eggs and larvae] +130 - spring fungi (1x) [end April 1st week] +200 - mid spring insect (1x) [May 10th - May 15th] "Astro" +300 - late spring insect (1x) [June 10th] "Astro" +400 - hot summer insect (1x) [July 20th] "Astro" +500 - deep root (1x) [September] + +550 - dormant oil (free) [November] +1 - mosq () "Permethrin" [] +2 - mosq () "Permethrin" [] +3 - mosq () "Permethrin" [] +4 - mosq () "Permethrin" [] +5 - mosq () "Permethrin" [] +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +dormant oil 2 applications (spring /fall) +spring fungicide (1 application spring) +mid spring insect astro (1 application april 16 ) +late spring insect pest +hot summer spray +deep root feeding/winter eather shield/fall dormant oil + +news-server.optonline.net + +Long Island Net ph:(516)761-5200 x2 modems +Long Island Net ph:(516)265-0997 +Long Island Net ph:(516)630-0072 56k () **** + ph:(516)396-7400 Nassau +Long Island Net ph:(516)265-1065 28.8k v.34 +382-3700 + +ip address is 161.58.8.86 +Long Island Net ph:(800)693-1553 ph:(888)523-7801 +news server "ga.news.verio.net" +news server "ny.news.verio.net" +gateway 199.171.6.1 +Account#10171971 +case#1019995 + +username:VN/europa@li.net +password: +(404)221-0918 Georgia access number +WINS disabled +IP address dynamically obtained +DNS 199.171.6.14 +DNS 199.171.6.12 diff --git a/docs/COSTELLO.WRI b/docs/COSTELLO.WRI new file mode 100644 index 0000000..1e0dcf7 Binary files /dev/null and b/docs/COSTELLO.WRI differ diff --git a/docs/Cover.wri b/docs/Cover.wri new file mode 100644 index 0000000..5432be3 Binary files /dev/null and b/docs/Cover.wri differ diff --git a/docs/Diversified.cer b/docs/Diversified.cer new file mode 100644 index 0000000..03fa089 Binary files /dev/null and b/docs/Diversified.cer differ diff --git a/docs/E.BAT b/docs/E.BAT new file mode 100644 index 0000000..24557e8 --- /dev/null +++ b/docs/E.BAT @@ -0,0 +1 @@ +edit contact.txt diff --git a/docs/FILE0001.PRN b/docs/FILE0001.PRN new file mode 100644 index 0000000..829819a --- /dev/null +++ b/docs/FILE0001.PRN @@ -0,0 +1,64 @@ + 04/18/94 Initial $1,034.62 $20.220 51.168 51.168 + 04/18/94 Purchase $42.72 $20.220 2.113 53.281 $0.000 $0.000 + 05/16/94 Purchase $150.00 $19.530 7.680 60.961 ($0.690) ($0.345) + 06/15/94 Purchase $150.00 $19.880 7.545 68.507 $0.350 ($0.113) + 07/15/94 Purchase $150.00 $19.800 7.576 76.082 ($0.080) ($0.105) + 08/15/94 Purchase $150.00 $19.960 7.515 83.597 $0.160 ($0.052) + 09/15/94 Purchase $150.00 $20.800 7.212 90.809 $0.840 $0.097 + 10/15/94 Purchase $150.00 $20.580 7.289 98.098 ($0.220) $0.051 + 11/15/94 Purchase $150.00 $20.880 7.184 105.282 $0.300 $0.082 + 12/15/94 Purchase $150.00 $20.010 7.496 112.778 ($0.870) ($0.023) + 12/17/94 Capital Gain Distrib $72.76 $19.320 3.766 116.544 ($0.690) ($0.090) + 01/16/95 Purchase $150.00 $20.270 7.400 123.944 $0.950 $0.005 + 02/15/95 Purchase $150.00 $20.440 7.339 131.282 $0.170 $0.018 + 03/15/95 Purchase $200.00 $20.760 9.634 140.916 $0.320 $0.042 + 04/17/95 Purchase $200.00 $20.910 9.565 150.481 $0.150 $0.049 + 05/15/95 Purchase $200.00 $22.020 9.083 159.564 $1.110 $0.120 + 06/15/95 Purchase $200.00 $23.160 8.636 168.199 $1.140 $0.184 + 07/17/95 Purchase $200.00 $26.510 7.544 175.744 $3.350 $0.370 + 08/15/95 Purchase $200.00 $27.030 7.399 183.143 $0.520 $0.378 + 09/15/95 Purchase $200.00 $27.320 7.321 190.464 $0.290 $0.374 + 10/15/95 Purchase $200.00 $25.520 7.837 198.301 ($1.800) $0.265 + 10/30/95 Redemption ($3,000.00) $28.030 -107.028 91.272 + 11/15/95 Purchase $200.00 $20.000 10.000 101.272 + 12/15/95 Purchase $200.00 $20.000 10.000 111.272 + 01/15/96 Purchase $200.00 $23.400 8.547 119.819 ($2.120) $0.151 + 02/15/96 Purchase $200.00 $27.260 7.337 127.156 $3.860 $0.320 + 03/15/96 Purchase $200.00 $26.970 7.416 134.572 ($0.290) $0.293 + 04/15/96 Purchase $200.00 $26.000 7.692 142.264 ($0.970) $0.241 + 05/15/96 Purchase $200.00 $28.780 6.949 149.213 $2.780 $0.342 + 06/17/96 Purchase $200.00 $28.250 7.080 156.293 ($0.530) $0.309 + 07/15/96 Purchase $200.00 $25.390 7.877 164.170 ($2.860) $0.191 + 08/15/96 Purchase $200.00 $27.070 7.388 171.558 $1.680 $0.245 + 09/16/96 Purchase $200.00 $28.230 7.085 178.643 $1.160 $0.276 + 10/15/96 Purchase $200.00 $30.390 6.581 185.224 $2.160 $0.339 + 11/15/96 Purchase $200.00 $30.730 6.508 191.732 $0.340 $0.339 + 12/16/96 Purchase $200.00 $29.370 6.810 198.542 ($1.360) $0.286 + 12/16/96 Capital Gain Distrib $334.95 $28.980 11.558 210.100 ($0.390) $0.265 + 01/15/97 Purchase $200.00 $29.640 6.748 216.848 $0.660 $0.277 + 02/15/97 Purchase $200.00 $30.940 6.464 223.312 $1.300 $0.306 + 03/15/97 Purchase $250.00 $28.910 8.648 231.959 ($2.030) $0.241 + 04/15/97 Purchase $250.00 $28.713 8.707 240.666 ($0.197) $0.230 + 05/15/97 Purchase $250.00 $28.516 8.767 249.433 ($0.197) $0.218 + 06/15/97 Purchase $250.00 $28.319 8.828 258.261 ($0.197) $0.208 + 07/15/97 Purchase $250.00 $28.122 8.890 267.151 ($0.197) $0.198 + 08/15/97 Purchase $250.00 $27.925 8.953 276.104 ($0.197) $0.188 + 09/15/97 Purchase $250.00 $27.728 9.016 285.120 ($0.197) $0.179 + 10/15/97 Purchase $250.00 $27.531 9.081 294.200 ($0.197) $0.170 + 11/15/97 Purchase $250.00 $27.334 9.146 303.347 ($0.197) $0.162 + 12/15/97 Purchase $250.00 $27.137 9.213 312.559 ($0.197) $0.154 + 12/15/97 Internal Adjustment $1,816.09 $27.030 67.188 379.747 ($0.107) $0.148 + 01/15/98 Purchase $250.00 $26.940 9.280 389.027 ($0.090) $0.143 + 02/15/98 Purchase $275.00 $28.970 9.493 398.520 $2.030 $0.182 + 03/15/98 Purchase $275.00 $31.050 8.857 407.376 $2.080 $0.221 + 04/15/98 Purchase $275.00 $32.350 8.501 415.877 $1.300 $0.243 + 05/15/98 Purchase $275.00 $32.060 8.578 424.455 ($0.290) $0.232 + 06/15/98 Purchase $275.00 $31.130 8.834 433.289 ($0.930) $0.210 + 07/15/98 Purchase $275.00 $35.780 7.686 440.974 $4.650 $0.294 + 07/28/98 Redemption ($15,000.00) $34.340 -436.808 4.166 ($1.440) $0.261 + 08/15/98 Purchase $275.00 $32.350 8.501 12.667 ($1.990) $0.221 + 09/15/98 Purchase $275.00 $30.220 9.100 21.767 ($2.130) $0.179 + 10/15/98 Purchase $275.00 $29.530 9.313 31.079 ($0.690) $0.163 + 11/15/98 Purchase $275.00 $31.820 8.642 39.722 $2.290 $0.200 + 12/15/98 Purchase $275.00 $33.460 8.219 47.940 $1.640 $0.224 + 12/18/98 Capital Gain Distrib $149.67 $31.410 4.765 52.705 ($2.050) $0.187 diff --git a/docs/FINANCE.FM3 b/docs/FINANCE.FM3 new file mode 100644 index 0000000..d3e6d10 Binary files /dev/null and b/docs/FINANCE.FM3 differ diff --git a/docs/FINANCE.WK3 b/docs/FINANCE.WK3 new file mode 100644 index 0000000..fccb462 Binary files /dev/null and b/docs/FINANCE.WK3 differ diff --git a/docs/FORECAST.FM3 b/docs/FORECAST.FM3 new file mode 100644 index 0000000..290e7cd Binary files /dev/null and b/docs/FORECAST.FM3 differ diff --git a/docs/FORECAST.WK3 b/docs/FORECAST.WK3 new file mode 100644 index 0000000..3bf35d9 Binary files /dev/null and b/docs/FORECAST.WK3 differ diff --git a/docs/FUND.FM3 b/docs/FUND.FM3 new file mode 100644 index 0000000..0bad3fd Binary files /dev/null and b/docs/FUND.FM3 differ diff --git a/docs/FUND.WK3 b/docs/FUND.WK3 new file mode 100644 index 0000000..8d5fce0 Binary files /dev/null and b/docs/FUND.WK3 differ diff --git a/docs/FUNDS.FMT b/docs/FUNDS.FMT new file mode 100644 index 0000000..9008f8f Binary files /dev/null and b/docs/FUNDS.FMT differ diff --git a/docs/FUNDS.WK1 b/docs/FUNDS.WK1 new file mode 100644 index 0000000..d78e71f Binary files /dev/null and b/docs/FUNDS.WK1 differ diff --git a/docs/GAT.TXT b/docs/GAT.TXT new file mode 100644 index 0000000..12994c3 --- /dev/null +++ b/docs/GAT.TXT @@ -0,0 +1,13 @@ +1) FIX FPSHEET PROBLEM + CHANGED COMMON32.LIB SPEC IN CMO32 PROJECT TO + POINT TO I:\PREC\DEV\EXE + REMOVED FPSHEET.CPP/COLTYPE.CPP FROM PROJECT + CMO.C + CASHMAN.C + INFO.C + + + + +2) TEST 32 BIT PRECISION +3) MU1 FILE CONVERSION diff --git a/docs/HOUSE.TXT b/docs/HOUSE.TXT new file mode 100644 index 0000000..07dabda --- /dev/null +++ b/docs/HOUSE.TXT @@ -0,0 +1,93 @@ +Tuesday October 31, 1995 +-------------------------------------------------- +a) call Doug, will send checks - ok (sent) +b) confirm Engineer - ok +c) confirm termite guy - ok +d) call 20th Century regarding distribution - redeemed $3,000.00 +e) deposit checks - ok +f) call Tom - ok +---------------------------------------------------- + +call Anita, try to get copy of survey from homeowner + +1) HouseMaster - Engineers + (516)273-1122 + Barbara + $180.00 fee + + 60.00 per/hr - average 2 hours + + 75.00 cesspool test + ======= + $375.00 + Pending 3:30 appt. + +2) Termite Guy + (516)957-2657 + Dolores + $45.00 + callback when know what engineers are doing + +3) To Doug + Application Fee $250.00 + Appraisal Fee $250.00 + Need the appraisal to get the commitment + Doug Taylor Flagship ph:(516)757-4405 Mortgage + Doug Taylor Flagship (beeper) ph:(516)382-0497 Mortgage + Doug Taylor 225 Main St. Northport NY,11768 + + +4) Tom Larounis - Real Estate Attorney + (516)822-0222 + (516)522-9422 beeper + $750.00 + +costs covered +============= +$ 55.00 - pre-approval application fee +$ 100.00 - binder +$ 250.00 - application fee +$ 250.00 - appraisal fee +$ 405.00 - engineering fee + + + +bank stats +========== +$15,100.00 start + 323.81 check roni - realized + 199.86 check roni - realized + 1,673.96 Lexington Distribution - realized + 2,243.00 Payroll sean Tuesday 10/31/1995 - realized + 300.00 check roni s/b Thursday 11/2/1995 + 100.00 Binder - realized + 250.00 application fee (Flagship) - realized + 250.00 appraisal fee (Flagship) - realized + 405.00 engineering inspection + 760.00 Rent 11/95 + 370.00 car payment 11/95 + 109.00 student loan payment 11/95 + 100.00 electric 11/95 + 200.00 charge cards 11/95 + 50.00 cell phone charges 11/95 + 200.00 phone bill 11/95 + 20.00 cable bill 11/95 + 195.00 transit ticket + 2,349.00 notebook + 1,358.67 Fidelity Investment + 3,000.00 20th Century + 600.00 checks roni (expected 1st and 2nd week November) + 2,243.00 checks sean (expected payroll November 15, 1995) +=========================================================================== +$21,610.63 sub total + 9,000.00 expected 401(k) distribution +======================================== +$30,610.63 + + + 45.00 termite inspection ; this might have been included in Eng charge + + +=========================================================================== +** $2,000.00 remains in the 20th Century account +** $3,000.00 expected net bonus in December, 1995 + + diff --git a/docs/JPEG.TXT b/docs/JPEG.TXT new file mode 100644 index 0000000..3158961 --- /dev/null +++ b/docs/JPEG.TXT @@ -0,0 +1,1065 @@ +CRYX's note about the JPEG decoding algorithm. +Copyright 1999 Cristi Cuturicu. + +DISCLAIMER +........... +You get this file for free, so you cannot have any legal requests from me. +If you don't agree, read no more. +No warranty is provided with this doc, there might be bugs or errors in it +(although I've tried to avoid them), so use the information contained in this +file at your own risk. +This is NOT an official documentation. +All product names mentioned in this file are trademarks or registered trademarks +of their respective owners. +Not for reproduction (electronic or hardcopy) except for personal use. + + +THE JPEG COMPRESSION and THE JPG FILE FORMAT +............................................. + +Long ago, I've been looking on the net a good doc which could have explained to +me the JPEG compression, and particularly the JPG file format. +And recently I've found the ISO-ITU JPEG standard in a file called itu-1150.ps +(JPEG standard = ISO standard 10918-1 or CCITT standard recommendation T.81: + "Information Technology - Digital compression and coding of continuous-tone +still images - Requirements and guidelines") +Though this standard is quite complete, it has a lot of not interesting parts +in its 186 pages, and I had to dig in it, and then write my own JPG viewer, +to get from this standard the main stuff a programmer needs : + The Baseline Sequential DCT JPG compression. + +First a note : Mainly because of the fact that the majority of the JPG files are +Baseline Sequential JPGS, this doc concerns only the Baseline Sequential JPG +compression and particularly the JFIF implementation of it. +It DOES NOT cover the JPG Progresive or Hierarchical compression. +(For more details about these read the itu-1150 standard. + It can be found at www.wotsit.org or somewhere at www.jpeg.org/jpeg) + +I've thought that it would be easier for the reader to understand the JPG +compression if I'll explain the steps of the JPG encoder. +(The decoder steps will be the inverse of the encoder's steps, but in reverse +order, of course) + + +THE JPG ENCODER STEPS +---------------------- + +1) The afine transformation in colour space : [R G B] -> [Y Cb Cr] +--------------------------------------------------------------------- + +(It is defined in the CCIR Recommendation 601) + +(R,G,B are 8-bit unsigned values) + + | Y | | 0.299 0.587 0.114 | | R | | 0 | + | Cb | = |- 0.1687 - 0.3313 0.5 | * | G | + |128| + | Cr | | 0.5 - 0.4187 - 0.0813| | B | |128| + +The new value Y = 0.299*R + 0.587*G + 0.114*B is called the luminance. +It is the value used by the monochrome monitors to represent an RGB colour. +Physiologically, it represents the intensity of an RGB colour perceived by +the eye. +You see that the formula for Y it's like a weighted-filter with different +weights +for each spectral component: the eye is most sensitive to the Green component +then it follows the Red component and the last is the Blue component. + +The values Cb = - 0.1687*R - 0.3313*G + 0.5 *B + 128 + Cr = 0.5 *R - 0.4187*G - 0.0813*B + 128 +are called the chromimance values and represent 2 coordinates in a system +which measures the nuance and saturation of the colour ([Approximately], these +values indicate how much blue and how much red is in that colour). +These 2 coordinates are called shortly the chrominance. + +[Y,Cb,Cr] to [R,G,B] Conversion (The inverse of the previous transform) +-------------------------------- +RGB can be computed directly from YCbCr ( 8-bit unsigned values) as follows: + +R = Y + 1.402 *(Cr-128) +G = Y - 0.34414*(Cb-128) - 0.71414*(Cr-128) +B = Y + 1.772 *(Cb-128) + + +A note relating Y,Cb,Cr to the human visual system +--------------------------------------------------- +The eye, particulary the retina, has as visual analyzers two kind of cells : +Cells for night view which perceive only nuances of gray ranging from intense +white to the darkest black and cells for the day view which perceive the color +nuance. +The first cells, given an RGB colour, detect a gray level similar to that given +by the luminance value. +The second cells, responsible for the perception of the colour nuance, are the +cells which detects a value related to that of the chrominance. + + +2) Sampling +------------ + +The JPEG standard takes into account the fact that the eye seems to be more +sensitive at the luminance of a colour than at the nuance of that colour. +(the white-black view cells have more influence than the day view cells) + +So, on most JPGS, luminance is taken in every pixel while the chrominance is +taken as a medium value for a 2x2 block of pixels. +Note that it is not neccessarily that the chrominance to be taken as a medium +value for a 2x2 block , it could be taken in every pixel, but good compression +results are achieved this way, with almost no loss in visual perception of the +new sampled image. + +A note : The JPEG standard specifies that for every image component (like, for +example Y) must be defined 2 sampling coefficients: one for the horizontal +sampling and one for vertical sampling. +These sampling coefficients are defined in the JPG file as relative to the +maximum sampling coefficient (more on this later). + +3) Level shift +-------------- +All 8-bit unsigned values (Y,Cb,Cr) in the image are "level shifted": they are +converted to an 8-bit signed representation, by subtracting 128 from their +value. + +4) The 8x8 Discrete Cosine Transform (DCT) +------------------------------------------ + +The image is break into 8x8 blocks of pixels, then for each 8x8 block is +applied the DCT transform. Note that if the X dimension of the original image +is not divisible by 8, the encoder should make it divisible, by completing the +remaining right columns (until X becomes a multiple of 8) with the right-most +column of the original image. +Similar, if the Y dimension is not divisible by 8, the encoder should complete +the remaining lines with the bottom-most line of the original image. +The 8x8 blocks are processed from left to right and from top to bottom. + +A note: Since a pixel in the 8x8 block has 3 components (Y,Cb,Cr) the DCT +is applied separately to 3 blocks 8x8: + The first 8x8 block is the block which contains the luminance of the pixels + in the original 8x8 block + The second 8x8 block is the block which contains the Cb value of the pixels + in the original 8x8 block + And, similar, the third 8x8 block contains the Cr values. + +The purpose of the DCT transform is that instead of processing the original +samples, you work with the spatial frequencies present in the original image. +These spatial frequencies are very related to the level of detail present in an +image. High spatial frequencies corresponds to high levels of detail, while +lower frequencies corresponds to lower levels of detail. + +The DCT transform is very similar to the 2D Fourier transform which shifts from +the time domain (the original 8x8 block) to the frequency domain (the new 8x8= +64 coefficients which represents the amplitudes of the spatial frequencies +analyzed) + +The mathematical definition of Forward DCT (FDCT) and Inverse DCT (IDCT) is : + +FDCT: + c(u,v) 7 7 2*x+1 2*y+1 +F(u,v) = --------- * sum sum f(x,y) * cos (------- *u*PI)* cos (------ *v*PI) + 4 x=0 y=0 16 16 + + u,v = 0,1,...,7 + + { 1/2 when u=v=0 + c(u,v) = { + { 1 otherwise + + +IDCT: + 1 7 7 2*x+1 2*y+1 +f(x,y) = --- * sum sum c(u,v)*F(u,v)*cos (------- *u*PI)* cos (------ *v*PI) + 4 u=0 v=0 16 16 + + x,y=0,1...7 + +5) The zig-zag reordering of the 64 DCT coefficients +----------------------------------------------------- + +So, after we performed the DCT transform over a block of 8x8 values, we have +a new 8x8 block. +Then, this 8x8 block is traversed in zig-zag like this : + +(The numbers in the 8x8 block indicate the order in which we traverse the +bidimensional 8x8 matrix) + 0, 1, 5, 6,14,15,27,28, + 2, 4, 7,13,16,26,29,42, + 3, 8,12,17,25,30,41,43, + 9,11,18,24,31,40,44,53, + 10,19,23,32,39,45,52,54, + 20,22,33,38,46,51,55,60, + 21,34,37,47,50,56,59,61, + 35,36,48,49,57,58,62,63 + +As you see , first is the upper-left corner (0,0), then the value at (0,1), +then (1,0) then (2,0), (1,1), (0,2), (0,3), (1,2), (2,1), (3,0) etc. + +After we are done with traversing in zig-zag the 8x8 matrix we have now a vector +with 64 coefficients (0..63) +The reason for this zig-zag traversing is that we traverse the 8x8 DCT +coefficients +in the order of increasing the spatial frequencies. So, we get a vector sorted +by the criteria of the spatial frequency: The first value in the vector (at +index 0) corresponds to the lowest spatial frequency present in the image - +It's called the DC term. As we increase the index in the vector, we get values +corresponding to higher frequencies (The value at index 63 corresponds to the +amplitude of the highest spatial frequency present in the 8x8 block). +The rest of the DCT coefficients are called AC terms. + + +6) Quantization +---------------- + +At this stage, we have a sorted vector with 64 values corresponding to the +amplitudes of the 64 spatial frequencies present in the 8x8 block. + +These 64 values are quantized: Each value is divided by a dividend specified +in a vector with 64 values --- the quantization table , then it's rounded to +the nearest integer. + + for (i = 0 ; i<=63; i++ ) + vector[i] = (int) (vector[i] / quantization_table[i] + 0.5) + +Here is the example of the quantization table for luminance(Y) given in an +annex of the JPEG standard.(It is given in a form of an 8x8 block; in order to +obtain a 64 vector it should be zig-zag reordered) + 16 11 10 16 24 40 51 61 + 12 12 14 19 26 58 60 55 + 14 13 16 24 40 57 69 56 + 14 17 22 29 51 87 80 62 + 18 22 37 56 68 109 103 77 + 24 35 55 64 81 104 113 92 + 49 64 78 87 103 121 120 101 + 72 92 95 98 112 100 103 99 +This table is based upon "psychovisual thresholding" , it has "been used with +good results on 8-bit per sample luminance and chrominance images". +Most existing coders use simple multiples of this example, but the values are +not claimed to be optimal (An encoder can use ANY OTHER quantization table) +The table is specified in the JPEG file with the DQT(Define Quantization Table) +marker. +NOTE: In the JPG file, the quantization table is defined BEFORE zig-zag +reordering, so you should zig-zag reorder it. +Most commonly there is one table for Y, and another one for the chrominance +(Cb and Cr). + +The quantization process has the key role in the JPEG compression. +It is the process which removes the high frequencies present in the original +image -- in consequence the high detail. +We do this because of the fact that the eye is much more sensitive to lower +spatial frequencies than to higher frequencies, so we can remove, with very +little visual loss, higher frequencies. +This is done by dividing values at high indexes in the vector (the amplitudes +of higher frequencies) with larger values than the values by which are divided +the amplitudes of lower frequencies. +The bigger the values in the quantization table are, the bigger is the error +(in consequence the visual error) introduced by this lossy process, and the +smaller is the visual quality. + +Another important fact is that in most images the colour varies slow from one +pixel to another, so most images will have a small quantity of high detail +-> a small amount (small amplitudes) of high spatial frequencies - but they have +a lot of image information contained in the low spatial frequencies. + +In consequence in the new quantized vector, at high spatial frequencies, we'll +have a lot of consecutive zeroes. + + +7) The Zero Run Length Coding (RLC) +------------------------------- + +Now we have the quantized vector with a lot of consecutive zeroes. We can +exploit +this by run length coding the consecutive zeroes. +IMPORTANT: You'll see later why, but here we skip the encoding of the first + coefficient of the vector (the DC coefficient) which is coded a bit different. +(I'll present its coding later on this doc) +Let's consider the original 64 vector a 63 vector (it's the 64 vector without +the first coefficient) + + +Say that we have 57,45,0,0,0,0,23,0,-30,-16,0,0,1,0,0,0, 0 , 0 ,0 , only 0,..,0 + +Here it is how the RLC JPEG compression is done for this example : + +(0,57) ; (0,45) ; (4,23) ; (1,-30) ; (0,-16) ; (2,1) ; EOB + +As you see, we encode for each value different by 0 the number of consecutive +zeroes PRECEDING that value, then we add the value. +Another note : EOB is the short form for End of Block, it's a special coded +value (like a marker).If we've reached in a position in the original vector from +which we have till the end of the vector only zeroes, we'll mark that position +with EOB and finish the RLC compression of the quantized vector. + + +[Note that if the quantized vector doesn't finishes with zeroes (has the last +element not 0) we'll not have the EOB marker.] + +ACTUALLY, EOB has as an equivalent (0,0) and it will be (later) Huffman coded +like (0,0), so we'll encode : + (0,57) ; (0,45) ; (4,23) ; (1,-30) ; (0,-16) ; (2,1) ; (0,0) + + +Another MAJOR thing: Say that somewhere in the quantized vector + we have: 57, eighteeen zeroes, 3, 0,0 ,0,0 2, thirty-three zeroes, 895, EOB + +The JPG Huffman coding makes the restriction (you'll see later why) that +the number of previous 0's to be coded as a 4-bit value, so it can't overpass +the value 15 (0xF). + +So, the previous example would be coded as : + (0,57) ; (15,0) (2,3) ; (4,2) ; (15,0) (15,0) (1,895) , (0,0) + +(15,0) is a special coded value which indicates that there follows 16 +consecutive +zeroes.Note : 16 zeroes not 15 zeroes. + +8) The final step === Huffman coding +------------------------------------- + +First an IMPORTANT note : Instead of storing the actual value , the JPEG +standard +specifies that we store the minimum size in bits in which we can keep that value +(it's called the category of that value) and then a bit-coded representation +of that value like this: + + Values Category Bits for the value + 0 0 - + -1,1 1 0,1 + -3,-2,2,3 2 00,01,10,11 + -7,-6,-5,-4,4,5,6,7 3 000,001,010,011,100,101,110,111 + -15,..,-8,8,..,15 4 0000,..,0111,1000,..,1111 + -31,..,-16,16,..,31 5 00000,..,01111,10000,..,11111 + -63,..,-32,32,..,63 6 . + -127,..,-64,64,..,127 7 . + -255,..,-128,128,..,255 8 . + -511,..,-256,256,..,511 9 . + -1023,..,-512,512,..,1023 10 . + -2047,..,-1024,1024,..,2047 11 . + -4095,..,-2048,2048,..,4095 12 . + -8191,..,-4096,4096,..,8191 13 . + -16383,..,-8192,8192,..,16383 14 . +-32767,..,-16384,16384,..,32767 15 . + + +In consequence for the previous example: + (0,57) ; (0,45) ; (4,23) ; (1,-30) ; (0,-8) ; (2,1) ; (0,0) + +let's encode ONLY the right value of these pairs, except the pairs that are +special markers like (0,0) or (if we would have) (15,0) + + + 57 is in the category 6 and it is bit-coded 111001 , so we'll encode it +like (6,111001) + 45 , similar, will be coded as (6,101101) + 23 -> (5,10111) + -30 -> (5,00001) + -8 -> (4,0111) + 1 -> (1,1) + +And now , we'll write again the string of pairs: + + (0,6), 111001 ; (0,6), 101101 ; (4,5), 10111; (1,5), 00001; (0,4) , 0111 ; + (2,1), 1 ; (0,0) + +The pairs of 2 values enclosed in bracket paranthesis, can be represented on a +byte because of the fact that each of the 2 values can be represented on a +nibble +(the counter of previous zeroes is always smaller than 15 and so it is the +category of the numbers [numbers encoded in a JPG file are in range - +32767..32767]). +In this byte, the high nibble represents the number of previous 0s, and the +lower nibble is the category of the new value different by 0. + +The FINAL step of the encoding consists in Huffman encoding this byte, and then +writing in the JPG file, as a stream of bits, the Huffman code of this byte, +followed by the remaining bit-representation of that number. + +For example, let's say that for byte 6 ( the equivalent of (0,6) ) we have a +Huffman code = 111000; + for byte 69 = (4,5) (for example) we have 1111111110011001 + 21 = (1,5) --- 11111110110 + 4 = (0,4) --- 1011 + 33 = (2,1) --- 11011 + 0 = EOB = (0,0) --- 1010 + +The final stream of bits written in the JPG file on disk for the previous +example +of 63 coefficients (remember that we've skipped the first coefficient ) is + 111000 111001 111000 101101 1111111110011001 10111 11111110110 00001 + 1011 0111 11011 1 1010 + + +The encoding of the DC coefficient +----------------------------------- +DC is the coefficient in the quantized vector corresponding to the lowest +frequency in the image (it's the 0 frequency) , and (before quantization) is +mathematically = (the sum of 8x8 image samples) / 8 . +(It's like an average value for that block of image samples). +It is said that it contains a lot of energy present in the original 8x8 image +block. (Usually it gets large values). +The authors of the JPEG standard noticed that there's a very close connection +between the DC coefficient of consecutive blocks, so they've decided to encode +in the JPG file the difference between the DCs of consecutive 8x8 blocks +(Note: consecutive 8x8 blocks of the SAME image component, like consecutive +8x8 blocks for Y , or consecutive blocks for Cb , or for Cr) + +Diff = DC - DC + i (i-1) +So DC of the current block (DC ) will be equal to : DC = DC + Diff + i i i-1 + +And in JPG decoding you will start from 0 -- you consider that the first +DC coefficient = 0 ; DC = 0 + 0 +And then you'll add to the current value the value decoded from the JPG +(the Diff value) + +SO, in the JPG file , the first coefficient = the DC coefficient is actually +the difference, and it is Huffman encoded DIFFERENTLY from the encoding of AC +coefficients. + +Here it is how it's done: +(Remember that we now code the Diff value) + +Diff corresponds as you've seen before to a representation made by category and +it's bit coded representation. +In the JPG file it will be Huffman encoded only the category value, like this: + +Diff = (category, bit-coded representation) +Then Diff will be coded as (Huffman_code(category) , bit-coded representation) + +For example, if Diff is equal to -511 , then Diff corresponds to + (9, 000000000) +Say that 9 has a Huffman code = 1111110 +(In the JPG file, there are 2 Huffman tables for an image component: one for DC +and one for AC) + +In the JPG file, the bits corresponding to the DC coefficient will be: + 1111110 000000000 +And,applied to this example of DC and to the previous example of ACs, for this +vector with 64 coefficients, THE FINAL STREAM OF BITS written in the JPG file +will be: + + 1111110 000000000 111000 111001 111000 101101 1111111110011001 10111 + 11111110110 00001 1011 0111 11011 1 1010 + +(In the JPG file , first it's encoded DC then ACs) + + +THE HUFFMAN DECODER (A brief summary) for the 64 coefficients (A Data Unit) +of an image component (For example Y) +------------------------------------------------------------- + +So when you decode a stream of bits from the image in the JPG file, you'll do: + +Init DC with 0. + +1) First the DC coefficient decode : + a) Fetch a valid Huffman code (you check if it exists in the Huffman + DC table) + b) See at what category this Huffman code corresponds + c) Fetch N = category bits , and determine what value is represented + by (category, the N bits fetched) = Diff + d) DC + = Diff + e) write DC in the 64 vector : " vector[0]=DC " + +2) The 63 AC coefficients decode : + +------- FOR every AC coefficient UNTIL (EOB_encountered OR AC_counter=64) + + a) Fetch a valid Huffman code (check in the AC Huffman table) + b) Decode that Huffman code : The Huffman code corresponds to + (nr_of_previous_0,category) +[Remember: EOB_encountered = TRUE if (nr_of_previous_0,category) = (0,0) ] + + c) Fetch N = category bits, and determine what value is represented by + (category,the N bits fetched) = AC_coefficient + d) Write in the 64 vector, a number of zeroes = nr_of_previous_zero + e) increment the AC_counter with nr_of_previous_0 + f) Write AC_coefficient in the vector: + " vector[AC_counter]=AC_coefficient " +----------------- + +Next Steps +----------- +So, now we have a 64 elements vector.We'll do the reverse of the steps presented +in this doc: + +1) Dequantize the 64 vector : "for (i=0;i<=63;i++) vector[i]*=quant[i]" +2) Re-order from zig-zag the 64 vector into an 8x8 block +3) Apply the Inverse DCT transform to the 8x8 block + +Repeat the upper process [ Huffman decoder, steps 1), 2) and 3)] for every +8x8 block of every image component (Y,Cb,Cr). + +4) Up-sample if it's needed +5) Level shift samples (add 128 to the all 8-bit signed values in the 8x8 blocks +resulting from the IDCT transform) +6) Tranform YCbCr to RGB + +7--- And VOILA ... the JPG image + + +The JPEG markers and/or how it's organized the image information in the JPG file +(The Byte level) +-------------------------------------------------------------------------------- +NOTE: The JPEG/JFIF file format uses Motorola format for words, NOT Intel +format, +i.e. : high byte first, low byte last -- (ex: the word FFA0 will be written in +the JPEG file in the order : FF at the low offset , A0 at the higher offset) + +The JPG standard specifies that the JPEG file is composed mostly of pieces +called +"segments". +A segment is a stream of bytes with length <= 65535.The segment beginning is +specified with a marker. +A marker = 2 bytes beginning with 0xFF ( the C hexadecimal notation for 255), +and ending with a byte different by 0 and 0xFF. +Ex: 'FFDA' , 'FFC4', 'FFC0'. +Each marker has a meaning: the second byte (different by 0 and 0xFF) specifies +what does that marker. +For example, there is a marker which specifies that you should start the +decoding +process , this is called (the JPG standard's terminology): + SOS=Start Of Scan = 'FFDA' + +Another marker called DQT = Define Quantization Table = 0xFFDB does what this +name says: specifies that in the JPG file, after the marker (and after 3 bytes, +more on this later) it will follow 64 bytes = the coefficients of the +quantization +table.Remember that in the JPG file, the quantization table is defined BEFORE +zig-zag reordering, so you should zig-zag reorder it. + +If, during the processing of the JPG file, you encounter an 0xFF, then again a +a byte different by 0 (I've told you that the second byte for a marker is not 0) +and this byte has no marker meaning (you cannot find a marker corresponding to +that byte) then the 0xFF byte you encountered must be ignored and skipped. +(In some JPGS, sequences of consecutive 0xFF are for some filling purposes and +must be skipped) + +You see that whenever you encounter 0xFF , you check the next byte and see if +that 0xFF you encountered has a marker meaning or must be skipped. +What happens if we actually need to encode the 0xFF byte in the JPG file +as an *usual* byte (not a marker, or a filling byte) ? +(Say that we need to write a Huffman code which begins with 11111111 (8 bits of +1) at a byte alignment) +The standard says that we simply make the next byte 0 , and write the sequence +'FF00' in the JPG file. +So when your JPG decoder meets the 2 byte 'FF00' sequence, it should consider +just a byte: 0xFF as an usual byte. + +Another thing: You realise that these markers are byte aligned in the JPG file. +What happens if during your Huffman encoding and inserting bits in the JPG +file's +bytes you have not finished to insert bits in a byte, but you need to write a +marker which is byte aligned ? +For the byte alignment of the markers, you SET THE REMAINING BITS UNTIL THE +BEGINNING OF THE NEXT BYTE TO 1, then you write the marker at the next byte. + +A short explanation of some important markers found in a JPG file. +------------------------------------------------------------------- + +SOI = Start Of Image = 'FFD8' + This marker must be present in any JPG file *once* at the beginning of the +file. +(Any JPG file starts with the sequence FFD8.) +EOI = End Of Image = 'FFD9' + Similar to EOI: any JPG file ends with FFD9. + +RSTi = FFDi (where i is in range 0..7) [ RST0 = FFD0, RST7=FFD7] + = Restart Markers +These restart markers are used for resync. At regular intervals, they appear +in the JPG stream of bytes, during the decoding process (after SOS) +(They appear in the order: RST0 -- interval -- RST1 -- interval -- RST2 --... + ...-- RST6 -- interval -- RST7 -- interval -- RST0 --... +) +(Obs: A lot of JPGs don't have restart markers) + +The problem with these markers is that they interrupt the normal bit order in +the JPG's Huffman encoded bitstream. +Remember that for the byte alignment of the markers the remaining bits are set +to 1, so your decoder has to skip at regular intervals the useless filling +bits (those set with 1) and the RST markers. + +------- +Markers... +------- +At the end of this doc, I've included a very well written technical explanation +of the JPEG/JFIF file format, written by Oliver Fromme, the author of the QPEG +viewer. +There you'll find a pretty good and complete definition for the markers. + +But, anyway, here is a list of markers you should check: + +SOF0 = Start Of Frame 0 = FFC0 +SOS = Start Of Scan = FFDA +APP0 = it's the marker used to identify a JPG files which uses the JFIF + specification = FFE0 +COM = Comment = FFFE +DNL = Define Number of Lines = FFDC +DRI = Define Restart Interval = FFDD +DQT = Define Quantization Table = FFDB +DHT = Define Huffman Table = FFC4 + +The Huffman table stored in a JPG file +--------------------------------------- +Here it is how JPEG implements the Huffman tree: instead of a tree, it defines +a table in the JPG file after the DHT (Define Huffman Table) marker. +NOTE: The length of the Huffman codes is restricted to 16 bits + +Basically there are 2 types of Huffman tables in a JPG file : one for DC and +one for AC (actually there are 4 Huffman tables: 2 for DC,AC of luminance + and 2 for DC,AC of chrominance) + +They are stored in the JPG file in the same format which consist of: +1) 16 bytes : + +byte i contains the number of Huffman codes of length i (length in bits) + i ranges from 1 to 16 + 16 +2) A table with the length (in bytes) = sum nr_codes_of_length_i + i=1 + +which contains at location [k][j] (k in 1..16, j in 0..(nr_codes_with_length_k- +1)) +the BYTE value associated to the j-th Huffman code of length k. +(For a fixed length k, the values are stored sorted by the value of the Huffman +code) + +From this table you can find the actual Huffman code associated to a particular +byte. +Here it is an example of how the actual code values are generated: + +Ex: (Note: The number of codes for a given length are here for this particular + example to figure it out, they can have any other values) +SAY that, + + For length 1 we have nr_codes[1]=0, we skip this length + For length 2 we have 2 codes 00 + 01 + For length 3 we have 3 codes 100 + 101 + 110 + For length 4 we have 1 code 1110 + For length 5 we have 1 code 11110 + For length 6 we have 1 code 111110 + For length 7 we have 0 code -- skip + (if we had 1 code for length 7, + we would have 1111110) + For length 8 we have 1 code 11111110 (You see that the code is still + shifted to left though we +skipped + the code value for 7) + ..... + For length 16, .... (the same thing) + +I've told you that in the Huffman table in the JPG file are stored the BYTE +values +for a given code. + +For this particular example of Huffman codes: +Say that in the Huffman table in the JPG file on disk we have (after that 16 +bytes +which contains the nr of Huffman codes with a given length): + 45 57 29 17 23 25 34 28 +These values corressponds , given that particular lengths I gave you before , +to the Huffman codes like this : + + there's no value for code of length 1 + for codes of length 2 : we have 45 57 + for codes of length 3 : 3 values (ex : 29,17,23) + for codes of length 4 : only 1 value (ex: 25) + for codes of length 5 : 1 value ( ex: 34) + .. + for code of length 7, again no value, skip to code with length 8 + for code of length 8 : 1 value 28 + +IMPORTANT note: + For codes of length 2: + the value 45 corresponds to code 00 + 57 to code 01 + For codes of length 3: + the value 29 corresponds to code 100 + 17 ----||--- 101 + 23 ----||--- 110 + + ETC... +I've told you that for a given length the byte values are stored in the order +of increasing the value of the Huffman code. + +Four Huffman tables corresponding to DC and AC tables of the luminance, and +DC and AC tables for the chrominance, are given in an annex of the JPEG +standard as a suggestion for the encoder. + The standard says that these tables have been tested with good compression +results on a lot of images and reccommends them, but the encoder can use any +other Huffman table. A lot of JPG encoders use these tables. + +The JFIF (Jpeg Format Interchange File) file +--------------------------------------------- + The JPEG standard (that in the itu-1150.ps file) is somehow very general, +the JFIF implementation is a particular case of this standard (and it is, of +course, +compatible with the standard) . + The JPEG standard specifies some markers reserved for applications +(by applications I mean particular cases of implementing the standard) + Those markers are called APPn , where n ranges from 0 to 0xF ; APPn = FFEn + The JFIF specification uses the APP0 marker (FFE0) to identify a JPG file which +uses this specification. + You'll see in the JPEG standard that it refers to "image components". +These image components can be (Y,Cb,Cr) or (YIQ) or whatever. + The JFIF implementations uses only (Y,Cb,Cr) for a truecolor JPG, or only Y for +a monochrome JPG. + You can get the JFIF specification from www.jpeg.org + +The sampling factors +-------------------- + +Note: The following explanation covers the encoding of truecolor (3 components) +JPGS; for gray-scaled JPGs there is one component (Y) which is usual no +down-sampled at all, and does not require any inverse transformation like the +inverse (Y,Cb,Cr) -> (R,G,B). In consequence, the gray-scaled JPGS are the +simplest and easiest to decode: for every 8x8 block in the image you do the +Huffman decoding of the RLC coded vector then you reorder it from zig-zag, +dequantize the 64 vector and finally you apply to it the inverse DCT and add +128 (level shift) to the new 8x8 values. + +I've told you that image components are sampled. Usually Y is taken every pixel, +and Cb, Cr are taken for a block of 2x2 pixels. + +But there are some JPGs in which Cb , Cr are taken in every pixel, or some +JPGs where Cb, Cr are taken every 2 pixels (a horizontal sampling at 2 pixels, +and a vertical sampling in every pixel) +The sampling factors for an image component in a JPG file are defined in respect +(relative) to the highest sampling factor. + +Here are the sampling factors for the most usual example: + Y is taken every pixel , and Cb,Cr are taken for a block of 2x2 pixels +Remember: The JFIF specifications states that the sampling factors are 1 or 2. +(it gives a formula for sampling factors which works only when the maximum +sampling factor for each dimension X or Y is <=2) +(The JPEG standard does not specify the sampling factors , it's more general). + +You see that Y will have the highest sampling rate : + Horizontal sampling factor = 2 = HY + Vertical sampling factor = 2 = VY + For Cb , Horizontal sampling factor = 1 = HCb + Vertical sampling factor = 1 = VCb + For Cr Horizontal sampling factor = 1 = HCr + Vertical sampling factor = 1 = VCr +Actually this form of defining the sampling factors is quite useful. +The vector of 64 coefficients for an image component, Huffman encoded, is called + DU = Data Unit (JPEG's standard terminology) + +In the JPG file , the order of encoding Data Units is : + 1) encode Data Units for the first image component: + for (counter_y=1;counter_y<=VY;counter_y++) + for (counter_x=1;counter_x<=HY;counter_x++) + { encode Data Unit for Y } + + 2) encode Data Units for the second image component: + for (counter_y=1;counter_y<=VCb ;counter_y++) + for (counter_x=1;counter_x<=HCb;counter_x++) + { encode Data Unit for Cb } + + 3) finally, for the third component, similar: + for (counter_y=1;counter_y<=VCr;counter_y++) + for (counter_x=1;counter_x<=HCr;counter_x++) + { encode Data Unit for Cr } + +For the example I gave you (HY=2, VY=2 ; HCb=VCb =1, HCr,VCr=1) +here it is a figure ( I think it will clear out things for you) : + YDU YDU CbDU CrDU + YDU YDU +( YDU is a Data unit for Y , and similar CbDU a DU for Cb, CrDU = DU for Cr ) +This usual combination of sampling factors is referred as 2:1:1 for both +vertical and horizontal sampling factors. +And, of course, in the JPG file the encoding order will be : + YDU,YDU,YDU,YDU,CbDU,CrDU + +You know that a DU (64 coefficients) defines a block of 8x8 values , so here +we specified the encoding order for a block of 16x16 image pixels +(An image pixel = an (Y,Cb,Cr) pixel [my notation]) : + Four 8x8 blocks of Y values ( 4 YDUs), one 8x8 block of Cb values (1 CbDU) +and one 8x8 block of Cr values (1 CrDU) + +(Hmax = the maximum horizontal sampling factor , Vmax = the maximum vertical +sampling factor) +In consequence for this example of sampling factors (Hmax = 2, Vmax=2), the +encoder should process SEPARATELY every 16x16 = (Hmax*8 x Vmax*8) image pixels +block in the order mentioned. + +This block of image pixels with the dimensions (Hmax*8,Vmax*8) is called, in +the JPG's standard terminology, an MCU = Minimum Coded Unit +For the previous example : MCU = YDU,YDU,YDU,YDU,CbDU,CrDU + +Another example of sampling factors : + HY =1, VY=1 + HCb=1, VCb=1 + HCr=1, VCr=1 +Figure/order : YDU CbDU CrDU +You see that here is defined an 8x8 image pixel block (MCU) with 3 8x8 blocks: + one for Y, one for Cb and one for Cr (There's no down-sampling at all) +Here (Hmax=1,Vmax=1) the MCU has the dimension (8,8), and MCU = YDU,CbDU,CrDU + +For gray-scaled JPGs you don't have to worry about the order of encoding +data units in an MCU. For these JPGs, an MCU = 1 Data Unit (MCU = YDU) + + +In the JPG file, the sampling factors for every image component are defined +after the marker SOF0 = Start Of Frame 0 = FFC0 + +A brief scheme of decoding a JPG file +-------------------------------------- +The decoder reads from the JPG file the sampling factors, it finds out the +dimensions of an MCU (Hmax*8,Vmax*8) => how many MCUs are in the whole image, +then decodes every MCU present in the original image (a loop for all these +blocks, or until the EOI marker is found [it should be found when the loop +finishes, otherwise you'll get an incomplete image]) - it decodes an MCU +by decoding every Data Unit in the MCU in the order mentioned before, and +finally, writes the decoded (Hmax*8 x Vmax*8) truecolor pixel block into the +(R,G,B) image buffer. + + +MPEG-1 video and JPEG +---------------------- +The interesting part of the MPEG-1 specification (and probably MPEG-2) is that +it relies heavily on the JPEG specification. +It uses a lot of concepts presented here. The reason is that every 15 frames , +or when it's needed, there's an independent frame called I-frame (Intra frame) +which is JPEG coded. +(By the way, that 16x16 image pixels block example I gave you, is called,in the +MPEG's standard terminology, a macroblock) +Except the algorithms for motion compensation, MPEG-1 video relies a lot on the +JPG specifications (the DCT transform , quantization, etc.) + +There's a C source on the net for decoding JPEG standard compliant files, made +by Independent JPEG Group (IJG). You can get it at www.ijg.org + + +Hope you're ready now to start coding your JPG viewer or encoder. + + +About the author of this doc +---------------------------- +The author of this doc is Cristi Cuturicu, student at University Politechnica +in Bucharest (UPB), Department of Computer Science. +You can contact him by e-mail: + cccrx@kermit.cs.pub.ro + cryx@ulise.cs.pub.ro +And if you are a software company who needs a programmer then get in touch. + +A technical explanation of the JPEG/JFIF file format, +written by Oliver Fromme, the author of the QPEG viewer +------------------------------------------------------- +Legal NOTE: The legal rules mentioned in the Disclaimer in top of this file +apply also to the following informations so neither Oliver Fromme, neither I +can be held responsible for errors or bugs in the following informations. + +The author of the following informations is: + Oliver Fromme + Leibnizstr. 18-61 + 38678 Clausthal + GERMANY + +JPEG/JFIF file format: +~~~~~~~~~~~~~~~~~~~~~~ + + - header (2 bytes): $ff, $d8 (SOI) (these two identify a JPEG/JFIF file) + - for JFIF files, an APP0 segment is immediately following the SOI marker, + see below + - any number of "segments" (similar to IFF chunks), see below + - trailer (2 bytes): $ff, $d9 (EOI) + +Segment format: +~~~~~~~~~~~~~~~ + + - header (4 bytes): + $ff identifies segment + n type of segment (one byte) + sh, sl size of the segment, including these two bytes, but not + including the $ff and the type byte. Note, not Intel order: + high byte first, low byte last! + - contents of the segment, max. 65533 bytes. + + Notes: + - There are parameterless segments (denoted with a '*' below) that DON'T + have a size specification (and no contents), just $ff and the type byte. + - Any number of $ff bytes between segments is legal and must be skipped. + +Segment types: +~~~~~~~~~~~~~~ + + *TEM = $01 usually causes a decoding error, may be ignored + + SOF0 = $c0 Start Of Frame (baseline JPEG), for details see below + SOF1 = $c1 dito + SOF2 = $c2 usually unsupported + SOF3 = $c3 usually unsupported + + SOF5 = $c5 usually unsupported + SOF6 = $c6 usually unsupported + SOF7 = $c7 usually unsupported + + SOF9 = $c9 for arithmetic coding, usually unsupported + SOF10 = $ca usually unsupported + SOF11 = $cb usually unsupported + + SOF13 = $cd usually unsupported + SOF14 = $ce usually unsupported + SOF14 = $ce usually unsupported + SOF15 = $cf usually unsupported + + DHT = $c4 Define Huffman Table, for details see below + JPG = $c8 undefined/reserved (causes decoding error) + DAC = $cc Define Arithmetic Table, usually unsupported + + *RST0 = $d0 RSTn are used for resync, may be ignored + *RST1 = $d1 + *RST2 = $d2 + *RST3 = $d3 + *RST4 = $d4 + *RST5 = $d5 + *RST6 = $d6 + *RST7 = $d7 + + SOI = $d8 Start Of Image + EOI = $d9 End Of Image + SOS = $da Start Of Scan, for details see below + DQT = $db Define Quantization Table, for details see below + DNL = $dc usually unsupported, ignore + + SOI = $d8 Start Of Image + EOI = $d9 End Of Image + SOS = $da Start Of Scan, for details see below + DQT = $db Define Quantization Table, for details see below + DNL = $dc usually unsupported, ignore + DRI = $dd Define Restart Interval, for details see below + DHP = $de ignore (skip) + EXP = $df ignore (skip) + + APP0 = $e0 JFIF APP0 segment marker, for details see below + APP15 = $ef ignore + + JPG0 = $f0 ignore (skip) + JPG13 = $fd ignore (skip) + COM = $fe Comment, for details see below + + All other segment types are reserved and should be ignored (skipped). + +SOF0: Start Of Frame 0: +~~~~~~~~~~~~~~~~~~~~~~~ + + - $ff, $c0 (SOF0) + - length (high byte, low byte), 8+components*3 + - data precision (1 byte) in bits/sample, usually 8 (12 and 16 not + supported by most software) + - image height (2 bytes, Hi-Lo), must be >0 if DNL not supported + - image width (2 bytes, Hi-Lo), must be >0 if DNL not supported + - number of components (1 byte), usually 1 = grey scaled, 3 = color YCbCr + or YIQ, 4 = color CMYK) + - for each component: 3 bytes + - component id (1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q) + - sampling factors (bit 0-3 vert., 4-7 hor.) + - quantization table number + + Remarks: + - JFIF uses either 1 component (Y, greyscaled) or 3 components (YCbCr, + sometimes called YUV, colour). + +APP0: JFIF segment marker: +~~~~~~~~~~~~~~~~~~~~~~~~~~ + + - $ff, $e0 (APP0) + - length (high byte, low byte), must be >= 16 + - 'JFIF'#0 ($4a, $46, $49, $46, $00), identifies JFIF + - major revision number, should be 1 (otherwise error) + - minor revision number, should be 0..2 (otherwise try to decode anyway) + - units for x/y densities: + 0 = no units, x/y-density specify the aspect ratio instead + 1 = x/y-density are dots/inch + 2 = x/y-density are dots/cm + - x-density (high byte, low byte), should be <> 0 + - y-density (high byte, low byte), should be <> 0 + - thumbnail width (1 byte) + - thumbnail height (1 byte) + - n bytes for thumbnail (RGB 24 bit), n = width*height*3 + + Remarks: + - If there's no 'JFIF'#0, or the length is < 16, then it is probably not + a JFIF segment and should be ignored. + - Normally units=0, x-dens=1, y-dens=1, meaning that the aspect ratio is + 1:1 (evenly scaled). + - JFIF files including thumbnails are very rare, the thumbnail can usually + be ignored. If there's no thumbnail, then width=0 and height=0. + - If the length doesn't match the thumbnail size, a warning may be + printed, then continue decoding. + +DRI: Define Restart Interval: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + - $ff, $dd (DRI) + - length (high byte, low byte), must be = 4 + - restart interval (high byte, low byte) in units of MCU blocks, + meaning that every n MCU blocks a RSTn marker can be found. + The first marker will be RST0, then RST1 etc, after RST7 + repeating from RST0. + +DQT: Define Quantization Table: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + - $ff, $db (DQT) + - length (high byte, low byte) + - QT information (1 byte): + bit 0..3: number of QT (0..3, otherwise error) + bit 4..7: precision of QT, 0 = 8 bit, otherwise 16 bit + - n bytes QT, n = 64*(precision+1) + + Remarks: + - A single DQT segment may contain multiple QTs, each with its own + information byte. + - For precision=1 (16 bit), the order is high-low for each of the 64 words. + +DAC: Define Arithmetic Table: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Current software does not support arithmetic coding for legal reasons. + JPEG files using arithmetic coding can not be processed. + +DHT: Define Huffman Table: +~~~~~~~~~~~~~~~~~~~~~~~~~~ + + - $ff, $c4 (DHT) + - length (high byte, low byte) + - HT information (1 byte): + bit 0..3: number of HT (0..3, otherwise error) + bit 4 : type of HT, 0 = DC table, 1 = AC table + bit 5..7: not used, must be 0 + - 16 bytes: number of symbols with codes of length 1..16, the sum of these + bytes is the total number of codes, which must be <= 256 + - n bytes: table containing the symbols in order of increasing code length + (n = total number of codes) + + Remarks: + - A single DHT segment may contain multiple HTs, each with its own + information byte. + +COM: Comment: +~~~~~~~~~~~~~ + + - $ff, $fe (COM) + - length (high byte, low byte) of the comment = L + - The comment = a stream of bytes with the length = L + +SOS: Start Of Scan: +~~~~~~~~~~~~~~~~~~~ + + - $ff, $da (SOS) + - length (high byte, low byte), must be 6+2*(number of components in scan) + - number of components in scan (1 byte), must be >= 1 and <=4 (otherwise + error), usually 1 or 3 + - for each component: 2 bytes + - component id (1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q), see SOF0 + - Huffman table to use: + - bit 0..3: AC table (0..3) + - bit 4..7: DC table (0..3) + - 3 bytes to be ignored (???) + + Remarks: +- The image data (scans) is immediately following the SOS segment. + diff --git a/docs/LOCATE.BAT b/docs/LOCATE.BAT new file mode 100644 index 0000000..2c2f6a4 --- /dev/null +++ b/docs/LOCATE.BAT @@ -0,0 +1,3 @@ +@echo off +grep %1 contact.txt + diff --git a/docs/MC68HC11.HTM b/docs/MC68HC11.HTM new file mode 100644 index 0000000..2a905ce --- /dev/null +++ b/docs/MC68HC11.HTM @@ -0,0 +1,426 @@ + + + + + + + + + + +MC68HC11F1 Technical Data - HTML Created 04-11-1998 + + + +

Click here for: +

Return to Outline +
End of This file +
Prior text +

+ +

SECTION 3
+
CENTRAL PROCESSING UNIT

+ +

This section presents information on M68HC11 + central processing unit (CPU) architecture. Data types, addressing + modes, the instruction set, and the extended addressing range required + to support this MCU's memory expansion feature are also included, as + are special operations such as subroutine calls and interrupts. + +

The CPU is designed to treat all peripheral, + I/O, and memory locations identically as addresses in the 64 Kbyte + memory map. This is referred to as memory-mapped I/O. There are no + special instructions for I/O that are separate from those used for + memory. This architecture also allows accessing an operand from an + external memory location with no execution-time penalty. + +

3.1 CPU Registers

+ +

M68HC11 CPU registers are an integral part + of the CPU and are not addressed as if they were memory locations. The + seven registers, discussed in the following paragraphs, are shown in + Figure 3-1 + . + +

c3f3-1 + +

Figure 3-1 Programming + Model

+ +

3.1.1 Accumulators A, B, and D

+ +

Accumulators A and B are general-purpose + 8-bit registers that hold operands and results of arithmetic + calculations or data manipulations. For some instructions, these two + accumulators are treated as a single double-byte (16-bit) accumulator + called accumulator D. Although most instructions can use accumulators A + or B interchangeably, the following exceptions apply: + +

The ABX and ABY instructions add the + contents of 8-bit accumulator B to the contents of 16-bit register X or + Y, but there are no equivalent instructions that use A instead of B. + +

The TAP and TPA instructions transfer data + from accumulator A to the condition code register, or from the + condition code register to accumulator A, however, there are no + equivalent instructions that use B rather than A. + +

The decimal adjust accumulator A (DAA) + instruction is used after binary-coded decimal (BCD) arithmetic + operations, but there is no equivalent BCD instruction to adjust + accumulator B. + +

The add, subtract, and compare instructions + associated with both A and B (ABA, SBA, and CBA) only operate in one + direction, making it important to plan ahead to ensure that the correct + operand is in the correct accumulator. + +

3.1.2 Index Register X (IX)

+ +

The IX register provides a 16-bit indexing + value that can be added to the 8-bit offset provided in an instruction + to create an effective address. The IX register can also be used as a + counter or as a temporary storage register. + +

3.1.3 Index Register Y (IY)

+ +

The 16-bit IY register performs an indexed + mode function similar to that of the IX register. However, most + instructions using the IY register require an extra byte of machine + code and an extra cycle of execution time because of the way the opcode + map is implemented. Refer to + + 3.3 Opcodes and Operands + for further information. + +

3.1.4 Stack Pointer (SP)

+ +

The M68HC11 CPU has an automatic program + stack. This stack can be located anywhere in the address space and can + be any size up to the amount of memory available in the system. + Normally the SP is initialized by one of the first instructions in an + application program. The stack is configured as a data structure that + grows downward from high memory to low memory. Each time a new byte is + pushed onto the stack, the SP is decremented. Each time a byte is + pulled from the stack, the SP is incremented. At any given time, the SP + holds the 16-bit address of the next free location in the stack. + Figure 3-2 + is a summary of SP operations. + +

c3f3-2 + +

Figure 3-2 Stacking + Operations

+ +

When a subroutine is called by a jump to + subroutine (JSR) or branch to subroutine (BSR) instruction, the address + of the instruction after the JSR or BSR is automatically pushed onto + the stack, least significant byte first. When the subroutine is + finished, a return from subroutine (RTS) instruction is executed. The + RTS pulls the previously stacked return address from the stack, and + loads it into the program counter. Execution then continues at this + recovered return address. + +

When an interrupt is recognized, the current + instruction finishes normally, the return address (the current value in + the program counter) is pushed onto the stack, all of the CPU registers + are pushed onto the stack, and execution continues at the address + specified by the vector for the interrupt. At the end of the interrupt + service routine, an RTI instruction is executed. The RTI instruction + causes the saved registers to be pulled off the stack in reverse order. + Program execution resumes at the return address. + +

There are instructions that push and pull + the A and B accumulators and the X and Y index registers. These + instructions are often used to preserve program context. For example, + pushing accumulator A onto the stack when entering a subroutine that + uses accumulator A, and then pulling accumulator A off the stack just + before leaving the subroutine, ensures that the contents of a register + will be the same after returning from the subroutine as it was before + starting the subroutine. + +

3.1.5 Program Counter (PC)

+ +

The program counter, a 16-bit register, + contains the address of the next instruction to be executed. After + reset, the program counter is initialized from one of six possible + vectors, depending on operating mode and the cause of reset. + +

Table 3-1 Reset Vector Comparison

+ +

  + +

+ + + + + + + + + + + + + + + + +
 POR or Overbar
+            RESET PinClock MonitorCOP Watchdog
Normal$FFFE, F$FFFC, D$FFFA, B
Test or Boot$BFFE, F$BFFC, D$BFFA, B
+ +

3.1.6 Condition Code Register (CCR)

+ +

This 8-bit register contains five condition + code indicators (C, V, Z, N, and H), two interrupt masking bits, (I and + X) and a stop disable bit (S). In the M68HC11 CPU, condition codes are + automatically updated by most instructions. For example, load + accumulator A (LDAA) and store accumulator A (STAA) instructions + automatically set or clear the N, Z, and V condition code flags. + Pushes, pulls, add B to X (ABX), add B to Y (ABY), and + transfer/exchange instructions do not affect the condition codes. Refer + to + Table 3-2 + , which shows what condition codes are affected by a particular + instruction. + +

3.1.6.1 Carry/Borrow (C)

+ +

The C bit is set if the arithmetic logic + unit (ALU) performs a carry or borrow during an arithmetic operation. + The C bit also acts as an error flag for multiply and divide + operations. Shift and rotate instructions operate with and through the + carry bit to facilitate multiple-word shift operations. + +

3.1.6.2 Overflow (V)

+ +

The overflow bit is set if an operation + causes an arithmetic overflow. Otherwise, the V bit is cleared. + +

3.1.6.3 Zero (Z)

+ +

The Z bit is set if the result of an + arithmetic, logic, or data manipulation operation is zero. Otherwise, + the Z bit is cleared. Compare instructions do an internal implied + subtraction and the condition codes, including Z, reflect the results + of that subtraction. A few operations (INX, DEX, INY, and DEY) affect + the Z bit and no other condition flags. For these operations, only = + and - conditions can be determined. + +

3.1.6.4 Negative (N)

+ +

The N bit is set if the result of an + arithmetic, logic, or data manipulation operation is negative (MSB = + 1). Otherwise, the N bit is cleared. A result is said to be negative if + its most significant bit (MSB) is a one. A quick way to test whether + the contents of a memory location has the MSB set is to load it into an + accumulator and then check the status of the N bit. + +

3.1.6.5 Interrupt Mask (I)

+ +

The interrupt request (IRQ) mask (I bit) is + a global mask that disables all maskable interrupt sources. While the I + bit is set, interrupts can become pending, but the operation of the CPU + continues uninterrupted until the I bit is cleared. After any reset, + the I bit is set by default and can only be cleared by a software + instruction. When an interrupt is recognized, the I bit is set after + the registers are stacked, but before the interrupt vector is fetched. + After the interrupt has been serviced, a return from interrupt + instruction is normally executed, restoring the registers to the values + that were present before the interrupt occurred. Normally, the I bit is + zero after a return from interrupt is executed. Although the I bit can + be cleared within an interrupt service routine, “nesting” + interrupts in this way should only be done when there is a clear + understanding of latency and of the arbitration mechanism. Refer to + + SECTION 5 RESETS AND INTERRUPTS + . + +

3.1.6.6 Half Carry (H)

+ +

The H bit is set when a carry occurs between + bits 3 and 4 of the arithmetic logic unit during an ADD, ABA, or ADC + instruction. Otherwise, the H bit is cleared. Half carry is used during + BCD operations. + +

3.1.6.7 X Interrupt Mask (X)

+ +

The Overbar XIRQ mask (X) bit + disables interrupts from the Overbar XIRQ pin. After any + reset, X is set by default and must be cleared by a software + instruction. When an Overbar XIRQ interrupt is + recognized, the X and I bits are set after the registers are stacked, + but before the interrupt vector is fetched. After the interrupt has + been serviced, an RTI instruction is normally executed, causing the + registers to be restored to the values that were present before the + interrupt occurred. The X interrupt mask bit is set only by hardware + (Overbar RESET or Overbar XIRQ acknowledge). X is cleared only by program + instruction (TAP, where the associated bit of A is zero; or RTI, where + bit 6 of the value loaded into the CCR from the stack has been + cleared). There is no hardware action for clearing X. + +

3.1.6.8 Stop Disable (S)

+ +

Setting the STOP disable (S) bit prevents + the STOP instruction from putting the M68HC11 into a low-power stop + condition. If the CPU encounters a STOP instruction while the S bit is + set, it is treated as a no-operation (NOP) instruction, and processing + continues to the next instruction. S is set by reset — STOP + disabled by default. + +

3.2 Data Types

+ +

The M68HC11 CPU supports the following data + types: + +

    + +
  • Bit data + +
  • 8-bit and 16-bit signed and unsigned + integers + +
  • 16-bit unsigned fractions + +
  • 16-bit addresses +
+

A byte is eight bits wide and can be + accessed at any byte location. A word is composed of two consecutive + bytes with the most significant byte at the lower value address. + Because the M68HC11 is an 8-bit CPU, there are no special requirements + for alignment of instructions or operands. + +

3.3 Opcodes and Operands

+ +

The M68HC11 family of microcontrollers uses + 8-bit opcodes. Each opcode identifies a particular instruction and + associated addressing mode to the CPU. Several opcodes are required to + provide each instruction with a range of addressing capabilities. Only + 256 opcodes would be available if the range of values were restricted + to the number able to be expressed in 8-bit binary numbers. + +

A four-page opcode map has been implemented + to expand the number of instructions. An additional byte, called a + prebyte, directs the processor from page 0 of the opcode map to one of + the other three pages. As its name implies, the additional byte + precedes the opcode. + +

A complete instruction consists of a + prebyte, if any, an opcode, and zero, one, two, or three operands. The + operands contain information the CPU needs for executing the + instruction. Complete instructions can be from one to five bytes long. + +

3.4 Addressing Modes

+ +

Six addressing modes can be used to access + memory: immediate, direct, extended, indexed, inherent, and relative. + These modes are detailed in the following paragraphs. All modes except + inherent mode use an effective address. The effective address is the + memory address from which the argument is fetched or stored, or the + address from which execution is to proceed. The effective address can + be specified within an instruction, or it can be calculated. + +

3.4.1 Immediate

+ +

In the immediate addressing mode an argument + is contained in the byte(s) immediately following the opcode. The + number of bytes following the opcode matches the size of the register + or memory location being operated on. There are two-, three-, and four- + (if prebyte is required) byte immediate instructions. The effective + address is the address of the byte following the instruction. + +

3.4.2 Direct

+ +

In the direct addressing mode, the low-order + byte of the operand address is contained in a single byte following the + opcode, and the high-order byte of the address is assumed to be $00. + Addresses $00–$FF are thus accessed directly, using two-byte + instructions. Execution time is reduced by eliminating the additional + memory access required for the high-order address byte. In most + applications, this 256-byte area is reserved for frequently referenced + data. In M68HC11 MCUs, the memory map can be configured for + combinations of internal registers, RAM, or external memory to occupy + these addresses. + +

3.4.3 Extended

+ +

In the extended addressing mode, the + effective address of the argument is contained in two bytes following + the opcode byte. These are three-byte instructions (or four-byte + instructions if a prebyte is required). One or two bytes are needed for + the opcode and two for the effective address. + +

3.4.4 Indexed

+ +

In the indexed addressing mode, an 8-bit + unsigned offset contained in the instruction is added to the value + contained in an index register (IX or IY). The sum is the effective + address. This addressing mode allows referencing any memory location in + the 64 Kbyte address space. These are two- to five-byte instructions, + depending on whether or not a prebyte is required. + +

3.4.5 Inherent

+ +

In the inherent addressing mode, all the + information necessary to execute the instruction is contained in the + opcode. Operations that use only the index registers or accumulators, + as well as control instructions with no arguments, are included in this + addressing mode. These are one- or two-byte instructions. + +

3.4.6 Relative

+ +

The relative addressing mode is used only + for branch instructions. If the branch condition is true, an 8-bit + signed offset included in the instruction is added to the contents of + the program counter to form the effective branch address. Otherwise, + control proceeds to the next instruction. These are usually two-byte + instructions. + +

3.5 Instruction Set

+ +

Refer to + Table 3-2 + , which shows all the M68HC11 instructions in all possible addressing + modes. For each instruction, the table shows the operand construction, + the number of machine code bytes, and execution time in CPU E clock + cycles. + +

Table 3-2 Instruction Set

+ +

c3t3-2a + +

c3t3-2b + +

c3t3-2c + +

c3t3-2d + +

c3t3-2e + +

c3t3-2f + +

c3t3-2g + +

Click here for: +

Return to Outline +
Beginning of This file +
Next text +

+ + + diff --git a/docs/PROFILE.WRI b/docs/PROFILE.WRI new file mode 100644 index 0000000..a614572 Binary files /dev/null and b/docs/PROFILE.WRI differ diff --git a/docs/RESUME/ADDENDUM.DOC b/docs/RESUME/ADDENDUM.DOC new file mode 100644 index 0000000..5007697 Binary files /dev/null and b/docs/RESUME/ADDENDUM.DOC differ diff --git a/docs/RESUME/CHRON1A.DOC b/docs/RESUME/CHRON1A.DOC new file mode 100644 index 0000000..7d9e465 Binary files /dev/null and b/docs/RESUME/CHRON1A.DOC differ diff --git a/docs/RESUME/CHRON1A.RTF b/docs/RESUME/CHRON1A.RTF new file mode 100644 index 0000000..ea0c79f Binary files /dev/null and b/docs/RESUME/CHRON1A.RTF differ diff --git a/docs/RESUME/CHRON1A.WRI b/docs/RESUME/CHRON1A.WRI new file mode 100644 index 0000000..c0d5d73 Binary files /dev/null and b/docs/RESUME/CHRON1A.WRI differ diff --git a/docs/RESUME/CHRON1B.DOC b/docs/RESUME/CHRON1B.DOC new file mode 100644 index 0000000..0f01b66 Binary files /dev/null and b/docs/RESUME/CHRON1B.DOC differ diff --git a/docs/RESUME/CHRON1B.WRI b/docs/RESUME/CHRON1B.WRI new file mode 100644 index 0000000..15fb1db Binary files /dev/null and b/docs/RESUME/CHRON1B.WRI differ diff --git a/docs/RESUME/CHRON1C.DOC b/docs/RESUME/CHRON1C.DOC new file mode 100644 index 0000000..74dedb9 Binary files /dev/null and b/docs/RESUME/CHRON1C.DOC differ diff --git a/docs/RESUME/CHRON1C.WRI b/docs/RESUME/CHRON1C.WRI new file mode 100644 index 0000000..f7d8478 Binary files /dev/null and b/docs/RESUME/CHRON1C.WRI differ diff --git a/docs/RESUME/COMBINED.WRI b/docs/RESUME/COMBINED.WRI new file mode 100644 index 0000000..d4b4dbe Binary files /dev/null and b/docs/RESUME/COMBINED.WRI differ diff --git a/docs/RESUME/COVER.DOC b/docs/RESUME/COVER.DOC new file mode 100644 index 0000000..8e6ea03 Binary files /dev/null and b/docs/RESUME/COVER.DOC differ diff --git a/docs/RESUME/COVER.WRI b/docs/RESUME/COVER.WRI new file mode 100644 index 0000000..1ee7404 Binary files /dev/null and b/docs/RESUME/COVER.WRI differ diff --git a/docs/RESUME/Cover Letter For Honeywell.Doc b/docs/RESUME/Cover Letter For Honeywell.Doc new file mode 100644 index 0000000..1f62d1c Binary files /dev/null and b/docs/RESUME/Cover Letter For Honeywell.Doc differ diff --git a/docs/RESUME/Cover Letter For Lowes.Doc b/docs/RESUME/Cover Letter For Lowes.Doc new file mode 100644 index 0000000..df61386 Binary files /dev/null and b/docs/RESUME/Cover Letter For Lowes.Doc differ diff --git a/docs/RESUME/Cover_EEI.rtf b/docs/RESUME/Cover_EEI.rtf new file mode 100644 index 0000000..3601c7a --- /dev/null +++ b/docs/RESUME/Cover_EEI.rtf @@ -0,0 +1,241 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fcharset0 Arial;}{\f2\froman\fprq2\fcharset0 Times New Roman;}} +{\colortbl ;\red0\green0\blue0;} +{\stylesheet{ Normal;}{\s1 heading 1;}} +{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\keepn\s1\cf1\f0\fs24 June 9, 2010\par +\pard\b\par +\pard\ri-582\par +\b0 Dear Mr. Schumer;\par +\pard\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\cf0 I would like to be considered for the Senior C++ Application Engineer position at EEI.\par +\par +My twenty-plus years of software design and development experience in the financial industry have helped me to achieve a successful track record of engineering and deploying efficient enterprise solutions. In my position with Global Advanced Technology I gained invaluable critical thinking skills, large software design skills, and best practices methodologies. I have worked on trading systems where performance and failover handling are mission critical. In addition, my experience with modeling tools such as Rational Rose and Enterprise Architect have provided me with the ability to design efficiently across various development groups. I have experience with a variety of programming languages including Java, C, C++, and C#.\par +\par +Through challenging team lead positions, I have developed effective interpersonal skills and a strong team-oriented spirit, even while under pressure. I know that these are qualities that EEI is looking for in successful engineers.\par +\par +I have attached my resume for your review. I am enthusiastic about a career path with EEI and I look forward to speaking with you at your earliest convenience. Thank you for your time and consideration.\par +\par +\par +Sincerely,\par +\par +\par +\pard\f1\fs20{\pict\wmetafile8\picwgoal2399\pichgoal1499 +010009000003061000000000e10f000000000400000003010800050000000b0200000000050000 +000c026500a100030000001e000400000007010400e10f0000410b2000cc006400a00000000000 +6400a0000000000028000000a00000006400000001000400000000000000000000000000000000 +00000000000000000000000000ffffff00fefefe00000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000002222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222220022222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222002222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222200222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222200022222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222220022222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222002222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222200222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220022222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222002222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222200222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222220 +022222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222002222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222200222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222220022222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222002222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222200222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222220022222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222002222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222200222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222220022222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222200222222222222 +222222222222222222222222222222222222222002222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222000000022222 +222222222222222222222222222222222222222222200222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220222222222200 +022202220000222220022222222222222222222222222220022222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222220222222222 +222000000000000002200000022222222222222222222222220002222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222220222222 +222220000002220002220000222200022222222222222222222222000222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222220022 +222222220022220020000002200022222002000222222222222222222220022222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +002222222220022222002002000220002222220000022222200002222222220002222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222002222222220022222220000220002000022222000000022000000022222222000222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222200222222220022222220000222200002202222200000002200222000222222200000222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222220222222200022222222200022222000222022222200000220022222002222200000 +002222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222220022222202022222222220002222200022202222220000022002222200022220 +000000022222200222222002222222222222222222222222222222222222222222222222222222 +222222222222222222002222200022222222222000222222002200222222002000000222222002 +222000020000222000002222200002222222222222222222222222222222222222222222222222 +222222222222222222222220222200222222222222200022222200222002222200200000222222 +220022000022200022000200022222000222220000222222222222222222222222222222222222 +222222222222222222222222222002200222222222222220002222222002200222220020000022 +222222202200000222000000000002222220002220000022222222222222222222222222222222 +222222222222222222222222222222220000222222222222222000022222200220022222002000 +002222222202020000022220002222200022222000222000200222222222222222222222222222 +222222222222222222222222222222222222222222222222222222000000022220022202222200 +200000222222222002000002222000222222000022220022200022002222222000000222222222 +222222222222222222222222222222222222222222222222222222222200200002222000220022 +220020000022222222200200000222220002222200000222000220002200000222200220000222 +222222222222222222222222222222222222222222222222222222222222220020000222200022 +002222002200000222222220020000022222000022220000022200022000222200000200022220 +002222222222222222222222222222222222222222222222222222222222222220002002002222 +002200222200220000022222222002000002222220002222202200222002200022200000000022 +222220002222222222222222222222222222222222222222222222222222222222222002200200 +222200022022220022200022222222200200000222222000222220022002200020002222000200 +002222222200222222222222222222222222222222222222222222222222222222222222002220 +000022220002200222000000000222222222022000002222220002222002220020002200222200 +022000022222222000222222222222222222222222222222222222222222222222222222222200 +222000200222200220022200000000022222222202200000222222000222200222002000200022 +222000220002222222220002222222222222222222222222222222222222222222222222222222 +200222200020022220022202222000200002222222202220002002222220002220022220000020 +000222220022000222222222200022222222222222222222222222222222222222222222222222 +222220022220000002222002200222000200000222222222222000200222222000222002222000 +002200022222002220002222222222000222222222222222222222222222222222222222222222 +222222220022222000000022200022002200022000022222222222200022002222200002202222 +220000220002222200022000022222222220002222222222222222222222222222222222222222 +222222222220022222200200002220020200200002222002222222222220002200022220000220 +222222000022000222222002200002222222222200022222222222222222222222222222222222 +222222222222220002222222020000222002000000002222200022222222222000222020222200 +022022222200002200002222200220000022222222222000222222222222222222222222222222 +222222222222222222002222222202000022200222000000222220002222222222200022222222 +220002002222222000220000222220002000002222222222220002222222222222222222222222 +222222222222222222222000222222220020002220022000000000022200222222222220002222 +020222000002222222200022200022222000202020022222222222200022222222222222222222 +222222222222222222222222200222222222222000222002002222222000000002222222222000 +222220022200000222222220002220000222220022202002222222222222002222222222222222 +222222222222222222222222222200222222222222220002200002222222222220000222222222 +200022222200020000022222222000222000022222002222000222222222222200022222222222 +222222222222222222222222222222220022222222222222000220000222222222222200002222 +222220002222222000002002222222200022200002222200222000022222222222222002222222 +222222222222222222222222222222222220022222222222222220000000022222222222222000 +002222222000222222222022222222222222002222000022222022200000222222222222200022 +222222222222222222222222222222222222222002222222222222222000002022222222222222 +222200022222200022222222222222222222222222222200222222222222000022222222222222 +002222222222222222222222222222222222222222200222222222222222200222202222222222 +222222222200022220002222222222222222222222222222220022222222222220002222222222 +222220022222222222222222222222222222222222222220022222222222222220022220222222 +222222222222222200022000222222222222222222222222222222002222222222222222222222 +222222222002222222222222222222222222222222222222222002222222222222222002222002 +222222222222222222222000000022222222222222222222222222222200022222222222222222 +222222222222200022222222222222222222222222222222222222202222222222222222200222 +200222222222222222222222222000002222222222222222222222222222222002222222222222 +222222222222222222002222222222222222222222222222222222222220222222222222222220 +022220022222222222222222222222220000222222222222222222222222222222200222222222 +222222222222222222222200022222222222222222222222222222222222222002222222222222 +222002222200222222222222222222222222200002222222222222222222222222222220022222 +222222222222222222222222222002222222222222222222222222222222222222200222222222 +222222200222220022222222222222222222222200000022222222222222222222222222222002 +222222222222222222222222222222200222222222222222222222222222222222222220022222 +222222222220022222200222222222222222222222220000200222222222222222222222222222 +200022222222222222222222222222222220022222222222222222222222222222222222222002 +222222222222222002222220022222222222222222222222000022002222222222222222222222 +222220002222222222222222222222222222222002222222222222222222222222222222222222 +220222222222222222200222222200222222222222222222222200002220002222222222222222 +222222222200222222222222222222222222222222220222222222222222222222222222222222 +222222002222222222222220022222222002222222222222222222200000222200022222222222 +222222222222220022222222222222222222222222222220022222222222222222222222222222 +222222222200222222222222222002222222220022222222222222222220000022222002222222 +222222222222222222002222222222222222222222222222222002222222222222222222222222 +222222222222222022222222222222200222222222200222222222222222220020002222220022 +222222222222222222222200222222222222222222222222222222200222222222222222222222 +222222222222222222200222222222222220022222222222002222222222222220002200222222 +200222222222222222222222220002222222222222222222222222222222022222222222222222 +222222222222222222222220002222222222222022222222222220022222222222222002222022 +222222002222222222222222222222000222222222222222222222222222222202222222222222 +222222222222222222222222222200222222222222002222222222222200022222222220002222 +202222222200022222222222222222222220022222222222222222222222222222000222222222 +222222222222222222222222222222220002222222222000222222222222222000222222220002 +222220222222222000222222222222222222222002222222222222222222222222222202222222 +222222222222222222222222222222222222200222222222200022222222222222222200000000 +022222220222222222220022222222222222222222200222222222222222222222222222220222 +222222222222222222222222222222222222222222002222222220022222222222222222222220 +022222222222202222222222200222222222222222222220002222222222222222222222222220 +022222222222222222222222222222222222222222222220222222220002222222222222222222 +222222222222222220222222222220002222222222222222222000222222222222222222222222 +222022222222222222222222222222222222222222222222222222222222002222222222222222 +222222222222222222222022222222222200222222222222222222220022222222222222222222 +222222222222222222222222222222222222222222222222222222220022222002222222222222 +222222222222222222222222202222222222222002222222222222222222002222222222222222 +222222222222222222222222222222222222222222222222222222222222200022200222222222 +222222222222222222222222222222222222222222200222222222222222222200222222222222 +222222222222222222222222222222222222222222222222222222222222222222000000222222 +222222222222222222222222222222222222222222222222002222222222222222220022222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222200222222222222222222000222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222220222222222222222222220 +022222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222202222222222222222 +222002222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220222222222222 +222222200222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222220222222 +222222222220022222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222022 +222222222222222202222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +202222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +040000002701ffff030000000000 +}\cf1\b\f0\fs24\par +\b0 Sean M. Kessler\par +\par +\pard\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\cf0 Enclosure: resume\f2\fs20\par +\pard\cf1\b\f0\fs24\par +\par +\b0\par +\cf0\f1\fs20\par +} + \ No newline at end of file diff --git a/docs/RESUME/Cover_GoodMortgage.rtf b/docs/RESUME/Cover_GoodMortgage.rtf new file mode 100644 index 0000000..ab84dd1 --- /dev/null +++ b/docs/RESUME/Cover_GoodMortgage.rtf @@ -0,0 +1,242 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fcharset0 Arial;}{\f2\froman\fprq2\fcharset0 Times New Roman;}} +{\colortbl ;\red0\green0\blue0;} +{\stylesheet{ Normal;}{\s1 heading 1;}} +{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\keepn\s1\cf1\f0\fs24 March 12, 2012\par +\pard\b\par +\pard\ri-582\par +\b0 Dear HR ;\par +\pard\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\cf0 I would like to be considered for a development position at GoodMortgage.\par +\par +My twenty-plus years of software design and development experience in the financial industry have helped me to achieve a successful track record of engineering and deploying efficient enterprise solutions. In my position with Global Advanced Technology I gained invaluable critical thinking skills, large software design skills, and best practices methodologies. I have worked on trading systems where performance and failover handling are mission critical. In addition, my experience with modeling tools such as Rational Rose and Enterprise Architect have provided me with the ability to design efficiently across various development groups. I have experience with a variety of programming languages including Java, C, C++, and C#.\par +\par +Through challenging team lead positions, I have developed effective interpersonal skills and a strong team-oriented spirit, even while under pressure. I know that these are qualities that GoodMortgage is looking for in successful engineers.\par +\par +I have attached my resume for your review. I am enthusiastic about a career path with GoodMortage and I look forward to speaking with you at your earliest convenience. Thank you for your time and consideration.\par +\par +\par +Sincerely,\par +\par +\par +\pard\f1\fs20{\pict\wmetafile8\picwgoal2399\pichgoal1499 +010009000003061000000000e10f000000000400000003010800050000000b0200000000050000 +000c026500a100030000001e000400000007010400e10f0000410b2000cc006400a00000000000 +6400a0000000000028000000a00000006400000001000400000000000000000000000000000000 +00000000000000000000000000ffffff00fefefe00000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000002222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222220022222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222002222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222200222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222200022222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222220022222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222002222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222200222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220022222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222002222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222200222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222220 +022222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222002222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222200222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222220022222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222002222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222200222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222220022222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222002222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222200222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222220022222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222200222222222222 +222222222222222222222222222222222222222002222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222000000022222 +222222222222222222222222222222222222222222200222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220222222222200 +022202220000222220022222222222222222222222222220022222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222220222222222 +222000000000000002200000022222222222222222222222220002222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222220222222 +222220000002220002220000222200022222222222222222222222000222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222220022 +222222220022220020000002200022222002000222222222222222222220022222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +002222222220022222002002000220002222220000022222200002222222220002222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222002222222220022222220000220002000022222000000022000000022222222000222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222200222222220022222220000222200002202222200000002200222000222222200000222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222220222222200022222222200022222000222022222200000220022222002222200000 +002222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222220022222202022222222220002222200022202222220000022002222200022220 +000000022222200222222002222222222222222222222222222222222222222222222222222222 +222222222222222222002222200022222222222000222222002200222222002000000222222002 +222000020000222000002222200002222222222222222222222222222222222222222222222222 +222222222222222222222220222200222222222222200022222200222002222200200000222222 +220022000022200022000200022222000222220000222222222222222222222222222222222222 +222222222222222222222222222002200222222222222220002222222002200222220020000022 +222222202200000222000000000002222220002220000022222222222222222222222222222222 +222222222222222222222222222222220000222222222222222000022222200220022222002000 +002222222202020000022220002222200022222000222000200222222222222222222222222222 +222222222222222222222222222222222222222222222222222222000000022220022202222200 +200000222222222002000002222000222222000022220022200022002222222000000222222222 +222222222222222222222222222222222222222222222222222222222200200002222000220022 +220020000022222222200200000222220002222200000222000220002200000222200220000222 +222222222222222222222222222222222222222222222222222222222222220020000222200022 +002222002200000222222220020000022222000022220000022200022000222200000200022220 +002222222222222222222222222222222222222222222222222222222222222220002002002222 +002200222200220000022222222002000002222220002222202200222002200022200000000022 +222220002222222222222222222222222222222222222222222222222222222222222002200200 +222200022022220022200022222222200200000222222000222220022002200020002222000200 +002222222200222222222222222222222222222222222222222222222222222222222222002220 +000022220002200222000000000222222222022000002222220002222002220020002200222200 +022000022222222000222222222222222222222222222222222222222222222222222222222200 +222000200222200220022200000000022222222202200000222222000222200222002000200022 +222000220002222222220002222222222222222222222222222222222222222222222222222222 +200222200020022220022202222000200002222222202220002002222220002220022220000020 +000222220022000222222222200022222222222222222222222222222222222222222222222222 +222220022220000002222002200222000200000222222222222000200222222000222002222000 +002200022222002220002222222222000222222222222222222222222222222222222222222222 +222222220022222000000022200022002200022000022222222222200022002222200002202222 +220000220002222200022000022222222220002222222222222222222222222222222222222222 +222222222220022222200200002220020200200002222002222222222220002200022220000220 +222222000022000222222002200002222222222200022222222222222222222222222222222222 +222222222222220002222222020000222002000000002222200022222222222000222020222200 +022022222200002200002222200220000022222222222000222222222222222222222222222222 +222222222222222222002222222202000022200222000000222220002222222222200022222222 +220002002222222000220000222220002000002222222222220002222222222222222222222222 +222222222222222222222000222222220020002220022000000000022200222222222220002222 +020222000002222222200022200022222000202020022222222222200022222222222222222222 +222222222222222222222222200222222222222000222002002222222000000002222222222000 +222220022200000222222220002220000222220022202002222222222222002222222222222222 +222222222222222222222222222200222222222222220002200002222222222220000222222222 +200022222200020000022222222000222000022222002222000222222222222200022222222222 +222222222222222222222222222222220022222222222222000220000222222222222200002222 +222220002222222000002002222222200022200002222200222000022222222222222002222222 +222222222222222222222222222222222220022222222222222220000000022222222222222000 +002222222000222222222022222222222222002222000022222022200000222222222222200022 +222222222222222222222222222222222222222002222222222222222000002022222222222222 +222200022222200022222222222222222222222222222200222222222222000022222222222222 +002222222222222222222222222222222222222222200222222222222222200222202222222222 +222222222200022220002222222222222222222222222222220022222222222220002222222222 +222220022222222222222222222222222222222222222220022222222222222220022220222222 +222222222222222200022000222222222222222222222222222222002222222222222222222222 +222222222002222222222222222222222222222222222222222002222222222222222002222002 +222222222222222222222000000022222222222222222222222222222200022222222222222222 +222222222222200022222222222222222222222222222222222222202222222222222222200222 +200222222222222222222222222000002222222222222222222222222222222002222222222222 +222222222222222222002222222222222222222222222222222222222220222222222222222220 +022220022222222222222222222222220000222222222222222222222222222222200222222222 +222222222222222222222200022222222222222222222222222222222222222002222222222222 +222002222200222222222222222222222222200002222222222222222222222222222220022222 +222222222222222222222222222002222222222222222222222222222222222222200222222222 +222222200222220022222222222222222222222200000022222222222222222222222222222002 +222222222222222222222222222222200222222222222222222222222222222222222220022222 +222222222220022222200222222222222222222222220000200222222222222222222222222222 +200022222222222222222222222222222220022222222222222222222222222222222222222002 +222222222222222002222220022222222222222222222222000022002222222222222222222222 +222220002222222222222222222222222222222002222222222222222222222222222222222222 +220222222222222222200222222200222222222222222222222200002220002222222222222222 +222222222200222222222222222222222222222222220222222222222222222222222222222222 +222222002222222222222220022222222002222222222222222222200000222200022222222222 +222222222222220022222222222222222222222222222220022222222222222222222222222222 +222222222200222222222222222002222222220022222222222222222220000022222002222222 +222222222222222222002222222222222222222222222222222002222222222222222222222222 +222222222222222022222222222222200222222222200222222222222222220020002222220022 +222222222222222222222200222222222222222222222222222222200222222222222222222222 +222222222222222222200222222222222220022222222222002222222222222220002200222222 +200222222222222222222222220002222222222222222222222222222222022222222222222222 +222222222222222222222220002222222222222022222222222220022222222222222002222022 +222222002222222222222222222222000222222222222222222222222222222202222222222222 +222222222222222222222222222200222222222222002222222222222200022222222220002222 +202222222200022222222222222222222220022222222222222222222222222222000222222222 +222222222222222222222222222222220002222222222000222222222222222000222222220002 +222220222222222000222222222222222222222002222222222222222222222222222202222222 +222222222222222222222222222222222222200222222222200022222222222222222200000000 +022222220222222222220022222222222222222222200222222222222222222222222222220222 +222222222222222222222222222222222222222222002222222220022222222222222222222220 +022222222222202222222222200222222222222222222220002222222222222222222222222220 +022222222222222222222222222222222222222222222220222222220002222222222222222222 +222222222222222220222222222220002222222222222222222000222222222222222222222222 +222022222222222222222222222222222222222222222222222222222222002222222222222222 +222222222222222222222022222222222200222222222222222222220022222222222222222222 +222222222222222222222222222222222222222222222222222222220022222002222222222222 +222222222222222222222222202222222222222002222222222222222222002222222222222222 +222222222222222222222222222222222222222222222222222222222222200022200222222222 +222222222222222222222222222222222222222222200222222222222222222200222222222222 +222222222222222222222222222222222222222222222222222222222222222222000000222222 +222222222222222222222222222222222222222222222222002222222222222222220022222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222200222222222222222222000222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222220222222222222222222220 +022222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222202222222222222222 +222002222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220222222222222 +222222200222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222220222222 +222222222220022222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222022 +222222222222222202222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +202222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +040000002701ffff030000000000 +}\cf1\b\f0\fs24\par +\b0 Sean M. Kessler\par +\par +\pard\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\cf0 Enclosure: resume\f2\fs20\par +\pard\cf1\b\f0\fs24 (631)525-2496\par +\par +\par +\b0\par +\cf0\f1\fs20\par +} + \ No newline at end of file diff --git a/docs/RESUME/Cover_Preferred Financial Stratregies.rtf b/docs/RESUME/Cover_Preferred Financial Stratregies.rtf new file mode 100644 index 0000000..5d2168d --- /dev/null +++ b/docs/RESUME/Cover_Preferred Financial Stratregies.rtf @@ -0,0 +1,242 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fcharset0 Arial;}{\f2\froman\fprq2\fcharset0 Times New Roman;}} +{\colortbl ;\red0\green0\blue0;} +{\stylesheet{ Normal;}{\s1 heading 1;}} +{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\keepn\s1\cf1\f0\fs24 March 12, 2012\par +\pard\b\par +\pard\ri-582\par +\b0 Dear HR ;\par +\pard\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\cf0 I would like to be considered for a development position at Preferred Financial Strategies.\par +\par +My twenty-plus years of software design and development experience in the financial industry have helped me to achieve a successful track record of engineering and deploying efficient enterprise solutions. In my position with Global Advanced Technology I gained invaluable critical thinking skills, large software design skills, and best practices methodologies. I have worked on trading systems where performance and failover handling are mission critical. In addition, my experience with modeling tools such as Rational Rose and Enterprise Architect have provided me with the ability to design efficiently across various development groups. I have experience with a variety of programming languages including Java, C, C++, and C#.\par +\par +Through challenging team lead positions, I have developed effective interpersonal skills and a strong team-oriented spirit, even while under pressure. I know that these are qualities that Preferred Financial Strategies is looking for in successful engineers.\par +\par +I have attached my resume for your review. I am enthusiastic about a career path with GoodMortage and I look forward to speaking with you at your earliest convenience. Thank you for your time and consideration.\par +\par +\par +Sincerely,\par +\par +\par +\pard\f1\fs20{\pict\wmetafile8\picwgoal2399\pichgoal1499 +010009000003061000000000e10f000000000400000003010800050000000b0200000000050000 +000c026500a100030000001e000400000007010400e10f0000410b2000cc006400a00000000000 +6400a0000000000028000000a00000006400000001000400000000000000000000000000000000 +00000000000000000000000000ffffff00fefefe00000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000002222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222220022222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222002222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222200222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222200022222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222220022222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222002222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222200222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220022222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222002222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222200222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222220 +022222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222002222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222200222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222220022222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222002222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222200222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222220022222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222002222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222200222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222220022222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222200222222222222 +222222222222222222222222222222222222222002222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222000000022222 +222222222222222222222222222222222222222222200222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220222222222200 +022202220000222220022222222222222222222222222220022222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222220222222222 +222000000000000002200000022222222222222222222222220002222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222220222222 +222220000002220002220000222200022222222222222222222222000222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222220022 +222222220022220020000002200022222002000222222222222222222220022222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +002222222220022222002002000220002222220000022222200002222222220002222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222002222222220022222220000220002000022222000000022000000022222222000222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222200222222220022222220000222200002202222200000002200222000222222200000222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222220222222200022222222200022222000222022222200000220022222002222200000 +002222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222220022222202022222222220002222200022202222220000022002222200022220 +000000022222200222222002222222222222222222222222222222222222222222222222222222 +222222222222222222002222200022222222222000222222002200222222002000000222222002 +222000020000222000002222200002222222222222222222222222222222222222222222222222 +222222222222222222222220222200222222222222200022222200222002222200200000222222 +220022000022200022000200022222000222220000222222222222222222222222222222222222 +222222222222222222222222222002200222222222222220002222222002200222220020000022 +222222202200000222000000000002222220002220000022222222222222222222222222222222 +222222222222222222222222222222220000222222222222222000022222200220022222002000 +002222222202020000022220002222200022222000222000200222222222222222222222222222 +222222222222222222222222222222222222222222222222222222000000022220022202222200 +200000222222222002000002222000222222000022220022200022002222222000000222222222 +222222222222222222222222222222222222222222222222222222222200200002222000220022 +220020000022222222200200000222220002222200000222000220002200000222200220000222 +222222222222222222222222222222222222222222222222222222222222220020000222200022 +002222002200000222222220020000022222000022220000022200022000222200000200022220 +002222222222222222222222222222222222222222222222222222222222222220002002002222 +002200222200220000022222222002000002222220002222202200222002200022200000000022 +222220002222222222222222222222222222222222222222222222222222222222222002200200 +222200022022220022200022222222200200000222222000222220022002200020002222000200 +002222222200222222222222222222222222222222222222222222222222222222222222002220 +000022220002200222000000000222222222022000002222220002222002220020002200222200 +022000022222222000222222222222222222222222222222222222222222222222222222222200 +222000200222200220022200000000022222222202200000222222000222200222002000200022 +222000220002222222220002222222222222222222222222222222222222222222222222222222 +200222200020022220022202222000200002222222202220002002222220002220022220000020 +000222220022000222222222200022222222222222222222222222222222222222222222222222 +222220022220000002222002200222000200000222222222222000200222222000222002222000 +002200022222002220002222222222000222222222222222222222222222222222222222222222 +222222220022222000000022200022002200022000022222222222200022002222200002202222 +220000220002222200022000022222222220002222222222222222222222222222222222222222 +222222222220022222200200002220020200200002222002222222222220002200022220000220 +222222000022000222222002200002222222222200022222222222222222222222222222222222 +222222222222220002222222020000222002000000002222200022222222222000222020222200 +022022222200002200002222200220000022222222222000222222222222222222222222222222 +222222222222222222002222222202000022200222000000222220002222222222200022222222 +220002002222222000220000222220002000002222222222220002222222222222222222222222 +222222222222222222222000222222220020002220022000000000022200222222222220002222 +020222000002222222200022200022222000202020022222222222200022222222222222222222 +222222222222222222222222200222222222222000222002002222222000000002222222222000 +222220022200000222222220002220000222220022202002222222222222002222222222222222 +222222222222222222222222222200222222222222220002200002222222222220000222222222 +200022222200020000022222222000222000022222002222000222222222222200022222222222 +222222222222222222222222222222220022222222222222000220000222222222222200002222 +222220002222222000002002222222200022200002222200222000022222222222222002222222 +222222222222222222222222222222222220022222222222222220000000022222222222222000 +002222222000222222222022222222222222002222000022222022200000222222222222200022 +222222222222222222222222222222222222222002222222222222222000002022222222222222 +222200022222200022222222222222222222222222222200222222222222000022222222222222 +002222222222222222222222222222222222222222200222222222222222200222202222222222 +222222222200022220002222222222222222222222222222220022222222222220002222222222 +222220022222222222222222222222222222222222222220022222222222222220022220222222 +222222222222222200022000222222222222222222222222222222002222222222222222222222 +222222222002222222222222222222222222222222222222222002222222222222222002222002 +222222222222222222222000000022222222222222222222222222222200022222222222222222 +222222222222200022222222222222222222222222222222222222202222222222222222200222 +200222222222222222222222222000002222222222222222222222222222222002222222222222 +222222222222222222002222222222222222222222222222222222222220222222222222222220 +022220022222222222222222222222220000222222222222222222222222222222200222222222 +222222222222222222222200022222222222222222222222222222222222222002222222222222 +222002222200222222222222222222222222200002222222222222222222222222222220022222 +222222222222222222222222222002222222222222222222222222222222222222200222222222 +222222200222220022222222222222222222222200000022222222222222222222222222222002 +222222222222222222222222222222200222222222222222222222222222222222222220022222 +222222222220022222200222222222222222222222220000200222222222222222222222222222 +200022222222222222222222222222222220022222222222222222222222222222222222222002 +222222222222222002222220022222222222222222222222000022002222222222222222222222 +222220002222222222222222222222222222222002222222222222222222222222222222222222 +220222222222222222200222222200222222222222222222222200002220002222222222222222 +222222222200222222222222222222222222222222220222222222222222222222222222222222 +222222002222222222222220022222222002222222222222222222200000222200022222222222 +222222222222220022222222222222222222222222222220022222222222222222222222222222 +222222222200222222222222222002222222220022222222222222222220000022222002222222 +222222222222222222002222222222222222222222222222222002222222222222222222222222 +222222222222222022222222222222200222222222200222222222222222220020002222220022 +222222222222222222222200222222222222222222222222222222200222222222222222222222 +222222222222222222200222222222222220022222222222002222222222222220002200222222 +200222222222222222222222220002222222222222222222222222222222022222222222222222 +222222222222222222222220002222222222222022222222222220022222222222222002222022 +222222002222222222222222222222000222222222222222222222222222222202222222222222 +222222222222222222222222222200222222222222002222222222222200022222222220002222 +202222222200022222222222222222222220022222222222222222222222222222000222222222 +222222222222222222222222222222220002222222222000222222222222222000222222220002 +222220222222222000222222222222222222222002222222222222222222222222222202222222 +222222222222222222222222222222222222200222222222200022222222222222222200000000 +022222220222222222220022222222222222222222200222222222222222222222222222220222 +222222222222222222222222222222222222222222002222222220022222222222222222222220 +022222222222202222222222200222222222222222222220002222222222222222222222222220 +022222222222222222222222222222222222222222222220222222220002222222222222222222 +222222222222222220222222222220002222222222222222222000222222222222222222222222 +222022222222222222222222222222222222222222222222222222222222002222222222222222 +222222222222222222222022222222222200222222222222222222220022222222222222222222 +222222222222222222222222222222222222222222222222222222220022222002222222222222 +222222222222222222222222202222222222222002222222222222222222002222222222222222 +222222222222222222222222222222222222222222222222222222222222200022200222222222 +222222222222222222222222222222222222222222200222222222222222222200222222222222 +222222222222222222222222222222222222222222222222222222222222222222000000222222 +222222222222222222222222222222222222222222222222002222222222222222220022222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222200222222222222222222000222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222220222222222222222222220 +022222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222202222222222222222 +222002222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222220222222222222 +222222200222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222220222222 +222222222220022222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222022 +222222222222222202222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +202222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +222222222222222222222222222222222222222222222222222222222222222222222222222222 +040000002701ffff030000000000 +}\cf1\b\f0\fs24\par +\b0 Sean M. Kessler\par +\par +\pard\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\cf0 Enclosure: resume\f2\fs20\par +\pard\cf1\b\f0\fs24 (631)525-2496\par +\par +\par +\b0\par +\cf0\f1\fs20\par +} + \ No newline at end of file diff --git a/docs/RESUME/Resume8a.doc b/docs/RESUME/Resume8a.doc new file mode 100644 index 0000000..aeded18 --- /dev/null +++ b/docs/RESUME/Resume8a.doc @@ -0,0 +1,249 @@ +{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\froman\fcharset0 Times New Roman;}{\f1\fnil\fcharset2 Symbol;}} +{\colortbl ;\red0\green0\blue0;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}{\s5 heading 5;}{\s6 heading 6;}} +\viewkind4\uc1\pard\qc\b\f0\fs48 Sean M. Kessler\par +\b0\i\fs22 126 Biscayne Court\par +Mooresville, N.C. 28117\par +home:704/660-6654\par +cell:631/525-2496\par +\b\fs16 fusionnc@adelphia.net\par +\b0\i0\fs24\par +\pard\fs18 With a solid background in the development of enterprise software solutions, I am seeking a JAVA/C#//C++ developer/architect position employing object oriented analysis and design, modeling, programming, and project management skills in a team oriented environment.\b\par +\b0\fs22\par +\par +\pard\keepn\s3\qc\b Career History\par +\pard\par +\pard\keepn\s6\i Senior Architect/Lead Developer\par +\pard\i0\fs28 Wachovia Corporation\tab\tab\tab\tab\i\fs22 (08/05-Present) Charlotte, N.C.\i0\fs28\par +\pard\keepn\s5\i\fs24 Corporate And Investment Bank Technology - Trading\i0\par +\b0\fs18 Support middle office trading systems which uses Calypso EMS (publish/ subscribe) to perform trade routing to client applications. Designed and implemented trade reconcilation application to identify and correct dropped trades.\b\fs24\par +Fixed Income Technology - Risk Management\tab\tab\tab\tab\tab\par +\pard\i\fs22 N-Tier Portfolio Attribution/Contribution System(C#.NET/WebServices/J2EE)\par +\b0\i0\fs18 Designed and implemented distributed N-Tier portfolio contribution/attribution system using C#.NET WebServices/\par +/.NET remoting and JAVA/JSP front end. This tool manages over 600 portfolios and provides the ability for the portfolio manager to view contribution and attribution across a variety of sectors. The system also allows the portfolio manager to create custom sectors and perform these calculations against any number of nested sectors. A .JSP TreeView provides the ability for the portfolio manager to descend into a particular nesting and view the contribution, attribution, total return, and holdings for a given selection. The system leverages MatLab and C++ modules in order to produce realtime results in a short timeframe. Also designed and implemented a recursive descent compiler to allow the line of business to implement dynamic sector allocation using a scripting language. This system makes heavy use of enterprise design patterns and was designed using the Enterprise Architect UML tool. Also implemented a variety of tools to assist the line of business with quality assurance efforts. Additional responsibilities include full SDLC via PICCT tool, test plans, verification plans, coordinate releases with implementation team(s), ensure that design and implementation follow Wachovia Corporate Governance Policies, assist with business analysis and requirements gathering efforts.\par +\b\fs22\par +\i Senior Architect/Project Manager\par +\i0\fs28 Ziff Brothers Investments\par +\fs24 Quantitative Strategy /Risk and Reporting\par +\i\fs22 N-Tier Risk Analysis System (C# .NET Remote NT)\tab (06/03-06/05) New York, N.Y.\par +\b0\i0\fs18 Designed and implemented distributed N-Tier risk analysis system using C# .NET Remote. The system manages historical market data in support of a suite of financial models which generate buy/sell recommendations. The system also provides a common framework for analytics used by other tiers and GUI products. Designed and implemented portfolio generator tool used by model authors to back-test financial models. This tool provides various views and comparative statistics of a model portfolio over time which enables the model author to compare a theory against market effects. The tool is a client of the risk analysis system. Designed and implemented VaR service to support client calculators. Institutionalized quality assurance practices to ensure the consistency of analytics over time. Additional responsibilities include hiring of new candidates, coordination and prioritization of team member assignments across operations and quantitative strategy groups, review and approval of UML designs, reporting and coordination of project status with CTO. Training of new hires. Ensure that coding standards and best practices are being maintained throughout various levels of the system. Manage team of five developers.\par +\b\fs22\par +\par +\par +\par +\par +\b0\fs18\par +\pard\qc Page 2\par +\pard\par +\b\fs22\par +\par +\i Senior Software Engineer II\par +\i0\fs28 Barra Inc.,\par +\fs24 Equity Trading\par +\i\fs22 N-Tier Broker/Dealer System (J2EE) \tab\tab (10/00-06/03) New York, N.Y.\par +\b0\i0\fs18 Assisted with the complete rewrite of the POSIT system. POSIT is the worlds largest system for electronic matching of equities during the market day. The system was ported from Fortran/C (VMS) to JAVA EJB under WebLogic v6.1. Participated in design and architectural phase using Rational Rose for the object and sequence diagrams. Designed and implemented price client socket modules for retrieval of realtime prices. Designed and implemented logical business transactions using MQSeries for JAVA (JMS). Assisted with development and implementation of publish/subscribe logic using MQSeries under JMS. Designed and implemented MDB components as well as stateless session beans for data access and communications components. Assisted with design of DTD specification and implemented XML serializers for business objects. Assisted with development and optimization of data access components including views, stored procedures, and triggers. Designed and developed custom profiling and performance statistics tools to assist with optimization of system throughput. Assist with hardware and network purchasing decisions with respect to cluster performance. Also responsible for interviewing, technical evaluation, and final recommendation of new hire candidates. Assist junior level staff with project work.\par +\par +\par +\b\i\fs22 Senior Software Engineer\par +\i0\fs28 Electronic Managed Account Inc.,\par +\i\fs22 N-Tier Asset Management- (C++/JAVA EJB) \tab\tab (03/00-09/00) New York, N.Y.\par +\b0\i0\fs18 Assisted with the redesign of server end architecture (C++) to be flexible enough to meet the needs of the company's growing client base. Implemented load balancing and watchdog system software on the server end to assure reliable data delivery and throughput (C++). Implemented various JAVA application and servlet based tools to perform system load testing. Responsible for coordinating project releases with CTO and organizing programming staff to meet these goals. Responsible for coordinating and submitting software release candidates with QA staff. Responsible for interview process of potential candidates and recommendation/hiring of new staff hires.\par +\par +\b\i\fs22 Senior Software Engineer\par +\i0\fs28 Cortex Software LLC\par +\i\fs22 Client/Server Medical (C++/JAVA CORBA) \tab\tab (06/99-03/00) Manhasset, N.Y.\par +\b0\i0\fs18 Designed and developed client server medical tracking system using C++ and JAVA. The servers consisted\par +of C++ and JAVA CORBA servants accessed through servlets. Also converted database from MS-Access\par +to MSSQL using stored procedures to encapsulate business logic. Implemented DCOM based client/server\par +image retrieval subsystem using sink points. Responsible for interviewing and hiring new staff members. Responsible for coordinating project releases with upper management and communication with programming\par +staff to meet these goals.\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\pard\qc\fs22\par +\fs18 Page 3\par +\pard\par +\par +\b\i\fs22 Software Engineer\par +\i0\fs28 Fortis Advisers\par +\i\fs22 Quantitative Analysis Area (C++)\tab\tab\tab (10/97-06/99) New York, N.Y.\par +\cf1\b0\i0\fs18 Wrote application for portfolio managers using Visual C++, Sybase ODBC, which calculates the cost of trading actual holdings (turnover), given tax basis and then translates the dollar cost into a curve tightening in terms of a basis point spread that is needed to offset losses. The application is used extensively during portfolio rebalancing to identify tax efficient trades. Designed, developed and implemented a financial language compiler and interface wizard using Visual C++ that allows actuaries and non-programmers to write financial forecasting models. The interface allows the actuarial staff to use a menu driven interface to construct various financial models. The application generates pseudocode which is compiled and interpreted.\par +\cf0\b\i\fs22 \par +Software Engineer\par +\i0\fs28 Moodys Investors Service\par +\i\fs22 Administrative Systems\tab (C++)\tab\tab\tab\tab (11/96-10/97) New York, N.Y.\par +\cf1\b0\i0\fs18 Provided lead position in upgrading the Moody\rquote s Internal Rating System software through it's second generation. This task centered around the encapsulation of 'C' based objects with their C++ equivalents, consolidation\par +of free-form database queries into stored procedures and the development of an object oriented ratings\par +system.\par +\cf0\b\i\fs22\par +Senior Software Engineer\par +\i0\fs28 Global Advanced Technology Corporation\par +\i\fs22 Collateralized Mortgage Obligations (C++)\tab\tab\tab (04/92-11/96) New York, N.Y.\par +\cf1\b0\i0\fs18 Developed Mortgage Server application in C++ under MS Windows 3.x/95. This application managed a large database containing mortgage pool information with historical factors and geographics. The software allows the client to create generic mortgage pools in order to generate cashflows on TBA's (To-Be-Announced). The software can work together with the company\rquote s CMO product to allow the user to structure various scenarios and generate cash flows. Cold DDE links are used to support interprocess communications between Lotus 123, MS Excel and other internal fixed income software. Developed communications software using Windows 3.x/95 Comm. API and Borland C++ v4.52. This application featured a terminal interface, XMODEM, XMODEM CRC, YMODEM, YMODEM-1k protocols as well as RFC 959(FTP) and was used to provide data updates to clients. Assist junior programmers and PhD staff in project organization and programming techniques. Design software toolbox for development staff to encapsulate commonly used analytics and algorithms such as CatmullRom Cubic Spline, templated (C++) blocks and linked list algorithms.\par +\cf0\b\fs22\par +\i Programmer/Analyst\par +\i0\fs28 Security Pacific National Trust Co.,\par +\i\fs22 Trust Product Systems Area (VAX/MS \lquote C\rquote )\tab\tab\tab (08/90-04/92) New York, N.Y.\par +\cf1\b0\i0\fs18 Developed transaction tracking system for Travel Group which managed accounts receivable, invoice processing and maintained collateral positions for clientele. Developed print spooler and queue for use in P.C. based applications. Developed an expanded memory window library for use in P.C. applications. Developed window library using SMG under VAX VMS for use in Security Pacific E-MAIL system. Converted, enhanced and maintained Global Lending System. Assisted in the development of a database system written in VAX 'C' using RMS. Provided programming support for Trust Product Systems Area.\par +\pard\qc\cf0\fs24\par +\par +\par +\par +\fs22\par +\fs18 Page 4\par +\pard\par +\pard\qc\fs24\par +\par +\pard\b\i\fs22 Senior Programmer Analyst\par +\i0\fs28 Martinaire Holland Inc.,\par +\i\fs22 Management Information Systems (Borland Turbo \lquote C\rquote )\tab (01/90-08/90) Manhassett, N.Y.\par +\cf1\b0\i0\fs18 Developed remote communications system using Borland Turbo 'C' v2.0 which interfaced with a national reservations network. This system was designed to query the reservations database for current flight, seat and equipment loads.\par +\cf0\b\i\fs22\par +Programmer/Information Specialist\par +\i0\fs28 Buck Consultants and Consulting Actuaries Inc.,\par +\i\fs22 Defined Contribution Area (MS Basic/\rquote C\rquote )\tab\tab\tab (01/89-12/89) Secaucus, N.J.\par +\cf1\b0\i0\fs18 Developed record keeping system for Defined Contribution area for the purpose of calculating and maintaining 401(k) pension factors. This system was sold to company clientele along with maintenance contract to provide updated software and data.\par +\cf0\fs24\par +\b\i\fs22 Information Specialist\par +\i0\fs28 Executive Life Insurance Company of New York\par +\i\fs22 Group Annuity Area (Borland \lquote C\rquote )\tab\tab\tab\tab (03/87-01/89) Jericho, N.Y.\par +\cf1\b0\i0\fs18 Assisted programmers in the development and troubleshooting of a retirement annuity system written in OS/VSII COBOL. Developed system in Borland Turbo 'C' to calculate available retirement benefits.\par +\cf0\fs24\par +\par +\b\i\fs22\par +\pard\qc\b0\i0\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\fs18 Page 5\par +\pard\fs24\par +\par +\pard\keepn\s3\qc\b\fs22 Software Skill Summary\par +\pard\qc\b0\par +\par +\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li360\tx360\b Software Engineering Methods:\b0 Extreme Programming. UML and design patterns including J2EE, concurrency and GoF patterns.\par +\b{\pntext\f1\'B7\tab}Modeling Tools:\b0 Enterprise Architect, Visio, Rational Rose, \par +\b{\pntext\f1\'B7\tab}Web Architectures:\b0 J2EE architecture utilizing J2EE orientied design patterns. Extensive multi-tier Java EJB, Servlet and JSP development, EJB, RMI, JDBC, JMS and XML. Microsoft enterprise architecture utilizing multi-tier services .NET and WebServices.\par +\b{\pntext\f1\'B7\tab}Java Enterprise APIs:\b0 Java Servlets, RMI, EJB, JDBC, JNDI, JMS, and JTA.\par +\b{\pntext\f1\'B7\tab}Microsoft .NET Framework:\b0 Remoting with C# .NET and WebServices\par +\b{\pntext\f1\'B7\tab}Web Services:\b0 Apache/Tomcat. Microsoft ASP.NET, IIS.\par +\b{\pntext\f1\'B7\tab}XML Technologies:\b0 DTD, XML-Schema, DOM, SAX.\par +\b{\pntext\f1\'B7\tab}General Programming:\b0 Java, C#, C/C++, BASH, network programming, CORBA, multi-threaded programming, UML, XML and HTML.\par +\b{\pntext\f1\'B7\tab}Database Programming:\b0 Sybase SQL, MSSQL, JDBC and ODBC APIs, ADO.NET.\par +\b{\pntext\f1\'B7\tab}Web, Application and JMS Servers:\b0 JBOSS, BEA WebLogic, Apache/Tomcat, IIS. Experience with WebLogic JMS,IBM MQSeries.\par +\b{\pntext\f1\'B7\tab}Network Protocols: \b0 SSL/HTTPS, HTTP tunneling, HTTP, sockets, SMTP, NNTP, FTP, POP3, DNS, SMB.\par +\b{\pntext\f1\'B7\tab}IDEs:\b0 IBM Eclipse, Symantec VisualCafe, Sun Forte for Java, Sun Workshop, MS Visual C++, EMACS, and Microsoft Visual Studio .NET.\par +\b{\pntext\f1\'B7\tab}Source Code Control:\b0 MS Visual Source Safe, CVS.\par +{\pntext\f1\'B7\tab}Excellent written and verbal communication skills.\par +\pard\fs24\par +\par +\fs18\par +\pard\keepn\s4\qc\cf1\b\fs22 Education\par +\pard\qc\cf0\fs20\par +\par +\pard\fs28\tab New York Institute of Technology\par +\cf1\b0\fs18\tab Courses attended: Systems Programming I (Compiler Theory) [A], Data Structures [A], Calculus I [B+], \tab Calculus II [A], Calculus III [A]. Overall Grade Point Average 3.9.\par +\cf0\fs24\par +\b\fs28\tab State University of New York at Albany\par +\cf1\b0\fs18\tab Awarded B.A. in Cognitive Psychology with minor in Computer Science.\par +\cf0\b\fs28\par +\tab State University of New York at Stony Brook\par +\cf1\b0\fs18\tab Attended part-time, non matriculated. Courses included Business Ethics and Law.\par +\cf0\b\fs28\par +\par +\par +\par +\par +\pard\qc\b0\fs18 Page 6\par +\pard\b\fs28\par +\par +\pard\keepn\s4\qc\cf1\fs20 Certificates/Programs\par +\pard\qc\par +\par +\pard\b0\tab\b Learning Tree. New York, NY\par +\b0\tab Microsoft C# Language.\par +\par +\tab\b Learning Tree. New York, NY\par +\b0\tab Object Oriented Design with UML\par +\par +\tab\b IBM Learning Center. Atlanta, GA\par +\pard\keepn\s2\b0 \tab IBM MQSeries programming I\par + \tab IBM MQSeries programming II\par +\pard\cf0\par +\cf1\tab\b Hobbies\tab\par +\pard\keepn\s2\tab\b0 Applications of Music Theory to Jazz Fusion Guitar.\par +\pard\cf0\tab Sound Engineering, Mixing, and Mastering.\par +\par +\tab\b Favorite Quote\par +\tab\b0 Tell me and I will forget, show me and I might remember, involve me and I will understand.\par +\cf1\i\par +\par +\pard\fi720\cf0\i0 References available on request.\par +\pard\cf1\b\i\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +\par +} + \ No newline at end of file diff --git a/docs/RESUME/Sean Kessler v2010.doc b/docs/RESUME/Sean Kessler v2010.doc new file mode 100644 index 0000000..7c33ec8 Binary files /dev/null and b/docs/RESUME/Sean Kessler v2010.doc differ diff --git a/docs/RESUME/Sean Kessler.doc b/docs/RESUME/Sean Kessler.doc new file mode 100644 index 0000000..5a5c21e Binary files /dev/null and b/docs/RESUME/Sean Kessler.doc differ diff --git a/docs/RESUME/combined.doc b/docs/RESUME/combined.doc new file mode 100644 index 0000000..7326f2f Binary files /dev/null and b/docs/RESUME/combined.doc differ diff --git a/docs/RESUME/combined_6.doc b/docs/RESUME/combined_6.doc new file mode 100644 index 0000000..209ecf5 Binary files /dev/null and b/docs/RESUME/combined_6.doc differ diff --git a/docs/RESUME/combined_7.doc b/docs/RESUME/combined_7.doc new file mode 100644 index 0000000..e1c0034 Binary files /dev/null and b/docs/RESUME/combined_7.doc differ diff --git a/docs/RESUME/combineda.doc b/docs/RESUME/combineda.doc new file mode 100644 index 0000000..562b904 Binary files /dev/null and b/docs/RESUME/combineda.doc differ diff --git a/docs/RFC977~1.HTM b/docs/RFC977~1.HTM new file mode 100644 index 0000000..9b93454 --- /dev/null +++ b/docs/RFC977~1.HTM @@ -0,0 +1,1550 @@ + +rfc977 + + +

rfc977

+Press here +to go to the top of the rfc 'tree'.

+

+
+
+Network Working Group                      Brian Kantor (U.C. San Diego)
+Request for Comments: 977                   Phil Lapsley (U.C. Berkeley)
+                                                           February 1986
+
+                     Network News Transfer Protocol
+                                    
+                A Proposed Standard for the Stream-Based
+                          Transmission of News
+
+Status of This Memo
+
+   NNTP specifies a protocol for the distribution, inquiry, retrieval,
+   and posting of news articles using a reliable stream-based
+   transmission of news among the ARPA-Internet community.  NNTP is
+   designed so that news articles are stored in a central database
+   allowing a subscriber to select only those items he wishes to read.
+   Indexing, cross-referencing, and expiration of aged messages are also
+   provided. This RFC suggests a proposed protocol for the ARPA-Internet
+   community, and requests discussion and suggestions for improvements.
+   Distribution of this memo is unlimited.
+
+1.  Introduction
+
+   For many years, the ARPA-Internet community has supported the
+   distribution of bulletins, information, and data in a timely fashion
+   to thousands of participants.  We collectively refer to such items of
+   information as "news".  Such news provides for the rapid
+   dissemination of items of interest such as software bug fixes, new
+   product reviews, technical tips, and programming pointers, as well as
+   rapid-fire discussions of matters of concern to the working computer
+   professional. News is very popular among its readers.
+
+   There are popularly two methods of distributing such news: the
+   Internet method of direct mailing, and the USENET news system.
+
+1.1.  Internet Mailing Lists
+
+   The Internet community distributes news by the use of mailing lists.
+   These are lists of subscriber's mailbox addresses and remailing
+   sublists of all intended recipients.  These mailing lists operate by
+   remailing a copy of the information to be distributed to each
+   subscriber on the mailing list.  Such remailing is inefficient when a
+   mailing list grows beyond a dozen or so people, since sending a
+   separate copy to each of the subscribers occupies large quantities of
+   network bandwidth, CPU resources, and significant amounts of disk
+   storage at the destination host.  There is also a significant problem
+   in maintenance of the list itself: as subscribers move from one job
+   to another; as new subscribers join and old ones leave; and as hosts
+   come in and out of service.
+
+
+
+
+Kantor & Lapsley                                                [Page 1]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+1.2.  The USENET News System
+
+   Clearly, a worthwhile reduction of the amount of these resources used
+   can be achieved if articles are stored in a central database on the
+   receiving host instead of in each subscriber's mailbox. The USENET
+   news system provides a method of doing just this.  There is a central
+   repository of the news articles in one place (customarily a spool
+   directory of some sort), and a set of programs that allow a
+   subscriber to select those items he wishes to read.  Indexing,
+   cross-referencing, and expiration of aged messages are also provided.
+
+1.3.  Central Storage of News
+
+   For clusters of hosts connected together by fast local area networks
+   (such as Ethernet), it makes even more sense to consolidate news
+   distribution onto one (or a very few) hosts, and to allow access to
+   these news articles using a server and client model.  Subscribers may
+   then request only the articles they wish to see, without having to
+   wastefully duplicate the storage of a copy of each item on each host.
+
+1.4.  A Central News Server
+
+   A way to achieve these economies is to have a central computer system
+   that can provide news service to the other systems on the local area
+   network.  Such a server would manage the collection of news articles
+   and index files, with each person who desires to read news bulletins
+   doing so over the LAN.  For a large cluster of computer systems, the
+   savings in total disk space is clearly worthwhile.  Also, this allows
+   workstations with limited disk storage space to participate in the
+   news without incoming items consuming oppressive amounts of the
+   workstation's disk storage.
+
+   We have heard rumors of somewhat successful attempts to provide
+   centralized news service using IBIS and other shared or distributed
+   file systems.  While it is possible that such a distributed file
+   system implementation might work well with a group of similar
+   computers running nearly identical operating systems, such a scheme
+   is not general enough to offer service to a wide range of client
+   systems, especially when many diverse operating systems may be in use
+   among a group of clients.  There are few (if any) shared or networked
+   file systems that can offer the generality of service that stream
+   connections using Internet TCP provide, particularly when a wide
+   range of host hardware and operating systems are considered.
+
+   NNTP specifies a protocol for the distribution, inquiry, retrieval,
+   and posting of news articles using a reliable stream (such as TCP)
+   server-client model. NNTP is designed so that news articles need only
+
+
+Kantor & Lapsley                                                [Page 2]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   be stored on one (presumably central) host, and subscribers on other
+   hosts attached to the LAN may read news articles using stream
+   connections to the news host.
+
+   NNTP is modelled upon the news article specifications in RFC 850,
+   which describes the USENET news system.  However, NNTP makes few
+   demands upon the structure, content, or storage of news articles, and
+   thus we believe it easily can be adapted to other non-USENET news
+   systems.
+
+   Typically, the NNTP server runs as a background process on one host,
+   and would accept connections from other hosts on the LAN.  This works
+   well when there are a number of small computer systems (such as
+   workstations, with only one or at most a few users each), and a large
+   central server.
+
+1.5.  Intermediate News Servers
+
+   For clusters of machines with many users (as might be the case in a
+   university or large industrial environment), an intermediate server
+   might be used.  This intermediate or "slave" server runs on each
+   computer system, and is responsible for mediating news reading
+   requests and performing local caching of recently-retrieved news
+   articles.
+
+   Typically, a client attempting to obtain news service would first
+   attempt to connect to the news service port on the local machine.  If
+   this attempt were unsuccessful, indicating a failed server, an
+   installation might choose to either deny news access, or to permit
+   connection to the central "master" news server.
+
+   For workstations or other small systems, direct connection to the
+   master server would probably be the normal manner of operation.
+
+   This specification does not cover the operation of slave NNTP
+   servers.  We merely suggest that slave servers are a logical addition
+   to NNTP server usage which would enhance operation on large local
+   area networks.
+
+1.6.  News Distribution
+
+   NNTP has commands which provide a straightforward method of
+   exchanging articles between cooperating hosts. Hosts which are well
+   connected on a local area or other fast network and who wish to
+   actually obtain copies of news articles for local storage might well
+   find NNTP to be a more efficient way to distribute news than more
+   traditional transfer methods (such as UUCP).
+
+
+Kantor & Lapsley                                                [Page 3]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   In the traditional method of distributing news articles, news is
+   propagated from host to host by flooding - that is, each host will
+   send all its new news articles on to each host that it feeds.  These
+   hosts will then in turn send these new articles on to other hosts
+   that they feed.  Clearly, sending articles that a host already has
+   obtained a copy of from another feed (many hosts that receive news
+   are redundantly fed) again is a waste of time and communications
+   resources, but for transport mechanisms that are single-transaction
+   based rather than interactive (such as UUCP in the UNIX-world <1>),
+   distribution time is diminished by sending all articles and having
+   the receiving host simply discard the duplicates.  This is an
+   especially true when communications sessions are limited to once a
+   day.
+
+   Using NNTP, hosts exchanging news articles have an interactive
+   mechanism for deciding which articles are to be transmitted.  A host
+   desiring new news, or which has new news to send, will typically
+   contact one or more of its neighbors using NNTP.  First it will
+   inquire if any new news groups have been created on the serving host
+   by means of the NEWGROUPS command.  If so, and those are appropriate
+   or desired (as established by local site-dependent rules), those new
+   newsgroups can be created.
+
+   The client host will then inquire as to which new articles have
+   arrived in all or some of the newsgroups that it desires to receive,
+   using the NEWNEWS command.  It will receive a list of new articles
+   from the server, and can request transmission of those articles that
+   it desires and does not already have.
+
+   Finally, the client can advise the server of those new articles which
+   the client has recently received.  The server will indicate those
+   articles that it has already obtained copies of, and which articles
+   should be sent to add to its collection.
+
+   In this manner, only those articles which are not duplicates and
+   which are desired are transferred.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Kantor & Lapsley                                                [Page 4]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+2.  The NNTP Specification
+
+2.1.  Overview
+
+   The news server specified by this document uses a stream connection
+   (such as TCP) and SMTP-like commands and responses.  It is designed
+   to accept connections from hosts, and to provide a simple interface
+   to the news database.
+
+   This server is only an interface between programs and the news
+   databases. It does not perform any user interaction or presentation-
+   level functions. These "user-friendly" functions are better left to
+   the client programs, which have a better understanding of the
+   environment in which they are operating.
+
+   When used via Internet TCP, the contact port assigned for this
+   service is 119.
+
+2.2.  Character Codes
+
+   Commands and replies are composed of characters from the ASCII
+   character set.  When the transport service provides an 8-bit byte
+   (octet) transmission channel, each 7-bit character is transmitted
+   right justified in an octet with the high order bit cleared to zero.
+
+2.3.  Commands
+
+   Commands consist of a command word, which in some cases may be
+   followed by a parameter.  Commands with parameters must separate the
+   parameters from each other and from the command by one or more space
+   or tab characters.  Command lines must be complete with all required
+   parameters, and may not contain more than one command.
+
+   Commands and command parameters are not case sensitive. That is, a
+   command or parameter word may be upper case, lower case, or any
+   mixture of upper and lower case.
+
+   Each command line must be terminated by a CR-LF (Carriage Return -
+   Line Feed) pair.
+
+   Command lines shall not exceed 512 characters in length, counting all
+   characters including spaces, separators, punctuation, and the
+   trailing CR-LF (thus there are 510 characters maximum allowed for the
+   command and its parameters).  There is no provision for continuation
+   command lines.
+
+
+
+
+Kantor & Lapsley                                                [Page 5]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+2.4.  Responses
+
+   Responses are of two kinds, textual and status.
+
+2.4.1.  Text Responses
+
+   Text is sent only after a numeric status response line has been sent
+   that indicates that text will follow.  Text is sent as a series of
+   successive lines of textual matter, each terminated with CR-LF pair.
+   A single line containing only a period (.) is sent to indicate the
+   end of the text (i.e., the server will send a CR-LF pair at the end
+   of the last line of text, a period, and another CR-LF pair).
+
+   If the text contained a period as the first character of the text
+   line in the original, that first period is doubled.  Therefore, the
+   client must examine the first character of each line received, and
+   for those beginning with a period, determine either that this is the
+   end of the text or whether to collapse the doubled period to a single
+   one.
+
+   The intention is that text messages will usually be displayed on the
+   user's terminal whereas command/status responses will be interpreted
+   by the client program before any possible display is done.
+
+2.4.2.  Status Responses
+
+   These are status reports from the server and indicate the response to
+   the last command received from the client.
+
+   Status response lines begin with a 3 digit numeric code which is
+   sufficient to distinguish all responses.  Some of these may herald
+   the subsequent transmission of text.
+
+   The first digit of the response broadly indicates the success,
+   failure, or progress of the previous command.
+
+      1xx - Informative message
+      2xx - Command ok
+      3xx - Command ok so far, send the rest of it.
+      4xx - Command was correct, but couldn't be performed for
+            some reason.
+      5xx - Command unimplemented, or incorrect, or a serious
+            program error occurred.
+
+
+
+
+
+
+Kantor & Lapsley                                                [Page 6]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   The next digit in the code indicates the function response category.
+
+      x0x - Connection, setup, and miscellaneous messages
+      x1x - Newsgroup selection
+      x2x - Article selection
+      x3x - Distribution functions
+      x4x - Posting
+      x8x - Nonstandard (private implementation) extensions
+      x9x - Debugging output
+
+   The exact response codes that should be expected from each command
+   are detailed in the description of that command.  In addition, below
+   is listed a general set of response codes that may be received at any
+   time.
+
+   Certain status responses contain parameters such as numbers and
+   names. The number and type of such parameters is fixed for each
+   response code to simplify interpretation of the response.
+
+   Parameters are separated from the numeric response code and from each
+   other by a single space. All numeric parameters are decimal, and may
+   have leading zeros. All string parameters begin after the separating
+   space, and end before the following separating space or the CR-LF
+   pair at the end of the line. (String parameters may not, therefore,
+   contain spaces.) All text, if any, in the response which is not a
+   parameter of the response must follow and be separated from the last
+   parameter by a space.  Also, note that the text following a response
+   number may vary in different implementations of the server. The
+   3-digit numeric code should be used to determine what response was
+   sent.
+
+   Response codes not specified in this standard may be used for any
+   installation-specific additional commands also not specified. These
+   should be chosen to fit the pattern of x8x specified above.  (Note
+   that debugging is provided for explicitly in the x9x response codes.)
+   The use of unspecified response codes for standard commands is
+   prohibited.
+
+   We have provided a response pattern x9x for debugging.  Since much
+   debugging output may be classed as "informative messages", we would
+   expect, therefore, that responses 190 through 199 would be used for
+   various debugging outputs.  There is no requirement in this
+   specification for debugging output, but if such is provided over the
+   connected stream, it must use these response codes.  If appropriate
+   to a specific implementation, other x9x codes may be used for
+   debugging.  (An example might be to use e.g., 290 to acknowledge a
+   remote debugging request.)
+
+
+Kantor & Lapsley                                                [Page 7]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+2.4.3.  General Responses
+
+   The following is a list of general response codes that may be sent by
+   the NNTP server.  These are not specific to any one command, but may
+   be returned as the result of a connection, a failure, or some unusual
+   condition.
+
+   In general, 1xx codes may be ignored or displayed as desired;  code
+   200 or 201 is sent upon initial connection to the NNTP server
+   depending upon posting permission; code 400 will be sent when the
+   NNTP server discontinues service (by operator request, for example);
+   and 5xx codes indicate that the command could not be performed for
+   some unusual reason.
+
+      100 help text
+      190
+        through
+      199 debug output
+
+      200 server ready - posting allowed
+      201 server ready - no posting allowed
+
+      400 service discontinued
+
+      500 command not recognized
+      501 command syntax error
+      502 access restriction or permission denied
+      503 program fault - command not performed
+
+3.  Command and Response Details
+
+   On the following pages are descriptions of each command recognized by
+   the NNTP server and the responses which will be returned by those
+   commands.
+
+   Each command is shown in upper case for clarity, although case is
+   ignored in the interpretation of commands by the NNTP server.  Any
+   parameters are shown in lower case.  A parameter shown in [square
+   brackets] is optional.  For example, [GMT] indicates that the
+   triglyph GMT may present or omitted.
+
+   Every command described in this section must be implemented by all
+   NNTP servers.
+
+
+
+
+
+
+Kantor & Lapsley                                                [Page 8]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   There is no prohibition against additional commands being added;
+   however, it is recommended that any such unspecified command begin
+   with the letter "X" to avoid conflict with later revisions of this
+   specification.
+
+   Implementors are reminded that such additional commands may not
+   redefine specified status response codes.  Using additional
+   unspecified responses for standard commands is also prohibited.
+
+3.1.  The ARTICLE, BODY, HEAD, and STAT commands
+
+   There are two forms to the ARTICLE command (and the related BODY,
+   HEAD, and STAT commands), each using a different method of specifying
+   which article is to be retrieved.  When the ARTICLE command is
+   followed by a message-id in angle brackets ("<" and ">"), the first
+   form of the command is used; when a numeric parameter or no parameter
+   is supplied, the second form is invoked.
+
+   The text of the article is returned as a textual response, as
+   described earlier in this document.
+
+   The HEAD and BODY commands are identical to the ARTICLE command
+   except that they respectively return only the header lines or text
+   body of the article.
+
+   The STAT command is similar to the ARTICLE command except that no
+   text is returned.  When selecting by message number within a group,
+   the STAT command serves to set the current article pointer without
+   sending text. The returned acknowledgement response will contain the
+   message-id, which may be of some value.  Using the STAT command to
+   select by message-id is valid but of questionable value, since a
+   selection by message-id does NOT alter the "current article pointer".
+
+3.1.1.  ARTICLE (selection by message-id)
+
+   ARTICLE <message-id>
+
+   Display the header, a blank line, then the body (text) of the
+   specified article.  Message-id is the message id of an article as
+   shown in that article's header.  It is anticipated that the client
+   will obtain the message-id from a list provided by the NEWNEWS
+   command, from references contained within another article, or from
+   the message-id provided in the response to some other commands.
+
+   Please note that the internally-maintained "current article pointer"
+   is NOT ALTERED by this command. This is both to facilitate the
+   presentation of articles that may be referenced within an article
+
+
+Kantor & Lapsley                                                [Page 9]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   being read, and because of the semantic difficulties of determining
+   the proper sequence and membership of an article which may have been
+   posted to more than one newsgroup.
+
+3.1.2.  ARTICLE (selection by number)
+
+   ARTICLE [nnn]
+
+   Displays the header, a blank line, then the body (text) of the
+   current or specified article.  The optional parameter nnn is the
+
+   numeric id of an article in the current newsgroup and must be chosen
+   from the range of articles provided when the newsgroup was selected.
+   If it is omitted, the current article is assumed.
+
+   The internally-maintained "current article pointer" is set by this
+   command if a valid article number is specified.
+
+   [the following applies to both forms of the article command.] A
+   response indicating the current article number, a message-id string,
+   and that text is to follow will be returned.
+
+   The message-id string returned is an identification string contained
+   within angle brackets ("<" and ">"), which is derived from the header
+   of the article itself.  The Message-ID header line (required by
+   RFC850) from the article must be used to supply this information. If
+   the message-id header line is missing from the article, a single
+   digit "0" (zero) should be supplied within the angle brackets.
+
+   Since the message-id field is unique with each article, it may be
+   used by a news reading program to skip duplicate displays of articles
+   that have been posted more than once, or to more than one newsgroup.
+
+3.1.3.  Responses
+
+   220 n <a> article retrieved - head and body follow
+           (n = article number, <a> = message-id)
+   221 n <a> article retrieved - head follows
+   222 n <a> article retrieved - body follows
+   223 n <a> article retrieved - request text separately
+   412 no newsgroup has been selected
+   420 no current article has been selected
+   423 no such article number in this group
+   430 no such article found
+
+
+
+
+
+Kantor & Lapsley                                               [Page 10]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+3.2.  The GROUP command
+
+3.2.1.  GROUP
+
+   GROUP ggg
+
+   The required parameter ggg is the name of the newsgroup to be
+   selected (e.g. "net.news").  A list of valid newsgroups may be
+   obtained from the LIST command.
+
+   The successful selection response will return the article numbers of
+   the first and last articles in the group, and an estimate of the
+   number of articles on file in the group.  It is not necessary that
+   the estimate be correct, although that is helpful; it must only be
+   equal to or larger than the actual number of articles on file.  (Some
+   implementations will actually count the number of articles on file.
+   Others will just subtract first article number from last to get an
+   estimate.)
+
+   When a valid group is selected by means of this command, the
+   internally maintained "current article pointer" is set to the first
+   article in the group.  If an invalid group is specified, the
+   previously selected group and article remain selected.  If an empty
+   newsgroup is selected, the "current article pointer" is in an
+   indeterminate state and should not be used.
+
+   Note that the name of the newsgroup is not case-dependent.  It must
+   otherwise match a newsgroup obtained from the LIST command or an
+   error will result.
+
+3.2.2.  Responses
+
+   211 n f l s group selected
+           (n = estimated number of articles in group,
+           f = first article number in the group,
+           l = last article number in the group,
+           s = name of the group.)
+   411 no such news group
+
+
+
+
+
+
+
+
+
+
+
+Kantor & Lapsley                                               [Page 11]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+3.3.  The HELP command
+
+3.3.1.  HELP
+
+   HELP
+
+   Provides a short summary of commands that are understood by this
+   implementation of the server. The help text will be presented as a
+   textual response, terminated by a single period on a line by itself.
+
+   3.3.2.  Responses
+
+   100 help text follows
+
+3.4.  The IHAVE command
+
+3.4.1.  IHAVE
+
+   IHAVE <messageid>
+
+   The IHAVE command informs the server that the client has an article
+   whose id is <messageid>.  If the server desires a copy of that
+   article, it will return a response instructing the client to send the
+   entire article.  If the server does not want the article (if, for
+   example, the server already has a copy of it), a response indicating
+   that the article is not wanted will be returned.
+
+   If transmission of the article is requested, the client should send
+   the entire article, including header and body, in the manner
+   specified for text transmission from the server. A response code
+   indicating success or failure of the transferral of the article will
+   be returned.
+
+   This function differs from the POST command in that it is intended
+   for use in transferring already-posted articles between hosts.
+   Normally it will not be used when the client is a personal
+   newsreading program.  In particular, this function will invoke the
+   server's news posting program with the appropriate settings (flags,
+   options, etc) to indicate that the forthcoming article is being
+   forwarded from another host.
+
+   The server may, however, elect not to post or forward the article if
+   after further examination of the article it deems it inappropriate to
+   do so.  The 436 or 437 error codes may be returned as appropriate to
+   the situation.
+
+   Reasons for such subsequent rejection of an article may include such
+
+
+Kantor & Lapsley                                               [Page 12]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   problems as inappropriate newsgroups or distributions, disk space
+   limitations, article lengths, garbled headers, and the like.  These
+   are typically restrictions enforced by the server host's news
+   software and not necessarily the NNTP server itself.
+
+3.4.2.  Responses
+
+   235 article transferred ok
+   335 send article to be transferred.  End with <CR-LF>.<CR-LF>
+   435 article not wanted - do not send it
+   436 transfer failed - try again later
+   437 article rejected - do not try again
+
+   An implementation note:
+
+   Because some host news posting software may not be able to decide
+   immediately that an article is inappropriate for posting or
+   forwarding, it is acceptable to acknowledge the successful transfer
+   of the article and to later silently discard it.  Thus it is
+   permitted to return the 235 acknowledgement code and later discard
+   the received article.  This is not a fully satisfactory solution to
+   the problem.  Perhaps some implementations will wish to send mail to
+   the author of the article in certain of these cases.
+
+3.5.  The LAST command
+
+3.5.1.  LAST
+
+   LAST
+
+   The internally maintained "current article pointer" is set to the
+   previous article in the current newsgroup.  If already positioned at
+   the first article of the newsgroup, an error message is returned and
+   the current article remains selected.
+
+   The internally-maintained "current article pointer" is set by this
+   command.
+
+   A response indicating the current article number, and a message-id
+   string will be returned.  No text is sent in response to this
+   command.
+
+3.5.2.  Responses
+
+   223 n a article retrieved - request text separately
+           (n = article number, a = unique article id)
+
+
+
+Kantor & Lapsley                                               [Page 13]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   412 no newsgroup selected
+   420 no current article has been selected
+   422 no previous article in this group
+
+3.6.  The LIST command
+
+3.6.1.  LIST
+
+   LIST
+
+   Returns a list of valid newsgroups and associated information.  Each
+   newsgroup is sent as a line of text in the following format:
+
+      group last first p
+
+   where <group> is the name of the newsgroup, <last> is the number of
+   the last known article currently in that newsgroup, <first> is the
+   number of the first article currently in the newsgroup, and <p> is
+   either 'y' or 'n' indicating whether posting to this newsgroup is
+   allowed ('y') or prohibited ('n').
+
+   The <first> and <last> fields will always be numeric.  They may have
+   leading zeros.  If the <last> field evaluates to less than the
+   <first> field, there are no articles currently on file in the
+   newsgroup.
+
+   Note that posting may still be prohibited to a client even though the
+   LIST command indicates that posting is permitted to a particular
+   newsgroup. See the POST command for an explanation of client
+   prohibitions.  The posting flag exists for each newsgroup because
+   some newsgroups are moderated or are digests, and therefore cannot be
+   posted to; that is, articles posted to them must be mailed to a
+   moderator who will post them for the submitter.  This is independent
+   of the posting permission granted to a client by the NNTP server.
+
+   Please note that an empty list (i.e., the text body returned by this
+   command consists only of the terminating period) is a possible valid
+   response, and indicates that there are currently no valid newsgroups.
+
+3.6.2.  Responses
+
+   215 list of newsgroups follows
+
+
+
+
+
+
+
+Kantor & Lapsley                                               [Page 14]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+3.7.  The NEWGROUPS command
+
+3.7.1.  NEWGROUPS
+
+   NEWGROUPS date time [GMT] [<distributions>]
+
+   A list of newsgroups created since <date and time> will be listed in
+   the same format as the LIST command.
+
+   The date is sent as 6 digits in the format YYMMDD, where YY is the
+   last two digits of the year, MM is the two digits of the month (with
+   leading zero, if appropriate), and DD is the day of the month (with
+   leading zero, if appropriate).  The closest century is assumed as
+   part of the year (i.e., 86 specifies 1986, 30 specifies 2030, 99 is
+   1999, 00 is 2000).
+
+   Time must also be specified.  It must be as 6 digits HHMMSS with HH
+   being hours on the 24-hour clock, MM minutes 00-59, and SS seconds
+   00-59.  The time is assumed to be in the server's timezone unless the
+   token "GMT" appears, in which case both time and date are evaluated
+   at the 0 meridian.
+
+   The optional parameter "distributions" is a list of distribution
+   groups, enclosed in angle brackets.  If specified, the distribution
+   portion of a new newsgroup (e.g, 'net' in 'net.wombat') will be
+   examined for a match with the distribution categories listed, and
+   only those new newsgroups which match will be listed.  If more than
+   one distribution group is to be listed, they must be separated by
+   commas within the angle brackets.
+
+   Please note that an empty list (i.e., the text body returned by this
+   command consists only of the terminating period) is a possible valid
+   response, and indicates that there are currently no new newsgroups.
+
+3.7.2.  Responses
+
+   231 list of new newsgroups follows
+
+
+
+
+
+
+
+
+
+
+
+
+Kantor & Lapsley                                               [Page 15]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+3.8.  The NEWNEWS command
+
+3.8.1.  NEWNEWS
+
+   NEWNEWS newsgroups date time [GMT] [<distribution>]
+
+   A list of message-ids of articles posted or received to the specified
+   newsgroup since "date" will be listed. The format of the listing will
+   be one message-id per line, as though text were being sent.  A single
+   line consisting solely of one period followed by CR-LF will terminate
+   the list.
+
+   Date and time are in the same format as the NEWGROUPS command.
+
+   A newsgroup name containing a "*" (an asterisk) may be specified to
+   broaden the article search to some or all newsgroups.  The asterisk
+   will be extended to match any part of a newsgroup name (e.g.,
+   net.micro* will match net.micro.wombat, net.micro.apple, etc). Thus
+   if only an asterisk is given as the newsgroup name, all newsgroups
+   will be searched for new news.
+
+   (Please note that the asterisk "*" expansion is a general
+   replacement; in particular, the specification of e.g., net.*.unix
+   should be correctly expanded to embrace names such as net.wombat.unix
+   and net.whocares.unix.)
+
+   Conversely, if no asterisk appears in a given newsgroup name, only
+   the specified newsgroup will be searched for new articles. Newsgroup
+   names must be chosen from those returned in the listing of available
+   groups.  Multiple newsgroup names (including a "*") may be specified
+   in this command, separated by a comma.  No comma shall appear after
+   the last newsgroup in the list.  [Implementors are cautioned to keep
+   the 512 character command length limit in mind.]
+
+   The exclamation point ("!") may be used to negate a match. This can
+   be used to selectively omit certain newsgroups from an otherwise
+   larger list.  For example, a newsgroups specification of
+   "net.*,mod.*,!mod.map.*" would specify that all net.<anything> and
+   all mod.<anything> EXCEPT mod.map.<anything> newsgroup names would be
+   matched.  If used, the exclamation point must appear as the first
+   character of the given newsgroup name or pattern.
+
+   The optional parameter "distributions" is a list of distribution
+   groups, enclosed in angle brackets.  If specified, the distribution
+   portion of an article's newsgroup (e.g, 'net' in 'net.wombat') will
+   be examined for a match with the distribution categories listed, and
+   only those articles which have at least one newsgroup belonging to
+
+
+Kantor & Lapsley                                               [Page 16]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   the list of distributions will be listed.  If more than one
+   distribution group is to be supplied, they must be separated by
+   commas within the angle brackets.
+
+   The use of the IHAVE, NEWNEWS, and NEWGROUPS commands to distribute
+   news is discussed in an earlier part of this document.
+
+   Please note that an empty list (i.e., the text body returned by this
+   command consists only of the terminating period) is a possible valid
+   response, and indicates that there is currently no new news.
+
+3.8.2.  Responses
+
+   230 list of new articles by message-id follows
+
+3.9.  The NEXT command
+
+3.9.1.  NEXT
+
+   NEXT
+
+   The internally maintained "current article pointer" is advanced to
+   the next article in the current newsgroup.  If no more articles
+   remain in the current group, an error message is returned and the
+   current article remains selected.
+
+   The internally-maintained "current article pointer" is set by this
+   command.
+
+   A response indicating the current article number, and the message-id
+   string will be returned.  No text is sent in response to this
+   command.
+
+3.9.2.  Responses
+
+   223 n a article retrieved - request text separately
+           (n = article number, a = unique article id)
+   412 no newsgroup selected
+   420 no current article has been selected
+   421 no next article in this group
+
+
+
+
+
+
+
+
+
+Kantor & Lapsley                                               [Page 17]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+3.10.  The POST command
+
+3.10.1.  POST
+
+   POST
+
+   If posting is allowed, response code 340 is returned to indicate that
+   the article to be posted should be sent. Response code 440 indicates
+   that posting is prohibited for some installation-dependent reason.
+
+   If posting is permitted, the article should be presented in the
+   format specified by RFC850, and should include all required header
+   lines. After the article's header and body have been completely sent
+   by the client to the server, a further response code will be returned
+   to indicate success or failure of the posting attempt.
+
+   The text forming the header and body of the message to be posted
+   should be sent by the client using the conventions for text received
+   from the news server:  A single period (".") on a line indicates the
+   end of the text, with lines starting with a period in the original
+   text having that period doubled during transmission.
+
+   No attempt shall be made by the server to filter characters, fold or
+   limit lines, or otherwise process incoming text.  It is our intent
+   that the server just pass the incoming message to be posted to the
+   server installation's news posting software, which is separate from
+   this specification.  See RFC850 for more details.
+
+   Since most installations will want the client news program to allow
+   the user to prepare his message using some sort of text editor, and
+   transmit it to the server for posting only after it is composed, the
+   client program should take note of the herald message that greeted it
+   when the connection was first established. This message indicates
+   whether postings from that client are permitted or not, and can be
+   used to caution the user that his access is read-only if that is the
+   case. This will prevent the user from wasting a good deal of time
+   composing a message only to find posting of the message was denied.
+   The method and determination of which clients and hosts may post is
+   installation dependent and is not covered by this specification.
+
+3.10.2.  Responses
+
+   240 article posted ok
+   340 send article to be posted. End with <CR-LF>.<CR-LF>
+   440 posting not allowed
+   441 posting failed
+
+
+
+Kantor & Lapsley                                               [Page 18]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   (for reference, one of the following codes will be sent upon initial
+   connection; the client program should determine whether posting is
+   generally permitted from these:) 200 server ready - posting allowed
+   201 server ready - no posting allowed
+
+3.11.  The QUIT command
+
+3.11.1.  QUIT
+
+   QUIT
+
+   The server process acknowledges the QUIT command and then closes the
+   connection to the client.  This is the preferred method for a client
+   to indicate that it has finished all its transactions with the NNTP
+   server.
+
+   If a client simply disconnects (or the connection times out, or some
+   other fault occurs), the server should gracefully cease its attempts
+   to service the client.
+
+3.11.2.  Responses
+
+   205 closing connection - goodbye!
+
+3.12.  The SLAVE command
+
+3.12.1.  SLAVE
+
+   SLAVE
+
+   Indicates to the server that this client connection is to a slave
+   server, rather than a user.
+
+   This command is intended for use in separating connections to single
+   users from those to subsidiary ("slave") servers.  It may be used to
+   indicate that priority should therefore be given to requests from
+   this client, as it is presumably serving more than one person.  It
+   might also be used to determine which connections to close when
+   system load levels are exceeded, perhaps giving preference to slave
+   servers.  The actual use this command is put to is entirely
+   implementation dependent, and may vary from one host to another.  In
+   NNTP servers which do not give priority to slave servers, this
+   command must nonetheless be recognized and acknowledged.
+
+3.12.2.  Responses
+
+   202 slave status noted
+
+
+Kantor & Lapsley                                               [Page 19]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+4.  Sample Conversations
+
+   These are samples of the conversations that might be expected with
+   the news server in hypothetical sessions.  The notation C: indicates
+   commands sent to the news server from the client program; S: indicate
+   responses received from the server by the client.
+
+4.1.  Example 1 - relative access with NEXT
+
+   S:      (listens at TCP port 119)
+
+   C:      (requests connection on TCP port 119)
+   S:      200 wombatvax news server ready - posting ok
+
+   (client asks for a current newsgroup list)
+   C:      LIST
+   S:      215 list of newsgroups follows
+   S:      net.wombats 00543 00501 y
+   S:      net.unix-wizards 10125 10011 y
+           (more information here)
+   S:      net.idiots 00100 00001 n
+   S:      .
+
+   (client selects a newsgroup)
+   C:      GROUP net.unix-wizards
+   S:      211 104 10011 10125 net.unix-wizards group selected
+           (there are 104 articles on file, from 10011 to 10125)
+
+   (client selects an article to read)
+   C:      STAT 10110
+   S:      223 10110 <23445@sdcsvax.ARPA> article retrieved - statistics
+           only (article 10110 selected, its message-id is
+           <23445@sdcsvax.ARPA>)
+
+   (client examines the header)
+   C:      HEAD
+   S:      221 10110 <23445@sdcsvax.ARPA> article retrieved - head
+           follows (text of the header appears here)
+   S:      .
+
+   (client wants to see the text body of the article)
+   C:      BODY
+   S:      222 10110 <23445@sdcsvax.ARPA> article retrieved - body
+           follows (body text here)
+   S:      .
+
+   (client selects next article in group)
+
+
+Kantor & Lapsley                                               [Page 20]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   C:      NEXT
+   S:      223 10113 <21495@nudebch.uucp> article retrieved - statistics
+           only (article 10113 was next in group)
+
+   (client finishes session)
+   C:      QUIT
+   S:      205 goodbye.
+
+4.2.  Example 2 - absolute article access with ARTICLE
+
+   S:      (listens at TCP port 119)
+
+   C:      (requests connection on TCP port 119)
+   S:      201 UCB-VAX netnews server ready -- no posting allowed
+
+   C:      GROUP msgs
+   S:      211 103 402 504 msgs Your new group is msgs
+           (there are 103 articles, from 402 to 504)
+
+   C:      ARTICLE 401
+   S:      423 No such article in this newsgroup
+
+   C:      ARTICLE 402
+   S:      220 402 <4105@ucbvax.ARPA> Article retrieved, text follows
+   S:      (article header and body follow)
+   S:      .
+
+   C:      HEAD 403
+   S:      221 403 <3108@mcvax.UUCP> Article retrieved, header follows
+   S:      (article header follows)
+   S:      .
+
+   C:      QUIT
+   S:      205 UCB-VAX news server closing connection.  Goodbye.
+
+4.3.  Example 3 - NEWGROUPS command
+
+   S:      (listens at TCP port 119)
+
+   C:      (requests connection on TCP port 119)
+   S:      200 Imaginary Institute News Server ready (posting ok)
+
+   (client asks for new newsgroups since April 3, 1985)
+   C:      NEWGROUPS 850403 020000
+
+   S:      231 New newsgroups since 03/04/85 02:00:00 follow
+
+
+
+Kantor & Lapsley                                               [Page 21]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   S:      net.music.gdead
+   S:      net.games.sources
+   S:      .
+
+   C:      GROUP net.music.gdead
+   S:      211 0 1 1 net.music.gdead Newsgroup selected
+           (there are no articles in that newsgroup, and
+           the first and last article numbers should be ignored)
+
+   C:      QUIT
+   S:      205 Imaginary Institute news server ceasing service.  Bye!
+
+4.4.  Example 4 - posting a news article
+
+   S:      (listens at TCP port 119)
+
+   C:      (requests connection on TCP port 119)
+   S:      200 BANZAIVAX news server ready, posting allowed.
+
+   C:      POST
+   S:      340 Continue posting; Period on a line by itself to end
+   C:      (transmits news article in RFC850 format)
+   C:      .
+   S:      240 Article posted successfully.
+
+   C:      QUIT
+   S:      205 BANZAIVAX closing connection.  Goodbye.
+
+4.5.  Example 5 - interruption due to operator request
+
+   S:      (listens at TCP port 119)
+
+   C:      (requests connection on TCP port 119)
+   S:      201 genericvax news server ready, no posting allowed.
+
+           (assume normal conversation for some time, and
+           that a newsgroup has been selected)
+
+   C:      NEXT
+   S:      223 1013 <5734@mcvax.UUCP> Article retrieved; text separate.
+
+   C:      HEAD
+   C:      221 1013 <5734@mcvax.UUCP> Article retrieved; head follows.
+
+   S:      (sends head of article, but halfway through is
+           interrupted by an operator request.  The following
+           then occurs, without client intervention.)
+
+
+Kantor & Lapsley                                               [Page 22]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   S:      (ends current line with a CR-LF pair)
+   S:      .
+   S:      400 Connection closed by operator.  Goodbye.
+   S:      (closes connection)
+
+4.6.  Example 6 - Using the news server to distribute news between
+      systems.
+
+   S:      (listens at TCP port 119)
+
+   C:      (requests connection on TCP port 119)
+   S:      201 Foobar NNTP server ready (no posting)
+
+   (client asks for new newsgroups since 2 am, May 15, 1985)
+   C:      NEWGROUPS 850515 020000
+   S:      235 New newsgroups since 850515 follow
+   S:      net.fluff
+   S:      net.lint
+   S:      .
+
+   (client asks for new news articles since 2 am, May 15, 1985)
+   C:      NEWNEWS * 850515 020000
+   S:      230 New news since 850515 020000 follows
+   S:      <1772@foo.UUCP>
+   S:      <87623@baz.UUCP>
+   S:      <17872@GOLD.CSNET>
+   S:      .
+
+   (client asks for article <1772@foo.UUCP>)
+   C:      ARTICLE <1772@foo.UUCP>
+   S:      220 <1772@foo.UUCP> All of article follows
+   S:      (sends entire message)
+   S:      .
+
+   (client asks for article <87623@baz.UUCP>
+   C:      ARTICLE <87623@baz.UUCP>
+   S:      220 <87623@baz.UUCP> All of article follows
+   S:      (sends entire message)
+   S:      .
+
+   (client asks for article <17872@GOLD.CSNET>
+   C:      ARTICLE <17872@GOLD.CSNET>
+   S:      220 <17872@GOLD.CSNET> All of article follows
+   S:      (sends entire message)
+   S:      .
+
+
+
+
+Kantor & Lapsley                                               [Page 23]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   (client offers an article it has received recently)
+   C:      IHAVE <4105@ucbvax.ARPA>
+   S:      435 Already seen that one, where you been?
+
+   (client offers another article)
+   C:      IHAVE <4106@ucbvax.ARPA>
+   S:      335 News to me!  <CRLF.CRLF> to end.
+   C:      (sends article)
+   C:      .
+   S:      235 Article transferred successfully.  Thanks.
+
+   (or)
+
+   S:      436 Transfer failed.
+
+   (client is all through with the session)
+   C:      QUIT
+   S:      205 Foobar NNTP server bids you farewell.
+
+4.7.  Summary of commands and responses.
+
+   The following are the commands recognized and responses returned by
+   the NNTP server.
+
+4.7.1.  Commands
+
+   ARTICLE
+   BODY
+   GROUP
+   HEAD
+   HELP
+   IHAVE
+   LAST
+   LIST
+   NEWGROUPS
+   NEWNEWS
+   NEXT
+   POST
+   QUIT
+   SLAVE
+   STAT
+
+4.7.2.  Responses
+
+   100 help text follows
+   199 debug output
+
+
+
+Kantor & Lapsley                                               [Page 24]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   200 server ready - posting allowed
+   201 server ready - no posting allowed
+   202 slave status noted
+   205 closing connection - goodbye!
+   211 n f l s group selected
+   215 list of newsgroups follows
+   220 n <a> article retrieved - head and body follow 221 n <a> article
+   retrieved - head follows
+   222 n <a> article retrieved - body follows
+   223 n <a> article retrieved - request text separately 230 list of new
+   articles by message-id follows
+   231 list of new newsgroups follows
+   235 article transferred ok
+   240 article posted ok
+
+   335 send article to be transferred.  End with <CR-LF>.<CR-LF>
+   340 send article to be posted. End with <CR-LF>.<CR-LF>
+
+   400 service discontinued
+   411 no such news group
+   412 no newsgroup has been selected
+   420 no current article has been selected
+   421 no next article in this group
+   422 no previous article in this group
+   423 no such article number in this group
+   430 no such article found
+   435 article not wanted - do not send it
+   436 transfer failed - try again later
+   437 article rejected - do not try again.
+   440 posting not allowed
+   441 posting failed
+
+   500 command not recognized
+   501 command syntax error
+   502 access restriction or permission denied
+   503 program fault - command not performed
+
+4.8.  A Brief Word about the USENET News System
+
+   In the UNIX world, which traditionally has been linked by 1200 baud
+   dial-up telephone lines, the USENET News system has evolved to handle
+   central storage, indexing, retrieval, and distribution of news.  With
+   the exception of its underlying transport mechanism (UUCP), USENET
+   News is an efficient means of providing news and bulletin service to
+   subscribers on UNIX and other hosts worldwide.  The USENET News
+
+
+
+
+Kantor & Lapsley                                               [Page 25]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+   system is discussed in detail in RFC 850.  It runs on most versions
+   of UNIX and on many other operating systems, and is customarily
+   distributed without charge.
+
+   USENET uses a spooling area on the UNIX host to store news articles,
+   one per file. Each article consists of a series of heading text,
+   which contain the sender's identification and organizational
+   affiliation, timestamps, electronic mail reply paths, subject,
+   newsgroup (subject category), and the like.  A complete news article
+   is reproduced in its entirety below.  Please consult RFC 850 for more
+   details.
+
+      Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site
+      sdcsvax.UUCP
+      Posting-Version: version B 2.10.1 6/24/83 SMI; site unitek.uucp
+      Path:sdcsvax!sdcrdcf!hplabs!qantel!ihnp4!alberta!ubc-vision!unitek
+      !honman
+      From: honman@unitek.uucp (Man Wong)
+      Newsgroups: net.unix-wizards
+      Subject: foreground -> background ?
+      Message-ID: <167@unitek.uucp>
+      Date: 25 Sep 85 23:51:52 GMT
+      Date-Received: 29 Sep 85 09:54:48 GMT
+      Reply-To: honman@unitek.UUCP (Hon-Man Wong)
+      Distribution: net.all
+      Organization: Unitek Technologies Corporation
+      Lines: 12
+
+      I have a process (C program) which generates a child and waits for
+      it to return.  What I would like to do is to be able to run the
+      child process interactively for a while before kicking itself into
+      the background so I can return to the parent process (while the
+      child process is RUNNING in the background).  Can it be done?  And
+      if it can, how?
+
+      Please reply by E-mail.  Thanks in advance.
+
+      Hon-Man Wong
+
+
+
+
+
+
+
+
+
+
+
+Kantor & Lapsley                                               [Page 26]
+
+
+
+RFC 977                                                    February 1986
+Network News Transfer Protocol
+
+
+5.  References
+
+   [1]  Crocker, D., "Standard for the Format of ARPA Internet Text
+        Messages", RFC-822, Department of Electrical Engineering,
+        University of Delaware, August, 1982.
+
+   [2]  Horton, M., "Standard for Interchange of USENET Messages",
+        RFC-850, USENET Project, June, 1983.
+
+   [3]  Postel, J., "Transmission Control Protocol- DARPA Internet
+        Program Protocol Specification", RFC-793, USC/Information
+        Sciences Institute, September, 1981.
+
+   [4]  Postel, J., "Simple Mail Transfer Protocol", RFC-821,
+        USC/Information Sciences Institute, August, 1982.
+
+6.  Acknowledgements
+
+   The authors wish to express their heartfelt thanks to those many
+   people who contributed to this specification, and especially to Erik
+   Fair and Chuq von Rospach, without whose inspiration this whole thing
+   would not have been necessary.
+
+7.  Notes
+
+   <1> UNIX is a trademark of Bell Laboratories.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Kantor & Lapsley                                               [Page 27]
+
+
+ + diff --git a/docs/S091798.FM3 b/docs/S091798.FM3 new file mode 100644 index 0000000..290e7cd Binary files /dev/null and b/docs/S091798.FM3 differ diff --git a/docs/S091798.WK3 b/docs/S091798.WK3 new file mode 100644 index 0000000..28976f9 Binary files /dev/null and b/docs/S091798.WK3 differ diff --git a/docs/SCEN01.WK3 b/docs/SCEN01.WK3 new file mode 100644 index 0000000..0509ede Binary files /dev/null and b/docs/SCEN01.WK3 differ diff --git a/docs/SCENARIO.FM3 b/docs/SCENARIO.FM3 new file mode 100644 index 0000000..4c9287f Binary files /dev/null and b/docs/SCENARIO.FM3 differ diff --git a/docs/SCENARIO.WK3 b/docs/SCENARIO.WK3 new file mode 100644 index 0000000..e98cdf2 Binary files /dev/null and b/docs/SCENARIO.WK3 differ diff --git a/docs/SCHWAB.FM3 b/docs/SCHWAB.FM3 new file mode 100644 index 0000000..d808302 Binary files /dev/null and b/docs/SCHWAB.FM3 differ diff --git a/docs/SCHWAB.WK3 b/docs/SCHWAB.WK3 new file mode 100644 index 0000000..80a4886 Binary files /dev/null and b/docs/SCHWAB.WK3 differ diff --git a/docs/WSFF.TXT b/docs/WSFF.TXT new file mode 100644 index 0000000..42777db --- /dev/null +++ b/docs/WSFF.TXT @@ -0,0 +1,3733 @@ + WORKSHEET FILE FORMAT + FROM LOTUS + + INTRODUCTION AND QUICK REFERENCE + + Copyright(c) 1984, Lotus Development Corporation + 161 First Street + Cambridge, Massachusetts 02142 + (617) 492-7171 + Electronic Edition, December, 1984 + All Rights Reserved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PREFACE + + Lotus Development Corporation's 1-2-3(TM) and Symphony(TM) perform user + selected operations upon a data matrix that is termed a "worksheet". + + Worksheet files are such matrices stored on disk. + + A worksheet file is an unbroken sequence of binary coded records defining a + single worksheet. + + Both 1-2-3 and Symphony accept externally created data files if the files + are in the worksheet file format. Other programs can decode and process + worksheet files created by 1-2-3 or Symphony. + + The following document provides information required to create or access a + worksheet file by describing the records used to create a worksheet file. + It is assumed that the reader is familiar with Lotus products and has ready + access to 1-2-3 or Symphony documentation. + + Note that the worksheet files for 1-2-3 and Symphony are similar, but not + necessarily interchangeable. 1-2-3 and Symphony share some record types, + but also have record types unique to that product. Symphony can read 1-2-3 + records, but 1-2-3 cannot read Symphony records. + + The information contained in this document has been released into the + public domain and is not considered to be confidential or proprietary + although still the copyright and property of Lotus Development Corporation. + All efforts have been made to ensure that this information is clear and + useful since Lotus will not be providing customer assistance with this + booklet. Lotus will, however, incorporate any necessary corrections if + they are reported in writing to: + + Lotus Development Corporation + Worksheet File Format + 161 First Street + Cambridge, MA 02142 + + + WORKSHEET FILE FORMAT + + Worksheet files are organized as an unbroken sequence of variable length + binary records. Each record consists of a 4-byte header followed by the + record body. The header defines the record's type and length, as the + example below shows. + + The header's composition is as follows: + + + + Byte Number Byte Description + 0,1 Record type code + 2,3 Record body length (bytes) + + + Example: Record Header + + Record Header + + Record Record + Type Length + + Byte Number 0 1 2 3 + Hex Code 1C 00 20 00 + Decimal Equivalent 28 32 + + + The record body can be of many different types; most have predetermined + length, but some vary in length. + + The record type code is 28. + + In a hex dump of the file, the record type appears as 1C 00h, noting that + the 8086/88 stores the most significant byte of word in the higher memory + address. + + The record length is 32 bytes. + In a hex dump of the file, the record length appears as 20 00h. + + + Record types with Column/Row Coordinates + + Some record types contain column/row coordinates to identify a cell, or one + of the two points that define a range. Numbering starts at zero in the + upper left corner of the worksheet. + For example: + + Cell A1 = column 0, row 0 + + + + + + SUMMARY OF RECORD TYPES + + This section describes the different record types found in 1-2-3 and + Symphony. + + There are to Quick Reference tables ordered by Opcode and by Product, + followed by a detailed reference section ordered by Opcode. In the + reference section, there are examples for the more commonly used records. + + It is assumed that the reader is familiar with 1-2-3 or Symphony and has + access to Lotus' documentation. + + Quick Reference by Opcode + + Type Code (hex) Length (bytes) Description + + BOF 0 2 Beginning of file + EOF 1 0 End of file + CALCMODE 2 1 Calculation mode + CALCORDER 3 1 Calculation order + SPLIT 4 1 Split window type + SYNC 5 1 Split window sync + RANGE 6 8 Active worksheet range + WINDOW1 7 31 Window 1 record + COLW1 8 3 Column width, + window 1 + WINTWO 9 31 Window 2 record + COLW2 A 3 Column width, + window 2 + NAME B 24 Named range + BLANK C 5 Blank cell + INTEGER D 7 Integer number cell + NUMBER E 13 Floating point number + LABEL F variable Label cell + FORMULA 10 variable Formula cell + TABLE 18 25 Data table range + ORANGE 19 25 Query range + PRANGE 1A 8 Print range + SRANGE 1B 8 Sort range + FRANGE 1C 8 Fill range + KRANGE1 1D 9 Primary sort key range + HRANGE 20 16 Distribution range + KRANGE2 23 9 Secondary sort key + range + PROTEC 24 1 Global protection + FOOTER 25 242 Print footer + HEADER 26 242 Print header + SETUP 27 40 Print setup + MARGINS 28 10 Print margins code + + + + Quick Reference by Opcode (continued) + + Type code (hex) Length (bytes) Description + + LABELFMT 29 1 Label alignment + TITLES 2A 16 Print borders + GRAPH 2D 437 Current graph settings + NGRAPH 2E 453 Named graph settings + CALCCOUNT 2F 1 Iteration count + UNFORMATTED 30 1 Formatted/unformatted + print + CURSORW12 31 1 Cursor location + WINDOW 32 144 Symphony window + settings + STRING 33 variable Value of string + formula + PASSWORD 37 4 File lockout (CHKSUM) + LOCKED 38 1 Lock flag + QUERY 3C 127 Symphony query + settings + QUERYNAME 3D 16 Query name + PRINT 3E 679 Symphony print record + PRINTNAME 3F 16 Print record name + GRAPH2 40 499 Symphony graph + record + GRAPHNAME 41 16 Graph record name + ZOOM 42 9 Orig coordinates + expanded window + SYMSPLIT 43 2 Nos. of split windows + NSROWS 44 2 Nos. of screen rows + NSCOLS 45 2 Nos. of screen columns + RULER 46 25 Named ruler range + NNAME 47 25 Named sheet range + ACOMM 48 65 Autoload.comm code + AMACRO 49 8 Autoexecute macro + address + PARSE 4A 16 Query parse + information + + + + + Quick Reference by Product: 1-2-3 only + + Type Code (hex) Length (bytes) Description + + SPLIT 4 1 Split window type + SYNC 5 1 Split window sync + WINDOW 1 7 31 Window 1 record + WINTWO 9 31 Window 2 record + COLW2 A 3 Column width, + window 2 + NAME B 24 Named range + QRANGE 19 25 Query range + PRANGE 1A 8 Print range + SRANGE 1B 8 Sort range + KRANGE1 1D 9 Primary sort key range + KRANGE2 23 9 Secondary sort key + range + FOOTER 25 242 Print footer + HEADER 26 242 Print header + SETUP 27 40 Print setup + MARGINS 28 10 Print margins code + TITLES 2A 16 Print borders + GRAPH 2D 437 Current graph settings + NGRAPH 2E 453 Named graph settings + + + + + Quick Reference by Product: 1-2-3 and Symphony + + Type Code (hex) Length (bytes) Description + + BOF 0 2 Beginning of file + EOF 1 0 End of file + CALCMODE 2 1 Calculation mode + CALCORDER 3 1 Calculation order + RANGE 6 8 Active worksheet range + COLW1 8 3 Column width + BLANK C 5 Blank cell + INTEGER D 7 Integer number cell + NUMBER E 13 Floating point number + LABEL F variable Label cell + FORMULA 10 variable Formula cell + TABLE 18 25 Data table range + FRANGE 1C 8 Fill range + HRANGE 20 16 Distribution range + PROTEC 24 1 Global protection + LABELFMT 29 1 Label alignment + CALCCOUNT 2F 1 Iteration count + UNFORMATTED 30 1 Formatted/unformatted + print + CURSORW12 31 1 Cursor location + + + + + Quick Reference by Product: Symphony only + + Type Code (hex) Length (bytes) Description + + WINDOW 32 144 Symphony window + settings + STRING 33 variable Value of string + formula + PASSWORD 37 4 File lockout (CHKSUM) + LOCKED 38 1 Lock flag + QUERY 3C 127 Symphony query + settings + QUERYNAME 3D 16 Query name + PRINT 3E 679 Symphony print record + PRINTNAME 3F 16 Print record name + GRAPH2 40 499 Symphony graph + record + GRAPHNAME 41 16 Graph rocord name + ZOOM 42 9 Orig coordinates + expanded window + SYMSPLIT 43 2 Nos. of split windows + NSROWS 44 2 Nos. of screen rows + NSCOLS 45 2 Nos. of screen columns + RULER 46 25 Named ruler range + NNAME 47 25 Named sheet range + ACOMM 48 65 Autoload. comm code + AMACRO 49 8 Autoexecute macro + address + PARSE 4A 16 Query parse + information + WORKSHEET FILE FORMAT + FROM LOTUS + + SUMMARY OF RECORD TYPES + + Copyright(c) 1984, Lotus Development Corporation + 161 First Street + Cambridge, Massachusetts 02142 + (617) 492-7171 + Electronic Edition, December, 1984 + All Rights Reserved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BOF + + Record Type Code Body length + BOF 0 (00H) 2 bytes + + Record Description + + Beginning of file + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + 0-1 file format revision number + 1028 (0404h) = 1-2-3 file + 1029 (0405h) = Symphony file + + + Example + + + + Record Header Record Body + + Record Record BOF + Type Length + Byte Number 0 1 2 3 0 1 + Hex Code 00 00 02 00 04 04 + Dec.Equivalent 0 2 1028 + + + EOF + + Record Type Code Body length + EOF 1 (01H) 0 bytes + + Record Description + + End of file + + Used by both 1-2-3 and Symphony + + Byte Number Byte Description + + -no record body- + + + Example + + Record Header + + Record Record + Type Length + Byte Number 0 1 2 3 + Hex Code 01 00 00 00 + Decimal Equivalent 1 0 + + Note: End of file is ony a header. EOF has a record + length of 0; therefore, no record body follows. + + + + + + CALCMODE + + Record Type Code Body length + + CALCMODE 2 (02h) 1 byte + + Record Description + + Calculation method + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + + 0 0 = Manual mode + FF = automatic + + + + + + CALCORDER + + + Recrod Type Code Body length + CALCORDER 3 (03H) 1 BYTE + + Record Description + + Calculation order + + Used by both 1-2-3 and Symphony + + Byte Number Byte Description + 0 0 = natural + 1 = by column + FF = by row + + + + SPLIT + + Record Type Code Body length + SPLIT 4(04h) 1 byte + + Record Description + + Split window type + Used in 1-2-3 only. + + Byte Number Byte Description + + 0 0 = not split + 1 = vertical split + FF = horizontal split + + + + + SYNC + + Record Type Code Body length + SYNC 5(05h) 1 byte + + Record Description + + Split window sync + + This determines whether the two screens in 1-2-3's split-screen feature + will move together with the cursor. + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0 0 = not synchronized + FF = synchronized + + + + + + + RANGE + + + Record Type Code Body length + RANGE 6(06h) 8 bytes + + Record Description + + Range of cells written to worksheet file. + If the worksheet file was created using a File Save command, then this + range describes the active area with trailing blank columns and rows + removed. If the worksheet file was created using a File Xtract command, + then this range describes the extract range with trailing blank columns and + rows removed. If there is no data in the range, the starting column is set + to -1. + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + + 0-1 starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + + + Example + + Record Header rt_range Record Body + Record Record Starting Starting Ending Ending + Type Length Column Row Column Row + Byte Number 0 1 2 3 0 1 2 3 4 5 6 7 + Hex Code 06 00 08 00 00 00 00 00 01 00 03 00 + Dec.Equivalent 6 8 0 0 1 3 + + The record displays the worksheet range as A1...B4. + + + + + WINDOW1 + + Record Type Code Body length + WINDOW1 7(07h) 31 bytes + + Record Description + + Window 1 record + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-1 cursor column position + 2-3 cursor row position + 4 format (see Appendix A, Cell Format Encoding) + 5 unused (0) + 6-7 column width + 8-9 number of columns on screen + 10-11 number of rows on screen + 12-13 left column + 14-15 top row + 16-17 number of title columns + 18-19 number of title rows + 20-21 left title column + 22-23 top title row + 24-25 border width column + 26-27 border width row + 28-29 window width + 30 unused (0) + + + + COLW1 + + Record Type Code Body length + COLW1 8(08h) 3 bytes + + Record Type Description + + Column width + Used by both 1-2-3 and Symphony. + + In 1-2-3, this record contains the width of a column Window 1. + In symphony, it contains width information for the Window Record that it + follows. + + Byte Number Byte Description + 0-1 column + 2 width + + + + + WINTWO + + Record Type Code Body length + WINTWO 9(09h) 31 bytes + + Record Description + Window 2 record + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-1 cursor column position + 2-3 cursor row position + 4 format (see Appendix A, Cell Format Encoding) + 5 unused (0) + 6-7 column width + 8-9 number of columns on screen + 10-11 number of rows on screen + 12-13 left column + 14-15 top row + 16-17 number of title columns + 18-19 number of title rows + 20-21 left titile column + 22-23 top title row + 24-25 border width column + 26-27 border width row + 28-29 window width + 30 unused (0) + + + + + COLW2 + + Record Type Code Body length + COLW2 10(0Ah) 3 bytes + + Record Description + Column width, Window 2 + Used in 1-2-3 only. + + Byte Number Byte Description + 0-1 column + 2 width + + + + + + + NAME + + Record Type Code Body length + NAME 11 (OBh) 24 bytes + + Record Description + + Name of range + The worksheet contains one record for each range name. + Used in 1-2-3 only. + + Byte Number Byte Description + 0-15 NULL terminated ASCII string + 16-17 Starting column + 18-19 Starting row + 20-21 Ending column + 22-23 Ending row + + Example + + Record Header + Record Record + Type Length + Byte Number 0 1 2 3 + Hex Code 0B 00 18 00 + Decimal Equivalent 11 24 + + + + + (cont.) + + Record Body + Range Name (Text) + Decimal Equivalent Expressed in ASCII Text + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 52 45 56 45 4E 55 45 53 00 00 00 00 00 00 00 00 + R E V E N U E S / Unfilled Names Area + + + + (cont.) Record Body + + Starting Starting Ending Ending + Column Row Column Row + 16 17 18 19 20 21 22 23 + 00 00 00 00 01 00 03 00 + 0 0 1 3 + + Range name is REVENUES (encompasses A1 to B4). + + + + + + + BLANK + + Record Type Code Body length + BLANK 12(0Ch) 5 bytes + + Record Description + + Blank cell + + Blank cell records appear only for those cells that are protected, or do + not have the default format. + + Unprotected blank cells with the default format are omitted from the + worksheet file. + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + 0 format (see Appendix A, Cell Format Encoding) + 1-2 column + 3-4 row + + Example + + Record Header Record Body + Record Record + Type Length Format Column Row + Byte Number 0 1 2 3 0 1 2 3 4 + Hex Code 0C 00 05 00 22 05 00 0A 00 + Dec. Equivalent 12 5 34 5 10 + + This record displays cell in location F11 (column 5, row 10). + + + + + INTEGER + + Record Type Code Body length + INTEGER 13(ODh) 7 bytes + + Record Description + + Integer number cell + + An integer cell holds a single integer value + in the range -32767....+32767 (decimal). + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + + 0 format (see Appendix A, Cell Format Encoding) + 1-2 column + 3-4 row + 5-6 integer value + + + Example + + Record Header Record Body + Record Record + Type Length Format Column Row Integer + Byte Number 0 1 2 3 0 1 2 3 4 5 6 + Hex Code 0D 00 07 00 00 00 00 00 00 DD 04 + Dec. Equivalent 13 7 0 0 0 1245 + + This example displays the integer 1245 located in cell A1 (column 0, row + 0). When reading a 2-byte integer, the lower byte appears first. For + example, DD04h is actually 04DDh (1245 decimal). + + + + + + NUMBER + + Record Type Code Body length + NUMBER 14 (0Eh) 13 bytes + + Record Description + + Floating point number + Used by both 1-2-3 and Symphony + + Byte Number Byte Description + + 0 format + 1-2 column + 3-4 row + 5-12 value (IEEE long real; 8087 double-precision floating- + point format) + + Example + The following describes a 64-bit long real format. + + + S Exponent Fraction + 63 62 52 51 0 + MSB LSB + + S 1-bit Sign field + 0 = + + 1 = - + + Exponent 11-bit Exponent field + + Exponent is binary, excess 1023(base 10). Thus, the true + exponent is: 2^(exponent -1023). + + Fraction 52-bit Fraction field + + An implied leading 1 bit is at the beginning of the + fraction. The implied binary point is between the implied + 1 bit and the Most Significant Bit (MSB) of the fraction + field. + + Special NA: S = 1 Exponent = 7FF Fraction = 0 + Values ERR: S = 0 Exponent = 7FF Fraction = 0 + + STRING: S = 0 Exponent = 7FF Fraction = non-zero + (Symphony only) + + + + + + LABEL + + Record Type Code Body length + LABEL 15(0Fh) variable + + Record Description + + Label cell + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + + 0 format (see Appendix A, Cell Format Encoding) + 1-2 column + 3-4 row + 5+ NULL terminated ASCII string; + 240 bytes maximum + + + Example + + Record Header Record Body + Record Record + Type Length Format Column Row Label + Byte Number 0 1 2 3 0 1 2 3 4 5 6 7 8 9 10 + Hex Code 0F 00 0B 00 F5 00 00 00 00 27 50 41 55 4C 00 + Dec. Equivalent 15 11 245 0 0 P A U L + + This example is a label record located at A1 (column 0, row 0). + + This record contains the word 'PAUL. + Byte 5 is always one of the following format prefixes:\'"^. + + This record varies in relation to the amount of text stored in the cell. + + A user can enter up to 240 characters in one cell. + + + + + + + FORMULA + + Record Type Code Body length + FORMULA 16(10H) variable + + Record Description + + Formula cell + + Used by both 1-2-3 and Symphony. + + Formulas are compiled in Reverse Polish Internal Notation. By creating + formulas in 1-2-3 or Symphony, and dumping them as hex bytes, the formula + compilation logic can be deciphered. + + Table 1 describes the available Opcodes and functions. The functions are + discussed in greater detail in the 1-2-3 and Symphony documentation. + + Appendix B discusses Lotus' proprietary formula compiler in greater + detail. + + Byte Number Byte Description + 0 format (see Appendix A, Cell Format Encoding + 1-2 column + 3-4 row + 5-12 formula numeric value (IEEE long real; see NUMBER) + 13-14 formula size (bytes) + 15+ for code (see Table 1, Formula Opcodes); Reverse + Polish Internal Notation; 2048 bytes maximum + + + + + + FORMULA + + Table 1-a Formula Compiler Opcode Table, Format + + Dec Hex Operation Description + 0 0 constant Code is followed by an 8 byte + IEEE Long Real Floating Point + Number + + 1 1 variable Code followed by 4 byte coor- + dinate Byte 0,1 = Column + Byte 2,3 = Row + + 2 2 range Code followed by 8 byte range + Byte 0,1 = Start column + Byte 2,3 = Start row + Byte 4,5 = End column + Byte 6,7 = End row + + 3 3 return End of formula + + 4 4 parentheses Indicates presence of paren- + theses in original formula. + It is ignored during recal- + culation. + + 5 5 2 byte integer Followed by 2 byte signed + constant integer. + + The above Opcodes will define the type and length of information that + follows the Opcode. Opcode 3 defines the end of the formula. + + For example, Opcode 0 is followed by an 8 byte floating point number. + Opcode 1 is followed by a 4 byte coordinate. + Opcode 2 is followed by an 8 byte range specifier. + Opcode 5 is followed by a 2 byte signed integer. + + + + + + FORMULA + + Table 1-b Formula Compiler Opcode Table, Operations + + Dec Hex Operation Description + + 8 8 unary - Negation + 9 9 + Addition + 10 A - Subtraction + 11 B * Multiplication + 12 C / Division + 13 D ^ Exponentiation; + ie. 3^2 is(3x3) + 14 E = Equal to + 15 F < > Not equal to + 16 10 < = Less than or equal to + 17 11 > = Greater than or equal to + 18 12 < Less than + 19 13 > Greater than + 20 14 #AND# Logical AND + 21 15 #OR# Logical OR + 22 16 #NOT# Logical NOT + 23 17 unary + (Ignored during recalculation + 31 1F na @Na not applicable + 32 20 err @Err error + 33 21 abs @abs (x) Absolute value of x + 34 22 int @int (x) Integer value of x + 35 23 sqrt @sqrt (x) Square root of x + 36 24 log @log (x) Log base 10 of x + 37 25 ln @ln (x) Log base e of x + 38 26 pi @pi + 39 27 sin @sin (x) Sine of x + 40 28 cos @cos (x) Cosine of x + 41 29 tan @tan (x) Tangent of x + 42 2A atan2 @atan2 (x) 4 quadrant arc tangent + of x + 43 2B atan @atan (x) 2 quadrant arc tangent + of x + 44 2C asin @asin (x) Arc sine of x + 45 2D acos @acos (x) Arc cosine of x + 46 2E exp @exp (x) Exponential anti-log of x + 47 2F mod @mod (x,y)X Mod Y + 48 30 sel @Choose (x,v0,v1...vN) + Match a list item. + 49 31 isna @isna (x)x = NA then 1 (true) + + + + + + + + + FORMULA + + Table 1-b (continued) Formula Compiler Opcode Table, Operations + + Dec Hex Operation Description + 51 33 false @false Return 0 + 52 34 true @true Return 1 + 53 35 rand @rand Generate random number + between 0 and 1 + 54 36 date @date (Y,M,D) Generate the days + since 1/1/1900 (Y = 0-199, + M = 1-12, D = 1-31) + 55 37 today @today Output serial date number + from cpu's clock + 56 38 pmt @pmt (princ, int, term)Payment + 57 39 pv @pv (pmt, int, term) Present value + 58 3A fv @fv (pmt, int, term) Future Value + 59 3B if @if (argument, them else) Boolean + if + 60 3C day @day (x) Print day of the month from + a serial date number + 61 3D month @month (x) Print month of the year + from a serial date number + 62 3E round @round (x,d) Round number x to d + decimal places + + The above Opcodes are variable, constant and argument related. + + For example: @sqrt (9) is the square root of the constant 9 + @sqrt (A1) is the square root of the variable A1 + @sqrt ((A1*2)/3) is the square root of the argument (A1*2)/3 + (Note that the argument ((A1*2)/3) will be processed before + the @sqrt function.) + + + + + + + FORMULA + + Table 1-c Formula Compiler Opcode Table, Multiple Arguments + + Dec Hex Operation Description + 80 50 sum @sum (range and/or cell and/or + constant) Use commas to separate + arguments + 81 51 avg @avg (range and/or cell and/or constant) + Use commas to separate arguments + 82 52 cnt @cnt (range and/or cell and/or constant) + Use commas to separate arguments + 83 53 min @min (range and/or cell and/or constant) + Use commas to separate arguments + 84 54 max @max (range and/or cell and/or constant + Use commas to separate arguments + 85 55 vlookup @Vlookup (x, range, offset) X = Cell + address or constant, range = Table, + Offset = Row in Table + 86 56 npv @npv (int, range) Net present value; + Int = interest, Range = cash flows + 87 57 var @var (range) Variance of all items in + list + 88 58 std @std (range) Standard deviation of all + items in list + 89 59 irr @irr (guess,range) Guess = % estimate; + Range = range of cash flows + 90 5A hlookup @hlookup, (x, range, offset) X = Cell + address or constant, range = Table, + Offseet = row in Table + 91 5B dsum Database statistical functions + 92 5C avg Database statistical functions + 93 5D dcnt Database statistical functions + 94 5E dmin Database statistical functions + 95 5F dmax Database statistical functions + 96 60 dvar Database statistical functions + 97 61 dstd Database statistical functions + + The above Opcodes deal specifically with ranges and multiple arguments. + For example: @sum (A1...A10, B25, 9) contains a range, a variable and a + constant as the arguments. + + All function Opcodes which accept a variable number of arguments + are followed by a 1-byte argument count. + + + + + + FORMULA + + Table 1-d Operator Precedence Table + + Operator Unary Precedence Binary Precedence + + 6 4 + - 6 4 + * na 5 + / na 5 + ^ na 7 + = na 3 + < > na 3 + < = na 3 + > = na 3 + < na 3 + > na 3 + #and# na 1 + #or# na 1 + #not# 2 na + + A Note on the Decompiler + + The algorithm for the formula decompiler was taken verbatim from: + + Writing Interactive Compilers and Interpreters, P.J. Brown, John Wiley + and Sons, 1979. See chapter 6.2. The algorithm itself is described on + pages 216 and 217. + + This algorithm is also described in the following article: + + More on the Re-creation of Source Code from Reserve Polish, P.J. Brown, + Software Practice and Experience, Vol 7, 545-551 (1977). + + + + + + + TABLE + + Record Type Code Body length + TABLE 24 (18h) 25 bytes + + Record Description + + Table range + + Used by both 1-2-3 and Symphony. + In 1-2-3, the record refers to Data Tables 1 and 2. + In Symphony, it refers to What-if Tables 1 and 2. + + Byte Number Byte Description + + 0 0 = no table + 1 = Table 1 + 2 = Table 2 + 1-2 Table Range; starting column + 3-4 starting row + 5-6 ending column + 7-8 ending row + 9-10 Input Cell 1; starting column + 11-12 starting row + 13-14 ending column + 15-16 ending row + 17-18 Input Cell 2; starting column + 19-20 starting row + 21-22 ending column + 23-24 ending row + + + + + + QRANGE + + Record Type Code Body length + QRANGE 25 (19h) 25 bytes + + Record Description + + Query range + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-1 Input ranges; starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + 8-9 Output ranges starting column + 10-11 starting row + 12-13 ending column + 14-15 ending row + 16-17 Criteria; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + 24 Command; 0 = no command + 1 = find + 2 = extract + 3 = delete + 4 = unique + + + + + + + PRANGE + + Record Type Code Body length + PRANGE 26 (1Ah) 8 bytes + + Record Description + + Print range + + Used in 1-2-3 only. + + Byte Number Byte Description + 0-1 starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + + + + + + + SRANGE + + Record Type Code Body length + SRANGE 27 (1Bh) 8 bytes + + Record Description + + Sort range + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-1 starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + + + + + + FRANGE + + Record Type Code Body length + FRANGE 28 (1Ch) 8 bytes + + Record Description + + Fill range + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + + 0-1 starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + + + + + + + + KRANGE + + + Record Type Code Body length + KRANGE 29 (1Dh) 9 bytes + + Record Description + + Primary sort key range + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-1 starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + 8 Order: 0 = descending order + FF = ascending order + + + + HRANGE + + + Record Type Code Body length + HRANGE 32 (20h) 16 bytes + + Record Description + + Distribution range + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + + 0-1 Values range; starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + 8-9 Bin range starting column + 10-11 starting row + 12-13 ending column + 14-15 ending row + + + + + KRANGE2 + + + Record Type Code Body length + + KRANGE2 35(23h) 9 bytes + + Record Description + + Secondary sort key range + + Use in 1-2-3 only. + + Byte Number Byte Description + + 0-1 starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + 8 Order; 0 = descending order + FF = ascending order + + + + + + PROTEC + + + + Record Type Code Body length + + PROTEC 36(24h) 1 byte + + Record Description + + Global protection + + Used by both 1-2-3 and Symphony. + + Byte Number Byte Description + 0 0 = global protection OFF + 1 = global protection ON + + + + + + FOOTER + + + Record Type Code Body length + + FOOTER 37(25h) 242 bytes + + Record Description + + Print footer + + Used in 1-2-3 only. + + Byte Number Byte Description + 0-242 NULL termination ASCII string + + + + + + HEADER + + Record Type Code Body length + + HEADER 38(26h) 242 bytes + + Record Description + + Print header + + Used in 1-2-3 only. + + Byte Number Byte Description + 0-242 NULL termination ASCII string + + + SETUP + + + Record Type Code Body length + + SETUP 39(27h) 40 bytes + + Record Description + + Print setup + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-40 NULL terminated ASCII string + + + + MARGINS + + + + Record Type Code Body length + + MARGINS 40(28h) 10 bytes + + Record Description + + Print margins code + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-1 left margin + 2-3 right margin + 4-5 page length + 6-7 top margin + 8-9 bottom margin + + + + + LABELFMT + + + + Record Type Code Body length + + LABELFMT 41 (29h) 1 byte + + Record Description + + Label alignment + + Used by both 1-2-3 and Symphony + + Byte Number Byte Description + + 0 27h = left + 22h = right + 5Eh = center + + + + + TITLES + + + Record Types Code Body length + + TITLES 42(2Ah) 16 bytes + + Record Description + + Print borders + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0-1 Row border; starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + 8-9 Column border; starting column + 10-11 starting row + 12-13 ending column + 14-15 ending row + + + + + GRAPH + + + Record Type Code Body length + + GRAPH 45(2Dh) 437 bytes + + Record Description + + Current graph settings + + Used in 1-2-3 only. + + Byte Number Byte Description + + -- see Table 2 Graph Record Structure -- + + + + GRAPH + + + Table 2 Graph Record Structure + + Byte Number Byte Description + + 0-1 X Range; starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + + 8-9 A Range; starting column + 10-11 starting row + 12-13 ending column + 14-15 ending row + + 16-17 B Range; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + + 24-25 C Range; stating column + 26-27 starting row + 28-29 ending column + 30-31 ending row + 32-33 D Range; starting column + 34-35 starting row + 36-37 ending column + 38-39 ending row + + 40-41 E Range; starting column + 42-43 starting row + 44-45 ending column + 46-47 ending row + + 48-49 F Range; starting column + 50-51 starting row + 52-53 ending column + 54-55 ending row + + 56-57 A Labels; starting column + 58-59 starting row + 60-61 ending column + 62-63 ending row + + 64-65 B Labels; starting column + 66-67 starting row + 68-69 ending column + 70-71 ending row + + 72-73 C Labels; starting column + 74-75 starting row + 76-77 ending column + 78-79 ending row + + 80-81 D Labels; starting column + 82-83 starting row + 84-85 ending column + 86-87 ending row + + + + + GRAPH + + + Table 2 (continued) Graph Record Structure + + Byte Number Byte Description + + 88-89 E Labels; starting column + 90-91 starting row + 92-93 ending column + 94-95 ending row + 96-97 F Labels; starting column + 98-97 starting row + 100-101 ending column + 102-103 ending row + + 104 Graph type 0 = XY, 1 = bar, 2 = pie, + 4 = line, 5 = stacked bar + + 105 Grid; 0 = none, 1 = horizontal, + 2 = vertical, 3 = both + + 106 Color 0 = black-white, FF = color + + 107 A Range line format; 0 = none, 1 = line, + 2 = symbol, 3 = line-symbol + + 108 B Range line format; 0 = none, 1 = line, + 2 = symbol, e = line-symbol + + 109 C Range line format; 0 = none, 1 = line, + 2 = symbol, 3 = line-symbol + + 110 D Range line format; 0 = none, 1 = line, + 2 = symbol, 3 = line-symbol + + 111 E Range line format; 0 = none, 1 = line, + 2 = symbol, 3 = line-symbol + + 112 F Range line format; 0 = none, 1 = line, + 2 = symbol, 3 = line-symbol + + 113 A Range data label 0 = center, 1 = right, + alignment; 2 = below, 3 = left, + 4 = above + + 114 B Range data label 0 = center, 1 = right + alignment; 2 = below, 3 = left + 4 = above + + 115 C Range data label 0 = center, 1 = right + alignment; 2 = below, 3 = left + 4 = above + + 116 D Range data label 0 = center, 1 = right + alignment; 2 = below, 3 = left + 4 = above + + 117 E Range data label 0 = center, 1 = right + alignment; 2 = below, 3 = left + 4 = above + + 118 F Range data label 0 = center, 1 = right + alignment; 2 = below, 3 = left + 4 = above + + + + + GRAPH + + + Table 2 (continued) Graph Record Structure + + Byte Number Byte Description + + 119 Scale 0 = auto + FF = manual + 120-127 X lower limit in floating point format + + 128-135 X upper limit in floating point format + + 136 Y scale; 0 = automatic + FF = manual + + 137-144 Y lower limit in floating point format + + 145-152 Y upper limit in floating point format + + + + 153-192 First title + + 193-232 Second title + + 233-272 X title + + 273-312 Y title + + 313-332 A legend + + 333-352 B legend + + 353-372 C legend + + 373-392 D legend + + 393-412 E legend + + 413-432 F legend + + 433 X format + + 434 Y format + + 435-436 Skip factor + + + + + + NGRAPH + + + Record Type Code Body length + + NGRAPH 46 (2EH) 453 bytes + + Record Description + + Named current graph settings + + Used in 1-2-3 only. + + Bytes Number Byte Description + + -- see Table 3 Ngraph Record Structure -- + + + NGRAPH + + + Table 3 NGraph Record Structure + + Byte Number Byte Description + + 0-15 Name; NULL terminated ASCII string + + 16-17 X Range; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + + 24-25 A Range; starting column + 26-27 starting row + 28-29 ending column + 30-31 ending row + + 32-33 B Range; starting column + 34-35 starting row + 36-37 ending column + 38-39 ending row + + 40-41 C Range; starting column + 42-43 starting row + 44-45 ending column + 46-47 ending row + + 48-49 D Range; starting column + 50-51 starting row + 52-53 ending column + 54-55 ending row + + 56-57 E Range; starting column + 58-59 starting row + 60-61 ending column + 62-63 ending row + + 64-65 F Range; stating column + 66-67 starting row + 68-69 ending column + 70-71 ending row + + 72-73 A Labels; starting column + 74-75 starting row + 76-77 ending column + 78-79 ending row + + 80-81 B Labels; starting column + 82-83 starting row + 84-85 ending column + 86-87 ending row + + 88-89 C Labels; starting column + 90-91 starting row + 92-93 ending column + 94-95 ending row + + 96-97 D Labels; starting column + 98-99 starting row + 100-101 ending column + 102-103 ending row + + + NGRAPH + + + Table 3 (continued) NGraph Record Structure + + Byte Number Byte Description + + 104-105 E Labels; starting column + 106-107 starting row + 108-109 ending column + 110-111 ending row + + 112-113 F Labels; starting column + 114-115 starting row + 116-117 ending column + 118-119 ending row + + 120 Graph type; 0 = XY, 1 = bar, 2 = pie, + 4 = line, 5 = stacked bar + + 121 Grid 0 = none, 1 = horizontal, + 2 = vertical, 3 = both + + 122 Color; 0 = black-white, FF = color + + 123 A Range line format; 0 = none, l = line, + 2 = symbol, 3 = line-symbol + + 124 B Range line format; 0 = none, 1 = line, + 2 = symbol, 3 = line-symbol + + 125 C Range line format; 0 = none, 1 = line 2 = symbol, 3 = line-symbol + 2 = symbol, 3 = line-symbol + + 126 D Range line format; 0 = none, 1 = line + 2 = symbol, 3 = line-symbol + + 127 E Range line format; 0 = none, 1 = line + 2 = symbol, 3 = line-symbol + + 128 F Range line format; 0 = none, 1 = line + 2 = symbol, 3 = line-symbol + + 129 A Range data label 0 = center, 1 = right + alignment 2 = below, 3 = left, + 4 = above + + 130 B Range data label 0 = center, 1 = right + alignment 2 = below, 3 = left + 4 = above + + 131 C Range data label 0 = center, 1 = right + alignment 2 = below, 3 = left + 4 = above + + 132 D Range data label 0 = center, 1 = right + alignment 2 = below, 3 = left + 4 = above + + 133 E Range data label 0 = center, 1 = right + alignment 2 = below, 3 = left + 4 = above + + 134 F Range data label 0 = center, 1 = right + alignment 2 = below, 3 = left + + 135 Scale 0 = auto + FF = manual + + + + NGRAPH + + + Table 3 (continued) NGraph Record Structure + + Byte Number Byte Description + + 136-143 X lower limit in floating point format + + 144-151 X upper limit in floating point format + + 152 Y scale; 0 = automatic + FF = manual + + 153-160 Y lower limit in floating point format + + 161-168 Y upper limit in floating point format + + + 209-224 First title + + 225-248 Second title + + 249-288 X title + + 289-328 Y title + + 329-348 A legend + + 349-368 B legend + + 369-388 C legend + + 389-408 D legend + + 409-428 E legend + + 429-448 F legend + + 449 X format + + 450 Y format + + 451-452 Skip factor + + + + + CALCCOUNT + + + Record Type Code Body length + + CALCCOUNT 47(2Fh) 1 byte + + Record Description + + Iteration count + + Used in 1-2-3 and Symphony. + + Byte Number Byte Description + + 0 Iteration count + + + + + UNFORMATTED + + Record Type Code Body length + + UNFORMATTED 48(30h) 1 byte + + Record Description + + Formatted/unformatted print + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0 0 = formatted + 1 = unformatted + + + + + CURSORW12 + + + Record Type Code Body length + + CURSORW12 49(31h) 1 + + Record Description + + Cursor location + + Used in 1-2-3 only. + + Byte Number Byte Description + + 0 1 = cursor in Window 1 + 2 = cursor in Window 2 + + + + WINDOW + + + Record Type Code Body length + + WINDOW 50(32h) 144 bytes + + Record Description + + Window record structure + + Used in Symphony only. + + Byte Number Byte Description + + -- see Table 4 Window Record Structure -- + + + + WINDOW + + + Table 4 Window Record Structure + + Byte Number Byte Description + + 0-15 Window name NULL terminated ASCII + string + 16-17 Cursor position; column + 18-19 row + 20 Format (see Appendix A, + Cell Format Encoding) + + 21 Unused + 22-23 Column width + 24-25 Total number of columns + 26-27 Total number of rows + 28-29 Non-Title Home Position; column + 30-31 row + 32-33 Number of title columns + 34-35 Number of title rows + 36-37 Left title column + 38-39 Top title row + 40-41 Home position column + 42-43 Home position row + 44-45 Number of screen columns + 46-47 Number of screen rows + + 48 Hidden Status; 0 = hidden + FF = not hidden + + 49 Previous window; 0 = SHEET + 1 = DOC + 2 = GRAPH + 3 = COMM + 4 = FORM + 5 = APPLICATION + + 50 Border display; 0 = cell + FF = no cell + + 51 Border display lines; 0 = lines + FF = no lines + + 52-53 Window Range starting column + 54-55 starting row + 56-57 ending column + 58-59 ending row + + 60-61 Offset + + 62 Insert mode flag; 0 = OFF + non-zero = ON + + 63-78 Graph name + + + + + + + + WINDOW + + + + Table 4 (continued) Window Record Structure + + Byte Number Byte Description + 79 Window type; 0 = SHEET + 1 = DOC + 2 = GRAPH + 3 = COMM + 4 = FORM + 5 = APPLICATION + + 80 Automatic display mode "a" = automatic (ASCII + flag; lower case "a") + else = manual + + 81 Forms filter; 0 = filter + non-zero = no filter + + 82-97 Associated form name + 98-99 Forms current record + + 100 Space display; 0 = no spaces + non-zero = spaces + + 101 Line spacing; 1 = 1 space + 2 = 2 spaces + 3 = 3 spaces + + 102 Justify type "1" = left (ASCII lower + case "1") + "r" = right (ASCII lower + case "r") + "c" = center (ASCII + lower case "c" + "e" = even (ASCII lower + case "e" + + 103-104 Right Margin 0 = FOh characters + = right margin + FF = no user-defined + right margin; use + default value + + 105-106 Left Margin 0-FOh characters = left + margin + + 107-108 Tab interval + 109 CR display; 0 = soft + non-zero = hard + 110 Auto-justify on copy/ 0 = no + move; non-zero = yes + 111-126 Associated application + name + 127-143 Reserved Application Area + + + + STRING + + Record Type Code Body length + + STRING 51(33h) variable + + Record Description + + Value of string formula + + Used in Symphony only. + + Byte Number Byte Description + + 0 format (see Appendix A, Cell Format Encoding) + 1-2 column + 3-4 row + 5+ NULL terminated ASCII string + + + + PASSWORD + + + Record Type Code Body length + PASSWORD 55(37h) 4 byte + + Record Description + + File lockout (CHKSUM) + + This is proprietary information. + + Used in Symphony only. + + Byte Number Byte Description + + -- not available -- + + + + LOCKED + + Record Type Code Body length + + LOCKED 56(38h) 1 byte + + Record Description + + Lock Flag + + Used in Symphony only. + + Byte Number Byte Description + + 0 0 = OFF + 1 = ON + + QUERY + + + Record Type Code Body length + + QUERY 60(Ch) 127 bytes + + Record Description + + Query settings + + Used in Symphony only. + + Byte Number Byte Description + + -- see Table 5 Query Record Structure -- + + + QUERY + + Table 5 Query Record Structure + + Byte Number Byte Description + + 0-15 Name; NULL termination ASCII string + + 16-17 Input range; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + + 24-25 Output Range; starting column + 26-27 starting row + 28-29 ending column + 30-31 ending row + + 32-33 Criteria Range; starting column + 34-35 starting row + 36-37 ending column + 38-39 ending row + + 40-41 Form Entry; starting column + 42-43 starting row + 44-45 ending column + 46-47 ending row + + 48-49 Form Def. Range; starting column + 50-51 starting row + 52-53 ending column + 54-55 ending row + + 56-57 Report Output; starting column + 58-59 starting row + 60-61 ending column + 62-63 ending row + + 64-65 Report Header; starting column + 66-67 starting row + 68-69 ending column + 70-71 ending row + + 72-73 Report Footer; starting column + 74-75 starting row + 76-77 ending column + 78-79 ending row + + 80-81 Table Range; starting column + 82-83 starting row + 84-85 ending column + 86-87 ending row + + 88-89 Input Cell; starting column + 90-91 starting row + 92-93 ending column + 94-95 ending row + + QUERY + + + Table 5 (continued) Query Record Structure + + Byte Number Byte Description + + 96-97 1st Key range; starting column + 98-99 starting row + 100-101 ending column + 102-103 ending row + + 104-105 2nd Key range; starting column + 106-107 starting row + 108-109 ending column + 110-111 ending row + + 112-113 3rd Key range; starting column + 114-115 starting row + 116-117 ending column + 118-119 ending row + + 120 Last command; 0 = no command + 1 = find + 2 = extract + 3 = delete + 4 = unique + + 121 1st Key order; 0 = descending order + FF = ascending order + + 122 2nd Key order; 0 = descending order + FF = ascending order + + 123 3rd Key order 0 = descending order + FF = ascending order + + 124 Report number of records; 0 = multiple + FF = single + + 125 Number of records; 0 = multiple + FF = single + + 126 Marks; 0 = yes + FF = no + + + + QUERYNAME + + + Record Type Code Body length + QUERYNAME 61(3Dh) 16 bytes + + Record Description + + Current Query Name + + Used in Symphony only. + + Byte Number Byte Description + + 0-15 NULL terminated ASCII string + + PRINT + + + + Record Type Code Body length + PRINT 62(3Eh) 679 bytes + + Record Description + + Print record + + Used in Symphony only. + + Byte Number Byte Description + + -- see Table 6 Print Record Structure -- + + + + PRINT + + + Table 6 Print Record Structure + + Byte Number Byte Description + + 0-15 Print setting name; NULL terminated ASCII string + + 16-17 Source range; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + + 24-25 Row border; starting column + 26-27 starting row + 28-29 ending column + 30-31 ending row + + 32-33 Column border; starting column + 34-35 starting row + 36-37 ending column + 38-39 ending row + + 40-41 Destination; starting column + 42-43 starting row + 44-45 ending column + 46-47 ending row + + 48 Print format; 0 = as displayed + non-zero = formulas + + 49 Page breaks 0 = yes + non-zero = no + 50 Line spacing + 51-52 Left Margin + 53-54 Right Margin + 55-56 Page length + 57-58 Top + 59-60 Bottom of page + + 61-101 Setup string; NULL terminated ASCII string + 102-342 Header; NULL terminated ASCII string + 343-584 Footer; NULL terminated ASCII string + 585-600 Source database name; NULL terminated ASCII string + + 601 Attribute; 0 = no + non-zero = yes + + 602 Space compression; 0 = no + non-zero = yes + + 603 Print destination 0 = printer + 1 = file + 2 = range + + 604-605 Starting page + 606-607 Ending page + 608-677 Destination filename; NULL terminated ASCII string + + 678 Wait; 0 = no + non-zero = yes + + + + PRINTNAME + + + Record Type Code Body length + + PRINTNAME 63(3Fh) 16 bytes + + Record Description + + Current Print Record Name + + Used in Symphony only. + + Byte Number Byte Description + + 0-15 NULL terminated ASCII string + + + + GRAPH2 + + + + Record Type Code Body length + + GRAPH2 64(40h) 499 bytes + + + Record Description + + Graph record + + Used in Symphony only. + + Byte Number Byte Description + + -- see Table 7 Symphony Graph Record Structure -- + + + + GRAPH2 + + + Table 7 Symphony Graph Record Structure + + Byte Number Byte Description + 0-15 Name; NULL terminated ASCII string + 16-17 XRange; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + + 24-25 A Range; starting column + 26-27 starting row + 28-29 ending column + 30-31 ending row + + 32-33 B Range; starting column + 34-35 starting row + 36-37 ending column + 38-39 ending row + + 40-41 C Range; starting column + 42-43 starting row + 44-45 ending column + 46-47 ending row + + 48-49 D Range; starting column + 50-51 starting row + 52-53 ending column + 54-55 ending row + + 56-57 E Range; starting column + 58-59 starting row + 60-61 ending column + 62-63 ending row + + 64-65 F Range; starting column + 66-67 starting row + 68-69 ending column + 70-71 ending row + + 72-73 A Labels; starting column + 74-75 starting row + 76-77 ending column + 78-79 ending row + + 80-81 B Labels; starting column + 82-83 starting row + 84-85 ending column + 86-87 ending row + + 88-89 C Labels; starting column + 90-91 starting row + 92-93 ending column + 94-95 ending row + + + GRAPH2 + + + Table 7 (continued) Symphony Graph Record Structure + + Byte Number Byte Description + + 96-97 D Labels; starting column + 98-99 starting row + 100-101 ending column + 102-103 ending row + + 104-105 E Labels; starting column + 106-107 starting row + 108-109 ending column + 110-111 ending row + + 112-113 F Labels; starting column + 114-115 starting row + 116-117 ending column + 118-119 ending row + + 120 Graph type; 0 = XY, 1 = bar, 2 = pie, + 4 = line, 5 = stacked + bar + + 121 Grid; 0 = none, 1 = horizontal, + 2 = vertical, 3 = both + + 122 Color; 0 = black-white, + FF = color + + 123 A Range line format; 0 = none, 1 = line, + 2 = symbol, + 3 = line-symbol + + 124 B Range line format; 0 = none, 1 = line, + 2 = symbol, + 3 = line-symbol + + 125 C Range line format; 0 = none, 1 = line, + 2 = symbol, + 3 = line-symbol + + 126 D Range line format; 0 = none, 1 = line + 2 = symbol, + 3 = line-symbol + + 127 E Range line format; 0 = none, 1 = line + 2 = symbol, + 3 = line-symbol + + 128 F Range line format; 0 = none, 1 = line + 2 = symbol + 3 = line-symbol + + 129 A Range data label alignment; 0 = center, 1 = right, + 2 = below, 3 = left, + 4 = above + + 130 B Range data label alignment; 0 = center, 1 = right + 2 = below, 3 = left + 4 = above + + 131 C Range data label alignment; 0 = center, 1 = right + 2 = below, 3 = left + 4 = above + + 132 D Range data label alignment; 0 = center, 1 = right + 2 = below, 3 = left + 4 = above + + 133 E Range data label alignment; 0 = center, 1 = right + 2 = below, 3 = left + 4 = above + + 134 F Range data label alignment; 0 = center, 1 = right + 2 = below, 3 = left + 4 = above + + + + + + + GRAPH2 + + + Table 7 (continued) Symphony Graph Record Structure + + Byte Number Byte Description + + 135 X Scale 0 = auto + + 136-143 X lower limit in floating point format FF = manual + + 144-151 X upper limit in floating point format + + 152 Y scale; 0 = automatic + FF = manual + + 153-160 Y lower limit in floating point format + 161-168 Y upper limit in floating point format + 169-208 First title + 209-248 Second title + 249-288 X title + 289-328 Y title + 329-348 A legend + 349-368 B legend + 369-388 C legend + 389-408 D legend + 409-428 E legend + 429-448 F legend + 449 X format + 450 Y format + 451-452 Skip factor + 453 X scale flag; (x1K) 0 = ON + FF = OFF + + 454 Y scale flag;(x1K) 0 = ON + FF = OFF + + 455 suppress; 0 = no + else = yes + + 456-463 Bar origin (float) + 464-471 X linear scale (float) + 472-479 Y linear scale (float) + 480 X log scale + 481 Y log scale + + 482 graph region color; X hue code + 483 A hue code + 484 B hue code + 485 C hue code + 487 D hue code + 488 F hue code + 489-490 Y width + 491-498 Aspect (float) + + + + + GRAPHNAME + + + Record Type Code Body length + + GRAPHNAME 65 (41h) 16 bytes + + Record Description + + Current Graph Record Name + + Used in Symphony only. + + Byte Number Byte Description + + 0-15 NULL terminated ASCII string + + + ZOOM + + + + Record Type Code Body length + + ZOOM 66 (42h) 9 bytes + + Record Description + + Original coordinates expanded window + + Used in Symphony only. + + Byte Number Byte Description + + 0 iszoom? 0 = no + 1 = yes + 1-2 X coordinates + 3-4 Y coordinates + 5-6 column depth + 7-8 row depth + + + + + SYMSPLIT + + + Record Type Code Body length + + SYMSPLIT 67 (43h) 2 bytes + + Record Description + + Number of split windows + + Used in Symphony only. + + Byte Number Byte Description + + 0-1 number of split windows + + + + + NSROWS + + Record Type Code Body length + + NSROWS Code Body length + + NSROWS 68 (44h) 2 bytes + + Record Description + + Number of screen rows + + Used in Symphony only. + + Byte Number Byte Description + + 0-1 number of screen rows + + + + + + NSCOLS + + + Record Type Code Body length + + NSCOLS 69 (45h) 2 bytes + + Record Description + + Number of screen columns + + Used in Symphony only. + + Byte Number Byte Description + + 0-1 Number of screen columns + + + + RULER + + + + Record Type Code Body length + + RULER 70 (46h) 25 bytes + + Record Description + + Name ruler range + + Used in Symphony only. + + Byte Number Byte Description + + 0-15 Name; NULL terminated ASCII string + 16-17 Range; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + 24 Range type; 0 = single cell + 1 = range + + + + NNAME + + + Record Type Code Body length + + NNAME 71 (47h) 25 bytes + + Record Description + + Named sheet range + + Used in Symphony only. + + Byte Number Byte Description + + 0-15 Name; NULL terminated ASCII string + 16-17 Range; starting column + 18-19 starting row + 20-21 ending column + 22-23 ending row + 24 Range type; 0 = single cell + 1 = range + + + + ACCOM + + + Record Type Code Body length + + ACOMM 72 (48h) 65 bytes + + Record Description + + Autoload communications file + + Used in Symphony only. + + Byte Number Byte Description + + 0-64 Path name to Autoload file; + NULL terminated ASCII string + + + + + AMACRO + + + Record Type Code Body length + + AMACRO 73 (49h) 8 bytes + + Record Description + + Autoexecute macro address + + Used in Symphony only. + + Byte Number Byte Description + + 0-1 starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + + + + PARSE + + + Record Type Code Body length + + PARSE 74 (4Ah) 16 bytes + + Record Description + + Query parse information + + Used in Symphony only. + + Byte Number Byte Description + + 0-1 Parse range; starting column + 2-3 starting row + 4-5 ending column + 6-7 ending row + 8-9 Review range; starting column + 10-11 starting row + 12-13 ending column + 14-15 ending row + WORKSHEET FILE FORMAT + FROM LOTUS + + APPENDIX A - CELL FORMAT ENCODING + + Copyright(c) 1984, Lotus Development Corporation + 161 First Street + Cambridge, Massachusetts 02142 + (617) 492-7171 + Electronic Edition, December, 1984 + All Rights Reserved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + APPENDIX A: Cell Format Encoding + + + The first byte of a content-related record contains a cell format code. + + Format is determined at the bit level. + + + Table 8 Cell Format Encoding + + Bit number Description Code Meaning + 7 protection 1 protected + 0 unprotected + + 4,5,6 format type 0 fixed + 1 scientific + notation + 2 currency + 3 percent + 4 comma + 5 unused + 6 unused + 7 special + 0,1,2,3 number of decimal 0-15 + places decoded + (if format type = 0-6) + + special format type 0 +/- + (if format type = 7) 1 general + 2 day-month-year + 3 day-month + 4 month-year + 5 text + (Symphony only) 6 hidden + (Symphony only) 7 date;hour-min-sec + (Symphony only) 8 date;hour-min + (Symphony only) 9 date;intnt'l1 + (Symphony only) 10 date;intnt'l1 + (Symphony only) 11 time;intnt'l1 + (Symphony only) 12 time;intnt'l2 + 13-14 unused + 15 default + + + + + + + + EXAMPLE + + Currency format, two decimal places, unprotected cell + + + Bit Number 7 6 5 4 3 2 1 0 + Binary Code 0 0 1 0 0 0 1 0 + --------- + Format Type --------------- + Protection Number of Decimal Places + or Special Format + + The byte number is 0. + The hex code is 22. + + + Example + + Special format, month-year, protected cell + + + Bit Number 7 6 5 4 3 2 1 0 + Binary Code 1 1 1 1 0 1 0 0 + --------- + Format Type ------------- + Protection Number of Decimal Places + or Special Format + + + The byte number is 0. + The hex code is F4. + WORKSHEET FILE FORMAT + FROM LOTUS + + APPENDIX B - THE FORMULA COMPILER + + Copyright(c) 1984, Lotus Development Corporation + 161 First Street + Cambridge, Massachusetts 02142 + (617) 492-7171 + Electronic Edition, December, 1984 + All Rights Reserved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + APPENDIX B: The Formula Compiler + + This appendix describes the internal workings of the formula compiler. The + compiler transforms an ASCII string of characters representing a formula to + its Reverse Polish code. The basic algorithm utilizes and SR parser (SR = + shift and reduce). The aim of the parser is to apply a set of reduction + rules which embody the syntax of the compiler to an input string. Formula + code is compiled to a temporary buffer. + + Lexicon Analysis + + A lexical analyzer breaks up the input string into lexical units called + tokens. A token is a substring of the original input string operand, + operator, or special symbol (such as comma, parentheses, etc.) In addition, + the lexical analyser supplies two special tokens, "beginning of formula" + (boform) and "end of formula" (eoform), to facilitate the compilation + process. The lexical analyzer identifies and processes literals (both + number and string), cell and range references, operators, and function + calls. It assigns a unique code to each distinct operator, function, or + type of operand. + + A function with no arguments is treated like a number. + + Syntax Analysis + + The syntactical analysis of a formula is accomplished by processing a list + of tokens in left-to-right order. A stack called the syntax is also used + during the syntactical scan. The basic algorithm is as follows: + + Repeat the following steps: + + 1) Get the next token + + 2) If the token is a literal or cell reference: + a) Push the number code on the syntax stack + b) Push the number code on the syntax stack + + 3) If the token is a range reference: + a) Compile code to push the range reference + b) Push the range code on the syntax stack + + 4) Otherwise push the token code for the token on the syntax stack. + + For each syntax rule, if the pattern on the top of the syntax matches the + rule pattern take the action associated with the rule and start scanning + from the beginning for any additional rules which may apply. + + When a token code is pushed on the syntax stack, an additional word of + zeros is also pushed on the stack. This is used when compiling function + calls to hold the function's argument count. + + + + + + Rule Matching + + A relatively small number of rules are used to process formulas of arbitrary + complexity. If a rule matches the top of the syntax stack, then the + compiler takes a specific action and rule scanning starts again with the + first rule. Each rule matches certain patterns on the syntax stack. A + typical rule might be: if the top of the stack is the token for right + parenthesis, and the next-to-top is a number, and the second form the top + is a left parenthesis, then pop the top three items from the syntax stack + and push the number on the syntax stack. + + This rule can be more succinctly represented as: + + Stack + + Before After Action + ) + number + ( number none + + + + The Rules + + + The following are the syntax rules used to process formulas. Note that the + order of the rules is important. The rules for compilation of operators + used additional tables which assign a precedence number and opcode to each + legal unary and binary operator. Thus, for example, there is a single + token code for minus sign (-), but there are two opcodes one for unary + minus and one for binary minus. In addition, these two operators, while + lexically identical, also have different precedence. In general, operators + of higher precedence will be performed before operators of lower precedence + are performed left-to-right. All special operators (boform, eoform, + parentheses, comma, etc.) are implicitly assigned a precedence of zero. + + Rule 1 Termination test + + Stack + + Before After Action + eoform Output a return code to compile buffer + number Return, indicating successful compile + boform + + Rule 2 Function argument processing + + Stack + Before After Action + ' Error if range argument illegal for + number or range function. + ( ( Increment argument count on stack + function function + + Rule 3 Process final function argument + + Stack + Before After Action + ) Error if range argument illegal for + number or range function. + ( Increment argument count on stack + function number Compile function opcode + If list function, compile argument + count; otherwise error is wrong + argument count. + + + + + Rule 4 Parenthesis removal + + Stack + Before After Action + ) Compile parenthesis opcode + number + ( number + operator operator + + + + Rule 5 Binary operators + + Stack + Before After Action + op2 If binary op na 3 + < = na 3 + > = na 3 + < na 3 + > na 3 + #and# na 1 + #or# na 1 + #not# 2 na + + + + + + + + + + + + Example: + + Using the above rules, we can now see how a particular formula is + compiled. Let us consider the following formula: + + 3+5*6 + + This is broken up by the lexical analyzer into seven tokens. + + boform + 3 + + + 5 + * + 6 + eoform + + The syntax scans proceed as follows until a matching rule is found: + + Stack + + boform number + number + boform number + + boform number + boform + + Compile buffer + + push 3 push 3 push 3 + push 5 + + At this point, rule 5 is invoked, but since the precedence of boform is + zero, no action is taken. + + Stack + + * number + number * + + number + number + + boform number + boform + + Compile buffer + + push 3 push 3 + push 5 push 5 + push 6 + + + + + + + + At this point, since the binary precedence of + is lower than the binary + precedence of *, rule 5 does apply, and the opcode for * is compiled. The + stack is reduced by replacing number * number by number and scan is made, + but no further rule applies. + + + Stack + + number eoform + + number + number + + boform number + boform + + Compile buffer + + push 3 push 3 + push 5 push 5 + push 6 push 6 + + + + Rule 5 applies again, and the opcode for + is compiled, reducing the stack + to boform, number, eoform. Rescanning finds a match on rule 1 which + compiles a return opcode and terminates. The final compiled code is thus: + + push 3 + push 5 + push 6 + * + + + return + + A Note on the Decompiler + + The algorithm for the formula decompiler was taken verbatim from: + + Writing Interactive Compilers and Interpreters, P.J. Brown, John Wiley and + Sons, 1979. See chapter 6.2. The algorithm itself is described on pages + 216 and 217. + + This algorithm is also described in the following article. + + More on the Re-creation of Source Code from Reverse Polish, P.J. Brown, + Software Practice and Experience, Vol 7, 545-551 (1977). + + + + + + + + + + + WORKSHEET COLUMN DESIGNATORS + + Most records within the 1-2-3 Condensed Worksheet format are specified + with column/row designators (for example, column 0, row 0 equals A1). When + determining the column designator, the table below will help make + conversion easier. + + + Column Hex Dec Column Hex Dec Column Hex Dec + A 0 1 BA 34 52 DA 68 104 + B 1 1 BB 35 53 DB 69 105 + C 2 2 BC 36 54 DC 6A 106 + D 3 3 BD 37 55 DD 6B 107 + E 4 4 BE 38 56 DE 6C 108 + F 5 5 BF 39 57 DF 6D 109 + G 6 6 BG 3A 58 DG 6E 110 + H 7 7 BH 3B 59 DH 6F 111 + I 8 8 BI 3C 60 DI 70 112 + J 9 9 BJ 3D 61 DJ 71 113 + K A 10 BK 3E 62 DK 72 114 + L B 11 BL 3F 63 DL 73 115 + M C 12 BM 40 64 DM 74 116 + N D 13 BN 41 65 DN 75 117 + O E 14 BO 42 66 DO 76 118 + P F 15 BP 43 67 DP 77 119 + Q 10 16 BQ 44 68 DQ 78 120 + R 11 17 BR 45 69 DR 79 121 + S 12 18 BS 46 70 DS 7A 122 + T 13 19 BT 47 71 DT 7B 123 + U 14 20 BU 48 72 DU 7C 124 + V 15 21 BV 49 73 DV 7D 125 + W 16 22 BW 4A 74 DW 7E 126 + X 17 23 BX 4B 75 DX 7F 127 + Y 18 24 BY 4C 76 DY 80 128 + Z 19 25 BZ 4D 77 DZ 81 129 + AA 1A 26 CA 4E 78 EA 82 130 + AB 1B 27 CB 4F 79 EB 83 131 + AC 1C 28 CC 50 80 EC 84 132 + AD 1D 29 CD 51 81 ED 85 133 + AE 1E 30 CE 52 82 EE 86 134 + AF 1F 31 CF 53 83 EF 87 135 + AG 20 32 CG 54 84 EG 88 136 + AH 21 33 CH 55 85 EH 89 137 + AI 22 34 CI 56 86 EI 8A 138 + AJ 23 35 CJ 57 87 EJ 8B 139 + AK 24 36 CK 58 88 EK 8C 140 + AL 25 37 CL 59 89 EL 8D 141 + AM 26 38 CM 5A 90 EM 8E 142 + AN 27 39 CN 5B 91 EN 8F 143 + AO 28 40 CO 5C 92 EO 90 144 + AP 29 41 CP 5D 93 EP 91 145 + AQ 2A 42 CQ 5E 94 EQ 92 146 + AR 2B 43 CR 5F 95 ER 93 147 + AS 2C 44 CS 60 96 ES 94 148 + AT 2D 45 CT 61 97 ET 95 149 + AU 2E 46 CU 62 98 EU 96 150 + AV 2F 47 CV 63 99 EV 97 151 + AW 30 48 CW 64 100 EW 98 152 + AX 31 49 CX 65 101 EX 99 153 + AY 32 50 CY 66 102 EY 9A 154 + AZ 33 51 CZ 67 103 EZ 9B 155 + + + + + + + + + (CONTINUED) + + + + + Column Hex Dec Column Hex Dec + + FA 9C 156 HA DO 208 + FB 9D 157 HB D1 209 + FC 9E 158 HC D2 210 + FD 9F 159 HD D3 211 + FE AO 160 HE D4 212 + FF A1 161 HF D5 213 + FG A2 162 HG D6 214 + FH A3 163 HH D7 215 + FI A4 164 HI D8 216 + FJ A5 165 HJ D9 217 + FK A6 166 HK DA 218 + FL A7 167 HL DB 219 + FM A8 168 HM DC 220 + FN A9 169 HN DD 221 + FO AA 170 HO DE 222 + FP AB 171 HP DF 223 + FQ AC 172 HQ EO 224 + FR AD 173 HR E1 225 + FS AE 174 HS E2 226 + FT AF 175 HT E3 227 + FU BO 176 HU E4 228 + FV B1 177 HV E5 229 + FW B2 178 HW E6 230 + FX B3 179 HX E7 231 + FY B4 180 HY E8 232 + FZ B5 181 HZ E9 233 + GA B6 182 IA EA 234 + GB B7 183 IB EB 235 + GC B8 184 IC EC 236 + GD B9 185 ID ED 237 + GE BA 186 IE EE 238 + GF BB 187 IF EF 239 + GG BC 188 IG FO 240 + GH BD 189 IH F1 241 + GI BE 190 II F2 242 + GJ BF 191 IJ F3 243 + GK CO 192 IK F4 244 + GL C1 193 IL F5 245 + GM C2 195 IM F6 246 + GN C3 195 IN F7 247 + GO C4 196 IO F8 248 + GP C5 197 IP F9 249 + GQ C6 198 IQ FA 250 + GR C7 199 IR FB 251 + GS C8 200 IS FC 252 + GT C9 201 IT FD 253 + GU CA 202 IU FE 254 + GV CB 203 IV FF 255 + GW CC 204 + GX CD 205 + GY CE 206 + GZ CF 207 + + + + + ANALYSIS OF 1-2-3 WORKSHEET FILE + + The worksheet shown below was created in 1-2-3 and saved to disk. + + + + Key: + + A2..A5 Named Range (code 11) + EXAMPLE A2: Label (code 15) + 100 A3: Integer (code 13) + 12.5 A4: Number (code 14) + 87.5 A5: Formula (+A3-A4) + (code 16) + + + The example shown below is a partial hex dump of this worksheet file. By + reading each record header, you can determine the type of record you are + encountering. The record header will also tell you the length of that + follows the header. By analyzing the record header, you can read the + records you want and skip unrelated records. + + + 362B:0100 06 00 08 00 00 00 00 00 00 00 + 362B:0110 04 00 2F 00 01 00 01 02 00 01 00 FF 03 00 01 00 + 362B:0120 00 04 00 01 00 00 05 00 01 00 FF 07 00 1F 00 00 + 362B:0130 00 01 00 71 00 09 00 08 00 14 00 00 00 00 00 00 + 362B:0140 00 00 00 00 00 00 00 04 00 04 00 48 00 00 0B 00 + 362B:0150 18 00 54 45 53 54 00 00 00 00 00 00 00 00 00 00 + 362B:0160 00 00 00 00 01 00 00 00 04 00 18 00 19 00 00 FF + 362B:0170 FF 00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF + 362B:0180 + + + 362B:05C0 + 362B:05D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 362B:05E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 362B:05F0 00 00 00 00 71 71 01 00 0F 00 0E 00 FF 00 00 01 + 362B:0600 00 27 45 58 41 4D 50 4C 45 00 0D 00 07 00 FF 00 + 362B:0610 00 02 00 64 00 + 362B:0620 10 00 1B 00 FF 00 00 04 00 00 + 362B:0630 00 00 00 00 E0 55 40 0C 00 01 00 80 FE BF 01 00 + 362B:0640 80 FF BF 0A 03 + + +ADDENDUM to WORKSHEET FILE FORMAT Document (2-19-85): + + +The following supplements the discussion of the FORMULA record +type in the Worksheet File Format document. +__________________________________________________________________________ + + + Formula Record Type + + byte 0 = format + byte 1 & 2 = column + byte 3 & 4 = row + byte 5-12 = formula numeric value (IEEE long real) + byte 13 & 14 = formula size (bytes) + byte 15 & above = formula code, compiled Reverse-Polish + Internal Notation; max of 2048 bytes + + Opcode Explanation + ------ ------------ + + 0 push constant...followed by 8 byte # + 1 push variable...followed by 4 byte column,row...a + relative coordinate has its most significant bit set + 2 push range...followed by 8 byte begin/end column,row + 3 end of formula + 4 parentheses + 5 integer constant...followed by 2 byte integer + 6 push string...followed by null terminated string + 7 unused + 8 unary - + 9 binary + + 10 binary - + + 11 * + 12 / + 13 ^ + 14 = + 15 <> + 16 <= + 17 >= + 18 < + 19 > + 20 #AND# + + 21 #OR# + 22 #NOT# + 23 unary + + 24 & + 25..30 unused + + 31 @na + 32 @err + 33 @abs + 34 @int + 35 @sqrt + 36 @log + 37 @ln + 38 @pi + 39 @sin + 40 @cos + + 41 @tan + 42 @atan2 + 43 @atan + 44 @asin + 45 @acos + 46 @exp + 47 @mod + 48 @sel + 49 @isna + 50 @iserr + + 51 @false + 52 @true + 53 @rand + 54 @date + 55 @now + 56 @pmt + 57 @pv + 58 @fv + 59 @if + 60 @day + + 61 @month + 62 @year + 63 @round + 64 @time + 65 @hour + 66 @minute + 67 @second + 68 @isnumber + 69 @isstring + 70 @length + + 71 @value + 72 @fixed + 73 @mid + 74 @chr + 75 @ascii + 76 @find + 77 @datevalue + 78 @timevalue + 79 @cell pointer + 80 @sum..followed by 1 byte >>> # of args + + 81 @avg..same as above + 82 @cnt.. " " " + 83 @min.. " " " + 84 @max.. " " " + 85 @vlookup + 86 @npv + 87 @var + 88 @std + 89 @irr + 90 @hlookup + + 91 @dsum + 92 @davg + 93 @dcnt + 94 @dmin + 95 @dmax + 96 @dvar + 97 @dstd + 98 @index + 99 @cols + 100 @rows + + 101 @repeat + 102 @upper + 103 @lower + 104 @left + 105 @right + 106 @replace + 107 @proper + 108 @cell + 109 @trim + 110 @clean + + 111 @s + 112 @v + 113 @streq + 114 @call + 115 @indirect + + +-- end of list -- + + + + \ No newline at end of file diff --git a/docs/callgate.zip b/docs/callgate.zip new file mode 100644 index 0000000..1714d7f Binary files /dev/null and b/docs/callgate.zip differ diff --git a/docs/cert.txt b/docs/cert.txt new file mode 100644 index 0000000..87b99b7 --- /dev/null +++ b/docs/cert.txt @@ -0,0 +1,648 @@ +keytool - Key and Certificate Management Tool +Manages a keystore (database) of private keys and their associated X.509 certificate chains authenticating the corresponding public keys. Also manages certificates from trusted entities. +SYNOPSIS +keytool [ commands ] + +DESCRIPTION +keytool is a key and certificate management utility. It enables users to administer their own public/private key pairs and associated certificates for use in self-authentication (where the user authenticates himself/herself to other users/services) or data integrity and authentication services, using digital signatures. It also allows users to cache the public keys (in the form of certificates) of their communicating peers. +A certificate is a digitally signed statement from one entity (person, company, etc.), saying that the public key (and some other information) of some other entity has a particular value. (See Certificates.) When data is digitally signed, the signature can be verified to check the data integrity and authenticity. Integrity means that the data has not been modified or tampered with, and authenticity means the data indeed comes from whoever claims to have created and signed it. + +keytool stores the keys and certificates in a so-called keystore. The default keystore implementation implements the keystore as a file. It protects private keys with a password. + +The jarsigner tool uses information from a keystore to generate or verify digital signatures for Java ARchive (JAR) files. (A JAR file packages class files, images, sounds, and/or other digital data in a single file). jarsigner verifies the digital signature of a JAR file, using the certificate that comes with it (it is included in the signature block file of the JAR file), and then checks whether or not the public key of that certificate is "trusted", i.e., is contained in the specified keystore. + +Please note: the keytool and jarsigner tools completely replace the javakey tool provided in JDK 1.1. These new tools provide more features than javakey, including the ability to protect the keystore and private keys with passwords, and the ability to verify signatures in addition to generating them. The new keystore architecture replaces the identity database that javakey created and managed. It is possible to import the information from an identity database into a keystore, via the -identitydb keytool command. + +Keystore Entries +There are two different types of entries in a keystore: +key entries - each holds very sensitive cryptographic key information, +which is stored in a protected format to prevent unauthorized access. Typically, a key stored +in this type of entry is a secret key, or a private key accompanied by the certificate "chain" +for the corresponding public key. The keytool and jarsigner tools only handle the latter +type of entry, that is private keys and their associated certificate chains. + +trusted certificate entries - each contains a single public key certificate belonging to another party. It is called a "trusted certificate" because the keystore owner trusts that the public key in the certificate indeed belongs to the identity identified by the "subject" (owner) of the certificate. The issuer of the certificate vouches for this, by signing the certificate. +Keystore Aliases +All keystore entries (key and trusted certificate entries) are accessed via unique aliases. Aliases are case-insensitive; the aliases Hugo and hugo would refer to the same keystore entry. + +An alias is specified when you add an entity to the keystore using the -genkey command to generate a key pair (public and private key) or the -import command to add a certificate or certificate chain to the list of trusted certificates. Subsequent keytool commands must use this same alias to refer to the entity. + +For example, suppose you use the alias duke to generate a new public/private key pair and wrap the public key into a self-signed certificate (see Certificate Chains) via the following command: + + keytool -genkey -alias duke -keypass dukekeypasswd + +This specifies an inital password of "dukekeypasswd" required by subsequent commands to access the private key assocated with the alias duke. If you later want to change duke's private key password, you use a command like the following: + keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass + +This changes the password from "dukekeypasswd" to "newpass". +Please note: A password should not actually be specified on a command line or in a script unless it is for testing purposes, or you are on a secure system. If you don't specify a required password option on a command line, you will be prompted for it. When typing in a password at the password prompt, the password is currently echoed (displayed exactly as typed), so be careful not to type it in front of anyone. + +Keystore Location +Each keytool command has a -keystore option for specifying the name and location of the +persistent keystore file for the keystore managed by keytool. The keystore is by default stored +in a file named .keystore in the user's home directory, as determined by the "user.home" system +property. Given user name uName, the "user.home" property value defaults to +C:\Winnt\Profiles\uName on multi-user Windows NT systems +C:\Windows\Profiles\uName on multi-user Windows 95 systems +C:\Windows on single-user Windows 95 systems + +Thus, if the user name is "cathy", "user.home" defaults to +C:\Winnt\Profiles\cathy on multi-user Windows NT systems +C:\Windows\Profiles\cathy on multi-user Windows 95 systems + +Keystore Creation +A keystore is created whenever you use a -genkey, -import, or -identitydb command to add data +to a keystore that doesn't yet exist. +More specifically, if you specify, in the -keystore option, a keystore that doesn't yet exist, +that keystore will be created. + +If you don't specify a -keystore option, the default keystore is a file named .keystore in your home directory. If that file does not yet exist, it will be created. + +Keystore Implementation +The KeyStore class provided in the java.security package supplies well-defined interfaces to +access and modify the information in a keystore. It is possible for there to be multiple +different concrete implementations, where each implementation is that for a particular type +of keystore. +Currently, two command-line tools (keytool and jarsigner) and a GUI-based tool named Policy Tool +make use of keystore implementations. Since KeyStore is publicly available, JDK users can write +additional security applications that use it. + +There is a built-in default implementation, provided by Sun Microsystems. It implements the +keystore as a file, utilizing a proprietary keystore type (format) named "JKS". It protects each +private key with its individual password, and also protects the integrity of the entire keystore +with a (possibly different) password. + +Keystore implementations are provider-based. More specifically, the application +interfaces supplied by KeyStore are implemented in terms of a "Service Provider Interface" (SPI). +That is, there is a corresponding abstract KeystoreSpi class, also in the java.security package, +which defines the Service Provider Interface methods that "providers" must implement. +(The term "provider" refers to a package or a set of packages that supply a concrete +implementation of a subset of services that can be accessed by the Java Security API.) Thus, +to provide a keystore implementation, clients must implement a "provider" and supply a +KeystoreSpi subclass implementation, as described in How to Implement a Provider for the Java + Cryptography Architecture. + +Applications can choose different types of keystore implementations from different providers, +using the "getInstance" factory method supplied in the KeyStore class. A keystore type defines +the storage and data format of the keystore information, and the algorithms used to protect +private keys in the keystore and the integrity of the keystore itself. Keystore implementations + of different types are not compatible. + +keytool works on any file-based keystore implementation. (It treats the keytore location that +is passed to it at the command line as a filename and converts it to a FileInputStream, from +which it loads the keystore information.) The jarsigner and policytool tools, on the other +hand, can read a keystore from any location that can be specified using a URL. + +For keytool and jarsigner, you can specify a keystore type at the command line, via the +-storetype option. For Policy Tool, you can specify a keystore type via the "Change Keystore" +command in the Edit menu. + +If you don't explicitly specify a keystore type, the tools choose a keystore implementation +based simply on the value of the keystore.type property specified in the security properties +file. The security properties file is called java.security, and it resides in the JDK security +properties directory, java.home\lib\security, where java.home is the runtime environment's +directory (the jre directory in the SDK or the top-level directory of the Java 2 Runtime + Environment). + +Each tool gets the keystore.type value and then examines all the currently-installed providers until it finds one that implements keystores of that type. It then uses the keystore implementation from that provider. + +The KeyStore class defines a static method named getDefaultType that lets applications and applets retrieve the value of the keystore.type property. The following line of code creates an instance of the default keystore type (as specified in the keystore.type property): + + KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + +The default keystore type is "jks" (the proprietary type of the keystore implementation provided by Sun). This is specified by the following line in the security properties file: + + keystore.type=jks + +To have the tools utilize a keystore implementation other than the default, you can change that line to specify a different keystore type. + +For example, if you have a provider package that supplies a keystore implementation for a keystore type called "pkcs12", change the line to + + keystore.type=pkcs12 + +Note: case doesn't matter in keystore type designations. For example, "JKS" would be considered the same as "jks". +Supported Algorithms and Key Sizes +keytool allows users to specify any key pair generation and signature algorithm supplied by any of the registered cryptographic service providers. That is, the keyalg and sigalg options for various commands must be supported by a provider implementation. The default key pair generation algorithm is "DSA". The signature algorithm is derived from the algorithm of the underlying private key: If the underlying private key is of type "DSA", the default signature algorithm is "SHA1withDSA", and if the underlying private key is of type "RSA", the default signature algorithm is "MD5withRSA". +When generating a DSA key pair, the key size must be in the range from 512 to 1024 bits, and must be a multiple of 64. The default key size for any algorithm is 1024 bits. + +Certificates +A certificate (also known as a public-key certificate) is a digitally signed statement from one entity (the issuer), saying that the public key (and some other information) of another entity (the subject) has some specific value. +Let us expand on some of the key terms used in this sentence: + +Public Keys +These are numbers associated with a particular entity, and are intended to be known to everyone who needs to have trusted interactions with that entity. Public keys are used to verify signatures. +Digitally Signed +If some data is digitally signed it has been stored with the "identity" of an entity, and a signature that proves that entity knows about the data. The data is rendered unforgeable by signing with the entity's private key. +Identity +A known way of addressing an entity. In some systems the identity is the public key, in others it can be anything from a Unix UID to an Email address to an X.509 Distinguished Name. +Signature +A signature is computed over some data using the private key of an entity (the signer, which in the case of a certificate is also known as the issuer). +Private Keys +These are numbers, each of which is supposed to be known only to the particular entity whose private key it is (that is, it's supposed to be kept secret). Private and public keys exist in pairs in all public key cryptography systems (also referred to as "public key crypto systems"). In a typical public key crypto system, such as DSA, a private key corresponds to exactly one public key. Private keys are used to compute signatures. +Entity +An entity is a person, organization, program, computer, business, bank, or something else you are trusting to some degree. +Basically, public key cryptography requires access to users' public keys. In a large-scale networked environment it is impossible to guarantee that prior relationships between communicating entities have been established or that a trusted repository exists with all used public keys. Certificates were invented as a solution to this public key distribution problem. Now a Certification Authority (CA) can act as a trusted third party. CAs are entities (for example, businesses) that are trusted to sign (issue) certificates for other entities. It is assumed that CAs will only create valid and reliable certificates, as they are bound by legal agreements. There are many public Certification Authorities, such as VeriSign, Thawte, Entrust, and so on. You can also run your own Certification Authority using products such as the Netscape/Microsoft Certificate Servers or the Entrust CA product for your organization. + +Using keytool, it is possible to display, import, and export certificates. It is also possible to generate self-signed certificates. + +keytool currently handles X.509 certificates. + +X.509 Certificates +The X.509 standard defines what information can go into a certificate, and describes how to write it down (the data format). All X.509 certificates have the following data, in addition to the signature: +Version +This identifies which version of the X.509 standard applies to this certificate, which affects what information can be specified in it. Thus far, three versions are defined. keytool can import and export v1, v2, and v3 certificates. It generates v1 certificates. +Serial Number +The entity that created the certificate is responsible for assigning it a serial number to distinguish it from other certificates it issues. This information is used in numerous ways, for example when a certificate is revoked its serial number is placed in a Certificate Revocation List (CRL). +Signature Algorithm Identifier +This identifies the algorithm used by the CA to sign the certificate. +Issuer Name +The X.500 Distinguished Name of the entity that signed the certificate. This is normally a CA. Using this certificate implies trusting the entity that signed this certificate. (Note that in some cases, such as root or top-level CA certificates, the issuer signs its own certificate.) +Validity Period +Each certificate is valid only for a limited amount of time. This period is described by a start date and time and an end date and time, and can be as short as a few seconds or almost as long as a century. The validity period chosen depends on a number of factors, such as the strength of the private key used to sign the certificate or the amount one is willing to pay for a certificate. This is the expected period that entities can rely on the public value, if the associated private key has not been compromised. +Subject Name +The name of the entity whose public key the certificate identifies. This name uses the X.500 standard, so it is intended to be unique across the Internet. This is the X.500 Distinguished Name (DN) of the entity, for example, + CN=Java Duke, OU=Java Software Division, O=Sun Microsystems Inc, C=US + +(These refer to the subject's Common Name, Organizational Unit, Organization, and Country.) +Subject Public Key Information +This is the public key of the entity being named, together with an algorithm identifier which specifies which public key crypto system this key belongs to and any associated key parameters. +X.509 Version 1 has been available since 1988, is widely deployed, and is the most generic. + +X.509 Version 2 introduced the concept of subject and issuer unique identifiers to handle the possibility of reuse of subject and/or issuer names over time. Most certificate profile documents strongly recommend that names not be reused, and that certificates should not make use of unique identifiers. Version 2 certificates are not widely used. + +X.509 Version 3 is the most recent (1996) and supports the notion of extensions, whereby anyone can define an extension and include it in the certificate. Some common extensions in use today are: KeyUsage (limits the use of the keys to particular purposes such as "signing-only") and AlternativeNames (allows other identities to also be associated with this public key, e.g. DNS names, Email addresses, IP addresses). Extensions can be marked critical to indicate that the extension should be checked and enforced/used. For example, if a certificate has the KeyUsage extension marked critical and set to "keyCertSign" then if this certificate is presented during SSL communication, it should be rejected, as the certificate extension indicates that the associated private key should only be used for signing certificates and not for SSL use. + +All the data in a certificate is encoded using two related standards called ASN.1/DER. Abstract Syntax Notation 1 describes data. The Definite Encoding Rules describe a single way to store and transfer that data. + +X.500 Distinguished Names +X.500 Distinguished Names are used to identify entities, such as those which are named by the subject and issuer (signer) fields of X.509 certificates. keytool supports the following subparts: +commonName - common name of a person, e.g., "Susan Jones" + +organizationUnit - small organization (e.g, department or division) name, e.g., "Purchasing" + +organizationName - large organization name, e.g., "ABCSystems, Inc." + +localityName - locality (city) name, e.g., "Palo Alto" + +stateName - state or province name, e.g., "California" + +country - two-letter country code, e.g., "CH" + +When supplying a distinguished name string as the value of a -dname option, as for the -genkey or -selfcert commands, the string must be in the following format: + +CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode + +where all the italicized items represent actual values and the above keywords are abbreviations for the following: + + CN=commonName + OU=organizationUnit + O=organizationName + L=localityName + S=stateName + C=country + +A sample distinguished name string is + +CN=Mark Smith, OU=JavaSoft, O=Sun, L=Cupertino, S=California, C=US + +and a sample command using such a string is +keytool -genkey -dname "CN=Mark Smith, OU=JavaSoft, O=Sun, L=Cupertino, +S=California, C=US" -alias mark + +Case does not matter for the keyword abbreviations. For example, "CN", "cn", and "Cn" are all treated the same. + +Order matters; each subcomponent must appear in the designated order. However, it is not necessary to have all the subcomponents. You may use a subset, for example: + +CN=Steve Meier, OU=SunSoft, O=Sun, C=US + +If a distinguished name string value contains a comma, the comma must be escaped by a "\" character when you specify the string on a command line, as in + + cn=peter schuster, o=Sun Microsystems\, Inc., o=sun, c=us + +It is never necessary to specify a distinguished name string on a command line. If it is needed for a command, but not supplied on the command line, the user is prompted for each of the subcomponents. In this case, a comma does not need to be escaped by a "\". + +The Internet RFC 1421 Certificate Encoding Standard +Certificates are often stored using the printable encoding format defined by the Internet RFC 1421 standard, instead of their binary encoding. This certificate format, also known as "Base 64 encoding", facilitates exporting certificates to other applications by email or through some other mechanism. + +Certificates read by the -import and -printcert commands can be in either this format or binary encoded. + +The -export command by default outputs a certificate in binary encoding, but will instead output a certificate in the printable encoding format, if the -rfc option is specified. + +The -list command by default prints the MD5 fingerprint of a certificate. If the -v option is specified, the certificate is printed in human-readable format, while if the -rfc option is specified, the certificate is output in the printable encoding format. + +In its printable encoding format, the encoded certificate is bounded at the beginning by + +-----BEGIN CERTIFICATE----- + +and at the end by + +-----END CERTIFICATE----- + +Certificate Chains +keytool can create and manage keystore "key" entries that each contain a private key and an associated certificate "chain". The first certificate in the chain contains the public key corresponding to the private key. + +When keys are first generated (see the -genkey command), the chain starts off containing a single element, a self-signed certificate. A self-signed certificate is one for which the issuer (signer) is the same as the subject (the entity whose public key is being authenticated by the certificate). Whenever the -genkey command is called to generate a new public/private key pair, it also wraps the public key into a self-signed certificate. + +Later, after a Certificate Signing Request (CSR) has been generated (see the -certreq command) and sent to a Certification Authority (CA), the response from the CA is imported (see -import), and the self-signed certificate is replaced by a chain of certificates. At the bottom of the chain is the certificate (reply) issued by the CA authenticating the subject's public key. The next certificate in the chain is one that authenticates the CA's public key. + +In many cases, this is a self-signed certificate (that is, a certificate from the CA authenticating its own public key) and the last certificate in the chain. In other cases, the CA may return a chain of certificates. In this case, the bottom certificate in the chain is the same (a certificate signed by the CA, authenticating the public key of the key entry), but the second certificate in the chain is a certificate signed by a different CA, authenticating the public key of the CA you sent the CSR to. Then, the next certificate in the chain will be a certificate authenticating the second CA's key, and so on, until a self-signed "root" certificate is reached. Each certificate in the chain (after the first) thus authenticates the public key of the signer of the previous certificate in the chain. + +Many CAs only return the issued certificate, with no supporting chain, especially when there is a flat hierarchy (no intermediates CAs). In this case, the certificate chain must be established from trusted certificate information already stored in the keystore. + +A different reply format (defined by the PKCS#7 standard) also includes the supporting certificate chain, in addition to the issued certificate. Both reply formats can be handled by keytool. + +The top-level (root) CA certificate is self-signed. However, the trust into the root's public key does not come from the root certificate itself (anybody could generate a self-signed certificate with the distinguished name of say, the VeriSign root CA!), but from other sources like a newspaper. The root CA public key is widely known. The only reason it is stored in a certificate is because this is the format understood by most tools, so the certificate in this case is only used as a "vehicle" to transport the root CA's public key. Before you add the root CA certificate to your keystore, you should view it (using the -printcert option) and compare the displayed fingerprint with the well-known fingerprint (obtained from a newspaper, the root CA's webpage, etc.). + +Importing Certificates +To import a certificate from a file, use the -import command, as in + + keytool -import -alias joe -file jcertfile.cer + +This sample command imports the certificate(s) in the file jcertfile.cer and stores it in the keystore entry identified by the alias joe. + +You import a certificate for two reasons: + +to add it to the list of trusted certificates, or + +to import a certificate reply received from a CA as the result of submitting a Certificate Signing Request (see the -certreq command) to that CA. +Which type of import is intended is indicated by the value of the -alias option. If the alias exists in the database, and identifies an entry with a private key, then it is assumed you want to import a certificate reply. keytool checks whether the public key in the certificate reply matches the public key stored with the alias, and exits if they are different. If the alias identifies the other type of keystore entry, the certificate will not be imported. If the alias does not exist, then it will be created and associated with the imported certificate. + +WARNING Regarding Importing Trusted Certificates +IMPORTANT: Be sure to check a certificate very carefully before importing it as a trusted certificate! +View it first (using the -printcert command, or the -import command without the -noprompt option), and make sure that the displayed certificate fingerprint(s) match the expected ones. For example, suppose someone sends or emails you a certificate, and you put it in a file named /tmp/cert. Before you consider adding the certificate to your list of trusted certificates, you can execute a -printcert command to view its fingerprints, as in + + keytool -printcert -file /tmp/cert + Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Serial Number: 59092b34 + Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997 + Certificate Fingerprints: + MD5: 11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F + SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE + +Then call or otherwise contact the person who sent the certificate, and compare the fingerprint(s) that you see with the ones that they show. Only if the fingerprints are equal is it guaranteed that the certificate has not been replaced in transit with somebody else's (for example, an attacker's) certificate. If such an attack took place, and you did not check the certificate before you imported it, you would end up trusting anything the attacker has signed (for example, a JAR file with malicious class files inside). +Note: it is not required that you execute a -printcert command prior to importing a certificate, since before adding a certificate to the list of trusted certificates in the keystore, the -import command prints out the certificate information and prompts you to verify it. You then have the option of aborting the import operation. Note, however, this is only the case if you invoke the -import command without the -noprompt option. If the -noprompt option is given, there is no interaction with the user. + +Exporting Certificates +To export a certificate to a file, use the -export command, as in + + keytool -export -alias jane -file janecertfile.cer + +This sample command exports jane's certificate to the file janecertfile.cer. That is, if jane is the alias for a key entry, the command exports the certificate at the bottom of the certificate chain in that keystore entry. This is the certificate that authenticates jane's public key. +If, instead, jane is the alias for a trusted certificate entry, then that trusted certificate is exported. + +Displaying Certificates +To print out the contents of a keystore entry, use the -list command, as in + + keytool -list -alias joe + +If you don't specify an alias, as in + keytool -list + +the contents of the entire keystore are printed. +To display the contents of a certificate stored in a file, use the -printcert command, as in + + keytool -printcert -file certfile.cer + +This displays information about the certificate stored in the file certfile.cer. + +Note: This works independently of a keystore, i.e., you do not need a keystore in order to display a certificate that's stored in a file. + +Generating a self-signed certificate +A self-signed certificate is one for which the issuer (signer) is the same as the subject (the entity whose public key is being authenticated by the certificate). Whenever the -genkey command is called to generate a new public/private key pair, it also wraps the public key into a self-signed certificate. + +You may occasionally wish to generate a new self-signed certificate. For example, you may want to use the same key pair under a different identity (distinguished name). For example, suppose you change departments. You can then: + +copy (clone) the original key entry. See -keyclone. + +generate a new self-signed certificate for the cloned entry, using your new distinguished name. See below. + +generate a Certificate Signing Requests for the cloned entry, and import the reply certificate or certificate chain. See the -certreq and -import commands. + +delete the original (now obsolete) entry. See -delete. + +To generate a self-signed certificate, use the -selfcert command, as in + keytool -selfcert -alias dukeNew -keypass b92kqmp + -dname "cn=Duke Smith, ou=Purchasing, o=BlueSoft, c=US" + +The generated certificate is stored as a single-element certificate chain in the keystore entry identified by the specified alias (in this case "dukeNew"), where it replaces the existing certificate chain. +COMMAND AND OPTION NOTES +The various commands and their options are listed and described below . Note: + +All command and option names are preceded by a minus sign (-). + +The options for each command may be provided in any order. + +All items not italicized or in braces or square brackets are required to appear as is. + +Braces surrounding an option generally signify that a default value will be used if the option is not specified on the command line. Braces are also used around the -v, -rfc, and -J options, which only have meaning if they appear on the command line (that is, they don't have any "default" values other than not existing). + +Brackets surrounding an option signify that the user is prompted for the value(s) if the option is not specified on the command line. (For a -keypass option, if you do not specify the option on the command line, keytool will first attempt to use the keystore password to recover the private key, and if this fails, will then prompt you for the private key password.) + +Items in italics (option values) represent the actual values that must be supplied. For example, here is the format of the -printcert command: + keytool -printcert {-file cert_file} {-v} + +When specifying a -printcert command, replace cert_file with the actual file name, as in: + + keytool -printcert -file VScert.cer + + +Option values must be quoted if they contain a blank (space). + +The -help command is the default. Thus, the command line + keytool + +is equivalent to + keytool -help + +Option Defaults +Below are the defaults for various option values. +-alias "mykey" + +-keyalg "DSA" + +-keysize 1024 + +-validity 90 + +-keystore the file named .keystore in the user's home directory + +-file stdin if reading, stdout if writing + + +The signature algorithm (-sigalg option) is derived from the algorithm of the underlying private key: If the underlying private key is of type "DSA", the -sigalg option defaults to "SHA1withDSA", and if the underlying private key is of type "RSA", -sigalg defaults to "MD5withRSA". +Options that Appear for Most Commands +The -v option can appear for all commands except -help. If it appears, it signifies "verbose" mode; detailed certificate information will be output. +There is also a -Jjavaoption option that may appear for any command. If it appears, the specified javaoption string is passed through directly to the Java interpreter. (keytool is actually a "wrapper" around the interpreter.) This option should not contain any spaces. It is useful for adjusting the execution environment or memory usage. For a list of possible interpreter options, type java -h or java -X at the command line. + +These options may appear for all commands operating on a keystore: + +-storetype storetype +This qualifier specifies the type of keystore to be instantiated. The default keystore type is the one that is specified as the value of the "keystore.type" property in the security properties file, which is returned by the static getDefaultType method in java.security.KeyStore. + +-keystore keystore +The keystore (database file) location. Defaults to the file .keystore in the user's home directory, as determined by the "user.home" system property, whose value is described in Keystore Location. + +-storepass storepass +The password which is used to protect the integrity of the keystore. +storepass must be at least 6 characters long. It must be provided to all commands that access the keystore contents. For such commands, if a -storepass option is not provided at the command line, the user is prompted for it. + +When retrieving information from the keystore, the password is optional; if no password is given, the integrity of the retrieved information cannot be checked and a warning is displayed. + +Be careful with passwords - see Warning Regarding Passwords. + + +-provider provider-class-name +Used to specify the name of cryptographic service provider's master class file when the service provider is not listed in the security properties file. + +Warning Regarding Passwords +Most commands operating on a keystore require the store password. Some commands require a private key password. + +Passwords can be specified on the command line (in the -storepass and -keypass options, respectively). However, a password should not be specified on a command line or in a script unless it is for testing purposes, or you are on a secure system. + +If you don't specify a required password option on a command line, you will be prompted for it. When typing in a password at the password prompt, the password is currently echoed (displayed exactly as typed), so be careful not to type it in front of anyone. + +COMMANDS +See also the Command and Option Notes. +Adding Data to the Keystore +-genkey {-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-validity valDays} {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Generates a key pair (a public key and associated private key). Wraps the public key into an X.509 v1 self-signed certificate, which is stored as a single-element certificate chain. This certificate chain and the private key are stored in a new keystore entry identified by alias. + +keyalg specifies the algorithm to be used to generate the key pair, and keysize specifies the size of each key to be generated. sigalg specifies the algorithm that should be used to sign the self-signed certificate; this algorithm must be compatible with keyalg. See Supported Algorithms and Key Sizes. + +dname specifies the X.500 Distinguished Name to be associated with alias, and is used as the issuer and subject fields in the self-signed certificate. If no distinguished name is provided at the command line, the user will be prompted for one. + +keypass is a password used to protect the private key of the generated key pair. If no password is provided, the user is prompted for it. If you press RETURN at the prompt, the key password is set to the same password as that used for the keystore. keypass must be at least 6 characters long. Be careful with passwords - see Warning Regarding Passwords. + +valDays tells the number of days for which the certificate should be considered valid. + + +-import {-alias alias} {-file cert_file} [-keypass keypass] {-noprompt} {-trustcacerts} {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Reads the certificate or certificate chain (where the latter is supplied in a PKCS#7 formatted reply) from the file cert_file, and stores it in the keystore entry identified by alias. If no file is given, the certificate or PKCS#7 reply is read from stdin. keytool can import X.509 v1, v2, and v3 certificates, and PKCS#7 formatted certificate chains consisting of certificates of that type. The data to be imported must be provided either in binary encoding format, or in printable encoding format (also known as Base64 encoding) as defined by the Internet RFC 1421 standard. In the latter case, the encoding must be bounded at the beginning by a string that starts with "-----BEGIN", and bounded at the end by a string that starts with "-----END". + +When importing a new trusted certificate, alias must not yet exist in the keystore. Before adding the certificate to the keystore, keytool tries to verify it by attempting to construct a chain of trust from that certificate to a self-signed certificate (belonging to a root CA), using trusted certificates that are already available in the keystore. + +If the -trustcacerts option has been specified, additional certificates are considered for the chain of trust, namely the certificates in a file named "cacerts", which resides in the JDK security properties directory, java.home\lib\security, where java.home is the runtime environment's directory (the jre directory in the SDK or the top-level directory of the Java 2 Runtime Environment). The "cacerts" file represents a system-wide keystore with CA certificates. System administrators can configure and manage that file using keytool, specifying "jks" as the keystore type. The "cacerts" keystore file ships with five VeriSign root CA certificates with the following X.500 distinguished names: + +1. OU=Class 1 Public Primary Certification Authority, O="VeriSign, Inc.", +C=US + +2. OU=Class 2 Public Primary Certification Authority, O="VeriSign, +Inc.", C=US + +3. OU=Class 3 Public Primary Certification Authority, +O="VeriSign, Inc.", C=US + +4. OU=Class 4 Public Primary Certification +Authority, O="VeriSign, Inc.", C=US + +5. OU=Secure Server Certification +Authority, O="RSA Data Security, Inc.", C=US + +The initial password of the "cacerts" keystore file is "changeit". System administrators should change that password and the default access permission of that file upon installing the JDK. + +If keytool fails to establish a trust path from the certificate to be imported up to a self-signed certificate (either from the keystore or the "cacerts" file), the certificate information is printed out, and the user is prompted to verify it, e.g., by comparing the displayed certificate fingerprints with the fingerprints obtained from some other (trusted) source of information, which might be the certificate owner himself/herself. Be very careful to ensure the certificate is valid prior to importing it as a "trusted" certificate! -- see WARNING Regarding Importing Trusted Certificates. The user then has the option of aborting the import operation. If the -noprompt option is given, however, there will be no interaction with the user. + +When importing a certificate reply, the certificate reply is validated using trusted certificates from the keystore, and optionally using the certificates configured in the "cacerts" keystore file (if the -trustcacerts option was specified). + +If the reply is a single X.509 certificate, keytool attempts to establish a trust chain, starting at the certificate reply and ending at a self-signed certificate (belonging to a root CA). The certificate reply and the hierarchy of certificates used to authenticate the certificate reply form the new certificate chain of alias. + +If the reply is a PKCS#7 formatted certificate chain, the chain is first ordered (with the user certificate first and the self-signed root CA certificate last), before keytool attempts to match the root CA certificate provided in the reply with any of the trusted certificates in the keystore or the "cacerts" keystore file (if the -trustcacerts option was specified). If no match can be found, the information of the root CA certificate is printed out, and the user is prompted to verify it, e.g., by comparing the displayed certificate fingerprints with the fingerprints obtained from some other (trusted) source of information, which might be the root CA itself. The user then has the option of aborting the import operation. If the -noprompt option is given, however, there will be no interaction with the user. + +The new certificate chain of alias replaces the old certificate chain associated with this entry. The old chain can only be replaced if a valid keypass, the password used to protect the private key of the entry, is supplied. If no password is provided, and the private key password is different from the keystore password, the user is prompted for it. Be careful with passwords - see Warning Regarding Passwords. + + +-selfcert {-alias alias} {-sigalg sigalg} {-dname dname} {-validity valDays} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Generates an X.509 v1 self-signed certificate, using keystore information including the private key and public key associated with alias. If dname is supplied at the command line, it is used as the X.500 Distinguished Name for both the issuer and subject of the certificate. Otherwise, the X.500 Distinguished Name associated with alias (at the bottom of its existing certificate chain) is used. + +The generated certificate is stored as a single-element certificate chain in the keystore entry identified by alias, where it replaces the existing certificate chain. + +sigalg specifies the algorithm that should be used to sign the certificate. See Supported Algorithms and Key Sizes. + +In order to access the private key, the appropriate password must be provided, since private keys are protected in the keystore with a password. If keypass is not provided at the command line, and is different from the password used to protect the integrity of the keystore, the user is prompted for it. Be careful with passwords - see Warning Regarding Passwords. + +valDays tells the number of days for which the certificate should be considered valid. + + +-identitydb {-file idb_file} {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Reads the JDK 1.1.x-style identity database from the file idb_file, and adds its entries to the keystore. If no file is given, the identity database is read from stdin. If a keystore does not exist, it is created. + +Only identity database entries ("identities") that were marked as trusted will be imported in the keystore. All other identities will be ignored. For each trusted identity, a keystore entry will be created. The identity's name is used as the "alias" for the keystore entry. + +The private keys from trusted identities will all be encrypted under the same password, storepass. This is the same password that is used to protect the keystore's integrity. Users can later assign individual passwords to those private keys by using the "-keypasswd" keytool command option. + +An identity in an identity database may hold more than one certificate, each certifying the same public key. But a keystore key entry for a private key has that private key and a single "certificate chain" (initially just a single certificate), where the first certificate in the chain contains the public key corresponding to the private key. When importing the information from an identity, only the first certificate of the identity is stored in the keystore. This is because an identity's name in an identity database is used as the alias for its corresponding keystore entry, and alias names are unique within a keystore, + + +Exporting Data +-certreq {-alias alias} {-sigalg sigalg} {-file certreq_file} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Generates a Certificate Signing Request (CSR), using the PKCS#10 format. + +A CSR is intended to be sent to a certificate authority (CA). The CA will authenticate the certificate requestor (usually off-line) and will return a certificate or certificate chain, used to replace the existing certificate chain (which initially consists of a self-signed certificate) in the keystore. + +The private key and X.500 Distinguished Name associated with alias are used to create the PKCS#10 certificate request. In order to access the private key, the appropriate password must be provided, since private keys are protected in the keystore with a password. If keypass is not provided at the command line, and is different from the password used to protect the integrity of the keystore, the user is prompted for it. + +Be careful with passwords - see Warning Regarding Passwords. + +sigalg specifies the algorithm that should be used to sign the CSR. See Supported Algorithms and Key Sizes. + +The CSR is stored in the file certreq_file. If no file is given, the CSR is output to stdout. + +Use the import command to import the response from the CA. + + +-export {-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-rfc} {-v} {-Jjavaoption} +Reads (from the keystore) the certificate associated with alias, and stores it in the file cert_file. + +If no file is given, the certificate is output to stdout. + +The certificate is by default output in binary encoding, but will instead be output in the printable encoding format, as defined by the Internet RFC 1421 standard, if the -rfc option is specified. + +If alias refers to a trusted certificate, that certificate is output. Otherwise, alias refers to a key entry with an associated certificate chain. In that case, the first certificate in the chain is returned. This certificate authenticates the public key of the entity addressed by alias. + + +Displaying Data +-list {-alias alias} {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v | -rfc} {-Jjavaoption} +Prints (to stdout) the contents of the keystore entry identified by alias. If no alias is specified, the contents of the entire keystore are printed. + +This command by default prints the MD5 fingerprint of a certificate. If the -v option is specified, the certificate is printed in human-readable format, with additional information such as the owner, issuer, and serial number. If the -rfc option is specified, certificate contents are printed using the printable encoding format, as defined by the Internet RFC 1421 standard + +You cannot specify both -v and -rfc. + + +-printcert {-file cert_file} {-v} {-Jjavaoption} +Reads the certificate from the file cert_file, and prints its contents in a human-readable format. If no file is given, the certificate is read from stdin. + +The certificate may be either binary encoded or in printable encoding format, as defined by the Internet RFC 1421 standard. + +Note: This option can be used independently of a keystore. + + +Managing the Keystore +-keyclone {-alias alias} [-dest dest_alias] [-keypass keypass] [-new new_keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Creates a new keystore entry, which has the same private key and certificate chain as the original entry. + +The original entry is identified by alias (which defaults to "mykey" if not provided). The new (destination) entry is identified by dest_alias. If no destination alias is supplied at the command line, the user is prompted for it. + +If the private key password is different from the keystore password, then the entry will only be cloned if a valid keypass is supplied. This is the password used to protect the private key associated with alias. If no key password is supplied at the command line, and the private key password is different from the keystore password, the user is prompted for it. The private key in the cloned entry may be protected with a different password, if desired. If no -new option is supplied at the command line, the user is prompted for the new entry's password (and may choose to let it be the same as for the cloned entry's private key). + +Be careful with passwords - see Warning Regarding Passwords. + +This command can be used to establish multiple certificate chains corresponding to a given key pair, or for backup purposes. + + +-storepasswd [-new new_storepass] {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Changes the password used to protect the integrity of the keystore contents. The new password is new_storepass, which must be at least 6 characters long. + +Be careful with passwords - see Warning Regarding Passwords. + + +-keypasswd {-alias alias} [-keypass old_keypass] [-new new_keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Changes the password under which the private key identified by alias is protected, from old_keypass to new_keypass. + +If the -keypass option is not provided at the command line, and the private key password is different from the keystore password, the user is prompted for it. + +If the -new option is not provided at the command line, the user is prompted for it. + + +Be careful with passwords - see Warning Regarding Passwords. + + +-delete [-alias alias] {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption} +Deletes from the keystore the entry identified by alias. The user is prompted for the alias, if no alias is provided at the command line. + + +Getting Help +-help +Lists all the commands and their options. + + +EXAMPLES +Suppose you want to create a keystore for managing your public/private key pair and certificates from entities you trust. + +Generating Your Key Pair +The first thing you need to do is create a keystore and generate the key pair. You could use a command such as the following: + + keytool -genkey -dname "cn=Mark Jones, ou=JavaSoft, o=Sun, c=US" + -alias business -keypass kpi135 -keystore C:\working\mykeystore + -storepass ab987c -validity 180 + +(Please note: This must be typed as a single line. Multiple lines are used in the examples just for legibility purposes.) + +This command creates the keystore named "mykeystore" in the "working" directory on the C drive (assuming it doesn't already exist), and assigns it the password "ab987c". It generates a public/private key pair for the entity whose "distinguished name" has a common name of "Mark Jones", organizational unit of "JavaSoft", organization of "Sun" and two-letter country code of "US". It uses the default "DSA" key generation algorithm to create the keys, both 1024 bits long. + +It creates a self-signed certificate (using the default "SHA1withDSA" signature algorithm) that includes the public key and the distinguished name information. This certificate will be valid for 180 days, and is associated with the private key in a keystore entry referred to by the alias "business". The private key is assigned the password "kpi135". + +The command could be significantly shorter if option defaults were accepted. As a matter of fact, no options are required; defaults are used for unspecified options that have default values, and you are prompted for any required values. Thus, you could simply have the following: + + keytool -genkey + +In this case, a keystore entry with alias "mykey" is created, with a newly-generated key pair and a certificate that is valid for 90 days. This entry is placed in the keystore named ".keystore" in your home directory. (The keystore is created if it doesn't already exist.) You will be prompted for the distinguished name information, the keystore password, and the private key password. +The rest of the examples assume you executed the -genkey command without options specified, and that you responded to the prompts with values equal to those given in the first -genkey command, above (a private key password of "kpi135", etc.) + +Requesting a Signed Certificate from a Certification Authority +So far all we've got is a self-signed certificate. A certificate is more likely to be trusted by others if it is signed by a Certification Authority (CA). To get such a signature, you first generate a Certificate Signing Request (CSR), via the following: + + keytool -certreq -file MarkJ.csr + +This creates a CSR (for the entity identified by the default alias "mykey") and puts the request in the file named "MarkJ.csr". Submit this file to a CA, such as VeriSign, Inc. The CA will authenticate you, the requestor (usually off-line), and then will return a certificate, signed by them, authenticating your public key. (In some cases, they will actually return a chain of certificates, each one authenticating the public key of the signer of the previous certificate in the chain.) +Importing a Certificate for the CA +You need to replace your self-signed certificate with a certificate chain, where each certificate in the chain authenticates the public key of the signer of the previous certificate in the chain, up to a "root" CA. + +Before you import the certificate reply from a CA, you need one or more "trusted certificates" in your keystore or in the cacerts keystore file (which is described in import command): + +If the certificate reply is a certificate chain, you just need the top certificate of the chain (that is, the "root" CA certificate authenticating that CA's public key). + +If the certificate reply is a single certificate, you need a certificate for the issuing CA (the one that signed it), and if that certificate is not self-signed, you need a certificate for its signer, and so on, up to a self-signed "root" CA certificate. +The "cacerts" keystore file ships with five VeriSign root CA certificates, so you probably won't need to import a VeriSign certificate as a trusted certificate in your keystore. But if you request a signed certificate from a different CA, and a certificate authenticating that CA's public key hasn't been added to "cacerts", you will need to import a certificate from the CA as a "trusted certificate". + +A certificate from a CA is usually either self-signed, or signed by another CA (in which case you also need a certificate authenticating that CA's public key). Suppose company ABC, Inc., is a CA, and you obtain a file named "ABCCA.cer" that is purportedly a self-signed certificate from ABC, authenticating that CA's public key. + +Be very careful to ensure the certificate is valid prior to importing it as a "trusted" certificate! View it first (using the keytool -printcert command, or the keytool -import command without the -noprompt option), and make sure that the displayed certificate fingerprint(s) match the expected ones. You can call the person who sent the certificate, and compare the fingerprint(s) that you see with the ones that they show (or that a secure public key repository shows). Only if the fingerprints are equal is it guaranteed that the certificate has not been replaced in transit with somebody else's (for example, an attacker's) certificate. If such an attack took place, and you did not check the certificate before you imported it, you would end up trusting anything the attacker has signed. + +If you trust that the certificate is valid, then you can add it to your keystore via the following: + + keytool -import -alias abc -file ABCCA.cer + +This creates a "trusted certificate" entry in the keystore, with the data from the file "ABCCA.cer", and assigns the alias "abc" to the entry. +Importing the Certificate Reply from the CA +Once you've imported a certificate authenticating the public key of the CA you submitted your certificate signing request to (or there's already such a certificate in the "cacerts" file), you can import the certificate reply and thereby replace your self-signed certificate with a certificate chain. This chain is the one returned by the CA in response to your request (if the CA reply is a chain), or one constructed (if the CA reply is a single certificate) using the certificate reply and trusted certificates that are already available in the keystore where you import the reply or in the "cacerts" keystore file. + +For example, suppose you sent your certificate signing request to VeriSign. You can then import the reply via the following, which assumes the returned certificate is named "VSMarkJ.cer": + + keytool -import -trustcacerts -file VSMarkJ.cer + +Exporting a Certificate Authenticating Your Public Key +Suppose you have used the jarsigner tool to sign a Java ARchive (JAR) file. Clients that want to use the file will want to authenticate your signature. +One way they can do this is by first importing your public key certificate into their keystore as a "trusted" entry. You can export the certificate and supply it to your clients. As an example, you can copy your certificate to a file named MJ.cer via the following, assuming the entry is aliased by "mykey": + + keytool -export -alias mykey -file MJ.cer + +Given that certificate, and the signed JAR file, a client can use the jarsigner tool to authenticate your signature. +Changing Your Distinguished Name but Keeping your Key Pair +Suppose your distinguished name changes, for example because you have changed departments or moved to a different city. If desired, you may still use the public/private key pair you've previously used, and yet update your distinguished name. For example, suppose your name is Susan Miller, and you created your initial key entry with the alias sMiller and the distinguished name + "cn=Susan Miller, ou=Finance Department, o=BlueSoft, c=us" + +Suppose you change from the Finance Department to the Accounting Department. You can still use the previously-generated public/private key pair and yet update your distinguished name by doing the following. First, copy (clone) your key entry: + keytool -keyclone -alias sMiller -dest sMillerNew + +(This prompts for the store password and for the initial and destination private key passwords, since they aren't provided at the command line.) Now you need to change the certificate chain associated with the copy, so that the first certificate in the chain uses your different distinguished name. Start by generating a self-signed certificate with the appropriate name: + keytool -selfcert -alias sMillerNew + -dname "cn=Susan Miller, ou=Accounting Department, o=BlueSoft, c=us" + +Then generate a Certificate Signing Request based on the information in this new certificate: + + keytool -certreq -alias sMillerNew + +When you get the CA certificate reply, import it: + keytool -import -alias sMillerNew -file VSSMillerNew.cer + +After importing the certificate reply, you may want to remove the initial key entry that used your old distinguished name: + keytool -delete -alias sMiller + +SEE ALSO +jar tool documentation + +jarsigner tool documentation + +the Security trail of the Java Tutorial for examples of the use of keytool diff --git a/docs/combined.doc b/docs/combined.doc new file mode 100644 index 0000000..d5bc7fb Binary files /dev/null and b/docs/combined.doc differ diff --git a/docs/dcom.txt b/docs/dcom.txt new file mode 100644 index 0000000..15bacd1 --- /dev/null +++ b/docs/dcom.txt @@ -0,0 +1,69 @@ +At 11:00 AM 6/17/98 -0400, Don Kendrick wrote: +>Greetings, +> +>I'm being rushed into a project that will involve putting a component on my +>NT web server that will talk to various MS boxes internally. They are +>proposing to use DCOM. A quick look at DCOM shows me that they are basically +>doing RPC stuff and of course I'm not a real fan of RPC. + +This probably deserves to have a book written on it (by someone other than +myself). + +Last time I checked about DCOM, there were several issues that would make +me a little hesitant to use DCOM over public networks, for several reasons: + +1. As you pointed out, DCOM uses MSRPC. RPC is pretty complicated; it's +also pretty new. This suggests that it's not well understood in general. +MSRPC can use a host of transports: names pipes, TCP, and Netbios over TCP. +Given that all the default services that ship in NT use named pipes, and +that named pipes use SMB, you have to open port 139 to allow your DCOM +stuff in from your web server. Having 139 open allows access in to a +number of services (like file and print, for example). + +If you really want to do this, it's a good idea to specify TCP as the +transport and only punch holes in the firewall for specific services that +are needed. Also, it's better (from a security point of view) if the +developer specified static endpoints on the server - this way the client +doesn't need to connect to port 135. However, if the developer wasn't +security-aware, you may be stuck with dynamic endpoints. In this case, +your server's exposure will be much worse, and your firewall administrator +will find herself living in interesting times. + +2. MSRPC currently only supports NTLM authentication, which is neither +amazingly strong or amazingly flexible. Make sure that both client and +server are running NT 4.0 Service pack 3: that way if you have to use named +pipes you can use the SMB message signing feature for integrity checking. +Again, if you want to use TCP for transport, the developer has to have +added support for fully encrypted RPC, or your sessions will be vulnerable +to insertion or hijacking attacks. + +Overall, NT 5.0 is likely to be a win. Kerberos supports mutual +authentication and proxying of user credentials. You may be better off +stalling installation until 5.0 is out. + +3. Don't have any hard evidence of this, but there's reason to suspect that +interesting RPC packets might cause Blue Screen Of Death. Opening up too +much through the firewall can potentially provide an avenue for DoS attacks. + +Note that these are my opinion's not my employer's, and I might be nuts anyway. + +- Ted + + + + +Microsoft's MSRPC uses TCP port 135 and requires high ports 1024-65535 to be open. An example of the conduit command statements are: + + conduit permit tcp host 204.31.17.1 eq 135 any + conduit permit tcp host 204.31.17.1 range 1024 65535 any + + + +/sbin/ipfwadm -I -a accept -c -W ppp0 -P tcp -S 0.0.0.0/0 135 -D 192.168.1.2 +/sbin/ipfwadm -I -a accept -c -W ppp0 -P tcp -S 0.0.0.0/0 1024:65535 -D 192.168.1.2 + + + + + + diff --git a/docs/javaargs.txt b/docs/javaargs.txt new file mode 100644 index 0000000..ec759b5 --- /dev/null +++ b/docs/javaargs.txt @@ -0,0 +1 @@ +-Xdebug -Xrunjdwp:transport=dt_socket,address=45678,server=y,suspend=n \ No newline at end of file diff --git a/docs/perm.txt b/docs/perm.txt new file mode 100644 index 0000000..e939d73 --- /dev/null +++ b/docs/perm.txt @@ -0,0 +1,990 @@ +Permissions in the JavaTM 2 SDK +Last Modified: 30 October, 1998 + + +A permission represents access to a system resource. In order for a resource access to +be allowed for an applet (or an application running with a security manager), +the corresponding permission must be explicitly granted to the code attempting the access. + +A permission typically has a name (often referred to as a "target name") and, in some +cases, a comma-separated list of one or more actions. For example, the following code +creates a FilePermission object representing read access to the file named abc in +the /tmp directory: + + perm = new java.io.FilePermission("/tmp/abc", "read"); + +In this, the target name is "/tmp/abc" and the action string is "read". +Important: The above statement creates a permission object. A permission object represents, +but does not grant access to, a system resource. Permission objects are constructed and +assigned ("granted") to code based on the policy in effect. When a permission object +is assigned to some code, that code is granted the permission to access the system resource +specified in the permission object, in the specified manner. A permission object may +also be constructed by the current security manager when making access decisions. +In this case, the (target) permission object is created based on the requested access, +and checked against the permission objects granted to and held by the code making the +request. + +The policy for a Java application environment is represented by a Policy object. In the +default Policy implementation, the policy can be specified within one or more policy +configuration files. The policy file(s) specify what permissions are allowed for +code from specified code sources. A sample policy file entry granting code from +the /home/sysadmin directory read access to the file /tmp/abc is + + grant codeBase "file:/home/sysadmin/" { + permission java.io.FilePermission "/tmp/abc", "read"; + }; + +For information about policy file locations and granting permissions in policy files, +see Default Policy Implementation and Policy File Syntax. For information about using +the Policy Tool to specify the permissions, see the Policy Tool documentation +(for Solaris) (for Windows). Using the Policy Tool saves typing and eliminates the +need for you to know the required syntax of policy files. + +Technically, whenever a resource access is attempted, all code traversed by the execution +thread up to that point must have permission for that resource access, unless some +code on the thread has been marked as "privileged." See API for Privileged Blocks for +more information about "privileged" code. + +This document contains tables that describe the built-in JDK 1.2 permission types and +discuss the risks of granting each permission. It also contains tables showing the methods +that require permissions to be in effect in order to be successful, and for each lists the +required permission. + +The tables are the following: + +Permission Descriptions and Risks +AllPermission +AWTPermission +FilePermission +NetPermission +PropertyPermission +ReflectPermission +RuntimePermission +SecurityPermission +SerializablePermission +SocketPermission + + +Methods and the Permissions They Require + + +java.lang.SecurityManager Method Permission Checks + + +For more information about permissions, including the superclasses java.security.Permission and java.security.BasicPermission, and examples of creating permission objects and granting permissions, see the Security Architecture Specification. + + + +-------------------------------------------------------------------------------- + +Permission Descriptions and Risks +The following tables describe the built-in JDK 1.2 permission types and discuss the risks +of granting each permission. + +AllPermission +The java.security.AllPermission is a permission that implies all other permissions. +Note: Granting AllPermission should be done with extreme care, as it implies all other +permissions. Thus, it grants code the ability to run with security disabled. Extreme +caution should be taken before granting such a permission to code. This permission should be +used only during testing, or in extremely rare cases where an application or applet is +completely trusted and adding the necessary permissions to the policy is prohibitively cumbersome. + +AWTPermission +A java.awt.AWTPermission is for AWT permissions. +The following table lists all the possible AWTPermission target names, and for each +provides a description of what the permission allows and a discussion of the risks of +granting code the permission. + +java.awt.AWTPermission +Target Name What the Permission Allows Risks of Allowing this Permission +accessClipboard Posting and retrieval of information to and from the AWT clipboard This +would allow malfeasant code to share potentially sensitive or confidential information. +accessEventQueue Access to the AWT event queue After retrieving the AWT event queue, +malicious code may peek at and even remove existing events from the system, as well as +post bogus events which may purposefully cause the application or applet to misbehave in +an insecure manner. +listenToAllAWTEvents Listen to all AWT events, system-wide After adding an AWT event listener, malicious code may scan all AWT events dispatched in the system, allowing it to read all user input (such as passwords). Each AWT event listener is called from within the context of that event queue's EventDispatchThread, so if the accessEventQueue permission is also enabled, malicious code could modify the contents of AWT event queues system-wide, causing the application or applet to misbehave in an insecure manner. +readDisplayPixels Readback of pixels from the display screen Interfaces such as the java.awt.Composite interface which allow arbitrary code to examine pixels on the display enable malicious code to snoop on the activities of the user. +showWindowWithoutWarningBanner Display of a window without also displaying a banner warning that the window was created by an applet Without this warning, an applet may pop up windows without the user knowing that they belong to an applet. Since users may make security-sensitive decisions based on whether or not the window belongs to an applet (entering a username and password into a dialog box, for example), disabling this warning banner may allow applets to trick the user into entering such information. + + +FilePermission +A java.io.FilePermission represents access to a file or directory. A FilePermission consists of a pathname and a set of actions valid for that pathname. +Pathname is the pathname of the file or directory granted the specified actions. A pathname that ends in "/*" (where "/" is the file separator character, File.separatorChar) indicates a directory and all the files contained in that directory. A pathname that ends with "/-" indicates a directory and (recursively) all files and subdirectories contained in that directory. A pathname consisting of the special token "<>" matches any file. + +A pathname consisting of a single "*" indicates all the files in the current directory, while a pathname consisting of a single "-" indicates all the files in the current directory and (recursively) all files and subdirectories contained in the current directory. + +The actions to be granted are passed to the constructor in a string containing a list of zero or more comma-separated keywords. The possible keywords are "read", "write", "execute", and "delete". Their meaning is defined as follows: + + +read +Permission to read. +write +Permission to write (which includes permission to create). +execute +Permission to execute. Allows Runtime.exec to be called. Corresponds to SecurityManager.checkExec. +delete +Permission to delete. Allows File.delete to be called. Corresponds to SecurityManager.checkDelete. +The actions string is converted to lowercase before processing. + +Be careful when granting FilePermissions. Think about the implications of granting read and especially write access to various files and directories. The "<>" permission with write action is especially dangerous. This grants permission to write to the entire file system. One thing this effectively allows is replacement of the system binary, including the JVM runtime environment. + +Please note: code can always read a file from the same directory it's in (or a subdirectory of that directory); it does not need explicit permission to do so. + +NetPermission +A java.net.NetPermission is for various network permissions. A NetPermission contains a name but no actions list; you either have the named permission or you don't. +The following table lists all the possible NetPermission target names, and for each provides a description of what the permission allows and a discussion of the risks of granting code the permission. + +java.net.NetPermission +Target Name What the Permission Allows Risks of Allowing this Permission +setDefaultAuthenticator The ability to set the way authentication information is retrieved when a proxy or HTTP server asks for authentication Malicious code can set an authenticator that monitors and steals user authentication input as it retrieves the input from the user. +requestPasswordAuthentication The ability to ask the authenticator registered with the system for a password Malicious code may steal this password. +specifyStreamHandler The ability to specify a stream handler when constructing a URL Malicious code may create a URL with resources that it would normally not have access to (like file:/foo/fum/), specifying a stream handler that gets the actual bytes from someplace it does have access to. Thus it might be able to trick the system into creating a ProtectionDomain/CodeSource for a class even though that class really didn't come from that location. + + +PropertyPermission +A java.util.PropertyPermission is for property permissions. +The name is the name of the property ("java.home", "os.name", etc). The naming convention follows the hierarchical property naming convention. Also, an asterisk may appear at the end of the name, following a ".", or by itself, to signify a wildcard match. For example: "java.*" or "*" is valid, "*java" or "a*b" is not valid. + + +The actions to be granted are passed to the constructor in a string containing a list of zero or more comma-separated keywords. The possible keywords are "read" and "write". Their meaning is defined as follows: + + +read +Permission to read. Allows System.getProperty to be called. +write +Permission to write. Allows System.setProperty to be called. +The actions string is converted to lowercase before processing. + +Care should be taken before granting code permission to access certain system properties. For example, granting permission to access the "java.home" system property gives potentially malevolent code sensitive information about the system environment (the Java installation directory). Also, granting permission to access the "user.name" and "user.home" system properties gives potentially malevolent code sensitive information about the user environment (the user's account name and home directory). + +ReflectPermission +A java.lang.reflect.ReflectPermission is for reflective operations. A ReflectPermission is a named permission and has no actions. The only name currently defined is suppressAccessChecks, which allows suppressing the standard language access checks -- for public, default (package) access, protected, and private members -- performed by reflected objects at their point of use. +The following table provides a summary description of what the permission allows, and discusses the risks of granting code the permission. + +java.lang.reflect.ReflectPermission +Target Name What the Permission Allows Risks of Allowing this Permission +suppressAccessChecks The ability to access fields and invoke methods in a class. Note that this includes not only public, but protected and private fields and methods as well. This is dangerous in that information (possibly confidential) and methods normally unavailable would be accessible to malicious code. + + +RuntimePermission +A java.lang.RuntimePermission is for runtime permissions. A RuntimePermission contains a name (also referred to as a "target name") but no actions list; you either have the named permission or you don't. +The target name is the name of the runtime permission (see below). The naming convention follows the hierarchical property naming convention. Also, an asterisk may appear at the end of the name, following a ".", or by itself, to signify a wildcard match. For example: "loadLibrary.*" or "*" is valid, "*loadLibrary" or "a*b" is not valid. + +The following table lists all the possible RuntimePermission target names, and for each provides a description of what the permission allows and a discussion of the risks of granting code the permission. + +java.lang.RuntimePermission +Target Name What the Permission Allows Risks of Allowing this Permission +createClassLoader Creation of a class loader This is an extremely dangerous permission to grant. Malicious applications that can instantiate their own class loaders could then load their own rogue classes into the system. These newly loaded classes could be placed into any protection domain by the class loader, thereby automatically granting the classes the permissions for that domain. +getClassLoader Retrieval of a class loader (e.g., the class loader for the calling class) This would grant an attacker permission to get the class loader for a particular class. This is dangerous because having access to a class's class loader allows the attacker to load other classes available to that class loader. The attacker would typically otherwise not have access to those classes. +setContextClassLoader Setting of the context class loader used by a thread The context class loader is used by system code and extensions when they need to lookup resources that might not exist in the system class loader. Granting setContextClassLoader permission would allow code to change which context class loader is used for a particular thread, including system threads. +setSecurityManager Setting of the security manager (possibly replacing an existing one) The security manager is a class that allows applications to implement a security policy. Granting the setSecurityManager permission would allow code to change which security manager is used by installing a different, possibly less restrictive security manager, thereby bypassing checks that would have been enforced by the original security manager. +createSecurityManager Creation of a new security manager This gives code access to protected, sensitive methods that may disclose information about other classes or the execution stack. +exitVM Halting of the Java Virtual Machine This allows an attacker to mount a denial-of-service attack by automatically forcing the virtual machine to halt. +setFactory Setting of the socket factory used by ServerSocket or Socket, or of the stream handler factory used by URL This allows code to set the actual implementation for the socket, server socket, stream handler, or RMI socket factory. An attacker may set a faulty implementation which mangles the data stream. +setIO Setting of System.out, System.in, and System.err This allows changing the value of the standard system streams. An attacker may change System.in to monitor and steal user input, or may set System.err to a "null" OutputSteam, which would hide any error messages sent to System.err. +modifyThread stop, suspend, resume, setPriority, and setName methods This allows an attacker to start or suspend any thread in the system. +stopThread Stopping of threads via calls to the Thread stop method This allows code to stop any thread in the system provided that it is already granted permission to access that thread. This poses as a threat, because that code may corrupt the system by killing existing threads. +modifyThreadGroup Modification of thread groups, e.g., via calls to ThreadGroup destroy, resume, setDaemon, setMaxPriority, stop, and suspend methods This allows an attacker to create thread groups and set their run priority. +getProtectionDomain Retrieval of the ProtectionDomain for a class This allows code to obtain policy information for a particular code source. While obtaining policy information does not compromise the security of the system, it does give attackers additional information, such as local file names for example, to better aim an attack. +readFileDescriptor Reading of file descriptors This would allow code to read the particular file associated with the file descriptor read. This is dangerous if the file contains confidential data. +writeFileDescriptor Writing to file descriptors This allows code to write to a particular file associated with the descriptor. This is dangerous because it may allow malicous code to plant viruses or at the very least, fill up your entire disk. +loadLibrary.{library name} Dynamic linking of the specified library It is dangerous to allow an applet permission to load native code libraries, because the Java security architecture is not designed to and does not prevent malicious behavior at the level of native code. +accessClassInPackage.{package name} Access to the specified package via a class loader's loadClass method when that class loader calls the SecurityManager checkPackageAcesss method This gives code access to classes in packages to which it normally does not have access. Malicious code may use these classes to help in its attempt to compromise security in the system. +defineClassInPackage.{package name} Definition of classes in the specified package, via a class loader's defineClass method when that class loader calls the SecurityManager checkPackageDefinition method. This grants code permission to define a class in a particular package. This is dangerous because malicious code with this permission may define rogue classes in trusted packages like java.security or java.lang, for example. +accessDeclaredMembers Access to the declared members of a class This grants code permission to query a class for its public, protected, default (package) access, and private fields and/or methods. Although the code would have access to the private and protected field and method names, it would not have access to the private/protected field data and would not be able to invoke any private methods. Nevertheless, malicious code may use this information to better aim an attack. Additionally, it may invoke any public methods and/or access public fields in the class. This could be dangerous if the code would normally not be able to invoke those methods and/or access the fields because it can't cast the object to the class/interface with those methods and fields. +queuePrintJob Initiation of a print job request This could print sensitive information to a printer, or simply waste paper. + + +SecurityPermission +A java.security.SecurityPermission is for security permissions. A SecurityPermission contains a name (also referred to as a "target name") but no actions list; you either have the named permission or you don't. +The target name is the name of a security configuration parameter (see below). Currently the SecurityPermission object is used to guard access to the Policy, Security, Provider, Signer, and Identity objects. + +The following table lists all the possible SecurityPermission target names, and for each provides a description of what the permission allows and a discussion of the risks of granting code the permission. + +java.security.SecurityPermission +Target Name What the Permission Allows Risks of Allowing this Permission +getPolicy Retrieval of the system-wide security policy (specifically, of the currently-installed Policy object) This allows someone to query the policy via the getPermissions call, which discloses which permissions would be granted to a given CodeSource. While revealing the policy does not compromise the security of the system, it does provide malicious code with additional information which it may use to better aim an attack. It is wise not to divulge more information than necessary. +setPolicy Setting of the system-wide security policy (specifically, the Policy object) Granting this permission is extremely dangerous, as malicious code may grant itself all the necessary permissions it needs to successfully mount an attack on the system. +getProperty.{key} Retrieval of the security property with the specified key Depending on the particular key for which access has been granted, the code may have access to the list of security providers, as well as the location of the system-wide and user security policies. while revealing this information does not compromise the security of the system, it does provide malicious code with additional information which it may use to better aim an attack. +setProperty.{key} Setting of the security property with the specified key This could include setting a security provider or defining the location of the the system-wide security policy. Malicious code that has permission to set a new security provider may set a rogue provider that steals confidential information such as cryptographic private keys. In addition, malicious code with permission to set the location of the system-wide security policy may point it to a security policy that grants the attacker all the necessary permissions it requires to successfully mount an attack on the system. +insertProvider.{provider name} Addition of a new provider, with the specified name This would allow somebody to introduce a possibly malicious provider (e.g., one that discloses the private keys passed to it) as the highest-priority provider. This would be possible because the Security object (which manages the installed providers) currently does not check the integrity or authenticity of a provider before attaching it. +removeProvider.{provider name} Removal of the specified provider This may change the behavior or disable execution of other parts of the program. If a provider subsequently requested by the program has been removed, execution may fail. Also, if the removed provider is not explicitly requested by the rest of the program, but it would normally be the provider chosen when a cryptography service is requested (due to its previous order in the list of providers), a different provider will be chosen instead, or no suitable provider will be found, thereby resulting in program failure. +setSystemScope Setting of the system identity scope This would allow an attacker to configure the system identity scope with certificates that should not be trusted, thereby granting applet or application code signed with those certificates privileges that would have been denied by the system's original identity scope +setIdentityPublicKey Setting of the public key for an Identity If the identity is marked as "trusted", this allows an attacker to introduce a different public key (e.g., its own) that is not trusted by the system's identity scope, thereby granting applet or application code signed with that public key privileges that would have been denied otherwise. +SetIdentityInfo Setting of a general information string for an Identity This allows attackers to set the general description for an identity. This may trick applications into using a different identity than intended or may prevent applications from finding a particular identity. +addIdentityCertificate Addition of a certificate for an Identity This allows attackers to set a certificate for an identity's public key. This is dangerous because it affects the trust relationship across the system. This public key suddenly becomes trusted to a wider audience than it otherwise would be. +removeIdentityCertificate Removal of a certificate for an Identity This allows attackers to remove a certificate for an identity's public key. This is dangerous because it affects the trust relationship across the system. This public key suddenly becomes considered less trustworthy than it otherwise would be. +printIdentity Viewing the name of a principal and optionally the scope in which it is used, and whether or not it is considered "trusted" in that scope. The scope that is printed out may be a filename, in which case it may convey local system information. For example, here's a sample printout of an identity named "carol", who is marked not trusted in the user's identity database: +carol[/home/luehe/identitydb.obj][not trusted] +clearProviderProperties.{provider name} "Clearing" of a Provider so that it no longer contains the properties used to look up services implemented by the provider This disables the lookup of services implemented by the provider. This may thus change the behavior or disable execution of other parts of the program that would normally utilize the Provider, as described under the "removeProvider.{provider name}" permission. +putProviderProperty.{provider name} Setting of properties for the specified Provider The provider properties each specify the name and location of a particular service implemented by the provider. By granting this permission, you let code replace the service specification with another one, thereby specifying a different implementation. +removeProviderProperty.{provider name} Removal of properties from the specified Provider This disables the lookup of services implemented by the provider. They are no longer accessible due to removal of the properties specifying their names and locations. This may change the behavior or disable execution of other parts of the program that would normally utilize the Provider, as described under the "removeProvider.{provider name}" permission. +getSignerPrivateKey Retrieval of a Signer's private key It is very dangerous to allow access to a private key; private keys are supposed to be kept secret. Otherwise, code can use the private key to sign various files and claim the signature came from the Signer. +setSignerKeyPair Setting of the key pair (public key and private key) for a Signer This would allow an attacker to replace somebody else's (the "target's") keypair with a possibly weaker keypair (e.g., a keypair of a smaller keysize). This also would allow the attacker to listen in on encrypted communication between the target and its peers. The target's peers might wrap an encryption session key under the target's "new" public key, which would allow the attacker (who possesses the corresponding private key) to unwrap the session key and decipher the communication data encrypted under that session key. + + +SerializablePermission +A java.io.SerializablePermission is for serializable permissions. A SerializablePermission contains a name (also referred to as a "target name") but no actions list; you either have the named permission or you don't. +The target name is the name of the Serializable permission (see below). + +The following table lists all the possible SerializablePermission target names, and for each provides a description of what the permission allows and a discussion of the risks of granting code the permission. + +java.io.SerializablePermission +Target Name What the Permission Allows Risks of Allowing this Permission +enableSubclassImplementation Implementing a subclass of ObjectOutputStream or ObjectInputStream to override the default serialization or deserialization, respectively, of objects Code can use this to serialize or deserialize classes in a purposefully malfeasant manner. For example, during serialization, malicious code can use this to purposefully store confidential private field data in a way easily accessible to attackers. Or, during deserializaiton it could, for example, deserialize a class with all its private fields zeroed out. +enableSubstitution Substitution of one object for another during serialization or deserialization This is dangerous because malicious code can replace the actual object with one which has incorrect or malignant data. + + +SocketPermission +A java.net.SocketPermission represents access to a network via sockets. A SocketPermission consists of a host specification and a set of "actions" specifying ways to connect to that host. The host is specified as + host = (hostname | IPaddress)[:portrange] + portrange = portnumber | -portnumber | portnumber-[portnumber] + +The host is expressed as a DNS name, as a numerical IP address, or as "localhost" (for the local machine). The wildcard "*" may be included once in a DNS name host specification. If it is included, it must be in the leftmost position, as in "*.sun.com". +The port or portrange is optional. A port specification of the form "N-", where N is a port number, signifies all ports numbered N and above, while a specification of the form "-N" indicates all ports numbered N and below. + +The possible ways to connect to the host are + +accept +connect +listen +resolve + +The "listen" action is only meaningful when used with "localhost". The "resolve" (resolve host/ip name service lookups) action is implied when any of the other actions are present. +As an example of the creation and meaning of SocketPermissions, note that if you have the following entry in your policy file: + + grant signedBy "mrm" { + permission java.net.SocketPermission "puffin.eng.sun.com:7777", "connect, +accept"; + }; + +this causes the following permission object to be generated and granted to code signed by "mrm." + p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept"); + +p1 represents a permission allowing connections to port 7777 on puffin.eng.sun.com, and also accepting connections on that port. +Similarly, if you have the following entry in your policy: + + grant signedBy "paul" { + permission java.net.SocketPermission "localhost:1024-", "accept, connect, +listen"; + }; + +this causes the following permission object to be generated and granted to code signed by "paul." + p2 = new SocketPermission("localhost:1024-", "accept,connect,listen"); + +p2 represents a permission allowing accepting connections on, connecting to, or listening on any port between 1024 and 65535 on the local host. +Note: Granting code permission to accept or make connections to remote hosts may be dangerous because malevolent code can then more easily transfer and share confidential data among parties who may not otherwise have access to the data. + + +-------------------------------------------------------------------------------- + +Methods and the Permissions They Require +The following table contains a list of all the JDK 1.2 methods that require permissions, and for each tells which SecurityManager method it calls and which permission is checked for by the default implementation of that SecurityManager method. + +Thus, with the default SecurityManager method implementations, a call to a method in the left-hand column can only be successful if the permission specified in the corresponding entry in the right-hand column is allowed by the policy currently in effect. For example, the following row: + +Method SecurityManager Method Called Permission +java.awt.Toolkit + getSystemEventQueue(); + + checkAwtEventQueueAccess java.awt.AWTPermission "accessEventQueue"; + + + +specifies that a call to the getSystemEventQueue method in the java.awt.Toolkit class results in a call to the checkAwtEventQueueAccess SecurityManager method, which can only be successful if the following permission is granted to code on the call stack: + + java.awt.AWTPermission "accessEventQueue"; + +The convention of: + +Method SecurityManager Method Called Permission + some.package.class + public static void someMethod(String foo); + + checkXXX SomePermission "{foo}"; + + +means the runtime value of foo replaces the string {foo} in the permission name. + +As an example, here is one table entry: + +Method SecurityManager Method Called Permission +java.io.FileInputStream + FileInputStream(String name) + + checkRead(String) java.io.FilePermission "{name}", "read"; + + +If the FileInputStream method (in this case, a constructor) is called with "/test/MyTestFile" as the name argument, as in + + FileInputStream("/test/MyTestFile"); + +then in order for the call to succeed, the following permission must be set in the current policy, allowing read access to the file "/test/MyTestFile": + java.io.FilePermission "/test/MyTestFile", "read"; + +More specifically, the permission must either be explicitly set, as above, or implied by another permission, such as the following: + java.io.FilePermission "/test/*", "read"; + +which allows read access to any files in the "/test" directory. +In some cases, a term in braces is not exactly the same as the name of a specific method argument but is meant to represent the relevant value. Here is an example: + +Method SecurityManager Method Called Permission +java.net.DatagramSocket + public synchronized void + receive(DatagramPacket p); + + checkAccept({host}, {port}) java.net.SocketPermission "{host}:{port}", "accept"; + + +Here, the appropriate host and port values are calculated by the receive method and passed to checkAccept. + +In most cases, just the name of the SecurityManager method called is listed. Where the method is one of multiple methods of the same name, the argument types are also listed, for example for checkRead(String) and checkRead(FileDescriptor). In other cases where arguments may be relevant, they are also listed. + +The following table is ordered by package name. That is, the methods in classes in the java.awt package are listed first, followed by methods in classes in the java.io package, and so on. + + +Methods and the Permissions They Require + Method SecurityManager Method Called Permission +java.awt.Graphics2d + public abstract void + setComposite(Composite comp) + + checkPermission java.awt.AWTPermission "readDisplayPixels" if this Graphics2D context is drawing to a Component on the display screen and the Composite is a custom object rather than an instance of the AlphaComposite class. Note: The setComposite method is actually abstract and thus can't invoke security checks. Each actual implementation of the method should call the java.lang.SecurityManager checkPermission method with a java.awt.AWTPermission("readDisplayPixels") permission under the conditions noted. + +java.awt.Toolkit + public void addAWTEventListener( + AWTEventListener listener, + long eventMask) + public void removeAWTEventListener( + AWTEventListener listener) + + checkPermission java.awt.AWTPermission "listenToAllAWTEvents" + +java.awt.Toolkit + public abstract PrintJob getPrintJob( + Frame frame, String jobtitle, + Properties props) + + checkPrintJobAccess java.lang.RuntimePermission "queuePrintJob" +Note: The getPrintJob method is actually abstract and thus can't invoke security checks. Each actual implementation of the method should call the java.lang.SecurityManager checkPrintJobAccess method, which is successful only if the java.lang.RuntimePermission "queuePrintJob" permission is currently allowed. + +java.awt.Toolkit + public abstract Clipboard + getSystemClipboard() + + checkSystemClipboardAccess java.awt.AWTPermission "accessClipboard" +Note: The getSystemClipboard method is actually abstract and thus can't invoke security checks. Each actual implementation of the method should call the java.lang.SecurityManager checkSystemClipboardAccess method, which is successful only if the java.awt.AWTPermission "accessClipboard" permission is currently allowed. + +java.awt.Toolkit + public final EventQueue + getSystemEventQueue() + + checkAwtEventQueueAccess java.awt.AWTPermission "accessEventQueue" +java.awt.Window + Window() + + checkTopLevelWindow If java.awt.AWTPermission "showWindowWithoutWarningBanner" is set, the window will be displayed without a banner warning that the window was created by an applet. It it's not set, such a banner will be displayed. +java.beans.Beans + public static void setDesignTime( + boolean isDesignTime) + public static void setGuiAvailable( + boolean isGuiAvailable) + +java.beans.Introspector + public static synchronized void + setBeanInfoSearchPath(String path[]) + +java.beans.PropertyEditorManager + public static void registerEditor( + Class targetType, + Class editorClass) + public static synchronized void + setEditorSearchPath(String path[]) + + checkPropertiesAccess java.util.PropertyPermission "*", "read,write" +java.io.File + public boolean delete() + public void deleteOnExit() + + checkDelete(String) java.io.FilePermission "{name}", "delete" +java.io.FileInputStream + FileInputStream(FileDescriptor fdObj) + + checkRead(FileDescriptor) java.lang.RuntimePermission "readFileDescriptor" +java.io.FileInputStream + FileInputStream(String name) + FileInputStream(File file) + +java.io.File + public boolean exists() + public boolean canRead() + public boolean isFile() + public boolean isDirectory() + public boolean isHidden() + public long lastModified() + public long length() + public String[] list() + public String[] list( + FilenameFilter filter) + public File[] listFiles() + public File[] listFiles( + FilenameFilter filter) + public File[] listFiles( + FileFilter filter) + +java.io.RandomAccessFile + RandomAccessFile(String name, String mode) + RandomAccessFile(File file, String mode) + (where mode is "r" in both of these) + + checkRead(String) java.io.FilePermission "{name}", "read" +java.io.FileOutputStream + FileOutputStream(FileDescriptor fdObj) + + checkWrite(FileDescriptor) java.lang.RuntimePermission "writeFileDescriptor" +java.io.FileOutputStream + FileOutputStream(File file) + FileOutputStream(String name) + FileOutputStream(String name, + boolean append) + +java.io.File + public boolean canWrite() + public boolean createNewFile() + public static File createTempFile( + String prefix, String suffix) + public static File createTempFile( + String prefix, String suffix, + File directory) + public boolean mkdir() + public boolean mkdirs() + public boolean renameTo(File dest) + public boolean setLastModified(long time) + public boolean setReadOnly() + + checkWrite(String) java.io.FilePermission "{name}", "write" +java.io.ObjectInputStream + protected final boolean + enableResolveObject(boolean enable); + +java.io.ObjectOutputStream + protected final boolean + enableReplaceObject(boolean enable) + + checkPermission java.io.SerializablePermission "enableSubstitution" +java.io.ObjectInputStream + protected ObjectInputStream() + +java.io.ObjectOutputStream + protected ObjectOutputStream() + + checkPermission java.io.SerializablePermission "enableSubclassImplementation" +java.io.RandomAccessFile + RandomAccessFile(String name, String mode) + (where mode is "rw") + + checkRead(String) and checkWrite(String) java.io.FilePermission "{name}", "read,write" +java.lang.Class + public static Class forName( + String name, boolean initialize, + ClassLoader loader) + + checkPermission If loader is null, and the caller's class loader is not null, then java.lang.RuntimePermission("getClassLoader") +java.lang.Class + public Class[] getClasses() + + For this class and each of its superclasses, checkMemberAccess(this, Member.DECLARED) is called and, if the class is in a package, checkPackageAccess({pkgName}) is called. Default checkMemberAccess does not require any permissions if "this" class's classloader is the same as that of the caller. Otherwise, it requires java.lang.RuntimePermission "accessDeclaredMembers". If the class is in a package, java.lang.RuntimePermission "accessClassInPackage.{pkgName}" is also required. +java.lang.Class + public ClassLoader getClassLoader() + + checkPermission If the caller's class loader is null, or is the same as or an ancestor of the class loader for the class whose class loader is being requested, no permission is needed. Otherwise, +java.lang.RuntimePermission "getClassLoader" +is required. +java.lang.Class + public Class[] getDeclaredClasses() + public Field[] getDeclaredFields() + public Method[] getDeclaredMethods() + public Constructor[] + getDeclaredConstructors() + public Field getDeclaredField( + String name) + public Method getDeclaredMethod(...) + public Constructor + getDeclaredConstructor(...) + + checkMemberAccess(this, Member.DECLARED) and, if this class is in a package, checkPackageAccess({pkgName}) Default checkMemberAccess does not require any permissions if "this" class's classloader is the same as that of the caller. Otherwise, it requires java.lang.RuntimePermission "accessDeclaredMembers". If this class is in a package, java.lang.RuntimePermission "accessClassInPackage.{pkgName}" is also required. +java.lang.Class + public Field[] getFields() + public Method[] getMethods() + public Constructor[] getConstructors() + public Field getField(String name) + public Method getMethod(...) + public Constructor getConstructor(...) + + checkMemberAccess(this, Member.PUBLIC) and, if class is in a package, checkPackageAccess({pkgName}) Default checkMemberAccess does not require any permissions when the access type is Member.PUBLIC. If this class is in a package, java.lang.RuntimePermission "accessClassInPackage.{pkgName}" is required. +java.lang.Class + public ProtectionDomain + getProtectionDomain() + + checkPermission java.lang.RuntimePermission "getProtectionDomain" +java.lang.ClassLoader + ClassLoader() + ClassLoader(ClassLoader parent) + + checkCreateClassLoader java.lang.RuntimePermission "createClassLoader" +java.lang.ClassLoader + public static ClassLoader + getSystemClassLoader() + public ClassLoader getParent() + + checkPermission If the caller's class loader is null, or is the same as or an ancestor of the class loader for the class whose class loader is being requested, no permission is needed. Otherwise, +java.lang.RuntimePermission "getClassLoader" +is required. +java.lang.Runtime + public Process exec(String command) + public Process exec(String command, + String envp[]) + public Process exec(String cmdarray[]) + public Process exec(String cmdarray[], + String envp[]) + + checkExec java.io.FilePermission "{command}", "execute" +java.lang.Runtime + public void exit(int status) + public static void + runFinalizersOnExit(boolean value) +java.lang.System + public static void exit(int status) + public static void + runFinalizersOnExit(boolean value) + + checkExit(status) where status is 0 for runFinalizersOnExit java.lang.RuntimePermission "exitVM" +java.lang.Runtime + public void load(String lib) + public void loadLibrary(String lib) +java.lang.System + public static void load(String filename) + public static void loadLibrary( + String libname) + + checkLink({libName}) where {libName} is the lib, filename or libname argument java.lang.RuntimePermission "loadLibrary.{libName}" +java.lang.SecurityManager methods + + checkPermission See the next table. +java.lang.System + public static Properties + getProperties() + public static void + setProperties(Properties props) + + checkPropertiesAccess java.util.PropertyPermission "*", "read,write" +java.lang.System + public static String + getProperty(String key) + public static String + getProperty(String key, String def) + + checkPropertyAccess java.util.PropertyPermission "{key}", "read" +java.lang.System + public static void setIn(InputStream in) + public static void setOut(PrintStream out) + public static void setErr(PrintStream err) + + checkPermission java.lang.RuntimePermission "setIO" +java.lang.System + public static String + setProperty(String key, String value) + + checkPermission java.util.PropertyPermission "{key}", "write" +java.lang.System + public static synchronized void + setSecurityManager(SecurityManager s) + + checkPermission java.lang.RuntimePermission "setSecurityManager" +java.lang.Thread + public ClassLoader getContextClassLoader() + + checkPermission If the caller's class loader is null, or is the same as or an ancestor of the context class loader for the thread whose context class loader is being requested, no permission is needed. Otherwise, +java.lang.RuntimePermission "getClassLoader" +is required. +java.lang.Thread + public void setContextClassLoader + (ClassLoader cl) + + checkPermission java.lang.RuntimePermission "setContextClassLoader" +java.lang.Thread + public final void checkAccess() + public void interrupt() + public final void suspend() + public final void resume() + public final void setPriority + (int newPriority) + public final void setName(String name) + public final void setDaemon(boolean on) + + checkAccess(this) java.lang.RuntimePermission "modifyThread" +java.lang.Thread + public static int + enumerate(Thread tarray[]) + + checkAccess({threadGroup}) java.lang.RuntimePermission "modifyThreadGroup" +java.lang.Thread + public final void stop() + + checkAccess(this). Also checkPermission if the current thread is trying to stop a thread other than itself. java.lang.RuntimePermission "modifyThread". +Also java.lang.RuntimePermission "stopThread" if the current thread is trying to stop a thread other than itself. +java.lang.Thread + public final synchronized void + stop(Throwable obj) + + checkAccess(this). Also checkPermission if the current thread is trying to stop a thread other than itself or obj is not an instance of ThreadDeath. java.lang.RuntimePermission "modifyThread". +Also java.lang.RuntimePermission "stopThread" if the current thread is trying to stop a thread other than itself or obj is not an instance of ThreadDeath. +java.lang.Thread + Thread() + Thread(Runnable target) + Thread(String name) + Thread(Runnable target, String name) + +java.lang.ThreadGroup + ThreadGroup(String name) + ThreadGroup(ThreadGroup parent, + String name) + + checkAccess({parentThreadGroup}) java.lang.RuntimePermission "modifyThreadGroup" +java.lang.Thread + Thread(ThreadGroup group, ...) + +java.lang.ThreadGroup + public final void checkAccess() + public int enumerate(Thread list[]) + public int enumerate(Thread list[], + boolean recurse) + public int enumerate(ThreadGroup list[]) + public int enumerate(ThreadGroup list[], + boolean recurse) + public final ThreadGroup getParent() + public final void + setDaemon(boolean daemon) + public final void setMaxPriority(int pri) + public final void suspend() + public final void resume() + public final void destroy() + + checkAccess(this) for ThreadGroup methods, or checkAccess(group) for Thread methods java.lang.RuntimePermission "modifyThreadGroup" +java.lang.ThreadGroup + public final void interrupt() + + checkAccess(this) Requires java.lang.RuntimePermission "modifyThreadGroup". +Also requires java.lang.RuntimePermission "modifyThread", since the java.lang.Thread interrupt() method is called for each thread in the thread group and in all of its subgroups. See the Thread interrupt() method. +java.lang.ThreadGroup + public final void stop() + + checkAccess(this) Requires java.lang.RuntimePermission "modifyThreadGroup". +Also requires java.lang.RuntimePermission "modifyThread" and possibly java.lang.RuntimePermission "stopThread", since the java.lang.Thread stop() method is called for each thread in the thread group and in all of its subgroups. See the Thread stop() method. +java.lang.reflect.AccessibleObject + public static void setAccessible(...) + public void setAccessible(...) + + checkPermission java.lang.reflect.ReflectPermission "suppressAccessChecks" +java.net.Authenticator + public static PasswordAuthentication + requestPasswordAuthentication( + InetAddress addr, + int port, + String protocol, + String prompt, + String scheme) + + checkPermission java.net.NetPermission "requestPasswordAuthentication" +java.net.Authenticator + public static void + setDefault(Authenticator a) + + checkPermission java.net.NetPermission "setDefaultAuthenticator" +java.net.MulticastSocket + public void + joinGroup(InetAddress mcastaddr) + public void + leaveGroup(InetAddress mcastaddr) + + checkMulticast(InetAddress) java.net.SocketPermission( mcastaddr.getHostAddress(), "accept,connect") +java.net.DatagramSocket + public void send(DatagramPacket p) + + checkMulticast(p.getAddress()) or checkConnect( +p.getAddress().getHostAddress(), p.getPort()) if (p.getAddress().isMulticastAddress()) { +java.net.SocketPermission( +(p.getAddress()).getHostAddress(), "accept,connect") +} +else { +port = p.getPort(); +host = p.getAddress().getHostAddress(); +if (port == -1) java.net.SocketPermission "{host}","resolve"; +else java.net.SocketPermission "{host}:{port}","connect" +} +java.net.MulticastSocket + public synchronized void + send(DatagramPacket p, byte ttl) + + checkMulticast(p.getAddress(), ttl) or checkConnect( +p.getAddress().getHostAddress(), p.getPort()) if (p.getAddress().isMulticastAddress()) { +java.net.SocketPermission( +(p.getAddress()).getHostAddress(), "accept,connect") +} +else { +port = p.getPort(); +host = p.getAddress().getHostAddress(); +if (port == -1) java.net.SocketPermission "{host}","resolve"; +else java.net.SocketPermission "{host}:{port}","connect" +} +java.net.InetAddress + public String getHostName() + public static InetAddress[] + getAllByName(String host) + public static InetAddress getLocalHost() + +java.net.DatagramSocket + public InetAddress getLocalAddress() + + checkConnect({host}, -1) java.net.SocketPermission "{host}", "resolve" +java.net.ServerSocket + ServerSocket(...) + +java.net.DatagramSocket + DatagramSocket(...) + +java.net.MulticastSocket + MulticastSocket(...) + + checkListen({port}) if (port == 0) java.net.SocketPermission "localhost:1024-","listen"; +else java.net.SocketPermission "localhost:{port}","listen" +java.net.ServerSocket + public Socket accept() + protected final void implAccept(Socket s) + + checkAccept({host}, {port}) java.net.SocketPermission "{host}:{port}", "accept" +java.net.ServerSocket + public static synchronized void + setSocketFactory(...) + +java.net.Socket + public static synchronized void + setSocketImplFactory(...) + +java.net.URL + public static synchronized void + setURLStreamHandlerFactory(...) + + java.net.URLConnection + public static synchronized void + setContentHandlerFactory(...) + public static void + setFileNameMap(FileNameMap map) + +java.net.HttpURLConnection + public static void + setFollowRedirects(boolean set) + +java.rmi.activation.ActivationGroup + public static synchronized + ActivationGroup createGroup(...) + public static synchronized void + setSystem(ActivationSystem system) + +java.rmi.server.RMISocketFactory + public synchronized static void + setSocketFactory(...) + + checkSetFactory java.lang.RuntimePermission "setFactory" +java.net.Socket + Socket(...) + + checkConnect({host}, {port}) java.net.SocketPermission "{host}:{port}", "connect" +java.net.DatagramSocket + public synchronized void + receive(DatagramPacket p) + + checkAccept({host}, {port}) java.net.SocketPermission "{host}:{port}", "accept" +java.net.URL + URL(...) + + checkPermission java.net.NetPermission "specifyStreamHandler" +java.net.URLClassLoader + URLClassLoader(...) + + checkCreateClassLoader java.lang.RuntimePermission "createClassLoader" +java.security.Identity + public void addCertificate(...) + + + checkSecurityAccess( +"addIdentityCertificate") java.security.SecurityPermission "addIdentityCertificate" +java.security.Identity + public void removeCertificate(...) + + checkSecurityAccess( +"removeIdentityCertificate") java.security.SecurityPermission "removeIdentityCertificate" +java.security.Identity + public void setInfo(String info) + + checkSecurityAccess( +"setIdentityInfo") java.security.SecurityPermission "setIdentityInfo" +java.security.Identity + public void setPublicKey(PublicKey key) + + checkSecurityAccess( +"setIdentityPublicKey") java.security.SecurityPermission "setIdentityPublicKey" +java.security.Identity + public String toString(...) + + checkSecurityAccess( +"printIdentity") java.security.SecurityPermission "printIdentity" +java.security.IdentityScope + protected static void setSystemScope() + + checkSecurityAccess( +"setSystemScope") java.security.SecurityPermission "setSystemScope" +java.security.Permission + public void checkGuard(Object object) + + checkPermission(this) this Permission object is the permission checked +java.security.Policy + public static Policy getPolicy() + + checkPermission java.security.SecurityPermission "getPolicy" +java.security.Policy + public static void + setPolicy(Policy policy); + + checkPermission java.security.SecurityPermission "setPolicy" +java.security.Provider + public synchronized void clear() + + checkSecurityAccess( +"clearProviderProperties."+{name}) java.security.SecurityPermission "clearProviderProperties.{name}" where name is the provider name. +java.security.Provider + public synchronized Object + put(Object key, Object value) + + checkSecurityAccess( +"putProviderProperty."+{name}) java.security.SecurityPermission "putProviderProperty.{name}" where name is the provider name. +java.security.Provider + public synchronized Object + remove(Object key) + + checkSecurityAccess( +"removeProviderProperty."+{name}) java.security.SecurityPermission "removeProviderProperty.{name}" where name is the provider name. +java.security.SecureClassLoader + SecureClassLoader(...) + + checkCreateClassLoader java.lang.RuntimePermission "createClassLoader" +java.security.Security + public static void getProperty(String key) + + checkPermission java.security.SecurityPermission "getProperty.{key}" +java.security.Security + public static int + addProvider(Provider provider) + public static int + insertProviderAt(Provider provider, + int position); + + checkSecurityAccess( +"insertProvider."+provider.getName()) java.security.SecurityPermission "insertProvider.{name}" +java.security.Security + public static void + removeProvider(String name) + + checkSecurityAccess( +"removeProvider."+name) java.security.SecurityPermission "removeProvider.{name}" +java.security.Security + public static void + setProperty(String key, String datum) + + checkSecurityAccess( +"setProperty."+key) java.security.SecurityPermission "setProperty.{key}" +java.security.Signer + public PrivateKey getPrivateKey() + + checkSecurityAccess( +"getSignerPrivateKey") java.security.SecurityPermission "getSignerPrivateKey" +java.security.Signer + public final void + setKeyPair(KeyPair pair) + + checkSecurityAccess( +"setSignerKeypair") java.security.SecurityPermission "setSignerKeypair" +java.util.Locale + public static synchronized void + setDefault(Locale newLocale) + + checkPermission java.util.PropertyPermission "user.language","write" +java.util.zip.ZipFile + ZipFile(String name) + + checkRead java.io.FilePermission "{name}","read" + + + + + + +-------------------------------------------------------------------------------- + +java.lang.SecurityManager Method Permission Checks +This table shows which permissions are checked for by the default implementations of the java.lang.SecurityManager methods. + +Each of the specified check methods calls the SecurityManager checkPermission method with the specified permission, except for the checkConnect and checkRead methods that take a context argument. Those methods expect the context to be an AccessControlContext and they call the context's checkPermission method with the specified permission. + +Method Permission +public void checkAccept(String host, int port); java.net.SocketPermission "{host}:{port}", "accept"; +public void checkAccess(Thread g); java.lang.RuntimePermission "modifyThread"); +public void checkAccess(ThreadGroup g); java.lang.RuntimePermission "modifyThreadGroup"); +public void checkAwtEventQueueAccess(); java.awt.AWTPermission "accessEventQueue"; +public void checkConnect(String host, int port); if (port == -1) java.net.SocketPermission "{host}","resolve"; +else java.net.SocketPermission "{host}:{port}","connect"; +public void checkConnect(String host, int port, Object context); if (port == -1) java.net.SocketPermission "{host}","resolve"; +else java.net.SocketPermission "{host}:{port}","connect"; +public void checkCreateClassLoader(); java.lang.RuntimePermission "createClassLoader"; +public void checkDelete(String file); java.io.FilePermission "{file}", "delete"; +public void checkExec(String cmd); if cmd is an absolute path: java.io.FilePermission "{cmd}", "execute"; +else java.io.FilePermission "-", "execute"; +public void checkExit(int status); java.lang.RuntimePermission "exitVM"); +public void checkLink(String lib); java.lang.RuntimePermission "loadLibrary.{lib}"; +public void checkListen(int port); if (port == 0) java.net.SocketPermission "localhost:1024-","listen"; +else java.net.SocketPermission "localhost:{port}","listen"; +public void checkMemberAccess(Class clazz, int which); if (which != Member.PUBLIC) { + if (currentClassLoader() != clazz.getClassLoader()) { + checkPermission( + new java.lang.RuntimePermission("accessDeclaredMembers")); + } +} + + +public void checkMulticast(InetAddress maddr); java.net.SocketPermission(maddr.getHostAddress(),"accept,connect"); +public void checkMulticast(InetAddress maddr, byte ttl); java.net.SocketPermission(maddr.getHostAddress(),"accept,connect"); +public void checkPackageAccess(String pkg); java.lang.RuntimePermission "accessClassInPackage.{pkg}"; +public void checkPackageDefinition(String pkg); java.lang.RuntimePermission "defineClassInPackage.{pkg}"; +public void checkPrintJobAccess(); java.lang.RuntimePermission "queuePrintJob"; +public void checkPropertiesAccess(); java.util.PropertyPermission "*", "read,write"; +public void checkPropertyAccess(String key); java.util.PropertyPermission "{key}", "read,write"; +public void checkRead(FileDescriptor fd); java.lang.RuntimePermission "readFileDescriptor"; +public void checkRead(String file); java.io.FilePermission "{file}", "read"; +public void checkRead(String file, Object context); java.io.FilePermission "{file}", "read"; +public void checkSecurityAccess(String action); java.security.SecurityPermission "{action}"; +public void checkSetFactory(); java.lang.RuntimePermission "setFactory"; +public void checkSystemClipboardAccess(); java.awt.AWTPermission "accessClipboard"; +public boolean checkTopLevelWindow(Object window); java.awt.AWTPermission "showWindowWithoutWarningBanner"; +public void checkWrite(FileDescriptor fd); java.lang.RuntimePermission "writeFileDescriptor"; +public void checkWrite(String file); java.io.FilePermission "{file}", "write"; +public SecurityManager(); java.lang.RuntimePermission "createSecurityManager"; + + + + +-------------------------------------------------------------------------------- +Copyright © 1997-98 Sun Microsystems, Inc. All Rights Reserved. + +Please send comments to: java-security@java.sun.com +Java Software diff --git a/docs/resign.doc b/docs/resign.doc new file mode 100644 index 0000000..3005a6a Binary files /dev/null and b/docs/resign.doc differ diff --git a/docs/resign_barra.doc b/docs/resign_barra.doc new file mode 100644 index 0000000..002fa09 Binary files /dev/null and b/docs/resign_barra.doc differ diff --git a/docs/resign_ziff.doc b/docs/resign_ziff.doc new file mode 100644 index 0000000..e5abcd0 Binary files /dev/null and b/docs/resign_ziff.doc differ diff --git a/docs/rfc0821.txt b/docs/rfc0821.txt new file mode 100644 index 0000000..25893c6 --- /dev/null +++ b/docs/rfc0821.txt @@ -0,0 +1,4051 @@ + + + RFC 821 + + + + + + SIMPLE MAIL TRANSFER PROTOCOL + + + + Jonathan B. Postel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + August 1982 + + + + Information Sciences Institute + University of Southern California + 4676 Admiralty Way + Marina del Rey, California 90291 + + (213) 822-1511 + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + TABLE OF CONTENTS + + 1. INTRODUCTION .................................................. 1 + + 2. THE SMTP MODEL ................................................ 2 + + 3. THE SMTP PROCEDURE ............................................ 4 + + 3.1. Mail ..................................................... 4 + 3.2. Forwarding ............................................... 7 + 3.3. Verifying and Expanding .................................. 8 + 3.4. Sending and Mailing ..................................... 11 + 3.5. Opening and Closing ..................................... 13 + 3.6. Relaying ................................................ 14 + 3.7. Domains ................................................. 17 + 3.8. Changing Roles .......................................... 18 + + 4. THE SMTP SPECIFICATIONS ...................................... 19 + + 4.1. SMTP Commands ........................................... 19 + 4.1.1. Command Semantics ..................................... 19 + 4.1.2. Command Syntax ........................................ 27 + 4.2. SMTP Replies ............................................ 34 + 4.2.1. Reply Codes by Function Group ......................... 35 + 4.2.2. Reply Codes in Numeric Order .......................... 36 + 4.3. Sequencing of Commands and Replies ...................... 37 + 4.4. State Diagrams .......................................... 39 + 4.5. Details ................................................. 41 + 4.5.1. Minimum Implementation ................................ 41 + 4.5.2. Transparency .......................................... 41 + 4.5.3. Sizes ................................................. 42 + + APPENDIX A: TCP ................................................. 44 + APPENDIX B: NCP ................................................. 45 + APPENDIX C: NITS ................................................ 46 + APPENDIX D: X.25 ................................................ 47 + APPENDIX E: Theory of Reply Codes ............................... 48 + APPENDIX F: Scenarios ........................................... 51 + + GLOSSARY ......................................................... 64 + + REFERENCES ....................................................... 67 + + + + +Network Working Group J. Postel +Request for Comments: DRAFT ISI +Replaces: RFC 788, 780, 772 August 1982 + + SIMPLE MAIL TRANSFER PROTOCOL + + +1. INTRODUCTION + + The objective of Simple Mail Transfer Protocol (SMTP) is to transfer + mail reliably and efficiently. + + SMTP is independent of the particular transmission subsystem and + requires only a reliable ordered data stream channel. Appendices A, + B, C, and D describe the use of SMTP with various transport services. + A Glossary provides the definitions of terms as used in this + document. + + An important feature of SMTP is its capability to relay mail across + transport service environments. A transport service provides an + interprocess communication environment (IPCE). An IPCE may cover one + network, several networks, or a subset of a network. It is important + to realize that transport systems (or IPCEs) are not one-to-one with + networks. A process can communicate directly with another process + through any mutually known IPCE. Mail is an application or use of + interprocess communication. Mail can be communicated between + processes in different IPCEs by relaying through a process connected + to two (or more) IPCEs. More specifically, mail can be relayed + between hosts on different transport systems by a host on both + transport systems. + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 1] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +2. THE SMTP MODEL + + The SMTP design is based on the following model of communication: as + the result of a user mail request, the sender-SMTP establishes a + two-way transmission channel to a receiver-SMTP. The receiver-SMTP + may be either the ultimate destination or an intermediate. SMTP + commands are generated by the sender-SMTP and sent to the + receiver-SMTP. SMTP replies are sent from the receiver-SMTP to the + sender-SMTP in response to the commands. + + Once the transmission channel is established, the SMTP-sender sends a + MAIL command indicating the sender of the mail. If the SMTP-receiver + can accept mail it responds with an OK reply. The SMTP-sender then + sends a RCPT command identifying a recipient of the mail. If the + SMTP-receiver can accept mail for that recipient it responds with an + OK reply; if not, it responds with a reply rejecting that recipient + (but not the whole mail transaction). The SMTP-sender and + SMTP-receiver may negotiate several recipients. When the recipients + have been negotiated the SMTP-sender sends the mail data, terminating + with a special sequence. If the SMTP-receiver successfully processes + the mail data it responds with an OK reply. The dialog is purposely + lock-step, one-at-a-time. + + ------------------------------------------------------------- + + + +----------+ +----------+ + +------+ | | | | + | User |<-->| | SMTP | | + +------+ | Sender- |Commands/Replies| Receiver-| + +------+ | SMTP |<-------------->| SMTP | +------+ + | File |<-->| | and Mail | |<-->| File | + |System| | | | | |System| + +------+ +----------+ +----------+ +------+ + + + Sender-SMTP Receiver-SMTP + + Model for SMTP Use + + Figure 1 + + ------------------------------------------------------------- + + The SMTP provides mechanisms for the transmission of mail; directly + from the sending user's host to the receiving user's host when the + + + +[Page 2] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + two host are connected to the same transport service, or via one or + more relay SMTP-servers when the source and destination hosts are not + connected to the same transport service. + + To be able to provide the relay capability the SMTP-server must be + supplied with the name of the ultimate destination host as well as + the destination mailbox name. + + The argument to the MAIL command is a reverse-path, which specifies + who the mail is from. The argument to the RCPT command is a + forward-path, which specifies who the mail is to. The forward-path + is a source route, while the reverse-path is a return route (which + may be used to return a message to the sender when an error occurs + with a relayed message). + + When the same message is sent to multiple recipients the SMTP + encourages the transmission of only one copy of the data for all the + recipients at the same destination host. + + The mail commands and replies have a rigid syntax. Replies also have + a numeric code. In the following, examples appear which use actual + commands and replies. The complete lists of commands and replies + appears in Section 4 on specifications. + + Commands and replies are not case sensitive. That is, a command or + reply word may be upper case, lower case, or any mixture of upper and + lower case. Note that this is not true of mailbox user names. For + some hosts the user name is case sensitive, and SMTP implementations + must take case to preserve the case of user names as they appear in + mailbox arguments. Host names are not case sensitive. + + Commands and replies are composed of characters from the ASCII + character set [1]. When the transport service provides an 8-bit byte + (octet) transmission channel, each 7-bit character is transmitted + right justified in an octet with the high order bit cleared to zero. + + When specifying the general form of a command or reply, an argument + (or special symbol) will be denoted by a meta-linguistic variable (or + constant), for example, "" or "". Here the + angle brackets indicate these are meta-linguistic variables. + However, some arguments use the angle brackets literally. For + example, an actual reverse-path is enclosed in angle brackets, i.e., + "" is an instance of (the + angle brackets are actually transmitted in the command or reply). + + + + + +Postel [Page 3] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +3. THE SMTP PROCEDURES + + This section presents the procedures used in SMTP in several parts. + First comes the basic mail procedure defined as a mail transaction. + Following this are descriptions of forwarding mail, verifying mailbox + names and expanding mailing lists, sending to terminals instead of or + in combination with mailboxes, and the opening and closing exchanges. + At the end of this section are comments on relaying, a note on mail + domains, and a discussion of changing roles. Throughout this section + are examples of partial command and reply sequences, several complete + scenarios are presented in Appendix F. + + 3.1. MAIL + + There are three steps to SMTP mail transactions. The transaction + is started with a MAIL command which gives the sender + identification. A series of one or more RCPT commands follows + giving the receiver information. Then a DATA command gives the + mail data. And finally, the end of mail data indicator confirms + the transaction. + + The first step in the procedure is the MAIL command. The + contains the source mailbox. + + MAIL FROM: + + This command tells the SMTP-receiver that a new mail + transaction is starting and to reset all its state tables and + buffers, including any recipients or mail data. It gives the + reverse-path which can be used to report errors. If accepted, + the receiver-SMTP returns a 250 OK reply. + + The can contain more than just a mailbox. The + is a reverse source routing list of hosts and + source mailbox. The first host in the should be + the host sending this command. + + The second step in the procedure is the RCPT command. + + RCPT TO: + + This command gives a forward-path identifying one recipient. + If accepted, the receiver-SMTP returns a 250 OK reply, and + stores the forward-path. If the recipient is unknown the + receiver-SMTP returns a 550 Failure reply. This second step of + the procedure can be repeated any number of times. + + + +[Page 4] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + The can contain more than just a mailbox. The + is a source routing list of hosts and the + destination mailbox. The first host in the + should be the host receiving this command. + + The third step in the procedure is the DATA command. + + DATA + + If accepted, the receiver-SMTP returns a 354 Intermediate reply + and considers all succeeding lines to be the message text. + When the end of text is received and stored the SMTP-receiver + sends a 250 OK reply. + + Since the mail data is sent on the transmission channel the end + of the mail data must be indicated so that the command and + reply dialog can be resumed. SMTP indicates the end of the + mail data by sending a line containing only a period. A + transparency procedure is used to prevent this from interfering + with the user's text (see Section 4.5.2). + + Please note that the mail data includes the memo header + items such as Date, Subject, To, Cc, From [2]. + + The end of mail data indicator also confirms the mail + transaction and tells the receiver-SMTP to now process the + stored recipients and mail data. If accepted, the + receiver-SMTP returns a 250 OK reply. The DATA command should + fail only if the mail transaction was incomplete (for example, + no recipients), or if resources are not available. + + The above procedure is an example of a mail transaction. These + commands must be used only in the order discussed above. + Example 1 (below) illustrates the use of these commands in a mail + transaction. + + + + + + + + + + + + + + +Postel [Page 5] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example of the SMTP Procedure + + This SMTP example shows mail sent by Smith at host Alpha.ARPA, + to Jones, Green, and Brown at host Beta.ARPA. Here we assume + that host Alpha contacts host Beta directly. + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 550 No such user here + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + The mail has now been accepted for Jones and Brown. Green did + not have a mailbox at host Beta. + + Example 1 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + +[Page 6] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.2. FORWARDING + + There are some cases where the destination information in the + is incorrect, but the receiver-SMTP knows the + correct destination. In such cases, one of the following replies + should be used to allow the sender to contact the correct + destination. + + 251 User not local; will forward to + + This reply indicates that the receiver-SMTP knows the user's + mailbox is on another host and indicates the correct + forward-path to use in the future. Note that either the + host or user or both may be different. The receiver takes + responsibility for delivering the message. + + 551 User not local; please try + + This reply indicates that the receiver-SMTP knows the user's + mailbox is on another host and indicates the correct + forward-path to use. Note that either the host or user or + both may be different. The receiver refuses to accept mail + for this user, and the sender must either redirect the mail + according to the information provided or return an error + response to the originating user. + + Example 2 illustrates the use of these responses. + + ------------------------------------------------------------- + + Example of Forwarding + + Either + + S: RCPT TO: + R: 251 User not local; will forward to + + Or + + S: RCPT TO: + R: 551 User not local; please try + + Example 2 + + ------------------------------------------------------------- + + + + +Postel [Page 7] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 3.3. VERIFYING AND EXPANDING + + SMTP provides as additional features, commands to verify a user + name or expand a mailing list. This is done with the VRFY and + EXPN commands, which have character string arguments. For the + VRFY command, the string is a user name, and the response may + include the full name of the user and must include the mailbox of + the user. For the EXPN command, the string identifies a mailing + list, and the multiline response may include the full name of the + users and must give the mailboxes on the mailing list. + + "User name" is a fuzzy term and used purposely. If a host + implements the VRFY or EXPN commands then at least local mailboxes + must be recognized as "user names". If a host chooses to + recognize other strings as "user names" that is allowed. + + In some hosts the distinction between a mailing list and an alias + for a single mailbox is a bit fuzzy, since a common data structure + may hold both types of entries, and it is possible to have mailing + lists of one mailbox. If a request is made to verify a mailing + list a positive response can be given if on receipt of a message + so addressed it will be delivered to everyone on the list, + otherwise an error should be reported (e.g., "550 That is a + mailing list, not a user"). If a request is made to expand a user + name a positive response can be formed by returning a list + containing one name, or an error can be reported (e.g., "550 That + is a user name, not a mailing list"). + + In the case of a multiline reply (normal for EXPN) exactly one + mailbox is to be specified on each line of the reply. In the case + of an ambiguous request, for example, "VRFY Smith", where there + are two Smith's the response must be "553 User ambiguous". + + The case of verifying a user name is straightforward as shown in + example 3. + + + + + + + + + + + + + + +[Page 8] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example of Verifying a User Name + + Either + + S: VRFY Smith + R: 250 Fred Smith + + Or + + S: VRFY Smith + R: 251 User not local; will forward to + + Or + + S: VRFY Jones + R: 550 String does not match anything. + + Or + + S: VRFY Jones + R: 551 User not local; please try + + Or + + S: VRFY Gourzenkyinplatz + R: 553 User ambiguous. + + Example 3 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + +Postel [Page 9] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The case of expanding a mailbox list requires a multiline reply as + shown in example 4. + + ------------------------------------------------------------- + + Example of Expanding a Mailing List + + Either + + S: EXPN Example-People + R: 250-Jon Postel + R: 250-Fred Fonebone + R: 250-Sam Q. Smith + R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250- + R: 250 + + Or + + S: EXPN Executive-Washroom-List + R: 550 Access Denied to You. + + Example 4 + + ------------------------------------------------------------- + + The character string arguments of the VRFY and EXPN commands + cannot be further restricted due to the variety of implementations + of the user name and mailbox list concepts. On some systems it + may be appropriate for the argument of the EXPN command to be a + file name for a file containing a mailing list, but again there is + a variety of file naming conventions in the Internet. + + The VRFY and EXPN commands are not included in the minimum + implementation (Section 4.5.1), and are not required to work + across relays when they are implemented. + + + + + + + + + + + + + +[Page 10] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.4. SENDING AND MAILING + + The main purpose of SMTP is to deliver messages to user's + mailboxes. A very similar service provided by some hosts is to + deliver messages to user's terminals (provided the user is active + on the host). The delivery to the user's mailbox is called + "mailing", the delivery to the user's terminal is called + "sending". Because in many hosts the implementation of sending is + nearly identical to the implementation of mailing these two + functions are combined in SMTP. However the sending commands are + not included in the required minimum implementation + (Section 4.5.1). Users should have the ability to control the + writing of messages on their terminals. Most hosts permit the + users to accept or refuse such messages. + + The following three command are defined to support the sending + options. These are used in the mail transaction instead of the + MAIL command and inform the receiver-SMTP of the special semantics + of this transaction: + + SEND FROM: + + The SEND command requires that the mail data be delivered to + the user's terminal. If the user is not active (or not + accepting terminal messages) on the host a 450 reply may + returned to a RCPT command. The mail transaction is + successful if the message is delivered the terminal. + + SOML FROM: + + The Send Or MaiL command requires that the mail data be + delivered to the user's terminal if the user is active (and + accepting terminal messages) on the host. If the user is + not active (or not accepting terminal messages) then the + mail data is entered into the user's mailbox. The mail + transaction is successful if the message is delivered either + to the terminal or the mailbox. + + SAML FROM: + + The Send And MaiL command requires that the mail data be + delivered to the user's terminal if the user is active (and + accepting terminal messages) on the host. In any case the + mail data is entered into the user's mailbox. The mail + transaction is successful if the message is delivered the + mailbox. + + + +Postel [Page 11] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The same reply codes that are used for the MAIL commands are used + for these commands. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 12] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.5. OPENING AND CLOSING + + At the time the transmission channel is opened there is an + exchange to ensure that the hosts are communicating with the hosts + they think they are. + + The following two commands are used in transmission channel + opening and closing: + + HELO + + QUIT + + In the HELO command the host sending the command identifies + itself; the command may be interpreted as saying "Hello, I am + ". + + ------------------------------------------------------------- + + Example of Connection Opening + + R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIF.ARPA + R: 250 BBN-UNIX.ARPA + + Example 5 + + ------------------------------------------------------------- + + ------------------------------------------------------------- + + Example of Connection Closing + + S: QUIT + R: 221 BBN-UNIX.ARPA Service closing transmission channel + + Example 6 + + ------------------------------------------------------------- + + + + + + + + + + +Postel [Page 13] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 3.6. RELAYING + + The forward-path may be a source route of the form + "@ONE,@TWO:JOE@THREE", where ONE, TWO, and THREE are hosts. This + form is used to emphasize the distinction between an address and a + route. The mailbox is an absolute address, and the route is + information about how to get there. The two concepts should not + be confused. + + Conceptually the elements of the forward-path are moved to the + reverse-path as the message is relayed from one server-SMTP to + another. The reverse-path is a reverse source route, (i.e., a + source route from the current location of the message to the + originator of the message). When a server-SMTP deletes its + identifier from the forward-path and inserts it into the + reverse-path, it must use the name it is known by in the + environment it is sending into, not the environment the mail came + from, in case the server-SMTP is known by different names in + different environments. + + If when the message arrives at an SMTP the first element of the + forward-path is not the identifier of that SMTP the element is not + deleted from the forward-path and is used to determine the next + SMTP to send the message to. In any case, the SMTP adds its own + identifier to the reverse-path. + + Using source routing the receiver-SMTP receives mail to be relayed + to another server-SMTP The receiver-SMTP may accept or reject the + task of relaying the mail in the same way it accepts or rejects + mail for a local user. The receiver-SMTP transforms the command + arguments by moving its own identifier from the forward-path to + the beginning of the reverse-path. The receiver-SMTP then becomes + a sender-SMTP, establishes a transmission channel to the next SMTP + in the forward-path, and sends it the mail. + + The first host in the reverse-path should be the host sending the + SMTP commands, and the first host in the forward-path should be + the host receiving the SMTP commands. + + Notice that the forward-path and reverse-path appear in the SMTP + commands and replies, but not necessarily in the message. That + is, there is no need for these paths and especially this syntax to + appear in the "To:" , "From:", "CC:", etc. fields of the message + header. + + If a server-SMTP has accepted the task of relaying the mail and + + + +[Page 14] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + later finds that the forward-path is incorrect or that the mail + cannot be delivered for whatever reason, then it must construct an + "undeliverable mail" notification message and send it to the + originator of the undeliverable mail (as indicated by the + reverse-path). + + This notification message must be from the server-SMTP at this + host. Of course, server-SMTPs should not send notification + messages about problems with notification messages. One way to + prevent loops in error reporting is to specify a null reverse-path + in the MAIL command of a notification message. When such a + message is relayed it is permissible to leave the reverse-path + null. A MAIL command with a null reverse-path appears as follows: + + MAIL FROM:<> + + An undeliverable mail notification message is shown in example 7. + This notification is in response to a message originated by JOE at + HOSTW and sent via HOSTX to HOSTY with instructions to relay it on + to HOSTZ. What we see in the example is the transaction between + HOSTY and HOSTX, which is the first step in the return of the + notification message. + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 15] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example Undeliverable Mail Notification Message + + S: MAIL FROM:<> + R: 250 ok + S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA> + R: 250 ok + S: DATA + R: 354 send the mail data, end with . + S: Date: 23 Oct 81 11:22:33 + S: From: SMTP@HOSTY.ARPA + S: To: JOE@HOSTW.ARPA + S: Subject: Mail System Problem + S: + S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost. + S: HOSTZ.ARPA said this: + S: "550 No Such User" + S: . + R: 250 ok + + Example 7 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 16] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.7. DOMAINS + + Domains are a recently introduced concept in the ARPA Internet + mail system. The use of domains changes the address space from a + flat global space of simple character string host names to a + hierarchically structured rooted tree of global addresses. The + host name is replaced by a domain and host designator which is a + sequence of domain element strings separated by periods with the + understanding that the domain elements are ordered from the most + specific to the most general. + + For example, "USC-ISIF.ARPA", "Fred.Cambridge.UK", and + "PC7.LCS.MIT.ARPA" might be host-and-domain identifiers. + + Whenever domain names are used in SMTP only the official names are + used, the use of nicknames or aliases is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 17] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 3.8. CHANGING ROLES + + The TURN command may be used to reverse the roles of the two + programs communicating over the transmission channel. + + If program-A is currently the sender-SMTP and it sends the TURN + command and receives an ok reply (250) then program-A becomes the + receiver-SMTP. + + If program-B is currently the receiver-SMTP and it receives the + TURN command and sends an ok reply (250) then program-B becomes + the sender-SMTP. + + To refuse to change roles the receiver sends the 502 reply. + + Please note that this command is optional. It would not normally + be used in situations where the transmission channel is TCP. + However, when the cost of establishing the transmission channel is + high, this command may be quite useful. For example, this command + may be useful in supporting be mail exchange using the public + switched telephone system as a transmission channel, especially if + some hosts poll other hosts for mail exchanges. + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 18] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +4. THE SMTP SPECIFICATIONS + + 4.1. SMTP COMMANDS + + 4.1.1. COMMAND SEMANTICS + + The SMTP commands define the mail transfer or the mail system + function requested by the user. SMTP commands are character + strings terminated by . The command codes themselves are + alphabetic characters terminated by if parameters follow + and otherwise. The syntax of mailboxes must conform to + receiver site conventions. The SMTP commands are discussed + below. The SMTP replies are discussed in the Section 4.2. + + A mail transaction involves several data objects which are + communicated as arguments to different commands. The + reverse-path is the argument of the MAIL command, the + forward-path is the argument of the RCPT command, and the mail + data is the argument of the DATA command. These arguments or + data objects must be transmitted and held pending the + confirmation communicated by the end of mail data indication + which finalizes the transaction. The model for this is that + distinct buffers are provided to hold the types of data + objects, that is, there is a reverse-path buffer, a + forward-path buffer, and a mail data buffer. Specific commands + cause information to be appended to a specific buffer, or cause + one or more buffers to be cleared. + + HELLO (HELO) + + This command is used to identify the sender-SMTP to the + receiver-SMTP. The argument field contains the host name of + the sender-SMTP. + + The receiver-SMTP identifies itself to the sender-SMTP in + the connection greeting reply, and in the response to this + command. + + This command and an OK reply to it confirm that both the + sender-SMTP and the receiver-SMTP are in the initial state, + that is, there is no transaction in progress and all state + tables and buffers are cleared. + + + + + + + +Postel [Page 19] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + MAIL (MAIL) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more mailboxes. The + argument field contains a reverse-path. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). In some types of error + reporting messages (for example, undeliverable mail + notifications) the reverse-path may be null (see Example 7). + + This command clears the reverse-path buffer, the + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + RECIPIENT (RCPT) + + This command is used to identify an individual recipient of + the mail data; multiple recipients are specified by multiple + use of this command. + + The forward-path consists of an optional list of hosts and a + required destination mailbox. When the list of hosts is + present, it is a source route and indicates that the mail + must be relayed to the next host on the list. If the + receiver-SMTP does not implement the relay function it may + user the same reply it would for an unknown local user + (550). + + When mail is relayed, the relay host must remove itself from + the beginning forward-path and put itself at the beginning + of the reverse-path. When mail reaches its ultimate + destination (the forward-path contains only a destination + mailbox), the receiver-SMTP inserts it into the destination + mailbox in accordance with its host mail conventions. + + + + + +[Page 20] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + For example, mail received at relay host A with arguments + + FROM: + TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA> + + will be relayed on to host B with arguments + + FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA> + TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>. + + This command causes its forward-path argument to be appended + to the forward-path buffer. + + DATA (DATA) + + The receiver treats the lines following the command as mail + data from the sender. This command causes the mail data + from this command to be appended to the mail data buffer. + The mail data may contain any of the 128 ASCII character + codes. + + The mail data is terminated by a line containing only a + period, that is the character sequence "." (see + Section 4.5.2 on Transparency). This is the end of mail + data indication. + + The end of mail data indication requires that the receiver + must now process the stored mail transaction information. + This processing consumes the information in the reverse-path + buffer, the forward-path buffer, and the mail data buffer, + and on the completion of this command these buffers are + cleared. If the processing is successful the receiver must + send an OK reply. If the processing fails completely the + receiver must send a failure reply. + + When the receiver-SMTP accepts a message either for relaying + or for final delivery it inserts at the beginning of the + mail data a time stamp line. The time stamp line indicates + the identity of the host that sent the message, and the + identity of the host that received the message (and is + inserting this time stamp), and the date and time the + message was received. Relayed messages will have multiple + time stamp lines. + + When the receiver-SMTP makes the "final delivery" of a + message it inserts at the beginning of the mail data a + + + +Postel [Page 21] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + return path line. The return path line preserves the + information in the from the MAIL command. + Here, final delivery means the message leaves the SMTP + world. Normally, this would mean it has been delivered to + the destination user, but in some cases it may be further + processed and transmitted by another mail system. + + It is possible for the mailbox in the return path be + different from the actual sender's mailbox, for example, + if error responses are to be delivered a special error + handling mailbox rather than the message senders. + + The preceding two paragraphs imply that the final mail data + will begin with a return path line, followed by one or more + time stamp lines. These lines will be followed by the mail + data header and body [2]. See Example 8. + + Special mention is needed of the response and further action + required when the processing following the end of mail data + indication is partially successful. This could arise if + after accepting several recipients and the mail data, the + receiver-SMTP finds that the mail data can be successfully + delivered to some of the recipients, but it cannot be to + others (for example, due to mailbox space allocation + problems). In such a situation, the response to the DATA + command must be an OK reply. But, the receiver-SMTP must + compose and send an "undeliverable mail" notification + message to the originator of the message. Either a single + notification which lists all of the recipients that failed + to get the message, or separate notification messages must + be sent for each failed recipient (see Example 7). All + undeliverable mail notification messages are sent using the + MAIL command (even if they result from processing a SEND, + SOML, or SAML command). + + + + + + + + + + + + + + + +[Page 22] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example of Return Path and Received Time Stamps + + Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA> + Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST + Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST + Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST + Date: 27 Oct 81 15:01:01 PST + From: JOE@ABC.ARPA + Subject: Improved Mailing System Installed + To: SAM@JKL.ARPA + + This is to inform you that ... + + Example 8 + + ------------------------------------------------------------- + + SEND (SEND) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more terminals. The + argument field contains a reverse-path. This command is + successful if the message is delivered to a terminal. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). + + This command clears the reverse-path buffer, the + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + SEND OR MAIL (SOML) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more terminals or + + + +Postel [Page 23] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + mailboxes. For each recipient the mail data is delivered to + the recipient's terminal if the recipient is active on the + host (and accepting terminal messages), otherwise to the + recipient's mailbox. The argument field contains a + reverse-path. This command is successful if the message is + delivered to a terminal or the mailbox. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). + + This command clears the reverse-path buffer, the + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + SEND AND MAIL (SAML) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more terminals and + mailboxes. For each recipient the mail data is delivered to + the recipient's terminal if the recipient is active on the + host (and accepting terminal messages), and for all + recipients to the recipient's mailbox. The argument field + contains a reverse-path. This command is successful if the + message is delivered to the mailbox. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). + + This command clears the reverse-path buffer, the + + + +[Page 24] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + RESET (RSET) + + This command specifies that the current mail transaction is + to be aborted. Any stored sender, recipients, and mail data + must be discarded, and all buffers and state tables cleared. + The receiver must send an OK reply. + + VERIFY (VRFY) + + This command asks the receiver to confirm that the argument + identifies a user. If it is a user name, the full name of + the user (if known) and the fully specified mailbox are + returned. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + EXPAND (EXPN) + + This command asks the receiver to confirm that the argument + identifies a mailing list, and if so, to return the + membership of that list. The full name of the users (if + known) and the fully specified mailboxes are returned in a + multiline reply. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + HELP (HELP) + + This command causes the receiver to send helpful information + to the sender of the HELP command. The command may take an + argument (e.g., any command name) and return more specific + information as a response. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + + + + + + + +Postel [Page 25] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + NOOP (NOOP) + + This command does not affect any parameters or previously + entered commands. It specifies no action other than that + the receiver send an OK reply. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + QUIT (QUIT) + + This command specifies that the receiver must send an OK + reply, and then close the transmission channel. + + The receiver should not close the transmission channel until + it receives and replies to a QUIT command (even if there was + an error). The sender should not close the transmission + channel until it send a QUIT command and receives the reply + (even if there was an error response to a previous command). + If the connection is closed prematurely the receiver should + act as if a RSET command had been received (canceling any + pending transaction, but not undoing any previously + completed transaction), the sender should act as if the + command or transaction in progress had received a temporary + error (4xx). + + TURN (TURN) + + This command specifies that the receiver must either (1) + send an OK reply and then take on the role of the + sender-SMTP, or (2) send a refusal reply and retain the role + of the receiver-SMTP. + + If program-A is currently the sender-SMTP and it sends the + TURN command and receives an OK reply (250) then program-A + becomes the receiver-SMTP. Program-A is then in the initial + state as if the transmission channel just opened, and it + then sends the 220 service ready greeting. + + If program-B is currently the receiver-SMTP and it receives + the TURN command and sends an OK reply (250) then program-B + becomes the sender-SMTP. Program-B is then in the initial + state as if the transmission channel just opened, and it + then expects to receive the 220 service ready greeting. + + To refuse to change roles the receiver sends the 502 reply. + + + +[Page 26] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + There are restrictions on the order in which these command may + be used. + + The first command in a session must be the HELO command. + The HELO command may be used later in a session as well. If + the HELO command argument is not acceptable a 501 failure + reply must be returned and the receiver-SMTP must stay in + the same state. + + The NOOP, HELP, EXPN, and VRFY commands can be used at any + time during a session. + + The MAIL, SEND, SOML, or SAML commands begin a mail + transaction. Once started a mail transaction consists of + one of the transaction beginning commands, one or more RCPT + commands, and a DATA command, in that order. A mail + transaction may be aborted by the RSET command. There may + be zero or more transactions in a session. + + If the transaction beginning command argument is not + acceptable a 501 failure reply must be returned and the + receiver-SMTP must stay in the same state. If the commands + in a transaction are out of order a 503 failure reply must + be returned and the receiver-SMTP must stay in the same + state. + + The last command in a session must be the QUIT command. The + QUIT command can not be used at any other time in a session. + + 4.1.2. COMMAND SYNTAX + + The commands consist of a command code followed by an argument + field. Command codes are four alphabetic characters. Upper + and lower case alphabetic characters are to be treated + identically. Thus, any of the following may represent the mail + command: + + MAIL Mail mail MaIl mAIl + + This also applies to any symbols representing parameter values, + such as "TO" or "to" for the forward-path. Command codes and + the argument fields are separated by one or more spaces. + However, within the reverse-path and forward-path arguments + case is important. In particular, in some hosts the user + "smith" is different from the user "Smith". + + + + +Postel [Page 27] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The argument field consists of a variable length character + string ending with the character sequence . The receiver + is to take no action until this sequence is received. + + Square brackets denote an optional argument field. If the + option is not taken, the appropriate default is implied. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 28] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + The following are the SMTP commands: + + HELO + + MAIL FROM: + + RCPT TO: + + DATA + + RSET + + SEND FROM: + + SOML FROM: + + SAML FROM: + + VRFY + + EXPN + + HELP [ ] + + NOOP + + QUIT + + TURN + + + + + + + + + + + + + + + + + + + + +Postel [Page 29] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The syntax of the above argument fields (using BNF notation + where applicable) is given below. The "..." notation indicates + that a field may be repeated one or more times. + + ::= + + ::= + + ::= "<" [ ":" ] ">" + + ::= | "," + + ::= "@" + + ::= | "." + + ::= | "#" | "[" "]" + + ::= "@" + + ::= | + + ::= + + ::= | + + ::= | + + ::= | | "-" + + ::= | "." + + ::= | + + ::= """ """ + + ::= "\" | "\" | | + + ::= | "\" + + ::= "." "." "." + + ::= | + + ::= + + + + +[Page 30] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ::= the carriage return character (ASCII code 13) + + ::= the line feed character (ASCII code 10) + + ::= the space character (ASCII code 32) + + ::= one, two, or three digits representing a decimal + integer value in the range 0 through 255 + + ::= any one of the 52 alphabetic characters A through Z + in upper case and a through z in lower case + + ::= any one of the 128 ASCII characters, but not any + or + + ::= any one of the ten digits 0 through 9 + + ::= any one of the 128 ASCII characters except , + , quote ("), or backslash (\) + + ::= any one of the 128 ASCII characters (no exceptions) + + ::= "<" | ">" | "(" | ")" | "[" | "]" | "\" | "." + | "," | ";" | ":" | "@" """ | the control + characters (ASCII codes 0 through 31 inclusive and + 127) + + Note that the backslash, "\", is a quote character, which is + used to indicate that the next character is to be used + literally (instead of its normal interpretation). For example, + "Joe\,Smith" could be used to indicate a single nine character + user field with comma being the fourth character of the field. + + Hosts are generally known by names which are translated to + addresses in each host. Note that the name elements of domains + are the official names -- no use of nicknames or aliases is + allowed. + + Sometimes a host is not known to the translation function and + communication is blocked. To bypass this barrier two numeric + forms are also allowed for host "names". One form is a decimal + integer prefixed by a pound sign, "#", which indicates the + number is the address of the host. Another form is four small + decimal integers separated by dots and enclosed by brackets, + e.g., "[123.255.37.2]", which indicates a 32-bit ARPA Internet + Address in four 8-bit fields. + + + +Postel [Page 31] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The time stamp line and the return path line are formally + defined as follows: + + ::= "Return-Path:" + + ::= "Received:" + + ::= ";" + + + ::= "FROM" + + ::= "BY" + + ::= [] [] [] [] + + ::= "VIA" + + ::= "WITH" + + ::= "ID" + + ::= "FOR" + + ::= The standard names for links are registered with + the Network Information Center. + + ::= The standard names for protocols are + registered with the Network Information Center. + + ::=
::= the one or two decimal integer day of the month in + the range 1 to 31. + + ::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" | + "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC" + + ::= the two decimal integer year of the century in the + range 00 to 99. + + + + + +[Page 32] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ::= the two decimal integer hour of the day in the + range 00 to 24. + + ::= the two decimal integer minute of the hour in the + range 00 to 59. + + ::= the two decimal integer second of the minute in the + range 00 to 59. + + ::= "UT" for Universal Time (the default) or other + time zone designator (as in [2]). + + + + ------------------------------------------------------------- + + Return Path Example + + Return-Path: <@CHARLIE.ARPA,@BAKER.ARPA:JOE@ABLE.ARPA> + + Example 9 + + ------------------------------------------------------------- + + ------------------------------------------------------------- + + Time Stamp Line Example + + Received: FROM ABC.ARPA BY XYZ.ARPA ; 22 OCT 81 09:23:59 PDT + + Received: from ABC.ARPA by XYZ.ARPA via TELENET with X25 + id M12345 for Smith@PDQ.ARPA ; 22 OCT 81 09:23:59 PDT + + Example 10 + + ------------------------------------------------------------- + + + + + + + + + + + + + +Postel [Page 33] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 4.2. SMTP REPLIES + + Replies to SMTP commands are devised to ensure the synchronization + of requests and actions in the process of mail transfer, and to + guarantee that the sender-SMTP always knows the state of the + receiver-SMTP. Every command must generate exactly one reply. + + The details of the command-reply sequence are made explicit in + Section 5.3 on Sequencing and Section 5.4 State Diagrams. + + An SMTP reply consists of a three digit number (transmitted as + three alphanumeric characters) followed by some text. The number + is intended for use by automata to determine what state to enter + next; the text is meant for the human user. It is intended that + the three digits contain enough encoded information that the + sender-SMTP need not examine the text and may either discard it or + pass it on to the user, as appropriate. In particular, the text + may be receiver-dependent and context dependent, so there are + likely to be varying texts for each reply code. A discussion of + the theory of reply codes is given in Appendix E. Formally, a + reply is defined to be the sequence: a three-digit code, , + one line of text, and , or a multiline reply (as defined in + Appendix E). Only the EXPN and HELP commands are expected to + result in multiline replies in normal circumstances, however + multiline replies are allowed for any command. + + + + + + + + + + + + + + + + + + + + + + + + +[Page 34] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.2.1. REPLY CODES BY FUNCTION GROUPS + + 500 Syntax error, command unrecognized + [This may include errors such as command line too long] + 501 Syntax error in parameters or arguments + 502 Command not implemented + 503 Bad sequence of commands + 504 Command parameter not implemented + + 211 System status, or system help reply + 214 Help message + [Information on how to use the receiver or the meaning of a + particular non-standard command; this reply is useful only + to the human user] + + 220 Service ready + 221 Service closing transmission channel + 421 Service not available, + closing transmission channel + [This may be a reply to any command if the service knows it + must shut down] + + 250 Requested mail action okay, completed + 251 User not local; will forward to + 450 Requested mail action not taken: mailbox unavailable + [E.g., mailbox busy] + 550 Requested action not taken: mailbox unavailable + [E.g., mailbox not found, no access] + 451 Requested action aborted: error in processing + 551 User not local; please try + 452 Requested action not taken: insufficient system storage + 552 Requested mail action aborted: exceeded storage allocation + 553 Requested action not taken: mailbox name not allowed + [E.g., mailbox syntax incorrect] + 354 Start mail input; end with . + 554 Transaction failed + + + + + + + + + + + + + +Postel [Page 35] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 4.2.2. NUMERIC ORDER LIST OF REPLY CODES + + 211 System status, or system help reply + 214 Help message + [Information on how to use the receiver or the meaning of a + particular non-standard command; this reply is useful only + to the human user] + 220 Service ready + 221 Service closing transmission channel + 250 Requested mail action okay, completed + 251 User not local; will forward to + + 354 Start mail input; end with . + + 421 Service not available, + closing transmission channel + [This may be a reply to any command if the service knows it + must shut down] + 450 Requested mail action not taken: mailbox unavailable + [E.g., mailbox busy] + 451 Requested action aborted: local error in processing + 452 Requested action not taken: insufficient system storage + + 500 Syntax error, command unrecognized + [This may include errors such as command line too long] + 501 Syntax error in parameters or arguments + 502 Command not implemented + 503 Bad sequence of commands + 504 Command parameter not implemented + 550 Requested action not taken: mailbox unavailable + [E.g., mailbox not found, no access] + 551 User not local; please try + 552 Requested mail action aborted: exceeded storage allocation + 553 Requested action not taken: mailbox name not allowed + [E.g., mailbox syntax incorrect] + 554 Transaction failed + + + + + + + + + + + + + +[Page 36] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.3. SEQUENCING OF COMMANDS AND REPLIES + + The communication between the sender and receiver is intended to + be an alternating dialogue, controlled by the sender. As such, + the sender issues a command and the receiver responds with a + reply. The sender must wait for this response before sending + further commands. + + One important reply is the connection greeting. Normally, a + receiver will send a 220 "Service ready" reply when the connection + is completed. The sender should wait for this greeting message + before sending any commands. + + Note: all the greeting type replies have the official name of + the server host as the first word following the reply code. + + For example, + + 220 USC-ISIF.ARPA Service ready + + The table below lists alternative success and failure replies for + each command. These must be strictly adhered to; a receiver may + substitute text in the replies, but the meaning and action implied + by the code numbers and by the specific command reply sequence + cannot be altered. + + COMMAND-REPLY SEQUENCES + + Each command is listed with its possible replies. The prefixes + used before the possible replies are "P" for preliminary (not + used in SMTP), "I" for intermediate, "S" for success, "F" for + failure, and "E" for error. The 421 reply (service not + available, closing transmission channel) may be given to any + command if the SMTP-receiver knows it must shut down. This + listing forms the basis for the State Diagrams in Section 4.4. + + CONNECTION ESTABLISHMENT + S: 220 + F: 421 + HELO + S: 250 + E: 500, 501, 504, 421 + MAIL + S: 250 + F: 552, 451, 452 + E: 500, 501, 421 + + + +Postel [Page 37] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + RCPT + S: 250, 251 + F: 550, 551, 552, 553, 450, 451, 452 + E: 500, 501, 503, 421 + DATA + I: 354 -> data -> S: 250 + F: 552, 554, 451, 452 + F: 451, 554 + E: 500, 501, 503, 421 + RSET + S: 250 + E: 500, 501, 504, 421 + SEND + S: 250 + F: 552, 451, 452 + E: 500, 501, 502, 421 + SOML + S: 250 + F: 552, 451, 452 + E: 500, 501, 502, 421 + SAML + S: 250 + F: 552, 451, 452 + E: 500, 501, 502, 421 + VRFY + S: 250, 251 + F: 550, 551, 553 + E: 500, 501, 502, 504, 421 + EXPN + S: 250 + F: 550 + E: 500, 501, 502, 504, 421 + HELP + S: 211, 214 + E: 500, 501, 502, 504, 421 + NOOP + S: 250 + E: 500, 421 + QUIT + S: 221 + E: 500 + TURN + S: 250 + F: 502 + E: 500, 503 + + + + +[Page 38] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.4. STATE DIAGRAMS + + Following are state diagrams for a simple-minded SMTP + implementation. Only the first digit of the reply codes is used. + There is one state diagram for each group of SMTP commands. The + command groupings were determined by constructing a model for each + command and then collecting together the commands with + structurally identical models. + + For each command there are three possible outcomes: "success" + (S), "failure" (F), and "error" (E). In the state diagrams below + we use the symbol B for "begin", and the symbol W for "wait for + reply". + + First, the diagram that represents most of the SMTP commands: + + + 1,3 +---+ + ----------->| E | + | +---+ + | + +---+ cmd +---+ 2 +---+ + | B |---------->| W |---------->| S | + +---+ +---+ +---+ + | + | 4,5 +---+ + ----------->| F | + +---+ + + + This diagram models the commands: + + HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP, + NOOP, QUIT, TURN. + + + + + + + + + + + + + + + +Postel [Page 39] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + A more complex diagram models the DATA command: + + + +---+ DATA +---+ 1,2 +---+ + | B |---------->| W |-------------------->| E | + +---+ +---+ ------------>+---+ + 3| |4,5 | + | | | + -------------- ----- | + | | | +---+ + | ---------- -------->| S | + | | | | +---+ + | | ------------ + | | | | + V 1,3| |2 | + +---+ data +---+ --------------->+---+ + | |---------->| W | | F | + +---+ +---+-------------------->+---+ + 4,5 + + + Note that the "data" here is a series of lines sent from the + sender to the receiver with no response expected until the last + line is sent. + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 40] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.5. DETAILS + + 4.5.1. MINIMUM IMPLEMENTATION + + In order to make SMTP workable, the following minimum + implementation is required for all receivers: + + COMMANDS -- HELO + MAIL + RCPT + DATA + RSET + NOOP + QUIT + + 4.5.2. TRANSPARENCY + + Without some provision for data transparency the character + sequence "." ends the mail text and cannot be sent + by the user. In general, users are not aware of such + "forbidden" sequences. To allow all user composed text to be + transmitted transparently the following procedures are used. + + 1. Before sending a line of mail text the sender-SMTP checks + the first character of the line. If it is a period, one + additional period is inserted at the beginning of the line. + + 2. When a line of mail text is received by the receiver-SMTP + it checks the line. If the line is composed of a single + period it is the end of mail. If the first character is a + period and there are other characters on the line, the first + character is deleted. + + The mail data may contain any of the 128 ASCII characters. All + characters are to be delivered to the recipient's mailbox + including format effectors and other control characters. If + the transmission channel provides an 8-bit byte (octets) data + stream, the 7-bit ASCII codes are transmitted right justified + in the octets with the high order bits cleared to zero. + + In some systems it may be necessary to transform the data as + it is received and stored. This may be necessary for hosts + that use a different character set than ASCII as their local + character set, or that store data in records rather than + + + + + +Postel [Page 41] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + strings. If such transforms are necessary, they must be + reversible -- especially if such transforms are applied to + mail being relayed. + + 4.5.3. SIZES + + There are several objects that have required minimum maximum + sizes. That is, every implementation must be able to receive + objects of at least these sizes, but must not send objects + larger than these sizes. + + + **************************************************** + * * + * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION * + * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH * + * OF THESE OBJECTS SHOULD BE USED. * + * * + **************************************************** + + user + + The maximum total length of a user name is 64 characters. + + domain + + The maximum total length of a domain name or number is 64 + characters. + + path + + The maximum total length of a reverse-path or + forward-path is 256 characters (including the punctuation + and element separators). + + command line + + The maximum total length of a command line including the + command word and the is 512 characters. + + reply line + + The maximum total length of a reply line including the + reply code and the is 512 characters. + + + + + +[Page 42] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + text line + + The maximum total length of a text line including the + is 1000 characters (but not counting the leading + dot duplicated for transparency). + + recipients buffer + + The maximum total number of recipients that must be + buffered is 100 recipients. + + + **************************************************** + * * + * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION * + * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH * + * OF THESE OBJECTS SHOULD BE USED. * + * * + **************************************************** + + Errors due to exceeding these limits may be reported by using + the reply codes, for example: + + 500 Line too long. + + 501 Path too long + + 552 Too many recipients. + + 552 Too much mail data. + + + + + + + + + + + + + + + + + + + +Postel [Page 43] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +APPENDIX A + + TCP Transport service + + The Transmission Control Protocol [3] is used in the ARPA + Internet, and in any network following the US DoD standards for + internetwork protocols. + + Connection Establishment + + The SMTP transmission channel is a TCP connection established + between the sender process port U and the receiver process port + L. This single full duplex connection is used as the + transmission channel. This protocol is assigned the service + port 25 (31 octal), that is L=25. + + Data Transfer + + The TCP connection supports the transmission of 8-bit bytes. + The SMTP data is 7-bit ASCII characters. Each character is + transmitted as an 8-bit byte with the high-order bit cleared to + zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 44] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +APPENDIX B + + NCP Transport service + + The ARPANET Host-to-Host Protocol [4] (implemented by the Network + Control Program) may be used in the ARPANET. + + Connection Establishment + + The SMTP transmission channel is established via NCP between + the sender process socket U and receiver process socket L. The + Initial Connection Protocol [5] is followed resulting in a pair + of simplex connections. This pair of connections is used as + the transmission channel. This protocol is assigned the + contact socket 25 (31 octal), that is L=25. + + Data Transfer + + The NCP data connections are established in 8-bit byte mode. + The SMTP data is 7-bit ASCII characters. Each character is + transmitted as an 8-bit byte with the high-order bit cleared to + zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 45] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +APPENDIX C + + NITS + + The Network Independent Transport Service [6] may be used. + + Connection Establishment + + The SMTP transmission channel is established via NITS between + the sender process and receiver process. The sender process + executes the CONNECT primitive, and the waiting receiver + process executes the ACCEPT primitive. + + Data Transfer + + The NITS connection supports the transmission of 8-bit bytes. + The SMTP data is 7-bit ASCII characters. Each character is + transmitted as an 8-bit byte with the high-order bit cleared to + zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 46] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +APPENDIX D + + X.25 Transport service + + It may be possible to use the X.25 service [7] as provided by the + Public Data Networks directly, however, it is suggested that a + reliable end-to-end protocol such as TCP be used on top of X.25 + connections. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 47] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +APPENDIX E + + Theory of Reply Codes + + The three digits of the reply each have a special significance. + The first digit denotes whether the response is good, bad or + incomplete. An unsophisticated sender-SMTP will be able to + determine its next action (proceed as planned, redo, retrench, + etc.) by simply examining this first digit. A sender-SMTP that + wants to know approximately what kind of error occurred (e.g., + mail system error, command syntax error) may examine the second + digit, reserving the third digit for the finest gradation of + information. + + There are five values for the first digit of the reply code: + + 1yz Positive Preliminary reply + + The command has been accepted, but the requested action + is being held in abeyance, pending confirmation of the + information in this reply. The sender-SMTP should send + another command specifying whether to continue or abort + the action. + + [Note: SMTP does not have any commands that allow this + type of reply, and so does not have the continue or + abort commands.] + + 2yz Positive Completion reply + + The requested action has been successfully completed. A + new request may be initiated. + + 3yz Positive Intermediate reply + + The command has been accepted, but the requested action + is being held in abeyance, pending receipt of further + information. The sender-SMTP should send another command + specifying this information. This reply is used in + command sequence groups. + + 4yz Transient Negative Completion reply + + The command was not accepted and the requested action did + not occur. However, the error condition is temporary and + the action may be requested again. The sender should + + + +[Page 48] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + return to the beginning of the command sequence (if any). + It is difficult to assign a meaning to "transient" when + two different sites (receiver- and sender- SMTPs) must + agree on the interpretation. Each reply in this category + might have a different time value, but the sender-SMTP is + encouraged to try again. A rule of thumb to determine if + a reply fits into the 4yz or the 5yz category (see below) + is that replies are 4yz if they can be repeated without + any change in command form or in properties of the sender + or receiver. (E.g., the command is repeated identically + and the receiver does not put up a new implementation.) + + 5yz Permanent Negative Completion reply + + The command was not accepted and the requested action did + not occur. The sender-SMTP is discouraged from repeating + the exact request (in the same sequence). Even some + "permanent" error conditions can be corrected, so the + human user may want to direct the sender-SMTP to + reinitiate the command sequence by direct action at some + point in the future (e.g., after the spelling has been + changed, or the user has altered the account status). + + The second digit encodes responses in specific categories: + + x0z Syntax -- These replies refer to syntax errors, + syntactically correct commands that don't fit any + functional category, and unimplemented or superfluous + commands. + + x1z Information -- These are replies to requests for + information, such as status or help. + + x2z Connections -- These are replies referring to the + transmission channel. + + x3z Unspecified as yet. + + x4z Unspecified as yet. + + x5z Mail system -- These replies indicate the status of + the receiver mail system vis-a-vis the requested + transfer or other mail system action. + + The third digit gives a finer gradation of meaning in each + category specified by the second digit. The list of replies + + + +Postel [Page 49] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + illustrates this. Each reply text is recommended rather than + mandatory, and may even change according to the command with + which it is associated. On the other hand, the reply codes + must strictly follow the specifications in this section. + Receiver implementations should not invent new codes for + slightly different situations from the ones described here, but + rather adapt codes already defined. + + For example, a command such as NOOP whose successful execution + does not offer the sender-SMTP any new information will return + a 250 reply. The response is 502 when the command requests an + unimplemented non-site-specific action. A refinement of that + is the 504 reply for a command that is implemented, but that + requests an unimplemented parameter. + + The reply text may be longer than a single line; in these cases + the complete text must be marked so the sender-SMTP knows when it + can stop reading the reply. This requires a special format to + indicate a multiple line reply. + + The format for multiline replies requires that every line, + except the last, begin with the reply code, followed + immediately by a hyphen, "-" (also known as minus), followed by + text. The last line will begin with the reply code, followed + immediately by , optionally some text, and . + + For example: + 123-First line + 123-Second line + 123-234 text beginning with numbers + 123 The last line + + In many cases the sender-SMTP then simply needs to search for + the reply code followed by at the beginning of a line, and + ignore all preceding lines. In a few cases, there is important + data for the sender in the reply "text". The sender will know + these cases from the current context. + + + + + + + + + + + + +[Page 50] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +APPENDIX F + + Scenarios + + This section presents complete scenarios of several types of SMTP + sessions. + + A Typical SMTP Transaction Scenario + + This SMTP example shows mail sent by Smith at host USC-ISIF, to + Jones, Green, and Brown at host BBN-UNIX. Here we assume that + host USC-ISIF contacts host BBN-UNIX directly. The mail is + accepted for Jones and Brown. Green does not have a mailbox at + host BBN-UNIX. + + ------------------------------------------------------------- + + R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIF.ARPA + R: 250 BBN-UNIX.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 550 No such user here + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 BBN-UNIX.ARPA Service closing transmission channel + + Scenario 1 + + ------------------------------------------------------------- + + + +Postel [Page 51] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Aborted SMTP Transaction Scenario + + ------------------------------------------------------------- + + R: 220 MIT-Multics.ARPA Simple Mail Transfer Service Ready + S: HELO ISI-VAXA.ARPA + R: 250 MIT-Multics.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 550 No such user here + + S: RSET + R: 250 OK + + S: QUIT + R: 221 MIT-Multics.ARPA Service closing transmission channel + + Scenario 2 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + +[Page 52] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Relayed Mail Scenario + + ------------------------------------------------------------- + + Step 1 -- Source Host to Relay Host + + R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-AI.ARPA + R: 250 USC-ISIE.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO:<@USC-ISIE.ARPA:Jones@BBN-VAX.ARPA> + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Date: 2 Nov 81 22:33:44 + S: From: John Q. Public + S: Subject: The Next Meeting of the Board + S: To: Jones@BBN-Vax.ARPA + S: + S: Bill: + S: The next meeting of the board of directors will be + S: on Tuesday. + S: John. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIE.ARPA Service closing transmission channel + + + + + + + + + + + + + + + + + +Postel [Page 53] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Step 2 -- Relay Host to Destination Host + + R: 220 BBN-VAX.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIE.ARPA + R: 250 BBN-VAX.ARPA + + S: MAIL FROM:<@USC-ISIE.ARPA:JQP@MIT-AI.ARPA> + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Received: from MIT-AI.ARPA by USC-ISIE.ARPA ; + 2 Nov 81 22:40:10 UT + S: Date: 2 Nov 81 22:33:44 + S: From: John Q. Public + S: Subject: The Next Meeting of the Board + S: To: Jones@BBN-Vax.ARPA + S: + S: Bill: + S: The next meeting of the board of directors will be + S: on Tuesday. + S: John. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIE.ARPA Service closing transmission channel + + Scenario 3 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + +[Page 54] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Verifying and Sending Scenario + + ------------------------------------------------------------- + + R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-MC.ARPA + R: 250 SU-SCORE.ARPA + + S: VRFY Crispin + R: 250 Mark Crispin + + S: SEND FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 SU-SCORE.ARPA Service closing transmission channel + + Scenario 4 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + +Postel [Page 55] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Sending and Mailing Scenarios + + First the user's name is verified, then an attempt is made to + send to the user's terminal. When that fails, the messages is + mailed to the user's mailbox. + + ------------------------------------------------------------- + + R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-MC.ARPA + R: 250 SU-SCORE.ARPA + + S: VRFY Crispin + R: 250 Mark Crispin + + S: SEND FROM: + R: 250 OK + + S: RCPT TO: + R: 450 User not active now + + S: RSET + R: 250 OK + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 SU-SCORE.ARPA Service closing transmission channel + + Scenario 5 + + ------------------------------------------------------------- + + + + + + +[Page 56] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Doing the preceding scenario more efficiently. + + ------------------------------------------------------------- + + R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-MC.ARPA + R: 250 SU-SCORE.ARPA + + S: VRFY Crispin + R: 250 Mark Crispin + + S: SOML FROM: + R: 250 OK + + S: RCPT TO: + R: 250 User not active now, so will do mail. + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 SU-SCORE.ARPA Service closing transmission channel + + Scenario 6 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + +Postel [Page 57] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Mailing List Scenario + + First each of two mailing lists are expanded in separate sessions + with different hosts. Then the message is sent to everyone that + appeared on either list (but no duplicates) via a relay host. + + ------------------------------------------------------------- + + Step 1 -- Expanding the First List + + R: 220 MIT-AI.ARPA Simple Mail Transfer Service Ready + S: HELO SU-SCORE.ARPA + R: 250 MIT-AI.ARPA + + S: EXPN Example-People + R: 250- + R: 250-Fred Fonebone + R: 250-Xenon Y. Zither + R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250- + R: 250 + + S: QUIT + R: 221 MIT-AI.ARPA Service closing transmission channel + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 58] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Step 2 -- Expanding the Second List + + R: 220 MIT-MC.ARPA Simple Mail Transfer Service Ready + S: HELO SU-SCORE.ARPA + R: 250 MIT-MC.ARPA + + S: EXPN Interested-Parties + R: 250-Al Calico + R: 250- + R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250- + R: 250 + + S: QUIT + R: 221 MIT-MC.ARPA Service closing transmission channel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 59] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Step 3 -- Mailing to All via a Relay Host + + R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready + S: HELO SU-SCORE.ARPA + R: 250 USC-ISIE.ARPA + + S: MAIL FROM: + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:ABC@MIT-MC.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:Fonebone@USC-ISIQA.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:XYZ@MIT-AI.ARPA> + R: 250 OK + S: RCPT + TO:<@USC-ISIE.ARPA,@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:joe@FOO-UNIX.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:xyz@BAR-UNIX.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:fred@BBN-UNIX.ARPA> + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIE.ARPA Service closing transmission channel + + Scenario 7 + + ------------------------------------------------------------- + + + + + + + + + + + + +[Page 60] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Forwarding Scenarios + + ------------------------------------------------------------- + + R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready + S: HELO LBL-UNIX.ARPA + R: 250 USC-ISIF.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 251 User not local; will forward to + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIF.ARPA Service closing transmission channel + + Scenario 8 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 61] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Step 1 -- Trying the Mailbox at the First Host + + R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready + S: HELO LBL-UNIX.ARPA + R: 250 USC-ISIF.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 251 User not local; will forward to + + S: RSET + R: 250 OK + + S: QUIT + R: 221 USC-ISIF.ARPA Service closing transmission channel + + Step 2 -- Delivering the Mail at the Second Host + + R: 220 USC-ISI.ARPA Simple Mail Transfer Service Ready + S: HELO LBL-UNIX.ARPA + R: 250 USC-ISI.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISI.ARPA Service closing transmission channel + + Scenario 9 + + ------------------------------------------------------------- + + + + +[Page 62] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Too Many Recipients Scenario + + ------------------------------------------------------------- + + R: 220 BERKELEY.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIF.ARPA + R: 250 BERKELEY.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 552 Recipient storage full, try again in another transaction + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 BERKELEY.ARPA Service closing transmission channel + + Scenario 10 + + ------------------------------------------------------------- + + Note that a real implementation must handle many recipients as + specified in Section 4.5.3. + + + +Postel [Page 63] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +GLOSSARY + + ASCII + + American Standard Code for Information Interchange [1]. + + command + + A request for a mail service action sent by the sender-SMTP to the + receiver-SMTP. + + domain + + The hierarchially structured global character string address of a + host computer in the mail system. + + end of mail data indication + + A special sequence of characters that indicates the end of the + mail data. In particular, the five characters carriage return, + line feed, period, carriage return, line feed, in that order. + + host + + A computer in the internetwork environment on which mailboxes or + SMTP processes reside. + + line + + A a sequence of ASCII characters ending with a . + + mail data + + A sequence of ASCII characters of arbitrary length, which conforms + to the standard set in the Standard for the Format of ARPA + Internet Text Messages (RFC 822 [2]). + + mailbox + + A character string (address) which identifies a user to whom mail + is to be sent. Mailbox normally consists of the host and user + specifications. The standard mailbox naming convention is defined + to be "user@domain". Additionally, the "container" in which mail + is stored. + + + + + +[Page 64] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + receiver-SMTP process + + A process which transfers mail in cooperation with a sender-SMTP + process. It waits for a connection to be established via the + transport service. It receives SMTP commands from the + sender-SMTP, sends replies, and performs the specified operations. + + reply + + A reply is an acknowledgment (positive or negative) sent from + receiver to sender via the transmission channel in response to a + command. The general form of a reply is a completion code + (including error codes) followed by a text string. The codes are + for use by programs and the text is usually intended for human + users. + + sender-SMTP process + + A process which transfers mail in cooperation with a receiver-SMTP + process. A local language may be used in the user interface + command/reply dialogue. The sender-SMTP initiates the transport + service connection. It initiates SMTP commands, receives replies, + and governs the transfer of mail. + + session + + The set of exchanges that occur while the transmission channel is + open. + + transaction + + The set of exchanges required for one message to be transmitted + for one or more recipients. + + transmission channel + + A full-duplex communication path between a sender-SMTP and a + receiver-SMTP for the exchange of commands, replies, and mail + text. + + transport service + + Any reliable stream-oriented data communication services. For + example, NCP, TCP, NITS. + + + + + +Postel [Page 65] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + user + + A human being (or a process on behalf of a human being) wishing to + obtain mail transfer service. In addition, a recipient of + computer mail. + + word + + A sequence of printing characters. + + + + The characters carriage return and line feed (in that order). + + + + The space character. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 66] Postel + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +REFERENCES + + [1] ASCII + + ASCII, "USA Code for Information Interchange", United States of + America Standards Institute, X3.4, 1968. Also in: Feinler, E. + and J. Postel, eds., "ARPANET Protocol Handbook", NIC 7104, for + the Defense Communications Agency by SRI International, Menlo + Park, California, Revised January 1978. + + [2] RFC 822 + + Crocker, D., "Standard for the Format of ARPA Internet Text + Messages," RFC 822, Department of Electrical Engineering, + University of Delaware, August 1982. + + [3] TCP + + Postel, J., ed., "Transmission Control Protocol - DARPA Internet + Program Protocol Specification", RFC 793, USC/Information Sciences + Institute, NTIS AD Number A111091, September 1981. Also in: + Feinler, E. and J. Postel, eds., "Internet Protocol Transition + Workbook", SRI International, Menlo Park, California, March 1982. + + [4] NCP + + McKenzie,A., "Host/Host Protocol for the ARPA Network", NIC 8246, + January 1972. Also in: Feinler, E. and J. Postel, eds., "ARPANET + Protocol Handbook", NIC 7104, for the Defense Communications + Agency by SRI International, Menlo Park, California, Revised + January 1978. + + [5] Initial Connection Protocol + + Postel, J., "Official Initial Connection Protocol", NIC 7101, + 11 June 1971. Also in: Feinler, E. and J. Postel, eds., "ARPANET + Protocol Handbook", NIC 7104, for the Defense Communications + Agency by SRI International, Menlo Park, California, Revised + January 1978. + + [6] NITS + + PSS/SG3, "A Network Independent Transport Service", Study Group 3, + The Post Office PSS Users Group, February 1980. Available from + the DCPU, National Physical Laboratory, Teddington, UK. + + + + +Postel [Page 67] + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + [7] X.25 + + CCITT, "Recommendation X.25 - Interface Between Data Terminal + Equipment (DTE) and Data Circuit-terminating Equipment (DCE) for + Terminals Operating in the Packet Mode on Public Data Networks," + CCITT Orange Book, Vol. VIII.2, International Telephone and + Telegraph Consultative Committee, Geneva, 1976. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 68] Postel + + + diff --git a/docs/rfc1945.htm b/docs/rfc1945.htm new file mode 100644 index 0000000..67c6988 --- /dev/null +++ b/docs/rfc1945.htm @@ -0,0 +1,3504 @@ + + + RFC 1945 + + + + + + + + + + + + + +

RFC 1945

+
+
+
+
+
+
+
+Network Working Group                                     T. Berners-Lee
+Request for Comments: 1945                                       MIT/LCS
+Category: Informational                                      R. Fielding
+                                                               UC Irvine
+                                                              H. Frystyk
+                                                                 MIT/LCS
+                                                                May 1996
+
+
+                Hypertext Transfer Protocol -- HTTP/1.0
+
+Status of This Memo
+
+   This memo provides information for the Internet community.  This memo
+   does not specify an Internet standard of any kind.  Distribution of
+   this memo is unlimited.
+
+IESG Note:
+
+   The IESG has concerns about this protocol, and expects this document
+   to be replaced relatively soon by a standards track document.
+
+Abstract
+
+   The Hypertext Transfer Protocol (HTTP) is an application-level
+   protocol with the lightness and speed necessary for distributed,
+   collaborative, hypermedia information systems. It is a generic,
+   stateless, object-oriented protocol which can be used for many tasks,
+   such as name servers and distributed object management systems,
+   through extension of its request methods (commands). A feature of
+   HTTP is the typing of data representation, allowing systems to be
+   built independently of the data being transferred.
+
+   HTTP has been in use by the World-Wide Web global information
+   initiative since 1990. This specification reflects common usage of
+   the protocol referred to as "HTTP/1.0".
+
+Table of Contents
+
+   1.  Introduction ..............................................  4
+       1.1  Purpose ..............................................  4
+       1.2  Terminology ..........................................  4
+       1.3  Overall Operation ....................................  6
+       1.4  HTTP and MIME ........................................  8
+   2.  Notational Conventions and Generic Grammar ................  8
+       2.1  Augmented BNF ........................................  8
+       2.2  Basic Rules .......................................... 10
+   3.  Protocol Parameters ....................................... 12
+
+
+
+Berners-Lee, et al           Informational                      [Page 1]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       3.1  HTTP Version ......................................... 12
+       3.2  Uniform Resource Identifiers ......................... 14
+            3.2.1  General Syntax ................................ 14
+            3.2.2  http URL ...................................... 15
+       3.3  Date/Time Formats .................................... 15
+       3.4  Character Sets ....................................... 17
+       3.5  Content Codings ...................................... 18
+       3.6  Media Types .......................................... 19
+            3.6.1  Canonicalization and Text Defaults ............ 19
+            3.6.2  Multipart Types ............................... 20
+       3.7  Product Tokens ....................................... 20
+   4.  HTTP Message .............................................. 21
+       4.1  Message Types ........................................ 21
+       4.2  Message Headers ...................................... 22
+       4.3  General Header Fields ................................ 23
+   5.  Request ................................................... 23
+       5.1  Request-Line ......................................... 23
+            5.1.1  Method ........................................ 24
+            5.1.2  Request-URI ................................... 24
+       5.2  Request Header Fields ................................ 25
+   6.  Response .................................................. 25
+       6.1  Status-Line .......................................... 26
+            6.1.1  Status Code and Reason Phrase ................. 26
+       6.2  Response Header Fields ............................... 28
+   7.  Entity .................................................... 28
+       7.1  Entity Header Fields ................................. 29
+       7.2  Entity Body .......................................... 29
+            7.2.1  Type .......................................... 29
+            7.2.2  Length ........................................ 30
+   8.  Method Definitions ........................................ 30
+       8.1  GET .................................................. 31
+       8.2  HEAD ................................................. 31
+       8.3  POST ................................................. 31
+   9.  Status Code Definitions ................................... 32
+       9.1  Informational 1xx .................................... 32
+       9.2  Successful 2xx ....................................... 32
+       9.3  Redirection 3xx ...................................... 34
+       9.4  Client Error 4xx ..................................... 35
+       9.5  Server Error 5xx ..................................... 37
+   10. Header Field Definitions .................................. 37
+       10.1  Allow ............................................... 38
+       10.2  Authorization ....................................... 38
+       10.3  Content-Encoding .................................... 39
+       10.4  Content-Length ...................................... 39
+       10.5  Content-Type ........................................ 40
+       10.6  Date ................................................ 40
+       10.7  Expires ............................................. 41
+       10.8  From ................................................ 42
+
+
+
+Berners-Lee, et al           Informational                      [Page 2]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       10.9  If-Modified-Since ................................... 42
+       10.10 Last-Modified ....................................... 43
+       10.11 Location ............................................ 44
+       10.12 Pragma .............................................. 44
+       10.13 Referer ............................................. 44
+       10.14 Server .............................................. 45
+       10.15 User-Agent .......................................... 46
+       10.16 WWW-Authenticate .................................... 46
+   11. Access Authentication ..................................... 47
+       11.1  Basic Authentication Scheme ......................... 48
+   12. Security Considerations ................................... 49
+       12.1  Authentication of Clients ........................... 49
+       12.2  Safe Methods ........................................ 49
+       12.3  Abuse of Server Log Information ..................... 50
+       12.4  Transfer of Sensitive Information ................... 50
+       12.5  Attacks Based On File and Path Names ................ 51
+   13. Acknowledgments ........................................... 51
+   14. References ................................................ 52
+   15. Authors' Addresses ........................................ 54
+   Appendix A.   Internet Media Type message/http ................ 55
+   Appendix B.   Tolerant Applications ........................... 55
+   Appendix C.   Relationship to MIME ............................ 56
+       C.1  Conversion to Canonical Form ......................... 56
+       C.2  Conversion of Date Formats ........................... 57
+       C.3  Introduction of Content-Encoding ..................... 57
+       C.4  No Content-Transfer-Encoding ......................... 57
+       C.5  HTTP Header Fields in Multipart Body-Parts ........... 57
+   Appendix D.   Additional Features ............................. 57
+       D.1  Additional Request Methods ........................... 58
+            D.1.1  PUT ........................................... 58
+            D.1.2  DELETE ........................................ 58
+            D.1.3  LINK .......................................... 58
+            D.1.4  UNLINK ........................................ 58
+       D.2  Additional Header Field Definitions .................. 58
+            D.2.1  Accept ........................................ 58
+            D.2.2  Accept-Charset ................................ 59
+            D.2.3  Accept-Encoding ............................... 59
+            D.2.4  Accept-Language ............................... 59
+            D.2.5  Content-Language .............................. 59
+            D.2.6  Link .......................................... 59
+            D.2.7  MIME-Version .................................. 59
+            D.2.8  Retry-After ................................... 60
+            D.2.9  Title ......................................... 60
+            D.2.10 URI ........................................... 60
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                      [Page 3]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+1.  Introduction
+
+1.1  Purpose
+
+   The Hypertext Transfer Protocol (HTTP) is an application-level
+   protocol with the lightness and speed necessary for distributed,
+   collaborative, hypermedia information systems. HTTP has been in use
+   by the World-Wide Web global information initiative since 1990. This
+   specification reflects common usage of the protocol referred too as
+   "HTTP/1.0". This specification describes the features that seem to be
+   consistently implemented in most HTTP/1.0 clients and servers. The
+   specification is split into two sections. Those features of HTTP for
+   which implementations are usually consistent are described in the
+   main body of this document. Those features which have few or
+   inconsistent implementations are listed in Appendix D.
+
+   Practical information systems require more functionality than simple
+   retrieval, including search, front-end update, and annotation. HTTP
+   allows an open-ended set of methods to be used to indicate the
+   purpose of a request. It builds on the discipline of reference
+   provided by the Uniform Resource Identifier (URI) [2], as a location
+   (URL) [4] or name (URN) [16], for indicating the resource on which a
+   method is to be applied. Messages are passed in a format similar to
+   that used by Internet Mail [7] and the Multipurpose Internet Mail
+   Extensions (MIME) [5].
+
+   HTTP is also used as a generic protocol for communication between
+   user agents and proxies/gateways to other Internet protocols, such as
+   SMTP [12], NNTP [11], FTP [14], Gopher [1], and WAIS [8], allowing
+   basic hypermedia access to resources available from diverse
+   applications and simplifying the implementation of user agents.
+
+1.2  Terminology
+
+   This specification uses a number of terms to refer to the roles
+   played by participants in, and objects of, the HTTP communication.
+
+   connection
+
+       A transport layer virtual circuit established between two
+       application programs for the purpose of communication.
+
+   message
+
+       The basic unit of HTTP communication, consisting of a structured
+       sequence of octets matching the syntax defined in Section 4 and
+       transmitted via the connection.
+
+
+
+
+Berners-Lee, et al           Informational                      [Page 4]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   request
+
+       An HTTP request message (as defined in Section 5).
+
+   response
+
+       An HTTP response message (as defined in Section 6).
+
+   resource
+
+       A network data object or service which can be identified by a
+       URI (Section 3.2).
+
+   entity
+
+       A particular representation or rendition of a data resource, or
+       reply from a service resource, that may be enclosed within a
+       request or response message. An entity consists of
+       metainformation in the form of entity headers and content in the
+       form of an entity body.
+
+   client
+
+       An application program that establishes connections for the
+       purpose of sending requests.
+
+   user agent
+
+       The client which initiates a request. These are often browsers,
+       editors, spiders (web-traversing robots), or other end user
+       tools.
+
+   server
+
+       An application program that accepts connections in order to
+       service requests by sending back responses.
+
+   origin server
+
+       The server on which a given resource resides or is to be created.
+
+   proxy
+
+       An intermediary program which acts as both a server and a client
+       for the purpose of making requests on behalf of other clients.
+       Requests are serviced internally or by passing them, with
+       possible translation, on to other servers. A proxy must
+       interpret and, if necessary, rewrite a request message before
+
+
+
+Berners-Lee, et al           Informational                      [Page 5]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       forwarding it. Proxies are often used as client-side portals
+       through network firewalls and as helper applications for
+       handling requests via protocols not implemented by the user
+       agent.
+
+   gateway
+
+       A server which acts as an intermediary for some other server.
+       Unlike a proxy, a gateway receives requests as if it were the
+       origin server for the requested resource; the requesting client
+       may not be aware that it is communicating with a gateway.
+       Gateways are often used as server-side portals through network
+       firewalls and as protocol translators for access to resources
+       stored on non-HTTP systems.
+
+   tunnel
+
+       A tunnel is an intermediary program which is acting as a blind
+       relay between two connections. Once active, a tunnel is not
+       considered a party to the HTTP communication, though the tunnel
+       may have been initiated by an HTTP request. The tunnel ceases to
+       exist when both ends of the relayed connections are closed.
+       Tunnels are used when a portal is necessary and the intermediary
+       cannot, or should not, interpret the relayed communication.
+
+   cache
+
+       A program's local store of response messages and the subsystem
+       that controls its message storage, retrieval, and deletion. A
+       cache stores cachable responses in order to reduce the response
+       time and network bandwidth consumption on future, equivalent
+       requests. Any client or server may include a cache, though a
+       cache cannot be used by a server while it is acting as a tunnel.
+
+   Any given program may be capable of being both a client and a server;
+   our use of these terms refers only to the role being performed by the
+   program for a particular connection, rather than to the program's
+   capabilities in general. Likewise, any server may act as an origin
+   server, proxy, gateway, or tunnel, switching behavior based on the
+   nature of each request.
+
+1.3  Overall Operation
+
+   The HTTP protocol is based on a request/response paradigm. A client
+   establishes a connection with a server and sends a request to the
+   server in the form of a request method, URI, and protocol version,
+   followed by a MIME-like message containing request modifiers, client
+   information, and possible body content. The server responds with a
+
+
+
+Berners-Lee, et al           Informational                      [Page 6]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   status line, including the message's protocol version and a success
+   or error code, followed by a MIME-like message containing server
+   information, entity metainformation, and possible body content.
+
+   Most HTTP communication is initiated by a user agent and consists of
+   a request to be applied to a resource on some origin server. In the
+   simplest case, this may be accomplished via a single connection (v)
+   between the user agent (UA) and the origin server (O).
+
+          request chain ------------------------>
+       UA -------------------v------------------- O
+          <----------------------- response chain
+
+   A more complicated situation occurs when one or more intermediaries
+   are present in the request/response chain. There are three common
+   forms of intermediary: proxy, gateway, and tunnel. A proxy is a
+   forwarding agent, receiving requests for a URI in its absolute form,
+   rewriting all or parts of the message, and forwarding the reformatted
+   request toward the server identified by the URI. A gateway is a
+   receiving agent, acting as a layer above some other server(s) and, if
+   necessary, translating the requests to the underlying server's
+   protocol. A tunnel acts as a relay point between two connections
+   without changing the messages; tunnels are used when the
+   communication needs to pass through an intermediary (such as a
+   firewall) even when the intermediary cannot understand the contents
+   of the messages.
+
+          request chain -------------------------------------->
+       UA -----v----- A -----v----- B -----v----- C -----v----- O
+          <------------------------------------- response chain
+
+   The figure above shows three intermediaries (A, B, and C) between the
+   user agent and origin server. A request or response message that
+   travels the whole chain must pass through four separate connections.
+   This distinction is important because some HTTP communication options
+   may apply only to the connection with the nearest, non-tunnel
+   neighbor, only to the end-points of the chain, or to all connections
+   along the chain. Although the diagram is linear, each participant may
+   be engaged in multiple, simultaneous communications. For example, B
+   may be receiving requests from many clients other than A, and/or
+   forwarding requests to servers other than C, at the same time that it
+   is handling A's request.
+
+   Any party to the communication which is not acting as a tunnel may
+   employ an internal cache for handling requests. The effect of a cache
+   is that the request/response chain is shortened if one of the
+   participants along the chain has a cached response applicable to that
+   request. The following illustrates the resulting chain if B has a
+
+
+
+Berners-Lee, et al           Informational                      [Page 7]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   cached copy of an earlier response from O (via C) for a request which
+   has not been cached by UA or A.
+
+          request chain ---------->
+       UA -----v----- A -----v----- B - - - - - - C - - - - - - O
+          <--------- response chain
+
+   Not all responses are cachable, and some requests may contain
+   modifiers which place special requirements on cache behavior. Some
+   HTTP/1.0 applications use heuristics to describe what is or is not a
+   "cachable" response, but these rules are not standardized.
+
+   On the Internet, HTTP communication generally takes place over TCP/IP
+   connections. The default port is TCP 80 [15], but other ports can be
+   used. This does not preclude HTTP from being implemented on top of
+   any other protocol on the Internet, or on other networks. HTTP only
+   presumes a reliable transport; any protocol that provides such
+   guarantees can be used, and the mapping of the HTTP/1.0 request and
+   response structures onto the transport data units of the protocol in
+   question is outside the scope of this specification.
+
+   Except for experimental applications, current practice requires that
+   the connection be established by the client prior to each request and
+   closed by the server after sending the response. Both clients and
+   servers should be aware that either party may close the connection
+   prematurely, due to user action, automated time-out, or program
+   failure, and should handle such closing in a predictable fashion. In
+   any case, the closing of the connection by either or both parties
+   always terminates the current request, regardless of its status.
+
+1.4  HTTP and MIME
+
+   HTTP/1.0 uses many of the constructs defined for MIME, as defined in
+   RFC 1521 [5]. Appendix C describes the ways in which the context of
+   HTTP allows for different use of Internet Media Types than is
+   typically found in Internet mail, and gives the rationale for those
+   differences.
+
+2.  Notational Conventions and Generic Grammar
+
+2.1  Augmented BNF
+
+   All of the mechanisms specified in this document are described in
+   both prose and an augmented Backus-Naur Form (BNF) similar to that
+   used by RFC 822 [7]. Implementors will need to be familiar with the
+   notation in order to understand this specification. The augmented BNF
+   includes the following constructs:
+
+
+
+
+Berners-Lee, et al           Informational                      [Page 8]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   name = definition
+
+       The name of a rule is simply the name itself (without any
+       enclosing "<" and ">") and is separated from its definition by
+       the equal character "=". Whitespace is only significant in that
+       indentation of continuation lines is used to indicate a rule
+       definition that spans more than one line. Certain basic rules
+       are in uppercase, such as SP, LWS, HT, CRLF, DIGIT, ALPHA, etc.
+       Angle brackets are used within definitions whenever their
+       presence will facilitate discerning the use of rule names.
+
+   "literal"
+
+       Quotation marks surround literal text. Unless stated otherwise,
+       the text is case-insensitive.
+
+   rule1 | rule2
+
+       Elements separated by a bar ("I") are alternatives,
+       e.g., "yes | no" will accept yes or no.
+
+   (rule1 rule2)
+
+       Elements enclosed in parentheses are treated as a single
+       element. Thus, "(elem (foo | bar) elem)" allows the token
+       sequences "elem foo elem" and "elem bar elem".
+
+   *rule
+
+       The character "*" preceding an element indicates repetition. The
+       full form is "<n>*<m>element" indicating at least <n> and at
+       most <m> occurrences of element. Default values are 0 and
+       infinity so that "*(element)" allows any number, including zero;
+       "1*element" requires at least one; and "1*2element" allows one
+       or two.
+
+   [rule]
+
+       Square brackets enclose optional elements; "[foo bar]" is
+       equivalent to "*1(foo bar)".
+
+   N rule
+
+       Specific repetition: "<n>(element)" is equivalent to
+       "<n>*<n>(element)"; that is, exactly <n> occurrences of
+       (element). Thus 2DIGIT is a 2-digit number, and 3ALPHA is a
+       string of three alphabetic characters.
+
+
+
+
+Berners-Lee, et al           Informational                      [Page 9]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   #rule
+
+       A construct "#" is defined, similar to "*", for defining lists
+       of elements. The full form is "<n>#<m>element" indicating at
+       least <n> and at most <m> elements, each separated by one or
+       more commas (",") and optional linear whitespace (LWS). This
+       makes the usual form of lists very easy; a rule such as
+       "( *LWS element *( *LWS "," *LWS element ))" can be shown as
+       "1#element". Wherever this construct is used, null elements are
+       allowed, but do not contribute to the count of elements present.
+       That is, "(element), , (element)" is permitted, but counts as
+       only two elements. Therefore, where at least one element is
+       required, at least one non-null element must be present. Default
+       values are 0 and infinity so that "#(element)" allows any
+       number, including zero; "1#element" requires at least one; and
+       "1#2element" allows one or two.
+
+   ; comment
+
+       A semi-colon, set off some distance to the right of rule text,
+       starts a comment that continues to the end of line. This is a
+       simple way of including useful notes in parallel with the
+       specifications.
+
+   implied *LWS
+
+       The grammar described by this specification is word-based.
+       Except where noted otherwise, linear whitespace (LWS) can be
+       included between any two adjacent words (token or
+       quoted-string), and between adjacent tokens and delimiters
+       (tspecials), without changing the interpretation of a field. At
+       least one delimiter (tspecials) must exist between any two
+       tokens, since they would otherwise be interpreted as a single
+       token. However, applications should attempt to follow "common
+       form" when generating HTTP constructs, since there exist some
+       implementations that fail to accept anything beyond the common
+       forms.
+
+2.2  Basic Rules
+
+   The following rules are used throughout this specification to
+   describe basic parsing constructs. The US-ASCII coded character set
+   is defined by [17].
+
+       OCTET          = <any 8-bit sequence of data>
+       CHAR           = <any US-ASCII character (octets 0 - 127)>
+       UPALPHA        = <any US-ASCII uppercase letter "A".."Z">
+       LOALPHA        = <any US-ASCII lowercase letter "a".."z">
+
+
+
+Berners-Lee, et al           Informational                     [Page 10]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       ALPHA          = UPALPHA | LOALPHA
+       DIGIT          = <any US-ASCII digit "0".."9">
+       CTL            = <any US-ASCII control character
+                        (octets 0 - 31) and DEL (127)>
+       CR             = <US-ASCII CR, carriage return (13)>
+       LF             = <US-ASCII LF, linefeed (10)>
+       SP             = <US-ASCII SP, space (32)>
+       HT             = <US-ASCII HT, horizontal-tab (9)>
+       <">            = <US-ASCII double-quote mark (34)>
+
+   HTTP/1.0 defines the octet sequence CR LF as the end-of-line marker
+   for all protocol elements except the Entity-Body (see Appendix B for
+   tolerant applications). The end-of-line marker within an Entity-Body
+   is defined by its associated media type, as described in Section 3.6.
+
+       CRLF           = CR LF
+
+   HTTP/1.0 headers may be folded onto multiple lines if each
+   continuation line begins with a space or horizontal tab. All linear
+   whitespace, including folding, has the same semantics as SP.
+
+       LWS            = [CRLF] 1*( SP | HT )
+
+   However, folding of header lines is not expected by some
+   applications, and should not be generated by HTTP/1.0 applications.
+
+   The TEXT rule is only used for descriptive field contents and values
+   that are not intended to be interpreted by the message parser. Words
+   of *TEXT may contain octets from character sets other than US-ASCII.
+
+       TEXT           = <any OCTET except CTLs,
+                        but including LWS>
+
+   Recipients of header field TEXT containing octets outside the US-
+   ASCII character set may assume that they represent ISO-8859-1
+   characters.
+
+   Hexadecimal numeric characters are used in several protocol elements.
+
+       HEX            = "A" | "B" | "C" | "D" | "E" | "F"
+                      | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
+
+   Many HTTP/1.0 header field values consist of words separated by LWS
+   or special characters. These special characters must be in a quoted
+   string to be used within a parameter value.
+
+       word           = token | quoted-string
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 11]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       token          = 1*<any CHAR except CTLs or tspecials>
+
+       tspecials      = "(" | ")" | "<" | ">" | "@"
+                      | "," | ";" | ":" | "\" | <">
+                      | "/" | "[" | "]" | "?" | "="
+                      | "{" | "}" | SP | HT
+
+   Comments may be included in some HTTP header fields by surrounding
+   the comment text with parentheses. Comments are only allowed in
+   fields containing "comment" as part of their field value definition.
+   In all other fields, parentheses are considered part of the field
+   value.
+
+       comment        = "(" *( ctext | comment ) ")"
+       ctext          = <any TEXT excluding "(" and ")">
+
+   A string of text is parsed as a single word if it is quoted using
+   double-quote marks.
+
+       quoted-string  = ( <"> *(qdtext) <"> )
+
+       qdtext         = <any CHAR except <"> and CTLs,
+                        but including LWS>
+
+   Single-character quoting using the backslash ("\") character is not
+   permitted in HTTP/1.0.
+
+3.  Protocol Parameters
+
+3.1  HTTP Version
+
+   HTTP uses a "<major>.<minor>" numbering scheme to indicate versions
+   of the protocol. The protocol versioning policy is intended to allow
+   the sender to indicate the format of a message and its capacity for
+   understanding further HTTP communication, rather than the features
+   obtained via that communication. No change is made to the version
+   number for the addition of message components which do not affect
+   communication behavior or which only add to extensible field values.
+   The <minor> number is incremented when the changes made to the
+   protocol add features which do not change the general message parsing
+   algorithm, but which may add to the message semantics and imply
+   additional capabilities of the sender. The <major> number is
+   incremented when the format of a message within the protocol is
+   changed.
+
+   The version of an HTTP message is indicated by an HTTP-Version field
+   in the first line of the message. If the protocol version is not
+   specified, the recipient must assume that the message is in the
+
+
+
+Berners-Lee, et al           Informational                     [Page 12]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   simple HTTP/0.9 format.
+
+       HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT
+
+   Note that the major and minor numbers should be treated as separate
+   integers and that each may be incremented higher than a single digit.
+   Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is
+   lower than HTTP/12.3. Leading zeros should be ignored by recipients
+   and never generated by senders.
+
+   This document defines both the 0.9 and 1.0 versions of the HTTP
+   protocol. Applications sending Full-Request or Full-Response
+   messages, as defined by this specification, must include an HTTP-
+   Version of "HTTP/1.0".
+
+   HTTP/1.0 servers must:
+
+      o recognize the format of the Request-Line for HTTP/0.9 and
+        HTTP/1.0 requests;
+
+      o understand any valid request in the format of HTTP/0.9 or
+        HTTP/1.0;
+
+      o respond appropriately with a message in the same protocol
+        version used by the client.
+
+   HTTP/1.0 clients must:
+
+      o recognize the format of the Status-Line for HTTP/1.0 responses;
+
+      o understand any valid response in the format of HTTP/0.9 or
+        HTTP/1.0.
+
+   Proxy and gateway applications must be careful in forwarding requests
+   that are received in a format different than that of the
+   application's native HTTP version. Since the protocol version
+   indicates the protocol capability of the sender, a proxy/gateway must
+   never send a message with a version indicator which is greater than
+   its native version; if a higher version request is received, the
+   proxy/gateway must either downgrade the request version or respond
+   with an error. Requests with a version lower than that of the
+   application's native format may be upgraded before being forwarded;
+   the proxy/gateway's response to that request must follow the server
+   requirements listed above.
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 13]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+3.2  Uniform Resource Identifiers
+
+   URIs have been known by many names: WWW addresses, Universal Document
+   Identifiers, Universal Resource Identifiers [2], and finally the
+   combination of Uniform Resource Locators (URL) [4] and Names (URN)
+   [16]. As far as HTTP is concerned, Uniform Resource Identifiers are
+   simply formatted strings which identify--via name, location, or any
+   other characteristic--a network resource.
+
+3.2.1 General Syntax
+
+   URIs in HTTP can be represented in absolute form or relative to some
+   known base URI [9], depending upon the context of their use. The two
+   forms are differentiated by the fact that absolute URIs always begin
+   with a scheme name followed by a colon.
+
+       URI            = ( absoluteURI | relativeURI ) [ "#" fragment ]
+
+       absoluteURI    = scheme ":" *( uchar | reserved )
+
+       relativeURI    = net_path | abs_path | rel_path
+
+       net_path       = "//" net_loc [ abs_path ]
+       abs_path       = "/" rel_path
+       rel_path       = [ path ] [ ";" params ] [ "?" query ]
+
+       path           = fsegment *( "/" segment )
+       fsegment       = 1*pchar
+       segment        = *pchar
+
+       params         = param *( ";" param )
+       param          = *( pchar | "/" )
+
+       scheme         = 1*( ALPHA | DIGIT | "+" | "-" | "." )
+       net_loc        = *( pchar | ";" | "?" )
+       query          = *( uchar | reserved )
+       fragment       = *( uchar | reserved )
+
+       pchar          = uchar | ":" | "@" | "&" | "=" | "+"
+       uchar          = unreserved | escape
+       unreserved     = ALPHA | DIGIT | safe | extra | national
+
+       escape         = "%" HEX HEX
+       reserved       = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+"
+       extra          = "!" | "*" | "'" | "(" | ")" | ","
+       safe           = "$" | "-" | "_" | "."
+       unsafe         = CTL | SP | <"> | "#" | "%" | "<" | ">"
+       national       = <any OCTET excluding ALPHA, DIGIT,
+
+
+
+Berners-Lee, et al           Informational                     [Page 14]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+                        reserved, extra, safe, and unsafe>
+
+   For definitive information on URL syntax and semantics, see RFC 1738
+   [4] and RFC 1808 [9]. The BNF above includes national characters not
+   allowed in valid URLs as specified by RFC 1738, since HTTP servers
+   are not restricted in the set of unreserved characters allowed to
+   represent the rel_path part of addresses, and HTTP proxies may
+   receive requests for URIs not defined by RFC 1738.
+
+3.2.2 http URL
+
+   The "http" scheme is used to locate network resources via the HTTP
+   protocol. This section defines the scheme-specific syntax and
+   semantics for http URLs.
+
+       http_URL       = "http:" "//" host [ ":" port ] [ abs_path ]
+
+       host           = <A legal Internet host domain name
+                         or IP address (in dotted-decimal form),
+                         as defined by Section 2.1 of RFC 1123>
+
+       port           = *DIGIT
+
+   If the port is empty or not given, port 80 is assumed. The semantics
+   are that the identified resource is located at the server listening
+   for TCP connections on that port of that host, and the Request-URI
+   for the resource is abs_path. If the abs_path is not present in the
+   URL, it must be given as "/" when used as a Request-URI (Section
+   5.1.2).
+
+      Note: Although the HTTP protocol is independent of the transport
+      layer protocol, the http URL only identifies resources by their
+      TCP location, and thus non-TCP resources must be identified by
+      some other URI scheme.
+
+   The canonical form for "http" URLs is obtained by converting any
+   UPALPHA characters in host to their LOALPHA equivalent (hostnames are
+   case-insensitive), eliding the [ ":" port ] if the port is 80, and
+   replacing an empty abs_path with "/".
+
+3.3  Date/Time Formats
+
+   HTTP/1.0 applications have historically allowed three different
+   formats for the representation of date/time stamps:
+
+       Sun, 06 Nov 1994 08:49:37 GMT    ; RFC 822, updated by RFC 1123
+       Sunday, 06-Nov-94 08:49:37 GMT   ; RFC 850, obsoleted by RFC 1036
+       Sun Nov  6 08:49:37 1994         ; ANSI C's asctime() format
+
+
+
+Berners-Lee, et al           Informational                     [Page 15]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   The first format is preferred as an Internet standard and represents
+   a fixed-length subset of that defined by RFC 1123 [6] (an update to
+   RFC 822 [7]). The second format is in common use, but is based on the
+   obsolete RFC 850 [10] date format and lacks a four-digit year.
+   HTTP/1.0 clients and servers that parse the date value should accept
+   all three formats, though they must never generate the third
+   (asctime) format.
+
+      Note: Recipients of date values are encouraged to be robust in
+      accepting date values that may have been generated by non-HTTP
+      applications, as is sometimes the case when retrieving or posting
+      messages via proxies/gateways to SMTP or NNTP.
+
+   All HTTP/1.0 date/time stamps must be represented in Universal Time
+   (UT), also known as Greenwich Mean Time (GMT), without exception.
+   This is indicated in the first two formats by the inclusion of "GMT"
+   as the three-letter abbreviation for time zone, and should be assumed
+   when reading the asctime format.
+
+       HTTP-date      = rfc1123-date | rfc850-date | asctime-date
+
+       rfc1123-date   = wkday "," SP date1 SP time SP "GMT"
+       rfc850-date    = weekday "," SP date2 SP time SP "GMT"
+       asctime-date   = wkday SP date3 SP time SP 4DIGIT
+
+       date1          = 2DIGIT SP month SP 4DIGIT
+                        ; day month year (e.g., 02 Jun 1982)
+       date2          = 2DIGIT "-" month "-" 2DIGIT
+                        ; day-month-year (e.g., 02-Jun-82)
+       date3          = month SP ( 2DIGIT | ( SP 1DIGIT ))
+                        ; month day (e.g., Jun  2)
+
+       time           = 2DIGIT ":" 2DIGIT ":" 2DIGIT
+                        ; 00:00:00 - 23:59:59
+
+       wkday          = "Mon" | "Tue" | "Wed"
+                      | "Thu" | "Fri" | "Sat" | "Sun"
+
+       weekday        = "Monday" | "Tuesday" | "Wednesday"
+                      | "Thursday" | "Friday" | "Saturday" | "Sunday"
+
+       month          = "Jan" | "Feb" | "Mar" | "Apr"
+                      | "May" | "Jun" | "Jul" | "Aug"
+                      | "Sep" | "Oct" | "Nov" | "Dec"
+
+       Note: HTTP requirements for the date/time stamp format apply
+       only to their usage within the protocol stream. Clients and
+       servers are not required to use these formats for user
+
+
+
+Berners-Lee, et al           Informational                     [Page 16]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       presentation, request logging, etc.
+
+3.4  Character Sets
+
+   HTTP uses the same definition of the term "character set" as that
+   described for MIME:
+
+      The term "character set" is used in this document to refer to a
+      method used with one or more tables to convert a sequence of
+      octets into a sequence of characters. Note that unconditional
+      conversion in the other direction is not required, in that not all
+      characters may be available in a given character set and a
+      character set may provide more than one sequence of octets to
+      represent a particular character. This definition is intended to
+      allow various kinds of character encodings, from simple single-
+      table mappings such as US-ASCII to complex table switching methods
+      such as those that use ISO 2022's techniques. However, the
+      definition associated with a MIME character set name must fully
+      specify the mapping to be performed from octets to characters. In
+      particular, use of external profiling information to determine the
+      exact mapping is not permitted.
+
+      Note: This use of the term "character set" is more commonly
+      referred to as a "character encoding." However, since HTTP and
+      MIME share the same registry, it is important that the terminology
+      also be shared.
+
+   HTTP character sets are identified by case-insensitive tokens. The
+   complete set of tokens are defined by the IANA Character Set registry
+   [15]. However, because that registry does not define a single,
+   consistent token for each character set, we define here the preferred
+   names for those character sets most likely to be used with HTTP
+   entities. These character sets include those registered by RFC 1521
+   [5] -- the US-ASCII [17] and ISO-8859 [18] character sets -- and
+   other names specifically recommended for use within MIME charset
+   parameters.
+
+     charset = "US-ASCII"
+             | "ISO-8859-1" | "ISO-8859-2" | "ISO-8859-3"
+             | "ISO-8859-4" | "ISO-8859-5" | "ISO-8859-6"
+             | "ISO-8859-7" | "ISO-8859-8" | "ISO-8859-9"
+             | "ISO-2022-JP" | "ISO-2022-JP-2" | "ISO-2022-KR"
+             | "UNICODE-1-1" | "UNICODE-1-1-UTF-7" | "UNICODE-1-1-UTF-8"
+             | token
+
+   Although HTTP allows an arbitrary token to be used as a charset
+   value, any token that has a predefined value within the IANA
+   Character Set registry [15] must represent the character set defined
+
+
+
+Berners-Lee, et al           Informational                     [Page 17]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   by that registry. Applications should limit their use of character
+   sets to those defined by the IANA registry.
+
+   The character set of an entity body should be labelled as the lowest
+   common denominator of the character codes used within that body, with
+   the exception that no label is preferred over the labels US-ASCII or
+   ISO-8859-1.
+
+3.5  Content Codings
+
+   Content coding values are used to indicate an encoding transformation
+   that has been applied to a resource. Content codings are primarily
+   used to allow a document to be compressed or encrypted without losing
+   the identity of its underlying media type. Typically, the resource is
+   stored in this encoding and only decoded before rendering or
+   analogous usage.
+
+       content-coding = "x-gzip" | "x-compress" | token
+
+       Note: For future compatibility, HTTP/1.0 applications should
+       consider "gzip" and "compress" to be equivalent to "x-gzip"
+       and "x-compress", respectively.
+
+   All content-coding values are case-insensitive. HTTP/1.0 uses
+   content-coding values in the Content-Encoding (Section 10.3) header
+   field. Although the value describes the content-coding, what is more
+   important is that it indicates what decoding mechanism will be
+   required to remove the encoding. Note that a single program may be
+   capable of decoding multiple content-coding formats. Two values are
+   defined by this specification:
+
+   x-gzip
+       An encoding format produced by the file compression program
+       "gzip" (GNU zip) developed by Jean-loup Gailly. This format is
+       typically a Lempel-Ziv coding (LZ77) with a 32 bit CRC.
+
+   x-compress
+       The encoding format produced by the file compression program
+       "compress". This format is an adaptive Lempel-Ziv-Welch coding
+       (LZW).
+
+       Note: Use of program names for the identification of
+       encoding formats is not desirable and should be discouraged
+       for future encodings. Their use here is representative of
+       historical practice, not good design.
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 18]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+3.6  Media Types
+
+   HTTP uses Internet Media Types [13] in the Content-Type header field
+   (Section 10.5) in order to provide open and extensible data typing.
+
+       media-type     = type "/" subtype *( ";" parameter )
+       type           = token
+       subtype        = token
+
+   Parameters may follow the type/subtype in the form of attribute/value
+   pairs.
+
+       parameter      = attribute "=" value
+       attribute      = token
+       value          = token | quoted-string
+
+   The type, subtype, and parameter attribute names are case-
+   insensitive. Parameter values may or may not be case-sensitive,
+   depending on the semantics of the parameter name. LWS must not be
+   generated between the type and subtype, nor between an attribute and
+   its value. Upon receipt of a media type with an unrecognized
+   parameter, a user agent should treat the media type as if the
+   unrecognized parameter and its value were not present.
+
+   Some older HTTP applications do not recognize media type parameters.
+   HTTP/1.0 applications should only use media type parameters when they
+   are necessary to define the content of a message.
+
+   Media-type values are registered with the Internet Assigned Number
+   Authority (IANA [15]). The media type registration process is
+   outlined in RFC 1590 [13]. Use of non-registered media types is
+   discouraged.
+
+3.6.1 Canonicalization and Text Defaults
+
+   Internet media types are registered with a canonical form. In
+   general, an Entity-Body transferred via HTTP must be represented in
+   the appropriate canonical form prior to its transmission. If the body
+   has been encoded with a Content-Encoding, the underlying data should
+   be in canonical form prior to being encoded.
+
+   Media subtypes of the "text" type use CRLF as the text line break
+   when in canonical form. However, HTTP allows the transport of text
+   media with plain CR or LF alone representing a line break when used
+   consistently within the Entity-Body. HTTP applications must accept
+   CRLF, bare CR, and bare LF as being representative of a line break in
+   text media received via HTTP.
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 19]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   In addition, if the text media is represented in a character set that
+   does not use octets 13 and 10 for CR and LF respectively, as is the
+   case for some multi-byte character sets, HTTP allows the use of
+   whatever octet sequences are defined by that character set to
+   represent the equivalent of CR and LF for line breaks. This
+   flexibility regarding line breaks applies only to text media in the
+   Entity-Body; a bare CR or LF should not be substituted for CRLF
+   within any of the HTTP control structures (such as header fields and
+   multipart boundaries).
+
+   The "charset" parameter is used with some media types to define the
+   character set (Section 3.4) of the data. When no explicit charset
+   parameter is provided by the sender, media subtypes of the "text"
+   type are defined to have a default charset value of "ISO-8859-1" when
+   received via HTTP. Data in character sets other than "ISO-8859-1" or
+   its subsets must be labelled with an appropriate charset value in
+   order to be consistently interpreted by the recipient.
+
+      Note: Many current HTTP servers provide data using charsets other
+      than "ISO-8859-1" without proper labelling. This situation reduces
+      interoperability and is not recommended. To compensate for this,
+      some HTTP user agents provide a configuration option to allow the
+      user to change the default interpretation of the media type
+      character set when no charset parameter is given.
+
+3.6.2 Multipart Types
+
+   MIME provides for a number of "multipart" types -- encapsulations of
+   several entities within a single message's Entity-Body. The multipart
+   types registered by IANA [15] do not have any special meaning for
+   HTTP/1.0, though user agents may need to understand each type in
+   order to correctly interpret the purpose of each body-part. An HTTP
+   user agent should follow the same or similar behavior as a MIME user
+   agent does upon receipt of a multipart type. HTTP servers should not
+   assume that all HTTP clients are prepared to handle multipart types.
+
+   All multipart types share a common syntax and must include a boundary
+   parameter as part of the media type value. The message body is itself
+   a protocol element and must therefore use only CRLF to represent line
+   breaks between body-parts. Multipart body-parts may contain HTTP
+   header fields which are significant to the meaning of that part.
+
+3.7  Product Tokens
+
+   Product tokens are used to allow communicating applications to
+   identify themselves via a simple product token, with an optional
+   slash and version designator. Most fields using product tokens also
+   allow subproducts which form a significant part of the application to
+
+
+
+Berners-Lee, et al           Informational                     [Page 20]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   be listed, separated by whitespace. By convention, the products are
+   listed in order of their significance for identifying the
+   application.
+
+       product         = token ["/" product-version]
+       product-version = token
+
+   Examples:
+
+       User-Agent: CERN-LineMode/2.15 libwww/2.17b3
+
+       Server: Apache/0.8.4
+
+   Product tokens should be short and to the point -- use of them for
+   advertizing or other non-essential information is explicitly
+   forbidden. Although any token character may appear in a product-
+   version, this token should only be used for a version identifier
+   (i.e., successive versions of the same product should only differ in
+   the product-version portion of the product value).
+
+4.  HTTP Message
+
+4.1  Message Types
+
+   HTTP messages consist of requests from client to server and responses
+   from server to client.
+
+       HTTP-message   = Simple-Request           ; HTTP/0.9 messages
+                      | Simple-Response
+                      | Full-Request             ; HTTP/1.0 messages
+                      | Full-Response
+
+   Full-Request and Full-Response use the generic message format of RFC
+   822 [7] for transferring entities. Both messages may include optional
+   header fields (also known as "headers") and an entity body. The
+   entity body is separated from the headers by a null line (i.e., a
+   line with nothing preceding the CRLF).
+
+       Full-Request   = Request-Line             ; Section 5.1
+                        *( General-Header        ; Section 4.3
+                         | Request-Header        ; Section 5.2
+                         | Entity-Header )       ; Section 7.1
+                        CRLF
+                        [ Entity-Body ]          ; Section 7.2
+
+       Full-Response  = Status-Line              ; Section 6.1
+                        *( General-Header        ; Section 4.3
+                         | Response-Header       ; Section 6.2
+
+
+
+Berners-Lee, et al           Informational                     [Page 21]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+                         | Entity-Header )       ; Section 7.1
+                        CRLF
+                        [ Entity-Body ]          ; Section 7.2
+
+   Simple-Request and Simple-Response do not allow the use of any header
+   information and are limited to a single request method (GET).
+
+       Simple-Request  = "GET" SP Request-URI CRLF
+
+       Simple-Response = [ Entity-Body ]
+
+   Use of the Simple-Request format is discouraged because it prevents
+   the server from identifying the media type of the returned entity.
+
+4.2  Message Headers
+
+   HTTP header fields, which include General-Header (Section 4.3),
+   Request-Header (Section 5.2), Response-Header (Section 6.2), and
+   Entity-Header (Section 7.1) fields, follow the same generic format as
+   that given in Section 3.1 of RFC 822 [7]. Each header field consists
+   of a name followed immediately by a colon (":"), a single space (SP)
+   character, and the field value. Field names are case-insensitive.
+   Header fields can be extended over multiple lines by preceding each
+   extra line with at least one SP or HT, though this is not
+   recommended.
+
+       HTTP-header    = field-name ":" [ field-value ] CRLF
+
+       field-name     = token
+       field-value    = *( field-content | LWS )
+
+       field-content  = <the OCTETs making up the field-value
+                        and consisting of either *TEXT or combinations
+                        of token, tspecials, and quoted-string>
+
+   The order in which header fields are received is not significant.
+   However, it is "good practice" to send General-Header fields first,
+   followed by Request-Header or Response-Header fields prior to the
+   Entity-Header fields.
+
+   Multiple HTTP-header fields with the same field-name may be present
+   in a message if and only if the entire field-value for that header
+   field is defined as a comma-separated list [i.e., #(values)]. It must
+   be possible to combine the multiple header fields into one "field-
+   name: field-value" pair, without changing the semantics of the
+   message, by appending each subsequent field-value to the first, each
+   separated by a comma.
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 22]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+4.3  General Header Fields
+
+   There are a few header fields which have general applicability for
+   both request and response messages, but which do not apply to the
+   entity being transferred. These headers apply only to the message
+   being transmitted.
+
+       General-Header = Date                     ; Section 10.6
+                      | Pragma                   ; Section 10.12
+
+   General header field names can be extended reliably only in
+   combination with a change in the protocol version. However, new or
+   experimental header fields may be given the semantics of general
+   header fields if all parties in the communication recognize them to
+   be general header fields. Unrecognized header fields are treated as
+   Entity-Header fields.
+
+5. Request
+
+   A request message from a client to a server includes, within the
+   first line of that message, the method to be applied to the resource,
+   the identifier of the resource, and the protocol version in use. For
+   backwards compatibility with the more limited HTTP/0.9 protocol,
+   there are two valid formats for an HTTP request:
+
+       Request        = Simple-Request | Full-Request
+
+       Simple-Request = "GET" SP Request-URI CRLF
+
+       Full-Request   = Request-Line             ; Section 5.1
+                        *( General-Header        ; Section 4.3
+                         | Request-Header        ; Section 5.2
+                         | Entity-Header )       ; Section 7.1
+                        CRLF
+                        [ Entity-Body ]          ; Section 7.2
+
+   If an HTTP/1.0 server receives a Simple-Request, it must respond with
+   an HTTP/0.9 Simple-Response. An HTTP/1.0 client capable of receiving
+   a Full-Response should never generate a Simple-Request.
+
+5.1  Request-Line
+
+   The Request-Line begins with a method token, followed by the
+   Request-URI and the protocol version, and ending with CRLF. The
+   elements are separated by SP characters. No CR or LF are allowed
+   except in the final CRLF sequence.
+
+       Request-Line = Method SP Request-URI SP HTTP-Version CRLF
+
+
+
+Berners-Lee, et al           Informational                     [Page 23]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   Note that the difference between a Simple-Request and the Request-
+   Line of a Full-Request is the presence of the HTTP-Version field and
+   the availability of methods other than GET.
+
+5.1.1 Method
+
+   The Method token indicates the method to be performed on the resource
+   identified by the Request-URI. The method is case-sensitive.
+
+       Method         = "GET"                    ; Section 8.1
+                      | "HEAD"                   ; Section 8.2
+                      | "POST"                   ; Section 8.3
+                      | extension-method
+
+       extension-method = token
+
+   The list of methods acceptable by a specific resource can change
+   dynamically; the client is notified through the return code of the
+   response if a method is not allowed on a resource. Servers should
+   return the status code 501 (not implemented) if the method is
+   unrecognized or not implemented.
+
+   The methods commonly used by HTTP/1.0 applications are fully defined
+   in Section 8.
+
+5.1.2 Request-URI
+
+   The Request-URI is a Uniform Resource Identifier (Section 3.2) and
+   identifies the resource upon which to apply the request.
+
+       Request-URI    = absoluteURI | abs_path
+
+   The two options for Request-URI are dependent on the nature of the
+   request.
+
+   The absoluteURI form is only allowed when the request is being made
+   to a proxy. The proxy is requested to forward the request and return
+   the response. If the request is GET or HEAD and a prior response is
+   cached, the proxy may use the cached message if it passes any
+   restrictions in the Expires header field. Note that the proxy may
+   forward the request on to another proxy or directly to the server
+   specified by the absoluteURI. In order to avoid request loops, a
+   proxy must be able to recognize all of its server names, including
+   any aliases, local variations, and the numeric IP address. An example
+   Request-Line would be:
+
+       GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.0
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 24]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   The most common form of Request-URI is that used to identify a
+   resource on an origin server or gateway. In this case, only the
+   absolute path of the URI is transmitted (see Section 3.2.1,
+   abs_path). For example, a client wishing to retrieve the resource
+   above directly from the origin server would create a TCP connection
+   to port 80 of the host "www.w3.org" and send the line:
+
+       GET /pub/WWW/TheProject.html HTTP/1.0
+
+   followed by the remainder of the Full-Request. Note that the absolute
+   path cannot be empty; if none is present in the original URI, it must
+   be given as "/" (the server root).
+
+   The Request-URI is transmitted as an encoded string, where some
+   characters may be escaped using the "% HEX HEX" encoding defined by
+   RFC 1738 [4]. The origin server must decode the Request-URI in order
+   to properly interpret the request.
+
+5.2  Request Header Fields
+
+   The request header fields allow the client to pass additional
+   information about the request, and about the client itself, to the
+   server. These fields act as request modifiers, with semantics
+   equivalent to the parameters on a programming language method
+   (procedure) invocation.
+
+       Request-Header = Authorization            ; Section 10.2
+                      | From                     ; Section 10.8
+                      | If-Modified-Since        ; Section 10.9
+                      | Referer                  ; Section 10.13
+                      | User-Agent               ; Section 10.15
+
+   Request-Header field names can be extended reliably only in
+   combination with a change in the protocol version. However, new or
+   experimental header fields may be given the semantics of request
+   header fields if all parties in the communication recognize them to
+   be request header fields. Unrecognized header fields are treated as
+   Entity-Header fields.
+
+6.  Response
+
+   After receiving and interpreting a request message, a server responds
+   in the form of an HTTP response message.
+
+       Response        = Simple-Response | Full-Response
+
+       Simple-Response = [ Entity-Body ]
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 25]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       Full-Response   = Status-Line             ; Section 6.1
+                         *( General-Header       ; Section 4.3
+                          | Response-Header      ; Section 6.2
+                          | Entity-Header )      ; Section 7.1
+                         CRLF
+                         [ Entity-Body ]         ; Section 7.2
+
+   A Simple-Response should only be sent in response to an HTTP/0.9
+   Simple-Request or if the server only supports the more limited
+   HTTP/0.9 protocol. If a client sends an HTTP/1.0 Full-Request and
+   receives a response that does not begin with a Status-Line, it should
+   assume that the response is a Simple-Response and parse it
+   accordingly. Note that the Simple-Response consists only of the
+   entity body and is terminated by the server closing the connection.
+
+6.1  Status-Line
+
+   The first line of a Full-Response message is the Status-Line,
+   consisting of the protocol version followed by a numeric status code
+   and its associated textual phrase, with each element separated by SP
+   characters. No CR or LF is allowed except in the final CRLF sequence.
+
+       Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
+
+   Since a status line always begins with the protocol version and
+   status code
+
+       "HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP
+
+   (e.g., "HTTP/1.0 200 "), the presence of that expression is
+   sufficient to differentiate a Full-Response from a Simple-Response.
+   Although the Simple-Response format may allow such an expression to
+   occur at the beginning of an entity body, and thus cause a
+   misinterpretation of the message if it was given in response to a
+   Full-Request, most HTTP/0.9 servers are limited to responses of type
+   "text/html" and therefore would never generate such a response.
+
+6.1.1 Status Code and Reason Phrase
+
+   The Status-Code element is a 3-digit integer result code of the
+   attempt to understand and satisfy the request. The Reason-Phrase is
+   intended to give a short textual description of the Status-Code. The
+   Status-Code is intended for use by automata and the Reason-Phrase is
+   intended for the human user. The client is not required to examine or
+   display the Reason-Phrase.
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 26]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   The first digit of the Status-Code defines the class of response. The
+   last two digits do not have any categorization role. There are 5
+   values for the first digit:
+
+      o 1xx: Informational - Not used, but reserved for future use
+
+      o 2xx: Success - The action was successfully received,
+             understood, and accepted.
+
+      o 3xx: Redirection - Further action must be taken in order to
+             complete the request
+
+      o 4xx: Client Error - The request contains bad syntax or cannot
+             be fulfilled
+
+      o 5xx: Server Error - The server failed to fulfill an apparently
+             valid request
+
+   The individual values of the numeric status codes defined for
+   HTTP/1.0, and an example set of corresponding Reason-Phrase's, are
+   presented below. The reason phrases listed here are only recommended
+   -- they may be replaced by local equivalents without affecting the
+   protocol. These codes are fully defined in Section 9.
+
+       Status-Code    = "200"   ; OK
+                      | "201"   ; Created
+                      | "202"   ; Accepted
+                      | "204"   ; No Content
+                      | "301"   ; Moved Permanently
+                      | "302"   ; Moved Temporarily
+                      | "304"   ; Not Modified
+                      | "400"   ; Bad Request
+                      | "401"   ; Unauthorized
+                      | "403"   ; Forbidden
+                      | "404"   ; Not Found
+                      | "500"   ; Internal Server Error
+                      | "501"   ; Not Implemented
+                      | "502"   ; Bad Gateway
+                      | "503"   ; Service Unavailable
+                      | extension-code
+
+       extension-code = 3DIGIT
+
+       Reason-Phrase  = *<TEXT, excluding CR, LF>
+
+   HTTP status codes are extensible, but the above codes are the only
+   ones generally recognized in current practice. HTTP applications are
+   not required to understand the meaning of all registered status
+
+
+
+Berners-Lee, et al           Informational                     [Page 27]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   codes, though such understanding is obviously desirable. However,
+   applications must understand the class of any status code, as
+   indicated by the first digit, and treat any unrecognized response as
+   being equivalent to the x00 status code of that class, with the
+   exception that an unrecognized response must not be cached. For
+   example, if an unrecognized status code of 431 is received by the
+   client, it can safely assume that there was something wrong with its
+   request and treat the response as if it had received a 400 status
+   code. In such cases, user agents should present to the user the
+   entity returned with the response, since that entity is likely to
+   include human-readable information which will explain the unusual
+   status.
+
+6.2  Response Header Fields
+
+   The response header fields allow the server to pass additional
+   information about the response which cannot be placed in the Status-
+   Line. These header fields give information about the server and about
+   further access to the resource identified by the Request-URI.
+
+       Response-Header = Location                ; Section 10.11
+                       | Server                  ; Section 10.14
+                       | WWW-Authenticate        ; Section 10.16
+
+   Response-Header field names can be extended reliably only in
+   combination with a change in the protocol version. However, new or
+   experimental header fields may be given the semantics of response
+   header fields if all parties in the communication recognize them to
+    be response header fields. Unrecognized header fields are treated as
+   Entity-Header fields.
+
+7.  Entity
+
+   Full-Request and Full-Response messages may transfer an entity within
+   some requests and responses. An entity consists of Entity-Header
+   fields and (usually) an Entity-Body. In this section, both sender and
+   recipient refer to either the client or the server, depending on who
+   sends and who receives the entity.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 28]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+7.1  Entity Header Fields
+
+   Entity-Header fields define optional metainformation about the
+   Entity-Body or, if no body is present, about the resource identified
+   by the request.
+
+       Entity-Header  = Allow                    ; Section 10.1
+                      | Content-Encoding         ; Section 10.3
+                      | Content-Length           ; Section 10.4
+                      | Content-Type             ; Section 10.5
+                      | Expires                  ; Section 10.7
+                      | Last-Modified            ; Section 10.10
+                      | extension-header
+
+       extension-header = HTTP-header
+
+   The extension-header mechanism allows additional Entity-Header fields
+   to be defined without changing the protocol, but these fields cannot
+   be assumed to be recognizable by the recipient. Unrecognized header
+   fields should be ignored by the recipient and forwarded by proxies.
+
+7.2  Entity Body
+
+   The entity body (if any) sent with an HTTP request or response is in
+   a format and encoding defined by the Entity-Header fields.
+
+       Entity-Body    = *OCTET
+
+   An entity body is included with a request message only when the
+   request method calls for one. The presence of an entity body in a
+   request is signaled by the inclusion of a Content-Length header field
+   in the request message headers. HTTP/1.0 requests containing an
+   entity body must include a valid Content-Length header field.
+
+   For response messages, whether or not an entity body is included with
+   a message is dependent on both the request method and the response
+   code. All responses to the HEAD request method must not include a
+   body, even though the presence of entity header fields may lead one
+   to believe they do. All 1xx (informational), 204 (no content), and
+   304 (not modified) responses must not include a body. All other
+   responses must include an entity body or a Content-Length header
+   field defined with a value of zero (0).
+
+7.2.1 Type
+
+   When an Entity-Body is included with a message, the data type of that
+   body is determined via the header fields Content-Type and Content-
+   Encoding. These define a two-layer, ordered encoding model:
+
+
+
+Berners-Lee, et al           Informational                     [Page 29]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       entity-body := Content-Encoding( Content-Type( data ) )
+
+   A Content-Type specifies the media type of the underlying data. A
+   Content-Encoding may be used to indicate any additional content
+   coding applied to the type, usually for the purpose of data
+   compression, that is a property of the resource requested. The
+   default for the content encoding is none (i.e., the identity
+   function).
+
+   Any HTTP/1.0 message containing an entity body should include a
+   Content-Type header field defining the media type of that body. If
+   and only if the media type is not given by a Content-Type header, as
+   is the case for Simple-Response messages, the recipient may attempt
+   to guess the media type via inspection of its content and/or the name
+   extension(s) of the URL used to identify the resource. If the media
+   type remains unknown, the recipient should treat it as type
+   "application/octet-stream".
+
+7.2.2 Length
+
+   When an Entity-Body is included with a message, the length of that
+   body may be determined in one of two ways. If a Content-Length header
+   field is present, its value in bytes represents the length of the
+   Entity-Body. Otherwise, the body length is determined by the closing
+   of the connection by the server.
+
+   Closing the connection cannot be used to indicate the end of a
+   request body, since it leaves no possibility for the server to send
+   back a response. Therefore, HTTP/1.0 requests containing an entity
+   body must include a valid Content-Length header field. If a request
+   contains an entity body and Content-Length is not specified, and the
+   server does not recognize or cannot calculate the length from other
+   fields, then the server should send a 400 (bad request) response.
+
+      Note: Some older servers supply an invalid Content-Length when
+      sending a document that contains server-side includes dynamically
+      inserted into the data stream. It must be emphasized that this
+      will not be tolerated by future versions of HTTP. Unless the
+      client knows that it is receiving a response from a compliant
+      server, it should not depend on the Content-Length value being
+      correct.
+
+8.  Method Definitions
+
+   The set of common methods for HTTP/1.0 is defined below. Although
+   this set can be expanded, additional methods cannot be assumed to
+   share the same semantics for separately extended clients and servers.
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 30]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+8.1  GET
+
+   The GET method means retrieve whatever information (in the form of an
+   entity) is identified by the Request-URI. If the Request-URI refers
+   to a data-producing process, it is the produced data which shall be
+   returned as the entity in the response and not the source text of the
+   process, unless that text happens to be the output of the process.
+
+   The semantics of the GET method changes to a "conditional GET" if the
+   request message includes an If-Modified-Since header field. A
+   conditional GET method requests that the identified resource be
+   transferred only if it has been modified since the date given by the
+   If-Modified-Since header, as described in Section 10.9. The
+   conditional GET method is intended to reduce network usage by
+   allowing cached entities to be refreshed without requiring multiple
+   requests or transferring unnecessary data.
+
+8.2  HEAD
+
+   The HEAD method is identical to GET except that the server must not
+   return any Entity-Body in the response. The metainformation contained
+   in the HTTP headers in response to a HEAD request should be identical
+   to the information sent in response to a GET request. This method can
+   be used for obtaining metainformation about the resource identified
+   by the Request-URI without transferring the Entity-Body itself. This
+   method is often used for testing hypertext links for validity,
+   accessibility, and recent modification.
+
+   There is no "conditional HEAD" request analogous to the conditional
+   GET. If an If-Modified-Since header field is included with a HEAD
+   request, it should be ignored.
+
+8.3  POST
+
+   The POST method is used to request that the destination server accept
+   the entity enclosed in the request as a new subordinate of the
+   resource identified by the Request-URI in the Request-Line. POST is
+   designed to allow a uniform method to cover the following functions:
+
+      o Annotation of existing resources;
+
+      o Posting a message to a bulletin board, newsgroup, mailing list,
+        or similar group of articles;
+
+      o Providing a block of data, such as the result of submitting a
+        form [3], to a data-handling process;
+
+      o Extending a database through an append operation.
+
+
+
+Berners-Lee, et al           Informational                     [Page 31]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   The actual function performed by the POST method is determined by the
+   server and is usually dependent on the Request-URI. The posted entity
+   is subordinate to that URI in the same way that a file is subordinate
+   to a directory containing it, a news article is subordinate to a
+   newsgroup to which it is posted, or a record is subordinate to a
+   database.
+
+   A successful POST does not require that the entity be created as a
+   resource on the origin server or made accessible for future
+   reference. That is, the action performed by the POST method might not
+   result in a resource that can be identified by a URI. In this case,
+   either 200 (ok) or 204 (no content) is the appropriate response
+   status, depending on whether or not the response includes an entity
+   that describes the result.
+
+   If a resource has been created on the origin server, the response
+   should be 201 (created) and contain an entity (preferably of type
+   "text/html") which describes the status of the request and refers to
+   the new resource.
+
+   A valid Content-Length is required on all HTTP/1.0 POST requests. An
+   HTTP/1.0 server should respond with a 400 (bad request) message if it
+   cannot determine the length of the request message's content.
+
+   Applications must not cache responses to a POST request because the
+   application has no way of knowing that the server would return an
+   equivalent response on some future request.
+
+9.  Status Code Definitions
+
+   Each Status-Code is described below, including a description of which
+   method(s) it can follow and any metainformation required in the
+   response.
+
+9.1  Informational 1xx
+
+   This class of status code indicates a provisional response,
+   consisting only of the Status-Line and optional headers, and is
+   terminated by an empty line. HTTP/1.0 does not define any 1xx status
+   codes and they are not a valid response to a HTTP/1.0 request.
+   However, they may be useful for experimental applications which are
+   outside the scope of this specification.
+
+9.2  Successful 2xx
+
+   This class of status code indicates that the client's request was
+   successfully received, understood, and accepted.
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 32]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   200 OK
+
+   The request has succeeded. The information returned with the
+   response is dependent on the method used in the request, as follows:
+
+   GET    an entity corresponding to the requested resource is sent
+          in the response;
+
+   HEAD   the response must only contain the header information and
+          no Entity-Body;
+
+   POST   an entity describing or containing the result of the action.
+
+   201 Created
+
+   The request has been fulfilled and resulted in a new resource being
+   created. The newly created resource can be referenced by the URI(s)
+   returned in the entity of the response. The origin server should
+   create the resource before using this Status-Code. If the action
+   cannot be carried out immediately, the server must include in the
+   response body a description of when the resource will be available;
+   otherwise, the server should respond with 202 (accepted).
+
+   Of the methods defined by this specification, only POST can create a
+   resource.
+
+   202 Accepted
+
+   The request has been accepted for processing, but the processing
+   has not been completed. The request may or may not eventually be
+   acted upon, as it may be disallowed when processing actually takes
+   place. There is no facility for re-sending a status code from an
+   asynchronous operation such as this.
+
+   The 202 response is intentionally non-committal. Its purpose is to
+   allow a server to accept a request for some other process (perhaps
+   a batch-oriented process that is only run once per day) without
+   requiring that the user agent's connection to the server persist
+   until the process is completed. The entity returned with this
+   response should include an indication of the request's current
+   status and either a pointer to a status monitor or some estimate of
+   when the user can expect the request to be fulfilled.
+
+   204 No Content
+
+   The server has fulfilled the request but there is no new
+   information to send back. If the client is a user agent, it should
+   not change its document view from that which caused the request to
+
+
+
+Berners-Lee, et al           Informational                     [Page 33]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   be generated. This response is primarily intended to allow input
+   for scripts or other actions to take place without causing a change
+   to the user agent's active document view. The response may include
+   new metainformation in the form of entity headers, which should
+   apply to the document currently in the user agent's active view.
+
+9.3  Redirection 3xx
+
+   This class of status code indicates that further action needs to be
+   taken by the user agent in order to fulfill the request. The action
+   required may be carried out by the user agent without interaction
+   with the user if and only if the method used in the subsequent
+   request is GET or HEAD. A user agent should never automatically
+   redirect a request more than 5 times, since such redirections usually
+   indicate an infinite loop.
+
+   300 Multiple Choices
+
+   This response code is not directly used by HTTP/1.0 applications,
+   but serves as the default for interpreting the 3xx class of
+   responses.
+
+   The requested resource is available at one or more locations.
+   Unless it was a HEAD request, the response should include an entity
+   containing a list of resource characteristics and locations from
+   which the user or user agent can choose the one most appropriate.
+   If the server has a preferred choice, it should include the URL in
+   a Location field; user agents may use this field value for
+   automatic redirection.
+
+   301 Moved Permanently
+
+   The requested resource has been assigned a new permanent URL and
+   any future references to this resource should be done using that
+   URL. Clients with link editing capabilities should automatically
+   relink references to the Request-URI to the new reference returned
+   by the server, where possible.
+
+   The new URL must be given by the Location field in the response.
+   Unless it was a HEAD request, the Entity-Body of the response
+   should contain a short note with a hyperlink to the new URL.
+
+   If the 301 status code is received in response to a request using
+   the POST method, the user agent must not automatically redirect the
+   request unless it can be confirmed by the user, since this might
+   change the conditions under which the request was issued.
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 34]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       Note: When automatically redirecting a POST request after
+       receiving a 301 status code, some existing user agents will
+       erroneously change it into a GET request.
+
+   302 Moved Temporarily
+
+   The requested resource resides temporarily under a different URL.
+   Since the redirection may be altered on occasion, the client should
+   continue to use the Request-URI for future requests.
+
+   The URL must be given by the Location field in the response. Unless
+   it was a HEAD request, the Entity-Body of the response should
+   contain a short note with a hyperlink to the new URI(s).
+
+   If the 302 status code is received in response to a request using
+   the POST method, the user agent must not automatically redirect the
+   request unless it can be confirmed by the user, since this might
+   change the conditions under which the request was issued.
+
+       Note: When automatically redirecting a POST request after
+       receiving a 302 status code, some existing user agents will
+       erroneously change it into a GET request.
+
+   304 Not Modified
+
+   If the client has performed a conditional GET request and access is
+   allowed, but the document has not been modified since the date and
+   time specified in the If-Modified-Since field, the server must
+   respond with this status code and not send an Entity-Body to the
+   client. Header fields contained in the response should only include
+   information which is relevant to cache managers or which may have
+   changed independently of the entity's Last-Modified date. Examples
+   of relevant header fields include: Date, Server, and Expires. A
+   cache should update its cached entity to reflect any new field
+   values given in the 304 response.
+
+9.4  Client Error 4xx
+
+   The 4xx class of status code is intended for cases in which the
+   client seems to have erred. If the client has not completed the
+   request when a 4xx code is received, it should immediately cease
+   sending data to the server. Except when responding to a HEAD request,
+   the server should include an entity containing an explanation of the
+   error situation, and whether it is a temporary or permanent
+   condition. These status codes are applicable to any request method.
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 35]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+      Note: If the client is sending data, server implementations on TCP
+      should be careful to ensure that the client acknowledges receipt
+      of the packet(s) containing the response prior to closing the
+      input connection. If the client continues sending data to the
+      server after the close, the server's controller will send a reset
+      packet to the client, which may erase the client's unacknowledged
+      input buffers before they can be read and interpreted by the HTTP
+      application.
+
+   400 Bad Request
+
+   The request could not be understood by the server due to malformed
+   syntax. The client should not repeat the request without
+   modifications.
+
+   401 Unauthorized
+
+   The request requires user authentication. The response must include
+   a WWW-Authenticate header field (Section 10.16) containing a
+   challenge applicable to the requested resource. The client may
+   repeat the request with a suitable Authorization header field
+   (Section 10.2). If the request already included Authorization
+   credentials, then the 401 response indicates that authorization has
+   been refused for those credentials. If the 401 response contains
+   the same challenge as the prior response, and the user agent has
+   already attempted authentication at least once, then the user
+   should be presented the entity that was given in the response,
+   since that entity may include relevant diagnostic information. HTTP
+   access authentication is explained in Section 11.
+
+   403 Forbidden
+
+   The server understood the request, but is refusing to fulfill it.
+   Authorization will not help and the request should not be repeated.
+   If the request method was not HEAD and the server wishes to make
+   public why the request has not been fulfilled, it should describe
+   the reason for the refusal in the entity body. This status code is
+   commonly used when the server does not wish to reveal exactly why
+   the request has been refused, or when no other response is
+   applicable.
+
+   404 Not Found
+
+   The server has not found anything matching the Request-URI. No
+   indication is given of whether the condition is temporary or
+   permanent. If the server does not wish to make this information
+   available to the client, the status code 403 (forbidden) can be
+   used instead.
+
+
+
+Berners-Lee, et al           Informational                     [Page 36]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+9.5  Server Error 5xx
+
+   Response status codes beginning with the digit "5" indicate cases in
+   which the server is aware that it has erred or is incapable of
+   performing the request. If the client has not completed the request
+   when a 5xx code is received, it should immediately cease sending data
+   to the server. Except when responding to a HEAD request, the server
+   should include an entity containing an explanation of the error
+   situation, and whether it is a temporary or permanent condition.
+   These response codes are applicable to any request method and there
+   are no required header fields.
+
+   500 Internal Server Error
+
+   The server encountered an unexpected condition which prevented it
+   from fulfilling the request.
+
+   501 Not Implemented
+
+   The server does not support the functionality required to fulfill
+   the request. This is the appropriate response when the server does
+   not recognize the request method and is not capable of supporting
+   it for any resource.
+
+   502 Bad Gateway
+
+   The server, while acting as a gateway or proxy, received an invalid
+   response from the upstream server it accessed in attempting to
+   fulfill the request.
+
+   503 Service Unavailable
+
+   The server is currently unable to handle the request due to a
+   temporary overloading or maintenance of the server. The implication
+   is that this is a temporary condition which will be alleviated
+   after some delay.
+
+       Note: The existence of the 503 status code does not imply
+       that a server must use it when becoming overloaded. Some
+       servers may wish to simply refuse the connection.
+
+10.  Header Field Definitions
+
+   This section defines the syntax and semantics of all commonly used
+   HTTP/1.0 header fields. For general and entity header fields, both
+   sender and recipient refer to either the client or the server,
+   depending on who sends and who receives the message.
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 37]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+10.1  Allow
+
+   The Allow entity-header field lists the set of methods supported by
+   the resource identified by the Request-URI. The purpose of this field
+   is strictly to inform the recipient of valid methods associated with
+   the resource. The Allow header field is not permitted in a request
+   using the POST method, and thus should be ignored if it is received
+   as part of a POST entity.
+
+       Allow          = "Allow" ":" 1#method
+
+    Example of use:
+
+       Allow: GET, HEAD
+
+   This field cannot prevent a client from trying other methods.
+   However, the indications given by the Allow header field value should
+   be followed. The actual set of allowed methods is defined by the
+   origin server at the time of each request.
+
+   A proxy must not modify the Allow header field even if it does not
+   understand all the methods specified, since the user agent may have
+   other means of communicating with the origin server.
+
+   The Allow header field does not indicate what methods are implemented
+   by the server.
+
+10.2  Authorization
+
+   A user agent that wishes to authenticate itself with a server--
+   usually, but not necessarily, after receiving a 401 response--may do
+   so by including an Authorization request-header field with the
+   request. The Authorization field value consists of credentials
+   containing the authentication information of the user agent for the
+   realm of the resource being requested.
+
+       Authorization  = "Authorization" ":" credentials
+
+   HTTP access authentication is described in Section 11. If a request
+   is authenticated and a realm specified, the same credentials should
+   be valid for all other requests within this realm.
+
+   Responses to requests containing an Authorization field are not
+   cachable.
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 38]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+10.3  Content-Encoding
+
+   The Content-Encoding entity-header field is used as a modifier to the
+   media-type. When present, its value indicates what additional content
+   coding has been applied to the resource, and thus what decoding
+   mechanism must be applied in order to obtain the media-type
+   referenced by the Content-Type header field. The Content-Encoding is
+   primarily used to allow a document to be compressed without losing
+   the identity of its underlying media type.
+
+       Content-Encoding = "Content-Encoding" ":" content-coding
+
+   Content codings are defined in Section 3.5. An example of its use is
+
+       Content-Encoding: x-gzip
+
+   The Content-Encoding is a characteristic of the resource identified
+   by the Request-URI. Typically, the resource is stored with this
+   encoding and is only decoded before rendering or analogous usage.
+
+10.4  Content-Length
+
+   The Content-Length entity-header field indicates the size of the
+   Entity-Body, in decimal number of octets, sent to the recipient or,
+   in the case of the HEAD method, the size of the Entity-Body that
+   would have been sent had the request been a GET.
+
+       Content-Length = "Content-Length" ":" 1*DIGIT
+
+   An example is
+
+       Content-Length: 3495
+
+   Applications should use this field to indicate the size of the
+   Entity-Body to be transferred, regardless of the media type of the
+   entity. A valid Content-Length field value is required on all
+   HTTP/1.0 request messages containing an entity body.
+
+   Any Content-Length greater than or equal to zero is a valid value.
+   Section 7.2.2 describes how to determine the length of a response
+   entity body if a Content-Length is not given.
+
+      Note: The meaning of this field is significantly different from
+      the corresponding definition in MIME, where it is an optional
+      field used within the "message/external-body" content-type. In
+      HTTP, it should be used whenever the entity's length can be
+      determined prior to being transferred.
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 39]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+10.5  Content-Type
+
+   The Content-Type entity-header field indicates the media type of the
+   Entity-Body sent to the recipient or, in the case of the HEAD method,
+   the media type that would have been sent had the request been a GET.
+
+       Content-Type   = "Content-Type" ":" media-type
+
+   Media types are defined in Section 3.6. An example of the field is
+
+       Content-Type: text/html
+
+   Further discussion of methods for identifying the media type of an
+   entity is provided in Section 7.2.1.
+
+10.6  Date
+
+   The Date general-header field represents the date and time at which
+   the message was originated, having the same semantics as orig-date in
+   RFC 822. The field value is an HTTP-date, as described in Section
+   3.3.
+
+       Date           = "Date" ":" HTTP-date
+
+   An example is
+
+       Date: Tue, 15 Nov 1994 08:12:31 GMT
+
+   If a message is received via direct connection with the user agent
+   (in the case of requests) or the origin server (in the case of
+   responses), then the date can be assumed to be the current date at
+   the receiving end. However, since the date--as it is believed by the
+   origin--is important for evaluating cached responses, origin servers
+   should always include a Date header. Clients should only send a Date
+   header field in messages that include an entity body, as in the case
+   of the POST request, and even then it is optional. A received message
+   which does not have a Date header field should be assigned one by the
+   recipient if the message will be cached by that recipient or
+   gatewayed via a protocol which requires a Date.
+
+   In theory, the date should represent the moment just before the
+   entity is generated. In practice, the date can be generated at any
+   time during the message origination without affecting its semantic
+   value.
+
+      Note: An earlier version of this document incorrectly specified
+      that this field should contain the creation date of the enclosed
+      Entity-Body. This has been changed to reflect actual (and proper)
+
+
+
+Berners-Lee, et al           Informational                     [Page 40]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+      usage.
+
+10.7  Expires
+
+   The Expires entity-header field gives the date/time after which the
+   entity should be considered stale. This allows information providers
+   to suggest the volatility of the resource, or a date after which the
+   information may no longer be valid. Applications must not cache this
+   entity beyond the date given. The presence of an Expires field does
+   not imply that the original resource will change or cease to exist
+   at, before, or after that time. However, information providers that
+   know or even suspect that a resource will change by a certain date
+   should include an Expires header with that date. The format is an
+   absolute date and time as defined by HTTP-date in Section 3.3.
+
+       Expires        = "Expires" ":" HTTP-date
+
+   An example of its use is
+
+       Expires: Thu, 01 Dec 1994 16:00:00 GMT
+
+   If the date given is equal to or earlier than the value of the Date
+   header, the recipient must not cache the enclosed entity. If a
+   resource is dynamic by nature, as is the case with many data-
+   producing processes, entities from that resource should be given an
+   appropriate Expires value which reflects that dynamism.
+
+   The Expires field cannot be used to force a user agent to refresh its
+   display or reload a resource; its semantics apply only to caching
+   mechanisms, and such mechanisms need only check a resource's
+   expiration status when a new request for that resource is initiated.
+
+   User agents often have history mechanisms, such as "Back" buttons and
+   history lists, which can be used to redisplay an entity retrieved
+   earlier in a session. By default, the Expires field does not apply to
+   history mechanisms. If the entity is still in storage, a history
+   mechanism should display it even if the entity has expired, unless
+   the user has specifically configured the agent to refresh expired
+   history documents.
+
+      Note: Applications are encouraged to be tolerant of bad or
+      misinformed implementations of the Expires header. A value of zero
+      (0) or an invalid date format should be considered equivalent to
+      an "expires immediately." Although these values are not legitimate
+      for HTTP/1.0, a robust implementation is always desirable.
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 41]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+10.8  From
+
+   The From request-header field, if given, should contain an Internet
+   e-mail address for the human user who controls the requesting user
+   agent. The address should be machine-usable, as defined by mailbox in
+   RFC 822 [7] (as updated by RFC 1123 [6]):
+
+       From           = "From" ":" mailbox
+
+   An example is:
+
+       From: webmaster@w3.org
+
+   This header field may be used for logging purposes and as a means for
+   identifying the source of invalid or unwanted requests. It should not
+   be used as an insecure form of access protection. The interpretation
+   of this field is that the request is being performed on behalf of the
+   person given, who accepts responsibility for the method performed. In
+   particular, robot agents should include this header so that the
+   person responsible for running the robot can be contacted if problems
+   occur on the receiving end.
+
+   The Internet e-mail address in this field may be separate from the
+   Internet host which issued the request. For example, when a request
+   is passed through a proxy, the original issuer's address should be
+   used.
+
+      Note: The client should not send the From header field without the
+      user's approval, as it may conflict with the user's privacy
+      interests or their site's security policy. It is strongly
+      recommended that the user be able to disable, enable, and modify
+      the value of this field at any time prior to a request.
+
+10.9  If-Modified-Since
+
+   The If-Modified-Since request-header field is used with the GET
+   method to make it conditional: if the requested resource has not been
+   modified since the time specified in this field, a copy of the
+   resource will not be returned from the server; instead, a 304 (not
+   modified) response will be returned without any Entity-Body.
+
+       If-Modified-Since = "If-Modified-Since" ":" HTTP-date
+
+   An example of the field is:
+
+       If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 42]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   A conditional GET method requests that the identified resource be
+   transferred only if it has been modified since the date given by the
+   If-Modified-Since header. The algorithm for determining this includes
+   the following cases:
+
+      a) If the request would normally result in anything other than
+         a 200 (ok) status, or if the passed If-Modified-Since date
+         is invalid, the response is exactly the same as for a
+         normal GET. A date which is later than the server's current
+         time is invalid.
+
+      b) If the resource has been modified since the
+         If-Modified-Since date, the response is exactly the same as
+         for a normal GET.
+
+      c) If the resource has not been modified since a valid
+         If-Modified-Since date, the server shall return a 304 (not
+         modified) response.
+
+   The purpose of this feature is to allow efficient updates of cached
+   information with a minimum amount of transaction overhead.
+
+10.10  Last-Modified
+
+   The Last-Modified entity-header field indicates the date and time at
+   which the sender believes the resource was last modified. The exact
+   semantics of this field are defined in terms of how the recipient
+   should interpret it:  if the recipient has a copy of this resource
+   which is older than the date given by the Last-Modified field, that
+   copy should be considered stale.
+
+       Last-Modified  = "Last-Modified" ":" HTTP-date
+
+   An example of its use is
+
+       Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
+
+   The exact meaning of this header field depends on the implementation
+   of the sender and the nature of the original resource. For files, it
+   may be just the file system last-modified time. For entities with
+   dynamically included parts, it may be the most recent of the set of
+   last-modify times for its component parts. For database gateways, it
+   may be the last-update timestamp of the record. For virtual objects,
+   it may be the last time the internal state changed.
+
+   An origin server must not send a Last-Modified date which is later
+   than the server's time of message origination. In such cases, where
+   the resource's last modification would indicate some time in the
+
+
+
+Berners-Lee, et al           Informational                     [Page 43]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   future, the server must replace that date with the message
+   origination date.
+
+10.11  Location
+
+   The Location response-header field defines the exact location of the
+   resource that was identified by the Request-URI. For 3xx responses,
+   the location must indicate the server's preferred URL for automatic
+   redirection to the resource. Only one absolute URL is allowed.
+
+       Location       = "Location" ":" absoluteURI
+
+   An example is
+
+       Location: http://www.w3.org/hypertext/WWW/NewLocation.html
+
+10.12  Pragma
+
+   The Pragma general-header field is used to include implementation-
+   specific directives that may apply to any recipient along the
+   request/response chain. All pragma directives specify optional
+   behavior from the viewpoint of the protocol; however, some systems
+   may require that behavior be consistent with the directives.
+
+       Pragma           = "Pragma" ":" 1#pragma-directive
+
+       pragma-directive = "no-cache" | extension-pragma
+       extension-pragma = token [ "=" word ]
+
+   When the "no-cache" directive is present in a request message, an
+   application should forward the request toward the origin server even
+   if it has a cached copy of what is being requested. This allows a
+   client to insist upon receiving an authoritative response to its
+   request. It also allows a client to refresh a cached copy which is
+   known to be corrupted or stale.
+
+   Pragma directives must be passed through by a proxy or gateway
+   application, regardless of their significance to that application,
+   since the directives may be applicable to all recipients along the
+   request/response chain. It is not possible to specify a pragma for a
+   specific recipient; however, any pragma directive not relevant to a
+   recipient should be ignored by that recipient.
+
+10.13  Referer
+
+   The Referer request-header field allows the client to specify, for
+   the server's benefit, the address (URI) of the resource from which
+   the Request-URI was obtained. This allows a server to generate lists
+
+
+
+Berners-Lee, et al           Informational                     [Page 44]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   of back-links to resources for interest, logging, optimized caching,
+   etc. It also allows obsolete or mistyped links to be traced for
+   maintenance. The Referer field must not be sent if the Request-URI
+   was obtained from a source that does not have its own URI, such as
+   input from the user keyboard.
+
+       Referer        = "Referer" ":" ( absoluteURI | relativeURI )
+
+   Example:
+
+       Referer: http://www.w3.org/hypertext/DataSources/Overview.html
+
+   If a partial URI is given, it should be interpreted relative to the
+   Request-URI. The URI must not include a fragment.
+
+      Note: Because the source of a link may be private information or
+      may reveal an otherwise private information source, it is strongly
+      recommended that the user be able to select whether or not the
+      Referer field is sent. For example, a browser client could have a
+      toggle switch for browsing openly/anonymously, which would
+      respectively enable/disable the sending of Referer and From
+      information.
+
+10.14  Server
+
+   The Server response-header field contains information about the
+   software used by the origin server to handle the request. The field
+   can contain multiple product tokens (Section 3.7) and comments
+   identifying the server and any significant subproducts. By
+   convention, the product tokens are listed in order of their
+   significance for identifying the application.
+
+       Server         = "Server" ":" 1*( product | comment )
+
+   Example:
+
+       Server: CERN/3.0 libwww/2.17
+
+   If the response is being forwarded through a proxy, the proxy
+   application must not add its data to the product list.
+
+      Note: Revealing the specific software version of the server may
+      allow the server machine to become more vulnerable to attacks
+      against software that is known to contain security holes. Server
+      implementors are encouraged to make this field a configurable
+      option.
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 45]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+      Note: Some existing servers fail to restrict themselves to the
+      product token syntax within the Server field.
+
+10.15  User-Agent
+
+   The User-Agent request-header field contains information about the
+   user agent originating the request. This is for statistical purposes,
+   the tracing of protocol violations, and automated recognition of user
+   agents for the sake of tailoring responses to avoid particular user
+   agent limitations. Although it is not required, user agents should
+   include this field with requests. The field can contain multiple
+   product tokens (Section 3.7) and comments identifying the agent and
+   any subproducts which form a significant part of the user agent. By
+   convention, the product tokens are listed in order of their
+   significance for identifying the application.
+
+       User-Agent     = "User-Agent" ":" 1*( product | comment )
+
+   Example:
+
+       User-Agent: CERN-LineMode/2.15 libwww/2.17b3
+
+       Note: Some current proxy applications append their product
+       information to the list in the User-Agent field. This is not
+       recommended, since it makes machine interpretation of these
+       fields ambiguous.
+
+       Note: Some existing clients fail to restrict themselves to
+       the product token syntax within the User-Agent field.
+
+10.16  WWW-Authenticate
+
+   The WWW-Authenticate response-header field must be included in 401
+   (unauthorized) response messages. The field value consists of at
+   least one challenge that indicates the authentication scheme(s) and
+   parameters applicable to the Request-URI.
+
+       WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge
+
+   The HTTP access authentication process is described in Section 11.
+   User agents must take special care in parsing the WWW-Authenticate
+   field value if it contains more than one challenge, or if more than
+   one WWW-Authenticate header field is provided, since the contents of
+   a challenge may itself contain a comma-separated list of
+   authentication parameters.
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 46]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+11.  Access Authentication
+
+   HTTP provides a simple challenge-response authentication mechanism
+   which may be used by a server to challenge a client request and by a
+   client to provide authentication information. It uses an extensible,
+   case-insensitive token to identify the authentication scheme,
+   followed by a comma-separated list of attribute-value pairs which
+   carry the parameters necessary for achieving authentication via that
+   scheme.
+
+       auth-scheme    = token
+
+       auth-param     = token "=" quoted-string
+
+   The 401 (unauthorized) response message is used by an origin server
+   to challenge the authorization of a user agent. This response must
+   include a WWW-Authenticate header field containing at least one
+   challenge applicable to the requested resource.
+
+       challenge      = auth-scheme 1*SP realm *( "," auth-param )
+
+       realm          = "realm" "=" realm-value
+       realm-value    = quoted-string
+
+   The realm attribute (case-insensitive) is required for all
+   authentication schemes which issue a challenge. The realm value
+   (case-sensitive), in combination with the canonical root URL of the
+   server being accessed, defines the protection space. These realms
+   allow the protected resources on a server to be partitioned into a
+   set of protection spaces, each with its own authentication scheme
+   and/or authorization database. The realm value is a string, generally
+   assigned by the origin server, which may have additional semantics
+   specific to the authentication scheme.
+
+   A user agent that wishes to authenticate itself with a server--
+   usually, but not necessarily, after receiving a 401 response--may do
+   so by including an Authorization header field with the request. The
+   Authorization field value consists of credentials containing the
+   authentication information of the user agent for the realm of the
+   resource being requested.
+
+       credentials    = basic-credentials
+                      | ( auth-scheme #auth-param )
+
+   The domain over which credentials can be automatically applied by a
+   user agent is determined by the protection space. If a prior request
+   has been authorized, the same credentials may be reused for all other
+   requests within that protection space for a period of time determined
+
+
+
+Berners-Lee, et al           Informational                     [Page 47]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   by the authentication scheme, parameters, and/or user preference.
+   Unless otherwise defined by the authentication scheme, a single
+   protection space cannot extend outside the scope of its server.
+
+   If the server does not wish to accept the credentials sent with a
+   request, it should return a 403 (forbidden) response.
+
+   The HTTP protocol does not restrict applications to this simple
+   challenge-response mechanism for access authentication. Additional
+   mechanisms may be used, such as encryption at the transport level or
+   via message encapsulation, and with additional header fields
+   specifying authentication information. However, these additional
+   mechanisms are not defined by this specification.
+
+   Proxies must be completely transparent regarding user agent
+   authentication. That is, they must forward the WWW-Authenticate and
+   Authorization headers untouched, and must not cache the response to a
+   request containing Authorization. HTTP/1.0 does not provide a means
+   for a client to be authenticated with a proxy.
+
+11.1  Basic Authentication Scheme
+
+   The "basic" authentication scheme is based on the model that the user
+   agent must authenticate itself with a user-ID and a password for each
+   realm. The realm value should be considered an opaque string which
+   can only be compared for equality with other realms on that server.
+   The server will authorize the request only if it can validate the
+   user-ID and password for the protection space of the Request-URI.
+   There are no optional authentication parameters.
+
+   Upon receipt of an unauthorized request for a URI within the
+   protection space, the server should respond with a challenge like the
+   following:
+
+       WWW-Authenticate: Basic realm="WallyWorld"
+
+   where "WallyWorld" is the string assigned by the server to identify
+   the protection space of the Request-URI.
+
+   To receive authorization, the client sends the user-ID and password,
+   separated by a single colon (":") character, within a base64 [5]
+   encoded string in the credentials.
+
+       basic-credentials = "Basic" SP basic-cookie
+
+       basic-cookie      = <base64 [5] encoding of userid-password,
+                            except not limited to 76 char/line>
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 48]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+       userid-password   = [ token ] ":" *TEXT
+
+   If the user agent wishes to send the user-ID "Aladdin" and password
+   "open sesame", it would use the following header field:
+
+       Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
+
+   The basic authentication scheme is a non-secure method of filtering
+   unauthorized access to resources on an HTTP server. It is based on
+   the assumption that the connection between the client and the server
+   can be regarded as a trusted carrier. As this is not generally true
+   on an open network, the basic authentication scheme should be used
+   accordingly. In spite of this, clients should implement the scheme in
+   order to communicate with servers that use it.
+
+12.  Security Considerations
+
+   This section is meant to inform application developers, information
+   providers, and users of the security limitations in HTTP/1.0 as
+   described by this document. The discussion does not include
+   definitive solutions to the problems revealed, though it does make
+   some suggestions for reducing security risks.
+
+12.1  Authentication of Clients
+
+   As mentioned in Section 11.1, the Basic authentication scheme is not
+   a secure method of user authentication, nor does it prevent the
+   Entity-Body from being transmitted in clear text across the physical
+   network used as the carrier. HTTP/1.0 does not prevent additional
+   authentication schemes and encryption mechanisms from being employed
+   to increase security.
+
+12.2  Safe Methods
+
+   The writers of client software should be aware that the software
+   represents the user in their interactions over the Internet, and
+   should be careful to allow the user to be aware of any actions they
+   may take which may have an unexpected significance to themselves or
+   others.
+
+   In particular, the convention has been established that the GET and
+   HEAD methods should never have the significance of taking an action
+   other than retrieval. These methods should be considered "safe." This
+   allows user agents to represent other methods, such as POST, in a
+   special way, so that the user is made aware of the fact that a
+   possibly unsafe action is being requested.
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 49]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   Naturally, it is not possible to ensure that the server does not
+   generate side-effects as a result of performing a GET request; in
+   fact, some dynamic resources consider that a feature. The important
+   distinction here is that the user did not request the side-effects,
+   so therefore cannot be held accountable for them.
+
+12.3  Abuse of Server Log Information
+
+   A server is in the position to save personal data about a user's
+   requests which may identify their reading patterns or subjects of
+   interest. This information is clearly confidential in nature and its
+   handling may be constrained by law in certain countries. People using
+   the HTTP protocol to provide data are responsible for ensuring that
+   such material is not distributed without the permission of any
+   individuals that are identifiable by the published results.
+
+12.4  Transfer of Sensitive Information
+
+   Like any generic data transfer protocol, HTTP cannot regulate the
+   content of the data that is transferred, nor is there any a priori
+   method of determining the sensitivity of any particular piece of
+   information within the context of any given request. Therefore,
+   applications should supply as much control over this information as
+   possible to the provider of that information. Three header fields are
+   worth special mention in this context: Server, Referer and From.
+
+   Revealing the specific software version of the server may allow the
+   server machine to become more vulnerable to attacks against software
+   that is known to contain security holes. Implementors should make the
+   Server header field a configurable option.
+
+   The Referer field allows reading patterns to be studied and reverse
+   links drawn. Although it can be very useful, its power can be abused
+   if user details are not separated from the information contained in
+   the Referer. Even when the personal information has been removed, the
+   Referer field may indicate a private document's URI whose publication
+   would be inappropriate.
+
+   The information sent in the From field might conflict with the user's
+   privacy interests or their site's security policy, and hence it
+   should not be transmitted without the user being able to disable,
+   enable, and modify the contents of the field. The user must be able
+   to set the contents of this field within a user preference or
+   application defaults configuration.
+
+   We suggest, though do not require, that a convenient toggle interface
+   be provided for the user to enable or disable the sending of From and
+   Referer information.
+
+
+
+Berners-Lee, et al           Informational                     [Page 50]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+12.5  Attacks Based On File and Path Names
+
+   Implementations of HTTP origin servers should be careful to restrict
+   the documents returned by HTTP requests to be only those that were
+   intended by the server administrators. If an HTTP server translates
+   HTTP URIs directly into file system calls, the server must take
+   special care not to serve files that were not intended to be
+   delivered to HTTP clients. For example, Unix, Microsoft Windows, and
+   other operating systems use ".." as a path component to indicate a
+   directory level above the current one. On such a system, an HTTP
+   server must disallow any such construct in the Request-URI if it
+   would otherwise allow access to a resource outside those intended to
+   be accessible via the HTTP server. Similarly, files intended for
+   reference only internally to the server (such as access control
+   files, configuration files, and script code) must be protected from
+   inappropriate retrieval, since they might contain sensitive
+   information. Experience has shown that minor bugs in such HTTP server
+   implementations have turned into security risks.
+
+13.  Acknowledgments
+
+   This specification makes heavy use of the augmented BNF and generic
+   constructs defined by David H. Crocker for RFC 822 [7]. Similarly, it
+   reuses many of the definitions provided by Nathaniel Borenstein and
+   Ned Freed for MIME [5]. We hope that their inclusion in this
+   specification will help reduce past confusion over the relationship
+   between HTTP/1.0 and Internet mail message formats.
+
+   The HTTP protocol has evolved considerably over the past four years.
+   It has benefited from a large and active developer community--the
+   many people who have participated on the www-talk mailing list--and
+   it is that community which has been most responsible for the success
+   of HTTP and of the World-Wide Web in general. Marc Andreessen, Robert
+   Cailliau, Daniel W. Connolly, Bob Denny, Jean-Francois Groff, Phillip
+   M. Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob McCool, Lou
+   Montulli, Dave Raggett, Tony Sanders, and Marc VanHeyningen deserve
+   special recognition for their efforts in defining aspects of the
+   protocol for early versions of this specification.
+
+   Paul Hoffman contributed sections regarding the informational status
+   of this document and Appendices C and D.
+
+
+
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 51]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   This document has benefited greatly from the comments of all those
+   participating in the HTTP-WG. In addition to those already mentioned,
+   the following individuals have contributed to this specification:
+
+       Gary Adams                         Harald Tveit Alvestrand
+       Keith Ball                         Brian Behlendorf
+       Paul Burchard                      Maurizio Codogno
+       Mike Cowlishaw                     Roman Czyborra
+       Michael A. Dolan                   John Franks
+       Jim Gettys                         Marc Hedlund
+       Koen Holtman                       Alex Hopmann
+       Bob Jernigan                       Shel Kaphan
+       Martijn Koster                     Dave Kristol
+       Daniel LaLiberte                   Paul Leach
+       Albert Lunde                       John C. Mallery
+       Larry Masinter                     Mitra
+       Jeffrey Mogul                      Gavin Nicol
+       Bill Perry                         Jeffrey Perry
+       Owen Rees                          Luigi Rizzo
+       David Robinson                     Marc Salomon
+       Rich Salz                          Jim Seidman
+       Chuck Shotton                      Eric W. Sink
+       Simon E. Spero                     Robert S. Thau
+       Francois Yergeau                   Mary Ellen Zurko
+       Jean-Philippe Martin-Flatin
+
+14. References
+
+   [1]  Anklesaria, F., McCahill, M., Lindner, P., Johnson, D.,
+        Torrey, D., and B. Alberti, "The Internet Gopher Protocol: A
+        Distributed Document Search and Retrieval Protocol", RFC 1436,
+        University of Minnesota, March 1993.
+
+   [2]  Berners-Lee, T., "Universal Resource Identifiers in WWW: A
+        Unifying Syntax for the Expression of Names and Addresses of
+        Objects on the Network as used in the World-Wide Web",
+        RFC 1630, CERN, June 1994.
+
+   [3]  Berners-Lee, T., and D. Connolly, "Hypertext Markup Language -
+        2.0", RFC 1866, MIT/W3C, November 1995.
+
+   [4]  Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform
+        Resource Locators (URL)", RFC 1738, CERN, Xerox PARC,
+        University of Minnesota, December 1994.
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 52]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   [5]  Borenstein, N., and N. Freed, "MIME (Multipurpose Internet Mail
+        Extensions) Part One: Mechanisms for Specifying and Describing
+        the Format of Internet Message Bodies", RFC 1521, Bellcore,
+        Innosoft, September 1993.
+
+   [6]  Braden, R., "Requirements for Internet hosts - Application and
+        Support", STD 3, RFC 1123, IETF, October 1989.
+
+   [7]  Crocker, D., "Standard for the Format of ARPA Internet Text
+        Messages", STD 11, RFC 822, UDEL, August 1982.
+
+   [8]  F. Davis, B. Kahle, H. Morris, J. Salem, T. Shen, R. Wang,
+        J. Sui, and M. Grinbaum. "WAIS Interface Protocol Prototype
+        Functional Specification." (v1.5), Thinking Machines
+        Corporation, April 1990.
+
+   [9]  Fielding, R., "Relative Uniform Resource Locators", RFC 1808,
+        UC Irvine, June 1995.
+
+   [10] Horton, M., and R. Adams, "Standard for interchange of USENET
+        Messages", RFC 1036 (Obsoletes RFC 850), AT&T Bell
+        Laboratories, Center for Seismic Studies, December 1987.
+
+   [11] Kantor, B., and P. Lapsley, "Network News Transfer Protocol:
+        A Proposed Standard for the Stream-Based Transmission of News",
+        RFC 977, UC San Diego, UC Berkeley, February 1986.
+
+   [12] Postel, J., "Simple Mail Transfer Protocol." STD 10, RFC 821,
+        USC/ISI, August 1982.
+
+   [13] Postel, J., "Media Type Registration Procedure." RFC 1590,
+        USC/ISI, March 1994.
+
+   [14] Postel, J., and J. Reynolds, "File Transfer Protocol (FTP)",
+        STD 9, RFC 959, USC/ISI, October 1985.
+
+   [15] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC
+        1700, USC/ISI, October 1994.
+
+   [16] Sollins, K., and L. Masinter, "Functional Requirements for
+        Uniform Resource Names", RFC 1737, MIT/LCS, Xerox Corporation,
+        December 1994.
+
+   [17] US-ASCII. Coded Character Set - 7-Bit American Standard Code
+        for Information Interchange. Standard ANSI X3.4-1986, ANSI,
+        1986.
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 53]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   [18] ISO-8859. International Standard -- Information Processing --
+        8-bit Single-Byte Coded Graphic Character Sets --
+        Part 1: Latin alphabet No. 1, ISO 8859-1:1987.
+        Part 2: Latin alphabet No. 2, ISO 8859-2, 1987.
+        Part 3: Latin alphabet No. 3, ISO 8859-3, 1988.
+        Part 4: Latin alphabet No. 4, ISO 8859-4, 1988.
+        Part 5: Latin/Cyrillic alphabet, ISO 8859-5, 1988.
+        Part 6: Latin/Arabic alphabet, ISO 8859-6, 1987.
+        Part 7: Latin/Greek alphabet, ISO 8859-7, 1987.
+        Part 8: Latin/Hebrew alphabet, ISO 8859-8, 1988.
+        Part 9: Latin alphabet No. 5, ISO 8859-9, 1990.
+
+15.  Authors' Addresses
+
+   Tim Berners-Lee
+   Director, W3 Consortium
+   MIT Laboratory for Computer Science
+   545 Technology Square
+   Cambridge, MA 02139, U.S.A.
+
+   Fax: +1 (617) 258 8682
+   EMail: timbl@w3.org
+
+
+   Roy T. Fielding
+   Department of Information and Computer Science
+   University of California
+   Irvine, CA 92717-3425, U.S.A.
+
+   Fax: +1 (714) 824-4056
+   EMail: fielding@ics.uci.edu
+
+
+   Henrik Frystyk Nielsen
+   W3 Consortium
+   MIT Laboratory for Computer Science
+   545 Technology Square
+   Cambridge, MA 02139, U.S.A.
+
+   Fax: +1 (617) 258 8682
+   EMail: frystyk@w3.org
+
+
+
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 54]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+Appendices
+
+   These appendices are provided for informational reasons only -- they
+   do not form a part of the HTTP/1.0 specification.
+
+A.  Internet Media Type message/http
+
+   In addition to defining the HTTP/1.0 protocol, this document serves
+   as the specification for the Internet media type "message/http". The
+   following is to be registered with IANA [13].
+
+       Media Type name:         message
+
+       Media subtype name:      http
+
+       Required parameters:     none
+
+       Optional parameters:     version, msgtype
+
+              version: The HTTP-Version number of the enclosed message
+                       (e.g., "1.0"). If not present, the version can be
+                       determined from the first line of the body.
+
+              msgtype: The message type -- "request" or "response". If
+                       not present, the type can be determined from the
+                       first line of the body.
+
+       Encoding considerations: only "7bit", "8bit", or "binary" are
+                                permitted
+
+       Security considerations: none
+
+B.  Tolerant Applications
+
+   Although this document specifies the requirements for the generation
+   of HTTP/1.0 messages, not all applications will be correct in their
+   implementation. We therefore recommend that operational applications
+   be tolerant of deviations whenever those deviations can be
+   interpreted unambiguously.
+
+   Clients should be tolerant in parsing the Status-Line and servers
+   tolerant when parsing the Request-Line. In particular, they should
+   accept any amount of SP or HT characters between fields, even though
+   only a single SP is required.
+
+   The line terminator for HTTP-header fields is the sequence CRLF.
+   However, we recommend that applications, when parsing such headers,
+   recognize a single LF as a line terminator and ignore the leading CR.
+
+
+
+Berners-Lee, et al           Informational                     [Page 55]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+C.  Relationship to MIME
+
+   HTTP/1.0 uses many of the constructs defined for Internet Mail (RFC
+   822 [7]) and the Multipurpose Internet Mail Extensions (MIME [5]) to
+   allow entities to be transmitted in an open variety of
+   representations and with extensible mechanisms. However, RFC 1521
+   discusses mail, and HTTP has a few features that are different than
+   those described in RFC 1521. These differences were carefully chosen
+   to optimize performance over binary connections, to allow greater
+   freedom in the use of new media types, to make date comparisons
+   easier, and to acknowledge the practice of some early HTTP servers
+   and clients.
+
+   At the time of this writing, it is expected that RFC 1521 will be
+   revised. The revisions may include some of the practices found in
+   HTTP/1.0 but not in RFC 1521.
+
+   This appendix describes specific areas where HTTP differs from RFC
+   1521. Proxies and gateways to strict MIME environments should be
+   aware of these differences and provide the appropriate conversions
+   where necessary. Proxies and gateways from MIME environments to HTTP
+   also need to be aware of the differences because some conversions may
+   be required.
+
+C.1  Conversion to Canonical Form
+
+   RFC 1521 requires that an Internet mail entity be converted to
+   canonical form prior to being transferred, as described in Appendix G
+   of RFC 1521 [5]. Section 3.6.1 of this document describes the forms
+   allowed for subtypes of the "text" media type when transmitted over
+   HTTP.
+
+   RFC 1521 requires that content with a Content-Type of "text"
+   represent line breaks as CRLF and forbids the use of CR or LF outside
+   of line break sequences. HTTP allows CRLF, bare CR, and bare LF to
+   indicate a line break within text content when a message is
+   transmitted over HTTP.
+
+   Where it is possible, a proxy or gateway from HTTP to a strict RFC
+   1521 environment should translate all line breaks within the text
+   media types described in Section 3.6.1 of this document to the RFC
+   1521 canonical form of CRLF. Note, however, that this may be
+   complicated by the presence of a Content-Encoding and by the fact
+   that HTTP allows the use of some character sets which do not use
+   octets 13 and 10 to represent CR and LF, as is the case for some
+   multi-byte character sets.
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 56]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+C.2  Conversion of Date Formats
+
+   HTTP/1.0 uses a restricted set of date formats (Section 3.3) to
+   simplify the process of date comparison. Proxies and gateways from
+   other protocols should ensure that any Date header field present in a
+   message conforms to one of the HTTP/1.0 formats and rewrite the date
+   if necessary.
+
+C.3  Introduction of Content-Encoding
+
+   RFC 1521 does not include any concept equivalent to HTTP/1.0's
+   Content-Encoding header field. Since this acts as a modifier on the
+   media type, proxies and gateways from HTTP to MIME-compliant
+   protocols must either change the value of the Content-Type header
+   field or decode the Entity-Body before forwarding the message. (Some
+   experimental applications of Content-Type for Internet mail have used
+   a media-type parameter of ";conversions=<content-coding>" to perform
+   an equivalent function as Content-Encoding. However, this parameter
+   is not part of RFC 1521.)
+
+C.4  No Content-Transfer-Encoding
+
+   HTTP does not use the Content-Transfer-Encoding (CTE) field of RFC
+   1521. Proxies and gateways from MIME-compliant protocols to HTTP must
+   remove any non-identity CTE ("quoted-printable" or "base64") encoding
+   prior to delivering the response message to an HTTP client.
+
+   Proxies and gateways from HTTP to MIME-compliant protocols are
+   responsible for ensuring that the message is in the correct format
+   and encoding for safe transport on that protocol, where "safe
+   transport" is defined by the limitations of the protocol being used.
+   Such a proxy or gateway should label the data with an appropriate
+   Content-Transfer-Encoding if doing so will improve the likelihood of
+   safe transport over the destination protocol.
+
+C.5  HTTP Header Fields in Multipart Body-Parts
+
+   In RFC 1521, most header fields in multipart body-parts are generally
+   ignored unless the field name begins with "Content-". In HTTP/1.0,
+   multipart body-parts may contain any HTTP header fields which are
+   significant to the meaning of that part.
+
+D.  Additional Features
+
+   This appendix documents protocol elements used by some existing HTTP
+   implementations, but not consistently and correctly across most
+   HTTP/1.0 applications. Implementors should be aware of these
+   features, but cannot rely upon their presence in, or interoperability
+
+
+
+Berners-Lee, et al           Informational                     [Page 57]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   with, other HTTP/1.0 applications.
+
+D.1  Additional Request Methods
+
+D.1.1 PUT
+
+   The PUT method requests that the enclosed entity be stored under the
+   supplied Request-URI. If the Request-URI refers to an already
+   existing resource, the enclosed entity should be considered as a
+   modified version of the one residing on the origin server. If the
+   Request-URI does not point to an existing resource, and that URI is
+   capable of being defined as a new resource by the requesting user
+   agent, the origin server can create the resource with that URI.
+
+   The fundamental difference between the POST and PUT requests is
+   reflected in the different meaning of the Request-URI. The URI in a
+   POST request identifies the resource that will handle the enclosed
+   entity as data to be processed. That resource may be a data-accepting
+   process, a gateway to some other protocol, or a separate entity that
+   accepts annotations. In contrast, the URI in a PUT request identifies
+   the entity enclosed with the request -- the user agent knows what URI
+   is intended and the server should not apply the request to some other
+   resource.
+
+D.1.2 DELETE
+
+   The DELETE method requests that the origin server delete the resource
+   identified by the Request-URI.
+
+D.1.3 LINK
+
+   The LINK method establishes one or more Link relationships between
+   the existing resource identified by the Request-URI and other
+   existing resources.
+
+D.1.4 UNLINK
+
+   The UNLINK method removes one or more Link relationships from the
+   existing resource identified by the Request-URI.
+
+D.2  Additional Header Field Definitions
+
+D.2.1 Accept
+
+   The Accept request-header field can be used to indicate a list of
+   media ranges which are acceptable as a response to the request. The
+   asterisk "*" character is used to group media types into ranges, with
+   "*/*" indicating all media types and "type/*" indicating all subtypes
+
+
+
+Berners-Lee, et al           Informational                     [Page 58]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+   of that type. The set of ranges given by the client should represent
+   what types are acceptable given the context of the request.
+
+D.2.2 Accept-Charset
+
+   The Accept-Charset request-header field can be used to indicate a
+   list of preferred character sets other than the default US-ASCII and
+   ISO-8859-1. This field allows clients capable of understanding more
+   comprehensive or special-purpose character sets to signal that
+   capability to a server which is capable of representing documents in
+   those character sets.
+
+D.2.3 Accept-Encoding
+
+   The Accept-Encoding request-header field is similar to Accept, but
+   restricts the content-coding values which are acceptable in the
+   response.
+
+D.2.4 Accept-Language
+
+   The Accept-Language request-header field is similar to Accept, but
+   restricts the set of natural languages that are preferred as a
+   response to the request.
+
+D.2.5 Content-Language
+
+   The Content-Language entity-header field describes the natural
+   language(s) of the intended audience for the enclosed entity. Note
+   that this may not be equivalent to all the languages used within the
+   entity.
+
+D.2.6 Link
+
+   The Link entity-header field provides a means for describing a
+   relationship between the entity and some other resource. An entity
+   may include multiple Link values. Links at the metainformation level
+   typically indicate relationships like hierarchical structure and
+   navigation paths.
+
+D.2.7 MIME-Version
+
+   HTTP messages may include a single MIME-Version general-header field
+   to indicate what version of the MIME protocol was used to construct
+   the message. Use of the MIME-Version header field, as defined by RFC
+   1521 [5], should indicate that the message is MIME-conformant.
+   Unfortunately, some older HTTP/1.0 servers send it indiscriminately,
+   and thus this field should be ignored.
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 59]
+
+
+
+RFC 1945                        HTTP/1.0                        May 1996
+
+
+D.2.8 Retry-After
+
+   The Retry-After response-header field can be used with a 503 (service
+   unavailable) response to indicate how long the service is expected to
+   be unavailable to the requesting client. The value of this field can
+   be either an HTTP-date or an integer number of seconds (in decimal)
+   after the time of the response.
+
+D.2.9 Title
+
+   The Title entity-header field indicates the title of the entity.
+
+D.2.10 URI
+
+   The URI entity-header field may contain some or all of the Uniform
+   Resource Identifiers (Section 3.2) by which the Request-URI resource
+   can be identified. There is no guarantee that the resource can be
+   accessed using the URI(s) specified.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Berners-Lee, et al           Informational                     [Page 60]
+
+
+
+
+ + diff --git a/docs/rfc790.txt b/docs/rfc790.txt new file mode 100644 index 0000000..eb6866c --- /dev/null +++ b/docs/rfc790.txt @@ -0,0 +1,874 @@ +rfc790 +Press here to go to the top of the rfc 'tree'. + + + +Network Working Group J. Postel +Request for Comments: 790 ISI + September 1981 + +Obsoletes RFCs: 776, 770, 762, 758, +755, 750, 739, 604, 503, 433, 349 +Obsoletes IENs: 127, 117, 93 + + + + ASSIGNED NUMBERS + + + + +This Network Working Group Request for Comments documents the currently +assigned values from several series of numbers used in network protocol +implementations. This RFC will be updated periodically, and in any case +current information can be obtained from Jon Postel. The assignment of +numbers is also handled by Jon. If you are developing a protocol or +application that will require the use of a link, socket, port, protocol, +or network number please contact Jon to receive a number assignment. + + Jon Postel + USC - Information Sciences Institute + 4676 Admiralty Way + Marina del Rey, California 90291 + + phone: (213) 822-1511 + + ARPANET mail: POSTEL@ISIF + +Most of the protocols mentioned here are documented in the RFC series of +notes. The more prominent and more generally used are documented in the +Protocol Handbook [17] prepared by the Network Information Center (NIC). +Some of the items listed are undocumented. In all cases the name and +mailbox of the responsible individual is indicated. In the lists that +follow, a bracketed entry, e.g., [17,iii], at the right hand margin of +the page indicates a reference for the listed protocol, where the number +cites the document and the "iii" cites the person. + + + + + + + + + + + + + + +Postel [Page 1] + + +RFC 790 September 1981 + Assigned Numbers +Network Numbers + + + ASSIGNED NETWORK NUMBERS + + This list of network numbers is used in the internet address [33]. + The Internet Protocol (IP) uses a 32 bit address and divides that + address into a network part and a "rest" or local address part. The + division takes 3 forms or classes. + + The first type, or class a, of address has a 7-bit network number + and a 24-bit local address. This allows 128 class a networks. + + 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0| NETWORK | Local Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Class A Address + + The second type, or class b, of address has a 14-bit network + number and a 16-bit local address. This allows 16,384 class b + networks. + + 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |1 0| NETWORK | Local Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Class B Address + + The third type, or class c, of address has a 21-bit network number + and a 8-bit local address. This allows 2,097,152 class c + networks. + + 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |1 1 0| NETWORK | Local Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Class C Address + + One notation for internet host addresses commonly used divides the + 32-bit address into four 8-bit fields and specifies the value of each + field as a decimal number with the fields separated by periods. For + example, the internet address of ISIF is 010.020.000.052. + + This notation will be used in the listing of assigned network + + +Postel [Page 2] + + +RFC 790 September 1981 + Assigned Numbers +Network Numbers + + + numbers. The class a networks will have nnn.rrr.rrr.rrr, the class b + networks will have nnn.nnn.rrr.rrr, and the class c networks will + have nnn.nnn.nnn.rrr, where nnn represents part or all of a network + number and rrr represents part or all of a local address or rest + field. + + Assigned Network Numbers + + Class A Networks + + Internet Address Name Network References + ---------------- ---- ------- ---------- + 000.rrr.rrr.rrr Reserved [JBP] + 001.rrr.rrr.rrr BBN-PR BBN Packet Radio Network [DCA2] + 002.rrr.rrr.rrr SF-PR-1 SF Packet Radio Network (1) [JEM] + 003.rrr.rrr.rrr BBN-RCC BBN RCC Network [SGC] + 004.rrr.rrr.rrr SATNET Atlantic Satellite Network [DM11] + 005.rrr.rrr.rrr SILL-PR Ft. Sill Packet Radio Network[JEM] + 006.rrr.rrr.rrr SF-PR-2 SF Packet Radio Network (2) [JEM] + 007.rrr.rrr.rrr CHAOS MIT CHAOS Network [MOON] + 008.rrr.rrr.rrr CLARKNET SATNET subnet for Clarksburg[DM11] + 009.rrr.rrr.rrr BRAGG-PR Ft. Bragg Packet Radio Net [JEM] + 010.rrr.rrr.rrr ARPANET ARPANET [17,1,VGC] + 011.rrr.rrr.rrr UCLNET University College London [PK] + 012.rrr.rrr.rrr CYCLADES CYCLADES [VGC] + 013.rrr.rrr.rrr Unassigned [JBP] + 014.rrr.rrr.rrr TELENET TELENET [VGC] + 015.rrr.rrr.rrr EPSS British Post Office EPSS [PK] + 016.rrr.rrr.rrr DATAPAC DATAPAC [VGC] + 017.rrr.rrr.rrr TRANSPAC TRANSPAC [VGC] + 018.rrr.rrr.rrr LCSNET MIT LCS Network [43,10,DDC2] + 019.rrr.rrr.rrr TYMNET TYMNET [VGC] + 020.rrr.rrr.rrr DC-PR D.C. Packet Radio Network [VGC] + 021.rrr.rrr.rrr EDN DCEC EDN [EC5] + 022.rrr.rrr.rrr DIALNET DIALNET [26,16,MRC] + 023.rrr.rrr.rrr MITRE MITRE Cablenet [44,APS] + 024.rrr.rrr.rrr BBN-LOCAL BBN Local Network [SGC] + 025.rrr.rrr.rrr RSRE-PPSN RSRE / PPSN [BD2] + 026.rrr.rrr.rrr AUTODIN-II AUTODIN II [EC5] + 027.rrr.rrr.rrr NOSC-LCCN NOSC / LCCN [KTP] + 028.rrr.rrr.rrr WIDEBAND Wide Band Satellite Network [CJW2] + 029.rrr.rrr.rrr DCN-COMSAT COMSAT Dist. Comp. Network [DLM1] + 030.rrr.rrr.rrr DCN-UCL UCL Dist. Comp. Network [PK] + 031.rrr.rrr.rrr BBN-SAT-TEST BBN SATNET Test Network [DM11] + 032.rrr.rrr.rrr UCL-CR1 UCL Cambridge Ring 1 [PK] + 033.rrr.rrr.rrr UCL-CR2 UCL Cambridge Ring 2 [PK] + 034.rrr.rrr.rrr MATNET Mobile Access Terminal Net [DM11] + 035.rrr.rrr.rrr NULL UCL/RSRE Null Network [BD2] + + +Postel [Page 3] + + +RFC 790 September 1981 + Assigned Numbers +Network Numbers + + + 036.rrr.rrr.rrr SU-NET Stanford University Ethernet [MRC] + 037.rrr.rrr.rrr DECNET Digital Equipment Network [DRL] + 038.rrr.rrr.rrr DECNET-TEST Test Digital Equipment Net [DRL] + 039.rrr.rrr.rrr SRINET SRI Local Network [GEOF] + 040.rrr.rrr.rrr CISLNET CISL Multics Network [CH2] + 041.rrr.rrr.rrr BBN-LN-TEST BBN Local Network Testbed [KTP] + 042.rrr.rrr.rrr S1NET LLL-S1-NET [EAK] + 043.rrr.rrr.rrr INTELPOST COMSAT INTELPOST [DLM1] + 044.rrr.rrr.rrr AMPRNET Amature Radio Experiment Net [HM] + 044.rrr.rrr.rrr-126.rrr.rrr.rrr Unassigned [JBP] + 127.rrr.rrr.rrr Reserved [JBP] + + Class B Networks + + Internet Address Name Network References + ---------------- ---- ------- ---------- + 128.000.rrr.rrr Reserved [JBP] + 128.001.rrr.rrr-128.254.rrr.rrr Unassigned [JBP] + 191.255.rrr.rrr Reserved [JBP] + + Class C Networks + + Internet Address Name Network References + ---------------- ---- ------- ---------- + 192.000.001.rrr Reserved [JBP] + 192.000.001.rrr-223.255.254.rrr Unassigned [JBP] + 223.255.255.rrr Reserved [JBP] + + Other Reserved Internet Addresses + + Internet Address Name Network References + ---------------- ---- ------- ---------- + 224.000.000.000-255.255.255.255 Reserved [JBP] + + + + + + + + + + + + + + + + + +Postel [Page 4] + + +RFC 790 September 1981 + Assigned Numbers +Internet Version Numbers + + + ASSIGNED INTERNET VERSION NUMBERS + + In the Internet Protocol (IP) [33] there is a field to identify the + version of the internetwork general protocol. This field is 4 bits + in size. + + Assigned Internet Version Numbers + + Decimal Octal Version References + ------- ----- ------- ---------- + 0 0 Reserved [JBP] + 1-3 1-3 Unassigned [JBP] + 4 4 Internet Protocol [33,JBP] + 5 5 ST Datagram Mode [20,JWF] + 6-14 6-16 Unassigned [JBP] + 15 17 Reserved [JBP] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 5] + + +RFC 790 September 1981 + Assigned Numbers +Internet Protocol Numbers + + + ASSIGNED INTERNET PROTOCOL NUMBERS + + In the Internet Protocol (IP) [33] there is a field, called Protocol, + to identify the the next level protocol. This is an 8 bit field. + + Assigned Internet Protocol Numbers + + Decimal Octal Protocol Numbers References + ------- ----- ---------------- ---------- + 0 0 Reserved [JBP] + 1 1 ICMP [53,JBP] + 2 2 Unassigned [JBP] + 3 3 Gateway-to-Gateway [48,49,VMS] + 4 4 CMCC Gateway Monitoring Message [18,19,DFP] + 5 5 ST [20,JWF] + 6 6 TCP [34,JBP] + 7 7 UCL [PK] + 8 10 Unassigned [JBP] + 9 11 Secure [VGC] + 10 12 BBN RCC Monitoring [VMS] + 11 13 NVP [12,DC] + 12 14 PUP [4,EAT3] + 13 15 Pluribus [RDB2] + 14 16 Telenet [RDB2] + 15 17 XNET [25,JFH2] + 16 20 Chaos [MOON] + 17 21 User Datagram [42,JBP] + 18 22 Multiplexing [13,JBP] + 19 23 DCN [DLM1] + 20 24 TAC Monitoring [55,RH6] + 21-62 25-76 Unassigned [JBP] + 63 77 any local network [JBP] + 64 100 SATNET and Backroom EXPAK [DM11] + 65 101 MIT Subnet Support [NC3] + 66-68 102-104 Unassigned [JBP] + 69 105 SATNET Monitoring [DM11] + 70 106 Unassigned [JBP] + 71 107 Internet Packet Core Utility [DM11] + 72-75 110-113 Unassigned [JBP] + 76 114 Backroom SATNET Monitoring [DM11] + 77 115 Unassigned [JBP] + 78 116 WIDEBAND Monitoring [DM11] + 79 117 WIDEBAND EXPAK [DM11] + 80-254 120-376 Unassigned [JBP] + 255 377 Reserved [JBP] + + + + + +Postel [Page 6] + + +RFC 790 September 1981 + Assigned Numbers +Port or Socket Numbers + + + ASSIGNED PORT or SOCKET NUMBERS + + Ports are used in the TCP [34] and sockets are used in the AHHP + [28,17] to name the ends of logical connections which carry long term + conversations. For the purpose of providing services to unknown + callers a service contact socket is defined. This list specifies the + port or socket used by the server process as its contact socket. In + the AHHP an Initial Connection Procedure ICP [39,17] is used between + the user process and the server process to make the initial contact + and establish the long term connections leaving the contact socket + free to handle other callers. In the TCP no ICP is necessary since a + port may engage in many simultaneous connections. + + To the extent possible these same port assignments are used with UDP + [42]. + + The assigned ports/sockets use a small part of the possible + port/socket numbers. The assigned ports/sockets have all except the + low order eight bits cleared to zero. The low order eight bits are + specified here. + + Socket Assignments: + + General Assignments: + + Decimal Octal Description + ------- ----- ----------- + 0-63 0-77 Network Wide Standard Function + 64-131 100-203 Hosts Specific Functions + 132-223 204-337 Reserved for Future Use + 224-255 340-377 Any Experimental Function + + + + + + + + + + + + + + + + + + + +Postel [Page 7] + + +RFC 790 September 1981 + Assigned Numbers +Port or Socket Numbers + + + Specific Assignments: + + Network Standard Functions + + Decimal Octal Description References + ------- ----- ----------- ---------- + 1 1 Old Telnet [40,JBP] + 3 3 Old File Transfer [27,11,24,JBP] + 5 5 Remote Job Entry [6,17,JBP] + 7 7 Echo [35,JBP] + 9 11 Discard [32,JBP] + 11 13 Who is on or SYSTAT [JBP] + 13 15 Date and Time [JBP] + 15 17 Who is up or NETSTAT [JBP] + 17 21 Short Text Message [JBP] + 19 23 Character generator or TTYTST [31,JBP] + 21 25 New File Transfer [36,JBP] + 23 27 New Telnet [41,JBP] + 25 31 SMTP [54,JBP] + 27 33 NSW User System w/COMPASS FE [14,RHT] + 29 35 MSG-3 ICP [29,RHT] + 31 37 MSG-3 Authentication [29,RHT] + 33 41 Unassigned [JBP] + 35 43 IO Station Spooler [JBP] + 37 45 Time Server [22,JBP] + 39 47 Unassigned [JBP] + 41 51 Graphics [46,17,JBP] + 42 52 Name Server [38,JBP] + 43 53 WhoIs [JAKE] + 45 55 Message Processing Module [37,JBP] + 47 57 NI FTP [50,CJB] + 49 61 RAND Network Graphics Conference [30,MO2] + 51 63 Message Generator Control [52,DFP] + 53 65 AUTODIN II FTP [21,EC5] + 55 67 ISI Graphics Language [3,RB6] + 57 71 MTP [45,JBP] + 59 73 New MIT Host Status [SWG] + 61-63 75-77 Unassigned [JBP] + + + + + + + + + + + + +Postel [Page 8] + + +RFC 790 September 1981 + Assigned Numbers +Port or Socket Numbers + + + Host Specific Functions + + Decimal Octal Description References + ------- ----- ----------- ---------- + 65 101 Unassigned [JBP] + 67 103 Datacomputer at CCA [8,JZS] + 69 105 Unassigned [JBP] + 69 105 Trivial File Transfer [47,KRS] + 71 107 NETRJS (EBCDIC) at UCLA-CCN [5,17,RTB] + 73 111 NETRJS (ASCII-68) at UCLA-CCN [5,17,RTB] + 75 113 NETRJS (ASCII-63) at UCLA-CCN [5,17,RTB] + 77 115 any private RJE server [JBP] + 79 117 Name or Finger [23,17,KLH] + 81 121 Unassigned [JBP] + 83 123 MIT ML Device [MOON] + 85 125 MIT ML Device [MOON] + 87 127 any terminal link [JBP] + 89 131 SU/MIT Telnet Gateway [MRC] + 91 133 MIT Dover Spooler [EBM] + 93 135 BBN RCC Accounting [DT] + 95 137 SUPDUP [15,MRC] + 97 141 Datacomputer Status [8,JZS] + 99 143 CADC - NIFTP via UCL [PLH] + 101 145 NPL - NIFTP via UCL [PLH] + 103 147 BNPL - NIFTP via UCL [PLH] + 105 151 CAMBRIDGE - NIFTP via UCL [PLH] + 107 153 HARWELL - NIFTP via UCL [PLH] + 109 155 SWURCC - NIFTP via UCL [PLH] + 111 157 ESSEX - NIFTP via UCL [PLH] + 113 161 RUTHERFORD - NIFTP via UCL [PLH] + 115-129 163-201 Unassigned [JBP] + 131 203 Datacomputer [8,JZS] + + Reserved for Future Use + + Decimal Octal Description References + ------- ----- ----------- ---------- + 132-223 204-337 Reserved [JBP] + + + + + + + + + + + + +Postel [Page 9] + + +RFC 790 September 1981 + Assigned Numbers +Port or Socket Numbers + + + Experimental Functions + + Decimal Octal Description References + ------- ----- ----------- ---------- + 224-239 340-357 Unassigned [JBP] + 241 361 NCP Measurement [9,JBP] + 243 363 Survey Measurement [2,AV] + 245 365 LINK [7,RDB2] + 247 367 TIPSRV [RHT] + 249-255 371-377 RSEXEC [51,RHT] + + ASSIGNED LINK NUMBERS + + The word "link" here refers to a field in the original ARPANET + Host/IMP interface leader. The link was originally defined as an 8 + bit field. Some time after the ARPANET Host-to-Host (AHHP) protocol + was defined and, by now, some time ago the definition of this field + was changed to "Message-ID" and the length to 12 bits. The name link + now refers to the high order 8 bits of this 12 bit message-id field. + The low order 4 bits of the message-id field are to be zero unless + specifically specified otherwise for the particular protocol used on + that link. The Host/IMP interface is defined in BBN report 1822 [1]. + + Link Assignments: + + Decimal Octal Description References + ------- ----- ----------- ---------- + 0 0 AHHP Control Messages [28,17,JBP] + 1 1 Reserved [JBP] + 2-71 2-107 AHHP Regular Messages [28,17,JBP] + 72-150 110-226 Reserved [JBP] + 151 227 CHAOS Protocol [MOON] + 152 230 PARC Universal Protocol [4,EAT3] + 153 231 TIP Status Reporting [JGH] + 154 232 TIP Accounting [JGH] + 155 233 Internet Protocol (regular) [33,JBP] + 156-158 234-236 Internet Protocol (experimental) [33,JBP] + 159-191 237-277 Measurements [9,VGC] + 192-195 300-303 Unassigned [JBP] + 196-255 304-377 Experimental Protocols [JBP] + 224-255 340-377 NVP [12,17,DC] + 248-255 370-377 Network Maintenance [JGH] + + + + + + + + +Postel [Page 10] + + +RFC 790 September 1981 + Assigned Numbers +Documents + + + DOCUMENTS + --------- + + [1] BBN, "Specifications for the Interconnection of a Host and an + IMP", Report 1822, Bolt Beranek and Newman, Cambridge, + Massachusetts, May 1978. + + [2] Bhushan, A., "A Report on the Survey Project", RFC 530, + NIC 17375, 22 June 1973. + + [3] Bisbey, R., D. Hollingworth, and B. Britt, "Graphics Language + (version 2.1)", ISI/TM-80-18, USC/Information Sciences + Institute, July 1980. + + [4] Boggs, D., J. Shoch, E. Taft, and R. Metcalfe, "PUP: An + Internetwork Architecture", XEROX Palo Alto Research Center, + CSL-79-10, July 1979; also in IEEE Transactions on + Communication, Volume COM-28, Number 4, April 1980. + + [5] Braden, R., "NETRJS Protocol", RFC 740, NIC 42423, + 22 November 1977. Also in [17]. + + [6] Bressler, B., "Remote Job Entry Protocol", RFC 407, NIC + 12112, 16 October 72. Also in [17]. + + [7] Bressler, R., "Inter-Entity Communication -- An Experiment", + RFC 441, NIC 13773, 19 January 1973. + + [8] CCA, "Datacomputer Version 5/4 User Manual", Computer + Corporation of America, August 1979. + + [9] Cerf, V., "NCP Statistics", RFC 388, NIC 11360, + 23 August 1972. + + [10] Clark, D., "Revision of DSP Specification", Local Network Note + 9, Laboratory for Computer Science, MIT, 17 June 1977. + + [11] Clements, R., "FTPSRV -- Extensions for Tenex Paged Files", + RFC 683, NIC 32251, 3 April 1975. Also in [17]. + + [12] Cohen, D., "Specifications for the Network Voice Protocol + (NVP)", NSC Note 68, 29 January 1976. Also as USC/Information + Sciences Institute RR-75-39, March 1976, and as RFC 741, + NIC 42444, 22 November 1977. Also in [17]. + + [13] Cohen, D. and J. Postel, "Multiplexing Protocol", IEN 90, + USC/Information Sciences Institute, May 1979. + + + +Postel [Page 11] + + +RFC 790 September 1981 + Assigned Numbers +Documents + + + [14] COMPASS, "Semi-Annual Technical Report", CADD-7603-0411, + Massachusetts Computer Associates, 4 March 1976. Also as, + "National Software Works, Status Report No. 1", + RADC-TR-76-276, Volume 1, September 1976. And COMPASS. "Second + Semi-Annual Report", CADD-7608-1611, Massachusetts Computer + Associates, 16 August 1976. + + [15] Crispin, M., "SUPDUP Protocol", RFC 734, NIC 41953, + 7 October 1977. Also in [17]. + + [16] Crispin, M. and I. Zabala, "DIALNET Protocols", Stanford + University Artificial Intelligence Laboratory, July 1978. + + [17] Feinler, E. and J. Postel, eds., "ARPANET Protocol Handbook", + NIC 7104, for the Defense Communications Agency by SRI + International, Menlo Park, California, Revised January 1978. + + [18] Flood Page, D., "Gateway Monitoring Protocol", IEN 131, + February 1980. + + [19] Flood Page, D., "CMCC Performance Measurement Message + Formats", IEN 157, September 1980. + + [20] Forgie, J., "ST - A Proposed Internet Stream Protocol", + IEN 119, M.I.T. Lincoln Laboratory, September 1979. + + [21] Forsdick, H., and A. McKenzie, "FTP Functional Specification", + Bolt Beranek and Newman, Report 4051, August 1979. + + [22] Harrenstien, K., J. Postel, "Time Server", IEN 142, + April 1980. Also in [17]. + + [23] Harrenstien, K., "Name/Finger", RFC 742, NIC 42758, + 30 December 1977. Also in [17]. + + [24] Harvey, B., "One More Try on the FTP", RFC 691, NIC 32700, + 6 June 1975. + + [25] Haverty, J., "XNET Formats for Internet Protocol Version 4", + IEN 158, October 1980. + + [26] McCarthy, J. and L. Earnest, "DIALNET", Stanford University + Artificial Intelligence Laboratory, Undated. + + [27] McKenzie, A., "File Transfer Protocol", RFC 454, NIC 14333, + 16 February 1973. + + + + +Postel [Page 12] + + +RFC 790 September 1981 + Assigned Numbers +Documents + + + [28] McKenzie,A., "Host/Host Protocol for the ARPA Network", + NIC 8246, January 1972. Also in [17]. + + [29] NSW Protocol Committee, "MSG: The Interprocess Communication + Facility for the National Software Works", CADD-7612-2411, + Massachusetts Computer Associates, BBN 3237, Bolt Beranek and + Newman, Revised 24 December 1976. + + [30] O'Brien, M., "A Network Graphical Conferencing System", RAND + Corporation, N-1250-ARPA, August 1979. + + [31] Postel, J., "Character Generator Process", RFC 429, NIC 13281, + 12 December 1972. + + [32] Postel, J., "Discard Process", RFC 348, NIC 10427, + 30 May 1972. + + [33] Postel, J., ed., "Internet Protocol - DARPA Internet Program + Protocol Specification", RFC 791, USC/Information Sciences + Institute, September 1981. + + [34] Postel, J., ed., "Transmission Control Protocol - DARPA + Internet Program Protocol Specification", RFC 793, + USC/Information Sciences Institute, September 1981. + + [35] Postel, J., "Echo Process", RFC 347, NIC 10426, 30 May 1972. + + [36] Postel, J., "File Transfer Protocol", RFC 765, IEN 149, + June 1980. + + [37] Postel, J., "Internet Message Protocol", RFC 759, IEN 113, + USC/Information Sciences Institute, August 1980. + + [38] Postel, J., "Name Server", IEN 116, USC/Information Sciences + Institute, August 1979. + + [39] Postel, J., "Official Initial Connection Protocol", NIC 7101, + 11 June 1971. Also in [17]. + + [40] Postel, J., "Telnet Protocol", RFC 318, NIC 9348, + 3 April 1972. + + [41] Postel, J., "Telnet Protocol Specification", RFC 764, IEN 148, + June 1980. + + [42] Postel, J., "User Datagram Protocol", RFC 768 USC/Information + Sciences Institute, August 1980. + + + +Postel [Page 13] + + +RFC 790 September 1981 + Assigned Numbers +Documents + + + [43] Reed, D., "Protocols for the LCS Network", Local Network Note + 3, Laboratory for Computer Science, MIT, 29 November 1976. + + [44] Skelton, A., S. Holmgren, and D. Wood, "The MITRE Cablenet + Project", IEN 96, April 1979. + + [45] Sluizer, S., and J. Postel, "Mail Transfer Protocol", RFC 780, + USC/Information Sciences Institute, May 1981. + + [46] Sproull, R., and E. Thomas. "A Networks Graphics Protocol", + NIC 24308, 16 August 1974. Also in [17]. + + [47] Sollins, K., "The TFTP Protocol (revision 2)", RFC 783, + MIT/LCS, June 1981. + + [48] Strazisar, V., "Gateway Routing: An Implementation + Specification", IEN 30, Bolt Berenak and Newman, April 1979. + + [49] Strazisar, V., "How to Build a Gateway", IEN 109, Bolt Berenak + and Newman, August 1979. + + [50] The High Level Protocol Group, "A Network Independent File + Transfer Protocol", INWG Protocol Note 86, December 1977. + + [51] Thomas, R., "A Resource Sharing Executive for the ARPANET", + AFIPS Conference Proceedings, 42:155-163, NCC, 1973. + + [52] Flood Page, D., "A Simple Message Generator", IEN 172, Bolt + Berenak and Newman, March 1981. + + [53] Postel, J., "Internet Control Message Protocol - DARPA + Internet Program Protocol Specification", RFC 792, + USC/Information Sciences Institute, September 1981. + + [54] Postel, J., "Simple Mail Transfer Protocol", RFC 788, + USC/Information Sciences Institute, September 1981. + + [55] Littauer, B., "A Host Monitoring Protocol"", IEN 197, Bolt + Berenak and Newman, September 1981. + + + + + + + + + + + +Postel [Page 14] + + +RFC 790 September 1981 + Assigned Numbers +People + + + PEOPLE + ------ + + [DCA2] Don Allen BBN Allen@BBND + [CJB] Chris Bennett UCL UKSAT@ISIE + [RB6] Richard Bisbey ISI Bisbey@ISIB + [RTB] Bob Braden UCLA Braden@ISIA + [RDB2] Robert Bressler BBN Bressler@BBNE + [EC5] Ed Cain DCEC cain@EDN-Unix + [VGC] Vint Cerf ARPA Cerf@ISIA + [NC3] J. Noel Chiappa MIT JNC@MIT-XX + [SGC] Steve Chipman BBN Chipman@BBNA + [DDC2] David Clark MIT Clark@MIT-Multics + [DC] Danny Cohen ISI Cohen@ISIB + [MRC] Mark Crispin Stanford Admin.MRC@SU-SCORE + [BD2] Brian Davies RSRE T45@ISIE + [JAKE] Jake Feinler SRI Feinler@SRI-KL + [DFP] David Flood Page BBN DFloodPage@BBNE + [JWF] Jim Forgie LL Forgie@BBNC + [SWG] Stu Galley MIT SWG@MIT-DMS + [GEOF] Geoff Goodfellow SRI Geoff@DARCOM-KA + [KLH] Ken Harrenstien MIT KLH@MIT-AI + [JFH2] Jack Haverty BBN JHaverty@BBN-Unix + [JGH] Jim Herman BBN Herman@BBNE + [PLH] Peter Higginson UCL UKSAT@ISIE + [RH6] Robert Hinden BBN Hinden@BBNE + [CH2] Charles Hornig Honeywell Hornig@MIT-Multics + [EAK] Earl Killian LLL EAK@MIT-MC + [PK] Peter Kirstein UCL Kirstein@ISIA + [DRL] David Lyons DEC Lyons@DEC-2136 + [HM] Hank Magnuski --- --- + [JEM] Jim Mathis SRI Mathis@SRI-KL + [DM11] Dale McNeill BBN DMcNeill@BBNE + [DLM1] David Mills COMSAT Mills@ISIE + [MOON] David Moon MIT Moon@MIT-MC + [EBM] Eliot Moss MIT EBM@MIT-XX + [MO2] Michael O'Brien RAND OBrien@RAND-Unix + [KTP] Ken Pogran BBN Pogran@BBND + [JBP] Jon Postel ISI Postel@ISIF + [JZS] Joanne Sattely CCA JZS@CCA + [APS] Anita Skelton MITRE skelton@MITRE + [KRS] Karen Sollins MIT Sollins@MIT-XX + [VMS] Virginia Strazisar BBN Strazisar@BBNA + [EAT3] Ed Taft XEROX Taft.PA@PARC + [DT] Dan Tappan BBN Tappan@BBNG + [RHT] Robert Thomas BBN Thomas@BBNA + [AV] Al Vezza MIT AV@MIT-XX + [CJW2] Cliff Weinstein LL cjw@LL-11 + + +Postel [Page 15] + + diff --git a/docs/rfc791.txt b/docs/rfc791.txt new file mode 100644 index 0000000..43520f2 --- /dev/null +++ b/docs/rfc791.txt @@ -0,0 +1,2885 @@ +RFC: 791 + + + + + + + + INTERNET PROTOCOL + + + DARPA INTERNET PROGRAM + + PROTOCOL SPECIFICATION + + + + September 1981 + + + + + + + + + + + + + + prepared for + + Defense Advanced Research Projects Agency + Information Processing Techniques Office + 1400 Wilson Boulevard + Arlington, Virginia 22209 + + + + + + + + by + + Information Sciences Institute + University of Southern California + 4676 Admiralty Way + Marina del Rey, California 90291 + + + +September 1981 + Internet Protocol + + + + TABLE OF CONTENTS + + PREFACE ........................................................ iii + +1. INTRODUCTION ..................................................... 1 + + 1.1 Motivation .................................................... 1 + 1.2 Scope ......................................................... 1 + 1.3 Interfaces .................................................... 1 + 1.4 Operation ..................................................... 2 + +2. OVERVIEW ......................................................... 5 + + 2.1 Relation to Other Protocols ................................... 9 + 2.2 Model of Operation ............................................ 5 + 2.3 Function Description .......................................... 7 + 2.4 Gateways ...................................................... 9 + +3. SPECIFICATION ................................................... 11 + + 3.1 Internet Header Format ....................................... 11 + 3.2 Discussion ................................................... 23 + 3.3 Interfaces ................................................... 31 + +APPENDIX A: Examples & Scenarios ................................... 34 +APPENDIX B: Data Transmission Order ................................ 39 + +GLOSSARY ............................................................ 41 + +REFERENCES .......................................................... 45 + + + + + + + + + + + + + + + + + + + + + + [Page i] + + + September 1981 +Internet Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page ii] + + +September 1981 + Internet Protocol + + + + PREFACE + + + +This document specifies the DoD Standard Internet Protocol. This +document is based on six earlier editions of the ARPA Internet Protocol +Specification, and the present text draws heavily from them. There have +been many contributors to this work both in terms of concepts and in +terms of text. This edition revises aspects of addressing, error +handling, option codes, and the security, precedence, compartments, and +handling restriction features of the internet protocol. + + Jon Postel + + Editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Page iii] + + + + September 1981 + + +RFC: 791 +Replaces: RFC 760 +IENs 128, 123, 111, +80, 54, 44, 41, 28, 26 + + INTERNET PROTOCOL + + DARPA INTERNET PROGRAM + PROTOCOL SPECIFICATION + + + + 1. INTRODUCTION + +1.1. Motivation + + The Internet Protocol is designed for use in interconnected systems of + packet-switched computer communication networks. Such a system has + been called a "catenet" [1]. The internet protocol provides for + transmitting blocks of data called datagrams from sources to + destinations, where sources and destinations are hosts identified by + fixed length addresses. The internet protocol also provides for + fragmentation and reassembly of long datagrams, if necessary, for + transmission through "small packet" networks. + +1.2. Scope + + The internet protocol is specifically limited in scope to provide the + functions necessary to deliver a package of bits (an internet + datagram) from a source to a destination over an interconnected system + of networks. There are no mechanisms to augment end-to-end data + reliability, flow control, sequencing, or other services commonly + found in host-to-host protocols. The internet protocol can capitalize + on the services of its supporting networks to provide various types + and qualities of service. + +1.3. Interfaces + + This protocol is called on by host-to-host protocols in an internet + environment. This protocol calls on local network protocols to carry + the internet datagram to the next gateway or destination host. + + For example, a TCP module would call on the internet module to take a + TCP segment (including the TCP header and user data) as the data + portion of an internet datagram. The TCP module would provide the + addresses and other parameters in the internet header to the internet + module as arguments of the call. The internet module would then + create an internet datagram and call on the local network interface to + transmit the internet datagram. + + In the ARPANET case, for example, the internet module would call on a + + + [Page 1] + + + September 1981 +Internet Protocol +Introduction + + + + local net module which would add the 1822 leader [2] to the internet + datagram creating an ARPANET message to transmit to the IMP. The + ARPANET address would be derived from the internet address by the + local network interface and would be the address of some host in the + ARPANET, that host might be a gateway to other networks. + +1.4. Operation + + The internet protocol implements two basic functions: addressing and + fragmentation. + + The internet modules use the addresses carried in the internet header + to transmit internet datagrams toward their destinations. The + selection of a path for transmission is called routing. + + The internet modules use fields in the internet header to fragment and + reassemble internet datagrams when necessary for transmission through + "small packet" networks. + + The model of operation is that an internet module resides in each host + engaged in internet communication and in each gateway that + interconnects networks. These modules share common rules for + interpreting address fields and for fragmenting and assembling + internet datagrams. In addition, these modules (especially in + gateways) have procedures for making routing decisions and other + functions. + + The internet protocol treats each internet datagram as an independent + entity unrelated to any other internet datagram. There are no + connections or logical circuits (virtual or otherwise). + + The internet protocol uses four key mechanisms in providing its + service: Type of Service, Time to Live, Options, and Header Checksum. + + The Type of Service is used to indicate the quality of the service + desired. The type of service is an abstract or generalized set of + parameters which characterize the service choices provided in the + networks that make up the internet. This type of service indication + is to be used by gateways to select the actual transmission parameters + for a particular network, the network to be used for the next hop, or + the next gateway when routing an internet datagram. + + The Time to Live is an indication of an upper bound on the lifetime of + an internet datagram. It is set by the sender of the datagram and + reduced at the points along the route where it is processed. If the + time to live reaches zero before the internet datagram reaches its + destination, the internet datagram is destroyed. The time to live can + be thought of as a self destruct time limit. + + +[Page 2] + + +September 1981 + Internet Protocol + Introduction + + + + The Options provide for control functions needed or useful in some + situations but unnecessary for the most common communications. The + options include provisions for timestamps, security, and special + routing. + + The Header Checksum provides a verification that the information used + in processing internet datagram has been transmitted correctly. The + data may contain errors. If the header checksum fails, the internet + datagram is discarded at once by the entity which detects the error. + + The internet protocol does not provide a reliable communication + facility. There are no acknowledgments either end-to-end or + hop-by-hop. There is no error control for data, only a header + checksum. There are no retransmissions. There is no flow control. + + Errors detected may be reported via the Internet Control Message + Protocol (ICMP) [3] which is implemented in the internet protocol + module. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Page 3] + + + September 1981 +Internet Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 4] + + +September 1981 + Internet Protocol + + + + 2. OVERVIEW + +2.1. Relation to Other Protocols + + The following diagram illustrates the place of the internet protocol + in the protocol hierarchy: + + + +------+ +-----+ +-----+ +-----+ + |Telnet| | FTP | | TFTP| ... | ... | + +------+ +-----+ +-----+ +-----+ + | | | | + +-----+ +-----+ +-----+ + | TCP | | UDP | ... | ... | + +-----+ +-----+ +-----+ + | | | + +--------------------------+----+ + | Internet Protocol & ICMP | + +--------------------------+----+ + | + +---------------------------+ + | Local Network Protocol | + +---------------------------+ + + Protocol Relationships + + Figure 1. + + Internet protocol interfaces on one side to the higher level + host-to-host protocols and on the other side to the local network + protocol. In this context a "local network" may be a small network in + a building or a large network such as the ARPANET. + +2.2. Model of Operation + + The model of operation for transmitting a datagram from one + application program to another is illustrated by the following + scenario: + + We suppose that this transmission will involve one intermediate + gateway. + + The sending application program prepares its data and calls on its + local internet module to send that data as a datagram and passes the + destination address and other parameters as arguments of the call. + + The internet module prepares a datagram header and attaches the data + to it. The internet module determines a local network address for + this internet address, in this case it is the address of a gateway. + + + [Page 5] + + + September 1981 +Internet Protocol +Overview + + + + It sends this datagram and the local network address to the local + network interface. + + The local network interface creates a local network header, and + attaches the datagram to it, then sends the result via the local + network. + + The datagram arrives at a gateway host wrapped in the local network + header, the local network interface strips off this header, and + turns the datagram over to the internet module. The internet module + determines from the internet address that the datagram is to be + forwarded to another host in a second network. The internet module + determines a local net address for the destination host. It calls + on the local network interface for that network to send the + datagram. + + This local network interface creates a local network header and + attaches the datagram sending the result to the destination host. + + At this destination host the datagram is stripped of the local net + header by the local network interface and handed to the internet + module. + + The internet module determines that the datagram is for an + application program in this host. It passes the data to the + application program in response to a system call, passing the source + address and other parameters as results of the call. + + + Application Application + Program Program + \ / + Internet Module Internet Module Internet Module + \ / \ / + LNI-1 LNI-1 LNI-2 LNI-2 + \ / \ / + Local Network 1 Local Network 2 + + + + Transmission Path + + Figure 2 + + + + + + + +[Page 6] + + +September 1981 + Internet Protocol + Overview + + + +2.3. Function Description + + The function or purpose of Internet Protocol is to move datagrams + through an interconnected set of networks. This is done by passing + the datagrams from one internet module to another until the + destination is reached. The internet modules reside in hosts and + gateways in the internet system. The datagrams are routed from one + internet module to another through individual networks based on the + interpretation of an internet address. Thus, one important mechanism + of the internet protocol is the internet address. + + In the routing of messages from one internet module to another, + datagrams may need to traverse a network whose maximum packet size is + smaller than the size of the datagram. To overcome this difficulty, a + fragmentation mechanism is provided in the internet protocol. + + Addressing + + A distinction is made between names, addresses, and routes [4]. A + name indicates what we seek. An address indicates where it is. A + route indicates how to get there. The internet protocol deals + primarily with addresses. It is the task of higher level (i.e., + host-to-host or application) protocols to make the mapping from + names to addresses. The internet module maps internet addresses to + local net addresses. It is the task of lower level (i.e., local net + or gateways) procedures to make the mapping from local net addresses + to routes. + + Addresses are fixed length of four octets (32 bits). An address + begins with a network number, followed by local address (called the + "rest" field). There are three formats or classes of internet + addresses: in class a, the high order bit is zero, the next 7 bits + are the network, and the last 24 bits are the local address; in + class b, the high order two bits are one-zero, the next 14 bits are + the network and the last 16 bits are the local address; in class c, + the high order three bits are one-one-zero, the next 21 bits are the + network and the last 8 bits are the local address. + + Care must be taken in mapping internet addresses to local net + addresses; a single physical host must be able to act as if it were + several distinct hosts to the extent of using several distinct + internet addresses. Some hosts will also have several physical + interfaces (multi-homing). + + That is, provision must be made for a host to have several physical + interfaces to the network with each having several logical internet + addresses. + + + + [Page 7] + + + September 1981 +Internet Protocol +Overview + + + + Examples of address mappings may be found in "Address Mappings" [5]. + + Fragmentation + + Fragmentation of an internet datagram is necessary when it + originates in a local net that allows a large packet size and must + traverse a local net that limits packets to a smaller size to reach + its destination. + + An internet datagram can be marked "don't fragment." Any internet + datagram so marked is not to be internet fragmented under any + circumstances. If internet datagram marked don't fragment cannot be + delivered to its destination without fragmenting it, it is to be + discarded instead. + + Fragmentation, transmission and reassembly across a local network + which is invisible to the internet protocol module is called + intranet fragmentation and may be used [6]. + + The internet fragmentation and reassembly procedure needs to be able + to break a datagram into an almost arbitrary number of pieces that + can be later reassembled. The receiver of the fragments uses the + identification field to ensure that fragments of different datagrams + are not mixed. The fragment offset field tells the receiver the + position of a fragment in the original datagram. The fragment + offset and length determine the portion of the original datagram + covered by this fragment. The more-fragments flag indicates (by + being reset) the last fragment. These fields provide sufficient + information to reassemble datagrams. + + The identification field is used to distinguish the fragments of one + datagram from those of another. The originating protocol module of + an internet datagram sets the identification field to a value that + must be unique for that source-destination pair and protocol for the + time the datagram will be active in the internet system. The + originating protocol module of a complete datagram sets the + more-fragments flag to zero and the fragment offset to zero. + + To fragment a long internet datagram, an internet protocol module + (for example, in a gateway), creates two new internet datagrams and + copies the contents of the internet header fields from the long + datagram into both new internet headers. The data of the long + datagram is divided into two portions on a 8 octet (64 bit) boundary + (the second portion might not be an integral multiple of 8 octets, + but the first must be). Call the number of 8 octet blocks in the + first portion NFB (for Number of Fragment Blocks). The first + portion of the data is placed in the first new internet datagram, + and the total length field is set to the length of the first + + +[Page 8] + + +September 1981 + Internet Protocol + Overview + + + + datagram. The more-fragments flag is set to one. The second + portion of the data is placed in the second new internet datagram, + and the total length field is set to the length of the second + datagram. The more-fragments flag carries the same value as the + long datagram. The fragment offset field of the second new internet + datagram is set to the value of that field in the long datagram plus + NFB. + + This procedure can be generalized for an n-way split, rather than + the two-way split described. + + To assemble the fragments of an internet datagram, an internet + protocol module (for example at a destination host) combines + internet datagrams that all have the same value for the four fields: + identification, source, destination, and protocol. The combination + is done by placing the data portion of each fragment in the relative + position indicated by the fragment offset in that fragment's + internet header. The first fragment will have the fragment offset + zero, and the last fragment will have the more-fragments flag reset + to zero. + +2.4. Gateways + + Gateways implement internet protocol to forward datagrams between + networks. Gateways also implement the Gateway to Gateway Protocol + (GGP) [7] to coordinate routing and other internet control + information. + + In a gateway the higher level protocols need not be implemented and + the GGP functions are added to the IP module. + + + +-------------------------------+ + | Internet Protocol & ICMP & GGP| + +-------------------------------+ + | | + +---------------+ +---------------+ + | Local Net | | Local Net | + +---------------+ +---------------+ + + Gateway Protocols + + Figure 3. + + + + + + + + [Page 9] + + + September 1981 +Internet Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 10] + + +September 1981 + Internet Protocol + + + + 3. SPECIFICATION + +3.1. Internet Header Format + + A summary of the contents of the internet header follows: + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Version| IHL |Type of Service| Total Length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Identification |Flags| Fragment Offset | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Time to Live | Protocol | Header Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Source Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Destination Address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Options | Padding | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Example Internet Datagram Header + + Figure 4. + + Note that each tick mark represents one bit position. + + Version: 4 bits + + The Version field indicates the format of the internet header. This + document describes version 4. + + IHL: 4 bits + + Internet Header Length is the length of the internet header in 32 + bit words, and thus points to the beginning of the data. Note that + the minimum value for a correct header is 5. + + + + + + + + + + + + + [Page 11] + + + September 1981 +Internet Protocol +Specification + + + + Type of Service: 8 bits + + The Type of Service provides an indication of the abstract + parameters of the quality of service desired. These parameters are + to be used to guide the selection of the actual service parameters + when transmitting a datagram through a particular network. Several + networks offer service precedence, which somehow treats high + precedence traffic as more important than other traffic (generally + by accepting only traffic above a certain precedence at time of high + load). The major choice is a three way tradeoff between low-delay, + high-reliability, and high-throughput. + + Bits 0-2: Precedence. + Bit 3: 0 = Normal Delay, 1 = Low Delay. + Bits 4: 0 = Normal Throughput, 1 = High Throughput. + Bits 5: 0 = Normal Relibility, 1 = High Relibility. + Bit 6-7: Reserved for Future Use. + + 0 1 2 3 4 5 6 7 + +-----+-----+-----+-----+-----+-----+-----+-----+ + | | | | | | | + | PRECEDENCE | D | T | R | 0 | 0 | + | | | | | | | + +-----+-----+-----+-----+-----+-----+-----+-----+ + + Precedence + + 111 - Network Control + 110 - Internetwork Control + 101 - CRITIC/ECP + 100 - Flash Override + 011 - Flash + 010 - Immediate + 001 - Priority + 000 - Routine + + The use of the Delay, Throughput, and Reliability indications may + increase the cost (in some sense) of the service. In many networks + better performance for one of these parameters is coupled with worse + performance on another. Except for very unusual cases at most two + of these three indications should be set. + + The type of service is used to specify the treatment of the datagram + during its transmission through the internet system. Example + mappings of the internet type of service to the actual service + provided on networks such as AUTODIN II, ARPANET, SATNET, and PRNET + is given in "Service Mappings" [8]. + + + +[Page 12] + + +September 1981 + Internet Protocol + Specification + + + + The Network Control precedence designation is intended to be used + within a network only. The actual use and control of that + designation is up to each network. The Internetwork Control + designation is intended for use by gateway control originators only. + If the actual use of these precedence designations is of concern to + a particular network, it is the responsibility of that network to + control the access to, and use of, those precedence designations. + + Total Length: 16 bits + + Total Length is the length of the datagram, measured in octets, + including internet header and data. This field allows the length of + a datagram to be up to 65,535 octets. Such long datagrams are + impractical for most hosts and networks. All hosts must be prepared + to accept datagrams of up to 576 octets (whether they arrive whole + or in fragments). It is recommended that hosts only send datagrams + larger than 576 octets if they have assurance that the destination + is prepared to accept the larger datagrams. + + The number 576 is selected to allow a reasonable sized data block to + be transmitted in addition to the required header information. For + example, this size allows a data block of 512 octets plus 64 header + octets to fit in a datagram. The maximal internet header is 60 + octets, and a typical internet header is 20 octets, allowing a + margin for headers of higher level protocols. + + Identification: 16 bits + + An identifying value assigned by the sender to aid in assembling the + fragments of a datagram. + + Flags: 3 bits + + Various Control Flags. + + Bit 0: reserved, must be zero + Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment. + Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments. + + 0 1 2 + +---+---+---+ + | | D | M | + | 0 | F | F | + +---+---+---+ + + Fragment Offset: 13 bits + + This field indicates where in the datagram this fragment belongs. + + + [Page 13] + + + September 1981 +Internet Protocol +Specification + + + + The fragment offset is measured in units of 8 octets (64 bits). The + first fragment has offset zero. + + Time to Live: 8 bits + + This field indicates the maximum time the datagram is allowed to + remain in the internet system. If this field contains the value + zero, then the datagram must be destroyed. This field is modified + in internet header processing. The time is measured in units of + seconds, but since every module that processes a datagram must + decrease the TTL by at least one even if it process the datagram in + less than a second, the TTL must be thought of only as an upper + bound on the time a datagram may exist. The intention is to cause + undeliverable datagrams to be discarded, and to bound the maximum + datagram lifetime. + + Protocol: 8 bits + + This field indicates the next level protocol used in the data + portion of the internet datagram. The values for various protocols + are specified in "Assigned Numbers" [9]. + + Header Checksum: 16 bits + + A checksum on the header only. Since some header fields change + (e.g., time to live), this is recomputed and verified at each point + that the internet header is processed. + + The checksum algorithm is: + + The checksum field is the 16 bit one's complement of the one's + complement sum of all 16 bit words in the header. For purposes of + computing the checksum, the value of the checksum field is zero. + + This is a simple to compute checksum and experimental evidence + indicates it is adequate, but it is provisional and may be replaced + by a CRC procedure, depending on further experience. + + Source Address: 32 bits + + The source address. See section 3.2. + + Destination Address: 32 bits + + The destination address. See section 3.2. + + + + + +[Page 14] + + +September 1981 + Internet Protocol + Specification + + + + Options: variable + + The options may appear or not in datagrams. They must be + implemented by all IP modules (host and gateways). What is optional + is their transmission in any particular datagram, not their + implementation. + + In some environments the security option may be required in all + datagrams. + + The option field is variable in length. There may be zero or more + options. There are two cases for the format of an option: + + Case 1: A single octet of option-type. + + Case 2: An option-type octet, an option-length octet, and the + actual option-data octets. + + The option-length octet counts the option-type octet and the + option-length octet as well as the option-data octets. + + The option-type octet is viewed as having 3 fields: + + 1 bit copied flag, + 2 bits option class, + 5 bits option number. + + The copied flag indicates that this option is copied into all + fragments on fragmentation. + + 0 = not copied + 1 = copied + + The option classes are: + + 0 = control + 1 = reserved for future use + 2 = debugging and measurement + 3 = reserved for future use + + + + + + + + + + + + [Page 15] + + + September 1981 +Internet Protocol +Specification + + + + The following internet options are defined: + + CLASS NUMBER LENGTH DESCRIPTION + ----- ------ ------ ----------- + 0 0 - End of Option list. This option occupies only + 1 octet; it has no length octet. + 0 1 - No Operation. This option occupies only 1 + octet; it has no length octet. + 0 2 11 Security. Used to carry Security, + Compartmentation, User Group (TCC), and + Handling Restriction Codes compatible with DOD + requirements. + 0 3 var. Loose Source Routing. Used to route the + internet datagram based on information + supplied by the source. + 0 9 var. Strict Source Routing. Used to route the + internet datagram based on information + supplied by the source. + 0 7 var. Record Route. Used to trace the route an + internet datagram takes. + 0 8 4 Stream ID. Used to carry the stream + identifier. + 2 4 var. Internet Timestamp. + + + + Specific Option Definitions + + End of Option List + + +--------+ + |00000000| + +--------+ + Type=0 + + This option indicates the end of the option list. This might + not coincide with the end of the internet header according to + the internet header length. This is used at the end of all + options, not the end of each option, and need only be used if + the end of the options would not otherwise coincide with the end + of the internet header. + + May be copied, introduced, or deleted on fragmentation, or for + any other reason. + + + + + + +[Page 16] + + +September 1981 + Internet Protocol + Specification + + + + No Operation + + +--------+ + |00000001| + +--------+ + Type=1 + + This option may be used between options, for example, to align + the beginning of a subsequent option on a 32 bit boundary. + + May be copied, introduced, or deleted on fragmentation, or for + any other reason. + + Security + + This option provides a way for hosts to send security, + compartmentation, handling restrictions, and TCC (closed user + group) parameters. The format for this option is as follows: + + +--------+--------+---//---+---//---+---//---+---//---+ + |10000010|00001011|SSS SSS|CCC CCC|HHH HHH| TCC | + +--------+--------+---//---+---//---+---//---+---//---+ + Type=130 Length=11 + + Security (S field): 16 bits + + Specifies one of 16 levels of security (eight of which are + reserved for future use). + + 00000000 00000000 - Unclassified + 11110001 00110101 - Confidential + 01111000 10011010 - EFTO + 10111100 01001101 - MMMM + 01011110 00100110 - PROG + 10101111 00010011 - Restricted + 11010111 10001000 - Secret + 01101011 11000101 - Top Secret + 00110101 11100010 - (Reserved for future use) + 10011010 11110001 - (Reserved for future use) + 01001101 01111000 - (Reserved for future use) + 00100100 10111101 - (Reserved for future use) + 00010011 01011110 - (Reserved for future use) + 10001001 10101111 - (Reserved for future use) + 11000100 11010110 - (Reserved for future use) + 11100010 01101011 - (Reserved for future use) + + + + + + [Page 17] + + + September 1981 +Internet Protocol +Specification + + + + Compartments (C field): 16 bits + + An all zero value is used when the information transmitted is + not compartmented. Other values for the compartments field + may be obtained from the Defense Intelligence Agency. + + Handling Restrictions (H field): 16 bits + + The values for the control and release markings are + alphanumeric digraphs and are defined in the Defense + Intelligence Agency Manual DIAM 65-19, "Standard Security + Markings". + + Transmission Control Code (TCC field): 24 bits + + Provides a means to segregate traffic and define controlled + communities of interest among subscribers. The TCC values are + trigraphs, and are available from HQ DCA Code 530. + + Must be copied on fragmentation. This option appears at most + once in a datagram. + + Loose Source and Record Route + + +--------+--------+--------+---------//--------+ + |10000011| length | pointer| route data | + +--------+--------+--------+---------//--------+ + Type=131 + + The loose source and record route (LSRR) option provides a means + for the source of an internet datagram to supply routing + information to be used by the gateways in forwarding the + datagram to the destination, and to record the route + information. + + The option begins with the option type code. The second octet + is the option length which includes the option type code and the + length octet, the pointer octet, and length-3 octets of route + data. The third octet is the pointer into the route data + indicating the octet which begins the next source address to be + processed. The pointer is relative to this option, and the + smallest legal value for the pointer is 4. + + A route data is composed of a series of internet addresses. + Each internet address is 32 bits or 4 octets. If the pointer is + greater than the length, the source route is empty (and the + recorded route full) and the routing is to be based on the + destination address field. + + +[Page 18] + + +September 1981 + Internet Protocol + Specification + + + + If the address in destination address field has been reached and + the pointer is not greater than the length, the next address in + the source route replaces the address in the destination address + field, and the recorded route address replaces the source + address just used, and pointer is increased by four. + + The recorded route address is the internet module's own internet + address as known in the environment into which this datagram is + being forwarded. + + This procedure of replacing the source route with the recorded + route (though it is in the reverse of the order it must be in to + be used as a source route) means the option (and the IP header + as a whole) remains a constant length as the datagram progresses + through the internet. + + This option is a loose source route because the gateway or host + IP is allowed to use any route of any number of other + intermediate gateways to reach the next address in the route. + + Must be copied on fragmentation. Appears at most once in a + datagram. + + Strict Source and Record Route + + +--------+--------+--------+---------//--------+ + |10001001| length | pointer| route data | + +--------+--------+--------+---------//--------+ + Type=137 + + The strict source and record route (SSRR) option provides a + means for the source of an internet datagram to supply routing + information to be used by the gateways in forwarding the + datagram to the destination, and to record the route + information. + + The option begins with the option type code. The second octet + is the option length which includes the option type code and the + length octet, the pointer octet, and length-3 octets of route + data. The third octet is the pointer into the route data + indicating the octet which begins the next source address to be + processed. The pointer is relative to this option, and the + smallest legal value for the pointer is 4. + + A route data is composed of a series of internet addresses. + Each internet address is 32 bits or 4 octets. If the pointer is + greater than the length, the source route is empty (and the + + + + [Page 19] + + + September 1981 +Internet Protocol +Specification + + + + recorded route full) and the routing is to be based on the + destination address field. + + If the address in destination address field has been reached and + the pointer is not greater than the length, the next address in + the source route replaces the address in the destination address + field, and the recorded route address replaces the source + address just used, and pointer is increased by four. + + The recorded route address is the internet module's own internet + address as known in the environment into which this datagram is + being forwarded. + + This procedure of replacing the source route with the recorded + route (though it is in the reverse of the order it must be in to + be used as a source route) means the option (and the IP header + as a whole) remains a constant length as the datagram progresses + through the internet. + + This option is a strict source route because the gateway or host + IP must send the datagram directly to the next address in the + source route through only the directly connected network + indicated in the next address to reach the next gateway or host + specified in the route. + + Must be copied on fragmentation. Appears at most once in a + datagram. + + Record Route + + +--------+--------+--------+---------//--------+ + |00000111| length | pointer| route data | + +--------+--------+--------+---------//--------+ + Type=7 + + The record route option provides a means to record the route of + an internet datagram. + + The option begins with the option type code. The second octet + is the option length which includes the option type code and the + length octet, the pointer octet, and length-3 octets of route + data. The third octet is the pointer into the route data + indicating the octet which begins the next area to store a route + address. The pointer is relative to this option, and the + smallest legal value for the pointer is 4. + + A recorded route is composed of a series of internet addresses. + Each internet address is 32 bits or 4 octets. If the pointer is + + +[Page 20] + + +September 1981 + Internet Protocol + Specification + + + + greater than the length, the recorded route data area is full. + The originating host must compose this option with a large + enough route data area to hold all the address expected. The + size of the option does not change due to adding addresses. The + intitial contents of the route data area must be zero. + + When an internet module routes a datagram it checks to see if + the record route option is present. If it is, it inserts its + own internet address as known in the environment into which this + datagram is being forwarded into the recorded route begining at + the octet indicated by the pointer, and increments the pointer + by four. + + If the route data area is already full (the pointer exceeds the + length) the datagram is forwarded without inserting the address + into the recorded route. If there is some room but not enough + room for a full address to be inserted, the original datagram is + considered to be in error and is discarded. In either case an + ICMP parameter problem message may be sent to the source + host [3]. + + Not copied on fragmentation, goes in first fragment only. + Appears at most once in a datagram. + + Stream Identifier + + +--------+--------+--------+--------+ + |10001000|00000010| Stream ID | + +--------+--------+--------+--------+ + Type=136 Length=4 + + This option provides a way for the 16-bit SATNET stream + identifier to be carried through networks that do not support + the stream concept. + + Must be copied on fragmentation. Appears at most once in a + datagram. + + + + + + + + + + + + + + [Page 21] + + + September 1981 +Internet Protocol +Specification + + + + Internet Timestamp + + +--------+--------+--------+--------+ + |01000100| length | pointer|oflw|flg| + +--------+--------+--------+--------+ + | internet address | + +--------+--------+--------+--------+ + | timestamp | + +--------+--------+--------+--------+ + | . | + . + . + Type = 68 + + The Option Length is the number of octets in the option counting + the type, length, pointer, and overflow/flag octets (maximum + length 40). + + The Pointer is the number of octets from the beginning of this + option to the end of timestamps plus one (i.e., it points to the + octet beginning the space for next timestamp). The smallest + legal value is 5. The timestamp area is full when the pointer + is greater than the length. + + The Overflow (oflw) [4 bits] is the number of IP modules that + cannot register timestamps due to lack of space. + + The Flag (flg) [4 bits] values are + + 0 -- time stamps only, stored in consecutive 32-bit words, + + 1 -- each timestamp is preceded with internet address of the + registering entity, + + 3 -- the internet address fields are prespecified. An IP + module only registers its timestamp if it matches its own + address with the next specified internet address. + + The Timestamp is a right-justified, 32-bit timestamp in + milliseconds since midnight UT. If the time is not available in + milliseconds or cannot be provided with respect to midnight UT + then any time may be inserted as a timestamp provided the high + order bit of the timestamp field is set to one to indicate the + use of a non-standard value. + + The originating host must compose this option with a large + enough timestamp data area to hold all the timestamp information + expected. The size of the option does not change due to adding + + +[Page 22] + + +September 1981 + Internet Protocol + Specification + + + + timestamps. The intitial contents of the timestamp data area + must be zero or internet address/zero pairs. + + If the timestamp data area is already full (the pointer exceeds + the length) the datagram is forwarded without inserting the + timestamp, but the overflow count is incremented by one. + + If there is some room but not enough room for a full timestamp + to be inserted, or the overflow count itself overflows, the + original datagram is considered to be in error and is discarded. + In either case an ICMP parameter problem message may be sent to + the source host [3]. + + The timestamp option is not copied upon fragmentation. It is + carried in the first fragment. Appears at most once in a + datagram. + + Padding: variable + + The internet header padding is used to ensure that the internet + header ends on a 32 bit boundary. The padding is zero. + +3.2. Discussion + + The implementation of a protocol must be robust. Each implementation + must expect to interoperate with others created by different + individuals. While the goal of this specification is to be explicit + about the protocol there is the possibility of differing + interpretations. In general, an implementation must be conservative + in its sending behavior, and liberal in its receiving behavior. That + is, it must be careful to send well-formed datagrams, but must accept + any datagram that it can interpret (e.g., not object to technical + errors where the meaning is still clear). + + The basic internet service is datagram oriented and provides for the + fragmentation of datagrams at gateways, with reassembly taking place + at the destination internet protocol module in the destination host. + Of course, fragmentation and reassembly of datagrams within a network + or by private agreement between the gateways of a network is also + allowed since this is transparent to the internet protocols and the + higher-level protocols. This transparent type of fragmentation and + reassembly is termed "network-dependent" (or intranet) fragmentation + and is not discussed further here. + + Internet addresses distinguish sources and destinations to the host + level and provide a protocol field as well. It is assumed that each + protocol will provide for whatever multiplexing is necessary within a + host. + + + [Page 23] + + + September 1981 +Internet Protocol +Specification + + + + Addressing + + To provide for flexibility in assigning address to networks and + allow for the large number of small to intermediate sized networks + the interpretation of the address field is coded to specify a small + number of networks with a large number of host, a moderate number of + networks with a moderate number of hosts, and a large number of + networks with a small number of hosts. In addition there is an + escape code for extended addressing mode. + + Address Formats: + + High Order Bits Format Class + --------------- ------------------------------- ----- + 0 7 bits of net, 24 bits of host a + 10 14 bits of net, 16 bits of host b + 110 21 bits of net, 8 bits of host c + 111 escape to extended addressing mode + + A value of zero in the network field means this network. This is + only used in certain ICMP messages. The extended addressing mode + is undefined. Both of these features are reserved for future use. + + The actual values assigned for network addresses is given in + "Assigned Numbers" [9]. + + The local address, assigned by the local network, must allow for a + single physical host to act as several distinct internet hosts. + That is, there must be a mapping between internet host addresses and + network/host interfaces that allows several internet addresses to + correspond to one interface. It must also be allowed for a host to + have several physical interfaces and to treat the datagrams from + several of them as if they were all addressed to a single host. + + Address mappings between internet addresses and addresses for + ARPANET, SATNET, PRNET, and other networks are described in "Address + Mappings" [5]. + + Fragmentation and Reassembly. + + The internet identification field (ID) is used together with the + source and destination address, and the protocol fields, to identify + datagram fragments for reassembly. + + The More Fragments flag bit (MF) is set if the datagram is not the + last fragment. The Fragment Offset field identifies the fragment + location, relative to the beginning of the original unfragmented + datagram. Fragments are counted in units of 8 octets. The + + +[Page 24] + + +September 1981 + Internet Protocol + Specification + + + + fragmentation strategy is designed so than an unfragmented datagram + has all zero fragmentation information (MF = 0, fragment offset = + 0). If an internet datagram is fragmented, its data portion must be + broken on 8 octet boundaries. + + This format allows 2**13 = 8192 fragments of 8 octets each for a + total of 65,536 octets. Note that this is consistent with the the + datagram total length field (of course, the header is counted in the + total length and not in the fragments). + + When fragmentation occurs, some options are copied, but others + remain with the first fragment only. + + Every internet module must be able to forward a datagram of 68 + octets without further fragmentation. This is because an internet + header may be up to 60 octets, and the minimum fragment is 8 octets. + + Every internet destination must be able to receive a datagram of 576 + octets either in one piece or in fragments to be reassembled. + + The fields which may be affected by fragmentation include: + + (1) options field + (2) more fragments flag + (3) fragment offset + (4) internet header length field + (5) total length field + (6) header checksum + + If the Don't Fragment flag (DF) bit is set, then internet + fragmentation of this datagram is NOT permitted, although it may be + discarded. This can be used to prohibit fragmentation in cases + where the receiving host does not have sufficient resources to + reassemble internet fragments. + + One example of use of the Don't Fragment feature is to down line + load a small host. A small host could have a boot strap program + that accepts a datagram stores it in memory and then executes it. + + The fragmentation and reassembly procedures are most easily + described by examples. The following procedures are example + implementations. + + General notation in the following pseudo programs: "=<" means "less + than or equal", "#" means "not equal", "=" means "equal", "<-" means + "is set to". Also, "x to y" includes x and excludes y; for example, + "4 to 7" would include 4, 5, and 6 (but not 7). + + + + [Page 25] + + + September 1981 +Internet Protocol +Specification + + + + An Example Fragmentation Procedure + + The maximum sized datagram that can be transmitted through the + next network is called the maximum transmission unit (MTU). + + If the total length is less than or equal the maximum transmission + unit then submit this datagram to the next step in datagram + processing; otherwise cut the datagram into two fragments, the + first fragment being the maximum size, and the second fragment + being the rest of the datagram. The first fragment is submitted + to the next step in datagram processing, while the second fragment + is submitted to this procedure in case it is still too large. + + Notation: + + FO - Fragment Offset + IHL - Internet Header Length + DF - Don't Fragment flag + MF - More Fragments flag + TL - Total Length + OFO - Old Fragment Offset + OIHL - Old Internet Header Length + OMF - Old More Fragments flag + OTL - Old Total Length + NFB - Number of Fragment Blocks + MTU - Maximum Transmission Unit + + Procedure: + + IF TL =< MTU THEN Submit this datagram to the next step + in datagram processing ELSE IF DF = 1 THEN discard the + datagram ELSE + To produce the first fragment: + (1) Copy the original internet header; + (2) OIHL <- IHL; OTL <- TL; OFO <- FO; OMF <- MF; + (3) NFB <- (MTU-IHL*4)/8; + (4) Attach the first NFB*8 data octets; + (5) Correct the header: + MF <- 1; TL <- (IHL*4)+(NFB*8); + Recompute Checksum; + (6) Submit this fragment to the next step in + datagram processing; + To produce the second fragment: + (7) Selectively copy the internet header (some options + are not copied, see option definitions); + (8) Append the remaining data; + (9) Correct the header: + IHL <- (((OIHL*4)-(length of options not copied))+3)/4; + + +[Page 26] + + +September 1981 + Internet Protocol + Specification + + + + TL <- OTL - NFB*8 - (OIHL-IHL)*4); + FO <- OFO + NFB; MF <- OMF; Recompute Checksum; + (10) Submit this fragment to the fragmentation test; DONE. + + In the above procedure each fragment (except the last) was made + the maximum allowable size. An alternative might produce less + than the maximum size datagrams. For example, one could implement + a fragmentation procedure that repeatly divided large datagrams in + half until the resulting fragments were less than the maximum + transmission unit size. + + An Example Reassembly Procedure + + For each datagram the buffer identifier is computed as the + concatenation of the source, destination, protocol, and + identification fields. If this is a whole datagram (that is both + the fragment offset and the more fragments fields are zero), then + any reassembly resources associated with this buffer identifier + are released and the datagram is forwarded to the next step in + datagram processing. + + If no other fragment with this buffer identifier is on hand then + reassembly resources are allocated. The reassembly resources + consist of a data buffer, a header buffer, a fragment block bit + table, a total data length field, and a timer. The data from the + fragment is placed in the data buffer according to its fragment + offset and length, and bits are set in the fragment block bit + table corresponding to the fragment blocks received. + + If this is the first fragment (that is the fragment offset is + zero) this header is placed in the header buffer. If this is the + last fragment ( that is the more fragments field is zero) the + total data length is computed. If this fragment completes the + datagram (tested by checking the bits set in the fragment block + table), then the datagram is sent to the next step in datagram + processing; otherwise the timer is set to the maximum of the + current timer value and the value of the time to live field from + this fragment; and the reassembly routine gives up control. + + If the timer runs out, the all reassembly resources for this + buffer identifier are released. The initial setting of the timer + is a lower bound on the reassembly waiting time. This is because + the waiting time will be increased if the Time to Live in the + arriving fragment is greater than the current timer value but will + not be decreased if it is less. The maximum this timer value + could reach is the maximum time to live (approximately 4.25 + minutes). The current recommendation for the initial timer + setting is 15 seconds. This may be changed as experience with + + + [Page 27] + + + September 1981 +Internet Protocol +Specification + + + + this protocol accumulates. Note that the choice of this parameter + value is related to the buffer capacity available and the data + rate of the transmission medium; that is, data rate times timer + value equals buffer size (e.g., 10Kb/s X 15s = 150Kb). + + Notation: + + FO - Fragment Offset + IHL - Internet Header Length + MF - More Fragments flag + TTL - Time To Live + NFB - Number of Fragment Blocks + TL - Total Length + TDL - Total Data Length + BUFID - Buffer Identifier + RCVBT - Fragment Received Bit Table + TLB - Timer Lower Bound + + Procedure: + + (1) BUFID <- source|destination|protocol|identification; + (2) IF FO = 0 AND MF = 0 + (3) THEN IF buffer with BUFID is allocated + (4) THEN flush all reassembly for this BUFID; + (5) Submit datagram to next step; DONE. + (6) ELSE IF no buffer with BUFID is allocated + (7) THEN allocate reassembly resources + with BUFID; + TIMER <- TLB; TDL <- 0; + (8) put data from fragment into data buffer with + BUFID from octet FO*8 to + octet (TL-(IHL*4))+FO*8; + (9) set RCVBT bits from FO + to FO+((TL-(IHL*4)+7)/8); + (10) IF MF = 0 THEN TDL <- TL-(IHL*4)+(FO*8) + (11) IF FO = 0 THEN put header in header buffer + (12) IF TDL # 0 + (13) AND all RCVBT bits from 0 + to (TDL+7)/8 are set + (14) THEN TL <- TDL+(IHL*4) + (15) Submit datagram to next step; + (16) free all reassembly resources + for this BUFID; DONE. + (17) TIMER <- MAX(TIMER,TTL); + (18) give up until next fragment or timer expires; + (19) timer expires: flush all reassembly with this BUFID; DONE. + + In the case that two or more fragments contain the same data + + +[Page 28] + + +September 1981 + Internet Protocol + Specification + + + + either identically or through a partial overlap, this procedure + will use the more recently arrived copy in the data buffer and + datagram delivered. + + Identification + + The choice of the Identifier for a datagram is based on the need to + provide a way to uniquely identify the fragments of a particular + datagram. The protocol module assembling fragments judges fragments + to belong to the same datagram if they have the same source, + destination, protocol, and Identifier. Thus, the sender must choose + the Identifier to be unique for this source, destination pair and + protocol for the time the datagram (or any fragment of it) could be + alive in the internet. + + It seems then that a sending protocol module needs to keep a table + of Identifiers, one entry for each destination it has communicated + with in the last maximum packet lifetime for the internet. + + However, since the Identifier field allows 65,536 different values, + some host may be able to simply use unique identifiers independent + of destination. + + It is appropriate for some higher level protocols to choose the + identifier. For example, TCP protocol modules may retransmit an + identical TCP segment, and the probability for correct reception + would be enhanced if the retransmission carried the same identifier + as the original transmission since fragments of either datagram + could be used to construct a correct TCP segment. + + Type of Service + + The type of service (TOS) is for internet service quality selection. + The type of service is specified along the abstract parameters + precedence, delay, throughput, and reliability. These abstract + parameters are to be mapped into the actual service parameters of + the particular networks the datagram traverses. + + Precedence. An independent measure of the importance of this + datagram. + + Delay. Prompt delivery is important for datagrams with this + indication. + + Throughput. High data rate is important for datagrams with this + indication. + + + + + [Page 29] + + + September 1981 +Internet Protocol +Specification + + + + Reliability. A higher level of effort to ensure delivery is + important for datagrams with this indication. + + For example, the ARPANET has a priority bit, and a choice between + "standard" messages (type 0) and "uncontrolled" messages (type 3), + (the choice between single packet and multipacket messages can also + be considered a service parameter). The uncontrolled messages tend + to be less reliably delivered and suffer less delay. Suppose an + internet datagram is to be sent through the ARPANET. Let the + internet type of service be given as: + + Precedence: 5 + Delay: 0 + Throughput: 1 + Reliability: 1 + + In this example, the mapping of these parameters to those available + for the ARPANET would be to set the ARPANET priority bit on since + the Internet precedence is in the upper half of its range, to select + standard messages since the throughput and reliability requirements + are indicated and delay is not. More details are given on service + mappings in "Service Mappings" [8]. + + Time to Live + + The time to live is set by the sender to the maximum time the + datagram is allowed to be in the internet system. If the datagram + is in the internet system longer than the time to live, then the + datagram must be destroyed. + + This field must be decreased at each point that the internet header + is processed to reflect the time spent processing the datagram. + Even if no local information is available on the time actually + spent, the field must be decremented by 1. The time is measured in + units of seconds (i.e. the value 1 means one second). Thus, the + maximum time to live is 255 seconds or 4.25 minutes. Since every + module that processes a datagram must decrease the TTL by at least + one even if it process the datagram in less than a second, the TTL + must be thought of only as an upper bound on the time a datagram may + exist. The intention is to cause undeliverable datagrams to be + discarded, and to bound the maximum datagram lifetime. + + Some higher level reliable connection protocols are based on + assumptions that old duplicate datagrams will not arrive after a + certain time elapses. The TTL is a way for such protocols to have + an assurance that their assumption is met. + + + + +[Page 30] + + +September 1981 + Internet Protocol + Specification + + + + Options + + The options are optional in each datagram, but required in + implementations. That is, the presence or absence of an option is + the choice of the sender, but each internet module must be able to + parse every option. There can be several options present in the + option field. + + The options might not end on a 32-bit boundary. The internet header + must be filled out with octets of zeros. The first of these would + be interpreted as the end-of-options option, and the remainder as + internet header padding. + + Every internet module must be able to act on every option. The + Security Option is required if classified, restricted, or + compartmented traffic is to be passed. + + Checksum + + The internet header checksum is recomputed if the internet header is + changed. For example, a reduction of the time to live, additions or + changes to internet options, or due to fragmentation. This checksum + at the internet level is intended to protect the internet header + fields from transmission errors. + + There are some applications where a few data bit errors are + acceptable while retransmission delays are not. If the internet + protocol enforced data correctness such applications could not be + supported. + + Errors + + Internet protocol errors may be reported via the ICMP messages [3]. + +3.3. Interfaces + + The functional description of user interfaces to the IP is, at best, + fictional, since every operating system will have different + facilities. Consequently, we must warn readers that different IP + implementations may have different user interfaces. However, all IPs + must provide a certain minimum set of services to guarantee that all + IP implementations can support the same protocol hierarchy. This + section specifies the functional interfaces required of all IP + implementations. + + Internet protocol interfaces on one side to the local network and on + the other side to either a higher level protocol or an application + program. In the following, the higher level protocol or application + + + [Page 31] + + + September 1981 +Internet Protocol +Specification + + + + program (or even a gateway program) will be called the "user" since it + is using the internet module. Since internet protocol is a datagram + protocol, there is minimal memory or state maintained between datagram + transmissions, and each call on the internet protocol module by the + user supplies all information necessary for the IP to perform the + service requested. + + An Example Upper Level Interface + + The following two example calls satisfy the requirements for the user + to internet protocol module communication ("=>" means returns): + + SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result) + + where: + + src = source address + dst = destination address + prot = protocol + TOS = type of service + TTL = time to live + BufPTR = buffer pointer + len = length of buffer + Id = Identifier + DF = Don't Fragment + opt = option data + result = response + OK = datagram sent ok + Error = error in arguments or local network error + + Note that the precedence is included in the TOS and the + security/compartment is passed as an option. + + RECV (BufPTR, prot, => result, src, dst, TOS, len, opt) + + where: + + BufPTR = buffer pointer + prot = protocol + result = response + OK = datagram received ok + Error = error in arguments + len = length of buffer + src = source address + dst = destination address + TOS = type of service + opt = option data + + + +[Page 32] + + +September 1981 + Internet Protocol + Specification + + + + When the user sends a datagram, it executes the SEND call supplying + all the arguments. The internet protocol module, on receiving this + call, checks the arguments and prepares and sends the message. If the + arguments are good and the datagram is accepted by the local network, + the call returns successfully. If either the arguments are bad, or + the datagram is not accepted by the local network, the call returns + unsuccessfully. On unsuccessful returns, a reasonable report must be + made as to the cause of the problem, but the details of such reports + are up to individual implementations. + + When a datagram arrives at the internet protocol module from the local + network, either there is a pending RECV call from the user addressed + or there is not. In the first case, the pending call is satisfied by + passing the information from the datagram to the user. In the second + case, the user addressed is notified of a pending datagram. If the + user addressed does not exist, an ICMP error message is returned to + the sender, and the data is discarded. + + The notification of a user may be via a pseudo interrupt or similar + mechanism, as appropriate in the particular operating system + environment of the implementation. + + A user's RECV call may then either be immediately satisfied by a + pending datagram, or the call may be pending until a datagram arrives. + + The source address is included in the send call in case the sending + host has several addresses (multiple physical connections or logical + addresses). The internet module must check to see that the source + address is one of the legal address for this host. + + An implementation may also allow or require a call to the internet + module to indicate interest in or reserve exclusive use of a class of + datagrams (e.g., all those with a certain value in the protocol + field). + + This section functionally characterizes a USER/IP interface. The + notation used is similar to most procedure of function calls in high + level languages, but this usage is not meant to rule out trap type + service calls (e.g., SVCs, UUOs, EMTs), or any other form of + interprocess communication. + + + + + + + + + + + [Page 33] + + + September 1981 +Internet Protocol + + + +APPENDIX A: Examples & Scenarios + +Example 1: + + This is an example of the minimal data carrying internet datagram: + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Ver= 4 |IHL= 5 |Type of Service| Total Length = 21 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Identification = 111 |Flg=0| Fragment Offset = 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Time = 123 | Protocol = 1 | header checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | destination address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+ + + Example Internet Datagram + + Figure 5. + + Note that each tick mark represents one bit position. + + This is a internet datagram in version 4 of internet protocol; the + internet header consists of five 32 bit words, and the total length of + the datagram is 21 octets. This datagram is a complete datagram (not + a fragment). + + + + + + + + + + + + + + + + + + +[Page 34] + + +September 1981 + Internet Protocol + + + +Example 2: + + In this example, we show first a moderate size internet datagram (452 + data octets), then two internet fragments that might result from the + fragmentation of this datagram if the maximum sized transmission + allowed were 280 octets. + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Ver= 4 |IHL= 5 |Type of Service| Total Length = 472 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Identification = 111 |Flg=0| Fragment Offset = 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Time = 123 | Protocol = 6 | header checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | destination address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + \ \ + \ \ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Example Internet Datagram + + Figure 6. + + + + + + + + + + + + + + + + + + [Page 35] + + + September 1981 +Internet Protocol + + + + Now the first fragment that results from splitting the datagram after + 256 data octets. + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Ver= 4 |IHL= 5 |Type of Service| Total Length = 276 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Identification = 111 |Flg=1| Fragment Offset = 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Time = 119 | Protocol = 6 | Header Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | destination address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + \ \ + \ \ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Example Internet Fragment + + Figure 7. + + + + + + + + + + + + + + + + + + + + + +[Page 36] + + +September 1981 + Internet Protocol + + + + And the second fragment. + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Ver= 4 |IHL= 5 |Type of Service| Total Length = 216 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Identification = 111 |Flg=0| Fragment Offset = 32 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Time = 119 | Protocol = 6 | Header Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | destination address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + \ \ + \ \ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Example Internet Fragment + + Figure 8. + + + + + + + + + + + + + + + + + + + + + + + [Page 37] + + + September 1981 +Internet Protocol + + + +Example 3: + + Here, we show an example of a datagram containing options: + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |Ver= 4 |IHL= 8 |Type of Service| Total Length = 576 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Identification = 111 |Flg=0| Fragment Offset = 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Time = 123 | Protocol = 6 | Header Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | source address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | destination address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Opt. Code = x | Opt. Len.= 3 | option value | Opt. Code = x | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Opt. Len. = 4 | option value | Opt. Code = 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Opt. Code = y | Opt. Len. = 3 | option value | Opt. Code = 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + \ \ + \ \ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Example Internet Datagram + + Figure 9. + + + + + + + + + + + + + + + + +[Page 38] + + +September 1981 + Internet Protocol + + + +APPENDIX B: Data Transmission Order + +The order of transmission of the header and data described in this +document is resolved to the octet level. Whenever a diagram shows a +group of octets, the order of transmission of those octets is the normal +order in which they are read in English. For example, in the following +diagram the octets are transmitted in the order they are numbered. + + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | 2 | 3 | 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 5 | 6 | 7 | 8 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 9 | 10 | 11 | 12 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Transmission Order of Bytes + + Figure 10. + +Whenever an octet represents a numeric quantity the left most bit in the +diagram is the high order or most significant bit. That is, the bit +labeled 0 is the most significant bit. For example, the following +diagram represents the value 170 (decimal). + + + 0 1 2 3 4 5 6 7 + +-+-+-+-+-+-+-+-+ + |1 0 1 0 1 0 1 0| + +-+-+-+-+-+-+-+-+ + + Significance of Bits + + Figure 11. + +Similarly, whenever a multi-octet field represents a numeric quantity +the left most bit of the whole field is the most significant bit. When +a multi-octet quantity is transmitted the most significant octet is +transmitted first. + + + + + + + + + + [Page 39] + + + September 1981 +Internet Protocol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 40] + + +September 1981 + Internet Protocol + + + + GLOSSARY + + + +1822 + BBN Report 1822, "The Specification of the Interconnection of + a Host and an IMP". The specification of interface between a + host and the ARPANET. + +ARPANET leader + The control information on an ARPANET message at the host-IMP + interface. + +ARPANET message + The unit of transmission between a host and an IMP in the + ARPANET. The maximum size is about 1012 octets (8096 bits). + +ARPANET packet + A unit of transmission used internally in the ARPANET between + IMPs. The maximum size is about 126 octets (1008 bits). + +Destination + The destination address, an internet header field. + +DF + The Don't Fragment bit carried in the flags field. + +Flags + An internet header field carrying various control flags. + +Fragment Offset + This internet header field indicates where in the internet + datagram a fragment belongs. + +GGP + Gateway to Gateway Protocol, the protocol used primarily + between gateways to control routing and other gateway + functions. + +header + Control information at the beginning of a message, segment, + datagram, packet or block of data. + +ICMP + Internet Control Message Protocol, implemented in the internet + module, the ICMP is used from gateways to hosts and between + hosts to report errors and make routing suggestions. + + + + + [Page 41] + + + September 1981 +Internet Protocol +Glossary + + + +Identification + An internet header field carrying the identifying value + assigned by the sender to aid in assembling the fragments of a + datagram. + +IHL + The internet header field Internet Header Length is the length + of the internet header measured in 32 bit words. + +IMP + The Interface Message Processor, the packet switch of the + ARPANET. + +Internet Address + A four octet (32 bit) source or destination address consisting + of a Network field and a Local Address field. + +internet datagram + The unit of data exchanged between a pair of internet modules + (includes the internet header). + +internet fragment + A portion of the data of an internet datagram with an internet + header. + +Local Address + The address of a host within a network. The actual mapping of + an internet local address on to the host addresses in a + network is quite general, allowing for many to one mappings. + +MF + The More-Fragments Flag carried in the internet header flags + field. + +module + An implementation, usually in software, of a protocol or other + procedure. + +more-fragments flag + A flag indicating whether or not this internet datagram + contains the end of an internet datagram, carried in the + internet header Flags field. + +NFB + The Number of Fragment Blocks in a the data portion of an + internet fragment. That is, the length of a portion of data + measured in 8 octet units. + + + +[Page 42] + + +September 1981 + Internet Protocol + Glossary + + + +octet + An eight bit byte. + +Options + The internet header Options field may contain several options, + and each option may be several octets in length. + +Padding + The internet header Padding field is used to ensure that the + data begins on 32 bit word boundary. The padding is zero. + +Protocol + In this document, the next higher level protocol identifier, + an internet header field. + +Rest + The local address portion of an Internet Address. + +Source + The source address, an internet header field. + +TCP + Transmission Control Protocol: A host-to-host protocol for + reliable communication in internet environments. + +TCP Segment + The unit of data exchanged between TCP modules (including the + TCP header). + +TFTP + Trivial File Transfer Protocol: A simple file transfer + protocol built on UDP. + +Time to Live + An internet header field which indicates the upper bound on + how long this internet datagram may exist. + +TOS + Type of Service + +Total Length + The internet header field Total Length is the length of the + datagram in octets including internet header and data. + +TTL + Time to Live + + + + + [Page 43] + + + September 1981 +Internet Protocol +Glossary + + + +Type of Service + An internet header field which indicates the type (or quality) + of service for this internet datagram. + +UDP + User Datagram Protocol: A user level protocol for transaction + oriented applications. + +User + The user of the internet protocol. This may be a higher level + protocol module, an application program, or a gateway program. + +Version + The Version field indicates the format of the internet header. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 44] + + +September 1981 + Internet Protocol + + + + REFERENCES + + + +[1] Cerf, V., "The Catenet Model for Internetworking," Information + Processing Techniques Office, Defense Advanced Research Projects + Agency, IEN 48, July 1978. + +[2] Bolt Beranek and Newman, "Specification for the Interconnection of + a Host and an IMP," BBN Technical Report 1822, Revised May 1978. + +[3] Postel, J., "Internet Control Message Protocol - DARPA Internet + Program Protocol Specification," RFC 792, USC/Information Sciences + Institute, September 1981. + +[4] Shoch, J., "Inter-Network Naming, Addressing, and Routing," + COMPCON, IEEE Computer Society, Fall 1978. + +[5] Postel, J., "Address Mappings," RFC 796, USC/Information Sciences + Institute, September 1981. + +[6] Shoch, J., "Packet Fragmentation in Inter-Network Protocols," + Computer Networks, v. 3, n. 1, February 1979. + +[7] Strazisar, V., "How to Build a Gateway", IEN 109, Bolt Beranek and + Newman, August 1979. + +[8] Postel, J., "Service Mappings," RFC 795, USC/Information Sciences + Institute, September 1981. + +[9] Postel, J., "Assigned Numbers," RFC 790, USC/Information Sciences + Institute, September 1981. + + + + + + + + + + + + + + + + + + + + [Page 45] + diff --git a/docs/sig.bmp b/docs/sig.bmp new file mode 100644 index 0000000..6d3bcc4 Binary files /dev/null and b/docs/sig.bmp differ diff --git a/docs/tax98/JOINT.BAK b/docs/tax98/JOINT.BAK new file mode 100644 index 0000000..1a30e77 Binary files /dev/null and b/docs/tax98/JOINT.BAK differ diff --git a/docs/tax98/JOINT.F98 b/docs/tax98/JOINT.F98 new file mode 100644 index 0000000..1a30e77 Binary files /dev/null and b/docs/tax98/JOINT.F98 differ diff --git a/docs/tax98/JOINT2.BAK b/docs/tax98/JOINT2.BAK new file mode 100644 index 0000000..89bfdfd Binary files /dev/null and b/docs/tax98/JOINT2.BAK differ diff --git a/docs/tax98/JOINT2.F98 b/docs/tax98/JOINT2.F98 new file mode 100644 index 0000000..89bfdfd Binary files /dev/null and b/docs/tax98/JOINT2.F98 differ diff --git a/docs/tax98/MYTAXES.F98 b/docs/tax98/MYTAXES.F98 new file mode 100644 index 0000000..94a479e Binary files /dev/null and b/docs/tax98/MYTAXES.F98 differ diff --git a/docs/tax98/RONI.BAK b/docs/tax98/RONI.BAK new file mode 100644 index 0000000..1a21c45 Binary files /dev/null and b/docs/tax98/RONI.BAK differ diff --git a/docs/tax98/RONI.F98 b/docs/tax98/RONI.F98 new file mode 100644 index 0000000..1a21c45 Binary files /dev/null and b/docs/tax98/RONI.F98 differ diff --git a/docs/tmp/DALI.BMP b/docs/tmp/DALI.BMP new file mode 100644 index 0000000..620bd8c Binary files /dev/null and b/docs/tmp/DALI.BMP differ diff --git a/docs/vmspec.pdf b/docs/vmspec.pdf new file mode 100644 index 0000000..99bc2d2 Binary files /dev/null and b/docs/vmspec.pdf differ diff --git a/drums/Debug/RCa00880 b/drums/Debug/RCa00880 new file mode 100644 index 0000000..f46212e Binary files /dev/null and b/drums/Debug/RCa00880 differ diff --git a/drums/Debug/drums.exe b/drums/Debug/drums.exe new file mode 100644 index 0000000..c4e8a55 Binary files /dev/null and b/drums/Debug/drums.exe differ diff --git a/drums/Debug/drums.exp b/drums/Debug/drums.exp new file mode 100644 index 0000000..0b99e32 Binary files /dev/null and b/drums/Debug/drums.exp differ diff --git a/drums/Debug/drums.ilk b/drums/Debug/drums.ilk new file mode 100644 index 0000000..03244a9 Binary files /dev/null and b/drums/Debug/drums.ilk differ diff --git a/drums/Debug/drums.lib b/drums/Debug/drums.lib new file mode 100644 index 0000000..8e94c66 Binary files /dev/null and b/drums/Debug/drums.lib differ diff --git a/drums/Debug/drums.pdb b/drums/Debug/drums.pdb new file mode 100644 index 0000000..4acae8e Binary files /dev/null and b/drums/Debug/drums.pdb differ diff --git a/drums/Debug/drums.res b/drums/Debug/drums.res new file mode 100644 index 0000000..5c2c467 Binary files /dev/null and b/drums/Debug/drums.res differ diff --git a/drums/Debug/vc60.idb b/drums/Debug/vc60.idb new file mode 100644 index 0000000..c3cad7a Binary files /dev/null and b/drums/Debug/vc60.idb differ diff --git a/drums/Debug/vc60.pdb b/drums/Debug/vc60.pdb new file mode 100644 index 0000000..1e75b77 Binary files /dev/null and b/drums/Debug/vc60.pdb differ diff --git a/drums/DrumControl.cpp b/drums/DrumControl.cpp new file mode 100644 index 0000000..add9437 --- /dev/null +++ b/drums/DrumControl.cpp @@ -0,0 +1,126 @@ +#include +#include + +char DrumControl::smszClassName[]={"DRUMCONTROL"}; + +DrumControl::DrumControl(GUIWindow &parent) +{ + mPaintHandler.setCallback(this,&DrumControl::paintHandler); + mCreateHandler.setCallback(this,&DrumControl::createHandler); + mDestroyHandler.setCallback(this,&DrumControl::destroyHandler); + mSizeHandler.setCallback(this,&DrumControl::sizeHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::DestroyHandler,&mSizeHandler); + registerClass(); + createWindow(parent); +} + +DrumControl::~DrumControl() +{ + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::DestroyHandler,&mSizeHandler); +} + +void DrumControl::registerClass() +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,smszClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)GUIWindow::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(DrumControl*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); +// wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =smszClassName; + ::RegisterClass(&wndClass); +} + +void DrumControl::createWindow(GUIWindow &parent) +{ + Rect winRect; + mResBitmap=new ResBitmap("Magenta"); + mResBitmap.disposition(PointerDisposition::Delete); + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIBitmap(*mPureDevice,mResBitmap->width(),mResBitmap->height(),*mResBitmap); + mDIBitmap.disposition(PointerDisposition::Delete); + parent.clientRect(winRect); + winRect.bottom(winRect.bottom()*.75); + Window::createWindow(WS_EX_CLIENTEDGE,smszClassName,smszClassName, + WS_CHILD|WS_OVERLAPPED|WS_CLIPCHILDREN|WS_BORDER,winRect, + parent,(HMENU)0,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); +} + +CallbackData::ReturnType DrumControl::createHandler(CallbackData &/*someCallbackData*/) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIBitmap(*mPureDevice,mResBitmap->width(),mResBitmap->height(),*mResBitmap); + mDIBitmap.disposition(PointerDisposition::Delete); + createButtons(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DrumControl::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DrumControl::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DrumControl::paintHandler(CallbackData &someCallbackData) +{ + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mDIBitmap->copyBits(mResBitmap->ptrData(),mResBitmap->imageExtent()); + mDIBitmap->stretchBlt(pureDevice,Rect(0,0,width(),height())); + return (CallbackData::ReturnType)FALSE; +} + +void DrumControl::createButtons() +{ + int rows=8; + int cols=16; + int spacing=2; + int width=10; + int height=10; + int startx=10; + int starty=10; + int xpos; + int ypos; + + ypos=starty; + for(int row=0;row()); + SmartPointer &control=mButtons[index]; + control=new Control(); + control.disposition(PointerDisposition::Delete); + control->createControl("BUTTON","",WS_CHILD|WS_CLIPSIBLINGS|WS_VISIBLE,Rect(xpos,ypos,xpos+width,ypos+height),*this,index); + xpos+=(width+spacing); + } + ypos+=(height+spacing); + } + +} + diff --git a/drums/DrumControl.hpp b/drums/DrumControl.hpp new file mode 100644 index 0000000..6b463b3 --- /dev/null +++ b/drums/DrumControl.hpp @@ -0,0 +1,42 @@ +#ifndef _DRUMS_DRUMCONTROL_HPP_ +#define _DRUMS_DRUMCONTROL_HPP_ +#ifndef _COMMON_RESBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif + +class DrumControl : public Window +{ +public: + DrumControl(GUIWindow &parent); + virtual ~DrumControl(); +protected: +private: + void registerClass(void); + void createWindow(GUIWindow &parent); + void createButtons(void); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mSizeHandler; + static char smszClassName[]; + Block > mButtons; +// Block mButtons; + SmartPointer mResBitmap; + SmartPointer mPureDevice; + SmartPointer mDIBitmap; +}; +#endif diff --git a/drums/MAGENTA.BMP b/drums/MAGENTA.BMP new file mode 100644 index 0000000..e082d28 Binary files /dev/null and b/drums/MAGENTA.BMP differ diff --git a/drums/ViewWnd.cpp b/drums/ViewWnd.cpp new file mode 100644 index 0000000..27b47c5 --- /dev/null +++ b/drums/ViewWnd.cpp @@ -0,0 +1,570 @@ +#include +#include +#include + +//#include +//#include +//#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +//: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ +/* mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE);*/ + mDrumControl=new DrumControl(*this); + mDrumControl.disposition(PointerDisposition::Delete); + setTitle("{None}"); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ +/* mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } +*/ + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ +/* GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); +*/ + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +/* +bool ViewWindow::insert(const TabEntry &entry) +{ +// return mTabPage->insert(entry); + return false; +} +*/ + +/* +bool ViewWindow::insert(const TabEntries &entries) +{ + if(!mTabPage->insert(entries))return false; + invalidate(); + mTabPage->isDirty(true); + + return true; +} +*/ + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +/* +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); // don't set the dirty flag when loading + if(mTabPage->insert(mTablature.getTabRanges(),false)) // don't set the dirty flag when loading + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +*/ +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + break; +// if(THPlay==threadMessage.userDataOne())thPlay(); +// else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); +// else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +/* +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} +*/ + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.hCursor=::LoadCursor(processInstance(),MAKEINTRESOURCE(HARROW)); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/drums/ViewWnd.hpp b/drums/ViewWnd.hpp new file mode 100644 index 0000000..861077d --- /dev/null +++ b/drums/ViewWnd.hpp @@ -0,0 +1,157 @@ +#ifndef _DRUMS_VIEWWINDOW_HPP_ +#define _DRUMS_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +//#ifndef _GUITAR_TABLATURE_HPP_ +//#include +//#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +//#ifndef _GUITAR_TABPAGE_HPP_ +//#include +//#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class StatusBarEx; +class DrumControl; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); +// void setFretboardHandler(CallbackPointer &callbackPointer); +// bool createProject(const String &strPathTabFile); +// bool createProject(void); +// bool openProject(const String &pathFileName); +// bool saveProject(const String &pathFileName); +// bool saveProject(void); +// void play(void); +// void playFromCurrent(void); +// void stopPlay(void); +// void playRepeated(void); +// void playRange(int rangeIndex); +// void playRangeRepeated(int rangeIndex); +// void cut(void); +// void copy(void); +// void paste(void); +// void modifyProperties(void); +// void setStartRange(void); +// void setEndRange(void); +// bool getTabRanges(TabRanges &ranges); +// void setTabRanges(const TabRanges &ranges); +// const TabEntries &getEntries(void)const; +// bool insert(const TabEntry &entry); +// bool insert(const TabEntries &entries); +// int getNumTabEntries(void)const; +// void increaseTempo(void); +// void decreaseTempo(void); + String getTitle(void)const; +// const String &getPathFileProject(void)const; +// void setStatusControlRef(SmartPointer &statusBar); +// bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); +// void enablePlaySelect(bool enable); +// void enableStopSelect(bool enable); +// void enableCut(bool enable); +// void enableCopy(bool enable); +// void enablePaste(bool enable); +// bool getEnableCut(void); +// bool getEnableCopy(void); +// bool getEnablePaste(void); +// bool isInRepeatPlay(void)const; +// void isInRepeatPlay(bool isInRepeatPlay); +// bool getProjectName(String &strPathFileProject); +// void thPlay(void); +// void thPlayFromCurrent(void); +// void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + + SmartPointer mDrumControl; + +// SmartPointer mTabPage; +// SmartPointer mMIDIDevice; +// Tablature mTablature; +// bool mIsInRepeatPlay; +}; + +/* +inline +const TabEntries &ViewWindow::getEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries(); +} + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +*/ +#endif + + diff --git a/drums/drums.aps b/drums/drums.aps new file mode 100644 index 0000000..470086a Binary files /dev/null and b/drums/drums.aps differ diff --git a/drums/drums.dsp b/drums/drums.dsp new file mode 100644 index 0000000..0f0de02 --- /dev/null +++ b/drums/drums.dsp @@ -0,0 +1,130 @@ +# Microsoft Developer Studio Project File - Name="drums" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=drums - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "drums.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "drums.mak" CFG="drums - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "drums - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "drums - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "drums - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "drums - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib version.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "drums - Win32 Release" +# Name "drums - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\DrumControl.cpp +# End Source File +# Begin Source File + +SOURCE=.\drums.rc +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\ViewWnd.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\harrow.cur +# End Source File +# Begin Source File + +SOURCE=.\icon1.ico +# End Source File +# End Group +# End Target +# End Project diff --git a/drums/drums.dsw b/drums/drums.dsw new file mode 100644 index 0000000..5a12b67 --- /dev/null +++ b/drums/drums.dsw @@ -0,0 +1,104 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "drums"=.\drums.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name toolbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency +}}} + +############################################################################### + +Project: "statbar"=..\statbar\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\thread\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "toolbar"=..\toolbar\Toolbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/drums/drums.h b/drums/drums.h new file mode 100644 index 0000000..63a424c --- /dev/null +++ b/drums/drums.h @@ -0,0 +1,40 @@ +#ifndef _DRUMS_DRUMS_H_ +#define _DRUMS_DRUMS_H_ + +#include "windows.h" + +// +#define IDC_STATIC -1 + +// CURSOR +#define HARROW 1000 + + +#define APPACCELERATORS 10000 + +#define MENU_FILE_EXIT 10000 +#define MENU_FILE_NEW 10001 +#define MENU_FILE_OPEN 10002 + + +#define MENU_EDIT_CUT 12000 +#define MENU_EDIT_COPY 12001 +#define MENU_EDIT_PASTE 12002 + + +// STRINGS + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + + +// STRINGTABLE +#define STRING_DRUMVIEWWINDOWCLASSNAME 20000 + + +#endif + diff --git a/drums/drums.hpp b/drums/drums.hpp new file mode 100644 index 0000000..16bf872 --- /dev/null +++ b/drums/drums.hpp @@ -0,0 +1,6 @@ +#ifndef _DRUMS_DRUMS_HPP_ +#define _DRUMS_DRUMS_HPP_ +#ifndef _DRUMS_DRUMS_H_ +#include +#endif +#endif diff --git a/drums/drums.ncb b/drums/drums.ncb new file mode 100644 index 0000000..c01ee37 Binary files /dev/null and b/drums/drums.ncb differ diff --git a/drums/drums.opt b/drums/drums.opt new file mode 100644 index 0000000..c388911 Binary files /dev/null and b/drums/drums.opt differ diff --git a/drums/drums.plg b/drums/drums.plg new file mode 100644 index 0000000..6e9950c --- /dev/null +++ b/drums/drums.plg @@ -0,0 +1,47 @@ + + +
+

Build Log

+

+--------------------Configuration: drums - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP2.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"Debug/drums.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"D:\work\drums\DrumControl.cpp" +"D:\work\drums\mainfrm.cpp" +"D:\work\drums\ViewWnd.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP2.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP3.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib version.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/drums.pdb" /debug /machine:I386 /out:"Debug/drums.exe" /pdbtype:sept +.\Debug\DrumControl.obj +.\Debug\main.obj +.\Debug\mainfrm.obj +.\Debug\ViewWnd.obj +.\Debug\drums.res +\work\exe\mscommon.lib +\work\exe\toolbar.lib +\work\exe\statbar.lib +\work\exe\msthread.lib +\work\exe\msbsp.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP3.tmp" +

Output Window

+Compiling... +DrumControl.cpp +mainfrm.cpp +ViewWnd.cpp +Linking... +LINK : LNK6004: Debug/drums.exe not found or not built by the last incremental link; performing full link + Creating library Debug/drums.lib and object Debug/drums.exp + + + +

Results

+drums.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/drums/drums.rc b/drums/drums.rc new file mode 100644 index 0000000..68e29b4 --- /dev/null +++ b/drums/drums.rc @@ -0,0 +1,239 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "drums\drums.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +MAGENTA BITMAP DISCARDABLE "MAGENTA.BMP" + + + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +HARROW CURSOR DISCARDABLE "HARROW.CUR" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP_ICON ICON DISCARDABLE "icon1.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", MENU_FILE_NEW + MENUITEM "E&xit", MENU_FILE_EXIT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", MENU_FILE_NEW + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""drums\\drums.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Drums.\0" + VALUE "CompanyName", "Diversified Software Solutions.\0" + VALUE "FileDescription", "Drums\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "Drums\0" + VALUE "LegalCopyright", "Copyright © 2002\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "Drums.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "Drums\0" + VALUE "ProductVersion", "1, 0, 0, r\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +APPACCELERATORS ACCELERATORS DISCARDABLE +BEGIN + "X", MENU_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT + "C", MENU_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + "V", MENU_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT + "N", MENU_FILE_NEW, VIRTKEY, CONTROL, NOINVERT + "O", MENU_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + VK_F5, IDM_CASCADE, VIRTKEY, NOINVERT + VK_F4, IDM_TILE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 95 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,129,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 + GROUPBOX "Static",IDC_STATIC,45,19,48,40 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_DIALOG1, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 179 + TOPMARGIN, 7 + BOTTOMMARGIN, 88 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_DRUMVIEWWINDOWCLASSNAME "DRUMVIEWCLASS" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/drums/harrow.cur b/drums/harrow.cur new file mode 100644 index 0000000..e4feb3e Binary files /dev/null and b/drums/harrow.cur differ diff --git a/drums/icon1.ico b/drums/icon1.ico new file mode 100644 index 0000000..cd5eef4 Binary files /dev/null and b/drums/icon1.ico differ diff --git a/drums/main.cpp b/drums/main.cpp new file mode 100644 index 0000000..f640222 --- /dev/null +++ b/drums/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +//#include +//#include +//#include +//#include +//#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; +/* VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } +// GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setLogLevel(GlobalDefs::NoLog); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); +*/ + mainFrame.createWindow("Drums",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); +// GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(APPACCELERATORS); + return mainFrame.messageLoop(); + +} + diff --git a/drums/mainfrm.cpp b/drums/mainfrm.cpp new file mode 100644 index 0000000..44c749b --- /dev/null +++ b/drums/mainfrm.cpp @@ -0,0 +1,1066 @@ +/*#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); +// mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); +// mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); +// FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); +// FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : +// handleCut(); + return false; + case MENU_EDIT_COPY : +// handleCopy(); + return false; + case MENU_EDIT_PASTE : +// handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_EXIT : + handleFileExit(); + break; + case MENU_FILE_NEW : + handleFileNew(); + break; + case MENU_FILE_OPEN : + handleFileOpen(); + break; + + +/* + case MENU_FILE_PRINT : + handleFilePrint(); + break; + case MENU_FILE_IMPORT : + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + handleFileClose(); + break; + case MENU_FILE_SAVE : + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + handleChordLookup(); + break; + case MENU_CHORDS_ENTER : + handleChordEnter(); + break; + case MENU_FRETBOARD_CLEAR : + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + handleShowScales(); + break; + case MENU_EDIT_CUT : + handleCut(); + break; + case MENU_EDIT_COPY : + handleCopy(); + break; + case MENU_EDIT_PASTE : + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + cascade(); + break; + case IDM_TILE : + tile(); + break; + case IDM_ARRANGE : + arrange(); + break; + case IDM_CLOSEALL : + closeAll(); + break; + case IDM_MINIMIZEALL : + minimizeAll(); + break; + case IDM_RESTOREALL : + restoreAll(); + break; +*/ + + default : + break; + } +// if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +// return FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); +// insert(*::new FretViewWindow()); +// operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + Control desktop(::GetDesktopWindow(),0,false); + setWindowPos(desktop.width()>InitialWidth?InitialWidth:desktop.width(),desktop.height()>InitialHeight?InitialHeight:desktop.height()); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); +// updateHistory(); +// if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; + +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ +/* Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +/* +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} +*/ + +/* +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} +*/ + +/* +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} +*/ + +/* +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} +*/ + +// menu handlers + +/* +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} +*/ + +/* +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} +*/ + +void MainFrame::handleFileNew(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + +// if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_DRUMVIEWWINDOWCLASSNAME),"Drums","viewMenu","APP_ICON"); + pViewWindow->show(SW_SHOW); + pViewWindow->top(); + +// pViewWindow->setStatusControlRef(mStatusControl); +// if(!pViewWindow->createProject(strPathTabFile)) +// { +// pViewWindow->close(); +// } +// else +// { + // pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + // updateHistory(pViewWindow->getPathFileProject()); +// } +} + +void MainFrame::handleFileOpen(void) +{ +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +/* +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + openDialog.creationFlags(OpenDialog::ALLOWMULTISELECT); + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + for(int index=0;index mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} +*/ + +/* +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} +*/ + +/* +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} +*/ + +/* +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} +*/ + +/* +void MainFrame::handleChordEnter() +{ + ChordBuilderDialog chordBuilderDialog; + chordBuilderDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} +*/ + +/* +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} +*/ + +/* +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} +*/ + +/* +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} +*/ + +/* +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} +*/ + +/* +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} +*/ + +/* +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} +*/ + +/* +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} +*/ + +/* +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} +*/ + +/* +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} +*/ + +/* +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} +*/ + +/* +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} +*/ + +/* +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} +*/ + +/* +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} +*/ + +/* +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} +*/ + +/* +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} +*/ + +/* +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} +*/ + +/* +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} +*/ + +/* +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} +*/ + +/* +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} +*/ + +/* +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} +*/ + +/* +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} +*/ + +/* +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} +*/ + +/* +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} +*/ + +/* +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); + virtual void preRegister(WNDCLASS &wndClass); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; + enum{InitialWidth=800,InitialHeight=600}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + + void insertHandlers(void); + void removeHandlers(void); + void createControls(const CallbackData &callbackData); + void handleFileExit(void); + void handleFileNew(void); + void handleFileOpen(void); + void createToolBar(void); + +/* + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleFileClose(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleChordEnter(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void handleHistogram(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; +*/ + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/drums/resource.h b/drums/resource.h new file mode 100644 index 0000000..0b23756 --- /dev/null +++ b/drums/resource.h @@ -0,0 +1,17 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by drums.rc +// +#define APPICON 103 +#define IDD_DIALOG1 108 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 109 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1088 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/dvcap/CaptureDeviceGraph.cpp b/dvcap/CaptureDeviceGraph.cpp new file mode 100644 index 0000000..3631294 --- /dev/null +++ b/dvcap/CaptureDeviceGraph.cpp @@ -0,0 +1,939 @@ +#include +#include +#include +#include + +CaptureDeviceGraph::CaptureDeviceGraph() +: mVideoFormat(DVENCODERVIDEOFORMAT_NTSC), + mDVResolution(DVRESOLUTION_HALF), + mSubunitMode(VCRMode), mLogFile("dvcap.log","wb") +{ + SystemTime systemTime; + mLogFile.writeLine("*********************************************************************"); + mLogFile.writeLine(String(" DVCAPTURE LOG FILE STARTED AT:")+systemTime.toString()); + mLogFile.writeLine("*********************************************************************"); +} + +CaptureDeviceGraph::~CaptureDeviceGraph() +{ + if(mVideoWindow.isOkay()) + { + mVideoWindow->put_Visible(OAFALSE); + mVideoWindow->put_Owner(0); + } + freeFilters(); +} + +void CaptureDeviceGraph::freeFilters() +{ + mGraph.Release(); + mCaptureGraphBuilder.Release(); + mMediaEvent.Release(); + mInputFileFilter.Release(); + mDeviceFilter.Release(); + mExtDevice.Release(); + mExtTransport.Release(); + mTimecodeReader.Release(); + mVideoWindow.Release(); + mDroppedFrames.Release(); +} + +bool CaptureDeviceGraph::buildBasicGraph() +{ + ComResult comResult; + + if(!initializeGraph()) + { + error("[CaptureDeviceGraph::buildBasicGraph] Failed to create filter graph."); + return false; + } + if(!addDeviceFilter()) + { + error("[CaptureDeviceGraph::buildBasicGraph] Failed to add device filter."); + return false; + } + LOG("[CaptureDeviceGraph::buildBasicGraph] mDeviceFilter->QueryInterface(IID_IAMExtTransport,(void**)(IAMExtTransport**)mExtTransport)"); + comResult=mDeviceFilter->QueryInterface(IID_IAMExtTransport,(void**)(IAMExtTransport**)mExtTransport); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::buildBasicGraph] Failed to QueryInterface IID_IAMExtTransport."); + return false; + } + LOG("[CaptureDeviceGraph::buildBasicGraph] mDeviceFilter->QueryInterface(IID_IAMExtDevice,(void**)(IAMExtDevice**)mExtDevice)"); + comResult=mDeviceFilter->QueryInterface(IID_IAMExtDevice,(void**)(IAMExtDevice**)mExtDevice); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::buildBasicGraph] Failed to QueryInterface IID_IAMExtDevice."); + return false; + } + LOG("[CaptureDeviceGraph::buildBasicGraph] mDeviceFilter->QueryInterface(IID_IAMTimecodeReader,(void**)(IAMTimecodeReader**)mTimecodeReader)"); + comResult=mDeviceFilter->QueryInterface(IID_IAMTimecodeReader,(void**)(IAMTimecodeReader**)mTimecodeReader); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::buildBasicGraph] Failed to QueryInterface IID_IAMTimecodeReader."); + return false; + } + mSubunitMode=getDVMode(); + return true; +} + +bool CaptureDeviceGraph::initializeGraph() +{ + ComResult comResult; + + mGraph.Release(); + mCaptureGraphBuilder.Release(); + mMediaEvent.Release(); + mMediaControl.Release(); + mVideoWindow.Release(); + LOG("[CaptureDeviceGraph::initializeGraph] mGraph.createInstance(CLSID_FilterGraph,IID_IGraphBuilder)"); + comResult=mGraph.createInstance(CLSID_FilterGraph,IID_IGraphBuilder); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::initializeGraph] Failed to create CLSID_FilterGraph."); + return false; + } + LOG("[CaptureDeviceGraph::initializeGraph] mCaptureGraphBuilder.createInstance(CLSID_CaptureGraphBuilder2,IID_ICaptureGraphBuilder2)"); + comResult=mCaptureGraphBuilder.createInstance(CLSID_CaptureGraphBuilder2,IID_ICaptureGraphBuilder2); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::initializeGraph] Failed to create CLSID_CaptureGraphBuilder2."); + return false; + } + LOG("[CaptureDeviceGraph::initializeGraph] mCaptureGraphBuilder->SetFiltergraph(mGraph)"); + comResult=mCaptureGraphBuilder->SetFiltergraph(mGraph); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::initializeGraph] Failed to SetFiltergraph."); + return false; + } + LOG("[CaptureDeviceGraph::initializeGraph] mGraph->QueryInterface(IID_IMediaEventEx,(void**)(IMediaEventEx**)mMediaEvent)"); + comResult=mGraph->QueryInterface(IID_IMediaEventEx,(void**)(IMediaEventEx**)mMediaEvent); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::initializeGraph] Failed to QueryInterface IMediaEventEx."); + return false; + } + LOG("[CaptureDeviceGraph::initializeGraph] mGraph->QueryInterface(IID_IMediaControl,(void**)(IMediaControl**)mMediaControl)"); + comResult=mGraph->QueryInterface(IID_IMediaControl,(void**)(IMediaControl**)mMediaControl); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::initializeGraph] Failed to QueryInterface IMediaControl."); + return false; + } + LOG("[CaptureDeviceGraph::initializeGraph] mGraph->QueryInterface(IID_IVideoWindow,(void**)(IVideoWindow**)mVideoWindow)"); + comResult=mGraph->QueryInterface(IID_IVideoWindow,(void**)(IVideoWindow**)mVideoWindow); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::initializeGraph] Failed to QueryInterface IVideoWindow."); + return false; + } + return true; +} + +bool CaptureDeviceGraph::addDeviceFilter() +{ + ComResult comResult; + ComPointer createDevEnum; + ComPointer enumMoniker; + ComPointer moniker; + ULONG nFetched=0; + + LOG("[CaptureDeviceGraph::addDeviceFilter] createDevEnum.createInstance(CLSID_SystemDeviceEnum,IID_ICreateDevEnum)"); + comResult=createDevEnum.createInstance(CLSID_SystemDeviceEnum,IID_ICreateDevEnum); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::addDeviceFilter] Failed to create CLSID_SystemDeviceEnum"); + return false; + } + LOG("[CaptureDeviceGraph::addDeviceFilter] createDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,(IEnumMoniker**)enumMoniker,0)"); + if(!ComResult(createDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,(IEnumMoniker**)enumMoniker,0)).success()) + { + error("[CaptureDeviceGraph::addDeviceFilter] createDevEnum->CreateClassEnumerator() Failed."); + return false; + } + if(!enumMoniker.isOkay()) + { + error("[CaptureDeviceGraph::addDeviceFilter] createDevEnum->CreateClassEnumerator() Failed."); + return false; + } + enumMoniker->Reset(); + while(ComResult(enumMoniker->Next(1,(IMoniker**)moniker,&nFetched)).success()) + { + ComPointer propertyBag; + Variant vName; + LOG("[CaptureDeviceGraph::addDeviceFilter] moniker->BindToStorage(0,0,IID_IPropertyBag,(void**)(IPropertyBag**)propertyBag)"); + comResult=moniker->BindToStorage(0,0,IID_IPropertyBag,(void**)(IPropertyBag**)propertyBag); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::addDeviceFilter] Failed to BindToStorage on moniker"); + continue; + } + LOG("[CaptureDeviceGraph::addDeviceFilter] propertyBag->Read(L\"FriendlyName\",&vName.getVARIANT(),0)"); + comResult=propertyBag->Read(L"FriendlyName",&vName.getVARIANT(),0); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::addDeviceFilter] Failed to Read FriendlyName"); + continue; + } + vName.getData(mDeviceName); + if(mDeviceName=="Microsoft DV Camera and VCR") + { + LOG("[CaptureDeviceGraph::addDeviceFilter] moniker->BindToObject(0,0,IID_IBaseFilter,(void**)(IBaseFilter**)mDeviceFilter)"); + comResult=moniker->BindToObject(0,0,IID_IBaseFilter,(void**)(IBaseFilter**)mDeviceFilter); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::addDeviceFilter] Failed to Bind DeviceFilter"); + return false; + } + LOG("[CaptureDeviceGraph::addDeviceFilter] mGraph->AddFilter(mDeviceFilter,L\"Filter\")"); + comResult=mGraph->AddFilter(mDeviceFilter,L"Filter"); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::addDeviceFilter] Failed to AddFilter"); + return false; + } + break; + } + } + return mDeviceFilter.isOkay(); +} + +CaptureDeviceGraph::DVMode CaptureDeviceGraph::getDVMode(void) +{ + ComResult comResult; + LONG deviceType; + + LOG("[CaptureDeviceGraph::getDVMode] mExtDevice->GetCapability(ED_DEVCAP_DEVICE_TYPE,&deviceType,0)"); + comResult=mExtDevice->GetCapability(ED_DEVCAP_DEVICE_TYPE,&deviceType,0); + if(!comResult.success()) + { + error("[CaptureDeviceGraph::getDVMode] mExtDevice->GetCapability(ED_DEVCAP_DEVICE_TYPE,&deviceType,0) Failed.(Non-Fatal)"); + return UnknownMode; + } + switch(deviceType) + { + case ED_DEVTYPE_VCR : + return VCRMode; + case ED_DEVTYPE_CAMERA : + return CameraMode; + case 0 : + default : + return UnknownMode; + } +} + +bool CaptureDeviceGraph::getTapeInfo(void) +{ + ComResult comResult; + LONG mediaType; + LONG inSignalMode; + + LOG("[CaptureDeviceGraph::getTapeInfo] mExtTransport->GetStatus(ED_MEDIA_TYPE,&mediaType)"); + comResult=mExtTransport->GetStatus(ED_MEDIA_TYPE,&mediaType); + if(!comResult.success())return false; + if(ED_MEDIA_NOT_PRESENT==mediaType)return false; // fail if no tape installed + else + { + if(ED_MEDIA_DVC!=mediaType)return false; // tape type should be DVC + LOG("[CaptureDeviceGraph::getTapeInfo] mExtTransport->GetTransportBasicParameters(ED_TRANSBASIC_INPUT_SIGNAL,&inSignalMode,0)"); + comResult=mExtTransport->GetTransportBasicParameters(ED_TRANSBASIC_INPUT_SIGNAL,&inSignalMode,0); + if(!comResult.success())return false; + switch(inSignalMode) + { + case ED_TRANSBASIC_SIGNAL_525_60_SD : + mAverageTimePerFrame=33; // 33 ms(29.97 FPS) + mVideoFormat=DVENCODERVIDEOFORMAT_NTSC; + break; + case ED_TRANSBASIC_SIGNAL_525_60_SDL : + mAverageTimePerFrame=33; // 33 ms(29.97 FPS) + mVideoFormat=DVENCODERVIDEOFORMAT_NTSC; + break; + case ED_TRANSBASIC_SIGNAL_625_50_SD : + mAverageTimePerFrame=40; // 40 ms (25 FPS) + mVideoFormat=DVENCODERVIDEOFORMAT_PAL; + break; + case ED_TRANSBASIC_SIGNAL_625_50_SDL : + mAverageTimePerFrame=40; // 40 ms (25 FPS) + mVideoFormat=DVENCODERVIDEOFORMAT_PAL; + break; + default : + error("[CaptureDeviceGraph::getTapeInfo] unsupported or unrecognized tape format type"); + mAverageTimePerFrame=33; + break; + } + } + return true; +} + +// DV_Cam(AV Out)->DVSplitter(vid)->DVCodec->VideoWindow +// DVSplitter(aud)->Default DirectSound device +bool CaptureDeviceGraph::makePreviewGraph(void) +{ + ComResult comResult; + + mGraphType=GraphPreview; + LOG("[CaptureDeviceGraph::makePreviewGraph] mExtTransport->GetTransportBasicParameters(ED_TRANSBASIC_INPUT_SIGNAL,&inSignalMode,0)"); + comResult=mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Interleaved,mDeviceFilter,0,0); + if(!comResult.success())return false; + return true; +} + +// DV_Cam(AV Out)->SmartTee(capture)->AviMux->FileWriter +// SmartTee(preview)->DVSplitter(vid)->DVCodec->VideoWindow +// DVSplitter(aud)->Default DirectSound device + +bool CaptureDeviceGraph::makeDVToFileGraphType1(const BString &pathOutputFileName) +{ + ComPointer ppf; + ComPointer pSink; + USES_CONVERSION; + + if(!pathOutputFileName.isOkay()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType1] pathOutputFileName is null."); + return false; + } + mGraphType=GraphDVToFile; + LOG("[CaptureDeviceGraph::makeDVToFileGraphType1] mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)pSink)"); + if(!ComResult(mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)pSink)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType1] SetOutputFileName failed."); + return false; + } + if(!setAviOptions(ppf,INTERLEAVE_NONE))return false; + // Connect interleaved stream of MSDV to the AVI Mux/FW + LOG("[CaptureDeviceGraph::makeDVToFileGraphType1] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,0,ppf)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,0,ppf)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType1] mCaptureGraphBuilder->RenderStream() failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphType1] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Interleaved,mDeviceFilter,0,0)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Interleaved,mDeviceFilter,0,0)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType1] mCaptureGraphBuilder->RenderStream() failed."); + return true; // smk test + } + return true; +} + +bool CaptureDeviceGraph::makeDVToFileGraphNoPreType1(const BString &pathOutputFileName) +{ + ComPointer ppf; + ComPointer sink; + mGraphType=GraphDVToFileNoPre; + USES_CONVERSION; + +// if(!ComResult(mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),ppf,sink)).success()) + LOG("[CaptureDeviceGraph::makeDVToFileGraphNoPreType1] mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink)"); + if(!ComResult(mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphNoPreType1] mCaptureGraphBuilder->SetOutputFileName() failed."); + return false; + } + if(!setAviOptions(ppf,INTERLEAVE_NONE))return false; + LOG("[CaptureDeviceGraph::makeDVToFileGraphNoPreType1] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,0,ppf)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,0,ppf)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphNoPreType1] mCaptureGraphBuilder->RenderStream() failed."); + return false; + } + return true; +} + +// FileSource->AVI_Splitter->InfPinTee->DV_Camera +// InfPinTee->DVSplitter(vid)->DVDecoder->VideoWIndow +// DVSplitter(aud)->Default DirectSound device +// the graph we're making is: Async Reader --> AVI SPlitter --> Tee --> MSDV +// --> DV Splitter --> DV Decoder --> VidRend +// --> AudRend + +bool CaptureDeviceGraph::makeFileToDVGraphType1(const BString &pathInputFileName) +{ + mGraphType=GraphFileToDV; + ComPointer aviSplitter; + ComPointer inFTee; + USES_CONVERSION; + + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)"); + if(!ComResult(mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] mGraph->AddSourceFilter() Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] aviSplitter.createInstance(CLSID_AviSplitter,IID_IBaseFilter)"); + if(!ComResult(aviSplitter.createInstance(CLSID_AviSplitter,IID_IBaseFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] aviSplitter->createInstance(CLSID_AviSplitter,IID_IBaseFilter) Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] inFTee.createInstance(CLSID_InfTee,IID_IBaseFilter)"); + if(!ComResult(inFTee.createInstance(CLSID_InfTee,IID_IBaseFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] inFTee->createInstance(CLSID_InfTee,IID_BaseFilter) Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] mGraph->AddFilter(aviSplitter,L\"AVI Splitter\")"); + if(!ComResult(mGraph->AddFilter(aviSplitter,L"AVI Splitter")).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] mGraph->AddFilter(aviSplitter) Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,aviSplitter)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,aviSplitter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(..,aviSplitter) Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] mGraph->AddFilter(inFTee,L\"Infinite Tee\")"); + if(!ComResult(mGraph->AddFilter(inFTee,L"Infinite Tee")).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] mGraph->AddFilter(inFTee) Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(0,&MEDIATYPE_Interleaved,aviSplitter,0,inFTee)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,&MEDIATYPE_Interleaved,aviSplitter,0,inFTee)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(..,inFTee) Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(0,0,inFTee,0,mDeviceFilter)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,inFTee,0,mDeviceFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(..,mDeviceFilter) Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(0,0,inFTee,0,0)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,inFTee,0,0)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType1] mCaptureGraphBuilder->RenderStream(..,inFTee,0,0) Failed."); + return false; + } + return true; +} + +//FileSource->AVI_Splitter->DV_Camera +// Graph : Async Reader --> AVI Splitter --> MSDV + +bool CaptureDeviceGraph::makeFileToDVGraphNoPreType1(const BString &pathInputFileName) +{ + mGraphType=GraphFileToDVNoPre; + USES_CONVERSION; + + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType1] mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)"); + if(!ComResult(mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType1] mGraph->AddSourceFilter() Failed."); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType1] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,mDeviceFilter)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,mDeviceFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType1] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,mDeviceFilter) Failed."); + return false; + } + return true; +} + +// the graph we're making is: MSDV --> Smart Tee --> DV SPLITTER --> AVI MUX --> File Writer +// --> +// +// --> DV SPLITTER --> DV DEC --> Video Renderer +// --> Audio Renderer + +bool CaptureDeviceGraph::makeDVToFileGraphType2(const BString &pathOutputFileName) +{ + mGraphType=GraphDVToFileType2; + ComPointer dvSplitter; + ComPointer ppf; + ComPointer sink; + USES_CONVERSION; + + LOG("[CaptureDeviceGraph::makeDVToFileGraphType2] dvSplitter.createInstance(CLSID_DVSplitter,IID_IBaseFilter)"); + if(!ComResult(dvSplitter.createInstance(CLSID_DVSplitter,IID_IBaseFilter)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType2] createInstance(CLSID_DVSplitter,IID_IBaseFilter) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphType2] mGraph->AddFilter(dvSplitter,L\"DV Splitter\")"); + if(!ComResult(mGraph->AddFilter(dvSplitter,L"DV Splitter")).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType2] mGraph->AddFilter(dvSplitter,L\"DV Splitter\") Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink)"); + if(!ComResult(mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink) Failed"); + return false; + } + if(!setAviOptions(ppf,INTERLEAVE_NONE))return false; + LOG("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,dvSplitter,ppf)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,dvSplitter,ppf)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,dvSplitter,ppf) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->RenderStream(0,0,dvSplitter,0,ppf)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,dvSplitter,0,ppf)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->RenderStream(0,0,dvSplitter,0,ppf) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Interleaved,mDeviceFilter,0,0)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Interleaved,mDeviceFilter,0,0)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphType2] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Interleaved,mDeviceFilter,0,0) Failed"); + return false; + } + return true; +} + +// the graph we're making is: MSDV --> Smart Tee --> DV SPLITTER --> AVI MUX --> File Writer +// --> + +bool CaptureDeviceGraph::makeDVToFileGraphNoPreType2(const BString &pathOutputFileName) +{ + mGraphType=GraphDVToFileNoPreType2; + ComPointer dvSplitter; + ComPointer ppf; + ComPointer sink; + USES_CONVERSION; + + LOG("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] dvSplitter.createInstance(CLSID_DVSplitter,IID_IBaseFilter)"); + if(!ComResult(dvSplitter.createInstance(CLSID_DVSplitter,IID_IBaseFilter)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] dvSplitter.createInstance(CLSID_DVSplitter,IID_IBaseFilter) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mGraph->AddFilter(dvSplitter,L\"DV Splitter\")"); + if(!ComResult(mGraph->AddFilter(dvSplitter,L"DV Splitter")).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mGraph->AddFilter(dvSplitter,L\"DV Splitter\") Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink)"); + if(!ComResult(mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mCaptureGraphBuilder->SetOutputFileName(&MEDIASUBSTYPE_Avi,pathOutputFileName.str(),(IBaseFilter**)ppf,(IFileSinkFilter**)sink) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,dvSplitter,ppf)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,dvSplitter,ppf)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,mDeviceFilter,dvSplitter,ppf) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,dvSplitter,0,ppf)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,dvSplitter,0,ppf)).success()) + { + error("[CaptureDeviceGraph::makeDVToFileGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,dvSplitter,0,ppf) Failed"); + return false; + } + if(!setAviOptions(ppf,INTERLEAVE_NONE))return false; + return true; +} + +// the graph we need to build is: ASYNC reader --> AVI SPLITTER --> DV MUX --> TEE --> MSDV +// --> --> DVSP --> DV DEC --> VR +// --> AR + +bool CaptureDeviceGraph::makeFileToDVGraphType2(const BString &pathInputFileName) +{ + ComPointer dvMux; + ComPointer inFTee; + ComPointer out; + + mGraphType=GraphFileToDVType2; + USES_CONVERSION; + + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] dvMux.createInstance(CLSID_DVMux,IID_IBaseFilter)"); + if(!ComResult(dvMux.createInstance(CLSID_DVMux,IID_IBaseFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] dvMux.createInstance(CLSID_DVMux,IID_IBaseFiler) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] inFTee.createInstance(CLSID_InfTee,IID_IBaseFilter)"); + if(!ComResult(inFTee.createInstance(CLSID_InfTee,IID_IBaseFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] inFTee.createInstance(CLSID_InfTee,IID_IBaseFilter) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)"); + if(!ComResult(mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->AddFilter(dvMux,L\"DV Muxer\")"); + if(!ComResult(mGraph->AddFilter(dvMux,L"DV Muxer")).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->AddFilter(dvMux,L\"DV Muxer\") Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->AddFilter(inFTee,L\"Infinite Tee\")"); + if(!ComResult(mGraph->AddFilter(inFTee,L"Infinite Tee")).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->AddFilter(inFTee,L\"Infinite Tee\") Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->RenderStream(0,0,dvMux,0,inFTee)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,dvMux,0,inFTee)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->RenderStream(0,0,dvMux,0,inFTee) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->RenderStream(0,0,inFTee,0,mDeviceFilter)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,inFTee,0,mDeviceFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->RenderStream(0,0,inFTee,0,mDeviceFilter) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->FindPin(inFTee,PINDIR_OUTPUT,0,0,true,0,(IPin**)out)"); + if(!ComResult(mCaptureGraphBuilder->FindPin(inFTee,PINDIR_OUTPUT,0,0,true,0,(IPin**)out)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mCaptureGraphBuilder->FindPin(inFTee,PINDIR_OUTPUT,0,0,true,0,(IPin**)out) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->Render(out)"); + if(!ComResult(mGraph->Render(out)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphType2] mGraph->Render(out) Failed"); + return false; + } + return true; +} + +// the graph we need to build is: ASYNC reader --> AVI SPLITTER --> DV MUX --> MSDV +// --> +// connect file video stream to DV MUX +bool CaptureDeviceGraph::makeFileToDVGraphNoPreType2(const BString &pathInputFileName) +{ + ComPointer dvMux; + mGraphType=GraphFileToDVNoPreType2; + USES_CONVERSION; + + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] dvMux.createInstance(CLSID_DVMux,IID_IBaseFilter)"); + if(!ComResult(dvMux.createInstance(CLSID_DVMux,IID_IBaseFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] dvMux.createInstance(CLSID_DVMux,IID_IBaseFilter) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)"); + if(!ComResult(mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mGraph->AddSourceFilter(pathInputFileName.str(),pathInputFileName.str(),(IBaseFilter**)mInputFileFilter) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mGraph->AddFilter(dvMux,L\"DV Muxer\")"); + if(!ComResult(mGraph->AddFilter(dvMux,L"DV Muxer")).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mGraph->AddFilter(dvMux,L\"DV Muxer\") Failed"); + return false; + } +// connect video + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux) Failed"); + return false; + } +// connect audio - looks suspicious because this line same as previous + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,mInputFileFilter,0,dvMux) Failed"); + return false; + } + LOG("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,dvMux,0,mDeviceFilter)"); + if(!ComResult(mCaptureGraphBuilder->RenderStream(0,0,dvMux,0,mDeviceFilter)).success()) + { + error("[CaptureDeviceGraph::makeFileToDVGraphNoPreType2] mCaptureGraphBuilder->RenderStream(0,0,dvMux,0,mDeviceFilter) Failed"); + return false; + } + return true; +} + +bool CaptureDeviceGraph::setAviOptions(ComPointer &ppf,InterleavingMode interleavingMode) +{ + ComPointer mux; + ComPointer interleaving; + + LOG("[CaptureDeviceGraph::setAviOptions] ppf->QueryInterface(IID_IConfigAviMux,(void**)(IConfigAviMux**)mux)"); + if(!ComResult(ppf->QueryInterface(IID_IConfigAviMux,(void**)(IConfigAviMux**)mux)).success()) + { + error("[CaptureDeviceGraph::setAviOptions] Failed to QueryInterface on IID_IConfigAviMux"); + return false; + } + LOG("[CaptureDeviceGraph::setAviOptions] mux->SetOutputCompatibilityIndex(true)"); + if(!ComResult(mux->SetOutputCompatibilityIndex(true)).success()) + { + error("[CaptureDeviceGraph::setAviOptions] mux->SetOutputCompatibilityIndex failed"); + return false; + } + LOG("[CaptureDeviceGraph::setAviOptions] ppf->QueryInterface(IID_IConfigInterleaving,(void**)(IConfigInterleaving**)interleaving)"); + if(!ComResult(ppf->QueryInterface(IID_IConfigInterleaving,(void**)(IConfigInterleaving**)interleaving)).success()) + { + error("[CaptureDeviceGraph::setAviOptions] QueryInterface IConfigInterleaving failed"); + return false; + } + LOG("[CaptureDeviceGraph::setAviOptions] interleaving->put_Mode(interleavingMode)"); + if(!ComResult(interleaving->put_Mode(interleavingMode)).success()) // full,none,half + { + error("[CaptureDeviceGraph::setAviOptions] interleaving->put_Mode failed"); + return false; + } + return true; +} + +bool CaptureDeviceGraph::getVideoWindowDimensions(int &width,int &height,bool changeResolution,GUIWindow &window) +{ + if(window.isValid()) + { + if(!getResolutionFromDVDecoderPropertyPage(window,changeResolution))return false; + } + switch(mDVResolution) + { + case DVRESOLUTION_FULL: + width=DVEncoderWidth; + if(DVENCODERVIDEOFORMAT_PAL==mVideoFormat)height=PALDVEncoderHeight; + else if(DVENCODERVIDEOFORMAT_NTSC==mVideoFormat)height=NTSCDVEncoderHeight; + break; + case DVRESOLUTION_HALF: + width=DVEncoderWidth/2; + if(DVENCODERVIDEOFORMAT_PAL==mVideoFormat)height=PALDVEncoderHeight/2; + else if(DVENCODERVIDEOFORMAT_NTSC==mVideoFormat)height=NTSCDVEncoderHeight/2; + break; + case DVRESOLUTION_QUARTER: + width=DVEncoderWidth/4; + if(DVENCODERVIDEOFORMAT_PAL==mVideoFormat)height=PALDVEncoderHeight/4; + else if(DVENCODERVIDEOFORMAT_NTSC==mVideoFormat)height=NTSCDVEncoderHeight/4; + break; + case DVRESOLUTION_DC: + width = 88; + if(DVENCODERVIDEOFORMAT_PAL==mVideoFormat)height=PALDVEncoderHeight/8; + else if(DVENCODERVIDEOFORMAT_NTSC==mVideoFormat)height=NTSCDVEncoderHeight/8; + break; + } + return true; +} + +bool CaptureDeviceGraph::getResolutionFromDVDecoderPropertyPage(GUIWindow &window,bool changeResolution) +{ + ComPointer dvDecoder; + ComPointer ipDVDec; + ComPointer propertyPages; + FILTER_INFO filterInfo; + + LOG("[CaptureDeviceGraph::getResolutionFromDVDecoderPropertyPage] mGraph->FindFilterByName(L\"DV Video Decoder\",(IBaseFilter**)dvDecoder)"); + if(!ComResult(mGraph->FindFilterByName(L"DV Video Decoder",(IBaseFilter**)dvDecoder)).success()) + { + error("[CaptureDeviceGraph::getResolutionFromDVPropertyPage] mGraph->FindFilterByName() Failed."); + return false; + } + LOG("[CaptureDeviceGraph::getResolutionFromDVDecoderPropertyPage] dvDecoder->QueryInterface(IID_ISpecifyPropertyPages,(void**)(ISpecifyPropertyPages**)propertyPages)"); + if(!ComResult(dvDecoder->QueryInterface(IID_ISpecifyPropertyPages,(void**)(ISpecifyPropertyPages**)propertyPages)).success()) + { + error("[CaptureDeviceGraph::getResolutionFromDVPropertyPage] QueryInterface ISpecifyPropertyPages Failed."); + return false; + } + LOG("[CaptureDeviceGraph::getResolutionFromDVDecoderPropertyPage] dvDecoder->QueryFilterInfo(&filterInfo)"); + if(!ComResult(dvDecoder->QueryFilterInfo(&filterInfo)).success()) + { + error("[CaptureDeviceGraph::getResolutionFromDVPropertyPage] dvDecoder->QueryFilterInfo() Failed."); + return false; + } + if(changeResolution) + { + CAUUID caGUID; + propertyPages->GetPages(&caGUID); + ::OleCreatePropertyFrame(window, // parent window + 0,0, // reserved + filterInfo.achName, // caption for dialog box + 1, // number of objects + (IUnknown**)(IBaseFilter**)dvDecoder, // array of object pointers + caGUID.cElems, // number of property pages + caGUID.pElems, // array of property page CLSID's + 0, // locale identifier + 0,0); // reserved + ::CoTaskMemFree(caGUID.pElems); + } + filterInfo.pGraph->Release(); + LOG("[CaptureDeviceGraph::getResolutionFromDVDecoderPropertyPage] dvDecoder->QueryInterface(IID_IIPDVDec,(void**)(IIPDVDec**)ipDVDec)"); + if(!ComResult(dvDecoder->QueryInterface(IID_IIPDVDec,(void**)(IIPDVDec**)ipDVDec)).success()) + { + error("[CaptureDeviceGraph::getResolutionFromDVPropertyPage] QueryInterface IIPDVDec Failed"); + return false; + } + LOG("[CaptureDeviceGraph::getResolutionFromDVDecoderPropertyPage] ipDVDec->get_IPDisplay((int*)&mDVResolution)"); + if(!ComResult(ipDVDec->get_IPDisplay((int*)&mDVResolution)).success()) + { + error("[CaptureDeviceGraph::getResolutionFromDVPropertyPage] ipDVDec->get_IPDisplay() Failed."); + return false; + } + return true; +} + +bool CaptureDeviceGraph::startGraph(void) +{ + LOG("[CaptureDeviceGraph::startGraph] mMediaControl->Run()"); + if(!ComResult(mMediaControl->Run()).success()) + { + stopGraph(); + error("[CaptureDeviceGraph::startGraph] mMediaControl->Run() Failed."); + return false; + } + return true; +} + +bool CaptureDeviceGraph::stopGraph(void) +{ + LOG("[CaptureDeviceGraph::stopGraph] mMediaControl->Stop()"); + if(!ComResult(mMediaControl->Stop()).success()) + { + error("[CaptureDeviceGraph::stopGraph] mMediaControl->Stop() Failed."); + return false; + } + return true; +} + +bool CaptureDeviceGraph::pauseGraph(void) +{ + LOG("[CaptureDeviceGraph::pauseGraph] mMediaControl->Pause()"); + if(!ComResult(mMediaControl->Pause()).success()) + { + stopGraph(); + error("[CaptureDeviceGraph::pauseGraph] mMediaControl->Stop() Failed."); + return false; + } + return true; +} + +bool CaptureDeviceGraph::getTimecode(TIMECODE_SAMPLE &tcSample) +{ + LOG("[CaptureDeviceGraph::getTimecode] mTimecodeReader->GetTimecode(&tcSample)"); + if(!ComResult(mTimecodeReader->GetTimecode(&tcSample)).success())return false; + return true; +} + +bool CaptureDeviceGraph::setNotifyWindow(GUIWindow &window,int command) +{ + LOG("[CaptureDeviceGraph::setNotifyWindow] mMediaEvent->SetNotifyWindow((LONG_PTR)window.getHandle(),command,0)"); + if(!ComResult(mMediaEvent->SetNotifyWindow((LONG_PTR)window.getHandle(),command,0)).success())return false; + return true; +} + +bool CaptureDeviceGraph::putOwner(GUIWindow &window) +{ + LOG("[CaptureDeviceGraph::putOwner] mVideoWindow->put_Owner((OAHWND)window.getHandle())"); + if(!ComResult(mVideoWindow->put_Owner((OAHWND)window.getHandle())).success())return false; + return true; +} + +bool CaptureDeviceGraph::putWindowStyle(int style) +{ + LOG("[CaptureDeviceGraph::putWindowStyle] mVideoWindow->put_WindowStyle(style)"); + if(!ComResult(mVideoWindow->put_WindowStyle(style)).success())return false; + return true; +} + +bool CaptureDeviceGraph::setVideoWindowPosition(int left,int top,int width,int height) +{ + LOG("[CaptureDeviceGraph::setVideoWindowPosition] mVideoWindow->SetWindowPosition(left,top,width,height)"); + if(!ComResult(mVideoWindow->SetWindowPosition(left,top,width,height)).success())return false; + return true; +} + +bool CaptureDeviceGraph::setVideoWindowVisible(bool visible) +{ + LOG("[CaptureDeviceGraph::setVideoWindowVisible] mVideoWindow->put_Visible(visible?OATRUE:OAFALSE)"); + if(!ComResult(mVideoWindow->put_Visible(visible?OATRUE:OAFALSE)).success())return false; + return true; +} + +bool CaptureDeviceGraph::putIAMExtTransportMode(int mode) +{ + if(!mExtTransport.isOkay())return false; + LOG("[CaptureDeviceGraph::putIAMExtTransportMode] mExtTransport->put_Mode(mode)"); + return mExtTransport->put_Mode(mode); +} + +bool CaptureDeviceGraph::seekAtn(int hour,int minute,int second,int frame) +{ + BYTE rawAVCPkt[8]={0x00,0x20,0x52,0x20,0xff,0xff,0xff,0xff}; // raw AVC for seek atn + ULONG searchTrackNumber; + ComResult comResult; + long iCnt=sizeof(rawAVCPkt); + bool returnCode=false; + + if(DVENCODERVIDEOFORMAT_PAL==mVideoFormat && (frame>25)) + { + error("[CaptureDeviceGraph::seekAtn] Frame should be less than 25 for PAL"); + return false; + } + if(DVENCODERVIDEOFORMAT_NTSC==mVideoFormat && (frame>30)) + { + error("[CaptureDeviceGraph::seekAtn] Frame should be less than 30 for NTSC"); + return false; + } + if((hour<26)&&(hour>=0)&&(minute<60)&&(minute>=0)&&(second<60)) + { + if(40==mAverageTimePerFrame) + { + searchTrackNumber=((minute*60+second)*25+frame)*12*2; + } + else // drop two frame every minutes + { + searchTrackNumber=((minute*60+second)*30+frame-((minute-(minute/10))*2))*10*2; + } + rawAVCPkt[4]=(BYTE)(searchTrackNumber&0x000000ff); + rawAVCPkt[5]=(BYTE)((searchTrackNumber&0x0000ff00) >> 8); + rawAVCPkt[6]=(BYTE)((searchTrackNumber&0x00ff0000) >> 16); + LOG("[CaptureDeviceGraph::seekAtn] mExtTransport->GetTransportBasicParameters(ED_RAW_EXT_DEV_CMD,&iCnt,(LPOLESTR *)rawAVCPkt)"); + comResult=mExtTransport->GetTransportBasicParameters(ED_RAW_EXT_DEV_CMD,&iCnt,(LPOLESTR *)rawAVCPkt); + if(!comResult.success()) + { + if(ERROR_TIMEOUT==comResult.result())::OutputDebugString("ATN Seek returns ERROR_TIMEOUT\n"); + else if(ERROR_REQ_NOT_ACCEP==comResult.result())::OutputDebugString(" ATN Seek returns ERROR_REQ_NOT_ACCEP\n"); + else if(ERROR_NOT_SUPPORTED==comResult.result())::OutputDebugString(" ATN Seek returns ERROR_NOT_SUPPORTED\n"); + else if(ERROR_REQUEST_ABORTED==comResult.result())::OutputDebugString(" ATN Seek returns ERROR_REQUEST_ABORTED\n"); + } + returnCode=true; + } + else + { + error("Invalid Parameter - Time entered should be:\nHour:Minute:Second:Frame"); + } + return returnCode; +} + +bool CaptureDeviceGraph::nukeInputFileFilter() +{ + Nuker nuker(mGraph); + if(!nuker.nukeFilter(mInputFileFilter,true,false)) + { + LOG("[CaptureDeviceGraph::nukeInputFileFilter] Failed."); + return false; + } + mGraph->RemoveFilter(mInputFileFilter); + mInputFileFilter.Release(); + return true; +} + +bool CaptureDeviceGraph::nukeDeviceFilter() +{ + Nuker nuker(mGraph); + if(!nuker.nukeFilter(mDeviceFilter,true,true)) + { + LOG("[CaptureDeviceGraph::nukeDeviceFilter] Failed."); + return false; + } + return true; +} diff --git a/dvcap/CaptureDeviceGraph.hpp b/dvcap/CaptureDeviceGraph.hpp new file mode 100644 index 0000000..3e4ec86 --- /dev/null +++ b/dvcap/CaptureDeviceGraph.hpp @@ -0,0 +1,140 @@ +#ifndef _DVCAP_CAPTUREDEVICEGRAPH_HPP_ +#define _DVCAP_CAPTUREDEVICEGRAPH_HPP_ +#ifndef _COMMON_DXSDK_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COM_COM_HPP_ +#include +#endif +#ifndef _COM_BSTRING_HPP_ +#include +#endif +#ifndef _COM_COMPOINTER_HPP_ +#include +#endif +#ifndef _DVCAP_NUKER_HPP_ +#include +#endif + +#ifdef _DVCAP_DEBUG +#define LOG(s) log(s) +#else +#define LOG(s) +#endif + +class CaptureDeviceGraph +{ +public: + typedef enum DVMode{CameraMode=0,VCRMode,UnknownMode}; + typedef enum GraphType{GraphPreview,GraphDVToFile,GraphDVToFileNoPre,GraphFileToDV,GraphFileToDVNoPre, + GraphDVToFileType2,GraphDVToFileNoPreType2,GraphFileToDVType2,GraphFileToDVNoPreType2}; + CaptureDeviceGraph(); + virtual ~CaptureDeviceGraph(); + bool buildBasicGraph(void); + bool getTapeInfo(void); + _DVENCODERVIDEOFORMAT getVideoFormat(void)const; + const BString &getDeviceName(void)const; + bool getTimecode(TIMECODE_SAMPLE &tcSample); // should wrap TIMECODE_SAMPLE & provide formatting capabilities + bool seekAtn(int hour,int minute,int second,int frame); + bool stopGraph(void); + bool pauseGraph(void); + bool startGraph(void); + + bool makePreviewGraph(void); + +// type 1 file (capture/playback/transmit) + bool makeDVToFileGraphType1(const BString &pathOutputFileName); + bool makeDVToFileGraphNoPreType1(const BString &pathOutputFileName); + bool makeFileToDVGraphType1(const BString &pathInputFileName); + bool makeFileToDVGraphNoPreType1(const BString &pathInputFileName); + + bool makeDVToFileGraphType2(const BString &pathOutputFileName); + bool makeDVToFileGraphNoPreType2(const BString &pathOutputFileName); + bool makeFileToDVGraphType2(const BString &pathInputFileName); + bool makeFileToDVGraphNoPreType2(const BString &pathInputFileName); + + bool getDroppedFrameNum(bool &isModeTransmit,long &dropped,long ¬Dropped); + bool changeFrameRate(bool halfFrameRate); + + bool getVideoWindowDimensions(int &width,int &height,bool changeResolution=false,GUIWindow &window=GUIWindow()); + bool setNotifyWindow(GUIWindow &window,int command); + bool putOwner(GUIWindow &window); + bool putWindowStyle(int style); + bool setVideoWindowPosition(int left,int top,int width,int height); + bool setVideoWindowVisible(bool visible); + bool putIAMExtTransportMode(int mode); + bool seekATN(int iHr,int iMn,int iSc,int iFr); + DVMode getDVMode(void); + bool saveGraphToFile(const BString &pathOutputFileName); + bool nukeInputFileFilter(); + bool nukeDeviceFilter(); +private: + enum{DVEncoderWidth=720,PALDVEncoderHeight=576,NTSCDVEncoderHeight=480}; + void freeFilters(void); + bool initializeGraph(void); + bool addDeviceFilter(void); + bool getResolutionFromDVDecoderPropertyPage(GUIWindow &window,bool changeResolution); + bool setAviOptions(ComPointer &ppf,InterleavingMode interleaveMode); + void log(const String &string); + void error(const String &string); + + ComPointer mGraph; + ComPointer mCaptureGraphBuilder; + ComPointer mMediaControl; + ComPointer mMediaEvent; + ComPointer mDeviceFilter; + ComPointer mInputFileFilter; + ComPointer mVideoWindow; + ComPointer mDroppedFrames; + ComPointer mExtDevice; + ComPointer mExtTransport; + ComPointer mTimecodeReader; + BString mDeviceName; + DVMode mSubunitMode; + GraphType mGraphType; + _DVENCODERVIDEOFORMAT mVideoFormat; + LONG mAverageTimePerFrame; + _DVRESOLUTION mDVResolution; + BString mLastErrorText; + File mLogFile; +}; + +inline +_DVENCODERVIDEOFORMAT CaptureDeviceGraph::getVideoFormat(void)const +{ + return mVideoFormat; +} + +inline +const BString &CaptureDeviceGraph::getDeviceName(void)const +{ + return mDeviceName; +} + +inline +void CaptureDeviceGraph::error(const String &string) +{ + SystemTime systemTime; + mLogFile.writeLine(String("[ERROR]")+String("[")+systemTime.toString()+String("]")+string); + mLastErrorText=string; +} + +inline +void CaptureDeviceGraph::log(const String &string) +{ + SystemTime systemTime; + mLogFile.writeLine(String("[LOG]")+String("[")+systemTime.toString()+String("]")+string); +} +#endif + + + diff --git a/dvcap/Debug/RCa00736 b/dvcap/Debug/RCa00736 new file mode 100644 index 0000000..267a863 Binary files /dev/null and b/dvcap/Debug/RCa00736 differ diff --git a/dvcap/Debug/dvcap.exe b/dvcap/Debug/dvcap.exe new file mode 100644 index 0000000..0bf9bc1 Binary files /dev/null and b/dvcap/Debug/dvcap.exe differ diff --git a/dvcap/Debug/dvcap.exp b/dvcap/Debug/dvcap.exp new file mode 100644 index 0000000..e48d521 Binary files /dev/null and b/dvcap/Debug/dvcap.exp differ diff --git a/dvcap/Debug/dvcap.lib b/dvcap/Debug/dvcap.lib new file mode 100644 index 0000000..361c644 Binary files /dev/null and b/dvcap/Debug/dvcap.lib differ diff --git a/dvcap/Debug/dvcap.log b/dvcap/Debug/dvcap.log new file mode 100644 index 0000000..a458b18 --- /dev/null +++ b/dvcap/Debug/dvcap.log @@ -0,0 +1,5 @@ +********************************************************************* + DVCAPTURE LOG FILE STARTED AT:Monday, March 2,2009 19:59:51 +********************************************************************* +[ERROR][Monday, March 2,2009 19:59:52][CaptureDeviceGraph::addDeviceFilter] createDevEnum->CreateClassEnumerator() Failed. +[ERROR][Monday, March 2,2009 19:59:52][CaptureDeviceGraph::buildBasicGraph] Failed to add device filter. diff --git a/dvcap/Debug/dvcap.res b/dvcap/Debug/dvcap.res new file mode 100644 index 0000000..c141711 Binary files /dev/null and b/dvcap/Debug/dvcap.res differ diff --git a/dvcap/Debug/vc60.idb b/dvcap/Debug/vc60.idb new file mode 100644 index 0000000..6b2f903 Binary files /dev/null and b/dvcap/Debug/vc60.idb differ diff --git a/dvcap/DeviceDescriptor.hpp b/dvcap/DeviceDescriptor.hpp new file mode 100644 index 0000000..862be9d --- /dev/null +++ b/dvcap/DeviceDescriptor.hpp @@ -0,0 +1,66 @@ +#ifndef _PROTO_DEVICEDESCRIPTOR_HPP_ +#define _PROTO_DEVICEDESCRIPTOR_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class DeviceDescriptor +{ +public: + DeviceDescriptor(); + DeviceDescriptor(const String &name,const String &description); + virtual ~DeviceDescriptor(); + const String &getName(void)const; + void setName(const String &name); + const String &getDescription(void)const; + void setDescription(const String &description); +private: + String mName; + String mDescription; +}; + +inline +DeviceDescriptor::DeviceDescriptor() +{ +} + +inline +DeviceDescriptor::DeviceDescriptor(const String &name,const String &description) +: mName(name), mDescription(description) +{ +} + +inline +DeviceDescriptor::~DeviceDescriptor() +{ +} + +inline +const String &DeviceDescriptor::getName(void)const +{ + return mName; +} + +inline +void DeviceDescriptor::setName(const String &name) +{ + mName=name; +} + +inline +const String &DeviceDescriptor::getDescription(void)const +{ + return mDescription; +} + +inline +void DeviceDescriptor::setDescription(const String &description) +{ + mDescription=description; +} +typedef Block DeviceDescriptors; +#endif + diff --git a/dvcap/DeviceEnumerator.cpp b/dvcap/DeviceEnumerator.cpp new file mode 100644 index 0000000..e7ebed9 --- /dev/null +++ b/dvcap/DeviceEnumerator.cpp @@ -0,0 +1,102 @@ +#include +#include +#include +#include + +bool DeviceEnumerator::enumerateCategory(DeviceDescriptors &descriptors,DevCat devCat) +{ + switch(devCat) + { + case AudioCaptureSources : + return enumerateCategory(descriptors,CLSID_AudioInputDeviceCategory); + case AudioCompressors : + return enumerateCategory(descriptors,CLSID_AudioCompressorCategory); + case AudioRenderers : + return enumerateCategory(descriptors,CLSID_AudioRendererCategory); + case DeviceControlFilters : + return enumerateCategory(descriptors,CLSID_DeviceControlCategory); + case DirectShowFilters : + return enumerateCategory(descriptors,CLSID_LegacyAmFilterCategory); + case ExternalRenderers : + return enumerateCategory(descriptors,CLSID_TransmitCategory); + case MidiRenderers : + return enumerateCategory(descriptors,CLSID_MidiRendererCategory); + case VideoCaptureSources : + return enumerateCategory(descriptors,CLSID_VideoInputDeviceCategory); + case VideoCompressors : + return enumerateCategory(descriptors,CLSID_VideoCompressorCategory); + case VideoEffects1 : + return enumerateCategory(descriptors,CLSID_VideoEffects1Category); + case VideoEffects2 : + return enumerateCategory(descriptors,CLSID_VideoEffects2Category); + case WDMStreamingDecompressionDevices : + return enumerateCategory(descriptors,KSCATEGORY_DATADECOMPRESSOR); + case WDMStreamingCaptureDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_CAPTURE); + case WDMStreamingCommunicationTransforms : + return enumerateCategory(descriptors,KSCATEGORY_COMMUNICATIONSTRANSFORM); + case WDMStreamingCrossbarDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_CROSSBAR); + case WDMStreamingDataTransforms : + return enumerateCategory(descriptors,KSCATEGORY_DATATRANSFORM); + case WDMStreamingInterfaceTransforms : + return enumerateCategory(descriptors,KSCATEGORY_INTERFACETRANSFORM); + case WDMStreamingMixerDevices : + return enumerateCategory(descriptors,KSCATEGORY_MIXER); + case WDMRenderingDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_RENDER); + case WDMStreamingSystemAudioDevices : + return enumerateCategory(descriptors,KSCATEGORY_AUDIO_DEVICE); + case WDMStreamingTeeSplitterDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_SPLITTER); + case WDMStreamingTVAudioDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_TVAUDIO); + case WDMStreamingTVTunerDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_TVTUNER); + case WDMStreamingVBICodes : + return enumerateCategory(descriptors,AM_KSCATEGORY_VBICODEC); + case ActiveMovieFilterCategories : + return enumerateCategory(descriptors,CLSID_ActiveMovieCategories); + } + return false; +} + +bool DeviceEnumerator::enumerateCategory(DeviceDescriptors &descriptors,GUID classID) +{ + ComInitializer comInit; + ComPointer sysDevEnum; + ComPointer enumMoniker; + ComPointer moniker; + ComObj comObj; + ComResult comResult; + BString bstring; + DeviceDescriptor descriptor; + ULONG cFetched; + + descriptors.remove(); + comResult=sysDevEnum.createInstance(CLSID_SystemDeviceEnum,IID_ICreateDevEnum); + if(comResult.error())return false; + comResult=sysDevEnum->CreateClassEnumerator(classID,(IEnumMoniker**)enumMoniker,0); + if(comResult.error())return false; + while(S_OK==enumMoniker->Next(1,(IMoniker**)moniker,&cFetched)) + { + ComPointer propertyBag; + moniker->BindToStorage(0,0,IID_IPropertyBag,(void**)(IPropertyBag**)propertyBag); + Variant varName; + comResult=propertyBag->Read(L"FriendlyName", &varName.getVARIANT(), 0); + if(comResult.success()) + { + varName.getData(bstring); + descriptor.setName(bstring.toString()); + } + comResult=propertyBag->Read(L"Description",&varName.getVARIANT(), 0); + if(comResult.success()) + { + varName.getData(bstring); + descriptor.setDescription(bstring.toString()); + } + if(descriptor.getName().isNull()&&descriptor.getDescription().isNull())continue; + descriptors.insert(&descriptor); + } + return true; +} diff --git a/dvcap/DeviceEnumerator.hpp b/dvcap/DeviceEnumerator.hpp new file mode 100644 index 0000000..da612b9 --- /dev/null +++ b/dvcap/DeviceEnumerator.hpp @@ -0,0 +1,31 @@ +#ifndef _PROTO_DEVICEENUMERATOR_HPP_ +#define _PROTO_DEVICEENUMERATOR_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_DXSDK_HPP_ +#include +#endif +#ifndef _PROTO_DEVICEDESCRIPTOR_HPP_ +#include +#endif + +class DeviceEnumerator +{ +public: + typedef enum DevCat{AudioCaptureSources,AudioCompressors,AudioRenderers,DeviceControlFilters, + DirectShowFilters,ExternalRenderers,MidiRenderers,VideoCaptureSources,VideoCompressors, + VideoEffects1,VideoEffects2,WDMStreamingDecompressionDevices,WDMStreamingCaptureDevices, + WDMStreamingCommunicationTransforms,WDMStreamingCrossbarDevices,WDMStreamingDataTransforms, + WDMStreamingInterfaceTransforms,WDMStreamingMixerDevices,WDMRenderingDevices, + WDMStreamingSystemAudioDevices,WDMStreamingTeeSplitterDevices,WDMStreamingTVAudioDevices, + WDMStreamingTVTunerDevices,WDMStreamingVBICodes,ActiveMovieFilterCategories}; + static bool enumerateCategory(DeviceDescriptors &descriptors,DevCat devCat); +private: + static bool enumerateCategory(DeviceDescriptors &descriptors,GUID classID); +}; +#endif + diff --git a/dvcap/DeviceNotify.cpp b/dvcap/DeviceNotify.cpp new file mode 100644 index 0000000..59b09b7 --- /dev/null +++ b/dvcap/DeviceNotify.cpp @@ -0,0 +1,23 @@ +#include +#include +#include +#include + +bool DeviceNotification::registerDeviceNotification(GUIWindow &guiWindow) +{ + DEV_BROADCAST_DEVICEINTERFACE filterData; + + ::memset(&filterData,0,sizeof(filterData)); + filterData.dbcc_size=sizeof(filterData); + filterData.dbcc_devicetype=DBT_DEVTYP_DEVICEINTERFACE; + filterData.dbcc_classguid=AM_KSCATEGORY_CAPTURE; + mhDevNotify=::RegisterDeviceNotification(guiWindow,&filterData,DEVICE_NOTIFY_WINDOW_HANDLE); + return isOkay(); +} + +void DeviceNotification::unRegisterDeviceNotification() +{ + if(!isOkay())return; + ::UnregisterDeviceNotification(mhDevNotify); + mhDevNotify=0; +} diff --git a/dvcap/DeviceNotify.hpp b/dvcap/DeviceNotify.hpp new file mode 100644 index 0000000..63818fb --- /dev/null +++ b/dvcap/DeviceNotify.hpp @@ -0,0 +1,51 @@ +#ifndef _DVCAP_DEVICENOTIFICATION_HPP_ +#define _DVCAP_DEVICENOTIFICATION_HPP_ +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif + +class DeviceNotification +{ +public: + DeviceNotification(); + virtual ~DeviceNotification(); + bool registerDeviceNotification(GUIWindow &guiWindow); + void unRegisterDeviceNotification(); + bool isOkay(void)const; +private: + DeviceNotification(const DeviceNotification &deviceNotification); + DeviceNotification &operator=(const DeviceNotification &deviceNotification); + + void *mhDevNotify; +}; + +inline +DeviceNotification::DeviceNotification() +: mhDevNotify(0) +{ +} + +inline +DeviceNotification::~DeviceNotification() +{ + unRegisterDeviceNotification(); +} + +inline +DeviceNotification::DeviceNotification(const DeviceNotification &deviceNotification) +{ // private + *this=deviceNotification; +} + +inline +DeviceNotification &DeviceNotification::operator=(const DeviceNotification &deviceNotification) +{ // private + return *this; +} + +inline +bool DeviceNotification::isOkay(void)const +{ + return mhDevNotify?true:false; +} +#endif diff --git a/dvcap/Main.cpp b/dvcap/Main.cpp new file mode 100644 index 0000000..c761160 --- /dev/null +++ b/dvcap/Main.cpp @@ -0,0 +1,49 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainWindow mainWindow; + + return mainWindow.messageLoop(); + +/* + +#include +#include +#include +#include + + + ComInitializer comInitializer; + DeviceDescriptors descriptors; + BString deviceName("Microsoft DV Camera and VCR"); +*/ + +/* + ComResult comResult; + ComPointer deviceEnumerator; + ComPointer devEnum; + + comResult=deviceEnumerator.createInstance(CLSID_SystemDeviceEnum,IID_ICreateDevEnum); + if(!comResult.success())return; + comResult=deviceEnumerator->CreateClassEnumerator(CLSID_VideoCompressorCategory,(IEnumMoniker**)devEnum,0); + if(!comResult.success())return; +*/ + +/* VideoCapture videoCapture; + if(!videoCapture.capture(deviceName)) + { + ::OutputDebugString(String("Capture failed on device '")+deviceName.toString()+String("'\n")); + return 0; + } +*/ + +/* DeviceEnumerator::enumerateCategory(descriptors,DeviceEnumerator::VideoCaptureSources); +// DeviceEnumerator::enumerateCategory(descriptors,DeviceEnumerator::VideoCompressors); + for(int index=0;index +#include +#include +#include +#include +#include +#include + +char MainWindow::szClassName[]="DVCAP [v1.00]"; +char MainWindow::szMenuName[]="DVCAP"; + +MainWindow::MainWindow(void) +: mHaveDevice(false), mVideoWidth(0), mVideoHeight(0), mCapStartTime(0), + mHours(0), mMinutes(0), mSeconds(0) +{ + mPaintHandler.setCallback(this,&MainWindow::paintHandler); + mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); + mCommandHandler.setCallback(this,&MainWindow::commandHandler); + mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler); + mSizeHandler.setCallback(this,&MainWindow::sizeHandler); + mCreateHandler.setCallback(this,&MainWindow::createHandler); + mUserHandler.setCallback(this,&MainWindow::userHandler); + mDeviceChangeHandler.setCallback(this,&MainWindow::deviceChangeHandler); + mATNTimerHandler.setCallback(this,&MainWindow::atnTimerHandler); + mCapLimitTimerHandler.setCallback(this,&MainWindow::capLimitTimerHandler); + mFramesTimerHandler.setCallback(this,&MainWindow::framesTimerHandler); + mAtnTimer.insertHandler(&mATNTimerHandler); + mCapLimitTimer.insertHandler(&mCapLimitTimerHandler); + mFramesTimer.insertHandler(&mFramesTimerHandler); + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::UserHandler,&mUserHandler); + insertHandler(VectorHandler::DeviceChangeHandler,&mDeviceChangeHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::UserHandler,&mUserHandler); + removeHandler(VectorHandler::DeviceChangeHandler,&mDeviceChangeHandler); +} + +void MainWindow::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(processInstance(),"DVCAP"); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(GRAY_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + if(mCaptureDeviceGraph.isOkay())mCaptureDeviceGraph.destroy(); + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::deviceChangeHandler(CallbackData &someCallbackData) +{ + handleDeviceChange(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case DVCAPMENU_FILE_SETOUTPUT : + handleFileSetOutput(); + break; + case DVCAPMENU_FILE_SETINPUT : + handleFileSetInput(); + break; + case DVCAPMENU_FILE_SAVEGRAPH : + handleFileSaveGraph(); + break; + case DVCAPMENU_FILE_CAPTURESIZE : + handleFileCaptureSize(); + break; + case DVCAPMENU_FILE_EXIT : + sendMessage(WM_CLOSE,0,0L); + break; + case DVCAPMENU_MODE_PREVIEW : + handleModePreview(); + break; + case DVCAPMENU_MODE_DVTOFILE : + handleModeDVToFile(); + break; + case DVCAPMENU_MODE_DVTOFILE_NOPRE : + handleModeDVToFileNoPre(); + break; + case DVCAPMENU_MODE_FILETODV : + handleModeFileToDV(); + break; + case DVCAPMENU_MODE_FILETODV_NOPRE : + handleModeFileToDVNoPre(); + break; + case DVCAPMENU_MODE_DVTOFILE_TYPE2 : + handleModeDVToFileType2(); + break; + case DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2 : + handleModeDVToFileNoPreType2(); + break; + case DVCAPMENU_MODE_FILETODV_TYPE2 : + handleModeFileToDVType2(); + break; + case DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2 : + handleModeFileToDVNoPreType2(); + break; + case DVCAPMENU_OPTIONS_REFRESH_MODE : + handleOptionsRefreshMode(); + break; + case DVCAPMENU_OPTIONS_CHECK_TAPE : + handleOptionsCheckTape(); + break; + case DVCAPMENU_OPTIONS_DECODE_SIZE : + handleOptionsDecodeSize(); + break; + case DVCAPMENU_OPTIONS_FRAME_RATE : + handleOptionsFrameRate(); + break; + case DVCAPMENU_HELP_ABOUT : + handleHelpAbout(); + break; + case IDM_PLAY : + handlePlay(); + break; + case IDM_PAUSE : + handlePause(); + break; + case IDM_STOP : + handleStop(); + break; + case IDM_RECORD : + handleRecord(); + break; + case IDM_FORWARD : + handleForward(); + break; + case IDM_REVERSE : + handleReverse(); + break; + case IDM_FORWARDFASTEST : + handleForwardFastest(); + break; + case IDM_SKIPNEXT : + handleSkipNext(); + break; + case IDM_SKIPPREV : + handleSkipPrev(); + break; + case IDM_REVERSEFASTEST : + handleReverseFastest(); + break; + case IDM_SEEKATN : + handleSeekATN(); + break; + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + mAppMenu=getMenu(); + mToolBar=::new ToolBar(); + mToolBar.disposition(PointerDisposition::Delete); + mToolBar->create(*this,ToolBarID); + mToolBar->addBitmap(AddBitmap("TOOLBAR")); + mToolBar->addButton(ToolBarButton(0,IDM_PLAY,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(1,IDM_PAUSE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(2,IDM_STOP,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(3,IDM_RECORD,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(4,IDM_FORWARD,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(5,IDM_REVERSE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(6,IDM_FORWARDFASTEST,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(7,IDM_SKIPNEXT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(8,IDM_SKIPPREV,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(9,IDM_REVERSEFASTEST,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar->addButton(ToolBarButton(10,IDM_SEEKATN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + setParts(); + mDeviceNotification.registerDeviceNotification(*this); + mCaptureDeviceGraph=::new CaptureDeviceGraph(); + mCaptureDeviceGraph.disposition(PointerDisposition::Delete); + dvAppSetup(mCaptureDeviceGraph->buildBasicGraph()); + + int left=350; + Rect initRect; + mEdit1=::new Control(); + mEdit1.disposition(PointerDisposition::Delete); + initRect=Rect(left,2,25,22); + mEdit1->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditHourID); + + mEdit2=::new Control(); + mEdit2.disposition(PointerDisposition::Delete); + initRect=Rect(left+25,2,25,22); + mEdit2->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditMinuteID); + + mEdit3=::new Control(); + mEdit3.disposition(PointerDisposition::Delete); + initRect=Rect(left+48,2,25,22); + mEdit3->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditSecondID); + + mEdit4=::new Control(); + mEdit4.disposition(PointerDisposition::Delete); + initRect=Rect(left+71,2,25,22); + mEdit4->createControl(WS_EX_CLIENTEDGE,"edit","00",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,EditFrameID); + + mTCButton=::new Control(); + mTCButton.disposition(PointerDisposition::Delete); + initRect=Rect(left+100,2,190,22); + mTCButton->createControl("button","Display Timecodes",WS_CHILD|WS_BORDER|WS_VISIBLE|WS_TABSTOP|ES_NUMBER,initRect,*mToolBar,TCButtonID); + mTCButton->sendMessage(BM_SETCHECK,true,0L); + + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::userHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case WM_FGNOTIFY : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +// begin timer handlers + +CallbackData::ReturnType MainWindow::atnTimerHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType MainWindow::capLimitTimerHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType MainWindow::framesTimerHandler(CallbackData &someCallbackData) +{ + return true; +} + +// end timer handlers + +void MainWindow::setParts() +{ + GlobalData parts; + int partWidth=width()/3; + parts.size(3); + parts[0]=partWidth; + parts[1]=parts[0]+partWidth; + parts[2]=parts[1]+partWidth; + mStatusBar->setParts(parts); +} + +void MainWindow::handleDeviceChange(CallbackData &cbData) +{ + PDEV_BROADCAST_HDR pDevBroadcastHeader=0; + PDEV_BROADCAST_DEVICEINTERFACE pDevBroadcastInterface=0; + if(DBT_DEVICEARRIVAL!=cbData.wParam())return; + dvStatusText("Detected new capture device."); + mStatusBar->update(); + pDevBroadcastHeader=(PDEV_BROADCAST_HDR)cbData.lParam(); + if(DBT_DEVTYP_DEVICEINTERFACE!=pDevBroadcastHeader->dbch_devicetype)return; + pDevBroadcastInterface=(PDEV_BROADCAST_DEVICEINTERFACE)cbData.lParam(); + if(pDevBroadcastInterface->dbcc_classguid!=AM_KSCATEGORY_CAPTURE)return; + if(!mHaveDevice) + { + message("New capture device detected"); + mCaptureDeviceGraph=::new CaptureDeviceGraph(); + mCaptureDeviceGraph.disposition(PointerDisposition::Delete); + dvAppSetup(mCaptureDeviceGraph->buildBasicGraph()); + } +} + +void MainWindow::handleFileSaveGraph(void) +{ +} + +void MainWindow::handleFileSetInput(void) +{ + OpenDialog openDialog; + String pathFileName; + + if(!openDialog.getOpenFileName(*this,"Microsoft AVI\0*.avi\0\0","Set Output File Name","Capture.avi",pathFileName))return; + mInputFileName=pathFileName; +} + +bool MainWindow::handleFileSetOutput(void) +{ + OpenDialog openDialog; + String pathFileName; + + if(!openDialog.getSaveFileName(*this,"Microsoft AVI\0*.avi\0\0","Set Output File Name","Capture.avi",pathFileName)) + return false; + mOutputFileName=pathFileName; + return true; +} + +void MainWindow::handleFileCaptureSize() +{ +} + +void MainWindow::handleModePreview() +{ +} + +void MainWindow::handleModeDVToFile() +{ + if(mOutputFileName.isNull()&&!handleFileSetOutput())return; + if(CaptureDeviceGraph::GraphDVToFile==mGraphType)return; + if(!mCaptureDeviceGraph->stopGraph())return; + mCaptureDeviceGraph->nukeDeviceFilter(); + if(!mCaptureDeviceGraph->makeDVToFileGraphType1(mOutputFileName)) + { + message("MakeDVToFileGraphType1() Failed"); + return; + } + setPreviewWindow(); + markGraphModeMenu(DVCAPMENU_MODE_DVTOFILE); + markToolBarButton(true,true); +} + +void MainWindow::handleModeDVToFileNoPre() +{ +} + +void MainWindow::handleModeFileToDV() +{ +} + +void MainWindow::handleModeFileToDVNoPre() +{ +} + +void MainWindow::handleModeDVToFileType2() +{ + if(mOutputFileName.isNull()&&!handleFileSetOutput())return; + if(CaptureDeviceGraph::GraphDVToFileType2==mGraphType)return; + if(!mCaptureDeviceGraph->stopGraph())return; + mCaptureDeviceGraph->nukeDeviceFilter(); + if(!mCaptureDeviceGraph->makeDVToFileGraphType2(mOutputFileName)) + { + message("MakeDVToFileGraphType2() Failed"); + return; + } + setPreviewWindow(); + markGraphModeMenu(DVCAPMENU_MODE_DVTOFILE_TYPE2); + markToolBarButton(true,false); +} + +void MainWindow::handleModeDVToFileNoPreType2() +{ +} + +void MainWindow::handleModeFileToDVType2() +{ +} + +void MainWindow::handleModeFileToDVNoPreType2() +{ +} + +void MainWindow::handleOptionsRefreshMode() +{ +} + +void MainWindow::handleOptionsCheckTape() +{ +} + +void MainWindow::handleOptionsDecodeSize() +{ +} + +void MainWindow::handleOptionsFrameRate() +{ +} + +void MainWindow::handleHelpAbout() +{ +} + +// start transport handlers + +void MainWindow::handlePlay() +{ + if(CaptureDeviceGraph::GraphFileToDV==mGraphType || + CaptureDeviceGraph::GraphFileToDVNoPre==mGraphType || + CaptureDeviceGraph::GraphFileToDVType2==mGraphType || + CaptureDeviceGraph::GraphFileToDVNoPreType2==mGraphType) + { + mToolBar->setState(IDM_PLAY,ToolBar::Indeterminate); + mCapStartTime=::GetTickCount(); + mFramesTimer.startTimer(TimerResolution); + mCaptureDeviceGraph->startGraph(); + } + else + { + dvPutVcrMode(ED_MODE_PLAY); + if(CaptureDeviceGraph::GraphPreview==mGraphType)mCaptureDeviceGraph->startGraph(); + if(BST_CHECKED==mTCButton->sendMessage(BM_GETCHECK,0,0L)) + mAtnTimer.startTimer(TimerResolution); + } +} + +void MainWindow::handleStop() +{ + mAtnTimer.stopTimer(); + mCapLimitTimer.stopTimer(); + mFramesTimer.stopTimer(); + mCaptureDeviceGraph->stopGraph(); + dvPutVcrMode(ED_MODE_STOP); + mToolBar->setState(IDM_PLAY,ToolBar::Enabled); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate); + mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate); +} + +void MainWindow::handlePause(void) +{ + if(CaptureDeviceGraph::GraphFileToDV==mGraphType || + CaptureDeviceGraph::GraphFileToDVNoPre==mGraphType || + CaptureDeviceGraph::GraphFileToDVType2==mGraphType || + CaptureDeviceGraph::GraphFileToDVNoPreType2==mGraphType) + { + mCaptureDeviceGraph->pauseGraph(); + } + else + { + dvPutVcrMode(ED_MODE_FREEZE); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Enabled); + mToolBar->setState(IDM_SKIPPREV,ToolBar::Enabled); + } +} + +void MainWindow::handleForward() +{ + dvPutVcrMode(ED_MODE_PLAY_FASTEST_FWD); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate); + mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate); +} + +void MainWindow::handleReverse() +{ + dvPutVcrMode(ED_MODE_PLAY_FASTEST_REV); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate); + mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate); +} + +void MainWindow::handleForwardFastest() +{ + dvPutVcrMode(ED_MODE_FF); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate); + mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate); +} + +void MainWindow::handleSkipNext() +{ + mAtnTimer.stopTimer(); + dvPutVcrMode(ED_MODE_STEP_FWD); + dvDisplayTimecode(); +} + +void MainWindow::handleSkipPrev() +{ + mAtnTimer.stopTimer(); + dvPutVcrMode(ED_MODE_STEP_REV); + dvDisplayTimecode(); +} + +void MainWindow::handleReverseFastest() +{ + dvPutVcrMode(ED_MODE_REW); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate); + mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate); +} + +void MainWindow::handleSeekATN() +{ + dvSeekAtn(); // this needs to be completed + dvDisplayTimecode(); +} + +void MainWindow::handleRecord() +{ + message("Record"); +} + +/* + + case IDM_RECORD : + // update the toolbar accordingly + SendMessage(g_hwndTBar, TB_SETSTATE, IDM_STEP_FWD, MAKELONG(TBSTATE_INDETERMINATE, 0L)); + SendMessage(g_hwndTBar, TB_SETSTATE, IDM_STEP_REV, MAKELONG(TBSTATE_INDETERMINATE, 0L)); + + // check to see if it is a capture graph + if (GRAPH_DV_TO_FILE == g_iGraphType || GRAPH_DV_TO_FILE_NOPRE == g_iGraphType || + GRAPH_DV_TO_FILE_TYPE2 == g_iGraphType || GRAPH_DV_TO_FILE_NOPRE_TYPE2 == g_iGraphType) + { + //do something here to record to an avi file on the disk - or to start recording on the vcr. + switch (g_dwCaptureLimit) + { + case DV_CAPLIMIT_NONE : + break; + case DV_CAPLIMIT_TIME : + SetTimer(hwnd, DV_TIMER_CAPLIMIT, g_dwTimeLimit * 1000, (TIMERPROC) DV_StopRecProc); + break; + case DV_CAPLIMIT_SIZE : + //rather than monitor disk usage, we'll just do the math and set a timer + SetTimer(hwnd, DV_TIMER_CAPLIMIT, ((g_dwDiskSpace * 100000) / DV_BYTESPERMSEC), (TIMERPROC) DV_StopRecProc); + break; + default : + //MBOX(TEXT("Bad value for g_dwCaptureLimit (%d)"), g_dwCaptureLimit); + break; + } + //update the status bar with the dropped frames information + g_CapStartTime = GetTickCount(); + SetTimer(hwnd, DV_TIMER_FRAMES, DV_TIMERFREQ, (TIMERPROC) DV_DroppedFrameProc); + //run the graph - assume that the camera is already playing if in Vcr mode + g_pGraph->StartGraph(); + } + else if (GRAPH_FILE_TO_DV == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE == g_iGraphType || + GRAPH_FILE_TO_DV_TYPE2 == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE_TYPE2 == g_iGraphType) + { + // if transmit graph then record on tape of the device + DV_PutVcrMode(ED_MODE_RECORD); + } + else + { + //we shouldn't get here + MBOX( TEXT("Undefined graph mode (maybe GRAPH_PREVIEW) in IDM_RECORD message")); + } + break; + +*/ + +// end transport handlers + +void MainWindow::dvAppSetup(bool graphResult) +{ + int appWidth; + int appHeight; + + if(!graphResult) + { + message("No DV camcorder devices detected"); + mHaveDevice=false; + mToolBar->show(SW_HIDE); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_REFRESH_MODE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_DECODE_SIZE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_PREVIEW,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + mHaveDevice=true; + + mToolBar->show(SW_SHOWNORMAL); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_REFRESH_MODE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_DECODE_SIZE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_PREVIEW,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + dvRefreshMode(); + dvStatusText(mCaptureDeviceGraph->getDeviceName().toString()); + if(!mCaptureDeviceGraph->makePreviewGraph()) + { + message("MakePreviewGraph() Failed."); + return; + } + mCaptureDeviceGraph->getVideoWindowDimensions(mVideoWidth,mVideoHeight); + appWidth=mVideoWidth+WidthEdge; + appHeight=mVideoHeight+HeightEdge; + postMessage(*this,WM_SIZE,SIZE_RESTORED,MAKELONG(appWidth,appHeight)); + if(!mCaptureDeviceGraph->setNotifyWindow(*this,WM_FGNOTIFY)) + { + message("SetNotifyWindow Failed."); + return; + } + mGraphType=CaptureDeviceGraph::GraphPreview; + markGraphModeMenu(DVCAPMENU_MODE_PREVIEW); + markToolBarButton(false,true); + setPreviewWindow(); + } +} + +bool MainWindow::dvRefreshMode() +{ + CaptureDeviceGraph::DVMode subunitMode; + bool returnCode=false; + + if(!mCaptureDeviceGraph.isOkay())return false; + subunitMode=mCaptureDeviceGraph->getDVMode(); + switch(subunitMode) + { + case CaptureDeviceGraph::CameraMode : + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + dvStatusText("Camera Mode."); + returnCode=true; + break; + case CaptureDeviceGraph::VCRMode : + dvUpdateTapeInfo(); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + mAppMenu.enableMenuItem(DVCAPMENU_OPTIONS_CHECK_TAPE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + dvStatusText("VCR Mode."); + returnCode=true; + break; + case CaptureDeviceGraph::UnknownMode : + dvStatusText("Unknown Mode."); + break; + } + return returnCode; +} + +bool MainWindow::dvUpdateTapeInfo() +{ + if(!mCaptureDeviceGraph.isOkay())return false; + if(!mCaptureDeviceGraph->getTapeInfo()) + { + dvStatusText("VCR Mode - No tape, or unknown format"); + return false; + } + switch(mCaptureDeviceGraph->getVideoFormat()) + { + case DVENCODERVIDEOFORMAT_NTSC : + dvStatusText("VCR Mode - NTSC"); + break; + case DVENCODERVIDEOFORMAT_PAL : + dvStatusText("VCR Mode - PAL"); + break; + default : + dvStatusText("Unsupported or unrecognized tape format type."); + break; + } + return true; +} + +bool MainWindow::setPreviewWindow(void) +{ + Rect cliRect; + Rect tbRect; + + if(!mCaptureDeviceGraph.isOkay())return false; + if(!mCaptureDeviceGraph->putOwner(*this))return false; + if(!mCaptureDeviceGraph->putWindowStyle(WS_CHILD|WS_CLIPSIBLINGS))return false; + clientRect(cliRect); + mToolBar->clientRect(tbRect); + if(!mCaptureDeviceGraph->setVideoWindowPosition(0,tbRect.bottom()-tbRect.top(),mVideoWidth,mVideoHeight))return false; + if(!mCaptureDeviceGraph->setVideoWindowVisible(true))return false; + return true; +} + +void MainWindow::markGraphModeMenu(int itemID) +{ + mAppMenu.checkMenuItem(DVCAPMENU_MODE_PREVIEW,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV_TYPE2,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE_TYPE2,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2,PureMenu::ItemUnchecked); + mAppMenu.checkMenuItem(itemID,PureMenu::ItemChecked); +} + +void MainWindow::markToolBarButton(bool enableRecord,bool enableOthers) +{ + if(true==enableRecord)mToolBar->setState(IDM_RECORD,ToolBar::Enabled); + else mToolBar->setState(IDM_RECORD,ToolBar::Indeterminate); + if(enableOthers) + { + mToolBar->setState(IDM_SKIPPREV,ToolBar::Enabled); + mToolBar->setState(IDM_REVERSEFASTEST,ToolBar::Enabled); + mToolBar->setState(IDM_REVERSE,ToolBar::Enabled); + mToolBar->setState(IDM_FORWARD,ToolBar::Enabled); + mToolBar->setState(IDM_FORWARDFASTEST,ToolBar::Enabled); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Enabled); + mToolBar->setState(IDM_SEEKATN,ToolBar::Enabled); + } + else + { + mToolBar->setState(IDM_SKIPPREV,ToolBar::Indeterminate); + mToolBar->setState(IDM_REVERSEFASTEST,ToolBar::Indeterminate); + mToolBar->setState(IDM_REVERSE,ToolBar::Indeterminate); + mToolBar->setState(IDM_FORWARD,ToolBar::Indeterminate); + mToolBar->setState(IDM_FORWARDFASTEST,ToolBar::Indeterminate); + mToolBar->setState(IDM_SKIPNEXT,ToolBar::Indeterminate); + mToolBar->setState(IDM_SEEKATN,ToolBar::Indeterminate); + } +} + +bool MainWindow::dvPutVcrMode(int mode) +{ + if(!mCaptureDeviceGraph.isOkay())return false; + return mCaptureDeviceGraph->putIAMExtTransportMode(mode); +} + +bool MainWindow::dvSeekAtn(void) +{ + int status=false; + int hour; + int minute; + int second; + int frame; + + hour=::GetDlgItemInt(*mToolBar,EditHourID,&status,false); + minute=::GetDlgItemInt(*mToolBar,EditMinuteID,&status,false); + second=::GetDlgItemInt(*mToolBar,EditSecondID,&status,false); + frame=::GetDlgItemInt(*mToolBar,EditFrameID,&status,false); + if(!mCaptureDeviceGraph->seekAtn(hour,minute,second,frame)) + { + message("Seek Failed - Time should be :\nHour:Minute:Second:Frame"); + return false; + } + return true; +} + +// this called through both menu selections and timer callback + +bool MainWindow::dvDisplayTimecode(void) +{ + TIMECODE_SAMPLE tcSample; + + tcSample.timecode.dwFrames=0; + tcSample.dwFlags=ED_DEVCAP_TIMECODE_READ; + if(!mCaptureDeviceGraph->getTimecode(tcSample))return false; + if(mHours!=(tcSample.timecode.dwFrames&0xFF000000)>>24) + { + ::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames&0xFF000000)>>24); + ::SetDlgItemText(*mToolBar,EditHourID,mStrTimecode.str()); + } + mHours=(tcSample.timecode.dwFrames&0xFF000000)>>24; + + if(mMinutes!=(tcSample.timecode.dwFrames&0x00FF0000)>>16) + { + ::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames&0x00FF0000)>>16); + ::SetDlgItemText(*mToolBar,EditMinuteID,mStrTimecode.str()); + } + mMinutes=(tcSample.timecode.dwFrames&0x00FF0000)>>16; + + if(mSeconds!=(tcSample.timecode.dwFrames&0x0000FF00)>>8) + { + ::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames&0x0000FF00)>>8); + ::SetDlgItemText(*mToolBar,EditMinuteID,mStrTimecode.str()); + } + mSeconds=(tcSample.timecode.dwFrames&0x0000FF00)>>8; + + ::sprintf(mStrTimecode.str(),"%.2x",(tcSample.timecode.dwFrames & 0x000000FF)); + ::SetDlgItemText(*mToolBar,EditFrameID,mStrTimecode.str()); + return true; +} + +/* +void MainWindow::disconnect(CaptureDeviceGraph::GraphType graphType) +{ + if(CaptureDeviceGraph::GraphFileToDV==graphType || + CaptureDeviceGraph::GraphFileToDVNoPre==graphType || + CaptureDeviceGraph::GraphFileToDVType2==graphType || + CaptureDeviceGraph::GraphFileToDVNoPreType2==graphType) + { + mCaptureDeviceGraph->nukeFilters(); + } + else + { + } + + + +*/ + +/* + + if (GRAPH_FILE_TO_DV == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE == g_iGraphType || + GRAPH_FILE_TO_DV_TYPE2 == g_iGraphType || GRAPH_FILE_TO_DV_NOPRE_TYPE2 == g_iGraphType) + { + //DisconnectAll removes only the downstream filters - we need to remove the file filter by hand. + g_pGraph->NukeFilters( g_pGraph->m_pInputFileFilter, TRUE); + if (g_pGraph->m_pInputFileFilter ) + { + g_pGraph->m_pGraph->RemoveFilter( g_pGraph->m_pInputFileFilter ); + SAFE_RELEASE( g_pGraph->m_pInputFileFilter ); + } + } + else + { + //DisconnectAll removes only the downstream filters + hr = g_pGraph->NukeFilters( g_pGraph->m_pDeviceFilter, TRUE); + if(FAILED(hr)) + { + MBOX(TEXT("nukefilters() failed")); + } + } + + +*/ + + +// typedef enum GraphType{GraphPreview,GraphDVToFile,GraphDVToFileNoPre,GraphFileToDV,GraphFileToDVNoPre, +// GraphDVToFileType2,GraphDVToFileNoPreType2,GraphFileToDVType2,GraphFileToDVNoPreType2}; + +/* +} + +*/ diff --git a/dvcap/Mainwnd.hpp b/dvcap/Mainwnd.hpp new file mode 100644 index 0000000..ee11c40 --- /dev/null +++ b/dvcap/Mainwnd.hpp @@ -0,0 +1,163 @@ +#ifndef _DVCAP_MAINWINDOW_HPP_ +#define _DVCAP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_PUREMENU_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_MMTIMER_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _DVCAP_DEVICENOTIFICATION_HPP_ +#include +#endif +#ifndef _DVCAP_CAPTUREDEVICEGRAPH_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(void); + virtual ~MainWindow(); + static String className(void); +private: + enum{StatusBarID=200,ToolBarID=201,EditHourID=202,EditMinuteID=203,EditSecondID=204,EditFrameID=205,TCButtonID=206}; + enum{InitialWidth=650,InitialHeight=480,DefaultVideoWidth=360,DefaultVideoHeight=240,WidthEdge=5,HeightEdge=95}; + enum{TimerResolution=55}; // 55 ms + enum{Part1,Part2,DevStatusPart}; + void registerClass(void); + void insertHandlers(void); + void removeHandlers(void); + void setParts(void); + void handleDeviceChange(CallbackData &cbData); + void message(const String &message)const; + void markGraphModeMenu(int itemID); + void markToolBarButton(bool enableRecord,bool enableOthers); + bool setPreviewWindow(void); + void dvAppSetup(bool graphResult); + bool dvRefreshMode(void); + void dvStatusText(const String &text); + bool dvUpdateTapeInfo(void); + bool dvPutVcrMode(int mode); + bool dvDisplayTimecode(void); + bool dvSeekAtn(void); + + bool handleFileSetOutput(void); + void handleFileSetInput(void); + void handleFileSaveGraph(void); + void handleFileCaptureSize(void); + void handleModePreview(void); + void handleModeDVToFile(void); + void handleModeDVToFileNoPre(void); + void handleModeFileToDV(void); + void handleModeFileToDVNoPre(void); + void handleModeDVToFileType2(void); + void handleModeDVToFileNoPreType2(void); + void handleModeFileToDVType2(void); + void handleModeFileToDVNoPreType2(void); + void handleOptionsRefreshMode(void); + void handleOptionsCheckTape(void); + void handleOptionsDecodeSize(void); + void handleOptionsFrameRate(void); + void handleHelpAbout(void); + void handlePlay(void); + void handlePause(void); + void handleStop(void); + void handleRecord(void); + void handleForward(void); + void handleReverse(void); + void handleForwardFastest(void); + void handleSkipNext(void); + void handleSkipPrev(void); + void handleReverseFastest(void); + void handleSeekATN(void); + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType userHandler(CallbackData &someCallbackData); + CallbackData::ReturnType deviceChangeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType atnTimerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType capLimitTimerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType framesTimerHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mUserHandler; + Callback mDeviceChangeHandler; + Callback mATNTimerHandler; + Callback mCapLimitTimerHandler; + Callback mFramesTimerHandler; + + static char szClassName[]; + static char szMenuName[]; + DeviceNotification mDeviceNotification; + SmartPointer mStatusBar; + SmartPointer mToolBar; + SmartPointer mCaptureDeviceGraph; + SmartPointer mEdit1; + SmartPointer mEdit2; + SmartPointer mEdit3; + SmartPointer mEdit4; + SmartPointer mTCButton; + CaptureDeviceGraph::GraphType mGraphType; + PureMenu mAppMenu; + bool mHaveDevice; + int mVideoWidth; + int mVideoHeight; + DWORD mCapStartTime; + MMTimer mAtnTimer; + MMTimer mCapLimitTimer; + MMTimer mFramesTimer; + String mStrTimecode; // so we don't have to allocate a string for each timer frequency period + DWORD mHours; // for timecode handling + DWORD mMinutes; // for timecode handling + DWORD mSeconds; // for timecode handling + String mOutputFileName; + String mInputFileName; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} + +inline +void MainWindow::message(const String &message)const +{ + ::MessageBox(*this,message.str(),"DVCAP",MB_OK); +} + +inline +void MainWindow::dvStatusText(const String &text) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(text,DevStatusPart); +} +#endif diff --git a/dvcap/Nuker.cpp b/dvcap/Nuker.cpp new file mode 100644 index 0000000..99b7e1e --- /dev/null +++ b/dvcap/Nuker.cpp @@ -0,0 +1,49 @@ +#include + +Nuker::Nuker(ComPointer &graphBuilder) +: mGraphBuilder(graphBuilder) +{ + mGraphBuilder->AddRef(); // make sure this does what you want (ie) we don't want the +} // graphBuilder to be destroyed when the constructor fires + +Nuker::~Nuker() +{ +} + +bool Nuker::nukeFilter(ComPointer &baseFilter,bool nukeDownstream,bool isDeviceFilter) +{ + ComPointer enumPins; + ComPointer pin; + ULONG fetched=0; + PIN_INFO pinInfo; + + if(!baseFilter.isOkay())return false; + if(!ComResult(baseFilter->EnumPins((IEnumPins**)enumPins)).success()) + message("[Nuker::nukeFilter]baseFilter->EnumPins((IEnumPins**)enumPins) failed."); + enumPins->Reset(); + while(ComResult(enumPins->Next(1,(IPin**)pin,&fetched)).success()) + { + ComPointer toPin; + if(!pin.isOkay())break; + if(ComResult(pin->ConnectedTo((IPin**)toPin)).success()&&toPin.isOkay()) + { + if(!ComResult(toPin->QueryPinInfo(&pinInfo)).success()) + message("[Nuker::nukeFilter]toPin->QueryPinInfo(&pinInfo) Failed."); + if(PINDIR_INPUT==pinInfo.dir && nukeDownstream) + { + ComPointer pinFilter(pinInfo.pFilter); + nukeFilter(pinFilter,nukeDownstream,isDeviceFilter); // have to do something with first argument + mGraphBuilder->Disconnect(toPin); + mGraphBuilder->Disconnect(pin); + if(!isDeviceFilter) + { + if(!ComResult(mGraphBuilder->RemoveFilter(pinInfo.pFilter)).success()) + { + message("[Nuker::nukeFilter] mGraphBuilder->RemoveFilter(pinInfo.pFilter)."); + } + } + } + } + } + return true; +} diff --git a/dvcap/Nuker.hpp b/dvcap/Nuker.hpp new file mode 100644 index 0000000..418c917 --- /dev/null +++ b/dvcap/Nuker.hpp @@ -0,0 +1,29 @@ +#ifndef _DVCAP_NUKER_HPP_ +#define _DVCAP_NUKER_HPP_ +#ifndef _COMMON_DXSDK_HPP_ +#include +#endif +#ifndef _COM_COM_HPP_ +#include +#endif +#ifndef _COM_COMPOINTER_HPP_ +#include +#endif + +class Nuker +{ +public: + Nuker(ComPointer &graphBuilder); + virtual ~Nuker(); + bool nukeFilter(ComPointer &baseFilter,bool nukeDownstream,bool isDeviceFilter); +private: + void message(const String &message); + ComPointer mGraphBuilder; +}; + +inline +void Nuker::message(const String &message) +{ + ::OutputDebugString(message+String("\n")); +} +#endif diff --git a/dvcap/TOOLBAR.BMP b/dvcap/TOOLBAR.BMP new file mode 100644 index 0000000..391136b Binary files /dev/null and b/dvcap/TOOLBAR.BMP differ diff --git a/dvcap/VideoCapture.cpp b/dvcap/VideoCapture.cpp new file mode 100644 index 0000000..60887eb --- /dev/null +++ b/dvcap/VideoCapture.cpp @@ -0,0 +1,111 @@ +#include + +bool VideoCapture::locateDevice(ComPointer &baseFilter,BString &deviceName) +{ + ComInitializer comInit; + ComPointer deviceEnumerator; + ComPointer enumMoniker; + ComPointer moniker; + ComResult comResult; + ULONG cFetched; + + baseFilter.Release(); + comResult=deviceEnumerator.createInstance(CLSID_SystemDeviceEnum,IID_ICreateDevEnum); + if(comResult.error())return false; + comResult=deviceEnumerator->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,(IEnumMoniker**)enumMoniker,0); + if(comResult.error())return false; + while(enumMoniker->Next(1,(IMoniker**)moniker,&cFetched)==S_OK) + { + ComPointer propertyBag; + moniker->BindToStorage(0,0,IID_IPropertyBag,(void **)(IPropertyBag**)propertyBag); + BString devName; + Variant varName; + comResult=propertyBag->Read(L"FriendlyName", &varName.getVARIANT(),0); + varName.getData(devName); + if(!comResult.error()&&devName==deviceName) + { + comResult=moniker->BindToObject(0,0,IID_IBaseFilter,(void**)(IBaseFilter**)baseFilter); + break; + } + } + return baseFilter.isOkay(); +} + +bool VideoCapture::capture(BString &deviceName) +{ + ComPointer baseFilter; + ComPointer graph; +// CComPtr pGraph; + CComPtr pBuilder; + CComPtr ppf; + CComPtr pSrc; + ComResult comResult; + + if(!locateDevice(baseFilter,deviceName))return false; +// comResult=pGraph.CoCreateInstance(CLSID_FilterGraph); + comResult=graph.createInstance(CLSID_FilterGraph); + if(!comResult.success())return false; + + + comResult=pBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder2); + if(!comResult.success())return false; + pBuilder->SetFiltergraph(graph); + comResult=graph->AddFilter(baseFilter,L"Capture"); + if(!comResult.success())return false; + comResult=pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,L"d:\\cap.avi",&ppf,0); + if(!comResult.success())return false; + + comResult=pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,pSrc,0,ppf); +// comResult=pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,pSrc,0,ppf); +// if(!comResult.success())return false; +// comResult=pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,pSrc,0,0); +// if(!comResult.success())return false; + + +// comResult=pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,pSrc,0,ppf); +// if(!comResult.success())return false; +// comResult=pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,pSrc,0,0); +// if(!comResult.success())return false; + + const long ONE_SECOND = 10000000; + REFERENCE_TIME rtStart = 5 * ONE_SECOND; + REFERENCE_TIME rtStop = 10 * ONE_SECOND; + comResult=pBuilder->ControlStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,pSrc,&rtStart,&rtStop,0,0); + if(comResult.error()) + { + ::OutputDebugString("Failed ControlStream\n"); + return false; + } + CComQIPtr pControl(graph); + CComQIPtr pEvent(graph); + comResult=pControl->Run(); + if(comResult.error()) + { + ::OutputDebugString("Run Error...\n"); + return false; + } + while (1) + { + long evCode, lParam1, lParam2; + comResult=pEvent->GetEvent(&evCode, &lParam1, &lParam2, 100); + if(comResult.success()) + { + comResult=pEvent->FreeEventParams(evCode, lParam1, lParam2); + if(evCode == EC_STREAM_CONTROL_STARTED) + { + ::printf("Starting capture...\n"); + } + else if (evCode == EC_STREAM_CONTROL_STOPPED) + { + ::printf("Control Stopped...\n"); + break; + } + } + else break; + } + pControl->Stop(); + printf("... Done\n"); +// baseFilter->Release(); + return true; +} + diff --git a/dvcap/VideoCapture.hpp b/dvcap/VideoCapture.hpp new file mode 100644 index 0000000..b12adc9 --- /dev/null +++ b/dvcap/VideoCapture.hpp @@ -0,0 +1,24 @@ +#ifndef _DVCAP_VIDEOCAPTURE_HPP_ +#define _DVCAP_VIDEOCAPTURE_HPP_ +#ifndef _COM_COM_HPP_ +#include +#endif +#ifndef _COM_VARIANT_HPP_ +#include +#endif +#ifndef _COM_COMPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DXSDK_HPP_ +#include +#endif + +class VideoCapture +{ +public: + bool capture(BString &deviceName); +private: + bool locateDevice(ComPointer &baseFilter,BString &deviceName); +}; + +#endif diff --git a/dvcap/dvcap.dsp b/dvcap/dvcap.dsp new file mode 100644 index 0000000..71daee3 --- /dev/null +++ b/dvcap/dvcap.dsp @@ -0,0 +1,134 @@ +# Microsoft Developer Studio Project File - Name="dvcap" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=dvcap - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "dvcap.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "dvcap.mak" CFG="dvcap - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "dvcap - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "dvcap - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "dvcap - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "dvcap - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "__FLAT__" /D "STRICT" /D WINVER=0x4000 /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib strmiids.lib comctl32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "dvcap - Win32 Release" +# Name "dvcap - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\CaptureDeviceGraph.cpp +# End Source File +# Begin Source File + +SOURCE=.\DeviceEnumerator.cpp +# End Source File +# Begin Source File + +SOURCE=.\DeviceNotify.cpp +# End Source File +# Begin Source File + +SOURCE=.\dvcap.rc +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Nuker.cpp +# End Source File +# Begin Source File + +SOURCE=.\VideoCapture.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/dvcap/dvcap.dsw b/dvcap/dvcap.dsw new file mode 100644 index 0000000..cac2eaf --- /dev/null +++ b/dvcap/dvcap.dsw @@ -0,0 +1,89 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "com"=..\com\com.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dvcap"=.\dvcap.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name com + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name toolbar + End Project Dependency +}}} + +############################################################################### + +Project: "statbar"=..\statbar\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "toolbar"=..\toolbar\Toolbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/dvcap/dvcap.h b/dvcap/dvcap.h new file mode 100644 index 0000000..5f4d59a --- /dev/null +++ b/dvcap/dvcap.h @@ -0,0 +1,44 @@ +#ifndef _DVCAP_DVCAP_H_ +#define _DVCAP_DVCAP_H_ + +#define WM_FGNOTIFY WM_USER+1 + + +// MENU DEFINES + +#define DVCAPMENU_FILE_SETOUTPUT 10000 +#define DVCAPMENU_FILE_SETINPUT 10001 +#define DVCAPMENU_FILE_SAVEGRAPH 10002 +#define DVCAPMENU_FILE_CAPTURESIZE 10003 +#define DVCAPMENU_FILE_EXIT 10004 + +#define DVCAPMENU_MODE_PREVIEW 10010 +#define DVCAPMENU_MODE_DVTOFILE 10011 +#define DVCAPMENU_MODE_DVTOFILE_NOPRE 10012 +#define DVCAPMENU_MODE_FILETODV 10013 +#define DVCAPMENU_MODE_FILETODV_NOPRE 10014 + +#define DVCAPMENU_MODE_DVTOFILE_TYPE2 10020 +#define DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2 10021 +#define DVCAPMENU_MODE_FILETODV_TYPE2 10022 +#define DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2 10023 + +#define DVCAPMENU_OPTIONS_REFRESH_MODE 10030 +#define DVCAPMENU_OPTIONS_CHECK_TAPE 10031 +#define DVCAPMENU_OPTIONS_DECODE_SIZE 10032 +#define DVCAPMENU_OPTIONS_FRAME_RATE 10033 + +#define DVCAPMENU_HELP_ABOUT 10040 + +#define IDM_PLAY 10050 +#define IDM_PAUSE 10051 +#define IDM_STOP 10052 +#define IDM_RECORD 10053 +#define IDM_FORWARD 10054 +#define IDM_REVERSE 10055 +#define IDM_FORWARDFASTEST 10056 +#define IDM_SKIPNEXT 10057 +#define IDM_SKIPPREV 10058 +#define IDM_REVERSEFASTEST 10059 +#define IDM_SEEKATN 10060 +#endif diff --git a/dvcap/dvcap.hpp b/dvcap/dvcap.hpp new file mode 100644 index 0000000..11d909f --- /dev/null +++ b/dvcap/dvcap.hpp @@ -0,0 +1,4 @@ +#ifndef _DVCAP_DVCAP_HPP_ +#define _DVCAP_DVCAP_HPP_ +#include +#endif diff --git a/dvcap/dvcap.ico b/dvcap/dvcap.ico new file mode 100644 index 0000000..c617f71 Binary files /dev/null and b/dvcap/dvcap.ico differ diff --git a/dvcap/dvcap.log b/dvcap/dvcap.log new file mode 100644 index 0000000..97c5b44 --- /dev/null +++ b/dvcap/dvcap.log @@ -0,0 +1,3 @@ +********************************************************************* + DVCAPTURE LOG FILE STARTED AT:Wednesday, November 20,2002 21:38:50 +********************************************************************* diff --git a/dvcap/dvcap.opt b/dvcap/dvcap.opt new file mode 100644 index 0000000..9e8a77c Binary files /dev/null and b/dvcap/dvcap.opt differ diff --git a/dvcap/dvcap.plg b/dvcap/dvcap.plg new file mode 100644 index 0000000..134c193 --- /dev/null +++ b/dvcap/dvcap.plg @@ -0,0 +1,58 @@ + + +
+

Build Log

+

+--------------------Configuration: dvcap - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP23.tmp" with contents +[ +/nologo /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "__FLAT__" /D "STRICT" /D WINVER=0x4000 /Fp"Debug/dvcap.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"D:\work\dvcap\CaptureDeviceGraph.cpp" +"D:\work\dvcap\Main.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP23.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP24.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib strmiids.lib comctl32.lib winmm.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/dvcap.pdb" /debug /machine:I386 /out:"Debug/dvcap.exe" /pdbtype:sept +.\Debug\CaptureDeviceGraph.obj +.\Debug\DeviceEnumerator.obj +.\Debug\DeviceNotify.obj +.\Debug\Main.obj +.\Debug\Mainwnd.obj +.\Debug\Nuker.obj +.\Debug\VideoCapture.obj +.\Debug\dvcap.res +\work\exe\com.lib +\work\exe\mscommon.lib +\work\exe\statbar.lib +\work\exe\toolbar.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP24.tmp" +

Output Window

+Compiling... +CaptureDeviceGraph.cpp + +NOTE: WINVER has been defined as 0x0500 or greater which enables +Windows NT 5.0 and Windows 98 features. When these headers were released, +Windows NT 5.0 beta 1 and Windows 98 beta 2.1 were the current versions. + +For this release when WINVER is defined as 0x0500 or greater, you can only +build beta or test applications. To build a retail application, +set WINVER to 0x0400 or visit http://www.microsoft.com/msdn/sdk +to see if retail Windows NT 5.0 or Windows 98 headers are available. + +See the SDK release notes for more information. + +Skipping... (no relevant changes detected) +Main.cpp +Linking... + + + +

Results

+dvcap.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/dvcap/dvcap.rc b/dvcap/dvcap.rc new file mode 100644 index 0000000..67d9de8 --- /dev/null +++ b/dvcap/dvcap.rc @@ -0,0 +1,49 @@ +/**************************************************************************** + +produced by Borland Resource Workshop + +*****************************************************************************/ + +#include +#include + +DVCAP ICON "DVCAP.ICO" +TOOLBAR BITMAP "TOOLBAR.BMP" + +DVCAP MENU +{ + POPUP "&File" + { + MENUITEM "Set &Output File...", DVCAPMENU_FILE_SETOUTPUT + MENUITEM "Set &Input File...", DVCAPMENU_FILE_SETINPUT + MENUITEM "&Save Graph to File...", DVCAPMENU_FILE_SAVEGRAPH + MENUITEM "&Capture Size...", DVCAPMENU_FILE_CAPTURESIZE + MENUITEM "E&xit", DVCAPMENU_FILE_EXIT + } + POPUP "Graph &Mode" + { + MENUITEM "&Preview", DVCAPMENU_MODE_PREVIEW, CHECKED + MENUITEM SEPARATOR + MENUITEM "&DV To File (Type1)", DVCAPMENU_MODE_DVTOFILE + MENUITEM "DV To File (Type1) (&no preview)", DVCAPMENU_MODE_DVTOFILE_NOPRE + MENUITEM "&File (Type1) To DV", DVCAPMENU_MODE_FILETODV + MENUITEM "File (Type1) To DV (no &preview)", DVCAPMENU_MODE_FILETODV_NOPRE + MENUITEM SEPARATOR + MENUITEM "D&V To File (Type2)", DVCAPMENU_MODE_DVTOFILE_TYPE2 + MENUITEM "DV To File (Type2) (n&o preview)", DVCAPMENU_MODE_DVTOFILE_NOPRE_TYPE2 + MENUITEM "File (&Type2) To DV", DVCAPMENU_MODE_FILETODV_TYPE2 + MENUITEM "File (Type&2) To DV (no preview)", DVCAPMENU_MODE_FILETODV_NOPRE_TYPE2 + } + POPUP "&Options" + { + MENUITEM "&Refresh Mode", DVCAPMENU_OPTIONS_REFRESH_MODE + MENUITEM "&Check Tape", DVCAPMENU_OPTIONS_CHECK_TAPE + MENUITEM "Change &Decode Size...", DVCAPMENU_OPTIONS_DECODE_SIZE + MENUITEM "&Half FrameRate", DVCAPMENU_OPTIONS_FRAME_RATE + } + POPUP "&Help" + { + MENUITEM "&About...", DVCAPMENU_HELP_ABOUT + } +} + diff --git a/dvcap/scraps.txt b/dvcap/scraps.txt new file mode 100644 index 0000000..89aab14 --- /dev/null +++ b/dvcap/scraps.txt @@ -0,0 +1,124 @@ +// wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE; +// wndClass.hbrBackground =(HBRUSH)(COLOR_WINDOWFRAME); + + +/* + if (IDM_OPTIONS_SAVEGRAPH == LOWORD (wparam)) + { + ofn.lpstrFilter = TEXT("Filter Graph\0*.grf\0\0"); + ofn.lpstrTitle = TEXT("Set FilterGraph File Name"); + ofn.lpstrFile = g_FilterGraphFileName; + } + else if (IDM_SETOUTPUT == LOWORD (wparam)) + { + ofn.lpstrFilter = TEXT("Microsoft AVI\0*.avi\0\0"); + ofn.lpstrTitle = TEXT("Set output File Name"); + ofn.lpstrFile = g_OutputFileName; + } + else + { + ofn.lpstrFilter = TEXT("Microsoft AVI\0*.avi\0\0"); + ofn.lpstrTitle = TEXT("Set input File Name"); + ofn.lpstrFile = g_InputFileName; + } + + if (GetOpenFileName(&ofn)) + { + if (IDM_OPTIONS_SAVEGRAPH == LOWORD (wparam)) + { + lstrcpy(g_FilterGraphFileName, ofn.lpstrFile); + // Save the current built filter graph to a *.grf file + if(g_pGraph != NULL) + g_pGraph->SaveGraphToFile(g_FilterGraphFileName); + + } + else if (IDM_SETOUTPUT == LOWORD (wparam)) + { + lstrcpy(g_OutputFileName, ofn.lpstrFile); + } + else + { + lstrcpy(g_InputFileName, ofn.lpstrFile); + } + } + break; + + + + +*/ + + + + + +// ****************************************************************************************** + +/* +HRESULT CDVGraph::NukeFilters(IBaseFilter *pFilter, BOOL bNukeDownStream) +{ + HRESULT hr = S_OK; + IPin *pPin = NULL; + IPin *pToPin = NULL; + IEnumPins *pEnumPins = NULL; + + ULONG uFetched = 0; + PIN_INFO PinInfo; + LONG lDelayCount = 100; + + ASSERT(m_pGraph); + + // Validating the the pointer to the Filter is not null + if(!pFilter) + { + Dump( TEXT("CAVCGraph::NukeFilters():: Invalid Argument:: Invalid filter to nuke from") ); + return E_FAIL; + } + + // enumerate all the pins on this filter + // reset the enumerator to the first pin + hr = pFilter->EnumPins(&pEnumPins); + CHECK_ERROR( TEXT("CAVCGraph::NukeFilters():: Could not enumerate pins on the filter to be nuked fro."), hr); + pEnumPins->Reset(); + + // Loop through all the pins of the filter + while( SUCCEEDED(pEnumPins->Next(1, &pPin, &uFetched)) && pPin ) + { + // Get the pin & its pin_info struct that this filter's pin is connected to + hr = pPin->ConnectedTo(&pToPin); + if(SUCCEEDED(hr) &&pToPin ) + { + hr = pToPin->QueryPinInfo(&PinInfo); + CHECK_ERROR( TEXT("pToPin->QueryPinInfo failed."), hr); + + // Check that this ConnectedTo Pin is a input pin thus validating that our filter's pin is an output pin + if(PinInfo.dir == PINDIR_INPUT && bNukeDownStream) + { + // thus we have a pin on the downstream filter so nuke everything downstream of that filter recursively + NukeFilters(PinInfo.pFilter, bNukeDownStream); + // Disconnect the two pins and remove the downstream filter + m_pGraph->Disconnect(pToPin); + m_pGraph->Disconnect(pPin); + //always leave the Camera filter in the graph + if (PinInfo.pFilter != m_pDeviceFilter) + { + if(FAILED(m_pGraph->RemoveFilter(PinInfo.pFilter))) + { + Dump(TEXT("CAVCGraph::NukeFilters():: The Filter cannot be removed from the filtergraph")); + } + } + + } + + SAFE_RELEASE(PinInfo.pFilter); + SAFE_RELEASE(pToPin); + Dump(TEXT("CAVCGraph::NukeFilters():: release ToPin\n")); + } + SAFE_RELEASE(pPin); + } + + SAFE_RELEASE(pEnumPins); + return S_OK; +} + +*/ \ No newline at end of file diff --git a/engine/#TMAP32.ASM b/engine/#TMAP32.ASM new file mode 100644 index 0000000..a8c170b --- /dev/null +++ b/engine/#TMAP32.ASM @@ -0,0 +1,504 @@ +;************************************************************************************ +; MODULE: TMAP32.ASM DATE: DECEMBER 28, 1994 +; AUTHOR: SEAN M. KESSLER JUNE 06, 1995 +; TARGET: 32 BIT TARGET +; FUNCTION : TEXTURE MAPPING POLYGONS IN PERSPECTIVE +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.LALL +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\TMAP32.INC +bmData@@mSrcWidth DW 00h +bmData@@mSrcHeight DW 00h +bmData@@mSrcExtent DD 00h +bmData@@mlpSrcPtr DD 00h +bmData@@mDstWidth DW 00h +bmData@@mDstHeight DW 00h +bmData@@mDstExtent DD 00h +bmData@@mlpDstPtr DD 00h +bmData@@mlpDstIndexPtr DD 00h +bmData@@mPrecision DW 4000h +bmData@@mMaskValue DB 0FFh +bmData@@mUseMask DB 00h + +MINVALUE EQU -32767 +MAXVALUE EQU 32767 +MINVERTEX EQU 3 +.CODE +LOCALS +divide MACRO varOne,varTwo + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv varTwo ; divide eax/varTwo result to eax, remainder to edx +ENDM +multiply MACRO varOne,varTwo + movzx eax,varOne ; move varOne into eax register + movzx edx,varTwo ; move varTwo into ebx register + imul eax,edx ; perform multiply, result to eax +ENDM +roundEBX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov ebx,varOne ; move value into ebx register + and edx,00003FFFh ; get remainder into edx register + shr ebx,14 ; get whole number to ebx register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc ebx ; increment value in ebx +@@return: +ENDM +roundEAX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov eax,varOne ; move value into eax register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc eax ; increment value in eax +@@return: +ENDM +getPoint MACRO address,index + movzx eax,index ; move index into eax register + shl eax,02h ; multiply ax by size of far pointer + add eax,address ; add in the address + movzx ebx,[eax].Point@@y ; get the y value to bx register + movzx eax,[eax].Point@@x ; get the x value to ax register +ENDM +newEdge MACRO ; (PureEdge*) in eax, sets edx=1=error, otherwise edx=0 + movzx ebx,[eax].PureEdge@@mEdgeDirection ; save edgeDirection + push ebx ; push edgeDirection + push [eax].PureEdge@@mCurrentEdgeEnd ; push currentEdge end (ie) nextEdge index + mov ecx,eax ; move (PureEdge*) to ecx register + call _setupEdge ; attempt to setup new edge + add esp,06h ; readjust the stack + mov edx,eax ; move return code to edx register +ENDM +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + multiply ax,bmData@@mSrcWidth ; multiply (row*width)-> eax + movzx edx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl +ENDM +setDstDataByte MACRO ; void setDstDataByte(cl=charByte) + mov ebx,bmData@@mlpDstIndexPtr ; get scanline pointer to ebx + mov byte ptr[ebx],cl ; move byte into frame bitmap + inc bmData@@mlpDstIndexPtr ; increment scanline pointer +ENDM +setDstIndexPtr MACRO + multiply [esi].PureMap@@myValue,bmData@@mDstWidth ; multiply row*width result to eax + xor edx,edx ; clear edx register + mov dx,bmData@@mDstWidth ; move width into dx register + add eax,edx ; add (row*width)+width + mov edx,bmData@@mDstExtent ; move (width*height) into ebx + sub edx,eax ; calculate addValue-subValue + mov [esi].PureMap@@mBitmapIndex,edx ; save offset into bitmap +ENDM +adjDstIndexPtr MACRO + mov edx,[esi].PureMap@@mBitmapIndex ; retrieve offset into bitmap + movzx ebx,[esi].PureMap@@mxDest ; move column into bx register + add edx,ebx ; now add column number back in + add edx,bmData@@mlpDstPtr ; offset index by start + mov bmData@@mlpDstIndexPtr,edx ; store value into DstIndexPtr +ENDM +increment MACRO ; assumes (PureEdge*) is in eax register, sets carry on error + LOCAL @@newEdge,@@adjTerm,@@error,@@success,@@return + dec [eax].PureEdge@@mRemainingScanLines ; decrement mRemainingScanLines + jz @@newEdge ; if no more scan lines, try to setup new edge + mov ebx,[eax].PureEdge@@mxSourceStep ; get mxSourceStep to ebx register + add ebx,[eax].PureEdge@@mxSource ; add in mxSource + mov [eax].PureEdge@@mxSource,ebx ; replace mxSource with new value + mov ebx,[eax].PureEdge@@mySourceStep ; get mySourceStep into ebx register + add ebx,[eax].PureEdge@@mySource ; add in mySource + mov [eax].PureEdge@@mySource,ebx ; replace mySource with new value + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation into ebx register + add bx,[eax].PureEdge@@mxStep ; add in mxStep + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; get mxErrorTerm to bx register + add bx,[eax].PureEdge@@mxAdjustUp ; add in mxAdjustUp + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + cmp bx,00h ; compare mxErrorTerm to zero + jle @@success ; mxErrorTerm is less equal zero +@@adjTerm: ; adjTerm sync address + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation to bx register + add bx,[eax].PureEdge@@mxDirection ; add in mxDirection + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; move mxErrorTerm into bx register + sub bx,[eax].PureEdge@@mxAdjustDown ; add in mxAdjustDown + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + jmp @@success ; we're done here +@@newEdge: ; newEdge sync address + newEdge ; attempt to create new edge + cmp edx,0001h ; did prior call fail ? + jne @@success ; no, we're done here +@@error: ; error sync address + stc ; error sets carry + jmp @@return ; jump to return +@@success: ; ok sync address + clc ; success clears carry +@@return: ; return sync address +ENDM +scanOutputLine MACRO ; void scanOutputLine(ecx=(PureEdge*)) + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +scanOutputLineMask MACRO ; void scanOutputLineMask(ecx=(PureEdge*)) - uses mask settings + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + cmp cl,bmData@@mMaskValue ; are we attempting to output a byte in our mask + je @@skipImageBit ; if so then do not set the byte + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +_mapTexture proc near ; void mapTexture(PureMap *lpTextureMap) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + pushad ; save all general purpose registers, required. + mov esi,dword ptr[ebp+8] ; move (PureMap*) to esi register + mov edx,[esi].PureMap@@mlpLeftEdge ; move PureMap->mlpLeftEdge to edx + mov bx,[edx].PureEdge@@mMaxVertex ; move left edge mMaxVertex to bx register + getPoint [edx].PureEdge@@mlpDstList,bx ; get point + mov [esi].PureMap@@myValue,bx ; myValue=mLeftEdge[mLeft.maxVertex()].y() +@@forever: ; (ie) while(TRUE) + mov ax,[esi].PureMap@@myValue ; move myValue to ax register + cmp ax,bmData@@mDstHeight ; is myValue greater than frame buffer height + jge @@return ; if so then we're done mapping the texture + cmp ax,00h ; is myValue within frame buffer at all + jl @@skipOutputLine ; if not then skip this output line + cmp bmData@@mUseMask,00h ; are we using mask settings + jne @@scanMask ; if so then scan the output line, excluding masked bits + scanOutputLine ; otherwise just scan the output line + jmp @@skipOutputLine ; jump over the mask code +@@scanMask: ; scanMask sync address + scanOutputLineMask ; scan the output line, apply mask where appropriate +@@skipOutputLine: ; skipOutputLine sync address + mov eax,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*) left edge to eax + increment ; increment along left edge + jc @@return ; if carry set, edge failed to increment, we're done + mov eax,[esi].PureMap@@mlpRightEdge ; move (PureEdge*) right edge to eax + increment ; increment along right edge + jc @@return ; if carry set, edge failed to increment, we're done + inc [esi].PureMap@@myValue ; increment y position + jmp @@forever ; loop until all edges are completed +@@return: ; return sync address + popad ; restore all general purpose registers + pop ebp ; restore old stack frame + retn ; return near to caller +_mapTexture endp +_initEdge proc near ; void initEdge(long edgeType,PureEdge *lpEdge); + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push ebx ; save ebx register + mov ecx,dword ptr[ebp+12] ; move edge ptr to ecx register + call _getMinMaxInfo ; find minimum and maximum vertices + cmp eax,0000h ; make sure previous call returned success + jne @@return ; if not then return + push dword ptr[ebp+8] ; push edge type (-1:leftEdge,1:rightEdge) + push [ecx].PureEdge@@mStartVertex ; push startVertex + call _setupEdge ; now setup the edge + add esp,06h ; readjust the stack +@@return: ; return label + pop ebx ; restore ebx register + pop ebp ; restore old stack frame + retn ; return to caller +_initEdge endp +_setupEdge proc near ; long setupEge(long edgeType,int startVertex); +LOCAL nextVertex:WORD,startVertex:WORD,xDestWidth:WORD,yDestHeight:DWORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + mov bx,word ptr[ebp+10] ; move edge type to bx register + mov [ecx].PureEdge@@mEdgeDirection,bx ; store edge direction in variable + mov bx,word ptr[ebp+8] ; move startVertex to bx register + mov [ecx].PureEdge@@mStartVertex,bx ; move startVertex into mStartVertex + mov startVertex,bx ; move startVertex into startVertex +@@forever: ; forever loop label + mov bx,startVertex ; move startVertex to bx register + cmp bx,[ecx].PureEdge@@mMinVertex ; is startVertex same as mMinVertex ? + je @@error ; if so then we're all done here + add bx,[ecx].PureEdge@@mEdgeDirection ; add edge direction to startVertex + mov nextVertex,bx ; move result to nextVertex + mov bx,[ecx].PureEdge@@mNumVertexes ; move number of vertexes to bx register + cmp nextVertex,bx ; compare nextVertex to number of vertexes + jge @@zervert ; next vertex is greater eq number of vertexes + cmp nextVertex,00h ; compare nextVertex to zero + jl @@adjvert ; nextVertex is less than zero + jmp @@bypass ; jump over next conditonal +@@zervert: ; handle nextVertex>=number of vertexes + mov nextVertex,00h ; set nextVertex to zero + jmp @@bypass ; jump over next conditional +@@adjvert: ; handle nextVertex<0 + dec bx ; decrement value count in bx register + mov nextVertex,bx ; set nextVertex to (numVertex-1) +@@bypass: ; bypass sync address + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get mlpDstList[nextVertex] + push bx ; dstList[nextVertex].y() in bx, save it. + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + pop ax ; restore first x point to ax + sub ax,bx ; now subtract second x point + mov [ecx].PureEdge@@mRemainingScanLines,ax ; result is mRemainingScanLines + cmp ax,00h ; check scanlines==0 + je @@loopNext ; if it's zero, continue + mov yDestHeight,eax ; set yDestHeight + push nextVertex ; save nextVertex value + pop [ecx].PureEdge@@mCurrentEdgeEnd ; restore it to mCurrentEdgeEnd + getPoint [ecx].PureEdge@@mlpSrcList,startVertex ; get mlpSrcList[startVertex] + multiply ax,bmData@@mPrecision ; multiply mxSource by bmData@@mPrecision + mov [ecx].PureEdge@@mxSource,eax ; move srcList[startVertex].x() to mxSource + multiply bx,bmData@@mPrecision ; multiply mySource by bmData@@mPrecision + mov [ecx].PureEdge@@mySource,eax ; move srcList[startVertex].y() to mySource + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get mlpSrcList[nextVertex] + multiply ax,bmData@@mPrecision ; ax by bmData@@mPrecision + mov ebx,[ecx].PureEdge@@mxSource ; mxSource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].x-mxSource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mxSourceStep + mov [ecx].PureEdge@@mxSourceStep,eax ; move eax register into mxSourceStep + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get source point + mov eax,ebx ; move point.y into eax register + multiply ax,bmData@@mPrecision ; multiply by precision + mov ebx,[ecx].PureEdge@@mySource ; mySource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].y-mySource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mySourceStep + mov [ecx].PureEdge@@mySourceStep,eax ; move eax register into mySourceStep + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + mov [ecx].PureEdge@@mxDestLocation,ax ; mxDestLocation=mDstList[startVertex].x() + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get dstList[nextVertex] + sub ax,[ecx].PureEdge@@mxDestLocation ; get the width of the segment + mov xDestWidth,ax ; move the width into xDestWidth + cmp xDestWidth,00h ; is the direction negative (ie) left + jl @@negWidth ; yes, handle negative direction + mov [ecx].PureEdge@@mxDirection,01h ; set right direction indicator + mov [ecx].PureEdge@@mxErrorTerm,00h ; set mxErrorTerm to zero + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth.mRemainingScanLines + mov [ecx].PureEdge@@mxStep,ax ; move result into mxStep + jmp @@syncOne ; jump over following handler +@@negWidth: ; handle negative direction + mov [ecx].PureEdge@@mxDirection,-1 ; set left direction indicator + neg xDestWidth ; negate the width (ie) make it positive + mov ax,01h ; move one into ax register + sub ax,[ecx].PureEdge@@mRemainingScanLines ; subtract remaining scan lines from 1 + mov [ecx].PureEdge@@mxErrorTerm,ax ; move result to mxErrorTerm + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth/mRemainingScanLines + neg eax ; negate the result + mov [ecx].PureEdge@@mxStep,ax ; move result back into mxStep +@@syncOne: ; synchronization address + mov [ecx].PureEdge@@mxAdjustUp,dx ; move remainder into mxAdjustUp + push [ecx].PureEdge@@mRemainingScanLines ; save mRemainingScanLines + pop [ecx].PureEdge@@mxAdjustDown ; restore mRemainingScanLines into mxAdjustDown + jmp @@ok ; jump over forever loop +@@loopNext: ; forever loop address + push nextVertex ; save nextVertex on stack + pop [ecx].PureEdge@@mStartVertex ; restore into mStartVertex + push nextVertex ; save nextVertex on stack + pop startVertex ; restore it to local copy of startVertex + jmp @@forever ; continue with loop +@@error: ; error handler + mov eax,0001h ; set ax register to 01h to indicate failure + jmp @@return ; jump over to return label +@@ok: ; success handler + xor eax,eax ; clear out eax register to handle success +@@return: ; return label + add esp,LocalLength ; remove local variables from stack + pop ebp ; restore old stack frame + retn ; return near to caller +_setupEdge endp +_getMinMaxInfo proc near ; long getMinMaxInfo(void) +LOCAL yMin:WORD,yMax:WORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + push ecx ; save callers ecx register + mov edx,ecx ; move ecx into edx, edx has ptr to PureEdge + cmp [edx].PureEdge@@mNumVertexes,MINVERTEX ; make sure have at least 3 vertexes + jl @@error ; handle error condition + mov yMin,MINVALUE ; start yMin with some low value + mov yMax,MAXVALUE ; start yMax with some high value + xor ecx,ecx ; start at index zero + mov eax,[edx].PureEdge@@mlpDstList ; move address of (Point*) to ebx register +@@iterator: ; loop top + mov bx,[eax].Point@@y ; move point::y to bx register + cmp bx,yMin ; compare with current yMin value + jg @@greater ; point::y greater than current yMin +@@nexttest: ; if I handle the greater condition, still need to do less + cmp bx,yMax ; compare with current yMax value + jl @@less ; point::y less than current yMax + jmp @@looptest ; nuthin, continue with test +@@greater: ; handle greater condition + mov yMin,bx ; set yMin to bx register + mov [edx].PureEdge@@mMinVertex,cx ; move index number of vertex to mMinVertex + jmp @@nexttest ; go perform next test +@@less: ; handle less condition + mov yMax,bx ; set yMax to bx register + mov [edx].PureEdge@@mMaxVertex,cx ; update mMaxVertex with current index +@@looptest: ; falls through to loop + add eax,04h ; add 4 bytes to eax to address next (Point*) + inc cx ; increment cx register + cmp cx,[edx].PureEdge@@mNumVertexes ; have we reeached the number of vertexes yet? + jl @@iterator ; still more vertexes + push [edx].PureEdge@@mMaxVertex ; save mMaxVertex + pop [edx].PureEdge@@mStartVertex ; restore it to mStartVertex + jmp @@ok ; error return sync address +@@error: ; setup for error return code + mov eax,0001h ; move 01h into ax to indicate error + jmp @@return ; jump to return label +@@ok: ; setup for success return code + xor eax,eax ; clear out eax register +@@return: ; return label + pop ecx ; restore callers ecx register + add esp,LocalLength ; pop local variables off stack + pop ebp ; restore old stack frame + retn ; return near to caller +_getMinMaxInfo endp +_setSrcBitmapInfo proc near ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mSrcWidth,ax ; move width into bmData@@mSrcWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mSrcHeight,bx ; move height into bx register + multiply ax,bx ; multiply (width*height) + mov bmData@@mSrcExtent,eax ; (width*height) to mSrcExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpSrcPtr ; restore in mlpSrcPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setSrcBitmapInfo endp +_setDstBitmapInfo proc near ; void setDstBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mDstWidth,ax ; move width into mDstWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mDstHeight,bx ; move height into mDstHeight + multiply ax,bx ; multiply (width*height) + mov bmData@@mDstExtent,eax ; move (width*height) into mDstExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpDstPtr ; restore in mlpDstPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setDstBitmapInfo endp +_setMaskInfo proc near ; void setMaskInfo(WORD useMask,BYTE maskValue) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + mov eax,[ebp+08h] ; move useMask into eax register + mov bmData@@mUseMask,al ; move useMask into bmData@@mUseMask + cmp eax,0000h ; check to see if we are using the mask + je @@maskEndProc ; if we're not using mask, don't set mask value + mov eax,[ebp+0Ch] ; move mask value into eax register + mov bmData@@mMaskValue,al ; move mask value into bmData@@mMaskValue +@@maskEndProc: ; end procedure sync address + pop ebp ; restore previous stack frame + retn ; return near to caller +_setMaskInfo endp +public _mapTexture +public _initEdge +public _setSrcBitmapInfo +public _setDstBitmapInfo +public _setMaskInfo +end + diff --git a/engine/#UTIL32.ASM b/engine/#UTIL32.ASM new file mode 100644 index 0000000..8cc04b2 --- /dev/null +++ b/engine/#UTIL32.ASM @@ -0,0 +1,258 @@ +;************************************************************************************* +; MODULE: UTIL.ASM DATE: MAY 15, 1998 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT TARGET +; FUNCTION : RESAMPLE FUNCTIONS +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.CODE +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\COMMON\MATH.INC +setByte MACRO ; setByte, see _lineWINGBlt + LOCAL @@return,@@chkCol,@@endChk ; locals + mov esi,imageBase ; move imageBase to source index register + mov eax,yRunning ; move yRunning to eax register + sar eax,10h ; adjust yRunning, this is row + jl @@return ; if less than zero then we're done + mov ebx,xRunning ; move xRunning to ebx register + sar ebx,10h ; adjust xRunning, this is col + jl @@return ; if less than zero then we're done + cmp eax,[ebp+18h] ; compare row to height + jge @@return ; if row is greater equal height then we're done here + cmp ebx,[ebp+14h] ; compare column to width + jge @@return ; if column is greater equal width then we're done here + mov edx,[ebp+14h] ; move width into bx register + imul eax,edx ; multiply row*width + sub esi,eax ; lpImage-=(row*width) + add esi,edx ; add the width back in, so (row*width)+width + add esi,ebx ; now subtract out the column + mov bl,byte ptr[ebp+1Ch] ; get fill value from stack + mov byte ptr[esi],bl ; move value into bitmap data +@@return: +ENDM +_resampleClip proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClamp) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov eax,[ebp+18h] ; move outClip to eax register + sub ebx,eax ; subtract (outLen-1L)-outClip, this is clipping region + mov edi,[ebp+0Ch] ; move lpOut to destination index register + add edi,ecx ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + cmp ecx,ebx ; compare ecx to clipping region + je @@exit ; if it's equal then we're done + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov dl,byte ptr[esi+eax] ; move source byte to dl register + mov byte ptr[edi],dl ; move source byte to destination address + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + dec edi ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClip endp +_lineWINGBlt proc near ; void lineWINGBLT(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD height,WORD value) + LOCAL xRunning:DWORD,yRunning:DWORD,xDelta:DWORD,yDelta:DWORD,xDir:WORD,yDir:WORD, \ + imageExtent:DWORD,imageBase:DWORD,steps:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; storage for local symbols + pushad ; save all general purpose registers + mov eax,[ebp+18h] ; move height into eax register + imul eax,[ebp+14h] ; multiply width*height, this is imageExtent + mov imageExtent,eax ; store extent into imageExtent + mov esi,[ebp+08h] ; move wingData into source index register + add esi,imageExtent ; add in imageExtent + mov imageBase,esi ; this is our new imageBase + mov esi,[ebp+0Ch] ; move lpFirstPoint to esi + mov edi,[ebp+10h] ; move lpSecondPoint to edi + mov ax,[esi].Point@@x ; pFirstPoint->x to eax + cmp ax,[edi].Point@@x ; is firstPoint.x == secondPoint.x + jne @@xne ; if x's are not equal then keep going + mov ax,[esi].Point@@y ; pFirstPoint->y to ax + cmp ax,[edi].Point@@y ; is firstPoint.y==secondPoint.y + je @@endLine ; if points are equal no need to draw the line +@@xne: + movsx eax,[esi].Point@@x ; move lpFirstPoint->x to eax + shl eax,10h ; shift into high word + mov xRunning,eax ; this is xRunning + movsx ebx,[esi].Point@@y ; move lpFirstPoint->y to eax + shl ebx,10h ; shift into high word + mov yRunning,ebx ; this is yRunning + mov xDir,01h ; initialize x-direction + mov yDir,01h ; initialize y-direction + movzx eax,[edi].Point@@x ; move secondPoint.x to ax + cmp ax,[esi].Point@@x ; compare secondPoint.x to firstPoint.x + jge @@noxDirChange ; no direction change required + neg xDir ; change line direction along x +@@noxDirChange: ; noxDirChange sync address + movzx ebx,[edi].Point@@y ; move secondPoint.y to ax + cmp bx,[esi].Point@@y ; compare secondPoint.y to firstPoint.y + jge @@noyDirChange ; no direction change requires + neg yDir ; change line direction along y +@@noyDirChange: ; noyDirChange sync address + sub ax,[esi].Point@@x ; move secondPoint.x-firstPoint.x to ax + movsx eax,ax ; adjust sign + mov xDelta,eax ; store difference into xDelta + sub bx,[esi].Point@@y ; move secondPoint.y-firstPoint.y to bx + movsx ebx,bx ; adjust sign + mov yDelta,ebx ; store difference into yDelta + cmp xDelta,00000000h ; is xDelta less than zero + jl @@posxDelta ; if yes then we must adjust xDelta for magnitude + jmp @@skipxFix ; otherwise no adjustment is necessary +@@posxDelta: ; posxDelta sync address + neg xDelta ; make xDelta positive +@@skipxFix: ; skipxFix sync address + cmp yDelta,00000000h ; is yDelta less than zero + jl @@posyDelta ; if yes then we must adjust yDelta for magnitude + jmp @@skipyFix ; otherwise no adjustment is necessary +@@posyDelta: ; posyDelta sync address + neg yDelta ; make yDelta positive +@@skipyFix: ; skipyFix sync address + mov eax,xDelta ; move xDelta into eax register + cmp eax,yDelta ; compare xDelta to yDelta + jge @@xGEy ; handle xDelta>=yDelta + shl eax,10h ; shift xDelta left 16 positions + cmp yDelta,00000000h ; compare yDelta to zero + je @@yEQz ; jump to sync address + divide eax,yDelta ; divide xDelta by yDelta + mov xDelta,eax ; save new xDelta value to xDelta + jmp @@yCMPs ; jump over to sync address +@@yEQz: ; yEQz sync address + mov xDelta,00000001h ; if yDelta is zero then assign one to xDelta +@@yCMPs: ; yCMPs sync address + mov eax,yDelta ; move yDelta to eax register + mov steps,eax ; move yDelta to steps + mov yDelta,10000h ; move 10000h to yDelta + jmp @@startLineDraw ; we're ready to start drawing the line +@@xGEy: ; xGEy sync address + mov eax,yDelta ; move yDelta to eax register + shl eax,10h ; shift left 10h + cmp xDelta,00000000h ; is xDelta zero + jne @@xNEz ; handle xDelta not equal to zero + mov yDelta,00000001h ; if xDelta is zero then yDelta equals one + jmp @@xCMPs ; jump over to sync address +@@xNEz: ; xNEzs sync address + divide eax,xDelta ; divide yDelta by xDelta + mov yDelta,eax ; replace yDelta with new value +@@xCMPs: ; xCMPs sync address + mov eax,xDelta ; move xDelta value into eax register + mov steps,eax ; move xDelta to steps + mov xDelta,10000h ; move 10000h to xDelta +@@startLineDraw: ; startLineDraw sync address + mov ecx,steps ; move steps into ecx register + cmp xDir,0FFFFh ; is xDir negative + je @@checkYDir ; yes it is, now check yDir + cmp yDir,0FFFFh ; is yDir negative + je @@posxDirAndNegyDir ; xDir is positive and yDir is negative + jmp @@posxDirAndPosyDir ; xDir is positive and yDir is positive +@@checkYDir: ; xDir is negative on entry + cmp yDir,0FFFFh ; is yDir negative + je @@negxDirAndNegyDir ; xDir is negative and yDir is negative +@@negxDirAndPosyDir: ; xDir is negative and yDir is positive + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + sub xRunning,eax ; xRunning-=xDelta + mov eax,yDelta ; move yDelta into eax register + add yRunning,eax ; yRunning+=yDelta + dec cx ; decrement cx register + jnz @@negxDirAndPosyDir ; if (cx) continue + jmp @@endLine ; we're done +@@negxDirAndNegyDir: ; xDir==-1&&yDir==-1 sync address + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + sub xRunning,eax ; xRunning-=xDelta + mov eax,yDelta ; move yDelta into eax register + sub yRunning,eax ; yRunning-=yDelta + dec cx ; decrement cx register + jnz @@negxDirAndNegyDir ; if (cx) continue + jmp @@endLine ; we're done +@@posxDirAndNegyDir: ; xDir==1&&yDir==-1 sync address + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + add xRunning,eax ; xRunning+=xDelta + mov eax,yDelta ; move yDelta into eax register + sub yRunning,eax ; yRunning-=yDelta + dec cx ; decrement cx register + jnz @@posxDirAndNegyDir ; if (cx) continue + jmp @@endLine ; we're done here +@@posxDirAndPosyDir: ; xDir==1&&yDir==1 + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + add xRunning,eax ; xRunning+=xDelta + mov eax,yDelta ; move yDelta into eax + add yRunning,eax ; yRunning+=yDelta + dec cx ; decrement cx register + jnz @@posxDirAndPosyDir ; if (cx) continue; +@@endLine: ; we're done here + popad ; restore all general purpose registers + add esp,LocalLength ; remove local storage frame + pop ebp ; restore stack frame + retn ; return near to caller +_lineWINGBlt endp +_clearBitmap proc near ; void clearBitmap(DWORD lpBitmapData,DWORD imageExtent) + push edi ; save destination index register + xor eax,eax ; clear eax register + mov edi,[esp+08h] ; move lpBitmapData to esi + mov ecx,[esp+0Ch] ; move bitmap extent to ecx + shr ecx,02h ; divide bitmap extent by sizeof(long) + rep stosd ; clear out the bitmap in chunks of sizeof(long) + pop edi ; restore destination index register + retn ; return near to caller +_clearBitmap endp +_setBits proc near ; void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE setBit) + push edi ; save destination index register + mov eax,[esp+10h] ; move filler byte into eax register (actually al register) + mov ah,al ; copy filler into high byte + mov cx,ax ; save word at ax into bx + shl eax,10h ; move low word into high word + mov ax,cx ; copy word back into ax + mov edi,[esp+08h] ; move lpBitmapData to esi + mov ecx,[esp+0Ch] ; move bitmap extent to ecx + shr ecx,02h ; divide bitmap extent by sizeof(long) + rep stosd ; clear out the bitmap in chunks of sizeof(long) + pop edi ; restore destination index register + retn ; return near to caller +_setBits endp +public _resampleClip +public _lineWINGBlt +public _clearBitmap +public _setBits +END diff --git a/engine/ANGLE.CPP b/engine/ANGLE.CPP new file mode 100644 index 0000000..d6b939b --- /dev/null +++ b/engine/ANGLE.CPP @@ -0,0 +1,25 @@ +#include + +void Triangle::orderPoints(void) +{ + Point minPoint; + WORD minIndex; + + for(int ptIndex=0;ptIndex +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif + +class Triangle +{ +public: + enum {VectorPoints=3}; + Triangle(void); + Triangle(const Triangle &someTriangle); + virtual ~Triangle(); + Triangle &operator=(const Triangle &someTriangle); + BOOL operator==(const Triangle &someTriangle); + Point &operator[](WORD vectorIndex); + void orderPoints(void); +private: + Point mTriangle[VectorPoints]; +}; + +inline +Triangle::Triangle(void) +{ +} + +inline +Triangle::Triangle(const Triangle &someTriangle) +{ + *this=someTriangle; +} + +inline +Triangle::~Triangle() +{ +} + +inline +Triangle &Triangle::operator=(const Triangle &someTriangle) +{ + mTriangle[0]=someTriangle.mTriangle[0]; + mTriangle[1]=someTriangle.mTriangle[1]; + mTriangle[2]=someTriangle.mTriangle[2]; + return *this; +} + +inline +BOOL Triangle::operator==(const Triangle &someTriangle) +{ + return (mTriangle[0]==someTriangle.mTriangle[0]&& + mTriangle[1]==someTriangle.mTriangle[1]&& + mTriangle[2]==someTriangle.mTriangle[2]); +} + +inline +Point &Triangle::operator[](WORD vectorIndex) +{ + return mTriangle[vectorIndex]; +} +#endif \ No newline at end of file diff --git a/engine/ANGLE3D.HPP b/engine/ANGLE3D.HPP new file mode 100644 index 0000000..210df13 --- /dev/null +++ b/engine/ANGLE3D.HPP @@ -0,0 +1,62 @@ +#ifndef _ENGINE_TRIANGLE3D_HPP_ +#define _ENGINE_TRIANGLE3D_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif + +class Triangle3D +{ +public: + enum {VectorPoints=3}; + Triangle3D(void); + Triangle3D(const Triangle3D &someTriangle3D); + virtual ~Triangle3D(); + Triangle3D &operator=(const Triangle3D &someTriangle3D); + BOOL operator==(const Triangle3D &someTriangle3D)const; + Point3D &operator[](WORD vectorIndex); +private: + Point3D mTriangle3D[VectorPoints]; +}; + +inline +Triangle3D::Triangle3D(void) +{ +} + +inline +Triangle3D::Triangle3D(const Triangle3D &someTriangle3D) +{ + *this=someTriangle3D; +} + +inline +Triangle3D::~Triangle3D() +{ +} + +inline +Triangle3D &Triangle3D::operator=(const Triangle3D &someTriangle3D) +{ + mTriangle3D[0]=someTriangle3D.mTriangle3D[0]; + mTriangle3D[1]=someTriangle3D.mTriangle3D[1]; + mTriangle3D[2]=someTriangle3D.mTriangle3D[2]; + return *this; +} + +inline +BOOL Triangle3D::operator==(const Triangle3D &someTriangle3D)const +{ + return (mTriangle3D[0]==someTriangle3D.mTriangle3D[0]&& + mTriangle3D[1]==someTriangle3D.mTriangle3D[1]&& + mTriangle3D[2]==someTriangle3D.mTriangle3D[2]); +} + +inline +Point3D &Triangle3D::operator[](WORD vectorIndex) +{ + return mTriangle3D[vectorIndex]; +} +#endif diff --git a/engine/ASMUTIL.BAK b/engine/ASMUTIL.BAK new file mode 100644 index 0000000..5de9c43 --- /dev/null +++ b/engine/ASMUTIL.BAK @@ -0,0 +1,25 @@ +#ifndef _ENGINE_ASMUTIL_HPP_ +#define _ENGINE_ASMUTIL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Point; +class PureEdge; +class PureMap; + +extern "C" +{ + void clearBitmap(DWORD lpBitmapData,DWORD imageExtent); + void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE charByte); + void lineWINGBlt(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD imageExtent,WORD value); + void initEdge(int edgeType,PureEdge *lpPureEdge); + void mapTexture(PureMap *lpEdgeMap); + void setMaskInfo(WORD useMask,BYTE maskValue); + void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpSrcBitmapImage); + void setDstBitmapInfo(WORD width,WORD height,UHUGE *lpDstBitmapImage); + void getSrcDataByte(WORD row,WORD col); + void resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClip); +} +#endif + diff --git a/engine/ASMUTIL.HPP b/engine/ASMUTIL.HPP new file mode 100644 index 0000000..2dd633a --- /dev/null +++ b/engine/ASMUTIL.HPP @@ -0,0 +1,100 @@ +#ifndef _ENGINE_ASMUTIL_HPP_ +#define _ENGINE_ASMUTIL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Point; +class PureEdge; +class PureMap; + +extern "C" +{ + void clearBitmap(DWORD lpBitmapData,DWORD imageExtent); + void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE charByte); + void lineWINGBlt(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD height,WORD value); + void initEdge(int edgeType,PureEdge *lpPureEdge); + void mapTexture(PureMap *lpEdgeMap); + void setMaskInfo(WORD useMask,BYTE maskValue); + void setSrcBitmapInfo(WORD width,WORD height,unsigned char *lpSrcBitmapImage); + void setDstBitmapInfo(WORD width,WORD height,unsigned char *lpDstBitmapImage); + void getSrcDataByte(WORD row,WORD col); + void resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClip); +} + +class ASMRoutines +{ +public: + static void clearBitmap(DWORD lpBitmapData,DWORD imageExtent); + static void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE charByte); + static void line(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD imageExtent,WORD value); + static void initEdge(int edgeType,PureEdge *lpPureEdge); + static void mapTexture(PureMap *lpEdgeMap); + static void setMaskInfo(WORD useMask,BYTE maskValue); + static void setSrcBitmapInfo(WORD width,WORD height,unsigned char *lpSrcBitmapImage); + static void setDstBitmapInfo(WORD width,WORD height,unsigned char *lpDstBitmapImage); + static void getSrcDataByte(WORD row,WORD col); + static void resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClip); +}; + +inline +void ASMRoutines::clearBitmap(DWORD lpBitmapData,DWORD imageExtent) +{ + ::clearBitmap(lpBitmapData,imageExtent); +} + +inline +void ASMRoutines::setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE charByte) +{ + ::setBits(lpBitmapData,imageExtent,charByte); +} + +inline +void ASMRoutines::line(DWORD ptrData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD height,WORD value) +{ + ::lineWINGBlt(ptrData,lpFirstPoint,lpSecondPoint,width,height,value); +} + +inline +void ASMRoutines::initEdge(int edgeType,PureEdge *lpPureEdge) +{ + ::initEdge(edgeType,lpPureEdge); +} + +inline +void ASMRoutines::mapTexture(PureMap *lpEdgeMap) +{ + ::mapTexture(lpEdgeMap); +} + +inline +void ASMRoutines::setMaskInfo(WORD useMask,BYTE maskValue) +{ + ::setMaskInfo(useMask,maskValue); +} + +inline +void ASMRoutines::setSrcBitmapInfo(WORD width,WORD height,unsigned char *lpSrcBitmapImage) +{ + ::setSrcBitmapInfo(width,height,lpSrcBitmapImage); +} + +inline +void ASMRoutines::setDstBitmapInfo(WORD width,WORD height,unsigned char *lpDstBitmapImage) +{ + ::setDstBitmapInfo(width,height,lpDstBitmapImage); +} + +inline +void ASMRoutines::getSrcDataByte(WORD row,WORD col) +{ + ::getSrcDataByte(row,col); +} + +inline +void ASMRoutines::resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClip) +{ + ::resampleClip(lpIn,lpOut,inLen,outLen,outClip); +} +#endif + diff --git a/engine/ASMVIEW.DSW b/engine/ASMVIEW.DSW new file mode 100644 index 0000000..835e7e1 Binary files /dev/null and b/engine/ASMVIEW.DSW differ diff --git a/engine/ASMVIEW.TRW b/engine/ASMVIEW.TRW new file mode 100644 index 0000000..a6aa125 Binary files /dev/null and b/engine/ASMVIEW.TRW differ diff --git a/engine/DEVICE3D.CPP b/engine/DEVICE3D.CPP new file mode 100644 index 0000000..6c2d121 --- /dev/null +++ b/engine/DEVICE3D.CPP @@ -0,0 +1,113 @@ +#include +#include +#include + +Device3D::Device3D(GUIWindow &displayWindow,PureDevice &displayDevice) +: PureDevice((HDC)displayDevice), mDisplayWindow(displayWindow) +{ +} + +void Device3D::line(Point3D &firstPoint3D,Point3D &secondPoint3D,const Pen &somePen) +{ + Point firstPoint; + Point secondPoint; + + mapCoordinates(firstPoint3D,firstPoint); + mapCoordinates(secondPoint3D,secondPoint); + + if(firstPoint.x()>=viewPortWidth())firstPoint.x(viewPortWidth()-1); + if(secondPoint.x()>=viewPortWidth())secondPoint.x(viewPortWidth()-1); + if(firstPoint.x()<0)firstPoint.x(0); + if(secondPoint.x()<0)secondPoint.x(0); + if(firstPoint.y()>=viewPortHeight())firstPoint.y(viewPortHeight()-1); + if(secondPoint.y()>=viewPortHeight())secondPoint.y(viewPortHeight()-1); + if(firstPoint.y()<0)firstPoint.y(0); + if(firstPoint.y()<0)firstPoint.y(0); + +// if(!isInView(firstPoint))return; +// if(!isInView(secondPoint))return; + PureDevice::line(firstPoint,secondPoint,somePen); +} + +void Device3D::point(Point3D &somePoint3D,RGBColor &someRGBColor) +{ + Point somePoint; + + mapCoordinates(somePoint3D,somePoint); + setPixel(somePoint,someRGBColor); +} + +void Device3D::rect3D(const Rect3D &someRect3D,const Pen &somePen) +{ + line(((Vector3D&)(someRect3D.firstPlane()))[0],((Vector3D&)(someRect3D.firstPlane()))[1],somePen); + line(((Vector3D&)(someRect3D.firstPlane()))[1],((Vector3D&)(someRect3D.firstPlane()))[2],somePen); + line(((Vector3D&)(someRect3D.firstPlane()))[2],((Vector3D&)(someRect3D.firstPlane()))[3],somePen); + line(((Vector3D&)(someRect3D.firstPlane()))[3],((Vector3D&)(someRect3D.firstPlane()))[0],somePen); + + line(((Vector3D&)(someRect3D.nextPlane()))[0],((Vector3D&)(someRect3D.nextPlane()))[1],somePen); + line(((Vector3D&)(someRect3D.nextPlane()))[1],((Vector3D&)(someRect3D.nextPlane()))[2],somePen); + line(((Vector3D&)(someRect3D.nextPlane()))[2],((Vector3D&)(someRect3D.nextPlane()))[3],somePen); + line(((Vector3D&)(someRect3D.nextPlane()))[3],((Vector3D&)(someRect3D.nextPlane()))[0],somePen); + + line(((Vector3D&)(someRect3D.firstPlane()))[0],((Vector3D&)(someRect3D.nextPlane()))[0],somePen); + line(((Vector3D&)(someRect3D.firstPlane()))[1],((Vector3D&)(someRect3D.nextPlane()))[1],somePen); + line(((Vector3D&)(someRect3D.firstPlane()))[2],((Vector3D&)(someRect3D.nextPlane()))[2],somePen); + line(((Vector3D&)(someRect3D.firstPlane()))[3],((Vector3D&)(someRect3D.nextPlane()))[3],somePen); +} + +void Device3D::drawAxis(WORD drawFlag) +{ + Pen blackPen(RGBColor(0,0,0),2); + Pen whitePen(RGBColor(255,255,255),2); + int maxValue(100); + int minValue(-100); + + if(!drawFlag) + { + line(Point3D(minValue,0,0),Point3D(maxValue,0,0),blackPen); + line(Point3D(0,minValue,0),Point3D(0,maxValue,0),blackPen); + line(Point3D(0,0,minValue),Point3D(0,0,maxValue),blackPen); + } + else + { + line(Point3D(minValue,0,0),Point3D(maxValue,0,0),whitePen); + line(Point3D(0,minValue,0),Point3D(0,maxValue,0),whitePen); + line(Point3D(0,0,minValue),Point3D(0,0,maxValue),whitePen); + } +} + +void Device3D::drawAxis(const RGBColor &textColor,const RGBColor &bkColor) +{ + Pen blackPen(RGBColor(0,0,0),2); + Pen whitePen(RGBColor(255,255,255),2); + int maxValue(100); + int minValue(-100); + + setTextColor(textColor); + setBkColor(bkColor); + + line(Point3D(minValue,0,0),Point3D(maxValue,0,0),whitePen); + drawText("x",Point3D(maxValue/2,0,0)); + drawText(String().fromInt(maxValue),Point3D(maxValue,0,0)); + drawText(String().fromInt(minValue),Point3D(minValue,0,0)); + + line(Point3D(0,minValue,0),Point3D(0,maxValue,0),whitePen); + drawText("y",Point3D(0,maxValue/2,0)); + drawText(String().fromInt(maxValue),Point3D(0,maxValue,0)); + drawText(String().fromInt(minValue),Point3D(0,minValue,0)); + + line(Point3D(0,0,minValue),Point3D(0,0,maxValue),whitePen); + drawText("z",Point3D(0,0,maxValue/2)); + drawText(String().fromInt(maxValue),Point3D(0,0,maxValue)); + drawText(String().fromInt(minValue),Point3D(0,0,minValue)); +} + +void Device3D::drawText(const String &text,Point3D &point3D,bool useCartesian) +{ + Point screenPoint; + mapCoordinates(point3D,screenPoint,useCartesian); + PureDevice::drawText(screenPoint,text); +} + + + diff --git a/engine/DEVICE3D.HPP b/engine/DEVICE3D.HPP new file mode 100644 index 0000000..2dd4b4e --- /dev/null +++ b/engine/DEVICE3D.HPP @@ -0,0 +1,91 @@ +#ifndef _ENGINE_DEVICE3D_HPP_ +#define _ENGINE_DEVICE3D_HPP_ +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif +#ifndef _ENGINE_VIEWSYSTEM_HPP_ +#include +#endif + +class Rect3D; + +class Device3D : public PureDevice, public ViewSystem +{ +public: + Device3D(GUIWindow &displayWindow); + Device3D(GUIWindow &displayWindow,PureDevice &displayDevice); + Device3D(const Device3D &someDevice3D); + virtual ~Device3D(); + Device3D &operator=(const ViewSystem &someViewSystem); + void line(Point3D &firstPoint3D,Point3D &secondPoint3D,const Pen &somePen); + void point(Point3D &somePoint3D,RGBColor &someRGBColor); + void rect3D(const Rect3D &someRect3D,const Pen &somePen); + void drawAxis(WORD drawFlag); + void drawAxis(const RGBColor &textColor,const RGBColor &bkColor); + void drawText(const String &text,Point3D &point3D,bool useCartesian=true); + WORD width(void)const; + WORD height(void)const; +protected: + virtual WORD viewPortWidth(void)const; + virtual WORD viewPortHeight(void)const; +private: + GUIWindow &mDisplayWindow; +}; + +inline +Device3D::Device3D(GUIWindow &displayWindow) +: PureDevice(displayWindow), mDisplayWindow(displayWindow) +{ +} + +inline +Device3D::Device3D(const Device3D &someDevice3D) +: PureDevice((PureDevice&)someDevice3D), mDisplayWindow(someDevice3D.mDisplayWindow) +{ +} + +inline +Device3D::~Device3D() +{ +} + +inline +Device3D &Device3D::operator=(const ViewSystem &someViewSystem) +{ + (ViewSystem&)*this=someViewSystem; + return *this; +} + +inline +WORD Device3D::width(void)const +{ + return viewPortWidth(); +} + +inline +WORD Device3D::height(void)const +{ + return viewPortHeight(); +} + +inline +WORD Device3D::viewPortWidth(void)const +{ + return mDisplayWindow.width(); +} + +inline +WORD Device3D::viewPortHeight(void)const +{ + return mDisplayWindow.height(); +} +#endif diff --git a/engine/DIB3D.CPP b/engine/DIB3D.CPP new file mode 100644 index 0000000..8323ab4 --- /dev/null +++ b/engine/DIB3D.CPP @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include + +CallbackData::ReturnType DIB3D::sizeHandler(CallbackData &someCallbackData) +{ + size(mDisplayWindow.width(),mDisplayWindow.height()); + return (CallbackData::ReturnType)FALSE; +} + +void DIB3D::line(Point3D &firstPoint3D,Point3D &secondPoint3D,BYTE byteValue) +{ + Point firstPoint; + Point secondPoint; + + mapCoordinates(firstPoint3D,firstPoint); + mapCoordinates(secondPoint3D,secondPoint); + DIBitmap::line(firstPoint,secondPoint,byteValue); +} + +void DIB3D::axis(BOOL drawFlag) +{ + int blackIndex(0); + int whiteIndex(255); + int maxValue(200); + int minValue(-200); + + if(!drawFlag) + { + line(Point3D(minValue,0,0),Point3D(maxValue,0,0),blackIndex); + line(Point3D(0,minValue,0),Point3D(0,maxValue,0),blackIndex); + line(Point3D(0,0,minValue),Point3D(0,0,maxValue),blackIndex); + } + else + { + line(Point3D(minValue,0,0),Point3D(maxValue,0,0),whiteIndex); + line(Point3D(0,minValue,0),Point3D(0,maxValue,0),whiteIndex); + line(Point3D(0,0,minValue),Point3D(0,0,maxValue),whiteIndex); + } +} + +void DIB3D::rectangle(const Rect3D &someRect3D,int paletteIndex) +{ + line(((Vector3D&)(someRect3D.firstPlane()))[0],((Vector3D&)(someRect3D.firstPlane()))[1],paletteIndex); + line(((Vector3D&)(someRect3D.firstPlane()))[1],((Vector3D&)(someRect3D.firstPlane()))[2],paletteIndex); + line(((Vector3D&)(someRect3D.firstPlane()))[2],((Vector3D&)(someRect3D.firstPlane()))[3],paletteIndex); + line(((Vector3D&)(someRect3D.firstPlane()))[3],((Vector3D&)(someRect3D.firstPlane()))[0],paletteIndex); + + line(((Vector3D&)(someRect3D.nextPlane()))[0],((Vector3D&)(someRect3D.nextPlane()))[1],paletteIndex); + line(((Vector3D&)(someRect3D.nextPlane()))[1],((Vector3D&)(someRect3D.nextPlane()))[2],paletteIndex); + line(((Vector3D&)(someRect3D.nextPlane()))[2],((Vector3D&)(someRect3D.nextPlane()))[3],paletteIndex); + line(((Vector3D&)(someRect3D.nextPlane()))[3],((Vector3D&)(someRect3D.nextPlane()))[0],paletteIndex); + + line(((Vector3D&)(someRect3D.firstPlane()))[0],((Vector3D&)(someRect3D.nextPlane()))[0],paletteIndex); + line(((Vector3D&)(someRect3D.firstPlane()))[1],((Vector3D&)(someRect3D.nextPlane()))[1],paletteIndex); + line(((Vector3D&)(someRect3D.firstPlane()))[2],((Vector3D&)(someRect3D.nextPlane()))[2],paletteIndex); + line(((Vector3D&)(someRect3D.firstPlane()))[3],((Vector3D&)(someRect3D.nextPlane()))[3],paletteIndex); +} + +// virtual overloads + +WORD DIB3D::viewPortWidth(void)const +{ + return mDisplayWindow.width(); +} + +WORD DIB3D::viewPortHeight(void)const +{ + return mDisplayWindow.height(); +} diff --git a/engine/DIB3D.HPP b/engine/DIB3D.HPP new file mode 100644 index 0000000..c87dd90 --- /dev/null +++ b/engine/DIB3D.HPP @@ -0,0 +1,71 @@ +#ifndef _ENGINE_DIB3D_HPP_ +#define _ENGINE_DIB3D_HPP_ +#ifndef _ENGINE_VIEWSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif + +class Point3D; +class Rect3D; + +class DIB3D : public DIBitmap, public ViewSystem +{ +public: + DIB3D(GUIWindow &someGUIWindow); + DIB3D(GUIWindow &someGUIWindow,const PurePalette &purePalette); + virtual ~DIB3D(); + void line(Point3D &firstPoint3D,Point3D &secondPoint,BYTE byteValue); + void rectangle(const Rect3D &someRect3D,int paletteIndex); + void axis(BOOL drawFlag); +protected: + WORD viewPortWidth(void)const; + WORD viewPortHeight(void)const; +private: + WORD operator==(const DIB3D &someDIB3D)const; + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + GUIWindow &mDisplayWindow; +}; + +inline +DIB3D::DIB3D(GUIWindow &someGUIWindow) +: DIBitmap(PureDevice(someGUIWindow),someGUIWindow.width(),someGUIWindow.height(),PurePalette(PurePalette::InitSys)), + mDisplayWindow(someGUIWindow) +{ + mSizeHandler.setCallback(this,&DIB3D::sizeHandler); + mDisplayWindow.insertHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +inline +DIB3D::DIB3D(GUIWindow &someGUIWindow,const PurePalette &purePalette) +: DIBitmap(PureDevice(someGUIWindow),someGUIWindow.width(),someGUIWindow.height(),purePalette), + mDisplayWindow(someGUIWindow) +{ + mSizeHandler.setCallback(this,&DIB3D::sizeHandler); + mDisplayWindow.insertHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +inline +DIB3D::~DIB3D() +{ + mDisplayWindow.removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +inline +WORD DIB3D::operator==(const DIB3D &someDIB3D)const +{ // private implementation + return FALSE; +} +#endif diff --git a/engine/ENGINE.BAK b/engine/ENGINE.BAK new file mode 100644 index 0000000..037ef39 --- /dev/null +++ b/engine/ENGINE.BAK @@ -0,0 +1,686 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=engine - Win32 Debug +!MESSAGE No configuration specified. Defaulting to engine - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "engine - Win32 Release" && "$(CFG)" != "engine - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Engine.mak" CFG="engine - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "engine - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "engine - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "engine - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "engine - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Engine.lib" + +CLEAN : + -@erase "$(INTDIR)\angle.obj" + -@erase "$(INTDIR)\Device3d.obj" + -@erase "$(INTDIR)\dib3d.obj" + -@erase "$(INTDIR)\Purevsys.obj" + -@erase "$(INTDIR)\spacial.obj" + -@erase "$(INTDIR)\Texture.obj" + -@erase "$(INTDIR)\Viewsys.obj" + -@erase "$(OUTDIR)\Engine.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Engine.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Engine.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Engine.lib" +LIB32_OBJS= \ + "$(INTDIR)\angle.obj" \ + "$(INTDIR)\Device3d.obj" \ + "$(INTDIR)\dib3d.obj" \ + "$(INTDIR)\Purevsys.obj" \ + "$(INTDIR)\spacial.obj" \ + "$(INTDIR)\Texture.obj" \ + "$(INTDIR)\Viewsys.obj" \ + ".\Msvcobj\tmap32.obj" \ + ".\Msvcobj\util32.obj" \ + ".\Msvcobj\vsmap32.obj" + +"$(OUTDIR)\Engine.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "..\exe" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\..\exe +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\msengine.lib" + +CLEAN : + -@erase "$(INTDIR)\angle.obj" + -@erase "$(INTDIR)\Device3d.obj" + -@erase "$(INTDIR)\dib3d.obj" + -@erase "$(INTDIR)\Purevsys.obj" + -@erase "$(INTDIR)\spacial.obj" + -@erase "$(INTDIR)\Texture.obj" + -@erase "$(INTDIR)\Viewsys.obj" + -@erase "$(OUTDIR)\msengine.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +"$(INTDIR)" : + if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Engine.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msengine.lib" +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/msengine.lib" +LIB32_OBJS= \ + "$(INTDIR)\angle.obj" \ + "$(INTDIR)\Device3d.obj" \ + "$(INTDIR)\dib3d.obj" \ + "$(INTDIR)\Purevsys.obj" \ + "$(INTDIR)\spacial.obj" \ + "$(INTDIR)\Texture.obj" \ + "$(INTDIR)\Viewsys.obj" \ + ".\Msvcobj\tmap32.obj" \ + ".\Msvcobj\util32.obj" \ + ".\Msvcobj\vsmap32.obj" + +"$(OUTDIR)\msengine.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "engine - Win32 Release" +# Name "engine - Win32 Debug" + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Viewsys.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Viewsys.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Viewsys.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Purevsys.cpp +DEP_CPP_PUREV=\ + {$(INCLUDE)}"\.\Line2d.hpp"\ + {$(INCLUDE)}"\.\Line3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Polygon.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Purevsys.obj" : $(SOURCE) $(DEP_CPP_PUREV) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Texture.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_TEXTU=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Pureedge.hpp"\ + {$(INCLUDE)}"\.\Puremap.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Texture.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wingblt.hpp"\ + {$(INCLUDE)}"\wing\Include\Wing.h"\ + {$(INCLUDE)}"\wing\Wing.hpp"\ + + +"$(INTDIR)\Texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_TEXTU=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Pureedge.hpp"\ + {$(INCLUDE)}"\.\Puremap.hpp"\ + {$(INCLUDE)}"\.\Texture.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wingblt.hpp"\ + {$(INCLUDE)}"\wing\Include\Wing.h"\ + {$(INCLUDE)}"\wing\Wing.hpp"\ + + +"$(INTDIR)\Texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Device3d.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_DEVIC=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Device3d.obj" : $(SOURCE) $(DEP_CPP_DEVIC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_DEVIC=\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Device3d.obj" : $(SOURCE) $(DEP_CPP_DEVIC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Msvcobj\vsmap32.obj + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Msvcobj\tmap32.obj + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\dib3d.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_DIB3D=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Dib3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\dib3d.obj" : $(SOURCE) $(DEP_CPP_DIB3D) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_DIB3D=\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Dib3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\dib3d.obj" : $(SOURCE) $(DEP_CPP_DIB3D) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\spacial.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Msvcobj\util32.obj + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\angle.cpp +DEP_CPP_ANGLE=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\angle.obj" : $(SOURCE) $(DEP_CPP_ANGLE) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/engine/ENGINE.DSW b/engine/ENGINE.DSW new file mode 100644 index 0000000..0f25cf8 --- /dev/null +++ b/engine/ENGINE.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "engine"=.\engine.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/engine/ENGINE.OPT b/engine/ENGINE.OPT new file mode 100644 index 0000000..e7273b6 Binary files /dev/null and b/engine/ENGINE.OPT differ diff --git a/engine/ENGINE.PLG b/engine/ENGINE.PLG new file mode 100644 index 0000000..62f2d93 --- /dev/null +++ b/engine/ENGINE.PLG @@ -0,0 +1,63 @@ + + +
+

Build Log

+

+--------------------Configuration: engine - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP2B3.tmp" with contents +[ +/nologo /MTd /Zi /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /FR".\msvcobj/" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\engine\angle.cpp" +"F:\work\engine\Device3d.cpp" +"F:\work\engine\dib3d.cpp" +"F:\work\engine\Purevsys.cpp" +"F:\work\engine\spacial.cpp" +"F:\work\engine\Texture.cpp" +"F:\work\engine\vector3d.cpp" +"F:\work\engine\Viewsys.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP2B3.tmp" +

Output Window

+Compiling... +angle.cpp +Device3d.cpp +dib3d.cpp +Purevsys.cpp +spacial.cpp +Texture.cpp +vector3d.cpp +Viewsys.cpp +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP2B4.tmp" with contents +[ +/nologo /out:"..\exe\msengine.lib" +.\msvcobj\angle.obj +.\msvcobj\Device3d.obj +.\msvcobj\dib3d.obj +.\msvcobj\Purevsys.obj +.\msvcobj\spacial.obj +.\msvcobj\Texture.obj +.\msvcobj\vector3d.obj +.\msvcobj\Viewsys.obj +.\Msvcobj\tmap32.obj +.\Msvcobj\util32.obj +.\Msvcobj\vsmap32.obj +] +Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP2B4.tmp" +

Output Window

+Creating library... +.\Msvcobj\tmap32.obj : warning LNK4033: converting object format from OMF to COFF +.\Msvcobj\util32.obj : warning LNK4033: converting object format from OMF to COFF +.\Msvcobj\vsmap32.obj : warning LNK4033: converting object format from OMF to COFF +Creating command line "bscmake.exe /nologo /o"..\exe/engine.bsc" .\msvcobj\angle.sbr .\msvcobj\Device3d.sbr .\msvcobj\dib3d.sbr .\msvcobj\Purevsys.sbr .\msvcobj\spacial.sbr .\msvcobj\Texture.sbr .\msvcobj\vector3d.sbr .\msvcobj\Viewsys.sbr" +Creating browse info file... +

Output Window

+ + + +

Results

+msengine.lib - 0 error(s), 3 warning(s) +
+ + diff --git a/engine/ENGINE.ncb b/engine/ENGINE.ncb new file mode 100644 index 0000000..3c2b3ab Binary files /dev/null and b/engine/ENGINE.ncb differ diff --git a/engine/ENGINE16.DSW b/engine/ENGINE16.DSW new file mode 100644 index 0000000..c6df5c0 Binary files /dev/null and b/engine/ENGINE16.DSW differ diff --git a/engine/ENGINE16.IDE b/engine/ENGINE16.IDE new file mode 100644 index 0000000..053a976 Binary files /dev/null and b/engine/ENGINE16.IDE differ diff --git a/engine/ENGINE32.DSW b/engine/ENGINE32.DSW new file mode 100644 index 0000000..8c57e0e Binary files /dev/null and b/engine/ENGINE32.DSW differ diff --git a/engine/ENGINE32.IDE b/engine/ENGINE32.IDE new file mode 100644 index 0000000..b6b77d8 Binary files /dev/null and b/engine/ENGINE32.IDE differ diff --git a/engine/ENGINE32.MAK b/engine/ENGINE32.MAK new file mode 100644 index 0000000..5d92dff --- /dev/null +++ b/engine/ENGINE32.MAK @@ -0,0 +1,98 @@ +# +# Borland C++ IDE generated makefile +# +.AUTODEPEND + + +# +# Borland C++ tools +# +IMPLIB = Implib +BCC32 = Bcc32 +BccW32.cfg +TLINK32 = TLink32 +TLIB = TLib +BRC32 = Brc32 +TASM32 = Tasm32 +# +# IDE macros +# + + +# +# Options +# +IDE_LFLAGS32 = -LC:\BC45\LIB +IDE_RFLAGS32 = +LLATW32_ddbEXEbengine32dlib = -LC:\BC45\LIB -Tpe -aa -c +RLATW32_ddbEXEbengine32dlib = -w32 +BLATW32_ddbEXEbengine32dlib = /P32 +CNIEAT_ddbEXEbengine32dlib = -IC:\BC45\INCLUDE;..;..\..\PARTS\ -DSTRICT +LNIEAT_ddbEXEbengine32dlib = -x +LEAT_ddbEXEbengine32dlib = $(LLATW32_ddbEXEbengine32dlib) +REAT_ddbEXEbengine32dlib = $(RLATW32_ddbEXEbengine32dlib) +BEAT_ddbEXEbengine32dlib = $(BLATW32_ddbEXEbengine32dlib) +CLATW16_ddbexebcommon32dlib = +LLATW16_ddbexebcommon32dlib = +RLATW16_ddbexebcommon32dlib = +BLATW16_ddbexebcommon32dlib = +CEAT_ddbexebcommon32dlib = $(CEAT_ddbEXEbengine32dlib) $(CLATW16_ddbexebcommon32dlib) +CNIEAT_ddbexebcommon32dlib = -IC:\BC45\INCLUDE;..;..\..\PARTS\ -DSTRICT +LNIEAT_ddbexebcommon32dlib = -x +LEAT_ddbexebcommon32dlib = $(LEAT_ddbEXEbengine32dlib) $(LLATW16_ddbexebcommon32dlib) +REAT_ddbexebcommon32dlib = $(REAT_ddbEXEbengine32dlib) $(RLATW16_ddbexebcommon32dlib) +BEAT_ddbexebcommon32dlib = $(BEAT_ddbEXEbengine32dlib) $(BLATW16_ddbexebcommon32dlib) +CLATW32_vsmap32dasm = +LLATW32_vsmap32dasm = +RLATW32_vsmap32dasm = +BLATW32_vsmap32dasm = +CEAT_vsmap32dasm = $(CEAT_ddbEXEbengine32dlib) $(CLATW32_vsmap32dasm) +CNIEAT_vsmap32dasm = -IC:\BC45\INCLUDE;..;..\..\PARTS\ -DSTRICT +LNIEAT_vsmap32dasm = -x +LEAT_vsmap32dasm = $(LEAT_ddbEXEbengine32dlib) $(LLATW32_vsmap32dasm) +REAT_vsmap32dasm = $(REAT_ddbEXEbengine32dlib) $(RLATW32_vsmap32dasm) +BEAT_vsmap32dasm = $(BEAT_ddbEXEbengine32dlib) $(BLATW32_vsmap32dasm) +CLATW32_tmap32dasm = +LLATW32_tmap32dasm = +RLATW32_tmap32dasm = +BLATW32_tmap32dasm = +CEAT_tmap32dasm = $(CEAT_ddbEXEbengine32dlib) $(CLATW32_tmap32dasm) +CNIEAT_tmap32dasm = -IC:\BC45\INCLUDE;..;..\..\PARTS\ -DSTRICT +LNIEAT_tmap32dasm = -x +LEAT_tmap32dasm = $(LEAT_ddbEXEbengine32dlib) $(LLATW32_tmap32dasm) +REAT_tmap32dasm = $(REAT_ddbEXEbengine32dlib) $(RLATW32_tmap32dasm) +BEAT_tmap32dasm = $(BEAT_ddbEXEbengine32dlib) $(BLATW32_tmap32dasm) + +# +# Dependency List +# +Dep_engine32 = \ + ..\EXE\engine32.lib + +engine32 : BccW32.cfg $(Dep_engine32) + echo MakeNode + +Dep_ddbEXEbengine32dlib = \ + ..\exe\common32.lib\ + EXEOBJ32\vsmap32.obj\ + EXEOBJ32\tmap32.obj\ + EXEOBJ32\purevsys.obj\ + EXEOBJ32\viewsys.obj\ + EXEOBJ32\texture.obj\ + EXEOBJ32\device3d.obj + +..\EXE\engine32.lib : $(Dep_ddbEXEbengine32dlib) + $(TLIB) $< $(IDE_BFLAGS) $(BEAT_ddbEXEbengine32dlib) @&&| + -+EXEOBJ32\vsmap32.obj & +-+EXEOBJ32\tmap32.obj & +-+EXEOBJ32\purevsys.obj & +-+EXEOBJ32\viewsys.obj & +-+EXEOBJ32\texture.obj & +-+EXEOBJ32\device3d.obj & +-+..\exe\common32.lib +| + +EXEOBJ32\vsmap32.obj : vsmap32.asm + $(TASM32) @&&| +vsmap32.asm +| + diff --git a/engine/ENGINE32.OBR b/engine/ENGINE32.OBR new file mode 100644 index 0000000..7b38278 Binary files /dev/null and b/engine/ENGINE32.OBR differ diff --git a/engine/ENGINE32.~DE b/engine/ENGINE32.~DE new file mode 100644 index 0000000..74a21b4 Binary files /dev/null and b/engine/ENGINE32.~DE differ diff --git a/engine/Engine.mak b/engine/Engine.mak new file mode 100644 index 0000000..037ef39 --- /dev/null +++ b/engine/Engine.mak @@ -0,0 +1,686 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=engine - Win32 Debug +!MESSAGE No configuration specified. Defaulting to engine - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "engine - Win32 Release" && "$(CFG)" != "engine - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Engine.mak" CFG="engine - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "engine - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "engine - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "engine - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "engine - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Engine.lib" + +CLEAN : + -@erase "$(INTDIR)\angle.obj" + -@erase "$(INTDIR)\Device3d.obj" + -@erase "$(INTDIR)\dib3d.obj" + -@erase "$(INTDIR)\Purevsys.obj" + -@erase "$(INTDIR)\spacial.obj" + -@erase "$(INTDIR)\Texture.obj" + -@erase "$(INTDIR)\Viewsys.obj" + -@erase "$(OUTDIR)\Engine.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Engine.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Engine.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Engine.lib" +LIB32_OBJS= \ + "$(INTDIR)\angle.obj" \ + "$(INTDIR)\Device3d.obj" \ + "$(INTDIR)\dib3d.obj" \ + "$(INTDIR)\Purevsys.obj" \ + "$(INTDIR)\spacial.obj" \ + "$(INTDIR)\Texture.obj" \ + "$(INTDIR)\Viewsys.obj" \ + ".\Msvcobj\tmap32.obj" \ + ".\Msvcobj\util32.obj" \ + ".\Msvcobj\vsmap32.obj" + +"$(OUTDIR)\Engine.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "..\exe" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\..\exe +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\msengine.lib" + +CLEAN : + -@erase "$(INTDIR)\angle.obj" + -@erase "$(INTDIR)\Device3d.obj" + -@erase "$(INTDIR)\dib3d.obj" + -@erase "$(INTDIR)\Purevsys.obj" + -@erase "$(INTDIR)\spacial.obj" + -@erase "$(INTDIR)\Texture.obj" + -@erase "$(INTDIR)\Viewsys.obj" + -@erase "$(OUTDIR)\msengine.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +"$(INTDIR)" : + if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Engine.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msengine.lib" +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/msengine.lib" +LIB32_OBJS= \ + "$(INTDIR)\angle.obj" \ + "$(INTDIR)\Device3d.obj" \ + "$(INTDIR)\dib3d.obj" \ + "$(INTDIR)\Purevsys.obj" \ + "$(INTDIR)\spacial.obj" \ + "$(INTDIR)\Texture.obj" \ + "$(INTDIR)\Viewsys.obj" \ + ".\Msvcobj\tmap32.obj" \ + ".\Msvcobj\util32.obj" \ + ".\Msvcobj\vsmap32.obj" + +"$(OUTDIR)\msengine.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "engine - Win32 Release" +# Name "engine - Win32 Debug" + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Viewsys.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Viewsys.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Viewsys.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Purevsys.cpp +DEP_CPP_PUREV=\ + {$(INCLUDE)}"\.\Line2d.hpp"\ + {$(INCLUDE)}"\.\Line3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Polygon.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Purevsys.obj" : $(SOURCE) $(DEP_CPP_PUREV) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Texture.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_TEXTU=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Pureedge.hpp"\ + {$(INCLUDE)}"\.\Puremap.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Texture.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wingblt.hpp"\ + {$(INCLUDE)}"\wing\Include\Wing.h"\ + {$(INCLUDE)}"\wing\Wing.hpp"\ + + +"$(INTDIR)\Texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_TEXTU=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Pureedge.hpp"\ + {$(INCLUDE)}"\.\Puremap.hpp"\ + {$(INCLUDE)}"\.\Texture.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wingblt.hpp"\ + {$(INCLUDE)}"\wing\Include\Wing.h"\ + {$(INCLUDE)}"\wing\Wing.hpp"\ + + +"$(INTDIR)\Texture.obj" : $(SOURCE) $(DEP_CPP_TEXTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Device3d.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_DEVIC=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Device3d.obj" : $(SOURCE) $(DEP_CPP_DEVIC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_DEVIC=\ + {$(INCLUDE)}"\.\Device3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Device3d.obj" : $(SOURCE) $(DEP_CPP_DEVIC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Msvcobj\vsmap32.obj + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Msvcobj\tmap32.obj + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\dib3d.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_DIB3D=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\.\angle3d.hpp"\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Dib3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Purevsys.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\dib3d.obj" : $(SOURCE) $(DEP_CPP_DIB3D) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_DIB3D=\ + {$(INCLUDE)}"\.\Asmutil.hpp"\ + {$(INCLUDE)}"\.\Dib3d.hpp"\ + {$(INCLUDE)}"\.\Point3d.hpp"\ + {$(INCLUDE)}"\.\Rect3d.hpp"\ + {$(INCLUDE)}"\.\Vector3d.hpp"\ + {$(INCLUDE)}"\.\Viewsys.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vector2d.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\dib3d.obj" : $(SOURCE) $(DEP_CPP_DIB3D) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\spacial.cpp + +!IF "$(CFG)" == "engine - Win32 Release" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Msvcobj\util32.obj + +!IF "$(CFG)" == "engine - Win32 Release" + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\angle.cpp +DEP_CPP_ANGLE=\ + {$(INCLUDE)}"\.\angle.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\angle.obj" : $(SOURCE) $(DEP_CPP_ANGLE) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/engine/LINE2D.BAK b/engine/LINE2D.BAK new file mode 100644 index 0000000..2130dff --- /dev/null +++ b/engine/LINE2D.BAK @@ -0,0 +1,85 @@ +#ifndef _ENGINE_LINE2D_HPP_ +#define _ENGINE_LINE2D_HPP_ +#ifndef _COMMON_POINT_HPP_ +#include +#endif + +class Line2D +{ +public: + Line2D(void); + Line2D(const Line2D &someLine2D); + Line2D(const Point &firstPoint,const Point &secondPoint); + virtual ~Line2D(); + Line2D &operator=(const Line2D &someLine2D); + BOOL operator==(const Line2D &someLine2D)const; + const Point &firstPoint(void)const; + void firstPoint(const Point &firstPoint); + const Point &secondPoint(void)const; + void secondPoint(const Point &secondPoint); +private: + Point mFirstPoint; + Point mSecondPoint; +}; + +inline +Line2D::Line2D(void) +{ +} + +inline +Line2D::Line2D(const Line2D &someLine2D) +{ + *this=someLine2D; +} + +inline +Line2D::Line2D(const Point &firstPoint,const Point &secondPoint) +: mFirstPoint(firstPoint), mSecondPoint(secondPoint) +{ +} + +inline +Line2D::~Line2D() +{ +} + +inline +Line2D &Line2D::operator=(const Line2D &someLine2D) +{ + firstPoint(someLine2D.firstPoint()); + secondPoint(someLine2D.secondPoint()); + return *this; +} + +inline +BOOL Line2D::operator==(const Line2D &someLine2D)const +{ + return (firstPoint()==someLine2D.firstPoint()&& + secondPoint()==someLine2D.secondPoint()); +} + +inline +const Point &Line2D::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +void Line2D::firstPoint(const Point &firstPoint) +{ + mFirstPoint=firstPoint; +} + +inline +const Point &Line2D::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void Line2D::secondPoint(const Point &secondPoint) +{ + mSecondPoint=secondPoint; +} +#endif \ No newline at end of file diff --git a/engine/LINE2D.HPP b/engine/LINE2D.HPP new file mode 100644 index 0000000..2130dff --- /dev/null +++ b/engine/LINE2D.HPP @@ -0,0 +1,85 @@ +#ifndef _ENGINE_LINE2D_HPP_ +#define _ENGINE_LINE2D_HPP_ +#ifndef _COMMON_POINT_HPP_ +#include +#endif + +class Line2D +{ +public: + Line2D(void); + Line2D(const Line2D &someLine2D); + Line2D(const Point &firstPoint,const Point &secondPoint); + virtual ~Line2D(); + Line2D &operator=(const Line2D &someLine2D); + BOOL operator==(const Line2D &someLine2D)const; + const Point &firstPoint(void)const; + void firstPoint(const Point &firstPoint); + const Point &secondPoint(void)const; + void secondPoint(const Point &secondPoint); +private: + Point mFirstPoint; + Point mSecondPoint; +}; + +inline +Line2D::Line2D(void) +{ +} + +inline +Line2D::Line2D(const Line2D &someLine2D) +{ + *this=someLine2D; +} + +inline +Line2D::Line2D(const Point &firstPoint,const Point &secondPoint) +: mFirstPoint(firstPoint), mSecondPoint(secondPoint) +{ +} + +inline +Line2D::~Line2D() +{ +} + +inline +Line2D &Line2D::operator=(const Line2D &someLine2D) +{ + firstPoint(someLine2D.firstPoint()); + secondPoint(someLine2D.secondPoint()); + return *this; +} + +inline +BOOL Line2D::operator==(const Line2D &someLine2D)const +{ + return (firstPoint()==someLine2D.firstPoint()&& + secondPoint()==someLine2D.secondPoint()); +} + +inline +const Point &Line2D::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +void Line2D::firstPoint(const Point &firstPoint) +{ + mFirstPoint=firstPoint; +} + +inline +const Point &Line2D::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void Line2D::secondPoint(const Point &secondPoint) +{ + mSecondPoint=secondPoint; +} +#endif \ No newline at end of file diff --git a/engine/LINE3D.BAK b/engine/LINE3D.BAK new file mode 100644 index 0000000..689e455 --- /dev/null +++ b/engine/LINE3D.BAK @@ -0,0 +1,85 @@ +#ifndef _ENGINE_LINE3D_HPP_ +#define _ENGINE_LINE3D_HPP_ +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif + +class Line3D +{ +public: + Line3D(void); + Line3D(const Line3D &someLine3D); + Line3D(const Point3D &firstPoint,const Point3D &secondPoint); + virtual ~Line3D(); + Line3D &operator=(const Line3D &someLine3D); + BOOL operator==(const Line3D &someLine3D)const; + const Point3D &firstPoint(void)const; + void firstPoint(const Point3D &firstPoint); + const Point3D &secondPoint(void)const; + void secondPoint(const Point3D &secondPoint); +private: + Point3D mFirstPoint; + Point3D mSecondPoint; +}; + +inline +Line3D::Line3D(void) +{ +} + +inline +Line3D::Line3D(const Line3D &someLine3D) +{ + *this=someLine3D; +} + +inline +Line3D::Line3D(const Point3D &firstPoint,const Point3D &secondPoint) +: mFirstPoint(firstPoint), mSecondPoint(secondPoint) +{ +} + +inline +Line3D::~Line3D() +{ +} + +inline +Line3D &Line3D::operator=(const Line3D &someLine3D) +{ + firstPoint(someLine3D.firstPoint()); + secondPoint(someLine3D.secondPoint()); + return *this; +} + +inline +BOOL Line3D::operator==(const Line3D &someLine3D)const +{ + return (firstPoint()==someLine3D.firstPoint()&& + secondPoint()==someLine3D.secondPoint()); +} + +inline +const Point3D &Line3D::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +void Line3D::firstPoint(const Point3D &firstPoint) +{ + mFirstPoint=firstPoint; +} + +inline +const Point3D &Line3D::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void Line3D::secondPoint(const Point3D &secondPoint) +{ + mSecondPoint=secondPoint; +} +#endif diff --git a/engine/LINE3D.HPP b/engine/LINE3D.HPP new file mode 100644 index 0000000..689e455 --- /dev/null +++ b/engine/LINE3D.HPP @@ -0,0 +1,85 @@ +#ifndef _ENGINE_LINE3D_HPP_ +#define _ENGINE_LINE3D_HPP_ +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif + +class Line3D +{ +public: + Line3D(void); + Line3D(const Line3D &someLine3D); + Line3D(const Point3D &firstPoint,const Point3D &secondPoint); + virtual ~Line3D(); + Line3D &operator=(const Line3D &someLine3D); + BOOL operator==(const Line3D &someLine3D)const; + const Point3D &firstPoint(void)const; + void firstPoint(const Point3D &firstPoint); + const Point3D &secondPoint(void)const; + void secondPoint(const Point3D &secondPoint); +private: + Point3D mFirstPoint; + Point3D mSecondPoint; +}; + +inline +Line3D::Line3D(void) +{ +} + +inline +Line3D::Line3D(const Line3D &someLine3D) +{ + *this=someLine3D; +} + +inline +Line3D::Line3D(const Point3D &firstPoint,const Point3D &secondPoint) +: mFirstPoint(firstPoint), mSecondPoint(secondPoint) +{ +} + +inline +Line3D::~Line3D() +{ +} + +inline +Line3D &Line3D::operator=(const Line3D &someLine3D) +{ + firstPoint(someLine3D.firstPoint()); + secondPoint(someLine3D.secondPoint()); + return *this; +} + +inline +BOOL Line3D::operator==(const Line3D &someLine3D)const +{ + return (firstPoint()==someLine3D.firstPoint()&& + secondPoint()==someLine3D.secondPoint()); +} + +inline +const Point3D &Line3D::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +void Line3D::firstPoint(const Point3D &firstPoint) +{ + mFirstPoint=firstPoint; +} + +inline +const Point3D &Line3D::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void Line3D::secondPoint(const Point3D &secondPoint) +{ + mSecondPoint=secondPoint; +} +#endif diff --git a/engine/POINT3D.HPP b/engine/POINT3D.HPP new file mode 100644 index 0000000..1e80ed0 --- /dev/null +++ b/engine/POINT3D.HPP @@ -0,0 +1,102 @@ +#ifndef _ENGINE_POINT3D_HPP_ +#define _ENGINE_POINT3D_HPP_ +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _COMMON_MATH_HPP_ +#include +#endif + +// do not make changes to this class that will alter its size + +class Point3D : public Point +{ +public: + Point3D(void); + Point3D(short x,short y,short z=0); + Point3D(const Point3D &somePoint3D); + ~Point3D(); + WORD operator==(const Point3D &somePoint3D)const; + const Point3D &operator=(const Point3D &somePoint3D); + const Point3D &operator-=(const Point3D &somePoint3D); + int operator*(const Point3D &somePoint3D)const; + int distance(const Point3D &somePoint3D)const; + short z(void)const; + void z(short newz); +private: + short mZ; +}; + +inline +Point3D::Point3D(void) +: mZ(0) +{ +} + +inline +Point3D::Point3D(short x,short y,short z) +: Point(x,y), mZ(z) +{ +} + +inline +Point3D::Point3D(const Point3D &somePoint3D) +: mZ(somePoint3D.z()) +{ + x(somePoint3D.x()); + y(somePoint3D.y()); +} + +inline +short Point3D::z(void)const +{ + return mZ; +} + +inline +void Point3D::z(short newz) +{ + mZ=newz; +} + +inline +Point3D::~Point3D() +{ +} + +inline +WORD Point3D::operator==(const Point3D &somePoint3D)const +{ + return (mZ==somePoint3D.mZ && (Point&)(*this)==(Point&)somePoint3D); +} + +inline +const Point3D &Point3D::operator=(const Point3D &somePoint3D) +{ + mZ=somePoint3D.mZ; + (Point&)(*this)=(Point&)somePoint3D; + return *this; +} + +inline +const Point3D &Point3D::operator-=(const Point3D &somePoint3D) +{ + mZ-=somePoint3D.mZ; + (Point&)(*this)-=(Point&)somePoint3D; + return *this; +} + +inline +int Point3D::operator*(const Point3D &somePoint3D)const +{ + return ((int)x()*(int)somePoint3D.x())+((int)y()*(int)somePoint3D.y())+((int)z()*(int)somePoint3D.z()); +} + +inline +int Point3D::distance(const Point3D &somePoint3D)const +{ + int xDiff(somePoint3D.x()-x()); + int yDiff(somePoint3D.y()-y()); + return (xDiff*xDiff)+(yDiff*yDiff); +} +#endif diff --git a/engine/POLYGON.BAK b/engine/POLYGON.BAK new file mode 100644 index 0000000..ffc0f10 --- /dev/null +++ b/engine/POLYGON.BAK @@ -0,0 +1,106 @@ +#ifndef _ENGINE_POLYGON3D_HPP_ +#define _ENGINE_POLYGON3D_HPP_ +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _ENGINE_LINE3D_HPP_ +#include +#endif +#ifndef _ENGINE_LINE2D_HPP_ +#include +#endif + +class Polygon3D : public Block, public Block +{ +public: + Polygon3D(void); + Polygon3D(const Polygon3D &somePolygon3D); + virtual ~Polygon3D(); + Polygon3D &operator=(const Polygon3D &somePolygon3D); + void insert(const Line3D *pLine3D); + void remove(void); + LONG size(void)const; +private: + void insert(const Polygon3D *pPolygon3D); + void insert(Block &someLine3DBlock); + void insert(Block &someLine2DBlock); + void insert(const Line2D *pLine2D); + Polygon3D &operator+=(const Block &someLine3DBlock); +}; + +inline +Polygon3D::Polygon3D(void) +{ +} + +inline +Polygon3D::Polygon3D(const Polygon3D &somePolygon3D) +: Block(somePolygon3D), Block(somePolygon3D) +{ +} + +inline +Polygon3D::~Polygon3D() +{ +} + +inline +Polygon3D &Polygon3D::operator=(const Polygon3D &somePolygon3D) +{ + (Block&)*this=(Block&)somePolygon3D; + (Block&)*this=(Block&)somePolygon3D; + return *this; +} + +inline +Polygon3D &Polygon3D::operator+=(const Block &someLine3DBlock) +{ // private implementation + (Block&)*this+=someLine3DBlock; + return *this; +} + +inline +void Polygon3D::insert(const Polygon3D *pPolygon3D) +{ + Block::insert((Block&)*pPolygon3D); + Block::insert((Block&)*pPolygon3D); +} + +inline +void Polygon3D::insert(const Line3D *pLine3D) +{ + Block::insert(pLine3D); + Block::insert(&Line2D()); +} + +inline +void Polygon3D::insert(Block &/*someLine3DBlock*/) +{ // private implementation +} + +inline +void Polygon3D::insert(Block &/*someLine2DBlock*/) +{ // private implementation +} + +inline +void Polygon3D::insert(const Line2D * /*pLine2D*/) +{ // private implementation +} + +inline +void Polygon3D::remove(void) +{ + Block::remove(); + Block::remove(); +} + +inline +LONG Polygon3D::size(void)const +{ + return Block::size(); +} +#endif diff --git a/engine/POLYGON.HPP b/engine/POLYGON.HPP new file mode 100644 index 0000000..b47875f --- /dev/null +++ b/engine/POLYGON.HPP @@ -0,0 +1,103 @@ +#ifndef _ENGINE_POLYGON3D_HPP_ +#define _ENGINE_POLYGON3D_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _ENGINE_LINE3D_HPP_ +#include +#endif +#ifndef _ENGINE_LINE2D_HPP_ +#include +#endif + +class Polygon3D : public Block, public Block +{ +public: + Polygon3D(void); + Polygon3D(const Polygon3D &somePolygon3D); + virtual ~Polygon3D(); + Polygon3D &operator=(const Polygon3D &somePolygon3D); + void insert(const Line3D *pLine3D); + void remove(void); + LONG size(void)const; +private: + void insert(const Polygon3D *pPolygon3D); + void insert(Block &someLine3DBlock); + void insert(Block &someLine2DBlock); + void insert(const Line2D *pLine2D); + Polygon3D &operator+=(const Block &someLine3DBlock); +}; + +inline +Polygon3D::Polygon3D(void) +{ +} + +inline +Polygon3D::Polygon3D(const Polygon3D &somePolygon3D) +: Block(somePolygon3D), Block(somePolygon3D) +{ +} + +inline +Polygon3D::~Polygon3D() +{ +} + +inline +Polygon3D &Polygon3D::operator=(const Polygon3D &somePolygon3D) +{ + (Block&)*this=(Block&)somePolygon3D; + (Block&)*this=(Block&)somePolygon3D; + return *this; +} + +inline +Polygon3D &Polygon3D::operator+=(const Block &someLine3DBlock) +{ // private implementation + (Block&)*this+=someLine3DBlock; + return *this; +} + +inline +void Polygon3D::insert(const Polygon3D *pPolygon3D) +{ + Block::insert((Block&)*pPolygon3D); + Block::insert((Block&)*pPolygon3D); +} + +inline +void Polygon3D::insert(const Line3D *pLine3D) +{ + Block::insert(pLine3D); + Block::insert(&Line2D()); +} + +inline +void Polygon3D::insert(Block &/*someLine3DBlock*/) +{ // private implementation +} + +inline +void Polygon3D::insert(Block &/*someLine2DBlock*/) +{ // private implementation +} + +inline +void Polygon3D::insert(const Line2D * /*pLine2D*/) +{ // private implementation +} + +inline +void Polygon3D::remove(void) +{ + Block::remove(); + Block::remove(); +} + +inline +LONG Polygon3D::size(void)const +{ + return Block::size(); +} +#endif diff --git a/engine/PUREEDGE.HPP b/engine/PUREEDGE.HPP new file mode 100644 index 0000000..ddcdd8f --- /dev/null +++ b/engine/PUREEDGE.HPP @@ -0,0 +1,72 @@ +#ifndef _ENGINE_PUREEDGE_HPP_ +#define _ENGINE_PUREEDGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif + +class PureEdge +{ +public: + PureEdge(void); + ~PureEdge(); + void numVertexes(WORD numVertexes); + void setSrcPoints(Point *lpSrcPoints); + void setDstPoints(Point *lpDstPoints); +private: + short mEdgeDirection; + WORD mRemainingScanLines; + WORD mCurrentEdgeEnd; + long mxSource; + long mySource; + long mxSourceStep; + long mySourceStep; + WORD mxDestLocation; + WORD mxStep; + short mxDirection; + short mxErrorTerm; + WORD mxAdjustUp; + WORD mxAdjustDown; + WORD mMaxVertex; + WORD mMinVertex; + WORD mStartVertex; + WORD mNumVertexes; + Point *mlpSrcList; + Point *mlpDstList; +}; + +inline +PureEdge::PureEdge(void) +: mEdgeDirection(1), mRemainingScanLines(0), mCurrentEdgeEnd(0), mxSource(0.00), + mySource(0.00), mxSourceStep(0.00), mySourceStep(0.00), mxDestLocation(0), + mxStep(0), mxDirection(0), mxErrorTerm(0), mxAdjustUp(0), mxAdjustDown(0), + mMaxVertex(0), mMinVertex(0), mStartVertex(0), mNumVertexes(0), mlpSrcList(0), + mlpDstList(0) +{ +} + +inline +PureEdge::~PureEdge() +{ +} + +inline +void PureEdge::numVertexes(WORD numVertexes) +{ + mNumVertexes=numVertexes; +} + +inline +void PureEdge::setSrcPoints(Point *lpSrcPoints) +{ + mlpSrcList=lpSrcPoints; +} + +inline +void PureEdge::setDstPoints(Point *lpDstPoints) +{ + mlpDstList=lpDstPoints; +} +#endif diff --git a/engine/PUREMAP.HPP b/engine/PUREMAP.HPP new file mode 100644 index 0000000..fd3e57c --- /dev/null +++ b/engine/PUREMAP.HPP @@ -0,0 +1,41 @@ +#ifndef _ENGINE_PUREMAP_HPP_ +#define _ENGINE_PUREMAP_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class PureEdge; + +class PureMap +{ +public: + PureMap(PureEdge *lpLeftEdge,PureEdge *lpRightEdge); + ~PureMap(); +private: + LONG mBitmapIndex; + LONG mxSource; + LONG mySource; + LONG mDestWidth; + LONG mxSourceStep; + LONG mySourceStep; + short mxDest; + short mxDestMax; + short myValue; + PureEdge *mlpLeftEdge; + PureEdge *mlpRightEdge; +}; + +inline +PureMap::PureMap(PureEdge *lpLeftEdge,PureEdge *lpRightEdge) +: mxSource(0), mySource(0), mDestWidth(0), mxSourceStep(0), mySourceStep(0), + mxDest(0), mxDestMax(0), myValue(0), mlpLeftEdge(lpLeftEdge), + mlpRightEdge(lpRightEdge) +{ +} + +inline +PureMap::~PureMap() +{ +} +#endif + diff --git a/engine/PUREVSYS.BAK b/engine/PUREVSYS.BAK new file mode 100644 index 0000000..9c6c1a6 --- /dev/null +++ b/engine/PUREVSYS.BAK @@ -0,0 +1,189 @@ +#ifndef _ENGINE_PUREVIEWSYSTEM_HPP_ +#define _ENGINE_PUREVIEWSYSTEM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MATH_HPP_ +#include +#endif +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif + +class PureViewSystem; +class Polygon3D; +class Vector3D; +class Vector2D; + +extern "C" +{ + void initView(PureViewSystem FAR *lpViewSystem); + void mapCoordinates(Point3D *lpPoint3D,Point *lpPoint,DWORD useCartesianSystem); + void mapVectorCoordinates(Point3D *lpPoint3D,Point *lpPoint,DWORD useCartesianSystem); + void mapPolygonCoordinates(Polygon3D *pPolygon3D); +} + +// do not make changes to this class that will alter its size + +class PureViewSystem +{ +public: + enum MapMode{ScreenSystem=0,CartesianSystem=1}; + enum {Precision=16384}; + PureViewSystem(void); + PureViewSystem(const PureViewSystem &somePureViewSystem); + PureViewSystem(float cameraTwistDegrees,int viewPlaneDistance,Point3D cameraPoint,Point3D focusPoint); + ~PureViewSystem(); + PureViewSystem &operator=(const PureViewSystem &somePureViewSystem); + WORD operator==(const PureViewSystem &somePureViewSystem)const; + float cameraTwistDegrees(void)const; // rotation about axis established by camera and focus points + void cameraTwistDegrees(float cameraTwistDegrees); + DWORD viewPlaneDistance(void); // distance from view point to view plane + void viewPlaneDistance(DWORD viewPlaneDistance); + Point3D cameraPoint(void)const; // view reference point (origin of coordinate system) + void cameraPoint(Point3D point3D); + Point3D focusPoint(void)const; // direction is which camera is pointing + void focusPoint(Point3D point3D); +protected: + void translatePoint(const Vector3D &vector3D,Vector2D &vector2D,MapMode mapMode=CartesianSystem); + void translatePoint(Polygon3D &polygon,MapMode mapMode=CartesianSystem); + void translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,MapMode mapMode=CartesianSystem); + void mapCoordinates(Point3D &firstPoint3D,Point &firstPoint); + void viewPortWidth(WORD viewPortWidth); + void viewPortHeight(WORD viewPortHeight); +private: + enum {DefaultCameraTwistDegrees=120}; + enum {DefaultViewPlaneDistance=50}; + enum {DefaultFocusx=0,DefaultFocusy=0,DefaultFocusz=1}; + enum {DefaultCamerax=75,DefaultCameray=75,DefaultCameraz=75}; + LONG mCameraTwistRadians; + LONG mCosCameraTwistRadians; + LONG mSinCameraTwistRadians; + LONG mCosCameraTwistRadiansSinCameraTwistRadians; + DWORD mViewPlaneDistance; + WORD mViewPortWidth; + WORD mViewPortHeight; + Point3D mCameraPoint; + Point3D mFocusPoint; +}; + +inline +PureViewSystem::PureViewSystem(void) +: mViewPlaneDistance(DefaultViewPlaneDistance), mViewPortWidth(0), mViewPortHeight(0), + mCameraPoint(Point3D(DefaultCamerax,DefaultCameray,DefaultCameraz)), + mFocusPoint(Point3D(DefaultFocusx,DefaultFocusy,DefaultFocusz)) +{ + cameraTwistDegrees(DefaultCameraTwistDegrees); +} + +inline +PureViewSystem::PureViewSystem(float cameraTwistDegrees,int viewPlaneDistance,Point3D cameraPoint,Point3D focusPoint) +{ + PureViewSystem::cameraTwistDegrees(cameraTwistDegrees); + PureViewSystem::viewPlaneDistance(viewPlaneDistance); + PureViewSystem::cameraPoint(cameraPoint); + PureViewSystem::focusPoint(focusPoint); +} + +inline +PureViewSystem::~PureViewSystem() +{ +} + +inline +PureViewSystem::PureViewSystem(const PureViewSystem &somePureViewSystem) +{ + *this=somePureViewSystem; +} + +inline +PureViewSystem &PureViewSystem::operator=(const PureViewSystem &somePureViewSystem) +{ + mCameraTwistRadians=somePureViewSystem.mCameraTwistRadians; + mCosCameraTwistRadians=somePureViewSystem.mCosCameraTwistRadians; + mSinCameraTwistRadians=somePureViewSystem.mSinCameraTwistRadians; + mCosCameraTwistRadiansSinCameraTwistRadians=somePureViewSystem.mCosCameraTwistRadiansSinCameraTwistRadians; + mViewPlaneDistance=somePureViewSystem.mViewPlaneDistance; + mViewPortWidth=somePureViewSystem.mViewPortWidth; + mViewPortHeight=somePureViewSystem.mViewPortHeight; + mCameraPoint=somePureViewSystem.mCameraPoint; + mFocusPoint=somePureViewSystem.mFocusPoint; + return *this; +} + +inline +WORD PureViewSystem::operator==(const PureViewSystem &somePureViewSystem)const +{ + return (mCameraTwistRadians==somePureViewSystem.mCameraTwistRadians&& + mViewPlaneDistance==somePureViewSystem.mViewPlaneDistance&& + mCameraPoint==somePureViewSystem.mCameraPoint&& + mFocusPoint==somePureViewSystem.mFocusPoint); +} + +inline +float PureViewSystem::cameraTwistDegrees(void)const +{ + float cameraTwistDegrees((float)mCameraTwistRadians/(float)Precision); + return Math::degrees(cameraTwistDegrees); +} + +inline +DWORD PureViewSystem::viewPlaneDistance(void) +{ + return mViewPlaneDistance; +} + +inline +void PureViewSystem::viewPlaneDistance(DWORD viewPlaneDistance) +{ + mViewPlaneDistance=viewPlaneDistance; +} + +inline +Point3D PureViewSystem::cameraPoint(void)const +{ + return mCameraPoint; +} + +inline +void PureViewSystem::cameraPoint(Point3D point3D) +{ + mCameraPoint=point3D; +} + +inline +Point3D PureViewSystem::focusPoint(void)const +{ + return mFocusPoint; +} + +inline +void PureViewSystem::focusPoint(Point3D point3D) +{ + mFocusPoint=point3D; +} + +inline +void PureViewSystem::viewPortWidth(WORD viewPortWidth) +{ + mViewPortWidth=viewPortWidth; +} + +inline +void PureViewSystem::viewPortHeight(WORD viewPortHeight) +{ + mViewPortHeight=viewPortHeight; +} + +inline +void PureViewSystem::mapCoordinates(Point3D &firstPoint3D,Point &firstPoint) +{ + Point3D point3D(firstPoint3D); + Point point(firstPoint); + + initView((PureViewSystem*)this); + ::mapCoordinates(&point3D,&point,TRUE); + firstPoint3D=point3D; + firstPoint=point; +} +#endif diff --git a/engine/PUREVSYS.CPP b/engine/PUREVSYS.CPP new file mode 100644 index 0000000..fd104c9 --- /dev/null +++ b/engine/PUREVSYS.CPP @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +void PureViewSystem::translatePoint(const Vector3D &vector3D,Vector2D &vector2D,MapMode mapMode) +{ + ::initView((PureViewSystem*)this); + ::mapVectorCoordinates(&((Vector3D&)vector3D)[0],&vector2D[0],(DWORD)mapMode); +} + +void PureViewSystem::translatePoint(Polygon3D &polygon,MapMode /*mapMode*/) +{ + ::initView((PureViewSystem*)this); + ::mapPolygonCoordinates(&polygon); +} + +void PureViewSystem::translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,MapMode mapMode) +{ + Vector3D worldPoints; + Vector2D screenPoints; + + worldPoints[0]=initialPoint; + worldPoints[1].x(initialPoint.x()+dimensionPoint.x()); + worldPoints[1].y(initialPoint.y()); + worldPoints[1].z(initialPoint.z()); + worldPoints[2].x(initialPoint.x()+dimensionPoint.x()); + worldPoints[2].y(initialPoint.y()-dimensionPoint.y()); + worldPoints[2].z(initialPoint.z()); + worldPoints[3].x(initialPoint.x()); + worldPoints[3].y(initialPoint.y()-dimensionPoint.y()); + worldPoints[3].z(initialPoint.z()); + translatePoint(worldPoints,screenPoints,mapMode); + dimensionPoint.x((worldPoints[1].x()-worldPoints[0].x())+1); + dimensionPoint.y((worldPoints[2].y()-worldPoints[1].y())+1); + screenPoint.x(screenPoints[0].x()); + screenPoint.y(screenPoints[0].y()); +} + +void PureViewSystem::cameraTwistDegrees(float cameraTwistDegrees) +{ + float cameraTwistRadians(Math::radians(cameraTwistDegrees)); + float sinCameraTwistRadians(Math::sin(cameraTwistRadians)); + float cosCameraTwistRadians(Math::cos(cameraTwistRadians)); + float cosCameraTwistRadiansSinCameraTwistRadians(cosCameraTwistRadians*sinCameraTwistRadians); + + mCameraTwistRadians=cameraTwistRadians*(LONG)Precision; + mCosCameraTwistRadians=cosCameraTwistRadians*(LONG)Precision; + mSinCameraTwistRadians=sinCameraTwistRadians*(LONG)Precision; + mCosCameraTwistRadiansSinCameraTwistRadians=cosCameraTwistRadiansSinCameraTwistRadians*(LONG)Precision; +} + diff --git a/engine/PUREVSYS.HPP b/engine/PUREVSYS.HPP new file mode 100644 index 0000000..eab4a5a --- /dev/null +++ b/engine/PUREVSYS.HPP @@ -0,0 +1,193 @@ +#ifndef _ENGINE_PUREVIEWSYSTEM_HPP_ +#define _ENGINE_PUREVIEWSYSTEM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MATH_HPP_ +#include +#endif +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif + + +#include +#include + +class PureViewSystem; +class Polygon3D; +class Vector3D; +class Vector2D; + +extern "C" +{ + void initView(PureViewSystem FAR *lpViewSystem); + void mapCoordinates(Point3D *lpPoint3D,Point *lpPoint,DWORD useCartesianSystem); + void mapVectorCoordinates(Point3D *lpPoint3D,Point *lpPoint,DWORD useCartesianSystem); + void mapPolygonCoordinates(Polygon3D *pPolygon3D); +} + +// do not make changes to this class that will alter its size + +class PureViewSystem +{ +public: + enum MapMode{ScreenSystem=0,CartesianSystem=1}; + PureViewSystem(void); + PureViewSystem(const PureViewSystem &somePureViewSystem); + PureViewSystem(float cameraTwistDegrees,int viewPlaneDistance,Point3D cameraPoint,Point3D focusPoint); + ~PureViewSystem(); + PureViewSystem &operator=(const PureViewSystem &somePureViewSystem); + WORD operator==(const PureViewSystem &somePureViewSystem)const; + float cameraTwistDegrees(void)const; // rotation about axis established by camera and focus points + void cameraTwistDegrees(float cameraTwistDegrees); + DWORD viewPlaneDistance(void); // distancle from view point to view plane + void viewPlaneDistance(DWORD viewPlaneDistance); + Point3D cameraPoint(void)const; // view reference point (origin of coordinate system) + void cameraPoint(Point3D point3D); + Point3D focusPoint(void)const; // direction is which camera is pointing + void focusPoint(Point3D point3D); +protected: + void translatePoint(const Vector3D &vector3D,Vector2D &vector2D,MapMode mapMode=CartesianSystem); + void translatePoint(Polygon3D &polygon,MapMode mapMode=CartesianSystem); + void translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,MapMode mapMode=CartesianSystem); + void mapCoordinates(Point3D &firstPoint3D,Point &firstPoint,bool useCartesian=true); + void viewPortWidth(WORD viewPortWidth); + void viewPortHeight(WORD viewPortHeight); +private: + enum {Precision=16384}; + enum {DefaultCameraTwistDegrees=120}; + enum {DefaultViewPlaneDistance=50}; + enum {DefaultFocusx=0,DefaultFocusy=0,DefaultFocusz=-1}; + enum {DefaultCamerax=75,DefaultCameray=75,DefaultCameraz=75}; + LONG mCameraTwistRadians; + LONG mCosCameraTwistRadians; + LONG mSinCameraTwistRadians; + LONG mCosCameraTwistRadiansSinCameraTwistRadians; + DWORD mViewPlaneDistance; + WORD mViewPortWidth; + WORD mViewPortHeight; + Point3D mCameraPoint; + Point3D mFocusPoint; +}; + +inline +PureViewSystem::PureViewSystem(void) +: mViewPlaneDistance(DefaultViewPlaneDistance), mViewPortWidth(0), mViewPortHeight(0), + mCameraPoint(Point3D(DefaultCamerax,DefaultCameray,DefaultCameraz)), + mFocusPoint(Point3D(DefaultFocusx,DefaultFocusy,DefaultFocusz)) +{ + cameraTwistDegrees(DefaultCameraTwistDegrees); +} + +inline +PureViewSystem::PureViewSystem(float cameraTwistDegrees,int viewPlaneDistance,Point3D cameraPoint,Point3D focusPoint) +{ + PureViewSystem::cameraTwistDegrees(cameraTwistDegrees); + PureViewSystem::viewPlaneDistance(viewPlaneDistance); + PureViewSystem::cameraPoint(cameraPoint); + PureViewSystem::focusPoint(focusPoint); +} + +inline +PureViewSystem::~PureViewSystem() +{ +} + +inline +PureViewSystem::PureViewSystem(const PureViewSystem &somePureViewSystem) +{ + *this=somePureViewSystem; +} + +inline +PureViewSystem &PureViewSystem::operator=(const PureViewSystem &somePureViewSystem) +{ + mCameraTwistRadians=somePureViewSystem.mCameraTwistRadians; + mCosCameraTwistRadians=somePureViewSystem.mCosCameraTwistRadians; + mSinCameraTwistRadians=somePureViewSystem.mSinCameraTwistRadians; + mCosCameraTwistRadiansSinCameraTwistRadians=somePureViewSystem.mCosCameraTwistRadiansSinCameraTwistRadians; + mViewPlaneDistance=somePureViewSystem.mViewPlaneDistance; + mViewPortWidth=somePureViewSystem.mViewPortWidth; + mViewPortHeight=somePureViewSystem.mViewPortHeight; + mCameraPoint=somePureViewSystem.mCameraPoint; + mFocusPoint=somePureViewSystem.mFocusPoint; + return *this; +} + +inline +WORD PureViewSystem::operator==(const PureViewSystem &somePureViewSystem)const +{ + return (mCameraTwistRadians==somePureViewSystem.mCameraTwistRadians&& + mViewPlaneDistance==somePureViewSystem.mViewPlaneDistance&& + mCameraPoint==somePureViewSystem.mCameraPoint&& + mFocusPoint==somePureViewSystem.mFocusPoint); +} + +inline +float PureViewSystem::cameraTwistDegrees(void)const +{ + float cameraTwistDegrees((float)mCameraTwistRadians/(float)Precision); + return Math::degrees(cameraTwistDegrees); +} + +inline +DWORD PureViewSystem::viewPlaneDistance(void) +{ + return mViewPlaneDistance; +} + +inline +void PureViewSystem::viewPlaneDistance(DWORD viewPlaneDistance) +{ + mViewPlaneDistance=viewPlaneDistance; +} + +inline +Point3D PureViewSystem::cameraPoint(void)const +{ + return mCameraPoint; +} + +inline +void PureViewSystem::cameraPoint(Point3D point3D) +{ + mCameraPoint=point3D; +} + +inline +Point3D PureViewSystem::focusPoint(void)const +{ + return mFocusPoint; +} + +inline +void PureViewSystem::focusPoint(Point3D point3D) +{ + mFocusPoint=point3D; +} + +inline +void PureViewSystem::viewPortWidth(WORD viewPortWidth) +{ + mViewPortWidth=viewPortWidth; +} + +inline +void PureViewSystem::viewPortHeight(WORD viewPortHeight) +{ + mViewPortHeight=viewPortHeight; +} + +inline +void PureViewSystem::mapCoordinates(Point3D &firstPoint3D,Point &firstPoint,bool useCartesian) +{ + Point3D point3D(firstPoint3D); + Point point(firstPoint); + + initView((PureViewSystem*)this); + ::mapCoordinates(&point3D,&point,useCartesian?CartesianSystem:ScreenSystem); + firstPoint3D=point3D; + firstPoint=point; +} +#endif diff --git a/engine/RECT3D.HPP b/engine/RECT3D.HPP new file mode 100644 index 0000000..9c88e00 --- /dev/null +++ b/engine/RECT3D.HPP @@ -0,0 +1,90 @@ +#ifndef _ENGINE_RECT3D_HPP_ +#define _ENGINE_RECT3D_HPP_ +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif + +class Rect3D +{ +public: + Rect3D(void); + Rect3D(const Rect3D &someRect3D); + Rect3D(const Vector3D &firstPlane,int depth); + virtual ~Rect3D(); + Rect3D &operator=(const Rect3D &someRect3D); + WORD operator==(const Rect3D &someRect3D)const; + const Vector3D &firstPlane(void)const; + void firstPlane(const Vector3D &firstPlane); + const Vector3D &nextPlane(void)const; + void nextPlane(const Vector3D &nextPlane); +private: + Vector3D mFirstPlane; + Vector3D mNextPlane; +}; + +inline +Rect3D::Rect3D(void) +{ +} + +inline +Rect3D::Rect3D(const Rect3D &someRect3D) +{ + *this=someRect3D; +} + +inline +Rect3D::Rect3D(const Vector3D &firstPlane,int depth) +: mFirstPlane(firstPlane) +{ + mNextPlane=mFirstPlane; + mNextPlane[0].z(mFirstPlane[0].z()+depth); + mNextPlane[1].z(mFirstPlane[1].z()+depth); + mNextPlane[2].z(mFirstPlane[2].z()+depth); + mNextPlane[3].z(mFirstPlane[3].z()+depth); +} + +inline +Rect3D::~Rect3D() +{ +} + +inline +Rect3D &Rect3D::operator=(const Rect3D &someRect3D) +{ + firstPlane(someRect3D.firstPlane()); + nextPlane(someRect3D.nextPlane()); + return *this; +} + +inline +WORD Rect3D::operator==(const Rect3D &someRect3D)const +{ + return (firstPlane()==someRect3D.firstPlane()&& + nextPlane()==someRect3D.nextPlane()); +} + +inline +const Vector3D &Rect3D::firstPlane(void)const +{ + return mFirstPlane; +} + +inline +void Rect3D::firstPlane(const Vector3D &firstPlane) +{ + mFirstPlane=firstPlane; +} + +inline +const Vector3D &Rect3D::nextPlane(void)const +{ + return mNextPlane; +} + +inline +void Rect3D::nextPlane(const Vector3D &nextPlane) +{ + mNextPlane=nextPlane; +} +#endif \ No newline at end of file diff --git a/engine/SAMPLE.BAK b/engine/SAMPLE.BAK new file mode 100644 index 0000000..2e07cd3 --- /dev/null +++ b/engine/SAMPLE.BAK @@ -0,0 +1,128 @@ +;************************************************************************************* +; MODULE: UTIL.ASM DATE: MAY 15, 1998 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT TARGET +; FUNCTION : RESAMPLE FUNCTIONS +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.CODE +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\COMMON\MATH.INC +_resampleClip proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClamp) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov eax,[ebp+18h] ; move outClip to eax register + sub ebx,eax ; subtract (outLen-1L)-outClip, this is clipping region + mov edi,[ebp+0Ch] ; move lpOut to destination index register + add edi,ecx ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + cmp ecx,ebx ; compare ecx to clipping region + je @@exit ; if it's equal then we're done + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov dl,byte ptr[esi+eax] ; move source byte to dl register + mov byte ptr[edi],dl ; move source byte to destination address + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + dec edi ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClip endp +if 0 +_resampleClip proc near ; void resampleClip(char *lpIn,char *lpOut,int inLen,int outLen,int outClip) +rc@@sampleFactor EQU dword ptr[ebp - size dword] +rc@@runningFactor EQU dword ptr[ebp - ( size dword + size dword)] +rc@@localLength EQU size dword + size dword + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,rc@@localLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov rc@@sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov eax,[ebp+18h] ; move outClip to eax register + sub ebx,eax ; subtract (outLen-1L)-outClip, this is clipping region + mov edi,[ebp+0Ch] ; move lpOut to destination index register + add edi,ecx ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,rc@@sampleFactor ; multiply (outLen-1)*sampleFactor + mov rc@@runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + cmp ecx,ebx ; compare ecx to clipping region + je @@exit ; if it's equal then we're done + mov eax,rc@@runningFactor ; move last running factor into eax + round ; round it off + mov dl,byte ptr[esi+eax] ; move source byte to dl register + mov byte ptr[edi],dl ; move source byte to destination address + mov eax,rc@@sampleFactor ; move sampleFactor into eax register + sub rc@@runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + dec edi ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,rc@@localLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClip endp +endif +public _resampleClip +END diff --git a/engine/SCRAPS.BAK b/engine/SCRAPS.BAK new file mode 100644 index 0000000..cc5cb2c --- /dev/null +++ b/engine/SCRAPS.BAK @@ -0,0 +1,480 @@ +void PureViewSystem::mapCoordinates(Point3D &firstPoint3D,Point &firstPoint) +{ + Point3D point3D(firstPoint3D); + Point point(firstPoint); + + initView((PureViewSystem*)this); + ::mapCoordinates(&point3D,&point,TRUE); + firstPoint3D=point3D; + firstPoint=point; +} + + + + + +Cache STRUC + Cache@@mColRow DD ? + Cache@@mCacheData DB ? + Cache@@mCacheStatus DB ? +Cache ENDS + +GetCacheData STRUC + GetCacheData@@mColRow DD ? + GetCacheData@@mCacheData DB ? +GetCacheData ENDS +GetCache STRUC + GetCache@@mCacheStatus DB ? + GetCache@@mCacheHits DD ? + GetCache@@mCacheData GetCacheData 05h DUP(?) +GetCache ENDS + +if 0 + roundEBX [esi].PureMap@@mySource ; convert and round PureMap@@mySource -> ebx (row) + roundEAX [esi].PureMap@@mxSource ; convert and round PureMap@@mxSource -> eax (col) + +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + mov ebx,eax ; move colRow to ebx register + multiply bx,bmData@@mSrcWidth ; multiply (row*width)-> eax + movzx edx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + shr ebx,10h ; ebx gets column + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl +ENDM +endif + + + +bmData@@mMulCache MathCache ? +bmData@@mDivCache MathCache ? + +;bmData@@mMulCacheOne DD 00h +;bmData@@mMulCacheTwo DD 00h +;bmData@@mMulCacheVal DD 00h + + +if 0 +multiply MACRO varOne,varTwo + LOCAL @@bypassCache,@@return + movzx eax,varOne ; move varOne into eax register + movzx edx,varTwo ; move varTwo into ebx register + cmp eax,bmData@@mMulCache.MathCache@@mCacheOne ; check first cache item + jne @@bypassCache ; if no hit then perform multiply + cmp edx,bmData@@mMulCache.MathCache@@mCacheTwo ; check second cache item + jne @@bypassCache ; if no hit then perform multiply + mov eax,bmData@@mMulCache.MathCache@@mCacheVal ; cache hit returns associated value + jmp @@return ; we're all through here +@@bypassCache: ; bypass cache sync address + mov bmData@@mMulCache.MathCache@@mCacheOne,eax ; move first param to cache item one + mov bmData@@mMulCache.MathCache@@mCacheTwo,edx ; move second param to cache item two + imul eax,edx ; perform multiply, result to eax + mov bmData@@mMulCache.MathCache@@mCacheVal,eax ; store result to cache +@@return: ; return sync address +ENDM +endif + +if 0 +divide MACRO varOne,varTwo + LOCAL @@bypassCache,@@return + mov eax,varOne + mov edx,varTwo + cmp eax,bmData@@mDivCache.MathCache@@mCacheOne ; check first cache item + jne @@bypassCache ; if no hit then perform multiply + cmp edx,bmData@@mDivCache.MathCache@@mCacheTwo ; check second cache item + jne @@bypassCache ; if no hit then perform multiply + mov eax,bmData@@mDivCache.MathCache@@mCacheVal ; cache hit returns associated value + jmp @@return ; we're all through here +@@bypassCache: + mov bmData@@mDivCache.MathCache@@mCacheOne,eax ; + mov bmData@@mDivCache.MathCache@@mCacheTwo,edx ; + cdq ; convert doubleword in eax to quadword at edx:eax + idiv varTwo ; divide eax/varTwo result to eax, remainder to edx + mov bmData@@mDivCache.MathCache@@mCacheVal,eax ; store result to cache +@@return: +ENDM +endif + + + mov bmData@@mMulCache.MathCache@@mCacheOne,00000000h + mov bmData@@mMulCache.MathCache@@mCacheTwo,00000000h + mov bmData@@mMulCache.MathCache@@mCacheVal,00000000h + + mov bmData@@mDivCache.MathCache@@mCacheOne,00000000h + mov bmData@@mDivCache.MathCache@@mCacheTwo,00000000h + mov bmData@@mDivCache.MathCache@@mCacheVal,00000000h + + + + void WINGBlt::line(const Point &firstPoint,const Point &secondPoint,BYTE byteValue) +{ + LONG xRunning((LONG)firstPoint.x()<<0x10); + LONG yRunning((LONG)firstPoint.y()<<0x10); + LONG xDelta; + LONG yDelta; + short xDir(1); + short yDir(1); + short steps; + + if(secondPoint.x()>0x10,xRunning>>0x10,byteValue); + xRunning-=xDelta; + yRunning-=yDelta; + } + } + else if(-1==xDir&&1==yDir) + { + for(short stepIndex=0;stepIndex>0x10,xRunning>>0x10,byteValue); + xRunning-=xDelta; + yRunning+=yDelta; + } + } + else if(1==xDir&&-1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,byteValue); + xRunning+=xDelta; + yRunning-=yDelta; + } + } + else if(1==xDir&&1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,byteValue); + xRunning+=xDelta; + yRunning+=yDelta; + } + } +} + +#if 0 +Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,WINGBlt &displayBitmap,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + Vector3D temp3DPoint(mDstPoints3D); + Vector2D temp2DPoint(mDstPoints2D); + displayDevice.translatePoint(temp3DPoint,temp2DPoint); + mDstPoints2D=temp2DPoint; + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),displayBitmap.getDataPtr()); +} +#endif + + +#if 0 +Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,Bitmap &displayBitmap,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + Vector3D temp3DPoint(mDstPoints3D); + Vector2D temp2DPoint(mDstPoints2D); + displayDevice.translatePoint(temp3DPoint,temp2DPoint); + mDstPoints2D=temp2DPoint; + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),displayBitmap.getDataPtr()); +} +#endif + + + +#ifndef _ENGINE_SYSTEMOBJECT_HPP_ +#define _ENGINE_SYSTEMOBJECT_HPP_ +#ifndef _COMMON_VECTOR3D_HPP_ +#include +#endif +#ifndef _COMMON_VECTOR2D_HPP_ +#include +#endif + +class SystemObject : public Vector3D + + +#if 0 +class SystemObject +{ +public: + enum Type{TypeSprite,TypeTexture,TypeUnknown}; + enum Disposition{Active,Destroyed,Idle}; + SystemObject(void); + SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition,Type typeInfo); + virtual ~SystemObject(); + void worldPosition(Vector3D worldPosition); + void screenPosition(Vector2D screenPosition); + void type(Type type); + void disposition(Disposition disposition); + Vector3D worldPosition(void)const; + Vector2D screenPosition(void)const; + Vector3D prevWorldPosition(void)const; + Vector2D prevScreenPosition(void)const; + Type type(void)const; + Disposition disposition(void)const; +private: + Type mType; + Disposition mDisposition; + Vector3D mCurrentWorldPosition; + Vector3D mLastWorldPosition; + Vector2D mCurrentScreenPosition; + Vector2D mLastScreenPosition; +}; + +inline +SystemObject::SystemObject(void) +: mType(TypeUnknown), mDisposition(Idle) +{ +} + +inline +SystemObject::SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition,Type type) +: mCurrentWorldPosition(currentWorldPosition), mLastWorldPosition(currentWorldPosition), + mCurrentScreenPosition(currentScreenPosition), mLastScreenPosition(currentScreenPosition), mType(type) +{ + +} + +inline +SystemObject::~SystemObject() +{ +} + +inline +void SystemObject::worldPosition(Vector3D worldPosition) +{ + mLastWorldPosition=mCurrentWorldPosition; + mCurrentWorldPosition=worldPosition; +} + +inline +void SystemObject::screenPosition(Vector2D screenPosition) +{ + mLastScreenPosition=mCurrentScreenPosition; + mCurrentScreenPosition=screenPosition; +} + +inline +void SystemObject::type(SystemObject::Type type) +{ + mType=type; +} + +inline +void SystemObject::disposition(SystemObject::Disposition disposition) +{ + mDisposition=disposition; +} + +inline +Vector3D SystemObject::worldPosition(void)const +{ + return mCurrentWorldPosition; +} + +inline +Vector2D SystemObject::screenPosition(void)const +{ + return mCurrentScreenPosition; +} + +inline +Vector3D SystemObject::prevWorldPosition(void)const +{ + return mLastWorldPosition; +} + +inline +Vector2D SystemObject::prevScreenPosition(void)const +{ + return mLastScreenPosition; +} + +inline +SystemObject::Type SystemObject::type(void)const +{ + return mType; +} + +inline +SystemObject::Disposition SystemObject::disposition(void)const +{ + return mDisposition; +} +#endif +#endif + + + + + + Point3D first3DPoint(((Vector3D&)(someRect3D.firstPlane()))[0]); + Point3D next3DPoint(((Vector3D&)(someRect3D.firstPlane()))[2]); + Point first2DPoint; + Point next2DPoint; + + mapCoordinates(first3DPoint,first2DPoint); + mapCoordinates(next3DPoint,next2DPoint); + floodFill(first2DPoint.midPoint(next2DPoint),RGBColor(0,0,255),RGBColor(255,0,0)); + + + + +void PureViewSystem::translatePoint(const Vector3D &vector3D,Vector2D &vector2D,MapMode mapMode) +{ + ::initView((PureViewSystem*)this); + ::mapVectorCoordinates(&((Vector3D&)vector3D)[0],&vector2D[0],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[0],&vector2D[0],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[1],&vector2D[1],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[2],&vector2D[2],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[3],&vector2D[3],(DWORD)mapMode); +} + + +;_clearWINGBlt proc near ; void clearWINGBlt(DWORD lpWINGData,DWORD imageExtent) +; push edi ; save destination index register +; xor eax,eax ; clear eax register +; mov edi,[esp+08h] ; move lpWINGData to esi +; mov ecx,[esp+0Ch] ; move bitmap extent to ecx +; shr ecx,02h ; divide bitmap extent by sizeof(long) +; rep stosd ; clear out the bitmap in chunks of sizeof(long) +; pop edi ; restore destination index register +; retn ; return near to caller +;_clearWINGBlt endp + +_proto proc near ; void proto(Polygon3D *pPolygon3D) where Polygon3D=Block + push ebp ; save previous stack frame + mov ebp,esp ; create new stack frame + push edi ; save destination index register + push esi ; save source index register + mov edi,[ebp+08h] ; move pPolygon3D to destination index register + mov ecx,ASMPolygon3D[edi].Polygon3D@@mBlockLine3D.BlockLine3D@@mSize ; how many items in block + mov esi,ASMPolygon3D[edi].Polygon3D@@mBlockLine3D.BlockLine3D@@mContainer ; get to first item +@@protiter: ; iteration sync address + cmp esi,0000h ; is this a valid item + je @@endproc ; if not then we're done + mov edi,Line3DNodePtr[esi].Line3DNodePtr@@mItem ; go fetch item for this node + mov esi,Line3DNodePtr[esi].Line3DNodePtr@@mLine3DNodePtrNext ; go fetch next node + jmp @@protiter ; iterate +@@endproc: ; end proc sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_proto endp + + + Polygon3D polygon3D; + + for(int itemIndex=0;itemIndex<20000;itemIndex++)polygon3D.insert(&Line3D(Point3D(1,2,3),Point3D(4,5,6))); + for(int i=0;i<500;i++)mapPolygonCoordinates(&polygon3D); + return FALSE; +#if 0 + + + +if 0 +_resampleClip proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClamp) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov eax,[ebp+18h] ; move outClip to eax register + sub ebx,eax ; subtract (outLen-1L)-outClip, this is clipping region + mov edi,[ebp+0Ch] ; move lpOut to destination index register + add edi,ecx ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + cmp ecx,ebx ; compare ecx to clipping region + je @@exit ; if it's equal then we're done + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov dl,byte ptr[esi+eax] ; move source byte to dl register + mov byte ptr[edi],dl ; move source byte to destination address + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + dec edi ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClip endp +endif diff --git a/engine/SCRAPS.TXT b/engine/SCRAPS.TXT new file mode 100644 index 0000000..5c935ef --- /dev/null +++ b/engine/SCRAPS.TXT @@ -0,0 +1,552 @@ +void PureViewSystem::mapCoordinates(Point3D &firstPoint3D,Point &firstPoint) +{ + Point3D point3D(firstPoint3D); + Point point(firstPoint); + + initView((PureViewSystem*)this); + ::mapCoordinates(&point3D,&point,TRUE); + firstPoint3D=point3D; + firstPoint=point; +} + + + + + +Cache STRUC + Cache@@mColRow DD ? + Cache@@mCacheData DB ? + Cache@@mCacheStatus DB ? +Cache ENDS + +GetCacheData STRUC + GetCacheData@@mColRow DD ? + GetCacheData@@mCacheData DB ? +GetCacheData ENDS +GetCache STRUC + GetCache@@mCacheStatus DB ? + GetCache@@mCacheHits DD ? + GetCache@@mCacheData GetCacheData 05h DUP(?) +GetCache ENDS + +if 0 + roundEBX [esi].PureMap@@mySource ; convert and round PureMap@@mySource -> ebx (row) + roundEAX [esi].PureMap@@mxSource ; convert and round PureMap@@mxSource -> eax (col) + +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + mov ebx,eax ; move colRow to ebx register + multiply bx,bmData@@mSrcWidth ; multiply (row*width)-> eax + movzx edx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + shr ebx,10h ; ebx gets column + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl +ENDM +endif + + + +bmData@@mMulCache MathCache ? +bmData@@mDivCache MathCache ? + +;bmData@@mMulCacheOne DD 00h +;bmData@@mMulCacheTwo DD 00h +;bmData@@mMulCacheVal DD 00h + + +if 0 +multiply MACRO varOne,varTwo + LOCAL @@bypassCache,@@return + movzx eax,varOne ; move varOne into eax register + movzx edx,varTwo ; move varTwo into ebx register + cmp eax,bmData@@mMulCache.MathCache@@mCacheOne ; check first cache item + jne @@bypassCache ; if no hit then perform multiply + cmp edx,bmData@@mMulCache.MathCache@@mCacheTwo ; check second cache item + jne @@bypassCache ; if no hit then perform multiply + mov eax,bmData@@mMulCache.MathCache@@mCacheVal ; cache hit returns associated value + jmp @@return ; we're all through here +@@bypassCache: ; bypass cache sync address + mov bmData@@mMulCache.MathCache@@mCacheOne,eax ; move first param to cache item one + mov bmData@@mMulCache.MathCache@@mCacheTwo,edx ; move second param to cache item two + imul eax,edx ; perform multiply, result to eax + mov bmData@@mMulCache.MathCache@@mCacheVal,eax ; store result to cache +@@return: ; return sync address +ENDM +endif + +if 0 +divide MACRO varOne,varTwo + LOCAL @@bypassCache,@@return + mov eax,varOne + mov edx,varTwo + cmp eax,bmData@@mDivCache.MathCache@@mCacheOne ; check first cache item + jne @@bypassCache ; if no hit then perform multiply + cmp edx,bmData@@mDivCache.MathCache@@mCacheTwo ; check second cache item + jne @@bypassCache ; if no hit then perform multiply + mov eax,bmData@@mDivCache.MathCache@@mCacheVal ; cache hit returns associated value + jmp @@return ; we're all through here +@@bypassCache: + mov bmData@@mDivCache.MathCache@@mCacheOne,eax ; + mov bmData@@mDivCache.MathCache@@mCacheTwo,edx ; + cdq ; convert doubleword in eax to quadword at edx:eax + idiv varTwo ; divide eax/varTwo result to eax, remainder to edx + mov bmData@@mDivCache.MathCache@@mCacheVal,eax ; store result to cache +@@return: +ENDM +endif + + + mov bmData@@mMulCache.MathCache@@mCacheOne,00000000h + mov bmData@@mMulCache.MathCache@@mCacheTwo,00000000h + mov bmData@@mMulCache.MathCache@@mCacheVal,00000000h + + mov bmData@@mDivCache.MathCache@@mCacheOne,00000000h + mov bmData@@mDivCache.MathCache@@mCacheTwo,00000000h + mov bmData@@mDivCache.MathCache@@mCacheVal,00000000h + + + + void WINGBlt::line(const Point &firstPoint,const Point &secondPoint,BYTE byteValue) +{ + LONG xRunning((LONG)firstPoint.x()<<0x10); + LONG yRunning((LONG)firstPoint.y()<<0x10); + LONG xDelta; + LONG yDelta; + short xDir(1); + short yDir(1); + short steps; + + if(secondPoint.x()>0x10,xRunning>>0x10,byteValue); + xRunning-=xDelta; + yRunning-=yDelta; + } + } + else if(-1==xDir&&1==yDir) + { + for(short stepIndex=0;stepIndex>0x10,xRunning>>0x10,byteValue); + xRunning-=xDelta; + yRunning+=yDelta; + } + } + else if(1==xDir&&-1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,byteValue); + xRunning+=xDelta; + yRunning-=yDelta; + } + } + else if(1==xDir&&1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,byteValue); + xRunning+=xDelta; + yRunning+=yDelta; + } + } +} + +#if 0 +Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,WINGBlt &displayBitmap,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + Vector3D temp3DPoint(mDstPoints3D); + Vector2D temp2DPoint(mDstPoints2D); + displayDevice.translatePoint(temp3DPoint,temp2DPoint); + mDstPoints2D=temp2DPoint; + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),displayBitmap.getDataPtr()); +} +#endif + + +#if 0 +Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,Bitmap &displayBitmap,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + Vector3D temp3DPoint(mDstPoints3D); + Vector2D temp2DPoint(mDstPoints2D); + displayDevice.translatePoint(temp3DPoint,temp2DPoint); + mDstPoints2D=temp2DPoint; + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),displayBitmap.getDataPtr()); +} +#endif + + + +#ifndef _ENGINE_SYSTEMOBJECT_HPP_ +#define _ENGINE_SYSTEMOBJECT_HPP_ +#ifndef _COMMON_VECTOR3D_HPP_ +#include +#endif +#ifndef _COMMON_VECTOR2D_HPP_ +#include +#endif + +class SystemObject : public Vector3D + + +#if 0 +class SystemObject +{ +public: + enum Type{TypeSprite,TypeTexture,TypeUnknown}; + enum Disposition{Active,Destroyed,Idle}; + SystemObject(void); + SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition,Type typeInfo); + virtual ~SystemObject(); + void worldPosition(Vector3D worldPosition); + void screenPosition(Vector2D screenPosition); + void type(Type type); + void disposition(Disposition disposition); + Vector3D worldPosition(void)const; + Vector2D screenPosition(void)const; + Vector3D prevWorldPosition(void)const; + Vector2D prevScreenPosition(void)const; + Type type(void)const; + Disposition disposition(void)const; +private: + Type mType; + Disposition mDisposition; + Vector3D mCurrentWorldPosition; + Vector3D mLastWorldPosition; + Vector2D mCurrentScreenPosition; + Vector2D mLastScreenPosition; +}; + +inline +SystemObject::SystemObject(void) +: mType(TypeUnknown), mDisposition(Idle) +{ +} + +inline +SystemObject::SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition,Type type) +: mCurrentWorldPosition(currentWorldPosition), mLastWorldPosition(currentWorldPosition), + mCurrentScreenPosition(currentScreenPosition), mLastScreenPosition(currentScreenPosition), mType(type) +{ + +} + +inline +SystemObject::~SystemObject() +{ +} + +inline +void SystemObject::worldPosition(Vector3D worldPosition) +{ + mLastWorldPosition=mCurrentWorldPosition; + mCurrentWorldPosition=worldPosition; +} + +inline +void SystemObject::screenPosition(Vector2D screenPosition) +{ + mLastScreenPosition=mCurrentScreenPosition; + mCurrentScreenPosition=screenPosition; +} + +inline +void SystemObject::type(SystemObject::Type type) +{ + mType=type; +} + +inline +void SystemObject::disposition(SystemObject::Disposition disposition) +{ + mDisposition=disposition; +} + +inline +Vector3D SystemObject::worldPosition(void)const +{ + return mCurrentWorldPosition; +} + +inline +Vector2D SystemObject::screenPosition(void)const +{ + return mCurrentScreenPosition; +} + +inline +Vector3D SystemObject::prevWorldPosition(void)const +{ + return mLastWorldPosition; +} + +inline +Vector2D SystemObject::prevScreenPosition(void)const +{ + return mLastScreenPosition; +} + +inline +SystemObject::Type SystemObject::type(void)const +{ + return mType; +} + +inline +SystemObject::Disposition SystemObject::disposition(void)const +{ + return mDisposition; +} +#endif +#endif + + + + + + Point3D first3DPoint(((Vector3D&)(someRect3D.firstPlane()))[0]); + Point3D next3DPoint(((Vector3D&)(someRect3D.firstPlane()))[2]); + Point first2DPoint; + Point next2DPoint; + + mapCoordinates(first3DPoint,first2DPoint); + mapCoordinates(next3DPoint,next2DPoint); + floodFill(first2DPoint.midPoint(next2DPoint),RGBColor(0,0,255),RGBColor(255,0,0)); + + + + +void PureViewSystem::translatePoint(const Vector3D &vector3D,Vector2D &vector2D,MapMode mapMode) +{ + ::initView((PureViewSystem*)this); + ::mapVectorCoordinates(&((Vector3D&)vector3D)[0],&vector2D[0],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[0],&vector2D[0],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[1],&vector2D[1],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[2],&vector2D[2],(DWORD)mapMode); +// ::mapCoordinates(&((Vector3D&)vector3D)[3],&vector2D[3],(DWORD)mapMode); +} + + +;_clearWINGBlt proc near ; void clearWINGBlt(DWORD lpWINGData,DWORD imageExtent) +; push edi ; save destination index register +; xor eax,eax ; clear eax register +; mov edi,[esp+08h] ; move lpWINGData to esi +; mov ecx,[esp+0Ch] ; move bitmap extent to ecx +; shr ecx,02h ; divide bitmap extent by sizeof(long) +; rep stosd ; clear out the bitmap in chunks of sizeof(long) +; pop edi ; restore destination index register +; retn ; return near to caller +;_clearWINGBlt endp + +_proto proc near ; void proto(Polygon3D *pPolygon3D) where Polygon3D=Block + push ebp ; save previous stack frame + mov ebp,esp ; create new stack frame + push edi ; save destination index register + push esi ; save source index register + mov edi,[ebp+08h] ; move pPolygon3D to destination index register + mov ecx,ASMPolygon3D[edi].Polygon3D@@mBlockLine3D.BlockLine3D@@mSize ; how many items in block + mov esi,ASMPolygon3D[edi].Polygon3D@@mBlockLine3D.BlockLine3D@@mContainer ; get to first item +@@protiter: ; iteration sync address + cmp esi,0000h ; is this a valid item + je @@endproc ; if not then we're done + mov edi,Line3DNodePtr[esi].Line3DNodePtr@@mItem ; go fetch item for this node + mov esi,Line3DNodePtr[esi].Line3DNodePtr@@mLine3DNodePtrNext ; go fetch next node + jmp @@protiter ; iterate +@@endproc: ; end proc sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_proto endp + + + Polygon3D polygon3D; + + for(int itemIndex=0;itemIndex<20000;itemIndex++)polygon3D.insert(&Line3D(Point3D(1,2,3),Point3D(4,5,6))); + for(int i=0;i<500;i++)mapPolygonCoordinates(&polygon3D); + return FALSE; +#if 0 + + + +if 0 +_resampleClip proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClamp) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov eax,[ebp+18h] ; move outClip to eax register + sub ebx,eax ; subtract (outLen-1L)-outClip, this is clipping region + mov edi,[ebp+0Ch] ; move lpOut to destination index register + add edi,ecx ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + cmp ecx,ebx ; compare ecx to clipping region + je @@exit ; if it's equal then we're done + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov dl,byte ptr[esi+eax] ; move source byte to dl register + mov byte ptr[edi],dl ; move source byte to destination address + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + dec edi ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClip endp +endif + +clamp MACRO value + LOCAL @@return + cmp value,0000h + jge @@return + mov value,0000h +@@return: +ENDM + + + +void DIB3D::fillRect(const Rect3D &someRect3D,int paletteIndex) +{ + Vector2D vector2D; + + mapCoordinates(((Vector3D&)someRect3D.firstPlane())[0],vector2D[0]); + mapCoordinates(((Vector3D&)someRect3D.firstPlane())[1],vector2D[1]); + mapCoordinates(((Vector3D&)someRect3D.firstPlane())[2],vector2D[2]); + mapCoordinates(((Vector3D&)someRect3D.firstPlane())[3],vector2D[3]); + DIBitmap::fillRect(vector2D,paletteIndex); +} + +// line(((Vector3D&)(someRect3D.firstPlane()))[0],((Vector3D&)(someRect3D.firstPlane()))[1],paletteIndex); +// line(((Vector3D&)(someRect3D.firstPlane()))[1],((Vector3D&)(someRect3D.firstPlane()))[2],paletteIndex); +// line(((Vector3D&)(someRect3D.firstPlane()))[2],((Vector3D&)(someRect3D.firstPlane()))[3],paletteIndex); +// line(((Vector3D&)(someRect3D.firstPlane()))[3],((Vector3D&)(someRect3D.firstPlane()))[0],paletteIndex); + +// line(((Vector3D&)(someRect3D.nextPlane()))[0],((Vector3D&)(someRect3D.nextPlane()))[1],paletteIndex); +// line(((Vector3D&)(someRect3D.nextPlane()))[1],((Vector3D&)(someRect3D.nextPlane()))[2],paletteIndex); +// line(((Vector3D&)(someRect3D.nextPlane()))[2],((Vector3D&)(someRect3D.nextPlane()))[3],paletteIndex); +// line(((Vector3D&)(someRect3D.nextPlane()))[3],((Vector3D&)(someRect3D.nextPlane()))[0],paletteIndex); + +// line(((Vector3D&)(someRect3D.firstPlane()))[0],((Vector3D&)(someRect3D.nextPlane()))[0],paletteIndex); +// line(((Vector3D&)(someRect3D.firstPlane()))[1],((Vector3D&)(someRect3D.nextPlane()))[1],paletteIndex); +// line(((Vector3D&)(someRect3D.firstPlane()))[2],((Vector3D&)(someRect3D.nextPlane()))[2],paletteIndex); +// line(((Vector3D&)(someRect3D.firstPlane()))[3],((Vector3D&)(someRect3D.nextPlane()))[3],paletteIndex); +//} + + + +#include +#include +Texture::Texture(const Triangle3D &angle3D,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + Triangle angle2D; + + displayDevice.mapCoordinates((Triangle3D&)angle3D,angle2D); + mDstPoints2D[0]=angle2D[0]; + mDstPoints2D[1]=angle2D[1]; + mDstPoints2D[2]=angle2D[2]; + mLeftEdge.numVertexes(Triangle::VectorPoints); + mRightEdge.numVertexes(Triangle::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + +// mLeftEdge.numVertexes(Vector3D::VectorPoints); +// mRightEdge.numVertexes(Vector3D::VectorPoints); +// mTexturePoints[0]=Point(0,0); +// mTexturePoints[1]=Point(textureBitmap.width()-1,0); +// mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); +// mTexturePoints[3]=Point(0,textureBitmap.height()-1); + + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData()); +} + diff --git a/engine/SMK.ERR b/engine/SMK.ERR new file mode 100644 index 0000000..eb0cb50 --- /dev/null +++ b/engine/SMK.ERR @@ -0,0 +1,177 @@ + Assembling: vsmap32.asm +vsmap32.asm(9) : error A2008: syntax error : LOCALS +..\COMMON\WINDOWS.INC(40) : error A2179: structure improperly initialized +..\COMMON\WINDOWS.INC(40) : error A2008: syntax error : in structure +..\COMMON\WINDOWS.INC(41) : error A2179: structure improperly initialized +..\COMMON\WINDOWS.INC(41) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(19) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(19) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(24) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(24) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(25) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(25) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(26) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(26) : error A2065: expected : ) +..\COMMON\COMMON.INC(31) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(31) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(32) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(32) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(42) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(42) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(43) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(43) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(46) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(46) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(47) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(47) : error A2008: syntax error : in structure +..\COMMON\COMMON.INC(49) : error A2179: structure improperly initialized +..\COMMON\COMMON.INC(49) : error A2008: syntax error : in structure +..\ENGINE\VSMAP.INC(14) : error A2179: structure improperly initialized +..\ENGINE\VSMAP.INC(14) : error A2008: syntax error : in structure +..\ENGINE\VSMAP.INC(15) : error A2179: structure improperly initialized +..\ENGINE\VSMAP.INC(15) : error A2008: syntax error : in structure +vsmap32.asm(13) : error A2179: structure improperly initialized +vsmap32.asm(13) : error A2008: syntax error : in structure +vsmap32.asm(340) : error A2008: syntax error +vsmap32.asm(405) : error A2008: syntax error +vsmap32.asm(343) : error A2006: undefined symbol : LocalLength +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(27): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(30): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(33): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(36): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(39): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(42): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(45): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(48): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(51): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(54): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(57): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(349) : error A2006: undefined symbol : bestGuess + firstGuess(60): Macro Called From + vsmap32.asm(349): Main Line Code +vsmap32.asm(351) : error A2006: undefined symbol : bestGuess + divide(2): Macro Called From + vsmap32.asm(351): Main Line Code +vsmap32.asm(352) : error A2006: undefined symbol : bestGuess +vsmap32.asm(355) : error A2006: undefined symbol : bestGuess +vsmap32.asm(357) : error A2006: undefined symbol : bestGuess +vsmap32.asm(365) : error A2006: undefined symbol : LocalLength +vsmap32.asm(374) : error A2006: undefined symbol : PureViewSystem@@cameraTwistRadians +vsmap32.asm(375) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(376) : error A2006: undefined symbol : PureViewSystem@@cosCameraTwistRadians +vsmap32.asm(377) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(378) : error A2006: undefined symbol : PureViewSystem@@sinCameraTwistRadians +vsmap32.asm(379) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(380) : error A2006: undefined symbol : PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians +vsmap32.asm(381) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(382) : error A2006: undefined symbol : PureViewSystem@@viewPlaneDistance +vsmap32.asm(383) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(384) : error A2006: undefined symbol : PureViewSystem@@viewPortWidth +vsmap32.asm(385) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(386) : error A2006: undefined symbol : PureViewSystem@@viewPortHeight +vsmap32.asm(387) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(388) : error A2006: undefined symbol : PureViewSystem@@cameraPoint +vsmap32.asm(389) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(390) : error A2006: undefined symbol : PureViewSystem@@cameraPoint +vsmap32.asm(391) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(392) : error A2006: undefined symbol : PureViewSystem@@cameraPoint +vsmap32.asm(393) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(394) : error A2006: undefined symbol : PureViewSystem@@focusPoint +vsmap32.asm(395) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(396) : error A2006: undefined symbol : PureViewSystem@@focusPoint +vsmap32.asm(397) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(398) : error A2006: undefined symbol : PureViewSystem@@focusPoint +vsmap32.asm(399) : error A2006: undefined symbol : viewData@@mViewSystem +vsmap32.asm(408) : error A2006: undefined symbol : LocalLength +vsmap32.asm(411) : error A2006: undefined symbol : tempValue + initializeLocal(3): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : viewData@@mViewSystem + initializeLocal(4): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : viewData@@mViewSystem + sMul(3): Macro Called From + initializeLocal(5): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : tempValue + initializeLocal(6): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : tempValue + initializeLocal(7): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : v + initializeLocal(9): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : tempValue + initializeLocal(12): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : tempValue + initializeLocal(13): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : v + initializeLocal(16): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : v + initializeLocal(18): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : viewData@@mViewSystem + initializeLocal(20): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : v + divide(2): Macro Called From + initializeLocal(21): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : aov + initializeLocal(22): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : viewData@@mViewSystem + initializeLocal(23): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : v + divide(2): Macro Called From + initializeLocal(24): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : bov + initializeLocal(25): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : viewData@@mViewSystem + sMul(2): Macro Called From + initializeLocal(26): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : viewData@@mViewSystem + sMul(3): Macro Called From + initializeLocal(26): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : v + divide(2): Macro Called From + initializeLocal(27): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : error A2006: undefined symbol : acov + initializeLocal(28): Macro Called From + vsmap32.asm(411): Main Line Code +vsmap32.asm(411) : fatal error A1012: error count exceeds 100; stopping assembly + sMul(2): Macro Called From + initializeLocal(29): Macro Called From + vsmap32.asm(411): Main Line Code diff --git a/engine/SMK.LST b/engine/SMK.LST new file mode 100644 index 0000000..ff5ad9f --- /dev/null +++ b/engine/SMK.LST @@ -0,0 +1,23 @@ +File LINE3D.HPP: +class Line3D + Line3D(void); + Line3D(const Point3D &firstPoint,const Point3D &secondPoint); + Line3D(const Line3D &someLine3D); + ~Line3D(); + Line3D &operator=(const Line3D &someLine3D); + WORD operator==(const Line3D &someLine3D)const; +Line3D::Line3D(void) +Line3D::Line3D(const Point3D &firstPoint,const Point3D &secondPoint) +Line3D::Line3D(const Line3D &someLine3D) +: mFirstPoint(someLine3D.mFirstPoint), mSecondPoint(someLine3D.mSecondPoint) +Line3D::~Line3D() +Line3D &Line3D::operator=(const Line3D &someLine3D) + mFirstPoint=someLine3D.mFirstPoint; + mSecondPoint=someLine3D.mSecondPoint; +WORD Line3D::operator==(const Line3D &someLine3D)const + return (mFirstPoint==someLine3D.mFirstPoint&& + mSecondPoint==someLine3D.mSecondPoint); +Point3D Line3D::firstPoint(void)const +Point3D Line3D::secondPoint(void)const +void Line3D::firstPoint(const Point3D &firstPoint) +void Line3D::secondPoint(const Point3D &secondPoint) diff --git a/engine/SPACIAL.CPP b/engine/SPACIAL.CPP new file mode 100644 index 0000000..e08e8b5 --- /dev/null +++ b/engine/SPACIAL.CPP @@ -0,0 +1,49 @@ +#include +#include + +SpacialTransform::~SpacialTransform() +{ +} + +BOOL SpacialTransform::transform(Array &srcVector,Array &dstVector,WORD sizeFactor) +{ + int inverseFactor((100.00/(float)sizeFactor)*100.00); + int outSegment(inverseFactor); + int inSegment(100); + int nextDestIndex(0); + int accumulator(0); + + mNextInputIndex=-1; + dstVector.size((srcVector.size()*sizeFactor)/100.00); + if(!nextInput(srcVector))return FALSE; + while(TRUE) + { + if(outSegment<=inSegment) + { + accumulator+=((inSegment*mCurrentValue)+((100-inSegment)*mNextValue))*outSegment; + inSegment-=outSegment; + outSegment=inverseFactor; + accumulator*=(float)sizeFactor*.000001; + if(nextDestIndex>=dstVector.size())break; + dstVector[nextDestIndex++]=accumulator; + accumulator=0; + } + else + { + accumulator+=((inSegment*mCurrentValue)+((100-inSegment)*mNextValue))*inSegment; + outSegment-=inSegment; + inSegment=100; + if(!nextInput(srcVector))break; + } + } + return false; +} + +BOOL SpacialTransform::nextInput(Array &srcVector) +{ + if(++mNextInputIndex>=srcVector.size())return FALSE; + mCurrentValue=srcVector[mNextInputIndex]; + if(mNextInputIndex+1>=srcVector.size())mNextValue=mCurrentValue; + else mNextValue=srcVector[mNextInputIndex+1]; + return TRUE; +} diff --git a/engine/SPACIAL.HPP b/engine/SPACIAL.HPP new file mode 100644 index 0000000..99ab085 --- /dev/null +++ b/engine/SPACIAL.HPP @@ -0,0 +1,41 @@ +#ifndef _ENGINE_SPACIALTRANSFORM_HPP_ +#define _ENGINE_SPACIALTRANSFROM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +template +class Array; + +class SpacialTransform +{ +public: + SpacialTransform(void); + virtual ~SpacialTransform(); + BOOL transform(Array &srcVector,Array &dstVector,WORD sizeFactor); +private: + SpacialTransform(const SpacialTransform &someSpacialTransform); + SpacialTransform &operator=(const SpacialTransform &someSpacialTransform); + BOOL nextInput(Array &srcVector); + + int mNextInputIndex; + int mCurrentValue; + int mNextValue; +}; + +inline +SpacialTransform::SpacialTransform(void) +{ +} + +inline +SpacialTransform::SpacialTransform(const SpacialTransform &/*someSpacialTransform*/) +{ // private implementation +} + +inline +SpacialTransform &SpacialTransform::operator=(const SpacialTransform &/*someSpacialTransform*/) +{ // private implementation + return *this; +} +#endif \ No newline at end of file diff --git a/engine/SYSOBJ.BAK b/engine/SYSOBJ.BAK new file mode 100644 index 0000000..58748f6 --- /dev/null +++ b/engine/SYSOBJ.BAK @@ -0,0 +1,103 @@ +#ifndef _ENGINE_SYSTEMOBJECT_HPP_ +#define _ENGINE_SYSTEMOBJECT_HPP_ +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif +#ifndef _COMMON_VECTOR2D_HPP_ +#include +#endif + +class SystemObject +{ +public: + enum Disposition{Active,Destroyed,Idle}; + SystemObject(void); + SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition); + virtual ~SystemObject(); + void worldPosition(Vector3D worldPosition); + void screenPosition(Vector2D screenPosition); + void disposition(Disposition disposition); + Vector3D worldPosition(void)const; + Vector2D screenPosition(void)const; + Vector3D prevWorldPosition(void)const; + Vector2D prevScreenPosition(void)const; + Disposition disposition(void)const; +private: + Disposition mDisposition; + Vector3D mCurrentWorldPosition; + Vector3D mLastWorldPosition; + Vector2D mCurrentScreenPosition; + Vector2D mLastScreenPosition; +}; + +inline +SystemObject::SystemObject(void) +: mDisposition(Idle) +{ +} + +inline +SystemObject::SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition) +: mCurrentWorldPosition(currentWorldPosition), mLastWorldPosition(currentWorldPosition), + mCurrentScreenPosition(currentScreenPosition), mLastScreenPosition(currentScreenPosition) +{ + +} + +inline +SystemObject::~SystemObject() +{ +} + +inline +void SystemObject::worldPosition(Vector3D worldPosition) +{ + mLastWorldPosition=mCurrentWorldPosition; + mCurrentWorldPosition=worldPosition; +} + +inline +void SystemObject::screenPosition(Vector2D screenPosition) +{ + mLastScreenPosition=mCurrentScreenPosition; + mCurrentScreenPosition=screenPosition; +} + +inline +void SystemObject::disposition(SystemObject::Disposition disposition) +{ + mDisposition=disposition; +} + +inline +Vector3D SystemObject::worldPosition(void)const +{ + return mCurrentWorldPosition; +} + +inline +Vector2D SystemObject::screenPosition(void)const +{ + return mCurrentScreenPosition; +} + +inline +Vector3D SystemObject::prevWorldPosition(void)const +{ + return mLastWorldPosition; +} + +inline +Vector2D SystemObject::prevScreenPosition(void)const +{ + return mLastScreenPosition; +} + +inline +SystemObject::Disposition SystemObject::disposition(void)const +{ + return mDisposition; +} +#endif + + diff --git a/engine/SYSOBJ.HPP b/engine/SYSOBJ.HPP new file mode 100644 index 0000000..58748f6 --- /dev/null +++ b/engine/SYSOBJ.HPP @@ -0,0 +1,103 @@ +#ifndef _ENGINE_SYSTEMOBJECT_HPP_ +#define _ENGINE_SYSTEMOBJECT_HPP_ +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif +#ifndef _COMMON_VECTOR2D_HPP_ +#include +#endif + +class SystemObject +{ +public: + enum Disposition{Active,Destroyed,Idle}; + SystemObject(void); + SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition); + virtual ~SystemObject(); + void worldPosition(Vector3D worldPosition); + void screenPosition(Vector2D screenPosition); + void disposition(Disposition disposition); + Vector3D worldPosition(void)const; + Vector2D screenPosition(void)const; + Vector3D prevWorldPosition(void)const; + Vector2D prevScreenPosition(void)const; + Disposition disposition(void)const; +private: + Disposition mDisposition; + Vector3D mCurrentWorldPosition; + Vector3D mLastWorldPosition; + Vector2D mCurrentScreenPosition; + Vector2D mLastScreenPosition; +}; + +inline +SystemObject::SystemObject(void) +: mDisposition(Idle) +{ +} + +inline +SystemObject::SystemObject(Vector3D ¤tWorldPosition,Vector2D ¤tScreenPosition) +: mCurrentWorldPosition(currentWorldPosition), mLastWorldPosition(currentWorldPosition), + mCurrentScreenPosition(currentScreenPosition), mLastScreenPosition(currentScreenPosition) +{ + +} + +inline +SystemObject::~SystemObject() +{ +} + +inline +void SystemObject::worldPosition(Vector3D worldPosition) +{ + mLastWorldPosition=mCurrentWorldPosition; + mCurrentWorldPosition=worldPosition; +} + +inline +void SystemObject::screenPosition(Vector2D screenPosition) +{ + mLastScreenPosition=mCurrentScreenPosition; + mCurrentScreenPosition=screenPosition; +} + +inline +void SystemObject::disposition(SystemObject::Disposition disposition) +{ + mDisposition=disposition; +} + +inline +Vector3D SystemObject::worldPosition(void)const +{ + return mCurrentWorldPosition; +} + +inline +Vector2D SystemObject::screenPosition(void)const +{ + return mCurrentScreenPosition; +} + +inline +Vector3D SystemObject::prevWorldPosition(void)const +{ + return mLastWorldPosition; +} + +inline +Vector2D SystemObject::prevScreenPosition(void)const +{ + return mLastScreenPosition; +} + +inline +SystemObject::Disposition SystemObject::disposition(void)const +{ + return mDisposition; +} +#endif + + diff --git a/engine/TDCONFIG.TDW b/engine/TDCONFIG.TDW new file mode 100644 index 0000000..d1a4a03 Binary files /dev/null and b/engine/TDCONFIG.TDW differ diff --git a/engine/TDW.TRW b/engine/TDW.TRW new file mode 100644 index 0000000..ca45ac1 Binary files /dev/null and b/engine/TDW.TRW differ diff --git a/engine/TEXTURE.BAK b/engine/TEXTURE.BAK new file mode 100644 index 0000000..6842ded --- /dev/null +++ b/engine/TEXTURE.BAK @@ -0,0 +1,64 @@ +#ifndef _ENGINE_TEXTURE_HPP_ +#define _ENGINE_TEXTURE_HPP_ +#ifndef _COMMON_VECTOR2D_HPP_ +#include +#endif +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif +#ifndef _ENGINE_DEVICE3D_HPP_ +#include +#endif +#ifndef _ENGINE_PUREEDGE_HPP_ +#include +#endif +#ifndef _ENGINE_PUREMAP_HPP_ +#include +#endif +#ifndef _ENGINE_ASMUTIL_HPP_ +#include +#endif + +class WINGBlt; +class DIBitmap; +class Bitmap; + +class Texture +{ +public: + typedef void (Texture::*PMFI)(long pixelPoint,long imagePoint); + Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,Bitmap &displayBitmap,Device3D &displayDevice); + Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,WINGBlt &displayBitmap,Device3D &displayDevice); + Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice); + Texture(const Vector2D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap); + virtual ~Texture(); + void mapTexture(void); +private: + Texture &operator=(const Texture &someTexture); + PureEdge mLeftEdge; + PureEdge mRightEdge; + PureMap mEdgeMap; + Vector2D mTexturePoints; + Vector2D mDstPoints2D; + Vector3D mDstPoints3D; +}; + +inline +Texture &Texture::operator=(const Texture &/*someTexture*/) +{ // undefined + return *this; +} + +inline +Texture::~Texture() +{ +} + +inline +void Texture::mapTexture(void) +{ + ::initEdge(-1,&mLeftEdge); + ::initEdge(1,&mRightEdge); + ::mapTexture(&mEdgeMap); +} +#endif diff --git a/engine/TEXTURE.CPP b/engine/TEXTURE.CPP new file mode 100644 index 0000000..5bc3f8e --- /dev/null +++ b/engine/TEXTURE.CPP @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include +#include +#include + +Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,DIB3D &displayBitmap) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + displayBitmap.translatePoint(mDstPoints3D,mDstPoints2D); + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData()); +} + +Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,Bitmap &displayBitmap,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + displayDevice.translatePoint(mDstPoints3D,mDstPoints2D); + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),displayBitmap.getDataPtr()); +} + +Texture::Texture(const Vector2D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints2D=dstPoints; + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData()); +} + +Texture::Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + mDstPoints3D=dstPoints; + displayDevice.translatePoint(mDstPoints3D,mDstPoints2D); + mLeftEdge.numVertexes(Vector3D::VectorPoints); + mRightEdge.numVertexes(Vector3D::VectorPoints); + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[3]=Point(0,textureBitmap.height()-1); + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData()); +} + +Texture::Texture(const Triangle3D &angle3D,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice,TriMap triMap) +: mEdgeMap(&mLeftEdge,&mRightEdge) +{ + Triangle angle2D; + + displayDevice.mapCoordinates((Triangle3D&)angle3D,angle2D); + mDstPoints2D[0]=angle2D[0]; + mDstPoints2D[1]=angle2D[1]; + mDstPoints2D[2]=angle2D[2]; + mLeftEdge.numVertexes(Triangle::VectorPoints); + mRightEdge.numVertexes(Triangle::VectorPoints); + switch(triMap) + { + case MapCenter : + mTexturePoints[0]=Point(0,textureBitmap.height()-1); + mTexturePoints[1]=Point(textureBitmap.width()/2,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + break; + case MapUpperRight : + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,0); + mTexturePoints[2]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + break; + case MapLowerLeft : + mTexturePoints[0]=Point(0,0); + mTexturePoints[1]=Point(textureBitmap.width()-1,textureBitmap.height()-1); + mTexturePoints[2]=Point(0,textureBitmap.height()-1); + break; + } + mLeftEdge.setSrcPoints((Point*)&mTexturePoints); + mLeftEdge.setDstPoints((Point*)&mDstPoints2D); + mRightEdge.setSrcPoints((Point*)&mTexturePoints); + mRightEdge.setDstPoints((Point*)&mDstPoints2D); + ::setSrcBitmapInfo(textureBitmap.width(),textureBitmap.height(),textureBitmap.getDataPtr()); + ::setDstBitmapInfo(displayBitmap.width(),displayBitmap.height(),(unsigned char*)displayBitmap.ptrData()); +} + diff --git a/engine/TEXTURE.HPP b/engine/TEXTURE.HPP new file mode 100644 index 0000000..efb857f --- /dev/null +++ b/engine/TEXTURE.HPP @@ -0,0 +1,68 @@ +#ifndef _ENGINE_TEXTURE_HPP_ +#define _ENGINE_TEXTURE_HPP_ +#ifndef _COMMON_VECTOR2D_HPP_ +#include +#endif +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif +#ifndef _ENGINE_DEVICE3D_HPP_ +#include +#endif +#ifndef _ENGINE_PUREEDGE_HPP_ +#include +#endif +#ifndef _ENGINE_PUREMAP_HPP_ +#include +#endif +#ifndef _ENGINE_ASMUTIL_HPP_ +#include +#endif + +class DIBitmap; +class Bitmap; +class Triangle3D; +class DIB3D; + +class Texture +{ +public: + enum TriMap{MapCenter,MapLowerLeft,MapUpperRight}; + typedef void (Texture::*PMFI)(long pixelPoint,long imagePoint); + Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,DIB3D &displayBitmap); + Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,Bitmap &displayBitmap,Device3D &displayDevice); + Texture(const Vector3D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice); + Texture(const Vector2D &dstPoints,Bitmap &textureBitmap,DIBitmap &displayBitmap); + Texture(const Triangle3D &angle3D,Bitmap &textureBitmap,DIBitmap &displayBitmap,Device3D &displayDevice,TriMap triMap=MapCenter); + virtual ~Texture(); + void mapTexture(void); +private: + enum EdgeType{LeftEdge=-1,RightEdge=1}; + Texture &operator=(const Texture &someTexture); + PureEdge mLeftEdge; + PureEdge mRightEdge; + PureMap mEdgeMap; + Vector2D mTexturePoints; + Vector2D mDstPoints2D; + Vector3D mDstPoints3D; +}; + +inline +Texture &Texture::operator=(const Texture &/*someTexture*/) +{ // undefined + return *this; +} + +inline +Texture::~Texture() +{ +} + +inline +void Texture::mapTexture(void) +{ + ::initEdge(LeftEdge,&mLeftEdge); + ::initEdge(RightEdge,&mRightEdge); + ::mapTexture(&mEdgeMap); +} +#endif diff --git a/engine/TMAP16.ASM b/engine/TMAP16.ASM new file mode 100644 index 0000000..e473e2a --- /dev/null +++ b/engine/TMAP16.ASM @@ -0,0 +1,589 @@ +;************************************************************************************* +; MODULE: TMAP16.ASM DATE: DECEMBER 28,1994 +; AUTHOR: SEAN M. KESSLER +; TARGET: 16 BIT TARGET +; FUNCTION : TEXTURE MAPPING POLYGONS IN PERSPECTIVE +;************************************************************************************* +.MODEL LARGE C +.386 +.DATA +bmData@@mSrcWidth DW 00h +bmData@@mSrcHeight DW 00h +bmData@@mlpSrcPtr DD 00h +bmData@@mDstWidth DW 00h +bmData@@mDstHeight DW 00h +bmData@@mlpDstPtr DD 00h +MINVALUE EQU -32767 +MAXVALUE EQU 32767 +MINVERTEX EQU 3 +PRECISION EQU 16384 +.CODE +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\TMAP16.INC +round MACRO varOne + mov eax,varOne ; move varOne into eax register + mov ebx,eax ; move varOne into ebx register + and ebx,00003FFFh ; get remainder into ebx register + shr eax,14 ; get whole number to eax register + cmp ebx,8192 ; if remainder > 8192, increment eax + db 7Eh ; the next 2 bytes comprise "jle +2" (ie) + db 02h ; jump passed the increment eax instruction + inc eax ; increment value in eax +ENDM +multiply MACRO varOne,varTwo + push bx ; save bx register + mov ax,varOne ; move varOne into ax register + mov bx,varTwo ; move varTwo into bx register + imul bx ; perform the multiply result to dx:ax + push ax ; save ax register result + movzx eax,dx ; move dx register to eax zero extend + shl eax,16 ; shift eax left by a word + pop ax ; restore ax register result + pop bx ; restore bx register +ENDM +divide MACRO varOne,varTwo + push ebx ; save ebx register + mov ebx,varTwo ; move varTwo into ebx register + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv ebx ; divide eax/ebx result to eax, remainder to edx + pop ebx ; restore ebx register +ENDM +getPoint MACRO segment,offset,index + push si ; save source index register + push ds ; save data segment register + push cx ; save cx register + push segment ; save segment on stack + pop ds ; restore to data segment + mov ax,index ; move index to ax register + shl ax,02h ; multiply ax by size of far pointer + mov si,offset ; now move offset address to si + add si,ax ; add in the increment value + xor eax,eax ; clear out eax register + mov ax,ds:[si].Point@@x ; get the x-value to ax register + xor ebx,ebx ; clear out ebx register + mov bx,ds:[si].Point@@y ; get the y-value to bx register + pop cx ; restore saved cx register + pop ds ; restore saved data segment + pop si ; restore save source index register +ENDM +_initEdge proc far ; void initEdge(short edgeType,PureEdge *lpEdge); + push bp ; save callers stack frame + mov bp,sp ; create new stack frame + push di ; save callers destination index register + mov es,[bp+10] ; move segment of data to extra segment + mov di,[bp+8] ; move offset of data to destination index register + assume es ; now assume extra segment for segment loads. + call _getMinMaxInfo ; find minimum and maximum vertexes + cmp ax,00h ; make sure previous call returned success + jne @@return ; if not then we should leave + push word ptr[bp+6] ; push edgeType (-1:leftEdge,1:rightEdge) + push [di].PureEdge@@mStartVertex ; push startVertex + call _setupEdge ; now setup the edge + add sp,04h ; readjust the stack +@@return: + assume @data ; assume old data segment for segment loads + pop di ; restore destination index register + pop bp ; restore callers stack frame + retf ; return to caller +_initEdge endp +_getMinMaxInfo proc near ; short getMinMaxInfo(void) +LOCAL yMin:WORD,yMax:WORD=LocalLength + push bp ; save callers stack frame + mov bp,sp ; create new frame + sub sp,LocalLength ; adjust stack to handle local variables + push cx ; save callers cx register + push si ; save callers source index register + push ds ; save callers data segment register + cmp [di].PureEdge@@mNumVertexes,MINVERTEX ; make sure have at least three vertexes + jl @@error ; otherwise we've got a problem + mov yMin,MINVALUE ; start yMin with some low value + mov yMax,MAXVALUE ; start yMax with some high value + xor cx,cx ; start at index 0 + mov ds,[di].PureEdge@@mlpDstList ; segment address of (Point *) to extra segment register + mov si,[di].PureEdge@@mlpDstList+2 ; offset address of (Point *) to source index register +@@iterator: ; loop top + mov bx,ds:[si].Point@@y ; move point::y to bx register + cmp bx,yMin ; compare with current yMin value + jg @@greater ; point::y greater than current yMin +@@nexttest: ; if I handle the greater condition, still need to do less + cmp bx,yMax ; compare with current yMax value + jl @@less ; point::y less than current yMax + jmp @@looptest ; nuthin continue with test +@@greater: ; handle greater equal condition + mov yMin,bx ; set yMin to bx register + mov [di].PureEdge@@mMinVertex,cx ; move index number of vertex to mMinVertex + jmp @@nexttest ; go perform next test +@@less: ; handle less equal condition + mov yMax,bx ; set yMax to bx register + mov [di].PureEdge@@mMaxVertex,cx ; update mMaxVertex with current index +@@looptest: ; falls through to loop + add si,04h ; add 2 bytes to si to bump to next (Point*) + inc cx ; increment cx + cmp cx,[di].PureEdge@@mNumVertexes ; have we reached the number of vertexes yet? + jl @@iterator ; still more vertexes + push [di].PureEdge@@mMaxVertex ; save mMaxVertex + pop [di].PureEdge@@mStartVertex ; restore it to mStartVertex + jmp @@ok ; ok we've got good number of vertexes +@@error: ; setup for error return code + mov ax,01h ; move 01h into ax to indicate error + jmp @@return ; jump to return label +@@ok: ; setup for success return code + xor ax,ax ; clear out ax register +@@return: ; return label + pop ds ; restore callers extra segment register + pop si ; restore callers source index register + pop cx ; restore callers cx register + add sp,LocalLength ; readjust stack for local variables + pop bp ; restore old frame + retn ; return to caller +_getMinMaxInfo endp +_setupEdge proc near ; short setupEdge(short edgeType,short startVertex) +LOCAL nextVertex:WORD,xDestWidth:WORD,yDestHeight:DWORD=LocalLength + push bp ; save old stack frame + mov bp,sp ; create new stack frame + sub sp,LocalLength ; make room for local variables + push si ; save source index register + push ds ; save data segment register + push word ptr[bp+6] ; save edgeType on stack + pop [di].PureEdge@@mEdgeDirection ; restore edgeType to mEdgeDirection + push word ptr[bp+4] ; save startVertex on stack + pop [di].PureEdge@@mStartVertex ; restore startVertex to mStartVertex +@@forever: ; forever loop label + mov bx,[di].PureEdge@@mStartVertex ; move mStartVertex to bx register + cmp bx,[di].PureEdge@@mMinVertex ; is mStartVertex same as mMinVertex ?? + je @@error ; if yes then return error status + add bx,[di].PureEdge@@mEdgeDirection ; add edge direction to mStartVertex + mov nextVertex,bx ; move result to nextVertex + mov bx,[di].PureEdge@@mNumVertexes ; move number of vertexes to bx register + cmp nextVertex,bx ; compare nextVertex to number of vertexes + jge @@zervert ; nextVertex is greater eq number of vertexes + cmp nextVertex,00h ; compare nextVertex to zero + jl @@adjVert ; nextVertex is less than zero + jmp @@bypass ; nextVertex is fine +@@zervert: ; handle nextVertex>=number of vertexes + mov nextVertex,00h ; set nextVertex to zero + jmp @@bypass ; jump over next conditional +@@adjVert: ; handle nextVertex<0 + dec bx ; decrement value count in bx register + mov nextVertex,bx ; set nextVertex to (numVertex-1). +@@bypass: + getPoint [di].PureEdge@@mlpDstList,[di].PureEdge@@mlpDstList+2,nextVertex + push bx ; dstList[nextVertex].y() in bx , save it + getPoint [di].PureEdge@@mlpDstList,[di].PureEdge@@mlpDstList+2,[di].PureEdge@@mStartVertex + pop ax ; restore first x-point to ax + sub ax,bx ; now subtract second x-point + mov [di].PureEdge@@mRemainingScanLines,ax ; result is mRemainingScanLines + cmp ax,00h ; check scanlines==0 + je @@loopNext ; if it's zero, continue + mov yDestHeight,eax ; set yDestHeight + push nextVertex ; save nextVertex value + pop [di].PureEdge@@mCurrentEdgeEnd ; restore it to mCurrentEdgeEnd + getPoint [di].PureEdge@@mlpSrcList+2,[di].PureEdge@@mlpSrcList,[di].PureEdge@@mStartVertex + multiply ax,PRECISION ; multiply mxSource by PRECISION + mov [di].PureEdge@@mxSource,eax ; move srcList[mStartVertex].x() to mxSource + multiply bx,PRECISION ; multiply mySource by PRECISION + mov [di].PureEdge@@mySource,eax ; move srcList[mStartVertex].y() to mySource + getPoint [di].PureEdge@@mlpSrcList+2,[di].PureEdge@@mlpSrcList,nextVertex ; get source point + multiply ax,PRECISION + mov ebx,[di].PureEdge@@mxSource ; mxSource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].x-mxSource-->ax + divide eax,yDestHeight ; divide by yDestHeight, this is mxSourceStep + mov [di].PureEdge@@mxSourceStep,eax ; move eax register into mxSourceStep + getPoint [di].PureEdge@@mlpSrcList+2,[di].PureEdge@@mlpSrcList,nextVertex ; get source point + mov eax,ebx ; move point.y into ax register + multiply ax,PRECISION + mov ebx,[di].PureEdge@@mySource ; mySource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].y-mySource-->ax + divide eax,yDestHeight ; divide by yDestHeight, this is mySourceStep + mov [di].PureEdge@@mySourceStep,eax ; move eax register into mySourceStep + getPoint [di].PureEdge@@mlpDstList,[di].PureEdge@@mlpDstList+2,[di].PureEdge@@mStartVertex + mov [di].PureEdge@@mxDestLocation,ax ; mxDestLocation=mDstList[mStartVertex].x() + getPoint [di].PureEdge@@mlpDstList,[di].PureEdge@@mlpDstList+2,nextVertex ; get dstList[nextVertex] + sub ax,[di].PureEdge@@mxDestLocation ; get the width of the segment + mov xDestWidth,ax ; move width into xDestWidth + cmp xDestWidth,00h ; is the direction negative (ie) left + jl @@negWidth ; yes, handle negative direction + mov [di].PureEdge@@mxDirection,01h ; set right direction indicator + mov [di].PureEdge@@mxErrorTerm,00h ; set mxErrorTerm to zero + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[di].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx zero extend + divide eax,ebx ; eax=xDestWidth/mRemainingScanLines + mov [di].PureEdge@@mxStep,ax ; move result into mxStep + jmp @@syncOne ; jump over following handler +@@negWidth: ; handle negative direction + mov [di].PureEdge@@mxDirection,-1 ; set left direction indicator + neg xDestWidth ; negate the width (ie) make it positive + mov ax,01h ; move a 1 into ax register + sub ax,[di].PureEdge@@mRemainingScanLines ; subtract remaining scan lines from 1 + mov [di].PureEdge@@mxErrorTerm,ax ; move result to mxErrorTerm + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[di].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx zero extend + divide eax,ebx ; eax=xDestWidth/mRemainingScanLines + neg eax ; negate the result + mov [di].PureEdge@@mxStep,ax ; move result back into mxStep +@@syncOne: ; synchronization address + movzx eax,xDestWidth ; move xDestWidth into eax register, zero extend + movzx ebx,[di].PureEdge@@mRemainingScanLines ; move mRemainingScanLines into ebx register + divide eax,ebx ; divide xDestWidth/mRemainingScanLines + mov [di].PureEdge@@mxAdjustUp,dx ; move remainder into mxAdjustUp + push [di].PureEdge@@mRemainingScanLines ; save mRemainingScanLines + pop [di].PureEdge@@mxAdjustDown ; restore mRemainingScanLines into mxAdjustDown + jmp @@ok ; jump over forever loop +@@loopNext: ; forever loop address + push nextVertex ; save nextVertex on stack + pop [di].PureEdge@@mStartVertex ; restore to mStartVertex + jmp @@forever ; continue with loop +@@error: ; error handler + mov ax,01h ; set ax register to 01h to indicate failure + jmp @@return ; jump over to return label +@@ok: ; success handler + xor ax,ax ; clear out ax register to handle success +@@return: ; return label + pop ds ; restore data segment register + pop si ; restore source index register + add sp,LocalLength ; readjust stack for local variables + pop bp ; restore old stack frame + retn ; return to caller +_setupEdge endp +_increment proc near ; short increment(PureEdge *lpEdge) + push bp ; save callers stack frame + mov bp,sp ; create new stack frame + push es ; save extra segment register + push di ; save destination index register + mov es,[bp+6] ; move segment of data to extra segment + mov di,[bp+4] ; move offset of data to destination index register + assume es ; now assume extra segment for segment loads. + dec [di].PureEdge@@mRemainingScanLines ; decrement mRemainingScanLines + cmp [di].PureEdge@@mRemainingScanLines,00h ; compare mRemainingScanLines to zero + je @@newEdge ; no more scan lines, try to get to next edge + jmp @@syncOne ; more scan lines, keep going +@@newEdge: ; new edge handler + push [di].PureEdge@@mEdgeDirection ; save edgeDirection + push [di].PureEdge@@mCurrentEdgeEnd ; save currentEdge end (ie) nextEdge index + call _setupEdge ; attempt to setup new edge + add sp,04h ; readjust stack + cmp ax,01h ; did prior call fail? + je @@error ; yes, no more edges + jmp @@ok ; no, keep going +@@syncOne: ; synchronizing address + mov eax,[di].PureEdge@@mxSourceStep ; get mxSourceStep to eax register + add eax,[di].PureEdge@@mxSource ; add in mxSource + mov [di].PureEdge@@mxSource,eax ; replace mxSource with new value + mov eax,[di].PureEdge@@mySourceStep ; get mySourceStep into eax register + add eax,[di].PureEdge@@mySource ; add in mySource + mov [di].PureEdge@@mySource,eax ; replace mySource with new value + mov ax,[di].PureEdge@@mxDestLocation ; get mxDestLocation into ax register + add ax,[di].PureEdge@@mxStep ; add in mxStep + mov [di].PureEdge@@mxDestLocation,ax ; replace mxDestLocation with new value + mov ax,[di].PureEdge@@mxErrorTerm ; get mxErrorTerm to ax register + add ax,[di].PureEdge@@mxAdjustUp ; add in mxAdjustUp + mov [di].PureEdge@@mxErrorTerm,ax ; replace mxErrorTerm with new value + cmp ax,00h ; now compare result to 00h + jg @@adjTerm ; result is greater than zero + jmp @@ok ; result is less equal to zero, we're done +@@adjTerm: + mov ax,[di].PureEdge@@mxDestLocation ; get mxDestLocation to ax register + add ax,[di].PureEdge@@mxDirection ; add in mxDirection + mov [di].PureEdge@@mxDestLocation,ax ; replace mxDestLocation with new value + mov ax,[di].PureEdge@@mxErrorTerm ; move mxErrorTerm into ax register + sub ax,[di].PureEdge@@mxAdjustDown ; add in mxAdjustDown + mov [di].PureEdge@@mxErrorTerm,ax ; replace mxErrorTerm with new value +@@ok: ; ok handler address + xor ax,ax ; set 00h into ax register + jmp @@return ; jump passed next block +@@error: ; error handler address + mov ax,01h ; set 01h into ax register +@@return: ; return handler + assume @data ; assume old data segment for segment loads + pop di ; restore destination index register + pop es ; restore extra segment register + pop bp ; restore stack frame + retn ; return to caller +_increment endp +_mapTexture proc far ; void mapTexture(PureMap *lpTextureMap) + push bp ; save stack frame + mov bp,sp ; create new frame + push di ; save destination index register + push si ; save source index register + push ds ; save data segment register + mov es,word ptr[bp+8] ; move segment (PureMap*) to es register + mov di,word ptr[bp+6] ; move offset (PureMap*) to destination index register + push es:[di].PureMap@@mlpLeftEdge+2 ; save segment mlpLeftEdge + pop ds ; restore segment mlpLeftEdge to ds register + mov si,es:[di].PureMap@@mlpLeftEdge ; move offset mlpLeftEdge to si register + mov cx,ds:[si].PureEdge@@mMaxVertex ; move left edge max vertex to ax register + getPoint ds:[si].PureEdge@@mlpDstList,ds:[si].PureEdge@@mlpDstList+2,cx + mov es:[di].PureMap@@myValue,bx ; myValue=mLeftEdge[mLeftEdge.maxVertex()].y() +@@forever: ; while(TRUE) + push es ; push segment (PureMap*) + push di ; push offset (PureMap*) + call _scanOutputLine ; call scanOutputLine + add sp,04h ; readjust stack + push word ptr es:[di].PureMap@@mlpLeftEdge+2 ; push segment mlpLeftEdge + push word ptr es:[di].PureMap@@mlpLeftEdge ; push offset mlpLeftEdge + call _increment ; increment along left edge + add sp,04h ; readjust stack after call + cmp ax,00h ; check return code + jne @@return ; edge failed to increment, we're done + push word ptr es:[di].PureMap@@mlpRightEdge ; push segment mlpRightEdge + push word ptr es:[di].PureMap@@mlpRightEdge+2 ; push offset mlpRightEdge + call _increment ; increment along right edge + add sp,04h ; readjust stack after call + cmp ax,00h ; check return code + jne @@return ; edge failed to increment, we're done + inc es:[di].PureMap@@myValue ; increment y() position + jmp @@forever ; loop until all edges are completed +@@return: ; return address label + pop ds ; restore data segment register + pop si ; restore source index re + pop di ; restore destination index register + pop bp ; restore old frame + retf ; return to caller +_mapTexture endp +_scanOutputLine proc near + push bp ; save stack frame + mov bp,sp ; create new frame + push es ; save extra segment + push di ; save destination index register + push ds ; save data segment register + push si ; save source index register + mov es,word ptr[bp+6] ; move segment (PureMap*) to extra segment register + mov di,word ptr[bp+4] ; move offset (PureMap*) to destination index register + push es:[di].PureMap@@mlpLeftEdge+2 ; save segment mlpLeftEdge + pop ds ; restore segment mlpLeftEdge to data segment + mov si,es:[di].PureMap@@mlpLeftEdge ; move offset mlpLeftEdge to source index reg + mov eax,ds:[si].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov es:[di].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,ds:[si].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov es:[di].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov bx,ds:[si].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to bx + mov es:[di].PureMap@@mxDest,bx ; move PureEdge::mxDestLocation to PureMap::mxDest + push word ptr es:[di].PureMap@@mlpRightEdge ; save segment mlpRightEdge + pop ds ; restore segment mlpRightEdge to ds + mov si,word ptr es:[di].PureMap@@mlpRightEdge+2 ; move offset mlpRightEdge to si + xor eax,eax ; to clear out the high word of eax + mov ax,ds:[si].PureEdge@@mxDestLocation ; move PureEdge.mxDestLocation to ax + mov es:[di].PureMap@@mxDestMax,ax ; move PureEdge.mxDestLocation to PureMap.mxDestMap + sub ax,bx ; mxDestMax-mxDest + cmp ax,00h ; check if width is zero + je @@return ; if width is zero just return + mov es:[di].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,ds:[si].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,es:[di].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,es:[di].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov es:[di].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,ds:[si].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,es:[di].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,es:[di].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov es:[di].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep +@@xLoop: ; xLoop top + mov ax,es:[di].PureMap@@mxDest ; move mxDest to ax register + cmp ax,es:[di].PureMap@@mxDestMax ; compare mxDest to mxDestMax + jge @@return ; if its greater equal return + cmp es:[di].PureMap@@mxSource,00h ; compare mxSource to zero + jl @@xFix ; if mxSource is less than zero, fix +@@nxtChk: ; sync label to continue with checking + cmp es:[di].PureMap@@mySource,00h ; compare mySource to zero + jl @@yFix ; if mySource is less than zero, fix + jmp @@syncOne ; everything ok, jump over block +@@yFix: ; handle y-fixup + mov es:[di].PureMap@@mySource,00h ; move zero to mySource + jmp @@syncOne ; jump around next handler +@@xFix: ; handle x-fixup + mov es:[di].PureMap@@mxSource,00h ; move zero into mxSource + jmp @@nxtChk ; now look at y-value +@@syncOne: ; synchronization for conditionals + push es ; save extra segment register + mov eax,es:[di].PureMap@@mySource ; move PureMap@@mxSource to eax + round eax ; convert and round + push ax ; save result on stack + mov eax,es:[di].PureMap@@mxSource ; move PureMap@@mySource to eax + round eax ; convert and round + shl eax,16 ; now shift eax left by 16 bits + pop ax ; and restore yValue to low word + movzx ebx,es:[di].PureMap@@mxDest ; move PureMap::mxDest to eax + shl ebx,16 ; shift eax left 16 bits + mov bx,es:[di].PureMap@@myValue ; move PureMap::myValue to ax + call _putImageBits ; call put pixel handler + pop es ; restore extra segment register + mov eax,es:[di].PureMap@@mxSource ; move mxSource to eax register + add eax,es:[di].PureMap@@mxSourceStep ; add in mxSourceStep + mov es:[di].PureMap@@mxSource,eax ; move result to mxSource + mov eax,es:[di].PureMap@@mySource ; move mySource into eax register + add eax,es:[di].PureMap@@mySourceStep ; add in mySourceStep + mov es:[di].PureMap@@mySource,eax ; move result to mySource + inc es:[di].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label + pop si ; restore source index register + pop ds ; restore data segment register + pop di ; restore destination index register + pop es ; restore extra segment + pop bp ; restore old stack frame + retn ; return to caller +_scanOutputLine endp +_getSrcDataByte proc near ; BYTE getSrcDataByte(WORD row,WORD col) +LOCAL addValue:DWORD=LocalLength + push bp ; save old stack frame + mov bp,sp ; create new stack frame + sub sp,LocalLength ; adjust stack for local variable + push bx ; save bx register + push cx ; save cx register + push dx ; save dx register + push es ; save extra segment register + push di ; save destination index register + mov dx,word ptr[bp+04h] ; move row into dx register + cmp dx,bmData@@mSrcHeight ; is row greater than bitmap height + jge @@error ; if so then return + cmp dx,00h ; is row less than zero + jl @@error ; if so then return error + movzx ebx,word ptr[bp+06h] ; move col into bx register, zero extended + cmp bx,bmData@@mSrcWidth ; is col greater than bitmap width + jge @@error ; if so then return + cmp bx,00h ; is col less than zero + jl @@error ; is so then return error + movzx ecx,bmData@@mSrcWidth ; move width into cx register + mov ax,bmData@@mSrcHeight ; move height into ax register + push dx ; save dx register + multiply ax,cx ; multiply width*height result to eax + pop dx ; restore dx register + mov addValue,eax ; store result to addValue + multiply dx,cx ; multiply row*width result to eax + add eax,ecx ; add (row*width)+width + sub addValue,eax ; calculate addValue-subValue + movzx eax,word ptr[bp+06h] ; move col into bx register, zero extended + add addValue,eax ; now add the column number back in + mov dx,word ptr addValue+02h ; move high word addValue to dx register + mov ax,word ptr addValue ; move low word addValue to ax register + add ax,word ptr bmData@@mlpSrcPtr ; add low word mlpSrcPtr to low word addValue + adc dx,0000h ; add any carry to high word addValue (dx) + shl dx,03h ; multiply dx register by 8 (segment magic) + add dx,word ptr bmData@@mlpSrcPtr+02h ; now add in high word of mlpSrcData + mov es,dx ; move segment into extra segment register + mov di,ax ; move offset into destination index register + xor ax,ax ; clear out ax register + mov al,byte ptr es:[di] ; move byte value into al register + jmp @@return ; jump over error return code +@@error: ; error return label + mov ax,0FF00h ; error places 0FFh in al register +@@return: ; normal return label + pop di ; restore destination index register + pop es ; restore extra segment register + pop dx ; restore dx register + pop cx ; restore cx register + pop bx ; restore bx register + add sp,LocalLength ; adjust stack for local variable + pop bp ; restore stack frame + retn ; return near to caller +_getSrcDataByte endp +_setDstDataByte proc near ; void setDstDataByte(WORD row,WORD col,BYTE byteValue) +LOCAL addValue:DWORD=LocalLength + push bp ; save old stack frame + mov bp,sp ; create new stack frame + sub sp,LocalLength ; adjust stack for local variable + push ax ; save ax register + push bx ; save bx register + push cx ; save cx register + push dx ; save dx register + push es ; save extra segment register + push di ; save destination index register + mov dx,word ptr[bp+04h] ; move row into dx register + cmp dx,bmData@@mDstHeight ; is row greater than bitmap height + jge @@error ; if so then return + cmp dx,00h ; is row less than zero + jl @@error ; if so then return error + movzx ebx,word ptr[bp+06h] ; move col into bx register, zero extended + cmp bx,bmData@@mDstWidth ; is col greater than bitmap width + jge @@error ; if so then return + cmp bx,00h ; is col less than zero + jl @@error ; if so then return error + movzx ecx,bmData@@mDstWidth ; move width into cx register + mov ax,bmData@@mDstHeight ; move height into ax register + push dx ; save dx register + multiply ax,cx ; multiply width*height result to eax + pop dx ; restore dx register + mov addValue,eax ; store result to addValue + multiply dx,cx ; multiply row*width result to eax + add eax,ecx ; add (row*width)+width + sub addValue,eax ; calculate addValue-subValue + movzx eax,word ptr[bp+06h] ; move col into bx register, zero extended + add addValue,eax ; now add the column number back in + mov dx,word ptr addValue+02h ; move high word addValue to dx register + mov ax,word ptr addValue ; move low word addValue to ax register + add ax,word ptr bmData@@mlpDstPtr ; add low word mlpSrcPtr to low word addValue + adc dx,0000h ; add any carry to high word addValue (dx) + shl dx,03h ; multiply dx register by 8 (segment magic) + add dx,word ptr bmData@@mlpDstPtr+02h ; now add in high word of mlpSrcData + mov es,dx ; move segment into extra segment register + mov di,ax ; move offset into destination index register + mov ax,word ptr[bp+08h] ; move byteValue into ax register + mov byte ptr es:[di],al ; move byte value into mlpDstPtr + jmp @@return ; jump over error return code +@@error: ; error return label + mov ax,0FF00h ; error places 0FFh in al register + jmp @@return ; return +@@return: ; normal return label + pop di ; restore destination index register + pop es ; restore extra segment register + pop dx ; restore dx register + pop cx ; restore cx register + pop bx ; restore bx register + pop ax ; restore ax register + add sp,LocalLength ; adjust stack for local variable + pop bp ; restore stack frame + retn ; return near to caller +_setDstDataByte endp +_putImageBits proc near ; void putImageBits(eax dstPoints,ebx srcPoints) + mov cx,ax ; move low word eax to cx register + shr eax,16 ; move high word eax to ax + push ebx ; save ebx register + push ax ; save high word on stack + push cx ; save low word on stack + call _getSrcDataByte ; get source data byte result is in al + add sp,04h ; caller adjusts stack after return + pop ebx ; restore ebx register + cmp ah,0FFh ; check return code + je @@return ; if al==0xFFh call failed + push ax ; push data byte + mov cx,bx ; move low word destination to cx register + shr ebx,16 ; move high word destination to bx + push bx ; save high word on stack + push cx ; save low word on stack + call _setDstDataByte ; set destination data byte + add sp,06h ; caller adjusts stack after return +@@return: ; return label + retn ; return near to caller +_putImageBits endp +_setSrcBitmapInfo proc far ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push bp ; save old stack frame + mov bp,sp ; create new stack frame + push dword ptr[bp+0Ah] ; push lpBitmapImage onto stack + pop bmData@@mlpSrcPtr ; resore into mlpSrcPtr + push word ptr[bp+08h] ; push srcBitmapHeight onto stack + pop bmData@@mSrcHeight ; restore into mSrcHeight + push word ptr[bp+06h] ; push srcBitmapWidth + pop bmData@@mSrcWidth ; restore into mSrcWidth + pop bp ; restore old stack frame + retf ; return far to caller +_setSrcBitmapInfo endp +_setDstBitmapInfo proc far ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push bp ; save old stack frame + mov bp,sp ; create new stack frame + push dword ptr[bp+0Ah] ; push lpBitmapImage onto stack + pop bmData@@mlpDstPtr ; resore into mlpSrcPtr + push word ptr[bp+08h] ; push srcBitmapHeight onto stack + pop bmData@@mDstHeight ; restore into mSrcHeight + push word ptr[bp+06h] ; push srcBitmapWidth + pop bmData@@mDstWidth ; restore into mSrcWidth + pop bp ; restore old stack frame + retf ; return far to caller +_setDstBitmapInfo endp +public _initEdge +public _mapTexture +public _setSrcBitmapInfo +public _setDstBitmapInfo +end + + \ No newline at end of file diff --git a/engine/TMAP16.INC b/engine/TMAP16.INC new file mode 100644 index 0000000..e6291d8 --- /dev/null +++ b/engine/TMAP16.INC @@ -0,0 +1,42 @@ +;**************************************************************************** +; FILE:TEXTURE.INC +; FUNCTION: INCLUDE FILE FOR ASM TEXTURE MAPPING +; AUTHOR:SEAN M. KESSLER +;**************************************************************************** +PureEdge STRUC + PureEdge@@mEdgeDirection DW ? + PureEdge@@mRemainingScanLines DW ? + PureEdge@@mCurrentEdgeEnd DW ? + PureEdge@@mxSource DD ? + PureEdge@@mySource DD ? + PureEdge@@mxSourceStep DD ? + PureEdge@@mySourceStep DD ? + PureEdge@@mxDestLocation DW ? + PureEdge@@mxStep DW ? + PureEdge@@mxDirection DW ? + PureEdge@@mxErrorTerm DW ? + PureEdge@@mxAdjustUp DW ? + PureEdge@@mxAdjustDown DW ? + PureEdge@@mMaxVertex DW ? + PureEdge@@mMinVertex DW ? + PureEdge@@mStartVertex DW ? + PureEdge@@mNumVertexes DW ? + PureEdge@@mlpSrcList DW NEAR PTR ? + PureEdge@@mlpDstList DW NEAR PTR ? +PureEdge ENDS +PureMap STRUC + PureMap@@mxSource DD ? + PureMap@@mySource DD ? + PureMap@@mDestWidth DD ? + PureMap@@mxSourceStep DD ? + PureMap@@mySourceStep DD ? + PureMap@@mxDest DW ? + PureMap@@mxDestMax DW ? + PureMap@@myValue DW ? + PureMap@@mlpLeftEdge DW NEAR PTR ? + PureMap@@mlpRightEdge DW NEAR PTR ? +PureMap ENDS + + + + \ No newline at end of file diff --git a/engine/TMAP32.BAK b/engine/TMAP32.BAK new file mode 100644 index 0000000..b3920cd --- /dev/null +++ b/engine/TMAP32.BAK @@ -0,0 +1,504 @@ +;************************************************************************************* +; MODULE: TMAP32.ASM DATE: DECEMBER 28, 1994 +; AUTHOR: SEAN M. KESSLER JUNE 06, 1995 +; TARGET: 32 BIT TARGET +; FUNCTION : TEXTURE MAPPING POLYGONS IN PERSPECTIVE +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.LALL +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\TMAP32.INC +bmData@@mSrcWidth DW 00h +bmData@@mSrcHeight DW 00h +bmData@@mSrcExtent DD 00h +bmData@@mlpSrcPtr DD 00h +bmData@@mDstWidth DW 00h +bmData@@mDstHeight DW 00h +bmData@@mDstExtent DD 00h +bmData@@mlpDstPtr DD 00h +bmData@@mlpDstIndexPtr DD 00h +bmData@@mPrecision DW 4000h +bmData@@mMaskValue DB 0FFh +bmData@@mUseMask DB 00h + +MINVALUE EQU -32767 +MAXVALUE EQU 32767 +MINVERTEX EQU 3 +.CODE +LOCALS +divide MACRO varOne,varTwo + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv varTwo ; divide eax/varTwo result to eax, remainder to edx +ENDM +multiply MACRO varOne,varTwo + movzx eax,varOne ; move varOne into eax register + movzx edx,varTwo ; move varTwo into ebx register + imul eax,edx ; perform multiply, result to eax +ENDM +roundEBX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov ebx,varOne ; move value into ebx register + and edx,00003FFFh ; get remainder into edx register + shr ebx,14 ; get whole number to ebx register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc ebx ; increment value in ebx +@@return: +ENDM +roundEAX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov eax,varOne ; move value into eax register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc eax ; increment value in eax +@@return: +ENDM +getPoint MACRO address,index + movzx eax,index ; move index into eax register + shl eax,02h ; multiply ax by size of far pointer + add eax,address ; add in the address + movzx ebx,[eax].Point@@y ; get the y value to bx register + movzx eax,[eax].Point@@x ; get the x value to ax register +ENDM +newEdge MACRO ; (PureEdge*) in eax, sets edx=1=error, otherwise edx=0 + movzx ebx,[eax].PureEdge@@mEdgeDirection ; save edgeDirection + push ebx ; push edgeDirection + push [eax].PureEdge@@mCurrentEdgeEnd ; push currentEdge end (ie) nextEdge index + mov ecx,eax ; move (PureEdge*) to ecx register + call _setupEdge ; attempt to setup new edge + add esp,06h ; readjust the stack + mov edx,eax ; move return code to edx register +ENDM +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + multiply ax,bmData@@mSrcWidth ; multiply (row*width)-> eax + movzx edx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl +ENDM +setDstDataByte MACRO ; void setDstDataByte(cl=charByte) + mov ebx,bmData@@mlpDstIndexPtr ; get scanline pointer to ebx + mov byte ptr[ebx],cl ; move byte into frame bitmap + inc bmData@@mlpDstIndexPtr ; increment scanline pointer +ENDM +setDstIndexPtr MACRO + multiply [esi].PureMap@@myValue,bmData@@mDstWidth ; multiply row*width result to eax + xor edx,edx ; clear edx register + mov dx,bmData@@mDstWidth ; move width into dx register + add eax,edx ; add (row*width)+width + mov edx,bmData@@mDstExtent ; move (width*height) into ebx + sub edx,eax ; calculate addValue-subValue + mov [esi].PureMap@@mBitmapIndex,edx ; save offset into bitmap +ENDM +adjDstIndexPtr MACRO + mov edx,[esi].PureMap@@mBitmapIndex ; retrieve offset into bitmap + movzx ebx,[esi].PureMap@@mxDest ; move column into bx register + add edx,ebx ; now add column number back in + add edx,bmData@@mlpDstPtr ; offset index by start + mov bmData@@mlpDstIndexPtr,edx ; store value into DstIndexPtr +ENDM +increment MACRO ; assumes (PureEdge*) is in eax register, sets carry on error + LOCAL @@newEdge,@@adjTerm,@@error,@@success,@@return + dec [eax].PureEdge@@mRemainingScanLines ; decrement mRemainingScanLines + jz @@newEdge ; if no more scan lines, try to setup new edge + mov ebx,[eax].PureEdge@@mxSourceStep ; get mxSourceStep to ebx register + add ebx,[eax].PureEdge@@mxSource ; add in mxSource + mov [eax].PureEdge@@mxSource,ebx ; replace mxSource with new value + mov ebx,[eax].PureEdge@@mySourceStep ; get mySourceStep into ebx register + add ebx,[eax].PureEdge@@mySource ; add in mySource + mov [eax].PureEdge@@mySource,ebx ; replace mySource with new value + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation into ebx register + add bx,[eax].PureEdge@@mxStep ; add in mxStep + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; get mxErrorTerm to bx register + add bx,[eax].PureEdge@@mxAdjustUp ; add in mxAdjustUp + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + cmp bx,00h ; compare mxErrorTerm to zero + jle @@success ; mxErrorTerm is less equal zero +@@adjTerm: ; adjTerm sync address + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation to bx register + add bx,[eax].PureEdge@@mxDirection ; add in mxDirection + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; move mxErrorTerm into bx register + sub bx,[eax].PureEdge@@mxAdjustDown ; add in mxAdjustDown + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + jmp @@success ; we're done here +@@newEdge: ; newEdge sync address + newEdge ; attempt to create new edge + cmp edx,0001h ; did prior call fail ? + jne @@success ; no, we're done here +@@error: ; error sync address + stc ; error sets carry + jmp @@return ; jump to return +@@success: ; ok sync address + clc ; success clears carry +@@return: ; return sync address +ENDM +scanOutputLine MACRO ; void scanOutputLine(ecx=(PureEdge*)) + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +scanOutputLineMask MACRO ; void scanOutputLineMask(ecx=(PureEdge*)) - uses mask settings + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + cmp cl,bmData@@mMaskValue ; are we attempting to output a byte in our mask + je @@skipImageBit ; if so then do not set the byte + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +_mapTexture proc near ; void mapTexture(PureMap *lpTextureMap) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + pushad ; save all general purpose registers, required. + mov esi,dword ptr[ebp+8] ; move (PureMap*) to esi register + mov edx,[esi].PureMap@@mlpLeftEdge ; move PureMap->mlpLeftEdge to edx + mov bx,[edx].PureEdge@@mMaxVertex ; move left edge mMaxVertex to bx register + getPoint [edx].PureEdge@@mlpDstList,bx ; get point + mov [esi].PureMap@@myValue,bx ; myValue=mLeftEdge[mLeft.maxVertex()].y() +@@forever: ; (ie) while(TRUE) + mov ax,[esi].PureMap@@myValue ; move myValue to ax register + cmp ax,bmData@@mDstHeight ; is myValue greater than frame buffer height + jge @@return ; if so then we're done mapping the texture + cmp ax,00h ; is myValue within frame buffer at all + jl @@skipOutputLine ; if not then skip this output line + cmp bmData@@mUseMask,00h ; are we using mask settings + jne @@scanMask ; if so then scan the output line, excluding masked bits + scanOutputLine ; otherwise just scan the output line + jmp @@skipOutputLine ; jump over the mask code +@@scanMask: ; scanMask sync address + scanOutputLineMask ; scan the output line, apply mask where appropriate +@@skipOutputLine: ; skipOutputLine sync address + mov eax,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*) left edge to eax + increment ; increment along left edge + jc @@return ; if carry set, edge failed to increment, we're done + mov eax,[esi].PureMap@@mlpRightEdge ; move (PureEdge*) right edge to eax + increment ; increment along right edge + jc @@return ; if carry set, edge failed to increment, we're done + inc [esi].PureMap@@myValue ; increment y position + jmp @@forever ; loop until all edges are completed +@@return: ; return sync address + popad ; restore all general purpose registers + pop ebp ; restore old stack frame + retn ; return near to caller +_mapTexture endp +_initEdge proc near ; void initEdge(long edgeType,PureEdge *lpEdge); + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push ebx ; save ebx register + mov ecx,dword ptr[ebp+12] ; move edge ptr to ecx register + call _getMinMaxInfo ; find minimum and maximum vertices + cmp eax,0000h ; make sure previous call returned success + jne @@return ; if not then return + push dword ptr[ebp+8] ; push edge type (-1:leftEdge,1:rightEdge) + push [ecx].PureEdge@@mStartVertex ; push startVertex + call _setupEdge ; now setup the edge + add esp,06h ; readjust the stack +@@return: ; return label + pop ebx ; restore ebx register + pop ebp ; restore old stack frame + retn ; return to caller +_initEdge endp +_setupEdge proc near ; long setupEge(long edgeType,int startVertex); +LOCAL nextVertex:WORD,startVertex:WORD,xDestWidth:WORD,yDestHeight:DWORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + mov bx,word ptr[ebp+10] ; move edge type to bx register + mov [ecx].PureEdge@@mEdgeDirection,bx ; store edge direction in variable + mov bx,word ptr[ebp+8] ; move startVertex to bx register + mov [ecx].PureEdge@@mStartVertex,bx ; move startVertex into mStartVertex + mov startVertex,bx ; move startVertex into startVertex +@@forever: ; forever loop label + mov bx,startVertex ; move startVertex to bx register + cmp bx,[ecx].PureEdge@@mMinVertex ; is startVertex same as mMinVertex ? + je @@error ; if so then we're all done here + add bx,[ecx].PureEdge@@mEdgeDirection ; add edge direction to startVertex + mov nextVertex,bx ; move result to nextVertex + mov bx,[ecx].PureEdge@@mNumVertexes ; move number of vertexes to bx register + cmp nextVertex,bx ; compare nextVertex to number of vertexes + jge @@zervert ; next vertex is greater eq number of vertexes + cmp nextVertex,00h ; compare nextVertex to zero + jl @@adjvert ; nextVertex is less than zero + jmp @@bypass ; jump over next conditonal +@@zervert: ; handle nextVertex>=number of vertexes + mov nextVertex,00h ; set nextVertex to zero + jmp @@bypass ; jump over next conditional +@@adjvert: ; handle nextVertex<0 + dec bx ; decrement value count in bx register + mov nextVertex,bx ; set nextVertex to (numVertex-1) +@@bypass: ; bypass sync address + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get mlpDstList[nextVertex] + push bx ; dstList[nextVertex].y() in bx, save it. + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + pop ax ; restore first x point to ax + sub ax,bx ; now subtract second x point + mov [ecx].PureEdge@@mRemainingScanLines,ax ; result is mRemainingScanLines + cmp ax,00h ; check scanlines==0 + je @@loopNext ; if it's zero, continue + mov yDestHeight,eax ; set yDestHeight + push nextVertex ; save nextVertex value + pop [ecx].PureEdge@@mCurrentEdgeEnd ; restore it to mCurrentEdgeEnd + getPoint [ecx].PureEdge@@mlpSrcList,startVertex ; get mlpSrcList[startVertex] + multiply ax,bmData@@mPrecision ; multiply mxSource by bmData@@mPrecision + mov [ecx].PureEdge@@mxSource,eax ; move srcList[startVertex].x() to mxSource + multiply bx,bmData@@mPrecision ; multiply mySource by bmData@@mPrecision + mov [ecx].PureEdge@@mySource,eax ; move srcList[startVertex].y() to mySource + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get mlpSrcList[nextVertex] + multiply ax,bmData@@mPrecision ; ax by bmData@@mPrecision + mov ebx,[ecx].PureEdge@@mxSource ; mxSource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].x-mxSource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mxSourceStep + mov [ecx].PureEdge@@mxSourceStep,eax ; move eax register into mxSourceStep + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get source point + mov eax,ebx ; move point.y into eax register + multiply ax,bmData@@mPrecision ; multiply by precision + mov ebx,[ecx].PureEdge@@mySource ; mySource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].y-mySource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mySourceStep + mov [ecx].PureEdge@@mySourceStep,eax ; move eax register into mySourceStep + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + mov [ecx].PureEdge@@mxDestLocation,ax ; mxDestLocation=mDstList[startVertex].x() + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get dstList[nextVertex] + sub ax,[ecx].PureEdge@@mxDestLocation ; get the width of the segment + mov xDestWidth,ax ; move the width into xDestWidth + cmp xDestWidth,00h ; is the direction negative (ie) left + jl @@negWidth ; yes, handle negative direction + mov [ecx].PureEdge@@mxDirection,01h ; set right direction indicator + mov [ecx].PureEdge@@mxErrorTerm,00h ; set mxErrorTerm to zero + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth.mRemainingScanLines + mov [ecx].PureEdge@@mxStep,ax ; move result into mxStep + jmp @@syncOne ; jump over following handler +@@negWidth: ; handle negative direction + mov [ecx].PureEdge@@mxDirection,-1 ; set left direction indicator + neg xDestWidth ; negate the width (ie) make it positive + mov ax,01h ; move one into ax register + sub ax,[ecx].PureEdge@@mRemainingScanLines ; subtract remaining scan lines from 1 + mov [ecx].PureEdge@@mxErrorTerm,ax ; move result to mxErrorTerm + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth/mRemainingScanLines + neg eax ; negate the result + mov [ecx].PureEdge@@mxStep,ax ; move result back into mxStep +@@syncOne: ; synchronization address + mov [ecx].PureEdge@@mxAdjustUp,dx ; move remainder into mxAdjustUp + push [ecx].PureEdge@@mRemainingScanLines ; save mRemainingScanLines + pop [ecx].PureEdge@@mxAdjustDown ; restore mRemainingScanLines into mxAdjustDown + jmp @@ok ; jump over forever loop +@@loopNext: ; forever loop address + push nextVertex ; save nextVertex on stack + pop [ecx].PureEdge@@mStartVertex ; restore into mStartVertex + push nextVertex ; save nextVertex on stack + pop startVertex ; restore it to local copy of startVertex + jmp @@forever ; continue with loop +@@error: ; error handler + mov eax,0001h ; set ax register to 01h to indicate failure + jmp @@return ; jump over to return label +@@ok: ; success handler + xor eax,eax ; clear out eax register to handle success +@@return: ; return label + add esp,LocalLength ; remove local variables from stack + pop ebp ; restore old stack frame + retn ; return near to caller +_setupEdge endp +_getMinMaxInfo proc near ; long getMinMaxInfo(void) +LOCAL yMin:WORD,yMax:WORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + push ecx ; save callers ecx register + mov edx,ecx ; move ecx into edx, edx has ptr to PureEdge + cmp [edx].PureEdge@@mNumVertexes,MINVERTEX ; make sure have at least 3 vertexes + jl @@error ; handle error condition + mov yMin,MINVALUE ; start yMin with some low value + mov yMax,MAXVALUE ; start yMax with some high value + xor ecx,ecx ; start at index zero + mov eax,[edx].PureEdge@@mlpDstList ; move address of (Point*) to ebx register +@@iterator: ; loop top + mov bx,[eax].Point@@y ; move point::y to bx register + cmp bx,yMin ; compare with current yMin value + jg @@greater ; point::y greater than current yMin +@@nexttest: ; if I handle the greater condition, still need to do less + cmp bx,yMax ; compare with current yMax value + jl @@less ; point::y less than current yMax + jmp @@looptest ; nuthin, continue with test +@@greater: ; handle greater condition + mov yMin,bx ; set yMin to bx register + mov [edx].PureEdge@@mMinVertex,cx ; move index number of vertex to mMinVertex + jmp @@nexttest ; go perform next test +@@less: ; handle less condition + mov yMax,bx ; set yMax to bx register + mov [edx].PureEdge@@mMaxVertex,cx ; update mMaxVertex with current index +@@looptest: ; falls through to loop + add eax,04h ; add 4 bytes to eax to address next (Point*) + inc cx ; increment cx register + cmp cx,[edx].PureEdge@@mNumVertexes ; have we reeached the number of vertexes yet? + jl @@iterator ; still more vertexes + push [edx].PureEdge@@mMaxVertex ; save mMaxVertex + pop [edx].PureEdge@@mStartVertex ; restore it to mStartVertex + jmp @@ok ; error return sync address +@@error: ; setup for error return code + mov eax,0001h ; move 01h into ax to indicate error + jmp @@return ; jump to return label +@@ok: ; setup for success return code + xor eax,eax ; clear out eax register +@@return: ; return label + pop ecx ; restore callers ecx register + add esp,LocalLength ; pop local variables off stack + pop ebp ; restore old stack frame + retn ; return near to caller +_getMinMaxInfo endp +_setSrcBitmapInfo proc near ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mSrcWidth,ax ; move width into bmData@@mSrcWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mSrcHeight,bx ; move height into bx register + multiply ax,bx ; multiply (width*height) + mov bmData@@mSrcExtent,eax ; (width*height) to mSrcExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpSrcPtr ; restore in mlpSrcPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setSrcBitmapInfo endp +_setDstBitmapInfo proc near ; void setDstBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mDstWidth,ax ; move width into mDstWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mDstHeight,bx ; move height into mDstHeight + multiply ax,bx ; multiply (width*height) + mov bmData@@mDstExtent,eax ; move (width*height) into mDstExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpDstPtr ; restore in mlpDstPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setDstBitmapInfo endp +_setMaskInfo proc near ; void setMaskInfo(WORD useMask,BYTE maskValue) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + mov eax,[ebp+08h] ; move useMask into eax register + mov bmData@@mUseMask,al ; move useMask into bmData@@mUseMask + cmp eax,0000h ; check to see if we are using the mask + je @@maskEndProc ; if we're not using mask, don't set mask value + mov eax,[ebp+0Ch] ; move mask value into eax register + mov bmData@@mMaskValue,al ; move mask value into bmData@@mMaskValue +@@maskEndProc: ; end procedure sync address + pop ebp ; restore previous stack frame + retn ; return near to caller +_setMaskInfo endp +public _mapTexture +public _initEdge +public _setSrcBitmapInfo +public _setDstBitmapInfo +public _setMaskInfo +end + diff --git a/engine/TMAP32.INC b/engine/TMAP32.INC new file mode 100644 index 0000000..1760268 --- /dev/null +++ b/engine/TMAP32.INC @@ -0,0 +1,45 @@ +;**************************************************************************** +; FILE:TEXTURE.INC +; FUNCTION: INCLUDE FILE FOR ASM TEXTURE MAPPING +; AUTHOR:SEAN M. KESSLER +;**************************************************************************** +PureEdge STRUC + PureEdge@@mEdgeDirection DW ? + PureEdge@@mRemainingScanLines DW ? + PureEdge@@mCurrentEdgeEnd DW ? + PureEdge@@mxSource DD ? + PureEdge@@mySource DD ? + PureEdge@@mxSourceStep DD ? + PureEdge@@mySourceStep DD ? + PureEdge@@mxDestLocation DW ? + PureEdge@@mxStep DW ? + PureEdge@@mxDirection DW ? + PureEdge@@mxErrorTerm DW ? + PureEdge@@mxAdjustUp DW ? + PureEdge@@mxAdjustDown DW ? + PureEdge@@mMaxVertex DW ? + PureEdge@@mMinVertex DW ? + PureEdge@@mStartVertex DW ? + PureEdge@@mNumVertexes DW ? + PureEdge@@mlpSrcList DD NEAR PTR ? + PureEdge@@mlpDstList DD NEAR PTR ? +PureEdge ENDS +PureMap STRUC + PureMap@@mBitmapIndex DD ? + PureMap@@mxSource DD ? + PureMap@@mySource DD ? + PureMap@@mDestWidth DD ? + PureMap@@mxSourceStep DD ? + PureMap@@mySourceStep DD ? + PureMap@@mxDest DW ? + PureMap@@mxDestMax DW ? + PureMap@@myValue DW ? + PureMap@@mlpLeftEdge DD NEAR PTR ? + PureMap@@mlpRightEdge DD NEAR PTR ? +PureMap ENDS +MathCache STRUC + MathCache@@mCacheOne DD ? + MathCache@@mCacheTwo DD ? + MathCache@@mCacheVal DD ? +MathCache ENDS + diff --git a/engine/TMAP32.TXT b/engine/TMAP32.TXT new file mode 100644 index 0000000..f67a47c --- /dev/null +++ b/engine/TMAP32.TXT @@ -0,0 +1,605 @@ +;************************************************************************************* +; MODULE: TMAP32.ASM DATE: DECEMBER 28, 1994 +; AUTHOR: SEAN M. KESSLER JUNE 06, 1995 +; TARGET: 32 BIT TARGET +; FUNCTION : TEXTURE MAPPING POLYGONS IN PERSPECTIVE +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.LALL +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\TMAP32.INC +;bmData@@mGetCache Cache ? +bmData@@mGetCache GetCache ? +bmData@@mSrcWidth DW 00h +bmData@@mSrcHeight DW 00h +bmData@@mSrcExtent DD 00h +bmData@@mlpSrcPtr DD 00h +bmData@@mDstWidth DW 00h +bmData@@mDstHeight DW 00h +bmData@@mDstExtent DD 00h +bmData@@mDstCacheRow DW 00h +bmData@@mDstCacheMul DD 00h +bmData@@mlpDstPtr DD 00h +bmData@@mlpDstIndexPtr DD 00h +bmData@@mPrecision DW 4000h +bmData@@mMulCacheOne DW 00h +bmData@@mMulCacheTwo DW 00h +bmData@@mMulCacheVal DD 00h +MINVALUE EQU -32767 +MAXVALUE EQU 32767 +MINVERTEX EQU 3 +.CODE +LOCALS + +isInGetCache MACRO cacheItem + LOCAL @@return,@@okReturn,@@initCache,@@checkCachePlusOne, \ + @@checkCachePlusTwo,@@checkCachePlusThree,@@checkCachePlusFour + cmp bmData@@mGetCache.GetCache@@mCacheStatus,0FFh + je @@initCache + cmp cacheItem,bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mColRow + jne @@checkCachePlusOne + mov cl,bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mCacheData + jmp @@okReturn +@@checkCachePlusOne: + cmp cacheItem,bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mColRow + jne @@checkCachePlusTwo + mov cl,bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mCacheData + jmp @@okReturn +@@checkCachePlusTwo: + cmp cacheItem,bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mColRow + jne @@checkCachePlusThree + mov cl,bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mCacheData + jmp @@okReturn +@@checkCachePlusThree: + cmp cacheItem,bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mColRow + jne @@checkCachePlusFour + mov cl,bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mCacheData + jmp @@okReturn +@@checkCachePlusFour: + cmp cacheItem,bmData@@mGetCache.GetCache@@mCacheData[4].GetCacheData@@mColRow + jne @@noGetCache + mov cl,bmData@@mGetCache.GetCache@@mCacheData[4].GetCacheData@@mCacheData + jmp @@okReturn +@@initCache: + mov bmData@@mGetCache.GetCache@@mCacheStatus,00h ; activate cache mechanism + zeroCache +@@noGetCache: + stc + jmp @@return +@@okReturn: + inc bmData@@mGetCache.GetCache@@mCacheHits + clc +@@return: +ENDM +zeroCache MACRO + mov bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mColRow,0FFFFFFFFh + mov bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mCacheData,0FFh + mov bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mColRow,0FFFFFFFFh + mov bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mCacheData,0FFh + mov bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mColRow,0FFFFFFFFh + mov bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mCacheData,0FFh + mov bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mColRow,0FFFFFFFFh + mov bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mCacheData,0FFh + mov bmData@@mGetCache.GetCache@@mCacheData[4].GetCacheData@@mColRow,0FFFFFFFFh + mov bmData@@mGetCache.GetCache@@mCacheData[4].GetCacheData@@mCacheData,0FFh +ENDM +rollCache MACRO + mov edx,bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mColRow + mov bl,bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mCacheData + mov bmData@@mGetCache.GetCache@@mCacheData[4].GetCacheData@@mColRow,edx + mov bmData@@mGetCache.GetCache@@mCacheData[4].GetCacheData@@mCacheData,bl + mov edx,bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mColRow + mov bl,bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mCacheData + mov bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mColRow,edx + mov bmData@@mGetCache.GetCache@@mCacheData[3].GetCacheData@@mCacheData,bl + mov edx,bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mColRow + mov bl,bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mCacheData + mov bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mColRow,edx + mov bmData@@mGetCache.GetCache@@mCacheData[2].GetCacheData@@mCacheData,bl + mov edx,bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mColRow + mov bl,bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mCacheData + mov bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mColRow,edx + mov bmData@@mGetCache.GetCache@@mCacheData[1].GetCacheData@@mCacheData,bl +ENDM +putCacheColRow MACRO cacheColRow + mov bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mColRow,cacheColRow +ENDM +putCacheData MACRO cacheData + mov bmData@@mGetCache.GetCache@@mCacheData[0].GetCacheData@@mCacheData,cacheData +ENDM + + + + + +multiply MACRO varOne,varTwo + LOCAL @@bypassCache,@@return + movzx eax,varOne ; move varOne into eax register + movzx edx,varTwo ; move varTwo into ebx register + cmp ax,bmData@@mMulCacheOne ; check varOne against cache varOne + jne @@bypassCache ; no match, we perform the multiply + cmp dx,bmData@@mMulCacheTwo ; check varTwo against cache varTwo + jne @@bypassCache ; no match, we perform the multiply + mov eax,bmData@@mMulCacheVal ; cache hit, so use the cache value result + jmp @@return ; we're done here +@@bypassCache: ; bypass cache sync address + mov bmData@@mMulCacheOne,ax ; store source into cache source + mov bmData@@mMulCacheTwo,dx ; store destination + imul eax,edx ; perform multiply, result to eax + mov bmData@@mMulCacheVal,eax ; store result into cache result +@@return: ; return sync address +ENDM +divide MACRO varOne,varTwo + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv varTwo ; divide eax/varTwo result to eax, remainder to edx +ENDM +roundEBX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov ebx,varOne ; move value into ebx register + and edx,00003FFFh ; get remainder into edx register + shr ebx,14 ; get whole number to ebx register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc ebx ; increment value in ebx +@@return: +ENDM +roundEAX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov eax,varOne ; move value into eax register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc eax ; increment value in eax +@@return: +ENDM +getPoint MACRO address,index + movzx eax,index ; move index into eax register + shl eax,02h ; multiply ax by size of far pointer + add eax,address ; add in the address + movzx ebx,[eax].Point@@y ; get the y value to bx register + movzx eax,[eax].Point@@x ; get the x value to ax register +ENDM +newEdge MACRO ; (PureEdge*) in eax, sets edx=1=error, otherwise edx=0 + movzx ebx,[eax].PureEdge@@mEdgeDirection ; save edgeDirection + push ebx ; push edgeDirection + push [eax].PureEdge@@mCurrentEdgeEnd ; push currentEdge end (ie) nextEdge index + mov ecx,eax ; move (PureEdge*) to ecx register + call _setupEdge ; attempt to setup new edge + add esp,06h ; readjust the stack + mov edx,eax ; move return code to edx register +ENDM + + +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + LOCAL @@return,@@bypassCache,@@initCache ; local sync address labels + isInGetCache eax + jc @@bypassCache + jmp @@return + + + +; cmp bmData@@mGetCache.Cache@@mCacheStatus,0FFh ; is cache active yet ?? +; je @@initCache ; no, cache has not been intialized +; cmp eax,bmData@@mGetCache.Cache@@mColRow ; check colRow for cache hit +; jne @@bypassCache ; cache was not hit, so do the multiply +; mov cl,bmData@@mGetCache.Cache@@mCacheData ; yes, the cache was hit, use value +; jmp @@return ; now return clean. +;@@initCache: ; init cache sync address +; mov bmData@@mGetCache.Cache@@mCacheStatus,00h ; activate cache mechanism +@@bypassCache: ; bypass cache sync address + + rollCache + putCacheColRow ebx + + mov ebx,eax ; move colRow to ebx register +; mov bmData@@mGetCache.Cache@@mColRow,eax ; move colRow to cache colRow + multiply bx,bmData@@mSrcWidth ; multiply (row*width)-> eax + xor edx,edx ; clear edx + mov dx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + shr ebx,10h ; ebx gets column + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl +; mov bmData@@mGetCache.Cache@@mCacheData,cl ; save byte value to cache value + putCacheData cl +@@return: ; return sync address +ENDM + + + +if 0 +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + LOCAL @@return,@@bypassCache,@@initCache ; local sync address labels + cmp bmData@@mGetCache.Cache@@mCacheStatus,0FFh ; is cache active yet ?? + je @@initCache ; no, cache has not been intialized + cmp eax,bmData@@mGetCache.Cache@@mColRow ; check colRow for cache hit + jne @@bypassCache ; cache was not hit, so do the multiply + mov cl,bmData@@mGetCache.Cache@@mCacheData ; yes, the cache was hit, use value + jmp @@return ; now return clean. +@@initCache: ; init cache sync address + mov bmData@@mGetCache.Cache@@mCacheStatus,00h ; activate cache mechanism +@@bypassCache: ; bypass cache sync address + mov ebx,eax ; move colRow to ebx register + mov bmData@@mGetCache.Cache@@mColRow,eax ; move colRow to cache colRow + multiply bx,bmData@@mSrcWidth ; multiply (row*width)-> eax + xor edx,edx ; clear edx + mov dx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + shr ebx,10h ; ebx gets column + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl + mov bmData@@mGetCache.Cache@@mCacheData,cl ; save byte value to cache value +@@return: ; return sync address +ENDM +endif +setDstDataByte MACRO ; void setDstDataByte(cl=charByte) + mov ebx,bmData@@mlpDstIndexPtr ; get scanline pointer to ebx + mov byte ptr[ebx],cl ; move byte into frame bitmap + inc bmData@@mlpDstIndexPtr ; increment scanline pointer +ENDM +setDstIndexPtr MACRO + multiply [esi].PureMap@@myValue,bmData@@mDstWidth ; multiply row*width result to eax + xor edx,edx ; clear edx register + mov dx,bmData@@mDstWidth ; move width into dx register + add eax,edx ; add (row*width)+width + mov edx,bmData@@mDstExtent ; move (width*height) into ebx + sub edx,eax ; calculate addValue-subValue + mov bx,[esi].PureMap@@mxDest ; move column into bx register + and ebx,0000FFFFh ; zero out high word of ebx + add edx,ebx ; now add column number back in + mov ebx,bmData@@mlpDstPtr ; move mlpDstPtr to ebx register + add ebx,edx ; add offset to mlpDstPtr + mov bmData@@mlpDstIndexPtr,ebx ; store offset to new index pointer +ENDM +increment MACRO ; assumes (PureEdge*) is in eax register, sets carry on error + LOCAL @@newEdge,@@adjTerm,@@error,@@success,@@return + dec [eax].PureEdge@@mRemainingScanLines ; decrement mRemainingScanLines + jz @@newEdge ; if no more scan lines, try to setup new edge + mov ebx,[eax].PureEdge@@mxSourceStep ; get mxSourceStep to ebx register + add ebx,[eax].PureEdge@@mxSource ; add in mxSource + mov [eax].PureEdge@@mxSource,ebx ; replace mxSource with new value + mov ebx,[eax].PureEdge@@mySourceStep ; get mySourceStep into ebx register + add ebx,[eax].PureEdge@@mySource ; add in mySource + mov [eax].PureEdge@@mySource,ebx ; replace mySource with new value + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation into ebx register + add bx,[eax].PureEdge@@mxStep ; add in mxStep + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; get mxErrorTerm to bx register + add bx,[eax].PureEdge@@mxAdjustUp ; add in mxAdjustUp + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + cmp bx,00h ; compare mxErrorTerm to zero + jle @@success ; mxErrorTerm is less equal zero +@@adjTerm: ; adjTerm sync address + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation to bx register + add bx,[eax].PureEdge@@mxDirection ; add in mxDirection + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; move mxErrorTerm into bx register + sub bx,[eax].PureEdge@@mxAdjustDown ; add in mxAdjustDown + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + jmp @@success ; we're done here +@@newEdge: ; newEdge sync address + newEdge ; attempt to create new edge + cmp edx,0001h ; did prior call fail ? + jne @@success ; no, we're done here +@@error: ; error sync address + stc ; error sets carry + jmp @@return ; jump to return +@@success: ; ok sync address + clc ; success clears carry +@@return: ; return sync address +ENDM +scanOutputLine MACRO ; void scanOutputLine(ecx=(PureEdge*)) + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + mov bmData@@mlpDstIndexPtr,00h ; initialize scanline pointer +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + cmp bmData@@mlpDstIndexPtr,00h ; check the index pointer + jne @@continue ; if it's not null we continue along + setDstIndexPtr ; set destination index pointer to row/col +@@continue: ; sync address + roundEBX [esi].PureMap@@mySource ; convert and round PureMap@@mySource -> ebx + roundEAX [esi].PureMap@@mxSource ; convert and round PureMap@@mxSource -> eax + shl eax,16 ; move column into high word + mov ax,bx ; move row into low word + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +_mapTexture proc near ; void mapTexture(PureMap *lpTextureMap) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + pushad ; save all general purpose registers, required. + mov esi,dword ptr[ebp+8] ; move (PureMap*) to esi register + mov edx,[esi].PureMap@@mlpLeftEdge ; move PureMap->mlpLeftEdge to edx + mov bx,[edx].PureEdge@@mMaxVertex ; move left edge mMaxVertex to bx register + getPoint [edx].PureEdge@@mlpDstList,bx ; get point + mov [esi].PureMap@@myValue,bx ; myValue=mLeftEdge[mLeft.maxVertex()].y() +@@forever: ; (ie) while(TRUE) + mov ax,[esi].PureMap@@myValue ; move myValue to ax register + cmp ax,bmData@@mDstHeight ; is myValue greater than frame buffer height + jge @@return ; if so then we're done mapping the texture + cmp ax,00h ; is myValue within frame buffer at all + jl @@skipOutputLine ; if not then skip this output line + scanOutputLine ; scan along the output line, (PureMap*) in ecx for macro +@@skipOutputLine: ; skipOutputLine sync address + mov eax,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*) left edge to eax + increment ; increment along left edge + jc @@return ; if carry set, edge failed to increment, we're done + mov eax,[esi].PureMap@@mlpRightEdge ; move (PureEdge*) right edge to eax + increment ; increment along right edge + jc @@return ; if carry set, edge failed to increment, we're done + inc [esi].PureMap@@myValue ; increment y position + jmp @@forever ; loop until all edges are completed +@@return: ; return sync address + popad ; restore all general purpose registers + pop ebp ; restore old stack frame + retn ; return near to caller +_mapTexture endp +_initEdge proc near ; void initEdge(long edgeType,PureEdge *lpEdge); + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push ebx ; save ebx register + mov ecx,dword ptr[ebp+12] ; move edge ptr to ecx register + call _getMinMaxInfo ; find minimum and maximum vertices + cmp eax,0000h ; make sure previous call returned success + jne @@return ; if not then return + push dword ptr[ebp+8] ; push edge type (-1:leftEdge,1:rightEdge) + push [ecx].PureEdge@@mStartVertex ; push startVertex + call _setupEdge ; now setup the edge + add esp,06h ; readjust the stack +@@return: ; return label + pop ebx ; restore ebx register + pop ebp ; restore old stack frame + retn ; return to caller +_initEdge endp +_setupEdge proc near ; long setupEge(long edgeType,int startVertex); +LOCAL nextVertex:WORD,startVertex:WORD,xDestWidth:WORD,yDestHeight:DWORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + mov bx,word ptr[ebp+10] ; move edge type to bx register + mov [ecx].PureEdge@@mEdgeDirection,bx ; store edge direction in variable + mov bx,word ptr[ebp+8] ; move startVertex to bx register + mov [ecx].PureEdge@@mStartVertex,bx ; move startVertex into mStartVertex + mov startVertex,bx ; move startVertex into startVertex +@@forever: ; forever loop label + mov bx,startVertex ; move startVertex to bx register + cmp bx,[ecx].PureEdge@@mMinVertex ; is startVertex same as mMinVertex ? + je @@error ; if so then we're all done here + add bx,[ecx].PureEdge@@mEdgeDirection ; add edge direction to startVertex + mov nextVertex,bx ; move result to nextVertex + mov bx,[ecx].PureEdge@@mNumVertexes ; move number of vertexes to bx register + cmp nextVertex,bx ; compare nextVertex to number of vertexes + jge @@zervert ; next vertex is greater eq number of vertexes + cmp nextVertex,00h ; compare nextVertex to zero + jl @@adjvert ; nextVertex is less than zero + jmp @@bypass ; jump over next conditonal +@@zervert: ; handle nextVertex>=number of vertexes + mov nextVertex,00h ; set nextVertex to zero + jmp @@bypass ; jump over next conditional +@@adjvert: ; handle nextVertex<0 + dec bx ; decrement value count in bx register + mov nextVertex,bx ; set nextVertex to (numVertex-1) +@@bypass: ; bypass sync address + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get mlpDstList[nextVertex] + push bx ; dstList[nextVertex].y() in bx, save it. + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + pop ax ; restore first x point to ax + sub ax,bx ; now subtract second x point + mov [ecx].PureEdge@@mRemainingScanLines,ax ; result is mRemainingScanLines + cmp ax,00h ; check scanlines==0 + je @@loopNext ; if it's zero, continue + mov yDestHeight,eax ; set yDestHeight + push nextVertex ; save nextVertex value + pop [ecx].PureEdge@@mCurrentEdgeEnd ; restore it to mCurrentEdgeEnd + getPoint [ecx].PureEdge@@mlpSrcList,startVertex ; get mlpSrcList[startVertex] + multiply ax,bmData@@mPrecision ; multiply mxSource by bmData@@mPrecision + mov [ecx].PureEdge@@mxSource,eax ; move srcList[startVertex].x() to mxSource + multiply bx,bmData@@mPrecision ; multiply mySource by bmData@@mPrecision + mov [ecx].PureEdge@@mySource,eax ; move srcList[startVertex].y() to mySource + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get mlpSrcList[nextVertex] + multiply ax,bmData@@mPrecision ; ax by bmData@@mPrecision + mov ebx,[ecx].PureEdge@@mxSource ; mxSource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].x-mxSource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mxSourceStep + mov [ecx].PureEdge@@mxSourceStep,eax ; move eax register into mxSourceStep + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get source point + mov eax,ebx ; move point.y into eax register + multiply ax,bmData@@mPrecision ; multiply by precision + mov ebx,[ecx].PureEdge@@mySource ; mySource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].y-mySource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mySourceStep + mov [ecx].PureEdge@@mySourceStep,eax ; move eax register into mySourceStep + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + mov [ecx].PureEdge@@mxDestLocation,ax ; mxDestLocation=mDstList[startVertex].x() + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get dstList[nextVertex] + sub ax,[ecx].PureEdge@@mxDestLocation ; get the width of the segment + mov xDestWidth,ax ; move the width into xDestWidth + cmp xDestWidth,00h ; is the direction negative (ie) left + jl @@negWidth ; yes, handle negative direction + mov [ecx].PureEdge@@mxDirection,01h ; set right direction indicator + mov [ecx].PureEdge@@mxErrorTerm,00h ; set mxErrorTerm to zero + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth.mRemainingScanLines + mov [ecx].PureEdge@@mxStep,ax ; move result into mxStep + jmp @@syncOne ; jump over following handler +@@negWidth: ; handle negative direction + mov [ecx].PureEdge@@mxDirection,-1 ; set left direction indicator + neg xDestWidth ; negate the width (ie) make it positive + mov ax,01h ; move one into ax register + sub ax,[ecx].PureEdge@@mRemainingScanLines ; subtract remaining scan lines from 1 + mov [ecx].PureEdge@@mxErrorTerm,ax ; move result to mxErrorTerm + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth/mRemainingScanLines + neg eax ; negate the result + mov [ecx].PureEdge@@mxStep,ax ; move result back into mxStep +@@syncOne: ; synchronization address + mov [ecx].PureEdge@@mxAdjustUp,dx ; move remainder into mxAdjustUp + push [ecx].PureEdge@@mRemainingScanLines ; save mRemainingScanLines + pop [ecx].PureEdge@@mxAdjustDown ; restore mRemainingScanLines into mxAdjustDown + jmp @@ok ; jump over forever loop +@@loopNext: ; forever loop address + push nextVertex ; save nextVertex on stack + pop [ecx].PureEdge@@mStartVertex ; restore into mStartVertex + push nextVertex ; save nextVertex on stack + pop startVertex ; restore it to local copy of startVertex + jmp @@forever ; continue with loop +@@error: ; error handler + mov eax,0001h ; set ax register to 01h to indicate failure + jmp @@return ; jump over to return label +@@ok: ; success handler + xor eax,eax ; clear out eax register to handle success +@@return: ; return label + add esp,LocalLength ; remove local variables from stack + pop ebp ; restore old stack frame + retn ; return near to caller +_setupEdge endp +_getMinMaxInfo proc near ; long getMinMaxInfo(void) +LOCAL yMin:WORD,yMax:WORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + push ecx ; save callers ecx register + mov edx,ecx ; move ecx into edx, edx has ptr to PureEdge + cmp [edx].PureEdge@@mNumVertexes,MINVERTEX ; make sure have at least 3 vertexes + jl @@error ; handle error condition + mov yMin,MINVALUE ; start yMin with some low value + mov yMax,MAXVALUE ; start yMax with some high value + xor ecx,ecx ; start at index zero + mov eax,[edx].PureEdge@@mlpDstList ; move address of (Point*) to ebx register +@@iterator: ; loop top + mov bx,[eax].Point@@y ; move point::y to bx register + cmp bx,yMin ; compare with current yMin value + jg @@greater ; point::y greater than current yMin +@@nexttest: ; if I handle the greater condition, still need to do less + cmp bx,yMax ; compare with current yMax value + jl @@less ; point::y less than current yMax + jmp @@looptest ; nuthin, continue with test +@@greater: ; handle greater condition + mov yMin,bx ; set yMin to bx register + mov [edx].PureEdge@@mMinVertex,cx ; move index number of vertex to mMinVertex + jmp @@nexttest ; go perform next test +@@less: ; handle less condition + mov yMax,bx ; set yMax to bx register + mov [edx].PureEdge@@mMaxVertex,cx ; update mMaxVertex with current index +@@looptest: ; falls through to loop + add eax,04h ; add 4 bytes to eax to address next (Point*) + inc cx ; increment cx register + cmp cx,[edx].PureEdge@@mNumVertexes ; have we reeached the number of vertexes yet? + jl @@iterator ; still more vertexes + push [edx].PureEdge@@mMaxVertex ; save mMaxVertex + pop [edx].PureEdge@@mStartVertex ; restore it to mStartVertex + jmp @@ok ; error return sync address +@@error: ; setup for error return code + mov eax,0001h ; move 01h into ax to indicate error + jmp @@return ; jump to return label +@@ok: ; setup for success return code + xor eax,eax ; clear out eax register +@@return: ; return label + pop ecx ; restore callers ecx register + add esp,LocalLength ; pop local variables off stack + pop ebp ; restore old stack frame + retn ; return near to caller +_getMinMaxInfo endp +_setSrcBitmapInfo proc near ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mSrcWidth,ax ; move width into bmData@@mSrcWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mSrcHeight,bx ; move height into bx register + multiply ax,bx ; multiply (width*height) + mov bmData@@mSrcExtent,eax ; (width*height) to mSrcExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpSrcPtr ; restore in mlpSrcPtr + + mov bmData@@mGetCache.GetCache@@mCacheStatus,0FFh + mov bmData@@mGetCache.GetCache@@mCacheHits,00000000h + +; mov bmData@@mGetCache.Cache@@mColRow,00h ; move zero into cache colRow +; mov bmData@@mGetCache.Cache@@mCacheData,00h ; move zero into cache data +; mov bmData@@mGetCache.Cache@@mCacheStatus,0FFh ; move FFh into cache status + + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setSrcBitmapInfo endp +_setDstBitmapInfo proc near ; void setDstBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mDstWidth,ax ; move width into mDstWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mDstHeight,bx ; move height into mDstHeight + multiply ax,bx ; multiply (width*height) + mov bmData@@mDstExtent,eax ; move (width*height) into mDstExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpDstPtr ; restore in mlpDstPtr + mov bmData@@mDstCacheRow,00h ; move zero to cache row + mov bmData@@mDstCacheMul,00h ; move zero to cache multiply result + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setDstBitmapInfo endp +public _mapTexture +public _initEdge +public _setSrcBitmapInfo +public _setDstBitmapInfo +end + diff --git a/engine/Tmap32.asm b/engine/Tmap32.asm new file mode 100644 index 0000000..b3920cd --- /dev/null +++ b/engine/Tmap32.asm @@ -0,0 +1,504 @@ +;************************************************************************************* +; MODULE: TMAP32.ASM DATE: DECEMBER 28, 1994 +; AUTHOR: SEAN M. KESSLER JUNE 06, 1995 +; TARGET: 32 BIT TARGET +; FUNCTION : TEXTURE MAPPING POLYGONS IN PERSPECTIVE +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.LALL +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\TMAP32.INC +bmData@@mSrcWidth DW 00h +bmData@@mSrcHeight DW 00h +bmData@@mSrcExtent DD 00h +bmData@@mlpSrcPtr DD 00h +bmData@@mDstWidth DW 00h +bmData@@mDstHeight DW 00h +bmData@@mDstExtent DD 00h +bmData@@mlpDstPtr DD 00h +bmData@@mlpDstIndexPtr DD 00h +bmData@@mPrecision DW 4000h +bmData@@mMaskValue DB 0FFh +bmData@@mUseMask DB 00h + +MINVALUE EQU -32767 +MAXVALUE EQU 32767 +MINVERTEX EQU 3 +.CODE +LOCALS +divide MACRO varOne,varTwo + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv varTwo ; divide eax/varTwo result to eax, remainder to edx +ENDM +multiply MACRO varOne,varTwo + movzx eax,varOne ; move varOne into eax register + movzx edx,varTwo ; move varTwo into ebx register + imul eax,edx ; perform multiply, result to eax +ENDM +roundEBX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov ebx,varOne ; move value into ebx register + and edx,00003FFFh ; get remainder into edx register + shr ebx,14 ; get whole number to ebx register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc ebx ; increment value in ebx +@@return: +ENDM +roundEAX MACRO varOne +LOCAL @@return + mov edx,varOne ; move value into edx register + mov eax,varOne ; move value into eax register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment ebx + jle @@return ; otherwise return + inc eax ; increment value in eax +@@return: +ENDM +getPoint MACRO address,index + movzx eax,index ; move index into eax register + shl eax,02h ; multiply ax by size of far pointer + add eax,address ; add in the address + movzx ebx,[eax].Point@@y ; get the y value to bx register + movzx eax,[eax].Point@@x ; get the x value to ax register +ENDM +newEdge MACRO ; (PureEdge*) in eax, sets edx=1=error, otherwise edx=0 + movzx ebx,[eax].PureEdge@@mEdgeDirection ; save edgeDirection + push ebx ; push edgeDirection + push [eax].PureEdge@@mCurrentEdgeEnd ; push currentEdge end (ie) nextEdge index + mov ecx,eax ; move (PureEdge*) to ecx register + call _setupEdge ; attempt to setup new edge + add esp,06h ; readjust the stack + mov edx,eax ; move return code to edx register +ENDM +getSrcDataByte MACRO ; BYTE getSrcDataByte(eax=colRow) + multiply ax,bmData@@mSrcWidth ; multiply (row*width)-> eax + movzx edx,bmData@@mSrcWidth ; move width to edx register + add eax,edx ; add in width (ie) (row*width)+width + mov edx,bmData@@mSrcExtent ; move source bitmap extent to edx + sub edx,eax ; sub result from source bmp extent + add edx,ebx ; add column back in + mov ebx,bmData@@mlpSrcPtr ; move mlpSrcPtr to ebx register + mov cl,byte ptr[ebx+edx] ; get source byte at ebx+edx to cl +ENDM +setDstDataByte MACRO ; void setDstDataByte(cl=charByte) + mov ebx,bmData@@mlpDstIndexPtr ; get scanline pointer to ebx + mov byte ptr[ebx],cl ; move byte into frame bitmap + inc bmData@@mlpDstIndexPtr ; increment scanline pointer +ENDM +setDstIndexPtr MACRO + multiply [esi].PureMap@@myValue,bmData@@mDstWidth ; multiply row*width result to eax + xor edx,edx ; clear edx register + mov dx,bmData@@mDstWidth ; move width into dx register + add eax,edx ; add (row*width)+width + mov edx,bmData@@mDstExtent ; move (width*height) into ebx + sub edx,eax ; calculate addValue-subValue + mov [esi].PureMap@@mBitmapIndex,edx ; save offset into bitmap +ENDM +adjDstIndexPtr MACRO + mov edx,[esi].PureMap@@mBitmapIndex ; retrieve offset into bitmap + movzx ebx,[esi].PureMap@@mxDest ; move column into bx register + add edx,ebx ; now add column number back in + add edx,bmData@@mlpDstPtr ; offset index by start + mov bmData@@mlpDstIndexPtr,edx ; store value into DstIndexPtr +ENDM +increment MACRO ; assumes (PureEdge*) is in eax register, sets carry on error + LOCAL @@newEdge,@@adjTerm,@@error,@@success,@@return + dec [eax].PureEdge@@mRemainingScanLines ; decrement mRemainingScanLines + jz @@newEdge ; if no more scan lines, try to setup new edge + mov ebx,[eax].PureEdge@@mxSourceStep ; get mxSourceStep to ebx register + add ebx,[eax].PureEdge@@mxSource ; add in mxSource + mov [eax].PureEdge@@mxSource,ebx ; replace mxSource with new value + mov ebx,[eax].PureEdge@@mySourceStep ; get mySourceStep into ebx register + add ebx,[eax].PureEdge@@mySource ; add in mySource + mov [eax].PureEdge@@mySource,ebx ; replace mySource with new value + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation into ebx register + add bx,[eax].PureEdge@@mxStep ; add in mxStep + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; get mxErrorTerm to bx register + add bx,[eax].PureEdge@@mxAdjustUp ; add in mxAdjustUp + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + cmp bx,00h ; compare mxErrorTerm to zero + jle @@success ; mxErrorTerm is less equal zero +@@adjTerm: ; adjTerm sync address + mov bx,[eax].PureEdge@@mxDestLocation ; get mxDestLocation to bx register + add bx,[eax].PureEdge@@mxDirection ; add in mxDirection + mov [eax].PureEdge@@mxDestLocation,bx ; replace mxDestLocation with new value + mov bx,[eax].PureEdge@@mxErrorTerm ; move mxErrorTerm into bx register + sub bx,[eax].PureEdge@@mxAdjustDown ; add in mxAdjustDown + mov [eax].PureEdge@@mxErrorTerm,bx ; replace mxErrorTerm with new value + jmp @@success ; we're done here +@@newEdge: ; newEdge sync address + newEdge ; attempt to create new edge + cmp edx,0001h ; did prior call fail ? + jne @@success ; no, we're done here +@@error: ; error sync address + stc ; error sets carry + jmp @@return ; jump to return +@@success: ; ok sync address + clc ; success clears carry +@@return: ; return sync address +ENDM +scanOutputLine MACRO ; void scanOutputLine(ecx=(PureEdge*)) + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +scanOutputLineMask MACRO ; void scanOutputLineMask(ecx=(PureEdge*)) - uses mask settings + LOCAL @@xLoop,@@skipImageBit,@@continue,@@return ; local label + mov edi,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*)lpLeftEdge to ecx register + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource to eax register + mov [esi].PureMap@@mxSource,eax ; move PureEdge::mxSource to PureMap::mxSource + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource to eax register + mov [esi].PureMap@@mySource,eax ; move PureEdge::mySource to PureMap::mySource + mov dx,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax + mov [esi].PureMap@@mxDest,dx ; move PureEdge::mxDestLocation to PureMap::mxDest + mov edi,[esi].PureMap@@mlpRightEdge ; move (PureEdge*)lpRightEdge to ecx register + xor eax,eax ; clear out eax register + mov ax,[edi].PureEdge@@mxDestLocation ; move PureEdge::mxDestLocation to ax register + mov [esi].PureMap@@mxDestMax,ax ; move PureEdge::mxDestLocation to PureMap::mxDestMax + sub ax,dx ; mxDestMax-mxDest + jz @@return ; if width is zero then return + mov [esi].PureMap@@mDestWidth,eax ; move width into PureMap::mDestWidth + mov eax,[edi].PureEdge@@mxSource ; move PureEdge::mxSource into eax + sub eax,[esi].PureMap@@mxSource ; subtract out PureMap::mxSource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mxSourceStep,eax ; move new value to PureMap@@mxSourceStep + mov eax,[edi].PureEdge@@mySource ; move PureEdge::mySource into eax + sub eax,[esi].PureMap@@mySource ; subtract out PureMap::mySource + divide eax,[esi].PureMap@@mDestWidth ; now divide by PureMap::mDestWidth + mov [esi].PureMap@@mySourceStep,eax ; move new value to PureMap@@mySourceStep + setDstIndexPtr ; set destination index pointer to row/col +@@xLoop: ; xLoop test + mov ax,[esi].PureMap@@mxDest ; move mxDest to ax register + cmp ax,[esi].PureMap@@mxDestMax ; compare mxDest to ax register + jge @@return ; if its greater equal return + cmp ax,bmData@@mDstWidth ; is destination x greater than frame width? + jge @@return ; yes, stop scanning this output line + or ax,ax ; does mxDest extend too far left of frame buffer + jl @@skipImageBit ; if it does then skip putImageBits + adjDstIndexPtr ; adjust index to reflect changed mxDest +@@continue: ; sync address + roundEAX [esi].PureMap@@mySource ; round PureMap@@mySource -> eax (row) + roundEBX [esi].PureMap@@mxSource ; round PureMap@@mxSource -> ebx (col) + getSrcDataByte ; getSrcDataByte at eax=colRow, byteValue gets placed into cl + cmp cl,bmData@@mMaskValue ; are we attempting to output a byte in our mask + je @@skipImageBit ; if so then do not set the byte + setDstDataByte ; setDstDataByte at mlpDstIndexPtr,cl=byteValue +@@skipImageBit: ; skipImageBit bypass address + mov eax,[esi].PureMap@@mxSourceStep ; move mxSourceStep to eax + add [esi].PureMap@@mxSource,eax ; add mxSouceStep to mxSource + mov ebx,[esi].PureMap@@mySourceStep ; move mySourceStep to eax + add [esi].PureMap@@mySource,ebx ; add mySourceStep to mySource + inc [esi].PureMap@@mxDest ; increment loop counter + jmp @@xLoop ; loop through xLoop +@@return: ; return sync label +ENDM +_mapTexture proc near ; void mapTexture(PureMap *lpTextureMap) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + pushad ; save all general purpose registers, required. + mov esi,dword ptr[ebp+8] ; move (PureMap*) to esi register + mov edx,[esi].PureMap@@mlpLeftEdge ; move PureMap->mlpLeftEdge to edx + mov bx,[edx].PureEdge@@mMaxVertex ; move left edge mMaxVertex to bx register + getPoint [edx].PureEdge@@mlpDstList,bx ; get point + mov [esi].PureMap@@myValue,bx ; myValue=mLeftEdge[mLeft.maxVertex()].y() +@@forever: ; (ie) while(TRUE) + mov ax,[esi].PureMap@@myValue ; move myValue to ax register + cmp ax,bmData@@mDstHeight ; is myValue greater than frame buffer height + jge @@return ; if so then we're done mapping the texture + cmp ax,00h ; is myValue within frame buffer at all + jl @@skipOutputLine ; if not then skip this output line + cmp bmData@@mUseMask,00h ; are we using mask settings + jne @@scanMask ; if so then scan the output line, excluding masked bits + scanOutputLine ; otherwise just scan the output line + jmp @@skipOutputLine ; jump over the mask code +@@scanMask: ; scanMask sync address + scanOutputLineMask ; scan the output line, apply mask where appropriate +@@skipOutputLine: ; skipOutputLine sync address + mov eax,[esi].PureMap@@mlpLeftEdge ; move (PureEdge*) left edge to eax + increment ; increment along left edge + jc @@return ; if carry set, edge failed to increment, we're done + mov eax,[esi].PureMap@@mlpRightEdge ; move (PureEdge*) right edge to eax + increment ; increment along right edge + jc @@return ; if carry set, edge failed to increment, we're done + inc [esi].PureMap@@myValue ; increment y position + jmp @@forever ; loop until all edges are completed +@@return: ; return sync address + popad ; restore all general purpose registers + pop ebp ; restore old stack frame + retn ; return near to caller +_mapTexture endp +_initEdge proc near ; void initEdge(long edgeType,PureEdge *lpEdge); + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push ebx ; save ebx register + mov ecx,dword ptr[ebp+12] ; move edge ptr to ecx register + call _getMinMaxInfo ; find minimum and maximum vertices + cmp eax,0000h ; make sure previous call returned success + jne @@return ; if not then return + push dword ptr[ebp+8] ; push edge type (-1:leftEdge,1:rightEdge) + push [ecx].PureEdge@@mStartVertex ; push startVertex + call _setupEdge ; now setup the edge + add esp,06h ; readjust the stack +@@return: ; return label + pop ebx ; restore ebx register + pop ebp ; restore old stack frame + retn ; return to caller +_initEdge endp +_setupEdge proc near ; long setupEge(long edgeType,int startVertex); +LOCAL nextVertex:WORD,startVertex:WORD,xDestWidth:WORD,yDestHeight:DWORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + mov bx,word ptr[ebp+10] ; move edge type to bx register + mov [ecx].PureEdge@@mEdgeDirection,bx ; store edge direction in variable + mov bx,word ptr[ebp+8] ; move startVertex to bx register + mov [ecx].PureEdge@@mStartVertex,bx ; move startVertex into mStartVertex + mov startVertex,bx ; move startVertex into startVertex +@@forever: ; forever loop label + mov bx,startVertex ; move startVertex to bx register + cmp bx,[ecx].PureEdge@@mMinVertex ; is startVertex same as mMinVertex ? + je @@error ; if so then we're all done here + add bx,[ecx].PureEdge@@mEdgeDirection ; add edge direction to startVertex + mov nextVertex,bx ; move result to nextVertex + mov bx,[ecx].PureEdge@@mNumVertexes ; move number of vertexes to bx register + cmp nextVertex,bx ; compare nextVertex to number of vertexes + jge @@zervert ; next vertex is greater eq number of vertexes + cmp nextVertex,00h ; compare nextVertex to zero + jl @@adjvert ; nextVertex is less than zero + jmp @@bypass ; jump over next conditonal +@@zervert: ; handle nextVertex>=number of vertexes + mov nextVertex,00h ; set nextVertex to zero + jmp @@bypass ; jump over next conditional +@@adjvert: ; handle nextVertex<0 + dec bx ; decrement value count in bx register + mov nextVertex,bx ; set nextVertex to (numVertex-1) +@@bypass: ; bypass sync address + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get mlpDstList[nextVertex] + push bx ; dstList[nextVertex].y() in bx, save it. + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + pop ax ; restore first x point to ax + sub ax,bx ; now subtract second x point + mov [ecx].PureEdge@@mRemainingScanLines,ax ; result is mRemainingScanLines + cmp ax,00h ; check scanlines==0 + je @@loopNext ; if it's zero, continue + mov yDestHeight,eax ; set yDestHeight + push nextVertex ; save nextVertex value + pop [ecx].PureEdge@@mCurrentEdgeEnd ; restore it to mCurrentEdgeEnd + getPoint [ecx].PureEdge@@mlpSrcList,startVertex ; get mlpSrcList[startVertex] + multiply ax,bmData@@mPrecision ; multiply mxSource by bmData@@mPrecision + mov [ecx].PureEdge@@mxSource,eax ; move srcList[startVertex].x() to mxSource + multiply bx,bmData@@mPrecision ; multiply mySource by bmData@@mPrecision + mov [ecx].PureEdge@@mySource,eax ; move srcList[startVertex].y() to mySource + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get mlpSrcList[nextVertex] + multiply ax,bmData@@mPrecision ; ax by bmData@@mPrecision + mov ebx,[ecx].PureEdge@@mxSource ; mxSource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].x-mxSource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mxSourceStep + mov [ecx].PureEdge@@mxSourceStep,eax ; move eax register into mxSourceStep + getPoint [ecx].PureEdge@@mlpSrcList,nextVertex ; get source point + mov eax,ebx ; move point.y into eax register + multiply ax,bmData@@mPrecision ; multiply by precision + mov ebx,[ecx].PureEdge@@mySource ; mySource to bx register + sub eax,ebx ; (ie) mlpSrcList[nextVertex].y-mySource-->eax + divide eax,yDestHeight ; divide by yDestHeight, this is mySourceStep + mov [ecx].PureEdge@@mySourceStep,eax ; move eax register into mySourceStep + getPoint [ecx].PureEdge@@mlpDstList,startVertex ; get mlpDstList[startVertex] + mov [ecx].PureEdge@@mxDestLocation,ax ; mxDestLocation=mDstList[startVertex].x() + getPoint [ecx].PureEdge@@mlpDstList,nextVertex ; get dstList[nextVertex] + sub ax,[ecx].PureEdge@@mxDestLocation ; get the width of the segment + mov xDestWidth,ax ; move the width into xDestWidth + cmp xDestWidth,00h ; is the direction negative (ie) left + jl @@negWidth ; yes, handle negative direction + mov [ecx].PureEdge@@mxDirection,01h ; set right direction indicator + mov [ecx].PureEdge@@mxErrorTerm,00h ; set mxErrorTerm to zero + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth.mRemainingScanLines + mov [ecx].PureEdge@@mxStep,ax ; move result into mxStep + jmp @@syncOne ; jump over following handler +@@negWidth: ; handle negative direction + mov [ecx].PureEdge@@mxDirection,-1 ; set left direction indicator + neg xDestWidth ; negate the width (ie) make it positive + mov ax,01h ; move one into ax register + sub ax,[ecx].PureEdge@@mRemainingScanLines ; subtract remaining scan lines from 1 + mov [ecx].PureEdge@@mxErrorTerm,ax ; move result to mxErrorTerm + movzx eax,xDestWidth ; move xDestWidth to eax zero extend + movzx ebx,[ecx].PureEdge@@mRemainingScanLines ; move mRemainingScanLines to ebx + divide eax,ebx ; eax=xDestWidth/mRemainingScanLines + neg eax ; negate the result + mov [ecx].PureEdge@@mxStep,ax ; move result back into mxStep +@@syncOne: ; synchronization address + mov [ecx].PureEdge@@mxAdjustUp,dx ; move remainder into mxAdjustUp + push [ecx].PureEdge@@mRemainingScanLines ; save mRemainingScanLines + pop [ecx].PureEdge@@mxAdjustDown ; restore mRemainingScanLines into mxAdjustDown + jmp @@ok ; jump over forever loop +@@loopNext: ; forever loop address + push nextVertex ; save nextVertex on stack + pop [ecx].PureEdge@@mStartVertex ; restore into mStartVertex + push nextVertex ; save nextVertex on stack + pop startVertex ; restore it to local copy of startVertex + jmp @@forever ; continue with loop +@@error: ; error handler + mov eax,0001h ; set ax register to 01h to indicate failure + jmp @@return ; jump over to return label +@@ok: ; success handler + xor eax,eax ; clear out eax register to handle success +@@return: ; return label + add esp,LocalLength ; remove local variables from stack + pop ebp ; restore old stack frame + retn ; return near to caller +_setupEdge endp +_getMinMaxInfo proc near ; long getMinMaxInfo(void) +LOCAL yMin:WORD,yMax:WORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; make room for local variables + push ecx ; save callers ecx register + mov edx,ecx ; move ecx into edx, edx has ptr to PureEdge + cmp [edx].PureEdge@@mNumVertexes,MINVERTEX ; make sure have at least 3 vertexes + jl @@error ; handle error condition + mov yMin,MINVALUE ; start yMin with some low value + mov yMax,MAXVALUE ; start yMax with some high value + xor ecx,ecx ; start at index zero + mov eax,[edx].PureEdge@@mlpDstList ; move address of (Point*) to ebx register +@@iterator: ; loop top + mov bx,[eax].Point@@y ; move point::y to bx register + cmp bx,yMin ; compare with current yMin value + jg @@greater ; point::y greater than current yMin +@@nexttest: ; if I handle the greater condition, still need to do less + cmp bx,yMax ; compare with current yMax value + jl @@less ; point::y less than current yMax + jmp @@looptest ; nuthin, continue with test +@@greater: ; handle greater condition + mov yMin,bx ; set yMin to bx register + mov [edx].PureEdge@@mMinVertex,cx ; move index number of vertex to mMinVertex + jmp @@nexttest ; go perform next test +@@less: ; handle less condition + mov yMax,bx ; set yMax to bx register + mov [edx].PureEdge@@mMaxVertex,cx ; update mMaxVertex with current index +@@looptest: ; falls through to loop + add eax,04h ; add 4 bytes to eax to address next (Point*) + inc cx ; increment cx register + cmp cx,[edx].PureEdge@@mNumVertexes ; have we reeached the number of vertexes yet? + jl @@iterator ; still more vertexes + push [edx].PureEdge@@mMaxVertex ; save mMaxVertex + pop [edx].PureEdge@@mStartVertex ; restore it to mStartVertex + jmp @@ok ; error return sync address +@@error: ; setup for error return code + mov eax,0001h ; move 01h into ax to indicate error + jmp @@return ; jump to return label +@@ok: ; setup for success return code + xor eax,eax ; clear out eax register +@@return: ; return label + pop ecx ; restore callers ecx register + add esp,LocalLength ; pop local variables off stack + pop ebp ; restore old stack frame + retn ; return near to caller +_getMinMaxInfo endp +_setSrcBitmapInfo proc near ; void setSrcBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mSrcWidth,ax ; move width into bmData@@mSrcWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mSrcHeight,bx ; move height into bx register + multiply ax,bx ; multiply (width*height) + mov bmData@@mSrcExtent,eax ; (width*height) to mSrcExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpSrcPtr ; restore in mlpSrcPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setSrcBitmapInfo endp +_setDstBitmapInfo proc near ; void setDstBitmapInfo(WORD width,WORD height,UHUGE *lpBitmapImage) + push ebp ; save old stack frame + mov ebp,esp ; create new stack frame + push eax ; save eax register + push ebx ; save ebx register + mov ax,word ptr[ebp+08h] ; move width into ax register + mov bmData@@mDstWidth,ax ; move width into mDstWidth + mov bx,word ptr[ebp+0Ch] ; move height into bx register + mov bmData@@mDstHeight,bx ; move height into mDstHeight + multiply ax,bx ; multiply (width*height) + mov bmData@@mDstExtent,eax ; move (width*height) into mDstExtent + push dword ptr[ebp+10h] ; save lpBitmapImage on stack + pop bmData@@mlpDstPtr ; restore in mlpDstPtr + pop ebx ; restore ebx register + pop eax ; restore eax register + pop ebp ; restore old stack frame + retn ; return near to caller +_setDstBitmapInfo endp +_setMaskInfo proc near ; void setMaskInfo(WORD useMask,BYTE maskValue) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + mov eax,[ebp+08h] ; move useMask into eax register + mov bmData@@mUseMask,al ; move useMask into bmData@@mUseMask + cmp eax,0000h ; check to see if we are using the mask + je @@maskEndProc ; if we're not using mask, don't set mask value + mov eax,[ebp+0Ch] ; move mask value into eax register + mov bmData@@mMaskValue,al ; move mask value into bmData@@mMaskValue +@@maskEndProc: ; end procedure sync address + pop ebp ; restore previous stack frame + retn ; return near to caller +_setMaskInfo endp +public _mapTexture +public _initEdge +public _setSrcBitmapInfo +public _setDstBitmapInfo +public _setMaskInfo +end + diff --git a/engine/UTIL32.ASM b/engine/UTIL32.ASM new file mode 100644 index 0000000..0c62e48 --- /dev/null +++ b/engine/UTIL32.ASM @@ -0,0 +1,258 @@ +;************************************************************************************* +; MODULE: UTIL.ASM DATE: MAY 15, 1998 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT TARGET +; FUNCTION : RESAMPLE FUNCTIONS +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.CODE +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\COMMON\MATH.INC +setByte MACRO ; setByte, see _lineWINGBlt, see _line + LOCAL @@return,@@chkCol,@@endChk ; locals + mov esi,imageBase ; move imageBase to source index register + mov eax,yRunning ; move yRunning to eax register + sar eax,10h ; adjust yRunning, this is row + jl @@return ; if less than zero then we're done + mov ebx,xRunning ; move xRunning to ebx register + sar ebx,10h ; adjust xRunning, this is col + jl @@return ; if less than zero then we're done + cmp eax,[ebp+18h] ; compare row to height + jge @@return ; if row is greater equal height then we're done here + cmp ebx,[ebp+14h] ; compare column to width + jge @@return ; if column is greater equal width then we're done here + mov edx,[ebp+14h] ; move width into bx register + imul eax,edx ; multiply row*width + sub esi,eax ; lpImage-=(row*width) + add esi,edx ; add the width back in, so (row*width)+width + add esi,ebx ; now subtract out the column + mov bl,byte ptr[ebp+1Ch] ; get fill value from stack + mov byte ptr[esi],bl ; move value into bitmap data +@@return: +ENDM +_resampleClip proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClamp) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov eax,dword [ebp+18h] ; move outClip to eax register + sub ebx,eax ; subtract (outLen-1L)-outClip, this is clipping region + mov edi,[ebp+0Ch] ; move lpOut to destination index register + add edi,ecx ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + cmp ecx,ebx ; compare ecx to clipping region + je @@exit ; if it's equal then we're done + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov dl,byte ptr[esi+eax] ; move source byte to dl register + mov byte ptr[edi],dl ; move source byte to destination address + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + dec edi ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClip endp +_lineWINGBlt proc near ; void lineWINGBLT(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD height,WORD value) + LOCAL xRunning:DWORD,yRunning:DWORD,xDelta:DWORD,yDelta:DWORD,xDir:WORD,yDir:WORD, \ + imageExtent:DWORD,imageBase:DWORD,steps:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; storage for local symbols + pushad ; save all general purpose registers + mov eax,[ebp+18h] ; move height into eax register + imul eax,[ebp+14h] ; multiply width*height, this is imageExtent + mov imageExtent,eax ; store extent into imageExtent + mov esi,[ebp+08h] ; move wingData into source index register + add esi,imageExtent ; add in imageExtent + mov imageBase,esi ; this is our new imageBase + mov esi,[ebp+0Ch] ; move lpFirstPoint to esi + mov edi,[ebp+10h] ; move lpSecondPoint to edi + mov ax,[esi].Point@@x ; pFirstPoint->x to eax + cmp ax,[edi].Point@@x ; is firstPoint.x == secondPoint.x + jne @@xne ; if x's are not equal then keep going + mov ax,[esi].Point@@y ; pFirstPoint->y to ax + cmp ax,[edi].Point@@y ; is firstPoint.y==secondPoint.y + je @@endLine ; if points are equal no need to draw the line +@@xne: + movsx eax,[esi].Point@@x ; move lpFirstPoint->x to eax + shl eax,10h ; shift into high word + mov xRunning,eax ; this is xRunning + movsx ebx,[esi].Point@@y ; move lpFirstPoint->y to eax + shl ebx,10h ; shift into high word + mov yRunning,ebx ; this is yRunning + mov xDir,01h ; initialize x-direction + mov yDir,01h ; initialize y-direction + movzx eax,[edi].Point@@x ; move secondPoint.x to ax + cmp ax,[esi].Point@@x ; compare secondPoint.x to firstPoint.x + jge @@noxDirChange ; no direction change required + neg xDir ; change line direction along x +@@noxDirChange: ; noxDirChange sync address + movzx ebx,[edi].Point@@y ; move secondPoint.y to ax + cmp bx,[esi].Point@@y ; compare secondPoint.y to firstPoint.y + jge @@noyDirChange ; no direction change requires + neg yDir ; change line direction along y +@@noyDirChange: ; noyDirChange sync address + sub ax,[esi].Point@@x ; move secondPoint.x-firstPoint.x to ax + movsx eax,ax ; adjust sign + mov xDelta,eax ; store difference into xDelta + sub bx,[esi].Point@@y ; move secondPoint.y-firstPoint.y to bx + movsx ebx,bx ; adjust sign + mov yDelta,ebx ; store difference into yDelta + cmp xDelta,00000000h ; is xDelta less than zero + jl @@posxDelta ; if yes then we must adjust xDelta for magnitude + jmp @@skipxFix ; otherwise no adjustment is necessary +@@posxDelta: ; posxDelta sync address + neg xDelta ; make xDelta positive +@@skipxFix: ; skipxFix sync address + cmp yDelta,00000000h ; is yDelta less than zero + jl @@posyDelta ; if yes then we must adjust yDelta for magnitude + jmp @@skipyFix ; otherwise no adjustment is necessary +@@posyDelta: ; posyDelta sync address + neg yDelta ; make yDelta positive +@@skipyFix: ; skipyFix sync address + mov eax,xDelta ; move xDelta into eax register + cmp eax,yDelta ; compare xDelta to yDelta + jge @@xGEy ; handle xDelta>=yDelta + shl eax,10h ; shift xDelta left 16 positions + cmp yDelta,00000000h ; compare yDelta to zero + je @@yEQz ; jump to sync address + divide eax,yDelta ; divide xDelta by yDelta + mov xDelta,eax ; save new xDelta value to xDelta + jmp @@yCMPs ; jump over to sync address +@@yEQz: ; yEQz sync address + mov xDelta,00000001h ; if yDelta is zero then assign one to xDelta +@@yCMPs: ; yCMPs sync address + mov eax,yDelta ; move yDelta to eax register + mov steps,eax ; move yDelta to steps + mov yDelta,10000h ; move 10000h to yDelta + jmp @@startLineDraw ; we're ready to start drawing the line +@@xGEy: ; xGEy sync address + mov eax,yDelta ; move yDelta to eax register + shl eax,10h ; shift left 10h + cmp xDelta,00000000h ; is xDelta zero + jne @@xNEz ; handle xDelta not equal to zero + mov yDelta,00000001h ; if xDelta is zero then yDelta equals one + jmp @@xCMPs ; jump over to sync address +@@xNEz: ; xNEzs sync address + divide eax,xDelta ; divide yDelta by xDelta + mov yDelta,eax ; replace yDelta with new value +@@xCMPs: ; xCMPs sync address + mov eax,xDelta ; move xDelta value into eax register + mov steps,eax ; move xDelta to steps + mov xDelta,10000h ; move 10000h to xDelta +@@startLineDraw: ; startLineDraw sync address + mov ecx,steps ; move steps into ecx register + cmp xDir,0FFFFh ; is xDir negative + je @@checkYDir ; yes it is, now check yDir + cmp yDir,0FFFFh ; is yDir negative + je @@posxDirAndNegyDir ; xDir is positive and yDir is negative + jmp @@posxDirAndPosyDir ; xDir is positive and yDir is positive +@@checkYDir: ; xDir is negative on entry + cmp yDir,0FFFFh ; is yDir negative + je @@negxDirAndNegyDir ; xDir is negative and yDir is negative +@@negxDirAndPosyDir: ; xDir is negative and yDir is positive + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + sub xRunning,eax ; xRunning-=xDelta + mov eax,yDelta ; move yDelta into eax register + add yRunning,eax ; yRunning+=yDelta + dec cx ; decrement cx register + jnz @@negxDirAndPosyDir ; if (cx) continue + jmp @@endLine ; we're done +@@negxDirAndNegyDir: ; xDir==-1&&yDir==-1 sync address + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + sub xRunning,eax ; xRunning-=xDelta + mov eax,yDelta ; move yDelta into eax register + sub yRunning,eax ; yRunning-=yDelta + dec cx ; decrement cx register + jnz @@negxDirAndNegyDir ; if (cx) continue + jmp @@endLine ; we're done +@@posxDirAndNegyDir: ; xDir==1&&yDir==-1 sync address + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + add xRunning,eax ; xRunning+=xDelta + mov eax,yDelta ; move yDelta into eax register + sub yRunning,eax ; yRunning-=yDelta + dec cx ; decrement cx register + jnz @@posxDirAndNegyDir ; if (cx) continue + jmp @@endLine ; we're done here +@@posxDirAndPosyDir: ; xDir==1&&yDir==1 + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + add xRunning,eax ; xRunning+=xDelta + mov eax,yDelta ; move yDelta into eax + add yRunning,eax ; yRunning+=yDelta + dec cx ; decrement cx register + jnz @@posxDirAndPosyDir ; if (cx) continue; +@@endLine: ; we're done here + popad ; restore all general purpose registers + add esp,LocalLength ; remove local storage frame + pop ebp ; restore stack frame + retn ; return near to caller +_lineWINGBlt endp +_clearBitmap proc near ; void clearBitmap(DWORD lpBitmapData,DWORD imageExtent) + push edi ; save destination index register + xor eax,eax ; clear eax register + mov edi,[esp+08h] ; move lpBitmapData to esi + mov ecx,[esp+0Ch] ; move bitmap extent to ecx + shr ecx,02h ; divide bitmap extent by sizeof(long) + rep stosd ; clear out the bitmap in chunks of sizeof(long) + pop edi ; restore destination index register + retn ; return near to caller +_clearBitmap endp +_setBits proc near ; void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE setBit) + push edi ; save destination index register + mov eax,[esp+10h] ; move filler byte into eax register (actually al register) + mov ah,al ; copy filler into high byte + mov cx,ax ; save word at ax into bx + shl eax,10h ; move low word into high word + mov ax,cx ; copy word back into ax + mov edi,[esp+08h] ; move lpBitmapData to esi + mov ecx,[esp+0Ch] ; move bitmap extent to ecx + shr ecx,02h ; divide bitmap extent by sizeof(long) + rep stosd ; clear out the bitmap in chunks of sizeof(long) + pop edi ; restore destination index register + retn ; return near to caller +_setBits endp +public _resampleClip +public _lineWINGBlt +public _clearBitmap +public _setBits +END diff --git a/engine/UTIL32.BAK b/engine/UTIL32.BAK new file mode 100644 index 0000000..0c62e48 --- /dev/null +++ b/engine/UTIL32.BAK @@ -0,0 +1,258 @@ +;************************************************************************************* +; MODULE: UTIL.ASM DATE: MAY 15, 1998 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT TARGET +; FUNCTION : RESAMPLE FUNCTIONS +;************************************************************************************* +SMART +.386 +.MODEL FLAT +.DATA +.CODE +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\COMMON\MATH.INC +setByte MACRO ; setByte, see _lineWINGBlt, see _line + LOCAL @@return,@@chkCol,@@endChk ; locals + mov esi,imageBase ; move imageBase to source index register + mov eax,yRunning ; move yRunning to eax register + sar eax,10h ; adjust yRunning, this is row + jl @@return ; if less than zero then we're done + mov ebx,xRunning ; move xRunning to ebx register + sar ebx,10h ; adjust xRunning, this is col + jl @@return ; if less than zero then we're done + cmp eax,[ebp+18h] ; compare row to height + jge @@return ; if row is greater equal height then we're done here + cmp ebx,[ebp+14h] ; compare column to width + jge @@return ; if column is greater equal width then we're done here + mov edx,[ebp+14h] ; move width into bx register + imul eax,edx ; multiply row*width + sub esi,eax ; lpImage-=(row*width) + add esi,edx ; add the width back in, so (row*width)+width + add esi,ebx ; now subtract out the column + mov bl,byte ptr[ebp+1Ch] ; get fill value from stack + mov byte ptr[esi],bl ; move value into bitmap data +@@return: +ENDM +_resampleClip proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen,DWORD outClamp) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov eax,dword [ebp+18h] ; move outClip to eax register + sub ebx,eax ; subtract (outLen-1L)-outClip, this is clipping region + mov edi,[ebp+0Ch] ; move lpOut to destination index register + add edi,ecx ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + cmp ecx,ebx ; compare ecx to clipping region + je @@exit ; if it's equal then we're done + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov dl,byte ptr[esi+eax] ; move source byte to dl register + mov byte ptr[edi],dl ; move source byte to destination address + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + dec edi ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClip endp +_lineWINGBlt proc near ; void lineWINGBLT(DWORD lpWINGData,Point *lpFirstPoint,Point *lpSecondPoint,DWORD width,DWORD height,WORD value) + LOCAL xRunning:DWORD,yRunning:DWORD,xDelta:DWORD,yDelta:DWORD,xDir:WORD,yDir:WORD, \ + imageExtent:DWORD,imageBase:DWORD,steps:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; storage for local symbols + pushad ; save all general purpose registers + mov eax,[ebp+18h] ; move height into eax register + imul eax,[ebp+14h] ; multiply width*height, this is imageExtent + mov imageExtent,eax ; store extent into imageExtent + mov esi,[ebp+08h] ; move wingData into source index register + add esi,imageExtent ; add in imageExtent + mov imageBase,esi ; this is our new imageBase + mov esi,[ebp+0Ch] ; move lpFirstPoint to esi + mov edi,[ebp+10h] ; move lpSecondPoint to edi + mov ax,[esi].Point@@x ; pFirstPoint->x to eax + cmp ax,[edi].Point@@x ; is firstPoint.x == secondPoint.x + jne @@xne ; if x's are not equal then keep going + mov ax,[esi].Point@@y ; pFirstPoint->y to ax + cmp ax,[edi].Point@@y ; is firstPoint.y==secondPoint.y + je @@endLine ; if points are equal no need to draw the line +@@xne: + movsx eax,[esi].Point@@x ; move lpFirstPoint->x to eax + shl eax,10h ; shift into high word + mov xRunning,eax ; this is xRunning + movsx ebx,[esi].Point@@y ; move lpFirstPoint->y to eax + shl ebx,10h ; shift into high word + mov yRunning,ebx ; this is yRunning + mov xDir,01h ; initialize x-direction + mov yDir,01h ; initialize y-direction + movzx eax,[edi].Point@@x ; move secondPoint.x to ax + cmp ax,[esi].Point@@x ; compare secondPoint.x to firstPoint.x + jge @@noxDirChange ; no direction change required + neg xDir ; change line direction along x +@@noxDirChange: ; noxDirChange sync address + movzx ebx,[edi].Point@@y ; move secondPoint.y to ax + cmp bx,[esi].Point@@y ; compare secondPoint.y to firstPoint.y + jge @@noyDirChange ; no direction change requires + neg yDir ; change line direction along y +@@noyDirChange: ; noyDirChange sync address + sub ax,[esi].Point@@x ; move secondPoint.x-firstPoint.x to ax + movsx eax,ax ; adjust sign + mov xDelta,eax ; store difference into xDelta + sub bx,[esi].Point@@y ; move secondPoint.y-firstPoint.y to bx + movsx ebx,bx ; adjust sign + mov yDelta,ebx ; store difference into yDelta + cmp xDelta,00000000h ; is xDelta less than zero + jl @@posxDelta ; if yes then we must adjust xDelta for magnitude + jmp @@skipxFix ; otherwise no adjustment is necessary +@@posxDelta: ; posxDelta sync address + neg xDelta ; make xDelta positive +@@skipxFix: ; skipxFix sync address + cmp yDelta,00000000h ; is yDelta less than zero + jl @@posyDelta ; if yes then we must adjust yDelta for magnitude + jmp @@skipyFix ; otherwise no adjustment is necessary +@@posyDelta: ; posyDelta sync address + neg yDelta ; make yDelta positive +@@skipyFix: ; skipyFix sync address + mov eax,xDelta ; move xDelta into eax register + cmp eax,yDelta ; compare xDelta to yDelta + jge @@xGEy ; handle xDelta>=yDelta + shl eax,10h ; shift xDelta left 16 positions + cmp yDelta,00000000h ; compare yDelta to zero + je @@yEQz ; jump to sync address + divide eax,yDelta ; divide xDelta by yDelta + mov xDelta,eax ; save new xDelta value to xDelta + jmp @@yCMPs ; jump over to sync address +@@yEQz: ; yEQz sync address + mov xDelta,00000001h ; if yDelta is zero then assign one to xDelta +@@yCMPs: ; yCMPs sync address + mov eax,yDelta ; move yDelta to eax register + mov steps,eax ; move yDelta to steps + mov yDelta,10000h ; move 10000h to yDelta + jmp @@startLineDraw ; we're ready to start drawing the line +@@xGEy: ; xGEy sync address + mov eax,yDelta ; move yDelta to eax register + shl eax,10h ; shift left 10h + cmp xDelta,00000000h ; is xDelta zero + jne @@xNEz ; handle xDelta not equal to zero + mov yDelta,00000001h ; if xDelta is zero then yDelta equals one + jmp @@xCMPs ; jump over to sync address +@@xNEz: ; xNEzs sync address + divide eax,xDelta ; divide yDelta by xDelta + mov yDelta,eax ; replace yDelta with new value +@@xCMPs: ; xCMPs sync address + mov eax,xDelta ; move xDelta value into eax register + mov steps,eax ; move xDelta to steps + mov xDelta,10000h ; move 10000h to xDelta +@@startLineDraw: ; startLineDraw sync address + mov ecx,steps ; move steps into ecx register + cmp xDir,0FFFFh ; is xDir negative + je @@checkYDir ; yes it is, now check yDir + cmp yDir,0FFFFh ; is yDir negative + je @@posxDirAndNegyDir ; xDir is positive and yDir is negative + jmp @@posxDirAndPosyDir ; xDir is positive and yDir is positive +@@checkYDir: ; xDir is negative on entry + cmp yDir,0FFFFh ; is yDir negative + je @@negxDirAndNegyDir ; xDir is negative and yDir is negative +@@negxDirAndPosyDir: ; xDir is negative and yDir is positive + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + sub xRunning,eax ; xRunning-=xDelta + mov eax,yDelta ; move yDelta into eax register + add yRunning,eax ; yRunning+=yDelta + dec cx ; decrement cx register + jnz @@negxDirAndPosyDir ; if (cx) continue + jmp @@endLine ; we're done +@@negxDirAndNegyDir: ; xDir==-1&&yDir==-1 sync address + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + sub xRunning,eax ; xRunning-=xDelta + mov eax,yDelta ; move yDelta into eax register + sub yRunning,eax ; yRunning-=yDelta + dec cx ; decrement cx register + jnz @@negxDirAndNegyDir ; if (cx) continue + jmp @@endLine ; we're done +@@posxDirAndNegyDir: ; xDir==1&&yDir==-1 sync address + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + add xRunning,eax ; xRunning+=xDelta + mov eax,yDelta ; move yDelta into eax register + sub yRunning,eax ; yRunning-=yDelta + dec cx ; decrement cx register + jnz @@posxDirAndNegyDir ; if (cx) continue + jmp @@endLine ; we're done here +@@posxDirAndPosyDir: ; xDir==1&&yDir==1 + setByte ; set the byte + mov eax,xDelta ; move xDelta into eax register + add xRunning,eax ; xRunning+=xDelta + mov eax,yDelta ; move yDelta into eax + add yRunning,eax ; yRunning+=yDelta + dec cx ; decrement cx register + jnz @@posxDirAndPosyDir ; if (cx) continue; +@@endLine: ; we're done here + popad ; restore all general purpose registers + add esp,LocalLength ; remove local storage frame + pop ebp ; restore stack frame + retn ; return near to caller +_lineWINGBlt endp +_clearBitmap proc near ; void clearBitmap(DWORD lpBitmapData,DWORD imageExtent) + push edi ; save destination index register + xor eax,eax ; clear eax register + mov edi,[esp+08h] ; move lpBitmapData to esi + mov ecx,[esp+0Ch] ; move bitmap extent to ecx + shr ecx,02h ; divide bitmap extent by sizeof(long) + rep stosd ; clear out the bitmap in chunks of sizeof(long) + pop edi ; restore destination index register + retn ; return near to caller +_clearBitmap endp +_setBits proc near ; void setBits(DWORD lpBitmapData,DWORD imageExtent,BYTE setBit) + push edi ; save destination index register + mov eax,[esp+10h] ; move filler byte into eax register (actually al register) + mov ah,al ; copy filler into high byte + mov cx,ax ; save word at ax into bx + shl eax,10h ; move low word into high word + mov ax,cx ; copy word back into ax + mov edi,[esp+08h] ; move lpBitmapData to esi + mov ecx,[esp+0Ch] ; move bitmap extent to ecx + shr ecx,02h ; divide bitmap extent by sizeof(long) + rep stosd ; clear out the bitmap in chunks of sizeof(long) + pop edi ; restore destination index register + retn ; return near to caller +_setBits endp +public _resampleClip +public _lineWINGBlt +public _clearBitmap +public _setBits +END diff --git a/engine/VECTOR.HPP b/engine/VECTOR.HPP new file mode 100644 index 0000000..b42913e --- /dev/null +++ b/engine/VECTOR.HPP @@ -0,0 +1,182 @@ +#ifndef _ENGINE_VECTOR_HPP_ +#define _ENGINE_VECTOR_HPP_ +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif + +class Vector +{ +public: + Vector(void); + Vector(const Vector &vector); + Vector(int xScalar,int yScalar,int zScalar); + Vector(const Point3D &firstPoint,const Point3D &secondPoint); + virtual ~Vector(); + Vector &operator=(const Vector &vector); + BOOL operator==(const Vector &vector); + Vector operator+(const Vector &vector); + Vector operator*(const Vector &vector); + int xScalar(void)const; + void xScalar(int xScalar); + int yScalar(void)const; + void yScalar(int yScalar); + int zScalar(void)const; + void zScalar(int zScalar); + void vector(const Point3D &firstPoint,const Point3D &secondPoint); + int length(void)const; + int magnitude(void)const; + void normal(Vector &vector)const; + void normal(void); + int dot(const Vector &vector)const; +private: + int mxScalar; + int myScalar; + int mzScalar; +}; + +inline +Vector::Vector(void) +: mxScalar(0), myScalar(0), mzScalar(0) +{ +} + +inline +Vector::Vector(int xScalar,int yScalar,int zScalar) +: mxScalar(xScalar), myScalar(yScalar), mzScalar(zScalar) +{ +} + +inline +Vector::Vector(const Point3D &firstPoint,const Point3D &secondPoint) +{ + vector(firstPoint,secondPoint); +} + +inline +Vector::Vector(const Vector &vector) +{ + *this=vector; +} + +inline +Vector::~Vector() +{ +} + +inline +Vector &Vector::operator=(const Vector &vector) +{ + xScalar(vector.xScalar()); + yScalar(vector.yScalar()); + zScalar(vector.zScalar()); + return *this; +} + +inline +BOOL Vector::operator==(const Vector &vector) +{ + return (xScalar()==vector.xScalar()&& + yScalar()==vector.yScalar()&& + zScalar()==vector.zScalar()); +} + +inline +Vector Vector::operator+(const Vector &vector) +{ + return Vector(xScalar()+vector.xScalar(),yScalar()+vector.yScalar(),zScalar()+vector.zScalar()); +} + +inline +Vector Vector::operator*(const Vector &vector) +{ + return Vector((yScalar()*vector.zScalar()-zScalar()*vector.yScalar()),zScalar()*vector.xScalar()-xScalar()*vector.zScalar(),xScalar()*vector.yScalar()-yScalar()*vector.xScalar()); +} + +inline +int Vector::xScalar(void)const +{ + return mxScalar; +} + +inline +void Vector::xScalar(int xScalar) +{ + mxScalar=xScalar; +} + +inline +int Vector::yScalar(void)const +{ + return myScalar; +} + +inline +void Vector::yScalar(int yScalar) +{ + myScalar=yScalar; +} + +inline +int Vector::zScalar(void)const +{ + return mzScalar; +} + +inline +void Vector::zScalar(int zScalar) +{ + mzScalar=zScalar; +} + +inline +void Vector::vector(const Point3D &firstPoint,const Point3D &secondPoint) +{ + xScalar(secondPoint.x()-firstPoint.x()); + yScalar(secondPoint.y()-firstPoint.y()); + zScalar(secondPoint.z()-firstPoint.z()); +} + +inline +int Vector::length(void)const +{ + int vLength(.5*(xScalar()*xScalar())+(yScalar()*yScalar())+(zScalar()*zScalar())); + if(vLength<0)vLength=-vLength; + return vLength; +} + +inline +int Vector::magnitude(void)const +{ + return length(); +} + +inline +void Vector::normal(Vector &vector)const +{ + int vLength(length()); + if(!vLength) + { + vector.xScalar(0); + vector.yScalar(0); + vector.zScalar(0); + } + else + { + vector.xScalar(xScalar()/vLength); + vector.yScalar(yScalar()/vLength); + vector.zScalar(zScalar()/vLength); + } +} + +inline +void Vector::normal(void) +{ + normal(*this); +} + +inline +int Vector::dot(const Vector &vector)const +{ + return (xScalar()*vector.xScalar())+(yScalar()*vector.yScalar())+(zScalar()*vector.zScalar()); +} +#endif diff --git a/engine/VECTOR3D.CPP b/engine/VECTOR3D.CPP new file mode 100644 index 0000000..5dbe6e6 --- /dev/null +++ b/engine/VECTOR3D.CPP @@ -0,0 +1,26 @@ +#include + +void Vector3D::normalize(void) +{ + mNormalVector.xScalar(0); + mNormalVector.yScalar(0); + mNormalVector.zScalar(0); + Point3D currVertex; + Point3D nextVertex; + + for(int index=0;index0)mNormalVector.xScalar(1); + if(mNormalVector.yScalar()<0)mNormalVector.yScalar(-1); + else if(mNormalVector.yScalar()>0)mNormalVector.yScalar(1); + if(mNormalVector.zScalar()<0)mNormalVector.zScalar(-1); + else if(mNormalVector.zScalar()>0)mNormalVector.zScalar(1); +} diff --git a/engine/VECTOR3D.HPP b/engine/VECTOR3D.HPP new file mode 100644 index 0000000..36a1122 --- /dev/null +++ b/engine/VECTOR3D.HPP @@ -0,0 +1,96 @@ +#ifndef _ENGINE_VECTOR3D_HPP_ +#define _ENGINE_VECTOR3D_HPP_ +#ifndef _COMMON_ASSERT_HPP_ +#include +#endif +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif +#ifndef _ENGINE_VECTOR_HPP_ +#include +#endif + +class Vector3D +{ +public: + enum {VectorPoints=4}; + Vector3D(void); + Vector3D(const Vector3D &someVector3D); + Vector3D(const Point3D &firstPoint,const Point3D &secondPoint,const Point3D &thirdPoint,const Point3D &fourthPoint); + virtual ~Vector3D(); + Vector3D &operator=(const Vector3D &someVector3D); + WORD operator==(const Vector3D &someVector3D)const; + Point3D &operator[](WORD vectorIndex); + const Vector &getNormal(void)const; + void setNormal(const Vector &normal); + void normalize(void); +private: + Point3D mVector3D[VectorPoints]; + Vector mNormalVector; +}; + +inline +Vector3D::Vector3D(void) +{ +} + +inline +Vector3D::Vector3D(const Vector3D &someVector3D) +{ + mVector3D[0]=((Vector3D&)someVector3D)[0]; + mVector3D[1]=((Vector3D&)someVector3D)[1]; + mVector3D[2]=((Vector3D&)someVector3D)[2]; + mVector3D[3]=((Vector3D&)someVector3D)[3]; +} + +inline +Vector3D::Vector3D(const Point3D &firstPoint,const Point3D &secondPoint,const Point3D &thirdPoint,const Point3D &fourthPoint) +{ + mVector3D[0]=firstPoint; + mVector3D[1]=secondPoint; + mVector3D[2]=thirdPoint; + mVector3D[3]=fourthPoint; +} + +inline +Vector3D::~Vector3D() +{ +} + +inline +Vector3D &Vector3D::operator=(const Vector3D &someVector3D) +{ + mVector3D[0]=((Vector3D&)someVector3D)[0]; + mVector3D[1]=((Vector3D&)someVector3D)[1]; + mVector3D[2]=((Vector3D&)someVector3D)[2]; + mVector3D[3]=((Vector3D&)someVector3D)[3]; + return *this; +} + +inline +WORD Vector3D::operator==(const Vector3D &someVector3D)const +{ + return (mVector3D[0]==((Vector3D&)someVector3D)[0]&& + mVector3D[1]==((Vector3D&)someVector3D)[1]&& + mVector3D[2]==((Vector3D&)someVector3D)[2]&& + mVector3D[3]==((Vector3D&)someVector3D)[3]); +} + +inline +Point3D &Vector3D::operator[](WORD vectorIndex) +{ + return mVector3D[vectorIndex]; +} + +inline +const Vector &Vector3D::getNormal(void)const +{ + return mNormalVector; +} + +inline +void Vector3D::setNormal(const Vector &normal) +{ + mNormalVector=normal; +} +#endif diff --git a/engine/VIEWSYS.CPP b/engine/VIEWSYS.CPP new file mode 100644 index 0000000..f1c0814 --- /dev/null +++ b/engine/VIEWSYS.CPP @@ -0,0 +1,23 @@ +#include +#include + +WORD ViewSystem::viewPortWidth(void)const +{ + return FALSE; +} + +WORD ViewSystem::viewPortHeight(void)const +{ + return FALSE; +} + +WORD ViewSystem::isInView(const Vector3D &vector3D) +{ + Vector2D vector2D; + PureViewSystem::viewPortWidth(viewPortWidth()); + PureViewSystem::viewPortHeight(viewPortHeight()); + PureViewSystem::translatePoint(vector3D,vector2D); + if(!isInView(vector2D[0])&&!isInView(vector2D[1])&&!isInView(vector2D[2])&&!isInView(vector2D[3]))return FALSE; + return TRUE; +} + diff --git a/engine/VIEWSYS.HPP b/engine/VIEWSYS.HPP new file mode 100644 index 0000000..2e98e47 --- /dev/null +++ b/engine/VIEWSYS.HPP @@ -0,0 +1,90 @@ +#ifndef _ENGINE_VIEWSYSTEM_HPP_ +#define _ENGINE_VIEWSYSTEM_HPP_ +#ifndef _ENGINE_PUREVIEWSYSTEM_HPP_ +#include +#endif +#ifndef _ENGINE_TRIANGLE3D_HPP_ +#include +#endif +#ifndef _ENGINE_TRIANGLE_HPP_ +#include +#endif + +class ViewSystem : public PureViewSystem +{ +public: + ViewSystem(void); + virtual ~ViewSystem(); + void translatePoint(const Vector3D &vector3D,Vector2D &vector2D,PureViewSystem::MapMode mapMode=CartesianSystem); + void translatePoint(Polygon3D &polygon,PureViewSystem::MapMode mapMode=CartesianSystem); + void translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,PureViewSystem::MapMode mapMode=CartesianSystem); + void mapCoordinates(Point3D &firstPoint3D,Point &firstPoint,bool useCartesian=true); + void mapCoordinates(Triangle3D &triangle3D,Triangle &triangle); + WORD isInView(const Point &somePoint)const; + WORD isInView(const Vector3D &vector3D); +protected: + virtual WORD viewPortWidth(void)const=0; + virtual WORD viewPortHeight(void)const=0; +private: +}; + +inline +ViewSystem::ViewSystem(void) +{ +} + +inline +ViewSystem::~ViewSystem() +{ +} + +inline +WORD ViewSystem::isInView(const Point &somePoint)const +{ + if(somePoint.x()>viewPortWidth()||somePoint.x()<0)return FALSE; + if(somePoint.y()>viewPortHeight()||somePoint.y()<0)return FALSE; + return TRUE; +} + +inline +void ViewSystem::translatePoint(const Vector3D &vector3D,Vector2D &vector2D,PureViewSystem::MapMode mapMode) +{ + PureViewSystem::viewPortWidth(viewPortWidth()); + PureViewSystem::viewPortHeight(viewPortHeight()); + PureViewSystem::translatePoint(vector3D,vector2D,mapMode); +} + +inline +void ViewSystem::translatePoint(Polygon3D &polygon,PureViewSystem::MapMode mapMode) +{ + PureViewSystem::viewPortWidth(viewPortWidth()); + PureViewSystem::viewPortHeight(viewPortHeight()); + PureViewSystem::translatePoint(polygon,mapMode); +} + +inline +void ViewSystem::translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,PureViewSystem::MapMode mapMode) +{ + PureViewSystem::viewPortWidth(viewPortWidth()); + PureViewSystem::viewPortHeight(viewPortHeight()); + PureViewSystem::translatePoint(dimensionPoint,screenPoint,initialPoint,mapMode); +} + +inline +void ViewSystem::mapCoordinates(Point3D &firstPoint3D,Point &firstPoint,bool useCartesian) +{ + PureViewSystem::viewPortWidth(viewPortWidth()); + PureViewSystem::viewPortHeight(viewPortHeight()); + PureViewSystem::mapCoordinates(firstPoint3D,firstPoint,useCartesian); +} + +inline +void ViewSystem::mapCoordinates(Triangle3D &triangle3D,Triangle &triangle) +{ + PureViewSystem::viewPortWidth(viewPortWidth()); + PureViewSystem::viewPortHeight(viewPortHeight()); + PureViewSystem::mapCoordinates(triangle3D[0],triangle[0]); + PureViewSystem::mapCoordinates(triangle3D[1],triangle[1]); + PureViewSystem::mapCoordinates(triangle3D[2],triangle[2]); +} +#endif diff --git a/engine/VSMAP.BAK b/engine/VSMAP.BAK new file mode 100644 index 0000000..c81d9d2 --- /dev/null +++ b/engine/VSMAP.BAK @@ -0,0 +1,81 @@ +; ************************************************************************** +; FILE:VSMAP16.INC +; FUNCTION: INCLUDEE FILE FOR ASMVIEW.ASM (VIEW SYSTEM MAPPER) +; AUTHOR: SEAN M. KESSLER +;**************************************************************************** + +Point3D STRUC + Point3D@@xyPoint Point <> + Point3D@@Point@@z DW ? +Point3D ENDS + +ViewSystem STRUC + PureViewSystem@@cameraTwistRadians DD ? + PureViewSystem@@cosCameraTwistRadians DD ? + PureViewSystem@@sinCameraTwistRadians DD ? + PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians DD ? + PureViewSystem@@viewPlaneDistance DD ? + PureViewSystem@@viewPortWidth DW ? + PureViewSystem@@viewPortHeight DW ? + PureViewSystem@@cameraPoint Point3D ? + PureViewSystem@@focusPoint Point3D ? +ViewSystem ENDS + +Line3D STRUC +PLine3D TYPEDEF NEAR PTR Line3D +PPLine3D TYPEDEF NEAR PTR PLine3D + Line3D@@vfptr DD ? + Line3D@@mFirstPoint Point3D ? + Line3D@@mSecondPoint Point3D ? +Line3D ENDS + +Line2D STRUC +PLine2D TYPEDEF NEAR PTR Line2D +PPLine2D TYPEDEF NEAR PTR PLine2D + Line2D@@vfptr DD ? + Line2D@@mFirstPoint Point ? + Line2D@@mSecondPoint Point ? +Line2D ENDS + +Line3DNodePtr STRUC +PLine3DNodePtr TYPEDEF NEAR PTR Line3DNodePtr +PPLine3DNodePtr TYPEDEF NEAR PTR PLine3DNodePtr + Line3DNodePtr@@vfptr DD ? + Line3DNodePtr@@mLine3DNodePtrNext PLine3DNodePtr ? + Line3DNodePtr@@mLine3DNodePtrPrev PLine3DNodePtr ? + Line3DNodePtr@@mItem PLine3D ? +Line3DNodePtr ENDS + +Line2DNodePtr STRUC +PLine2DNodePtr TYPEDEF NEAR PTR Line2DNodePtr +PPLine2DNodePtr TYPEDEF NEAR PTR PLine2DNodePtr + Line2DNodePtr@@vfptr DD ? + Line2DNodePtr@@mLine2DNodePtrNext PLine2DNodePtr ? + Line2DNodePtr@@mLine2DNodePtrPrev PLine2DNodePtr ? + Line2DNodePtr@@mItem PLine2D ? +Line2DNodePtr ENDS + +BlockLine3D STRUC + BlockLine3D@@mSize DD ? + BlockLine3D@@mLastIndexReferenced DD ? + BlockLine3D@@mLastObjectReferenced PLine3DNodePtr ? + BlockLine3D@@mLastObjectInserted PLine3DNodePtr ? + BlockLine3D@@mContainer PLine3DNodePtr ? +BlockLine3D ENDS + +BlockLine2D STRUC + BlockLine2D@@mSize DD ? + BlockLine2D@@mlastIndexReferenced DD ? + BlockLine2D@@mLastObjectReferenced PLine2DNodePtr ? + BlockLine2D@@mlastObjectInserted PLine2DNodePtr ? + BlockLine2D@@mContainer PLine2DNodePtr ? +BlockLine2D ENDS + +Polygon3D STRUC +PPolygon3D TYPEDEF NEAR PTR Polygon3D + Polygon3D@@vfptr DD ? + Polygon3D@@mBlockLine3D BlockLine3D ? + Polygon3D@@vfptr2 DD ? + Polygon3D@@mBlockLine2D BlockLine2D ? +Polygon3D ENDS + diff --git a/engine/VSMAP.INC b/engine/VSMAP.INC new file mode 100644 index 0000000..c81d9d2 --- /dev/null +++ b/engine/VSMAP.INC @@ -0,0 +1,81 @@ +; ************************************************************************** +; FILE:VSMAP16.INC +; FUNCTION: INCLUDEE FILE FOR ASMVIEW.ASM (VIEW SYSTEM MAPPER) +; AUTHOR: SEAN M. KESSLER +;**************************************************************************** + +Point3D STRUC + Point3D@@xyPoint Point <> + Point3D@@Point@@z DW ? +Point3D ENDS + +ViewSystem STRUC + PureViewSystem@@cameraTwistRadians DD ? + PureViewSystem@@cosCameraTwistRadians DD ? + PureViewSystem@@sinCameraTwistRadians DD ? + PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians DD ? + PureViewSystem@@viewPlaneDistance DD ? + PureViewSystem@@viewPortWidth DW ? + PureViewSystem@@viewPortHeight DW ? + PureViewSystem@@cameraPoint Point3D ? + PureViewSystem@@focusPoint Point3D ? +ViewSystem ENDS + +Line3D STRUC +PLine3D TYPEDEF NEAR PTR Line3D +PPLine3D TYPEDEF NEAR PTR PLine3D + Line3D@@vfptr DD ? + Line3D@@mFirstPoint Point3D ? + Line3D@@mSecondPoint Point3D ? +Line3D ENDS + +Line2D STRUC +PLine2D TYPEDEF NEAR PTR Line2D +PPLine2D TYPEDEF NEAR PTR PLine2D + Line2D@@vfptr DD ? + Line2D@@mFirstPoint Point ? + Line2D@@mSecondPoint Point ? +Line2D ENDS + +Line3DNodePtr STRUC +PLine3DNodePtr TYPEDEF NEAR PTR Line3DNodePtr +PPLine3DNodePtr TYPEDEF NEAR PTR PLine3DNodePtr + Line3DNodePtr@@vfptr DD ? + Line3DNodePtr@@mLine3DNodePtrNext PLine3DNodePtr ? + Line3DNodePtr@@mLine3DNodePtrPrev PLine3DNodePtr ? + Line3DNodePtr@@mItem PLine3D ? +Line3DNodePtr ENDS + +Line2DNodePtr STRUC +PLine2DNodePtr TYPEDEF NEAR PTR Line2DNodePtr +PPLine2DNodePtr TYPEDEF NEAR PTR PLine2DNodePtr + Line2DNodePtr@@vfptr DD ? + Line2DNodePtr@@mLine2DNodePtrNext PLine2DNodePtr ? + Line2DNodePtr@@mLine2DNodePtrPrev PLine2DNodePtr ? + Line2DNodePtr@@mItem PLine2D ? +Line2DNodePtr ENDS + +BlockLine3D STRUC + BlockLine3D@@mSize DD ? + BlockLine3D@@mLastIndexReferenced DD ? + BlockLine3D@@mLastObjectReferenced PLine3DNodePtr ? + BlockLine3D@@mLastObjectInserted PLine3DNodePtr ? + BlockLine3D@@mContainer PLine3DNodePtr ? +BlockLine3D ENDS + +BlockLine2D STRUC + BlockLine2D@@mSize DD ? + BlockLine2D@@mlastIndexReferenced DD ? + BlockLine2D@@mLastObjectReferenced PLine2DNodePtr ? + BlockLine2D@@mlastObjectInserted PLine2DNodePtr ? + BlockLine2D@@mContainer PLine2DNodePtr ? +BlockLine2D ENDS + +Polygon3D STRUC +PPolygon3D TYPEDEF NEAR PTR Polygon3D + Polygon3D@@vfptr DD ? + Polygon3D@@mBlockLine3D BlockLine3D ? + Polygon3D@@vfptr2 DD ? + Polygon3D@@mBlockLine2D BlockLine2D ? +Polygon3D ENDS + diff --git a/engine/VSMAP16.ASM b/engine/VSMAP16.ASM new file mode 100644 index 0000000..c905043 --- /dev/null +++ b/engine/VSMAP16.ASM @@ -0,0 +1,433 @@ +;************************************************************************************* +; MODULE: VSMAP16.ASM DATE: APRIL 18,1995 +; AUTHOR: SEAN M. KESSLER +; TARGET: 16 BIT LARGE MODEL +; FUNCTION : VIEW SYSTEM OBJECT MAPPER +;************************************************************************************* +.MODEL LARGE C +.386 +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\VSMAP.INC +.DATA +viewData@@mViewSystem ViewSystem ? +viewData@@mPrecision DD 00004000h +calculateTempx MACRO + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosCameraTwistRadians to eax + lMul eax,bov ; multiply cosCameraTwistRadians by bov + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinCameraTwistRadians to eax + lMul eax,acov ; multiply sinCameraTwistRadians by bov + pop ebx ; restore prior result to ebx + sub ebx,eax ; subtract prior result by current result + movsx eax,es:[di].Point3D@@xyPoint.Point@@x ; move point3D.x into ebx register + lMul eax,ebx ; multiply point3D.x by result + round eax ; round off result + push eax ; save result + mov eax,bov ; move bov into eax register + neg eax ; negate bov (eax) + mov ebx,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to ebx + lMul eax,ebx ; multiply, result to eax + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to eax + lMul eax,acov ; multiply, result to eax + pop ebx ; restore previous result + sub ebx,eax ; subtract last result from previous + movsx eax,es:[di].Point3D@@xyPoint.Point@@y ; move point3D.y to eax + lMul eax,ebx ; multiply point3D.y by last result + round eax ; round off result + pop ebx ; restore first result + add ebx,eax ; add to current result + movsx eax,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x ; move cameraPoint.x to eax + sub ebx,eax ; sub out cameraPoint.x + mov tempx,ebx ; move result to tempx +ENDM +calculateTempy MACRO + mov eax,aov ; move aov to eax register + neg eax ; negate aov + mov ebx,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to ebx + lMul eax,ebx ; multiply cosTwist*aov + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to eax + lMul eax,bcov ; sinTwist*bcov -> eax + pop ebx ; restore last result + sub ebx,eax ; subtract curr result from last result + movsx eax,es:[di].Point3D@@xyPoint.Point@@x ; move point3D.x to eax + lMul eax,ebx ; multiply it out + round eax ; round off result + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to eax + lMul eax,aov ; sinTwist*aov -> eax + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to eax + lMul eax,bcov ; cosTwist*bcov -> eax + pop ebx ; restore last result + sub ebx,eax ; subtract curr result from last result + movsx eax,es:[di].Point3D@@xyPoint.Point@@y ; move point3D.y to eax + lMul eax,ebx ; multiply last result by point3D.y + round eax ; round off the result + pop ebx ; restore prior result + add ebx,eax ; add prior result to current result + push ebx ; save new result + movsx ebx,es:[di].Point3D@@Point@@z ; move point3D.z to ebx + lMul ebx,v ; now multiply by curr v + movsx ebx,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y ; move cameraPoint.y to eax + sub eax,ebx ; sub out last result + pop ebx ; restore prior result + add eax,ebx ; add prior result to current result + mov tempy,eax ; store result in tempy +ENDM +calculateTempz MACRO + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to ebx + lMul eax,ebx ; multiply it out + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; mov sinTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to ebx + lMul eax,ebx ; multiply it out + pop ebx ; restore previous result to ebx + add eax,ebx ; add previous result to current + movsx ebx,es:[di].Point3D@@xyPoint.Point@@x ; move point3D.x to ebx + lMul eax,ebx ; multiply previous result by point3D.x + round eax ; round off the result + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; mov focusPoint.x to ebx + neg ebx ; negate focusPointy.x + lMul eax,ebx ; multiply focusPoint.x by sinTwistRadians + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; mov focusPoint.y to ebx + lMul eax,ebx ; multiply focusPoint.y by cosTwistRadians + pop ebx ; restore previous result to ebx + add eax,ebx ; add current result to previous result + movsx ebx,es:[di].Point3D@@xyPoint.Point@@y ; move point3D.y to ebx + lMul eax,ebx ; multiply previous result by point3D.y + round eax ; round off the result + pop ebx ; restore previous result + add eax,ebx ; add curent result to previous + push eax ; save the result + movsx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; mov focusPoint.z to eax + movsx ebx,es:[di].Point3D@@Point@@z ; mov point3D.z to ebx + lMul eax,ebx ; multiply focusPoint.z by point3D.z + pop ebx ; restore previous result + add eax,ebx ; add current result to previous result + movsx ebx,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@Point@@z ; move cameraPoint.z to ebx + sub eax,ebx ; subtract cameraPoint.z from curr result + mov tempz,eax ; move result to tempz +ENDM +calculatePoint2D MACRO +LOCAL @@screenPointZero,@@return + mov es,word ptr[bp+0Ch] ; move segment (Point *) to extra segment register + mov di,word ptr[bp+0Ah] ; move offset (Point *) to destination index register + cmp tempz,0000h ; is the z-point zero ?? + je @@screenPointZero ; it's zero, so set screen point to (0,0) + mov eax,tempz ; move tempz into eax register + lMul eax,viewData@@mPrecision ; multiply tempz by precision + mov ebx,viewData@@mViewSystem.PureViewSystem@@viewPlaneDistance ; move viewPlaneDistance into ebx + divide eax,ebx ; divide tempz by viewPlaneDistance + push eax ; save the result ... + push eax ; twice + mov eax,tempx ; move tempx into eax + lMul eax,viewData@@mPrecision ; multiply tempx by precision + pop ebx ; restore previous result + divide eax,ebx ; divide current result by previous + mov es:[di].Point.Point@@x,ax ; store the result into Point.x + mov eax,tempy ; move tempy into eax + lMul eax,viewData@@mPrecision ; multiply tempy by precision + pop ebx ; restore tempz/viewPlaneDistance + divide eax,ebx ; divide tempx/(tempz/viewPlaneDistance) + mov es:[di].Point.Point@@y,ax ; store the result into Point.y + jmp @@return ; we're all done here +@@screenPointZero: ; screenPointZero sync address + mov es:[di].Point.Point@@x,0000h ; zero out screen point-x + mov es:[di].Point.Point@@y,0000h ; zero out screen point-y +@@return: +ENDM +calculateCartesianPoints MACRO +LOCAL @@return + cmp dword ptr[bp+0Eh],00000001h ; are we using cartesian mapping ?? + jne @@return ; if not then return + movzx eax,viewData@@mViewSystem.PureViewSystem@@viewPortWidth ; move viewPortWidth to eax + divide eax,02h ; divide viewPortWidth by two + movsx ebx,es:[di].Point.Point@@x ; move point.x to ebx register + add eax,ebx ; add (viewPortWidth/2)+point.x + mov es:[di].Point.Point@@x,ax ; store result back to point.x + movzx eax,viewData@@mViewSystem.PureViewSystem@@viewPortHeight ; move viewPortHeight to eax + divide eax,02h ; divide viewPortHeight by two + movsx ebx,es:[di].Point.Point@@y ; move point.y to ebx + add eax,ebx ; add (viewPortHeight/2)+point.y + mov es:[di].Point.Point@@y,ax ; store result back to point.y +@@return: +ENDM +initializeLocal MACRO +LOCAL @@adjustValueOne,@@syncOne,@@zerCheckOne,@@zerCheckTwo,@@zerCheckThree,@@protZero,@@return + xor eax,eax ; clear out eax register + mov tempValue,0001h ; put one into tempValue + mov ax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; move focusPoint.z to eax + sMul ax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; square z-point + sub tempValue,eax ; subtract result from one + cmp tempValue,0000h ; compare tempValue to zero + jge @@adjustValueOne ; jump if greater equal + mov v,00001h ; move one into v + jmp @@syncOne ; jump around next block +@@adjustValueOne: ; value adjust code + neg tempValue ; negate tempValue + push word ptr [tempValue] ; push high word + push word ptr [tempValue+02h] ; push low word + call _sqrt ; get the square root + add sp,04h ; readjust the stack + mov v,eax ; move sqrt into v +@@syncOne: ; sync address + cmp v,0000h ; is v zero ?? + je @@protZero ; if it is then set locals to one + movzx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to eax + divide eax,v ; divide focusPoint.x by v + mov aov,eax ; mov result to aov + movzx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to eax + divide eax,v ; divide focusPoint.y by v + mov bov,eax ; move result to bov + sMul viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x + divide eax,v ; divide result by v + mov acov,eax ; move result to acov + sMul viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y + divide eax,v ; divide result by v + mov bcov,eax ; move result to bcov + cmp aov,0000h ; compare aov to zero + jne @@zerCheckOne ; it's not zero so do next check + mov aov,0001h ; it's zero so set it to one +@@zerCheckOne: ; next check sync address + cmp bov,0000h ; compare bov to zero + jne @@zerCheckTwo ; it's not zero so do next check + mov bov,0001h ; it's zero so set it to one +@@zerCheckTwo: ; next check sync address + cmp acov,0000h ; compare acov to zero + jne @@zerCheckThree ; it's not zero so do next check + mov acov,0001h ; it's zero so set it to one +@@zerCheckThree: ; next check sync address + cmp bcov,0000h ; compare bcov to zero + jne @@return ; it's not zero so we're done + mov bcov,0001h ; it's zero so set it to one + jmp @@return ; we're all done checking for zero's +@@protZero: ; sync address + mov bov,0001h ; move one into bov + mov aov,0001h ; move one into aov + mov acov,0001h ; move one into acov + mov bcov,0001h ; move one into bcov +@@return: ; return sync address +ENDM +; The seeding below allows the MaClaurin series (for square root calcualtion) to converge much +; faster than if a random seed were used. The seeding works by selecting a known square root +; value in between the selected ranges. This proves to be faster, in general, than the standard +; library square root function, and can often times be twice as fast as the standard library. +firstGuess MACRO +LOCAL @@seedHund,@@seedFiveHund,@@seedThousand,@@seedFiveThousand,@@seedTenThousand,@@seedFiftyThousand, \ + @@seedHundThousand,@@seedFiveHundThousand,@@seedMillion,@seedFiveMillion,@@seedTemMillion,@@seedOther + cmp ecx,0064h ; compare value one hundred + jle @@seedHund ; jump if less equal + cmp ecx,01F4h ; compare value to five hundred + jle @@seedFiveHund ; jump if less equal + cmp ecx,03E8h ; compare value to one thousand + jle @@seedThousand ; jump if less equal + cmp ecx,1388h ; compare value to five thousand + jle @@seedFiveThousand ; jump if less equal + cmp ecx,2710h ; compare value to ten thousand + jle @@seedTenThousand ; jump if less equal + cmp ecx,0C350h ; compare value to fifty thousand + jle @@seedFiftyThousand ; jump if less equal + cmp ecx,186A0h ; compare value to one hundred thousand + jle @@seedHundThousand ; jump if less equal + cmp ecx,7A120h ; compare value to five hundred thousand + jle @@seedFiveHundThousand ; jump if less equal + cmp ecx,0F4240h ; compare value to one million + jle @@seedMillion ; jump if less equal + cmp ecx,4C4B40h ; compare value to five million + jle @@seedFiveMillion ; jump if less equal + cmp ecx,989680h ; compare value to ten million + jle @@seedTenMillion ; jump if less equal + jmp @@seedOther ; jump to default seed handler +@@seedHund: ; sync address + mov bestGuess,0007h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveHund: ; sync address + mov bestGuess,0010h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedThousand: ; sync address + mov bestGuess,001Bh ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveThousand: ; sync address + mov bestGuess,0037h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedTenThousand: ; sync address + mov bestGuess,0057h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiftyThousand: ; sync address + mov bestGuess,00ADh ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedHundThousand: ; sync address + mov bestGuess,0112h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveHundThousand: ; sync address + mov bestGuess,0224h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedMillion: ; sync address + mov bestGuess,0362h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveMillion: ; sync address + mov bestGuess,06C4h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedTenMillion: ; sync address + mov bestGuess,0AB3h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedOther: ; sync address + mov bestGuess,0C5Ah ; set initial guess +ENDM +sMul MACRO varOne,varTwo ; short multiplication + push bx ; save bx register + mov ax,varOne ; move varOne into ax register + mov bx,varTwo ; move varTwo into bx register + imul bx ; perform the multiply result to dx:ax + push ax ; save ax register result + movzx eax,dx ; move dx register to eax zero extend + shl eax,16 ; shift eax left by a word + pop ax ; restore ax register result + pop bx ; restore bx register +ENDM +lMul MACRO varOne,varTwo ; long multiplication + push ebx ; save ebx register + mov eax,varOne ; move varOne into eax register + mov ebx,varTwo ; move varTwo into ebx register + imul ebx ; multiply eax by ebx result to eax:edx + pop ebx ; restore ebx register +ENDM +round MACRO varOne ; round down floating point values stored as longs +LOCAL @@roundNeg,@@roundPos,@@return,@@noinc + mov eax,varOne ; move varOne into eax register + cmp eax,0000h ; is eax register less than zero ?? + pushf ; save flags + jl @@roundNeg ; if it is, we must take special measure + jmp @@roundPos ; otherwise round just round it +@@roundNeg: ; sync address + neg eax ; negate eax +@@roundPos: ; roundPos sync flag + mov edx,eax ; move varOne into edx register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment eax + jle @@noinc ; otherwise skip passed increment code + inc eax ; increment value in eax +@@noinc: ; no increment sync address + popf ; restore flags + jge @@return ; if value was not negative hust return + neg eax ; otherwise make it negative again +@@return: ; return sync flag +ENDM +divide MACRO varOne,varTwo ; destroyes eax,edx,ebx +LOCAL @@return,@@increment + mov ebx,varTwo ; move varTwo into ebx register + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv ebx ; divide eax/ebx result to eax, rem to edx + shr ebx,01h ; divide varTwo by two + cmp edx,ebx ; check to see if we have to bump eax + jge @@increment ; yes we do + jmp @@return ; no we dont +@@increment: ; increment sync address + inc eax ; increment eax +@@return: ; return sync address +ENDM +.CODE +_sqrt proc near +LOCAL bestGuess:DWORD=LocalLength + push bp ; save stack frame + mov bp,sp ; create new frame + sub sp,LocalLength ; adjust stack for local variables + mov ecx,dword ptr[bp+4] ; move target into ecx register + cmp ecx,0001h ; is target one ?? + je @@noop ; is target equal to one ?? + cmp ecx,0000h ; is target equal to zero ?? + jle @@erop ; set error if target is less equal zero. + firstGuess ; select the first guess value +@@nextGuess: ; next guess sync address + divide ecx,bestGuess ; divide target by best guess + add eax,bestGuess ; add in best guess + shr eax,0001h ; divide eax by two + adc eax,0000h ; add in any carry + cmp eax,bestGuess ; is the result the same, or greater, than our last result?? + je @@return ; if so then we're not getting any closer + mov bestGuess,eax ; result is next best guess + jmp @@nextGuess ; if not then continue along +@@erop: ; erop sync address + xor eax,eax ; errors in which we must set return to zero + jmp @@return ; jump over next handler +@@noop: ; null operation sync address + mov eax,0001h ; errors return one in eax register +@@return: ; return sync address + add sp,LocalLength ; readjust stack for local variables + pop bp ; restore stack frame + retn ; return near to caller +_sqrt endp +_initView proc far ; void initView(ViewSystem *lpViewSystem) + push bp ; save stack frame + mov bp,sp ; create new frame + push es ; save extra segment register + push di ; save destination index register + mov di,word ptr[bp+06h] ; move ViewSystem offset into source index register + mov es,word ptr[bp+08h] ; move ViewSystem segment into extra segment register + mov eax,es:[di].PureViewSystem@@cameraTwistRadians ; move cameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cameraTwistRadians,eax ; copy same to local + mov eax,es:[di].PureViewSystem@@cosCameraTwistRadians ; move cosCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians,eax ; copy same to local + mov eax,es:[di].PureViewSystem@@sinCameraTwistRadians ; move sinCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians,eax ; copy same to local + mov eax,es:[di].PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians ; move cosCameraTwistRadiansSinCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians,eax ; copy same to local + mov eax,es:[di].PureViewSystem@@viewPlaneDistance ; move viewPlaneDistance to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPlaneDistance,eax ; copy same to local + mov ax,es:[di].PureViewSystem@@viewPortWidth ; move viewPortWidth to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPortWidth,ax ; copy same to local + mov ax,es:[di].PureViewSystem@@viewPortHeight ; move viewPortHeight to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPortHeight,ax ; copy same to local + mov ax,es:[di].PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x ; move cameraPoint.x to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x,ax ; copy same to local + mov ax,es:[di].PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y ; move cameraPoint.y to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y,ax ; copy same to local + mov ax,es:[di].PureViewSystem@@cameraPoint.Point3D@@Point@@z ; move cameraPoint.z to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@Point@@z,ax ; copy same to local + mov ax,es:[di].PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x,ax ; copy same to local + mov ax,es:[di].PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y,ax ; copy same to local + mov ax,es:[di].PureViewSystem@@focusPoint.Point3D@@Point@@z ; move focusPoint.z to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,ax ; copy same to local + pop di ; restore destination index register + pop es ; restore extra segment register + pop bp ; restore old frame + retf ; return far to caller +_initView endp +_mapCoordinates proc far ; void mapCoordinates(const Point3D *lpPoint3D,Point *lpPoint,WORD useCartesianSystem) +LOCAL tempValue:DWORD,v:DWORD,aov:DWORD,bov:DWORD,acov:DWORD,bcov:DWORD,tempx:DWORD,tempy:DWORD,tempz:DWORD=LocalLength + push bp ; save old stack frame + mov bp,sp ; create new frame + sub sp,LocalLength ; adjust stack for local variables + push es ; save extra segment register + push di ; save destination index register + mov es,word ptr[bp+08h] ; move segment (Point3D *) to extra segment register + mov di,word ptr[bp+06h] ; move offset (Point3D *) to destination index register + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + calculatePoint2D ; calculate the screen points + calculateCartesianPoints ; convert screen points to cartesian points (if need be) +@@return: + pop di ; restore destination index register + pop es ; restore extra segment register + add sp,LocalLength ; adjust stack for local variables + pop bp ; restore old frame + retf ; return far to caller +_mapCoordinates endp +public _initView +public _mapCoordinates +END + diff --git a/engine/VSMAP32.ASM b/engine/VSMAP32.ASM new file mode 100644 index 0000000..73ceab3 --- /dev/null +++ b/engine/VSMAP32.ASM @@ -0,0 +1,529 @@ +;************************************************************************************* +; MODULE: VSMAP32.ASM DATE: APRIL 20,1995 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : VIEW SYSTEM OBJECT MAPPER +; MODIFIED MARCH 9, 1998 TO HANDLE POLYGON MAPPING +;************************************************************************************* +.386 +.MODEL FLAT +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\VSMAP.INC +.DATA +viewData@@mViewSystem ViewSystem ? +viewData@@mPrecision DD 00004000h +calculateTempx MACRO + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosCameraTwistRadians to eax + lMul eax,bov ; multiply cosCameraTwistRadians by bov + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinCameraTwistRadians to eax + lMul eax,acov ; multiply sinCameraTwistRadians by bov + pop ebx ; restore prior result to ebx + sub ebx,eax ; subtract prior result by current result + movsx eax,[edi].Point3D@@xyPoint.Point@@x ; move point3D.x into ebx register + lMul eax,ebx ; multiply point3D.x by result + round eax ; round off result + push eax ; save result + mov eax,bov ; move bov into eax register + neg eax ; negate bov (eax) + mov ebx,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to ebx + lMul eax,ebx ; multiply, result to eax + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to eax + lMul eax,acov ; multiply, result to eax + pop ebx ; restore previous result + sub ebx,eax ; subtract last result from previous + movsx eax,[edi].Point3D@@xyPoint.Point@@y ; move point3D.y to eax + lMul eax,ebx ; multiply point3D.y by last result + round eax ; round off result + pop ebx ; restore first result + add ebx,eax ; add to current result + movsx eax,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x ; move cameraPoint.x to eax + sub ebx,eax ; sub out cameraPoint.x + mov tempx,ebx ; move result to tempx +ENDM +calculateTempy MACRO + mov eax,aov ; move aov to eax register + neg eax ; negate aov + mov ebx,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to ebx + lMul eax,ebx ; multiply cosTwist*aov + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to eax + lMul eax,bcov ; sinTwist*bcov -> eax + pop ebx ; restore last result + sub ebx,eax ; subtract curr result from last result + movsx eax,[edi].Point3D@@xyPoint.Point@@x ; move point3D.x to eax + lMul eax,ebx ; multiply it out + round eax ; round off result + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to eax + lMul eax,aov ; sinTwist*aov -> eax + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to eax + lMul eax,bcov ; cosTwist*bcov -> eax + pop ebx ; restore last result + sub ebx,eax ; subtract curr result from last result + movsx eax,[edi].Point3D@@xyPoint.Point@@y ; move point3D.y to eax + lMul eax,ebx ; multiply last result by point3D.y + round eax ; round off the result + pop ebx ; restore prior result + add ebx,eax ; add prior result to current result + push ebx ; save new result + movsx ebx,[edi].Point3D@@Point@@z ; move point3D.z to ebx + lMul ebx,v ; now multiply by curr v + movsx ebx,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y ; move cameraPoint.y to eax + sub eax,ebx ; sub out last result + pop ebx ; restore prior result + add eax,ebx ; add prior result to current result + mov tempy,eax ; store result in tempy +ENDM +calculateTempz MACRO + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to ebx + lMul eax,ebx ; multiply it out + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; mov sinTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to ebx + lMul eax,ebx ; multiply it out + pop ebx ; restore previous result to ebx + add eax,ebx ; add previous result to current + movsx ebx,[edi].Point3D@@xyPoint.Point@@x ; move point3D.x to ebx + lMul eax,ebx ; multiply previous result by point3D.x + round eax ; round off the result + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; mov focusPoint.x to ebx + neg ebx ; negate focusPointy.x + lMul eax,ebx ; multiply focusPoint.x by sinTwistRadians + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; mov focusPoint.y to ebx + lMul eax,ebx ; multiply focusPoint.y by cosTwistRadians + pop ebx ; restore previous result to ebx + add eax,ebx ; add current result to previous result + movsx ebx,[edi].Point3D@@xyPoint.Point@@y ; move point3D.y to ebx + lMul eax,ebx ; multiply previous result by point3D.y + round eax ; round off the result + pop ebx ; restore previous result + add eax,ebx ; add curent result to previous + push eax ; save the result + movsx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; mov focusPoint.z to eax + movsx ebx,[edi].Point3D@@Point@@z ; mov point3D.z to ebx + lMul eax,ebx ; multiply focusPoint.z by point3D.z + pop ebx ; restore previous result + add eax,ebx ; add current result to previous result + movsx ebx,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@Point@@z ; move cameraPoint.z to ebx + sub eax,ebx ; subtract cameraPoint.z from curr result + mov tempz,eax ; move result to tempz +ENDM +calculatePoint2D MACRO +LOCAL @@screenPointZero,@@return + cmp tempz,0000h ; is the z-point zero ?? + je @@screenPointZero ; it's zero, so set screen point to (0,0) + mov eax,tempz ; move tempz into eax register + lMul eax,viewData@@mPrecision ; multiply tempz by precision + mov ebx,viewData@@mViewSystem.PureViewSystem@@viewPlaneDistance ; move viewPlaneDistance into ebx + divide eax,ebx ; divide tempz by viewPlaneDistance + push eax ; save the result ... + push eax ; twice + mov eax,tempx ; move tempx into eax + lMul eax,viewData@@mPrecision ; multiply tempx by precision + pop ebx ; restore previous result + divide eax,ebx ; divide current result by previous + mov [edi].Point.Point@@x,ax ; store the result into Point.x + mov eax,tempy ; move tempy into eax + lMul eax,viewData@@mPrecision ; multiply tempy by precision + pop ebx ; restore tempz/viewPlaneDistance + divide eax,ebx ; divide tempx/(tempz/viewPlaneDistance) + mov [edi].Point.Point@@y,ax ; store the result into Point.y + jmp @@return ; we're all done here +@@screenPointZero: ; screenPointZero sync address + mov [edi].Point.Point@@x,0000h ; zero out screen point-x + mov [edi].Point.Point@@y,0000h ; zero out screen point-y +@@return: +ENDM +calculateCartesianPoints MACRO +LOCAL @@return + cmp eax,0001h ; is mode one ?? + jne @@return ; if not then return + movzx eax,viewData@@mViewSystem.PureViewSystem@@viewPortWidth ; move viewPortWidth to eax + divide eax,02h ; divide viewPortWidth by two + movsx ebx,[edi].Point.Point@@x ; move point.x to ebx register + add eax,ebx ; add (viewPortWidth/2)+point.x + mov [edi].Point.Point@@x,ax ; store result back to point.x + movzx eax,viewData@@mViewSystem.PureViewSystem@@viewPortHeight ; move viewPortHeight to eax + divide eax,02h ; divide viewPortHeight by two + movsx ebx,[edi].Point.Point@@y ; move point.y to ebx + add eax,ebx ; add (viewPortHeight/2)+point.y + mov [edi].Point.Point@@y,ax ; store result back to point.y +@@return: +ENDM +initializeLocal MACRO +LOCAL @@adjustValueOne,@@syncOne,@@zerCheckOne,@@zerCheckTwo,@@zerCheckThree,@@protZero,@@return + xor eax,eax ; clear out eax register + mov tempValue,0001h ; put one into tempValue + mov ax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; move focusPoint.z to eax + sMul ax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; square z-point + sub tempValue,eax ; subtract result from one + cmp tempValue,0000h ; compare tempValue to zero + jge @@adjustValueOne ; jump if greater equal + mov v,00001h ; move one into v + jmp @@syncOne ; jump around next block +@@adjustValueOne: ; value adjust code + neg tempValue ; negate tempValue + push tempValue ; push tempValue + call _sqrt ; get the square root + add esp,04h ; readjust the stack + mov v,eax ; move sqrt into v +@@syncOne: ; sync address + cmp v,0000h ; is v zero ?? + je @@protZero ; if it is then set locals to one + movzx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to eax + divide eax,v ; divide focusPoint.x by v + mov aov,eax ; mov result to aov + movzx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to eax + divide eax,v ; divide focusPoint.y by v + mov bov,eax ; move result to bov + sMul viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x + divide eax,v ; divide result by v + mov acov,eax ; move result to acov + sMul viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y + divide eax,v ; divide result by v + mov bcov,eax ; move result to bcov + cmp aov,0000h ; compare aov to zero + jne @@zerCheckOne ; it's not zero so do next check + mov aov,0001h ; it's zero so set it to one +@@zerCheckOne: ; next check sync address + cmp bov,0000h ; compare bov to zero + jne @@zerCheckTwo ; it's not zero so do next check + mov bov,0001h ; it's zero so set it to one +@@zerCheckTwo: ; next check sync address + cmp acov,0000h ; compare acov to zero + jne @@zerCheckThree ; it's not zero so do next check + mov acov,0001h ; it's zero so set it to one +@@zerCheckThree: ; next check sync address + cmp bcov,0000h ; compare bcov to zero + jne @@return ; it's not zero so we're done + mov bcov,0001h ; it's zero so set it to one + jmp @@return ; we're all done checking for zero's +@@protZero: ; sync address + mov bov,0001h ; move one into bov + mov aov,0001h ; move one into aov + mov acov,0001h ; move one into acov + mov bcov,0001h ; move one into bcov +@@return: ; return sync address +ENDM +; The seeding below allows the MaClaurin series (for square root calcualtion) to converge much +; faster than if a random seed were used. The seeding works by selecting a known square root +; value in between the selected ranges. This proves to be faster, in general, than the standard +; library square root function, and can often times be twice as fast as the standard library. +firstGuess MACRO +LOCAL @@seedHund,@@seedFiveHund,@@seedThousand,@@seedFiveThousand,@@seedTenThousand,@@seedFiftyThousand, \ + @@seedHundThousand,@@seedFiveHundThousand,@@seedMillion,@seedFiveMillion,@@seedTemMillion,@@seedOther + cmp ecx,0064h ; compare value one hundred + jle @@seedHund ; jump if less equal + cmp ecx,01F4h ; compare value to five hundred + jle @@seedFiveHund ; jump if less equal + cmp ecx,03E8h ; compare value to one thousand + jle @@seedThousand ; jump if less equal + cmp ecx,1388h ; compare value to five thousand + jle @@seedFiveThousand ; jump if less equal + cmp ecx,2710h ; compare value to ten thousand + jle @@seedTenThousand ; jump if less equal + cmp ecx,0C350h ; compare value to fifty thousand + jle @@seedFiftyThousand ; jump if less equal + cmp ecx,186A0h ; compare value to one hundred thousand + jle @@seedHundThousand ; jump if less equal + cmp ecx,7A120h ; compare value to five hundred thousand + jle @@seedFiveHundThousand ; jump if less equal + cmp ecx,0F4240h ; compare value to one million + jle @@seedMillion ; jump if less equal + cmp ecx,4C4B40h ; compare value to five million + jle @@seedFiveMillion ; jump if less equal + cmp ecx,989680h ; compare value to ten million + jle @@seedTenMillion ; jump if less equal + jmp @@seedOther ; jump to default seed handler +@@seedHund: ; sync address + mov bestGuess,0007h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveHund: ; sync address + mov bestGuess,0010h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedThousand: ; sync address + mov bestGuess,001Bh ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveThousand: ; sync address + mov bestGuess,0037h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedTenThousand: ; sync address + mov bestGuess,0057h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiftyThousand: ; sync address + mov bestGuess,00ADh ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedHundThousand: ; sync address + mov bestGuess,0112h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveHundThousand: ; sync address + mov bestGuess,0224h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedMillion: ; sync address + mov bestGuess,0362h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveMillion: ; sync address + mov bestGuess,06C4h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedTenMillion: ; sync address + mov bestGuess,0AB3h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedOther: ; sync address + mov bestGuess,0C5Ah ; set initial guess +ENDM +sMul MACRO varOne,varTwo ; short multiplication + push bx ; save bx register + mov ax,varOne ; move varOne into ax register + mov bx,varTwo ; move varTwo into bx register + imul bx ; perform the multiply result to dx:ax + push ax ; save ax register result + movzx eax,dx ; move dx register to eax zero extend + shl eax,16 ; shift eax left by a word + pop ax ; restore ax register result + pop bx ; restore bx register +ENDM +lMul MACRO varOne,varTwo ; long multiplication + push ebx ; save ebx register + mov eax,varOne ; move varOne into eax register + mov ebx,varTwo ; move varTwo into ebx register + imul ebx ; multiply eax by ebx result to eax:edx + pop ebx ; restore ebx register +ENDM +round MACRO varOne ; round down floating point values stored as longs +LOCAL @@roundNeg,@@roundPos,@@return,@@noinc + mov eax,varOne ; move varOne into eax register + cmp eax,0000h ; is eax register less than zero ?? + pushf ; save flags + jl @@roundNeg ; if it is, we must take special measure + jmp @@roundPos ; otherwise round just round it +@@roundNeg: ; sync address + neg eax ; negate eax +@@roundPos: ; roundPos sync flag + mov edx,eax ; move varOne into edx register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment eax + jle @@noinc ; otherwise skip passed increment code + inc eax ; increment value in eax +@@noinc: ; no increment sync address + popf ; restore flags + jge @@return ; if value was not negative hust return + neg eax ; otherwise make it negative again +@@return: ; return sync flag +ENDM +divide MACRO varOne,varTwo ; destroyes eax,edx,ebx +LOCAL @@return,@@increment,@@zero + mov ebx,varTwo ; move varTwo into ebx register + cmp ebx,0000h ; are we going to divide by zero + je @@zero ; if so then we'll just return zero + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv ebx ; divide eax/ebx result to eax, rem to edx + shr ebx,01h ; divide varTwo by two + cmp edx,ebx ; check to see if we have to bump eax + jge @@increment ; yes we do + jmp @@return ; no we dont +@@zero: ; zero handler sync address + xor eax,eax ; zero out the return + jmp @@return ; we're done here +@@increment: ; increment sync address + inc eax ; increment eax +@@return: ; return sync address +ENDM +.CODE +_sqrt proc near +LOCAL bestGuess:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; adjust stack for locals + mov ecx,[ebp+08h] ; move target into ecx register + cmp ecx,0001h ; is target one ?? + je @@noop ; is target equal to one ?? + cmp ecx,0000h ; is target equal to zero ?? + jle @@erop ; set error if target is less equal zero. + firstGuess ; select the first guess value +@@nextGuess: ; next guess sync address + divide ecx,bestGuess ; divide target by best guess + add eax,bestGuess ; add in best guess + shr eax,0001h ; divide eax by two + adc eax,0000h ; add in any carry + cmp eax,bestGuess ; is the result the same, or greater, than our last result?? + je @@return ; if so then we're not getting any closer + mov bestGuess,eax ; result is next best guess + jmp @@nextGuess ; if not then continue along +@@erop: ; erop sync address + xor eax,eax ; errors in which we must set return to zero + jmp @@return ; jump over next handler +@@noop: ; null operation sync address + mov eax,0001h ; errors return one in eax register +@@return: ; return sync address + add esp,LocalLength ; readjust stack for locals + pop ebp ; restore old stack frame + retn ; return near to caller +_sqrt endp +_initView proc near ; void initView(ViewSystem *lpViewSystem) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push edi ; save destination index register + mov edi,[ebp+08h] ; move ViewSystem offset into destination index register + mov eax,[edi].PureViewSystem@@cameraTwistRadians ; move cameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@cosCameraTwistRadians ; move cosCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@sinCameraTwistRadians ; move sinCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians ; move cosCameraTwistRadiansSinCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@viewPlaneDistance ; move viewPlaneDistance to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPlaneDistance,eax ; copy same to local + mov ax,[edi].PureViewSystem@@viewPortWidth ; move viewPortWidth to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPortWidth,ax ; copy same to local + mov ax,[edi].PureViewSystem@@viewPortHeight ; move viewPortHeight to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPortHeight,ax ; copy same to local + mov ax,[edi].PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x ; move cameraPoint.x to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x,ax ; copy same to local + mov ax,[edi].PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y ; move cameraPoint.y to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y,ax ; copy same to local + mov ax,[edi].PureViewSystem@@cameraPoint.Point3D@@Point@@z ; move cameraPoint.z to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@Point@@z,ax ; copy same to local + mov ax,[edi].PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x,ax ; copy same to local + mov ax,[edi].PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y,ax ; copy same to local + mov ax,[edi].PureViewSystem@@focusPoint.Point3D@@Point@@z ; move focusPoint.z to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,ax ; copy same to local + pop edi ; restore destination index register + pop ebp ; restore old frame + retn ; return far to caller +_initView endp +_mapCoordinates proc near ; void mapCoordinates(const Point3D *lpPoint3D,Point *lpPoint,WORD useCartesianSystem) +LOCAL tempValue:DWORD,v:DWORD,aov:DWORD,bov:DWORD,acov:DWORD,bcov:DWORD,tempx:DWORD,tempy:DWORD,tempz:DWORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; adjust stack for local variables + pushad ; save all general purpose registers, caller may use inline expansion + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) +@@return: ; return sync address + popad ; restore all general purpose registers + add esp,LocalLength ; adjust stack for local variables + pop ebp ; restore old frame + retn ; return near to caller +_mapCoordinates endp +_mapVectorCoordinates proc near ; void mapCoordinates(const Point3D *lpPoint3D,Point *lpPoint,WORD useCartesianSystem) + push ebp ; save frame + mov ebp,esp ; create new frame + pushad ; save all general purpose registers + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + add edi,size Point3D ; increment edi to point to Point3D[1] + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + add edi,size Point ; increment edi to point to Point[1] + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + add edi,size Point3D*2 ; increment edi to point to Point3D[1] + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + add edi,size Point*2 ; increment edi to point to Point[1] + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + add edi,size Point3D*3 ; increment edi to point to Point3D[1] + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + add edi,size Point*3 ; increment edi to point to Point[1] + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + popad ; restore all general purpose registers + pop ebp ; restore previous frame + retn ; return near to caller +_mapVectorCoordinates endp + +_mapPolygonCoordinates proc near ; void mapPolygonCoordinates(Polygon *pPolygon) + push ebp ; save prior stack frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move pPolygon into source index register + mov ecx,Polygon3D[esi].Polygon3D@@mBlockLine3D.BlockLine3D@@mSize ; move Line3D item count into ecx register + cmp ecx,0000h ; are there any lines in the Line3D block? + je @@endproc ; if not then we're done here + cmp ecx,Polygon3D[esi].Polygon3D@@mBlockLine2D.BlockLine2D@@mSize ; check Line3D count against Line2D count + jne @@endproc ; must have same number of Line3D's as Line2D's + mov edi,Polygon3D[esi].Polygon3D@@mBlockLine3D.BlockLine3D@@mContainer ; get to Line3D container + mov esi,Polygon3D[esi].Polygon3D@@mBlockLine2D.BlockLine2D@@mContainer ; get to Line2D container +@@protiter: ; iteration sync address + cmp edi,0000h ; is this a valid 3D container? + je @@endproc ; if not then we're done here + mov eax,Line3DNodePtr[edi].Line3DNodePtr@@mItem ; move Line3D ptr to eax + lea eax,Line3D[eax].Line3D@@mFirstPoint ; eax contains first Point3D ptr + mov ebx,Line2DNodePtr[esi].Line2DNodePtr@@mItem ; move Line2D ptr to ebx + lea ebx,Line2D[ebx].Line2D@@mFirstPoint ; ebx contains first Point2D ptr + push 0001h ; use cartesian coordinate system + push ebx ; save Point2D ptr + push eax ; save Point3D ptr + call _mapCoordinates ; map the coordinates + add esp,000Ch ; adjust stack after call + mov eax,Line3DNodePtr[edi].Line3DNodePtr@@mItem ; move Line3D ptr to eax + lea eax,Line3D[eax].Line3D@@mSecondPoint ; eax contains first Point3D ptr + mov ebx,Line2DNodePtr[esi].Line2DNodePtr@@mItem ; move Line2D ptr to ebx + lea ebx,Line2D[ebx].Line2D@@mSecondPoint ; ebx contains first Point2D ptr + push 0001h ; use cartesian coordinate system + push ebx ; save Point2D ptr + push eax ; save Point3D ptr + call _mapCoordinates ; map the coordinates + add esp,000Ch ; adjust stack after call + mov edi,Line3DNodePtr[edi].Line3DNodePtr@@mLine3DNodePtrNext ; advance to next element in Line3D block + mov esi,Line2DNodePtr[esi].Line2DNodePtr@@mLine2DNodePtrNext ; advance to next element in Line2D block + jmp @@protiter ; continue iteration through polygon +@@endproc: ; endproc sync address + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_mapPolygonCoordinates endp + +public _initView +public _mapCoordinates +public _mapVectorCoordinates +public _mapPolygonCoordinates +END + diff --git a/engine/VSMAP32.BAK b/engine/VSMAP32.BAK new file mode 100644 index 0000000..73ceab3 --- /dev/null +++ b/engine/VSMAP32.BAK @@ -0,0 +1,529 @@ +;************************************************************************************* +; MODULE: VSMAP32.ASM DATE: APRIL 20,1995 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : VIEW SYSTEM OBJECT MAPPER +; MODIFIED MARCH 9, 1998 TO HANDLE POLYGON MAPPING +;************************************************************************************* +.386 +.MODEL FLAT +LOCALS +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\ENGINE\VSMAP.INC +.DATA +viewData@@mViewSystem ViewSystem ? +viewData@@mPrecision DD 00004000h +calculateTempx MACRO + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosCameraTwistRadians to eax + lMul eax,bov ; multiply cosCameraTwistRadians by bov + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinCameraTwistRadians to eax + lMul eax,acov ; multiply sinCameraTwistRadians by bov + pop ebx ; restore prior result to ebx + sub ebx,eax ; subtract prior result by current result + movsx eax,[edi].Point3D@@xyPoint.Point@@x ; move point3D.x into ebx register + lMul eax,ebx ; multiply point3D.x by result + round eax ; round off result + push eax ; save result + mov eax,bov ; move bov into eax register + neg eax ; negate bov (eax) + mov ebx,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to ebx + lMul eax,ebx ; multiply, result to eax + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to eax + lMul eax,acov ; multiply, result to eax + pop ebx ; restore previous result + sub ebx,eax ; subtract last result from previous + movsx eax,[edi].Point3D@@xyPoint.Point@@y ; move point3D.y to eax + lMul eax,ebx ; multiply point3D.y by last result + round eax ; round off result + pop ebx ; restore first result + add ebx,eax ; add to current result + movsx eax,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x ; move cameraPoint.x to eax + sub ebx,eax ; sub out cameraPoint.x + mov tempx,ebx ; move result to tempx +ENDM +calculateTempy MACRO + mov eax,aov ; move aov to eax register + neg eax ; negate aov + mov ebx,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to ebx + lMul eax,ebx ; multiply cosTwist*aov + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to eax + lMul eax,bcov ; sinTwist*bcov -> eax + pop ebx ; restore last result + sub ebx,eax ; subtract curr result from last result + movsx eax,[edi].Point3D@@xyPoint.Point@@x ; move point3D.x to eax + lMul eax,ebx ; multiply it out + round eax ; round off result + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwist to eax + lMul eax,aov ; sinTwist*aov -> eax + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwist to eax + lMul eax,bcov ; cosTwist*bcov -> eax + pop ebx ; restore last result + sub ebx,eax ; subtract curr result from last result + movsx eax,[edi].Point3D@@xyPoint.Point@@y ; move point3D.y to eax + lMul eax,ebx ; multiply last result by point3D.y + round eax ; round off the result + pop ebx ; restore prior result + add ebx,eax ; add prior result to current result + push ebx ; save new result + movsx ebx,[edi].Point3D@@Point@@z ; move point3D.z to ebx + lMul ebx,v ; now multiply by curr v + movsx ebx,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y ; move cameraPoint.y to eax + sub eax,ebx ; sub out last result + pop ebx ; restore prior result + add eax,ebx ; add prior result to current result + mov tempy,eax ; store result in tempy +ENDM +calculateTempz MACRO + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to ebx + lMul eax,ebx ; multiply it out + push eax ; save result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; mov sinTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to ebx + lMul eax,ebx ; multiply it out + pop ebx ; restore previous result to ebx + add eax,ebx ; add previous result to current + movsx ebx,[edi].Point3D@@xyPoint.Point@@x ; move point3D.x to ebx + lMul eax,ebx ; multiply previous result by point3D.x + round eax ; round off the result + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians ; move sinTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; mov focusPoint.x to ebx + neg ebx ; negate focusPointy.x + lMul eax,ebx ; multiply focusPoint.x by sinTwistRadians + push eax ; save the result + mov eax,viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians ; move cosTwistRadians to eax + movsx ebx,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; mov focusPoint.y to ebx + lMul eax,ebx ; multiply focusPoint.y by cosTwistRadians + pop ebx ; restore previous result to ebx + add eax,ebx ; add current result to previous result + movsx ebx,[edi].Point3D@@xyPoint.Point@@y ; move point3D.y to ebx + lMul eax,ebx ; multiply previous result by point3D.y + round eax ; round off the result + pop ebx ; restore previous result + add eax,ebx ; add curent result to previous + push eax ; save the result + movsx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; mov focusPoint.z to eax + movsx ebx,[edi].Point3D@@Point@@z ; mov point3D.z to ebx + lMul eax,ebx ; multiply focusPoint.z by point3D.z + pop ebx ; restore previous result + add eax,ebx ; add current result to previous result + movsx ebx,viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@Point@@z ; move cameraPoint.z to ebx + sub eax,ebx ; subtract cameraPoint.z from curr result + mov tempz,eax ; move result to tempz +ENDM +calculatePoint2D MACRO +LOCAL @@screenPointZero,@@return + cmp tempz,0000h ; is the z-point zero ?? + je @@screenPointZero ; it's zero, so set screen point to (0,0) + mov eax,tempz ; move tempz into eax register + lMul eax,viewData@@mPrecision ; multiply tempz by precision + mov ebx,viewData@@mViewSystem.PureViewSystem@@viewPlaneDistance ; move viewPlaneDistance into ebx + divide eax,ebx ; divide tempz by viewPlaneDistance + push eax ; save the result ... + push eax ; twice + mov eax,tempx ; move tempx into eax + lMul eax,viewData@@mPrecision ; multiply tempx by precision + pop ebx ; restore previous result + divide eax,ebx ; divide current result by previous + mov [edi].Point.Point@@x,ax ; store the result into Point.x + mov eax,tempy ; move tempy into eax + lMul eax,viewData@@mPrecision ; multiply tempy by precision + pop ebx ; restore tempz/viewPlaneDistance + divide eax,ebx ; divide tempx/(tempz/viewPlaneDistance) + mov [edi].Point.Point@@y,ax ; store the result into Point.y + jmp @@return ; we're all done here +@@screenPointZero: ; screenPointZero sync address + mov [edi].Point.Point@@x,0000h ; zero out screen point-x + mov [edi].Point.Point@@y,0000h ; zero out screen point-y +@@return: +ENDM +calculateCartesianPoints MACRO +LOCAL @@return + cmp eax,0001h ; is mode one ?? + jne @@return ; if not then return + movzx eax,viewData@@mViewSystem.PureViewSystem@@viewPortWidth ; move viewPortWidth to eax + divide eax,02h ; divide viewPortWidth by two + movsx ebx,[edi].Point.Point@@x ; move point.x to ebx register + add eax,ebx ; add (viewPortWidth/2)+point.x + mov [edi].Point.Point@@x,ax ; store result back to point.x + movzx eax,viewData@@mViewSystem.PureViewSystem@@viewPortHeight ; move viewPortHeight to eax + divide eax,02h ; divide viewPortHeight by two + movsx ebx,[edi].Point.Point@@y ; move point.y to ebx + add eax,ebx ; add (viewPortHeight/2)+point.y + mov [edi].Point.Point@@y,ax ; store result back to point.y +@@return: +ENDM +initializeLocal MACRO +LOCAL @@adjustValueOne,@@syncOne,@@zerCheckOne,@@zerCheckTwo,@@zerCheckThree,@@protZero,@@return + xor eax,eax ; clear out eax register + mov tempValue,0001h ; put one into tempValue + mov ax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; move focusPoint.z to eax + sMul ax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z ; square z-point + sub tempValue,eax ; subtract result from one + cmp tempValue,0000h ; compare tempValue to zero + jge @@adjustValueOne ; jump if greater equal + mov v,00001h ; move one into v + jmp @@syncOne ; jump around next block +@@adjustValueOne: ; value adjust code + neg tempValue ; negate tempValue + push tempValue ; push tempValue + call _sqrt ; get the square root + add esp,04h ; readjust the stack + mov v,eax ; move sqrt into v +@@syncOne: ; sync address + cmp v,0000h ; is v zero ?? + je @@protZero ; if it is then set locals to one + movzx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to eax + divide eax,v ; divide focusPoint.x by v + mov aov,eax ; mov result to aov + movzx eax,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to eax + divide eax,v ; divide focusPoint.y by v + mov bov,eax ; move result to bov + sMul viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x + divide eax,v ; divide result by v + mov acov,eax ; move result to acov + sMul viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y + divide eax,v ; divide result by v + mov bcov,eax ; move result to bcov + cmp aov,0000h ; compare aov to zero + jne @@zerCheckOne ; it's not zero so do next check + mov aov,0001h ; it's zero so set it to one +@@zerCheckOne: ; next check sync address + cmp bov,0000h ; compare bov to zero + jne @@zerCheckTwo ; it's not zero so do next check + mov bov,0001h ; it's zero so set it to one +@@zerCheckTwo: ; next check sync address + cmp acov,0000h ; compare acov to zero + jne @@zerCheckThree ; it's not zero so do next check + mov acov,0001h ; it's zero so set it to one +@@zerCheckThree: ; next check sync address + cmp bcov,0000h ; compare bcov to zero + jne @@return ; it's not zero so we're done + mov bcov,0001h ; it's zero so set it to one + jmp @@return ; we're all done checking for zero's +@@protZero: ; sync address + mov bov,0001h ; move one into bov + mov aov,0001h ; move one into aov + mov acov,0001h ; move one into acov + mov bcov,0001h ; move one into bcov +@@return: ; return sync address +ENDM +; The seeding below allows the MaClaurin series (for square root calcualtion) to converge much +; faster than if a random seed were used. The seeding works by selecting a known square root +; value in between the selected ranges. This proves to be faster, in general, than the standard +; library square root function, and can often times be twice as fast as the standard library. +firstGuess MACRO +LOCAL @@seedHund,@@seedFiveHund,@@seedThousand,@@seedFiveThousand,@@seedTenThousand,@@seedFiftyThousand, \ + @@seedHundThousand,@@seedFiveHundThousand,@@seedMillion,@seedFiveMillion,@@seedTemMillion,@@seedOther + cmp ecx,0064h ; compare value one hundred + jle @@seedHund ; jump if less equal + cmp ecx,01F4h ; compare value to five hundred + jle @@seedFiveHund ; jump if less equal + cmp ecx,03E8h ; compare value to one thousand + jle @@seedThousand ; jump if less equal + cmp ecx,1388h ; compare value to five thousand + jle @@seedFiveThousand ; jump if less equal + cmp ecx,2710h ; compare value to ten thousand + jle @@seedTenThousand ; jump if less equal + cmp ecx,0C350h ; compare value to fifty thousand + jle @@seedFiftyThousand ; jump if less equal + cmp ecx,186A0h ; compare value to one hundred thousand + jle @@seedHundThousand ; jump if less equal + cmp ecx,7A120h ; compare value to five hundred thousand + jle @@seedFiveHundThousand ; jump if less equal + cmp ecx,0F4240h ; compare value to one million + jle @@seedMillion ; jump if less equal + cmp ecx,4C4B40h ; compare value to five million + jle @@seedFiveMillion ; jump if less equal + cmp ecx,989680h ; compare value to ten million + jle @@seedTenMillion ; jump if less equal + jmp @@seedOther ; jump to default seed handler +@@seedHund: ; sync address + mov bestGuess,0007h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveHund: ; sync address + mov bestGuess,0010h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedThousand: ; sync address + mov bestGuess,001Bh ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveThousand: ; sync address + mov bestGuess,0037h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedTenThousand: ; sync address + mov bestGuess,0057h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiftyThousand: ; sync address + mov bestGuess,00ADh ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedHundThousand: ; sync address + mov bestGuess,0112h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveHundThousand: ; sync address + mov bestGuess,0224h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedMillion: ; sync address + mov bestGuess,0362h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedFiveMillion: ; sync address + mov bestGuess,06C4h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedTenMillion: ; sync address + mov bestGuess,0AB3h ; set initial guess + jmp @@nextGuess ; jump to next guess +@@seedOther: ; sync address + mov bestGuess,0C5Ah ; set initial guess +ENDM +sMul MACRO varOne,varTwo ; short multiplication + push bx ; save bx register + mov ax,varOne ; move varOne into ax register + mov bx,varTwo ; move varTwo into bx register + imul bx ; perform the multiply result to dx:ax + push ax ; save ax register result + movzx eax,dx ; move dx register to eax zero extend + shl eax,16 ; shift eax left by a word + pop ax ; restore ax register result + pop bx ; restore bx register +ENDM +lMul MACRO varOne,varTwo ; long multiplication + push ebx ; save ebx register + mov eax,varOne ; move varOne into eax register + mov ebx,varTwo ; move varTwo into ebx register + imul ebx ; multiply eax by ebx result to eax:edx + pop ebx ; restore ebx register +ENDM +round MACRO varOne ; round down floating point values stored as longs +LOCAL @@roundNeg,@@roundPos,@@return,@@noinc + mov eax,varOne ; move varOne into eax register + cmp eax,0000h ; is eax register less than zero ?? + pushf ; save flags + jl @@roundNeg ; if it is, we must take special measure + jmp @@roundPos ; otherwise round just round it +@@roundNeg: ; sync address + neg eax ; negate eax +@@roundPos: ; roundPos sync flag + mov edx,eax ; move varOne into edx register + and edx,00003FFFh ; get remainder into edx register + shr eax,14 ; get whole number to eax register + cmp edx,8192 ; if remainder > 8192, increment eax + jle @@noinc ; otherwise skip passed increment code + inc eax ; increment value in eax +@@noinc: ; no increment sync address + popf ; restore flags + jge @@return ; if value was not negative hust return + neg eax ; otherwise make it negative again +@@return: ; return sync flag +ENDM +divide MACRO varOne,varTwo ; destroyes eax,edx,ebx +LOCAL @@return,@@increment,@@zero + mov ebx,varTwo ; move varTwo into ebx register + cmp ebx,0000h ; are we going to divide by zero + je @@zero ; if so then we'll just return zero + mov eax,varOne ; move varOne into eax register + cdq ; convert doubleword in eax to quadword at edx:eax + idiv ebx ; divide eax/ebx result to eax, rem to edx + shr ebx,01h ; divide varTwo by two + cmp edx,ebx ; check to see if we have to bump eax + jge @@increment ; yes we do + jmp @@return ; no we dont +@@zero: ; zero handler sync address + xor eax,eax ; zero out the return + jmp @@return ; we're done here +@@increment: ; increment sync address + inc eax ; increment eax +@@return: ; return sync address +ENDM +.CODE +_sqrt proc near +LOCAL bestGuess:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; adjust stack for locals + mov ecx,[ebp+08h] ; move target into ecx register + cmp ecx,0001h ; is target one ?? + je @@noop ; is target equal to one ?? + cmp ecx,0000h ; is target equal to zero ?? + jle @@erop ; set error if target is less equal zero. + firstGuess ; select the first guess value +@@nextGuess: ; next guess sync address + divide ecx,bestGuess ; divide target by best guess + add eax,bestGuess ; add in best guess + shr eax,0001h ; divide eax by two + adc eax,0000h ; add in any carry + cmp eax,bestGuess ; is the result the same, or greater, than our last result?? + je @@return ; if so then we're not getting any closer + mov bestGuess,eax ; result is next best guess + jmp @@nextGuess ; if not then continue along +@@erop: ; erop sync address + xor eax,eax ; errors in which we must set return to zero + jmp @@return ; jump over next handler +@@noop: ; null operation sync address + mov eax,0001h ; errors return one in eax register +@@return: ; return sync address + add esp,LocalLength ; readjust stack for locals + pop ebp ; restore old stack frame + retn ; return near to caller +_sqrt endp +_initView proc near ; void initView(ViewSystem *lpViewSystem) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push edi ; save destination index register + mov edi,[ebp+08h] ; move ViewSystem offset into destination index register + mov eax,[edi].PureViewSystem@@cameraTwistRadians ; move cameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@cosCameraTwistRadians ; move cosCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@sinCameraTwistRadians ; move sinCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@sinCameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians ; move cosCameraTwistRadiansSinCameraTwistRadians to eax + mov viewData@@mViewSystem.PureViewSystem@@cosCameraTwistRadiansSinCameraTwistRadians,eax ; copy same to local + mov eax,[edi].PureViewSystem@@viewPlaneDistance ; move viewPlaneDistance to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPlaneDistance,eax ; copy same to local + mov ax,[edi].PureViewSystem@@viewPortWidth ; move viewPortWidth to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPortWidth,ax ; copy same to local + mov ax,[edi].PureViewSystem@@viewPortHeight ; move viewPortHeight to eax + mov viewData@@mViewSystem.PureViewSystem@@viewPortHeight,ax ; copy same to local + mov ax,[edi].PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x ; move cameraPoint.x to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@x,ax ; copy same to local + mov ax,[edi].PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y ; move cameraPoint.y to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@xyPoint.Point@@y,ax ; copy same to local + mov ax,[edi].PureViewSystem@@cameraPoint.Point3D@@Point@@z ; move cameraPoint.z to ax + mov viewData@@mViewSystem.PureViewSystem@@cameraPoint.Point3D@@Point@@z,ax ; copy same to local + mov ax,[edi].PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x ; move focusPoint.x to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@x,ax ; copy same to local + mov ax,[edi].PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y ; move focusPoint.y to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@xyPoint.Point@@y,ax ; copy same to local + mov ax,[edi].PureViewSystem@@focusPoint.Point3D@@Point@@z ; move focusPoint.z to ax + mov viewData@@mViewSystem.PureViewSystem@@focusPoint.Point3D@@Point@@z,ax ; copy same to local + pop edi ; restore destination index register + pop ebp ; restore old frame + retn ; return far to caller +_initView endp +_mapCoordinates proc near ; void mapCoordinates(const Point3D *lpPoint3D,Point *lpPoint,WORD useCartesianSystem) +LOCAL tempValue:DWORD,v:DWORD,aov:DWORD,bov:DWORD,acov:DWORD,bcov:DWORD,tempx:DWORD,tempy:DWORD,tempz:DWORD=LocalLength + push ebp ; save old stack frame + mov ebp,esp ; create new frame + sub esp,LocalLength ; adjust stack for local variables + pushad ; save all general purpose registers, caller may use inline expansion + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) +@@return: ; return sync address + popad ; restore all general purpose registers + add esp,LocalLength ; adjust stack for local variables + pop ebp ; restore old frame + retn ; return near to caller +_mapCoordinates endp +_mapVectorCoordinates proc near ; void mapCoordinates(const Point3D *lpPoint3D,Point *lpPoint,WORD useCartesianSystem) + push ebp ; save frame + mov ebp,esp ; create new frame + pushad ; save all general purpose registers + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + add edi,size Point3D ; increment edi to point to Point3D[1] + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + add edi,size Point ; increment edi to point to Point[1] + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + add edi,size Point3D*2 ; increment edi to point to Point3D[1] + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + add edi,size Point*2 ; increment edi to point to Point[1] + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + mov edi,[ebp+08h] ; move (Point3D *) to destination index register + add edi,size Point3D*3 ; increment edi to point to Point3D[1] + initializeLocal ; initialize local variables + calculateTempx ; calculate tempx value + calculateTempy ; calculate tempy value + calculateTempz ; calculate tempz value + mov edi,[ebp+0Ch] ; move (Point*) to destination index register + add edi,size Point*3 ; increment edi to point to Point[1] + calculatePoint2D ; calculate the screen points + mov eax,[ebp+10h] ; move mode into eax + calculateCartesianPoints ; convert screen points to cartesian points (if need be) + popad ; restore all general purpose registers + pop ebp ; restore previous frame + retn ; return near to caller +_mapVectorCoordinates endp + +_mapPolygonCoordinates proc near ; void mapPolygonCoordinates(Polygon *pPolygon) + push ebp ; save prior stack frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move pPolygon into source index register + mov ecx,Polygon3D[esi].Polygon3D@@mBlockLine3D.BlockLine3D@@mSize ; move Line3D item count into ecx register + cmp ecx,0000h ; are there any lines in the Line3D block? + je @@endproc ; if not then we're done here + cmp ecx,Polygon3D[esi].Polygon3D@@mBlockLine2D.BlockLine2D@@mSize ; check Line3D count against Line2D count + jne @@endproc ; must have same number of Line3D's as Line2D's + mov edi,Polygon3D[esi].Polygon3D@@mBlockLine3D.BlockLine3D@@mContainer ; get to Line3D container + mov esi,Polygon3D[esi].Polygon3D@@mBlockLine2D.BlockLine2D@@mContainer ; get to Line2D container +@@protiter: ; iteration sync address + cmp edi,0000h ; is this a valid 3D container? + je @@endproc ; if not then we're done here + mov eax,Line3DNodePtr[edi].Line3DNodePtr@@mItem ; move Line3D ptr to eax + lea eax,Line3D[eax].Line3D@@mFirstPoint ; eax contains first Point3D ptr + mov ebx,Line2DNodePtr[esi].Line2DNodePtr@@mItem ; move Line2D ptr to ebx + lea ebx,Line2D[ebx].Line2D@@mFirstPoint ; ebx contains first Point2D ptr + push 0001h ; use cartesian coordinate system + push ebx ; save Point2D ptr + push eax ; save Point3D ptr + call _mapCoordinates ; map the coordinates + add esp,000Ch ; adjust stack after call + mov eax,Line3DNodePtr[edi].Line3DNodePtr@@mItem ; move Line3D ptr to eax + lea eax,Line3D[eax].Line3D@@mSecondPoint ; eax contains first Point3D ptr + mov ebx,Line2DNodePtr[esi].Line2DNodePtr@@mItem ; move Line2D ptr to ebx + lea ebx,Line2D[ebx].Line2D@@mSecondPoint ; ebx contains first Point2D ptr + push 0001h ; use cartesian coordinate system + push ebx ; save Point2D ptr + push eax ; save Point3D ptr + call _mapCoordinates ; map the coordinates + add esp,000Ch ; adjust stack after call + mov edi,Line3DNodePtr[edi].Line3DNodePtr@@mLine3DNodePtrNext ; advance to next element in Line3D block + mov esi,Line2DNodePtr[esi].Line2DNodePtr@@mLine2DNodePtrNext ; advance to next element in Line2D block + jmp @@protiter ; continue iteration through polygon +@@endproc: ; endproc sync address + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_mapPolygonCoordinates endp + +public _initView +public _mapCoordinates +public _mapVectorCoordinates +public _mapPolygonCoordinates +END + diff --git a/engine/ViewSysImpl.hpp b/engine/ViewSysImpl.hpp new file mode 100644 index 0000000..7b4a346 --- /dev/null +++ b/engine/ViewSysImpl.hpp @@ -0,0 +1,62 @@ +#ifndef _ENGINE_VIEWSYSTEMIMPL_HPP_ +#define _ENGINE_VIEWSYSTEMIMPL_HPP_ +#ifndef _ENGINE_VIEWSYSTEM_HPP_ +#include +#endif + +class ViewSystemImpl : public ViewSystem +{ +public: + ViewSystemImpl(); + ViewSystemImpl(unsigned short width,unsigned short height); + virtual ~ViewSystemImpl(); + void viewPortWidth(unsigned short viewPortWidth); + void viewPortHeight(unsigned short viewPortHeight); + virtual WORD viewPortHeight(void)const; + virtual WORD viewPortWidth(void)const; +private: + unsigned short mViewPortWidth; + unsigned short mViewPortHeight; +}; + +inline +ViewSystemImpl::ViewSystemImpl() +: mViewPortWidth(0), mViewPortHeight(0) +{ +} + +inline +ViewSystemImpl::ViewSystemImpl(unsigned short width,unsigned short height) +: mViewPortWidth(width), mViewPortHeight(height) +{ +} + +inline +ViewSystemImpl::~ViewSystemImpl() +{ +} + +inline +void ViewSystemImpl::viewPortWidth(unsigned short viewPortWidth) +{ + mViewPortWidth=viewPortWidth; +} + +inline +void ViewSystemImpl::viewPortHeight(unsigned short viewPortHeight) +{ + mViewPortHeight=viewPortHeight; +} + +inline +WORD ViewSystemImpl::viewPortHeight(void)const +{ + return mViewPortHeight; +} + +inline +WORD ViewSystemImpl::viewPortWidth(void)const +{ + return mViewPortWidth; +} +#endif diff --git a/engine/engine.001 b/engine/engine.001 new file mode 100644 index 0000000..9c0d773 --- /dev/null +++ b/engine/engine.001 @@ -0,0 +1,202 @@ +# Microsoft Developer Studio Project File - Name="engine" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=engine - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "engine.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "engine.mak" CFG="engine - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "engine - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "engine - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "engine - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "..\exe" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msengine.lib" + +!ENDIF + +# Begin Target + +# Name "engine - Win32 Release" +# Name "engine - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\angle.cpp +# End Source File +# Begin Source File + +SOURCE=.\Device3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\dib3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\Purevsys.cpp +# End Source File +# Begin Source File + +SOURCE=.\spacial.cpp +# End Source File +# Begin Source File + +SOURCE=.\Texture.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msvcobj\tmap32.obj +# End Source File +# Begin Source File + +SOURCE=.\Msvcobj\util32.obj +# End Source File +# Begin Source File + +SOURCE=.\vector3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\Viewsys.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msvcobj\vsmap32.obj +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\angle.hpp +# End Source File +# Begin Source File + +SOURCE=.\angle3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Asmutil.hpp +# End Source File +# Begin Source File + +SOURCE=.\Device3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dib3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Line2d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Line3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Point3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Polygon.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pureedge.hpp +# End Source File +# Begin Source File + +SOURCE=.\Puremap.hpp +# End Source File +# Begin Source File + +SOURCE=.\Purevsys.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rect3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Spacial.hpp +# End Source File +# Begin Source File + +SOURCE=.\Texture.hpp +# End Source File +# Begin Source File + +SOURCE=.\Vector3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Viewsys.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/engine/engine.dsp b/engine/engine.dsp new file mode 100644 index 0000000..0a9e62d --- /dev/null +++ b/engine/engine.dsp @@ -0,0 +1,208 @@ +# Microsoft Developer Studio Project File - Name="engine" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=engine - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "engine.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "engine.mak" CFG="engine - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "engine - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "engine - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "engine - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "engine - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "..\exe" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MTd /Zi /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /FR /Fp"\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msengine.lib" + +!ENDIF + +# Begin Target + +# Name "engine - Win32 Release" +# Name "engine - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\angle.cpp +# End Source File +# Begin Source File + +SOURCE=.\Device3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\dib3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\Purevsys.cpp +# End Source File +# Begin Source File + +SOURCE=.\spacial.cpp +# End Source File +# Begin Source File + +SOURCE=.\Texture.cpp +# End Source File +# Begin Source File + +SOURCE=.\vector3d.cpp +# End Source File +# Begin Source File + +SOURCE=.\Viewsys.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msvcobj\tmap32.obj +# End Source File +# Begin Source File + +SOURCE=.\Msvcobj\util32.obj +# End Source File +# Begin Source File + +SOURCE=.\Msvcobj\vsmap32.obj +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\angle.hpp +# End Source File +# Begin Source File + +SOURCE=.\angle3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Asmutil.hpp +# End Source File +# Begin Source File + +SOURCE=.\Device3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dib3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Line2d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Line3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Point3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Polygon.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pureedge.hpp +# End Source File +# Begin Source File + +SOURCE=.\Puremap.hpp +# End Source File +# Begin Source File + +SOURCE=.\Purevsys.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rect3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Spacial.hpp +# End Source File +# Begin Source File + +SOURCE=.\Texture.hpp +# End Source File +# Begin Source File + +SOURCE=.\Vector3d.hpp +# End Source File +# Begin Source File + +SOURCE=.\Viewsys.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/engine/engine.mdp b/engine/engine.mdp new file mode 100644 index 0000000..f5036e2 Binary files /dev/null and b/engine/engine.mdp differ diff --git a/exe/DSPDIEHI.WAV b/exe/DSPDIEHI.WAV new file mode 100644 index 0000000..bd37b3a Binary files /dev/null and b/exe/DSPDIEHI.WAV differ diff --git a/exe/DSPODTH1.WAV b/exe/DSPODTH1.WAV new file mode 100644 index 0000000..901ed25 Binary files /dev/null and b/exe/DSPODTH1.WAV differ diff --git a/exe/analytic.lib b/exe/analytic.lib new file mode 100644 index 0000000..af9689d Binary files /dev/null and b/exe/analytic.lib differ diff --git a/exe/asm6811.lib b/exe/asm6811.lib new file mode 100644 index 0000000..b83bd9f Binary files /dev/null and b/exe/asm6811.lib differ diff --git a/exe/cashflow.exe b/exe/cashflow.exe new file mode 100644 index 0000000..ebc89c9 Binary files /dev/null and b/exe/cashflow.exe differ diff --git a/exe/com.lib b/exe/com.lib new file mode 100644 index 0000000..547f1b7 Binary files /dev/null and b/exe/com.lib differ diff --git a/exe/engine.bsc b/exe/engine.bsc new file mode 100644 index 0000000..f1fab74 Binary files /dev/null and b/exe/engine.bsc differ diff --git a/exe/engineer.exe b/exe/engineer.exe new file mode 100644 index 0000000..d377cb5 Binary files /dev/null and b/exe/engineer.exe differ diff --git a/exe/imagelst.lib b/exe/imagelst.lib new file mode 100644 index 0000000..f6f87ac Binary files /dev/null and b/exe/imagelst.lib differ diff --git a/exe/jpgimg.lib b/exe/jpgimg.lib new file mode 100644 index 0000000..c5cdc51 Binary files /dev/null and b/exe/jpgimg.lib differ diff --git a/exe/mediapak.lib b/exe/mediapak.lib new file mode 100644 index 0000000..9c8a2f7 Binary files /dev/null and b/exe/mediapak.lib differ diff --git a/exe/msbsp.lib b/exe/msbsp.lib new file mode 100644 index 0000000..de9505f Binary files /dev/null and b/exe/msbsp.lib differ diff --git a/exe/mscommon.lib b/exe/mscommon.lib new file mode 100644 index 0000000..49ff242 Binary files /dev/null and b/exe/mscommon.lib differ diff --git a/exe/msdialog.lib b/exe/msdialog.lib new file mode 100644 index 0000000..23b61ed Binary files /dev/null and b/exe/msdialog.lib differ diff --git a/exe/msengine.lib b/exe/msengine.lib new file mode 100644 index 0000000..19b4c61 Binary files /dev/null and b/exe/msengine.lib differ diff --git a/exe/msfileio.lib b/exe/msfileio.lib new file mode 100644 index 0000000..09197de Binary files /dev/null and b/exe/msfileio.lib differ diff --git a/exe/msgif.lib b/exe/msgif.lib new file mode 100644 index 0000000..a6c1122 Binary files /dev/null and b/exe/msgif.lib differ diff --git a/exe/mshook.lib b/exe/mshook.lib new file mode 100644 index 0000000..8212824 Binary files /dev/null and b/exe/mshook.lib differ diff --git a/exe/msimage.lib b/exe/msimage.lib new file mode 100644 index 0000000..8709a93 Binary files /dev/null and b/exe/msimage.lib differ diff --git a/exe/msrasapi.lib b/exe/msrasapi.lib new file mode 100644 index 0000000..6ed88cc Binary files /dev/null and b/exe/msrasapi.lib differ diff --git a/exe/mssocket.lib b/exe/mssocket.lib new file mode 100644 index 0000000..4cdffd5 Binary files /dev/null and b/exe/mssocket.lib differ diff --git a/exe/msthread.lib b/exe/msthread.lib new file mode 100644 index 0000000..ac7df4d Binary files /dev/null and b/exe/msthread.lib differ diff --git a/exe/mstool.lib b/exe/mstool.lib new file mode 100644 index 0000000..8906349 Binary files /dev/null and b/exe/mstool.lib differ diff --git a/exe/msvc42.pch b/exe/msvc42.pch new file mode 100644 index 0000000..a332a6a Binary files /dev/null and b/exe/msvc42.pch differ diff --git a/exe/music.lib b/exe/music.lib new file mode 100644 index 0000000..0fb3469 Binary files /dev/null and b/exe/music.lib differ diff --git a/exe/printman.lib b/exe/printman.lib new file mode 100644 index 0000000..9f263d6 Binary files /dev/null and b/exe/printman.lib differ diff --git a/exe/psapint.lib b/exe/psapint.lib new file mode 100644 index 0000000..ee5b3f7 Binary files /dev/null and b/exe/psapint.lib differ diff --git a/exe/sample.lib b/exe/sample.lib new file mode 100644 index 0000000..e284c08 Binary files /dev/null and b/exe/sample.lib differ diff --git a/exe/smtplib.lib b/exe/smtplib.lib new file mode 100644 index 0000000..31216c2 Binary files /dev/null and b/exe/smtplib.lib differ diff --git a/exe/statbar.lib b/exe/statbar.lib new file mode 100644 index 0000000..d180cf6 Binary files /dev/null and b/exe/statbar.lib differ diff --git a/exe/toolbar.lib b/exe/toolbar.lib new file mode 100644 index 0000000..5787426 Binary files /dev/null and b/exe/toolbar.lib differ diff --git a/exe/uulib.lib b/exe/uulib.lib new file mode 100644 index 0000000..7d1d713 Binary files /dev/null and b/exe/uulib.lib differ diff --git a/exe/wininet.lib b/exe/wininet.lib new file mode 100644 index 0000000..73b4b54 Binary files /dev/null and b/exe/wininet.lib differ diff --git a/exe/worksht.lib b/exe/worksht.lib new file mode 100644 index 0000000..192de58 Binary files /dev/null and b/exe/worksht.lib differ diff --git a/fileio/CFILE.ASM b/fileio/CFILE.ASM new file mode 100644 index 0000000..cdc84b0 --- /dev/null +++ b/fileio/CFILE.ASM @@ -0,0 +1,214 @@ +;************************************************************************************* +; MODULE: CFILE.ASM DATE: APRIL 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT LAT MODEL +; FUNCTION : BUFFERED FILE FUNCTIONS +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +.DATA +crlf DB 0Dh,0Ah,00h +.CODE +_FileOpen proc near ; int FileOpen(char *pathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes) + push ebp ; save stack frame + mov ebp,esp ; create new frame + xor eax,eax ; clear eax register + cmp byte ptr[ebp+08h],0000h ; is pathFileName NULL + je @@FileOpenEnd ; if it is then we've got an error + push esi ; save source index + CREATEFILE [ebp+08h],[ebp+10h],[ebp+14h],[ebp+18h],[ebp+1Ch] ; call create file + mov esi,[ebp+0Ch] ; move FileInfo ptr to esi + mov [FileInfo ptr [esi]].FileInfo@@mhFileHandle,eax ; store handle + pop esi ; restore source index +@@FileOpenEnd: + pop ebp ; restore previous frame + retn ; return near to caller +_FileOpen endp + +_FileClose proc near ; int CloseFile(FileInfo *pFileInfo); + push ebp ; save prior frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + mov esi,[ebp+08h] ; move FileInfo * into esi + cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle + je @@FileCloseEnd ; handle is not valid + CLOSEHANDLE [FileInfo ptr[esi]].FileInfo@@mhFileHandle ; close handle + mov [FileInfo ptr[esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; set handle to invalid state +@@FileCloseEnd: ; end sync address + pop esi ; restore source index + pop ebp ; restore prior stack frame + retn ; return near to caller +_FileClose endp + +_FileSize proc near ; DWORD GetFileSize(FileInfo *pFileInfo) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + mov esi,[ebp+08h] ; move (FileInfo *) into source index register + cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle + je @@FileSizeError ; handle is not valid + GETFILESIZE [FileInfo ptr [esi]].FileInfo@@mhFileHandle ; get size of file + jmp @@FileSizeEnd ; jump to exit code +@@FileSizeError: ; handle error(s) + xor eax,eax ; by clearing eax register +@@FileSizeEnd: ; FileSizeEnd sync address + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileSize endp ; end procedure + +_FileRead proc near ; FileRead(FileInfo *pFileInfo,BYTE *ptrByte); + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move pFileInfo to esi register + mov edi,[ebp+0Ch] ; move ptrByte to destination index register + FREAD esi,edi ; perform read from disk, or cache + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_FileRead endp + +_FileReadLength proc near ; FileRead(FileInfo *pFileInfo,BYTE *ptrByte,int length); + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + push edi ; save destination index register + push ebx ; save ebx register + mov esi,[ebp+08h] ; move pFileInfo to esi register + mov edi,[ebp+0Ch] ; move ptrByte to destination index register + mov ebx,[ebp+10h] ; move length into ebx register + cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle + je @@FileReadLengthError +@@FileReadLengthContinue: ; continue sync address + FREAD esi,edi ; perform read from disk, or cache + inc edi ; increment pointer index + dec ebx ; decrement counter + cmp ebx,0000h ; is counter zero + jne @@FileReadLengthContinue ; if not then keep going + jmp @@FileReadLengthEnd ; otherwise we're done +@@FileReadLengthError: ; error sync address + xor eax,eax ; clear eax register on error +@@FileReadLengthEnd: ; end sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_FileReadLength endp + +_FileWriteLength proc near ; int FileWriteLength(FileInfo *pFileInfo,char *ptrByte,int length) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push ebx ; save ebx register (counter) + mov ebx,[ebp+10h] ; move length into ebx register + mov esi,[ebp+08h] ; move (pFileInfo*) to edi register + mov edi,[ebp+0Ch] ; move ptrByte to source index register + cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle + je @@FileWriteLengthEnd +@@FileWriteLengthContinue: ; continue sync address + FWRITE esi,edi ; perform write + inc edi ; decrement source index + dec ebx ; decrement counter + cmp ebx,0000h ; is counter zero + jne @@FileWriteLengthContinue ; if not then keep going + jmp @@FileWriteLengthEnd ; otherwise we're done +@@FileWriteLengthError: ; error sync address + xor eax,eax ; clear eax register on error +@@FileWriteLengthEnd: ; end sync address + pop ebx ; restore ecx register + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileWriteLength endp + +_FileWrite proc near ; int FileWrite(FileInfo *pFileInfo,char *ptrByte) + push ebp ; save previous stack frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move (pFileInfo*) to source index register + mov edi,[ebp+0Ch] ; move ptrByte to destination index register + FWRITE esi,edi ; perform write + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileWrite endp + +_FileSeek proc near ; int FileSeek(FileInfo *pFileInfo,int offset,int whence) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push ebx ; save ebx register + mov esi,[ebp+08h] ; move pFileInfo into source index register + mov eax,[ebp+0Ch] ; move offset into eax register + mov ebx,[ebp+10h] ; move whence into ebx register + FSEEK esi,eax,ebx ; perform the seek + pop ebx ; restore ebx register + pop esi ; restore source index register + pop ebp ; restore previous frame + retn ; return near to caller +_FileSeek endp + +_FileReadLine proc near ; int FileReadLine(FileInfo *pFileInfo,char *strLine) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move (pFileInfo *) to source index register + mov edi,[ebp+0Ch] ; move strLine to destination index register + FREADLINE esi,edi ; perform getLine + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileReadLine endp + +_FileWriteLine proc near ; int FileWrite(FileInfo *pFileInfo,char *strLine,int length); + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move pFileInfo to source index register + mov edi,[ebp+0Ch] ; move strLine to destination index register + FWRITELINE esi,edi ; write string to file + lea edi,crlf ; get crlf address to edi register + FWRITELINE esi,edi ; write string to file + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileWriteLine endp + +_FileFlush proc near + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + mov esi,[ebp+08h] ; move pFileInfo to source index register + FFLUSH esi ; flush cache + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileFlush endp + +public _FileOpen +public _FileClose +public _FileRead +public _FileReadLength +public _FileWrite +public _FileWriteLength +public _FileReadLine +public _FileWriteLine +public _FileFlush +public _FileSize +public _FileSeek +END diff --git a/fileio/DEVIOCTL.INC b/fileio/DEVIOCTL.INC new file mode 100644 index 0000000..2d566f1 --- /dev/null +++ b/fileio/DEVIOCTL.INC @@ -0,0 +1,59 @@ +;************************************************************************************* +; MODULE: DEVIOCTL.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE RELATED CONSTANTS +;************************************************************************************* +FILE_SHARE_READ equ 00000001h +FILE_SHARE_WRITE equ 00000002h +FILE_SHARE_DELETE equ 00000004h +FILE_ATTRIBUTE_READONLY equ 00000001h +FILE_ATTRIBUTE_HIDDEN equ 00000002h +FILE_ATTRIBUTE_SYSTEM equ 00000004h +FILE_ATTRIBUTE_DIRECTORY equ 00000010h +FILE_ATTRIBUTE_ARCHIVE equ 00000020h +FILE_ATTRIBUTE_NORMAL equ 00000080h +FILE_ATTRIBUTE_TEMPORARY equ 00000100h +FILE_ATTRIBUTE_COMPRESSED equ 00000800h +FILE_ATTRIBUTE_OFFLINE equ 00001000h +CREATE_NEW equ 00000001h +CREATE_ALWAYS equ 00000002h +OPEN_EXISTING equ 00000003h +OPEN_ALWAYS equ 00000004h +TRUNCATE_EXISTING equ 00000005h +DELETE equ 00010000h +READ_CONTROL equ 00020000h +WRITE_DAC equ 00040000h +WRITE_OWNER equ 00080000h +SYNCHRONIZE equ 00100000h +STANDARD_RIGHTS_REQUIRED equ 000F0000h +STANDARD_RIGHTS_READ equ READ_CONTROL +STANDARD_RIGHTS_WRITE equ READ_CONTROL +STANDARD_RIGHTS_EXECUTE equ READ_CONTROL +STANDARD_RIGHTS_ALL equ 001F0000h +SPECIFIC_RIGHTS_ALL equ 0000FFFFh +FILE_READ_DATA equ 0001h +FILE_LIST_DIRECTORY equ 0001h +FILE_WRITE_DATA equ 0002h +FILE_ADD_FILE equ 0002h +FILE_APPEND_DATA equ 0004h +FILE_ADD_SUBDIRECTORY equ 0004h +FILE_CREATE_PIPE_INSTANCE equ 0004h +FILE_READ_EA equ 0008h +FILE_WRITE_EA equ 0010h +FILE_EXECUTE equ 0020h +FILE_TRAVERSE equ 0020h +FILE_DELETE_CHILD equ 0040h +FILE_READ_ATTRIBUTES equ 0080h +FILE_WRITE_ATTRIBUTES equ 0100h +FILE_ALL_ACCESS equ STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 1FFh +FILE_GENERIC_READ equ STANDARD_RIGHTS_READ or FILE_READ_DATA or FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE +FILE_GENERIC_WRITE equ STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE +FILE_GENERIC_EXECUTE equ STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or FILE_EXECUTE or SYNCHRONIZE +GENERIC_READ equ 80000000h +GENERIC_WRITE equ 40000000h +GENERIC_EXECUTE equ 20000000h +GENERIC_ALL equ 10000000h + + + diff --git a/fileio/FILEIO.BAK b/fileio/FILEIO.BAK new file mode 100644 index 0000000..996ed85 --- /dev/null +++ b/fileio/FILEIO.BAK @@ -0,0 +1,181 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=fileio - Win32 Debug +!MESSAGE No configuration specified. Defaulting to fileio - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "fileio - Win32 Release" && "$(CFG)" != "fileio - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Fileio.mak" CFG="fileio - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "fileio - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "fileio - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "fileio - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "fileio - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : + +CLEAN : + -@erase + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Fileio.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fileio.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Fileio.lib" +LIB32_OBJS= \ + + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msfileio.lib" + +CLEAN : + -@erase "..\exe\msfileio.lib" + -@erase ".\cfile.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Fileio.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fileio.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msfileio.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msfileio.lib" +LIB32_OBJS= \ + ".\cfile.obj" + +"..\exe\msfileio.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "fileio - Win32 Release" +# Name "fileio - Win32 Debug" + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/fileio/FILEIO.PLG b/fileio/FILEIO.PLG new file mode 100644 index 0000000..45aa55b --- /dev/null +++ b/fileio/FILEIO.PLG @@ -0,0 +1,30 @@ + + +
+

Build Log

+

+--------------------Configuration: fileio - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP151.bat" with contents +[ +@echo off +c:\masm32\bin\ml /c /Zi /coff cfile.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP151.bat" +Creating command line "link.exe -lib /nologo /out:"..\exe\msfileio.lib" .\cfile.obj " +Performing Custom Build Step on .\cfile.asm +Microsoft (R) Macro Assembler Version 6.14.8444 +Copyright (C) Microsoft Corp 1981-1997. All rights reserved. + + Assembling: cfile.asm +

Output Window

+Creating library... + + + +

Results

+msfileio.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/fileio/FILEIO.mdp b/fileio/FILEIO.mdp new file mode 100644 index 0000000..1aa15dd Binary files /dev/null and b/fileio/FILEIO.mdp differ diff --git a/fileio/Fileio.hpp b/fileio/Fileio.hpp new file mode 100644 index 0000000..eb35865 --- /dev/null +++ b/fileio/Fileio.hpp @@ -0,0 +1,195 @@ +#ifndef _FILEIO_FILEIO_HPP_ +#define _FILEIO_FILEIO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class FileInfo; + +extern "C" +{ + int _cdecl FileOpen(char *pPathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes); + int _cdecl FileClose(FileInfo *pFileInfo); + int _cdecl FileRead(FileInfo *pFileInfo,char *ptrChar); + int _cdecl FileReadLength(FileInfo *pFileInfo,char *ptrChar,int length); + int _cdecl FileReadLine(FileInfo *pFileInfo,char *ptrChar); + int _cdecl FileWriteLine(FileInfo *pFileInfo,char *ptrChar); + int _cdecl FileWrite(FileInfo *pFileInfo,char *ptrByte); + int _cdecl FileWriteLength(FileInfo *pFileInfo,char *ptrByte,int length); + int _cdecl FileFlush(FileInfo *pFileInfo); + int _cdecl FileSize(FileInfo *pFileInfo); + int _cdecl FileSeek(FileInfo *pFileInfo,int offset,int whence); +} + +class FileInfo +{ +public: + FileInfo(void); + ~FileInfo(); // cannot be virtual + enum{MaxLength=0x800}; // we're using a 2k cache here on reads and writes + BYTE mBuffer[MaxLength]; + HANDLE mhFileHandle; + DWORD mBufferIndex; + DWORD mlpBufferPointer; +}; + +inline +FileInfo::FileInfo(void) +: mhFileHandle(INVALID_HANDLE_VALUE), mBufferIndex(0), mlpBufferPointer(0) +{ +} + +inline +FileInfo::~FileInfo() +{ +} + +class FileIO +{ +public: + enum Whence{SeekCurr=FILE_CURRENT,SeekBeg=FILE_BEGIN,SeekEnd=FILE_END}; + enum Open{CreateNew=CREATE_NEW,CreateAlways=CREATE_ALWAYS,OpenExisting=OPEN_EXISTING, + OpenAlways=OPEN_ALWAYS,TruncateExisting=TRUNCATE_EXISTING}; + enum Share{FileShareRead=FILE_SHARE_READ,FileShareWrite=FILE_SHARE_WRITE,FileShareDelete=FILE_SHARE_DELETE}; + enum Access{GenericRead=GENERIC_READ,GenericWrite=GENERIC_WRITE, + GenericExecute=GENERIC_EXECUTE,GenericAll=GENERIC_ALL}; + enum Attributes{ReadOnly=FILE_ATTRIBUTE_READONLY,Hidden=FILE_ATTRIBUTE_HIDDEN, + System=FILE_ATTRIBUTE_SYSTEM,Directory=FILE_ATTRIBUTE_DIRECTORY, + Archive=FILE_ATTRIBUTE_ARCHIVE,Normal=FILE_ATTRIBUTE_NORMAL, + Temporary=FILE_ATTRIBUTE_TEMPORARY,Compressed=FILE_ATTRIBUTE_COMPRESSED, + Offline=FILE_ATTRIBUTE_OFFLINE}; + FileIO(void); + virtual ~FileIO(); + int open(char *pPathFileName,Access access=GenericRead,Share share=FileShareRead,Open open=OpenExisting,Attributes attributes=Archive); + int open(const String &strPathFileName,Access access=GenericRead,Share share=FileShareRead,Open open=OpenExisting,Attributes attributes=Archive); + int close(void); + int size(void); + int read(char *ptrByte); + int read(void *ptrByte,int length); + int write(char *ptrByte); + int write(void *ptrByte,int length); + int write(int intData); + int readLine(char *strLine); + int writeLine(char *strByte); + int flush(void); + int seek(int offset,Whence whence); + int tell(void); + int rewind(void); + BOOL isOkay(void)const; +private: + FileInfo mFileInfo; +}; + +inline +FileIO::FileIO(void) +{ +} + +inline +FileIO::~FileIO() +{ + close(); +} + +inline +int FileIO::open(char *pPathFileName,Access access,Share share,Open open,Attributes attributes) +{ + close(); + return !(INVALID_HANDLE_VALUE==(HANDLE)::FileOpen(pPathFileName,&mFileInfo,access,share,open,attributes)); +} + +inline +int FileIO::open(const String &strPathFileName,Access access,Share share,Open open,Attributes attributes) +{ + String strTempFileName(strPathFileName); + close(); + return !(INVALID_HANDLE_VALUE==(HANDLE)::FileOpen((char*)strTempFileName,&mFileInfo,access,share,open,attributes)); +} + +inline +int FileIO::close(void) +{ + flush(); + return ::FileClose(&mFileInfo); +} + +inline +int FileIO::size(void) +{ + return ::FileSize(&mFileInfo); +} + +inline +int FileIO::read(char *ptrByte) +{ + return ::FileRead(&mFileInfo,ptrByte); +} + +inline +int FileIO::read(void *ptrByte,int length) +{ + return ::FileReadLength(&mFileInfo,(char*)ptrByte,length); +} + +inline +int FileIO::write(char *ptrByte) +{ + return ::FileWrite(&mFileInfo,ptrByte); +} + +inline +int FileIO::write(int intData) +{ + return write((char*)&intData,sizeof(intData)); +} + +inline +int FileIO::write(void *ptrByte,int length) +{ + return ::FileWriteLength(&mFileInfo,(char*)ptrByte,length); +} + +inline +int FileIO::readLine(char *strLine) +{ + return ::FileReadLine(&mFileInfo,strLine); +} + +inline +int FileIO::writeLine(char *strByte) +{ + return ::FileWriteLine(&mFileInfo,strByte); +} + +inline +int FileIO::flush(void) +{ + return ::FileFlush(&mFileInfo); +} + +inline +int FileIO::seek(int offset,Whence whence) +{ + return ::FileSeek(&mFileInfo,offset,whence); +} + +inline +int FileIO::tell(void) +{ + if(!isOkay())return 0; + flush(); + return seek(0,FileIO::SeekCurr); +} + +inline +int FileIO::rewind(void) +{ + return seek(0L,SeekBeg); +} + +inline +BOOL FileIO::isOkay(void)const +{ + return !(INVALID_HANDLE_VALUE==mFileInfo.mhFileHandle); +} +#endif \ No newline at end of file diff --git a/fileio/Fileio.mak b/fileio/Fileio.mak new file mode 100644 index 0000000..996ed85 --- /dev/null +++ b/fileio/Fileio.mak @@ -0,0 +1,181 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=fileio - Win32 Debug +!MESSAGE No configuration specified. Defaulting to fileio - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "fileio - Win32 Release" && "$(CFG)" != "fileio - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Fileio.mak" CFG="fileio - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "fileio - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "fileio - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "fileio - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "fileio - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : + +CLEAN : + -@erase + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Fileio.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fileio.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Fileio.lib" +LIB32_OBJS= \ + + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msfileio.lib" + +CLEAN : + -@erase "..\exe\msfileio.lib" + -@erase ".\cfile.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Fileio.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fileio.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msfileio.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msfileio.lib" +LIB32_OBJS= \ + ".\cfile.obj" + +"..\exe\msfileio.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "fileio - Win32 Release" +# Name "fileio - Win32 Debug" + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/fileio/MAIN.CPP b/fileio/MAIN.CPP new file mode 100644 index 0000000..f130dd3 --- /dev/null +++ b/fileio/MAIN.CPP @@ -0,0 +1,155 @@ +#include +#include +#include +//#include +#include + +class FileInfo; + +extern "C" +{ + int FileOpen(char *pPathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes); + int FileClose(FileInfo *pFileInfo); + int FileRead(FileInfo *pFileInfo,BYTE *ptrByte); + int FileReadLine(FileInfo *pFileInfo,BYTE *ptrByte); + int FileWriteLine(FileInfo *pFileInfo,BYTE *ptrByte); + int FileFlush(FileInfo *pFileInfo); +} + +class FileInfo +{ +public: + FileInfo(void); + ~FileInfo(); // cannot be virtual + enum{MaxLength=0x800}; + BYTE mBuffer[MaxLength]; + HANDLE mhFileHandle; + DWORD mBufferIndex; + DWORD mlpBufferPointer; +}; + +inline +FileInfo::FileInfo(void) +: mhFileHandle(INVALID_HANDLE_VALUE), mBufferIndex(0), mlpBufferPointer(0) +{ +} + +inline +FileInfo::~FileInfo() +{ +} + +class FileIO +{ +public: + enum Open{CreateNew=CREATE_NEW,CreateAlways=CREATE_ALWAYS,OpenExisting=OPEN_EXISTING, + OpenAlways=OPEN_ALWAYS,TruncateExisting=TRUNCATE_EXISTING}; + enum Share{FileShareRead=FILE_SHARE_READ,FileShareWrite=FILE_SHARE_WRITE,FileShareDelete=FILE_SHARE_DELETE}; + enum Access{GenericRead=GENERIC_READ,GenericWrite=GENERIC_WRITE, + GenericExecute=GENERIC_EXECUTE,GenericAll=GENERIC_ALL}; + enum Attributes{ReadOnly=FILE_ATTRIBUTE_READONLY,Hidden=FILE_ATTRIBUTE_HIDDEN, + System=FILE_ATTRIBUTE_SYSTEM,Directory=FILE_ATTRIBUTE_DIRECTORY, + Archive=FILE_ATTRIBUTE_ARCHIVE,Normal=FILE_ATTRIBUTE_NORMAL, + Temporary=FILE_ATTRIBUTE_TEMPORARY,Compressed=FILE_ATTRIBUTE_COMPRESSED, + Offline=FILE_ATTRIBUTE_OFFLINE}; + int openFile(char *pPathFileName,Access access,Share share,Open open,Attributes attributes); + int closeFile(void); + int readFile(BYTE *ptrByte); + int readLine(BYTE *strLine); + int writeFile(BYTE *strByte); + int flushFile(void); + BOOL isOkay(void)const; +private: + FileInfo mFileInfo; +}; + +inline +int FileIO::openFile(char *pPathFileName,Access access,Share share,Open open,Attributes attributes) +{ + closeFile(); + return !(INVALID_HANDLE_VALUE==(HANDLE)::FileOpen(pPathFileName,&mFileInfo,access,share,open,attributes)); +} + +inline +int FileIO::closeFile(void) +{ + flushFile(); + return ::FileClose(&mFileInfo); +} + +inline +int FileIO::readFile(BYTE *ptrByte) +{ + return ::FileRead(&mFileInfo,ptrByte); +} + +inline +int FileIO::readLine(BYTE *strLine) +{ + return ::FileReadLine(&mFileInfo,strLine); +} + +inline +int FileIO::writeFile(BYTE *strByte) +{ + return ::FileWriteLine(&mFileInfo,strByte); +} + +inline +int FileIO::flushFile(void) +{ + return ::FileFlush(&mFileInfo); +} + +inline +BOOL FileIO::isOkay(void)const +{ + return INVALID_HANDLE_VALUE==mFileInfo.mhFileHandle; +} + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + FileIO openFile; + BYTE ptrByte; + DWORD byteCount; + DWORD elapsedTime; + String strMessage; + char lineString; + +// if(!openFile.openFile(String(lpszCmdLine), +// FileIO::Access(int(FileIO::GenericRead)|int(FileIO::GenericWrite)), +// FileIO::FileShareRead, +// FileIO::OpenExisting, +// FileIO::Normal))return FALSE; + +//#if 0 + if(!openFile.openFile("c:\\smk.lst", + FileIO::Access(int(FileIO::GenericRead)|int(FileIO::GenericWrite)), + FileIO::FileShareWrite, + FileIO::CreateAlways, + FileIO::Normal))return FALSE; + elapsedTime=::GetTickCount(); + for(int lineIndex=0;lineIndex<500000;lineIndex++)openFile.writeFile((BYTE*)"hello there"); + elapsedTime=::GetTickCount()-elapsedTime; + elapsedTime/=1000L; + ::sprintf(strMessage,"%ld bytes read int %ld seconds\n",byteCount,elapsedTime); + ::MessageBox(::GetFocus(),strMessage,(LPSTR)"FileIO",MB_OK); + openFile.closeFile(); +//#endif + +#if 0 + FileHandle logFile; + logFile.open("c:\\smk.lst",FileHandle::ReadWrite,FileHandle::ShareReadWrite,FileHandle::Overwrite); + if(!logFile.isOkay())return FALSE; + elapsedTime=::GetTickCount(); + for(int lineIndex=0;lineIndex<500000;lineIndex++)logFile.writeLine("hello there"); + logFile.flush(); + logFile.close(); + elapsedTime=::GetTickCount()-elapsedTime; + elapsedTime/=1000L; + ::sprintf(strMessage,"%ld bytes read int %ld seconds\n",byteCount,elapsedTime); + ::MessageBox(::GetFocus(),strMessage,(LPSTR)"FileIO",MB_OK); +#endif + return FALSE; +} + diff --git a/fileio/OPENFILE.INC b/fileio/OPENFILE.INC new file mode 100644 index 0000000..ad8a4a7 --- /dev/null +++ b/fileio/OPENFILE.INC @@ -0,0 +1,222 @@ +;************************************************************************************* +; MODULE: OPENFILE.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE HANDLING MACROS +;************************************************************************************* + +HANDLE STRUC +PHANDLE TYPEDEF FAR PTR HANDLE + HANDLE@@mHandle DD ? +HANDLE ENDS + +INVALID_HANDLE equ 0FFFFFFFFh + +CREATEFILE MACRO pathFileName,access,share,open,attribute + push 0000h ; save handle to template (null) + push attribute ; save attributes + push open ; save creation flags + push 0000h ; save security attributes + push share ; save share mode + push access ; save acess mode + push pathFileName ; save pathFileName + call dword ptr __imp__CreateFileA@28 ; call create +ENDM + +READFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesRead on stack + mov eax,esp ; move bytesRead address to eax + push 0000h ; save overlapped structure address + push eax ; save pointer to bytesRead + push sizeBuffer ; save length of buffer + push szBuffer ; save address of read buffer + push hFileHandle ; save file handle + call dword ptr __imp__ReadFile@20 ; call read + mov eax,[esp] ; move bytesRead value to eax + add esp,04h ; remove bytesRead variable from stack +ENDM + +WRITEFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesWritten variable on stack + mov eax,esp ; move bytesWritten address to eax + push 0000h ; save overlapped structure address + push eax ; save bytesWritten address + push sizeBuffer ; save write length + push szBuffer ; save address of write buffer + push hFileHandle ; save file handle + call dword ptr __imp__WriteFile@20 ; call write + mov eax,[esp] ; move number of bytes written to eax + add esp,04h ; remove bytesWritten variable from stack +ENDM + +CLOSEHANDLE MACRO handle + push handle ; save file handle + call dword ptr __imp__CloseHandle@4 ; call close +ENDM + +GETFILESIZE MACRO handle + sub esp,04h ; create pointer to high dword on stack + mov eax,esp ; move pointer to high dword into eax + push eax ; push pointer to high dword onto stack + push handle ; save file handle + call dword ptr __imp__GetFileSize@8 ; call get file size + add esp,04h ; remove pointer to high dword variable from atck +ENDM + +SEEK MACRO hFileHandle,offset,whence + push whence ; push move method + push 0000h ; push 0000h (offset high) + push offset ; push offset (offset low) + push hFileHandle ; push hFileHandle + call dword ptr __imp__SetFilePointer@16 ; seek +ENDM + +FOPEN MACRO pathFileName,sFileInfo,access,share,open,attribute + CREATEFILE pathFileName,access,share,open,attribute + mov sFileInfo.FileInfo@@mhFileHandle,eax +ENDM + +FCLOSE MACRO sFileInfo + LOCAL @@FCLOSEend + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FCLOSEend + CLOSEHANDLE sFileInfo.FileInfo@@mhFileHandle + mov sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE +@@FCLOSEend: +ENDM + +FREAD MACRO sFileInfo,ptrByte + LOCAL @@FREADreadError,@@FREADsimpleRead,@@FREADdone + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,00h ; is buffer index zero + jne @@FREADsimpleRead ; if not then just grab next byte + READFILE [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,sFileInfo,MaxLength ; otherwise we fill the read buffer + cmp eax,0000h ; did we read any data ? + je @@FREADreadError ; if not then we're done + mov [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,eax ; move number of bytes read to buffer index + lea eax,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer ; load buffer address into eax register + mov [FileInfo ptr [sFileInfo]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer + jmp @@FREADsimpleRead ; grab next byte +@@FREADreadError: ; read error sync address + xor eax,eax ; set return code + jmp @@FREADdone ; we're done +@@FREADsimpleRead: ; simple read sync address + mov eax,[FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov al,byte ptr[eax] ; move byte value to al + mov byte ptr[ptrByte],al ; move byte value to user buffer + inc [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; increment along lpBufferPointer + dec [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex ; decrement the buffer index + mov eax,01h ; set the return code +@@FREADdone: ; done reading sync +ENDM + +FWRITE MACRO sFileInfo,ptrByte + LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer + push ebx ; macro uses ebx, must preserve it + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength + jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer + lea ebx,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer + WRITEFILE [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,ebx,MaxLength + mov [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,0000h ; set buffer index to zero + lea eax,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer + mov [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEsimpleWrite: ; simple write sync address + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? + jne @@FWRITEuseBuffer ; if not then just use it + lea eax,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer + mov [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEuseBuffer: ; use buffer sync address + mov cl,byte ptr[ptrByte] ; move byte to write to cl + mov eax,[FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov byte ptr[eax],cl ; move byte into buffer + inc [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; increment buffer pointer + inc [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex ; increment buffer index + pop ebx ; restore ebx register + mov eax,01h ; set return code +ENDM + +FREADLINE MACRO sFileInfo,szBuffer + LOCAL @@FGETScont,@@FGETexit,@@FGETsetError,@@FGETScrlf + push edi ; save source index register + mov edi,szBuffer ; move address of buffer into esi +@@FGETScont: ; loop control + FREAD sFileInfo,edi ; read a byte + cmp eax,0000h ; was our read successful? + je @@FGETexit ; if not we're done + cmp byte ptr[edi],0Dh ; is the byte a carriage return? + je @@FGETScrlf ; if yes then jump to handler + cmp byte ptr[edi],0Ah ; some (UNIX) files just have linefeed + je @@FGETSlf ; handle line feed + cmp byte ptr[edi],09h ; some files have embedded tabs + je @@FGETStab ; handle tabs + inc edi ; increment along edi + jmp @@FGETScont ; keep reading +@@FGETSlf: ; line feed handler + mov byte ptr[edi],00h ; move null into line data + jmp @@FGETexit ; jump to exit code +@@FGETStab: ; tab char handler + mov byte ptr[edi],' ' ; replace tabs with spaces + inc edi ; increment along edi + jmp @@FGETScont ; keep reading +@@FGETScrlf: ; carriage return control + mov byte ptr[edi],00h ; move null into line data + sub esp,04h ; create temp var on stack + mov edi,esp ; esi points to temp var + FREAD sFileInfo,edi ; read line-feed into temp var + add esp,04h ; restore stack +@@FGETexit: ; exit sync address + pop edi ; restore source index register +ENDM + +FWRITELINE MACRO sFileInfo,szBuffer + LOCAL @@FWRITELINEcont,@@FWRITELINEend +@@FWRITELINEcont: + cmp byte ptr[szBuffer],00h + je @@FWRITELINEend + FWRITE sFileInfo,szBuffer + inc szBuffer + jmp @@FWRITELINEcont +@@FWRITELINEend: +ENDM + +FFLUSH MACRO sFileInfo +LOCAL @@FFLUSHexit + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,INVALID_HANDLE ; valid handle? + je @@FFLUSHexit ; can't flush invalid file + push ebx ; save ebx register + lea ebx,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer ; load buffer address into ebx register + WRITEFILE [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,ebx,[FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex ; write buffer to disk + mov [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,ebx ; move address of buffer to lpBufferPointer + pop ebx ; restore ebx register +@@FFLUSHexit: +ENDM + +FSEEK MACRO sFileInfo,offset,whence +LOCAL @@FSEEKExit,@@FSEEKErrorExit + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,INVALID_HANDLE ; valid handle + je @@FSEEKErrorExit ; if the handle is invalid.... + mov [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,0000h ; discard the buffer on seek + push esi ; save source index register + lea esi,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer ; load buffer address into ebx register + mov [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,esi ; move address of buffer to lpBufferPointer + pop esi ; restore source index register + SEEK [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,offset,whence ; seek to location + jmp @@FSEEKExit ; we're all done here +@@FSEEKErrorExit: ; error sync address + xor eax,eax ; clear eax on error +@@FSEEKExit: ; end of macro sync address +ENDM + +FileInfo STRUC + MaxLength equ 800h + FileInfo@@mszBuffer DB MaxLength DUP(0) ; this field must appear first + FileInfo@@mhFileHandle HANDLE + FileInfo@@mBufferIndex DD (0) + FileInfo@@mlpBufferPointer DD (0) +FileInfo ENDS +extrn __imp__WriteFile@20:near +extrn __imp__CloseHandle@4:near +extrn __imp__CreateFileA@28:near +extrn __imp__ReadFile@20:near +extrn __imp__GetFileSize@8:near +extrn __imp__SetFilePointer@16:near diff --git a/fileio/Release/fileio.lib b/fileio/Release/fileio.lib new file mode 100644 index 0000000..4e02f49 Binary files /dev/null and b/fileio/Release/fileio.lib differ diff --git a/fileio/SCRAPS.TXT b/fileio/SCRAPS.TXT new file mode 100644 index 0000000..9b9c19c --- /dev/null +++ b/fileio/SCRAPS.TXT @@ -0,0 +1,24 @@ +if 0 +; LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer + push ebx ; macro uses ebx, must preserve it + cmp [FileInfo ptr[esi]].FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength + jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer + lea ebx,[FileInfo ptr[esi]].FileInfo@@mszBuffer + WRITEFILE [FileInfo ptr[esi]].FileInfo@@mhFileHandle,ebx,MaxLength + mov [FileInfo ptr[esi]].FileInfo@@mBufferIndex,0000h ; set buffer index to zero + lea eax,[FileInfo ptr[esi]].FileInfo@@mszBuffer + mov [FileInfo ptr[esi]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEsimpleWrite: ; simple write sync address + cmp [FileInfo ptr[esi]].FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? + jne @@FWRITEuseBuffer ; if not then just use it + lea eax,[FileInfo ptr[esi]].FileInfo@@mszBuffer + mov [FileInfo ptr[esi]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEuseBuffer: ; use buffer sync address + mov cl,byte ptr[edi] ; move byte to write to cl + mov eax,[FileInfo ptr[esi]].FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov byte ptr[eax],cl ; move byte into buffer + inc [FileInfo ptr[esi]].FileInfo@@mlpBufferPointer ; increment buffer pointer + inc [FileInfo ptr[esi]].FileInfo@@mBufferIndex ; increment buffer index + pop ebx ; restore ebx register + mov eax,01h ; set return code +endif diff --git a/fileio/STRING.INC b/fileio/STRING.INC new file mode 100644 index 0000000..2b69f2e --- /dev/null +++ b/fileio/STRING.INC @@ -0,0 +1,113 @@ +;************************************************************************************* +; MODULE: STRING.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : STRING RELATED MACROS +;************************************************************************************* +STRSTR MACRO szStringOne,szStringTwo + push offset szStringTwo ; save string one + push offset szStringOne ; save string two + call _strstr ; call standard library strstr + add esp,08h ; reset stack frame +ENDM + +STRCHR MACRO szString,charByte + push charByte ; save charByte + push offset szString ; save string + call _strchr ; call standard library strchr + add esp,08h ; reset stack frame +ENDM + +STRCAT MACRO szDstString,szSrcString + push offset szSrcString ; save source string + push offset szDstString ; save destination string + call _strcat ; call standard library strcat + add esp,08h ; reset stack frame +ENDM + +STRLEN MACRO szData + push edi ; save destination index register + push ecx ; save ecx register + mov edi,offset szData ; get string to destination index register + mov ecx,0FFFFh ; move 65535 to ecx register + xor eax,eax ; clear eax register + repnz scasb ; scan string + mov eax,0FFFFh ; move 65535 to eax + sub eax,ecx ; subtract number of bytes scanned + dec eax ; decrement result + pop ecx ; restore ecx register + pop edi ; restore destination index register +ENDM + +MEMCPY MACRO szDstData,szSrcData,lengthCopy + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szSrcData ; move source data to source index register + mov edi,offset szDstData ; move destination data to destination index register + mov ecx,lengthCopy ; move number of bytes to copy to ecx register + rep movsb ; copy data + pop edi ; restore destination index register + pop esi ; restore source index register +ENDM + +STRCMP MACRO szStringOne,szStringTwo +LOCAL @@STRCMPnotEqual,@@STRCMPequal,@@STRCMPexit + push ecx ; save ecx register + push edi ; save destination index register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare lengths + jne @@STRCMPnotEqual ; if lengths differ, strings are not equal +@@STRCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string two + cmp al,byte ptr[edi] ; compare with byte from string one + jne @@STRCMPnotEqual ; if bytes differ then we're done + loop @@STRCMPloop ; iterate through string length +@@STRCMPequal: ; equality control + mov eax,0001h ; set return code + jmp @@STRCMPexit ; we're done +@@STRCMPnotEqual: ; inequality control + xor eax,eax ; set return code +@@STRCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM + +STRNCMP MACRO szStringOne,szStringTwo +LOCAL @@STRNCMPloop,@@STRNCMPequal,@@STRNCMPnotEqual,@@STRNCMPexit + push ecx ; save ecx register + push edi ; save edi register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare the lengths + jle @@STRNCMPloop ; string one is less equal to string two + mov ecx,eax ; string two is less, so use it's length +@@STRNCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string one + cmp al,byte ptr[edi] ; compare with byte from string two + jne @@STRNCMPnotEqual ; if byte are unequal, strings are unequal + inc edi ; increment along string two + inc esi ; increment along string one + loop @@STRNCMPloop ; keep going +@@STRNCMPequal: ; string equal sync address + mov eax,0001h ; set return code + jmp @@STRNCMPexit ; we're done +@@STRNCMPnotEqual: ; string unequal sync address + xor eax,eax ; set return code +@@STRNCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM +extrn _strstr:near +extrn _strchr:near +extrn _strcat:near diff --git a/fileio/cfile.obj b/fileio/cfile.obj new file mode 100644 index 0000000..08f0f0e Binary files /dev/null and b/fileio/cfile.obj differ diff --git a/fileio/fileio.001 b/fileio/fileio.001 new file mode 100644 index 0000000..9a4a61e --- /dev/null +++ b/fileio/fileio.001 @@ -0,0 +1,110 @@ +# Microsoft Developer Studio Project File - Name="fileio" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=fileio - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "fileio.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "fileio.mak" CFG="fileio - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "fileio - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "fileio - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "fileio - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msfileio.lib" + +!ENDIF + +# Begin Target + +# Name "fileio - Win32 Release" +# Name "fileio - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + \parts\ddk\bin\ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/fileio/fileio.dsp b/fileio/fileio.dsp new file mode 100644 index 0000000..96600b0 --- /dev/null +++ b/fileio/fileio.dsp @@ -0,0 +1,125 @@ +# Microsoft Developer Studio Project File - Name="fileio" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=fileio - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "fileio.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "fileio.mak" CFG="fileio - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "fileio - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "fileio - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "fileio - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msfileio.lib" + +!ENDIF + +# Begin Target + +# Name "fileio - Win32 Release" +# Name "fileio - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "fileio - Win32 Release" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + \parts\ddk\bin\ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\masm32\bin\ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/fileio/fileio.dsw b/fileio/fileio.dsw new file mode 100644 index 0000000..962e439 --- /dev/null +++ b/fileio/fileio.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "fileio"=.\fileio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/fileio/fileio.ncb b/fileio/fileio.ncb new file mode 100644 index 0000000..f9bc61a Binary files /dev/null and b/fileio/fileio.ncb differ diff --git a/fileio/fileio.opt b/fileio/fileio.opt new file mode 100644 index 0000000..8fbfdaf Binary files /dev/null and b/fileio/fileio.opt differ diff --git a/ftp/FTP.BAK b/ftp/FTP.BAK new file mode 100644 index 0000000..5086f53 --- /dev/null +++ b/ftp/FTP.BAK @@ -0,0 +1,442 @@ +#include +#include +#include +#include +#include + +FTPClient::FTPClient(void) +: mIsLoggedIn(FALSE), mCurrentType('A') +{ + createCommands(); +} + +FTPClient::~FTPClient() +{ +} + +WORD FTPClient::open(String hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + INETSocketAddress::internetAddress((hostEntry.addresses())[0]); + if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return FALSE;} + if(!mFTPControl.openSocket()){message("unable to create socket.");return FALSE;} + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(serverEntry.port()); + if(!mFTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to ftp daemon");return FALSE;} + receiveStrings(); + mFTPControl.getSocketName((INETSocketAddress&)*this); + return mFTPControl.isConnected(); +} + +WORD FTPClient::login(String userName,String password) +{ + String blank(" "); + String receiveString; + + if(!mFTPControl.isConnected())return FALSE; + if(isLoggedIn())logout(); + putControlData(mFTPCommands[User]+blank+userName,FALSE); + if(!mFTPControl.receive(receiveString))return FALSE; + message(receiveString); + putControlData(mFTPCommands[Password]+blank+password,FALSE); + if(!mFTPControl.receive(receiveString))return FALSE; + message(receiveString); + while(mFTPControl.hasData()) + { + mFTPControl.receive(receiveString); + message(receiveString); + } + if(receiveString.betweenString(0,' ')==String("530"))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +WORD FTPClient::logout(void) +{ + Block responseLines; + + isLoggedIn(FALSE); + if(!mFTPControl.isConnected()){message("Not connected.");return FALSE;} + if(!putControlData(mFTPCommands[Logout],FALSE))return FALSE; + if(!mFTPControl.receive(responseLines))return FALSE; + message(responseLines); + mFTPControl.closeSocket(); + return TRUE; +} + +WORD FTPClient::port(FTPData &ftpData) +{ + InternetAddress inetAddr; + String portString; + String workString; + WORD dataPort; + + inetAddr=((INETSocketAddress&)*this).internetAddress(); + portString=(String)inetAddr; + portString.replaceToken('.',','); + dataPort=ntohs(((INETSocketAddress&)ftpData).port()); + ::sprintf(workString,",%d,%d",(short)HIBYTE(dataPort),(short)LOBYTE(dataPort)); + putControlData(mFTPCommands[DataPort]+String(" ")+portString+workString,FALSE); + if(!mFTPControl.receive(workString))return FALSE; + message(workString); + if(workString.betweenString(0,' ')==String("500"))return FALSE; + return TRUE; +} + +WORD FTPClient::changeWorkingDirectory(String workingDirectory) +{ + String responseLine; + + if(!mFTPControl.isConnected()||workingDirectory.isNull())return FALSE; + if(!putControlData(mFTPCommands[ChangeWorkingDirectory]+String(" ")+workingDirectory,FALSE))return FALSE; + if(!mFTPControl.receive(responseLine))return FALSE; + message(responseLine); + return TRUE; +} + +WORD FTPClient::printWorkingDirectory(void) +{ + String workingDirectory; + + if(!mFTPControl.isConnected())return FALSE; + if(!putControlData(mFTPCommands[PrintWorkingDirectory],FALSE))return FALSE; + if(!mFTPControl.receive(workingDirectory))return FALSE; + message(workingDirectory); + return TRUE; +} + +WORD FTPClient::list(String pathName) +{ + String controlData; + String responseLine; + + if(!mFTPControl.isConnected())return FALSE; + if(pathName.isNull())controlData=mFTPCommands[List]; + else controlData=mFTPCommands[List]+String(" ")+pathName; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mFTPControl.receive(responseLine))return FALSE; + if(!(responseLine.betweenString(0,' ')==String("150")))return FALSE; + return TRUE; +} + +WORD FTPClient::nameList(String pathName,WORD showResponse) +{ + String controlData; + String responseLine; + + if(!mFTPControl.isConnected())return FALSE; + if(pathName.isNull())controlData=mFTPCommands[NameList]; + else controlData=mFTPCommands[NameList]+String(" ")+pathName; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mFTPControl.receive(responseLine))return FALSE; + if(showResponse)message(responseLine); + if(!(responseLine.betweenString(0,' ')==String("150")))return FALSE; + return TRUE; +} + +WORD FTPClient::type(BYTE type,BYTE storage) +{ + String representationType; + String responseLine; + + if(!mFTPControl.isConnected())return FALSE; + if('A'==type||'E'==type) + { + if(storage)::sprintf(representationType,"%c %c",type,storage); + else ::sprintf(representationType,"%c",type); + } + else if('I'==type)::sprintf(representationType,"%c",type); + else if('L'==type)::sprintf(representationType,"%c %d",type,(int)storage); + else return FALSE; + if(!putControlData(mFTPCommands[RepresentationType]+String(" ")+representationType,FALSE))return FALSE; + if(!mFTPControl.receive(responseLine))return FALSE; + message(responseLine); + mCurrentType=type; + return TRUE; +} + +WORD FTPClient::retrieve(String pathFileName,DWORD &sizeData) +{ + String responseString; + char *lpChar; + + sizeData=0; + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[Retrieve]+String(" ")+pathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + if(!(responseString.betweenString(0,' ')==String("150")))return FALSE; + lpChar=(char*)responseString.strstr("bytes"); + if(!lpChar)return TRUE; + while(*lpChar!='(')lpChar--; + String sizeString(++lpChar); + sizeString=sizeString.betweenString(0,' '); + if(sizeString.isNull())return FALSE; + sizeData=(DWORD)((long)sizeString); + return TRUE; +} + +WORD FTPClient::store(String pathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[Store]+String(" ")+pathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::mode(BYTE transferMode) +{ + String modeString; + if(!mFTPControl.isConnected())return FALSE; + if('S'!=transferMode&&'B'!=transferMode&&'C'!=transferMode)return FALSE; + ::sprintf(modeString,"%c",transferMode); + return putControlData(mFTPCommands[TransferMode]+String(" ")+modeString); +} + +WORD FTPClient::renameFrom(String oldPathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||oldPathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[RenameFrom]+String(" ")+oldPathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + if(!(responseString.betweenString(0,' ')==String("350"))){message(responseString);return FALSE;} + return TRUE; +} + +WORD FTPClient::renameTo(String newPathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||newPathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[RenameTo]+String(" ")+newPathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + if(!(responseString.betweenString(0,' ')==String("250")))return FALSE; + return TRUE; +} + +WORD FTPClient::account(String accountInfo) +{ + if(!mFTPControl.isConnected()||accountInfo.isNull())return FALSE; + return putControlData(mFTPCommands[Account]+String(" ")+accountInfo); +} + +WORD FTPClient::changeToParentDirectory(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[ChangeToParentDirectory]); +} + +WORD FTPClient::structureMount(String systemFileGroupDesignator) +{ + if(!mFTPControl.isConnected()||systemFileGroupDesignator.isNull())return FALSE; + return putControlData(mFTPCommands[StructureMount]+String(" ")+systemFileGroupDesignator); +} + +WORD FTPClient::reinitialize(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[Reinitialize]); +} + +WORD FTPClient::passive(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[Passive]); +} + +WORD FTPClient::fileStructure(BYTE structure) +{ + String structureString; + if(!mFTPControl.isConnected())return FALSE; + if('F'!=structure&&'R'!=structure&&'P'!=structure)return FALSE; + ::sprintf(structureString,"%c",structure); + return putControlData(mFTPCommands[FileStructure]+String(" ")+structureString); +} + +WORD FTPClient::storeUnique(String pathFileName) +{ + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + return putControlData(mFTPCommands[StoreUnique]+String(" ")+pathFileName); +} + +WORD FTPClient::append(String pathFileName) +{ + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + return putControlData(mFTPCommands[Append]+String(" ")+pathFileName); +} + +WORD FTPClient::allocate(DWORD numBytes,DWORD maxRecord) +{ + String allocationString; + if(!mFTPControl.isConnected())return FALSE; + if(maxRecord)::sprintf(allocationString,"%ld R %ld",numBytes,maxRecord); + else ::sprintf(allocationString,"%ld",numBytes); + return putControlData(mFTPCommands[Allocate]+String(" ")+allocationString); +} + +WORD FTPClient::restart(String serverMarker) +{ + if(!mFTPControl.isConnected()||serverMarker.isNull())return FALSE; + return putControlData(mFTPCommands[Restart]+String(" ")+serverMarker); +} + +WORD FTPClient::abort(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[Abort]); +} + +WORD FTPClient::remove(String pathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[Delete]+String(" ")+pathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::removeDirectory(String pathDirectoryName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathDirectoryName.isNull())return FALSE; + if(!putControlData(mFTPCommands[RemoveDirectory]+String(" ")+pathDirectoryName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::makeDirectory(String pathDirectoryName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathDirectoryName.isNull())return FALSE; + if(!putControlData(mFTPCommands[MakeDirectory]+String(" ")+pathDirectoryName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::siteParameters(void) +{ + String responseString; + + if(!mFTPControl.isConnected())return FALSE; + if(!putControlData(mFTPCommands[SiteParameters]))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::system(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[System]); +} + +WORD FTPClient::status(String pathName) +{ + if(!mFTPControl.isConnected())return FALSE; + if(!pathName.isNull())return putControlData(mFTPCommands[Status]+String(" ")+pathName); + return putControlData(mFTPCommands[Status]); +} + +WORD FTPClient::help(String commandName) +{ + Block receiveStrings; + + if(!mFTPControl.isConnected())return FALSE; + if(!commandName.isNull()){if(!putControlData(mFTPCommands[Help]+String(" ")+commandName,FALSE))return FALSE;} + else if(!putControlData(mFTPCommands[Help],FALSE))return FALSE; + mFTPControl.receive(receiveStrings); + for(short itemIndex=0;itemIndex receiveStrings; + + if(!mFTPControl.isConnected())return; + if(!mFTPControl.receive(receiveStrings))return; + if(!displayStrings||!receiveStrings.size())return; + message(receiveStrings); +} + +void FTPClient::createCommands(void) +{ + mFTPCommands.insert(&String("USER")); // user name + mFTPCommands.insert(&String("PASS")); // password + mFTPCommands.insert(&String("ACCT")); // account + mFTPCommands.insert(&String("CWD")); // change working directory + mFTPCommands.insert(&String("CDUP")); // change to parent directory + mFTPCommands.insert(&String("SMNT")); // structure mount + mFTPCommands.insert(&String("REIN")); // reinitialize + mFTPCommands.insert(&String("QUIT")); // quit + mFTPCommands.insert(&String("PORT")); // data port + mFTPCommands.insert(&String("PASV")); // passive + mFTPCommands.insert(&String("TYPE")); // representation type + mFTPCommands.insert(&String("STRU")); // file structure + mFTPCommands.insert(&String("MODE")); // transfer mode + mFTPCommands.insert(&String("RETR")); // retrieve + mFTPCommands.insert(&String("STOR")); // store + mFTPCommands.insert(&String("STOU")); // store unique + mFTPCommands.insert(&String("APPE")); // append (with create) + mFTPCommands.insert(&String("ALLO")); // allocate + mFTPCommands.insert(&String("REST")); // restart + mFTPCommands.insert(&String("RNFR")); // rename from + mFTPCommands.insert(&String("RNTO")); // rename to + mFTPCommands.insert(&String("ABOR")); // abort + mFTPCommands.insert(&String("DELE")); // delete + mFTPCommands.insert(&String("RMD")); // remove directory + mFTPCommands.insert(&String("MKD")); // make directory + mFTPCommands.insert(&String("PWD")); // print working directory + mFTPCommands.insert(&String("LIST")); // list + mFTPCommands.insert(&String("NLST")); // name list + mFTPCommands.insert(&String("SITE")); // site parameters + mFTPCommands.insert(&String("SYST")); // system + mFTPCommands.insert(&String("STAT")); // status + mFTPCommands.insert(&String("HELP")); // help + mFTPCommands.insert(&String("NOOP")); // noop +} + +// *** virtual overloads + +void FTPClient::message(String /*messageString*/) +{ +} + +void FTPClient::message(Block &/*messageStrings*/) +{ +} + diff --git a/ftp/FTP.CPP b/ftp/FTP.CPP new file mode 100644 index 0000000..f3480c2 --- /dev/null +++ b/ftp/FTP.CPP @@ -0,0 +1,480 @@ +#include +#include +#include +#include +#include + +FTPClient::FTPClient(void) +: mIsLoggedIn(FALSE), mCurrentType('A') +{ + createCommands(); + buildResponseStrings(); +} + +FTPClient::~FTPClient() +{ +} + +WORD FTPClient::open(String hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + INETSocketAddress::internetAddress((hostEntry.addresses())[0]); + if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return FALSE;} + if(!mFTPControl.create()){message("unable to create socket.");return FALSE;} + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(serverEntry.port()); + if(!mFTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to ftp daemon");return FALSE;} + if(!receive(mAckConnectionResponseStrings))return FALSE; + mFTPControl.getSocketName((INETSocketAddress&)*this); + return mFTPControl.isConnected(); +} + +WORD FTPClient::login(String userName,String password) +{ + String blank(" "); + + if(!mFTPControl.isConnected())return FALSE; + if(isLoggedIn())logout(); + putControlData(mFTPCommands[User]+blank+userName,FALSE); + if(!receive(mAckLoginResponseStrings))return FALSE; + putControlData(mFTPCommands[Password]+blank+password,FALSE); + if(!receive(mAckLoginResponseStrings))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +WORD FTPClient::logout(void) +{ + isLoggedIn(FALSE); + if(!mFTPControl.isConnected()){message("Not connected.");return FALSE;} + if(!putControlData(mFTPCommands[Logout],FALSE))return FALSE; + if(!receive(mAckLogoutResponseStrings))return FALSE; + return TRUE; +} + +WORD FTPClient::port(FTPData &ftpData) +{ + InternetAddress inetAddr; + String portString; + String workString; + WORD dataPort; + + inetAddr=((INETSocketAddress&)*this).internetAddress(); + portString=(String)inetAddr; + portString.replaceToken('.',','); + dataPort=ntohs(((INETSocketAddress&)ftpData).port()); + ::sprintf(workString,",%d,%d",(short)HIBYTE(dataPort),(short)LOBYTE(dataPort)); + putControlData(mFTPCommands[DataPort]+String(" ")+portString+workString,FALSE); + if(!receive(mAckPortResponseStrings))return FALSE; + return TRUE; +} + +WORD FTPClient::changeWorkingDirectory(String workingDirectory) +{ + Block responseLines; + + if(!mFTPControl.isConnected()||workingDirectory.isNull())return FALSE; + if(!putControlData(mFTPCommands[ChangeWorkingDirectory]+String(" ")+workingDirectory,FALSE))return FALSE; + if(!mFTPControl.receive(responseLines))return FALSE; + message(responseLines); + return TRUE; +} + +WORD FTPClient::printWorkingDirectory(void) +{ + String workingDirectory; + + if(!mFTPControl.isConnected())return FALSE; + if(!putControlData(mFTPCommands[PrintWorkingDirectory],FALSE))return FALSE; + if(!mFTPControl.receive(workingDirectory))return FALSE; + message(workingDirectory); + return TRUE; +} + +WORD FTPClient::list(String pathName) +{ + String controlData; + String responseLine; + + if(!mFTPControl.isConnected())return FALSE; + if(pathName.isNull())controlData=mFTPCommands[List]; + else controlData=mFTPCommands[List]+String(" ")+pathName; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mFTPControl.receive(responseLine))return FALSE; + if(!(responseLine.betweenString(0,' ')==String("150")))return FALSE; + return TRUE; +} + +WORD FTPClient::nameList(String pathName,WORD showResponse) +{ + String controlData; + String responseLine; + + if(!mFTPControl.isConnected())return FALSE; + if(pathName.isNull())controlData=mFTPCommands[NameList]; + else controlData=mFTPCommands[NameList]+String(" ")+pathName; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mFTPControl.receive(responseLine))return FALSE; + if(showResponse)message(responseLine); + if(!(responseLine.betweenString(0,' ')==String("150")))return FALSE; + return TRUE; +} + +WORD FTPClient::type(BYTE type,BYTE storage) +{ + String representationType; + String responseLine; + + if(!mFTPControl.isConnected())return FALSE; + if('A'==type||'E'==type) + { + if(storage)::sprintf(representationType,"%c %c",type,storage); + else ::sprintf(representationType,"%c",type); + } + else if('I'==type)::sprintf(representationType,"%c",type); + else if('L'==type)::sprintf(representationType,"%c %d",type,(int)storage); + else return FALSE; + if(!putControlData(mFTPCommands[RepresentationType]+String(" ")+representationType,FALSE))return FALSE; + if(!mFTPControl.receive(responseLine))return FALSE; + message(responseLine); + mCurrentType=type; + return TRUE; +} + +WORD FTPClient::retrieve(String pathFileName,DWORD &sizeData) +{ + String responseString; + char *lpChar; + + sizeData=0; + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[Retrieve]+String(" ")+pathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + if(!(responseString.betweenString(0,' ')==String("150")))return FALSE; + lpChar=(char*)responseString.strstr("bytes"); + if(!lpChar)return TRUE; + while(*lpChar!='(')lpChar--; + String sizeString(++lpChar); + sizeString=sizeString.betweenString(0,' '); + if(sizeString.isNull())return FALSE; + sizeData=(DWORD)(sizeString.toInt()); + return TRUE; +} + +WORD FTPClient::store(String pathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[Store]+String(" ")+pathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::mode(BYTE transferMode) +{ + String modeString; + if(!mFTPControl.isConnected())return FALSE; + if('S'!=transferMode&&'B'!=transferMode&&'C'!=transferMode)return FALSE; + ::sprintf(modeString,"%c",transferMode); + return putControlData(mFTPCommands[TransferMode]+String(" ")+modeString); +} + +WORD FTPClient::renameFrom(String oldPathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||oldPathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[RenameFrom]+String(" ")+oldPathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + if(!(responseString.betweenString(0,' ')==String("350"))){message(responseString);return FALSE;} + return TRUE; +} + +WORD FTPClient::renameTo(String newPathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||newPathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[RenameTo]+String(" ")+newPathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + if(!(responseString.betweenString(0,' ')==String("250")))return FALSE; + return TRUE; +} + +WORD FTPClient::account(String accountInfo) +{ + if(!mFTPControl.isConnected()||accountInfo.isNull())return FALSE; + return putControlData(mFTPCommands[Account]+String(" ")+accountInfo); +} + +WORD FTPClient::changeToParentDirectory(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[ChangeToParentDirectory]); +} + +WORD FTPClient::structureMount(String systemFileGroupDesignator) +{ + if(!mFTPControl.isConnected()||systemFileGroupDesignator.isNull())return FALSE; + return putControlData(mFTPCommands[StructureMount]+String(" ")+systemFileGroupDesignator); +} + +WORD FTPClient::reinitialize(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[Reinitialize]); +} + +WORD FTPClient::passive(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[Passive]); +} + +WORD FTPClient::fileStructure(BYTE structure) +{ + String structureString; + if(!mFTPControl.isConnected())return FALSE; + if('F'!=structure&&'R'!=structure&&'P'!=structure)return FALSE; + ::sprintf(structureString,"%c",structure); + return putControlData(mFTPCommands[FileStructure]+String(" ")+structureString); +} + +WORD FTPClient::storeUnique(String pathFileName) +{ + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + return putControlData(mFTPCommands[StoreUnique]+String(" ")+pathFileName); +} + +WORD FTPClient::append(String pathFileName) +{ + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + return putControlData(mFTPCommands[Append]+String(" ")+pathFileName); +} + +WORD FTPClient::allocate(DWORD numBytes,DWORD maxRecord) +{ + String allocationString; + if(!mFTPControl.isConnected())return FALSE; + if(maxRecord)::sprintf(allocationString,"%ld R %ld",numBytes,maxRecord); + else ::sprintf(allocationString,"%ld",numBytes); + return putControlData(mFTPCommands[Allocate]+String(" ")+allocationString); +} + +WORD FTPClient::restart(String serverMarker) +{ + if(!mFTPControl.isConnected()||serverMarker.isNull())return FALSE; + return putControlData(mFTPCommands[Restart]+String(" ")+serverMarker); +} + +WORD FTPClient::abort(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[Abort]); +} + +WORD FTPClient::remove(String pathFileName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathFileName.isNull())return FALSE; + if(!putControlData(mFTPCommands[Delete]+String(" ")+pathFileName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::removeDirectory(String pathDirectoryName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathDirectoryName.isNull())return FALSE; + if(!putControlData(mFTPCommands[RemoveDirectory]+String(" ")+pathDirectoryName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::makeDirectory(String pathDirectoryName) +{ + String responseString; + if(!mFTPControl.isConnected()||pathDirectoryName.isNull())return FALSE; + if(!putControlData(mFTPCommands[MakeDirectory]+String(" ")+pathDirectoryName,FALSE))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::siteParameters(void) +{ + String responseString; + + if(!mFTPControl.isConnected())return FALSE; + if(!putControlData(mFTPCommands[SiteParameters]))return FALSE; + if(!mFTPControl.receive(responseString))return FALSE; + message(responseString); + return TRUE; +} + +WORD FTPClient::system(void) +{ + if(!mFTPControl.isConnected())return FALSE; + return putControlData(mFTPCommands[System]); +} + +WORD FTPClient::status(String pathName) +{ + if(!mFTPControl.isConnected())return FALSE; + if(!pathName.isNull())return putControlData(mFTPCommands[Status]+String(" ")+pathName); + return putControlData(mFTPCommands[Status]); +} + +WORD FTPClient::help(String commandName) +{ + Block receiveStrings; + + if(!mFTPControl.isConnected())return FALSE; + if(!commandName.isNull()){if(!putControlData(mFTPCommands[Help]+String(" ")+commandName,FALSE))return FALSE;} + else if(!putControlData(mFTPCommands[Help],FALSE))return FALSE; + mFTPControl.receive(receiveStrings); + for(short itemIndex=0;itemIndex receiveStrings; + + if(!mFTPControl.isConnected())return; + if(!mFTPControl.receive(receiveStrings))return; + if(!displayStrings||!receiveStrings.size())return; + message(receiveStrings); +} + +void FTPClient::createCommands(void) +{ + mFTPCommands.insert(&String("USER")); // user name + mFTPCommands.insert(&String("PASS")); // password + mFTPCommands.insert(&String("ACCT")); // account + mFTPCommands.insert(&String("CWD")); // change working directory + mFTPCommands.insert(&String("CDUP")); // change to parent directory + mFTPCommands.insert(&String("SMNT")); // structure mount + mFTPCommands.insert(&String("REIN")); // reinitialize + mFTPCommands.insert(&String("QUIT")); // quit + mFTPCommands.insert(&String("PORT")); // data port + mFTPCommands.insert(&String("PASV")); // passive + mFTPCommands.insert(&String("TYPE")); // representation type + mFTPCommands.insert(&String("STRU")); // file structure + mFTPCommands.insert(&String("MODE")); // transfer mode + mFTPCommands.insert(&String("RETR")); // retrieve + mFTPCommands.insert(&String("STOR")); // store + mFTPCommands.insert(&String("STOU")); // store unique + mFTPCommands.insert(&String("APPE")); // append (with create) + mFTPCommands.insert(&String("ALLO")); // allocate + mFTPCommands.insert(&String("REST")); // restart + mFTPCommands.insert(&String("RNFR")); // rename from + mFTPCommands.insert(&String("RNTO")); // rename to + mFTPCommands.insert(&String("ABOR")); // abort + mFTPCommands.insert(&String("DELE")); // delete + mFTPCommands.insert(&String("RMD")); // remove directory + mFTPCommands.insert(&String("MKD")); // make directory + mFTPCommands.insert(&String("PWD")); // print working directory + mFTPCommands.insert(&String("LIST")); // list + mFTPCommands.insert(&String("NLST")); // name list + mFTPCommands.insert(&String("SITE")); // site parameters + mFTPCommands.insert(&String("SYST")); // system + mFTPCommands.insert(&String("STAT")); // status + mFTPCommands.insert(&String("HELP")); // help + mFTPCommands.insert(&String("NOOP")); // noop +} + +void FTPClient::buildResponseStrings(void) +{ + mAckConnectionResponseStrings.insert(&String("220")); + mAckLoginResponseStrings.insert(&String("230")); + mAckLoginResponseStrings.insert(&String("331")); + mAckLogoutResponseStrings.insert(&String("221")); + mAckPortResponseStrings.insert(&String("200")); +} + +WORD FTPClient::receive(Block &responseStrings) +{ + Block responseLines; + return receive(responseLines,responseStrings); +} + +WORD FTPClient::receive(Block &receiveStrings,Block &responseStrings) +{ + WORD isInMultiLine(FALSE); + BOOL returnCode(TRUE); + String seriesItem; + String stringData; + + receiveStrings.remove(); + while(TRUE) + { + if(!mFTPControl.receive(stringData))break; + message(stringData); + if(!receiveStrings.size()) + { + seriesItem=stringData.substr(0,2); + if(!isInResponse(seriesItem,responseStrings)) + { + message(String(">>")+seriesItem+String(" is not in the valid response set.")); + returnCode=FALSE; + } + isInMultiLine=stringData.operator[](3)=='-'; + } + if(receiveStrings.size()&&isInMultiLine&&stringData.operator[](3)!='-'&&stringData.substr(0,2)==seriesItem)break; + receiveStrings.insert(&stringData); + if(!isInMultiLine)break; + } + return returnCode; +} + +WORD FTPClient::isInResponse(const String &responseString,Block &responseStrings) +{ + if(responseString.isNull())return FALSE; + for(int itemIndex=0;itemIndex &/*messageStrings*/) +{ +} + diff --git a/ftp/FTP.DEF b/ftp/FTP.DEF new file mode 100644 index 0000000..dd5b763 --- /dev/null +++ b/ftp/FTP.DEF @@ -0,0 +1,12 @@ +NAME FTPClient +DESCRIPTION 'FTP CLIENT' +EXETYPE WINDOWS +STUB 'WINSTUB.EXE' +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE +HEAPSIZE 16384 +STACKSIZE 32767 +EXPORTS + + + diff --git a/ftp/FTP.HPP b/ftp/FTP.HPP new file mode 100644 index 0000000..7e3d78b --- /dev/null +++ b/ftp/FTP.HPP @@ -0,0 +1,123 @@ +#ifndef _FTP_FTPCLIENT_HPP_ +#define _FTP_FTPCLIENT_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _SOCKET_INETSOCKETADDRESS_HPP_ +#include +#endif +#ifndef _FTP_FTPDATA_HPP_ +#include +#endif + +class FTPClient : public INETSocketAddress +{ +public: + FTPClient(void); + virtual ~FTPClient(); + WORD open(String hostName); + WORD login(String userName,String password); + WORD account(String accountInfo); + WORD changeWorkingDirectory(String workingDirectory); + WORD changeToParentDirectory(void); + WORD structureMount(String systemFileGroupDesignator); + WORD reinitialize(void); + WORD logout(void); + WORD port(FTPData &ftpData); + WORD passive(void); + WORD type(BYTE type,BYTE storage=0); + WORD fileStructure(BYTE structure); + WORD mode(BYTE transferMode); + WORD retrieve(String pathFileName,DWORD &sizeData); + WORD store(String pathFileName); + WORD storeUnique(String pathFileName); + WORD append(String pathFileName); + WORD allocate(DWORD numBytes,DWORD maxRecord=0L); + WORD restart(String serverMarker); + WORD renameFrom(String oldPathFileName); + WORD renameTo(String oldPathFileName); + WORD abort(void); + WORD remove(String pathFileName); + WORD removeDirectory(String pathDirectoryName); + WORD makeDirectory(String pathDirectoryName); + WORD printWorkingDirectory(void); + WORD list(String pathName=String()); + WORD nameList(String pathName=String(),WORD showResponse=TRUE); + WORD siteParameters(void); + WORD system(void); + WORD status(String pathName=String()); + WORD help(String commandName=String()); + WORD noop(void); + WORD isConnected(void)const; + WORD isLoggedIn(void)const; + WORD receive(String &lineString); + BYTE currentType(void)const; +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: +enum FTPCommands{User,Password,Account,ChangeWorkingDirectory,ChangeToParentDirectory, + StructureMount,Reinitialize,Logout,DataPort,Passive,RepresentationType,FileStructure, + TransferMode,Retrieve,Store,StoreUnique,Append,Allocate,Restart,RenameFrom,RenameTo, + Abort,Delete,RemoveDirectory,MakeDirectory,PrintWorkingDirectory,List,NameList,SiteParameters, + System,Status,Help,Noop}; + void createCommands(void); + void isLoggedIn(WORD isLoggedIn); + WORD getControlData(void); + WORD putControlData(String stringData,WORD waitForResponse=TRUE); + void receiveStrings(WORD displayStrings=TRUE); + WORD receive(Block &receiveStrings,Block &responseStrings); + WORD receive(Block &responseStrings); + void buildResponseStrings(void); + WORD isInResponse(const String &responseString,Block &responseStrings); + + Socket mFTPControl; + WSASystem mWSASystem; + Block mFTPCommands; + Block mAckConnectionResponseStrings; + Block mAckLoginResponseStrings; + Block mAckLogoutResponseStrings; + Block mAckPortResponseStrings; + Block mResponseStrings; + WORD mIsLoggedIn; + BYTE mCurrentType; +}; + +inline +WORD FTPClient::isConnected(void)const +{ + return mFTPControl.isConnected(); +} + +inline +WORD FTPClient::isLoggedIn(void)const +{ + return mIsLoggedIn; +} + +inline +void FTPClient::isLoggedIn(WORD isLoggedIn) +{ + mIsLoggedIn=isLoggedIn; +} + +inline +WORD FTPClient::receive(String &lineString) +{ + if(!isConnected()||!isLoggedIn())return FALSE; + return mFTPControl.receive(lineString); +} + +inline +BYTE FTPClient::currentType(void)const +{ + return mCurrentType; +} +#endif + diff --git a/ftp/FTP.IDE b/ftp/FTP.IDE new file mode 100644 index 0000000..913514a Binary files /dev/null and b/ftp/FTP.IDE differ diff --git a/ftp/FTP.PLG b/ftp/FTP.PLG new file mode 100644 index 0000000..a4d5ff9 --- /dev/null +++ b/ftp/FTP.PLG @@ -0,0 +1,67 @@ + + +
+

Build Log

+

+--------------------Configuration: ftp - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP26.tmp" with contents +[ +/nologo /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\ftp\Ftp.cpp" +"D:\work\ftp\Ftpdata.cpp" +"D:\work\ftp\ftpthrd.cpp" +"D:\work\ftp\hostdlg.cpp" +"D:\work\ftp\Interprt.cpp" +"D:\work\ftp\Logindlg.cpp" +"D:\work\ftp\Main.cpp" +"D:\work\ftp\Mainwnd.cpp" +"D:\work\ftp\Stdtmpl.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP26.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP27.tmp" with contents +[ +wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\ftp.exe" +.\msvcobj\Ftp.obj +.\msvcobj\Ftpdata.obj +.\msvcobj\ftpthrd.obj +.\msvcobj\hostdlg.obj +.\msvcobj\Interprt.obj +.\msvcobj\Logindlg.obj +.\msvcobj\Main.obj +.\msvcobj\Mainwnd.obj +.\msvcobj\Stdtmpl.obj +.\msvcobj\Ftp.res +\work\exe\mscommon.lib +\work\exe\msdialog.lib +\work\exe\mssocket.lib +\work\exe\msthread.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP27.tmp" +

Output Window

+Compiling... +Ftp.cpp +Ftpdata.cpp +ftpthrd.cpp +D:\WORK\ftp/interprt.hpp(7) : fatal error C1083: Cannot open include file: 'display/editwnd.hpp': No such file or directory +hostdlg.cpp +D:\work\ftp\hostdlg.cpp(68) : error C2660: 'setFocus' : function does not take 0 parameters +Interprt.cpp +D:\WORK\ftp/interprt.hpp(7) : fatal error C1083: Cannot open include file: 'display/editwnd.hpp': No such file or directory +Logindlg.cpp +D:\work\ftp\Logindlg.cpp(71) : error C2660: 'setFocus' : function does not take 0 parameters +Main.cpp +D:\WORK\ftp/interprt.hpp(7) : fatal error C1083: Cannot open include file: 'display/editwnd.hpp': No such file or directory +Mainwnd.cpp +D:\WORK\ftp/interprt.hpp(7) : fatal error C1083: Cannot open include file: 'display/editwnd.hpp': No such file or directory +Stdtmpl.cpp +Error executing cl.exe. + + + +

Results

+ftp.exe - 6 error(s), 0 warning(s) +
+ + diff --git a/ftp/FTP.RC b/ftp/FTP.RC new file mode 100644 index 0000000..18a9b28 --- /dev/null +++ b/ftp/FTP.RC @@ -0,0 +1,18 @@ +#include + +FTP MENU +{ + POPUP "Connect" + { + MENUITEM "Remote Host", CM_REMOTEHOST + MENUITEM SEPARATOR + MENUITEM "Exit Alt+F4", CM_EXIT + MENUITEM SEPARATOR + } + +} + +STRINGTABLE +{ + STRING_VERSIONMSG, "FTP Interpreter v2.01 Copyright(c) 1996 Sean M. Kessler" +} diff --git a/ftp/FTP.RWS b/ftp/FTP.RWS new file mode 100644 index 0000000..16c1e6b Binary files /dev/null and b/ftp/FTP.RWS differ diff --git a/ftp/FTPDATA.CPP b/ftp/FTPDATA.CPP new file mode 100644 index 0000000..ef04420 --- /dev/null +++ b/ftp/FTPDATA.CPP @@ -0,0 +1,31 @@ +#include +#include + +FTPData::FTPData(void) +{ + create(); +} + +FTPData::~FTPData() +{ + destroy(); +} + +WORD FTPData::accept(void) +{ + if(!mFTPDataSocket.isListening())return FALSE; + if(!mFTPDataSocket.accept((Socket&)*this))return FALSE; + mFTPDataSocket.destroy(); + return TRUE; +} + +void FTPData::create(void) +{ + destroy(); + if(!mWSASystem.isInitialized())return; + if(!mFTPDataSocket.create())return; + family(AF_INET); + if(!mFTPDataSocket.bind((INETSocketAddress&)*this))return; + if(!mFTPDataSocket.listen())return; +} + diff --git a/ftp/FTPDATA.HPP b/ftp/FTPDATA.HPP new file mode 100644 index 0000000..97d6628 --- /dev/null +++ b/ftp/FTPDATA.HPP @@ -0,0 +1,33 @@ +#ifndef _FTP_FTPDATA_HPP_ +#define _FTP_FTPDATA_HPP_ +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _SOCKET_SERVENT_HPP_ +#include +#endif +#ifndef _SOCKET_WSADATA_HPP_ +#include +#endif + +class FTPData : public Socket, public INETSocketAddress +{ +public: + enum {Listen}; + FTPData(void); + virtual ~FTPData(); + WORD accept(void); + WORD isOkay(void)const; +private: + void create(void); + + Socket mFTPDataSocket; + WSASystem mWSASystem; +}; + +inline +WORD FTPData::isOkay(void)const +{ + return (mWSASystem.isInitialized()&&mFTPDataSocket.isOkay()&&mFTPDataSocket.isBound()&&mFTPDataSocket.isListening()); +} +#endif diff --git a/ftp/FTPLIB.MAK b/ftp/FTPLIB.MAK new file mode 100644 index 0000000..f86eff1 --- /dev/null +++ b/ftp/FTPLIB.MAK @@ -0,0 +1,577 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=ftplib - Win32 Debug +!MESSAGE No configuration specified. Defaulting to ftplib - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "ftplib - Win32 Release" && "$(CFG)" != "ftplib - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Ftplib.mak" CFG="ftplib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ftplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "ftplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "ftplib - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "ftplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Ftplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Ftp.obj" + -@erase "$(INTDIR)\Ftpdata.obj" + -@erase "$(INTDIR)\Ftpthrd.obj" + -@erase "$(INTDIR)\hostdlg.obj" + -@erase "$(INTDIR)\Interprt.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "$(OUTDIR)\Ftplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Ftplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Ftplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Ftp.obj" \ + "$(INTDIR)\Ftpdata.obj" \ + "$(INTDIR)\Ftpthrd.obj" \ + "$(INTDIR)\hostdlg.obj" \ + "$(INTDIR)\Interprt.obj" \ + "$(INTDIR)\Logindlg.obj" + +"$(OUTDIR)\Ftplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "ftplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\ftplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Ftp.obj" + -@erase "$(INTDIR)\Ftpdata.obj" + -@erase "$(INTDIR)\Ftpthrd.obj" + -@erase "$(INTDIR)\hostdlg.obj" + -@erase "$(INTDIR)\Interprt.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "..\exe\ftplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Ftplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\ftplib.lib" +LIB32_FLAGS=/nologo /out:"..\exe\ftplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Ftp.obj" \ + "$(INTDIR)\Ftpdata.obj" \ + "$(INTDIR)\Ftpthrd.obj" \ + "$(INTDIR)\hostdlg.obj" \ + "$(INTDIR)\Interprt.obj" \ + "$(INTDIR)\Logindlg.obj" + +"..\exe\ftplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "ftplib - Win32 Release" +# Name "ftplib - Win32 Debug" + +!IF "$(CFG)" == "ftplib - Win32 Release" + +!ELSEIF "$(CFG)" == "ftplib - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Ftpdata.cpp +DEP_CPP_FTPDA=\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Ftpdata.obj" : $(SOURCE) $(DEP_CPP_FTPDA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftpthrd.cpp + +!IF "$(CFG)" == "ftplib - Win32 Release" + +DEP_CPP_FTPTH=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\ftpthrd.hpp"\ + {$(INCLUDE)}"\.\interprt.hpp"\ + {$(INCLUDE)}"\.\resinc.h"\ + {$(INCLUDE)}"\.\resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\puredwrd.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\common\winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\display\editwnd.hpp"\ + {$(INCLUDE)}"\display\guibrdr.hpp"\ + {$(INCLUDE)}"\display\guichar.hpp"\ + {$(INCLUDE)}"\display\guiline.hpp"\ + {$(INCLUDE)}"\display\keyctrl.hpp"\ + {$(INCLUDE)}"\display\vcaret.hpp"\ + {$(INCLUDE)}"\display\virtdisp.hpp"\ + {$(INCLUDE)}"\parse\assemble.hpp"\ + {$(INCLUDE)}"\parse\emit.hpp"\ + {$(INCLUDE)}"\parse\parse.hpp"\ + {$(INCLUDE)}"\parse\psymbol.hpp"\ + {$(INCLUDE)}"\parse\scan.hpp"\ + {$(INCLUDE)}"\parse\symbol.hpp"\ + {$(INCLUDE)}"\parse\table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\thread\context.hpp"\ + {$(INCLUDE)}"\thread\event.hpp"\ + {$(INCLUDE)}"\thread\monitor.hpp"\ + {$(INCLUDE)}"\thread\msgqueue.hpp"\ + {$(INCLUDE)}"\thread\mthread.hpp"\ + {$(INCLUDE)}"\thread\mutex.hpp"\ + {$(INCLUDE)}"\thread\qthread.hpp"\ + {$(INCLUDE)}"\thread\savearea.hpp"\ + {$(INCLUDE)}"\thread\tcallbck.hpp"\ + {$(INCLUDE)}"\thread\thmsg.hpp"\ + {$(INCLUDE)}"\thread\thread.hpp"\ + + +"$(INTDIR)\Ftpthrd.obj" : $(SOURCE) $(DEP_CPP_FTPTH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ftplib - Win32 Debug" + +DEP_CPP_FTPTH=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\ftpthrd.hpp"\ + {$(INCLUDE)}"\.\interprt.hpp"\ + {$(INCLUDE)}"\.\resinc.h"\ + {$(INCLUDE)}"\.\resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\puredwrd.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\common\winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\display\editwnd.hpp"\ + {$(INCLUDE)}"\display\guibrdr.hpp"\ + {$(INCLUDE)}"\display\guichar.hpp"\ + {$(INCLUDE)}"\display\guiline.hpp"\ + {$(INCLUDE)}"\display\keyctrl.hpp"\ + {$(INCLUDE)}"\display\vcaret.hpp"\ + {$(INCLUDE)}"\display\virtdisp.hpp"\ + {$(INCLUDE)}"\parse\assemble.hpp"\ + {$(INCLUDE)}"\parse\emit.hpp"\ + {$(INCLUDE)}"\parse\parse.hpp"\ + {$(INCLUDE)}"\parse\psymbol.hpp"\ + {$(INCLUDE)}"\parse\scan.hpp"\ + {$(INCLUDE)}"\parse\symbol.hpp"\ + {$(INCLUDE)}"\parse\table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\thread\context.hpp"\ + {$(INCLUDE)}"\thread\event.hpp"\ + {$(INCLUDE)}"\thread\monitor.hpp"\ + {$(INCLUDE)}"\thread\msgqueue.hpp"\ + {$(INCLUDE)}"\thread\mthread.hpp"\ + {$(INCLUDE)}"\thread\mutex.hpp"\ + {$(INCLUDE)}"\thread\ptcllbck.hpp"\ + {$(INCLUDE)}"\thread\qthread.hpp"\ + {$(INCLUDE)}"\thread\savearea.hpp"\ + {$(INCLUDE)}"\thread\tcallbck.hpp"\ + {$(INCLUDE)}"\thread\tcallbck.tpp"\ + {$(INCLUDE)}"\thread\thmsg.hpp"\ + {$(INCLUDE)}"\thread\thread.hpp"\ + + +"$(INTDIR)\Ftpthrd.obj" : $(SOURCE) $(DEP_CPP_FTPTH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\hostdlg.cpp +DEP_CPP_HOSTD=\ + {$(INCLUDE)}"\.\hostdlg.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\hostdlg.obj" : $(SOURCE) $(DEP_CPP_HOSTD) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Interprt.cpp +DEP_CPP_INTER=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\interprt.hpp"\ + {$(INCLUDE)}"\.\logindlg.hpp"\ + {$(INCLUDE)}"\.\resinc.h"\ + {$(INCLUDE)}"\.\resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\puredwrd.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + {$(INCLUDE)}"\display\editwnd.hpp"\ + {$(INCLUDE)}"\display\guibrdr.hpp"\ + {$(INCLUDE)}"\display\guichar.hpp"\ + {$(INCLUDE)}"\display\guiline.hpp"\ + {$(INCLUDE)}"\display\keyctrl.hpp"\ + {$(INCLUDE)}"\display\vcaret.hpp"\ + {$(INCLUDE)}"\display\virtdisp.hpp"\ + {$(INCLUDE)}"\parse\assemble.hpp"\ + {$(INCLUDE)}"\parse\emit.hpp"\ + {$(INCLUDE)}"\parse\parse.hpp"\ + {$(INCLUDE)}"\parse\psymbol.hpp"\ + {$(INCLUDE)}"\parse\scan.hpp"\ + {$(INCLUDE)}"\parse\symbol.hpp"\ + {$(INCLUDE)}"\parse\table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\thread\monitor.hpp"\ + {$(INCLUDE)}"\thread\mutex.hpp"\ + + +"$(INTDIR)\Interprt.obj" : $(SOURCE) $(DEP_CPP_INTER) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Logindlg.cpp +DEP_CPP_LOGIN=\ + {$(INCLUDE)}"\.\logindlg.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Logindlg.obj" : $(SOURCE) $(DEP_CPP_LOGIN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftp.cpp +DEP_CPP_FTP_C=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\socket\hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Ftp.obj" : $(SOURCE) $(DEP_CPP_FTP_C) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/ftp/FTPTHRD.CPP b/ftp/FTPTHRD.CPP new file mode 100644 index 0000000..86d174f --- /dev/null +++ b/ftp/FTPTHRD.CPP @@ -0,0 +1,70 @@ +#include + +FTPThread::FTPThread(void) +{ + mThreadHandler.setCallback(this,&FTPThread::threadHandler); + insertHandler(&mThreadHandler); +} + +FTPThread::FTPThread(const FTPThread &/*someFTPThread*/) +{ // private implementation +} + +FTPThread::~FTPThread() +{ + removeHandler(&mThreadHandler); + mCompletionHandler=CallbackPointer(); +} + +WORD FTPThread::interpretLine(const String &lineString) +{ + String *pString=new String(lineString); + ThreadMessage interpretMessage(ThreadMessage::TM_USER,MsgInterpretLine,(LONG)pString); + return postMessage(interpretMessage); +} + +WORD FTPThread::interpretFile(const String &pathFileName) +{ + String *pString=new String(pathFileName); + ThreadMessage interpretMessage(ThreadMessage::TM_USER,MsgInterpretFile,(LONG)pString); + return postMessage(interpretMessage); +} + +void FTPThread::setDisplay(Monitor &editMonitor) +{ + FTPInterpreter::setDisplay(editMonitor); +} + +DWORD FTPThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(MsgInterpretLine==someThreadMessage.userDataOne())handleInterpretLine((String*)someThreadMessage.userDataTwo()); + else if(MsgInterpretFile==someThreadMessage.userDataOne())handleInterpretFile((String*)someThreadMessage.userDataTwo()); + break; + } + return FALSE; +} + +void FTPThread::handleInterpretLine(String *pInterpretLine) +{ + CallbackData completionData(0,(int)LineComplete); + String interpretLine(*pInterpretLine); + delete pInterpretLine; + FTPInterpreter::interpretLine(interpretLine); + mCompletionHandler.callback(completionData); +} + +void FTPThread::handleInterpretFile(String *pInterpretFile) +{ + CallbackData completionData(0,(int)FileComplete); + String interpretFile(*pInterpretFile); + delete pInterpretFile; + FTPInterpreter::interpretFile(interpretFile); + mCompletionHandler.callback(completionData); +} diff --git a/ftp/FTPTHRD.HPP b/ftp/FTPTHRD.HPP new file mode 100644 index 0000000..4e3a721 --- /dev/null +++ b/ftp/FTPTHRD.HPP @@ -0,0 +1,45 @@ +#ifndef _FTP_FTPTHREAD_HPP_ +#define _FTP_FTPTHREAD_HPP_ +#ifndef _FTP_INTERPRETER_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif + +class EditMonitor; + +class FTPThread : private FTPInterpreter, public MessageThread +{ +public: + enum HandlerType{MsgInterpretLine,MsgInterpretFile}; + enum CompletionCode{LineComplete,FileComplete}; + FTPThread(void); + virtual ~FTPThread(); + WORD interpretLine(const String &lineString); + WORD interpretFile(const String &pathFileName); + void setDisplay(Monitor &displayWindow); + void setCompletionHandler(PureCallback *lpCallback); +private: + FTPThread(const FTPThread &someFTPThread); + FTPThread &operator=(const FTPThread &someFTPThread); + DWORD threadHandler(ThreadMessage &someThreadMessage); + void handleInterpretLine(String *pString); + void handleInterpretFile(String *pString); + + ThreadCallback mThreadHandler; + CallbackPointer mCompletionHandler; +}; + +inline +FTPThread &FTPThread::operator=(const FTPThread &/*someFTPThread*/) +{ // private implementation + return *this; +} + +inline +void FTPThread::setCompletionHandler(PureCallback *lpCallback) +{ + mCompletionHandler=CallbackPointer(lpCallback); +} +#endif diff --git a/ftp/Ftp.mak b/ftp/Ftp.mak new file mode 100644 index 0000000..28dc63d --- /dev/null +++ b/ftp/Ftp.mak @@ -0,0 +1,1314 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=ftp - Win32 Debug +!MESSAGE No configuration specified. Defaulting to ftp - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "ftp - Win32 Release" && "$(CFG)" != "ftp - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Ftp.mak" CFG="ftp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ftp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "ftp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "ftp - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "ftp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Ftp.exe" + +CLEAN : + -@erase "$(INTDIR)\Ftp.obj" + -@erase "$(INTDIR)\Ftp.res" + -@erase "$(INTDIR)\Ftpdata.obj" + -@erase "$(INTDIR)\ftpthrd.obj" + -@erase "$(INTDIR)\hostdlg.obj" + -@erase "$(INTDIR)\Interprt.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(OUTDIR)\Ftp.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Ftp.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Ftp.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Ftp.pdb" /machine:I386 /out:"$(OUTDIR)/Ftp.exe" +LINK32_OBJS= \ + "$(INTDIR)\Ftp.obj" \ + "$(INTDIR)\Ftp.res" \ + "$(INTDIR)\Ftpdata.obj" \ + "$(INTDIR)\ftpthrd.obj" \ + "$(INTDIR)\hostdlg.obj" \ + "$(INTDIR)\Interprt.obj" \ + "$(INTDIR)\Logindlg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msdisp.lib" \ + "..\Exe\msparse.lib" \ + "..\Exe\mssocket.lib" \ + "..\exe\msthread.lib" + +"$(OUTDIR)\Ftp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\ftp.exe" + +CLEAN : + -@erase "$(INTDIR)\Ftp.obj" + -@erase "$(INTDIR)\Ftp.res" + -@erase "$(INTDIR)\Ftpdata.obj" + -@erase "$(INTDIR)\ftpthrd.obj" + -@erase "$(INTDIR)\hostdlg.obj" + -@erase "$(INTDIR)\Interprt.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "..\exe\ftp.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Ftp.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\ftp.exe" +# SUBTRACT LINK32 /nodefaultlib +LINK32_FLAGS=wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib\ + comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows\ + /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\ftp.exe" +LINK32_OBJS= \ + "$(INTDIR)\Ftp.obj" \ + "$(INTDIR)\Ftp.res" \ + "$(INTDIR)\Ftpdata.obj" \ + "$(INTDIR)\ftpthrd.obj" \ + "$(INTDIR)\hostdlg.obj" \ + "$(INTDIR)\Interprt.obj" \ + "$(INTDIR)\Logindlg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msdisp.lib" \ + "..\Exe\msparse.lib" \ + "..\Exe\mssocket.lib" \ + "..\exe\msthread.lib" + +"..\exe\ftp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "ftp - Win32 Release" +# Name "ftp - Win32 Debug" + +!IF "$(CFG)" == "ftp - Win32 Release" + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "ftp - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Interprt.cpp +DEP_CPP_INTER=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Logindlg.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + + +"$(INTDIR)\Interprt.obj" : $(SOURCE) $(DEP_CPP_INTER) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Logindlg.cpp +DEP_CPP_LOGIN=\ + {$(INCLUDE)}"\.\Logindlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Logindlg.obj" : $(SOURCE) $(DEP_CPP_LOGIN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "ftp - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp + +!IF "$(CFG)" == "ftp - Win32 Release" + +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Hostdlg.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Logindlg.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Hostdlg.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Logindlg.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "ftp - Win32 Release" + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msdialog.lib + +!IF "$(CFG)" == "ftp - Win32 Release" + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msdisp.lib + +!IF "$(CFG)" == "ftp - Win32 Release" + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msparse.lib + +!IF "$(CFG)" == "ftp - Win32 Release" + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mssocket.lib + +!IF "$(CFG)" == "ftp - Win32 Release" + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\ftpthrd.cpp + +!IF "$(CFG)" == "ftp - Win32 Release" + +DEP_CPP_FTPTH=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\ftpthrd.obj" : $(SOURCE) $(DEP_CPP_FTPTH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +DEP_CPP_FTPTH=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\Ftpthrd.hpp"\ + {$(INCLUDE)}"\.\Interprt.hpp"\ + {$(INCLUDE)}"\.\Resinc.h"\ + {$(INCLUDE)}"\.\Resinc.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Parse\Assemble.hpp"\ + {$(INCLUDE)}"\Parse\Emit.hpp"\ + {$(INCLUDE)}"\Parse\Parse.hpp"\ + {$(INCLUDE)}"\Parse\Psymbol.hpp"\ + {$(INCLUDE)}"\Parse\Scan.hpp"\ + {$(INCLUDE)}"\Parse\Symbol.hpp"\ + {$(INCLUDE)}"\Parse\Table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\ftpthrd.obj" : $(SOURCE) $(DEP_CPP_FTPTH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\msthread.lib + +!IF "$(CFG)" == "ftp - Win32 Release" + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\hostdlg.cpp +DEP_CPP_HOSTD=\ + {$(INCLUDE)}"\.\Hostdlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\hostdlg.obj" : $(SOURCE) $(DEP_CPP_HOSTD) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftp.cpp +DEP_CPP_FTP_C=\ + {$(INCLUDE)}"\.\Ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Ftp.obj" : $(SOURCE) $(DEP_CPP_FTP_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftp.rc +DEP_RSC_FTP_R=\ + {$(INCLUDE)}"\.\Resinc.h"\ + + +"$(INTDIR)\Ftp.res" : $(SOURCE) $(DEP_RSC_FTP_R) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftpdata.cpp +DEP_CPP_FTPDA=\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Ftpdata.obj" : $(SOURCE) $(DEP_CPP_FTPDA) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/ftp/Ftp.mdp b/ftp/Ftp.mdp new file mode 100644 index 0000000..ba293a4 Binary files /dev/null and b/ftp/Ftp.mdp differ diff --git a/ftp/Ftp.ncb b/ftp/Ftp.ncb new file mode 100644 index 0000000..0f91f19 Binary files /dev/null and b/ftp/Ftp.ncb differ diff --git a/ftp/Ftp.opt b/ftp/Ftp.opt new file mode 100644 index 0000000..c5a9ccb Binary files /dev/null and b/ftp/Ftp.opt differ diff --git a/ftp/Ftplib.001 b/ftp/Ftplib.001 new file mode 100644 index 0000000..f86eff1 --- /dev/null +++ b/ftp/Ftplib.001 @@ -0,0 +1,577 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=ftplib - Win32 Debug +!MESSAGE No configuration specified. Defaulting to ftplib - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "ftplib - Win32 Release" && "$(CFG)" != "ftplib - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Ftplib.mak" CFG="ftplib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ftplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "ftplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "ftplib - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "ftplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Ftplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Ftp.obj" + -@erase "$(INTDIR)\Ftpdata.obj" + -@erase "$(INTDIR)\Ftpthrd.obj" + -@erase "$(INTDIR)\hostdlg.obj" + -@erase "$(INTDIR)\Interprt.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "$(OUTDIR)\Ftplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Ftplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Ftplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Ftp.obj" \ + "$(INTDIR)\Ftpdata.obj" \ + "$(INTDIR)\Ftpthrd.obj" \ + "$(INTDIR)\hostdlg.obj" \ + "$(INTDIR)\Interprt.obj" \ + "$(INTDIR)\Logindlg.obj" + +"$(OUTDIR)\Ftplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "ftplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\ftplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Ftp.obj" + -@erase "$(INTDIR)\Ftpdata.obj" + -@erase "$(INTDIR)\Ftpthrd.obj" + -@erase "$(INTDIR)\hostdlg.obj" + -@erase "$(INTDIR)\Interprt.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "..\exe\ftplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Ftplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\ftplib.lib" +LIB32_FLAGS=/nologo /out:"..\exe\ftplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Ftp.obj" \ + "$(INTDIR)\Ftpdata.obj" \ + "$(INTDIR)\Ftpthrd.obj" \ + "$(INTDIR)\hostdlg.obj" \ + "$(INTDIR)\Interprt.obj" \ + "$(INTDIR)\Logindlg.obj" + +"..\exe\ftplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "ftplib - Win32 Release" +# Name "ftplib - Win32 Debug" + +!IF "$(CFG)" == "ftplib - Win32 Release" + +!ELSEIF "$(CFG)" == "ftplib - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Ftpdata.cpp +DEP_CPP_FTPDA=\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Ftpdata.obj" : $(SOURCE) $(DEP_CPP_FTPDA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftpthrd.cpp + +!IF "$(CFG)" == "ftplib - Win32 Release" + +DEP_CPP_FTPTH=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\ftpthrd.hpp"\ + {$(INCLUDE)}"\.\interprt.hpp"\ + {$(INCLUDE)}"\.\resinc.h"\ + {$(INCLUDE)}"\.\resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\puredwrd.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\common\winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\display\editwnd.hpp"\ + {$(INCLUDE)}"\display\guibrdr.hpp"\ + {$(INCLUDE)}"\display\guichar.hpp"\ + {$(INCLUDE)}"\display\guiline.hpp"\ + {$(INCLUDE)}"\display\keyctrl.hpp"\ + {$(INCLUDE)}"\display\vcaret.hpp"\ + {$(INCLUDE)}"\display\virtdisp.hpp"\ + {$(INCLUDE)}"\parse\assemble.hpp"\ + {$(INCLUDE)}"\parse\emit.hpp"\ + {$(INCLUDE)}"\parse\parse.hpp"\ + {$(INCLUDE)}"\parse\psymbol.hpp"\ + {$(INCLUDE)}"\parse\scan.hpp"\ + {$(INCLUDE)}"\parse\symbol.hpp"\ + {$(INCLUDE)}"\parse\table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\thread\context.hpp"\ + {$(INCLUDE)}"\thread\event.hpp"\ + {$(INCLUDE)}"\thread\monitor.hpp"\ + {$(INCLUDE)}"\thread\msgqueue.hpp"\ + {$(INCLUDE)}"\thread\mthread.hpp"\ + {$(INCLUDE)}"\thread\mutex.hpp"\ + {$(INCLUDE)}"\thread\qthread.hpp"\ + {$(INCLUDE)}"\thread\savearea.hpp"\ + {$(INCLUDE)}"\thread\tcallbck.hpp"\ + {$(INCLUDE)}"\thread\thmsg.hpp"\ + {$(INCLUDE)}"\thread\thread.hpp"\ + + +"$(INTDIR)\Ftpthrd.obj" : $(SOURCE) $(DEP_CPP_FTPTH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ftplib - Win32 Debug" + +DEP_CPP_FTPTH=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\ftpthrd.hpp"\ + {$(INCLUDE)}"\.\interprt.hpp"\ + {$(INCLUDE)}"\.\resinc.h"\ + {$(INCLUDE)}"\.\resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\puredwrd.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\common\winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\display\editwnd.hpp"\ + {$(INCLUDE)}"\display\guibrdr.hpp"\ + {$(INCLUDE)}"\display\guichar.hpp"\ + {$(INCLUDE)}"\display\guiline.hpp"\ + {$(INCLUDE)}"\display\keyctrl.hpp"\ + {$(INCLUDE)}"\display\vcaret.hpp"\ + {$(INCLUDE)}"\display\virtdisp.hpp"\ + {$(INCLUDE)}"\parse\assemble.hpp"\ + {$(INCLUDE)}"\parse\emit.hpp"\ + {$(INCLUDE)}"\parse\parse.hpp"\ + {$(INCLUDE)}"\parse\psymbol.hpp"\ + {$(INCLUDE)}"\parse\scan.hpp"\ + {$(INCLUDE)}"\parse\symbol.hpp"\ + {$(INCLUDE)}"\parse\table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\thread\context.hpp"\ + {$(INCLUDE)}"\thread\event.hpp"\ + {$(INCLUDE)}"\thread\monitor.hpp"\ + {$(INCLUDE)}"\thread\msgqueue.hpp"\ + {$(INCLUDE)}"\thread\mthread.hpp"\ + {$(INCLUDE)}"\thread\mutex.hpp"\ + {$(INCLUDE)}"\thread\ptcllbck.hpp"\ + {$(INCLUDE)}"\thread\qthread.hpp"\ + {$(INCLUDE)}"\thread\savearea.hpp"\ + {$(INCLUDE)}"\thread\tcallbck.hpp"\ + {$(INCLUDE)}"\thread\tcallbck.tpp"\ + {$(INCLUDE)}"\thread\thmsg.hpp"\ + {$(INCLUDE)}"\thread\thread.hpp"\ + + +"$(INTDIR)\Ftpthrd.obj" : $(SOURCE) $(DEP_CPP_FTPTH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\hostdlg.cpp +DEP_CPP_HOSTD=\ + {$(INCLUDE)}"\.\hostdlg.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\hostdlg.obj" : $(SOURCE) $(DEP_CPP_HOSTD) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Interprt.cpp +DEP_CPP_INTER=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\.\interprt.hpp"\ + {$(INCLUDE)}"\.\logindlg.hpp"\ + {$(INCLUDE)}"\.\resinc.h"\ + {$(INCLUDE)}"\.\resinc.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\puredwrd.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + {$(INCLUDE)}"\display\editwnd.hpp"\ + {$(INCLUDE)}"\display\guibrdr.hpp"\ + {$(INCLUDE)}"\display\guichar.hpp"\ + {$(INCLUDE)}"\display\guiline.hpp"\ + {$(INCLUDE)}"\display\keyctrl.hpp"\ + {$(INCLUDE)}"\display\vcaret.hpp"\ + {$(INCLUDE)}"\display\virtdisp.hpp"\ + {$(INCLUDE)}"\parse\assemble.hpp"\ + {$(INCLUDE)}"\parse\emit.hpp"\ + {$(INCLUDE)}"\parse\parse.hpp"\ + {$(INCLUDE)}"\parse\psymbol.hpp"\ + {$(INCLUDE)}"\parse\scan.hpp"\ + {$(INCLUDE)}"\parse\symbol.hpp"\ + {$(INCLUDE)}"\parse\table.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\thread\monitor.hpp"\ + {$(INCLUDE)}"\thread\mutex.hpp"\ + + +"$(INTDIR)\Interprt.obj" : $(SOURCE) $(DEP_CPP_INTER) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Logindlg.cpp +DEP_CPP_LOGIN=\ + {$(INCLUDE)}"\.\logindlg.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Logindlg.obj" : $(SOURCE) $(DEP_CPP_LOGIN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftp.cpp +DEP_CPP_FTP_C=\ + {$(INCLUDE)}"\.\ftp.hpp"\ + {$(INCLUDE)}"\.\Ftpdata.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\socket\hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Ftp.obj" : $(SOURCE) $(DEP_CPP_FTP_C) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/ftp/Ftplib.dsp b/ftp/Ftplib.dsp new file mode 100644 index 0000000..127ef3f --- /dev/null +++ b/ftp/Ftplib.dsp @@ -0,0 +1,152 @@ +# Microsoft Developer Studio Project File - Name="ftplib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=ftplib - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Ftplib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Ftplib.mak" CFG="ftplib - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ftplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "ftplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "ftplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "ftplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp8 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\ftplib.lib" + +!ENDIF + +# Begin Target + +# Name "ftplib - Win32 Release" +# Name "ftplib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Ftp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Ftpdata.cpp +# End Source File +# Begin Source File + +SOURCE=.\Ftpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\hostdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Interprt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Logindlg.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\ftp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ftpdata.hpp +# End Source File +# Begin Source File + +SOURCE=.\ftpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\hostdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\interprt.hpp +# End Source File +# Begin Source File + +SOURCE=.\logindlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\resinc.h +# End Source File +# Begin Source File + +SOURCE=.\resinc.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ftp/Ftplib.dsw b/ftp/Ftplib.dsw new file mode 100644 index 0000000..94881e7 --- /dev/null +++ b/ftp/Ftplib.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "ftplib"=.\Ftplib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/ftp/Ftplib.mdp b/ftp/Ftplib.mdp new file mode 100644 index 0000000..f3684a3 Binary files /dev/null and b/ftp/Ftplib.mdp differ diff --git a/ftp/Ftplib.plg b/ftp/Ftplib.plg new file mode 100644 index 0000000..036fdc2 --- /dev/null +++ b/ftp/Ftplib.plg @@ -0,0 +1,37 @@ + + +
+

Build Log

+

+--------------------Configuration: ftplib - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\TEMP\RSP131.tmp" with contents +[ +/nologo /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/Ftplib.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\FTP\Ftp.cpp" +"D:\work\FTP\Ftpdata.cpp" +"D:\work\FTP\Ftpthrd.cpp" +"D:\work\FTP\hostdlg.cpp" +"D:\work\FTP\Interprt.cpp" +"D:\work\FTP\Logindlg.cpp" +] +Creating command line "cl.exe @C:\TEMP\RSP131.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\ftplib.lib" .\msvcobj\Ftp.obj .\msvcobj\Ftpdata.obj .\msvcobj\Ftpthrd.obj .\msvcobj\hostdlg.obj .\msvcobj\Interprt.obj .\msvcobj\Logindlg.obj " +

Output Window

+Compiling... +Ftp.cpp +Ftpdata.cpp +Ftpthrd.cpp +hostdlg.cpp +Interprt.cpp +Logindlg.cpp +Creating library... + + + +

Results

+ftplib.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/ftp/HOSTDLG.CPP b/ftp/HOSTDLG.CPP new file mode 100644 index 0000000..2e49b7d --- /dev/null +++ b/ftp/HOSTDLG.CPP @@ -0,0 +1,74 @@ +#include + +BOOL HostDialog::performDialog(void) +{ + DialogTemplate dlgTemplate; + DialogItemTemplate hostEdit; + DialogItemTemplate hostStatic; + DialogItemTemplate connectButton; + DialogItemTemplate cancelButton; + + dlgTemplate.titleText("Connect to Remote Host..."); + dlgTemplate.posRect(Rect(6,15,156,63)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_TABSTOP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_3DLOOK|DS_SETFONT|WS_POPUP); + + hostEdit.className("EDIT"); + hostEdit.titleText(""); + hostEdit.style(WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL); + hostEdit.posRect(Rect(55,11,95,12)); + hostEdit.itemID(RemoteHostID); + + hostStatic.className("STATIC"); + hostStatic.titleText("Remote Host :"); + hostStatic.style(WS_CHILD|WS_VISIBLE); + hostStatic.posRect(Rect(6,12,49,8)); + hostStatic.itemID(-1); + + connectButton.className("BUTTON"); + connectButton.titleText("Connect"); + connectButton.style(BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE); + connectButton.posRect(Rect(35,30,50,14)); + connectButton.itemID(IDOK); + + cancelButton.className("BUTTON"); + cancelButton.titleText("Cancel"); + cancelButton.style(WS_CHILD|WS_VISIBLE); + cancelButton.posRect(Rect(93,30,50,14)); + cancelButton.itemID(IDCANCEL); + + dlgTemplate+=hostEdit; + dlgTemplate+=hostStatic; + dlgTemplate+=connectButton; + dlgTemplate+=cancelButton; + + createDialog(dlgTemplate); + return !mRemoteHost.isNull(); +} + +WORD HostDialog::dlgCommand(DWORD commandID,CallbackData &/*someCallbackData*/) +{ + switch(commandID) + { + case IDOK : + getText(RemoteHostID,mRemoteHost); + if(mRemoteHost.isNull()){::MessageBeep(0);return TRUE;} + break; + case IDCANCEL : + mRemoteHost.reserve(String::MaxString); + break; + } + return FALSE; +} + +BOOL HostDialog::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + if(!remoteHost().isNull())setText(RemoteHostID,mRemoteHost); + setFocus(); + return TRUE; +} + +void HostDialog::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ +} diff --git a/ftp/HOSTDLG.HPP b/ftp/HOSTDLG.HPP new file mode 100644 index 0000000..40cfa47 --- /dev/null +++ b/ftp/HOSTDLG.HPP @@ -0,0 +1,54 @@ +#ifndef _FTP_HOSTDIALOG_HPP_ +#define _FTP_HOSTDIALOG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif + +class HostDialog : public DynamicDialog +{ +public: + HostDialog(void); + virtual ~HostDialog(); + BOOL performDialog(void); + const String &remoteHost(void)const; + void remoteHost(const String &remoteHost); +private: + enum {RemoteHostID=101}; + HostDialog(const HostDialog &someHostDialog); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + + String mRemoteHost; +}; + +inline +HostDialog::HostDialog(void) +{ +} + +inline +HostDialog::HostDialog(const HostDialog &/*loginDialog*/) +{ // private implementation +} + +inline +HostDialog::~HostDialog() +{ +} + +inline +const String &HostDialog::remoteHost(void)const +{ + return mRemoteHost; +} + +inline +void HostDialog::remoteHost(const String &remoteHost) +{ + mRemoteHost=remoteHost; +} +#endif diff --git a/ftp/INTERPRT.CPP b/ftp/INTERPRT.CPP new file mode 100644 index 0000000..402e7e3 --- /dev/null +++ b/ftp/INTERPRT.CPP @@ -0,0 +1,463 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FTPInterpreter::FTPInterpreter(void) +: mlpEditMonitor(0), mNotConnected("Not connected."), mNotLoggedIn("Not logged in.") +{ + symbolLoad(); +} + +void FTPInterpreter::setText(Block &messageStrings) +{ + for(short itemIndex=0;itemIndex nameStrings; + + if(!isConnected()){setText(mNotConnected);return;} + if(!isLoggedIn()){setText(mNotLoggedIn);return;} + if(!port(ftpData))return; + if(!nameList(paramString,FALSE))return; + if(!ftpData.accept())return; + while(ftpData.receive(lineString))nameStrings.insert(&lineString); + ftpData.destroy(); + if(receive(lineString))setText(lineString); + for(DWORD itemIndex=0;itemIndex nameStrings; + + if(!isConnected()){setText(mNotConnected);return;} + if(!isLoggedIn()){setText(mNotLoggedIn);return;} + if(!port(ftpData))return; + if(!nameList(paramString,FALSE))return; + if(!ftpData.accept())return; + while(ftpData.receive(lineString))nameStrings.insert(&lineString); + ftpData.destroy(); + if(receive(lineString))setText(lineString); + for(DWORD itemIndex=0;itemIndex &lineStrings) +{ + setText(lineStrings); +} diff --git a/ftp/INTERPRT.HPP b/ftp/INTERPRT.HPP new file mode 100644 index 0000000..efde9c5 --- /dev/null +++ b/ftp/INTERPRT.HPP @@ -0,0 +1,116 @@ +#ifndef _FTP_INTERPRETER_HPP_ +#define _FTP_INTERPRETER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _DISPLAY_EDITWINDOW_HPP_ +#include +#endif +#ifndef _PARSE_TABLE_HPP_ +#include +#endif +#ifndef _PARSE_SCAN_HPP_ +#include +#endif +#ifndef _PARSE_PARSE_HPP_ +#include +#endif +#ifndef _PARSE_ASSEMBLER_HPP_ +#include +#endif +#ifndef _FTP_FTPCLIENT_HPP_ +#include +#endif +#ifndef _FTP_RESINC_HPP_ +#include +#endif +#ifndef _THREAD_MONITOR_HPP_ +#include +#endif + +class FTPInterpreter : private FTPClient, private Assembler +{ +public: + FTPInterpreter(void); + virtual ~FTPInterpreter(); + void interpretFile(const String &pathFileName); + void interpretLine(const String &lineString); + void setDisplay(Monitor &editMonitor); +protected: + virtual void message(const String &lineString); + virtual void message(Block &lineStrings); +private: + void setText(const String &lineString); + void setText(Block &lineStrings); + void symbolLoad(void); + void interpret(FileMap &srcMap); + void appendHandler(const String &localPathFileName,const String &remotePathFileName); + void remotehelpHandler(const String &remoteHelpTopic); + void literalHandler(const String &literalString); + void mdeleteHandler(const String ¶mString); + void deleteHandler(const String &pathFileName); + void openHandler(const String &hostName); + void openHandler(const String &hostName,const String &userName,const String &password); + void dirHandler(const String ¶mString); + void lsHandler(const String ¶mString); + void mdirHandler(const String &pathDirectory); + void putHandler(const String &pathFileName); + void sendHandler(const String &pathFileName); + void typeHandler(const String ¶mString); + void getHandler(const String &pathFileName); + void mgetHandler(const String ¶mString); + void mkdirHandler(const String &pathDirectory); + void mlsHandler(const String &pathDirectory); + void quoteHandler(const String &commandString); + void recvHandler(const String &pathFileName); + void userHandler(const String &userInfo); + void cdHandler(const String &pathDirectory); + void mputHandler(const String &pathFileName); + void renameHandler(const String &oldPathFileName,const String &newPathFileName); + void lcdHandler(const String &pathDirectory); + void rmdirHandler(const String &pathDirectory); + void disconnectHandler(void); + void asciiHandler(void); + void debugHandler(void); + void promptHandler(void); + void pwdHandler(void); + void quitHandler(void); + void statusHandler(void); + void traceHandler(void); + void bellHandler(void); + void binaryHandler(void); + void byeHandler(void); + void globHandler(void); + void hashHandler(void); + void verboseHandler(void); + void helpHandler(void); + void closeHandler(void); + String mNotConnected; + String mNotLoggedIn; + Monitor *mlpEditMonitor; + Table mSymbolTable; +}; + +inline +FTPInterpreter::~FTPInterpreter() +{ +} + +inline +void FTPInterpreter::setDisplay(Monitor &editMonitor) +{ + mlpEditMonitor=&editMonitor; + mlpEditMonitor->enter(); + (*mlpEditMonitor)->setText(STRING_VERSIONMSG); + mlpEditMonitor->leave(); +} + +inline +void FTPInterpreter::setText(const String &lineString) +{ + if(!mlpEditMonitor)return; + mlpEditMonitor->enter(); + (*mlpEditMonitor)->setText(lineString); + mlpEditMonitor->leave(); +} +#endif diff --git a/ftp/LOGINDLG.CPP b/ftp/LOGINDLG.CPP new file mode 100644 index 0000000..a0c1327 --- /dev/null +++ b/ftp/LOGINDLG.CPP @@ -0,0 +1,78 @@ +#include + +WORD LoginDialog::performLogin(void) +{ + DialogTemplate dlgTemplate; + DialogItemTemplate userEdit; + DialogItemTemplate passEdit; + DialogItemTemplate userStatic; + DialogItemTemplate passStatic; + + dlgTemplate.titleText("Login to host..."); + dlgTemplate.posRect(Rect(8,19,197,76)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_TABSTOP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_3DLOOK|DS_SETFONT|WS_POPUP); + + userEdit.className("EDIT"); + userEdit.titleText(""); + userEdit.style(WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL); + userEdit.posRect(Rect(56,19,98,12)); + userEdit.itemID(UserNameID); + + passEdit.className("EDIT"); + passEdit.style(WS_BORDER|WS_TABSTOP|ES_PASSWORD|WS_CHILD|WS_VISIBLE); + passEdit.posRect(Rect(56,35,98,12)); + passEdit.itemID(PasswordID); + + userStatic.className("STATIC"); + userStatic.titleText("User Name :"); + userStatic.style(WS_CHILD|WS_VISIBLE); + userStatic.posRect(Rect(2,20,39,8)); + userStatic.itemID(-1); + + passStatic.className("STATIC"); + passStatic.titleText("Password :"); + passStatic.style(WS_CHILD|WS_VISIBLE); + passStatic.posRect(Rect(2,36,39,8)); + passStatic.itemID(-1); + + dlgTemplate+=userEdit; + dlgTemplate+=passEdit; + dlgTemplate+=userStatic; + dlgTemplate+=passStatic; + + createDialog(::GetTopWindow((HWND)0),dlgTemplate); + if(userName().isNull()&&password().isNull())return FALSE; + return TRUE; +} + +WORD LoginDialog::dlgCommand(DWORD commandID,CallbackData &/*someCallbackData*/) +{ + switch(commandID) + { + case IDOK : + getText(UserNameID,mUserName); + getText(PasswordID,mPassword); + if(mUserName.isNull()||mPassword.isNull()){::MessageBeep(0);return TRUE;} + break; + case IDCANCEL : + mUserName.reserve(String::MaxString); + mPassword.reserve(String::MaxString); + break; + } + return FALSE; +} + +BOOL LoginDialog::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + if(!userName().isNull())setText(UserNameID,userName()); + if(!password().isNull())setText(PasswordID,password()); + setFocus(); + return TRUE; +} + +void LoginDialog::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ +} + diff --git a/ftp/LOGINDLG.HPP b/ftp/LOGINDLG.HPP new file mode 100644 index 0000000..5d375c7 --- /dev/null +++ b/ftp/LOGINDLG.HPP @@ -0,0 +1,69 @@ +#ifndef _FTP_LOGINDIALOG_HPP_ +#define _FTP_LOGINDIALOG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif + +class LoginDialog : public DynamicDialog +{ +public: + LoginDialog(void); + virtual ~LoginDialog(); + WORD performLogin(void); + String userName(void)const; + void userName(const String &userName); + String password(void)const; + void password(const String &password); +private: + enum {UserNameID=101,PasswordID=102}; + LoginDialog(const LoginDialog &loginDialog); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + String mUserName; + String mPassword; +}; + +inline +LoginDialog::LoginDialog(void) +{ +} + +inline +LoginDialog::LoginDialog(const LoginDialog &/*loginDialog*/) +{ +} + +inline +LoginDialog::~LoginDialog() +{ +} + +inline +String LoginDialog::userName(void)const +{ + return mUserName; +} + +inline +void LoginDialog::userName(const String &userName) +{ + mUserName=userName; +} + +inline +String LoginDialog::password(void)const +{ + return mPassword; +} + +inline +void LoginDialog::password(const String &password) +{ + mPassword=password; +} +#endif + diff --git a/ftp/MAIN.CPP b/ftp/MAIN.CPP new file mode 100644 index 0000000..019c8d3 --- /dev/null +++ b/ftp/MAIN.CPP @@ -0,0 +1,27 @@ +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + if(Main::previousProcessInstance()) + { + HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); + if(!hWnd) + { + ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); + return FALSE; + } + ::PostMessage(hWnd,WM_REACTIVATE,0,0L); + return FALSE; + } + MainWindow applicationWindow(Main::processInstance()); + return applicationWindow.messageLoop(); +} diff --git a/ftp/MAIN.HPP b/ftp/MAIN.HPP new file mode 100644 index 0000000..ee521ee --- /dev/null +++ b/ftp/MAIN.HPP @@ -0,0 +1,68 @@ +#ifndef _FTP_MAIN_HPP_ +#define _FTP_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/ftp/MAINWND.CPP b/ftp/MAINWND.CPP new file mode 100644 index 0000000..694ae51 --- /dev/null +++ b/ftp/MAINWND.CPP @@ -0,0 +1,240 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +char MainWindow::szClassName[]="FTP Interpreter v2.01"; +char MainWindow::szMenuName[]="FTP"; + +MainWindow::MainWindow(HINSTANCE hInstance) +: mhInstance(hInstance), mlpEditWindow(0) +{ + mPaintHandler.setCallback(this,&MainWindow::paintHandler); + mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); + mCommandHandler.setCallback(this,&MainWindow::commandHandler); + mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler); + mSizeHandler.setCallback(this,&MainWindow::sizeHandler); + mCreateHandler.setCallback(this,&MainWindow::createHandler); + mTimerHandler.setCallback(this,&MainWindow::timerHandler); + mSetFocusHandler.setCallback(this,&MainWindow::setFocusHandler); + mLineHandler.setCallback(this,&MainWindow::lineHandler); + mCompletionHandler.setCallback(this,&MainWindow::completionHandler); + mFTPThread.setCompletionHandler(&mCompletionHandler); + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,mhInstance,(LPSTR)this); + show(SW_SHOW); + update(); + Rect editRect; + editRect.right(width()); + editRect.bottom(height()); + KeyControl keyControl; + keyControl.canScroll(TRUE); + mlpEditWindow=new EditWindow(*this,editRect); + mEditMonitor=mlpEditWindow; + mEditMonitor.enter(); + mlpEditWindow->setFont(Font("MS LineDraw",12,Font::PitchFixed|Font::WeightBold)); + mEditMonitor->setKeyControl(keyControl); + mEditMonitor->setLineHandler(&mLineHandler); + processCommandLine(); + mEditMonitor.leave(); +} + +MainWindow::~MainWindow() +{ + mFTPThread.stop(); + if(mlpEditWindow){delete mlpEditWindow;mlpEditWindow=0;} + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + if(mlpEditWindow) + { + mEditMonitor.enter(); + ::MoveWindow((HWND)*((EditWindow*)mEditMonitor),0,0,width(),height(),TRUE); + mEditMonitor.leave(); + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case CM_EXIT : + postMessage(*this,WM_CLOSE,0,0L); + break; + case CM_REMOTEHOST : + handleRemoteHost(); + break; + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + setTimer(TimerID,250); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + killTimer(TimerID); + + mEditMonitor.enter(); + mEditMonitor->setFocus(); + mEditMonitor->setText(mWSASystem.description()); + mEditMonitor->setText(mWSASystem.systemStatus()); + mFTPThread.setDisplay(mEditMonitor); + mEditMonitor->setFocus(); + mEditMonitor.leave(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::lineHandler(CallbackData &/*someCallbackData*/) +{ + String lineString; + + mEditMonitor.enter(); + mEditMonitor->getText(lineString,mlpEditWindow->currentLine()-1); + mEditMonitor.leave(); + lineString.trimRight(); + if(lineString==String("quit"))postMessage(*this,WM_CLOSE,0,0L); + mFTPThread.interpretLine(lineString); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(mlpEditWindow) + { + mEditMonitor.enter(); + mEditMonitor->setFocus(); + mEditMonitor.leave(); + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::completionHandler(CallbackData &someCallbackData) +{ + switch((FTPThread::CompletionCode)someCallbackData.lParam()) + { + case FTPThread::LineComplete : + mEditMonitor.enter(); + mEditMonitor->setText(">>Ready."); + mEditMonitor.leave(); + break; + case FTPThread::FileComplete : + postMessage(*this,WM_CLOSE,0,0L); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void MainWindow::processCommandLine(void) +{ + String commandLine(::GetCommandLine()); + + commandLine=commandLine.betweenString(' ',0); + if(commandLine.isNull())return; + FileHandle cmdFile(commandLine,FileHandle::Read,FileHandle::ShareRead); + if(!cmdFile.isOkay()){mFTPThread.interpretLine(commandLine);return;} + cmdFile.close(); + mFTPThread.interpretFile(commandLine); +} + +void MainWindow::message(const String &messageString) +{ + mEditMonitor.enter(); + mEditMonitor->setText(messageString); + mEditMonitor.leave(); +} + +void MainWindow::message(Block &messageStrings) +{ + for(short itemIndex=0;itemIndexsetText(messageStrings[itemIndex]); + mEditMonitor.leave(); + } +} + +void MainWindow::handleRemoteHost(void) +{ + HostDialog hostDialog; + + if(!hostDialog.performDialog())return; + mFTPThread.interpretLine(String("open ")+hostDialog.remoteHost()); +} diff --git a/ftp/MAINWND.HPP b/ftp/MAINWND.HPP new file mode 100644 index 0000000..e9c5569 --- /dev/null +++ b/ftp/MAINWND.HPP @@ -0,0 +1,67 @@ +#ifndef _FTP_MAINWINDOW_HPP_ +#define _FTP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _FTP_FTPTHREAD_HPP_ +#include +#endif + +class EditWindow; +template +class Monitor; + +class MainWindow : public Window +{ +public: + MainWindow(HINSTANCE hInstance); + virtual ~MainWindow(); + static String className(void); +private: + enum{TimerID=0}; + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void processCommandLine(void); + void handleRemoteHost(void); + void message(const String &messageString); + void message(Block &messageStrings); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType completionHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mLineHandler; + Callback mTimerHandler; + Callback mSetFocusHandler; + Callback mCompletionHandler; + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + EditWindow *mlpEditWindow; + Monitor mEditMonitor; + FTPThread mFTPThread; + WSASystem mWSASystem; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif diff --git a/ftp/RESINC.H b/ftp/RESINC.H new file mode 100644 index 0000000..6c21458 --- /dev/null +++ b/ftp/RESINC.H @@ -0,0 +1,8 @@ + +// menu definitions +#define IDC_EDIT1 101 +#define CM_EXIT 101 +#define CM_REMOTEHOST 0 + +// stringtable definitions +#define STRING_VERSIONMSG 100 diff --git a/ftp/RESINC.HPP b/ftp/RESINC.HPP new file mode 100644 index 0000000..c4291ff --- /dev/null +++ b/ftp/RESINC.HPP @@ -0,0 +1,4 @@ +#ifndef _FTP_RESINC_HPP_ +#define _FTP_RESINC_HPP_ +#include +#endif \ No newline at end of file diff --git a/ftp/STDTMPL.CPP b/ftp/STDTMPL.CPP new file mode 100644 index 0000000..5dbf9c2 --- /dev/null +++ b/ftp/STDTMPL.CPP @@ -0,0 +1,22 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef Callback b; +typedef GlobalData c; +typedef Block e; +#endif + diff --git a/ftp/Scraps.txt b/ftp/Scraps.txt new file mode 100644 index 0000000..b975e29 --- /dev/null +++ b/ftp/Scraps.txt @@ -0,0 +1,83 @@ +// *********************** +WORD FTPClient::retrieveBlock(const String &controlData,Block &stringBlock) +{ + String responseLine; + DWORD responseLines(0); + + stringBlock.remove(); + if(!isConnected())return FALSE; + if(!putControlData(controlData,FALSE))return FALSE; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + if(nackResponse.size()&&isInResponse(responseString,nackResponse))break; + if(ackResponse.size()&&isInResponse(responseString,ackResponse))continue; + } + stringBlock.insert(&responseLine); + } + return (stringBlock.size()?TRUE:FALSE); +} +// ************* + + + (*mlpEditMonitor)->setText("FTP Interpreter v1.00 Copyright(c) 1996 Sean M. Kessler"); + + + + +//CONNECT DIALOG 6, 15, 156, 63 +//STYLE DS_ABSALIGN | DS_SYSMODAL | DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +//CAPTION "Connect to Remote Host" +//FONT 8, "MS Sans Serif" +//{ +// LTEXT "Remote Host:", -1, 6, 12, 49, 8 +// EDITTEXT IDC_EDIT1, 54, 11, 95, 12 +// DEFPUSHBUTTON "Connect", IDOK, 35, 30, 50, 14 +// PUSHBUTTON "Cancel", IDCANCEL, 93, 30, 50, 14 +//} + + + +CONNECT DIALOG 6, 15, 156, 63 +STYLE DS_ABSALIGN | DS_SYSMODAL | DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Connect to Remote Host" +FONT 8, "MS Sans Serif" +{ + LTEXT "Remote Host:", -1, 6, 12, 49, 8 + EDITTEXT IDC_EDIT1, 54, 11, 95, 12 + DEFPUSHBUTTON "Connect", IDOK, 35, 30, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 93, 30, 50, 14 +} + + + +//#ifndef _DISPLAY_EDITWINDOW_HPP_ +//#include +//#endif +//#ifndef _THREAD_MONITOR_HPP_ +//#include +//#endif + + +//#ifndef _FTP_INTERPRETER_HPP_ +//#include +//#endif +//#ifndef _FTP_FTPCLIENT_HPP_ +//#include +//#endif + + +#ifndef _COMMON_POINT_HPP_ +#include +#endif + + +void MainWindow::message(const String &messageString) +{ +// mEditMonitor.enter(); + mlpEditWindow->setText(messageString); +// mEditMonitor.leave(); +} diff --git a/ftp/ftp.001 b/ftp/ftp.001 new file mode 100644 index 0000000..ac669fb --- /dev/null +++ b/ftp/ftp.001 @@ -0,0 +1,205 @@ +# Microsoft Developer Studio Project File - Name="ftp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=ftp - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "ftp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "ftp.mak" CFG="ftp - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ftp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "ftp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "ftp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\ftp.exe" +# SUBTRACT LINK32 /nodefaultlib + +!ENDIF + +# Begin Target + +# Name "ftp - Win32 Release" +# Name "ftp - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Ftp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Ftp.rc +# End Source File +# Begin Source File + +SOURCE=.\Ftpdata.cpp +# End Source File +# Begin Source File + +SOURCE=.\ftpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\hostdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Interprt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Logindlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msdialog.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msdisp.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msparse.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\mssocket.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\msthread.lib +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Ftp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ftpdata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ftpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hostdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Interprt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Logindlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resinc.h +# End Source File +# Begin Source File + +SOURCE=.\Resinc.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ftp/ftp.dsp b/ftp/ftp.dsp new file mode 100644 index 0000000..f544b0b --- /dev/null +++ b/ftp/ftp.dsp @@ -0,0 +1,182 @@ +# Microsoft Developer Studio Project File - Name="ftp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=ftp - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "ftp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "ftp.mak" CFG="ftp - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ftp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "ftp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "ftp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "ftp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp8 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\ftp.exe" +# SUBTRACT LINK32 /nodefaultlib + +!ENDIF + +# Begin Target + +# Name "ftp - Win32 Release" +# Name "ftp - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Ftp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Ftp.rc +# End Source File +# Begin Source File + +SOURCE=.\Ftpdata.cpp +# End Source File +# Begin Source File + +SOURCE=.\ftpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\hostdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Interprt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Logindlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Ftp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ftpdata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ftpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hostdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Interprt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Logindlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resinc.h +# End Source File +# Begin Source File + +SOURCE=.\Resinc.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/ftp/ftp.dsw b/ftp/ftp.dsw new file mode 100644 index 0000000..d1b375d --- /dev/null +++ b/ftp/ftp.dsw @@ -0,0 +1,119 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dialog"=..\DIALOG\Dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "display"=..\DISPLAY\display.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "ftp"=.\ftp.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name dialog + End Project Dependency + Begin Project Dependency + Project_Dep_Name display + End Project Dependency + Begin Project Dependency + Project_Dep_Name socket + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name parse + End Project Dependency +}}} + +############################################################################### + +Project: "parse"=..\PARSE\Parse.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "socket"=..\SOCKET\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\THREAD\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/getpage/ENTRY.HPP b/getpage/ENTRY.HPP new file mode 100644 index 0000000..8e925ad --- /dev/null +++ b/getpage/ENTRY.HPP @@ -0,0 +1,99 @@ +#ifndef _HTTP_ENTRYITEM_HPP_ +#define _HTTP_ENTRYITEM_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class EntryItem +{ +public: + EntryItem(void); + EntryItem(const EntryItem &entryItem); + EntryItem(const String &hostName,const String &pageName,const String &saveAs); + EntryItem &operator=(const EntryItem &entryItem); + BOOL operator==(const EntryItem &entryItem)const; + const String &hostName(void)const; + void hostName(const String &hostName); + const String &pageName(void)const; + void pageName(const String &pageName); + const String &saveAs(void)const; + void saveAs(const String &saveAs); +private: + String mHostName; + String mPageName; + String mSaveAs; +}; + +inline +EntryItem::EntryItem(void) +{ +} + +inline +EntryItem::EntryItem(const EntryItem &entryItem) +: mHostName(entryItem.hostName()), mPageName(entryItem.pageName()), mSaveAs(entryItem.saveAs()) +{ +} + +inline +EntryItem::EntryItem(const String &hostName,const String &pageName,const String &saveAs) +: mHostName(hostName), mPageName(pageName), mSaveAs(saveAs) +{ +} + +inline +EntryItem &EntryItem::operator=(const EntryItem &entryItem) +{ + hostName(entryItem.hostName()); + pageName(entryItem.pageName()); + saveAs(entryItem.saveAs()); + return *this; +} + +inline +BOOL EntryItem::operator==(const EntryItem &entryItem)const +{ + return (hostName()==entryItem.hostName()&& + pageName()==entryItem.pageName()&& + saveAs()==entryItem.saveAs()); +} + +inline +const String &EntryItem::hostName(void)const +{ + return mHostName; +} + +inline +void EntryItem::hostName(const String &hostName) +{ + mHostName=hostName; +} + +inline +const String &EntryItem::pageName(void)const +{ + return mPageName; +} + +inline +void EntryItem::pageName(const String &pageName) +{ + mPageName=pageName; +} + +inline +const String &EntryItem::saveAs(void)const +{ + return mSaveAs; +} + +inline +void EntryItem::saveAs(const String &saveAs) +{ + mSaveAs=saveAs; +} +#endif diff --git a/getpage/getpage.dsp b/getpage/getpage.dsp new file mode 100644 index 0000000..1becd5e --- /dev/null +++ b/getpage/getpage.dsp @@ -0,0 +1,108 @@ +# Microsoft Developer Studio Project File - Name="getpage" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=getpage - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "getpage.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "getpage.mak" CFG="getpage - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "getpage - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "getpage - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "getpage - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "getpage - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS.STRICT" /D "__FLAT__" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "getpage - Win32 Release" +# Name "getpage - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\mainpage.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/getpage/getpage.dsw b/getpage/getpage.dsw new file mode 100644 index 0000000..3824531 --- /dev/null +++ b/getpage/getpage.dsw @@ -0,0 +1,74 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "fileio"=..\fileio\fileio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "getpage"=.\getpage.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name fileio + End Project Dependency + Begin Project Dependency + Project_Dep_Name socket + End Project Dependency +}}} + +############################################################################### + +Project: "socket"=..\socket\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/getpage/getpage.ncb b/getpage/getpage.ncb new file mode 100644 index 0000000..a2de9c3 Binary files /dev/null and b/getpage/getpage.ncb differ diff --git a/getpage/getpage.opt b/getpage/getpage.opt new file mode 100644 index 0000000..e3a1718 Binary files /dev/null and b/getpage/getpage.opt differ diff --git a/getpage/getpage.plg b/getpage/getpage.plg new file mode 100644 index 0000000..0241de2 --- /dev/null +++ b/getpage/getpage.plg @@ -0,0 +1,36 @@ + + +
+

Build Log

+

+--------------------Configuration: getpage - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSPC.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS.STRICT" /D "__FLAT__" /Fo"msvcobj/" /Fd"msvcobj/" /FD /GZ /c +"D:\work\getpage\mainpage.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSPC.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSPD.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:console /incremental:yes /pdb:"msvcobj/getpage.pdb" /debug /machine:I386 /out:"msvcobj/getpage.exe" /pdbtype:sept +.\msvcobj\mainpage.obj +\work\exe\mscommon.lib +\work\exe\msfileio.lib +\work\exe\mssocket.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSPD.tmp" +

Output Window

+Compiling... +mainpage.cpp +Linking... +LINK : LNK6004: msvcobj/getpage.exe not found or not built by the last incremental link; performing full link + + + +

Results

+getpage.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/getpage/jazz001.mid b/getpage/jazz001.mid new file mode 100644 index 0000000..4e875cd --- /dev/null +++ b/getpage/jazz001.mid @@ -0,0 +1,7 @@ + + +302 Found + +

Found

+The document has moved here.

+ diff --git a/getpage/mainpage.cpp b/getpage/mainpage.cpp new file mode 100644 index 0000000..ebe2468 --- /dev/null +++ b/getpage/mainpage.cpp @@ -0,0 +1,262 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +WORD open(const String &hostName,const String &nameFile); +WORD open(const String &hostName,const String &nameString,const String &saveAs); +WORD makeFileName(String &pathFileName); +BOOL getEntryItems(const String &pathFileName,Block &entryItems); +void replaceSpace(String &string); + +class Console +{ +public: + Console(); + void writeLine(const String &string); + void read(); +}; + +Console::Console() +{ +} + +void Console::writeLine(const String &string) +{ + printf("%s\n",string.str()); +} + +void Console::read() +{ + char buffer[32]; + sscanf("%s",buffer); +} + +Console winConsole; + + +// for when i do a post request +//POST /cgi-bin/phone_book.cgi HTTP/1.0 +// +//Referer: http://www.somedomain.com/Direcory/file.html +// +//User-Agent: Mozilla/1.22 (Windows: I: 32bit) +// +//Accept */* +// +//Content-type: application/x-www-form-urlencoded +// +//Content-length: 29 +// +// +// +//name=Selena+Sol&phone=7700404 +// +// + + + +int main(int argc,char **argv) +{ + String pathFileName(argv[1]); + Block entryItems; + + if(pathFileName.isNull()) + { + winConsole.writeLine("GETPAGE "); + winConsole.writeLine("Input file is a text file that contains entries in the following format..."); + winConsole.writeLine(" "); + winConsole.writeLine("for example..."); + winConsole.writeLine("\"www.developer.com\" \"http://www.developer.com/reference/foo.htm\" \"c:\\developer\\docs\\foo.html\""); + winConsole.writeLine("a '#' character located in the first position of any line indicates a comment, the line is ignored."); + winConsole.writeLine("Press ENTER to exit."); + winConsole.read(); + return FALSE; + } + if(!getEntryItems(pathFileName,entryItems)) + { + winConsole.writeLine("Failed to read input file"); + winConsole.writeLine("Press ENTER to exit"); + winConsole.read(); + return FALSE; + } + for(int itemIndex=0;itemIndex receiveStrings; + httpControl.receivePage(receiveStrings); + for(int index=0;index=(char*)tempString)ptr--; + pathFileName=(++ptr); + return TRUE; +} + +BOOL getEntryItems(const String &pathFileName,Block &entryItems) +{ + File inFile; + String strLine; + + entryItems.remove(); + inFile.open(pathFileName,"rb"); + if(!inFile.isOkay())return FALSE; + strLine.reserve(512); + while(inFile.readLine(strLine)) + { + if('#'==*(char*)strLine)continue; + String host=strLine.betweenString('\"','\"'); + host=host.trimLeft().trimRight(); + String page=strLine.betweenString('\"',0).betweenString('\"',0).betweenString('\"','\"'); + replaceSpace(page); + page=page.trimLeft().trimRight(); + String saveAs=strLine.betweenString('\"',0).betweenString('\"',0).betweenString('\"',0).betweenString('\"',0).betweenString('\"','\"'); + saveAs=saveAs.trimLeft().trimRight(); + entryItems.insert(&EntryItem(host,page,saveAs)); + } + return entryItems.size()?TRUE:FALSE; +} + +void replaceSpace(String &string) +{ + int position; + String replace="%20"; + while(-1!=(position=string.strchr(' '))) + { + String tmp=string.substr(0,position-1); + String tmp2=string.substr(position+1,string.length()); + winConsole.writeLine(String("'")+tmp+String("'")); + winConsole.writeLine(String("'")+tmp2+String("'")); + string=tmp+replace+tmp2; + winConsole.writeLine(String("'")+string+String("'")); + } +} diff --git a/gif/GIF.CPP b/gif/GIF.CPP new file mode 100644 index 0000000..8516747 --- /dev/null +++ b/gif/GIF.CPP @@ -0,0 +1,151 @@ +#include + +GIFDecoder::GIFDecoder(void) +: mhGlobalPalette(0), mlpPaletteData(0), mColors(0), mIsInterlaced(0), mBufferCount(0) +{ +} + +GIFDecoder::~GIFDecoder() +{ + if(mhGlobalPalette) + { + ::GlobalUnlock(mhGlobalPalette); + ::GlobalFree(mhGlobalPalette); + } +} + +WORD GIFDecoder::unpackImage(const char *pathFileName) +{ + int i; + int hasProcessed; + + hasProcessed=FALSE; + open(pathFileName); + if(!isOpen())return FALSE; + if(!getChar())return FALSE; + if('G'!=currentChar())return FALSE; + for(i=0;i<5;i++)if(!getChar())return FALSE; + if(!getWord())return FALSE; + mScreenWidth=currentWord(); + if(!getWord())return FALSE; + mScreenHeight=currentWord(); + if(!getChar())return FALSE; + mGlobalFlagByte=currentChar(); + mColors=1<<((mGlobalFlagByte&0x07)+1); + if(!getChar())return FALSE; + mBackgroundColor=currentChar(); + if(!getChar())return FALSE; +// if(currentChar())return FALSE; + if(mGlobalFlagByte&0x80) + { + if(!readPaletteData())return FALSE; + paletteHandler(mlpPaletteData,mColors); + } + while(TRUE) + { + if(!getChar())break; + switch(currentChar()) + { + case '!' : // extension folows + while(getChar() && currentChar()!=','); + if(currentChar()!=',')break; + case ',' : // image follows + if(hasProcessed)break; + hasProcessed=TRUE; + if(!processImage())return FALSE; + break; + case ';' : // file is completely processed + continue; + default : + return FALSE; + } + } + closeFile(); + return TRUE; +} + +WORD GIFDecoder::processImage(void) +{ + UCHAR localFlagByte; + + if(!getWord())return FALSE; + mImageStartLeft=currentWord(); + if(!getWord())return FALSE; + mImageStartTop=currentWord(); + if(!getWord())return FALSE; + mImageWide=currentWord(); + if(!getWord())return FALSE; + mImageDeep=currentWord(); + if(!getChar())return FALSE; + localFlagByte=currentChar(); + mIsInterlaced=localFlagByte&0x40; + mPixelSize=(mGlobalFlagByte&0x07)+1; + if(localFlagByte&0x80) + { + mPixelSize=(localFlagByte&0x07)+1; + mColors=1<<((localFlagByte&0x07)+1); + if(!readPaletteData())return FALSE; + paletteHandler(mlpPaletteData,mColors); + } + attributeHandler(mImageWide,mImageDeep,mPixelSize); + backgroundHandler(mBackgroundColor); + mBufferCount=0; + if(!getChar())return FALSE; + unpackData(mImageWide,mImageDeep,mIsInterlaced,mPixelSize); + imageHandler(); + return TRUE; +} + +WORD GIFDecoder::readPaletteData(void) +{ + if(mhGlobalPalette) + { + ::GlobalUnlock(mhGlobalPalette); + ::GlobalFree(mhGlobalPalette); + } + mhGlobalPalette=::GlobalAlloc(GMEM_FIXED,mColors*3); + if(!mhGlobalPalette)return FALSE; + mlpPaletteData=(UCHAR FAR *)::GlobalLock(mhGlobalPalette); + for(int i=0;i +#endif +#ifndef _LZWDECOMPRESSION_HPP_ +#include +#endif + +#ifdef _EXPAND_GIFDECODER_TEMPLATES_ +#pragma option -Jgd +#endif + +class GIFDecoder : public LZWDecompression +{ +public: + GIFDecoder(void); + virtual ~GIFDecoder(); + WORD unpackImage(const char *pathFileName); + virtual void paletteHandler(const UCHAR FAR *lpPaletteData,USHORT numColors); + virtual void attributeHandler(USHORT imageWide,USHORT imageDeep,USHORT pixelSize); + virtual void backgroundHandler(USHORT backgroundColor); + virtual void imageHandler(void); + virtual void showHandler(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation); + virtual void errorHandler(const char FAR *message); +private: + void showHandler(UCHAR FAR *lpOutRow,USHORT yLocation); + WORD processImage(void); + WORD readPaletteData(void); + + HGLOBAL mhGlobalPalette; + UCHAR FAR *mlpPaletteData; + USHORT mScreenWidth; + USHORT mScreenHeight; + UCHAR mGlobalFlagByte; + USHORT mColors; + USHORT mBackgroundColor; + USHORT mImageStartLeft; + USHORT mImageStartTop; + USHORT mImageWide; + USHORT mImageDeep; + USHORT mIsInterlaced; + USHORT mBufferCount; + USHORT mPixelSize; +}; +#endif diff --git a/gif/GIF.MAK b/gif/GIF.MAK new file mode 100644 index 0000000..6ca0771 --- /dev/null +++ b/gif/GIF.MAK @@ -0,0 +1,274 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=gif - Win32 Debug +!MESSAGE No configuration specified. Defaulting to gif - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "gif - Win32 Release" && "$(CFG)" != "gif - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gif.mak" CFG="gif - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gif - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "gif - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "gif - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "gif - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\gif.lib" + +CLEAN : + -@erase "$(INTDIR)\Gif.obj" + -@erase "$(INTDIR)\Gifbmp.obj" + -@erase "$(INTDIR)\Istream.obj" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "$(OUTDIR)\gif.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/gif.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/gif.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/gif.lib" +LIB32_OBJS= \ + "$(INTDIR)\Gif.obj" \ + "$(INTDIR)\Gifbmp.obj" \ + "$(INTDIR)\Istream.obj" \ + "$(INTDIR)\Lzw.obj" + +"$(OUTDIR)\gif.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "gif - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msgif.lib" + +CLEAN : + -@erase "$(INTDIR)\Gif.obj" + -@erase "$(INTDIR)\Gifbmp.obj" + -@erase "$(INTDIR)\Istream.obj" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "..\exe\msgif.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/gif.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/gif.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msgif.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msgif.lib" +LIB32_OBJS= \ + "$(INTDIR)\Gif.obj" \ + "$(INTDIR)\Gifbmp.obj" \ + "$(INTDIR)\Istream.obj" \ + "$(INTDIR)\Lzw.obj" + +"..\exe\msgif.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "gif - Win32 Release" +# Name "gif - Win32 Debug" + +!IF "$(CFG)" == "gif - Win32 Release" + +!ELSEIF "$(CFG)" == "gif - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Lzw.cpp +DEP_CPP_LZW_C=\ + {$(INCLUDE)}"\.\istream.hpp"\ + {$(INCLUDE)}"\.\lzw.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sys\stat.h"\ + {$(INCLUDE)}"\sys\types.h"\ + + +"$(INTDIR)\Lzw.obj" : $(SOURCE) $(DEP_CPP_LZW_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Gifbmp.cpp +DEP_CPP_GIFBM=\ + {$(INCLUDE)}"\.\gif.hpp"\ + {$(INCLUDE)}"\.\gifbmp.hpp"\ + {$(INCLUDE)}"\.\istream.hpp"\ + {$(INCLUDE)}"\.\lzw.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sys\stat.h"\ + {$(INCLUDE)}"\sys\types.h"\ + + +"$(INTDIR)\Gifbmp.obj" : $(SOURCE) $(DEP_CPP_GIFBM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Istream.cpp +DEP_CPP_ISTRE=\ + {$(INCLUDE)}"\.\istream.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sys\stat.h"\ + {$(INCLUDE)}"\sys\types.h"\ + + +"$(INTDIR)\Istream.obj" : $(SOURCE) $(DEP_CPP_ISTRE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Gif.cpp +DEP_CPP_GIF_C=\ + {$(INCLUDE)}"\.\gif.hpp"\ + {$(INCLUDE)}"\.\istream.hpp"\ + {$(INCLUDE)}"\.\lzw.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sys\stat.h"\ + {$(INCLUDE)}"\sys\types.h"\ + + +"$(INTDIR)\Gif.obj" : $(SOURCE) $(DEP_CPP_GIF_C) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/gif/GIF.MDP b/gif/GIF.MDP new file mode 100644 index 0000000..3d27ceb Binary files /dev/null and b/gif/GIF.MDP differ diff --git a/gif/GIF.PLG b/gif/GIF.PLG new file mode 100644 index 0000000..c2f33b1 --- /dev/null +++ b/gif/GIF.PLG @@ -0,0 +1,31 @@ + + +

+

Build Log

+

+--------------------Configuration: gif - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP7.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/gif.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"D:\work\GIF\gif.cpp" +"D:\work\GIF\gifbmp.cpp" +"D:\work\GIF\Lzw.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP7.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msgif.lib" .\msvcobj\gif.obj .\msvcobj\gifbmp.obj .\msvcobj\Istream.obj .\msvcobj\Lzw.obj " +

Output Window

+Compiling... +gif.cpp +gifbmp.cpp +Lzw.cpp +Creating library... + + + +

Results

+msgif.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/gif/GIFBMP.CPP b/gif/GIFBMP.CPP new file mode 100644 index 0000000..693b530 --- /dev/null +++ b/gif/GIFBMP.CPP @@ -0,0 +1,41 @@ +#include +#include + +void GIFBitmap::paletteHandler(const UCHAR FAR *lpPaletteData,USHORT numColors) +{ + if(numColors>PurePalette::MaxColors)return; + Array paletteData; + + paletteData.size(numColors); + for(int palIndex=0;palIndex +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_PUREPALETTE_HPP_ +#include +#endif + +class GIFBitmap : public Bitmap, private GIFDecoder +{ +public: + GIFBitmap(void); + BOOL open(const String &strPathFileName); + virtual ~GIFBitmap(); +private: + virtual void paletteHandler(const UCHAR FAR *lpPaletteData,USHORT numColors); + virtual void attributeHandler(USHORT imageWide,USHORT imageDeep,USHORT pixelSize); + virtual void backgroundHandler(USHORT backgroundColor); + virtual void imageHandler(void); + virtual void showHandler(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation); + virtual void errorHandler(const char FAR *message); + + PurePalette mGIFPalette; + String mPathFileName; +}; + +inline +GIFBitmap::GIFBitmap(void) +{ +} + +inline +BOOL GIFBitmap::open(const String &strPathFileName) +{ + mPathFileName=strPathFileName; + return unpackImage((char*)(String&)strPathFileName); +} + +inline +GIFBitmap::~GIFBitmap() +{ +} +#endif \ No newline at end of file diff --git a/gif/Gif.dsw b/gif/Gif.dsw new file mode 100644 index 0000000..6c99dbe --- /dev/null +++ b/gif/Gif.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "gif"=.\gif.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/gif/ISTREAM.CPP b/gif/ISTREAM.CPP new file mode 100644 index 0000000..c5e296c --- /dev/null +++ b/gif/ISTREAM.CPP @@ -0,0 +1,71 @@ +#include + +IStream::IStream(void) +: mFileDescriptor(-1), mCurrentWord(0), mCurrentChar(0), mhGlobalBuffer(0), + mlpBuffer(0), mBufferIndex(0), mlpBufferPointer(0) +{ +} + +IStream::IStream(const char *pathFileName) +: mFileDescriptor(-1), mCurrentWord(0), mCurrentChar(0), mhGlobalBuffer(0), + mlpBuffer(0), mBufferIndex(0), mlpBufferPointer(0) +{ + open(pathFileName); +} + +IStream::~IStream() +{ + close(); +} + +BOOL IStream::open(const char *pathFileName) +{ + close(); + if(-1==(mFileDescriptor=::open(pathFileName,O_RDONLY|O_BINARY,0,SH_DENYWR)))return FALSE; + mhGlobalBuffer=::GlobalAlloc(GMEM_FIXED,MaxInputBuffer); + if(!mhGlobalBuffer){close();return FALSE;} + mlpBuffer=(UCHAR FAR *)::GlobalLock(mhGlobalBuffer); + mlpBufferPointer=0; + mBufferIndex=0; + mCurrentChar=0; + mCurrentWord=0; + return TRUE; +} + +void IStream::close(void) +{ + if(-1!=mFileDescriptor)::close(mFileDescriptor); + mFileDescriptor=-1; + if(mhGlobalBuffer) + { + ::GlobalUnlock(mhGlobalBuffer); + ::GlobalFree(mhGlobalBuffer); + mhGlobalBuffer=0; + } +} + +WORD IStream::getChar(void) +{ + if(-1==mFileDescriptor)return FALSE; + if(!mBufferIndex) + { + mBufferIndex=::read(mFileDescriptor,(VPTR)mlpBuffer,MaxInputBuffer); + if(!mBufferIndex)return FALSE; + mlpBufferPointer=mlpBuffer; + } + mCurrentChar=*(mlpBufferPointer); + mlpBufferPointer++; + mBufferIndex--; + return TRUE; +} + +WORD IStream::getWord(void) +{ + if(-1==mFileDescriptor)return FALSE; + mCurrentWord=0; + if(!getChar())return FALSE; + mCurrentWord=mCurrentChar; + if(!getChar())return FALSE; + mCurrentWord|=((short)mCurrentChar)<<8; + return TRUE; +} diff --git a/gif/ISTREAM.HPP b/gif/ISTREAM.HPP new file mode 100644 index 0000000..8b5f336 --- /dev/null +++ b/gif/ISTREAM.HPP @@ -0,0 +1,68 @@ +#ifndef _GIF_ISTREAM_HPP_ +#define _GIF_ISTREAM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#include +#include +#include +#include + +class IStream +{ +public: +#if defined(__FLAT__) + typedef void * VPTR; +#else + typedef void far * VPTR; +#endif + IStream(void); + IStream(const char *pathFileName); + virtual ~IStream(); + BOOL open(const char *pathFileName); + void close(void); + WORD isOpen(void)const; + WORD getChar(void); + WORD getWord(void); + UCHAR currentChar(void)const; + USHORT currentWord(void)const; + void closeFile(void); +private: + enum{MaxInputBuffer=6400}; + HGLOBAL mhGlobalBuffer; + UCHAR FAR *mlpBuffer; + UCHAR FAR *mlpBufferPointer; + USHORT mBufferIndex; + + short mFileDescriptor; + USHORT mCurrentWord; + UCHAR mCurrentChar; +}; + +inline +UCHAR IStream::currentChar(void)const +{ + return mCurrentChar; +} + +inline +USHORT IStream::currentWord(void)const +{ + return mCurrentWord; +} + +inline +void IStream::closeFile(void) +{ + if(-1!=mFileDescriptor)::close(mFileDescriptor); + mFileDescriptor=-1; +} + +inline +WORD IStream::isOpen(void)const +{ + if(-1==mFileDescriptor)return FALSE; + return TRUE; +} +#endif + \ No newline at end of file diff --git a/gif/LZW.CPP b/gif/LZW.CPP new file mode 100644 index 0000000..54e72db --- /dev/null +++ b/gif/LZW.CPP @@ -0,0 +1,338 @@ +#include + +USHORT LZWDecompression::mStartTable[LZWDecompression::STARTTABLESIZE]= + {0x00,0x04,0x02,0x01,0x00}; + +USHORT LZWDecompression::mIncTable[LZWDecompression::INCTABLESIZE]= + {0x08,0x08,0x04,0x02,0x00}; + +USHORT LZWDecompression::mcMask[LZWDecompression::CMASKSIZE]= + {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; + +CHAR LZWDecompression::errorMessage[]="Error reading data."; + +LZWDecompression::LZWDecompression(void) +: mhGlobalctFirst(0), mhGlobalctLast(0), mhGlobalctLink(0), + mhGlobalOutRow(0), mhGlobalStack(0), mlpctFirst(0), mlpctLast(0), + mlpctLink(0), mlpOutRow(0), mlpStack(0), mNextCode(0), mNextLimit(0), + mBufferCount(0), mRemct(0), mRem(0), mPass(0), mxLocation(0), + myLocation(0), mRowCount(0), mIsConstructed(FALSE), mReqct(0), mCode(0) +{ + initialize(); +} + +LZWDecompression::~LZWDecompression() +{ + if(!mIsConstructed)return; + cleanup(); +} + +BOOL LZWDecompression::initialize(void) +{ + cleanup(); + mhGlobalctFirst=::GlobalAlloc(GMEM_FIXED,CTSIZE); + mhGlobalctLast=::GlobalAlloc(GMEM_FIXED,CTSIZE); + mhGlobalctLink=::GlobalAlloc(GMEM_FIXED,CTSIZE*sizeof(USHORT)); + mhGlobalOutRow=::GlobalAlloc(GMEM_FIXED,OUTROWSIZE); + mhGlobalStack=::GlobalAlloc(GMEM_FIXED,STACKSIZE); + if(!mhGlobalctFirst||!mhGlobalctLast||!mhGlobalctLink||!mhGlobalOutRow||!mhGlobalStack)return FALSE; + mlpctFirst=(CHAR FAR *)::GlobalLock(mhGlobalctFirst); + mlpctLast=(CHAR FAR *)::GlobalLock(mhGlobalctLast); + mlpctLink=(SHORT FAR *)::GlobalLock(mhGlobalctLink); + mlpOutRow=(UCHAR FAR *)::GlobalLock(mhGlobalOutRow); + mlpStack=(UCHAR FAR *)::GlobalLock(mhGlobalStack); + ::memset(mlpctFirst,0,CTSIZE); + ::memset(mlpctLast,0,CTSIZE); + ::memset(mlpctLink,0,CTSIZE*sizeof(USHORT)); + ::memset(mlpOutRow,0,OUTROWSIZE); + ::memset(mlpStack,0,STACKSIZE); + mIsConstructed=TRUE; + return TRUE; +} + +BOOL LZWDecompression::unpackData(USHORT imageWide,USHORT imageDeep,USHORT isInterlaced,USHORT bitsPerPixel) +{ + USHORT clearCode; + USHORT pixelSize; + USHORT endOfInput; + CHAR firstCode; + + initialize(); + firstCode=currentChar(); + mImageWide=imageWide; + mImageDeep=imageDeep; + mIsInterlaced=isInterlaced; + pixelSize=bitsPerPixel; + clearCode=(1<=code)break; + } + if(1==pixelSize) + { + while(i>0) + { + lpStack--; + tempCode=(*lpStack)&0x0001; + doPixel(tempCode); + tempCode=(*lpStack)&0x00FF; + tempCode>>=1; + doPixel(tempCode); + i--; + } + } + else + { + while(i>0) + { + lpStack--; + tempCode=(*lpStack)&0x00FF; + doPixel(tempCode); + i--; + } + } +} + +void LZWDecompression::doPixel(CHAR tempCode) +{ + *(mlpOutRow+mxLocation)=tempCode; + mxLocation++; + mRowCount--; + if(0!=mRowCount)return; + showHandler(mlpOutRow,myLocation); + mxLocation=0; + mRowCount=mImageWide; + if(!mIsInterlaced) + { + myLocation++; + if(myLocation>=mImageDeep)myLocation=0; + } + else + { + myLocation+=mIncTable[mPass]; + if(myLocation>=(code&0x00FF); + return tempCode; +} + +USHORT LZWDecompression::getCode(USHORT reqct) +{ + USHORT tempCode1; + USHORT tempCode2; + + if(reqct<=8)return getBCode(reqct); + tempCode1=getBCode(8); + tempCode2=getBCode(reqct-8); + tempCode2<<=8; + tempCode2|=tempCode1; + return tempCode2; +} + +WORD LZWDecompression::insertCode(SHORT code) +{ + if(mNextCode>=CTSIZE)return FALSE; + *(mlpctLink+mNextCode)=mOldCode; + *(mlpctLast+mNextCode)=*(mlpctFirst+code); + *(mlpctFirst+mNextCode)=*(mlpctFirst+mOldCode); + mNextCode++; + if(mNextCode!=mNextLimit)return TRUE; + if(mReqct>=12)return TRUE; + mReqct++; + mNextLimit<<=1; + return TRUE; +} + +void LZWDecompression::flush(void) +{ + while(TRUE) + { + if(0==mBufferCount) + { + if(!getChar())return; + mBufferCount=currentChar(); + if(0==mBufferCount)return; + } + else + { + if(!getChar())return; + mBufferCount--; + } + } +} + +void LZWDecompression::cleanup(void) +{ + if(mhGlobalctFirst) + { + ::GlobalUnlock(mhGlobalctFirst); + ::GlobalFree(mhGlobalctFirst); + mhGlobalctFirst=0; + } + if(mhGlobalctLast) + { + ::GlobalUnlock(mhGlobalctLast); + ::GlobalFree(mhGlobalctLast); + mhGlobalctLast=0; + } + if(mhGlobalctLink) + { + ::GlobalUnlock(mhGlobalctLink); + ::GlobalFree(mhGlobalctLink); + mhGlobalctLink=0; + } + if(mhGlobalOutRow) + { + ::GlobalUnlock(mhGlobalOutRow); + ::GlobalFree(mhGlobalOutRow); + mhGlobalOutRow=0; + } + if(mhGlobalStack) + { + ::GlobalUnlock(mhGlobalStack); + ::GlobalFree(mhGlobalStack); + mhGlobalStack=0; + } + mIsConstructed=FALSE; + mlpctFirst=0; + mlpctLast=0; + mlpctLink=0; + mlpOutRow=0; + mlpStack=0; + mNextCode=0; + mNextLimit=0; + mBufferCount=0; + mRemct=0; + mRem=0; + mPass=0; + mxLocation=0; + myLocation=0; + mRowCount=0; + mReqct=0; + mCode=0; +} + +// VIRTUALS + +void LZWDecompression::showHandler(UCHAR FAR * /*lpOutRow*/,USHORT /*yLocation*/) +{ +} + +void LZWDecompression::errorHandler(CHAR * /*errorMessage*/) +{ +} diff --git a/gif/LZW.HPP b/gif/LZW.HPP new file mode 100644 index 0000000..22427af --- /dev/null +++ b/gif/LZW.HPP @@ -0,0 +1,70 @@ +#ifndef _LZWDECOMPRESSION_HPP_ +#define _LZWDECOMPRESSION_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GIF_ISTREAM_HPP_ +#include +#endif + +class LZWDecompression : public IStream +{ +public: + LZWDecompression(void); + virtual ~LZWDecompression(); + BOOL unpackData(USHORT imageWide,USHORT imageDeep,USHORT isInterlaced,USHORT pixelSize); +protected: + virtual void errorHandler(CHAR *errorMessage); + virtual void showHandler(UCHAR FAR *lpOutRow,USHORT yLocation); +private: + enum{CMASKSIZE=9,STARTTABLESIZE=5,INCTABLESIZE=5}; + enum{OUTROWSIZE=2048,CTSIZE=4096,STACKSIZE=4096}; + BOOL initialize(void); + void cleanup(void); + void flush(void); + void initializeTable(SHORT clearCode); + WORD insertCode(SHORT code); + void putx(SHORT code,SHORT pixelSize); + void doPixel(CHAR tempCode); + USHORT getCode(USHORT reqct); + USHORT getBCode(USHORT code); + UCHAR getGB(void); + + static USHORT mcMask[]; + static USHORT mStartTable[]; + static USHORT mIncTable[]; + static CHAR errorMessage[]; + USHORT mImageWide; + USHORT mImageDeep; + USHORT mIsInterlaced; + USHORT mOldCode; + USHORT mNextCode; + USHORT mCode; + USHORT mPixelSize; + USHORT mNextLimit; + USHORT mBufferCount; + USHORT mRemct; + USHORT mReqct; + USHORT mRem; + USHORT mPass; + USHORT mxLocation; + USHORT myLocation; + USHORT mRowCount; + CHAR FAR *mlpctFirst; + CHAR FAR *mlpctLast; + SHORT FAR *mlpctLink; + UCHAR FAR *mlpOutRow; + UCHAR FAR *mlpStack; + + HGLOBAL mhGlobalctFirst; + HGLOBAL mhGlobalctLast; + HGLOBAL mhGlobalctLink; + HGLOBAL mhGlobalOutRow; + HGLOBAL mhGlobalStack; + WORD mIsConstructed; +}; +#endif + \ No newline at end of file diff --git a/gif/SCRAPS.TXT b/gif/SCRAPS.TXT new file mode 100644 index 0000000..abff192 --- /dev/null +++ b/gif/SCRAPS.TXT @@ -0,0 +1,4 @@ +// if(-1==(mFileDescriptor=::open(pathFileName,O_RDONLY|O_BINARY,0,SH_DENYWR)))return; +// mhGlobalBuffer=::GlobalAlloc(GMEM_FIXED,MaxInputBuffer); +// if(!mhGlobalBuffer)return; +// mlpBuffer=(UCHAR FAR *)::GlobalLock(mhGlobalBuffer); diff --git a/gif/gif.001 b/gif/gif.001 new file mode 100644 index 0000000..a4657a0 --- /dev/null +++ b/gif/gif.001 @@ -0,0 +1,94 @@ +# Microsoft Developer Studio Project File - Name="gif" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=gif - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "gif.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gif.mak" CFG="gif - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gif - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "gif - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "gif - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "gif - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msgif.lib" + +!ENDIF + +# Begin Target + +# Name "gif - Win32 Release" +# Name "gif - Win32 Debug" +# Begin Source File + +SOURCE=.\gif.cpp +# End Source File +# Begin Source File + +SOURCE=.\gifbmp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Istream.cpp +# End Source File +# Begin Source File + +SOURCE=.\Lzw.cpp +# End Source File +# End Target +# End Project diff --git a/gif/gif.dsp b/gif/gif.dsp new file mode 100644 index 0000000..88e9d63 --- /dev/null +++ b/gif/gif.dsp @@ -0,0 +1,100 @@ +# Microsoft Developer Studio Project File - Name="gif" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=gif - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "gif.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gif.mak" CFG="gif - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gif - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "gif - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "gif - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "gif - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Gz /Zp8 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msgif.lib" + +!ENDIF + +# Begin Target + +# Name "gif - Win32 Release" +# Name "gif - Win32 Debug" +# Begin Source File + +SOURCE=.\gif.cpp +# End Source File +# Begin Source File + +SOURCE=.\gifbmp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Istream.cpp +# End Source File +# Begin Source File + +SOURCE=.\Lzw.cpp +# End Source File +# End Target +# End Project diff --git a/guitar/Action.hpp b/guitar/Action.hpp new file mode 100644 index 0000000..46afb7f --- /dev/null +++ b/guitar/Action.hpp @@ -0,0 +1,155 @@ +#ifndef _GUITAR_ACTION_HPP_ +#define _GUITAR_ACTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Action +{ +public: + typedef enum Attribute{None,Pick,PullOff,Bend,HammerOn,Release,SlideDown,SlideUp}; + Action(); + Action(Attribute action); + Action(const String &strAction); + virtual ~Action(); + Attribute getAction(void)const; + void setAction(Attribute action); + String toString(void)const; + const Action &fromString(const String &string); + String toStringShort(void)const; + static Array enumerate(void); +private: + Attribute mAction; +}; + +inline +Action::Action() +: mAction(None) +{ +} + +inline +Action::Action(Attribute action) +: mAction(action) +{ +} + +inline +Action::Action(const String &strAction) +{ + fromString(strAction); +} + +inline +Action::~Action() +{ +} + +inline +Action::Attribute Action::getAction(void)const +{ + return mAction; +} + +inline +void Action::setAction(Attribute action) +{ + mAction=action; +} + +inline +String Action::toStringShort(void)const +{ + switch(mAction) + { + case PullOff : + return "p"; + break; + case Bend : + return "b"; + break; + case HammerOn : + return "h"; + break; + case Release : + return "r"; + break; + case SlideDown : + return "s"; + break; + case SlideUp : + return "s"; + break; + case Pick : + case None : + default : + return ""; + break; + } +} + +inline +String Action::toString(void)const +{ + switch(mAction) + { + case Pick : + return "Pick"; + break; + case PullOff : + return "PullOff"; + break; + case Bend : + return "Bend"; + break; + case HammerOn : + return "HammerOn"; + break; + case Release : + return "Release"; + break; + case SlideDown : + return "SlideDown"; + break; + case SlideUp : + return "SlideUp"; + break; + case None : + default : + return "None"; + break; + } +} + +inline +const Action &Action::fromString(const String &string) +{ + if(string=="Pick")mAction=Pick; + else if(string=="PullOff")mAction=PullOff; + else if(string=="Bend")mAction=Bend; + else if(string=="HammerOn")mAction=HammerOn; + else if(string=="Release")mAction=Release; + else if(string=="SlideDown")mAction=SlideDown; + else if(string=="SlideUp")mAction=SlideUp; + else mAction=None; + return *this; +} + +inline +Array Action::enumerate(void) +{ + Array actions; + actions.size(7); + actions[0]="Pick"; + actions[1]="PullOff"; + actions[2]="Bend"; + actions[3]="HammerOn"; + actions[4]="Release"; + actions[5]="SlideDown"; + actions[6]="SlideUp"; + return actions; +} +#endif diff --git a/guitar/BrowserHelper.cpp b/guitar/BrowserHelper.cpp new file mode 100644 index 0000000..c5be31c --- /dev/null +++ b/guitar/BrowserHelper.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool BrowserHelper::launchBrowser(const String &strCommand) +{ + String strBrowser; + Process process; + + if(!getBrowser(strBrowser))return false; + process.createProcess(strBrowser,String(" ")+strCommand,false); + return true; +} + +bool BrowserHelper::getBrowser(String &strBrowser) +{ + RegKey regKey(RegKey::LocalMachine); + String strCommand; + int argPos; + + if(!regKey.openKey(String(STRING_BROWSERKEY))) + { + if(!regKey.openKey(String(STRING_BROWSERKEYALT)))return false; + } + if(!regKey.enumValue(0,String(STRING_BROWSERCOMMAND),strCommand)||strCommand.isNull()||!strCommand.length()) + return false; + strCommand.removeTokens("'\""); + if(-1!=(argPos=strCommand.strpos("-")))strCommand=strCommand.substr(0,argPos-1); + strBrowser=strCommand; + return true; +} diff --git a/guitar/BrowserHelper.hpp b/guitar/BrowserHelper.hpp new file mode 100644 index 0000000..99d2945 --- /dev/null +++ b/guitar/BrowserHelper.hpp @@ -0,0 +1,20 @@ +#ifndef _GUITAR_BROWSERHELPER_HPP_ +#define _GUITAR_BROWSERHELPER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class BrowserHelper +{ +public: + static bool getBrowser(String &strBrowser); + static bool launchBrowser(const String &strCommand); +private: + BrowserHelper(); +}; + +inline +BrowserHelper::BrowserHelper() +{ +} +#endif diff --git a/guitar/CBCommands.hpp b/guitar/CBCommands.hpp new file mode 100644 index 0000000..68b9e0d --- /dev/null +++ b/guitar/CBCommands.hpp @@ -0,0 +1,16 @@ +#ifndef _GUITAR_CBCOMMANDS_HPP_ +#define _GUITAR_CBCOMMANDS_HPP_ + +class CBCommands +{ +public: + typedef enum CBCommand{FBShowTab=0,FBPlayNote=1,FBPlayScale=2,FBPlayFrettedNotes=3,FBPlayChord=4,FBPlayTab=5,FBShowScale=6}; +private: + CBCommands(); +}; + +inline +CBCommands::CBCommands() +{ +} +#endif diff --git a/guitar/ChordBuilderDialog.cpp b/guitar/ChordBuilderDialog.cpp new file mode 100644 index 0000000..064ce93 --- /dev/null +++ b/guitar/ChordBuilderDialog.cpp @@ -0,0 +1,160 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Music; + +ChordBuilderDialog::ChordBuilderDialog(void) +{ + mInitHandler.setCallback(this,&ChordBuilderDialog::initHandler); + mCreateHandler.setCallback(this,&ChordBuilderDialog::createHandler); + mCloseHandler.setCallback(this,&ChordBuilderDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordBuilderDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordBuilderDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog::ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + *this=someChordBuilderDialog; +} + +ChordBuilderDialog::~ChordBuilderDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog &ChordBuilderDialog::operator=(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + return *this; +} + +bool ChordBuilderDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDBUILDERDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordBuilderDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordBuilderDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(handleChordSelection())endDialog(true); + else MessageBox::messageBox("Unable to parse chord.","Please check parameters (parser is case sensitive)"); + break; + case ENTERCHORD_EXAMPLES : + handleShowExamples(); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +bool ChordBuilderDialog::handleChordSelection(void) +{ + ChordCompiler chordCompiler; + Music::Chord chord; + String strChord; + + strChord=getText(ENTERCHORD_EDIT); + if(!chordCompiler.compile(strChord,chord))return false; + CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&chord); + mPlayNoteHandler.callback(cbData); + return true; +} + +void ChordBuilderDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + +void ChordBuilderDialog::handleShowExamples() +{ + StringBuffer stringBuffer; + String crlf("\n"); + + stringBuffer.append("\"C^\" - C Major 7th ").append(crlf); + stringBuffer.append("\"Db^\" - D Flat Major 7th").append(crlf); + stringBuffer.append("\"C^#4\" - C Major 7th- sharp 4").append(crlf); + stringBuffer.append("\"D7\" - D Dominant 7th").append(crlf); + stringBuffer.append("\"D-7\" - D Minor 7th").append(crlf); + stringBuffer.append("\"Cb7#9\" - C Flat 7th - sharp 9").append(crlf); + stringBuffer.append("\"Eb-7\" - E Flat Minor 7th").append(crlf); + stringBuffer.append("\"G-\" - G Minor").append(crlf); + stringBuffer.append("\"Ab7\" - A Flat Dominant 7th").append(crlf); + stringBuffer.append("\"F#7\" - F Sharp Major 7th").append(crlf); + stringBuffer.append("\"C7#9\" - C Dominant 7th - sharp 9").append(crlf); + stringBuffer.append("\"Gb^#4\" - G Flat Major 7th - sharp 4").append(crlf); + stringBuffer.append("\"G7#11\" - G Dominant 7th - sharp 11").append(crlf); + stringBuffer.append("\"Ebsus\" - E Flat Sus").append(crlf); + stringBuffer.append("\"Dsusb9\" - D Sus - Flat 9").append(crlf); + stringBuffer.append("\"F#susb9\"- F Sharp Sus - Flat 9").append(crlf); + stringBuffer.append("\"Ebsusb9\"- E Flat Sus - Flat 9").append(crlf); + stringBuffer.append("\"A-b6\" - A Minor - Flat 6").append(crlf); + stringBuffer.append("\"Ao\" - A Half Diminished a.k.a B-7b5").append(crlf); + stringBuffer.append("\"C-#7\" - C Minor - Sharp 7 a.k.a C MinorMajor").append(crlf); + stringBuffer.append("\"C-^\" - C MinorMajor").append(crlf); + MessageBox::messageBox(*this,"Example Chords",stringBuffer.toString()); +} + diff --git a/guitar/ChordBuilderDialog.hpp b/guitar/ChordBuilderDialog.hpp new file mode 100644 index 0000000..53becee --- /dev/null +++ b/guitar/ChordBuilderDialog.hpp @@ -0,0 +1,52 @@ +#ifndef _GUITAR_CHORDBUILDERDLG_HPP_ +#define _GUITAR_CHORDBUILDERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordBuilderDialog : public DWindow +{ +public: + ChordBuilderDialog(void); + virtual ~ChordBuilderDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog); + ChordBuilderDialog &operator=(const ChordBuilderDialog &someChordBuilderDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + void handleShowExamples(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/ChordChart.gif b/guitar/ChordChart.gif new file mode 100644 index 0000000..6678bcb Binary files /dev/null and b/guitar/ChordChart.gif differ diff --git a/guitar/ChordDlg.cpp b/guitar/ChordDlg.cpp new file mode 100644 index 0000000..e500e8b --- /dev/null +++ b/guitar/ChordDlg.cpp @@ -0,0 +1,147 @@ +#include +#include +#include +#include +#include +#include + +ChordDialog::ChordDialog(void) +{ + mInitHandler.setCallback(this,&ChordDialog::initHandler); + mCreateHandler.setCallback(this,&ChordDialog::createHandler); + mCloseHandler.setCallback(this,&ChordDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog::ChordDialog(const ChordDialog &someChordDialog) +{ // private implementation + *this=someChordDialog; +} + +ChordDialog::~ChordDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) +{ // private implementation + return *this; +} + +bool ChordDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); + mChordList.disposition(PointerDisposition::Delete); + setChordList(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +void ChordDialog::setChordList(void) +{ + CursorControl cursor; + String strInsert; + int count=0; + + cursor.waitCursor(true); + for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) + { + String strResource(rcIndex); + if(strResource.isNull()||strResource=="UNSET")continue; + strInsert=strResource.betweenString(0,'['); + strInsert.trimRight(); + strInsert+=strResource.betweenString(']',0); + mChordList->insertString(strInsert); + count++; + } + cursor.waitCursor(false); + setText(CHORDS_COUNT,"chord count:"+String().fromInt(count)); +} + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); + CallbackData cbData(CBCommands::FBPlayTab,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void ChordDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(!ptr)break; + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + + + diff --git a/guitar/ChordDlg.hpp b/guitar/ChordDlg.hpp new file mode 100644 index 0000000..b3d08a0 --- /dev/null +++ b/guitar/ChordDlg.hpp @@ -0,0 +1,54 @@ +#ifndef _GUITAR_CHORDDLG_HPP_ +#define _GUITAR_CHORDDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordDialog : public DWindow +{ +public: + ChordDialog(void); + virtual ~ChordDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=STRING_22000,ResEnd=STRING_CHORD_END-1}; + ChordDialog(const ChordDialog &someChordDialog); + ChordDialog &operator=(const ChordDialog &someChordDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setChordList(void); + void handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mChordList; + Block mChords; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/ChordMapper.cpp b/guitar/ChordMapper.cpp new file mode 100644 index 0000000..d1f986c --- /dev/null +++ b/guitar/ChordMapper.cpp @@ -0,0 +1,232 @@ +#include + +bool ChordMapper::map(const Music::Chord &chord,Block &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else + { + String message("[Fretboard::getAt] Unable to map note '"+note.toString()+String("'")); + returnCode=false; + } + } + if(!returnCode) + { + isBarChord=false; + returnCode=true; + frettedNotes.remove(); + int noteCount=0; + int chordIndex=2; + int direction=-1; + + + +/* + while(noteCount=chord.size())chordIndex=0; + Note ¬e=((Music::Chord&)chord)[chordIndex]; + if(getAt(Fretboard::Strings-1,-1,note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else returnCode=false; + chordIndex+=direction; + noteCount++; + } +*/ + } + if(isBarChord && frettedNotes.size()) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} + + +/* +* searches for a note mapping starting at given string at fret 0 (note string 0 is the top (6th)string +* takes care of string collisions. +* @param note - The note to find a mapping for. +* @param fretted note - If result is true contains note mapping. +* @param containedNotes - Notes that are already in the mapping, used + to limit selected notes and to minimize distance between notes. +*/ + +bool ChordMapper::getAt(int startingString,int direction,const Note ¬e,FrettedNote &frettedNote,Block &containedNotes) +{ + for(int stringCount=0,srIndex=startingString;stringCount=Fretboard::Strings)srIndex=0; + else if(srIndex<0)srIndex=Fretboard::Strings-1; + for(int frIndex=0;frIndexMaxFretDistance)continue; + return true; + } + } + } + return false; +} + +/* + Get the FrettedNote for the given Note. + @param note - The note we are looking to map. + @param frettedNote - The fretted note we are looking for (get's filled in on success) + @param containedNotes - List of frettednotes we already have (so don't choose any of these). + +*/ +bool ChordMapper::getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes) +{ + for(int srIndex=0;srIndex=Fretboard::Strings)srIndex=0; + for(int frIndex=0;frIndexMaxFretDistance)continue; + return true; + } + } + } + return false; +} + +/* + Returns the greatest distance between fretted note and grouping of notes + Distance is simply fret distance, does not account for string distance + @param frettedNote - The fretted note to get distance. + @param frettedNotes - The collection of notes with which to compare distances +*/ +int ChordMapper::distance(const FrettedNote &frettedNote,Block &frettedNotes) +{ + int maxDistance=0; + int currDistance; + + for(int index=0;indexmaxDistance)maxDistance=currDistance; + } + OutputDebugString(String(String("Distance is :")+String().fromInt(maxDistance)+String("\n")).str()); + return maxDistance; +} + +/* + Return the distance between two fretted notes. +*/ +int ChordMapper::distance(const FrettedNote &firstNote,const FrettedNote &secondNote) +{ + int fretDistance=firstNote.getFret()-secondNote.getFret(); + return fretDistance<0?-fretDistance:fretDistance; +} + +/* + Find filler notes for given chord on given fret on empty string. +*/ +bool ChordMapper::getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes) +{ + bool notesInChord; + for(int stringIndex=0;stringIndex &frettedNotes) +{ + for(int index=0;index=Fretboard::Strings || currentString<0)continue; + if(currentFret>=Fretboard::Frets || currentFret<0)continue; + Note ¬e=mFretboard[currentString][currentFret]; + if(note==srchNote) + { + FrettedNote frettedNote; + frettedNote.setNote(note); + frettedNote.setString(currentString); + frettedNote.setFret(currentFret); + return true; + } + } + } + return false; +} + + + diff --git a/guitar/ChordMapper.hpp b/guitar/ChordMapper.hpp new file mode 100644 index 0000000..ec297fa --- /dev/null +++ b/guitar/ChordMapper.hpp @@ -0,0 +1,47 @@ +#ifndef _CHORDMAPPER_HPP_ +#define _CHORDMAPPER_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class ChordMapper +{ +public: + ChordMapper(); + virtual ~ChordMapper(); + bool map(const Music::Chord &chord,Block &frettedNotes); +private: + enum {MaxFretDistance=4}; // Maximum distance for note spanning across frets + bool getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + bool getAt(int startingString,int direction,const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + int distance(const FrettedNote &frettedNote,Block &frettedNotes); + int distance(const FrettedNote &firstNote,const FrettedNote &secondNote); + bool getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes); + bool contains(const FrettedNote &frettedNote,Block &frettedNotes); + bool isIn(const FrettedNote &frettedNote,const Music::Chord &chord); + + void getNearestNote(const FrettedNote &frettedNote,const Note &srchNote,FrettedNote &foundNote); + bool getNearestNoteInRange(const FrettedNote &frettedNote,const Note &srchNote,FrettedNote &foundNote,int stringOffset,int fretOffset); + + Fretboard mFretboard; +}; + +inline +ChordMapper::ChordMapper() +{ +} + +inline +ChordMapper::~ChordMapper() +{ +} +#endif diff --git a/guitar/DragQueryFile.hpp b/guitar/DragQueryFile.hpp new file mode 100644 index 0000000..58d205c --- /dev/null +++ b/guitar/DragQueryFile.hpp @@ -0,0 +1,39 @@ +#ifndef _COMMON_DRAGQUERYFILE_HPP_ +#define _COMMON_DRAGQUERYFILE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DragQueryFile +{ +public: + static bool getFileNames(HDROP hDrop,Block &strFileNames); +private: +}; + +inline +bool DragQueryFile::getFileNames(HDROP hDrop,Block &strFileNames) +{ + String strBuffer; + UINT numFiles; + + strFileNames.remove(); + strBuffer.reserve(512); + if(0==hDrop)return false; + numFiles=::DragQueryFile(hDrop,0xFFFFFFFF,0,0); + if(!numFiles)return false; + for(int index=0;index +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class Element +{ +public: + Element(); + Element(int fret,Action action=Action::None); + virtual ~Element(); + Action::Attribute getAction(void)const; + void setAction(Action::Attribute action); + void setFret(int fret); + int getFret(void)const; + String toString(void)const; +private: + int mFret; + Action mAction; +}; + +inline +Element::Element() +: mFret(0) +{ +} + +inline +Element::Element(int fret,Action action) +: mFret(fret), mAction(action) +{ +} + +inline +Element::~Element() +{ +} + +inline +Action::Attribute Element::getAction(void)const +{ + return mAction.getAction(); +} + +inline +void Element::setAction(Action::Attribute action) +{ + mAction.setAction(action); +} + +inline +int Element::getFret(void)const +{ + return mFret; +} + +inline +void Element::setFret(int fret) +{ + mFret=fret; +} + +inline +String Element::toString(void)const +{ + return mAction.toString()+String(" ")+String().fromInt(mFret); +} +#endif diff --git a/guitar/Fingering.cpp b/guitar/Fingering.cpp new file mode 100644 index 0000000..3c45813 --- /dev/null +++ b/guitar/Fingering.cpp @@ -0,0 +1,88 @@ +#include +#include + +FrettedNotes Fingering::getFingering(const Scale &scale) +{ + FrettedNotes frettedNotes; + FrettedNote frettedNote; + + frettedNotes.size(scale.size()); + GlobalDefs::outDebug(scale.toString()); + for(int index=0;indexFretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString<0)return false; + } + mCurrFret++; + } + return found; +} + +bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e) +{ + Note tmpNote; + bool found; + + found=false; + GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString()); + if(mCurrFret<0||mCurrString>5)return false; + while(!found) + { + tmpNote=mFretboard.getAt(mCurrString,mCurrFret); + GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString()); + if(tmpNote==note) + { + frettedNote.setString(mCurrString); + frettedNote.setFret(mCurrFret); + frettedNote.setNote(tmpNote); + found=true; + } + if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets) + { + mCurrFret=mAnchorFret-2; + mCurrString++; +// mAnchorFret=mCurrFret; + if(mCurrString>5)return false; + if(mCurrFret<0)mCurrFret=0; + } + if(mCurrFret>Fretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString>5)return false; + } + mCurrFret++; + } + return found; +} diff --git a/guitar/Fingering.hpp b/guitar/Fingering.hpp new file mode 100644 index 0000000..88325bc --- /dev/null +++ b/guitar/Fingering.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_FINGERING_HPP_ +#define _GUITAR_FINGERING_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Fingering +{ +public: + Fingering(); + virtual ~Fingering(); + FrettedNotes getFingering(const Scale &scale); +private: + enum{MaxStretchFrets=4,DefaultString=5}; + bool getFirst(FrettedNote &frettedNote,const Note ¬e); + bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); + int getCurrString(void)const; + void setCurrString(int currString); + int getCurrFret(void)const; + void setCurrFret(int currFret); + + Fretboard mFretboard; + int mMaxStretchFrets; + int mStartString; + int mCurrString; + int mCurrFret; + int mAnchorFret; +}; + +inline +Fingering::Fingering() +: mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) +{ +} + +inline +Fingering::~Fingering() +{ +} + +inline +int Fingering::getCurrString(void)const +{ + return mCurrString; +} + +inline +void Fingering::setCurrString(int currString) +{ + mCurrString=currString; +} + +inline +int Fingering::getCurrFret(void)const +{ + return mCurrFret; +} + +inline +void Fingering::setCurrFret(int currFret) +{ + mCurrFret=currFret; +} +#endif diff --git a/guitar/Fret.hpp b/guitar/Fret.hpp new file mode 100644 index 0000000..e450ad5 --- /dev/null +++ b/guitar/Fret.hpp @@ -0,0 +1,104 @@ +#ifndef _GUITAR_FRET_HPP_ +#define _GUITAR_FRET_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Fret; +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class Fret +{ +public: + typedef enum FretStatus{Active,Inactive,Hidden}; + Fret(void); + Fret(const Fret &fret); + Fret(const Note ¬e,const Rect &boundingRect); + virtual ~Fret(); + Fret &operator=(const Fret &fret); + const Note &getNote(void)const; + void setNote(const Note ¬e); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + FretStatus getStatus(void)const; + void setStatus(FretStatus status); +private: + Note mNote; + Rect mBoundingRect; + FretStatus mStatus; +}; + +inline +Fret::Fret(void) +: mStatus(Hidden) +{ +} + +inline +Fret::Fret(const Fret &fret) +{ + *this=fret; +} + +inline +Fret::Fret(const Note ¬e,const Rect &boundingRect) +: mNote(note), mBoundingRect(boundingRect) +{ +} + +inline +Fret::~Fret() +{ +} + +inline +Fret &Fret::operator=(const Fret &fret) +{ + setNote(fret.getNote()); + setBoundingRect(fret.getBoundingRect()); + return *this; +} + +inline +const Note &Fret::getNote(void)const +{ + return mNote; +} + +inline +void Fret::setNote(const Note ¬e) +{ + mNote=note; +} + +inline +const Rect &Fret::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void Fret::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +Fret::FretStatus Fret::getStatus(void)const +{ + return mStatus; +} + +inline +void Fret::setStatus(FretStatus status) +{ + mStatus=status; +} +#endif diff --git a/guitar/FretDlg.cpp b/guitar/FretDlg.cpp new file mode 100644 index 0000000..8eaf67f --- /dev/null +++ b/guitar/FretDlg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +FretDialog::FretDialog(void) +: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1) +{ + mInitHandler.setCallback(this,&FretDialog::initHandler); + mCreateHandler.setCallback(this,&FretDialog::createHandler); + mCloseHandler.setCallback(this,&FretDialog::closeHandler); + mDestroyHandler.setCallback(this,&FretDialog::destroyHandler); + mCommandHandler.setCallback(this,&FretDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog::FretDialog(const FretDialog &someFretDialog) +{ // private implementation + *this=someFretDialog; +} + +FretDialog::~FretDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog &FretDialog::operator=(const FretDialog &someFretDialog) +{ // private implementation + return *this; +} + +bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + mSelectedString=selectedString; + mSelectedFret=-1; + return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData) +{ + initializeAction(); + initializeNoteTypes(); + setString(); + setFret(); + setNoteType((*mTabEntries)[mCurrEntryIndex]); + return (CallbackData::ReturnType)FALSE; +} + +void FretDialog::handleOk(void) +{ + String selectedFret; + String selectedAction; + String selectedDuration; + String selectedString; + bool found=false; + + getText(FRETENTRY_FRET,selectedFret); + getText(FRETENTRY_ACTION,selectedAction); + getText(FRETENTRY_DURATION,selectedDuration); + getText(FRETENTRY_STRING,selectedString); + if(!selectedString.isNull()) + { + int string=selectedString.toInt(); + if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string; + } + mSelectedFret=selectedFret.toInt(); + if(mSelectedFret<0||mSelectedFret>Fretboard::Frets) + { + mSelectedFret=-1; + return; + } + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + FrettedNote frettedNote; + frettedNote.setFret(mSelectedFret); + frettedNote.setAction(Action(selectedAction)); + if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret); + else if(!entry.setFrettedNote(mSelectedString,frettedNote)) + { + entry.addFrettedNote(mSelectedString,frettedNote); + } + entry.setNoteType(NoteType().fromString(selectedDuration)); + return; +} + +void FretDialog::setString() +{ + setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString)); +} + +void FretDialog::setFret() +{ + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + + for(int index=0;index actions=Action::enumerate(); + for(int index=0;index noteTypes=NoteType::enumerate(); + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class FretDialog : public DWindow +{ +public: + FretDialog(void); + virtual ~FretDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex); +private: + FretDialog(const FretDialog &someFretDialog); + FretDialog &operator=(const FretDialog &someFretDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void initializeAction(void); + void initializeNoteTypes(void); + void setFret(void); + void setString(void); + void setAction(const Action &action); + void setNoteType(const TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + int mSelectedString; + int mSelectedFret; +}; +#endif diff --git a/guitar/FretViewWnd.cpp b/guitar/FretViewWnd.cpp new file mode 100644 index 0000000..6004169 --- /dev/null +++ b/guitar/FretViewWnd.cpp @@ -0,0 +1,164 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FretViewWindow::FretViewWindow(void) +{ + mCreateHandler.setCallback(this,&FretViewWindow::createHandler); + mSizeHandler.setCallback(this,&FretViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&FretViewWindow::paintHandler); + mHorizontalScrollHandler.setCallback(this,&FretViewWindow::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&FretViewWindow::verticalScrollHandler); + mLeftButtonDownHandler.setCallback(this,&FretViewWindow::leftButtonDownHandler); + mCloseHandler.setCallback(this,&FretViewWindow::closeHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +FretViewWindow::~FretViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +CallbackData::ReturnType FretViewWindow::closeHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType FretViewWindow::createHandler(CallbackData &someCallbackData) +{ + setTitle("Fretboard"); + mGUIFretboard=::new GUIFretboard(*this); + mGUIFretboard.disposition(PointerDisposition::Delete); + return FALSE; +} + +CallbackData::ReturnType FretViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType FretViewWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mGUIFretboard->draw(pureDevice); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::leftButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void FretViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String FretViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void FretViewWindow::setNote(const TabEntry &entry,bool clear,bool play) +{ + mGUIFretboard->setNote(entry,clear,play); +} + +void FretViewWindow::setNote(const Music::Chord &chord,bool play) +{ + mGUIFretboard->setNote(chord,play); +} + +void FretViewWindow::setNote(const Note ¬e,bool clear,bool play) +{ + mGUIFretboard->setNote(note,clear,play); +} + +void FretViewWindow::setNote(const Scale &scale,bool play) +{ + mGUIFretboard->setNote(scale,play); +} + +void FretViewWindow::setNote(const FrettedNotes &frettedNotes,bool play) +{ + mGUIFretboard->setNote(frettedNotes,play); +} + +void FretViewWindow::clearNotes(void) +{ + mGUIFretboard->clearNotes(); +} + +void FretViewWindow::showAllPositions(void) +{ + mGUIFretboard->showAllPositions(); +} + +void FretViewWindow::cut(void) +{ + mGUIFretboard->cut(); +} + +void FretViewWindow::copy(void) +{ + mGUIFretboard->copy(); +} + +void FretViewWindow::paste(void) +{ + mGUIFretboard->paste(); +} + +// *** virtuals + +void FretViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void FretViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|WS_CHILD|WS_CAPTION|WS_SIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_BORDER|WS_SYSMENU; +} + + diff --git a/guitar/FretViewWnd.hpp b/guitar/FretViewWnd.hpp new file mode 100644 index 0000000..98b7926 --- /dev/null +++ b/guitar/FretViewWnd.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_FRETVIEWWINDOW_HPP_ +#define _GUITAR_FRETVIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#include +#endif + +class TabEntry; +class Scale; + +class FretViewWindow : public MDIWindow +{ +public: + enum{THPlay,THStop}; + FretViewWindow(void); + virtual ~FretViewWindow(); + String getTitle(void)const; + void cut(void); + void copy(void); + void paste(void); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void showAllPositions(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum{WindowWidth=355,WindowHeight=135,MaxWindowWidth=520}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDownHandler; + Callback mCloseHandler; + SmartPointer mGUIFretboard; +}; + +inline +void FretViewWindow::getNotes(TabEntry &entry) +{ + mGUIFretboard->getNotes(entry); +} +#endif + diff --git a/guitar/Fretboard.cpp b/guitar/Fretboard.cpp new file mode 100644 index 0000000..4a3d0c0 --- /dev/null +++ b/guitar/Fretboard.cpp @@ -0,0 +1,240 @@ +#include +#include +#include + +bool Fretboard::isOnFretboard(const Note ¬e) +{ + for(int frIndex=0;frIndex &frettedNotes) +{ + frettedNotes.remove(); + + for(int srIndex=0;srIndex &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else + { + String message("[Fretboard::getAt] Unable to map note '"+note.toString()+String("'")); + GlobalDefs::outDebug(message); + returnCode=false; + } + } + +// need to come up with a strategy here for mapping notes on the fretboard + + if(isBarChord) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} + +/* + Find filler notes for given chord on given fret on empty string. +*/ +bool Fretboard::getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes) +{ + bool notesInChord; + for(int stringIndex=0;stringIndex &containedNotes) +{ + for(int srIndex=0;srIndex4)continue; + return true; + } + } + } + return false; +} + +/* Check to see if the fretted note exists in the collection of fretted notes. +* @param frettedNote - The fretted note to check for +* @param frettedNotes - The collection of fretted notes +*/ +bool Fretboard::contains(const FrettedNote &frettedNote,Block &frettedNotes) +{ + for(int index=0;index &frettedNotes) +{ + int maxDistance=0; + int currDistance; + + for(int index=0;indexmaxDistance)maxDistance=currDistance; + } + return maxDistance; +} + +void Fretboard::createFretboard(const Tuning &tuning,int frets) +{ + mTuning=tuning; + mFrets=frets; + createFretboard(); +} + +bool Fretboard::play(MIDIOutputDevice &device) +{ + for(int string=0;string&)*this).operator[](string); + strFretboard+=stringNotes.toString(); + if(string +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +// |-5- +// |-4- +// |-3- +// |-2- +// |-1- +// |-0- + +class MIDIOutputDevice; + +class Fretboard : public Array +{ +public: + enum{Frets=24,Strings=6}; + Fretboard(const Tuning &tuning=Tuning(),int frets=Frets); + virtual ~Fretboard(); + void createFretboard(const Tuning &tuning,int frets=Frets); + const Tuning &getTuning(); + void setTuning(const Tuning &tuning); + const Note &getAt(int string,int fret); + bool getAt(const Music::Chord &chord,Block &frettedNotes); + bool getAt(const Note ¬e,FrettedNote &frettedNote); + bool getAt(const Note ¬e,Block &frettedNotes); + int getFrets(void)const; + void setFrets(int frets); + bool isOnFretboard(const Note ¬e); + bool play(MIDIOutputDevice &device); + String toString(void)const; + static bool isValidFret(int fret); +private: + void createFretboard(); + bool getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + bool contains(const FrettedNote &frettedNote,Block &frettedNotes); + bool getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes); + int distance(const FrettedNote &frettedNote,Block &frettedNotes); + bool isIn(const FrettedNote &frettedNote,const Music::Chord &chord); + + Tuning mTuning; + int mFrets; +}; + +inline +Fretboard::Fretboard(const Tuning &tuning,int frets) +: mTuning(tuning),mFrets(frets) +{ + createFretboard(); +} + +inline +Fretboard::~Fretboard() +{ +} + +inline +const Tuning &Fretboard::getTuning() +{ + return mTuning; +} + +inline +void Fretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createFretboard(); +} + +inline +int Fretboard::getFrets(void)const +{ + return mFrets; +} + +inline +void Fretboard::setFrets(int frets) +{ + mFrets=frets; + createFretboard(); +} + +inline +const Note &Fretboard::getAt(int string,int fret) +{ + return (operator[](string)).operator[](fret); +} + +inline +bool Fretboard::isValidFret(int fret) +{ + if(fret<=Fretboard::Frets)return true; + return false; +} +#endif \ No newline at end of file diff --git a/guitar/FrettedBoundingNote.hpp b/guitar/FrettedBoundingNote.hpp new file mode 100644 index 0000000..d1019c7 --- /dev/null +++ b/guitar/FrettedBoundingNote.hpp @@ -0,0 +1,88 @@ +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#define _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class FrettedBoundingNote : public FrettedNote +{ +public: + FrettedBoundingNote(); + virtual ~FrettedBoundingNote(); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + const Point &getDisplayPoint(void)const; + void setDisplayPoint(const Point &displayPoint); + const RGBColor &getBkGndColor(void)const; + void setBkGndColor(RGBColor &bkGndColor); + const RGBColor &getTextColor(void)const; + void setTextColor(const RGBColor &textColor); +private: + Rect mBoundingRect; + Point mDisplayPoint; + RGBColor mBkGndColor; + RGBColor mTextColor; +}; + +inline +FrettedBoundingNote::FrettedBoundingNote() +{ +} + +inline +FrettedBoundingNote::~FrettedBoundingNote() +{ +} + +inline +const Rect &FrettedBoundingNote::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void FrettedBoundingNote::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +const RGBColor &FrettedBoundingNote::getBkGndColor(void)const +{ + return mBkGndColor; +} + +inline +void FrettedBoundingNote::setBkGndColor(RGBColor &bkGndColor) +{ + mBkGndColor=bkGndColor; +} + +inline +const RGBColor &FrettedBoundingNote::getTextColor(void)const +{ + return mTextColor; +} + +inline +void FrettedBoundingNote::setTextColor(const RGBColor &textColor) +{ + mTextColor=textColor; +} + +inline +const Point &FrettedBoundingNote::getDisplayPoint(void)const +{ + return mDisplayPoint; +} + +inline +void FrettedBoundingNote::setDisplayPoint(const Point &displayPoint) +{ + mDisplayPoint=displayPoint; +} +#endif + diff --git a/guitar/FrettedNote.hpp b/guitar/FrettedNote.hpp new file mode 100644 index 0000000..2b87aeb --- /dev/null +++ b/guitar/FrettedNote.hpp @@ -0,0 +1,158 @@ +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#define _GUITAR_FRETTEDNOTE_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class FrettedNote; + +typedef Array FrettedNotes; + +class FrettedNote : public Note +{ +public: + FrettedNote(); + FrettedNote(const FrettedNote &frettedNote); + FrettedNote(const Note ¬e,int string,int fret,const Action &action=Action(Action::Pick)); + virtual ~FrettedNote(); + FrettedNote &operator=(const FrettedNote &frettedNote); + bool operator==(const FrettedNote &frettedNote)const; + bool operator>(const FrettedNote &frettedNote)const; + bool operator<(const FrettedNote &frettedNote)const; + int getString(void)const; + void setString(int string); + int getFret(void)const; + void setFret(int fret); + void setNote(const Note ¬e); + const Note &getNote(void)const; + const Action &getAction(void)const; + void setAction(const Action &action); + String toString(void)const; +private: + int mString; + int mFret; + Action mAction; +}; + +inline +FrettedNote::FrettedNote(const FrettedNote &frettedNote) +{ + *this=frettedNote; +} + +inline +FrettedNote::FrettedNote() +: Note(Note::E,4), mString(0), mFret(0) +{ +} + +inline +FrettedNote::FrettedNote(const Note ¬e,int string,int fret,const Action &action) +: Note(note), mString(string), mFret(fret), mAction(action) +{ +} + +inline +FrettedNote::~FrettedNote() +{ +} + +inline +FrettedNote &FrettedNote::operator=(const FrettedNote &frettedNote) +{ + setString(frettedNote.getString()); + setFret(frettedNote.getFret()); + (Note&)*this=(Note&)frettedNote; + setAction(frettedNote.getAction()); + return *this; +} + +inline +bool FrettedNote::operator==(const FrettedNote &frettedNote)const +{ + if(getString()==frettedNote.getString()&&getFret()==frettedNote.getFret()) + return (Note&)*this==(Note&)frettedNote; + return false; +} + +inline +bool FrettedNote::operator>(const FrettedNote &frettedNote)const +{ + if(getString()>frettedNote.getString())return true; + if(getFret()>frettedNote.getFret())return true; + return (Note&)*this>(Note&)frettedNote; +} + +inline +bool FrettedNote::operator<(const FrettedNote &frettedNote)const +{ + if(getString() +#include + +bool FrettedNotes::play(MIDIOutputDevice &midiDevice) +{ + String strNotes; + if(!midiDevice.hasDevice())return false; + +// ::OutputDebugString(String(toString()+String("\n")).str()); + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RGBColor GUIFretboard::smColorBlack=RGBColor(0,0,0); +RGBColor GUIFretboard::smColorLtGreen=RGBColor(156,156,74); +RGBColor GUIFretboard::smColorWhite=RGBColor(255,255,255); +RGBColor GUIFretboard::smColorRed=RGBColor(231,33,33); +RGBColor GUIFretboard::smColorGreen=RGBColor(0,128,0); +RGBColor GUIFretboard::smColorBlue=RGBColor(0,0,255); + +/* Construct the GUIFretboard +* @param parent - The owning parent window +* @param tuning - The tuning for this fretboard +* @param frets - The number of frets on this fretboard +*/ +GUIFretboard::GUIFretboard(GUIWindow &parent,const Tuning &tuning,int frets) +: mTuning(tuning), mTextFont("Small Fonts",6), mShowNotes(false), + mPrevBrush(0), mPrevFont(0), mPrevBkMode(0), mPrevTextColor(0), mClearNotes(true), + mCurrFret(0), mCurrString(0), mRedBrush(smColorRed), mLtGreenBrush(smColorLtGreen), + mWhiteBrush(smColorWhite), mGreenBrush(smColorGreen), mBlueBrush(smColorBlue) +{ + Registry registry; + setShowNotes(registry.getShowNotes()); + mParent=SmartPointer(&parent); + mSizeHandler.setCallback(this,&GUIFretboard::sizeHandler); + mLeftButtonDownHandler.setCallback(this,&GUIFretboard::leftButtonDownHandler); + mKeyDownHandler.setCallback(this,&GUIFretboard::keyDownHandler); + mKeyUpHandler.setCallback(this,&GUIFretboard::keyUpHandler); + mSetFocusHandler.setCallback(this,&GUIFretboard::setFocusHandler); + mKillFocusHandler.setCallback(this,&GUIFretboard::killFocusHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + mParent.disposition(PointerDisposition::Assume); + mResBitmap=::new ResBitmap("FRETBOARD"); + mResBitmap.disposition(PointerDisposition::Delete); + parent.setWindowPos(mResBitmap->width()+RightBorder,mResBitmap->height()+BottomBorder); + createVirtualFretboard(); + mParent->invalidate(); + mParent->update(); +} + +/* +* Destructor +*/ +GUIFretboard::~GUIFretboard() +{ + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->removeHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +/* +* Draw the fretboard +* @param device - The device context on which to draw +*/ +void GUIFretboard::draw(PureDevice &device) +{ + mDIBitmap->usePalette(device,true); + mDIBitmap->bitBlt(device); + mDIBitmap->usePalette(device,false); + refreshNotes(); +} + +/* +* Repeat the selected notes at every location on the fretboard +* @param None +*/ +void GUIFretboard::showAllPositions(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + clearNotes(); + for(int index=0;index &frettedNotes,bool play) +{ + FrettedNotes notes; + notes.size(frettedNotes.size()); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +#include + +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Block > frettedNotesBlock; + Fretboard fretboard; + ChordMapper chordMapper; + + getSequencer(); + + chordMapper.map(chord,frettedNotesBlock); + for(int index=0;index &frettedNotes=frettedNotesBlock[index]; + clearNotes(); +// if(!fretboard.getAt(chord,frettedNotes)) +// MessageBox::messageBox("Error mapping notes","some notes were not mapped."); + setNote(frettedNotes,false); + ::Sleep(2000); + } + + if(play) + { + Registry registry; + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} +*/ + + +#include + +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Fretboard fretboard; + ChordMapper chordMapper; + + clearNotes(); + if(!chordMapper.map(chord,frettedNotes))return; + setNote(frettedNotes,false); + if(!play)return; + if(play) + { + Registry registry; + getSequencer(); + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} + + +/* +* Sets the notes of the given chord on the fretboard +* @param chord - the chord from which notes will be set +* @param play - indicates whether the notes of the chord should be played +* needs work (ie) selects multiple notes per string, does not optimize +* for finger position +*/ + +/* +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Fretboard fretboard; + + getSequencer(); + clearNotes(); + if(!fretboard.getAt(chord,frettedNotes)) + MessageBox::messageBox("Error mapping notes","some notes were not mapped."); + setNote(frettedNotes,false); + if(play) + { + Registry registry; + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} + +*/ +/* +* Sets the notes of the given scale on the fretboard +* @param scale - the scale from which notes will be set +* @param play - indicates whether the notes of the scale should be played +*/ +void GUIFretboard::setNote(const Scale &scale,bool play) +{ + Registry registry; + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + + getSequencer(); + clearNotes(); + if(scale.has(Degree::I))degreeI=scale.getDegree(Degree::I); + if(scale.has(Degree::III))degreeIII=scale.getDegree(Degree::III); + if(scale.has(Degree::V))degreeV=scale.getDegree(Degree::V); + if(scale.has(Degree::VII))degreeVII=scale.getDegree(Degree::VII); + for(int index=0;indexgetDevice()); + ::Sleep(Notes::DefaultDelay); + scale.play(mSequencer->getDevice(),registry.getMillisecondsPerQuarterNote()/4); // play scale as 16th notes + } +} + +/* +* Sets a note on the fretboard +* @param note - the note to set +* @param clear - indicates whether fretboard should be cleared prior to note being set +* @param play - indicates whether the note should be played +*/ +void GUIFretboard::setNote(const Note ¬e,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + } + } + } + return; +} + +/* +* Sets a note(s) on the fretboard +* @param entry - the tabentry containing the note(s) +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard +* @param string - the string to set the note on +* @param fret - the fret to set the note on +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(int string,int fret,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + GuitarString &guitarString=operator[]((size()-1)-string); + FrettedBoundingNote &frettedBoundingNote=guitarString[fret]; + if(clear)clearNotes(); + frettedBoundingNote.setBkGndColor(smColorRed); + frettedBoundingNote.setTextColor(smColorWhite); + mActiveFrets.insert(frettedBoundingNote); + prepareDevice(device,true); + drawNote(frettedBoundingNote,device); + if(play)frettedBoundingNote.noteOn(mSequencer->getDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::setNote(const GDIPoint &clickPoint,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + return true; + } + } + } + return false; +} + +/* +* Unsets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::unsetNote(const GDIPoint &clickPoint) +{ + for(int strIndex=0;strIndexinvalidate(boundingRect,false); + mParent->update(); + return true; + } + } + } + return false; +} + +/* +* isNoteSet a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::isNoteSet(const GDIPoint &clickPoint) +{ + for(int strIndex=0;strIndex frettedBoundingNotes; + + PureDevice device(*mParent); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index frettedBoundingNotes; + + entry.remove(); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index1)device.textOut(boundingRect.left(),boundingRect.top(),strNote); + else device.textOut(boundingRect.left()+1,boundingRect.top()+1,strNote); + } +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param prepare - indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + prepareDevice(device,smColorRed,smColorWhite,prepare); +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param brushColor - The color of the drawing brush +* @param textColor - The text color +* @param prepare - Indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)getBrush(brushColor)); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(textColor); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} + +/* +* Get the brush for the given color +* @param brushColor - The color of the brush we desire +* @return - A reference to the brush for the given color +*/ +Brush &GUIFretboard::getBrush(const RGBColor &brushColor) +{ + if(brushColor==mRedBrush.getColor())return mRedBrush; + else if(brushColor==mWhiteBrush.getColor())return mWhiteBrush; + else if(brushColor==mGreenBrush.getColor())return mGreenBrush; + else if(brushColor==mBlueBrush.getColor())return mBlueBrush; + return mLtGreenBrush; +} + +/* +* Clears all of the notes on the fretboard +* @param None +* @return None +*/ +void GUIFretboard::clearNotes(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;indexinvalidate(rect,false); + } + mActiveFrets.remove(); + mParent->update(); +} + +/* +* Initialize the fretboard and create it's underlying bitmap +* @param None +* @return None +*/ +void GUIFretboard::createVirtualFretboard(void) +{ + SmartPointer activeFret; + size(mTuning.size()); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + } + } + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + +/* +* Get the rectangle that bounds the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The bounding rectangle +*/ +Rect GUIFretboard::getBoundingRect(int string,int fret)const +{ + Rect boundingRect; + Point point(getPoint(string,fret)); + boundingRect.left(point.x()-Radius); + boundingRect.top(point.y()-Radius); + boundingRect.right(point.x()+Radius); + boundingRect.bottom(point.y()+Radius); + return boundingRect; +} + +/* +* Get the point for the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The point +*/ +Point GUIFretboard::getPoint(int string,int fret)const +{ + Point point; + int starty=15; + int incy=10; + + switch(fret) + { + case 0 : + point.x(10); + break; + case 1 : + point.x(23); + break; + case 2 : + point.x(55); + break; + case 3 : + point.x(83); + break; + case 4 : + point.x(111); + break; + case 5 : + point.x(138); + break; + case 6 : + point.x(164); + break; + case 7 : + point.x(193); + break; + case 8 : + point.x(220); + break; + case 9 : + point.x(249); + break; + case 10 : + point.x(280); + break; + case 11 : + point.x(307); + break; + case 12 : + point.x(335); + break; + case 13 : + point.x(362); + break; + case 14 : + point.x(392); + break; + case 15 : + point.x(420); + break; + case 16 : + point.x(446); + break; + case 17 : + point.x(473); + break; + case 18 : + point.x(501); + break; + case 19 : + point.x(528); + break; + case 20 : + point.x(558); + break; + case 21 : + point.x(585); + break; + case 22 : + point.x(611); + break; + case 23 : + point.x(640); + break; + case 24 : + point.x(668); + break; + } + point.y(starty+((string)*incy)); + return point; +} + +/* +* Cut the notes from the fretboard +* @param None +* @return None +*/ +void GUIFretboard::cut(void) +{ + copy(); // copy the fretboard notes to the clipboard first + clearNotes(); +} + +/* +* Copy all selected notes to the clipboard +* @param None +* @return None +*/ +void GUIFretboard::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + getNotes(entry); + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); +} + +/* +* Paste notes from clipboard +* @param None +* @return None +*/ +void GUIFretboard::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return; + entry.fromString(strText.betweenString(']',0)); + setNote(entry,true,true); +} + +// callbacks + +/* +* Handles resizing of the fretboard window +* @param callbackData - Contains information about the resize event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::sizeHandler(CallbackData &callbackData) +{ + GlobalDefs::outDebug("[GUIFretboard::sizeHandler]"); + Point sizePoint(callbackData.loWord(),callbackData.hiWord()); + if(sizePoint.x()>mResBitmap->width()+RightBorder|| + sizePoint.y()>mResBitmap->height()+BottomBorder) + mParent->setWindowPos(mResBitmap->width()+10,mResBitmap->height()+30); + return false; +} + +/* +* Handles left button down event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::leftButtonDownHandler(CallbackData &callbackData) +{ + GDIPoint clickPoint(callbackData.loWord(),callbackData.hiWord()); + + if(KeyData::controlKeyPressed())setNote(clickPoint,mClearNotes,true); + else + { + if(isNoteSet(clickPoint))unsetNote(clickPoint); + else setNote(clickPoint,mClearNotes,true); + } + return false; +} + +/* +* Handles keyboard event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyDownHandler(CallbackData &callbackData) +{ + if(KeyData::controlKeyPressed())mClearNotes=false; + else mClearNotes=true; + KeyData keyData(callbackData); + switch(keyData.virtualKey()) + { + case KeyDown : + if(KeyData::shiftKeyPressed())mCurrString-=2; + else mCurrString--; + if(mCurrString<0)mCurrString=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyLeft : + if(KeyData::shiftKeyPressed())mCurrFret-=2; + else mCurrFret--; + if(mCurrFret<0)mCurrFret=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyRight : + if(KeyData::shiftKeyPressed())mCurrFret+=2; + else mCurrFret++; + if(mCurrFret>DefaultFrets)mCurrFret=DefaultFrets; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyUp : + if(KeyData::shiftKeyPressed())mCurrString+=2; + else mCurrString++; + if(mCurrString>=DefaultStrings)mCurrString=DefaultStrings-1; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + } + return false; +} + +/* +* Handles key up event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyUpHandler(CallbackData &callbackData) +{ + KeyData keyData(callbackData); + if(CtrlKey==keyData.virtualKey())mClearNotes=true; + return false; +} + +/* +* Handles focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::setFocusHandler(CallbackData &callbackData) +{ + getSequencer(); + return false; +} + +/* +* Handles kill focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::killFocusHandler(CallbackData &callbackData) +{ + mSequencer.destroy(); + return false; +} + diff --git a/guitar/GUIFretboard.hpp b/guitar/GUIFretboard.hpp new file mode 100644 index 0000000..3a0bb85 --- /dev/null +++ b/guitar/GUIFretboard.hpp @@ -0,0 +1,176 @@ +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#define _GUITAR_GUIFRETBOARD_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TUNING_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class GUIWindow; +class TabEntry; +class ResBitmap; +class Scale; + +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class GUIFretboard : public VirtualFretboard +{ +public: + enum{DefaultFrets=24,DefaultStrings=6}; + GUIFretboard(GUIWindow &parent,const Tuning &tuning=Tuning(),int frets=DefaultFrets); + virtual ~GUIFretboard(); + const Tuning &getTuning(void)const; + void setTuning(const Tuning &tuning); + int getFrets(void)const; + void draw(PureDevice &device); + bool isNoteSet(const GDIPoint &clickPoint); + bool unsetNote(const GDIPoint &clickPoint); + void setNote(int string,int fret,bool clear=true,bool play=false); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void setNote(Block &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void setShowNotes(bool showNotes); + bool getShowNotes(void)const; + void showAllPositions(void); + void cut(void); + void copy(void); + void paste(void); +private: + enum{RightBorder=10,BottomBorder=30,Radius=5,ClickTolerance=1}; + enum{KeyDown=0x28,KeyLeft=0x25,KeyRight=0x27,KeyUp=0x26,CtrlKey=0x11}; + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &callbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &callbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &callbackData); + + void createVirtualFretboard(void); + void refreshNotes(void); + void getSequencer(void); + Point getPoint(int string,int fret)const; + Rect getBoundingRect(int string,int fret)const; + void prepareDevice(PureDevice &device,bool prepare); + void prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor=RGBColor(255,255,255),bool prepare=true); + void drawNote(FrettedBoundingNote &currFret,PureDevice &device); + bool setNote(const GDIPoint &clickPoint,bool clear=true,bool play=false); + Brush &getBrush(const RGBColor &brushColor); + + Tuning mTuning; + SmartPointer mDIBitmap; + SmartPointer mResBitmap; + SmartPointer mParent; + SmartPointer mSequencer; + + Callback mSizeHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mKeyUpHandler; + Callback mSetFocusHandler; + Callback mKillFocusHandler; + BTree mActiveFrets; + + bool mShowNotes; + bool mClearNotes; + int mCurrFret; + int mCurrString; + + Brush mGreenBrush; + Brush mRedBrush; + Brush mWhiteBrush; + Brush mLtGreenBrush; + Brush mBlueBrush; + Font mTextFont; + + HGDIOBJ mPrevBrush; + HGDIOBJ mPrevFont; + int mPrevBkMode; + RGBColor mPrevTextColor; + + static RGBColor smColorBlack; + static RGBColor smColorLtGreen; + static RGBColor smColorWhite; + static RGBColor smColorRed; + static RGBColor smColorGreen; + static RGBColor smColorBlue; +}; + +inline +const Tuning &GUIFretboard::getTuning(void)const +{ + return mTuning; +} + +inline +void GUIFretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createVirtualFretboard(); +} + +inline +int GUIFretboard::getFrets(void)const +{ + return DefaultFrets; +} + +inline +void GUIFretboard::setShowNotes(bool showNotes) +{ + mShowNotes=showNotes; +} + +inline +bool GUIFretboard::getShowNotes(void)const +{ + return mShowNotes; +} + +inline +void GUIFretboard::getSequencer(void) +{ + if(mSequencer.isOkay())return; + mSequencer=::new Sequencer(); + mSequencer.disposition(PointerDisposition::Delete); +} +#endif \ No newline at end of file diff --git a/guitar/GlobalDefs.cpp b/guitar/GlobalDefs.cpp new file mode 100644 index 0000000..24438ac --- /dev/null +++ b/guitar/GlobalDefs.cpp @@ -0,0 +1,6 @@ +#include + +UINT GlobalDefs::mRegisteredClipboardFormat=0; +GlobalDefs::LogLevel GlobalDefs::mLogLevel=GlobalDefs::Debug; +File GlobalDefs::mLogFile; + diff --git a/guitar/GlobalDefs.hpp b/guitar/GlobalDefs.hpp new file mode 100644 index 0000000..f376556 --- /dev/null +++ b/guitar/GlobalDefs.hpp @@ -0,0 +1,100 @@ +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#define _GUITAR_GLOBALDEFS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class GlobalDefs +{ +public: + typedef enum LogLevel{NoLog,Verbose,Info,Debug}; + enum{MicrosecondsPerQuarterNote=651578,ShowAction=1,ShowNotes=1}; + static void outDebug(const String &strDebug,LogLevel level=Debug); + static LogLevel getLogLevel(void); + static void setLogLevel(LogLevel logLevel); + static bool setLogFile(const String &pathLogFile); + static UINT getRegisteredClipboardFormat(void); + static void setRegisteredClipboardFormat(UINT registeredClipboardFormat); + static String translateLevel(LogLevel logLevel); +private: + GlobalDefs(); + virtual ~GlobalDefs(); + static UINT mRegisteredClipboardFormat; + static LogLevel mLogLevel; + static File mLogFile; +}; + +inline +GlobalDefs::GlobalDefs() +{ +} + +inline +GlobalDefs::~GlobalDefs() +{ +} + +inline +UINT GlobalDefs::getRegisteredClipboardFormat(void) +{ + return mRegisteredClipboardFormat; +} + +inline +void GlobalDefs::setRegisteredClipboardFormat(UINT registeredClipboardFormat) +{ + mRegisteredClipboardFormat=registeredClipboardFormat; +} + +inline +GlobalDefs::LogLevel GlobalDefs::getLogLevel(void) +{ + return mLogLevel; +} + +inline +void GlobalDefs::setLogLevel(LogLevel logLevel) +{ + mLogLevel=logLevel; +} + +inline +void GlobalDefs::outDebug(const String &strDebug,LogLevel logLevel) +{ + if(NoLog==getLogLevel())return; + if(mLogFile.isOkay()&&logLevel>=mLogLevel) + { + mLogFile.writeLine(translateLevel(logLevel)+strDebug); + mLogFile.flush(); + } + else if(logLevel>=mLogLevel)::OutputDebugString(String(translateLevel(logLevel)+strDebug+String("\n")).str()); +} + +inline +bool GlobalDefs::setLogFile(const String &pathLogFile) +{ + return mLogFile.open(pathLogFile,"wb"); +} + +inline +String GlobalDefs::translateLevel(LogLevel logLevel) +{ + SystemTime systemTime; + if(NoLog==logLevel)return String("[Log.None][")+systemTime.toString()+String("]"); + else if(Verbose==logLevel)return String("[Log.Verbose][")+systemTime.toString()+String("]"); + else if(Debug==logLevel)return String("[Log.Debug][")+systemTime.toString()+String("]"); + else return String("[Log.Info]]")+systemTime.toString()+String("]"); +} +#endif diff --git a/guitar/GuitarString.hpp b/guitar/GuitarString.hpp new file mode 100644 index 0000000..06f0d1c --- /dev/null +++ b/guitar/GuitarString.hpp @@ -0,0 +1,29 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/guitar/Instrument.hpp b/guitar/Instrument.hpp new file mode 100644 index 0000000..eee996c --- /dev/null +++ b/guitar/Instrument.hpp @@ -0,0 +1,129 @@ +#ifndef _GUITAR_INSTRUMENT_HPP_ +#define _GUITAR_INSTRUMENT_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Instrument +{ +public: + Instrument(const String &description,int program); + ~Instrument(); + const String &description(void)const; + void description(const String &description); + int program(void)const; + void program(int program); + static Instrument fromString(const String &instrument); + String toString(void)const; + bool isOkay(void)const; +private: + String mDescription; + int mProgram; +}; + +inline +Instrument::Instrument(const String &description,int program) +: mDescription(description), mProgram(program) +{ +} + +inline +Instrument::~Instrument() +{ +} + +inline +const String &Instrument::description(void)const +{ + return mDescription; +} + +inline +void Instrument::description(const String &description) +{ + mDescription=description; +} + +inline +int Instrument::program(void)const +{ + return mProgram; +} + +inline +void Instrument::program(int program) +{ + mProgram=program; +} + +inline +Instrument Instrument::fromString(const String &strInstrument) +{ + if(strInstrument.isNull())return Instrument("",-1); + return Instrument(strInstrument.betweenString(';',0),strInstrument.betweenString(0,';').toInt()); +} + +inline +String Instrument::toString()const +{ + return String().fromInt(mProgram)+String(";")+mDescription; +} + +inline +bool Instrument::isOkay(void)const +{ + if(mDescription.isNull() || -1==mProgram)return false; + return true; +} + +class Instruments : public Block +{ +public: + enum {StartOrdinal=STRING_INSTRUMENT1,EndOrdinal=STRING_INSTRUMENT175}; + Instruments(); + virtual ~Instruments(); + int getProgram(int index); + const Instrument &getInstrument(int index); +private: + void loadInstruments(void); +}; + +inline +Instruments::Instruments() +{ + loadInstruments(); +} + +inline +Instruments::~Instruments() +{ +} + +inline +void Instruments::loadInstruments(void) +{ + for(int index=StartOrdinal;index<=EndOrdinal;index++) + { + String strInstrument=String(index); + insert(&Instrument(String(strInstrument.betweenString(';',0).betweenString(';',0)),strInstrument.betweenString(0,';').toInt())); + } +} + +inline +int Instruments::getProgram(int index) +{ + return operator[](index).program(); +} + +inline +const Instrument &Instruments::getInstrument(int index) +{ + return operator[](index); +} +#endif \ No newline at end of file diff --git a/guitar/IntegerPair.hpp b/guitar/IntegerPair.hpp new file mode 100644 index 0000000..fc5959f --- /dev/null +++ b/guitar/IntegerPair.hpp @@ -0,0 +1,21 @@ +#ifndef _GUITAR_INTEGERPAIR_HPP_ +#define _GUITAR_INTEGERPAIR_HPP_ + +class IntegerPair +{ +public: + IntegerPair(); + IntegerPair(const IntegerPair &integerPair); + virtual IntegerPair(); + IntegerPair &operator=(const IntegerPair &integerPair); + bool operator<(const IntegerPair &integerPair); + bool operator>(const IntegerPair &integerPair); + bool operator==(const IntegerPair &integerPair); + int getValue(void)const; + void setValue(int value); + int getComparator +private: + int mValue; + int mComparator; +}; +#endif \ No newline at end of file diff --git a/guitar/Led.bmp b/guitar/Led.bmp new file mode 100644 index 0000000..bfab469 Binary files /dev/null and b/guitar/Led.bmp differ diff --git a/guitar/License.hpp b/guitar/License.hpp new file mode 100644 index 0000000..e83be51 --- /dev/null +++ b/guitar/License.hpp @@ -0,0 +1,148 @@ +#ifndef _GUITAR_LICENSE_HPP_ +#define _GUITAR_LICENSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif + +class License +{ +public: + typedef enum LicenseType{Expires=01,Permanent=02}; + typedef enum Feature{MIDIFeature}; + License(void); + License(const License &license); + License(const String &strLicenseKey); // this should be a uuencoded, xor'd string + License(Block &strLicenseKeyLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + License &operator=(const License &license); + static String generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount); // produces a uuencoded, xor'd string + bool fromString(const String &string); // this should be a uuencoded, xor'd string + bool fromLines(Block &strLicenseLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + bool isValid(void)const; + bool isExpiring(void)const; + bool allowFeature(Feature feature)const; + int getRemainingDays(void)const; + int getDayCount(void)const; + int getDay(void)const; + const String &getUUEncodedLicense(void)const; +private: + enum {XORMagic=72}; + static int calculateChecksum(const String &string); + static String xor(const String &strLicense); + static String numericEncode(const String &strLicense); + static String numericDecode(const String &strLicense); + + String mProductVersion; + String mUUEncodedLicense; + SystemTime mIssueDate; + LicenseType mLicenseType; + int mDayCount; + bool mIsValid; + static const String smBeginLicense; + static const String smEndLicense; +}; + +inline +License::License(void) +: mIsValid(false) +{ +} + +inline +License::License(const License &license) +{ + *this=license; +} + +inline +License::License(const String &strLicenseKey) +: mIsValid(false) +{ + fromString(strLicenseKey); +} + +inline +License::License(Block &strLicenseLines) +: mIsValid(false) +{ + fromLines(strLicenseLines); +} + +inline +License &License::operator=(const License &license) +{ + mProductVersion=license.mProductVersion; + mIssueDate=license.mIssueDate; + mLicenseType=license.mLicenseType; + mDayCount=license.mDayCount; + mIsValid=license.mIsValid; + return *this; +} + +inline +bool License::isValid(void)const +{ + return mIsValid; +} + +inline +bool License::isExpiring(void)const +{ + return Expires==mLicenseType; +} + +inline +int License::getRemainingDays(void)const +{ + if(!isExpiring())return -1; + SDate issueDate; + SDate expireDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + expireDate=issueDate; + expireDate=expireDate.daysAdd360(mDayCount); + return currDate.daysBetween360(expireDate); +} + +inline +int License::getDay(void)const +{ + SDate issueDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + return issueDate.daysBetween360(currDate)+1; +} + +inline +int License::getDayCount(void)const +{ + return mDayCount; +} + +inline +bool License::allowFeature(Feature feature)const +{ + if(isExpiring())return false; + return true; +} + +inline +const String &License::getUUEncodedLicense(void)const +{ + return mUUEncodedLicense; +} +#endif diff --git a/guitar/LicenseDialog.cpp b/guitar/LicenseDialog.cpp new file mode 100644 index 0000000..011549d --- /dev/null +++ b/guitar/LicenseDialog.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +LicenseDialog::LicenseDialog(void) +{ + mInitHandler.setCallback(this,&LicenseDialog::initHandler); + mCreateHandler.setCallback(this,&LicenseDialog::createHandler); + mCloseHandler.setCallback(this,&LicenseDialog::closeHandler); + mDestroyHandler.setCallback(this,&LicenseDialog::destroyHandler); + mCommandHandler.setCallback(this,&LicenseDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog::LicenseDialog(const LicenseDialog &someLicenseDialog) +{ // private implementation + *this=someLicenseDialog; +} + +LicenseDialog::~LicenseDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog &LicenseDialog::operator=(const LicenseDialog &someLicenseDialog) +{ // private implementation + return *this; +} + +bool LicenseDialog::perform(GUIWindow &parentWindow,bool cancelTerminates) +{ + bool returnCode; + mCancelTerminates=cancelTerminates; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"LICENSEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType LicenseDialog::initHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType LicenseDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::commandHandler(CallbackData &someCallbackData) +{ + LRESULT result; + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(!validateLicense()) + { + MessageBox::messageBox("Error","The license you entered was invalid, please try again"); + setText(LICENSE_DIALOG_LICENSE,String()); + setFocus(LICENSE_DIALOG_LICENSE); + } + else endDialog(true); + break; + case IDCANCEL : + if(mCancelTerminates) + { + result=MessageBox::messageBox(*this,"Warning","Cancelling now will terminate the application.",MB_OKCANCEL); + if(IDOK==result)endDialog(false); + } + else endDialog(false); + break; + case LICENSE_DIALOG_REQUEST_LICENSE : + handleLicenseRequest(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +bool LicenseDialog::validateLicense(void)const +{ + License license; + String strLicense; + Block strLicenseLines; + + strLicense=getText(LICENSE_DIALOG_LICENSE); + if(strLicense.isNull())return false; + makeLicenseLines(strLicense,strLicenseLines); + license.fromLines(strLicenseLines); + if(!license.isValid()||license.isExpiring())return false; + if(!Registration::getInstance().applyLicense(strLicenseLines))return false; + return true; +} + +void LicenseDialog::handleLicenseRequest(void)const +{ + BrowserHelper::launchBrowser(String(STRING_HOST)); +} + +void LicenseDialog::makeLicenseLines(String strLicense,Block &strLicenseLines)const +{ + strLicenseLines.remove(); + if(strLicense.isNull())return; + strLicense.removeTokens("\r"); + strLicenseLines.insert(&String(strLicense.betweenString(0,'\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\0').betweenString('\n','\n\0'))); +} diff --git a/guitar/LicenseDialog.hpp b/guitar/LicenseDialog.hpp new file mode 100644 index 0000000..87535df --- /dev/null +++ b/guitar/LicenseDialog.hpp @@ -0,0 +1,32 @@ +#ifndef _GUITAR_LICENSEDIALOG_HPP_ +#define _GUITAR_LICENSEDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif + +class LicenseDialog : public DWindow +{ +public: + LicenseDialog(void); + virtual ~LicenseDialog(); + bool perform(GUIWindow &parentWindow,bool cancelTerminates=true); +private: + LicenseDialog(const LicenseDialog &someLicenseDialog); + LicenseDialog &operator=(const LicenseDialog &someLicenseDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool validateLicense(void)const; + void handleLicenseRequest(void)const; + void makeLicenseLines(String strLicense,Block &strLicenseLines)const; + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + bool mCancelTerminates; +}; +#endif diff --git a/guitar/LineParser.cpp b/guitar/LineParser.cpp new file mode 100644 index 0000000..5d387ae --- /dev/null +++ b/guitar/LineParser.cpp @@ -0,0 +1,127 @@ +#include + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + +void LineParser::putElement(const Element &element) +{ + String strItem=Action(element.getAction()).toStringShort()+String().fromInt(element.getFret()); + *this+=strItem; + mPosition+=strItem.length(); + return; +} + +void LineParser::putElement(char ch) +{ + *this+=ch; + mPosition++; + return; +} + +int LineParser::peekElement(Element &element) +{ + int position=mPosition; + int result=getElement(element); + mPosition=position; + return result; +} diff --git a/guitar/LineParser.hpp b/guitar/LineParser.hpp new file mode 100644 index 0000000..2bdd01b --- /dev/null +++ b/guitar/LineParser.hpp @@ -0,0 +1,101 @@ +#ifndef _GUITAR_LINEPARSER_HPP_ +#define _GUITAR_LINEPARSER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_ELEMENT_HPP_ +#include +#endif + +class LineParser : private String +{ +public: + LineParser(); + LineParser(const String &string); + virtual ~LineParser(); + LineParser &operator=(const String &string); + LineParser &operator++(); + LineParser &operator++(int /*postfixdummy*/); + void reset(void); + int getElement(Element &element); + void putElement(const Element &element); + void putElement(char ch); + int length(void)const; + int getPosition(void)const; + bool serialize(File &outFile)const; +private: + int peekElement(Element &element); + + int mPosition; + int mLength; +}; + +inline +LineParser::LineParser() +: mPosition(0), mLength(0) +{ +} + +inline +LineParser::LineParser(const String &string) +: String(string), mPosition(0), mLength(String::length()) +{ +} + +inline +LineParser::~LineParser() +{ +} + +inline +LineParser &LineParser::operator=(const String &string) +{ + (String&)*this=string; + mPosition=0; + mLength=String::length(); + return *this; +} + +inline +LineParser &LineParser::operator++() +{ + mPosition++; + return *this; +} + +inline +LineParser &LineParser::operator++(int /*postfixdummy*/) +{ + mPosition++; + return *this; +} + +inline +void LineParser::reset(void) +{ + mPosition=0; +} + +inline +int LineParser::length(void)const +{ + return mLength; +} + +inline +int LineParser::getPosition(void)const +{ + return mPosition; +} + +inline +bool LineParser::serialize(File &outFile)const +{ + if(!outFile.isOkay())return false; + outFile.writeLine(*this); + return true; +} +#endif diff --git a/guitar/MIDIDialog.cpp b/guitar/MIDIDialog.cpp new file mode 100644 index 0000000..db0a41d --- /dev/null +++ b/guitar/MIDIDialog.cpp @@ -0,0 +1,136 @@ +#include +#include +#include + +MIDIDialog::MIDIDialog(void) +{ + mInitHandler.setCallback(this,&MIDIDialog::initHandler); + mCreateHandler.setCallback(this,&MIDIDialog::createHandler); + mCloseHandler.setCallback(this,&MIDIDialog::closeHandler); + mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler); + mCommandHandler.setCallback(this,&MIDIDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog) +{ // private implementation + *this=someMIDIDialog; +} + +MIDIDialog::~MIDIDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog) +{ // private implementation + return *this; +} + +bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack) +{ + bool returnCode; + mPathMIDIFileName=strPathMIDIFileName; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + if(returnCode)selectedTrack=mSelectedTrack; + return returnCode; +} + +CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData) +{ + MIDIHelper midiHelper; + TrackInfos trackInfos; + midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos); + setTrackInformation(trackInfos); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + mSelectedTrack=getSelectedTrack(); + if(-1==mSelectedTrack)endDialog(false); + else endDialog(true); + break; + } + if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MIDIDialog::setTrackInformation(TrackInfos &trackInfos) +{ + bool isFirst=true; + for(int index=0;index=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return; + mSelectedTrack=clickedId-MIDI_TRACK1; + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L); + } +} + +int MIDIDialog::getSelectedTrack(void)const +{ + int selectedTrack=-1; + + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(1==sendMessage(btnId,BM_GETCHECK,0,0L)) + { + selectedTrack=btnId-MIDI_TRACK1; + break; + } + } + return selectedTrack; +} + + + + + diff --git a/guitar/MIDIDialog.hpp b/guitar/MIDIDialog.hpp new file mode 100644 index 0000000..01781b3 --- /dev/null +++ b/guitar/MIDIDialog.hpp @@ -0,0 +1,39 @@ +#ifndef _GUITAR_MIDIDIALOG_HPP_ +#define _GUITAR_MIDIDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIDialog : public DWindow +{ +public: + MIDIDialog(void); + virtual ~MIDIDialog(); + bool perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack); +private: + MIDIDialog(const MIDIDialog &someMIDIDialog); + MIDIDialog &operator=(const MIDIDialog &someMIDIDialog); + void handleClick(const CallbackData &someCallbackData); + int getSelectedTrack(void)const; + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTrackInformation(TrackInfos &trackInfos); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + String mPathMIDIFileName; + int mSelectedTrack; +}; +#endif diff --git a/guitar/MIDIHelper.cpp b/guitar/MIDIHelper.cpp new file mode 100644 index 0000000..06c36b9 --- /dev/null +++ b/guitar/MIDIHelper.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include +#include +#include + +bool MIDIHelper::getTrackInfo(const String &strPathMIDIFileName,TrackInfos &trackInfos) +{ + MidiData midiData(strPathMIDIFileName); + midiData.getTrackInfo(trackInfos); + return trackInfos.size()?true:false; +} + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack) +{ + TabEntry entry; + Tablature tablature; + TabEntries tabEntries; + + WORD currPlayTime; + WORD prevPlayTime; + int eventCount; + bool resultCode; + bool haveTrack; + Block notes; + TrackInfos trackInfos; + + resultCode=false; + haveTrack=false; + if(strPathMidiFileName.isNull())return resultCode; + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + + for(int trIndex=0;trIndex &strPathTabFileNames) +{ + String strPathTabFileName; + WORD currPlayTime; + WORD prevPlayTime; + int currentTrack; + int eventCount; + Block tracks; + Block notes; + TrackInfos trackInfos; + + if(strPathMidiFileName.isNull())return false; + strPathTabFileNames.remove(); + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + if(!tracks.size())return false; + for(int trIndex=0;trIndex ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + notePaths.size(notes.size()); + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + MIDIHelper(); + virtual ~MIDIHelper(); +// bool import(const String &strPathMidiFileName,const String &strPathTabFileName); + bool import(const String &strPathMidiFileName,Block &strPathTabFileNames); + bool import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack); + bool getTrackInfo(const String &strpathMIDIFileName,TrackInfos &trackInfos); +private: + bool createEntry(Block ¬es,TabEntry &entry); + bool filterNotesOnFretboard(Block ¬es); + + Fretboard mFretboard; + Block mMessages; +}; + +inline +MIDIHelper::MIDIHelper() +{ +} + +inline +MIDIHelper::~MIDIHelper() +{ +} +#endif diff --git a/guitar/MIDIHelper.txt b/guitar/MIDIHelper.txt new file mode 100644 index 0000000..520d63f --- /dev/null +++ b/guitar/MIDIHelper.txt @@ -0,0 +1,30 @@ +// The NotePath object contains, for each note, all possible playable locations on the fretboard +// we will use NotePath to build a TabEntry for which all notes can be played (ie) No two notes +// should be playable on the same string. Also, we would like to minimize the fret distance +// between playable notes. We need to do this because the fretboard is tuned in fourths, except +// for the fifth string which is tuned in third. The point is that for a given midi note (pitch) +// there are overlapping locations on the fretboard where the note can be played. This is not +// a problem with the keyboard because, theoretically, the entire keyboarded can be voiced +// at once. The fretboard is different. If we voice a note on the first string at the fifth +// fret, we cannot at the same time, voice a note on the first string at the fourth fret. +// Along the same lines, if we build a TabEntry that contains a voicing on the first string +// at the fifth fret, it is illegal to add another entry to the tab that voices a note on +// the first string at the sixth fret. Allowing this would nullify the previous TabEntry. +// +// The other objective is to handle the fret-range problem. In building the optimal path, +// we would like to overcome the problem wherebye, for instance, a note is voiced on the +// first string at the fifth fret and, in overcoming the voicing of a competing note on the +// first string at say the fourth fret, we might arbitrarily choose to voice a note that +// cannot possibly be played by an individual because the note poses an expansive fret +// traveral. This should be overcome by choosing a NotePath space that minimizes the +// distance requried to play the desired notes. This alone should alleviate the problem. +// +// There is a third problem which address how many notes are voiced simultaneously. +// This problem also revolves around the mechanical differences between instruments +// used to create MIDI files, and the guitar. For instance, the keyboard is capable +// of simultaneously voicing all 188 keys. In other words, a chord can be build on +// the keyboard that repeats the root, third, and fifth, many times (ie) ten notes +// played sumultaneously (eleven if the pianist uses his toe). We need to limit the +// number of simultaneous voices for the guitar to six. We do not want to exclude +// important notes in the elimination process. We would also like to retain key +// note pitches in order to reproduce the original sound as accurately as possible. diff --git a/guitar/MessageBox.hpp b/guitar/MessageBox.hpp new file mode 100644 index 0000000..53be76b --- /dev/null +++ b/guitar/MessageBox.hpp @@ -0,0 +1,47 @@ +#ifndef _GUITAR_MESSAGE_HPP_ +#define _GUITAR_MESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif + +class MessageBox +{ +public: + static LRESULT messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type=MB_OK); + static LRESULT messageBox(const String &strCaption,const String &strText,UINT type=MB_OK); +private: + MessageBox(); + static String getProductVersion(const VersionInfo &versionInfo); +}; + +inline +MessageBox::MessageBox() +{ +} + +inline +LRESULT MessageBox::messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(parent,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +LRESULT MessageBox::messageBox(const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(0,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +String MessageBox::getProductVersion(const VersionInfo &versionInfo) +{ + return String("[")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("]"); +} +#endif diff --git a/guitar/NoteType.cpp b/guitar/NoteType.cpp new file mode 100644 index 0000000..2877fe9 --- /dev/null +++ b/guitar/NoteType.cpp @@ -0,0 +1,80 @@ +#include + +const NoteType &NoteType::operator++(void) +{ + if(WholeNote==mNoteType)mNoteType=HalfNote; + else if(HalfNote==mNoteType)mNoteType=QuarterNote; + else if(QuarterNote==mNoteType)mNoteType=EighthNote; + else if(EighthNote==mNoteType)mNoteType=SixteenthNote; + else if(SixteenthNote==mNoteType)mNoteType=ThirtySecondNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixtyFourthNote; + else mNoteType++; + return *this; +} + +const NoteType &NoteType::operator--(void) +{ + if(HalfNote==mNoteType)mNoteType=WholeNote; + else if(QuarterNote==mNoteType)mNoteType=HalfNote; + else if(EighthNote==mNoteType)mNoteType=QuarterNote; + else if(SixteenthNote==mNoteType)mNoteType=EighthNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixteenthNote; + else if(SixtyFourthNote==mNoteType)mNoteType=ThirtySecondNote; + else mNoteType--; + return *this; +} + +NoteType &NoteType::fromString(const String &stringRep) +{ + if(stringRep.equals(toString(WholeNote)))mNoteType=WholeNote; + else if(stringRep.equals(toString(HalfNote)))mNoteType=HalfNote; + else if(stringRep.equals(toString(QuarterNote)))mNoteType=QuarterNote; + else if(stringRep.equals(toString(EighthNote)))mNoteType=EighthNote; + else if(stringRep.equals(toString(SixteenthNote)))mNoteType=SixteenthNote; + else if(stringRep.equals(toString(ThirtySecondNote)))mNoteType=ThirtySecondNote; + else if(stringRep.equals(toString(SixtyFourthNote)))mNoteType=SixtyFourthNote; + else mNoteType=stringRep.betweenString('/',0).toInt(); + return *this; +} + +Array NoteType::enumerate(void) +{ + Array values; + values.size(7); + values[0]=NoteType::toString(WholeNote); + values[1]=NoteType::toString(HalfNote); + values[2]=NoteType::toString(QuarterNote); + values[3]=NoteType::toString(EighthNote); + values[4]=NoteType::toString(SixteenthNote); + values[5]=NoteType::toString(ThirtySecondNote); + values[6]=NoteType::toString(SixtyFourthNote); + return values; +} + +String NoteType::toString(void)const +{ + return toString(getNoteType()); +} + +String NoteType::toString(TypeNote noteType) +{ + switch(noteType) + { + case WholeNote : + return "1/1"; + case HalfNote : + return "1/2"; + case QuarterNote : + return "1/4"; + case EighthNote : + return "1/8"; + case SixteenthNote : + return "1/16"; + case ThirtySecondNote : + return "1/32"; + case SixtyFourthNote : + return "1/64"; + default : + return "1/"+String().fromInt((int)noteType); + } +} diff --git a/guitar/NoteType.hpp b/guitar/NoteType.hpp new file mode 100644 index 0000000..f9c0567 --- /dev/null +++ b/guitar/NoteType.hpp @@ -0,0 +1,86 @@ +#ifndef _GUITAR_NOTETYPE_HPP_ +#define _GUITAR_NOTETYPE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class NoteType +{ +public: + enum TypeNote{WholeNote=1,HalfNote=2,QuarterNote=4,EighthNote=8, + SixteenthNote=16,ThirtySecondNote=32,SixtyFourthNote=64}; + NoteType(TypeNote noteType=QuarterNote); + virtual ~NoteType(); + const NoteType &operator++(void); + NoteType operator++(int postfix); + const NoteType &operator--(void); + NoteType operator--(int postfix); + TypeNote getNoteType(void)const; + int toInt(void)const; + NoteType &fromInt(int noteType); + NoteType &fromString(const String &stringRep); + void setNoteType(TypeNote noteType); + String toString(void)const; + static Array enumerate(void); + static String toString(TypeNote noteType); +private: + int mNoteType; +}; + +inline +NoteType::NoteType(TypeNote noteType) +: mNoteType(noteType) +{ +} + +inline +NoteType::~NoteType() +{ +} + +inline +NoteType NoteType::operator++(int postfix) +{ + NoteType noteType(*this); + operator++(); + return noteType; +} + +inline +NoteType NoteType::operator--(int postfix) +{ + NoteType noteType(*this); + operator--(); + return noteType; +} + +inline +int NoteType::toInt(void)const +{ + return (int)mNoteType; +} + +inline +NoteType &NoteType::fromInt(int noteType) +{ + mNoteType=(TypeNote)noteType; + return *this; +} + +inline +NoteType::TypeNote NoteType::getNoteType(void)const +{ + return (TypeNote)mNoteType; +} + +inline +void NoteType::setNoteType(TypeNote noteType) +{ + mNoteType=noteType; +} +#endif + + diff --git a/guitar/Range.hpp b/guitar/Range.hpp new file mode 100644 index 0000000..a848e22 --- /dev/null +++ b/guitar/Range.hpp @@ -0,0 +1,119 @@ +#ifndef _GUITAR_RANGE_HPP_ +#define _GUITAR_RANGE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Range; +typedef Block TabRanges; + +class Range +{ +public: + Range(); + virtual ~Range(); + int getBeginRange(void)const; + void setBeginRange(int beginRange); + int getEndRange(void)const; + void setEndRange(int endRange); + const String &getRangeName(void)const; + void setRangeName(const String &rangeName); + void autoName(void); + String toString(void)const; + String toTabbedString(void)const; +private: + enum{ShortNameLength=20}; + String createRangeName(void)const; + + int mBeginRange; + int mEndRange; + String mRangeName; +}; + +inline +Range::Range() +: mBeginRange(0), mEndRange(0) +{ +} + +inline +Range::~Range() +{ +} + +inline +int Range::getBeginRange(void)const +{ + return mBeginRange; +} + +inline +void Range::setBeginRange(int beginRange) +{ + mBeginRange=beginRange; +} + +inline +int Range::getEndRange(void)const +{ + return mEndRange; +} + +inline +void Range::setEndRange(int endRange) +{ + mEndRange=endRange; +} + +inline +const String &Range::getRangeName(void)const +{ + return mRangeName; +} + +inline +void Range::setRangeName(const String &rangeName) +{ + mRangeName=rangeName; +} + +inline +void Range::autoName(void) +{ + setRangeName(createRangeName()); +} + +inline +String Range::createRangeName(void)const +{ + String strRangeName("RANGE_"); + strRangeName+=String().fromInt(getBeginRange()); + strRangeName+=String("_"); + strRangeName+=String().fromInt(getEndRange()); + return strRangeName; +} + +inline +String Range::toString(void)const +{ + String strString(getRangeName()); + strString+=String("[")+String().fromInt(getBeginRange())+String("->")+String().fromInt(getEndRange()); + return strString; +} + +inline +String Range::toTabbedString(void)const +{ + String strItem; + String shortName; + + shortName=getRangeName(); + strItem+=shortName.substr(0,ShortNameLength-1)+"\t"; + strItem+=String().fromInt(getBeginRange())+"\t"; + strItem+=String().fromInt(getEndRange()); + return strItem; +} +#endif \ No newline at end of file diff --git a/guitar/RangeDlg.cpp b/guitar/RangeDlg.cpp new file mode 100644 index 0000000..5b65779 --- /dev/null +++ b/guitar/RangeDlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include + +RangeDialog::RangeDialog(void) +{ + mInitHandler.setCallback(this,&RangeDialog::initHandler); + mCreateHandler.setCallback(this,&RangeDialog::createHandler); + mCloseHandler.setCallback(this,&RangeDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog::RangeDialog(const RangeDialog &someRangeDialog) +{ // private implementation + *this=someRangeDialog; +} + +RangeDialog::~RangeDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog) +{ // private implementation + return *this; +} + +bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + mTabRanges=ranges; + mMaxRange=maxRange; + mIsSelection=isSelect; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST); + mRangeList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(55)); + mRangeList->setTabStops(stops); + setRangeList(); + if(mIsSelection) + { + enable(RANGE_INSERT,false); + enable(RANGE_DELETE,false); + setCaption("Range Select"); + } + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(mIsSelection)handleRangeSelection(); + endDialog(true); + break; + case RANGE_INSERT : + handleRangeInsert(); + break; + case RANGE_DELETE : + handleRangeDelete(); + break; + } + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + if(mIsSelection) + { + handleRangeSelection(); + endDialog(true); + } + else handleRangeEditSelection(); + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeDialog::setRangeList(void) +{ + for(int index=0;indexaddString(range.toTabbedString()); + } + mRangeList->setCurrent(0); + return; +} + +void RangeDialog::handleRangeSelection(void) +{ + mSelection=mRangeList->getCurrent(); +} + +void RangeDialog::handleRangeEditSelection(void) +{ + RangeEditDialog rangeEditDialog; + int currSel; + + currSel=mRangeList->getCurrent(); + if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return; + Range range=rangeEditDialog.getRange(); + mTabRanges.remove(currSel); + mTabRanges.insert(&range); + mRangeList->deleteString(currSel); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeInsert(void) +{ + RangeEditDialog rangeEditDialog; + Range range; + + if(!rangeEditDialog.perform(*this,range,mMaxRange))return; + range=rangeEditDialog.getRange(); + mTabRanges.insert(&range); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeDelete(void) +{ + int currSel; + + if(-1==(currSel=mRangeList->getCurrent()))return; + if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return; + mRangeList->deleteString(currSel); + mTabRanges.remove(currSel); + currSel--; + if(currSel<0)mRangeList->setCurrent(0); + else mRangeList->setCurrent(currSel); +} diff --git a/guitar/RangeDlg.hpp b/guitar/RangeDlg.hpp new file mode 100644 index 0000000..0fc857c --- /dev/null +++ b/guitar/RangeDlg.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_RANGEDLG_HPP_ +#define _GUITAR_RANGEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class TabEntry; + +class RangeDialog : public DWindow +{ +public: + RangeDialog(void); + virtual ~RangeDialog(); + bool perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect=false); + const TabRanges &getTabRanges(void)const; + int getSelection(void)const; +private: + RangeDialog(const RangeDialog &someRangeDialog); + RangeDialog &operator=(const RangeDialog &someRangeDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setRangeList(void); + void handleRangeSelection(void); + void handleRangeEditSelection(void); + void handleRangeInsert(void); + void handleRangeDelete(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mRangeList; + Point mDisplayPoint; + TabRanges mTabRanges; + bool mIsSelection; + int mMaxRange; + int mSelection; +}; + +inline +const TabRanges &RangeDialog::getTabRanges(void)const +{ + return mTabRanges; +} + +inline +int RangeDialog::getSelection(void)const +{ + return mSelection; +} +#endif diff --git a/guitar/RangeEditDlg.cpp b/guitar/RangeEditDlg.cpp new file mode 100644 index 0000000..e0daace --- /dev/null +++ b/guitar/RangeEditDlg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +RangeEditDialog::RangeEditDialog(void) +{ + mInitHandler.setCallback(this,&RangeEditDialog::initHandler); + mCreateHandler.setCallback(this,&RangeEditDialog::createHandler); + mCloseHandler.setCallback(this,&RangeEditDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeEditDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeEditDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog::RangeEditDialog(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + *this=someRangeEditDialog; +} + +RangeEditDialog::~RangeEditDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog &RangeEditDialog::operator=(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + return *this; +} + +bool RangeEditDialog::perform(GUIWindow &parentWindow,const Range &range,int maxRange) +{ + mRange=range; + mMaxRange=maxRange; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEEDITDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeEditDialog::initHandler(CallbackData &someCallbackData) +{ + if(mRange.getRangeName().isNull()&&!mRange.getBeginRange()&&!mRange.getEndRange())setCaption("Insert Range"); + setData(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeEditDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + getData(); + if(!isValid())errorMessage(); + else endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeEditDialog::setData(void)const +{ + setText(RANGEEDIT_NAME,mRange.getRangeName()); + setText(RANGEEDIT_BEGIN,String().fromInt(mRange.getBeginRange())); + setText(RANGEEDIT_END,String().fromInt(mRange.getEndRange())); +} + +void RangeEditDialog::getData(void) +{ + String strName; + String strBegin; + String strEnd; + + getText(RANGEEDIT_NAME,strName); + mRange.setRangeName(strName); + getText(RANGEEDIT_BEGIN,strBegin); + mRange.setBeginRange(strBegin.toInt()); + getText(RANGEEDIT_END,strEnd); + mRange.setEndRange(strEnd.toInt()); +} + +bool RangeEditDialog::isValid(void) +{ + if(mRange.getRangeName().isNull()) + { + mLastError="Range name cannot be empty."; + return false; + } + if(mRange.getBeginRange()<0) + { + mLastError="Begin range position must be greater than zero."; + return false; + } + if(mRange.getBeginRange()>mRange.getEndRange()) + { + mLastError="Begin range position must be smaller than end range position."; + return false; + } + if(mRange.getEndRange()>=mMaxRange) + { + mLastError="End range position must be less than "+String().fromInt(mMaxRange); + return false; + } + return true; +} + +void RangeEditDialog::errorMessage(void) +{ + MessageBox::messageBox(*this,"Invalid range.",mLastError.str()); +} diff --git a/guitar/RangeEditDlg.hpp b/guitar/RangeEditDlg.hpp new file mode 100644 index 0000000..3139037 --- /dev/null +++ b/guitar/RangeEditDlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_RANGEEDITDLG_HPP_ +#define _GUITAR_RANGEEDITDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class RangeEditDialog : public DWindow +{ +public: + RangeEditDialog(void); + virtual ~RangeEditDialog(); + bool perform(GUIWindow &parentWindow,const Range &range,int maxRange); + const Range &getRange(void)const; +private: + RangeEditDialog(const RangeEditDialog &someRangeEditDialog); + RangeEditDialog &operator=(const RangeEditDialog &someRangeEditDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setData(void)const; + void getData(void); + bool isValid(void); + void errorMessage(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Range mRange; + String mLastError; + int mMaxRange; +}; + +inline +const Range &RangeEditDialog::getRange(void)const +{ + return mRange; +} +#endif diff --git a/guitar/Registration.hpp b/guitar/Registration.hpp new file mode 100644 index 0000000..9871a01 --- /dev/null +++ b/guitar/Registration.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REGISTRATION_HPP_ +#define _GUITAR_REGISTRATION_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _GUITAR_LICENSE_HPP_ +#include +#endif + +// Registration procedure +// When application first comes up it will check registry for a license + +// If no license exists and there is no "install.gid" file it will create a 30 day license +// along with an "install.gid" hidden file in the product directory. +// If no license key exists and there IS an "install.gid" file in the product directory, +// the user will be prompted to enter a valid license key. +// +// +// If a license exists it will check the validity of the license by.... +// If the license is type "non expiring", the application will proceeed normally. +// If the license is type "expiring", it will check to see if the license has expired. +// If the license has expired, a dialog box will appear, prompting the user to +// enter a valid license. +// If no valid license is entered, then the application will exit. +// In addition, a dialog box will be available from the help screen to enable the user +// to enter in additional licenses + +class Registration +{ +public: + virtual ~Registration(); + static Registration &getInstance(); + bool hasLicense(void)const; + bool hasGID(void)const; + bool getLicense(License &license)const; + bool create30DayLicense(void)const; + bool create15DayLicense(void)const; + bool createPermanentLicense(void)const; + bool createLicense(int days)const; + bool removeLicense(void); + bool applyLicense(const String &uuencodedLicense); + bool applyLicense(Block &strLicenseLines); + License generatePermanentLicense(void)const; // return a permanent license +private: + Registration(); + static SmartPointer smRegistration; + + String mRegistrationKeyName; + String mSettingsLicenseKey; + RegKey mRegKeyRegistration; +}; +#endif diff --git a/guitar/ScaleDlg.cpp b/guitar/ScaleDlg.cpp new file mode 100644 index 0000000..6d3af02 --- /dev/null +++ b/guitar/ScaleDlg.cpp @@ -0,0 +1,395 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ScaleDialog::ScaleDialog(void) +: mInEdit(false) +{ + mInitHandler.setCallback(this,&ScaleDialog::initHandler); + mCreateHandler.setCallback(this,&ScaleDialog::createHandler); + mCloseHandler.setCallback(this,&ScaleDialog::closeHandler); + mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler); + mCommandHandler.setCallback(this,&ScaleDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog) +{ // private implementation + *this=someScaleDialog; +} + +ScaleDialog::~ScaleDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog) +{ // private implementation + return *this; +} + +bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; + return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + mScaleList->addString("BeBop Dominant"); + mScaleList->addString("BeBop Major"); + mScaleList->addString("BeBop Tonic Minor"); + mScaleList->addString("BeBop Minor"); + mScaleList->addString("Eight Tone Spanish"); + mScaleList->addString("Enigmatic"); + mScaleList->addString("Gypsy"); + mScaleList->addString("Hungarian"); + mScaleList->addString("Hungarian Minor"); + mScaleList->addString("Leading Whole Tone"); + mScaleList->addString("Lydian Minor"); + mScaleList->addString("Major Locrian"); + mScaleList->addString("Neapolitan Major"); + mScaleList->addString("Neapolitan Minor"); + mScaleList->addString("Oriental"); + mScaleList->addString("Todi"); + mScaleList->addString("Super Locrian"); + mScaleList->addString("Baroque"); + mScaleList->addString("Phrygian Dominant"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); + sendMessage(SCALEDLG_MUTE,BM_SETCHECK,1,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + case SCALEDLG_SPIN : + break; + case SCALEDLG_ROOT : + handleRoot(); + break; + case SCALEDLG_LIST : + if(LBN_KILLFOCUS!=someCallbackData.wmCommandCommand()&& + LBN_SETFOCUS!=someCallbackData.wmCommandCommand()) + handleList(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void ScaleDialog::handleOk(void) +{ +} + +void ScaleDialog::handleRoot(void) +{ + String strRoot; + + if(mInEdit)return; + mInEdit=true; + getText(SCALEDLG_ROOT,strRoot); + strRoot.upper(); + if(strRoot=="0")setText(SCALEDLG_ROOT,"A"); + else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#"); + else if(strRoot=="2")setText(SCALEDLG_ROOT,"B"); + else if(strRoot=="3")setText(SCALEDLG_ROOT,"C"); + else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#"); + else if(strRoot=="5")setText(SCALEDLG_ROOT,"D"); + else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#"); + else if(strRoot=="7")setText(SCALEDLG_ROOT,"E"); + else if(strRoot=="8")setText(SCALEDLG_ROOT,"F"); + else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#"); + else if(strRoot=="10")setText(SCALEDLG_ROOT,"G"); + else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#"); + else {mInEdit=false;return;} + if(!showScale())setText(SCALEDLG_ROOT,"A"); + mInEdit=false; +} + +void ScaleDialog::handleList(void) +{ + showScale(); +} + +bool ScaleDialog::showScale(void) +{ + String strScale; + String strRoot; + DWORD current; + + current=mScaleList->getCurrent(); + getText(SCALEDLG_ROOT,strRoot); + if(Note::None==Note::getNoteType(strRoot))return false; + mScaleList->getText(strScale,current); + playScale(strRoot,strScale); + return true; +} + +void ScaleDialog::playScale(const String &root,const String &scale) +{ + if(scale=="Ionian") + { + IonianScale ionianScale(Note::getNoteType(root)); + playScale(ionianScale); + } + else if(scale=="Dorian") + { + DorianScale dorianScale(Note::getNoteType(root)); + playScale(dorianScale); + } + else if(scale=="Phrygian") + { + PhrygianScale phrygianScale(Note::getNoteType(root)); + playScale(phrygianScale); + } + else if(scale=="Lydian") + { + LydianScale lydianScale(Note::getNoteType(root)); + playScale(lydianScale); + } + else if(scale=="Mixolydian") + { + MixolydianScale mixolydianScale(Note::getNoteType(root)); + playScale(mixolydianScale); + } + else if(scale=="Aeolian") + { + AeolianScale aeolianScale(Note::getNoteType(root)); + playScale(aeolianScale); + } + else if(scale=="Locrian") + { + LocrianScale locrianScale(Note::getNoteType(root)); + playScale(locrianScale); + } + else if(scale=="Pentatonic Minor") + { + PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root)); + playScale(pentatonicMinorScale); + } + else if(scale=="Harmonic Minor") + { + HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root)); + playScale(harmonicMinorScale); + } + else if(scale=="Melodic Minor") + { + MelodicMinorScale melodicMinorScale(Note::getNoteType(root)); + playScale(melodicMinorScale); + } + else if(scale=="Dorian-II") + { + DorianIIScale dorianIIScale(Note::getNoteType(root)); + playScale(dorianIIScale); + } + else if(scale=="Lydian Augmented") + { + LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root)); + playScale(lydianAugmentedScale); + } + else if(scale=="Lydian Dominant") + { + LydianDominantScale lydianDominantScale(Note::getNoteType(root)); + playScale(lydianDominantScale); + } + else if(scale=="Locrian2") + { + Locrian2Scale locrian2Scale(Note::getNoteType(root)); + playScale(locrian2Scale); + } + else if(scale=="Altered") + { + AlteredScale alteredScale(Note::getNoteType(root)); + playScale(alteredScale); + } + else if(scale=="Diminished(Whole Step)") + { + DiminishedWholeScale diminishedWholeScale(Note::getNoteType(root)); + playScale(diminishedWholeScale); + } + else if(scale=="Diminished(Half Step)") + { + DiminishedHalfScale diminishedHalfScale(Note::getNoteType(root)); + playScale(diminishedHalfScale); + } + else if(scale=="Whole Tone") + { + WholeToneScale wholeToneScale(Note::getNoteType(root)); + playScale(wholeToneScale); + } + else if(scale=="BeBop Dominant") + { + BeBopDominantScale bebopDominantScale(Note::getNoteType(root)); + playScale(bebopDominantScale); + } + else if(scale=="BeBop Major") + { + BeBopMajorScale bebopMajorScale(Note::getNoteType(root)); + playScale(bebopMajorScale); + } + else if(scale=="BeBop Tonic Minor") + { + BeBopTonicMinorScale bebopTonicMinorScale(Note::getNoteType(root)); + playScale(bebopTonicMinorScale); + } + else if(scale=="BeBop Minor") + { + BeBopMinorScale bebopMinorScale(Note::getNoteType(root)); + playScale(bebopMinorScale); + } + else if(scale=="Eight Tone Spanish") + { + EightToneSpanishScale eightToneSpanishScale(Note::getNoteType(root)); + playScale(eightToneSpanishScale); + } + else if(scale=="Enigmatic") + { + EnigmaticScale enigmaticScale(Note::getNoteType(root)); + playScale(enigmaticScale); + } + else if(scale=="Gypsy") + { + GypsyScale gypsyScale(Note::getNoteType(root)); + playScale(gypsyScale); + } + else if(scale=="Hungarian") + { + HungarianScale hungarianScale(Note::getNoteType(root)); + playScale(hungarianScale); + } + else if(scale=="Hungarian Minor") + { + HungarianMinorScale hungarianMinorScale(Note::getNoteType(root)); + playScale(hungarianMinorScale); + } + else if(scale=="Leading Whole Tone") + { + LeadingWholeToneScale leadingWholeToneScale(Note::getNoteType(root)); + playScale(leadingWholeToneScale); + } + else if(scale=="Lydian Minor") + { + LydianMinorScale lydianMinorScale(Note::getNoteType(root)); + playScale(lydianMinorScale); + } + else if(scale=="Major Locrian") // same as LydianMinor + { + MajorLocrianScale majorLocrianScale(Note::getNoteType(root)); + playScale(majorLocrianScale); + } + else if(scale=="Neapolitan Major") + { + NeapolitanMajorScale neapolitanMajorScale(Note::getNoteType(root)); + playScale(neapolitanMajorScale); + } + else if(scale=="Neapolitan Minor") + { + NeapolitanMinorScale neapolitanMinorScale(Note::getNoteType(root)); + playScale(neapolitanMinorScale); + } + else if(scale=="Oriental") + { + OrientalScale orientalScale(Note::getNoteType(root)); + playScale(orientalScale); + } + else if(scale=="Todi") + { + TodiScale todiScale(Note::getNoteType(root)); + playScale(todiScale); + } + else if(scale=="Super Locrian") + { + SuperLocrianScale superLocrianScale(Note::getNoteType(root)); + playScale(superLocrianScale); + } + else if(scale=="Baroque") + { + BaroqueScale baroqueScale(Note::getNoteType(root)); + playScale(baroqueScale); + } + else if(scale=="Phrygian Dominant") + { + PhrygianDominantScale phrygianDominantScale(Note::getNoteType(root)); + playScale(phrygianDominantScale); + } +} + +void ScaleDialog::playScale(const Scale &scale) +{ + int command=BST_CHECKED==sendMessage(SCALEDLG_MUTE,BM_GETCHECK,0,0L)?CBCommands::FBShowScale:CBCommands::FBPlayScale; + CallbackData cbData(command,(LPARAM)&scale); + CursorControl cursorControl; + cursorControl.waitCursor(true); + mPlayNoteHandler.callback(cbData); + cursorControl.waitCursor(false); +} + + diff --git a/guitar/ScaleDlg.hpp b/guitar/ScaleDlg.hpp new file mode 100644 index 0000000..291ebaa --- /dev/null +++ b/guitar/ScaleDlg.hpp @@ -0,0 +1,59 @@ +#ifndef _GUITAR_SCALEDLG_HPP_ +#define _GUITAR_SCALEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class Scale; + +class ScaleDialog : public DWindow +{ +public: + ScaleDialog(void); + virtual ~ScaleDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + ScaleDialog(const ScaleDialog &someScaleDialog); + ScaleDialog &operator=(const ScaleDialog &someScaleDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void handleRoot(void); + void handleList(void); + bool showScale(void); + void playScale(const Scale &scale); + void playScale(const String &root,const String &scale); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mScaleList; + SmartPointer mMIDIDevice; + CallbackPointer mPlayNoteHandler; + Fretboard mFretboard; + bool mInEdit; +}; +#endif diff --git a/guitar/ScrollInfo.cpp b/guitar/ScrollInfo.cpp new file mode 100644 index 0000000..76ba573 --- /dev/null +++ b/guitar/ScrollInfo.cpp @@ -0,0 +1,136 @@ +#include + +bool ScrollInfo::pageDown(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()+PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +bool ScrollInfo::pageUp(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()-PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + diff --git a/guitar/ScrollInfo.hpp b/guitar/ScrollInfo.hpp new file mode 100644 index 0000000..2dc42c1 --- /dev/null +++ b/guitar/ScrollInfo.hpp @@ -0,0 +1,274 @@ +#ifndef _GUITAR_SCROLLINFO_HPP_ +#define _GUITAR_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); + bool pageUp(void); + bool pageDown(void); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + + if(scrollableObjectWidth()==width&&scrollableObjectHeight()==height)return; + + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_REGISTRY_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class Sequencer : private MIDIOutputDevice +{ +public: + Sequencer(); + virtual ~Sequencer(); + bool midiEvent(const PureEvent &somePureEvent); + bool clearNotes(void); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + MIDIOutputDevice &getDevice(void); +private: + void changeProgram(void); +}; + +inline +Sequencer::Sequencer() +: MIDIOutputDevice(Registry().getMIDIOutputDevice()) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::Sequencer] Sequencer()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + changeProgram(); +} + +inline +Sequencer::~Sequencer() +{ + GlobalDefs::outDebug("[Sequencer::Sequencer] Sequencer()",GlobalDefs::Info); + closeDevice(); +} + +inline +bool Sequencer::midiEvent(const PureEvent &somePureEvent) +{ + GlobalDefs::outDebug(String("[Sequencer::midiEvent] ")+somePureEvent.toString(),GlobalDefs::Info); + return MIDIOutputDevice::midiEvent(somePureEvent); +} + +inline +bool Sequencer::hasDevice(void)const +{ + GlobalDefs::outDebug(String("[Sequencer::hasDevice] "),GlobalDefs::Info); + return MIDIOutputDevice::hasDevice(); +} + +inline +void Sequencer::closeDevice(void) +{ + GlobalDefs::outDebug(String("[Sequencer::closeDevice] "),GlobalDefs::Info); + MIDIOutputDevice::closeDevice(); +} + +inline +bool Sequencer::openDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::openDevice] registry.getMIDIOutputDevice()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; + changeProgram(); + return true; +} + +inline +bool Sequencer::clearNotes(void) +{ + GlobalDefs::outDebug(String("[Sequencer::clearNotes]"),GlobalDefs::Info); + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +} + +inline +MIDIOutputDevice &Sequencer::getDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::getDevice]"),GlobalDefs::Info); + if(!hasDevice()) + { + GlobalDefs::outDebug(String("[Sequencer::getDevice] OpenDevice"),GlobalDefs::Info); + MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()); + changeProgram(); + } + return (MIDIOutputDevice&)*this; +} + +inline +void Sequencer::changeProgram(void) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::changeProgram]"),GlobalDefs::Info); + midiEvent(ProgramChange(registry.getInstrument().program()).getEvent()); +} +#endif diff --git a/guitar/TabEntry.cpp b/guitar/TabEntry.cpp new file mode 100644 index 0000000..f9bacba --- /dev/null +++ b/guitar/TabEntry.cpp @@ -0,0 +1,143 @@ +#include +#include +#include +#include +#include + +TabEntry::TabEntry(const TabEntry &entry) +{ + *this=entry; +} + +TabEntry &TabEntry::operator=(const TabEntry &entry) +{ + remove(); + for(int index=0;index&)*this).operator[](index)==((TabEntry&)entry)[index]))return false; + } + return true; +} + +bool TabEntry::play(MIDIOutputDevice &midiDevice,bool useDelay)const +{ + if(!midiDevice.hasDevice())return false; +// midiDevice.midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); + for(int index=0;index::remove(entryIndex); + return true; +} + +String TabEntry::toString(void)const +{ + String str; + + str+="TABENTRY "; + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif +#ifndef _GUITAR_TIMING_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class TabEntry; +typedef Block TabEntries; + +class TabEntry : public Block +{ +public: + TabEntry(); + TabEntry(const TabEntry &entry); + virtual ~TabEntry(); + bool play(MIDIOutputDevice &midiDevice,bool useDelay=true)const; + bool operator==(const TabEntry &entry)const; + TabEntry &operator=(const TabEntry &entry); + const NoteType &getNoteType(void)const; + void setNoteType(const NoteType ¬eType); + String toString(void)const; + bool fromString(String strText); + bool fromChord(const Music::Chord &chord); + bool contains(int string,int &entryIndex); + bool contains(int string); + bool remove(int string,int fret); + void remove(void); + bool addFrettedNote(int string,const FrettedNote &frettedNote); + bool setFrettedNote(int string,const FrettedNote &frettedNote); + const String &getComment(void)const; + void setComment(const String &comment); + bool hasSeparator(void)const; + void hasSeparator(bool hasSeparator); +private: + void delay(void)const; + + NoteType mNoteType; + String mComment; + bool mHasSeparator; +}; + +inline +TabEntry::TabEntry() +: mHasSeparator(false) +{ +} + +inline +TabEntry::~TabEntry() +{ +} + +inline +const NoteType &TabEntry::getNoteType(void)const +{ + return mNoteType; +} + +inline +void TabEntry::setNoteType(const NoteType ¬eType) +{ + mNoteType=noteType; +} + +inline +void TabEntry::remove(void) +{ + Block::remove(); +} + +inline +const String &TabEntry::getComment(void)const +{ + return mComment; +} + +inline +void TabEntry::setComment(const String &comment) +{ + mComment=comment; +} + +inline +bool TabEntry::hasSeparator(void)const +{ + return mHasSeparator; +} + +inline +void TabEntry::hasSeparator(bool hasSeparator) +{ + mHasSeparator=hasSeparator; +} +#endif diff --git a/guitar/TabLines.cpp b/guitar/TabLines.cpp new file mode 100644 index 0000000..a56ae0d --- /dev/null +++ b/guitar/TabLines.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +// returns -1 on error, 1 if added to entry, 0 otherwise + +int TabLines::firstElement(TabEntry &entry,Fretboard &fretboard) +{ + TabElement element; + + entry.remove(); + for(int index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabEntry; +class Fretboard; + +typedef Element TabElement[6]; + +class TabLines : public Array +{ +public: + enum{NumLines=6}; + TabLines(); + int firstElement(TabEntry &entry,Fretboard &fretboard); + int nextElement(TabEntry &entry,Fretboard &fretboard); + virtual ~TabLines(); +private: + bool haveElement(TabElement &elements)const; + bool validate(Element &elements)const; + void insert(TabEntry &entry,TabElement &elements,Fretboard &fretboard); + void synchronize(void); +}; + +inline +TabLines::TabLines() +{ + size(NumLines); +} + +inline +TabLines::~TabLines() +{ +} +#endif diff --git a/guitar/TabView.cpp b/guitar/TabView.cpp new file mode 100644 index 0000000..ba2f85b --- /dev/null +++ b/guitar/TabView.cpp @@ -0,0 +1,95 @@ +#include + +TabView::TabView(void) +{ + mCreateHandler.setCallback(this,&TabView::createHandler); + mSizeHandler.setCallback(this,&TabView::sizeHandler); + mPaintHandler.setCallback(this,&TabView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&TabView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&TabView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabView::leftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +TabView::~TabView() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType TabView::createHandler(CallbackData &someCallbackData) +{ + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType TabView::sizeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType TabView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void TabView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String TabView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void TabView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(LTGRAY_BRUSH); +} + +void TabView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/TabView.hpp b/guitar/TabView.hpp new file mode 100644 index 0000000..6f9ef25 --- /dev/null +++ b/guitar/TabView.hpp @@ -0,0 +1,42 @@ +#ifndef _GUITAR_TABVIEW_HPP_ +#define _GUITAR_TABVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class StatusBarEx; + +class TabView : public MDIWindow +{ +public: + TabView(void); + virtual ~TabView(); + String getTitle(void)const; +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,WindowWidth=565,WindowHeight=210}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + SmartPointer mStatusBar; +}; +#endif diff --git a/guitar/TabWriter.cpp b/guitar/TabWriter.cpp new file mode 100644 index 0000000..d3f5222 --- /dev/null +++ b/guitar/TabWriter.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + + GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug); + if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb")) + { + GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug); + return false; + } + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + initLines(); + setHeader(); + for(int index=0,entryCount=0;indexMaxItems) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outFile); + outFile.writeLine(String(" ")); + initLines(); + setHeader(); + entryCount=0; + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabWriter : public Array +{ +public: + TabWriter(); + virtual ~TabWriter(); + bool write(TabEntries &entries,const String &strPathTabFile); +private: + enum {MaxItems=30,NumLines=6}; + void writeLines(File &outFile); + void initLines(void); + void setHeader(void); + void synchronize(void); +}; + +inline +TabWriter::TabWriter() +{ +} + +inline +TabWriter::~TabWriter() +{ +} +#endif diff --git a/guitar/Tablature.hpp b/guitar/Tablature.hpp new file mode 100644 index 0000000..c0c1caa --- /dev/null +++ b/guitar/Tablature.hpp @@ -0,0 +1,96 @@ +#ifndef _GUITAR_TABLATURE_HPP_ +#define _GUITAR_TABLATURE_HPP_ +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_TABLINES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class GUIWindow; +class TabPage; + +class Tablature +{ +public: + typedef enum LastError{None,FileOpenError,NoTabsParsedError,NoFrettedNotesError}; + Tablature(); + Tablature(const String &pathFileName); + virtual ~Tablature(); + bool open(const String &pathFileTablature); // open tablature file + bool import(String pathFileTablature); // import tablature file into project + bool save(void); // save tablature file + bool saveAs(const String &pathFileTablature); // save tablature file as... + bool openProject(const String &pathFileName); // open existing project file + bool saveProject(const String &pathFileName=String()); // save current project + bool play(MIDIOutputDevice &midiDevice); + LastError getLastError(void)const; + const String &getPathFileTablature(void)const; + const String &getPathFileProject(void)const; + const TabEntries &getTabEntries(void)const; + void setTabEntries(const TabEntries &entries); + const TabRanges &getTabRanges(void)const; + void setTabRanges(const TabRanges &ranges); + static String getPathFileProject(const String &pathFileTablature); +private: + bool loadTabFile(const String &pathFileName); + bool parseTab(void); + bool isTabLine(const String &strLine,int &startElement)const; + bool setTypeAt(int index,const NoteType ¬eType); + void parseTypes(String strLine); + void parseRange(String strLine); + void parseComment(String strLine); + void parseSeparator(String strLine); + + String getTypes(void)const; + + TabEntries mTabEntries; + TabRanges mTabRanges; + Block mTablature; + Fretboard mFretboard; + String mPathFileName; + LastError mLastError; + String mPathFileTablature; + String mPathFileProject; +}; + +inline +Tablature::Tablature() +{ +} + +inline +Tablature::Tablature(const String &pathFileName) +{ + open(pathFileName); +} + +inline +Tablature::~Tablature() +{ +} + +inline +Tablature::LastError Tablature::getLastError(void)const +{ + return mLastError; +} + +inline +const String &Tablature::getPathFileTablature(void)const +{ + return mPathFileTablature; +} + +inline +const String &Tablature::getPathFileProject(void)const +{ + return mPathFileProject; +} +#endif diff --git a/guitar/Timing.cpp b/guitar/Timing.cpp new file mode 100644 index 0000000..f638d7a --- /dev/null +++ b/guitar/Timing.cpp @@ -0,0 +1,138 @@ +#include +#include +#include + +int Timing::mMicrosecondsPerQuarterNote=Timing::microsecondsPerQuarterNote(Registry().getMicrosecondsPerQuarterNote()); +int Timing::mMillisecondsPerWholeNote; +int Timing::mMillisecondsPerHalfNote; +int Timing::mMillisecondsPerQuarterNote; +int Timing::mMillisecondsPerEigthNote; +int Timing::mMillisecondsPerSixteenthNote; +int Timing::mMillisecondsPerThirtySecondNote; +int Timing::mMillisecondsPerSixtyFourthNote; + +int Timing::microsecondsPerQuarterNote(int microsecondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=microsecondsPerQuarterNote; + mMillisecondsPerQuarterNote=(double)microsecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; + return mMicrosecondsPerQuarterNote; +} + +int Timing::microsecondsPerQuarterNote(void) +{ + return mMicrosecondsPerQuarterNote; +} + +void Timing::secondsPerQuarterNote(float secondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=secondsPerQuarterNote*1000000.00;; + mMillisecondsPerQuarterNote=(double)mMicrosecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; +} + +int Timing::millisecondsPerWholeNote(void) +{ + return mMillisecondsPerWholeNote; +} + +int Timing::millisecondsPerHalfNote(void) +{ + return mMillisecondsPerHalfNote; +} + +int Timing::millisecondsPerQuarterNote(void) +{ + return mMillisecondsPerQuarterNote; +} + +int Timing::millisecondsPerEightNote(void) +{ + return mMillisecondsPerEigthNote; +} + +int Timing::millisecondsPerSixteenthNote(void) +{ + return mMillisecondsPerSixteenthNote; +} + +int Timing::millisecondsPerThirtySecondNote(void) +{ + return mMillisecondsPerThirtySecondNote; +} + +int Timing::millisecondsPerSixtyFourthNote(void) +{ + return mMillisecondsPerSixtyFourthNote; +} + +int Timing::getDelay(const NoteType ¬eType) +{ + switch(noteType.getNoteType()) + { + case NoteType::WholeNote : + return millisecondsPerWholeNote(); + case NoteType::HalfNote : + return millisecondsPerHalfNote(); + case NoteType::QuarterNote : + return millisecondsPerQuarterNote(); + case NoteType::EighthNote : + return millisecondsPerEightNote(); + case NoteType::SixteenthNote : + return millisecondsPerSixteenthNote(); + case NoteType::ThirtySecondNote : + return millisecondsPerThirtySecondNote(); + case NoteType::SixtyFourthNote : + return millisecondsPerSixtyFourthNote(); + default : + return millisecondsPerSixtyFourthNote(); + } +} + +String Timing::toString(void) +{ + String strTiming; + strTiming+=String("1/1=")+String().fromInt(millisecondsPerWholeNote())+String("ms, "); + strTiming+=String("1/2=")+String().fromInt(millisecondsPerHalfNote())+String("ms, "); + strTiming+=String("1/4=")+String().fromInt(millisecondsPerQuarterNote())+String("ms, "); + strTiming+=String("1/8=")+String().fromInt(millisecondsPerEightNote())+String("ms, "); + strTiming+=String("1/16=")+String().fromInt(millisecondsPerSixteenthNote())+String("ms, "); + strTiming+=String("1/32=")+String().fromInt(millisecondsPerThirtySecondNote())+String("ms, "); + strTiming+=String("1/64=")+String().fromInt(millisecondsPerSixtyFourthNote())+String("ms, "); + return strTiming; +} + + +/* +microseconds per quarter note = 631578 +milliseconds per quarter note = 631578/1000 = 631 + 631578*.001 = 631 + +msecs per qtr note=usecs per qtr note *.001 + +quarter note = msecs per 4th note +eigth note = msecs/2 +sixteenth note = msecs/4 +thirty second note = msecs/8 +sixty fourth note = msecs/16 + +(ie) +microsecs millisecs 4th note 8th note 16th note 32nd note 64th note +--------- --------- -------- -------- --------- --------- --------- + 631578 631 631 315 157 78 39 + +options +seconds per qtr note: .5 + +msecs per qtr note=(seconds_per_qtr_note*1000) +*/ \ No newline at end of file diff --git a/guitar/Timing.hpp b/guitar/Timing.hpp new file mode 100644 index 0000000..96bcf39 --- /dev/null +++ b/guitar/Timing.hpp @@ -0,0 +1,48 @@ +#ifndef _GUITAR_TIMING_HPP_ +#define _GUITAR_TIMING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif + +class Timing +{ +public: + static int microsecondsPerQuarterNote(int microsecondsPerQuarterNote); + static int microsecondsPerQuarterNote(void); + static void secondsPerQuarterNote(float secondsPerQuarterNote); + static int millisecondsPerWholeNote(void); + static int millisecondsPerHalfNote(void); + static int millisecondsPerQuarterNote(void); + static int millisecondsPerEightNote(void); + static int millisecondsPerSixteenthNote(void); + static int millisecondsPerThirtySecondNote(void); + static int millisecondsPerSixtyFourthNote(void); + static int getDelay(const NoteType ¬eType); + static String toString(void); +private: + Timing(); + virtual ~Timing(); + static int mMicrosecondsPerQuarterNote; + static int mMillisecondsPerWholeNote; + static int mMillisecondsPerHalfNote; + static int mMillisecondsPerQuarterNote; + static int mMillisecondsPerEigthNote; + static int mMillisecondsPerSixteenthNote; + static int mMillisecondsPerThirtySecondNote; + static int mMillisecondsPerSixtyFourthNote; +}; + +inline +Timing::Timing() +{ +} + +inline +Timing::~Timing() +{ +} +#endif + diff --git a/guitar/Tuning.cpp b/guitar/Tuning.cpp new file mode 100644 index 0000000..c4b1cb6 --- /dev/null +++ b/guitar/Tuning.cpp @@ -0,0 +1,20 @@ +#include +#include + +void Tuning::setStandardTuning(void) +{ + size(StandardTuningStrings); + operator[](0)=Note(Note::E,3); + operator[](1)=Note(Note::A,3); + operator[](2)=Note(Note::D,4); + operator[](3)=Note(Note::G,4); + operator[](4)=Note(Note::B,4); + operator[](5)=Note(Note::E,operator[](4).getOctave()+1); +} + +// virtuals + +int Tuning::getDelay(void)const +{ + return Delay; +} diff --git a/guitar/Tuning.hpp b/guitar/Tuning.hpp new file mode 100644 index 0000000..d4d41e7 --- /dev/null +++ b/guitar/Tuning.hpp @@ -0,0 +1,43 @@ +#ifndef _GUITAR_TUNING_HPP_ +#define _GUITAR_TUNING_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif + +class Tuning : public Notes +{ +public: + enum {StandardTuningStrings=6,Delay=1000}; + Tuning(); + virtual ~Tuning(); + int getStrings(void)const; + void setStrings(int strings); + void setStandardTuning(void); +protected: + virtual int getDelay(void)const; +private: +}; + +inline +Tuning::Tuning() +{ + setStandardTuning(); +} + +inline +Tuning::~Tuning() +{ +} + +inline +int Tuning::getStrings(void)const +{ + return size(); +} + +inline +void Tuning::setStrings(int strings) +{ + size(strings); +} +#endif diff --git a/guitar/backup/20030501/Action.hpp b/guitar/backup/20030501/Action.hpp new file mode 100644 index 0000000..46afb7f --- /dev/null +++ b/guitar/backup/20030501/Action.hpp @@ -0,0 +1,155 @@ +#ifndef _GUITAR_ACTION_HPP_ +#define _GUITAR_ACTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Action +{ +public: + typedef enum Attribute{None,Pick,PullOff,Bend,HammerOn,Release,SlideDown,SlideUp}; + Action(); + Action(Attribute action); + Action(const String &strAction); + virtual ~Action(); + Attribute getAction(void)const; + void setAction(Attribute action); + String toString(void)const; + const Action &fromString(const String &string); + String toStringShort(void)const; + static Array enumerate(void); +private: + Attribute mAction; +}; + +inline +Action::Action() +: mAction(None) +{ +} + +inline +Action::Action(Attribute action) +: mAction(action) +{ +} + +inline +Action::Action(const String &strAction) +{ + fromString(strAction); +} + +inline +Action::~Action() +{ +} + +inline +Action::Attribute Action::getAction(void)const +{ + return mAction; +} + +inline +void Action::setAction(Attribute action) +{ + mAction=action; +} + +inline +String Action::toStringShort(void)const +{ + switch(mAction) + { + case PullOff : + return "p"; + break; + case Bend : + return "b"; + break; + case HammerOn : + return "h"; + break; + case Release : + return "r"; + break; + case SlideDown : + return "s"; + break; + case SlideUp : + return "s"; + break; + case Pick : + case None : + default : + return ""; + break; + } +} + +inline +String Action::toString(void)const +{ + switch(mAction) + { + case Pick : + return "Pick"; + break; + case PullOff : + return "PullOff"; + break; + case Bend : + return "Bend"; + break; + case HammerOn : + return "HammerOn"; + break; + case Release : + return "Release"; + break; + case SlideDown : + return "SlideDown"; + break; + case SlideUp : + return "SlideUp"; + break; + case None : + default : + return "None"; + break; + } +} + +inline +const Action &Action::fromString(const String &string) +{ + if(string=="Pick")mAction=Pick; + else if(string=="PullOff")mAction=PullOff; + else if(string=="Bend")mAction=Bend; + else if(string=="HammerOn")mAction=HammerOn; + else if(string=="Release")mAction=Release; + else if(string=="SlideDown")mAction=SlideDown; + else if(string=="SlideUp")mAction=SlideUp; + else mAction=None; + return *this; +} + +inline +Array Action::enumerate(void) +{ + Array actions; + actions.size(7); + actions[0]="Pick"; + actions[1]="PullOff"; + actions[2]="Bend"; + actions[3]="HammerOn"; + actions[4]="Release"; + actions[5]="SlideDown"; + actions[6]="SlideUp"; + return actions; +} +#endif diff --git a/guitar/backup/20030501/BrowserHelper.cpp b/guitar/backup/20030501/BrowserHelper.cpp new file mode 100644 index 0000000..c5be31c --- /dev/null +++ b/guitar/backup/20030501/BrowserHelper.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool BrowserHelper::launchBrowser(const String &strCommand) +{ + String strBrowser; + Process process; + + if(!getBrowser(strBrowser))return false; + process.createProcess(strBrowser,String(" ")+strCommand,false); + return true; +} + +bool BrowserHelper::getBrowser(String &strBrowser) +{ + RegKey regKey(RegKey::LocalMachine); + String strCommand; + int argPos; + + if(!regKey.openKey(String(STRING_BROWSERKEY))) + { + if(!regKey.openKey(String(STRING_BROWSERKEYALT)))return false; + } + if(!regKey.enumValue(0,String(STRING_BROWSERCOMMAND),strCommand)||strCommand.isNull()||!strCommand.length()) + return false; + strCommand.removeTokens("'\""); + if(-1!=(argPos=strCommand.strpos("-")))strCommand=strCommand.substr(0,argPos-1); + strBrowser=strCommand; + return true; +} diff --git a/guitar/backup/20030501/BrowserHelper.hpp b/guitar/backup/20030501/BrowserHelper.hpp new file mode 100644 index 0000000..99d2945 --- /dev/null +++ b/guitar/backup/20030501/BrowserHelper.hpp @@ -0,0 +1,20 @@ +#ifndef _GUITAR_BROWSERHELPER_HPP_ +#define _GUITAR_BROWSERHELPER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class BrowserHelper +{ +public: + static bool getBrowser(String &strBrowser); + static bool launchBrowser(const String &strCommand); +private: + BrowserHelper(); +}; + +inline +BrowserHelper::BrowserHelper() +{ +} +#endif diff --git a/guitar/backup/20030501/ChordDlg.cpp b/guitar/backup/20030501/ChordDlg.cpp new file mode 100644 index 0000000..fda4197 --- /dev/null +++ b/guitar/backup/20030501/ChordDlg.cpp @@ -0,0 +1,149 @@ +#include +#include +#include +#include +#include + +ChordDialog::ChordDialog(void) +{ + mInitHandler.setCallback(this,&ChordDialog::initHandler); + mCreateHandler.setCallback(this,&ChordDialog::createHandler); + mCloseHandler.setCallback(this,&ChordDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog::ChordDialog(const ChordDialog &someChordDialog) +{ // private implementation + *this=someChordDialog; +} + +ChordDialog::~ChordDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) +{ // private implementation + return *this; +} + +bool ChordDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); + mChordList.disposition(PointerDisposition::Delete); + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + setChordList(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +void ChordDialog::setChordList(void) +{ + CursorControl cursor; + String strInsert; + + cursor.waitCursor(true); + for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) + { + String strResource(rcIndex); + strInsert=strResource.betweenString(0,'['); + strInsert.trimRight(); + strInsert+=strResource.betweenString(']',0); + mChordList->insertString(strInsert); + } + cursor.waitCursor(false); + setText(CHORDS_COUNT,"chord count:"+String().fromInt(rcIndex-ResBegin)); +} + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); + if(!mMIDIDevice->getDevice().hasDevice()) + mMIDIDevice->getDevice().openDevice(); + for(int index=0;indexgetDevice()); + } +} + +void ChordDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + entry.insert(&frettedNote); + } +} + diff --git a/guitar/backup/20030501/ChordDlg.hpp b/guitar/backup/20030501/ChordDlg.hpp new file mode 100644 index 0000000..f79b3ea --- /dev/null +++ b/guitar/backup/20030501/ChordDlg.hpp @@ -0,0 +1,54 @@ +#ifndef _GUITAR_CHORDDLG_HPP_ +#define _GUITAR_CHORDDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordDialog : public DWindow +{ +public: + ChordDialog(void); + virtual ~ChordDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordDialog(const ChordDialog &someChordDialog); + ChordDialog &operator=(const ChordDialog &someChordDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setChordList(void); + void handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mChordList; + SmartPointer mMIDIDevice; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20030501/DragQueryFile.hpp b/guitar/backup/20030501/DragQueryFile.hpp new file mode 100644 index 0000000..58d205c --- /dev/null +++ b/guitar/backup/20030501/DragQueryFile.hpp @@ -0,0 +1,39 @@ +#ifndef _COMMON_DRAGQUERYFILE_HPP_ +#define _COMMON_DRAGQUERYFILE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DragQueryFile +{ +public: + static bool getFileNames(HDROP hDrop,Block &strFileNames); +private: +}; + +inline +bool DragQueryFile::getFileNames(HDROP hDrop,Block &strFileNames) +{ + String strBuffer; + UINT numFiles; + + strFileNames.remove(); + strBuffer.reserve(512); + if(0==hDrop)return false; + numFiles=::DragQueryFile(hDrop,0xFFFFFFFF,0,0); + if(!numFiles)return false; + for(int index=0;index +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class Element +{ +public: + Element(); + Element(int fret,Action action=Action::None); + virtual ~Element(); + Action::Attribute getAction(void)const; + void setAction(Action::Attribute action); + void setFret(int fret); + int getFret(void)const; + String toString(void)const; +private: + int mFret; + Action mAction; +}; + +inline +Element::Element() +: mFret(0) +{ +} + +inline +Element::Element(int fret,Action action) +: mFret(fret), mAction(action) +{ +} + +inline +Element::~Element() +{ +} + +inline +Action::Attribute Element::getAction(void)const +{ + return mAction.getAction(); +} + +inline +void Element::setAction(Action::Attribute action) +{ + mAction.setAction(action); +} + +inline +int Element::getFret(void)const +{ + return mFret; +} + +inline +void Element::setFret(int fret) +{ + mFret=fret; +} + +inline +String Element::toString(void)const +{ + return mAction.toString()+String(" ")+String().fromInt(mFret); +} +#endif diff --git a/guitar/backup/20030501/Fingering.cpp b/guitar/backup/20030501/Fingering.cpp new file mode 100644 index 0000000..3c45813 --- /dev/null +++ b/guitar/backup/20030501/Fingering.cpp @@ -0,0 +1,88 @@ +#include +#include + +FrettedNotes Fingering::getFingering(const Scale &scale) +{ + FrettedNotes frettedNotes; + FrettedNote frettedNote; + + frettedNotes.size(scale.size()); + GlobalDefs::outDebug(scale.toString()); + for(int index=0;indexFretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString<0)return false; + } + mCurrFret++; + } + return found; +} + +bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e) +{ + Note tmpNote; + bool found; + + found=false; + GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString()); + if(mCurrFret<0||mCurrString>5)return false; + while(!found) + { + tmpNote=mFretboard.getAt(mCurrString,mCurrFret); + GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString()); + if(tmpNote==note) + { + frettedNote.setString(mCurrString); + frettedNote.setFret(mCurrFret); + frettedNote.setNote(tmpNote); + found=true; + } + if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets) + { + mCurrFret=mAnchorFret-2; + mCurrString++; +// mAnchorFret=mCurrFret; + if(mCurrString>5)return false; + if(mCurrFret<0)mCurrFret=0; + } + if(mCurrFret>Fretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString>5)return false; + } + mCurrFret++; + } + return found; +} diff --git a/guitar/backup/20030501/Fingering.hpp b/guitar/backup/20030501/Fingering.hpp new file mode 100644 index 0000000..88325bc --- /dev/null +++ b/guitar/backup/20030501/Fingering.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_FINGERING_HPP_ +#define _GUITAR_FINGERING_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Fingering +{ +public: + Fingering(); + virtual ~Fingering(); + FrettedNotes getFingering(const Scale &scale); +private: + enum{MaxStretchFrets=4,DefaultString=5}; + bool getFirst(FrettedNote &frettedNote,const Note ¬e); + bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); + int getCurrString(void)const; + void setCurrString(int currString); + int getCurrFret(void)const; + void setCurrFret(int currFret); + + Fretboard mFretboard; + int mMaxStretchFrets; + int mStartString; + int mCurrString; + int mCurrFret; + int mAnchorFret; +}; + +inline +Fingering::Fingering() +: mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) +{ +} + +inline +Fingering::~Fingering() +{ +} + +inline +int Fingering::getCurrString(void)const +{ + return mCurrString; +} + +inline +void Fingering::setCurrString(int currString) +{ + mCurrString=currString; +} + +inline +int Fingering::getCurrFret(void)const +{ + return mCurrFret; +} + +inline +void Fingering::setCurrFret(int currFret) +{ + mCurrFret=currFret; +} +#endif diff --git a/guitar/backup/20030501/Fret.hpp b/guitar/backup/20030501/Fret.hpp new file mode 100644 index 0000000..e450ad5 --- /dev/null +++ b/guitar/backup/20030501/Fret.hpp @@ -0,0 +1,104 @@ +#ifndef _GUITAR_FRET_HPP_ +#define _GUITAR_FRET_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Fret; +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class Fret +{ +public: + typedef enum FretStatus{Active,Inactive,Hidden}; + Fret(void); + Fret(const Fret &fret); + Fret(const Note ¬e,const Rect &boundingRect); + virtual ~Fret(); + Fret &operator=(const Fret &fret); + const Note &getNote(void)const; + void setNote(const Note ¬e); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + FretStatus getStatus(void)const; + void setStatus(FretStatus status); +private: + Note mNote; + Rect mBoundingRect; + FretStatus mStatus; +}; + +inline +Fret::Fret(void) +: mStatus(Hidden) +{ +} + +inline +Fret::Fret(const Fret &fret) +{ + *this=fret; +} + +inline +Fret::Fret(const Note ¬e,const Rect &boundingRect) +: mNote(note), mBoundingRect(boundingRect) +{ +} + +inline +Fret::~Fret() +{ +} + +inline +Fret &Fret::operator=(const Fret &fret) +{ + setNote(fret.getNote()); + setBoundingRect(fret.getBoundingRect()); + return *this; +} + +inline +const Note &Fret::getNote(void)const +{ + return mNote; +} + +inline +void Fret::setNote(const Note ¬e) +{ + mNote=note; +} + +inline +const Rect &Fret::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void Fret::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +Fret::FretStatus Fret::getStatus(void)const +{ + return mStatus; +} + +inline +void Fret::setStatus(FretStatus status) +{ + mStatus=status; +} +#endif diff --git a/guitar/backup/20030501/FretDlg.cpp b/guitar/backup/20030501/FretDlg.cpp new file mode 100644 index 0000000..8eaf67f --- /dev/null +++ b/guitar/backup/20030501/FretDlg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +FretDialog::FretDialog(void) +: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1) +{ + mInitHandler.setCallback(this,&FretDialog::initHandler); + mCreateHandler.setCallback(this,&FretDialog::createHandler); + mCloseHandler.setCallback(this,&FretDialog::closeHandler); + mDestroyHandler.setCallback(this,&FretDialog::destroyHandler); + mCommandHandler.setCallback(this,&FretDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog::FretDialog(const FretDialog &someFretDialog) +{ // private implementation + *this=someFretDialog; +} + +FretDialog::~FretDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog &FretDialog::operator=(const FretDialog &someFretDialog) +{ // private implementation + return *this; +} + +bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + mSelectedString=selectedString; + mSelectedFret=-1; + return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData) +{ + initializeAction(); + initializeNoteTypes(); + setString(); + setFret(); + setNoteType((*mTabEntries)[mCurrEntryIndex]); + return (CallbackData::ReturnType)FALSE; +} + +void FretDialog::handleOk(void) +{ + String selectedFret; + String selectedAction; + String selectedDuration; + String selectedString; + bool found=false; + + getText(FRETENTRY_FRET,selectedFret); + getText(FRETENTRY_ACTION,selectedAction); + getText(FRETENTRY_DURATION,selectedDuration); + getText(FRETENTRY_STRING,selectedString); + if(!selectedString.isNull()) + { + int string=selectedString.toInt(); + if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string; + } + mSelectedFret=selectedFret.toInt(); + if(mSelectedFret<0||mSelectedFret>Fretboard::Frets) + { + mSelectedFret=-1; + return; + } + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + FrettedNote frettedNote; + frettedNote.setFret(mSelectedFret); + frettedNote.setAction(Action(selectedAction)); + if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret); + else if(!entry.setFrettedNote(mSelectedString,frettedNote)) + { + entry.addFrettedNote(mSelectedString,frettedNote); + } + entry.setNoteType(NoteType().fromString(selectedDuration)); + return; +} + +void FretDialog::setString() +{ + setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString)); +} + +void FretDialog::setFret() +{ + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + + for(int index=0;index actions=Action::enumerate(); + for(int index=0;index noteTypes=NoteType::enumerate(); + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class FretDialog : public DWindow +{ +public: + FretDialog(void); + virtual ~FretDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex); +private: + FretDialog(const FretDialog &someFretDialog); + FretDialog &operator=(const FretDialog &someFretDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void initializeAction(void); + void initializeNoteTypes(void); + void setFret(void); + void setString(void); + void setAction(const Action &action); + void setNoteType(const TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + int mSelectedString; + int mSelectedFret; +}; +#endif diff --git a/guitar/backup/20030501/FretViewWnd.cpp b/guitar/backup/20030501/FretViewWnd.cpp new file mode 100644 index 0000000..1b619a8 --- /dev/null +++ b/guitar/backup/20030501/FretViewWnd.cpp @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FretViewWindow::FretViewWindow(void) +{ + mCreateHandler.setCallback(this,&FretViewWindow::createHandler); + mSizeHandler.setCallback(this,&FretViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&FretViewWindow::paintHandler); + mHorizontalScrollHandler.setCallback(this,&FretViewWindow::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&FretViewWindow::verticalScrollHandler); + mLeftButtonDownHandler.setCallback(this,&FretViewWindow::leftButtonDownHandler); + mCloseHandler.setCallback(this,&FretViewWindow::closeHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +FretViewWindow::~FretViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +CallbackData::ReturnType FretViewWindow::closeHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType FretViewWindow::createHandler(CallbackData &someCallbackData) +{ + setTitle("Fretboard"); + mGUIFretboard=::new GUIFretboard(*this); + mGUIFretboard.disposition(PointerDisposition::Delete); + return FALSE; +} + +CallbackData::ReturnType FretViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType FretViewWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mGUIFretboard->draw(pureDevice); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::leftButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void FretViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String FretViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void FretViewWindow::setNote(const TabEntry &entry) +{ + mGUIFretboard->setNote(entry); +} + +void FretViewWindow::setNote(const Note ¬e) +{ + mGUIFretboard->setNote(note); +} + +void FretViewWindow::setNote(const Scale &scale) +{ + mGUIFretboard->setNote(scale,true); +} + +void FretViewWindow::setNote(const FrettedNotes &frettedNotes) +{ + mGUIFretboard->setNote(frettedNotes); +} + +void FretViewWindow::clearNotes(void) +{ + mGUIFretboard->clearNotes(); +} + +void FretViewWindow::showAllPositions(void) +{ + mGUIFretboard->showAllPositions(); +} + +void FretViewWindow::cut(void) +{ + mGUIFretboard->cut(); +} + +void FretViewWindow::copy(void) +{ + mGUIFretboard->copy(); +} + +void FretViewWindow::paste(void) +{ + mGUIFretboard->paste(); +} + +// *** virtuals + +void FretViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void FretViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|WS_CHILD|WS_CAPTION|WS_SIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_BORDER|WS_SYSMENU; +} + + diff --git a/guitar/backup/20030501/FretViewWnd.hpp b/guitar/backup/20030501/FretViewWnd.hpp new file mode 100644 index 0000000..028f1de --- /dev/null +++ b/guitar/backup/20030501/FretViewWnd.hpp @@ -0,0 +1,56 @@ +#ifndef _GUITAR_FRETVIEWWINDOW_HPP_ +#define _GUITAR_FRETVIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#include +#endif + +class TabEntry; +class Scale; + +class FretViewWindow : public MDIWindow +{ +public: + enum{THPlay,THStop}; + FretViewWindow(void); + virtual ~FretViewWindow(); + String getTitle(void)const; + void cut(void); + void copy(void); + void paste(void); + void setNote(const TabEntry &entry); + void setNote(const Note ¬e); + void setNote(const Scale &scale); + void setNote(const FrettedNotes &frettedNotes); + void clearNotes(void); + void showAllPositions(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum{WindowWidth=355,WindowHeight=135,MaxWindowWidth=520}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDownHandler; + Callback mCloseHandler; + SmartPointer mGUIFretboard; +}; +#endif + diff --git a/guitar/backup/20030501/Fretboard.cpp b/guitar/backup/20030501/Fretboard.cpp new file mode 100644 index 0000000..5fbc421 --- /dev/null +++ b/guitar/backup/20030501/Fretboard.cpp @@ -0,0 +1,101 @@ +#include +#include + +bool Fretboard::isOnFretboard(const Note ¬e) +{ + for(int frIndex=0;frIndex &frettedNotes) +{ + frettedNotes.remove(); + for(int frIndex=0;frIndex&)*this).operator[](string); + strFretboard+=stringNotes.toString(); + if(string +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +// |-5- +// |-4- +// |-3- +// |-2- +// |-1- +// |-0- + +class MIDIOutputDevice; + +class Fretboard : public Array +{ +public: + enum{Frets=24,Strings=6}; + Fretboard(const Tuning &tuning=Tuning(),int frets=Frets); + virtual ~Fretboard(); + void createFretboard(const Tuning &tuning,int frets=Frets); + const Tuning &getTuning(); + void setTuning(const Tuning &tuning); + const Note &getAt(int string,int fret); + bool getAt(const Note ¬e,FrettedNote &frettedNote); + bool getAt(const Note ¬e,Block &frettedNotes); + int getFrets(void)const; + void setFrets(int frets); + bool isOnFretboard(const Note ¬e); + bool play(MIDIOutputDevice &device); + String toString(void)const; + static bool isValidFret(int fret); +private: + void createFretboard(); + Tuning mTuning; + int mFrets; +}; + +inline +Fretboard::Fretboard(const Tuning &tuning,int frets) +: mTuning(tuning),mFrets(frets) +{ + createFretboard(); +} + +inline +Fretboard::~Fretboard() +{ +} + +inline +const Tuning &Fretboard::getTuning() +{ + return mTuning; +} + +inline +void Fretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createFretboard(); +} + +inline +int Fretboard::getFrets(void)const +{ + return mFrets; +} + +inline +void Fretboard::setFrets(int frets) +{ + mFrets=frets; + createFretboard(); +} + +inline +const Note &Fretboard::getAt(int string,int fret) +{ + return (operator[](string)).operator[](fret); +} + +inline +bool Fretboard::isValidFret(int fret) +{ + if(fret<=Fretboard::Frets)return true; + return false; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030501/FrettedBoundingNote.hpp b/guitar/backup/20030501/FrettedBoundingNote.hpp new file mode 100644 index 0000000..d1019c7 --- /dev/null +++ b/guitar/backup/20030501/FrettedBoundingNote.hpp @@ -0,0 +1,88 @@ +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#define _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class FrettedBoundingNote : public FrettedNote +{ +public: + FrettedBoundingNote(); + virtual ~FrettedBoundingNote(); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + const Point &getDisplayPoint(void)const; + void setDisplayPoint(const Point &displayPoint); + const RGBColor &getBkGndColor(void)const; + void setBkGndColor(RGBColor &bkGndColor); + const RGBColor &getTextColor(void)const; + void setTextColor(const RGBColor &textColor); +private: + Rect mBoundingRect; + Point mDisplayPoint; + RGBColor mBkGndColor; + RGBColor mTextColor; +}; + +inline +FrettedBoundingNote::FrettedBoundingNote() +{ +} + +inline +FrettedBoundingNote::~FrettedBoundingNote() +{ +} + +inline +const Rect &FrettedBoundingNote::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void FrettedBoundingNote::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +const RGBColor &FrettedBoundingNote::getBkGndColor(void)const +{ + return mBkGndColor; +} + +inline +void FrettedBoundingNote::setBkGndColor(RGBColor &bkGndColor) +{ + mBkGndColor=bkGndColor; +} + +inline +const RGBColor &FrettedBoundingNote::getTextColor(void)const +{ + return mTextColor; +} + +inline +void FrettedBoundingNote::setTextColor(const RGBColor &textColor) +{ + mTextColor=textColor; +} + +inline +const Point &FrettedBoundingNote::getDisplayPoint(void)const +{ + return mDisplayPoint; +} + +inline +void FrettedBoundingNote::setDisplayPoint(const Point &displayPoint) +{ + mDisplayPoint=displayPoint; +} +#endif + diff --git a/guitar/backup/20030501/FrettedNote.hpp b/guitar/backup/20030501/FrettedNote.hpp new file mode 100644 index 0000000..2b87aeb --- /dev/null +++ b/guitar/backup/20030501/FrettedNote.hpp @@ -0,0 +1,158 @@ +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#define _GUITAR_FRETTEDNOTE_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class FrettedNote; + +typedef Array FrettedNotes; + +class FrettedNote : public Note +{ +public: + FrettedNote(); + FrettedNote(const FrettedNote &frettedNote); + FrettedNote(const Note ¬e,int string,int fret,const Action &action=Action(Action::Pick)); + virtual ~FrettedNote(); + FrettedNote &operator=(const FrettedNote &frettedNote); + bool operator==(const FrettedNote &frettedNote)const; + bool operator>(const FrettedNote &frettedNote)const; + bool operator<(const FrettedNote &frettedNote)const; + int getString(void)const; + void setString(int string); + int getFret(void)const; + void setFret(int fret); + void setNote(const Note ¬e); + const Note &getNote(void)const; + const Action &getAction(void)const; + void setAction(const Action &action); + String toString(void)const; +private: + int mString; + int mFret; + Action mAction; +}; + +inline +FrettedNote::FrettedNote(const FrettedNote &frettedNote) +{ + *this=frettedNote; +} + +inline +FrettedNote::FrettedNote() +: Note(Note::E,4), mString(0), mFret(0) +{ +} + +inline +FrettedNote::FrettedNote(const Note ¬e,int string,int fret,const Action &action) +: Note(note), mString(string), mFret(fret), mAction(action) +{ +} + +inline +FrettedNote::~FrettedNote() +{ +} + +inline +FrettedNote &FrettedNote::operator=(const FrettedNote &frettedNote) +{ + setString(frettedNote.getString()); + setFret(frettedNote.getFret()); + (Note&)*this=(Note&)frettedNote; + setAction(frettedNote.getAction()); + return *this; +} + +inline +bool FrettedNote::operator==(const FrettedNote &frettedNote)const +{ + if(getString()==frettedNote.getString()&&getFret()==frettedNote.getFret()) + return (Note&)*this==(Note&)frettedNote; + return false; +} + +inline +bool FrettedNote::operator>(const FrettedNote &frettedNote)const +{ + if(getString()>frettedNote.getString())return true; + if(getFret()>frettedNote.getFret())return true; + return (Note&)*this>(Note&)frettedNote; +} + +inline +bool FrettedNote::operator<(const FrettedNote &frettedNote)const +{ + if(getString() +#include + +bool FrettedNotes::play(MIDIOutputDevice &midiDevice) +{ + String strNotes; + if(!midiDevice.hasDevice())return false; + +// ::OutputDebugString(String(toString()+String("\n")).str()); + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RGBColor GUIFretboard::smColorBlack=RGBColor(0,0,0); +RGBColor GUIFretboard::smColorLtGreen=RGBColor(156,156,74); +RGBColor GUIFretboard::smColorWhite=RGBColor(255,255,255); +RGBColor GUIFretboard::smColorRed=RGBColor(231,33,33); +RGBColor GUIFretboard::smColorGreen=RGBColor(0,128,0); +RGBColor GUIFretboard::smColorBlue=RGBColor(0,0,255); + +/* Construct the GUIFretboard +* @param parent - The owning parent window +* @param tuning - The tuning for this fretboard +* @param frets - The number of frets on this fretboard +*/ +GUIFretboard::GUIFretboard(GUIWindow &parent,const Tuning &tuning,int frets) +: mTuning(tuning), mTextFont("Small Fonts",6), mShowNotes(false), + mPrevBrush(0), mPrevFont(0), mPrevBkMode(0), mPrevTextColor(0), mClearNotes(true), + mCurrFret(0), mCurrString(0), mRedBrush(smColorRed), mLtGreenBrush(smColorLtGreen), + mWhiteBrush(smColorWhite), mGreenBrush(smColorGreen), mBlueBrush(smColorBlue) +{ + Registry registry; + setShowNotes(registry.getShowNotes()); + mParent=SmartPointer(&parent); + mSizeHandler.setCallback(this,&GUIFretboard::sizeHandler); + mLeftButtonDownHandler.setCallback(this,&GUIFretboard::leftButtonDownHandler); + mKeyDownHandler.setCallback(this,&GUIFretboard::keyDownHandler); + mKeyUpHandler.setCallback(this,&GUIFretboard::keyUpHandler); + mSetFocusHandler.setCallback(this,&GUIFretboard::setFocusHandler); + mKillFocusHandler.setCallback(this,&GUIFretboard::killFocusHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + mParent.disposition(PointerDisposition::Assume); + mResBitmap=::new ResBitmap("FRETBOARD"); + mResBitmap.disposition(PointerDisposition::Delete); + parent.setWindowPos(mResBitmap->width()+RightBorder,mResBitmap->height()+BottomBorder); + createVirtualFretboard(); + mParent->invalidate(); + mParent->update(); +} + +/* +* Destructor +*/ +GUIFretboard::~GUIFretboard() +{ + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->removeHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +/* +* Draw the fretboard +* @param device - The device context on which to draw +*/ +void GUIFretboard::draw(PureDevice &device) +{ + mDIBitmap->usePalette(device,true); + mDIBitmap->bitBlt(device); + mDIBitmap->usePalette(device,false); + refreshNotes(); +} + +/* +* Repeat the selected notes at every location on the fretboard +* @param None +*/ +void GUIFretboard::showAllPositions(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + clearNotes(); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets the notes of the given scale on the fretboard +* @param scale - the scale from which notes will be set +* @param play - indicates whether the notes of the scale should be played +*/ +void GUIFretboard::setNote(const Scale &scale,bool play) +{ + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + + clearNotes(); + if(scale.has(Scale::I))degreeI=scale.getDegree(Scale::I); + if(scale.has(Scale::III))degreeIII=scale.getDegree(Scale::III); + if(scale.has(Scale::V))degreeV=scale.getDegree(Scale::V); + if(scale.has(Scale::VII))degreeVII=scale.getDegree(Scale::VII); + for(int index=0;indexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + prepareDevice(device,false); + } + } + } + } + if(play)scale.play(mSequencer->getDevice()); +} + +/* +* Sets a note on the fretboard +* @param note - the note to set +* @param clear - indicates whether fretboard should be cleared prior to note being set +* @param play - indicates whether the note should be played +*/ +void GUIFretboard::setNote(const Note ¬e,bool clear,bool play) +{ + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + } + } + } + return; +} + +/* +* Sets a note(s) on the fretboard +* @param entry - the tabentry containing the note(s) +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard +* @param string - the string to set the note on +* @param fret - the fret to set the note on +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(int string,int fret,bool clear,bool play) +{ + PureDevice device(*mParent); + GuitarString &guitarString=operator[]((size()-1)-string); + FrettedBoundingNote &frettedBoundingNote=guitarString[fret]; + if(clear)clearNotes(); + frettedBoundingNote.setBkGndColor(smColorRed); + frettedBoundingNote.setTextColor(smColorWhite); + mActiveFrets.insert(frettedBoundingNote); + prepareDevice(device,true); + drawNote(frettedBoundingNote,device); + if(play)frettedBoundingNote.noteOn(mSequencer->getDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::setNote(const GDIPoint &clickPoint,bool clear,bool play) +{ + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + return true; + } + } + } + return false; +} + +/* +* Redraws all of the currently active notes onto the fretboard bitmap +* @param None +*/ +void GUIFretboard::refreshNotes(void) +{ + Array frettedBoundingNotes; + + PureDevice device(*mParent); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index frettedBoundingNotes; + + entry.remove(); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index1)device.textOut(boundingRect.left(),boundingRect.top(),strNote); + else device.textOut(boundingRect.left()+1,boundingRect.top()+1,strNote); + } +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param prepare - indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + prepareDevice(device,smColorRed,smColorWhite,prepare); +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param brushColor - The color of the drawing brush +* @param textColor - The text color +* @param prepare - Indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)getBrush(brushColor)); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(textColor); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} + +/* +* Get the brush for the given color +* @param brushColor - The color of the brush we desire +* @return - A reference to the brush for the given color +*/ +Brush &GUIFretboard::getBrush(const RGBColor &brushColor) +{ + if(brushColor==mRedBrush.getColor())return mRedBrush; + else if(brushColor==mWhiteBrush.getColor())return mWhiteBrush; + else if(brushColor==mGreenBrush.getColor())return mGreenBrush; + else if(brushColor==mBlueBrush.getColor())return mBlueBrush; + return mLtGreenBrush; +} + +/* +* Clears all of the notes on the fretboard +* @param None +* @return None +*/ +void GUIFretboard::clearNotes(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;indexinvalidate(rect,false); + } + mActiveFrets.remove(); + mParent->update(); +} + +/* +* Initialize the fretboard and create it's underlying bitmap +* @param None +* @return None +*/ +void GUIFretboard::createVirtualFretboard(void) +{ + SmartPointer activeFret; + size(mTuning.size()); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + } + } + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + +/* +* Get the rectangle that bounds the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The bounding rectangle +*/ +Rect GUIFretboard::getBoundingRect(int string,int fret)const +{ + Rect boundingRect; + Point point(getPoint(string,fret)); + boundingRect.left(point.x()-Radius); + boundingRect.top(point.y()-Radius); + boundingRect.right(point.x()+Radius); + boundingRect.bottom(point.y()+Radius); + return boundingRect; +} + +/* +* Get the point for the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The point +*/ +Point GUIFretboard::getPoint(int string,int fret)const +{ + Point point; + int starty=15; + int incy=10; + + switch(fret) + { + case 0 : + point.x(10); + break; + case 1 : + point.x(23); + break; + case 2 : + point.x(55); + break; + case 3 : + point.x(83); + break; + case 4 : + point.x(111); + break; + case 5 : + point.x(138); + break; + case 6 : + point.x(164); + break; + case 7 : + point.x(193); + break; + case 8 : + point.x(220); + break; + case 9 : + point.x(249); + break; + case 10 : + point.x(280); + break; + case 11 : + point.x(307); + break; + case 12 : + point.x(335); + break; + case 13 : + point.x(362); + break; + case 14 : + point.x(392); + break; + case 15 : + point.x(420); + break; + case 16 : + point.x(446); + break; + case 17 : + point.x(473); + break; + case 18 : + point.x(501); + break; + case 19 : + point.x(528); + break; + case 20 : + point.x(558); + break; + case 21 : + point.x(585); + break; + case 22 : + point.x(611); + break; + case 23 : + point.x(640); + break; + case 24 : + point.x(668); + break; + } + point.y(starty+((string)*incy)); + return point; +} + +/* +* Cut the notes from the fretboard +* @param None +* @return None +*/ +void GUIFretboard::cut(void) +{ + copy(); // copy the fretboard notes to the clipboard first + clearNotes(); +} + +/* +* Copy all selected notes to the clipboard +* @param None +* @return None +*/ +void GUIFretboard::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + getNotes(entry); + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); +} + +/* +* Paste notes from clipboard +* @param None +* @return None +*/ +void GUIFretboard::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return; + entry.fromString(strText.betweenString(']',0)); + setNote(entry,true,true); +} + +// callbacks + +/* +* Handles resizing of the fretboard window +* @param callbackData - Contains information about the resize event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::sizeHandler(CallbackData &callbackData) +{ + GlobalDefs::outDebug("[GUIFretboard::sizeHandler]"); + Point sizePoint(callbackData.loWord(),callbackData.hiWord()); + if(sizePoint.x()>mResBitmap->width()+RightBorder|| + sizePoint.y()>mResBitmap->height()+BottomBorder) + mParent->setWindowPos(mResBitmap->width()+10,mResBitmap->height()+30); + return false; +} + +/* +* Handles left button down event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::leftButtonDownHandler(CallbackData &callbackData) +{ + GDIPoint clickPoint(callbackData.loWord(),callbackData.hiWord()); + setNote(clickPoint,mClearNotes,true); + return false; +} + +/* +* Handles keyboard event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyDownHandler(CallbackData &callbackData) +{ + if(KeyData::controlKeyPressed())mClearNotes=false; + else mClearNotes=true; + KeyData keyData(callbackData); + switch(keyData.virtualKey()) + { + case KeyDown : + if(KeyData::shiftKeyPressed())mCurrString-=2; + else mCurrString--; + if(mCurrString<0)mCurrString=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyLeft : + if(KeyData::shiftKeyPressed())mCurrFret-=2; + else mCurrFret--; + if(mCurrFret<0)mCurrFret=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyRight : + if(KeyData::shiftKeyPressed())mCurrFret+=2; + else mCurrFret++; + if(mCurrFret>DefaultFrets)mCurrFret=DefaultFrets; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyUp : + if(KeyData::shiftKeyPressed())mCurrString+=2; + else mCurrString++; + if(mCurrString>=DefaultStrings)mCurrString=DefaultStrings-1; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + } + return false; +} + +/* +* Handles key up event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyUpHandler(CallbackData &callbackData) +{ + KeyData keyData(callbackData); + if(CtrlKey==keyData.virtualKey())mClearNotes=true; + return false; +} + +/* +* Handles focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::setFocusHandler(CallbackData &callbackData) +{ + getSequencer(); + return false; +} + +/* +* Handles kill focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::killFocusHandler(CallbackData &callbackData) +{ + mSequencer.destroy(); + return false; +} + diff --git a/guitar/backup/20030501/GUIFretboard.hpp b/guitar/backup/20030501/GUIFretboard.hpp new file mode 100644 index 0000000..0bad42d --- /dev/null +++ b/guitar/backup/20030501/GUIFretboard.hpp @@ -0,0 +1,169 @@ +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#define _GUITAR_GUIFRETBOARD_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TUNING_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class GUIWindow; +class TabEntry; +class ResBitmap; +class Scale; + +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class GUIFretboard : public VirtualFretboard +{ +public: + enum{DefaultFrets=24,DefaultStrings=6}; + GUIFretboard(GUIWindow &parent,const Tuning &tuning=Tuning(),int frets=DefaultFrets); + virtual ~GUIFretboard(); + const Tuning &getTuning(void)const; + void setTuning(const Tuning &tuning); + int getFrets(void)const; + void draw(PureDevice &device); + void setNote(int string,int fret,bool clear=true,bool play=false); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void setShowNotes(bool showNotes); + bool getShowNotes(void)const; + void showAllPositions(void); + void cut(void); + void copy(void); + void paste(void); +private: + enum{RightBorder=10,BottomBorder=30,Radius=5,ClickTolerance=1}; + enum{KeyDown=0x28,KeyLeft=0x25,KeyRight=0x27,KeyUp=0x26,CtrlKey=0x11}; + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &callbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &callbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &callbackData); + + void createVirtualFretboard(void); + void refreshNotes(void); + void getSequencer(void); + Point getPoint(int string,int fret)const; + Rect getBoundingRect(int string,int fret)const; + void prepareDevice(PureDevice &device,bool prepare); + void prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor=RGBColor(255,255,255),bool prepare=true); + void drawNote(FrettedBoundingNote &currFret,PureDevice &device); + bool setNote(const GDIPoint &clickPoint,bool clear=true,bool play=false); + Brush &getBrush(const RGBColor &brushColor); + + Tuning mTuning; + SmartPointer mDIBitmap; + SmartPointer mResBitmap; + SmartPointer mParent; + SmartPointer mSequencer; + + Callback mSizeHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mKeyUpHandler; + Callback mSetFocusHandler; + Callback mKillFocusHandler; + BTree mActiveFrets; + + bool mShowNotes; + bool mClearNotes; + int mCurrFret; + int mCurrString; + + Brush mGreenBrush; + Brush mRedBrush; + Brush mWhiteBrush; + Brush mLtGreenBrush; + Brush mBlueBrush; + Font mTextFont; + + HGDIOBJ mPrevBrush; + HGDIOBJ mPrevFont; + int mPrevBkMode; + RGBColor mPrevTextColor; + + static RGBColor smColorBlack; + static RGBColor smColorLtGreen; + static RGBColor smColorWhite; + static RGBColor smColorRed; + static RGBColor smColorGreen; + static RGBColor smColorBlue; +}; + +inline +const Tuning &GUIFretboard::getTuning(void)const +{ + return mTuning; +} + +inline +void GUIFretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createVirtualFretboard(); +} + +inline +int GUIFretboard::getFrets(void)const +{ + return DefaultFrets; +} + +inline +void GUIFretboard::setShowNotes(bool showNotes) +{ + mShowNotes=showNotes; +} + +inline +bool GUIFretboard::getShowNotes(void)const +{ + return mShowNotes; +} + +inline +void GUIFretboard::getSequencer(void) +{ + if(mSequencer.isOkay())return; + mSequencer=::new Sequencer(); + mSequencer.disposition(PointerDisposition::Delete); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030501/GlobalDefs.cpp b/guitar/backup/20030501/GlobalDefs.cpp new file mode 100644 index 0000000..24438ac --- /dev/null +++ b/guitar/backup/20030501/GlobalDefs.cpp @@ -0,0 +1,6 @@ +#include + +UINT GlobalDefs::mRegisteredClipboardFormat=0; +GlobalDefs::LogLevel GlobalDefs::mLogLevel=GlobalDefs::Debug; +File GlobalDefs::mLogFile; + diff --git a/guitar/backup/20030501/GlobalDefs.hpp b/guitar/backup/20030501/GlobalDefs.hpp new file mode 100644 index 0000000..8fb3780 --- /dev/null +++ b/guitar/backup/20030501/GlobalDefs.hpp @@ -0,0 +1,100 @@ +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#define _GUITAR_GLOBALDEFS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class GlobalDefs +{ +public: + typedef enum LogLevel{NoLog,Verbose,Info,Debug}; + enum{MicrosecondsPerQuarterNote=651578,Program=JazzGuitarElectric,ShowAction=1,ShowNotes=1}; + static void outDebug(const String &strDebug,LogLevel level=Debug); + static LogLevel getLogLevel(void); + static void setLogLevel(LogLevel logLevel); + static bool setLogFile(const String &pathLogFile); + static UINT getRegisteredClipboardFormat(void); + static void setRegisteredClipboardFormat(UINT registeredClipboardFormat); + static String translateLevel(LogLevel logLevel); +private: + GlobalDefs(); + virtual ~GlobalDefs(); + static UINT mRegisteredClipboardFormat; + static LogLevel mLogLevel; + static File mLogFile; +}; + +inline +GlobalDefs::GlobalDefs() +{ +} + +inline +GlobalDefs::~GlobalDefs() +{ +} + +inline +UINT GlobalDefs::getRegisteredClipboardFormat(void) +{ + return mRegisteredClipboardFormat; +} + +inline +void GlobalDefs::setRegisteredClipboardFormat(UINT registeredClipboardFormat) +{ + mRegisteredClipboardFormat=registeredClipboardFormat; +} + +inline +GlobalDefs::LogLevel GlobalDefs::getLogLevel(void) +{ + return mLogLevel; +} + +inline +void GlobalDefs::setLogLevel(LogLevel logLevel) +{ + mLogLevel=logLevel; +} + +inline +void GlobalDefs::outDebug(const String &strDebug,LogLevel logLevel) +{ + if(NoLog==getLogLevel())return; + if(mLogFile.isOkay()&&logLevel>=mLogLevel) + { + mLogFile.writeLine(translateLevel(logLevel)+strDebug); + mLogFile.flush(); + } + else if(logLevel>=mLogLevel)::OutputDebugString(String(translateLevel(logLevel)+strDebug+String("\n")).str()); +} + +inline +bool GlobalDefs::setLogFile(const String &pathLogFile) +{ + return mLogFile.open(pathLogFile,"wb"); +} + +inline +String GlobalDefs::translateLevel(LogLevel logLevel) +{ + SystemTime systemTime; + if(NoLog==logLevel)return String("[Log.None][")+systemTime.toString()+String("]"); + else if(Verbose==logLevel)return String("[Log.Verbose][")+systemTime.toString()+String("]"); + else if(Debug==logLevel)return String("[Log.Debug][")+systemTime.toString()+String("]"); + else return String("[Log.Info]]")+systemTime.toString()+String("]"); +} +#endif diff --git a/guitar/backup/20030501/GuitarString.hpp b/guitar/backup/20030501/GuitarString.hpp new file mode 100644 index 0000000..06f0d1c --- /dev/null +++ b/guitar/backup/20030501/GuitarString.hpp @@ -0,0 +1,29 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/guitar/backup/20030501/Instrument.hpp b/guitar/backup/20030501/Instrument.hpp new file mode 100644 index 0000000..8e5a147 --- /dev/null +++ b/guitar/backup/20030501/Instrument.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_INSTRUMENT_HPP_ +#define _GUITAR_INSTRUMENT_HPP_ + +typedef enum Instrument{AcousticGrandPiano=0,BrightAcousticPiano=1,ElectricGrandPiano=2,AcousticGuitarNylon=24, + AcousticGuitarSteel=25,JazzGuitarElectric=26,CleanGuitarElectric=27,MutedGuitarElectric=28}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030501/IntegerPair.hpp b/guitar/backup/20030501/IntegerPair.hpp new file mode 100644 index 0000000..fc5959f --- /dev/null +++ b/guitar/backup/20030501/IntegerPair.hpp @@ -0,0 +1,21 @@ +#ifndef _GUITAR_INTEGERPAIR_HPP_ +#define _GUITAR_INTEGERPAIR_HPP_ + +class IntegerPair +{ +public: + IntegerPair(); + IntegerPair(const IntegerPair &integerPair); + virtual IntegerPair(); + IntegerPair &operator=(const IntegerPair &integerPair); + bool operator<(const IntegerPair &integerPair); + bool operator>(const IntegerPair &integerPair); + bool operator==(const IntegerPair &integerPair); + int getValue(void)const; + void setValue(int value); + int getComparator +private: + int mValue; + int mComparator; +}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030501/License.hpp b/guitar/backup/20030501/License.hpp new file mode 100644 index 0000000..e83be51 --- /dev/null +++ b/guitar/backup/20030501/License.hpp @@ -0,0 +1,148 @@ +#ifndef _GUITAR_LICENSE_HPP_ +#define _GUITAR_LICENSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif + +class License +{ +public: + typedef enum LicenseType{Expires=01,Permanent=02}; + typedef enum Feature{MIDIFeature}; + License(void); + License(const License &license); + License(const String &strLicenseKey); // this should be a uuencoded, xor'd string + License(Block &strLicenseKeyLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + License &operator=(const License &license); + static String generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount); // produces a uuencoded, xor'd string + bool fromString(const String &string); // this should be a uuencoded, xor'd string + bool fromLines(Block &strLicenseLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + bool isValid(void)const; + bool isExpiring(void)const; + bool allowFeature(Feature feature)const; + int getRemainingDays(void)const; + int getDayCount(void)const; + int getDay(void)const; + const String &getUUEncodedLicense(void)const; +private: + enum {XORMagic=72}; + static int calculateChecksum(const String &string); + static String xor(const String &strLicense); + static String numericEncode(const String &strLicense); + static String numericDecode(const String &strLicense); + + String mProductVersion; + String mUUEncodedLicense; + SystemTime mIssueDate; + LicenseType mLicenseType; + int mDayCount; + bool mIsValid; + static const String smBeginLicense; + static const String smEndLicense; +}; + +inline +License::License(void) +: mIsValid(false) +{ +} + +inline +License::License(const License &license) +{ + *this=license; +} + +inline +License::License(const String &strLicenseKey) +: mIsValid(false) +{ + fromString(strLicenseKey); +} + +inline +License::License(Block &strLicenseLines) +: mIsValid(false) +{ + fromLines(strLicenseLines); +} + +inline +License &License::operator=(const License &license) +{ + mProductVersion=license.mProductVersion; + mIssueDate=license.mIssueDate; + mLicenseType=license.mLicenseType; + mDayCount=license.mDayCount; + mIsValid=license.mIsValid; + return *this; +} + +inline +bool License::isValid(void)const +{ + return mIsValid; +} + +inline +bool License::isExpiring(void)const +{ + return Expires==mLicenseType; +} + +inline +int License::getRemainingDays(void)const +{ + if(!isExpiring())return -1; + SDate issueDate; + SDate expireDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + expireDate=issueDate; + expireDate=expireDate.daysAdd360(mDayCount); + return currDate.daysBetween360(expireDate); +} + +inline +int License::getDay(void)const +{ + SDate issueDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + return issueDate.daysBetween360(currDate)+1; +} + +inline +int License::getDayCount(void)const +{ + return mDayCount; +} + +inline +bool License::allowFeature(Feature feature)const +{ + if(isExpiring())return false; + return true; +} + +inline +const String &License::getUUEncodedLicense(void)const +{ + return mUUEncodedLicense; +} +#endif diff --git a/guitar/backup/20030501/LicenseDialog.cpp b/guitar/backup/20030501/LicenseDialog.cpp new file mode 100644 index 0000000..011549d --- /dev/null +++ b/guitar/backup/20030501/LicenseDialog.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +LicenseDialog::LicenseDialog(void) +{ + mInitHandler.setCallback(this,&LicenseDialog::initHandler); + mCreateHandler.setCallback(this,&LicenseDialog::createHandler); + mCloseHandler.setCallback(this,&LicenseDialog::closeHandler); + mDestroyHandler.setCallback(this,&LicenseDialog::destroyHandler); + mCommandHandler.setCallback(this,&LicenseDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog::LicenseDialog(const LicenseDialog &someLicenseDialog) +{ // private implementation + *this=someLicenseDialog; +} + +LicenseDialog::~LicenseDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog &LicenseDialog::operator=(const LicenseDialog &someLicenseDialog) +{ // private implementation + return *this; +} + +bool LicenseDialog::perform(GUIWindow &parentWindow,bool cancelTerminates) +{ + bool returnCode; + mCancelTerminates=cancelTerminates; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"LICENSEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType LicenseDialog::initHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType LicenseDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::commandHandler(CallbackData &someCallbackData) +{ + LRESULT result; + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(!validateLicense()) + { + MessageBox::messageBox("Error","The license you entered was invalid, please try again"); + setText(LICENSE_DIALOG_LICENSE,String()); + setFocus(LICENSE_DIALOG_LICENSE); + } + else endDialog(true); + break; + case IDCANCEL : + if(mCancelTerminates) + { + result=MessageBox::messageBox(*this,"Warning","Cancelling now will terminate the application.",MB_OKCANCEL); + if(IDOK==result)endDialog(false); + } + else endDialog(false); + break; + case LICENSE_DIALOG_REQUEST_LICENSE : + handleLicenseRequest(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +bool LicenseDialog::validateLicense(void)const +{ + License license; + String strLicense; + Block strLicenseLines; + + strLicense=getText(LICENSE_DIALOG_LICENSE); + if(strLicense.isNull())return false; + makeLicenseLines(strLicense,strLicenseLines); + license.fromLines(strLicenseLines); + if(!license.isValid()||license.isExpiring())return false; + if(!Registration::getInstance().applyLicense(strLicenseLines))return false; + return true; +} + +void LicenseDialog::handleLicenseRequest(void)const +{ + BrowserHelper::launchBrowser(String(STRING_HOST)); +} + +void LicenseDialog::makeLicenseLines(String strLicense,Block &strLicenseLines)const +{ + strLicenseLines.remove(); + if(strLicense.isNull())return; + strLicense.removeTokens("\r"); + strLicenseLines.insert(&String(strLicense.betweenString(0,'\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\0').betweenString('\n','\n\0'))); +} diff --git a/guitar/backup/20030501/LicenseDialog.hpp b/guitar/backup/20030501/LicenseDialog.hpp new file mode 100644 index 0000000..87535df --- /dev/null +++ b/guitar/backup/20030501/LicenseDialog.hpp @@ -0,0 +1,32 @@ +#ifndef _GUITAR_LICENSEDIALOG_HPP_ +#define _GUITAR_LICENSEDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif + +class LicenseDialog : public DWindow +{ +public: + LicenseDialog(void); + virtual ~LicenseDialog(); + bool perform(GUIWindow &parentWindow,bool cancelTerminates=true); +private: + LicenseDialog(const LicenseDialog &someLicenseDialog); + LicenseDialog &operator=(const LicenseDialog &someLicenseDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool validateLicense(void)const; + void handleLicenseRequest(void)const; + void makeLicenseLines(String strLicense,Block &strLicenseLines)const; + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + bool mCancelTerminates; +}; +#endif diff --git a/guitar/backup/20030501/LineParser.cpp b/guitar/backup/20030501/LineParser.cpp new file mode 100644 index 0000000..5d387ae --- /dev/null +++ b/guitar/backup/20030501/LineParser.cpp @@ -0,0 +1,127 @@ +#include + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + +void LineParser::putElement(const Element &element) +{ + String strItem=Action(element.getAction()).toStringShort()+String().fromInt(element.getFret()); + *this+=strItem; + mPosition+=strItem.length(); + return; +} + +void LineParser::putElement(char ch) +{ + *this+=ch; + mPosition++; + return; +} + +int LineParser::peekElement(Element &element) +{ + int position=mPosition; + int result=getElement(element); + mPosition=position; + return result; +} diff --git a/guitar/backup/20030501/LineParser.hpp b/guitar/backup/20030501/LineParser.hpp new file mode 100644 index 0000000..2bdd01b --- /dev/null +++ b/guitar/backup/20030501/LineParser.hpp @@ -0,0 +1,101 @@ +#ifndef _GUITAR_LINEPARSER_HPP_ +#define _GUITAR_LINEPARSER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_ELEMENT_HPP_ +#include +#endif + +class LineParser : private String +{ +public: + LineParser(); + LineParser(const String &string); + virtual ~LineParser(); + LineParser &operator=(const String &string); + LineParser &operator++(); + LineParser &operator++(int /*postfixdummy*/); + void reset(void); + int getElement(Element &element); + void putElement(const Element &element); + void putElement(char ch); + int length(void)const; + int getPosition(void)const; + bool serialize(File &outFile)const; +private: + int peekElement(Element &element); + + int mPosition; + int mLength; +}; + +inline +LineParser::LineParser() +: mPosition(0), mLength(0) +{ +} + +inline +LineParser::LineParser(const String &string) +: String(string), mPosition(0), mLength(String::length()) +{ +} + +inline +LineParser::~LineParser() +{ +} + +inline +LineParser &LineParser::operator=(const String &string) +{ + (String&)*this=string; + mPosition=0; + mLength=String::length(); + return *this; +} + +inline +LineParser &LineParser::operator++() +{ + mPosition++; + return *this; +} + +inline +LineParser &LineParser::operator++(int /*postfixdummy*/) +{ + mPosition++; + return *this; +} + +inline +void LineParser::reset(void) +{ + mPosition=0; +} + +inline +int LineParser::length(void)const +{ + return mLength; +} + +inline +int LineParser::getPosition(void)const +{ + return mPosition; +} + +inline +bool LineParser::serialize(File &outFile)const +{ + if(!outFile.isOkay())return false; + outFile.writeLine(*this); + return true; +} +#endif diff --git a/guitar/backup/20030501/MIDIDialog.cpp b/guitar/backup/20030501/MIDIDialog.cpp new file mode 100644 index 0000000..db0a41d --- /dev/null +++ b/guitar/backup/20030501/MIDIDialog.cpp @@ -0,0 +1,136 @@ +#include +#include +#include + +MIDIDialog::MIDIDialog(void) +{ + mInitHandler.setCallback(this,&MIDIDialog::initHandler); + mCreateHandler.setCallback(this,&MIDIDialog::createHandler); + mCloseHandler.setCallback(this,&MIDIDialog::closeHandler); + mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler); + mCommandHandler.setCallback(this,&MIDIDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog) +{ // private implementation + *this=someMIDIDialog; +} + +MIDIDialog::~MIDIDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog) +{ // private implementation + return *this; +} + +bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack) +{ + bool returnCode; + mPathMIDIFileName=strPathMIDIFileName; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + if(returnCode)selectedTrack=mSelectedTrack; + return returnCode; +} + +CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData) +{ + MIDIHelper midiHelper; + TrackInfos trackInfos; + midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos); + setTrackInformation(trackInfos); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + mSelectedTrack=getSelectedTrack(); + if(-1==mSelectedTrack)endDialog(false); + else endDialog(true); + break; + } + if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MIDIDialog::setTrackInformation(TrackInfos &trackInfos) +{ + bool isFirst=true; + for(int index=0;index=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return; + mSelectedTrack=clickedId-MIDI_TRACK1; + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L); + } +} + +int MIDIDialog::getSelectedTrack(void)const +{ + int selectedTrack=-1; + + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(1==sendMessage(btnId,BM_GETCHECK,0,0L)) + { + selectedTrack=btnId-MIDI_TRACK1; + break; + } + } + return selectedTrack; +} + + + + + diff --git a/guitar/backup/20030501/MIDIDialog.hpp b/guitar/backup/20030501/MIDIDialog.hpp new file mode 100644 index 0000000..01781b3 --- /dev/null +++ b/guitar/backup/20030501/MIDIDialog.hpp @@ -0,0 +1,39 @@ +#ifndef _GUITAR_MIDIDIALOG_HPP_ +#define _GUITAR_MIDIDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIDialog : public DWindow +{ +public: + MIDIDialog(void); + virtual ~MIDIDialog(); + bool perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack); +private: + MIDIDialog(const MIDIDialog &someMIDIDialog); + MIDIDialog &operator=(const MIDIDialog &someMIDIDialog); + void handleClick(const CallbackData &someCallbackData); + int getSelectedTrack(void)const; + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTrackInformation(TrackInfos &trackInfos); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + String mPathMIDIFileName; + int mSelectedTrack; +}; +#endif diff --git a/guitar/backup/20030501/MIDIHelper.cpp b/guitar/backup/20030501/MIDIHelper.cpp new file mode 100644 index 0000000..06c36b9 --- /dev/null +++ b/guitar/backup/20030501/MIDIHelper.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include +#include +#include + +bool MIDIHelper::getTrackInfo(const String &strPathMIDIFileName,TrackInfos &trackInfos) +{ + MidiData midiData(strPathMIDIFileName); + midiData.getTrackInfo(trackInfos); + return trackInfos.size()?true:false; +} + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack) +{ + TabEntry entry; + Tablature tablature; + TabEntries tabEntries; + + WORD currPlayTime; + WORD prevPlayTime; + int eventCount; + bool resultCode; + bool haveTrack; + Block notes; + TrackInfos trackInfos; + + resultCode=false; + haveTrack=false; + if(strPathMidiFileName.isNull())return resultCode; + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + + for(int trIndex=0;trIndex &strPathTabFileNames) +{ + String strPathTabFileName; + WORD currPlayTime; + WORD prevPlayTime; + int currentTrack; + int eventCount; + Block tracks; + Block notes; + TrackInfos trackInfos; + + if(strPathMidiFileName.isNull())return false; + strPathTabFileNames.remove(); + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + if(!tracks.size())return false; + for(int trIndex=0;trIndex ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + notePaths.size(notes.size()); + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + MIDIHelper(); + virtual ~MIDIHelper(); +// bool import(const String &strPathMidiFileName,const String &strPathTabFileName); + bool import(const String &strPathMidiFileName,Block &strPathTabFileNames); + bool import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack); + bool getTrackInfo(const String &strpathMIDIFileName,TrackInfos &trackInfos); +private: + bool createEntry(Block ¬es,TabEntry &entry); + bool filterNotesOnFretboard(Block ¬es); + + Fretboard mFretboard; + Block mMessages; +}; + +inline +MIDIHelper::MIDIHelper() +{ +} + +inline +MIDIHelper::~MIDIHelper() +{ +} +#endif diff --git a/guitar/backup/20030501/MessageBox.hpp b/guitar/backup/20030501/MessageBox.hpp new file mode 100644 index 0000000..53be76b --- /dev/null +++ b/guitar/backup/20030501/MessageBox.hpp @@ -0,0 +1,47 @@ +#ifndef _GUITAR_MESSAGE_HPP_ +#define _GUITAR_MESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif + +class MessageBox +{ +public: + static LRESULT messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type=MB_OK); + static LRESULT messageBox(const String &strCaption,const String &strText,UINT type=MB_OK); +private: + MessageBox(); + static String getProductVersion(const VersionInfo &versionInfo); +}; + +inline +MessageBox::MessageBox() +{ +} + +inline +LRESULT MessageBox::messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(parent,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +LRESULT MessageBox::messageBox(const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(0,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +String MessageBox::getProductVersion(const VersionInfo &versionInfo) +{ + return String("[")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("]"); +} +#endif diff --git a/guitar/backup/20030501/NoteType.cpp b/guitar/backup/20030501/NoteType.cpp new file mode 100644 index 0000000..2877fe9 --- /dev/null +++ b/guitar/backup/20030501/NoteType.cpp @@ -0,0 +1,80 @@ +#include + +const NoteType &NoteType::operator++(void) +{ + if(WholeNote==mNoteType)mNoteType=HalfNote; + else if(HalfNote==mNoteType)mNoteType=QuarterNote; + else if(QuarterNote==mNoteType)mNoteType=EighthNote; + else if(EighthNote==mNoteType)mNoteType=SixteenthNote; + else if(SixteenthNote==mNoteType)mNoteType=ThirtySecondNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixtyFourthNote; + else mNoteType++; + return *this; +} + +const NoteType &NoteType::operator--(void) +{ + if(HalfNote==mNoteType)mNoteType=WholeNote; + else if(QuarterNote==mNoteType)mNoteType=HalfNote; + else if(EighthNote==mNoteType)mNoteType=QuarterNote; + else if(SixteenthNote==mNoteType)mNoteType=EighthNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixteenthNote; + else if(SixtyFourthNote==mNoteType)mNoteType=ThirtySecondNote; + else mNoteType--; + return *this; +} + +NoteType &NoteType::fromString(const String &stringRep) +{ + if(stringRep.equals(toString(WholeNote)))mNoteType=WholeNote; + else if(stringRep.equals(toString(HalfNote)))mNoteType=HalfNote; + else if(stringRep.equals(toString(QuarterNote)))mNoteType=QuarterNote; + else if(stringRep.equals(toString(EighthNote)))mNoteType=EighthNote; + else if(stringRep.equals(toString(SixteenthNote)))mNoteType=SixteenthNote; + else if(stringRep.equals(toString(ThirtySecondNote)))mNoteType=ThirtySecondNote; + else if(stringRep.equals(toString(SixtyFourthNote)))mNoteType=SixtyFourthNote; + else mNoteType=stringRep.betweenString('/',0).toInt(); + return *this; +} + +Array NoteType::enumerate(void) +{ + Array values; + values.size(7); + values[0]=NoteType::toString(WholeNote); + values[1]=NoteType::toString(HalfNote); + values[2]=NoteType::toString(QuarterNote); + values[3]=NoteType::toString(EighthNote); + values[4]=NoteType::toString(SixteenthNote); + values[5]=NoteType::toString(ThirtySecondNote); + values[6]=NoteType::toString(SixtyFourthNote); + return values; +} + +String NoteType::toString(void)const +{ + return toString(getNoteType()); +} + +String NoteType::toString(TypeNote noteType) +{ + switch(noteType) + { + case WholeNote : + return "1/1"; + case HalfNote : + return "1/2"; + case QuarterNote : + return "1/4"; + case EighthNote : + return "1/8"; + case SixteenthNote : + return "1/16"; + case ThirtySecondNote : + return "1/32"; + case SixtyFourthNote : + return "1/64"; + default : + return "1/"+String().fromInt((int)noteType); + } +} diff --git a/guitar/backup/20030501/NoteType.hpp b/guitar/backup/20030501/NoteType.hpp new file mode 100644 index 0000000..f9c0567 --- /dev/null +++ b/guitar/backup/20030501/NoteType.hpp @@ -0,0 +1,86 @@ +#ifndef _GUITAR_NOTETYPE_HPP_ +#define _GUITAR_NOTETYPE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class NoteType +{ +public: + enum TypeNote{WholeNote=1,HalfNote=2,QuarterNote=4,EighthNote=8, + SixteenthNote=16,ThirtySecondNote=32,SixtyFourthNote=64}; + NoteType(TypeNote noteType=QuarterNote); + virtual ~NoteType(); + const NoteType &operator++(void); + NoteType operator++(int postfix); + const NoteType &operator--(void); + NoteType operator--(int postfix); + TypeNote getNoteType(void)const; + int toInt(void)const; + NoteType &fromInt(int noteType); + NoteType &fromString(const String &stringRep); + void setNoteType(TypeNote noteType); + String toString(void)const; + static Array enumerate(void); + static String toString(TypeNote noteType); +private: + int mNoteType; +}; + +inline +NoteType::NoteType(TypeNote noteType) +: mNoteType(noteType) +{ +} + +inline +NoteType::~NoteType() +{ +} + +inline +NoteType NoteType::operator++(int postfix) +{ + NoteType noteType(*this); + operator++(); + return noteType; +} + +inline +NoteType NoteType::operator--(int postfix) +{ + NoteType noteType(*this); + operator--(); + return noteType; +} + +inline +int NoteType::toInt(void)const +{ + return (int)mNoteType; +} + +inline +NoteType &NoteType::fromInt(int noteType) +{ + mNoteType=(TypeNote)noteType; + return *this; +} + +inline +NoteType::TypeNote NoteType::getNoteType(void)const +{ + return (TypeNote)mNoteType; +} + +inline +void NoteType::setNoteType(TypeNote noteType) +{ + mNoteType=noteType; +} +#endif + + diff --git a/guitar/backup/20030501/Range.hpp b/guitar/backup/20030501/Range.hpp new file mode 100644 index 0000000..a848e22 --- /dev/null +++ b/guitar/backup/20030501/Range.hpp @@ -0,0 +1,119 @@ +#ifndef _GUITAR_RANGE_HPP_ +#define _GUITAR_RANGE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Range; +typedef Block TabRanges; + +class Range +{ +public: + Range(); + virtual ~Range(); + int getBeginRange(void)const; + void setBeginRange(int beginRange); + int getEndRange(void)const; + void setEndRange(int endRange); + const String &getRangeName(void)const; + void setRangeName(const String &rangeName); + void autoName(void); + String toString(void)const; + String toTabbedString(void)const; +private: + enum{ShortNameLength=20}; + String createRangeName(void)const; + + int mBeginRange; + int mEndRange; + String mRangeName; +}; + +inline +Range::Range() +: mBeginRange(0), mEndRange(0) +{ +} + +inline +Range::~Range() +{ +} + +inline +int Range::getBeginRange(void)const +{ + return mBeginRange; +} + +inline +void Range::setBeginRange(int beginRange) +{ + mBeginRange=beginRange; +} + +inline +int Range::getEndRange(void)const +{ + return mEndRange; +} + +inline +void Range::setEndRange(int endRange) +{ + mEndRange=endRange; +} + +inline +const String &Range::getRangeName(void)const +{ + return mRangeName; +} + +inline +void Range::setRangeName(const String &rangeName) +{ + mRangeName=rangeName; +} + +inline +void Range::autoName(void) +{ + setRangeName(createRangeName()); +} + +inline +String Range::createRangeName(void)const +{ + String strRangeName("RANGE_"); + strRangeName+=String().fromInt(getBeginRange()); + strRangeName+=String("_"); + strRangeName+=String().fromInt(getEndRange()); + return strRangeName; +} + +inline +String Range::toString(void)const +{ + String strString(getRangeName()); + strString+=String("[")+String().fromInt(getBeginRange())+String("->")+String().fromInt(getEndRange()); + return strString; +} + +inline +String Range::toTabbedString(void)const +{ + String strItem; + String shortName; + + shortName=getRangeName(); + strItem+=shortName.substr(0,ShortNameLength-1)+"\t"; + strItem+=String().fromInt(getBeginRange())+"\t"; + strItem+=String().fromInt(getEndRange()); + return strItem; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030501/RangeDlg.cpp b/guitar/backup/20030501/RangeDlg.cpp new file mode 100644 index 0000000..5b65779 --- /dev/null +++ b/guitar/backup/20030501/RangeDlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include + +RangeDialog::RangeDialog(void) +{ + mInitHandler.setCallback(this,&RangeDialog::initHandler); + mCreateHandler.setCallback(this,&RangeDialog::createHandler); + mCloseHandler.setCallback(this,&RangeDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog::RangeDialog(const RangeDialog &someRangeDialog) +{ // private implementation + *this=someRangeDialog; +} + +RangeDialog::~RangeDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog) +{ // private implementation + return *this; +} + +bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + mTabRanges=ranges; + mMaxRange=maxRange; + mIsSelection=isSelect; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST); + mRangeList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(55)); + mRangeList->setTabStops(stops); + setRangeList(); + if(mIsSelection) + { + enable(RANGE_INSERT,false); + enable(RANGE_DELETE,false); + setCaption("Range Select"); + } + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(mIsSelection)handleRangeSelection(); + endDialog(true); + break; + case RANGE_INSERT : + handleRangeInsert(); + break; + case RANGE_DELETE : + handleRangeDelete(); + break; + } + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + if(mIsSelection) + { + handleRangeSelection(); + endDialog(true); + } + else handleRangeEditSelection(); + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeDialog::setRangeList(void) +{ + for(int index=0;indexaddString(range.toTabbedString()); + } + mRangeList->setCurrent(0); + return; +} + +void RangeDialog::handleRangeSelection(void) +{ + mSelection=mRangeList->getCurrent(); +} + +void RangeDialog::handleRangeEditSelection(void) +{ + RangeEditDialog rangeEditDialog; + int currSel; + + currSel=mRangeList->getCurrent(); + if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return; + Range range=rangeEditDialog.getRange(); + mTabRanges.remove(currSel); + mTabRanges.insert(&range); + mRangeList->deleteString(currSel); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeInsert(void) +{ + RangeEditDialog rangeEditDialog; + Range range; + + if(!rangeEditDialog.perform(*this,range,mMaxRange))return; + range=rangeEditDialog.getRange(); + mTabRanges.insert(&range); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeDelete(void) +{ + int currSel; + + if(-1==(currSel=mRangeList->getCurrent()))return; + if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return; + mRangeList->deleteString(currSel); + mTabRanges.remove(currSel); + currSel--; + if(currSel<0)mRangeList->setCurrent(0); + else mRangeList->setCurrent(currSel); +} diff --git a/guitar/backup/20030501/RangeDlg.hpp b/guitar/backup/20030501/RangeDlg.hpp new file mode 100644 index 0000000..0fc857c --- /dev/null +++ b/guitar/backup/20030501/RangeDlg.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_RANGEDLG_HPP_ +#define _GUITAR_RANGEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class TabEntry; + +class RangeDialog : public DWindow +{ +public: + RangeDialog(void); + virtual ~RangeDialog(); + bool perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect=false); + const TabRanges &getTabRanges(void)const; + int getSelection(void)const; +private: + RangeDialog(const RangeDialog &someRangeDialog); + RangeDialog &operator=(const RangeDialog &someRangeDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setRangeList(void); + void handleRangeSelection(void); + void handleRangeEditSelection(void); + void handleRangeInsert(void); + void handleRangeDelete(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mRangeList; + Point mDisplayPoint; + TabRanges mTabRanges; + bool mIsSelection; + int mMaxRange; + int mSelection; +}; + +inline +const TabRanges &RangeDialog::getTabRanges(void)const +{ + return mTabRanges; +} + +inline +int RangeDialog::getSelection(void)const +{ + return mSelection; +} +#endif diff --git a/guitar/backup/20030501/RangeEditDlg.cpp b/guitar/backup/20030501/RangeEditDlg.cpp new file mode 100644 index 0000000..e0daace --- /dev/null +++ b/guitar/backup/20030501/RangeEditDlg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +RangeEditDialog::RangeEditDialog(void) +{ + mInitHandler.setCallback(this,&RangeEditDialog::initHandler); + mCreateHandler.setCallback(this,&RangeEditDialog::createHandler); + mCloseHandler.setCallback(this,&RangeEditDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeEditDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeEditDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog::RangeEditDialog(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + *this=someRangeEditDialog; +} + +RangeEditDialog::~RangeEditDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog &RangeEditDialog::operator=(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + return *this; +} + +bool RangeEditDialog::perform(GUIWindow &parentWindow,const Range &range,int maxRange) +{ + mRange=range; + mMaxRange=maxRange; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEEDITDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeEditDialog::initHandler(CallbackData &someCallbackData) +{ + if(mRange.getRangeName().isNull()&&!mRange.getBeginRange()&&!mRange.getEndRange())setCaption("Insert Range"); + setData(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeEditDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + getData(); + if(!isValid())errorMessage(); + else endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeEditDialog::setData(void)const +{ + setText(RANGEEDIT_NAME,mRange.getRangeName()); + setText(RANGEEDIT_BEGIN,String().fromInt(mRange.getBeginRange())); + setText(RANGEEDIT_END,String().fromInt(mRange.getEndRange())); +} + +void RangeEditDialog::getData(void) +{ + String strName; + String strBegin; + String strEnd; + + getText(RANGEEDIT_NAME,strName); + mRange.setRangeName(strName); + getText(RANGEEDIT_BEGIN,strBegin); + mRange.setBeginRange(strBegin.toInt()); + getText(RANGEEDIT_END,strEnd); + mRange.setEndRange(strEnd.toInt()); +} + +bool RangeEditDialog::isValid(void) +{ + if(mRange.getRangeName().isNull()) + { + mLastError="Range name cannot be empty."; + return false; + } + if(mRange.getBeginRange()<0) + { + mLastError="Begin range position must be greater than zero."; + return false; + } + if(mRange.getBeginRange()>mRange.getEndRange()) + { + mLastError="Begin range position must be smaller than end range position."; + return false; + } + if(mRange.getEndRange()>=mMaxRange) + { + mLastError="End range position must be less than "+String().fromInt(mMaxRange); + return false; + } + return true; +} + +void RangeEditDialog::errorMessage(void) +{ + MessageBox::messageBox(*this,"Invalid range.",mLastError.str()); +} diff --git a/guitar/backup/20030501/RangeEditDlg.hpp b/guitar/backup/20030501/RangeEditDlg.hpp new file mode 100644 index 0000000..3139037 --- /dev/null +++ b/guitar/backup/20030501/RangeEditDlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_RANGEEDITDLG_HPP_ +#define _GUITAR_RANGEEDITDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class RangeEditDialog : public DWindow +{ +public: + RangeEditDialog(void); + virtual ~RangeEditDialog(); + bool perform(GUIWindow &parentWindow,const Range &range,int maxRange); + const Range &getRange(void)const; +private: + RangeEditDialog(const RangeEditDialog &someRangeEditDialog); + RangeEditDialog &operator=(const RangeEditDialog &someRangeEditDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setData(void)const; + void getData(void); + bool isValid(void); + void errorMessage(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Range mRange; + String mLastError; + int mMaxRange; +}; + +inline +const Range &RangeEditDialog::getRange(void)const +{ + return mRange; +} +#endif diff --git a/guitar/backup/20030501/Registration.hpp b/guitar/backup/20030501/Registration.hpp new file mode 100644 index 0000000..9871a01 --- /dev/null +++ b/guitar/backup/20030501/Registration.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REGISTRATION_HPP_ +#define _GUITAR_REGISTRATION_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _GUITAR_LICENSE_HPP_ +#include +#endif + +// Registration procedure +// When application first comes up it will check registry for a license + +// If no license exists and there is no "install.gid" file it will create a 30 day license +// along with an "install.gid" hidden file in the product directory. +// If no license key exists and there IS an "install.gid" file in the product directory, +// the user will be prompted to enter a valid license key. +// +// +// If a license exists it will check the validity of the license by.... +// If the license is type "non expiring", the application will proceeed normally. +// If the license is type "expiring", it will check to see if the license has expired. +// If the license has expired, a dialog box will appear, prompting the user to +// enter a valid license. +// If no valid license is entered, then the application will exit. +// In addition, a dialog box will be available from the help screen to enable the user +// to enter in additional licenses + +class Registration +{ +public: + virtual ~Registration(); + static Registration &getInstance(); + bool hasLicense(void)const; + bool hasGID(void)const; + bool getLicense(License &license)const; + bool create30DayLicense(void)const; + bool create15DayLicense(void)const; + bool createPermanentLicense(void)const; + bool createLicense(int days)const; + bool removeLicense(void); + bool applyLicense(const String &uuencodedLicense); + bool applyLicense(Block &strLicenseLines); + License generatePermanentLicense(void)const; // return a permanent license +private: + Registration(); + static SmartPointer smRegistration; + + String mRegistrationKeyName; + String mSettingsLicenseKey; + RegKey mRegKeyRegistration; +}; +#endif diff --git a/guitar/backup/20030501/ScaleDlg.cpp b/guitar/backup/20030501/ScaleDlg.cpp new file mode 100644 index 0000000..e804c29 --- /dev/null +++ b/guitar/backup/20030501/ScaleDlg.cpp @@ -0,0 +1,256 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +ScaleDialog::ScaleDialog(void) +: mInEdit(false) +{ + mInitHandler.setCallback(this,&ScaleDialog::initHandler); + mCreateHandler.setCallback(this,&ScaleDialog::createHandler); + mCloseHandler.setCallback(this,&ScaleDialog::closeHandler); + mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler); + mCommandHandler.setCallback(this,&ScaleDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog) +{ // private implementation + *this=someScaleDialog; +} + +ScaleDialog::~ScaleDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog) +{ // private implementation + return *this; +} + +bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; + return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Half Diminished"); + mScaleList->addString("Diminished Whole Tone"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); + showScale(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + case SCALEDLG_SPIN : + break; + case SCALEDLG_ROOT : + handleRoot(); + break; + case SCALEDLG_LIST : + handleList(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void ScaleDialog::handleOk(void) +{ +} + +void ScaleDialog::handleRoot(void) +{ + String strRoot; + + if(mInEdit)return; + mInEdit=true; + getText(SCALEDLG_ROOT,strRoot); + strRoot.upper(); + if(strRoot=="0")setText(SCALEDLG_ROOT,"A"); + else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#"); + else if(strRoot=="2")setText(SCALEDLG_ROOT,"B"); + else if(strRoot=="3")setText(SCALEDLG_ROOT,"C"); + else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#"); + else if(strRoot=="5")setText(SCALEDLG_ROOT,"D"); + else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#"); + else if(strRoot=="7")setText(SCALEDLG_ROOT,"E"); + else if(strRoot=="8")setText(SCALEDLG_ROOT,"F"); + else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#"); + else if(strRoot=="10")setText(SCALEDLG_ROOT,"G"); + else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#"); + if(!showScale())setText(SCALEDLG_ROOT,"A"); + mInEdit=false; +} + +void ScaleDialog::handleList(void) +{ + showScale(); +} + +bool ScaleDialog::showScale(void) +{ + String strScale; + String strRoot; + DWORD current; + + current=mScaleList->getCurrent(); + getText(SCALEDLG_ROOT,strRoot); + if(Note::None==Note::getNoteType(strRoot))return false; + mScaleList->getText(strScale,current); + showScale(strRoot,strScale); + return true; +} + +void ScaleDialog::showScale(const String &root,const String &scale) +{ + if(scale=="Ionian") + { + IonianScale ionianScale(Note::getNoteType(root)); + showScale(ionianScale); + } + else if(scale=="Dorian") + { + DorianScale dorianScale(Note::getNoteType(root)); + showScale(dorianScale); + } + else if(scale=="Phrygian") + { + PhrygianScale phrygianScale(Note::getNoteType(root)); + showScale(phrygianScale); + } + else if(scale=="Lydian") + { + LydianScale lydianScale(Note::getNoteType(root)); + showScale(lydianScale); + } + else if(scale=="Mixolydian") + { + MixolydianScale mixolydianScale(Note::getNoteType(root)); + showScale(mixolydianScale); + } + else if(scale=="Aeolian") + { + AeolianScale aeolianScale(Note::getNoteType(root)); + showScale(aeolianScale); + } + else if(scale=="Locrian") + { + LocrianScale locrianScale(Note::getNoteType(root)); + showScale(locrianScale); + } + else if(scale=="Pentatonic Minor") + { + PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root)); + showScale(pentatonicMinorScale); + } + else if(scale=="Harmonic Minor") + { + HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root)); + showScale(harmonicMinorScale); + } + else if(scale=="Melodic Minor") + { + MelodicMinorScale melodicMinorScale(Note::getNoteType(root)); + showScale(melodicMinorScale); + } + else if(scale=="Dorian-II") + { + DorianIIScale dorianIIScale(Note::getNoteType(root)); + showScale(dorianIIScale); + } + else if(scale=="Lydian Augmented") + { + LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root)); + showScale(lydianAugmentedScale); + } + else if(scale=="Lydian Dominant") + { + LydianDominantScale lydianDominantScale(Note::getNoteType(root)); + showScale(lydianDominantScale); + } + else if(scale=="Half Diminished") + { + HalfDiminishedScale halfDiminishedScale(Note::getNoteType(root)); + showScale(halfDiminishedScale); + } + else if(scale=="Diminished Whole Tone") + { + DiminishedWholeToneScale diminishedWholeToneScale(Note::getNoteType(root)); + showScale(diminishedWholeToneScale); + } +} + +void ScaleDialog::showScale(const Scale &scale) +{ + CallbackData cbData(2,(LPARAM)&scale); + mPlayNoteHandler.callback(cbData); +// if(!mMIDIDevice->getDevice().hasDevice())mMIDIDevice->getDevice().openDevice(); +// scale.play(mMIDIDevice->getDevice()); +} + + diff --git a/guitar/backup/20030501/ScaleDlg.hpp b/guitar/backup/20030501/ScaleDlg.hpp new file mode 100644 index 0000000..fa5f67b --- /dev/null +++ b/guitar/backup/20030501/ScaleDlg.hpp @@ -0,0 +1,59 @@ +#ifndef _GUITAR_SCALEDLG_HPP_ +#define _GUITAR_SCALEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class Scale; + +class ScaleDialog : public DWindow +{ +public: + ScaleDialog(void); + virtual ~ScaleDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + ScaleDialog(const ScaleDialog &someScaleDialog); + ScaleDialog &operator=(const ScaleDialog &someScaleDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void handleRoot(void); + void handleList(void); + bool showScale(void); + void showScale(const Scale &scale); + void showScale(const String &root,const String &scale); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mScaleList; + SmartPointer mMIDIDevice; + CallbackPointer mPlayNoteHandler; + Fretboard mFretboard; + bool mInEdit; +}; +#endif diff --git a/guitar/backup/20030501/ScrollInfo.cpp b/guitar/backup/20030501/ScrollInfo.cpp new file mode 100644 index 0000000..76ba573 --- /dev/null +++ b/guitar/backup/20030501/ScrollInfo.cpp @@ -0,0 +1,136 @@ +#include + +bool ScrollInfo::pageDown(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()+PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +bool ScrollInfo::pageUp(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()-PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + diff --git a/guitar/backup/20030501/ScrollInfo.hpp b/guitar/backup/20030501/ScrollInfo.hpp new file mode 100644 index 0000000..2dc42c1 --- /dev/null +++ b/guitar/backup/20030501/ScrollInfo.hpp @@ -0,0 +1,274 @@ +#ifndef _GUITAR_SCROLLINFO_HPP_ +#define _GUITAR_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); + bool pageUp(void); + bool pageDown(void); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + + if(scrollableObjectWidth()==width&&scrollableObjectHeight()==height)return; + + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_REGISTRY_HPP_ +#include +#endif + +class Sequencer : private MIDIOutputDevice +{ +public: + Sequencer(); + virtual ~Sequencer(); + bool midiEvent(const PureEvent &somePureEvent); + bool clearNotes(void); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + MIDIOutputDevice &getDevice(void); +private: + void changeProgram(void); +}; + +inline +Sequencer::Sequencer() +{ + changeProgram(); +} + +inline +Sequencer::~Sequencer() +{ + closeDevice(); +} + +inline +bool Sequencer::midiEvent(const PureEvent &somePureEvent) +{ + return MIDIOutputDevice::midiEvent(somePureEvent); +} + +inline +bool Sequencer::hasDevice(void)const +{ + return MIDIOutputDevice::hasDevice(); +} + +inline +void Sequencer::closeDevice(void) +{ + MIDIOutputDevice::closeDevice(); +} + +inline +bool Sequencer::openDevice(void) +{ + Registry registry; + + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; +// if(!MIDIOutputDevice::openDevice())return false; + changeProgram(); + return true; +} + +inline +bool Sequencer::clearNotes(void) +{ + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +} + +inline +MIDIOutputDevice &Sequencer::getDevice(void) +{ + if(!hasDevice()) + { + openDevice(); + changeProgram(); + } + return (MIDIOutputDevice&)*this; +} + +inline +void Sequencer::changeProgram(void) +{ + Registry registry; + midiEvent(ProgramChange(registry.getInstrument()).getEvent()); +} +#endif diff --git a/guitar/backup/20030501/TabEntry.cpp b/guitar/backup/20030501/TabEntry.cpp new file mode 100644 index 0000000..d0449ce --- /dev/null +++ b/guitar/backup/20030501/TabEntry.cpp @@ -0,0 +1,129 @@ +#include +#include +#include +#include + +TabEntry::TabEntry(const TabEntry &entry) +{ + *this=entry; +} + +TabEntry &TabEntry::operator=(const TabEntry &entry) +{ + remove(); + for(int index=0;index&)*this).operator[](index)==((TabEntry&)entry)[index]))return false; + } + return true; +} + +bool TabEntry::play(MIDIOutputDevice &midiDevice,bool useDelay) +{ + if(!midiDevice.hasDevice())return false; + for(int index=0;index::remove(entryIndex); + return true; +} + +String TabEntry::toString(void)const +{ + String str; + + str+="TABENTRY "; + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif +#ifndef _GUITAR_TIMING_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class TabEntry; +typedef Block TabEntries; + +class TabEntry : public Block +{ +public: + TabEntry(); + TabEntry(const TabEntry &entry); + virtual ~TabEntry(); + bool play(MIDIOutputDevice &midiDevice,bool useDelay=true); + bool operator==(const TabEntry &entry)const; + TabEntry &operator=(const TabEntry &entry); + const NoteType &getNoteType(void)const; + void setNoteType(const NoteType ¬eType); + String toString(void)const; + bool fromString(String strText); + bool contains(int string,int &entryIndex); + bool contains(int string); + bool remove(int string,int fret); + void remove(void); + bool addFrettedNote(int string,const FrettedNote &frettedNote); + bool setFrettedNote(int string,const FrettedNote &frettedNote); +private: + void delay(void); + + NoteType mNoteType; +}; + +inline +TabEntry::TabEntry() +{ +} + +inline +TabEntry::~TabEntry() +{ +} + +inline +const NoteType &TabEntry::getNoteType(void)const +{ + return mNoteType; +} + +inline +void TabEntry::setNoteType(const NoteType ¬eType) +{ + mNoteType=noteType; +} + +inline +void TabEntry::remove(void) +{ + Block::remove(); +} +#endif diff --git a/guitar/backup/20030501/TabLines.cpp b/guitar/backup/20030501/TabLines.cpp new file mode 100644 index 0000000..a56ae0d --- /dev/null +++ b/guitar/backup/20030501/TabLines.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +// returns -1 on error, 1 if added to entry, 0 otherwise + +int TabLines::firstElement(TabEntry &entry,Fretboard &fretboard) +{ + TabElement element; + + entry.remove(); + for(int index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabEntry; +class Fretboard; + +typedef Element TabElement[6]; + +class TabLines : public Array +{ +public: + enum{NumLines=6}; + TabLines(); + int firstElement(TabEntry &entry,Fretboard &fretboard); + int nextElement(TabEntry &entry,Fretboard &fretboard); + virtual ~TabLines(); +private: + bool haveElement(TabElement &elements)const; + bool validate(Element &elements)const; + void insert(TabEntry &entry,TabElement &elements,Fretboard &fretboard); + void synchronize(void); +}; + +inline +TabLines::TabLines() +{ + size(NumLines); +} + +inline +TabLines::~TabLines() +{ +} +#endif diff --git a/guitar/backup/20030501/TabView.cpp b/guitar/backup/20030501/TabView.cpp new file mode 100644 index 0000000..ba2f85b --- /dev/null +++ b/guitar/backup/20030501/TabView.cpp @@ -0,0 +1,95 @@ +#include + +TabView::TabView(void) +{ + mCreateHandler.setCallback(this,&TabView::createHandler); + mSizeHandler.setCallback(this,&TabView::sizeHandler); + mPaintHandler.setCallback(this,&TabView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&TabView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&TabView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabView::leftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +TabView::~TabView() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType TabView::createHandler(CallbackData &someCallbackData) +{ + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType TabView::sizeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType TabView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void TabView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String TabView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void TabView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(LTGRAY_BRUSH); +} + +void TabView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030501/TabView.hpp b/guitar/backup/20030501/TabView.hpp new file mode 100644 index 0000000..6f9ef25 --- /dev/null +++ b/guitar/backup/20030501/TabView.hpp @@ -0,0 +1,42 @@ +#ifndef _GUITAR_TABVIEW_HPP_ +#define _GUITAR_TABVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class StatusBarEx; + +class TabView : public MDIWindow +{ +public: + TabView(void); + virtual ~TabView(); + String getTitle(void)const; +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,WindowWidth=565,WindowHeight=210}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + SmartPointer mStatusBar; +}; +#endif diff --git a/guitar/backup/20030501/TabWriter.cpp b/guitar/backup/20030501/TabWriter.cpp new file mode 100644 index 0000000..d3f5222 --- /dev/null +++ b/guitar/backup/20030501/TabWriter.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + + GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug); + if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb")) + { + GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug); + return false; + } + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + initLines(); + setHeader(); + for(int index=0,entryCount=0;indexMaxItems) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outFile); + outFile.writeLine(String(" ")); + initLines(); + setHeader(); + entryCount=0; + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabWriter : public Array +{ +public: + TabWriter(); + virtual ~TabWriter(); + bool write(TabEntries &entries,const String &strPathTabFile); +private: + enum {MaxItems=30,NumLines=6}; + void writeLines(File &outFile); + void initLines(void); + void setHeader(void); + void synchronize(void); +}; + +inline +TabWriter::TabWriter() +{ +} + +inline +TabWriter::~TabWriter() +{ +} +#endif diff --git a/guitar/backup/20030501/Tablature.hpp b/guitar/backup/20030501/Tablature.hpp new file mode 100644 index 0000000..000104e --- /dev/null +++ b/guitar/backup/20030501/Tablature.hpp @@ -0,0 +1,93 @@ +#ifndef _GUITAR_TABLATURE_HPP_ +#define _GUITAR_TABLATURE_HPP_ +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_TABLINES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class GUIWindow; +class TabPage; + +class Tablature +{ +public: + typedef enum LastError{None,FileOpenError,NoTabsParsedError,NoFrettedNotesError}; + Tablature(); + Tablature(const String &pathFileName); + virtual ~Tablature(); + bool open(const String &pathFileTablature); // open tablature file + bool import(String pathFileTablature); // import tablature file into project + bool save(void); // save tablature file + bool saveAs(const String &pathFileTablature); // save tablature file as... + bool openProject(const String &pathFileName); // open existing project file + bool saveProject(const String &pathFileName=String()); // save current project + bool play(MIDIOutputDevice &midiDevice); + LastError getLastError(void)const; + const String &getPathFileTablature(void)const; + const String &getPathFileProject(void)const; + const TabEntries &getTabEntries(void)const; + void setTabEntries(const TabEntries &entries); + const TabRanges &getTabRanges(void)const; + void setTabRanges(const TabRanges &ranges); + static String getPathFileProject(const String &pathFileTablature); +private: + bool loadTabFile(const String &pathFileName); + bool parseTab(void); + bool isTabLine(const String &strLine,int &startElement)const; + bool setTypeAt(int index,const NoteType ¬eType); + void parseTypes(String strLine); + void parseRange(String strLine); + String getTypes(void)const; + + TabEntries mTabEntries; + TabRanges mTabRanges; + Block mTablature; + Fretboard mFretboard; + String mPathFileName; + LastError mLastError; + String mPathFileTablature; + String mPathFileProject; +}; + +inline +Tablature::Tablature() +{ +} + +inline +Tablature::Tablature(const String &pathFileName) +{ + open(pathFileName); +} + +inline +Tablature::~Tablature() +{ +} + +inline +Tablature::LastError Tablature::getLastError(void)const +{ + return mLastError; +} + +inline +const String &Tablature::getPathFileTablature(void)const +{ + return mPathFileTablature; +} + +inline +const String &Tablature::getPathFileProject(void)const +{ + return mPathFileProject; +} +#endif diff --git a/guitar/backup/20030501/Timing.cpp b/guitar/backup/20030501/Timing.cpp new file mode 100644 index 0000000..f638d7a --- /dev/null +++ b/guitar/backup/20030501/Timing.cpp @@ -0,0 +1,138 @@ +#include +#include +#include + +int Timing::mMicrosecondsPerQuarterNote=Timing::microsecondsPerQuarterNote(Registry().getMicrosecondsPerQuarterNote()); +int Timing::mMillisecondsPerWholeNote; +int Timing::mMillisecondsPerHalfNote; +int Timing::mMillisecondsPerQuarterNote; +int Timing::mMillisecondsPerEigthNote; +int Timing::mMillisecondsPerSixteenthNote; +int Timing::mMillisecondsPerThirtySecondNote; +int Timing::mMillisecondsPerSixtyFourthNote; + +int Timing::microsecondsPerQuarterNote(int microsecondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=microsecondsPerQuarterNote; + mMillisecondsPerQuarterNote=(double)microsecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; + return mMicrosecondsPerQuarterNote; +} + +int Timing::microsecondsPerQuarterNote(void) +{ + return mMicrosecondsPerQuarterNote; +} + +void Timing::secondsPerQuarterNote(float secondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=secondsPerQuarterNote*1000000.00;; + mMillisecondsPerQuarterNote=(double)mMicrosecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; +} + +int Timing::millisecondsPerWholeNote(void) +{ + return mMillisecondsPerWholeNote; +} + +int Timing::millisecondsPerHalfNote(void) +{ + return mMillisecondsPerHalfNote; +} + +int Timing::millisecondsPerQuarterNote(void) +{ + return mMillisecondsPerQuarterNote; +} + +int Timing::millisecondsPerEightNote(void) +{ + return mMillisecondsPerEigthNote; +} + +int Timing::millisecondsPerSixteenthNote(void) +{ + return mMillisecondsPerSixteenthNote; +} + +int Timing::millisecondsPerThirtySecondNote(void) +{ + return mMillisecondsPerThirtySecondNote; +} + +int Timing::millisecondsPerSixtyFourthNote(void) +{ + return mMillisecondsPerSixtyFourthNote; +} + +int Timing::getDelay(const NoteType ¬eType) +{ + switch(noteType.getNoteType()) + { + case NoteType::WholeNote : + return millisecondsPerWholeNote(); + case NoteType::HalfNote : + return millisecondsPerHalfNote(); + case NoteType::QuarterNote : + return millisecondsPerQuarterNote(); + case NoteType::EighthNote : + return millisecondsPerEightNote(); + case NoteType::SixteenthNote : + return millisecondsPerSixteenthNote(); + case NoteType::ThirtySecondNote : + return millisecondsPerThirtySecondNote(); + case NoteType::SixtyFourthNote : + return millisecondsPerSixtyFourthNote(); + default : + return millisecondsPerSixtyFourthNote(); + } +} + +String Timing::toString(void) +{ + String strTiming; + strTiming+=String("1/1=")+String().fromInt(millisecondsPerWholeNote())+String("ms, "); + strTiming+=String("1/2=")+String().fromInt(millisecondsPerHalfNote())+String("ms, "); + strTiming+=String("1/4=")+String().fromInt(millisecondsPerQuarterNote())+String("ms, "); + strTiming+=String("1/8=")+String().fromInt(millisecondsPerEightNote())+String("ms, "); + strTiming+=String("1/16=")+String().fromInt(millisecondsPerSixteenthNote())+String("ms, "); + strTiming+=String("1/32=")+String().fromInt(millisecondsPerThirtySecondNote())+String("ms, "); + strTiming+=String("1/64=")+String().fromInt(millisecondsPerSixtyFourthNote())+String("ms, "); + return strTiming; +} + + +/* +microseconds per quarter note = 631578 +milliseconds per quarter note = 631578/1000 = 631 + 631578*.001 = 631 + +msecs per qtr note=usecs per qtr note *.001 + +quarter note = msecs per 4th note +eigth note = msecs/2 +sixteenth note = msecs/4 +thirty second note = msecs/8 +sixty fourth note = msecs/16 + +(ie) +microsecs millisecs 4th note 8th note 16th note 32nd note 64th note +--------- --------- -------- -------- --------- --------- --------- + 631578 631 631 315 157 78 39 + +options +seconds per qtr note: .5 + +msecs per qtr note=(seconds_per_qtr_note*1000) +*/ \ No newline at end of file diff --git a/guitar/backup/20030501/Timing.hpp b/guitar/backup/20030501/Timing.hpp new file mode 100644 index 0000000..96bcf39 --- /dev/null +++ b/guitar/backup/20030501/Timing.hpp @@ -0,0 +1,48 @@ +#ifndef _GUITAR_TIMING_HPP_ +#define _GUITAR_TIMING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif + +class Timing +{ +public: + static int microsecondsPerQuarterNote(int microsecondsPerQuarterNote); + static int microsecondsPerQuarterNote(void); + static void secondsPerQuarterNote(float secondsPerQuarterNote); + static int millisecondsPerWholeNote(void); + static int millisecondsPerHalfNote(void); + static int millisecondsPerQuarterNote(void); + static int millisecondsPerEightNote(void); + static int millisecondsPerSixteenthNote(void); + static int millisecondsPerThirtySecondNote(void); + static int millisecondsPerSixtyFourthNote(void); + static int getDelay(const NoteType ¬eType); + static String toString(void); +private: + Timing(); + virtual ~Timing(); + static int mMicrosecondsPerQuarterNote; + static int mMillisecondsPerWholeNote; + static int mMillisecondsPerHalfNote; + static int mMillisecondsPerQuarterNote; + static int mMillisecondsPerEigthNote; + static int mMillisecondsPerSixteenthNote; + static int mMillisecondsPerThirtySecondNote; + static int mMillisecondsPerSixtyFourthNote; +}; + +inline +Timing::Timing() +{ +} + +inline +Timing::~Timing() +{ +} +#endif + diff --git a/guitar/backup/20030501/Tuning.cpp b/guitar/backup/20030501/Tuning.cpp new file mode 100644 index 0000000..c4b1cb6 --- /dev/null +++ b/guitar/backup/20030501/Tuning.cpp @@ -0,0 +1,20 @@ +#include +#include + +void Tuning::setStandardTuning(void) +{ + size(StandardTuningStrings); + operator[](0)=Note(Note::E,3); + operator[](1)=Note(Note::A,3); + operator[](2)=Note(Note::D,4); + operator[](3)=Note(Note::G,4); + operator[](4)=Note(Note::B,4); + operator[](5)=Note(Note::E,operator[](4).getOctave()+1); +} + +// virtuals + +int Tuning::getDelay(void)const +{ + return Delay; +} diff --git a/guitar/backup/20030501/Tuning.hpp b/guitar/backup/20030501/Tuning.hpp new file mode 100644 index 0000000..d4d41e7 --- /dev/null +++ b/guitar/backup/20030501/Tuning.hpp @@ -0,0 +1,43 @@ +#ifndef _GUITAR_TUNING_HPP_ +#define _GUITAR_TUNING_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif + +class Tuning : public Notes +{ +public: + enum {StandardTuningStrings=6,Delay=1000}; + Tuning(); + virtual ~Tuning(); + int getStrings(void)const; + void setStrings(int strings); + void setStandardTuning(void); +protected: + virtual int getDelay(void)const; +private: +}; + +inline +Tuning::Tuning() +{ + setStandardTuning(); +} + +inline +Tuning::~Tuning() +{ +} + +inline +int Tuning::getStrings(void)const +{ + return size(); +} + +inline +void Tuning::setStrings(int strings) +{ + size(strings); +} +#endif diff --git a/guitar/backup/20030501/chordmain.cpp b/guitar/backup/20030501/chordmain.cpp new file mode 100644 index 0000000..fc9ac30 --- /dev/null +++ b/guitar/backup/20030501/chordmain.cpp @@ -0,0 +1,33 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDef; + String strEnum; + File inFile("tabs/allchords.tab"); + File rcFile("chords.rc","wb"); + File hFile("chords.h","wb"); + int count(21000); + + rcFile.writeLine("#include "); + rcFile.writeLine("STRINGTABLE DISCARDABLE"); + rcFile.writeLine("BEGIN"); + while(inFile.readLine(strLine)) + { + strEnum="STRING_"+String().fromInt(count); + strDef=strEnum; + strDef+="\t\""; + strDef+=strLine.betweenString(0,':')+"\""; + rcFile.writeLine(strDef); + hFile.writeLine(String("#define ")+strEnum+String(" ")+String().fromInt(count)); + count++; + } + rcFile.writeLine("END"); + return 0; + +// MainFrame mainFrame; +// mainFrame.createWindow("TabMaster","TabMaster v1.00a","mainMenu","APP_ICON"); +// return mainFrame.messageLoop(); +} diff --git a/guitar/backup/20030501/guitar.h b/guitar/backup/20030501/guitar.h new file mode 100644 index 0000000..e91381b --- /dev/null +++ b/guitar/backup/20030501/guitar.h @@ -0,0 +1,1079 @@ +#ifndef _GUITAR_GUITAR_H_ +#define _GUITAR_GUITAR_H_ + +#include "windows.h" + +// +#define IDC_STATIC -1 + +// LICENSE DIALOG +#define LICENSE_DIALOG_LICENSE 1077 +#define LICENSE_DIALOG_REQUEST_LICENSE 1076 + +// MIDIDIALOG +#define MIDI_TRACK1 1042 +#define MIDI_TRACK2 1043 +#define MIDI_TRACK3 1044 +#define MIDI_TRACK4 1045 +#define MIDI_TRACK5 1046 +#define MIDI_TRACK6 1047 +#define MIDI_TRACK7 1048 +#define MIDI_TRACK8 1049 +#define MIDI_TRACK9 1050 +#define MIDI_TRACK10 1051 +#define MIDI_TRACK11 1052 +#define MIDI_TRACK12 1053 +#define MIDI_TRACK13 1054 +#define MIDI_TRACK14 1055 +#define MIDI_TRACK15 1056 +#define MIDI_TRACK16 1057 +#define MIDI_EVENTS_TRACK1 1060 +#define MIDI_EVENTS_TRACK2 1061 +#define MIDI_EVENTS_TRACK3 1062 +#define MIDI_EVENTS_TRACK4 1063 +#define MIDI_EVENTS_TRACK5 1064 +#define MIDI_EVENTS_TRACK6 1065 +#define MIDI_EVENTS_TRACK7 1066 +#define MIDI_EVENTS_TRACK8 1067 +#define MIDI_EVENTS_TRACK9 1068 +#define MIDI_EVENTS_TRACK10 1069 +#define MIDI_EVENTS_TRACK11 1070 +#define MIDI_EVENTS_TRACK12 1071 +#define MIDI_EVENTS_TRACK13 1072 +#define MIDI_EVENTS_TRACK14 1073 +#define MIDI_EVENTS_TRACK15 1074 +#define MIDI_EVENTS_TRACK16 1075 + +// FRETENTRY DIALOG +#define FRETENTRY_FRET 1037 +#define FRETENTRY_ACTION 1038 +#define FRETENTRY_STRING 1039 +#define FRETENTRY_DURATION 1040 + +// FOR SCALES DIALOG +#define SCALEDLG_LIST 1024 +#define SCALEDLG_ROOT 1025 +#define SCALEDLG_SPIN 1026 + +// FOR RANGE EDIT DIALOG +#define RANGEEDIT_NAME 1016 +#define RANGEEDIT_BEGIN 1017 +#define RANGEEDIT_END 1018 + +// FOR RANGE DIALOG +#define RANGE_LIST 1000 +#define RANGE_INSERT 1022 +#define RANGE_DELETE 1023 + +// FOR SETTINGS DIALOG +#define SETTINGS_MICROSECSPERQTRNOTE 1011 +#define SETTINGS_DEFAULTS 1012 +#define SETTINGS_SHOWACTION 1013 +#define SETTINGS_SHOWNOTES 1014 +#define SETTINGS_ACOUSTICGRANDPIANO 1015 +#define SETTINGS_BRIGHTACOUSTICPIANO 1016 +#define SETTINGS_ELECTRICGRANDPIANO 1017 +#define SETTINGS_ACOUSTICNYLON 1018 +#define SETTINGS_ACOUSTICSTEEL 1019 +#define SETTINGS_JAZZELECTRIC 1020 +#define SETTINGS_CLEANELECTRIC 1021 +#define SETTINGS_MUTEDELECTRIC 1022 +#define SETTINGS_MIDIOUT 1024 + +// FOR CHORD DIALOG +#define CHORDS_LIST 1000 +#define CHORDS_COUNT 1009 + +// FOR TAB ENTRY DIALOG +#define TABENTRY_LIST 1004 +#define TABENTRY_NOTETYPE 1005 +#define TABENTRY_REMAINDER 1006 + +#define MENU_FILE_OPEN 10000 +#define MENU_FILE_EXIT 10001 +#define MENU_FILE_NEW 10002 +#define MENU_FILE_SAVE 10003 +#define MENU_FILE_SAVEAS 10004 +#define MENU_FILE_CLOSE 10005 +#define MENU_FILE_PRINT 10006 +#define MENU_FILE_IMPORT 10007 +#define MENU_FILE_MIDI_IMPORT 10008 + +#define MENU_TABLATURE_PLAY 10500 +#define MENU_TABLATURE_PLAYTOEND 10501 +#define MENU_TABLATURE_PLAYREPEATED 10502 +#define MENU_TABLATURE_PLAYRANGE 10503 +#define MENU_TABLATURE_PLAYRANGE_REPEATED 10504 +#define MENU_TABLATURE_STOP 10505 +#define MENU_TABLATURE_ENTRYPROPS 10506 +#define MENU_TABLATURE_SETSTARTRANGE 10507 +#define MENU_TABLATURE_SETENDRANGE 10508 + +#define MENU_OPTIONS_INCREASETEMPO 10601 +#define MENU_OPTIONS_DECREASETEMPO 10602 +#define MENU_OPTIONS_SETTINGS 10603 + +#define MENU_VIEW_FRETBOARD 10700 + +#define MENU_CHORDS_LOOKUP 10800 + +#define MENU_SCALES_SHOW 10900 + +#define MENU_FRETBOARD_CLEAR 11000 +#define MENU_FRETBOARD_SHOWALLPOSITIONS 11001 + +#define MENU_EDIT_CUT 12000 +#define MENU_EDIT_COPY 12001 +#define MENU_EDIT_PASTE 12002 +#define MENU_EDIT_RANGES 12003 + +#define MENU_HELP_INDEX 12100 +#define MENU_HELP_APPLY_LICENSE 12101 +#define MENU_HELP_ABOUT 12102 + +#define TABACCELERATORS 10000 + +// STRINGS + +#define STRING_NOTITLE 19000 +#define STRING_EDITHINT 19001 +#define STRING_PRJEXTENSION 19002 +#define STRING_PRJALLEXTENSION 19003 +#define STRING_TABEXTENSION 19004 +#define STRING_BROWSERKEY 19005 +#define STRING_BROWSERKEYALT 19006 +#define STRING_BROWSERCOMMAND 19007 +#define STRING_HOST 19008 +#define STRING_HELPPAGE 19009 +#define STRING_MIDIEXTENSION 19010 +#define STRING_PURCHASE_URL 19011 + +#define STRING_TABVIEWWINDOWCLASSNAME 20000 +#define STRING_FRETVIEWWINDOWCLASSNAME 20001 +#define STRING_REGISTRYKEYNAME 20002 +#define STRING_HISTORYKEYNAME 20003 +#define STRING_HISTORYKEYSHORTNAME 20004 +#define STRING_SETTINGSKEYNAME 20005 +#define STRING_SETTINGSINSTRUMENT 20006 +#define STRING_SETTINGSACTION 20007 +#define STRING_SETTINGSNOTELETTERS 20008 +#define STRING_SETTINGSMICROSECONDSPERQUARTERNOTE 20009 +#define STRING_REGISTRATIONKEYNAME 20010 +#define STRING_SETTINGSLICENSE 20011 +#define STRING_SETTINGSMIDIOUTPUT 20012 + + +// chord definitions + +#define STRING_21000 21000 +#define STRING_21001 21001 +#define STRING_21002 21002 +#define STRING_21003 21003 +#define STRING_21004 21004 +#define STRING_21005 21005 +#define STRING_21006 21006 +#define STRING_21007 21007 +#define STRING_21008 21008 +#define STRING_21009 21009 +#define STRING_21010 21010 +#define STRING_21011 21011 +#define STRING_21012 21012 +#define STRING_21013 21013 +#define STRING_21014 21014 +#define STRING_21015 21015 +#define STRING_21016 21016 +#define STRING_21017 21017 +#define STRING_21018 21018 +#define STRING_21019 21019 +#define STRING_21020 21020 +#define STRING_21021 21021 +#define STRING_21022 21022 +#define STRING_21023 21023 +#define STRING_21024 21024 +#define STRING_21025 21025 +#define STRING_21026 21026 +#define STRING_21027 21027 +#define STRING_21028 21028 +#define STRING_21029 21029 +#define STRING_21030 21030 +#define STRING_21031 21031 +#define STRING_21032 21032 +#define STRING_21033 21033 +#define STRING_21034 21034 +#define STRING_21035 21035 +#define STRING_21036 21036 +#define STRING_21037 21037 +#define STRING_21038 21038 +#define STRING_21039 21039 +#define STRING_21040 21040 +#define STRING_21041 21041 +#define STRING_21042 21042 +#define STRING_21043 21043 +#define STRING_21044 21044 +#define STRING_21045 21045 +#define STRING_21046 21046 +#define STRING_21047 21047 +#define STRING_21048 21048 +#define STRING_21049 21049 +#define STRING_21050 21050 +#define STRING_21051 21051 +#define STRING_21052 21052 +#define STRING_21053 21053 +#define STRING_21054 21054 +#define STRING_21055 21055 +#define STRING_21056 21056 +#define STRING_21057 21057 +#define STRING_21058 21058 +#define STRING_21059 21059 +#define STRING_21060 21060 +#define STRING_21061 21061 +#define STRING_21062 21062 +#define STRING_21063 21063 +#define STRING_21064 21064 +#define STRING_21065 21065 +#define STRING_21066 21066 +#define STRING_21067 21067 +#define STRING_21068 21068 +#define STRING_21069 21069 +#define STRING_21070 21070 +#define STRING_21071 21071 +#define STRING_21072 21072 +#define STRING_21073 21073 +#define STRING_21074 21074 +#define STRING_21075 21075 +#define STRING_21076 21076 +#define STRING_21077 21077 +#define STRING_21078 21078 +#define STRING_21079 21079 +#define STRING_21080 21080 +#define STRING_21081 21081 +#define STRING_21082 21082 +#define STRING_21083 21083 +#define STRING_21084 21084 +#define STRING_21085 21085 +#define STRING_21086 21086 +#define STRING_21087 21087 +#define STRING_21088 21088 +#define STRING_21089 21089 +#define STRING_21090 21090 +#define STRING_21091 21091 +#define STRING_21092 21092 +#define STRING_21093 21093 +#define STRING_21094 21094 +#define STRING_21095 21095 +#define STRING_21096 21096 +#define STRING_21097 21097 +#define STRING_21098 21098 +#define STRING_21099 21099 +#define STRING_21100 21100 +#define STRING_21101 21101 +#define STRING_21102 21102 +#define STRING_21103 21103 +#define STRING_21104 21104 +#define STRING_21105 21105 +#define STRING_21106 21106 +#define STRING_21107 21107 +#define STRING_21108 21108 +#define STRING_21109 21109 +#define STRING_21110 21110 +#define STRING_21111 21111 +#define STRING_21112 21112 +#define STRING_21113 21113 +#define STRING_21114 21114 +#define STRING_21115 21115 +#define STRING_21116 21116 +#define STRING_21117 21117 +#define STRING_21118 21118 +#define STRING_21119 21119 +#define STRING_21120 21120 +#define STRING_21121 21121 +#define STRING_21122 21122 +#define STRING_21123 21123 +#define STRING_21124 21124 +#define STRING_21125 21125 +#define STRING_21126 21126 +#define STRING_21127 21127 +#define STRING_21128 21128 +#define STRING_21129 21129 +#define STRING_21130 21130 +#define STRING_21131 21131 +#define STRING_21132 21132 +#define STRING_21133 21133 +#define STRING_21134 21134 +#define STRING_21135 21135 +#define STRING_21136 21136 +#define STRING_21137 21137 +#define STRING_21138 21138 +#define STRING_21139 21139 +#define STRING_21140 21140 +#define STRING_21141 21141 +#define STRING_21142 21142 +#define STRING_21143 21143 +#define STRING_21144 21144 +#define STRING_21145 21145 +#define STRING_21146 21146 +#define STRING_21147 21147 +#define STRING_21148 21148 +#define STRING_21149 21149 +#define STRING_21150 21150 +#define STRING_21151 21151 +#define STRING_21152 21152 +#define STRING_21153 21153 +#define STRING_21154 21154 +#define STRING_21155 21155 +#define STRING_21156 21156 +#define STRING_21157 21157 +#define STRING_21158 21158 +#define STRING_21159 21159 +#define STRING_21160 21160 +#define STRING_21161 21161 +#define STRING_21162 21162 +#define STRING_21163 21163 +#define STRING_21164 21164 +#define STRING_21165 21165 +#define STRING_21166 21166 +#define STRING_21167 21167 +#define STRING_21168 21168 +#define STRING_21169 21169 +#define STRING_21170 21170 +#define STRING_21171 21171 +#define STRING_21172 21172 +#define STRING_21173 21173 +#define STRING_21174 21174 +#define STRING_21175 21175 +#define STRING_21176 21176 +#define STRING_21177 21177 +#define STRING_21178 21178 +#define STRING_21179 21179 +#define STRING_21180 21180 +#define STRING_21181 21181 +#define STRING_21182 21182 +#define STRING_21183 21183 +#define STRING_21184 21184 +#define STRING_21185 21185 +#define STRING_21186 21186 +#define STRING_21187 21187 +#define STRING_21188 21188 +#define STRING_21189 21189 +#define STRING_21190 21190 +#define STRING_21191 21191 +#define STRING_21192 21192 +#define STRING_21193 21193 +#define STRING_21194 21194 +#define STRING_21195 21195 +#define STRING_21196 21196 +#define STRING_21197 21197 +#define STRING_21198 21198 +#define STRING_21199 21199 +#define STRING_21200 21200 +#define STRING_21201 21201 +#define STRING_21202 21202 +#define STRING_21203 21203 +#define STRING_21204 21204 +#define STRING_21205 21205 +#define STRING_21206 21206 +#define STRING_21207 21207 +#define STRING_21208 21208 +#define STRING_21209 21209 +#define STRING_21210 21210 +#define STRING_21211 21211 +#define STRING_21212 21212 +#define STRING_21213 21213 +#define STRING_21214 21214 +#define STRING_21215 21215 +#define STRING_21216 21216 +#define STRING_21217 21217 +#define STRING_21218 21218 +#define STRING_21219 21219 +#define STRING_21220 21220 +#define STRING_21221 21221 +#define STRING_21222 21222 +#define STRING_21223 21223 +#define STRING_21224 21224 +#define STRING_21225 21225 +#define STRING_21226 21226 +#define STRING_21227 21227 +#define STRING_21228 21228 +#define STRING_21229 21229 +#define STRING_21230 21230 +#define STRING_21231 21231 +#define STRING_21232 21232 +#define STRING_21233 21233 +#define STRING_21234 21234 +#define STRING_21235 21235 +#define STRING_21236 21236 +#define STRING_21237 21237 +#define STRING_21238 21238 +#define STRING_21239 21239 +#define STRING_21240 21240 +#define STRING_21241 21241 +#define STRING_21242 21242 +#define STRING_21243 21243 +#define STRING_21244 21244 +#define STRING_21245 21245 +#define STRING_21246 21246 +#define STRING_21247 21247 +#define STRING_21248 21248 +#define STRING_21249 21249 +#define STRING_21250 21250 +#define STRING_21251 21251 +#define STRING_21252 21252 +#define STRING_21253 21253 +#define STRING_21254 21254 +#define STRING_21255 21255 +#define STRING_21256 21256 +#define STRING_21257 21257 +#define STRING_21258 21258 +#define STRING_21259 21259 +#define STRING_21260 21260 +#define STRING_21261 21261 +#define STRING_21262 21262 +#define STRING_21263 21263 +#define STRING_21264 21264 +#define STRING_21265 21265 +#define STRING_21266 21266 +#define STRING_21267 21267 +#define STRING_21268 21268 +#define STRING_21269 21269 +#define STRING_21270 21270 +#define STRING_21271 21271 +#define STRING_21272 21272 +#define STRING_21273 21273 +#define STRING_21274 21274 +#define STRING_21275 21275 +#define STRING_21276 21276 +#define STRING_21277 21277 +#define STRING_21278 21278 +#define STRING_21279 21279 +#define STRING_21280 21280 +#define STRING_21281 21281 +#define STRING_21282 21282 +#define STRING_21283 21283 +#define STRING_21284 21284 +#define STRING_21285 21285 +#define STRING_21286 21286 +#define STRING_21287 21287 +#define STRING_21288 21288 +#define STRING_21289 21289 +#define STRING_21290 21290 +#define STRING_21291 21291 +#define STRING_21292 21292 +#define STRING_21293 21293 +#define STRING_21294 21294 +#define STRING_21295 21295 +#define STRING_21296 21296 +#define STRING_21297 21297 +#define STRING_21298 21298 +#define STRING_21299 21299 +#define STRING_21300 21300 +#define STRING_21301 21301 +#define STRING_21302 21302 +#define STRING_21303 21303 +#define STRING_21304 21304 +#define STRING_21305 21305 +#define STRING_21306 21306 +#define STRING_21307 21307 +#define STRING_21308 21308 +#define STRING_21309 21309 +#define STRING_21310 21310 +#define STRING_21311 21311 +#define STRING_21312 21312 +#define STRING_21313 21313 +#define STRING_21314 21314 +#define STRING_21315 21315 +#define STRING_21316 21316 +#define STRING_21317 21317 +#define STRING_21318 21318 +#define STRING_21319 21319 +#define STRING_21320 21320 +#define STRING_21321 21321 +#define STRING_21322 21322 +#define STRING_21323 21323 +#define STRING_21324 21324 +#define STRING_21325 21325 +#define STRING_21326 21326 +#define STRING_21327 21327 +#define STRING_21328 21328 +#define STRING_21329 21329 +#define STRING_21330 21330 +#define STRING_21331 21331 +#define STRING_21332 21332 +#define STRING_21333 21333 +#define STRING_21334 21334 +#define STRING_21335 21335 +#define STRING_21336 21336 +#define STRING_21337 21337 +#define STRING_21338 21338 +#define STRING_21339 21339 +#define STRING_21340 21340 +#define STRING_21341 21341 +#define STRING_21342 21342 +#define STRING_21343 21343 +#define STRING_21344 21344 +#define STRING_21345 21345 +#define STRING_21346 21346 +#define STRING_21347 21347 +#define STRING_21348 21348 +#define STRING_21349 21349 +#define STRING_21350 21350 +#define STRING_21351 21351 +#define STRING_21352 21352 +#define STRING_21353 21353 +#define STRING_21354 21354 +#define STRING_21355 21355 +#define STRING_21356 21356 +#define STRING_21357 21357 +#define STRING_21358 21358 +#define STRING_21359 21359 +#define STRING_21360 21360 +#define STRING_21361 21361 +#define STRING_21362 21362 +#define STRING_21363 21363 +#define STRING_21364 21364 +#define STRING_21365 21365 +#define STRING_21366 21366 +#define STRING_21367 21367 +#define STRING_21368 21368 +#define STRING_21369 21369 +#define STRING_21370 21370 +#define STRING_21371 21371 +#define STRING_21372 21372 +#define STRING_21373 21373 +#define STRING_21374 21374 +#define STRING_21375 21375 +#define STRING_21376 21376 +#define STRING_21377 21377 +#define STRING_21378 21378 +#define STRING_21379 21379 +#define STRING_21380 21380 +#define STRING_21381 21381 +#define STRING_21382 21382 +#define STRING_21383 21383 +#define STRING_21384 21384 +#define STRING_21385 21385 +#define STRING_21386 21386 +#define STRING_21387 21387 +#define STRING_21388 21388 +#define STRING_21389 21389 +#define STRING_21390 21390 +#define STRING_21391 21391 +#define STRING_21392 21392 +#define STRING_21393 21393 +#define STRING_21394 21394 +#define STRING_21395 21395 +#define STRING_21396 21396 +#define STRING_21397 21397 +#define STRING_21398 21398 +#define STRING_21399 21399 +#define STRING_21400 21400 +#define STRING_21401 21401 +#define STRING_21402 21402 +#define STRING_21403 21403 +#define STRING_21404 21404 +#define STRING_21405 21405 +#define STRING_21406 21406 +#define STRING_21407 21407 +#define STRING_21408 21408 +#define STRING_21409 21409 +#define STRING_21410 21410 +#define STRING_21411 21411 +#define STRING_21412 21412 +#define STRING_21413 21413 +#define STRING_21414 21414 +#define STRING_21415 21415 +#define STRING_21416 21416 +#define STRING_21417 21417 +#define STRING_21418 21418 +#define STRING_21419 21419 +#define STRING_21420 21420 +#define STRING_21421 21421 +#define STRING_21422 21422 +#define STRING_21423 21423 +#define STRING_21424 21424 +#define STRING_21425 21425 +#define STRING_21426 21426 +#define STRING_21427 21427 +#define STRING_21428 21428 +#define STRING_21429 21429 +#define STRING_21430 21430 +#define STRING_21431 21431 +#define STRING_21432 21432 +#define STRING_21433 21433 +#define STRING_21434 21434 +#define STRING_21435 21435 +#define STRING_21436 21436 +#define STRING_21437 21437 +#define STRING_21438 21438 +#define STRING_21439 21439 +#define STRING_21440 21440 +#define STRING_21441 21441 +#define STRING_21442 21442 +#define STRING_21443 21443 +#define STRING_21444 21444 +#define STRING_21445 21445 +#define STRING_21446 21446 +#define STRING_21447 21447 +#define STRING_21448 21448 +#define STRING_21449 21449 +#define STRING_21450 21450 +#define STRING_21451 21451 +#define STRING_21452 21452 +#define STRING_21453 21453 +#define STRING_21454 21454 +#define STRING_21455 21455 +#define STRING_21456 21456 +#define STRING_21457 21457 +#define STRING_21458 21458 +#define STRING_21459 21459 +#define STRING_21460 21460 +#define STRING_21461 21461 +#define STRING_21462 21462 +#define STRING_21463 21463 +#define STRING_21464 21464 +#define STRING_21465 21465 +#define STRING_21466 21466 +#define STRING_21467 21467 +#define STRING_21468 21468 +#define STRING_21469 21469 +#define STRING_21470 21470 +#define STRING_21471 21471 +#define STRING_21472 21472 +#define STRING_21473 21473 +#define STRING_21474 21474 +#define STRING_21475 21475 +#define STRING_21476 21476 +#define STRING_21477 21477 +#define STRING_21478 21478 +#define STRING_21479 21479 +#define STRING_21480 21480 +#define STRING_21481 21481 +#define STRING_21482 21482 +#define STRING_21483 21483 +#define STRING_21484 21484 +#define STRING_21485 21485 +#define STRING_21486 21486 +#define STRING_21487 21487 +#define STRING_21488 21488 +#define STRING_21489 21489 +#define STRING_21490 21490 +#define STRING_21491 21491 +#define STRING_21492 21492 +#define STRING_21493 21493 +#define STRING_21494 21494 +#define STRING_21495 21495 +#define STRING_21496 21496 +#define STRING_21497 21497 +#define STRING_21498 21498 +#define STRING_21499 21499 +#define STRING_21500 21500 +#define STRING_21501 21501 +#define STRING_21502 21502 +#define STRING_21503 21503 +#define STRING_21504 21504 +#define STRING_21505 21505 +#define STRING_21506 21506 +#define STRING_21507 21507 +#define STRING_21508 21508 +#define STRING_21509 21509 +#define STRING_21510 21510 +#define STRING_21511 21511 +#define STRING_21512 21512 +#define STRING_21513 21513 +#define STRING_21514 21514 +#define STRING_21515 21515 +#define STRING_21516 21516 +#define STRING_21517 21517 +#define STRING_21518 21518 +#define STRING_21519 21519 +#define STRING_21520 21520 +#define STRING_21521 21521 +#define STRING_21522 21522 +#define STRING_21523 21523 +#define STRING_21524 21524 +#define STRING_21525 21525 +#define STRING_21526 21526 +#define STRING_21527 21527 +#define STRING_21528 21528 +#define STRING_21529 21529 +#define STRING_21530 21530 +#define STRING_21531 21531 +#define STRING_21532 21532 +#define STRING_21533 21533 +#define STRING_21534 21534 +#define STRING_21535 21535 +#define STRING_21536 21536 +#define STRING_21537 21537 +#define STRING_21538 21538 +#define STRING_21539 21539 +#define STRING_21540 21540 +#define STRING_21541 21541 +#define STRING_21542 21542 +#define STRING_21543 21543 +#define STRING_21544 21544 +#define STRING_21545 21545 +#define STRING_21546 21546 +#define STRING_21547 21547 +#define STRING_21548 21548 +#define STRING_21549 21549 +#define STRING_21550 21550 +#define STRING_21551 21551 +#define STRING_21552 21552 +#define STRING_21553 21553 +#define STRING_21554 21554 +#define STRING_21555 21555 +#define STRING_21556 21556 +#define STRING_21557 21557 +#define STRING_21558 21558 +#define STRING_21559 21559 +#define STRING_21560 21560 +#define STRING_21561 21561 +#define STRING_21562 21562 +#define STRING_21563 21563 +#define STRING_21564 21564 +#define STRING_21565 21565 +#define STRING_21566 21566 +#define STRING_21567 21567 +#define STRING_21568 21568 +#define STRING_21569 21569 +#define STRING_21570 21570 +#define STRING_21571 21571 +#define STRING_21572 21572 +#define STRING_21573 21573 +#define STRING_21574 21574 +#define STRING_21575 21575 +#define STRING_21576 21576 +#define STRING_21577 21577 +#define STRING_21578 21578 +#define STRING_21579 21579 +#define STRING_21580 21580 +#define STRING_21581 21581 +#define STRING_21582 21582 +#define STRING_21583 21583 +#define STRING_21584 21584 +#define STRING_21585 21585 +#define STRING_21586 21586 +#define STRING_21587 21587 +#define STRING_21588 21588 +#define STRING_21589 21589 +#define STRING_21590 21590 +#define STRING_21591 21591 +#define STRING_21592 21592 +#define STRING_21593 21593 +#define STRING_21594 21594 +#define STRING_21595 21595 +#define STRING_21596 21596 +#define STRING_21597 21597 +#define STRING_21598 21598 +#define STRING_21599 21599 +#define STRING_21600 21600 +#define STRING_21601 21601 +#define STRING_21602 21602 +#define STRING_21603 21603 +#define STRING_21604 21604 +#define STRING_21605 21605 +#define STRING_21606 21606 +#define STRING_21607 21607 +#define STRING_21608 21608 +#define STRING_21609 21609 +#define STRING_21610 21610 +#define STRING_21611 21611 +#define STRING_21612 21612 +#define STRING_21613 21613 +#define STRING_21614 21614 +#define STRING_21615 21615 +#define STRING_21616 21616 +#define STRING_21617 21617 +#define STRING_21618 21618 +#define STRING_21619 21619 +#define STRING_21620 21620 +#define STRING_21621 21621 +#define STRING_21622 21622 +#define STRING_21623 21623 +#define STRING_21624 21624 +#define STRING_21625 21625 +#define STRING_21626 21626 +#define STRING_21627 21627 +#define STRING_21628 21628 +#define STRING_21629 21629 +#define STRING_21630 21630 +#define STRING_21631 21631 +#define STRING_21632 21632 +#define STRING_21633 21633 +#define STRING_21634 21634 +#define STRING_21635 21635 +#define STRING_21636 21636 +#define STRING_21637 21637 +#define STRING_21638 21638 +#define STRING_21639 21639 +#define STRING_21640 21640 +#define STRING_21641 21641 +#define STRING_21642 21642 +#define STRING_21643 21643 +#define STRING_21644 21644 +#define STRING_21645 21645 +#define STRING_21646 21646 +#define STRING_21647 21647 +#define STRING_21648 21648 +#define STRING_21649 21649 +#define STRING_21650 21650 +#define STRING_21651 21651 +#define STRING_21652 21652 +#define STRING_21653 21653 +#define STRING_21654 21654 +#define STRING_21655 21655 +#define STRING_21656 21656 +#define STRING_21657 21657 +#define STRING_21658 21658 +#define STRING_21659 21659 +#define STRING_21660 21660 +#define STRING_21661 21661 +#define STRING_21662 21662 +#define STRING_21663 21663 +#define STRING_21664 21664 +#define STRING_21665 21665 +#define STRING_21666 21666 +#define STRING_21667 21667 +#define STRING_21668 21668 +#define STRING_21669 21669 +#define STRING_21670 21670 +#define STRING_21671 21671 +#define STRING_21672 21672 +#define STRING_21673 21673 +#define STRING_21674 21674 +#define STRING_21675 21675 +#define STRING_21676 21676 +#define STRING_21677 21677 +#define STRING_21678 21678 +#define STRING_21679 21679 +#define STRING_21680 21680 +#define STRING_21681 21681 +#define STRING_21682 21682 +#define STRING_21683 21683 +#define STRING_21684 21684 +#define STRING_21685 21685 +#define STRING_21686 21686 +#define STRING_21687 21687 +#define STRING_21688 21688 +#define STRING_21689 21689 +#define STRING_21690 21690 +#define STRING_21691 21691 +#define STRING_21692 21692 +#define STRING_21693 21693 +#define STRING_21694 21694 +#define STRING_21695 21695 +#define STRING_21696 21696 +#define STRING_21697 21697 +#define STRING_21698 21698 +#define STRING_21699 21699 +#define STRING_21700 21700 +#define STRING_21701 21701 +#define STRING_21702 21702 +#define STRING_21703 21703 +#define STRING_21704 21704 +#define STRING_21705 21705 +#define STRING_21706 21706 +#define STRING_21707 21707 +#define STRING_21708 21708 +#define STRING_21709 21709 +#define STRING_21710 21710 +#define STRING_21711 21711 +#define STRING_21712 21712 +#define STRING_21713 21713 +#define STRING_21714 21714 +#define STRING_21715 21715 +#define STRING_21716 21716 +#define STRING_21717 21717 +#define STRING_21718 21718 +#define STRING_21719 21719 +#define STRING_21720 21720 +#define STRING_21721 21721 +#define STRING_21722 21722 +#define STRING_21723 21723 +#define STRING_21724 21724 +#define STRING_21725 21725 +#define STRING_21726 21726 +#define STRING_21727 21727 +#define STRING_21728 21728 +#define STRING_21729 21729 +#define STRING_21730 21730 +#define STRING_21731 21731 +#define STRING_21732 21732 +#define STRING_21733 21733 +#define STRING_21734 21734 +#define STRING_21735 21735 +#define STRING_21736 21736 +#define STRING_21737 21737 +#define STRING_21738 21738 +#define STRING_21739 21739 +#define STRING_21740 21740 +#define STRING_21741 21741 +#define STRING_21742 21742 +#define STRING_21743 21743 +#define STRING_21744 21744 +#define STRING_21745 21745 +#define STRING_21746 21746 +#define STRING_21747 21747 +#define STRING_21748 21748 +#define STRING_21749 21749 +#define STRING_21750 21750 +#define STRING_21751 21751 +#define STRING_21752 21752 +#define STRING_21753 21753 +#define STRING_21754 21754 +#define STRING_21755 21755 +#define STRING_21756 21756 +#define STRING_21757 21757 +#define STRING_21758 21758 +#define STRING_21759 21759 +#define STRING_21760 21760 +#define STRING_21761 21761 +#define STRING_21762 21762 +#define STRING_21763 21763 +#define STRING_21764 21764 +#define STRING_21765 21765 +#define STRING_21766 21766 +#define STRING_21767 21767 +#define STRING_21768 21768 +#define STRING_21769 21769 +#define STRING_21770 21770 +#define STRING_21771 21771 +#define STRING_21772 21772 +#define STRING_21773 21773 +#define STRING_21774 21774 +#define STRING_21775 21775 +#define STRING_21776 21776 +#define STRING_21777 21777 +#define STRING_21778 21778 +#define STRING_21779 21779 +#define STRING_21780 21780 +#define STRING_21781 21781 +#define STRING_21782 21782 +#define STRING_21783 21783 +#define STRING_21784 21784 +#define STRING_21785 21785 +#define STRING_21786 21786 +#define STRING_21787 21787 +#define STRING_21788 21788 +#define STRING_21789 21789 +#define STRING_21790 21790 +#define STRING_21791 21791 +#define STRING_21792 21792 +#define STRING_21793 21793 +#define STRING_21794 21794 +#define STRING_21795 21795 +#define STRING_21796 21796 +#define STRING_21797 21797 +#define STRING_21798 21798 +#define STRING_21799 21799 +#define STRING_21800 21800 +#define STRING_21801 21801 +#define STRING_21802 21802 +#define STRING_21803 21803 +#define STRING_21804 21804 +#define STRING_21805 21805 +#define STRING_21806 21806 +#define STRING_21807 21807 +#define STRING_21808 21808 +#define STRING_21809 21809 +#define STRING_21810 21810 +#define STRING_21811 21811 +#define STRING_21812 21812 +#define STRING_21813 21813 +#define STRING_21814 21814 +#define STRING_21815 21815 +#define STRING_21816 21816 +#define STRING_21817 21817 +#define STRING_21818 21818 +#define STRING_21819 21819 +#define STRING_21820 21820 +#define STRING_21821 21821 +#define STRING_21822 21822 +#define STRING_21823 21823 +#define STRING_21824 21824 +#define STRING_21825 21825 +#define STRING_21826 21826 +#define STRING_21827 21827 +#define STRING_21828 21828 +#define STRING_21829 21829 +#define STRING_21830 21830 +#define STRING_21831 21831 +#define STRING_21832 21832 +#define STRING_21833 21833 +#define STRING_21834 21834 +#define STRING_21835 21835 +#define STRING_21836 21836 +#define STRING_21837 21837 +#define STRING_21838 21838 +#define STRING_21839 21839 +#define STRING_21840 21840 +#define STRING_21841 21841 +#define STRING_21842 21842 +#define STRING_21843 21843 +#define STRING_21844 21844 +#define STRING_21845 21845 +#define STRING_21846 21846 +#define STRING_21847 21847 +#define STRING_21848 21848 +#define STRING_21849 21849 +#define STRING_21850 21850 +#define STRING_21851 21851 +#define STRING_21852 21852 +#define STRING_21853 21853 +#define STRING_21854 21854 +#define STRING_21855 21855 +#define STRING_21856 21856 +#define STRING_21857 21857 +#define STRING_21858 21858 +#define STRING_21859 21859 +#define STRING_21860 21860 +#define STRING_21861 21861 +#define STRING_21862 21862 +#define STRING_21863 21863 +#define STRING_21864 21864 +#define STRING_21865 21865 +#define STRING_21866 21866 +#define STRING_21867 21867 +#define STRING_21868 21868 +#define STRING_21869 21869 +#define STRING_21870 21870 +#define STRING_21871 21871 +#define STRING_21872 21872 +#define STRING_21873 21873 +#define STRING_21874 21874 +#define STRING_21875 21875 +#define STRING_21876 21876 +#define STRING_21877 21877 +#define STRING_21878 21878 +#define STRING_21879 21879 +#define STRING_21880 21880 +#define STRING_21881 21881 +#define STRING_21882 21882 +#define STRING_21883 21883 +#define STRING_21884 21884 +#define STRING_21885 21885 +#define STRING_21886 21886 +#define STRING_21887 21887 +#define STRING_21888 21888 +#define STRING_21889 21889 +#define STRING_21890 21890 +#define STRING_21891 21891 +#define STRING_21892 21892 +#define STRING_21893 21893 +#define STRING_21894 21894 +#define STRING_21895 21895 +#define STRING_21896 21896 +#define STRING_21897 21897 +#define STRING_21898 21898 +#define STRING_21899 21899 +#define STRING_21900 21900 +#define STRING_21901 21901 +#define STRING_21902 21902 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#endif diff --git a/guitar/backup/20030501/guitar.hpp b/guitar/backup/20030501/guitar.hpp new file mode 100644 index 0000000..6fe0d82 --- /dev/null +++ b/guitar/backup/20030501/guitar.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_GUITAR_HPP_ +#define _GUITAR_GUITAR_HPP_ +#ifndef _GUITAR_GUITAR_H_ +#include +#endif +#endif diff --git a/guitar/backup/20030501/license.cpp b/guitar/backup/20030501/license.cpp new file mode 100644 index 0000000..61f14a2 --- /dev/null +++ b/guitar/backup/20030501/license.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +/* + The license will be uuencoded on top of xor. This should be sufficient to protect the contents. + Lic: TM105R20020101013001EF + VVVVVVYYYYMMDDTTDDCCCC + + XX=version TM105R. should check this against this product version and release + YYYY=year of license issuance. 30 day license will use this value to expire itself. + MM=month of license issuance 30 day license will use this value to expiure + DD=day of license issuance + TT=type of license + 01=30 day license, expires 30 days from issuance. + 02=Full license, never expires. + DD=for type 01 license, indicates number of days license is good for. + CCCC=checksum, just add up ASCII values of the characters through TT, display in hex. +*/ + +const String License::smBeginLicense="BEGIN LICENSE"; +const String License::smEndLicense="END LICENSE"; + +String License::generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount) +{ + String strLicenseKey; + String strIssueDate; + String strLicenseType; + String strDayCount; + String strChecksum; + + strLicenseKey=String("TM"); + strLicenseKey+=strProductVersion.substr(0,3); + ::sprintf(strIssueDate,"%4d%02d%02d",issueDate.year(),issueDate.month(),issueDate.day()); + strLicenseKey+=strIssueDate; + ::sprintf(strLicenseType,"%02d",licenseType); + strLicenseKey+=strLicenseType; + ::sprintf(strDayCount,"%02d",dayCount); + strLicenseKey+=strDayCount; + ::sprintf(strChecksum,"%04lx",calculateChecksum(strLicenseKey)); + strLicenseKey+=strChecksum; + return UUTool::encode(xor(strLicenseKey)); +} + +String numericEncode(const String &strLicense) +{ + return String(); +} + +String numericDecode(const String &strLicense) +{ + return String(); +} + +bool License::fromLines(Block &strLicenseLines) +{ + if(3!=strLicenseLines.size())return false; + if(!(strLicenseLines[0]==smBeginLicense))return false; + if(!(strLicenseLines[2]==smEndLicense))return false; + return fromString(strLicenseLines[1]); +} + +// TM105R2002040301 30 03d8 + +bool License::fromString(const String &strLicense) +{ + VersionInfo versionInfo; + SystemTime currDate; + SystemTime expireDate; + String strHeader; + String strDecoded; + String strVersion; + int hashCode; + + mUUEncodedLicense=strLicense; + strDecoded=xor(UUTool::decode(strLicense)); + strHeader=strDecoded.substr(0,1); + if(!(strHeader==String("TM")))return false; + mProductVersion=strDecoded.substr(2,5); + mIssueDate.year(strDecoded.substr(6,9).toInt()); + mIssueDate.month((SystemTime::Month)strDecoded.substr(10,11).toInt()); + mIssueDate.day(strDecoded.substr(12,13).toInt()); + mLicenseType=(LicenseType)strDecoded.substr(14,15).toInt(); + mDayCount=strDecoded.substr(16,17).toInt(); + hashCode=strDecoded.substr(18,21).hex(); + if(hashCode!=calculateChecksum(strDecoded.substr(0,17)))return false; + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return mIsValid=true; + expireDate=mIssueDate; + expireDate.daysAdd360(mDayCount); + if(currDate>=expireDate)return false; + return mIsValid=true; +} + +String License::xor(const String &strLicense) +{ + String strEncoded; + int strLength; + + strEncoded.reserve((strLength=strLicense.length())+1); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + GlobalDefs::setLogLevel(GlobalDefs::NoLog); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); +} + diff --git a/guitar/backup/20030501/mainfrm.cpp b/guitar/backup/20030501/mainfrm.cpp new file mode 100644 index 0000000..5cc64fb --- /dev/null +++ b/guitar/backup/20030501/mainfrm.cpp @@ -0,0 +1,1035 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); + mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + return false; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + return false; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_PRINT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_PRINT",GlobalDefs::Verbose); + handleFilePrint(); + break; + case MENU_FILE_NEW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_NEW",GlobalDefs::Verbose); + handleFileNew(); + break; + case MENU_FILE_OPEN : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_OPEN",GlobalDefs::Verbose); + handleOpenProject(); + break; + case MENU_FILE_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_IMPORT",GlobalDefs::Verbose); + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_MIDI_IMPORT",GlobalDefs::Verbose); + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_CLOSE",GlobalDefs::Verbose); + handleFileClose(); + break; + case MENU_FILE_EXIT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_EXIT",GlobalDefs::Verbose); + handleFileExit(); + break; + case MENU_FILE_SAVE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVE",GlobalDefs::Verbose); + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVEAS",GlobalDefs::Verbose); + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_VIEW_FRETBOARD",GlobalDefs::Verbose); + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAY",GlobalDefs::Verbose); + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYTOEND",GlobalDefs::Verbose); + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYREPEATED",GlobalDefs::Verbose); + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE",GlobalDefs::Verbose); + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE_REPEATED",GlobalDefs::Verbose); + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_STOP",GlobalDefs::Verbose); + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_ENTRYPROPS",GlobalDefs::Verbose); + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETENDRANGE",GlobalDefs::Verbose); + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETSTARTRANGE",GlobalDefs::Verbose); + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_RANGES",GlobalDefs::Verbose); + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_INCREASETEMPO",GlobalDefs::Verbose); + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_DECREASETEMPO",GlobalDefs::Verbose); + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_SETTINGS",GlobalDefs::Verbose); + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_LOOKUP",GlobalDefs::Verbose); + handleChordLookup(); + break; + case MENU_FRETBOARD_CLEAR : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_CLEAR",GlobalDefs::Verbose); + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_SHOWALLPOSITIONS",GlobalDefs::Verbose); + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_SCALES_SHOW",GlobalDefs::Verbose); + handleShowScales(); + break; + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + break; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + break; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CASCADE",GlobalDefs::Verbose); + cascade(); + break; + case IDM_TILE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_TILE",GlobalDefs::Verbose); + tile(); + break; + case IDM_ARRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_ARRANGE",GlobalDefs::Verbose); + arrange(); + break; + case IDM_CLOSEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CLOSEALL",GlobalDefs::Verbose); + closeAll(); + break; + case IDM_MINIMIZEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_MINIMIZEALL",GlobalDefs::Verbose); + minimizeAll(); + break; + case IDM_RESTOREALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_RESTOREALL",GlobalDefs::Verbose); + restoreAll(); + break; + default : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::keyDownHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::paintHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); + GlobalDefs::outDebug("[MainFrame::createHandler]",GlobalDefs::Verbose); + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + setWindowPos(InitialWidth,InitialHeight); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + updateHistory(); + if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ + Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::guiFretboardHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + + GlobalDefs::outDebug("[MainFrame::guiFretboardHandler]",GlobalDefs::Verbose); + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow); + } + if(!someCallbackData.lParam()) + { + ((FretViewWindow&)*mdiWindow).clearNotes(); + } + else + { + if(!someCallbackData.wParam()) + { + const TabEntry &entry=*(TabEntry*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(entry); + } + else if(1==someCallbackData.wParam()) + { + const Note ¬e=*(Note*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(note); + } + else if(2==someCallbackData.wParam()) + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale); + } + else if(3==someCallbackData.wParam()) // not currently used see ScaleDlg + { + const FrettedNotes &frettedNotes=*(FrettedNotes*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(frettedNotes); + } + } + return false; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} + +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} + +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} + +// menu handlers + +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} + +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} + +void MainFrame::handleFileNew(void) +{ + createProjectView(); +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + createProjectView(strPathTabFile); +} + +void MainFrame::handleMIDIImport(void) +{ + OpenDialog openDialog; + String strPathMIDIFile; + String strPathTabFileName; + MIDIHelper midiHelper; + CursorControl cursorControl; + MIDIDialog midiDialog; + License license; + int selectedTrack; + + Registration::getInstance().getLicense(license); + if(!license.allowFeature(License::MIDIFeature)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"This feature is disabled in this version.",MB_ICONSTOP); + return; + } + if(!openDialog.getOpenFileName(*this,"*.mid","Open MIDI","*.mid",strPathMIDIFile))return; + if(!midiDialog.perform(*this,strPathMIDIFile,selectedTrack))return; + strPathTabFileName=Profile::removeExtension(strPathMIDIFile)+String("TRK")+String().fromInt(selectedTrack+1)+String(".tab"); + if(!midiHelper.import(strPathMIDIFile,strPathTabFileName,selectedTrack)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"Error importing file.",MB_ICONSTOP); + return; + } + cursorControl.waitCursor(true); + createProjectView(strPathTabFileName); + cursorControl.waitCursor(false); +} + +void MainFrame::handleOpenProject(CallbackData &someCallbackData) +{ + PureMenu fileMenu; + String menuItemString; + + getFrameMenu().getSubMenu(0,fileMenu); + menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand); + if(menuItemString.isNull())return; + menuItemString=menuItemString.betweenString(')',0); + menuItemString.trimLeft(); + handleOpenProject(menuItemString); +} + +void MainFrame::handleOpenProject(void) +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,String(STRING_PRJALLEXTENSION),"Open Project",String(STRING_PRJALLEXTENSION),strPathFileName))return; + handleOpenProject(strPathFileName); +} + +void MainFrame::handleOpenProject(const String &strPathFileProject) +{ + openProjectView(strPathFileProject); +} + +void MainFrame::handleFileClose(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} + +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} + +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} + +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} + +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} + +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} + +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} + +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} + +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} + +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} + +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} + +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} + +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} + +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} + +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} + +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} + +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} + +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} + +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} + +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} + +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} + +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} + +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} + +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; + enum{InitialWidth=700,InitialHeight=480}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleMIDIImport(void); + void handleFileClose(void); + void handleFileExit(void); + void handleFileNew(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void createToolBar(void); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mGUIFretboardHandler; + Callback mDropFilesHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/guitar/backup/20030501/notepath.cpp b/guitar/backup/20030501/notepath.cpp new file mode 100644 index 0000000..d6f75df --- /dev/null +++ b/guitar/backup/20030501/notepath.cpp @@ -0,0 +1,12 @@ +#include + +String NotePath::toString(void) +{ + String strNotePath; + + for(int index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class NotePath; +typedef Array NotePaths; + +class NotePath : public Block +{ +public: + String toString(void); +}; +#endif diff --git a/guitar/backup/20030501/ordering.hpp b/guitar/backup/20030501/ordering.hpp new file mode 100644 index 0000000..81ab6b1 --- /dev/null +++ b/guitar/backup/20030501/ordering.hpp @@ -0,0 +1,73 @@ +#ifndef _GUITAR_ORDERING_HPP_ +#define _GUITAR_ORDERING_HPP_ + +class Ordering +{ +public: + Ordering(int criteria=0,int value=0); + virtual ~Ordering(); + bool operator<(const Ordering &ordering)const; + bool operator>(const Ordering &ordering)const; + bool operator==(const Ordering &ordering)const; + int getCriteria(void)const; + void setCriteria(int criteria); + int getValue(void)const; + void setValue(int value); +private: + int mCriteria; + int mValue; +}; + +inline +Ordering::Ordering(int criteria,int value) +: mCriteria(criteria), mValue(value) +{ +} + +inline +Ordering::~Ordering() +{ +} + +inline +bool Ordering::operator<(const Ordering &ordering)const +{ + return mCriteria(const Ordering &ordering)const +{ + return mCriteria>ordering.mCriteria; +} + +inline +bool Ordering::operator==(const Ordering &ordering)const +{ + return mCriteria==ordering.mCriteria; +} + +inline +int Ordering::getCriteria(void)const +{ + return mCriteria; +} + +inline +void Ordering::setCriteria(int criteria) +{ + mCriteria=criteria; +} + +inline +int Ordering::getValue(void)const +{ + return mValue; +} + +inline +void Ordering::setValue(int value) +{ + mValue=value; +} +#endif diff --git a/guitar/backup/20030501/registration.cpp b/guitar/backup/20030501/registration.cpp new file mode 100644 index 0000000..2b6ab23 --- /dev/null +++ b/guitar/backup/20030501/registration.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include + +SmartPointer Registration::smRegistration; + +Registration::Registration() +: mRegistrationKeyName(STRING_REGISTRATIONKEYNAME), + mSettingsLicenseKey(STRING_SETTINGSLICENSE) +{ +} + +Registration::~Registration() +{ +} + +Registration &Registration::getInstance() +{ + if(!smRegistration.isOkay()) + { + smRegistration=::new Registration(); + smRegistration.disposition(PointerDisposition::Delete); + } + return *smRegistration; +} + +bool Registration::hasGID(void)const +{ + FileHandle gidFile; + return gidFile.open("install.gid",FileHandle::Read,FileHandle::ShareRead,FileHandle::Open,FileHandle::Hidden); +} + +bool Registration::hasLicense(void)const +{ + RegKey regKeyRegistration; + String strLicense; + + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + return strLicense.isNull()?false:true; +} + +bool Registration::getLicense(License &license)const +{ + String strLicense; + RegKey regKeyRegistration; + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + license.fromString(strLicense); + return true; +} + +bool Registration::applyLicense(Block &strLicenseLines) +{ + RegKey regKeyRegistration; + License license; + + license.fromLines(strLicenseLines); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,license.getUUEncodedLicense()); + return true; +} + +bool Registration::applyLicense(const String &uuencodedLicense) +{ + RegKey regKeyRegistration; + License license; + + license.fromString(uuencodedLicense); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,uuencodedLicense); + return true; +} + +bool Registration::create30DayLicense(void)const +{ + createLicense(30); + return true; +} + +bool Registration::create15DayLicense(void)const +{ + createLicense(15); + return true; +} + +bool Registration::createPermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + +License Registration::generatePermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + License license; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + license.fromString(strLicense); + return license; +} + +bool Registration::removeLicense(void) +{ + RegKey regKeyRegistration; + return regKeyRegistration.deleteKey(mRegistrationKeyName); +} + +bool Registration::createLicense(int days)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Expires,days); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + diff --git a/guitar/backup/20030501/registry.cpp b/guitar/backup/20030501/registry.cpp new file mode 100644 index 0000000..5924a77 --- /dev/null +++ b/guitar/backup/20030501/registry.cpp @@ -0,0 +1,190 @@ +#include +#include + +Registry::Registry(void) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mRegKeyHistory(RegKey::CurrentUser), + mSettingsAction(STRING_SETTINGSACTION), + mSettingsMicrosecondsPerQuarterNote(STRING_SETTINGSMICROSECONDSPERQUARTERNOTE), + mSettingsInstrument(STRING_SETTINGSINSTRUMENT), + mSettingsNoteLetters(STRING_SETTINGSNOTELETTERS), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT) +{ + guarantee(); + getCacheNames(); +} + +Registry::Registry(const Registry &someRegistry) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT), + mRegKeyHistory(RegKey::CurrentUser) +{ + *this=someRegistry; +} + +Registry::~Registry() +{ +} + +Registry &Registry::operator=(const Registry &/*registry*/) +{ + return *this; +} + +void Registry::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +void Registry::guarantee(void) +{ + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setShowAction(GlobalDefs::ShowAction); + setShowNotes(GlobalDefs::ShowNotes); + setMicrosecondsPerQuarterNote(GlobalDefs::MicrosecondsPerQuarterNote); + setInstrument(Instrument(GlobalDefs::Program)); + setMIDIOutputDevice("MIDIMAPPER"); + } +} + +bool Registry::isOkay(void)const +{ + return mRegKeyHistory.isOkay(); +} + +bool Registry::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool Registry::setHistory(Block &nameList) +{ + removeHistory(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;indexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Registry +{ +public: + Registry(void); + Registry(const Registry ®istry); + virtual ~Registry(); + Registry &operator=(const Registry ®istry); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool removeHistory(const String &strName); + bool getShowNotes(void); + void setShowNotes(bool showNoteLetters); + bool getShowAction(void)const; + void setShowAction(bool showAction); + int getMicrosecondsPerQuarterNote(void)const; + void setMicrosecondsPerQuarterNote(int microsecondsPerQuarterNote); + Instrument getInstrument(void)const; + void setInstrument(Instrument instrument); + String getMIDIOutputDevice(void)const; + void setMIDIOutputDevice(const String &midiOutputDevice); + bool isOkay(void)const; +private: + enum {MaxCachedNames=7}; + void guarantee(void); + void getCacheNames(void); + bool removeHistory(void); + + Block mCachedNames; + String mHistoryKeyName; + String mHistoryKeyShortName; + String mRegistryKeyName; + String mSettingsKeyName; + String mSettingsAction; + String mSettingsNoteLetters; + String mSettingsMicrosecondsPerQuarterNote; + String mSettingsInstrument; + String mSettingsMIDIOutput; + RegKey mRegKeyHistory; + RegKey mRegKeySettings; +}; +#endif diff --git a/guitar/backup/20030501/requirement.hpp b/guitar/backup/20030501/requirement.hpp new file mode 100644 index 0000000..f90c959 --- /dev/null +++ b/guitar/backup/20030501/requirement.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REQUIREMENT_HPP_ +#define _GUITAR_REQUIREMENT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Requirement; + +typedef SmartPointer PtrRequirement; + +class Requirement : public FrettedNote +{ +public: + Requirement(); + virtual ~Requirement(); + bool getSatisfied(void)const; + void setSatisfied(bool satisfied); + Requirement &operator=(const FrettedNote &frettedNote); +private: + bool mSatisfied; +}; + +inline +Requirement::Requirement() +: mSatisfied(false) +{ +} + +inline +Requirement::~Requirement() +{ +} + +inline +Requirement &Requirement::operator=(const FrettedNote &frettedNote) +{ + (FrettedNote&)*this=frettedNote; + return *this; +} + +inline +bool Requirement::getSatisfied(void)const +{ + return mSatisfied; +} + +inline +void Requirement::setSatisfied(bool satisfied) +{ + mSatisfied=satisfied; +} +#endif diff --git a/guitar/backup/20030501/requirements.cpp b/guitar/backup/20030501/requirements.cpp new file mode 100644 index 0000000..b5b6851 --- /dev/null +++ b/guitar/backup/20030501/requirements.cpp @@ -0,0 +1,77 @@ +#include +#include + +void Requirements::setRequirements(Block ¬es) +{ + size(notes.size()); + for(int index=0;index searchOrder; + + searchOrder.size(notePaths.size()); + for(int index=0;index sortOrder; + sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets + for(index=0;indexsetSatisfied(true); + satisfied=true; + break; + } + } + return satisfied; +} + +bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement) +{ + for(int index=0;indextoString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + if(requirement->getNote()==frettedNote.getNote()&& + requirement->getOctave()==frettedNote.getOctave()&& + !requirement->getSatisfied())return true; + } + return false; +} + +bool Requirements::haveRequirement(const FrettedNote &frettedNote) +{ + for(int index=0;index +#endif +#ifndef _GUITAR_ORDERING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTEPATH_HPP_ +#include +#endif +#ifndef _GUITAR_REQUIREMENT_HPP_ +#include +#endif + +class Requirements : public Array +{ +public: + Requirements(void); + Requirements(Block ¬es); + virtual ~Requirements(); + bool satisfyRequirements(NotePaths ¬ePaths); + void setRequirements(Block ¬es); +private: + bool satisfyRequirement(NotePath ¬ePath); + bool haveRequirement(const FrettedNote &frettedNote); + bool isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement); +}; + +inline +Requirements::Requirements(void) +{ +} + +inline +Requirements::Requirements(Block ¬es) +{ + setRequirements(notes); +} + +inline +Requirements::~Requirements() +{ +} +#endif diff --git a/guitar/backup/20030501/resource.h b/guitar/backup/20030501/resource.h new file mode 100644 index 0000000..5896dac --- /dev/null +++ b/guitar/backup/20030501/resource.h @@ -0,0 +1,17 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by guitar.rc +// +#define APPICON 103 +#define IDC_BUTTON1 1076 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1081 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/guitar/backup/20030501/settingsdlg.cpp b/guitar/backup/20030501/settingsdlg.cpp new file mode 100644 index 0000000..24c95e5 --- /dev/null +++ b/guitar/backup/20030501/settingsdlg.cpp @@ -0,0 +1,251 @@ +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(void) +{ + mInitHandler.setCallback(this,&SettingsDialog::initHandler); + mCreateHandler.setCallback(this,&SettingsDialog::createHandler); + mCloseHandler.setCallback(this,&SettingsDialog::closeHandler); + mDestroyHandler.setCallback(this,&SettingsDialog::destroyHandler); + mCommandHandler.setCallback(this,&SettingsDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog::SettingsDialog(const SettingsDialog &someSettingsDialog) +{ // private implementation + *this=someSettingsDialog; +} + +SettingsDialog::~SettingsDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog &SettingsDialog::operator=(const SettingsDialog &someSettingsDialog) +{ // private implementation + return *this; +} + +bool SettingsDialog::perform(GUIWindow &parentWindow) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"SETTINGSDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SettingsDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + initialize(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType SettingsDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + apply(); + break; + case SETTINGS_DEFAULTS : + selectDefaults(); + } + if(someCallbackData.wmCommandCommand()==BN_CLICKED) + { + handleInstrumentSelect(someCallbackData); + } + return (CallbackData::ReturnType)FALSE; +} + +void SettingsDialog::initialize(void) +{ + Registry registry; + + selectTiming(registry.getMicrosecondsPerQuarterNote()); + selectInstrument(registry.getInstrument()); + selectAction(registry.getShowAction()); + selectShowNotes(registry.getShowNotes()); + selectMIDIOutputDevice(registry.getMIDIOutputDevice()); +} + +void SettingsDialog::handleInstrumentSelect(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case SETTINGS_ACOUSTICGRANDPIANO : + selectInstrument(AcousticGrandPiano); + break; + case SETTINGS_BRIGHTACOUSTICPIANO : + selectInstrument(BrightAcousticPiano); + break; + case SETTINGS_ELECTRICGRANDPIANO : + selectInstrument(ElectricGrandPiano); + break; + case SETTINGS_ACOUSTICNYLON : + selectInstrument(AcousticGuitarNylon); + break; + case SETTINGS_ACOUSTICSTEEL : + selectInstrument(AcousticGuitarSteel); + break; + case SETTINGS_JAZZELECTRIC : + selectInstrument(JazzGuitarElectric); + break; + case SETTINGS_CLEANELECTRIC : + selectInstrument(CleanGuitarElectric); + break; + case SETTINGS_MUTEDELECTRIC : + selectInstrument(MutedGuitarElectric); + break; + default : + break; + } +} + +void SettingsDialog::selectInstrument(Instrument instrument) +{ + if(AcousticGrandPiano==instrument)sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,0,0); + if(BrightAcousticPiano==instrument)sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,0,0); + if(ElectricGrandPiano==instrument)sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,0,0); + if(AcousticGuitarNylon==instrument)sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,0,0); + if(AcousticGuitarSteel==instrument)sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,0,0); + if(JazzGuitarElectric==instrument)sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,0,0); + if(CleanGuitarElectric==instrument)sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,0,0); + if(MutedGuitarElectric==instrument)sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,0,0); +} + +Instrument SettingsDialog::getInstrument(void) +{ + if(sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_GETCHECK,0,0))return AcousticGrandPiano; + if(sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_GETCHECK,0,0))return BrightAcousticPiano; + if(sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_GETCHECK,0,0))return ElectricGrandPiano; + if(sendMessage(SETTINGS_ACOUSTICNYLON,BM_GETCHECK,0,0))return AcousticGuitarNylon; + if(sendMessage(SETTINGS_ACOUSTICSTEEL,BM_GETCHECK,0,0))return AcousticGuitarSteel; + if(sendMessage(SETTINGS_JAZZELECTRIC,BM_GETCHECK,0,0))return JazzGuitarElectric; + if(sendMessage(SETTINGS_CLEANELECTRIC,BM_GETCHECK,0,0))return CleanGuitarElectric; + if(sendMessage(SETTINGS_MUTEDELECTRIC,BM_GETCHECK,0,0))return MutedGuitarElectric; + return Instrument(GlobalDefs::Program); +} + +bool SettingsDialog::getAction(void) +{ + return sendMessage(SETTINGS_SHOWACTION,BM_GETCHECK,0,0); +} + +bool SettingsDialog::getShowNotes(void) +{ + return sendMessage(SETTINGS_SHOWNOTES,BM_GETCHECK,0,0); +} + +int SettingsDialog::getTiming(void) +{ + String strText; + + getText(SETTINGS_MICROSECSPERQTRNOTE,strText); + return strText.toInt(); +} + +String SettingsDialog::getMIDIOutputDevice(void) +{ + int currentSelection; + String midiOutputDevice; + + currentSelection=sendMessage(SETTINGS_MIDIOUT,CB_GETCURSEL,0,0L); + sendMessage(SETTINGS_MIDIOUT,CB_GETLBTEXT,currentSelection,(LPARAM)midiOutputDevice.str()); + return midiOutputDevice; +} + +void SettingsDialog::selectDefaults() +{ + selectInstrument(Instrument(GlobalDefs::Program)); + selectTiming(GlobalDefs::MicrosecondsPerQuarterNote); + selectAction(GlobalDefs::ShowAction); + selectShowNotes(GlobalDefs::ShowNotes); +} + +void SettingsDialog::selectTiming(int timing) +{ + setText(SETTINGS_MICROSECSPERQTRNOTE,String().fromInt(timing)); +} + +void SettingsDialog::selectAction(bool action) +{ + sendMessage(SETTINGS_SHOWACTION,BM_SETCHECK,action,0); +} + +void SettingsDialog::selectShowNotes(bool showNotes) +{ + sendMessage(SETTINGS_SHOWNOTES,BM_SETCHECK,showNotes,0); +} + +void SettingsDialog::selectMIDIOutputDevice(const String &midiOutputDeviceName) +{ + Block deviceNames; + int currentSelection=-1; + + MIDIOutputDevice::getDeviceNames(deviceNames); + sendMessage(SETTINGS_MIDIOUT,CB_RESETCONTENT,0,0L); + deviceNames.insert(&String("MIDIMAPPER")); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class SettingsDialog : public DWindow +{ +public: + SettingsDialog(void); + virtual ~SettingsDialog(); + bool perform(GUIWindow &parentWindow); +private: + SettingsDialog(const SettingsDialog &someSettingsDialog); + SettingsDialog &operator=(const SettingsDialog &someSettingsDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void initialize(void); + void selectInstrument(Instrument instrument); + void selectDefaults(void); + void selectTiming(int timing); + void selectAction(bool action); + void selectShowNotes(bool showNotes); + void selectMIDIOutputDevice(const String &midiOutputDevice); + void handleInstrumentSelect(CallbackData &someCallbackData); + String getMIDIOutputDevice(void); + Instrument getInstrument(void); + bool getShowNotes(void); + bool getAction(void); + int getTiming(void); + void apply(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Point mDisplayPoint; +}; +#endif diff --git a/guitar/backup/20030501/splash.cpp b/guitar/backup/20030501/splash.cpp new file mode 100644 index 0000000..5d5c336 --- /dev/null +++ b/guitar/backup/20030501/splash.cpp @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mStrTitle(strTitle), mTimeout(timeout), + mTextFont("Helv",8,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mLeftButtonHandler.setCallback(this,&SplashScreen::leftButtonHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|0x04|WS_CLIPSIBLINGS|WS_DLGFRAME; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)"Splash",style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::leftButtonHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIB24(); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->create(mResBitmap->width(),mResBitmap->height(),*mPureDevice); + mDIBitmap->copyBits(*mResBitmap); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + WinInfo winInfo; + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + mDIBitmap->bitBlt(pureDevice,Rect(0,0,width(),height()),Point()); + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); + pureDevice.textOut(5,200,mStrCaption); + showLicense(pureDevice); + + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(1,60,String("Windows version:")+winInfo.strProductName()+String(" ")+winInfo.strVersion()); // add 15 + pureDevice.textOut(1,75,String("Registered owner:")+winInfo.strRegisteredOwner()); + pureDevice.textOut(1,90,String("OEM:")+winInfo.strProductID()); + + if(!mStrTitle.isNull()) + { + Font mFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold); + pureDevice.select((GDIObj)mFont,TRUE); + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(12,10,mStrTitle); + pureDevice.select((GDIObj)mFont,FALSE); + } + return (CallbackData::ReturnType)FALSE; +} + +void SplashScreen::showLicense(PureDevice &pureDevice) +{ + pureDevice.setTextColor(RGBColor(255,255,255)); + if(Registration::getInstance().hasLicense()) + { + License license; + Registration::getInstance().getLicense(license); + if(license.isValid()) + { +// if(license.isExpiring())pureDevice.textOut(1,250,String("License will expire in ")+String().fromInt(license.getRemainingDays())+String(" days.")); +// if(license.isExpiring())pureDevice.textOut(1,250,String("You are on day ")+String().fromInt(license.getDay())+String(" of your ")+String().fromInt(license.getDayCount())+String(" day license.")); + if(license.isExpiring())pureDevice.textOut(1,250,String("This version of TabMaster requires a permanent license.")); + else pureDevice.textOut(1,250,"Permanent license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} diff --git a/guitar/backup/20030501/splash.hpp b/guitar/backup/20030501/splash.hpp new file mode 100644 index 0000000..2b3066d --- /dev/null +++ b/guitar/backup/20030501/splash.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_SPLASHSCREEN_HPP_ +#define _GUITAR_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIB24; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=5000}; + SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + void showLicense(PureDevice &pureDevice); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + Callback mLeftButtonHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mStrTitle; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030501/tabdlg.cpp b/guitar/backup/20030501/tabdlg.cpp new file mode 100644 index 0000000..f23a2c8 --- /dev/null +++ b/guitar/backup/20030501/tabdlg.cpp @@ -0,0 +1,151 @@ +#include +#include +#include + +TabDialog::TabDialog(void) +: mCurrEntryIndex(0) +{ + mInitHandler.setCallback(this,&TabDialog::initHandler); + mCreateHandler.setCallback(this,&TabDialog::createHandler); + mCloseHandler.setCallback(this,&TabDialog::closeHandler); + mDestroyHandler.setCallback(this,&TabDialog::destroyHandler); + mCommandHandler.setCallback(this,&TabDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog::TabDialog(const TabDialog &someTabDialog) +{ // private implementation + *this=someTabDialog; +} + +TabDialog::~TabDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog &TabDialog::operator=(const TabDialog &someTabDialog) +{ // private implementation + return *this; +} + +bool TabDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + return ::DialogBoxParam(processInstance(),(LPSTR)"TABDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType TabDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mTabEntryList=::new OwnerDrawListAltColor(*this,getItem(TABENTRY_LIST),TABENTRY_LIST); + mTabEntryList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(15)); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(50)); + mTabEntryList->setTabStops(stops); + setTypes(); + + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexinsertString(strLine); + } + mTabEntryList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void TabDialog::setTypes() +{ + Array notes; + sendMessage(TABENTRY_NOTETYPE,CB_RESETCONTENT,0,0L); + notes=NoteType::enumerate(); + int currSel=-1; + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); + } +} + + + + + diff --git a/guitar/backup/20030501/tabdlg.hpp b/guitar/backup/20030501/tabdlg.hpp new file mode 100644 index 0000000..e5a79e4 --- /dev/null +++ b/guitar/backup/20030501/tabdlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_TABDLG_HPP_ +#define _GUITAR_TABDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class TabDialog : public DWindow +{ +public: + TabDialog(void); + virtual ~TabDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex); +private: + TabDialog(const TabDialog &someTabDialog); + TabDialog &operator=(const TabDialog &someTabDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTypes(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + SmartPointer mTabEntryList; +}; +#endif diff --git a/guitar/backup/20030501/tablature.cpp b/guitar/backup/20030501/tablature.cpp new file mode 100644 index 0000000..4e111c3 --- /dev/null +++ b/guitar/backup/20030501/tablature.cpp @@ -0,0 +1,417 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TabEntries &Tablature::getTabEntries(void)const +{ + return mTabEntries; +} + +void Tablature::setTabEntries(const TabEntries &entries) +{ + mTabEntries.remove(); + for(int index=0;index=mTabEntries.size()) + { + GlobalDefs::outDebug("[Tablature::setTypeAt] index out of bounds : "+String().fromInt(index)); + return false; + } + mTabEntries[index].setNoteType(noteType); + return true; +} + +bool Tablature::open(const String &pathFileTablature) +{ + mLastError=None; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=pathFileTablature.betweenString(0,'.')+String(STRING_PRJEXTENSION); + if(!loadTabFile(pathFileTablature))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + return true; +} + +bool Tablature::import(String pathFileTablature) +{ + mLastError=None; + String strExtension; + String pathFileTablatureImport; + + pathFileTablatureImport=pathFileTablature; + strExtension=Profile::getExtension(pathFileTablature); + strExtension.lower(); + if(strExtension.isNull()||!(strExtension==String(STRING_TABEXTENSION)))return false; + pathFileTablature=Profile::removeExtension(pathFileTablature); + pathFileTablature+=String("_imp")+strExtension; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=getPathFileProject(pathFileTablatureImport); + if(!loadTabFile(pathFileTablatureImport))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + saveAs(pathFileTablature); + return true; +} + +String Tablature::getPathFileProject(const String &pathFileTablature) +{ + return Profile::removeExtension(pathFileTablature)+String(STRING_PRJEXTENSION); +} + +bool Tablature::saveAs(const String &pathFileTablature) +{ + TabWriter tabWriter; + if(pathFileTablature.isNull())return false; + return tabWriter.write(mTabEntries,pathFileTablature); +} + +bool Tablature::save(void) +{ + if(mPathFileTablature.isNull())return false; + return saveAs(mPathFileTablature); +} + +bool Tablature::openProject(const String &pathFileName) +{ + DiskInfo diskInfo; + File inFile; + String strLine; + String strDirectory; + + mPathFileProject=pathFileName; + strDirectory=mPathFileProject; + Profile::makeDirectoryName(strDirectory); + if(!diskInfo.setCurrentDirectory(strDirectory)||!inFile.open(pathFileName)) + { + mLastError=FileOpenError; + return false; + } + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + MessageBox::messageBox("Project does not contain a reference to any tablature.",strLine); + return false; + } + if(!open(strLine))return false; + while(inFile.readLine(strLine)) + { + if(strLine.betweenString(0,'=')==String("TYPES"))parseTypes(strLine); + else if(strLine.betweenString(0,'=')==String("RANGE"))parseRange(strLine); + } + return true; +} + +bool Tablature::saveProject(const String &pathFileName) +{ + File outFile; + + if(!pathFileName.isNull())mPathFileProject=pathFileName; + if(mPathFileProject.isNull())return false; + if(!outFile.open(mPathFileProject,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mPathFileName.isNull())mPathFileName=Profile::removeExtension(mPathFileProject)+String(STRING_TABEXTENSION); + outFile.writeLine(String("TABLATURE=")+mPathFileName); + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;indexlength)continue; + if(isTabLine(strLine,startElement)) + { + mTablature.insert(&TabLines()); + TabLines &tabLines=mTablature[mTablature.size()-1]; + tabLines[0]=strLine.substr(startElement); + for(int string=1;string<6;string++,line++) + { + if(!inFile.readLine(strLine))break; + tabLines[string]=strLine.substr(startElement); + } + } + } + GlobalDefs::outDebug(String("[Tablature::loadTabFile] ")+String().fromInt(mTablature.size())+String(" tabs, in ")+String().fromInt((::GetTickCount()-elapsedTime)/1000)+String(" seconds.")); + if(mTablature.size())return true; + mLastError=NoTabsParsedError; + return false; +} + +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0; + char charAt1; + char charAt2; + char charAt3; + char charAt4; + char lastChar; + + if(!lineLength)return false; + charAt0=lineLength?strLine.charAt(0):0; + charAt1=lineLength>=1?strLine.charAt(1):0; + charAt2=lineLength>=2?strLine.charAt(2):0; + charAt3=lineLength>=3?strLine.charAt(3):0; + charAt4=lineLength>=4?strLine.charAt(4):0; + lastChar=lineLength?strLine.charAt(lineLength-1):0; + + if((charAt0=='e'||charAt0=='E')&&(charAt1==':'||charAt1=='|')) + { + startElement=2; + return true; + } + if(charAt0=='|'&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==':'&&(::isalnum(charAt1)||charAt1=='-')) + { + startElement=1; + return true; + } + if(charAt0==':'&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0=='-') + { + startElement=0; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' '&&charAt4=='|') + { + startElement=5; + return true; + } + if(charAt0==' '&&charAt1=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='I'&&charAt3=='-') + { + startElement=3; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==']'&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==':'&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(::isdigit(charAt0)&&(lastChar=='-'||lastChar=='|')) + { + startElement=0; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2==' '&&charAt3=='|') + { + startElement=3; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' ') + { + startElement=4; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&(charAt2=='|'||charAt2=='+')&&charAt3=='-') + { + startElement=3; + return true; + } + return false; +} diff --git a/guitar/backup/20030501/tabpage.cpp b/guitar/backup/20030501/tabpage.cpp new file mode 100644 index 0000000..3e4dd3a --- /dev/null +++ b/guitar/backup/20030501/tabpage.cpp @@ -0,0 +1,983 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TabPage::TabPage(ViewWindow &parent) +: mItemsPerTab(0), mNumTabs(0), mCharWidth(0), mOutlinePen(RGBColor(0,0,0),Pen::PDot) , + mDrawFont("Courier New",10), mHasFocus(false), mIsCancelled(false), mIsInPlay(false), + mIsPaused(false), mIsDirty(false), mKeepOutline(false), mCurrEntryIndex(0), mIsInSetRange(false) +{ + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + mSizeHandler.setCallback(this,&TabPage::sizeHandler); + mPaintHandler.setCallback(this,&TabPage::paintHandler); + mVerticalScrollHandler.setCallback(this,&TabPage::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&TabPage::horizontalScrollHandler); + mLeftButtonUpHandler.setCallback(this,&TabPage::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&TabPage::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&TabPage::mouseMoveHandler); + mKillFocusHandler.setCallback(this,&TabPage::killFocusHandler); + mSetFocusHandler.setCallback(this,&TabPage::setFocusHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabPage::leftButtonDoubleHandler); + mKeyDownHandler.setCallback(this,&TabPage::keyDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent=&parent; + mParent.disposition(PointerDisposition::Assume); + mScrollInfo.hwndOwner(parent); + createBitmap(parent); +} + +TabPage::TabPage(const TabPage &/*someTabPage*/) +{ // private implementation +} + +TabPage::~TabPage() +{ + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); +} + +bool TabPage::insert(const TabRanges &ranges) +{ + GlobalDefs::outDebug("[TabPage::insert]TabRanges",GlobalDefs::Debug); + if(!ranges.size())return false; + for(int index=0;indexsetBits(BkColorBits); + drawTabPage(); + drawEntries(); + cursorControl.waitCursor(false); + mScrollInfo.scrollableObjectDimensions(mDIBitmap->width(),mDIBitmap->height()); + elapsedTime=(::GetTickCount()-elapsedTime)/1000; + GlobalDefs::outDebug(String("[TabPage::createBitmap]took ")+String().fromInt(elapsedTime)+String(" seconds."),GlobalDefs::Debug); + return mDIBitmap.isOkay(); +} + +bool TabPage::drawEntries(const RGBColor &rgbColor) +{ + Point p1; + Point p2; + String strFret; + Registry registry; + bool showAction(registry.getShowAction()); + + if(!isOkay())return false; + GlobalDefs::outDebug(String("[TabPage::drawEntries]"),GlobalDefs::Debug); + PureDevice &pureDevice=mDIBitmap->getDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + for(int entryIndex=0;entryIndexgetDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + Point p1=getEntryPoint(entryIndex); + Point p2; + TabEntry &entry=mTabEntries[entryIndex]; + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} + +bool TabPage::clearUpdate(void) +{ + GlobalDefs::outDebug(String("[TabPage::clearUpdate]"),GlobalDefs::Debug); + if(!isOkay())return false; + if(!mOverlay.isOkay())return false; + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + mOverlay.destroy(); + return true; +} + +bool TabPage::getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(outlineRect.ptInRect(mousePoint)) + { + entryIndex=index; + return true; + } + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getNearestString(const Point &clickPoint,int &nearestString) +{ + Rect outlineRect; + map distanceMap; + + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return false; + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + distanceMap[abs(clickPoint.y()-outlineRect.top())]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=1; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=0; + nearestString=(*distanceMap.begin()).second; + return true; +} + +Point TabPage::getEntryPoint(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getEntryPoint]"),GlobalDefs::Debug); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return xyPoint; +} + +bool TabPage::showCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + mOverlay.destroy(); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + isInOutline(true); + mParent->clientRect(clientRect); + bringOutlineIntoView(outlineRect,clientRect); + this->outlineRect(outlineRect); + showFretEntry(mTabEntries[mCurrEntryIndex]); + return true; +} + +bool TabPage::drawTabPage(void) +{ + int yStart=TopMargin; + int xStart=0; + int elapsedTime; + + GlobalDefs::outDebug(String("[TabPage::drawTabPage]"),GlobalDefs::Debug); + elapsedTime=::GetTickCount(); + if(!getNumTabs())drawTab(LeftMargin,RightMargin,xStart,yStart,TabSpacing,TabLines); // draw at least one + for(int index=0;indexline(Point(marginLeft-1,yStart),Point(marginLeft-1,1+yStart+((lineCount-1)*spacing)),TabLineColor); + for(int line=0;lineline(Point(xPos,yPos),Point(mDIBitmap->width()-marginRight,yPos),TabLineColor); + yPos+=spacing; + } + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point(mDIBitmap->width()-marginRight,1+yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point((mDIBitmap->width()-marginRight)+2,yStart),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart+((lineCount-1)*spacing)),Point((mDIBitmap->width()-marginRight)+2,yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point((mDIBitmap->width()-marginRight)+2,yStart),Point((mDIBitmap->width()-marginRight)+2,1+yStart+((lineCount-1)*spacing)),TabLineColor); + return yStart+((lineCount-1)*spacing); +} + +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + + GlobalDefs::outDebug(String("[TabPage::getDimensions]"),GlobalDefs::Debug); + setItemsPerTab(((guiWindow.width())-(RightMargin+LeftMargin))/getCharWidth()); + setNumTabs((mTabEntries.size()/getItemsPerTab())); + setNumTabs(getNumTabs()+(mTabEntries.size()%getItemsPerTab()?1:0)); + if(!getNumTabs())gdiPoint.y(TopMargin+((TabHeight+TabSeparator))); + else gdiPoint.y(TopMargin+(getNumTabs()*(TabHeight+TabSeparator))); + gdiPoint.x(guiWindow.width()); + GlobalDefs::outDebug(String("[TabPage::getDimensions]ItemsPerTab:")+String().fromInt(getItemsPerTab())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]NumTabs:")+String().fromInt(getNumTabs())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]AvgCharWidth:")+String().fromInt(getCharWidth())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmWidth:")+String().fromInt(gdiPoint.x())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmHeight:")+String().fromInt(gdiPoint.y())); + return getNumTabs(); +} + +int TabPage::getWidestEntry(PureDevice &pureDevice)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + GlobalDefs::outDebug(String("[TabPage::getWidestEntry]"),GlobalDefs::Debug); + if(!mTabEntries.size())return MinCharWidth; + widestEntry=0; + for(int entryIndex=0;entryIndexwidestEntry)widestEntry=sizeStruct.cx; + } + } + return widestEntry*2; +} + +void TabPage::bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + GlobalDefs::outDebug(String("[TabPage::bitBlt]"),GlobalDefs::Debug); + if(!mDIBitmap.isOkay())return; + mDIBitmap->usePalette(pureDevice,true); // the usePalette code can be removed... + mDIBitmap->bitBlt(pureDevice,dstRect,srcPoint); // but needs test on Win '98 first + mDIBitmap->usePalette(pureDevice,false); +} + +void TabPage::invalidate(Rect rect) +{ + GlobalDefs::outDebug(String("[TabPage::invalidate]"),GlobalDefs::Debug); + rect.left(rect.left()-mScrollInfo.currScrollx()); + rect.top(rect.top()-mScrollInfo.currScrolly()); + rect.right(rect.right()-mScrollInfo.currScrollx()); + rect.bottom(rect.bottom()-mScrollInfo.currScrollx()); + mParent->invalidate(rect,false); +} + +void TabPage::bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect) +{ + GlobalDefs::outDebug(String("[TabPage::bringOutlineIntoView]"),GlobalDefs::Debug); + if(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + while(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + if(!mScrollInfo.pageDown())break; + } + } + else if(outlineRect.top()clientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::play(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::play]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::playFromCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::playFromCurrent]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=mCurrEntryIndex;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +void TabPage::showFretEntry(const TabEntry &entry) +{ + GlobalDefs::outDebug(String("[TabPage::showFretEntry]"),GlobalDefs::Debug); + if(!mPlayNoteHandler.isOkay())return; + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void TabPage::setStartRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setStartRange]"),GlobalDefs::Debug); + isInSetRange(true); + mCurrRange.setBeginRange(mCurrEntryIndex); +} + +void TabPage::setEndRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setEndRange]"),GlobalDefs::Debug); + isInSetRange(false); + mCurrRange.setEndRange(mCurrEntryIndex); + mCurrRange.autoName(); + mTabRanges.insert(&mCurrRange); + isDirty(true); + GlobalDefs::outDebug(mCurrRange.toString()); +} + +void TabPage::cut(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::cut]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + mParent->enablePaste(true); + if(!mTabEntries.size())mParent->enableCut(false); + showCurrent(); +} + +void TabPage::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::copy]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mParent->enablePaste(true); +} + +bool TabPage::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::paste] Current position is ")+String().fromInt(mCurrEntryIndex),GlobalDefs::Debug); + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return false; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return false; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return false; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return false; + entry.fromString(strText.betweenString(']',0)); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else mTabEntries.insertAfter(mCurrEntryIndex,&entry); + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +// ********************************************************************************************* +// callback handlers + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::sizeHandler]ENTER",GlobalDefs::Verbose); + if(isInPlay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Pausing play...",GlobalDefs::Debug); + isPaused(true); + } + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + if(!sizePoint.x()||!sizePoint.y()) + { + if(isInPlay())isPaused(false); + return false; + } + clearUpdate(); + if(!update(*mParent)) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + + return false; + } + if(!mDIBitmap.isOkay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + return false; + } + if(isInPlay())isPaused(false); + GlobalDefs::outDebug("[TabPage::sizeHandler]LEAVE",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::paintHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::paintHandler]",GlobalDefs::Verbose); + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(!mDIBitmap.isOkay())return false; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + bitBlt(paintDevice,Rect(0,0,getWidth(),getHeight()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + bitBlt(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType TabPage::verticalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::verticalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleVerticalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::horizontalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::horizontalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleHorizontalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDoubleHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + Point mousePoint; + int selectedString; + Rect outlineRect; + int entryIndex; + + mousePoint.x(someCallbackData.loWord()+mScrollInfo.currScrollx()); + mousePoint.y(someCallbackData.hiWord()+mScrollInfo.currScrolly()); + if(!getOutlineRect(mousePoint,entryIndex,outlineRect))return false; + if(!getNearestString(mousePoint,selectedString))return false; + getFretEntry(selectedString); + return false; +} + +bool TabPage::getFretEntry(int selectedString) +{ + FretDialog fretDialog; + bool returnCode=false; + + keepOutline(true); + if((returnCode=fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex))) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return returnCode; +} + +CallbackData::ReturnType TabPage::leftButtonUpHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonUpHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::setFocusHandler]",GlobalDefs::Verbose); + hasFocus(true); + if(Clipboard::hasData(GlobalDefs::getRegisteredClipboardFormat()))mParent->enablePaste(true); + else mParent->enablePaste(false); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new Sequencer(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// showCurrent(); // smk +// mParent->setCapture(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::killFocusHandler]",GlobalDefs::Verbose); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + isInOutline(false); + clearUpdate(); + } + mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug("[TabPage::mouseMoveHandler]",GlobalDefs::Verbose); + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + mParent->releaseCapture(); + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + mParent->enableCut(true); + mParent->enableCopy(true); + mCurrEntryIndex=entryIndex; + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); +// mCurrEntryIndex=-1; smk + } + return false; +} + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + clearUpdate(); + showCurrent(); + } + return false; +} \ No newline at end of file diff --git a/guitar/backup/20030501/tabpage.hpp b/guitar/backup/20030501/tabpage.hpp new file mode 100644 index 0000000..2af722c --- /dev/null +++ b/guitar/backup/20030501/tabpage.hpp @@ -0,0 +1,395 @@ +#ifndef _GUITAR_TABPAGE_HPP_ +#define _GUITAR_TABPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _GUITAR_SCROLLINFO_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class GUIWindow; +class ViewWindow; + +class TabPage +{ +public: + TabPage(ViewWindow &parent); + virtual ~TabPage(); + bool insert(const TabEntries &entries); + bool insert(const TabRanges &ranges); + bool update(GUIWindow &guiWindow); + bool play(void); + bool playRange(int rangeIndex); + bool playFromCurrent(void); + void cut(void); + void copy(void); + bool paste(void); + bool modifyProperties(void); + bool increaseTempo(void); + bool decreaseTempo(void); + bool getCancelled(void)const; + void setCancelled(bool cancelled); + bool isInPlay(void)const; + bool isPaused(void)const; + int getWidth(void)const; + int getHeight(void)const; + const TabEntries &getEntries(void)const; + const TabRanges &getRanges(void)const; + void setRanges(const TabRanges &ranges); + bool hasRange(void)const; + void setPlayNoteHandler(CallbackPointer &callbackPointer); + void setStartRange(void); + void setEndRange(void); + bool isDirty(void)const; + void isDirty(bool isDirty); + bool isInOutline(void)const; + bool isInSetRange(void)const; + void isInSetRange(bool isInSetRange); + void setStatusControlRef(SmartPointer &statusBar); + bool isOkay(void)const; +private: + enum {BkColorBits=255,TabLineColor=0}; + enum {LeftMargin=10,RightMargin=10,TopMargin=10,TabLines=6,TabSpacing=10,TabHeight=TabLines*TabSpacing, + TabSeparator=20,CharSpacing=3,TabClearance=3,MinCharWidth=16}; + enum {RightArrow=0x27,LeftArrow=0x25,DownArrow=0x28,UpArrow=0x26,Insert=0x2D,Home=0x24,End=0x23,Delete=0x2E}; + TabPage(const TabPage &someTabPage); + TabPage &operator=(const TabPage &someTabPage); + int drawTab(int marginLeft,int marginRight,int xPos,int yPos,int spacing,int lineCount); + void getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const; + void bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + void bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect); + bool drawEntry(int entryIndex,const RGBColor &rgbColor=RGBColor(0,0,0)); + bool getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect); + bool getNearestString(const Point &clickPoint,int &nearestString); + bool drawEntries(const RGBColor &rgbColor=RGBColor(0,0,0)); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool getOutlineRect(int entryIndex,Rect &outlineRect); + int getWidestEntry(PureDevice &pureDevice)const; + bool getFretEntry(int selectedString=0); + bool createBitmap(GUIWindow &someGUIWindow); + bool outlineRect(const Rect &outlineRect); + Point getEntryPoint(int entryIndex); + bool drawTabPage(void); + void setItemsPerTab(int itemsPerTab); + void setNumTabs(int numTabs); + void setCharWidth(int charWidth); + int getNumEntries(void)const; + int getNumTabs(void)const; + int getItemsPerTab(void)const; + int getCharWidth(void)const; + void invalidate(Rect rect); + void isInOutline(bool isInOutline); + bool clearUpdate(void); + bool hasFocus(void)const; + void hasFocus(bool hasFocus); + void isInPlay(bool isInPlay); + void isPaused(bool isPaused); + void showFretEntry(const TabEntry &entry); + void setStatusText(const String &statusText); + void keepOutline(bool keepOutline); + bool keepOutline(void)const; + bool showCurrent(void); + + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mKillFocusHandler; + Callback mSetFocusHandler; + Callback mLeftButtonDoubleHandler; + Callback mKeyDownHandler; + + CallbackPointer mPlayNoteHandler; + TabEntries mTabEntries; + TabRanges mTabRanges; + SmartPointer mDIBitmap; + SmartPointer mOverlay; + SmartPointer mParent; + SmartPointer mMIDIDevice; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + + Rect mPrevOutlineRect; + Pen mOutlinePen; + int mNumTabs; + int mItemsPerTab; + int mCharWidth; + + bool mIsInOutline; + bool mHasFocus; + bool mIsCancelled; + bool mIsInPlay; + bool mIsPaused; + bool mIsDirty; + bool mKeepOutline; + + bool mIsInSetRange; + Range mCurrRange; + int mCurrEntryIndex; + Font mDrawFont; +}; + +inline +TabPage &TabPage::operator=(const TabPage &/*someTabPage*/) +{ // private implementation + return *this; +} + +inline +int TabPage::getNumEntries(void)const +{ + return mTabEntries.size(); +} + +inline +void TabPage::getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const +{ + pureDevice.getTextExtentPoint32(((String&)string).str(),&sizeStruct); +} + +inline +int TabPage::getWidth(void)const +{ + return ((SmartPointer&)mDIBitmap)->width(); +} + +inline +int TabPage::getHeight(void)const +{ + return ((SmartPointer&)mDIBitmap)->height(); +} + +inline +int TabPage::getNumTabs(void)const +{ + return mNumTabs; +} + +inline +void TabPage::setNumTabs(int numTabs) +{ + mNumTabs=numTabs; +} + +inline +int TabPage::getCharWidth(void)const +{ + return mCharWidth; +} + +inline +void TabPage::setCharWidth(int charWidth) +{ + mCharWidth=charWidth; +} + +inline +int TabPage::getItemsPerTab(void)const +{ + return mItemsPerTab; +} + +inline +void TabPage::setItemsPerTab(int itemsPerTab) +{ + mItemsPerTab=itemsPerTab; +} + +inline +void TabPage::isInOutline(bool isInOutline) +{ + mIsInOutline=isInOutline; +} + +inline +bool TabPage::isInOutline(void)const +{ + return mIsInOutline; +} + +inline +bool TabPage::hasFocus(void)const +{ + return mHasFocus; +} + +inline +void TabPage::hasFocus(bool hasFocus) +{ + mHasFocus=hasFocus; +} + +inline +bool TabPage::getCancelled(void)const +{ + return mIsCancelled; +} + +inline +void TabPage::setCancelled(bool cancelled) +{ + mIsCancelled=cancelled; +} + +inline +bool TabPage::isInPlay(void)const +{ + return mIsInPlay; +} + +inline +void TabPage::isInPlay(bool isInPlay) +{ + mIsInPlay=isInPlay; +} + +inline +bool TabPage::isPaused(void)const +{ + return mIsPaused; +} + +inline +void TabPage::isPaused(bool isPaused) +{ + mIsPaused=isPaused; +} + +inline +void TabPage::setPlayNoteHandler(CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; +} + +inline +const TabEntries &TabPage::getEntries(void)const +{ + return mTabEntries; +} + +inline +const TabRanges &TabPage::getRanges(void)const +{ + return mTabRanges; +} + +inline +bool TabPage::hasRange(void)const +{ + return mTabRanges.size()?true:false; +} + +inline +bool TabPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void TabPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +void TabPage::keepOutline(bool keepOutline) +{ + GlobalDefs::outDebug(String("[TabPage::keepOutline]")+(keepOutline?String("true"):String("false")),GlobalDefs::Debug); + mKeepOutline=keepOutline; +} + +inline +bool TabPage::keepOutline(void)const +{ + return mKeepOutline; +} + +inline +bool TabPage::isInSetRange(void)const +{ + return mIsInSetRange; +} + +inline +void TabPage::isInSetRange(bool isInSetRange) +{ + mIsInSetRange=isInSetRange; +} + +inline +void TabPage::setRanges(const TabRanges &ranges) +{ + mTabRanges=ranges; + isDirty(true); +} + +inline +void TabPage::setStatusText(const String &statusText) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(statusText); +} + +inline +void TabPage::setStatusControlRef(SmartPointer &statusBar) +{ + mStatusBar=statusBar; +} + +inline +bool TabPage::isOkay(void)const +{ + return mTabEntries.size()&&mDIBitmap.isOkay(); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030501/uutool.cpp b/guitar/backup/20030501/uutool.cpp new file mode 100644 index 0000000..18cd678 --- /dev/null +++ b/guitar/backup/20030501/uutool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + diff --git a/guitar/backup/20030501/uutool.hpp b/guitar/backup/20030501/uutool.hpp new file mode 100644 index 0000000..55f5595 --- /dev/null +++ b/guitar/backup/20030501/uutool.hpp @@ -0,0 +1,44 @@ +#ifndef _GUITAR_UUTOOL_HPP_ +#define _GUITAR_UUTOOL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#include + +class String; + +class UUTool +{ +public: + static String encode(String strLine); + static String decode(String strLine); +private: + UUTool(void); + virtual ~UUTool(); + static BYTE chEncode(int ch); + static BYTE chDecode(int ch); +}; + +inline +UUTool::UUTool(void) +{ +} + +inline +UUTool::~UUTool() +{ +} + +inline +BYTE UUTool::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} + +inline +BYTE UUTool::chDecode(int ch) +{ + return (ch-' ')&0x3F; +} +#endif diff --git a/guitar/backup/20030501/viewwnd.cpp b/guitar/backup/20030501/viewwnd.cpp new file mode 100644 index 0000000..20b69bc --- /dev/null +++ b/guitar/backup/20030501/viewwnd.cpp @@ -0,0 +1,541 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ + mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE); +// enableCut(false); +// enableCopy(false); +// enablePaste(false); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ + mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + if(mTabPage->insert(mTablature.getTabRanges())) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + if(THPlay==threadMessage.userDataOne())thPlay(); + else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); + else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030501/viewwnd.hpp b/guitar/backup/20030501/viewwnd.hpp new file mode 100644 index 0000000..08e7513 --- /dev/null +++ b/guitar/backup/20030501/viewwnd.hpp @@ -0,0 +1,146 @@ +#ifndef _GUITAR_VIEWWINDOW_HPP_ +#define _GUITAR_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _GUITAR_TABPAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class GUIFretboard; +class StatusBarEx; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + friend class TabPage; + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); + void setFretboardHandler(CallbackPointer &callbackPointer); + bool createProject(const String &strPathTabFile); + bool createProject(void); + bool openProject(const String &pathFileName); + bool saveProject(const String &pathFileName); + bool saveProject(void); + void play(void); + void playFromCurrent(void); + void stopPlay(void); + void playRepeated(void); + void playRange(int rangeIndex); + void playRangeRepeated(int rangeIndex); + void cut(void); + void copy(void); + void paste(void); + void modifyProperties(void); + void setStartRange(void); + void setEndRange(void); + bool getTabRanges(TabRanges &ranges); + void setTabRanges(const TabRanges &ranges); + int getNumTabEntries(void)const; + void increaseTempo(void); + void decreaseTempo(void); + String getTitle(void)const; + const String &getPathFileProject(void)const; + + void setStatusControlRef(SmartPointer &statusBar); + + bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); + void enablePlaySelect(bool enable); + void enableStopSelect(bool enable); + void enableCut(bool enable); + void enableCopy(bool enable); + void enablePaste(bool enable); + bool getEnableCut(void); + bool getEnableCopy(void); + bool getEnablePaste(void); + bool isInRepeatPlay(void)const; + void isInRepeatPlay(bool isInRepeatPlay); + bool getProjectName(String &strPathFileProject); + void thPlay(void); + void thPlayFromCurrent(void); + void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + SmartPointer mTabPage; + SmartPointer mMIDIDevice; + Tablature mTablature; + bool mIsInRepeatPlay; +}; + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +#endif + + diff --git a/guitar/backup/20030501/wininfo.hpp b/guitar/backup/20030501/wininfo.hpp new file mode 100644 index 0000000..373014d --- /dev/null +++ b/guitar/backup/20030501/wininfo.hpp @@ -0,0 +1,85 @@ +#ifndef _GUITAR_WININFO_HPP_ +#define _GUITAR_WININFO_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WinInfo +{ +public: + WinInfo(void); + virtual ~WinInfo(); + void refresh(void); + const String &strProductName(void)const; + const String &strRegisteredOwner(void)const; + const String &strProductID(void)const; + const String &strVersion(void)const; +private: + String mStrProductName; + String mStrRegisteredOwner; + String mStrProductID; + String mStrVersion; +}; + +inline +WinInfo::WinInfo(void) +{ + refresh(); +} + +inline +WinInfo::~WinInfo() +{ +} + +inline +void WinInfo::refresh(void) +{ + RegKey regKey(RegKey::LocalMachine); + + if(!regKey.openKey("Software\\Microsoft\\Windows\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + if(!mStrProductName.isNull()) + { + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } + else + { + RegKey regKey(RegKey::LocalMachine); + if(!regKey.openKey("Software\\Microsoft\\Windows NT\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } +} + +inline +const String &WinInfo::strProductName(void)const +{ + return mStrProductName; +} + +inline +const String &WinInfo::strRegisteredOwner(void)const +{ + return mStrRegisteredOwner; +} + +inline +const String &WinInfo::strProductID(void)const +{ + return mStrProductID; +} + +inline +const String &WinInfo::strVersion(void)const +{ + return mStrVersion; +} +#endif diff --git a/guitar/backup/20030502/Action.hpp b/guitar/backup/20030502/Action.hpp new file mode 100644 index 0000000..46afb7f --- /dev/null +++ b/guitar/backup/20030502/Action.hpp @@ -0,0 +1,155 @@ +#ifndef _GUITAR_ACTION_HPP_ +#define _GUITAR_ACTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Action +{ +public: + typedef enum Attribute{None,Pick,PullOff,Bend,HammerOn,Release,SlideDown,SlideUp}; + Action(); + Action(Attribute action); + Action(const String &strAction); + virtual ~Action(); + Attribute getAction(void)const; + void setAction(Attribute action); + String toString(void)const; + const Action &fromString(const String &string); + String toStringShort(void)const; + static Array enumerate(void); +private: + Attribute mAction; +}; + +inline +Action::Action() +: mAction(None) +{ +} + +inline +Action::Action(Attribute action) +: mAction(action) +{ +} + +inline +Action::Action(const String &strAction) +{ + fromString(strAction); +} + +inline +Action::~Action() +{ +} + +inline +Action::Attribute Action::getAction(void)const +{ + return mAction; +} + +inline +void Action::setAction(Attribute action) +{ + mAction=action; +} + +inline +String Action::toStringShort(void)const +{ + switch(mAction) + { + case PullOff : + return "p"; + break; + case Bend : + return "b"; + break; + case HammerOn : + return "h"; + break; + case Release : + return "r"; + break; + case SlideDown : + return "s"; + break; + case SlideUp : + return "s"; + break; + case Pick : + case None : + default : + return ""; + break; + } +} + +inline +String Action::toString(void)const +{ + switch(mAction) + { + case Pick : + return "Pick"; + break; + case PullOff : + return "PullOff"; + break; + case Bend : + return "Bend"; + break; + case HammerOn : + return "HammerOn"; + break; + case Release : + return "Release"; + break; + case SlideDown : + return "SlideDown"; + break; + case SlideUp : + return "SlideUp"; + break; + case None : + default : + return "None"; + break; + } +} + +inline +const Action &Action::fromString(const String &string) +{ + if(string=="Pick")mAction=Pick; + else if(string=="PullOff")mAction=PullOff; + else if(string=="Bend")mAction=Bend; + else if(string=="HammerOn")mAction=HammerOn; + else if(string=="Release")mAction=Release; + else if(string=="SlideDown")mAction=SlideDown; + else if(string=="SlideUp")mAction=SlideUp; + else mAction=None; + return *this; +} + +inline +Array Action::enumerate(void) +{ + Array actions; + actions.size(7); + actions[0]="Pick"; + actions[1]="PullOff"; + actions[2]="Bend"; + actions[3]="HammerOn"; + actions[4]="Release"; + actions[5]="SlideDown"; + actions[6]="SlideUp"; + return actions; +} +#endif diff --git a/guitar/backup/20030502/BrowserHelper.cpp b/guitar/backup/20030502/BrowserHelper.cpp new file mode 100644 index 0000000..c5be31c --- /dev/null +++ b/guitar/backup/20030502/BrowserHelper.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool BrowserHelper::launchBrowser(const String &strCommand) +{ + String strBrowser; + Process process; + + if(!getBrowser(strBrowser))return false; + process.createProcess(strBrowser,String(" ")+strCommand,false); + return true; +} + +bool BrowserHelper::getBrowser(String &strBrowser) +{ + RegKey regKey(RegKey::LocalMachine); + String strCommand; + int argPos; + + if(!regKey.openKey(String(STRING_BROWSERKEY))) + { + if(!regKey.openKey(String(STRING_BROWSERKEYALT)))return false; + } + if(!regKey.enumValue(0,String(STRING_BROWSERCOMMAND),strCommand)||strCommand.isNull()||!strCommand.length()) + return false; + strCommand.removeTokens("'\""); + if(-1!=(argPos=strCommand.strpos("-")))strCommand=strCommand.substr(0,argPos-1); + strBrowser=strCommand; + return true; +} diff --git a/guitar/backup/20030502/BrowserHelper.hpp b/guitar/backup/20030502/BrowserHelper.hpp new file mode 100644 index 0000000..99d2945 --- /dev/null +++ b/guitar/backup/20030502/BrowserHelper.hpp @@ -0,0 +1,20 @@ +#ifndef _GUITAR_BROWSERHELPER_HPP_ +#define _GUITAR_BROWSERHELPER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class BrowserHelper +{ +public: + static bool getBrowser(String &strBrowser); + static bool launchBrowser(const String &strCommand); +private: + BrowserHelper(); +}; + +inline +BrowserHelper::BrowserHelper() +{ +} +#endif diff --git a/guitar/backup/20030502/ChordDlg.cpp b/guitar/backup/20030502/ChordDlg.cpp new file mode 100644 index 0000000..5ff5aff --- /dev/null +++ b/guitar/backup/20030502/ChordDlg.cpp @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include + +ChordDialog::ChordDialog(void) +{ + mInitHandler.setCallback(this,&ChordDialog::initHandler); + mCreateHandler.setCallback(this,&ChordDialog::createHandler); + mCloseHandler.setCallback(this,&ChordDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog::ChordDialog(const ChordDialog &someChordDialog) +{ // private implementation + *this=someChordDialog; +} + +ChordDialog::~ChordDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) +{ // private implementation + return *this; +} + +bool ChordDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); + mChordList.disposition(PointerDisposition::Delete); + setChordList(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +void ChordDialog::setChordList(void) +{ + CursorControl cursor; + String strInsert; + + cursor.waitCursor(true); + for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) + { + String strResource(rcIndex); + strInsert=strResource.betweenString(0,'['); + strInsert.trimRight(); + strInsert+=strResource.betweenString(']',0); + mChordList->insertString(strInsert); + } + cursor.waitCursor(false); + setText(CHORDS_COUNT,"chord count:"+String().fromInt(rcIndex-ResBegin)); +} + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void ChordDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + + + diff --git a/guitar/backup/20030502/ChordDlg.hpp b/guitar/backup/20030502/ChordDlg.hpp new file mode 100644 index 0000000..a21493f --- /dev/null +++ b/guitar/backup/20030502/ChordDlg.hpp @@ -0,0 +1,53 @@ +#ifndef _GUITAR_CHORDDLG_HPP_ +#define _GUITAR_CHORDDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordDialog : public DWindow +{ +public: + ChordDialog(void); + virtual ~ChordDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordDialog(const ChordDialog &someChordDialog); + ChordDialog &operator=(const ChordDialog &someChordDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setChordList(void); + void handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mChordList; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20030502/DragQueryFile.hpp b/guitar/backup/20030502/DragQueryFile.hpp new file mode 100644 index 0000000..58d205c --- /dev/null +++ b/guitar/backup/20030502/DragQueryFile.hpp @@ -0,0 +1,39 @@ +#ifndef _COMMON_DRAGQUERYFILE_HPP_ +#define _COMMON_DRAGQUERYFILE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DragQueryFile +{ +public: + static bool getFileNames(HDROP hDrop,Block &strFileNames); +private: +}; + +inline +bool DragQueryFile::getFileNames(HDROP hDrop,Block &strFileNames) +{ + String strBuffer; + UINT numFiles; + + strFileNames.remove(); + strBuffer.reserve(512); + if(0==hDrop)return false; + numFiles=::DragQueryFile(hDrop,0xFFFFFFFF,0,0); + if(!numFiles)return false; + for(int index=0;index +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class Element +{ +public: + Element(); + Element(int fret,Action action=Action::None); + virtual ~Element(); + Action::Attribute getAction(void)const; + void setAction(Action::Attribute action); + void setFret(int fret); + int getFret(void)const; + String toString(void)const; +private: + int mFret; + Action mAction; +}; + +inline +Element::Element() +: mFret(0) +{ +} + +inline +Element::Element(int fret,Action action) +: mFret(fret), mAction(action) +{ +} + +inline +Element::~Element() +{ +} + +inline +Action::Attribute Element::getAction(void)const +{ + return mAction.getAction(); +} + +inline +void Element::setAction(Action::Attribute action) +{ + mAction.setAction(action); +} + +inline +int Element::getFret(void)const +{ + return mFret; +} + +inline +void Element::setFret(int fret) +{ + mFret=fret; +} + +inline +String Element::toString(void)const +{ + return mAction.toString()+String(" ")+String().fromInt(mFret); +} +#endif diff --git a/guitar/backup/20030502/Fingering.cpp b/guitar/backup/20030502/Fingering.cpp new file mode 100644 index 0000000..3c45813 --- /dev/null +++ b/guitar/backup/20030502/Fingering.cpp @@ -0,0 +1,88 @@ +#include +#include + +FrettedNotes Fingering::getFingering(const Scale &scale) +{ + FrettedNotes frettedNotes; + FrettedNote frettedNote; + + frettedNotes.size(scale.size()); + GlobalDefs::outDebug(scale.toString()); + for(int index=0;indexFretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString<0)return false; + } + mCurrFret++; + } + return found; +} + +bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e) +{ + Note tmpNote; + bool found; + + found=false; + GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString()); + if(mCurrFret<0||mCurrString>5)return false; + while(!found) + { + tmpNote=mFretboard.getAt(mCurrString,mCurrFret); + GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString()); + if(tmpNote==note) + { + frettedNote.setString(mCurrString); + frettedNote.setFret(mCurrFret); + frettedNote.setNote(tmpNote); + found=true; + } + if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets) + { + mCurrFret=mAnchorFret-2; + mCurrString++; +// mAnchorFret=mCurrFret; + if(mCurrString>5)return false; + if(mCurrFret<0)mCurrFret=0; + } + if(mCurrFret>Fretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString>5)return false; + } + mCurrFret++; + } + return found; +} diff --git a/guitar/backup/20030502/Fingering.hpp b/guitar/backup/20030502/Fingering.hpp new file mode 100644 index 0000000..88325bc --- /dev/null +++ b/guitar/backup/20030502/Fingering.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_FINGERING_HPP_ +#define _GUITAR_FINGERING_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Fingering +{ +public: + Fingering(); + virtual ~Fingering(); + FrettedNotes getFingering(const Scale &scale); +private: + enum{MaxStretchFrets=4,DefaultString=5}; + bool getFirst(FrettedNote &frettedNote,const Note ¬e); + bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); + int getCurrString(void)const; + void setCurrString(int currString); + int getCurrFret(void)const; + void setCurrFret(int currFret); + + Fretboard mFretboard; + int mMaxStretchFrets; + int mStartString; + int mCurrString; + int mCurrFret; + int mAnchorFret; +}; + +inline +Fingering::Fingering() +: mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) +{ +} + +inline +Fingering::~Fingering() +{ +} + +inline +int Fingering::getCurrString(void)const +{ + return mCurrString; +} + +inline +void Fingering::setCurrString(int currString) +{ + mCurrString=currString; +} + +inline +int Fingering::getCurrFret(void)const +{ + return mCurrFret; +} + +inline +void Fingering::setCurrFret(int currFret) +{ + mCurrFret=currFret; +} +#endif diff --git a/guitar/backup/20030502/Fret.hpp b/guitar/backup/20030502/Fret.hpp new file mode 100644 index 0000000..e450ad5 --- /dev/null +++ b/guitar/backup/20030502/Fret.hpp @@ -0,0 +1,104 @@ +#ifndef _GUITAR_FRET_HPP_ +#define _GUITAR_FRET_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Fret; +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class Fret +{ +public: + typedef enum FretStatus{Active,Inactive,Hidden}; + Fret(void); + Fret(const Fret &fret); + Fret(const Note ¬e,const Rect &boundingRect); + virtual ~Fret(); + Fret &operator=(const Fret &fret); + const Note &getNote(void)const; + void setNote(const Note ¬e); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + FretStatus getStatus(void)const; + void setStatus(FretStatus status); +private: + Note mNote; + Rect mBoundingRect; + FretStatus mStatus; +}; + +inline +Fret::Fret(void) +: mStatus(Hidden) +{ +} + +inline +Fret::Fret(const Fret &fret) +{ + *this=fret; +} + +inline +Fret::Fret(const Note ¬e,const Rect &boundingRect) +: mNote(note), mBoundingRect(boundingRect) +{ +} + +inline +Fret::~Fret() +{ +} + +inline +Fret &Fret::operator=(const Fret &fret) +{ + setNote(fret.getNote()); + setBoundingRect(fret.getBoundingRect()); + return *this; +} + +inline +const Note &Fret::getNote(void)const +{ + return mNote; +} + +inline +void Fret::setNote(const Note ¬e) +{ + mNote=note; +} + +inline +const Rect &Fret::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void Fret::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +Fret::FretStatus Fret::getStatus(void)const +{ + return mStatus; +} + +inline +void Fret::setStatus(FretStatus status) +{ + mStatus=status; +} +#endif diff --git a/guitar/backup/20030502/FretDlg.cpp b/guitar/backup/20030502/FretDlg.cpp new file mode 100644 index 0000000..8eaf67f --- /dev/null +++ b/guitar/backup/20030502/FretDlg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +FretDialog::FretDialog(void) +: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1) +{ + mInitHandler.setCallback(this,&FretDialog::initHandler); + mCreateHandler.setCallback(this,&FretDialog::createHandler); + mCloseHandler.setCallback(this,&FretDialog::closeHandler); + mDestroyHandler.setCallback(this,&FretDialog::destroyHandler); + mCommandHandler.setCallback(this,&FretDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog::FretDialog(const FretDialog &someFretDialog) +{ // private implementation + *this=someFretDialog; +} + +FretDialog::~FretDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog &FretDialog::operator=(const FretDialog &someFretDialog) +{ // private implementation + return *this; +} + +bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + mSelectedString=selectedString; + mSelectedFret=-1; + return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData) +{ + initializeAction(); + initializeNoteTypes(); + setString(); + setFret(); + setNoteType((*mTabEntries)[mCurrEntryIndex]); + return (CallbackData::ReturnType)FALSE; +} + +void FretDialog::handleOk(void) +{ + String selectedFret; + String selectedAction; + String selectedDuration; + String selectedString; + bool found=false; + + getText(FRETENTRY_FRET,selectedFret); + getText(FRETENTRY_ACTION,selectedAction); + getText(FRETENTRY_DURATION,selectedDuration); + getText(FRETENTRY_STRING,selectedString); + if(!selectedString.isNull()) + { + int string=selectedString.toInt(); + if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string; + } + mSelectedFret=selectedFret.toInt(); + if(mSelectedFret<0||mSelectedFret>Fretboard::Frets) + { + mSelectedFret=-1; + return; + } + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + FrettedNote frettedNote; + frettedNote.setFret(mSelectedFret); + frettedNote.setAction(Action(selectedAction)); + if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret); + else if(!entry.setFrettedNote(mSelectedString,frettedNote)) + { + entry.addFrettedNote(mSelectedString,frettedNote); + } + entry.setNoteType(NoteType().fromString(selectedDuration)); + return; +} + +void FretDialog::setString() +{ + setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString)); +} + +void FretDialog::setFret() +{ + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + + for(int index=0;index actions=Action::enumerate(); + for(int index=0;index noteTypes=NoteType::enumerate(); + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class FretDialog : public DWindow +{ +public: + FretDialog(void); + virtual ~FretDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex); +private: + FretDialog(const FretDialog &someFretDialog); + FretDialog &operator=(const FretDialog &someFretDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void initializeAction(void); + void initializeNoteTypes(void); + void setFret(void); + void setString(void); + void setAction(const Action &action); + void setNoteType(const TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + int mSelectedString; + int mSelectedFret; +}; +#endif diff --git a/guitar/backup/20030502/FretViewWnd.cpp b/guitar/backup/20030502/FretViewWnd.cpp new file mode 100644 index 0000000..aa1dbb5 --- /dev/null +++ b/guitar/backup/20030502/FretViewWnd.cpp @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FretViewWindow::FretViewWindow(void) +{ + mCreateHandler.setCallback(this,&FretViewWindow::createHandler); + mSizeHandler.setCallback(this,&FretViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&FretViewWindow::paintHandler); + mHorizontalScrollHandler.setCallback(this,&FretViewWindow::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&FretViewWindow::verticalScrollHandler); + mLeftButtonDownHandler.setCallback(this,&FretViewWindow::leftButtonDownHandler); + mCloseHandler.setCallback(this,&FretViewWindow::closeHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +FretViewWindow::~FretViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +CallbackData::ReturnType FretViewWindow::closeHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType FretViewWindow::createHandler(CallbackData &someCallbackData) +{ + setTitle("Fretboard"); + mGUIFretboard=::new GUIFretboard(*this); + mGUIFretboard.disposition(PointerDisposition::Delete); + return FALSE; +} + +CallbackData::ReturnType FretViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType FretViewWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mGUIFretboard->draw(pureDevice); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::leftButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void FretViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String FretViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void FretViewWindow::setNote(const TabEntry &entry,bool clear,bool play) +{ + mGUIFretboard->setNote(entry,clear,play); +} + +void FretViewWindow::setNote(const Note ¬e,bool clear,bool play) +{ + mGUIFretboard->setNote(note,clear,play); +} + +void FretViewWindow::setNote(const Scale &scale,bool play) +{ + mGUIFretboard->setNote(scale,play); +} + +void FretViewWindow::setNote(const FrettedNotes &frettedNotes,bool play) +{ + mGUIFretboard->setNote(frettedNotes,play); +} + +void FretViewWindow::clearNotes(void) +{ + mGUIFretboard->clearNotes(); +} + +void FretViewWindow::showAllPositions(void) +{ + mGUIFretboard->showAllPositions(); +} + +void FretViewWindow::cut(void) +{ + mGUIFretboard->cut(); +} + +void FretViewWindow::copy(void) +{ + mGUIFretboard->copy(); +} + +void FretViewWindow::paste(void) +{ + mGUIFretboard->paste(); +} + +// *** virtuals + +void FretViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void FretViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|WS_CHILD|WS_CAPTION|WS_SIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_BORDER|WS_SYSMENU; +} + + diff --git a/guitar/backup/20030502/FretViewWnd.hpp b/guitar/backup/20030502/FretViewWnd.hpp new file mode 100644 index 0000000..714facd --- /dev/null +++ b/guitar/backup/20030502/FretViewWnd.hpp @@ -0,0 +1,56 @@ +#ifndef _GUITAR_FRETVIEWWINDOW_HPP_ +#define _GUITAR_FRETVIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#include +#endif + +class TabEntry; +class Scale; + +class FretViewWindow : public MDIWindow +{ +public: + enum{THPlay,THStop}; + FretViewWindow(void); + virtual ~FretViewWindow(); + String getTitle(void)const; + void cut(void); + void copy(void); + void paste(void); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void clearNotes(void); + void showAllPositions(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum{WindowWidth=355,WindowHeight=135,MaxWindowWidth=520}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDownHandler; + Callback mCloseHandler; + SmartPointer mGUIFretboard; +}; +#endif + diff --git a/guitar/backup/20030502/Fretboard.cpp b/guitar/backup/20030502/Fretboard.cpp new file mode 100644 index 0000000..5fbc421 --- /dev/null +++ b/guitar/backup/20030502/Fretboard.cpp @@ -0,0 +1,101 @@ +#include +#include + +bool Fretboard::isOnFretboard(const Note ¬e) +{ + for(int frIndex=0;frIndex &frettedNotes) +{ + frettedNotes.remove(); + for(int frIndex=0;frIndex&)*this).operator[](string); + strFretboard+=stringNotes.toString(); + if(string +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +// |-5- +// |-4- +// |-3- +// |-2- +// |-1- +// |-0- + +class MIDIOutputDevice; + +class Fretboard : public Array +{ +public: + enum{Frets=24,Strings=6}; + Fretboard(const Tuning &tuning=Tuning(),int frets=Frets); + virtual ~Fretboard(); + void createFretboard(const Tuning &tuning,int frets=Frets); + const Tuning &getTuning(); + void setTuning(const Tuning &tuning); + const Note &getAt(int string,int fret); + bool getAt(const Note ¬e,FrettedNote &frettedNote); + bool getAt(const Note ¬e,Block &frettedNotes); + int getFrets(void)const; + void setFrets(int frets); + bool isOnFretboard(const Note ¬e); + bool play(MIDIOutputDevice &device); + String toString(void)const; + static bool isValidFret(int fret); +private: + void createFretboard(); + Tuning mTuning; + int mFrets; +}; + +inline +Fretboard::Fretboard(const Tuning &tuning,int frets) +: mTuning(tuning),mFrets(frets) +{ + createFretboard(); +} + +inline +Fretboard::~Fretboard() +{ +} + +inline +const Tuning &Fretboard::getTuning() +{ + return mTuning; +} + +inline +void Fretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createFretboard(); +} + +inline +int Fretboard::getFrets(void)const +{ + return mFrets; +} + +inline +void Fretboard::setFrets(int frets) +{ + mFrets=frets; + createFretboard(); +} + +inline +const Note &Fretboard::getAt(int string,int fret) +{ + return (operator[](string)).operator[](fret); +} + +inline +bool Fretboard::isValidFret(int fret) +{ + if(fret<=Fretboard::Frets)return true; + return false; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030502/FrettedBoundingNote.hpp b/guitar/backup/20030502/FrettedBoundingNote.hpp new file mode 100644 index 0000000..d1019c7 --- /dev/null +++ b/guitar/backup/20030502/FrettedBoundingNote.hpp @@ -0,0 +1,88 @@ +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#define _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class FrettedBoundingNote : public FrettedNote +{ +public: + FrettedBoundingNote(); + virtual ~FrettedBoundingNote(); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + const Point &getDisplayPoint(void)const; + void setDisplayPoint(const Point &displayPoint); + const RGBColor &getBkGndColor(void)const; + void setBkGndColor(RGBColor &bkGndColor); + const RGBColor &getTextColor(void)const; + void setTextColor(const RGBColor &textColor); +private: + Rect mBoundingRect; + Point mDisplayPoint; + RGBColor mBkGndColor; + RGBColor mTextColor; +}; + +inline +FrettedBoundingNote::FrettedBoundingNote() +{ +} + +inline +FrettedBoundingNote::~FrettedBoundingNote() +{ +} + +inline +const Rect &FrettedBoundingNote::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void FrettedBoundingNote::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +const RGBColor &FrettedBoundingNote::getBkGndColor(void)const +{ + return mBkGndColor; +} + +inline +void FrettedBoundingNote::setBkGndColor(RGBColor &bkGndColor) +{ + mBkGndColor=bkGndColor; +} + +inline +const RGBColor &FrettedBoundingNote::getTextColor(void)const +{ + return mTextColor; +} + +inline +void FrettedBoundingNote::setTextColor(const RGBColor &textColor) +{ + mTextColor=textColor; +} + +inline +const Point &FrettedBoundingNote::getDisplayPoint(void)const +{ + return mDisplayPoint; +} + +inline +void FrettedBoundingNote::setDisplayPoint(const Point &displayPoint) +{ + mDisplayPoint=displayPoint; +} +#endif + diff --git a/guitar/backup/20030502/FrettedNote.hpp b/guitar/backup/20030502/FrettedNote.hpp new file mode 100644 index 0000000..2b87aeb --- /dev/null +++ b/guitar/backup/20030502/FrettedNote.hpp @@ -0,0 +1,158 @@ +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#define _GUITAR_FRETTEDNOTE_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class FrettedNote; + +typedef Array FrettedNotes; + +class FrettedNote : public Note +{ +public: + FrettedNote(); + FrettedNote(const FrettedNote &frettedNote); + FrettedNote(const Note ¬e,int string,int fret,const Action &action=Action(Action::Pick)); + virtual ~FrettedNote(); + FrettedNote &operator=(const FrettedNote &frettedNote); + bool operator==(const FrettedNote &frettedNote)const; + bool operator>(const FrettedNote &frettedNote)const; + bool operator<(const FrettedNote &frettedNote)const; + int getString(void)const; + void setString(int string); + int getFret(void)const; + void setFret(int fret); + void setNote(const Note ¬e); + const Note &getNote(void)const; + const Action &getAction(void)const; + void setAction(const Action &action); + String toString(void)const; +private: + int mString; + int mFret; + Action mAction; +}; + +inline +FrettedNote::FrettedNote(const FrettedNote &frettedNote) +{ + *this=frettedNote; +} + +inline +FrettedNote::FrettedNote() +: Note(Note::E,4), mString(0), mFret(0) +{ +} + +inline +FrettedNote::FrettedNote(const Note ¬e,int string,int fret,const Action &action) +: Note(note), mString(string), mFret(fret), mAction(action) +{ +} + +inline +FrettedNote::~FrettedNote() +{ +} + +inline +FrettedNote &FrettedNote::operator=(const FrettedNote &frettedNote) +{ + setString(frettedNote.getString()); + setFret(frettedNote.getFret()); + (Note&)*this=(Note&)frettedNote; + setAction(frettedNote.getAction()); + return *this; +} + +inline +bool FrettedNote::operator==(const FrettedNote &frettedNote)const +{ + if(getString()==frettedNote.getString()&&getFret()==frettedNote.getFret()) + return (Note&)*this==(Note&)frettedNote; + return false; +} + +inline +bool FrettedNote::operator>(const FrettedNote &frettedNote)const +{ + if(getString()>frettedNote.getString())return true; + if(getFret()>frettedNote.getFret())return true; + return (Note&)*this>(Note&)frettedNote; +} + +inline +bool FrettedNote::operator<(const FrettedNote &frettedNote)const +{ + if(getString() +#include + +bool FrettedNotes::play(MIDIOutputDevice &midiDevice) +{ + String strNotes; + if(!midiDevice.hasDevice())return false; + +// ::OutputDebugString(String(toString()+String("\n")).str()); + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RGBColor GUIFretboard::smColorBlack=RGBColor(0,0,0); +RGBColor GUIFretboard::smColorLtGreen=RGBColor(156,156,74); +RGBColor GUIFretboard::smColorWhite=RGBColor(255,255,255); +RGBColor GUIFretboard::smColorRed=RGBColor(231,33,33); +RGBColor GUIFretboard::smColorGreen=RGBColor(0,128,0); +RGBColor GUIFretboard::smColorBlue=RGBColor(0,0,255); + +/* Construct the GUIFretboard +* @param parent - The owning parent window +* @param tuning - The tuning for this fretboard +* @param frets - The number of frets on this fretboard +*/ +GUIFretboard::GUIFretboard(GUIWindow &parent,const Tuning &tuning,int frets) +: mTuning(tuning), mTextFont("Small Fonts",6), mShowNotes(false), + mPrevBrush(0), mPrevFont(0), mPrevBkMode(0), mPrevTextColor(0), mClearNotes(true), + mCurrFret(0), mCurrString(0), mRedBrush(smColorRed), mLtGreenBrush(smColorLtGreen), + mWhiteBrush(smColorWhite), mGreenBrush(smColorGreen), mBlueBrush(smColorBlue) +{ + Registry registry; + setShowNotes(registry.getShowNotes()); + mParent=SmartPointer(&parent); + mSizeHandler.setCallback(this,&GUIFretboard::sizeHandler); + mLeftButtonDownHandler.setCallback(this,&GUIFretboard::leftButtonDownHandler); + mKeyDownHandler.setCallback(this,&GUIFretboard::keyDownHandler); + mKeyUpHandler.setCallback(this,&GUIFretboard::keyUpHandler); + mSetFocusHandler.setCallback(this,&GUIFretboard::setFocusHandler); + mKillFocusHandler.setCallback(this,&GUIFretboard::killFocusHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + mParent.disposition(PointerDisposition::Assume); + mResBitmap=::new ResBitmap("FRETBOARD"); + mResBitmap.disposition(PointerDisposition::Delete); + parent.setWindowPos(mResBitmap->width()+RightBorder,mResBitmap->height()+BottomBorder); + createVirtualFretboard(); + mParent->invalidate(); + mParent->update(); +} + +/* +* Destructor +*/ +GUIFretboard::~GUIFretboard() +{ + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->removeHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +/* +* Draw the fretboard +* @param device - The device context on which to draw +*/ +void GUIFretboard::draw(PureDevice &device) +{ + mDIBitmap->usePalette(device,true); + mDIBitmap->bitBlt(device); + mDIBitmap->usePalette(device,false); + refreshNotes(); +} + +/* +* Repeat the selected notes at every location on the fretboard +* @param None +*/ +void GUIFretboard::showAllPositions(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + clearNotes(); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets the notes of the given scale on the fretboard +* @param scale - the scale from which notes will be set +* @param play - indicates whether the notes of the scale should be played +*/ +void GUIFretboard::setNote(const Scale &scale,bool play) +{ + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + + getSequencer(); + clearNotes(); + if(scale.has(Scale::I))degreeI=scale.getDegree(Scale::I); + if(scale.has(Scale::III))degreeIII=scale.getDegree(Scale::III); + if(scale.has(Scale::V))degreeV=scale.getDegree(Scale::V); + if(scale.has(Scale::VII))degreeVII=scale.getDegree(Scale::VII); + for(int index=0;indexgetDevice()); + ::Sleep(Notes::DefaultDelay); + scale.play(mSequencer->getDevice()); + } +} + +/* +* Sets a note on the fretboard +* @param note - the note to set +* @param clear - indicates whether fretboard should be cleared prior to note being set +* @param play - indicates whether the note should be played +*/ +void GUIFretboard::setNote(const Note ¬e,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + } + } + } + return; +} + +/* +* Sets a note(s) on the fretboard +* @param entry - the tabentry containing the note(s) +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard +* @param string - the string to set the note on +* @param fret - the fret to set the note on +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(int string,int fret,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + GuitarString &guitarString=operator[]((size()-1)-string); + FrettedBoundingNote &frettedBoundingNote=guitarString[fret]; + if(clear)clearNotes(); + frettedBoundingNote.setBkGndColor(smColorRed); + frettedBoundingNote.setTextColor(smColorWhite); + mActiveFrets.insert(frettedBoundingNote); + prepareDevice(device,true); + drawNote(frettedBoundingNote,device); + if(play)frettedBoundingNote.noteOn(mSequencer->getDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::setNote(const GDIPoint &clickPoint,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + return true; + } + } + } + return false; +} + +/* +* Redraws all of the currently active notes onto the fretboard bitmap +* @param None +*/ +void GUIFretboard::refreshNotes(void) +{ + Array frettedBoundingNotes; + + PureDevice device(*mParent); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index frettedBoundingNotes; + + entry.remove(); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index1)device.textOut(boundingRect.left(),boundingRect.top(),strNote); + else device.textOut(boundingRect.left()+1,boundingRect.top()+1,strNote); + } +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param prepare - indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + prepareDevice(device,smColorRed,smColorWhite,prepare); +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param brushColor - The color of the drawing brush +* @param textColor - The text color +* @param prepare - Indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)getBrush(brushColor)); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(textColor); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} + +/* +* Get the brush for the given color +* @param brushColor - The color of the brush we desire +* @return - A reference to the brush for the given color +*/ +Brush &GUIFretboard::getBrush(const RGBColor &brushColor) +{ + if(brushColor==mRedBrush.getColor())return mRedBrush; + else if(brushColor==mWhiteBrush.getColor())return mWhiteBrush; + else if(brushColor==mGreenBrush.getColor())return mGreenBrush; + else if(brushColor==mBlueBrush.getColor())return mBlueBrush; + return mLtGreenBrush; +} + +/* +* Clears all of the notes on the fretboard +* @param None +* @return None +*/ +void GUIFretboard::clearNotes(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;indexinvalidate(rect,false); + } + mActiveFrets.remove(); + mParent->update(); +} + +/* +* Initialize the fretboard and create it's underlying bitmap +* @param None +* @return None +*/ +void GUIFretboard::createVirtualFretboard(void) +{ + SmartPointer activeFret; + size(mTuning.size()); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + } + } + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + +/* +* Get the rectangle that bounds the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The bounding rectangle +*/ +Rect GUIFretboard::getBoundingRect(int string,int fret)const +{ + Rect boundingRect; + Point point(getPoint(string,fret)); + boundingRect.left(point.x()-Radius); + boundingRect.top(point.y()-Radius); + boundingRect.right(point.x()+Radius); + boundingRect.bottom(point.y()+Radius); + return boundingRect; +} + +/* +* Get the point for the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The point +*/ +Point GUIFretboard::getPoint(int string,int fret)const +{ + Point point; + int starty=15; + int incy=10; + + switch(fret) + { + case 0 : + point.x(10); + break; + case 1 : + point.x(23); + break; + case 2 : + point.x(55); + break; + case 3 : + point.x(83); + break; + case 4 : + point.x(111); + break; + case 5 : + point.x(138); + break; + case 6 : + point.x(164); + break; + case 7 : + point.x(193); + break; + case 8 : + point.x(220); + break; + case 9 : + point.x(249); + break; + case 10 : + point.x(280); + break; + case 11 : + point.x(307); + break; + case 12 : + point.x(335); + break; + case 13 : + point.x(362); + break; + case 14 : + point.x(392); + break; + case 15 : + point.x(420); + break; + case 16 : + point.x(446); + break; + case 17 : + point.x(473); + break; + case 18 : + point.x(501); + break; + case 19 : + point.x(528); + break; + case 20 : + point.x(558); + break; + case 21 : + point.x(585); + break; + case 22 : + point.x(611); + break; + case 23 : + point.x(640); + break; + case 24 : + point.x(668); + break; + } + point.y(starty+((string)*incy)); + return point; +} + +/* +* Cut the notes from the fretboard +* @param None +* @return None +*/ +void GUIFretboard::cut(void) +{ + copy(); // copy the fretboard notes to the clipboard first + clearNotes(); +} + +/* +* Copy all selected notes to the clipboard +* @param None +* @return None +*/ +void GUIFretboard::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + getNotes(entry); + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); +} + +/* +* Paste notes from clipboard +* @param None +* @return None +*/ +void GUIFretboard::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return; + entry.fromString(strText.betweenString(']',0)); + setNote(entry,true,true); +} + +// callbacks + +/* +* Handles resizing of the fretboard window +* @param callbackData - Contains information about the resize event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::sizeHandler(CallbackData &callbackData) +{ + GlobalDefs::outDebug("[GUIFretboard::sizeHandler]"); + Point sizePoint(callbackData.loWord(),callbackData.hiWord()); + if(sizePoint.x()>mResBitmap->width()+RightBorder|| + sizePoint.y()>mResBitmap->height()+BottomBorder) + mParent->setWindowPos(mResBitmap->width()+10,mResBitmap->height()+30); + return false; +} + +/* +* Handles left button down event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::leftButtonDownHandler(CallbackData &callbackData) +{ + GDIPoint clickPoint(callbackData.loWord(),callbackData.hiWord()); + setNote(clickPoint,mClearNotes,true); + return false; +} + +/* +* Handles keyboard event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyDownHandler(CallbackData &callbackData) +{ + if(KeyData::controlKeyPressed())mClearNotes=false; + else mClearNotes=true; + KeyData keyData(callbackData); + switch(keyData.virtualKey()) + { + case KeyDown : + if(KeyData::shiftKeyPressed())mCurrString-=2; + else mCurrString--; + if(mCurrString<0)mCurrString=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyLeft : + if(KeyData::shiftKeyPressed())mCurrFret-=2; + else mCurrFret--; + if(mCurrFret<0)mCurrFret=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyRight : + if(KeyData::shiftKeyPressed())mCurrFret+=2; + else mCurrFret++; + if(mCurrFret>DefaultFrets)mCurrFret=DefaultFrets; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyUp : + if(KeyData::shiftKeyPressed())mCurrString+=2; + else mCurrString++; + if(mCurrString>=DefaultStrings)mCurrString=DefaultStrings-1; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + } + return false; +} + +/* +* Handles key up event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyUpHandler(CallbackData &callbackData) +{ + KeyData keyData(callbackData); + if(CtrlKey==keyData.virtualKey())mClearNotes=true; + return false; +} + +/* +* Handles focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::setFocusHandler(CallbackData &callbackData) +{ + getSequencer(); + return false; +} + +/* +* Handles kill focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::killFocusHandler(CallbackData &callbackData) +{ + mSequencer.destroy(); + return false; +} + diff --git a/guitar/backup/20030502/GUIFretboard.hpp b/guitar/backup/20030502/GUIFretboard.hpp new file mode 100644 index 0000000..0bad42d --- /dev/null +++ b/guitar/backup/20030502/GUIFretboard.hpp @@ -0,0 +1,169 @@ +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#define _GUITAR_GUIFRETBOARD_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TUNING_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class GUIWindow; +class TabEntry; +class ResBitmap; +class Scale; + +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class GUIFretboard : public VirtualFretboard +{ +public: + enum{DefaultFrets=24,DefaultStrings=6}; + GUIFretboard(GUIWindow &parent,const Tuning &tuning=Tuning(),int frets=DefaultFrets); + virtual ~GUIFretboard(); + const Tuning &getTuning(void)const; + void setTuning(const Tuning &tuning); + int getFrets(void)const; + void draw(PureDevice &device); + void setNote(int string,int fret,bool clear=true,bool play=false); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void setShowNotes(bool showNotes); + bool getShowNotes(void)const; + void showAllPositions(void); + void cut(void); + void copy(void); + void paste(void); +private: + enum{RightBorder=10,BottomBorder=30,Radius=5,ClickTolerance=1}; + enum{KeyDown=0x28,KeyLeft=0x25,KeyRight=0x27,KeyUp=0x26,CtrlKey=0x11}; + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &callbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &callbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &callbackData); + + void createVirtualFretboard(void); + void refreshNotes(void); + void getSequencer(void); + Point getPoint(int string,int fret)const; + Rect getBoundingRect(int string,int fret)const; + void prepareDevice(PureDevice &device,bool prepare); + void prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor=RGBColor(255,255,255),bool prepare=true); + void drawNote(FrettedBoundingNote &currFret,PureDevice &device); + bool setNote(const GDIPoint &clickPoint,bool clear=true,bool play=false); + Brush &getBrush(const RGBColor &brushColor); + + Tuning mTuning; + SmartPointer mDIBitmap; + SmartPointer mResBitmap; + SmartPointer mParent; + SmartPointer mSequencer; + + Callback mSizeHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mKeyUpHandler; + Callback mSetFocusHandler; + Callback mKillFocusHandler; + BTree mActiveFrets; + + bool mShowNotes; + bool mClearNotes; + int mCurrFret; + int mCurrString; + + Brush mGreenBrush; + Brush mRedBrush; + Brush mWhiteBrush; + Brush mLtGreenBrush; + Brush mBlueBrush; + Font mTextFont; + + HGDIOBJ mPrevBrush; + HGDIOBJ mPrevFont; + int mPrevBkMode; + RGBColor mPrevTextColor; + + static RGBColor smColorBlack; + static RGBColor smColorLtGreen; + static RGBColor smColorWhite; + static RGBColor smColorRed; + static RGBColor smColorGreen; + static RGBColor smColorBlue; +}; + +inline +const Tuning &GUIFretboard::getTuning(void)const +{ + return mTuning; +} + +inline +void GUIFretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createVirtualFretboard(); +} + +inline +int GUIFretboard::getFrets(void)const +{ + return DefaultFrets; +} + +inline +void GUIFretboard::setShowNotes(bool showNotes) +{ + mShowNotes=showNotes; +} + +inline +bool GUIFretboard::getShowNotes(void)const +{ + return mShowNotes; +} + +inline +void GUIFretboard::getSequencer(void) +{ + if(mSequencer.isOkay())return; + mSequencer=::new Sequencer(); + mSequencer.disposition(PointerDisposition::Delete); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030502/GlobalDefs.cpp b/guitar/backup/20030502/GlobalDefs.cpp new file mode 100644 index 0000000..24438ac --- /dev/null +++ b/guitar/backup/20030502/GlobalDefs.cpp @@ -0,0 +1,6 @@ +#include + +UINT GlobalDefs::mRegisteredClipboardFormat=0; +GlobalDefs::LogLevel GlobalDefs::mLogLevel=GlobalDefs::Debug; +File GlobalDefs::mLogFile; + diff --git a/guitar/backup/20030502/GlobalDefs.hpp b/guitar/backup/20030502/GlobalDefs.hpp new file mode 100644 index 0000000..8fb3780 --- /dev/null +++ b/guitar/backup/20030502/GlobalDefs.hpp @@ -0,0 +1,100 @@ +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#define _GUITAR_GLOBALDEFS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class GlobalDefs +{ +public: + typedef enum LogLevel{NoLog,Verbose,Info,Debug}; + enum{MicrosecondsPerQuarterNote=651578,Program=JazzGuitarElectric,ShowAction=1,ShowNotes=1}; + static void outDebug(const String &strDebug,LogLevel level=Debug); + static LogLevel getLogLevel(void); + static void setLogLevel(LogLevel logLevel); + static bool setLogFile(const String &pathLogFile); + static UINT getRegisteredClipboardFormat(void); + static void setRegisteredClipboardFormat(UINT registeredClipboardFormat); + static String translateLevel(LogLevel logLevel); +private: + GlobalDefs(); + virtual ~GlobalDefs(); + static UINT mRegisteredClipboardFormat; + static LogLevel mLogLevel; + static File mLogFile; +}; + +inline +GlobalDefs::GlobalDefs() +{ +} + +inline +GlobalDefs::~GlobalDefs() +{ +} + +inline +UINT GlobalDefs::getRegisteredClipboardFormat(void) +{ + return mRegisteredClipboardFormat; +} + +inline +void GlobalDefs::setRegisteredClipboardFormat(UINT registeredClipboardFormat) +{ + mRegisteredClipboardFormat=registeredClipboardFormat; +} + +inline +GlobalDefs::LogLevel GlobalDefs::getLogLevel(void) +{ + return mLogLevel; +} + +inline +void GlobalDefs::setLogLevel(LogLevel logLevel) +{ + mLogLevel=logLevel; +} + +inline +void GlobalDefs::outDebug(const String &strDebug,LogLevel logLevel) +{ + if(NoLog==getLogLevel())return; + if(mLogFile.isOkay()&&logLevel>=mLogLevel) + { + mLogFile.writeLine(translateLevel(logLevel)+strDebug); + mLogFile.flush(); + } + else if(logLevel>=mLogLevel)::OutputDebugString(String(translateLevel(logLevel)+strDebug+String("\n")).str()); +} + +inline +bool GlobalDefs::setLogFile(const String &pathLogFile) +{ + return mLogFile.open(pathLogFile,"wb"); +} + +inline +String GlobalDefs::translateLevel(LogLevel logLevel) +{ + SystemTime systemTime; + if(NoLog==logLevel)return String("[Log.None][")+systemTime.toString()+String("]"); + else if(Verbose==logLevel)return String("[Log.Verbose][")+systemTime.toString()+String("]"); + else if(Debug==logLevel)return String("[Log.Debug][")+systemTime.toString()+String("]"); + else return String("[Log.Info]]")+systemTime.toString()+String("]"); +} +#endif diff --git a/guitar/backup/20030502/GuitarString.hpp b/guitar/backup/20030502/GuitarString.hpp new file mode 100644 index 0000000..06f0d1c --- /dev/null +++ b/guitar/backup/20030502/GuitarString.hpp @@ -0,0 +1,29 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/guitar/backup/20030502/Instrument.hpp b/guitar/backup/20030502/Instrument.hpp new file mode 100644 index 0000000..8e5a147 --- /dev/null +++ b/guitar/backup/20030502/Instrument.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_INSTRUMENT_HPP_ +#define _GUITAR_INSTRUMENT_HPP_ + +typedef enum Instrument{AcousticGrandPiano=0,BrightAcousticPiano=1,ElectricGrandPiano=2,AcousticGuitarNylon=24, + AcousticGuitarSteel=25,JazzGuitarElectric=26,CleanGuitarElectric=27,MutedGuitarElectric=28}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030502/IntegerPair.hpp b/guitar/backup/20030502/IntegerPair.hpp new file mode 100644 index 0000000..fc5959f --- /dev/null +++ b/guitar/backup/20030502/IntegerPair.hpp @@ -0,0 +1,21 @@ +#ifndef _GUITAR_INTEGERPAIR_HPP_ +#define _GUITAR_INTEGERPAIR_HPP_ + +class IntegerPair +{ +public: + IntegerPair(); + IntegerPair(const IntegerPair &integerPair); + virtual IntegerPair(); + IntegerPair &operator=(const IntegerPair &integerPair); + bool operator<(const IntegerPair &integerPair); + bool operator>(const IntegerPair &integerPair); + bool operator==(const IntegerPair &integerPair); + int getValue(void)const; + void setValue(int value); + int getComparator +private: + int mValue; + int mComparator; +}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030502/License.hpp b/guitar/backup/20030502/License.hpp new file mode 100644 index 0000000..e83be51 --- /dev/null +++ b/guitar/backup/20030502/License.hpp @@ -0,0 +1,148 @@ +#ifndef _GUITAR_LICENSE_HPP_ +#define _GUITAR_LICENSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif + +class License +{ +public: + typedef enum LicenseType{Expires=01,Permanent=02}; + typedef enum Feature{MIDIFeature}; + License(void); + License(const License &license); + License(const String &strLicenseKey); // this should be a uuencoded, xor'd string + License(Block &strLicenseKeyLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + License &operator=(const License &license); + static String generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount); // produces a uuencoded, xor'd string + bool fromString(const String &string); // this should be a uuencoded, xor'd string + bool fromLines(Block &strLicenseLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + bool isValid(void)const; + bool isExpiring(void)const; + bool allowFeature(Feature feature)const; + int getRemainingDays(void)const; + int getDayCount(void)const; + int getDay(void)const; + const String &getUUEncodedLicense(void)const; +private: + enum {XORMagic=72}; + static int calculateChecksum(const String &string); + static String xor(const String &strLicense); + static String numericEncode(const String &strLicense); + static String numericDecode(const String &strLicense); + + String mProductVersion; + String mUUEncodedLicense; + SystemTime mIssueDate; + LicenseType mLicenseType; + int mDayCount; + bool mIsValid; + static const String smBeginLicense; + static const String smEndLicense; +}; + +inline +License::License(void) +: mIsValid(false) +{ +} + +inline +License::License(const License &license) +{ + *this=license; +} + +inline +License::License(const String &strLicenseKey) +: mIsValid(false) +{ + fromString(strLicenseKey); +} + +inline +License::License(Block &strLicenseLines) +: mIsValid(false) +{ + fromLines(strLicenseLines); +} + +inline +License &License::operator=(const License &license) +{ + mProductVersion=license.mProductVersion; + mIssueDate=license.mIssueDate; + mLicenseType=license.mLicenseType; + mDayCount=license.mDayCount; + mIsValid=license.mIsValid; + return *this; +} + +inline +bool License::isValid(void)const +{ + return mIsValid; +} + +inline +bool License::isExpiring(void)const +{ + return Expires==mLicenseType; +} + +inline +int License::getRemainingDays(void)const +{ + if(!isExpiring())return -1; + SDate issueDate; + SDate expireDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + expireDate=issueDate; + expireDate=expireDate.daysAdd360(mDayCount); + return currDate.daysBetween360(expireDate); +} + +inline +int License::getDay(void)const +{ + SDate issueDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + return issueDate.daysBetween360(currDate)+1; +} + +inline +int License::getDayCount(void)const +{ + return mDayCount; +} + +inline +bool License::allowFeature(Feature feature)const +{ + if(isExpiring())return false; + return true; +} + +inline +const String &License::getUUEncodedLicense(void)const +{ + return mUUEncodedLicense; +} +#endif diff --git a/guitar/backup/20030502/LicenseDialog.cpp b/guitar/backup/20030502/LicenseDialog.cpp new file mode 100644 index 0000000..011549d --- /dev/null +++ b/guitar/backup/20030502/LicenseDialog.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +LicenseDialog::LicenseDialog(void) +{ + mInitHandler.setCallback(this,&LicenseDialog::initHandler); + mCreateHandler.setCallback(this,&LicenseDialog::createHandler); + mCloseHandler.setCallback(this,&LicenseDialog::closeHandler); + mDestroyHandler.setCallback(this,&LicenseDialog::destroyHandler); + mCommandHandler.setCallback(this,&LicenseDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog::LicenseDialog(const LicenseDialog &someLicenseDialog) +{ // private implementation + *this=someLicenseDialog; +} + +LicenseDialog::~LicenseDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog &LicenseDialog::operator=(const LicenseDialog &someLicenseDialog) +{ // private implementation + return *this; +} + +bool LicenseDialog::perform(GUIWindow &parentWindow,bool cancelTerminates) +{ + bool returnCode; + mCancelTerminates=cancelTerminates; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"LICENSEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType LicenseDialog::initHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType LicenseDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::commandHandler(CallbackData &someCallbackData) +{ + LRESULT result; + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(!validateLicense()) + { + MessageBox::messageBox("Error","The license you entered was invalid, please try again"); + setText(LICENSE_DIALOG_LICENSE,String()); + setFocus(LICENSE_DIALOG_LICENSE); + } + else endDialog(true); + break; + case IDCANCEL : + if(mCancelTerminates) + { + result=MessageBox::messageBox(*this,"Warning","Cancelling now will terminate the application.",MB_OKCANCEL); + if(IDOK==result)endDialog(false); + } + else endDialog(false); + break; + case LICENSE_DIALOG_REQUEST_LICENSE : + handleLicenseRequest(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +bool LicenseDialog::validateLicense(void)const +{ + License license; + String strLicense; + Block strLicenseLines; + + strLicense=getText(LICENSE_DIALOG_LICENSE); + if(strLicense.isNull())return false; + makeLicenseLines(strLicense,strLicenseLines); + license.fromLines(strLicenseLines); + if(!license.isValid()||license.isExpiring())return false; + if(!Registration::getInstance().applyLicense(strLicenseLines))return false; + return true; +} + +void LicenseDialog::handleLicenseRequest(void)const +{ + BrowserHelper::launchBrowser(String(STRING_HOST)); +} + +void LicenseDialog::makeLicenseLines(String strLicense,Block &strLicenseLines)const +{ + strLicenseLines.remove(); + if(strLicense.isNull())return; + strLicense.removeTokens("\r"); + strLicenseLines.insert(&String(strLicense.betweenString(0,'\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\0').betweenString('\n','\n\0'))); +} diff --git a/guitar/backup/20030502/LicenseDialog.hpp b/guitar/backup/20030502/LicenseDialog.hpp new file mode 100644 index 0000000..87535df --- /dev/null +++ b/guitar/backup/20030502/LicenseDialog.hpp @@ -0,0 +1,32 @@ +#ifndef _GUITAR_LICENSEDIALOG_HPP_ +#define _GUITAR_LICENSEDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif + +class LicenseDialog : public DWindow +{ +public: + LicenseDialog(void); + virtual ~LicenseDialog(); + bool perform(GUIWindow &parentWindow,bool cancelTerminates=true); +private: + LicenseDialog(const LicenseDialog &someLicenseDialog); + LicenseDialog &operator=(const LicenseDialog &someLicenseDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool validateLicense(void)const; + void handleLicenseRequest(void)const; + void makeLicenseLines(String strLicense,Block &strLicenseLines)const; + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + bool mCancelTerminates; +}; +#endif diff --git a/guitar/backup/20030502/LineParser.cpp b/guitar/backup/20030502/LineParser.cpp new file mode 100644 index 0000000..5d387ae --- /dev/null +++ b/guitar/backup/20030502/LineParser.cpp @@ -0,0 +1,127 @@ +#include + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + +void LineParser::putElement(const Element &element) +{ + String strItem=Action(element.getAction()).toStringShort()+String().fromInt(element.getFret()); + *this+=strItem; + mPosition+=strItem.length(); + return; +} + +void LineParser::putElement(char ch) +{ + *this+=ch; + mPosition++; + return; +} + +int LineParser::peekElement(Element &element) +{ + int position=mPosition; + int result=getElement(element); + mPosition=position; + return result; +} diff --git a/guitar/backup/20030502/LineParser.hpp b/guitar/backup/20030502/LineParser.hpp new file mode 100644 index 0000000..2bdd01b --- /dev/null +++ b/guitar/backup/20030502/LineParser.hpp @@ -0,0 +1,101 @@ +#ifndef _GUITAR_LINEPARSER_HPP_ +#define _GUITAR_LINEPARSER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_ELEMENT_HPP_ +#include +#endif + +class LineParser : private String +{ +public: + LineParser(); + LineParser(const String &string); + virtual ~LineParser(); + LineParser &operator=(const String &string); + LineParser &operator++(); + LineParser &operator++(int /*postfixdummy*/); + void reset(void); + int getElement(Element &element); + void putElement(const Element &element); + void putElement(char ch); + int length(void)const; + int getPosition(void)const; + bool serialize(File &outFile)const; +private: + int peekElement(Element &element); + + int mPosition; + int mLength; +}; + +inline +LineParser::LineParser() +: mPosition(0), mLength(0) +{ +} + +inline +LineParser::LineParser(const String &string) +: String(string), mPosition(0), mLength(String::length()) +{ +} + +inline +LineParser::~LineParser() +{ +} + +inline +LineParser &LineParser::operator=(const String &string) +{ + (String&)*this=string; + mPosition=0; + mLength=String::length(); + return *this; +} + +inline +LineParser &LineParser::operator++() +{ + mPosition++; + return *this; +} + +inline +LineParser &LineParser::operator++(int /*postfixdummy*/) +{ + mPosition++; + return *this; +} + +inline +void LineParser::reset(void) +{ + mPosition=0; +} + +inline +int LineParser::length(void)const +{ + return mLength; +} + +inline +int LineParser::getPosition(void)const +{ + return mPosition; +} + +inline +bool LineParser::serialize(File &outFile)const +{ + if(!outFile.isOkay())return false; + outFile.writeLine(*this); + return true; +} +#endif diff --git a/guitar/backup/20030502/MIDIDialog.cpp b/guitar/backup/20030502/MIDIDialog.cpp new file mode 100644 index 0000000..db0a41d --- /dev/null +++ b/guitar/backup/20030502/MIDIDialog.cpp @@ -0,0 +1,136 @@ +#include +#include +#include + +MIDIDialog::MIDIDialog(void) +{ + mInitHandler.setCallback(this,&MIDIDialog::initHandler); + mCreateHandler.setCallback(this,&MIDIDialog::createHandler); + mCloseHandler.setCallback(this,&MIDIDialog::closeHandler); + mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler); + mCommandHandler.setCallback(this,&MIDIDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog) +{ // private implementation + *this=someMIDIDialog; +} + +MIDIDialog::~MIDIDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog) +{ // private implementation + return *this; +} + +bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack) +{ + bool returnCode; + mPathMIDIFileName=strPathMIDIFileName; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + if(returnCode)selectedTrack=mSelectedTrack; + return returnCode; +} + +CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData) +{ + MIDIHelper midiHelper; + TrackInfos trackInfos; + midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos); + setTrackInformation(trackInfos); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + mSelectedTrack=getSelectedTrack(); + if(-1==mSelectedTrack)endDialog(false); + else endDialog(true); + break; + } + if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MIDIDialog::setTrackInformation(TrackInfos &trackInfos) +{ + bool isFirst=true; + for(int index=0;index=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return; + mSelectedTrack=clickedId-MIDI_TRACK1; + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L); + } +} + +int MIDIDialog::getSelectedTrack(void)const +{ + int selectedTrack=-1; + + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(1==sendMessage(btnId,BM_GETCHECK,0,0L)) + { + selectedTrack=btnId-MIDI_TRACK1; + break; + } + } + return selectedTrack; +} + + + + + diff --git a/guitar/backup/20030502/MIDIDialog.hpp b/guitar/backup/20030502/MIDIDialog.hpp new file mode 100644 index 0000000..01781b3 --- /dev/null +++ b/guitar/backup/20030502/MIDIDialog.hpp @@ -0,0 +1,39 @@ +#ifndef _GUITAR_MIDIDIALOG_HPP_ +#define _GUITAR_MIDIDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIDialog : public DWindow +{ +public: + MIDIDialog(void); + virtual ~MIDIDialog(); + bool perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack); +private: + MIDIDialog(const MIDIDialog &someMIDIDialog); + MIDIDialog &operator=(const MIDIDialog &someMIDIDialog); + void handleClick(const CallbackData &someCallbackData); + int getSelectedTrack(void)const; + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTrackInformation(TrackInfos &trackInfos); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + String mPathMIDIFileName; + int mSelectedTrack; +}; +#endif diff --git a/guitar/backup/20030502/MIDIHelper.cpp b/guitar/backup/20030502/MIDIHelper.cpp new file mode 100644 index 0000000..06c36b9 --- /dev/null +++ b/guitar/backup/20030502/MIDIHelper.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include +#include +#include + +bool MIDIHelper::getTrackInfo(const String &strPathMIDIFileName,TrackInfos &trackInfos) +{ + MidiData midiData(strPathMIDIFileName); + midiData.getTrackInfo(trackInfos); + return trackInfos.size()?true:false; +} + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack) +{ + TabEntry entry; + Tablature tablature; + TabEntries tabEntries; + + WORD currPlayTime; + WORD prevPlayTime; + int eventCount; + bool resultCode; + bool haveTrack; + Block notes; + TrackInfos trackInfos; + + resultCode=false; + haveTrack=false; + if(strPathMidiFileName.isNull())return resultCode; + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + + for(int trIndex=0;trIndex &strPathTabFileNames) +{ + String strPathTabFileName; + WORD currPlayTime; + WORD prevPlayTime; + int currentTrack; + int eventCount; + Block tracks; + Block notes; + TrackInfos trackInfos; + + if(strPathMidiFileName.isNull())return false; + strPathTabFileNames.remove(); + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + if(!tracks.size())return false; + for(int trIndex=0;trIndex ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + notePaths.size(notes.size()); + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + MIDIHelper(); + virtual ~MIDIHelper(); +// bool import(const String &strPathMidiFileName,const String &strPathTabFileName); + bool import(const String &strPathMidiFileName,Block &strPathTabFileNames); + bool import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack); + bool getTrackInfo(const String &strpathMIDIFileName,TrackInfos &trackInfos); +private: + bool createEntry(Block ¬es,TabEntry &entry); + bool filterNotesOnFretboard(Block ¬es); + + Fretboard mFretboard; + Block mMessages; +}; + +inline +MIDIHelper::MIDIHelper() +{ +} + +inline +MIDIHelper::~MIDIHelper() +{ +} +#endif diff --git a/guitar/backup/20030502/MessageBox.hpp b/guitar/backup/20030502/MessageBox.hpp new file mode 100644 index 0000000..53be76b --- /dev/null +++ b/guitar/backup/20030502/MessageBox.hpp @@ -0,0 +1,47 @@ +#ifndef _GUITAR_MESSAGE_HPP_ +#define _GUITAR_MESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif + +class MessageBox +{ +public: + static LRESULT messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type=MB_OK); + static LRESULT messageBox(const String &strCaption,const String &strText,UINT type=MB_OK); +private: + MessageBox(); + static String getProductVersion(const VersionInfo &versionInfo); +}; + +inline +MessageBox::MessageBox() +{ +} + +inline +LRESULT MessageBox::messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(parent,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +LRESULT MessageBox::messageBox(const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(0,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +String MessageBox::getProductVersion(const VersionInfo &versionInfo) +{ + return String("[")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("]"); +} +#endif diff --git a/guitar/backup/20030502/NoteType.cpp b/guitar/backup/20030502/NoteType.cpp new file mode 100644 index 0000000..2877fe9 --- /dev/null +++ b/guitar/backup/20030502/NoteType.cpp @@ -0,0 +1,80 @@ +#include + +const NoteType &NoteType::operator++(void) +{ + if(WholeNote==mNoteType)mNoteType=HalfNote; + else if(HalfNote==mNoteType)mNoteType=QuarterNote; + else if(QuarterNote==mNoteType)mNoteType=EighthNote; + else if(EighthNote==mNoteType)mNoteType=SixteenthNote; + else if(SixteenthNote==mNoteType)mNoteType=ThirtySecondNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixtyFourthNote; + else mNoteType++; + return *this; +} + +const NoteType &NoteType::operator--(void) +{ + if(HalfNote==mNoteType)mNoteType=WholeNote; + else if(QuarterNote==mNoteType)mNoteType=HalfNote; + else if(EighthNote==mNoteType)mNoteType=QuarterNote; + else if(SixteenthNote==mNoteType)mNoteType=EighthNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixteenthNote; + else if(SixtyFourthNote==mNoteType)mNoteType=ThirtySecondNote; + else mNoteType--; + return *this; +} + +NoteType &NoteType::fromString(const String &stringRep) +{ + if(stringRep.equals(toString(WholeNote)))mNoteType=WholeNote; + else if(stringRep.equals(toString(HalfNote)))mNoteType=HalfNote; + else if(stringRep.equals(toString(QuarterNote)))mNoteType=QuarterNote; + else if(stringRep.equals(toString(EighthNote)))mNoteType=EighthNote; + else if(stringRep.equals(toString(SixteenthNote)))mNoteType=SixteenthNote; + else if(stringRep.equals(toString(ThirtySecondNote)))mNoteType=ThirtySecondNote; + else if(stringRep.equals(toString(SixtyFourthNote)))mNoteType=SixtyFourthNote; + else mNoteType=stringRep.betweenString('/',0).toInt(); + return *this; +} + +Array NoteType::enumerate(void) +{ + Array values; + values.size(7); + values[0]=NoteType::toString(WholeNote); + values[1]=NoteType::toString(HalfNote); + values[2]=NoteType::toString(QuarterNote); + values[3]=NoteType::toString(EighthNote); + values[4]=NoteType::toString(SixteenthNote); + values[5]=NoteType::toString(ThirtySecondNote); + values[6]=NoteType::toString(SixtyFourthNote); + return values; +} + +String NoteType::toString(void)const +{ + return toString(getNoteType()); +} + +String NoteType::toString(TypeNote noteType) +{ + switch(noteType) + { + case WholeNote : + return "1/1"; + case HalfNote : + return "1/2"; + case QuarterNote : + return "1/4"; + case EighthNote : + return "1/8"; + case SixteenthNote : + return "1/16"; + case ThirtySecondNote : + return "1/32"; + case SixtyFourthNote : + return "1/64"; + default : + return "1/"+String().fromInt((int)noteType); + } +} diff --git a/guitar/backup/20030502/NoteType.hpp b/guitar/backup/20030502/NoteType.hpp new file mode 100644 index 0000000..f9c0567 --- /dev/null +++ b/guitar/backup/20030502/NoteType.hpp @@ -0,0 +1,86 @@ +#ifndef _GUITAR_NOTETYPE_HPP_ +#define _GUITAR_NOTETYPE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class NoteType +{ +public: + enum TypeNote{WholeNote=1,HalfNote=2,QuarterNote=4,EighthNote=8, + SixteenthNote=16,ThirtySecondNote=32,SixtyFourthNote=64}; + NoteType(TypeNote noteType=QuarterNote); + virtual ~NoteType(); + const NoteType &operator++(void); + NoteType operator++(int postfix); + const NoteType &operator--(void); + NoteType operator--(int postfix); + TypeNote getNoteType(void)const; + int toInt(void)const; + NoteType &fromInt(int noteType); + NoteType &fromString(const String &stringRep); + void setNoteType(TypeNote noteType); + String toString(void)const; + static Array enumerate(void); + static String toString(TypeNote noteType); +private: + int mNoteType; +}; + +inline +NoteType::NoteType(TypeNote noteType) +: mNoteType(noteType) +{ +} + +inline +NoteType::~NoteType() +{ +} + +inline +NoteType NoteType::operator++(int postfix) +{ + NoteType noteType(*this); + operator++(); + return noteType; +} + +inline +NoteType NoteType::operator--(int postfix) +{ + NoteType noteType(*this); + operator--(); + return noteType; +} + +inline +int NoteType::toInt(void)const +{ + return (int)mNoteType; +} + +inline +NoteType &NoteType::fromInt(int noteType) +{ + mNoteType=(TypeNote)noteType; + return *this; +} + +inline +NoteType::TypeNote NoteType::getNoteType(void)const +{ + return (TypeNote)mNoteType; +} + +inline +void NoteType::setNoteType(TypeNote noteType) +{ + mNoteType=noteType; +} +#endif + + diff --git a/guitar/backup/20030502/Range.hpp b/guitar/backup/20030502/Range.hpp new file mode 100644 index 0000000..a848e22 --- /dev/null +++ b/guitar/backup/20030502/Range.hpp @@ -0,0 +1,119 @@ +#ifndef _GUITAR_RANGE_HPP_ +#define _GUITAR_RANGE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Range; +typedef Block TabRanges; + +class Range +{ +public: + Range(); + virtual ~Range(); + int getBeginRange(void)const; + void setBeginRange(int beginRange); + int getEndRange(void)const; + void setEndRange(int endRange); + const String &getRangeName(void)const; + void setRangeName(const String &rangeName); + void autoName(void); + String toString(void)const; + String toTabbedString(void)const; +private: + enum{ShortNameLength=20}; + String createRangeName(void)const; + + int mBeginRange; + int mEndRange; + String mRangeName; +}; + +inline +Range::Range() +: mBeginRange(0), mEndRange(0) +{ +} + +inline +Range::~Range() +{ +} + +inline +int Range::getBeginRange(void)const +{ + return mBeginRange; +} + +inline +void Range::setBeginRange(int beginRange) +{ + mBeginRange=beginRange; +} + +inline +int Range::getEndRange(void)const +{ + return mEndRange; +} + +inline +void Range::setEndRange(int endRange) +{ + mEndRange=endRange; +} + +inline +const String &Range::getRangeName(void)const +{ + return mRangeName; +} + +inline +void Range::setRangeName(const String &rangeName) +{ + mRangeName=rangeName; +} + +inline +void Range::autoName(void) +{ + setRangeName(createRangeName()); +} + +inline +String Range::createRangeName(void)const +{ + String strRangeName("RANGE_"); + strRangeName+=String().fromInt(getBeginRange()); + strRangeName+=String("_"); + strRangeName+=String().fromInt(getEndRange()); + return strRangeName; +} + +inline +String Range::toString(void)const +{ + String strString(getRangeName()); + strString+=String("[")+String().fromInt(getBeginRange())+String("->")+String().fromInt(getEndRange()); + return strString; +} + +inline +String Range::toTabbedString(void)const +{ + String strItem; + String shortName; + + shortName=getRangeName(); + strItem+=shortName.substr(0,ShortNameLength-1)+"\t"; + strItem+=String().fromInt(getBeginRange())+"\t"; + strItem+=String().fromInt(getEndRange()); + return strItem; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030502/RangeDlg.cpp b/guitar/backup/20030502/RangeDlg.cpp new file mode 100644 index 0000000..5b65779 --- /dev/null +++ b/guitar/backup/20030502/RangeDlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include + +RangeDialog::RangeDialog(void) +{ + mInitHandler.setCallback(this,&RangeDialog::initHandler); + mCreateHandler.setCallback(this,&RangeDialog::createHandler); + mCloseHandler.setCallback(this,&RangeDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog::RangeDialog(const RangeDialog &someRangeDialog) +{ // private implementation + *this=someRangeDialog; +} + +RangeDialog::~RangeDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog) +{ // private implementation + return *this; +} + +bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + mTabRanges=ranges; + mMaxRange=maxRange; + mIsSelection=isSelect; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST); + mRangeList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(55)); + mRangeList->setTabStops(stops); + setRangeList(); + if(mIsSelection) + { + enable(RANGE_INSERT,false); + enable(RANGE_DELETE,false); + setCaption("Range Select"); + } + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(mIsSelection)handleRangeSelection(); + endDialog(true); + break; + case RANGE_INSERT : + handleRangeInsert(); + break; + case RANGE_DELETE : + handleRangeDelete(); + break; + } + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + if(mIsSelection) + { + handleRangeSelection(); + endDialog(true); + } + else handleRangeEditSelection(); + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeDialog::setRangeList(void) +{ + for(int index=0;indexaddString(range.toTabbedString()); + } + mRangeList->setCurrent(0); + return; +} + +void RangeDialog::handleRangeSelection(void) +{ + mSelection=mRangeList->getCurrent(); +} + +void RangeDialog::handleRangeEditSelection(void) +{ + RangeEditDialog rangeEditDialog; + int currSel; + + currSel=mRangeList->getCurrent(); + if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return; + Range range=rangeEditDialog.getRange(); + mTabRanges.remove(currSel); + mTabRanges.insert(&range); + mRangeList->deleteString(currSel); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeInsert(void) +{ + RangeEditDialog rangeEditDialog; + Range range; + + if(!rangeEditDialog.perform(*this,range,mMaxRange))return; + range=rangeEditDialog.getRange(); + mTabRanges.insert(&range); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeDelete(void) +{ + int currSel; + + if(-1==(currSel=mRangeList->getCurrent()))return; + if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return; + mRangeList->deleteString(currSel); + mTabRanges.remove(currSel); + currSel--; + if(currSel<0)mRangeList->setCurrent(0); + else mRangeList->setCurrent(currSel); +} diff --git a/guitar/backup/20030502/RangeDlg.hpp b/guitar/backup/20030502/RangeDlg.hpp new file mode 100644 index 0000000..0fc857c --- /dev/null +++ b/guitar/backup/20030502/RangeDlg.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_RANGEDLG_HPP_ +#define _GUITAR_RANGEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class TabEntry; + +class RangeDialog : public DWindow +{ +public: + RangeDialog(void); + virtual ~RangeDialog(); + bool perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect=false); + const TabRanges &getTabRanges(void)const; + int getSelection(void)const; +private: + RangeDialog(const RangeDialog &someRangeDialog); + RangeDialog &operator=(const RangeDialog &someRangeDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setRangeList(void); + void handleRangeSelection(void); + void handleRangeEditSelection(void); + void handleRangeInsert(void); + void handleRangeDelete(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mRangeList; + Point mDisplayPoint; + TabRanges mTabRanges; + bool mIsSelection; + int mMaxRange; + int mSelection; +}; + +inline +const TabRanges &RangeDialog::getTabRanges(void)const +{ + return mTabRanges; +} + +inline +int RangeDialog::getSelection(void)const +{ + return mSelection; +} +#endif diff --git a/guitar/backup/20030502/RangeEditDlg.cpp b/guitar/backup/20030502/RangeEditDlg.cpp new file mode 100644 index 0000000..e0daace --- /dev/null +++ b/guitar/backup/20030502/RangeEditDlg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +RangeEditDialog::RangeEditDialog(void) +{ + mInitHandler.setCallback(this,&RangeEditDialog::initHandler); + mCreateHandler.setCallback(this,&RangeEditDialog::createHandler); + mCloseHandler.setCallback(this,&RangeEditDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeEditDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeEditDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog::RangeEditDialog(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + *this=someRangeEditDialog; +} + +RangeEditDialog::~RangeEditDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog &RangeEditDialog::operator=(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + return *this; +} + +bool RangeEditDialog::perform(GUIWindow &parentWindow,const Range &range,int maxRange) +{ + mRange=range; + mMaxRange=maxRange; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEEDITDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeEditDialog::initHandler(CallbackData &someCallbackData) +{ + if(mRange.getRangeName().isNull()&&!mRange.getBeginRange()&&!mRange.getEndRange())setCaption("Insert Range"); + setData(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeEditDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + getData(); + if(!isValid())errorMessage(); + else endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeEditDialog::setData(void)const +{ + setText(RANGEEDIT_NAME,mRange.getRangeName()); + setText(RANGEEDIT_BEGIN,String().fromInt(mRange.getBeginRange())); + setText(RANGEEDIT_END,String().fromInt(mRange.getEndRange())); +} + +void RangeEditDialog::getData(void) +{ + String strName; + String strBegin; + String strEnd; + + getText(RANGEEDIT_NAME,strName); + mRange.setRangeName(strName); + getText(RANGEEDIT_BEGIN,strBegin); + mRange.setBeginRange(strBegin.toInt()); + getText(RANGEEDIT_END,strEnd); + mRange.setEndRange(strEnd.toInt()); +} + +bool RangeEditDialog::isValid(void) +{ + if(mRange.getRangeName().isNull()) + { + mLastError="Range name cannot be empty."; + return false; + } + if(mRange.getBeginRange()<0) + { + mLastError="Begin range position must be greater than zero."; + return false; + } + if(mRange.getBeginRange()>mRange.getEndRange()) + { + mLastError="Begin range position must be smaller than end range position."; + return false; + } + if(mRange.getEndRange()>=mMaxRange) + { + mLastError="End range position must be less than "+String().fromInt(mMaxRange); + return false; + } + return true; +} + +void RangeEditDialog::errorMessage(void) +{ + MessageBox::messageBox(*this,"Invalid range.",mLastError.str()); +} diff --git a/guitar/backup/20030502/RangeEditDlg.hpp b/guitar/backup/20030502/RangeEditDlg.hpp new file mode 100644 index 0000000..3139037 --- /dev/null +++ b/guitar/backup/20030502/RangeEditDlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_RANGEEDITDLG_HPP_ +#define _GUITAR_RANGEEDITDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class RangeEditDialog : public DWindow +{ +public: + RangeEditDialog(void); + virtual ~RangeEditDialog(); + bool perform(GUIWindow &parentWindow,const Range &range,int maxRange); + const Range &getRange(void)const; +private: + RangeEditDialog(const RangeEditDialog &someRangeEditDialog); + RangeEditDialog &operator=(const RangeEditDialog &someRangeEditDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setData(void)const; + void getData(void); + bool isValid(void); + void errorMessage(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Range mRange; + String mLastError; + int mMaxRange; +}; + +inline +const Range &RangeEditDialog::getRange(void)const +{ + return mRange; +} +#endif diff --git a/guitar/backup/20030502/Registration.hpp b/guitar/backup/20030502/Registration.hpp new file mode 100644 index 0000000..9871a01 --- /dev/null +++ b/guitar/backup/20030502/Registration.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REGISTRATION_HPP_ +#define _GUITAR_REGISTRATION_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _GUITAR_LICENSE_HPP_ +#include +#endif + +// Registration procedure +// When application first comes up it will check registry for a license + +// If no license exists and there is no "install.gid" file it will create a 30 day license +// along with an "install.gid" hidden file in the product directory. +// If no license key exists and there IS an "install.gid" file in the product directory, +// the user will be prompted to enter a valid license key. +// +// +// If a license exists it will check the validity of the license by.... +// If the license is type "non expiring", the application will proceeed normally. +// If the license is type "expiring", it will check to see if the license has expired. +// If the license has expired, a dialog box will appear, prompting the user to +// enter a valid license. +// If no valid license is entered, then the application will exit. +// In addition, a dialog box will be available from the help screen to enable the user +// to enter in additional licenses + +class Registration +{ +public: + virtual ~Registration(); + static Registration &getInstance(); + bool hasLicense(void)const; + bool hasGID(void)const; + bool getLicense(License &license)const; + bool create30DayLicense(void)const; + bool create15DayLicense(void)const; + bool createPermanentLicense(void)const; + bool createLicense(int days)const; + bool removeLicense(void); + bool applyLicense(const String &uuencodedLicense); + bool applyLicense(Block &strLicenseLines); + License generatePermanentLicense(void)const; // return a permanent license +private: + Registration(); + static SmartPointer smRegistration; + + String mRegistrationKeyName; + String mSettingsLicenseKey; + RegKey mRegKeyRegistration; +}; +#endif diff --git a/guitar/backup/20030502/ScaleDlg.cpp b/guitar/backup/20030502/ScaleDlg.cpp new file mode 100644 index 0000000..5adc7f0 --- /dev/null +++ b/guitar/backup/20030502/ScaleDlg.cpp @@ -0,0 +1,279 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ScaleDialog::ScaleDialog(void) +: mInEdit(false) +{ + mInitHandler.setCallback(this,&ScaleDialog::initHandler); + mCreateHandler.setCallback(this,&ScaleDialog::createHandler); + mCloseHandler.setCallback(this,&ScaleDialog::closeHandler); + mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler); + mCommandHandler.setCallback(this,&ScaleDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog) +{ // private implementation + *this=someScaleDialog; +} + +ScaleDialog::~ScaleDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog) +{ // private implementation + return *this; +} + +bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; + return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + case SCALEDLG_SPIN : + break; + case SCALEDLG_ROOT : + handleRoot(); + break; + case SCALEDLG_LIST : + if(LBN_KILLFOCUS!=someCallbackData.wmCommandCommand()&& + LBN_SETFOCUS!=someCallbackData.wmCommandCommand()) + handleList(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void ScaleDialog::handleOk(void) +{ +} + +void ScaleDialog::handleRoot(void) +{ + String strRoot; + + if(mInEdit)return; + mInEdit=true; + getText(SCALEDLG_ROOT,strRoot); + strRoot.upper(); + if(strRoot=="0")setText(SCALEDLG_ROOT,"A"); + else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#"); + else if(strRoot=="2")setText(SCALEDLG_ROOT,"B"); + else if(strRoot=="3")setText(SCALEDLG_ROOT,"C"); + else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#"); + else if(strRoot=="5")setText(SCALEDLG_ROOT,"D"); + else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#"); + else if(strRoot=="7")setText(SCALEDLG_ROOT,"E"); + else if(strRoot=="8")setText(SCALEDLG_ROOT,"F"); + else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#"); + else if(strRoot=="10")setText(SCALEDLG_ROOT,"G"); + else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#"); + else {mInEdit=false;return;} + if(!showScale())setText(SCALEDLG_ROOT,"A"); + mInEdit=false; +} + +void ScaleDialog::handleList(void) +{ + showScale(); +} + +bool ScaleDialog::showScale(void) +{ + String strScale; + String strRoot; + DWORD current; + + current=mScaleList->getCurrent(); + getText(SCALEDLG_ROOT,strRoot); + if(Note::None==Note::getNoteType(strRoot))return false; + mScaleList->getText(strScale,current); + playScale(strRoot,strScale); + return true; +} + +void ScaleDialog::playScale(const String &root,const String &scale) +{ + if(BST_CHECKED==sendMessage(SCALEDLG_MUTE,BM_GETCHECK,0,0L))return; + if(scale=="Ionian") + { + IonianScale ionianScale(Note::getNoteType(root)); + playScale(ionianScale); + } + else if(scale=="Dorian") + { + DorianScale dorianScale(Note::getNoteType(root)); + playScale(dorianScale); + } + else if(scale=="Phrygian") + { + PhrygianScale phrygianScale(Note::getNoteType(root)); + playScale(phrygianScale); + } + else if(scale=="Lydian") + { + LydianScale lydianScale(Note::getNoteType(root)); + playScale(lydianScale); + } + else if(scale=="Mixolydian") + { + MixolydianScale mixolydianScale(Note::getNoteType(root)); + playScale(mixolydianScale); + } + else if(scale=="Aeolian") + { + AeolianScale aeolianScale(Note::getNoteType(root)); + playScale(aeolianScale); + } + else if(scale=="Locrian") + { + LocrianScale locrianScale(Note::getNoteType(root)); + playScale(locrianScale); + } + else if(scale=="Pentatonic Minor") + { + PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root)); + playScale(pentatonicMinorScale); + } + else if(scale=="Harmonic Minor") + { + HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root)); + playScale(harmonicMinorScale); + } + else if(scale=="Melodic Minor") + { + MelodicMinorScale melodicMinorScale(Note::getNoteType(root)); + playScale(melodicMinorScale); + } + else if(scale=="Dorian-II") + { + DorianIIScale dorianIIScale(Note::getNoteType(root)); + playScale(dorianIIScale); + } + else if(scale=="Lydian Augmented") + { + LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root)); + playScale(lydianAugmentedScale); + } + else if(scale=="Lydian Dominant") + { + LydianDominantScale lydianDominantScale(Note::getNoteType(root)); + playScale(lydianDominantScale); + } + else if(scale=="Locrian2") + { + Locrian2Scale locrian2Scale(Note::getNoteType(root)); + playScale(locrian2Scale); + } + else if(scale=="Altered") + { + AlteredScale alteredScale(Note::getNoteType(root)); + playScale(alteredScale); + } + else if(scale=="Diminished(Whole Step)") + { + DiminishedWholeScale diminishedWholeScale(Note::getNoteType(root)); + playScale(diminishedWholeScale); + } + else if(scale=="Diminished(Half Step)") + { + DiminishedHalfScale diminishedHalfScale(Note::getNoteType(root)); + playScale(diminishedHalfScale); + } + else if(scale=="Whole Tone") + { + WholeToneScale wholeToneScale(Note::getNoteType(root)); + playScale(wholeToneScale); + } +} + +void ScaleDialog::playScale(const Scale &scale) +{ + CallbackData cbData(2,(LPARAM)&scale); + CursorControl cursorControl; + cursorControl.waitCursor(true); + mPlayNoteHandler.callback(cbData); + cursorControl.waitCursor(false); +} + + diff --git a/guitar/backup/20030502/ScaleDlg.hpp b/guitar/backup/20030502/ScaleDlg.hpp new file mode 100644 index 0000000..291ebaa --- /dev/null +++ b/guitar/backup/20030502/ScaleDlg.hpp @@ -0,0 +1,59 @@ +#ifndef _GUITAR_SCALEDLG_HPP_ +#define _GUITAR_SCALEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class Scale; + +class ScaleDialog : public DWindow +{ +public: + ScaleDialog(void); + virtual ~ScaleDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + ScaleDialog(const ScaleDialog &someScaleDialog); + ScaleDialog &operator=(const ScaleDialog &someScaleDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void handleRoot(void); + void handleList(void); + bool showScale(void); + void playScale(const Scale &scale); + void playScale(const String &root,const String &scale); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mScaleList; + SmartPointer mMIDIDevice; + CallbackPointer mPlayNoteHandler; + Fretboard mFretboard; + bool mInEdit; +}; +#endif diff --git a/guitar/backup/20030502/ScrollInfo.cpp b/guitar/backup/20030502/ScrollInfo.cpp new file mode 100644 index 0000000..76ba573 --- /dev/null +++ b/guitar/backup/20030502/ScrollInfo.cpp @@ -0,0 +1,136 @@ +#include + +bool ScrollInfo::pageDown(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()+PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +bool ScrollInfo::pageUp(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()-PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + diff --git a/guitar/backup/20030502/ScrollInfo.hpp b/guitar/backup/20030502/ScrollInfo.hpp new file mode 100644 index 0000000..2dc42c1 --- /dev/null +++ b/guitar/backup/20030502/ScrollInfo.hpp @@ -0,0 +1,274 @@ +#ifndef _GUITAR_SCROLLINFO_HPP_ +#define _GUITAR_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); + bool pageUp(void); + bool pageDown(void); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + + if(scrollableObjectWidth()==width&&scrollableObjectHeight()==height)return; + + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_REGISTRY_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class Sequencer : private MIDIOutputDevice +{ +public: + Sequencer(); + virtual ~Sequencer(); + bool midiEvent(const PureEvent &somePureEvent); + bool clearNotes(void); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + MIDIOutputDevice &getDevice(void); +private: + void changeProgram(void); +}; + +inline +Sequencer::Sequencer() +: MIDIOutputDevice(Registry().getMIDIOutputDevice()) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::Sequencer] Sequencer()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + changeProgram(); +} + +inline +Sequencer::~Sequencer() +{ + GlobalDefs::outDebug("[Sequencer::Sequencer] Sequencer()",GlobalDefs::Info); + closeDevice(); +} + +inline +bool Sequencer::midiEvent(const PureEvent &somePureEvent) +{ + GlobalDefs::outDebug(String("[Sequencer::midiEvent] ")+somePureEvent.toString(),GlobalDefs::Info); + return MIDIOutputDevice::midiEvent(somePureEvent); +} + +inline +bool Sequencer::hasDevice(void)const +{ + GlobalDefs::outDebug(String("[Sequencer::hasDevice] "),GlobalDefs::Info); + return MIDIOutputDevice::hasDevice(); +} + +inline +void Sequencer::closeDevice(void) +{ + GlobalDefs::outDebug(String("[Sequencer::closeDevice] "),GlobalDefs::Info); + MIDIOutputDevice::closeDevice(); +} + +inline +bool Sequencer::openDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::openDevice] registry.getMIDIOutputDevice()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; + changeProgram(); + return true; +} + +inline +bool Sequencer::clearNotes(void) +{ + GlobalDefs::outDebug(String("[Sequencer::clearNotes]"),GlobalDefs::Info); + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +} + +inline +MIDIOutputDevice &Sequencer::getDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::getDevice]"),GlobalDefs::Info); + if(!hasDevice()) + { + GlobalDefs::outDebug(String("[Sequencer::getDevice] OpenDevice"),GlobalDefs::Info); + MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()); + changeProgram(); + } + return (MIDIOutputDevice&)*this; +} + +inline +void Sequencer::changeProgram(void) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::changeProgram]"),GlobalDefs::Info); + midiEvent(ProgramChange(registry.getInstrument()).getEvent()); +} +#endif diff --git a/guitar/backup/20030502/TabEntry.cpp b/guitar/backup/20030502/TabEntry.cpp new file mode 100644 index 0000000..d0449ce --- /dev/null +++ b/guitar/backup/20030502/TabEntry.cpp @@ -0,0 +1,129 @@ +#include +#include +#include +#include + +TabEntry::TabEntry(const TabEntry &entry) +{ + *this=entry; +} + +TabEntry &TabEntry::operator=(const TabEntry &entry) +{ + remove(); + for(int index=0;index&)*this).operator[](index)==((TabEntry&)entry)[index]))return false; + } + return true; +} + +bool TabEntry::play(MIDIOutputDevice &midiDevice,bool useDelay) +{ + if(!midiDevice.hasDevice())return false; + for(int index=0;index::remove(entryIndex); + return true; +} + +String TabEntry::toString(void)const +{ + String str; + + str+="TABENTRY "; + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif +#ifndef _GUITAR_TIMING_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class TabEntry; +typedef Block TabEntries; + +class TabEntry : public Block +{ +public: + TabEntry(); + TabEntry(const TabEntry &entry); + virtual ~TabEntry(); + bool play(MIDIOutputDevice &midiDevice,bool useDelay=true); + bool operator==(const TabEntry &entry)const; + TabEntry &operator=(const TabEntry &entry); + const NoteType &getNoteType(void)const; + void setNoteType(const NoteType ¬eType); + String toString(void)const; + bool fromString(String strText); + bool contains(int string,int &entryIndex); + bool contains(int string); + bool remove(int string,int fret); + void remove(void); + bool addFrettedNote(int string,const FrettedNote &frettedNote); + bool setFrettedNote(int string,const FrettedNote &frettedNote); +private: + void delay(void); + + NoteType mNoteType; +}; + +inline +TabEntry::TabEntry() +{ +} + +inline +TabEntry::~TabEntry() +{ +} + +inline +const NoteType &TabEntry::getNoteType(void)const +{ + return mNoteType; +} + +inline +void TabEntry::setNoteType(const NoteType ¬eType) +{ + mNoteType=noteType; +} + +inline +void TabEntry::remove(void) +{ + Block::remove(); +} +#endif diff --git a/guitar/backup/20030502/TabLines.cpp b/guitar/backup/20030502/TabLines.cpp new file mode 100644 index 0000000..a56ae0d --- /dev/null +++ b/guitar/backup/20030502/TabLines.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +// returns -1 on error, 1 if added to entry, 0 otherwise + +int TabLines::firstElement(TabEntry &entry,Fretboard &fretboard) +{ + TabElement element; + + entry.remove(); + for(int index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabEntry; +class Fretboard; + +typedef Element TabElement[6]; + +class TabLines : public Array +{ +public: + enum{NumLines=6}; + TabLines(); + int firstElement(TabEntry &entry,Fretboard &fretboard); + int nextElement(TabEntry &entry,Fretboard &fretboard); + virtual ~TabLines(); +private: + bool haveElement(TabElement &elements)const; + bool validate(Element &elements)const; + void insert(TabEntry &entry,TabElement &elements,Fretboard &fretboard); + void synchronize(void); +}; + +inline +TabLines::TabLines() +{ + size(NumLines); +} + +inline +TabLines::~TabLines() +{ +} +#endif diff --git a/guitar/backup/20030502/TabView.cpp b/guitar/backup/20030502/TabView.cpp new file mode 100644 index 0000000..ba2f85b --- /dev/null +++ b/guitar/backup/20030502/TabView.cpp @@ -0,0 +1,95 @@ +#include + +TabView::TabView(void) +{ + mCreateHandler.setCallback(this,&TabView::createHandler); + mSizeHandler.setCallback(this,&TabView::sizeHandler); + mPaintHandler.setCallback(this,&TabView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&TabView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&TabView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabView::leftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +TabView::~TabView() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType TabView::createHandler(CallbackData &someCallbackData) +{ + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType TabView::sizeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType TabView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void TabView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String TabView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void TabView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(LTGRAY_BRUSH); +} + +void TabView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030502/TabView.hpp b/guitar/backup/20030502/TabView.hpp new file mode 100644 index 0000000..6f9ef25 --- /dev/null +++ b/guitar/backup/20030502/TabView.hpp @@ -0,0 +1,42 @@ +#ifndef _GUITAR_TABVIEW_HPP_ +#define _GUITAR_TABVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class StatusBarEx; + +class TabView : public MDIWindow +{ +public: + TabView(void); + virtual ~TabView(); + String getTitle(void)const; +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,WindowWidth=565,WindowHeight=210}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + SmartPointer mStatusBar; +}; +#endif diff --git a/guitar/backup/20030502/TabWriter.cpp b/guitar/backup/20030502/TabWriter.cpp new file mode 100644 index 0000000..d3f5222 --- /dev/null +++ b/guitar/backup/20030502/TabWriter.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + + GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug); + if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb")) + { + GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug); + return false; + } + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + initLines(); + setHeader(); + for(int index=0,entryCount=0;indexMaxItems) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outFile); + outFile.writeLine(String(" ")); + initLines(); + setHeader(); + entryCount=0; + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabWriter : public Array +{ +public: + TabWriter(); + virtual ~TabWriter(); + bool write(TabEntries &entries,const String &strPathTabFile); +private: + enum {MaxItems=30,NumLines=6}; + void writeLines(File &outFile); + void initLines(void); + void setHeader(void); + void synchronize(void); +}; + +inline +TabWriter::TabWriter() +{ +} + +inline +TabWriter::~TabWriter() +{ +} +#endif diff --git a/guitar/backup/20030502/Tablature.hpp b/guitar/backup/20030502/Tablature.hpp new file mode 100644 index 0000000..000104e --- /dev/null +++ b/guitar/backup/20030502/Tablature.hpp @@ -0,0 +1,93 @@ +#ifndef _GUITAR_TABLATURE_HPP_ +#define _GUITAR_TABLATURE_HPP_ +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_TABLINES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class GUIWindow; +class TabPage; + +class Tablature +{ +public: + typedef enum LastError{None,FileOpenError,NoTabsParsedError,NoFrettedNotesError}; + Tablature(); + Tablature(const String &pathFileName); + virtual ~Tablature(); + bool open(const String &pathFileTablature); // open tablature file + bool import(String pathFileTablature); // import tablature file into project + bool save(void); // save tablature file + bool saveAs(const String &pathFileTablature); // save tablature file as... + bool openProject(const String &pathFileName); // open existing project file + bool saveProject(const String &pathFileName=String()); // save current project + bool play(MIDIOutputDevice &midiDevice); + LastError getLastError(void)const; + const String &getPathFileTablature(void)const; + const String &getPathFileProject(void)const; + const TabEntries &getTabEntries(void)const; + void setTabEntries(const TabEntries &entries); + const TabRanges &getTabRanges(void)const; + void setTabRanges(const TabRanges &ranges); + static String getPathFileProject(const String &pathFileTablature); +private: + bool loadTabFile(const String &pathFileName); + bool parseTab(void); + bool isTabLine(const String &strLine,int &startElement)const; + bool setTypeAt(int index,const NoteType ¬eType); + void parseTypes(String strLine); + void parseRange(String strLine); + String getTypes(void)const; + + TabEntries mTabEntries; + TabRanges mTabRanges; + Block mTablature; + Fretboard mFretboard; + String mPathFileName; + LastError mLastError; + String mPathFileTablature; + String mPathFileProject; +}; + +inline +Tablature::Tablature() +{ +} + +inline +Tablature::Tablature(const String &pathFileName) +{ + open(pathFileName); +} + +inline +Tablature::~Tablature() +{ +} + +inline +Tablature::LastError Tablature::getLastError(void)const +{ + return mLastError; +} + +inline +const String &Tablature::getPathFileTablature(void)const +{ + return mPathFileTablature; +} + +inline +const String &Tablature::getPathFileProject(void)const +{ + return mPathFileProject; +} +#endif diff --git a/guitar/backup/20030502/Timing.cpp b/guitar/backup/20030502/Timing.cpp new file mode 100644 index 0000000..f638d7a --- /dev/null +++ b/guitar/backup/20030502/Timing.cpp @@ -0,0 +1,138 @@ +#include +#include +#include + +int Timing::mMicrosecondsPerQuarterNote=Timing::microsecondsPerQuarterNote(Registry().getMicrosecondsPerQuarterNote()); +int Timing::mMillisecondsPerWholeNote; +int Timing::mMillisecondsPerHalfNote; +int Timing::mMillisecondsPerQuarterNote; +int Timing::mMillisecondsPerEigthNote; +int Timing::mMillisecondsPerSixteenthNote; +int Timing::mMillisecondsPerThirtySecondNote; +int Timing::mMillisecondsPerSixtyFourthNote; + +int Timing::microsecondsPerQuarterNote(int microsecondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=microsecondsPerQuarterNote; + mMillisecondsPerQuarterNote=(double)microsecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; + return mMicrosecondsPerQuarterNote; +} + +int Timing::microsecondsPerQuarterNote(void) +{ + return mMicrosecondsPerQuarterNote; +} + +void Timing::secondsPerQuarterNote(float secondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=secondsPerQuarterNote*1000000.00;; + mMillisecondsPerQuarterNote=(double)mMicrosecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; +} + +int Timing::millisecondsPerWholeNote(void) +{ + return mMillisecondsPerWholeNote; +} + +int Timing::millisecondsPerHalfNote(void) +{ + return mMillisecondsPerHalfNote; +} + +int Timing::millisecondsPerQuarterNote(void) +{ + return mMillisecondsPerQuarterNote; +} + +int Timing::millisecondsPerEightNote(void) +{ + return mMillisecondsPerEigthNote; +} + +int Timing::millisecondsPerSixteenthNote(void) +{ + return mMillisecondsPerSixteenthNote; +} + +int Timing::millisecondsPerThirtySecondNote(void) +{ + return mMillisecondsPerThirtySecondNote; +} + +int Timing::millisecondsPerSixtyFourthNote(void) +{ + return mMillisecondsPerSixtyFourthNote; +} + +int Timing::getDelay(const NoteType ¬eType) +{ + switch(noteType.getNoteType()) + { + case NoteType::WholeNote : + return millisecondsPerWholeNote(); + case NoteType::HalfNote : + return millisecondsPerHalfNote(); + case NoteType::QuarterNote : + return millisecondsPerQuarterNote(); + case NoteType::EighthNote : + return millisecondsPerEightNote(); + case NoteType::SixteenthNote : + return millisecondsPerSixteenthNote(); + case NoteType::ThirtySecondNote : + return millisecondsPerThirtySecondNote(); + case NoteType::SixtyFourthNote : + return millisecondsPerSixtyFourthNote(); + default : + return millisecondsPerSixtyFourthNote(); + } +} + +String Timing::toString(void) +{ + String strTiming; + strTiming+=String("1/1=")+String().fromInt(millisecondsPerWholeNote())+String("ms, "); + strTiming+=String("1/2=")+String().fromInt(millisecondsPerHalfNote())+String("ms, "); + strTiming+=String("1/4=")+String().fromInt(millisecondsPerQuarterNote())+String("ms, "); + strTiming+=String("1/8=")+String().fromInt(millisecondsPerEightNote())+String("ms, "); + strTiming+=String("1/16=")+String().fromInt(millisecondsPerSixteenthNote())+String("ms, "); + strTiming+=String("1/32=")+String().fromInt(millisecondsPerThirtySecondNote())+String("ms, "); + strTiming+=String("1/64=")+String().fromInt(millisecondsPerSixtyFourthNote())+String("ms, "); + return strTiming; +} + + +/* +microseconds per quarter note = 631578 +milliseconds per quarter note = 631578/1000 = 631 + 631578*.001 = 631 + +msecs per qtr note=usecs per qtr note *.001 + +quarter note = msecs per 4th note +eigth note = msecs/2 +sixteenth note = msecs/4 +thirty second note = msecs/8 +sixty fourth note = msecs/16 + +(ie) +microsecs millisecs 4th note 8th note 16th note 32nd note 64th note +--------- --------- -------- -------- --------- --------- --------- + 631578 631 631 315 157 78 39 + +options +seconds per qtr note: .5 + +msecs per qtr note=(seconds_per_qtr_note*1000) +*/ \ No newline at end of file diff --git a/guitar/backup/20030502/Timing.hpp b/guitar/backup/20030502/Timing.hpp new file mode 100644 index 0000000..96bcf39 --- /dev/null +++ b/guitar/backup/20030502/Timing.hpp @@ -0,0 +1,48 @@ +#ifndef _GUITAR_TIMING_HPP_ +#define _GUITAR_TIMING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif + +class Timing +{ +public: + static int microsecondsPerQuarterNote(int microsecondsPerQuarterNote); + static int microsecondsPerQuarterNote(void); + static void secondsPerQuarterNote(float secondsPerQuarterNote); + static int millisecondsPerWholeNote(void); + static int millisecondsPerHalfNote(void); + static int millisecondsPerQuarterNote(void); + static int millisecondsPerEightNote(void); + static int millisecondsPerSixteenthNote(void); + static int millisecondsPerThirtySecondNote(void); + static int millisecondsPerSixtyFourthNote(void); + static int getDelay(const NoteType ¬eType); + static String toString(void); +private: + Timing(); + virtual ~Timing(); + static int mMicrosecondsPerQuarterNote; + static int mMillisecondsPerWholeNote; + static int mMillisecondsPerHalfNote; + static int mMillisecondsPerQuarterNote; + static int mMillisecondsPerEigthNote; + static int mMillisecondsPerSixteenthNote; + static int mMillisecondsPerThirtySecondNote; + static int mMillisecondsPerSixtyFourthNote; +}; + +inline +Timing::Timing() +{ +} + +inline +Timing::~Timing() +{ +} +#endif + diff --git a/guitar/backup/20030502/Tuning.cpp b/guitar/backup/20030502/Tuning.cpp new file mode 100644 index 0000000..c4b1cb6 --- /dev/null +++ b/guitar/backup/20030502/Tuning.cpp @@ -0,0 +1,20 @@ +#include +#include + +void Tuning::setStandardTuning(void) +{ + size(StandardTuningStrings); + operator[](0)=Note(Note::E,3); + operator[](1)=Note(Note::A,3); + operator[](2)=Note(Note::D,4); + operator[](3)=Note(Note::G,4); + operator[](4)=Note(Note::B,4); + operator[](5)=Note(Note::E,operator[](4).getOctave()+1); +} + +// virtuals + +int Tuning::getDelay(void)const +{ + return Delay; +} diff --git a/guitar/backup/20030502/Tuning.hpp b/guitar/backup/20030502/Tuning.hpp new file mode 100644 index 0000000..d4d41e7 --- /dev/null +++ b/guitar/backup/20030502/Tuning.hpp @@ -0,0 +1,43 @@ +#ifndef _GUITAR_TUNING_HPP_ +#define _GUITAR_TUNING_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif + +class Tuning : public Notes +{ +public: + enum {StandardTuningStrings=6,Delay=1000}; + Tuning(); + virtual ~Tuning(); + int getStrings(void)const; + void setStrings(int strings); + void setStandardTuning(void); +protected: + virtual int getDelay(void)const; +private: +}; + +inline +Tuning::Tuning() +{ + setStandardTuning(); +} + +inline +Tuning::~Tuning() +{ +} + +inline +int Tuning::getStrings(void)const +{ + return size(); +} + +inline +void Tuning::setStrings(int strings) +{ + size(strings); +} +#endif diff --git a/guitar/backup/20030502/chordmain.cpp b/guitar/backup/20030502/chordmain.cpp new file mode 100644 index 0000000..fc9ac30 --- /dev/null +++ b/guitar/backup/20030502/chordmain.cpp @@ -0,0 +1,33 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDef; + String strEnum; + File inFile("tabs/allchords.tab"); + File rcFile("chords.rc","wb"); + File hFile("chords.h","wb"); + int count(21000); + + rcFile.writeLine("#include "); + rcFile.writeLine("STRINGTABLE DISCARDABLE"); + rcFile.writeLine("BEGIN"); + while(inFile.readLine(strLine)) + { + strEnum="STRING_"+String().fromInt(count); + strDef=strEnum; + strDef+="\t\""; + strDef+=strLine.betweenString(0,':')+"\""; + rcFile.writeLine(strDef); + hFile.writeLine(String("#define ")+strEnum+String(" ")+String().fromInt(count)); + count++; + } + rcFile.writeLine("END"); + return 0; + +// MainFrame mainFrame; +// mainFrame.createWindow("TabMaster","TabMaster v1.00a","mainMenu","APP_ICON"); +// return mainFrame.messageLoop(); +} diff --git a/guitar/backup/20030502/guitar.hpp b/guitar/backup/20030502/guitar.hpp new file mode 100644 index 0000000..6fe0d82 --- /dev/null +++ b/guitar/backup/20030502/guitar.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_GUITAR_HPP_ +#define _GUITAR_GUITAR_HPP_ +#ifndef _GUITAR_GUITAR_H_ +#include +#endif +#endif diff --git a/guitar/backup/20030502/license.cpp b/guitar/backup/20030502/license.cpp new file mode 100644 index 0000000..61f14a2 --- /dev/null +++ b/guitar/backup/20030502/license.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +/* + The license will be uuencoded on top of xor. This should be sufficient to protect the contents. + Lic: TM105R20020101013001EF + VVVVVVYYYYMMDDTTDDCCCC + + XX=version TM105R. should check this against this product version and release + YYYY=year of license issuance. 30 day license will use this value to expire itself. + MM=month of license issuance 30 day license will use this value to expiure + DD=day of license issuance + TT=type of license + 01=30 day license, expires 30 days from issuance. + 02=Full license, never expires. + DD=for type 01 license, indicates number of days license is good for. + CCCC=checksum, just add up ASCII values of the characters through TT, display in hex. +*/ + +const String License::smBeginLicense="BEGIN LICENSE"; +const String License::smEndLicense="END LICENSE"; + +String License::generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount) +{ + String strLicenseKey; + String strIssueDate; + String strLicenseType; + String strDayCount; + String strChecksum; + + strLicenseKey=String("TM"); + strLicenseKey+=strProductVersion.substr(0,3); + ::sprintf(strIssueDate,"%4d%02d%02d",issueDate.year(),issueDate.month(),issueDate.day()); + strLicenseKey+=strIssueDate; + ::sprintf(strLicenseType,"%02d",licenseType); + strLicenseKey+=strLicenseType; + ::sprintf(strDayCount,"%02d",dayCount); + strLicenseKey+=strDayCount; + ::sprintf(strChecksum,"%04lx",calculateChecksum(strLicenseKey)); + strLicenseKey+=strChecksum; + return UUTool::encode(xor(strLicenseKey)); +} + +String numericEncode(const String &strLicense) +{ + return String(); +} + +String numericDecode(const String &strLicense) +{ + return String(); +} + +bool License::fromLines(Block &strLicenseLines) +{ + if(3!=strLicenseLines.size())return false; + if(!(strLicenseLines[0]==smBeginLicense))return false; + if(!(strLicenseLines[2]==smEndLicense))return false; + return fromString(strLicenseLines[1]); +} + +// TM105R2002040301 30 03d8 + +bool License::fromString(const String &strLicense) +{ + VersionInfo versionInfo; + SystemTime currDate; + SystemTime expireDate; + String strHeader; + String strDecoded; + String strVersion; + int hashCode; + + mUUEncodedLicense=strLicense; + strDecoded=xor(UUTool::decode(strLicense)); + strHeader=strDecoded.substr(0,1); + if(!(strHeader==String("TM")))return false; + mProductVersion=strDecoded.substr(2,5); + mIssueDate.year(strDecoded.substr(6,9).toInt()); + mIssueDate.month((SystemTime::Month)strDecoded.substr(10,11).toInt()); + mIssueDate.day(strDecoded.substr(12,13).toInt()); + mLicenseType=(LicenseType)strDecoded.substr(14,15).toInt(); + mDayCount=strDecoded.substr(16,17).toInt(); + hashCode=strDecoded.substr(18,21).hex(); + if(hashCode!=calculateChecksum(strDecoded.substr(0,17)))return false; + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return mIsValid=true; + expireDate=mIssueDate; + expireDate.daysAdd360(mDayCount); + if(currDate>=expireDate)return false; + return mIsValid=true; +} + +String License::xor(const String &strLicense) +{ + String strEncoded; + int strLength; + + strEncoded.reserve((strLength=strLicense.length())+1); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); +} + diff --git a/guitar/backup/20030502/mainfrm.cpp b/guitar/backup/20030502/mainfrm.cpp new file mode 100644 index 0000000..9ea71f2 --- /dev/null +++ b/guitar/backup/20030502/mainfrm.cpp @@ -0,0 +1,1035 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); + mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + return false; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + return false; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_PRINT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_PRINT",GlobalDefs::Verbose); + handleFilePrint(); + break; + case MENU_FILE_NEW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_NEW",GlobalDefs::Verbose); + handleFileNew(); + break; + case MENU_FILE_OPEN : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_OPEN",GlobalDefs::Verbose); + handleOpenProject(); + break; + case MENU_FILE_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_IMPORT",GlobalDefs::Verbose); + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_MIDI_IMPORT",GlobalDefs::Verbose); + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_CLOSE",GlobalDefs::Verbose); + handleFileClose(); + break; + case MENU_FILE_EXIT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_EXIT",GlobalDefs::Verbose); + handleFileExit(); + break; + case MENU_FILE_SAVE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVE",GlobalDefs::Verbose); + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVEAS",GlobalDefs::Verbose); + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_VIEW_FRETBOARD",GlobalDefs::Verbose); + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAY",GlobalDefs::Verbose); + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYTOEND",GlobalDefs::Verbose); + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYREPEATED",GlobalDefs::Verbose); + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE",GlobalDefs::Verbose); + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE_REPEATED",GlobalDefs::Verbose); + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_STOP",GlobalDefs::Verbose); + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_ENTRYPROPS",GlobalDefs::Verbose); + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETENDRANGE",GlobalDefs::Verbose); + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETSTARTRANGE",GlobalDefs::Verbose); + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_RANGES",GlobalDefs::Verbose); + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_INCREASETEMPO",GlobalDefs::Verbose); + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_DECREASETEMPO",GlobalDefs::Verbose); + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_SETTINGS",GlobalDefs::Verbose); + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_LOOKUP",GlobalDefs::Verbose); + handleChordLookup(); + break; + case MENU_FRETBOARD_CLEAR : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_CLEAR",GlobalDefs::Verbose); + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_SHOWALLPOSITIONS",GlobalDefs::Verbose); + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_SCALES_SHOW",GlobalDefs::Verbose); + handleShowScales(); + break; + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + break; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + break; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CASCADE",GlobalDefs::Verbose); + cascade(); + break; + case IDM_TILE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_TILE",GlobalDefs::Verbose); + tile(); + break; + case IDM_ARRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_ARRANGE",GlobalDefs::Verbose); + arrange(); + break; + case IDM_CLOSEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CLOSEALL",GlobalDefs::Verbose); + closeAll(); + break; + case IDM_MINIMIZEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_MINIMIZEALL",GlobalDefs::Verbose); + minimizeAll(); + break; + case IDM_RESTOREALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_RESTOREALL",GlobalDefs::Verbose); + restoreAll(); + break; + default : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::keyDownHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::paintHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); + GlobalDefs::outDebug("[MainFrame::createHandler]",GlobalDefs::Verbose); + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + setWindowPos(InitialWidth,InitialHeight); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + updateHistory(); + if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ + Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::guiFretboardHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + + GlobalDefs::outDebug("[MainFrame::guiFretboardHandler]",GlobalDefs::Verbose); + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow); + } + if(!someCallbackData.lParam()) + { + ((FretViewWindow&)*mdiWindow).clearNotes(); + } + else + { + if(!someCallbackData.wParam()) + { + const TabEntry &entry=*(TabEntry*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(entry,true,true); + } + else if(1==someCallbackData.wParam()) + { + const Note ¬e=*(Note*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(note); + } + else if(2==someCallbackData.wParam()) + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale,true); + } + else if(3==someCallbackData.wParam()) // not currently used see ScaleDlg + { + const FrettedNotes &frettedNotes=*(FrettedNotes*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(frettedNotes); + } + } + return false; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} + +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} + +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} + +// menu handlers + +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} + +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} + +void MainFrame::handleFileNew(void) +{ + createProjectView(); +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + createProjectView(strPathTabFile); +} + +void MainFrame::handleMIDIImport(void) +{ + OpenDialog openDialog; + String strPathMIDIFile; + String strPathTabFileName; + MIDIHelper midiHelper; + CursorControl cursorControl; + MIDIDialog midiDialog; + License license; + int selectedTrack; + + Registration::getInstance().getLicense(license); + if(!license.allowFeature(License::MIDIFeature)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"This feature is disabled in this version.",MB_ICONSTOP); + return; + } + if(!openDialog.getOpenFileName(*this,"*.mid","Open MIDI","*.mid",strPathMIDIFile))return; + if(!midiDialog.perform(*this,strPathMIDIFile,selectedTrack))return; + strPathTabFileName=Profile::removeExtension(strPathMIDIFile)+String("TRK")+String().fromInt(selectedTrack+1)+String(".tab"); + if(!midiHelper.import(strPathMIDIFile,strPathTabFileName,selectedTrack)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"Error importing file.",MB_ICONSTOP); + return; + } + cursorControl.waitCursor(true); + createProjectView(strPathTabFileName); + cursorControl.waitCursor(false); +} + +void MainFrame::handleOpenProject(CallbackData &someCallbackData) +{ + PureMenu fileMenu; + String menuItemString; + + getFrameMenu().getSubMenu(0,fileMenu); + menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand); + if(menuItemString.isNull())return; + menuItemString=menuItemString.betweenString(')',0); + menuItemString.trimLeft(); + handleOpenProject(menuItemString); +} + +void MainFrame::handleOpenProject(void) +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,String(STRING_PRJALLEXTENSION),"Open Project",String(STRING_PRJALLEXTENSION),strPathFileName))return; + handleOpenProject(strPathFileName); +} + +void MainFrame::handleOpenProject(const String &strPathFileProject) +{ + openProjectView(strPathFileProject); +} + +void MainFrame::handleFileClose(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} + +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} + +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} + +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} + +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} + +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} + +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} + +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} + +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} + +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} + +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} + +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} + +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} + +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} + +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} + +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} + +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} + +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} + +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} + +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} + +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} + +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} + +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} + +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; + enum{InitialWidth=700,InitialHeight=480}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleMIDIImport(void); + void handleFileClose(void); + void handleFileExit(void); + void handleFileNew(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void createToolBar(void); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mGUIFretboardHandler; + Callback mDropFilesHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/guitar/backup/20030502/notepath.cpp b/guitar/backup/20030502/notepath.cpp new file mode 100644 index 0000000..d6f75df --- /dev/null +++ b/guitar/backup/20030502/notepath.cpp @@ -0,0 +1,12 @@ +#include + +String NotePath::toString(void) +{ + String strNotePath; + + for(int index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class NotePath; +typedef Array NotePaths; + +class NotePath : public Block +{ +public: + String toString(void); +}; +#endif diff --git a/guitar/backup/20030502/ordering.hpp b/guitar/backup/20030502/ordering.hpp new file mode 100644 index 0000000..81ab6b1 --- /dev/null +++ b/guitar/backup/20030502/ordering.hpp @@ -0,0 +1,73 @@ +#ifndef _GUITAR_ORDERING_HPP_ +#define _GUITAR_ORDERING_HPP_ + +class Ordering +{ +public: + Ordering(int criteria=0,int value=0); + virtual ~Ordering(); + bool operator<(const Ordering &ordering)const; + bool operator>(const Ordering &ordering)const; + bool operator==(const Ordering &ordering)const; + int getCriteria(void)const; + void setCriteria(int criteria); + int getValue(void)const; + void setValue(int value); +private: + int mCriteria; + int mValue; +}; + +inline +Ordering::Ordering(int criteria,int value) +: mCriteria(criteria), mValue(value) +{ +} + +inline +Ordering::~Ordering() +{ +} + +inline +bool Ordering::operator<(const Ordering &ordering)const +{ + return mCriteria(const Ordering &ordering)const +{ + return mCriteria>ordering.mCriteria; +} + +inline +bool Ordering::operator==(const Ordering &ordering)const +{ + return mCriteria==ordering.mCriteria; +} + +inline +int Ordering::getCriteria(void)const +{ + return mCriteria; +} + +inline +void Ordering::setCriteria(int criteria) +{ + mCriteria=criteria; +} + +inline +int Ordering::getValue(void)const +{ + return mValue; +} + +inline +void Ordering::setValue(int value) +{ + mValue=value; +} +#endif diff --git a/guitar/backup/20030502/registration.cpp b/guitar/backup/20030502/registration.cpp new file mode 100644 index 0000000..2b6ab23 --- /dev/null +++ b/guitar/backup/20030502/registration.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include + +SmartPointer Registration::smRegistration; + +Registration::Registration() +: mRegistrationKeyName(STRING_REGISTRATIONKEYNAME), + mSettingsLicenseKey(STRING_SETTINGSLICENSE) +{ +} + +Registration::~Registration() +{ +} + +Registration &Registration::getInstance() +{ + if(!smRegistration.isOkay()) + { + smRegistration=::new Registration(); + smRegistration.disposition(PointerDisposition::Delete); + } + return *smRegistration; +} + +bool Registration::hasGID(void)const +{ + FileHandle gidFile; + return gidFile.open("install.gid",FileHandle::Read,FileHandle::ShareRead,FileHandle::Open,FileHandle::Hidden); +} + +bool Registration::hasLicense(void)const +{ + RegKey regKeyRegistration; + String strLicense; + + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + return strLicense.isNull()?false:true; +} + +bool Registration::getLicense(License &license)const +{ + String strLicense; + RegKey regKeyRegistration; + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + license.fromString(strLicense); + return true; +} + +bool Registration::applyLicense(Block &strLicenseLines) +{ + RegKey regKeyRegistration; + License license; + + license.fromLines(strLicenseLines); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,license.getUUEncodedLicense()); + return true; +} + +bool Registration::applyLicense(const String &uuencodedLicense) +{ + RegKey regKeyRegistration; + License license; + + license.fromString(uuencodedLicense); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,uuencodedLicense); + return true; +} + +bool Registration::create30DayLicense(void)const +{ + createLicense(30); + return true; +} + +bool Registration::create15DayLicense(void)const +{ + createLicense(15); + return true; +} + +bool Registration::createPermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + +License Registration::generatePermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + License license; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + license.fromString(strLicense); + return license; +} + +bool Registration::removeLicense(void) +{ + RegKey regKeyRegistration; + return regKeyRegistration.deleteKey(mRegistrationKeyName); +} + +bool Registration::createLicense(int days)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Expires,days); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + diff --git a/guitar/backup/20030502/registry.cpp b/guitar/backup/20030502/registry.cpp new file mode 100644 index 0000000..5924a77 --- /dev/null +++ b/guitar/backup/20030502/registry.cpp @@ -0,0 +1,190 @@ +#include +#include + +Registry::Registry(void) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mRegKeyHistory(RegKey::CurrentUser), + mSettingsAction(STRING_SETTINGSACTION), + mSettingsMicrosecondsPerQuarterNote(STRING_SETTINGSMICROSECONDSPERQUARTERNOTE), + mSettingsInstrument(STRING_SETTINGSINSTRUMENT), + mSettingsNoteLetters(STRING_SETTINGSNOTELETTERS), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT) +{ + guarantee(); + getCacheNames(); +} + +Registry::Registry(const Registry &someRegistry) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT), + mRegKeyHistory(RegKey::CurrentUser) +{ + *this=someRegistry; +} + +Registry::~Registry() +{ +} + +Registry &Registry::operator=(const Registry &/*registry*/) +{ + return *this; +} + +void Registry::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +void Registry::guarantee(void) +{ + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setShowAction(GlobalDefs::ShowAction); + setShowNotes(GlobalDefs::ShowNotes); + setMicrosecondsPerQuarterNote(GlobalDefs::MicrosecondsPerQuarterNote); + setInstrument(Instrument(GlobalDefs::Program)); + setMIDIOutputDevice("MIDIMAPPER"); + } +} + +bool Registry::isOkay(void)const +{ + return mRegKeyHistory.isOkay(); +} + +bool Registry::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool Registry::setHistory(Block &nameList) +{ + removeHistory(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;indexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Registry +{ +public: + Registry(void); + Registry(const Registry ®istry); + virtual ~Registry(); + Registry &operator=(const Registry ®istry); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool removeHistory(const String &strName); + bool getShowNotes(void); + void setShowNotes(bool showNoteLetters); + bool getShowAction(void)const; + void setShowAction(bool showAction); + int getMicrosecondsPerQuarterNote(void)const; + void setMicrosecondsPerQuarterNote(int microsecondsPerQuarterNote); + Instrument getInstrument(void)const; + void setInstrument(Instrument instrument); + String getMIDIOutputDevice(void)const; + void setMIDIOutputDevice(const String &midiOutputDevice); + bool isOkay(void)const; +private: + enum {MaxCachedNames=7}; + void guarantee(void); + void getCacheNames(void); + bool removeHistory(void); + + Block mCachedNames; + String mHistoryKeyName; + String mHistoryKeyShortName; + String mRegistryKeyName; + String mSettingsKeyName; + String mSettingsAction; + String mSettingsNoteLetters; + String mSettingsMicrosecondsPerQuarterNote; + String mSettingsInstrument; + String mSettingsMIDIOutput; + RegKey mRegKeyHistory; + RegKey mRegKeySettings; +}; +#endif diff --git a/guitar/backup/20030502/requirement.hpp b/guitar/backup/20030502/requirement.hpp new file mode 100644 index 0000000..f90c959 --- /dev/null +++ b/guitar/backup/20030502/requirement.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REQUIREMENT_HPP_ +#define _GUITAR_REQUIREMENT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Requirement; + +typedef SmartPointer PtrRequirement; + +class Requirement : public FrettedNote +{ +public: + Requirement(); + virtual ~Requirement(); + bool getSatisfied(void)const; + void setSatisfied(bool satisfied); + Requirement &operator=(const FrettedNote &frettedNote); +private: + bool mSatisfied; +}; + +inline +Requirement::Requirement() +: mSatisfied(false) +{ +} + +inline +Requirement::~Requirement() +{ +} + +inline +Requirement &Requirement::operator=(const FrettedNote &frettedNote) +{ + (FrettedNote&)*this=frettedNote; + return *this; +} + +inline +bool Requirement::getSatisfied(void)const +{ + return mSatisfied; +} + +inline +void Requirement::setSatisfied(bool satisfied) +{ + mSatisfied=satisfied; +} +#endif diff --git a/guitar/backup/20030502/requirements.cpp b/guitar/backup/20030502/requirements.cpp new file mode 100644 index 0000000..b5b6851 --- /dev/null +++ b/guitar/backup/20030502/requirements.cpp @@ -0,0 +1,77 @@ +#include +#include + +void Requirements::setRequirements(Block ¬es) +{ + size(notes.size()); + for(int index=0;index searchOrder; + + searchOrder.size(notePaths.size()); + for(int index=0;index sortOrder; + sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets + for(index=0;indexsetSatisfied(true); + satisfied=true; + break; + } + } + return satisfied; +} + +bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement) +{ + for(int index=0;indextoString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + if(requirement->getNote()==frettedNote.getNote()&& + requirement->getOctave()==frettedNote.getOctave()&& + !requirement->getSatisfied())return true; + } + return false; +} + +bool Requirements::haveRequirement(const FrettedNote &frettedNote) +{ + for(int index=0;index +#endif +#ifndef _GUITAR_ORDERING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTEPATH_HPP_ +#include +#endif +#ifndef _GUITAR_REQUIREMENT_HPP_ +#include +#endif + +class Requirements : public Array +{ +public: + Requirements(void); + Requirements(Block ¬es); + virtual ~Requirements(); + bool satisfyRequirements(NotePaths ¬ePaths); + void setRequirements(Block ¬es); +private: + bool satisfyRequirement(NotePath ¬ePath); + bool haveRequirement(const FrettedNote &frettedNote); + bool isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement); +}; + +inline +Requirements::Requirements(void) +{ +} + +inline +Requirements::Requirements(Block ¬es) +{ + setRequirements(notes); +} + +inline +Requirements::~Requirements() +{ +} +#endif diff --git a/guitar/backup/20030502/settingsdlg.cpp b/guitar/backup/20030502/settingsdlg.cpp new file mode 100644 index 0000000..24c95e5 --- /dev/null +++ b/guitar/backup/20030502/settingsdlg.cpp @@ -0,0 +1,251 @@ +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(void) +{ + mInitHandler.setCallback(this,&SettingsDialog::initHandler); + mCreateHandler.setCallback(this,&SettingsDialog::createHandler); + mCloseHandler.setCallback(this,&SettingsDialog::closeHandler); + mDestroyHandler.setCallback(this,&SettingsDialog::destroyHandler); + mCommandHandler.setCallback(this,&SettingsDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog::SettingsDialog(const SettingsDialog &someSettingsDialog) +{ // private implementation + *this=someSettingsDialog; +} + +SettingsDialog::~SettingsDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog &SettingsDialog::operator=(const SettingsDialog &someSettingsDialog) +{ // private implementation + return *this; +} + +bool SettingsDialog::perform(GUIWindow &parentWindow) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"SETTINGSDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SettingsDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + initialize(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType SettingsDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + apply(); + break; + case SETTINGS_DEFAULTS : + selectDefaults(); + } + if(someCallbackData.wmCommandCommand()==BN_CLICKED) + { + handleInstrumentSelect(someCallbackData); + } + return (CallbackData::ReturnType)FALSE; +} + +void SettingsDialog::initialize(void) +{ + Registry registry; + + selectTiming(registry.getMicrosecondsPerQuarterNote()); + selectInstrument(registry.getInstrument()); + selectAction(registry.getShowAction()); + selectShowNotes(registry.getShowNotes()); + selectMIDIOutputDevice(registry.getMIDIOutputDevice()); +} + +void SettingsDialog::handleInstrumentSelect(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case SETTINGS_ACOUSTICGRANDPIANO : + selectInstrument(AcousticGrandPiano); + break; + case SETTINGS_BRIGHTACOUSTICPIANO : + selectInstrument(BrightAcousticPiano); + break; + case SETTINGS_ELECTRICGRANDPIANO : + selectInstrument(ElectricGrandPiano); + break; + case SETTINGS_ACOUSTICNYLON : + selectInstrument(AcousticGuitarNylon); + break; + case SETTINGS_ACOUSTICSTEEL : + selectInstrument(AcousticGuitarSteel); + break; + case SETTINGS_JAZZELECTRIC : + selectInstrument(JazzGuitarElectric); + break; + case SETTINGS_CLEANELECTRIC : + selectInstrument(CleanGuitarElectric); + break; + case SETTINGS_MUTEDELECTRIC : + selectInstrument(MutedGuitarElectric); + break; + default : + break; + } +} + +void SettingsDialog::selectInstrument(Instrument instrument) +{ + if(AcousticGrandPiano==instrument)sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,0,0); + if(BrightAcousticPiano==instrument)sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,0,0); + if(ElectricGrandPiano==instrument)sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,0,0); + if(AcousticGuitarNylon==instrument)sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,0,0); + if(AcousticGuitarSteel==instrument)sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,0,0); + if(JazzGuitarElectric==instrument)sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,0,0); + if(CleanGuitarElectric==instrument)sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,0,0); + if(MutedGuitarElectric==instrument)sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,0,0); +} + +Instrument SettingsDialog::getInstrument(void) +{ + if(sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_GETCHECK,0,0))return AcousticGrandPiano; + if(sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_GETCHECK,0,0))return BrightAcousticPiano; + if(sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_GETCHECK,0,0))return ElectricGrandPiano; + if(sendMessage(SETTINGS_ACOUSTICNYLON,BM_GETCHECK,0,0))return AcousticGuitarNylon; + if(sendMessage(SETTINGS_ACOUSTICSTEEL,BM_GETCHECK,0,0))return AcousticGuitarSteel; + if(sendMessage(SETTINGS_JAZZELECTRIC,BM_GETCHECK,0,0))return JazzGuitarElectric; + if(sendMessage(SETTINGS_CLEANELECTRIC,BM_GETCHECK,0,0))return CleanGuitarElectric; + if(sendMessage(SETTINGS_MUTEDELECTRIC,BM_GETCHECK,0,0))return MutedGuitarElectric; + return Instrument(GlobalDefs::Program); +} + +bool SettingsDialog::getAction(void) +{ + return sendMessage(SETTINGS_SHOWACTION,BM_GETCHECK,0,0); +} + +bool SettingsDialog::getShowNotes(void) +{ + return sendMessage(SETTINGS_SHOWNOTES,BM_GETCHECK,0,0); +} + +int SettingsDialog::getTiming(void) +{ + String strText; + + getText(SETTINGS_MICROSECSPERQTRNOTE,strText); + return strText.toInt(); +} + +String SettingsDialog::getMIDIOutputDevice(void) +{ + int currentSelection; + String midiOutputDevice; + + currentSelection=sendMessage(SETTINGS_MIDIOUT,CB_GETCURSEL,0,0L); + sendMessage(SETTINGS_MIDIOUT,CB_GETLBTEXT,currentSelection,(LPARAM)midiOutputDevice.str()); + return midiOutputDevice; +} + +void SettingsDialog::selectDefaults() +{ + selectInstrument(Instrument(GlobalDefs::Program)); + selectTiming(GlobalDefs::MicrosecondsPerQuarterNote); + selectAction(GlobalDefs::ShowAction); + selectShowNotes(GlobalDefs::ShowNotes); +} + +void SettingsDialog::selectTiming(int timing) +{ + setText(SETTINGS_MICROSECSPERQTRNOTE,String().fromInt(timing)); +} + +void SettingsDialog::selectAction(bool action) +{ + sendMessage(SETTINGS_SHOWACTION,BM_SETCHECK,action,0); +} + +void SettingsDialog::selectShowNotes(bool showNotes) +{ + sendMessage(SETTINGS_SHOWNOTES,BM_SETCHECK,showNotes,0); +} + +void SettingsDialog::selectMIDIOutputDevice(const String &midiOutputDeviceName) +{ + Block deviceNames; + int currentSelection=-1; + + MIDIOutputDevice::getDeviceNames(deviceNames); + sendMessage(SETTINGS_MIDIOUT,CB_RESETCONTENT,0,0L); + deviceNames.insert(&String("MIDIMAPPER")); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class SettingsDialog : public DWindow +{ +public: + SettingsDialog(void); + virtual ~SettingsDialog(); + bool perform(GUIWindow &parentWindow); +private: + SettingsDialog(const SettingsDialog &someSettingsDialog); + SettingsDialog &operator=(const SettingsDialog &someSettingsDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void initialize(void); + void selectInstrument(Instrument instrument); + void selectDefaults(void); + void selectTiming(int timing); + void selectAction(bool action); + void selectShowNotes(bool showNotes); + void selectMIDIOutputDevice(const String &midiOutputDevice); + void handleInstrumentSelect(CallbackData &someCallbackData); + String getMIDIOutputDevice(void); + Instrument getInstrument(void); + bool getShowNotes(void); + bool getAction(void); + int getTiming(void); + void apply(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Point mDisplayPoint; +}; +#endif diff --git a/guitar/backup/20030502/smk b/guitar/backup/20030502/smk new file mode 100644 index 0000000..81191de --- /dev/null +++ b/guitar/backup/20030502/smk @@ -0,0 +1,424 @@ +Comparing files Action.hpp and ..\..\Action.hPP +FC: no differences encountered + +Comparing files BrowserHelper.cpp and ..\..\BrowserHelper.cPP +FC: no differences encountered + +Comparing files BrowserHelper.hpp and ..\..\BrowserHelper.hPP +FC: no differences encountered + +Comparing files ChordDlg.cpp and ..\..\ChordDlg.cPP +FC: no differences encountered + +Comparing files ChordDlg.hpp and ..\..\ChordDlg.hPP +FC: no differences encountered + +Comparing files chordmain.cpp and ..\..\chordmain.cPP +FC: no differences encountered + +Comparing files DragQueryFile.hpp and ..\..\DragQueryFile.hPP +FC: no differences encountered + +Comparing files Element.hpp and ..\..\Element.hPP +FC: no differences encountered + +Comparing files Fingering.cpp and ..\..\Fingering.cPP +FC: no differences encountered + +Comparing files Fingering.hpp and ..\..\Fingering.hPP +FC: no differences encountered + +Comparing files Fret.hpp and ..\..\Fret.hPP +FC: no differences encountered + +Comparing files Fretboard.cpp and ..\..\Fretboard.cPP +FC: no differences encountered + +Comparing files Fretboard.hpp and ..\..\Fretboard.hPP +FC: no differences encountered + +Comparing files FretDlg.cpp and ..\..\FretDlg.cPP +FC: no differences encountered + +Comparing files FretDlg.hpp and ..\..\FretDlg.hPP +FC: no differences encountered + +Comparing files FrettedBoundingNote.hpp and ..\..\FrettedBoundingNote.hPP +FC: no differences encountered + +Comparing files FrettedNote.hpp and ..\..\FrettedNote.hPP +FC: no differences encountered + +Comparing files FrettedNotes.cpp and ..\..\FrettedNotes.cPP +FC: no differences encountered + +Comparing files FretViewWnd.cpp and ..\..\FretViewWnd.cPP +FC: no differences encountered + +Comparing files FretViewWnd.hpp and ..\..\FretViewWnd.hPP +FC: no differences encountered + +Comparing files GlobalDefs.cpp and ..\..\GlobalDefs.cPP +FC: no differences encountered + +Comparing files GlobalDefs.hpp and ..\..\GlobalDefs.hPP +FC: no differences encountered + +Comparing files GUIFretboard.cpp and ..\..\GUIFretboard.cPP +***** GUIFretboard.cpp + frettedBoundingNote.setTextColor(smColorBlack); + + } +***** ..\..\GUIFretboard.cPP + frettedBoundingNote.setTextColor(smColorBlack); + } +***** + +***** GUIFretboard.cpp + chord.play(mSequencer->getDevice()); + ::Sleep(250); + scale.play(mSequencer->getDevice()); +***** ..\..\GUIFretboard.cPP + chord.play(mSequencer->getDevice()); + ::Sleep(Notes::DefaultDelay); + scale.play(mSequencer->getDevice()); +***** + +***** GUIFretboard.cpp + { + FrettedBoundingNote frettedBoundingNote=frettedBoundingNotes[index]; + frettedBoundingNote.setString(5-frettedBoundingNote.getString()); + ::OutputDebugString(frettedBoundingNote.toString()+String("\n")); + entry.insert(&frettedBoundingNote); + } +***** ..\..\GUIFretboard.cPP + { + FrettedBoundingNote frettedBoundingNote=frettedBoundingNotes[index]; // make a copy so we can + frettedBoundingNote.setString(5-frettedBoundingNote.getString()); // translate the string position + entry.insert(&frettedBoundingNote); // .. and insert into entry + } +***** + +Comparing files GUIFretboard.hpp and ..\..\GUIFretboard.hPP +FC: no differences encountered + +Comparing files guitar.hpp and ..\..\guitar.hPP +FC: no differences encountered + +Comparing files GuitarString.hpp and ..\..\GuitarString.hPP +FC: no differences encountered + +Comparing files Instrument.hpp and ..\..\Instrument.hPP +FC: no differences encountered + +Comparing files IntegerPair.hpp and ..\..\IntegerPair.hPP +FC: no differences encountered + +Comparing files license.cpp and ..\..\license.cPP +FC: no differences encountered + +Comparing files License.hpp and ..\..\License.hPP +FC: no differences encountered + +Comparing files LicenseDialog.cpp and ..\..\LicenseDialog.cPP +FC: no differences encountered + +Comparing files LicenseDialog.hpp and ..\..\LicenseDialog.hPP +FC: no differences encountered + +Comparing files LineParser.cpp and ..\..\LineParser.cPP +FC: no differences encountered + +Comparing files LineParser.hpp and ..\..\LineParser.hPP +FC: no differences encountered + +Comparing files main.cpp and ..\..\main.cPP +***** main.cpp + } + GlobalDefs::setLogLevel(GlobalDefs::NoLog); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameStrin +***** ..\..\main.cPP + } + GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameStrin +***** + +Comparing files mainfrm.cpp and ..\..\mainfrm.cPP +FC: no differences encountered + +Comparing files mainfrm.hpp and ..\..\mainfrm.hPP +FC: no differences encountered + +Comparing files MessageBox.hpp and ..\..\MessageBox.hPP +FC: no differences encountered + +Comparing files MIDIDialog.cpp and ..\..\MIDIDialog.cPP +FC: no differences encountered + +Comparing files MIDIDialog.hpp and ..\..\MIDIDialog.hPP +FC: no differences encountered + +Comparing files MIDIHelper.cpp and ..\..\MIDIHelper.cPP +FC: no differences encountered + +Comparing files MIDIHelper.hpp and ..\..\MIDIHelper.hPP +FC: no differences encountered + +Comparing files notepath.cpp and ..\..\notepath.cPP +FC: no differences encountered + +Comparing files notepath.hpp and ..\..\notepath.hPP +FC: no differences encountered + +Comparing files NoteType.cpp and ..\..\NoteType.cPP +FC: no differences encountered + +Comparing files NoteType.hpp and ..\..\NoteType.hPP +FC: no differences encountered + +Comparing files ordering.hpp and ..\..\ordering.hPP +FC: no differences encountered + +Comparing files Range.hpp and ..\..\Range.hPP +FC: no differences encountered + +Comparing files RangeDlg.cpp and ..\..\RangeDlg.cPP +FC: no differences encountered + +Comparing files RangeDlg.hpp and ..\..\RangeDlg.hPP +FC: no differences encountered + +Comparing files RangeEditDlg.cpp and ..\..\RangeEditDlg.cPP +FC: no differences encountered + +Comparing files RangeEditDlg.hpp and ..\..\RangeEditDlg.hPP +FC: no differences encountered + +Comparing files registration.cpp and ..\..\registration.cPP +FC: no differences encountered + +Comparing files Registration.hpp and ..\..\Registration.hPP +FC: no differences encountered + +Comparing files registry.cpp and ..\..\registry.cPP +FC: no differences encountered + +Comparing files registry.hpp and ..\..\registry.hPP +FC: no differences encountered + +Comparing files requirement.hpp and ..\..\requirement.hPP +FC: no differences encountered + +Comparing files requirements.cpp and ..\..\requirements.cPP +FC: no differences encountered + +Comparing files requirements.hpp and ..\..\requirements.hPP +FC: no differences encountered + +Comparing files ScaleDlg.cpp and ..\..\ScaleDlg.cPP +FC: no differences encountered + +Comparing files ScaleDlg.hpp and ..\..\ScaleDlg.hPP +FC: no differences encountered + +Comparing files ScrollInfo.cpp and ..\..\ScrollInfo.cPP +FC: no differences encountered + +Comparing files ScrollInfo.hpp and ..\..\ScrollInfo.hPP +FC: no differences encountered + +Comparing files Sequencer.hpp and ..\..\Sequencer.hPP +***** Sequencer.hpp +#endif + +***** ..\..\Sequencer.hPP +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +***** + +***** Sequencer.hpp +Sequencer::Sequencer() +{ + changeProgram(); +***** ..\..\Sequencer.hPP +Sequencer::Sequencer() +: MIDIOutputDevice(Registry().getMIDIOutputDevice()) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::Sequencer] Sequencer()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + changeProgram(); +***** + +***** Sequencer.hpp +{ + closeDevice(); +***** ..\..\Sequencer.hPP +{ + GlobalDefs::outDebug("[Sequencer::Sequencer] Sequencer()",GlobalDefs::Info); + closeDevice(); +***** + +***** Sequencer.hpp +{ + return MIDIOutputDevice::midiEvent(somePureEvent); +***** ..\..\Sequencer.hPP +{ + GlobalDefs::outDebug(String("[Sequencer::midiEvent] ")+somePureEvent.toString(),GlobalDefs::Info); + return MIDIOutputDevice::midiEvent(somePureEvent); +***** + +***** Sequencer.hpp +{ + return MIDIOutputDevice::hasDevice(); +***** ..\..\Sequencer.hPP +{ + GlobalDefs::outDebug(String("[Sequencer::hasDevice] "),GlobalDefs::Info); + return MIDIOutputDevice::hasDevice(); +***** + +***** Sequencer.hpp +{ + MIDIOutputDevice::closeDevice(); +***** ..\..\Sequencer.hPP +{ + GlobalDefs::outDebug(String("[Sequencer::closeDevice] "),GlobalDefs::Info); + MIDIOutputDevice::closeDevice(); +***** + +***** Sequencer.hpp + + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; +// if(!MIDIOutputDevice::openDevice())return false; + changeProgram(); +***** ..\..\Sequencer.hPP + + GlobalDefs::outDebug(String("[Sequencer::openDevice] registry.getMIDIOutputDevice()")+registry.getMIDIOutputDevice(),GlobalDe +s::Info); + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; + changeProgram(); +***** + +***** Sequencer.hpp +{ + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +***** ..\..\Sequencer.hPP +{ + GlobalDefs::outDebug(String("[Sequencer::clearNotes]"),GlobalDefs::Info); + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +***** + +***** Sequencer.hpp +{ + if(!hasDevice()) +***** ..\..\Sequencer.hPP +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::getDevice]"),GlobalDefs::Info); + if(!hasDevice()) +***** + +***** Sequencer.hpp + { + openDevice(); + changeProgram(); +***** ..\..\Sequencer.hPP + { + GlobalDefs::outDebug(String("[Sequencer::getDevice] OpenDevice"),GlobalDefs::Info); + MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()); + changeProgram(); +***** + +***** Sequencer.hpp + Registry registry; + midiEvent(ProgramChange(registry.getInstrument()).getEvent()); +***** ..\..\Sequencer.hPP + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::changeProgram]"),GlobalDefs::Info); + midiEvent(ProgramChange(registry.getInstrument()).getEvent()); +***** + +Comparing files settingsdlg.cpp and ..\..\settingsdlg.cPP +FC: no differences encountered + +Comparing files settingsdlg.hpp and ..\..\settingsdlg.hPP +FC: no differences encountered + +Comparing files splash.cpp and ..\..\splash.cPP +FC: no differences encountered + +Comparing files splash.hpp and ..\..\splash.hPP +FC: no differences encountered + +Comparing files tabdlg.cpp and ..\..\tabdlg.cPP +FC: no differences encountered + +Comparing files tabdlg.hpp and ..\..\tabdlg.hPP +FC: no differences encountered + +Comparing files TabEntry.cpp and ..\..\TabEntry.cPP +FC: no differences encountered + +Comparing files TabEntry.hpp and ..\..\TabEntry.hPP +FC: no differences encountered + +Comparing files tablature.cpp and ..\..\tablature.cPP +FC: no differences encountered + +Comparing files Tablature.hpp and ..\..\Tablature.hPP +FC: no differences encountered + +Comparing files TabLines.cpp and ..\..\TabLines.cPP +FC: no differences encountered + +Comparing files TabLines.hpp and ..\..\TabLines.hPP +FC: no differences encountered + +Comparing files tabpage.cpp and ..\..\tabpage.cPP +FC: no differences encountered + +Comparing files tabpage.hpp and ..\..\tabpage.hPP +FC: no differences encountered + +Comparing files TabView.cpp and ..\..\TabView.cPP +FC: no differences encountered + +Comparing files TabView.hpp and ..\..\TabView.hPP +FC: no differences encountered + +Comparing files TabWriter.cpp and ..\..\TabWriter.cPP +FC: no differences encountered + +Comparing files TabWriter.hpp and ..\..\TabWriter.hPP +FC: no differences encountered + +Comparing files Timing.cpp and ..\..\Timing.cPP +FC: no differences encountered + +Comparing files Timing.hpp and ..\..\Timing.hPP +FC: no differences encountered + +Comparing files Tuning.cpp and ..\..\Tuning.cPP +FC: no differences encountered + +Comparing files Tuning.hpp and ..\..\Tuning.hPP +FC: no differences encountered + +Comparing files uutool.cpp and ..\..\uutool.cPP +FC: no differences encountered + +Comparing files uutool.hpp and ..\..\uutool.hPP +FC: no differences encountered + +Comparing files viewwnd.cpp and ..\..\viewwnd.cPP +FC: no differences encountered + +Comparing files viewwnd.hpp and ..\..\viewwnd.hPP +FC: no differences encountered + +Comparing files wininfo.hpp and ..\..\wininfo.hPP +FC: no differences encountered + diff --git a/guitar/backup/20030502/splash.cpp b/guitar/backup/20030502/splash.cpp new file mode 100644 index 0000000..5d5c336 --- /dev/null +++ b/guitar/backup/20030502/splash.cpp @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mStrTitle(strTitle), mTimeout(timeout), + mTextFont("Helv",8,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mLeftButtonHandler.setCallback(this,&SplashScreen::leftButtonHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|0x04|WS_CLIPSIBLINGS|WS_DLGFRAME; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)"Splash",style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::leftButtonHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIB24(); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->create(mResBitmap->width(),mResBitmap->height(),*mPureDevice); + mDIBitmap->copyBits(*mResBitmap); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + WinInfo winInfo; + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + mDIBitmap->bitBlt(pureDevice,Rect(0,0,width(),height()),Point()); + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); + pureDevice.textOut(5,200,mStrCaption); + showLicense(pureDevice); + + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(1,60,String("Windows version:")+winInfo.strProductName()+String(" ")+winInfo.strVersion()); // add 15 + pureDevice.textOut(1,75,String("Registered owner:")+winInfo.strRegisteredOwner()); + pureDevice.textOut(1,90,String("OEM:")+winInfo.strProductID()); + + if(!mStrTitle.isNull()) + { + Font mFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold); + pureDevice.select((GDIObj)mFont,TRUE); + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(12,10,mStrTitle); + pureDevice.select((GDIObj)mFont,FALSE); + } + return (CallbackData::ReturnType)FALSE; +} + +void SplashScreen::showLicense(PureDevice &pureDevice) +{ + pureDevice.setTextColor(RGBColor(255,255,255)); + if(Registration::getInstance().hasLicense()) + { + License license; + Registration::getInstance().getLicense(license); + if(license.isValid()) + { +// if(license.isExpiring())pureDevice.textOut(1,250,String("License will expire in ")+String().fromInt(license.getRemainingDays())+String(" days.")); +// if(license.isExpiring())pureDevice.textOut(1,250,String("You are on day ")+String().fromInt(license.getDay())+String(" of your ")+String().fromInt(license.getDayCount())+String(" day license.")); + if(license.isExpiring())pureDevice.textOut(1,250,String("This version of TabMaster requires a permanent license.")); + else pureDevice.textOut(1,250,"Permanent license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} diff --git a/guitar/backup/20030502/splash.hpp b/guitar/backup/20030502/splash.hpp new file mode 100644 index 0000000..2b3066d --- /dev/null +++ b/guitar/backup/20030502/splash.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_SPLASHSCREEN_HPP_ +#define _GUITAR_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIB24; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=5000}; + SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + void showLicense(PureDevice &pureDevice); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + Callback mLeftButtonHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mStrTitle; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030502/tabdlg.cpp b/guitar/backup/20030502/tabdlg.cpp new file mode 100644 index 0000000..f23a2c8 --- /dev/null +++ b/guitar/backup/20030502/tabdlg.cpp @@ -0,0 +1,151 @@ +#include +#include +#include + +TabDialog::TabDialog(void) +: mCurrEntryIndex(0) +{ + mInitHandler.setCallback(this,&TabDialog::initHandler); + mCreateHandler.setCallback(this,&TabDialog::createHandler); + mCloseHandler.setCallback(this,&TabDialog::closeHandler); + mDestroyHandler.setCallback(this,&TabDialog::destroyHandler); + mCommandHandler.setCallback(this,&TabDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog::TabDialog(const TabDialog &someTabDialog) +{ // private implementation + *this=someTabDialog; +} + +TabDialog::~TabDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog &TabDialog::operator=(const TabDialog &someTabDialog) +{ // private implementation + return *this; +} + +bool TabDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + return ::DialogBoxParam(processInstance(),(LPSTR)"TABDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType TabDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mTabEntryList=::new OwnerDrawListAltColor(*this,getItem(TABENTRY_LIST),TABENTRY_LIST); + mTabEntryList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(15)); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(50)); + mTabEntryList->setTabStops(stops); + setTypes(); + + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexinsertString(strLine); + } + mTabEntryList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void TabDialog::setTypes() +{ + Array notes; + sendMessage(TABENTRY_NOTETYPE,CB_RESETCONTENT,0,0L); + notes=NoteType::enumerate(); + int currSel=-1; + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); + } +} + + + + + diff --git a/guitar/backup/20030502/tabdlg.hpp b/guitar/backup/20030502/tabdlg.hpp new file mode 100644 index 0000000..e5a79e4 --- /dev/null +++ b/guitar/backup/20030502/tabdlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_TABDLG_HPP_ +#define _GUITAR_TABDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class TabDialog : public DWindow +{ +public: + TabDialog(void); + virtual ~TabDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex); +private: + TabDialog(const TabDialog &someTabDialog); + TabDialog &operator=(const TabDialog &someTabDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTypes(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + SmartPointer mTabEntryList; +}; +#endif diff --git a/guitar/backup/20030502/tablature.cpp b/guitar/backup/20030502/tablature.cpp new file mode 100644 index 0000000..4e111c3 --- /dev/null +++ b/guitar/backup/20030502/tablature.cpp @@ -0,0 +1,417 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TabEntries &Tablature::getTabEntries(void)const +{ + return mTabEntries; +} + +void Tablature::setTabEntries(const TabEntries &entries) +{ + mTabEntries.remove(); + for(int index=0;index=mTabEntries.size()) + { + GlobalDefs::outDebug("[Tablature::setTypeAt] index out of bounds : "+String().fromInt(index)); + return false; + } + mTabEntries[index].setNoteType(noteType); + return true; +} + +bool Tablature::open(const String &pathFileTablature) +{ + mLastError=None; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=pathFileTablature.betweenString(0,'.')+String(STRING_PRJEXTENSION); + if(!loadTabFile(pathFileTablature))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + return true; +} + +bool Tablature::import(String pathFileTablature) +{ + mLastError=None; + String strExtension; + String pathFileTablatureImport; + + pathFileTablatureImport=pathFileTablature; + strExtension=Profile::getExtension(pathFileTablature); + strExtension.lower(); + if(strExtension.isNull()||!(strExtension==String(STRING_TABEXTENSION)))return false; + pathFileTablature=Profile::removeExtension(pathFileTablature); + pathFileTablature+=String("_imp")+strExtension; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=getPathFileProject(pathFileTablatureImport); + if(!loadTabFile(pathFileTablatureImport))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + saveAs(pathFileTablature); + return true; +} + +String Tablature::getPathFileProject(const String &pathFileTablature) +{ + return Profile::removeExtension(pathFileTablature)+String(STRING_PRJEXTENSION); +} + +bool Tablature::saveAs(const String &pathFileTablature) +{ + TabWriter tabWriter; + if(pathFileTablature.isNull())return false; + return tabWriter.write(mTabEntries,pathFileTablature); +} + +bool Tablature::save(void) +{ + if(mPathFileTablature.isNull())return false; + return saveAs(mPathFileTablature); +} + +bool Tablature::openProject(const String &pathFileName) +{ + DiskInfo diskInfo; + File inFile; + String strLine; + String strDirectory; + + mPathFileProject=pathFileName; + strDirectory=mPathFileProject; + Profile::makeDirectoryName(strDirectory); + if(!diskInfo.setCurrentDirectory(strDirectory)||!inFile.open(pathFileName)) + { + mLastError=FileOpenError; + return false; + } + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + MessageBox::messageBox("Project does not contain a reference to any tablature.",strLine); + return false; + } + if(!open(strLine))return false; + while(inFile.readLine(strLine)) + { + if(strLine.betweenString(0,'=')==String("TYPES"))parseTypes(strLine); + else if(strLine.betweenString(0,'=')==String("RANGE"))parseRange(strLine); + } + return true; +} + +bool Tablature::saveProject(const String &pathFileName) +{ + File outFile; + + if(!pathFileName.isNull())mPathFileProject=pathFileName; + if(mPathFileProject.isNull())return false; + if(!outFile.open(mPathFileProject,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mPathFileName.isNull())mPathFileName=Profile::removeExtension(mPathFileProject)+String(STRING_TABEXTENSION); + outFile.writeLine(String("TABLATURE=")+mPathFileName); + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;indexlength)continue; + if(isTabLine(strLine,startElement)) + { + mTablature.insert(&TabLines()); + TabLines &tabLines=mTablature[mTablature.size()-1]; + tabLines[0]=strLine.substr(startElement); + for(int string=1;string<6;string++,line++) + { + if(!inFile.readLine(strLine))break; + tabLines[string]=strLine.substr(startElement); + } + } + } + GlobalDefs::outDebug(String("[Tablature::loadTabFile] ")+String().fromInt(mTablature.size())+String(" tabs, in ")+String().fromInt((::GetTickCount()-elapsedTime)/1000)+String(" seconds.")); + if(mTablature.size())return true; + mLastError=NoTabsParsedError; + return false; +} + +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0; + char charAt1; + char charAt2; + char charAt3; + char charAt4; + char lastChar; + + if(!lineLength)return false; + charAt0=lineLength?strLine.charAt(0):0; + charAt1=lineLength>=1?strLine.charAt(1):0; + charAt2=lineLength>=2?strLine.charAt(2):0; + charAt3=lineLength>=3?strLine.charAt(3):0; + charAt4=lineLength>=4?strLine.charAt(4):0; + lastChar=lineLength?strLine.charAt(lineLength-1):0; + + if((charAt0=='e'||charAt0=='E')&&(charAt1==':'||charAt1=='|')) + { + startElement=2; + return true; + } + if(charAt0=='|'&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==':'&&(::isalnum(charAt1)||charAt1=='-')) + { + startElement=1; + return true; + } + if(charAt0==':'&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0=='-') + { + startElement=0; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' '&&charAt4=='|') + { + startElement=5; + return true; + } + if(charAt0==' '&&charAt1=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='I'&&charAt3=='-') + { + startElement=3; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==']'&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==':'&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(::isdigit(charAt0)&&(lastChar=='-'||lastChar=='|')) + { + startElement=0; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2==' '&&charAt3=='|') + { + startElement=3; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' ') + { + startElement=4; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&(charAt2=='|'||charAt2=='+')&&charAt3=='-') + { + startElement=3; + return true; + } + return false; +} diff --git a/guitar/backup/20030502/tabpage.cpp b/guitar/backup/20030502/tabpage.cpp new file mode 100644 index 0000000..3e4dd3a --- /dev/null +++ b/guitar/backup/20030502/tabpage.cpp @@ -0,0 +1,983 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TabPage::TabPage(ViewWindow &parent) +: mItemsPerTab(0), mNumTabs(0), mCharWidth(0), mOutlinePen(RGBColor(0,0,0),Pen::PDot) , + mDrawFont("Courier New",10), mHasFocus(false), mIsCancelled(false), mIsInPlay(false), + mIsPaused(false), mIsDirty(false), mKeepOutline(false), mCurrEntryIndex(0), mIsInSetRange(false) +{ + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + mSizeHandler.setCallback(this,&TabPage::sizeHandler); + mPaintHandler.setCallback(this,&TabPage::paintHandler); + mVerticalScrollHandler.setCallback(this,&TabPage::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&TabPage::horizontalScrollHandler); + mLeftButtonUpHandler.setCallback(this,&TabPage::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&TabPage::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&TabPage::mouseMoveHandler); + mKillFocusHandler.setCallback(this,&TabPage::killFocusHandler); + mSetFocusHandler.setCallback(this,&TabPage::setFocusHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabPage::leftButtonDoubleHandler); + mKeyDownHandler.setCallback(this,&TabPage::keyDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent=&parent; + mParent.disposition(PointerDisposition::Assume); + mScrollInfo.hwndOwner(parent); + createBitmap(parent); +} + +TabPage::TabPage(const TabPage &/*someTabPage*/) +{ // private implementation +} + +TabPage::~TabPage() +{ + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); +} + +bool TabPage::insert(const TabRanges &ranges) +{ + GlobalDefs::outDebug("[TabPage::insert]TabRanges",GlobalDefs::Debug); + if(!ranges.size())return false; + for(int index=0;indexsetBits(BkColorBits); + drawTabPage(); + drawEntries(); + cursorControl.waitCursor(false); + mScrollInfo.scrollableObjectDimensions(mDIBitmap->width(),mDIBitmap->height()); + elapsedTime=(::GetTickCount()-elapsedTime)/1000; + GlobalDefs::outDebug(String("[TabPage::createBitmap]took ")+String().fromInt(elapsedTime)+String(" seconds."),GlobalDefs::Debug); + return mDIBitmap.isOkay(); +} + +bool TabPage::drawEntries(const RGBColor &rgbColor) +{ + Point p1; + Point p2; + String strFret; + Registry registry; + bool showAction(registry.getShowAction()); + + if(!isOkay())return false; + GlobalDefs::outDebug(String("[TabPage::drawEntries]"),GlobalDefs::Debug); + PureDevice &pureDevice=mDIBitmap->getDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + for(int entryIndex=0;entryIndexgetDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + Point p1=getEntryPoint(entryIndex); + Point p2; + TabEntry &entry=mTabEntries[entryIndex]; + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} + +bool TabPage::clearUpdate(void) +{ + GlobalDefs::outDebug(String("[TabPage::clearUpdate]"),GlobalDefs::Debug); + if(!isOkay())return false; + if(!mOverlay.isOkay())return false; + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + mOverlay.destroy(); + return true; +} + +bool TabPage::getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(outlineRect.ptInRect(mousePoint)) + { + entryIndex=index; + return true; + } + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getNearestString(const Point &clickPoint,int &nearestString) +{ + Rect outlineRect; + map distanceMap; + + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return false; + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + distanceMap[abs(clickPoint.y()-outlineRect.top())]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=1; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=0; + nearestString=(*distanceMap.begin()).second; + return true; +} + +Point TabPage::getEntryPoint(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getEntryPoint]"),GlobalDefs::Debug); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return xyPoint; +} + +bool TabPage::showCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + mOverlay.destroy(); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + isInOutline(true); + mParent->clientRect(clientRect); + bringOutlineIntoView(outlineRect,clientRect); + this->outlineRect(outlineRect); + showFretEntry(mTabEntries[mCurrEntryIndex]); + return true; +} + +bool TabPage::drawTabPage(void) +{ + int yStart=TopMargin; + int xStart=0; + int elapsedTime; + + GlobalDefs::outDebug(String("[TabPage::drawTabPage]"),GlobalDefs::Debug); + elapsedTime=::GetTickCount(); + if(!getNumTabs())drawTab(LeftMargin,RightMargin,xStart,yStart,TabSpacing,TabLines); // draw at least one + for(int index=0;indexline(Point(marginLeft-1,yStart),Point(marginLeft-1,1+yStart+((lineCount-1)*spacing)),TabLineColor); + for(int line=0;lineline(Point(xPos,yPos),Point(mDIBitmap->width()-marginRight,yPos),TabLineColor); + yPos+=spacing; + } + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point(mDIBitmap->width()-marginRight,1+yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point((mDIBitmap->width()-marginRight)+2,yStart),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart+((lineCount-1)*spacing)),Point((mDIBitmap->width()-marginRight)+2,yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point((mDIBitmap->width()-marginRight)+2,yStart),Point((mDIBitmap->width()-marginRight)+2,1+yStart+((lineCount-1)*spacing)),TabLineColor); + return yStart+((lineCount-1)*spacing); +} + +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + + GlobalDefs::outDebug(String("[TabPage::getDimensions]"),GlobalDefs::Debug); + setItemsPerTab(((guiWindow.width())-(RightMargin+LeftMargin))/getCharWidth()); + setNumTabs((mTabEntries.size()/getItemsPerTab())); + setNumTabs(getNumTabs()+(mTabEntries.size()%getItemsPerTab()?1:0)); + if(!getNumTabs())gdiPoint.y(TopMargin+((TabHeight+TabSeparator))); + else gdiPoint.y(TopMargin+(getNumTabs()*(TabHeight+TabSeparator))); + gdiPoint.x(guiWindow.width()); + GlobalDefs::outDebug(String("[TabPage::getDimensions]ItemsPerTab:")+String().fromInt(getItemsPerTab())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]NumTabs:")+String().fromInt(getNumTabs())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]AvgCharWidth:")+String().fromInt(getCharWidth())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmWidth:")+String().fromInt(gdiPoint.x())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmHeight:")+String().fromInt(gdiPoint.y())); + return getNumTabs(); +} + +int TabPage::getWidestEntry(PureDevice &pureDevice)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + GlobalDefs::outDebug(String("[TabPage::getWidestEntry]"),GlobalDefs::Debug); + if(!mTabEntries.size())return MinCharWidth; + widestEntry=0; + for(int entryIndex=0;entryIndexwidestEntry)widestEntry=sizeStruct.cx; + } + } + return widestEntry*2; +} + +void TabPage::bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + GlobalDefs::outDebug(String("[TabPage::bitBlt]"),GlobalDefs::Debug); + if(!mDIBitmap.isOkay())return; + mDIBitmap->usePalette(pureDevice,true); // the usePalette code can be removed... + mDIBitmap->bitBlt(pureDevice,dstRect,srcPoint); // but needs test on Win '98 first + mDIBitmap->usePalette(pureDevice,false); +} + +void TabPage::invalidate(Rect rect) +{ + GlobalDefs::outDebug(String("[TabPage::invalidate]"),GlobalDefs::Debug); + rect.left(rect.left()-mScrollInfo.currScrollx()); + rect.top(rect.top()-mScrollInfo.currScrolly()); + rect.right(rect.right()-mScrollInfo.currScrollx()); + rect.bottom(rect.bottom()-mScrollInfo.currScrollx()); + mParent->invalidate(rect,false); +} + +void TabPage::bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect) +{ + GlobalDefs::outDebug(String("[TabPage::bringOutlineIntoView]"),GlobalDefs::Debug); + if(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + while(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + if(!mScrollInfo.pageDown())break; + } + } + else if(outlineRect.top()clientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::play(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::play]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::playFromCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::playFromCurrent]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=mCurrEntryIndex;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +void TabPage::showFretEntry(const TabEntry &entry) +{ + GlobalDefs::outDebug(String("[TabPage::showFretEntry]"),GlobalDefs::Debug); + if(!mPlayNoteHandler.isOkay())return; + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void TabPage::setStartRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setStartRange]"),GlobalDefs::Debug); + isInSetRange(true); + mCurrRange.setBeginRange(mCurrEntryIndex); +} + +void TabPage::setEndRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setEndRange]"),GlobalDefs::Debug); + isInSetRange(false); + mCurrRange.setEndRange(mCurrEntryIndex); + mCurrRange.autoName(); + mTabRanges.insert(&mCurrRange); + isDirty(true); + GlobalDefs::outDebug(mCurrRange.toString()); +} + +void TabPage::cut(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::cut]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + mParent->enablePaste(true); + if(!mTabEntries.size())mParent->enableCut(false); + showCurrent(); +} + +void TabPage::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::copy]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mParent->enablePaste(true); +} + +bool TabPage::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::paste] Current position is ")+String().fromInt(mCurrEntryIndex),GlobalDefs::Debug); + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return false; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return false; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return false; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return false; + entry.fromString(strText.betweenString(']',0)); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else mTabEntries.insertAfter(mCurrEntryIndex,&entry); + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +// ********************************************************************************************* +// callback handlers + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::sizeHandler]ENTER",GlobalDefs::Verbose); + if(isInPlay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Pausing play...",GlobalDefs::Debug); + isPaused(true); + } + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + if(!sizePoint.x()||!sizePoint.y()) + { + if(isInPlay())isPaused(false); + return false; + } + clearUpdate(); + if(!update(*mParent)) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + + return false; + } + if(!mDIBitmap.isOkay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + return false; + } + if(isInPlay())isPaused(false); + GlobalDefs::outDebug("[TabPage::sizeHandler]LEAVE",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::paintHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::paintHandler]",GlobalDefs::Verbose); + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(!mDIBitmap.isOkay())return false; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + bitBlt(paintDevice,Rect(0,0,getWidth(),getHeight()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + bitBlt(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType TabPage::verticalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::verticalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleVerticalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::horizontalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::horizontalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleHorizontalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDoubleHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + Point mousePoint; + int selectedString; + Rect outlineRect; + int entryIndex; + + mousePoint.x(someCallbackData.loWord()+mScrollInfo.currScrollx()); + mousePoint.y(someCallbackData.hiWord()+mScrollInfo.currScrolly()); + if(!getOutlineRect(mousePoint,entryIndex,outlineRect))return false; + if(!getNearestString(mousePoint,selectedString))return false; + getFretEntry(selectedString); + return false; +} + +bool TabPage::getFretEntry(int selectedString) +{ + FretDialog fretDialog; + bool returnCode=false; + + keepOutline(true); + if((returnCode=fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex))) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return returnCode; +} + +CallbackData::ReturnType TabPage::leftButtonUpHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonUpHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::setFocusHandler]",GlobalDefs::Verbose); + hasFocus(true); + if(Clipboard::hasData(GlobalDefs::getRegisteredClipboardFormat()))mParent->enablePaste(true); + else mParent->enablePaste(false); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new Sequencer(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// showCurrent(); // smk +// mParent->setCapture(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::killFocusHandler]",GlobalDefs::Verbose); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + isInOutline(false); + clearUpdate(); + } + mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug("[TabPage::mouseMoveHandler]",GlobalDefs::Verbose); + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + mParent->releaseCapture(); + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + mParent->enableCut(true); + mParent->enableCopy(true); + mCurrEntryIndex=entryIndex; + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); +// mCurrEntryIndex=-1; smk + } + return false; +} + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + clearUpdate(); + showCurrent(); + } + return false; +} \ No newline at end of file diff --git a/guitar/backup/20030502/tabpage.hpp b/guitar/backup/20030502/tabpage.hpp new file mode 100644 index 0000000..2af722c --- /dev/null +++ b/guitar/backup/20030502/tabpage.hpp @@ -0,0 +1,395 @@ +#ifndef _GUITAR_TABPAGE_HPP_ +#define _GUITAR_TABPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _GUITAR_SCROLLINFO_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class GUIWindow; +class ViewWindow; + +class TabPage +{ +public: + TabPage(ViewWindow &parent); + virtual ~TabPage(); + bool insert(const TabEntries &entries); + bool insert(const TabRanges &ranges); + bool update(GUIWindow &guiWindow); + bool play(void); + bool playRange(int rangeIndex); + bool playFromCurrent(void); + void cut(void); + void copy(void); + bool paste(void); + bool modifyProperties(void); + bool increaseTempo(void); + bool decreaseTempo(void); + bool getCancelled(void)const; + void setCancelled(bool cancelled); + bool isInPlay(void)const; + bool isPaused(void)const; + int getWidth(void)const; + int getHeight(void)const; + const TabEntries &getEntries(void)const; + const TabRanges &getRanges(void)const; + void setRanges(const TabRanges &ranges); + bool hasRange(void)const; + void setPlayNoteHandler(CallbackPointer &callbackPointer); + void setStartRange(void); + void setEndRange(void); + bool isDirty(void)const; + void isDirty(bool isDirty); + bool isInOutline(void)const; + bool isInSetRange(void)const; + void isInSetRange(bool isInSetRange); + void setStatusControlRef(SmartPointer &statusBar); + bool isOkay(void)const; +private: + enum {BkColorBits=255,TabLineColor=0}; + enum {LeftMargin=10,RightMargin=10,TopMargin=10,TabLines=6,TabSpacing=10,TabHeight=TabLines*TabSpacing, + TabSeparator=20,CharSpacing=3,TabClearance=3,MinCharWidth=16}; + enum {RightArrow=0x27,LeftArrow=0x25,DownArrow=0x28,UpArrow=0x26,Insert=0x2D,Home=0x24,End=0x23,Delete=0x2E}; + TabPage(const TabPage &someTabPage); + TabPage &operator=(const TabPage &someTabPage); + int drawTab(int marginLeft,int marginRight,int xPos,int yPos,int spacing,int lineCount); + void getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const; + void bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + void bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect); + bool drawEntry(int entryIndex,const RGBColor &rgbColor=RGBColor(0,0,0)); + bool getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect); + bool getNearestString(const Point &clickPoint,int &nearestString); + bool drawEntries(const RGBColor &rgbColor=RGBColor(0,0,0)); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool getOutlineRect(int entryIndex,Rect &outlineRect); + int getWidestEntry(PureDevice &pureDevice)const; + bool getFretEntry(int selectedString=0); + bool createBitmap(GUIWindow &someGUIWindow); + bool outlineRect(const Rect &outlineRect); + Point getEntryPoint(int entryIndex); + bool drawTabPage(void); + void setItemsPerTab(int itemsPerTab); + void setNumTabs(int numTabs); + void setCharWidth(int charWidth); + int getNumEntries(void)const; + int getNumTabs(void)const; + int getItemsPerTab(void)const; + int getCharWidth(void)const; + void invalidate(Rect rect); + void isInOutline(bool isInOutline); + bool clearUpdate(void); + bool hasFocus(void)const; + void hasFocus(bool hasFocus); + void isInPlay(bool isInPlay); + void isPaused(bool isPaused); + void showFretEntry(const TabEntry &entry); + void setStatusText(const String &statusText); + void keepOutline(bool keepOutline); + bool keepOutline(void)const; + bool showCurrent(void); + + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mKillFocusHandler; + Callback mSetFocusHandler; + Callback mLeftButtonDoubleHandler; + Callback mKeyDownHandler; + + CallbackPointer mPlayNoteHandler; + TabEntries mTabEntries; + TabRanges mTabRanges; + SmartPointer mDIBitmap; + SmartPointer mOverlay; + SmartPointer mParent; + SmartPointer mMIDIDevice; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + + Rect mPrevOutlineRect; + Pen mOutlinePen; + int mNumTabs; + int mItemsPerTab; + int mCharWidth; + + bool mIsInOutline; + bool mHasFocus; + bool mIsCancelled; + bool mIsInPlay; + bool mIsPaused; + bool mIsDirty; + bool mKeepOutline; + + bool mIsInSetRange; + Range mCurrRange; + int mCurrEntryIndex; + Font mDrawFont; +}; + +inline +TabPage &TabPage::operator=(const TabPage &/*someTabPage*/) +{ // private implementation + return *this; +} + +inline +int TabPage::getNumEntries(void)const +{ + return mTabEntries.size(); +} + +inline +void TabPage::getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const +{ + pureDevice.getTextExtentPoint32(((String&)string).str(),&sizeStruct); +} + +inline +int TabPage::getWidth(void)const +{ + return ((SmartPointer&)mDIBitmap)->width(); +} + +inline +int TabPage::getHeight(void)const +{ + return ((SmartPointer&)mDIBitmap)->height(); +} + +inline +int TabPage::getNumTabs(void)const +{ + return mNumTabs; +} + +inline +void TabPage::setNumTabs(int numTabs) +{ + mNumTabs=numTabs; +} + +inline +int TabPage::getCharWidth(void)const +{ + return mCharWidth; +} + +inline +void TabPage::setCharWidth(int charWidth) +{ + mCharWidth=charWidth; +} + +inline +int TabPage::getItemsPerTab(void)const +{ + return mItemsPerTab; +} + +inline +void TabPage::setItemsPerTab(int itemsPerTab) +{ + mItemsPerTab=itemsPerTab; +} + +inline +void TabPage::isInOutline(bool isInOutline) +{ + mIsInOutline=isInOutline; +} + +inline +bool TabPage::isInOutline(void)const +{ + return mIsInOutline; +} + +inline +bool TabPage::hasFocus(void)const +{ + return mHasFocus; +} + +inline +void TabPage::hasFocus(bool hasFocus) +{ + mHasFocus=hasFocus; +} + +inline +bool TabPage::getCancelled(void)const +{ + return mIsCancelled; +} + +inline +void TabPage::setCancelled(bool cancelled) +{ + mIsCancelled=cancelled; +} + +inline +bool TabPage::isInPlay(void)const +{ + return mIsInPlay; +} + +inline +void TabPage::isInPlay(bool isInPlay) +{ + mIsInPlay=isInPlay; +} + +inline +bool TabPage::isPaused(void)const +{ + return mIsPaused; +} + +inline +void TabPage::isPaused(bool isPaused) +{ + mIsPaused=isPaused; +} + +inline +void TabPage::setPlayNoteHandler(CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; +} + +inline +const TabEntries &TabPage::getEntries(void)const +{ + return mTabEntries; +} + +inline +const TabRanges &TabPage::getRanges(void)const +{ + return mTabRanges; +} + +inline +bool TabPage::hasRange(void)const +{ + return mTabRanges.size()?true:false; +} + +inline +bool TabPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void TabPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +void TabPage::keepOutline(bool keepOutline) +{ + GlobalDefs::outDebug(String("[TabPage::keepOutline]")+(keepOutline?String("true"):String("false")),GlobalDefs::Debug); + mKeepOutline=keepOutline; +} + +inline +bool TabPage::keepOutline(void)const +{ + return mKeepOutline; +} + +inline +bool TabPage::isInSetRange(void)const +{ + return mIsInSetRange; +} + +inline +void TabPage::isInSetRange(bool isInSetRange) +{ + mIsInSetRange=isInSetRange; +} + +inline +void TabPage::setRanges(const TabRanges &ranges) +{ + mTabRanges=ranges; + isDirty(true); +} + +inline +void TabPage::setStatusText(const String &statusText) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(statusText); +} + +inline +void TabPage::setStatusControlRef(SmartPointer &statusBar) +{ + mStatusBar=statusBar; +} + +inline +bool TabPage::isOkay(void)const +{ + return mTabEntries.size()&&mDIBitmap.isOkay(); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030502/uutool.cpp b/guitar/backup/20030502/uutool.cpp new file mode 100644 index 0000000..18cd678 --- /dev/null +++ b/guitar/backup/20030502/uutool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + diff --git a/guitar/backup/20030502/uutool.hpp b/guitar/backup/20030502/uutool.hpp new file mode 100644 index 0000000..55f5595 --- /dev/null +++ b/guitar/backup/20030502/uutool.hpp @@ -0,0 +1,44 @@ +#ifndef _GUITAR_UUTOOL_HPP_ +#define _GUITAR_UUTOOL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#include + +class String; + +class UUTool +{ +public: + static String encode(String strLine); + static String decode(String strLine); +private: + UUTool(void); + virtual ~UUTool(); + static BYTE chEncode(int ch); + static BYTE chDecode(int ch); +}; + +inline +UUTool::UUTool(void) +{ +} + +inline +UUTool::~UUTool() +{ +} + +inline +BYTE UUTool::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} + +inline +BYTE UUTool::chDecode(int ch) +{ + return (ch-' ')&0x3F; +} +#endif diff --git a/guitar/backup/20030502/viewwnd.cpp b/guitar/backup/20030502/viewwnd.cpp new file mode 100644 index 0000000..20b69bc --- /dev/null +++ b/guitar/backup/20030502/viewwnd.cpp @@ -0,0 +1,541 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ + mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE); +// enableCut(false); +// enableCopy(false); +// enablePaste(false); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ + mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + if(mTabPage->insert(mTablature.getTabRanges())) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + if(THPlay==threadMessage.userDataOne())thPlay(); + else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); + else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030502/viewwnd.hpp b/guitar/backup/20030502/viewwnd.hpp new file mode 100644 index 0000000..08e7513 --- /dev/null +++ b/guitar/backup/20030502/viewwnd.hpp @@ -0,0 +1,146 @@ +#ifndef _GUITAR_VIEWWINDOW_HPP_ +#define _GUITAR_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _GUITAR_TABPAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class GUIFretboard; +class StatusBarEx; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + friend class TabPage; + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); + void setFretboardHandler(CallbackPointer &callbackPointer); + bool createProject(const String &strPathTabFile); + bool createProject(void); + bool openProject(const String &pathFileName); + bool saveProject(const String &pathFileName); + bool saveProject(void); + void play(void); + void playFromCurrent(void); + void stopPlay(void); + void playRepeated(void); + void playRange(int rangeIndex); + void playRangeRepeated(int rangeIndex); + void cut(void); + void copy(void); + void paste(void); + void modifyProperties(void); + void setStartRange(void); + void setEndRange(void); + bool getTabRanges(TabRanges &ranges); + void setTabRanges(const TabRanges &ranges); + int getNumTabEntries(void)const; + void increaseTempo(void); + void decreaseTempo(void); + String getTitle(void)const; + const String &getPathFileProject(void)const; + + void setStatusControlRef(SmartPointer &statusBar); + + bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); + void enablePlaySelect(bool enable); + void enableStopSelect(bool enable); + void enableCut(bool enable); + void enableCopy(bool enable); + void enablePaste(bool enable); + bool getEnableCut(void); + bool getEnableCopy(void); + bool getEnablePaste(void); + bool isInRepeatPlay(void)const; + void isInRepeatPlay(bool isInRepeatPlay); + bool getProjectName(String &strPathFileProject); + void thPlay(void); + void thPlayFromCurrent(void); + void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + SmartPointer mTabPage; + SmartPointer mMIDIDevice; + Tablature mTablature; + bool mIsInRepeatPlay; +}; + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +#endif + + diff --git a/guitar/backup/20030502/wininfo.hpp b/guitar/backup/20030502/wininfo.hpp new file mode 100644 index 0000000..373014d --- /dev/null +++ b/guitar/backup/20030502/wininfo.hpp @@ -0,0 +1,85 @@ +#ifndef _GUITAR_WININFO_HPP_ +#define _GUITAR_WININFO_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WinInfo +{ +public: + WinInfo(void); + virtual ~WinInfo(); + void refresh(void); + const String &strProductName(void)const; + const String &strRegisteredOwner(void)const; + const String &strProductID(void)const; + const String &strVersion(void)const; +private: + String mStrProductName; + String mStrRegisteredOwner; + String mStrProductID; + String mStrVersion; +}; + +inline +WinInfo::WinInfo(void) +{ + refresh(); +} + +inline +WinInfo::~WinInfo() +{ +} + +inline +void WinInfo::refresh(void) +{ + RegKey regKey(RegKey::LocalMachine); + + if(!regKey.openKey("Software\\Microsoft\\Windows\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + if(!mStrProductName.isNull()) + { + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } + else + { + RegKey regKey(RegKey::LocalMachine); + if(!regKey.openKey("Software\\Microsoft\\Windows NT\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } +} + +inline +const String &WinInfo::strProductName(void)const +{ + return mStrProductName; +} + +inline +const String &WinInfo::strRegisteredOwner(void)const +{ + return mStrRegisteredOwner; +} + +inline +const String &WinInfo::strProductID(void)const +{ + return mStrProductID; +} + +inline +const String &WinInfo::strVersion(void)const +{ + return mStrVersion; +} +#endif diff --git a/guitar/backup/20030503/Action.hpp b/guitar/backup/20030503/Action.hpp new file mode 100644 index 0000000..46afb7f --- /dev/null +++ b/guitar/backup/20030503/Action.hpp @@ -0,0 +1,155 @@ +#ifndef _GUITAR_ACTION_HPP_ +#define _GUITAR_ACTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Action +{ +public: + typedef enum Attribute{None,Pick,PullOff,Bend,HammerOn,Release,SlideDown,SlideUp}; + Action(); + Action(Attribute action); + Action(const String &strAction); + virtual ~Action(); + Attribute getAction(void)const; + void setAction(Attribute action); + String toString(void)const; + const Action &fromString(const String &string); + String toStringShort(void)const; + static Array enumerate(void); +private: + Attribute mAction; +}; + +inline +Action::Action() +: mAction(None) +{ +} + +inline +Action::Action(Attribute action) +: mAction(action) +{ +} + +inline +Action::Action(const String &strAction) +{ + fromString(strAction); +} + +inline +Action::~Action() +{ +} + +inline +Action::Attribute Action::getAction(void)const +{ + return mAction; +} + +inline +void Action::setAction(Attribute action) +{ + mAction=action; +} + +inline +String Action::toStringShort(void)const +{ + switch(mAction) + { + case PullOff : + return "p"; + break; + case Bend : + return "b"; + break; + case HammerOn : + return "h"; + break; + case Release : + return "r"; + break; + case SlideDown : + return "s"; + break; + case SlideUp : + return "s"; + break; + case Pick : + case None : + default : + return ""; + break; + } +} + +inline +String Action::toString(void)const +{ + switch(mAction) + { + case Pick : + return "Pick"; + break; + case PullOff : + return "PullOff"; + break; + case Bend : + return "Bend"; + break; + case HammerOn : + return "HammerOn"; + break; + case Release : + return "Release"; + break; + case SlideDown : + return "SlideDown"; + break; + case SlideUp : + return "SlideUp"; + break; + case None : + default : + return "None"; + break; + } +} + +inline +const Action &Action::fromString(const String &string) +{ + if(string=="Pick")mAction=Pick; + else if(string=="PullOff")mAction=PullOff; + else if(string=="Bend")mAction=Bend; + else if(string=="HammerOn")mAction=HammerOn; + else if(string=="Release")mAction=Release; + else if(string=="SlideDown")mAction=SlideDown; + else if(string=="SlideUp")mAction=SlideUp; + else mAction=None; + return *this; +} + +inline +Array Action::enumerate(void) +{ + Array actions; + actions.size(7); + actions[0]="Pick"; + actions[1]="PullOff"; + actions[2]="Bend"; + actions[3]="HammerOn"; + actions[4]="Release"; + actions[5]="SlideDown"; + actions[6]="SlideUp"; + return actions; +} +#endif diff --git a/guitar/backup/20030503/BrowserHelper.cpp b/guitar/backup/20030503/BrowserHelper.cpp new file mode 100644 index 0000000..c5be31c --- /dev/null +++ b/guitar/backup/20030503/BrowserHelper.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool BrowserHelper::launchBrowser(const String &strCommand) +{ + String strBrowser; + Process process; + + if(!getBrowser(strBrowser))return false; + process.createProcess(strBrowser,String(" ")+strCommand,false); + return true; +} + +bool BrowserHelper::getBrowser(String &strBrowser) +{ + RegKey regKey(RegKey::LocalMachine); + String strCommand; + int argPos; + + if(!regKey.openKey(String(STRING_BROWSERKEY))) + { + if(!regKey.openKey(String(STRING_BROWSERKEYALT)))return false; + } + if(!regKey.enumValue(0,String(STRING_BROWSERCOMMAND),strCommand)||strCommand.isNull()||!strCommand.length()) + return false; + strCommand.removeTokens("'\""); + if(-1!=(argPos=strCommand.strpos("-")))strCommand=strCommand.substr(0,argPos-1); + strBrowser=strCommand; + return true; +} diff --git a/guitar/backup/20030503/BrowserHelper.hpp b/guitar/backup/20030503/BrowserHelper.hpp new file mode 100644 index 0000000..99d2945 --- /dev/null +++ b/guitar/backup/20030503/BrowserHelper.hpp @@ -0,0 +1,20 @@ +#ifndef _GUITAR_BROWSERHELPER_HPP_ +#define _GUITAR_BROWSERHELPER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class BrowserHelper +{ +public: + static bool getBrowser(String &strBrowser); + static bool launchBrowser(const String &strCommand); +private: + BrowserHelper(); +}; + +inline +BrowserHelper::BrowserHelper() +{ +} +#endif diff --git a/guitar/backup/20030503/ChordDlg.cpp b/guitar/backup/20030503/ChordDlg.cpp new file mode 100644 index 0000000..5ff5aff --- /dev/null +++ b/guitar/backup/20030503/ChordDlg.cpp @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include + +ChordDialog::ChordDialog(void) +{ + mInitHandler.setCallback(this,&ChordDialog::initHandler); + mCreateHandler.setCallback(this,&ChordDialog::createHandler); + mCloseHandler.setCallback(this,&ChordDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog::ChordDialog(const ChordDialog &someChordDialog) +{ // private implementation + *this=someChordDialog; +} + +ChordDialog::~ChordDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) +{ // private implementation + return *this; +} + +bool ChordDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); + mChordList.disposition(PointerDisposition::Delete); + setChordList(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +void ChordDialog::setChordList(void) +{ + CursorControl cursor; + String strInsert; + + cursor.waitCursor(true); + for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) + { + String strResource(rcIndex); + strInsert=strResource.betweenString(0,'['); + strInsert.trimRight(); + strInsert+=strResource.betweenString(']',0); + mChordList->insertString(strInsert); + } + cursor.waitCursor(false); + setText(CHORDS_COUNT,"chord count:"+String().fromInt(rcIndex-ResBegin)); +} + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void ChordDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + + + diff --git a/guitar/backup/20030503/ChordDlg.hpp b/guitar/backup/20030503/ChordDlg.hpp new file mode 100644 index 0000000..a21493f --- /dev/null +++ b/guitar/backup/20030503/ChordDlg.hpp @@ -0,0 +1,53 @@ +#ifndef _GUITAR_CHORDDLG_HPP_ +#define _GUITAR_CHORDDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordDialog : public DWindow +{ +public: + ChordDialog(void); + virtual ~ChordDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordDialog(const ChordDialog &someChordDialog); + ChordDialog &operator=(const ChordDialog &someChordDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setChordList(void); + void handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mChordList; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20030503/DragQueryFile.hpp b/guitar/backup/20030503/DragQueryFile.hpp new file mode 100644 index 0000000..58d205c --- /dev/null +++ b/guitar/backup/20030503/DragQueryFile.hpp @@ -0,0 +1,39 @@ +#ifndef _COMMON_DRAGQUERYFILE_HPP_ +#define _COMMON_DRAGQUERYFILE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DragQueryFile +{ +public: + static bool getFileNames(HDROP hDrop,Block &strFileNames); +private: +}; + +inline +bool DragQueryFile::getFileNames(HDROP hDrop,Block &strFileNames) +{ + String strBuffer; + UINT numFiles; + + strFileNames.remove(); + strBuffer.reserve(512); + if(0==hDrop)return false; + numFiles=::DragQueryFile(hDrop,0xFFFFFFFF,0,0); + if(!numFiles)return false; + for(int index=0;index +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class Element +{ +public: + Element(); + Element(int fret,Action action=Action::None); + virtual ~Element(); + Action::Attribute getAction(void)const; + void setAction(Action::Attribute action); + void setFret(int fret); + int getFret(void)const; + String toString(void)const; +private: + int mFret; + Action mAction; +}; + +inline +Element::Element() +: mFret(0) +{ +} + +inline +Element::Element(int fret,Action action) +: mFret(fret), mAction(action) +{ +} + +inline +Element::~Element() +{ +} + +inline +Action::Attribute Element::getAction(void)const +{ + return mAction.getAction(); +} + +inline +void Element::setAction(Action::Attribute action) +{ + mAction.setAction(action); +} + +inline +int Element::getFret(void)const +{ + return mFret; +} + +inline +void Element::setFret(int fret) +{ + mFret=fret; +} + +inline +String Element::toString(void)const +{ + return mAction.toString()+String(" ")+String().fromInt(mFret); +} +#endif diff --git a/guitar/backup/20030503/Fingering.cpp b/guitar/backup/20030503/Fingering.cpp new file mode 100644 index 0000000..3c45813 --- /dev/null +++ b/guitar/backup/20030503/Fingering.cpp @@ -0,0 +1,88 @@ +#include +#include + +FrettedNotes Fingering::getFingering(const Scale &scale) +{ + FrettedNotes frettedNotes; + FrettedNote frettedNote; + + frettedNotes.size(scale.size()); + GlobalDefs::outDebug(scale.toString()); + for(int index=0;indexFretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString<0)return false; + } + mCurrFret++; + } + return found; +} + +bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e) +{ + Note tmpNote; + bool found; + + found=false; + GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString()); + if(mCurrFret<0||mCurrString>5)return false; + while(!found) + { + tmpNote=mFretboard.getAt(mCurrString,mCurrFret); + GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString()); + if(tmpNote==note) + { + frettedNote.setString(mCurrString); + frettedNote.setFret(mCurrFret); + frettedNote.setNote(tmpNote); + found=true; + } + if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets) + { + mCurrFret=mAnchorFret-2; + mCurrString++; +// mAnchorFret=mCurrFret; + if(mCurrString>5)return false; + if(mCurrFret<0)mCurrFret=0; + } + if(mCurrFret>Fretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString>5)return false; + } + mCurrFret++; + } + return found; +} diff --git a/guitar/backup/20030503/Fingering.hpp b/guitar/backup/20030503/Fingering.hpp new file mode 100644 index 0000000..88325bc --- /dev/null +++ b/guitar/backup/20030503/Fingering.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_FINGERING_HPP_ +#define _GUITAR_FINGERING_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Fingering +{ +public: + Fingering(); + virtual ~Fingering(); + FrettedNotes getFingering(const Scale &scale); +private: + enum{MaxStretchFrets=4,DefaultString=5}; + bool getFirst(FrettedNote &frettedNote,const Note ¬e); + bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); + int getCurrString(void)const; + void setCurrString(int currString); + int getCurrFret(void)const; + void setCurrFret(int currFret); + + Fretboard mFretboard; + int mMaxStretchFrets; + int mStartString; + int mCurrString; + int mCurrFret; + int mAnchorFret; +}; + +inline +Fingering::Fingering() +: mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) +{ +} + +inline +Fingering::~Fingering() +{ +} + +inline +int Fingering::getCurrString(void)const +{ + return mCurrString; +} + +inline +void Fingering::setCurrString(int currString) +{ + mCurrString=currString; +} + +inline +int Fingering::getCurrFret(void)const +{ + return mCurrFret; +} + +inline +void Fingering::setCurrFret(int currFret) +{ + mCurrFret=currFret; +} +#endif diff --git a/guitar/backup/20030503/Fret.hpp b/guitar/backup/20030503/Fret.hpp new file mode 100644 index 0000000..e450ad5 --- /dev/null +++ b/guitar/backup/20030503/Fret.hpp @@ -0,0 +1,104 @@ +#ifndef _GUITAR_FRET_HPP_ +#define _GUITAR_FRET_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Fret; +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class Fret +{ +public: + typedef enum FretStatus{Active,Inactive,Hidden}; + Fret(void); + Fret(const Fret &fret); + Fret(const Note ¬e,const Rect &boundingRect); + virtual ~Fret(); + Fret &operator=(const Fret &fret); + const Note &getNote(void)const; + void setNote(const Note ¬e); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + FretStatus getStatus(void)const; + void setStatus(FretStatus status); +private: + Note mNote; + Rect mBoundingRect; + FretStatus mStatus; +}; + +inline +Fret::Fret(void) +: mStatus(Hidden) +{ +} + +inline +Fret::Fret(const Fret &fret) +{ + *this=fret; +} + +inline +Fret::Fret(const Note ¬e,const Rect &boundingRect) +: mNote(note), mBoundingRect(boundingRect) +{ +} + +inline +Fret::~Fret() +{ +} + +inline +Fret &Fret::operator=(const Fret &fret) +{ + setNote(fret.getNote()); + setBoundingRect(fret.getBoundingRect()); + return *this; +} + +inline +const Note &Fret::getNote(void)const +{ + return mNote; +} + +inline +void Fret::setNote(const Note ¬e) +{ + mNote=note; +} + +inline +const Rect &Fret::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void Fret::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +Fret::FretStatus Fret::getStatus(void)const +{ + return mStatus; +} + +inline +void Fret::setStatus(FretStatus status) +{ + mStatus=status; +} +#endif diff --git a/guitar/backup/20030503/FretDlg.cpp b/guitar/backup/20030503/FretDlg.cpp new file mode 100644 index 0000000..8eaf67f --- /dev/null +++ b/guitar/backup/20030503/FretDlg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +FretDialog::FretDialog(void) +: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1) +{ + mInitHandler.setCallback(this,&FretDialog::initHandler); + mCreateHandler.setCallback(this,&FretDialog::createHandler); + mCloseHandler.setCallback(this,&FretDialog::closeHandler); + mDestroyHandler.setCallback(this,&FretDialog::destroyHandler); + mCommandHandler.setCallback(this,&FretDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog::FretDialog(const FretDialog &someFretDialog) +{ // private implementation + *this=someFretDialog; +} + +FretDialog::~FretDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog &FretDialog::operator=(const FretDialog &someFretDialog) +{ // private implementation + return *this; +} + +bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + mSelectedString=selectedString; + mSelectedFret=-1; + return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData) +{ + initializeAction(); + initializeNoteTypes(); + setString(); + setFret(); + setNoteType((*mTabEntries)[mCurrEntryIndex]); + return (CallbackData::ReturnType)FALSE; +} + +void FretDialog::handleOk(void) +{ + String selectedFret; + String selectedAction; + String selectedDuration; + String selectedString; + bool found=false; + + getText(FRETENTRY_FRET,selectedFret); + getText(FRETENTRY_ACTION,selectedAction); + getText(FRETENTRY_DURATION,selectedDuration); + getText(FRETENTRY_STRING,selectedString); + if(!selectedString.isNull()) + { + int string=selectedString.toInt(); + if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string; + } + mSelectedFret=selectedFret.toInt(); + if(mSelectedFret<0||mSelectedFret>Fretboard::Frets) + { + mSelectedFret=-1; + return; + } + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + FrettedNote frettedNote; + frettedNote.setFret(mSelectedFret); + frettedNote.setAction(Action(selectedAction)); + if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret); + else if(!entry.setFrettedNote(mSelectedString,frettedNote)) + { + entry.addFrettedNote(mSelectedString,frettedNote); + } + entry.setNoteType(NoteType().fromString(selectedDuration)); + return; +} + +void FretDialog::setString() +{ + setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString)); +} + +void FretDialog::setFret() +{ + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + + for(int index=0;index actions=Action::enumerate(); + for(int index=0;index noteTypes=NoteType::enumerate(); + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class FretDialog : public DWindow +{ +public: + FretDialog(void); + virtual ~FretDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex); +private: + FretDialog(const FretDialog &someFretDialog); + FretDialog &operator=(const FretDialog &someFretDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void initializeAction(void); + void initializeNoteTypes(void); + void setFret(void); + void setString(void); + void setAction(const Action &action); + void setNoteType(const TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + int mSelectedString; + int mSelectedFret; +}; +#endif diff --git a/guitar/backup/20030503/FretViewWnd.cpp b/guitar/backup/20030503/FretViewWnd.cpp new file mode 100644 index 0000000..aa1dbb5 --- /dev/null +++ b/guitar/backup/20030503/FretViewWnd.cpp @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FretViewWindow::FretViewWindow(void) +{ + mCreateHandler.setCallback(this,&FretViewWindow::createHandler); + mSizeHandler.setCallback(this,&FretViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&FretViewWindow::paintHandler); + mHorizontalScrollHandler.setCallback(this,&FretViewWindow::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&FretViewWindow::verticalScrollHandler); + mLeftButtonDownHandler.setCallback(this,&FretViewWindow::leftButtonDownHandler); + mCloseHandler.setCallback(this,&FretViewWindow::closeHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +FretViewWindow::~FretViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +CallbackData::ReturnType FretViewWindow::closeHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType FretViewWindow::createHandler(CallbackData &someCallbackData) +{ + setTitle("Fretboard"); + mGUIFretboard=::new GUIFretboard(*this); + mGUIFretboard.disposition(PointerDisposition::Delete); + return FALSE; +} + +CallbackData::ReturnType FretViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType FretViewWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mGUIFretboard->draw(pureDevice); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::leftButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void FretViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String FretViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void FretViewWindow::setNote(const TabEntry &entry,bool clear,bool play) +{ + mGUIFretboard->setNote(entry,clear,play); +} + +void FretViewWindow::setNote(const Note ¬e,bool clear,bool play) +{ + mGUIFretboard->setNote(note,clear,play); +} + +void FretViewWindow::setNote(const Scale &scale,bool play) +{ + mGUIFretboard->setNote(scale,play); +} + +void FretViewWindow::setNote(const FrettedNotes &frettedNotes,bool play) +{ + mGUIFretboard->setNote(frettedNotes,play); +} + +void FretViewWindow::clearNotes(void) +{ + mGUIFretboard->clearNotes(); +} + +void FretViewWindow::showAllPositions(void) +{ + mGUIFretboard->showAllPositions(); +} + +void FretViewWindow::cut(void) +{ + mGUIFretboard->cut(); +} + +void FretViewWindow::copy(void) +{ + mGUIFretboard->copy(); +} + +void FretViewWindow::paste(void) +{ + mGUIFretboard->paste(); +} + +// *** virtuals + +void FretViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void FretViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|WS_CHILD|WS_CAPTION|WS_SIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_BORDER|WS_SYSMENU; +} + + diff --git a/guitar/backup/20030503/FretViewWnd.hpp b/guitar/backup/20030503/FretViewWnd.hpp new file mode 100644 index 0000000..714facd --- /dev/null +++ b/guitar/backup/20030503/FretViewWnd.hpp @@ -0,0 +1,56 @@ +#ifndef _GUITAR_FRETVIEWWINDOW_HPP_ +#define _GUITAR_FRETVIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#include +#endif + +class TabEntry; +class Scale; + +class FretViewWindow : public MDIWindow +{ +public: + enum{THPlay,THStop}; + FretViewWindow(void); + virtual ~FretViewWindow(); + String getTitle(void)const; + void cut(void); + void copy(void); + void paste(void); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void clearNotes(void); + void showAllPositions(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum{WindowWidth=355,WindowHeight=135,MaxWindowWidth=520}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDownHandler; + Callback mCloseHandler; + SmartPointer mGUIFretboard; +}; +#endif + diff --git a/guitar/backup/20030503/Fretboard.cpp b/guitar/backup/20030503/Fretboard.cpp new file mode 100644 index 0000000..5fbc421 --- /dev/null +++ b/guitar/backup/20030503/Fretboard.cpp @@ -0,0 +1,101 @@ +#include +#include + +bool Fretboard::isOnFretboard(const Note ¬e) +{ + for(int frIndex=0;frIndex &frettedNotes) +{ + frettedNotes.remove(); + for(int frIndex=0;frIndex&)*this).operator[](string); + strFretboard+=stringNotes.toString(); + if(string +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +// |-5- +// |-4- +// |-3- +// |-2- +// |-1- +// |-0- + +class MIDIOutputDevice; + +class Fretboard : public Array +{ +public: + enum{Frets=24,Strings=6}; + Fretboard(const Tuning &tuning=Tuning(),int frets=Frets); + virtual ~Fretboard(); + void createFretboard(const Tuning &tuning,int frets=Frets); + const Tuning &getTuning(); + void setTuning(const Tuning &tuning); + const Note &getAt(int string,int fret); + bool getAt(const Note ¬e,FrettedNote &frettedNote); + bool getAt(const Note ¬e,Block &frettedNotes); + int getFrets(void)const; + void setFrets(int frets); + bool isOnFretboard(const Note ¬e); + bool play(MIDIOutputDevice &device); + String toString(void)const; + static bool isValidFret(int fret); +private: + void createFretboard(); + Tuning mTuning; + int mFrets; +}; + +inline +Fretboard::Fretboard(const Tuning &tuning,int frets) +: mTuning(tuning),mFrets(frets) +{ + createFretboard(); +} + +inline +Fretboard::~Fretboard() +{ +} + +inline +const Tuning &Fretboard::getTuning() +{ + return mTuning; +} + +inline +void Fretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createFretboard(); +} + +inline +int Fretboard::getFrets(void)const +{ + return mFrets; +} + +inline +void Fretboard::setFrets(int frets) +{ + mFrets=frets; + createFretboard(); +} + +inline +const Note &Fretboard::getAt(int string,int fret) +{ + return (operator[](string)).operator[](fret); +} + +inline +bool Fretboard::isValidFret(int fret) +{ + if(fret<=Fretboard::Frets)return true; + return false; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030503/FrettedBoundingNote.hpp b/guitar/backup/20030503/FrettedBoundingNote.hpp new file mode 100644 index 0000000..d1019c7 --- /dev/null +++ b/guitar/backup/20030503/FrettedBoundingNote.hpp @@ -0,0 +1,88 @@ +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#define _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class FrettedBoundingNote : public FrettedNote +{ +public: + FrettedBoundingNote(); + virtual ~FrettedBoundingNote(); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + const Point &getDisplayPoint(void)const; + void setDisplayPoint(const Point &displayPoint); + const RGBColor &getBkGndColor(void)const; + void setBkGndColor(RGBColor &bkGndColor); + const RGBColor &getTextColor(void)const; + void setTextColor(const RGBColor &textColor); +private: + Rect mBoundingRect; + Point mDisplayPoint; + RGBColor mBkGndColor; + RGBColor mTextColor; +}; + +inline +FrettedBoundingNote::FrettedBoundingNote() +{ +} + +inline +FrettedBoundingNote::~FrettedBoundingNote() +{ +} + +inline +const Rect &FrettedBoundingNote::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void FrettedBoundingNote::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +const RGBColor &FrettedBoundingNote::getBkGndColor(void)const +{ + return mBkGndColor; +} + +inline +void FrettedBoundingNote::setBkGndColor(RGBColor &bkGndColor) +{ + mBkGndColor=bkGndColor; +} + +inline +const RGBColor &FrettedBoundingNote::getTextColor(void)const +{ + return mTextColor; +} + +inline +void FrettedBoundingNote::setTextColor(const RGBColor &textColor) +{ + mTextColor=textColor; +} + +inline +const Point &FrettedBoundingNote::getDisplayPoint(void)const +{ + return mDisplayPoint; +} + +inline +void FrettedBoundingNote::setDisplayPoint(const Point &displayPoint) +{ + mDisplayPoint=displayPoint; +} +#endif + diff --git a/guitar/backup/20030503/FrettedNote.hpp b/guitar/backup/20030503/FrettedNote.hpp new file mode 100644 index 0000000..2b87aeb --- /dev/null +++ b/guitar/backup/20030503/FrettedNote.hpp @@ -0,0 +1,158 @@ +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#define _GUITAR_FRETTEDNOTE_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class FrettedNote; + +typedef Array FrettedNotes; + +class FrettedNote : public Note +{ +public: + FrettedNote(); + FrettedNote(const FrettedNote &frettedNote); + FrettedNote(const Note ¬e,int string,int fret,const Action &action=Action(Action::Pick)); + virtual ~FrettedNote(); + FrettedNote &operator=(const FrettedNote &frettedNote); + bool operator==(const FrettedNote &frettedNote)const; + bool operator>(const FrettedNote &frettedNote)const; + bool operator<(const FrettedNote &frettedNote)const; + int getString(void)const; + void setString(int string); + int getFret(void)const; + void setFret(int fret); + void setNote(const Note ¬e); + const Note &getNote(void)const; + const Action &getAction(void)const; + void setAction(const Action &action); + String toString(void)const; +private: + int mString; + int mFret; + Action mAction; +}; + +inline +FrettedNote::FrettedNote(const FrettedNote &frettedNote) +{ + *this=frettedNote; +} + +inline +FrettedNote::FrettedNote() +: Note(Note::E,4), mString(0), mFret(0) +{ +} + +inline +FrettedNote::FrettedNote(const Note ¬e,int string,int fret,const Action &action) +: Note(note), mString(string), mFret(fret), mAction(action) +{ +} + +inline +FrettedNote::~FrettedNote() +{ +} + +inline +FrettedNote &FrettedNote::operator=(const FrettedNote &frettedNote) +{ + setString(frettedNote.getString()); + setFret(frettedNote.getFret()); + (Note&)*this=(Note&)frettedNote; + setAction(frettedNote.getAction()); + return *this; +} + +inline +bool FrettedNote::operator==(const FrettedNote &frettedNote)const +{ + if(getString()==frettedNote.getString()&&getFret()==frettedNote.getFret()) + return (Note&)*this==(Note&)frettedNote; + return false; +} + +inline +bool FrettedNote::operator>(const FrettedNote &frettedNote)const +{ + if(getString()>frettedNote.getString())return true; + if(getFret()>frettedNote.getFret())return true; + return (Note&)*this>(Note&)frettedNote; +} + +inline +bool FrettedNote::operator<(const FrettedNote &frettedNote)const +{ + if(getString() +#include + +bool FrettedNotes::play(MIDIOutputDevice &midiDevice) +{ + String strNotes; + if(!midiDevice.hasDevice())return false; + +// ::OutputDebugString(String(toString()+String("\n")).str()); + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RGBColor GUIFretboard::smColorBlack=RGBColor(0,0,0); +RGBColor GUIFretboard::smColorLtGreen=RGBColor(156,156,74); +RGBColor GUIFretboard::smColorWhite=RGBColor(255,255,255); +RGBColor GUIFretboard::smColorRed=RGBColor(231,33,33); +RGBColor GUIFretboard::smColorGreen=RGBColor(0,128,0); +RGBColor GUIFretboard::smColorBlue=RGBColor(0,0,255); + +/* Construct the GUIFretboard +* @param parent - The owning parent window +* @param tuning - The tuning for this fretboard +* @param frets - The number of frets on this fretboard +*/ +GUIFretboard::GUIFretboard(GUIWindow &parent,const Tuning &tuning,int frets) +: mTuning(tuning), mTextFont("Small Fonts",6), mShowNotes(false), + mPrevBrush(0), mPrevFont(0), mPrevBkMode(0), mPrevTextColor(0), mClearNotes(true), + mCurrFret(0), mCurrString(0), mRedBrush(smColorRed), mLtGreenBrush(smColorLtGreen), + mWhiteBrush(smColorWhite), mGreenBrush(smColorGreen), mBlueBrush(smColorBlue) +{ + Registry registry; + setShowNotes(registry.getShowNotes()); + mParent=SmartPointer(&parent); + mSizeHandler.setCallback(this,&GUIFretboard::sizeHandler); + mLeftButtonDownHandler.setCallback(this,&GUIFretboard::leftButtonDownHandler); + mKeyDownHandler.setCallback(this,&GUIFretboard::keyDownHandler); + mKeyUpHandler.setCallback(this,&GUIFretboard::keyUpHandler); + mSetFocusHandler.setCallback(this,&GUIFretboard::setFocusHandler); + mKillFocusHandler.setCallback(this,&GUIFretboard::killFocusHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + mParent.disposition(PointerDisposition::Assume); + mResBitmap=::new ResBitmap("FRETBOARD"); + mResBitmap.disposition(PointerDisposition::Delete); + parent.setWindowPos(mResBitmap->width()+RightBorder,mResBitmap->height()+BottomBorder); + createVirtualFretboard(); + mParent->invalidate(); + mParent->update(); +} + +/* +* Destructor +*/ +GUIFretboard::~GUIFretboard() +{ + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->removeHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +/* +* Draw the fretboard +* @param device - The device context on which to draw +*/ +void GUIFretboard::draw(PureDevice &device) +{ + mDIBitmap->usePalette(device,true); + mDIBitmap->bitBlt(device); + mDIBitmap->usePalette(device,false); + refreshNotes(); +} + +/* +* Repeat the selected notes at every location on the fretboard +* @param None +*/ +void GUIFretboard::showAllPositions(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + clearNotes(); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets the notes of the given scale on the fretboard +* @param scale - the scale from which notes will be set +* @param play - indicates whether the notes of the scale should be played +*/ +void GUIFretboard::setNote(const Scale &scale,bool play) +{ + Registry registry; + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + + getSequencer(); + clearNotes(); + if(scale.has(Scale::I))degreeI=scale.getDegree(Scale::I); + if(scale.has(Scale::III))degreeIII=scale.getDegree(Scale::III); + if(scale.has(Scale::V))degreeV=scale.getDegree(Scale::V); + if(scale.has(Scale::VII))degreeVII=scale.getDegree(Scale::VII); + for(int index=0;indexgetDevice()); + ::Sleep(Notes::DefaultDelay); + scale.play(mSequencer->getDevice(),registry.getMillisecondsPerQuarterNote()/4); // play scale as 16th notes + } +} + +/* +* Sets a note on the fretboard +* @param note - the note to set +* @param clear - indicates whether fretboard should be cleared prior to note being set +* @param play - indicates whether the note should be played +*/ +void GUIFretboard::setNote(const Note ¬e,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + } + } + } + return; +} + +/* +* Sets a note(s) on the fretboard +* @param entry - the tabentry containing the note(s) +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard +* @param string - the string to set the note on +* @param fret - the fret to set the note on +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(int string,int fret,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + GuitarString &guitarString=operator[]((size()-1)-string); + FrettedBoundingNote &frettedBoundingNote=guitarString[fret]; + if(clear)clearNotes(); + frettedBoundingNote.setBkGndColor(smColorRed); + frettedBoundingNote.setTextColor(smColorWhite); + mActiveFrets.insert(frettedBoundingNote); + prepareDevice(device,true); + drawNote(frettedBoundingNote,device); + if(play)frettedBoundingNote.noteOn(mSequencer->getDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::setNote(const GDIPoint &clickPoint,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + return true; + } + } + } + return false; +} + +/* +* Redraws all of the currently active notes onto the fretboard bitmap +* @param None +*/ +void GUIFretboard::refreshNotes(void) +{ + Array frettedBoundingNotes; + + PureDevice device(*mParent); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index frettedBoundingNotes; + + entry.remove(); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index1)device.textOut(boundingRect.left(),boundingRect.top(),strNote); + else device.textOut(boundingRect.left()+1,boundingRect.top()+1,strNote); + } +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param prepare - indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + prepareDevice(device,smColorRed,smColorWhite,prepare); +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param brushColor - The color of the drawing brush +* @param textColor - The text color +* @param prepare - Indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)getBrush(brushColor)); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(textColor); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} + +/* +* Get the brush for the given color +* @param brushColor - The color of the brush we desire +* @return - A reference to the brush for the given color +*/ +Brush &GUIFretboard::getBrush(const RGBColor &brushColor) +{ + if(brushColor==mRedBrush.getColor())return mRedBrush; + else if(brushColor==mWhiteBrush.getColor())return mWhiteBrush; + else if(brushColor==mGreenBrush.getColor())return mGreenBrush; + else if(brushColor==mBlueBrush.getColor())return mBlueBrush; + return mLtGreenBrush; +} + +/* +* Clears all of the notes on the fretboard +* @param None +* @return None +*/ +void GUIFretboard::clearNotes(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;indexinvalidate(rect,false); + } + mActiveFrets.remove(); + mParent->update(); +} + +/* +* Initialize the fretboard and create it's underlying bitmap +* @param None +* @return None +*/ +void GUIFretboard::createVirtualFretboard(void) +{ + SmartPointer activeFret; + size(mTuning.size()); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + } + } + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + +/* +* Get the rectangle that bounds the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The bounding rectangle +*/ +Rect GUIFretboard::getBoundingRect(int string,int fret)const +{ + Rect boundingRect; + Point point(getPoint(string,fret)); + boundingRect.left(point.x()-Radius); + boundingRect.top(point.y()-Radius); + boundingRect.right(point.x()+Radius); + boundingRect.bottom(point.y()+Radius); + return boundingRect; +} + +/* +* Get the point for the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The point +*/ +Point GUIFretboard::getPoint(int string,int fret)const +{ + Point point; + int starty=15; + int incy=10; + + switch(fret) + { + case 0 : + point.x(10); + break; + case 1 : + point.x(23); + break; + case 2 : + point.x(55); + break; + case 3 : + point.x(83); + break; + case 4 : + point.x(111); + break; + case 5 : + point.x(138); + break; + case 6 : + point.x(164); + break; + case 7 : + point.x(193); + break; + case 8 : + point.x(220); + break; + case 9 : + point.x(249); + break; + case 10 : + point.x(280); + break; + case 11 : + point.x(307); + break; + case 12 : + point.x(335); + break; + case 13 : + point.x(362); + break; + case 14 : + point.x(392); + break; + case 15 : + point.x(420); + break; + case 16 : + point.x(446); + break; + case 17 : + point.x(473); + break; + case 18 : + point.x(501); + break; + case 19 : + point.x(528); + break; + case 20 : + point.x(558); + break; + case 21 : + point.x(585); + break; + case 22 : + point.x(611); + break; + case 23 : + point.x(640); + break; + case 24 : + point.x(668); + break; + } + point.y(starty+((string)*incy)); + return point; +} + +/* +* Cut the notes from the fretboard +* @param None +* @return None +*/ +void GUIFretboard::cut(void) +{ + copy(); // copy the fretboard notes to the clipboard first + clearNotes(); +} + +/* +* Copy all selected notes to the clipboard +* @param None +* @return None +*/ +void GUIFretboard::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + getNotes(entry); + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); +} + +/* +* Paste notes from clipboard +* @param None +* @return None +*/ +void GUIFretboard::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return; + entry.fromString(strText.betweenString(']',0)); + setNote(entry,true,true); +} + +// callbacks + +/* +* Handles resizing of the fretboard window +* @param callbackData - Contains information about the resize event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::sizeHandler(CallbackData &callbackData) +{ + GlobalDefs::outDebug("[GUIFretboard::sizeHandler]"); + Point sizePoint(callbackData.loWord(),callbackData.hiWord()); + if(sizePoint.x()>mResBitmap->width()+RightBorder|| + sizePoint.y()>mResBitmap->height()+BottomBorder) + mParent->setWindowPos(mResBitmap->width()+10,mResBitmap->height()+30); + return false; +} + +/* +* Handles left button down event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::leftButtonDownHandler(CallbackData &callbackData) +{ + GDIPoint clickPoint(callbackData.loWord(),callbackData.hiWord()); + setNote(clickPoint,mClearNotes,true); + return false; +} + +/* +* Handles keyboard event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyDownHandler(CallbackData &callbackData) +{ + if(KeyData::controlKeyPressed())mClearNotes=false; + else mClearNotes=true; + KeyData keyData(callbackData); + switch(keyData.virtualKey()) + { + case KeyDown : + if(KeyData::shiftKeyPressed())mCurrString-=2; + else mCurrString--; + if(mCurrString<0)mCurrString=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyLeft : + if(KeyData::shiftKeyPressed())mCurrFret-=2; + else mCurrFret--; + if(mCurrFret<0)mCurrFret=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyRight : + if(KeyData::shiftKeyPressed())mCurrFret+=2; + else mCurrFret++; + if(mCurrFret>DefaultFrets)mCurrFret=DefaultFrets; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyUp : + if(KeyData::shiftKeyPressed())mCurrString+=2; + else mCurrString++; + if(mCurrString>=DefaultStrings)mCurrString=DefaultStrings-1; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + } + return false; +} + +/* +* Handles key up event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyUpHandler(CallbackData &callbackData) +{ + KeyData keyData(callbackData); + if(CtrlKey==keyData.virtualKey())mClearNotes=true; + return false; +} + +/* +* Handles focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::setFocusHandler(CallbackData &callbackData) +{ + getSequencer(); + return false; +} + +/* +* Handles kill focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::killFocusHandler(CallbackData &callbackData) +{ + mSequencer.destroy(); + return false; +} + diff --git a/guitar/backup/20030503/GUIFretboard.hpp b/guitar/backup/20030503/GUIFretboard.hpp new file mode 100644 index 0000000..0bad42d --- /dev/null +++ b/guitar/backup/20030503/GUIFretboard.hpp @@ -0,0 +1,169 @@ +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#define _GUITAR_GUIFRETBOARD_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TUNING_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class GUIWindow; +class TabEntry; +class ResBitmap; +class Scale; + +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class GUIFretboard : public VirtualFretboard +{ +public: + enum{DefaultFrets=24,DefaultStrings=6}; + GUIFretboard(GUIWindow &parent,const Tuning &tuning=Tuning(),int frets=DefaultFrets); + virtual ~GUIFretboard(); + const Tuning &getTuning(void)const; + void setTuning(const Tuning &tuning); + int getFrets(void)const; + void draw(PureDevice &device); + void setNote(int string,int fret,bool clear=true,bool play=false); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void setShowNotes(bool showNotes); + bool getShowNotes(void)const; + void showAllPositions(void); + void cut(void); + void copy(void); + void paste(void); +private: + enum{RightBorder=10,BottomBorder=30,Radius=5,ClickTolerance=1}; + enum{KeyDown=0x28,KeyLeft=0x25,KeyRight=0x27,KeyUp=0x26,CtrlKey=0x11}; + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &callbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &callbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &callbackData); + + void createVirtualFretboard(void); + void refreshNotes(void); + void getSequencer(void); + Point getPoint(int string,int fret)const; + Rect getBoundingRect(int string,int fret)const; + void prepareDevice(PureDevice &device,bool prepare); + void prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor=RGBColor(255,255,255),bool prepare=true); + void drawNote(FrettedBoundingNote &currFret,PureDevice &device); + bool setNote(const GDIPoint &clickPoint,bool clear=true,bool play=false); + Brush &getBrush(const RGBColor &brushColor); + + Tuning mTuning; + SmartPointer mDIBitmap; + SmartPointer mResBitmap; + SmartPointer mParent; + SmartPointer mSequencer; + + Callback mSizeHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mKeyUpHandler; + Callback mSetFocusHandler; + Callback mKillFocusHandler; + BTree mActiveFrets; + + bool mShowNotes; + bool mClearNotes; + int mCurrFret; + int mCurrString; + + Brush mGreenBrush; + Brush mRedBrush; + Brush mWhiteBrush; + Brush mLtGreenBrush; + Brush mBlueBrush; + Font mTextFont; + + HGDIOBJ mPrevBrush; + HGDIOBJ mPrevFont; + int mPrevBkMode; + RGBColor mPrevTextColor; + + static RGBColor smColorBlack; + static RGBColor smColorLtGreen; + static RGBColor smColorWhite; + static RGBColor smColorRed; + static RGBColor smColorGreen; + static RGBColor smColorBlue; +}; + +inline +const Tuning &GUIFretboard::getTuning(void)const +{ + return mTuning; +} + +inline +void GUIFretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createVirtualFretboard(); +} + +inline +int GUIFretboard::getFrets(void)const +{ + return DefaultFrets; +} + +inline +void GUIFretboard::setShowNotes(bool showNotes) +{ + mShowNotes=showNotes; +} + +inline +bool GUIFretboard::getShowNotes(void)const +{ + return mShowNotes; +} + +inline +void GUIFretboard::getSequencer(void) +{ + if(mSequencer.isOkay())return; + mSequencer=::new Sequencer(); + mSequencer.disposition(PointerDisposition::Delete); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030503/GlobalDefs.cpp b/guitar/backup/20030503/GlobalDefs.cpp new file mode 100644 index 0000000..24438ac --- /dev/null +++ b/guitar/backup/20030503/GlobalDefs.cpp @@ -0,0 +1,6 @@ +#include + +UINT GlobalDefs::mRegisteredClipboardFormat=0; +GlobalDefs::LogLevel GlobalDefs::mLogLevel=GlobalDefs::Debug; +File GlobalDefs::mLogFile; + diff --git a/guitar/backup/20030503/GlobalDefs.hpp b/guitar/backup/20030503/GlobalDefs.hpp new file mode 100644 index 0000000..8fb3780 --- /dev/null +++ b/guitar/backup/20030503/GlobalDefs.hpp @@ -0,0 +1,100 @@ +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#define _GUITAR_GLOBALDEFS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class GlobalDefs +{ +public: + typedef enum LogLevel{NoLog,Verbose,Info,Debug}; + enum{MicrosecondsPerQuarterNote=651578,Program=JazzGuitarElectric,ShowAction=1,ShowNotes=1}; + static void outDebug(const String &strDebug,LogLevel level=Debug); + static LogLevel getLogLevel(void); + static void setLogLevel(LogLevel logLevel); + static bool setLogFile(const String &pathLogFile); + static UINT getRegisteredClipboardFormat(void); + static void setRegisteredClipboardFormat(UINT registeredClipboardFormat); + static String translateLevel(LogLevel logLevel); +private: + GlobalDefs(); + virtual ~GlobalDefs(); + static UINT mRegisteredClipboardFormat; + static LogLevel mLogLevel; + static File mLogFile; +}; + +inline +GlobalDefs::GlobalDefs() +{ +} + +inline +GlobalDefs::~GlobalDefs() +{ +} + +inline +UINT GlobalDefs::getRegisteredClipboardFormat(void) +{ + return mRegisteredClipboardFormat; +} + +inline +void GlobalDefs::setRegisteredClipboardFormat(UINT registeredClipboardFormat) +{ + mRegisteredClipboardFormat=registeredClipboardFormat; +} + +inline +GlobalDefs::LogLevel GlobalDefs::getLogLevel(void) +{ + return mLogLevel; +} + +inline +void GlobalDefs::setLogLevel(LogLevel logLevel) +{ + mLogLevel=logLevel; +} + +inline +void GlobalDefs::outDebug(const String &strDebug,LogLevel logLevel) +{ + if(NoLog==getLogLevel())return; + if(mLogFile.isOkay()&&logLevel>=mLogLevel) + { + mLogFile.writeLine(translateLevel(logLevel)+strDebug); + mLogFile.flush(); + } + else if(logLevel>=mLogLevel)::OutputDebugString(String(translateLevel(logLevel)+strDebug+String("\n")).str()); +} + +inline +bool GlobalDefs::setLogFile(const String &pathLogFile) +{ + return mLogFile.open(pathLogFile,"wb"); +} + +inline +String GlobalDefs::translateLevel(LogLevel logLevel) +{ + SystemTime systemTime; + if(NoLog==logLevel)return String("[Log.None][")+systemTime.toString()+String("]"); + else if(Verbose==logLevel)return String("[Log.Verbose][")+systemTime.toString()+String("]"); + else if(Debug==logLevel)return String("[Log.Debug][")+systemTime.toString()+String("]"); + else return String("[Log.Info]]")+systemTime.toString()+String("]"); +} +#endif diff --git a/guitar/backup/20030503/GuitarString.hpp b/guitar/backup/20030503/GuitarString.hpp new file mode 100644 index 0000000..06f0d1c --- /dev/null +++ b/guitar/backup/20030503/GuitarString.hpp @@ -0,0 +1,29 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/guitar/backup/20030503/Instrument.hpp b/guitar/backup/20030503/Instrument.hpp new file mode 100644 index 0000000..8e5a147 --- /dev/null +++ b/guitar/backup/20030503/Instrument.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_INSTRUMENT_HPP_ +#define _GUITAR_INSTRUMENT_HPP_ + +typedef enum Instrument{AcousticGrandPiano=0,BrightAcousticPiano=1,ElectricGrandPiano=2,AcousticGuitarNylon=24, + AcousticGuitarSteel=25,JazzGuitarElectric=26,CleanGuitarElectric=27,MutedGuitarElectric=28}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030503/IntegerPair.hpp b/guitar/backup/20030503/IntegerPair.hpp new file mode 100644 index 0000000..fc5959f --- /dev/null +++ b/guitar/backup/20030503/IntegerPair.hpp @@ -0,0 +1,21 @@ +#ifndef _GUITAR_INTEGERPAIR_HPP_ +#define _GUITAR_INTEGERPAIR_HPP_ + +class IntegerPair +{ +public: + IntegerPair(); + IntegerPair(const IntegerPair &integerPair); + virtual IntegerPair(); + IntegerPair &operator=(const IntegerPair &integerPair); + bool operator<(const IntegerPair &integerPair); + bool operator>(const IntegerPair &integerPair); + bool operator==(const IntegerPair &integerPair); + int getValue(void)const; + void setValue(int value); + int getComparator +private: + int mValue; + int mComparator; +}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030503/License.hpp b/guitar/backup/20030503/License.hpp new file mode 100644 index 0000000..e83be51 --- /dev/null +++ b/guitar/backup/20030503/License.hpp @@ -0,0 +1,148 @@ +#ifndef _GUITAR_LICENSE_HPP_ +#define _GUITAR_LICENSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif + +class License +{ +public: + typedef enum LicenseType{Expires=01,Permanent=02}; + typedef enum Feature{MIDIFeature}; + License(void); + License(const License &license); + License(const String &strLicenseKey); // this should be a uuencoded, xor'd string + License(Block &strLicenseKeyLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + License &operator=(const License &license); + static String generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount); // produces a uuencoded, xor'd string + bool fromString(const String &string); // this should be a uuencoded, xor'd string + bool fromLines(Block &strLicenseLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + bool isValid(void)const; + bool isExpiring(void)const; + bool allowFeature(Feature feature)const; + int getRemainingDays(void)const; + int getDayCount(void)const; + int getDay(void)const; + const String &getUUEncodedLicense(void)const; +private: + enum {XORMagic=72}; + static int calculateChecksum(const String &string); + static String xor(const String &strLicense); + static String numericEncode(const String &strLicense); + static String numericDecode(const String &strLicense); + + String mProductVersion; + String mUUEncodedLicense; + SystemTime mIssueDate; + LicenseType mLicenseType; + int mDayCount; + bool mIsValid; + static const String smBeginLicense; + static const String smEndLicense; +}; + +inline +License::License(void) +: mIsValid(false) +{ +} + +inline +License::License(const License &license) +{ + *this=license; +} + +inline +License::License(const String &strLicenseKey) +: mIsValid(false) +{ + fromString(strLicenseKey); +} + +inline +License::License(Block &strLicenseLines) +: mIsValid(false) +{ + fromLines(strLicenseLines); +} + +inline +License &License::operator=(const License &license) +{ + mProductVersion=license.mProductVersion; + mIssueDate=license.mIssueDate; + mLicenseType=license.mLicenseType; + mDayCount=license.mDayCount; + mIsValid=license.mIsValid; + return *this; +} + +inline +bool License::isValid(void)const +{ + return mIsValid; +} + +inline +bool License::isExpiring(void)const +{ + return Expires==mLicenseType; +} + +inline +int License::getRemainingDays(void)const +{ + if(!isExpiring())return -1; + SDate issueDate; + SDate expireDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + expireDate=issueDate; + expireDate=expireDate.daysAdd360(mDayCount); + return currDate.daysBetween360(expireDate); +} + +inline +int License::getDay(void)const +{ + SDate issueDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + return issueDate.daysBetween360(currDate)+1; +} + +inline +int License::getDayCount(void)const +{ + return mDayCount; +} + +inline +bool License::allowFeature(Feature feature)const +{ + if(isExpiring())return false; + return true; +} + +inline +const String &License::getUUEncodedLicense(void)const +{ + return mUUEncodedLicense; +} +#endif diff --git a/guitar/backup/20030503/LicenseDialog.cpp b/guitar/backup/20030503/LicenseDialog.cpp new file mode 100644 index 0000000..011549d --- /dev/null +++ b/guitar/backup/20030503/LicenseDialog.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +LicenseDialog::LicenseDialog(void) +{ + mInitHandler.setCallback(this,&LicenseDialog::initHandler); + mCreateHandler.setCallback(this,&LicenseDialog::createHandler); + mCloseHandler.setCallback(this,&LicenseDialog::closeHandler); + mDestroyHandler.setCallback(this,&LicenseDialog::destroyHandler); + mCommandHandler.setCallback(this,&LicenseDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog::LicenseDialog(const LicenseDialog &someLicenseDialog) +{ // private implementation + *this=someLicenseDialog; +} + +LicenseDialog::~LicenseDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog &LicenseDialog::operator=(const LicenseDialog &someLicenseDialog) +{ // private implementation + return *this; +} + +bool LicenseDialog::perform(GUIWindow &parentWindow,bool cancelTerminates) +{ + bool returnCode; + mCancelTerminates=cancelTerminates; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"LICENSEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType LicenseDialog::initHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType LicenseDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::commandHandler(CallbackData &someCallbackData) +{ + LRESULT result; + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(!validateLicense()) + { + MessageBox::messageBox("Error","The license you entered was invalid, please try again"); + setText(LICENSE_DIALOG_LICENSE,String()); + setFocus(LICENSE_DIALOG_LICENSE); + } + else endDialog(true); + break; + case IDCANCEL : + if(mCancelTerminates) + { + result=MessageBox::messageBox(*this,"Warning","Cancelling now will terminate the application.",MB_OKCANCEL); + if(IDOK==result)endDialog(false); + } + else endDialog(false); + break; + case LICENSE_DIALOG_REQUEST_LICENSE : + handleLicenseRequest(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +bool LicenseDialog::validateLicense(void)const +{ + License license; + String strLicense; + Block strLicenseLines; + + strLicense=getText(LICENSE_DIALOG_LICENSE); + if(strLicense.isNull())return false; + makeLicenseLines(strLicense,strLicenseLines); + license.fromLines(strLicenseLines); + if(!license.isValid()||license.isExpiring())return false; + if(!Registration::getInstance().applyLicense(strLicenseLines))return false; + return true; +} + +void LicenseDialog::handleLicenseRequest(void)const +{ + BrowserHelper::launchBrowser(String(STRING_HOST)); +} + +void LicenseDialog::makeLicenseLines(String strLicense,Block &strLicenseLines)const +{ + strLicenseLines.remove(); + if(strLicense.isNull())return; + strLicense.removeTokens("\r"); + strLicenseLines.insert(&String(strLicense.betweenString(0,'\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\0').betweenString('\n','\n\0'))); +} diff --git a/guitar/backup/20030503/LicenseDialog.hpp b/guitar/backup/20030503/LicenseDialog.hpp new file mode 100644 index 0000000..87535df --- /dev/null +++ b/guitar/backup/20030503/LicenseDialog.hpp @@ -0,0 +1,32 @@ +#ifndef _GUITAR_LICENSEDIALOG_HPP_ +#define _GUITAR_LICENSEDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif + +class LicenseDialog : public DWindow +{ +public: + LicenseDialog(void); + virtual ~LicenseDialog(); + bool perform(GUIWindow &parentWindow,bool cancelTerminates=true); +private: + LicenseDialog(const LicenseDialog &someLicenseDialog); + LicenseDialog &operator=(const LicenseDialog &someLicenseDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool validateLicense(void)const; + void handleLicenseRequest(void)const; + void makeLicenseLines(String strLicense,Block &strLicenseLines)const; + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + bool mCancelTerminates; +}; +#endif diff --git a/guitar/backup/20030503/LineParser.cpp b/guitar/backup/20030503/LineParser.cpp new file mode 100644 index 0000000..5d387ae --- /dev/null +++ b/guitar/backup/20030503/LineParser.cpp @@ -0,0 +1,127 @@ +#include + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + +void LineParser::putElement(const Element &element) +{ + String strItem=Action(element.getAction()).toStringShort()+String().fromInt(element.getFret()); + *this+=strItem; + mPosition+=strItem.length(); + return; +} + +void LineParser::putElement(char ch) +{ + *this+=ch; + mPosition++; + return; +} + +int LineParser::peekElement(Element &element) +{ + int position=mPosition; + int result=getElement(element); + mPosition=position; + return result; +} diff --git a/guitar/backup/20030503/LineParser.hpp b/guitar/backup/20030503/LineParser.hpp new file mode 100644 index 0000000..2bdd01b --- /dev/null +++ b/guitar/backup/20030503/LineParser.hpp @@ -0,0 +1,101 @@ +#ifndef _GUITAR_LINEPARSER_HPP_ +#define _GUITAR_LINEPARSER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_ELEMENT_HPP_ +#include +#endif + +class LineParser : private String +{ +public: + LineParser(); + LineParser(const String &string); + virtual ~LineParser(); + LineParser &operator=(const String &string); + LineParser &operator++(); + LineParser &operator++(int /*postfixdummy*/); + void reset(void); + int getElement(Element &element); + void putElement(const Element &element); + void putElement(char ch); + int length(void)const; + int getPosition(void)const; + bool serialize(File &outFile)const; +private: + int peekElement(Element &element); + + int mPosition; + int mLength; +}; + +inline +LineParser::LineParser() +: mPosition(0), mLength(0) +{ +} + +inline +LineParser::LineParser(const String &string) +: String(string), mPosition(0), mLength(String::length()) +{ +} + +inline +LineParser::~LineParser() +{ +} + +inline +LineParser &LineParser::operator=(const String &string) +{ + (String&)*this=string; + mPosition=0; + mLength=String::length(); + return *this; +} + +inline +LineParser &LineParser::operator++() +{ + mPosition++; + return *this; +} + +inline +LineParser &LineParser::operator++(int /*postfixdummy*/) +{ + mPosition++; + return *this; +} + +inline +void LineParser::reset(void) +{ + mPosition=0; +} + +inline +int LineParser::length(void)const +{ + return mLength; +} + +inline +int LineParser::getPosition(void)const +{ + return mPosition; +} + +inline +bool LineParser::serialize(File &outFile)const +{ + if(!outFile.isOkay())return false; + outFile.writeLine(*this); + return true; +} +#endif diff --git a/guitar/backup/20030503/MIDIDialog.cpp b/guitar/backup/20030503/MIDIDialog.cpp new file mode 100644 index 0000000..db0a41d --- /dev/null +++ b/guitar/backup/20030503/MIDIDialog.cpp @@ -0,0 +1,136 @@ +#include +#include +#include + +MIDIDialog::MIDIDialog(void) +{ + mInitHandler.setCallback(this,&MIDIDialog::initHandler); + mCreateHandler.setCallback(this,&MIDIDialog::createHandler); + mCloseHandler.setCallback(this,&MIDIDialog::closeHandler); + mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler); + mCommandHandler.setCallback(this,&MIDIDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog) +{ // private implementation + *this=someMIDIDialog; +} + +MIDIDialog::~MIDIDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog) +{ // private implementation + return *this; +} + +bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack) +{ + bool returnCode; + mPathMIDIFileName=strPathMIDIFileName; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + if(returnCode)selectedTrack=mSelectedTrack; + return returnCode; +} + +CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData) +{ + MIDIHelper midiHelper; + TrackInfos trackInfos; + midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos); + setTrackInformation(trackInfos); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + mSelectedTrack=getSelectedTrack(); + if(-1==mSelectedTrack)endDialog(false); + else endDialog(true); + break; + } + if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MIDIDialog::setTrackInformation(TrackInfos &trackInfos) +{ + bool isFirst=true; + for(int index=0;index=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return; + mSelectedTrack=clickedId-MIDI_TRACK1; + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L); + } +} + +int MIDIDialog::getSelectedTrack(void)const +{ + int selectedTrack=-1; + + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(1==sendMessage(btnId,BM_GETCHECK,0,0L)) + { + selectedTrack=btnId-MIDI_TRACK1; + break; + } + } + return selectedTrack; +} + + + + + diff --git a/guitar/backup/20030503/MIDIDialog.hpp b/guitar/backup/20030503/MIDIDialog.hpp new file mode 100644 index 0000000..01781b3 --- /dev/null +++ b/guitar/backup/20030503/MIDIDialog.hpp @@ -0,0 +1,39 @@ +#ifndef _GUITAR_MIDIDIALOG_HPP_ +#define _GUITAR_MIDIDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIDialog : public DWindow +{ +public: + MIDIDialog(void); + virtual ~MIDIDialog(); + bool perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack); +private: + MIDIDialog(const MIDIDialog &someMIDIDialog); + MIDIDialog &operator=(const MIDIDialog &someMIDIDialog); + void handleClick(const CallbackData &someCallbackData); + int getSelectedTrack(void)const; + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTrackInformation(TrackInfos &trackInfos); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + String mPathMIDIFileName; + int mSelectedTrack; +}; +#endif diff --git a/guitar/backup/20030503/MIDIHelper.cpp b/guitar/backup/20030503/MIDIHelper.cpp new file mode 100644 index 0000000..06c36b9 --- /dev/null +++ b/guitar/backup/20030503/MIDIHelper.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include +#include +#include + +bool MIDIHelper::getTrackInfo(const String &strPathMIDIFileName,TrackInfos &trackInfos) +{ + MidiData midiData(strPathMIDIFileName); + midiData.getTrackInfo(trackInfos); + return trackInfos.size()?true:false; +} + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack) +{ + TabEntry entry; + Tablature tablature; + TabEntries tabEntries; + + WORD currPlayTime; + WORD prevPlayTime; + int eventCount; + bool resultCode; + bool haveTrack; + Block notes; + TrackInfos trackInfos; + + resultCode=false; + haveTrack=false; + if(strPathMidiFileName.isNull())return resultCode; + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + + for(int trIndex=0;trIndex &strPathTabFileNames) +{ + String strPathTabFileName; + WORD currPlayTime; + WORD prevPlayTime; + int currentTrack; + int eventCount; + Block tracks; + Block notes; + TrackInfos trackInfos; + + if(strPathMidiFileName.isNull())return false; + strPathTabFileNames.remove(); + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + if(!tracks.size())return false; + for(int trIndex=0;trIndex ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + notePaths.size(notes.size()); + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + MIDIHelper(); + virtual ~MIDIHelper(); +// bool import(const String &strPathMidiFileName,const String &strPathTabFileName); + bool import(const String &strPathMidiFileName,Block &strPathTabFileNames); + bool import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack); + bool getTrackInfo(const String &strpathMIDIFileName,TrackInfos &trackInfos); +private: + bool createEntry(Block ¬es,TabEntry &entry); + bool filterNotesOnFretboard(Block ¬es); + + Fretboard mFretboard; + Block mMessages; +}; + +inline +MIDIHelper::MIDIHelper() +{ +} + +inline +MIDIHelper::~MIDIHelper() +{ +} +#endif diff --git a/guitar/backup/20030503/MessageBox.hpp b/guitar/backup/20030503/MessageBox.hpp new file mode 100644 index 0000000..53be76b --- /dev/null +++ b/guitar/backup/20030503/MessageBox.hpp @@ -0,0 +1,47 @@ +#ifndef _GUITAR_MESSAGE_HPP_ +#define _GUITAR_MESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif + +class MessageBox +{ +public: + static LRESULT messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type=MB_OK); + static LRESULT messageBox(const String &strCaption,const String &strText,UINT type=MB_OK); +private: + MessageBox(); + static String getProductVersion(const VersionInfo &versionInfo); +}; + +inline +MessageBox::MessageBox() +{ +} + +inline +LRESULT MessageBox::messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(parent,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +LRESULT MessageBox::messageBox(const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(0,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +String MessageBox::getProductVersion(const VersionInfo &versionInfo) +{ + return String("[")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("]"); +} +#endif diff --git a/guitar/backup/20030503/NoteType.cpp b/guitar/backup/20030503/NoteType.cpp new file mode 100644 index 0000000..2877fe9 --- /dev/null +++ b/guitar/backup/20030503/NoteType.cpp @@ -0,0 +1,80 @@ +#include + +const NoteType &NoteType::operator++(void) +{ + if(WholeNote==mNoteType)mNoteType=HalfNote; + else if(HalfNote==mNoteType)mNoteType=QuarterNote; + else if(QuarterNote==mNoteType)mNoteType=EighthNote; + else if(EighthNote==mNoteType)mNoteType=SixteenthNote; + else if(SixteenthNote==mNoteType)mNoteType=ThirtySecondNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixtyFourthNote; + else mNoteType++; + return *this; +} + +const NoteType &NoteType::operator--(void) +{ + if(HalfNote==mNoteType)mNoteType=WholeNote; + else if(QuarterNote==mNoteType)mNoteType=HalfNote; + else if(EighthNote==mNoteType)mNoteType=QuarterNote; + else if(SixteenthNote==mNoteType)mNoteType=EighthNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixteenthNote; + else if(SixtyFourthNote==mNoteType)mNoteType=ThirtySecondNote; + else mNoteType--; + return *this; +} + +NoteType &NoteType::fromString(const String &stringRep) +{ + if(stringRep.equals(toString(WholeNote)))mNoteType=WholeNote; + else if(stringRep.equals(toString(HalfNote)))mNoteType=HalfNote; + else if(stringRep.equals(toString(QuarterNote)))mNoteType=QuarterNote; + else if(stringRep.equals(toString(EighthNote)))mNoteType=EighthNote; + else if(stringRep.equals(toString(SixteenthNote)))mNoteType=SixteenthNote; + else if(stringRep.equals(toString(ThirtySecondNote)))mNoteType=ThirtySecondNote; + else if(stringRep.equals(toString(SixtyFourthNote)))mNoteType=SixtyFourthNote; + else mNoteType=stringRep.betweenString('/',0).toInt(); + return *this; +} + +Array NoteType::enumerate(void) +{ + Array values; + values.size(7); + values[0]=NoteType::toString(WholeNote); + values[1]=NoteType::toString(HalfNote); + values[2]=NoteType::toString(QuarterNote); + values[3]=NoteType::toString(EighthNote); + values[4]=NoteType::toString(SixteenthNote); + values[5]=NoteType::toString(ThirtySecondNote); + values[6]=NoteType::toString(SixtyFourthNote); + return values; +} + +String NoteType::toString(void)const +{ + return toString(getNoteType()); +} + +String NoteType::toString(TypeNote noteType) +{ + switch(noteType) + { + case WholeNote : + return "1/1"; + case HalfNote : + return "1/2"; + case QuarterNote : + return "1/4"; + case EighthNote : + return "1/8"; + case SixteenthNote : + return "1/16"; + case ThirtySecondNote : + return "1/32"; + case SixtyFourthNote : + return "1/64"; + default : + return "1/"+String().fromInt((int)noteType); + } +} diff --git a/guitar/backup/20030503/NoteType.hpp b/guitar/backup/20030503/NoteType.hpp new file mode 100644 index 0000000..f9c0567 --- /dev/null +++ b/guitar/backup/20030503/NoteType.hpp @@ -0,0 +1,86 @@ +#ifndef _GUITAR_NOTETYPE_HPP_ +#define _GUITAR_NOTETYPE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class NoteType +{ +public: + enum TypeNote{WholeNote=1,HalfNote=2,QuarterNote=4,EighthNote=8, + SixteenthNote=16,ThirtySecondNote=32,SixtyFourthNote=64}; + NoteType(TypeNote noteType=QuarterNote); + virtual ~NoteType(); + const NoteType &operator++(void); + NoteType operator++(int postfix); + const NoteType &operator--(void); + NoteType operator--(int postfix); + TypeNote getNoteType(void)const; + int toInt(void)const; + NoteType &fromInt(int noteType); + NoteType &fromString(const String &stringRep); + void setNoteType(TypeNote noteType); + String toString(void)const; + static Array enumerate(void); + static String toString(TypeNote noteType); +private: + int mNoteType; +}; + +inline +NoteType::NoteType(TypeNote noteType) +: mNoteType(noteType) +{ +} + +inline +NoteType::~NoteType() +{ +} + +inline +NoteType NoteType::operator++(int postfix) +{ + NoteType noteType(*this); + operator++(); + return noteType; +} + +inline +NoteType NoteType::operator--(int postfix) +{ + NoteType noteType(*this); + operator--(); + return noteType; +} + +inline +int NoteType::toInt(void)const +{ + return (int)mNoteType; +} + +inline +NoteType &NoteType::fromInt(int noteType) +{ + mNoteType=(TypeNote)noteType; + return *this; +} + +inline +NoteType::TypeNote NoteType::getNoteType(void)const +{ + return (TypeNote)mNoteType; +} + +inline +void NoteType::setNoteType(TypeNote noteType) +{ + mNoteType=noteType; +} +#endif + + diff --git a/guitar/backup/20030503/Range.hpp b/guitar/backup/20030503/Range.hpp new file mode 100644 index 0000000..a848e22 --- /dev/null +++ b/guitar/backup/20030503/Range.hpp @@ -0,0 +1,119 @@ +#ifndef _GUITAR_RANGE_HPP_ +#define _GUITAR_RANGE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Range; +typedef Block TabRanges; + +class Range +{ +public: + Range(); + virtual ~Range(); + int getBeginRange(void)const; + void setBeginRange(int beginRange); + int getEndRange(void)const; + void setEndRange(int endRange); + const String &getRangeName(void)const; + void setRangeName(const String &rangeName); + void autoName(void); + String toString(void)const; + String toTabbedString(void)const; +private: + enum{ShortNameLength=20}; + String createRangeName(void)const; + + int mBeginRange; + int mEndRange; + String mRangeName; +}; + +inline +Range::Range() +: mBeginRange(0), mEndRange(0) +{ +} + +inline +Range::~Range() +{ +} + +inline +int Range::getBeginRange(void)const +{ + return mBeginRange; +} + +inline +void Range::setBeginRange(int beginRange) +{ + mBeginRange=beginRange; +} + +inline +int Range::getEndRange(void)const +{ + return mEndRange; +} + +inline +void Range::setEndRange(int endRange) +{ + mEndRange=endRange; +} + +inline +const String &Range::getRangeName(void)const +{ + return mRangeName; +} + +inline +void Range::setRangeName(const String &rangeName) +{ + mRangeName=rangeName; +} + +inline +void Range::autoName(void) +{ + setRangeName(createRangeName()); +} + +inline +String Range::createRangeName(void)const +{ + String strRangeName("RANGE_"); + strRangeName+=String().fromInt(getBeginRange()); + strRangeName+=String("_"); + strRangeName+=String().fromInt(getEndRange()); + return strRangeName; +} + +inline +String Range::toString(void)const +{ + String strString(getRangeName()); + strString+=String("[")+String().fromInt(getBeginRange())+String("->")+String().fromInt(getEndRange()); + return strString; +} + +inline +String Range::toTabbedString(void)const +{ + String strItem; + String shortName; + + shortName=getRangeName(); + strItem+=shortName.substr(0,ShortNameLength-1)+"\t"; + strItem+=String().fromInt(getBeginRange())+"\t"; + strItem+=String().fromInt(getEndRange()); + return strItem; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030503/RangeDlg.cpp b/guitar/backup/20030503/RangeDlg.cpp new file mode 100644 index 0000000..5b65779 --- /dev/null +++ b/guitar/backup/20030503/RangeDlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include + +RangeDialog::RangeDialog(void) +{ + mInitHandler.setCallback(this,&RangeDialog::initHandler); + mCreateHandler.setCallback(this,&RangeDialog::createHandler); + mCloseHandler.setCallback(this,&RangeDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog::RangeDialog(const RangeDialog &someRangeDialog) +{ // private implementation + *this=someRangeDialog; +} + +RangeDialog::~RangeDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog) +{ // private implementation + return *this; +} + +bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + mTabRanges=ranges; + mMaxRange=maxRange; + mIsSelection=isSelect; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST); + mRangeList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(55)); + mRangeList->setTabStops(stops); + setRangeList(); + if(mIsSelection) + { + enable(RANGE_INSERT,false); + enable(RANGE_DELETE,false); + setCaption("Range Select"); + } + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(mIsSelection)handleRangeSelection(); + endDialog(true); + break; + case RANGE_INSERT : + handleRangeInsert(); + break; + case RANGE_DELETE : + handleRangeDelete(); + break; + } + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + if(mIsSelection) + { + handleRangeSelection(); + endDialog(true); + } + else handleRangeEditSelection(); + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeDialog::setRangeList(void) +{ + for(int index=0;indexaddString(range.toTabbedString()); + } + mRangeList->setCurrent(0); + return; +} + +void RangeDialog::handleRangeSelection(void) +{ + mSelection=mRangeList->getCurrent(); +} + +void RangeDialog::handleRangeEditSelection(void) +{ + RangeEditDialog rangeEditDialog; + int currSel; + + currSel=mRangeList->getCurrent(); + if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return; + Range range=rangeEditDialog.getRange(); + mTabRanges.remove(currSel); + mTabRanges.insert(&range); + mRangeList->deleteString(currSel); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeInsert(void) +{ + RangeEditDialog rangeEditDialog; + Range range; + + if(!rangeEditDialog.perform(*this,range,mMaxRange))return; + range=rangeEditDialog.getRange(); + mTabRanges.insert(&range); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeDelete(void) +{ + int currSel; + + if(-1==(currSel=mRangeList->getCurrent()))return; + if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return; + mRangeList->deleteString(currSel); + mTabRanges.remove(currSel); + currSel--; + if(currSel<0)mRangeList->setCurrent(0); + else mRangeList->setCurrent(currSel); +} diff --git a/guitar/backup/20030503/RangeDlg.hpp b/guitar/backup/20030503/RangeDlg.hpp new file mode 100644 index 0000000..0fc857c --- /dev/null +++ b/guitar/backup/20030503/RangeDlg.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_RANGEDLG_HPP_ +#define _GUITAR_RANGEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class TabEntry; + +class RangeDialog : public DWindow +{ +public: + RangeDialog(void); + virtual ~RangeDialog(); + bool perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect=false); + const TabRanges &getTabRanges(void)const; + int getSelection(void)const; +private: + RangeDialog(const RangeDialog &someRangeDialog); + RangeDialog &operator=(const RangeDialog &someRangeDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setRangeList(void); + void handleRangeSelection(void); + void handleRangeEditSelection(void); + void handleRangeInsert(void); + void handleRangeDelete(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mRangeList; + Point mDisplayPoint; + TabRanges mTabRanges; + bool mIsSelection; + int mMaxRange; + int mSelection; +}; + +inline +const TabRanges &RangeDialog::getTabRanges(void)const +{ + return mTabRanges; +} + +inline +int RangeDialog::getSelection(void)const +{ + return mSelection; +} +#endif diff --git a/guitar/backup/20030503/RangeEditDlg.cpp b/guitar/backup/20030503/RangeEditDlg.cpp new file mode 100644 index 0000000..e0daace --- /dev/null +++ b/guitar/backup/20030503/RangeEditDlg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +RangeEditDialog::RangeEditDialog(void) +{ + mInitHandler.setCallback(this,&RangeEditDialog::initHandler); + mCreateHandler.setCallback(this,&RangeEditDialog::createHandler); + mCloseHandler.setCallback(this,&RangeEditDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeEditDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeEditDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog::RangeEditDialog(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + *this=someRangeEditDialog; +} + +RangeEditDialog::~RangeEditDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog &RangeEditDialog::operator=(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + return *this; +} + +bool RangeEditDialog::perform(GUIWindow &parentWindow,const Range &range,int maxRange) +{ + mRange=range; + mMaxRange=maxRange; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEEDITDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeEditDialog::initHandler(CallbackData &someCallbackData) +{ + if(mRange.getRangeName().isNull()&&!mRange.getBeginRange()&&!mRange.getEndRange())setCaption("Insert Range"); + setData(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeEditDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + getData(); + if(!isValid())errorMessage(); + else endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeEditDialog::setData(void)const +{ + setText(RANGEEDIT_NAME,mRange.getRangeName()); + setText(RANGEEDIT_BEGIN,String().fromInt(mRange.getBeginRange())); + setText(RANGEEDIT_END,String().fromInt(mRange.getEndRange())); +} + +void RangeEditDialog::getData(void) +{ + String strName; + String strBegin; + String strEnd; + + getText(RANGEEDIT_NAME,strName); + mRange.setRangeName(strName); + getText(RANGEEDIT_BEGIN,strBegin); + mRange.setBeginRange(strBegin.toInt()); + getText(RANGEEDIT_END,strEnd); + mRange.setEndRange(strEnd.toInt()); +} + +bool RangeEditDialog::isValid(void) +{ + if(mRange.getRangeName().isNull()) + { + mLastError="Range name cannot be empty."; + return false; + } + if(mRange.getBeginRange()<0) + { + mLastError="Begin range position must be greater than zero."; + return false; + } + if(mRange.getBeginRange()>mRange.getEndRange()) + { + mLastError="Begin range position must be smaller than end range position."; + return false; + } + if(mRange.getEndRange()>=mMaxRange) + { + mLastError="End range position must be less than "+String().fromInt(mMaxRange); + return false; + } + return true; +} + +void RangeEditDialog::errorMessage(void) +{ + MessageBox::messageBox(*this,"Invalid range.",mLastError.str()); +} diff --git a/guitar/backup/20030503/RangeEditDlg.hpp b/guitar/backup/20030503/RangeEditDlg.hpp new file mode 100644 index 0000000..3139037 --- /dev/null +++ b/guitar/backup/20030503/RangeEditDlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_RANGEEDITDLG_HPP_ +#define _GUITAR_RANGEEDITDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class RangeEditDialog : public DWindow +{ +public: + RangeEditDialog(void); + virtual ~RangeEditDialog(); + bool perform(GUIWindow &parentWindow,const Range &range,int maxRange); + const Range &getRange(void)const; +private: + RangeEditDialog(const RangeEditDialog &someRangeEditDialog); + RangeEditDialog &operator=(const RangeEditDialog &someRangeEditDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setData(void)const; + void getData(void); + bool isValid(void); + void errorMessage(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Range mRange; + String mLastError; + int mMaxRange; +}; + +inline +const Range &RangeEditDialog::getRange(void)const +{ + return mRange; +} +#endif diff --git a/guitar/backup/20030503/Registration.hpp b/guitar/backup/20030503/Registration.hpp new file mode 100644 index 0000000..9871a01 --- /dev/null +++ b/guitar/backup/20030503/Registration.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REGISTRATION_HPP_ +#define _GUITAR_REGISTRATION_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _GUITAR_LICENSE_HPP_ +#include +#endif + +// Registration procedure +// When application first comes up it will check registry for a license + +// If no license exists and there is no "install.gid" file it will create a 30 day license +// along with an "install.gid" hidden file in the product directory. +// If no license key exists and there IS an "install.gid" file in the product directory, +// the user will be prompted to enter a valid license key. +// +// +// If a license exists it will check the validity of the license by.... +// If the license is type "non expiring", the application will proceeed normally. +// If the license is type "expiring", it will check to see if the license has expired. +// If the license has expired, a dialog box will appear, prompting the user to +// enter a valid license. +// If no valid license is entered, then the application will exit. +// In addition, a dialog box will be available from the help screen to enable the user +// to enter in additional licenses + +class Registration +{ +public: + virtual ~Registration(); + static Registration &getInstance(); + bool hasLicense(void)const; + bool hasGID(void)const; + bool getLicense(License &license)const; + bool create30DayLicense(void)const; + bool create15DayLicense(void)const; + bool createPermanentLicense(void)const; + bool createLicense(int days)const; + bool removeLicense(void); + bool applyLicense(const String &uuencodedLicense); + bool applyLicense(Block &strLicenseLines); + License generatePermanentLicense(void)const; // return a permanent license +private: + Registration(); + static SmartPointer smRegistration; + + String mRegistrationKeyName; + String mSettingsLicenseKey; + RegKey mRegKeyRegistration; +}; +#endif diff --git a/guitar/backup/20030503/ScaleDlg.cpp b/guitar/backup/20030503/ScaleDlg.cpp new file mode 100644 index 0000000..5adc7f0 --- /dev/null +++ b/guitar/backup/20030503/ScaleDlg.cpp @@ -0,0 +1,279 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ScaleDialog::ScaleDialog(void) +: mInEdit(false) +{ + mInitHandler.setCallback(this,&ScaleDialog::initHandler); + mCreateHandler.setCallback(this,&ScaleDialog::createHandler); + mCloseHandler.setCallback(this,&ScaleDialog::closeHandler); + mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler); + mCommandHandler.setCallback(this,&ScaleDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog) +{ // private implementation + *this=someScaleDialog; +} + +ScaleDialog::~ScaleDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog) +{ // private implementation + return *this; +} + +bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; + return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + case SCALEDLG_SPIN : + break; + case SCALEDLG_ROOT : + handleRoot(); + break; + case SCALEDLG_LIST : + if(LBN_KILLFOCUS!=someCallbackData.wmCommandCommand()&& + LBN_SETFOCUS!=someCallbackData.wmCommandCommand()) + handleList(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void ScaleDialog::handleOk(void) +{ +} + +void ScaleDialog::handleRoot(void) +{ + String strRoot; + + if(mInEdit)return; + mInEdit=true; + getText(SCALEDLG_ROOT,strRoot); + strRoot.upper(); + if(strRoot=="0")setText(SCALEDLG_ROOT,"A"); + else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#"); + else if(strRoot=="2")setText(SCALEDLG_ROOT,"B"); + else if(strRoot=="3")setText(SCALEDLG_ROOT,"C"); + else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#"); + else if(strRoot=="5")setText(SCALEDLG_ROOT,"D"); + else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#"); + else if(strRoot=="7")setText(SCALEDLG_ROOT,"E"); + else if(strRoot=="8")setText(SCALEDLG_ROOT,"F"); + else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#"); + else if(strRoot=="10")setText(SCALEDLG_ROOT,"G"); + else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#"); + else {mInEdit=false;return;} + if(!showScale())setText(SCALEDLG_ROOT,"A"); + mInEdit=false; +} + +void ScaleDialog::handleList(void) +{ + showScale(); +} + +bool ScaleDialog::showScale(void) +{ + String strScale; + String strRoot; + DWORD current; + + current=mScaleList->getCurrent(); + getText(SCALEDLG_ROOT,strRoot); + if(Note::None==Note::getNoteType(strRoot))return false; + mScaleList->getText(strScale,current); + playScale(strRoot,strScale); + return true; +} + +void ScaleDialog::playScale(const String &root,const String &scale) +{ + if(BST_CHECKED==sendMessage(SCALEDLG_MUTE,BM_GETCHECK,0,0L))return; + if(scale=="Ionian") + { + IonianScale ionianScale(Note::getNoteType(root)); + playScale(ionianScale); + } + else if(scale=="Dorian") + { + DorianScale dorianScale(Note::getNoteType(root)); + playScale(dorianScale); + } + else if(scale=="Phrygian") + { + PhrygianScale phrygianScale(Note::getNoteType(root)); + playScale(phrygianScale); + } + else if(scale=="Lydian") + { + LydianScale lydianScale(Note::getNoteType(root)); + playScale(lydianScale); + } + else if(scale=="Mixolydian") + { + MixolydianScale mixolydianScale(Note::getNoteType(root)); + playScale(mixolydianScale); + } + else if(scale=="Aeolian") + { + AeolianScale aeolianScale(Note::getNoteType(root)); + playScale(aeolianScale); + } + else if(scale=="Locrian") + { + LocrianScale locrianScale(Note::getNoteType(root)); + playScale(locrianScale); + } + else if(scale=="Pentatonic Minor") + { + PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root)); + playScale(pentatonicMinorScale); + } + else if(scale=="Harmonic Minor") + { + HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root)); + playScale(harmonicMinorScale); + } + else if(scale=="Melodic Minor") + { + MelodicMinorScale melodicMinorScale(Note::getNoteType(root)); + playScale(melodicMinorScale); + } + else if(scale=="Dorian-II") + { + DorianIIScale dorianIIScale(Note::getNoteType(root)); + playScale(dorianIIScale); + } + else if(scale=="Lydian Augmented") + { + LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root)); + playScale(lydianAugmentedScale); + } + else if(scale=="Lydian Dominant") + { + LydianDominantScale lydianDominantScale(Note::getNoteType(root)); + playScale(lydianDominantScale); + } + else if(scale=="Locrian2") + { + Locrian2Scale locrian2Scale(Note::getNoteType(root)); + playScale(locrian2Scale); + } + else if(scale=="Altered") + { + AlteredScale alteredScale(Note::getNoteType(root)); + playScale(alteredScale); + } + else if(scale=="Diminished(Whole Step)") + { + DiminishedWholeScale diminishedWholeScale(Note::getNoteType(root)); + playScale(diminishedWholeScale); + } + else if(scale=="Diminished(Half Step)") + { + DiminishedHalfScale diminishedHalfScale(Note::getNoteType(root)); + playScale(diminishedHalfScale); + } + else if(scale=="Whole Tone") + { + WholeToneScale wholeToneScale(Note::getNoteType(root)); + playScale(wholeToneScale); + } +} + +void ScaleDialog::playScale(const Scale &scale) +{ + CallbackData cbData(2,(LPARAM)&scale); + CursorControl cursorControl; + cursorControl.waitCursor(true); + mPlayNoteHandler.callback(cbData); + cursorControl.waitCursor(false); +} + + diff --git a/guitar/backup/20030503/ScaleDlg.hpp b/guitar/backup/20030503/ScaleDlg.hpp new file mode 100644 index 0000000..291ebaa --- /dev/null +++ b/guitar/backup/20030503/ScaleDlg.hpp @@ -0,0 +1,59 @@ +#ifndef _GUITAR_SCALEDLG_HPP_ +#define _GUITAR_SCALEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class Scale; + +class ScaleDialog : public DWindow +{ +public: + ScaleDialog(void); + virtual ~ScaleDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + ScaleDialog(const ScaleDialog &someScaleDialog); + ScaleDialog &operator=(const ScaleDialog &someScaleDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void handleRoot(void); + void handleList(void); + bool showScale(void); + void playScale(const Scale &scale); + void playScale(const String &root,const String &scale); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mScaleList; + SmartPointer mMIDIDevice; + CallbackPointer mPlayNoteHandler; + Fretboard mFretboard; + bool mInEdit; +}; +#endif diff --git a/guitar/backup/20030503/ScrollInfo.cpp b/guitar/backup/20030503/ScrollInfo.cpp new file mode 100644 index 0000000..76ba573 --- /dev/null +++ b/guitar/backup/20030503/ScrollInfo.cpp @@ -0,0 +1,136 @@ +#include + +bool ScrollInfo::pageDown(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()+PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +bool ScrollInfo::pageUp(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()-PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + diff --git a/guitar/backup/20030503/ScrollInfo.hpp b/guitar/backup/20030503/ScrollInfo.hpp new file mode 100644 index 0000000..2dc42c1 --- /dev/null +++ b/guitar/backup/20030503/ScrollInfo.hpp @@ -0,0 +1,274 @@ +#ifndef _GUITAR_SCROLLINFO_HPP_ +#define _GUITAR_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); + bool pageUp(void); + bool pageDown(void); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + + if(scrollableObjectWidth()==width&&scrollableObjectHeight()==height)return; + + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_REGISTRY_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class Sequencer : private MIDIOutputDevice +{ +public: + Sequencer(); + virtual ~Sequencer(); + bool midiEvent(const PureEvent &somePureEvent); + bool clearNotes(void); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + MIDIOutputDevice &getDevice(void); +private: + void changeProgram(void); +}; + +inline +Sequencer::Sequencer() +: MIDIOutputDevice(Registry().getMIDIOutputDevice()) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::Sequencer] Sequencer()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + changeProgram(); +} + +inline +Sequencer::~Sequencer() +{ + GlobalDefs::outDebug("[Sequencer::Sequencer] Sequencer()",GlobalDefs::Info); + closeDevice(); +} + +inline +bool Sequencer::midiEvent(const PureEvent &somePureEvent) +{ + GlobalDefs::outDebug(String("[Sequencer::midiEvent] ")+somePureEvent.toString(),GlobalDefs::Info); + return MIDIOutputDevice::midiEvent(somePureEvent); +} + +inline +bool Sequencer::hasDevice(void)const +{ + GlobalDefs::outDebug(String("[Sequencer::hasDevice] "),GlobalDefs::Info); + return MIDIOutputDevice::hasDevice(); +} + +inline +void Sequencer::closeDevice(void) +{ + GlobalDefs::outDebug(String("[Sequencer::closeDevice] "),GlobalDefs::Info); + MIDIOutputDevice::closeDevice(); +} + +inline +bool Sequencer::openDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::openDevice] registry.getMIDIOutputDevice()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; + changeProgram(); + return true; +} + +inline +bool Sequencer::clearNotes(void) +{ + GlobalDefs::outDebug(String("[Sequencer::clearNotes]"),GlobalDefs::Info); + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +} + +inline +MIDIOutputDevice &Sequencer::getDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::getDevice]"),GlobalDefs::Info); + if(!hasDevice()) + { + GlobalDefs::outDebug(String("[Sequencer::getDevice] OpenDevice"),GlobalDefs::Info); + MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()); + changeProgram(); + } + return (MIDIOutputDevice&)*this; +} + +inline +void Sequencer::changeProgram(void) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::changeProgram]"),GlobalDefs::Info); + midiEvent(ProgramChange(registry.getInstrument()).getEvent()); +} +#endif diff --git a/guitar/backup/20030503/TabEntry.cpp b/guitar/backup/20030503/TabEntry.cpp new file mode 100644 index 0000000..d0449ce --- /dev/null +++ b/guitar/backup/20030503/TabEntry.cpp @@ -0,0 +1,129 @@ +#include +#include +#include +#include + +TabEntry::TabEntry(const TabEntry &entry) +{ + *this=entry; +} + +TabEntry &TabEntry::operator=(const TabEntry &entry) +{ + remove(); + for(int index=0;index&)*this).operator[](index)==((TabEntry&)entry)[index]))return false; + } + return true; +} + +bool TabEntry::play(MIDIOutputDevice &midiDevice,bool useDelay) +{ + if(!midiDevice.hasDevice())return false; + for(int index=0;index::remove(entryIndex); + return true; +} + +String TabEntry::toString(void)const +{ + String str; + + str+="TABENTRY "; + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif +#ifndef _GUITAR_TIMING_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class TabEntry; +typedef Block TabEntries; + +class TabEntry : public Block +{ +public: + TabEntry(); + TabEntry(const TabEntry &entry); + virtual ~TabEntry(); + bool play(MIDIOutputDevice &midiDevice,bool useDelay=true); + bool operator==(const TabEntry &entry)const; + TabEntry &operator=(const TabEntry &entry); + const NoteType &getNoteType(void)const; + void setNoteType(const NoteType ¬eType); + String toString(void)const; + bool fromString(String strText); + bool contains(int string,int &entryIndex); + bool contains(int string); + bool remove(int string,int fret); + void remove(void); + bool addFrettedNote(int string,const FrettedNote &frettedNote); + bool setFrettedNote(int string,const FrettedNote &frettedNote); +private: + void delay(void); + + NoteType mNoteType; +}; + +inline +TabEntry::TabEntry() +{ +} + +inline +TabEntry::~TabEntry() +{ +} + +inline +const NoteType &TabEntry::getNoteType(void)const +{ + return mNoteType; +} + +inline +void TabEntry::setNoteType(const NoteType ¬eType) +{ + mNoteType=noteType; +} + +inline +void TabEntry::remove(void) +{ + Block::remove(); +} +#endif diff --git a/guitar/backup/20030503/TabLines.cpp b/guitar/backup/20030503/TabLines.cpp new file mode 100644 index 0000000..a56ae0d --- /dev/null +++ b/guitar/backup/20030503/TabLines.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +// returns -1 on error, 1 if added to entry, 0 otherwise + +int TabLines::firstElement(TabEntry &entry,Fretboard &fretboard) +{ + TabElement element; + + entry.remove(); + for(int index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabEntry; +class Fretboard; + +typedef Element TabElement[6]; + +class TabLines : public Array +{ +public: + enum{NumLines=6}; + TabLines(); + int firstElement(TabEntry &entry,Fretboard &fretboard); + int nextElement(TabEntry &entry,Fretboard &fretboard); + virtual ~TabLines(); +private: + bool haveElement(TabElement &elements)const; + bool validate(Element &elements)const; + void insert(TabEntry &entry,TabElement &elements,Fretboard &fretboard); + void synchronize(void); +}; + +inline +TabLines::TabLines() +{ + size(NumLines); +} + +inline +TabLines::~TabLines() +{ +} +#endif diff --git a/guitar/backup/20030503/TabView.cpp b/guitar/backup/20030503/TabView.cpp new file mode 100644 index 0000000..ba2f85b --- /dev/null +++ b/guitar/backup/20030503/TabView.cpp @@ -0,0 +1,95 @@ +#include + +TabView::TabView(void) +{ + mCreateHandler.setCallback(this,&TabView::createHandler); + mSizeHandler.setCallback(this,&TabView::sizeHandler); + mPaintHandler.setCallback(this,&TabView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&TabView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&TabView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabView::leftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +TabView::~TabView() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType TabView::createHandler(CallbackData &someCallbackData) +{ + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType TabView::sizeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType TabView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void TabView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String TabView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void TabView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(LTGRAY_BRUSH); +} + +void TabView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030503/TabView.hpp b/guitar/backup/20030503/TabView.hpp new file mode 100644 index 0000000..6f9ef25 --- /dev/null +++ b/guitar/backup/20030503/TabView.hpp @@ -0,0 +1,42 @@ +#ifndef _GUITAR_TABVIEW_HPP_ +#define _GUITAR_TABVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class StatusBarEx; + +class TabView : public MDIWindow +{ +public: + TabView(void); + virtual ~TabView(); + String getTitle(void)const; +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,WindowWidth=565,WindowHeight=210}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + SmartPointer mStatusBar; +}; +#endif diff --git a/guitar/backup/20030503/TabWriter.cpp b/guitar/backup/20030503/TabWriter.cpp new file mode 100644 index 0000000..d3f5222 --- /dev/null +++ b/guitar/backup/20030503/TabWriter.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + + GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug); + if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb")) + { + GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug); + return false; + } + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + initLines(); + setHeader(); + for(int index=0,entryCount=0;indexMaxItems) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outFile); + outFile.writeLine(String(" ")); + initLines(); + setHeader(); + entryCount=0; + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabWriter : public Array +{ +public: + TabWriter(); + virtual ~TabWriter(); + bool write(TabEntries &entries,const String &strPathTabFile); +private: + enum {MaxItems=30,NumLines=6}; + void writeLines(File &outFile); + void initLines(void); + void setHeader(void); + void synchronize(void); +}; + +inline +TabWriter::TabWriter() +{ +} + +inline +TabWriter::~TabWriter() +{ +} +#endif diff --git a/guitar/backup/20030503/Tablature.hpp b/guitar/backup/20030503/Tablature.hpp new file mode 100644 index 0000000..000104e --- /dev/null +++ b/guitar/backup/20030503/Tablature.hpp @@ -0,0 +1,93 @@ +#ifndef _GUITAR_TABLATURE_HPP_ +#define _GUITAR_TABLATURE_HPP_ +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_TABLINES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class GUIWindow; +class TabPage; + +class Tablature +{ +public: + typedef enum LastError{None,FileOpenError,NoTabsParsedError,NoFrettedNotesError}; + Tablature(); + Tablature(const String &pathFileName); + virtual ~Tablature(); + bool open(const String &pathFileTablature); // open tablature file + bool import(String pathFileTablature); // import tablature file into project + bool save(void); // save tablature file + bool saveAs(const String &pathFileTablature); // save tablature file as... + bool openProject(const String &pathFileName); // open existing project file + bool saveProject(const String &pathFileName=String()); // save current project + bool play(MIDIOutputDevice &midiDevice); + LastError getLastError(void)const; + const String &getPathFileTablature(void)const; + const String &getPathFileProject(void)const; + const TabEntries &getTabEntries(void)const; + void setTabEntries(const TabEntries &entries); + const TabRanges &getTabRanges(void)const; + void setTabRanges(const TabRanges &ranges); + static String getPathFileProject(const String &pathFileTablature); +private: + bool loadTabFile(const String &pathFileName); + bool parseTab(void); + bool isTabLine(const String &strLine,int &startElement)const; + bool setTypeAt(int index,const NoteType ¬eType); + void parseTypes(String strLine); + void parseRange(String strLine); + String getTypes(void)const; + + TabEntries mTabEntries; + TabRanges mTabRanges; + Block mTablature; + Fretboard mFretboard; + String mPathFileName; + LastError mLastError; + String mPathFileTablature; + String mPathFileProject; +}; + +inline +Tablature::Tablature() +{ +} + +inline +Tablature::Tablature(const String &pathFileName) +{ + open(pathFileName); +} + +inline +Tablature::~Tablature() +{ +} + +inline +Tablature::LastError Tablature::getLastError(void)const +{ + return mLastError; +} + +inline +const String &Tablature::getPathFileTablature(void)const +{ + return mPathFileTablature; +} + +inline +const String &Tablature::getPathFileProject(void)const +{ + return mPathFileProject; +} +#endif diff --git a/guitar/backup/20030503/Timing.cpp b/guitar/backup/20030503/Timing.cpp new file mode 100644 index 0000000..f638d7a --- /dev/null +++ b/guitar/backup/20030503/Timing.cpp @@ -0,0 +1,138 @@ +#include +#include +#include + +int Timing::mMicrosecondsPerQuarterNote=Timing::microsecondsPerQuarterNote(Registry().getMicrosecondsPerQuarterNote()); +int Timing::mMillisecondsPerWholeNote; +int Timing::mMillisecondsPerHalfNote; +int Timing::mMillisecondsPerQuarterNote; +int Timing::mMillisecondsPerEigthNote; +int Timing::mMillisecondsPerSixteenthNote; +int Timing::mMillisecondsPerThirtySecondNote; +int Timing::mMillisecondsPerSixtyFourthNote; + +int Timing::microsecondsPerQuarterNote(int microsecondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=microsecondsPerQuarterNote; + mMillisecondsPerQuarterNote=(double)microsecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; + return mMicrosecondsPerQuarterNote; +} + +int Timing::microsecondsPerQuarterNote(void) +{ + return mMicrosecondsPerQuarterNote; +} + +void Timing::secondsPerQuarterNote(float secondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=secondsPerQuarterNote*1000000.00;; + mMillisecondsPerQuarterNote=(double)mMicrosecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; +} + +int Timing::millisecondsPerWholeNote(void) +{ + return mMillisecondsPerWholeNote; +} + +int Timing::millisecondsPerHalfNote(void) +{ + return mMillisecondsPerHalfNote; +} + +int Timing::millisecondsPerQuarterNote(void) +{ + return mMillisecondsPerQuarterNote; +} + +int Timing::millisecondsPerEightNote(void) +{ + return mMillisecondsPerEigthNote; +} + +int Timing::millisecondsPerSixteenthNote(void) +{ + return mMillisecondsPerSixteenthNote; +} + +int Timing::millisecondsPerThirtySecondNote(void) +{ + return mMillisecondsPerThirtySecondNote; +} + +int Timing::millisecondsPerSixtyFourthNote(void) +{ + return mMillisecondsPerSixtyFourthNote; +} + +int Timing::getDelay(const NoteType ¬eType) +{ + switch(noteType.getNoteType()) + { + case NoteType::WholeNote : + return millisecondsPerWholeNote(); + case NoteType::HalfNote : + return millisecondsPerHalfNote(); + case NoteType::QuarterNote : + return millisecondsPerQuarterNote(); + case NoteType::EighthNote : + return millisecondsPerEightNote(); + case NoteType::SixteenthNote : + return millisecondsPerSixteenthNote(); + case NoteType::ThirtySecondNote : + return millisecondsPerThirtySecondNote(); + case NoteType::SixtyFourthNote : + return millisecondsPerSixtyFourthNote(); + default : + return millisecondsPerSixtyFourthNote(); + } +} + +String Timing::toString(void) +{ + String strTiming; + strTiming+=String("1/1=")+String().fromInt(millisecondsPerWholeNote())+String("ms, "); + strTiming+=String("1/2=")+String().fromInt(millisecondsPerHalfNote())+String("ms, "); + strTiming+=String("1/4=")+String().fromInt(millisecondsPerQuarterNote())+String("ms, "); + strTiming+=String("1/8=")+String().fromInt(millisecondsPerEightNote())+String("ms, "); + strTiming+=String("1/16=")+String().fromInt(millisecondsPerSixteenthNote())+String("ms, "); + strTiming+=String("1/32=")+String().fromInt(millisecondsPerThirtySecondNote())+String("ms, "); + strTiming+=String("1/64=")+String().fromInt(millisecondsPerSixtyFourthNote())+String("ms, "); + return strTiming; +} + + +/* +microseconds per quarter note = 631578 +milliseconds per quarter note = 631578/1000 = 631 + 631578*.001 = 631 + +msecs per qtr note=usecs per qtr note *.001 + +quarter note = msecs per 4th note +eigth note = msecs/2 +sixteenth note = msecs/4 +thirty second note = msecs/8 +sixty fourth note = msecs/16 + +(ie) +microsecs millisecs 4th note 8th note 16th note 32nd note 64th note +--------- --------- -------- -------- --------- --------- --------- + 631578 631 631 315 157 78 39 + +options +seconds per qtr note: .5 + +msecs per qtr note=(seconds_per_qtr_note*1000) +*/ \ No newline at end of file diff --git a/guitar/backup/20030503/Timing.hpp b/guitar/backup/20030503/Timing.hpp new file mode 100644 index 0000000..96bcf39 --- /dev/null +++ b/guitar/backup/20030503/Timing.hpp @@ -0,0 +1,48 @@ +#ifndef _GUITAR_TIMING_HPP_ +#define _GUITAR_TIMING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif + +class Timing +{ +public: + static int microsecondsPerQuarterNote(int microsecondsPerQuarterNote); + static int microsecondsPerQuarterNote(void); + static void secondsPerQuarterNote(float secondsPerQuarterNote); + static int millisecondsPerWholeNote(void); + static int millisecondsPerHalfNote(void); + static int millisecondsPerQuarterNote(void); + static int millisecondsPerEightNote(void); + static int millisecondsPerSixteenthNote(void); + static int millisecondsPerThirtySecondNote(void); + static int millisecondsPerSixtyFourthNote(void); + static int getDelay(const NoteType ¬eType); + static String toString(void); +private: + Timing(); + virtual ~Timing(); + static int mMicrosecondsPerQuarterNote; + static int mMillisecondsPerWholeNote; + static int mMillisecondsPerHalfNote; + static int mMillisecondsPerQuarterNote; + static int mMillisecondsPerEigthNote; + static int mMillisecondsPerSixteenthNote; + static int mMillisecondsPerThirtySecondNote; + static int mMillisecondsPerSixtyFourthNote; +}; + +inline +Timing::Timing() +{ +} + +inline +Timing::~Timing() +{ +} +#endif + diff --git a/guitar/backup/20030503/Tuning.cpp b/guitar/backup/20030503/Tuning.cpp new file mode 100644 index 0000000..c4b1cb6 --- /dev/null +++ b/guitar/backup/20030503/Tuning.cpp @@ -0,0 +1,20 @@ +#include +#include + +void Tuning::setStandardTuning(void) +{ + size(StandardTuningStrings); + operator[](0)=Note(Note::E,3); + operator[](1)=Note(Note::A,3); + operator[](2)=Note(Note::D,4); + operator[](3)=Note(Note::G,4); + operator[](4)=Note(Note::B,4); + operator[](5)=Note(Note::E,operator[](4).getOctave()+1); +} + +// virtuals + +int Tuning::getDelay(void)const +{ + return Delay; +} diff --git a/guitar/backup/20030503/Tuning.hpp b/guitar/backup/20030503/Tuning.hpp new file mode 100644 index 0000000..d4d41e7 --- /dev/null +++ b/guitar/backup/20030503/Tuning.hpp @@ -0,0 +1,43 @@ +#ifndef _GUITAR_TUNING_HPP_ +#define _GUITAR_TUNING_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif + +class Tuning : public Notes +{ +public: + enum {StandardTuningStrings=6,Delay=1000}; + Tuning(); + virtual ~Tuning(); + int getStrings(void)const; + void setStrings(int strings); + void setStandardTuning(void); +protected: + virtual int getDelay(void)const; +private: +}; + +inline +Tuning::Tuning() +{ + setStandardTuning(); +} + +inline +Tuning::~Tuning() +{ +} + +inline +int Tuning::getStrings(void)const +{ + return size(); +} + +inline +void Tuning::setStrings(int strings) +{ + size(strings); +} +#endif diff --git a/guitar/backup/20030503/chordmain.cpp b/guitar/backup/20030503/chordmain.cpp new file mode 100644 index 0000000..fc9ac30 --- /dev/null +++ b/guitar/backup/20030503/chordmain.cpp @@ -0,0 +1,33 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDef; + String strEnum; + File inFile("tabs/allchords.tab"); + File rcFile("chords.rc","wb"); + File hFile("chords.h","wb"); + int count(21000); + + rcFile.writeLine("#include "); + rcFile.writeLine("STRINGTABLE DISCARDABLE"); + rcFile.writeLine("BEGIN"); + while(inFile.readLine(strLine)) + { + strEnum="STRING_"+String().fromInt(count); + strDef=strEnum; + strDef+="\t\""; + strDef+=strLine.betweenString(0,':')+"\""; + rcFile.writeLine(strDef); + hFile.writeLine(String("#define ")+strEnum+String(" ")+String().fromInt(count)); + count++; + } + rcFile.writeLine("END"); + return 0; + +// MainFrame mainFrame; +// mainFrame.createWindow("TabMaster","TabMaster v1.00a","mainMenu","APP_ICON"); +// return mainFrame.messageLoop(); +} diff --git a/guitar/backup/20030503/guitar.hpp b/guitar/backup/20030503/guitar.hpp new file mode 100644 index 0000000..6fe0d82 --- /dev/null +++ b/guitar/backup/20030503/guitar.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_GUITAR_HPP_ +#define _GUITAR_GUITAR_HPP_ +#ifndef _GUITAR_GUITAR_H_ +#include +#endif +#endif diff --git a/guitar/backup/20030503/license.cpp b/guitar/backup/20030503/license.cpp new file mode 100644 index 0000000..61f14a2 --- /dev/null +++ b/guitar/backup/20030503/license.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +/* + The license will be uuencoded on top of xor. This should be sufficient to protect the contents. + Lic: TM105R20020101013001EF + VVVVVVYYYYMMDDTTDDCCCC + + XX=version TM105R. should check this against this product version and release + YYYY=year of license issuance. 30 day license will use this value to expire itself. + MM=month of license issuance 30 day license will use this value to expiure + DD=day of license issuance + TT=type of license + 01=30 day license, expires 30 days from issuance. + 02=Full license, never expires. + DD=for type 01 license, indicates number of days license is good for. + CCCC=checksum, just add up ASCII values of the characters through TT, display in hex. +*/ + +const String License::smBeginLicense="BEGIN LICENSE"; +const String License::smEndLicense="END LICENSE"; + +String License::generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount) +{ + String strLicenseKey; + String strIssueDate; + String strLicenseType; + String strDayCount; + String strChecksum; + + strLicenseKey=String("TM"); + strLicenseKey+=strProductVersion.substr(0,3); + ::sprintf(strIssueDate,"%4d%02d%02d",issueDate.year(),issueDate.month(),issueDate.day()); + strLicenseKey+=strIssueDate; + ::sprintf(strLicenseType,"%02d",licenseType); + strLicenseKey+=strLicenseType; + ::sprintf(strDayCount,"%02d",dayCount); + strLicenseKey+=strDayCount; + ::sprintf(strChecksum,"%04lx",calculateChecksum(strLicenseKey)); + strLicenseKey+=strChecksum; + return UUTool::encode(xor(strLicenseKey)); +} + +String numericEncode(const String &strLicense) +{ + return String(); +} + +String numericDecode(const String &strLicense) +{ + return String(); +} + +bool License::fromLines(Block &strLicenseLines) +{ + if(3!=strLicenseLines.size())return false; + if(!(strLicenseLines[0]==smBeginLicense))return false; + if(!(strLicenseLines[2]==smEndLicense))return false; + return fromString(strLicenseLines[1]); +} + +// TM105R2002040301 30 03d8 + +bool License::fromString(const String &strLicense) +{ + VersionInfo versionInfo; + SystemTime currDate; + SystemTime expireDate; + String strHeader; + String strDecoded; + String strVersion; + int hashCode; + + mUUEncodedLicense=strLicense; + strDecoded=xor(UUTool::decode(strLicense)); + strHeader=strDecoded.substr(0,1); + if(!(strHeader==String("TM")))return false; + mProductVersion=strDecoded.substr(2,5); + mIssueDate.year(strDecoded.substr(6,9).toInt()); + mIssueDate.month((SystemTime::Month)strDecoded.substr(10,11).toInt()); + mIssueDate.day(strDecoded.substr(12,13).toInt()); + mLicenseType=(LicenseType)strDecoded.substr(14,15).toInt(); + mDayCount=strDecoded.substr(16,17).toInt(); + hashCode=strDecoded.substr(18,21).hex(); + if(hashCode!=calculateChecksum(strDecoded.substr(0,17)))return false; + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return mIsValid=true; + expireDate=mIssueDate; + expireDate.daysAdd360(mDayCount); + if(currDate>=expireDate)return false; + return mIsValid=true; +} + +String License::xor(const String &strLicense) +{ + String strEncoded; + int strLength; + + strEncoded.reserve((strLength=strLicense.length())+1); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); +} + diff --git a/guitar/backup/20030503/mainfrm.cpp b/guitar/backup/20030503/mainfrm.cpp new file mode 100644 index 0000000..ede5ae6 --- /dev/null +++ b/guitar/backup/20030503/mainfrm.cpp @@ -0,0 +1,1035 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); + mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + return false; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + return false; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_PRINT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_PRINT",GlobalDefs::Verbose); + handleFilePrint(); + break; + case MENU_FILE_NEW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_NEW",GlobalDefs::Verbose); + handleFileNew(); + break; + case MENU_FILE_OPEN : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_OPEN",GlobalDefs::Verbose); + handleOpenProject(); + break; + case MENU_FILE_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_IMPORT",GlobalDefs::Verbose); + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_MIDI_IMPORT",GlobalDefs::Verbose); + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_CLOSE",GlobalDefs::Verbose); + handleFileClose(); + break; + case MENU_FILE_EXIT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_EXIT",GlobalDefs::Verbose); + handleFileExit(); + break; + case MENU_FILE_SAVE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVE",GlobalDefs::Verbose); + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVEAS",GlobalDefs::Verbose); + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_VIEW_FRETBOARD",GlobalDefs::Verbose); + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAY",GlobalDefs::Verbose); + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYTOEND",GlobalDefs::Verbose); + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYREPEATED",GlobalDefs::Verbose); + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE",GlobalDefs::Verbose); + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE_REPEATED",GlobalDefs::Verbose); + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_STOP",GlobalDefs::Verbose); + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_ENTRYPROPS",GlobalDefs::Verbose); + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETENDRANGE",GlobalDefs::Verbose); + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETSTARTRANGE",GlobalDefs::Verbose); + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_RANGES",GlobalDefs::Verbose); + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_INCREASETEMPO",GlobalDefs::Verbose); + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_DECREASETEMPO",GlobalDefs::Verbose); + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_SETTINGS",GlobalDefs::Verbose); + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_LOOKUP",GlobalDefs::Verbose); + handleChordLookup(); + break; + case MENU_FRETBOARD_CLEAR : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_CLEAR",GlobalDefs::Verbose); + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_SHOWALLPOSITIONS",GlobalDefs::Verbose); + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_SCALES_SHOW",GlobalDefs::Verbose); + handleShowScales(); + break; + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + break; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + break; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CASCADE",GlobalDefs::Verbose); + cascade(); + break; + case IDM_TILE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_TILE",GlobalDefs::Verbose); + tile(); + break; + case IDM_ARRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_ARRANGE",GlobalDefs::Verbose); + arrange(); + break; + case IDM_CLOSEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CLOSEALL",GlobalDefs::Verbose); + closeAll(); + break; + case IDM_MINIMIZEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_MINIMIZEALL",GlobalDefs::Verbose); + minimizeAll(); + break; + case IDM_RESTOREALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_RESTOREALL",GlobalDefs::Verbose); + restoreAll(); + break; + default : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::keyDownHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::paintHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); + GlobalDefs::outDebug("[MainFrame::createHandler]",GlobalDefs::Verbose); + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + setWindowPos(InitialWidth,InitialHeight); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + updateHistory(); + if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ + Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::guiFretboardHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + + GlobalDefs::outDebug("[MainFrame::guiFretboardHandler]",GlobalDefs::Verbose); + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow); + } + if(!someCallbackData.lParam()) + { + ((FretViewWindow&)*mdiWindow).clearNotes(); + } + else + { + if(!someCallbackData.wParam()) + { + const TabEntry &entry=*(TabEntry*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(entry,true,true); + } + else if(1==someCallbackData.wParam()) + { + const Note ¬e=*(Note*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(note); + } + else if(2==someCallbackData.wParam()) // This is used by the scale dialog + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale,true); + } + else if(3==someCallbackData.wParam()) // not currently used see ScaleDlg + { + const FrettedNotes &frettedNotes=*(FrettedNotes*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(frettedNotes); + } + } + return false; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} + +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} + +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} + +// menu handlers + +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} + +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} + +void MainFrame::handleFileNew(void) +{ + createProjectView(); +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + createProjectView(strPathTabFile); +} + +void MainFrame::handleMIDIImport(void) +{ + OpenDialog openDialog; + String strPathMIDIFile; + String strPathTabFileName; + MIDIHelper midiHelper; + CursorControl cursorControl; + MIDIDialog midiDialog; + License license; + int selectedTrack; + + Registration::getInstance().getLicense(license); + if(!license.allowFeature(License::MIDIFeature)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"This feature is disabled in this version.",MB_ICONSTOP); + return; + } + if(!openDialog.getOpenFileName(*this,"*.mid","Open MIDI","*.mid",strPathMIDIFile))return; + if(!midiDialog.perform(*this,strPathMIDIFile,selectedTrack))return; + strPathTabFileName=Profile::removeExtension(strPathMIDIFile)+String("TRK")+String().fromInt(selectedTrack+1)+String(".tab"); + if(!midiHelper.import(strPathMIDIFile,strPathTabFileName,selectedTrack)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"Error importing file.",MB_ICONSTOP); + return; + } + cursorControl.waitCursor(true); + createProjectView(strPathTabFileName); + cursorControl.waitCursor(false); +} + +void MainFrame::handleOpenProject(CallbackData &someCallbackData) +{ + PureMenu fileMenu; + String menuItemString; + + getFrameMenu().getSubMenu(0,fileMenu); + menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand); + if(menuItemString.isNull())return; + menuItemString=menuItemString.betweenString(')',0); + menuItemString.trimLeft(); + handleOpenProject(menuItemString); +} + +void MainFrame::handleOpenProject(void) +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,String(STRING_PRJALLEXTENSION),"Open Project",String(STRING_PRJALLEXTENSION),strPathFileName))return; + handleOpenProject(strPathFileName); +} + +void MainFrame::handleOpenProject(const String &strPathFileProject) +{ + openProjectView(strPathFileProject); +} + +void MainFrame::handleFileClose(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} + +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} + +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} + +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} + +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} + +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} + +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} + +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} + +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} + +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} + +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} + +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} + +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} + +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} + +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} + +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} + +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} + +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} + +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} + +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} + +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} + +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} + +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} + +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; + enum{InitialWidth=700,InitialHeight=480}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleMIDIImport(void); + void handleFileClose(void); + void handleFileExit(void); + void handleFileNew(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void createToolBar(void); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mGUIFretboardHandler; + Callback mDropFilesHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/guitar/backup/20030503/notepath.cpp b/guitar/backup/20030503/notepath.cpp new file mode 100644 index 0000000..d6f75df --- /dev/null +++ b/guitar/backup/20030503/notepath.cpp @@ -0,0 +1,12 @@ +#include + +String NotePath::toString(void) +{ + String strNotePath; + + for(int index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class NotePath; +typedef Array NotePaths; + +class NotePath : public Block +{ +public: + String toString(void); +}; +#endif diff --git a/guitar/backup/20030503/ordering.hpp b/guitar/backup/20030503/ordering.hpp new file mode 100644 index 0000000..81ab6b1 --- /dev/null +++ b/guitar/backup/20030503/ordering.hpp @@ -0,0 +1,73 @@ +#ifndef _GUITAR_ORDERING_HPP_ +#define _GUITAR_ORDERING_HPP_ + +class Ordering +{ +public: + Ordering(int criteria=0,int value=0); + virtual ~Ordering(); + bool operator<(const Ordering &ordering)const; + bool operator>(const Ordering &ordering)const; + bool operator==(const Ordering &ordering)const; + int getCriteria(void)const; + void setCriteria(int criteria); + int getValue(void)const; + void setValue(int value); +private: + int mCriteria; + int mValue; +}; + +inline +Ordering::Ordering(int criteria,int value) +: mCriteria(criteria), mValue(value) +{ +} + +inline +Ordering::~Ordering() +{ +} + +inline +bool Ordering::operator<(const Ordering &ordering)const +{ + return mCriteria(const Ordering &ordering)const +{ + return mCriteria>ordering.mCriteria; +} + +inline +bool Ordering::operator==(const Ordering &ordering)const +{ + return mCriteria==ordering.mCriteria; +} + +inline +int Ordering::getCriteria(void)const +{ + return mCriteria; +} + +inline +void Ordering::setCriteria(int criteria) +{ + mCriteria=criteria; +} + +inline +int Ordering::getValue(void)const +{ + return mValue; +} + +inline +void Ordering::setValue(int value) +{ + mValue=value; +} +#endif diff --git a/guitar/backup/20030503/registration.cpp b/guitar/backup/20030503/registration.cpp new file mode 100644 index 0000000..2b6ab23 --- /dev/null +++ b/guitar/backup/20030503/registration.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include + +SmartPointer Registration::smRegistration; + +Registration::Registration() +: mRegistrationKeyName(STRING_REGISTRATIONKEYNAME), + mSettingsLicenseKey(STRING_SETTINGSLICENSE) +{ +} + +Registration::~Registration() +{ +} + +Registration &Registration::getInstance() +{ + if(!smRegistration.isOkay()) + { + smRegistration=::new Registration(); + smRegistration.disposition(PointerDisposition::Delete); + } + return *smRegistration; +} + +bool Registration::hasGID(void)const +{ + FileHandle gidFile; + return gidFile.open("install.gid",FileHandle::Read,FileHandle::ShareRead,FileHandle::Open,FileHandle::Hidden); +} + +bool Registration::hasLicense(void)const +{ + RegKey regKeyRegistration; + String strLicense; + + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + return strLicense.isNull()?false:true; +} + +bool Registration::getLicense(License &license)const +{ + String strLicense; + RegKey regKeyRegistration; + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + license.fromString(strLicense); + return true; +} + +bool Registration::applyLicense(Block &strLicenseLines) +{ + RegKey regKeyRegistration; + License license; + + license.fromLines(strLicenseLines); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,license.getUUEncodedLicense()); + return true; +} + +bool Registration::applyLicense(const String &uuencodedLicense) +{ + RegKey regKeyRegistration; + License license; + + license.fromString(uuencodedLicense); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,uuencodedLicense); + return true; +} + +bool Registration::create30DayLicense(void)const +{ + createLicense(30); + return true; +} + +bool Registration::create15DayLicense(void)const +{ + createLicense(15); + return true; +} + +bool Registration::createPermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + +License Registration::generatePermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + License license; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + license.fromString(strLicense); + return license; +} + +bool Registration::removeLicense(void) +{ + RegKey regKeyRegistration; + return regKeyRegistration.deleteKey(mRegistrationKeyName); +} + +bool Registration::createLicense(int days)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Expires,days); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + diff --git a/guitar/backup/20030503/registry.cpp b/guitar/backup/20030503/registry.cpp new file mode 100644 index 0000000..5924a77 --- /dev/null +++ b/guitar/backup/20030503/registry.cpp @@ -0,0 +1,190 @@ +#include +#include + +Registry::Registry(void) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mRegKeyHistory(RegKey::CurrentUser), + mSettingsAction(STRING_SETTINGSACTION), + mSettingsMicrosecondsPerQuarterNote(STRING_SETTINGSMICROSECONDSPERQUARTERNOTE), + mSettingsInstrument(STRING_SETTINGSINSTRUMENT), + mSettingsNoteLetters(STRING_SETTINGSNOTELETTERS), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT) +{ + guarantee(); + getCacheNames(); +} + +Registry::Registry(const Registry &someRegistry) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT), + mRegKeyHistory(RegKey::CurrentUser) +{ + *this=someRegistry; +} + +Registry::~Registry() +{ +} + +Registry &Registry::operator=(const Registry &/*registry*/) +{ + return *this; +} + +void Registry::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +void Registry::guarantee(void) +{ + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setShowAction(GlobalDefs::ShowAction); + setShowNotes(GlobalDefs::ShowNotes); + setMicrosecondsPerQuarterNote(GlobalDefs::MicrosecondsPerQuarterNote); + setInstrument(Instrument(GlobalDefs::Program)); + setMIDIOutputDevice("MIDIMAPPER"); + } +} + +bool Registry::isOkay(void)const +{ + return mRegKeyHistory.isOkay(); +} + +bool Registry::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool Registry::setHistory(Block &nameList) +{ + removeHistory(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;indexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Registry +{ +public: + Registry(void); + Registry(const Registry ®istry); + virtual ~Registry(); + Registry &operator=(const Registry ®istry); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool removeHistory(const String &strName); + bool getShowNotes(void); + void setShowNotes(bool showNoteLetters); + bool getShowAction(void)const; + void setShowAction(bool showAction); + int getMicrosecondsPerQuarterNote(void)const; + void setMicrosecondsPerQuarterNote(int microsecondsPerQuarterNote); + long getMillisecondsPerQuarterNote(void)const; + Instrument getInstrument(void)const; + void setInstrument(Instrument instrument); + String getMIDIOutputDevice(void)const; + void setMIDIOutputDevice(const String &midiOutputDevice); + bool isOkay(void)const; +private: + enum {MaxCachedNames=7}; + void guarantee(void); + void getCacheNames(void); + bool removeHistory(void); + + Block mCachedNames; + String mHistoryKeyName; + String mHistoryKeyShortName; + String mRegistryKeyName; + String mSettingsKeyName; + String mSettingsAction; + String mSettingsNoteLetters; + String mSettingsMicrosecondsPerQuarterNote; + String mSettingsInstrument; + String mSettingsMIDIOutput; + RegKey mRegKeyHistory; + RegKey mRegKeySettings; +}; + +inline +long Registry::getMillisecondsPerQuarterNote(void)const +{ + return getMicrosecondsPerQuarterNote()/1000; +} +#endif diff --git a/guitar/backup/20030503/requirement.hpp b/guitar/backup/20030503/requirement.hpp new file mode 100644 index 0000000..f90c959 --- /dev/null +++ b/guitar/backup/20030503/requirement.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REQUIREMENT_HPP_ +#define _GUITAR_REQUIREMENT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Requirement; + +typedef SmartPointer PtrRequirement; + +class Requirement : public FrettedNote +{ +public: + Requirement(); + virtual ~Requirement(); + bool getSatisfied(void)const; + void setSatisfied(bool satisfied); + Requirement &operator=(const FrettedNote &frettedNote); +private: + bool mSatisfied; +}; + +inline +Requirement::Requirement() +: mSatisfied(false) +{ +} + +inline +Requirement::~Requirement() +{ +} + +inline +Requirement &Requirement::operator=(const FrettedNote &frettedNote) +{ + (FrettedNote&)*this=frettedNote; + return *this; +} + +inline +bool Requirement::getSatisfied(void)const +{ + return mSatisfied; +} + +inline +void Requirement::setSatisfied(bool satisfied) +{ + mSatisfied=satisfied; +} +#endif diff --git a/guitar/backup/20030503/requirements.cpp b/guitar/backup/20030503/requirements.cpp new file mode 100644 index 0000000..b5b6851 --- /dev/null +++ b/guitar/backup/20030503/requirements.cpp @@ -0,0 +1,77 @@ +#include +#include + +void Requirements::setRequirements(Block ¬es) +{ + size(notes.size()); + for(int index=0;index searchOrder; + + searchOrder.size(notePaths.size()); + for(int index=0;index sortOrder; + sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets + for(index=0;indexsetSatisfied(true); + satisfied=true; + break; + } + } + return satisfied; +} + +bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement) +{ + for(int index=0;indextoString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + if(requirement->getNote()==frettedNote.getNote()&& + requirement->getOctave()==frettedNote.getOctave()&& + !requirement->getSatisfied())return true; + } + return false; +} + +bool Requirements::haveRequirement(const FrettedNote &frettedNote) +{ + for(int index=0;index +#endif +#ifndef _GUITAR_ORDERING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTEPATH_HPP_ +#include +#endif +#ifndef _GUITAR_REQUIREMENT_HPP_ +#include +#endif + +class Requirements : public Array +{ +public: + Requirements(void); + Requirements(Block ¬es); + virtual ~Requirements(); + bool satisfyRequirements(NotePaths ¬ePaths); + void setRequirements(Block ¬es); +private: + bool satisfyRequirement(NotePath ¬ePath); + bool haveRequirement(const FrettedNote &frettedNote); + bool isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement); +}; + +inline +Requirements::Requirements(void) +{ +} + +inline +Requirements::Requirements(Block ¬es) +{ + setRequirements(notes); +} + +inline +Requirements::~Requirements() +{ +} +#endif diff --git a/guitar/backup/20030503/settingsdlg.cpp b/guitar/backup/20030503/settingsdlg.cpp new file mode 100644 index 0000000..24c95e5 --- /dev/null +++ b/guitar/backup/20030503/settingsdlg.cpp @@ -0,0 +1,251 @@ +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(void) +{ + mInitHandler.setCallback(this,&SettingsDialog::initHandler); + mCreateHandler.setCallback(this,&SettingsDialog::createHandler); + mCloseHandler.setCallback(this,&SettingsDialog::closeHandler); + mDestroyHandler.setCallback(this,&SettingsDialog::destroyHandler); + mCommandHandler.setCallback(this,&SettingsDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog::SettingsDialog(const SettingsDialog &someSettingsDialog) +{ // private implementation + *this=someSettingsDialog; +} + +SettingsDialog::~SettingsDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog &SettingsDialog::operator=(const SettingsDialog &someSettingsDialog) +{ // private implementation + return *this; +} + +bool SettingsDialog::perform(GUIWindow &parentWindow) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"SETTINGSDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SettingsDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + initialize(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType SettingsDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + apply(); + break; + case SETTINGS_DEFAULTS : + selectDefaults(); + } + if(someCallbackData.wmCommandCommand()==BN_CLICKED) + { + handleInstrumentSelect(someCallbackData); + } + return (CallbackData::ReturnType)FALSE; +} + +void SettingsDialog::initialize(void) +{ + Registry registry; + + selectTiming(registry.getMicrosecondsPerQuarterNote()); + selectInstrument(registry.getInstrument()); + selectAction(registry.getShowAction()); + selectShowNotes(registry.getShowNotes()); + selectMIDIOutputDevice(registry.getMIDIOutputDevice()); +} + +void SettingsDialog::handleInstrumentSelect(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case SETTINGS_ACOUSTICGRANDPIANO : + selectInstrument(AcousticGrandPiano); + break; + case SETTINGS_BRIGHTACOUSTICPIANO : + selectInstrument(BrightAcousticPiano); + break; + case SETTINGS_ELECTRICGRANDPIANO : + selectInstrument(ElectricGrandPiano); + break; + case SETTINGS_ACOUSTICNYLON : + selectInstrument(AcousticGuitarNylon); + break; + case SETTINGS_ACOUSTICSTEEL : + selectInstrument(AcousticGuitarSteel); + break; + case SETTINGS_JAZZELECTRIC : + selectInstrument(JazzGuitarElectric); + break; + case SETTINGS_CLEANELECTRIC : + selectInstrument(CleanGuitarElectric); + break; + case SETTINGS_MUTEDELECTRIC : + selectInstrument(MutedGuitarElectric); + break; + default : + break; + } +} + +void SettingsDialog::selectInstrument(Instrument instrument) +{ + if(AcousticGrandPiano==instrument)sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,0,0); + if(BrightAcousticPiano==instrument)sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,0,0); + if(ElectricGrandPiano==instrument)sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,0,0); + if(AcousticGuitarNylon==instrument)sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,0,0); + if(AcousticGuitarSteel==instrument)sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,0,0); + if(JazzGuitarElectric==instrument)sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,0,0); + if(CleanGuitarElectric==instrument)sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,0,0); + if(MutedGuitarElectric==instrument)sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,0,0); +} + +Instrument SettingsDialog::getInstrument(void) +{ + if(sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_GETCHECK,0,0))return AcousticGrandPiano; + if(sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_GETCHECK,0,0))return BrightAcousticPiano; + if(sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_GETCHECK,0,0))return ElectricGrandPiano; + if(sendMessage(SETTINGS_ACOUSTICNYLON,BM_GETCHECK,0,0))return AcousticGuitarNylon; + if(sendMessage(SETTINGS_ACOUSTICSTEEL,BM_GETCHECK,0,0))return AcousticGuitarSteel; + if(sendMessage(SETTINGS_JAZZELECTRIC,BM_GETCHECK,0,0))return JazzGuitarElectric; + if(sendMessage(SETTINGS_CLEANELECTRIC,BM_GETCHECK,0,0))return CleanGuitarElectric; + if(sendMessage(SETTINGS_MUTEDELECTRIC,BM_GETCHECK,0,0))return MutedGuitarElectric; + return Instrument(GlobalDefs::Program); +} + +bool SettingsDialog::getAction(void) +{ + return sendMessage(SETTINGS_SHOWACTION,BM_GETCHECK,0,0); +} + +bool SettingsDialog::getShowNotes(void) +{ + return sendMessage(SETTINGS_SHOWNOTES,BM_GETCHECK,0,0); +} + +int SettingsDialog::getTiming(void) +{ + String strText; + + getText(SETTINGS_MICROSECSPERQTRNOTE,strText); + return strText.toInt(); +} + +String SettingsDialog::getMIDIOutputDevice(void) +{ + int currentSelection; + String midiOutputDevice; + + currentSelection=sendMessage(SETTINGS_MIDIOUT,CB_GETCURSEL,0,0L); + sendMessage(SETTINGS_MIDIOUT,CB_GETLBTEXT,currentSelection,(LPARAM)midiOutputDevice.str()); + return midiOutputDevice; +} + +void SettingsDialog::selectDefaults() +{ + selectInstrument(Instrument(GlobalDefs::Program)); + selectTiming(GlobalDefs::MicrosecondsPerQuarterNote); + selectAction(GlobalDefs::ShowAction); + selectShowNotes(GlobalDefs::ShowNotes); +} + +void SettingsDialog::selectTiming(int timing) +{ + setText(SETTINGS_MICROSECSPERQTRNOTE,String().fromInt(timing)); +} + +void SettingsDialog::selectAction(bool action) +{ + sendMessage(SETTINGS_SHOWACTION,BM_SETCHECK,action,0); +} + +void SettingsDialog::selectShowNotes(bool showNotes) +{ + sendMessage(SETTINGS_SHOWNOTES,BM_SETCHECK,showNotes,0); +} + +void SettingsDialog::selectMIDIOutputDevice(const String &midiOutputDeviceName) +{ + Block deviceNames; + int currentSelection=-1; + + MIDIOutputDevice::getDeviceNames(deviceNames); + sendMessage(SETTINGS_MIDIOUT,CB_RESETCONTENT,0,0L); + deviceNames.insert(&String("MIDIMAPPER")); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class SettingsDialog : public DWindow +{ +public: + SettingsDialog(void); + virtual ~SettingsDialog(); + bool perform(GUIWindow &parentWindow); +private: + SettingsDialog(const SettingsDialog &someSettingsDialog); + SettingsDialog &operator=(const SettingsDialog &someSettingsDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void initialize(void); + void selectInstrument(Instrument instrument); + void selectDefaults(void); + void selectTiming(int timing); + void selectAction(bool action); + void selectShowNotes(bool showNotes); + void selectMIDIOutputDevice(const String &midiOutputDevice); + void handleInstrumentSelect(CallbackData &someCallbackData); + String getMIDIOutputDevice(void); + Instrument getInstrument(void); + bool getShowNotes(void); + bool getAction(void); + int getTiming(void); + void apply(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Point mDisplayPoint; +}; +#endif diff --git a/guitar/backup/20030503/splash.cpp b/guitar/backup/20030503/splash.cpp new file mode 100644 index 0000000..5d5c336 --- /dev/null +++ b/guitar/backup/20030503/splash.cpp @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mStrTitle(strTitle), mTimeout(timeout), + mTextFont("Helv",8,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mLeftButtonHandler.setCallback(this,&SplashScreen::leftButtonHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|0x04|WS_CLIPSIBLINGS|WS_DLGFRAME; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)"Splash",style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::leftButtonHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIB24(); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->create(mResBitmap->width(),mResBitmap->height(),*mPureDevice); + mDIBitmap->copyBits(*mResBitmap); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + WinInfo winInfo; + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + mDIBitmap->bitBlt(pureDevice,Rect(0,0,width(),height()),Point()); + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); + pureDevice.textOut(5,200,mStrCaption); + showLicense(pureDevice); + + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(1,60,String("Windows version:")+winInfo.strProductName()+String(" ")+winInfo.strVersion()); // add 15 + pureDevice.textOut(1,75,String("Registered owner:")+winInfo.strRegisteredOwner()); + pureDevice.textOut(1,90,String("OEM:")+winInfo.strProductID()); + + if(!mStrTitle.isNull()) + { + Font mFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold); + pureDevice.select((GDIObj)mFont,TRUE); + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(12,10,mStrTitle); + pureDevice.select((GDIObj)mFont,FALSE); + } + return (CallbackData::ReturnType)FALSE; +} + +void SplashScreen::showLicense(PureDevice &pureDevice) +{ + pureDevice.setTextColor(RGBColor(255,255,255)); + if(Registration::getInstance().hasLicense()) + { + License license; + Registration::getInstance().getLicense(license); + if(license.isValid()) + { +// if(license.isExpiring())pureDevice.textOut(1,250,String("License will expire in ")+String().fromInt(license.getRemainingDays())+String(" days.")); +// if(license.isExpiring())pureDevice.textOut(1,250,String("You are on day ")+String().fromInt(license.getDay())+String(" of your ")+String().fromInt(license.getDayCount())+String(" day license.")); + if(license.isExpiring())pureDevice.textOut(1,250,String("This version of TabMaster requires a permanent license.")); + else pureDevice.textOut(1,250,"Permanent license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} diff --git a/guitar/backup/20030503/splash.hpp b/guitar/backup/20030503/splash.hpp new file mode 100644 index 0000000..2b3066d --- /dev/null +++ b/guitar/backup/20030503/splash.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_SPLASHSCREEN_HPP_ +#define _GUITAR_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIB24; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=5000}; + SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + void showLicense(PureDevice &pureDevice); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + Callback mLeftButtonHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mStrTitle; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030503/tabdlg.cpp b/guitar/backup/20030503/tabdlg.cpp new file mode 100644 index 0000000..f23a2c8 --- /dev/null +++ b/guitar/backup/20030503/tabdlg.cpp @@ -0,0 +1,151 @@ +#include +#include +#include + +TabDialog::TabDialog(void) +: mCurrEntryIndex(0) +{ + mInitHandler.setCallback(this,&TabDialog::initHandler); + mCreateHandler.setCallback(this,&TabDialog::createHandler); + mCloseHandler.setCallback(this,&TabDialog::closeHandler); + mDestroyHandler.setCallback(this,&TabDialog::destroyHandler); + mCommandHandler.setCallback(this,&TabDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog::TabDialog(const TabDialog &someTabDialog) +{ // private implementation + *this=someTabDialog; +} + +TabDialog::~TabDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog &TabDialog::operator=(const TabDialog &someTabDialog) +{ // private implementation + return *this; +} + +bool TabDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + return ::DialogBoxParam(processInstance(),(LPSTR)"TABDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType TabDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mTabEntryList=::new OwnerDrawListAltColor(*this,getItem(TABENTRY_LIST),TABENTRY_LIST); + mTabEntryList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(15)); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(50)); + mTabEntryList->setTabStops(stops); + setTypes(); + + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexinsertString(strLine); + } + mTabEntryList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void TabDialog::setTypes() +{ + Array notes; + sendMessage(TABENTRY_NOTETYPE,CB_RESETCONTENT,0,0L); + notes=NoteType::enumerate(); + int currSel=-1; + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); + } +} + + + + + diff --git a/guitar/backup/20030503/tabdlg.hpp b/guitar/backup/20030503/tabdlg.hpp new file mode 100644 index 0000000..e5a79e4 --- /dev/null +++ b/guitar/backup/20030503/tabdlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_TABDLG_HPP_ +#define _GUITAR_TABDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class TabDialog : public DWindow +{ +public: + TabDialog(void); + virtual ~TabDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex); +private: + TabDialog(const TabDialog &someTabDialog); + TabDialog &operator=(const TabDialog &someTabDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTypes(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + SmartPointer mTabEntryList; +}; +#endif diff --git a/guitar/backup/20030503/tablature.cpp b/guitar/backup/20030503/tablature.cpp new file mode 100644 index 0000000..4e111c3 --- /dev/null +++ b/guitar/backup/20030503/tablature.cpp @@ -0,0 +1,417 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TabEntries &Tablature::getTabEntries(void)const +{ + return mTabEntries; +} + +void Tablature::setTabEntries(const TabEntries &entries) +{ + mTabEntries.remove(); + for(int index=0;index=mTabEntries.size()) + { + GlobalDefs::outDebug("[Tablature::setTypeAt] index out of bounds : "+String().fromInt(index)); + return false; + } + mTabEntries[index].setNoteType(noteType); + return true; +} + +bool Tablature::open(const String &pathFileTablature) +{ + mLastError=None; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=pathFileTablature.betweenString(0,'.')+String(STRING_PRJEXTENSION); + if(!loadTabFile(pathFileTablature))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + return true; +} + +bool Tablature::import(String pathFileTablature) +{ + mLastError=None; + String strExtension; + String pathFileTablatureImport; + + pathFileTablatureImport=pathFileTablature; + strExtension=Profile::getExtension(pathFileTablature); + strExtension.lower(); + if(strExtension.isNull()||!(strExtension==String(STRING_TABEXTENSION)))return false; + pathFileTablature=Profile::removeExtension(pathFileTablature); + pathFileTablature+=String("_imp")+strExtension; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=getPathFileProject(pathFileTablatureImport); + if(!loadTabFile(pathFileTablatureImport))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + saveAs(pathFileTablature); + return true; +} + +String Tablature::getPathFileProject(const String &pathFileTablature) +{ + return Profile::removeExtension(pathFileTablature)+String(STRING_PRJEXTENSION); +} + +bool Tablature::saveAs(const String &pathFileTablature) +{ + TabWriter tabWriter; + if(pathFileTablature.isNull())return false; + return tabWriter.write(mTabEntries,pathFileTablature); +} + +bool Tablature::save(void) +{ + if(mPathFileTablature.isNull())return false; + return saveAs(mPathFileTablature); +} + +bool Tablature::openProject(const String &pathFileName) +{ + DiskInfo diskInfo; + File inFile; + String strLine; + String strDirectory; + + mPathFileProject=pathFileName; + strDirectory=mPathFileProject; + Profile::makeDirectoryName(strDirectory); + if(!diskInfo.setCurrentDirectory(strDirectory)||!inFile.open(pathFileName)) + { + mLastError=FileOpenError; + return false; + } + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + MessageBox::messageBox("Project does not contain a reference to any tablature.",strLine); + return false; + } + if(!open(strLine))return false; + while(inFile.readLine(strLine)) + { + if(strLine.betweenString(0,'=')==String("TYPES"))parseTypes(strLine); + else if(strLine.betweenString(0,'=')==String("RANGE"))parseRange(strLine); + } + return true; +} + +bool Tablature::saveProject(const String &pathFileName) +{ + File outFile; + + if(!pathFileName.isNull())mPathFileProject=pathFileName; + if(mPathFileProject.isNull())return false; + if(!outFile.open(mPathFileProject,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mPathFileName.isNull())mPathFileName=Profile::removeExtension(mPathFileProject)+String(STRING_TABEXTENSION); + outFile.writeLine(String("TABLATURE=")+mPathFileName); + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;indexlength)continue; + if(isTabLine(strLine,startElement)) + { + mTablature.insert(&TabLines()); + TabLines &tabLines=mTablature[mTablature.size()-1]; + tabLines[0]=strLine.substr(startElement); + for(int string=1;string<6;string++,line++) + { + if(!inFile.readLine(strLine))break; + tabLines[string]=strLine.substr(startElement); + } + } + } + GlobalDefs::outDebug(String("[Tablature::loadTabFile] ")+String().fromInt(mTablature.size())+String(" tabs, in ")+String().fromInt((::GetTickCount()-elapsedTime)/1000)+String(" seconds.")); + if(mTablature.size())return true; + mLastError=NoTabsParsedError; + return false; +} + +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0; + char charAt1; + char charAt2; + char charAt3; + char charAt4; + char lastChar; + + if(!lineLength)return false; + charAt0=lineLength?strLine.charAt(0):0; + charAt1=lineLength>=1?strLine.charAt(1):0; + charAt2=lineLength>=2?strLine.charAt(2):0; + charAt3=lineLength>=3?strLine.charAt(3):0; + charAt4=lineLength>=4?strLine.charAt(4):0; + lastChar=lineLength?strLine.charAt(lineLength-1):0; + + if((charAt0=='e'||charAt0=='E')&&(charAt1==':'||charAt1=='|')) + { + startElement=2; + return true; + } + if(charAt0=='|'&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==':'&&(::isalnum(charAt1)||charAt1=='-')) + { + startElement=1; + return true; + } + if(charAt0==':'&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0=='-') + { + startElement=0; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' '&&charAt4=='|') + { + startElement=5; + return true; + } + if(charAt0==' '&&charAt1=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='I'&&charAt3=='-') + { + startElement=3; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==']'&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==':'&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(::isdigit(charAt0)&&(lastChar=='-'||lastChar=='|')) + { + startElement=0; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2==' '&&charAt3=='|') + { + startElement=3; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' ') + { + startElement=4; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&(charAt2=='|'||charAt2=='+')&&charAt3=='-') + { + startElement=3; + return true; + } + return false; +} diff --git a/guitar/backup/20030503/tabpage.cpp b/guitar/backup/20030503/tabpage.cpp new file mode 100644 index 0000000..3e4dd3a --- /dev/null +++ b/guitar/backup/20030503/tabpage.cpp @@ -0,0 +1,983 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TabPage::TabPage(ViewWindow &parent) +: mItemsPerTab(0), mNumTabs(0), mCharWidth(0), mOutlinePen(RGBColor(0,0,0),Pen::PDot) , + mDrawFont("Courier New",10), mHasFocus(false), mIsCancelled(false), mIsInPlay(false), + mIsPaused(false), mIsDirty(false), mKeepOutline(false), mCurrEntryIndex(0), mIsInSetRange(false) +{ + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + mSizeHandler.setCallback(this,&TabPage::sizeHandler); + mPaintHandler.setCallback(this,&TabPage::paintHandler); + mVerticalScrollHandler.setCallback(this,&TabPage::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&TabPage::horizontalScrollHandler); + mLeftButtonUpHandler.setCallback(this,&TabPage::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&TabPage::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&TabPage::mouseMoveHandler); + mKillFocusHandler.setCallback(this,&TabPage::killFocusHandler); + mSetFocusHandler.setCallback(this,&TabPage::setFocusHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabPage::leftButtonDoubleHandler); + mKeyDownHandler.setCallback(this,&TabPage::keyDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent=&parent; + mParent.disposition(PointerDisposition::Assume); + mScrollInfo.hwndOwner(parent); + createBitmap(parent); +} + +TabPage::TabPage(const TabPage &/*someTabPage*/) +{ // private implementation +} + +TabPage::~TabPage() +{ + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); +} + +bool TabPage::insert(const TabRanges &ranges) +{ + GlobalDefs::outDebug("[TabPage::insert]TabRanges",GlobalDefs::Debug); + if(!ranges.size())return false; + for(int index=0;indexsetBits(BkColorBits); + drawTabPage(); + drawEntries(); + cursorControl.waitCursor(false); + mScrollInfo.scrollableObjectDimensions(mDIBitmap->width(),mDIBitmap->height()); + elapsedTime=(::GetTickCount()-elapsedTime)/1000; + GlobalDefs::outDebug(String("[TabPage::createBitmap]took ")+String().fromInt(elapsedTime)+String(" seconds."),GlobalDefs::Debug); + return mDIBitmap.isOkay(); +} + +bool TabPage::drawEntries(const RGBColor &rgbColor) +{ + Point p1; + Point p2; + String strFret; + Registry registry; + bool showAction(registry.getShowAction()); + + if(!isOkay())return false; + GlobalDefs::outDebug(String("[TabPage::drawEntries]"),GlobalDefs::Debug); + PureDevice &pureDevice=mDIBitmap->getDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + for(int entryIndex=0;entryIndexgetDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + Point p1=getEntryPoint(entryIndex); + Point p2; + TabEntry &entry=mTabEntries[entryIndex]; + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} + +bool TabPage::clearUpdate(void) +{ + GlobalDefs::outDebug(String("[TabPage::clearUpdate]"),GlobalDefs::Debug); + if(!isOkay())return false; + if(!mOverlay.isOkay())return false; + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + mOverlay.destroy(); + return true; +} + +bool TabPage::getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(outlineRect.ptInRect(mousePoint)) + { + entryIndex=index; + return true; + } + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getNearestString(const Point &clickPoint,int &nearestString) +{ + Rect outlineRect; + map distanceMap; + + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return false; + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + distanceMap[abs(clickPoint.y()-outlineRect.top())]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=1; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=0; + nearestString=(*distanceMap.begin()).second; + return true; +} + +Point TabPage::getEntryPoint(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getEntryPoint]"),GlobalDefs::Debug); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return xyPoint; +} + +bool TabPage::showCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + mOverlay.destroy(); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + isInOutline(true); + mParent->clientRect(clientRect); + bringOutlineIntoView(outlineRect,clientRect); + this->outlineRect(outlineRect); + showFretEntry(mTabEntries[mCurrEntryIndex]); + return true; +} + +bool TabPage::drawTabPage(void) +{ + int yStart=TopMargin; + int xStart=0; + int elapsedTime; + + GlobalDefs::outDebug(String("[TabPage::drawTabPage]"),GlobalDefs::Debug); + elapsedTime=::GetTickCount(); + if(!getNumTabs())drawTab(LeftMargin,RightMargin,xStart,yStart,TabSpacing,TabLines); // draw at least one + for(int index=0;indexline(Point(marginLeft-1,yStart),Point(marginLeft-1,1+yStart+((lineCount-1)*spacing)),TabLineColor); + for(int line=0;lineline(Point(xPos,yPos),Point(mDIBitmap->width()-marginRight,yPos),TabLineColor); + yPos+=spacing; + } + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point(mDIBitmap->width()-marginRight,1+yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point((mDIBitmap->width()-marginRight)+2,yStart),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart+((lineCount-1)*spacing)),Point((mDIBitmap->width()-marginRight)+2,yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point((mDIBitmap->width()-marginRight)+2,yStart),Point((mDIBitmap->width()-marginRight)+2,1+yStart+((lineCount-1)*spacing)),TabLineColor); + return yStart+((lineCount-1)*spacing); +} + +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + + GlobalDefs::outDebug(String("[TabPage::getDimensions]"),GlobalDefs::Debug); + setItemsPerTab(((guiWindow.width())-(RightMargin+LeftMargin))/getCharWidth()); + setNumTabs((mTabEntries.size()/getItemsPerTab())); + setNumTabs(getNumTabs()+(mTabEntries.size()%getItemsPerTab()?1:0)); + if(!getNumTabs())gdiPoint.y(TopMargin+((TabHeight+TabSeparator))); + else gdiPoint.y(TopMargin+(getNumTabs()*(TabHeight+TabSeparator))); + gdiPoint.x(guiWindow.width()); + GlobalDefs::outDebug(String("[TabPage::getDimensions]ItemsPerTab:")+String().fromInt(getItemsPerTab())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]NumTabs:")+String().fromInt(getNumTabs())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]AvgCharWidth:")+String().fromInt(getCharWidth())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmWidth:")+String().fromInt(gdiPoint.x())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmHeight:")+String().fromInt(gdiPoint.y())); + return getNumTabs(); +} + +int TabPage::getWidestEntry(PureDevice &pureDevice)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + GlobalDefs::outDebug(String("[TabPage::getWidestEntry]"),GlobalDefs::Debug); + if(!mTabEntries.size())return MinCharWidth; + widestEntry=0; + for(int entryIndex=0;entryIndexwidestEntry)widestEntry=sizeStruct.cx; + } + } + return widestEntry*2; +} + +void TabPage::bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + GlobalDefs::outDebug(String("[TabPage::bitBlt]"),GlobalDefs::Debug); + if(!mDIBitmap.isOkay())return; + mDIBitmap->usePalette(pureDevice,true); // the usePalette code can be removed... + mDIBitmap->bitBlt(pureDevice,dstRect,srcPoint); // but needs test on Win '98 first + mDIBitmap->usePalette(pureDevice,false); +} + +void TabPage::invalidate(Rect rect) +{ + GlobalDefs::outDebug(String("[TabPage::invalidate]"),GlobalDefs::Debug); + rect.left(rect.left()-mScrollInfo.currScrollx()); + rect.top(rect.top()-mScrollInfo.currScrolly()); + rect.right(rect.right()-mScrollInfo.currScrollx()); + rect.bottom(rect.bottom()-mScrollInfo.currScrollx()); + mParent->invalidate(rect,false); +} + +void TabPage::bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect) +{ + GlobalDefs::outDebug(String("[TabPage::bringOutlineIntoView]"),GlobalDefs::Debug); + if(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + while(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + if(!mScrollInfo.pageDown())break; + } + } + else if(outlineRect.top()clientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::play(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::play]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::playFromCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::playFromCurrent]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=mCurrEntryIndex;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +void TabPage::showFretEntry(const TabEntry &entry) +{ + GlobalDefs::outDebug(String("[TabPage::showFretEntry]"),GlobalDefs::Debug); + if(!mPlayNoteHandler.isOkay())return; + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void TabPage::setStartRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setStartRange]"),GlobalDefs::Debug); + isInSetRange(true); + mCurrRange.setBeginRange(mCurrEntryIndex); +} + +void TabPage::setEndRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setEndRange]"),GlobalDefs::Debug); + isInSetRange(false); + mCurrRange.setEndRange(mCurrEntryIndex); + mCurrRange.autoName(); + mTabRanges.insert(&mCurrRange); + isDirty(true); + GlobalDefs::outDebug(mCurrRange.toString()); +} + +void TabPage::cut(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::cut]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + mParent->enablePaste(true); + if(!mTabEntries.size())mParent->enableCut(false); + showCurrent(); +} + +void TabPage::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::copy]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mParent->enablePaste(true); +} + +bool TabPage::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::paste] Current position is ")+String().fromInt(mCurrEntryIndex),GlobalDefs::Debug); + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return false; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return false; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return false; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return false; + entry.fromString(strText.betweenString(']',0)); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else mTabEntries.insertAfter(mCurrEntryIndex,&entry); + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +// ********************************************************************************************* +// callback handlers + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::sizeHandler]ENTER",GlobalDefs::Verbose); + if(isInPlay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Pausing play...",GlobalDefs::Debug); + isPaused(true); + } + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + if(!sizePoint.x()||!sizePoint.y()) + { + if(isInPlay())isPaused(false); + return false; + } + clearUpdate(); + if(!update(*mParent)) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + + return false; + } + if(!mDIBitmap.isOkay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + return false; + } + if(isInPlay())isPaused(false); + GlobalDefs::outDebug("[TabPage::sizeHandler]LEAVE",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::paintHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::paintHandler]",GlobalDefs::Verbose); + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(!mDIBitmap.isOkay())return false; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + bitBlt(paintDevice,Rect(0,0,getWidth(),getHeight()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + bitBlt(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType TabPage::verticalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::verticalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleVerticalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::horizontalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::horizontalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleHorizontalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDoubleHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + Point mousePoint; + int selectedString; + Rect outlineRect; + int entryIndex; + + mousePoint.x(someCallbackData.loWord()+mScrollInfo.currScrollx()); + mousePoint.y(someCallbackData.hiWord()+mScrollInfo.currScrolly()); + if(!getOutlineRect(mousePoint,entryIndex,outlineRect))return false; + if(!getNearestString(mousePoint,selectedString))return false; + getFretEntry(selectedString); + return false; +} + +bool TabPage::getFretEntry(int selectedString) +{ + FretDialog fretDialog; + bool returnCode=false; + + keepOutline(true); + if((returnCode=fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex))) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return returnCode; +} + +CallbackData::ReturnType TabPage::leftButtonUpHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonUpHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::setFocusHandler]",GlobalDefs::Verbose); + hasFocus(true); + if(Clipboard::hasData(GlobalDefs::getRegisteredClipboardFormat()))mParent->enablePaste(true); + else mParent->enablePaste(false); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new Sequencer(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// showCurrent(); // smk +// mParent->setCapture(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::killFocusHandler]",GlobalDefs::Verbose); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + isInOutline(false); + clearUpdate(); + } + mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug("[TabPage::mouseMoveHandler]",GlobalDefs::Verbose); + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + mParent->releaseCapture(); + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + mParent->enableCut(true); + mParent->enableCopy(true); + mCurrEntryIndex=entryIndex; + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); +// mCurrEntryIndex=-1; smk + } + return false; +} + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + clearUpdate(); + showCurrent(); + } + return false; +} \ No newline at end of file diff --git a/guitar/backup/20030503/tabpage.hpp b/guitar/backup/20030503/tabpage.hpp new file mode 100644 index 0000000..2af722c --- /dev/null +++ b/guitar/backup/20030503/tabpage.hpp @@ -0,0 +1,395 @@ +#ifndef _GUITAR_TABPAGE_HPP_ +#define _GUITAR_TABPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _GUITAR_SCROLLINFO_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class GUIWindow; +class ViewWindow; + +class TabPage +{ +public: + TabPage(ViewWindow &parent); + virtual ~TabPage(); + bool insert(const TabEntries &entries); + bool insert(const TabRanges &ranges); + bool update(GUIWindow &guiWindow); + bool play(void); + bool playRange(int rangeIndex); + bool playFromCurrent(void); + void cut(void); + void copy(void); + bool paste(void); + bool modifyProperties(void); + bool increaseTempo(void); + bool decreaseTempo(void); + bool getCancelled(void)const; + void setCancelled(bool cancelled); + bool isInPlay(void)const; + bool isPaused(void)const; + int getWidth(void)const; + int getHeight(void)const; + const TabEntries &getEntries(void)const; + const TabRanges &getRanges(void)const; + void setRanges(const TabRanges &ranges); + bool hasRange(void)const; + void setPlayNoteHandler(CallbackPointer &callbackPointer); + void setStartRange(void); + void setEndRange(void); + bool isDirty(void)const; + void isDirty(bool isDirty); + bool isInOutline(void)const; + bool isInSetRange(void)const; + void isInSetRange(bool isInSetRange); + void setStatusControlRef(SmartPointer &statusBar); + bool isOkay(void)const; +private: + enum {BkColorBits=255,TabLineColor=0}; + enum {LeftMargin=10,RightMargin=10,TopMargin=10,TabLines=6,TabSpacing=10,TabHeight=TabLines*TabSpacing, + TabSeparator=20,CharSpacing=3,TabClearance=3,MinCharWidth=16}; + enum {RightArrow=0x27,LeftArrow=0x25,DownArrow=0x28,UpArrow=0x26,Insert=0x2D,Home=0x24,End=0x23,Delete=0x2E}; + TabPage(const TabPage &someTabPage); + TabPage &operator=(const TabPage &someTabPage); + int drawTab(int marginLeft,int marginRight,int xPos,int yPos,int spacing,int lineCount); + void getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const; + void bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + void bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect); + bool drawEntry(int entryIndex,const RGBColor &rgbColor=RGBColor(0,0,0)); + bool getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect); + bool getNearestString(const Point &clickPoint,int &nearestString); + bool drawEntries(const RGBColor &rgbColor=RGBColor(0,0,0)); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool getOutlineRect(int entryIndex,Rect &outlineRect); + int getWidestEntry(PureDevice &pureDevice)const; + bool getFretEntry(int selectedString=0); + bool createBitmap(GUIWindow &someGUIWindow); + bool outlineRect(const Rect &outlineRect); + Point getEntryPoint(int entryIndex); + bool drawTabPage(void); + void setItemsPerTab(int itemsPerTab); + void setNumTabs(int numTabs); + void setCharWidth(int charWidth); + int getNumEntries(void)const; + int getNumTabs(void)const; + int getItemsPerTab(void)const; + int getCharWidth(void)const; + void invalidate(Rect rect); + void isInOutline(bool isInOutline); + bool clearUpdate(void); + bool hasFocus(void)const; + void hasFocus(bool hasFocus); + void isInPlay(bool isInPlay); + void isPaused(bool isPaused); + void showFretEntry(const TabEntry &entry); + void setStatusText(const String &statusText); + void keepOutline(bool keepOutline); + bool keepOutline(void)const; + bool showCurrent(void); + + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mKillFocusHandler; + Callback mSetFocusHandler; + Callback mLeftButtonDoubleHandler; + Callback mKeyDownHandler; + + CallbackPointer mPlayNoteHandler; + TabEntries mTabEntries; + TabRanges mTabRanges; + SmartPointer mDIBitmap; + SmartPointer mOverlay; + SmartPointer mParent; + SmartPointer mMIDIDevice; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + + Rect mPrevOutlineRect; + Pen mOutlinePen; + int mNumTabs; + int mItemsPerTab; + int mCharWidth; + + bool mIsInOutline; + bool mHasFocus; + bool mIsCancelled; + bool mIsInPlay; + bool mIsPaused; + bool mIsDirty; + bool mKeepOutline; + + bool mIsInSetRange; + Range mCurrRange; + int mCurrEntryIndex; + Font mDrawFont; +}; + +inline +TabPage &TabPage::operator=(const TabPage &/*someTabPage*/) +{ // private implementation + return *this; +} + +inline +int TabPage::getNumEntries(void)const +{ + return mTabEntries.size(); +} + +inline +void TabPage::getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const +{ + pureDevice.getTextExtentPoint32(((String&)string).str(),&sizeStruct); +} + +inline +int TabPage::getWidth(void)const +{ + return ((SmartPointer&)mDIBitmap)->width(); +} + +inline +int TabPage::getHeight(void)const +{ + return ((SmartPointer&)mDIBitmap)->height(); +} + +inline +int TabPage::getNumTabs(void)const +{ + return mNumTabs; +} + +inline +void TabPage::setNumTabs(int numTabs) +{ + mNumTabs=numTabs; +} + +inline +int TabPage::getCharWidth(void)const +{ + return mCharWidth; +} + +inline +void TabPage::setCharWidth(int charWidth) +{ + mCharWidth=charWidth; +} + +inline +int TabPage::getItemsPerTab(void)const +{ + return mItemsPerTab; +} + +inline +void TabPage::setItemsPerTab(int itemsPerTab) +{ + mItemsPerTab=itemsPerTab; +} + +inline +void TabPage::isInOutline(bool isInOutline) +{ + mIsInOutline=isInOutline; +} + +inline +bool TabPage::isInOutline(void)const +{ + return mIsInOutline; +} + +inline +bool TabPage::hasFocus(void)const +{ + return mHasFocus; +} + +inline +void TabPage::hasFocus(bool hasFocus) +{ + mHasFocus=hasFocus; +} + +inline +bool TabPage::getCancelled(void)const +{ + return mIsCancelled; +} + +inline +void TabPage::setCancelled(bool cancelled) +{ + mIsCancelled=cancelled; +} + +inline +bool TabPage::isInPlay(void)const +{ + return mIsInPlay; +} + +inline +void TabPage::isInPlay(bool isInPlay) +{ + mIsInPlay=isInPlay; +} + +inline +bool TabPage::isPaused(void)const +{ + return mIsPaused; +} + +inline +void TabPage::isPaused(bool isPaused) +{ + mIsPaused=isPaused; +} + +inline +void TabPage::setPlayNoteHandler(CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; +} + +inline +const TabEntries &TabPage::getEntries(void)const +{ + return mTabEntries; +} + +inline +const TabRanges &TabPage::getRanges(void)const +{ + return mTabRanges; +} + +inline +bool TabPage::hasRange(void)const +{ + return mTabRanges.size()?true:false; +} + +inline +bool TabPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void TabPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +void TabPage::keepOutline(bool keepOutline) +{ + GlobalDefs::outDebug(String("[TabPage::keepOutline]")+(keepOutline?String("true"):String("false")),GlobalDefs::Debug); + mKeepOutline=keepOutline; +} + +inline +bool TabPage::keepOutline(void)const +{ + return mKeepOutline; +} + +inline +bool TabPage::isInSetRange(void)const +{ + return mIsInSetRange; +} + +inline +void TabPage::isInSetRange(bool isInSetRange) +{ + mIsInSetRange=isInSetRange; +} + +inline +void TabPage::setRanges(const TabRanges &ranges) +{ + mTabRanges=ranges; + isDirty(true); +} + +inline +void TabPage::setStatusText(const String &statusText) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(statusText); +} + +inline +void TabPage::setStatusControlRef(SmartPointer &statusBar) +{ + mStatusBar=statusBar; +} + +inline +bool TabPage::isOkay(void)const +{ + return mTabEntries.size()&&mDIBitmap.isOkay(); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030503/uutool.cpp b/guitar/backup/20030503/uutool.cpp new file mode 100644 index 0000000..18cd678 --- /dev/null +++ b/guitar/backup/20030503/uutool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + diff --git a/guitar/backup/20030503/uutool.hpp b/guitar/backup/20030503/uutool.hpp new file mode 100644 index 0000000..55f5595 --- /dev/null +++ b/guitar/backup/20030503/uutool.hpp @@ -0,0 +1,44 @@ +#ifndef _GUITAR_UUTOOL_HPP_ +#define _GUITAR_UUTOOL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#include + +class String; + +class UUTool +{ +public: + static String encode(String strLine); + static String decode(String strLine); +private: + UUTool(void); + virtual ~UUTool(); + static BYTE chEncode(int ch); + static BYTE chDecode(int ch); +}; + +inline +UUTool::UUTool(void) +{ +} + +inline +UUTool::~UUTool() +{ +} + +inline +BYTE UUTool::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} + +inline +BYTE UUTool::chDecode(int ch) +{ + return (ch-' ')&0x3F; +} +#endif diff --git a/guitar/backup/20030503/viewwnd.cpp b/guitar/backup/20030503/viewwnd.cpp new file mode 100644 index 0000000..20b69bc --- /dev/null +++ b/guitar/backup/20030503/viewwnd.cpp @@ -0,0 +1,541 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ + mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE); +// enableCut(false); +// enableCopy(false); +// enablePaste(false); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ + mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + if(mTabPage->insert(mTablature.getTabRanges())) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + if(THPlay==threadMessage.userDataOne())thPlay(); + else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); + else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030503/viewwnd.hpp b/guitar/backup/20030503/viewwnd.hpp new file mode 100644 index 0000000..08e7513 --- /dev/null +++ b/guitar/backup/20030503/viewwnd.hpp @@ -0,0 +1,146 @@ +#ifndef _GUITAR_VIEWWINDOW_HPP_ +#define _GUITAR_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _GUITAR_TABPAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class GUIFretboard; +class StatusBarEx; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + friend class TabPage; + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); + void setFretboardHandler(CallbackPointer &callbackPointer); + bool createProject(const String &strPathTabFile); + bool createProject(void); + bool openProject(const String &pathFileName); + bool saveProject(const String &pathFileName); + bool saveProject(void); + void play(void); + void playFromCurrent(void); + void stopPlay(void); + void playRepeated(void); + void playRange(int rangeIndex); + void playRangeRepeated(int rangeIndex); + void cut(void); + void copy(void); + void paste(void); + void modifyProperties(void); + void setStartRange(void); + void setEndRange(void); + bool getTabRanges(TabRanges &ranges); + void setTabRanges(const TabRanges &ranges); + int getNumTabEntries(void)const; + void increaseTempo(void); + void decreaseTempo(void); + String getTitle(void)const; + const String &getPathFileProject(void)const; + + void setStatusControlRef(SmartPointer &statusBar); + + bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); + void enablePlaySelect(bool enable); + void enableStopSelect(bool enable); + void enableCut(bool enable); + void enableCopy(bool enable); + void enablePaste(bool enable); + bool getEnableCut(void); + bool getEnableCopy(void); + bool getEnablePaste(void); + bool isInRepeatPlay(void)const; + void isInRepeatPlay(bool isInRepeatPlay); + bool getProjectName(String &strPathFileProject); + void thPlay(void); + void thPlayFromCurrent(void); + void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + SmartPointer mTabPage; + SmartPointer mMIDIDevice; + Tablature mTablature; + bool mIsInRepeatPlay; +}; + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +#endif + + diff --git a/guitar/backup/20030503/wininfo.hpp b/guitar/backup/20030503/wininfo.hpp new file mode 100644 index 0000000..373014d --- /dev/null +++ b/guitar/backup/20030503/wininfo.hpp @@ -0,0 +1,85 @@ +#ifndef _GUITAR_WININFO_HPP_ +#define _GUITAR_WININFO_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WinInfo +{ +public: + WinInfo(void); + virtual ~WinInfo(); + void refresh(void); + const String &strProductName(void)const; + const String &strRegisteredOwner(void)const; + const String &strProductID(void)const; + const String &strVersion(void)const; +private: + String mStrProductName; + String mStrRegisteredOwner; + String mStrProductID; + String mStrVersion; +}; + +inline +WinInfo::WinInfo(void) +{ + refresh(); +} + +inline +WinInfo::~WinInfo() +{ +} + +inline +void WinInfo::refresh(void) +{ + RegKey regKey(RegKey::LocalMachine); + + if(!regKey.openKey("Software\\Microsoft\\Windows\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + if(!mStrProductName.isNull()) + { + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } + else + { + RegKey regKey(RegKey::LocalMachine); + if(!regKey.openKey("Software\\Microsoft\\Windows NT\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } +} + +inline +const String &WinInfo::strProductName(void)const +{ + return mStrProductName; +} + +inline +const String &WinInfo::strRegisteredOwner(void)const +{ + return mStrRegisteredOwner; +} + +inline +const String &WinInfo::strProductID(void)const +{ + return mStrProductID; +} + +inline +const String &WinInfo::strVersion(void)const +{ + return mStrVersion; +} +#endif diff --git a/guitar/backup/20030731/Action.hpp b/guitar/backup/20030731/Action.hpp new file mode 100644 index 0000000..46afb7f --- /dev/null +++ b/guitar/backup/20030731/Action.hpp @@ -0,0 +1,155 @@ +#ifndef _GUITAR_ACTION_HPP_ +#define _GUITAR_ACTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Action +{ +public: + typedef enum Attribute{None,Pick,PullOff,Bend,HammerOn,Release,SlideDown,SlideUp}; + Action(); + Action(Attribute action); + Action(const String &strAction); + virtual ~Action(); + Attribute getAction(void)const; + void setAction(Attribute action); + String toString(void)const; + const Action &fromString(const String &string); + String toStringShort(void)const; + static Array enumerate(void); +private: + Attribute mAction; +}; + +inline +Action::Action() +: mAction(None) +{ +} + +inline +Action::Action(Attribute action) +: mAction(action) +{ +} + +inline +Action::Action(const String &strAction) +{ + fromString(strAction); +} + +inline +Action::~Action() +{ +} + +inline +Action::Attribute Action::getAction(void)const +{ + return mAction; +} + +inline +void Action::setAction(Attribute action) +{ + mAction=action; +} + +inline +String Action::toStringShort(void)const +{ + switch(mAction) + { + case PullOff : + return "p"; + break; + case Bend : + return "b"; + break; + case HammerOn : + return "h"; + break; + case Release : + return "r"; + break; + case SlideDown : + return "s"; + break; + case SlideUp : + return "s"; + break; + case Pick : + case None : + default : + return ""; + break; + } +} + +inline +String Action::toString(void)const +{ + switch(mAction) + { + case Pick : + return "Pick"; + break; + case PullOff : + return "PullOff"; + break; + case Bend : + return "Bend"; + break; + case HammerOn : + return "HammerOn"; + break; + case Release : + return "Release"; + break; + case SlideDown : + return "SlideDown"; + break; + case SlideUp : + return "SlideUp"; + break; + case None : + default : + return "None"; + break; + } +} + +inline +const Action &Action::fromString(const String &string) +{ + if(string=="Pick")mAction=Pick; + else if(string=="PullOff")mAction=PullOff; + else if(string=="Bend")mAction=Bend; + else if(string=="HammerOn")mAction=HammerOn; + else if(string=="Release")mAction=Release; + else if(string=="SlideDown")mAction=SlideDown; + else if(string=="SlideUp")mAction=SlideUp; + else mAction=None; + return *this; +} + +inline +Array Action::enumerate(void) +{ + Array actions; + actions.size(7); + actions[0]="Pick"; + actions[1]="PullOff"; + actions[2]="Bend"; + actions[3]="HammerOn"; + actions[4]="Release"; + actions[5]="SlideDown"; + actions[6]="SlideUp"; + return actions; +} +#endif diff --git a/guitar/backup/20030731/BrowserHelper.cpp b/guitar/backup/20030731/BrowserHelper.cpp new file mode 100644 index 0000000..c5be31c --- /dev/null +++ b/guitar/backup/20030731/BrowserHelper.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool BrowserHelper::launchBrowser(const String &strCommand) +{ + String strBrowser; + Process process; + + if(!getBrowser(strBrowser))return false; + process.createProcess(strBrowser,String(" ")+strCommand,false); + return true; +} + +bool BrowserHelper::getBrowser(String &strBrowser) +{ + RegKey regKey(RegKey::LocalMachine); + String strCommand; + int argPos; + + if(!regKey.openKey(String(STRING_BROWSERKEY))) + { + if(!regKey.openKey(String(STRING_BROWSERKEYALT)))return false; + } + if(!regKey.enumValue(0,String(STRING_BROWSERCOMMAND),strCommand)||strCommand.isNull()||!strCommand.length()) + return false; + strCommand.removeTokens("'\""); + if(-1!=(argPos=strCommand.strpos("-")))strCommand=strCommand.substr(0,argPos-1); + strBrowser=strCommand; + return true; +} diff --git a/guitar/backup/20030731/BrowserHelper.hpp b/guitar/backup/20030731/BrowserHelper.hpp new file mode 100644 index 0000000..99d2945 --- /dev/null +++ b/guitar/backup/20030731/BrowserHelper.hpp @@ -0,0 +1,20 @@ +#ifndef _GUITAR_BROWSERHELPER_HPP_ +#define _GUITAR_BROWSERHELPER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class BrowserHelper +{ +public: + static bool getBrowser(String &strBrowser); + static bool launchBrowser(const String &strCommand); +private: + BrowserHelper(); +}; + +inline +BrowserHelper::BrowserHelper() +{ +} +#endif diff --git a/guitar/backup/20030731/CBCommands.hpp b/guitar/backup/20030731/CBCommands.hpp new file mode 100644 index 0000000..247c254 --- /dev/null +++ b/guitar/backup/20030731/CBCommands.hpp @@ -0,0 +1,16 @@ +#ifndef _GUITAR_CBCOMMANDS_HPP_ +#define _GUITAR_CBCOMMANDS_HPP_ + +class CBCommands +{ +public: + typedef enum CBCommand{FBShowTab=0,FBPlayNote=1,FBPlayScale=2,FBPlayFrettedNotes=3,FBPlayChord=4}; +private: + CBCommands(); +}; + +inline +CBCommands::CBCommands() +{ +} +#endif diff --git a/guitar/backup/20030731/ChordBuilderDialog.cpp b/guitar/backup/20030731/ChordBuilderDialog.cpp new file mode 100644 index 0000000..91912b2 --- /dev/null +++ b/guitar/backup/20030731/ChordBuilderDialog.cpp @@ -0,0 +1,128 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Music; + +ChordBuilderDialog::ChordBuilderDialog(void) +{ + mInitHandler.setCallback(this,&ChordBuilderDialog::initHandler); + mCreateHandler.setCallback(this,&ChordBuilderDialog::createHandler); + mCloseHandler.setCallback(this,&ChordBuilderDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordBuilderDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordBuilderDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog::ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + *this=someChordBuilderDialog; +} + +ChordBuilderDialog::~ChordBuilderDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog &ChordBuilderDialog::operator=(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + return *this; +} + +bool ChordBuilderDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDBUILDERDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordBuilderDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordBuilderDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(handleChordSelection())endDialog(true); + else MessageBox::messageBox("Unable to parse chord.","Please check parameters (parser is case sensitive)"); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +bool ChordBuilderDialog::handleChordSelection(void) +{ + ChordCompiler chordCompiler; + Music::Chord chord; + String strChord; + + strChord=getText(ENTERCHORD_EDIT); + if(!chordCompiler.compile(strChord,chord))return false; + CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&chord); + mPlayNoteHandler.callback(cbData); + return true; +} + +void ChordBuilderDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + + + diff --git a/guitar/backup/20030731/ChordBuilderDialog.hpp b/guitar/backup/20030731/ChordBuilderDialog.hpp new file mode 100644 index 0000000..84fb86f --- /dev/null +++ b/guitar/backup/20030731/ChordBuilderDialog.hpp @@ -0,0 +1,51 @@ +#ifndef _GUITAR_CHORDBUILDERDLG_HPP_ +#define _GUITAR_CHORDBUILDERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordBuilderDialog : public DWindow +{ +public: + ChordBuilderDialog(void); + virtual ~ChordBuilderDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog); + ChordBuilderDialog &operator=(const ChordBuilderDialog &someChordBuilderDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20030731/ChordChart.gif b/guitar/backup/20030731/ChordChart.gif new file mode 100644 index 0000000..6678bcb Binary files /dev/null and b/guitar/backup/20030731/ChordChart.gif differ diff --git a/guitar/backup/20030731/ChordDlg.cpp b/guitar/backup/20030731/ChordDlg.cpp new file mode 100644 index 0000000..1cd9ba9 --- /dev/null +++ b/guitar/backup/20030731/ChordDlg.cpp @@ -0,0 +1,143 @@ +#include +#include +#include +#include +#include +#include + +ChordDialog::ChordDialog(void) +{ + mInitHandler.setCallback(this,&ChordDialog::initHandler); + mCreateHandler.setCallback(this,&ChordDialog::createHandler); + mCloseHandler.setCallback(this,&ChordDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog::ChordDialog(const ChordDialog &someChordDialog) +{ // private implementation + *this=someChordDialog; +} + +ChordDialog::~ChordDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) +{ // private implementation + return *this; +} + +bool ChordDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); + mChordList.disposition(PointerDisposition::Delete); + setChordList(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +void ChordDialog::setChordList(void) +{ + CursorControl cursor; + String strInsert; + + cursor.waitCursor(true); + for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) + { + String strResource(rcIndex); + strInsert=strResource.betweenString(0,'['); + strInsert.trimRight(); + strInsert+=strResource.betweenString(']',0); + mChordList->insertString(strInsert); + } + cursor.waitCursor(false); + setText(CHORDS_COUNT,"chord count:"+String().fromInt(rcIndex-ResBegin)); +} + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); + CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void ChordDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + + + diff --git a/guitar/backup/20030731/ChordDlg.hpp b/guitar/backup/20030731/ChordDlg.hpp new file mode 100644 index 0000000..a21493f --- /dev/null +++ b/guitar/backup/20030731/ChordDlg.hpp @@ -0,0 +1,53 @@ +#ifndef _GUITAR_CHORDDLG_HPP_ +#define _GUITAR_CHORDDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordDialog : public DWindow +{ +public: + ChordDialog(void); + virtual ~ChordDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordDialog(const ChordDialog &someChordDialog); + ChordDialog &operator=(const ChordDialog &someChordDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setChordList(void); + void handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mChordList; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20030731/DragQueryFile.hpp b/guitar/backup/20030731/DragQueryFile.hpp new file mode 100644 index 0000000..58d205c --- /dev/null +++ b/guitar/backup/20030731/DragQueryFile.hpp @@ -0,0 +1,39 @@ +#ifndef _COMMON_DRAGQUERYFILE_HPP_ +#define _COMMON_DRAGQUERYFILE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DragQueryFile +{ +public: + static bool getFileNames(HDROP hDrop,Block &strFileNames); +private: +}; + +inline +bool DragQueryFile::getFileNames(HDROP hDrop,Block &strFileNames) +{ + String strBuffer; + UINT numFiles; + + strFileNames.remove(); + strBuffer.reserve(512); + if(0==hDrop)return false; + numFiles=::DragQueryFile(hDrop,0xFFFFFFFF,0,0); + if(!numFiles)return false; + for(int index=0;index +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class Element +{ +public: + Element(); + Element(int fret,Action action=Action::None); + virtual ~Element(); + Action::Attribute getAction(void)const; + void setAction(Action::Attribute action); + void setFret(int fret); + int getFret(void)const; + String toString(void)const; +private: + int mFret; + Action mAction; +}; + +inline +Element::Element() +: mFret(0) +{ +} + +inline +Element::Element(int fret,Action action) +: mFret(fret), mAction(action) +{ +} + +inline +Element::~Element() +{ +} + +inline +Action::Attribute Element::getAction(void)const +{ + return mAction.getAction(); +} + +inline +void Element::setAction(Action::Attribute action) +{ + mAction.setAction(action); +} + +inline +int Element::getFret(void)const +{ + return mFret; +} + +inline +void Element::setFret(int fret) +{ + mFret=fret; +} + +inline +String Element::toString(void)const +{ + return mAction.toString()+String(" ")+String().fromInt(mFret); +} +#endif diff --git a/guitar/backup/20030731/Fingering.cpp b/guitar/backup/20030731/Fingering.cpp new file mode 100644 index 0000000..3c45813 --- /dev/null +++ b/guitar/backup/20030731/Fingering.cpp @@ -0,0 +1,88 @@ +#include +#include + +FrettedNotes Fingering::getFingering(const Scale &scale) +{ + FrettedNotes frettedNotes; + FrettedNote frettedNote; + + frettedNotes.size(scale.size()); + GlobalDefs::outDebug(scale.toString()); + for(int index=0;indexFretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString<0)return false; + } + mCurrFret++; + } + return found; +} + +bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e) +{ + Note tmpNote; + bool found; + + found=false; + GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString()); + if(mCurrFret<0||mCurrString>5)return false; + while(!found) + { + tmpNote=mFretboard.getAt(mCurrString,mCurrFret); + GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString()); + if(tmpNote==note) + { + frettedNote.setString(mCurrString); + frettedNote.setFret(mCurrFret); + frettedNote.setNote(tmpNote); + found=true; + } + if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets) + { + mCurrFret=mAnchorFret-2; + mCurrString++; +// mAnchorFret=mCurrFret; + if(mCurrString>5)return false; + if(mCurrFret<0)mCurrFret=0; + } + if(mCurrFret>Fretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString>5)return false; + } + mCurrFret++; + } + return found; +} diff --git a/guitar/backup/20030731/Fingering.hpp b/guitar/backup/20030731/Fingering.hpp new file mode 100644 index 0000000..88325bc --- /dev/null +++ b/guitar/backup/20030731/Fingering.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_FINGERING_HPP_ +#define _GUITAR_FINGERING_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Fingering +{ +public: + Fingering(); + virtual ~Fingering(); + FrettedNotes getFingering(const Scale &scale); +private: + enum{MaxStretchFrets=4,DefaultString=5}; + bool getFirst(FrettedNote &frettedNote,const Note ¬e); + bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); + int getCurrString(void)const; + void setCurrString(int currString); + int getCurrFret(void)const; + void setCurrFret(int currFret); + + Fretboard mFretboard; + int mMaxStretchFrets; + int mStartString; + int mCurrString; + int mCurrFret; + int mAnchorFret; +}; + +inline +Fingering::Fingering() +: mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) +{ +} + +inline +Fingering::~Fingering() +{ +} + +inline +int Fingering::getCurrString(void)const +{ + return mCurrString; +} + +inline +void Fingering::setCurrString(int currString) +{ + mCurrString=currString; +} + +inline +int Fingering::getCurrFret(void)const +{ + return mCurrFret; +} + +inline +void Fingering::setCurrFret(int currFret) +{ + mCurrFret=currFret; +} +#endif diff --git a/guitar/backup/20030731/Fret.hpp b/guitar/backup/20030731/Fret.hpp new file mode 100644 index 0000000..e450ad5 --- /dev/null +++ b/guitar/backup/20030731/Fret.hpp @@ -0,0 +1,104 @@ +#ifndef _GUITAR_FRET_HPP_ +#define _GUITAR_FRET_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Fret; +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class Fret +{ +public: + typedef enum FretStatus{Active,Inactive,Hidden}; + Fret(void); + Fret(const Fret &fret); + Fret(const Note ¬e,const Rect &boundingRect); + virtual ~Fret(); + Fret &operator=(const Fret &fret); + const Note &getNote(void)const; + void setNote(const Note ¬e); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + FretStatus getStatus(void)const; + void setStatus(FretStatus status); +private: + Note mNote; + Rect mBoundingRect; + FretStatus mStatus; +}; + +inline +Fret::Fret(void) +: mStatus(Hidden) +{ +} + +inline +Fret::Fret(const Fret &fret) +{ + *this=fret; +} + +inline +Fret::Fret(const Note ¬e,const Rect &boundingRect) +: mNote(note), mBoundingRect(boundingRect) +{ +} + +inline +Fret::~Fret() +{ +} + +inline +Fret &Fret::operator=(const Fret &fret) +{ + setNote(fret.getNote()); + setBoundingRect(fret.getBoundingRect()); + return *this; +} + +inline +const Note &Fret::getNote(void)const +{ + return mNote; +} + +inline +void Fret::setNote(const Note ¬e) +{ + mNote=note; +} + +inline +const Rect &Fret::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void Fret::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +Fret::FretStatus Fret::getStatus(void)const +{ + return mStatus; +} + +inline +void Fret::setStatus(FretStatus status) +{ + mStatus=status; +} +#endif diff --git a/guitar/backup/20030731/FretDlg.cpp b/guitar/backup/20030731/FretDlg.cpp new file mode 100644 index 0000000..8eaf67f --- /dev/null +++ b/guitar/backup/20030731/FretDlg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +FretDialog::FretDialog(void) +: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1) +{ + mInitHandler.setCallback(this,&FretDialog::initHandler); + mCreateHandler.setCallback(this,&FretDialog::createHandler); + mCloseHandler.setCallback(this,&FretDialog::closeHandler); + mDestroyHandler.setCallback(this,&FretDialog::destroyHandler); + mCommandHandler.setCallback(this,&FretDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog::FretDialog(const FretDialog &someFretDialog) +{ // private implementation + *this=someFretDialog; +} + +FretDialog::~FretDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog &FretDialog::operator=(const FretDialog &someFretDialog) +{ // private implementation + return *this; +} + +bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + mSelectedString=selectedString; + mSelectedFret=-1; + return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData) +{ + initializeAction(); + initializeNoteTypes(); + setString(); + setFret(); + setNoteType((*mTabEntries)[mCurrEntryIndex]); + return (CallbackData::ReturnType)FALSE; +} + +void FretDialog::handleOk(void) +{ + String selectedFret; + String selectedAction; + String selectedDuration; + String selectedString; + bool found=false; + + getText(FRETENTRY_FRET,selectedFret); + getText(FRETENTRY_ACTION,selectedAction); + getText(FRETENTRY_DURATION,selectedDuration); + getText(FRETENTRY_STRING,selectedString); + if(!selectedString.isNull()) + { + int string=selectedString.toInt(); + if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string; + } + mSelectedFret=selectedFret.toInt(); + if(mSelectedFret<0||mSelectedFret>Fretboard::Frets) + { + mSelectedFret=-1; + return; + } + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + FrettedNote frettedNote; + frettedNote.setFret(mSelectedFret); + frettedNote.setAction(Action(selectedAction)); + if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret); + else if(!entry.setFrettedNote(mSelectedString,frettedNote)) + { + entry.addFrettedNote(mSelectedString,frettedNote); + } + entry.setNoteType(NoteType().fromString(selectedDuration)); + return; +} + +void FretDialog::setString() +{ + setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString)); +} + +void FretDialog::setFret() +{ + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + + for(int index=0;index actions=Action::enumerate(); + for(int index=0;index noteTypes=NoteType::enumerate(); + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class FretDialog : public DWindow +{ +public: + FretDialog(void); + virtual ~FretDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex); +private: + FretDialog(const FretDialog &someFretDialog); + FretDialog &operator=(const FretDialog &someFretDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void initializeAction(void); + void initializeNoteTypes(void); + void setFret(void); + void setString(void); + void setAction(const Action &action); + void setNoteType(const TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + int mSelectedString; + int mSelectedFret; +}; +#endif diff --git a/guitar/backup/20030731/FretViewWnd.cpp b/guitar/backup/20030731/FretViewWnd.cpp new file mode 100644 index 0000000..6004169 --- /dev/null +++ b/guitar/backup/20030731/FretViewWnd.cpp @@ -0,0 +1,164 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FretViewWindow::FretViewWindow(void) +{ + mCreateHandler.setCallback(this,&FretViewWindow::createHandler); + mSizeHandler.setCallback(this,&FretViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&FretViewWindow::paintHandler); + mHorizontalScrollHandler.setCallback(this,&FretViewWindow::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&FretViewWindow::verticalScrollHandler); + mLeftButtonDownHandler.setCallback(this,&FretViewWindow::leftButtonDownHandler); + mCloseHandler.setCallback(this,&FretViewWindow::closeHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +FretViewWindow::~FretViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +CallbackData::ReturnType FretViewWindow::closeHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType FretViewWindow::createHandler(CallbackData &someCallbackData) +{ + setTitle("Fretboard"); + mGUIFretboard=::new GUIFretboard(*this); + mGUIFretboard.disposition(PointerDisposition::Delete); + return FALSE; +} + +CallbackData::ReturnType FretViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType FretViewWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mGUIFretboard->draw(pureDevice); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::leftButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void FretViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String FretViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void FretViewWindow::setNote(const TabEntry &entry,bool clear,bool play) +{ + mGUIFretboard->setNote(entry,clear,play); +} + +void FretViewWindow::setNote(const Music::Chord &chord,bool play) +{ + mGUIFretboard->setNote(chord,play); +} + +void FretViewWindow::setNote(const Note ¬e,bool clear,bool play) +{ + mGUIFretboard->setNote(note,clear,play); +} + +void FretViewWindow::setNote(const Scale &scale,bool play) +{ + mGUIFretboard->setNote(scale,play); +} + +void FretViewWindow::setNote(const FrettedNotes &frettedNotes,bool play) +{ + mGUIFretboard->setNote(frettedNotes,play); +} + +void FretViewWindow::clearNotes(void) +{ + mGUIFretboard->clearNotes(); +} + +void FretViewWindow::showAllPositions(void) +{ + mGUIFretboard->showAllPositions(); +} + +void FretViewWindow::cut(void) +{ + mGUIFretboard->cut(); +} + +void FretViewWindow::copy(void) +{ + mGUIFretboard->copy(); +} + +void FretViewWindow::paste(void) +{ + mGUIFretboard->paste(); +} + +// *** virtuals + +void FretViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void FretViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|WS_CHILD|WS_CAPTION|WS_SIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_BORDER|WS_SYSMENU; +} + + diff --git a/guitar/backup/20030731/FretViewWnd.hpp b/guitar/backup/20030731/FretViewWnd.hpp new file mode 100644 index 0000000..f73350a --- /dev/null +++ b/guitar/backup/20030731/FretViewWnd.hpp @@ -0,0 +1,60 @@ +#ifndef _GUITAR_FRETVIEWWINDOW_HPP_ +#define _GUITAR_FRETVIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#include +#endif + +class TabEntry; +class Scale; + +class FretViewWindow : public MDIWindow +{ +public: + enum{THPlay,THStop}; + FretViewWindow(void); + virtual ~FretViewWindow(); + String getTitle(void)const; + void cut(void); + void copy(void); + void paste(void); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void clearNotes(void); + void showAllPositions(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum{WindowWidth=355,WindowHeight=135,MaxWindowWidth=520}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDownHandler; + Callback mCloseHandler; + SmartPointer mGUIFretboard; +}; +#endif + diff --git a/guitar/backup/20030731/Fretboard.cpp b/guitar/backup/20030731/Fretboard.cpp new file mode 100644 index 0000000..d51dfef --- /dev/null +++ b/guitar/backup/20030731/Fretboard.cpp @@ -0,0 +1,231 @@ +#include +#include + +bool Fretboard::isOnFretboard(const Note ¬e) +{ + for(int frIndex=0;frIndex &frettedNotes) +{ + frettedNotes.remove(); + + for(int srIndex=0;srIndex &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else returnCode=false; + } + if(isBarChord) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} + +/* + Find filler notes for given chord on given fret on empty string. +*/ +bool Fretboard::getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes) +{ + bool notesInChord; + for(int stringIndex=0;stringIndex &containedNotes) +{ + for(int srIndex=0;srIndex4)continue; + return true; + } + } + } + return false; +} + +/* Check to see if the fretted note exists in the collection of fretted notes. +* @param frettedNote - The fretted note to check for +* @param frettedNotes - The collection of fretted notes +*/ +bool Fretboard::contains(const FrettedNote &frettedNote,Block &frettedNotes) +{ + for(int index=0;index &frettedNotes) +{ + int maxDistance=0; + int currDistance; + + for(int index=0;indexmaxDistance)maxDistance=currDistance; + } + return maxDistance; +} + +void Fretboard::createFretboard(const Tuning &tuning,int frets) +{ + mTuning=tuning; + mFrets=frets; + createFretboard(); +} + +bool Fretboard::play(MIDIOutputDevice &device) +{ + for(int string=0;string&)*this).operator[](string); + strFretboard+=stringNotes.toString(); + if(string +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +// |-5- +// |-4- +// |-3- +// |-2- +// |-1- +// |-0- + +class MIDIOutputDevice; + +class Fretboard : public Array +{ +public: + enum{Frets=24,Strings=6}; + Fretboard(const Tuning &tuning=Tuning(),int frets=Frets); + virtual ~Fretboard(); + void createFretboard(const Tuning &tuning,int frets=Frets); + const Tuning &getTuning(); + void setTuning(const Tuning &tuning); + const Note &getAt(int string,int fret); + bool getAt(const Music::Chord &chord,Block &frettedNotes); + bool getAt(const Note ¬e,FrettedNote &frettedNote); + bool getAt(const Note ¬e,Block &frettedNotes); + int getFrets(void)const; + void setFrets(int frets); + bool isOnFretboard(const Note ¬e); + bool play(MIDIOutputDevice &device); + String toString(void)const; + static bool isValidFret(int fret); +private: + void createFretboard(); + bool getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + bool contains(const FrettedNote &frettedNote,Block &frettedNotes); + bool getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes); + int distance(const FrettedNote &frettedNote,Block &frettedNotes); + bool isIn(const FrettedNote &frettedNote,const Music::Chord &chord); + + Tuning mTuning; + int mFrets; +}; + +inline +Fretboard::Fretboard(const Tuning &tuning,int frets) +: mTuning(tuning),mFrets(frets) +{ + createFretboard(); +} + +inline +Fretboard::~Fretboard() +{ +} + +inline +const Tuning &Fretboard::getTuning() +{ + return mTuning; +} + +inline +void Fretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createFretboard(); +} + +inline +int Fretboard::getFrets(void)const +{ + return mFrets; +} + +inline +void Fretboard::setFrets(int frets) +{ + mFrets=frets; + createFretboard(); +} + +inline +const Note &Fretboard::getAt(int string,int fret) +{ + return (operator[](string)).operator[](fret); +} + +inline +bool Fretboard::isValidFret(int fret) +{ + if(fret<=Fretboard::Frets)return true; + return false; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030731/FrettedBoundingNote.hpp b/guitar/backup/20030731/FrettedBoundingNote.hpp new file mode 100644 index 0000000..d1019c7 --- /dev/null +++ b/guitar/backup/20030731/FrettedBoundingNote.hpp @@ -0,0 +1,88 @@ +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#define _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class FrettedBoundingNote : public FrettedNote +{ +public: + FrettedBoundingNote(); + virtual ~FrettedBoundingNote(); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + const Point &getDisplayPoint(void)const; + void setDisplayPoint(const Point &displayPoint); + const RGBColor &getBkGndColor(void)const; + void setBkGndColor(RGBColor &bkGndColor); + const RGBColor &getTextColor(void)const; + void setTextColor(const RGBColor &textColor); +private: + Rect mBoundingRect; + Point mDisplayPoint; + RGBColor mBkGndColor; + RGBColor mTextColor; +}; + +inline +FrettedBoundingNote::FrettedBoundingNote() +{ +} + +inline +FrettedBoundingNote::~FrettedBoundingNote() +{ +} + +inline +const Rect &FrettedBoundingNote::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void FrettedBoundingNote::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +const RGBColor &FrettedBoundingNote::getBkGndColor(void)const +{ + return mBkGndColor; +} + +inline +void FrettedBoundingNote::setBkGndColor(RGBColor &bkGndColor) +{ + mBkGndColor=bkGndColor; +} + +inline +const RGBColor &FrettedBoundingNote::getTextColor(void)const +{ + return mTextColor; +} + +inline +void FrettedBoundingNote::setTextColor(const RGBColor &textColor) +{ + mTextColor=textColor; +} + +inline +const Point &FrettedBoundingNote::getDisplayPoint(void)const +{ + return mDisplayPoint; +} + +inline +void FrettedBoundingNote::setDisplayPoint(const Point &displayPoint) +{ + mDisplayPoint=displayPoint; +} +#endif + diff --git a/guitar/backup/20030731/FrettedNote.hpp b/guitar/backup/20030731/FrettedNote.hpp new file mode 100644 index 0000000..2b87aeb --- /dev/null +++ b/guitar/backup/20030731/FrettedNote.hpp @@ -0,0 +1,158 @@ +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#define _GUITAR_FRETTEDNOTE_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class FrettedNote; + +typedef Array FrettedNotes; + +class FrettedNote : public Note +{ +public: + FrettedNote(); + FrettedNote(const FrettedNote &frettedNote); + FrettedNote(const Note ¬e,int string,int fret,const Action &action=Action(Action::Pick)); + virtual ~FrettedNote(); + FrettedNote &operator=(const FrettedNote &frettedNote); + bool operator==(const FrettedNote &frettedNote)const; + bool operator>(const FrettedNote &frettedNote)const; + bool operator<(const FrettedNote &frettedNote)const; + int getString(void)const; + void setString(int string); + int getFret(void)const; + void setFret(int fret); + void setNote(const Note ¬e); + const Note &getNote(void)const; + const Action &getAction(void)const; + void setAction(const Action &action); + String toString(void)const; +private: + int mString; + int mFret; + Action mAction; +}; + +inline +FrettedNote::FrettedNote(const FrettedNote &frettedNote) +{ + *this=frettedNote; +} + +inline +FrettedNote::FrettedNote() +: Note(Note::E,4), mString(0), mFret(0) +{ +} + +inline +FrettedNote::FrettedNote(const Note ¬e,int string,int fret,const Action &action) +: Note(note), mString(string), mFret(fret), mAction(action) +{ +} + +inline +FrettedNote::~FrettedNote() +{ +} + +inline +FrettedNote &FrettedNote::operator=(const FrettedNote &frettedNote) +{ + setString(frettedNote.getString()); + setFret(frettedNote.getFret()); + (Note&)*this=(Note&)frettedNote; + setAction(frettedNote.getAction()); + return *this; +} + +inline +bool FrettedNote::operator==(const FrettedNote &frettedNote)const +{ + if(getString()==frettedNote.getString()&&getFret()==frettedNote.getFret()) + return (Note&)*this==(Note&)frettedNote; + return false; +} + +inline +bool FrettedNote::operator>(const FrettedNote &frettedNote)const +{ + if(getString()>frettedNote.getString())return true; + if(getFret()>frettedNote.getFret())return true; + return (Note&)*this>(Note&)frettedNote; +} + +inline +bool FrettedNote::operator<(const FrettedNote &frettedNote)const +{ + if(getString() +#include + +bool FrettedNotes::play(MIDIOutputDevice &midiDevice) +{ + String strNotes; + if(!midiDevice.hasDevice())return false; + +// ::OutputDebugString(String(toString()+String("\n")).str()); + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RGBColor GUIFretboard::smColorBlack=RGBColor(0,0,0); +RGBColor GUIFretboard::smColorLtGreen=RGBColor(156,156,74); +RGBColor GUIFretboard::smColorWhite=RGBColor(255,255,255); +RGBColor GUIFretboard::smColorRed=RGBColor(231,33,33); +RGBColor GUIFretboard::smColorGreen=RGBColor(0,128,0); +RGBColor GUIFretboard::smColorBlue=RGBColor(0,0,255); + +/* Construct the GUIFretboard +* @param parent - The owning parent window +* @param tuning - The tuning for this fretboard +* @param frets - The number of frets on this fretboard +*/ +GUIFretboard::GUIFretboard(GUIWindow &parent,const Tuning &tuning,int frets) +: mTuning(tuning), mTextFont("Small Fonts",6), mShowNotes(false), + mPrevBrush(0), mPrevFont(0), mPrevBkMode(0), mPrevTextColor(0), mClearNotes(true), + mCurrFret(0), mCurrString(0), mRedBrush(smColorRed), mLtGreenBrush(smColorLtGreen), + mWhiteBrush(smColorWhite), mGreenBrush(smColorGreen), mBlueBrush(smColorBlue) +{ + Registry registry; + setShowNotes(registry.getShowNotes()); + mParent=SmartPointer(&parent); + mSizeHandler.setCallback(this,&GUIFretboard::sizeHandler); + mLeftButtonDownHandler.setCallback(this,&GUIFretboard::leftButtonDownHandler); + mKeyDownHandler.setCallback(this,&GUIFretboard::keyDownHandler); + mKeyUpHandler.setCallback(this,&GUIFretboard::keyUpHandler); + mSetFocusHandler.setCallback(this,&GUIFretboard::setFocusHandler); + mKillFocusHandler.setCallback(this,&GUIFretboard::killFocusHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + mParent.disposition(PointerDisposition::Assume); + mResBitmap=::new ResBitmap("FRETBOARD"); + mResBitmap.disposition(PointerDisposition::Delete); + parent.setWindowPos(mResBitmap->width()+RightBorder,mResBitmap->height()+BottomBorder); + createVirtualFretboard(); + mParent->invalidate(); + mParent->update(); +} + +/* +* Destructor +*/ +GUIFretboard::~GUIFretboard() +{ + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->removeHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +/* +* Draw the fretboard +* @param device - The device context on which to draw +*/ +void GUIFretboard::draw(PureDevice &device) +{ + mDIBitmap->usePalette(device,true); + mDIBitmap->bitBlt(device); + mDIBitmap->usePalette(device,false); + refreshNotes(); +} + +/* +* Repeat the selected notes at every location on the fretboard +* @param None +*/ +void GUIFretboard::showAllPositions(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + clearNotes(); + for(int index=0;index &frettedNotes,bool play) +{ + FrettedNotes notes; + notes.size(frettedNotes.size()); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets the notes of the given chord on the fretboard +* @param chord - the chord from which notes will be set +* @param play - indicates whether the notes of the chord should be played +* needs work (ie) selects multiple notes per string, does not optimize +* for finger position +*/ +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Fretboard fretboard; + + getSequencer(); + clearNotes(); + if(!fretboard.getAt(chord,frettedNotes)) + MessageBox::messageBox("Error mapping notes","some notes were not mapped."); + setNote(frettedNotes,false); + if(play) + { + Registry registry; + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} +/* +* Sets the notes of the given scale on the fretboard +* @param scale - the scale from which notes will be set +* @param play - indicates whether the notes of the scale should be played +*/ +void GUIFretboard::setNote(const Scale &scale,bool play) +{ + Registry registry; + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + + getSequencer(); + clearNotes(); + if(scale.has(Scale::I))degreeI=scale.getDegree(Scale::I); + if(scale.has(Scale::III))degreeIII=scale.getDegree(Scale::III); + if(scale.has(Scale::V))degreeV=scale.getDegree(Scale::V); + if(scale.has(Scale::VII))degreeVII=scale.getDegree(Scale::VII); + for(int index=0;indexgetDevice()); + ::Sleep(Notes::DefaultDelay); + scale.play(mSequencer->getDevice(),registry.getMillisecondsPerQuarterNote()/4); // play scale as 16th notes + } +} + +/* +* Sets a note on the fretboard +* @param note - the note to set +* @param clear - indicates whether fretboard should be cleared prior to note being set +* @param play - indicates whether the note should be played +*/ +void GUIFretboard::setNote(const Note ¬e,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + } + } + } + return; +} + +/* +* Sets a note(s) on the fretboard +* @param entry - the tabentry containing the note(s) +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard +* @param string - the string to set the note on +* @param fret - the fret to set the note on +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(int string,int fret,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + GuitarString &guitarString=operator[]((size()-1)-string); + FrettedBoundingNote &frettedBoundingNote=guitarString[fret]; + if(clear)clearNotes(); + frettedBoundingNote.setBkGndColor(smColorRed); + frettedBoundingNote.setTextColor(smColorWhite); + mActiveFrets.insert(frettedBoundingNote); + prepareDevice(device,true); + drawNote(frettedBoundingNote,device); + if(play)frettedBoundingNote.noteOn(mSequencer->getDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::setNote(const GDIPoint &clickPoint,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + return true; + } + } + } + return false; +} + +/* +* Redraws all of the currently active notes onto the fretboard bitmap +* @param None +*/ +void GUIFretboard::refreshNotes(void) +{ + Array frettedBoundingNotes; + + PureDevice device(*mParent); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index frettedBoundingNotes; + + entry.remove(); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index1)device.textOut(boundingRect.left(),boundingRect.top(),strNote); + else device.textOut(boundingRect.left()+1,boundingRect.top()+1,strNote); + } +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param prepare - indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + prepareDevice(device,smColorRed,smColorWhite,prepare); +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param brushColor - The color of the drawing brush +* @param textColor - The text color +* @param prepare - Indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)getBrush(brushColor)); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(textColor); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} + +/* +* Get the brush for the given color +* @param brushColor - The color of the brush we desire +* @return - A reference to the brush for the given color +*/ +Brush &GUIFretboard::getBrush(const RGBColor &brushColor) +{ + if(brushColor==mRedBrush.getColor())return mRedBrush; + else if(brushColor==mWhiteBrush.getColor())return mWhiteBrush; + else if(brushColor==mGreenBrush.getColor())return mGreenBrush; + else if(brushColor==mBlueBrush.getColor())return mBlueBrush; + return mLtGreenBrush; +} + +/* +* Clears all of the notes on the fretboard +* @param None +* @return None +*/ +void GUIFretboard::clearNotes(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;indexinvalidate(rect,false); + } + mActiveFrets.remove(); + mParent->update(); +} + +/* +* Initialize the fretboard and create it's underlying bitmap +* @param None +* @return None +*/ +void GUIFretboard::createVirtualFretboard(void) +{ + SmartPointer activeFret; + size(mTuning.size()); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + } + } + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + +/* +* Get the rectangle that bounds the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The bounding rectangle +*/ +Rect GUIFretboard::getBoundingRect(int string,int fret)const +{ + Rect boundingRect; + Point point(getPoint(string,fret)); + boundingRect.left(point.x()-Radius); + boundingRect.top(point.y()-Radius); + boundingRect.right(point.x()+Radius); + boundingRect.bottom(point.y()+Radius); + return boundingRect; +} + +/* +* Get the point for the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The point +*/ +Point GUIFretboard::getPoint(int string,int fret)const +{ + Point point; + int starty=15; + int incy=10; + + switch(fret) + { + case 0 : + point.x(10); + break; + case 1 : + point.x(23); + break; + case 2 : + point.x(55); + break; + case 3 : + point.x(83); + break; + case 4 : + point.x(111); + break; + case 5 : + point.x(138); + break; + case 6 : + point.x(164); + break; + case 7 : + point.x(193); + break; + case 8 : + point.x(220); + break; + case 9 : + point.x(249); + break; + case 10 : + point.x(280); + break; + case 11 : + point.x(307); + break; + case 12 : + point.x(335); + break; + case 13 : + point.x(362); + break; + case 14 : + point.x(392); + break; + case 15 : + point.x(420); + break; + case 16 : + point.x(446); + break; + case 17 : + point.x(473); + break; + case 18 : + point.x(501); + break; + case 19 : + point.x(528); + break; + case 20 : + point.x(558); + break; + case 21 : + point.x(585); + break; + case 22 : + point.x(611); + break; + case 23 : + point.x(640); + break; + case 24 : + point.x(668); + break; + } + point.y(starty+((string)*incy)); + return point; +} + +/* +* Cut the notes from the fretboard +* @param None +* @return None +*/ +void GUIFretboard::cut(void) +{ + copy(); // copy the fretboard notes to the clipboard first + clearNotes(); +} + +/* +* Copy all selected notes to the clipboard +* @param None +* @return None +*/ +void GUIFretboard::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + getNotes(entry); + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); +} + +/* +* Paste notes from clipboard +* @param None +* @return None +*/ +void GUIFretboard::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return; + entry.fromString(strText.betweenString(']',0)); + setNote(entry,true,true); +} + +// callbacks + +/* +* Handles resizing of the fretboard window +* @param callbackData - Contains information about the resize event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::sizeHandler(CallbackData &callbackData) +{ + GlobalDefs::outDebug("[GUIFretboard::sizeHandler]"); + Point sizePoint(callbackData.loWord(),callbackData.hiWord()); + if(sizePoint.x()>mResBitmap->width()+RightBorder|| + sizePoint.y()>mResBitmap->height()+BottomBorder) + mParent->setWindowPos(mResBitmap->width()+10,mResBitmap->height()+30); + return false; +} + +/* +* Handles left button down event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::leftButtonDownHandler(CallbackData &callbackData) +{ + GDIPoint clickPoint(callbackData.loWord(),callbackData.hiWord()); + setNote(clickPoint,mClearNotes,true); + return false; +} + +/* +* Handles keyboard event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyDownHandler(CallbackData &callbackData) +{ + if(KeyData::controlKeyPressed())mClearNotes=false; + else mClearNotes=true; + KeyData keyData(callbackData); + switch(keyData.virtualKey()) + { + case KeyDown : + if(KeyData::shiftKeyPressed())mCurrString-=2; + else mCurrString--; + if(mCurrString<0)mCurrString=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyLeft : + if(KeyData::shiftKeyPressed())mCurrFret-=2; + else mCurrFret--; + if(mCurrFret<0)mCurrFret=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyRight : + if(KeyData::shiftKeyPressed())mCurrFret+=2; + else mCurrFret++; + if(mCurrFret>DefaultFrets)mCurrFret=DefaultFrets; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyUp : + if(KeyData::shiftKeyPressed())mCurrString+=2; + else mCurrString++; + if(mCurrString>=DefaultStrings)mCurrString=DefaultStrings-1; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + } + return false; +} + +/* +* Handles key up event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyUpHandler(CallbackData &callbackData) +{ + KeyData keyData(callbackData); + if(CtrlKey==keyData.virtualKey())mClearNotes=true; + return false; +} + +/* +* Handles focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::setFocusHandler(CallbackData &callbackData) +{ + getSequencer(); + return false; +} + +/* +* Handles kill focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::killFocusHandler(CallbackData &callbackData) +{ + mSequencer.destroy(); + return false; +} + diff --git a/guitar/backup/20030731/GUIFretboard.hpp b/guitar/backup/20030731/GUIFretboard.hpp new file mode 100644 index 0000000..51fa6b1 --- /dev/null +++ b/guitar/backup/20030731/GUIFretboard.hpp @@ -0,0 +1,174 @@ +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#define _GUITAR_GUIFRETBOARD_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TUNING_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class GUIWindow; +class TabEntry; +class ResBitmap; +class Scale; + +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class GUIFretboard : public VirtualFretboard +{ +public: + enum{DefaultFrets=24,DefaultStrings=6}; + GUIFretboard(GUIWindow &parent,const Tuning &tuning=Tuning(),int frets=DefaultFrets); + virtual ~GUIFretboard(); + const Tuning &getTuning(void)const; + void setTuning(const Tuning &tuning); + int getFrets(void)const; + void draw(PureDevice &device); + void setNote(int string,int fret,bool clear=true,bool play=false); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void setNote(Block &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void setShowNotes(bool showNotes); + bool getShowNotes(void)const; + void showAllPositions(void); + void cut(void); + void copy(void); + void paste(void); +private: + enum{RightBorder=10,BottomBorder=30,Radius=5,ClickTolerance=1}; + enum{KeyDown=0x28,KeyLeft=0x25,KeyRight=0x27,KeyUp=0x26,CtrlKey=0x11}; + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &callbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &callbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &callbackData); + + void createVirtualFretboard(void); + void refreshNotes(void); + void getSequencer(void); + Point getPoint(int string,int fret)const; + Rect getBoundingRect(int string,int fret)const; + void prepareDevice(PureDevice &device,bool prepare); + void prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor=RGBColor(255,255,255),bool prepare=true); + void drawNote(FrettedBoundingNote &currFret,PureDevice &device); + bool setNote(const GDIPoint &clickPoint,bool clear=true,bool play=false); + Brush &getBrush(const RGBColor &brushColor); + + Tuning mTuning; + SmartPointer mDIBitmap; + SmartPointer mResBitmap; + SmartPointer mParent; + SmartPointer mSequencer; + + Callback mSizeHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mKeyUpHandler; + Callback mSetFocusHandler; + Callback mKillFocusHandler; + BTree mActiveFrets; + + bool mShowNotes; + bool mClearNotes; + int mCurrFret; + int mCurrString; + + Brush mGreenBrush; + Brush mRedBrush; + Brush mWhiteBrush; + Brush mLtGreenBrush; + Brush mBlueBrush; + Font mTextFont; + + HGDIOBJ mPrevBrush; + HGDIOBJ mPrevFont; + int mPrevBkMode; + RGBColor mPrevTextColor; + + static RGBColor smColorBlack; + static RGBColor smColorLtGreen; + static RGBColor smColorWhite; + static RGBColor smColorRed; + static RGBColor smColorGreen; + static RGBColor smColorBlue; +}; + +inline +const Tuning &GUIFretboard::getTuning(void)const +{ + return mTuning; +} + +inline +void GUIFretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createVirtualFretboard(); +} + +inline +int GUIFretboard::getFrets(void)const +{ + return DefaultFrets; +} + +inline +void GUIFretboard::setShowNotes(bool showNotes) +{ + mShowNotes=showNotes; +} + +inline +bool GUIFretboard::getShowNotes(void)const +{ + return mShowNotes; +} + +inline +void GUIFretboard::getSequencer(void) +{ + if(mSequencer.isOkay())return; + mSequencer=::new Sequencer(); + mSequencer.disposition(PointerDisposition::Delete); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030731/GlobalDefs.cpp b/guitar/backup/20030731/GlobalDefs.cpp new file mode 100644 index 0000000..24438ac --- /dev/null +++ b/guitar/backup/20030731/GlobalDefs.cpp @@ -0,0 +1,6 @@ +#include + +UINT GlobalDefs::mRegisteredClipboardFormat=0; +GlobalDefs::LogLevel GlobalDefs::mLogLevel=GlobalDefs::Debug; +File GlobalDefs::mLogFile; + diff --git a/guitar/backup/20030731/GlobalDefs.hpp b/guitar/backup/20030731/GlobalDefs.hpp new file mode 100644 index 0000000..8fb3780 --- /dev/null +++ b/guitar/backup/20030731/GlobalDefs.hpp @@ -0,0 +1,100 @@ +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#define _GUITAR_GLOBALDEFS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class GlobalDefs +{ +public: + typedef enum LogLevel{NoLog,Verbose,Info,Debug}; + enum{MicrosecondsPerQuarterNote=651578,Program=JazzGuitarElectric,ShowAction=1,ShowNotes=1}; + static void outDebug(const String &strDebug,LogLevel level=Debug); + static LogLevel getLogLevel(void); + static void setLogLevel(LogLevel logLevel); + static bool setLogFile(const String &pathLogFile); + static UINT getRegisteredClipboardFormat(void); + static void setRegisteredClipboardFormat(UINT registeredClipboardFormat); + static String translateLevel(LogLevel logLevel); +private: + GlobalDefs(); + virtual ~GlobalDefs(); + static UINT mRegisteredClipboardFormat; + static LogLevel mLogLevel; + static File mLogFile; +}; + +inline +GlobalDefs::GlobalDefs() +{ +} + +inline +GlobalDefs::~GlobalDefs() +{ +} + +inline +UINT GlobalDefs::getRegisteredClipboardFormat(void) +{ + return mRegisteredClipboardFormat; +} + +inline +void GlobalDefs::setRegisteredClipboardFormat(UINT registeredClipboardFormat) +{ + mRegisteredClipboardFormat=registeredClipboardFormat; +} + +inline +GlobalDefs::LogLevel GlobalDefs::getLogLevel(void) +{ + return mLogLevel; +} + +inline +void GlobalDefs::setLogLevel(LogLevel logLevel) +{ + mLogLevel=logLevel; +} + +inline +void GlobalDefs::outDebug(const String &strDebug,LogLevel logLevel) +{ + if(NoLog==getLogLevel())return; + if(mLogFile.isOkay()&&logLevel>=mLogLevel) + { + mLogFile.writeLine(translateLevel(logLevel)+strDebug); + mLogFile.flush(); + } + else if(logLevel>=mLogLevel)::OutputDebugString(String(translateLevel(logLevel)+strDebug+String("\n")).str()); +} + +inline +bool GlobalDefs::setLogFile(const String &pathLogFile) +{ + return mLogFile.open(pathLogFile,"wb"); +} + +inline +String GlobalDefs::translateLevel(LogLevel logLevel) +{ + SystemTime systemTime; + if(NoLog==logLevel)return String("[Log.None][")+systemTime.toString()+String("]"); + else if(Verbose==logLevel)return String("[Log.Verbose][")+systemTime.toString()+String("]"); + else if(Debug==logLevel)return String("[Log.Debug][")+systemTime.toString()+String("]"); + else return String("[Log.Info]]")+systemTime.toString()+String("]"); +} +#endif diff --git a/guitar/backup/20030731/GuitarString.hpp b/guitar/backup/20030731/GuitarString.hpp new file mode 100644 index 0000000..06f0d1c --- /dev/null +++ b/guitar/backup/20030731/GuitarString.hpp @@ -0,0 +1,29 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/guitar/backup/20030731/Instrument.hpp b/guitar/backup/20030731/Instrument.hpp new file mode 100644 index 0000000..8e5a147 --- /dev/null +++ b/guitar/backup/20030731/Instrument.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_INSTRUMENT_HPP_ +#define _GUITAR_INSTRUMENT_HPP_ + +typedef enum Instrument{AcousticGrandPiano=0,BrightAcousticPiano=1,ElectricGrandPiano=2,AcousticGuitarNylon=24, + AcousticGuitarSteel=25,JazzGuitarElectric=26,CleanGuitarElectric=27,MutedGuitarElectric=28}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030731/IntegerPair.hpp b/guitar/backup/20030731/IntegerPair.hpp new file mode 100644 index 0000000..fc5959f --- /dev/null +++ b/guitar/backup/20030731/IntegerPair.hpp @@ -0,0 +1,21 @@ +#ifndef _GUITAR_INTEGERPAIR_HPP_ +#define _GUITAR_INTEGERPAIR_HPP_ + +class IntegerPair +{ +public: + IntegerPair(); + IntegerPair(const IntegerPair &integerPair); + virtual IntegerPair(); + IntegerPair &operator=(const IntegerPair &integerPair); + bool operator<(const IntegerPair &integerPair); + bool operator>(const IntegerPair &integerPair); + bool operator==(const IntegerPair &integerPair); + int getValue(void)const; + void setValue(int value); + int getComparator +private: + int mValue; + int mComparator; +}; +#endif \ No newline at end of file diff --git a/guitar/backup/20030731/Led.bmp b/guitar/backup/20030731/Led.bmp new file mode 100644 index 0000000..bfab469 Binary files /dev/null and b/guitar/backup/20030731/Led.bmp differ diff --git a/guitar/backup/20030731/License.hpp b/guitar/backup/20030731/License.hpp new file mode 100644 index 0000000..e83be51 --- /dev/null +++ b/guitar/backup/20030731/License.hpp @@ -0,0 +1,148 @@ +#ifndef _GUITAR_LICENSE_HPP_ +#define _GUITAR_LICENSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif + +class License +{ +public: + typedef enum LicenseType{Expires=01,Permanent=02}; + typedef enum Feature{MIDIFeature}; + License(void); + License(const License &license); + License(const String &strLicenseKey); // this should be a uuencoded, xor'd string + License(Block &strLicenseKeyLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + License &operator=(const License &license); + static String generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount); // produces a uuencoded, xor'd string + bool fromString(const String &string); // this should be a uuencoded, xor'd string + bool fromLines(Block &strLicenseLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + bool isValid(void)const; + bool isExpiring(void)const; + bool allowFeature(Feature feature)const; + int getRemainingDays(void)const; + int getDayCount(void)const; + int getDay(void)const; + const String &getUUEncodedLicense(void)const; +private: + enum {XORMagic=72}; + static int calculateChecksum(const String &string); + static String xor(const String &strLicense); + static String numericEncode(const String &strLicense); + static String numericDecode(const String &strLicense); + + String mProductVersion; + String mUUEncodedLicense; + SystemTime mIssueDate; + LicenseType mLicenseType; + int mDayCount; + bool mIsValid; + static const String smBeginLicense; + static const String smEndLicense; +}; + +inline +License::License(void) +: mIsValid(false) +{ +} + +inline +License::License(const License &license) +{ + *this=license; +} + +inline +License::License(const String &strLicenseKey) +: mIsValid(false) +{ + fromString(strLicenseKey); +} + +inline +License::License(Block &strLicenseLines) +: mIsValid(false) +{ + fromLines(strLicenseLines); +} + +inline +License &License::operator=(const License &license) +{ + mProductVersion=license.mProductVersion; + mIssueDate=license.mIssueDate; + mLicenseType=license.mLicenseType; + mDayCount=license.mDayCount; + mIsValid=license.mIsValid; + return *this; +} + +inline +bool License::isValid(void)const +{ + return mIsValid; +} + +inline +bool License::isExpiring(void)const +{ + return Expires==mLicenseType; +} + +inline +int License::getRemainingDays(void)const +{ + if(!isExpiring())return -1; + SDate issueDate; + SDate expireDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + expireDate=issueDate; + expireDate=expireDate.daysAdd360(mDayCount); + return currDate.daysBetween360(expireDate); +} + +inline +int License::getDay(void)const +{ + SDate issueDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + return issueDate.daysBetween360(currDate)+1; +} + +inline +int License::getDayCount(void)const +{ + return mDayCount; +} + +inline +bool License::allowFeature(Feature feature)const +{ + if(isExpiring())return false; + return true; +} + +inline +const String &License::getUUEncodedLicense(void)const +{ + return mUUEncodedLicense; +} +#endif diff --git a/guitar/backup/20030731/LicenseDialog.cpp b/guitar/backup/20030731/LicenseDialog.cpp new file mode 100644 index 0000000..011549d --- /dev/null +++ b/guitar/backup/20030731/LicenseDialog.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +LicenseDialog::LicenseDialog(void) +{ + mInitHandler.setCallback(this,&LicenseDialog::initHandler); + mCreateHandler.setCallback(this,&LicenseDialog::createHandler); + mCloseHandler.setCallback(this,&LicenseDialog::closeHandler); + mDestroyHandler.setCallback(this,&LicenseDialog::destroyHandler); + mCommandHandler.setCallback(this,&LicenseDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog::LicenseDialog(const LicenseDialog &someLicenseDialog) +{ // private implementation + *this=someLicenseDialog; +} + +LicenseDialog::~LicenseDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog &LicenseDialog::operator=(const LicenseDialog &someLicenseDialog) +{ // private implementation + return *this; +} + +bool LicenseDialog::perform(GUIWindow &parentWindow,bool cancelTerminates) +{ + bool returnCode; + mCancelTerminates=cancelTerminates; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"LICENSEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType LicenseDialog::initHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType LicenseDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::commandHandler(CallbackData &someCallbackData) +{ + LRESULT result; + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(!validateLicense()) + { + MessageBox::messageBox("Error","The license you entered was invalid, please try again"); + setText(LICENSE_DIALOG_LICENSE,String()); + setFocus(LICENSE_DIALOG_LICENSE); + } + else endDialog(true); + break; + case IDCANCEL : + if(mCancelTerminates) + { + result=MessageBox::messageBox(*this,"Warning","Cancelling now will terminate the application.",MB_OKCANCEL); + if(IDOK==result)endDialog(false); + } + else endDialog(false); + break; + case LICENSE_DIALOG_REQUEST_LICENSE : + handleLicenseRequest(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +bool LicenseDialog::validateLicense(void)const +{ + License license; + String strLicense; + Block strLicenseLines; + + strLicense=getText(LICENSE_DIALOG_LICENSE); + if(strLicense.isNull())return false; + makeLicenseLines(strLicense,strLicenseLines); + license.fromLines(strLicenseLines); + if(!license.isValid()||license.isExpiring())return false; + if(!Registration::getInstance().applyLicense(strLicenseLines))return false; + return true; +} + +void LicenseDialog::handleLicenseRequest(void)const +{ + BrowserHelper::launchBrowser(String(STRING_HOST)); +} + +void LicenseDialog::makeLicenseLines(String strLicense,Block &strLicenseLines)const +{ + strLicenseLines.remove(); + if(strLicense.isNull())return; + strLicense.removeTokens("\r"); + strLicenseLines.insert(&String(strLicense.betweenString(0,'\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\0').betweenString('\n','\n\0'))); +} diff --git a/guitar/backup/20030731/LicenseDialog.hpp b/guitar/backup/20030731/LicenseDialog.hpp new file mode 100644 index 0000000..87535df --- /dev/null +++ b/guitar/backup/20030731/LicenseDialog.hpp @@ -0,0 +1,32 @@ +#ifndef _GUITAR_LICENSEDIALOG_HPP_ +#define _GUITAR_LICENSEDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif + +class LicenseDialog : public DWindow +{ +public: + LicenseDialog(void); + virtual ~LicenseDialog(); + bool perform(GUIWindow &parentWindow,bool cancelTerminates=true); +private: + LicenseDialog(const LicenseDialog &someLicenseDialog); + LicenseDialog &operator=(const LicenseDialog &someLicenseDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool validateLicense(void)const; + void handleLicenseRequest(void)const; + void makeLicenseLines(String strLicense,Block &strLicenseLines)const; + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + bool mCancelTerminates; +}; +#endif diff --git a/guitar/backup/20030731/LineParser.cpp b/guitar/backup/20030731/LineParser.cpp new file mode 100644 index 0000000..5d387ae --- /dev/null +++ b/guitar/backup/20030731/LineParser.cpp @@ -0,0 +1,127 @@ +#include + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + +void LineParser::putElement(const Element &element) +{ + String strItem=Action(element.getAction()).toStringShort()+String().fromInt(element.getFret()); + *this+=strItem; + mPosition+=strItem.length(); + return; +} + +void LineParser::putElement(char ch) +{ + *this+=ch; + mPosition++; + return; +} + +int LineParser::peekElement(Element &element) +{ + int position=mPosition; + int result=getElement(element); + mPosition=position; + return result; +} diff --git a/guitar/backup/20030731/LineParser.hpp b/guitar/backup/20030731/LineParser.hpp new file mode 100644 index 0000000..2bdd01b --- /dev/null +++ b/guitar/backup/20030731/LineParser.hpp @@ -0,0 +1,101 @@ +#ifndef _GUITAR_LINEPARSER_HPP_ +#define _GUITAR_LINEPARSER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_ELEMENT_HPP_ +#include +#endif + +class LineParser : private String +{ +public: + LineParser(); + LineParser(const String &string); + virtual ~LineParser(); + LineParser &operator=(const String &string); + LineParser &operator++(); + LineParser &operator++(int /*postfixdummy*/); + void reset(void); + int getElement(Element &element); + void putElement(const Element &element); + void putElement(char ch); + int length(void)const; + int getPosition(void)const; + bool serialize(File &outFile)const; +private: + int peekElement(Element &element); + + int mPosition; + int mLength; +}; + +inline +LineParser::LineParser() +: mPosition(0), mLength(0) +{ +} + +inline +LineParser::LineParser(const String &string) +: String(string), mPosition(0), mLength(String::length()) +{ +} + +inline +LineParser::~LineParser() +{ +} + +inline +LineParser &LineParser::operator=(const String &string) +{ + (String&)*this=string; + mPosition=0; + mLength=String::length(); + return *this; +} + +inline +LineParser &LineParser::operator++() +{ + mPosition++; + return *this; +} + +inline +LineParser &LineParser::operator++(int /*postfixdummy*/) +{ + mPosition++; + return *this; +} + +inline +void LineParser::reset(void) +{ + mPosition=0; +} + +inline +int LineParser::length(void)const +{ + return mLength; +} + +inline +int LineParser::getPosition(void)const +{ + return mPosition; +} + +inline +bool LineParser::serialize(File &outFile)const +{ + if(!outFile.isOkay())return false; + outFile.writeLine(*this); + return true; +} +#endif diff --git a/guitar/backup/20030731/MIDIDialog.cpp b/guitar/backup/20030731/MIDIDialog.cpp new file mode 100644 index 0000000..db0a41d --- /dev/null +++ b/guitar/backup/20030731/MIDIDialog.cpp @@ -0,0 +1,136 @@ +#include +#include +#include + +MIDIDialog::MIDIDialog(void) +{ + mInitHandler.setCallback(this,&MIDIDialog::initHandler); + mCreateHandler.setCallback(this,&MIDIDialog::createHandler); + mCloseHandler.setCallback(this,&MIDIDialog::closeHandler); + mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler); + mCommandHandler.setCallback(this,&MIDIDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog) +{ // private implementation + *this=someMIDIDialog; +} + +MIDIDialog::~MIDIDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog) +{ // private implementation + return *this; +} + +bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack) +{ + bool returnCode; + mPathMIDIFileName=strPathMIDIFileName; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + if(returnCode)selectedTrack=mSelectedTrack; + return returnCode; +} + +CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData) +{ + MIDIHelper midiHelper; + TrackInfos trackInfos; + midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos); + setTrackInformation(trackInfos); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + mSelectedTrack=getSelectedTrack(); + if(-1==mSelectedTrack)endDialog(false); + else endDialog(true); + break; + } + if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MIDIDialog::setTrackInformation(TrackInfos &trackInfos) +{ + bool isFirst=true; + for(int index=0;index=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return; + mSelectedTrack=clickedId-MIDI_TRACK1; + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L); + } +} + +int MIDIDialog::getSelectedTrack(void)const +{ + int selectedTrack=-1; + + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(1==sendMessage(btnId,BM_GETCHECK,0,0L)) + { + selectedTrack=btnId-MIDI_TRACK1; + break; + } + } + return selectedTrack; +} + + + + + diff --git a/guitar/backup/20030731/MIDIDialog.hpp b/guitar/backup/20030731/MIDIDialog.hpp new file mode 100644 index 0000000..01781b3 --- /dev/null +++ b/guitar/backup/20030731/MIDIDialog.hpp @@ -0,0 +1,39 @@ +#ifndef _GUITAR_MIDIDIALOG_HPP_ +#define _GUITAR_MIDIDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIDialog : public DWindow +{ +public: + MIDIDialog(void); + virtual ~MIDIDialog(); + bool perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack); +private: + MIDIDialog(const MIDIDialog &someMIDIDialog); + MIDIDialog &operator=(const MIDIDialog &someMIDIDialog); + void handleClick(const CallbackData &someCallbackData); + int getSelectedTrack(void)const; + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTrackInformation(TrackInfos &trackInfos); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + String mPathMIDIFileName; + int mSelectedTrack; +}; +#endif diff --git a/guitar/backup/20030731/MIDIHelper.cpp b/guitar/backup/20030731/MIDIHelper.cpp new file mode 100644 index 0000000..06c36b9 --- /dev/null +++ b/guitar/backup/20030731/MIDIHelper.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include +#include +#include + +bool MIDIHelper::getTrackInfo(const String &strPathMIDIFileName,TrackInfos &trackInfos) +{ + MidiData midiData(strPathMIDIFileName); + midiData.getTrackInfo(trackInfos); + return trackInfos.size()?true:false; +} + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack) +{ + TabEntry entry; + Tablature tablature; + TabEntries tabEntries; + + WORD currPlayTime; + WORD prevPlayTime; + int eventCount; + bool resultCode; + bool haveTrack; + Block notes; + TrackInfos trackInfos; + + resultCode=false; + haveTrack=false; + if(strPathMidiFileName.isNull())return resultCode; + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + + for(int trIndex=0;trIndex &strPathTabFileNames) +{ + String strPathTabFileName; + WORD currPlayTime; + WORD prevPlayTime; + int currentTrack; + int eventCount; + Block tracks; + Block notes; + TrackInfos trackInfos; + + if(strPathMidiFileName.isNull())return false; + strPathTabFileNames.remove(); + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + if(!tracks.size())return false; + for(int trIndex=0;trIndex ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + notePaths.size(notes.size()); + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + MIDIHelper(); + virtual ~MIDIHelper(); +// bool import(const String &strPathMidiFileName,const String &strPathTabFileName); + bool import(const String &strPathMidiFileName,Block &strPathTabFileNames); + bool import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack); + bool getTrackInfo(const String &strpathMIDIFileName,TrackInfos &trackInfos); +private: + bool createEntry(Block ¬es,TabEntry &entry); + bool filterNotesOnFretboard(Block ¬es); + + Fretboard mFretboard; + Block mMessages; +}; + +inline +MIDIHelper::MIDIHelper() +{ +} + +inline +MIDIHelper::~MIDIHelper() +{ +} +#endif diff --git a/guitar/backup/20030731/MIDIHelper.txt b/guitar/backup/20030731/MIDIHelper.txt new file mode 100644 index 0000000..520d63f --- /dev/null +++ b/guitar/backup/20030731/MIDIHelper.txt @@ -0,0 +1,30 @@ +// The NotePath object contains, for each note, all possible playable locations on the fretboard +// we will use NotePath to build a TabEntry for which all notes can be played (ie) No two notes +// should be playable on the same string. Also, we would like to minimize the fret distance +// between playable notes. We need to do this because the fretboard is tuned in fourths, except +// for the fifth string which is tuned in third. The point is that for a given midi note (pitch) +// there are overlapping locations on the fretboard where the note can be played. This is not +// a problem with the keyboard because, theoretically, the entire keyboarded can be voiced +// at once. The fretboard is different. If we voice a note on the first string at the fifth +// fret, we cannot at the same time, voice a note on the first string at the fourth fret. +// Along the same lines, if we build a TabEntry that contains a voicing on the first string +// at the fifth fret, it is illegal to add another entry to the tab that voices a note on +// the first string at the sixth fret. Allowing this would nullify the previous TabEntry. +// +// The other objective is to handle the fret-range problem. In building the optimal path, +// we would like to overcome the problem wherebye, for instance, a note is voiced on the +// first string at the fifth fret and, in overcoming the voicing of a competing note on the +// first string at say the fourth fret, we might arbitrarily choose to voice a note that +// cannot possibly be played by an individual because the note poses an expansive fret +// traveral. This should be overcome by choosing a NotePath space that minimizes the +// distance requried to play the desired notes. This alone should alleviate the problem. +// +// There is a third problem which address how many notes are voiced simultaneously. +// This problem also revolves around the mechanical differences between instruments +// used to create MIDI files, and the guitar. For instance, the keyboard is capable +// of simultaneously voicing all 188 keys. In other words, a chord can be build on +// the keyboard that repeats the root, third, and fifth, many times (ie) ten notes +// played sumultaneously (eleven if the pianist uses his toe). We need to limit the +// number of simultaneous voices for the guitar to six. We do not want to exclude +// important notes in the elimination process. We would also like to retain key +// note pitches in order to reproduce the original sound as accurately as possible. diff --git a/guitar/backup/20030731/MessageBox.hpp b/guitar/backup/20030731/MessageBox.hpp new file mode 100644 index 0000000..53be76b --- /dev/null +++ b/guitar/backup/20030731/MessageBox.hpp @@ -0,0 +1,47 @@ +#ifndef _GUITAR_MESSAGE_HPP_ +#define _GUITAR_MESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif + +class MessageBox +{ +public: + static LRESULT messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type=MB_OK); + static LRESULT messageBox(const String &strCaption,const String &strText,UINT type=MB_OK); +private: + MessageBox(); + static String getProductVersion(const VersionInfo &versionInfo); +}; + +inline +MessageBox::MessageBox() +{ +} + +inline +LRESULT MessageBox::messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(parent,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +LRESULT MessageBox::messageBox(const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(0,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +String MessageBox::getProductVersion(const VersionInfo &versionInfo) +{ + return String("[")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("]"); +} +#endif diff --git a/guitar/backup/20030731/NoteType.cpp b/guitar/backup/20030731/NoteType.cpp new file mode 100644 index 0000000..2877fe9 --- /dev/null +++ b/guitar/backup/20030731/NoteType.cpp @@ -0,0 +1,80 @@ +#include + +const NoteType &NoteType::operator++(void) +{ + if(WholeNote==mNoteType)mNoteType=HalfNote; + else if(HalfNote==mNoteType)mNoteType=QuarterNote; + else if(QuarterNote==mNoteType)mNoteType=EighthNote; + else if(EighthNote==mNoteType)mNoteType=SixteenthNote; + else if(SixteenthNote==mNoteType)mNoteType=ThirtySecondNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixtyFourthNote; + else mNoteType++; + return *this; +} + +const NoteType &NoteType::operator--(void) +{ + if(HalfNote==mNoteType)mNoteType=WholeNote; + else if(QuarterNote==mNoteType)mNoteType=HalfNote; + else if(EighthNote==mNoteType)mNoteType=QuarterNote; + else if(SixteenthNote==mNoteType)mNoteType=EighthNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixteenthNote; + else if(SixtyFourthNote==mNoteType)mNoteType=ThirtySecondNote; + else mNoteType--; + return *this; +} + +NoteType &NoteType::fromString(const String &stringRep) +{ + if(stringRep.equals(toString(WholeNote)))mNoteType=WholeNote; + else if(stringRep.equals(toString(HalfNote)))mNoteType=HalfNote; + else if(stringRep.equals(toString(QuarterNote)))mNoteType=QuarterNote; + else if(stringRep.equals(toString(EighthNote)))mNoteType=EighthNote; + else if(stringRep.equals(toString(SixteenthNote)))mNoteType=SixteenthNote; + else if(stringRep.equals(toString(ThirtySecondNote)))mNoteType=ThirtySecondNote; + else if(stringRep.equals(toString(SixtyFourthNote)))mNoteType=SixtyFourthNote; + else mNoteType=stringRep.betweenString('/',0).toInt(); + return *this; +} + +Array NoteType::enumerate(void) +{ + Array values; + values.size(7); + values[0]=NoteType::toString(WholeNote); + values[1]=NoteType::toString(HalfNote); + values[2]=NoteType::toString(QuarterNote); + values[3]=NoteType::toString(EighthNote); + values[4]=NoteType::toString(SixteenthNote); + values[5]=NoteType::toString(ThirtySecondNote); + values[6]=NoteType::toString(SixtyFourthNote); + return values; +} + +String NoteType::toString(void)const +{ + return toString(getNoteType()); +} + +String NoteType::toString(TypeNote noteType) +{ + switch(noteType) + { + case WholeNote : + return "1/1"; + case HalfNote : + return "1/2"; + case QuarterNote : + return "1/4"; + case EighthNote : + return "1/8"; + case SixteenthNote : + return "1/16"; + case ThirtySecondNote : + return "1/32"; + case SixtyFourthNote : + return "1/64"; + default : + return "1/"+String().fromInt((int)noteType); + } +} diff --git a/guitar/backup/20030731/NoteType.hpp b/guitar/backup/20030731/NoteType.hpp new file mode 100644 index 0000000..f9c0567 --- /dev/null +++ b/guitar/backup/20030731/NoteType.hpp @@ -0,0 +1,86 @@ +#ifndef _GUITAR_NOTETYPE_HPP_ +#define _GUITAR_NOTETYPE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class NoteType +{ +public: + enum TypeNote{WholeNote=1,HalfNote=2,QuarterNote=4,EighthNote=8, + SixteenthNote=16,ThirtySecondNote=32,SixtyFourthNote=64}; + NoteType(TypeNote noteType=QuarterNote); + virtual ~NoteType(); + const NoteType &operator++(void); + NoteType operator++(int postfix); + const NoteType &operator--(void); + NoteType operator--(int postfix); + TypeNote getNoteType(void)const; + int toInt(void)const; + NoteType &fromInt(int noteType); + NoteType &fromString(const String &stringRep); + void setNoteType(TypeNote noteType); + String toString(void)const; + static Array enumerate(void); + static String toString(TypeNote noteType); +private: + int mNoteType; +}; + +inline +NoteType::NoteType(TypeNote noteType) +: mNoteType(noteType) +{ +} + +inline +NoteType::~NoteType() +{ +} + +inline +NoteType NoteType::operator++(int postfix) +{ + NoteType noteType(*this); + operator++(); + return noteType; +} + +inline +NoteType NoteType::operator--(int postfix) +{ + NoteType noteType(*this); + operator--(); + return noteType; +} + +inline +int NoteType::toInt(void)const +{ + return (int)mNoteType; +} + +inline +NoteType &NoteType::fromInt(int noteType) +{ + mNoteType=(TypeNote)noteType; + return *this; +} + +inline +NoteType::TypeNote NoteType::getNoteType(void)const +{ + return (TypeNote)mNoteType; +} + +inline +void NoteType::setNoteType(TypeNote noteType) +{ + mNoteType=noteType; +} +#endif + + diff --git a/guitar/backup/20030731/Range.hpp b/guitar/backup/20030731/Range.hpp new file mode 100644 index 0000000..a848e22 --- /dev/null +++ b/guitar/backup/20030731/Range.hpp @@ -0,0 +1,119 @@ +#ifndef _GUITAR_RANGE_HPP_ +#define _GUITAR_RANGE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Range; +typedef Block TabRanges; + +class Range +{ +public: + Range(); + virtual ~Range(); + int getBeginRange(void)const; + void setBeginRange(int beginRange); + int getEndRange(void)const; + void setEndRange(int endRange); + const String &getRangeName(void)const; + void setRangeName(const String &rangeName); + void autoName(void); + String toString(void)const; + String toTabbedString(void)const; +private: + enum{ShortNameLength=20}; + String createRangeName(void)const; + + int mBeginRange; + int mEndRange; + String mRangeName; +}; + +inline +Range::Range() +: mBeginRange(0), mEndRange(0) +{ +} + +inline +Range::~Range() +{ +} + +inline +int Range::getBeginRange(void)const +{ + return mBeginRange; +} + +inline +void Range::setBeginRange(int beginRange) +{ + mBeginRange=beginRange; +} + +inline +int Range::getEndRange(void)const +{ + return mEndRange; +} + +inline +void Range::setEndRange(int endRange) +{ + mEndRange=endRange; +} + +inline +const String &Range::getRangeName(void)const +{ + return mRangeName; +} + +inline +void Range::setRangeName(const String &rangeName) +{ + mRangeName=rangeName; +} + +inline +void Range::autoName(void) +{ + setRangeName(createRangeName()); +} + +inline +String Range::createRangeName(void)const +{ + String strRangeName("RANGE_"); + strRangeName+=String().fromInt(getBeginRange()); + strRangeName+=String("_"); + strRangeName+=String().fromInt(getEndRange()); + return strRangeName; +} + +inline +String Range::toString(void)const +{ + String strString(getRangeName()); + strString+=String("[")+String().fromInt(getBeginRange())+String("->")+String().fromInt(getEndRange()); + return strString; +} + +inline +String Range::toTabbedString(void)const +{ + String strItem; + String shortName; + + shortName=getRangeName(); + strItem+=shortName.substr(0,ShortNameLength-1)+"\t"; + strItem+=String().fromInt(getBeginRange())+"\t"; + strItem+=String().fromInt(getEndRange()); + return strItem; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030731/RangeDlg.cpp b/guitar/backup/20030731/RangeDlg.cpp new file mode 100644 index 0000000..5b65779 --- /dev/null +++ b/guitar/backup/20030731/RangeDlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include + +RangeDialog::RangeDialog(void) +{ + mInitHandler.setCallback(this,&RangeDialog::initHandler); + mCreateHandler.setCallback(this,&RangeDialog::createHandler); + mCloseHandler.setCallback(this,&RangeDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog::RangeDialog(const RangeDialog &someRangeDialog) +{ // private implementation + *this=someRangeDialog; +} + +RangeDialog::~RangeDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog) +{ // private implementation + return *this; +} + +bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + mTabRanges=ranges; + mMaxRange=maxRange; + mIsSelection=isSelect; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST); + mRangeList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(55)); + mRangeList->setTabStops(stops); + setRangeList(); + if(mIsSelection) + { + enable(RANGE_INSERT,false); + enable(RANGE_DELETE,false); + setCaption("Range Select"); + } + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(mIsSelection)handleRangeSelection(); + endDialog(true); + break; + case RANGE_INSERT : + handleRangeInsert(); + break; + case RANGE_DELETE : + handleRangeDelete(); + break; + } + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + if(mIsSelection) + { + handleRangeSelection(); + endDialog(true); + } + else handleRangeEditSelection(); + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeDialog::setRangeList(void) +{ + for(int index=0;indexaddString(range.toTabbedString()); + } + mRangeList->setCurrent(0); + return; +} + +void RangeDialog::handleRangeSelection(void) +{ + mSelection=mRangeList->getCurrent(); +} + +void RangeDialog::handleRangeEditSelection(void) +{ + RangeEditDialog rangeEditDialog; + int currSel; + + currSel=mRangeList->getCurrent(); + if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return; + Range range=rangeEditDialog.getRange(); + mTabRanges.remove(currSel); + mTabRanges.insert(&range); + mRangeList->deleteString(currSel); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeInsert(void) +{ + RangeEditDialog rangeEditDialog; + Range range; + + if(!rangeEditDialog.perform(*this,range,mMaxRange))return; + range=rangeEditDialog.getRange(); + mTabRanges.insert(&range); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeDelete(void) +{ + int currSel; + + if(-1==(currSel=mRangeList->getCurrent()))return; + if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return; + mRangeList->deleteString(currSel); + mTabRanges.remove(currSel); + currSel--; + if(currSel<0)mRangeList->setCurrent(0); + else mRangeList->setCurrent(currSel); +} diff --git a/guitar/backup/20030731/RangeDlg.hpp b/guitar/backup/20030731/RangeDlg.hpp new file mode 100644 index 0000000..0fc857c --- /dev/null +++ b/guitar/backup/20030731/RangeDlg.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_RANGEDLG_HPP_ +#define _GUITAR_RANGEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class TabEntry; + +class RangeDialog : public DWindow +{ +public: + RangeDialog(void); + virtual ~RangeDialog(); + bool perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect=false); + const TabRanges &getTabRanges(void)const; + int getSelection(void)const; +private: + RangeDialog(const RangeDialog &someRangeDialog); + RangeDialog &operator=(const RangeDialog &someRangeDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setRangeList(void); + void handleRangeSelection(void); + void handleRangeEditSelection(void); + void handleRangeInsert(void); + void handleRangeDelete(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mRangeList; + Point mDisplayPoint; + TabRanges mTabRanges; + bool mIsSelection; + int mMaxRange; + int mSelection; +}; + +inline +const TabRanges &RangeDialog::getTabRanges(void)const +{ + return mTabRanges; +} + +inline +int RangeDialog::getSelection(void)const +{ + return mSelection; +} +#endif diff --git a/guitar/backup/20030731/RangeEditDlg.cpp b/guitar/backup/20030731/RangeEditDlg.cpp new file mode 100644 index 0000000..e0daace --- /dev/null +++ b/guitar/backup/20030731/RangeEditDlg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +RangeEditDialog::RangeEditDialog(void) +{ + mInitHandler.setCallback(this,&RangeEditDialog::initHandler); + mCreateHandler.setCallback(this,&RangeEditDialog::createHandler); + mCloseHandler.setCallback(this,&RangeEditDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeEditDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeEditDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog::RangeEditDialog(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + *this=someRangeEditDialog; +} + +RangeEditDialog::~RangeEditDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog &RangeEditDialog::operator=(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + return *this; +} + +bool RangeEditDialog::perform(GUIWindow &parentWindow,const Range &range,int maxRange) +{ + mRange=range; + mMaxRange=maxRange; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEEDITDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeEditDialog::initHandler(CallbackData &someCallbackData) +{ + if(mRange.getRangeName().isNull()&&!mRange.getBeginRange()&&!mRange.getEndRange())setCaption("Insert Range"); + setData(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeEditDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + getData(); + if(!isValid())errorMessage(); + else endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeEditDialog::setData(void)const +{ + setText(RANGEEDIT_NAME,mRange.getRangeName()); + setText(RANGEEDIT_BEGIN,String().fromInt(mRange.getBeginRange())); + setText(RANGEEDIT_END,String().fromInt(mRange.getEndRange())); +} + +void RangeEditDialog::getData(void) +{ + String strName; + String strBegin; + String strEnd; + + getText(RANGEEDIT_NAME,strName); + mRange.setRangeName(strName); + getText(RANGEEDIT_BEGIN,strBegin); + mRange.setBeginRange(strBegin.toInt()); + getText(RANGEEDIT_END,strEnd); + mRange.setEndRange(strEnd.toInt()); +} + +bool RangeEditDialog::isValid(void) +{ + if(mRange.getRangeName().isNull()) + { + mLastError="Range name cannot be empty."; + return false; + } + if(mRange.getBeginRange()<0) + { + mLastError="Begin range position must be greater than zero."; + return false; + } + if(mRange.getBeginRange()>mRange.getEndRange()) + { + mLastError="Begin range position must be smaller than end range position."; + return false; + } + if(mRange.getEndRange()>=mMaxRange) + { + mLastError="End range position must be less than "+String().fromInt(mMaxRange); + return false; + } + return true; +} + +void RangeEditDialog::errorMessage(void) +{ + MessageBox::messageBox(*this,"Invalid range.",mLastError.str()); +} diff --git a/guitar/backup/20030731/RangeEditDlg.hpp b/guitar/backup/20030731/RangeEditDlg.hpp new file mode 100644 index 0000000..3139037 --- /dev/null +++ b/guitar/backup/20030731/RangeEditDlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_RANGEEDITDLG_HPP_ +#define _GUITAR_RANGEEDITDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class RangeEditDialog : public DWindow +{ +public: + RangeEditDialog(void); + virtual ~RangeEditDialog(); + bool perform(GUIWindow &parentWindow,const Range &range,int maxRange); + const Range &getRange(void)const; +private: + RangeEditDialog(const RangeEditDialog &someRangeEditDialog); + RangeEditDialog &operator=(const RangeEditDialog &someRangeEditDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setData(void)const; + void getData(void); + bool isValid(void); + void errorMessage(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Range mRange; + String mLastError; + int mMaxRange; +}; + +inline +const Range &RangeEditDialog::getRange(void)const +{ + return mRange; +} +#endif diff --git a/guitar/backup/20030731/Registration.hpp b/guitar/backup/20030731/Registration.hpp new file mode 100644 index 0000000..9871a01 --- /dev/null +++ b/guitar/backup/20030731/Registration.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REGISTRATION_HPP_ +#define _GUITAR_REGISTRATION_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _GUITAR_LICENSE_HPP_ +#include +#endif + +// Registration procedure +// When application first comes up it will check registry for a license + +// If no license exists and there is no "install.gid" file it will create a 30 day license +// along with an "install.gid" hidden file in the product directory. +// If no license key exists and there IS an "install.gid" file in the product directory, +// the user will be prompted to enter a valid license key. +// +// +// If a license exists it will check the validity of the license by.... +// If the license is type "non expiring", the application will proceeed normally. +// If the license is type "expiring", it will check to see if the license has expired. +// If the license has expired, a dialog box will appear, prompting the user to +// enter a valid license. +// If no valid license is entered, then the application will exit. +// In addition, a dialog box will be available from the help screen to enable the user +// to enter in additional licenses + +class Registration +{ +public: + virtual ~Registration(); + static Registration &getInstance(); + bool hasLicense(void)const; + bool hasGID(void)const; + bool getLicense(License &license)const; + bool create30DayLicense(void)const; + bool create15DayLicense(void)const; + bool createPermanentLicense(void)const; + bool createLicense(int days)const; + bool removeLicense(void); + bool applyLicense(const String &uuencodedLicense); + bool applyLicense(Block &strLicenseLines); + License generatePermanentLicense(void)const; // return a permanent license +private: + Registration(); + static SmartPointer smRegistration; + + String mRegistrationKeyName; + String mSettingsLicenseKey; + RegKey mRegKeyRegistration; +}; +#endif diff --git a/guitar/backup/20030731/ScaleDlg.cpp b/guitar/backup/20030731/ScaleDlg.cpp new file mode 100644 index 0000000..df59ab3 --- /dev/null +++ b/guitar/backup/20030731/ScaleDlg.cpp @@ -0,0 +1,280 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ScaleDialog::ScaleDialog(void) +: mInEdit(false) +{ + mInitHandler.setCallback(this,&ScaleDialog::initHandler); + mCreateHandler.setCallback(this,&ScaleDialog::createHandler); + mCloseHandler.setCallback(this,&ScaleDialog::closeHandler); + mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler); + mCommandHandler.setCallback(this,&ScaleDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog) +{ // private implementation + *this=someScaleDialog; +} + +ScaleDialog::~ScaleDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog) +{ // private implementation + return *this; +} + +bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; + return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + case SCALEDLG_SPIN : + break; + case SCALEDLG_ROOT : + handleRoot(); + break; + case SCALEDLG_LIST : + if(LBN_KILLFOCUS!=someCallbackData.wmCommandCommand()&& + LBN_SETFOCUS!=someCallbackData.wmCommandCommand()) + handleList(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void ScaleDialog::handleOk(void) +{ +} + +void ScaleDialog::handleRoot(void) +{ + String strRoot; + + if(mInEdit)return; + mInEdit=true; + getText(SCALEDLG_ROOT,strRoot); + strRoot.upper(); + if(strRoot=="0")setText(SCALEDLG_ROOT,"A"); + else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#"); + else if(strRoot=="2")setText(SCALEDLG_ROOT,"B"); + else if(strRoot=="3")setText(SCALEDLG_ROOT,"C"); + else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#"); + else if(strRoot=="5")setText(SCALEDLG_ROOT,"D"); + else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#"); + else if(strRoot=="7")setText(SCALEDLG_ROOT,"E"); + else if(strRoot=="8")setText(SCALEDLG_ROOT,"F"); + else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#"); + else if(strRoot=="10")setText(SCALEDLG_ROOT,"G"); + else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#"); + else {mInEdit=false;return;} + if(!showScale())setText(SCALEDLG_ROOT,"A"); + mInEdit=false; +} + +void ScaleDialog::handleList(void) +{ + showScale(); +} + +bool ScaleDialog::showScale(void) +{ + String strScale; + String strRoot; + DWORD current; + + current=mScaleList->getCurrent(); + getText(SCALEDLG_ROOT,strRoot); + if(Note::None==Note::getNoteType(strRoot))return false; + mScaleList->getText(strScale,current); + playScale(strRoot,strScale); + return true; +} + +void ScaleDialog::playScale(const String &root,const String &scale) +{ + if(BST_CHECKED==sendMessage(SCALEDLG_MUTE,BM_GETCHECK,0,0L))return; + if(scale=="Ionian") + { + IonianScale ionianScale(Note::getNoteType(root)); + playScale(ionianScale); + } + else if(scale=="Dorian") + { + DorianScale dorianScale(Note::getNoteType(root)); + playScale(dorianScale); + } + else if(scale=="Phrygian") + { + PhrygianScale phrygianScale(Note::getNoteType(root)); + playScale(phrygianScale); + } + else if(scale=="Lydian") + { + LydianScale lydianScale(Note::getNoteType(root)); + playScale(lydianScale); + } + else if(scale=="Mixolydian") + { + MixolydianScale mixolydianScale(Note::getNoteType(root)); + playScale(mixolydianScale); + } + else if(scale=="Aeolian") + { + AeolianScale aeolianScale(Note::getNoteType(root)); + playScale(aeolianScale); + } + else if(scale=="Locrian") + { + LocrianScale locrianScale(Note::getNoteType(root)); + playScale(locrianScale); + } + else if(scale=="Pentatonic Minor") + { + PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root)); + playScale(pentatonicMinorScale); + } + else if(scale=="Harmonic Minor") + { + HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root)); + playScale(harmonicMinorScale); + } + else if(scale=="Melodic Minor") + { + MelodicMinorScale melodicMinorScale(Note::getNoteType(root)); + playScale(melodicMinorScale); + } + else if(scale=="Dorian-II") + { + DorianIIScale dorianIIScale(Note::getNoteType(root)); + playScale(dorianIIScale); + } + else if(scale=="Lydian Augmented") + { + LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root)); + playScale(lydianAugmentedScale); + } + else if(scale=="Lydian Dominant") + { + LydianDominantScale lydianDominantScale(Note::getNoteType(root)); + playScale(lydianDominantScale); + } + else if(scale=="Locrian2") + { + Locrian2Scale locrian2Scale(Note::getNoteType(root)); + playScale(locrian2Scale); + } + else if(scale=="Altered") + { + AlteredScale alteredScale(Note::getNoteType(root)); + playScale(alteredScale); + } + else if(scale=="Diminished(Whole Step)") + { + DiminishedWholeScale diminishedWholeScale(Note::getNoteType(root)); + playScale(diminishedWholeScale); + } + else if(scale=="Diminished(Half Step)") + { + DiminishedHalfScale diminishedHalfScale(Note::getNoteType(root)); + playScale(diminishedHalfScale); + } + else if(scale=="Whole Tone") + { + WholeToneScale wholeToneScale(Note::getNoteType(root)); + playScale(wholeToneScale); + } +} + +void ScaleDialog::playScale(const Scale &scale) +{ + CallbackData cbData(CBCommands::FBPlayScale,(LPARAM)&scale); + CursorControl cursorControl; + cursorControl.waitCursor(true); + mPlayNoteHandler.callback(cbData); + cursorControl.waitCursor(false); +} + + diff --git a/guitar/backup/20030731/ScaleDlg.hpp b/guitar/backup/20030731/ScaleDlg.hpp new file mode 100644 index 0000000..291ebaa --- /dev/null +++ b/guitar/backup/20030731/ScaleDlg.hpp @@ -0,0 +1,59 @@ +#ifndef _GUITAR_SCALEDLG_HPP_ +#define _GUITAR_SCALEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class Scale; + +class ScaleDialog : public DWindow +{ +public: + ScaleDialog(void); + virtual ~ScaleDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + ScaleDialog(const ScaleDialog &someScaleDialog); + ScaleDialog &operator=(const ScaleDialog &someScaleDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void handleRoot(void); + void handleList(void); + bool showScale(void); + void playScale(const Scale &scale); + void playScale(const String &root,const String &scale); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mScaleList; + SmartPointer mMIDIDevice; + CallbackPointer mPlayNoteHandler; + Fretboard mFretboard; + bool mInEdit; +}; +#endif diff --git a/guitar/backup/20030731/ScrollInfo.cpp b/guitar/backup/20030731/ScrollInfo.cpp new file mode 100644 index 0000000..76ba573 --- /dev/null +++ b/guitar/backup/20030731/ScrollInfo.cpp @@ -0,0 +1,136 @@ +#include + +bool ScrollInfo::pageDown(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()+PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +bool ScrollInfo::pageUp(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()-PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + diff --git a/guitar/backup/20030731/ScrollInfo.hpp b/guitar/backup/20030731/ScrollInfo.hpp new file mode 100644 index 0000000..2dc42c1 --- /dev/null +++ b/guitar/backup/20030731/ScrollInfo.hpp @@ -0,0 +1,274 @@ +#ifndef _GUITAR_SCROLLINFO_HPP_ +#define _GUITAR_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); + bool pageUp(void); + bool pageDown(void); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + + if(scrollableObjectWidth()==width&&scrollableObjectHeight()==height)return; + + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_REGISTRY_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class Sequencer : private MIDIOutputDevice +{ +public: + Sequencer(); + virtual ~Sequencer(); + bool midiEvent(const PureEvent &somePureEvent); + bool clearNotes(void); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + MIDIOutputDevice &getDevice(void); +private: + void changeProgram(void); +}; + +inline +Sequencer::Sequencer() +: MIDIOutputDevice(Registry().getMIDIOutputDevice()) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::Sequencer] Sequencer()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + changeProgram(); +} + +inline +Sequencer::~Sequencer() +{ + GlobalDefs::outDebug("[Sequencer::Sequencer] Sequencer()",GlobalDefs::Info); + closeDevice(); +} + +inline +bool Sequencer::midiEvent(const PureEvent &somePureEvent) +{ + GlobalDefs::outDebug(String("[Sequencer::midiEvent] ")+somePureEvent.toString(),GlobalDefs::Info); + return MIDIOutputDevice::midiEvent(somePureEvent); +} + +inline +bool Sequencer::hasDevice(void)const +{ + GlobalDefs::outDebug(String("[Sequencer::hasDevice] "),GlobalDefs::Info); + return MIDIOutputDevice::hasDevice(); +} + +inline +void Sequencer::closeDevice(void) +{ + GlobalDefs::outDebug(String("[Sequencer::closeDevice] "),GlobalDefs::Info); + MIDIOutputDevice::closeDevice(); +} + +inline +bool Sequencer::openDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::openDevice] registry.getMIDIOutputDevice()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; + changeProgram(); + return true; +} + +inline +bool Sequencer::clearNotes(void) +{ + GlobalDefs::outDebug(String("[Sequencer::clearNotes]"),GlobalDefs::Info); + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +} + +inline +MIDIOutputDevice &Sequencer::getDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::getDevice]"),GlobalDefs::Info); + if(!hasDevice()) + { + GlobalDefs::outDebug(String("[Sequencer::getDevice] OpenDevice"),GlobalDefs::Info); + MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()); + changeProgram(); + } + return (MIDIOutputDevice&)*this; +} + +inline +void Sequencer::changeProgram(void) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::changeProgram]"),GlobalDefs::Info); + midiEvent(ProgramChange(registry.getInstrument()).getEvent()); +} +#endif diff --git a/guitar/backup/20030731/TabEntry.cpp b/guitar/backup/20030731/TabEntry.cpp new file mode 100644 index 0000000..feada45 --- /dev/null +++ b/guitar/backup/20030731/TabEntry.cpp @@ -0,0 +1,138 @@ +#include +#include +#include +#include + +TabEntry::TabEntry(const TabEntry &entry) +{ + *this=entry; +} + +TabEntry &TabEntry::operator=(const TabEntry &entry) +{ + remove(); + for(int index=0;index&)*this).operator[](index)==((TabEntry&)entry)[index]))return false; + } + return true; +} + +bool TabEntry::play(MIDIOutputDevice &midiDevice,bool useDelay)const +{ + if(!midiDevice.hasDevice())return false; + for(int index=0;index::remove(entryIndex); + return true; +} + +String TabEntry::toString(void)const +{ + String str; + + str+="TABENTRY "; + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif +#ifndef _GUITAR_TIMING_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class TabEntry; +typedef Block TabEntries; + +class TabEntry : public Block +{ +public: + TabEntry(); + TabEntry(const TabEntry &entry); + virtual ~TabEntry(); + bool play(MIDIOutputDevice &midiDevice,bool useDelay=true)const; + bool operator==(const TabEntry &entry)const; + TabEntry &operator=(const TabEntry &entry); + const NoteType &getNoteType(void)const; + void setNoteType(const NoteType ¬eType); + String toString(void)const; + bool fromString(String strText); + bool fromChord(const Music::Chord &chord); + bool contains(int string,int &entryIndex); + bool contains(int string); + bool remove(int string,int fret); + void remove(void); + bool addFrettedNote(int string,const FrettedNote &frettedNote); + bool setFrettedNote(int string,const FrettedNote &frettedNote); +private: + void delay(void)const; + + NoteType mNoteType; +}; + +inline +TabEntry::TabEntry() +{ +} + +inline +TabEntry::~TabEntry() +{ +} + +inline +const NoteType &TabEntry::getNoteType(void)const +{ + return mNoteType; +} + +inline +void TabEntry::setNoteType(const NoteType ¬eType) +{ + mNoteType=noteType; +} + +inline +void TabEntry::remove(void) +{ + Block::remove(); +} +#endif diff --git a/guitar/backup/20030731/TabLines.cpp b/guitar/backup/20030731/TabLines.cpp new file mode 100644 index 0000000..a56ae0d --- /dev/null +++ b/guitar/backup/20030731/TabLines.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +// returns -1 on error, 1 if added to entry, 0 otherwise + +int TabLines::firstElement(TabEntry &entry,Fretboard &fretboard) +{ + TabElement element; + + entry.remove(); + for(int index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabEntry; +class Fretboard; + +typedef Element TabElement[6]; + +class TabLines : public Array +{ +public: + enum{NumLines=6}; + TabLines(); + int firstElement(TabEntry &entry,Fretboard &fretboard); + int nextElement(TabEntry &entry,Fretboard &fretboard); + virtual ~TabLines(); +private: + bool haveElement(TabElement &elements)const; + bool validate(Element &elements)const; + void insert(TabEntry &entry,TabElement &elements,Fretboard &fretboard); + void synchronize(void); +}; + +inline +TabLines::TabLines() +{ + size(NumLines); +} + +inline +TabLines::~TabLines() +{ +} +#endif diff --git a/guitar/backup/20030731/TabView.cpp b/guitar/backup/20030731/TabView.cpp new file mode 100644 index 0000000..ba2f85b --- /dev/null +++ b/guitar/backup/20030731/TabView.cpp @@ -0,0 +1,95 @@ +#include + +TabView::TabView(void) +{ + mCreateHandler.setCallback(this,&TabView::createHandler); + mSizeHandler.setCallback(this,&TabView::sizeHandler); + mPaintHandler.setCallback(this,&TabView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&TabView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&TabView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabView::leftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +TabView::~TabView() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType TabView::createHandler(CallbackData &someCallbackData) +{ + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType TabView::sizeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType TabView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void TabView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String TabView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void TabView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(LTGRAY_BRUSH); +} + +void TabView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030731/TabView.hpp b/guitar/backup/20030731/TabView.hpp new file mode 100644 index 0000000..6f9ef25 --- /dev/null +++ b/guitar/backup/20030731/TabView.hpp @@ -0,0 +1,42 @@ +#ifndef _GUITAR_TABVIEW_HPP_ +#define _GUITAR_TABVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class StatusBarEx; + +class TabView : public MDIWindow +{ +public: + TabView(void); + virtual ~TabView(); + String getTitle(void)const; +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,WindowWidth=565,WindowHeight=210}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + SmartPointer mStatusBar; +}; +#endif diff --git a/guitar/backup/20030731/TabWriter.cpp b/guitar/backup/20030731/TabWriter.cpp new file mode 100644 index 0000000..d3f5222 --- /dev/null +++ b/guitar/backup/20030731/TabWriter.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + + GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug); + if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb")) + { + GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug); + return false; + } + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + initLines(); + setHeader(); + for(int index=0,entryCount=0;indexMaxItems) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outFile); + outFile.writeLine(String(" ")); + initLines(); + setHeader(); + entryCount=0; + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabWriter : public Array +{ +public: + TabWriter(); + virtual ~TabWriter(); + bool write(TabEntries &entries,const String &strPathTabFile); +private: + enum {MaxItems=30,NumLines=6}; + void writeLines(File &outFile); + void initLines(void); + void setHeader(void); + void synchronize(void); +}; + +inline +TabWriter::TabWriter() +{ +} + +inline +TabWriter::~TabWriter() +{ +} +#endif diff --git a/guitar/backup/20030731/Tablature.hpp b/guitar/backup/20030731/Tablature.hpp new file mode 100644 index 0000000..000104e --- /dev/null +++ b/guitar/backup/20030731/Tablature.hpp @@ -0,0 +1,93 @@ +#ifndef _GUITAR_TABLATURE_HPP_ +#define _GUITAR_TABLATURE_HPP_ +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_TABLINES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class GUIWindow; +class TabPage; + +class Tablature +{ +public: + typedef enum LastError{None,FileOpenError,NoTabsParsedError,NoFrettedNotesError}; + Tablature(); + Tablature(const String &pathFileName); + virtual ~Tablature(); + bool open(const String &pathFileTablature); // open tablature file + bool import(String pathFileTablature); // import tablature file into project + bool save(void); // save tablature file + bool saveAs(const String &pathFileTablature); // save tablature file as... + bool openProject(const String &pathFileName); // open existing project file + bool saveProject(const String &pathFileName=String()); // save current project + bool play(MIDIOutputDevice &midiDevice); + LastError getLastError(void)const; + const String &getPathFileTablature(void)const; + const String &getPathFileProject(void)const; + const TabEntries &getTabEntries(void)const; + void setTabEntries(const TabEntries &entries); + const TabRanges &getTabRanges(void)const; + void setTabRanges(const TabRanges &ranges); + static String getPathFileProject(const String &pathFileTablature); +private: + bool loadTabFile(const String &pathFileName); + bool parseTab(void); + bool isTabLine(const String &strLine,int &startElement)const; + bool setTypeAt(int index,const NoteType ¬eType); + void parseTypes(String strLine); + void parseRange(String strLine); + String getTypes(void)const; + + TabEntries mTabEntries; + TabRanges mTabRanges; + Block mTablature; + Fretboard mFretboard; + String mPathFileName; + LastError mLastError; + String mPathFileTablature; + String mPathFileProject; +}; + +inline +Tablature::Tablature() +{ +} + +inline +Tablature::Tablature(const String &pathFileName) +{ + open(pathFileName); +} + +inline +Tablature::~Tablature() +{ +} + +inline +Tablature::LastError Tablature::getLastError(void)const +{ + return mLastError; +} + +inline +const String &Tablature::getPathFileTablature(void)const +{ + return mPathFileTablature; +} + +inline +const String &Tablature::getPathFileProject(void)const +{ + return mPathFileProject; +} +#endif diff --git a/guitar/backup/20030731/Timing.cpp b/guitar/backup/20030731/Timing.cpp new file mode 100644 index 0000000..f638d7a --- /dev/null +++ b/guitar/backup/20030731/Timing.cpp @@ -0,0 +1,138 @@ +#include +#include +#include + +int Timing::mMicrosecondsPerQuarterNote=Timing::microsecondsPerQuarterNote(Registry().getMicrosecondsPerQuarterNote()); +int Timing::mMillisecondsPerWholeNote; +int Timing::mMillisecondsPerHalfNote; +int Timing::mMillisecondsPerQuarterNote; +int Timing::mMillisecondsPerEigthNote; +int Timing::mMillisecondsPerSixteenthNote; +int Timing::mMillisecondsPerThirtySecondNote; +int Timing::mMillisecondsPerSixtyFourthNote; + +int Timing::microsecondsPerQuarterNote(int microsecondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=microsecondsPerQuarterNote; + mMillisecondsPerQuarterNote=(double)microsecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; + return mMicrosecondsPerQuarterNote; +} + +int Timing::microsecondsPerQuarterNote(void) +{ + return mMicrosecondsPerQuarterNote; +} + +void Timing::secondsPerQuarterNote(float secondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=secondsPerQuarterNote*1000000.00;; + mMillisecondsPerQuarterNote=(double)mMicrosecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; +} + +int Timing::millisecondsPerWholeNote(void) +{ + return mMillisecondsPerWholeNote; +} + +int Timing::millisecondsPerHalfNote(void) +{ + return mMillisecondsPerHalfNote; +} + +int Timing::millisecondsPerQuarterNote(void) +{ + return mMillisecondsPerQuarterNote; +} + +int Timing::millisecondsPerEightNote(void) +{ + return mMillisecondsPerEigthNote; +} + +int Timing::millisecondsPerSixteenthNote(void) +{ + return mMillisecondsPerSixteenthNote; +} + +int Timing::millisecondsPerThirtySecondNote(void) +{ + return mMillisecondsPerThirtySecondNote; +} + +int Timing::millisecondsPerSixtyFourthNote(void) +{ + return mMillisecondsPerSixtyFourthNote; +} + +int Timing::getDelay(const NoteType ¬eType) +{ + switch(noteType.getNoteType()) + { + case NoteType::WholeNote : + return millisecondsPerWholeNote(); + case NoteType::HalfNote : + return millisecondsPerHalfNote(); + case NoteType::QuarterNote : + return millisecondsPerQuarterNote(); + case NoteType::EighthNote : + return millisecondsPerEightNote(); + case NoteType::SixteenthNote : + return millisecondsPerSixteenthNote(); + case NoteType::ThirtySecondNote : + return millisecondsPerThirtySecondNote(); + case NoteType::SixtyFourthNote : + return millisecondsPerSixtyFourthNote(); + default : + return millisecondsPerSixtyFourthNote(); + } +} + +String Timing::toString(void) +{ + String strTiming; + strTiming+=String("1/1=")+String().fromInt(millisecondsPerWholeNote())+String("ms, "); + strTiming+=String("1/2=")+String().fromInt(millisecondsPerHalfNote())+String("ms, "); + strTiming+=String("1/4=")+String().fromInt(millisecondsPerQuarterNote())+String("ms, "); + strTiming+=String("1/8=")+String().fromInt(millisecondsPerEightNote())+String("ms, "); + strTiming+=String("1/16=")+String().fromInt(millisecondsPerSixteenthNote())+String("ms, "); + strTiming+=String("1/32=")+String().fromInt(millisecondsPerThirtySecondNote())+String("ms, "); + strTiming+=String("1/64=")+String().fromInt(millisecondsPerSixtyFourthNote())+String("ms, "); + return strTiming; +} + + +/* +microseconds per quarter note = 631578 +milliseconds per quarter note = 631578/1000 = 631 + 631578*.001 = 631 + +msecs per qtr note=usecs per qtr note *.001 + +quarter note = msecs per 4th note +eigth note = msecs/2 +sixteenth note = msecs/4 +thirty second note = msecs/8 +sixty fourth note = msecs/16 + +(ie) +microsecs millisecs 4th note 8th note 16th note 32nd note 64th note +--------- --------- -------- -------- --------- --------- --------- + 631578 631 631 315 157 78 39 + +options +seconds per qtr note: .5 + +msecs per qtr note=(seconds_per_qtr_note*1000) +*/ \ No newline at end of file diff --git a/guitar/backup/20030731/Timing.hpp b/guitar/backup/20030731/Timing.hpp new file mode 100644 index 0000000..96bcf39 --- /dev/null +++ b/guitar/backup/20030731/Timing.hpp @@ -0,0 +1,48 @@ +#ifndef _GUITAR_TIMING_HPP_ +#define _GUITAR_TIMING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif + +class Timing +{ +public: + static int microsecondsPerQuarterNote(int microsecondsPerQuarterNote); + static int microsecondsPerQuarterNote(void); + static void secondsPerQuarterNote(float secondsPerQuarterNote); + static int millisecondsPerWholeNote(void); + static int millisecondsPerHalfNote(void); + static int millisecondsPerQuarterNote(void); + static int millisecondsPerEightNote(void); + static int millisecondsPerSixteenthNote(void); + static int millisecondsPerThirtySecondNote(void); + static int millisecondsPerSixtyFourthNote(void); + static int getDelay(const NoteType ¬eType); + static String toString(void); +private: + Timing(); + virtual ~Timing(); + static int mMicrosecondsPerQuarterNote; + static int mMillisecondsPerWholeNote; + static int mMillisecondsPerHalfNote; + static int mMillisecondsPerQuarterNote; + static int mMillisecondsPerEigthNote; + static int mMillisecondsPerSixteenthNote; + static int mMillisecondsPerThirtySecondNote; + static int mMillisecondsPerSixtyFourthNote; +}; + +inline +Timing::Timing() +{ +} + +inline +Timing::~Timing() +{ +} +#endif + diff --git a/guitar/backup/20030731/Tuning.cpp b/guitar/backup/20030731/Tuning.cpp new file mode 100644 index 0000000..c4b1cb6 --- /dev/null +++ b/guitar/backup/20030731/Tuning.cpp @@ -0,0 +1,20 @@ +#include +#include + +void Tuning::setStandardTuning(void) +{ + size(StandardTuningStrings); + operator[](0)=Note(Note::E,3); + operator[](1)=Note(Note::A,3); + operator[](2)=Note(Note::D,4); + operator[](3)=Note(Note::G,4); + operator[](4)=Note(Note::B,4); + operator[](5)=Note(Note::E,operator[](4).getOctave()+1); +} + +// virtuals + +int Tuning::getDelay(void)const +{ + return Delay; +} diff --git a/guitar/backup/20030731/Tuning.hpp b/guitar/backup/20030731/Tuning.hpp new file mode 100644 index 0000000..d4d41e7 --- /dev/null +++ b/guitar/backup/20030731/Tuning.hpp @@ -0,0 +1,43 @@ +#ifndef _GUITAR_TUNING_HPP_ +#define _GUITAR_TUNING_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif + +class Tuning : public Notes +{ +public: + enum {StandardTuningStrings=6,Delay=1000}; + Tuning(); + virtual ~Tuning(); + int getStrings(void)const; + void setStrings(int strings); + void setStandardTuning(void); +protected: + virtual int getDelay(void)const; +private: +}; + +inline +Tuning::Tuning() +{ + setStandardTuning(); +} + +inline +Tuning::~Tuning() +{ +} + +inline +int Tuning::getStrings(void)const +{ + return size(); +} + +inline +void Tuning::setStrings(int strings) +{ + size(strings); +} +#endif diff --git a/guitar/backup/20030731/chordmain.cpp b/guitar/backup/20030731/chordmain.cpp new file mode 100644 index 0000000..fc9ac30 --- /dev/null +++ b/guitar/backup/20030731/chordmain.cpp @@ -0,0 +1,33 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDef; + String strEnum; + File inFile("tabs/allchords.tab"); + File rcFile("chords.rc","wb"); + File hFile("chords.h","wb"); + int count(21000); + + rcFile.writeLine("#include "); + rcFile.writeLine("STRINGTABLE DISCARDABLE"); + rcFile.writeLine("BEGIN"); + while(inFile.readLine(strLine)) + { + strEnum="STRING_"+String().fromInt(count); + strDef=strEnum; + strDef+="\t\""; + strDef+=strLine.betweenString(0,':')+"\""; + rcFile.writeLine(strDef); + hFile.writeLine(String("#define ")+strEnum+String(" ")+String().fromInt(count)); + count++; + } + rcFile.writeLine("END"); + return 0; + +// MainFrame mainFrame; +// mainFrame.createWindow("TabMaster","TabMaster v1.00a","mainMenu","APP_ICON"); +// return mainFrame.messageLoop(); +} diff --git a/guitar/backup/20030731/chords.aps b/guitar/backup/20030731/chords.aps new file mode 100644 index 0000000..1822219 Binary files /dev/null and b/guitar/backup/20030731/chords.aps differ diff --git a/guitar/backup/20030731/fret6.jpg b/guitar/backup/20030731/fret6.jpg new file mode 100644 index 0000000..818b048 Binary files /dev/null and b/guitar/backup/20030731/fret6.jpg differ diff --git a/guitar/backup/20030731/fretboard.bmp b/guitar/backup/20030731/fretboard.bmp new file mode 100644 index 0000000..d253187 Binary files /dev/null and b/guitar/backup/20030731/fretboard.bmp differ diff --git a/guitar/backup/20030731/fretboard1.bmp b/guitar/backup/20030731/fretboard1.bmp new file mode 100644 index 0000000..bd7dd8c Binary files /dev/null and b/guitar/backup/20030731/fretboard1.bmp differ diff --git a/guitar/backup/20030731/guitar.aps b/guitar/backup/20030731/guitar.aps new file mode 100644 index 0000000..fa7336f Binary files /dev/null and b/guitar/backup/20030731/guitar.aps differ diff --git a/guitar/backup/20030731/guitar.bmp b/guitar/backup/20030731/guitar.bmp new file mode 100644 index 0000000..ed9b0fe Binary files /dev/null and b/guitar/backup/20030731/guitar.bmp differ diff --git a/guitar/backup/20030731/guitar.dsp b/guitar/backup/20030731/guitar.dsp new file mode 100644 index 0000000..c83a580 --- /dev/null +++ b/guitar/backup/20030731/guitar.dsp @@ -0,0 +1,258 @@ +# Microsoft Developer Studio Project File - Name="guitar" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=guitar - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "guitar.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "guitar.mak" CFG="guitar - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "guitar - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "guitar - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "guitar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "guitar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX"windows.hpp" /FD /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib comctl32.lib version.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"LIBCMT" /out:"msvcobj/TabMaster.exe" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "guitar - Win32 Release" +# Name "guitar - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\BrowserHelper.cpp +# End Source File +# Begin Source File + +SOURCE=.\ChordBuilderDialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\ChordDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Fingering.cpp +# End Source File +# Begin Source File + +SOURCE=.\Fretboard.cpp +# End Source File +# Begin Source File + +SOURCE=.\FretDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\FretViewWnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\GlobalDefs.cpp +# End Source File +# Begin Source File + +SOURCE=.\GUIFretboard.cpp +# End Source File +# Begin Source File + +SOURCE=.\guitar.rc +# End Source File +# Begin Source File + +SOURCE=.\license.cpp +# End Source File +# Begin Source File + +SOURCE=.\LicenseDialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\LineParser.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\MIDIDialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\MIDIHelper.cpp +# End Source File +# Begin Source File + +SOURCE=.\notepath.cpp +# End Source File +# Begin Source File + +SOURCE=.\NoteType.cpp +# End Source File +# Begin Source File + +SOURCE=.\RangeDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\RangeEditDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\registration.cpp +# End Source File +# Begin Source File + +SOURCE=.\registry.cpp +# End Source File +# Begin Source File + +SOURCE=.\requirements.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScaleDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScrollInfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\settingsdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\splash.cpp +# End Source File +# Begin Source File + +SOURCE=.\tabdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabEntry.cpp +# End Source File +# Begin Source File + +SOURCE=.\tablature.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabLines.cpp +# End Source File +# Begin Source File + +SOURCE=.\tabpage.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabView.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabWriter.cpp +# End Source File +# Begin Source File + +SOURCE=.\Timing.cpp +# End Source File +# Begin Source File + +SOURCE=.\Tuning.cpp +# End Source File +# Begin Source File + +SOURCE=.\uutool.cpp +# End Source File +# Begin Source File + +SOURCE=.\viewwnd.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\icon1.ico +# End Source File +# End Group +# End Target +# End Project diff --git a/guitar/backup/20030731/guitar.dsw b/guitar/backup/20030731/guitar.dsw new file mode 100644 index 0000000..4e268a5 --- /dev/null +++ b/guitar/backup/20030731/guitar.dsw @@ -0,0 +1,179 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dialog"=..\dialog\Dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "guitar"=.\guitar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name midisqlib + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name toolbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name printman + End Project Dependency + Begin Project Dependency + Project_Dep_Name dialog + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency + Begin Project Dependency + Project_Dep_Name music + End Project Dependency +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "midisqlib"=..\MIDISEQ\midisqlib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "music"=..\music\music.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "printman"=..\printman\Printman.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\statbar\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\thread\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "toolbar"=..\toolbar\Toolbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/guitar/backup/20030731/guitar.h b/guitar/backup/20030731/guitar.h new file mode 100644 index 0000000..8f91419 --- /dev/null +++ b/guitar/backup/20030731/guitar.h @@ -0,0 +1,1088 @@ +#ifndef _GUITAR_GUITAR_H_ +#define _GUITAR_GUITAR_H_ + +#include "windows.h" + +// +#define IDC_STATIC -1 + +// CURSOR +#define HARROW 1000 + +// LICENSE DIALOG +#define LICENSE_DIALOG_LICENSE 1077 +#define LICENSE_DIALOG_REQUEST_LICENSE 1076 + +// ENTER CHORD DIALOG +#define ENTERCHORD_EDIT 1082 + +// MIDIDIALOG +#define MIDI_TRACK1 1042 +#define MIDI_TRACK2 1043 +#define MIDI_TRACK3 1044 +#define MIDI_TRACK4 1045 +#define MIDI_TRACK5 1046 +#define MIDI_TRACK6 1047 +#define MIDI_TRACK7 1048 +#define MIDI_TRACK8 1049 +#define MIDI_TRACK9 1050 +#define MIDI_TRACK10 1051 +#define MIDI_TRACK11 1052 +#define MIDI_TRACK12 1053 +#define MIDI_TRACK13 1054 +#define MIDI_TRACK14 1055 +#define MIDI_TRACK15 1056 +#define MIDI_TRACK16 1057 +#define MIDI_EVENTS_TRACK1 1060 +#define MIDI_EVENTS_TRACK2 1061 +#define MIDI_EVENTS_TRACK3 1062 +#define MIDI_EVENTS_TRACK4 1063 +#define MIDI_EVENTS_TRACK5 1064 +#define MIDI_EVENTS_TRACK6 1065 +#define MIDI_EVENTS_TRACK7 1066 +#define MIDI_EVENTS_TRACK8 1067 +#define MIDI_EVENTS_TRACK9 1068 +#define MIDI_EVENTS_TRACK10 1069 +#define MIDI_EVENTS_TRACK11 1070 +#define MIDI_EVENTS_TRACK12 1071 +#define MIDI_EVENTS_TRACK13 1072 +#define MIDI_EVENTS_TRACK14 1073 +#define MIDI_EVENTS_TRACK15 1074 +#define MIDI_EVENTS_TRACK16 1075 + +// FRETENTRY DIALOG +#define FRETENTRY_FRET 1037 +#define FRETENTRY_ACTION 1038 +#define FRETENTRY_STRING 1039 +#define FRETENTRY_DURATION 1040 + +// FOR SCALES DIALOG +#define SCALEDLG_LIST 1024 +#define SCALEDLG_ROOT 1025 +#define SCALEDLG_SPIN 1026 +#define SCALEDLG_MUTE 1027 + + +// FOR RANGE EDIT DIALOG +#define RANGEEDIT_NAME 1016 +#define RANGEEDIT_BEGIN 1017 +#define RANGEEDIT_END 1018 + +// FOR RANGE DIALOG +#define RANGE_LIST 1000 +#define RANGE_INSERT 1022 +#define RANGE_DELETE 1023 + +// FOR SETTINGS DIALOG +#define SETTINGS_MICROSECSPERQTRNOTE 1011 +#define SETTINGS_DEFAULTS 1012 +#define SETTINGS_SHOWACTION 1013 +#define SETTINGS_SHOWNOTES 1014 +#define SETTINGS_ACOUSTICGRANDPIANO 1015 +#define SETTINGS_BRIGHTACOUSTICPIANO 1016 +#define SETTINGS_ELECTRICGRANDPIANO 1017 +#define SETTINGS_ACOUSTICNYLON 1018 +#define SETTINGS_ACOUSTICSTEEL 1019 +#define SETTINGS_JAZZELECTRIC 1020 +#define SETTINGS_CLEANELECTRIC 1021 +#define SETTINGS_MUTEDELECTRIC 1022 +#define SETTINGS_MIDIOUT 1024 + +// FOR CHORD DIALOG +#define CHORDS_LIST 1000 +#define CHORDS_COUNT 1009 + +// FOR TAB ENTRY DIALOG +#define TABENTRY_LIST 1004 +#define TABENTRY_NOTETYPE 1005 +#define TABENTRY_REMAINDER 1006 + +#define MENU_FILE_OPEN 10000 +#define MENU_FILE_EXIT 10001 +#define MENU_FILE_NEW 10002 +#define MENU_FILE_SAVE 10003 +#define MENU_FILE_SAVEAS 10004 +#define MENU_FILE_CLOSE 10005 +#define MENU_FILE_PRINT 10006 +#define MENU_FILE_IMPORT 10007 +#define MENU_FILE_MIDI_IMPORT 10008 + +#define MENU_TABLATURE_PLAY 10500 +#define MENU_TABLATURE_PLAYTOEND 10501 +#define MENU_TABLATURE_PLAYREPEATED 10502 +#define MENU_TABLATURE_PLAYRANGE 10503 +#define MENU_TABLATURE_PLAYRANGE_REPEATED 10504 +#define MENU_TABLATURE_STOP 10505 +#define MENU_TABLATURE_ENTRYPROPS 10506 +#define MENU_TABLATURE_SETSTARTRANGE 10507 +#define MENU_TABLATURE_SETENDRANGE 10508 + +#define MENU_OPTIONS_INCREASETEMPO 10601 +#define MENU_OPTIONS_DECREASETEMPO 10602 +#define MENU_OPTIONS_SETTINGS 10603 + +#define MENU_VIEW_FRETBOARD 10700 + +#define MENU_CHORDS_LOOKUP 10800 +#define MENU_CHORDS_ENTER 10801 + +#define MENU_SCALES_SHOW 10900 + +#define MENU_FRETBOARD_CLEAR 11000 +#define MENU_FRETBOARD_SHOWALLPOSITIONS 11001 + +#define MENU_EDIT_CUT 12000 +#define MENU_EDIT_COPY 12001 +#define MENU_EDIT_PASTE 12002 +#define MENU_EDIT_RANGES 12003 + +#define MENU_HELP_INDEX 12100 +#define MENU_HELP_APPLY_LICENSE 12101 +#define MENU_HELP_ABOUT 12102 + +#define TABACCELERATORS 10000 + +// STRINGS + +#define STRING_NOTITLE 19000 +#define STRING_EDITHINT 19001 +#define STRING_PRJEXTENSION 19002 +#define STRING_PRJALLEXTENSION 19003 +#define STRING_TABEXTENSION 19004 +#define STRING_BROWSERKEY 19005 +#define STRING_BROWSERKEYALT 19006 +#define STRING_BROWSERCOMMAND 19007 +#define STRING_HOST 19008 +#define STRING_HELPPAGE 19009 +#define STRING_MIDIEXTENSION 19010 +#define STRING_PURCHASE_URL 19011 + +#define STRING_TABVIEWWINDOWCLASSNAME 20000 +#define STRING_FRETVIEWWINDOWCLASSNAME 20001 +#define STRING_REGISTRYKEYNAME 20002 +#define STRING_HISTORYKEYNAME 20003 +#define STRING_HISTORYKEYSHORTNAME 20004 +#define STRING_SETTINGSKEYNAME 20005 +#define STRING_SETTINGSINSTRUMENT 20006 +#define STRING_SETTINGSACTION 20007 +#define STRING_SETTINGSNOTELETTERS 20008 +#define STRING_SETTINGSMICROSECONDSPERQUARTERNOTE 20009 +#define STRING_REGISTRATIONKEYNAME 20010 +#define STRING_SETTINGSLICENSE 20011 +#define STRING_SETTINGSMIDIOUTPUT 20012 + + +// chord definitions + +#define STRING_21000 21000 +#define STRING_21001 21001 +#define STRING_21002 21002 +#define STRING_21003 21003 +#define STRING_21004 21004 +#define STRING_21005 21005 +#define STRING_21006 21006 +#define STRING_21007 21007 +#define STRING_21008 21008 +#define STRING_21009 21009 +#define STRING_21010 21010 +#define STRING_21011 21011 +#define STRING_21012 21012 +#define STRING_21013 21013 +#define STRING_21014 21014 +#define STRING_21015 21015 +#define STRING_21016 21016 +#define STRING_21017 21017 +#define STRING_21018 21018 +#define STRING_21019 21019 +#define STRING_21020 21020 +#define STRING_21021 21021 +#define STRING_21022 21022 +#define STRING_21023 21023 +#define STRING_21024 21024 +#define STRING_21025 21025 +#define STRING_21026 21026 +#define STRING_21027 21027 +#define STRING_21028 21028 +#define STRING_21029 21029 +#define STRING_21030 21030 +#define STRING_21031 21031 +#define STRING_21032 21032 +#define STRING_21033 21033 +#define STRING_21034 21034 +#define STRING_21035 21035 +#define STRING_21036 21036 +#define STRING_21037 21037 +#define STRING_21038 21038 +#define STRING_21039 21039 +#define STRING_21040 21040 +#define STRING_21041 21041 +#define STRING_21042 21042 +#define STRING_21043 21043 +#define STRING_21044 21044 +#define STRING_21045 21045 +#define STRING_21046 21046 +#define STRING_21047 21047 +#define STRING_21048 21048 +#define STRING_21049 21049 +#define STRING_21050 21050 +#define STRING_21051 21051 +#define STRING_21052 21052 +#define STRING_21053 21053 +#define STRING_21054 21054 +#define STRING_21055 21055 +#define STRING_21056 21056 +#define STRING_21057 21057 +#define STRING_21058 21058 +#define STRING_21059 21059 +#define STRING_21060 21060 +#define STRING_21061 21061 +#define STRING_21062 21062 +#define STRING_21063 21063 +#define STRING_21064 21064 +#define STRING_21065 21065 +#define STRING_21066 21066 +#define STRING_21067 21067 +#define STRING_21068 21068 +#define STRING_21069 21069 +#define STRING_21070 21070 +#define STRING_21071 21071 +#define STRING_21072 21072 +#define STRING_21073 21073 +#define STRING_21074 21074 +#define STRING_21075 21075 +#define STRING_21076 21076 +#define STRING_21077 21077 +#define STRING_21078 21078 +#define STRING_21079 21079 +#define STRING_21080 21080 +#define STRING_21081 21081 +#define STRING_21082 21082 +#define STRING_21083 21083 +#define STRING_21084 21084 +#define STRING_21085 21085 +#define STRING_21086 21086 +#define STRING_21087 21087 +#define STRING_21088 21088 +#define STRING_21089 21089 +#define STRING_21090 21090 +#define STRING_21091 21091 +#define STRING_21092 21092 +#define STRING_21093 21093 +#define STRING_21094 21094 +#define STRING_21095 21095 +#define STRING_21096 21096 +#define STRING_21097 21097 +#define STRING_21098 21098 +#define STRING_21099 21099 +#define STRING_21100 21100 +#define STRING_21101 21101 +#define STRING_21102 21102 +#define STRING_21103 21103 +#define STRING_21104 21104 +#define STRING_21105 21105 +#define STRING_21106 21106 +#define STRING_21107 21107 +#define STRING_21108 21108 +#define STRING_21109 21109 +#define STRING_21110 21110 +#define STRING_21111 21111 +#define STRING_21112 21112 +#define STRING_21113 21113 +#define STRING_21114 21114 +#define STRING_21115 21115 +#define STRING_21116 21116 +#define STRING_21117 21117 +#define STRING_21118 21118 +#define STRING_21119 21119 +#define STRING_21120 21120 +#define STRING_21121 21121 +#define STRING_21122 21122 +#define STRING_21123 21123 +#define STRING_21124 21124 +#define STRING_21125 21125 +#define STRING_21126 21126 +#define STRING_21127 21127 +#define STRING_21128 21128 +#define STRING_21129 21129 +#define STRING_21130 21130 +#define STRING_21131 21131 +#define STRING_21132 21132 +#define STRING_21133 21133 +#define STRING_21134 21134 +#define STRING_21135 21135 +#define STRING_21136 21136 +#define STRING_21137 21137 +#define STRING_21138 21138 +#define STRING_21139 21139 +#define STRING_21140 21140 +#define STRING_21141 21141 +#define STRING_21142 21142 +#define STRING_21143 21143 +#define STRING_21144 21144 +#define STRING_21145 21145 +#define STRING_21146 21146 +#define STRING_21147 21147 +#define STRING_21148 21148 +#define STRING_21149 21149 +#define STRING_21150 21150 +#define STRING_21151 21151 +#define STRING_21152 21152 +#define STRING_21153 21153 +#define STRING_21154 21154 +#define STRING_21155 21155 +#define STRING_21156 21156 +#define STRING_21157 21157 +#define STRING_21158 21158 +#define STRING_21159 21159 +#define STRING_21160 21160 +#define STRING_21161 21161 +#define STRING_21162 21162 +#define STRING_21163 21163 +#define STRING_21164 21164 +#define STRING_21165 21165 +#define STRING_21166 21166 +#define STRING_21167 21167 +#define STRING_21168 21168 +#define STRING_21169 21169 +#define STRING_21170 21170 +#define STRING_21171 21171 +#define STRING_21172 21172 +#define STRING_21173 21173 +#define STRING_21174 21174 +#define STRING_21175 21175 +#define STRING_21176 21176 +#define STRING_21177 21177 +#define STRING_21178 21178 +#define STRING_21179 21179 +#define STRING_21180 21180 +#define STRING_21181 21181 +#define STRING_21182 21182 +#define STRING_21183 21183 +#define STRING_21184 21184 +#define STRING_21185 21185 +#define STRING_21186 21186 +#define STRING_21187 21187 +#define STRING_21188 21188 +#define STRING_21189 21189 +#define STRING_21190 21190 +#define STRING_21191 21191 +#define STRING_21192 21192 +#define STRING_21193 21193 +#define STRING_21194 21194 +#define STRING_21195 21195 +#define STRING_21196 21196 +#define STRING_21197 21197 +#define STRING_21198 21198 +#define STRING_21199 21199 +#define STRING_21200 21200 +#define STRING_21201 21201 +#define STRING_21202 21202 +#define STRING_21203 21203 +#define STRING_21204 21204 +#define STRING_21205 21205 +#define STRING_21206 21206 +#define STRING_21207 21207 +#define STRING_21208 21208 +#define STRING_21209 21209 +#define STRING_21210 21210 +#define STRING_21211 21211 +#define STRING_21212 21212 +#define STRING_21213 21213 +#define STRING_21214 21214 +#define STRING_21215 21215 +#define STRING_21216 21216 +#define STRING_21217 21217 +#define STRING_21218 21218 +#define STRING_21219 21219 +#define STRING_21220 21220 +#define STRING_21221 21221 +#define STRING_21222 21222 +#define STRING_21223 21223 +#define STRING_21224 21224 +#define STRING_21225 21225 +#define STRING_21226 21226 +#define STRING_21227 21227 +#define STRING_21228 21228 +#define STRING_21229 21229 +#define STRING_21230 21230 +#define STRING_21231 21231 +#define STRING_21232 21232 +#define STRING_21233 21233 +#define STRING_21234 21234 +#define STRING_21235 21235 +#define STRING_21236 21236 +#define STRING_21237 21237 +#define STRING_21238 21238 +#define STRING_21239 21239 +#define STRING_21240 21240 +#define STRING_21241 21241 +#define STRING_21242 21242 +#define STRING_21243 21243 +#define STRING_21244 21244 +#define STRING_21245 21245 +#define STRING_21246 21246 +#define STRING_21247 21247 +#define STRING_21248 21248 +#define STRING_21249 21249 +#define STRING_21250 21250 +#define STRING_21251 21251 +#define STRING_21252 21252 +#define STRING_21253 21253 +#define STRING_21254 21254 +#define STRING_21255 21255 +#define STRING_21256 21256 +#define STRING_21257 21257 +#define STRING_21258 21258 +#define STRING_21259 21259 +#define STRING_21260 21260 +#define STRING_21261 21261 +#define STRING_21262 21262 +#define STRING_21263 21263 +#define STRING_21264 21264 +#define STRING_21265 21265 +#define STRING_21266 21266 +#define STRING_21267 21267 +#define STRING_21268 21268 +#define STRING_21269 21269 +#define STRING_21270 21270 +#define STRING_21271 21271 +#define STRING_21272 21272 +#define STRING_21273 21273 +#define STRING_21274 21274 +#define STRING_21275 21275 +#define STRING_21276 21276 +#define STRING_21277 21277 +#define STRING_21278 21278 +#define STRING_21279 21279 +#define STRING_21280 21280 +#define STRING_21281 21281 +#define STRING_21282 21282 +#define STRING_21283 21283 +#define STRING_21284 21284 +#define STRING_21285 21285 +#define STRING_21286 21286 +#define STRING_21287 21287 +#define STRING_21288 21288 +#define STRING_21289 21289 +#define STRING_21290 21290 +#define STRING_21291 21291 +#define STRING_21292 21292 +#define STRING_21293 21293 +#define STRING_21294 21294 +#define STRING_21295 21295 +#define STRING_21296 21296 +#define STRING_21297 21297 +#define STRING_21298 21298 +#define STRING_21299 21299 +#define STRING_21300 21300 +#define STRING_21301 21301 +#define STRING_21302 21302 +#define STRING_21303 21303 +#define STRING_21304 21304 +#define STRING_21305 21305 +#define STRING_21306 21306 +#define STRING_21307 21307 +#define STRING_21308 21308 +#define STRING_21309 21309 +#define STRING_21310 21310 +#define STRING_21311 21311 +#define STRING_21312 21312 +#define STRING_21313 21313 +#define STRING_21314 21314 +#define STRING_21315 21315 +#define STRING_21316 21316 +#define STRING_21317 21317 +#define STRING_21318 21318 +#define STRING_21319 21319 +#define STRING_21320 21320 +#define STRING_21321 21321 +#define STRING_21322 21322 +#define STRING_21323 21323 +#define STRING_21324 21324 +#define STRING_21325 21325 +#define STRING_21326 21326 +#define STRING_21327 21327 +#define STRING_21328 21328 +#define STRING_21329 21329 +#define STRING_21330 21330 +#define STRING_21331 21331 +#define STRING_21332 21332 +#define STRING_21333 21333 +#define STRING_21334 21334 +#define STRING_21335 21335 +#define STRING_21336 21336 +#define STRING_21337 21337 +#define STRING_21338 21338 +#define STRING_21339 21339 +#define STRING_21340 21340 +#define STRING_21341 21341 +#define STRING_21342 21342 +#define STRING_21343 21343 +#define STRING_21344 21344 +#define STRING_21345 21345 +#define STRING_21346 21346 +#define STRING_21347 21347 +#define STRING_21348 21348 +#define STRING_21349 21349 +#define STRING_21350 21350 +#define STRING_21351 21351 +#define STRING_21352 21352 +#define STRING_21353 21353 +#define STRING_21354 21354 +#define STRING_21355 21355 +#define STRING_21356 21356 +#define STRING_21357 21357 +#define STRING_21358 21358 +#define STRING_21359 21359 +#define STRING_21360 21360 +#define STRING_21361 21361 +#define STRING_21362 21362 +#define STRING_21363 21363 +#define STRING_21364 21364 +#define STRING_21365 21365 +#define STRING_21366 21366 +#define STRING_21367 21367 +#define STRING_21368 21368 +#define STRING_21369 21369 +#define STRING_21370 21370 +#define STRING_21371 21371 +#define STRING_21372 21372 +#define STRING_21373 21373 +#define STRING_21374 21374 +#define STRING_21375 21375 +#define STRING_21376 21376 +#define STRING_21377 21377 +#define STRING_21378 21378 +#define STRING_21379 21379 +#define STRING_21380 21380 +#define STRING_21381 21381 +#define STRING_21382 21382 +#define STRING_21383 21383 +#define STRING_21384 21384 +#define STRING_21385 21385 +#define STRING_21386 21386 +#define STRING_21387 21387 +#define STRING_21388 21388 +#define STRING_21389 21389 +#define STRING_21390 21390 +#define STRING_21391 21391 +#define STRING_21392 21392 +#define STRING_21393 21393 +#define STRING_21394 21394 +#define STRING_21395 21395 +#define STRING_21396 21396 +#define STRING_21397 21397 +#define STRING_21398 21398 +#define STRING_21399 21399 +#define STRING_21400 21400 +#define STRING_21401 21401 +#define STRING_21402 21402 +#define STRING_21403 21403 +#define STRING_21404 21404 +#define STRING_21405 21405 +#define STRING_21406 21406 +#define STRING_21407 21407 +#define STRING_21408 21408 +#define STRING_21409 21409 +#define STRING_21410 21410 +#define STRING_21411 21411 +#define STRING_21412 21412 +#define STRING_21413 21413 +#define STRING_21414 21414 +#define STRING_21415 21415 +#define STRING_21416 21416 +#define STRING_21417 21417 +#define STRING_21418 21418 +#define STRING_21419 21419 +#define STRING_21420 21420 +#define STRING_21421 21421 +#define STRING_21422 21422 +#define STRING_21423 21423 +#define STRING_21424 21424 +#define STRING_21425 21425 +#define STRING_21426 21426 +#define STRING_21427 21427 +#define STRING_21428 21428 +#define STRING_21429 21429 +#define STRING_21430 21430 +#define STRING_21431 21431 +#define STRING_21432 21432 +#define STRING_21433 21433 +#define STRING_21434 21434 +#define STRING_21435 21435 +#define STRING_21436 21436 +#define STRING_21437 21437 +#define STRING_21438 21438 +#define STRING_21439 21439 +#define STRING_21440 21440 +#define STRING_21441 21441 +#define STRING_21442 21442 +#define STRING_21443 21443 +#define STRING_21444 21444 +#define STRING_21445 21445 +#define STRING_21446 21446 +#define STRING_21447 21447 +#define STRING_21448 21448 +#define STRING_21449 21449 +#define STRING_21450 21450 +#define STRING_21451 21451 +#define STRING_21452 21452 +#define STRING_21453 21453 +#define STRING_21454 21454 +#define STRING_21455 21455 +#define STRING_21456 21456 +#define STRING_21457 21457 +#define STRING_21458 21458 +#define STRING_21459 21459 +#define STRING_21460 21460 +#define STRING_21461 21461 +#define STRING_21462 21462 +#define STRING_21463 21463 +#define STRING_21464 21464 +#define STRING_21465 21465 +#define STRING_21466 21466 +#define STRING_21467 21467 +#define STRING_21468 21468 +#define STRING_21469 21469 +#define STRING_21470 21470 +#define STRING_21471 21471 +#define STRING_21472 21472 +#define STRING_21473 21473 +#define STRING_21474 21474 +#define STRING_21475 21475 +#define STRING_21476 21476 +#define STRING_21477 21477 +#define STRING_21478 21478 +#define STRING_21479 21479 +#define STRING_21480 21480 +#define STRING_21481 21481 +#define STRING_21482 21482 +#define STRING_21483 21483 +#define STRING_21484 21484 +#define STRING_21485 21485 +#define STRING_21486 21486 +#define STRING_21487 21487 +#define STRING_21488 21488 +#define STRING_21489 21489 +#define STRING_21490 21490 +#define STRING_21491 21491 +#define STRING_21492 21492 +#define STRING_21493 21493 +#define STRING_21494 21494 +#define STRING_21495 21495 +#define STRING_21496 21496 +#define STRING_21497 21497 +#define STRING_21498 21498 +#define STRING_21499 21499 +#define STRING_21500 21500 +#define STRING_21501 21501 +#define STRING_21502 21502 +#define STRING_21503 21503 +#define STRING_21504 21504 +#define STRING_21505 21505 +#define STRING_21506 21506 +#define STRING_21507 21507 +#define STRING_21508 21508 +#define STRING_21509 21509 +#define STRING_21510 21510 +#define STRING_21511 21511 +#define STRING_21512 21512 +#define STRING_21513 21513 +#define STRING_21514 21514 +#define STRING_21515 21515 +#define STRING_21516 21516 +#define STRING_21517 21517 +#define STRING_21518 21518 +#define STRING_21519 21519 +#define STRING_21520 21520 +#define STRING_21521 21521 +#define STRING_21522 21522 +#define STRING_21523 21523 +#define STRING_21524 21524 +#define STRING_21525 21525 +#define STRING_21526 21526 +#define STRING_21527 21527 +#define STRING_21528 21528 +#define STRING_21529 21529 +#define STRING_21530 21530 +#define STRING_21531 21531 +#define STRING_21532 21532 +#define STRING_21533 21533 +#define STRING_21534 21534 +#define STRING_21535 21535 +#define STRING_21536 21536 +#define STRING_21537 21537 +#define STRING_21538 21538 +#define STRING_21539 21539 +#define STRING_21540 21540 +#define STRING_21541 21541 +#define STRING_21542 21542 +#define STRING_21543 21543 +#define STRING_21544 21544 +#define STRING_21545 21545 +#define STRING_21546 21546 +#define STRING_21547 21547 +#define STRING_21548 21548 +#define STRING_21549 21549 +#define STRING_21550 21550 +#define STRING_21551 21551 +#define STRING_21552 21552 +#define STRING_21553 21553 +#define STRING_21554 21554 +#define STRING_21555 21555 +#define STRING_21556 21556 +#define STRING_21557 21557 +#define STRING_21558 21558 +#define STRING_21559 21559 +#define STRING_21560 21560 +#define STRING_21561 21561 +#define STRING_21562 21562 +#define STRING_21563 21563 +#define STRING_21564 21564 +#define STRING_21565 21565 +#define STRING_21566 21566 +#define STRING_21567 21567 +#define STRING_21568 21568 +#define STRING_21569 21569 +#define STRING_21570 21570 +#define STRING_21571 21571 +#define STRING_21572 21572 +#define STRING_21573 21573 +#define STRING_21574 21574 +#define STRING_21575 21575 +#define STRING_21576 21576 +#define STRING_21577 21577 +#define STRING_21578 21578 +#define STRING_21579 21579 +#define STRING_21580 21580 +#define STRING_21581 21581 +#define STRING_21582 21582 +#define STRING_21583 21583 +#define STRING_21584 21584 +#define STRING_21585 21585 +#define STRING_21586 21586 +#define STRING_21587 21587 +#define STRING_21588 21588 +#define STRING_21589 21589 +#define STRING_21590 21590 +#define STRING_21591 21591 +#define STRING_21592 21592 +#define STRING_21593 21593 +#define STRING_21594 21594 +#define STRING_21595 21595 +#define STRING_21596 21596 +#define STRING_21597 21597 +#define STRING_21598 21598 +#define STRING_21599 21599 +#define STRING_21600 21600 +#define STRING_21601 21601 +#define STRING_21602 21602 +#define STRING_21603 21603 +#define STRING_21604 21604 +#define STRING_21605 21605 +#define STRING_21606 21606 +#define STRING_21607 21607 +#define STRING_21608 21608 +#define STRING_21609 21609 +#define STRING_21610 21610 +#define STRING_21611 21611 +#define STRING_21612 21612 +#define STRING_21613 21613 +#define STRING_21614 21614 +#define STRING_21615 21615 +#define STRING_21616 21616 +#define STRING_21617 21617 +#define STRING_21618 21618 +#define STRING_21619 21619 +#define STRING_21620 21620 +#define STRING_21621 21621 +#define STRING_21622 21622 +#define STRING_21623 21623 +#define STRING_21624 21624 +#define STRING_21625 21625 +#define STRING_21626 21626 +#define STRING_21627 21627 +#define STRING_21628 21628 +#define STRING_21629 21629 +#define STRING_21630 21630 +#define STRING_21631 21631 +#define STRING_21632 21632 +#define STRING_21633 21633 +#define STRING_21634 21634 +#define STRING_21635 21635 +#define STRING_21636 21636 +#define STRING_21637 21637 +#define STRING_21638 21638 +#define STRING_21639 21639 +#define STRING_21640 21640 +#define STRING_21641 21641 +#define STRING_21642 21642 +#define STRING_21643 21643 +#define STRING_21644 21644 +#define STRING_21645 21645 +#define STRING_21646 21646 +#define STRING_21647 21647 +#define STRING_21648 21648 +#define STRING_21649 21649 +#define STRING_21650 21650 +#define STRING_21651 21651 +#define STRING_21652 21652 +#define STRING_21653 21653 +#define STRING_21654 21654 +#define STRING_21655 21655 +#define STRING_21656 21656 +#define STRING_21657 21657 +#define STRING_21658 21658 +#define STRING_21659 21659 +#define STRING_21660 21660 +#define STRING_21661 21661 +#define STRING_21662 21662 +#define STRING_21663 21663 +#define STRING_21664 21664 +#define STRING_21665 21665 +#define STRING_21666 21666 +#define STRING_21667 21667 +#define STRING_21668 21668 +#define STRING_21669 21669 +#define STRING_21670 21670 +#define STRING_21671 21671 +#define STRING_21672 21672 +#define STRING_21673 21673 +#define STRING_21674 21674 +#define STRING_21675 21675 +#define STRING_21676 21676 +#define STRING_21677 21677 +#define STRING_21678 21678 +#define STRING_21679 21679 +#define STRING_21680 21680 +#define STRING_21681 21681 +#define STRING_21682 21682 +#define STRING_21683 21683 +#define STRING_21684 21684 +#define STRING_21685 21685 +#define STRING_21686 21686 +#define STRING_21687 21687 +#define STRING_21688 21688 +#define STRING_21689 21689 +#define STRING_21690 21690 +#define STRING_21691 21691 +#define STRING_21692 21692 +#define STRING_21693 21693 +#define STRING_21694 21694 +#define STRING_21695 21695 +#define STRING_21696 21696 +#define STRING_21697 21697 +#define STRING_21698 21698 +#define STRING_21699 21699 +#define STRING_21700 21700 +#define STRING_21701 21701 +#define STRING_21702 21702 +#define STRING_21703 21703 +#define STRING_21704 21704 +#define STRING_21705 21705 +#define STRING_21706 21706 +#define STRING_21707 21707 +#define STRING_21708 21708 +#define STRING_21709 21709 +#define STRING_21710 21710 +#define STRING_21711 21711 +#define STRING_21712 21712 +#define STRING_21713 21713 +#define STRING_21714 21714 +#define STRING_21715 21715 +#define STRING_21716 21716 +#define STRING_21717 21717 +#define STRING_21718 21718 +#define STRING_21719 21719 +#define STRING_21720 21720 +#define STRING_21721 21721 +#define STRING_21722 21722 +#define STRING_21723 21723 +#define STRING_21724 21724 +#define STRING_21725 21725 +#define STRING_21726 21726 +#define STRING_21727 21727 +#define STRING_21728 21728 +#define STRING_21729 21729 +#define STRING_21730 21730 +#define STRING_21731 21731 +#define STRING_21732 21732 +#define STRING_21733 21733 +#define STRING_21734 21734 +#define STRING_21735 21735 +#define STRING_21736 21736 +#define STRING_21737 21737 +#define STRING_21738 21738 +#define STRING_21739 21739 +#define STRING_21740 21740 +#define STRING_21741 21741 +#define STRING_21742 21742 +#define STRING_21743 21743 +#define STRING_21744 21744 +#define STRING_21745 21745 +#define STRING_21746 21746 +#define STRING_21747 21747 +#define STRING_21748 21748 +#define STRING_21749 21749 +#define STRING_21750 21750 +#define STRING_21751 21751 +#define STRING_21752 21752 +#define STRING_21753 21753 +#define STRING_21754 21754 +#define STRING_21755 21755 +#define STRING_21756 21756 +#define STRING_21757 21757 +#define STRING_21758 21758 +#define STRING_21759 21759 +#define STRING_21760 21760 +#define STRING_21761 21761 +#define STRING_21762 21762 +#define STRING_21763 21763 +#define STRING_21764 21764 +#define STRING_21765 21765 +#define STRING_21766 21766 +#define STRING_21767 21767 +#define STRING_21768 21768 +#define STRING_21769 21769 +#define STRING_21770 21770 +#define STRING_21771 21771 +#define STRING_21772 21772 +#define STRING_21773 21773 +#define STRING_21774 21774 +#define STRING_21775 21775 +#define STRING_21776 21776 +#define STRING_21777 21777 +#define STRING_21778 21778 +#define STRING_21779 21779 +#define STRING_21780 21780 +#define STRING_21781 21781 +#define STRING_21782 21782 +#define STRING_21783 21783 +#define STRING_21784 21784 +#define STRING_21785 21785 +#define STRING_21786 21786 +#define STRING_21787 21787 +#define STRING_21788 21788 +#define STRING_21789 21789 +#define STRING_21790 21790 +#define STRING_21791 21791 +#define STRING_21792 21792 +#define STRING_21793 21793 +#define STRING_21794 21794 +#define STRING_21795 21795 +#define STRING_21796 21796 +#define STRING_21797 21797 +#define STRING_21798 21798 +#define STRING_21799 21799 +#define STRING_21800 21800 +#define STRING_21801 21801 +#define STRING_21802 21802 +#define STRING_21803 21803 +#define STRING_21804 21804 +#define STRING_21805 21805 +#define STRING_21806 21806 +#define STRING_21807 21807 +#define STRING_21808 21808 +#define STRING_21809 21809 +#define STRING_21810 21810 +#define STRING_21811 21811 +#define STRING_21812 21812 +#define STRING_21813 21813 +#define STRING_21814 21814 +#define STRING_21815 21815 +#define STRING_21816 21816 +#define STRING_21817 21817 +#define STRING_21818 21818 +#define STRING_21819 21819 +#define STRING_21820 21820 +#define STRING_21821 21821 +#define STRING_21822 21822 +#define STRING_21823 21823 +#define STRING_21824 21824 +#define STRING_21825 21825 +#define STRING_21826 21826 +#define STRING_21827 21827 +#define STRING_21828 21828 +#define STRING_21829 21829 +#define STRING_21830 21830 +#define STRING_21831 21831 +#define STRING_21832 21832 +#define STRING_21833 21833 +#define STRING_21834 21834 +#define STRING_21835 21835 +#define STRING_21836 21836 +#define STRING_21837 21837 +#define STRING_21838 21838 +#define STRING_21839 21839 +#define STRING_21840 21840 +#define STRING_21841 21841 +#define STRING_21842 21842 +#define STRING_21843 21843 +#define STRING_21844 21844 +#define STRING_21845 21845 +#define STRING_21846 21846 +#define STRING_21847 21847 +#define STRING_21848 21848 +#define STRING_21849 21849 +#define STRING_21850 21850 +#define STRING_21851 21851 +#define STRING_21852 21852 +#define STRING_21853 21853 +#define STRING_21854 21854 +#define STRING_21855 21855 +#define STRING_21856 21856 +#define STRING_21857 21857 +#define STRING_21858 21858 +#define STRING_21859 21859 +#define STRING_21860 21860 +#define STRING_21861 21861 +#define STRING_21862 21862 +#define STRING_21863 21863 +#define STRING_21864 21864 +#define STRING_21865 21865 +#define STRING_21866 21866 +#define STRING_21867 21867 +#define STRING_21868 21868 +#define STRING_21869 21869 +#define STRING_21870 21870 +#define STRING_21871 21871 +#define STRING_21872 21872 +#define STRING_21873 21873 +#define STRING_21874 21874 +#define STRING_21875 21875 +#define STRING_21876 21876 +#define STRING_21877 21877 +#define STRING_21878 21878 +#define STRING_21879 21879 +#define STRING_21880 21880 +#define STRING_21881 21881 +#define STRING_21882 21882 +#define STRING_21883 21883 +#define STRING_21884 21884 +#define STRING_21885 21885 +#define STRING_21886 21886 +#define STRING_21887 21887 +#define STRING_21888 21888 +#define STRING_21889 21889 +#define STRING_21890 21890 +#define STRING_21891 21891 +#define STRING_21892 21892 +#define STRING_21893 21893 +#define STRING_21894 21894 +#define STRING_21895 21895 +#define STRING_21896 21896 +#define STRING_21897 21897 +#define STRING_21898 21898 +#define STRING_21899 21899 +#define STRING_21900 21900 +#define STRING_21901 21901 +#define STRING_21902 21902 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#endif diff --git a/guitar/backup/20030731/guitar.hpp b/guitar/backup/20030731/guitar.hpp new file mode 100644 index 0000000..6fe0d82 --- /dev/null +++ b/guitar/backup/20030731/guitar.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_GUITAR_HPP_ +#define _GUITAR_GUITAR_HPP_ +#ifndef _GUITAR_GUITAR_H_ +#include +#endif +#endif diff --git a/guitar/backup/20030731/guitar.plg b/guitar/backup/20030731/guitar.plg new file mode 100644 index 0000000..8fc2f8d --- /dev/null +++ b/guitar/backup/20030731/guitar.plg @@ -0,0 +1,88 @@ + + +
+

Build Log

+

+--------------------Configuration: guitar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPA1.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/guitar.pch" /YX"windows.hpp" /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"D:\work\guitar\ChordBuilderDialog.cpp" +"D:\work\guitar\ChordDlg.cpp" +"D:\work\guitar\mainfrm.cpp" +"D:\work\guitar\ScaleDlg.cpp" +"D:\work\guitar\tabpage.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPA1.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPA2.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib comctl32.lib version.lib /nologo /subsystem:windows /incremental:yes /pdb:"msvcobj/TabMaster.pdb" /debug /machine:I386 /nodefaultlib:"LIBCMT" /out:"msvcobj/TabMaster.exe" /pdbtype:sept +.\msvcobj\BrowserHelper.obj +.\msvcobj\ChordBuilderDialog.obj +.\msvcobj\ChordDlg.obj +.\msvcobj\Fingering.obj +.\msvcobj\Fretboard.obj +.\msvcobj\FretDlg.obj +.\msvcobj\FretViewWnd.obj +.\msvcobj\GlobalDefs.obj +.\msvcobj\GUIFretboard.obj +.\msvcobj\license.obj +.\msvcobj\LicenseDialog.obj +.\msvcobj\LineParser.obj +.\msvcobj\main.obj +.\msvcobj\mainfrm.obj +.\msvcobj\MIDIDialog.obj +.\msvcobj\MIDIHelper.obj +.\msvcobj\notepath.obj +.\msvcobj\NoteType.obj +.\msvcobj\RangeDlg.obj +.\msvcobj\RangeEditDlg.obj +.\msvcobj\registration.obj +.\msvcobj\registry.obj +.\msvcobj\requirements.obj +.\msvcobj\ScaleDlg.obj +.\msvcobj\ScrollInfo.obj +.\msvcobj\settingsdlg.obj +.\msvcobj\splash.obj +.\msvcobj\tabdlg.obj +.\msvcobj\TabEntry.obj +.\msvcobj\tablature.obj +.\msvcobj\TabLines.obj +.\msvcobj\tabpage.obj +.\msvcobj\TabView.obj +.\msvcobj\TabWriter.obj +.\msvcobj\Timing.obj +.\msvcobj\Tuning.obj +.\msvcobj\uutool.obj +.\msvcobj\viewwnd.obj +.\msvcobj\guitar.res +\work\exe\mscommon.lib +\work\MIDISEQ\msvcobj\midisq.lib +\work\exe\statbar.lib +\work\exe\msthread.lib +\work\exe\msbsp.lib +\work\exe\toolbar.lib +\work\exe\printman.lib +\work\exe\msdialog.lib +\work\exe\jpgimg.lib +\work\exe\music.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPA2.tmp" +

Output Window

+Compiling... +ChordBuilderDialog.cpp +ChordDlg.cpp +mainfrm.cpp +ScaleDlg.cpp +tabpage.cpp +Linking... + + + +

Results

+TabMaster.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/guitar/backup/20030731/guitar.rc b/guitar/backup/20030731/guitar.rc new file mode 100644 index 0000000..986a6bc --- /dev/null +++ b/guitar/backup/20030731/guitar.rc @@ -0,0 +1,1803 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "guitar\guitar.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +FRETBOARD BITMAP MOVEABLE PURE "FRETBOARD.BMP" +GUITAR BITMAP MOVEABLE PURE "GUITAR.BMP" +HARROW CURSOR MOVEABLE PURE "HARROW.CUR" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP_ICON ICON DISCARDABLE "icon1.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +FRETMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + END + POPUP "Fret&board" + BEGIN + MENUITEM "&Clear", MENU_FRETBOARD_CLEAR + MENUITEM "Show All &Positions", MENU_FRETBOARD_SHOWALLPOSITIONS + + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Close Project", MENU_FILE_CLOSE + MENUITEM "&Import Tablature\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Save\tCtrl+S", MENU_FILE_SAVE + MENUITEM "Save &As...", MENU_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + MENUITEM SEPARATOR + MENUITEM "&Ranges...", MENU_EDIT_RANGES + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Tablature" + BEGIN + MENUITEM "&Play", MENU_TABLATURE_PLAY + MENUITEM "Play (&Repeated)", MENU_TABLATURE_PLAYREPEATED + MENUITEM "Play R&ange...", MENU_TABLATURE_PLAYRANGE + , GRAYED + MENUITEM "Play Rang&e (Repeated)...", MENU_TABLATURE_PLAYRANGE_REPEATED + , GRAYED + MENUITEM "&Stop", MENU_TABLATURE_STOP, GRAYED + END + POPUP "&Options" + BEGIN + MENUITEM "&Increase Tempo", MENU_OPTIONS_INCREASETEMPO + MENUITEM "&Decrease Tempo", MENU_OPTIONS_DECREASETEMPO + MENUITEM SEPARATOR + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""guitar\\guitar.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +MIDIDIALOG DIALOGEX 0, 0, 142, 225 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "MIDI Import" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Ok",IDOK,85,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,85,16,50,14 + CONTROL "Track 1",MIDI_TRACK1,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,18,41,10 + CONTROL "Track 2",MIDI_TRACK2,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,30,41,10 + CONTROL "Track 3",MIDI_TRACK3,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,42,41,10 + CONTROL "Track 4",MIDI_TRACK4,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,54,41,10 + CONTROL "Track 5",MIDI_TRACK5,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,66,41,10 + CONTROL "Track 6",MIDI_TRACK6,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,78,41,10 + CONTROL "Track 7",MIDI_TRACK7,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,90,41,10 + CONTROL "Track 8",MIDI_TRACK8,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,102,41,10 + CONTROL "Track 9",MIDI_TRACK9,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,114,41,10 + CONTROL "Track 10",MIDI_TRACK10,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,126,41,10 + CONTROL "Track 11",MIDI_TRACK11,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,138,41,10 + CONTROL "Track 12",MIDI_TRACK12,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,150,41,10 + CONTROL "Track 13",MIDI_TRACK13,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,162,41,10 + CONTROL "Track 14",MIDI_TRACK14,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,174,41,10 + CONTROL "Track 15",MIDI_TRACK15,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,186,41,10 + CONTROL "Track 16",MIDI_TRACK16,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,198,41,10 + LTEXT "",MIDI_EVENTS_TRACK1,49,18,22,10 + LTEXT "",MIDI_EVENTS_TRACK2,49,30,22,8 + LTEXT "",MIDI_EVENTS_TRACK3,49,42,22,8 + LTEXT "",MIDI_EVENTS_TRACK4,49,54,22,8 + LTEXT "",MIDI_EVENTS_TRACK5,49,66,22,8 + LTEXT "",MIDI_EVENTS_TRACK6,49,78,22,8 + LTEXT "",MIDI_EVENTS_TRACK7,49,90,22,8 + LTEXT "",MIDI_EVENTS_TRACK8,49,102,22,8 + LTEXT "",MIDI_EVENTS_TRACK9,49,114,22,8 + LTEXT "",MIDI_EVENTS_TRACK10,49,126,22,8 + LTEXT "",MIDI_EVENTS_TRACK11,49,138,22,8 + LTEXT "",MIDI_EVENTS_TRACK12,49,150,22,8 + LTEXT "",MIDI_EVENTS_TRACK13,49,162,22,8 + LTEXT "",MIDI_EVENTS_TRACK14,49,174,22,8 + LTEXT "",MIDI_EVENTS_TRACK15,49,186,22,8 + LTEXT "",MIDI_EVENTS_TRACK16,49,198,22,8 + LTEXT "Events",IDC_STATIC,51,4,23,8 +END + +TABDIALOG DIALOGEX 0, 0, 143, 135 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Tab Entry" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX TABENTRY_NOTETYPE,34,22,45,49,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + CONTROL "Apply to remainder of entries.",TABENTRY_REMAINDER, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,42,107,10 + DEFPUSHBUTTON "Apply",IDOK,86,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,86,22,50,14 + LISTBOX TABENTRY_LIST,7,71,129,56,NOT LBS_NOTIFY | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_USETABSTOPS | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "Value:",-1,9,24,21,8 + LTEXT "String",-1,15,57,19,8 + LTEXT "Fret",-1,53,57,13,8 + LTEXT "Note",-1,98,57,16,8 +END + +FRETDIALOG DIALOGEX 0, 0, 155, 73 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Fret Entry" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT FRETENTRY_FRET,38,18,53,14,ES_AUTOHSCROLL + EDITTEXT FRETENTRY_STRING,38,1,53,14,ES_AUTOHSCROLL + COMBOBOX FRETENTRY_ACTION,38,33,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX FRETENTRY_DURATION,38,48,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,104,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,104,16,50,14 + LTEXT "Fret:",-1,4,21,15,8 + LTEXT "String:",-1,4,6,21,8 + LTEXT "Action:",-1,4,35,23,8 + LTEXT "Duration:",-1,1,50,30,8 +END + +CHORDDIALOG DIALOGEX 0, 0, 193, 127 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Dictionary" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + LISTBOX CHORDS_LIST,0,19,184,89,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + LTEXT "",CHORDS_COUNT,3,112,102,8 +END + +CHORDBUILDERDIALOG DIALOGEX 0, 0, 143, 58 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Builder" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT ENTERCHORD_EDIT,9,8,124,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,18,27,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,73,27,50,14 + LTEXT "",CHORDS_COUNT,3,51,102,8 +END + +RANGEDIALOG DIALOGEX 0, 0, 206, 105 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Range Edit" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,1,1,50,14 + LISTBOX RANGE_LIST,10,36,184,57,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Cancel",IDCANCEL,51,1,50,14 + PUSHBUTTON "Insert...",RANGE_INSERT,101,1,50,14 + PUSHBUTTON "Delete",RANGE_DELETE,151,1,50,14 + CTEXT "Name",-1,15,22,64,8 + LTEXT "Start Pos.",-1,92,22,32,8 + LTEXT "End Pos.",-1,149,22,30,8 +END + +RANGEEDITDIALOG DIALOGEX 0, 0, 190, 111 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Edit Item" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT RANGEEDIT_NAME,33,42,150,14,ES_AUTOHSCROLL + EDITTEXT RANGEEDIT_BEGIN,33,61,40,14,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT RANGEEDIT_END,33,80,40,14,ES_AUTOHSCROLL | ES_NUMBER + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,134,17,50,14 + LTEXT "Name:",-1,5,43,22,8 + LTEXT "Start:",-1,5,64,18,8 + LTEXT "End:",-1,5,85,16,8 +END + +SETTINGSDIALOG DIALOGEX 0, 0, 169, 233 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Apply",IDOK,5,2,50,14 + PUSHBUTTON "&Done",IDCANCEL,107,2,50,14 + CONTROL "Display (Bends,Pulls,Slides,Hammers)", + SETTINGS_SHOWACTION,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,9,29,133,10 + LTEXT "Microseconds Per 1/4 note:",IDC_STATIC,7,91,89,8 + EDITTEXT SETTINGS_MICROSECSPERQTRNOTE,101,89,40,14,ES_AUTOHSCROLL | + ES_NUMBER + PUSHBUTTON "Defaults",SETTINGS_DEFAULTS,56,2,50,14 + GROUPBOX "MIDI",IDC_STATIC,3,58,161,164 + GROUPBOX "Global",IDC_STATIC,1,18,161,37 + CONTROL "Acoustic Grand Piano",SETTINGS_ACOUSTICGRANDPIANO, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,110,85,10 + CONTROL "Bright Acoustic Piano",SETTINGS_BRIGHTACOUSTICPIANO, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,124,83,10 + CONTROL "Electric Grand Piano",SETTINGS_ELECTRICGRANDPIANO, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,138,81,10 + CONTROL "Acoustic Nylon Guitar ",SETTINGS_ACOUSTICNYLON,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,152,86,10 + CONTROL "Acoustic Steel Guitar ",SETTINGS_ACOUSTICSTEEL,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,166,84,10 + CONTROL "Jazz Electric Guitar",SETTINGS_JAZZELECTRIC,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,180,76,10 + CONTROL "Clean Electric Guitar",SETTINGS_CLEANELECTRIC,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,194,80,10 + CONTROL "Muted Electric Guitar",SETTINGS_MUTEDELECTRIC,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,208,82,10 + CONTROL "Display note letters on fretboard.",SETTINGS_SHOWNOTES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,42,117,10 + LTEXT "Output",IDC_STATIC,9,71,23,8 + COMBOBOX SETTINGS_MIDIOUT,37,67,121,61,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE +END + +SCALEDIALOG DIALOGEX 0, 0, 148, 153 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Show Scale" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,94,4,50,14 + LISTBOX SCALEDLG_LIST,5,58,135,86,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Ca&ncel",IDCANCEL,94,19,50,14 + LTEXT "Root:",-1,5,30,18,8 + EDITTEXT SCALEDLG_ROOT,25,27,28,14,ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "Spin1",SCALEDLG_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_ARROWKEYS,54,27,10,14 + CONTROL "Mute",SCALEDLG_MUTE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,95,36,48,10 +END + +LICENSEDIALOG DIALOGEX 0, 0, 223, 134 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "License Helper" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT LICENSE_DIALOG_LICENSE,2,81,215,42,ES_MULTILINE | + ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,154,2,65,14 + PUSHBUTTON "Cancel",IDCANCEL,154,17,65,14 + LTEXT " You can request a new license by clicking ""Request License"".", + IDC_STATIC,5,67,214,8 + LTEXT "Please paste your license key into the text box below.", + IDC_STATIC,5,53,216,8 + PUSHBUTTON "Request License",LICENSE_DIALOG_REQUEST_LICENSE,154,32, + 65,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "MIDIDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 141 + END + + "TABDIALOG", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 136 + TOPMARGIN, 7 + BOTTOMMARGIN, 128 + END + + "FRETDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 154 + BOTTOMMARGIN, 69 + END + + "CHORDDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 184 + TOPMARGIN, 2 + BOTTOMMARGIN, 126 + END + + "SETTINGSDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 164 + BOTTOMMARGIN, 222 + END + + "SCALEDIALOG", DIALOG + BEGIN + BOTTOMMARGIN, 148 + END + + "LICENSEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 221 + BOTTOMMARGIN, 131 + END +END +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Simplified Tablature editing.\0" + VALUE "CompanyName", "Diversified Software Solutions.\0" + VALUE "FileDescription", "TabMaster\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "TabMaster\0" + VALUE "LegalCopyright", "Copyright © 2002\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "TabMaster.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "TabMaster\0" + VALUE "ProductVersion", "2, 0, 0, r\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +TABACCELERATORS ACCELERATORS DISCARDABLE +BEGIN + "X", MENU_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT + "C", MENU_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + "V", MENU_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT + "N", MENU_FILE_NEW, VIRTKEY, CONTROL, NOINVERT + "O", MENU_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "I", MENU_FILE_IMPORT, VIRTKEY, CONTROL, NOINVERT + "P", MENU_FILE_PRINT, VIRTKEY, CONTROL, NOINVERT + VK_F5, IDM_CASCADE, VIRTKEY, NOINVERT + VK_F4, IDM_TILE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_NOTITLE "None" + STRING_EDITHINT "Insert tablature using Insert key." + STRING_PRJEXTENSION ".prj" + STRING_PRJALLEXTENSION "*.prj" + STRING_TABEXTENSION ".tab" + STRING_BROWSERKEY "Software\\Classes\\htmlfile\\shell\\opennew\\command" + STRING_BROWSERKEYALT "SOFTWARE\\Classes\\http\\shell\\open\\command" + STRING_BROWSERCOMMAND "command" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_HOST "http://www.diversified-software.com" + STRING_HELPPAGE "/support/support.html" + STRING_MIDIEXTENSION ".mid" + STRING_PURCHASE_URL "http://wwww.diversified-software.com/order/ordertabmaster.html" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_TABVIEWWINDOWCLASSNAME "TABVIEWCLASS" + STRING_FRETVIEWWINDOWCLASSNAME "FRETVIEWCLASS" + STRING_REGISTRYKEYNAME "Software\\Diversified\\TabMaster" + STRING_HISTORYKEYNAME "Software\\Diversified\\TabMaster\\History" + STRING_HISTORYKEYSHORTNAME "History" + STRING_SETTINGSKEYNAME "Software\\Diversified\\TabMaster\\Settings" + STRING_SETTINGSINSTRUMENT "Instrument" + STRING_SETTINGSACTION "Action" + STRING_SETTINGSNOTELETTERS "DisplayNoteLetters" + STRING_SETTINGSMICROSECONDSPERQUARTERNOTE "MicrosecondsPerQuarterNote" + STRING_REGISTRATIONKEYNAME + "Software\\Diversified\\TabMaster\\Registration" + STRING_SETTINGSLICENSE "License" + STRING_SETTINGSMIDIOUTPUT "MIDIOutput" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_21001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_21002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_21003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_21004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_21005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_21006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_21007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_21009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_21010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_21011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_21012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_21013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_21014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_21015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_21016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_21017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_21018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_21019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_21020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_21021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_21022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_21023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_21025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_21026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_21027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_21028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_21029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_21030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_21031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_21032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_21033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_21034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_21035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_21036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_21037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_21038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_21039 "A7sus4 [x 0 2 0 3 3] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21040 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_21041 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_21042 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_21043 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_21044 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_21045 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_21046 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21047 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_21048 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_21049 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_21050 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21051 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_21052 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21053 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21054 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_21055 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21056 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_21057 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21058 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21059 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_21060 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_21061 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_21062 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_21063 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_21064 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_21065 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_21066 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_21067 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21068 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21069 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21070 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_21071 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21072 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21073 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21074 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_21075 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21076 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21077 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_21078 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21079 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_21080 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_21081 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_21082 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_21083 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_21084 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_21085 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21086 "Am [x 0 2 2 1 0] (C E A) " + STRING_21087 "Am [x 0 7 5 5 5] (C E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21088 "Am [x 3 2 2 1 0] (C E A) " + STRING_21089 "Am [8 12 x x x 0] (C E A) " + STRING_21090 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_21091 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_21092 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_21093 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_21094 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_21095 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_21096 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_21097 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_21098 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_21099 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_21100 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_21101 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_21102 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_21103 "Am/G [x 0 5 5 5 8] (C E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21104 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_21105 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_21106 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_21107 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_21108 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_21109 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_21110 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_21111 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_21112 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_21113 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_21114 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_21115 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_21116 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_21117 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_21118 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_21119 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21120 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_21121 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_21122 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_21123 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_21124 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_21125 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_21126 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_21127 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_21128 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_21129 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_21130 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_21131 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_21132 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_21133 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_21134 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_21135 "Asus2/G [x 0 2 0 0 0] (E G A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21136 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_21137 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_21138 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_21139 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_21140 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_21141 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_21142 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_21143 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_21144 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_21145 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_21146 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_21147 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_21148 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_21149 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_21150 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_21151 "Asus4/G [x 0 2 2 3 3] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21152 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_21153 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_21154 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_21155 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_21156 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_21157 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_21158 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_21159 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_21160 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_21161 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_21162 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_21163 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21164 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21165 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21166 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21167 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21168 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21169 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_21170 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_21171 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_21172 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21173 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21174 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21175 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21176 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21177 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_21178 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_21179 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_21180 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_21181 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21182 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21183 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21184 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_21185 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_21186 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_21187 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_21188 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_21189 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21190 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_21191 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_21192 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_21193 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_21194 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_21195 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_21196 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_21197 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_21198 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_21199 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21200 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21201 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_21202 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21203 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_21204 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21205 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_21206 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_21207 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_21208 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_21209 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_21210 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21211 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21212 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21213 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_21214 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21215 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21216 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21217 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21218 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_21219 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_21220 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_21221 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_21222 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21223 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_21224 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_21225 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_21226 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_21227 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_21228 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_21229 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_21230 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_21231 "Bdim/G [x x 0 0 0 1] (D F G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21232 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21233 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21234 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21235 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_21236 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_21237 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_21238 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_21239 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_21240 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_21241 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_21242 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_21243 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_21244 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_21245 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_21246 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_21247 "Bm7 [x 0 4 4 3 2] (D Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21248 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_21249 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_21250 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_21251 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_21252 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_21253 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_21254 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_21255 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_21256 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_21257 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_21258 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_21259 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_21260 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_21261 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_21262 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_21263 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21264 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_21265 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21266 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21267 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21268 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_21269 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21270 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_21271 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_21272 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_21273 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_21274 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_21275 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_21276 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_21277 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_21278 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_21279 "C or Cmaj [x 3 2 0 1 0] (C E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21280 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_21281 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_21282 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_21283 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_21284 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_21285 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_21286 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_21287 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_21288 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_21289 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_21290 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_21291 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_21292 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_21293 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_21294 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_21295 "C/D [x x 0 0 1 0] (C D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21296 "C/D [x x 0 5 5 3] (C D E G) " + STRING_21297 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_21298 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_21299 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_21300 "C/F [x x 3 0 1 0] (C E F G) " + STRING_21301 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_21302 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_21303 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_21304 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_21305 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_21306 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_21307 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_21308 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_21309 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_21310 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_21311 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21312 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_21313 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_21314 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_21315 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_21316 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_21317 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_21318 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_21319 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_21320 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21321 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21322 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_21323 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21324 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_21325 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_21326 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_21327 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21328 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_21329 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21330 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_21331 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_21332 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_21333 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_21334 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_21335 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_21336 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_21337 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_21338 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_21339 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_21340 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_21341 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_21342 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_21343 "Csus2/B [x 3 0 0 0 3] (C D G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21344 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_21345 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_21346 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_21347 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_21348 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_21349 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_21350 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_21351 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_21352 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_21353 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_21354 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_21355 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_21356 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_21357 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_21358 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_21359 "Csus4/E [x x 3 0 1 0] (C E F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21360 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_21361 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_21362 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_21363 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_21364 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_21365 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_21366 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_21367 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_21368 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_21369 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_21370 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_21371 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_21372 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_21373 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_21374 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_21375 "D/C [x 3 x 2 3 2] (C D Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21376 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_21377 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_21378 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_21379 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_21380 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_21381 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_21382 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_21383 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_21384 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_21385 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_21386 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_21387 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_21388 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_21389 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_21390 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_21391 "D6 [x 2 0 2 0 2] (D Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21392 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_21393 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_21394 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_21395 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_21396 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_21397 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_21398 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_21399 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_21400 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_21401 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_21402 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_21403 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_21404 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_21405 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_21406 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_21407 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21408 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_21409 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_21410 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_21411 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_21412 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_21413 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_21414 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21415 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_21416 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_21417 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_21418 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_21419 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_21420 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_21421 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_21422 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_21423 "Db/B [x 4 3 4 0 4] (Db F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21424 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21425 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_21426 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_21427 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_21428 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21429 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_21430 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_21431 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21432 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_21433 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_21434 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_21435 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_21436 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_21437 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_21438 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_21439 "Dbdim/D [x x 0 0 2 0] (Db D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21440 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21441 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21442 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_21443 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_21444 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_21445 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_21446 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_21447 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_21448 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_21449 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_21450 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_21451 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_21452 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_21453 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_21454 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21455 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21456 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_21457 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_21458 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21459 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_21460 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_21461 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21462 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21463 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21464 "Dm [x 0 0 2 3 1] (D F A) " + STRING_21465 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_21466 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_21467 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_21468 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_21469 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_21470 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_21471 "Dm/C [x x 0 5 6 5] (C D F A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21472 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_21473 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_21474 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_21475 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_21476 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_21477 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_21478 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_21479 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_21480 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_21481 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_21482 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_21483 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_21484 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_21485 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_21486 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_21487 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21488 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_21489 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_21490 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_21491 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_21492 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_21493 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_21494 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_21495 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_21496 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_21497 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_21498 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_21499 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_21500 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_21501 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_21502 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_21503 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21504 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_21505 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_21506 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_21507 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_21508 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_21509 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_21510 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_21511 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_21512 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_21513 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_21514 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_21515 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_21516 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_21517 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_21518 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_21519 "Dsus4/C [x 5 7 5 8 3] (C D G A)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21520 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_21521 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_21522 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_21523 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_21524 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_21525 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_21526 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_21527 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_21528 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_21529 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_21530 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_21531 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_21532 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_21533 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_21534 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_21535 "E/D [x x 0 1 0 0] (D E Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21536 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_21537 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_21538 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21539 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21540 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_21541 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21542 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21543 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21544 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_21545 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_21546 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_21547 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_21548 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_21549 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_21550 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_21551 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21552 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_21553 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_21554 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_21555 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_21556 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_21557 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_21558 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21559 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21560 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21561 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_21562 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_21563 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_21564 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_21565 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_21566 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21567 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21568 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21569 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21570 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21571 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_21572 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_21573 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21574 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21575 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21576 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21577 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21578 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21579 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21580 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21581 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21582 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21583 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21584 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21585 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_21586 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21587 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21588 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_21589 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21590 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21591 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_21592 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_21593 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_21594 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_21595 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_21596 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21597 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21598 "Em [0 2 2 0 0 0] (E G B) " + STRING_21599 "Em [3 x 2 0 0 0] (E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21600 "Em [x 2 5 x x 0] (E G B) " + STRING_21601 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_21602 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_21603 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_21604 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_21605 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_21606 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_21607 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_21608 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_21609 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_21610 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_21611 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_21612 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_21613 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_21614 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_21615 "Em/D [x 10 12 12 12 0] (D E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21616 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_21617 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_21618 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_21619 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_21620 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_21621 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_21622 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_21623 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_21624 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_21625 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_21626 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_21627 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_21628 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_21629 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_21630 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_21631 "Em7 [x x 2 4 3 3] (D E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21632 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_21633 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_21634 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_21635 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_21636 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_21637 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_21638 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_21639 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_21640 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_21641 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21642 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21643 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_21644 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_21645 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_21646 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_21647 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21648 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_21649 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_21650 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_21651 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_21652 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_21653 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_21654 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_21655 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_21656 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_21657 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_21658 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21659 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21660 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21661 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_21662 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21663 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21664 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_21665 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_21666 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_21667 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_21668 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_21669 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_21670 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_21671 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_21672 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_21673 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_21674 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_21675 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_21676 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_21677 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_21678 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_21679 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21680 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_21681 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_21682 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_21683 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_21684 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_21685 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_21686 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_21687 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_21688 "F/D [x x 0 2 1 1] (C D F A) " + STRING_21689 "F/D [x x 0 5 6 5] (C D F A) " + STRING_21690 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_21691 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_21692 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_21693 "F/E [x x 2 2 1 1] (C E F A) " + STRING_21694 "F/E [x x 3 2 1 0] (C E F A) " + STRING_21695 "F/Eb [x x 1 2 1 1] (C Eb F A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21696 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_21697 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_21698 "F/G [x x 3 2 1 3] (C F G A) " + STRING_21699 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_21700 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_21701 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_21702 "F6 [x x 0 2 1 1] (C D F A) " + STRING_21703 "F6 [x x 0 5 6 5] (C D F A) " + STRING_21704 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_21705 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_21706 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_21707 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_21708 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_21709 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_21710 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21711 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21712 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_21713 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_21714 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_21715 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21716 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21717 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21718 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_21719 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_21720 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_21721 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_21722 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_21723 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21724 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_21725 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_21726 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21727 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21728 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_21729 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_21730 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_21731 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_21732 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_21733 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_21734 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_21735 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_21736 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_21737 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_21738 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_21739 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_21740 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_21741 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_21742 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_21743 "Fsus2/D [3 3 0 0 1 1] (C D F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21744 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_21745 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_21746 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_21747 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_21748 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_21749 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_21750 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_21751 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_21752 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_21753 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_21754 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_21755 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_21756 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_21757 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_21758 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_21759 "G/C [3 3 0 0 0 3] (C D G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21760 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_21761 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_21762 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_21763 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_21764 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_21765 "G/E [x x 0 12 12 12] (D E G B) " + STRING_21766 "G/E [x x 0 9 8 7] (D E G B) " + STRING_21767 "G/E [x x 2 4 3 3] (D E G B) " + STRING_21768 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_21769 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_21770 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_21771 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_21772 "G/F [x x 0 0 0 1] (D F G B) " + STRING_21773 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_21774 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_21775 "G/Gb [3 2 0 0 0 2] (D Gb G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21776 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_21777 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_21778 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_21779 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_21780 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_21781 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_21782 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_21783 "G6 [x x 0 12 12 12] (D E G B) " + STRING_21784 "G6 [x x 0 9 8 7] (D E G B) " + STRING_21785 "G6 [x x 2 4 3 3] (D E G B) " + STRING_21786 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_21787 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_21788 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_21789 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_21790 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_21791 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21792 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_21793 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_21794 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_21795 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_21796 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_21797 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_21798 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_21799 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_21800 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21801 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21802 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_21803 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_21804 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_21805 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_21806 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21807 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21808 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21809 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21810 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21811 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21812 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_21813 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21814 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21815 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_21816 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_21817 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21818 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21819 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_21820 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_21821 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_21822 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_21823 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21824 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_21825 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_21826 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21827 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_21828 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_21829 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_21830 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_21831 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_21832 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_21833 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_21834 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_21835 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_21836 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_21837 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_21838 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_21839 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21840 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_21841 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_21842 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_21843 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_21844 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_21845 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21846 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_21847 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21848 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_21849 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_21850 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_21851 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21852 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21853 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21854 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21855 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21856 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_21857 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_21858 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_21859 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_21860 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_21861 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_21862 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_21863 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_21864 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_21865 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_21866 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_21867 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_21868 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_21869 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_21870 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_21871 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21872 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_21873 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_21874 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_21875 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_21876 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_21877 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_21878 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_21879 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_21880 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_21881 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_21882 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_21883 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_21884 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_21885 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_21886 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_21887 "Gsus2/E [5 0 0 0 3 0] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21888 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_21889 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_21890 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_21891 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_21892 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_21893 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_21894 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_21895 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_21896 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_21897 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_21898 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_21899 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_21900 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_21901 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_21902 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/guitar/backup/20030731/harrow.cur b/guitar/backup/20030731/harrow.cur new file mode 100644 index 0000000..e4feb3e Binary files /dev/null and b/guitar/backup/20030731/harrow.cur differ diff --git a/guitar/backup/20030731/icon1.ico b/guitar/backup/20030731/icon1.ico new file mode 100644 index 0000000..cd5eef4 Binary files /dev/null and b/guitar/backup/20030731/icon1.ico differ diff --git a/guitar/backup/20030731/install.gid b/guitar/backup/20030731/install.gid new file mode 100644 index 0000000..e69de29 diff --git a/guitar/backup/20030731/license.cpp b/guitar/backup/20030731/license.cpp new file mode 100644 index 0000000..61f14a2 --- /dev/null +++ b/guitar/backup/20030731/license.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +/* + The license will be uuencoded on top of xor. This should be sufficient to protect the contents. + Lic: TM105R20020101013001EF + VVVVVVYYYYMMDDTTDDCCCC + + XX=version TM105R. should check this against this product version and release + YYYY=year of license issuance. 30 day license will use this value to expire itself. + MM=month of license issuance 30 day license will use this value to expiure + DD=day of license issuance + TT=type of license + 01=30 day license, expires 30 days from issuance. + 02=Full license, never expires. + DD=for type 01 license, indicates number of days license is good for. + CCCC=checksum, just add up ASCII values of the characters through TT, display in hex. +*/ + +const String License::smBeginLicense="BEGIN LICENSE"; +const String License::smEndLicense="END LICENSE"; + +String License::generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount) +{ + String strLicenseKey; + String strIssueDate; + String strLicenseType; + String strDayCount; + String strChecksum; + + strLicenseKey=String("TM"); + strLicenseKey+=strProductVersion.substr(0,3); + ::sprintf(strIssueDate,"%4d%02d%02d",issueDate.year(),issueDate.month(),issueDate.day()); + strLicenseKey+=strIssueDate; + ::sprintf(strLicenseType,"%02d",licenseType); + strLicenseKey+=strLicenseType; + ::sprintf(strDayCount,"%02d",dayCount); + strLicenseKey+=strDayCount; + ::sprintf(strChecksum,"%04lx",calculateChecksum(strLicenseKey)); + strLicenseKey+=strChecksum; + return UUTool::encode(xor(strLicenseKey)); +} + +String numericEncode(const String &strLicense) +{ + return String(); +} + +String numericDecode(const String &strLicense) +{ + return String(); +} + +bool License::fromLines(Block &strLicenseLines) +{ + if(3!=strLicenseLines.size())return false; + if(!(strLicenseLines[0]==smBeginLicense))return false; + if(!(strLicenseLines[2]==smEndLicense))return false; + return fromString(strLicenseLines[1]); +} + +// TM105R2002040301 30 03d8 + +bool License::fromString(const String &strLicense) +{ + VersionInfo versionInfo; + SystemTime currDate; + SystemTime expireDate; + String strHeader; + String strDecoded; + String strVersion; + int hashCode; + + mUUEncodedLicense=strLicense; + strDecoded=xor(UUTool::decode(strLicense)); + strHeader=strDecoded.substr(0,1); + if(!(strHeader==String("TM")))return false; + mProductVersion=strDecoded.substr(2,5); + mIssueDate.year(strDecoded.substr(6,9).toInt()); + mIssueDate.month((SystemTime::Month)strDecoded.substr(10,11).toInt()); + mIssueDate.day(strDecoded.substr(12,13).toInt()); + mLicenseType=(LicenseType)strDecoded.substr(14,15).toInt(); + mDayCount=strDecoded.substr(16,17).toInt(); + hashCode=strDecoded.substr(18,21).hex(); + if(hashCode!=calculateChecksum(strDecoded.substr(0,17)))return false; + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return mIsValid=true; + expireDate=mIssueDate; + expireDate.daysAdd360(mDayCount); + if(currDate>=expireDate)return false; + return mIsValid=true; +} + +String License::xor(const String &strLicense) +{ + String strEncoded; + int strLength; + + strEncoded.reserve((strLength=strLicense.length())+1); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } +// GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setLogLevel(GlobalDefs::NoLog); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); +} + diff --git a/guitar/backup/20030731/mainfrm.cpp b/guitar/backup/20030731/mainfrm.cpp new file mode 100644 index 0000000..54e03c9 --- /dev/null +++ b/guitar/backup/20030731/mainfrm.cpp @@ -0,0 +1,1063 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); + mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + return false; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + return false; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_PRINT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_PRINT",GlobalDefs::Verbose); + handleFilePrint(); + break; + case MENU_FILE_NEW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_NEW",GlobalDefs::Verbose); + handleFileNew(); + break; + case MENU_FILE_OPEN : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_OPEN",GlobalDefs::Verbose); + handleOpenProject(); + break; + case MENU_FILE_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_IMPORT",GlobalDefs::Verbose); + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_MIDI_IMPORT",GlobalDefs::Verbose); + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_CLOSE",GlobalDefs::Verbose); + handleFileClose(); + break; + case MENU_FILE_EXIT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_EXIT",GlobalDefs::Verbose); + handleFileExit(); + break; + case MENU_FILE_SAVE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVE",GlobalDefs::Verbose); + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVEAS",GlobalDefs::Verbose); + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_VIEW_FRETBOARD",GlobalDefs::Verbose); + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAY",GlobalDefs::Verbose); + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYTOEND",GlobalDefs::Verbose); + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYREPEATED",GlobalDefs::Verbose); + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE",GlobalDefs::Verbose); + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE_REPEATED",GlobalDefs::Verbose); + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_STOP",GlobalDefs::Verbose); + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_ENTRYPROPS",GlobalDefs::Verbose); + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETENDRANGE",GlobalDefs::Verbose); + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETSTARTRANGE",GlobalDefs::Verbose); + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_RANGES",GlobalDefs::Verbose); + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_INCREASETEMPO",GlobalDefs::Verbose); + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_DECREASETEMPO",GlobalDefs::Verbose); + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_SETTINGS",GlobalDefs::Verbose); + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_LOOKUP",GlobalDefs::Verbose); + handleChordLookup(); + break; + case MENU_CHORDS_ENTER : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_ENTER",GlobalDefs::Verbose); + handleChordEnter(); + break; + case MENU_FRETBOARD_CLEAR : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_CLEAR",GlobalDefs::Verbose); + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_SHOWALLPOSITIONS",GlobalDefs::Verbose); + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_SCALES_SHOW",GlobalDefs::Verbose); + handleShowScales(); + break; + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + break; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + break; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CASCADE",GlobalDefs::Verbose); + cascade(); + break; + case IDM_TILE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_TILE",GlobalDefs::Verbose); + tile(); + break; + case IDM_ARRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_ARRANGE",GlobalDefs::Verbose); + arrange(); + break; + case IDM_CLOSEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CLOSEALL",GlobalDefs::Verbose); + closeAll(); + break; + case IDM_MINIMIZEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_MINIMIZEALL",GlobalDefs::Verbose); + minimizeAll(); + break; + case IDM_RESTOREALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_RESTOREALL",GlobalDefs::Verbose); + restoreAll(); + break; + default : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::keyDownHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::paintHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); + GlobalDefs::outDebug("[MainFrame::createHandler]",GlobalDefs::Verbose); + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + setWindowPos(InitialWidth,InitialHeight); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + updateHistory(); + if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ + Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::guiFretboardHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + + GlobalDefs::outDebug("[MainFrame::guiFretboardHandler]",GlobalDefs::Verbose); + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow); + } + if(!someCallbackData.lParam()) + { + ((FretViewWindow&)*mdiWindow).clearNotes(); + } + else + { + if(CBCommands::FBShowTab==someCallbackData.wParam()) + { + const TabEntry &entry=*(TabEntry*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(entry,true,false); // show note only, do not play. used by tabpage + } + else if(CBCommands::FBPlayNote==someCallbackData.wParam()) + { + const Note ¬e=*(Note*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(note); + } + else if(CBCommands::FBPlayScale==someCallbackData.wParam()) // This is used by the scale dialog + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale,true); + } + else if(CBCommands::FBPlayFrettedNotes==someCallbackData.wParam()) // not currently used see ScaleDlg + { + const FrettedNotes &frettedNotes=*(FrettedNotes*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(frettedNotes); + } + else if(CBCommands::FBPlayChord==someCallbackData.wParam()) + { + const Music::Chord &chord=*(Music::Chord*)someCallbackData.lParam(); + SmartPointer mdiWindow; + getActive(mdiWindow); + if(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + TabEntry entry; + entry.fromChord(chord); + ((ViewWindow&)*mdiWindow).insert(entry); + } + else if(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)) + { + ((FretViewWindow&)*mdiWindow).setNote(chord,true); + } + } + } + return false; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} + +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} + +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} + +// menu handlers + +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} + +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} + +void MainFrame::handleFileNew(void) +{ + createProjectView(); +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + createProjectView(strPathTabFile); +} + +void MainFrame::handleMIDIImport(void) +{ + OpenDialog openDialog; + String strPathMIDIFile; + String strPathTabFileName; + MIDIHelper midiHelper; + CursorControl cursorControl; + MIDIDialog midiDialog; + License license; + int selectedTrack; + + Registration::getInstance().getLicense(license); + if(!license.allowFeature(License::MIDIFeature)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"This feature is disabled in this version.",MB_ICONSTOP); + return; + } + if(!openDialog.getOpenFileName(*this,"*.mid","Open MIDI","*.mid",strPathMIDIFile))return; + if(!midiDialog.perform(*this,strPathMIDIFile,selectedTrack))return; + strPathTabFileName=Profile::removeExtension(strPathMIDIFile)+String("TRK")+String().fromInt(selectedTrack+1)+String(".tab"); + if(!midiHelper.import(strPathMIDIFile,strPathTabFileName,selectedTrack)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"Error importing file.",MB_ICONSTOP); + return; + } + cursorControl.waitCursor(true); + createProjectView(strPathTabFileName); + cursorControl.waitCursor(false); +} + +void MainFrame::handleOpenProject(CallbackData &someCallbackData) +{ + PureMenu fileMenu; + String menuItemString; + + getFrameMenu().getSubMenu(0,fileMenu); + menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand); + if(menuItemString.isNull())return; + menuItemString=menuItemString.betweenString(')',0); + menuItemString.trimLeft(); + handleOpenProject(menuItemString); +} + +void MainFrame::handleOpenProject(void) +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,String(STRING_PRJALLEXTENSION),"Open Project",String(STRING_PRJALLEXTENSION),strPathFileName))return; + handleOpenProject(strPathFileName); +} + +void MainFrame::handleOpenProject(const String &strPathFileProject) +{ + openProjectView(strPathFileProject); +} + +void MainFrame::handleFileClose(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} + +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} + +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} + +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleChordEnter() +{ + ChordBuilderDialog chordBuilderDialog; + chordBuilderDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} + +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} + +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} + +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} + +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} + +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} + +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} + +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} + +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} + +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} + +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} + +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} + +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} + +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} + +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} + +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} + +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} + +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} + +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} + +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} + +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; + enum{InitialWidth=700,InitialHeight=480}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleMIDIImport(void); + void handleFileClose(void); + void handleFileExit(void); + void handleFileNew(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleChordEnter(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void createToolBar(void); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mGUIFretboardHandler; + Callback mDropFilesHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/guitar/backup/20030731/new.lic b/guitar/backup/20030731/new.lic new file mode 100644 index 0000000..aee7002 --- /dev/null +++ b/guitar/backup/20030731/new.lic @@ -0,0 +1,3 @@ +BEGIN LICENSE +6'`5Y>'T:>GAX>GA\>'UX>GAX>'LL<`"K +END LICENSE diff --git a/guitar/backup/20030731/notepath.cpp b/guitar/backup/20030731/notepath.cpp new file mode 100644 index 0000000..d6f75df --- /dev/null +++ b/guitar/backup/20030731/notepath.cpp @@ -0,0 +1,12 @@ +#include + +String NotePath::toString(void) +{ + String strNotePath; + + for(int index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class NotePath; +typedef Array NotePaths; + +class NotePath : public Block +{ +public: + String toString(void); +}; +#endif diff --git a/guitar/backup/20030731/ordering.hpp b/guitar/backup/20030731/ordering.hpp new file mode 100644 index 0000000..81ab6b1 --- /dev/null +++ b/guitar/backup/20030731/ordering.hpp @@ -0,0 +1,73 @@ +#ifndef _GUITAR_ORDERING_HPP_ +#define _GUITAR_ORDERING_HPP_ + +class Ordering +{ +public: + Ordering(int criteria=0,int value=0); + virtual ~Ordering(); + bool operator<(const Ordering &ordering)const; + bool operator>(const Ordering &ordering)const; + bool operator==(const Ordering &ordering)const; + int getCriteria(void)const; + void setCriteria(int criteria); + int getValue(void)const; + void setValue(int value); +private: + int mCriteria; + int mValue; +}; + +inline +Ordering::Ordering(int criteria,int value) +: mCriteria(criteria), mValue(value) +{ +} + +inline +Ordering::~Ordering() +{ +} + +inline +bool Ordering::operator<(const Ordering &ordering)const +{ + return mCriteria(const Ordering &ordering)const +{ + return mCriteria>ordering.mCriteria; +} + +inline +bool Ordering::operator==(const Ordering &ordering)const +{ + return mCriteria==ordering.mCriteria; +} + +inline +int Ordering::getCriteria(void)const +{ + return mCriteria; +} + +inline +void Ordering::setCriteria(int criteria) +{ + mCriteria=criteria; +} + +inline +int Ordering::getValue(void)const +{ + return mValue; +} + +inline +void Ordering::setValue(int value) +{ + mValue=value; +} +#endif diff --git a/guitar/backup/20030731/permanent-2.00.lic.txt b/guitar/backup/20030731/permanent-2.00.lic.txt new file mode 100644 index 0000000..09805ed --- /dev/null +++ b/guitar/backup/20030731/permanent-2.00.lic.txt @@ -0,0 +1,6 @@ +BEGIN LICENSE +6'`5Z>'@:>GAX>GA]>GMX>GAX>'LL?0"K +END LICENSE + + + diff --git a/guitar/backup/20030731/permanent.lic b/guitar/backup/20030731/permanent.lic new file mode 100644 index 0000000..09805ed --- /dev/null +++ b/guitar/backup/20030731/permanent.lic @@ -0,0 +1,6 @@ +BEGIN LICENSE +6'`5Z>'@:>GAX>GA]>GMX>GAX>'LL?0"K +END LICENSE + + + diff --git a/guitar/backup/20030731/registration.cpp b/guitar/backup/20030731/registration.cpp new file mode 100644 index 0000000..2b6ab23 --- /dev/null +++ b/guitar/backup/20030731/registration.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include + +SmartPointer Registration::smRegistration; + +Registration::Registration() +: mRegistrationKeyName(STRING_REGISTRATIONKEYNAME), + mSettingsLicenseKey(STRING_SETTINGSLICENSE) +{ +} + +Registration::~Registration() +{ +} + +Registration &Registration::getInstance() +{ + if(!smRegistration.isOkay()) + { + smRegistration=::new Registration(); + smRegistration.disposition(PointerDisposition::Delete); + } + return *smRegistration; +} + +bool Registration::hasGID(void)const +{ + FileHandle gidFile; + return gidFile.open("install.gid",FileHandle::Read,FileHandle::ShareRead,FileHandle::Open,FileHandle::Hidden); +} + +bool Registration::hasLicense(void)const +{ + RegKey regKeyRegistration; + String strLicense; + + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + return strLicense.isNull()?false:true; +} + +bool Registration::getLicense(License &license)const +{ + String strLicense; + RegKey regKeyRegistration; + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + license.fromString(strLicense); + return true; +} + +bool Registration::applyLicense(Block &strLicenseLines) +{ + RegKey regKeyRegistration; + License license; + + license.fromLines(strLicenseLines); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,license.getUUEncodedLicense()); + return true; +} + +bool Registration::applyLicense(const String &uuencodedLicense) +{ + RegKey regKeyRegistration; + License license; + + license.fromString(uuencodedLicense); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,uuencodedLicense); + return true; +} + +bool Registration::create30DayLicense(void)const +{ + createLicense(30); + return true; +} + +bool Registration::create15DayLicense(void)const +{ + createLicense(15); + return true; +} + +bool Registration::createPermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + +License Registration::generatePermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + License license; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + license.fromString(strLicense); + return license; +} + +bool Registration::removeLicense(void) +{ + RegKey regKeyRegistration; + return regKeyRegistration.deleteKey(mRegistrationKeyName); +} + +bool Registration::createLicense(int days)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Expires,days); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + diff --git a/guitar/backup/20030731/registry.cpp b/guitar/backup/20030731/registry.cpp new file mode 100644 index 0000000..5924a77 --- /dev/null +++ b/guitar/backup/20030731/registry.cpp @@ -0,0 +1,190 @@ +#include +#include + +Registry::Registry(void) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mRegKeyHistory(RegKey::CurrentUser), + mSettingsAction(STRING_SETTINGSACTION), + mSettingsMicrosecondsPerQuarterNote(STRING_SETTINGSMICROSECONDSPERQUARTERNOTE), + mSettingsInstrument(STRING_SETTINGSINSTRUMENT), + mSettingsNoteLetters(STRING_SETTINGSNOTELETTERS), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT) +{ + guarantee(); + getCacheNames(); +} + +Registry::Registry(const Registry &someRegistry) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT), + mRegKeyHistory(RegKey::CurrentUser) +{ + *this=someRegistry; +} + +Registry::~Registry() +{ +} + +Registry &Registry::operator=(const Registry &/*registry*/) +{ + return *this; +} + +void Registry::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +void Registry::guarantee(void) +{ + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setShowAction(GlobalDefs::ShowAction); + setShowNotes(GlobalDefs::ShowNotes); + setMicrosecondsPerQuarterNote(GlobalDefs::MicrosecondsPerQuarterNote); + setInstrument(Instrument(GlobalDefs::Program)); + setMIDIOutputDevice("MIDIMAPPER"); + } +} + +bool Registry::isOkay(void)const +{ + return mRegKeyHistory.isOkay(); +} + +bool Registry::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool Registry::setHistory(Block &nameList) +{ + removeHistory(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;indexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Registry +{ +public: + Registry(void); + Registry(const Registry ®istry); + virtual ~Registry(); + Registry &operator=(const Registry ®istry); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool removeHistory(const String &strName); + bool getShowNotes(void); + void setShowNotes(bool showNoteLetters); + bool getShowAction(void)const; + void setShowAction(bool showAction); + int getMicrosecondsPerQuarterNote(void)const; + void setMicrosecondsPerQuarterNote(int microsecondsPerQuarterNote); + long getMillisecondsPerQuarterNote(void)const; + Instrument getInstrument(void)const; + void setInstrument(Instrument instrument); + String getMIDIOutputDevice(void)const; + void setMIDIOutputDevice(const String &midiOutputDevice); + bool isOkay(void)const; +private: + enum {MaxCachedNames=7}; + void guarantee(void); + void getCacheNames(void); + bool removeHistory(void); + + Block mCachedNames; + String mHistoryKeyName; + String mHistoryKeyShortName; + String mRegistryKeyName; + String mSettingsKeyName; + String mSettingsAction; + String mSettingsNoteLetters; + String mSettingsMicrosecondsPerQuarterNote; + String mSettingsInstrument; + String mSettingsMIDIOutput; + RegKey mRegKeyHistory; + RegKey mRegKeySettings; +}; + +inline +long Registry::getMillisecondsPerQuarterNote(void)const +{ + return getMicrosecondsPerQuarterNote()/1000; +} +#endif diff --git a/guitar/backup/20030731/requirement.hpp b/guitar/backup/20030731/requirement.hpp new file mode 100644 index 0000000..f90c959 --- /dev/null +++ b/guitar/backup/20030731/requirement.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REQUIREMENT_HPP_ +#define _GUITAR_REQUIREMENT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Requirement; + +typedef SmartPointer PtrRequirement; + +class Requirement : public FrettedNote +{ +public: + Requirement(); + virtual ~Requirement(); + bool getSatisfied(void)const; + void setSatisfied(bool satisfied); + Requirement &operator=(const FrettedNote &frettedNote); +private: + bool mSatisfied; +}; + +inline +Requirement::Requirement() +: mSatisfied(false) +{ +} + +inline +Requirement::~Requirement() +{ +} + +inline +Requirement &Requirement::operator=(const FrettedNote &frettedNote) +{ + (FrettedNote&)*this=frettedNote; + return *this; +} + +inline +bool Requirement::getSatisfied(void)const +{ + return mSatisfied; +} + +inline +void Requirement::setSatisfied(bool satisfied) +{ + mSatisfied=satisfied; +} +#endif diff --git a/guitar/backup/20030731/requirements.cpp b/guitar/backup/20030731/requirements.cpp new file mode 100644 index 0000000..b5b6851 --- /dev/null +++ b/guitar/backup/20030731/requirements.cpp @@ -0,0 +1,77 @@ +#include +#include + +void Requirements::setRequirements(Block ¬es) +{ + size(notes.size()); + for(int index=0;index searchOrder; + + searchOrder.size(notePaths.size()); + for(int index=0;index sortOrder; + sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets + for(index=0;indexsetSatisfied(true); + satisfied=true; + break; + } + } + return satisfied; +} + +bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement) +{ + for(int index=0;indextoString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + if(requirement->getNote()==frettedNote.getNote()&& + requirement->getOctave()==frettedNote.getOctave()&& + !requirement->getSatisfied())return true; + } + return false; +} + +bool Requirements::haveRequirement(const FrettedNote &frettedNote) +{ + for(int index=0;index +#endif +#ifndef _GUITAR_ORDERING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTEPATH_HPP_ +#include +#endif +#ifndef _GUITAR_REQUIREMENT_HPP_ +#include +#endif + +class Requirements : public Array +{ +public: + Requirements(void); + Requirements(Block ¬es); + virtual ~Requirements(); + bool satisfyRequirements(NotePaths ¬ePaths); + void setRequirements(Block ¬es); +private: + bool satisfyRequirement(NotePath ¬ePath); + bool haveRequirement(const FrettedNote &frettedNote); + bool isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement); +}; + +inline +Requirements::Requirements(void) +{ +} + +inline +Requirements::Requirements(Block ¬es) +{ + setRequirements(notes); +} + +inline +Requirements::~Requirements() +{ +} +#endif diff --git a/guitar/backup/20030731/resource.h b/guitar/backup/20030731/resource.h new file mode 100644 index 0000000..185db41 --- /dev/null +++ b/guitar/backup/20030731/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by guitar.rc +// +#define APPICON 103 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1083 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/guitar/backup/20030731/scraps.txt b/guitar/backup/20030731/scraps.txt new file mode 100644 index 0000000..81d16a2 --- /dev/null +++ b/guitar/backup/20030731/scraps.txt @@ -0,0 +1,3597 @@ + +/* + +G Ionian Major G A B C D E F# G +A Dorian minor A B C D E F# G A +B Phrygian minor B C D E F# G A B +C Lydian Major C D E F# G A B C +D Mixolydian Major D E F# G A B C D +E Aeolian minor E F# G A B C D E +F# Locrian diminished F# G A B C D E F# + + +E(4),F#(4),G(4),A(4),B(4),C(5),D(5),E(5) + + + || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +FHFFHFF + + + + + +Ionian I - Tonic Major Regular Major +Dorian ii - Supertonic Minor Blues Minor +Phrygian iii - Mediant Minor Spanish Minor +Lydian IV - Subdominant Major Jazz Major +Mixolydian V - Dominant Major Dominant Major +Aeolian vi - Submediant Minor Pure Minor +Locrian vii - Subtonic Diminished Diminished +*/ + + + +/* || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +------------------------------------------------------------------------------ + 0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 + 1 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 + 2 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 + 3 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 + 4 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + 5 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 + 6 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 + 7 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 + 8 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 + 9 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 + 10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | */ + + + + +/* +The I, IV, and V7 patterns +Make sure all of section one leaks into your brain and stays there permanently, because we’re moving fast here. Okay, before we move on, +you must know that a chord is two or more notes played at the same time. A triad is three notes played at the same time. Sometimes I will +call a triad a chord, because a triad is basically a special type of chord. (Just like how a dog is a type of mammal, or how music is a +form of noise.) + +Each major key has three primary chords. These are three triads that sound beautiful and are absolutely essential to harmonics. (try not +to confuse harmonics with harmonica...) The first primary chord is the I chord. This is the first note of the scale, the third note, and +the fifth note. So the I chord for the C scale is consisted of the notes C, E, and G played at the same time. Go ahead, try it. Play those +three notes at the same time. Don’t it just sound heavenly? + +The IV chord consists of the first note, the fourth note, and the sixth note played at the same time. For the C scale, those notes would be + C, F, and A. Finally, the V7 chord consists of the fourth note, the fifth note, and (pay attention to this one now.) the note one note + below the first note. So for the C scale, those notes would be B(the one below the first note, not the one before the last note), F, and + G. Got it? Now you can make up your own happy song with these chords. Go ahead, try it. Try playing the chords in this order: + +I, IV, V7, I + +*/ + + + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ +/* Point clickPoint(someCallbackData.loWord(),someCallbackData.hiWord()); + CallbackData callbackData; + String strPathFileName; + String strItemName; + + clickPoint.x(clickPoint.x()+mScrollInfo.currScrollx()); + clickPoint.y(clickPoint.y()+mScrollInfo.currScrolly()); + if(!mThumbPage.hitTest(*this,clickPoint,strItemName))return (CallbackData::ReturnType)FALSE; + strPathFileName=getTitle()+String("\\")+strItemName; + ::OutputDebugString(strPathFileName+String("\n")); + callbackData.lParam(int((char*)strPathFileName)); + mSelectHandler.callback(callbackData); */ + return (CallbackData::ReturnType)FALSE; +} + + + + +#include +#include +#include +#include +#include +#include + + +void outDebug(const String &string); +void scalesAndChords(void); +void minorsAndHarmonics(void); +void tuningAndFretboard(void); + +main() +{ +} + +void minorsAndHarmonics() +{ + MIDIOutputDevice midiDevice; + if(!midiDevice.openDevice())return; + Note::NoteType root=Note::A; + IonianScale ionianScale(root); + outDebug(ionianScale.toString()); + AeolianScale aeolianScale(Note::A); +// outDebug(aeolianScale.toString()); + HarmonicMinorScale harmonicMinorScale(Note::A); +// outDebug(harmonicMinorScale.toString()); + MelodicMinorScale melodicMinorScale(Note::A); + + Music::Chord chord=aeolianScale.getIChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + ::Sleep(1000); + + chord=aeolianScale.getIVChord(); + chord.play(midiDevice); + ::Sleep(1000); + + chord=aeolianScale.getV7Chord(); + chord.play(midiDevice); + ::Sleep(250); + chord.play(midiDevice); + ::Sleep(250); + chord.play(midiDevice); + ::Sleep(250); + chord=aeolianScale.getIChord(); + chord.play(midiDevice); + ::Sleep(750); + + + outDebug(melodicMinorScale.toString()); + melodicMinorScale.play(midiDevice); + ::Sleep(1000); +// aeolianScale.play(midiDevice); + outDebug(harmonicMinorScale.toString()); + +// harmonicMinorScale.playBack(midiDevice); + midiDevice.closeDevice(); +} + + +void tuningAndFretboard() +{ + Fretboard fretboard; + MIDIOutputDevice midiDevice; + outDebug(fretboard.toString()); + if(!midiDevice.openDevice())return; + const Tuning &tuning=fretboard.getTuning(); +// tuning.play(midiDevice); + fretboard.play(midiDevice); + midiDevice.closeDevice(); +} + +void scalesAndChords(void) +{ + using namespace Music; + Music::Chord chord; + + MIDIOutputDevice midiDevice; + if(!midiDevice.openDevice())return; + AeolianScale scale; + outDebug(scale.toString()); + scale.setDelay(150); + scale.play(midiDevice); + scale.playBack(midiDevice); + + chord=scale.getIChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + + chord=scale.getIVChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + + chord=scale.getV7Chord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + + chord=scale.getIChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.pause(); + + midiDevice.closeDevice(); +} + +void outDebug(const String &string) +{ + String outString(string+String("\n")); + ::printf("%s\n",((String&)string).str()); + ::OutputDebugString(outString.str()); +} + + + + + + +// mTablature.setDelayAtAndThereafter(0,250); +/* + mTablature.setDelayAt(4,1000); + mTablature.setDelayAt(5,750); + mTablature.setDelayAt(8,1000); + mTablature.setDelayAt(9,750); + mTablature.setDelayAt(10,750); + mTablature.setDelayAt(11,750); + mTablature.setDelayAt(12,750); + mTablature.setDelayAtAndThereafter(13,100); +// mTablature.setDelayAtAndThereafter(13,250); + mTablature.setDelayAt(64,1500); */ + + + +/* +bool TabPage::drawTabPage(PureDevice &pureDevice,GUIWindow &guiWindow) +{ + Point xyPoint; + SIZE entryExtents; + + getEntryExtents(pureDevice,entryExtents); + if(!pureDevice.isOkay()||!guiWindow.isValid()||!mTabEntries.size())return false; + for(int index=0;index=guiWindow.width()) + { + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } +// pureDevice.select(mDIBitmap->getBitmap()); +// pureDevice.setTextColor(RGBColor(0,255,0)); +// pureDevice.drawText(Point(0,0),"Text"); + +// ptrThumbNail->draw(pureDevice,xyPoint); + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + return true; +} +*/ + + + + +/* +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + Point xyPoint; + + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + setNumTabs(0); + if(!guiWindow.isValid()||!mTabEntries.size())return getNumTabs(); + xyPoint.x(LeftMargin); + xyPoint.y(TopMargin); + for(int index=0;index=guiWindow.width()-RightMargin) + { + if(!getNumTabs()) + { + setItemsPerTab(index+1); + gdiPoint.x(xyPoint.x()); + } + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + setNumTabs(getNumTabs()+1); + } + xyPoint.x(xyPoint.x()+getCharWidth()); + } + gdiPoint.y(xyPoint.y()); +// gdiPoint.y(xyPoint.y()+TabHeight+TabSeparator); + gdiPoint.x(guiWindow.width()); + if(!getNumTabs())setNumTabs(mTabEntries.size()); + ::OutputDebugString(String(String("TabCount:")+String().fromInt(getNumTabs())+String("\n")).str()); + ::OutputDebugString(String(String("ItemsPerTab:")+String().fromInt(getItemsPerTab())+String("\n")).str()); + return getNumTabs(); +} +*/ + + + + +/* +int TabPage::getWidestEntry(PureDevice &pureDevice,const TabEntry &entry)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + widestEntry=0; + for(int index=0;indexwidestEntry)widestEntry=sizeStruct.cx; + } + return widestEntry; +} +*/ + + + + +/* +bool TabPage::drawTabPage(GUIWindow &guiWindow) +{ + Point xyPoint; + String strString; + SIZE entryExtents; + + PureDevice pureDevice(guiWindow); + getEntryExtents(pureDevice,entryExtents); + if(!guiWindow.isValid()||!mTabEntries.size())return false; + for(int index=0;index=guiWindow.width()) + { + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } + Point p1(xyPoint); + Point p2(xyPoint.x()+entryExtents.cx,xyPoint.y()); + mDIBitmap->line(p1,p2,1); + + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + return true; +} +*/ + +/* + +DWORD TabPage::rowItems(GUIWindow &guiWindow)const +{ + PureDevice pureDevice(guiWindow); + Point xyPoint; + DWORD rowItems; + SIZE entryExtents; + + rowItems=0; + getEntryExtents(pureDevice,entryExtents," "); + if(!guiWindow.isValid()||!mTabEntries.size())return rowItems; + for(int index=0;index=guiWindow.width()) + { + if(!rowItems)rowItems=index+1; + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + if(!rowItems)rowItems=mTabEntries.size(); + return rowItems; +} +*/ + + +/* +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + Point xyPoint; + SIZE entryExtents; + + PureDevice pureDevice(guiWindow); + getEntryExtents(pureDevice,entryExtents); + gdiPoint=GDIPoint(); + rowItems(0); + if(!guiWindow.isValid()||!mTabEntries.size())return rowItems(); + for(int index=0;index=guiWindow.width()) + { + if(!rowItems()) + { + rowItems(index+1); + gdiPoint.x(xyPoint.x()); + } + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + gdiPoint.y(xyPoint.y()+entryExtents.cy+Separator); + if(!rowItems())rowItems(mTabEntries.size()); + gdiPoint.y(200); + return rowItems(); +} +*/ + + +/* + Point p1=getEntryPoint(entryIndex); + + p1.y(p1.y()-(font.charHeight()/2)); + + pureDevice.textOut(p1.x(),p1.y(),"2"); + +// Point p1=getEntryPoint(entryIndex); +// pureDevice.textOut(p1.x(),p1.y()-(font.charHeight()/2),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + +// mParent->invalidate(); */ + + + + + +// void outlineEntry(int entryIndex); + + + +/* +void TabPage::outlineEntry(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + Rect outlineRect; + + if(!isOkay())return; + PureDevice &pureDevice=mDIBitmap->getDevice(); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + outlineRect.left(xyPoint.x()); + outlineRect.top(xyPoint.y()); + outlineRect.right(xyPoint.x()+getCharWidth()-1); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + pureDevice.outlineRect(outlineRect,mOutlinePen); +} +*/ + + + +bool TabPage::addTip(const Rect &prevOutlineRect,const Rect &outlineRect,const String &strText) +{ + if(!mToolTipControl.isOkay())return false; + + PureToolInfo pureToolInfo; + PureToolInfo currentTool; + + +// pureToolInfo.rect(mPrevOutlineRect); +// mToolTipControl->delTool(pureToolInfo); + + pureToolInfo.flags((UINT)PureToolInfo::IDIsHwnd|(UINT)PureToolInfo::SubClass); + pureToolInfo.hwnd(*mParent); + pureToolInfo.toolID((UINT)(HWND)*mParent); + pureToolInfo.rect(outlineRect); + pureToolInfo.resInst(mParent->processInstance()); + pureToolInfo.szText(strText); + + if(!mToolTipControl->getCurrentTool(currentTool)) + { + mToolTipControl->addTool(pureToolInfo); + } + else + { + currentTool.rect(outlineRect); + currentTool.szText(strText); + mToolTipControl->setToolInfo(currentTool); + +// mToolTipControl->setToolInfo(pureToolInfo); + } + return true; +} + + + bool addTip(const Rect &prevOutlineRect,const Rect &outlineRect,const String &strText); + + +// addTip(mPrevOutlineRect,outlineRect,entry.toString()); + + + mToolTipControl=::new ToolTip(parent); + mToolTipControl.disposition(PointerDisposition::Delete); + mToolTipControl->setDelayTime(ToolTip::Initial,25); + mToolTipControl->setDelayTime(ToolTip::Reshow,25); + + +#ifndef _TOOLTIP_TOOLTIP_HPP_ +#include +#endif + + + SmartPointer mToolTipControl; + + + + + bool isValidFret(int fret); + bool haveElement(int elements[6]); + + +/* +bool Tablature::parseTab(void) +{ + int elements[6]; + + for(int index=0;index + +bool Tablature::play(MIDIOutputDevice &midiDevice,GUIFretboard &guiFretboard,GUIWindow &guiWindow) +{ + PureDevice device(guiWindow); + if(!midiDevice.hasDevice())return false; + setCancelled(false); + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); +// mParent->update(); +// mParent->invalidate(true); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); +// mParent->update(); + } + mPrevOutlineRect=outlineRect; + return true; +} + + + +/* + File inFile; + String strLine; + String strIndex; + String strDelay; + + if(!inFile.open(pathFileName))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + ::MessageBox(*this,strLine,"Project does not contain a reference to any tablature.",MB_OK); + return false; + } + if(!open(strLine))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("DELAYS")))return false; + strLine=strLine.betweenString('=',0); + char *ptr=strLine.str(); + if(ptr) + { + ptr=::strtok(ptr,")"); + while(true) + { + String str(ptr); + strIndex=str.betweenString('(',','); + strDelay=str.betweenString(',',0); + mTablature.setDelayAt(strIndex.toInt(),strDelay.toInt()); + ptr=::strtok(0,")"); + if(!ptr)break; + } + } +*/ + + + +/* +bool ViewWindow::saveProject(const String &pathFileName) +{ + File outFile; + if(!outFile.open(pathFileName,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mTablature.getPathFileName().isNull())outFile.writeLine("TABLATURE="); + else outFile.writeLine(String("TABLATURE=")+mTablature.getPathFileName()); + outFile.writeLine(String("DELAYS=")+mTablature.getDelays()); + setTitle(pathFileName); + return true; +}*/ + + + + +/* +bool FretViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + return true; +}*/ + +/*void FretViewWindow::stopPlay(void) +{ + mTablature.setCancelled(true); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +}*/ + + +/* +void GUIFretboard::createVirtualFretboard(void) +{ + PurePalette systemPalette; + int xStart=LeftBorder; + int yStart=TopBorder; + int width=CellWidth; + int height=CellHeight; + + size(mTuning.size()); + systemPalette.systemPalette(); + PureDevice pureDevice(*mParent); + for(int strIndex=0;strIndexwidth(),mParent->height(),systemPalette); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->setBits(255); +} +*/ + + + + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow))return; + fretWindow->top(); + + + + +#include +#include +/* MIDIOutputDevice midiDevice; + if(!midiDevice.openDevice())return 0; + Tablature tab("LaVilla.tab"); + + tab.setDelayAt(4,1000); + tab.setDelayAt(5,750); + tab.setDelayAt(8,1000); + tab.setDelayAt(9,750); + tab.setDelayAt(10,750); + tab.setDelayAt(11,750); + tab.setDelayAt(12,750); +// tab.setDelayAtAndThereafter(13,100); + tab.setDelayAtAndThereafter(13,250); + tab.setDelayAt(64,1500); + + tab.play(midiDevice); + midiDevice.closeDevice(); + return 0; */ + + +// mMIDIDevice->midiEvent(ProgramChange(30).getEvent()); // 25 + + + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + outDebug("[TabPage::sizeHandler]ENTER"); + if(isInPlay())isPaused(true); + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + + if(!sizePoint.x()||!sizePoint.y())return false; + update(*mParent); + if(!mDIBitmap.isOkay())return false; +// mScrollInfo.handleSize(someCallbackData); // bitmap creation handles this + if(isInPlay())isPaused(false); + outDebug("[TabPage::sizeHandler]LEAVE"); + return false; +} + + + +//bool Tablature::setDelayAtAndThereafter(int index,int delay) +//{ +// for(;indexoutlineRect(cRect); + cRect.left(cRect.left()+1); + cRect.right(cRect.right()-1); + cRect.top(cRect.top()+1); + cRect.bottom(cRect.bottom()-1); + mDIBitmap->colorRect(cRect,208); */ + +// Point cPoint(20,20); +/* + mDIBitmap->circle(100,cPoint,5,208); + mDIBitmap->circle(100,cPoint,4,208); + mDIBitmap->circle(100,cPoint,3,208); + mDIBitmap->circle(100,cPoint,2,208); + mDIBitmap->circle(100,cPoint,1,208); */ + +// WORD circle(WORD aspectValue,const Point &xyPoint,WORD radius,WORD palIndex); + + + +// WORD roundRectangle(const Point &upperLeftPoint,const Point &lowerRightPoint,DWORD width,DWORD height); + + +// device.circle(cPoint,7,RGBColor(255,255,255)); +// device.floodFill(cPoint,RGBColor(231,33,33),RGBColor(0,0,0)); + +//,5,RGBColor(231,33,33) +/* + WORD circle(Window &displayWindow,const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const; + WORD circle(const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const; + WORD crossHair(const Point &midPoint,WORD sectionlength,const Pen &somePen); + WORD crossHairs(PureVector &midPoints,WORD sectionLength,const Pen &somePen); + WORD crossHairs(PureVector &midPoints,WORD sectionLength,RGBColor rgbColor); + WORD floodFill(const Point &xyPoint,const RGBColor &fillColor,const RGBColor &boundaryColor)const; +*/ + + + +/* +void GUIFretboard::setNote(const TabEntry &entry) +{ + int offsetWidth=mCellWidth/OutlineRatio; + int offsetHeight=mCellHeight/OutlineRatio; + + clearNotes(); + for(int index=0;indexcolorRect(fillRect,FillColorBlack); + mParent->invalidate(fillRect,false); + } + mParent->update(); +} +*/ + + + +void GUIFretboard::createVirtualFretboard(void) +{ +/* + SmartPointer activeFret; + PurePalette systemPalette; + int xStart=LeftBorder; + int yStart=TopBorder; + + mCellWidth=(mParent->width()-(LeftBorder+RightBorder+StockBorder+WindowBorder))/mFrets; + mCellHeight=(mParent->height()-(TopBorder+BottomBorder+(WindowBorder/2)))/DefaultStrings; + size(mTuning.size()); + systemPalette.systemPalette(); + PureDevice pureDevice(*mParent); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + if(!frIndex)x+=mCellWidth+StockBorder; + else x+=mCellWidth; + } + yStart+=mCellHeight; + } + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,mParent->width(),mParent->height(),systemPalette); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->setBits(255); +*/ + + SmartPointer activeFret; +// PurePalette systemPalette; +// int xStart=LeftBorder; +// int yStart=TopBorder; + +// mCellWidth=(mParent->width()-(LeftBorder+RightBorder+StockBorder+WindowBorder))/mFrets; +// mCellHeight=(mParent->height()-(TopBorder+BottomBorder+(WindowBorder/2)))/DefaultStrings; + size(mTuning.size()); +// systemPalette.systemPalette(); +// PureDevice pureDevice(*mParent); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } +// if(!frIndex)x+=mCellWidth+StockBorder; +// else x+=mCellWidth; + } +// yStart+=mCellHeight; + } +// if(mDIBitmap.isOkay())mDIBitmap.destroy(); +// mDIBitmap=::new DIBitmap(pureDevice,mParent->width(),mParent->height(),systemPalette); +// mDIBitmap.disposition(PointerDisposition::Delete); +// mDIBitmap->setBits(255); + + + + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + + + + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + hasFocus(true); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new MIDIOutputDevice(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// mParent->setCapture(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::killFocusHandler"); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + GlobalDefs::outDebug("[TabPage::killFocusHandler] Clearing last update region"); + isInOutline(false); + clearUpdate(); + } +// mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + if(isInPlay()) // if we're playing the tab just let go of the capture + { +// mParent->releaseCapture(); + return false; + } +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { +// mParent->releaseCapture(); // let go of the capture + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } +// else if(!mParent->hasCapture())mParent->setCapture(); // user is moving withing the tab window, make sure we have the capture + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } +// if(mParent->hasCapture())mParent->releaseCapture(); // if we've got the capture, then let it go + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + currEntryIndex(entryIndex); + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + if(mMIDIDevice.isOkay()&&mMIDIDevice->hasDevice())entry.play(*mMIDIDevice,0,false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + + + + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + hasFocus(true); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new MIDIOutputDevice(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// mParent->setCapture(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::killFocusHandler"); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + GlobalDefs::outDebug("[TabPage::killFocusHandler] Clearing last update region"); + isInOutline(false); + clearUpdate(); + } +// mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + if(isInPlay()) // if we're playing the tab just let go of the capture + { +// mParent->releaseCapture(); + return false; + } +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { +// mParent->releaseCapture(); // let go of the capture + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } +// else if(!mParent->hasCapture())mParent->setCapture(); // user is moving withing the tab window, make sure we have the capture + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } +// if(mParent->hasCapture())mParent->releaseCapture(); // if we've got the capture, then let it go + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + currEntryIndex(entryIndex); + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + if(mMIDIDevice.isOkay()&&mMIDIDevice->hasDevice())entry.play(*mMIDIDevice,0,false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + + +// mChordList->insertString(strResource.betweenString(0,'[').+strResource.betweenString(']',0)); +// mChordList->insertString(strResource.betweenString(0,'[')+String("(")+strResource.betweenString('(',')')+String(")")); + + + +int LineParser::getElement(int &num) +{ + char ch; + num=-1; + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch))num=ch-48; + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch)num=0; // instead of zero some tabs have an alpha 'O' - for (O)pen. + else if('p'==ch||'P'==ch)return 0; // pull-off + else if('b'==ch||'B'==ch)return 0; // bend + else if('h'==ch||'H'==ch)return 0; // hammer-on + else if('r'==ch||'R'==ch)return 0; // release previous bend + else return 0; // or any other inflections yet. + } + else if('\\'==ch)return 0; // slide-down + else if('/'==ch)return 0; // slide-up + else if('^'==ch)return 0; // bend + else return 0; + ch=charAt(mPosition); + if(!::isdigit(ch))return 1; + mPosition++; + num=(num*10)+(ch-48); + return 1; +} + + + int getElement(int &num); + + + +/* +// if(validate(element[0])) +// { +// if(Element::Pick==element[0].getAction()&&Fretboard::isValidFret(element[0].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(5,element[0].getFret()),5,element[0].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(5,element[0].getFret()),5,element[0].getFret())); + } + if(validate(element[1])) + { +// if(Element::Pick==element[1].getAction()&&Fretboard::isValidFret(element[1].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(4,element[1].getFret()),4,element[1].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(4,element[1].getFret()),4,element[1].getFret())); + } + if(validate(element[2])) + { +// if(Element::Pick==element[2].getAction()&&Fretboard::isValidFret(element[2].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(3,element[2].getFret()),3,element[2].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(3,element[2].getFret()),3,element[2].getFret())); + } +// if(Element::Pick==element[3].getAction()&&Fretboard::isValidFret(element[3].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(2,element[3].getFret()),2,element[3].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(2,element[3].getFret()),2,element[3].getFret())); +// } +// if(Element::Pick==element[4].getAction()&&Fretboard::isValidFret(element[4].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(1,element[4].getFret()),1,element[4].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(1,element[4].getFret()),1,element[4].getFret())); +// } +// if(Element::Pick==element[5].getAction()&&Fretboard::isValidFret(element[5].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(0,element[5].getFret()),0,element[5].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(0,element[5].getFret()),0,element[5].getFret())); +// } +*/ + + + +void TabLines::synchronize(void) +{ + int maxPos; + int index; + + for(index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;indexmaxPos)maxPos=operator[](1).getPosition(); + if(operator[](2).getPosition()>maxPos)maxPos=operator[](2).getPosition(); + if(operator[](3).getPosition()>maxPos)maxPos=operator[](3).getPosition(); + if(operator[](4).getPosition()>maxPos)maxPos=operator[](4).getPosition(); + if(operator[](5).getPosition()>maxPos)maxPos=operator[](5).getPosition(); + while(operator[](0).getPosition()!=maxPos)(operator[](0))++; + while(operator[](1).getPosition()!=maxPos)(operator[](1))++; + while(operator[](2).getPosition()!=maxPos)(operator[](2))++; + while(operator[](3).getPosition()!=maxPos)(operator[](3))++; + while(operator[](4).getPosition()!=maxPos)(operator[](4))++; + while(operator[](5).getPosition()!=maxPos)(operator[](5))++; +*/ +} + + + + + +/* +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0 + + if(lineLength>=2&&(strLine.charAt(0)=='e'||strLine.charAt(0)=='E')&&(strLine.charAt(1)==':'||strLine.charAt(1)=='|')) + { + startElement=2; + return true; + } + if(lineLength>=2&&strLine.charAt(0)=='|'&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==':'&&(::isalnum(strLine.charAt(1))||strLine.charAt(1)=='-')) + { + startElement=1; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==':'&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='E'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=1&&strLine.charAt(0)=='-') + { + startElement=0; + return true; + } + if(lineLength>=5&&strLine.charAt(0)==' '&&strLine.charAt(1)==' '&&(strLine.charAt(2)=='E'||strLine.charAt(2)=='e')&&strLine.charAt(3)==' '&&strLine.charAt(4)=='|') + { + startElement=5; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==' '&&strLine.charAt(1)=='|') + { + startElement=2; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==' '&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=4&&strLine.charAt(0)==' '&&strLine.charAt(1)==' '&&strLine.charAt(2)=='I'&&strLine.charAt(3)=='-') + { + startElement=3; + return true; + } + if(lineLength>=3&&strLine.charAt(0)==' '&&strLine.charAt(1)=='E'&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=2&&strLine.charAt(0)=='E'&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='E'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='|'&&strLine.charAt(3)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='E'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='|'&&strLine.charAt(3)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='e'&&strLine.charAt(1)==']'&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)==':'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)==' '&&strLine.charAt(1)==' '&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&::isdigit(strLine.charAt(0))&&strLine.strstr("-")) + { + startElement=0; + return true; + } + return false; +} +*/ + + + + + + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + +// element.setAction(Element::PullOff); // pull-off +// element.setFret(-1); // references previous note +// return 0; // return not-handled + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + +// element.setAction(Action::Bend); // bend +// element.setFret(-1); // references next note +// return 0; // return not-handled + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + +// element.setAction(Element::HammerOn); // hammer-on +// element.setFret(-1); // references next note +// return 0; // return not-handled + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + +// element.setAction(Action::SlideDown); // slide down +// element.setFret(-1); // no referenced fret +// return 0; // return not-handled + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + +// element.setAction(Action::SlideUp); // slide up +// element.setFret(-1); // no referenced fret +// return 0; // return not-handled + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + if(!::isdigit(ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + + + +bool TabLines::haveElement(TabElement &elements)const +{ + for(int index=0;index +#include +#include +#include +#include + +/* MIDIOutputDevice midiDevice; + +// 0 acoustic grand piano +// 1 bright acoustic piano +// 2 electric grand piano +// 24 acoustic guitar nylon +// 25 acoustic guitar steel +// 26 jazz electric +// 27 clean electric +// 28 muted electric +// 29 overdriven guitar +// 30 distorted guitar + + +// for(int index=51;index<127;index++) +// { + int index=2; + midiDevice.midiEvent(ChannelModeMessage(ChannelModeMessage::Sustain).getEvent(0,0,-127)); +// midiDevice.midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); + + + midiDevice.midiEvent(ProgramChange(index).getEvent()); + IonianScale scale(Note::C); + scale.play(midiDevice); +// } + return 0; */ + + + + +inline +void TabEntry::delay(int offsetDelay) +{ + int actualDelay=Timing::getDelay(mNoteType); +// int actualDelay=Timing::getDelay(mNoteType)-offsetDelay; +// if(actualDelay<=0)return; + GlobalDefs::outDebug("[TabEntry::delay]"+String().fromInt(actualDelay)); + ::Sleep(actualDelay); +} + + + + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining +// mMIDIDevice->clearNotes(); // smk + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining +// mMIDIDevice->clearNotes(); // smk + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + currEntryIndex(entryIndex); + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); +// mMIDIDevice->clearNotes(); // smk + if(mMIDIDevice.isOkay()&&mMIDIDevice->hasDevice())entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); +// mMIDIDevice->clearNotes(); // smk + } + return false; +} + + + +// void parseTiming(const String &strLine); +// else if(strLine.betweenString(0,'=')==String("TEMPO"))parseTiming(strLine); +//void Tablature::parseTiming(const String &strLine) +//{ +// Timing::microsecondsPerQuarterNote(strLine.betweenString('=',0).toInt()); +//} +// outFile.writeLine(String("TEMPO=")+String().fromInt(Timing::microsecondsPerQuarterNote())); + + + +/*bool TabPage::insert(const TabEntry &entry) +{ + mTabEntries.insert(&entry); + return true; +}*/ + +/*void TabPage::remove(const TabEntry &entry) +{ + bool removed=false; + for(int index=0;index mPrinters; + +bool getPrinters(void) +{ + String strPrinterKey("System\\CurrentControlSet\\Control\\Print\\Printers"); + String strDefaultPrinter; +// RegKey cfgKey(RegKey::CurrentConfig); + RegKey cfgKey(RegKey::LocalMachine); + Printer printer; + String strPrinter; + int enumKey(0); + + mPrinters.remove(); + if(!cfgKey.openKey(strPrinterKey))return FALSE; + cfgKey.queryValue("Default",strDefaultPrinter); +// if(getPrinter(strPrinterKey+String("\\")+strDefaultPrinter,printer))mDefaultPrinter=printer; + while(TRUE) + { + if(!cfgKey.enumKey(enumKey++,strPrinter))break; + if(getPrinter(strPrinterKey+String("\\")+strPrinter,printer))mPrinters.insert(&printer); + } + cfgKey.closeKey(); + return TRUE; +} + +bool getPrinter(String &strPrinterKey,Printer &printer) +{ + RegKey mchKey(RegKey::LocalMachine); + String strPrinterNameKey("Name"); + String strPrinterDriverKey("Printer Driver"); + String strPrinterPortKey("Port"); + String strQuery; + + if(!mchKey.openKey(strPrinterKey))return FALSE; + mchKey.queryValue(strPrinterNameKey,strQuery); + printer.printerName(strQuery); + mchKey.queryValue(strPrinterDriverKey,strQuery); + printer.driverName(strQuery); + mchKey.queryValue(strPrinterPortKey,strQuery); + printer.portName(strQuery); + mchKey.closeKey(); + return TRUE; +} + + + getPrinters(); + return 0; + + +#include +#include + + + + + + +/* +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)mRedBrush); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(RGBColor(255,255,255)); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} +*/ + + + + +#include +#include +#include + + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + IonianScale ionianScale(Note::G); + degreeI=ionianScale.getDegree(Scale::I); + degreeIII=ionianScale.getDegree(Scale::III); + degreeV=ionianScale.getDegree(Scale::V); + degreeVII=ionianScale.getDegree(Scale::VII); + GlobalDefs::outDebug(String("I:")+degreeI.toString()); + GlobalDefs::outDebug(String("III:")+degreeIII.toString()); + GlobalDefs::outDebug(String("V:")+degreeV.toString()); + GlobalDefs::outDebug(String("VII:")+degreeVII.toString()); + +// return 0; + + +// STRING_21747 "G or Gmaj [x 10 12 12 12 10] (D G B)" + + +/* Notes notes; + notes.size(3); + notes[0]=Note::D; + notes[1]=Note::CSh; + notes[2]=Note::A; + GlobalDefs::outDebug(notes.toString()); + notes.sort(); + GlobalDefs::outDebug(notes.toString()); +*/ + + + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + if(isInPlay()) + { + setCancelled(true); + return false; + } + + +/* + TabDialog tabDialog; + + GlobalDefs::outDebug("TabPage::leftButtonDownHandler"); + if(isInPlay())setCancelled(true); + + if(!isInOutline()||isInPlay())return false; + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + TabEntry &entry=mTabEntries[currEntryIndex()]; + keepOutline(true); + if(tabDialog.perform(*mParent,mTabEntries,currEntryIndex(),mousePoint))isDirty(true); + keepOutline(false); + GDIPoint point(mousePoint.x(),mousePoint.y()); + mParent->clientToScreen(point); + ::SetCursorPos(point.x(),point.y()); +*/ + return false; +} + + + +/* + GlobalDefs::outDebug(ptr); + String strItem=ptr; + char *pItem=strItem.str(); + + FrettedNote frettedNote; + + pItem=::strtok(pItem,"="); + pItem=::strtok(0," "); + frettedNote.setString(::atoi(pItem)); + + + + + pItem=::strtok(0,"="); + pItem=::strtok(0," "); + frettedNote.setFret(::atoi(pItem)); + + pItem=::strtok(0,"="); + pItem=::strtok(0," "); + frettedNote.setNote(fretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + + pItem=::strtok(0,"="); + pItem=::strtok(0,"]"); + frettedNote.setAction(Action().fromString(pItem)); + + GlobalDefs::outDebug(frettedNote.toString()); + insert(&frettedNote); + */ + + + + + +/* + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + Array outLines; + int outIndex; + outIndex=0; + + if(pathFileTablature.isNull())return false; + if(!outFile.open(pathFileTablature,"wb"))return false; + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + + initLines(outLines,BufferLength); + setHeader(outLines,outIndex); + + for(int index=0;indexMaxChars) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outLines,outFile); + outFile.writeLine(String(" ")); + initLines(outLines,BufferLength); + setHeader(outLines,outIndex); + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndex &outLines,File &outFile) +{ + for(int index=0;index<6;index++)outFile.writeLine(outLines[index]); +} + +void TabWriter::initLines(Array &outLines,int size) +{ + outLines.size(6); + for(int line=0;line<6;line++) + { + outLines[line].reserve(size,true); + for(int charIndex=0;charIndex &outLines,int &outIndex) +{ + outIndex=0; + outLines[0].setAt(outIndex,'E'); + outLines[1].setAt(outIndex,'B'); + outLines[2].setAt(outIndex,'G'); + outLines[3].setAt(outIndex,'D'); + outLines[4].setAt(outIndex,'A'); + outLines[5].setAt(outIndex,'E'); + outIndex++; + outLines[0].setAt(outIndex,'|'); + outLines[1].setAt(outIndex,'|'); + outLines[2].setAt(outIndex,'|'); + outLines[3].setAt(outIndex,'|'); + outLines[4].setAt(outIndex,'|'); + outLines[5].setAt(outIndex,'|'); + outIndex++; + outLines[0].setAt(outIndex,'-'); + outLines[1].setAt(outIndex,'-'); + outLines[2].setAt(outIndex,'-'); + outLines[3].setAt(outIndex,'-'); + outLines[4].setAt(outIndex,'-'); + outLines[5].setAt(outIndex,'-'); + outIndex++; +} + + +*/ + + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + + + +bool Tablature::saveProject(const String &pathFileName) +{ +// String strPathFileName; + File outFile; + + if(pathFileName.isNull())return false; + mPathFileProject=pathFileName; + if(!outFile.open(pathFileName,"wb"))return false; +// if(pathFileName.isNull())strPathFileName=mPathFileProject; +// else strPathFileName=pathFileName; +// if(!outFile.open(strPathFileName,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(getPathFileTablature().isNull())outFile.writeLine("TABLATURE="); + else + { + String strFileTablature; + Profile::makeFileName(getPathFileTablature(),strFileTablature); + outFile.writeLine(String("TABLATURE=")+strFileTablature); + } + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;index=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + +/* + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) +*/ + + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + +// if(!::isdigit(ch)) +// { +// element.setAction(Action::Pick); // fretted note +// return 1; // return handled +// } + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + + + +/* + + Rect outlineRect; + Point clickPoint; + getOutlineRect(mCurrEntryIndex,outlineRect); + clickPoint.x(someCallbackData.loWord()); + clickPoint.y(someCallbackData.hiWord()); + ::OutputDebugString(clickPoint.toString()+String("\n")); + ::OutputDebugString(outlineRect.toString()+String("\n")); + + distanceMap[abs(clickPoint.y()-outlineRect.top())]=6; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=1; + + map::iterator minItem=distanceMap.begin(); + int minValue=(*minItem).first; + int minString=(*minItem).second; + ::OutputDebugString(String("Closest string is:")+String().fromInt(minString)+String("\n")); +*/ + + + ::OutputDebugString(String("Closest string is:")+String().fromInt(nearestString)+String("\n")); + + + +bool TabPage::modifyProperties(void) +{ + TabDialog tabDialog; + POINT cursorPoint; + + GlobalDefs::outDebug(String("[TabPage::modifyProperties]"),GlobalDefs::Debug); + if(!isInOutline()||isInPlay())return false; + ::GetCursorPos(&cursorPoint); + GDIPoint mousePoint(cursorPoint.x,cursorPoint.y); +// mParent->screenToClient(mousePoint); + TabEntry &entry=mTabEntries[currEntryIndex()]; + keepOutline(true); + if(tabDialog.perform(*mParent,mTabEntries,currEntryIndex(),mousePoint))isDirty(true); + keepOutline(false); +// mParent->clientToScreen(mousePoint); + ::SetCursorPos(mousePoint.x(),mousePoint.y()); + return true; +} + + +/* + LRESULT currSel; + String selText; + bool applyRemainder; + + currSel=sendMessage(TABENTRY_NOTETYPE,CB_GETCURSEL,0,0L); + sendMessage(TABENTRY_NOTETYPE,CB_GETLBTEXT,currSel,(LPARAM)selText.str()); + applyRemainder=sendMessage(TABENTRY_REMAINDER,BM_GETCHECK,0,0L); + NoteType noteType(NoteType().fromString(selText)); + if(applyRemainder) + { + for(int index=mCurrEntryIndex;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); +// entry.setNoteType(NoteType().fromString(selText)); + + + +/* +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + FretDialog fretDialog; + Point clickPoint; + int selectedString; + clickPoint.x(someCallbackData.loWord()); + clickPoint.y(someCallbackData.hiWord()); + if(!getNearestString(clickPoint,selectedString))return false; + + + keepOutline(true); + if(fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex)) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return false; +} +*/ + + + +// if(!mTabEntries.size()) +// { +// mTabEntries.insert(&entry); +// currEntryIndex(0); +// } +// else mTabEntries.insertAfter(currEntryIndex(),&entry); +// isDirty(true); +// update(*mParent); +// mParent->invalidate(true); +// mParent->update(); +// showCurrent(); +// return true; + + + + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) + { + Rect outlineRect; + clearUpdate(); + mTabEntries.insert(&TabEntry()); + mCurrEntryIndex=mTabEntries.size()-1; +// getOutlineRect(mCurrEntryIndex,outlineRect); +// showCurrent(); + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + clearUpdate(); + showCurrent(); + getOutlineRect(mCurrEntryIndex,outlineRect); + ::SetCaretPos(outlineRect.left(),outlineRect.top()); + } + + +/* +void MainFrame::handleFileNew(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + createProjectView(strPathTabFile); +} +*/ + + + +/* +bool TabEntry::setFret(int string,int fret) +{ + int entryIndex; + if(!contains(string,entryIndex))return false; + operator[](entryIndex).setFret(fret); + return true; +} + +bool TabEntry::add(int string,int fret) +{ + Fretboard fretboard; + FrettedNote frettedNote(fretboard.getAt(string,fret),string,fret); + insert(&frettedNote); + return true; +} + +*/ + + + + + +// PureNote pureNote(pureEvent.firstData(),pureEvent.secondData()); +// Note note(pureNote); +// fretboard.getAt(note,frettedNote); + +// ::OutputDebugString(note.toString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + +// TabEntry entry; +// entry.insert(&frettedNote); + + + +// tabEntries[pureEvent.channel()].insert(&entry); + + + + + + +#ifndef _GUITAR_MIDIHELPER_HPP_ +#define _GUITAR_MIDIHELPER_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIDATA_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + static void import(const String &musicFileName); +private: +}; + +void MIDIHelper::import(const String &musicFileName) +{ +// String musicFileName("D:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); + String musicFileName("D:\\WORK\\GUITAR\\MIDI\\2112.mid"); +// String musicFileName("C:\\WINNT\\MEDIA\\PASSPORT.MID"); +// String musicFileName("D:\\WORK\\GUITAR\\MIDI\\PACO.MID"); + + WORD currPlayTime=0; + WORD prevPlayTime=0; + + Fretboard fretboard; + TabEntries tabEntries; + Tablature tablature; + +// Array eventBlock; +// Block frettedNotes; + Block tracks; + Block notes; +// TabEntry entry; +// bool found; + + MidiData midiData(musicFileName); + midiData.makeRealTime(); +// midiData.combineTracks(eventBlock); + + midiData.getTracks(tracks); + if(!tracks.size())return; + WORD maxEvents=0; + int currentTrack; + for(int trIndex=0;trIndexmaxEvents) + { + maxEvents=midiData.getEventCount(tracks[trIndex].getValue()); + currentTrack=tracks[trIndex].getValue(); + } + } + + + + FrettedNote frettedNote; +// PureNote pureNote; +// Note note; + +// entry.remove(); + + for(int index=0;index=highestOctave)note.setOctave(highestOctave-1); + fretboard.getAt(note,frettedNotes); + } + found=false; + for(int fnIndex=0;fnIndex +#include + +void MIDIHelper::import(const String &musicFileName) +{ + TabEntries tabEntries; + Tablature tablature; + TabEntry entry; + WORD currPlayTime; + WORD prevPlayTime; + + mMessages.remove(); + currPlayTime=0; + prevPlayTime=0; + + + Block tracks; + Block notes; + +// ::OutputDebugString(mFretboard.toString()); + + + MidiData midiData(musicFileName); + midiData.makeRealTime(); +// midiData.combineTracks(eventBlock); + midiData.getTracks(tracks); + if(!tracks.size())return; + WORD maxEvents=0; + int currentTrack; + + for(int trIndex=0;trIndexmaxEvents) + { + maxEvents=midiData.getEventCount(tracks[trIndex].getValue()); + currentTrack=tracks[trIndex].getValue(); + } + } + + for(int index=0;index ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + + notePaths.size(notes.size()); + + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex=highestOctave)note.setOctave(highestOctave-1); + fretboard.getAt(note,frettedNotes); + } + found=false; + for(int fnIndex=0;fnIndex=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + +// mParent->clientToScreen(outlineRect); +// cursorPos.x(outlineRect.left()); +// ::SetCursorPos(cursorPos.x(),cursorPos.y()); + +/* Rect outlineRect; + GDIPoint cursorPos; + + ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + mTabEntries.insert(&TabEntry()); + mCurrEntryIndex=mTabEntries.size()-1; + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + clearUpdate(); + showCurrent(); + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); */ + } +/* else if(keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + } */ + GlobalDefs::outDebug(String("Key Code=")+String().fromInt(keyData.virtualKey())); + return false; +} + + + void removeHistory(const String &pathFileName); + +void MainFrame::removeHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.removeHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); +// removeHistory(strPathProjectFile); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + + +//#define IDR_ACCELERATOR1 104 +//#define IDD_DIALOG1 105 + + + +/* + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName) +{ + String tabFileName; + TabEntries tabEntries; + Tablature tablature; + TabEntry entry; + WORD currPlayTime; + WORD prevPlayTime; + Block tracks; + Block notes; + + if(strPathMidiFileName.isNull()||strPathTabFileName.isNull())return false; +// if(midiFileName.isNull())return; +// tabFileName=Profile::removeExtension(midiFileName)+String(".tab"); + + mMessages.remove(); + currPlayTime=0; + prevPlayTime=0; + +// ::OutputDebugString(mFretboard.toString()); +// MidiData midiData(midiFileName); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); +// midiData.combineTracks(eventBlock); + midiData.getTracks(tracks); + if(!tracks.size())return false; + WORD maxEvents=0; + int currentTrack; + + for(int trIndex=0;trIndexmaxEvents) + { + maxEvents=midiData.getEventCount(tracks[trIndex].getValue()); + currentTrack=tracks[trIndex].getValue(); + } + } + + for(int index=0;index + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ +// MidiData midiData("D:\\WORK\\GUITAR\\MIDI\\2112.mid"); +// midiData.play(); + + +/* +// String musicFileName("D:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); + String musicFileName("D:\\WORK\\GUITAR\\MIDI\\2112.mid"); +// String musicFileName("C:\\WINNT\\MEDIA\\PASSPORT.MID"); +// String musicFileName("D:\\WORK\\GUITAR\\MIDI\\PACO.MID"); + + + + MIDIHelper midiHelper; + midiHelper.import(musicFileName); + + return 0; +*/ + + MainFrame mainFrame; + VersionInfo versionInfo; + + if(lpszCmdLine&&!(String(lpszCmdLine)=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + String str=versionInfo.getProductVersion(); + GlobalDefs::setLogLevel(GlobalDefs::Debug); +// GlobalDefs::setLogFile("TabMaster.log"); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); +} + + + + VersionInfo versionInfo; + SystemTime currDate; + String strVersion; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return true; + SystemTime expireDate(mIssueDate); + expireDate.daysAdd360(mDayCount); + if(expireDate>currDate)return false; + return true; + + + + + + +/* +#include +#include +#include +#include + +void proto(void) +{ + if(!Registration::getInstance().hasLicense()) + { + if(Registration::getInstance().hasGID()) + { + ::OutputDebugString("User deleted license, prompt for new one, exit if none entered.\n"); + return; + } + else + { + License license; + Registration::getInstance().create30DayLicense(); + Registration::getInstance().getLicense(license); + ::OutputDebugString(String("Created 30 day license.")+String("There are ")+String().fromInt(license.getRemainingDays())+String(" days remaining\n")); + } + } + else + { + License license; + Registration::getInstance().getLicense(license); + if(!license.isValid()) + { + ::OutputDebugString("The license is no longer valid, please enter a valid license.\n"); + return; + } + else + { + if(!license.isExpiring())::OutputDebugString("Permanent license was accepted.\n"); + else ::OutputDebugString(String("License accepted. ")+String("There are ")+String().fromInt(license.getRemainingDays())+String(" days remaining.\n")); + return; + } + } +} +*/ + + + +LICENSEDIALOG DIALOGEX 0, 0, 223, 135 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "License Helper" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT LICENSE_DIALOG_LICENSE,2,117,215,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,154,2,65,14 + PUSHBUTTON "Cancel",IDCANCEL,154,17,65,14 + LTEXT "If you have received a new license, copy the license exactly as you", + IDC_STATIC,5,67,214,8 + LTEXT "You are seeing this because you have an invalid or expired License.", + IDC_STATIC,5,53,216,8 + LTEXT "received it and paste it below.",IDC_STATIC,5,80,95,8 + LTEXT "You can request a new license by",IDC_STATIC,104,80,108, + 8 + LTEXT "choosing the ""Request License"" button above.", + IDC_STATIC,5,93,210,8 + PUSHBUTTON "Request License",LICENSE_DIALOG_REQUEST_LICENSE,154,32, + 65,14 +END + + + + + +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + ::OutputDebugString(encodeNumeric(lineString)+String("\n")); + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + ::OutputDebugString(encodeNumeric(strLine)+String("\n")); + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + +String UUTool::decode(Array &bytes) // strLine +{ +// int stringLength=strLine.length(); + int stringLength=bytes.size(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); +// ptrBuff=strLine.str(); + ptrBuff=(char*)&bytes[0]; + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + if(ch>=100) + { + ::OutputDebugString(">=100"); + // ::DebugBreak(); + } +// (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// (*ptrLine++)=ch; + } + else if(n>=3) + { + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// if(ch>=100)::OutputDebugString(">=100"); +// (*ptrLine++)=ch; + } + } + } + return lineString; +} + + +String UUTool::encodeNumeric(String strEncode) +{ + String strNumeric; + String strHex; + for(int index=0;index +#include +#include + +void proto(); +void proto2(); + +String encodeNumeric(String strLine); + + + +// Registration::getInstance().generatePermanentLicense(); +// Version 2.00 must have permanent license. +// if(!Registration::getInstance().hasLicense()&&!Registration::getInstance().hasGID()) +// Registration::getInstance().create15DayLicense(); + +// if(!()) lpszCmdLine&&!(String(lpszCmdLine)=="NOLOGO")) + + + + +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + } + prepareDevice(device,false); +// if(play)((TabEntry&)entry).play(mSequencer->getDevice()); +} + + + + + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +/* if(!mMIDIDevice->getDevice().hasDevice()) + mMIDIDevice->getDevice().openDevice(); + for(int index=0;indexgetDevice()); + } +*/ +} + + + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); +// showScale(); + return (CallbackData::ReturnType)FALSE; +} + + + + +bool TabPage::insert(const TabEntries &entries) +{ + GlobalDefs::outDebug("[TabPage::insert]TabEntries",GlobalDefs::Debug); + if(!entries.size())return false; + for(int index=0;indexinvalidate(true); + mParent->update(); + showCurrent(); + + return true; +} + + + +/* +bool Fretboard::getAt(const Music::Chord &chord,Block &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes)) + frettedNotes.insert(&frettedNote); + else returnCode=false; + } + return returnCode; +} +*/ diff --git a/guitar/backup/20030731/settingsdlg.cpp b/guitar/backup/20030731/settingsdlg.cpp new file mode 100644 index 0000000..24c95e5 --- /dev/null +++ b/guitar/backup/20030731/settingsdlg.cpp @@ -0,0 +1,251 @@ +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(void) +{ + mInitHandler.setCallback(this,&SettingsDialog::initHandler); + mCreateHandler.setCallback(this,&SettingsDialog::createHandler); + mCloseHandler.setCallback(this,&SettingsDialog::closeHandler); + mDestroyHandler.setCallback(this,&SettingsDialog::destroyHandler); + mCommandHandler.setCallback(this,&SettingsDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog::SettingsDialog(const SettingsDialog &someSettingsDialog) +{ // private implementation + *this=someSettingsDialog; +} + +SettingsDialog::~SettingsDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog &SettingsDialog::operator=(const SettingsDialog &someSettingsDialog) +{ // private implementation + return *this; +} + +bool SettingsDialog::perform(GUIWindow &parentWindow) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"SETTINGSDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SettingsDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + initialize(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType SettingsDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + apply(); + break; + case SETTINGS_DEFAULTS : + selectDefaults(); + } + if(someCallbackData.wmCommandCommand()==BN_CLICKED) + { + handleInstrumentSelect(someCallbackData); + } + return (CallbackData::ReturnType)FALSE; +} + +void SettingsDialog::initialize(void) +{ + Registry registry; + + selectTiming(registry.getMicrosecondsPerQuarterNote()); + selectInstrument(registry.getInstrument()); + selectAction(registry.getShowAction()); + selectShowNotes(registry.getShowNotes()); + selectMIDIOutputDevice(registry.getMIDIOutputDevice()); +} + +void SettingsDialog::handleInstrumentSelect(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case SETTINGS_ACOUSTICGRANDPIANO : + selectInstrument(AcousticGrandPiano); + break; + case SETTINGS_BRIGHTACOUSTICPIANO : + selectInstrument(BrightAcousticPiano); + break; + case SETTINGS_ELECTRICGRANDPIANO : + selectInstrument(ElectricGrandPiano); + break; + case SETTINGS_ACOUSTICNYLON : + selectInstrument(AcousticGuitarNylon); + break; + case SETTINGS_ACOUSTICSTEEL : + selectInstrument(AcousticGuitarSteel); + break; + case SETTINGS_JAZZELECTRIC : + selectInstrument(JazzGuitarElectric); + break; + case SETTINGS_CLEANELECTRIC : + selectInstrument(CleanGuitarElectric); + break; + case SETTINGS_MUTEDELECTRIC : + selectInstrument(MutedGuitarElectric); + break; + default : + break; + } +} + +void SettingsDialog::selectInstrument(Instrument instrument) +{ + if(AcousticGrandPiano==instrument)sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_SETCHECK,0,0); + if(BrightAcousticPiano==instrument)sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_SETCHECK,0,0); + if(ElectricGrandPiano==instrument)sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_SETCHECK,0,0); + if(AcousticGuitarNylon==instrument)sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICNYLON,BM_SETCHECK,0,0); + if(AcousticGuitarSteel==instrument)sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_ACOUSTICSTEEL,BM_SETCHECK,0,0); + if(JazzGuitarElectric==instrument)sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_JAZZELECTRIC,BM_SETCHECK,0,0); + if(CleanGuitarElectric==instrument)sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_CLEANELECTRIC,BM_SETCHECK,0,0); + if(MutedGuitarElectric==instrument)sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,1,0); + else sendMessage(SETTINGS_MUTEDELECTRIC,BM_SETCHECK,0,0); +} + +Instrument SettingsDialog::getInstrument(void) +{ + if(sendMessage(SETTINGS_ACOUSTICGRANDPIANO,BM_GETCHECK,0,0))return AcousticGrandPiano; + if(sendMessage(SETTINGS_BRIGHTACOUSTICPIANO,BM_GETCHECK,0,0))return BrightAcousticPiano; + if(sendMessage(SETTINGS_ELECTRICGRANDPIANO,BM_GETCHECK,0,0))return ElectricGrandPiano; + if(sendMessage(SETTINGS_ACOUSTICNYLON,BM_GETCHECK,0,0))return AcousticGuitarNylon; + if(sendMessage(SETTINGS_ACOUSTICSTEEL,BM_GETCHECK,0,0))return AcousticGuitarSteel; + if(sendMessage(SETTINGS_JAZZELECTRIC,BM_GETCHECK,0,0))return JazzGuitarElectric; + if(sendMessage(SETTINGS_CLEANELECTRIC,BM_GETCHECK,0,0))return CleanGuitarElectric; + if(sendMessage(SETTINGS_MUTEDELECTRIC,BM_GETCHECK,0,0))return MutedGuitarElectric; + return Instrument(GlobalDefs::Program); +} + +bool SettingsDialog::getAction(void) +{ + return sendMessage(SETTINGS_SHOWACTION,BM_GETCHECK,0,0); +} + +bool SettingsDialog::getShowNotes(void) +{ + return sendMessage(SETTINGS_SHOWNOTES,BM_GETCHECK,0,0); +} + +int SettingsDialog::getTiming(void) +{ + String strText; + + getText(SETTINGS_MICROSECSPERQTRNOTE,strText); + return strText.toInt(); +} + +String SettingsDialog::getMIDIOutputDevice(void) +{ + int currentSelection; + String midiOutputDevice; + + currentSelection=sendMessage(SETTINGS_MIDIOUT,CB_GETCURSEL,0,0L); + sendMessage(SETTINGS_MIDIOUT,CB_GETLBTEXT,currentSelection,(LPARAM)midiOutputDevice.str()); + return midiOutputDevice; +} + +void SettingsDialog::selectDefaults() +{ + selectInstrument(Instrument(GlobalDefs::Program)); + selectTiming(GlobalDefs::MicrosecondsPerQuarterNote); + selectAction(GlobalDefs::ShowAction); + selectShowNotes(GlobalDefs::ShowNotes); +} + +void SettingsDialog::selectTiming(int timing) +{ + setText(SETTINGS_MICROSECSPERQTRNOTE,String().fromInt(timing)); +} + +void SettingsDialog::selectAction(bool action) +{ + sendMessage(SETTINGS_SHOWACTION,BM_SETCHECK,action,0); +} + +void SettingsDialog::selectShowNotes(bool showNotes) +{ + sendMessage(SETTINGS_SHOWNOTES,BM_SETCHECK,showNotes,0); +} + +void SettingsDialog::selectMIDIOutputDevice(const String &midiOutputDeviceName) +{ + Block deviceNames; + int currentSelection=-1; + + MIDIOutputDevice::getDeviceNames(deviceNames); + sendMessage(SETTINGS_MIDIOUT,CB_RESETCONTENT,0,0L); + deviceNames.insert(&String("MIDIMAPPER")); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class SettingsDialog : public DWindow +{ +public: + SettingsDialog(void); + virtual ~SettingsDialog(); + bool perform(GUIWindow &parentWindow); +private: + SettingsDialog(const SettingsDialog &someSettingsDialog); + SettingsDialog &operator=(const SettingsDialog &someSettingsDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void initialize(void); + void selectInstrument(Instrument instrument); + void selectDefaults(void); + void selectTiming(int timing); + void selectAction(bool action); + void selectShowNotes(bool showNotes); + void selectMIDIOutputDevice(const String &midiOutputDevice); + void handleInstrumentSelect(CallbackData &someCallbackData); + String getMIDIOutputDevice(void); + Instrument getInstrument(void); + bool getShowNotes(void); + bool getAction(void); + int getTiming(void); + void apply(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Point mDisplayPoint; +}; +#endif diff --git a/guitar/backup/20030731/splash.cpp b/guitar/backup/20030731/splash.cpp new file mode 100644 index 0000000..5d5c336 --- /dev/null +++ b/guitar/backup/20030731/splash.cpp @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mStrTitle(strTitle), mTimeout(timeout), + mTextFont("Helv",8,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mLeftButtonHandler.setCallback(this,&SplashScreen::leftButtonHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|0x04|WS_CLIPSIBLINGS|WS_DLGFRAME; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)"Splash",style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::leftButtonHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIB24(); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->create(mResBitmap->width(),mResBitmap->height(),*mPureDevice); + mDIBitmap->copyBits(*mResBitmap); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + WinInfo winInfo; + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + mDIBitmap->bitBlt(pureDevice,Rect(0,0,width(),height()),Point()); + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); + pureDevice.textOut(5,200,mStrCaption); + showLicense(pureDevice); + + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(1,60,String("Windows version:")+winInfo.strProductName()+String(" ")+winInfo.strVersion()); // add 15 + pureDevice.textOut(1,75,String("Registered owner:")+winInfo.strRegisteredOwner()); + pureDevice.textOut(1,90,String("OEM:")+winInfo.strProductID()); + + if(!mStrTitle.isNull()) + { + Font mFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold); + pureDevice.select((GDIObj)mFont,TRUE); + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(12,10,mStrTitle); + pureDevice.select((GDIObj)mFont,FALSE); + } + return (CallbackData::ReturnType)FALSE; +} + +void SplashScreen::showLicense(PureDevice &pureDevice) +{ + pureDevice.setTextColor(RGBColor(255,255,255)); + if(Registration::getInstance().hasLicense()) + { + License license; + Registration::getInstance().getLicense(license); + if(license.isValid()) + { +// if(license.isExpiring())pureDevice.textOut(1,250,String("License will expire in ")+String().fromInt(license.getRemainingDays())+String(" days.")); +// if(license.isExpiring())pureDevice.textOut(1,250,String("You are on day ")+String().fromInt(license.getDay())+String(" of your ")+String().fromInt(license.getDayCount())+String(" day license.")); + if(license.isExpiring())pureDevice.textOut(1,250,String("This version of TabMaster requires a permanent license.")); + else pureDevice.textOut(1,250,"Permanent license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} diff --git a/guitar/backup/20030731/splash.hpp b/guitar/backup/20030731/splash.hpp new file mode 100644 index 0000000..2b3066d --- /dev/null +++ b/guitar/backup/20030731/splash.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_SPLASHSCREEN_HPP_ +#define _GUITAR_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIB24; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=5000}; + SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + void showLicense(PureDevice &pureDevice); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + Callback mLeftButtonHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mStrTitle; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030731/tabdlg.cpp b/guitar/backup/20030731/tabdlg.cpp new file mode 100644 index 0000000..f23a2c8 --- /dev/null +++ b/guitar/backup/20030731/tabdlg.cpp @@ -0,0 +1,151 @@ +#include +#include +#include + +TabDialog::TabDialog(void) +: mCurrEntryIndex(0) +{ + mInitHandler.setCallback(this,&TabDialog::initHandler); + mCreateHandler.setCallback(this,&TabDialog::createHandler); + mCloseHandler.setCallback(this,&TabDialog::closeHandler); + mDestroyHandler.setCallback(this,&TabDialog::destroyHandler); + mCommandHandler.setCallback(this,&TabDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog::TabDialog(const TabDialog &someTabDialog) +{ // private implementation + *this=someTabDialog; +} + +TabDialog::~TabDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog &TabDialog::operator=(const TabDialog &someTabDialog) +{ // private implementation + return *this; +} + +bool TabDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + return ::DialogBoxParam(processInstance(),(LPSTR)"TABDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType TabDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mTabEntryList=::new OwnerDrawListAltColor(*this,getItem(TABENTRY_LIST),TABENTRY_LIST); + mTabEntryList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(15)); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(50)); + mTabEntryList->setTabStops(stops); + setTypes(); + + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexinsertString(strLine); + } + mTabEntryList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void TabDialog::setTypes() +{ + Array notes; + sendMessage(TABENTRY_NOTETYPE,CB_RESETCONTENT,0,0L); + notes=NoteType::enumerate(); + int currSel=-1; + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); + } +} + + + + + diff --git a/guitar/backup/20030731/tabdlg.hpp b/guitar/backup/20030731/tabdlg.hpp new file mode 100644 index 0000000..e5a79e4 --- /dev/null +++ b/guitar/backup/20030731/tabdlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_TABDLG_HPP_ +#define _GUITAR_TABDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class TabDialog : public DWindow +{ +public: + TabDialog(void); + virtual ~TabDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex); +private: + TabDialog(const TabDialog &someTabDialog); + TabDialog &operator=(const TabDialog &someTabDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTypes(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + SmartPointer mTabEntryList; +}; +#endif diff --git a/guitar/backup/20030731/tablature.cpp b/guitar/backup/20030731/tablature.cpp new file mode 100644 index 0000000..4e111c3 --- /dev/null +++ b/guitar/backup/20030731/tablature.cpp @@ -0,0 +1,417 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TabEntries &Tablature::getTabEntries(void)const +{ + return mTabEntries; +} + +void Tablature::setTabEntries(const TabEntries &entries) +{ + mTabEntries.remove(); + for(int index=0;index=mTabEntries.size()) + { + GlobalDefs::outDebug("[Tablature::setTypeAt] index out of bounds : "+String().fromInt(index)); + return false; + } + mTabEntries[index].setNoteType(noteType); + return true; +} + +bool Tablature::open(const String &pathFileTablature) +{ + mLastError=None; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=pathFileTablature.betweenString(0,'.')+String(STRING_PRJEXTENSION); + if(!loadTabFile(pathFileTablature))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + return true; +} + +bool Tablature::import(String pathFileTablature) +{ + mLastError=None; + String strExtension; + String pathFileTablatureImport; + + pathFileTablatureImport=pathFileTablature; + strExtension=Profile::getExtension(pathFileTablature); + strExtension.lower(); + if(strExtension.isNull()||!(strExtension==String(STRING_TABEXTENSION)))return false; + pathFileTablature=Profile::removeExtension(pathFileTablature); + pathFileTablature+=String("_imp")+strExtension; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=getPathFileProject(pathFileTablatureImport); + if(!loadTabFile(pathFileTablatureImport))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + saveAs(pathFileTablature); + return true; +} + +String Tablature::getPathFileProject(const String &pathFileTablature) +{ + return Profile::removeExtension(pathFileTablature)+String(STRING_PRJEXTENSION); +} + +bool Tablature::saveAs(const String &pathFileTablature) +{ + TabWriter tabWriter; + if(pathFileTablature.isNull())return false; + return tabWriter.write(mTabEntries,pathFileTablature); +} + +bool Tablature::save(void) +{ + if(mPathFileTablature.isNull())return false; + return saveAs(mPathFileTablature); +} + +bool Tablature::openProject(const String &pathFileName) +{ + DiskInfo diskInfo; + File inFile; + String strLine; + String strDirectory; + + mPathFileProject=pathFileName; + strDirectory=mPathFileProject; + Profile::makeDirectoryName(strDirectory); + if(!diskInfo.setCurrentDirectory(strDirectory)||!inFile.open(pathFileName)) + { + mLastError=FileOpenError; + return false; + } + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + MessageBox::messageBox("Project does not contain a reference to any tablature.",strLine); + return false; + } + if(!open(strLine))return false; + while(inFile.readLine(strLine)) + { + if(strLine.betweenString(0,'=')==String("TYPES"))parseTypes(strLine); + else if(strLine.betweenString(0,'=')==String("RANGE"))parseRange(strLine); + } + return true; +} + +bool Tablature::saveProject(const String &pathFileName) +{ + File outFile; + + if(!pathFileName.isNull())mPathFileProject=pathFileName; + if(mPathFileProject.isNull())return false; + if(!outFile.open(mPathFileProject,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mPathFileName.isNull())mPathFileName=Profile::removeExtension(mPathFileProject)+String(STRING_TABEXTENSION); + outFile.writeLine(String("TABLATURE=")+mPathFileName); + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;indexlength)continue; + if(isTabLine(strLine,startElement)) + { + mTablature.insert(&TabLines()); + TabLines &tabLines=mTablature[mTablature.size()-1]; + tabLines[0]=strLine.substr(startElement); + for(int string=1;string<6;string++,line++) + { + if(!inFile.readLine(strLine))break; + tabLines[string]=strLine.substr(startElement); + } + } + } + GlobalDefs::outDebug(String("[Tablature::loadTabFile] ")+String().fromInt(mTablature.size())+String(" tabs, in ")+String().fromInt((::GetTickCount()-elapsedTime)/1000)+String(" seconds.")); + if(mTablature.size())return true; + mLastError=NoTabsParsedError; + return false; +} + +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0; + char charAt1; + char charAt2; + char charAt3; + char charAt4; + char lastChar; + + if(!lineLength)return false; + charAt0=lineLength?strLine.charAt(0):0; + charAt1=lineLength>=1?strLine.charAt(1):0; + charAt2=lineLength>=2?strLine.charAt(2):0; + charAt3=lineLength>=3?strLine.charAt(3):0; + charAt4=lineLength>=4?strLine.charAt(4):0; + lastChar=lineLength?strLine.charAt(lineLength-1):0; + + if((charAt0=='e'||charAt0=='E')&&(charAt1==':'||charAt1=='|')) + { + startElement=2; + return true; + } + if(charAt0=='|'&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==':'&&(::isalnum(charAt1)||charAt1=='-')) + { + startElement=1; + return true; + } + if(charAt0==':'&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0=='-') + { + startElement=0; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' '&&charAt4=='|') + { + startElement=5; + return true; + } + if(charAt0==' '&&charAt1=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='I'&&charAt3=='-') + { + startElement=3; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==']'&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==':'&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(::isdigit(charAt0)&&(lastChar=='-'||lastChar=='|')) + { + startElement=0; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2==' '&&charAt3=='|') + { + startElement=3; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' ') + { + startElement=4; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&(charAt2=='|'||charAt2=='+')&&charAt3=='-') + { + startElement=3; + return true; + } + return false; +} diff --git a/guitar/backup/20030731/tabpage.cpp b/guitar/backup/20030731/tabpage.cpp new file mode 100644 index 0000000..d8448f8 --- /dev/null +++ b/guitar/backup/20030731/tabpage.cpp @@ -0,0 +1,1017 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TabPage::TabPage(ViewWindow &parent) +: mItemsPerTab(0), mNumTabs(0), mCharWidth(0), mOutlinePen(RGBColor(0,0,0),Pen::PDot) , + mDrawFont("Courier New",10), mHasFocus(false), mIsCancelled(false), mIsInPlay(false), + mIsPaused(false), mIsDirty(false), mKeepOutline(false), mCurrEntryIndex(0), mIsInSetRange(false) +{ + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + mSizeHandler.setCallback(this,&TabPage::sizeHandler); + mPaintHandler.setCallback(this,&TabPage::paintHandler); + mVerticalScrollHandler.setCallback(this,&TabPage::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&TabPage::horizontalScrollHandler); + mLeftButtonUpHandler.setCallback(this,&TabPage::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&TabPage::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&TabPage::mouseMoveHandler); + mKillFocusHandler.setCallback(this,&TabPage::killFocusHandler); + mSetFocusHandler.setCallback(this,&TabPage::setFocusHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabPage::leftButtonDoubleHandler); + mKeyDownHandler.setCallback(this,&TabPage::keyDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent=&parent; + mParent.disposition(PointerDisposition::Assume); + mScrollInfo.hwndOwner(parent); + createBitmap(parent); +} + +TabPage::TabPage(const TabPage &/*someTabPage*/) +{ // private implementation +} + +TabPage::~TabPage() +{ + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); +} + +bool TabPage::insert(const TabEntry &entry,bool setDirty) +{ + TabEntries entries; + entries.insert(&entry); + return insert(entries,setDirty); +} + +bool TabPage::insert(const TabEntries &entries,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabEntries",GlobalDefs::Debug); + if(!entries.size())return false; + for(int index=0;indexinvalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +bool TabPage::insert(const TabRanges &ranges,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabRanges",GlobalDefs::Debug); + if(!ranges.size())return false; + for(int index=0;indexsetBits(BkColorBits); + drawTabPage(); + drawEntries(); + cursorControl.waitCursor(false); + mScrollInfo.scrollableObjectDimensions(mDIBitmap->width(),mDIBitmap->height()); + elapsedTime=(::GetTickCount()-elapsedTime)/1000; + GlobalDefs::outDebug(String("[TabPage::createBitmap]took ")+String().fromInt(elapsedTime)+String(" seconds."),GlobalDefs::Debug); + return mDIBitmap.isOkay(); +} + +bool TabPage::drawEntries(const RGBColor &rgbColor) +{ + Point p1; + Point p2; + String strFret; + Registry registry; + bool showAction(registry.getShowAction()); + + if(!isOkay())return false; + GlobalDefs::outDebug(String("[TabPage::drawEntries]"),GlobalDefs::Debug); + PureDevice &pureDevice=mDIBitmap->getDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + for(int entryIndex=0;entryIndexgetDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + Point p1=getEntryPoint(entryIndex); + Point p2; + TabEntry &entry=mTabEntries[entryIndex]; + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} + +bool TabPage::clearUpdate(void) +{ + GlobalDefs::outDebug(String("[TabPage::clearUpdate]"),GlobalDefs::Debug); + if(!isOkay())return false; + if(!mOverlay.isOkay())return false; + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + mOverlay.destroy(); + return true; +} + +bool TabPage::getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(outlineRect.ptInRect(mousePoint)) + { + entryIndex=index; + return true; + } + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getNearestString(const Point &clickPoint,int &nearestString) +{ + Rect outlineRect; + map distanceMap; + + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return false; + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + distanceMap[abs(clickPoint.y()-outlineRect.top())]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=1; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=0; + nearestString=(*distanceMap.begin()).second; + return true; +} + +Point TabPage::getEntryPoint(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getEntryPoint]"),GlobalDefs::Debug); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return xyPoint; +} + +bool TabPage::showCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + mOverlay.destroy(); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + isInOutline(true); + mParent->clientRect(clientRect); + bringOutlineIntoView(outlineRect,clientRect); + this->outlineRect(outlineRect); + showFretEntry(mTabEntries[mCurrEntryIndex]); + return true; +} + +bool TabPage::drawTabPage(void) +{ + int yStart=TopMargin; + int xStart=0; + int elapsedTime; + + GlobalDefs::outDebug(String("[TabPage::drawTabPage]"),GlobalDefs::Debug); + elapsedTime=::GetTickCount(); + if(!getNumTabs())drawTab(LeftMargin,RightMargin,xStart,yStart,TabSpacing,TabLines); // draw at least one + for(int index=0;indexline(Point(marginLeft-1,yStart),Point(marginLeft-1,1+yStart+((lineCount-1)*spacing)),TabLineColor); + for(int line=0;lineline(Point(xPos,yPos),Point(mDIBitmap->width()-marginRight,yPos),TabLineColor); + yPos+=spacing; + } + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point(mDIBitmap->width()-marginRight,1+yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point((mDIBitmap->width()-marginRight)+2,yStart),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart+((lineCount-1)*spacing)),Point((mDIBitmap->width()-marginRight)+2,yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point((mDIBitmap->width()-marginRight)+2,yStart),Point((mDIBitmap->width()-marginRight)+2,1+yStart+((lineCount-1)*spacing)),TabLineColor); + return yStart+((lineCount-1)*spacing); +} + +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + + GlobalDefs::outDebug(String("[TabPage::getDimensions]"),GlobalDefs::Debug); + setItemsPerTab(((guiWindow.width())-(RightMargin+LeftMargin))/getCharWidth()); + setNumTabs((mTabEntries.size()/getItemsPerTab())); + setNumTabs(getNumTabs()+(mTabEntries.size()%getItemsPerTab()?1:0)); + if(!getNumTabs())gdiPoint.y(TopMargin+((TabHeight+TabSeparator))); + else gdiPoint.y(TopMargin+(getNumTabs()*(TabHeight+TabSeparator))); + gdiPoint.x(guiWindow.width()); + GlobalDefs::outDebug(String("[TabPage::getDimensions]ItemsPerTab:")+String().fromInt(getItemsPerTab())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]NumTabs:")+String().fromInt(getNumTabs())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]AvgCharWidth:")+String().fromInt(getCharWidth())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmWidth:")+String().fromInt(gdiPoint.x())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmHeight:")+String().fromInt(gdiPoint.y())); + return getNumTabs(); +} + +int TabPage::getWidestEntry(PureDevice &pureDevice)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + GlobalDefs::outDebug(String("[TabPage::getWidestEntry]"),GlobalDefs::Debug); + if(!mTabEntries.size())return MinCharWidth; + widestEntry=0; + for(int entryIndex=0;entryIndexwidestEntry)widestEntry=sizeStruct.cx; + } + } + return widestEntry*2; +} + +void TabPage::bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + GlobalDefs::outDebug(String("[TabPage::bitBlt]"),GlobalDefs::Debug); + if(!mDIBitmap.isOkay())return; + mDIBitmap->usePalette(pureDevice,true); // the usePalette code can be removed... + mDIBitmap->bitBlt(pureDevice,dstRect,srcPoint); // but needs test on Win '98 first + mDIBitmap->usePalette(pureDevice,false); +} + +void TabPage::invalidate(Rect rect) +{ + GlobalDefs::outDebug(String("[TabPage::invalidate]"),GlobalDefs::Debug); + rect.left(rect.left()-mScrollInfo.currScrollx()); + rect.top(rect.top()-mScrollInfo.currScrolly()); + rect.right(rect.right()-mScrollInfo.currScrollx()); + rect.bottom(rect.bottom()-mScrollInfo.currScrollx()); + mParent->invalidate(rect,false); +} + +void TabPage::bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect) +{ + GlobalDefs::outDebug(String("[TabPage::bringOutlineIntoView]"),GlobalDefs::Debug); + if(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + while(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + if(!mScrollInfo.pageDown())break; + } + } + else if(outlineRect.top()clientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::play(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::play]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::playFromCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::playFromCurrent]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=mCurrEntryIndex;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +void TabPage::showFretEntry(const TabEntry &entry) +{ + GlobalDefs::outDebug(String("[TabPage::showFretEntry]"),GlobalDefs::Debug); + if(!mPlayNoteHandler.isOkay())return; + CallbackData cbData(CBCommands::FBShowTab,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void TabPage::setStartRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setStartRange]"),GlobalDefs::Debug); + isInSetRange(true); + mCurrRange.setBeginRange(mCurrEntryIndex); +} + +void TabPage::setEndRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setEndRange]"),GlobalDefs::Debug); + isInSetRange(false); + mCurrRange.setEndRange(mCurrEntryIndex); + mCurrRange.autoName(); + mTabRanges.insert(&mCurrRange); + isDirty(true); + GlobalDefs::outDebug(mCurrRange.toString()); +} + +void TabPage::cut(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::cut]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + mParent->enablePaste(true); + if(!mTabEntries.size())mParent->enableCut(false); + showCurrent(); +} + +void TabPage::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::copy]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mParent->enablePaste(true); +} + +bool TabPage::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::paste] Current position is ")+String().fromInt(mCurrEntryIndex),GlobalDefs::Debug); + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return false; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return false; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return false; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return false; + entry.fromString(strText.betweenString(']',0)); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else mTabEntries.insertAfter(mCurrEntryIndex,&entry); + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +// ********************************************************************************************* +// callback handlers + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::sizeHandler]ENTER",GlobalDefs::Verbose); + if(isInPlay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Pausing play...",GlobalDefs::Debug); + isPaused(true); + } + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + if(!sizePoint.x()||!sizePoint.y()) + { + if(isInPlay())isPaused(false); + return false; + } + clearUpdate(); + if(!update(*mParent)) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + + return false; + } + if(!mDIBitmap.isOkay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + return false; + } + if(isInPlay())isPaused(false); + GlobalDefs::outDebug("[TabPage::sizeHandler]LEAVE",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::paintHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::paintHandler]",GlobalDefs::Verbose); + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(!mDIBitmap.isOkay())return false; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + bitBlt(paintDevice,Rect(0,0,getWidth(),getHeight()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + bitBlt(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType TabPage::verticalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::verticalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleVerticalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::horizontalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::horizontalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleHorizontalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDoubleHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + Point mousePoint; + int selectedString; + Rect outlineRect; + int entryIndex; + + mousePoint.x(someCallbackData.loWord()+mScrollInfo.currScrollx()); + mousePoint.y(someCallbackData.hiWord()+mScrollInfo.currScrolly()); + if(!getOutlineRect(mousePoint,entryIndex,outlineRect))return false; + if(!getNearestString(mousePoint,selectedString))return false; + getFretEntry(selectedString); + return false; +} + +bool TabPage::getFretEntry(int selectedString) +{ + FretDialog fretDialog; + bool returnCode=false; + + keepOutline(true); + if((returnCode=fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex))) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return returnCode; +} + +void TabPage::setCursorToTab(void) +{ + Rect outlineRect; + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + ::SetCursorPos((outlineRect.left()+outlineRect.right())/2,(outlineRect.top()+outlineRect.bottom())/2); +} + +// *************************************************************************************************** +// C A L L B A C K S +// *************************************************************************************************** + +CallbackData::ReturnType TabPage::leftButtonUpHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonUpHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::setFocusHandler]",GlobalDefs::Verbose); + hasFocus(true); + if(Clipboard::hasData(GlobalDefs::getRegisteredClipboardFormat()))mParent->enablePaste(true); + else mParent->enablePaste(false); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new Sequencer(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::killFocusHandler]",GlobalDefs::Verbose); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + isInOutline(false); + clearUpdate(); + } + mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug("[TabPage::mouseMoveHandler]",GlobalDefs::Verbose); + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + mParent->releaseCapture(); + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + mParent->enableCut(true); + mParent->enableCopy(true); + mCurrEntryIndex=entryIndex; + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(Space==keyData.virtualKey()) + { + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + setCursorToTab(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + setCursorToTab(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + clearUpdate(); + showCurrent(); + setCursorToTab(); + } + return false; +} + diff --git a/guitar/backup/20030731/tabpage.hpp b/guitar/backup/20030731/tabpage.hpp new file mode 100644 index 0000000..b34db07 --- /dev/null +++ b/guitar/backup/20030731/tabpage.hpp @@ -0,0 +1,397 @@ +#ifndef _GUITAR_TABPAGE_HPP_ +#define _GUITAR_TABPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _GUITAR_SCROLLINFO_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class GUIWindow; +class ViewWindow; + +class TabPage +{ +public: + TabPage(ViewWindow &parent); + virtual ~TabPage(); + bool insert(const TabEntries &entries,bool setDirty=true); + bool insert(const TabEntry &entry,bool setDirty=true); + bool insert(const TabRanges &ranges,bool setDirty=true); + bool update(GUIWindow &guiWindow); + bool play(void); + bool playRange(int rangeIndex); + bool playFromCurrent(void); + void cut(void); + void copy(void); + bool paste(void); + bool modifyProperties(void); + bool increaseTempo(void); + bool decreaseTempo(void); + bool getCancelled(void)const; + void setCancelled(bool cancelled); + bool isInPlay(void)const; + bool isPaused(void)const; + int getWidth(void)const; + int getHeight(void)const; + const TabEntries &getEntries(void)const; + const TabRanges &getRanges(void)const; + void setRanges(const TabRanges &ranges); + bool hasRange(void)const; + void setPlayNoteHandler(CallbackPointer &callbackPointer); + void setStartRange(void); + void setEndRange(void); + bool isDirty(void)const; + void isDirty(bool isDirty); + bool isInOutline(void)const; + bool isInSetRange(void)const; + void isInSetRange(bool isInSetRange); + void setStatusControlRef(SmartPointer &statusBar); + bool isOkay(void)const; +private: + enum {BkColorBits=255,TabLineColor=0}; + enum {LeftMargin=10,RightMargin=10,TopMargin=10,TabLines=6,TabSpacing=10,TabHeight=TabLines*TabSpacing, + TabSeparator=20,CharSpacing=3,TabClearance=3,MinCharWidth=16}; + enum {RightArrow=0x27,LeftArrow=0x25,DownArrow=0x28,UpArrow=0x26,Insert=0x2D,Home=0x24,End=0x23,Delete=0x2E,Space=0x20}; + TabPage(const TabPage &someTabPage); + TabPage &operator=(const TabPage &someTabPage); + int drawTab(int marginLeft,int marginRight,int xPos,int yPos,int spacing,int lineCount); + void getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const; + void bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + void bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect); + bool drawEntry(int entryIndex,const RGBColor &rgbColor=RGBColor(0,0,0)); + bool getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect); + bool getNearestString(const Point &clickPoint,int &nearestString); + bool drawEntries(const RGBColor &rgbColor=RGBColor(0,0,0)); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool getOutlineRect(int entryIndex,Rect &outlineRect); + int getWidestEntry(PureDevice &pureDevice)const; + bool getFretEntry(int selectedString=0); + bool createBitmap(GUIWindow &someGUIWindow); + bool outlineRect(const Rect &outlineRect); + Point getEntryPoint(int entryIndex); + bool drawTabPage(void); + void setItemsPerTab(int itemsPerTab); + void setNumTabs(int numTabs); + void setCharWidth(int charWidth); + int getNumEntries(void)const; + int getNumTabs(void)const; + int getItemsPerTab(void)const; + int getCharWidth(void)const; + void invalidate(Rect rect); + void isInOutline(bool isInOutline); + bool clearUpdate(void); + bool hasFocus(void)const; + void hasFocus(bool hasFocus); + void isInPlay(bool isInPlay); + void isPaused(bool isPaused); + void showFretEntry(const TabEntry &entry); + void setStatusText(const String &statusText); + void keepOutline(bool keepOutline); + bool keepOutline(void)const; + bool showCurrent(void); + void setCursorToTab(void); + + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mKillFocusHandler; + Callback mSetFocusHandler; + Callback mLeftButtonDoubleHandler; + Callback mKeyDownHandler; + + CallbackPointer mPlayNoteHandler; + TabEntries mTabEntries; + TabRanges mTabRanges; + SmartPointer mDIBitmap; + SmartPointer mOverlay; + SmartPointer mParent; + SmartPointer mMIDIDevice; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + + Rect mPrevOutlineRect; + Pen mOutlinePen; + int mNumTabs; + int mItemsPerTab; + int mCharWidth; + + bool mIsInOutline; + bool mHasFocus; + bool mIsCancelled; + bool mIsInPlay; + bool mIsPaused; + bool mIsDirty; + bool mKeepOutline; + + bool mIsInSetRange; + Range mCurrRange; + int mCurrEntryIndex; + Font mDrawFont; +}; + +inline +TabPage &TabPage::operator=(const TabPage &/*someTabPage*/) +{ // private implementation + return *this; +} + +inline +int TabPage::getNumEntries(void)const +{ + return mTabEntries.size(); +} + +inline +void TabPage::getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const +{ + pureDevice.getTextExtentPoint32(((String&)string).str(),&sizeStruct); +} + +inline +int TabPage::getWidth(void)const +{ + return ((SmartPointer&)mDIBitmap)->width(); +} + +inline +int TabPage::getHeight(void)const +{ + return ((SmartPointer&)mDIBitmap)->height(); +} + +inline +int TabPage::getNumTabs(void)const +{ + return mNumTabs; +} + +inline +void TabPage::setNumTabs(int numTabs) +{ + mNumTabs=numTabs; +} + +inline +int TabPage::getCharWidth(void)const +{ + return mCharWidth; +} + +inline +void TabPage::setCharWidth(int charWidth) +{ + mCharWidth=charWidth; +} + +inline +int TabPage::getItemsPerTab(void)const +{ + return mItemsPerTab; +} + +inline +void TabPage::setItemsPerTab(int itemsPerTab) +{ + mItemsPerTab=itemsPerTab; +} + +inline +void TabPage::isInOutline(bool isInOutline) +{ + mIsInOutline=isInOutline; +} + +inline +bool TabPage::isInOutline(void)const +{ + return mIsInOutline; +} + +inline +bool TabPage::hasFocus(void)const +{ + return mHasFocus; +} + +inline +void TabPage::hasFocus(bool hasFocus) +{ + mHasFocus=hasFocus; +} + +inline +bool TabPage::getCancelled(void)const +{ + return mIsCancelled; +} + +inline +void TabPage::setCancelled(bool cancelled) +{ + mIsCancelled=cancelled; +} + +inline +bool TabPage::isInPlay(void)const +{ + return mIsInPlay; +} + +inline +void TabPage::isInPlay(bool isInPlay) +{ + mIsInPlay=isInPlay; +} + +inline +bool TabPage::isPaused(void)const +{ + return mIsPaused; +} + +inline +void TabPage::isPaused(bool isPaused) +{ + mIsPaused=isPaused; +} + +inline +void TabPage::setPlayNoteHandler(CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; +} + +inline +const TabEntries &TabPage::getEntries(void)const +{ + return mTabEntries; +} + +inline +const TabRanges &TabPage::getRanges(void)const +{ + return mTabRanges; +} + +inline +bool TabPage::hasRange(void)const +{ + return mTabRanges.size()?true:false; +} + +inline +bool TabPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void TabPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +void TabPage::keepOutline(bool keepOutline) +{ + GlobalDefs::outDebug(String("[TabPage::keepOutline]")+(keepOutline?String("true"):String("false")),GlobalDefs::Debug); + mKeepOutline=keepOutline; +} + +inline +bool TabPage::keepOutline(void)const +{ + return mKeepOutline; +} + +inline +bool TabPage::isInSetRange(void)const +{ + return mIsInSetRange; +} + +inline +void TabPage::isInSetRange(bool isInSetRange) +{ + mIsInSetRange=isInSetRange; +} + +inline +void TabPage::setRanges(const TabRanges &ranges) +{ + mTabRanges=ranges; + isDirty(true); +} + +inline +void TabPage::setStatusText(const String &statusText) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(statusText); +} + +inline +void TabPage::setStatusControlRef(SmartPointer &statusBar) +{ + mStatusBar=statusBar; +} + +inline +bool TabPage::isOkay(void)const +{ + return mTabEntries.size()&&mDIBitmap.isOkay(); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20030731/temporary.lic b/guitar/backup/20030731/temporary.lic new file mode 100644 index 0000000..2c59921 --- /dev/null +++ b/guitar/backup/20030731/temporary.lic @@ -0,0 +1 @@ +6'`5Y>'T:>GAX>GA\>7!X>7MX>'LL+0`` diff --git a/guitar/backup/20030731/uutool.cpp b/guitar/backup/20030731/uutool.cpp new file mode 100644 index 0000000..18cd678 --- /dev/null +++ b/guitar/backup/20030731/uutool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + diff --git a/guitar/backup/20030731/uutool.hpp b/guitar/backup/20030731/uutool.hpp new file mode 100644 index 0000000..55f5595 --- /dev/null +++ b/guitar/backup/20030731/uutool.hpp @@ -0,0 +1,44 @@ +#ifndef _GUITAR_UUTOOL_HPP_ +#define _GUITAR_UUTOOL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#include + +class String; + +class UUTool +{ +public: + static String encode(String strLine); + static String decode(String strLine); +private: + UUTool(void); + virtual ~UUTool(); + static BYTE chEncode(int ch); + static BYTE chDecode(int ch); +}; + +inline +UUTool::UUTool(void) +{ +} + +inline +UUTool::~UUTool() +{ +} + +inline +BYTE UUTool::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} + +inline +BYTE UUTool::chDecode(int ch) +{ + return (ch-' ')&0x3F; +} +#endif diff --git a/guitar/backup/20030731/viewwnd.cpp b/guitar/backup/20030731/viewwnd.cpp new file mode 100644 index 0000000..8c385a8 --- /dev/null +++ b/guitar/backup/20030731/viewwnd.cpp @@ -0,0 +1,551 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ + mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ + mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +bool ViewWindow::insert(const TabEntry &entry) +{ + return mTabPage->insert(entry); +} + +bool ViewWindow::insert(const TabEntries &entries) +{ + if(!mTabPage->insert(entries))return false; + invalidate(); + mTabPage->isDirty(true); + return true; +} + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); // don't set the dirty flag when loading + if(mTabPage->insert(mTablature.getTabRanges(),false)) // don't set the dirty flag when loading + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + if(THPlay==threadMessage.userDataOne())thPlay(); + else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); + else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.hCursor=::LoadCursor(processInstance(),MAKEINTRESOURCE(HARROW)); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20030731/viewwnd.hpp b/guitar/backup/20030731/viewwnd.hpp new file mode 100644 index 0000000..34d263e --- /dev/null +++ b/guitar/backup/20030731/viewwnd.hpp @@ -0,0 +1,146 @@ +#ifndef _GUITAR_VIEWWINDOW_HPP_ +#define _GUITAR_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _GUITAR_TABPAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class GUIFretboard; +class StatusBarEx; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + friend class TabPage; + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); + void setFretboardHandler(CallbackPointer &callbackPointer); + bool createProject(const String &strPathTabFile); + bool createProject(void); + bool openProject(const String &pathFileName); + bool saveProject(const String &pathFileName); + bool saveProject(void); + void play(void); + void playFromCurrent(void); + void stopPlay(void); + void playRepeated(void); + void playRange(int rangeIndex); + void playRangeRepeated(int rangeIndex); + void cut(void); + void copy(void); + void paste(void); + void modifyProperties(void); + void setStartRange(void); + void setEndRange(void); + bool getTabRanges(TabRanges &ranges); + void setTabRanges(const TabRanges &ranges); + bool insert(const TabEntry &entry); + bool insert(const TabEntries &entries); + int getNumTabEntries(void)const; + void increaseTempo(void); + void decreaseTempo(void); + String getTitle(void)const; + const String &getPathFileProject(void)const; + void setStatusControlRef(SmartPointer &statusBar); + bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); + void enablePlaySelect(bool enable); + void enableStopSelect(bool enable); + void enableCut(bool enable); + void enableCopy(bool enable); + void enablePaste(bool enable); + bool getEnableCut(void); + bool getEnableCopy(void); + bool getEnablePaste(void); + bool isInRepeatPlay(void)const; + void isInRepeatPlay(bool isInRepeatPlay); + bool getProjectName(String &strPathFileProject); + void thPlay(void); + void thPlayFromCurrent(void); + void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + SmartPointer mTabPage; + SmartPointer mMIDIDevice; + Tablature mTablature; + bool mIsInRepeatPlay; +}; + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +#endif + + diff --git a/guitar/backup/20030731/wininfo.hpp b/guitar/backup/20030731/wininfo.hpp new file mode 100644 index 0000000..373014d --- /dev/null +++ b/guitar/backup/20030731/wininfo.hpp @@ -0,0 +1,85 @@ +#ifndef _GUITAR_WININFO_HPP_ +#define _GUITAR_WININFO_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WinInfo +{ +public: + WinInfo(void); + virtual ~WinInfo(); + void refresh(void); + const String &strProductName(void)const; + const String &strRegisteredOwner(void)const; + const String &strProductID(void)const; + const String &strVersion(void)const; +private: + String mStrProductName; + String mStrRegisteredOwner; + String mStrProductID; + String mStrVersion; +}; + +inline +WinInfo::WinInfo(void) +{ + refresh(); +} + +inline +WinInfo::~WinInfo() +{ +} + +inline +void WinInfo::refresh(void) +{ + RegKey regKey(RegKey::LocalMachine); + + if(!regKey.openKey("Software\\Microsoft\\Windows\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + if(!mStrProductName.isNull()) + { + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } + else + { + RegKey regKey(RegKey::LocalMachine); + if(!regKey.openKey("Software\\Microsoft\\Windows NT\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } +} + +inline +const String &WinInfo::strProductName(void)const +{ + return mStrProductName; +} + +inline +const String &WinInfo::strRegisteredOwner(void)const +{ + return mStrRegisteredOwner; +} + +inline +const String &WinInfo::strProductID(void)const +{ + return mStrProductID; +} + +inline +const String &WinInfo::strVersion(void)const +{ + return mStrVersion; +} +#endif diff --git a/guitar/backup/20040219/Action.hpp b/guitar/backup/20040219/Action.hpp new file mode 100644 index 0000000..46afb7f --- /dev/null +++ b/guitar/backup/20040219/Action.hpp @@ -0,0 +1,155 @@ +#ifndef _GUITAR_ACTION_HPP_ +#define _GUITAR_ACTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Action +{ +public: + typedef enum Attribute{None,Pick,PullOff,Bend,HammerOn,Release,SlideDown,SlideUp}; + Action(); + Action(Attribute action); + Action(const String &strAction); + virtual ~Action(); + Attribute getAction(void)const; + void setAction(Attribute action); + String toString(void)const; + const Action &fromString(const String &string); + String toStringShort(void)const; + static Array enumerate(void); +private: + Attribute mAction; +}; + +inline +Action::Action() +: mAction(None) +{ +} + +inline +Action::Action(Attribute action) +: mAction(action) +{ +} + +inline +Action::Action(const String &strAction) +{ + fromString(strAction); +} + +inline +Action::~Action() +{ +} + +inline +Action::Attribute Action::getAction(void)const +{ + return mAction; +} + +inline +void Action::setAction(Attribute action) +{ + mAction=action; +} + +inline +String Action::toStringShort(void)const +{ + switch(mAction) + { + case PullOff : + return "p"; + break; + case Bend : + return "b"; + break; + case HammerOn : + return "h"; + break; + case Release : + return "r"; + break; + case SlideDown : + return "s"; + break; + case SlideUp : + return "s"; + break; + case Pick : + case None : + default : + return ""; + break; + } +} + +inline +String Action::toString(void)const +{ + switch(mAction) + { + case Pick : + return "Pick"; + break; + case PullOff : + return "PullOff"; + break; + case Bend : + return "Bend"; + break; + case HammerOn : + return "HammerOn"; + break; + case Release : + return "Release"; + break; + case SlideDown : + return "SlideDown"; + break; + case SlideUp : + return "SlideUp"; + break; + case None : + default : + return "None"; + break; + } +} + +inline +const Action &Action::fromString(const String &string) +{ + if(string=="Pick")mAction=Pick; + else if(string=="PullOff")mAction=PullOff; + else if(string=="Bend")mAction=Bend; + else if(string=="HammerOn")mAction=HammerOn; + else if(string=="Release")mAction=Release; + else if(string=="SlideDown")mAction=SlideDown; + else if(string=="SlideUp")mAction=SlideUp; + else mAction=None; + return *this; +} + +inline +Array Action::enumerate(void) +{ + Array actions; + actions.size(7); + actions[0]="Pick"; + actions[1]="PullOff"; + actions[2]="Bend"; + actions[3]="HammerOn"; + actions[4]="Release"; + actions[5]="SlideDown"; + actions[6]="SlideUp"; + return actions; +} +#endif diff --git a/guitar/backup/20040219/BrowserHelper.cpp b/guitar/backup/20040219/BrowserHelper.cpp new file mode 100644 index 0000000..c5be31c --- /dev/null +++ b/guitar/backup/20040219/BrowserHelper.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool BrowserHelper::launchBrowser(const String &strCommand) +{ + String strBrowser; + Process process; + + if(!getBrowser(strBrowser))return false; + process.createProcess(strBrowser,String(" ")+strCommand,false); + return true; +} + +bool BrowserHelper::getBrowser(String &strBrowser) +{ + RegKey regKey(RegKey::LocalMachine); + String strCommand; + int argPos; + + if(!regKey.openKey(String(STRING_BROWSERKEY))) + { + if(!regKey.openKey(String(STRING_BROWSERKEYALT)))return false; + } + if(!regKey.enumValue(0,String(STRING_BROWSERCOMMAND),strCommand)||strCommand.isNull()||!strCommand.length()) + return false; + strCommand.removeTokens("'\""); + if(-1!=(argPos=strCommand.strpos("-")))strCommand=strCommand.substr(0,argPos-1); + strBrowser=strCommand; + return true; +} diff --git a/guitar/backup/20040219/BrowserHelper.hpp b/guitar/backup/20040219/BrowserHelper.hpp new file mode 100644 index 0000000..99d2945 --- /dev/null +++ b/guitar/backup/20040219/BrowserHelper.hpp @@ -0,0 +1,20 @@ +#ifndef _GUITAR_BROWSERHELPER_HPP_ +#define _GUITAR_BROWSERHELPER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class BrowserHelper +{ +public: + static bool getBrowser(String &strBrowser); + static bool launchBrowser(const String &strCommand); +private: + BrowserHelper(); +}; + +inline +BrowserHelper::BrowserHelper() +{ +} +#endif diff --git a/guitar/backup/20040219/CBCommands.hpp b/guitar/backup/20040219/CBCommands.hpp new file mode 100644 index 0000000..68b9e0d --- /dev/null +++ b/guitar/backup/20040219/CBCommands.hpp @@ -0,0 +1,16 @@ +#ifndef _GUITAR_CBCOMMANDS_HPP_ +#define _GUITAR_CBCOMMANDS_HPP_ + +class CBCommands +{ +public: + typedef enum CBCommand{FBShowTab=0,FBPlayNote=1,FBPlayScale=2,FBPlayFrettedNotes=3,FBPlayChord=4,FBPlayTab=5,FBShowScale=6}; +private: + CBCommands(); +}; + +inline +CBCommands::CBCommands() +{ +} +#endif diff --git a/guitar/backup/20040219/ChordBuilderDialog.cpp b/guitar/backup/20040219/ChordBuilderDialog.cpp new file mode 100644 index 0000000..064ce93 --- /dev/null +++ b/guitar/backup/20040219/ChordBuilderDialog.cpp @@ -0,0 +1,160 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Music; + +ChordBuilderDialog::ChordBuilderDialog(void) +{ + mInitHandler.setCallback(this,&ChordBuilderDialog::initHandler); + mCreateHandler.setCallback(this,&ChordBuilderDialog::createHandler); + mCloseHandler.setCallback(this,&ChordBuilderDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordBuilderDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordBuilderDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog::ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + *this=someChordBuilderDialog; +} + +ChordBuilderDialog::~ChordBuilderDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog &ChordBuilderDialog::operator=(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + return *this; +} + +bool ChordBuilderDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDBUILDERDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordBuilderDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordBuilderDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(handleChordSelection())endDialog(true); + else MessageBox::messageBox("Unable to parse chord.","Please check parameters (parser is case sensitive)"); + break; + case ENTERCHORD_EXAMPLES : + handleShowExamples(); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +bool ChordBuilderDialog::handleChordSelection(void) +{ + ChordCompiler chordCompiler; + Music::Chord chord; + String strChord; + + strChord=getText(ENTERCHORD_EDIT); + if(!chordCompiler.compile(strChord,chord))return false; + CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&chord); + mPlayNoteHandler.callback(cbData); + return true; +} + +void ChordBuilderDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + +void ChordBuilderDialog::handleShowExamples() +{ + StringBuffer stringBuffer; + String crlf("\n"); + + stringBuffer.append("\"C^\" - C Major 7th ").append(crlf); + stringBuffer.append("\"Db^\" - D Flat Major 7th").append(crlf); + stringBuffer.append("\"C^#4\" - C Major 7th- sharp 4").append(crlf); + stringBuffer.append("\"D7\" - D Dominant 7th").append(crlf); + stringBuffer.append("\"D-7\" - D Minor 7th").append(crlf); + stringBuffer.append("\"Cb7#9\" - C Flat 7th - sharp 9").append(crlf); + stringBuffer.append("\"Eb-7\" - E Flat Minor 7th").append(crlf); + stringBuffer.append("\"G-\" - G Minor").append(crlf); + stringBuffer.append("\"Ab7\" - A Flat Dominant 7th").append(crlf); + stringBuffer.append("\"F#7\" - F Sharp Major 7th").append(crlf); + stringBuffer.append("\"C7#9\" - C Dominant 7th - sharp 9").append(crlf); + stringBuffer.append("\"Gb^#4\" - G Flat Major 7th - sharp 4").append(crlf); + stringBuffer.append("\"G7#11\" - G Dominant 7th - sharp 11").append(crlf); + stringBuffer.append("\"Ebsus\" - E Flat Sus").append(crlf); + stringBuffer.append("\"Dsusb9\" - D Sus - Flat 9").append(crlf); + stringBuffer.append("\"F#susb9\"- F Sharp Sus - Flat 9").append(crlf); + stringBuffer.append("\"Ebsusb9\"- E Flat Sus - Flat 9").append(crlf); + stringBuffer.append("\"A-b6\" - A Minor - Flat 6").append(crlf); + stringBuffer.append("\"Ao\" - A Half Diminished a.k.a B-7b5").append(crlf); + stringBuffer.append("\"C-#7\" - C Minor - Sharp 7 a.k.a C MinorMajor").append(crlf); + stringBuffer.append("\"C-^\" - C MinorMajor").append(crlf); + MessageBox::messageBox(*this,"Example Chords",stringBuffer.toString()); +} + diff --git a/guitar/backup/20040219/ChordBuilderDialog.hpp b/guitar/backup/20040219/ChordBuilderDialog.hpp new file mode 100644 index 0000000..53becee --- /dev/null +++ b/guitar/backup/20040219/ChordBuilderDialog.hpp @@ -0,0 +1,52 @@ +#ifndef _GUITAR_CHORDBUILDERDLG_HPP_ +#define _GUITAR_CHORDBUILDERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordBuilderDialog : public DWindow +{ +public: + ChordBuilderDialog(void); + virtual ~ChordBuilderDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog); + ChordBuilderDialog &operator=(const ChordBuilderDialog &someChordBuilderDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + void handleShowExamples(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20040219/ChordDlg.cpp b/guitar/backup/20040219/ChordDlg.cpp new file mode 100644 index 0000000..8ae4972 --- /dev/null +++ b/guitar/backup/20040219/ChordDlg.cpp @@ -0,0 +1,144 @@ +#include +#include +#include +#include +#include +#include + +ChordDialog::ChordDialog(void) +{ + mInitHandler.setCallback(this,&ChordDialog::initHandler); + mCreateHandler.setCallback(this,&ChordDialog::createHandler); + mCloseHandler.setCallback(this,&ChordDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog::ChordDialog(const ChordDialog &someChordDialog) +{ // private implementation + *this=someChordDialog; +} + +ChordDialog::~ChordDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) +{ // private implementation + return *this; +} + +bool ChordDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); + mChordList.disposition(PointerDisposition::Delete); + setChordList(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +void ChordDialog::setChordList(void) +{ + CursorControl cursor; + String strInsert; + + cursor.waitCursor(true); + for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) + { + String strResource(rcIndex); + strInsert=strResource.betweenString(0,'['); + strInsert.trimRight(); + strInsert+=strResource.betweenString(']',0); + mChordList->insertString(strInsert); + } + cursor.waitCursor(false); + setText(CHORDS_COUNT,"chord count:"+String().fromInt(rcIndex-ResBegin)); +} + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); +// CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&entry); + CallbackData cbData(CBCommands::FBPlayTab,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void ChordDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + + + diff --git a/guitar/backup/20040219/ChordDlg.hpp b/guitar/backup/20040219/ChordDlg.hpp new file mode 100644 index 0000000..a21493f --- /dev/null +++ b/guitar/backup/20040219/ChordDlg.hpp @@ -0,0 +1,53 @@ +#ifndef _GUITAR_CHORDDLG_HPP_ +#define _GUITAR_CHORDDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordDialog : public DWindow +{ +public: + ChordDialog(void); + virtual ~ChordDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordDialog(const ChordDialog &someChordDialog); + ChordDialog &operator=(const ChordDialog &someChordDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setChordList(void); + void handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mChordList; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20040219/ChordMapper.cpp b/guitar/backup/20040219/ChordMapper.cpp new file mode 100644 index 0000000..d1f986c --- /dev/null +++ b/guitar/backup/20040219/ChordMapper.cpp @@ -0,0 +1,232 @@ +#include + +bool ChordMapper::map(const Music::Chord &chord,Block &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else + { + String message("[Fretboard::getAt] Unable to map note '"+note.toString()+String("'")); + returnCode=false; + } + } + if(!returnCode) + { + isBarChord=false; + returnCode=true; + frettedNotes.remove(); + int noteCount=0; + int chordIndex=2; + int direction=-1; + + + +/* + while(noteCount=chord.size())chordIndex=0; + Note ¬e=((Music::Chord&)chord)[chordIndex]; + if(getAt(Fretboard::Strings-1,-1,note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else returnCode=false; + chordIndex+=direction; + noteCount++; + } +*/ + } + if(isBarChord && frettedNotes.size()) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} + + +/* +* searches for a note mapping starting at given string at fret 0 (note string 0 is the top (6th)string +* takes care of string collisions. +* @param note - The note to find a mapping for. +* @param fretted note - If result is true contains note mapping. +* @param containedNotes - Notes that are already in the mapping, used + to limit selected notes and to minimize distance between notes. +*/ + +bool ChordMapper::getAt(int startingString,int direction,const Note ¬e,FrettedNote &frettedNote,Block &containedNotes) +{ + for(int stringCount=0,srIndex=startingString;stringCount=Fretboard::Strings)srIndex=0; + else if(srIndex<0)srIndex=Fretboard::Strings-1; + for(int frIndex=0;frIndexMaxFretDistance)continue; + return true; + } + } + } + return false; +} + +/* + Get the FrettedNote for the given Note. + @param note - The note we are looking to map. + @param frettedNote - The fretted note we are looking for (get's filled in on success) + @param containedNotes - List of frettednotes we already have (so don't choose any of these). + +*/ +bool ChordMapper::getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes) +{ + for(int srIndex=0;srIndex=Fretboard::Strings)srIndex=0; + for(int frIndex=0;frIndexMaxFretDistance)continue; + return true; + } + } + } + return false; +} + +/* + Returns the greatest distance between fretted note and grouping of notes + Distance is simply fret distance, does not account for string distance + @param frettedNote - The fretted note to get distance. + @param frettedNotes - The collection of notes with which to compare distances +*/ +int ChordMapper::distance(const FrettedNote &frettedNote,Block &frettedNotes) +{ + int maxDistance=0; + int currDistance; + + for(int index=0;indexmaxDistance)maxDistance=currDistance; + } + OutputDebugString(String(String("Distance is :")+String().fromInt(maxDistance)+String("\n")).str()); + return maxDistance; +} + +/* + Return the distance between two fretted notes. +*/ +int ChordMapper::distance(const FrettedNote &firstNote,const FrettedNote &secondNote) +{ + int fretDistance=firstNote.getFret()-secondNote.getFret(); + return fretDistance<0?-fretDistance:fretDistance; +} + +/* + Find filler notes for given chord on given fret on empty string. +*/ +bool ChordMapper::getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes) +{ + bool notesInChord; + for(int stringIndex=0;stringIndex &frettedNotes) +{ + for(int index=0;index=Fretboard::Strings || currentString<0)continue; + if(currentFret>=Fretboard::Frets || currentFret<0)continue; + Note ¬e=mFretboard[currentString][currentFret]; + if(note==srchNote) + { + FrettedNote frettedNote; + frettedNote.setNote(note); + frettedNote.setString(currentString); + frettedNote.setFret(currentFret); + return true; + } + } + } + return false; +} + + + diff --git a/guitar/backup/20040219/ChordMapper.hpp b/guitar/backup/20040219/ChordMapper.hpp new file mode 100644 index 0000000..ec297fa --- /dev/null +++ b/guitar/backup/20040219/ChordMapper.hpp @@ -0,0 +1,47 @@ +#ifndef _CHORDMAPPER_HPP_ +#define _CHORDMAPPER_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class ChordMapper +{ +public: + ChordMapper(); + virtual ~ChordMapper(); + bool map(const Music::Chord &chord,Block &frettedNotes); +private: + enum {MaxFretDistance=4}; // Maximum distance for note spanning across frets + bool getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + bool getAt(int startingString,int direction,const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + int distance(const FrettedNote &frettedNote,Block &frettedNotes); + int distance(const FrettedNote &firstNote,const FrettedNote &secondNote); + bool getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes); + bool contains(const FrettedNote &frettedNote,Block &frettedNotes); + bool isIn(const FrettedNote &frettedNote,const Music::Chord &chord); + + void getNearestNote(const FrettedNote &frettedNote,const Note &srchNote,FrettedNote &foundNote); + bool getNearestNoteInRange(const FrettedNote &frettedNote,const Note &srchNote,FrettedNote &foundNote,int stringOffset,int fretOffset); + + Fretboard mFretboard; +}; + +inline +ChordMapper::ChordMapper() +{ +} + +inline +ChordMapper::~ChordMapper() +{ +} +#endif diff --git a/guitar/backup/20040219/DragQueryFile.hpp b/guitar/backup/20040219/DragQueryFile.hpp new file mode 100644 index 0000000..58d205c --- /dev/null +++ b/guitar/backup/20040219/DragQueryFile.hpp @@ -0,0 +1,39 @@ +#ifndef _COMMON_DRAGQUERYFILE_HPP_ +#define _COMMON_DRAGQUERYFILE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DragQueryFile +{ +public: + static bool getFileNames(HDROP hDrop,Block &strFileNames); +private: +}; + +inline +bool DragQueryFile::getFileNames(HDROP hDrop,Block &strFileNames) +{ + String strBuffer; + UINT numFiles; + + strFileNames.remove(); + strBuffer.reserve(512); + if(0==hDrop)return false; + numFiles=::DragQueryFile(hDrop,0xFFFFFFFF,0,0); + if(!numFiles)return false; + for(int index=0;index +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class Element +{ +public: + Element(); + Element(int fret,Action action=Action::None); + virtual ~Element(); + Action::Attribute getAction(void)const; + void setAction(Action::Attribute action); + void setFret(int fret); + int getFret(void)const; + String toString(void)const; +private: + int mFret; + Action mAction; +}; + +inline +Element::Element() +: mFret(0) +{ +} + +inline +Element::Element(int fret,Action action) +: mFret(fret), mAction(action) +{ +} + +inline +Element::~Element() +{ +} + +inline +Action::Attribute Element::getAction(void)const +{ + return mAction.getAction(); +} + +inline +void Element::setAction(Action::Attribute action) +{ + mAction.setAction(action); +} + +inline +int Element::getFret(void)const +{ + return mFret; +} + +inline +void Element::setFret(int fret) +{ + mFret=fret; +} + +inline +String Element::toString(void)const +{ + return mAction.toString()+String(" ")+String().fromInt(mFret); +} +#endif diff --git a/guitar/backup/20040219/Fingering.cpp b/guitar/backup/20040219/Fingering.cpp new file mode 100644 index 0000000..3c45813 --- /dev/null +++ b/guitar/backup/20040219/Fingering.cpp @@ -0,0 +1,88 @@ +#include +#include + +FrettedNotes Fingering::getFingering(const Scale &scale) +{ + FrettedNotes frettedNotes; + FrettedNote frettedNote; + + frettedNotes.size(scale.size()); + GlobalDefs::outDebug(scale.toString()); + for(int index=0;indexFretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString<0)return false; + } + mCurrFret++; + } + return found; +} + +bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e) +{ + Note tmpNote; + bool found; + + found=false; + GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString()); + if(mCurrFret<0||mCurrString>5)return false; + while(!found) + { + tmpNote=mFretboard.getAt(mCurrString,mCurrFret); + GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString()); + if(tmpNote==note) + { + frettedNote.setString(mCurrString); + frettedNote.setFret(mCurrFret); + frettedNote.setNote(tmpNote); + found=true; + } + if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets) + { + mCurrFret=mAnchorFret-2; + mCurrString++; +// mAnchorFret=mCurrFret; + if(mCurrString>5)return false; + if(mCurrFret<0)mCurrFret=0; + } + if(mCurrFret>Fretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString>5)return false; + } + mCurrFret++; + } + return found; +} diff --git a/guitar/backup/20040219/Fingering.hpp b/guitar/backup/20040219/Fingering.hpp new file mode 100644 index 0000000..88325bc --- /dev/null +++ b/guitar/backup/20040219/Fingering.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_FINGERING_HPP_ +#define _GUITAR_FINGERING_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Fingering +{ +public: + Fingering(); + virtual ~Fingering(); + FrettedNotes getFingering(const Scale &scale); +private: + enum{MaxStretchFrets=4,DefaultString=5}; + bool getFirst(FrettedNote &frettedNote,const Note ¬e); + bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); + int getCurrString(void)const; + void setCurrString(int currString); + int getCurrFret(void)const; + void setCurrFret(int currFret); + + Fretboard mFretboard; + int mMaxStretchFrets; + int mStartString; + int mCurrString; + int mCurrFret; + int mAnchorFret; +}; + +inline +Fingering::Fingering() +: mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) +{ +} + +inline +Fingering::~Fingering() +{ +} + +inline +int Fingering::getCurrString(void)const +{ + return mCurrString; +} + +inline +void Fingering::setCurrString(int currString) +{ + mCurrString=currString; +} + +inline +int Fingering::getCurrFret(void)const +{ + return mCurrFret; +} + +inline +void Fingering::setCurrFret(int currFret) +{ + mCurrFret=currFret; +} +#endif diff --git a/guitar/backup/20040219/Fret.hpp b/guitar/backup/20040219/Fret.hpp new file mode 100644 index 0000000..e450ad5 --- /dev/null +++ b/guitar/backup/20040219/Fret.hpp @@ -0,0 +1,104 @@ +#ifndef _GUITAR_FRET_HPP_ +#define _GUITAR_FRET_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Fret; +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class Fret +{ +public: + typedef enum FretStatus{Active,Inactive,Hidden}; + Fret(void); + Fret(const Fret &fret); + Fret(const Note ¬e,const Rect &boundingRect); + virtual ~Fret(); + Fret &operator=(const Fret &fret); + const Note &getNote(void)const; + void setNote(const Note ¬e); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + FretStatus getStatus(void)const; + void setStatus(FretStatus status); +private: + Note mNote; + Rect mBoundingRect; + FretStatus mStatus; +}; + +inline +Fret::Fret(void) +: mStatus(Hidden) +{ +} + +inline +Fret::Fret(const Fret &fret) +{ + *this=fret; +} + +inline +Fret::Fret(const Note ¬e,const Rect &boundingRect) +: mNote(note), mBoundingRect(boundingRect) +{ +} + +inline +Fret::~Fret() +{ +} + +inline +Fret &Fret::operator=(const Fret &fret) +{ + setNote(fret.getNote()); + setBoundingRect(fret.getBoundingRect()); + return *this; +} + +inline +const Note &Fret::getNote(void)const +{ + return mNote; +} + +inline +void Fret::setNote(const Note ¬e) +{ + mNote=note; +} + +inline +const Rect &Fret::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void Fret::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +Fret::FretStatus Fret::getStatus(void)const +{ + return mStatus; +} + +inline +void Fret::setStatus(FretStatus status) +{ + mStatus=status; +} +#endif diff --git a/guitar/backup/20040219/FretDlg.cpp b/guitar/backup/20040219/FretDlg.cpp new file mode 100644 index 0000000..8eaf67f --- /dev/null +++ b/guitar/backup/20040219/FretDlg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +FretDialog::FretDialog(void) +: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1) +{ + mInitHandler.setCallback(this,&FretDialog::initHandler); + mCreateHandler.setCallback(this,&FretDialog::createHandler); + mCloseHandler.setCallback(this,&FretDialog::closeHandler); + mDestroyHandler.setCallback(this,&FretDialog::destroyHandler); + mCommandHandler.setCallback(this,&FretDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog::FretDialog(const FretDialog &someFretDialog) +{ // private implementation + *this=someFretDialog; +} + +FretDialog::~FretDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog &FretDialog::operator=(const FretDialog &someFretDialog) +{ // private implementation + return *this; +} + +bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + mSelectedString=selectedString; + mSelectedFret=-1; + return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData) +{ + initializeAction(); + initializeNoteTypes(); + setString(); + setFret(); + setNoteType((*mTabEntries)[mCurrEntryIndex]); + return (CallbackData::ReturnType)FALSE; +} + +void FretDialog::handleOk(void) +{ + String selectedFret; + String selectedAction; + String selectedDuration; + String selectedString; + bool found=false; + + getText(FRETENTRY_FRET,selectedFret); + getText(FRETENTRY_ACTION,selectedAction); + getText(FRETENTRY_DURATION,selectedDuration); + getText(FRETENTRY_STRING,selectedString); + if(!selectedString.isNull()) + { + int string=selectedString.toInt(); + if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string; + } + mSelectedFret=selectedFret.toInt(); + if(mSelectedFret<0||mSelectedFret>Fretboard::Frets) + { + mSelectedFret=-1; + return; + } + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + FrettedNote frettedNote; + frettedNote.setFret(mSelectedFret); + frettedNote.setAction(Action(selectedAction)); + if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret); + else if(!entry.setFrettedNote(mSelectedString,frettedNote)) + { + entry.addFrettedNote(mSelectedString,frettedNote); + } + entry.setNoteType(NoteType().fromString(selectedDuration)); + return; +} + +void FretDialog::setString() +{ + setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString)); +} + +void FretDialog::setFret() +{ + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + + for(int index=0;index actions=Action::enumerate(); + for(int index=0;index noteTypes=NoteType::enumerate(); + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class FretDialog : public DWindow +{ +public: + FretDialog(void); + virtual ~FretDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex); +private: + FretDialog(const FretDialog &someFretDialog); + FretDialog &operator=(const FretDialog &someFretDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void initializeAction(void); + void initializeNoteTypes(void); + void setFret(void); + void setString(void); + void setAction(const Action &action); + void setNoteType(const TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + int mSelectedString; + int mSelectedFret; +}; +#endif diff --git a/guitar/backup/20040219/FretViewWnd.cpp b/guitar/backup/20040219/FretViewWnd.cpp new file mode 100644 index 0000000..6004169 --- /dev/null +++ b/guitar/backup/20040219/FretViewWnd.cpp @@ -0,0 +1,164 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FretViewWindow::FretViewWindow(void) +{ + mCreateHandler.setCallback(this,&FretViewWindow::createHandler); + mSizeHandler.setCallback(this,&FretViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&FretViewWindow::paintHandler); + mHorizontalScrollHandler.setCallback(this,&FretViewWindow::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&FretViewWindow::verticalScrollHandler); + mLeftButtonDownHandler.setCallback(this,&FretViewWindow::leftButtonDownHandler); + mCloseHandler.setCallback(this,&FretViewWindow::closeHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +FretViewWindow::~FretViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +CallbackData::ReturnType FretViewWindow::closeHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType FretViewWindow::createHandler(CallbackData &someCallbackData) +{ + setTitle("Fretboard"); + mGUIFretboard=::new GUIFretboard(*this); + mGUIFretboard.disposition(PointerDisposition::Delete); + return FALSE; +} + +CallbackData::ReturnType FretViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType FretViewWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mGUIFretboard->draw(pureDevice); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::leftButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void FretViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String FretViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void FretViewWindow::setNote(const TabEntry &entry,bool clear,bool play) +{ + mGUIFretboard->setNote(entry,clear,play); +} + +void FretViewWindow::setNote(const Music::Chord &chord,bool play) +{ + mGUIFretboard->setNote(chord,play); +} + +void FretViewWindow::setNote(const Note ¬e,bool clear,bool play) +{ + mGUIFretboard->setNote(note,clear,play); +} + +void FretViewWindow::setNote(const Scale &scale,bool play) +{ + mGUIFretboard->setNote(scale,play); +} + +void FretViewWindow::setNote(const FrettedNotes &frettedNotes,bool play) +{ + mGUIFretboard->setNote(frettedNotes,play); +} + +void FretViewWindow::clearNotes(void) +{ + mGUIFretboard->clearNotes(); +} + +void FretViewWindow::showAllPositions(void) +{ + mGUIFretboard->showAllPositions(); +} + +void FretViewWindow::cut(void) +{ + mGUIFretboard->cut(); +} + +void FretViewWindow::copy(void) +{ + mGUIFretboard->copy(); +} + +void FretViewWindow::paste(void) +{ + mGUIFretboard->paste(); +} + +// *** virtuals + +void FretViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void FretViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|WS_CHILD|WS_CAPTION|WS_SIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_BORDER|WS_SYSMENU; +} + + diff --git a/guitar/backup/20040219/FretViewWnd.hpp b/guitar/backup/20040219/FretViewWnd.hpp new file mode 100644 index 0000000..98b7926 --- /dev/null +++ b/guitar/backup/20040219/FretViewWnd.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_FRETVIEWWINDOW_HPP_ +#define _GUITAR_FRETVIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#include +#endif + +class TabEntry; +class Scale; + +class FretViewWindow : public MDIWindow +{ +public: + enum{THPlay,THStop}; + FretViewWindow(void); + virtual ~FretViewWindow(); + String getTitle(void)const; + void cut(void); + void copy(void); + void paste(void); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void showAllPositions(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum{WindowWidth=355,WindowHeight=135,MaxWindowWidth=520}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDownHandler; + Callback mCloseHandler; + SmartPointer mGUIFretboard; +}; + +inline +void FretViewWindow::getNotes(TabEntry &entry) +{ + mGUIFretboard->getNotes(entry); +} +#endif + diff --git a/guitar/backup/20040219/Fretboard.cpp b/guitar/backup/20040219/Fretboard.cpp new file mode 100644 index 0000000..4a3d0c0 --- /dev/null +++ b/guitar/backup/20040219/Fretboard.cpp @@ -0,0 +1,240 @@ +#include +#include +#include + +bool Fretboard::isOnFretboard(const Note ¬e) +{ + for(int frIndex=0;frIndex &frettedNotes) +{ + frettedNotes.remove(); + + for(int srIndex=0;srIndex &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else + { + String message("[Fretboard::getAt] Unable to map note '"+note.toString()+String("'")); + GlobalDefs::outDebug(message); + returnCode=false; + } + } + +// need to come up with a strategy here for mapping notes on the fretboard + + if(isBarChord) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} + +/* + Find filler notes for given chord on given fret on empty string. +*/ +bool Fretboard::getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes) +{ + bool notesInChord; + for(int stringIndex=0;stringIndex &containedNotes) +{ + for(int srIndex=0;srIndex4)continue; + return true; + } + } + } + return false; +} + +/* Check to see if the fretted note exists in the collection of fretted notes. +* @param frettedNote - The fretted note to check for +* @param frettedNotes - The collection of fretted notes +*/ +bool Fretboard::contains(const FrettedNote &frettedNote,Block &frettedNotes) +{ + for(int index=0;index &frettedNotes) +{ + int maxDistance=0; + int currDistance; + + for(int index=0;indexmaxDistance)maxDistance=currDistance; + } + return maxDistance; +} + +void Fretboard::createFretboard(const Tuning &tuning,int frets) +{ + mTuning=tuning; + mFrets=frets; + createFretboard(); +} + +bool Fretboard::play(MIDIOutputDevice &device) +{ + for(int string=0;string&)*this).operator[](string); + strFretboard+=stringNotes.toString(); + if(string +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +// |-5- +// |-4- +// |-3- +// |-2- +// |-1- +// |-0- + +class MIDIOutputDevice; + +class Fretboard : public Array +{ +public: + enum{Frets=24,Strings=6}; + Fretboard(const Tuning &tuning=Tuning(),int frets=Frets); + virtual ~Fretboard(); + void createFretboard(const Tuning &tuning,int frets=Frets); + const Tuning &getTuning(); + void setTuning(const Tuning &tuning); + const Note &getAt(int string,int fret); + bool getAt(const Music::Chord &chord,Block &frettedNotes); + bool getAt(const Note ¬e,FrettedNote &frettedNote); + bool getAt(const Note ¬e,Block &frettedNotes); + int getFrets(void)const; + void setFrets(int frets); + bool isOnFretboard(const Note ¬e); + bool play(MIDIOutputDevice &device); + String toString(void)const; + static bool isValidFret(int fret); +private: + void createFretboard(); + bool getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + bool contains(const FrettedNote &frettedNote,Block &frettedNotes); + bool getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes); + int distance(const FrettedNote &frettedNote,Block &frettedNotes); + bool isIn(const FrettedNote &frettedNote,const Music::Chord &chord); + + Tuning mTuning; + int mFrets; +}; + +inline +Fretboard::Fretboard(const Tuning &tuning,int frets) +: mTuning(tuning),mFrets(frets) +{ + createFretboard(); +} + +inline +Fretboard::~Fretboard() +{ +} + +inline +const Tuning &Fretboard::getTuning() +{ + return mTuning; +} + +inline +void Fretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createFretboard(); +} + +inline +int Fretboard::getFrets(void)const +{ + return mFrets; +} + +inline +void Fretboard::setFrets(int frets) +{ + mFrets=frets; + createFretboard(); +} + +inline +const Note &Fretboard::getAt(int string,int fret) +{ + return (operator[](string)).operator[](fret); +} + +inline +bool Fretboard::isValidFret(int fret) +{ + if(fret<=Fretboard::Frets)return true; + return false; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040219/FrettedBoundingNote.hpp b/guitar/backup/20040219/FrettedBoundingNote.hpp new file mode 100644 index 0000000..d1019c7 --- /dev/null +++ b/guitar/backup/20040219/FrettedBoundingNote.hpp @@ -0,0 +1,88 @@ +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#define _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class FrettedBoundingNote : public FrettedNote +{ +public: + FrettedBoundingNote(); + virtual ~FrettedBoundingNote(); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + const Point &getDisplayPoint(void)const; + void setDisplayPoint(const Point &displayPoint); + const RGBColor &getBkGndColor(void)const; + void setBkGndColor(RGBColor &bkGndColor); + const RGBColor &getTextColor(void)const; + void setTextColor(const RGBColor &textColor); +private: + Rect mBoundingRect; + Point mDisplayPoint; + RGBColor mBkGndColor; + RGBColor mTextColor; +}; + +inline +FrettedBoundingNote::FrettedBoundingNote() +{ +} + +inline +FrettedBoundingNote::~FrettedBoundingNote() +{ +} + +inline +const Rect &FrettedBoundingNote::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void FrettedBoundingNote::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +const RGBColor &FrettedBoundingNote::getBkGndColor(void)const +{ + return mBkGndColor; +} + +inline +void FrettedBoundingNote::setBkGndColor(RGBColor &bkGndColor) +{ + mBkGndColor=bkGndColor; +} + +inline +const RGBColor &FrettedBoundingNote::getTextColor(void)const +{ + return mTextColor; +} + +inline +void FrettedBoundingNote::setTextColor(const RGBColor &textColor) +{ + mTextColor=textColor; +} + +inline +const Point &FrettedBoundingNote::getDisplayPoint(void)const +{ + return mDisplayPoint; +} + +inline +void FrettedBoundingNote::setDisplayPoint(const Point &displayPoint) +{ + mDisplayPoint=displayPoint; +} +#endif + diff --git a/guitar/backup/20040219/FrettedNote.hpp b/guitar/backup/20040219/FrettedNote.hpp new file mode 100644 index 0000000..2b87aeb --- /dev/null +++ b/guitar/backup/20040219/FrettedNote.hpp @@ -0,0 +1,158 @@ +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#define _GUITAR_FRETTEDNOTE_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class FrettedNote; + +typedef Array FrettedNotes; + +class FrettedNote : public Note +{ +public: + FrettedNote(); + FrettedNote(const FrettedNote &frettedNote); + FrettedNote(const Note ¬e,int string,int fret,const Action &action=Action(Action::Pick)); + virtual ~FrettedNote(); + FrettedNote &operator=(const FrettedNote &frettedNote); + bool operator==(const FrettedNote &frettedNote)const; + bool operator>(const FrettedNote &frettedNote)const; + bool operator<(const FrettedNote &frettedNote)const; + int getString(void)const; + void setString(int string); + int getFret(void)const; + void setFret(int fret); + void setNote(const Note ¬e); + const Note &getNote(void)const; + const Action &getAction(void)const; + void setAction(const Action &action); + String toString(void)const; +private: + int mString; + int mFret; + Action mAction; +}; + +inline +FrettedNote::FrettedNote(const FrettedNote &frettedNote) +{ + *this=frettedNote; +} + +inline +FrettedNote::FrettedNote() +: Note(Note::E,4), mString(0), mFret(0) +{ +} + +inline +FrettedNote::FrettedNote(const Note ¬e,int string,int fret,const Action &action) +: Note(note), mString(string), mFret(fret), mAction(action) +{ +} + +inline +FrettedNote::~FrettedNote() +{ +} + +inline +FrettedNote &FrettedNote::operator=(const FrettedNote &frettedNote) +{ + setString(frettedNote.getString()); + setFret(frettedNote.getFret()); + (Note&)*this=(Note&)frettedNote; + setAction(frettedNote.getAction()); + return *this; +} + +inline +bool FrettedNote::operator==(const FrettedNote &frettedNote)const +{ + if(getString()==frettedNote.getString()&&getFret()==frettedNote.getFret()) + return (Note&)*this==(Note&)frettedNote; + return false; +} + +inline +bool FrettedNote::operator>(const FrettedNote &frettedNote)const +{ + if(getString()>frettedNote.getString())return true; + if(getFret()>frettedNote.getFret())return true; + return (Note&)*this>(Note&)frettedNote; +} + +inline +bool FrettedNote::operator<(const FrettedNote &frettedNote)const +{ + if(getString() +#include + +bool FrettedNotes::play(MIDIOutputDevice &midiDevice) +{ + String strNotes; + if(!midiDevice.hasDevice())return false; + +// ::OutputDebugString(String(toString()+String("\n")).str()); + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RGBColor GUIFretboard::smColorBlack=RGBColor(0,0,0); +RGBColor GUIFretboard::smColorLtGreen=RGBColor(156,156,74); +RGBColor GUIFretboard::smColorWhite=RGBColor(255,255,255); +RGBColor GUIFretboard::smColorRed=RGBColor(231,33,33); +RGBColor GUIFretboard::smColorGreen=RGBColor(0,128,0); +RGBColor GUIFretboard::smColorBlue=RGBColor(0,0,255); + +/* Construct the GUIFretboard +* @param parent - The owning parent window +* @param tuning - The tuning for this fretboard +* @param frets - The number of frets on this fretboard +*/ +GUIFretboard::GUIFretboard(GUIWindow &parent,const Tuning &tuning,int frets) +: mTuning(tuning), mTextFont("Small Fonts",6), mShowNotes(false), + mPrevBrush(0), mPrevFont(0), mPrevBkMode(0), mPrevTextColor(0), mClearNotes(true), + mCurrFret(0), mCurrString(0), mRedBrush(smColorRed), mLtGreenBrush(smColorLtGreen), + mWhiteBrush(smColorWhite), mGreenBrush(smColorGreen), mBlueBrush(smColorBlue) +{ + Registry registry; + setShowNotes(registry.getShowNotes()); + mParent=SmartPointer(&parent); + mSizeHandler.setCallback(this,&GUIFretboard::sizeHandler); + mLeftButtonDownHandler.setCallback(this,&GUIFretboard::leftButtonDownHandler); + mKeyDownHandler.setCallback(this,&GUIFretboard::keyDownHandler); + mKeyUpHandler.setCallback(this,&GUIFretboard::keyUpHandler); + mSetFocusHandler.setCallback(this,&GUIFretboard::setFocusHandler); + mKillFocusHandler.setCallback(this,&GUIFretboard::killFocusHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + mParent.disposition(PointerDisposition::Assume); + mResBitmap=::new ResBitmap("FRETBOARD"); + mResBitmap.disposition(PointerDisposition::Delete); + parent.setWindowPos(mResBitmap->width()+RightBorder,mResBitmap->height()+BottomBorder); + createVirtualFretboard(); + mParent->invalidate(); + mParent->update(); +} + +/* +* Destructor +*/ +GUIFretboard::~GUIFretboard() +{ + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->removeHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +/* +* Draw the fretboard +* @param device - The device context on which to draw +*/ +void GUIFretboard::draw(PureDevice &device) +{ + mDIBitmap->usePalette(device,true); + mDIBitmap->bitBlt(device); + mDIBitmap->usePalette(device,false); + refreshNotes(); +} + +/* +* Repeat the selected notes at every location on the fretboard +* @param None +*/ +void GUIFretboard::showAllPositions(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + clearNotes(); + for(int index=0;index &frettedNotes,bool play) +{ + FrettedNotes notes; + notes.size(frettedNotes.size()); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +#include + +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Block > frettedNotesBlock; + Fretboard fretboard; + ChordMapper chordMapper; + + getSequencer(); + + chordMapper.map(chord,frettedNotesBlock); + for(int index=0;index &frettedNotes=frettedNotesBlock[index]; + clearNotes(); +// if(!fretboard.getAt(chord,frettedNotes)) +// MessageBox::messageBox("Error mapping notes","some notes were not mapped."); + setNote(frettedNotes,false); + ::Sleep(2000); + } + + if(play) + { + Registry registry; + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} +*/ + + +#include + +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Fretboard fretboard; + ChordMapper chordMapper; + + clearNotes(); + if(!chordMapper.map(chord,frettedNotes))return; + setNote(frettedNotes,false); + if(!play)return; + if(play) + { + Registry registry; + getSequencer(); + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} + + +/* +* Sets the notes of the given chord on the fretboard +* @param chord - the chord from which notes will be set +* @param play - indicates whether the notes of the chord should be played +* needs work (ie) selects multiple notes per string, does not optimize +* for finger position +*/ + +/* +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Fretboard fretboard; + + getSequencer(); + clearNotes(); + if(!fretboard.getAt(chord,frettedNotes)) + MessageBox::messageBox("Error mapping notes","some notes were not mapped."); + setNote(frettedNotes,false); + if(play) + { + Registry registry; + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} + +*/ +/* +* Sets the notes of the given scale on the fretboard +* @param scale - the scale from which notes will be set +* @param play - indicates whether the notes of the scale should be played +*/ +void GUIFretboard::setNote(const Scale &scale,bool play) +{ + Registry registry; + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + + getSequencer(); + clearNotes(); + if(scale.has(Scale::I))degreeI=scale.getDegree(Scale::I); + if(scale.has(Scale::III))degreeIII=scale.getDegree(Scale::III); + if(scale.has(Scale::V))degreeV=scale.getDegree(Scale::V); + if(scale.has(Scale::VII))degreeVII=scale.getDegree(Scale::VII); + for(int index=0;indexgetDevice()); + ::Sleep(Notes::DefaultDelay); + scale.play(mSequencer->getDevice(),registry.getMillisecondsPerQuarterNote()/4); // play scale as 16th notes + } +} + +/* +* Sets a note on the fretboard +* @param note - the note to set +* @param clear - indicates whether fretboard should be cleared prior to note being set +* @param play - indicates whether the note should be played +*/ +void GUIFretboard::setNote(const Note ¬e,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + } + } + } + return; +} + +/* +* Sets a note(s) on the fretboard +* @param entry - the tabentry containing the note(s) +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard +* @param string - the string to set the note on +* @param fret - the fret to set the note on +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(int string,int fret,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + GuitarString &guitarString=operator[]((size()-1)-string); + FrettedBoundingNote &frettedBoundingNote=guitarString[fret]; + if(clear)clearNotes(); + frettedBoundingNote.setBkGndColor(smColorRed); + frettedBoundingNote.setTextColor(smColorWhite); + mActiveFrets.insert(frettedBoundingNote); + prepareDevice(device,true); + drawNote(frettedBoundingNote,device); + if(play)frettedBoundingNote.noteOn(mSequencer->getDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::setNote(const GDIPoint &clickPoint,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + return true; + } + } + } + return false; +} + +/* +* Unsets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::unsetNote(const GDIPoint &clickPoint) +{ + for(int strIndex=0;strIndexinvalidate(boundingRect,false); + mParent->update(); + return true; + } + } + } + return false; +} + +/* +* isNoteSet a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::isNoteSet(const GDIPoint &clickPoint) +{ + for(int strIndex=0;strIndex frettedBoundingNotes; + + PureDevice device(*mParent); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index frettedBoundingNotes; + + entry.remove(); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index1)device.textOut(boundingRect.left(),boundingRect.top(),strNote); + else device.textOut(boundingRect.left()+1,boundingRect.top()+1,strNote); + } +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param prepare - indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + prepareDevice(device,smColorRed,smColorWhite,prepare); +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param brushColor - The color of the drawing brush +* @param textColor - The text color +* @param prepare - Indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)getBrush(brushColor)); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(textColor); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} + +/* +* Get the brush for the given color +* @param brushColor - The color of the brush we desire +* @return - A reference to the brush for the given color +*/ +Brush &GUIFretboard::getBrush(const RGBColor &brushColor) +{ + if(brushColor==mRedBrush.getColor())return mRedBrush; + else if(brushColor==mWhiteBrush.getColor())return mWhiteBrush; + else if(brushColor==mGreenBrush.getColor())return mGreenBrush; + else if(brushColor==mBlueBrush.getColor())return mBlueBrush; + return mLtGreenBrush; +} + +/* +* Clears all of the notes on the fretboard +* @param None +* @return None +*/ +void GUIFretboard::clearNotes(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;indexinvalidate(rect,false); + } + mActiveFrets.remove(); + mParent->update(); +} + +/* +* Initialize the fretboard and create it's underlying bitmap +* @param None +* @return None +*/ +void GUIFretboard::createVirtualFretboard(void) +{ + SmartPointer activeFret; + size(mTuning.size()); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + } + } + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + +/* +* Get the rectangle that bounds the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The bounding rectangle +*/ +Rect GUIFretboard::getBoundingRect(int string,int fret)const +{ + Rect boundingRect; + Point point(getPoint(string,fret)); + boundingRect.left(point.x()-Radius); + boundingRect.top(point.y()-Radius); + boundingRect.right(point.x()+Radius); + boundingRect.bottom(point.y()+Radius); + return boundingRect; +} + +/* +* Get the point for the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The point +*/ +Point GUIFretboard::getPoint(int string,int fret)const +{ + Point point; + int starty=15; + int incy=10; + + switch(fret) + { + case 0 : + point.x(10); + break; + case 1 : + point.x(23); + break; + case 2 : + point.x(55); + break; + case 3 : + point.x(83); + break; + case 4 : + point.x(111); + break; + case 5 : + point.x(138); + break; + case 6 : + point.x(164); + break; + case 7 : + point.x(193); + break; + case 8 : + point.x(220); + break; + case 9 : + point.x(249); + break; + case 10 : + point.x(280); + break; + case 11 : + point.x(307); + break; + case 12 : + point.x(335); + break; + case 13 : + point.x(362); + break; + case 14 : + point.x(392); + break; + case 15 : + point.x(420); + break; + case 16 : + point.x(446); + break; + case 17 : + point.x(473); + break; + case 18 : + point.x(501); + break; + case 19 : + point.x(528); + break; + case 20 : + point.x(558); + break; + case 21 : + point.x(585); + break; + case 22 : + point.x(611); + break; + case 23 : + point.x(640); + break; + case 24 : + point.x(668); + break; + } + point.y(starty+((string)*incy)); + return point; +} + +/* +* Cut the notes from the fretboard +* @param None +* @return None +*/ +void GUIFretboard::cut(void) +{ + copy(); // copy the fretboard notes to the clipboard first + clearNotes(); +} + +/* +* Copy all selected notes to the clipboard +* @param None +* @return None +*/ +void GUIFretboard::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + getNotes(entry); + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); +} + +/* +* Paste notes from clipboard +* @param None +* @return None +*/ +void GUIFretboard::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return; + entry.fromString(strText.betweenString(']',0)); + setNote(entry,true,true); +} + +// callbacks + +/* +* Handles resizing of the fretboard window +* @param callbackData - Contains information about the resize event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::sizeHandler(CallbackData &callbackData) +{ + GlobalDefs::outDebug("[GUIFretboard::sizeHandler]"); + Point sizePoint(callbackData.loWord(),callbackData.hiWord()); + if(sizePoint.x()>mResBitmap->width()+RightBorder|| + sizePoint.y()>mResBitmap->height()+BottomBorder) + mParent->setWindowPos(mResBitmap->width()+10,mResBitmap->height()+30); + return false; +} + +/* +* Handles left button down event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::leftButtonDownHandler(CallbackData &callbackData) +{ + GDIPoint clickPoint(callbackData.loWord(),callbackData.hiWord()); + + if(KeyData::controlKeyPressed())setNote(clickPoint,mClearNotes,true); + else + { + if(isNoteSet(clickPoint))unsetNote(clickPoint); + else setNote(clickPoint,mClearNotes,true); + } + return false; +} + +/* +* Handles keyboard event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyDownHandler(CallbackData &callbackData) +{ + if(KeyData::controlKeyPressed())mClearNotes=false; + else mClearNotes=true; + KeyData keyData(callbackData); + switch(keyData.virtualKey()) + { + case KeyDown : + if(KeyData::shiftKeyPressed())mCurrString-=2; + else mCurrString--; + if(mCurrString<0)mCurrString=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyLeft : + if(KeyData::shiftKeyPressed())mCurrFret-=2; + else mCurrFret--; + if(mCurrFret<0)mCurrFret=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyRight : + if(KeyData::shiftKeyPressed())mCurrFret+=2; + else mCurrFret++; + if(mCurrFret>DefaultFrets)mCurrFret=DefaultFrets; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyUp : + if(KeyData::shiftKeyPressed())mCurrString+=2; + else mCurrString++; + if(mCurrString>=DefaultStrings)mCurrString=DefaultStrings-1; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + } + return false; +} + +/* +* Handles key up event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyUpHandler(CallbackData &callbackData) +{ + KeyData keyData(callbackData); + if(CtrlKey==keyData.virtualKey())mClearNotes=true; + return false; +} + +/* +* Handles focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::setFocusHandler(CallbackData &callbackData) +{ + getSequencer(); + return false; +} + +/* +* Handles kill focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::killFocusHandler(CallbackData &callbackData) +{ + mSequencer.destroy(); + return false; +} + diff --git a/guitar/backup/20040219/GUIFretboard.hpp b/guitar/backup/20040219/GUIFretboard.hpp new file mode 100644 index 0000000..3a0bb85 --- /dev/null +++ b/guitar/backup/20040219/GUIFretboard.hpp @@ -0,0 +1,176 @@ +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#define _GUITAR_GUIFRETBOARD_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TUNING_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class GUIWindow; +class TabEntry; +class ResBitmap; +class Scale; + +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class GUIFretboard : public VirtualFretboard +{ +public: + enum{DefaultFrets=24,DefaultStrings=6}; + GUIFretboard(GUIWindow &parent,const Tuning &tuning=Tuning(),int frets=DefaultFrets); + virtual ~GUIFretboard(); + const Tuning &getTuning(void)const; + void setTuning(const Tuning &tuning); + int getFrets(void)const; + void draw(PureDevice &device); + bool isNoteSet(const GDIPoint &clickPoint); + bool unsetNote(const GDIPoint &clickPoint); + void setNote(int string,int fret,bool clear=true,bool play=false); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void setNote(Block &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void setShowNotes(bool showNotes); + bool getShowNotes(void)const; + void showAllPositions(void); + void cut(void); + void copy(void); + void paste(void); +private: + enum{RightBorder=10,BottomBorder=30,Radius=5,ClickTolerance=1}; + enum{KeyDown=0x28,KeyLeft=0x25,KeyRight=0x27,KeyUp=0x26,CtrlKey=0x11}; + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &callbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &callbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &callbackData); + + void createVirtualFretboard(void); + void refreshNotes(void); + void getSequencer(void); + Point getPoint(int string,int fret)const; + Rect getBoundingRect(int string,int fret)const; + void prepareDevice(PureDevice &device,bool prepare); + void prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor=RGBColor(255,255,255),bool prepare=true); + void drawNote(FrettedBoundingNote &currFret,PureDevice &device); + bool setNote(const GDIPoint &clickPoint,bool clear=true,bool play=false); + Brush &getBrush(const RGBColor &brushColor); + + Tuning mTuning; + SmartPointer mDIBitmap; + SmartPointer mResBitmap; + SmartPointer mParent; + SmartPointer mSequencer; + + Callback mSizeHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mKeyUpHandler; + Callback mSetFocusHandler; + Callback mKillFocusHandler; + BTree mActiveFrets; + + bool mShowNotes; + bool mClearNotes; + int mCurrFret; + int mCurrString; + + Brush mGreenBrush; + Brush mRedBrush; + Brush mWhiteBrush; + Brush mLtGreenBrush; + Brush mBlueBrush; + Font mTextFont; + + HGDIOBJ mPrevBrush; + HGDIOBJ mPrevFont; + int mPrevBkMode; + RGBColor mPrevTextColor; + + static RGBColor smColorBlack; + static RGBColor smColorLtGreen; + static RGBColor smColorWhite; + static RGBColor smColorRed; + static RGBColor smColorGreen; + static RGBColor smColorBlue; +}; + +inline +const Tuning &GUIFretboard::getTuning(void)const +{ + return mTuning; +} + +inline +void GUIFretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createVirtualFretboard(); +} + +inline +int GUIFretboard::getFrets(void)const +{ + return DefaultFrets; +} + +inline +void GUIFretboard::setShowNotes(bool showNotes) +{ + mShowNotes=showNotes; +} + +inline +bool GUIFretboard::getShowNotes(void)const +{ + return mShowNotes; +} + +inline +void GUIFretboard::getSequencer(void) +{ + if(mSequencer.isOkay())return; + mSequencer=::new Sequencer(); + mSequencer.disposition(PointerDisposition::Delete); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040219/GlobalDefs.cpp b/guitar/backup/20040219/GlobalDefs.cpp new file mode 100644 index 0000000..24438ac --- /dev/null +++ b/guitar/backup/20040219/GlobalDefs.cpp @@ -0,0 +1,6 @@ +#include + +UINT GlobalDefs::mRegisteredClipboardFormat=0; +GlobalDefs::LogLevel GlobalDefs::mLogLevel=GlobalDefs::Debug; +File GlobalDefs::mLogFile; + diff --git a/guitar/backup/20040219/GlobalDefs.hpp b/guitar/backup/20040219/GlobalDefs.hpp new file mode 100644 index 0000000..f376556 --- /dev/null +++ b/guitar/backup/20040219/GlobalDefs.hpp @@ -0,0 +1,100 @@ +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#define _GUITAR_GLOBALDEFS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class GlobalDefs +{ +public: + typedef enum LogLevel{NoLog,Verbose,Info,Debug}; + enum{MicrosecondsPerQuarterNote=651578,ShowAction=1,ShowNotes=1}; + static void outDebug(const String &strDebug,LogLevel level=Debug); + static LogLevel getLogLevel(void); + static void setLogLevel(LogLevel logLevel); + static bool setLogFile(const String &pathLogFile); + static UINT getRegisteredClipboardFormat(void); + static void setRegisteredClipboardFormat(UINT registeredClipboardFormat); + static String translateLevel(LogLevel logLevel); +private: + GlobalDefs(); + virtual ~GlobalDefs(); + static UINT mRegisteredClipboardFormat; + static LogLevel mLogLevel; + static File mLogFile; +}; + +inline +GlobalDefs::GlobalDefs() +{ +} + +inline +GlobalDefs::~GlobalDefs() +{ +} + +inline +UINT GlobalDefs::getRegisteredClipboardFormat(void) +{ + return mRegisteredClipboardFormat; +} + +inline +void GlobalDefs::setRegisteredClipboardFormat(UINT registeredClipboardFormat) +{ + mRegisteredClipboardFormat=registeredClipboardFormat; +} + +inline +GlobalDefs::LogLevel GlobalDefs::getLogLevel(void) +{ + return mLogLevel; +} + +inline +void GlobalDefs::setLogLevel(LogLevel logLevel) +{ + mLogLevel=logLevel; +} + +inline +void GlobalDefs::outDebug(const String &strDebug,LogLevel logLevel) +{ + if(NoLog==getLogLevel())return; + if(mLogFile.isOkay()&&logLevel>=mLogLevel) + { + mLogFile.writeLine(translateLevel(logLevel)+strDebug); + mLogFile.flush(); + } + else if(logLevel>=mLogLevel)::OutputDebugString(String(translateLevel(logLevel)+strDebug+String("\n")).str()); +} + +inline +bool GlobalDefs::setLogFile(const String &pathLogFile) +{ + return mLogFile.open(pathLogFile,"wb"); +} + +inline +String GlobalDefs::translateLevel(LogLevel logLevel) +{ + SystemTime systemTime; + if(NoLog==logLevel)return String("[Log.None][")+systemTime.toString()+String("]"); + else if(Verbose==logLevel)return String("[Log.Verbose][")+systemTime.toString()+String("]"); + else if(Debug==logLevel)return String("[Log.Debug][")+systemTime.toString()+String("]"); + else return String("[Log.Info]]")+systemTime.toString()+String("]"); +} +#endif diff --git a/guitar/backup/20040219/GuitarString.hpp b/guitar/backup/20040219/GuitarString.hpp new file mode 100644 index 0000000..06f0d1c --- /dev/null +++ b/guitar/backup/20040219/GuitarString.hpp @@ -0,0 +1,29 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/guitar/backup/20040219/Instrument.hpp b/guitar/backup/20040219/Instrument.hpp new file mode 100644 index 0000000..eee996c --- /dev/null +++ b/guitar/backup/20040219/Instrument.hpp @@ -0,0 +1,129 @@ +#ifndef _GUITAR_INSTRUMENT_HPP_ +#define _GUITAR_INSTRUMENT_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Instrument +{ +public: + Instrument(const String &description,int program); + ~Instrument(); + const String &description(void)const; + void description(const String &description); + int program(void)const; + void program(int program); + static Instrument fromString(const String &instrument); + String toString(void)const; + bool isOkay(void)const; +private: + String mDescription; + int mProgram; +}; + +inline +Instrument::Instrument(const String &description,int program) +: mDescription(description), mProgram(program) +{ +} + +inline +Instrument::~Instrument() +{ +} + +inline +const String &Instrument::description(void)const +{ + return mDescription; +} + +inline +void Instrument::description(const String &description) +{ + mDescription=description; +} + +inline +int Instrument::program(void)const +{ + return mProgram; +} + +inline +void Instrument::program(int program) +{ + mProgram=program; +} + +inline +Instrument Instrument::fromString(const String &strInstrument) +{ + if(strInstrument.isNull())return Instrument("",-1); + return Instrument(strInstrument.betweenString(';',0),strInstrument.betweenString(0,';').toInt()); +} + +inline +String Instrument::toString()const +{ + return String().fromInt(mProgram)+String(";")+mDescription; +} + +inline +bool Instrument::isOkay(void)const +{ + if(mDescription.isNull() || -1==mProgram)return false; + return true; +} + +class Instruments : public Block +{ +public: + enum {StartOrdinal=STRING_INSTRUMENT1,EndOrdinal=STRING_INSTRUMENT175}; + Instruments(); + virtual ~Instruments(); + int getProgram(int index); + const Instrument &getInstrument(int index); +private: + void loadInstruments(void); +}; + +inline +Instruments::Instruments() +{ + loadInstruments(); +} + +inline +Instruments::~Instruments() +{ +} + +inline +void Instruments::loadInstruments(void) +{ + for(int index=StartOrdinal;index<=EndOrdinal;index++) + { + String strInstrument=String(index); + insert(&Instrument(String(strInstrument.betweenString(';',0).betweenString(';',0)),strInstrument.betweenString(0,';').toInt())); + } +} + +inline +int Instruments::getProgram(int index) +{ + return operator[](index).program(); +} + +inline +const Instrument &Instruments::getInstrument(int index) +{ + return operator[](index); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040219/IntegerPair.hpp b/guitar/backup/20040219/IntegerPair.hpp new file mode 100644 index 0000000..fc5959f --- /dev/null +++ b/guitar/backup/20040219/IntegerPair.hpp @@ -0,0 +1,21 @@ +#ifndef _GUITAR_INTEGERPAIR_HPP_ +#define _GUITAR_INTEGERPAIR_HPP_ + +class IntegerPair +{ +public: + IntegerPair(); + IntegerPair(const IntegerPair &integerPair); + virtual IntegerPair(); + IntegerPair &operator=(const IntegerPair &integerPair); + bool operator<(const IntegerPair &integerPair); + bool operator>(const IntegerPair &integerPair); + bool operator==(const IntegerPair &integerPair); + int getValue(void)const; + void setValue(int value); + int getComparator +private: + int mValue; + int mComparator; +}; +#endif \ No newline at end of file diff --git a/guitar/backup/20040219/Led.bmp b/guitar/backup/20040219/Led.bmp new file mode 100644 index 0000000..bfab469 Binary files /dev/null and b/guitar/backup/20040219/Led.bmp differ diff --git a/guitar/backup/20040219/License.hpp b/guitar/backup/20040219/License.hpp new file mode 100644 index 0000000..e83be51 --- /dev/null +++ b/guitar/backup/20040219/License.hpp @@ -0,0 +1,148 @@ +#ifndef _GUITAR_LICENSE_HPP_ +#define _GUITAR_LICENSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif + +class License +{ +public: + typedef enum LicenseType{Expires=01,Permanent=02}; + typedef enum Feature{MIDIFeature}; + License(void); + License(const License &license); + License(const String &strLicenseKey); // this should be a uuencoded, xor'd string + License(Block &strLicenseKeyLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + License &operator=(const License &license); + static String generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount); // produces a uuencoded, xor'd string + bool fromString(const String &string); // this should be a uuencoded, xor'd string + bool fromLines(Block &strLicenseLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + bool isValid(void)const; + bool isExpiring(void)const; + bool allowFeature(Feature feature)const; + int getRemainingDays(void)const; + int getDayCount(void)const; + int getDay(void)const; + const String &getUUEncodedLicense(void)const; +private: + enum {XORMagic=72}; + static int calculateChecksum(const String &string); + static String xor(const String &strLicense); + static String numericEncode(const String &strLicense); + static String numericDecode(const String &strLicense); + + String mProductVersion; + String mUUEncodedLicense; + SystemTime mIssueDate; + LicenseType mLicenseType; + int mDayCount; + bool mIsValid; + static const String smBeginLicense; + static const String smEndLicense; +}; + +inline +License::License(void) +: mIsValid(false) +{ +} + +inline +License::License(const License &license) +{ + *this=license; +} + +inline +License::License(const String &strLicenseKey) +: mIsValid(false) +{ + fromString(strLicenseKey); +} + +inline +License::License(Block &strLicenseLines) +: mIsValid(false) +{ + fromLines(strLicenseLines); +} + +inline +License &License::operator=(const License &license) +{ + mProductVersion=license.mProductVersion; + mIssueDate=license.mIssueDate; + mLicenseType=license.mLicenseType; + mDayCount=license.mDayCount; + mIsValid=license.mIsValid; + return *this; +} + +inline +bool License::isValid(void)const +{ + return mIsValid; +} + +inline +bool License::isExpiring(void)const +{ + return Expires==mLicenseType; +} + +inline +int License::getRemainingDays(void)const +{ + if(!isExpiring())return -1; + SDate issueDate; + SDate expireDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + expireDate=issueDate; + expireDate=expireDate.daysAdd360(mDayCount); + return currDate.daysBetween360(expireDate); +} + +inline +int License::getDay(void)const +{ + SDate issueDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + return issueDate.daysBetween360(currDate)+1; +} + +inline +int License::getDayCount(void)const +{ + return mDayCount; +} + +inline +bool License::allowFeature(Feature feature)const +{ + if(isExpiring())return false; + return true; +} + +inline +const String &License::getUUEncodedLicense(void)const +{ + return mUUEncodedLicense; +} +#endif diff --git a/guitar/backup/20040219/LicenseDialog.cpp b/guitar/backup/20040219/LicenseDialog.cpp new file mode 100644 index 0000000..011549d --- /dev/null +++ b/guitar/backup/20040219/LicenseDialog.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +LicenseDialog::LicenseDialog(void) +{ + mInitHandler.setCallback(this,&LicenseDialog::initHandler); + mCreateHandler.setCallback(this,&LicenseDialog::createHandler); + mCloseHandler.setCallback(this,&LicenseDialog::closeHandler); + mDestroyHandler.setCallback(this,&LicenseDialog::destroyHandler); + mCommandHandler.setCallback(this,&LicenseDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog::LicenseDialog(const LicenseDialog &someLicenseDialog) +{ // private implementation + *this=someLicenseDialog; +} + +LicenseDialog::~LicenseDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog &LicenseDialog::operator=(const LicenseDialog &someLicenseDialog) +{ // private implementation + return *this; +} + +bool LicenseDialog::perform(GUIWindow &parentWindow,bool cancelTerminates) +{ + bool returnCode; + mCancelTerminates=cancelTerminates; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"LICENSEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType LicenseDialog::initHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType LicenseDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::commandHandler(CallbackData &someCallbackData) +{ + LRESULT result; + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(!validateLicense()) + { + MessageBox::messageBox("Error","The license you entered was invalid, please try again"); + setText(LICENSE_DIALOG_LICENSE,String()); + setFocus(LICENSE_DIALOG_LICENSE); + } + else endDialog(true); + break; + case IDCANCEL : + if(mCancelTerminates) + { + result=MessageBox::messageBox(*this,"Warning","Cancelling now will terminate the application.",MB_OKCANCEL); + if(IDOK==result)endDialog(false); + } + else endDialog(false); + break; + case LICENSE_DIALOG_REQUEST_LICENSE : + handleLicenseRequest(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +bool LicenseDialog::validateLicense(void)const +{ + License license; + String strLicense; + Block strLicenseLines; + + strLicense=getText(LICENSE_DIALOG_LICENSE); + if(strLicense.isNull())return false; + makeLicenseLines(strLicense,strLicenseLines); + license.fromLines(strLicenseLines); + if(!license.isValid()||license.isExpiring())return false; + if(!Registration::getInstance().applyLicense(strLicenseLines))return false; + return true; +} + +void LicenseDialog::handleLicenseRequest(void)const +{ + BrowserHelper::launchBrowser(String(STRING_HOST)); +} + +void LicenseDialog::makeLicenseLines(String strLicense,Block &strLicenseLines)const +{ + strLicenseLines.remove(); + if(strLicense.isNull())return; + strLicense.removeTokens("\r"); + strLicenseLines.insert(&String(strLicense.betweenString(0,'\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\0').betweenString('\n','\n\0'))); +} diff --git a/guitar/backup/20040219/LicenseDialog.hpp b/guitar/backup/20040219/LicenseDialog.hpp new file mode 100644 index 0000000..87535df --- /dev/null +++ b/guitar/backup/20040219/LicenseDialog.hpp @@ -0,0 +1,32 @@ +#ifndef _GUITAR_LICENSEDIALOG_HPP_ +#define _GUITAR_LICENSEDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif + +class LicenseDialog : public DWindow +{ +public: + LicenseDialog(void); + virtual ~LicenseDialog(); + bool perform(GUIWindow &parentWindow,bool cancelTerminates=true); +private: + LicenseDialog(const LicenseDialog &someLicenseDialog); + LicenseDialog &operator=(const LicenseDialog &someLicenseDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool validateLicense(void)const; + void handleLicenseRequest(void)const; + void makeLicenseLines(String strLicense,Block &strLicenseLines)const; + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + bool mCancelTerminates; +}; +#endif diff --git a/guitar/backup/20040219/LineParser.cpp b/guitar/backup/20040219/LineParser.cpp new file mode 100644 index 0000000..5d387ae --- /dev/null +++ b/guitar/backup/20040219/LineParser.cpp @@ -0,0 +1,127 @@ +#include + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + +void LineParser::putElement(const Element &element) +{ + String strItem=Action(element.getAction()).toStringShort()+String().fromInt(element.getFret()); + *this+=strItem; + mPosition+=strItem.length(); + return; +} + +void LineParser::putElement(char ch) +{ + *this+=ch; + mPosition++; + return; +} + +int LineParser::peekElement(Element &element) +{ + int position=mPosition; + int result=getElement(element); + mPosition=position; + return result; +} diff --git a/guitar/backup/20040219/LineParser.hpp b/guitar/backup/20040219/LineParser.hpp new file mode 100644 index 0000000..2bdd01b --- /dev/null +++ b/guitar/backup/20040219/LineParser.hpp @@ -0,0 +1,101 @@ +#ifndef _GUITAR_LINEPARSER_HPP_ +#define _GUITAR_LINEPARSER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_ELEMENT_HPP_ +#include +#endif + +class LineParser : private String +{ +public: + LineParser(); + LineParser(const String &string); + virtual ~LineParser(); + LineParser &operator=(const String &string); + LineParser &operator++(); + LineParser &operator++(int /*postfixdummy*/); + void reset(void); + int getElement(Element &element); + void putElement(const Element &element); + void putElement(char ch); + int length(void)const; + int getPosition(void)const; + bool serialize(File &outFile)const; +private: + int peekElement(Element &element); + + int mPosition; + int mLength; +}; + +inline +LineParser::LineParser() +: mPosition(0), mLength(0) +{ +} + +inline +LineParser::LineParser(const String &string) +: String(string), mPosition(0), mLength(String::length()) +{ +} + +inline +LineParser::~LineParser() +{ +} + +inline +LineParser &LineParser::operator=(const String &string) +{ + (String&)*this=string; + mPosition=0; + mLength=String::length(); + return *this; +} + +inline +LineParser &LineParser::operator++() +{ + mPosition++; + return *this; +} + +inline +LineParser &LineParser::operator++(int /*postfixdummy*/) +{ + mPosition++; + return *this; +} + +inline +void LineParser::reset(void) +{ + mPosition=0; +} + +inline +int LineParser::length(void)const +{ + return mLength; +} + +inline +int LineParser::getPosition(void)const +{ + return mPosition; +} + +inline +bool LineParser::serialize(File &outFile)const +{ + if(!outFile.isOkay())return false; + outFile.writeLine(*this); + return true; +} +#endif diff --git a/guitar/backup/20040219/MIDIDialog.cpp b/guitar/backup/20040219/MIDIDialog.cpp new file mode 100644 index 0000000..db0a41d --- /dev/null +++ b/guitar/backup/20040219/MIDIDialog.cpp @@ -0,0 +1,136 @@ +#include +#include +#include + +MIDIDialog::MIDIDialog(void) +{ + mInitHandler.setCallback(this,&MIDIDialog::initHandler); + mCreateHandler.setCallback(this,&MIDIDialog::createHandler); + mCloseHandler.setCallback(this,&MIDIDialog::closeHandler); + mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler); + mCommandHandler.setCallback(this,&MIDIDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog) +{ // private implementation + *this=someMIDIDialog; +} + +MIDIDialog::~MIDIDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog) +{ // private implementation + return *this; +} + +bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack) +{ + bool returnCode; + mPathMIDIFileName=strPathMIDIFileName; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + if(returnCode)selectedTrack=mSelectedTrack; + return returnCode; +} + +CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData) +{ + MIDIHelper midiHelper; + TrackInfos trackInfos; + midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos); + setTrackInformation(trackInfos); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + mSelectedTrack=getSelectedTrack(); + if(-1==mSelectedTrack)endDialog(false); + else endDialog(true); + break; + } + if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MIDIDialog::setTrackInformation(TrackInfos &trackInfos) +{ + bool isFirst=true; + for(int index=0;index=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return; + mSelectedTrack=clickedId-MIDI_TRACK1; + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L); + } +} + +int MIDIDialog::getSelectedTrack(void)const +{ + int selectedTrack=-1; + + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(1==sendMessage(btnId,BM_GETCHECK,0,0L)) + { + selectedTrack=btnId-MIDI_TRACK1; + break; + } + } + return selectedTrack; +} + + + + + diff --git a/guitar/backup/20040219/MIDIDialog.hpp b/guitar/backup/20040219/MIDIDialog.hpp new file mode 100644 index 0000000..01781b3 --- /dev/null +++ b/guitar/backup/20040219/MIDIDialog.hpp @@ -0,0 +1,39 @@ +#ifndef _GUITAR_MIDIDIALOG_HPP_ +#define _GUITAR_MIDIDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIDialog : public DWindow +{ +public: + MIDIDialog(void); + virtual ~MIDIDialog(); + bool perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack); +private: + MIDIDialog(const MIDIDialog &someMIDIDialog); + MIDIDialog &operator=(const MIDIDialog &someMIDIDialog); + void handleClick(const CallbackData &someCallbackData); + int getSelectedTrack(void)const; + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTrackInformation(TrackInfos &trackInfos); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + String mPathMIDIFileName; + int mSelectedTrack; +}; +#endif diff --git a/guitar/backup/20040219/MIDIHelper.cpp b/guitar/backup/20040219/MIDIHelper.cpp new file mode 100644 index 0000000..06c36b9 --- /dev/null +++ b/guitar/backup/20040219/MIDIHelper.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include +#include +#include + +bool MIDIHelper::getTrackInfo(const String &strPathMIDIFileName,TrackInfos &trackInfos) +{ + MidiData midiData(strPathMIDIFileName); + midiData.getTrackInfo(trackInfos); + return trackInfos.size()?true:false; +} + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack) +{ + TabEntry entry; + Tablature tablature; + TabEntries tabEntries; + + WORD currPlayTime; + WORD prevPlayTime; + int eventCount; + bool resultCode; + bool haveTrack; + Block notes; + TrackInfos trackInfos; + + resultCode=false; + haveTrack=false; + if(strPathMidiFileName.isNull())return resultCode; + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + + for(int trIndex=0;trIndex &strPathTabFileNames) +{ + String strPathTabFileName; + WORD currPlayTime; + WORD prevPlayTime; + int currentTrack; + int eventCount; + Block tracks; + Block notes; + TrackInfos trackInfos; + + if(strPathMidiFileName.isNull())return false; + strPathTabFileNames.remove(); + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + if(!tracks.size())return false; + for(int trIndex=0;trIndex ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + notePaths.size(notes.size()); + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + MIDIHelper(); + virtual ~MIDIHelper(); +// bool import(const String &strPathMidiFileName,const String &strPathTabFileName); + bool import(const String &strPathMidiFileName,Block &strPathTabFileNames); + bool import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack); + bool getTrackInfo(const String &strpathMIDIFileName,TrackInfos &trackInfos); +private: + bool createEntry(Block ¬es,TabEntry &entry); + bool filterNotesOnFretboard(Block ¬es); + + Fretboard mFretboard; + Block mMessages; +}; + +inline +MIDIHelper::MIDIHelper() +{ +} + +inline +MIDIHelper::~MIDIHelper() +{ +} +#endif diff --git a/guitar/backup/20040219/MessageBox.hpp b/guitar/backup/20040219/MessageBox.hpp new file mode 100644 index 0000000..53be76b --- /dev/null +++ b/guitar/backup/20040219/MessageBox.hpp @@ -0,0 +1,47 @@ +#ifndef _GUITAR_MESSAGE_HPP_ +#define _GUITAR_MESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif + +class MessageBox +{ +public: + static LRESULT messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type=MB_OK); + static LRESULT messageBox(const String &strCaption,const String &strText,UINT type=MB_OK); +private: + MessageBox(); + static String getProductVersion(const VersionInfo &versionInfo); +}; + +inline +MessageBox::MessageBox() +{ +} + +inline +LRESULT MessageBox::messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(parent,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +LRESULT MessageBox::messageBox(const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(0,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +String MessageBox::getProductVersion(const VersionInfo &versionInfo) +{ + return String("[")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("]"); +} +#endif diff --git a/guitar/backup/20040219/NoteType.cpp b/guitar/backup/20040219/NoteType.cpp new file mode 100644 index 0000000..2877fe9 --- /dev/null +++ b/guitar/backup/20040219/NoteType.cpp @@ -0,0 +1,80 @@ +#include + +const NoteType &NoteType::operator++(void) +{ + if(WholeNote==mNoteType)mNoteType=HalfNote; + else if(HalfNote==mNoteType)mNoteType=QuarterNote; + else if(QuarterNote==mNoteType)mNoteType=EighthNote; + else if(EighthNote==mNoteType)mNoteType=SixteenthNote; + else if(SixteenthNote==mNoteType)mNoteType=ThirtySecondNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixtyFourthNote; + else mNoteType++; + return *this; +} + +const NoteType &NoteType::operator--(void) +{ + if(HalfNote==mNoteType)mNoteType=WholeNote; + else if(QuarterNote==mNoteType)mNoteType=HalfNote; + else if(EighthNote==mNoteType)mNoteType=QuarterNote; + else if(SixteenthNote==mNoteType)mNoteType=EighthNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixteenthNote; + else if(SixtyFourthNote==mNoteType)mNoteType=ThirtySecondNote; + else mNoteType--; + return *this; +} + +NoteType &NoteType::fromString(const String &stringRep) +{ + if(stringRep.equals(toString(WholeNote)))mNoteType=WholeNote; + else if(stringRep.equals(toString(HalfNote)))mNoteType=HalfNote; + else if(stringRep.equals(toString(QuarterNote)))mNoteType=QuarterNote; + else if(stringRep.equals(toString(EighthNote)))mNoteType=EighthNote; + else if(stringRep.equals(toString(SixteenthNote)))mNoteType=SixteenthNote; + else if(stringRep.equals(toString(ThirtySecondNote)))mNoteType=ThirtySecondNote; + else if(stringRep.equals(toString(SixtyFourthNote)))mNoteType=SixtyFourthNote; + else mNoteType=stringRep.betweenString('/',0).toInt(); + return *this; +} + +Array NoteType::enumerate(void) +{ + Array values; + values.size(7); + values[0]=NoteType::toString(WholeNote); + values[1]=NoteType::toString(HalfNote); + values[2]=NoteType::toString(QuarterNote); + values[3]=NoteType::toString(EighthNote); + values[4]=NoteType::toString(SixteenthNote); + values[5]=NoteType::toString(ThirtySecondNote); + values[6]=NoteType::toString(SixtyFourthNote); + return values; +} + +String NoteType::toString(void)const +{ + return toString(getNoteType()); +} + +String NoteType::toString(TypeNote noteType) +{ + switch(noteType) + { + case WholeNote : + return "1/1"; + case HalfNote : + return "1/2"; + case QuarterNote : + return "1/4"; + case EighthNote : + return "1/8"; + case SixteenthNote : + return "1/16"; + case ThirtySecondNote : + return "1/32"; + case SixtyFourthNote : + return "1/64"; + default : + return "1/"+String().fromInt((int)noteType); + } +} diff --git a/guitar/backup/20040219/NoteType.hpp b/guitar/backup/20040219/NoteType.hpp new file mode 100644 index 0000000..f9c0567 --- /dev/null +++ b/guitar/backup/20040219/NoteType.hpp @@ -0,0 +1,86 @@ +#ifndef _GUITAR_NOTETYPE_HPP_ +#define _GUITAR_NOTETYPE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class NoteType +{ +public: + enum TypeNote{WholeNote=1,HalfNote=2,QuarterNote=4,EighthNote=8, + SixteenthNote=16,ThirtySecondNote=32,SixtyFourthNote=64}; + NoteType(TypeNote noteType=QuarterNote); + virtual ~NoteType(); + const NoteType &operator++(void); + NoteType operator++(int postfix); + const NoteType &operator--(void); + NoteType operator--(int postfix); + TypeNote getNoteType(void)const; + int toInt(void)const; + NoteType &fromInt(int noteType); + NoteType &fromString(const String &stringRep); + void setNoteType(TypeNote noteType); + String toString(void)const; + static Array enumerate(void); + static String toString(TypeNote noteType); +private: + int mNoteType; +}; + +inline +NoteType::NoteType(TypeNote noteType) +: mNoteType(noteType) +{ +} + +inline +NoteType::~NoteType() +{ +} + +inline +NoteType NoteType::operator++(int postfix) +{ + NoteType noteType(*this); + operator++(); + return noteType; +} + +inline +NoteType NoteType::operator--(int postfix) +{ + NoteType noteType(*this); + operator--(); + return noteType; +} + +inline +int NoteType::toInt(void)const +{ + return (int)mNoteType; +} + +inline +NoteType &NoteType::fromInt(int noteType) +{ + mNoteType=(TypeNote)noteType; + return *this; +} + +inline +NoteType::TypeNote NoteType::getNoteType(void)const +{ + return (TypeNote)mNoteType; +} + +inline +void NoteType::setNoteType(TypeNote noteType) +{ + mNoteType=noteType; +} +#endif + + diff --git a/guitar/backup/20040219/Range.hpp b/guitar/backup/20040219/Range.hpp new file mode 100644 index 0000000..a848e22 --- /dev/null +++ b/guitar/backup/20040219/Range.hpp @@ -0,0 +1,119 @@ +#ifndef _GUITAR_RANGE_HPP_ +#define _GUITAR_RANGE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Range; +typedef Block TabRanges; + +class Range +{ +public: + Range(); + virtual ~Range(); + int getBeginRange(void)const; + void setBeginRange(int beginRange); + int getEndRange(void)const; + void setEndRange(int endRange); + const String &getRangeName(void)const; + void setRangeName(const String &rangeName); + void autoName(void); + String toString(void)const; + String toTabbedString(void)const; +private: + enum{ShortNameLength=20}; + String createRangeName(void)const; + + int mBeginRange; + int mEndRange; + String mRangeName; +}; + +inline +Range::Range() +: mBeginRange(0), mEndRange(0) +{ +} + +inline +Range::~Range() +{ +} + +inline +int Range::getBeginRange(void)const +{ + return mBeginRange; +} + +inline +void Range::setBeginRange(int beginRange) +{ + mBeginRange=beginRange; +} + +inline +int Range::getEndRange(void)const +{ + return mEndRange; +} + +inline +void Range::setEndRange(int endRange) +{ + mEndRange=endRange; +} + +inline +const String &Range::getRangeName(void)const +{ + return mRangeName; +} + +inline +void Range::setRangeName(const String &rangeName) +{ + mRangeName=rangeName; +} + +inline +void Range::autoName(void) +{ + setRangeName(createRangeName()); +} + +inline +String Range::createRangeName(void)const +{ + String strRangeName("RANGE_"); + strRangeName+=String().fromInt(getBeginRange()); + strRangeName+=String("_"); + strRangeName+=String().fromInt(getEndRange()); + return strRangeName; +} + +inline +String Range::toString(void)const +{ + String strString(getRangeName()); + strString+=String("[")+String().fromInt(getBeginRange())+String("->")+String().fromInt(getEndRange()); + return strString; +} + +inline +String Range::toTabbedString(void)const +{ + String strItem; + String shortName; + + shortName=getRangeName(); + strItem+=shortName.substr(0,ShortNameLength-1)+"\t"; + strItem+=String().fromInt(getBeginRange())+"\t"; + strItem+=String().fromInt(getEndRange()); + return strItem; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040219/RangeDlg.cpp b/guitar/backup/20040219/RangeDlg.cpp new file mode 100644 index 0000000..5b65779 --- /dev/null +++ b/guitar/backup/20040219/RangeDlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include + +RangeDialog::RangeDialog(void) +{ + mInitHandler.setCallback(this,&RangeDialog::initHandler); + mCreateHandler.setCallback(this,&RangeDialog::createHandler); + mCloseHandler.setCallback(this,&RangeDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog::RangeDialog(const RangeDialog &someRangeDialog) +{ // private implementation + *this=someRangeDialog; +} + +RangeDialog::~RangeDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog) +{ // private implementation + return *this; +} + +bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + mTabRanges=ranges; + mMaxRange=maxRange; + mIsSelection=isSelect; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST); + mRangeList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(55)); + mRangeList->setTabStops(stops); + setRangeList(); + if(mIsSelection) + { + enable(RANGE_INSERT,false); + enable(RANGE_DELETE,false); + setCaption("Range Select"); + } + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(mIsSelection)handleRangeSelection(); + endDialog(true); + break; + case RANGE_INSERT : + handleRangeInsert(); + break; + case RANGE_DELETE : + handleRangeDelete(); + break; + } + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + if(mIsSelection) + { + handleRangeSelection(); + endDialog(true); + } + else handleRangeEditSelection(); + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeDialog::setRangeList(void) +{ + for(int index=0;indexaddString(range.toTabbedString()); + } + mRangeList->setCurrent(0); + return; +} + +void RangeDialog::handleRangeSelection(void) +{ + mSelection=mRangeList->getCurrent(); +} + +void RangeDialog::handleRangeEditSelection(void) +{ + RangeEditDialog rangeEditDialog; + int currSel; + + currSel=mRangeList->getCurrent(); + if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return; + Range range=rangeEditDialog.getRange(); + mTabRanges.remove(currSel); + mTabRanges.insert(&range); + mRangeList->deleteString(currSel); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeInsert(void) +{ + RangeEditDialog rangeEditDialog; + Range range; + + if(!rangeEditDialog.perform(*this,range,mMaxRange))return; + range=rangeEditDialog.getRange(); + mTabRanges.insert(&range); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeDelete(void) +{ + int currSel; + + if(-1==(currSel=mRangeList->getCurrent()))return; + if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return; + mRangeList->deleteString(currSel); + mTabRanges.remove(currSel); + currSel--; + if(currSel<0)mRangeList->setCurrent(0); + else mRangeList->setCurrent(currSel); +} diff --git a/guitar/backup/20040219/RangeDlg.hpp b/guitar/backup/20040219/RangeDlg.hpp new file mode 100644 index 0000000..0fc857c --- /dev/null +++ b/guitar/backup/20040219/RangeDlg.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_RANGEDLG_HPP_ +#define _GUITAR_RANGEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class TabEntry; + +class RangeDialog : public DWindow +{ +public: + RangeDialog(void); + virtual ~RangeDialog(); + bool perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect=false); + const TabRanges &getTabRanges(void)const; + int getSelection(void)const; +private: + RangeDialog(const RangeDialog &someRangeDialog); + RangeDialog &operator=(const RangeDialog &someRangeDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setRangeList(void); + void handleRangeSelection(void); + void handleRangeEditSelection(void); + void handleRangeInsert(void); + void handleRangeDelete(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mRangeList; + Point mDisplayPoint; + TabRanges mTabRanges; + bool mIsSelection; + int mMaxRange; + int mSelection; +}; + +inline +const TabRanges &RangeDialog::getTabRanges(void)const +{ + return mTabRanges; +} + +inline +int RangeDialog::getSelection(void)const +{ + return mSelection; +} +#endif diff --git a/guitar/backup/20040219/RangeEditDlg.cpp b/guitar/backup/20040219/RangeEditDlg.cpp new file mode 100644 index 0000000..e0daace --- /dev/null +++ b/guitar/backup/20040219/RangeEditDlg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +RangeEditDialog::RangeEditDialog(void) +{ + mInitHandler.setCallback(this,&RangeEditDialog::initHandler); + mCreateHandler.setCallback(this,&RangeEditDialog::createHandler); + mCloseHandler.setCallback(this,&RangeEditDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeEditDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeEditDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog::RangeEditDialog(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + *this=someRangeEditDialog; +} + +RangeEditDialog::~RangeEditDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog &RangeEditDialog::operator=(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + return *this; +} + +bool RangeEditDialog::perform(GUIWindow &parentWindow,const Range &range,int maxRange) +{ + mRange=range; + mMaxRange=maxRange; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEEDITDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeEditDialog::initHandler(CallbackData &someCallbackData) +{ + if(mRange.getRangeName().isNull()&&!mRange.getBeginRange()&&!mRange.getEndRange())setCaption("Insert Range"); + setData(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeEditDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + getData(); + if(!isValid())errorMessage(); + else endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeEditDialog::setData(void)const +{ + setText(RANGEEDIT_NAME,mRange.getRangeName()); + setText(RANGEEDIT_BEGIN,String().fromInt(mRange.getBeginRange())); + setText(RANGEEDIT_END,String().fromInt(mRange.getEndRange())); +} + +void RangeEditDialog::getData(void) +{ + String strName; + String strBegin; + String strEnd; + + getText(RANGEEDIT_NAME,strName); + mRange.setRangeName(strName); + getText(RANGEEDIT_BEGIN,strBegin); + mRange.setBeginRange(strBegin.toInt()); + getText(RANGEEDIT_END,strEnd); + mRange.setEndRange(strEnd.toInt()); +} + +bool RangeEditDialog::isValid(void) +{ + if(mRange.getRangeName().isNull()) + { + mLastError="Range name cannot be empty."; + return false; + } + if(mRange.getBeginRange()<0) + { + mLastError="Begin range position must be greater than zero."; + return false; + } + if(mRange.getBeginRange()>mRange.getEndRange()) + { + mLastError="Begin range position must be smaller than end range position."; + return false; + } + if(mRange.getEndRange()>=mMaxRange) + { + mLastError="End range position must be less than "+String().fromInt(mMaxRange); + return false; + } + return true; +} + +void RangeEditDialog::errorMessage(void) +{ + MessageBox::messageBox(*this,"Invalid range.",mLastError.str()); +} diff --git a/guitar/backup/20040219/RangeEditDlg.hpp b/guitar/backup/20040219/RangeEditDlg.hpp new file mode 100644 index 0000000..3139037 --- /dev/null +++ b/guitar/backup/20040219/RangeEditDlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_RANGEEDITDLG_HPP_ +#define _GUITAR_RANGEEDITDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class RangeEditDialog : public DWindow +{ +public: + RangeEditDialog(void); + virtual ~RangeEditDialog(); + bool perform(GUIWindow &parentWindow,const Range &range,int maxRange); + const Range &getRange(void)const; +private: + RangeEditDialog(const RangeEditDialog &someRangeEditDialog); + RangeEditDialog &operator=(const RangeEditDialog &someRangeEditDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setData(void)const; + void getData(void); + bool isValid(void); + void errorMessage(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Range mRange; + String mLastError; + int mMaxRange; +}; + +inline +const Range &RangeEditDialog::getRange(void)const +{ + return mRange; +} +#endif diff --git a/guitar/backup/20040219/Registration.hpp b/guitar/backup/20040219/Registration.hpp new file mode 100644 index 0000000..9871a01 --- /dev/null +++ b/guitar/backup/20040219/Registration.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REGISTRATION_HPP_ +#define _GUITAR_REGISTRATION_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _GUITAR_LICENSE_HPP_ +#include +#endif + +// Registration procedure +// When application first comes up it will check registry for a license + +// If no license exists and there is no "install.gid" file it will create a 30 day license +// along with an "install.gid" hidden file in the product directory. +// If no license key exists and there IS an "install.gid" file in the product directory, +// the user will be prompted to enter a valid license key. +// +// +// If a license exists it will check the validity of the license by.... +// If the license is type "non expiring", the application will proceeed normally. +// If the license is type "expiring", it will check to see if the license has expired. +// If the license has expired, a dialog box will appear, prompting the user to +// enter a valid license. +// If no valid license is entered, then the application will exit. +// In addition, a dialog box will be available from the help screen to enable the user +// to enter in additional licenses + +class Registration +{ +public: + virtual ~Registration(); + static Registration &getInstance(); + bool hasLicense(void)const; + bool hasGID(void)const; + bool getLicense(License &license)const; + bool create30DayLicense(void)const; + bool create15DayLicense(void)const; + bool createPermanentLicense(void)const; + bool createLicense(int days)const; + bool removeLicense(void); + bool applyLicense(const String &uuencodedLicense); + bool applyLicense(Block &strLicenseLines); + License generatePermanentLicense(void)const; // return a permanent license +private: + Registration(); + static SmartPointer smRegistration; + + String mRegistrationKeyName; + String mSettingsLicenseKey; + RegKey mRegKeyRegistration; +}; +#endif diff --git a/guitar/backup/20040219/ScaleDlg.cpp b/guitar/backup/20040219/ScaleDlg.cpp new file mode 100644 index 0000000..116bb1e --- /dev/null +++ b/guitar/backup/20040219/ScaleDlg.cpp @@ -0,0 +1,383 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ScaleDialog::ScaleDialog(void) +: mInEdit(false) +{ + mInitHandler.setCallback(this,&ScaleDialog::initHandler); + mCreateHandler.setCallback(this,&ScaleDialog::createHandler); + mCloseHandler.setCallback(this,&ScaleDialog::closeHandler); + mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler); + mCommandHandler.setCallback(this,&ScaleDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog) +{ // private implementation + *this=someScaleDialog; +} + +ScaleDialog::~ScaleDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog) +{ // private implementation + return *this; +} + +bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; + return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + mScaleList->addString("BeBop Dominant"); + mScaleList->addString("BeBop Major"); + mScaleList->addString("BeBop Tonic Minor"); + mScaleList->addString("BeBop Minor"); + mScaleList->addString("Eight Tone Spanish"); + mScaleList->addString("Enigmatic"); + mScaleList->addString("Gypsy"); + mScaleList->addString("Hungarian"); + mScaleList->addString("Hungarian Minor"); + mScaleList->addString("Leading Whole Tone"); + mScaleList->addString("Lydian Minor"); + mScaleList->addString("Major Locrian"); + mScaleList->addString("Neapolitan Major"); + mScaleList->addString("Neapolitan Minor"); + mScaleList->addString("Oriental"); + mScaleList->addString("Todi"); + mScaleList->addString("Super Locrian"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); + sendMessage(SCALEDLG_MUTE,BM_SETCHECK,1,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + case SCALEDLG_SPIN : + break; + case SCALEDLG_ROOT : + handleRoot(); + break; + case SCALEDLG_LIST : + if(LBN_KILLFOCUS!=someCallbackData.wmCommandCommand()&& + LBN_SETFOCUS!=someCallbackData.wmCommandCommand()) + handleList(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void ScaleDialog::handleOk(void) +{ +} + +void ScaleDialog::handleRoot(void) +{ + String strRoot; + + if(mInEdit)return; + mInEdit=true; + getText(SCALEDLG_ROOT,strRoot); + strRoot.upper(); + if(strRoot=="0")setText(SCALEDLG_ROOT,"A"); + else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#"); + else if(strRoot=="2")setText(SCALEDLG_ROOT,"B"); + else if(strRoot=="3")setText(SCALEDLG_ROOT,"C"); + else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#"); + else if(strRoot=="5")setText(SCALEDLG_ROOT,"D"); + else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#"); + else if(strRoot=="7")setText(SCALEDLG_ROOT,"E"); + else if(strRoot=="8")setText(SCALEDLG_ROOT,"F"); + else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#"); + else if(strRoot=="10")setText(SCALEDLG_ROOT,"G"); + else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#"); + else {mInEdit=false;return;} + if(!showScale())setText(SCALEDLG_ROOT,"A"); + mInEdit=false; +} + +void ScaleDialog::handleList(void) +{ + showScale(); +} + +bool ScaleDialog::showScale(void) +{ + String strScale; + String strRoot; + DWORD current; + + current=mScaleList->getCurrent(); + getText(SCALEDLG_ROOT,strRoot); + if(Note::None==Note::getNoteType(strRoot))return false; + mScaleList->getText(strScale,current); + playScale(strRoot,strScale); + return true; +} + +void ScaleDialog::playScale(const String &root,const String &scale) +{ + if(scale=="Ionian") + { + IonianScale ionianScale(Note::getNoteType(root)); + playScale(ionianScale); + } + else if(scale=="Dorian") + { + DorianScale dorianScale(Note::getNoteType(root)); + playScale(dorianScale); + } + else if(scale=="Phrygian") + { + PhrygianScale phrygianScale(Note::getNoteType(root)); + playScale(phrygianScale); + } + else if(scale=="Lydian") + { + LydianScale lydianScale(Note::getNoteType(root)); + playScale(lydianScale); + } + else if(scale=="Mixolydian") + { + MixolydianScale mixolydianScale(Note::getNoteType(root)); + playScale(mixolydianScale); + } + else if(scale=="Aeolian") + { + AeolianScale aeolianScale(Note::getNoteType(root)); + playScale(aeolianScale); + } + else if(scale=="Locrian") + { + LocrianScale locrianScale(Note::getNoteType(root)); + playScale(locrianScale); + } + else if(scale=="Pentatonic Minor") + { + PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root)); + playScale(pentatonicMinorScale); + } + else if(scale=="Harmonic Minor") + { + HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root)); + playScale(harmonicMinorScale); + } + else if(scale=="Melodic Minor") + { + MelodicMinorScale melodicMinorScale(Note::getNoteType(root)); + playScale(melodicMinorScale); + } + else if(scale=="Dorian-II") + { + DorianIIScale dorianIIScale(Note::getNoteType(root)); + playScale(dorianIIScale); + } + else if(scale=="Lydian Augmented") + { + LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root)); + playScale(lydianAugmentedScale); + } + else if(scale=="Lydian Dominant") + { + LydianDominantScale lydianDominantScale(Note::getNoteType(root)); + playScale(lydianDominantScale); + } + else if(scale=="Locrian2") + { + Locrian2Scale locrian2Scale(Note::getNoteType(root)); + playScale(locrian2Scale); + } + else if(scale=="Altered") + { + AlteredScale alteredScale(Note::getNoteType(root)); + playScale(alteredScale); + } + else if(scale=="Diminished(Whole Step)") + { + DiminishedWholeScale diminishedWholeScale(Note::getNoteType(root)); + playScale(diminishedWholeScale); + } + else if(scale=="Diminished(Half Step)") + { + DiminishedHalfScale diminishedHalfScale(Note::getNoteType(root)); + playScale(diminishedHalfScale); + } + else if(scale=="Whole Tone") + { + WholeToneScale wholeToneScale(Note::getNoteType(root)); + playScale(wholeToneScale); + } + else if(scale=="BeBop Dominant") + { + BeBopDominantScale bebopDominantScale(Note::getNoteType(root)); + playScale(bebopDominantScale); + } + else if(scale=="BeBop Major") + { + BeBopMajorScale bebopMajorScale(Note::getNoteType(root)); + playScale(bebopMajorScale); + } + else if(scale=="BeBop Tonic Minor") + { + BeBopTonicMinorScale bebopTonicMinorScale(Note::getNoteType(root)); + playScale(bebopTonicMinorScale); + } + else if(scale=="BeBop Minor") + { + BeBopMinorScale bebopMinorScale(Note::getNoteType(root)); + playScale(bebopMinorScale); + } + else if(scale=="Eight Tone Spanish") + { + EightToneSpanishScale eightToneSpanishScale(Note::getNoteType(root)); + playScale(eightToneSpanishScale); + } + else if(scale=="Enigmatic") + { + EnigmaticScale enigmaticScale(Note::getNoteType(root)); + playScale(enigmaticScale); + } + else if(scale=="Gypsy") + { + GypsyScale gypsyScale(Note::getNoteType(root)); + playScale(gypsyScale); + } + else if(scale=="Hungarian") + { + HungarianScale hungarianScale(Note::getNoteType(root)); + playScale(hungarianScale); + } + else if(scale=="Hungarian Minor") + { + HungarianMinorScale hungarianMinorScale(Note::getNoteType(root)); + playScale(hungarianMinorScale); + } + else if(scale=="Leading Whole Tone") + { + LeadingWholeToneScale leadingWholeToneScale(Note::getNoteType(root)); + playScale(leadingWholeToneScale); + } + else if(scale=="Lydian Minor") + { + LydianMinorScale lydianMinorScale(Note::getNoteType(root)); + playScale(lydianMinorScale); + } + else if(scale=="Major Locrian") // same as LydianMinor + { + MajorLocrianScale majorLocrianScale(Note::getNoteType(root)); + playScale(majorLocrianScale); + } + else if(scale=="Neapolitan Major") + { + NeapolitanMajorScale neapolitanMajorScale(Note::getNoteType(root)); + playScale(neapolitanMajorScale); + } + else if(scale=="Neapolitan Minor") + { + NeapolitanMinorScale neapolitanMinorScale(Note::getNoteType(root)); + playScale(neapolitanMinorScale); + } + else if(scale=="Oriental") + { + OrientalScale orientalScale(Note::getNoteType(root)); + playScale(orientalScale); + } + else if(scale=="Todi") + { + TodiScale todiScale(Note::getNoteType(root)); + playScale(todiScale); + } + else if(scale=="Super Locrian") + { + SuperLocrianScale superLocrianScale(Note::getNoteType(root)); + playScale(superLocrianScale); + } +} + +void ScaleDialog::playScale(const Scale &scale) +{ + int command=BST_CHECKED==sendMessage(SCALEDLG_MUTE,BM_GETCHECK,0,0L)?CBCommands::FBShowScale:CBCommands::FBPlayScale; + CallbackData cbData(command,(LPARAM)&scale); + CursorControl cursorControl; + cursorControl.waitCursor(true); + mPlayNoteHandler.callback(cbData); + cursorControl.waitCursor(false); +} + + diff --git a/guitar/backup/20040219/ScaleDlg.hpp b/guitar/backup/20040219/ScaleDlg.hpp new file mode 100644 index 0000000..291ebaa --- /dev/null +++ b/guitar/backup/20040219/ScaleDlg.hpp @@ -0,0 +1,59 @@ +#ifndef _GUITAR_SCALEDLG_HPP_ +#define _GUITAR_SCALEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class Scale; + +class ScaleDialog : public DWindow +{ +public: + ScaleDialog(void); + virtual ~ScaleDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + ScaleDialog(const ScaleDialog &someScaleDialog); + ScaleDialog &operator=(const ScaleDialog &someScaleDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void handleRoot(void); + void handleList(void); + bool showScale(void); + void playScale(const Scale &scale); + void playScale(const String &root,const String &scale); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mScaleList; + SmartPointer mMIDIDevice; + CallbackPointer mPlayNoteHandler; + Fretboard mFretboard; + bool mInEdit; +}; +#endif diff --git a/guitar/backup/20040219/ScrollInfo.cpp b/guitar/backup/20040219/ScrollInfo.cpp new file mode 100644 index 0000000..76ba573 --- /dev/null +++ b/guitar/backup/20040219/ScrollInfo.cpp @@ -0,0 +1,136 @@ +#include + +bool ScrollInfo::pageDown(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()+PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +bool ScrollInfo::pageUp(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()-PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + diff --git a/guitar/backup/20040219/ScrollInfo.hpp b/guitar/backup/20040219/ScrollInfo.hpp new file mode 100644 index 0000000..2dc42c1 --- /dev/null +++ b/guitar/backup/20040219/ScrollInfo.hpp @@ -0,0 +1,274 @@ +#ifndef _GUITAR_SCROLLINFO_HPP_ +#define _GUITAR_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); + bool pageUp(void); + bool pageDown(void); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + + if(scrollableObjectWidth()==width&&scrollableObjectHeight()==height)return; + + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_REGISTRY_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class Sequencer : private MIDIOutputDevice +{ +public: + Sequencer(); + virtual ~Sequencer(); + bool midiEvent(const PureEvent &somePureEvent); + bool clearNotes(void); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + MIDIOutputDevice &getDevice(void); +private: + void changeProgram(void); +}; + +inline +Sequencer::Sequencer() +: MIDIOutputDevice(Registry().getMIDIOutputDevice()) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::Sequencer] Sequencer()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + changeProgram(); +} + +inline +Sequencer::~Sequencer() +{ + GlobalDefs::outDebug("[Sequencer::Sequencer] Sequencer()",GlobalDefs::Info); + closeDevice(); +} + +inline +bool Sequencer::midiEvent(const PureEvent &somePureEvent) +{ + GlobalDefs::outDebug(String("[Sequencer::midiEvent] ")+somePureEvent.toString(),GlobalDefs::Info); + return MIDIOutputDevice::midiEvent(somePureEvent); +} + +inline +bool Sequencer::hasDevice(void)const +{ + GlobalDefs::outDebug(String("[Sequencer::hasDevice] "),GlobalDefs::Info); + return MIDIOutputDevice::hasDevice(); +} + +inline +void Sequencer::closeDevice(void) +{ + GlobalDefs::outDebug(String("[Sequencer::closeDevice] "),GlobalDefs::Info); + MIDIOutputDevice::closeDevice(); +} + +inline +bool Sequencer::openDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::openDevice] registry.getMIDIOutputDevice()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; + changeProgram(); + return true; +} + +inline +bool Sequencer::clearNotes(void) +{ + GlobalDefs::outDebug(String("[Sequencer::clearNotes]"),GlobalDefs::Info); + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +} + +inline +MIDIOutputDevice &Sequencer::getDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::getDevice]"),GlobalDefs::Info); + if(!hasDevice()) + { + GlobalDefs::outDebug(String("[Sequencer::getDevice] OpenDevice"),GlobalDefs::Info); + MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()); + changeProgram(); + } + return (MIDIOutputDevice&)*this; +} + +inline +void Sequencer::changeProgram(void) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::changeProgram]"),GlobalDefs::Info); + midiEvent(ProgramChange(registry.getInstrument().program()).getEvent()); +} +#endif diff --git a/guitar/backup/20040219/TabEntry.cpp b/guitar/backup/20040219/TabEntry.cpp new file mode 100644 index 0000000..1d915a2 --- /dev/null +++ b/guitar/backup/20040219/TabEntry.cpp @@ -0,0 +1,141 @@ +#include +#include +#include +#include +#include + +TabEntry::TabEntry(const TabEntry &entry) +{ + *this=entry; +} + +TabEntry &TabEntry::operator=(const TabEntry &entry) +{ + remove(); + for(int index=0;index&)*this).operator[](index)==((TabEntry&)entry)[index]))return false; + } + return true; +} + +bool TabEntry::play(MIDIOutputDevice &midiDevice,bool useDelay)const +{ + if(!midiDevice.hasDevice())return false; +// midiDevice.midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); + for(int index=0;index::remove(entryIndex); + return true; +} + +String TabEntry::toString(void)const +{ + String str; + + str+="TABENTRY "; + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif +#ifndef _GUITAR_TIMING_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class TabEntry; +typedef Block TabEntries; + +class TabEntry : public Block +{ +public: + TabEntry(); + TabEntry(const TabEntry &entry); + virtual ~TabEntry(); + bool play(MIDIOutputDevice &midiDevice,bool useDelay=true)const; + bool operator==(const TabEntry &entry)const; + TabEntry &operator=(const TabEntry &entry); + const NoteType &getNoteType(void)const; + void setNoteType(const NoteType ¬eType); + String toString(void)const; + bool fromString(String strText); + bool fromChord(const Music::Chord &chord); + bool contains(int string,int &entryIndex); + bool contains(int string); + bool remove(int string,int fret); + void remove(void); + bool addFrettedNote(int string,const FrettedNote &frettedNote); + bool setFrettedNote(int string,const FrettedNote &frettedNote); +private: + void delay(void)const; + + NoteType mNoteType; +}; + +inline +TabEntry::TabEntry() +{ +} + +inline +TabEntry::~TabEntry() +{ +} + +inline +const NoteType &TabEntry::getNoteType(void)const +{ + return mNoteType; +} + +inline +void TabEntry::setNoteType(const NoteType ¬eType) +{ + mNoteType=noteType; +} + +inline +void TabEntry::remove(void) +{ + Block::remove(); +} +#endif diff --git a/guitar/backup/20040219/TabLines.cpp b/guitar/backup/20040219/TabLines.cpp new file mode 100644 index 0000000..a56ae0d --- /dev/null +++ b/guitar/backup/20040219/TabLines.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +// returns -1 on error, 1 if added to entry, 0 otherwise + +int TabLines::firstElement(TabEntry &entry,Fretboard &fretboard) +{ + TabElement element; + + entry.remove(); + for(int index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabEntry; +class Fretboard; + +typedef Element TabElement[6]; + +class TabLines : public Array +{ +public: + enum{NumLines=6}; + TabLines(); + int firstElement(TabEntry &entry,Fretboard &fretboard); + int nextElement(TabEntry &entry,Fretboard &fretboard); + virtual ~TabLines(); +private: + bool haveElement(TabElement &elements)const; + bool validate(Element &elements)const; + void insert(TabEntry &entry,TabElement &elements,Fretboard &fretboard); + void synchronize(void); +}; + +inline +TabLines::TabLines() +{ + size(NumLines); +} + +inline +TabLines::~TabLines() +{ +} +#endif diff --git a/guitar/backup/20040219/TabView.cpp b/guitar/backup/20040219/TabView.cpp new file mode 100644 index 0000000..ba2f85b --- /dev/null +++ b/guitar/backup/20040219/TabView.cpp @@ -0,0 +1,95 @@ +#include + +TabView::TabView(void) +{ + mCreateHandler.setCallback(this,&TabView::createHandler); + mSizeHandler.setCallback(this,&TabView::sizeHandler); + mPaintHandler.setCallback(this,&TabView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&TabView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&TabView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabView::leftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +TabView::~TabView() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType TabView::createHandler(CallbackData &someCallbackData) +{ + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType TabView::sizeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType TabView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void TabView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String TabView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void TabView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(LTGRAY_BRUSH); +} + +void TabView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20040219/TabView.hpp b/guitar/backup/20040219/TabView.hpp new file mode 100644 index 0000000..6f9ef25 --- /dev/null +++ b/guitar/backup/20040219/TabView.hpp @@ -0,0 +1,42 @@ +#ifndef _GUITAR_TABVIEW_HPP_ +#define _GUITAR_TABVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class StatusBarEx; + +class TabView : public MDIWindow +{ +public: + TabView(void); + virtual ~TabView(); + String getTitle(void)const; +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,WindowWidth=565,WindowHeight=210}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + SmartPointer mStatusBar; +}; +#endif diff --git a/guitar/backup/20040219/TabWriter.cpp b/guitar/backup/20040219/TabWriter.cpp new file mode 100644 index 0000000..d3f5222 --- /dev/null +++ b/guitar/backup/20040219/TabWriter.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + + GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug); + if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb")) + { + GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug); + return false; + } + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + initLines(); + setHeader(); + for(int index=0,entryCount=0;indexMaxItems) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outFile); + outFile.writeLine(String(" ")); + initLines(); + setHeader(); + entryCount=0; + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabWriter : public Array +{ +public: + TabWriter(); + virtual ~TabWriter(); + bool write(TabEntries &entries,const String &strPathTabFile); +private: + enum {MaxItems=30,NumLines=6}; + void writeLines(File &outFile); + void initLines(void); + void setHeader(void); + void synchronize(void); +}; + +inline +TabWriter::TabWriter() +{ +} + +inline +TabWriter::~TabWriter() +{ +} +#endif diff --git a/guitar/backup/20040219/Tablature.hpp b/guitar/backup/20040219/Tablature.hpp new file mode 100644 index 0000000..000104e --- /dev/null +++ b/guitar/backup/20040219/Tablature.hpp @@ -0,0 +1,93 @@ +#ifndef _GUITAR_TABLATURE_HPP_ +#define _GUITAR_TABLATURE_HPP_ +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_TABLINES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class GUIWindow; +class TabPage; + +class Tablature +{ +public: + typedef enum LastError{None,FileOpenError,NoTabsParsedError,NoFrettedNotesError}; + Tablature(); + Tablature(const String &pathFileName); + virtual ~Tablature(); + bool open(const String &pathFileTablature); // open tablature file + bool import(String pathFileTablature); // import tablature file into project + bool save(void); // save tablature file + bool saveAs(const String &pathFileTablature); // save tablature file as... + bool openProject(const String &pathFileName); // open existing project file + bool saveProject(const String &pathFileName=String()); // save current project + bool play(MIDIOutputDevice &midiDevice); + LastError getLastError(void)const; + const String &getPathFileTablature(void)const; + const String &getPathFileProject(void)const; + const TabEntries &getTabEntries(void)const; + void setTabEntries(const TabEntries &entries); + const TabRanges &getTabRanges(void)const; + void setTabRanges(const TabRanges &ranges); + static String getPathFileProject(const String &pathFileTablature); +private: + bool loadTabFile(const String &pathFileName); + bool parseTab(void); + bool isTabLine(const String &strLine,int &startElement)const; + bool setTypeAt(int index,const NoteType ¬eType); + void parseTypes(String strLine); + void parseRange(String strLine); + String getTypes(void)const; + + TabEntries mTabEntries; + TabRanges mTabRanges; + Block mTablature; + Fretboard mFretboard; + String mPathFileName; + LastError mLastError; + String mPathFileTablature; + String mPathFileProject; +}; + +inline +Tablature::Tablature() +{ +} + +inline +Tablature::Tablature(const String &pathFileName) +{ + open(pathFileName); +} + +inline +Tablature::~Tablature() +{ +} + +inline +Tablature::LastError Tablature::getLastError(void)const +{ + return mLastError; +} + +inline +const String &Tablature::getPathFileTablature(void)const +{ + return mPathFileTablature; +} + +inline +const String &Tablature::getPathFileProject(void)const +{ + return mPathFileProject; +} +#endif diff --git a/guitar/backup/20040219/Timing.cpp b/guitar/backup/20040219/Timing.cpp new file mode 100644 index 0000000..f638d7a --- /dev/null +++ b/guitar/backup/20040219/Timing.cpp @@ -0,0 +1,138 @@ +#include +#include +#include + +int Timing::mMicrosecondsPerQuarterNote=Timing::microsecondsPerQuarterNote(Registry().getMicrosecondsPerQuarterNote()); +int Timing::mMillisecondsPerWholeNote; +int Timing::mMillisecondsPerHalfNote; +int Timing::mMillisecondsPerQuarterNote; +int Timing::mMillisecondsPerEigthNote; +int Timing::mMillisecondsPerSixteenthNote; +int Timing::mMillisecondsPerThirtySecondNote; +int Timing::mMillisecondsPerSixtyFourthNote; + +int Timing::microsecondsPerQuarterNote(int microsecondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=microsecondsPerQuarterNote; + mMillisecondsPerQuarterNote=(double)microsecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; + return mMicrosecondsPerQuarterNote; +} + +int Timing::microsecondsPerQuarterNote(void) +{ + return mMicrosecondsPerQuarterNote; +} + +void Timing::secondsPerQuarterNote(float secondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=secondsPerQuarterNote*1000000.00;; + mMillisecondsPerQuarterNote=(double)mMicrosecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; +} + +int Timing::millisecondsPerWholeNote(void) +{ + return mMillisecondsPerWholeNote; +} + +int Timing::millisecondsPerHalfNote(void) +{ + return mMillisecondsPerHalfNote; +} + +int Timing::millisecondsPerQuarterNote(void) +{ + return mMillisecondsPerQuarterNote; +} + +int Timing::millisecondsPerEightNote(void) +{ + return mMillisecondsPerEigthNote; +} + +int Timing::millisecondsPerSixteenthNote(void) +{ + return mMillisecondsPerSixteenthNote; +} + +int Timing::millisecondsPerThirtySecondNote(void) +{ + return mMillisecondsPerThirtySecondNote; +} + +int Timing::millisecondsPerSixtyFourthNote(void) +{ + return mMillisecondsPerSixtyFourthNote; +} + +int Timing::getDelay(const NoteType ¬eType) +{ + switch(noteType.getNoteType()) + { + case NoteType::WholeNote : + return millisecondsPerWholeNote(); + case NoteType::HalfNote : + return millisecondsPerHalfNote(); + case NoteType::QuarterNote : + return millisecondsPerQuarterNote(); + case NoteType::EighthNote : + return millisecondsPerEightNote(); + case NoteType::SixteenthNote : + return millisecondsPerSixteenthNote(); + case NoteType::ThirtySecondNote : + return millisecondsPerThirtySecondNote(); + case NoteType::SixtyFourthNote : + return millisecondsPerSixtyFourthNote(); + default : + return millisecondsPerSixtyFourthNote(); + } +} + +String Timing::toString(void) +{ + String strTiming; + strTiming+=String("1/1=")+String().fromInt(millisecondsPerWholeNote())+String("ms, "); + strTiming+=String("1/2=")+String().fromInt(millisecondsPerHalfNote())+String("ms, "); + strTiming+=String("1/4=")+String().fromInt(millisecondsPerQuarterNote())+String("ms, "); + strTiming+=String("1/8=")+String().fromInt(millisecondsPerEightNote())+String("ms, "); + strTiming+=String("1/16=")+String().fromInt(millisecondsPerSixteenthNote())+String("ms, "); + strTiming+=String("1/32=")+String().fromInt(millisecondsPerThirtySecondNote())+String("ms, "); + strTiming+=String("1/64=")+String().fromInt(millisecondsPerSixtyFourthNote())+String("ms, "); + return strTiming; +} + + +/* +microseconds per quarter note = 631578 +milliseconds per quarter note = 631578/1000 = 631 + 631578*.001 = 631 + +msecs per qtr note=usecs per qtr note *.001 + +quarter note = msecs per 4th note +eigth note = msecs/2 +sixteenth note = msecs/4 +thirty second note = msecs/8 +sixty fourth note = msecs/16 + +(ie) +microsecs millisecs 4th note 8th note 16th note 32nd note 64th note +--------- --------- -------- -------- --------- --------- --------- + 631578 631 631 315 157 78 39 + +options +seconds per qtr note: .5 + +msecs per qtr note=(seconds_per_qtr_note*1000) +*/ \ No newline at end of file diff --git a/guitar/backup/20040219/Timing.hpp b/guitar/backup/20040219/Timing.hpp new file mode 100644 index 0000000..96bcf39 --- /dev/null +++ b/guitar/backup/20040219/Timing.hpp @@ -0,0 +1,48 @@ +#ifndef _GUITAR_TIMING_HPP_ +#define _GUITAR_TIMING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif + +class Timing +{ +public: + static int microsecondsPerQuarterNote(int microsecondsPerQuarterNote); + static int microsecondsPerQuarterNote(void); + static void secondsPerQuarterNote(float secondsPerQuarterNote); + static int millisecondsPerWholeNote(void); + static int millisecondsPerHalfNote(void); + static int millisecondsPerQuarterNote(void); + static int millisecondsPerEightNote(void); + static int millisecondsPerSixteenthNote(void); + static int millisecondsPerThirtySecondNote(void); + static int millisecondsPerSixtyFourthNote(void); + static int getDelay(const NoteType ¬eType); + static String toString(void); +private: + Timing(); + virtual ~Timing(); + static int mMicrosecondsPerQuarterNote; + static int mMillisecondsPerWholeNote; + static int mMillisecondsPerHalfNote; + static int mMillisecondsPerQuarterNote; + static int mMillisecondsPerEigthNote; + static int mMillisecondsPerSixteenthNote; + static int mMillisecondsPerThirtySecondNote; + static int mMillisecondsPerSixtyFourthNote; +}; + +inline +Timing::Timing() +{ +} + +inline +Timing::~Timing() +{ +} +#endif + diff --git a/guitar/backup/20040219/Tuning.cpp b/guitar/backup/20040219/Tuning.cpp new file mode 100644 index 0000000..c4b1cb6 --- /dev/null +++ b/guitar/backup/20040219/Tuning.cpp @@ -0,0 +1,20 @@ +#include +#include + +void Tuning::setStandardTuning(void) +{ + size(StandardTuningStrings); + operator[](0)=Note(Note::E,3); + operator[](1)=Note(Note::A,3); + operator[](2)=Note(Note::D,4); + operator[](3)=Note(Note::G,4); + operator[](4)=Note(Note::B,4); + operator[](5)=Note(Note::E,operator[](4).getOctave()+1); +} + +// virtuals + +int Tuning::getDelay(void)const +{ + return Delay; +} diff --git a/guitar/backup/20040219/Tuning.hpp b/guitar/backup/20040219/Tuning.hpp new file mode 100644 index 0000000..d4d41e7 --- /dev/null +++ b/guitar/backup/20040219/Tuning.hpp @@ -0,0 +1,43 @@ +#ifndef _GUITAR_TUNING_HPP_ +#define _GUITAR_TUNING_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif + +class Tuning : public Notes +{ +public: + enum {StandardTuningStrings=6,Delay=1000}; + Tuning(); + virtual ~Tuning(); + int getStrings(void)const; + void setStrings(int strings); + void setStandardTuning(void); +protected: + virtual int getDelay(void)const; +private: +}; + +inline +Tuning::Tuning() +{ + setStandardTuning(); +} + +inline +Tuning::~Tuning() +{ +} + +inline +int Tuning::getStrings(void)const +{ + return size(); +} + +inline +void Tuning::setStrings(int strings) +{ + size(strings); +} +#endif diff --git a/guitar/backup/20040219/chordmain.cpp b/guitar/backup/20040219/chordmain.cpp new file mode 100644 index 0000000..fc9ac30 --- /dev/null +++ b/guitar/backup/20040219/chordmain.cpp @@ -0,0 +1,33 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDef; + String strEnum; + File inFile("tabs/allchords.tab"); + File rcFile("chords.rc","wb"); + File hFile("chords.h","wb"); + int count(21000); + + rcFile.writeLine("#include "); + rcFile.writeLine("STRINGTABLE DISCARDABLE"); + rcFile.writeLine("BEGIN"); + while(inFile.readLine(strLine)) + { + strEnum="STRING_"+String().fromInt(count); + strDef=strEnum; + strDef+="\t\""; + strDef+=strLine.betweenString(0,':')+"\""; + rcFile.writeLine(strDef); + hFile.writeLine(String("#define ")+strEnum+String(" ")+String().fromInt(count)); + count++; + } + rcFile.writeLine("END"); + return 0; + +// MainFrame mainFrame; +// mainFrame.createWindow("TabMaster","TabMaster v1.00a","mainMenu","APP_ICON"); +// return mainFrame.messageLoop(); +} diff --git a/guitar/backup/20040219/fretboard.bmp b/guitar/backup/20040219/fretboard.bmp new file mode 100644 index 0000000..d253187 Binary files /dev/null and b/guitar/backup/20040219/fretboard.bmp differ diff --git a/guitar/backup/20040219/fretboard1.bmp b/guitar/backup/20040219/fretboard1.bmp new file mode 100644 index 0000000..bd7dd8c Binary files /dev/null and b/guitar/backup/20040219/fretboard1.bmp differ diff --git a/guitar/backup/20040219/guitar.bmp b/guitar/backup/20040219/guitar.bmp new file mode 100644 index 0000000..ed9b0fe Binary files /dev/null and b/guitar/backup/20040219/guitar.bmp differ diff --git a/guitar/backup/20040219/guitar.h b/guitar/backup/20040219/guitar.h new file mode 100644 index 0000000..6836966 --- /dev/null +++ b/guitar/backup/20040219/guitar.h @@ -0,0 +1,1260 @@ +#ifndef _GUITAR_GUITAR_H_ +#define _GUITAR_GUITAR_H_ + +#include "windows.h" + +// +#define IDC_STATIC -1 + +// CURSOR +#define HARROW 1000 + +// LICENSE DIALOG +#define LICENSE_DIALOG_LICENSE 1077 +#define LICENSE_DIALOG_REQUEST_LICENSE 1076 + +// ENTER CHORD DIALOG +#define ENTERCHORD_EDIT 1082 +#define ENTERCHORD_EXAMPLES 1083 + + +// MIDIDIALOG +#define MIDI_TRACK1 1042 +#define MIDI_TRACK2 1043 +#define MIDI_TRACK3 1044 +#define MIDI_TRACK4 1045 +#define MIDI_TRACK5 1046 +#define MIDI_TRACK6 1047 +#define MIDI_TRACK7 1048 +#define MIDI_TRACK8 1049 +#define MIDI_TRACK9 1050 +#define MIDI_TRACK10 1051 +#define MIDI_TRACK11 1052 +#define MIDI_TRACK12 1053 +#define MIDI_TRACK13 1054 +#define MIDI_TRACK14 1055 +#define MIDI_TRACK15 1056 +#define MIDI_TRACK16 1057 +#define MIDI_EVENTS_TRACK1 1060 +#define MIDI_EVENTS_TRACK2 1061 +#define MIDI_EVENTS_TRACK3 1062 +#define MIDI_EVENTS_TRACK4 1063 +#define MIDI_EVENTS_TRACK5 1064 +#define MIDI_EVENTS_TRACK6 1065 +#define MIDI_EVENTS_TRACK7 1066 +#define MIDI_EVENTS_TRACK8 1067 +#define MIDI_EVENTS_TRACK9 1068 +#define MIDI_EVENTS_TRACK10 1069 +#define MIDI_EVENTS_TRACK11 1070 +#define MIDI_EVENTS_TRACK12 1071 +#define MIDI_EVENTS_TRACK13 1072 +#define MIDI_EVENTS_TRACK14 1073 +#define MIDI_EVENTS_TRACK15 1074 +#define MIDI_EVENTS_TRACK16 1075 + +// FRETENTRY DIALOG +#define FRETENTRY_FRET 1037 +#define FRETENTRY_ACTION 1038 +#define FRETENTRY_STRING 1039 +#define FRETENTRY_DURATION 1040 + +// FOR SCALES DIALOG +#define SCALEDLG_LIST 1024 +#define SCALEDLG_ROOT 1025 +#define SCALEDLG_SPIN 1026 +#define SCALEDLG_MUTE 1027 + + +// FOR RANGE EDIT DIALOG +#define RANGEEDIT_NAME 1016 +#define RANGEEDIT_BEGIN 1017 +#define RANGEEDIT_END 1018 + +// FOR RANGE DIALOG +#define RANGE_LIST 1000 +#define RANGE_INSERT 1022 +#define RANGE_DELETE 1023 + +// FOR SETTINGS DIALOG +#define SETTINGS_MICROSECSPERQTRNOTE 1011 +#define SETTINGS_DEFAULTS 1012 +#define SETTINGS_SHOWACTION 1013 +#define SETTINGS_SHOWNOTES 1014 +#define SETTINGS_INSTRUMENT 1015 +#define SETTINGS_MIDIOUT 1024 + +// FOR CHORD DIALOG +#define CHORDS_LIST 1000 +#define CHORDS_COUNT 1009 + +// FOR TAB ENTRY DIALOG +#define TABENTRY_LIST 1004 +#define TABENTRY_NOTETYPE 1005 +#define TABENTRY_REMAINDER 1006 + +#define MENU_FILE_OPEN 10000 +#define MENU_FILE_EXIT 10001 +#define MENU_FILE_NEW 10002 +#define MENU_FILE_SAVE 10003 +#define MENU_FILE_SAVEAS 10004 +#define MENU_FILE_CLOSE 10005 +#define MENU_FILE_PRINT 10006 +#define MENU_FILE_IMPORT 10007 +#define MENU_FILE_MIDI_IMPORT 10008 + +#define MENU_TABLATURE_PLAY 10500 +#define MENU_TABLATURE_PLAYTOEND 10501 +#define MENU_TABLATURE_PLAYREPEATED 10502 +#define MENU_TABLATURE_PLAYRANGE 10503 +#define MENU_TABLATURE_PLAYRANGE_REPEATED 10504 +#define MENU_TABLATURE_STOP 10505 +#define MENU_TABLATURE_ENTRYPROPS 10506 +#define MENU_TABLATURE_SETSTARTRANGE 10507 +#define MENU_TABLATURE_SETENDRANGE 10508 + +#define MENU_OPTIONS_INCREASETEMPO 10601 +#define MENU_OPTIONS_DECREASETEMPO 10602 +#define MENU_OPTIONS_SETTINGS 10603 + +#define MENU_VIEW_FRETBOARD 10700 + +#define MENU_CHORDS_LOOKUP 10800 +#define MENU_CHORDS_ENTER 10801 + +#define MENU_SCALES_SHOW 10900 + +#define MENU_FRETBOARD_CLEAR 11000 +#define MENU_FRETBOARD_SHOWALLPOSITIONS 11001 + +#define MENU_EDIT_CUT 12000 +#define MENU_EDIT_COPY 12001 +#define MENU_EDIT_PASTE 12002 +#define MENU_EDIT_RANGES 12003 + +#define MENU_HELP_INDEX 12100 +#define MENU_HELP_APPLY_LICENSE 12101 +#define MENU_HELP_ABOUT 12102 + +#define TABACCELERATORS 10000 + +// STRINGS + +#define STRING_NOTITLE 19000 +#define STRING_EDITHINT 19001 +#define STRING_PRJEXTENSION 19002 +#define STRING_PRJALLEXTENSION 19003 +#define STRING_TABEXTENSION 19004 +#define STRING_BROWSERKEY 19005 +#define STRING_BROWSERKEYALT 19006 +#define STRING_BROWSERCOMMAND 19007 +#define STRING_HOST 19008 +#define STRING_HELPPAGE 19009 +#define STRING_MIDIEXTENSION 19010 +#define STRING_PURCHASE_URL 19011 + +#define STRING_TABVIEWWINDOWCLASSNAME 20000 +#define STRING_FRETVIEWWINDOWCLASSNAME 20001 +#define STRING_REGISTRYKEYNAME 20002 +#define STRING_HISTORYKEYNAME 20003 +#define STRING_HISTORYKEYSHORTNAME 20004 +#define STRING_SETTINGSKEYNAME 20005 +#define STRING_SETTINGSINSTRUMENT 20006 +#define STRING_SETTINGSACTION 20007 +#define STRING_SETTINGSNOTELETTERS 20008 +#define STRING_SETTINGSMICROSECONDSPERQUARTERNOTE 20009 +#define STRING_REGISTRATIONKEYNAME 20010 +#define STRING_SETTINGSLICENSE 20011 +#define STRING_SETTINGSMIDIOUTPUT 20012 + + +// chord definitions + +#define STRING_21000 21000 +#define STRING_21001 21001 +#define STRING_21002 21002 +#define STRING_21003 21003 +#define STRING_21004 21004 +#define STRING_21005 21005 +#define STRING_21006 21006 +#define STRING_21007 21007 +#define STRING_21008 21008 +#define STRING_21009 21009 +#define STRING_21010 21010 +#define STRING_21011 21011 +#define STRING_21012 21012 +#define STRING_21013 21013 +#define STRING_21014 21014 +#define STRING_21015 21015 +#define STRING_21016 21016 +#define STRING_21017 21017 +#define STRING_21018 21018 +#define STRING_21019 21019 +#define STRING_21020 21020 +#define STRING_21021 21021 +#define STRING_21022 21022 +#define STRING_21023 21023 +#define STRING_21024 21024 +#define STRING_21025 21025 +#define STRING_21026 21026 +#define STRING_21027 21027 +#define STRING_21028 21028 +#define STRING_21029 21029 +#define STRING_21030 21030 +#define STRING_21031 21031 +#define STRING_21032 21032 +#define STRING_21033 21033 +#define STRING_21034 21034 +#define STRING_21035 21035 +#define STRING_21036 21036 +#define STRING_21037 21037 +#define STRING_21038 21038 +#define STRING_21039 21039 +#define STRING_21040 21040 +#define STRING_21041 21041 +#define STRING_21042 21042 +#define STRING_21043 21043 +#define STRING_21044 21044 +#define STRING_21045 21045 +#define STRING_21046 21046 +#define STRING_21047 21047 +#define STRING_21048 21048 +#define STRING_21049 21049 +#define STRING_21050 21050 +#define STRING_21051 21051 +#define STRING_21052 21052 +#define STRING_21053 21053 +#define STRING_21054 21054 +#define STRING_21055 21055 +#define STRING_21056 21056 +#define STRING_21057 21057 +#define STRING_21058 21058 +#define STRING_21059 21059 +#define STRING_21060 21060 +#define STRING_21061 21061 +#define STRING_21062 21062 +#define STRING_21063 21063 +#define STRING_21064 21064 +#define STRING_21065 21065 +#define STRING_21066 21066 +#define STRING_21067 21067 +#define STRING_21068 21068 +#define STRING_21069 21069 +#define STRING_21070 21070 +#define STRING_21071 21071 +#define STRING_21072 21072 +#define STRING_21073 21073 +#define STRING_21074 21074 +#define STRING_21075 21075 +#define STRING_21076 21076 +#define STRING_21077 21077 +#define STRING_21078 21078 +#define STRING_21079 21079 +#define STRING_21080 21080 +#define STRING_21081 21081 +#define STRING_21082 21082 +#define STRING_21083 21083 +#define STRING_21084 21084 +#define STRING_21085 21085 +#define STRING_21086 21086 +#define STRING_21087 21087 +#define STRING_21088 21088 +#define STRING_21089 21089 +#define STRING_21090 21090 +#define STRING_21091 21091 +#define STRING_21092 21092 +#define STRING_21093 21093 +#define STRING_21094 21094 +#define STRING_21095 21095 +#define STRING_21096 21096 +#define STRING_21097 21097 +#define STRING_21098 21098 +#define STRING_21099 21099 +#define STRING_21100 21100 +#define STRING_21101 21101 +#define STRING_21102 21102 +#define STRING_21103 21103 +#define STRING_21104 21104 +#define STRING_21105 21105 +#define STRING_21106 21106 +#define STRING_21107 21107 +#define STRING_21108 21108 +#define STRING_21109 21109 +#define STRING_21110 21110 +#define STRING_21111 21111 +#define STRING_21112 21112 +#define STRING_21113 21113 +#define STRING_21114 21114 +#define STRING_21115 21115 +#define STRING_21116 21116 +#define STRING_21117 21117 +#define STRING_21118 21118 +#define STRING_21119 21119 +#define STRING_21120 21120 +#define STRING_21121 21121 +#define STRING_21122 21122 +#define STRING_21123 21123 +#define STRING_21124 21124 +#define STRING_21125 21125 +#define STRING_21126 21126 +#define STRING_21127 21127 +#define STRING_21128 21128 +#define STRING_21129 21129 +#define STRING_21130 21130 +#define STRING_21131 21131 +#define STRING_21132 21132 +#define STRING_21133 21133 +#define STRING_21134 21134 +#define STRING_21135 21135 +#define STRING_21136 21136 +#define STRING_21137 21137 +#define STRING_21138 21138 +#define STRING_21139 21139 +#define STRING_21140 21140 +#define STRING_21141 21141 +#define STRING_21142 21142 +#define STRING_21143 21143 +#define STRING_21144 21144 +#define STRING_21145 21145 +#define STRING_21146 21146 +#define STRING_21147 21147 +#define STRING_21148 21148 +#define STRING_21149 21149 +#define STRING_21150 21150 +#define STRING_21151 21151 +#define STRING_21152 21152 +#define STRING_21153 21153 +#define STRING_21154 21154 +#define STRING_21155 21155 +#define STRING_21156 21156 +#define STRING_21157 21157 +#define STRING_21158 21158 +#define STRING_21159 21159 +#define STRING_21160 21160 +#define STRING_21161 21161 +#define STRING_21162 21162 +#define STRING_21163 21163 +#define STRING_21164 21164 +#define STRING_21165 21165 +#define STRING_21166 21166 +#define STRING_21167 21167 +#define STRING_21168 21168 +#define STRING_21169 21169 +#define STRING_21170 21170 +#define STRING_21171 21171 +#define STRING_21172 21172 +#define STRING_21173 21173 +#define STRING_21174 21174 +#define STRING_21175 21175 +#define STRING_21176 21176 +#define STRING_21177 21177 +#define STRING_21178 21178 +#define STRING_21179 21179 +#define STRING_21180 21180 +#define STRING_21181 21181 +#define STRING_21182 21182 +#define STRING_21183 21183 +#define STRING_21184 21184 +#define STRING_21185 21185 +#define STRING_21186 21186 +#define STRING_21187 21187 +#define STRING_21188 21188 +#define STRING_21189 21189 +#define STRING_21190 21190 +#define STRING_21191 21191 +#define STRING_21192 21192 +#define STRING_21193 21193 +#define STRING_21194 21194 +#define STRING_21195 21195 +#define STRING_21196 21196 +#define STRING_21197 21197 +#define STRING_21198 21198 +#define STRING_21199 21199 +#define STRING_21200 21200 +#define STRING_21201 21201 +#define STRING_21202 21202 +#define STRING_21203 21203 +#define STRING_21204 21204 +#define STRING_21205 21205 +#define STRING_21206 21206 +#define STRING_21207 21207 +#define STRING_21208 21208 +#define STRING_21209 21209 +#define STRING_21210 21210 +#define STRING_21211 21211 +#define STRING_21212 21212 +#define STRING_21213 21213 +#define STRING_21214 21214 +#define STRING_21215 21215 +#define STRING_21216 21216 +#define STRING_21217 21217 +#define STRING_21218 21218 +#define STRING_21219 21219 +#define STRING_21220 21220 +#define STRING_21221 21221 +#define STRING_21222 21222 +#define STRING_21223 21223 +#define STRING_21224 21224 +#define STRING_21225 21225 +#define STRING_21226 21226 +#define STRING_21227 21227 +#define STRING_21228 21228 +#define STRING_21229 21229 +#define STRING_21230 21230 +#define STRING_21231 21231 +#define STRING_21232 21232 +#define STRING_21233 21233 +#define STRING_21234 21234 +#define STRING_21235 21235 +#define STRING_21236 21236 +#define STRING_21237 21237 +#define STRING_21238 21238 +#define STRING_21239 21239 +#define STRING_21240 21240 +#define STRING_21241 21241 +#define STRING_21242 21242 +#define STRING_21243 21243 +#define STRING_21244 21244 +#define STRING_21245 21245 +#define STRING_21246 21246 +#define STRING_21247 21247 +#define STRING_21248 21248 +#define STRING_21249 21249 +#define STRING_21250 21250 +#define STRING_21251 21251 +#define STRING_21252 21252 +#define STRING_21253 21253 +#define STRING_21254 21254 +#define STRING_21255 21255 +#define STRING_21256 21256 +#define STRING_21257 21257 +#define STRING_21258 21258 +#define STRING_21259 21259 +#define STRING_21260 21260 +#define STRING_21261 21261 +#define STRING_21262 21262 +#define STRING_21263 21263 +#define STRING_21264 21264 +#define STRING_21265 21265 +#define STRING_21266 21266 +#define STRING_21267 21267 +#define STRING_21268 21268 +#define STRING_21269 21269 +#define STRING_21270 21270 +#define STRING_21271 21271 +#define STRING_21272 21272 +#define STRING_21273 21273 +#define STRING_21274 21274 +#define STRING_21275 21275 +#define STRING_21276 21276 +#define STRING_21277 21277 +#define STRING_21278 21278 +#define STRING_21279 21279 +#define STRING_21280 21280 +#define STRING_21281 21281 +#define STRING_21282 21282 +#define STRING_21283 21283 +#define STRING_21284 21284 +#define STRING_21285 21285 +#define STRING_21286 21286 +#define STRING_21287 21287 +#define STRING_21288 21288 +#define STRING_21289 21289 +#define STRING_21290 21290 +#define STRING_21291 21291 +#define STRING_21292 21292 +#define STRING_21293 21293 +#define STRING_21294 21294 +#define STRING_21295 21295 +#define STRING_21296 21296 +#define STRING_21297 21297 +#define STRING_21298 21298 +#define STRING_21299 21299 +#define STRING_21300 21300 +#define STRING_21301 21301 +#define STRING_21302 21302 +#define STRING_21303 21303 +#define STRING_21304 21304 +#define STRING_21305 21305 +#define STRING_21306 21306 +#define STRING_21307 21307 +#define STRING_21308 21308 +#define STRING_21309 21309 +#define STRING_21310 21310 +#define STRING_21311 21311 +#define STRING_21312 21312 +#define STRING_21313 21313 +#define STRING_21314 21314 +#define STRING_21315 21315 +#define STRING_21316 21316 +#define STRING_21317 21317 +#define STRING_21318 21318 +#define STRING_21319 21319 +#define STRING_21320 21320 +#define STRING_21321 21321 +#define STRING_21322 21322 +#define STRING_21323 21323 +#define STRING_21324 21324 +#define STRING_21325 21325 +#define STRING_21326 21326 +#define STRING_21327 21327 +#define STRING_21328 21328 +#define STRING_21329 21329 +#define STRING_21330 21330 +#define STRING_21331 21331 +#define STRING_21332 21332 +#define STRING_21333 21333 +#define STRING_21334 21334 +#define STRING_21335 21335 +#define STRING_21336 21336 +#define STRING_21337 21337 +#define STRING_21338 21338 +#define STRING_21339 21339 +#define STRING_21340 21340 +#define STRING_21341 21341 +#define STRING_21342 21342 +#define STRING_21343 21343 +#define STRING_21344 21344 +#define STRING_21345 21345 +#define STRING_21346 21346 +#define STRING_21347 21347 +#define STRING_21348 21348 +#define STRING_21349 21349 +#define STRING_21350 21350 +#define STRING_21351 21351 +#define STRING_21352 21352 +#define STRING_21353 21353 +#define STRING_21354 21354 +#define STRING_21355 21355 +#define STRING_21356 21356 +#define STRING_21357 21357 +#define STRING_21358 21358 +#define STRING_21359 21359 +#define STRING_21360 21360 +#define STRING_21361 21361 +#define STRING_21362 21362 +#define STRING_21363 21363 +#define STRING_21364 21364 +#define STRING_21365 21365 +#define STRING_21366 21366 +#define STRING_21367 21367 +#define STRING_21368 21368 +#define STRING_21369 21369 +#define STRING_21370 21370 +#define STRING_21371 21371 +#define STRING_21372 21372 +#define STRING_21373 21373 +#define STRING_21374 21374 +#define STRING_21375 21375 +#define STRING_21376 21376 +#define STRING_21377 21377 +#define STRING_21378 21378 +#define STRING_21379 21379 +#define STRING_21380 21380 +#define STRING_21381 21381 +#define STRING_21382 21382 +#define STRING_21383 21383 +#define STRING_21384 21384 +#define STRING_21385 21385 +#define STRING_21386 21386 +#define STRING_21387 21387 +#define STRING_21388 21388 +#define STRING_21389 21389 +#define STRING_21390 21390 +#define STRING_21391 21391 +#define STRING_21392 21392 +#define STRING_21393 21393 +#define STRING_21394 21394 +#define STRING_21395 21395 +#define STRING_21396 21396 +#define STRING_21397 21397 +#define STRING_21398 21398 +#define STRING_21399 21399 +#define STRING_21400 21400 +#define STRING_21401 21401 +#define STRING_21402 21402 +#define STRING_21403 21403 +#define STRING_21404 21404 +#define STRING_21405 21405 +#define STRING_21406 21406 +#define STRING_21407 21407 +#define STRING_21408 21408 +#define STRING_21409 21409 +#define STRING_21410 21410 +#define STRING_21411 21411 +#define STRING_21412 21412 +#define STRING_21413 21413 +#define STRING_21414 21414 +#define STRING_21415 21415 +#define STRING_21416 21416 +#define STRING_21417 21417 +#define STRING_21418 21418 +#define STRING_21419 21419 +#define STRING_21420 21420 +#define STRING_21421 21421 +#define STRING_21422 21422 +#define STRING_21423 21423 +#define STRING_21424 21424 +#define STRING_21425 21425 +#define STRING_21426 21426 +#define STRING_21427 21427 +#define STRING_21428 21428 +#define STRING_21429 21429 +#define STRING_21430 21430 +#define STRING_21431 21431 +#define STRING_21432 21432 +#define STRING_21433 21433 +#define STRING_21434 21434 +#define STRING_21435 21435 +#define STRING_21436 21436 +#define STRING_21437 21437 +#define STRING_21438 21438 +#define STRING_21439 21439 +#define STRING_21440 21440 +#define STRING_21441 21441 +#define STRING_21442 21442 +#define STRING_21443 21443 +#define STRING_21444 21444 +#define STRING_21445 21445 +#define STRING_21446 21446 +#define STRING_21447 21447 +#define STRING_21448 21448 +#define STRING_21449 21449 +#define STRING_21450 21450 +#define STRING_21451 21451 +#define STRING_21452 21452 +#define STRING_21453 21453 +#define STRING_21454 21454 +#define STRING_21455 21455 +#define STRING_21456 21456 +#define STRING_21457 21457 +#define STRING_21458 21458 +#define STRING_21459 21459 +#define STRING_21460 21460 +#define STRING_21461 21461 +#define STRING_21462 21462 +#define STRING_21463 21463 +#define STRING_21464 21464 +#define STRING_21465 21465 +#define STRING_21466 21466 +#define STRING_21467 21467 +#define STRING_21468 21468 +#define STRING_21469 21469 +#define STRING_21470 21470 +#define STRING_21471 21471 +#define STRING_21472 21472 +#define STRING_21473 21473 +#define STRING_21474 21474 +#define STRING_21475 21475 +#define STRING_21476 21476 +#define STRING_21477 21477 +#define STRING_21478 21478 +#define STRING_21479 21479 +#define STRING_21480 21480 +#define STRING_21481 21481 +#define STRING_21482 21482 +#define STRING_21483 21483 +#define STRING_21484 21484 +#define STRING_21485 21485 +#define STRING_21486 21486 +#define STRING_21487 21487 +#define STRING_21488 21488 +#define STRING_21489 21489 +#define STRING_21490 21490 +#define STRING_21491 21491 +#define STRING_21492 21492 +#define STRING_21493 21493 +#define STRING_21494 21494 +#define STRING_21495 21495 +#define STRING_21496 21496 +#define STRING_21497 21497 +#define STRING_21498 21498 +#define STRING_21499 21499 +#define STRING_21500 21500 +#define STRING_21501 21501 +#define STRING_21502 21502 +#define STRING_21503 21503 +#define STRING_21504 21504 +#define STRING_21505 21505 +#define STRING_21506 21506 +#define STRING_21507 21507 +#define STRING_21508 21508 +#define STRING_21509 21509 +#define STRING_21510 21510 +#define STRING_21511 21511 +#define STRING_21512 21512 +#define STRING_21513 21513 +#define STRING_21514 21514 +#define STRING_21515 21515 +#define STRING_21516 21516 +#define STRING_21517 21517 +#define STRING_21518 21518 +#define STRING_21519 21519 +#define STRING_21520 21520 +#define STRING_21521 21521 +#define STRING_21522 21522 +#define STRING_21523 21523 +#define STRING_21524 21524 +#define STRING_21525 21525 +#define STRING_21526 21526 +#define STRING_21527 21527 +#define STRING_21528 21528 +#define STRING_21529 21529 +#define STRING_21530 21530 +#define STRING_21531 21531 +#define STRING_21532 21532 +#define STRING_21533 21533 +#define STRING_21534 21534 +#define STRING_21535 21535 +#define STRING_21536 21536 +#define STRING_21537 21537 +#define STRING_21538 21538 +#define STRING_21539 21539 +#define STRING_21540 21540 +#define STRING_21541 21541 +#define STRING_21542 21542 +#define STRING_21543 21543 +#define STRING_21544 21544 +#define STRING_21545 21545 +#define STRING_21546 21546 +#define STRING_21547 21547 +#define STRING_21548 21548 +#define STRING_21549 21549 +#define STRING_21550 21550 +#define STRING_21551 21551 +#define STRING_21552 21552 +#define STRING_21553 21553 +#define STRING_21554 21554 +#define STRING_21555 21555 +#define STRING_21556 21556 +#define STRING_21557 21557 +#define STRING_21558 21558 +#define STRING_21559 21559 +#define STRING_21560 21560 +#define STRING_21561 21561 +#define STRING_21562 21562 +#define STRING_21563 21563 +#define STRING_21564 21564 +#define STRING_21565 21565 +#define STRING_21566 21566 +#define STRING_21567 21567 +#define STRING_21568 21568 +#define STRING_21569 21569 +#define STRING_21570 21570 +#define STRING_21571 21571 +#define STRING_21572 21572 +#define STRING_21573 21573 +#define STRING_21574 21574 +#define STRING_21575 21575 +#define STRING_21576 21576 +#define STRING_21577 21577 +#define STRING_21578 21578 +#define STRING_21579 21579 +#define STRING_21580 21580 +#define STRING_21581 21581 +#define STRING_21582 21582 +#define STRING_21583 21583 +#define STRING_21584 21584 +#define STRING_21585 21585 +#define STRING_21586 21586 +#define STRING_21587 21587 +#define STRING_21588 21588 +#define STRING_21589 21589 +#define STRING_21590 21590 +#define STRING_21591 21591 +#define STRING_21592 21592 +#define STRING_21593 21593 +#define STRING_21594 21594 +#define STRING_21595 21595 +#define STRING_21596 21596 +#define STRING_21597 21597 +#define STRING_21598 21598 +#define STRING_21599 21599 +#define STRING_21600 21600 +#define STRING_21601 21601 +#define STRING_21602 21602 +#define STRING_21603 21603 +#define STRING_21604 21604 +#define STRING_21605 21605 +#define STRING_21606 21606 +#define STRING_21607 21607 +#define STRING_21608 21608 +#define STRING_21609 21609 +#define STRING_21610 21610 +#define STRING_21611 21611 +#define STRING_21612 21612 +#define STRING_21613 21613 +#define STRING_21614 21614 +#define STRING_21615 21615 +#define STRING_21616 21616 +#define STRING_21617 21617 +#define STRING_21618 21618 +#define STRING_21619 21619 +#define STRING_21620 21620 +#define STRING_21621 21621 +#define STRING_21622 21622 +#define STRING_21623 21623 +#define STRING_21624 21624 +#define STRING_21625 21625 +#define STRING_21626 21626 +#define STRING_21627 21627 +#define STRING_21628 21628 +#define STRING_21629 21629 +#define STRING_21630 21630 +#define STRING_21631 21631 +#define STRING_21632 21632 +#define STRING_21633 21633 +#define STRING_21634 21634 +#define STRING_21635 21635 +#define STRING_21636 21636 +#define STRING_21637 21637 +#define STRING_21638 21638 +#define STRING_21639 21639 +#define STRING_21640 21640 +#define STRING_21641 21641 +#define STRING_21642 21642 +#define STRING_21643 21643 +#define STRING_21644 21644 +#define STRING_21645 21645 +#define STRING_21646 21646 +#define STRING_21647 21647 +#define STRING_21648 21648 +#define STRING_21649 21649 +#define STRING_21650 21650 +#define STRING_21651 21651 +#define STRING_21652 21652 +#define STRING_21653 21653 +#define STRING_21654 21654 +#define STRING_21655 21655 +#define STRING_21656 21656 +#define STRING_21657 21657 +#define STRING_21658 21658 +#define STRING_21659 21659 +#define STRING_21660 21660 +#define STRING_21661 21661 +#define STRING_21662 21662 +#define STRING_21663 21663 +#define STRING_21664 21664 +#define STRING_21665 21665 +#define STRING_21666 21666 +#define STRING_21667 21667 +#define STRING_21668 21668 +#define STRING_21669 21669 +#define STRING_21670 21670 +#define STRING_21671 21671 +#define STRING_21672 21672 +#define STRING_21673 21673 +#define STRING_21674 21674 +#define STRING_21675 21675 +#define STRING_21676 21676 +#define STRING_21677 21677 +#define STRING_21678 21678 +#define STRING_21679 21679 +#define STRING_21680 21680 +#define STRING_21681 21681 +#define STRING_21682 21682 +#define STRING_21683 21683 +#define STRING_21684 21684 +#define STRING_21685 21685 +#define STRING_21686 21686 +#define STRING_21687 21687 +#define STRING_21688 21688 +#define STRING_21689 21689 +#define STRING_21690 21690 +#define STRING_21691 21691 +#define STRING_21692 21692 +#define STRING_21693 21693 +#define STRING_21694 21694 +#define STRING_21695 21695 +#define STRING_21696 21696 +#define STRING_21697 21697 +#define STRING_21698 21698 +#define STRING_21699 21699 +#define STRING_21700 21700 +#define STRING_21701 21701 +#define STRING_21702 21702 +#define STRING_21703 21703 +#define STRING_21704 21704 +#define STRING_21705 21705 +#define STRING_21706 21706 +#define STRING_21707 21707 +#define STRING_21708 21708 +#define STRING_21709 21709 +#define STRING_21710 21710 +#define STRING_21711 21711 +#define STRING_21712 21712 +#define STRING_21713 21713 +#define STRING_21714 21714 +#define STRING_21715 21715 +#define STRING_21716 21716 +#define STRING_21717 21717 +#define STRING_21718 21718 +#define STRING_21719 21719 +#define STRING_21720 21720 +#define STRING_21721 21721 +#define STRING_21722 21722 +#define STRING_21723 21723 +#define STRING_21724 21724 +#define STRING_21725 21725 +#define STRING_21726 21726 +#define STRING_21727 21727 +#define STRING_21728 21728 +#define STRING_21729 21729 +#define STRING_21730 21730 +#define STRING_21731 21731 +#define STRING_21732 21732 +#define STRING_21733 21733 +#define STRING_21734 21734 +#define STRING_21735 21735 +#define STRING_21736 21736 +#define STRING_21737 21737 +#define STRING_21738 21738 +#define STRING_21739 21739 +#define STRING_21740 21740 +#define STRING_21741 21741 +#define STRING_21742 21742 +#define STRING_21743 21743 +#define STRING_21744 21744 +#define STRING_21745 21745 +#define STRING_21746 21746 +#define STRING_21747 21747 +#define STRING_21748 21748 +#define STRING_21749 21749 +#define STRING_21750 21750 +#define STRING_21751 21751 +#define STRING_21752 21752 +#define STRING_21753 21753 +#define STRING_21754 21754 +#define STRING_21755 21755 +#define STRING_21756 21756 +#define STRING_21757 21757 +#define STRING_21758 21758 +#define STRING_21759 21759 +#define STRING_21760 21760 +#define STRING_21761 21761 +#define STRING_21762 21762 +#define STRING_21763 21763 +#define STRING_21764 21764 +#define STRING_21765 21765 +#define STRING_21766 21766 +#define STRING_21767 21767 +#define STRING_21768 21768 +#define STRING_21769 21769 +#define STRING_21770 21770 +#define STRING_21771 21771 +#define STRING_21772 21772 +#define STRING_21773 21773 +#define STRING_21774 21774 +#define STRING_21775 21775 +#define STRING_21776 21776 +#define STRING_21777 21777 +#define STRING_21778 21778 +#define STRING_21779 21779 +#define STRING_21780 21780 +#define STRING_21781 21781 +#define STRING_21782 21782 +#define STRING_21783 21783 +#define STRING_21784 21784 +#define STRING_21785 21785 +#define STRING_21786 21786 +#define STRING_21787 21787 +#define STRING_21788 21788 +#define STRING_21789 21789 +#define STRING_21790 21790 +#define STRING_21791 21791 +#define STRING_21792 21792 +#define STRING_21793 21793 +#define STRING_21794 21794 +#define STRING_21795 21795 +#define STRING_21796 21796 +#define STRING_21797 21797 +#define STRING_21798 21798 +#define STRING_21799 21799 +#define STRING_21800 21800 +#define STRING_21801 21801 +#define STRING_21802 21802 +#define STRING_21803 21803 +#define STRING_21804 21804 +#define STRING_21805 21805 +#define STRING_21806 21806 +#define STRING_21807 21807 +#define STRING_21808 21808 +#define STRING_21809 21809 +#define STRING_21810 21810 +#define STRING_21811 21811 +#define STRING_21812 21812 +#define STRING_21813 21813 +#define STRING_21814 21814 +#define STRING_21815 21815 +#define STRING_21816 21816 +#define STRING_21817 21817 +#define STRING_21818 21818 +#define STRING_21819 21819 +#define STRING_21820 21820 +#define STRING_21821 21821 +#define STRING_21822 21822 +#define STRING_21823 21823 +#define STRING_21824 21824 +#define STRING_21825 21825 +#define STRING_21826 21826 +#define STRING_21827 21827 +#define STRING_21828 21828 +#define STRING_21829 21829 +#define STRING_21830 21830 +#define STRING_21831 21831 +#define STRING_21832 21832 +#define STRING_21833 21833 +#define STRING_21834 21834 +#define STRING_21835 21835 +#define STRING_21836 21836 +#define STRING_21837 21837 +#define STRING_21838 21838 +#define STRING_21839 21839 +#define STRING_21840 21840 +#define STRING_21841 21841 +#define STRING_21842 21842 +#define STRING_21843 21843 +#define STRING_21844 21844 +#define STRING_21845 21845 +#define STRING_21846 21846 +#define STRING_21847 21847 +#define STRING_21848 21848 +#define STRING_21849 21849 +#define STRING_21850 21850 +#define STRING_21851 21851 +#define STRING_21852 21852 +#define STRING_21853 21853 +#define STRING_21854 21854 +#define STRING_21855 21855 +#define STRING_21856 21856 +#define STRING_21857 21857 +#define STRING_21858 21858 +#define STRING_21859 21859 +#define STRING_21860 21860 +#define STRING_21861 21861 +#define STRING_21862 21862 +#define STRING_21863 21863 +#define STRING_21864 21864 +#define STRING_21865 21865 +#define STRING_21866 21866 +#define STRING_21867 21867 +#define STRING_21868 21868 +#define STRING_21869 21869 +#define STRING_21870 21870 +#define STRING_21871 21871 +#define STRING_21872 21872 +#define STRING_21873 21873 +#define STRING_21874 21874 +#define STRING_21875 21875 +#define STRING_21876 21876 +#define STRING_21877 21877 +#define STRING_21878 21878 +#define STRING_21879 21879 +#define STRING_21880 21880 +#define STRING_21881 21881 +#define STRING_21882 21882 +#define STRING_21883 21883 +#define STRING_21884 21884 +#define STRING_21885 21885 +#define STRING_21886 21886 +#define STRING_21887 21887 +#define STRING_21888 21888 +#define STRING_21889 21889 +#define STRING_21890 21890 +#define STRING_21891 21891 +#define STRING_21892 21892 +#define STRING_21893 21893 +#define STRING_21894 21894 +#define STRING_21895 21895 +#define STRING_21896 21896 +#define STRING_21897 21897 +#define STRING_21898 21898 +#define STRING_21899 21899 +#define STRING_21900 21900 +#define STRING_21901 21901 +#define STRING_21902 21902 + +#define STRING_INSTRUMENT1 1 +#define STRING_INSTRUMENT2 2 +#define STRING_INSTRUMENT3 3 +#define STRING_INSTRUMENT4 4 +#define STRING_INSTRUMENT5 5 +#define STRING_INSTRUMENT6 6 +#define STRING_INSTRUMENT7 7 +#define STRING_INSTRUMENT8 8 +#define STRING_INSTRUMENT9 9 +#define STRING_INSTRUMENT10 10 +#define STRING_INSTRUMENT11 11 +#define STRING_INSTRUMENT12 12 +#define STRING_INSTRUMENT13 13 +#define STRING_INSTRUMENT14 14 +#define STRING_INSTRUMENT15 15 +#define STRING_INSTRUMENT16 16 +#define STRING_INSTRUMENT17 17 +#define STRING_INSTRUMENT18 18 +#define STRING_INSTRUMENT19 19 +#define STRING_INSTRUMENT20 20 +#define STRING_INSTRUMENT21 21 +#define STRING_INSTRUMENT22 22 +#define STRING_INSTRUMENT23 23 +#define STRING_INSTRUMENT24 24 +#define STRING_INSTRUMENT25 25 +#define STRING_INSTRUMENT26 26 +#define STRING_INSTRUMENT27 27 +#define STRING_INSTRUMENT28 28 +#define STRING_INSTRUMENT29 29 +#define STRING_INSTRUMENT30 30 +#define STRING_INSTRUMENT31 31 +#define STRING_INSTRUMENT32 32 +#define STRING_INSTRUMENT33 33 +#define STRING_INSTRUMENT34 34 +#define STRING_INSTRUMENT35 35 +#define STRING_INSTRUMENT36 36 +#define STRING_INSTRUMENT37 37 +#define STRING_INSTRUMENT38 38 +#define STRING_INSTRUMENT39 39 +#define STRING_INSTRUMENT40 40 +#define STRING_INSTRUMENT41 41 +#define STRING_INSTRUMENT42 42 +#define STRING_INSTRUMENT43 43 +#define STRING_INSTRUMENT44 44 +#define STRING_INSTRUMENT45 45 +#define STRING_INSTRUMENT46 46 +#define STRING_INSTRUMENT47 47 +#define STRING_INSTRUMENT48 48 +#define STRING_INSTRUMENT49 49 +#define STRING_INSTRUMENT50 50 +#define STRING_INSTRUMENT51 51 +#define STRING_INSTRUMENT52 52 +#define STRING_INSTRUMENT53 53 +#define STRING_INSTRUMENT54 54 +#define STRING_INSTRUMENT55 55 +#define STRING_INSTRUMENT56 56 +#define STRING_INSTRUMENT57 57 +#define STRING_INSTRUMENT58 58 +#define STRING_INSTRUMENT59 59 +#define STRING_INSTRUMENT60 60 +#define STRING_INSTRUMENT61 61 +#define STRING_INSTRUMENT62 62 +#define STRING_INSTRUMENT63 63 +#define STRING_INSTRUMENT64 64 +#define STRING_INSTRUMENT65 65 +#define STRING_INSTRUMENT66 66 +#define STRING_INSTRUMENT67 67 +#define STRING_INSTRUMENT68 68 +#define STRING_INSTRUMENT69 69 +#define STRING_INSTRUMENT70 70 +#define STRING_INSTRUMENT71 71 +#define STRING_INSTRUMENT72 72 +#define STRING_INSTRUMENT73 73 +#define STRING_INSTRUMENT74 74 +#define STRING_INSTRUMENT75 75 +#define STRING_INSTRUMENT76 76 +#define STRING_INSTRUMENT77 77 +#define STRING_INSTRUMENT78 78 +#define STRING_INSTRUMENT79 79 +#define STRING_INSTRUMENT80 80 +#define STRING_INSTRUMENT81 81 +#define STRING_INSTRUMENT82 82 +#define STRING_INSTRUMENT83 83 +#define STRING_INSTRUMENT84 84 +#define STRING_INSTRUMENT85 85 +#define STRING_INSTRUMENT86 86 +#define STRING_INSTRUMENT87 87 +#define STRING_INSTRUMENT88 88 +#define STRING_INSTRUMENT89 89 +#define STRING_INSTRUMENT90 90 +#define STRING_INSTRUMENT91 91 +#define STRING_INSTRUMENT92 92 +#define STRING_INSTRUMENT93 93 +#define STRING_INSTRUMENT94 94 +#define STRING_INSTRUMENT95 95 +#define STRING_INSTRUMENT96 96 +#define STRING_INSTRUMENT97 97 +#define STRING_INSTRUMENT98 98 +#define STRING_INSTRUMENT99 99 +#define STRING_INSTRUMENT100 100 +#define STRING_INSTRUMENT101 101 +#define STRING_INSTRUMENT102 102 +#define STRING_INSTRUMENT103 103 +#define STRING_INSTRUMENT104 104 +#define STRING_INSTRUMENT105 105 +#define STRING_INSTRUMENT106 106 +#define STRING_INSTRUMENT107 107 +#define STRING_INSTRUMENT108 108 +#define STRING_INSTRUMENT109 109 +#define STRING_INSTRUMENT110 110 +#define STRING_INSTRUMENT111 111 +#define STRING_INSTRUMENT112 112 +#define STRING_INSTRUMENT113 113 +#define STRING_INSTRUMENT114 114 +#define STRING_INSTRUMENT115 115 +#define STRING_INSTRUMENT116 116 +#define STRING_INSTRUMENT117 117 +#define STRING_INSTRUMENT118 118 +#define STRING_INSTRUMENT119 119 +#define STRING_INSTRUMENT120 120 +#define STRING_INSTRUMENT121 121 +#define STRING_INSTRUMENT122 122 +#define STRING_INSTRUMENT123 123 +#define STRING_INSTRUMENT124 124 +#define STRING_INSTRUMENT125 125 +#define STRING_INSTRUMENT126 126 +#define STRING_INSTRUMENT127 127 +#define STRING_INSTRUMENT128 128 +#define STRING_INSTRUMENT129 129 +#define STRING_INSTRUMENT130 130 +#define STRING_INSTRUMENT131 131 +#define STRING_INSTRUMENT132 132 +#define STRING_INSTRUMENT133 133 +#define STRING_INSTRUMENT134 134 +#define STRING_INSTRUMENT135 135 +#define STRING_INSTRUMENT136 136 +#define STRING_INSTRUMENT137 137 +#define STRING_INSTRUMENT138 138 +#define STRING_INSTRUMENT139 139 +#define STRING_INSTRUMENT140 140 +#define STRING_INSTRUMENT141 141 +#define STRING_INSTRUMENT142 142 +#define STRING_INSTRUMENT143 143 +#define STRING_INSTRUMENT144 144 +#define STRING_INSTRUMENT145 145 +#define STRING_INSTRUMENT146 146 +#define STRING_INSTRUMENT147 147 +#define STRING_INSTRUMENT148 148 +#define STRING_INSTRUMENT149 149 +#define STRING_INSTRUMENT150 150 +#define STRING_INSTRUMENT151 151 +#define STRING_INSTRUMENT152 152 +#define STRING_INSTRUMENT153 153 +#define STRING_INSTRUMENT154 154 +#define STRING_INSTRUMENT155 155 +#define STRING_INSTRUMENT156 156 +#define STRING_INSTRUMENT157 157 +#define STRING_INSTRUMENT158 158 +#define STRING_INSTRUMENT159 159 +#define STRING_INSTRUMENT160 160 +#define STRING_INSTRUMENT161 161 +#define STRING_INSTRUMENT162 162 +#define STRING_INSTRUMENT163 163 +#define STRING_INSTRUMENT164 164 +#define STRING_INSTRUMENT165 165 +#define STRING_INSTRUMENT166 166 +#define STRING_INSTRUMENT167 167 +#define STRING_INSTRUMENT168 168 +#define STRING_INSTRUMENT169 169 +#define STRING_INSTRUMENT170 170 +#define STRING_INSTRUMENT171 171 +#define STRING_INSTRUMENT172 172 +#define STRING_INSTRUMENT173 173 +#define STRING_INSTRUMENT174 174 +#define STRING_INSTRUMENT175 175 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#endif + diff --git a/guitar/backup/20040219/guitar.hpp b/guitar/backup/20040219/guitar.hpp new file mode 100644 index 0000000..6fe0d82 --- /dev/null +++ b/guitar/backup/20040219/guitar.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_GUITAR_HPP_ +#define _GUITAR_GUITAR_HPP_ +#ifndef _GUITAR_GUITAR_H_ +#include +#endif +#endif diff --git a/guitar/backup/20040219/guitar.rc b/guitar/backup/20040219/guitar.rc new file mode 100644 index 0000000..956ed77 --- /dev/null +++ b/guitar/backup/20040219/guitar.rc @@ -0,0 +1,2027 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "guitar\guitar.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +GRAPHDIALOG DIALOG DISCARDABLE 6, 15, 340, 205 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Graph" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Dismiss",IDCANCEL,171,180,50,14 + GROUPBOX "",-1,5,4,326,166 + DEFPUSHBUTTON "Graph",IDOK,119,180,50,14 +END + +MIDIDIALOG DIALOGEX 0, 0, 142, 225 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "MIDI Import" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Ok",IDOK,85,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,85,16,50,14 + CONTROL "Track 1",MIDI_TRACK1,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,18,41,10 + CONTROL "Track 2",MIDI_TRACK2,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,30,41,10 + CONTROL "Track 3",MIDI_TRACK3,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,42,41,10 + CONTROL "Track 4",MIDI_TRACK4,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,54,41,10 + CONTROL "Track 5",MIDI_TRACK5,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,66,41,10 + CONTROL "Track 6",MIDI_TRACK6,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,78,41,10 + CONTROL "Track 7",MIDI_TRACK7,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,90,41,10 + CONTROL "Track 8",MIDI_TRACK8,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,102,41,10 + CONTROL "Track 9",MIDI_TRACK9,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,114,41,10 + CONTROL "Track 10",MIDI_TRACK10,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,126,41,10 + CONTROL "Track 11",MIDI_TRACK11,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,138,41,10 + CONTROL "Track 12",MIDI_TRACK12,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,150,41,10 + CONTROL "Track 13",MIDI_TRACK13,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,162,41,10 + CONTROL "Track 14",MIDI_TRACK14,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,174,41,10 + CONTROL "Track 15",MIDI_TRACK15,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,186,41,10 + CONTROL "Track 16",MIDI_TRACK16,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,198,41,10 + LTEXT "",MIDI_EVENTS_TRACK1,49,18,22,10 + LTEXT "",MIDI_EVENTS_TRACK2,49,30,22,8 + LTEXT "",MIDI_EVENTS_TRACK3,49,42,22,8 + LTEXT "",MIDI_EVENTS_TRACK4,49,54,22,8 + LTEXT "",MIDI_EVENTS_TRACK5,49,66,22,8 + LTEXT "",MIDI_EVENTS_TRACK6,49,78,22,8 + LTEXT "",MIDI_EVENTS_TRACK7,49,90,22,8 + LTEXT "",MIDI_EVENTS_TRACK8,49,102,22,8 + LTEXT "",MIDI_EVENTS_TRACK9,49,114,22,8 + LTEXT "",MIDI_EVENTS_TRACK10,49,126,22,8 + LTEXT "",MIDI_EVENTS_TRACK11,49,138,22,8 + LTEXT "",MIDI_EVENTS_TRACK12,49,150,22,8 + LTEXT "",MIDI_EVENTS_TRACK13,49,162,22,8 + LTEXT "",MIDI_EVENTS_TRACK14,49,174,22,8 + LTEXT "",MIDI_EVENTS_TRACK15,49,186,22,8 + LTEXT "",MIDI_EVENTS_TRACK16,49,198,22,8 + LTEXT "Events",IDC_STATIC,51,4,23,8 +END + +TABDIALOG DIALOGEX 0, 0, 143, 135 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Tab Entry" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX TABENTRY_NOTETYPE,34,22,45,49,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + CONTROL "Apply to remainder of entries.",TABENTRY_REMAINDER, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,42,107,10 + DEFPUSHBUTTON "Apply",IDOK,86,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,86,22,50,14 + LISTBOX TABENTRY_LIST,7,71,129,56,NOT LBS_NOTIFY | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_USETABSTOPS | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "Value:",-1,9,24,21,8 + LTEXT "String",-1,15,57,19,8 + LTEXT "Fret",-1,53,57,13,8 + LTEXT "Note",-1,98,57,16,8 +END + +FRETDIALOG DIALOGEX 0, 0, 155, 73 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Fret Entry" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT FRETENTRY_FRET,38,18,53,14,ES_AUTOHSCROLL + EDITTEXT FRETENTRY_STRING,38,1,53,14,ES_AUTOHSCROLL + COMBOBOX FRETENTRY_ACTION,38,33,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX FRETENTRY_DURATION,38,48,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,104,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,104,16,50,14 + LTEXT "Fret:",-1,4,21,15,8 + LTEXT "String:",-1,4,6,21,8 + LTEXT "Action:",-1,4,35,23,8 + LTEXT "Duration:",-1,1,50,30,8 +END + +CHORDDIALOG DIALOGEX 0, 0, 193, 127 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Dictionary" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + LISTBOX CHORDS_LIST,0,19,184,89,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + LTEXT "",CHORDS_COUNT,3,112,102,8 +END + +CHORDBUILDERDIALOG DIALOGEX 0, 0, 201, 65 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Builder" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT ENTERCHORD_EDIT,9,8,124,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,146,4,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,146,20,50,14 + PUSHBUTTON "Examples",ENTERCHORD_EXAMPLES,146,37,50,14 +END + +RANGEDIALOG DIALOGEX 0, 0, 206, 105 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Range Edit" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,1,1,50,14 + LISTBOX RANGE_LIST,10,36,184,57,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Cancel",IDCANCEL,51,1,50,14 + PUSHBUTTON "Insert...",RANGE_INSERT,101,1,50,14 + PUSHBUTTON "Delete",RANGE_DELETE,151,1,50,14 + CTEXT "Name",-1,15,22,64,8 + LTEXT "Start Pos.",-1,92,22,32,8 + LTEXT "End Pos.",-1,149,22,30,8 +END + +RANGEEDITDIALOG DIALOGEX 0, 0, 190, 111 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Edit Item" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT RANGEEDIT_NAME,33,42,150,14,ES_AUTOHSCROLL + EDITTEXT RANGEEDIT_BEGIN,33,61,40,14,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT RANGEEDIT_END,33,80,40,14,ES_AUTOHSCROLL | ES_NUMBER + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,134,17,50,14 + LTEXT "Name:",-1,5,43,22,8 + LTEXT "Start:",-1,5,64,18,8 + LTEXT "End:",-1,5,85,16,8 +END + +SETTINGSDIALOG DIALOGEX 0, 0, 169, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Apply",IDOK,5,2,50,14 + PUSHBUTTON "&Done",IDCANCEL,107,2,50,14 + CONTROL "Display (Bends,Pulls,Slides,Hammers)", + SETTINGS_SHOWACTION,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,9,29,133,10 + LTEXT "Microseconds Per 1/4 note:",IDC_STATIC,11,113,89,8 + EDITTEXT SETTINGS_MICROSECSPERQTRNOTE,104,110,40,14, + ES_AUTOHSCROLL | ES_NUMBER + PUSHBUTTON "Defaults",SETTINGS_DEFAULTS,56,2,50,14 + GROUPBOX "MIDI",IDC_STATIC,3,58,161,83 + GROUPBOX "Global",IDC_STATIC,1,18,161,37 + CONTROL "Display note letters on fretboard.",SETTINGS_SHOWNOTES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,42,117,10 + LTEXT "Output",IDC_STATIC,9,71,23,8 + COMBOBOX SETTINGS_MIDIOUT,37,67,121,61,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE + COMBOBOX SETTINGS_INSTRUMENT,12,95,121,63,CBS_DROPDOWNLIST | + CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "Instrument",IDC_STATIC,13,85,105,8 +END + +SCALEDIALOG DIALOGEX 0, 0, 217, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW | WS_EX_STATICEDGE +CAPTION "Show Scale" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "O&k",IDOK,163,4,50,14 + LISTBOX SCALEDLG_LIST,3,58,211,86,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Ca&ncel",IDCANCEL,163,19,50,14 + LTEXT "Root:",-1,5,30,18,8 + EDITTEXT SCALEDLG_ROOT,25,27,28,14,ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "Spin1",SCALEDLG_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_ARROWKEYS,54,27,10,14 + CONTROL "Mute",SCALEDLG_MUTE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,165,36,48,10 +END + +LICENSEDIALOG DIALOGEX 0, 0, 223, 134 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "License Helper" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT LICENSE_DIALOG_LICENSE,2,81,215,42,ES_MULTILINE | + ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,154,2,65,14 + PUSHBUTTON "Cancel",IDCANCEL,154,17,65,14 + LTEXT " You can request a new license by clicking ""Request License"".", + IDC_STATIC,5,67,214,8 + LTEXT "Please paste your license key into the text box below.", + IDC_STATIC,5,53,216,8 + PUSHBUTTON "Request License",LICENSE_DIALOG_REQUEST_LICENSE,154,32, + 65,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +FRETBOARD BITMAP MOVEABLE PURE "FRETBOARD.BMP" +GUITAR BITMAP MOVEABLE PURE "GUITAR.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +HARROW CURSOR DISCARDABLE "HARROW.CUR" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP_ICON ICON DISCARDABLE "icon1.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +FRETMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + END + POPUP "Fret&board" + BEGIN + MENUITEM "&Clear", MENU_FRETBOARD_CLEAR + MENUITEM "Show All &Positions", MENU_FRETBOARD_SHOWALLPOSITIONS + + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Close Project", MENU_FILE_CLOSE + MENUITEM "&Import Tablature\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Save\tCtrl+S", MENU_FILE_SAVE + MENUITEM "Save &As...", MENU_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + MENUITEM SEPARATOR + MENUITEM "&Ranges...", MENU_EDIT_RANGES + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Tablature" + BEGIN + MENUITEM "&Play", MENU_TABLATURE_PLAY + MENUITEM "Play (&Repeated)", MENU_TABLATURE_PLAYREPEATED + MENUITEM "Play R&ange...", MENU_TABLATURE_PLAYRANGE + , GRAYED + MENUITEM "Play Rang&e (Repeated)...", MENU_TABLATURE_PLAYRANGE_REPEATED + , GRAYED + MENUITEM "&Stop", MENU_TABLATURE_STOP, GRAYED + END + POPUP "&Options" + BEGIN + MENUITEM "&Increase Tempo", MENU_OPTIONS_INCREASETEMPO + MENUITEM "&Decrease Tempo", MENU_OPTIONS_DECREASETEMPO + MENUITEM SEPARATOR + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""guitar\\guitar.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "MIDIDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 141 + END + + "TABDIALOG", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 136 + TOPMARGIN, 7 + BOTTOMMARGIN, 128 + END + + "FRETDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 154 + BOTTOMMARGIN, 69 + END + + "CHORDDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 184 + TOPMARGIN, 2 + BOTTOMMARGIN, 126 + END + + "SETTINGSDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 164 + BOTTOMMARGIN, 140 + END + + "SCALEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 216 + BOTTOMMARGIN, 146 + END + + "LICENSEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 221 + BOTTOMMARGIN, 131 + END +END +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Simplified Tablature editing.\0" + VALUE "CompanyName", "Diversified Software Solutions.\0" + VALUE "FileDescription", "TabMaster\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "TabMaster\0" + VALUE "LegalCopyright", "Copyright © 2002\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "TabMaster.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "TabMaster\0" + VALUE "ProductVersion", "2, 0, 0, r\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +TABACCELERATORS ACCELERATORS DISCARDABLE +BEGIN + "X", MENU_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT + "C", MENU_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + "V", MENU_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT + "N", MENU_FILE_NEW, VIRTKEY, CONTROL, NOINVERT + "O", MENU_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "I", MENU_FILE_IMPORT, VIRTKEY, CONTROL, NOINVERT + "P", MENU_FILE_PRINT, VIRTKEY, CONTROL, NOINVERT + VK_F5, IDM_CASCADE, VIRTKEY, NOINVERT + VK_F4, IDM_TILE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_NOTITLE "None" + STRING_EDITHINT "Insert tablature using Insert key." + STRING_PRJEXTENSION ".prj" + STRING_PRJALLEXTENSION "*.prj" + STRING_TABEXTENSION ".tab" + STRING_BROWSERKEY "Software\\Classes\\htmlfile\\shell\\opennew\\command" + STRING_BROWSERKEYALT "SOFTWARE\\Classes\\http\\shell\\open\\command" + STRING_BROWSERCOMMAND "command" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_HOST "http://www.diversified-software.com" + STRING_HELPPAGE "/support/support.html" + STRING_MIDIEXTENSION ".mid" + STRING_PURCHASE_URL "http://wwww.diversified-software.com/order/ordertabmaster.html" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_TABVIEWWINDOWCLASSNAME "TABVIEWCLASS" + STRING_FRETVIEWWINDOWCLASSNAME "FRETVIEWCLASS" + STRING_REGISTRYKEYNAME "Software\\Diversified\\TabMaster" + STRING_HISTORYKEYNAME "Software\\Diversified\\TabMaster\\History" + STRING_HISTORYKEYSHORTNAME "History" + STRING_SETTINGSKEYNAME "Software\\Diversified\\TabMaster\\Settings" + STRING_SETTINGSINSTRUMENT "Instrument" + STRING_SETTINGSACTION "Action" + STRING_SETTINGSNOTELETTERS "DisplayNoteLetters" + STRING_SETTINGSMICROSECONDSPERQUARTERNOTE "MicrosecondsPerQuarterNote" + STRING_REGISTRATIONKEYNAME + "Software\\Diversified\\TabMaster\\Registration" + STRING_SETTINGSLICENSE "License" + STRING_SETTINGSMIDIOUTPUT "MIDIOutput" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_21001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_21002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_21003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_21004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_21005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_21006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_21007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_21009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_21010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_21011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_21012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_21013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_21014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_21015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_21016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_21017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_21018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_21019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_21020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_21021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_21022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_21023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_21025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_21026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_21027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_21028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_21029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_21030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_21031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_21032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_21033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_21034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_21035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_21036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_21037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_21038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_21039 "A7sus4 [x 0 2 0 3 3] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21040 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_21041 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_21042 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_21043 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_21044 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_21045 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_21046 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21047 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_21048 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_21049 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_21050 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21051 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_21052 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21053 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21054 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_21055 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21056 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_21057 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21058 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21059 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_21060 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_21061 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_21062 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_21063 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_21064 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_21065 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_21066 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_21067 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21068 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21069 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21070 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_21071 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21072 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21073 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21074 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_21075 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21076 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21077 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_21078 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21079 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_21080 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_21081 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_21082 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_21083 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_21084 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_21085 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21086 "Am [x 0 2 2 1 0] (C E A) " + STRING_21087 "Am [x 0 7 5 5 5] (C E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21088 "Am [x 3 2 2 1 0] (C E A) " + STRING_21089 "Am [8 12 x x x 0] (C E A) " + STRING_21090 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_21091 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_21092 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_21093 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_21094 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_21095 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_21096 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_21097 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_21098 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_21099 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_21100 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_21101 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_21102 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_21103 "Am/G [x 0 5 5 5 8] (C E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21104 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_21105 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_21106 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_21107 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_21108 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_21109 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_21110 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_21111 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_21112 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_21113 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_21114 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_21115 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_21116 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_21117 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_21118 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_21119 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21120 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_21121 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_21122 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_21123 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_21124 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_21125 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_21126 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_21127 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_21128 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_21129 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_21130 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_21131 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_21132 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_21133 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_21134 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_21135 "Asus2/G [x 0 2 0 0 0] (E G A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21136 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_21137 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_21138 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_21139 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_21140 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_21141 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_21142 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_21143 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_21144 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_21145 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_21146 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_21147 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_21148 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_21149 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_21150 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_21151 "Asus4/G [x 0 2 2 3 3] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21152 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_21153 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_21154 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_21155 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_21156 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_21157 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_21158 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_21159 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_21160 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_21161 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_21162 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_21163 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21164 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21165 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21166 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21167 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21168 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21169 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_21170 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_21171 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_21172 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21173 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21174 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21175 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21176 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21177 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_21178 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_21179 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_21180 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_21181 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21182 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21183 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21184 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_21185 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_21186 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_21187 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_21188 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_21189 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21190 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_21191 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_21192 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_21193 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_21194 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_21195 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_21196 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_21197 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_21198 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_21199 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21200 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21201 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_21202 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21203 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_21204 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21205 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_21206 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_21207 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_21208 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_21209 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_21210 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21211 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21212 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21213 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_21214 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21215 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21216 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21217 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21218 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_21219 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_21220 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_21221 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_21222 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21223 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_21224 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_21225 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_21226 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_21227 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_21228 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_21229 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_21230 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_21231 "Bdim/G [x x 0 0 0 1] (D F G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21232 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21233 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21234 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21235 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_21236 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_21237 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_21238 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_21239 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_21240 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_21241 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_21242 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_21243 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_21244 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_21245 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_21246 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_21247 "Bm7 [x 0 4 4 3 2] (D Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21248 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_21249 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_21250 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_21251 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_21252 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_21253 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_21254 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_21255 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_21256 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_21257 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_21258 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_21259 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_21260 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_21261 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_21262 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_21263 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21264 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_21265 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21266 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21267 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21268 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_21269 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21270 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_21271 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_21272 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_21273 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_21274 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_21275 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_21276 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_21277 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_21278 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_21279 "C or Cmaj [x 3 2 0 1 0] (C E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21280 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_21281 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_21282 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_21283 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_21284 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_21285 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_21286 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_21287 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_21288 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_21289 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_21290 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_21291 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_21292 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_21293 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_21294 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_21295 "C/D [x x 0 0 1 0] (C D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21296 "C/D [x x 0 5 5 3] (C D E G) " + STRING_21297 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_21298 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_21299 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_21300 "C/F [x x 3 0 1 0] (C E F G) " + STRING_21301 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_21302 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_21303 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_21304 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_21305 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_21306 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_21307 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_21308 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_21309 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_21310 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_21311 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21312 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_21313 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_21314 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_21315 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_21316 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_21317 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_21318 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_21319 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_21320 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21321 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21322 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_21323 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21324 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_21325 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_21326 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_21327 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21328 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_21329 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21330 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_21331 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_21332 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_21333 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_21334 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_21335 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_21336 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_21337 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_21338 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_21339 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_21340 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_21341 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_21342 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_21343 "Csus2/B [x 3 0 0 0 3] (C D G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21344 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_21345 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_21346 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_21347 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_21348 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_21349 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_21350 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_21351 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_21352 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_21353 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_21354 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_21355 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_21356 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_21357 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_21358 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_21359 "Csus4/E [x x 3 0 1 0] (C E F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21360 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_21361 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_21362 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_21363 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_21364 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_21365 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_21366 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_21367 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_21368 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_21369 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_21370 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_21371 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_21372 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_21373 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_21374 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_21375 "D/C [x 3 x 2 3 2] (C D Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21376 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_21377 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_21378 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_21379 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_21380 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_21381 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_21382 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_21383 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_21384 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_21385 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_21386 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_21387 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_21388 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_21389 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_21390 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_21391 "D6 [x 2 0 2 0 2] (D Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21392 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_21393 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_21394 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_21395 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_21396 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_21397 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_21398 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_21399 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_21400 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_21401 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_21402 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_21403 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_21404 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_21405 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_21406 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_21407 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21408 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_21409 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_21410 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_21411 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_21412 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_21413 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_21414 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21415 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_21416 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_21417 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_21418 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_21419 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_21420 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_21421 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_21422 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_21423 "Db/B [x 4 3 4 0 4] (Db F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21424 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21425 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_21426 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_21427 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_21428 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21429 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_21430 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_21431 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21432 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_21433 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_21434 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_21435 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_21436 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_21437 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_21438 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_21439 "Dbdim/D [x x 0 0 2 0] (Db D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21440 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21441 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21442 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_21443 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_21444 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_21445 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_21446 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_21447 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_21448 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_21449 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_21450 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_21451 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_21452 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_21453 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_21454 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21455 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21456 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_21457 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_21458 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21459 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_21460 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_21461 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21462 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21463 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21464 "Dm [x 0 0 2 3 1] (D F A) " + STRING_21465 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_21466 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_21467 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_21468 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_21469 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_21470 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_21471 "Dm/C [x x 0 5 6 5] (C D F A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21472 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_21473 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_21474 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_21475 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_21476 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_21477 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_21478 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_21479 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_21480 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_21481 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_21482 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_21483 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_21484 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_21485 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_21486 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_21487 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21488 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_21489 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_21490 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_21491 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_21492 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_21493 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_21494 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_21495 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_21496 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_21497 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_21498 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_21499 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_21500 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_21501 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_21502 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_21503 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21504 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_21505 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_21506 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_21507 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_21508 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_21509 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_21510 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_21511 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_21512 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_21513 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_21514 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_21515 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_21516 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_21517 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_21518 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_21519 "Dsus4/C [x 5 7 5 8 3] (C D G A)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21520 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_21521 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_21522 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_21523 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_21524 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_21525 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_21526 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_21527 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_21528 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_21529 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_21530 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_21531 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_21532 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_21533 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_21534 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_21535 "E/D [x x 0 1 0 0] (D E Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21536 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_21537 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_21538 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21539 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21540 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_21541 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21542 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21543 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21544 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_21545 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_21546 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_21547 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_21548 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_21549 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_21550 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_21551 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21552 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_21553 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_21554 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_21555 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_21556 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_21557 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_21558 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21559 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21560 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21561 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_21562 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_21563 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_21564 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_21565 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_21566 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21567 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21568 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21569 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21570 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21571 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_21572 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_21573 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21574 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21575 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21576 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21577 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21578 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21579 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21580 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21581 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21582 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21583 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21584 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21585 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_21586 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21587 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21588 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_21589 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21590 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21591 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_21592 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_21593 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_21594 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_21595 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_21596 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21597 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21598 "Em [0 2 2 0 0 0] (E G B) " + STRING_21599 "Em [3 x 2 0 0 0] (E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21600 "Em [x 2 5 x x 0] (E G B) " + STRING_21601 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_21602 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_21603 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_21604 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_21605 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_21606 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_21607 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_21608 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_21609 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_21610 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_21611 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_21612 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_21613 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_21614 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_21615 "Em/D [x 10 12 12 12 0] (D E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21616 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_21617 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_21618 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_21619 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_21620 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_21621 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_21622 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_21623 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_21624 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_21625 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_21626 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_21627 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_21628 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_21629 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_21630 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_21631 "Em7 [x x 2 4 3 3] (D E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21632 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_21633 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_21634 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_21635 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_21636 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_21637 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_21638 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_21639 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_21640 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_21641 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21642 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21643 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_21644 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_21645 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_21646 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_21647 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21648 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_21649 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_21650 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_21651 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_21652 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_21653 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_21654 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_21655 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_21656 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_21657 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_21658 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21659 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21660 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21661 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_21662 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21663 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21664 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_21665 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_21666 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_21667 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_21668 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_21669 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_21670 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_21671 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_21672 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_21673 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_21674 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_21675 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_21676 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_21677 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_21678 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_21679 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21680 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_21681 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_21682 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_21683 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_21684 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_21685 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_21686 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_21687 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_21688 "F/D [x x 0 2 1 1] (C D F A) " + STRING_21689 "F/D [x x 0 5 6 5] (C D F A) " + STRING_21690 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_21691 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_21692 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_21693 "F/E [x x 2 2 1 1] (C E F A) " + STRING_21694 "F/E [x x 3 2 1 0] (C E F A) " + STRING_21695 "F/Eb [x x 1 2 1 1] (C Eb F A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21696 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_21697 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_21698 "F/G [x x 3 2 1 3] (C F G A) " + STRING_21699 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_21700 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_21701 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_21702 "F6 [x x 0 2 1 1] (C D F A) " + STRING_21703 "F6 [x x 0 5 6 5] (C D F A) " + STRING_21704 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_21705 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_21706 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_21707 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_21708 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_21709 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_21710 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21711 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21712 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_21713 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_21714 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_21715 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21716 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21717 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21718 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_21719 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_21720 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_21721 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_21722 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_21723 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21724 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_21725 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_21726 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21727 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21728 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_21729 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_21730 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_21731 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_21732 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_21733 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_21734 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_21735 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_21736 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_21737 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_21738 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_21739 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_21740 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_21741 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_21742 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_21743 "Fsus2/D [3 3 0 0 1 1] (C D F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21744 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_21745 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_21746 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_21747 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_21748 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_21749 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_21750 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_21751 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_21752 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_21753 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_21754 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_21755 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_21756 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_21757 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_21758 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_21759 "G/C [3 3 0 0 0 3] (C D G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21760 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_21761 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_21762 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_21763 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_21764 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_21765 "G/E [x x 0 12 12 12] (D E G B) " + STRING_21766 "G/E [x x 0 9 8 7] (D E G B) " + STRING_21767 "G/E [x x 2 4 3 3] (D E G B) " + STRING_21768 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_21769 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_21770 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_21771 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_21772 "G/F [x x 0 0 0 1] (D F G B) " + STRING_21773 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_21774 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_21775 "G/Gb [3 2 0 0 0 2] (D Gb G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21776 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_21777 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_21778 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_21779 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_21780 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_21781 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_21782 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_21783 "G6 [x x 0 12 12 12] (D E G B) " + STRING_21784 "G6 [x x 0 9 8 7] (D E G B) " + STRING_21785 "G6 [x x 2 4 3 3] (D E G B) " + STRING_21786 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_21787 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_21788 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_21789 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_21790 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_21791 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21792 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_21793 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_21794 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_21795 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_21796 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_21797 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_21798 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_21799 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_21800 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21801 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21802 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_21803 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_21804 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_21805 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_21806 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21807 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21808 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21809 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21810 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21811 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21812 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_21813 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21814 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21815 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_21816 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_21817 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21818 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21819 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_21820 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_21821 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_21822 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_21823 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21824 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_21825 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_21826 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21827 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_21828 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_21829 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_21830 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_21831 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_21832 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_21833 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_21834 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_21835 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_21836 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_21837 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_21838 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_21839 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21840 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_21841 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_21842 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_21843 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_21844 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_21845 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21846 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_21847 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21848 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_21849 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_21850 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_21851 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21852 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21853 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21854 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21855 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21856 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_21857 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_21858 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_21859 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_21860 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_21861 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_21862 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_21863 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_21864 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_21865 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_21866 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_21867 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_21868 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_21869 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_21870 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_21871 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21872 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_21873 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_21874 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_21875 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_21876 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_21877 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_21878 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_21879 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_21880 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_21881 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_21882 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_21883 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_21884 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_21885 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_21886 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_21887 "Gsus2/E [5 0 0 0 3 0] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21888 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_21889 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_21890 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_21891 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_21892 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_21893 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_21894 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_21895 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_21896 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_21897 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_21898 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_21899 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_21900 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_21901 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_21902 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT1 "0;PIANO;Acoustic Grand Piano" + STRING_INSTRUMENT2 "1;PIANO;Bright Acoustic Piano" + STRING_INSTRUMENT3 "2;PIANO;Electric Grand Piano" + STRING_INSTRUMENT4 "3;PIANO;Honky-tonk Piano" + STRING_INSTRUMENT5 "4;PIANO;Rhodes Piano" + STRING_INSTRUMENT6 "5;PIANO;Chorused Piano" + STRING_INSTRUMENT7 "6;PIANO;Harpsichord" + STRING_INSTRUMENT8 "7;PIANO;Clavinet" + STRING_INSTRUMENT9 "8;CHROM PERCUSSION;Celesta" + STRING_INSTRUMENT10 "9;CHROM PERCUSSION;Glockenspiel" + STRING_INSTRUMENT11 "10;CHROM PERCUSSION;Music Box" + STRING_INSTRUMENT12 "11;CHROM PERCUSSION;Vibraphone" + STRING_INSTRUMENT13 "12;CHROM PERCUSSION;Marimba" + STRING_INSTRUMENT14 "13;CHROM PERCUSSION;Xylophone" + STRING_INSTRUMENT15 "14;CHROM PERCUSSION;Tubular-bell" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT16 "15;CHROM PERCUSSION;Dulcimer" + STRING_INSTRUMENT17 "16;ORGAN;Hammond Organ" + STRING_INSTRUMENT18 "17;ORGAN;Percussive Organ" + STRING_INSTRUMENT19 "18;ORGAN;Rock Organ" + STRING_INSTRUMENT20 "19;ORGAN;Church Organ" + STRING_INSTRUMENT21 "20;ORGAN;Reed Organ" + STRING_INSTRUMENT22 "21;ORGAN;Accordion" + STRING_INSTRUMENT23 "22;ORGAN;Harmonica" + STRING_INSTRUMENT24 "23;ORGAN;Tango Accordion" + STRING_INSTRUMENT25 "24;GUITAR;Acoustic Guitar(nylon)" + STRING_INSTRUMENT26 "25;GUITAR;Acoustic Guitar(steel)" + STRING_INSTRUMENT27 "26;GUITAR;Electric Guitar(jazz)" + STRING_INSTRUMENT28 "27;GUITAR;Electric Guitar(clean)" + STRING_INSTRUMENT29 "28;GUITAR;Electric Guitar(muted)" + STRING_INSTRUMENT30 "29;GUITAR;Overdriven Guitar" + STRING_INSTRUMENT31 "30;GUITAR;Distortion Guitar" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT32 "31;GUITAR;Guitar Harmonics" + STRING_INSTRUMENT33 "32;BASS;Acoustic Bass" + STRING_INSTRUMENT34 "33;BASS;Electric Bass(finger)" + STRING_INSTRUMENT35 "34;BASS;Electric Bass(pick)" + STRING_INSTRUMENT36 "35;BASS;Fretless Bass" + STRING_INSTRUMENT37 "36;BASS;Slap Bass 1" + STRING_INSTRUMENT38 "37;BASS;Slap Bass 2" + STRING_INSTRUMENT39 "38;BASS;Synth Bass 1" + STRING_INSTRUMENT40 "39;BASS;Synth Bass 2" + STRING_INSTRUMENT41 "40;STRINGS;Violin" + STRING_INSTRUMENT42 "41;STRINGS;Viola" + STRING_INSTRUMENT43 "42;STRINGS;Cello" + STRING_INSTRUMENT44 "43;STRINGS;Contrabass" + STRING_INSTRUMENT45 "44;STRINGS;Tremolo Strings" + STRING_INSTRUMENT46 "45;STRINGS;Pizzicato Strings" + STRING_INSTRUMENT47 "46;STRINGS;Orchestral Harp" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT48 "47;STRINGS;Timpani" + STRING_INSTRUMENT49 "48;ENSEMBLE;String Ensemble 1" + STRING_INSTRUMENT50 "49;ENSEMBLE;String Ensemble 2" + STRING_INSTRUMENT51 "50;ENSEMBLE;Synth Strings 1" + STRING_INSTRUMENT52 "51;ENSEMBLE;Synth Strings 2" + STRING_INSTRUMENT53 "52;ENSEMBLE;Choir Aahs" + STRING_INSTRUMENT54 "53;ENSEMBLE;Voice Oohs" + STRING_INSTRUMENT55 "54;ENSEMBLE;Synth Voice" + STRING_INSTRUMENT56 "55;ENSEMBLE;Orchestra Hit" + STRING_INSTRUMENT57 "56;BRASS;Trumpet" + STRING_INSTRUMENT58 "57;BRASS;Trombone" + STRING_INSTRUMENT59 "58;BRASS;Tuba" + STRING_INSTRUMENT60 "59;BRASS;Muted Trumpet" + STRING_INSTRUMENT61 "60;BRASS;French Horn" + STRING_INSTRUMENT62 "61;BRASS;Brass Section" + STRING_INSTRUMENT63 "62;BRASS;Synth Brass 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT64 "63;BRASS;Synth Brass 2" + STRING_INSTRUMENT65 "64;REED;Soprano Sax" + STRING_INSTRUMENT66 "65;REED;Alto Sax" + STRING_INSTRUMENT67 "66;REED;Tenor Sax" + STRING_INSTRUMENT68 "67;REED;Baritone Sax" + STRING_INSTRUMENT69 "68;REED;Oboe" + STRING_INSTRUMENT70 "69;REED;English Horn" + STRING_INSTRUMENT71 "70;REED;Bassoon" + STRING_INSTRUMENT72 "71;REED;Clarinet" + STRING_INSTRUMENT73 "72;PIPE;Piccolo" + STRING_INSTRUMENT74 "73;PIPE;Flute" + STRING_INSTRUMENT75 "74;PIPE;Recorder" + STRING_INSTRUMENT76 "75;PIPE;Pan Flute" + STRING_INSTRUMENT77 "76;PIPE;Bottle Blow" + STRING_INSTRUMENT78 "77;PIPE;Shakuhachi" + STRING_INSTRUMENT79 "78;PIPE;Whistle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT80 "79;PIPE;Ocarina" + STRING_INSTRUMENT81 "80;SYNTH LEAD;Lead 1(square)" + STRING_INSTRUMENT82 "81;SYNTH LEAD;Lead 2(sawtooth)" + STRING_INSTRUMENT83 "82;SYNTH LEAD;Lead 3(calliope)" + STRING_INSTRUMENT84 "83;SYNTH LEAD;Lead 4(chiffer)" + STRING_INSTRUMENT85 "84;SYNTH LEAD;Lead 5(charang)" + STRING_INSTRUMENT86 "85;SYNTH LEAD;Lead 6(voice)" + STRING_INSTRUMENT87 "86;SYNTH LEAD;Lead 7(5th sawtooth)" + STRING_INSTRUMENT88 "87;SYNTH LEAD;Lead 8(bass&lead)" + STRING_INSTRUMENT89 "88;SYNTH PAD;Pad 1(new age)" + STRING_INSTRUMENT90 "89;SYNTH PAD;Pad 2(warm)" + STRING_INSTRUMENT91 "90;SYNTH PAD;Pad 3(polysynth)" + STRING_INSTRUMENT92 "91;SYNTH PAD;Pad 4(choir)" + STRING_INSTRUMENT93 "92;SYNTH PAD;Pad 5(bowed glass)" + STRING_INSTRUMENT94 "93;SYNTH PAD;Pad 6(metal)" + STRING_INSTRUMENT95 "94;SYNTH PAD;Pad 7(halo)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT96 "95;SYNTH PAD;Pad 8(sweep)" + STRING_INSTRUMENT97 "96;SYNTH EFFECTS;FX 1(rain)" + STRING_INSTRUMENT98 "97;SYNTH EFFECTS;FX 2(soundtrack)" + STRING_INSTRUMENT99 "98;SYNTH EFFECTS;FX 3(crystal)" + STRING_INSTRUMENT100 "99;SYNTH EFFECTS;FX 4(atmosphere)" + STRING_INSTRUMENT101 "100;SYNTH EFFECTS;FX 5(brightness)" + STRING_INSTRUMENT102 "101;SYNTH EFFECTS;FX 6(goblin)" + STRING_INSTRUMENT103 "102;SYNTH EFFECTS;FX 7(echo drops)" + STRING_INSTRUMENT104 "103;SYNTH EFFECTS;FX 8(star-theme)" + STRING_INSTRUMENT105 "104;ETHNIC;Sitar" + STRING_INSTRUMENT106 "105;ETHNIC;Banjo" + STRING_INSTRUMENT107 "106;ETHNIC;Shamisen" + STRING_INSTRUMENT108 "107;ETHNIC;Koto" + STRING_INSTRUMENT109 "108;ETHNIC;Kalimba" + STRING_INSTRUMENT110 "109;ETHNIC;Bag Pipe" + STRING_INSTRUMENT111 "110;ETHNIC;Fiddle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT112 "111;ETHNIC;Shanai" + STRING_INSTRUMENT113 "112;PERCUSSIVE;Tinkle Bell" + STRING_INSTRUMENT114 "113;PERCUSSIVE;Agogo" + STRING_INSTRUMENT115 "114;PERCUSSIVE;Steel Drums" + STRING_INSTRUMENT116 "115;PERCUSSIVE;Woodblock" + STRING_INSTRUMENT117 "116;PERCUSSIVE;Taiko Drum" + STRING_INSTRUMENT118 "117;PERCUSSIVE;Melodic Tom" + STRING_INSTRUMENT119 "118;PERCUSSIVE;Synth Drum" + STRING_INSTRUMENT120 "119;PERCUSSIVE;Reverse Cymbal" + STRING_INSTRUMENT121 "120;SOUND EFFECTS;Guitar Fret Noise" + STRING_INSTRUMENT122 "121;SOUND EFFECTS;Breath Noise" + STRING_INSTRUMENT123 "122;SOUND EFFECTS;Seashore" + STRING_INSTRUMENT124 "123;SOUND EFFECTS;Bird Tweet" + STRING_INSTRUMENT125 "124;SOUND EFFECTS;Telephone Ring" + STRING_INSTRUMENT126 "125;SOUND EFFECTS;Helicopter" + STRING_INSTRUMENT127 "126;SOUND EFFECTS;Applause" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT128 "127;SOUND EFFECTS;Gun Shot" + STRING_INSTRUMENT129 "135;MIDI PERCUSSION;Acoustic Bass Drum" + STRING_INSTRUMENT130 "136;MIDI PERCUSSION;Bass Drum" + STRING_INSTRUMENT131 "137;MIDI PERCUSSION;Slide Stick" + STRING_INSTRUMENT132 "138;MIDI PERCUSSION;Acoustic Snare" + STRING_INSTRUMENT133 "139;MIDI PERCUSSION;Hand Clap" + STRING_INSTRUMENT134 "140;MIDI PERCUSSION;Electric Snare" + STRING_INSTRUMENT135 "141;MIDI PERCUSSION;Low Floor Tom" + STRING_INSTRUMENT136 "142;MIDI PERCUSSION;Closed High-Hat" + STRING_INSTRUMENT137 "143;MIDI PERCUSSION;High Floor Tom" + STRING_INSTRUMENT138 "144;MIDI PERCUSSION;Pedal High Hat" + STRING_INSTRUMENT139 "145;MIDI PERCUSSION;Low Tom" + STRING_INSTRUMENT140 "146;MIDI PERCUSSION;Open High Hat" + STRING_INSTRUMENT141 "147;MIDI PERCUSSION;Low-Mid Tom" + STRING_INSTRUMENT142 "148;MIDI PERCUSSION;High-Mid Tom" + STRING_INSTRUMENT143 "149;MIDI PERCUSSION;Crash Cymbal 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT144 "150;MIDI PERCUSSION;High Tom" + STRING_INSTRUMENT145 "151;MIDI PERCUSSION;Ride Cymbal 1" + STRING_INSTRUMENT146 "152;MIDI PERCUSSION;Chinese Cymbal" + STRING_INSTRUMENT147 "153;MIDI PERCUSSION;Ride Bell" + STRING_INSTRUMENT148 "154;MIDI PERCUSSION;Tambourine" + STRING_INSTRUMENT149 "155;MIDI PERCUSSION;Splash Cymbal" + STRING_INSTRUMENT150 "156;MIDI PERCUSSION;Cowbell" + STRING_INSTRUMENT151 "157;MIDI PERCUSSION;Crash Cymbal 2" + STRING_INSTRUMENT152 "158;MIDI PERCUSSION;Vibraslap" + STRING_INSTRUMENT153 "159;MIDI PERCUSSION;Ride Cymbal 2" + STRING_INSTRUMENT154 "160;MIDI PERCUSSION;High Bongo" + STRING_INSTRUMENT155 "161;MIDI PERCUSSION;Low Bongo" + STRING_INSTRUMENT156 "162;MIDI PERCUSSION;Mute High Conga" + STRING_INSTRUMENT157 "163;MIDI PERCUSSION;Open High Conga" + STRING_INSTRUMENT158 "164;MIDI PERCUSSION;Low Conga" + STRING_INSTRUMENT159 "165;MIDI PERCUSSION;High Timbale" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT160 "166;MIDI PERCUSSION;Low Timbale" + STRING_INSTRUMENT161 "167;MIDI PERCUSSION;High Agogo" + STRING_INSTRUMENT162 "168;MIDI PERCUSSION;Low Agogo" + STRING_INSTRUMENT163 "169;MIDI PERCUSSION;Cabasa" + STRING_INSTRUMENT164 "170;MIDI PERCUSSION;Maracas" + STRING_INSTRUMENT165 "171;MIDI PERCUSSION;Short Whistle" + STRING_INSTRUMENT166 "172;MIDI PERCUSSION;Long Whistle" + STRING_INSTRUMENT167 "173;MIDI PERCUSSION;Short Guiro" + STRING_INSTRUMENT168 "174;MIDI PERCUSSION;Long Guiro" + STRING_INSTRUMENT169 "175;MIDI PERCUSSION;Claves" + STRING_INSTRUMENT170 "176;MIDI PERCUSSION;High Wood Block" + STRING_INSTRUMENT171 "177;MIDI PERCUSSION;Low Wood Block" + STRING_INSTRUMENT172 "178;MIDI PERCUSSION;Mute Cuica" + STRING_INSTRUMENT173 "179;MIDI PERCUSSION;Open Cuica" + STRING_INSTRUMENT174 "180;MIDI PERCUSSION;Mute Triangle" + STRING_INSTRUMENT175 "181;MIDI PERCUSSION;Open Triangle" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/guitar/backup/20040219/icon1.ico b/guitar/backup/20040219/icon1.ico new file mode 100644 index 0000000..cd5eef4 Binary files /dev/null and b/guitar/backup/20040219/icon1.ico differ diff --git a/guitar/backup/20040219/license.cpp b/guitar/backup/20040219/license.cpp new file mode 100644 index 0000000..61f14a2 --- /dev/null +++ b/guitar/backup/20040219/license.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +/* + The license will be uuencoded on top of xor. This should be sufficient to protect the contents. + Lic: TM105R20020101013001EF + VVVVVVYYYYMMDDTTDDCCCC + + XX=version TM105R. should check this against this product version and release + YYYY=year of license issuance. 30 day license will use this value to expire itself. + MM=month of license issuance 30 day license will use this value to expiure + DD=day of license issuance + TT=type of license + 01=30 day license, expires 30 days from issuance. + 02=Full license, never expires. + DD=for type 01 license, indicates number of days license is good for. + CCCC=checksum, just add up ASCII values of the characters through TT, display in hex. +*/ + +const String License::smBeginLicense="BEGIN LICENSE"; +const String License::smEndLicense="END LICENSE"; + +String License::generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount) +{ + String strLicenseKey; + String strIssueDate; + String strLicenseType; + String strDayCount; + String strChecksum; + + strLicenseKey=String("TM"); + strLicenseKey+=strProductVersion.substr(0,3); + ::sprintf(strIssueDate,"%4d%02d%02d",issueDate.year(),issueDate.month(),issueDate.day()); + strLicenseKey+=strIssueDate; + ::sprintf(strLicenseType,"%02d",licenseType); + strLicenseKey+=strLicenseType; + ::sprintf(strDayCount,"%02d",dayCount); + strLicenseKey+=strDayCount; + ::sprintf(strChecksum,"%04lx",calculateChecksum(strLicenseKey)); + strLicenseKey+=strChecksum; + return UUTool::encode(xor(strLicenseKey)); +} + +String numericEncode(const String &strLicense) +{ + return String(); +} + +String numericDecode(const String &strLicense) +{ + return String(); +} + +bool License::fromLines(Block &strLicenseLines) +{ + if(3!=strLicenseLines.size())return false; + if(!(strLicenseLines[0]==smBeginLicense))return false; + if(!(strLicenseLines[2]==smEndLicense))return false; + return fromString(strLicenseLines[1]); +} + +// TM105R2002040301 30 03d8 + +bool License::fromString(const String &strLicense) +{ + VersionInfo versionInfo; + SystemTime currDate; + SystemTime expireDate; + String strHeader; + String strDecoded; + String strVersion; + int hashCode; + + mUUEncodedLicense=strLicense; + strDecoded=xor(UUTool::decode(strLicense)); + strHeader=strDecoded.substr(0,1); + if(!(strHeader==String("TM")))return false; + mProductVersion=strDecoded.substr(2,5); + mIssueDate.year(strDecoded.substr(6,9).toInt()); + mIssueDate.month((SystemTime::Month)strDecoded.substr(10,11).toInt()); + mIssueDate.day(strDecoded.substr(12,13).toInt()); + mLicenseType=(LicenseType)strDecoded.substr(14,15).toInt(); + mDayCount=strDecoded.substr(16,17).toInt(); + hashCode=strDecoded.substr(18,21).hex(); + if(hashCode!=calculateChecksum(strDecoded.substr(0,17)))return false; + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return mIsValid=true; + expireDate=mIssueDate; + expireDate.daysAdd360(mDayCount); + if(currDate>=expireDate)return false; + return mIsValid=true; +} + +String License::xor(const String &strLicense) +{ + String strEncoded; + int strLength; + + strEncoded.reserve((strLength=strLicense.length())+1); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } +// GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setLogLevel(GlobalDefs::NoLog); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); + +} + diff --git a/guitar/backup/20040219/mainfrm.cpp b/guitar/backup/20040219/mainfrm.cpp new file mode 100644 index 0000000..083ba8d --- /dev/null +++ b/guitar/backup/20040219/mainfrm.cpp @@ -0,0 +1,1075 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); + mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + return false; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + return false; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_PRINT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_PRINT",GlobalDefs::Verbose); + handleFilePrint(); + break; + case MENU_FILE_NEW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_NEW",GlobalDefs::Verbose); + handleFileNew(); + break; + case MENU_FILE_OPEN : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_OPEN",GlobalDefs::Verbose); + handleOpenProject(); + break; + case MENU_FILE_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_IMPORT",GlobalDefs::Verbose); + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_MIDI_IMPORT",GlobalDefs::Verbose); + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_CLOSE",GlobalDefs::Verbose); + handleFileClose(); + break; + case MENU_FILE_EXIT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_EXIT",GlobalDefs::Verbose); + handleFileExit(); + break; + case MENU_FILE_SAVE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVE",GlobalDefs::Verbose); + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVEAS",GlobalDefs::Verbose); + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_VIEW_FRETBOARD",GlobalDefs::Verbose); + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAY",GlobalDefs::Verbose); + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYTOEND",GlobalDefs::Verbose); + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYREPEATED",GlobalDefs::Verbose); + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE",GlobalDefs::Verbose); + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE_REPEATED",GlobalDefs::Verbose); + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_STOP",GlobalDefs::Verbose); + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_ENTRYPROPS",GlobalDefs::Verbose); + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETENDRANGE",GlobalDefs::Verbose); + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETSTARTRANGE",GlobalDefs::Verbose); + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_RANGES",GlobalDefs::Verbose); + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_INCREASETEMPO",GlobalDefs::Verbose); + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_DECREASETEMPO",GlobalDefs::Verbose); + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_SETTINGS",GlobalDefs::Verbose); + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_LOOKUP",GlobalDefs::Verbose); + handleChordLookup(); + break; + case MENU_CHORDS_ENTER : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_ENTER",GlobalDefs::Verbose); + handleChordEnter(); + break; + case MENU_FRETBOARD_CLEAR : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_CLEAR",GlobalDefs::Verbose); + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_SHOWALLPOSITIONS",GlobalDefs::Verbose); + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_SCALES_SHOW",GlobalDefs::Verbose); + handleShowScales(); + break; + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + break; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + break; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CASCADE",GlobalDefs::Verbose); + cascade(); + break; + case IDM_TILE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_TILE",GlobalDefs::Verbose); + tile(); + break; + case IDM_ARRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_ARRANGE",GlobalDefs::Verbose); + arrange(); + break; + case IDM_CLOSEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CLOSEALL",GlobalDefs::Verbose); + closeAll(); + break; + case IDM_MINIMIZEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_MINIMIZEALL",GlobalDefs::Verbose); + minimizeAll(); + break; + case IDM_RESTOREALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_RESTOREALL",GlobalDefs::Verbose); + restoreAll(); + break; + default : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::keyDownHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::paintHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); + GlobalDefs::outDebug("[MainFrame::createHandler]",GlobalDefs::Verbose); + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + Control desktop(::GetDesktopWindow(),0,false); + setWindowPos(desktop.width()>InitialWidth?InitialWidth:desktop.width(),desktop.height()>InitialHeight?InitialHeight:desktop.height()); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + updateHistory(); + if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ + Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::guiFretboardHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + + GlobalDefs::outDebug("[MainFrame::guiFretboardHandler]",GlobalDefs::Verbose); + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow); + } + if(!someCallbackData.lParam()) + { + ((FretViewWindow&)*mdiWindow).clearNotes(); + } + else + { + if(CBCommands::FBShowTab==someCallbackData.wParam()) + { + const TabEntry &entry=*(TabEntry*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(entry,true,false); // show note only, do not play. used by tabpage + } + else if(CBCommands::FBPlayNote==someCallbackData.wParam()) + { + const Note ¬e=*(Note*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(note); + } + else if(CBCommands::FBPlayScale==someCallbackData.wParam()) // This is used by the scale dialog + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale,true); + } + else if(CBCommands::FBShowScale==someCallbackData.wParam()) // This is used by scale dialog to show, but not play. + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale); + } + else if(CBCommands::FBPlayFrettedNotes==someCallbackData.wParam()) // not currently used see ScaleDlg + { + const FrettedNotes &frettedNotes=*(FrettedNotes*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(frettedNotes); + } + else if(CBCommands::FBPlayTab==someCallbackData.wParam()) + { + SmartPointer mdiWindow; + if(getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + ((FretViewWindow&)*mdiWindow).setNote(*(TabEntry*)someCallbackData.lParam(),true); + } + else if(CBCommands::FBPlayChord==someCallbackData.wParam()) + { + const Music::Chord &chord=*(Music::Chord*)someCallbackData.lParam(); + SmartPointer mdiWindow; + getActive(mdiWindow); + if(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + TabEntry entry; + entry.fromChord(chord); + ((ViewWindow&)*mdiWindow).insert(entry); + } + else if(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)) + { + ((FretViewWindow&)*mdiWindow).setNote(chord,true); + } + } + } + return false; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} + +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} + +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} + +// menu handlers + +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} + +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} + +void MainFrame::handleFileNew(void) +{ + createProjectView(); +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + createProjectView(strPathTabFile); +} + +void MainFrame::handleMIDIImport(void) +{ + OpenDialog openDialog; + String strPathMIDIFile; + String strPathTabFileName; + MIDIHelper midiHelper; + CursorControl cursorControl; + MIDIDialog midiDialog; + License license; + int selectedTrack; + + Registration::getInstance().getLicense(license); + if(!license.allowFeature(License::MIDIFeature)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"This feature is disabled in this version.",MB_ICONSTOP); + return; + } + if(!openDialog.getOpenFileName(*this,"*.mid","Open MIDI","*.mid",strPathMIDIFile))return; + if(!midiDialog.perform(*this,strPathMIDIFile,selectedTrack))return; + strPathTabFileName=Profile::removeExtension(strPathMIDIFile)+String("TRK")+String().fromInt(selectedTrack+1)+String(".tab"); + if(!midiHelper.import(strPathMIDIFile,strPathTabFileName,selectedTrack)) + { + MessageBox::messageBox(*this,strPathMIDIFile,"Error importing file.",MB_ICONSTOP); + return; + } + cursorControl.waitCursor(true); + createProjectView(strPathTabFileName); + cursorControl.waitCursor(false); +} + +void MainFrame::handleOpenProject(CallbackData &someCallbackData) +{ + PureMenu fileMenu; + String menuItemString; + + getFrameMenu().getSubMenu(0,fileMenu); + menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand); + if(menuItemString.isNull())return; + menuItemString=menuItemString.betweenString(')',0); + menuItemString.trimLeft(); + handleOpenProject(menuItemString); +} + +void MainFrame::handleOpenProject(void) +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,String(STRING_PRJALLEXTENSION),"Open Project",String(STRING_PRJALLEXTENSION),strPathFileName))return; + handleOpenProject(strPathFileName); +} + +void MainFrame::handleOpenProject(const String &strPathFileProject) +{ + openProjectView(strPathFileProject); +} + +void MainFrame::handleFileClose(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} + +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} + +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} + +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleChordEnter() +{ + ChordBuilderDialog chordBuilderDialog; + chordBuilderDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} + +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} + +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} + +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} + +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} + +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} + +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} + +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} + +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} + +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} + +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} + +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} + +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} + +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} + +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} + +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} + +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} + +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} + +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} + +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} + +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; +// enum{InitialWidth=700,InitialHeight=480}; + enum{InitialWidth=800,InitialHeight=600}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleMIDIImport(void); + void handleFileClose(void); + void handleFileExit(void); + void handleFileNew(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleChordEnter(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void createToolBar(void); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handleViewHistogram(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mGUIFretboardHandler; + Callback mDropFilesHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/guitar/backup/20040219/notepath.cpp b/guitar/backup/20040219/notepath.cpp new file mode 100644 index 0000000..d6f75df --- /dev/null +++ b/guitar/backup/20040219/notepath.cpp @@ -0,0 +1,12 @@ +#include + +String NotePath::toString(void) +{ + String strNotePath; + + for(int index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class NotePath; +typedef Array NotePaths; + +class NotePath : public Block +{ +public: + String toString(void); +}; +#endif diff --git a/guitar/backup/20040219/ordering.hpp b/guitar/backup/20040219/ordering.hpp new file mode 100644 index 0000000..81ab6b1 --- /dev/null +++ b/guitar/backup/20040219/ordering.hpp @@ -0,0 +1,73 @@ +#ifndef _GUITAR_ORDERING_HPP_ +#define _GUITAR_ORDERING_HPP_ + +class Ordering +{ +public: + Ordering(int criteria=0,int value=0); + virtual ~Ordering(); + bool operator<(const Ordering &ordering)const; + bool operator>(const Ordering &ordering)const; + bool operator==(const Ordering &ordering)const; + int getCriteria(void)const; + void setCriteria(int criteria); + int getValue(void)const; + void setValue(int value); +private: + int mCriteria; + int mValue; +}; + +inline +Ordering::Ordering(int criteria,int value) +: mCriteria(criteria), mValue(value) +{ +} + +inline +Ordering::~Ordering() +{ +} + +inline +bool Ordering::operator<(const Ordering &ordering)const +{ + return mCriteria(const Ordering &ordering)const +{ + return mCriteria>ordering.mCriteria; +} + +inline +bool Ordering::operator==(const Ordering &ordering)const +{ + return mCriteria==ordering.mCriteria; +} + +inline +int Ordering::getCriteria(void)const +{ + return mCriteria; +} + +inline +void Ordering::setCriteria(int criteria) +{ + mCriteria=criteria; +} + +inline +int Ordering::getValue(void)const +{ + return mValue; +} + +inline +void Ordering::setValue(int value) +{ + mValue=value; +} +#endif diff --git a/guitar/backup/20040219/registration.cpp b/guitar/backup/20040219/registration.cpp new file mode 100644 index 0000000..2b6ab23 --- /dev/null +++ b/guitar/backup/20040219/registration.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include + +SmartPointer Registration::smRegistration; + +Registration::Registration() +: mRegistrationKeyName(STRING_REGISTRATIONKEYNAME), + mSettingsLicenseKey(STRING_SETTINGSLICENSE) +{ +} + +Registration::~Registration() +{ +} + +Registration &Registration::getInstance() +{ + if(!smRegistration.isOkay()) + { + smRegistration=::new Registration(); + smRegistration.disposition(PointerDisposition::Delete); + } + return *smRegistration; +} + +bool Registration::hasGID(void)const +{ + FileHandle gidFile; + return gidFile.open("install.gid",FileHandle::Read,FileHandle::ShareRead,FileHandle::Open,FileHandle::Hidden); +} + +bool Registration::hasLicense(void)const +{ + RegKey regKeyRegistration; + String strLicense; + + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + return strLicense.isNull()?false:true; +} + +bool Registration::getLicense(License &license)const +{ + String strLicense; + RegKey regKeyRegistration; + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + license.fromString(strLicense); + return true; +} + +bool Registration::applyLicense(Block &strLicenseLines) +{ + RegKey regKeyRegistration; + License license; + + license.fromLines(strLicenseLines); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,license.getUUEncodedLicense()); + return true; +} + +bool Registration::applyLicense(const String &uuencodedLicense) +{ + RegKey regKeyRegistration; + License license; + + license.fromString(uuencodedLicense); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,uuencodedLicense); + return true; +} + +bool Registration::create30DayLicense(void)const +{ + createLicense(30); + return true; +} + +bool Registration::create15DayLicense(void)const +{ + createLicense(15); + return true; +} + +bool Registration::createPermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + +License Registration::generatePermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + License license; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + license.fromString(strLicense); + return license; +} + +bool Registration::removeLicense(void) +{ + RegKey regKeyRegistration; + return regKeyRegistration.deleteKey(mRegistrationKeyName); +} + +bool Registration::createLicense(int days)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Expires,days); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + diff --git a/guitar/backup/20040219/registry.cpp b/guitar/backup/20040219/registry.cpp new file mode 100644 index 0000000..ecf9669 --- /dev/null +++ b/guitar/backup/20040219/registry.cpp @@ -0,0 +1,191 @@ +#include +#include + +Registry::Registry(void) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mRegKeyHistory(RegKey::CurrentUser), + mSettingsAction(STRING_SETTINGSACTION), + mSettingsMicrosecondsPerQuarterNote(STRING_SETTINGSMICROSECONDSPERQUARTERNOTE), + mSettingsInstrument(STRING_SETTINGSINSTRUMENT), + mSettingsNoteLetters(STRING_SETTINGSNOTELETTERS), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT) +{ + guarantee(); + getCacheNames(); +} + +Registry::Registry(const Registry &someRegistry) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT), + mRegKeyHistory(RegKey::CurrentUser) +{ + *this=someRegistry; +} + +Registry::~Registry() +{ +} + +Registry &Registry::operator=(const Registry &/*registry*/) +{ + return *this; +} + +void Registry::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +void Registry::guarantee(void) +{ + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setShowAction(GlobalDefs::ShowAction); + setShowNotes(GlobalDefs::ShowNotes); + setMicrosecondsPerQuarterNote(GlobalDefs::MicrosecondsPerQuarterNote); + setMIDIOutputDevice("MIDIMAPPER"); + } + Instrument instrument=getInstrument(); + if(!instrument.isOkay())setInstrument(Instruments()[0]); +} + +bool Registry::isOkay(void)const +{ + return mRegKeyHistory.isOkay(); +} + +bool Registry::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool Registry::setHistory(Block &nameList) +{ + removeHistory(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;indexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Registry +{ +public: + Registry(void); + Registry(const Registry ®istry); + virtual ~Registry(); + Registry &operator=(const Registry ®istry); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool removeHistory(const String &strName); + bool getShowNotes(void); + void setShowNotes(bool showNoteLetters); + bool getShowAction(void)const; + void setShowAction(bool showAction); + int getMicrosecondsPerQuarterNote(void)const; + void setMicrosecondsPerQuarterNote(int microsecondsPerQuarterNote); + long getMillisecondsPerQuarterNote(void)const; + Instrument getInstrument(void)const; + void setInstrument(Instrument instrument); + String getMIDIOutputDevice(void)const; + void setMIDIOutputDevice(const String &midiOutputDevice); + bool isOkay(void)const; +private: + enum {MaxCachedNames=7}; + void guarantee(void); + void getCacheNames(void); + bool removeHistory(void); + + Block mCachedNames; + String mHistoryKeyName; + String mHistoryKeyShortName; + String mRegistryKeyName; + String mSettingsKeyName; + String mSettingsAction; + String mSettingsNoteLetters; + String mSettingsMicrosecondsPerQuarterNote; + String mSettingsInstrument; + String mSettingsMIDIOutput; + RegKey mRegKeyHistory; + RegKey mRegKeySettings; +}; + +inline +long Registry::getMillisecondsPerQuarterNote(void)const +{ + return getMicrosecondsPerQuarterNote()/1000; +} +#endif diff --git a/guitar/backup/20040219/requirement.hpp b/guitar/backup/20040219/requirement.hpp new file mode 100644 index 0000000..f90c959 --- /dev/null +++ b/guitar/backup/20040219/requirement.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REQUIREMENT_HPP_ +#define _GUITAR_REQUIREMENT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Requirement; + +typedef SmartPointer PtrRequirement; + +class Requirement : public FrettedNote +{ +public: + Requirement(); + virtual ~Requirement(); + bool getSatisfied(void)const; + void setSatisfied(bool satisfied); + Requirement &operator=(const FrettedNote &frettedNote); +private: + bool mSatisfied; +}; + +inline +Requirement::Requirement() +: mSatisfied(false) +{ +} + +inline +Requirement::~Requirement() +{ +} + +inline +Requirement &Requirement::operator=(const FrettedNote &frettedNote) +{ + (FrettedNote&)*this=frettedNote; + return *this; +} + +inline +bool Requirement::getSatisfied(void)const +{ + return mSatisfied; +} + +inline +void Requirement::setSatisfied(bool satisfied) +{ + mSatisfied=satisfied; +} +#endif diff --git a/guitar/backup/20040219/requirements.cpp b/guitar/backup/20040219/requirements.cpp new file mode 100644 index 0000000..b5b6851 --- /dev/null +++ b/guitar/backup/20040219/requirements.cpp @@ -0,0 +1,77 @@ +#include +#include + +void Requirements::setRequirements(Block ¬es) +{ + size(notes.size()); + for(int index=0;index searchOrder; + + searchOrder.size(notePaths.size()); + for(int index=0;index sortOrder; + sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets + for(index=0;indexsetSatisfied(true); + satisfied=true; + break; + } + } + return satisfied; +} + +bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement) +{ + for(int index=0;indextoString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + if(requirement->getNote()==frettedNote.getNote()&& + requirement->getOctave()==frettedNote.getOctave()&& + !requirement->getSatisfied())return true; + } + return false; +} + +bool Requirements::haveRequirement(const FrettedNote &frettedNote) +{ + for(int index=0;index +#endif +#ifndef _GUITAR_ORDERING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTEPATH_HPP_ +#include +#endif +#ifndef _GUITAR_REQUIREMENT_HPP_ +#include +#endif + +class Requirements : public Array +{ +public: + Requirements(void); + Requirements(Block ¬es); + virtual ~Requirements(); + bool satisfyRequirements(NotePaths ¬ePaths); + void setRequirements(Block ¬es); +private: + bool satisfyRequirement(NotePath ¬ePath); + bool haveRequirement(const FrettedNote &frettedNote); + bool isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement); +}; + +inline +Requirements::Requirements(void) +{ +} + +inline +Requirements::Requirements(Block ¬es) +{ + setRequirements(notes); +} + +inline +Requirements::~Requirements() +{ +} +#endif diff --git a/guitar/backup/20040219/resource.h b/guitar/backup/20040219/resource.h new file mode 100644 index 0000000..cdf85f9 --- /dev/null +++ b/guitar/backup/20040219/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by guitar.rc +// +#define APPICON 103 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1085 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/guitar/backup/20040219/settingsdlg.cpp b/guitar/backup/20040219/settingsdlg.cpp new file mode 100644 index 0000000..d6fc4c0 --- /dev/null +++ b/guitar/backup/20040219/settingsdlg.cpp @@ -0,0 +1,209 @@ +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(void) +{ + mInitHandler.setCallback(this,&SettingsDialog::initHandler); + mCreateHandler.setCallback(this,&SettingsDialog::createHandler); + mCloseHandler.setCallback(this,&SettingsDialog::closeHandler); + mDestroyHandler.setCallback(this,&SettingsDialog::destroyHandler); + mCommandHandler.setCallback(this,&SettingsDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog::SettingsDialog(const SettingsDialog &someSettingsDialog) +{ // private implementation + *this=someSettingsDialog; +} + +SettingsDialog::~SettingsDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog &SettingsDialog::operator=(const SettingsDialog &someSettingsDialog) +{ // private implementation + return *this; +} + +bool SettingsDialog::perform(GUIWindow &parentWindow) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"SETTINGSDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SettingsDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + initialize(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType SettingsDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + apply(); + break; + case SETTINGS_DEFAULTS : + selectDefaults(); + } + return (CallbackData::ReturnType)FALSE; +} + +void SettingsDialog::initialize(void) +{ + Registry registry; + + sendMessage(SETTINGS_INSTRUMENT,CB_RESETCONTENT,0,0L); + for(int index=0;index deviceNames; + int currentSelection=-1; + + MIDIOutputDevice::getDeviceNames(deviceNames); + sendMessage(SETTINGS_MIDIOUT,CB_RESETCONTENT,0,0L); + deviceNames.insert(&String("MIDIMAPPER")); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class SettingsDialog : public DWindow +{ +public: + SettingsDialog(void); + virtual ~SettingsDialog(); + bool perform(GUIWindow &parentWindow); +private: + SettingsDialog(const SettingsDialog &someSettingsDialog); + SettingsDialog &operator=(const SettingsDialog &someSettingsDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void initialize(void); + void selectInstrument(Instrument instrument); + void selectDefaults(void); + void selectTiming(int timing); + void selectAction(bool action); + void selectShowNotes(bool showNotes); + void selectMIDIOutputDevice(const String &midiOutputDevice); + String getMIDIOutputDevice(void); + Instrument getInstrument(void); + bool getShowNotes(void); + bool getAction(void); + int getTiming(void); + void apply(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Instruments mInstruments; + Point mDisplayPoint; +}; +#endif diff --git a/guitar/backup/20040219/splash.cpp b/guitar/backup/20040219/splash.cpp new file mode 100644 index 0000000..5d5c336 --- /dev/null +++ b/guitar/backup/20040219/splash.cpp @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mStrTitle(strTitle), mTimeout(timeout), + mTextFont("Helv",8,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mLeftButtonHandler.setCallback(this,&SplashScreen::leftButtonHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|0x04|WS_CLIPSIBLINGS|WS_DLGFRAME; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)"Splash",style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::leftButtonHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIB24(); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->create(mResBitmap->width(),mResBitmap->height(),*mPureDevice); + mDIBitmap->copyBits(*mResBitmap); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + WinInfo winInfo; + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + mDIBitmap->bitBlt(pureDevice,Rect(0,0,width(),height()),Point()); + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); + pureDevice.textOut(5,200,mStrCaption); + showLicense(pureDevice); + + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(1,60,String("Windows version:")+winInfo.strProductName()+String(" ")+winInfo.strVersion()); // add 15 + pureDevice.textOut(1,75,String("Registered owner:")+winInfo.strRegisteredOwner()); + pureDevice.textOut(1,90,String("OEM:")+winInfo.strProductID()); + + if(!mStrTitle.isNull()) + { + Font mFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold); + pureDevice.select((GDIObj)mFont,TRUE); + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(12,10,mStrTitle); + pureDevice.select((GDIObj)mFont,FALSE); + } + return (CallbackData::ReturnType)FALSE; +} + +void SplashScreen::showLicense(PureDevice &pureDevice) +{ + pureDevice.setTextColor(RGBColor(255,255,255)); + if(Registration::getInstance().hasLicense()) + { + License license; + Registration::getInstance().getLicense(license); + if(license.isValid()) + { +// if(license.isExpiring())pureDevice.textOut(1,250,String("License will expire in ")+String().fromInt(license.getRemainingDays())+String(" days.")); +// if(license.isExpiring())pureDevice.textOut(1,250,String("You are on day ")+String().fromInt(license.getDay())+String(" of your ")+String().fromInt(license.getDayCount())+String(" day license.")); + if(license.isExpiring())pureDevice.textOut(1,250,String("This version of TabMaster requires a permanent license.")); + else pureDevice.textOut(1,250,"Permanent license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} diff --git a/guitar/backup/20040219/splash.hpp b/guitar/backup/20040219/splash.hpp new file mode 100644 index 0000000..2b3066d --- /dev/null +++ b/guitar/backup/20040219/splash.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_SPLASHSCREEN_HPP_ +#define _GUITAR_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIB24; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=5000}; + SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + void showLicense(PureDevice &pureDevice); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + Callback mLeftButtonHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mStrTitle; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040219/tabdlg.cpp b/guitar/backup/20040219/tabdlg.cpp new file mode 100644 index 0000000..f23a2c8 --- /dev/null +++ b/guitar/backup/20040219/tabdlg.cpp @@ -0,0 +1,151 @@ +#include +#include +#include + +TabDialog::TabDialog(void) +: mCurrEntryIndex(0) +{ + mInitHandler.setCallback(this,&TabDialog::initHandler); + mCreateHandler.setCallback(this,&TabDialog::createHandler); + mCloseHandler.setCallback(this,&TabDialog::closeHandler); + mDestroyHandler.setCallback(this,&TabDialog::destroyHandler); + mCommandHandler.setCallback(this,&TabDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog::TabDialog(const TabDialog &someTabDialog) +{ // private implementation + *this=someTabDialog; +} + +TabDialog::~TabDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog &TabDialog::operator=(const TabDialog &someTabDialog) +{ // private implementation + return *this; +} + +bool TabDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + return ::DialogBoxParam(processInstance(),(LPSTR)"TABDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType TabDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mTabEntryList=::new OwnerDrawListAltColor(*this,getItem(TABENTRY_LIST),TABENTRY_LIST); + mTabEntryList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(15)); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(50)); + mTabEntryList->setTabStops(stops); + setTypes(); + + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexinsertString(strLine); + } + mTabEntryList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void TabDialog::setTypes() +{ + Array notes; + sendMessage(TABENTRY_NOTETYPE,CB_RESETCONTENT,0,0L); + notes=NoteType::enumerate(); + int currSel=-1; + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); + } +} + + + + + diff --git a/guitar/backup/20040219/tabdlg.hpp b/guitar/backup/20040219/tabdlg.hpp new file mode 100644 index 0000000..e5a79e4 --- /dev/null +++ b/guitar/backup/20040219/tabdlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_TABDLG_HPP_ +#define _GUITAR_TABDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class TabDialog : public DWindow +{ +public: + TabDialog(void); + virtual ~TabDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex); +private: + TabDialog(const TabDialog &someTabDialog); + TabDialog &operator=(const TabDialog &someTabDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTypes(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + SmartPointer mTabEntryList; +}; +#endif diff --git a/guitar/backup/20040219/tablature.cpp b/guitar/backup/20040219/tablature.cpp new file mode 100644 index 0000000..4e111c3 --- /dev/null +++ b/guitar/backup/20040219/tablature.cpp @@ -0,0 +1,417 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TabEntries &Tablature::getTabEntries(void)const +{ + return mTabEntries; +} + +void Tablature::setTabEntries(const TabEntries &entries) +{ + mTabEntries.remove(); + for(int index=0;index=mTabEntries.size()) + { + GlobalDefs::outDebug("[Tablature::setTypeAt] index out of bounds : "+String().fromInt(index)); + return false; + } + mTabEntries[index].setNoteType(noteType); + return true; +} + +bool Tablature::open(const String &pathFileTablature) +{ + mLastError=None; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=pathFileTablature.betweenString(0,'.')+String(STRING_PRJEXTENSION); + if(!loadTabFile(pathFileTablature))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + return true; +} + +bool Tablature::import(String pathFileTablature) +{ + mLastError=None; + String strExtension; + String pathFileTablatureImport; + + pathFileTablatureImport=pathFileTablature; + strExtension=Profile::getExtension(pathFileTablature); + strExtension.lower(); + if(strExtension.isNull()||!(strExtension==String(STRING_TABEXTENSION)))return false; + pathFileTablature=Profile::removeExtension(pathFileTablature); + pathFileTablature+=String("_imp")+strExtension; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=getPathFileProject(pathFileTablatureImport); + if(!loadTabFile(pathFileTablatureImport))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + saveAs(pathFileTablature); + return true; +} + +String Tablature::getPathFileProject(const String &pathFileTablature) +{ + return Profile::removeExtension(pathFileTablature)+String(STRING_PRJEXTENSION); +} + +bool Tablature::saveAs(const String &pathFileTablature) +{ + TabWriter tabWriter; + if(pathFileTablature.isNull())return false; + return tabWriter.write(mTabEntries,pathFileTablature); +} + +bool Tablature::save(void) +{ + if(mPathFileTablature.isNull())return false; + return saveAs(mPathFileTablature); +} + +bool Tablature::openProject(const String &pathFileName) +{ + DiskInfo diskInfo; + File inFile; + String strLine; + String strDirectory; + + mPathFileProject=pathFileName; + strDirectory=mPathFileProject; + Profile::makeDirectoryName(strDirectory); + if(!diskInfo.setCurrentDirectory(strDirectory)||!inFile.open(pathFileName)) + { + mLastError=FileOpenError; + return false; + } + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + MessageBox::messageBox("Project does not contain a reference to any tablature.",strLine); + return false; + } + if(!open(strLine))return false; + while(inFile.readLine(strLine)) + { + if(strLine.betweenString(0,'=')==String("TYPES"))parseTypes(strLine); + else if(strLine.betweenString(0,'=')==String("RANGE"))parseRange(strLine); + } + return true; +} + +bool Tablature::saveProject(const String &pathFileName) +{ + File outFile; + + if(!pathFileName.isNull())mPathFileProject=pathFileName; + if(mPathFileProject.isNull())return false; + if(!outFile.open(mPathFileProject,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mPathFileName.isNull())mPathFileName=Profile::removeExtension(mPathFileProject)+String(STRING_TABEXTENSION); + outFile.writeLine(String("TABLATURE=")+mPathFileName); + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;indexlength)continue; + if(isTabLine(strLine,startElement)) + { + mTablature.insert(&TabLines()); + TabLines &tabLines=mTablature[mTablature.size()-1]; + tabLines[0]=strLine.substr(startElement); + for(int string=1;string<6;string++,line++) + { + if(!inFile.readLine(strLine))break; + tabLines[string]=strLine.substr(startElement); + } + } + } + GlobalDefs::outDebug(String("[Tablature::loadTabFile] ")+String().fromInt(mTablature.size())+String(" tabs, in ")+String().fromInt((::GetTickCount()-elapsedTime)/1000)+String(" seconds.")); + if(mTablature.size())return true; + mLastError=NoTabsParsedError; + return false; +} + +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0; + char charAt1; + char charAt2; + char charAt3; + char charAt4; + char lastChar; + + if(!lineLength)return false; + charAt0=lineLength?strLine.charAt(0):0; + charAt1=lineLength>=1?strLine.charAt(1):0; + charAt2=lineLength>=2?strLine.charAt(2):0; + charAt3=lineLength>=3?strLine.charAt(3):0; + charAt4=lineLength>=4?strLine.charAt(4):0; + lastChar=lineLength?strLine.charAt(lineLength-1):0; + + if((charAt0=='e'||charAt0=='E')&&(charAt1==':'||charAt1=='|')) + { + startElement=2; + return true; + } + if(charAt0=='|'&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==':'&&(::isalnum(charAt1)||charAt1=='-')) + { + startElement=1; + return true; + } + if(charAt0==':'&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0=='-') + { + startElement=0; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' '&&charAt4=='|') + { + startElement=5; + return true; + } + if(charAt0==' '&&charAt1=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='I'&&charAt3=='-') + { + startElement=3; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==']'&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==':'&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(::isdigit(charAt0)&&(lastChar=='-'||lastChar=='|')) + { + startElement=0; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2==' '&&charAt3=='|') + { + startElement=3; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' ') + { + startElement=4; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&(charAt2=='|'||charAt2=='+')&&charAt3=='-') + { + startElement=3; + return true; + } + return false; +} diff --git a/guitar/backup/20040219/tabpage.cpp b/guitar/backup/20040219/tabpage.cpp new file mode 100644 index 0000000..1dad4f9 --- /dev/null +++ b/guitar/backup/20040219/tabpage.cpp @@ -0,0 +1,1019 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TabPage::TabPage(ViewWindow &parent) +: mItemsPerTab(0), mNumTabs(0), mCharWidth(0), mOutlinePen(RGBColor(0,0,0),Pen::PDot) , + mDrawFont("Courier New",10), mHasFocus(false), mIsCancelled(false), mIsInPlay(false), + mIsPaused(false), mIsDirty(false), mKeepOutline(false), mCurrEntryIndex(0), mIsInSetRange(false) +{ + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + mSizeHandler.setCallback(this,&TabPage::sizeHandler); + mPaintHandler.setCallback(this,&TabPage::paintHandler); + mVerticalScrollHandler.setCallback(this,&TabPage::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&TabPage::horizontalScrollHandler); + mLeftButtonUpHandler.setCallback(this,&TabPage::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&TabPage::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&TabPage::mouseMoveHandler); + mKillFocusHandler.setCallback(this,&TabPage::killFocusHandler); + mSetFocusHandler.setCallback(this,&TabPage::setFocusHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabPage::leftButtonDoubleHandler); + mKeyDownHandler.setCallback(this,&TabPage::keyDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent=&parent; + mParent.disposition(PointerDisposition::Assume); + mScrollInfo.hwndOwner(parent); + createBitmap(parent); +} + +TabPage::TabPage(const TabPage &/*someTabPage*/) +{ // private implementation +} + +TabPage::~TabPage() +{ + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); +} + +bool TabPage::insert(const TabEntry &entry,bool setDirty) +{ + TabEntries entries; + entries.insert(&entry); + return insert(entries,setDirty); +} + +bool TabPage::insert(const TabEntries &entries,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabEntries",GlobalDefs::Debug); + if(!entries.size())return false; + for(int index=0;indexinvalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +bool TabPage::insert(const TabRanges &ranges,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabRanges",GlobalDefs::Debug); + if(!ranges.size())return false; + for(int index=0;indexsetBits(BkColorBits); + drawTabPage(); + drawEntries(); + cursorControl.waitCursor(false); + mScrollInfo.scrollableObjectDimensions(mDIBitmap->width(),mDIBitmap->height()); + elapsedTime=(::GetTickCount()-elapsedTime)/1000; + GlobalDefs::outDebug(String("[TabPage::createBitmap]took ")+String().fromInt(elapsedTime)+String(" seconds."),GlobalDefs::Debug); + return mDIBitmap.isOkay(); +} + +bool TabPage::drawEntries(const RGBColor &rgbColor) +{ + Point p1; + Point p2; + String strFret; + Registry registry; + bool showAction(registry.getShowAction()); + + if(!isOkay())return false; + GlobalDefs::outDebug(String("[TabPage::drawEntries]"),GlobalDefs::Debug); + PureDevice &pureDevice=mDIBitmap->getDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + for(int entryIndex=0;entryIndexgetDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + Point p1=getEntryPoint(entryIndex); + Point p2; + TabEntry &entry=mTabEntries[entryIndex]; + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} + +bool TabPage::clearUpdate(void) +{ + GlobalDefs::outDebug(String("[TabPage::clearUpdate]"),GlobalDefs::Debug); + if(!isOkay())return false; + if(!mOverlay.isOkay())return false; + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + mOverlay.destroy(); + return true; +} + +bool TabPage::getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(outlineRect.ptInRect(mousePoint)) + { + entryIndex=index; + return true; + } + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getNearestString(const Point &clickPoint,int &nearestString) +{ + Rect outlineRect; + map distanceMap; + + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return false; + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + distanceMap[abs(clickPoint.y()-outlineRect.top())]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=1; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=0; + nearestString=(*distanceMap.begin()).second; + return true; +} + +Point TabPage::getEntryPoint(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getEntryPoint]"),GlobalDefs::Debug); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return xyPoint; +} + +bool TabPage::showCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + mOverlay.destroy(); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + isInOutline(true); + mParent->clientRect(clientRect); + bringOutlineIntoView(outlineRect,clientRect); + this->outlineRect(outlineRect); + showFretEntry(mTabEntries[mCurrEntryIndex]); + return true; +} + +bool TabPage::drawTabPage(void) +{ + int yStart=TopMargin; + int xStart=0; + int elapsedTime; + + GlobalDefs::outDebug(String("[TabPage::drawTabPage]"),GlobalDefs::Debug); + elapsedTime=::GetTickCount(); + if(!getNumTabs())drawTab(LeftMargin,RightMargin,xStart,yStart,TabSpacing,TabLines); // draw at least one + for(int index=0;indexline(Point(marginLeft-1,yStart),Point(marginLeft-1,1+yStart+((lineCount-1)*spacing)),TabLineColor); + for(int line=0;lineline(Point(xPos,yPos),Point(mDIBitmap->width()-marginRight,yPos),TabLineColor); + yPos+=spacing; + } + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point(mDIBitmap->width()-marginRight,1+yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point((mDIBitmap->width()-marginRight)+2,yStart),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart+((lineCount-1)*spacing)),Point((mDIBitmap->width()-marginRight)+2,yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point((mDIBitmap->width()-marginRight)+2,yStart),Point((mDIBitmap->width()-marginRight)+2,1+yStart+((lineCount-1)*spacing)),TabLineColor); + return yStart+((lineCount-1)*spacing); +} + +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + + GlobalDefs::outDebug(String("[TabPage::getDimensions]"),GlobalDefs::Debug); + setItemsPerTab(((guiWindow.width())-(RightMargin+LeftMargin))/getCharWidth()); + setNumTabs((mTabEntries.size()/getItemsPerTab())); + setNumTabs(getNumTabs()+(mTabEntries.size()%getItemsPerTab()?1:0)); + if(!getNumTabs())gdiPoint.y(TopMargin+((TabHeight+TabSeparator))); + else gdiPoint.y(TopMargin+(getNumTabs()*(TabHeight+TabSeparator))); + gdiPoint.x(guiWindow.width()); + GlobalDefs::outDebug(String("[TabPage::getDimensions]ItemsPerTab:")+String().fromInt(getItemsPerTab())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]NumTabs:")+String().fromInt(getNumTabs())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]AvgCharWidth:")+String().fromInt(getCharWidth())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmWidth:")+String().fromInt(gdiPoint.x())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmHeight:")+String().fromInt(gdiPoint.y())); + return getNumTabs(); +} + +int TabPage::getWidestEntry(PureDevice &pureDevice)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + GlobalDefs::outDebug(String("[TabPage::getWidestEntry]"),GlobalDefs::Debug); + if(!mTabEntries.size())return MinCharWidth; + widestEntry=0; + for(int entryIndex=0;entryIndexwidestEntry)widestEntry=sizeStruct.cx; + } + } + return widestEntry*2; +} + +void TabPage::bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + GlobalDefs::outDebug(String("[TabPage::bitBlt]"),GlobalDefs::Debug); + if(!mDIBitmap.isOkay())return; + mDIBitmap->usePalette(pureDevice,true); // the usePalette code can be removed... + mDIBitmap->bitBlt(pureDevice,dstRect,srcPoint); // but needs test on Win '98 first + mDIBitmap->usePalette(pureDevice,false); +} + +void TabPage::invalidate(Rect rect) +{ + GlobalDefs::outDebug(String("[TabPage::invalidate]"),GlobalDefs::Debug); + rect.left(rect.left()-mScrollInfo.currScrollx()); + rect.top(rect.top()-mScrollInfo.currScrolly()); + rect.right(rect.right()-mScrollInfo.currScrollx()); + rect.bottom(rect.bottom()-mScrollInfo.currScrollx()); + mParent->invalidate(rect,false); +} + +void TabPage::bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect) +{ + GlobalDefs::outDebug(String("[TabPage::bringOutlineIntoView]"),GlobalDefs::Debug); + if(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + while(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + if(!mScrollInfo.pageDown())break; + } + } + else if(outlineRect.top()clientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::play(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::play]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::playFromCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::playFromCurrent]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=mCurrEntryIndex;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +void TabPage::showFretEntry(const TabEntry &entry) +{ + GlobalDefs::outDebug(String("[TabPage::showFretEntry]"),GlobalDefs::Debug); + if(!mPlayNoteHandler.isOkay())return; + CallbackData cbData(CBCommands::FBShowTab,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void TabPage::setStartRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setStartRange]"),GlobalDefs::Debug); + isInSetRange(true); + mCurrRange.setBeginRange(mCurrEntryIndex); +} + +void TabPage::setEndRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setEndRange]"),GlobalDefs::Debug); + isInSetRange(false); + mCurrRange.setEndRange(mCurrEntryIndex); + mCurrRange.autoName(); + mTabRanges.insert(&mCurrRange); + isDirty(true); + GlobalDefs::outDebug(mCurrRange.toString()); +} + +void TabPage::cut(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::cut]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + mParent->enablePaste(true); + if(!mTabEntries.size())mParent->enableCut(false); + showCurrent(); +} + +void TabPage::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::copy]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mParent->enablePaste(true); +} + +bool TabPage::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::paste] Current position is ")+String().fromInt(mCurrEntryIndex),GlobalDefs::Debug); + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return false; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return false; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return false; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return false; + entry.fromString(strText.betweenString(']',0)); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else mTabEntries.insertAfter(mCurrEntryIndex,&entry); + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +// ********************************************************************************************* +// callback handlers + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::sizeHandler]ENTER",GlobalDefs::Verbose); + if(isInPlay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Pausing play...",GlobalDefs::Debug); + isPaused(true); + } + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + if(!sizePoint.x()||!sizePoint.y()) + { + if(isInPlay())isPaused(false); + return false; + } + clearUpdate(); + if(!update(*mParent)) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + + return false; + } + if(!mDIBitmap.isOkay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + return false; + } + if(isInPlay())isPaused(false); + GlobalDefs::outDebug("[TabPage::sizeHandler]LEAVE",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::paintHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::paintHandler]",GlobalDefs::Verbose); + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(!mDIBitmap.isOkay())return false; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + bitBlt(paintDevice,Rect(0,0,getWidth(),getHeight()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + bitBlt(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType TabPage::verticalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::verticalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleVerticalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::horizontalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::horizontalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleHorizontalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDoubleHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + Point mousePoint; + int selectedString; + Rect outlineRect; + int entryIndex; + + mousePoint.x(someCallbackData.loWord()+mScrollInfo.currScrollx()); + mousePoint.y(someCallbackData.hiWord()+mScrollInfo.currScrolly()); + if(!getOutlineRect(mousePoint,entryIndex,outlineRect))return false; + if(!getNearestString(mousePoint,selectedString))return false; + getFretEntry(selectedString); + return false; +} + +bool TabPage::getFretEntry(int selectedString) +{ + FretDialog fretDialog; + bool returnCode=false; + + keepOutline(true); + if((returnCode=fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex))) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return returnCode; +} + +void TabPage::setCursorToTab(void) +{ +/* + Rect outlineRect; + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + ::SetCursorPos((outlineRect.left()+outlineRect.right())/2,(outlineRect.top()+outlineRect.bottom())/2); +*/ +} + +// *************************************************************************************************** +// C A L L B A C K S +// *************************************************************************************************** + +CallbackData::ReturnType TabPage::leftButtonUpHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonUpHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::setFocusHandler]",GlobalDefs::Verbose); + hasFocus(true); + if(Clipboard::hasData(GlobalDefs::getRegisteredClipboardFormat()))mParent->enablePaste(true); + else mParent->enablePaste(false); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new Sequencer(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::killFocusHandler]",GlobalDefs::Verbose); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + isInOutline(false); + clearUpdate(); + } + mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug("[TabPage::mouseMoveHandler]",GlobalDefs::Verbose); + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + mParent->releaseCapture(); + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + mParent->enableCut(true); + mParent->enableCopy(true); + mCurrEntryIndex=entryIndex; + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(Space==keyData.virtualKey()) + { + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + setCursorToTab(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + setCursorToTab(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + clearUpdate(); + showCurrent(); + setCursorToTab(); + } + return false; +} + diff --git a/guitar/backup/20040219/tabpage.hpp b/guitar/backup/20040219/tabpage.hpp new file mode 100644 index 0000000..b34db07 --- /dev/null +++ b/guitar/backup/20040219/tabpage.hpp @@ -0,0 +1,397 @@ +#ifndef _GUITAR_TABPAGE_HPP_ +#define _GUITAR_TABPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _GUITAR_SCROLLINFO_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class GUIWindow; +class ViewWindow; + +class TabPage +{ +public: + TabPage(ViewWindow &parent); + virtual ~TabPage(); + bool insert(const TabEntries &entries,bool setDirty=true); + bool insert(const TabEntry &entry,bool setDirty=true); + bool insert(const TabRanges &ranges,bool setDirty=true); + bool update(GUIWindow &guiWindow); + bool play(void); + bool playRange(int rangeIndex); + bool playFromCurrent(void); + void cut(void); + void copy(void); + bool paste(void); + bool modifyProperties(void); + bool increaseTempo(void); + bool decreaseTempo(void); + bool getCancelled(void)const; + void setCancelled(bool cancelled); + bool isInPlay(void)const; + bool isPaused(void)const; + int getWidth(void)const; + int getHeight(void)const; + const TabEntries &getEntries(void)const; + const TabRanges &getRanges(void)const; + void setRanges(const TabRanges &ranges); + bool hasRange(void)const; + void setPlayNoteHandler(CallbackPointer &callbackPointer); + void setStartRange(void); + void setEndRange(void); + bool isDirty(void)const; + void isDirty(bool isDirty); + bool isInOutline(void)const; + bool isInSetRange(void)const; + void isInSetRange(bool isInSetRange); + void setStatusControlRef(SmartPointer &statusBar); + bool isOkay(void)const; +private: + enum {BkColorBits=255,TabLineColor=0}; + enum {LeftMargin=10,RightMargin=10,TopMargin=10,TabLines=6,TabSpacing=10,TabHeight=TabLines*TabSpacing, + TabSeparator=20,CharSpacing=3,TabClearance=3,MinCharWidth=16}; + enum {RightArrow=0x27,LeftArrow=0x25,DownArrow=0x28,UpArrow=0x26,Insert=0x2D,Home=0x24,End=0x23,Delete=0x2E,Space=0x20}; + TabPage(const TabPage &someTabPage); + TabPage &operator=(const TabPage &someTabPage); + int drawTab(int marginLeft,int marginRight,int xPos,int yPos,int spacing,int lineCount); + void getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const; + void bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + void bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect); + bool drawEntry(int entryIndex,const RGBColor &rgbColor=RGBColor(0,0,0)); + bool getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect); + bool getNearestString(const Point &clickPoint,int &nearestString); + bool drawEntries(const RGBColor &rgbColor=RGBColor(0,0,0)); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool getOutlineRect(int entryIndex,Rect &outlineRect); + int getWidestEntry(PureDevice &pureDevice)const; + bool getFretEntry(int selectedString=0); + bool createBitmap(GUIWindow &someGUIWindow); + bool outlineRect(const Rect &outlineRect); + Point getEntryPoint(int entryIndex); + bool drawTabPage(void); + void setItemsPerTab(int itemsPerTab); + void setNumTabs(int numTabs); + void setCharWidth(int charWidth); + int getNumEntries(void)const; + int getNumTabs(void)const; + int getItemsPerTab(void)const; + int getCharWidth(void)const; + void invalidate(Rect rect); + void isInOutline(bool isInOutline); + bool clearUpdate(void); + bool hasFocus(void)const; + void hasFocus(bool hasFocus); + void isInPlay(bool isInPlay); + void isPaused(bool isPaused); + void showFretEntry(const TabEntry &entry); + void setStatusText(const String &statusText); + void keepOutline(bool keepOutline); + bool keepOutline(void)const; + bool showCurrent(void); + void setCursorToTab(void); + + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mKillFocusHandler; + Callback mSetFocusHandler; + Callback mLeftButtonDoubleHandler; + Callback mKeyDownHandler; + + CallbackPointer mPlayNoteHandler; + TabEntries mTabEntries; + TabRanges mTabRanges; + SmartPointer mDIBitmap; + SmartPointer mOverlay; + SmartPointer mParent; + SmartPointer mMIDIDevice; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + + Rect mPrevOutlineRect; + Pen mOutlinePen; + int mNumTabs; + int mItemsPerTab; + int mCharWidth; + + bool mIsInOutline; + bool mHasFocus; + bool mIsCancelled; + bool mIsInPlay; + bool mIsPaused; + bool mIsDirty; + bool mKeepOutline; + + bool mIsInSetRange; + Range mCurrRange; + int mCurrEntryIndex; + Font mDrawFont; +}; + +inline +TabPage &TabPage::operator=(const TabPage &/*someTabPage*/) +{ // private implementation + return *this; +} + +inline +int TabPage::getNumEntries(void)const +{ + return mTabEntries.size(); +} + +inline +void TabPage::getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const +{ + pureDevice.getTextExtentPoint32(((String&)string).str(),&sizeStruct); +} + +inline +int TabPage::getWidth(void)const +{ + return ((SmartPointer&)mDIBitmap)->width(); +} + +inline +int TabPage::getHeight(void)const +{ + return ((SmartPointer&)mDIBitmap)->height(); +} + +inline +int TabPage::getNumTabs(void)const +{ + return mNumTabs; +} + +inline +void TabPage::setNumTabs(int numTabs) +{ + mNumTabs=numTabs; +} + +inline +int TabPage::getCharWidth(void)const +{ + return mCharWidth; +} + +inline +void TabPage::setCharWidth(int charWidth) +{ + mCharWidth=charWidth; +} + +inline +int TabPage::getItemsPerTab(void)const +{ + return mItemsPerTab; +} + +inline +void TabPage::setItemsPerTab(int itemsPerTab) +{ + mItemsPerTab=itemsPerTab; +} + +inline +void TabPage::isInOutline(bool isInOutline) +{ + mIsInOutline=isInOutline; +} + +inline +bool TabPage::isInOutline(void)const +{ + return mIsInOutline; +} + +inline +bool TabPage::hasFocus(void)const +{ + return mHasFocus; +} + +inline +void TabPage::hasFocus(bool hasFocus) +{ + mHasFocus=hasFocus; +} + +inline +bool TabPage::getCancelled(void)const +{ + return mIsCancelled; +} + +inline +void TabPage::setCancelled(bool cancelled) +{ + mIsCancelled=cancelled; +} + +inline +bool TabPage::isInPlay(void)const +{ + return mIsInPlay; +} + +inline +void TabPage::isInPlay(bool isInPlay) +{ + mIsInPlay=isInPlay; +} + +inline +bool TabPage::isPaused(void)const +{ + return mIsPaused; +} + +inline +void TabPage::isPaused(bool isPaused) +{ + mIsPaused=isPaused; +} + +inline +void TabPage::setPlayNoteHandler(CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; +} + +inline +const TabEntries &TabPage::getEntries(void)const +{ + return mTabEntries; +} + +inline +const TabRanges &TabPage::getRanges(void)const +{ + return mTabRanges; +} + +inline +bool TabPage::hasRange(void)const +{ + return mTabRanges.size()?true:false; +} + +inline +bool TabPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void TabPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +void TabPage::keepOutline(bool keepOutline) +{ + GlobalDefs::outDebug(String("[TabPage::keepOutline]")+(keepOutline?String("true"):String("false")),GlobalDefs::Debug); + mKeepOutline=keepOutline; +} + +inline +bool TabPage::keepOutline(void)const +{ + return mKeepOutline; +} + +inline +bool TabPage::isInSetRange(void)const +{ + return mIsInSetRange; +} + +inline +void TabPage::isInSetRange(bool isInSetRange) +{ + mIsInSetRange=isInSetRange; +} + +inline +void TabPage::setRanges(const TabRanges &ranges) +{ + mTabRanges=ranges; + isDirty(true); +} + +inline +void TabPage::setStatusText(const String &statusText) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(statusText); +} + +inline +void TabPage::setStatusControlRef(SmartPointer &statusBar) +{ + mStatusBar=statusBar; +} + +inline +bool TabPage::isOkay(void)const +{ + return mTabEntries.size()&&mDIBitmap.isOkay(); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040219/uutool.cpp b/guitar/backup/20040219/uutool.cpp new file mode 100644 index 0000000..18cd678 --- /dev/null +++ b/guitar/backup/20040219/uutool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + diff --git a/guitar/backup/20040219/uutool.hpp b/guitar/backup/20040219/uutool.hpp new file mode 100644 index 0000000..55f5595 --- /dev/null +++ b/guitar/backup/20040219/uutool.hpp @@ -0,0 +1,44 @@ +#ifndef _GUITAR_UUTOOL_HPP_ +#define _GUITAR_UUTOOL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#include + +class String; + +class UUTool +{ +public: + static String encode(String strLine); + static String decode(String strLine); +private: + UUTool(void); + virtual ~UUTool(); + static BYTE chEncode(int ch); + static BYTE chDecode(int ch); +}; + +inline +UUTool::UUTool(void) +{ +} + +inline +UUTool::~UUTool() +{ +} + +inline +BYTE UUTool::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} + +inline +BYTE UUTool::chDecode(int ch) +{ + return (ch-' ')&0x3F; +} +#endif diff --git a/guitar/backup/20040219/viewwnd.cpp b/guitar/backup/20040219/viewwnd.cpp new file mode 100644 index 0000000..8c385a8 --- /dev/null +++ b/guitar/backup/20040219/viewwnd.cpp @@ -0,0 +1,551 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ + mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ + mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +bool ViewWindow::insert(const TabEntry &entry) +{ + return mTabPage->insert(entry); +} + +bool ViewWindow::insert(const TabEntries &entries) +{ + if(!mTabPage->insert(entries))return false; + invalidate(); + mTabPage->isDirty(true); + return true; +} + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries()); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); // don't set the dirty flag when loading + if(mTabPage->insert(mTablature.getTabRanges(),false)) // don't set the dirty flag when loading + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + if(THPlay==threadMessage.userDataOne())thPlay(); + else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); + else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.hCursor=::LoadCursor(processInstance(),MAKEINTRESOURCE(HARROW)); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20040219/viewwnd.hpp b/guitar/backup/20040219/viewwnd.hpp new file mode 100644 index 0000000..f4b9e40 --- /dev/null +++ b/guitar/backup/20040219/viewwnd.hpp @@ -0,0 +1,153 @@ +#ifndef _GUITAR_VIEWWINDOW_HPP_ +#define _GUITAR_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _GUITAR_TABPAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class GUIFretboard; +class StatusBarEx; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + friend class TabPage; + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); + void setFretboardHandler(CallbackPointer &callbackPointer); + bool createProject(const String &strPathTabFile); + bool createProject(void); + bool openProject(const String &pathFileName); + bool saveProject(const String &pathFileName); + bool saveProject(void); + void play(void); + void playFromCurrent(void); + void stopPlay(void); + void playRepeated(void); + void playRange(int rangeIndex); + void playRangeRepeated(int rangeIndex); + void cut(void); + void copy(void); + void paste(void); + void modifyProperties(void); + void setStartRange(void); + void setEndRange(void); + bool getTabRanges(TabRanges &ranges); + void setTabRanges(const TabRanges &ranges); + const TabEntries &getEntries(void)const; + bool insert(const TabEntry &entry); + bool insert(const TabEntries &entries); + int getNumTabEntries(void)const; + void increaseTempo(void); + void decreaseTempo(void); + String getTitle(void)const; + const String &getPathFileProject(void)const; + void setStatusControlRef(SmartPointer &statusBar); + bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); + void enablePlaySelect(bool enable); + void enableStopSelect(bool enable); + void enableCut(bool enable); + void enableCopy(bool enable); + void enablePaste(bool enable); + bool getEnableCut(void); + bool getEnableCopy(void); + bool getEnablePaste(void); + bool isInRepeatPlay(void)const; + void isInRepeatPlay(bool isInRepeatPlay); + bool getProjectName(String &strPathFileProject); + void thPlay(void); + void thPlayFromCurrent(void); + void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + SmartPointer mTabPage; + SmartPointer mMIDIDevice; + Tablature mTablature; + bool mIsInRepeatPlay; +}; + +inline +const TabEntries &ViewWindow::getEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries(); +} + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +#endif + + diff --git a/guitar/backup/20040219/wininfo.hpp b/guitar/backup/20040219/wininfo.hpp new file mode 100644 index 0000000..373014d --- /dev/null +++ b/guitar/backup/20040219/wininfo.hpp @@ -0,0 +1,85 @@ +#ifndef _GUITAR_WININFO_HPP_ +#define _GUITAR_WININFO_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WinInfo +{ +public: + WinInfo(void); + virtual ~WinInfo(); + void refresh(void); + const String &strProductName(void)const; + const String &strRegisteredOwner(void)const; + const String &strProductID(void)const; + const String &strVersion(void)const; +private: + String mStrProductName; + String mStrRegisteredOwner; + String mStrProductID; + String mStrVersion; +}; + +inline +WinInfo::WinInfo(void) +{ + refresh(); +} + +inline +WinInfo::~WinInfo() +{ +} + +inline +void WinInfo::refresh(void) +{ + RegKey regKey(RegKey::LocalMachine); + + if(!regKey.openKey("Software\\Microsoft\\Windows\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + if(!mStrProductName.isNull()) + { + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } + else + { + RegKey regKey(RegKey::LocalMachine); + if(!regKey.openKey("Software\\Microsoft\\Windows NT\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } +} + +inline +const String &WinInfo::strProductName(void)const +{ + return mStrProductName; +} + +inline +const String &WinInfo::strRegisteredOwner(void)const +{ + return mStrRegisteredOwner; +} + +inline +const String &WinInfo::strProductID(void)const +{ + return mStrProductID; +} + +inline +const String &WinInfo::strVersion(void)const +{ + return mStrVersion; +} +#endif diff --git a/guitar/backup/20040302/Action.hpp b/guitar/backup/20040302/Action.hpp new file mode 100644 index 0000000..46afb7f --- /dev/null +++ b/guitar/backup/20040302/Action.hpp @@ -0,0 +1,155 @@ +#ifndef _GUITAR_ACTION_HPP_ +#define _GUITAR_ACTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Action +{ +public: + typedef enum Attribute{None,Pick,PullOff,Bend,HammerOn,Release,SlideDown,SlideUp}; + Action(); + Action(Attribute action); + Action(const String &strAction); + virtual ~Action(); + Attribute getAction(void)const; + void setAction(Attribute action); + String toString(void)const; + const Action &fromString(const String &string); + String toStringShort(void)const; + static Array enumerate(void); +private: + Attribute mAction; +}; + +inline +Action::Action() +: mAction(None) +{ +} + +inline +Action::Action(Attribute action) +: mAction(action) +{ +} + +inline +Action::Action(const String &strAction) +{ + fromString(strAction); +} + +inline +Action::~Action() +{ +} + +inline +Action::Attribute Action::getAction(void)const +{ + return mAction; +} + +inline +void Action::setAction(Attribute action) +{ + mAction=action; +} + +inline +String Action::toStringShort(void)const +{ + switch(mAction) + { + case PullOff : + return "p"; + break; + case Bend : + return "b"; + break; + case HammerOn : + return "h"; + break; + case Release : + return "r"; + break; + case SlideDown : + return "s"; + break; + case SlideUp : + return "s"; + break; + case Pick : + case None : + default : + return ""; + break; + } +} + +inline +String Action::toString(void)const +{ + switch(mAction) + { + case Pick : + return "Pick"; + break; + case PullOff : + return "PullOff"; + break; + case Bend : + return "Bend"; + break; + case HammerOn : + return "HammerOn"; + break; + case Release : + return "Release"; + break; + case SlideDown : + return "SlideDown"; + break; + case SlideUp : + return "SlideUp"; + break; + case None : + default : + return "None"; + break; + } +} + +inline +const Action &Action::fromString(const String &string) +{ + if(string=="Pick")mAction=Pick; + else if(string=="PullOff")mAction=PullOff; + else if(string=="Bend")mAction=Bend; + else if(string=="HammerOn")mAction=HammerOn; + else if(string=="Release")mAction=Release; + else if(string=="SlideDown")mAction=SlideDown; + else if(string=="SlideUp")mAction=SlideUp; + else mAction=None; + return *this; +} + +inline +Array Action::enumerate(void) +{ + Array actions; + actions.size(7); + actions[0]="Pick"; + actions[1]="PullOff"; + actions[2]="Bend"; + actions[3]="HammerOn"; + actions[4]="Release"; + actions[5]="SlideDown"; + actions[6]="SlideUp"; + return actions; +} +#endif diff --git a/guitar/backup/20040302/BrowserHelper.cpp b/guitar/backup/20040302/BrowserHelper.cpp new file mode 100644 index 0000000..c5be31c --- /dev/null +++ b/guitar/backup/20040302/BrowserHelper.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +bool BrowserHelper::launchBrowser(const String &strCommand) +{ + String strBrowser; + Process process; + + if(!getBrowser(strBrowser))return false; + process.createProcess(strBrowser,String(" ")+strCommand,false); + return true; +} + +bool BrowserHelper::getBrowser(String &strBrowser) +{ + RegKey regKey(RegKey::LocalMachine); + String strCommand; + int argPos; + + if(!regKey.openKey(String(STRING_BROWSERKEY))) + { + if(!regKey.openKey(String(STRING_BROWSERKEYALT)))return false; + } + if(!regKey.enumValue(0,String(STRING_BROWSERCOMMAND),strCommand)||strCommand.isNull()||!strCommand.length()) + return false; + strCommand.removeTokens("'\""); + if(-1!=(argPos=strCommand.strpos("-")))strCommand=strCommand.substr(0,argPos-1); + strBrowser=strCommand; + return true; +} diff --git a/guitar/backup/20040302/BrowserHelper.hpp b/guitar/backup/20040302/BrowserHelper.hpp new file mode 100644 index 0000000..99d2945 --- /dev/null +++ b/guitar/backup/20040302/BrowserHelper.hpp @@ -0,0 +1,20 @@ +#ifndef _GUITAR_BROWSERHELPER_HPP_ +#define _GUITAR_BROWSERHELPER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class BrowserHelper +{ +public: + static bool getBrowser(String &strBrowser); + static bool launchBrowser(const String &strCommand); +private: + BrowserHelper(); +}; + +inline +BrowserHelper::BrowserHelper() +{ +} +#endif diff --git a/guitar/backup/20040302/CBCommands.hpp b/guitar/backup/20040302/CBCommands.hpp new file mode 100644 index 0000000..68b9e0d --- /dev/null +++ b/guitar/backup/20040302/CBCommands.hpp @@ -0,0 +1,16 @@ +#ifndef _GUITAR_CBCOMMANDS_HPP_ +#define _GUITAR_CBCOMMANDS_HPP_ + +class CBCommands +{ +public: + typedef enum CBCommand{FBShowTab=0,FBPlayNote=1,FBPlayScale=2,FBPlayFrettedNotes=3,FBPlayChord=4,FBPlayTab=5,FBShowScale=6}; +private: + CBCommands(); +}; + +inline +CBCommands::CBCommands() +{ +} +#endif diff --git a/guitar/backup/20040302/ChordBuilderDialog.cpp b/guitar/backup/20040302/ChordBuilderDialog.cpp new file mode 100644 index 0000000..064ce93 --- /dev/null +++ b/guitar/backup/20040302/ChordBuilderDialog.cpp @@ -0,0 +1,160 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Music; + +ChordBuilderDialog::ChordBuilderDialog(void) +{ + mInitHandler.setCallback(this,&ChordBuilderDialog::initHandler); + mCreateHandler.setCallback(this,&ChordBuilderDialog::createHandler); + mCloseHandler.setCallback(this,&ChordBuilderDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordBuilderDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordBuilderDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog::ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + *this=someChordBuilderDialog; +} + +ChordBuilderDialog::~ChordBuilderDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordBuilderDialog &ChordBuilderDialog::operator=(const ChordBuilderDialog &someChordBuilderDialog) +{ // private implementation + return *this; +} + +bool ChordBuilderDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDBUILDERDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordBuilderDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordBuilderDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordBuilderDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(handleChordSelection())endDialog(true); + else MessageBox::messageBox("Unable to parse chord.","Please check parameters (parser is case sensitive)"); + break; + case ENTERCHORD_EXAMPLES : + handleShowExamples(); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +bool ChordBuilderDialog::handleChordSelection(void) +{ + ChordCompiler chordCompiler; + Music::Chord chord; + String strChord; + + strChord=getText(ENTERCHORD_EDIT); + if(!chordCompiler.compile(strChord,chord))return false; + CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&chord); + mPlayNoteHandler.callback(cbData); + return true; +} + +void ChordBuilderDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + +void ChordBuilderDialog::handleShowExamples() +{ + StringBuffer stringBuffer; + String crlf("\n"); + + stringBuffer.append("\"C^\" - C Major 7th ").append(crlf); + stringBuffer.append("\"Db^\" - D Flat Major 7th").append(crlf); + stringBuffer.append("\"C^#4\" - C Major 7th- sharp 4").append(crlf); + stringBuffer.append("\"D7\" - D Dominant 7th").append(crlf); + stringBuffer.append("\"D-7\" - D Minor 7th").append(crlf); + stringBuffer.append("\"Cb7#9\" - C Flat 7th - sharp 9").append(crlf); + stringBuffer.append("\"Eb-7\" - E Flat Minor 7th").append(crlf); + stringBuffer.append("\"G-\" - G Minor").append(crlf); + stringBuffer.append("\"Ab7\" - A Flat Dominant 7th").append(crlf); + stringBuffer.append("\"F#7\" - F Sharp Major 7th").append(crlf); + stringBuffer.append("\"C7#9\" - C Dominant 7th - sharp 9").append(crlf); + stringBuffer.append("\"Gb^#4\" - G Flat Major 7th - sharp 4").append(crlf); + stringBuffer.append("\"G7#11\" - G Dominant 7th - sharp 11").append(crlf); + stringBuffer.append("\"Ebsus\" - E Flat Sus").append(crlf); + stringBuffer.append("\"Dsusb9\" - D Sus - Flat 9").append(crlf); + stringBuffer.append("\"F#susb9\"- F Sharp Sus - Flat 9").append(crlf); + stringBuffer.append("\"Ebsusb9\"- E Flat Sus - Flat 9").append(crlf); + stringBuffer.append("\"A-b6\" - A Minor - Flat 6").append(crlf); + stringBuffer.append("\"Ao\" - A Half Diminished a.k.a B-7b5").append(crlf); + stringBuffer.append("\"C-#7\" - C Minor - Sharp 7 a.k.a C MinorMajor").append(crlf); + stringBuffer.append("\"C-^\" - C MinorMajor").append(crlf); + MessageBox::messageBox(*this,"Example Chords",stringBuffer.toString()); +} + diff --git a/guitar/backup/20040302/ChordBuilderDialog.hpp b/guitar/backup/20040302/ChordBuilderDialog.hpp new file mode 100644 index 0000000..53becee --- /dev/null +++ b/guitar/backup/20040302/ChordBuilderDialog.hpp @@ -0,0 +1,52 @@ +#ifndef _GUITAR_CHORDBUILDERDLG_HPP_ +#define _GUITAR_CHORDBUILDERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordBuilderDialog : public DWindow +{ +public: + ChordBuilderDialog(void); + virtual ~ChordBuilderDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog); + ChordBuilderDialog &operator=(const ChordBuilderDialog &someChordBuilderDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + void handleShowExamples(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20040302/ChordDlg.cpp b/guitar/backup/20040302/ChordDlg.cpp new file mode 100644 index 0000000..8ae4972 --- /dev/null +++ b/guitar/backup/20040302/ChordDlg.cpp @@ -0,0 +1,144 @@ +#include +#include +#include +#include +#include +#include + +ChordDialog::ChordDialog(void) +{ + mInitHandler.setCallback(this,&ChordDialog::initHandler); + mCreateHandler.setCallback(this,&ChordDialog::createHandler); + mCloseHandler.setCallback(this,&ChordDialog::closeHandler); + mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); + mCommandHandler.setCallback(this,&ChordDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog::ChordDialog(const ChordDialog &someChordDialog) +{ // private implementation + *this=someChordDialog; +} + +ChordDialog::~ChordDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) +{ // private implementation + return *this; +} + +bool ChordDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + Rect clientRect; + mPlayNoteHandler=callbackPointer; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); + mChordList.disposition(PointerDisposition::Delete); + setChordList(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + endDialog(true); + break; + } + if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); + return (CallbackData::ReturnType)FALSE; +} + +void ChordDialog::setChordList(void) +{ + CursorControl cursor; + String strInsert; + + cursor.waitCursor(true); + for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) + { + String strResource(rcIndex); + strInsert=strResource.betweenString(0,'['); + strInsert.trimRight(); + strInsert+=strResource.betweenString(']',0); + mChordList->insertString(strInsert); + } + cursor.waitCursor(false); + setText(CHORDS_COUNT,"chord count:"+String().fromInt(rcIndex-ResBegin)); +} + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); +// CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&entry); + CallbackData cbData(CBCommands::FBPlayTab,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void ChordDialog::makeTabEntry(String strLine,TabEntry &entry) +{ + strLine=strLine.betweenString('[',']'); + if(strLine.isNull())return; + char *ptr=strLine.str(); + + entry.remove(); + for(int string=0;string<6;string++) + { + if(!string)ptr=::strtok(ptr," ]\0"); + else ptr=::strtok(0," ]\0"); + if(String(ptr).equals("x"))continue; + FrettedNote frettedNote; + frettedNote.setString(string); + frettedNote.setFret(::atoi(ptr)); + frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + entry.insert(&frettedNote); + } +} + + + diff --git a/guitar/backup/20040302/ChordDlg.hpp b/guitar/backup/20040302/ChordDlg.hpp new file mode 100644 index 0000000..a21493f --- /dev/null +++ b/guitar/backup/20040302/ChordDlg.hpp @@ -0,0 +1,53 @@ +#ifndef _GUITAR_CHORDDLG_HPP_ +#define _GUITAR_CHORDDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif + +class TabEntry; + +class ChordDialog : public DWindow +{ +public: + ChordDialog(void); + virtual ~ChordDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + enum{ResBegin=21000,ResEnd=21902}; + ChordDialog(const ChordDialog &someChordDialog); + ChordDialog &operator=(const ChordDialog &someChordDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setChordList(void); + void handleChordSelection(void); + void makeTabEntry(String strLine,TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mChordList; + Fretboard mFretboard; + Point mDisplayPoint; + CallbackPointer mPlayNoteHandler; +}; +#endif diff --git a/guitar/backup/20040302/ChordMapper.cpp b/guitar/backup/20040302/ChordMapper.cpp new file mode 100644 index 0000000..d1f986c --- /dev/null +++ b/guitar/backup/20040302/ChordMapper.cpp @@ -0,0 +1,232 @@ +#include + +bool ChordMapper::map(const Music::Chord &chord,Block &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else + { + String message("[Fretboard::getAt] Unable to map note '"+note.toString()+String("'")); + returnCode=false; + } + } + if(!returnCode) + { + isBarChord=false; + returnCode=true; + frettedNotes.remove(); + int noteCount=0; + int chordIndex=2; + int direction=-1; + + + +/* + while(noteCount=chord.size())chordIndex=0; + Note ¬e=((Music::Chord&)chord)[chordIndex]; + if(getAt(Fretboard::Strings-1,-1,note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else returnCode=false; + chordIndex+=direction; + noteCount++; + } +*/ + } + if(isBarChord && frettedNotes.size()) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} + + +/* +* searches for a note mapping starting at given string at fret 0 (note string 0 is the top (6th)string +* takes care of string collisions. +* @param note - The note to find a mapping for. +* @param fretted note - If result is true contains note mapping. +* @param containedNotes - Notes that are already in the mapping, used + to limit selected notes and to minimize distance between notes. +*/ + +bool ChordMapper::getAt(int startingString,int direction,const Note ¬e,FrettedNote &frettedNote,Block &containedNotes) +{ + for(int stringCount=0,srIndex=startingString;stringCount=Fretboard::Strings)srIndex=0; + else if(srIndex<0)srIndex=Fretboard::Strings-1; + for(int frIndex=0;frIndexMaxFretDistance)continue; + return true; + } + } + } + return false; +} + +/* + Get the FrettedNote for the given Note. + @param note - The note we are looking to map. + @param frettedNote - The fretted note we are looking for (get's filled in on success) + @param containedNotes - List of frettednotes we already have (so don't choose any of these). + +*/ +bool ChordMapper::getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes) +{ + for(int srIndex=0;srIndex=Fretboard::Strings)srIndex=0; + for(int frIndex=0;frIndexMaxFretDistance)continue; + return true; + } + } + } + return false; +} + +/* + Returns the greatest distance between fretted note and grouping of notes + Distance is simply fret distance, does not account for string distance + @param frettedNote - The fretted note to get distance. + @param frettedNotes - The collection of notes with which to compare distances +*/ +int ChordMapper::distance(const FrettedNote &frettedNote,Block &frettedNotes) +{ + int maxDistance=0; + int currDistance; + + for(int index=0;indexmaxDistance)maxDistance=currDistance; + } + OutputDebugString(String(String("Distance is :")+String().fromInt(maxDistance)+String("\n")).str()); + return maxDistance; +} + +/* + Return the distance between two fretted notes. +*/ +int ChordMapper::distance(const FrettedNote &firstNote,const FrettedNote &secondNote) +{ + int fretDistance=firstNote.getFret()-secondNote.getFret(); + return fretDistance<0?-fretDistance:fretDistance; +} + +/* + Find filler notes for given chord on given fret on empty string. +*/ +bool ChordMapper::getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes) +{ + bool notesInChord; + for(int stringIndex=0;stringIndex &frettedNotes) +{ + for(int index=0;index=Fretboard::Strings || currentString<0)continue; + if(currentFret>=Fretboard::Frets || currentFret<0)continue; + Note ¬e=mFretboard[currentString][currentFret]; + if(note==srchNote) + { + FrettedNote frettedNote; + frettedNote.setNote(note); + frettedNote.setString(currentString); + frettedNote.setFret(currentFret); + return true; + } + } + } + return false; +} + + + diff --git a/guitar/backup/20040302/ChordMapper.hpp b/guitar/backup/20040302/ChordMapper.hpp new file mode 100644 index 0000000..ec297fa --- /dev/null +++ b/guitar/backup/20040302/ChordMapper.hpp @@ -0,0 +1,47 @@ +#ifndef _CHORDMAPPER_HPP_ +#define _CHORDMAPPER_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class ChordMapper +{ +public: + ChordMapper(); + virtual ~ChordMapper(); + bool map(const Music::Chord &chord,Block &frettedNotes); +private: + enum {MaxFretDistance=4}; // Maximum distance for note spanning across frets + bool getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + bool getAt(int startingString,int direction,const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + int distance(const FrettedNote &frettedNote,Block &frettedNotes); + int distance(const FrettedNote &firstNote,const FrettedNote &secondNote); + bool getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes); + bool contains(const FrettedNote &frettedNote,Block &frettedNotes); + bool isIn(const FrettedNote &frettedNote,const Music::Chord &chord); + + void getNearestNote(const FrettedNote &frettedNote,const Note &srchNote,FrettedNote &foundNote); + bool getNearestNoteInRange(const FrettedNote &frettedNote,const Note &srchNote,FrettedNote &foundNote,int stringOffset,int fretOffset); + + Fretboard mFretboard; +}; + +inline +ChordMapper::ChordMapper() +{ +} + +inline +ChordMapper::~ChordMapper() +{ +} +#endif diff --git a/guitar/backup/20040302/DragQueryFile.hpp b/guitar/backup/20040302/DragQueryFile.hpp new file mode 100644 index 0000000..58d205c --- /dev/null +++ b/guitar/backup/20040302/DragQueryFile.hpp @@ -0,0 +1,39 @@ +#ifndef _COMMON_DRAGQUERYFILE_HPP_ +#define _COMMON_DRAGQUERYFILE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DragQueryFile +{ +public: + static bool getFileNames(HDROP hDrop,Block &strFileNames); +private: +}; + +inline +bool DragQueryFile::getFileNames(HDROP hDrop,Block &strFileNames) +{ + String strBuffer; + UINT numFiles; + + strFileNames.remove(); + strBuffer.reserve(512); + if(0==hDrop)return false; + numFiles=::DragQueryFile(hDrop,0xFFFFFFFF,0,0); + if(!numFiles)return false; + for(int index=0;index +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class Element +{ +public: + Element(); + Element(int fret,Action action=Action::None); + virtual ~Element(); + Action::Attribute getAction(void)const; + void setAction(Action::Attribute action); + void setFret(int fret); + int getFret(void)const; + String toString(void)const; +private: + int mFret; + Action mAction; +}; + +inline +Element::Element() +: mFret(0) +{ +} + +inline +Element::Element(int fret,Action action) +: mFret(fret), mAction(action) +{ +} + +inline +Element::~Element() +{ +} + +inline +Action::Attribute Element::getAction(void)const +{ + return mAction.getAction(); +} + +inline +void Element::setAction(Action::Attribute action) +{ + mAction.setAction(action); +} + +inline +int Element::getFret(void)const +{ + return mFret; +} + +inline +void Element::setFret(int fret) +{ + mFret=fret; +} + +inline +String Element::toString(void)const +{ + return mAction.toString()+String(" ")+String().fromInt(mFret); +} +#endif diff --git a/guitar/backup/20040302/Fingering.cpp b/guitar/backup/20040302/Fingering.cpp new file mode 100644 index 0000000..3c45813 --- /dev/null +++ b/guitar/backup/20040302/Fingering.cpp @@ -0,0 +1,88 @@ +#include +#include + +FrettedNotes Fingering::getFingering(const Scale &scale) +{ + FrettedNotes frettedNotes; + FrettedNote frettedNote; + + frettedNotes.size(scale.size()); + GlobalDefs::outDebug(scale.toString()); + for(int index=0;indexFretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString<0)return false; + } + mCurrFret++; + } + return found; +} + +bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e) +{ + Note tmpNote; + bool found; + + found=false; + GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString()); + if(mCurrFret<0||mCurrString>5)return false; + while(!found) + { + tmpNote=mFretboard.getAt(mCurrString,mCurrFret); + GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString()); + if(tmpNote==note) + { + frettedNote.setString(mCurrString); + frettedNote.setFret(mCurrFret); + frettedNote.setNote(tmpNote); + found=true; + } + if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets) + { + mCurrFret=mAnchorFret-2; + mCurrString++; +// mAnchorFret=mCurrFret; + if(mCurrString>5)return false; + if(mCurrFret<0)mCurrFret=0; + } + if(mCurrFret>Fretboard::Frets) + { + mCurrString++; + mCurrFret=0; + if(mCurrString>5)return false; + } + mCurrFret++; + } + return found; +} diff --git a/guitar/backup/20040302/Fingering.hpp b/guitar/backup/20040302/Fingering.hpp new file mode 100644 index 0000000..88325bc --- /dev/null +++ b/guitar/backup/20040302/Fingering.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_FINGERING_HPP_ +#define _GUITAR_FINGERING_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Fingering +{ +public: + Fingering(); + virtual ~Fingering(); + FrettedNotes getFingering(const Scale &scale); +private: + enum{MaxStretchFrets=4,DefaultString=5}; + bool getFirst(FrettedNote &frettedNote,const Note ¬e); + bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); + int getCurrString(void)const; + void setCurrString(int currString); + int getCurrFret(void)const; + void setCurrFret(int currFret); + + Fretboard mFretboard; + int mMaxStretchFrets; + int mStartString; + int mCurrString; + int mCurrFret; + int mAnchorFret; +}; + +inline +Fingering::Fingering() +: mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) +{ +} + +inline +Fingering::~Fingering() +{ +} + +inline +int Fingering::getCurrString(void)const +{ + return mCurrString; +} + +inline +void Fingering::setCurrString(int currString) +{ + mCurrString=currString; +} + +inline +int Fingering::getCurrFret(void)const +{ + return mCurrFret; +} + +inline +void Fingering::setCurrFret(int currFret) +{ + mCurrFret=currFret; +} +#endif diff --git a/guitar/backup/20040302/Fret.hpp b/guitar/backup/20040302/Fret.hpp new file mode 100644 index 0000000..e450ad5 --- /dev/null +++ b/guitar/backup/20040302/Fret.hpp @@ -0,0 +1,104 @@ +#ifndef _GUITAR_FRET_HPP_ +#define _GUITAR_FRET_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class Fret; +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class Fret +{ +public: + typedef enum FretStatus{Active,Inactive,Hidden}; + Fret(void); + Fret(const Fret &fret); + Fret(const Note ¬e,const Rect &boundingRect); + virtual ~Fret(); + Fret &operator=(const Fret &fret); + const Note &getNote(void)const; + void setNote(const Note ¬e); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + FretStatus getStatus(void)const; + void setStatus(FretStatus status); +private: + Note mNote; + Rect mBoundingRect; + FretStatus mStatus; +}; + +inline +Fret::Fret(void) +: mStatus(Hidden) +{ +} + +inline +Fret::Fret(const Fret &fret) +{ + *this=fret; +} + +inline +Fret::Fret(const Note ¬e,const Rect &boundingRect) +: mNote(note), mBoundingRect(boundingRect) +{ +} + +inline +Fret::~Fret() +{ +} + +inline +Fret &Fret::operator=(const Fret &fret) +{ + setNote(fret.getNote()); + setBoundingRect(fret.getBoundingRect()); + return *this; +} + +inline +const Note &Fret::getNote(void)const +{ + return mNote; +} + +inline +void Fret::setNote(const Note ¬e) +{ + mNote=note; +} + +inline +const Rect &Fret::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void Fret::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +Fret::FretStatus Fret::getStatus(void)const +{ + return mStatus; +} + +inline +void Fret::setStatus(FretStatus status) +{ + mStatus=status; +} +#endif diff --git a/guitar/backup/20040302/FretDlg.cpp b/guitar/backup/20040302/FretDlg.cpp new file mode 100644 index 0000000..8eaf67f --- /dev/null +++ b/guitar/backup/20040302/FretDlg.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +FretDialog::FretDialog(void) +: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1) +{ + mInitHandler.setCallback(this,&FretDialog::initHandler); + mCreateHandler.setCallback(this,&FretDialog::createHandler); + mCloseHandler.setCallback(this,&FretDialog::closeHandler); + mDestroyHandler.setCallback(this,&FretDialog::destroyHandler); + mCommandHandler.setCallback(this,&FretDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog::FretDialog(const FretDialog &someFretDialog) +{ // private implementation + *this=someFretDialog; +} + +FretDialog::~FretDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +FretDialog &FretDialog::operator=(const FretDialog &someFretDialog) +{ // private implementation + return *this; +} + +bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + mSelectedString=selectedString; + mSelectedFret=-1; + return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData) +{ + initializeAction(); + initializeNoteTypes(); + setString(); + setFret(); + setNoteType((*mTabEntries)[mCurrEntryIndex]); + return (CallbackData::ReturnType)FALSE; +} + +void FretDialog::handleOk(void) +{ + String selectedFret; + String selectedAction; + String selectedDuration; + String selectedString; + bool found=false; + + getText(FRETENTRY_FRET,selectedFret); + getText(FRETENTRY_ACTION,selectedAction); + getText(FRETENTRY_DURATION,selectedDuration); + getText(FRETENTRY_STRING,selectedString); + if(!selectedString.isNull()) + { + int string=selectedString.toInt(); + if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string; + } + mSelectedFret=selectedFret.toInt(); + if(mSelectedFret<0||mSelectedFret>Fretboard::Frets) + { + mSelectedFret=-1; + return; + } + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + FrettedNote frettedNote; + frettedNote.setFret(mSelectedFret); + frettedNote.setAction(Action(selectedAction)); + if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret); + else if(!entry.setFrettedNote(mSelectedString,frettedNote)) + { + entry.addFrettedNote(mSelectedString,frettedNote); + } + entry.setNoteType(NoteType().fromString(selectedDuration)); + return; +} + +void FretDialog::setString() +{ + setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString)); +} + +void FretDialog::setFret() +{ + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + + for(int index=0;index actions=Action::enumerate(); + for(int index=0;index noteTypes=NoteType::enumerate(); + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class FretDialog : public DWindow +{ +public: + FretDialog(void); + virtual ~FretDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex); +private: + FretDialog(const FretDialog &someFretDialog); + FretDialog &operator=(const FretDialog &someFretDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void initializeAction(void); + void initializeNoteTypes(void); + void setFret(void); + void setString(void); + void setAction(const Action &action); + void setNoteType(const TabEntry &entry); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + int mSelectedString; + int mSelectedFret; +}; +#endif diff --git a/guitar/backup/20040302/FretViewWnd.cpp b/guitar/backup/20040302/FretViewWnd.cpp new file mode 100644 index 0000000..6004169 --- /dev/null +++ b/guitar/backup/20040302/FretViewWnd.cpp @@ -0,0 +1,164 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +FretViewWindow::FretViewWindow(void) +{ + mCreateHandler.setCallback(this,&FretViewWindow::createHandler); + mSizeHandler.setCallback(this,&FretViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&FretViewWindow::paintHandler); + mHorizontalScrollHandler.setCallback(this,&FretViewWindow::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&FretViewWindow::verticalScrollHandler); + mLeftButtonDownHandler.setCallback(this,&FretViewWindow::leftButtonDownHandler); + mCloseHandler.setCallback(this,&FretViewWindow::closeHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +FretViewWindow::~FretViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +CallbackData::ReturnType FretViewWindow::closeHandler(CallbackData &someCallbackData) +{ + return true; +} + +CallbackData::ReturnType FretViewWindow::createHandler(CallbackData &someCallbackData) +{ + setTitle("Fretboard"); + mGUIFretboard=::new GUIFretboard(*this); + mGUIFretboard.disposition(PointerDisposition::Delete); + return FALSE; +} + +CallbackData::ReturnType FretViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType FretViewWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mGUIFretboard->draw(pureDevice); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FretViewWindow::leftButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void FretViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String FretViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void FretViewWindow::setNote(const TabEntry &entry,bool clear,bool play) +{ + mGUIFretboard->setNote(entry,clear,play); +} + +void FretViewWindow::setNote(const Music::Chord &chord,bool play) +{ + mGUIFretboard->setNote(chord,play); +} + +void FretViewWindow::setNote(const Note ¬e,bool clear,bool play) +{ + mGUIFretboard->setNote(note,clear,play); +} + +void FretViewWindow::setNote(const Scale &scale,bool play) +{ + mGUIFretboard->setNote(scale,play); +} + +void FretViewWindow::setNote(const FrettedNotes &frettedNotes,bool play) +{ + mGUIFretboard->setNote(frettedNotes,play); +} + +void FretViewWindow::clearNotes(void) +{ + mGUIFretboard->clearNotes(); +} + +void FretViewWindow::showAllPositions(void) +{ + mGUIFretboard->showAllPositions(); +} + +void FretViewWindow::cut(void) +{ + mGUIFretboard->cut(); +} + +void FretViewWindow::copy(void) +{ + mGUIFretboard->copy(); +} + +void FretViewWindow::paste(void) +{ + mGUIFretboard->paste(); +} + +// *** virtuals + +void FretViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void FretViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|WS_CHILD|WS_CAPTION|WS_SIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_MINIMIZEBOX|WS_OVERLAPPED|WS_BORDER|WS_SYSMENU; +} + + diff --git a/guitar/backup/20040302/FretViewWnd.hpp b/guitar/backup/20040302/FretViewWnd.hpp new file mode 100644 index 0000000..98b7926 --- /dev/null +++ b/guitar/backup/20040302/FretViewWnd.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_FRETVIEWWINDOW_HPP_ +#define _GUITAR_FRETVIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#include +#endif + +class TabEntry; +class Scale; + +class FretViewWindow : public MDIWindow +{ +public: + enum{THPlay,THStop}; + FretViewWindow(void); + virtual ~FretViewWindow(); + String getTitle(void)const; + void cut(void); + void copy(void); + void paste(void); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void showAllPositions(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum{WindowWidth=355,WindowHeight=135,MaxWindowWidth=520}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDownHandler; + Callback mCloseHandler; + SmartPointer mGUIFretboard; +}; + +inline +void FretViewWindow::getNotes(TabEntry &entry) +{ + mGUIFretboard->getNotes(entry); +} +#endif + diff --git a/guitar/backup/20040302/Fretboard.cpp b/guitar/backup/20040302/Fretboard.cpp new file mode 100644 index 0000000..4a3d0c0 --- /dev/null +++ b/guitar/backup/20040302/Fretboard.cpp @@ -0,0 +1,240 @@ +#include +#include +#include + +bool Fretboard::isOnFretboard(const Note ¬e) +{ + for(int frIndex=0;frIndex &frettedNotes) +{ + frettedNotes.remove(); + + for(int srIndex=0;srIndex &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else + { + String message("[Fretboard::getAt] Unable to map note '"+note.toString()+String("'")); + GlobalDefs::outDebug(message); + returnCode=false; + } + } + +// need to come up with a strategy here for mapping notes on the fretboard + + if(isBarChord) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} + +/* + Find filler notes for given chord on given fret on empty string. +*/ +bool Fretboard::getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes) +{ + bool notesInChord; + for(int stringIndex=0;stringIndex &containedNotes) +{ + for(int srIndex=0;srIndex4)continue; + return true; + } + } + } + return false; +} + +/* Check to see if the fretted note exists in the collection of fretted notes. +* @param frettedNote - The fretted note to check for +* @param frettedNotes - The collection of fretted notes +*/ +bool Fretboard::contains(const FrettedNote &frettedNote,Block &frettedNotes) +{ + for(int index=0;index &frettedNotes) +{ + int maxDistance=0; + int currDistance; + + for(int index=0;indexmaxDistance)maxDistance=currDistance; + } + return maxDistance; +} + +void Fretboard::createFretboard(const Tuning &tuning,int frets) +{ + mTuning=tuning; + mFrets=frets; + createFretboard(); +} + +bool Fretboard::play(MIDIOutputDevice &device) +{ + for(int string=0;string&)*this).operator[](string); + strFretboard+=stringNotes.toString(); + if(string +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +// |-5- +// |-4- +// |-3- +// |-2- +// |-1- +// |-0- + +class MIDIOutputDevice; + +class Fretboard : public Array +{ +public: + enum{Frets=24,Strings=6}; + Fretboard(const Tuning &tuning=Tuning(),int frets=Frets); + virtual ~Fretboard(); + void createFretboard(const Tuning &tuning,int frets=Frets); + const Tuning &getTuning(); + void setTuning(const Tuning &tuning); + const Note &getAt(int string,int fret); + bool getAt(const Music::Chord &chord,Block &frettedNotes); + bool getAt(const Note ¬e,FrettedNote &frettedNote); + bool getAt(const Note ¬e,Block &frettedNotes); + int getFrets(void)const; + void setFrets(int frets); + bool isOnFretboard(const Note ¬e); + bool play(MIDIOutputDevice &device); + String toString(void)const; + static bool isValidFret(int fret); +private: + void createFretboard(); + bool getAt(const Note ¬e,FrettedNote &frettedNote,Block &containedNotes); + bool contains(const FrettedNote &frettedNote,Block &frettedNotes); + bool getFillerNotes(int fret,const Music::Chord &chord,Block &frettedNotes); + int distance(const FrettedNote &frettedNote,Block &frettedNotes); + bool isIn(const FrettedNote &frettedNote,const Music::Chord &chord); + + Tuning mTuning; + int mFrets; +}; + +inline +Fretboard::Fretboard(const Tuning &tuning,int frets) +: mTuning(tuning),mFrets(frets) +{ + createFretboard(); +} + +inline +Fretboard::~Fretboard() +{ +} + +inline +const Tuning &Fretboard::getTuning() +{ + return mTuning; +} + +inline +void Fretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createFretboard(); +} + +inline +int Fretboard::getFrets(void)const +{ + return mFrets; +} + +inline +void Fretboard::setFrets(int frets) +{ + mFrets=frets; + createFretboard(); +} + +inline +const Note &Fretboard::getAt(int string,int fret) +{ + return (operator[](string)).operator[](fret); +} + +inline +bool Fretboard::isValidFret(int fret) +{ + if(fret<=Fretboard::Frets)return true; + return false; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040302/FrettedBoundingNote.hpp b/guitar/backup/20040302/FrettedBoundingNote.hpp new file mode 100644 index 0000000..d1019c7 --- /dev/null +++ b/guitar/backup/20040302/FrettedBoundingNote.hpp @@ -0,0 +1,88 @@ +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#define _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class FrettedBoundingNote : public FrettedNote +{ +public: + FrettedBoundingNote(); + virtual ~FrettedBoundingNote(); + const Rect &getBoundingRect(void)const; + void setBoundingRect(const Rect &boundingRect); + const Point &getDisplayPoint(void)const; + void setDisplayPoint(const Point &displayPoint); + const RGBColor &getBkGndColor(void)const; + void setBkGndColor(RGBColor &bkGndColor); + const RGBColor &getTextColor(void)const; + void setTextColor(const RGBColor &textColor); +private: + Rect mBoundingRect; + Point mDisplayPoint; + RGBColor mBkGndColor; + RGBColor mTextColor; +}; + +inline +FrettedBoundingNote::FrettedBoundingNote() +{ +} + +inline +FrettedBoundingNote::~FrettedBoundingNote() +{ +} + +inline +const Rect &FrettedBoundingNote::getBoundingRect(void)const +{ + return mBoundingRect; +} + +inline +void FrettedBoundingNote::setBoundingRect(const Rect &boundingRect) +{ + mBoundingRect=boundingRect; +} + +inline +const RGBColor &FrettedBoundingNote::getBkGndColor(void)const +{ + return mBkGndColor; +} + +inline +void FrettedBoundingNote::setBkGndColor(RGBColor &bkGndColor) +{ + mBkGndColor=bkGndColor; +} + +inline +const RGBColor &FrettedBoundingNote::getTextColor(void)const +{ + return mTextColor; +} + +inline +void FrettedBoundingNote::setTextColor(const RGBColor &textColor) +{ + mTextColor=textColor; +} + +inline +const Point &FrettedBoundingNote::getDisplayPoint(void)const +{ + return mDisplayPoint; +} + +inline +void FrettedBoundingNote::setDisplayPoint(const Point &displayPoint) +{ + mDisplayPoint=displayPoint; +} +#endif + diff --git a/guitar/backup/20040302/FrettedNote.hpp b/guitar/backup/20040302/FrettedNote.hpp new file mode 100644 index 0000000..2b87aeb --- /dev/null +++ b/guitar/backup/20040302/FrettedNote.hpp @@ -0,0 +1,158 @@ +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#define _GUITAR_FRETTEDNOTE_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_ACTION_HPP_ +#include +#endif + +class FrettedNote; + +typedef Array FrettedNotes; + +class FrettedNote : public Note +{ +public: + FrettedNote(); + FrettedNote(const FrettedNote &frettedNote); + FrettedNote(const Note ¬e,int string,int fret,const Action &action=Action(Action::Pick)); + virtual ~FrettedNote(); + FrettedNote &operator=(const FrettedNote &frettedNote); + bool operator==(const FrettedNote &frettedNote)const; + bool operator>(const FrettedNote &frettedNote)const; + bool operator<(const FrettedNote &frettedNote)const; + int getString(void)const; + void setString(int string); + int getFret(void)const; + void setFret(int fret); + void setNote(const Note ¬e); + const Note &getNote(void)const; + const Action &getAction(void)const; + void setAction(const Action &action); + String toString(void)const; +private: + int mString; + int mFret; + Action mAction; +}; + +inline +FrettedNote::FrettedNote(const FrettedNote &frettedNote) +{ + *this=frettedNote; +} + +inline +FrettedNote::FrettedNote() +: Note(Note::E,4), mString(0), mFret(0) +{ +} + +inline +FrettedNote::FrettedNote(const Note ¬e,int string,int fret,const Action &action) +: Note(note), mString(string), mFret(fret), mAction(action) +{ +} + +inline +FrettedNote::~FrettedNote() +{ +} + +inline +FrettedNote &FrettedNote::operator=(const FrettedNote &frettedNote) +{ + setString(frettedNote.getString()); + setFret(frettedNote.getFret()); + (Note&)*this=(Note&)frettedNote; + setAction(frettedNote.getAction()); + return *this; +} + +inline +bool FrettedNote::operator==(const FrettedNote &frettedNote)const +{ + if(getString()==frettedNote.getString()&&getFret()==frettedNote.getFret()) + return (Note&)*this==(Note&)frettedNote; + return false; +} + +inline +bool FrettedNote::operator>(const FrettedNote &frettedNote)const +{ + if(getString()>frettedNote.getString())return true; + if(getFret()>frettedNote.getFret())return true; + return (Note&)*this>(Note&)frettedNote; +} + +inline +bool FrettedNote::operator<(const FrettedNote &frettedNote)const +{ + if(getString() +#include + +bool FrettedNotes::play(MIDIOutputDevice &midiDevice) +{ + String strNotes; + if(!midiDevice.hasDevice())return false; + +// ::OutputDebugString(String(toString()+String("\n")).str()); + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RGBColor GUIFretboard::smColorBlack=RGBColor(0,0,0); +RGBColor GUIFretboard::smColorLtGreen=RGBColor(156,156,74); +RGBColor GUIFretboard::smColorWhite=RGBColor(255,255,255); +RGBColor GUIFretboard::smColorRed=RGBColor(231,33,33); +RGBColor GUIFretboard::smColorGreen=RGBColor(0,128,0); +RGBColor GUIFretboard::smColorBlue=RGBColor(0,0,255); + +/* Construct the GUIFretboard +* @param parent - The owning parent window +* @param tuning - The tuning for this fretboard +* @param frets - The number of frets on this fretboard +*/ +GUIFretboard::GUIFretboard(GUIWindow &parent,const Tuning &tuning,int frets) +: mTuning(tuning), mTextFont("Small Fonts",6), mShowNotes(false), + mPrevBrush(0), mPrevFont(0), mPrevBkMode(0), mPrevTextColor(0), mClearNotes(true), + mCurrFret(0), mCurrString(0), mRedBrush(smColorRed), mLtGreenBrush(smColorLtGreen), + mWhiteBrush(smColorWhite), mGreenBrush(smColorGreen), mBlueBrush(smColorBlue) +{ + Registry registry; + setShowNotes(registry.getShowNotes()); + mParent=SmartPointer(&parent); + mSizeHandler.setCallback(this,&GUIFretboard::sizeHandler); + mLeftButtonDownHandler.setCallback(this,&GUIFretboard::leftButtonDownHandler); + mKeyDownHandler.setCallback(this,&GUIFretboard::keyDownHandler); + mKeyUpHandler.setCallback(this,&GUIFretboard::keyUpHandler); + mSetFocusHandler.setCallback(this,&GUIFretboard::setFocusHandler); + mKillFocusHandler.setCallback(this,&GUIFretboard::killFocusHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->insertHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + mParent.disposition(PointerDisposition::Assume); + mResBitmap=::new ResBitmap("FRETBOARD"); + mResBitmap.disposition(PointerDisposition::Delete); + parent.setWindowPos(mResBitmap->width()+RightBorder,mResBitmap->height()+BottomBorder); + createVirtualFretboard(); + mParent->invalidate(); + mParent->update(); +} + +/* +* Destructor +*/ +GUIFretboard::~GUIFretboard() +{ + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + mParent->removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + mParent->removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent->removeHandler(VectorHandler::KeyUpHandler,&mKeyUpHandler); + mParent->removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + mParent->removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +/* +* Draw the fretboard +* @param device - The device context on which to draw +*/ +void GUIFretboard::draw(PureDevice &device) +{ + mDIBitmap->usePalette(device,true); + mDIBitmap->bitBlt(device); + mDIBitmap->usePalette(device,false); + refreshNotes(); +} + +/* +* Repeat the selected notes at every location on the fretboard +* @param None +*/ +void GUIFretboard::showAllPositions(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + clearNotes(); + for(int index=0;index &frettedNotes,bool play) +{ + FrettedNotes notes; + notes.size(frettedNotes.size()); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +#include + +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Block > frettedNotesBlock; + Fretboard fretboard; + ChordMapper chordMapper; + + getSequencer(); + + chordMapper.map(chord,frettedNotesBlock); + for(int index=0;index &frettedNotes=frettedNotesBlock[index]; + clearNotes(); +// if(!fretboard.getAt(chord,frettedNotes)) +// MessageBox::messageBox("Error mapping notes","some notes were not mapped."); + setNote(frettedNotes,false); + ::Sleep(2000); + } + + if(play) + { + Registry registry; + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} +*/ + + +#include + +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Fretboard fretboard; + ChordMapper chordMapper; + + clearNotes(); + if(!chordMapper.map(chord,frettedNotes))return; + setNote(frettedNotes,false); + if(!play)return; + if(play) + { + Registry registry; + getSequencer(); + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} + + +/* +* Sets the notes of the given chord on the fretboard +* @param chord - the chord from which notes will be set +* @param play - indicates whether the notes of the chord should be played +* needs work (ie) selects multiple notes per string, does not optimize +* for finger position +*/ + +/* +void GUIFretboard::setNote(const Music::Chord &chord,bool play) +{ + Block frettedNotes; + Fretboard fretboard; + + getSequencer(); + clearNotes(); + if(!fretboard.getAt(chord,frettedNotes)) + MessageBox::messageBox("Error mapping notes","some notes were not mapped."); + setNote(frettedNotes,false); + if(play) + { + Registry registry; + ((Music::Chord&)chord).play(mSequencer->getDevice()); + ::Sleep(registry.getMillisecondsPerQuarterNote()); + } +} + +*/ +/* +* Sets the notes of the given scale on the fretboard +* @param scale - the scale from which notes will be set +* @param play - indicates whether the notes of the scale should be played +*/ +void GUIFretboard::setNote(const Scale &scale,bool play) +{ + Registry registry; + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + + getSequencer(); + clearNotes(); + if(scale.has(Scale::I))degreeI=scale.getDegree(Scale::I); + if(scale.has(Scale::III))degreeIII=scale.getDegree(Scale::III); + if(scale.has(Scale::V))degreeV=scale.getDegree(Scale::V); + if(scale.has(Scale::VII))degreeVII=scale.getDegree(Scale::VII); + for(int index=0;indexgetDevice()); + ::Sleep(Notes::DefaultDelay); + scale.play(mSequencer->getDevice(),registry.getMillisecondsPerQuarterNote()/4); // play scale as 16th notes + } +} + +/* +* Sets a note on the fretboard +* @param note - the note to set +* @param clear - indicates whether fretboard should be cleared prior to note being set +* @param play - indicates whether the note should be played +*/ +void GUIFretboard::setNote(const Note ¬e,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + } + } + } + return; +} + +/* +* Sets a note(s) on the fretboard +* @param entry - the tabentry containing the note(s) +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard +* @param string - the string to set the note on +* @param fret - the fret to set the note on +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +void GUIFretboard::setNote(int string,int fret,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + GuitarString &guitarString=operator[]((size()-1)-string); + FrettedBoundingNote &frettedBoundingNote=guitarString[fret]; + if(clear)clearNotes(); + frettedBoundingNote.setBkGndColor(smColorRed); + frettedBoundingNote.setTextColor(smColorWhite); + mActiveFrets.insert(frettedBoundingNote); + prepareDevice(device,true); + drawNote(frettedBoundingNote,device); + if(play)frettedBoundingNote.noteOn(mSequencer->getDevice()); + prepareDevice(device,false); +} + +/* +* Sets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::setNote(const GDIPoint &clickPoint,bool clear,bool play) +{ + getSequencer(); + if(clear)clearNotes(); + for(int strIndex=0;strIndexgetDevice()); + mCurrFret=frIndex; + mCurrString=5-strIndex; + return true; + } + } + } + return false; +} + +/* +* Unsets a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::unsetNote(const GDIPoint &clickPoint) +{ + for(int strIndex=0;strIndexinvalidate(boundingRect,false); + mParent->update(); + return true; + } + } + } + return false; +} + +/* +* isNoteSet a note on the fretboard from mouse input +* @param clickPoint - the point at which the mouse was clicked +* @param clear - indicates whether fretboard should be cleared prior to note(s) being set +* @param play - indicates whether the note(s) should be played +*/ +bool GUIFretboard::isNoteSet(const GDIPoint &clickPoint) +{ + for(int strIndex=0;strIndex frettedBoundingNotes; + + PureDevice device(*mParent); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index frettedBoundingNotes; + + entry.remove(); + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;index1)device.textOut(boundingRect.left(),boundingRect.top(),strNote); + else device.textOut(boundingRect.left()+1,boundingRect.top()+1,strNote); + } +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param prepare - indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + prepareDevice(device,smColorRed,smColorWhite,prepare); +} + +/* +* Prepare to do some drawing +* @param device - The device on which we are going to draw +* @param brushColor - The color of the drawing brush +* @param textColor - The text color +* @param prepare - Indicates whether to prepare for drawing or cleanup after drawing +*/ +void GUIFretboard::prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)getBrush(brushColor)); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(textColor); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} + +/* +* Get the brush for the given color +* @param brushColor - The color of the brush we desire +* @return - A reference to the brush for the given color +*/ +Brush &GUIFretboard::getBrush(const RGBColor &brushColor) +{ + if(brushColor==mRedBrush.getColor())return mRedBrush; + else if(brushColor==mWhiteBrush.getColor())return mWhiteBrush; + else if(brushColor==mGreenBrush.getColor())return mGreenBrush; + else if(brushColor==mBlueBrush.getColor())return mBlueBrush; + return mLtGreenBrush; +} + +/* +* Clears all of the notes on the fretboard +* @param None +* @return None +*/ +void GUIFretboard::clearNotes(void) +{ + Array frettedBoundingNotes; + + mActiveFrets.treeItems(frettedBoundingNotes); + for(int index=0;indexinvalidate(rect,false); + } + mActiveFrets.remove(); + mParent->update(); +} + +/* +* Initialize the fretboard and create it's underlying bitmap +* @param None +* @return None +*/ +void GUIFretboard::createVirtualFretboard(void) +{ + SmartPointer activeFret; + size(mTuning.size()); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + } + } + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + +/* +* Get the rectangle that bounds the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The bounding rectangle +*/ +Rect GUIFretboard::getBoundingRect(int string,int fret)const +{ + Rect boundingRect; + Point point(getPoint(string,fret)); + boundingRect.left(point.x()-Radius); + boundingRect.top(point.y()-Radius); + boundingRect.right(point.x()+Radius); + boundingRect.bottom(point.y()+Radius); + return boundingRect; +} + +/* +* Get the point for the given string and fret +* @param string - The string +* @param fret - The fret +* @return - The point +*/ +Point GUIFretboard::getPoint(int string,int fret)const +{ + Point point; + int starty=15; + int incy=10; + + switch(fret) + { + case 0 : + point.x(10); + break; + case 1 : + point.x(23); + break; + case 2 : + point.x(55); + break; + case 3 : + point.x(83); + break; + case 4 : + point.x(111); + break; + case 5 : + point.x(138); + break; + case 6 : + point.x(164); + break; + case 7 : + point.x(193); + break; + case 8 : + point.x(220); + break; + case 9 : + point.x(249); + break; + case 10 : + point.x(280); + break; + case 11 : + point.x(307); + break; + case 12 : + point.x(335); + break; + case 13 : + point.x(362); + break; + case 14 : + point.x(392); + break; + case 15 : + point.x(420); + break; + case 16 : + point.x(446); + break; + case 17 : + point.x(473); + break; + case 18 : + point.x(501); + break; + case 19 : + point.x(528); + break; + case 20 : + point.x(558); + break; + case 21 : + point.x(585); + break; + case 22 : + point.x(611); + break; + case 23 : + point.x(640); + break; + case 24 : + point.x(668); + break; + } + point.y(starty+((string)*incy)); + return point; +} + +/* +* Cut the notes from the fretboard +* @param None +* @return None +*/ +void GUIFretboard::cut(void) +{ + copy(); // copy the fretboard notes to the clipboard first + clearNotes(); +} + +/* +* Copy all selected notes to the clipboard +* @param None +* @return None +*/ +void GUIFretboard::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + getNotes(entry); + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); +} + +/* +* Paste notes from clipboard +* @param None +* @return None +*/ +void GUIFretboard::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return; + entry.fromString(strText.betweenString(']',0)); + setNote(entry,true,true); +} + +// callbacks + +/* +* Handles resizing of the fretboard window +* @param callbackData - Contains information about the resize event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::sizeHandler(CallbackData &callbackData) +{ + GlobalDefs::outDebug("[GUIFretboard::sizeHandler]"); + Point sizePoint(callbackData.loWord(),callbackData.hiWord()); + if(sizePoint.x()>mResBitmap->width()+RightBorder|| + sizePoint.y()>mResBitmap->height()+BottomBorder) + mParent->setWindowPos(mResBitmap->width()+10,mResBitmap->height()+30); + return false; +} + +/* +* Handles left button down event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::leftButtonDownHandler(CallbackData &callbackData) +{ + GDIPoint clickPoint(callbackData.loWord(),callbackData.hiWord()); + + if(KeyData::controlKeyPressed())setNote(clickPoint,mClearNotes,true); + else + { + if(isNoteSet(clickPoint))unsetNote(clickPoint); + else setNote(clickPoint,mClearNotes,true); + } + return false; +} + +/* +* Handles keyboard event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyDownHandler(CallbackData &callbackData) +{ + if(KeyData::controlKeyPressed())mClearNotes=false; + else mClearNotes=true; + KeyData keyData(callbackData); + switch(keyData.virtualKey()) + { + case KeyDown : + if(KeyData::shiftKeyPressed())mCurrString-=2; + else mCurrString--; + if(mCurrString<0)mCurrString=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyLeft : + if(KeyData::shiftKeyPressed())mCurrFret-=2; + else mCurrFret--; + if(mCurrFret<0)mCurrFret=0; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyRight : + if(KeyData::shiftKeyPressed())mCurrFret+=2; + else mCurrFret++; + if(mCurrFret>DefaultFrets)mCurrFret=DefaultFrets; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + case KeyUp : + if(KeyData::shiftKeyPressed())mCurrString+=2; + else mCurrString++; + if(mCurrString>=DefaultStrings)mCurrString=DefaultStrings-1; + setNote(mCurrString,mCurrFret,mClearNotes,true); + break; + } + return false; +} + +/* +* Handles key up event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::keyUpHandler(CallbackData &callbackData) +{ + KeyData keyData(callbackData); + if(CtrlKey==keyData.virtualKey())mClearNotes=true; + return false; +} + +/* +* Handles focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::setFocusHandler(CallbackData &callbackData) +{ + getSequencer(); + return false; +} + +/* +* Handles kill focus event +* @param callbackData - Contains information about the event +* @return success status +*/ +CallbackData::ReturnType GUIFretboard::killFocusHandler(CallbackData &callbackData) +{ + mSequencer.destroy(); + return false; +} + diff --git a/guitar/backup/20040302/GUIFretboard.hpp b/guitar/backup/20040302/GUIFretboard.hpp new file mode 100644 index 0000000..3a0bb85 --- /dev/null +++ b/guitar/backup/20040302/GUIFretboard.hpp @@ -0,0 +1,176 @@ +#ifndef _GUITAR_GUIFRETBOARD_HPP_ +#define _GUITAR_GUIFRETBOARD_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDBOUNDINGNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TUNING_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class GUIWindow; +class TabEntry; +class ResBitmap; +class Scale; + +typedef Array GuitarString; +typedef Array VirtualFretboard; + +class GUIFretboard : public VirtualFretboard +{ +public: + enum{DefaultFrets=24,DefaultStrings=6}; + GUIFretboard(GUIWindow &parent,const Tuning &tuning=Tuning(),int frets=DefaultFrets); + virtual ~GUIFretboard(); + const Tuning &getTuning(void)const; + void setTuning(const Tuning &tuning); + int getFrets(void)const; + void draw(PureDevice &device); + bool isNoteSet(const GDIPoint &clickPoint); + bool unsetNote(const GDIPoint &clickPoint); + void setNote(int string,int fret,bool clear=true,bool play=false); + void setNote(const TabEntry &entry,bool clear=true,bool play=false); + void setNote(const Note ¬e,bool clear=true,bool play=false); + void setNote(const Scale &scale,bool play=false); + void setNote(const Music::Chord &chord,bool play=false); + void setNote(const FrettedNotes &frettedNotes,bool play=false); + void setNote(Block &frettedNotes,bool play=false); + void getNotes(TabEntry &entry); + void clearNotes(void); + void setShowNotes(bool showNotes); + bool getShowNotes(void)const; + void showAllPositions(void); + void cut(void); + void copy(void); + void paste(void); +private: + enum{RightBorder=10,BottomBorder=30,Radius=5,ClickTolerance=1}; + enum{KeyDown=0x28,KeyLeft=0x25,KeyRight=0x27,KeyUp=0x26,CtrlKey=0x11}; + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &callbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &callbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &callbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &callbackData); + + void createVirtualFretboard(void); + void refreshNotes(void); + void getSequencer(void); + Point getPoint(int string,int fret)const; + Rect getBoundingRect(int string,int fret)const; + void prepareDevice(PureDevice &device,bool prepare); + void prepareDevice(PureDevice &device,const RGBColor &brushColor,const RGBColor &textColor=RGBColor(255,255,255),bool prepare=true); + void drawNote(FrettedBoundingNote &currFret,PureDevice &device); + bool setNote(const GDIPoint &clickPoint,bool clear=true,bool play=false); + Brush &getBrush(const RGBColor &brushColor); + + Tuning mTuning; + SmartPointer mDIBitmap; + SmartPointer mResBitmap; + SmartPointer mParent; + SmartPointer mSequencer; + + Callback mSizeHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mKeyUpHandler; + Callback mSetFocusHandler; + Callback mKillFocusHandler; + BTree mActiveFrets; + + bool mShowNotes; + bool mClearNotes; + int mCurrFret; + int mCurrString; + + Brush mGreenBrush; + Brush mRedBrush; + Brush mWhiteBrush; + Brush mLtGreenBrush; + Brush mBlueBrush; + Font mTextFont; + + HGDIOBJ mPrevBrush; + HGDIOBJ mPrevFont; + int mPrevBkMode; + RGBColor mPrevTextColor; + + static RGBColor smColorBlack; + static RGBColor smColorLtGreen; + static RGBColor smColorWhite; + static RGBColor smColorRed; + static RGBColor smColorGreen; + static RGBColor smColorBlue; +}; + +inline +const Tuning &GUIFretboard::getTuning(void)const +{ + return mTuning; +} + +inline +void GUIFretboard::setTuning(const Tuning &tuning) +{ + mTuning=tuning; + createVirtualFretboard(); +} + +inline +int GUIFretboard::getFrets(void)const +{ + return DefaultFrets; +} + +inline +void GUIFretboard::setShowNotes(bool showNotes) +{ + mShowNotes=showNotes; +} + +inline +bool GUIFretboard::getShowNotes(void)const +{ + return mShowNotes; +} + +inline +void GUIFretboard::getSequencer(void) +{ + if(mSequencer.isOkay())return; + mSequencer=::new Sequencer(); + mSequencer.disposition(PointerDisposition::Delete); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040302/GlobalDefs.cpp b/guitar/backup/20040302/GlobalDefs.cpp new file mode 100644 index 0000000..24438ac --- /dev/null +++ b/guitar/backup/20040302/GlobalDefs.cpp @@ -0,0 +1,6 @@ +#include + +UINT GlobalDefs::mRegisteredClipboardFormat=0; +GlobalDefs::LogLevel GlobalDefs::mLogLevel=GlobalDefs::Debug; +File GlobalDefs::mLogFile; + diff --git a/guitar/backup/20040302/GlobalDefs.hpp b/guitar/backup/20040302/GlobalDefs.hpp new file mode 100644 index 0000000..f376556 --- /dev/null +++ b/guitar/backup/20040302/GlobalDefs.hpp @@ -0,0 +1,100 @@ +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#define _GUITAR_GLOBALDEFS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class GlobalDefs +{ +public: + typedef enum LogLevel{NoLog,Verbose,Info,Debug}; + enum{MicrosecondsPerQuarterNote=651578,ShowAction=1,ShowNotes=1}; + static void outDebug(const String &strDebug,LogLevel level=Debug); + static LogLevel getLogLevel(void); + static void setLogLevel(LogLevel logLevel); + static bool setLogFile(const String &pathLogFile); + static UINT getRegisteredClipboardFormat(void); + static void setRegisteredClipboardFormat(UINT registeredClipboardFormat); + static String translateLevel(LogLevel logLevel); +private: + GlobalDefs(); + virtual ~GlobalDefs(); + static UINT mRegisteredClipboardFormat; + static LogLevel mLogLevel; + static File mLogFile; +}; + +inline +GlobalDefs::GlobalDefs() +{ +} + +inline +GlobalDefs::~GlobalDefs() +{ +} + +inline +UINT GlobalDefs::getRegisteredClipboardFormat(void) +{ + return mRegisteredClipboardFormat; +} + +inline +void GlobalDefs::setRegisteredClipboardFormat(UINT registeredClipboardFormat) +{ + mRegisteredClipboardFormat=registeredClipboardFormat; +} + +inline +GlobalDefs::LogLevel GlobalDefs::getLogLevel(void) +{ + return mLogLevel; +} + +inline +void GlobalDefs::setLogLevel(LogLevel logLevel) +{ + mLogLevel=logLevel; +} + +inline +void GlobalDefs::outDebug(const String &strDebug,LogLevel logLevel) +{ + if(NoLog==getLogLevel())return; + if(mLogFile.isOkay()&&logLevel>=mLogLevel) + { + mLogFile.writeLine(translateLevel(logLevel)+strDebug); + mLogFile.flush(); + } + else if(logLevel>=mLogLevel)::OutputDebugString(String(translateLevel(logLevel)+strDebug+String("\n")).str()); +} + +inline +bool GlobalDefs::setLogFile(const String &pathLogFile) +{ + return mLogFile.open(pathLogFile,"wb"); +} + +inline +String GlobalDefs::translateLevel(LogLevel logLevel) +{ + SystemTime systemTime; + if(NoLog==logLevel)return String("[Log.None][")+systemTime.toString()+String("]"); + else if(Verbose==logLevel)return String("[Log.Verbose][")+systemTime.toString()+String("]"); + else if(Debug==logLevel)return String("[Log.Debug][")+systemTime.toString()+String("]"); + else return String("[Log.Info]]")+systemTime.toString()+String("]"); +} +#endif diff --git a/guitar/backup/20040302/GuitarString.hpp b/guitar/backup/20040302/GuitarString.hpp new file mode 100644 index 0000000..06f0d1c --- /dev/null +++ b/guitar/backup/20040302/GuitarString.hpp @@ -0,0 +1,29 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/guitar/backup/20040302/Instrument.hpp b/guitar/backup/20040302/Instrument.hpp new file mode 100644 index 0000000..eee996c --- /dev/null +++ b/guitar/backup/20040302/Instrument.hpp @@ -0,0 +1,129 @@ +#ifndef _GUITAR_INSTRUMENT_HPP_ +#define _GUITAR_INSTRUMENT_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Instrument +{ +public: + Instrument(const String &description,int program); + ~Instrument(); + const String &description(void)const; + void description(const String &description); + int program(void)const; + void program(int program); + static Instrument fromString(const String &instrument); + String toString(void)const; + bool isOkay(void)const; +private: + String mDescription; + int mProgram; +}; + +inline +Instrument::Instrument(const String &description,int program) +: mDescription(description), mProgram(program) +{ +} + +inline +Instrument::~Instrument() +{ +} + +inline +const String &Instrument::description(void)const +{ + return mDescription; +} + +inline +void Instrument::description(const String &description) +{ + mDescription=description; +} + +inline +int Instrument::program(void)const +{ + return mProgram; +} + +inline +void Instrument::program(int program) +{ + mProgram=program; +} + +inline +Instrument Instrument::fromString(const String &strInstrument) +{ + if(strInstrument.isNull())return Instrument("",-1); + return Instrument(strInstrument.betweenString(';',0),strInstrument.betweenString(0,';').toInt()); +} + +inline +String Instrument::toString()const +{ + return String().fromInt(mProgram)+String(";")+mDescription; +} + +inline +bool Instrument::isOkay(void)const +{ + if(mDescription.isNull() || -1==mProgram)return false; + return true; +} + +class Instruments : public Block +{ +public: + enum {StartOrdinal=STRING_INSTRUMENT1,EndOrdinal=STRING_INSTRUMENT175}; + Instruments(); + virtual ~Instruments(); + int getProgram(int index); + const Instrument &getInstrument(int index); +private: + void loadInstruments(void); +}; + +inline +Instruments::Instruments() +{ + loadInstruments(); +} + +inline +Instruments::~Instruments() +{ +} + +inline +void Instruments::loadInstruments(void) +{ + for(int index=StartOrdinal;index<=EndOrdinal;index++) + { + String strInstrument=String(index); + insert(&Instrument(String(strInstrument.betweenString(';',0).betweenString(';',0)),strInstrument.betweenString(0,';').toInt())); + } +} + +inline +int Instruments::getProgram(int index) +{ + return operator[](index).program(); +} + +inline +const Instrument &Instruments::getInstrument(int index) +{ + return operator[](index); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040302/IntegerPair.hpp b/guitar/backup/20040302/IntegerPair.hpp new file mode 100644 index 0000000..fc5959f --- /dev/null +++ b/guitar/backup/20040302/IntegerPair.hpp @@ -0,0 +1,21 @@ +#ifndef _GUITAR_INTEGERPAIR_HPP_ +#define _GUITAR_INTEGERPAIR_HPP_ + +class IntegerPair +{ +public: + IntegerPair(); + IntegerPair(const IntegerPair &integerPair); + virtual IntegerPair(); + IntegerPair &operator=(const IntegerPair &integerPair); + bool operator<(const IntegerPair &integerPair); + bool operator>(const IntegerPair &integerPair); + bool operator==(const IntegerPair &integerPair); + int getValue(void)const; + void setValue(int value); + int getComparator +private: + int mValue; + int mComparator; +}; +#endif \ No newline at end of file diff --git a/guitar/backup/20040302/License.hpp b/guitar/backup/20040302/License.hpp new file mode 100644 index 0000000..e83be51 --- /dev/null +++ b/guitar/backup/20040302/License.hpp @@ -0,0 +1,148 @@ +#ifndef _GUITAR_LICENSE_HPP_ +#define _GUITAR_LICENSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif + +class License +{ +public: + typedef enum LicenseType{Expires=01,Permanent=02}; + typedef enum Feature{MIDIFeature}; + License(void); + License(const License &license); + License(const String &strLicenseKey); // this should be a uuencoded, xor'd string + License(Block &strLicenseKeyLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + License &operator=(const License &license); + static String generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount); // produces a uuencoded, xor'd string + bool fromString(const String &string); // this should be a uuencoded, xor'd string + bool fromLines(Block &strLicenseLines); // this should be a uuencoded string surrounded by "BEGIN LICENSE" / "END LICENSE" sequence + bool isValid(void)const; + bool isExpiring(void)const; + bool allowFeature(Feature feature)const; + int getRemainingDays(void)const; + int getDayCount(void)const; + int getDay(void)const; + const String &getUUEncodedLicense(void)const; +private: + enum {XORMagic=72}; + static int calculateChecksum(const String &string); + static String xor(const String &strLicense); + static String numericEncode(const String &strLicense); + static String numericDecode(const String &strLicense); + + String mProductVersion; + String mUUEncodedLicense; + SystemTime mIssueDate; + LicenseType mLicenseType; + int mDayCount; + bool mIsValid; + static const String smBeginLicense; + static const String smEndLicense; +}; + +inline +License::License(void) +: mIsValid(false) +{ +} + +inline +License::License(const License &license) +{ + *this=license; +} + +inline +License::License(const String &strLicenseKey) +: mIsValid(false) +{ + fromString(strLicenseKey); +} + +inline +License::License(Block &strLicenseLines) +: mIsValid(false) +{ + fromLines(strLicenseLines); +} + +inline +License &License::operator=(const License &license) +{ + mProductVersion=license.mProductVersion; + mIssueDate=license.mIssueDate; + mLicenseType=license.mLicenseType; + mDayCount=license.mDayCount; + mIsValid=license.mIsValid; + return *this; +} + +inline +bool License::isValid(void)const +{ + return mIsValid; +} + +inline +bool License::isExpiring(void)const +{ + return Expires==mLicenseType; +} + +inline +int License::getRemainingDays(void)const +{ + if(!isExpiring())return -1; + SDate issueDate; + SDate expireDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + expireDate=issueDate; + expireDate=expireDate.daysAdd360(mDayCount); + return currDate.daysBetween360(expireDate); +} + +inline +int License::getDay(void)const +{ + SDate issueDate; + SDate currDate; + + issueDate.year(mIssueDate.year()); + issueDate.month(mIssueDate.month()); + issueDate.day(mIssueDate.day()); + return issueDate.daysBetween360(currDate)+1; +} + +inline +int License::getDayCount(void)const +{ + return mDayCount; +} + +inline +bool License::allowFeature(Feature feature)const +{ + if(isExpiring())return false; + return true; +} + +inline +const String &License::getUUEncodedLicense(void)const +{ + return mUUEncodedLicense; +} +#endif diff --git a/guitar/backup/20040302/LicenseDialog.cpp b/guitar/backup/20040302/LicenseDialog.cpp new file mode 100644 index 0000000..011549d --- /dev/null +++ b/guitar/backup/20040302/LicenseDialog.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include + +LicenseDialog::LicenseDialog(void) +{ + mInitHandler.setCallback(this,&LicenseDialog::initHandler); + mCreateHandler.setCallback(this,&LicenseDialog::createHandler); + mCloseHandler.setCallback(this,&LicenseDialog::closeHandler); + mDestroyHandler.setCallback(this,&LicenseDialog::destroyHandler); + mCommandHandler.setCallback(this,&LicenseDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog::LicenseDialog(const LicenseDialog &someLicenseDialog) +{ // private implementation + *this=someLicenseDialog; +} + +LicenseDialog::~LicenseDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +LicenseDialog &LicenseDialog::operator=(const LicenseDialog &someLicenseDialog) +{ // private implementation + return *this; +} + +bool LicenseDialog::perform(GUIWindow &parentWindow,bool cancelTerminates) +{ + bool returnCode; + mCancelTerminates=cancelTerminates; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"LICENSEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return returnCode; +} + +CallbackData::ReturnType LicenseDialog::initHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType LicenseDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType LicenseDialog::commandHandler(CallbackData &someCallbackData) +{ + LRESULT result; + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(!validateLicense()) + { + MessageBox::messageBox("Error","The license you entered was invalid, please try again"); + setText(LICENSE_DIALOG_LICENSE,String()); + setFocus(LICENSE_DIALOG_LICENSE); + } + else endDialog(true); + break; + case IDCANCEL : + if(mCancelTerminates) + { + result=MessageBox::messageBox(*this,"Warning","Cancelling now will terminate the application.",MB_OKCANCEL); + if(IDOK==result)endDialog(false); + } + else endDialog(false); + break; + case LICENSE_DIALOG_REQUEST_LICENSE : + handleLicenseRequest(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +bool LicenseDialog::validateLicense(void)const +{ + License license; + String strLicense; + Block strLicenseLines; + + strLicense=getText(LICENSE_DIALOG_LICENSE); + if(strLicense.isNull())return false; + makeLicenseLines(strLicense,strLicenseLines); + license.fromLines(strLicenseLines); + if(!license.isValid()||license.isExpiring())return false; + if(!Registration::getInstance().applyLicense(strLicenseLines))return false; + return true; +} + +void LicenseDialog::handleLicenseRequest(void)const +{ + BrowserHelper::launchBrowser(String(STRING_HOST)); +} + +void LicenseDialog::makeLicenseLines(String strLicense,Block &strLicenseLines)const +{ + strLicenseLines.remove(); + if(strLicense.isNull())return; + strLicense.removeTokens("\r"); + strLicenseLines.insert(&String(strLicense.betweenString(0,'\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\n'))); + strLicenseLines.insert(&String(strLicense.betweenString('\n','\0').betweenString('\n','\n\0'))); +} diff --git a/guitar/backup/20040302/LicenseDialog.hpp b/guitar/backup/20040302/LicenseDialog.hpp new file mode 100644 index 0000000..87535df --- /dev/null +++ b/guitar/backup/20040302/LicenseDialog.hpp @@ -0,0 +1,32 @@ +#ifndef _GUITAR_LICENSEDIALOG_HPP_ +#define _GUITAR_LICENSEDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif + +class LicenseDialog : public DWindow +{ +public: + LicenseDialog(void); + virtual ~LicenseDialog(); + bool perform(GUIWindow &parentWindow,bool cancelTerminates=true); +private: + LicenseDialog(const LicenseDialog &someLicenseDialog); + LicenseDialog &operator=(const LicenseDialog &someLicenseDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + bool validateLicense(void)const; + void handleLicenseRequest(void)const; + void makeLicenseLines(String strLicense,Block &strLicenseLines)const; + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + bool mCancelTerminates; +}; +#endif diff --git a/guitar/backup/20040302/LineParser.cpp b/guitar/backup/20040302/LineParser.cpp new file mode 100644 index 0000000..5d387ae --- /dev/null +++ b/guitar/backup/20040302/LineParser.cpp @@ -0,0 +1,127 @@ +#include + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + +void LineParser::putElement(const Element &element) +{ + String strItem=Action(element.getAction()).toStringShort()+String().fromInt(element.getFret()); + *this+=strItem; + mPosition+=strItem.length(); + return; +} + +void LineParser::putElement(char ch) +{ + *this+=ch; + mPosition++; + return; +} + +int LineParser::peekElement(Element &element) +{ + int position=mPosition; + int result=getElement(element); + mPosition=position; + return result; +} diff --git a/guitar/backup/20040302/LineParser.hpp b/guitar/backup/20040302/LineParser.hpp new file mode 100644 index 0000000..2bdd01b --- /dev/null +++ b/guitar/backup/20040302/LineParser.hpp @@ -0,0 +1,101 @@ +#ifndef _GUITAR_LINEPARSER_HPP_ +#define _GUITAR_LINEPARSER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_ELEMENT_HPP_ +#include +#endif + +class LineParser : private String +{ +public: + LineParser(); + LineParser(const String &string); + virtual ~LineParser(); + LineParser &operator=(const String &string); + LineParser &operator++(); + LineParser &operator++(int /*postfixdummy*/); + void reset(void); + int getElement(Element &element); + void putElement(const Element &element); + void putElement(char ch); + int length(void)const; + int getPosition(void)const; + bool serialize(File &outFile)const; +private: + int peekElement(Element &element); + + int mPosition; + int mLength; +}; + +inline +LineParser::LineParser() +: mPosition(0), mLength(0) +{ +} + +inline +LineParser::LineParser(const String &string) +: String(string), mPosition(0), mLength(String::length()) +{ +} + +inline +LineParser::~LineParser() +{ +} + +inline +LineParser &LineParser::operator=(const String &string) +{ + (String&)*this=string; + mPosition=0; + mLength=String::length(); + return *this; +} + +inline +LineParser &LineParser::operator++() +{ + mPosition++; + return *this; +} + +inline +LineParser &LineParser::operator++(int /*postfixdummy*/) +{ + mPosition++; + return *this; +} + +inline +void LineParser::reset(void) +{ + mPosition=0; +} + +inline +int LineParser::length(void)const +{ + return mLength; +} + +inline +int LineParser::getPosition(void)const +{ + return mPosition; +} + +inline +bool LineParser::serialize(File &outFile)const +{ + if(!outFile.isOkay())return false; + outFile.writeLine(*this); + return true; +} +#endif diff --git a/guitar/backup/20040302/MIDIDialog.cpp b/guitar/backup/20040302/MIDIDialog.cpp new file mode 100644 index 0000000..db0a41d --- /dev/null +++ b/guitar/backup/20040302/MIDIDialog.cpp @@ -0,0 +1,136 @@ +#include +#include +#include + +MIDIDialog::MIDIDialog(void) +{ + mInitHandler.setCallback(this,&MIDIDialog::initHandler); + mCreateHandler.setCallback(this,&MIDIDialog::createHandler); + mCloseHandler.setCallback(this,&MIDIDialog::closeHandler); + mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler); + mCommandHandler.setCallback(this,&MIDIDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog) +{ // private implementation + *this=someMIDIDialog; +} + +MIDIDialog::~MIDIDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog) +{ // private implementation + return *this; +} + +bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack) +{ + bool returnCode; + mPathMIDIFileName=strPathMIDIFileName; + returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + if(returnCode)selectedTrack=mSelectedTrack; + return returnCode; +} + +CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData) +{ + MIDIHelper midiHelper; + TrackInfos trackInfos; + midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos); + setTrackInformation(trackInfos); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + mSelectedTrack=getSelectedTrack(); + if(-1==mSelectedTrack)endDialog(false); + else endDialog(true); + break; + } + if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MIDIDialog::setTrackInformation(TrackInfos &trackInfos) +{ + bool isFirst=true; + for(int index=0;index=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return; + mSelectedTrack=clickedId-MIDI_TRACK1; + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L); + } +} + +int MIDIDialog::getSelectedTrack(void)const +{ + int selectedTrack=-1; + + for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++) + { + if(1==sendMessage(btnId,BM_GETCHECK,0,0L)) + { + selectedTrack=btnId-MIDI_TRACK1; + break; + } + } + return selectedTrack; +} + + + + + diff --git a/guitar/backup/20040302/MIDIDialog.hpp b/guitar/backup/20040302/MIDIDialog.hpp new file mode 100644 index 0000000..01781b3 --- /dev/null +++ b/guitar/backup/20040302/MIDIDialog.hpp @@ -0,0 +1,39 @@ +#ifndef _GUITAR_MIDIDIALOG_HPP_ +#define _GUITAR_MIDIDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIDialog : public DWindow +{ +public: + MIDIDialog(void); + virtual ~MIDIDialog(); + bool perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack); +private: + MIDIDialog(const MIDIDialog &someMIDIDialog); + MIDIDialog &operator=(const MIDIDialog &someMIDIDialog); + void handleClick(const CallbackData &someCallbackData); + int getSelectedTrack(void)const; + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTrackInformation(TrackInfos &trackInfos); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + String mPathMIDIFileName; + int mSelectedTrack; +}; +#endif diff --git a/guitar/backup/20040302/MIDIHelper.cpp b/guitar/backup/20040302/MIDIHelper.cpp new file mode 100644 index 0000000..06c36b9 --- /dev/null +++ b/guitar/backup/20040302/MIDIHelper.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include +#include +#include + +bool MIDIHelper::getTrackInfo(const String &strPathMIDIFileName,TrackInfos &trackInfos) +{ + MidiData midiData(strPathMIDIFileName); + midiData.getTrackInfo(trackInfos); + return trackInfos.size()?true:false; +} + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack) +{ + TabEntry entry; + Tablature tablature; + TabEntries tabEntries; + + WORD currPlayTime; + WORD prevPlayTime; + int eventCount; + bool resultCode; + bool haveTrack; + Block notes; + TrackInfos trackInfos; + + resultCode=false; + haveTrack=false; + if(strPathMidiFileName.isNull())return resultCode; + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + + for(int trIndex=0;trIndex &strPathTabFileNames) +{ + String strPathTabFileName; + WORD currPlayTime; + WORD prevPlayTime; + int currentTrack; + int eventCount; + Block tracks; + Block notes; + TrackInfos trackInfos; + + if(strPathMidiFileName.isNull())return false; + strPathTabFileNames.remove(); + mMessages.remove(); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); + + midiData.getTrackInfo(trackInfos); + if(!trackInfos.size())return false; + if(!tracks.size())return false; + for(int trIndex=0;trIndex ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + notePaths.size(notes.size()); + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + MIDIHelper(); + virtual ~MIDIHelper(); +// bool import(const String &strPathMidiFileName,const String &strPathTabFileName); + bool import(const String &strPathMidiFileName,Block &strPathTabFileNames); + bool import(const String &strPathMidiFileName,const String &strPathTabFileName,int selectedTrack); + bool getTrackInfo(const String &strpathMIDIFileName,TrackInfos &trackInfos); +private: + bool createEntry(Block ¬es,TabEntry &entry); + bool filterNotesOnFretboard(Block ¬es); + + Fretboard mFretboard; + Block mMessages; +}; + +inline +MIDIHelper::MIDIHelper() +{ +} + +inline +MIDIHelper::~MIDIHelper() +{ +} +#endif diff --git a/guitar/backup/20040302/MessageBox.hpp b/guitar/backup/20040302/MessageBox.hpp new file mode 100644 index 0000000..53be76b --- /dev/null +++ b/guitar/backup/20040302/MessageBox.hpp @@ -0,0 +1,47 @@ +#ifndef _GUITAR_MESSAGE_HPP_ +#define _GUITAR_MESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif + +class MessageBox +{ +public: + static LRESULT messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type=MB_OK); + static LRESULT messageBox(const String &strCaption,const String &strText,UINT type=MB_OK); +private: + MessageBox(); + static String getProductVersion(const VersionInfo &versionInfo); +}; + +inline +MessageBox::MessageBox() +{ +} + +inline +LRESULT MessageBox::messageBox(GUIWindow &parent,const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(parent,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +LRESULT MessageBox::messageBox(const String &strCaption,const String &strText,UINT type) +{ + VersionInfo versionInfo; + return ::MessageBox(0,strText,getProductVersion(versionInfo)+String(" ")+strCaption,type); +} + +inline +String MessageBox::getProductVersion(const VersionInfo &versionInfo) +{ + return String("[")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("]"); +} +#endif diff --git a/guitar/backup/20040302/NoteType.cpp b/guitar/backup/20040302/NoteType.cpp new file mode 100644 index 0000000..2877fe9 --- /dev/null +++ b/guitar/backup/20040302/NoteType.cpp @@ -0,0 +1,80 @@ +#include + +const NoteType &NoteType::operator++(void) +{ + if(WholeNote==mNoteType)mNoteType=HalfNote; + else if(HalfNote==mNoteType)mNoteType=QuarterNote; + else if(QuarterNote==mNoteType)mNoteType=EighthNote; + else if(EighthNote==mNoteType)mNoteType=SixteenthNote; + else if(SixteenthNote==mNoteType)mNoteType=ThirtySecondNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixtyFourthNote; + else mNoteType++; + return *this; +} + +const NoteType &NoteType::operator--(void) +{ + if(HalfNote==mNoteType)mNoteType=WholeNote; + else if(QuarterNote==mNoteType)mNoteType=HalfNote; + else if(EighthNote==mNoteType)mNoteType=QuarterNote; + else if(SixteenthNote==mNoteType)mNoteType=EighthNote; + else if(ThirtySecondNote==mNoteType)mNoteType=SixteenthNote; + else if(SixtyFourthNote==mNoteType)mNoteType=ThirtySecondNote; + else mNoteType--; + return *this; +} + +NoteType &NoteType::fromString(const String &stringRep) +{ + if(stringRep.equals(toString(WholeNote)))mNoteType=WholeNote; + else if(stringRep.equals(toString(HalfNote)))mNoteType=HalfNote; + else if(stringRep.equals(toString(QuarterNote)))mNoteType=QuarterNote; + else if(stringRep.equals(toString(EighthNote)))mNoteType=EighthNote; + else if(stringRep.equals(toString(SixteenthNote)))mNoteType=SixteenthNote; + else if(stringRep.equals(toString(ThirtySecondNote)))mNoteType=ThirtySecondNote; + else if(stringRep.equals(toString(SixtyFourthNote)))mNoteType=SixtyFourthNote; + else mNoteType=stringRep.betweenString('/',0).toInt(); + return *this; +} + +Array NoteType::enumerate(void) +{ + Array values; + values.size(7); + values[0]=NoteType::toString(WholeNote); + values[1]=NoteType::toString(HalfNote); + values[2]=NoteType::toString(QuarterNote); + values[3]=NoteType::toString(EighthNote); + values[4]=NoteType::toString(SixteenthNote); + values[5]=NoteType::toString(ThirtySecondNote); + values[6]=NoteType::toString(SixtyFourthNote); + return values; +} + +String NoteType::toString(void)const +{ + return toString(getNoteType()); +} + +String NoteType::toString(TypeNote noteType) +{ + switch(noteType) + { + case WholeNote : + return "1/1"; + case HalfNote : + return "1/2"; + case QuarterNote : + return "1/4"; + case EighthNote : + return "1/8"; + case SixteenthNote : + return "1/16"; + case ThirtySecondNote : + return "1/32"; + case SixtyFourthNote : + return "1/64"; + default : + return "1/"+String().fromInt((int)noteType); + } +} diff --git a/guitar/backup/20040302/NoteType.hpp b/guitar/backup/20040302/NoteType.hpp new file mode 100644 index 0000000..f9c0567 --- /dev/null +++ b/guitar/backup/20040302/NoteType.hpp @@ -0,0 +1,86 @@ +#ifndef _GUITAR_NOTETYPE_HPP_ +#define _GUITAR_NOTETYPE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class NoteType +{ +public: + enum TypeNote{WholeNote=1,HalfNote=2,QuarterNote=4,EighthNote=8, + SixteenthNote=16,ThirtySecondNote=32,SixtyFourthNote=64}; + NoteType(TypeNote noteType=QuarterNote); + virtual ~NoteType(); + const NoteType &operator++(void); + NoteType operator++(int postfix); + const NoteType &operator--(void); + NoteType operator--(int postfix); + TypeNote getNoteType(void)const; + int toInt(void)const; + NoteType &fromInt(int noteType); + NoteType &fromString(const String &stringRep); + void setNoteType(TypeNote noteType); + String toString(void)const; + static Array enumerate(void); + static String toString(TypeNote noteType); +private: + int mNoteType; +}; + +inline +NoteType::NoteType(TypeNote noteType) +: mNoteType(noteType) +{ +} + +inline +NoteType::~NoteType() +{ +} + +inline +NoteType NoteType::operator++(int postfix) +{ + NoteType noteType(*this); + operator++(); + return noteType; +} + +inline +NoteType NoteType::operator--(int postfix) +{ + NoteType noteType(*this); + operator--(); + return noteType; +} + +inline +int NoteType::toInt(void)const +{ + return (int)mNoteType; +} + +inline +NoteType &NoteType::fromInt(int noteType) +{ + mNoteType=(TypeNote)noteType; + return *this; +} + +inline +NoteType::TypeNote NoteType::getNoteType(void)const +{ + return (TypeNote)mNoteType; +} + +inline +void NoteType::setNoteType(TypeNote noteType) +{ + mNoteType=noteType; +} +#endif + + diff --git a/guitar/backup/20040302/Range.hpp b/guitar/backup/20040302/Range.hpp new file mode 100644 index 0000000..a848e22 --- /dev/null +++ b/guitar/backup/20040302/Range.hpp @@ -0,0 +1,119 @@ +#ifndef _GUITAR_RANGE_HPP_ +#define _GUITAR_RANGE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Range; +typedef Block TabRanges; + +class Range +{ +public: + Range(); + virtual ~Range(); + int getBeginRange(void)const; + void setBeginRange(int beginRange); + int getEndRange(void)const; + void setEndRange(int endRange); + const String &getRangeName(void)const; + void setRangeName(const String &rangeName); + void autoName(void); + String toString(void)const; + String toTabbedString(void)const; +private: + enum{ShortNameLength=20}; + String createRangeName(void)const; + + int mBeginRange; + int mEndRange; + String mRangeName; +}; + +inline +Range::Range() +: mBeginRange(0), mEndRange(0) +{ +} + +inline +Range::~Range() +{ +} + +inline +int Range::getBeginRange(void)const +{ + return mBeginRange; +} + +inline +void Range::setBeginRange(int beginRange) +{ + mBeginRange=beginRange; +} + +inline +int Range::getEndRange(void)const +{ + return mEndRange; +} + +inline +void Range::setEndRange(int endRange) +{ + mEndRange=endRange; +} + +inline +const String &Range::getRangeName(void)const +{ + return mRangeName; +} + +inline +void Range::setRangeName(const String &rangeName) +{ + mRangeName=rangeName; +} + +inline +void Range::autoName(void) +{ + setRangeName(createRangeName()); +} + +inline +String Range::createRangeName(void)const +{ + String strRangeName("RANGE_"); + strRangeName+=String().fromInt(getBeginRange()); + strRangeName+=String("_"); + strRangeName+=String().fromInt(getEndRange()); + return strRangeName; +} + +inline +String Range::toString(void)const +{ + String strString(getRangeName()); + strString+=String("[")+String().fromInt(getBeginRange())+String("->")+String().fromInt(getEndRange()); + return strString; +} + +inline +String Range::toTabbedString(void)const +{ + String strItem; + String shortName; + + shortName=getRangeName(); + strItem+=shortName.substr(0,ShortNameLength-1)+"\t"; + strItem+=String().fromInt(getBeginRange())+"\t"; + strItem+=String().fromInt(getEndRange()); + return strItem; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040302/RangeDlg.cpp b/guitar/backup/20040302/RangeDlg.cpp new file mode 100644 index 0000000..5b65779 --- /dev/null +++ b/guitar/backup/20040302/RangeDlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include + +RangeDialog::RangeDialog(void) +{ + mInitHandler.setCallback(this,&RangeDialog::initHandler); + mCreateHandler.setCallback(this,&RangeDialog::createHandler); + mCloseHandler.setCallback(this,&RangeDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog::RangeDialog(const RangeDialog &someRangeDialog) +{ // private implementation + *this=someRangeDialog; +} + +RangeDialog::~RangeDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog) +{ // private implementation + return *this; +} + +bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + mTabRanges=ranges; + mMaxRange=maxRange; + mIsSelection=isSelect; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST); + mRangeList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(55)); + mRangeList->setTabStops(stops); + setRangeList(); + if(mIsSelection) + { + enable(RANGE_INSERT,false); + enable(RANGE_DELETE,false); + setCaption("Range Select"); + } + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + if(mIsSelection)handleRangeSelection(); + endDialog(true); + break; + case RANGE_INSERT : + handleRangeInsert(); + break; + case RANGE_DELETE : + handleRangeDelete(); + break; + } + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + if(mIsSelection) + { + handleRangeSelection(); + endDialog(true); + } + else handleRangeEditSelection(); + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeDialog::setRangeList(void) +{ + for(int index=0;indexaddString(range.toTabbedString()); + } + mRangeList->setCurrent(0); + return; +} + +void RangeDialog::handleRangeSelection(void) +{ + mSelection=mRangeList->getCurrent(); +} + +void RangeDialog::handleRangeEditSelection(void) +{ + RangeEditDialog rangeEditDialog; + int currSel; + + currSel=mRangeList->getCurrent(); + if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return; + Range range=rangeEditDialog.getRange(); + mTabRanges.remove(currSel); + mTabRanges.insert(&range); + mRangeList->deleteString(currSel); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeInsert(void) +{ + RangeEditDialog rangeEditDialog; + Range range; + + if(!rangeEditDialog.perform(*this,range,mMaxRange))return; + range=rangeEditDialog.getRange(); + mTabRanges.insert(&range); + mRangeList->insertString(range.toTabbedString()); +} + +void RangeDialog::handleRangeDelete(void) +{ + int currSel; + + if(-1==(currSel=mRangeList->getCurrent()))return; + if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return; + mRangeList->deleteString(currSel); + mTabRanges.remove(currSel); + currSel--; + if(currSel<0)mRangeList->setCurrent(0); + else mRangeList->setCurrent(currSel); +} diff --git a/guitar/backup/20040302/RangeDlg.hpp b/guitar/backup/20040302/RangeDlg.hpp new file mode 100644 index 0000000..0fc857c --- /dev/null +++ b/guitar/backup/20040302/RangeDlg.hpp @@ -0,0 +1,67 @@ +#ifndef _GUITAR_RANGEDLG_HPP_ +#define _GUITAR_RANGEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class TabEntry; + +class RangeDialog : public DWindow +{ +public: + RangeDialog(void); + virtual ~RangeDialog(); + bool perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect=false); + const TabRanges &getTabRanges(void)const; + int getSelection(void)const; +private: + RangeDialog(const RangeDialog &someRangeDialog); + RangeDialog &operator=(const RangeDialog &someRangeDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setRangeList(void); + void handleRangeSelection(void); + void handleRangeEditSelection(void); + void handleRangeInsert(void); + void handleRangeDelete(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mRangeList; + Point mDisplayPoint; + TabRanges mTabRanges; + bool mIsSelection; + int mMaxRange; + int mSelection; +}; + +inline +const TabRanges &RangeDialog::getTabRanges(void)const +{ + return mTabRanges; +} + +inline +int RangeDialog::getSelection(void)const +{ + return mSelection; +} +#endif diff --git a/guitar/backup/20040302/RangeEditDlg.cpp b/guitar/backup/20040302/RangeEditDlg.cpp new file mode 100644 index 0000000..e0daace --- /dev/null +++ b/guitar/backup/20040302/RangeEditDlg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +RangeEditDialog::RangeEditDialog(void) +{ + mInitHandler.setCallback(this,&RangeEditDialog::initHandler); + mCreateHandler.setCallback(this,&RangeEditDialog::createHandler); + mCloseHandler.setCallback(this,&RangeEditDialog::closeHandler); + mDestroyHandler.setCallback(this,&RangeEditDialog::destroyHandler); + mCommandHandler.setCallback(this,&RangeEditDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog::RangeEditDialog(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + *this=someRangeEditDialog; +} + +RangeEditDialog::~RangeEditDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +RangeEditDialog &RangeEditDialog::operator=(const RangeEditDialog &someRangeEditDialog) +{ // private implementation + return *this; +} + +bool RangeEditDialog::perform(GUIWindow &parentWindow,const Range &range,int maxRange) +{ + mRange=range; + mMaxRange=maxRange; + return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEEDITDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType RangeEditDialog::initHandler(CallbackData &someCallbackData) +{ + if(mRange.getRangeName().isNull()&&!mRange.getBeginRange()&&!mRange.getEndRange())setCaption("Insert Range"); + setData(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType RangeEditDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RangeEditDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + getData(); + if(!isValid())errorMessage(); + else endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RangeEditDialog::setData(void)const +{ + setText(RANGEEDIT_NAME,mRange.getRangeName()); + setText(RANGEEDIT_BEGIN,String().fromInt(mRange.getBeginRange())); + setText(RANGEEDIT_END,String().fromInt(mRange.getEndRange())); +} + +void RangeEditDialog::getData(void) +{ + String strName; + String strBegin; + String strEnd; + + getText(RANGEEDIT_NAME,strName); + mRange.setRangeName(strName); + getText(RANGEEDIT_BEGIN,strBegin); + mRange.setBeginRange(strBegin.toInt()); + getText(RANGEEDIT_END,strEnd); + mRange.setEndRange(strEnd.toInt()); +} + +bool RangeEditDialog::isValid(void) +{ + if(mRange.getRangeName().isNull()) + { + mLastError="Range name cannot be empty."; + return false; + } + if(mRange.getBeginRange()<0) + { + mLastError="Begin range position must be greater than zero."; + return false; + } + if(mRange.getBeginRange()>mRange.getEndRange()) + { + mLastError="Begin range position must be smaller than end range position."; + return false; + } + if(mRange.getEndRange()>=mMaxRange) + { + mLastError="End range position must be less than "+String().fromInt(mMaxRange); + return false; + } + return true; +} + +void RangeEditDialog::errorMessage(void) +{ + MessageBox::messageBox(*this,"Invalid range.",mLastError.str()); +} diff --git a/guitar/backup/20040302/RangeEditDlg.hpp b/guitar/backup/20040302/RangeEditDlg.hpp new file mode 100644 index 0000000..3139037 --- /dev/null +++ b/guitar/backup/20040302/RangeEditDlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_RANGEEDITDLG_HPP_ +#define _GUITAR_RANGEEDITDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class RangeEditDialog : public DWindow +{ +public: + RangeEditDialog(void); + virtual ~RangeEditDialog(); + bool perform(GUIWindow &parentWindow,const Range &range,int maxRange); + const Range &getRange(void)const; +private: + RangeEditDialog(const RangeEditDialog &someRangeEditDialog); + RangeEditDialog &operator=(const RangeEditDialog &someRangeEditDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setData(void)const; + void getData(void); + bool isValid(void); + void errorMessage(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Range mRange; + String mLastError; + int mMaxRange; +}; + +inline +const Range &RangeEditDialog::getRange(void)const +{ + return mRange; +} +#endif diff --git a/guitar/backup/20040302/Registration.hpp b/guitar/backup/20040302/Registration.hpp new file mode 100644 index 0000000..9871a01 --- /dev/null +++ b/guitar/backup/20040302/Registration.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REGISTRATION_HPP_ +#define _GUITAR_REGISTRATION_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _GUITAR_LICENSE_HPP_ +#include +#endif + +// Registration procedure +// When application first comes up it will check registry for a license + +// If no license exists and there is no "install.gid" file it will create a 30 day license +// along with an "install.gid" hidden file in the product directory. +// If no license key exists and there IS an "install.gid" file in the product directory, +// the user will be prompted to enter a valid license key. +// +// +// If a license exists it will check the validity of the license by.... +// If the license is type "non expiring", the application will proceeed normally. +// If the license is type "expiring", it will check to see if the license has expired. +// If the license has expired, a dialog box will appear, prompting the user to +// enter a valid license. +// If no valid license is entered, then the application will exit. +// In addition, a dialog box will be available from the help screen to enable the user +// to enter in additional licenses + +class Registration +{ +public: + virtual ~Registration(); + static Registration &getInstance(); + bool hasLicense(void)const; + bool hasGID(void)const; + bool getLicense(License &license)const; + bool create30DayLicense(void)const; + bool create15DayLicense(void)const; + bool createPermanentLicense(void)const; + bool createLicense(int days)const; + bool removeLicense(void); + bool applyLicense(const String &uuencodedLicense); + bool applyLicense(Block &strLicenseLines); + License generatePermanentLicense(void)const; // return a permanent license +private: + Registration(); + static SmartPointer smRegistration; + + String mRegistrationKeyName; + String mSettingsLicenseKey; + RegKey mRegKeyRegistration; +}; +#endif diff --git a/guitar/backup/20040302/ScaleDlg.cpp b/guitar/backup/20040302/ScaleDlg.cpp new file mode 100644 index 0000000..ae201a5 --- /dev/null +++ b/guitar/backup/20040302/ScaleDlg.cpp @@ -0,0 +1,389 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ScaleDialog::ScaleDialog(void) +: mInEdit(false) +{ + mInitHandler.setCallback(this,&ScaleDialog::initHandler); + mCreateHandler.setCallback(this,&ScaleDialog::createHandler); + mCloseHandler.setCallback(this,&ScaleDialog::closeHandler); + mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler); + mCommandHandler.setCallback(this,&ScaleDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog) +{ // private implementation + *this=someScaleDialog; +} + +ScaleDialog::~ScaleDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog) +{ // private implementation + return *this; +} + +bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; + return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + mScaleList->addString("BeBop Dominant"); + mScaleList->addString("BeBop Major"); + mScaleList->addString("BeBop Tonic Minor"); + mScaleList->addString("BeBop Minor"); + mScaleList->addString("Eight Tone Spanish"); + mScaleList->addString("Enigmatic"); + mScaleList->addString("Gypsy"); + mScaleList->addString("Hungarian"); + mScaleList->addString("Hungarian Minor"); + mScaleList->addString("Leading Whole Tone"); + mScaleList->addString("Lydian Minor"); + mScaleList->addString("Major Locrian"); + mScaleList->addString("Neapolitan Major"); + mScaleList->addString("Neapolitan Minor"); + mScaleList->addString("Oriental"); + mScaleList->addString("Todi"); + mScaleList->addString("Super Locrian"); + mScaleList->addString("Baroque"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); + sendMessage(SCALEDLG_MUTE,BM_SETCHECK,1,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + case SCALEDLG_SPIN : + break; + case SCALEDLG_ROOT : + handleRoot(); + break; + case SCALEDLG_LIST : + if(LBN_KILLFOCUS!=someCallbackData.wmCommandCommand()&& + LBN_SETFOCUS!=someCallbackData.wmCommandCommand()) + handleList(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void ScaleDialog::handleOk(void) +{ +} + +void ScaleDialog::handleRoot(void) +{ + String strRoot; + + if(mInEdit)return; + mInEdit=true; + getText(SCALEDLG_ROOT,strRoot); + strRoot.upper(); + if(strRoot=="0")setText(SCALEDLG_ROOT,"A"); + else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#"); + else if(strRoot=="2")setText(SCALEDLG_ROOT,"B"); + else if(strRoot=="3")setText(SCALEDLG_ROOT,"C"); + else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#"); + else if(strRoot=="5")setText(SCALEDLG_ROOT,"D"); + else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#"); + else if(strRoot=="7")setText(SCALEDLG_ROOT,"E"); + else if(strRoot=="8")setText(SCALEDLG_ROOT,"F"); + else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#"); + else if(strRoot=="10")setText(SCALEDLG_ROOT,"G"); + else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#"); + else {mInEdit=false;return;} + if(!showScale())setText(SCALEDLG_ROOT,"A"); + mInEdit=false; +} + +void ScaleDialog::handleList(void) +{ + showScale(); +} + +bool ScaleDialog::showScale(void) +{ + String strScale; + String strRoot; + DWORD current; + + current=mScaleList->getCurrent(); + getText(SCALEDLG_ROOT,strRoot); + if(Note::None==Note::getNoteType(strRoot))return false; + mScaleList->getText(strScale,current); + playScale(strRoot,strScale); + return true; +} + +void ScaleDialog::playScale(const String &root,const String &scale) +{ + if(scale=="Ionian") + { + IonianScale ionianScale(Note::getNoteType(root)); + playScale(ionianScale); + } + else if(scale=="Dorian") + { + DorianScale dorianScale(Note::getNoteType(root)); + playScale(dorianScale); + } + else if(scale=="Phrygian") + { + PhrygianScale phrygianScale(Note::getNoteType(root)); + playScale(phrygianScale); + } + else if(scale=="Lydian") + { + LydianScale lydianScale(Note::getNoteType(root)); + playScale(lydianScale); + } + else if(scale=="Mixolydian") + { + MixolydianScale mixolydianScale(Note::getNoteType(root)); + playScale(mixolydianScale); + } + else if(scale=="Aeolian") + { + AeolianScale aeolianScale(Note::getNoteType(root)); + playScale(aeolianScale); + } + else if(scale=="Locrian") + { + LocrianScale locrianScale(Note::getNoteType(root)); + playScale(locrianScale); + } + else if(scale=="Pentatonic Minor") + { + PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root)); + playScale(pentatonicMinorScale); + } + else if(scale=="Harmonic Minor") + { + HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root)); + playScale(harmonicMinorScale); + } + else if(scale=="Melodic Minor") + { + MelodicMinorScale melodicMinorScale(Note::getNoteType(root)); + playScale(melodicMinorScale); + } + else if(scale=="Dorian-II") + { + DorianIIScale dorianIIScale(Note::getNoteType(root)); + playScale(dorianIIScale); + } + else if(scale=="Lydian Augmented") + { + LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root)); + playScale(lydianAugmentedScale); + } + else if(scale=="Lydian Dominant") + { + LydianDominantScale lydianDominantScale(Note::getNoteType(root)); + playScale(lydianDominantScale); + } + else if(scale=="Locrian2") + { + Locrian2Scale locrian2Scale(Note::getNoteType(root)); + playScale(locrian2Scale); + } + else if(scale=="Altered") + { + AlteredScale alteredScale(Note::getNoteType(root)); + playScale(alteredScale); + } + else if(scale=="Diminished(Whole Step)") + { + DiminishedWholeScale diminishedWholeScale(Note::getNoteType(root)); + playScale(diminishedWholeScale); + } + else if(scale=="Diminished(Half Step)") + { + DiminishedHalfScale diminishedHalfScale(Note::getNoteType(root)); + playScale(diminishedHalfScale); + } + else if(scale=="Whole Tone") + { + WholeToneScale wholeToneScale(Note::getNoteType(root)); + playScale(wholeToneScale); + } + else if(scale=="BeBop Dominant") + { + BeBopDominantScale bebopDominantScale(Note::getNoteType(root)); + playScale(bebopDominantScale); + } + else if(scale=="BeBop Major") + { + BeBopMajorScale bebopMajorScale(Note::getNoteType(root)); + playScale(bebopMajorScale); + } + else if(scale=="BeBop Tonic Minor") + { + BeBopTonicMinorScale bebopTonicMinorScale(Note::getNoteType(root)); + playScale(bebopTonicMinorScale); + } + else if(scale=="BeBop Minor") + { + BeBopMinorScale bebopMinorScale(Note::getNoteType(root)); + playScale(bebopMinorScale); + } + else if(scale=="Eight Tone Spanish") + { + EightToneSpanishScale eightToneSpanishScale(Note::getNoteType(root)); + playScale(eightToneSpanishScale); + } + else if(scale=="Enigmatic") + { + EnigmaticScale enigmaticScale(Note::getNoteType(root)); + playScale(enigmaticScale); + } + else if(scale=="Gypsy") + { + GypsyScale gypsyScale(Note::getNoteType(root)); + playScale(gypsyScale); + } + else if(scale=="Hungarian") + { + HungarianScale hungarianScale(Note::getNoteType(root)); + playScale(hungarianScale); + } + else if(scale=="Hungarian Minor") + { + HungarianMinorScale hungarianMinorScale(Note::getNoteType(root)); + playScale(hungarianMinorScale); + } + else if(scale=="Leading Whole Tone") + { + LeadingWholeToneScale leadingWholeToneScale(Note::getNoteType(root)); + playScale(leadingWholeToneScale); + } + else if(scale=="Lydian Minor") + { + LydianMinorScale lydianMinorScale(Note::getNoteType(root)); + playScale(lydianMinorScale); + } + else if(scale=="Major Locrian") // same as LydianMinor + { + MajorLocrianScale majorLocrianScale(Note::getNoteType(root)); + playScale(majorLocrianScale); + } + else if(scale=="Neapolitan Major") + { + NeapolitanMajorScale neapolitanMajorScale(Note::getNoteType(root)); + playScale(neapolitanMajorScale); + } + else if(scale=="Neapolitan Minor") + { + NeapolitanMinorScale neapolitanMinorScale(Note::getNoteType(root)); + playScale(neapolitanMinorScale); + } + else if(scale=="Oriental") + { + OrientalScale orientalScale(Note::getNoteType(root)); + playScale(orientalScale); + } + else if(scale=="Todi") + { + TodiScale todiScale(Note::getNoteType(root)); + playScale(todiScale); + } + else if(scale=="Super Locrian") + { + SuperLocrianScale superLocrianScale(Note::getNoteType(root)); + playScale(superLocrianScale); + } + else if(scale=="Baroque") + { + BaroqueScale baroqueScale(Note::getNoteType(root)); + playScale(baroqueScale); + } +} + +void ScaleDialog::playScale(const Scale &scale) +{ + int command=BST_CHECKED==sendMessage(SCALEDLG_MUTE,BM_GETCHECK,0,0L)?CBCommands::FBShowScale:CBCommands::FBPlayScale; + CallbackData cbData(command,(LPARAM)&scale); + CursorControl cursorControl; + cursorControl.waitCursor(true); + mPlayNoteHandler.callback(cbData); + cursorControl.waitCursor(false); +} + + diff --git a/guitar/backup/20040302/ScaleDlg.hpp b/guitar/backup/20040302/ScaleDlg.hpp new file mode 100644 index 0000000..291ebaa --- /dev/null +++ b/guitar/backup/20040302/ScaleDlg.hpp @@ -0,0 +1,59 @@ +#ifndef _GUITAR_SCALEDLG_HPP_ +#define _GUITAR_SCALEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif + +class Scale; + +class ScaleDialog : public DWindow +{ +public: + ScaleDialog(void); + virtual ~ScaleDialog(); + bool perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer); +private: + ScaleDialog(const ScaleDialog &someScaleDialog); + ScaleDialog &operator=(const ScaleDialog &someScaleDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleOk(void); + void handleRoot(void); + void handleList(void); + bool showScale(void); + void playScale(const Scale &scale); + void playScale(const String &root,const String &scale); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mScaleList; + SmartPointer mMIDIDevice; + CallbackPointer mPlayNoteHandler; + Fretboard mFretboard; + bool mInEdit; +}; +#endif diff --git a/guitar/backup/20040302/ScrollInfo.cpp b/guitar/backup/20040302/ScrollInfo.cpp new file mode 100644 index 0000000..76ba573 --- /dev/null +++ b/guitar/backup/20040302/ScrollInfo.cpp @@ -0,0 +1,136 @@ +#include + +bool ScrollInfo::pageDown(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()+PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +bool ScrollInfo::pageUp(void) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + yNew=currScrolly()-PageIncrement; + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return false; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); + return true; +} + +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + diff --git a/guitar/backup/20040302/ScrollInfo.hpp b/guitar/backup/20040302/ScrollInfo.hpp new file mode 100644 index 0000000..2dc42c1 --- /dev/null +++ b/guitar/backup/20040302/ScrollInfo.hpp @@ -0,0 +1,274 @@ +#ifndef _GUITAR_SCROLLINFO_HPP_ +#define _GUITAR_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); + bool pageUp(void); + bool pageDown(void); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + + if(scrollableObjectWidth()==width&&scrollableObjectHeight()==height)return; + + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_REGISTRY_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class Sequencer : private MIDIOutputDevice +{ +public: + Sequencer(); + virtual ~Sequencer(); + bool midiEvent(const PureEvent &somePureEvent); + bool clearNotes(void); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + MIDIOutputDevice &getDevice(void); +private: + void changeProgram(void); +}; + +inline +Sequencer::Sequencer() +: MIDIOutputDevice(Registry().getMIDIOutputDevice()) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::Sequencer] Sequencer()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + changeProgram(); +} + +inline +Sequencer::~Sequencer() +{ + GlobalDefs::outDebug("[Sequencer::Sequencer] Sequencer()",GlobalDefs::Info); + closeDevice(); +} + +inline +bool Sequencer::midiEvent(const PureEvent &somePureEvent) +{ + GlobalDefs::outDebug(String("[Sequencer::midiEvent] ")+somePureEvent.toString(),GlobalDefs::Info); + return MIDIOutputDevice::midiEvent(somePureEvent); +} + +inline +bool Sequencer::hasDevice(void)const +{ + GlobalDefs::outDebug(String("[Sequencer::hasDevice] "),GlobalDefs::Info); + return MIDIOutputDevice::hasDevice(); +} + +inline +void Sequencer::closeDevice(void) +{ + GlobalDefs::outDebug(String("[Sequencer::closeDevice] "),GlobalDefs::Info); + MIDIOutputDevice::closeDevice(); +} + +inline +bool Sequencer::openDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::openDevice] registry.getMIDIOutputDevice()")+registry.getMIDIOutputDevice(),GlobalDefs::Info); + if(!MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()))return false; + changeProgram(); + return true; +} + +inline +bool Sequencer::clearNotes(void) +{ + GlobalDefs::outDebug(String("[Sequencer::clearNotes]"),GlobalDefs::Info); + return midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); +} + +inline +MIDIOutputDevice &Sequencer::getDevice(void) +{ + Registry registry; + + GlobalDefs::outDebug(String("[Sequencer::getDevice]"),GlobalDefs::Info); + if(!hasDevice()) + { + GlobalDefs::outDebug(String("[Sequencer::getDevice] OpenDevice"),GlobalDefs::Info); + MIDIOutputDevice::openDevice(registry.getMIDIOutputDevice()); + changeProgram(); + } + return (MIDIOutputDevice&)*this; +} + +inline +void Sequencer::changeProgram(void) +{ + Registry registry; + GlobalDefs::outDebug(String("[Sequencer::changeProgram]"),GlobalDefs::Info); + midiEvent(ProgramChange(registry.getInstrument().program()).getEvent()); +} +#endif diff --git a/guitar/backup/20040302/TabEntry.cpp b/guitar/backup/20040302/TabEntry.cpp new file mode 100644 index 0000000..f9bacba --- /dev/null +++ b/guitar/backup/20040302/TabEntry.cpp @@ -0,0 +1,143 @@ +#include +#include +#include +#include +#include + +TabEntry::TabEntry(const TabEntry &entry) +{ + *this=entry; +} + +TabEntry &TabEntry::operator=(const TabEntry &entry) +{ + remove(); + for(int index=0;index&)*this).operator[](index)==((TabEntry&)entry)[index]))return false; + } + return true; +} + +bool TabEntry::play(MIDIOutputDevice &midiDevice,bool useDelay)const +{ + if(!midiDevice.hasDevice())return false; +// midiDevice.midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); + for(int index=0;index::remove(entryIndex); + return true; +} + +String TabEntry::toString(void)const +{ + String str; + + str+="TABENTRY "; + for(int index=0;index&)*this).operator[](index).toString(); + if(index +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif +#ifndef _GUITAR_TIMING_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class TabEntry; +typedef Block TabEntries; + +class TabEntry : public Block +{ +public: + TabEntry(); + TabEntry(const TabEntry &entry); + virtual ~TabEntry(); + bool play(MIDIOutputDevice &midiDevice,bool useDelay=true)const; + bool operator==(const TabEntry &entry)const; + TabEntry &operator=(const TabEntry &entry); + const NoteType &getNoteType(void)const; + void setNoteType(const NoteType ¬eType); + String toString(void)const; + bool fromString(String strText); + bool fromChord(const Music::Chord &chord); + bool contains(int string,int &entryIndex); + bool contains(int string); + bool remove(int string,int fret); + void remove(void); + bool addFrettedNote(int string,const FrettedNote &frettedNote); + bool setFrettedNote(int string,const FrettedNote &frettedNote); + const String &getComment(void)const; + void setComment(const String &comment); + bool hasSeparator(void)const; + void hasSeparator(bool hasSeparator); +private: + void delay(void)const; + + NoteType mNoteType; + String mComment; + bool mHasSeparator; +}; + +inline +TabEntry::TabEntry() +: mHasSeparator(false) +{ +} + +inline +TabEntry::~TabEntry() +{ +} + +inline +const NoteType &TabEntry::getNoteType(void)const +{ + return mNoteType; +} + +inline +void TabEntry::setNoteType(const NoteType ¬eType) +{ + mNoteType=noteType; +} + +inline +void TabEntry::remove(void) +{ + Block::remove(); +} + +inline +const String &TabEntry::getComment(void)const +{ + return mComment; +} + +inline +void TabEntry::setComment(const String &comment) +{ + mComment=comment; +} + +inline +bool TabEntry::hasSeparator(void)const +{ + return mHasSeparator; +} + +inline +void TabEntry::hasSeparator(bool hasSeparator) +{ + mHasSeparator=hasSeparator; +} +#endif diff --git a/guitar/backup/20040302/TabLines.cpp b/guitar/backup/20040302/TabLines.cpp new file mode 100644 index 0000000..a56ae0d --- /dev/null +++ b/guitar/backup/20040302/TabLines.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include + +// returns -1 on error, 1 if added to entry, 0 otherwise + +int TabLines::firstElement(TabEntry &entry,Fretboard &fretboard) +{ + TabElement element; + + entry.remove(); + for(int index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabEntry; +class Fretboard; + +typedef Element TabElement[6]; + +class TabLines : public Array +{ +public: + enum{NumLines=6}; + TabLines(); + int firstElement(TabEntry &entry,Fretboard &fretboard); + int nextElement(TabEntry &entry,Fretboard &fretboard); + virtual ~TabLines(); +private: + bool haveElement(TabElement &elements)const; + bool validate(Element &elements)const; + void insert(TabEntry &entry,TabElement &elements,Fretboard &fretboard); + void synchronize(void); +}; + +inline +TabLines::TabLines() +{ + size(NumLines); +} + +inline +TabLines::~TabLines() +{ +} +#endif diff --git a/guitar/backup/20040302/TabView.cpp b/guitar/backup/20040302/TabView.cpp new file mode 100644 index 0000000..ba2f85b --- /dev/null +++ b/guitar/backup/20040302/TabView.cpp @@ -0,0 +1,95 @@ +#include + +TabView::TabView(void) +{ + mCreateHandler.setCallback(this,&TabView::createHandler); + mSizeHandler.setCallback(this,&TabView::sizeHandler); + mPaintHandler.setCallback(this,&TabView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&TabView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&TabView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabView::leftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +TabView::~TabView() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + MDIWindow::removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType TabView::createHandler(CallbackData &someCallbackData) +{ + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType TabView::sizeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType TabView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::verticalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void TabView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String TabView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void TabView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(LTGRAY_BRUSH); +} + +void TabView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20040302/TabView.hpp b/guitar/backup/20040302/TabView.hpp new file mode 100644 index 0000000..6f9ef25 --- /dev/null +++ b/guitar/backup/20040302/TabView.hpp @@ -0,0 +1,42 @@ +#ifndef _GUITAR_TABVIEW_HPP_ +#define _GUITAR_TABVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class StatusBarEx; + +class TabView : public MDIWindow +{ +public: + TabView(void); + virtual ~TabView(); + String getTitle(void)const; +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,WindowWidth=565,WindowHeight=210}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + SmartPointer mStatusBar; +}; +#endif diff --git a/guitar/backup/20040302/TabWriter.cpp b/guitar/backup/20040302/TabWriter.cpp new file mode 100644 index 0000000..d3f5222 --- /dev/null +++ b/guitar/backup/20040302/TabWriter.cpp @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + + GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug); + if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb")) + { + GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug); + return false; + } + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + initLines(); + setHeader(); + for(int index=0,entryCount=0;indexMaxItems) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outFile); + outFile.writeLine(String(" ")); + initLines(); + setHeader(); + entryCount=0; + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_FILE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_LINEPARSER_HPP_ +#include +#endif + +class TabWriter : public Array +{ +public: + TabWriter(); + virtual ~TabWriter(); + bool write(TabEntries &entries,const String &strPathTabFile); +private: + enum {MaxItems=30,NumLines=6}; + void writeLines(File &outFile); + void initLines(void); + void setHeader(void); + void synchronize(void); +}; + +inline +TabWriter::TabWriter() +{ +} + +inline +TabWriter::~TabWriter() +{ +} +#endif diff --git a/guitar/backup/20040302/Tablature.hpp b/guitar/backup/20040302/Tablature.hpp new file mode 100644 index 0000000..c0c1caa --- /dev/null +++ b/guitar/backup/20040302/Tablature.hpp @@ -0,0 +1,96 @@ +#ifndef _GUITAR_TABLATURE_HPP_ +#define _GUITAR_TABLATURE_HPP_ +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_TABLINES_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif + +class GUIWindow; +class TabPage; + +class Tablature +{ +public: + typedef enum LastError{None,FileOpenError,NoTabsParsedError,NoFrettedNotesError}; + Tablature(); + Tablature(const String &pathFileName); + virtual ~Tablature(); + bool open(const String &pathFileTablature); // open tablature file + bool import(String pathFileTablature); // import tablature file into project + bool save(void); // save tablature file + bool saveAs(const String &pathFileTablature); // save tablature file as... + bool openProject(const String &pathFileName); // open existing project file + bool saveProject(const String &pathFileName=String()); // save current project + bool play(MIDIOutputDevice &midiDevice); + LastError getLastError(void)const; + const String &getPathFileTablature(void)const; + const String &getPathFileProject(void)const; + const TabEntries &getTabEntries(void)const; + void setTabEntries(const TabEntries &entries); + const TabRanges &getTabRanges(void)const; + void setTabRanges(const TabRanges &ranges); + static String getPathFileProject(const String &pathFileTablature); +private: + bool loadTabFile(const String &pathFileName); + bool parseTab(void); + bool isTabLine(const String &strLine,int &startElement)const; + bool setTypeAt(int index,const NoteType ¬eType); + void parseTypes(String strLine); + void parseRange(String strLine); + void parseComment(String strLine); + void parseSeparator(String strLine); + + String getTypes(void)const; + + TabEntries mTabEntries; + TabRanges mTabRanges; + Block mTablature; + Fretboard mFretboard; + String mPathFileName; + LastError mLastError; + String mPathFileTablature; + String mPathFileProject; +}; + +inline +Tablature::Tablature() +{ +} + +inline +Tablature::Tablature(const String &pathFileName) +{ + open(pathFileName); +} + +inline +Tablature::~Tablature() +{ +} + +inline +Tablature::LastError Tablature::getLastError(void)const +{ + return mLastError; +} + +inline +const String &Tablature::getPathFileTablature(void)const +{ + return mPathFileTablature; +} + +inline +const String &Tablature::getPathFileProject(void)const +{ + return mPathFileProject; +} +#endif diff --git a/guitar/backup/20040302/Timing.cpp b/guitar/backup/20040302/Timing.cpp new file mode 100644 index 0000000..f638d7a --- /dev/null +++ b/guitar/backup/20040302/Timing.cpp @@ -0,0 +1,138 @@ +#include +#include +#include + +int Timing::mMicrosecondsPerQuarterNote=Timing::microsecondsPerQuarterNote(Registry().getMicrosecondsPerQuarterNote()); +int Timing::mMillisecondsPerWholeNote; +int Timing::mMillisecondsPerHalfNote; +int Timing::mMillisecondsPerQuarterNote; +int Timing::mMillisecondsPerEigthNote; +int Timing::mMillisecondsPerSixteenthNote; +int Timing::mMillisecondsPerThirtySecondNote; +int Timing::mMillisecondsPerSixtyFourthNote; + +int Timing::microsecondsPerQuarterNote(int microsecondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=microsecondsPerQuarterNote; + mMillisecondsPerQuarterNote=(double)microsecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; + return mMicrosecondsPerQuarterNote; +} + +int Timing::microsecondsPerQuarterNote(void) +{ + return mMicrosecondsPerQuarterNote; +} + +void Timing::secondsPerQuarterNote(float secondsPerQuarterNote) +{ + mMicrosecondsPerQuarterNote=secondsPerQuarterNote*1000000.00;; + mMillisecondsPerQuarterNote=(double)mMicrosecondsPerQuarterNote*.001; + mMillisecondsPerHalfNote=mMillisecondsPerQuarterNote*2; + mMillisecondsPerWholeNote=mMillisecondsPerQuarterNote*4; + mMillisecondsPerEigthNote=mMillisecondsPerQuarterNote/2; + mMillisecondsPerSixteenthNote=mMillisecondsPerQuarterNote/4; + mMillisecondsPerThirtySecondNote=mMillisecondsPerQuarterNote/8; + mMillisecondsPerSixtyFourthNote=mMillisecondsPerQuarterNote/16; +} + +int Timing::millisecondsPerWholeNote(void) +{ + return mMillisecondsPerWholeNote; +} + +int Timing::millisecondsPerHalfNote(void) +{ + return mMillisecondsPerHalfNote; +} + +int Timing::millisecondsPerQuarterNote(void) +{ + return mMillisecondsPerQuarterNote; +} + +int Timing::millisecondsPerEightNote(void) +{ + return mMillisecondsPerEigthNote; +} + +int Timing::millisecondsPerSixteenthNote(void) +{ + return mMillisecondsPerSixteenthNote; +} + +int Timing::millisecondsPerThirtySecondNote(void) +{ + return mMillisecondsPerThirtySecondNote; +} + +int Timing::millisecondsPerSixtyFourthNote(void) +{ + return mMillisecondsPerSixtyFourthNote; +} + +int Timing::getDelay(const NoteType ¬eType) +{ + switch(noteType.getNoteType()) + { + case NoteType::WholeNote : + return millisecondsPerWholeNote(); + case NoteType::HalfNote : + return millisecondsPerHalfNote(); + case NoteType::QuarterNote : + return millisecondsPerQuarterNote(); + case NoteType::EighthNote : + return millisecondsPerEightNote(); + case NoteType::SixteenthNote : + return millisecondsPerSixteenthNote(); + case NoteType::ThirtySecondNote : + return millisecondsPerThirtySecondNote(); + case NoteType::SixtyFourthNote : + return millisecondsPerSixtyFourthNote(); + default : + return millisecondsPerSixtyFourthNote(); + } +} + +String Timing::toString(void) +{ + String strTiming; + strTiming+=String("1/1=")+String().fromInt(millisecondsPerWholeNote())+String("ms, "); + strTiming+=String("1/2=")+String().fromInt(millisecondsPerHalfNote())+String("ms, "); + strTiming+=String("1/4=")+String().fromInt(millisecondsPerQuarterNote())+String("ms, "); + strTiming+=String("1/8=")+String().fromInt(millisecondsPerEightNote())+String("ms, "); + strTiming+=String("1/16=")+String().fromInt(millisecondsPerSixteenthNote())+String("ms, "); + strTiming+=String("1/32=")+String().fromInt(millisecondsPerThirtySecondNote())+String("ms, "); + strTiming+=String("1/64=")+String().fromInt(millisecondsPerSixtyFourthNote())+String("ms, "); + return strTiming; +} + + +/* +microseconds per quarter note = 631578 +milliseconds per quarter note = 631578/1000 = 631 + 631578*.001 = 631 + +msecs per qtr note=usecs per qtr note *.001 + +quarter note = msecs per 4th note +eigth note = msecs/2 +sixteenth note = msecs/4 +thirty second note = msecs/8 +sixty fourth note = msecs/16 + +(ie) +microsecs millisecs 4th note 8th note 16th note 32nd note 64th note +--------- --------- -------- -------- --------- --------- --------- + 631578 631 631 315 157 78 39 + +options +seconds per qtr note: .5 + +msecs per qtr note=(seconds_per_qtr_note*1000) +*/ \ No newline at end of file diff --git a/guitar/backup/20040302/Timing.hpp b/guitar/backup/20040302/Timing.hpp new file mode 100644 index 0000000..96bcf39 --- /dev/null +++ b/guitar/backup/20040302/Timing.hpp @@ -0,0 +1,48 @@ +#ifndef _GUITAR_TIMING_HPP_ +#define _GUITAR_TIMING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTETYPE_HPP_ +#include +#endif + +class Timing +{ +public: + static int microsecondsPerQuarterNote(int microsecondsPerQuarterNote); + static int microsecondsPerQuarterNote(void); + static void secondsPerQuarterNote(float secondsPerQuarterNote); + static int millisecondsPerWholeNote(void); + static int millisecondsPerHalfNote(void); + static int millisecondsPerQuarterNote(void); + static int millisecondsPerEightNote(void); + static int millisecondsPerSixteenthNote(void); + static int millisecondsPerThirtySecondNote(void); + static int millisecondsPerSixtyFourthNote(void); + static int getDelay(const NoteType ¬eType); + static String toString(void); +private: + Timing(); + virtual ~Timing(); + static int mMicrosecondsPerQuarterNote; + static int mMillisecondsPerWholeNote; + static int mMillisecondsPerHalfNote; + static int mMillisecondsPerQuarterNote; + static int mMillisecondsPerEigthNote; + static int mMillisecondsPerSixteenthNote; + static int mMillisecondsPerThirtySecondNote; + static int mMillisecondsPerSixtyFourthNote; +}; + +inline +Timing::Timing() +{ +} + +inline +Timing::~Timing() +{ +} +#endif + diff --git a/guitar/backup/20040302/Tuning.cpp b/guitar/backup/20040302/Tuning.cpp new file mode 100644 index 0000000..c4b1cb6 --- /dev/null +++ b/guitar/backup/20040302/Tuning.cpp @@ -0,0 +1,20 @@ +#include +#include + +void Tuning::setStandardTuning(void) +{ + size(StandardTuningStrings); + operator[](0)=Note(Note::E,3); + operator[](1)=Note(Note::A,3); + operator[](2)=Note(Note::D,4); + operator[](3)=Note(Note::G,4); + operator[](4)=Note(Note::B,4); + operator[](5)=Note(Note::E,operator[](4).getOctave()+1); +} + +// virtuals + +int Tuning::getDelay(void)const +{ + return Delay; +} diff --git a/guitar/backup/20040302/Tuning.hpp b/guitar/backup/20040302/Tuning.hpp new file mode 100644 index 0000000..d4d41e7 --- /dev/null +++ b/guitar/backup/20040302/Tuning.hpp @@ -0,0 +1,43 @@ +#ifndef _GUITAR_TUNING_HPP_ +#define _GUITAR_TUNING_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif + +class Tuning : public Notes +{ +public: + enum {StandardTuningStrings=6,Delay=1000}; + Tuning(); + virtual ~Tuning(); + int getStrings(void)const; + void setStrings(int strings); + void setStandardTuning(void); +protected: + virtual int getDelay(void)const; +private: +}; + +inline +Tuning::Tuning() +{ + setStandardTuning(); +} + +inline +Tuning::~Tuning() +{ +} + +inline +int Tuning::getStrings(void)const +{ + return size(); +} + +inline +void Tuning::setStrings(int strings) +{ + size(strings); +} +#endif diff --git a/guitar/backup/20040302/chordmain.cpp b/guitar/backup/20040302/chordmain.cpp new file mode 100644 index 0000000..fc9ac30 --- /dev/null +++ b/guitar/backup/20040302/chordmain.cpp @@ -0,0 +1,33 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDef; + String strEnum; + File inFile("tabs/allchords.tab"); + File rcFile("chords.rc","wb"); + File hFile("chords.h","wb"); + int count(21000); + + rcFile.writeLine("#include "); + rcFile.writeLine("STRINGTABLE DISCARDABLE"); + rcFile.writeLine("BEGIN"); + while(inFile.readLine(strLine)) + { + strEnum="STRING_"+String().fromInt(count); + strDef=strEnum; + strDef+="\t\""; + strDef+=strLine.betweenString(0,':')+"\""; + rcFile.writeLine(strDef); + hFile.writeLine(String("#define ")+strEnum+String(" ")+String().fromInt(count)); + count++; + } + rcFile.writeLine("END"); + return 0; + +// MainFrame mainFrame; +// mainFrame.createWindow("TabMaster","TabMaster v1.00a","mainMenu","APP_ICON"); +// return mainFrame.messageLoop(); +} diff --git a/guitar/backup/20040302/guitar.h b/guitar/backup/20040302/guitar.h new file mode 100644 index 0000000..c519582 --- /dev/null +++ b/guitar/backup/20040302/guitar.h @@ -0,0 +1,1278 @@ +#ifndef _GUITAR_GUITAR_H_ +#define _GUITAR_GUITAR_H_ + +#include "windows.h" + +// +#define IDC_STATIC -1 + +// CURSOR +#define HARROW 1000 + +// LICENSE DIALOG +#define LICENSE_DIALOG_LICENSE 1077 +#define LICENSE_DIALOG_REQUEST_LICENSE 1076 + +// ENTER CHORD DIALOG +#define ENTERCHORD_EDIT 1082 +#define ENTERCHORD_EXAMPLES 1083 + + +// MIDIDIALOG +#define MIDI_TRACK1 1042 +#define MIDI_TRACK2 1043 +#define MIDI_TRACK3 1044 +#define MIDI_TRACK4 1045 +#define MIDI_TRACK5 1046 +#define MIDI_TRACK6 1047 +#define MIDI_TRACK7 1048 +#define MIDI_TRACK8 1049 +#define MIDI_TRACK9 1050 +#define MIDI_TRACK10 1051 +#define MIDI_TRACK11 1052 +#define MIDI_TRACK12 1053 +#define MIDI_TRACK13 1054 +#define MIDI_TRACK14 1055 +#define MIDI_TRACK15 1056 +#define MIDI_TRACK16 1057 +#define MIDI_EVENTS_TRACK1 1060 +#define MIDI_EVENTS_TRACK2 1061 +#define MIDI_EVENTS_TRACK3 1062 +#define MIDI_EVENTS_TRACK4 1063 +#define MIDI_EVENTS_TRACK5 1064 +#define MIDI_EVENTS_TRACK6 1065 +#define MIDI_EVENTS_TRACK7 1066 +#define MIDI_EVENTS_TRACK8 1067 +#define MIDI_EVENTS_TRACK9 1068 +#define MIDI_EVENTS_TRACK10 1069 +#define MIDI_EVENTS_TRACK11 1070 +#define MIDI_EVENTS_TRACK12 1071 +#define MIDI_EVENTS_TRACK13 1072 +#define MIDI_EVENTS_TRACK14 1073 +#define MIDI_EVENTS_TRACK15 1074 +#define MIDI_EVENTS_TRACK16 1075 + +// FRETENTRY DIALOG +#define FRETENTRY_FRET 1037 +#define FRETENTRY_ACTION 1038 +#define FRETENTRY_STRING 1039 +#define FRETENTRY_DURATION 1040 + +// FOR SCALES DIALOG +#define SCALEDLG_LIST 1024 +#define SCALEDLG_ROOT 1025 +#define SCALEDLG_SPIN 1026 +#define SCALEDLG_MUTE 1027 + + +// FOR RANGE EDIT DIALOG +#define RANGEEDIT_NAME 1016 +#define RANGEEDIT_BEGIN 1017 +#define RANGEEDIT_END 1018 + +// FOR RANGE DIALOG +#define RANGE_LIST 1000 +#define RANGE_INSERT 1022 +#define RANGE_DELETE 1023 + +// FOR SETTINGS DIALOG +#define SETTINGS_MICROSECSPERQTRNOTE 1011 +#define SETTINGS_DEFAULTS 1012 +#define SETTINGS_SHOWACTION 1013 +#define SETTINGS_SHOWNOTES 1014 +#define SETTINGS_INSTRUMENT 1015 +#define SETTINGS_MIDIOUT 1024 + +// FOR CHORD DIALOG +#define CHORDS_LIST 1000 +#define CHORDS_COUNT 1009 + +// FOR TAB ENTRY DIALOG +#define TABENTRY_LIST 1004 +#define TABENTRY_NOTETYPE 1005 +#define TABENTRY_REMAINDER 1006 +#define TABENTRY_COMMENTS 1007 +#define TABENTRY_SEPARATOR 1008 + + + +#define MENU_FILE_OPEN 10000 +#define MENU_FILE_EXIT 10001 +#define MENU_FILE_NEW 10002 +#define MENU_FILE_SAVE 10003 +#define MENU_FILE_SAVEAS 10004 +#define MENU_FILE_CLOSE 10005 +#define MENU_FILE_PRINT 10006 +#define MENU_FILE_IMPORT 10007 +#define MENU_FILE_MIDI_IMPORT 10008 + +#define MENU_HISTOGRAM_HISTOGRAM 10100 + +#define MENU_TABLATURE_PLAY 10500 +#define MENU_TABLATURE_PLAYTOEND 10501 +#define MENU_TABLATURE_PLAYREPEATED 10502 +#define MENU_TABLATURE_PLAYRANGE 10503 +#define MENU_TABLATURE_PLAYRANGE_REPEATED 10504 +#define MENU_TABLATURE_STOP 10505 +#define MENU_TABLATURE_ENTRYPROPS 10506 +#define MENU_TABLATURE_SETSTARTRANGE 10507 +#define MENU_TABLATURE_SETENDRANGE 10508 + +#define MENU_OPTIONS_INCREASETEMPO 10601 +#define MENU_OPTIONS_DECREASETEMPO 10602 +#define MENU_OPTIONS_SETTINGS 10603 + +#define MENU_VIEW_FRETBOARD 10700 + +#define MENU_CHORDS_LOOKUP 10800 +#define MENU_CHORDS_ENTER 10801 + +#define MENU_SCALES_SHOW 10900 + +#define MENU_FRETBOARD_CLEAR 11000 +#define MENU_FRETBOARD_SHOWALLPOSITIONS 11001 + +#define MENU_EDIT_CUT 12000 +#define MENU_EDIT_COPY 12001 +#define MENU_EDIT_PASTE 12002 +#define MENU_EDIT_RANGES 12003 + +#define MENU_HELP_INDEX 12100 +#define MENU_HELP_APPLY_LICENSE 12101 +#define MENU_HELP_ABOUT 12102 + +#define TABACCELERATORS 10000 + +// STRINGS + +#define STRING_NOTITLE 19000 +#define STRING_EDITHINT 19001 +#define STRING_PRJEXTENSION 19002 +#define STRING_PRJALLEXTENSION 19003 +#define STRING_TABEXTENSION 19004 +#define STRING_BROWSERKEY 19005 +#define STRING_BROWSERKEYALT 19006 +#define STRING_BROWSERCOMMAND 19007 +#define STRING_HOST 19008 +#define STRING_HELPPAGE 19009 +#define STRING_MIDIEXTENSION 19010 +#define STRING_PURCHASE_URL 19011 + +#define STRING_TABVIEWWINDOWCLASSNAME 20000 +#define STRING_FRETVIEWWINDOWCLASSNAME 20001 +#define STRING_REGISTRYKEYNAME 20002 +#define STRING_HISTORYKEYNAME 20003 +#define STRING_HISTORYKEYSHORTNAME 20004 +#define STRING_SETTINGSKEYNAME 20005 +#define STRING_SETTINGSINSTRUMENT 20006 +#define STRING_SETTINGSACTION 20007 +#define STRING_SETTINGSNOTELETTERS 20008 +#define STRING_SETTINGSMICROSECONDSPERQUARTERNOTE 20009 +#define STRING_REGISTRATIONKEYNAME 20010 +#define STRING_SETTINGSLICENSE 20011 +#define STRING_SETTINGSMIDIOUTPUT 20012 + + +// chord definitions + +#define STRING_21000 21000 +#define STRING_21001 21001 +#define STRING_21002 21002 +#define STRING_21003 21003 +#define STRING_21004 21004 +#define STRING_21005 21005 +#define STRING_21006 21006 +#define STRING_21007 21007 +#define STRING_21008 21008 +#define STRING_21009 21009 +#define STRING_21010 21010 +#define STRING_21011 21011 +#define STRING_21012 21012 +#define STRING_21013 21013 +#define STRING_21014 21014 +#define STRING_21015 21015 +#define STRING_21016 21016 +#define STRING_21017 21017 +#define STRING_21018 21018 +#define STRING_21019 21019 +#define STRING_21020 21020 +#define STRING_21021 21021 +#define STRING_21022 21022 +#define STRING_21023 21023 +#define STRING_21024 21024 +#define STRING_21025 21025 +#define STRING_21026 21026 +#define STRING_21027 21027 +#define STRING_21028 21028 +#define STRING_21029 21029 +#define STRING_21030 21030 +#define STRING_21031 21031 +#define STRING_21032 21032 +#define STRING_21033 21033 +#define STRING_21034 21034 +#define STRING_21035 21035 +#define STRING_21036 21036 +#define STRING_21037 21037 +#define STRING_21038 21038 +#define STRING_21039 21039 +#define STRING_21040 21040 +#define STRING_21041 21041 +#define STRING_21042 21042 +#define STRING_21043 21043 +#define STRING_21044 21044 +#define STRING_21045 21045 +#define STRING_21046 21046 +#define STRING_21047 21047 +#define STRING_21048 21048 +#define STRING_21049 21049 +#define STRING_21050 21050 +#define STRING_21051 21051 +#define STRING_21052 21052 +#define STRING_21053 21053 +#define STRING_21054 21054 +#define STRING_21055 21055 +#define STRING_21056 21056 +#define STRING_21057 21057 +#define STRING_21058 21058 +#define STRING_21059 21059 +#define STRING_21060 21060 +#define STRING_21061 21061 +#define STRING_21062 21062 +#define STRING_21063 21063 +#define STRING_21064 21064 +#define STRING_21065 21065 +#define STRING_21066 21066 +#define STRING_21067 21067 +#define STRING_21068 21068 +#define STRING_21069 21069 +#define STRING_21070 21070 +#define STRING_21071 21071 +#define STRING_21072 21072 +#define STRING_21073 21073 +#define STRING_21074 21074 +#define STRING_21075 21075 +#define STRING_21076 21076 +#define STRING_21077 21077 +#define STRING_21078 21078 +#define STRING_21079 21079 +#define STRING_21080 21080 +#define STRING_21081 21081 +#define STRING_21082 21082 +#define STRING_21083 21083 +#define STRING_21084 21084 +#define STRING_21085 21085 +#define STRING_21086 21086 +#define STRING_21087 21087 +#define STRING_21088 21088 +#define STRING_21089 21089 +#define STRING_21090 21090 +#define STRING_21091 21091 +#define STRING_21092 21092 +#define STRING_21093 21093 +#define STRING_21094 21094 +#define STRING_21095 21095 +#define STRING_21096 21096 +#define STRING_21097 21097 +#define STRING_21098 21098 +#define STRING_21099 21099 +#define STRING_21100 21100 +#define STRING_21101 21101 +#define STRING_21102 21102 +#define STRING_21103 21103 +#define STRING_21104 21104 +#define STRING_21105 21105 +#define STRING_21106 21106 +#define STRING_21107 21107 +#define STRING_21108 21108 +#define STRING_21109 21109 +#define STRING_21110 21110 +#define STRING_21111 21111 +#define STRING_21112 21112 +#define STRING_21113 21113 +#define STRING_21114 21114 +#define STRING_21115 21115 +#define STRING_21116 21116 +#define STRING_21117 21117 +#define STRING_21118 21118 +#define STRING_21119 21119 +#define STRING_21120 21120 +#define STRING_21121 21121 +#define STRING_21122 21122 +#define STRING_21123 21123 +#define STRING_21124 21124 +#define STRING_21125 21125 +#define STRING_21126 21126 +#define STRING_21127 21127 +#define STRING_21128 21128 +#define STRING_21129 21129 +#define STRING_21130 21130 +#define STRING_21131 21131 +#define STRING_21132 21132 +#define STRING_21133 21133 +#define STRING_21134 21134 +#define STRING_21135 21135 +#define STRING_21136 21136 +#define STRING_21137 21137 +#define STRING_21138 21138 +#define STRING_21139 21139 +#define STRING_21140 21140 +#define STRING_21141 21141 +#define STRING_21142 21142 +#define STRING_21143 21143 +#define STRING_21144 21144 +#define STRING_21145 21145 +#define STRING_21146 21146 +#define STRING_21147 21147 +#define STRING_21148 21148 +#define STRING_21149 21149 +#define STRING_21150 21150 +#define STRING_21151 21151 +#define STRING_21152 21152 +#define STRING_21153 21153 +#define STRING_21154 21154 +#define STRING_21155 21155 +#define STRING_21156 21156 +#define STRING_21157 21157 +#define STRING_21158 21158 +#define STRING_21159 21159 +#define STRING_21160 21160 +#define STRING_21161 21161 +#define STRING_21162 21162 +#define STRING_21163 21163 +#define STRING_21164 21164 +#define STRING_21165 21165 +#define STRING_21166 21166 +#define STRING_21167 21167 +#define STRING_21168 21168 +#define STRING_21169 21169 +#define STRING_21170 21170 +#define STRING_21171 21171 +#define STRING_21172 21172 +#define STRING_21173 21173 +#define STRING_21174 21174 +#define STRING_21175 21175 +#define STRING_21176 21176 +#define STRING_21177 21177 +#define STRING_21178 21178 +#define STRING_21179 21179 +#define STRING_21180 21180 +#define STRING_21181 21181 +#define STRING_21182 21182 +#define STRING_21183 21183 +#define STRING_21184 21184 +#define STRING_21185 21185 +#define STRING_21186 21186 +#define STRING_21187 21187 +#define STRING_21188 21188 +#define STRING_21189 21189 +#define STRING_21190 21190 +#define STRING_21191 21191 +#define STRING_21192 21192 +#define STRING_21193 21193 +#define STRING_21194 21194 +#define STRING_21195 21195 +#define STRING_21196 21196 +#define STRING_21197 21197 +#define STRING_21198 21198 +#define STRING_21199 21199 +#define STRING_21200 21200 +#define STRING_21201 21201 +#define STRING_21202 21202 +#define STRING_21203 21203 +#define STRING_21204 21204 +#define STRING_21205 21205 +#define STRING_21206 21206 +#define STRING_21207 21207 +#define STRING_21208 21208 +#define STRING_21209 21209 +#define STRING_21210 21210 +#define STRING_21211 21211 +#define STRING_21212 21212 +#define STRING_21213 21213 +#define STRING_21214 21214 +#define STRING_21215 21215 +#define STRING_21216 21216 +#define STRING_21217 21217 +#define STRING_21218 21218 +#define STRING_21219 21219 +#define STRING_21220 21220 +#define STRING_21221 21221 +#define STRING_21222 21222 +#define STRING_21223 21223 +#define STRING_21224 21224 +#define STRING_21225 21225 +#define STRING_21226 21226 +#define STRING_21227 21227 +#define STRING_21228 21228 +#define STRING_21229 21229 +#define STRING_21230 21230 +#define STRING_21231 21231 +#define STRING_21232 21232 +#define STRING_21233 21233 +#define STRING_21234 21234 +#define STRING_21235 21235 +#define STRING_21236 21236 +#define STRING_21237 21237 +#define STRING_21238 21238 +#define STRING_21239 21239 +#define STRING_21240 21240 +#define STRING_21241 21241 +#define STRING_21242 21242 +#define STRING_21243 21243 +#define STRING_21244 21244 +#define STRING_21245 21245 +#define STRING_21246 21246 +#define STRING_21247 21247 +#define STRING_21248 21248 +#define STRING_21249 21249 +#define STRING_21250 21250 +#define STRING_21251 21251 +#define STRING_21252 21252 +#define STRING_21253 21253 +#define STRING_21254 21254 +#define STRING_21255 21255 +#define STRING_21256 21256 +#define STRING_21257 21257 +#define STRING_21258 21258 +#define STRING_21259 21259 +#define STRING_21260 21260 +#define STRING_21261 21261 +#define STRING_21262 21262 +#define STRING_21263 21263 +#define STRING_21264 21264 +#define STRING_21265 21265 +#define STRING_21266 21266 +#define STRING_21267 21267 +#define STRING_21268 21268 +#define STRING_21269 21269 +#define STRING_21270 21270 +#define STRING_21271 21271 +#define STRING_21272 21272 +#define STRING_21273 21273 +#define STRING_21274 21274 +#define STRING_21275 21275 +#define STRING_21276 21276 +#define STRING_21277 21277 +#define STRING_21278 21278 +#define STRING_21279 21279 +#define STRING_21280 21280 +#define STRING_21281 21281 +#define STRING_21282 21282 +#define STRING_21283 21283 +#define STRING_21284 21284 +#define STRING_21285 21285 +#define STRING_21286 21286 +#define STRING_21287 21287 +#define STRING_21288 21288 +#define STRING_21289 21289 +#define STRING_21290 21290 +#define STRING_21291 21291 +#define STRING_21292 21292 +#define STRING_21293 21293 +#define STRING_21294 21294 +#define STRING_21295 21295 +#define STRING_21296 21296 +#define STRING_21297 21297 +#define STRING_21298 21298 +#define STRING_21299 21299 +#define STRING_21300 21300 +#define STRING_21301 21301 +#define STRING_21302 21302 +#define STRING_21303 21303 +#define STRING_21304 21304 +#define STRING_21305 21305 +#define STRING_21306 21306 +#define STRING_21307 21307 +#define STRING_21308 21308 +#define STRING_21309 21309 +#define STRING_21310 21310 +#define STRING_21311 21311 +#define STRING_21312 21312 +#define STRING_21313 21313 +#define STRING_21314 21314 +#define STRING_21315 21315 +#define STRING_21316 21316 +#define STRING_21317 21317 +#define STRING_21318 21318 +#define STRING_21319 21319 +#define STRING_21320 21320 +#define STRING_21321 21321 +#define STRING_21322 21322 +#define STRING_21323 21323 +#define STRING_21324 21324 +#define STRING_21325 21325 +#define STRING_21326 21326 +#define STRING_21327 21327 +#define STRING_21328 21328 +#define STRING_21329 21329 +#define STRING_21330 21330 +#define STRING_21331 21331 +#define STRING_21332 21332 +#define STRING_21333 21333 +#define STRING_21334 21334 +#define STRING_21335 21335 +#define STRING_21336 21336 +#define STRING_21337 21337 +#define STRING_21338 21338 +#define STRING_21339 21339 +#define STRING_21340 21340 +#define STRING_21341 21341 +#define STRING_21342 21342 +#define STRING_21343 21343 +#define STRING_21344 21344 +#define STRING_21345 21345 +#define STRING_21346 21346 +#define STRING_21347 21347 +#define STRING_21348 21348 +#define STRING_21349 21349 +#define STRING_21350 21350 +#define STRING_21351 21351 +#define STRING_21352 21352 +#define STRING_21353 21353 +#define STRING_21354 21354 +#define STRING_21355 21355 +#define STRING_21356 21356 +#define STRING_21357 21357 +#define STRING_21358 21358 +#define STRING_21359 21359 +#define STRING_21360 21360 +#define STRING_21361 21361 +#define STRING_21362 21362 +#define STRING_21363 21363 +#define STRING_21364 21364 +#define STRING_21365 21365 +#define STRING_21366 21366 +#define STRING_21367 21367 +#define STRING_21368 21368 +#define STRING_21369 21369 +#define STRING_21370 21370 +#define STRING_21371 21371 +#define STRING_21372 21372 +#define STRING_21373 21373 +#define STRING_21374 21374 +#define STRING_21375 21375 +#define STRING_21376 21376 +#define STRING_21377 21377 +#define STRING_21378 21378 +#define STRING_21379 21379 +#define STRING_21380 21380 +#define STRING_21381 21381 +#define STRING_21382 21382 +#define STRING_21383 21383 +#define STRING_21384 21384 +#define STRING_21385 21385 +#define STRING_21386 21386 +#define STRING_21387 21387 +#define STRING_21388 21388 +#define STRING_21389 21389 +#define STRING_21390 21390 +#define STRING_21391 21391 +#define STRING_21392 21392 +#define STRING_21393 21393 +#define STRING_21394 21394 +#define STRING_21395 21395 +#define STRING_21396 21396 +#define STRING_21397 21397 +#define STRING_21398 21398 +#define STRING_21399 21399 +#define STRING_21400 21400 +#define STRING_21401 21401 +#define STRING_21402 21402 +#define STRING_21403 21403 +#define STRING_21404 21404 +#define STRING_21405 21405 +#define STRING_21406 21406 +#define STRING_21407 21407 +#define STRING_21408 21408 +#define STRING_21409 21409 +#define STRING_21410 21410 +#define STRING_21411 21411 +#define STRING_21412 21412 +#define STRING_21413 21413 +#define STRING_21414 21414 +#define STRING_21415 21415 +#define STRING_21416 21416 +#define STRING_21417 21417 +#define STRING_21418 21418 +#define STRING_21419 21419 +#define STRING_21420 21420 +#define STRING_21421 21421 +#define STRING_21422 21422 +#define STRING_21423 21423 +#define STRING_21424 21424 +#define STRING_21425 21425 +#define STRING_21426 21426 +#define STRING_21427 21427 +#define STRING_21428 21428 +#define STRING_21429 21429 +#define STRING_21430 21430 +#define STRING_21431 21431 +#define STRING_21432 21432 +#define STRING_21433 21433 +#define STRING_21434 21434 +#define STRING_21435 21435 +#define STRING_21436 21436 +#define STRING_21437 21437 +#define STRING_21438 21438 +#define STRING_21439 21439 +#define STRING_21440 21440 +#define STRING_21441 21441 +#define STRING_21442 21442 +#define STRING_21443 21443 +#define STRING_21444 21444 +#define STRING_21445 21445 +#define STRING_21446 21446 +#define STRING_21447 21447 +#define STRING_21448 21448 +#define STRING_21449 21449 +#define STRING_21450 21450 +#define STRING_21451 21451 +#define STRING_21452 21452 +#define STRING_21453 21453 +#define STRING_21454 21454 +#define STRING_21455 21455 +#define STRING_21456 21456 +#define STRING_21457 21457 +#define STRING_21458 21458 +#define STRING_21459 21459 +#define STRING_21460 21460 +#define STRING_21461 21461 +#define STRING_21462 21462 +#define STRING_21463 21463 +#define STRING_21464 21464 +#define STRING_21465 21465 +#define STRING_21466 21466 +#define STRING_21467 21467 +#define STRING_21468 21468 +#define STRING_21469 21469 +#define STRING_21470 21470 +#define STRING_21471 21471 +#define STRING_21472 21472 +#define STRING_21473 21473 +#define STRING_21474 21474 +#define STRING_21475 21475 +#define STRING_21476 21476 +#define STRING_21477 21477 +#define STRING_21478 21478 +#define STRING_21479 21479 +#define STRING_21480 21480 +#define STRING_21481 21481 +#define STRING_21482 21482 +#define STRING_21483 21483 +#define STRING_21484 21484 +#define STRING_21485 21485 +#define STRING_21486 21486 +#define STRING_21487 21487 +#define STRING_21488 21488 +#define STRING_21489 21489 +#define STRING_21490 21490 +#define STRING_21491 21491 +#define STRING_21492 21492 +#define STRING_21493 21493 +#define STRING_21494 21494 +#define STRING_21495 21495 +#define STRING_21496 21496 +#define STRING_21497 21497 +#define STRING_21498 21498 +#define STRING_21499 21499 +#define STRING_21500 21500 +#define STRING_21501 21501 +#define STRING_21502 21502 +#define STRING_21503 21503 +#define STRING_21504 21504 +#define STRING_21505 21505 +#define STRING_21506 21506 +#define STRING_21507 21507 +#define STRING_21508 21508 +#define STRING_21509 21509 +#define STRING_21510 21510 +#define STRING_21511 21511 +#define STRING_21512 21512 +#define STRING_21513 21513 +#define STRING_21514 21514 +#define STRING_21515 21515 +#define STRING_21516 21516 +#define STRING_21517 21517 +#define STRING_21518 21518 +#define STRING_21519 21519 +#define STRING_21520 21520 +#define STRING_21521 21521 +#define STRING_21522 21522 +#define STRING_21523 21523 +#define STRING_21524 21524 +#define STRING_21525 21525 +#define STRING_21526 21526 +#define STRING_21527 21527 +#define STRING_21528 21528 +#define STRING_21529 21529 +#define STRING_21530 21530 +#define STRING_21531 21531 +#define STRING_21532 21532 +#define STRING_21533 21533 +#define STRING_21534 21534 +#define STRING_21535 21535 +#define STRING_21536 21536 +#define STRING_21537 21537 +#define STRING_21538 21538 +#define STRING_21539 21539 +#define STRING_21540 21540 +#define STRING_21541 21541 +#define STRING_21542 21542 +#define STRING_21543 21543 +#define STRING_21544 21544 +#define STRING_21545 21545 +#define STRING_21546 21546 +#define STRING_21547 21547 +#define STRING_21548 21548 +#define STRING_21549 21549 +#define STRING_21550 21550 +#define STRING_21551 21551 +#define STRING_21552 21552 +#define STRING_21553 21553 +#define STRING_21554 21554 +#define STRING_21555 21555 +#define STRING_21556 21556 +#define STRING_21557 21557 +#define STRING_21558 21558 +#define STRING_21559 21559 +#define STRING_21560 21560 +#define STRING_21561 21561 +#define STRING_21562 21562 +#define STRING_21563 21563 +#define STRING_21564 21564 +#define STRING_21565 21565 +#define STRING_21566 21566 +#define STRING_21567 21567 +#define STRING_21568 21568 +#define STRING_21569 21569 +#define STRING_21570 21570 +#define STRING_21571 21571 +#define STRING_21572 21572 +#define STRING_21573 21573 +#define STRING_21574 21574 +#define STRING_21575 21575 +#define STRING_21576 21576 +#define STRING_21577 21577 +#define STRING_21578 21578 +#define STRING_21579 21579 +#define STRING_21580 21580 +#define STRING_21581 21581 +#define STRING_21582 21582 +#define STRING_21583 21583 +#define STRING_21584 21584 +#define STRING_21585 21585 +#define STRING_21586 21586 +#define STRING_21587 21587 +#define STRING_21588 21588 +#define STRING_21589 21589 +#define STRING_21590 21590 +#define STRING_21591 21591 +#define STRING_21592 21592 +#define STRING_21593 21593 +#define STRING_21594 21594 +#define STRING_21595 21595 +#define STRING_21596 21596 +#define STRING_21597 21597 +#define STRING_21598 21598 +#define STRING_21599 21599 +#define STRING_21600 21600 +#define STRING_21601 21601 +#define STRING_21602 21602 +#define STRING_21603 21603 +#define STRING_21604 21604 +#define STRING_21605 21605 +#define STRING_21606 21606 +#define STRING_21607 21607 +#define STRING_21608 21608 +#define STRING_21609 21609 +#define STRING_21610 21610 +#define STRING_21611 21611 +#define STRING_21612 21612 +#define STRING_21613 21613 +#define STRING_21614 21614 +#define STRING_21615 21615 +#define STRING_21616 21616 +#define STRING_21617 21617 +#define STRING_21618 21618 +#define STRING_21619 21619 +#define STRING_21620 21620 +#define STRING_21621 21621 +#define STRING_21622 21622 +#define STRING_21623 21623 +#define STRING_21624 21624 +#define STRING_21625 21625 +#define STRING_21626 21626 +#define STRING_21627 21627 +#define STRING_21628 21628 +#define STRING_21629 21629 +#define STRING_21630 21630 +#define STRING_21631 21631 +#define STRING_21632 21632 +#define STRING_21633 21633 +#define STRING_21634 21634 +#define STRING_21635 21635 +#define STRING_21636 21636 +#define STRING_21637 21637 +#define STRING_21638 21638 +#define STRING_21639 21639 +#define STRING_21640 21640 +#define STRING_21641 21641 +#define STRING_21642 21642 +#define STRING_21643 21643 +#define STRING_21644 21644 +#define STRING_21645 21645 +#define STRING_21646 21646 +#define STRING_21647 21647 +#define STRING_21648 21648 +#define STRING_21649 21649 +#define STRING_21650 21650 +#define STRING_21651 21651 +#define STRING_21652 21652 +#define STRING_21653 21653 +#define STRING_21654 21654 +#define STRING_21655 21655 +#define STRING_21656 21656 +#define STRING_21657 21657 +#define STRING_21658 21658 +#define STRING_21659 21659 +#define STRING_21660 21660 +#define STRING_21661 21661 +#define STRING_21662 21662 +#define STRING_21663 21663 +#define STRING_21664 21664 +#define STRING_21665 21665 +#define STRING_21666 21666 +#define STRING_21667 21667 +#define STRING_21668 21668 +#define STRING_21669 21669 +#define STRING_21670 21670 +#define STRING_21671 21671 +#define STRING_21672 21672 +#define STRING_21673 21673 +#define STRING_21674 21674 +#define STRING_21675 21675 +#define STRING_21676 21676 +#define STRING_21677 21677 +#define STRING_21678 21678 +#define STRING_21679 21679 +#define STRING_21680 21680 +#define STRING_21681 21681 +#define STRING_21682 21682 +#define STRING_21683 21683 +#define STRING_21684 21684 +#define STRING_21685 21685 +#define STRING_21686 21686 +#define STRING_21687 21687 +#define STRING_21688 21688 +#define STRING_21689 21689 +#define STRING_21690 21690 +#define STRING_21691 21691 +#define STRING_21692 21692 +#define STRING_21693 21693 +#define STRING_21694 21694 +#define STRING_21695 21695 +#define STRING_21696 21696 +#define STRING_21697 21697 +#define STRING_21698 21698 +#define STRING_21699 21699 +#define STRING_21700 21700 +#define STRING_21701 21701 +#define STRING_21702 21702 +#define STRING_21703 21703 +#define STRING_21704 21704 +#define STRING_21705 21705 +#define STRING_21706 21706 +#define STRING_21707 21707 +#define STRING_21708 21708 +#define STRING_21709 21709 +#define STRING_21710 21710 +#define STRING_21711 21711 +#define STRING_21712 21712 +#define STRING_21713 21713 +#define STRING_21714 21714 +#define STRING_21715 21715 +#define STRING_21716 21716 +#define STRING_21717 21717 +#define STRING_21718 21718 +#define STRING_21719 21719 +#define STRING_21720 21720 +#define STRING_21721 21721 +#define STRING_21722 21722 +#define STRING_21723 21723 +#define STRING_21724 21724 +#define STRING_21725 21725 +#define STRING_21726 21726 +#define STRING_21727 21727 +#define STRING_21728 21728 +#define STRING_21729 21729 +#define STRING_21730 21730 +#define STRING_21731 21731 +#define STRING_21732 21732 +#define STRING_21733 21733 +#define STRING_21734 21734 +#define STRING_21735 21735 +#define STRING_21736 21736 +#define STRING_21737 21737 +#define STRING_21738 21738 +#define STRING_21739 21739 +#define STRING_21740 21740 +#define STRING_21741 21741 +#define STRING_21742 21742 +#define STRING_21743 21743 +#define STRING_21744 21744 +#define STRING_21745 21745 +#define STRING_21746 21746 +#define STRING_21747 21747 +#define STRING_21748 21748 +#define STRING_21749 21749 +#define STRING_21750 21750 +#define STRING_21751 21751 +#define STRING_21752 21752 +#define STRING_21753 21753 +#define STRING_21754 21754 +#define STRING_21755 21755 +#define STRING_21756 21756 +#define STRING_21757 21757 +#define STRING_21758 21758 +#define STRING_21759 21759 +#define STRING_21760 21760 +#define STRING_21761 21761 +#define STRING_21762 21762 +#define STRING_21763 21763 +#define STRING_21764 21764 +#define STRING_21765 21765 +#define STRING_21766 21766 +#define STRING_21767 21767 +#define STRING_21768 21768 +#define STRING_21769 21769 +#define STRING_21770 21770 +#define STRING_21771 21771 +#define STRING_21772 21772 +#define STRING_21773 21773 +#define STRING_21774 21774 +#define STRING_21775 21775 +#define STRING_21776 21776 +#define STRING_21777 21777 +#define STRING_21778 21778 +#define STRING_21779 21779 +#define STRING_21780 21780 +#define STRING_21781 21781 +#define STRING_21782 21782 +#define STRING_21783 21783 +#define STRING_21784 21784 +#define STRING_21785 21785 +#define STRING_21786 21786 +#define STRING_21787 21787 +#define STRING_21788 21788 +#define STRING_21789 21789 +#define STRING_21790 21790 +#define STRING_21791 21791 +#define STRING_21792 21792 +#define STRING_21793 21793 +#define STRING_21794 21794 +#define STRING_21795 21795 +#define STRING_21796 21796 +#define STRING_21797 21797 +#define STRING_21798 21798 +#define STRING_21799 21799 +#define STRING_21800 21800 +#define STRING_21801 21801 +#define STRING_21802 21802 +#define STRING_21803 21803 +#define STRING_21804 21804 +#define STRING_21805 21805 +#define STRING_21806 21806 +#define STRING_21807 21807 +#define STRING_21808 21808 +#define STRING_21809 21809 +#define STRING_21810 21810 +#define STRING_21811 21811 +#define STRING_21812 21812 +#define STRING_21813 21813 +#define STRING_21814 21814 +#define STRING_21815 21815 +#define STRING_21816 21816 +#define STRING_21817 21817 +#define STRING_21818 21818 +#define STRING_21819 21819 +#define STRING_21820 21820 +#define STRING_21821 21821 +#define STRING_21822 21822 +#define STRING_21823 21823 +#define STRING_21824 21824 +#define STRING_21825 21825 +#define STRING_21826 21826 +#define STRING_21827 21827 +#define STRING_21828 21828 +#define STRING_21829 21829 +#define STRING_21830 21830 +#define STRING_21831 21831 +#define STRING_21832 21832 +#define STRING_21833 21833 +#define STRING_21834 21834 +#define STRING_21835 21835 +#define STRING_21836 21836 +#define STRING_21837 21837 +#define STRING_21838 21838 +#define STRING_21839 21839 +#define STRING_21840 21840 +#define STRING_21841 21841 +#define STRING_21842 21842 +#define STRING_21843 21843 +#define STRING_21844 21844 +#define STRING_21845 21845 +#define STRING_21846 21846 +#define STRING_21847 21847 +#define STRING_21848 21848 +#define STRING_21849 21849 +#define STRING_21850 21850 +#define STRING_21851 21851 +#define STRING_21852 21852 +#define STRING_21853 21853 +#define STRING_21854 21854 +#define STRING_21855 21855 +#define STRING_21856 21856 +#define STRING_21857 21857 +#define STRING_21858 21858 +#define STRING_21859 21859 +#define STRING_21860 21860 +#define STRING_21861 21861 +#define STRING_21862 21862 +#define STRING_21863 21863 +#define STRING_21864 21864 +#define STRING_21865 21865 +#define STRING_21866 21866 +#define STRING_21867 21867 +#define STRING_21868 21868 +#define STRING_21869 21869 +#define STRING_21870 21870 +#define STRING_21871 21871 +#define STRING_21872 21872 +#define STRING_21873 21873 +#define STRING_21874 21874 +#define STRING_21875 21875 +#define STRING_21876 21876 +#define STRING_21877 21877 +#define STRING_21878 21878 +#define STRING_21879 21879 +#define STRING_21880 21880 +#define STRING_21881 21881 +#define STRING_21882 21882 +#define STRING_21883 21883 +#define STRING_21884 21884 +#define STRING_21885 21885 +#define STRING_21886 21886 +#define STRING_21887 21887 +#define STRING_21888 21888 +#define STRING_21889 21889 +#define STRING_21890 21890 +#define STRING_21891 21891 +#define STRING_21892 21892 +#define STRING_21893 21893 +#define STRING_21894 21894 +#define STRING_21895 21895 +#define STRING_21896 21896 +#define STRING_21897 21897 +#define STRING_21898 21898 +#define STRING_21899 21899 +#define STRING_21900 21900 +#define STRING_21901 21901 +#define STRING_21902 21902 + +#define STRING_22000 22000 +#define STRING_22001 22001 +#define STRING_22002 22002 +#define STRING_22003 22003 +#define STRING_22004 22004 +#define STRING_22005 22005 +#define STRING_22006 22006 + +// This is the end marker in code +#define STRING_25000 25000 + + +#define STRING_INSTRUMENT1 1 +#define STRING_INSTRUMENT2 2 +#define STRING_INSTRUMENT3 3 +#define STRING_INSTRUMENT4 4 +#define STRING_INSTRUMENT5 5 +#define STRING_INSTRUMENT6 6 +#define STRING_INSTRUMENT7 7 +#define STRING_INSTRUMENT8 8 +#define STRING_INSTRUMENT9 9 +#define STRING_INSTRUMENT10 10 +#define STRING_INSTRUMENT11 11 +#define STRING_INSTRUMENT12 12 +#define STRING_INSTRUMENT13 13 +#define STRING_INSTRUMENT14 14 +#define STRING_INSTRUMENT15 15 +#define STRING_INSTRUMENT16 16 +#define STRING_INSTRUMENT17 17 +#define STRING_INSTRUMENT18 18 +#define STRING_INSTRUMENT19 19 +#define STRING_INSTRUMENT20 20 +#define STRING_INSTRUMENT21 21 +#define STRING_INSTRUMENT22 22 +#define STRING_INSTRUMENT23 23 +#define STRING_INSTRUMENT24 24 +#define STRING_INSTRUMENT25 25 +#define STRING_INSTRUMENT26 26 +#define STRING_INSTRUMENT27 27 +#define STRING_INSTRUMENT28 28 +#define STRING_INSTRUMENT29 29 +#define STRING_INSTRUMENT30 30 +#define STRING_INSTRUMENT31 31 +#define STRING_INSTRUMENT32 32 +#define STRING_INSTRUMENT33 33 +#define STRING_INSTRUMENT34 34 +#define STRING_INSTRUMENT35 35 +#define STRING_INSTRUMENT36 36 +#define STRING_INSTRUMENT37 37 +#define STRING_INSTRUMENT38 38 +#define STRING_INSTRUMENT39 39 +#define STRING_INSTRUMENT40 40 +#define STRING_INSTRUMENT41 41 +#define STRING_INSTRUMENT42 42 +#define STRING_INSTRUMENT43 43 +#define STRING_INSTRUMENT44 44 +#define STRING_INSTRUMENT45 45 +#define STRING_INSTRUMENT46 46 +#define STRING_INSTRUMENT47 47 +#define STRING_INSTRUMENT48 48 +#define STRING_INSTRUMENT49 49 +#define STRING_INSTRUMENT50 50 +#define STRING_INSTRUMENT51 51 +#define STRING_INSTRUMENT52 52 +#define STRING_INSTRUMENT53 53 +#define STRING_INSTRUMENT54 54 +#define STRING_INSTRUMENT55 55 +#define STRING_INSTRUMENT56 56 +#define STRING_INSTRUMENT57 57 +#define STRING_INSTRUMENT58 58 +#define STRING_INSTRUMENT59 59 +#define STRING_INSTRUMENT60 60 +#define STRING_INSTRUMENT61 61 +#define STRING_INSTRUMENT62 62 +#define STRING_INSTRUMENT63 63 +#define STRING_INSTRUMENT64 64 +#define STRING_INSTRUMENT65 65 +#define STRING_INSTRUMENT66 66 +#define STRING_INSTRUMENT67 67 +#define STRING_INSTRUMENT68 68 +#define STRING_INSTRUMENT69 69 +#define STRING_INSTRUMENT70 70 +#define STRING_INSTRUMENT71 71 +#define STRING_INSTRUMENT72 72 +#define STRING_INSTRUMENT73 73 +#define STRING_INSTRUMENT74 74 +#define STRING_INSTRUMENT75 75 +#define STRING_INSTRUMENT76 76 +#define STRING_INSTRUMENT77 77 +#define STRING_INSTRUMENT78 78 +#define STRING_INSTRUMENT79 79 +#define STRING_INSTRUMENT80 80 +#define STRING_INSTRUMENT81 81 +#define STRING_INSTRUMENT82 82 +#define STRING_INSTRUMENT83 83 +#define STRING_INSTRUMENT84 84 +#define STRING_INSTRUMENT85 85 +#define STRING_INSTRUMENT86 86 +#define STRING_INSTRUMENT87 87 +#define STRING_INSTRUMENT88 88 +#define STRING_INSTRUMENT89 89 +#define STRING_INSTRUMENT90 90 +#define STRING_INSTRUMENT91 91 +#define STRING_INSTRUMENT92 92 +#define STRING_INSTRUMENT93 93 +#define STRING_INSTRUMENT94 94 +#define STRING_INSTRUMENT95 95 +#define STRING_INSTRUMENT96 96 +#define STRING_INSTRUMENT97 97 +#define STRING_INSTRUMENT98 98 +#define STRING_INSTRUMENT99 99 +#define STRING_INSTRUMENT100 100 +#define STRING_INSTRUMENT101 101 +#define STRING_INSTRUMENT102 102 +#define STRING_INSTRUMENT103 103 +#define STRING_INSTRUMENT104 104 +#define STRING_INSTRUMENT105 105 +#define STRING_INSTRUMENT106 106 +#define STRING_INSTRUMENT107 107 +#define STRING_INSTRUMENT108 108 +#define STRING_INSTRUMENT109 109 +#define STRING_INSTRUMENT110 110 +#define STRING_INSTRUMENT111 111 +#define STRING_INSTRUMENT112 112 +#define STRING_INSTRUMENT113 113 +#define STRING_INSTRUMENT114 114 +#define STRING_INSTRUMENT115 115 +#define STRING_INSTRUMENT116 116 +#define STRING_INSTRUMENT117 117 +#define STRING_INSTRUMENT118 118 +#define STRING_INSTRUMENT119 119 +#define STRING_INSTRUMENT120 120 +#define STRING_INSTRUMENT121 121 +#define STRING_INSTRUMENT122 122 +#define STRING_INSTRUMENT123 123 +#define STRING_INSTRUMENT124 124 +#define STRING_INSTRUMENT125 125 +#define STRING_INSTRUMENT126 126 +#define STRING_INSTRUMENT127 127 +#define STRING_INSTRUMENT128 128 +#define STRING_INSTRUMENT129 129 +#define STRING_INSTRUMENT130 130 +#define STRING_INSTRUMENT131 131 +#define STRING_INSTRUMENT132 132 +#define STRING_INSTRUMENT133 133 +#define STRING_INSTRUMENT134 134 +#define STRING_INSTRUMENT135 135 +#define STRING_INSTRUMENT136 136 +#define STRING_INSTRUMENT137 137 +#define STRING_INSTRUMENT138 138 +#define STRING_INSTRUMENT139 139 +#define STRING_INSTRUMENT140 140 +#define STRING_INSTRUMENT141 141 +#define STRING_INSTRUMENT142 142 +#define STRING_INSTRUMENT143 143 +#define STRING_INSTRUMENT144 144 +#define STRING_INSTRUMENT145 145 +#define STRING_INSTRUMENT146 146 +#define STRING_INSTRUMENT147 147 +#define STRING_INSTRUMENT148 148 +#define STRING_INSTRUMENT149 149 +#define STRING_INSTRUMENT150 150 +#define STRING_INSTRUMENT151 151 +#define STRING_INSTRUMENT152 152 +#define STRING_INSTRUMENT153 153 +#define STRING_INSTRUMENT154 154 +#define STRING_INSTRUMENT155 155 +#define STRING_INSTRUMENT156 156 +#define STRING_INSTRUMENT157 157 +#define STRING_INSTRUMENT158 158 +#define STRING_INSTRUMENT159 159 +#define STRING_INSTRUMENT160 160 +#define STRING_INSTRUMENT161 161 +#define STRING_INSTRUMENT162 162 +#define STRING_INSTRUMENT163 163 +#define STRING_INSTRUMENT164 164 +#define STRING_INSTRUMENT165 165 +#define STRING_INSTRUMENT166 166 +#define STRING_INSTRUMENT167 167 +#define STRING_INSTRUMENT168 168 +#define STRING_INSTRUMENT169 169 +#define STRING_INSTRUMENT170 170 +#define STRING_INSTRUMENT171 171 +#define STRING_INSTRUMENT172 172 +#define STRING_INSTRUMENT173 173 +#define STRING_INSTRUMENT174 174 +#define STRING_INSTRUMENT175 175 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#endif + diff --git a/guitar/backup/20040302/guitar.hpp b/guitar/backup/20040302/guitar.hpp new file mode 100644 index 0000000..6fe0d82 --- /dev/null +++ b/guitar/backup/20040302/guitar.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_GUITAR_HPP_ +#define _GUITAR_GUITAR_HPP_ +#ifndef _GUITAR_GUITAR_H_ +#include +#endif +#endif diff --git a/guitar/backup/20040302/guitar.rc b/guitar/backup/20040302/guitar.rc new file mode 100644 index 0000000..6c97f51 --- /dev/null +++ b/guitar/backup/20040302/guitar.rc @@ -0,0 +1,2039 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "guitar\guitar.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +GRAPHDIALOG DIALOG DISCARDABLE 6, 15, 340, 205 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Graph" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Dismiss",IDCANCEL,171,180,50,14 + GROUPBOX "",-1,5,4,326,166 + DEFPUSHBUTTON "Graph",IDOK,119,180,50,14 +END + +MIDIDIALOG DIALOGEX 0, 0, 142, 225 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "MIDI Import" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Ok",IDOK,85,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,85,16,50,14 + CONTROL "Track 1",MIDI_TRACK1,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,18,41,10 + CONTROL "Track 2",MIDI_TRACK2,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,30,41,10 + CONTROL "Track 3",MIDI_TRACK3,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,42,41,10 + CONTROL "Track 4",MIDI_TRACK4,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,54,41,10 + CONTROL "Track 5",MIDI_TRACK5,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,66,41,10 + CONTROL "Track 6",MIDI_TRACK6,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,78,41,10 + CONTROL "Track 7",MIDI_TRACK7,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,90,41,10 + CONTROL "Track 8",MIDI_TRACK8,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,102,41,10 + CONTROL "Track 9",MIDI_TRACK9,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,114,41,10 + CONTROL "Track 10",MIDI_TRACK10,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,126,41,10 + CONTROL "Track 11",MIDI_TRACK11,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,138,41,10 + CONTROL "Track 12",MIDI_TRACK12,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,150,41,10 + CONTROL "Track 13",MIDI_TRACK13,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,162,41,10 + CONTROL "Track 14",MIDI_TRACK14,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,174,41,10 + CONTROL "Track 15",MIDI_TRACK15,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,186,41,10 + CONTROL "Track 16",MIDI_TRACK16,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,198,41,10 + LTEXT "",MIDI_EVENTS_TRACK1,49,18,22,10 + LTEXT "",MIDI_EVENTS_TRACK2,49,30,22,8 + LTEXT "",MIDI_EVENTS_TRACK3,49,42,22,8 + LTEXT "",MIDI_EVENTS_TRACK4,49,54,22,8 + LTEXT "",MIDI_EVENTS_TRACK5,49,66,22,8 + LTEXT "",MIDI_EVENTS_TRACK6,49,78,22,8 + LTEXT "",MIDI_EVENTS_TRACK7,49,90,22,8 + LTEXT "",MIDI_EVENTS_TRACK8,49,102,22,8 + LTEXT "",MIDI_EVENTS_TRACK9,49,114,22,8 + LTEXT "",MIDI_EVENTS_TRACK10,49,126,22,8 + LTEXT "",MIDI_EVENTS_TRACK11,49,138,22,8 + LTEXT "",MIDI_EVENTS_TRACK12,49,150,22,8 + LTEXT "",MIDI_EVENTS_TRACK13,49,162,22,8 + LTEXT "",MIDI_EVENTS_TRACK14,49,174,22,8 + LTEXT "",MIDI_EVENTS_TRACK15,49,186,22,8 + LTEXT "",MIDI_EVENTS_TRACK16,49,198,22,8 + LTEXT "Events",IDC_STATIC,51,4,23,8 +END + +TABDIALOG DIALOGEX 0, 0, 193, 164 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Tab Entry" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT TABENTRY_COMMENTS,7,143,179,14,ES_AUTOHSCROLL, + WS_EX_CLIENTEDGE + COMBOBOX TABENTRY_NOTETYPE,34,14,45,49,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + LISTBOX TABENTRY_LIST,7,71,179,56,NOT LBS_NOTIFY | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_USETABSTOPS | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,136,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,136,22,50,14 + CONTROL "Apply to remainder of entries.",TABENTRY_REMAINDER, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,42,107,10 + LTEXT "Value:",-1,9,17,21,8 + LTEXT "String",-1,15,57,19,8 + LTEXT "Fret",-1,53,57,13,8 + LTEXT "Note",-1,98,57,16,8 + LTEXT "Comments",-1,71,132,36,8 + CONTROL "Separator",TABENTRY_SEPARATOR,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,13,30,47,10 +END + +FRETDIALOG DIALOGEX 0, 0, 155, 73 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Fret Entry" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT FRETENTRY_FRET,38,18,53,14,ES_AUTOHSCROLL + EDITTEXT FRETENTRY_STRING,38,1,53,14,ES_AUTOHSCROLL + COMBOBOX FRETENTRY_ACTION,38,33,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX FRETENTRY_DURATION,38,48,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,104,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,104,16,50,14 + LTEXT "Fret:",-1,4,21,15,8 + LTEXT "String:",-1,4,6,21,8 + LTEXT "Action:",-1,4,35,23,8 + LTEXT "Duration:",-1,1,50,30,8 +END + +CHORDDIALOG DIALOGEX 0, 0, 193, 127 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Dictionary" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + LISTBOX CHORDS_LIST,0,19,184,89,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + LTEXT "",CHORDS_COUNT,3,112,102,8 +END + +CHORDBUILDERDIALOG DIALOGEX 0, 0, 201, 65 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Builder" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT ENTERCHORD_EDIT,9,8,124,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,146,4,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,146,20,50,14 + PUSHBUTTON "Examples",ENTERCHORD_EXAMPLES,146,37,50,14 +END + +RANGEDIALOG DIALOGEX 0, 0, 206, 105 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Range Edit" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,1,1,50,14 + LISTBOX RANGE_LIST,10,36,184,57,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Cancel",IDCANCEL,51,1,50,14 + PUSHBUTTON "Insert...",RANGE_INSERT,101,1,50,14 + PUSHBUTTON "Delete",RANGE_DELETE,151,1,50,14 + CTEXT "Name",-1,15,22,64,8 + LTEXT "Start Pos.",-1,92,22,32,8 + LTEXT "End Pos.",-1,149,22,30,8 +END + +RANGEEDITDIALOG DIALOGEX 0, 0, 190, 111 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Edit Item" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT RANGEEDIT_NAME,33,42,150,14,ES_AUTOHSCROLL + EDITTEXT RANGEEDIT_BEGIN,33,61,40,14,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT RANGEEDIT_END,33,80,40,14,ES_AUTOHSCROLL | ES_NUMBER + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,134,17,50,14 + LTEXT "Name:",-1,5,43,22,8 + LTEXT "Start:",-1,5,64,18,8 + LTEXT "End:",-1,5,85,16,8 +END + +SETTINGSDIALOG DIALOGEX 0, 0, 169, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Apply",IDOK,5,2,50,14 + PUSHBUTTON "&Done",IDCANCEL,107,2,50,14 + CONTROL "Display (Bends,Pulls,Slides,Hammers)", + SETTINGS_SHOWACTION,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,9,29,133,10 + LTEXT "Microseconds Per 1/4 note:",IDC_STATIC,11,113,89,8 + EDITTEXT SETTINGS_MICROSECSPERQTRNOTE,104,110,40,14, + ES_AUTOHSCROLL | ES_NUMBER + PUSHBUTTON "Defaults",SETTINGS_DEFAULTS,56,2,50,14 + GROUPBOX "MIDI",IDC_STATIC,3,58,161,83 + GROUPBOX "Global",IDC_STATIC,1,18,161,37 + CONTROL "Display note letters on fretboard.",SETTINGS_SHOWNOTES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,42,117,10 + LTEXT "Output",IDC_STATIC,9,71,23,8 + COMBOBOX SETTINGS_MIDIOUT,37,67,121,61,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE + COMBOBOX SETTINGS_INSTRUMENT,12,95,121,63,CBS_DROPDOWNLIST | + CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "Instrument",IDC_STATIC,13,85,105,8 +END + +SCALEDIALOG DIALOGEX 0, 0, 217, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW | WS_EX_STATICEDGE +CAPTION "Show Scale" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,163,4,50,14 + LISTBOX SCALEDLG_LIST,3,58,211,86,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Ca&ncel",IDCANCEL,163,19,50,14 + LTEXT "Root:",-1,5,30,18,8 + EDITTEXT SCALEDLG_ROOT,25,27,28,14,ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "Spin1",SCALEDLG_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_ARROWKEYS,54,27,10,14 + CONTROL "Mute",SCALEDLG_MUTE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,165,36,48,10 +END + +LICENSEDIALOG DIALOGEX 0, 0, 223, 134 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "License Helper" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT LICENSE_DIALOG_LICENSE,2,81,215,42,ES_MULTILINE | + ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,154,2,65,14 + PUSHBUTTON "Cancel",IDCANCEL,154,17,65,14 + LTEXT " You can request a new license by clicking ""Request License"".", + IDC_STATIC,5,67,214,8 + LTEXT "Please paste your license key into the text box below.", + IDC_STATIC,5,53,216,8 + PUSHBUTTON "Request License",LICENSE_DIALOG_REQUEST_LICENSE,154,32, + 65,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +FRETBOARD BITMAP MOVEABLE PURE "FRETBOARD.BMP" +GUITAR BITMAP MOVEABLE PURE "GUITAR.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +HARROW CURSOR DISCARDABLE "HARROW.CUR" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP_ICON ICON DISCARDABLE "icon1.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +FRETMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + END + POPUP "Fret&board" + BEGIN + MENUITEM "&Clear", MENU_FRETBOARD_CLEAR + MENUITEM "Show All &Positions", MENU_FRETBOARD_SHOWALLPOSITIONS + + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Close Project", MENU_FILE_CLOSE + MENUITEM "&Import Tablature\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Save\tCtrl+S", MENU_FILE_SAVE + MENUITEM "Save &As...", MENU_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + MENUITEM SEPARATOR + MENUITEM "&Ranges...", MENU_EDIT_RANGES + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Tablature" + BEGIN + MENUITEM "&Play", MENU_TABLATURE_PLAY + MENUITEM "Play (&Repeated)", MENU_TABLATURE_PLAYREPEATED + MENUITEM "Play R&ange...", MENU_TABLATURE_PLAYRANGE + , GRAYED + MENUITEM "Play Rang&e (Repeated)...", MENU_TABLATURE_PLAYRANGE_REPEATED + , GRAYED + MENUITEM "&Stop", MENU_TABLATURE_STOP, GRAYED + END + POPUP "&Options" + BEGIN + MENUITEM "&Increase Tempo", MENU_OPTIONS_INCREASETEMPO + MENUITEM "&Decrease Tempo", MENU_OPTIONS_DECREASETEMPO + MENUITEM SEPARATOR + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""guitar\\guitar.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "MIDIDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 141 + END + + "TABDIALOG", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 186 + TOPMARGIN, 7 + BOTTOMMARGIN, 157 + END + + "FRETDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 154 + BOTTOMMARGIN, 69 + END + + "CHORDDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 184 + TOPMARGIN, 2 + BOTTOMMARGIN, 126 + END + + "SETTINGSDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 164 + BOTTOMMARGIN, 140 + END + + "SCALEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 216 + BOTTOMMARGIN, 146 + END + + "LICENSEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 221 + BOTTOMMARGIN, 131 + END +END +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Simplified Tablature editing.\0" + VALUE "CompanyName", "Diversified Software Solutions.\0" + VALUE "FileDescription", "TabMaster\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "TabMaster\0" + VALUE "LegalCopyright", "Copyright © 2002\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "TabMaster.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "TabMaster\0" + VALUE "ProductVersion", "2, 0, 0, r\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +TABACCELERATORS ACCELERATORS DISCARDABLE +BEGIN + "X", MENU_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT + "C", MENU_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + "V", MENU_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT + "N", MENU_FILE_NEW, VIRTKEY, CONTROL, NOINVERT + "O", MENU_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "I", MENU_FILE_IMPORT, VIRTKEY, CONTROL, NOINVERT + "P", MENU_FILE_PRINT, VIRTKEY, CONTROL, NOINVERT + VK_F5, IDM_CASCADE, VIRTKEY, NOINVERT + VK_F4, IDM_TILE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_NOTITLE "None" + STRING_EDITHINT "Insert tablature using Insert key." + STRING_PRJEXTENSION ".prj" + STRING_PRJALLEXTENSION "*.prj" + STRING_TABEXTENSION ".tab" + STRING_BROWSERKEY "Software\\Classes\\htmlfile\\shell\\opennew\\command" + STRING_BROWSERKEYALT "SOFTWARE\\Classes\\http\\shell\\open\\command" + STRING_BROWSERCOMMAND "command" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_HOST "http://www.diversified-software.com" + STRING_HELPPAGE "/support/support.html" + STRING_MIDIEXTENSION ".mid" + STRING_PURCHASE_URL "http://wwww.diversified-software.com/order/ordertabmaster.html" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_TABVIEWWINDOWCLASSNAME "TABVIEWCLASS" + STRING_FRETVIEWWINDOWCLASSNAME "FRETVIEWCLASS" + STRING_REGISTRYKEYNAME "Software\\Diversified\\TabMaster" + STRING_HISTORYKEYNAME "Software\\Diversified\\TabMaster\\History" + STRING_HISTORYKEYSHORTNAME "History" + STRING_SETTINGSKEYNAME "Software\\Diversified\\TabMaster\\Settings" + STRING_SETTINGSINSTRUMENT "Instrument" + STRING_SETTINGSACTION "Action" + STRING_SETTINGSNOTELETTERS "DisplayNoteLetters" + STRING_SETTINGSMICROSECONDSPERQUARTERNOTE "MicrosecondsPerQuarterNote" + STRING_REGISTRATIONKEYNAME + "Software\\Diversified\\TabMaster\\Registration" + STRING_SETTINGSLICENSE "License" + STRING_SETTINGSMIDIOUTPUT "MIDIOutput" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_21001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_21002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_21003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_21004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_21005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_21006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_21007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_21009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_21010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_21011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_21012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_21013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_21014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_21015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_21016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_21017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_21018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_21019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_21020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_21021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_21022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_21023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_21025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_21026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_21027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_21028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_21029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_21030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_21031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_21032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_21033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_21034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_21035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_21036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_21037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_21038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_21039 "A7sus4 [x 0 2 0 3 3] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21040 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_21041 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_21042 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_21043 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_21044 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_21045 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_21046 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21047 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_21048 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_21049 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_21050 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21051 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_21052 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21053 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21054 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_21055 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21056 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_21057 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21058 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21059 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_21060 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_21061 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_21062 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_21063 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_21064 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_21065 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_21066 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_21067 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21068 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21069 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21070 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_21071 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21072 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21073 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21074 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_21075 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21076 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21077 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_21078 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21079 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_21080 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_21081 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_21082 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_21083 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_21084 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_21085 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21086 "Am [x 0 2 2 1 0] (C E A) " + STRING_21087 "Am [x 0 7 5 5 5] (C E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21088 "Am [x 3 2 2 1 0] (C E A) " + STRING_21089 "Am [8 12 x x x 0] (C E A) " + STRING_21090 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_21091 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_21092 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_21093 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_21094 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_21095 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_21096 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_21097 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_21098 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_21099 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_21100 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_21101 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_21102 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_21103 "Am/G [x 0 5 5 5 8] (C E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21104 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_21105 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_21106 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_21107 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_22000 "Am6 [5 x 4 5 5 5] (A Gb C E A)" + STRING_21108 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_21109 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_21110 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_21111 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_21112 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_21113 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_21114 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_21115 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_21116 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_21117 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_21118 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_21119 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21120 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_21121 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_21122 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_21123 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_21124 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_21125 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_21126 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_21127 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_21128 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_21129 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_21130 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_21131 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_21132 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_21133 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_21134 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_21135 "Asus2/G [x 0 2 0 0 0] (E G A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21136 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_21137 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_21138 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_21139 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_21140 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_21141 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_21142 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_21143 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_21144 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_21145 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_21146 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_21147 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_21148 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_21149 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_21150 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_21151 "Asus4/G [x 0 2 2 3 3] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21152 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_21153 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_21154 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_21155 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_21156 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_21157 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_21158 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_21159 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_21160 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_21161 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_21162 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_21163 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21164 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21165 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21166 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21167 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21168 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21169 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_21170 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_21171 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_21172 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_21173 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21174 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21175 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21176 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21177 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_21178 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_21179 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_21180 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_21181 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21182 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21183 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21184 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_21185 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_21186 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_21187 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_21188 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_21189 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21190 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_21191 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_21192 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_21193 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_21194 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_21195 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_21196 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_21197 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_21198 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_21199 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21200 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21201 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_21202 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21203 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_21204 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21205 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_21206 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_21207 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_21208 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_21209 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_21210 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21211 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21212 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21213 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_21214 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21215 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21216 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21217 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22001 "Bbm6 [7 x 6 7 7 7 (B Ab D Gb B) " + STRING_21218 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_21219 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_21220 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_21221 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_21222 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21223 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_21224 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_21225 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_21226 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_21227 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_21228 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_21229 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_21230 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_21231 "Bdim/G [x x 0 0 0 1] (D F G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21232 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21233 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21234 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21235 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_21236 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_21237 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_21238 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_21239 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_21240 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_21241 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_21242 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_21243 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_21244 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_21245 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_21246 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_21247 "Bm7 [x 0 4 4 3 2] (D Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21248 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_21249 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_21250 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_21251 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_21252 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_21253 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_21254 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_21255 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_21256 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_21257 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_21258 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_21259 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_21260 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_21261 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_21262 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_21263 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21264 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_21265 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21266 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21267 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21268 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_21269 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21270 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_21271 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_21272 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_21273 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_21274 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_21275 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_21276 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_21277 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_21278 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_21279 "C or Cmaj [x 3 2 0 1 0] (C E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21280 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_21281 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_21282 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_21283 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_21284 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_21285 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_21286 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_21287 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_21288 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_21289 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_21290 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_21291 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_21292 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_21293 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_21294 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_21295 "C/D [x x 0 0 1 0] (C D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21296 "C/D [x x 0 5 5 3] (C D E G) " + STRING_21297 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_21298 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_21299 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_21300 "C/F [x x 3 0 1 0] (C E F G) " + STRING_21301 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_21302 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_21303 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_21304 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_21305 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_21306 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_21307 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_21308 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_21309 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_21310 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_21311 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21312 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_21313 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_21314 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_21315 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_21316 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_21317 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_21318 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_21319 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_21320 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_21321 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_21322 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_21323 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21324 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_21325 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_21326 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_21327 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21328 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_22002 "Cm6 [8 x 7 8 8 8] (C A Eb G C) " + STRING_21329 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21330 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_21331 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_21332 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_21333 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_21334 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_21335 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_21336 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_21337 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_21338 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_21339 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_21340 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_21341 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_21342 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_21343 "Csus2/B [x 3 0 0 0 3] (C D G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21344 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_21345 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_21346 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_21347 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_21348 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_21349 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_21350 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_21351 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_21352 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_21353 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_21354 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_21355 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_21356 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_21357 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_21358 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_21359 "Csus4/E [x x 3 0 1 0] (C E F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21360 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_21361 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_21362 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_21363 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_21364 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_21365 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_21366 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_21367 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_21368 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_21369 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_21370 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_21371 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_21372 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_21373 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_21374 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_21375 "D/C [x 3 x 2 3 2] (C D Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21376 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_21377 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_21378 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_21379 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_21380 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_21381 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_21382 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_21383 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_21384 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_21385 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_21386 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_21387 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_21388 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_21389 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_21390 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_21391 "D6 [x 2 0 2 0 2] (D Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21392 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_21393 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_21394 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_21395 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_21396 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_21397 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_21398 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_21399 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_21400 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_21401 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_21402 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_21403 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_21404 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_21405 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_21406 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_21407 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21408 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_21409 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_21410 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_21411 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_21412 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_21413 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_21414 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21415 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_21416 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_21417 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_21418 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_21419 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_21420 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_21421 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_21422 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_21423 "Db/B [x 4 3 4 0 4] (Db F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21424 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21425 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_21426 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_21427 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_21428 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_21429 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_21430 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_21431 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21432 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_21433 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_21434 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_21435 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_21436 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_21437 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_21438 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_21439 "Dbdim/D [x x 0 0 2 0] (Db D E G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21440 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21441 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21442 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_21443 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_21444 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_21445 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_21446 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_21447 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_21448 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_21449 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_21450 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_21451 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_21452 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_21453 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_21454 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21455 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21456 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_21457 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_21458 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_21459 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_21460 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_21461 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21462 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21463 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21464 "Dm [x 0 0 2 3 1] (D F A) " + STRING_21465 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_21466 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_21467 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_21468 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_21469 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_21470 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_21471 "Dm/C [x x 0 5 6 5] (C D F A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21472 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_21473 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_21474 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_21475 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_21476 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_22003 "Dm6 [10 x 9 10 10 10] (D B F A D) " + STRING_21477 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_21478 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_21479 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_21480 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_21481 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_21482 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_21483 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_21484 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_21485 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_21486 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_21487 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21488 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_21489 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_21490 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_21491 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_21492 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_21493 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_21494 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_21495 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_21496 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_21497 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_21498 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_21499 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_21500 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_21501 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_21502 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_21503 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21504 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_21505 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_21506 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_21507 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_21508 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_21509 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_21510 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_21511 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_21512 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_21513 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_21514 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_21515 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_21516 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_21517 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_21518 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_21519 "Dsus4/C [x 5 7 5 8 3] (C D G A)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21520 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_21521 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_21522 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_21523 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_21524 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_21525 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_21526 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_21527 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_21528 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_21529 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_21530 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_21531 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_21532 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_21533 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_21534 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_21535 "E/D [x x 0 1 0 0] (D E Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21536 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_21537 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_21538 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21539 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21540 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_21541 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21542 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21543 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21544 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_21545 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_21546 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_21547 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_21548 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_21549 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_21550 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_21551 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21552 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_21553 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_21554 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_21555 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_21556 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_21557 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_21558 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21559 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21560 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21561 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_21562 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_21563 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_21564 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_21565 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_21566 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21567 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21568 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21569 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21570 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21571 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_21572 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_21573 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_21574 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21575 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21576 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21577 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21578 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21579 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_21580 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_21581 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_21582 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_21583 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21584 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21585 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_21586 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21587 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21588 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_21589 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21590 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_21591 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_21592 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_21593 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_21594 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_21595 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_21596 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21597 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_21598 "Em [0 2 2 0 0 0] (E G B) " + STRING_21599 "Em [3 x 2 0 0 0] (E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21600 "Em [x 2 5 x x 0] (E G B) " + STRING_21601 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_21602 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_21603 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_21604 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_21605 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_21606 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_21607 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_21608 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_21609 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_21610 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_21611 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_21612 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_21613 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_21614 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_21615 "Em/D [x 10 12 12 12 0] (D E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21616 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_21617 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_21618 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_21619 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_21620 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_21621 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_21622 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_21623 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_22004 "Em6 [12 x 11 12 12 12] (E Db G B E) " + STRING_21624 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_21625 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_21626 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_21627 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_21628 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_21629 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_21630 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_21631 "Em7 [x x 2 4 3 3] (D E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21632 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_21633 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_21634 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_21635 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_21636 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_21637 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_21638 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_21639 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_21640 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_21641 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_21642 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_21643 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_21644 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_21645 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_21646 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_21647 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21648 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_21649 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_21650 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_21651 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_21652 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_21653 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_21654 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_21655 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_21656 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_21657 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_21658 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_21659 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_21660 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_21661 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_21662 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_21663 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21664 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_21665 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_21666 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_21667 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_21668 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_21669 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_21670 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_21671 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_21672 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_21673 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_21674 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_21675 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_21676 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_21677 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_21678 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_21679 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21680 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_21681 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_21682 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_21683 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_21684 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_21685 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_21686 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_21687 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_21688 "F/D [x x 0 2 1 1] (C D F A) " + STRING_21689 "F/D [x x 0 5 6 5] (C D F A) " + STRING_21690 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_21691 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_21692 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_21693 "F/E [x x 2 2 1 1] (C E F A) " + STRING_21694 "F/E [x x 3 2 1 0] (C E F A) " + STRING_21695 "F/Eb [x x 1 2 1 1] (C Eb F A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21696 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_21697 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_21698 "F/G [x x 3 2 1 3] (C F G A) " + STRING_21699 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_21700 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_21701 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_21702 "F6 [x x 0 2 1 1] (C D F A) " + STRING_21703 "F6 [x x 0 5 6 5] (C D F A) " + STRING_21704 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_21705 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_21706 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_21707 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_21708 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_21709 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_21710 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_21711 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21712 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_21713 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_21714 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_21715 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_21716 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_21717 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_21718 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_21719 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_21720 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_21721 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_21722 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_21723 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21724 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_21725 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_22005 "Fm6 [1 x 0 1 1 1] (F D Ab C F) " + STRING_21726 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_21727 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21728 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_21729 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_21730 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_21731 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_21732 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_21733 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_21734 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_21735 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_21736 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_21737 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_21738 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_21739 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_21740 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_21741 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_21742 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_21743 "Fsus2/D [3 3 0 0 1 1] (C D F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21744 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_21745 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_21746 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_21747 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_21748 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_21749 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_21750 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_21751 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_21752 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_21753 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_21754 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_21755 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_21756 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_21757 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_21758 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_21759 "G/C [3 3 0 0 0 3] (C D G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21760 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_21761 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_21762 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_21763 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_21764 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_21765 "G/E [x x 0 12 12 12] (D E G B) " + STRING_21766 "G/E [x x 0 9 8 7] (D E G B) " + STRING_21767 "G/E [x x 2 4 3 3] (D E G B) " + STRING_21768 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_21769 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_21770 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_21771 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_21772 "G/F [x x 0 0 0 1] (D F G B) " + STRING_21773 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_21774 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_21775 "G/Gb [3 2 0 0 0 2] (D Gb G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21776 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_21777 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_21778 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_21779 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_21780 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_21781 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_21782 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_21783 "G6 [x x 0 12 12 12] (D E G B) " + STRING_21784 "G6 [x x 0 9 8 7] (D E G B) " + STRING_21785 "G6 [x x 2 4 3 3] (D E G B) " + STRING_21786 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_21787 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_21788 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_21789 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_21790 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_21791 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21792 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_21793 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_21794 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_21795 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_21796 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_21797 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_21798 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_21799 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_21800 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_21801 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_21802 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_21803 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_21804 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_21805 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_21806 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21807 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21808 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21809 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21810 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21811 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_21812 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_21813 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_21814 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21815 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_21816 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_21817 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21818 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_21819 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_21820 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_21821 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_21822 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_21823 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21824 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_21825 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_21826 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_21827 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_21828 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_21829 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_21830 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_21831 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_21832 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_21833 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_21834 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_21835 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_21836 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_21837 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_21838 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_21839 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21840 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_21841 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_21842 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_21843 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_21844 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_21845 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_21846 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_21847 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_21848 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_21849 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_21850 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_21851 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_21852 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_21853 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_21854 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_21855 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21856 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_21857 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_21858 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_21859 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_21860 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_21861 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_21862 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_21863 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_22006 "Gm6 [3 x 2 3 3 3] (G E Bb D G) " + STRING_21864 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_21865 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_21866 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_21867 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_21868 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_21869 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_21870 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_21871 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21872 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_21873 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_21874 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_21875 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_21876 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_21877 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_21878 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_21879 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_21880 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_21881 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_21882 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_21883 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_21884 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_21885 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_21886 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_21887 "Gsus2/E [5 0 0 0 3 0] (D E G A) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_21888 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_21889 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_21890 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_21891 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_21892 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_21893 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_21894 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_21895 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_21896 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_21897 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_21898 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_21899 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_21900 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_21901 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_21902 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT1 "0;PIANO;Acoustic Grand Piano" + STRING_INSTRUMENT2 "1;PIANO;Bright Acoustic Piano" + STRING_INSTRUMENT3 "2;PIANO;Electric Grand Piano" + STRING_INSTRUMENT4 "3;PIANO;Honky-tonk Piano" + STRING_INSTRUMENT5 "4;PIANO;Rhodes Piano" + STRING_INSTRUMENT6 "5;PIANO;Chorused Piano" + STRING_INSTRUMENT7 "6;PIANO;Harpsichord" + STRING_INSTRUMENT8 "7;PIANO;Clavinet" + STRING_INSTRUMENT9 "8;CHROM PERCUSSION;Celesta" + STRING_INSTRUMENT10 "9;CHROM PERCUSSION;Glockenspiel" + STRING_INSTRUMENT11 "10;CHROM PERCUSSION;Music Box" + STRING_INSTRUMENT12 "11;CHROM PERCUSSION;Vibraphone" + STRING_INSTRUMENT13 "12;CHROM PERCUSSION;Marimba" + STRING_INSTRUMENT14 "13;CHROM PERCUSSION;Xylophone" + STRING_INSTRUMENT15 "14;CHROM PERCUSSION;Tubular-bell" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT16 "15;CHROM PERCUSSION;Dulcimer" + STRING_INSTRUMENT17 "16;ORGAN;Hammond Organ" + STRING_INSTRUMENT18 "17;ORGAN;Percussive Organ" + STRING_INSTRUMENT19 "18;ORGAN;Rock Organ" + STRING_INSTRUMENT20 "19;ORGAN;Church Organ" + STRING_INSTRUMENT21 "20;ORGAN;Reed Organ" + STRING_INSTRUMENT22 "21;ORGAN;Accordion" + STRING_INSTRUMENT23 "22;ORGAN;Harmonica" + STRING_INSTRUMENT24 "23;ORGAN;Tango Accordion" + STRING_INSTRUMENT25 "24;GUITAR;Acoustic Guitar(nylon)" + STRING_INSTRUMENT26 "25;GUITAR;Acoustic Guitar(steel)" + STRING_INSTRUMENT27 "26;GUITAR;Electric Guitar(jazz)" + STRING_INSTRUMENT28 "27;GUITAR;Electric Guitar(clean)" + STRING_INSTRUMENT29 "28;GUITAR;Electric Guitar(muted)" + STRING_INSTRUMENT30 "29;GUITAR;Overdriven Guitar" + STRING_INSTRUMENT31 "30;GUITAR;Distortion Guitar" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT32 "31;GUITAR;Guitar Harmonics" + STRING_INSTRUMENT33 "32;BASS;Acoustic Bass" + STRING_INSTRUMENT34 "33;BASS;Electric Bass(finger)" + STRING_INSTRUMENT35 "34;BASS;Electric Bass(pick)" + STRING_INSTRUMENT36 "35;BASS;Fretless Bass" + STRING_INSTRUMENT37 "36;BASS;Slap Bass 1" + STRING_INSTRUMENT38 "37;BASS;Slap Bass 2" + STRING_INSTRUMENT39 "38;BASS;Synth Bass 1" + STRING_INSTRUMENT40 "39;BASS;Synth Bass 2" + STRING_INSTRUMENT41 "40;STRINGS;Violin" + STRING_INSTRUMENT42 "41;STRINGS;Viola" + STRING_INSTRUMENT43 "42;STRINGS;Cello" + STRING_INSTRUMENT44 "43;STRINGS;Contrabass" + STRING_INSTRUMENT45 "44;STRINGS;Tremolo Strings" + STRING_INSTRUMENT46 "45;STRINGS;Pizzicato Strings" + STRING_INSTRUMENT47 "46;STRINGS;Orchestral Harp" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT48 "47;STRINGS;Timpani" + STRING_INSTRUMENT49 "48;ENSEMBLE;String Ensemble 1" + STRING_INSTRUMENT50 "49;ENSEMBLE;String Ensemble 2" + STRING_INSTRUMENT51 "50;ENSEMBLE;Synth Strings 1" + STRING_INSTRUMENT52 "51;ENSEMBLE;Synth Strings 2" + STRING_INSTRUMENT53 "52;ENSEMBLE;Choir Aahs" + STRING_INSTRUMENT54 "53;ENSEMBLE;Voice Oohs" + STRING_INSTRUMENT55 "54;ENSEMBLE;Synth Voice" + STRING_INSTRUMENT56 "55;ENSEMBLE;Orchestra Hit" + STRING_INSTRUMENT57 "56;BRASS;Trumpet" + STRING_INSTRUMENT58 "57;BRASS;Trombone" + STRING_INSTRUMENT59 "58;BRASS;Tuba" + STRING_INSTRUMENT60 "59;BRASS;Muted Trumpet" + STRING_INSTRUMENT61 "60;BRASS;French Horn" + STRING_INSTRUMENT62 "61;BRASS;Brass Section" + STRING_INSTRUMENT63 "62;BRASS;Synth Brass 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT64 "63;BRASS;Synth Brass 2" + STRING_INSTRUMENT65 "64;REED;Soprano Sax" + STRING_INSTRUMENT66 "65;REED;Alto Sax" + STRING_INSTRUMENT67 "66;REED;Tenor Sax" + STRING_INSTRUMENT68 "67;REED;Baritone Sax" + STRING_INSTRUMENT69 "68;REED;Oboe" + STRING_INSTRUMENT70 "69;REED;English Horn" + STRING_INSTRUMENT71 "70;REED;Bassoon" + STRING_INSTRUMENT72 "71;REED;Clarinet" + STRING_INSTRUMENT73 "72;PIPE;Piccolo" + STRING_INSTRUMENT74 "73;PIPE;Flute" + STRING_INSTRUMENT75 "74;PIPE;Recorder" + STRING_INSTRUMENT76 "75;PIPE;Pan Flute" + STRING_INSTRUMENT77 "76;PIPE;Bottle Blow" + STRING_INSTRUMENT78 "77;PIPE;Shakuhachi" + STRING_INSTRUMENT79 "78;PIPE;Whistle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT80 "79;PIPE;Ocarina" + STRING_INSTRUMENT81 "80;SYNTH LEAD;Lead 1(square)" + STRING_INSTRUMENT82 "81;SYNTH LEAD;Lead 2(sawtooth)" + STRING_INSTRUMENT83 "82;SYNTH LEAD;Lead 3(calliope)" + STRING_INSTRUMENT84 "83;SYNTH LEAD;Lead 4(chiffer)" + STRING_INSTRUMENT85 "84;SYNTH LEAD;Lead 5(charang)" + STRING_INSTRUMENT86 "85;SYNTH LEAD;Lead 6(voice)" + STRING_INSTRUMENT87 "86;SYNTH LEAD;Lead 7(5th sawtooth)" + STRING_INSTRUMENT88 "87;SYNTH LEAD;Lead 8(bass&lead)" + STRING_INSTRUMENT89 "88;SYNTH PAD;Pad 1(new age)" + STRING_INSTRUMENT90 "89;SYNTH PAD;Pad 2(warm)" + STRING_INSTRUMENT91 "90;SYNTH PAD;Pad 3(polysynth)" + STRING_INSTRUMENT92 "91;SYNTH PAD;Pad 4(choir)" + STRING_INSTRUMENT93 "92;SYNTH PAD;Pad 5(bowed glass)" + STRING_INSTRUMENT94 "93;SYNTH PAD;Pad 6(metal)" + STRING_INSTRUMENT95 "94;SYNTH PAD;Pad 7(halo)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT96 "95;SYNTH PAD;Pad 8(sweep)" + STRING_INSTRUMENT97 "96;SYNTH EFFECTS;FX 1(rain)" + STRING_INSTRUMENT98 "97;SYNTH EFFECTS;FX 2(soundtrack)" + STRING_INSTRUMENT99 "98;SYNTH EFFECTS;FX 3(crystal)" + STRING_INSTRUMENT100 "99;SYNTH EFFECTS;FX 4(atmosphere)" + STRING_INSTRUMENT101 "100;SYNTH EFFECTS;FX 5(brightness)" + STRING_INSTRUMENT102 "101;SYNTH EFFECTS;FX 6(goblin)" + STRING_INSTRUMENT103 "102;SYNTH EFFECTS;FX 7(echo drops)" + STRING_INSTRUMENT104 "103;SYNTH EFFECTS;FX 8(star-theme)" + STRING_INSTRUMENT105 "104;ETHNIC;Sitar" + STRING_INSTRUMENT106 "105;ETHNIC;Banjo" + STRING_INSTRUMENT107 "106;ETHNIC;Shamisen" + STRING_INSTRUMENT108 "107;ETHNIC;Koto" + STRING_INSTRUMENT109 "108;ETHNIC;Kalimba" + STRING_INSTRUMENT110 "109;ETHNIC;Bag Pipe" + STRING_INSTRUMENT111 "110;ETHNIC;Fiddle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT112 "111;ETHNIC;Shanai" + STRING_INSTRUMENT113 "112;PERCUSSIVE;Tinkle Bell" + STRING_INSTRUMENT114 "113;PERCUSSIVE;Agogo" + STRING_INSTRUMENT115 "114;PERCUSSIVE;Steel Drums" + STRING_INSTRUMENT116 "115;PERCUSSIVE;Woodblock" + STRING_INSTRUMENT117 "116;PERCUSSIVE;Taiko Drum" + STRING_INSTRUMENT118 "117;PERCUSSIVE;Melodic Tom" + STRING_INSTRUMENT119 "118;PERCUSSIVE;Synth Drum" + STRING_INSTRUMENT120 "119;PERCUSSIVE;Reverse Cymbal" + STRING_INSTRUMENT121 "120;SOUND EFFECTS;Guitar Fret Noise" + STRING_INSTRUMENT122 "121;SOUND EFFECTS;Breath Noise" + STRING_INSTRUMENT123 "122;SOUND EFFECTS;Seashore" + STRING_INSTRUMENT124 "123;SOUND EFFECTS;Bird Tweet" + STRING_INSTRUMENT125 "124;SOUND EFFECTS;Telephone Ring" + STRING_INSTRUMENT126 "125;SOUND EFFECTS;Helicopter" + STRING_INSTRUMENT127 "126;SOUND EFFECTS;Applause" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT128 "127;SOUND EFFECTS;Gun Shot" + STRING_INSTRUMENT129 "135;MIDI PERCUSSION;Acoustic Bass Drum" + STRING_INSTRUMENT130 "136;MIDI PERCUSSION;Bass Drum" + STRING_INSTRUMENT131 "137;MIDI PERCUSSION;Slide Stick" + STRING_INSTRUMENT132 "138;MIDI PERCUSSION;Acoustic Snare" + STRING_INSTRUMENT133 "139;MIDI PERCUSSION;Hand Clap" + STRING_INSTRUMENT134 "140;MIDI PERCUSSION;Electric Snare" + STRING_INSTRUMENT135 "141;MIDI PERCUSSION;Low Floor Tom" + STRING_INSTRUMENT136 "142;MIDI PERCUSSION;Closed High-Hat" + STRING_INSTRUMENT137 "143;MIDI PERCUSSION;High Floor Tom" + STRING_INSTRUMENT138 "144;MIDI PERCUSSION;Pedal High Hat" + STRING_INSTRUMENT139 "145;MIDI PERCUSSION;Low Tom" + STRING_INSTRUMENT140 "146;MIDI PERCUSSION;Open High Hat" + STRING_INSTRUMENT141 "147;MIDI PERCUSSION;Low-Mid Tom" + STRING_INSTRUMENT142 "148;MIDI PERCUSSION;High-Mid Tom" + STRING_INSTRUMENT143 "149;MIDI PERCUSSION;Crash Cymbal 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT144 "150;MIDI PERCUSSION;High Tom" + STRING_INSTRUMENT145 "151;MIDI PERCUSSION;Ride Cymbal 1" + STRING_INSTRUMENT146 "152;MIDI PERCUSSION;Chinese Cymbal" + STRING_INSTRUMENT147 "153;MIDI PERCUSSION;Ride Bell" + STRING_INSTRUMENT148 "154;MIDI PERCUSSION;Tambourine" + STRING_INSTRUMENT149 "155;MIDI PERCUSSION;Splash Cymbal" + STRING_INSTRUMENT150 "156;MIDI PERCUSSION;Cowbell" + STRING_INSTRUMENT151 "157;MIDI PERCUSSION;Crash Cymbal 2" + STRING_INSTRUMENT152 "158;MIDI PERCUSSION;Vibraslap" + STRING_INSTRUMENT153 "159;MIDI PERCUSSION;Ride Cymbal 2" + STRING_INSTRUMENT154 "160;MIDI PERCUSSION;High Bongo" + STRING_INSTRUMENT155 "161;MIDI PERCUSSION;Low Bongo" + STRING_INSTRUMENT156 "162;MIDI PERCUSSION;Mute High Conga" + STRING_INSTRUMENT157 "163;MIDI PERCUSSION;Open High Conga" + STRING_INSTRUMENT158 "164;MIDI PERCUSSION;Low Conga" + STRING_INSTRUMENT159 "165;MIDI PERCUSSION;High Timbale" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT160 "166;MIDI PERCUSSION;Low Timbale" + STRING_INSTRUMENT161 "167;MIDI PERCUSSION;High Agogo" + STRING_INSTRUMENT162 "168;MIDI PERCUSSION;Low Agogo" + STRING_INSTRUMENT163 "169;MIDI PERCUSSION;Cabasa" + STRING_INSTRUMENT164 "170;MIDI PERCUSSION;Maracas" + STRING_INSTRUMENT165 "171;MIDI PERCUSSION;Short Whistle" + STRING_INSTRUMENT166 "172;MIDI PERCUSSION;Long Whistle" + STRING_INSTRUMENT167 "173;MIDI PERCUSSION;Short Guiro" + STRING_INSTRUMENT168 "174;MIDI PERCUSSION;Long Guiro" + STRING_INSTRUMENT169 "175;MIDI PERCUSSION;Claves" + STRING_INSTRUMENT170 "176;MIDI PERCUSSION;High Wood Block" + STRING_INSTRUMENT171 "177;MIDI PERCUSSION;Low Wood Block" + STRING_INSTRUMENT172 "178;MIDI PERCUSSION;Mute Cuica" + STRING_INSTRUMENT173 "179;MIDI PERCUSSION;Open Cuica" + STRING_INSTRUMENT174 "180;MIDI PERCUSSION;Mute Triangle" + STRING_INSTRUMENT175 "181;MIDI PERCUSSION;Open Triangle" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/guitar/backup/20040302/license.cpp b/guitar/backup/20040302/license.cpp new file mode 100644 index 0000000..61f14a2 --- /dev/null +++ b/guitar/backup/20040302/license.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +/* + The license will be uuencoded on top of xor. This should be sufficient to protect the contents. + Lic: TM105R20020101013001EF + VVVVVVYYYYMMDDTTDDCCCC + + XX=version TM105R. should check this against this product version and release + YYYY=year of license issuance. 30 day license will use this value to expire itself. + MM=month of license issuance 30 day license will use this value to expiure + DD=day of license issuance + TT=type of license + 01=30 day license, expires 30 days from issuance. + 02=Full license, never expires. + DD=for type 01 license, indicates number of days license is good for. + CCCC=checksum, just add up ASCII values of the characters through TT, display in hex. +*/ + +const String License::smBeginLicense="BEGIN LICENSE"; +const String License::smEndLicense="END LICENSE"; + +String License::generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount) +{ + String strLicenseKey; + String strIssueDate; + String strLicenseType; + String strDayCount; + String strChecksum; + + strLicenseKey=String("TM"); + strLicenseKey+=strProductVersion.substr(0,3); + ::sprintf(strIssueDate,"%4d%02d%02d",issueDate.year(),issueDate.month(),issueDate.day()); + strLicenseKey+=strIssueDate; + ::sprintf(strLicenseType,"%02d",licenseType); + strLicenseKey+=strLicenseType; + ::sprintf(strDayCount,"%02d",dayCount); + strLicenseKey+=strDayCount; + ::sprintf(strChecksum,"%04lx",calculateChecksum(strLicenseKey)); + strLicenseKey+=strChecksum; + return UUTool::encode(xor(strLicenseKey)); +} + +String numericEncode(const String &strLicense) +{ + return String(); +} + +String numericDecode(const String &strLicense) +{ + return String(); +} + +bool License::fromLines(Block &strLicenseLines) +{ + if(3!=strLicenseLines.size())return false; + if(!(strLicenseLines[0]==smBeginLicense))return false; + if(!(strLicenseLines[2]==smEndLicense))return false; + return fromString(strLicenseLines[1]); +} + +// TM105R2002040301 30 03d8 + +bool License::fromString(const String &strLicense) +{ + VersionInfo versionInfo; + SystemTime currDate; + SystemTime expireDate; + String strHeader; + String strDecoded; + String strVersion; + int hashCode; + + mUUEncodedLicense=strLicense; + strDecoded=xor(UUTool::decode(strLicense)); + strHeader=strDecoded.substr(0,1); + if(!(strHeader==String("TM")))return false; + mProductVersion=strDecoded.substr(2,5); + mIssueDate.year(strDecoded.substr(6,9).toInt()); + mIssueDate.month((SystemTime::Month)strDecoded.substr(10,11).toInt()); + mIssueDate.day(strDecoded.substr(12,13).toInt()); + mLicenseType=(LicenseType)strDecoded.substr(14,15).toInt(); + mDayCount=strDecoded.substr(16,17).toInt(); + hashCode=strDecoded.substr(18,21).hex(); + if(hashCode!=calculateChecksum(strDecoded.substr(0,17)))return false; + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return mIsValid=true; + expireDate=mIssueDate; + expireDate.daysAdd360(mDayCount); + if(currDate>=expireDate)return false; + return mIsValid=true; +} + +String License::xor(const String &strLicense) +{ + String strEncoded; + int strLength; + + strEncoded.reserve((strLength=strLicense.length())+1); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } +// GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setLogLevel(GlobalDefs::NoLog); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); + +} + diff --git a/guitar/backup/20040302/mainfrm.cpp b/guitar/backup/20040302/mainfrm.cpp new file mode 100644 index 0000000..cab63f1 --- /dev/null +++ b/guitar/backup/20040302/mainfrm.cpp @@ -0,0 +1,1085 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); + mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + return false; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + return false; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_PRINT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_PRINT",GlobalDefs::Verbose); + handleFilePrint(); + break; + case MENU_FILE_NEW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_NEW",GlobalDefs::Verbose); + handleFileNew(); + break; + case MENU_FILE_OPEN : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_OPEN",GlobalDefs::Verbose); + handleOpenProject(); + break; + case MENU_FILE_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_IMPORT",GlobalDefs::Verbose); + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_MIDI_IMPORT",GlobalDefs::Verbose); + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_CLOSE",GlobalDefs::Verbose); + handleFileClose(); + break; + case MENU_FILE_EXIT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_EXIT",GlobalDefs::Verbose); + handleFileExit(); + break; + case MENU_FILE_SAVE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVE",GlobalDefs::Verbose); + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVEAS",GlobalDefs::Verbose); + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_VIEW_FRETBOARD",GlobalDefs::Verbose); + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAY",GlobalDefs::Verbose); + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYTOEND",GlobalDefs::Verbose); + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYREPEATED",GlobalDefs::Verbose); + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE",GlobalDefs::Verbose); + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE_REPEATED",GlobalDefs::Verbose); + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_STOP",GlobalDefs::Verbose); + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_ENTRYPROPS",GlobalDefs::Verbose); + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETENDRANGE",GlobalDefs::Verbose); + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETSTARTRANGE",GlobalDefs::Verbose); + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_RANGES",GlobalDefs::Verbose); + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_INCREASETEMPO",GlobalDefs::Verbose); + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_DECREASETEMPO",GlobalDefs::Verbose); + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_SETTINGS",GlobalDefs::Verbose); + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_LOOKUP",GlobalDefs::Verbose); + handleChordLookup(); + break; + case MENU_CHORDS_ENTER : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_ENTER",GlobalDefs::Verbose); + handleChordEnter(); + break; + case MENU_FRETBOARD_CLEAR : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_CLEAR",GlobalDefs::Verbose); + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_SHOWALLPOSITIONS",GlobalDefs::Verbose); + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_SCALES_SHOW",GlobalDefs::Verbose); + handleShowScales(); + break; + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + break; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + break; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CASCADE",GlobalDefs::Verbose); + cascade(); + break; + case IDM_TILE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_TILE",GlobalDefs::Verbose); + tile(); + break; + case IDM_ARRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_ARRANGE",GlobalDefs::Verbose); + arrange(); + break; + case IDM_CLOSEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CLOSEALL",GlobalDefs::Verbose); + closeAll(); + break; + case IDM_MINIMIZEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_MINIMIZEALL",GlobalDefs::Verbose); + minimizeAll(); + break; + case IDM_RESTOREALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_RESTOREALL",GlobalDefs::Verbose); + restoreAll(); + break; + default : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::keyDownHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::paintHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); + GlobalDefs::outDebug("[MainFrame::createHandler]",GlobalDefs::Verbose); + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + Control desktop(::GetDesktopWindow(),0,false); + setWindowPos(desktop.width()>InitialWidth?InitialWidth:desktop.width(),desktop.height()>InitialHeight?InitialHeight:desktop.height()); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + updateHistory(); + if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ + Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::guiFretboardHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + + GlobalDefs::outDebug("[MainFrame::guiFretboardHandler]",GlobalDefs::Verbose); + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow); + } + if(!someCallbackData.lParam()) + { + ((FretViewWindow&)*mdiWindow).clearNotes(); + } + else + { + if(CBCommands::FBShowTab==someCallbackData.wParam()) + { + const TabEntry &entry=*(TabEntry*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(entry,true,false); // show note only, do not play. used by tabpage + } + else if(CBCommands::FBPlayNote==someCallbackData.wParam()) + { + const Note ¬e=*(Note*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(note); + } + else if(CBCommands::FBPlayScale==someCallbackData.wParam()) // This is used by the scale dialog + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale,true); + } + else if(CBCommands::FBShowScale==someCallbackData.wParam()) // This is used by scale dialog to show, but not play. + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale); + } + else if(CBCommands::FBPlayFrettedNotes==someCallbackData.wParam()) // not currently used see ScaleDlg + { + const FrettedNotes &frettedNotes=*(FrettedNotes*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(frettedNotes); + } + else if(CBCommands::FBPlayTab==someCallbackData.wParam()) + { + SmartPointer mdiWindow; + if(getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + ((FretViewWindow&)*mdiWindow).setNote(*(TabEntry*)someCallbackData.lParam(),true); + } + else if(CBCommands::FBPlayChord==someCallbackData.wParam()) + { + const Music::Chord &chord=*(Music::Chord*)someCallbackData.lParam(); + SmartPointer mdiWindow; + getActive(mdiWindow); + if(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + TabEntry entry; + entry.fromChord(chord); + ((ViewWindow&)*mdiWindow).insert(entry); + } + else if(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)) + { + ((FretViewWindow&)*mdiWindow).setNote(chord,true); + } + } + } + return false; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} + +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} + +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} + +// menu handlers + +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} + +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} + +void MainFrame::handleFileNew(void) +{ + createProjectView(); +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + openDialog.creationFlags(OpenDialog::ALLOWMULTISELECT); + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + for(int index=0;index mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} + +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} + +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} + +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleChordEnter() +{ + ChordBuilderDialog chordBuilderDialog; + chordBuilderDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} + +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} + +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} + +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} + +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} + +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} + +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} + +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} + +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} + +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} + +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} + +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} + +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} + +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} + +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} + +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} + +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} + +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} + +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} + +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} + +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; + enum{InitialWidth=800,InitialHeight=600}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleMIDIImport(void); + void handleFileClose(void); + void handleFileExit(void); + void handleFileNew(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleChordEnter(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void createToolBar(void); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void handleHistogram(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mGUIFretboardHandler; + Callback mDropFilesHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/guitar/backup/20040302/notepath.cpp b/guitar/backup/20040302/notepath.cpp new file mode 100644 index 0000000..d6f75df --- /dev/null +++ b/guitar/backup/20040302/notepath.cpp @@ -0,0 +1,12 @@ +#include + +String NotePath::toString(void) +{ + String strNotePath; + + for(int index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class NotePath; +typedef Array NotePaths; + +class NotePath : public Block +{ +public: + String toString(void); +}; +#endif diff --git a/guitar/backup/20040302/ordering.hpp b/guitar/backup/20040302/ordering.hpp new file mode 100644 index 0000000..81ab6b1 --- /dev/null +++ b/guitar/backup/20040302/ordering.hpp @@ -0,0 +1,73 @@ +#ifndef _GUITAR_ORDERING_HPP_ +#define _GUITAR_ORDERING_HPP_ + +class Ordering +{ +public: + Ordering(int criteria=0,int value=0); + virtual ~Ordering(); + bool operator<(const Ordering &ordering)const; + bool operator>(const Ordering &ordering)const; + bool operator==(const Ordering &ordering)const; + int getCriteria(void)const; + void setCriteria(int criteria); + int getValue(void)const; + void setValue(int value); +private: + int mCriteria; + int mValue; +}; + +inline +Ordering::Ordering(int criteria,int value) +: mCriteria(criteria), mValue(value) +{ +} + +inline +Ordering::~Ordering() +{ +} + +inline +bool Ordering::operator<(const Ordering &ordering)const +{ + return mCriteria(const Ordering &ordering)const +{ + return mCriteria>ordering.mCriteria; +} + +inline +bool Ordering::operator==(const Ordering &ordering)const +{ + return mCriteria==ordering.mCriteria; +} + +inline +int Ordering::getCriteria(void)const +{ + return mCriteria; +} + +inline +void Ordering::setCriteria(int criteria) +{ + mCriteria=criteria; +} + +inline +int Ordering::getValue(void)const +{ + return mValue; +} + +inline +void Ordering::setValue(int value) +{ + mValue=value; +} +#endif diff --git a/guitar/backup/20040302/registration.cpp b/guitar/backup/20040302/registration.cpp new file mode 100644 index 0000000..2b6ab23 --- /dev/null +++ b/guitar/backup/20040302/registration.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include + +SmartPointer Registration::smRegistration; + +Registration::Registration() +: mRegistrationKeyName(STRING_REGISTRATIONKEYNAME), + mSettingsLicenseKey(STRING_SETTINGSLICENSE) +{ +} + +Registration::~Registration() +{ +} + +Registration &Registration::getInstance() +{ + if(!smRegistration.isOkay()) + { + smRegistration=::new Registration(); + smRegistration.disposition(PointerDisposition::Delete); + } + return *smRegistration; +} + +bool Registration::hasGID(void)const +{ + FileHandle gidFile; + return gidFile.open("install.gid",FileHandle::Read,FileHandle::ShareRead,FileHandle::Open,FileHandle::Hidden); +} + +bool Registration::hasLicense(void)const +{ + RegKey regKeyRegistration; + String strLicense; + + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + return strLicense.isNull()?false:true; +} + +bool Registration::getLicense(License &license)const +{ + String strLicense; + RegKey regKeyRegistration; + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + license.fromString(strLicense); + return true; +} + +bool Registration::applyLicense(Block &strLicenseLines) +{ + RegKey regKeyRegistration; + License license; + + license.fromLines(strLicenseLines); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,license.getUUEncodedLicense()); + return true; +} + +bool Registration::applyLicense(const String &uuencodedLicense) +{ + RegKey regKeyRegistration; + License license; + + license.fromString(uuencodedLicense); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,uuencodedLicense); + return true; +} + +bool Registration::create30DayLicense(void)const +{ + createLicense(30); + return true; +} + +bool Registration::create15DayLicense(void)const +{ + createLicense(15); + return true; +} + +bool Registration::createPermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + +License Registration::generatePermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + License license; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + license.fromString(strLicense); + return license; +} + +bool Registration::removeLicense(void) +{ + RegKey regKeyRegistration; + return regKeyRegistration.deleteKey(mRegistrationKeyName); +} + +bool Registration::createLicense(int days)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Expires,days); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + diff --git a/guitar/backup/20040302/registry.cpp b/guitar/backup/20040302/registry.cpp new file mode 100644 index 0000000..ecf9669 --- /dev/null +++ b/guitar/backup/20040302/registry.cpp @@ -0,0 +1,191 @@ +#include +#include + +Registry::Registry(void) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mRegKeyHistory(RegKey::CurrentUser), + mSettingsAction(STRING_SETTINGSACTION), + mSettingsMicrosecondsPerQuarterNote(STRING_SETTINGSMICROSECONDSPERQUARTERNOTE), + mSettingsInstrument(STRING_SETTINGSINSTRUMENT), + mSettingsNoteLetters(STRING_SETTINGSNOTELETTERS), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT) +{ + guarantee(); + getCacheNames(); +} + +Registry::Registry(const Registry &someRegistry) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT), + mRegKeyHistory(RegKey::CurrentUser) +{ + *this=someRegistry; +} + +Registry::~Registry() +{ +} + +Registry &Registry::operator=(const Registry &/*registry*/) +{ + return *this; +} + +void Registry::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +void Registry::guarantee(void) +{ + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setShowAction(GlobalDefs::ShowAction); + setShowNotes(GlobalDefs::ShowNotes); + setMicrosecondsPerQuarterNote(GlobalDefs::MicrosecondsPerQuarterNote); + setMIDIOutputDevice("MIDIMAPPER"); + } + Instrument instrument=getInstrument(); + if(!instrument.isOkay())setInstrument(Instruments()[0]); +} + +bool Registry::isOkay(void)const +{ + return mRegKeyHistory.isOkay(); +} + +bool Registry::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool Registry::setHistory(Block &nameList) +{ + removeHistory(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;indexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Registry +{ +public: + Registry(void); + Registry(const Registry ®istry); + virtual ~Registry(); + Registry &operator=(const Registry ®istry); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool removeHistory(const String &strName); + bool getShowNotes(void); + void setShowNotes(bool showNoteLetters); + bool getShowAction(void)const; + void setShowAction(bool showAction); + int getMicrosecondsPerQuarterNote(void)const; + void setMicrosecondsPerQuarterNote(int microsecondsPerQuarterNote); + long getMillisecondsPerQuarterNote(void)const; + Instrument getInstrument(void)const; + void setInstrument(Instrument instrument); + String getMIDIOutputDevice(void)const; + void setMIDIOutputDevice(const String &midiOutputDevice); + bool isOkay(void)const; +private: + enum {MaxCachedNames=7}; + void guarantee(void); + void getCacheNames(void); + bool removeHistory(void); + + Block mCachedNames; + String mHistoryKeyName; + String mHistoryKeyShortName; + String mRegistryKeyName; + String mSettingsKeyName; + String mSettingsAction; + String mSettingsNoteLetters; + String mSettingsMicrosecondsPerQuarterNote; + String mSettingsInstrument; + String mSettingsMIDIOutput; + RegKey mRegKeyHistory; + RegKey mRegKeySettings; +}; + +inline +long Registry::getMillisecondsPerQuarterNote(void)const +{ + return getMicrosecondsPerQuarterNote()/1000; +} +#endif diff --git a/guitar/backup/20040302/requirement.hpp b/guitar/backup/20040302/requirement.hpp new file mode 100644 index 0000000..f90c959 --- /dev/null +++ b/guitar/backup/20040302/requirement.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REQUIREMENT_HPP_ +#define _GUITAR_REQUIREMENT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Requirement; + +typedef SmartPointer PtrRequirement; + +class Requirement : public FrettedNote +{ +public: + Requirement(); + virtual ~Requirement(); + bool getSatisfied(void)const; + void setSatisfied(bool satisfied); + Requirement &operator=(const FrettedNote &frettedNote); +private: + bool mSatisfied; +}; + +inline +Requirement::Requirement() +: mSatisfied(false) +{ +} + +inline +Requirement::~Requirement() +{ +} + +inline +Requirement &Requirement::operator=(const FrettedNote &frettedNote) +{ + (FrettedNote&)*this=frettedNote; + return *this; +} + +inline +bool Requirement::getSatisfied(void)const +{ + return mSatisfied; +} + +inline +void Requirement::setSatisfied(bool satisfied) +{ + mSatisfied=satisfied; +} +#endif diff --git a/guitar/backup/20040302/requirements.cpp b/guitar/backup/20040302/requirements.cpp new file mode 100644 index 0000000..b5b6851 --- /dev/null +++ b/guitar/backup/20040302/requirements.cpp @@ -0,0 +1,77 @@ +#include +#include + +void Requirements::setRequirements(Block ¬es) +{ + size(notes.size()); + for(int index=0;index searchOrder; + + searchOrder.size(notePaths.size()); + for(int index=0;index sortOrder; + sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets + for(index=0;indexsetSatisfied(true); + satisfied=true; + break; + } + } + return satisfied; +} + +bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement) +{ + for(int index=0;indextoString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + if(requirement->getNote()==frettedNote.getNote()&& + requirement->getOctave()==frettedNote.getOctave()&& + !requirement->getSatisfied())return true; + } + return false; +} + +bool Requirements::haveRequirement(const FrettedNote &frettedNote) +{ + for(int index=0;index +#endif +#ifndef _GUITAR_ORDERING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTEPATH_HPP_ +#include +#endif +#ifndef _GUITAR_REQUIREMENT_HPP_ +#include +#endif + +class Requirements : public Array +{ +public: + Requirements(void); + Requirements(Block ¬es); + virtual ~Requirements(); + bool satisfyRequirements(NotePaths ¬ePaths); + void setRequirements(Block ¬es); +private: + bool satisfyRequirement(NotePath ¬ePath); + bool haveRequirement(const FrettedNote &frettedNote); + bool isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement); +}; + +inline +Requirements::Requirements(void) +{ +} + +inline +Requirements::Requirements(Block ¬es) +{ + setRequirements(notes); +} + +inline +Requirements::~Requirements() +{ +} +#endif diff --git a/guitar/backup/20040302/resource.h b/guitar/backup/20040302/resource.h new file mode 100644 index 0000000..1797ae6 --- /dev/null +++ b/guitar/backup/20040302/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by guitar.rc +// +#define APPICON 103 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1087 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/guitar/backup/20040302/settingsdlg.cpp b/guitar/backup/20040302/settingsdlg.cpp new file mode 100644 index 0000000..d6fc4c0 --- /dev/null +++ b/guitar/backup/20040302/settingsdlg.cpp @@ -0,0 +1,209 @@ +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(void) +{ + mInitHandler.setCallback(this,&SettingsDialog::initHandler); + mCreateHandler.setCallback(this,&SettingsDialog::createHandler); + mCloseHandler.setCallback(this,&SettingsDialog::closeHandler); + mDestroyHandler.setCallback(this,&SettingsDialog::destroyHandler); + mCommandHandler.setCallback(this,&SettingsDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog::SettingsDialog(const SettingsDialog &someSettingsDialog) +{ // private implementation + *this=someSettingsDialog; +} + +SettingsDialog::~SettingsDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog &SettingsDialog::operator=(const SettingsDialog &someSettingsDialog) +{ // private implementation + return *this; +} + +bool SettingsDialog::perform(GUIWindow &parentWindow) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"SETTINGSDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SettingsDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + initialize(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType SettingsDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + apply(); + break; + case SETTINGS_DEFAULTS : + selectDefaults(); + } + return (CallbackData::ReturnType)FALSE; +} + +void SettingsDialog::initialize(void) +{ + Registry registry; + + sendMessage(SETTINGS_INSTRUMENT,CB_RESETCONTENT,0,0L); + for(int index=0;index deviceNames; + int currentSelection=-1; + + MIDIOutputDevice::getDeviceNames(deviceNames); + sendMessage(SETTINGS_MIDIOUT,CB_RESETCONTENT,0,0L); + deviceNames.insert(&String("MIDIMAPPER")); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class SettingsDialog : public DWindow +{ +public: + SettingsDialog(void); + virtual ~SettingsDialog(); + bool perform(GUIWindow &parentWindow); +private: + SettingsDialog(const SettingsDialog &someSettingsDialog); + SettingsDialog &operator=(const SettingsDialog &someSettingsDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void initialize(void); + void selectInstrument(Instrument instrument); + void selectDefaults(void); + void selectTiming(int timing); + void selectAction(bool action); + void selectShowNotes(bool showNotes); + void selectMIDIOutputDevice(const String &midiOutputDevice); + String getMIDIOutputDevice(void); + Instrument getInstrument(void); + bool getShowNotes(void); + bool getAction(void); + int getTiming(void); + void apply(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Instruments mInstruments; + Point mDisplayPoint; +}; +#endif diff --git a/guitar/backup/20040302/splash.cpp b/guitar/backup/20040302/splash.cpp new file mode 100644 index 0000000..5d5c336 --- /dev/null +++ b/guitar/backup/20040302/splash.cpp @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mStrTitle(strTitle), mTimeout(timeout), + mTextFont("Helv",8,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mLeftButtonHandler.setCallback(this,&SplashScreen::leftButtonHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|0x04|WS_CLIPSIBLINGS|WS_DLGFRAME; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)"Splash",style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::leftButtonHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIB24(); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->create(mResBitmap->width(),mResBitmap->height(),*mPureDevice); + mDIBitmap->copyBits(*mResBitmap); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + WinInfo winInfo; + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + mDIBitmap->bitBlt(pureDevice,Rect(0,0,width(),height()),Point()); + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); + pureDevice.textOut(5,200,mStrCaption); + showLicense(pureDevice); + + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(1,60,String("Windows version:")+winInfo.strProductName()+String(" ")+winInfo.strVersion()); // add 15 + pureDevice.textOut(1,75,String("Registered owner:")+winInfo.strRegisteredOwner()); + pureDevice.textOut(1,90,String("OEM:")+winInfo.strProductID()); + + if(!mStrTitle.isNull()) + { + Font mFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold); + pureDevice.select((GDIObj)mFont,TRUE); + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(12,10,mStrTitle); + pureDevice.select((GDIObj)mFont,FALSE); + } + return (CallbackData::ReturnType)FALSE; +} + +void SplashScreen::showLicense(PureDevice &pureDevice) +{ + pureDevice.setTextColor(RGBColor(255,255,255)); + if(Registration::getInstance().hasLicense()) + { + License license; + Registration::getInstance().getLicense(license); + if(license.isValid()) + { +// if(license.isExpiring())pureDevice.textOut(1,250,String("License will expire in ")+String().fromInt(license.getRemainingDays())+String(" days.")); +// if(license.isExpiring())pureDevice.textOut(1,250,String("You are on day ")+String().fromInt(license.getDay())+String(" of your ")+String().fromInt(license.getDayCount())+String(" day license.")); + if(license.isExpiring())pureDevice.textOut(1,250,String("This version of TabMaster requires a permanent license.")); + else pureDevice.textOut(1,250,"Permanent license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} diff --git a/guitar/backup/20040302/splash.hpp b/guitar/backup/20040302/splash.hpp new file mode 100644 index 0000000..2b3066d --- /dev/null +++ b/guitar/backup/20040302/splash.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_SPLASHSCREEN_HPP_ +#define _GUITAR_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIB24; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=5000}; + SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + void showLicense(PureDevice &pureDevice); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + Callback mLeftButtonHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mStrTitle; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040302/tabdlg.cpp b/guitar/backup/20040302/tabdlg.cpp new file mode 100644 index 0000000..d913b91 --- /dev/null +++ b/guitar/backup/20040302/tabdlg.cpp @@ -0,0 +1,156 @@ +#include +#include +#include + +TabDialog::TabDialog(void) +: mCurrEntryIndex(0) +{ + mInitHandler.setCallback(this,&TabDialog::initHandler); + mCreateHandler.setCallback(this,&TabDialog::createHandler); + mCloseHandler.setCallback(this,&TabDialog::closeHandler); + mDestroyHandler.setCallback(this,&TabDialog::destroyHandler); + mCommandHandler.setCallback(this,&TabDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog::TabDialog(const TabDialog &someTabDialog) +{ // private implementation + *this=someTabDialog; +} + +TabDialog::~TabDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog &TabDialog::operator=(const TabDialog &someTabDialog) +{ // private implementation + return *this; +} + +bool TabDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + return ::DialogBoxParam(processInstance(),(LPSTR)"TABDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType TabDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mTabEntryList=::new OwnerDrawListAltColor(*this,getItem(TABENTRY_LIST),TABENTRY_LIST); + mTabEntryList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(15)); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(50)); + mTabEntryList->setTabStops(stops); + setTypes(); + + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + if(entry.hasSeparator())sendMessage(TABENTRY_SEPARATOR,BM_SETCHECK,1,0L); + for(int index=0;indexinsertString(strLine); + } + if(!entry.getComment().isNull())setText(TABENTRY_COMMENTS,entry.getComment()); + mTabEntryList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void TabDialog::setTypes() +{ + Array notes; + sendMessage(TABENTRY_NOTETYPE,CB_RESETCONTENT,0,0L); + notes=NoteType::enumerate(); + int currSel=-1; + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); + } +} diff --git a/guitar/backup/20040302/tabdlg.hpp b/guitar/backup/20040302/tabdlg.hpp new file mode 100644 index 0000000..e5a79e4 --- /dev/null +++ b/guitar/backup/20040302/tabdlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_TABDLG_HPP_ +#define _GUITAR_TABDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class TabDialog : public DWindow +{ +public: + TabDialog(void); + virtual ~TabDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex); +private: + TabDialog(const TabDialog &someTabDialog); + TabDialog &operator=(const TabDialog &someTabDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTypes(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + SmartPointer mTabEntryList; +}; +#endif diff --git a/guitar/backup/20040302/tablature.cpp b/guitar/backup/20040302/tablature.cpp new file mode 100644 index 0000000..7b6c764 --- /dev/null +++ b/guitar/backup/20040302/tablature.cpp @@ -0,0 +1,454 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TabEntries &Tablature::getTabEntries(void)const +{ + return mTabEntries; +} + +void Tablature::setTabEntries(const TabEntries &entries) +{ + mTabEntries.remove(); + for(int index=0;index=mTabEntries.size()) + { + GlobalDefs::outDebug("[Tablature::setTypeAt] index out of bounds : "+String().fromInt(index)); + return false; + } + mTabEntries[index].setNoteType(noteType); + return true; +} + +bool Tablature::open(const String &pathFileTablature) +{ + mLastError=None; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=pathFileTablature.betweenString(0,'.')+String(STRING_PRJEXTENSION); + if(!loadTabFile(pathFileTablature))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + return true; +} + +bool Tablature::import(String pathFileTablature) +{ + mLastError=None; + String strExtension; + String pathFileTablatureImport; + + pathFileTablatureImport=pathFileTablature; + strExtension=Profile::getExtension(pathFileTablature); + strExtension.lower(); + if(strExtension.isNull()||!(strExtension==String(STRING_TABEXTENSION)))return false; + pathFileTablature=Profile::removeExtension(pathFileTablature); + pathFileTablature+=strExtension; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=getPathFileProject(pathFileTablatureImport); + if(!loadTabFile(pathFileTablatureImport))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + saveAs(pathFileTablature); + return true; +} + +String Tablature::getPathFileProject(const String &pathFileTablature) +{ + return Profile::removeExtension(pathFileTablature)+String(STRING_PRJEXTENSION); +} + +bool Tablature::saveAs(const String &pathFileTablature) +{ + TabWriter tabWriter; + if(pathFileTablature.isNull())return false; + return tabWriter.write(mTabEntries,pathFileTablature); +} + +bool Tablature::save(void) +{ + if(mPathFileTablature.isNull())return false; + return saveAs(mPathFileTablature); +} + +bool Tablature::openProject(const String &pathFileName) +{ + DiskInfo diskInfo; + File inFile; + String strLine; + String strDirectory; + + mPathFileProject=pathFileName; + strDirectory=mPathFileProject; + Profile::makeDirectoryName(strDirectory); + if(!diskInfo.setCurrentDirectory(strDirectory)||!inFile.open(pathFileName)) + { + mLastError=FileOpenError; + return false; + } + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + MessageBox::messageBox("Project does not contain a reference to any tablature.",strLine); + return false; + } + if(!open(strLine))return false; + while(inFile.readLine(strLine)) + { + if(strLine.betweenString(0,'=')==String("TYPES"))parseTypes(strLine); + else if(strLine.betweenString(0,'=')==String("RANGE"))parseRange(strLine); + else if(strLine.betweenString(0,'=')==String("COMMENT"))parseComment(strLine); + else if(strLine.betweenString(0,'=')==String("SEPARATOR"))parseSeparator(strLine); + } + return true; +} + +bool Tablature::saveProject(const String &pathFileName) +{ + File outFile; + + if(!pathFileName.isNull())mPathFileProject=pathFileName; + if(mPathFileProject.isNull())return false; + if(!outFile.open(mPathFileProject,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mPathFileName.isNull())mPathFileName=Profile::removeExtension(mPathFileProject)+String(STRING_TABEXTENSION); + Profile::makeFileName(mPathFileName,mPathFileName); + outFile.writeLine(String("TABLATURE=")+mPathFileName); + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;indexlength)continue; + if(isTabLine(strLine,startElement)) + { + mTablature.insert(&TabLines()); + TabLines &tabLines=mTablature[mTablature.size()-1]; + tabLines[0]=strLine.substr(startElement); + for(int string=1;string<6;string++,line++) + { + if(!inFile.readLine(strLine))break; + tabLines[string]=strLine.substr(startElement); + } + } + } + GlobalDefs::outDebug(String("[Tablature::loadTabFile] ")+String().fromInt(mTablature.size())+String(" tabs, in ")+String().fromInt((::GetTickCount()-elapsedTime)/1000)+String(" seconds.")); + if(mTablature.size())return true; + mLastError=NoTabsParsedError; + return false; +} + +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0; + char charAt1; + char charAt2; + char charAt3; + char charAt4; + char lastChar; + + if(!lineLength)return false; + charAt0=lineLength?strLine.charAt(0):0; + charAt1=lineLength>=1?strLine.charAt(1):0; + charAt2=lineLength>=2?strLine.charAt(2):0; + charAt3=lineLength>=3?strLine.charAt(3):0; + charAt4=lineLength>=4?strLine.charAt(4):0; + lastChar=lineLength?strLine.charAt(lineLength-1):0; + + if((charAt0=='e'||charAt0=='E')&&(charAt1==':'||charAt1=='|')) + { + startElement=2; + return true; + } + if(charAt0=='|'&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==':'&&(::isalnum(charAt1)||charAt1=='-')) + { + startElement=1; + return true; + } + if(charAt0==':'&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0=='-') + { + startElement=0; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' '&&charAt4=='|') + { + startElement=5; + return true; + } + if(charAt0==' '&&charAt1=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='I'&&charAt3=='-') + { + startElement=3; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==']'&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==':'&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(::isdigit(charAt0)&&(lastChar=='-'||lastChar=='|')) + { + startElement=0; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2==' '&&charAt3=='|') + { + startElement=3; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' ') + { + startElement=4; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&(charAt2=='|'||charAt2=='+')&&charAt3=='-') + { + startElement=3; + return true; + } + return false; +} diff --git a/guitar/backup/20040302/tabpage.cpp b/guitar/backup/20040302/tabpage.cpp new file mode 100644 index 0000000..9f8f047 --- /dev/null +++ b/guitar/backup/20040302/tabpage.cpp @@ -0,0 +1,1043 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TabPage::TabPage(ViewWindow &parent) +: mItemsPerTab(0), mNumTabs(0), mCharWidth(0), mOutlinePen(RGBColor(0,0,0),Pen::PDot) , + mDrawFont("Courier New",10), mHasFocus(false), mIsCancelled(false), mIsInPlay(false), + mIsPaused(false), mIsDirty(false), mKeepOutline(false), mCurrEntryIndex(0), mIsInSetRange(false) +{ + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + mSizeHandler.setCallback(this,&TabPage::sizeHandler); + mPaintHandler.setCallback(this,&TabPage::paintHandler); + mVerticalScrollHandler.setCallback(this,&TabPage::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&TabPage::horizontalScrollHandler); + mLeftButtonUpHandler.setCallback(this,&TabPage::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&TabPage::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&TabPage::mouseMoveHandler); + mKillFocusHandler.setCallback(this,&TabPage::killFocusHandler); + mSetFocusHandler.setCallback(this,&TabPage::setFocusHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabPage::leftButtonDoubleHandler); + mKeyDownHandler.setCallback(this,&TabPage::keyDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent=&parent; + mParent.disposition(PointerDisposition::Assume); + mScrollInfo.hwndOwner(parent); + createBitmap(parent); +} + +TabPage::TabPage(const TabPage &/*someTabPage*/) +{ // private implementation +} + +TabPage::~TabPage() +{ + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); +} + +bool TabPage::insert(const TabEntry &entry,bool setDirty) +{ + TabEntries entries; + entries.insert(&entry); + return insert(entries,setDirty); +} + +bool TabPage::insert(const TabEntries &entries,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabEntries",GlobalDefs::Debug); + if(!entries.size())return false; + for(int index=0;indexinvalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +bool TabPage::insert(const TabRanges &ranges,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabRanges",GlobalDefs::Debug); + if(!ranges.size())return false; + for(int index=0;indexsetBits(BkColorBits); + drawTabPage(); + drawEntries(); + cursorControl.waitCursor(false); + mScrollInfo.scrollableObjectDimensions(mDIBitmap->width(),mDIBitmap->height()); + elapsedTime=(::GetTickCount()-elapsedTime)/1000; + GlobalDefs::outDebug(String("[TabPage::createBitmap]took ")+String().fromInt(elapsedTime)+String(" seconds."),GlobalDefs::Debug); + return mDIBitmap.isOkay(); +} + +bool TabPage::drawEntries(const RGBColor &rgbColor) +{ + Point p1; + Point p2; + String strFret; + Registry registry; + bool showAction(registry.getShowAction()); + Pen blackPen(RGBColor(0,0,0),PenWidth); + + if(!isOkay())return false; + GlobalDefs::outDebug(String("[TabPage::drawEntries]"),GlobalDefs::Debug); + PureDevice &pureDevice=mDIBitmap->getDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + for(int entryIndex=0;entryIndexgetDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + Point p1=getEntryPoint(entryIndex); + Point p2; + TabEntry &entry=mTabEntries[entryIndex]; + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} + +bool TabPage::clearUpdate(void) +{ + GlobalDefs::outDebug(String("[TabPage::clearUpdate]"),GlobalDefs::Debug); + if(!isOkay())return false; + if(!mOverlay.isOkay())return false; + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + mOverlay.destroy(); + return true; +} + +bool TabPage::getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(outlineRect.ptInRect(mousePoint)) + { + entryIndex=index; + return true; + } + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getNearestString(const Point &clickPoint,int &nearestString) +{ + Rect outlineRect; + map distanceMap; + + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return false; + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + distanceMap[abs(clickPoint.y()-outlineRect.top())]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=1; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=0; + nearestString=(*distanceMap.begin()).second; + return true; +} + +Point TabPage::getEntryPoint(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getEntryPoint]"),GlobalDefs::Debug); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return xyPoint; +} + +bool TabPage::showCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + mOverlay.destroy(); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + isInOutline(true); + mParent->clientRect(clientRect); + bringOutlineIntoView(outlineRect,clientRect); + this->outlineRect(outlineRect); + showFretEntry(mTabEntries[mCurrEntryIndex]); + return true; +} + +bool TabPage::drawTabPage(void) +{ + int yStart=TopMargin; + int xStart=0; + int elapsedTime; + + GlobalDefs::outDebug(String("[TabPage::drawTabPage]"),GlobalDefs::Debug); + elapsedTime=::GetTickCount(); + if(!getNumTabs())drawTab(LeftMargin,RightMargin,xStart,yStart,TabSpacing,TabLines); // draw at least one + for(int index=0;indexline(Point(marginLeft-1,yStart),Point(marginLeft-1,1+yStart+((lineCount-1)*spacing)),TabLineColor); + for(int line=0;lineline(Point(xPos,yPos),Point(mDIBitmap->width()-marginRight,yPos),TabLineColor); + yPos+=spacing; + } + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point(mDIBitmap->width()-marginRight,1+yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point((mDIBitmap->width()-marginRight)+2,yStart),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart+((lineCount-1)*spacing)),Point((mDIBitmap->width()-marginRight)+2,yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point((mDIBitmap->width()-marginRight)+2,yStart),Point((mDIBitmap->width()-marginRight)+2,1+yStart+((lineCount-1)*spacing)),TabLineColor); + return yStart+((lineCount-1)*spacing); +} + +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + + GlobalDefs::outDebug(String("[TabPage::getDimensions]"),GlobalDefs::Debug); + setItemsPerTab(((guiWindow.width())-(RightMargin+LeftMargin))/getCharWidth()); + setNumTabs((mTabEntries.size()/getItemsPerTab())); + setNumTabs(getNumTabs()+(mTabEntries.size()%getItemsPerTab()?1:0)); + if(!getNumTabs())gdiPoint.y(TopMargin+((TabHeight+TabSeparator))); + else gdiPoint.y(TopMargin+(getNumTabs()*(TabHeight+TabSeparator))); + gdiPoint.x(guiWindow.width()); + GlobalDefs::outDebug(String("[TabPage::getDimensions]ItemsPerTab:")+String().fromInt(getItemsPerTab())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]NumTabs:")+String().fromInt(getNumTabs())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]AvgCharWidth:")+String().fromInt(getCharWidth())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmWidth:")+String().fromInt(gdiPoint.x())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmHeight:")+String().fromInt(gdiPoint.y())); + return getNumTabs(); +} + +int TabPage::getWidestEntry(PureDevice &pureDevice)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + GlobalDefs::outDebug(String("[TabPage::getWidestEntry]"),GlobalDefs::Debug); + if(!mTabEntries.size())return MinCharWidth; + widestEntry=0; + for(int entryIndex=0;entryIndexwidestEntry)widestEntry=sizeStruct.cx; + } + } + return widestEntry*2; +} + +void TabPage::bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + GlobalDefs::outDebug(String("[TabPage::bitBlt]"),GlobalDefs::Debug); + if(!mDIBitmap.isOkay())return; + mDIBitmap->usePalette(pureDevice,true); // the usePalette code can be removed... + mDIBitmap->bitBlt(pureDevice,dstRect,srcPoint); // but needs test on Win '98 first + mDIBitmap->usePalette(pureDevice,false); +} + +void TabPage::invalidate(Rect rect) +{ + GlobalDefs::outDebug(String("[TabPage::invalidate]"),GlobalDefs::Debug); + rect.left(rect.left()-mScrollInfo.currScrollx()); + rect.top(rect.top()-mScrollInfo.currScrolly()); + rect.right(rect.right()-mScrollInfo.currScrollx()); + rect.bottom(rect.bottom()-mScrollInfo.currScrollx()); + mParent->invalidate(rect,false); +} + +void TabPage::bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect) +{ + GlobalDefs::outDebug(String("[TabPage::bringOutlineIntoView]"),GlobalDefs::Debug); + if(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + while(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + if(!mScrollInfo.pageDown())break; + } + } + else if(outlineRect.top()invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + ::SetCursorPos(mousePoint.x(),mousePoint.y()); + return true; +} + +bool TabPage::increaseTempo(void) +{ + GlobalDefs::outDebug(String("[TabPage::increaseTempo]"),GlobalDefs::Debug); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + if(!tabEntry.getComment().isNull())setStatusText(tabEntry.getComment()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::play(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::play]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + if(!tabEntry.getComment().isNull())setStatusText(tabEntry.getComment()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::playFromCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::playFromCurrent]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=mCurrEntryIndex;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + if(!tabEntry.getComment().isNull())setStatusText(tabEntry.getComment()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +void TabPage::showFretEntry(const TabEntry &entry) +{ + GlobalDefs::outDebug(String("[TabPage::showFretEntry]"),GlobalDefs::Debug); + if(!mPlayNoteHandler.isOkay())return; + CallbackData cbData(CBCommands::FBShowTab,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void TabPage::setStartRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setStartRange]"),GlobalDefs::Debug); + isInSetRange(true); + mCurrRange.setBeginRange(mCurrEntryIndex); +} + +void TabPage::setEndRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setEndRange]"),GlobalDefs::Debug); + isInSetRange(false); + mCurrRange.setEndRange(mCurrEntryIndex); + mCurrRange.autoName(); + mTabRanges.insert(&mCurrRange); + isDirty(true); + GlobalDefs::outDebug(mCurrRange.toString()); +} + +void TabPage::cut(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::cut]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + mParent->enablePaste(true); + if(!mTabEntries.size())mParent->enableCut(false); + showCurrent(); +} + +void TabPage::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::copy]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mParent->enablePaste(true); +} + +bool TabPage::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::paste] Current position is ")+String().fromInt(mCurrEntryIndex),GlobalDefs::Debug); + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return false; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return false; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return false; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return false; + entry.fromString(strText.betweenString(']',0)); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else mTabEntries.insertAfter(mCurrEntryIndex,&entry); + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +// ********************************************************************************************* +// callback handlers + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::sizeHandler]ENTER",GlobalDefs::Verbose); + if(isInPlay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Pausing play...",GlobalDefs::Debug); + isPaused(true); + } + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + if(!sizePoint.x()||!sizePoint.y()) + { + if(isInPlay())isPaused(false); + return false; + } + clearUpdate(); + if(!update(*mParent)) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + + return false; + } + if(!mDIBitmap.isOkay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + return false; + } + if(isInPlay())isPaused(false); + GlobalDefs::outDebug("[TabPage::sizeHandler]LEAVE",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::paintHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::paintHandler]",GlobalDefs::Verbose); + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(!mDIBitmap.isOkay())return false; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + bitBlt(paintDevice,Rect(0,0,getWidth(),getHeight()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + bitBlt(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType TabPage::verticalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::verticalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleVerticalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::horizontalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::horizontalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleHorizontalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDoubleHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + Point mousePoint; + int selectedString; + Rect outlineRect; + int entryIndex; + + mousePoint.x(someCallbackData.loWord()+mScrollInfo.currScrollx()); + mousePoint.y(someCallbackData.hiWord()+mScrollInfo.currScrolly()); + if(!getOutlineRect(mousePoint,entryIndex,outlineRect))return false; + if(!getNearestString(mousePoint,selectedString))return false; + getFretEntry(selectedString); + return false; +} + +bool TabPage::getFretEntry(int selectedString) +{ + FretDialog fretDialog; + bool returnCode=false; + + keepOutline(true); + if((returnCode=fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex))) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return returnCode; +} + +void TabPage::setCursorToTab(void) +{ +/* + Rect outlineRect; + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + ::SetCursorPos((outlineRect.left()+outlineRect.right())/2,(outlineRect.top()+outlineRect.bottom())/2); +*/ +} + +// *************************************************************************************************** +// C A L L B A C K S +// *************************************************************************************************** + +CallbackData::ReturnType TabPage::leftButtonUpHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonUpHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::setFocusHandler]",GlobalDefs::Verbose); + hasFocus(true); + if(Clipboard::hasData(GlobalDefs::getRegisteredClipboardFormat()))mParent->enablePaste(true); + else mParent->enablePaste(false); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new Sequencer(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::killFocusHandler]",GlobalDefs::Verbose); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + isInOutline(false); + clearUpdate(); + } + mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug("[TabPage::mouseMoveHandler]",GlobalDefs::Verbose); + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + mParent->releaseCapture(); + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + mParent->enableCut(true); + mParent->enableCopy(true); + mCurrEntryIndex=entryIndex; + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(Space==keyData.virtualKey()) + { + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + setCursorToTab(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + setCursorToTab(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + clearUpdate(); + showCurrent(); + setCursorToTab(); + } + return false; +} + diff --git a/guitar/backup/20040302/tabpage.hpp b/guitar/backup/20040302/tabpage.hpp new file mode 100644 index 0000000..37c83e1 --- /dev/null +++ b/guitar/backup/20040302/tabpage.hpp @@ -0,0 +1,398 @@ +#ifndef _GUITAR_TABPAGE_HPP_ +#define _GUITAR_TABPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _GUITAR_SCROLLINFO_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class GUIWindow; +class ViewWindow; + +class TabPage +{ +public: + TabPage(ViewWindow &parent); + virtual ~TabPage(); + bool insert(const TabEntries &entries,bool setDirty=true); + bool insert(const TabEntry &entry,bool setDirty=true); + bool insert(const TabRanges &ranges,bool setDirty=true); + bool update(GUIWindow &guiWindow); + bool play(void); + bool playRange(int rangeIndex); + bool playFromCurrent(void); + void cut(void); + void copy(void); + bool paste(void); + bool modifyProperties(void); + bool increaseTempo(void); + bool decreaseTempo(void); + bool getCancelled(void)const; + void setCancelled(bool cancelled); + bool isInPlay(void)const; + bool isPaused(void)const; + int getWidth(void)const; + int getHeight(void)const; + const TabEntries &getEntries(void)const; + const TabRanges &getRanges(void)const; + void setRanges(const TabRanges &ranges); + bool hasRange(void)const; + void setPlayNoteHandler(CallbackPointer &callbackPointer); + void setStartRange(void); + void setEndRange(void); + bool isDirty(void)const; + void isDirty(bool isDirty); + bool isInOutline(void)const; + bool isInSetRange(void)const; + void isInSetRange(bool isInSetRange); + void setStatusControlRef(SmartPointer &statusBar); + bool isOkay(void)const; +private: + enum {BkColorBits=255,TabLineColor=0}; + enum {LeftMargin=10,RightMargin=10,TopMargin=10,TabLines=6,TabSpacing=10,TabHeight=TabLines*TabSpacing, + TabSeparator=20,CharSpacing=3,TabClearance=3,MinCharWidth=16}; + enum {RightArrow=0x27,LeftArrow=0x25,DownArrow=0x28,UpArrow=0x26,Insert=0x2D,Home=0x24,End=0x23,Delete=0x2E,Space=0x20}; + enum {PenWidth=1}; + TabPage(const TabPage &someTabPage); + TabPage &operator=(const TabPage &someTabPage); + int drawTab(int marginLeft,int marginRight,int xPos,int yPos,int spacing,int lineCount); + void getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const; + void bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + void bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect); + bool drawEntry(int entryIndex,const RGBColor &rgbColor=RGBColor(0,0,0)); + bool getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect); + bool getNearestString(const Point &clickPoint,int &nearestString); + bool drawEntries(const RGBColor &rgbColor=RGBColor(0,0,0)); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool getOutlineRect(int entryIndex,Rect &outlineRect); + int getWidestEntry(PureDevice &pureDevice)const; + bool getFretEntry(int selectedString=0); + bool createBitmap(GUIWindow &someGUIWindow); + bool outlineRect(const Rect &outlineRect); + Point getEntryPoint(int entryIndex); + bool drawTabPage(void); + void setItemsPerTab(int itemsPerTab); + void setNumTabs(int numTabs); + void setCharWidth(int charWidth); + int getNumEntries(void)const; + int getNumTabs(void)const; + int getItemsPerTab(void)const; + int getCharWidth(void)const; + void invalidate(Rect rect); + void isInOutline(bool isInOutline); + bool clearUpdate(void); + bool hasFocus(void)const; + void hasFocus(bool hasFocus); + void isInPlay(bool isInPlay); + void isPaused(bool isPaused); + void showFretEntry(const TabEntry &entry); + void setStatusText(const String &statusText); + void keepOutline(bool keepOutline); + bool keepOutline(void)const; + bool showCurrent(void); + void setCursorToTab(void); + + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mKillFocusHandler; + Callback mSetFocusHandler; + Callback mLeftButtonDoubleHandler; + Callback mKeyDownHandler; + + CallbackPointer mPlayNoteHandler; + TabEntries mTabEntries; + TabRanges mTabRanges; + SmartPointer mDIBitmap; + SmartPointer mOverlay; + SmartPointer mParent; + SmartPointer mMIDIDevice; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + + Rect mPrevOutlineRect; + Pen mOutlinePen; + int mNumTabs; + int mItemsPerTab; + int mCharWidth; + + bool mIsInOutline; + bool mHasFocus; + bool mIsCancelled; + bool mIsInPlay; + bool mIsPaused; + bool mIsDirty; + bool mKeepOutline; + + bool mIsInSetRange; + Range mCurrRange; + int mCurrEntryIndex; + Font mDrawFont; +}; + +inline +TabPage &TabPage::operator=(const TabPage &/*someTabPage*/) +{ // private implementation + return *this; +} + +inline +int TabPage::getNumEntries(void)const +{ + return mTabEntries.size(); +} + +inline +void TabPage::getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const +{ + pureDevice.getTextExtentPoint32(((String&)string).str(),&sizeStruct); +} + +inline +int TabPage::getWidth(void)const +{ + return ((SmartPointer&)mDIBitmap)->width(); +} + +inline +int TabPage::getHeight(void)const +{ + return ((SmartPointer&)mDIBitmap)->height(); +} + +inline +int TabPage::getNumTabs(void)const +{ + return mNumTabs; +} + +inline +void TabPage::setNumTabs(int numTabs) +{ + mNumTabs=numTabs; +} + +inline +int TabPage::getCharWidth(void)const +{ + return mCharWidth; +} + +inline +void TabPage::setCharWidth(int charWidth) +{ + mCharWidth=charWidth; +} + +inline +int TabPage::getItemsPerTab(void)const +{ + return mItemsPerTab; +} + +inline +void TabPage::setItemsPerTab(int itemsPerTab) +{ + mItemsPerTab=itemsPerTab; +} + +inline +void TabPage::isInOutline(bool isInOutline) +{ + mIsInOutline=isInOutline; +} + +inline +bool TabPage::isInOutline(void)const +{ + return mIsInOutline; +} + +inline +bool TabPage::hasFocus(void)const +{ + return mHasFocus; +} + +inline +void TabPage::hasFocus(bool hasFocus) +{ + mHasFocus=hasFocus; +} + +inline +bool TabPage::getCancelled(void)const +{ + return mIsCancelled; +} + +inline +void TabPage::setCancelled(bool cancelled) +{ + mIsCancelled=cancelled; +} + +inline +bool TabPage::isInPlay(void)const +{ + return mIsInPlay; +} + +inline +void TabPage::isInPlay(bool isInPlay) +{ + mIsInPlay=isInPlay; +} + +inline +bool TabPage::isPaused(void)const +{ + return mIsPaused; +} + +inline +void TabPage::isPaused(bool isPaused) +{ + mIsPaused=isPaused; +} + +inline +void TabPage::setPlayNoteHandler(CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; +} + +inline +const TabEntries &TabPage::getEntries(void)const +{ + return mTabEntries; +} + +inline +const TabRanges &TabPage::getRanges(void)const +{ + return mTabRanges; +} + +inline +bool TabPage::hasRange(void)const +{ + return mTabRanges.size()?true:false; +} + +inline +bool TabPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void TabPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +void TabPage::keepOutline(bool keepOutline) +{ + GlobalDefs::outDebug(String("[TabPage::keepOutline]")+(keepOutline?String("true"):String("false")),GlobalDefs::Debug); + mKeepOutline=keepOutline; +} + +inline +bool TabPage::keepOutline(void)const +{ + return mKeepOutline; +} + +inline +bool TabPage::isInSetRange(void)const +{ + return mIsInSetRange; +} + +inline +void TabPage::isInSetRange(bool isInSetRange) +{ + mIsInSetRange=isInSetRange; +} + +inline +void TabPage::setRanges(const TabRanges &ranges) +{ + mTabRanges=ranges; + isDirty(true); +} + +inline +void TabPage::setStatusText(const String &statusText) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(statusText); +} + +inline +void TabPage::setStatusControlRef(SmartPointer &statusBar) +{ + mStatusBar=statusBar; +} + +inline +bool TabPage::isOkay(void)const +{ + return mTabEntries.size()&&mDIBitmap.isOkay(); +} +#endif \ No newline at end of file diff --git a/guitar/backup/20040302/uutool.cpp b/guitar/backup/20040302/uutool.cpp new file mode 100644 index 0000000..18cd678 --- /dev/null +++ b/guitar/backup/20040302/uutool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + diff --git a/guitar/backup/20040302/uutool.hpp b/guitar/backup/20040302/uutool.hpp new file mode 100644 index 0000000..55f5595 --- /dev/null +++ b/guitar/backup/20040302/uutool.hpp @@ -0,0 +1,44 @@ +#ifndef _GUITAR_UUTOOL_HPP_ +#define _GUITAR_UUTOOL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#include + +class String; + +class UUTool +{ +public: + static String encode(String strLine); + static String decode(String strLine); +private: + UUTool(void); + virtual ~UUTool(); + static BYTE chEncode(int ch); + static BYTE chDecode(int ch); +}; + +inline +UUTool::UUTool(void) +{ +} + +inline +UUTool::~UUTool() +{ +} + +inline +BYTE UUTool::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} + +inline +BYTE UUTool::chDecode(int ch) +{ + return (ch-' ')&0x3F; +} +#endif diff --git a/guitar/backup/20040302/viewwnd.cpp b/guitar/backup/20040302/viewwnd.cpp new file mode 100644 index 0000000..8e41816 --- /dev/null +++ b/guitar/backup/20040302/viewwnd.cpp @@ -0,0 +1,551 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ + mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ + mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +bool ViewWindow::insert(const TabEntry &entry) +{ + return mTabPage->insert(entry); +} + +bool ViewWindow::insert(const TabEntries &entries) +{ + if(!mTabPage->insert(entries))return false; + invalidate(); + mTabPage->isDirty(true); + return true; +} + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); // don't set the dirty flag when loading + if(mTabPage->insert(mTablature.getTabRanges(),false)) // don't set the dirty flag when loading + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + if(THPlay==threadMessage.userDataOne())thPlay(); + else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); + else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.hCursor=::LoadCursor(processInstance(),MAKEINTRESOURCE(HARROW)); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/backup/20040302/viewwnd.hpp b/guitar/backup/20040302/viewwnd.hpp new file mode 100644 index 0000000..f4b9e40 --- /dev/null +++ b/guitar/backup/20040302/viewwnd.hpp @@ -0,0 +1,153 @@ +#ifndef _GUITAR_VIEWWINDOW_HPP_ +#define _GUITAR_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _GUITAR_TABPAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class GUIFretboard; +class StatusBarEx; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + friend class TabPage; + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); + void setFretboardHandler(CallbackPointer &callbackPointer); + bool createProject(const String &strPathTabFile); + bool createProject(void); + bool openProject(const String &pathFileName); + bool saveProject(const String &pathFileName); + bool saveProject(void); + void play(void); + void playFromCurrent(void); + void stopPlay(void); + void playRepeated(void); + void playRange(int rangeIndex); + void playRangeRepeated(int rangeIndex); + void cut(void); + void copy(void); + void paste(void); + void modifyProperties(void); + void setStartRange(void); + void setEndRange(void); + bool getTabRanges(TabRanges &ranges); + void setTabRanges(const TabRanges &ranges); + const TabEntries &getEntries(void)const; + bool insert(const TabEntry &entry); + bool insert(const TabEntries &entries); + int getNumTabEntries(void)const; + void increaseTempo(void); + void decreaseTempo(void); + String getTitle(void)const; + const String &getPathFileProject(void)const; + void setStatusControlRef(SmartPointer &statusBar); + bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); + void enablePlaySelect(bool enable); + void enableStopSelect(bool enable); + void enableCut(bool enable); + void enableCopy(bool enable); + void enablePaste(bool enable); + bool getEnableCut(void); + bool getEnableCopy(void); + bool getEnablePaste(void); + bool isInRepeatPlay(void)const; + void isInRepeatPlay(bool isInRepeatPlay); + bool getProjectName(String &strPathFileProject); + void thPlay(void); + void thPlayFromCurrent(void); + void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + SmartPointer mTabPage; + SmartPointer mMIDIDevice; + Tablature mTablature; + bool mIsInRepeatPlay; +}; + +inline +const TabEntries &ViewWindow::getEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries(); +} + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +#endif + + diff --git a/guitar/backup/20040302/wininfo.hpp b/guitar/backup/20040302/wininfo.hpp new file mode 100644 index 0000000..373014d --- /dev/null +++ b/guitar/backup/20040302/wininfo.hpp @@ -0,0 +1,85 @@ +#ifndef _GUITAR_WININFO_HPP_ +#define _GUITAR_WININFO_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WinInfo +{ +public: + WinInfo(void); + virtual ~WinInfo(); + void refresh(void); + const String &strProductName(void)const; + const String &strRegisteredOwner(void)const; + const String &strProductID(void)const; + const String &strVersion(void)const; +private: + String mStrProductName; + String mStrRegisteredOwner; + String mStrProductID; + String mStrVersion; +}; + +inline +WinInfo::WinInfo(void) +{ + refresh(); +} + +inline +WinInfo::~WinInfo() +{ +} + +inline +void WinInfo::refresh(void) +{ + RegKey regKey(RegKey::LocalMachine); + + if(!regKey.openKey("Software\\Microsoft\\Windows\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + if(!mStrProductName.isNull()) + { + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } + else + { + RegKey regKey(RegKey::LocalMachine); + if(!regKey.openKey("Software\\Microsoft\\Windows NT\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } +} + +inline +const String &WinInfo::strProductName(void)const +{ + return mStrProductName; +} + +inline +const String &WinInfo::strRegisteredOwner(void)const +{ + return mStrRegisteredOwner; +} + +inline +const String &WinInfo::strProductID(void)const +{ + return mStrProductID; +} + +inline +const String &WinInfo::strVersion(void)const +{ + return mStrVersion; +} +#endif diff --git a/guitar/chordmain.cpp b/guitar/chordmain.cpp new file mode 100644 index 0000000..fc9ac30 --- /dev/null +++ b/guitar/chordmain.cpp @@ -0,0 +1,33 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDef; + String strEnum; + File inFile("tabs/allchords.tab"); + File rcFile("chords.rc","wb"); + File hFile("chords.h","wb"); + int count(21000); + + rcFile.writeLine("#include "); + rcFile.writeLine("STRINGTABLE DISCARDABLE"); + rcFile.writeLine("BEGIN"); + while(inFile.readLine(strLine)) + { + strEnum="STRING_"+String().fromInt(count); + strDef=strEnum; + strDef+="\t\""; + strDef+=strLine.betweenString(0,':')+"\""; + rcFile.writeLine(strDef); + hFile.writeLine(String("#define ")+strEnum+String(" ")+String().fromInt(count)); + count++; + } + rcFile.writeLine("END"); + return 0; + +// MainFrame mainFrame; +// mainFrame.createWindow("TabMaster","TabMaster v1.00a","mainMenu","APP_ICON"); +// return mainFrame.messageLoop(); +} diff --git a/guitar/chords.aps b/guitar/chords.aps new file mode 100644 index 0000000..1822219 Binary files /dev/null and b/guitar/chords.aps differ diff --git a/guitar/fret6.jpg b/guitar/fret6.jpg new file mode 100644 index 0000000..818b048 Binary files /dev/null and b/guitar/fret6.jpg differ diff --git a/guitar/fretboard.bmp b/guitar/fretboard.bmp new file mode 100644 index 0000000..d253187 Binary files /dev/null and b/guitar/fretboard.bmp differ diff --git a/guitar/fretboard1.bmp b/guitar/fretboard1.bmp new file mode 100644 index 0000000..bd7dd8c Binary files /dev/null and b/guitar/fretboard1.bmp differ diff --git a/guitar/guitar.bmp b/guitar/guitar.bmp new file mode 100644 index 0000000..ed9b0fe Binary files /dev/null and b/guitar/guitar.bmp differ diff --git a/guitar/guitar.dsp b/guitar/guitar.dsp new file mode 100644 index 0000000..627eeb1 --- /dev/null +++ b/guitar/guitar.dsp @@ -0,0 +1,266 @@ +# Microsoft Developer Studio Project File - Name="guitar" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=guitar - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "guitar.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "guitar.mak" CFG="guitar - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "guitar - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "guitar - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "guitar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "guitar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX"windows.hpp" /FD /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib comctl32.lib version.lib /nologo /subsystem:windows /debug /machine:I386 /out:"msvcobj/TabMaster.exe" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "guitar - Win32 Release" +# Name "guitar - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\BrowserHelper.cpp +# End Source File +# Begin Source File + +SOURCE=.\ChordBuilderDialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\ChordDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\ChordMapper.cpp +# End Source File +# Begin Source File + +SOURCE=.\Fingering.cpp +# End Source File +# Begin Source File + +SOURCE=.\Fretboard.cpp +# End Source File +# Begin Source File + +SOURCE=.\FretDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\FretViewWnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\GlobalDefs.cpp +# End Source File +# Begin Source File + +SOURCE=.\GUIFretboard.cpp +# End Source File +# Begin Source File + +SOURCE=.\guitar.rc +# End Source File +# Begin Source File + +SOURCE=.\license.cpp +# End Source File +# Begin Source File + +SOURCE=.\LicenseDialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\LineParser.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\MIDIDialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\MIDIHelper.cpp +# End Source File +# Begin Source File + +SOURCE=.\notepath.cpp +# End Source File +# Begin Source File + +SOURCE=.\NoteType.cpp +# End Source File +# Begin Source File + +SOURCE=.\RangeDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\RangeEditDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\registration.cpp +# End Source File +# Begin Source File + +SOURCE=.\registry.cpp +# End Source File +# Begin Source File + +SOURCE=.\requirements.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScaleDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\ScrollInfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\settingsdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\splash.cpp +# End Source File +# Begin Source File + +SOURCE=.\tabdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabEntry.cpp +# End Source File +# Begin Source File + +SOURCE=.\tablature.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabLines.cpp +# End Source File +# Begin Source File + +SOURCE=.\tabpage.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabView.cpp +# End Source File +# Begin Source File + +SOURCE=.\TabWriter.cpp +# End Source File +# Begin Source File + +SOURCE=.\Timing.cpp +# End Source File +# Begin Source File + +SOURCE=.\Tuning.cpp +# End Source File +# Begin Source File + +SOURCE=.\uutool.cpp +# End Source File +# Begin Source File + +SOURCE=.\viewwnd.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\harrow.cur +# End Source File +# Begin Source File + +SOURCE=.\icon1.ico +# End Source File +# End Group +# End Target +# End Project diff --git a/guitar/guitar.dsw b/guitar/guitar.dsw new file mode 100644 index 0000000..5f2c6ca --- /dev/null +++ b/guitar/guitar.dsw @@ -0,0 +1,194 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dialog"=..\dialog\Dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "engine"=..\engine\engine.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "guitar"=.\guitar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name midisqlib + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name toolbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name printman + End Project Dependency + Begin Project Dependency + Project_Dep_Name dialog + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency + Begin Project Dependency + Project_Dep_Name music + End Project Dependency + Begin Project Dependency + Project_Dep_Name engine + End Project Dependency +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "midisqlib"=..\MIDISEQ\midisqlib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "music"=..\music\music.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "printman"=..\printman\Printman.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\statbar\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\thread\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "toolbar"=..\toolbar\Toolbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/guitar/guitar.h b/guitar/guitar.h new file mode 100644 index 0000000..ad1eadf --- /dev/null +++ b/guitar/guitar.h @@ -0,0 +1,1294 @@ +#ifndef _GUITAR_GUITAR_H_ +#define _GUITAR_GUITAR_H_ + +#include "windows.h" + +// +#define IDC_STATIC -1 + +// CURSOR +#define HARROW 1000 + +// LICENSE DIALOG +#define LICENSE_DIALOG_LICENSE 1077 +#define LICENSE_DIALOG_REQUEST_LICENSE 1076 + +// ENTER CHORD DIALOG +#define ENTERCHORD_EDIT 1082 +#define ENTERCHORD_EXAMPLES 1083 + + +// MIDIDIALOG +#define MIDI_TRACK1 1042 +#define MIDI_TRACK2 1043 +#define MIDI_TRACK3 1044 +#define MIDI_TRACK4 1045 +#define MIDI_TRACK5 1046 +#define MIDI_TRACK6 1047 +#define MIDI_TRACK7 1048 +#define MIDI_TRACK8 1049 +#define MIDI_TRACK9 1050 +#define MIDI_TRACK10 1051 +#define MIDI_TRACK11 1052 +#define MIDI_TRACK12 1053 +#define MIDI_TRACK13 1054 +#define MIDI_TRACK14 1055 +#define MIDI_TRACK15 1056 +#define MIDI_TRACK16 1057 +#define MIDI_EVENTS_TRACK1 1060 +#define MIDI_EVENTS_TRACK2 1061 +#define MIDI_EVENTS_TRACK3 1062 +#define MIDI_EVENTS_TRACK4 1063 +#define MIDI_EVENTS_TRACK5 1064 +#define MIDI_EVENTS_TRACK6 1065 +#define MIDI_EVENTS_TRACK7 1066 +#define MIDI_EVENTS_TRACK8 1067 +#define MIDI_EVENTS_TRACK9 1068 +#define MIDI_EVENTS_TRACK10 1069 +#define MIDI_EVENTS_TRACK11 1070 +#define MIDI_EVENTS_TRACK12 1071 +#define MIDI_EVENTS_TRACK13 1072 +#define MIDI_EVENTS_TRACK14 1073 +#define MIDI_EVENTS_TRACK15 1074 +#define MIDI_EVENTS_TRACK16 1075 + +// FRETENTRY DIALOG +#define FRETENTRY_FRET 1037 +#define FRETENTRY_ACTION 1038 +#define FRETENTRY_STRING 1039 +#define FRETENTRY_DURATION 1040 + +// FOR SCALES DIALOG +#define SCALEDLG_LIST 1024 +#define SCALEDLG_ROOT 1025 +#define SCALEDLG_SPIN 1026 +#define SCALEDLG_MUTE 1027 + + +// FOR RANGE EDIT DIALOG +#define RANGEEDIT_NAME 1016 +#define RANGEEDIT_BEGIN 1017 +#define RANGEEDIT_END 1018 + +// FOR RANGE DIALOG +#define RANGE_LIST 1000 +#define RANGE_INSERT 1022 +#define RANGE_DELETE 1023 + +// FOR SETTINGS DIALOG +#define SETTINGS_MICROSECSPERQTRNOTE 1011 +#define SETTINGS_DEFAULTS 1012 +#define SETTINGS_SHOWACTION 1013 +#define SETTINGS_SHOWNOTES 1014 +#define SETTINGS_INSTRUMENT 1015 +#define SETTINGS_MIDIOUT 1024 + +// FOR CHORD DIALOG +#define CHORDS_LIST 1000 +#define CHORDS_COUNT 1009 + +// FOR TAB ENTRY DIALOG +#define TABENTRY_LIST 1004 +#define TABENTRY_NOTETYPE 1005 +#define TABENTRY_REMAINDER 1006 +#define TABENTRY_COMMENTS 1007 +#define TABENTRY_SEPARATOR 1008 + + + +#define MENU_FILE_OPEN 10000 +#define MENU_FILE_EXIT 10001 +#define MENU_FILE_NEW 10002 +#define MENU_FILE_SAVE 10003 +#define MENU_FILE_SAVEAS 10004 +#define MENU_FILE_CLOSE 10005 +#define MENU_FILE_PRINT 10006 +#define MENU_FILE_IMPORT 10007 +#define MENU_FILE_MIDI_IMPORT 10008 + +#define MENU_HISTOGRAM_HISTOGRAM 10100 + +#define MENU_TABLATURE_PLAY 10500 +#define MENU_TABLATURE_PLAYTOEND 10501 +#define MENU_TABLATURE_PLAYREPEATED 10502 +#define MENU_TABLATURE_PLAYRANGE 10503 +#define MENU_TABLATURE_PLAYRANGE_REPEATED 10504 +#define MENU_TABLATURE_STOP 10505 +#define MENU_TABLATURE_ENTRYPROPS 10506 +#define MENU_TABLATURE_SETSTARTRANGE 10507 +#define MENU_TABLATURE_SETENDRANGE 10508 + +#define MENU_OPTIONS_INCREASETEMPO 10601 +#define MENU_OPTIONS_DECREASETEMPO 10602 +#define MENU_OPTIONS_SETTINGS 10603 + +#define MENU_VIEW_FRETBOARD 10700 + +#define MENU_CHORDS_LOOKUP 10800 +#define MENU_CHORDS_ENTER 10801 + +#define MENU_SCALES_SHOW 10900 + +#define MENU_FRETBOARD_CLEAR 11000 +#define MENU_FRETBOARD_SHOWALLPOSITIONS 11001 + +#define MENU_EDIT_CUT 12000 +#define MENU_EDIT_COPY 12001 +#define MENU_EDIT_PASTE 12002 +#define MENU_EDIT_RANGES 12003 + +#define MENU_HELP_INDEX 12100 +#define MENU_HELP_APPLY_LICENSE 12101 +#define MENU_HELP_ABOUT 12102 + +#define TABACCELERATORS 10000 + +// STRINGS + +#define STRING_NOTITLE 19000 +#define STRING_EDITHINT 19001 +#define STRING_PRJEXTENSION 19002 +#define STRING_PRJALLEXTENSION 19003 +#define STRING_TABEXTENSION 19004 +#define STRING_BROWSERKEY 19005 +#define STRING_BROWSERKEYALT 19006 +#define STRING_BROWSERCOMMAND 19007 +#define STRING_HOST 19008 +#define STRING_HELPPAGE 19009 +#define STRING_MIDIEXTENSION 19010 +#define STRING_PURCHASE_URL 19011 + +#define STRING_TABVIEWWINDOWCLASSNAME 20000 +#define STRING_FRETVIEWWINDOWCLASSNAME 20001 +#define STRING_REGISTRYKEYNAME 20002 +#define STRING_HISTORYKEYNAME 20003 +#define STRING_HISTORYKEYSHORTNAME 20004 +#define STRING_SETTINGSKEYNAME 20005 +#define STRING_SETTINGSINSTRUMENT 20006 +#define STRING_SETTINGSACTION 20007 +#define STRING_SETTINGSNOTELETTERS 20008 +#define STRING_SETTINGSMICROSECONDSPERQUARTERNOTE 20009 +#define STRING_REGISTRATIONKEYNAME 20010 +#define STRING_SETTINGSLICENSE 20011 +#define STRING_SETTINGSMIDIOUTPUT 20012 + + +// chord definitions +#define STRING_22000 22000 +#define STRING_22001 22001 +#define STRING_22002 22002 +#define STRING_22003 22003 +#define STRING_22004 22004 +#define STRING_22005 22005 +#define STRING_22006 22006 +#define STRING_22007 22007 +#define STRING_22008 22008 +#define STRING_22009 22009 +#define STRING_22010 22010 +#define STRING_22011 22011 +#define STRING_22012 22012 +#define STRING_22013 22013 +#define STRING_22014 22014 +#define STRING_22015 22015 +#define STRING_22016 22016 +#define STRING_22017 22017 +#define STRING_22018 22018 +#define STRING_22019 22019 +#define STRING_22020 22020 +#define STRING_22021 22021 +#define STRING_22022 22022 +#define STRING_22023 22023 +#define STRING_22024 22024 +#define STRING_22025 22025 +#define STRING_22026 22026 +#define STRING_22027 22027 +#define STRING_22028 22028 +#define STRING_22029 22029 +#define STRING_22030 22030 +#define STRING_22031 22031 +#define STRING_22032 22032 +#define STRING_22033 22033 +#define STRING_22034 22034 +#define STRING_22035 22035 +#define STRING_22036 22036 +#define STRING_22037 22037 +#define STRING_22038 22038 +#define STRING_22039 22039 +#define STRING_22040 22040 +#define STRING_22041 22041 +#define STRING_22042 22042 +#define STRING_22043 22043 +#define STRING_22044 22044 +#define STRING_22045 22045 +#define STRING_22046 22046 +#define STRING_22047 22047 +#define STRING_22048 22048 +#define STRING_22049 22049 +#define STRING_22050 22050 +#define STRING_22051 22051 +#define STRING_22052 22052 +#define STRING_22053 22053 +#define STRING_22054 22054 +#define STRING_22055 22055 +#define STRING_22056 22056 +#define STRING_22057 22057 +#define STRING_22058 22058 +#define STRING_22059 22059 +#define STRING_22060 22060 +#define STRING_22061 22061 +#define STRING_22062 22062 +#define STRING_22063 22063 +#define STRING_22064 22064 +#define STRING_22065 22065 +#define STRING_22066 22066 +#define STRING_22067 22067 +#define STRING_22068 22068 +#define STRING_22069 22069 +#define STRING_22070 22070 +#define STRING_22071 22071 +#define STRING_22072 22072 +#define STRING_22073 22073 +#define STRING_22074 22074 +#define STRING_22075 22075 +#define STRING_22076 22076 +#define STRING_22077 22077 +#define STRING_22078 22078 +#define STRING_22079 22079 +#define STRING_22080 22080 +#define STRING_22081 22081 +#define STRING_22082 22082 +#define STRING_22083 22083 +#define STRING_22084 22084 +#define STRING_22085 22085 +#define STRING_22086 22086 +#define STRING_22087 22087 +#define STRING_22088 22088 +#define STRING_22089 22089 +#define STRING_22090 22090 +#define STRING_22091 22091 +#define STRING_22092 22092 +#define STRING_22093 22093 +#define STRING_22094 22094 +#define STRING_22095 22095 +#define STRING_22096 22096 +#define STRING_22097 22097 +#define STRING_22098 22098 +#define STRING_22099 22099 +#define STRING_22100 22100 +#define STRING_22101 22101 +#define STRING_22102 22102 +#define STRING_22103 22103 +#define STRING_22104 22104 +#define STRING_22105 22105 +#define STRING_22106 22106 +#define STRING_22107 22107 +#define STRING_22108 22108 +#define STRING_22109 22109 +#define STRING_22110 22110 +#define STRING_22111 22111 +#define STRING_22112 22112 +#define STRING_22113 22113 +#define STRING_22114 22114 +#define STRING_22115 22115 +#define STRING_22116 22116 +#define STRING_22117 22117 +#define STRING_22118 22118 +#define STRING_22119 22119 +#define STRING_22120 22120 +#define STRING_22121 22121 +#define STRING_22122 22122 +#define STRING_22123 22123 +#define STRING_22124 22124 +#define STRING_22125 22125 +#define STRING_22126 22126 +#define STRING_22127 22127 +#define STRING_22128 22128 +#define STRING_22129 22129 +#define STRING_22130 22130 +#define STRING_22131 22131 +#define STRING_22132 22132 +#define STRING_22133 22133 +#define STRING_22134 22134 +#define STRING_22135 22135 +#define STRING_22136 22136 +#define STRING_22137 22137 +#define STRING_22138 22138 +#define STRING_22139 22139 +#define STRING_22140 22140 +#define STRING_22141 22141 +#define STRING_22142 22142 +#define STRING_22143 22143 +#define STRING_22144 22144 +#define STRING_22145 22145 +#define STRING_22146 22146 +#define STRING_22147 22147 +#define STRING_22148 22148 +#define STRING_22149 22149 +#define STRING_22150 22150 +#define STRING_22151 22151 +#define STRING_22152 22152 +#define STRING_22153 22153 +#define STRING_22154 22154 +#define STRING_22155 22155 +#define STRING_22156 22156 +#define STRING_22157 22157 +#define STRING_22158 22158 +#define STRING_22159 22159 +#define STRING_22160 22160 +#define STRING_22161 22161 +#define STRING_22162 22162 +#define STRING_22163 22163 +#define STRING_22164 22164 +#define STRING_22165 22165 +#define STRING_22166 22166 +#define STRING_22167 22167 +#define STRING_22168 22168 +#define STRING_22169 22169 +#define STRING_22170 22170 +#define STRING_22171 22171 +#define STRING_22172 22172 +#define STRING_22173 22173 +#define STRING_22174 22174 +#define STRING_22175 22175 +#define STRING_22176 22176 +#define STRING_22177 22177 +#define STRING_22178 22178 +#define STRING_22179 22179 +#define STRING_22180 22180 +#define STRING_22181 22181 +#define STRING_22182 22182 +#define STRING_22183 22183 +#define STRING_22184 22184 +#define STRING_22185 22185 +#define STRING_22186 22186 +#define STRING_22187 22187 +#define STRING_22188 22188 +#define STRING_22189 22189 +#define STRING_22190 22190 +#define STRING_22191 22191 +#define STRING_22192 22192 +#define STRING_22193 22193 +#define STRING_22194 22194 +#define STRING_22195 22195 +#define STRING_22196 22196 +#define STRING_22197 22197 +#define STRING_22198 22198 +#define STRING_22199 22199 +#define STRING_22200 22200 +#define STRING_22201 22201 +#define STRING_22202 22202 +#define STRING_22203 22203 +#define STRING_22204 22204 +#define STRING_22205 22205 +#define STRING_22206 22206 +#define STRING_22207 22207 +#define STRING_22208 22208 +#define STRING_22209 22209 +#define STRING_22210 22210 +#define STRING_22211 22211 +#define STRING_22212 22212 +#define STRING_22213 22213 +#define STRING_22214 22214 +#define STRING_22215 22215 +#define STRING_22216 22216 +#define STRING_22217 22217 +#define STRING_22218 22218 +#define STRING_22219 22219 +#define STRING_22220 22220 +#define STRING_22221 22221 +#define STRING_22222 22222 +#define STRING_22223 22223 +#define STRING_22224 22224 +#define STRING_22225 22225 +#define STRING_22226 22226 +#define STRING_22227 22227 +#define STRING_22228 22228 +#define STRING_22229 22229 +#define STRING_22230 22230 +#define STRING_22231 22231 +#define STRING_22232 22232 +#define STRING_22233 22233 +#define STRING_22234 22234 +#define STRING_22235 22235 +#define STRING_22236 22236 +#define STRING_22237 22237 +#define STRING_22238 22238 +#define STRING_22239 22239 +#define STRING_22240 22240 +#define STRING_22241 22241 +#define STRING_22242 22242 +#define STRING_22243 22243 +#define STRING_22244 22244 +#define STRING_22245 22245 +#define STRING_22246 22246 +#define STRING_22247 22247 +#define STRING_22248 22248 +#define STRING_22249 22249 +#define STRING_22250 22250 +#define STRING_22251 22251 +#define STRING_22252 22252 +#define STRING_22253 22253 +#define STRING_22254 22254 +#define STRING_22255 22255 +#define STRING_22256 22256 +#define STRING_22257 22257 +#define STRING_22258 22258 +#define STRING_22259 22259 +#define STRING_22260 22260 +#define STRING_22261 22261 +#define STRING_22262 22262 +#define STRING_22263 22263 +#define STRING_22264 22264 +#define STRING_22265 22265 +#define STRING_22266 22266 +#define STRING_22267 22267 +#define STRING_22268 22268 +#define STRING_22269 22269 +#define STRING_22270 22270 +#define STRING_22271 22271 +#define STRING_22272 22272 +#define STRING_22273 22273 +#define STRING_22274 22274 +#define STRING_22275 22275 +#define STRING_22276 22276 +#define STRING_22277 22277 +#define STRING_22278 22278 +#define STRING_22279 22279 +#define STRING_22280 22280 +#define STRING_22281 22281 +#define STRING_22282 22282 +#define STRING_22283 22283 +#define STRING_22284 22284 +#define STRING_22285 22285 +#define STRING_22286 22286 +#define STRING_22287 22287 +#define STRING_22288 22288 +#define STRING_22289 22289 +#define STRING_22290 22290 +#define STRING_22291 22291 +#define STRING_22292 22292 +#define STRING_22293 22293 +#define STRING_22294 22294 +#define STRING_22295 22295 +#define STRING_22296 22296 +#define STRING_22297 22297 +#define STRING_22298 22298 +#define STRING_22299 22299 +#define STRING_22300 22300 +#define STRING_22301 22301 +#define STRING_22302 22302 +#define STRING_22303 22303 +#define STRING_22304 22304 +#define STRING_22305 22305 +#define STRING_22306 22306 +#define STRING_22307 22307 +#define STRING_22308 22308 +#define STRING_22309 22309 +#define STRING_22310 22310 +#define STRING_22311 22311 +#define STRING_22312 22312 +#define STRING_22313 22313 +#define STRING_22314 22314 +#define STRING_22315 22315 +#define STRING_22316 22316 +#define STRING_22317 22317 +#define STRING_22318 22318 +#define STRING_22319 22319 +#define STRING_22320 22320 +#define STRING_22321 22321 +#define STRING_22322 22322 +#define STRING_22323 22323 +#define STRING_22324 22324 +#define STRING_22325 22325 +#define STRING_22326 22326 +#define STRING_22327 22327 +#define STRING_22328 22328 +#define STRING_22329 22329 +#define STRING_22330 22330 +#define STRING_22331 22331 +#define STRING_22332 22332 +#define STRING_22333 22333 +#define STRING_22334 22334 +#define STRING_22335 22335 +#define STRING_22336 22336 +#define STRING_22337 22337 +#define STRING_22338 22338 +#define STRING_22339 22339 +#define STRING_22340 22340 +#define STRING_22341 22341 +#define STRING_22342 22342 +#define STRING_22343 22343 +#define STRING_22344 22344 +#define STRING_22345 22345 +#define STRING_22346 22346 +#define STRING_22347 22347 +#define STRING_22348 22348 +#define STRING_22349 22349 +#define STRING_22350 22350 +#define STRING_22351 22351 +#define STRING_22352 22352 +#define STRING_22353 22353 +#define STRING_22354 22354 +#define STRING_22355 22355 +#define STRING_22356 22356 +#define STRING_22357 22357 +#define STRING_22358 22358 +#define STRING_22359 22359 +#define STRING_22360 22360 +#define STRING_22361 22361 +#define STRING_22362 22362 +#define STRING_22363 22363 +#define STRING_22364 22364 +#define STRING_22365 22365 +#define STRING_22366 22366 +#define STRING_22367 22367 +#define STRING_22368 22368 +#define STRING_22369 22369 +#define STRING_22370 22370 +#define STRING_22371 22371 +#define STRING_22372 22372 +#define STRING_22373 22373 +#define STRING_22374 22374 +#define STRING_22375 22375 +#define STRING_22376 22376 +#define STRING_22377 22377 +#define STRING_22378 22378 +#define STRING_22379 22379 +#define STRING_22380 22380 +#define STRING_22381 22381 +#define STRING_22382 22382 +#define STRING_22383 22383 +#define STRING_22384 22384 +#define STRING_22385 22385 +#define STRING_22386 22386 +#define STRING_22387 22387 +#define STRING_22388 22388 +#define STRING_22389 22389 +#define STRING_22390 22390 +#define STRING_22391 22391 +#define STRING_22392 22392 +#define STRING_22393 22393 +#define STRING_22394 22394 +#define STRING_22395 22395 +#define STRING_22396 22396 +#define STRING_22397 22397 +#define STRING_22398 22398 +#define STRING_22399 22399 +#define STRING_22400 22400 +#define STRING_22401 22401 +#define STRING_22402 22402 +#define STRING_22403 22403 +#define STRING_22404 22404 +#define STRING_22405 22405 +#define STRING_22406 22406 +#define STRING_22407 22407 +#define STRING_22408 22408 +#define STRING_22409 22409 +#define STRING_22410 22410 +#define STRING_22411 22411 +#define STRING_22412 22412 +#define STRING_22413 22413 +#define STRING_22414 22414 +#define STRING_22415 22415 +#define STRING_22416 22416 +#define STRING_22417 22417 +#define STRING_22418 22418 +#define STRING_22419 22419 +#define STRING_22420 22420 +#define STRING_22421 22421 +#define STRING_22422 22422 +#define STRING_22423 22423 +#define STRING_22424 22424 +#define STRING_22425 22425 +#define STRING_22426 22426 +#define STRING_22427 22427 +#define STRING_22428 22428 +#define STRING_22429 22429 +#define STRING_22430 22430 +#define STRING_22431 22431 +#define STRING_22432 22432 +#define STRING_22433 22433 +#define STRING_22434 22434 +#define STRING_22435 22435 +#define STRING_22436 22436 +#define STRING_22437 22437 +#define STRING_22438 22438 +#define STRING_22439 22439 +#define STRING_22440 22440 +#define STRING_22441 22441 +#define STRING_22442 22442 +#define STRING_22443 22443 +#define STRING_22444 22444 +#define STRING_22445 22445 +#define STRING_22446 22446 +#define STRING_22447 22447 +#define STRING_22448 22448 +#define STRING_22449 22449 +#define STRING_22450 22450 +#define STRING_22451 22451 +#define STRING_22452 22452 +#define STRING_22453 22453 +#define STRING_22454 22454 +#define STRING_22455 22455 +#define STRING_22456 22456 +#define STRING_22457 22457 +#define STRING_22458 22458 +#define STRING_22459 22459 +#define STRING_22460 22460 +#define STRING_22461 22461 +#define STRING_22462 22462 +#define STRING_22463 22463 +#define STRING_22464 22464 +#define STRING_22465 22465 +#define STRING_22466 22466 +#define STRING_22467 22467 +#define STRING_22468 22468 +#define STRING_22469 22469 +#define STRING_22470 22470 +#define STRING_22471 22471 +#define STRING_22472 22472 +#define STRING_22473 22473 +#define STRING_22474 22474 +#define STRING_22475 22475 +#define STRING_22476 22476 +#define STRING_22477 22477 +#define STRING_22478 22478 +#define STRING_22479 22479 +#define STRING_22480 22480 +#define STRING_22481 22481 +#define STRING_22482 22482 +#define STRING_22483 22483 +#define STRING_22484 22484 +#define STRING_22485 22485 +#define STRING_22486 22486 +#define STRING_22487 22487 +#define STRING_22488 22488 +#define STRING_22489 22489 +#define STRING_22490 22490 +#define STRING_22491 22491 +#define STRING_22492 22492 +#define STRING_22493 22493 +#define STRING_22494 22494 +#define STRING_22495 22495 +#define STRING_22496 22496 +#define STRING_22497 22497 +#define STRING_22498 22498 +#define STRING_22499 22499 +#define STRING_22500 22500 +#define STRING_22501 22501 +#define STRING_22502 22502 +#define STRING_22503 22503 +#define STRING_22504 22504 +#define STRING_22505 22505 +#define STRING_22506 22506 +#define STRING_22507 22507 +#define STRING_22508 22508 +#define STRING_22509 22509 +#define STRING_22510 22510 +#define STRING_22511 22511 +#define STRING_22512 22512 +#define STRING_22513 22513 +#define STRING_22514 22514 +#define STRING_22515 22515 +#define STRING_22516 22516 +#define STRING_22517 22517 +#define STRING_22518 22518 +#define STRING_22519 22519 +#define STRING_22520 22520 +#define STRING_22521 22521 +#define STRING_22522 22522 +#define STRING_22523 22523 +#define STRING_22524 22524 +#define STRING_22525 22525 +#define STRING_22526 22526 +#define STRING_22527 22527 +#define STRING_22528 22528 +#define STRING_22529 22529 +#define STRING_22530 22530 +#define STRING_22531 22531 +#define STRING_22532 22532 +#define STRING_22533 22533 +#define STRING_22534 22534 +#define STRING_22535 22535 +#define STRING_22536 22536 +#define STRING_22537 22537 +#define STRING_22538 22538 +#define STRING_22539 22539 +#define STRING_22540 22540 +#define STRING_22541 22541 +#define STRING_22542 22542 +#define STRING_22543 22543 +#define STRING_22544 22544 +#define STRING_22545 22545 +#define STRING_22546 22546 +#define STRING_22547 22547 +#define STRING_22548 22548 +#define STRING_22549 22549 +#define STRING_22550 22550 +#define STRING_22551 22551 +#define STRING_22552 22552 +#define STRING_22553 22553 +#define STRING_22554 22554 +#define STRING_22555 22555 +#define STRING_22556 22556 +#define STRING_22557 22557 +#define STRING_22558 22558 +#define STRING_22559 22559 +#define STRING_22560 22560 +#define STRING_22561 22561 +#define STRING_22562 22562 +#define STRING_22563 22563 +#define STRING_22564 22564 +#define STRING_22565 22565 +#define STRING_22566 22566 +#define STRING_22567 22567 +#define STRING_22568 22568 +#define STRING_22569 22569 +#define STRING_22570 22570 +#define STRING_22571 22571 +#define STRING_22572 22572 +#define STRING_22573 22573 +#define STRING_22574 22574 +#define STRING_22575 22575 +#define STRING_22576 22576 +#define STRING_22577 22577 +#define STRING_22578 22578 +#define STRING_22579 22579 +#define STRING_22580 22580 +#define STRING_22581 22581 +#define STRING_22582 22582 +#define STRING_22583 22583 +#define STRING_22584 22584 +#define STRING_22585 22585 +#define STRING_22586 22586 +#define STRING_22587 22587 +#define STRING_22588 22588 +#define STRING_22589 22589 +#define STRING_22590 22590 +#define STRING_22591 22591 +#define STRING_22592 22592 +#define STRING_22593 22593 +#define STRING_22594 22594 +#define STRING_22595 22595 +#define STRING_22596 22596 +#define STRING_22597 22597 +#define STRING_22598 22598 +#define STRING_22599 22599 +#define STRING_22600 22600 +#define STRING_22601 22601 +#define STRING_22602 22602 +#define STRING_22603 22603 +#define STRING_22604 22604 +#define STRING_22605 22605 +#define STRING_22606 22606 +#define STRING_22607 22607 +#define STRING_22608 22608 +#define STRING_22609 22609 +#define STRING_22610 22610 +#define STRING_22611 22611 +#define STRING_22612 22612 +#define STRING_22613 22613 +#define STRING_22614 22614 +#define STRING_22615 22615 +#define STRING_22616 22616 +#define STRING_22617 22617 +#define STRING_22618 22618 +#define STRING_22619 22619 +#define STRING_22620 22620 +#define STRING_22621 22621 +#define STRING_22622 22622 +#define STRING_22623 22623 +#define STRING_22624 22624 +#define STRING_22625 22625 +#define STRING_22626 22626 +#define STRING_22627 22627 +#define STRING_22628 22628 +#define STRING_22629 22629 +#define STRING_22630 22630 +#define STRING_22631 22631 +#define STRING_22632 22632 +#define STRING_22633 22633 +#define STRING_22634 22634 +#define STRING_22635 22635 +#define STRING_22636 22636 +#define STRING_22637 22637 +#define STRING_22638 22638 +#define STRING_22639 22639 +#define STRING_22640 22640 +#define STRING_22641 22641 +#define STRING_22642 22642 +#define STRING_22643 22643 +#define STRING_22644 22644 +#define STRING_22645 22645 +#define STRING_22646 22646 +#define STRING_22647 22647 +#define STRING_22648 22648 +#define STRING_22649 22649 +#define STRING_22650 22650 +#define STRING_22651 22651 +#define STRING_22652 22652 +#define STRING_22653 22653 +#define STRING_22654 22654 +#define STRING_22655 22655 +#define STRING_22656 22656 +#define STRING_22657 22657 +#define STRING_22658 22658 +#define STRING_22659 22659 +#define STRING_22660 22660 +#define STRING_22661 22661 +#define STRING_22662 22662 +#define STRING_22663 22663 +#define STRING_22664 22664 +#define STRING_22665 22665 +#define STRING_22666 22666 +#define STRING_22667 22667 +#define STRING_22668 22668 +#define STRING_22669 22669 +#define STRING_22670 22670 +#define STRING_22671 22671 +#define STRING_22672 22672 +#define STRING_22673 22673 +#define STRING_22674 22674 +#define STRING_22675 22675 +#define STRING_22676 22676 +#define STRING_22677 22677 +#define STRING_22678 22678 +#define STRING_22679 22679 +#define STRING_22680 22680 +#define STRING_22681 22681 +#define STRING_22682 22682 +#define STRING_22683 22683 +#define STRING_22684 22684 +#define STRING_22685 22685 +#define STRING_22686 22686 +#define STRING_22687 22687 +#define STRING_22688 22688 +#define STRING_22689 22689 +#define STRING_22690 22690 +#define STRING_22691 22691 +#define STRING_22692 22692 +#define STRING_22693 22693 +#define STRING_22694 22694 +#define STRING_22695 22695 +#define STRING_22696 22696 +#define STRING_22697 22697 +#define STRING_22698 22698 +#define STRING_22699 22699 +#define STRING_22700 22700 +#define STRING_22701 22701 +#define STRING_22702 22702 +#define STRING_22703 22703 +#define STRING_22704 22704 +#define STRING_22705 22705 +#define STRING_22706 22706 +#define STRING_22707 22707 +#define STRING_22708 22708 +#define STRING_22709 22709 +#define STRING_22710 22710 +#define STRING_22711 22711 +#define STRING_22712 22712 +#define STRING_22713 22713 +#define STRING_22714 22714 +#define STRING_22715 22715 +#define STRING_22716 22716 +#define STRING_22717 22717 +#define STRING_22718 22718 +#define STRING_22719 22719 +#define STRING_22720 22720 +#define STRING_22721 22721 +#define STRING_22722 22722 +#define STRING_22723 22723 +#define STRING_22724 22724 +#define STRING_22725 22725 +#define STRING_22726 22726 +#define STRING_22727 22727 +#define STRING_22728 22728 +#define STRING_22729 22729 +#define STRING_22730 22730 +#define STRING_22731 22731 +#define STRING_22732 22732 +#define STRING_22733 22733 +#define STRING_22734 22734 +#define STRING_22735 22735 +#define STRING_22736 22736 +#define STRING_22737 22737 +#define STRING_22738 22738 +#define STRING_22739 22739 +#define STRING_22740 22740 +#define STRING_22741 22741 +#define STRING_22742 22742 +#define STRING_22743 22743 +#define STRING_22744 22744 +#define STRING_22745 22745 +#define STRING_22746 22746 +#define STRING_22747 22747 +#define STRING_22748 22748 +#define STRING_22749 22749 +#define STRING_22750 22750 +#define STRING_22751 22751 +#define STRING_22752 22752 +#define STRING_22753 22753 +#define STRING_22754 22754 +#define STRING_22755 22755 +#define STRING_22756 22756 +#define STRING_22757 22757 +#define STRING_22758 22758 +#define STRING_22759 22759 +#define STRING_22760 22760 +#define STRING_22761 22761 +#define STRING_22762 22762 +#define STRING_22763 22763 +#define STRING_22764 22764 +#define STRING_22765 22765 +#define STRING_22766 22766 +#define STRING_22767 22767 +#define STRING_22768 22768 +#define STRING_22769 22769 +#define STRING_22770 22770 +#define STRING_22771 22771 +#define STRING_22772 22772 +#define STRING_22773 22773 +#define STRING_22774 22774 +#define STRING_22775 22775 +#define STRING_22776 22776 +#define STRING_22777 22777 +#define STRING_22778 22778 +#define STRING_22779 22779 +#define STRING_22780 22780 +#define STRING_22781 22781 +#define STRING_22782 22782 +#define STRING_22783 22783 +#define STRING_22784 22784 +#define STRING_22785 22785 +#define STRING_22786 22786 +#define STRING_22787 22787 +#define STRING_22788 22788 +#define STRING_22789 22789 +#define STRING_22790 22790 +#define STRING_22791 22791 +#define STRING_22792 22792 +#define STRING_22793 22793 +#define STRING_22794 22794 +#define STRING_22795 22795 +#define STRING_22796 22796 +#define STRING_22797 22797 +#define STRING_22798 22798 +#define STRING_22799 22799 +#define STRING_22800 22800 +#define STRING_22801 22801 +#define STRING_22802 22802 +#define STRING_22803 22803 +#define STRING_22804 22804 +#define STRING_22805 22805 +#define STRING_22806 22806 +#define STRING_22807 22807 +#define STRING_22808 22808 +#define STRING_22809 22809 +#define STRING_22810 22810 +#define STRING_22811 22811 +#define STRING_22812 22812 +#define STRING_22813 22813 +#define STRING_22814 22814 +#define STRING_22815 22815 +#define STRING_22816 22816 +#define STRING_22817 22817 +#define STRING_22818 22818 +#define STRING_22819 22819 +#define STRING_22820 22820 +#define STRING_22821 22821 +#define STRING_22822 22822 +#define STRING_22823 22823 +#define STRING_22824 22824 +#define STRING_22825 22825 +#define STRING_22826 22826 +#define STRING_22827 22827 +#define STRING_22828 22828 +#define STRING_22829 22829 +#define STRING_22830 22830 +#define STRING_22831 22831 +#define STRING_22832 22832 +#define STRING_22833 22833 +#define STRING_22834 22834 +#define STRING_22835 22835 +#define STRING_22836 22836 +#define STRING_22837 22837 +#define STRING_22838 22838 +#define STRING_22839 22839 +#define STRING_22840 22840 +#define STRING_22841 22841 +#define STRING_22842 22842 +#define STRING_22843 22843 +#define STRING_22844 22844 +#define STRING_22845 22845 +#define STRING_22846 22846 +#define STRING_22847 22847 +#define STRING_22848 22848 +#define STRING_22849 22849 +#define STRING_22850 22850 +#define STRING_22851 22851 +#define STRING_22852 22852 +#define STRING_22853 22853 +#define STRING_22854 22854 +#define STRING_22855 22855 +#define STRING_22856 22856 +#define STRING_22857 22857 +#define STRING_22858 22858 +#define STRING_22859 22859 +#define STRING_22860 22860 +#define STRING_22861 22861 +#define STRING_22862 22862 +#define STRING_22863 22863 +#define STRING_22864 22864 +#define STRING_22865 22865 +#define STRING_22866 22866 +#define STRING_22867 22867 +#define STRING_22868 22868 +#define STRING_22869 22869 +#define STRING_22870 22870 +#define STRING_22871 22871 +#define STRING_22872 22872 +#define STRING_22873 22873 +#define STRING_22874 22874 +#define STRING_22875 22875 +#define STRING_22876 22876 +#define STRING_22877 22877 +#define STRING_22878 22878 +#define STRING_22879 22879 +#define STRING_22880 22880 +#define STRING_22881 22881 +#define STRING_22882 22882 +#define STRING_22883 22883 +#define STRING_22884 22884 +#define STRING_22885 22885 +#define STRING_22886 22886 +#define STRING_22887 22887 +#define STRING_22888 22888 +#define STRING_22889 22889 +#define STRING_22890 22890 +#define STRING_22891 22891 +#define STRING_22892 22892 +#define STRING_22893 22893 +#define STRING_22894 22894 +#define STRING_22895 22895 +#define STRING_22896 22896 +#define STRING_22897 22897 +#define STRING_22898 22898 +#define STRING_22899 22899 +#define STRING_22900 22900 +#define STRING_22901 22901 +#define STRING_22902 22902 +#define STRING_22903 22903 +#define STRING_22904 22904 +#define STRING_22905 22905 +#define STRING_22906 22906 +#define STRING_22907 22907 +#define STRING_22908 22908 +#define STRING_22909 22909 +#define STRING_22910 22910 +#define STRING_22911 22911 +#define STRING_22912 22912 +#define STRING_22913 22913 +#define STRING_22914 22914 +#define STRING_22915 22915 +#define STRING_22916 22916 +#define STRING_22917 22917 +#define STRING_22918 22918 +#define STRING_22919 22919 +#define STRING_22920 22920 +#define STRING_22921 22921 +#define STRING_22922 22922 +#define STRING_22923 22923 +#define STRING_22924 22924 +#define STRING_22925 22925 +#define STRING_22926 22926 +#define STRING_22927 22927 +#define STRING_22928 22928 +#define STRING_22929 22929 +#define STRING_22930 22930 +#define STRING_CHORD_END 22931 + +#define STRING_INSTRUMENT1 1 +#define STRING_INSTRUMENT2 2 +#define STRING_INSTRUMENT3 3 +#define STRING_INSTRUMENT4 4 +#define STRING_INSTRUMENT5 5 +#define STRING_INSTRUMENT6 6 +#define STRING_INSTRUMENT7 7 +#define STRING_INSTRUMENT8 8 +#define STRING_INSTRUMENT9 9 +#define STRING_INSTRUMENT10 10 +#define STRING_INSTRUMENT11 11 +#define STRING_INSTRUMENT12 12 +#define STRING_INSTRUMENT13 13 +#define STRING_INSTRUMENT14 14 +#define STRING_INSTRUMENT15 15 +#define STRING_INSTRUMENT16 16 +#define STRING_INSTRUMENT17 17 +#define STRING_INSTRUMENT18 18 +#define STRING_INSTRUMENT19 19 +#define STRING_INSTRUMENT20 20 +#define STRING_INSTRUMENT21 21 +#define STRING_INSTRUMENT22 22 +#define STRING_INSTRUMENT23 23 +#define STRING_INSTRUMENT24 24 +#define STRING_INSTRUMENT25 25 +#define STRING_INSTRUMENT26 26 +#define STRING_INSTRUMENT27 27 +#define STRING_INSTRUMENT28 28 +#define STRING_INSTRUMENT29 29 +#define STRING_INSTRUMENT30 30 +#define STRING_INSTRUMENT31 31 +#define STRING_INSTRUMENT32 32 +#define STRING_INSTRUMENT33 33 +#define STRING_INSTRUMENT34 34 +#define STRING_INSTRUMENT35 35 +#define STRING_INSTRUMENT36 36 +#define STRING_INSTRUMENT37 37 +#define STRING_INSTRUMENT38 38 +#define STRING_INSTRUMENT39 39 +#define STRING_INSTRUMENT40 40 +#define STRING_INSTRUMENT41 41 +#define STRING_INSTRUMENT42 42 +#define STRING_INSTRUMENT43 43 +#define STRING_INSTRUMENT44 44 +#define STRING_INSTRUMENT45 45 +#define STRING_INSTRUMENT46 46 +#define STRING_INSTRUMENT47 47 +#define STRING_INSTRUMENT48 48 +#define STRING_INSTRUMENT49 49 +#define STRING_INSTRUMENT50 50 +#define STRING_INSTRUMENT51 51 +#define STRING_INSTRUMENT52 52 +#define STRING_INSTRUMENT53 53 +#define STRING_INSTRUMENT54 54 +#define STRING_INSTRUMENT55 55 +#define STRING_INSTRUMENT56 56 +#define STRING_INSTRUMENT57 57 +#define STRING_INSTRUMENT58 58 +#define STRING_INSTRUMENT59 59 +#define STRING_INSTRUMENT60 60 +#define STRING_INSTRUMENT61 61 +#define STRING_INSTRUMENT62 62 +#define STRING_INSTRUMENT63 63 +#define STRING_INSTRUMENT64 64 +#define STRING_INSTRUMENT65 65 +#define STRING_INSTRUMENT66 66 +#define STRING_INSTRUMENT67 67 +#define STRING_INSTRUMENT68 68 +#define STRING_INSTRUMENT69 69 +#define STRING_INSTRUMENT70 70 +#define STRING_INSTRUMENT71 71 +#define STRING_INSTRUMENT72 72 +#define STRING_INSTRUMENT73 73 +#define STRING_INSTRUMENT74 74 +#define STRING_INSTRUMENT75 75 +#define STRING_INSTRUMENT76 76 +#define STRING_INSTRUMENT77 77 +#define STRING_INSTRUMENT78 78 +#define STRING_INSTRUMENT79 79 +#define STRING_INSTRUMENT80 80 +#define STRING_INSTRUMENT81 81 +#define STRING_INSTRUMENT82 82 +#define STRING_INSTRUMENT83 83 +#define STRING_INSTRUMENT84 84 +#define STRING_INSTRUMENT85 85 +#define STRING_INSTRUMENT86 86 +#define STRING_INSTRUMENT87 87 +#define STRING_INSTRUMENT88 88 +#define STRING_INSTRUMENT89 89 +#define STRING_INSTRUMENT90 90 +#define STRING_INSTRUMENT91 91 +#define STRING_INSTRUMENT92 92 +#define STRING_INSTRUMENT93 93 +#define STRING_INSTRUMENT94 94 +#define STRING_INSTRUMENT95 95 +#define STRING_INSTRUMENT96 96 +#define STRING_INSTRUMENT97 97 +#define STRING_INSTRUMENT98 98 +#define STRING_INSTRUMENT99 99 +#define STRING_INSTRUMENT100 100 +#define STRING_INSTRUMENT101 101 +#define STRING_INSTRUMENT102 102 +#define STRING_INSTRUMENT103 103 +#define STRING_INSTRUMENT104 104 +#define STRING_INSTRUMENT105 105 +#define STRING_INSTRUMENT106 106 +#define STRING_INSTRUMENT107 107 +#define STRING_INSTRUMENT108 108 +#define STRING_INSTRUMENT109 109 +#define STRING_INSTRUMENT110 110 +#define STRING_INSTRUMENT111 111 +#define STRING_INSTRUMENT112 112 +#define STRING_INSTRUMENT113 113 +#define STRING_INSTRUMENT114 114 +#define STRING_INSTRUMENT115 115 +#define STRING_INSTRUMENT116 116 +#define STRING_INSTRUMENT117 117 +#define STRING_INSTRUMENT118 118 +#define STRING_INSTRUMENT119 119 +#define STRING_INSTRUMENT120 120 +#define STRING_INSTRUMENT121 121 +#define STRING_INSTRUMENT122 122 +#define STRING_INSTRUMENT123 123 +#define STRING_INSTRUMENT124 124 +#define STRING_INSTRUMENT125 125 +#define STRING_INSTRUMENT126 126 +#define STRING_INSTRUMENT127 127 +#define STRING_INSTRUMENT128 128 +#define STRING_INSTRUMENT129 129 +#define STRING_INSTRUMENT130 130 +#define STRING_INSTRUMENT131 131 +#define STRING_INSTRUMENT132 132 +#define STRING_INSTRUMENT133 133 +#define STRING_INSTRUMENT134 134 +#define STRING_INSTRUMENT135 135 +#define STRING_INSTRUMENT136 136 +#define STRING_INSTRUMENT137 137 +#define STRING_INSTRUMENT138 138 +#define STRING_INSTRUMENT139 139 +#define STRING_INSTRUMENT140 140 +#define STRING_INSTRUMENT141 141 +#define STRING_INSTRUMENT142 142 +#define STRING_INSTRUMENT143 143 +#define STRING_INSTRUMENT144 144 +#define STRING_INSTRUMENT145 145 +#define STRING_INSTRUMENT146 146 +#define STRING_INSTRUMENT147 147 +#define STRING_INSTRUMENT148 148 +#define STRING_INSTRUMENT149 149 +#define STRING_INSTRUMENT150 150 +#define STRING_INSTRUMENT151 151 +#define STRING_INSTRUMENT152 152 +#define STRING_INSTRUMENT153 153 +#define STRING_INSTRUMENT154 154 +#define STRING_INSTRUMENT155 155 +#define STRING_INSTRUMENT156 156 +#define STRING_INSTRUMENT157 157 +#define STRING_INSTRUMENT158 158 +#define STRING_INSTRUMENT159 159 +#define STRING_INSTRUMENT160 160 +#define STRING_INSTRUMENT161 161 +#define STRING_INSTRUMENT162 162 +#define STRING_INSTRUMENT163 163 +#define STRING_INSTRUMENT164 164 +#define STRING_INSTRUMENT165 165 +#define STRING_INSTRUMENT166 166 +#define STRING_INSTRUMENT167 167 +#define STRING_INSTRUMENT168 168 +#define STRING_INSTRUMENT169 169 +#define STRING_INSTRUMENT170 170 +#define STRING_INSTRUMENT171 171 +#define STRING_INSTRUMENT172 172 +#define STRING_INSTRUMENT173 173 +#define STRING_INSTRUMENT174 174 +#define STRING_INSTRUMENT175 175 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#endif + diff --git a/guitar/guitar.h.saf b/guitar/guitar.h.saf new file mode 100644 index 0000000..0337b4c --- /dev/null +++ b/guitar/guitar.h.saf @@ -0,0 +1,1276 @@ +#ifndef _GUITAR_GUITAR_H_ +#define _GUITAR_GUITAR_H_ + +#include "windows.h" + +// +#define IDC_STATIC -1 + +// CURSOR +#define HARROW 1000 + +// LICENSE DIALOG +#define LICENSE_DIALOG_LICENSE 1077 +#define LICENSE_DIALOG_REQUEST_LICENSE 1076 + +// ENTER CHORD DIALOG +#define ENTERCHORD_EDIT 1082 +#define ENTERCHORD_EXAMPLES 1083 + + +// MIDIDIALOG +#define MIDI_TRACK1 1042 +#define MIDI_TRACK2 1043 +#define MIDI_TRACK3 1044 +#define MIDI_TRACK4 1045 +#define MIDI_TRACK5 1046 +#define MIDI_TRACK6 1047 +#define MIDI_TRACK7 1048 +#define MIDI_TRACK8 1049 +#define MIDI_TRACK9 1050 +#define MIDI_TRACK10 1051 +#define MIDI_TRACK11 1052 +#define MIDI_TRACK12 1053 +#define MIDI_TRACK13 1054 +#define MIDI_TRACK14 1055 +#define MIDI_TRACK15 1056 +#define MIDI_TRACK16 1057 +#define MIDI_EVENTS_TRACK1 1060 +#define MIDI_EVENTS_TRACK2 1061 +#define MIDI_EVENTS_TRACK3 1062 +#define MIDI_EVENTS_TRACK4 1063 +#define MIDI_EVENTS_TRACK5 1064 +#define MIDI_EVENTS_TRACK6 1065 +#define MIDI_EVENTS_TRACK7 1066 +#define MIDI_EVENTS_TRACK8 1067 +#define MIDI_EVENTS_TRACK9 1068 +#define MIDI_EVENTS_TRACK10 1069 +#define MIDI_EVENTS_TRACK11 1070 +#define MIDI_EVENTS_TRACK12 1071 +#define MIDI_EVENTS_TRACK13 1072 +#define MIDI_EVENTS_TRACK14 1073 +#define MIDI_EVENTS_TRACK15 1074 +#define MIDI_EVENTS_TRACK16 1075 + +// FRETENTRY DIALOG +#define FRETENTRY_FRET 1037 +#define FRETENTRY_ACTION 1038 +#define FRETENTRY_STRING 1039 +#define FRETENTRY_DURATION 1040 + +// FOR SCALES DIALOG +#define SCALEDLG_LIST 1024 +#define SCALEDLG_ROOT 1025 +#define SCALEDLG_SPIN 1026 +#define SCALEDLG_MUTE 1027 + + +// FOR RANGE EDIT DIALOG +#define RANGEEDIT_NAME 1016 +#define RANGEEDIT_BEGIN 1017 +#define RANGEEDIT_END 1018 + +// FOR RANGE DIALOG +#define RANGE_LIST 1000 +#define RANGE_INSERT 1022 +#define RANGE_DELETE 1023 + +// FOR SETTINGS DIALOG +#define SETTINGS_MICROSECSPERQTRNOTE 1011 +#define SETTINGS_DEFAULTS 1012 +#define SETTINGS_SHOWACTION 1013 +#define SETTINGS_SHOWNOTES 1014 +#define SETTINGS_INSTRUMENT 1015 +#define SETTINGS_MIDIOUT 1024 + +// FOR CHORD DIALOG +#define CHORDS_LIST 1000 +#define CHORDS_COUNT 1009 + +// FOR TAB ENTRY DIALOG +#define TABENTRY_LIST 1004 +#define TABENTRY_NOTETYPE 1005 +#define TABENTRY_REMAINDER 1006 +#define TABENTRY_COMMENTS 1007 +#define TABENTRY_SEPARATOR 1008 + + + +#define MENU_FILE_OPEN 10000 +#define MENU_FILE_EXIT 10001 +#define MENU_FILE_NEW 10002 +#define MENU_FILE_SAVE 10003 +#define MENU_FILE_SAVEAS 10004 +#define MENU_FILE_CLOSE 10005 +#define MENU_FILE_PRINT 10006 +#define MENU_FILE_IMPORT 10007 +#define MENU_FILE_MIDI_IMPORT 10008 + +#define MENU_HISTOGRAM_HISTOGRAM 10100 + +#define MENU_TABLATURE_PLAY 10500 +#define MENU_TABLATURE_PLAYTOEND 10501 +#define MENU_TABLATURE_PLAYREPEATED 10502 +#define MENU_TABLATURE_PLAYRANGE 10503 +#define MENU_TABLATURE_PLAYRANGE_REPEATED 10504 +#define MENU_TABLATURE_STOP 10505 +#define MENU_TABLATURE_ENTRYPROPS 10506 +#define MENU_TABLATURE_SETSTARTRANGE 10507 +#define MENU_TABLATURE_SETENDRANGE 10508 + +#define MENU_OPTIONS_INCREASETEMPO 10601 +#define MENU_OPTIONS_DECREASETEMPO 10602 +#define MENU_OPTIONS_SETTINGS 10603 + +#define MENU_VIEW_FRETBOARD 10700 + +#define MENU_CHORDS_LOOKUP 10800 +#define MENU_CHORDS_ENTER 10801 + +#define MENU_SCALES_SHOW 10900 + +#define MENU_FRETBOARD_CLEAR 11000 +#define MENU_FRETBOARD_SHOWALLPOSITIONS 11001 + +#define MENU_EDIT_CUT 12000 +#define MENU_EDIT_COPY 12001 +#define MENU_EDIT_PASTE 12002 +#define MENU_EDIT_RANGES 12003 + +#define MENU_HELP_INDEX 12100 +#define MENU_HELP_APPLY_LICENSE 12101 +#define MENU_HELP_ABOUT 12102 + +#define TABACCELERATORS 10000 + +// STRINGS + +#define STRING_NOTITLE 19000 +#define STRING_EDITHINT 19001 +#define STRING_PRJEXTENSION 19002 +#define STRING_PRJALLEXTENSION 19003 +#define STRING_TABEXTENSION 19004 +#define STRING_BROWSERKEY 19005 +#define STRING_BROWSERKEYALT 19006 +#define STRING_BROWSERCOMMAND 19007 +#define STRING_HOST 19008 +#define STRING_HELPPAGE 19009 +#define STRING_MIDIEXTENSION 19010 +#define STRING_PURCHASE_URL 19011 + +#define STRING_TABVIEWWINDOWCLASSNAME 20000 +#define STRING_FRETVIEWWINDOWCLASSNAME 20001 +#define STRING_REGISTRYKEYNAME 20002 +#define STRING_HISTORYKEYNAME 20003 +#define STRING_HISTORYKEYSHORTNAME 20004 +#define STRING_SETTINGSKEYNAME 20005 +#define STRING_SETTINGSINSTRUMENT 20006 +#define STRING_SETTINGSACTION 20007 +#define STRING_SETTINGSNOTELETTERS 20008 +#define STRING_SETTINGSMICROSECONDSPERQUARTERNOTE 20009 +#define STRING_REGISTRATIONKEYNAME 20010 +#define STRING_SETTINGSLICENSE 20011 +#define STRING_SETTINGSMIDIOUTPUT 20012 + + +// chord definitions +#define STRING_22000 22000 +#define STRING_22001 22001 +#define STRING_22002 22002 +#define STRING_22003 22003 +#define STRING_22004 22004 +#define STRING_22005 22005 +#define STRING_22006 22006 +#define STRING_22007 22007 +#define STRING_22008 22008 +#define STRING_22009 22009 +#define STRING_22010 22010 +#define STRING_22011 22011 +#define STRING_22012 22012 +#define STRING_22013 22013 +#define STRING_22014 22014 +#define STRING_22015 22015 +#define STRING_22016 22016 +#define STRING_22017 22017 +#define STRING_22018 22018 +#define STRING_22019 22019 +#define STRING_22020 22020 +#define STRING_22021 22021 +#define STRING_22022 22022 +#define STRING_22023 22023 +#define STRING_22024 22024 +#define STRING_22025 22025 +#define STRING_22026 22026 +#define STRING_22027 22027 +#define STRING_22028 22028 +#define STRING_22029 22029 +#define STRING_22030 22030 +#define STRING_22031 22031 +#define STRING_22032 22032 +#define STRING_22033 22033 +#define STRING_22034 22034 +#define STRING_22035 22035 +#define STRING_22036 22036 +#define STRING_22037 22037 +#define STRING_22038 22038 +#define STRING_22039 22039 +#define STRING_22040 22040 +#define STRING_22041 22041 +#define STRING_22042 22042 +#define STRING_22043 22043 +#define STRING_22044 22044 +#define STRING_22045 22045 +#define STRING_22046 22046 +#define STRING_22047 22047 +#define STRING_22048 22048 +#define STRING_22049 22049 +#define STRING_22050 22050 +#define STRING_22051 22051 +#define STRING_22052 22052 +#define STRING_22053 22053 +#define STRING_22054 22054 +#define STRING_22055 22055 +#define STRING_22056 22056 +#define STRING_22057 22057 +#define STRING_22058 22058 +#define STRING_22059 22059 +#define STRING_22060 22060 +#define STRING_22061 22061 +#define STRING_22062 22062 +#define STRING_22063 22063 +#define STRING_22064 22064 +#define STRING_22065 22065 +#define STRING_22066 22066 +#define STRING_22067 22067 +#define STRING_22068 22068 +#define STRING_22069 22069 +#define STRING_22070 22070 +#define STRING_22071 22071 +#define STRING_22072 22072 +#define STRING_22073 22073 +#define STRING_22074 22074 +#define STRING_22075 22075 +#define STRING_22076 22076 +#define STRING_22077 22077 +#define STRING_22078 22078 +#define STRING_22079 22079 +#define STRING_22080 22080 +#define STRING_22081 22081 +#define STRING_22082 22082 +#define STRING_22083 22083 +#define STRING_22084 22084 +#define STRING_22085 22085 +#define STRING_22086 22086 +#define STRING_22087 22087 +#define STRING_22088 22088 +#define STRING_22089 22089 +#define STRING_22090 22090 +#define STRING_22091 22091 +#define STRING_22092 22092 +#define STRING_22093 22093 +#define STRING_22094 22094 +#define STRING_22095 22095 +#define STRING_22096 22096 +#define STRING_22097 22097 +#define STRING_22098 22098 +#define STRING_22099 22099 +#define STRING_22100 22100 +#define STRING_22101 22101 +#define STRING_22102 22102 +#define STRING_22103 22103 +#define STRING_22104 22104 +#define STRING_22105 22105 +#define STRING_22106 22106 +#define STRING_22107 22107 +#define STRING_22108 22108 +#define STRING_22109 22109 +#define STRING_22110 22110 +#define STRING_22111 22111 +#define STRING_22112 22112 +#define STRING_22113 22113 +#define STRING_22114 22114 +#define STRING_22115 22115 +#define STRING_22116 22116 +#define STRING_22117 22117 +#define STRING_22118 22118 +#define STRING_22119 22119 +#define STRING_22120 22120 +#define STRING_22121 22121 +#define STRING_22122 22122 +#define STRING_22123 22123 +#define STRING_22124 22124 +#define STRING_22125 22125 +#define STRING_22126 22126 +#define STRING_22127 22127 +#define STRING_22128 22128 +#define STRING_22129 22129 +#define STRING_22130 22130 +#define STRING_22131 22131 +#define STRING_22132 22132 +#define STRING_22133 22133 +#define STRING_22134 22134 +#define STRING_22135 22135 +#define STRING_22136 22136 +#define STRING_22137 22137 +#define STRING_22138 22138 +#define STRING_22139 22139 +#define STRING_22140 22140 +#define STRING_22141 22141 +#define STRING_22142 22142 +#define STRING_22143 22143 +#define STRING_22144 22144 +#define STRING_22145 22145 +#define STRING_22146 22146 +#define STRING_22147 22147 +#define STRING_22148 22148 +#define STRING_22149 22149 +#define STRING_22150 22150 +#define STRING_22151 22151 +#define STRING_22152 22152 +#define STRING_22153 22153 +#define STRING_22154 22154 +#define STRING_22155 22155 +#define STRING_22156 22156 +#define STRING_22157 22157 +#define STRING_22158 22158 +#define STRING_22159 22159 +#define STRING_22160 22160 +#define STRING_22161 22161 +#define STRING_22162 22162 +#define STRING_22163 22163 +#define STRING_22164 22164 +#define STRING_22165 22165 +#define STRING_22166 22166 +#define STRING_22167 22167 +#define STRING_22168 22168 +#define STRING_22169 22169 +#define STRING_22170 22170 +#define STRING_22171 22171 +#define STRING_22172 22172 +#define STRING_22173 22173 +#define STRING_22174 22174 +#define STRING_22175 22175 +#define STRING_22176 22176 +#define STRING_22177 22177 +#define STRING_22178 22178 +#define STRING_22179 22179 +#define STRING_22180 22180 +#define STRING_22181 22181 +#define STRING_22182 22182 +#define STRING_22183 22183 +#define STRING_22184 22184 +#define STRING_22185 22185 +#define STRING_22186 22186 +#define STRING_22187 22187 +#define STRING_22188 22188 +#define STRING_22189 22189 +#define STRING_22190 22190 +#define STRING_22191 22191 +#define STRING_22192 22192 +#define STRING_22193 22193 +#define STRING_22194 22194 +#define STRING_22195 22195 +#define STRING_22196 22196 +#define STRING_22197 22197 +#define STRING_22198 22198 +#define STRING_22199 22199 +#define STRING_22200 22200 +#define STRING_22201 22201 +#define STRING_22202 22202 +#define STRING_22203 22203 +#define STRING_22204 22204 +#define STRING_22205 22205 +#define STRING_22206 22206 +#define STRING_22207 22207 +#define STRING_22208 22208 +#define STRING_22209 22209 +#define STRING_22210 22210 +#define STRING_22211 22211 +#define STRING_22212 22212 +#define STRING_22213 22213 +#define STRING_22214 22214 +#define STRING_22215 22215 +#define STRING_22216 22216 +#define STRING_22217 22217 +#define STRING_22218 22218 +#define STRING_22219 22219 +#define STRING_22220 22220 +#define STRING_22221 22221 +#define STRING_22222 22222 +#define STRING_22223 22223 +#define STRING_22224 22224 +#define STRING_22225 22225 +#define STRING_22226 22226 +#define STRING_22227 22227 +#define STRING_22228 22228 +#define STRING_22229 22229 +#define STRING_22230 22230 +#define STRING_22231 22231 +#define STRING_22232 22232 +#define STRING_22233 22233 +#define STRING_22234 22234 +#define STRING_22235 22235 +#define STRING_22236 22236 +#define STRING_22237 22237 +#define STRING_22238 22238 +#define STRING_22239 22239 +#define STRING_22240 22240 +#define STRING_22241 22241 +#define STRING_22242 22242 +#define STRING_22243 22243 +#define STRING_22244 22244 +#define STRING_22245 22245 +#define STRING_22246 22246 +#define STRING_22247 22247 +#define STRING_22248 22248 +#define STRING_22249 22249 +#define STRING_22250 22250 +#define STRING_22251 22251 +#define STRING_22252 22252 +#define STRING_22253 22253 +#define STRING_22254 22254 +#define STRING_22255 22255 +#define STRING_22256 22256 +#define STRING_22257 22257 +#define STRING_22258 22258 +#define STRING_22259 22259 +#define STRING_22260 22260 +#define STRING_22261 22261 +#define STRING_22262 22262 +#define STRING_22263 22263 +#define STRING_22264 22264 +#define STRING_22265 22265 +#define STRING_22266 22266 +#define STRING_22267 22267 +#define STRING_22268 22268 +#define STRING_22269 22269 +#define STRING_22270 22270 +#define STRING_22271 22271 +#define STRING_22272 22272 +#define STRING_22273 22273 +#define STRING_22274 22274 +#define STRING_22275 22275 +#define STRING_22276 22276 +#define STRING_22277 22277 +#define STRING_22278 22278 +#define STRING_22279 22279 +#define STRING_22280 22280 +#define STRING_22281 22281 +#define STRING_22282 22282 +#define STRING_22283 22283 +#define STRING_22284 22284 +#define STRING_22285 22285 +#define STRING_22286 22286 +#define STRING_22287 22287 +#define STRING_22288 22288 +#define STRING_22289 22289 +#define STRING_22290 22290 +#define STRING_22291 22291 +#define STRING_22292 22292 +#define STRING_22293 22293 +#define STRING_22294 22294 +#define STRING_22295 22295 +#define STRING_22296 22296 +#define STRING_22297 22297 +#define STRING_22298 22298 +#define STRING_22299 22299 +#define STRING_22300 22300 +#define STRING_22301 22301 +#define STRING_22302 22302 +#define STRING_22303 22303 +#define STRING_22304 22304 +#define STRING_22305 22305 +#define STRING_22306 22306 +#define STRING_22307 22307 +#define STRING_22308 22308 +#define STRING_22309 22309 +#define STRING_22310 22310 +#define STRING_22311 22311 +#define STRING_22312 22312 +#define STRING_22313 22313 +#define STRING_22314 22314 +#define STRING_22315 22315 +#define STRING_22316 22316 +#define STRING_22317 22317 +#define STRING_22318 22318 +#define STRING_22319 22319 +#define STRING_22320 22320 +#define STRING_22321 22321 +#define STRING_22322 22322 +#define STRING_22323 22323 +#define STRING_22324 22324 +#define STRING_22325 22325 +#define STRING_22326 22326 +#define STRING_22327 22327 +#define STRING_22328 22328 +#define STRING_22329 22329 +#define STRING_22330 22330 +#define STRING_22331 22331 +#define STRING_22332 22332 +#define STRING_22333 22333 +#define STRING_22334 22334 +#define STRING_22335 22335 +#define STRING_22336 22336 +#define STRING_22337 22337 +#define STRING_22338 22338 +#define STRING_22339 22339 +#define STRING_22340 22340 +#define STRING_22341 22341 +#define STRING_22342 22342 +#define STRING_22343 22343 +#define STRING_22344 22344 +#define STRING_22345 22345 +#define STRING_22346 22346 +#define STRING_22347 22347 +#define STRING_22348 22348 +#define STRING_22349 22349 +#define STRING_22350 22350 +#define STRING_22351 22351 +#define STRING_22352 22352 +#define STRING_22353 22353 +#define STRING_22354 22354 +#define STRING_22355 22355 +#define STRING_22356 22356 +#define STRING_22357 22357 +#define STRING_22358 22358 +#define STRING_22359 22359 +#define STRING_22360 22360 +#define STRING_22361 22361 +#define STRING_22362 22362 +#define STRING_22363 22363 +#define STRING_22364 22364 +#define STRING_22365 22365 +#define STRING_22366 22366 +#define STRING_22367 22367 +#define STRING_22368 22368 +#define STRING_22369 22369 +#define STRING_22370 22370 +#define STRING_22371 22371 +#define STRING_22372 22372 +#define STRING_22373 22373 +#define STRING_22374 22374 +#define STRING_22375 22375 +#define STRING_22376 22376 +#define STRING_22377 22377 +#define STRING_22378 22378 +#define STRING_22379 22379 +#define STRING_22380 22380 +#define STRING_22381 22381 +#define STRING_22382 22382 +#define STRING_22383 22383 +#define STRING_22384 22384 +#define STRING_22385 22385 +#define STRING_22386 22386 +#define STRING_22387 22387 +#define STRING_22388 22388 +#define STRING_22389 22389 +#define STRING_22390 22390 +#define STRING_22391 22391 +#define STRING_22392 22392 +#define STRING_22393 22393 +#define STRING_22394 22394 +#define STRING_22395 22395 +#define STRING_22396 22396 +#define STRING_22397 22397 +#define STRING_22398 22398 +#define STRING_22399 22399 +#define STRING_22400 22400 +#define STRING_22401 22401 +#define STRING_22402 22402 +#define STRING_22403 22403 +#define STRING_22404 22404 +#define STRING_22405 22405 +#define STRING_22406 22406 +#define STRING_22407 22407 +#define STRING_22408 22408 +#define STRING_22409 22409 +#define STRING_22410 22410 +#define STRING_22411 22411 +#define STRING_22412 22412 +#define STRING_22413 22413 +#define STRING_22414 22414 +#define STRING_22415 22415 +#define STRING_22416 22416 +#define STRING_22417 22417 +#define STRING_22418 22418 +#define STRING_22419 22419 +#define STRING_22420 22420 +#define STRING_22421 22421 +#define STRING_22422 22422 +#define STRING_22423 22423 +#define STRING_22424 22424 +#define STRING_22425 22425 +#define STRING_22426 22426 +#define STRING_22427 22427 +#define STRING_22428 22428 +#define STRING_22429 22429 +#define STRING_22430 22430 +#define STRING_22431 22431 +#define STRING_22432 22432 +#define STRING_22433 22433 +#define STRING_22434 22434 +#define STRING_22435 22435 +#define STRING_22436 22436 +#define STRING_22437 22437 +#define STRING_22438 22438 +#define STRING_22439 22439 +#define STRING_22440 22440 +#define STRING_22441 22441 +#define STRING_22442 22442 +#define STRING_22443 22443 +#define STRING_22444 22444 +#define STRING_22445 22445 +#define STRING_22446 22446 +#define STRING_22447 22447 +#define STRING_22448 22448 +#define STRING_22449 22449 +#define STRING_22450 22450 +#define STRING_22451 22451 +#define STRING_22452 22452 +#define STRING_22453 22453 +#define STRING_22454 22454 +#define STRING_22455 22455 +#define STRING_22456 22456 +#define STRING_22457 22457 +#define STRING_22458 22458 +#define STRING_22459 22459 +#define STRING_22460 22460 +#define STRING_22461 22461 +#define STRING_22462 22462 +#define STRING_22463 22463 +#define STRING_22464 22464 +#define STRING_22465 22465 +#define STRING_22466 22466 +#define STRING_22467 22467 +#define STRING_22468 22468 +#define STRING_22469 22469 +#define STRING_22470 22470 +#define STRING_22471 22471 +#define STRING_22472 22472 +#define STRING_22473 22473 +#define STRING_22474 22474 +#define STRING_22475 22475 +#define STRING_22476 22476 +#define STRING_22477 22477 +#define STRING_22478 22478 +#define STRING_22479 22479 +#define STRING_22480 22480 +#define STRING_22481 22481 +#define STRING_22482 22482 +#define STRING_22483 22483 +#define STRING_22484 22484 +#define STRING_22485 22485 +#define STRING_22486 22486 +#define STRING_22487 22487 +#define STRING_22488 22488 +#define STRING_22489 22489 +#define STRING_22490 22490 +#define STRING_22491 22491 +#define STRING_22492 22492 +#define STRING_22493 22493 +#define STRING_22494 22494 +#define STRING_22495 22495 +#define STRING_22496 22496 +#define STRING_22497 22497 +#define STRING_22498 22498 +#define STRING_22499 22499 +#define STRING_22500 22500 +#define STRING_22501 22501 +#define STRING_22502 22502 +#define STRING_22503 22503 +#define STRING_22504 22504 +#define STRING_22505 22505 +#define STRING_22506 22506 +#define STRING_22507 22507 +#define STRING_22508 22508 +#define STRING_22509 22509 +#define STRING_22510 22510 +#define STRING_22511 22511 +#define STRING_22512 22512 +#define STRING_22513 22513 +#define STRING_22514 22514 +#define STRING_22515 22515 +#define STRING_22516 22516 +#define STRING_22517 22517 +#define STRING_22518 22518 +#define STRING_22519 22519 +#define STRING_22520 22520 +#define STRING_22521 22521 +#define STRING_22522 22522 +#define STRING_22523 22523 +#define STRING_22524 22524 +#define STRING_22525 22525 +#define STRING_22526 22526 +#define STRING_22527 22527 +#define STRING_22528 22528 +#define STRING_22529 22529 +#define STRING_22530 22530 +#define STRING_22531 22531 +#define STRING_22532 22532 +#define STRING_22533 22533 +#define STRING_22534 22534 +#define STRING_22535 22535 +#define STRING_22536 22536 +#define STRING_22537 22537 +#define STRING_22538 22538 +#define STRING_22539 22539 +#define STRING_22540 22540 +#define STRING_22541 22541 +#define STRING_22542 22542 +#define STRING_22543 22543 +#define STRING_22544 22544 +#define STRING_22545 22545 +#define STRING_22546 22546 +#define STRING_22547 22547 +#define STRING_22548 22548 +#define STRING_22549 22549 +#define STRING_22550 22550 +#define STRING_22551 22551 +#define STRING_22552 22552 +#define STRING_22553 22553 +#define STRING_22554 22554 +#define STRING_22555 22555 +#define STRING_22556 22556 +#define STRING_22557 22557 +#define STRING_22558 22558 +#define STRING_22559 22559 +#define STRING_22560 22560 +#define STRING_22561 22561 +#define STRING_22562 22562 +#define STRING_22563 22563 +#define STRING_22564 22564 +#define STRING_22565 22565 +#define STRING_22566 22566 +#define STRING_22567 22567 +#define STRING_22568 22568 +#define STRING_22569 22569 +#define STRING_22570 22570 +#define STRING_22571 22571 +#define STRING_22572 22572 +#define STRING_22573 22573 +#define STRING_22574 22574 +#define STRING_22575 22575 +#define STRING_22576 22576 +#define STRING_22577 22577 +#define STRING_22578 22578 +#define STRING_22579 22579 +#define STRING_22580 22580 +#define STRING_22581 22581 +#define STRING_22582 22582 +#define STRING_22583 22583 +#define STRING_22584 22584 +#define STRING_22585 22585 +#define STRING_22586 22586 +#define STRING_22587 22587 +#define STRING_22588 22588 +#define STRING_22589 22589 +#define STRING_22590 22590 +#define STRING_22591 22591 +#define STRING_22592 22592 +#define STRING_22593 22593 +#define STRING_22594 22594 +#define STRING_22595 22595 +#define STRING_22596 22596 +#define STRING_22597 22597 +#define STRING_22598 22598 +#define STRING_22599 22599 +#define STRING_22600 22600 +#define STRING_22601 22601 +#define STRING_22602 22602 +#define STRING_22603 22603 +#define STRING_22604 22604 +#define STRING_22605 22605 +#define STRING_22606 22606 +#define STRING_22607 22607 +#define STRING_22608 22608 +#define STRING_22609 22609 +#define STRING_22610 22610 +#define STRING_22611 22611 +#define STRING_22612 22612 +#define STRING_22613 22613 +#define STRING_22614 22614 +#define STRING_22615 22615 +#define STRING_22616 22616 +#define STRING_22617 22617 +#define STRING_22618 22618 +#define STRING_22619 22619 +#define STRING_22620 22620 +#define STRING_22621 22621 +#define STRING_22622 22622 +#define STRING_22623 22623 +#define STRING_22624 22624 +#define STRING_22625 22625 +#define STRING_22626 22626 +#define STRING_22627 22627 +#define STRING_22628 22628 +#define STRING_22629 22629 +#define STRING_22630 22630 +#define STRING_22631 22631 +#define STRING_22632 22632 +#define STRING_22633 22633 +#define STRING_22634 22634 +#define STRING_22635 22635 +#define STRING_22636 22636 +#define STRING_22637 22637 +#define STRING_22638 22638 +#define STRING_22639 22639 +#define STRING_22640 22640 +#define STRING_22641 22641 +#define STRING_22642 22642 +#define STRING_22643 22643 +#define STRING_22644 22644 +#define STRING_22645 22645 +#define STRING_22646 22646 +#define STRING_22647 22647 +#define STRING_22648 22648 +#define STRING_22649 22649 +#define STRING_22650 22650 +#define STRING_22651 22651 +#define STRING_22652 22652 +#define STRING_22653 22653 +#define STRING_22654 22654 +#define STRING_22655 22655 +#define STRING_22656 22656 +#define STRING_22657 22657 +#define STRING_22658 22658 +#define STRING_22659 22659 +#define STRING_22660 22660 +#define STRING_22661 22661 +#define STRING_22662 22662 +#define STRING_22663 22663 +#define STRING_22664 22664 +#define STRING_22665 22665 +#define STRING_22666 22666 +#define STRING_22667 22667 +#define STRING_22668 22668 +#define STRING_22669 22669 +#define STRING_22670 22670 +#define STRING_22671 22671 +#define STRING_22672 22672 +#define STRING_22673 22673 +#define STRING_22674 22674 +#define STRING_22675 22675 +#define STRING_22676 22676 +#define STRING_22677 22677 +#define STRING_22678 22678 +#define STRING_22679 22679 +#define STRING_22680 22680 +#define STRING_22681 22681 +#define STRING_22682 22682 +#define STRING_22683 22683 +#define STRING_22684 22684 +#define STRING_22685 22685 +#define STRING_22686 22686 +#define STRING_22687 22687 +#define STRING_22688 22688 +#define STRING_22689 22689 +#define STRING_22690 22690 +#define STRING_22691 22691 +#define STRING_22692 22692 +#define STRING_22693 22693 +#define STRING_22694 22694 +#define STRING_22695 22695 +#define STRING_22696 22696 +#define STRING_22697 22697 +#define STRING_22698 22698 +#define STRING_22699 22699 +#define STRING_22700 22700 +#define STRING_22701 22701 +#define STRING_22702 22702 +#define STRING_22703 22703 +#define STRING_22704 22704 +#define STRING_22705 22705 +#define STRING_22706 22706 +#define STRING_22707 22707 +#define STRING_22708 22708 +#define STRING_22709 22709 +#define STRING_22710 22710 +#define STRING_22711 22711 +#define STRING_22712 22712 +#define STRING_22713 22713 +#define STRING_22714 22714 +#define STRING_22715 22715 +#define STRING_22716 22716 +#define STRING_22717 22717 +#define STRING_22718 22718 +#define STRING_22719 22719 +#define STRING_22720 22720 +#define STRING_22721 22721 +#define STRING_22722 22722 +#define STRING_22723 22723 +#define STRING_22724 22724 +#define STRING_22725 22725 +#define STRING_22726 22726 +#define STRING_22727 22727 +#define STRING_22728 22728 +#define STRING_22729 22729 +#define STRING_22730 22730 +#define STRING_22731 22731 +#define STRING_22732 22732 +#define STRING_22733 22733 +#define STRING_22734 22734 +#define STRING_22735 22735 +#define STRING_22736 22736 +#define STRING_22737 22737 +#define STRING_22738 22738 +#define STRING_22739 22739 +#define STRING_22740 22740 +#define STRING_22741 22741 +#define STRING_22742 22742 +#define STRING_22743 22743 +#define STRING_22744 22744 +#define STRING_22745 22745 +#define STRING_22746 22746 +#define STRING_22747 22747 +#define STRING_22748 22748 +#define STRING_22749 22749 +#define STRING_22750 22750 +#define STRING_22751 22751 +#define STRING_22752 22752 +#define STRING_22753 22753 +#define STRING_22754 22754 +#define STRING_22755 22755 +#define STRING_22756 22756 +#define STRING_22757 22757 +#define STRING_22758 22758 +#define STRING_22759 22759 +#define STRING_22760 22760 +#define STRING_22761 22761 +#define STRING_22762 22762 +#define STRING_22763 22763 +#define STRING_22764 22764 +#define STRING_22765 22765 +#define STRING_22766 22766 +#define STRING_22767 22767 +#define STRING_22768 22768 +#define STRING_22769 22769 +#define STRING_22770 22770 +#define STRING_22771 22771 +#define STRING_22772 22772 +#define STRING_22773 22773 +#define STRING_22774 22774 +#define STRING_22775 22775 +#define STRING_22776 22776 +#define STRING_22777 22777 +#define STRING_22778 22778 +#define STRING_22779 22779 +#define STRING_22780 22780 +#define STRING_22781 22781 +#define STRING_22782 22782 +#define STRING_22783 22783 +#define STRING_22784 22784 +#define STRING_22785 22785 +#define STRING_22786 22786 +#define STRING_22787 22787 +#define STRING_22788 22788 +#define STRING_22789 22789 +#define STRING_22790 22790 +#define STRING_22791 22791 +#define STRING_22792 22792 +#define STRING_22793 22793 +#define STRING_22794 22794 +#define STRING_22795 22795 +#define STRING_22796 22796 +#define STRING_22797 22797 +#define STRING_22798 22798 +#define STRING_22799 22799 +#define STRING_22800 22800 +#define STRING_22801 22801 +#define STRING_22802 22802 +#define STRING_22803 22803 +#define STRING_22804 22804 +#define STRING_22805 22805 +#define STRING_22806 22806 +#define STRING_22807 22807 +#define STRING_22808 22808 +#define STRING_22809 22809 +#define STRING_22810 22810 +#define STRING_22811 22811 +#define STRING_22812 22812 +#define STRING_22813 22813 +#define STRING_22814 22814 +#define STRING_22815 22815 +#define STRING_22816 22816 +#define STRING_22817 22817 +#define STRING_22818 22818 +#define STRING_22819 22819 +#define STRING_22820 22820 +#define STRING_22821 22821 +#define STRING_22822 22822 +#define STRING_22823 22823 +#define STRING_22824 22824 +#define STRING_22825 22825 +#define STRING_22826 22826 +#define STRING_22827 22827 +#define STRING_22828 22828 +#define STRING_22829 22829 +#define STRING_22830 22830 +#define STRING_22831 22831 +#define STRING_22832 22832 +#define STRING_22833 22833 +#define STRING_22834 22834 +#define STRING_22835 22835 +#define STRING_22836 22836 +#define STRING_22837 22837 +#define STRING_22838 22838 +#define STRING_22839 22839 +#define STRING_22840 22840 +#define STRING_22841 22841 +#define STRING_22842 22842 +#define STRING_22843 22843 +#define STRING_22844 22844 +#define STRING_22845 22845 +#define STRING_22846 22846 +#define STRING_22847 22847 +#define STRING_22848 22848 +#define STRING_22849 22849 +#define STRING_22850 22850 +#define STRING_22851 22851 +#define STRING_22852 22852 +#define STRING_22853 22853 +#define STRING_22854 22854 +#define STRING_22855 22855 +#define STRING_22856 22856 +#define STRING_22857 22857 +#define STRING_22858 22858 +#define STRING_22859 22859 +#define STRING_22860 22860 +#define STRING_22861 22861 +#define STRING_22862 22862 +#define STRING_22863 22863 +#define STRING_22864 22864 +#define STRING_22865 22865 +#define STRING_22866 22866 +#define STRING_22867 22867 +#define STRING_22868 22868 +#define STRING_22869 22869 +#define STRING_22870 22870 +#define STRING_22871 22871 +#define STRING_22872 22872 +#define STRING_22873 22873 +#define STRING_22874 22874 +#define STRING_22875 22875 +#define STRING_22876 22876 +#define STRING_22877 22877 +#define STRING_22878 22878 +#define STRING_22879 22879 +#define STRING_22880 22880 +#define STRING_22881 22881 +#define STRING_22882 22882 +#define STRING_22883 22883 +#define STRING_22884 22884 +#define STRING_22885 22885 +#define STRING_22886 22886 +#define STRING_22887 22887 +#define STRING_22888 22888 +#define STRING_22889 22889 +#define STRING_22890 22890 +#define STRING_22891 22891 +#define STRING_22892 22892 +#define STRING_22893 22893 +#define STRING_22894 22894 +#define STRING_22895 22895 +#define STRING_22896 22896 +#define STRING_22897 22897 +#define STRING_22898 22898 +#define STRING_22899 22899 +#define STRING_22900 22900 +#define STRING_22901 22901 +#define STRING_22902 22902 +#define STRING_22903 22903 +#define STRING_22904 22904 +#define STRING_22905 22905 +#define STRING_22906 22906 +#define STRING_22907 22907 +#define STRING_22908 22908 +#define STRING_22909 22909 +#define STRING_22910 22910 +#define STRING_22911 22911 +#define STRING_22912 22912 +#define STRING_CHORD_END 22913 + +#define STRING_INSTRUMENT1 1 +#define STRING_INSTRUMENT2 2 +#define STRING_INSTRUMENT3 3 +#define STRING_INSTRUMENT4 4 +#define STRING_INSTRUMENT5 5 +#define STRING_INSTRUMENT6 6 +#define STRING_INSTRUMENT7 7 +#define STRING_INSTRUMENT8 8 +#define STRING_INSTRUMENT9 9 +#define STRING_INSTRUMENT10 10 +#define STRING_INSTRUMENT11 11 +#define STRING_INSTRUMENT12 12 +#define STRING_INSTRUMENT13 13 +#define STRING_INSTRUMENT14 14 +#define STRING_INSTRUMENT15 15 +#define STRING_INSTRUMENT16 16 +#define STRING_INSTRUMENT17 17 +#define STRING_INSTRUMENT18 18 +#define STRING_INSTRUMENT19 19 +#define STRING_INSTRUMENT20 20 +#define STRING_INSTRUMENT21 21 +#define STRING_INSTRUMENT22 22 +#define STRING_INSTRUMENT23 23 +#define STRING_INSTRUMENT24 24 +#define STRING_INSTRUMENT25 25 +#define STRING_INSTRUMENT26 26 +#define STRING_INSTRUMENT27 27 +#define STRING_INSTRUMENT28 28 +#define STRING_INSTRUMENT29 29 +#define STRING_INSTRUMENT30 30 +#define STRING_INSTRUMENT31 31 +#define STRING_INSTRUMENT32 32 +#define STRING_INSTRUMENT33 33 +#define STRING_INSTRUMENT34 34 +#define STRING_INSTRUMENT35 35 +#define STRING_INSTRUMENT36 36 +#define STRING_INSTRUMENT37 37 +#define STRING_INSTRUMENT38 38 +#define STRING_INSTRUMENT39 39 +#define STRING_INSTRUMENT40 40 +#define STRING_INSTRUMENT41 41 +#define STRING_INSTRUMENT42 42 +#define STRING_INSTRUMENT43 43 +#define STRING_INSTRUMENT44 44 +#define STRING_INSTRUMENT45 45 +#define STRING_INSTRUMENT46 46 +#define STRING_INSTRUMENT47 47 +#define STRING_INSTRUMENT48 48 +#define STRING_INSTRUMENT49 49 +#define STRING_INSTRUMENT50 50 +#define STRING_INSTRUMENT51 51 +#define STRING_INSTRUMENT52 52 +#define STRING_INSTRUMENT53 53 +#define STRING_INSTRUMENT54 54 +#define STRING_INSTRUMENT55 55 +#define STRING_INSTRUMENT56 56 +#define STRING_INSTRUMENT57 57 +#define STRING_INSTRUMENT58 58 +#define STRING_INSTRUMENT59 59 +#define STRING_INSTRUMENT60 60 +#define STRING_INSTRUMENT61 61 +#define STRING_INSTRUMENT62 62 +#define STRING_INSTRUMENT63 63 +#define STRING_INSTRUMENT64 64 +#define STRING_INSTRUMENT65 65 +#define STRING_INSTRUMENT66 66 +#define STRING_INSTRUMENT67 67 +#define STRING_INSTRUMENT68 68 +#define STRING_INSTRUMENT69 69 +#define STRING_INSTRUMENT70 70 +#define STRING_INSTRUMENT71 71 +#define STRING_INSTRUMENT72 72 +#define STRING_INSTRUMENT73 73 +#define STRING_INSTRUMENT74 74 +#define STRING_INSTRUMENT75 75 +#define STRING_INSTRUMENT76 76 +#define STRING_INSTRUMENT77 77 +#define STRING_INSTRUMENT78 78 +#define STRING_INSTRUMENT79 79 +#define STRING_INSTRUMENT80 80 +#define STRING_INSTRUMENT81 81 +#define STRING_INSTRUMENT82 82 +#define STRING_INSTRUMENT83 83 +#define STRING_INSTRUMENT84 84 +#define STRING_INSTRUMENT85 85 +#define STRING_INSTRUMENT86 86 +#define STRING_INSTRUMENT87 87 +#define STRING_INSTRUMENT88 88 +#define STRING_INSTRUMENT89 89 +#define STRING_INSTRUMENT90 90 +#define STRING_INSTRUMENT91 91 +#define STRING_INSTRUMENT92 92 +#define STRING_INSTRUMENT93 93 +#define STRING_INSTRUMENT94 94 +#define STRING_INSTRUMENT95 95 +#define STRING_INSTRUMENT96 96 +#define STRING_INSTRUMENT97 97 +#define STRING_INSTRUMENT98 98 +#define STRING_INSTRUMENT99 99 +#define STRING_INSTRUMENT100 100 +#define STRING_INSTRUMENT101 101 +#define STRING_INSTRUMENT102 102 +#define STRING_INSTRUMENT103 103 +#define STRING_INSTRUMENT104 104 +#define STRING_INSTRUMENT105 105 +#define STRING_INSTRUMENT106 106 +#define STRING_INSTRUMENT107 107 +#define STRING_INSTRUMENT108 108 +#define STRING_INSTRUMENT109 109 +#define STRING_INSTRUMENT110 110 +#define STRING_INSTRUMENT111 111 +#define STRING_INSTRUMENT112 112 +#define STRING_INSTRUMENT113 113 +#define STRING_INSTRUMENT114 114 +#define STRING_INSTRUMENT115 115 +#define STRING_INSTRUMENT116 116 +#define STRING_INSTRUMENT117 117 +#define STRING_INSTRUMENT118 118 +#define STRING_INSTRUMENT119 119 +#define STRING_INSTRUMENT120 120 +#define STRING_INSTRUMENT121 121 +#define STRING_INSTRUMENT122 122 +#define STRING_INSTRUMENT123 123 +#define STRING_INSTRUMENT124 124 +#define STRING_INSTRUMENT125 125 +#define STRING_INSTRUMENT126 126 +#define STRING_INSTRUMENT127 127 +#define STRING_INSTRUMENT128 128 +#define STRING_INSTRUMENT129 129 +#define STRING_INSTRUMENT130 130 +#define STRING_INSTRUMENT131 131 +#define STRING_INSTRUMENT132 132 +#define STRING_INSTRUMENT133 133 +#define STRING_INSTRUMENT134 134 +#define STRING_INSTRUMENT135 135 +#define STRING_INSTRUMENT136 136 +#define STRING_INSTRUMENT137 137 +#define STRING_INSTRUMENT138 138 +#define STRING_INSTRUMENT139 139 +#define STRING_INSTRUMENT140 140 +#define STRING_INSTRUMENT141 141 +#define STRING_INSTRUMENT142 142 +#define STRING_INSTRUMENT143 143 +#define STRING_INSTRUMENT144 144 +#define STRING_INSTRUMENT145 145 +#define STRING_INSTRUMENT146 146 +#define STRING_INSTRUMENT147 147 +#define STRING_INSTRUMENT148 148 +#define STRING_INSTRUMENT149 149 +#define STRING_INSTRUMENT150 150 +#define STRING_INSTRUMENT151 151 +#define STRING_INSTRUMENT152 152 +#define STRING_INSTRUMENT153 153 +#define STRING_INSTRUMENT154 154 +#define STRING_INSTRUMENT155 155 +#define STRING_INSTRUMENT156 156 +#define STRING_INSTRUMENT157 157 +#define STRING_INSTRUMENT158 158 +#define STRING_INSTRUMENT159 159 +#define STRING_INSTRUMENT160 160 +#define STRING_INSTRUMENT161 161 +#define STRING_INSTRUMENT162 162 +#define STRING_INSTRUMENT163 163 +#define STRING_INSTRUMENT164 164 +#define STRING_INSTRUMENT165 165 +#define STRING_INSTRUMENT166 166 +#define STRING_INSTRUMENT167 167 +#define STRING_INSTRUMENT168 168 +#define STRING_INSTRUMENT169 169 +#define STRING_INSTRUMENT170 170 +#define STRING_INSTRUMENT171 171 +#define STRING_INSTRUMENT172 172 +#define STRING_INSTRUMENT173 173 +#define STRING_INSTRUMENT174 174 +#define STRING_INSTRUMENT175 175 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#endif + diff --git a/guitar/guitar.hpp b/guitar/guitar.hpp new file mode 100644 index 0000000..6fe0d82 --- /dev/null +++ b/guitar/guitar.hpp @@ -0,0 +1,6 @@ +#ifndef _GUITAR_GUITAR_HPP_ +#define _GUITAR_GUITAR_HPP_ +#ifndef _GUITAR_GUITAR_H_ +#include +#endif +#endif diff --git a/guitar/guitar.ncb b/guitar/guitar.ncb new file mode 100644 index 0000000..610275b Binary files /dev/null and b/guitar/guitar.ncb differ diff --git a/guitar/guitar.opt b/guitar/guitar.opt new file mode 100644 index 0000000..840535e Binary files /dev/null and b/guitar/guitar.opt differ diff --git a/guitar/guitar.plg b/guitar/guitar.plg new file mode 100644 index 0000000..71e9190 --- /dev/null +++ b/guitar/guitar.plg @@ -0,0 +1,83 @@ + + +
+

Build Log

+

+--------------------Configuration: guitar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP6F.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/guitar.pch" /YX"windows.hpp" /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"E:\work\guitar\ScaleDlg.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP6F.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP70.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib comctl32.lib version.lib /nologo /subsystem:windows /incremental:yes /pdb:"msvcobj/TabMaster.pdb" /debug /machine:I386 /out:"msvcobj/TabMaster.exe" /pdbtype:sept +.\msvcobj\BrowserHelper.obj +.\msvcobj\ChordBuilderDialog.obj +.\msvcobj\ChordDlg.obj +.\msvcobj\ChordMapper.obj +.\msvcobj\Fingering.obj +.\msvcobj\Fretboard.obj +.\msvcobj\FretDlg.obj +.\msvcobj\FretViewWnd.obj +.\msvcobj\GlobalDefs.obj +.\msvcobj\GUIFretboard.obj +.\msvcobj\license.obj +.\msvcobj\LicenseDialog.obj +.\msvcobj\LineParser.obj +.\msvcobj\main.obj +.\msvcobj\mainfrm.obj +.\msvcobj\MIDIDialog.obj +.\msvcobj\MIDIHelper.obj +.\msvcobj\notepath.obj +.\msvcobj\NoteType.obj +.\msvcobj\RangeDlg.obj +.\msvcobj\RangeEditDlg.obj +.\msvcobj\registration.obj +.\msvcobj\registry.obj +.\msvcobj\requirements.obj +.\msvcobj\ScaleDlg.obj +.\msvcobj\ScrollInfo.obj +.\msvcobj\settingsdlg.obj +.\msvcobj\splash.obj +.\msvcobj\tabdlg.obj +.\msvcobj\TabEntry.obj +.\msvcobj\tablature.obj +.\msvcobj\TabLines.obj +.\msvcobj\tabpage.obj +.\msvcobj\TabView.obj +.\msvcobj\TabWriter.obj +.\msvcobj\Timing.obj +.\msvcobj\Tuning.obj +.\msvcobj\uutool.obj +.\msvcobj\viewwnd.obj +.\msvcobj\guitar.res +\work\exe\mscommon.lib +\work\MIDISEQ\msvcobj\midisq.lib +\work\exe\statbar.lib +\work\exe\msthread.lib +\work\exe\msbsp.lib +\work\exe\toolbar.lib +\work\exe\printman.lib +\work\exe\msdialog.lib +\work\exe\jpgimg.lib +\work\exe\music.lib +\work\exe\msengine.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP70.tmp" +

Output Window

+Compiling... +ScaleDlg.cpp +Linking... + Creating library msvcobj/TabMaster.lib and object msvcobj/TabMaster.exp + + + +

Results

+TabMaster.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/guitar/guitar.rc b/guitar/guitar.rc new file mode 100644 index 0000000..ac0f520 --- /dev/null +++ b/guitar/guitar.rc @@ -0,0 +1,1836 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "guitar\guitar.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +GRAPHDIALOG DIALOG DISCARDABLE 6, 15, 340, 205 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Graph" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Dismiss",IDCANCEL,171,180,50,14 + GROUPBOX "",-1,5,4,326,166 + DEFPUSHBUTTON "Graph",IDOK,119,180,50,14 +END + +MIDIDIALOG DIALOGEX 0, 0, 142, 225 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "MIDI Import" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Ok",IDOK,85,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,85,16,50,14 + CONTROL "Track 1",MIDI_TRACK1,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,18,41,10 + CONTROL "Track 2",MIDI_TRACK2,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,30,41,10 + CONTROL "Track 3",MIDI_TRACK3,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,42,41,10 + CONTROL "Track 4",MIDI_TRACK4,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,54,41,10 + CONTROL "Track 5",MIDI_TRACK5,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,66,41,10 + CONTROL "Track 6",MIDI_TRACK6,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,78,41,10 + CONTROL "Track 7",MIDI_TRACK7,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,90,41,10 + CONTROL "Track 8",MIDI_TRACK8,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,102,41,10 + CONTROL "Track 9",MIDI_TRACK9,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,114,41,10 + CONTROL "Track 10",MIDI_TRACK10,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,126,41,10 + CONTROL "Track 11",MIDI_TRACK11,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,138,41,10 + CONTROL "Track 12",MIDI_TRACK12,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,150,41,10 + CONTROL "Track 13",MIDI_TRACK13,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,162,41,10 + CONTROL "Track 14",MIDI_TRACK14,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,174,41,10 + CONTROL "Track 15",MIDI_TRACK15,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,186,41,10 + CONTROL "Track 16",MIDI_TRACK16,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,198,41,10 + LTEXT "",MIDI_EVENTS_TRACK1,49,18,22,10 + LTEXT "",MIDI_EVENTS_TRACK2,49,30,22,8 + LTEXT "",MIDI_EVENTS_TRACK3,49,42,22,8 + LTEXT "",MIDI_EVENTS_TRACK4,49,54,22,8 + LTEXT "",MIDI_EVENTS_TRACK5,49,66,22,8 + LTEXT "",MIDI_EVENTS_TRACK6,49,78,22,8 + LTEXT "",MIDI_EVENTS_TRACK7,49,90,22,8 + LTEXT "",MIDI_EVENTS_TRACK8,49,102,22,8 + LTEXT "",MIDI_EVENTS_TRACK9,49,114,22,8 + LTEXT "",MIDI_EVENTS_TRACK10,49,126,22,8 + LTEXT "",MIDI_EVENTS_TRACK11,49,138,22,8 + LTEXT "",MIDI_EVENTS_TRACK12,49,150,22,8 + LTEXT "",MIDI_EVENTS_TRACK13,49,162,22,8 + LTEXT "",MIDI_EVENTS_TRACK14,49,174,22,8 + LTEXT "",MIDI_EVENTS_TRACK15,49,186,22,8 + LTEXT "",MIDI_EVENTS_TRACK16,49,198,22,8 + LTEXT "Events",IDC_STATIC,51,4,23,8 +END + +TABDIALOG DIALOGEX 0, 0, 193, 164 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Tab Entry" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT TABENTRY_COMMENTS,7,143,179,14,ES_AUTOHSCROLL, + WS_EX_CLIENTEDGE + COMBOBOX TABENTRY_NOTETYPE,34,14,45,49,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + LISTBOX TABENTRY_LIST,7,71,179,56,NOT LBS_NOTIFY | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_USETABSTOPS | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,136,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,136,22,50,14 + CONTROL "Apply to remainder of entries.",TABENTRY_REMAINDER, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,42,107,10 + LTEXT "Value:",-1,9,17,21,8 + LTEXT "String",-1,15,57,19,8 + LTEXT "Fret",-1,53,57,13,8 + LTEXT "Note",-1,98,57,16,8 + LTEXT "Comments",-1,71,132,36,8 + CONTROL "Separator",TABENTRY_SEPARATOR,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,13,30,47,10 +END + +FRETDIALOG DIALOGEX 0, 0, 155, 73 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Fret Entry" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT FRETENTRY_FRET,38,18,53,14,ES_AUTOHSCROLL + EDITTEXT FRETENTRY_STRING,38,1,53,14,ES_AUTOHSCROLL + COMBOBOX FRETENTRY_ACTION,38,33,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX FRETENTRY_DURATION,38,48,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,104,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,104,16,50,14 + LTEXT "Fret:",-1,4,21,15,8 + LTEXT "String:",-1,4,6,21,8 + LTEXT "Action:",-1,4,35,23,8 + LTEXT "Duration:",-1,1,50,30,8 +END + +CHORDDIALOG DIALOGEX 0, 0, 193, 127 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Dictionary" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + LISTBOX CHORDS_LIST,0,19,184,89,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + LTEXT "",CHORDS_COUNT,3,112,102,8 +END + +CHORDBUILDERDIALOG DIALOGEX 0, 0, 201, 65 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Builder" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT ENTERCHORD_EDIT,9,8,124,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,146,4,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,146,20,50,14 + PUSHBUTTON "Examples",ENTERCHORD_EXAMPLES,146,37,50,14 +END + +RANGEDIALOG DIALOGEX 0, 0, 206, 105 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Range Edit" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,1,1,50,14 + LISTBOX RANGE_LIST,10,36,184,57,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Cancel",IDCANCEL,51,1,50,14 + PUSHBUTTON "Insert...",RANGE_INSERT,101,1,50,14 + PUSHBUTTON "Delete",RANGE_DELETE,151,1,50,14 + CTEXT "Name",-1,15,22,64,8 + LTEXT "Start Pos.",-1,92,22,32,8 + LTEXT "End Pos.",-1,149,22,30,8 +END + +RANGEEDITDIALOG DIALOGEX 0, 0, 190, 111 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Edit Item" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT RANGEEDIT_NAME,33,42,150,14,ES_AUTOHSCROLL + EDITTEXT RANGEEDIT_BEGIN,33,61,40,14,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT RANGEEDIT_END,33,80,40,14,ES_AUTOHSCROLL | ES_NUMBER + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,134,17,50,14 + LTEXT "Name:",-1,5,43,22,8 + LTEXT "Start:",-1,5,64,18,8 + LTEXT "End:",-1,5,85,16,8 +END + +SETTINGSDIALOG DIALOGEX 0, 0, 169, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Apply",IDOK,5,2,50,14 + PUSHBUTTON "&Done",IDCANCEL,107,2,50,14 + CONTROL "Display (Bends,Pulls,Slides,Hammers)", + SETTINGS_SHOWACTION,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,9,29,133,10 + LTEXT "Microseconds Per 1/4 note:",IDC_STATIC,11,113,89,8 + EDITTEXT SETTINGS_MICROSECSPERQTRNOTE,104,110,40,14, + ES_AUTOHSCROLL | ES_NUMBER + PUSHBUTTON "Defaults",SETTINGS_DEFAULTS,56,2,50,14 + GROUPBOX "MIDI",IDC_STATIC,3,58,161,83 + GROUPBOX "Global",IDC_STATIC,1,18,161,37 + CONTROL "Display note letters on fretboard.",SETTINGS_SHOWNOTES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,42,117,10 + LTEXT "Output",IDC_STATIC,9,71,23,8 + COMBOBOX SETTINGS_MIDIOUT,37,67,121,61,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE + COMBOBOX SETTINGS_INSTRUMENT,12,95,121,63,CBS_DROPDOWNLIST | + CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "Instrument",IDC_STATIC,13,85,105,8 +END + +SCALEDIALOG DIALOGEX 0, 0, 217, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW | WS_EX_STATICEDGE +CAPTION "Show Scale" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,163,4,50,14 + LISTBOX SCALEDLG_LIST,3,58,211,86,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Ca&ncel",IDCANCEL,163,19,50,14 + LTEXT "Root:",-1,5,30,18,8 + EDITTEXT SCALEDLG_ROOT,25,27,28,14,ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "Spin1",SCALEDLG_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_ARROWKEYS,54,27,10,14 + CONTROL "Mute",SCALEDLG_MUTE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,165,36,48,10 +END + +LICENSEDIALOG DIALOGEX 0, 0, 223, 134 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "License Helper" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT LICENSE_DIALOG_LICENSE,2,81,215,42,ES_MULTILINE | + ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,154,2,65,14 + PUSHBUTTON "Cancel",IDCANCEL,154,17,65,14 + LTEXT " You can request a new license by clicking ""Request License"".", + IDC_STATIC,5,67,214,8 + LTEXT "Please paste your license key into the text box below.", + IDC_STATIC,5,53,216,8 + PUSHBUTTON "Request License",LICENSE_DIALOG_REQUEST_LICENSE,154,32, + 65,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +FRETBOARD BITMAP MOVEABLE PURE "FRETBOARD.BMP" +GUITAR BITMAP MOVEABLE PURE "GUITAR.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +HARROW CURSOR DISCARDABLE "HARROW.CUR" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP_ICON ICON DISCARDABLE "icon1.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +FRETMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + END + POPUP "Fret&board" + BEGIN + MENUITEM "&Clear", MENU_FRETBOARD_CLEAR + MENUITEM "Show All &Positions", MENU_FRETBOARD_SHOWALLPOSITIONS + + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Close Project", MENU_FILE_CLOSE + MENUITEM "&Import Tablature\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Save\tCtrl+S", MENU_FILE_SAVE + MENUITEM "Save &As...", MENU_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + MENUITEM SEPARATOR + MENUITEM "&Ranges...", MENU_EDIT_RANGES + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Tablature" + BEGIN + MENUITEM "&Play", MENU_TABLATURE_PLAY + MENUITEM "Play (&Repeated)", MENU_TABLATURE_PLAYREPEATED + MENUITEM "Play R&ange...", MENU_TABLATURE_PLAYRANGE + , GRAYED + MENUITEM "Play Rang&e (Repeated)...", MENU_TABLATURE_PLAYRANGE_REPEATED + , GRAYED + MENUITEM "&Stop", MENU_TABLATURE_STOP, GRAYED + END + POPUP "&Options" + BEGIN + MENUITEM "&Increase Tempo", MENU_OPTIONS_INCREASETEMPO + MENUITEM "&Decrease Tempo", MENU_OPTIONS_DECREASETEMPO + MENUITEM SEPARATOR + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""guitar\\guitar.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "MIDIDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 141 + END + + "TABDIALOG", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 186 + TOPMARGIN, 7 + BOTTOMMARGIN, 157 + END + + "FRETDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 154 + BOTTOMMARGIN, 69 + END + + "CHORDDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 184 + TOPMARGIN, 2 + BOTTOMMARGIN, 126 + END + + "SETTINGSDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 164 + BOTTOMMARGIN, 140 + END + + "SCALEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 216 + BOTTOMMARGIN, 146 + END + + "LICENSEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 221 + BOTTOMMARGIN, 131 + END +END +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Simplified Tablature editing.\0" + VALUE "CompanyName", "Diversified Software Solutions.\0" + VALUE "FileDescription", "TabMaster\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "TabMaster\0" + VALUE "LegalCopyright", "Copyright © 2002\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "TabMaster.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "TabMaster\0" + VALUE "ProductVersion", "2, 0, 0, r\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +TABACCELERATORS ACCELERATORS DISCARDABLE +BEGIN + "X", MENU_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT + "C", MENU_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + "V", MENU_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT + "N", MENU_FILE_NEW, VIRTKEY, CONTROL, NOINVERT + "O", MENU_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "I", MENU_FILE_IMPORT, VIRTKEY, CONTROL, NOINVERT + "P", MENU_FILE_PRINT, VIRTKEY, CONTROL, NOINVERT + VK_F5, IDM_CASCADE, VIRTKEY, NOINVERT + VK_F4, IDM_TILE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_NOTITLE "None" + STRING_EDITHINT "Insert tablature using Insert key." + STRING_PRJEXTENSION ".prj" + STRING_PRJALLEXTENSION "*.prj" + STRING_TABEXTENSION ".tab" + STRING_BROWSERKEY "Software\\Classes\\htmlfile\\shell\\opennew\\command" + STRING_BROWSERKEYALT "SOFTWARE\\Classes\\http\\shell\\open\\command" + STRING_BROWSERCOMMAND "command" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_HOST "http://www.diversified-software.com" + STRING_HELPPAGE "/support/support.html" + STRING_MIDIEXTENSION ".mid" + STRING_PURCHASE_URL "http://wwww.diversified-software.com/order/ordertabmaster.html" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_TABVIEWWINDOWCLASSNAME "TABVIEWCLASS" + STRING_FRETVIEWWINDOWCLASSNAME "FRETVIEWCLASS" + STRING_REGISTRYKEYNAME "Software\\Diversified\\TabMaster" + STRING_HISTORYKEYNAME "Software\\Diversified\\TabMaster\\History" + STRING_HISTORYKEYSHORTNAME "History" + STRING_SETTINGSKEYNAME "Software\\Diversified\\TabMaster\\Settings" + STRING_SETTINGSINSTRUMENT "Instrument" + STRING_SETTINGSACTION "Action" + STRING_SETTINGSNOTELETTERS "DisplayNoteLetters" + STRING_SETTINGSMICROSECONDSPERQUARTERNOTE "MicrosecondsPerQuarterNote" + STRING_REGISTRATIONKEYNAME + "Software\\Diversified\\TabMaster\\Registration" + STRING_SETTINGSLICENSE "License" + STRING_SETTINGSMIDIOUTPUT "MIDIOutput" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_22000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_22001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_22002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_22003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_22004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_22005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_22006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_22007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " + STRING_22008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_22009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_22010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_22011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_22012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_22013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_22014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_22015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_22016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_22017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_22018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_22019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_22020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_22021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_22022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_22023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " + STRING_22024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_22025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_22030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_22032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_22033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_22034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_22035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_22036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_22037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_22038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_22039 "A7sus4 [x 0 2 0 3 3] (D E G A) " + STRING_22040 "A7#9(#11) [5 x 6 7 5 7] (A Ab D E B) " + STRING_22041 "A7b9(#11) [5 x 8 8 8 x] (A Bb Eb G) " + STRING_22042 "A7#9 [x 12 11 12 13 12] (A Dd G C E) " + STRING_22043 "A13#9 [5 x 5 6 7 8] (A G Db Gb C) " + STRING_22044 "A13b9 [5 x 5 6 7 6] (A G Db Gb Cb) " + STRING_22045 "A13b9 [5 x 5 3 2 2] (A G Bb Db Gb) " + STRING_22046 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_22047 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_22048 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_22049 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_22050 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_22051 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22052 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22053 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_22054 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_22055 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_22056 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22057 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_22058 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22059 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22060 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_22061 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22062 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22063 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22064 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22065 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_22066 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_22067 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_22068 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_22069 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_22070 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_22071 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_22072 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_22073 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22074 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22075 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22076 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_22077 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " + STRING_22078 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22079 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22080 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_22081 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22082 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22083 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_22084 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22085 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_22086 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_22087 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_22088 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_22089 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_22090 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22091 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22092 "Am [x 0 2 2 1 0] (C E A) " + STRING_22093 "Am [x 0 7 5 5 5] (C E A) " + STRING_22094 "Am [x 3 2 2 1 0] (C E A) " + STRING_22095 "Am [8 12 x x x 0] (C E A) " + STRING_22096 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_22097 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_22098 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_22099 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_22100 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_22101 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_22102 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_22103 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_22104 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_22105 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_22106 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_22107 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_22108 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_22109 "Am/G [x 0 5 5 5 8] (C E G A) " + STRING_22110 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_22111 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_22112 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_22113 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_22114 "Am6 [5 x 4 5 5 5] (A Gb C E A)" + STRING_22115 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_22116 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_22117 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_22118 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_22119 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_22120 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_22121 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_22122 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_22123 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_22124 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_22125 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_22126 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " + STRING_22127 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_22128 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_22129 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_22130 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_22131 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_22132 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22133 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_22134 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_22135 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_22136 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_22137 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22138 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22139 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22140 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_22141 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_22142 "Asus2/G [x 0 2 0 0 0] (E G A B) " + STRING_22143 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_22144 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22145 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22146 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22147 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_22148 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22149 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_22150 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_22151 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22152 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_22153 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_22154 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_22155 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_22156 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_22157 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_22158 "Asus4/G [x 0 2 2 3 3] (D E G A) " + STRING_22159 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_22160 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22161 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22162 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22163 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22164 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22165 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22166 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22167 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_22168 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_22169 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_22170 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22171 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22172 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22173 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22174 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22175 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22176 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_22177 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_22178 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_22179 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22180 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22181 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22182 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22183 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22184 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_22185 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_22186 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_22187 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_22188 "B7#9(#11) [7 x 8 9 7 9] (B Bb E Gb Dd) " + STRING_22189 "B7b9(#11) [7 x 10 10 10 x] (B C F A) " + STRING_22190 "B7#9 [x 14 13 14 15 14] (B Eb A D Gb) " + STRING_22191 "B13#9 [7 x 7 8 9 10] (B A Eb Ab D) " + STRING_22192 "B13b9 [7 x 7 8 9 8] (A G Db Gb Cb) " + STRING_22193 "B13b9 [7 x 7 5 4 4] (B A C Eb Ab) " + STRING_22194 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22195 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22196 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " + STRING_22197 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_22198 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_22199 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22200 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_22201 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_22202 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22203 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_22204 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_22205 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_22206 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_22207 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_22208 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_22209 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_22210 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_22211 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_22212 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22213 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22214 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_22215 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22216 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_22217 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22218 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_22219 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_22220 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_22221 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_22222 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22223 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22224 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22225 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22226 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_22227 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22228 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " + STRING_22229 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22230 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22231 "Bbm6 [6 x 5 6 6 6] (Bb G Db F Bb) " + STRING_22232 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_22233 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_22234 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_22235 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22236 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22237 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_22238 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_22239 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_22240 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_22241 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_22242 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_22243 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_22244 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_22245 "Bdim/G [x x 0 0 0 1] (D F G B) " + STRING_22246 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22247 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22248 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22249 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_22250 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_22251 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_22252 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_22253 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_22254 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_22255 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_22256 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_22257 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_22258 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_22259 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_22260 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_22261 "Bm7 [x 0 4 4 3 2] (D Gb A B) " + STRING_22262 "Bm6 [7 x 6 7 7 7] (B Ab D Eb B) " + STRING_22263 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_22264 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_22265 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_22266 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_22267 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_22268 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_22269 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_22270 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22271 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22272 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_22273 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_22274 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_22275 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_22276 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_22277 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22278 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22279 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22280 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22281 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22282 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22283 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22284 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22285 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22286 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22287 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22288 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22289 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22290 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_22291 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_22292 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_22293 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_22294 "C or Cmaj [x 3 2 0 1 0] (C E G) " + STRING_22295 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_22296 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_22297 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_22298 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_22299 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_22300 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_22301 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_22302 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_22303 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_22304 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_22305 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_22306 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_22307 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_22308 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_22309 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_22310 "C/D [x x 0 0 1 0] (C D E G) " + STRING_22311 "C/D [x x 0 5 5 3] (C D E G) " + STRING_22312 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_22313 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_22314 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_22315 "C/F [x x 3 0 1 0] (C E F G) " + STRING_22316 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_22317 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_22318 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_22319 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_22320 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_22321 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_22322 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_22323 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_22324 "C7#9(#11) [8 x 10 11 8 11] (C C Gb G Eb) " + STRING_22325 "C7b9(#11) [8 x 11 11 11] (C Db Gb Bb) " + STRING_22326 "C7#9 [x 3 2 3 4 3] (C E Bb Eb G) " + STRING_22327 "C13#9 [8 x 8 9 10 11] (C Bb E A Eb) " + STRING_22328 "C13b9 [8 x 8 9 10 9] (C Bb A A D) " + STRING_22329 "C13b9 [8 x 8 6 5 5] (C Bb Db E A) " + STRING_22330 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22331 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_22332 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " + STRING_22333 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22334 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_22335 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_22336 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_22337 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_22338 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22339 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_22340 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_22341 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22342 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22343 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_22344 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22345 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_22346 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_22347 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_22348 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22349 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_22350 "Cm6 [8 x 7 8 8 8] (C A Eb G C) " + STRING_22351 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22352 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_22353 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_22354 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_22355 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_22356 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_22357 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_22358 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_22359 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_22360 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_22361 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_22362 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_22363 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_22364 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_22365 "Csus2/B [x 3 0 0 0 3] (C D G B) " + STRING_22366 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_22367 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_22368 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_22369 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_22370 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_22371 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_22372 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_22373 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_22374 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_22375 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_22376 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_22377 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_22378 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22379 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_22380 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_22381 "Csus4/E [x x 3 0 1 0] (C E F G) " + STRING_22382 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_22383 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_22384 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_22385 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_22386 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_22387 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_22388 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_22389 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_22390 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_22391 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_22392 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_22393 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_22394 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_22395 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_22396 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_22397 "D/C [x 3 x 2 3 2] (C D Gb A) " + STRING_22398 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_22399 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_22400 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_22401 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_22402 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_22403 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_22404 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_22405 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_22406 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_22407 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_22408 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_22409 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_22410 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_22411 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_22412 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_22413 "D6 [x 2 0 2 0 2] (D Gb A B) " + STRING_22414 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_22415 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_22416 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_22417 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22418 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22419 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_22420 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_22421 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_22422 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_22423 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_22424 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_22425 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_22426 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_22427 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_22428 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22429 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " + STRING_22430 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_22431 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_22432 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_22433 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_22434 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_22435 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_22436 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22437 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_22438 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_22439 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_22440 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_22441 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_22442 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_22443 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_22444 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_22445 "Db/B [x 4 3 4 0 4] (Db F Ab B) " + STRING_22446 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22447 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_22448 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_22449 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_22450 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22451 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_22452 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22453 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22454 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_22455 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_22456 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_22457 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_22458 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_22459 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_22460 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_22461 "Dbdim/D [x x 0 0 2 0] (Db D E G) " + STRING_22462 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22463 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22464 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_22465 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_22466 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_22467 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_22468 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_22469 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_22470 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22471 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22472 "Dbm6 [9 x 8 9 9 9] (Db Bb E Ab Bb) " + STRING_22473 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_22474 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_22475 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_22476 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_22477 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22478 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " + STRING_22479 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_22480 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_22481 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22482 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_22483 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_22484 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22485 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22486 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22487 "Dm [x 0 0 2 3 1] (D F A) " + STRING_22488 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_22489 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_22490 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_22491 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_22492 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_22493 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_22494 "Dm/C [x x 0 5 6 5] (C D F A) " + STRING_22495 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_22496 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_22497 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_22498 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_22499 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_22500 "Dm6 [10 x 9 10 10 10] (D B F A D) " + STRING_22501 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_22502 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_22503 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_22504 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_22505 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_22506 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_22507 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_22508 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_22509 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_22510 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_22511 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " + STRING_22512 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_22513 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_22514 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_22515 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_22516 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_22517 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_22518 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22519 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_22520 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_22521 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22522 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_22523 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_22524 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22525 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_22526 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_22527 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " + STRING_22528 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_22529 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_22530 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_22531 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_22532 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_22533 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_22534 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22535 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22536 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22537 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22538 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22539 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22540 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22541 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_22542 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_22543 "Dsus4/C [x 5 7 5 8 3] (C D G A)" + STRING_22544 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_22545 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_22546 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_22547 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_22548 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_22549 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_22550 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22551 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22552 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_22553 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_22554 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_22555 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_22556 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_22557 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_22558 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_22559 "E/D [x x 0 1 0 0] (D E Ab B) " + STRING_22560 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_22561 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_22562 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22563 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22564 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_22565 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22566 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22567 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22568 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_22569 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_22570 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_22571 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22572 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22573 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_22574 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_22575 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " + STRING_22576 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_22577 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_22578 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_22579 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_22580 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_22581 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_22582 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22583 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22584 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22585 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_22586 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_22587 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_22588 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_22589 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_22590 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22591 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22592 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22593 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22594 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22595 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_22596 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_22597 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22598 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22599 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22600 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22601 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22602 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22603 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22604 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22605 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22606 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22607 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " + STRING_22608 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22609 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_22610 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22611 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22612 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22613 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22614 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22615 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_22616 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_22617 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_22618 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_22619 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_22620 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22621 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22622 "Em [0 2 2 0 0 0] (E G B) " + STRING_22623 "Em [3 x 2 0 0 0] (E G B) " + STRING_22624 "Em [x 2 5 x x 0] (E G B) " + STRING_22625 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_22626 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_22627 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_22628 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_22629 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_22630 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_22631 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_22632 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_22633 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_22634 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_22635 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_22636 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_22637 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_22638 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_22639 "Em/D [x 10 12 12 12 0] (D E G B) " + STRING_22640 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_22641 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_22642 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_22643 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_22644 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_22645 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_22646 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_22647 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_22648 "Em6 [12 x 11 12 12 12] (E Db G B E) " + STRING_22649 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_22650 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_22651 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_22652 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_22653 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_22654 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_22655 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_22656 "Em7 [x x 2 4 3 3] (D E G B) " + STRING_22657 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_22658 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_22659 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_22660 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_22661 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_22662 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_22663 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_22664 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_22665 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_22666 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22667 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22668 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_22669 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_22670 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_22671 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_22672 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " + STRING_22673 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_22674 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_22675 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_22676 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_22677 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_22678 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_22679 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_22680 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_22681 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22682 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22683 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22684 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22685 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22686 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22687 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22688 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22689 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22690 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22691 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22692 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22693 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22694 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_22695 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_22696 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_22697 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_22698 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22699 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22700 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22701 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_22702 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_22703 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_22704 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22705 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22706 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_22707 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_22708 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_22709 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_22710 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_22711 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_22712 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_22713 "F/D [x x 0 2 1 1] (C D F A) " + STRING_22714 "F/D [x x 0 5 6 5] (C D F A) " + STRING_22715 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_22716 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_22717 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_22718 "F/E [x x 2 2 1 1] (C E F A) " + STRING_22719 "F/E [x x 3 2 1 0] (C E F A) " + STRING_22720 "F/Eb [x x 1 2 1 1] (C Eb F A) " + STRING_22721 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_22722 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_22723 "F/G [x x 3 2 1 3] (C F G A) " + STRING_22724 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_22725 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_22726 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_22727 "F6 [x x 0 2 1 1] (C D F A) " + STRING_22728 "F6 [x x 0 5 6 5] (C D F A) " + STRING_22729 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_22730 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_22731 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_22732 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_22733 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_22734 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_22735 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22736 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " + STRING_22737 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_22738 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_22739 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_22740 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22741 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22742 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22743 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_22744 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_22745 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_22746 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_22747 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_22748 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22749 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_22750 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_22751 "Fm6 [1 x 0 1 1 1] (F D Ab C F) " + STRING_22752 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22753 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22754 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_22755 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_22756 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_22757 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_22758 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_22759 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_22760 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_22761 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_22762 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_22763 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_22764 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_22765 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_22766 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_22767 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_22768 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22769 "Fsus2/D [3 3 0 0 1 1] (C D F G) " + STRING_22770 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_22771 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_22772 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22773 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_22774 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_22775 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_22776 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_22777 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_22778 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_22779 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_22780 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_22781 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_22782 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_22783 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_22784 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_22785 "G/C [3 3 0 0 0 3] (C D G B) " + STRING_22786 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_22787 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_22788 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_22789 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_22790 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_22791 "G/E [x x 0 12 12 12] (D E G B) " + STRING_22792 "G/E [x x 0 9 8 7] (D E G B) " + STRING_22793 "G/E [x x 2 4 3 3] (D E G B) " + STRING_22794 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_22795 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_22796 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_22797 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_22798 "G/F [x x 0 0 0 1] (D F G B) " + STRING_22799 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_22800 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_22801 "G/Gb [3 2 0 0 0 2] (D Gb G B) " + STRING_22802 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_22803 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_22804 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_22805 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_22806 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_22807 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_22808 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_22809 "G6 [x x 0 12 12 12] (D E G B) " + STRING_22810 "G6 [x x 0 9 8 7] (D E G B) " + STRING_22811 "G6 [x x 2 4 3 3] (D E G B) " + STRING_22812 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_22813 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_22814 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_22815 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_22816 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_22817 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " + STRING_22818 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_22819 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_22820 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_22821 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_22822 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_22823 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_22824 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_22825 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_22826 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22827 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22828 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_22829 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_22830 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_22831 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22832 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22833 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22834 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22835 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22836 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22837 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22838 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22839 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22840 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22841 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_22842 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_22843 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22844 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22845 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_22846 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_22847 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_22848 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_22849 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " + STRING_22850 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_22851 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22852 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22853 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_22854 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_22855 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_22856 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_22857 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_22858 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_22859 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_22860 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_22861 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_22862 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_22863 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22864 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22865 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22866 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22867 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_22868 "Gbm6 [2 x 1 2 2 2] (Gb Eb A Db Gb) " + STRING_22869 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_22870 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_22871 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22872 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22873 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_22874 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22875 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22876 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_22877 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_22878 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22879 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22880 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22881 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22882 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22883 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_22884 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_22885 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_22886 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22887 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_22888 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_22889 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_22890 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_22891 "Gm6 [3 x 2 3 3 3] (G E Bb D G) " + STRING_22892 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_22893 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_22894 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22895 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_22896 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_22897 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_22898 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_22899 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " + STRING_22900 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_22901 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_22902 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_22903 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_22904 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_22905 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_22906 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_22907 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_22908 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_22909 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_22910 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_22911 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_22912 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_22913 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_22914 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_22915 "Gsus2/E [5 0 0 0 3 0] (D E G A) " + STRING_22916 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22917 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22918 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_22919 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_22920 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_22921 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_22922 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_22923 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_22924 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_22925 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_22926 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_22927 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_22928 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_22929 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_22930 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT1 "0;PIANO;Acoustic Grand Piano" + STRING_INSTRUMENT2 "1;PIANO;Bright Acoustic Piano" + STRING_INSTRUMENT3 "2;PIANO;Electric Grand Piano" + STRING_INSTRUMENT4 "3;PIANO;Honky-tonk Piano" + STRING_INSTRUMENT5 "4;PIANO;Rhodes Piano" + STRING_INSTRUMENT6 "5;PIANO;Chorused Piano" + STRING_INSTRUMENT7 "6;PIANO;Harpsichord" + STRING_INSTRUMENT8 "7;PIANO;Clavinet" + STRING_INSTRUMENT9 "8;CHROM PERCUSSION;Celesta" + STRING_INSTRUMENT10 "9;CHROM PERCUSSION;Glockenspiel" + STRING_INSTRUMENT11 "10;CHROM PERCUSSION;Music Box" + STRING_INSTRUMENT12 "11;CHROM PERCUSSION;Vibraphone" + STRING_INSTRUMENT13 "12;CHROM PERCUSSION;Marimba" + STRING_INSTRUMENT14 "13;CHROM PERCUSSION;Xylophone" + STRING_INSTRUMENT15 "14;CHROM PERCUSSION;Tubular-bell" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT16 "15;CHROM PERCUSSION;Dulcimer" + STRING_INSTRUMENT17 "16;ORGAN;Hammond Organ" + STRING_INSTRUMENT18 "17;ORGAN;Percussive Organ" + STRING_INSTRUMENT19 "18;ORGAN;Rock Organ" + STRING_INSTRUMENT20 "19;ORGAN;Church Organ" + STRING_INSTRUMENT21 "20;ORGAN;Reed Organ" + STRING_INSTRUMENT22 "21;ORGAN;Accordion" + STRING_INSTRUMENT23 "22;ORGAN;Harmonica" + STRING_INSTRUMENT24 "23;ORGAN;Tango Accordion" + STRING_INSTRUMENT25 "24;GUITAR;Acoustic Guitar(nylon)" + STRING_INSTRUMENT26 "25;GUITAR;Acoustic Guitar(steel)" + STRING_INSTRUMENT27 "26;GUITAR;Electric Guitar(jazz)" + STRING_INSTRUMENT28 "27;GUITAR;Electric Guitar(clean)" + STRING_INSTRUMENT29 "28;GUITAR;Electric Guitar(muted)" + STRING_INSTRUMENT30 "29;GUITAR;Overdriven Guitar" + STRING_INSTRUMENT31 "30;GUITAR;Distortion Guitar" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT32 "31;GUITAR;Guitar Harmonics" + STRING_INSTRUMENT33 "32;BASS;Acoustic Bass" + STRING_INSTRUMENT34 "33;BASS;Electric Bass(finger)" + STRING_INSTRUMENT35 "34;BASS;Electric Bass(pick)" + STRING_INSTRUMENT36 "35;BASS;Fretless Bass" + STRING_INSTRUMENT37 "36;BASS;Slap Bass 1" + STRING_INSTRUMENT38 "37;BASS;Slap Bass 2" + STRING_INSTRUMENT39 "38;BASS;Synth Bass 1" + STRING_INSTRUMENT40 "39;BASS;Synth Bass 2" + STRING_INSTRUMENT41 "40;STRINGS;Violin" + STRING_INSTRUMENT42 "41;STRINGS;Viola" + STRING_INSTRUMENT43 "42;STRINGS;Cello" + STRING_INSTRUMENT44 "43;STRINGS;Contrabass" + STRING_INSTRUMENT45 "44;STRINGS;Tremolo Strings" + STRING_INSTRUMENT46 "45;STRINGS;Pizzicato Strings" + STRING_INSTRUMENT47 "46;STRINGS;Orchestral Harp" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT48 "47;STRINGS;Timpani" + STRING_INSTRUMENT49 "48;ENSEMBLE;String Ensemble 1" + STRING_INSTRUMENT50 "49;ENSEMBLE;String Ensemble 2" + STRING_INSTRUMENT51 "50;ENSEMBLE;Synth Strings 1" + STRING_INSTRUMENT52 "51;ENSEMBLE;Synth Strings 2" + STRING_INSTRUMENT53 "52;ENSEMBLE;Choir Aahs" + STRING_INSTRUMENT54 "53;ENSEMBLE;Voice Oohs" + STRING_INSTRUMENT55 "54;ENSEMBLE;Synth Voice" + STRING_INSTRUMENT56 "55;ENSEMBLE;Orchestra Hit" + STRING_INSTRUMENT57 "56;BRASS;Trumpet" + STRING_INSTRUMENT58 "57;BRASS;Trombone" + STRING_INSTRUMENT59 "58;BRASS;Tuba" + STRING_INSTRUMENT60 "59;BRASS;Muted Trumpet" + STRING_INSTRUMENT61 "60;BRASS;French Horn" + STRING_INSTRUMENT62 "61;BRASS;Brass Section" + STRING_INSTRUMENT63 "62;BRASS;Synth Brass 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT64 "63;BRASS;Synth Brass 2" + STRING_INSTRUMENT65 "64;REED;Soprano Sax" + STRING_INSTRUMENT66 "65;REED;Alto Sax" + STRING_INSTRUMENT67 "66;REED;Tenor Sax" + STRING_INSTRUMENT68 "67;REED;Baritone Sax" + STRING_INSTRUMENT69 "68;REED;Oboe" + STRING_INSTRUMENT70 "69;REED;English Horn" + STRING_INSTRUMENT71 "70;REED;Bassoon" + STRING_INSTRUMENT72 "71;REED;Clarinet" + STRING_INSTRUMENT73 "72;PIPE;Piccolo" + STRING_INSTRUMENT74 "73;PIPE;Flute" + STRING_INSTRUMENT75 "74;PIPE;Recorder" + STRING_INSTRUMENT76 "75;PIPE;Pan Flute" + STRING_INSTRUMENT77 "76;PIPE;Bottle Blow" + STRING_INSTRUMENT78 "77;PIPE;Shakuhachi" + STRING_INSTRUMENT79 "78;PIPE;Whistle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT80 "79;PIPE;Ocarina" + STRING_INSTRUMENT81 "80;SYNTH LEAD;Lead 1(square)" + STRING_INSTRUMENT82 "81;SYNTH LEAD;Lead 2(sawtooth)" + STRING_INSTRUMENT83 "82;SYNTH LEAD;Lead 3(calliope)" + STRING_INSTRUMENT84 "83;SYNTH LEAD;Lead 4(chiffer)" + STRING_INSTRUMENT85 "84;SYNTH LEAD;Lead 5(charang)" + STRING_INSTRUMENT86 "85;SYNTH LEAD;Lead 6(voice)" + STRING_INSTRUMENT87 "86;SYNTH LEAD;Lead 7(5th sawtooth)" + STRING_INSTRUMENT88 "87;SYNTH LEAD;Lead 8(bass&lead)" + STRING_INSTRUMENT89 "88;SYNTH PAD;Pad 1(new age)" + STRING_INSTRUMENT90 "89;SYNTH PAD;Pad 2(warm)" + STRING_INSTRUMENT91 "90;SYNTH PAD;Pad 3(polysynth)" + STRING_INSTRUMENT92 "91;SYNTH PAD;Pad 4(choir)" + STRING_INSTRUMENT93 "92;SYNTH PAD;Pad 5(bowed glass)" + STRING_INSTRUMENT94 "93;SYNTH PAD;Pad 6(metal)" + STRING_INSTRUMENT95 "94;SYNTH PAD;Pad 7(halo)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT96 "95;SYNTH PAD;Pad 8(sweep)" + STRING_INSTRUMENT97 "96;SYNTH EFFECTS;FX 1(rain)" + STRING_INSTRUMENT98 "97;SYNTH EFFECTS;FX 2(soundtrack)" + STRING_INSTRUMENT99 "98;SYNTH EFFECTS;FX 3(crystal)" + STRING_INSTRUMENT100 "99;SYNTH EFFECTS;FX 4(atmosphere)" + STRING_INSTRUMENT101 "100;SYNTH EFFECTS;FX 5(brightness)" + STRING_INSTRUMENT102 "101;SYNTH EFFECTS;FX 6(goblin)" + STRING_INSTRUMENT103 "102;SYNTH EFFECTS;FX 7(echo drops)" + STRING_INSTRUMENT104 "103;SYNTH EFFECTS;FX 8(star-theme)" + STRING_INSTRUMENT105 "104;ETHNIC;Sitar" + STRING_INSTRUMENT106 "105;ETHNIC;Banjo" + STRING_INSTRUMENT107 "106;ETHNIC;Shamisen" + STRING_INSTRUMENT108 "107;ETHNIC;Koto" + STRING_INSTRUMENT109 "108;ETHNIC;Kalimba" + STRING_INSTRUMENT110 "109;ETHNIC;Bag Pipe" + STRING_INSTRUMENT111 "110;ETHNIC;Fiddle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT112 "111;ETHNIC;Shanai" + STRING_INSTRUMENT113 "112;PERCUSSIVE;Tinkle Bell" + STRING_INSTRUMENT114 "113;PERCUSSIVE;Agogo" + STRING_INSTRUMENT115 "114;PERCUSSIVE;Steel Drums" + STRING_INSTRUMENT116 "115;PERCUSSIVE;Woodblock" + STRING_INSTRUMENT117 "116;PERCUSSIVE;Taiko Drum" + STRING_INSTRUMENT118 "117;PERCUSSIVE;Melodic Tom" + STRING_INSTRUMENT119 "118;PERCUSSIVE;Synth Drum" + STRING_INSTRUMENT120 "119;PERCUSSIVE;Reverse Cymbal" + STRING_INSTRUMENT121 "120;SOUND EFFECTS;Guitar Fret Noise" + STRING_INSTRUMENT122 "121;SOUND EFFECTS;Breath Noise" + STRING_INSTRUMENT123 "122;SOUND EFFECTS;Seashore" + STRING_INSTRUMENT124 "123;SOUND EFFECTS;Bird Tweet" + STRING_INSTRUMENT125 "124;SOUND EFFECTS;Telephone Ring" + STRING_INSTRUMENT126 "125;SOUND EFFECTS;Helicopter" + STRING_INSTRUMENT127 "126;SOUND EFFECTS;Applause" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT128 "127;SOUND EFFECTS;Gun Shot" + STRING_INSTRUMENT129 "135;MIDI PERCUSSION;Acoustic Bass Drum" + STRING_INSTRUMENT130 "136;MIDI PERCUSSION;Bass Drum" + STRING_INSTRUMENT131 "137;MIDI PERCUSSION;Slide Stick" + STRING_INSTRUMENT132 "138;MIDI PERCUSSION;Acoustic Snare" + STRING_INSTRUMENT133 "139;MIDI PERCUSSION;Hand Clap" + STRING_INSTRUMENT134 "140;MIDI PERCUSSION;Electric Snare" + STRING_INSTRUMENT135 "141;MIDI PERCUSSION;Low Floor Tom" + STRING_INSTRUMENT136 "142;MIDI PERCUSSION;Closed High-Hat" + STRING_INSTRUMENT137 "143;MIDI PERCUSSION;High Floor Tom" + STRING_INSTRUMENT138 "144;MIDI PERCUSSION;Pedal High Hat" + STRING_INSTRUMENT139 "145;MIDI PERCUSSION;Low Tom" + STRING_INSTRUMENT140 "146;MIDI PERCUSSION;Open High Hat" + STRING_INSTRUMENT141 "147;MIDI PERCUSSION;Low-Mid Tom" + STRING_INSTRUMENT142 "148;MIDI PERCUSSION;High-Mid Tom" + STRING_INSTRUMENT143 "149;MIDI PERCUSSION;Crash Cymbal 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT144 "150;MIDI PERCUSSION;High Tom" + STRING_INSTRUMENT145 "151;MIDI PERCUSSION;Ride Cymbal 1" + STRING_INSTRUMENT146 "152;MIDI PERCUSSION;Chinese Cymbal" + STRING_INSTRUMENT147 "153;MIDI PERCUSSION;Ride Bell" + STRING_INSTRUMENT148 "154;MIDI PERCUSSION;Tambourine" + STRING_INSTRUMENT149 "155;MIDI PERCUSSION;Splash Cymbal" + STRING_INSTRUMENT150 "156;MIDI PERCUSSION;Cowbell" + STRING_INSTRUMENT151 "157;MIDI PERCUSSION;Crash Cymbal 2" + STRING_INSTRUMENT152 "158;MIDI PERCUSSION;Vibraslap" + STRING_INSTRUMENT153 "159;MIDI PERCUSSION;Ride Cymbal 2" + STRING_INSTRUMENT154 "160;MIDI PERCUSSION;High Bongo" + STRING_INSTRUMENT155 "161;MIDI PERCUSSION;Low Bongo" + STRING_INSTRUMENT156 "162;MIDI PERCUSSION;Mute High Conga" + STRING_INSTRUMENT157 "163;MIDI PERCUSSION;Open High Conga" + STRING_INSTRUMENT158 "164;MIDI PERCUSSION;Low Conga" + STRING_INSTRUMENT159 "165;MIDI PERCUSSION;High Timbale" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT160 "166;MIDI PERCUSSION;Low Timbale" + STRING_INSTRUMENT161 "167;MIDI PERCUSSION;High Agogo" + STRING_INSTRUMENT162 "168;MIDI PERCUSSION;Low Agogo" + STRING_INSTRUMENT163 "169;MIDI PERCUSSION;Cabasa" + STRING_INSTRUMENT164 "170;MIDI PERCUSSION;Maracas" + STRING_INSTRUMENT165 "171;MIDI PERCUSSION;Short Whistle" + STRING_INSTRUMENT166 "172;MIDI PERCUSSION;Long Whistle" + STRING_INSTRUMENT167 "173;MIDI PERCUSSION;Short Guiro" + STRING_INSTRUMENT168 "174;MIDI PERCUSSION;Long Guiro" + STRING_INSTRUMENT169 "175;MIDI PERCUSSION;Claves" + STRING_INSTRUMENT170 "176;MIDI PERCUSSION;High Wood Block" + STRING_INSTRUMENT171 "177;MIDI PERCUSSION;Low Wood Block" + STRING_INSTRUMENT172 "178;MIDI PERCUSSION;Mute Cuica" + STRING_INSTRUMENT173 "179;MIDI PERCUSSION;Open Cuica" + STRING_INSTRUMENT174 "180;MIDI PERCUSSION;Mute Triangle" + STRING_INSTRUMENT175 "181;MIDI PERCUSSION;Open Triangle" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/guitar/guitar.rc.saf b/guitar/guitar.rc.saf new file mode 100644 index 0000000..4852381 --- /dev/null +++ b/guitar/guitar.rc.saf @@ -0,0 +1,1818 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "guitar\guitar.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +GRAPHDIALOG DIALOG DISCARDABLE 6, 15, 340, 205 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Graph" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Dismiss",IDCANCEL,171,180,50,14 + GROUPBOX "",-1,5,4,326,166 + DEFPUSHBUTTON "Graph",IDOK,119,180,50,14 +END + +MIDIDIALOG DIALOGEX 0, 0, 142, 225 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "MIDI Import" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Ok",IDOK,85,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,85,16,50,14 + CONTROL "Track 1",MIDI_TRACK1,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,18,41,10 + CONTROL "Track 2",MIDI_TRACK2,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,30,41,10 + CONTROL "Track 3",MIDI_TRACK3,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,42,41,10 + CONTROL "Track 4",MIDI_TRACK4,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,54,41,10 + CONTROL "Track 5",MIDI_TRACK5,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,66,41,10 + CONTROL "Track 6",MIDI_TRACK6,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,78,41,10 + CONTROL "Track 7",MIDI_TRACK7,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,90,41,10 + CONTROL "Track 8",MIDI_TRACK8,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,102,41,10 + CONTROL "Track 9",MIDI_TRACK9,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,114,41,10 + CONTROL "Track 10",MIDI_TRACK10,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,126,41,10 + CONTROL "Track 11",MIDI_TRACK11,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,138,41,10 + CONTROL "Track 12",MIDI_TRACK12,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,150,41,10 + CONTROL "Track 13",MIDI_TRACK13,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,162,41,10 + CONTROL "Track 14",MIDI_TRACK14,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,174,41,10 + CONTROL "Track 15",MIDI_TRACK15,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,186,41,10 + CONTROL "Track 16",MIDI_TRACK16,"Button",BS_AUTOCHECKBOX | + BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,4,198,41,10 + LTEXT "",MIDI_EVENTS_TRACK1,49,18,22,10 + LTEXT "",MIDI_EVENTS_TRACK2,49,30,22,8 + LTEXT "",MIDI_EVENTS_TRACK3,49,42,22,8 + LTEXT "",MIDI_EVENTS_TRACK4,49,54,22,8 + LTEXT "",MIDI_EVENTS_TRACK5,49,66,22,8 + LTEXT "",MIDI_EVENTS_TRACK6,49,78,22,8 + LTEXT "",MIDI_EVENTS_TRACK7,49,90,22,8 + LTEXT "",MIDI_EVENTS_TRACK8,49,102,22,8 + LTEXT "",MIDI_EVENTS_TRACK9,49,114,22,8 + LTEXT "",MIDI_EVENTS_TRACK10,49,126,22,8 + LTEXT "",MIDI_EVENTS_TRACK11,49,138,22,8 + LTEXT "",MIDI_EVENTS_TRACK12,49,150,22,8 + LTEXT "",MIDI_EVENTS_TRACK13,49,162,22,8 + LTEXT "",MIDI_EVENTS_TRACK14,49,174,22,8 + LTEXT "",MIDI_EVENTS_TRACK15,49,186,22,8 + LTEXT "",MIDI_EVENTS_TRACK16,49,198,22,8 + LTEXT "Events",IDC_STATIC,51,4,23,8 +END + +TABDIALOG DIALOGEX 0, 0, 193, 164 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Tab Entry" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT TABENTRY_COMMENTS,7,143,179,14,ES_AUTOHSCROLL, + WS_EX_CLIENTEDGE + COMBOBOX TABENTRY_NOTETYPE,34,14,45,49,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + LISTBOX TABENTRY_LIST,7,71,179,56,NOT LBS_NOTIFY | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_USETABSTOPS | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,136,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,136,22,50,14 + CONTROL "Apply to remainder of entries.",TABENTRY_REMAINDER, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,42,107,10 + LTEXT "Value:",-1,9,17,21,8 + LTEXT "String",-1,15,57,19,8 + LTEXT "Fret",-1,53,57,13,8 + LTEXT "Note",-1,98,57,16,8 + LTEXT "Comments",-1,71,132,36,8 + CONTROL "Separator",TABENTRY_SEPARATOR,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,13,30,47,10 +END + +FRETDIALOG DIALOGEX 0, 0, 155, 73 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Fret Entry" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT FRETENTRY_FRET,38,18,53,14,ES_AUTOHSCROLL + EDITTEXT FRETENTRY_STRING,38,1,53,14,ES_AUTOHSCROLL + COMBOBOX FRETENTRY_ACTION,38,33,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + COMBOBOX FRETENTRY_DURATION,38,48,59,62,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "Apply",IDOK,104,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,104,16,50,14 + LTEXT "Fret:",-1,4,21,15,8 + LTEXT "String:",-1,4,6,21,8 + LTEXT "Action:",-1,4,35,23,8 + LTEXT "Duration:",-1,1,50,30,8 +END + +CHORDDIALOG DIALOGEX 0, 0, 193, 127 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Dictionary" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + LISTBOX CHORDS_LIST,0,19,184,89,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + LTEXT "",CHORDS_COUNT,3,112,102,8 +END + +CHORDBUILDERDIALOG DIALOGEX 0, 0, 201, 65 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Chord Builder" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT ENTERCHORD_EDIT,9,8,124,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,146,4,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,146,20,50,14 + PUSHBUTTON "Examples",ENTERCHORD_EXAMPLES,146,37,50,14 +END + +RANGEDIALOG DIALOGEX 0, 0, 206, 105 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Range Edit" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,1,1,50,14 + LISTBOX RANGE_LIST,10,36,184,57,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Cancel",IDCANCEL,51,1,50,14 + PUSHBUTTON "Insert...",RANGE_INSERT,101,1,50,14 + PUSHBUTTON "Delete",RANGE_DELETE,151,1,50,14 + CTEXT "Name",-1,15,22,64,8 + LTEXT "Start Pos.",-1,92,22,32,8 + LTEXT "End Pos.",-1,149,22,30,8 +END + +RANGEEDITDIALOG DIALOGEX 0, 0, 190, 111 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Edit Item" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT RANGEEDIT_NAME,33,42,150,14,ES_AUTOHSCROLL + EDITTEXT RANGEEDIT_BEGIN,33,61,40,14,ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT RANGEEDIT_END,33,80,40,14,ES_AUTOHSCROLL | ES_NUMBER + DEFPUSHBUTTON "O&k",IDOK,134,2,50,14 + PUSHBUTTON "Cancel",IDCANCEL,134,17,50,14 + LTEXT "Name:",-1,5,43,22,8 + LTEXT "Start:",-1,5,64,18,8 + LTEXT "End:",-1,5,85,16,8 +END + +SETTINGSDIALOG DIALOGEX 0, 0, 169, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Apply",IDOK,5,2,50,14 + PUSHBUTTON "&Done",IDCANCEL,107,2,50,14 + CONTROL "Display (Bends,Pulls,Slides,Hammers)", + SETTINGS_SHOWACTION,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,9,29,133,10 + LTEXT "Microseconds Per 1/4 note:",IDC_STATIC,11,113,89,8 + EDITTEXT SETTINGS_MICROSECSPERQTRNOTE,104,110,40,14, + ES_AUTOHSCROLL | ES_NUMBER + PUSHBUTTON "Defaults",SETTINGS_DEFAULTS,56,2,50,14 + GROUPBOX "MIDI",IDC_STATIC,3,58,161,83 + GROUPBOX "Global",IDC_STATIC,1,18,161,37 + CONTROL "Display note letters on fretboard.",SETTINGS_SHOWNOTES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,42,117,10 + LTEXT "Output",IDC_STATIC,9,71,23,8 + COMBOBOX SETTINGS_MIDIOUT,37,67,121,61,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE + COMBOBOX SETTINGS_INSTRUMENT,12,95,121,63,CBS_DROPDOWNLIST | + CBS_SORT | WS_VSCROLL | WS_TABSTOP + LTEXT "Instrument",IDC_STATIC,13,85,105,8 +END + +SCALEDIALOG DIALOGEX 0, 0, 217, 151 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | + WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW | WS_EX_STATICEDGE +CAPTION "Show Scale" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "O&k",IDOK,163,4,50,14 + LISTBOX SCALEDLG_LIST,3,58,211,86,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Ca&ncel",IDCANCEL,163,19,50,14 + LTEXT "Root:",-1,5,30,18,8 + EDITTEXT SCALEDLG_ROOT,25,27,28,14,ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "Spin1",SCALEDLG_SPIN,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_ARROWKEYS,54,27,10,14 + CONTROL "Mute",SCALEDLG_MUTE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,165,36,48,10 +END + +LICENSEDIALOG DIALOGEX 0, 0, 223, 134 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "License Helper" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + EDITTEXT LICENSE_DIALOG_LICENSE,2,81,215,42,ES_MULTILINE | + ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,154,2,65,14 + PUSHBUTTON "Cancel",IDCANCEL,154,17,65,14 + LTEXT " You can request a new license by clicking ""Request License"".", + IDC_STATIC,5,67,214,8 + LTEXT "Please paste your license key into the text box below.", + IDC_STATIC,5,53,216,8 + PUSHBUTTON "Request License",LICENSE_DIALOG_REQUEST_LICENSE,154,32, + 65,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +FRETBOARD BITMAP MOVEABLE PURE "FRETBOARD.BMP" +GUITAR BITMAP MOVEABLE PURE "GUITAR.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +HARROW CURSOR DISCARDABLE "HARROW.CUR" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP_ICON ICON DISCARDABLE "icon1.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +FRETMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Import Tablature...\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + END + POPUP "Fret&board" + BEGIN + MENUITEM "&Clear", MENU_FRETBOARD_CLEAR + MENUITEM "Show All &Positions", MENU_FRETBOARD_SHOWALLPOSITIONS + + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&Options" + BEGIN + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open Project...\tCtrl+O", MENU_FILE_OPEN + MENUITEM "&New Project\tCtrl+N", MENU_FILE_NEW + MENUITEM "&Close Project", MENU_FILE_CLOSE + MENUITEM "&Import Tablature\tCtrl+I", MENU_FILE_IMPORT + MENUITEM "Import MIDI File...\tCtrl+M", MENU_FILE_MIDI_IMPORT + MENUITEM SEPARATOR + MENUITEM "&Save\tCtrl+S", MENU_FILE_SAVE + MENUITEM "Save &As...", MENU_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", MENU_FILE_PRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t...\tCtrl+X", MENU_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", MENU_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", MENU_EDIT_PASTE + MENUITEM SEPARATOR + MENUITEM "&Ranges...", MENU_EDIT_RANGES + END + POPUP "&Chords" + BEGIN + MENUITEM "&Dictionary...", MENU_CHORDS_LOOKUP + MENUITEM "&Builder...", MENU_CHORDS_ENTER + END + POPUP "&Scales" + BEGIN + MENUITEM "&Show Scale...", MENU_SCALES_SHOW + END + POPUP "&View" + BEGIN + MENUITEM "&Fretboard", MENU_VIEW_FRETBOARD + END + POPUP "&Tablature" + BEGIN + MENUITEM "&Play", MENU_TABLATURE_PLAY + MENUITEM "Play (&Repeated)", MENU_TABLATURE_PLAYREPEATED + MENUITEM "Play R&ange...", MENU_TABLATURE_PLAYRANGE + , GRAYED + MENUITEM "Play Rang&e (Repeated)...", MENU_TABLATURE_PLAYRANGE_REPEATED + , GRAYED + MENUITEM "&Stop", MENU_TABLATURE_STOP, GRAYED + END + POPUP "&Options" + BEGIN + MENUITEM "&Increase Tempo", MENU_OPTIONS_INCREASETEMPO + MENUITEM "&Decrease Tempo", MENU_OPTIONS_DECREASETEMPO + MENUITEM SEPARATOR + MENUITEM "&Settings...", MENU_OPTIONS_SETTINGS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "Online &Help Index...", MENU_HELP_INDEX + MENUITEM SEPARATOR + MENUITEM "Apply License...", MENU_HELP_APPLY_LICENSE + MENUITEM "&About...", MENU_HELP_ABOUT + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""guitar\\guitar.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "MIDIDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 141 + END + + "TABDIALOG", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 186 + TOPMARGIN, 7 + BOTTOMMARGIN, 157 + END + + "FRETDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 154 + BOTTOMMARGIN, 69 + END + + "CHORDDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 184 + TOPMARGIN, 2 + BOTTOMMARGIN, 126 + END + + "SETTINGSDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 164 + BOTTOMMARGIN, 140 + END + + "SCALEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 216 + BOTTOMMARGIN, 146 + END + + "LICENSEDIALOG", DIALOG + BEGIN + RIGHTMARGIN, 221 + BOTTOMMARGIN, 131 + END +END +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Simplified Tablature editing.\0" + VALUE "CompanyName", "Diversified Software Solutions.\0" + VALUE "FileDescription", "TabMaster\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "TabMaster\0" + VALUE "LegalCopyright", "Copyright © 2002\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "TabMaster.exe\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "TabMaster\0" + VALUE "ProductVersion", "2, 0, 0, r\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +TABACCELERATORS ACCELERATORS DISCARDABLE +BEGIN + "X", MENU_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT + "C", MENU_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT + "V", MENU_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT + "N", MENU_FILE_NEW, VIRTKEY, CONTROL, NOINVERT + "O", MENU_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "I", MENU_FILE_IMPORT, VIRTKEY, CONTROL, NOINVERT + "P", MENU_FILE_PRINT, VIRTKEY, CONTROL, NOINVERT + VK_F5, IDM_CASCADE, VIRTKEY, NOINVERT + VK_F4, IDM_TILE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_NOTITLE "None" + STRING_EDITHINT "Insert tablature using Insert key." + STRING_PRJEXTENSION ".prj" + STRING_PRJALLEXTENSION "*.prj" + STRING_TABEXTENSION ".tab" + STRING_BROWSERKEY "Software\\Classes\\htmlfile\\shell\\opennew\\command" + STRING_BROWSERKEYALT "SOFTWARE\\Classes\\http\\shell\\open\\command" + STRING_BROWSERCOMMAND "command" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_HOST "http://www.diversified-software.com" + STRING_HELPPAGE "/support/support.html" + STRING_MIDIEXTENSION ".mid" + STRING_PURCHASE_URL "http://wwww.diversified-software.com/order/ordertabmaster.html" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_TABVIEWWINDOWCLASSNAME "TABVIEWCLASS" + STRING_FRETVIEWWINDOWCLASSNAME "FRETVIEWCLASS" + STRING_REGISTRYKEYNAME "Software\\Diversified\\TabMaster" + STRING_HISTORYKEYNAME "Software\\Diversified\\TabMaster\\History" + STRING_HISTORYKEYSHORTNAME "History" + STRING_SETTINGSKEYNAME "Software\\Diversified\\TabMaster\\Settings" + STRING_SETTINGSINSTRUMENT "Instrument" + STRING_SETTINGSACTION "Action" + STRING_SETTINGSNOTELETTERS "DisplayNoteLetters" + STRING_SETTINGSMICROSECONDSPERQUARTERNOTE "MicrosecondsPerQuarterNote" + STRING_REGISTRATIONKEYNAME + "Software\\Diversified\\TabMaster\\Registration" + STRING_SETTINGSLICENSE "License" + STRING_SETTINGSMIDIOUTPUT "MIDIOutput" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_22000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_22001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_22002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_22003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_22004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_22005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_22006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_22007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " + STRING_22008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_22009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_22010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_22011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_22012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_22013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_22014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_22015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_22016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_22017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_22018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_22019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_22020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_22021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_22022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_22023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " + STRING_22024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_22025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_22030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_22032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_22033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_22034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_22035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_22036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_22037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_22038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_22039 "A7sus4 [x 0 2 0 3 3] (D E G A) " + STRING_22040 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_22041 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_22042 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_22043 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_22044 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_22045 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22046 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22047 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_22048 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_22049 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_22050 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22051 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_22052 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22053 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22054 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_22055 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22056 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22057 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22058 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22059 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_22060 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_22061 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_22062 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_22063 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_22064 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_22065 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_22066 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_22067 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22068 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22069 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22070 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_22071 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " + STRING_22072 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22073 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22074 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_22075 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22076 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22077 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_22078 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22079 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_22080 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_22081 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_22082 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_22083 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_22084 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22085 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22086 "Am [x 0 2 2 1 0] (C E A) " + STRING_22087 "Am [x 0 7 5 5 5] (C E A) " + STRING_22088 "Am [x 3 2 2 1 0] (C E A) " + STRING_22089 "Am [8 12 x x x 0] (C E A) " + STRING_22090 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_22091 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_22092 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_22093 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_22094 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_22095 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_22096 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_22097 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_22098 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_22099 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_22100 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_22101 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_22102 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_22103 "Am/G [x 0 5 5 5 8] (C E G A) " + STRING_22104 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_22105 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_22106 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_22107 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_22108 "Am6 [5 x 4 5 5 5] (A Gb C E A)" + STRING_22109 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_22110 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_22111 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_22112 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_22113 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_22114 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_22115 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_22116 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_22117 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_22118 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_22119 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_22120 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " + STRING_22121 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_22122 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_22123 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_22124 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_22125 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_22126 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22127 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_22128 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_22129 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_22130 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_22131 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22132 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22133 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22134 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_22135 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_22136 "Asus2/G [x 0 2 0 0 0] (E G A B) " + STRING_22137 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_22138 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22139 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22140 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22141 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_22142 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22143 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_22144 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_22145 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22146 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_22147 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_22148 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_22149 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_22150 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_22151 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_22152 "Asus4/G [x 0 2 2 3 3] (D E G A) " + STRING_22153 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_22154 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22155 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22156 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22157 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22158 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22159 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22160 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22161 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_22162 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_22163 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_22164 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22165 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22166 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22167 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22168 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22169 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22170 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_22171 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_22172 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_22173 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22174 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22175 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22176 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22177 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22178 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_22179 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_22180 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_22181 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_22182 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22183 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22184 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " + STRING_22185 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_22186 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_22187 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22188 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_22189 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_22190 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22191 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_22192 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_22193 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_22194 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_22195 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_22196 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_22197 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_22198 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_22199 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_22200 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22201 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22202 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_22203 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22204 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_22205 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22206 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_22207 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_22208 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_22209 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_22210 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22211 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22212 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22213 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22214 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_22215 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22216 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " + STRING_22217 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22218 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22219 "Bbm6 [6 x 5 6 6 6] (Bb G Db F Bb) " + STRING_22220 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_22221 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_22222 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_22223 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22224 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22225 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_22226 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_22227 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_22228 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_22229 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_22230 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_22231 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_22232 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_22233 "Bdim/G [x x 0 0 0 1] (D F G B) " + STRING_22234 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22235 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22236 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22237 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_22238 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_22239 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_22240 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_22241 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_22242 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_22243 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_22244 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_22245 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_22246 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_22247 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_22248 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_22249 "Bm7 [x 0 4 4 3 2] (D Gb A B) " + STRING_22250 "Bm6 [7 x 6 7 7 7] (B Ab D Eb B) " + STRING_22251 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_22252 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_22253 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_22254 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_22255 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_22256 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_22257 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_22258 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22259 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22260 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_22261 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_22262 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_22263 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_22264 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_22265 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22266 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22267 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22268 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22269 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22270 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22271 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22272 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22273 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22274 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22275 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22276 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22277 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22278 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_22279 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_22280 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_22281 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_22282 "C or Cmaj [x 3 2 0 1 0] (C E G) " + STRING_22283 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_22284 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_22285 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_22286 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_22287 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_22288 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_22289 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_22290 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_22291 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_22292 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_22293 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_22294 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_22295 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_22296 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_22297 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_22298 "C/D [x x 0 0 1 0] (C D E G) " + STRING_22299 "C/D [x x 0 5 5 3] (C D E G) " + STRING_22300 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_22301 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_22302 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_22303 "C/F [x x 3 0 1 0] (C E F G) " + STRING_22304 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_22305 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_22306 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_22307 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_22308 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_22309 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_22310 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_22311 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_22312 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22313 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_22314 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " + STRING_22315 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22316 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_22317 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_22318 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_22319 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_22320 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22321 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_22322 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_22323 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22324 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22325 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_22326 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22327 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_22328 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_22329 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_22330 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22331 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_22332 "Cm6 [8 x 7 8 8 8] (C A Eb G C) " + STRING_22333 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22334 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_22335 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_22336 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_22337 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_22338 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_22339 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_22340 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_22341 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_22342 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_22343 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_22344 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_22345 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_22346 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_22347 "Csus2/B [x 3 0 0 0 3] (C D G B) " + STRING_22348 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_22349 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_22350 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_22351 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_22352 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_22353 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_22354 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_22355 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_22356 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_22357 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_22358 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_22359 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_22360 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22361 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_22362 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_22363 "Csus4/E [x x 3 0 1 0] (C E F G) " + STRING_22364 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_22365 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_22366 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_22367 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_22368 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_22369 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_22370 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_22371 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_22372 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_22373 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_22374 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_22375 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_22376 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_22377 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_22378 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_22379 "D/C [x 3 x 2 3 2] (C D Gb A) " + STRING_22380 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_22381 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_22382 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_22383 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_22384 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_22385 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_22386 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_22387 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_22388 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_22389 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_22390 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_22391 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_22392 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_22393 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_22394 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_22395 "D6 [x 2 0 2 0 2] (D Gb A B) " + STRING_22396 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_22397 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_22398 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_22399 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22400 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22401 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_22402 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_22403 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_22404 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_22405 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_22406 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_22407 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_22408 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_22409 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_22410 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22411 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " + STRING_22412 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_22413 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_22414 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_22415 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_22416 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_22417 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_22418 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22419 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_22420 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_22421 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_22422 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_22423 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_22424 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_22425 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_22426 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_22427 "Db/B [x 4 3 4 0 4] (Db F Ab B) " + STRING_22428 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22429 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_22430 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_22431 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_22432 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22433 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_22434 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22435 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22436 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_22437 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_22438 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_22439 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_22440 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_22441 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_22442 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_22443 "Dbdim/D [x x 0 0 2 0] (Db D E G) " + STRING_22444 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22445 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22446 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_22447 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_22448 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_22449 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_22450 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_22451 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_22452 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22453 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22454 "Dbm6 [9 x 8 9 9 9] (Db Bb E Ab Bb) " + STRING_22455 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_22456 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_22457 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_22458 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_22459 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22460 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " + STRING_22461 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_22462 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_22463 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22464 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_22465 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_22466 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22467 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22468 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22469 "Dm [x 0 0 2 3 1] (D F A) " + STRING_22470 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_22471 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_22472 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_22473 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_22474 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_22475 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_22476 "Dm/C [x x 0 5 6 5] (C D F A) " + STRING_22477 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_22478 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_22479 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_22480 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_22481 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_22482 "Dm6 [10 x 9 10 10 10] (D B F A D) " + STRING_22483 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_22484 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_22485 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_22486 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_22487 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_22488 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_22489 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_22490 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_22491 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_22492 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_22493 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " + STRING_22494 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_22495 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_22496 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_22497 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_22498 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_22499 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_22500 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22501 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_22502 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_22503 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22504 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_22505 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_22506 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22507 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_22508 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_22509 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " + STRING_22510 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_22511 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_22512 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_22513 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_22514 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_22515 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_22516 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22517 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22518 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22519 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22520 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22521 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22522 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22523 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_22524 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_22525 "Dsus4/C [x 5 7 5 8 3] (C D G A)" + STRING_22526 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_22527 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_22528 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_22529 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_22530 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_22531 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_22532 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22533 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22534 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_22535 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_22536 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_22537 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_22538 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_22539 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_22540 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_22541 "E/D [x x 0 1 0 0] (D E Ab B) " + STRING_22542 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_22543 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_22544 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22545 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22546 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_22547 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22548 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22549 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22550 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_22551 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_22552 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_22553 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22554 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22555 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_22556 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_22557 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " + STRING_22558 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_22559 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_22560 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_22561 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_22562 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_22563 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_22564 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22565 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22566 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22567 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_22568 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_22569 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_22570 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_22571 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_22572 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22573 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22574 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22575 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22576 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22577 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_22578 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_22579 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22580 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22581 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22582 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22583 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22584 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22585 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22586 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22587 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22588 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22589 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " + STRING_22590 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22591 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_22592 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22593 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22594 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22595 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22596 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22597 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_22598 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_22599 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_22600 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_22601 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_22602 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22603 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22604 "Em [0 2 2 0 0 0] (E G B) " + STRING_22605 "Em [3 x 2 0 0 0] (E G B) " + STRING_22606 "Em [x 2 5 x x 0] (E G B) " + STRING_22607 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_22608 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_22609 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_22610 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_22611 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_22612 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_22613 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_22614 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_22615 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_22616 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_22617 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_22618 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_22619 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_22620 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_22621 "Em/D [x 10 12 12 12 0] (D E G B) " + STRING_22622 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_22623 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_22624 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_22625 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_22626 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_22627 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_22628 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_22629 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_22630 "Em6 [12 x 11 12 12 12] (E Db G B E) " + STRING_22631 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_22632 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_22633 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_22634 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_22635 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_22636 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_22637 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_22638 "Em7 [x x 2 4 3 3] (D E G B) " + STRING_22639 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_22640 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_22641 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_22642 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_22643 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_22644 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_22645 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_22646 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_22647 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_22648 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22649 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22650 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_22651 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_22652 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_22653 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_22654 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " + STRING_22655 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_22656 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_22657 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_22658 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_22659 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_22660 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_22661 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_22662 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_22663 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22664 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22665 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22666 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22667 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22668 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22669 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22670 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22671 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22672 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22673 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22674 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22675 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22676 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_22677 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_22678 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_22679 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_22680 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22681 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22682 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22683 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_22684 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_22685 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_22686 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22687 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22688 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_22689 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_22690 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_22691 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_22692 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_22693 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_22694 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_22695 "F/D [x x 0 2 1 1] (C D F A) " + STRING_22696 "F/D [x x 0 5 6 5] (C D F A) " + STRING_22697 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_22698 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_22699 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_22700 "F/E [x x 2 2 1 1] (C E F A) " + STRING_22701 "F/E [x x 3 2 1 0] (C E F A) " + STRING_22702 "F/Eb [x x 1 2 1 1] (C Eb F A) " + STRING_22703 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_22704 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_22705 "F/G [x x 3 2 1 3] (C F G A) " + STRING_22706 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_22707 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_22708 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_22709 "F6 [x x 0 2 1 1] (C D F A) " + STRING_22710 "F6 [x x 0 5 6 5] (C D F A) " + STRING_22711 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_22712 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_22713 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_22714 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_22715 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_22716 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_22717 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22718 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " + STRING_22719 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_22720 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_22721 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_22722 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22723 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22724 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22725 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_22726 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_22727 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_22728 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_22729 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_22730 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22731 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_22732 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_22733 "Fm6 [1 x 0 1 1 1] (F D Ab C F) " + STRING_22734 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22735 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22736 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_22737 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_22738 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_22739 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_22740 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_22741 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_22742 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_22743 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_22744 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_22745 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_22746 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_22747 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_22748 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_22749 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_22750 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22751 "Fsus2/D [3 3 0 0 1 1] (C D F G) " + STRING_22752 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_22753 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_22754 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22755 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_22756 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_22757 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_22758 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_22759 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_22760 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_22761 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_22762 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_22763 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_22764 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_22765 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_22766 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_22767 "G/C [3 3 0 0 0 3] (C D G B) " + STRING_22768 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_22769 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_22770 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_22771 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_22772 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_22773 "G/E [x x 0 12 12 12] (D E G B) " + STRING_22774 "G/E [x x 0 9 8 7] (D E G B) " + STRING_22775 "G/E [x x 2 4 3 3] (D E G B) " + STRING_22776 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_22777 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_22778 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_22779 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_22780 "G/F [x x 0 0 0 1] (D F G B) " + STRING_22781 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_22782 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_22783 "G/Gb [3 2 0 0 0 2] (D Gb G B) " + STRING_22784 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_22785 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_22786 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_22787 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_22788 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_22789 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_22790 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_22791 "G6 [x x 0 12 12 12] (D E G B) " + STRING_22792 "G6 [x x 0 9 8 7] (D E G B) " + STRING_22793 "G6 [x x 2 4 3 3] (D E G B) " + STRING_22794 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_22795 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_22796 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_22797 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_22798 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_22799 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " + STRING_22800 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_22801 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_22802 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_22803 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_22804 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_22805 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_22806 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_22807 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_22808 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22809 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22810 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_22811 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_22812 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_22813 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22814 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22815 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22816 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22817 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22818 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22819 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22820 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22821 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22822 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22823 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_22824 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_22825 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22826 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22827 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_22828 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_22829 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_22830 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_22831 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " + STRING_22832 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_22833 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22834 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22835 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_22836 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_22837 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_22838 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_22839 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_22840 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_22841 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_22842 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_22843 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_22844 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_22845 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22846 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22847 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22848 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22849 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_22850 "Gbm6 [2 x 1 2 2 2] (Gb Eb A Db Gb) " + STRING_22851 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_22852 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_22853 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22854 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22855 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_22856 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22857 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22858 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_22859 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_22860 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22861 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22862 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22863 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22864 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22865 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_22866 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_22867 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_22868 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22869 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_22870 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_22871 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_22872 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_22873 "Gm6 [3 x 2 3 3 3] (G E Bb D G) " + STRING_22874 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_22875 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_22876 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22877 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_22878 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_22879 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_22880 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_22881 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " + STRING_22882 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_22883 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_22884 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_22885 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_22886 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_22887 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_22888 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_22889 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_22890 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_22891 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_22892 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_22893 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_22894 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_22895 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_22896 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_22897 "Gsus2/E [5 0 0 0 3 0] (D E G A) " + STRING_22898 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22899 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22900 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_22901 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_22902 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_22903 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_22904 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_22905 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_22906 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_22907 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_22908 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_22909 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_22910 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_22911 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_22912 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT1 "0;PIANO;Acoustic Grand Piano" + STRING_INSTRUMENT2 "1;PIANO;Bright Acoustic Piano" + STRING_INSTRUMENT3 "2;PIANO;Electric Grand Piano" + STRING_INSTRUMENT4 "3;PIANO;Honky-tonk Piano" + STRING_INSTRUMENT5 "4;PIANO;Rhodes Piano" + STRING_INSTRUMENT6 "5;PIANO;Chorused Piano" + STRING_INSTRUMENT7 "6;PIANO;Harpsichord" + STRING_INSTRUMENT8 "7;PIANO;Clavinet" + STRING_INSTRUMENT9 "8;CHROM PERCUSSION;Celesta" + STRING_INSTRUMENT10 "9;CHROM PERCUSSION;Glockenspiel" + STRING_INSTRUMENT11 "10;CHROM PERCUSSION;Music Box" + STRING_INSTRUMENT12 "11;CHROM PERCUSSION;Vibraphone" + STRING_INSTRUMENT13 "12;CHROM PERCUSSION;Marimba" + STRING_INSTRUMENT14 "13;CHROM PERCUSSION;Xylophone" + STRING_INSTRUMENT15 "14;CHROM PERCUSSION;Tubular-bell" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT16 "15;CHROM PERCUSSION;Dulcimer" + STRING_INSTRUMENT17 "16;ORGAN;Hammond Organ" + STRING_INSTRUMENT18 "17;ORGAN;Percussive Organ" + STRING_INSTRUMENT19 "18;ORGAN;Rock Organ" + STRING_INSTRUMENT20 "19;ORGAN;Church Organ" + STRING_INSTRUMENT21 "20;ORGAN;Reed Organ" + STRING_INSTRUMENT22 "21;ORGAN;Accordion" + STRING_INSTRUMENT23 "22;ORGAN;Harmonica" + STRING_INSTRUMENT24 "23;ORGAN;Tango Accordion" + STRING_INSTRUMENT25 "24;GUITAR;Acoustic Guitar(nylon)" + STRING_INSTRUMENT26 "25;GUITAR;Acoustic Guitar(steel)" + STRING_INSTRUMENT27 "26;GUITAR;Electric Guitar(jazz)" + STRING_INSTRUMENT28 "27;GUITAR;Electric Guitar(clean)" + STRING_INSTRUMENT29 "28;GUITAR;Electric Guitar(muted)" + STRING_INSTRUMENT30 "29;GUITAR;Overdriven Guitar" + STRING_INSTRUMENT31 "30;GUITAR;Distortion Guitar" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT32 "31;GUITAR;Guitar Harmonics" + STRING_INSTRUMENT33 "32;BASS;Acoustic Bass" + STRING_INSTRUMENT34 "33;BASS;Electric Bass(finger)" + STRING_INSTRUMENT35 "34;BASS;Electric Bass(pick)" + STRING_INSTRUMENT36 "35;BASS;Fretless Bass" + STRING_INSTRUMENT37 "36;BASS;Slap Bass 1" + STRING_INSTRUMENT38 "37;BASS;Slap Bass 2" + STRING_INSTRUMENT39 "38;BASS;Synth Bass 1" + STRING_INSTRUMENT40 "39;BASS;Synth Bass 2" + STRING_INSTRUMENT41 "40;STRINGS;Violin" + STRING_INSTRUMENT42 "41;STRINGS;Viola" + STRING_INSTRUMENT43 "42;STRINGS;Cello" + STRING_INSTRUMENT44 "43;STRINGS;Contrabass" + STRING_INSTRUMENT45 "44;STRINGS;Tremolo Strings" + STRING_INSTRUMENT46 "45;STRINGS;Pizzicato Strings" + STRING_INSTRUMENT47 "46;STRINGS;Orchestral Harp" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT48 "47;STRINGS;Timpani" + STRING_INSTRUMENT49 "48;ENSEMBLE;String Ensemble 1" + STRING_INSTRUMENT50 "49;ENSEMBLE;String Ensemble 2" + STRING_INSTRUMENT51 "50;ENSEMBLE;Synth Strings 1" + STRING_INSTRUMENT52 "51;ENSEMBLE;Synth Strings 2" + STRING_INSTRUMENT53 "52;ENSEMBLE;Choir Aahs" + STRING_INSTRUMENT54 "53;ENSEMBLE;Voice Oohs" + STRING_INSTRUMENT55 "54;ENSEMBLE;Synth Voice" + STRING_INSTRUMENT56 "55;ENSEMBLE;Orchestra Hit" + STRING_INSTRUMENT57 "56;BRASS;Trumpet" + STRING_INSTRUMENT58 "57;BRASS;Trombone" + STRING_INSTRUMENT59 "58;BRASS;Tuba" + STRING_INSTRUMENT60 "59;BRASS;Muted Trumpet" + STRING_INSTRUMENT61 "60;BRASS;French Horn" + STRING_INSTRUMENT62 "61;BRASS;Brass Section" + STRING_INSTRUMENT63 "62;BRASS;Synth Brass 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT64 "63;BRASS;Synth Brass 2" + STRING_INSTRUMENT65 "64;REED;Soprano Sax" + STRING_INSTRUMENT66 "65;REED;Alto Sax" + STRING_INSTRUMENT67 "66;REED;Tenor Sax" + STRING_INSTRUMENT68 "67;REED;Baritone Sax" + STRING_INSTRUMENT69 "68;REED;Oboe" + STRING_INSTRUMENT70 "69;REED;English Horn" + STRING_INSTRUMENT71 "70;REED;Bassoon" + STRING_INSTRUMENT72 "71;REED;Clarinet" + STRING_INSTRUMENT73 "72;PIPE;Piccolo" + STRING_INSTRUMENT74 "73;PIPE;Flute" + STRING_INSTRUMENT75 "74;PIPE;Recorder" + STRING_INSTRUMENT76 "75;PIPE;Pan Flute" + STRING_INSTRUMENT77 "76;PIPE;Bottle Blow" + STRING_INSTRUMENT78 "77;PIPE;Shakuhachi" + STRING_INSTRUMENT79 "78;PIPE;Whistle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT80 "79;PIPE;Ocarina" + STRING_INSTRUMENT81 "80;SYNTH LEAD;Lead 1(square)" + STRING_INSTRUMENT82 "81;SYNTH LEAD;Lead 2(sawtooth)" + STRING_INSTRUMENT83 "82;SYNTH LEAD;Lead 3(calliope)" + STRING_INSTRUMENT84 "83;SYNTH LEAD;Lead 4(chiffer)" + STRING_INSTRUMENT85 "84;SYNTH LEAD;Lead 5(charang)" + STRING_INSTRUMENT86 "85;SYNTH LEAD;Lead 6(voice)" + STRING_INSTRUMENT87 "86;SYNTH LEAD;Lead 7(5th sawtooth)" + STRING_INSTRUMENT88 "87;SYNTH LEAD;Lead 8(bass&lead)" + STRING_INSTRUMENT89 "88;SYNTH PAD;Pad 1(new age)" + STRING_INSTRUMENT90 "89;SYNTH PAD;Pad 2(warm)" + STRING_INSTRUMENT91 "90;SYNTH PAD;Pad 3(polysynth)" + STRING_INSTRUMENT92 "91;SYNTH PAD;Pad 4(choir)" + STRING_INSTRUMENT93 "92;SYNTH PAD;Pad 5(bowed glass)" + STRING_INSTRUMENT94 "93;SYNTH PAD;Pad 6(metal)" + STRING_INSTRUMENT95 "94;SYNTH PAD;Pad 7(halo)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT96 "95;SYNTH PAD;Pad 8(sweep)" + STRING_INSTRUMENT97 "96;SYNTH EFFECTS;FX 1(rain)" + STRING_INSTRUMENT98 "97;SYNTH EFFECTS;FX 2(soundtrack)" + STRING_INSTRUMENT99 "98;SYNTH EFFECTS;FX 3(crystal)" + STRING_INSTRUMENT100 "99;SYNTH EFFECTS;FX 4(atmosphere)" + STRING_INSTRUMENT101 "100;SYNTH EFFECTS;FX 5(brightness)" + STRING_INSTRUMENT102 "101;SYNTH EFFECTS;FX 6(goblin)" + STRING_INSTRUMENT103 "102;SYNTH EFFECTS;FX 7(echo drops)" + STRING_INSTRUMENT104 "103;SYNTH EFFECTS;FX 8(star-theme)" + STRING_INSTRUMENT105 "104;ETHNIC;Sitar" + STRING_INSTRUMENT106 "105;ETHNIC;Banjo" + STRING_INSTRUMENT107 "106;ETHNIC;Shamisen" + STRING_INSTRUMENT108 "107;ETHNIC;Koto" + STRING_INSTRUMENT109 "108;ETHNIC;Kalimba" + STRING_INSTRUMENT110 "109;ETHNIC;Bag Pipe" + STRING_INSTRUMENT111 "110;ETHNIC;Fiddle" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT112 "111;ETHNIC;Shanai" + STRING_INSTRUMENT113 "112;PERCUSSIVE;Tinkle Bell" + STRING_INSTRUMENT114 "113;PERCUSSIVE;Agogo" + STRING_INSTRUMENT115 "114;PERCUSSIVE;Steel Drums" + STRING_INSTRUMENT116 "115;PERCUSSIVE;Woodblock" + STRING_INSTRUMENT117 "116;PERCUSSIVE;Taiko Drum" + STRING_INSTRUMENT118 "117;PERCUSSIVE;Melodic Tom" + STRING_INSTRUMENT119 "118;PERCUSSIVE;Synth Drum" + STRING_INSTRUMENT120 "119;PERCUSSIVE;Reverse Cymbal" + STRING_INSTRUMENT121 "120;SOUND EFFECTS;Guitar Fret Noise" + STRING_INSTRUMENT122 "121;SOUND EFFECTS;Breath Noise" + STRING_INSTRUMENT123 "122;SOUND EFFECTS;Seashore" + STRING_INSTRUMENT124 "123;SOUND EFFECTS;Bird Tweet" + STRING_INSTRUMENT125 "124;SOUND EFFECTS;Telephone Ring" + STRING_INSTRUMENT126 "125;SOUND EFFECTS;Helicopter" + STRING_INSTRUMENT127 "126;SOUND EFFECTS;Applause" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT128 "127;SOUND EFFECTS;Gun Shot" + STRING_INSTRUMENT129 "135;MIDI PERCUSSION;Acoustic Bass Drum" + STRING_INSTRUMENT130 "136;MIDI PERCUSSION;Bass Drum" + STRING_INSTRUMENT131 "137;MIDI PERCUSSION;Slide Stick" + STRING_INSTRUMENT132 "138;MIDI PERCUSSION;Acoustic Snare" + STRING_INSTRUMENT133 "139;MIDI PERCUSSION;Hand Clap" + STRING_INSTRUMENT134 "140;MIDI PERCUSSION;Electric Snare" + STRING_INSTRUMENT135 "141;MIDI PERCUSSION;Low Floor Tom" + STRING_INSTRUMENT136 "142;MIDI PERCUSSION;Closed High-Hat" + STRING_INSTRUMENT137 "143;MIDI PERCUSSION;High Floor Tom" + STRING_INSTRUMENT138 "144;MIDI PERCUSSION;Pedal High Hat" + STRING_INSTRUMENT139 "145;MIDI PERCUSSION;Low Tom" + STRING_INSTRUMENT140 "146;MIDI PERCUSSION;Open High Hat" + STRING_INSTRUMENT141 "147;MIDI PERCUSSION;Low-Mid Tom" + STRING_INSTRUMENT142 "148;MIDI PERCUSSION;High-Mid Tom" + STRING_INSTRUMENT143 "149;MIDI PERCUSSION;Crash Cymbal 1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT144 "150;MIDI PERCUSSION;High Tom" + STRING_INSTRUMENT145 "151;MIDI PERCUSSION;Ride Cymbal 1" + STRING_INSTRUMENT146 "152;MIDI PERCUSSION;Chinese Cymbal" + STRING_INSTRUMENT147 "153;MIDI PERCUSSION;Ride Bell" + STRING_INSTRUMENT148 "154;MIDI PERCUSSION;Tambourine" + STRING_INSTRUMENT149 "155;MIDI PERCUSSION;Splash Cymbal" + STRING_INSTRUMENT150 "156;MIDI PERCUSSION;Cowbell" + STRING_INSTRUMENT151 "157;MIDI PERCUSSION;Crash Cymbal 2" + STRING_INSTRUMENT152 "158;MIDI PERCUSSION;Vibraslap" + STRING_INSTRUMENT153 "159;MIDI PERCUSSION;Ride Cymbal 2" + STRING_INSTRUMENT154 "160;MIDI PERCUSSION;High Bongo" + STRING_INSTRUMENT155 "161;MIDI PERCUSSION;Low Bongo" + STRING_INSTRUMENT156 "162;MIDI PERCUSSION;Mute High Conga" + STRING_INSTRUMENT157 "163;MIDI PERCUSSION;Open High Conga" + STRING_INSTRUMENT158 "164;MIDI PERCUSSION;Low Conga" + STRING_INSTRUMENT159 "165;MIDI PERCUSSION;High Timbale" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_INSTRUMENT160 "166;MIDI PERCUSSION;Low Timbale" + STRING_INSTRUMENT161 "167;MIDI PERCUSSION;High Agogo" + STRING_INSTRUMENT162 "168;MIDI PERCUSSION;Low Agogo" + STRING_INSTRUMENT163 "169;MIDI PERCUSSION;Cabasa" + STRING_INSTRUMENT164 "170;MIDI PERCUSSION;Maracas" + STRING_INSTRUMENT165 "171;MIDI PERCUSSION;Short Whistle" + STRING_INSTRUMENT166 "172;MIDI PERCUSSION;Long Whistle" + STRING_INSTRUMENT167 "173;MIDI PERCUSSION;Short Guiro" + STRING_INSTRUMENT168 "174;MIDI PERCUSSION;Long Guiro" + STRING_INSTRUMENT169 "175;MIDI PERCUSSION;Claves" + STRING_INSTRUMENT170 "176;MIDI PERCUSSION;High Wood Block" + STRING_INSTRUMENT171 "177;MIDI PERCUSSION;Low Wood Block" + STRING_INSTRUMENT172 "178;MIDI PERCUSSION;Mute Cuica" + STRING_INSTRUMENT173 "179;MIDI PERCUSSION;Open Cuica" + STRING_INSTRUMENT174 "180;MIDI PERCUSSION;Mute Triangle" + STRING_INSTRUMENT175 "181;MIDI PERCUSSION;Open Triangle" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/guitar/harrow.cur b/guitar/harrow.cur new file mode 100644 index 0000000..e4feb3e Binary files /dev/null and b/guitar/harrow.cur differ diff --git a/guitar/help/BkGnd.gif b/guitar/help/BkGnd.gif new file mode 100644 index 0000000..7045812 Binary files /dev/null and b/guitar/help/BkGnd.gif differ diff --git a/guitar/help/BkGnd2.gif b/guitar/help/BkGnd2.gif new file mode 100644 index 0000000..4b307a8 Binary files /dev/null and b/guitar/help/BkGnd2.gif differ diff --git a/guitar/help/index.html b/guitar/help/index.html new file mode 100644 index 0000000..09f3973 --- /dev/null +++ b/guitar/help/index.html @@ -0,0 +1,117 @@ + + +TabMaster Help + + +

TabMaster v2.00

+

+ Applying your license key.
+ Create a new tablature.
+ Open an existing tablature.
+ Playing a tablature.
+ Saving a tablature.
+ Creating ranges.
+ Playing a range within a tablature.
+ Open a MIDI file.
+ Chord lookup.
+ Displaying model scales.
+ Basic settings.
+ MIDI instrument selection.
+ Adjusting playback tempo.
+ Fretboard tips and tricks.
+ Troubleshooting.

+

+

 

+

 

+

Applying Your License Key

+

You received a license key when you purchased your copy of TabMaster. The license consists of three lines. The first line is the "BEGIN LICENSE" keyword. The second line is the license, and the third line is the "END LICENSE" keyword. For versions 2.00 and above, TabMaster will prompt for the license key. Users who are upgrading from previous versions should go to "Help"/"Apply License". Paste all three lines of the license into the text box and click "Ok". If you did not receive a license key or would like to upgrade, click on "Request License" button in the same dialog box.

+


+

+

Create a New Tablature

+

Selecting "File"/"New Project" from the main menu will display an empty
+tablature window. Clicking the "insert" key will display a dialog box
+where you can enter attributes for your tablature entry (ie) string, fret,
+action, and duration. Click "Apply" to accept this entry into the tablature.
+To save the tablature select "File"/"Save" or "File"/"Save As" from the
+main menu, give your project a name and click "Ok".
+
+

+

 

+


+

+

Open Existing Tablature/Project

+

To open an existing project, select "File"/"Open Project" from the main
+menu. Select the project to open and click "Ok". To import an existing
+tablature file select "File"/"Import Tablature" from the main menu.
+Select the file you want to import and click "Ok". TabMaster has been
+tested with various types of tablature files. Due to the varying styles
+of tablature authors, TabMaster may experience difficulty parsing some
+tablature. If this occurs, please contact technical support, attach
+the tablature file to your EMail. TabMaster should never have any
+difficulty reading back tablature that was created with TabMaster.
+You can also drag a tablature file directly into the TabMaster main window. This will create a project for the tab and allow you to begin working.
+

+


+

+

Playing Tablature

+

Assuming that you have loaded a tablature into TabMaster, select "Tablature"/"Play" or "Tablature"/"Play Repeated" from the main menu.
+There is also an option to "Play Range" or "Play Range Repeated".
+Please see help on ranges to use this feature. This will play back the entries appearing in your tablature. You can cancel repeated playback by clicking on the tablature window itself or selecting "Tablature"/"Stop" from the main menu. You can also play back tablature by right clicking the mouse onto the tablature window. This will bring up a floating menu where you can select "Play" or
+

+


+

+

Saving Tablature

+

To save the tablature select "File"/"Save" or "File"/"Save As" from the
+main menu, give your project a name and click "Ok"

+


+

+

Working with Ranges

+

TabMaster provides a feature to allow you to break down complicated passages
+into smaller pieces, simplifying the learning process. To create a range glide the mouse over the tab entry of the first item in the range. Right click the mouse to bring up the floating menu. Choose the "Start Range" menu selection. Now glide the mouse to the tab entry of the last item in the range. Right click the mouse to bring up the floating menu. Choose "End Range" from the menu. To play the range select "Tablature"/"Play Range" or "Tablature"/"Play Range Repeated" from the main menu. A dialog box will appear. Select range you have just created and click "Ok". You can modify the range by selecting "Edit"/"Ranges" from the main menu. A dialog box will appear. Double click the range item you wish to edit. You can also insert or remove ranges from this dialog box.
+

+

 

+


+

+

Working with MIDI Files

+

TabMaster provides a feature to allow you to import MIDI files. TabMaster translates the pitch notes from the MIDI file into the corresponding guitar pitch and selects a string and fret at which to play the note(s). To open a MIDI file select "File"/"Import MIDI File" from the main menu. TabMaster will decode the MIDI file and present you with a dialog box containing the list of tracks encountered in the file. Select the track you wish to tabulate. Currently, TabMaster only supports one track at a time. You can also drag MIDI files directly into the TabMaster main window.

+


+

+

Chord Library

+

TabMaster comes with a chord library of over 900 chords. To lookup a chord select "Chords"/"Lookup" from the main menu. A dialog box will appear with the chords arranged alphabetically. Selecting a chord will sound the notes of the chord and display them on the fretboard. +

+


+

+

Scales

+

TabMaster comes with a chord library of over 900 chords. To lookup a chord select "Chords"/"Lookup" from the main menu. A dialog box will appear with the chords arranged alphabetically. Selecting a chord will sound the notes of the chord and display them on the fretboard. +

+

 

+


+

+

Settings

+

 

+


+

+

Instrument Selection

+

 

+


+

+

Adjusting Tempo

+

 

+


+

+

Tips

+

 

+


+

+

Troubleshooting

+

 

+


+

+ +
+
+
+
+ + + \ No newline at end of file diff --git a/guitar/icon1.ico b/guitar/icon1.ico new file mode 100644 index 0000000..cd5eef4 Binary files /dev/null and b/guitar/icon1.ico differ diff --git a/guitar/install.gid b/guitar/install.gid new file mode 100644 index 0000000..e69de29 diff --git a/guitar/license.cpp b/guitar/license.cpp new file mode 100644 index 0000000..61f14a2 --- /dev/null +++ b/guitar/license.cpp @@ -0,0 +1,119 @@ +#include +#include +#include +#include + +/* + The license will be uuencoded on top of xor. This should be sufficient to protect the contents. + Lic: TM105R20020101013001EF + VVVVVVYYYYMMDDTTDDCCCC + + XX=version TM105R. should check this against this product version and release + YYYY=year of license issuance. 30 day license will use this value to expire itself. + MM=month of license issuance 30 day license will use this value to expiure + DD=day of license issuance + TT=type of license + 01=30 day license, expires 30 days from issuance. + 02=Full license, never expires. + DD=for type 01 license, indicates number of days license is good for. + CCCC=checksum, just add up ASCII values of the characters through TT, display in hex. +*/ + +const String License::smBeginLicense="BEGIN LICENSE"; +const String License::smEndLicense="END LICENSE"; + +String License::generate(const String &strProductVersion,const SystemTime &issueDate,LicenseType licenseType,int dayCount) +{ + String strLicenseKey; + String strIssueDate; + String strLicenseType; + String strDayCount; + String strChecksum; + + strLicenseKey=String("TM"); + strLicenseKey+=strProductVersion.substr(0,3); + ::sprintf(strIssueDate,"%4d%02d%02d",issueDate.year(),issueDate.month(),issueDate.day()); + strLicenseKey+=strIssueDate; + ::sprintf(strLicenseType,"%02d",licenseType); + strLicenseKey+=strLicenseType; + ::sprintf(strDayCount,"%02d",dayCount); + strLicenseKey+=strDayCount; + ::sprintf(strChecksum,"%04lx",calculateChecksum(strLicenseKey)); + strLicenseKey+=strChecksum; + return UUTool::encode(xor(strLicenseKey)); +} + +String numericEncode(const String &strLicense) +{ + return String(); +} + +String numericDecode(const String &strLicense) +{ + return String(); +} + +bool License::fromLines(Block &strLicenseLines) +{ + if(3!=strLicenseLines.size())return false; + if(!(strLicenseLines[0]==smBeginLicense))return false; + if(!(strLicenseLines[2]==smEndLicense))return false; + return fromString(strLicenseLines[1]); +} + +// TM105R2002040301 30 03d8 + +bool License::fromString(const String &strLicense) +{ + VersionInfo versionInfo; + SystemTime currDate; + SystemTime expireDate; + String strHeader; + String strDecoded; + String strVersion; + int hashCode; + + mUUEncodedLicense=strLicense; + strDecoded=xor(UUTool::decode(strLicense)); + strHeader=strDecoded.substr(0,1); + if(!(strHeader==String("TM")))return false; + mProductVersion=strDecoded.substr(2,5); + mIssueDate.year(strDecoded.substr(6,9).toInt()); + mIssueDate.month((SystemTime::Month)strDecoded.substr(10,11).toInt()); + mIssueDate.day(strDecoded.substr(12,13).toInt()); + mLicenseType=(LicenseType)strDecoded.substr(14,15).toInt(); + mDayCount=strDecoded.substr(16,17).toInt(); + hashCode=strDecoded.substr(18,21).hex(); + if(hashCode!=calculateChecksum(strDecoded.substr(0,17)))return false; + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return mIsValid=true; + expireDate=mIssueDate; + expireDate.daysAdd360(mDayCount); + if(currDate>=expireDate)return false; + return mIsValid=true; +} + +String License::xor(const String &strLicense) +{ + String strEncoded; + int strLength; + + strEncoded.reserve((strLength=strLicense.length())+1); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainFrame mainFrame; + VersionInfo versionInfo; + String strCommandLine; + strCommandLine=lpszCmdLine; + + if(strCommandLine=="GENPERM") + { + Registration::getInstance().generatePermanentLicense(); + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + else if(!(strCommandLine=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.diversified-software.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } +// GlobalDefs::setLogLevel(GlobalDefs::Verbose); + GlobalDefs::setLogLevel(GlobalDefs::NoLog); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); + +} + diff --git a/guitar/mainfrm.cpp b/guitar/mainfrm.cpp new file mode 100644 index 0000000..cab63f1 --- /dev/null +++ b/guitar/mainfrm.cpp @@ -0,0 +1,1085 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mGUIFretboardHandler.setCallback(this,&MainFrame::guiFretboardHandler); + mDropFilesHandler.setCallback(this,&MainFrame::dropFilesHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::insertHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::removeHandler(VectorHandler::DropFilesHandler,&mDropFilesHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(LOWORD(someCallbackData.wParam())) + { + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + return false; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + return false; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + return false; + } + switch(someCallbackData.wParam()) + { + case MENU_FILE_PRINT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_PRINT",GlobalDefs::Verbose); + handleFilePrint(); + break; + case MENU_FILE_NEW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_NEW",GlobalDefs::Verbose); + handleFileNew(); + break; + case MENU_FILE_OPEN : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_OPEN",GlobalDefs::Verbose); + handleOpenProject(); + break; + case MENU_FILE_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_IMPORT",GlobalDefs::Verbose); + handleFileImport(); + break; + case MENU_FILE_MIDI_IMPORT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_MIDI_IMPORT",GlobalDefs::Verbose); + handleMIDIImport(); + break; + case MENU_FILE_CLOSE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_CLOSE",GlobalDefs::Verbose); + handleFileClose(); + break; + case MENU_FILE_EXIT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_EXIT",GlobalDefs::Verbose); + handleFileExit(); + break; + case MENU_FILE_SAVE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVE",GlobalDefs::Verbose); + handleFileSave(); + break; + case MENU_FILE_SAVEAS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FILE_SAVEAS",GlobalDefs::Verbose); + handleFileSaveAs(); + break; + case MENU_VIEW_FRETBOARD : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_VIEW_FRETBOARD",GlobalDefs::Verbose); + handleViewFretboard(); + break; + case MENU_TABLATURE_PLAY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAY",GlobalDefs::Verbose); + handlePlayTablature(); + break; + case MENU_TABLATURE_PLAYTOEND : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYTOEND",GlobalDefs::Verbose); + handlePlayTablatureFromCurrent(); + break; + case MENU_TABLATURE_PLAYREPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYREPEATED",GlobalDefs::Verbose); + handlePlayRepeated(); + break; + case MENU_TABLATURE_PLAYRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE",GlobalDefs::Verbose); + handlePlayRange(); + break; + case MENU_TABLATURE_PLAYRANGE_REPEATED : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_PLAYRANGE_REPEATED",GlobalDefs::Verbose); + handlePlayRangeRepeated(); + break; + case MENU_TABLATURE_STOP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_STOP",GlobalDefs::Verbose); + handleStopPlay(); + break; + case MENU_TABLATURE_ENTRYPROPS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_ENTRYPROPS",GlobalDefs::Verbose); + handleEntryProperties(); + break; + case MENU_TABLATURE_SETENDRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETENDRANGE",GlobalDefs::Verbose); + handleSetEndRange(); + break; + case MENU_TABLATURE_SETSTARTRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_TABLATURE_SETSTARTRANGE",GlobalDefs::Verbose); + handleSetStartRange(); + break; + case MENU_EDIT_RANGES : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_RANGES",GlobalDefs::Verbose); + handleEditRanges(); + break; + case MENU_OPTIONS_INCREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_INCREASETEMPO",GlobalDefs::Verbose); + handleIncreaseTempo(); + break; + case MENU_OPTIONS_DECREASETEMPO : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_DECREASETEMPO",GlobalDefs::Verbose); + handleDecreaseTempo(); + break; + case MENU_OPTIONS_SETTINGS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_OPTIONS_SETTINGS",GlobalDefs::Verbose); + handleSettings(); + break; + case MENU_CHORDS_LOOKUP : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_LOOKUP",GlobalDefs::Verbose); + handleChordLookup(); + break; + case MENU_CHORDS_ENTER : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_CHORDS_ENTER",GlobalDefs::Verbose); + handleChordEnter(); + break; + case MENU_FRETBOARD_CLEAR : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_CLEAR",GlobalDefs::Verbose); + handleClearFretboard(); + break; + case MENU_FRETBOARD_SHOWALLPOSITIONS : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_FRETBOARD_SHOWALLPOSITIONS",GlobalDefs::Verbose); + handleShowAllPositions(); + break; + case MENU_SCALES_SHOW : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_SCALES_SHOW",GlobalDefs::Verbose); + handleShowScales(); + break; + case MENU_EDIT_CUT : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_CUT",GlobalDefs::Verbose); + handleCut(); + break; + case MENU_EDIT_COPY : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_COPY",GlobalDefs::Verbose); + handleCopy(); + break; + case MENU_EDIT_PASTE : + GlobalDefs::outDebug("[MainFrame::commandHandler]MENU_EDIT_PASTE",GlobalDefs::Verbose); + handlePaste(); + break; + case MENU_HELP_APPLY_LICENSE : + handleHelpApplyLicense(); + break; + case MENU_HELP_ABOUT : + handleHelpAbout(); + break; + case MENU_HELP_INDEX : + handleHelpIndex(); + break; + case IDM_CASCADE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CASCADE",GlobalDefs::Verbose); + cascade(); + break; + case IDM_TILE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_TILE",GlobalDefs::Verbose); + tile(); + break; + case IDM_ARRANGE : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_ARRANGE",GlobalDefs::Verbose); + arrange(); + break; + case IDM_CLOSEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_CLOSEALL",GlobalDefs::Verbose); + closeAll(); + break; + case IDM_MINIMIZEALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_MINIMIZEALL",GlobalDefs::Verbose); + minimizeAll(); + break; + case IDM_RESTOREALL : + GlobalDefs::outDebug("[MainFrame::commandHandler]IDM_RESTOREALL",GlobalDefs::Verbose); + restoreAll(); + break; + default : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleOpenProject(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::keyDownHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + GlobalDefs::outDebug("[MainFrame::paintHandler]",GlobalDefs::Verbose); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &callbackData) +{ + ::DragAcceptFiles(*this,true); + GlobalDefs::outDebug("[MainFrame::createHandler]",GlobalDefs::Verbose); + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + createControls(callbackData); + Control desktop(::GetDesktopWindow(),0,false); + setWindowPos(desktop.width()>InitialWidth?InitialWidth:desktop.width(),desktop.height()>InitialHeight?InitialHeight:desktop.height()); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + updateHistory(); + if(!validateLicense())postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::dropFilesHandler(CallbackData &someCallbackData) +{ + Block strFileNames; + String strPathFileName; + String strPathFileProject; + String strExtension; + File inFile; + + GlobalDefs::outDebug("MainFrame::dropFileHandler"); + DragQueryFile::getFileNames((HDROP)someCallbackData.wParam(),strFileNames); + for(int index=0;indexwindowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::guiFretboardHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + + GlobalDefs::outDebug("[MainFrame::guiFretboardHandler]",GlobalDefs::Verbose); + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow); + } + if(!someCallbackData.lParam()) + { + ((FretViewWindow&)*mdiWindow).clearNotes(); + } + else + { + if(CBCommands::FBShowTab==someCallbackData.wParam()) + { + const TabEntry &entry=*(TabEntry*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(entry,true,false); // show note only, do not play. used by tabpage + } + else if(CBCommands::FBPlayNote==someCallbackData.wParam()) + { + const Note ¬e=*(Note*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(note); + } + else if(CBCommands::FBPlayScale==someCallbackData.wParam()) // This is used by the scale dialog + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale,true); + } + else if(CBCommands::FBShowScale==someCallbackData.wParam()) // This is used by scale dialog to show, but not play. + { + const Scale &scale=*(Scale*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(scale); + } + else if(CBCommands::FBPlayFrettedNotes==someCallbackData.wParam()) // not currently used see ScaleDlg + { + const FrettedNotes &frettedNotes=*(FrettedNotes*)someCallbackData.lParam(); + ((FretViewWindow&)*mdiWindow).setNote(frettedNotes); + } + else if(CBCommands::FBPlayTab==someCallbackData.wParam()) + { + SmartPointer mdiWindow; + if(getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),mdiWindow)) + ((FretViewWindow&)*mdiWindow).setNote(*(TabEntry*)someCallbackData.lParam(),true); + } + else if(CBCommands::FBPlayChord==someCallbackData.wParam()) + { + const Music::Chord &chord=*(Music::Chord*)someCallbackData.lParam(); + SmartPointer mdiWindow; + getActive(mdiWindow); + if(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + TabEntry entry; + entry.fromChord(chord); + ((ViewWindow&)*mdiWindow).insert(entry); + } + else if(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)) + { + ((FretViewWindow&)*mdiWindow).setNote(chord,true); + } + } + } + return false; +} + +void MainFrame::createControls(const CallbackData &callbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mToolBar.windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(callbackData.loWord()); + cRect.bottom(callbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); +} + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MENU_FILE_NEW,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MENU_FILE_SAVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MENU_FILE_PRINT,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,-1,ToolBarButton::StateIndeterminate,ToolBarButton::StyleButton)); +} + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + +void MainFrame::createProjectView(const String &strPathTabFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathTabFile.isNull())return; + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject(strPathTabFile)) + { + pViewWindow->close(); + } + else + { + pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(pViewWindow->getPathFileProject()); + } +} + +void MainFrame::createProjectView(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->createProject()) + { + pViewWindow->close(); + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + mStatusControl->setText(String(STRING_EDITHINT)); +} + +bool MainFrame::isActive(SmartPointer &viewWindow,const String &strPathFileProject) +{ + SmartPointer mdiWindow; + Array > mdiWindows; + String strTitle; + + if(!getDocuments(mdiWindows))return false; + for(int index=0;indexclassName()==String(STRING_TABVIEWWINDOWCLASSNAME)) + { + ViewWindow &view=(ViewWindow&)*mdiWindow; + if(view.getTitle()==strPathFileProject) + { + viewWindow=mdiWindow; + return true; + } + } + } + return false; +} + +// menu handlers + +void MainFrame::handleEntryProperties(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).modifyProperties(); + return; +} + +void MainFrame::handleFilePrint(void) +{ + Printer printer; + PrintManager printManager; + SmartPointer mdiWindow; + String strCaption; + PureBitmap pureBitmap; + Rect windowRect; + + if(!printManager.choosePrinter(*this,printer))return; + if(!getActive(mdiWindow))return; + mdiWindow->windowText(strCaption); + mdiWindow->windowRect(windowRect); + pureBitmap.screenBitmap(windowRect); + if(!printManager.openPrinter(printer,*this,strCaption)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error opening printer, check the printer and try again.",MB_ICONSTOP); + return; + } + if(!printManager.printBitmap(pureBitmap,true,(WORD)300)) + { + ::MessageBeep(0); + MessageBox::messageBox(*this,printer.printerName(),"Error sending document to printer, check the printer and try again.",MB_ICONSTOP); + } + printManager.closePrinter(); +} + +void MainFrame::handleFileNew(void) +{ + createProjectView(); +} + +void MainFrame::handleFileExit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +void MainFrame::handleFileImport(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + openDialog.creationFlags(OpenDialog::ALLOWMULTISELECT); + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + for(int index=0;index mdiWindow; + if(!getActive(mdiWindow))return; + mdiWindow->close(); +} + +void MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=(ViewWindow&)*mdiWindow; + String strTitle=viewWindow.getTitle(); + if(viewWindow.getTitle()==String(STRING_NOTITLE)){handleFileSaveAs();return;} + viewWindow.saveProject(); + return; +} + +void MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileProject; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + ((ViewWindow&)*mdiWindow).saveProject(strPathFileProject); + updateHistory(strPathFileProject); +} + +void MainFrame::handleChordLookup() +{ + ChordDialog chordDialog; + chordDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleChordEnter() +{ + ChordBuilderDialog chordBuilderDialog; + chordBuilderDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handlePlayTablature(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).play(); + return; +} + +void MainFrame::handlePlayTablatureFromCurrent() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playFromCurrent(); + return; +} + +void MainFrame::handleStopPlay(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).stopPlay(); + return; +} + +void MainFrame::handlePlayRepeated() +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).playRepeated(); + return; +} + +void MainFrame::handlePlayRange(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRange(rangeDialog.getSelection()); +} + +void MainFrame::handlePlayRangeRepeated(void) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries(),true))return; + viewWindow.playRangeRepeated(rangeDialog.getSelection()); +} + +void MainFrame::handleIncreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).increaseTempo(); + return; +} + +void MainFrame::handleDecreaseTempo(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).decreaseTempo(); + return; +} + +void MainFrame::handleCut(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).cut(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).cut(); + return; +} + +void MainFrame::handleCopy(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).copy(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).copy(); + return; +} + +void MainFrame::handlePaste(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if((mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))((ViewWindow&)*mdiWindow).paste(); + else if((mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME)))((FretViewWindow&)*mdiWindow).paste(); + return; +} + +void MainFrame::handleSettings(void) +{ + SettingsDialog settingsDialog; + settingsDialog.perform(*this); +} + +void MainFrame::handleSetStartRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setStartRange(); + return; +} + +void MainFrame::handleSetEndRange(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ((ViewWindow&)*mdiWindow).setEndRange(); + return; +} + +void MainFrame::handleViewFretboard(void) +{ + SmartPointer fretWindow; + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow)) + { + insert(*::new FretViewWindow()); + operator[](size()-1).createWindow(*this,String(STRING_FRETVIEWWINDOWCLASSNAME),"Fretboard","fretMenu","APP_ICON"); + getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow); + } + if(fretWindow->isIconic())fretWindow->show(SW_RESTORE); + else fretWindow->top(); +} + +void MainFrame::handleShowAllPositions(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + return; + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.showAllPositions(); +} + +void MainFrame::handleClearFretboard(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_FRETVIEWWINDOWCLASSNAME))) + { + handleViewFretboard(); + getActive(mdiWindow); + } + FretViewWindow &fretViewWindow=((FretViewWindow&)*mdiWindow); + fretViewWindow.clearNotes(); +} + +void MainFrame::handleEditRanges(void) +{ + SmartPointer mdiWindow; + RangeDialog rangeDialog; + TabRanges ranges; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_TABVIEWWINDOWCLASSNAME)))return; + ViewWindow &viewWindow=((ViewWindow&)*mdiWindow); + viewWindow.getTabRanges(ranges); + if(!rangeDialog.perform(*this,ranges,viewWindow.getNumTabEntries()))return; + viewWindow.setTabRanges(rangeDialog.getTabRanges()); +} + +void MainFrame::handleShowScales() +{ + ScaleDialog scaleDialog; + scaleDialog.perform(*this,CallbackPointer(&mGUIFretboardHandler)); +} + +void MainFrame::handleHelpAbout() +{ + VersionInfo versionInfo; + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); +} + +void MainFrame::handleHelpIndex(void) +{ + if(!BrowserHelper::launchBrowser(String(STRING_HOST))) + { + MessageBox::messageBox(*this,"Error","Unable to launch browser."); + return; + } +} + +void MainFrame::applyHistory(PureMenu &pureMenu) +{ + Registry registry; + Block nameList; + PureMenu fileMenu; + String strItem; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex mdiWindow; + Array > mdiWindows; + + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + Registry registry; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + registry.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class StatusBarEx; +class ViewWindow; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual bool preDestroy(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=501,StartDynamicID=30000}; + enum{InitialWidth=800,InitialHeight=600}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType guiFretboardHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dropFilesHandler(CallbackData &someCallbackData); + bool isActive(SmartPointer &viewWindow,const String &strPathFileProject); + void openProjectView(const String &strPathProjectFile); + void createProjectView(const String &strPathTabFile); + void createProjectView(void); + void handleEntryProperties(void); + void handleFilePrint(void); + void handleOpenProject(void); + void handleOpenProject(CallbackData &callbackData); + void handleOpenProject(const String &strPathFileProject); + void handleFileImport(void); + void handleMIDIImport(void); + void handleFileClose(void); + void handleFileExit(void); + void handleFileNew(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleChordLookup(void); + void handleChordEnter(void); + void handleCut(void); + void handleCopy(void); + void handlePaste(void); + void createControls(const CallbackData &callbackData); + void createToolBar(void); + void insertHandlers(void); + void removeHandlers(void); + void handlePlayTablature(void); + void handlePlayTablatureFromCurrent(void); + void handlePlayRange(void); + void handlePlayRangeRepeated(void); + void handleStopPlay(void); + void handleViewFretboard(void); + void handlePlayRepeated(void); + void handleIncreaseTempo(void); + void handleDecreaseTempo(void); + void handleSettings(void); + void handleSetEndRange(void); + void handleSetStartRange(void); + void handleEditRanges(void); + void handleShowScales(void); + void handleClearFretboard(void); + void handleShowAllPositions(void); + void handleHelpAbout(void); + void handleHelpIndex(void); + void handleHelpApplyLicense(void); + void handleHistogram(void); + void applyHistory(PureMenu &menu); + void updateHistory(const String &pathFileName); + void updateHistory(void); + void removeHistory(PureMenu &pureMenu); + bool validateLicense(void)const; + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mGUIFretboardHandler; + Callback mDropFilesHandler; + SmartPointer mStatusControl; + ToolBar mToolBar; +}; +#endif diff --git a/guitar/makeres.exe b/guitar/makeres.exe new file mode 100644 index 0000000..fc1aebe Binary files /dev/null and b/guitar/makeres.exe differ diff --git a/guitar/midi/2112.mid b/guitar/midi/2112.mid new file mode 100644 index 0000000..7af0e6f Binary files /dev/null and b/guitar/midi/2112.mid differ diff --git a/guitar/midi/2112TRK5.prj b/guitar/midi/2112TRK5.prj new file mode 100644 index 0000000..c73786a --- /dev/null +++ b/guitar/midi/2112TRK5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\2112TRK5_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4) diff --git a/guitar/midi/2112TRK5.tab b/guitar/midi/2112TRK5.tab new file mode 100644 index 0000000..53df942 --- /dev/null +++ b/guitar/midi/2112TRK5.tab @@ -0,0 +1,190 @@ +%TabMaster v1.05r% + + +E|---------2-3-0-0-0-----------------2-----2-----------------2--- +B|-----3---3-3-1-1-1---1-3-3---1-3---3-3---3---1-3-3---1-3---3--- +G|---2-0-0-2-0-2-2-2-1-2-0-0-1-2-0-0-2-0-0-2---2-0-0---2-0-0-2--- +D|-2-2---0-0---2-2-2-2-2---0-2-2---0-0---0-0-2-2---0-2-2---0-0-2- +A|-2-0-3-----3-0-0-0-2-0-3---2-0-3-----3-----2-0-3---2-0-3-----2- +E|-0-----3-----------0-----3-0-----3-----3---0-----3-0-----3---0- + + + +E|-----------3-2-----2-----2---15-14-12-15-10-5-10-8-3-8-10-5-0--------- +B|-1-3-------3-3-3---3-3---3-------------------------------------------- +G|-2-0-0---2-0-2-0-0-2-0-0-2------------------------------------2------- +D|-2---0-2-2-0-0---0-0---0-0-0------------------------------------2-4-4- +A|-0-3---2-0-----3-----3-----0------------------------------------0-2-2- +E|-----3-0---3-----3-----3---------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------------------0--------- +G|-------------------------------------2-2---------------2-2----- +D|-4-4-4-4-4-4-4-4-2-0-0-0-0-0-0-0-0-0-0---2-2-2-2-2-2-2-0---4-4- +A|-2-2-2-2-2-2-2-2-0---------------------4-0-0-0-0-0-0-----4-2-2- +E|-------------------3-3-3-3-3-3-3-3-3--------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----------2-----------------------------------------2-2------- +D|-4-4-4-4-4-0-4-4-4-4-4-4-4-4-4-4-2-0-0-0-0-0-0-0-0-0-0---2-2-2- +A|-2-2-2-2-2---2-2-2-2-2-2-2-2-2-2-0---------------------4-0-0-0- +E|-----------------------------------3-3-3-3-3-3-3-3-3----------- + + + +E|--------------------------------------------------------------- +B|-------0-0-0--------------------------------------------------- +G|-------------2-----------------2------------------------------- +D|-2-2-2-2-2-2-0---4-4-4-4-4-4-4-0-4-4-4-4-4-4-4-4-4-4-2-0-0-0-0- +A|-0-0-0---------4-2-2-2-2-2-2-2---2-2-2-2-2-2-2-2-2-2-0--------- +E|-------------------------------------------------------3-3-3-3- + + + +E|--------------------------------------------------------------- +B|---------------------------0-0-0------------------------------- +G|-----------2-2-------------------2-----------------2----------- +D|-0-0-0-0-0-0---2-2-2-2-2-2-2-2-2-0---4-4-4-4-4-4-4-0-4-4-4-4-4- +A|-------------4-0-0-0-0-0-0---------4-2-2-2-2-2-2-2---2-2-2-2-2- +E|-3-3-3-3-3----------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------------0-0-0----------- +G|-------------------------------2-2-------------------2--------- +D|-4-4-4-4-4-2-0-0-0-0-0-0-0-0-0-0---2-2-2-2-2-2-2-2-2-0---4----- +A|-2-2-2-2-2-0---------------------4-0-0-0-0-0-0---------4-2----- +E|-------------3-3-3-3-3-3-3-3-3-----------------------------0-2- + + + +E|-------------------2-0-0-----0-------2-2-----------------------2-0-0--- +B|---------2-0-3-0---3-2-2---2-3-0-3-0-3-3-------------2-0-3-0---3-2-2--- +G|---------2---------2-1-0---2---------2-2-------------2---------2-1-0--- +D|---------2-4---4---------0-2-4---4-------------------2-4---4---------0- +A|---0-----0-0---0-0---0-0-0-0---------0-0-------0-----0-0---0-0---0-0-0- +E|-3---3-0---------------------------------0-2-3---3-0------------------- + + + +E|---0-------2-2-----------------------2-0-0-----0-------2-2--------------- +B|-2-3-0-3-0-3-3-------------2-0-3-0---3-2-2---2-3-0-3-0-3-3-------------2- +G|-2---------2-2-------------2---------2-1-0---2---------2-2-------------2- +D|-2-4---4-------------------2-4---4---------0-2-4---4-------------------2- +A|-0---------0-0-------0-----0-0---0-0---0-0-0-0---------0-0-------0-----0- +E|---------------0-2-3---3-0---------------------------------0-2-3---3-0--- + + + +E|---------2-0-0-----0-------2-2-------------2---2---2-----2-7-2---------------2--- +B|-0-3-0---3-2-2---2-3-0-3-0-3-3-------------4-0-4-0-4-0-0-4-0-3-0-3-2-------0-3-0- +G|---------2-1-0---2---------2-2-----------------------------------0-2-2-2--------- +D|-4---4---------0-2-4---4-------------------4---4---4---4-4---4---0-2-0-----4-4--- +A|-0---0-0---0-0-0-0---------0-0-------0-----2---2---2---2-2---2-----0---4-0-2-2--- +E|-------------------------------0-2-3---3-0-------------------2---3-----------2--- + + + +E|-----------------------------------------------------2-0-0-4----- +B|-3-2-------------------------------------------------3-2-0------- +G|-0-2-2-2---------------------------------------------2-2--------- +D|-0-2-0-----4-------------4-------------4-------------0-2-2---4--- +A|---0---4-0-2-------0-----2-------0-----2-------0-----0-0-2---2--- +E|-3-----------0-2-3---3-0-2-0-2-3---3-0-2-0-2-3---3-0-----------0- + + + +E|---------------------------------------2-0-0-4------------------- +B|---------------------------------------3-2-0--------------------- +G|---------------------------------------2-2-----2---------------0- +D|-----------4-------------4-------------0-2-2---2-2-2-2-2-2-2---2- +A|-----0-----2-------0-----2-------0-----0-0-2-----0-0-0-0-0-0-0-0- +E|-2-3---3-0-2-0-2-3---3-0-2-0-2-3---3-0-----------------------0-3- + + + +E|---------------------------------------3----------------------- +B|-------------------------------1-1-------0--------------------- +G|-------------------------2-2-2-2-0-0-------0---0-2-0-2-0-2-0-2- +D|---------2-----3-3-3-3-3-3-3-3-3---0---------2----------------- +A|-0-0-0-0-------3-3-3-3-3-3-3-3-3-3---0------------------------- +E|-3-3-3-3-3-3-0-1-1-1-1-1-1-1-1-1---3--------------------------- + + + +E|-----------------------0-2-6-6-3-5-3-0---------0----------------- +B|-----------------1-2-3-----------------1-3-1-----1-----1---3-1--- +G|-0---------0-1-2-----------------------------2-----0-2---2-----2- +D|---3-0-1-2------------------------------------------------------- +A|----------------------------------------------------------------- +E|----------------------------------------------------------------- + + + +E|---------------------0-------------------------2----------------------------------------------------- +B|---------------------1-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-3-0-3-0-3-0-3-3-0-3-0- +G|-2-0---2-0-----------0-------------------------2-------------------------0--------------------------- +D|-----2-----3-3-3-3-3---4---4---4---4---4---4---0-4---4---4---4---4---4---0---4---4---4---4---4---4--- +A|-------------3-3-3-3-3-2---2---2---2---2---2-----2---2---2---2---2---2-------2---2---2---2---2---2--- +E|-------------1-1-1-1-----------------------------------------------------3--------------------------- + + + +E|-2-----------------------------------------------------2-----------------------------------------------------2--------- +B|-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3- +G|-2-------------------------0---------------------------2-------------------------0---------------------------2--------- +D|-0-4---4---4---4---4---4---0---4---4---4---4---4---4---0-4---4---4---4---4---4---0---4---4---4---4---4---4---0-4---4--- +A|---2---2---2---2---2---2-------2---2---2---2---2---2-----2---2---2---2---2---2-------2---2---2---2---2---2-----2---2--- +E|---------------------------3-----------------------------------------------------3------------------------------------- + + + +E|---------------------2-0-7-0-2-7-2-7-0-2-7-0-7-2-0-0-5-0-5-0-5-0-5-0-5-3---3---3---3---3---3---3---3---3---3---3----------------------- +B|-0-3-0-3-3-0-3-0-3-0-0-----0-----0-----0-----0-----3---3---3---3---3---3-1-1-3-1-3-1-3-1-3-3-1-3-1-3-1-1-3-1-3-1-3-0-3-0-3-0-3-0-3-3-0- +G|-----------------0---------------------------------2---2---2---2---2---0---0---0---0---0---0---0---0---0---0---0----------------------- +D|-4---4---4---4---0---2-----2-----2-----2-----2-----0---0---0---0---0-----------------------------------------------4---4---4---4---4--- +A|-2---2---2---2---------------------------------------------------------3---3---3---3---3---3---3---3---3---3---3---2---2---2---2---2--- +E|-----------------3--------------------------------------------------------------------------------------------------------------------- + + + +E|-----2-----------------------------2-0-7-0-2-7-2-7-0-2-7-0-7-2-0-0-5-0-5-0-5-0-5-0-5-3---3---3---3---3---3---3---3---3---3---3------- +B|-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-----0-----0-----0-----0-----3---3---3---3---3---3-1-1-3-1-3-1-3-1-3-3-1-3-1-3-1-1-3-1-3-1-3-0-3- +G|-----2-------------------------0---------------------------------2---2---2---2---2---0---0---0---0---0---0---0---0---0---0---0------- +D|-4---0-4---4---4---4---4---4---0---2-----2-----2-----2-----2-----0---0---0---0---0-----------------------------------------------4--- +A|-2-----2---2---2---2---2---2---------------------------------------------------------3---3---3---3---3---3---3---3---3---3---3---2--- +E|-------------------------------3----------------------------------------------------------------------------------------------------- + + + +E|---------------------2-----------------------------------------------------2------------------------------------- +B|-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0---0-2-4- +G|---------------------2-------------------------0---------------------------2-------------------------0----------- +D|-4---4---4---4---4---0-4---4---4---4---4---4---0---4---4---4---4---4---4---0-4---4---4---4---4---4---0---4------- +A|-2---2---2---2---2-----2---2---2---2---2---2-------2---2---2---2---2---2-----2---2---2---2---2---2--------------- +E|-----------------------------------------------3-----------------------------------------------------3----------- + + + +E|--------------------------------------------------------------- +B|-2-0-2-4-0-0---0-2-4-2-0-2-4-0-0---0-2-4-2-0-2-4-0-0---0-2-4-2- +G|--------------------------------------------------------------- +D|-------------4-------------------4-------------------4--------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---------------2-----2----------- +B|-0-2-4-0-0-3-3-3-3-3-3----------- +G|---------0-0-0-2-0-0-2-2-1-1-1-1- +D|---------0---0-0---0-0-2-2-2-2-2- +A|-----------3-----3-----0-2-2-2-2- +E|---------3---3-----3-----0-0-0-0- + diff --git a/guitar/midi/2112TRK5_imp.tab b/guitar/midi/2112TRK5_imp.tab new file mode 100644 index 0000000..44ec6ed --- /dev/null +++ b/guitar/midi/2112TRK5_imp.tab @@ -0,0 +1,235 @@ +%TabMaster v1.05r% + + +E|---------2-3-0-0-0-----------------2-----2-----------------2--- +B|-----3---3-3-1-1-1---1-3-3---1-3---3-3---3---1-3-3---1-3---3--- +G|---2-0-0-2-0-2-2-2-1-2-0-0-1-2-0-0-2-0-0-2---2-0-0---2-0-0-2--- +D|-2-2---0-0---2-2-2-2-2---0-2-2---0-0---0-0-2-2---0-2-2---0-0-2- +A|-2-0-3-----3-0-0-0-2-0-3---2-0-3-----3-----2-0-3---2-0-3-----2- +E|-0-----3-----------0-----3-0-----3-----3---0-----3-0-----3---0- + + + +E|-----------3-2-----2-----2---15-14-12-15-10-5-10-8-3-8-10-5-0--------- +B|-1-3-------3-3-3---3-3---3-------------------------------------------- +G|-2-0-0---2-0-2-0-0-2-0-0-2------------------------------------2------- +D|-2---0-2-2-0-0---0-0---0-0-0------------------------------------2-4-4- +A|-0-3---2-0-----3-----3-----0------------------------------------0-2-2- +E|-----3-0---3-----3-----3---------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------------------0--------- +G|-------------------------------------2-2---------------2-2----- +D|-4-4-4-4-4-4-4-4-2-0-0-0-0-0-0-0-0-0-0---2-2-2-2-2-2-2-0---4-4- +A|-2-2-2-2-2-2-2-2-0---------------------4-0-0-0-0-0-0-----4-2-2- +E|-------------------3-3-3-3-3-3-3-3-3--------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----------2-----------------------------------------2-2------- +D|-4-4-4-4-4-0-4-4-4-4-4-4-4-4-4-4-2-0-0-0-0-0-0-0-0-0-0---2-2-2- +A|-2-2-2-2-2---2-2-2-2-2-2-2-2-2-2-0---------------------4-0-0-0- +E|-----------------------------------3-3-3-3-3-3-3-3-3----------- + + + +E|--------------------------------------------------------------- +B|-------0-0-0--------------------------------------------------- +G|-------------2-----------------2------------------------------- +D|-2-2-2-2-2-2-0---4-4-4-4-4-4-4-0-4-4-4-4-4-4-4-4-4-4-2-0-0-0-0- +A|-0-0-0---------4-2-2-2-2-2-2-2---2-2-2-2-2-2-2-2-2-2-0--------- +E|-------------------------------------------------------3-3-3-3- + + + +E|--------------------------------------------------------------- +B|---------------------------0-0-0------------------------------- +G|-----------2-2-------------------2-----------------2----------- +D|-0-0-0-0-0-0---2-2-2-2-2-2-2-2-2-0---4-4-4-4-4-4-4-0-4-4-4-4-4- +A|-------------4-0-0-0-0-0-0---------4-2-2-2-2-2-2-2---2-2-2-2-2- +E|-3-3-3-3-3----------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------------0-0-0----------- +G|-------------------------------2-2-------------------2--------- +D|-4-4-4-4-4-2-0-0-0-0-0-0-0-0-0-0---2-2-2-2-2-2-2-2-2-0---4----- +A|-2-2-2-2-2-0---------------------4-0-0-0-0-0-0---------4-2----- +E|-------------3-3-3-3-3-3-3-3-3-----------------------------0-2- + + + +E|-------------------2-0-0-----0-------2-2----------------------- +B|---------2-0-3-0---3-2-2---2-3-0-3-0-3-3-------------2-0-3-0--- +G|---------2---------2-1-0---2---------2-2-------------2--------- +D|---------2-4---4---------0-2-4---4-------------------2-4---4--- +A|---0-----0-0---0-0---0-0-0-0---------0-0-------0-----0-0---0-0- +E|-3---3-0---------------------------------0-2-3---3-0----------- + + + +E|-2-0-0-----0-------2-2-----------------------2-0-0-----0------- +B|-3-2-2---2-3-0-3-0-3-3-------------2-0-3-0---3-2-2---2-3-0-3-0- +G|-2-1-0---2---------2-2-------------2---------2-1-0---2--------- +D|-------0-2-4---4-------------------2-4---4---------0-2-4---4--- +A|---0-0-0-0---------0-0-------0-----0-0---0-0---0-0-0-0--------- +E|-----------------------0-2-3---3-0----------------------------- + + + +E|-2-2-----------------------2-0-0-----0-------2-2-------------2- +B|-3-3-------------2-0-3-0---3-2-2---2-3-0-3-0-3-3-------------4- +G|-2-2-------------2---------2-1-0---2---------2-2--------------- +D|-----------------2-4---4---------0-2-4---4-------------------4- +A|-0-0-------0-----0-0---0-0---0-0-0-0---------0-0-------0-----2- +E|-----0-2-3---3-0---------------------------------0-2-3---3-0--- + + + +E|---2---2-----2-7-2---------------2----------------------------- +B|-0-4-0-4-0-0-4-0-3-0-3-2-------0-3-0-3-2----------------------- +G|---------------------0-2-2-2---------0-2-2-2------------------- +D|---4---4---4-4---4---0-2-0-----4-4---0-2-0-----4-------------4- +A|---2---2---2-2---2-----0---4-0-2-2-----0---4-0-2-------0-----2- +E|-----------------2---3-----------2---3-----------0-2-3---3-0-2- + + + +E|---------------------------2-0-0-4----------------------------- +B|---------------------------3-2-0------------------------------- +G|---------------------------2-2--------------------------------- +D|-------------4-------------0-2-2---4-------------4------------- +A|-------0-----2-------0-----0-0-2---2-------0-----2-------0----- +E|-0-2-3---3-0-2-0-2-3---3-0-----------0-2-3---3-0-2-0-2-3---3-0- + + + +E|---------------2-0-0-4----------------------------------------- +B|---------------3-2-0------------------------------------------- +G|---------------2-2-----2---------------0----------------------- +D|-4-------------0-2-2---2-2-2-2-2-2-2---2---------2-----3-3-3-3- +A|-2-------0-----0-0-2-----0-0-0-0-0-0-0-0-0-0-0-0-------3-3-3-3- +E|-2-0-2-3---3-0-----------------------0-3-3-3-3-3-3-3-0-1-1-1-1- + + + +E|-----------------3--------------------------------------------- +B|---------1-1-------0-------------------------------------1-2-3- +G|---2-2-2-2-0-0-------0---0-2-0-2-0-2-0-2-0---------0-1-2------- +D|-3-3-3-3-3---0---------2-------------------3-0-1-2------------- +A|-3-3-3-3-3-3---0----------------------------------------------- +E|-1-1-1-1-1---3------------------------------------------------- + + + +E|-0-2-6-6-3-5-3-0---------0------------------------------------- +B|-----------------1-3-1-----1-----1---3-1----------------------- +G|-----------------------2-----0-2---2-----2-2-0---2-0----------- +D|-----------------------------------------------2-----3-3-3-3-3- +A|-------------------------------------------------------3-3-3-3- +E|-------------------------------------------------------1-1-1-1- + + + +E|-0-------------------------2----------------------------------- +B|-1-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-3-0- +G|-0-------------------------2-------------------------0--------- +D|---4---4---4---4---4---4---0-4---4---4---4---4---4---0---4---4- +A|-3-2---2---2---2---2---2-----2---2---2---2---2---2-------2---2- +E|-----------------------------------------------------3--------- + + + +E|-------------------2------------------------------------------- +B|-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-3-0-3-0-3-0- +G|-------------------2-------------------------0----------------- +D|---4---4---4---4---0-4---4---4---4---4---4---0---4---4---4---4- +A|---2---2---2---2-----2---2---2---2---2---2-------2---2---2---2- +E|---------------------------------------------3----------------- + + + +E|-----------2--------------------------------------------------- +B|-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-3-0-3-0-3-0-3-3-0-3- +G|-----------2-------------------------0------------------------- +D|---4---4---0-4---4---4---4---4---4---0---4---4---4---4---4---4- +A|---2---2-----2---2---2---2---2---2-------2---2---2---2---2---2- +E|-------------------------------------3------------------------- + + + +E|---2-----------------------------2-0-7-0-2-7-2-7-0-2-7-0-7-2-0- +B|-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0-----0-----0-----0-----0----- +G|---2-------------------------0--------------------------------- +D|---0-4---4---4---4---4---4---0---2-----2-----2-----2-----2----- +A|-----2---2---2---2---2---2------------------------------------- +E|-----------------------------3--------------------------------- + + + +E|-0-5-0-5-0-5-0-5-0-5-3---3---3---3---3---3---3---3---3---3---3- +B|-3---3---3---3---3---3-1-1-3-1-3-1-3-1-3-3-1-3-1-3-1-1-3-1-3-1- +G|-2---2---2---2---2---0---0---0---0---0---0---0---0---0---0---0- +D|-0---0---0---0---0--------------------------------------------- +A|---------------------3---3---3---3---3---3---3---3---3---3---3- +E|--------------------------------------------------------------- + + + +E|---------------------------2-----------------------------2-0-7- +B|-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-0----- +G|---------------------------2-------------------------0--------- +D|---4---4---4---4---4---4---0-4---4---4---4---4---4---0---2----- +A|---2---2---2---2---2---2-----2---2---2---2---2---2------------- +E|-----------------------------------------------------3--------- + + + +E|-0-2-7-2-7-0-2-7-0-7-2-0-0-5-0-5-0-5-0-5-0-5-3---3---3---3---3- +B|-0-----0-----0-----0-----3---3---3---3---3---3-1-1-3-1-3-1-3-1- +G|-------------------------2---2---2---2---2---0---0---0---0---0- +D|-2-----2-----2-----2-----0---0---0---0---0--------------------- +A|---------------------------------------------3---3---3---3---3- +E|--------------------------------------------------------------- + + + +E|---3---3---3---3---3---3---------------------------2----------- +B|-3-3-1-3-1-3-1-1-3-1-3-1-3-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0- +G|---0---0---0---0---0---0---------------------------2----------- +D|---------------------------4---4---4---4---4---4---0-4---4---4- +A|---3---3---3---3---3---3---2---2---2---2---2---2-----2---2---2- +E|--------------------------------------------------------------- + + + +E|-------------------------------------------2------------------- +B|-3-0-3-3-0-3-0-3-0-0-3-0-3-0-3-0-3-3-0-3-0-3-0-3-0-3-0-3-0-3-3- +G|---------------0---------------------------2------------------- +D|---4---4---4---0---4---4---4---4---4---4---0-4---4---4---4---4- +A|---2---2---2-------2---2---2---2---2---2-----2---2---2---2---2- +E|---------------3----------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-0-3-0-3-0---0-2-4-2-0-2-4-0-0---0-2-4-2-0-2-4-0-0---0-2-4-2-0- +G|-------0------------------------------------------------------- +D|---4---0---4-------------------4-------------------4----------- +A|---2----------------------------------------------------------- +E|-------3------------------------------------------------------- + + + +E|---------------------------------2-----2----------- +B|-2-4-0-0---0-2-4-2-0-2-4-0-0-3-3-3-3-3-3----------- +G|---------------------------0-0-0-2-0-0-2-2-1-1-1-1- +D|---------4-----------------0---0-0---0-0-2-2-2-2-2- +A|-----------------------------3-----3-----0-2-2-2-2- +E|---------------------------3---3-----3-----0-0-0-0- + diff --git a/guitar/midi/alegrias.mid b/guitar/midi/alegrias.mid new file mode 100644 index 0000000..9d17677 Binary files /dev/null and b/guitar/midi/alegrias.mid differ diff --git a/guitar/midi/alegriasTRK2.prj b/guitar/midi/alegriasTRK2.prj new file mode 100644 index 0000000..d982494 --- /dev/null +++ b/guitar/midi/alegriasTRK2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\alegriasTRK2_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4)(891,4)(892,4)(893,4)(894,4)(895,4)(896,4)(897,4)(898,4)(899,4)(900,4)(901,4)(902,4)(903,4)(904,4)(905,4)(906,4)(907,4)(908,4)(909,4)(910,4)(911,4)(912,4)(913,4)(914,4)(915,4)(916,4)(917,4)(918,4)(919,4)(920,4)(921,4)(922,4)(923,4)(924,4)(925,4)(926,4)(927,4)(928,4)(929,4)(930,4)(931,4)(932,4)(933,4)(934,4)(935,4)(936,4)(937,4)(938,4)(939,4)(940,4)(941,4)(942,4)(943,4)(944,4)(945,4)(946,4)(947,4)(948,4)(949,4)(950,4)(951,4)(952,4)(953,4)(954,4)(955,4)(956,4)(957,4)(958,4)(959,4)(960,4)(961,4)(962,4)(963,4)(964,4)(965,4)(966,4)(967,4)(968,4)(969,4)(970,4)(971,4)(972,4)(973,4)(974,4)(975,4)(976,4)(977,4)(978,4)(979,4)(980,4)(981,4)(982,4)(983,4)(984,4)(985,4)(986,4)(987,4)(988,4)(989,4)(990,4)(991,4)(992,4)(993,4)(994,4)(995,4)(996,4)(997,4)(998,4)(999,4)(1000,4)(1001,4)(1002,4)(1003,4)(1004,4)(1005,4)(1006,4)(1007,4)(1008,4)(1009,4)(1010,4)(1011,4)(1012,4)(1013,4)(1014,4)(1015,4)(1016,4)(1017,4)(1018,4)(1019,4)(1020,4)(1021,4)(1022,4)(1023,4)(1024,4)(1025,4)(1026,4)(1027,4)(1028,4)(1029,4)(1030,4)(1031,4)(1032,4)(1033,4)(1034,4)(1035,4)(1036,4)(1037,4)(1038,4)(1039,4)(1040,4)(1041,4)(1042,4)(1043,4)(1044,4)(1045,4)(1046,4)(1047,4)(1048,4)(1049,4)(1050,4)(1051,4)(1052,4)(1053,4)(1054,4)(1055,4)(1056,4)(1057,4)(1058,4)(1059,4)(1060,4)(1061,4)(1062,4)(1063,4)(1064,4)(1065,4)(1066,4)(1067,4)(1068,4)(1069,4)(1070,4)(1071,4)(1072,4)(1073,4)(1074,4)(1075,4)(1076,4)(1077,4)(1078,4)(1079,4)(1080,4)(1081,4)(1082,4)(1083,4)(1084,4)(1085,4)(1086,4)(1087,4)(1088,4)(1089,4)(1090,4)(1091,4)(1092,4)(1093,4)(1094,4)(1095,4)(1096,4)(1097,4)(1098,4)(1099,4)(1100,4)(1101,4)(1102,4)(1103,4)(1104,4)(1105,4)(1106,4)(1107,4)(1108,4)(1109,4)(1110,4)(1111,4)(1112,4)(1113,4)(1114,4)(1115,4)(1116,4)(1117,4)(1118,4)(1119,4)(1120,4)(1121,4)(1122,4)(1123,4)(1124,4)(1125,4)(1126,4)(1127,4)(1128,4)(1129,4)(1130,4)(1131,4)(1132,4)(1133,4)(1134,4)(1135,4)(1136,4)(1137,4)(1138,4)(1139,4)(1140,4)(1141,4)(1142,4)(1143,4)(1144,4)(1145,4)(1146,4)(1147,4)(1148,4)(1149,4)(1150,4)(1151,4)(1152,4)(1153,4)(1154,4)(1155,4)(1156,4)(1157,4)(1158,4)(1159,4)(1160,4)(1161,4)(1162,4)(1163,4)(1164,4)(1165,4)(1166,4)(1167,4)(1168,4)(1169,4)(1170,4)(1171,4)(1172,4)(1173,4)(1174,4)(1175,4)(1176,4)(1177,4)(1178,4)(1179,4)(1180,4)(1181,4)(1182,4)(1183,4)(1184,4)(1185,4)(1186,4)(1187,4)(1188,4)(1189,4)(1190,4)(1191,4)(1192,4)(1193,4)(1194,4)(1195,4)(1196,4)(1197,4)(1198,4)(1199,4)(1200,4)(1201,4)(1202,4)(1203,4)(1204,4)(1205,4)(1206,4)(1207,4)(1208,4)(1209,4)(1210,4)(1211,4)(1212,4)(1213,4)(1214,4)(1215,4)(1216,4)(1217,4)(1218,4)(1219,4)(1220,4)(1221,4)(1222,4)(1223,4)(1224,4)(1225,4)(1226,4)(1227,4)(1228,4)(1229,4)(1230,4)(1231,4)(1232,4)(1233,4)(1234,4)(1235,4)(1236,4)(1237,4)(1238,4)(1239,4)(1240,4)(1241,4)(1242,4)(1243,4)(1244,4)(1245,4)(1246,4)(1247,4)(1248,4)(1249,4)(1250,4)(1251,4)(1252,4)(1253,4)(1254,4)(1255,4)(1256,4)(1257,4)(1258,4)(1259,4)(1260,4)(1261,4)(1262,4)(1263,4)(1264,4)(1265,4)(1266,4)(1267,4)(1268,4)(1269,4)(1270,4)(1271,4)(1272,4)(1273,4)(1274,4)(1275,4)(1276,4)(1277,4)(1278,4)(1279,4)(1280,4)(1281,4)(1282,4)(1283,4)(1284,4)(1285,4)(1286,4)(1287,4)(1288,4)(1289,4)(1290,4)(1291,4)(1292,4)(1293,4)(1294,4)(1295,4)(1296,4)(1297,4)(1298,4)(1299,4)(1300,4)(1301,4)(1302,4)(1303,4)(1304,4)(1305,4)(1306,4)(1307,4)(1308,4)(1309,4)(1310,4)(1311,4)(1312,4)(1313,4)(1314,4)(1315,4)(1316,4)(1317,4)(1318,4)(1319,4)(1320,4)(1321,4)(1322,4)(1323,4)(1324,4)(1325,4)(1326,4)(1327,4)(1328,4)(1329,4)(1330,4)(1331,4)(1332,4)(1333,4)(1334,4)(1335,4)(1336,4)(1337,4)(1338,4)(1339,4)(1340,4)(1341,4)(1342,4)(1343,4)(1344,4)(1345,4)(1346,4)(1347,4)(1348,4)(1349,4)(1350,4)(1351,4)(1352,4)(1353,4)(1354,4)(1355,4)(1356,4)(1357,4)(1358,4)(1359,4)(1360,4)(1361,4)(1362,4)(1363,4)(1364,4)(1365,4)(1366,4)(1367,4)(1368,4)(1369,4)(1370,4)(1371,4)(1372,4)(1373,4)(1374,4)(1375,4)(1376,4)(1377,4)(1378,4)(1379,4)(1380,4)(1381,4)(1382,4)(1383,4)(1384,4)(1385,4)(1386,4)(1387,4)(1388,4)(1389,4)(1390,4)(1391,4)(1392,4)(1393,4)(1394,4)(1395,4)(1396,4)(1397,4)(1398,4)(1399,4)(1400,4)(1401,4)(1402,4)(1403,4)(1404,4)(1405,4)(1406,4)(1407,4)(1408,4)(1409,4)(1410,4)(1411,4)(1412,4)(1413,4)(1414,4)(1415,4)(1416,4)(1417,4)(1418,4)(1419,4)(1420,4)(1421,4)(1422,4)(1423,4)(1424,4)(1425,4)(1426,4)(1427,4)(1428,4)(1429,4)(1430,4)(1431,4)(1432,4)(1433,4)(1434,4)(1435,4)(1436,4)(1437,4)(1438,4)(1439,4)(1440,4)(1441,4)(1442,4)(1443,4)(1444,4)(1445,4)(1446,4)(1447,4)(1448,4)(1449,4)(1450,4)(1451,4)(1452,4)(1453,4)(1454,4)(1455,4)(1456,4)(1457,4)(1458,4)(1459,4)(1460,4)(1461,4)(1462,4)(1463,4)(1464,4)(1465,4)(1466,4)(1467,4)(1468,4)(1469,4)(1470,4)(1471,4)(1472,4)(1473,4)(1474,4)(1475,4)(1476,4)(1477,4)(1478,4)(1479,4)(1480,4)(1481,4)(1482,4)(1483,4)(1484,4)(1485,4)(1486,4)(1487,4)(1488,4)(1489,4)(1490,4)(1491,4)(1492,4)(1493,4)(1494,4)(1495,4)(1496,4)(1497,4)(1498,4)(1499,4)(1500,4)(1501,4)(1502,4)(1503,4)(1504,4)(1505,4)(1506,4)(1507,4)(1508,4)(1509,4)(1510,4)(1511,4)(1512,4)(1513,4)(1514,4)(1515,4)(1516,4)(1517,4)(1518,4)(1519,4)(1520,4)(1521,4)(1522,4)(1523,4)(1524,4)(1525,4)(1526,4)(1527,4)(1528,4)(1529,4)(1530,4)(1531,4)(1532,4)(1533,4)(1534,4)(1535,4)(1536,4)(1537,4)(1538,4)(1539,4)(1540,4)(1541,4)(1542,4)(1543,4)(1544,4)(1545,4)(1546,4)(1547,4)(1548,4)(1549,4)(1550,4)(1551,4)(1552,4)(1553,4)(1554,4)(1555,4)(1556,4)(1557,4)(1558,4)(1559,4)(1560,4)(1561,4)(1562,4)(1563,4)(1564,4)(1565,4)(1566,4)(1567,4)(1568,4)(1569,4)(1570,4)(1571,4)(1572,4)(1573,4)(1574,4)(1575,4)(1576,4)(1577,4)(1578,4)(1579,4)(1580,4)(1581,4)(1582,4)(1583,4)(1584,4)(1585,4)(1586,4)(1587,4)(1588,4)(1589,4)(1590,4)(1591,4)(1592,4)(1593,4)(1594,4)(1595,4)(1596,4)(1597,4)(1598,4)(1599,4)(1600,4)(1601,4)(1602,4)(1603,4)(1604,4)(1605,4)(1606,4)(1607,4)(1608,4)(1609,4)(1610,4)(1611,4)(1612,4)(1613,4)(1614,4)(1615,4)(1616,4)(1617,4)(1618,4)(1619,4)(1620,4)(1621,4)(1622,4)(1623,4)(1624,4)(1625,4)(1626,4)(1627,4)(1628,4)(1629,4)(1630,4)(1631,4)(1632,4)(1633,4)(1634,4)(1635,4)(1636,4)(1637,4)(1638,4)(1639,4)(1640,4)(1641,4)(1642,4)(1643,4)(1644,4)(1645,4)(1646,4)(1647,4)(1648,4)(1649,4)(1650,4)(1651,4)(1652,4)(1653,4)(1654,4)(1655,4)(1656,4)(1657,4)(1658,4)(1659,4)(1660,4)(1661,4)(1662,4)(1663,4)(1664,4)(1665,4)(1666,4)(1667,4)(1668,4)(1669,4)(1670,4)(1671,4)(1672,4)(1673,4)(1674,4)(1675,4)(1676,4)(1677,4)(1678,4)(1679,4)(1680,4)(1681,4)(1682,4)(1683,4)(1684,4)(1685,4)(1686,4)(1687,4)(1688,4)(1689,4)(1690,4)(1691,4)(1692,4)(1693,4)(1694,4)(1695,4)(1696,4)(1697,4)(1698,4)(1699,4)(1700,4)(1701,4)(1702,4)(1703,4)(1704,4)(1705,4)(1706,4)(1707,4)(1708,4)(1709,4)(1710,4)(1711,4)(1712,4)(1713,4)(1714,4)(1715,4)(1716,4)(1717,4)(1718,4)(1719,4)(1720,4)(1721,4)(1722,4)(1723,4)(1724,4)(1725,4)(1726,4)(1727,4)(1728,4)(1729,4)(1730,4)(1731,4)(1732,4)(1733,4)(1734,4)(1735,4)(1736,4)(1737,4)(1738,4)(1739,4)(1740,4)(1741,4)(1742,4)(1743,4)(1744,4)(1745,4)(1746,4)(1747,4)(1748,4)(1749,4)(1750,4)(1751,4)(1752,4)(1753,4)(1754,4)(1755,4)(1756,4)(1757,4)(1758,4)(1759,4)(1760,4)(1761,4)(1762,4)(1763,4)(1764,4)(1765,4)(1766,4)(1767,4)(1768,4)(1769,4)(1770,4)(1771,4)(1772,4)(1773,4)(1774,4)(1775,4)(1776,4)(1777,4)(1778,4)(1779,4)(1780,4)(1781,4)(1782,4)(1783,4)(1784,4)(1785,4)(1786,4)(1787,4)(1788,4)(1789,4)(1790,4)(1791,4)(1792,4)(1793,4)(1794,4)(1795,4)(1796,4)(1797,4)(1798,4)(1799,4)(1800,4)(1801,4)(1802,4)(1803,4)(1804,4)(1805,4)(1806,4)(1807,4)(1808,4)(1809,4)(1810,4)(1811,4)(1812,4)(1813,4)(1814,4)(1815,4)(1816,4)(1817,4)(1818,4)(1819,4)(1820,4)(1821,4)(1822,4)(1823,4)(1824,4)(1825,4)(1826,4)(1827,4)(1828,4)(1829,4)(1830,4)(1831,4)(1832,4)(1833,4)(1834,4)(1835,4)(1836,4)(1837,4)(1838,4)(1839,4)(1840,4)(1841,4)(1842,4)(1843,4)(1844,4)(1845,4)(1846,4)(1847,4)(1848,4)(1849,4)(1850,4)(1851,4)(1852,4)(1853,4)(1854,4)(1855,4)(1856,4)(1857,4)(1858,4)(1859,4)(1860,4)(1861,4)(1862,4)(1863,4)(1864,4)(1865,4)(1866,4)(1867,4)(1868,4)(1869,4)(1870,4)(1871,4)(1872,4)(1873,4)(1874,4)(1875,4)(1876,4)(1877,4)(1878,4)(1879,4)(1880,4)(1881,4)(1882,4)(1883,4)(1884,4)(1885,4)(1886,4)(1887,4)(1888,4)(1889,4)(1890,4)(1891,4)(1892,4)(1893,4)(1894,4)(1895,4)(1896,4)(1897,4)(1898,4)(1899,4)(1900,4)(1901,4)(1902,4)(1903,4)(1904,4)(1905,4)(1906,4)(1907,4)(1908,4)(1909,4)(1910,4)(1911,4)(1912,4)(1913,4)(1914,4)(1915,4)(1916,4)(1917,4)(1918,4)(1919,4)(1920,4)(1921,4)(1922,4)(1923,4)(1924,4)(1925,4)(1926,4)(1927,4)(1928,4)(1929,4)(1930,4)(1931,4)(1932,4)(1933,4)(1934,4)(1935,4)(1936,4)(1937,4)(1938,4)(1939,4)(1940,4)(1941,4)(1942,4)(1943,4)(1944,4)(1945,4)(1946,4)(1947,4)(1948,4)(1949,4)(1950,4)(1951,4)(1952,4)(1953,4)(1954,4)(1955,4)(1956,4)(1957,4)(1958,4)(1959,4)(1960,4)(1961,4)(1962,4)(1963,4)(1964,4)(1965,4)(1966,4)(1967,4)(1968,4)(1969,4)(1970,4)(1971,4)(1972,4)(1973,4)(1974,4)(1975,4)(1976,4)(1977,4)(1978,4)(1979,4)(1980,4)(1981,4)(1982,4)(1983,4)(1984,4)(1985,4)(1986,4)(1987,4)(1988,4)(1989,4)(1990,4)(1991,4)(1992,4)(1993,4)(1994,4)(1995,4)(1996,4)(1997,4)(1998,4)(1999,4)(2000,4)(2001,4)(2002,4)(2003,4)(2004,4)(2005,4)(2006,4)(2007,4)(2008,4)(2009,4)(2010,4)(2011,4)(2012,4)(2013,4)(2014,4)(2015,4)(2016,4)(2017,4)(2018,4)(2019,4)(2020,4)(2021,4)(2022,4)(2023,4)(2024,4)(2025,4)(2026,4)(2027,4)(2028,4)(2029,4)(2030,4)(2031,4)(2032,4)(2033,4)(2034,4)(2035,4)(2036,4)(2037,4)(2038,4)(2039,4)(2040,4)(2041,4)(2042,4)(2043,4)(2044,4)(2045,4)(2046,4)(2047,4)(2048,4)(2049,4)(2050,4)(2051,4)(2052,4)(2053,4)(2054,4)(2055,4)(2056,4)(2057,4)(2058,4)(2059,4)(2060,4)(2061,4)(2062,4)(2063,4)(2064,4)(2065,4)(2066,4)(2067,4)(2068,4)(2069,4)(2070,4)(2071,4)(2072,4)(2073,4)(2074,4)(2075,4)(2076,4)(2077,4)(2078,4)(2079,4)(2080,4)(2081,4)(2082,4)(2083,4)(2084,4)(2085,4)(2086,4)(2087,4)(2088,4)(2089,4)(2090,4)(2091,4)(2092,4)(2093,4)(2094,4)(2095,4)(2096,4)(2097,4)(2098,4)(2099,4)(2100,4)(2101,4)(2102,4)(2103,4)(2104,4)(2105,4)(2106,4)(2107,4)(2108,4)(2109,4)(2110,4)(2111,4)(2112,4)(2113,4)(2114,4)(2115,4)(2116,4)(2117,4)(2118,4)(2119,4)(2120,4)(2121,4)(2122,4)(2123,4)(2124,4)(2125,4)(2126,4)(2127,4)(2128,4)(2129,4)(2130,4)(2131,4)(2132,4)(2133,4)(2134,4)(2135,4)(2136,4)(2137,4)(2138,4)(2139,4)(2140,4)(2141,4)(2142,4)(2143,4)(2144,4)(2145,4)(2146,4)(2147,4)(2148,4)(2149,4)(2150,4)(2151,4)(2152,4)(2153,4)(2154,4)(2155,4)(2156,4)(2157,4)(2158,4)(2159,4)(2160,4)(2161,4)(2162,4)(2163,4)(2164,4)(2165,4)(2166,4)(2167,4)(2168,4)(2169,4)(2170,4)(2171,4)(2172,4)(2173,4)(2174,4)(2175,4)(2176,4)(2177,4)(2178,4)(2179,4)(2180,4)(2181,4)(2182,4)(2183,4)(2184,4)(2185,4)(2186,4)(2187,4)(2188,4)(2189,4)(2190,4)(2191,4)(2192,4)(2193,4)(2194,4)(2195,4)(2196,4)(2197,4)(2198,4)(2199,4)(2200,4)(2201,4)(2202,4)(2203,4)(2204,4)(2205,4)(2206,4)(2207,4)(2208,4)(2209,4)(2210,4)(2211,4)(2212,4)(2213,4)(2214,4)(2215,4)(2216,4)(2217,4)(2218,4)(2219,4)(2220,4)(2221,4)(2222,4)(2223,4)(2224,4)(2225,4)(2226,4)(2227,4)(2228,4)(2229,4)(2230,4)(2231,4)(2232,4)(2233,4)(2234,4)(2235,4)(2236,4)(2237,4)(2238,4)(2239,4)(2240,4)(2241,4)(2242,4)(2243,4)(2244,4)(2245,4)(2246,4)(2247,4)(2248,4)(2249,4)(2250,4)(2251,4)(2252,4)(2253,4)(2254,4)(2255,4)(2256,4)(2257,4)(2258,4)(2259,4)(2260,4)(2261,4)(2262,4)(2263,4)(2264,4)(2265,4)(2266,4)(2267,4)(2268,4)(2269,4)(2270,4)(2271,4)(2272,4)(2273,4)(2274,4)(2275,4)(2276,4)(2277,4)(2278,4)(2279,4)(2280,4)(2281,4)(2282,4)(2283,4)(2284,4)(2285,4)(2286,4)(2287,4)(2288,4)(2289,4)(2290,4)(2291,4)(2292,4)(2293,4)(2294,4)(2295,4)(2296,4)(2297,4)(2298,4)(2299,4)(2300,4)(2301,4)(2302,4)(2303,4)(2304,4)(2305,4)(2306,4)(2307,4)(2308,4)(2309,4)(2310,4)(2311,4)(2312,4)(2313,4)(2314,4)(2315,4)(2316,4)(2317,4)(2318,4)(2319,4)(2320,4)(2321,4)(2322,4)(2323,4)(2324,4)(2325,4)(2326,4)(2327,4)(2328,4)(2329,4)(2330,4)(2331,4)(2332,4)(2333,4)(2334,4)(2335,4)(2336,4)(2337,4)(2338,4)(2339,4)(2340,4)(2341,4)(2342,4)(2343,4)(2344,4)(2345,4)(2346,4)(2347,4)(2348,4)(2349,4)(2350,4)(2351,4)(2352,4)(2353,4)(2354,4)(2355,4)(2356,4)(2357,4)(2358,4)(2359,4)(2360,4)(2361,4)(2362,4)(2363,4)(2364,4)(2365,4)(2366,4)(2367,4)(2368,4)(2369,4)(2370,4)(2371,4)(2372,4)(2373,4)(2374,4)(2375,4)(2376,4)(2377,4)(2378,4)(2379,4)(2380,4)(2381,4)(2382,4)(2383,4)(2384,4)(2385,4)(2386,4)(2387,4)(2388,4)(2389,4)(2390,4)(2391,4)(2392,4)(2393,4)(2394,4)(2395,4)(2396,4)(2397,4)(2398,4)(2399,4)(2400,4)(2401,4)(2402,4)(2403,4)(2404,4)(2405,4)(2406,4)(2407,4)(2408,4)(2409,4)(2410,4)(2411,4)(2412,4)(2413,4)(2414,4)(2415,4)(2416,4)(2417,4)(2418,4)(2419,4)(2420,4)(2421,4)(2422,4)(2423,4)(2424,4)(2425,4)(2426,4)(2427,4)(2428,4)(2429,4)(2430,4)(2431,4)(2432,4)(2433,4)(2434,4)(2435,4)(2436,4)(2437,4)(2438,4)(2439,4)(2440,4)(2441,4)(2442,4)(2443,4)(2444,4)(2445,4)(2446,4)(2447,4)(2448,4)(2449,4)(2450,4)(2451,4)(2452,4)(2453,4)(2454,4)(2455,4)(2456,4)(2457,4)(2458,4)(2459,4)(2460,4)(2461,4)(2462,4)(2463,4)(2464,4)(2465,4)(2466,4)(2467,4)(2468,4)(2469,4)(2470,4)(2471,4)(2472,4)(2473,4)(2474,4)(2475,4)(2476,4)(2477,4)(2478,4)(2479,4)(2480,4)(2481,4)(2482,4)(2483,4)(2484,4)(2485,4)(2486,4)(2487,4)(2488,4)(2489,4)(2490,4)(2491,4)(2492,4)(2493,4)(2494,4)(2495,4)(2496,4)(2497,4)(2498,4)(2499,4)(2500,4)(2501,4)(2502,4)(2503,4)(2504,4)(2505,4)(2506,4)(2507,4)(2508,4)(2509,4)(2510,4)(2511,4)(2512,4)(2513,4)(2514,4)(2515,4)(2516,4)(2517,4)(2518,4)(2519,4)(2520,4)(2521,4)(2522,4)(2523,4)(2524,4)(2525,4)(2526,4)(2527,4)(2528,4)(2529,4)(2530,4)(2531,4)(2532,4)(2533,4)(2534,4)(2535,4)(2536,4)(2537,4)(2538,4)(2539,4)(2540,4)(2541,4)(2542,4)(2543,4)(2544,4)(2545,4)(2546,4)(2547,4)(2548,4)(2549,4)(2550,4)(2551,4)(2552,4)(2553,4)(2554,4)(2555,4)(2556,4)(2557,4)(2558,4)(2559,4)(2560,4)(2561,4)(2562,4)(2563,4)(2564,4)(2565,4)(2566,4)(2567,4)(2568,4)(2569,4)(2570,4)(2571,4)(2572,4)(2573,4)(2574,4)(2575,4)(2576,4)(2577,4)(2578,4)(2579,4)(2580,4)(2581,4)(2582,4)(2583,4)(2584,4)(2585,4)(2586,4)(2587,4)(2588,4)(2589,4)(2590,4)(2591,4)(2592,4)(2593,4)(2594,4)(2595,4)(2596,4)(2597,4)(2598,4)(2599,4)(2600,4)(2601,4)(2602,4)(2603,4)(2604,4)(2605,4)(2606,4)(2607,4)(2608,4)(2609,4)(2610,4)(2611,4)(2612,4)(2613,4)(2614,4)(2615,4)(2616,4)(2617,4)(2618,4)(2619,4)(2620,4)(2621,4)(2622,4)(2623,4)(2624,4)(2625,4)(2626,4)(2627,4)(2628,4)(2629,4)(2630,4)(2631,4)(2632,4)(2633,4)(2634,4)(2635,4)(2636,4)(2637,4)(2638,4)(2639,4)(2640,4)(2641,4)(2642,4)(2643,4)(2644,4)(2645,4)(2646,4)(2647,4)(2648,4)(2649,4)(2650,4)(2651,4)(2652,4)(2653,4)(2654,4)(2655,4)(2656,4)(2657,4)(2658,4)(2659,4)(2660,4)(2661,4)(2662,4)(2663,4)(2664,4)(2665,4)(2666,4)(2667,4)(2668,4)(2669,4)(2670,4)(2671,4)(2672,4)(2673,4)(2674,4)(2675,4)(2676,4)(2677,4)(2678,4)(2679,4)(2680,4)(2681,4)(2682,4)(2683,4)(2684,4)(2685,4)(2686,4)(2687,4)(2688,4)(2689,4)(2690,4)(2691,4)(2692,4)(2693,4)(2694,4)(2695,4)(2696,4)(2697,4)(2698,4)(2699,4)(2700,4)(2701,4)(2702,4)(2703,4)(2704,4)(2705,4)(2706,4)(2707,4)(2708,4)(2709,4)(2710,4)(2711,4)(2712,4)(2713,4)(2714,4)(2715,4)(2716,4)(2717,4)(2718,4)(2719,4)(2720,4)(2721,4)(2722,4)(2723,4)(2724,4)(2725,4)(2726,4)(2727,4)(2728,4)(2729,4)(2730,4)(2731,4)(2732,4)(2733,4)(2734,4)(2735,4)(2736,4)(2737,4)(2738,4)(2739,4)(2740,4)(2741,4)(2742,4)(2743,4)(2744,4)(2745,4)(2746,4)(2747,4)(2748,4)(2749,4)(2750,4)(2751,4)(2752,4)(2753,4)(2754,4)(2755,4)(2756,4)(2757,4)(2758,4)(2759,4)(2760,4)(2761,4)(2762,4)(2763,4)(2764,4)(2765,4)(2766,4)(2767,4)(2768,4)(2769,4)(2770,4)(2771,4)(2772,4)(2773,4)(2774,4)(2775,4)(2776,4)(2777,4)(2778,4)(2779,4)(2780,4)(2781,4)(2782,4)(2783,4)(2784,4)(2785,4)(2786,4)(2787,4)(2788,4)(2789,4)(2790,4)(2791,4)(2792,4)(2793,4)(2794,4)(2795,4)(2796,4)(2797,4)(2798,4)(2799,4)(2800,4)(2801,4)(2802,4)(2803,4)(2804,4)(2805,4)(2806,4)(2807,4)(2808,4)(2809,4)(2810,4)(2811,4)(2812,4)(2813,4)(2814,4)(2815,4)(2816,4)(2817,4)(2818,4)(2819,4)(2820,4)(2821,4)(2822,4)(2823,4)(2824,4)(2825,4)(2826,4)(2827,4)(2828,4)(2829,4)(2830,4)(2831,4)(2832,4)(2833,4)(2834,4)(2835,4)(2836,4)(2837,4)(2838,4)(2839,4)(2840,4)(2841,4)(2842,4)(2843,4)(2844,4)(2845,4)(2846,4)(2847,4)(2848,4)(2849,4)(2850,4)(2851,4)(2852,4)(2853,4)(2854,4)(2855,4)(2856,4)(2857,4)(2858,4)(2859,4)(2860,4)(2861,4)(2862,4)(2863,4)(2864,4)(2865,4)(2866,4)(2867,4)(2868,4)(2869,4)(2870,4)(2871,4)(2872,4)(2873,4)(2874,4)(2875,4)(2876,4)(2877,4)(2878,4)(2879,4)(2880,4)(2881,4)(2882,4)(2883,4)(2884,4)(2885,4)(2886,4)(2887,4)(2888,4)(2889,4)(2890,4)(2891,4)(2892,4)(2893,4)(2894,4)(2895,4)(2896,4)(2897,4)(2898,4)(2899,4)(2900,4)(2901,4)(2902,4)(2903,4)(2904,4)(2905,4)(2906,4)(2907,4)(2908,4)(2909,4)(2910,4)(2911,4)(2912,4)(2913,4)(2914,4)(2915,4)(2916,4)(2917,4)(2918,4)(2919,4)(2920,4)(2921,4)(2922,4)(2923,4)(2924,4)(2925,4)(2926,4)(2927,4)(2928,4)(2929,4)(2930,4)(2931,4)(2932,4)(2933,4)(2934,4)(2935,4)(2936,4)(2937,4)(2938,4)(2939,4)(2940,4)(2941,4)(2942,4)(2943,4)(2944,4)(2945,4)(2946,4)(2947,4)(2948,4)(2949,4)(2950,4)(2951,4)(2952,4)(2953,4)(2954,4)(2955,4)(2956,4)(2957,4)(2958,4)(2959,4)(2960,4)(2961,4)(2962,4)(2963,4)(2964,4)(2965,4)(2966,4)(2967,4)(2968,4)(2969,4)(2970,4)(2971,4)(2972,4)(2973,4)(2974,4)(2975,4)(2976,4)(2977,4)(2978,4)(2979,4)(2980,4)(2981,4)(2982,4)(2983,4)(2984,4)(2985,4)(2986,4)(2987,4)(2988,4)(2989,4)(2990,4)(2991,4)(2992,4)(2993,4)(2994,4)(2995,4)(2996,4)(2997,4)(2998,4)(2999,4)(3000,4)(3001,4)(3002,4)(3003,4)(3004,4)(3005,4)(3006,4)(3007,4)(3008,4)(3009,4)(3010,4)(3011,4)(3012,4)(3013,4)(3014,4)(3015,4)(3016,4)(3017,4)(3018,4)(3019,4)(3020,4)(3021,4)(3022,4)(3023,4)(3024,4)(3025,4)(3026,4)(3027,4)(3028,4)(3029,4)(3030,4)(3031,4)(3032,4)(3033,4)(3034,4)(3035,4)(3036,4)(3037,4)(3038,4)(3039,4)(3040,4)(3041,4)(3042,4)(3043,4)(3044,4)(3045,4)(3046,4)(3047,4)(3048,4)(3049,4)(3050,4)(3051,4)(3052,4)(3053,4)(3054,4)(3055,4)(3056,4)(3057,4)(3058,4)(3059,4)(3060,4)(3061,4)(3062,4)(3063,4)(3064,4)(3065,4)(3066,4)(3067,4)(3068,4)(3069,4)(3070,4)(3071,4)(3072,4)(3073,4)(3074,4)(3075,4)(3076,4)(3077,4)(3078,4)(3079,4)(3080,4)(3081,4)(3082,4)(3083,4)(3084,4)(3085,4)(3086,4)(3087,4)(3088,4)(3089,4)(3090,4)(3091,4)(3092,4)(3093,4)(3094,4)(3095,4)(3096,4)(3097,4)(3098,4)(3099,4)(3100,4)(3101,4)(3102,4)(3103,4)(3104,4)(3105,4)(3106,4)(3107,4)(3108,4)(3109,4)(3110,4)(3111,4)(3112,4)(3113,4)(3114,4)(3115,4)(3116,4)(3117,4)(3118,4)(3119,4)(3120,4)(3121,4)(3122,4)(3123,4)(3124,4)(3125,4)(3126,4)(3127,4)(3128,4)(3129,4)(3130,4)(3131,4)(3132,4)(3133,4)(3134,4)(3135,4)(3136,4)(3137,4)(3138,4)(3139,4)(3140,4)(3141,4)(3142,4)(3143,4)(3144,4)(3145,4)(3146,4)(3147,4)(3148,4)(3149,4)(3150,4)(3151,4)(3152,4)(3153,4)(3154,4)(3155,4)(3156,4)(3157,4)(3158,4)(3159,4)(3160,4)(3161,4)(3162,4)(3163,4)(3164,4)(3165,4)(3166,4)(3167,4)(3168,4)(3169,4)(3170,4)(3171,4)(3172,4)(3173,4)(3174,4)(3175,4)(3176,4)(3177,4)(3178,4)(3179,4)(3180,4)(3181,4)(3182,4)(3183,4)(3184,4)(3185,4)(3186,4)(3187,4)(3188,4)(3189,4)(3190,4)(3191,4)(3192,4)(3193,4)(3194,4)(3195,4)(3196,4)(3197,4)(3198,4)(3199,4)(3200,4)(3201,4)(3202,4)(3203,4)(3204,4)(3205,4)(3206,4)(3207,4)(3208,4)(3209,4)(3210,4)(3211,4)(3212,4)(3213,4)(3214,4)(3215,4)(3216,4)(3217,4)(3218,4)(3219,4)(3220,4)(3221,4)(3222,4)(3223,4)(3224,4)(3225,4)(3226,4)(3227,4)(3228,4)(3229,4)(3230,4)(3231,4)(3232,4)(3233,4)(3234,4)(3235,4)(3236,4)(3237,4)(3238,4)(3239,4)(3240,4)(3241,4)(3242,4)(3243,4)(3244,4)(3245,4)(3246,4)(3247,4)(3248,4)(3249,4)(3250,4)(3251,4)(3252,4)(3253,4)(3254,4)(3255,4)(3256,4)(3257,4)(3258,4)(3259,4)(3260,4)(3261,4)(3262,4)(3263,4)(3264,4)(3265,4)(3266,4)(3267,4)(3268,4)(3269,4)(3270,4)(3271,4)(3272,4)(3273,4)(3274,4)(3275,4)(3276,4)(3277,4)(3278,4)(3279,4)(3280,4)(3281,4)(3282,4)(3283,4)(3284,4)(3285,4)(3286,4)(3287,4)(3288,4)(3289,4)(3290,4)(3291,4)(3292,4)(3293,4)(3294,4)(3295,4)(3296,4)(3297,4)(3298,4)(3299,4)(3300,4)(3301,4)(3302,4)(3303,4)(3304,4)(3305,4)(3306,4)(3307,4)(3308,4)(3309,4)(3310,4)(3311,4)(3312,4)(3313,4)(3314,4)(3315,4)(3316,4)(3317,4)(3318,4)(3319,4)(3320,4)(3321,4)(3322,4)(3323,4)(3324,4)(3325,4)(3326,4)(3327,4)(3328,4)(3329,4)(3330,4)(3331,4)(3332,4)(3333,4)(3334,4)(3335,4)(3336,4)(3337,4)(3338,4)(3339,4)(3340,4)(3341,4)(3342,4)(3343,4)(3344,4)(3345,4)(3346,4)(3347,4)(3348,4)(3349,4)(3350,4)(3351,4)(3352,4)(3353,4)(3354,4)(3355,4)(3356,4)(3357,4)(3358,4)(3359,4)(3360,4)(3361,4)(3362,4)(3363,4)(3364,4)(3365,4)(3366,4)(3367,4)(3368,4)(3369,4)(3370,4)(3371,4)(3372,4)(3373,4)(3374,4)(3375,4)(3376,4)(3377,4)(3378,4)(3379,4)(3380,4)(3381,4)(3382,4)(3383,4)(3384,4)(3385,4)(3386,4)(3387,4)(3388,4)(3389,4)(3390,4)(3391,4)(3392,4)(3393,4)(3394,4)(3395,4)(3396,4)(3397,4)(3398,4)(3399,4)(3400,4)(3401,4)(3402,4)(3403,4)(3404,4)(3405,4)(3406,4)(3407,4)(3408,4)(3409,4)(3410,4)(3411,4)(3412,4)(3413,4)(3414,4)(3415,4)(3416,4)(3417,4)(3418,4)(3419,4)(3420,4)(3421,4)(3422,4)(3423,4)(3424,4)(3425,4)(3426,4)(3427,4)(3428,4)(3429,4)(3430,4)(3431,4)(3432,4)(3433,4)(3434,4)(3435,4)(3436,4)(3437,4)(3438,4)(3439,4)(3440,4)(3441,4)(3442,4)(3443,4)(3444,4)(3445,4)(3446,4)(3447,4)(3448,4)(3449,4)(3450,4)(3451,4)(3452,4)(3453,4)(3454,4)(3455,4)(3456,4)(3457,4)(3458,4)(3459,4)(3460,4)(3461,4)(3462,4)(3463,4)(3464,4)(3465,4)(3466,4)(3467,4)(3468,4)(3469,4)(3470,4)(3471,4)(3472,4)(3473,4)(3474,4)(3475,4)(3476,4)(3477,4)(3478,4)(3479,4) diff --git a/guitar/midi/alegriasTRK2.tab b/guitar/midi/alegriasTRK2.tab new file mode 100644 index 0000000..6913aa4 --- /dev/null +++ b/guitar/midi/alegriasTRK2.tab @@ -0,0 +1,982 @@ +%TabMaster v2.00r% + + +E|-0-4-2-0-4-2-0-4-2-4-2-0-0---2---0---2---2-------2---2---2-5-2-4-2-5- +B|-----------------4---------4-------4-----------4---4-----4----------- +G|-------------------------------2-----------2-2---------2------------- +D|---------------------------------------4-----------4----------------- +A|---------------------------2-----------2----------------------------- +E|--------------------------------------------------------------------- + + + +E|-4-5-2-4-0-5-4-2-----0-0-------0-----0-------0-----0-0---0-4-2- +B|-----------------4---------4-0-------------0---0-------0------- +G|-------------------------1-------------1-1-------1------------- +D|-----------------------------------2-----------2--------------- +A|--------------------------------------------------------------- +E|-------------------0-------------0----------------------------- + + + +E|-0-4-2-0-4-2---4-2---0----------------------------------------- +B|-------------4-----3---4---2-3-----2-----2-------2---2-----2--- +G|---------------------------------2-------------2---2-----2---2- +D|-------------------------------2-----------2-2---------2------- +A|--------------------------------------------------------------- +E|-------------------------4-----------4-4-----------4----------- + + + +E|-------------------0---------0------------------------------------- +B|-2---4-2---------4---2---------0-2-------0---0-------0-----0-----0- +G|---------2-2-----------2-2-----------1-2-----------1-----1-----1--- +D|---2---------2-2---------2---------2-----------2-2-----------2----- +A|-------------------------------------------2-----------2-------2--- +E|---------------------------0---------------0----------------------- + + + +E|----------------------------------------------------------------- +B|---0---2-0---------0-2---------0-----------------------------0--- +G|-1---------1-1---------1-1---------2-1-------2---2-----2-2------- +D|-----2---------2-2---------2-2-----------1-2-------1-1---------1- +A|-------2-------------------------------0-------0---0-------0----- +E|---------------------------------2-------------2----------------- + + + +E|-------------0---2---4-5-0-2-4-4-2-5-4-0-2---0-------0--------- +B|-0---2-0-4-0---2---4-----------------------------0-----2-----0- +G|---2-----------------------------------------1-----1-----1----- +D|-------------------------------------------2---2-----------2--- +A|--------------------------------------------------------------- +E|-----------------------------------0-------0------------------- + + + +E|---------------0---0-----------0---------------0---0----------- +B|-------------2---2-----------2-----------2-------2-----------2- +G|-------1-----1-----------1-------------1-----1---------1------- +D|-----2-----2-----------2-----------2-------2---------2---2----- +A|-2-2-----2-----------2-----2-----2---2-------------2-------2--- +E|--------------------------------------------------------------- + + + +E|---0---0---------------0---0-------------0-0-----------------0- +B|-----2-------------2-2-------------2-----2---------------2-2-2- +G|-1---------------1-----1-------1-------1-----------1-1--------- +D|-----------2-2---------------2-------2---------2-2-----2------- +A|---------2-----2---------2-------2-----------2-----2----------- +E|--------------------------------------------------------------- + + + +E|-0-0---------------0-----0-------------0-0---------------0-0--- +B|---------------2-----2-------------2-2-----------------2---2--- +G|-1---------1-----1-----------1-1-----------------1---1--------- +D|-------2-----2-------------2-----2-----------2-----2----------- +A|-----2---2-------------2-----------2-------2---2-------------2- +E|--------------------------------------------------------------- + + + +E|-----------0-0---0-----0-----------------------0-0-0----------- +B|-------2-------2---2-----2-----------------2-2-------2-----0--- +G|---1-----1-----------1-----1-----------1---------1-----1------- +D|-2-------------2---------2-----2-----2---2---------------2----- +A|-----2-----------------------2---2-2-----2-------------------2- +E|--------------------------------------------------------------- + + + +E|-------0---0-0---------------0---------------------0-0-0-0----- +B|-----2---------2-2---------2---0-0-------------2-2---------2-2- +G|---1-------------1-1-1---------------------1-1----------------- +D|-2-------2-------------2-2-------------2-2--------------------- +A|-------------------2---------------2-2------------------------- +E|--------------------------------------------------------------- + + + +E|-----------------------------0-0---------0---------0-0--------- +B|---------0-0-------------2-2-----------2---------2-----2------- +G|-1-1-----------------1-1-------------1---------1---------1----- +D|-----2-2---------2-2---------------2---------2---------------2- +A|-------------2-2-----------------2---------2---------------2--- +E|--------------------------------------------------------------- + + + +E|-------0---0-------------------------0---0---0---------0--------- +B|-----2---0---2-------------------2-2---2-------------2---------2- +G|---1-----------1-------------1-1-------1-----------1---------1--- +D|-2---------------2-------2-2---------------2-----2---------2----- +A|-------------------2-2-2---------------2-------2---------2------- +E|----------------------------------------------------------------- + + + +E|-0-0---------------0-----------------2-0---------2---------2------- +B|-----0-----------2---------------4-2-----------4---------4--------- +G|-------1-------1-------------2-1-------------2---------2---------2- +D|---------2---2-----------4-2---------------4---------4---------4--- +A|-----------2---------2-2-----------------2---------2---------2----- +E|------------------------------------------------------------------- + + + +E|-0-----2-2---------------2---2-----------2---2-----------2---2- +B|---4-0-4-------------4-----4---------4-----4---------4-----4--- +G|-------1-----2-----2-----------2---2-----------2---2----------- +D|-------4-------2-4---------4-----4---------4-----4---------4--- +A|-----2-----2-----------2-----2---------2-----2---------2------- +E|--------------------------------------------------------------- + + + +E|---------------2-2-------2-------2---2---------------2--------- +B|---------4---4---------4-------4-------4-----------4---------4- +G|-2-----2-----------2-------2-------2-----2-------2-----2------- +D|-----4-------4---------4-------4-----------4---4-----------4--- +A|---2-------2---------2-------2---------------2-----------2----- +E|--------------------------------------------------------------- + + + +E|-2-2-2-------------------------2-2---2-2---------------------5-------2--- +B|-------4-4-----------------4---4---------4-4---------------4------------- +G|-----------2-2---------2-2-------------------2-2---------2---------2----- +D|---------------4-4---4-------4-------------------4-4---4-------4-------4- +A|-------------------2---------------2-----------------2-----------2------- +E|------------------------------------------------------------------------- + + + +E|-------5-----------2-5-------------5-5---------------4-----5--- +B|-4---4-----------4-----4---------4-----4-----------4---------4- +G|---2-----------2---------2-----2---------2-------2-------2----- +D|-------------4-------------4-4-------------4---4-------4------- +A|---------2-2---------------2-----------------2----------------- +E|--------------------------------------------------------------- + + + +E|-----5---4---------5-----2-----5-5-------------------2-----4----- +B|-------4---4-----------4-----------4-4-------------4---------4--- +G|---2---------2---2-----------2---------2---------2-------2------- +D|-4-------------4-----4---4---------------4-----4-------4--------- +A|---2-----------2-----------2---------------2-2-----------------2- +E|----------------------------------------------------------------- + + + +E|-2-4-------------2---------5-------2---------5---------2---5--- +B|-----4-4-----------------4-------------4---4-----------4-4----- +G|---------2-2-----------2-------2---------2-----------2-------2- +D|-------------4-4-----4-------4-------4-------------4----------- +A|-------------------2-------------2-------------2-2------------- +E|--------------------------------------------------------------- + + + +E|---------5-5---------------4-----5-------5---4---------5-----2- +B|-------4-----4-----------4---------4-------4---4-----------4--- +G|-----2---------2-------2-------2-------2---------2---2--------- +D|-4-4-------------4---4-------4-------4-------------4-----4---4- +A|-2-----------------2-------------------2-----------2----------- +E|--------------------------------------------------------------- + + + +E|-----5-5-------------------2-----4-----2-4-------------2--------- +B|---------4-4-------------4---------4-------4-4-----------------4- +G|---2---------2---------2-------2---------------2-2-----------2--- +D|---------------4-----4-------4---------------------4-4-----4----- +A|-2---------------2-2-----------------2-------------------2------- +E|----------------------------------------------------------------- + + + +E|-2-----------2-----2-----------2-------2-----2-2--------------- +B|---------------4-4---------4-------------4-4-4-------------4--- +G|---------2-2-------------2-----------2---------2---2-----2----- +D|-----4-4---------------4-----------4---------4-------4-4------- +A|---2-----------------2-------2---2---------2-----2-----------2- +E|--------------------------------------------------------------- + + + +E|-2---2-----------2---2-----------2---2-------------2-4-------2- +B|---4---------4-----4---------4-----4-----------4-4---------4--- +G|-------2---2-----------2---2-----------2-----2---------2------- +D|---4-----4---------4-----4---------4-------4-----4---------4--- +A|-----2---------2-----2---------2---------2-----2---------2----- +E|--------------------------------------------------------------- + + + +E|-------2---4---------4-------------5-5-4---------------5-------5---0--- +B|-----4-------4---4---------------4-------4-4---------------4-----4----- +G|-2-------2---------2---2-------2-------------2-2-------------2-----2--- +D|-----4-----------4-------4---4-------------------4-4-----4-----------4- +A|---2-----------2-----------2-------------------------------2----------- +E|-----------------------------------------------------0----------------- + + + +E|-------0-----0-0-------------------------0---0-------------0--- +B|---------0-------0-2-----------------2-----2-----------2-----2- +G|-----1-----1---------1---------1-------1-------------1---1----- +D|---2-----2-------------2-----2---2---------------2-----2------- +A|-------------------------2-2-------2-----------2---2----------- +E|-0------------------------------------------------------------- + + + +E|-0---0-------------0---0---------------0-0---------------0-0--- +B|---------------2-2---------------2-2-----------------2-2------- +G|-----------1-1-----------------1-----1-----------1-1----------- +D|-------2-2---------------2-2-------------------2-2------------- +A|---2---2-------------2-------2-------------2-2---------------2- +E|--------------------------------------------------------------- + + + +E|-------------0-0---------------0-0-----------------0-0--------- +B|---------2-2---------------2-2---------------2---2------------- +G|-----1-1---------------1-1-----------------1---1-----------1-1- +D|-2---2-------------2-2---------------2---2---------------2---2- +A|---2-------------2---2-------------2---2---------------2-2----- +E|--------------------------------------------------------------- + + + +E|---0---0-------------0---0---------------0---0-0-0------------- +B|-2---2-------------2---2-----------2-------2-------2-------2--- +G|---------------1---1-----------1-----1---------------1-------1- +D|-----------2-----2-----------2---------2---------------2------- +A|---------2---2-------------2-----2-----------------------2----- +E|--------------------------------------------------------------- + + + +E|-------------0-----0-0-----------------0---0-0---------------0- +B|-----------2-2---------2-----0-------2---------2-2---------2--- +G|---------1-------1-------1---------1-------------1-1-1--------- +D|---2---2-------2-----------2-----2-------2-------------2-2----- +A|-2---2---------2---------------2-------------------2----------- +E|--------------------------------------------------------------- + + + +E|---------------------0-0-0-0---------------------------------0- +B|-0-0-------------2-2---------2-2---------0-------------3-2----- +G|-------------1-1-----------------1-1---------------1-1-------1- +D|---------2-2-------------------------2-2-------0-2---------0--- +A|-----2-2-----------------------------------2-2----------------- +E|--------------------------------------------------------------- + + + +E|-0-----0-------0---------0---0-0---------0-------0-0----------- +B|---3---------3---------3-----3-2-------------3-3-----3--------- +G|-----------1---------1-----1-----1-----1---1-----------2------- +D|---------0-------0-----0---------0---2---0---------------0----- +A|-----2-------------2---------------2-----------------------2-2- +E|--------------------------------------------------------------- + + + +E|-------0-----0---------------0-0-----------------------0-0-0-0----------- +B|-----3---------3-----------3-----3-----------------3-3---------3-3------- +G|---1-------------2-------1---------2-----------1-1-----------------2-2--- +D|-0-------------------0-0-------------0-----0-0-------------------------0- +A|---------2-2-------2-------------------2-2------------------------------- +E|------------------------------------------------------------------------- + + + +E|-----------------0-0-------------------0-----------0-----0-------0- +B|---------------3-----3---------------2---2-------2---2-2-------2--- +G|-----------2-1---------2---------2-2-------2---2---2-----2---2----- +D|-0-----2-0---------------0-2---2-------------2-------------4------- +A|---2-0-----------------------0---------------4-------------4------- +E|------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|---------0-------------0-----0-------0---------0-------------0- +G|-------1---1---------1---1-1-------1---------2---2---------2--- +D|---4-2-------2-----2---2-----2---2---------1-------1-----1----- +A|-2-------------2---------------4-------2-4-----------2-0------- +E|-----------------4-------------4------------------------------- + + + +E|-------------------4-----------4-4---------4-4-----4-0-------0-0------- +B|----------------------------------------------------------------------- +G|-2---------------1-------0-1-1-----0-0-1-1-----0-1--------------------- +D|---1---------2---------2-------------------------2-----1-2-2-----1-1-2- +A|-------0---2---------2------------------------------------------------- +E|-----2---0-----2-------0----------------------------------------------- + + + +E|---0-0-----0-----------------------------------------5----------- +B|-------------0-------0-0---------0-0---------0-0---2---0---1-2-2- +G|----------------------------------------------------------------- +D|-2-----1-2------------------------------------------------------- +A|---------2-----1-2-2-----4-1-2-2-----1-4-2-2-----1-------2------- +E|----------------------------------------------------------------- + + + +E|-5-5---------5-5-------5-4-------4-4---------4-4-----4-2-------2- +B|-----1-1-2-2-----1-0-2-------0-0---------0-0-------0------------- +G|---------------------------3---------3-3---------3-2-----1-2-2--- +D|----------------------------------------------------------------- +A|----------------------------------------------------------------- +E|----------------------------------------------------------------- + + + +E|-2-------2-2-----0-2---0---4-------4-4---------4-4-----4-0-------0-0----- +B|------------------------------------------------------------------------- +G|---1-2-2-----2-1-----1---1---0-1-1-----0-0-1-1-----0-1------------------- +D|-----------------------------------------------------2-----1-2-2-----1-1- +A|------------------------------------------------------------------------- +E|------------------------------------------------------------------------- + + + +E|-----0-0-----0--------------------------------------------------- +B|---------------0-------0-0---------0-0---------0-0-----0---0----- +G|---------------------------------------------------------2---2--- +D|-2-2-----1-2-----------------------------------------1-----1----- +A|-----------2-----1-2-2-----4-1-2-2-----1-4-2-2-----1-----------2- +E|----------------------------------------------------------------- + + + +E|----------------------------------------------------------------------- +B|-------0--------------------------------------------------------------- +G|----------------------------------------------------------------------- +D|-----1---2-1-2-1-4-2-1-2-------4--------------------------------------- +A|-2-4-----2-4-----------------0---2---0-2-0-4-2-0-2-4-4-2-0-4-2-0-2-0-0- +E|-------------------------2-4-----2-4-------------------------------4--- + + + +E|-----------------------------------------------0--------------- +B|-----------------0---------0---0-2---0-------2-----2-------0--- +G|-------------------------1---------1-------1-------------1----- +D|-----------------------2---------2-------2-------------2------- +A|-2---0-----0---------2-------2---------2-------------2--------- +E|---4---2-4---0-4---2-----------------------------0-----------2- + + + +E|-------------0------------------------------------------------- +B|-------0-----------2-----0-----------0---------0-------------0- +G|-----2---------------2-------1-----2---------2-----------1-2--- +D|---1-----------1-------2---------1---------1---------2-1------- +A|-0---------0-----2-------------0---------0-------2-0----------- +E|---------2-----------------2-----------2---------2------------- + + + +E|-------------------------------------0---------------------0-0- +B|-0---------0-------0-------0-------0---0-------0---------0----- +G|---------2-------2-------2-------2-------1-------2-----1------- +D|-------1-------1-------1-------1-----------2-----1---2--------- +A|-----0-------0-------0-------0---------------0-----2----------- +E|---2-------2-------2-------2-----------------2----------------- + + + +E|-0-----------------------------0-0-0-------------------0------------- +B|---0-0---------------------0-0---------0-------------0--------------- +G|-------1-1-------------1-1---------------1---------1----------------- +D|-----------2-2-----2-2---------------------2-----2------------------- +A|---------------2-2-----------------------------2--------------------- +E|-------------------------------------1-------2-----------1-1-2-2-1-1- + + + +E|---------------------------0-------------0-0-----------------------0- +B|-------------------------2-----------2-2-----------0---------0------- +G|---------------------1-1-----1---1---1-----------1---------2--------- +D|-----------------2-----2-----------2-----------2---------1----------- +A|---------------2---2-------------2-----------2---------0---------0--- +E|-2-2-1-1-0-2-1-----------------0---------------------2---------2----- + + + +E|--------------------------------------------------------------- +B|-----2-----0-----------0---------0-------------0-0---------0--- +G|-------2-------1-----2---------2-----------1-2-----------2----- +D|-1-------2---------1---------1---------2-1-------------1------- +A|---2-------------0---------0-------2-0---------------0-------0- +E|-------------2-----------2---------2---------------2-------2--- + + + +E|-----------------------0---------------------0---0-0-------0--- +B|-----0-------0-------0---0-------0-------0-----0-----0-------0- +G|---2-------2-------2-------1---2-------1---1-----------1------- +D|-1-------1-------1-----------2---1---2---------2---------2----- +A|-------0-------0---------------0---2--------------------------- +E|-----2-------2-----------------2------------------------------- + + + +E|-------------0---0-0---------------------0--------------------- +B|-----------0-----0---0-------------0-0---------------------0-0- +G|-1-------1-----1-------1-------2-1-----2---------2-----2-2----- +D|---2---2-2---------------2---1-------------1---1---1-1--------- +A|-----2---------2-----------2-----------------0-2--------------- +E|--------------------------------------------------------------- + + + +E|-----------------------------0---------------0-0---0-0---------0--- +B|-------------0-0---------0-0-----------0---0-----0-----2----------- +G|---------2-2---------1-2-----------1-1-------1-----------2-------2- +D|-----1-1-----------------1-----2---------2-----------------2------- +A|-0-----------------------------------------------2-----------2----- +E|---2-------------0-2-------------0--------------------------------- + + + +E|-----0-----2---0-------0---2---0--------------------------------- +B|-2-2-------------2-2---------0---2---------0-------0-----2---0--- +G|-------2-----2-------2-------------1-2---------1-1-------------1- +D|---------2-----------------------------2-----2-------2-----2----- +A|-----------------------------------------2-------------2--------- +E|-------------------------0---------------0----------------------- + + + +E|-------------------------------------------------------0------- +B|---0-----2-0-0-------------0-------0---1---2-3---0-4-1---2---3- +G|-1-------------2-1-------------2-2-------------2-----------1--- +D|-----2-------------1-2-------1-------1---1--------------------- +A|-------------------------2-------------2----------------------- +E|-------2---------------2-----------------------------0--------- + + + +E|-----0-----0-------0-----0---------0---0---2---4-5-0-4-2-2-4-0-5-4--- +B|-0-4-------------0---0-------0-0-2---4-0-2---4---------------------4- +G|-------------1-1-----------1----------------------------------------- +D|---------2-------------2--------------------------------------------- +A|--------------------------------------------------------------------- +E|-------0------------------------------------------------------------- + + + +E|-2-0-2-0-0-2-0-2-4-2-0-0-2-4-----2-0---0-----2-4---5-0-4-2-2-4-5---4- +B|---------4-------------------0-2-----4---0-2-----4------------------- +G|--------------------------------------------------------------------- +D|--------------------------------------------------------------------- +A|-----------------------------------------------------------------2--- +E|--------------------------------------------------------------------- + + + +E|-0-2-----0---2-----------2---0-----2-4---5-0-4-2-2-4-5-4-4-2-2-0- +B|-----------0-------0-0-2---4---0-2-----4------------------------- +G|-------2-------2------------------------------------------------- +D|-----1-----1----------------------------------------------------- +A|-----------------2----------------------------------------------- +E|----------------------------------------------------------------- + + + +E|-2-4-0-2---0-0-2---0-----0-----------0-----2-4---5-0-4-2-2-4-5---4-0- +B|---------4-------4---4-2---0-2-4-2-4---0-2-----4--------------------- +G|--------------------------------------------------------------------- +D|--------------------------------------------------------------------- +A|--------------------------------------------------------------------- +E|---------------------------------------------------------------0----- + + + +E|-2-----0-------0---------0---------0-----0-------------0---0--- +B|---------0-------0-----2---------2-----2-----------2-----2----- +G|-----1-------1-------2---------2-----2---------2---------2----- +D|---2-------2-------2---------2---2-----------2-------2--------- +A|-----------------0---------0-----0---------0-----0-----------0- +E|--------------------------------------------------------------- + + + +E|-------0-0---0-------------------0---0---------------0-0------- +B|-----2---------2-------------2-----2-------------2---2--------- +G|---2-------2-------------2---------2---------2-----2---------2- +D|-2-------------------2-2-------2---------2-----2---------2----- +A|-----------------0-0-------0-----------0---0-----------0---0--- +E|---------0----------------------------------------------------- + + + +E|-------0---0-------------0-----0-2-------0-----------------0-0- +B|---2-----2-----------2-------2-----2-------------------2-2----- +G|-----2-----------2-----2-------------2-------------2-2--------- +D|-2-------------2-----------2-----------2-------2-2------------- +A|-------------0-----0-----------------------0-0----------------- +E|--------------------------------------------------------------- + + + +E|-0-2-------------0-------------------0-0-------------0-0-------------0- +B|-----2-2-------------------------2-0-------------0---0-------------0--- +G|---------2-2-----------2-----2-1-------------1-------1-------1-------1- +D|-------------2-2---------2-2---------------2-------2-------2-----2----- +A|-------------------0-2-------------------2-----2---------2-----2------- +E|----------------------------------------------------------------------- + + + +E|-----------0---0---0-----0-----------0---0---------0----------- +B|-0---0-------0-2-----------------0-------0-------0---0--------- +G|---------1-------1-----------1---------1-------1-----1-----1--- +D|-------2-------2-------2---2-------2---------2---2-------2----- +A|---2-----------------2---2-----2-----------2---2-------2-----2- +E|--------------------------------------------------------------- + + + +E|-------0-0-0---------0-------0-0-------------------------0-0-0-0- +B|-0-------0-------0-0-------------2-----0-------------0-0--------- +G|-----1---------1-----------1-------1-------------1-1------------- +D|---2---------2---------2-------------2-------2-2----------------- +A|-----------2-------------2---------------2-2--------------------- +E|----------------------------------------------------------------- + + + +E|-------------------------0---0----------------------------------------- +B|-0-2---------0---------0---0---0-----------0--------------------------- +G|-----1-1-------------1-----------1---------------------2-2------------- +D|---------2-2-------2---------------2-----------------1-------------2-1- +A|---------------2-2-------------------1-2-2---1---2-0-----------2-0----- +E|-----------------------------------------------2-----------0-2--------- + + + +E|---3-3-3-3-----------3-3-3-3-3-3-3---3-------3---3-----------3- +B|-------------------0---------------------------0-----------0--- +G|-1---------------0-------------------------0-------------0----- +D|---------------2-------------------------2-------------2------- +A|-------------2-------------------------2-------------2--------- +E|-----------0-----------------------0---------------0----------- + + + +E|-3-3-3-3-3-3-3-3-----------3-----3---3---3-3-3-3-3---3-------3- +B|-------------------------0---------0--------------------------- +G|-----------------------0-----0-----------------------------0--- +D|---------------------2---------2-------------------------2----- +A|-------------------2-----------2-----------------------2------- +E|-----------------0---------------------0-----------0----------- + + + +E|---3-----------3-3-3-3-3---3-----3-2-0-----3-2-0--------------- +B|-0-----------0-----------0---------0-0---3---1-0---3---1-0----- +G|-----------0-----------------0-------------------2---0-------2- +D|---------2---------------------2------------------------------- +A|-------2-----------------------2------------------------------- +E|-----0---------------------------------0-------------------2--- + + + +E|-------------------------2-2-2-2-----------2-2-2-2-2-2-2-2-2-2- +B|-------0---------0-----------------------0--------------------- +G|---2-0---------2---2-----2-------------2----------------------- +D|-1---------1-1---------1-------------1------------------------- +A|---------0-----------0-------------0--------------------------- +E|---------2-----------------------2----------------------------- + + + +E|-----------2-----------2-2-2-2-3-3-3-3-----2-------------3----- +B|---------0---------0-----------------------------------0-----0- +G|-------2-------------2-----------------------------2-------2--- +D|-----1-----------1---------------------------1-1--------------- +A|---0-----------0-------------------------0-------0------------- +E|-2-----------2-------------------------2-------------2--------- + + + +E|-3-3-3-3-2-2-2-2-3-----------2-----------2-2-2-2-----2--------- +B|---------------------------0---------0-----------0-------0-3-1- +G|-------------------------2---------2---------------------2----- +D|-----------------------1---------------1---------------1------- +A|---------------------0-----------0-----------------0----------- +E|-------------------2-----------2-------------------------2----- + + + +E|-----------------------------------0-----------0-----0-----0-3-2-0-3- +B|-0-0---3-0-1-1-0---3-0-1-1---3-0-1-----------0---0-----0-0-------0--- +G|-----3-----------3-----------0-----------0-0-------0----------------- +D|-------------------------------------2-----------2------------------- +A|--------------------------------------------------------------------- +E|---------------------------0-----------0----------------------------- + + + +E|-3-2-2-0-0-3-----2-0---------------------------------------0----- +B|-------------3-1-----0---3-1-0-1-0-3-1-0-0-1-3-1-0-----0-----3--- +G|-----------------------3-----------3-----------------0---------0- +D|----------------------------------------------------------------- +A|----------------------------------------------------------------- +E|---------------------------------------------------0-----0------- + + + +E|-------0-------------------------------------0-----0-0-2-3-0-2- +B|-1-0-0-----3---1-0---------0-----------0-------4---------4----- +G|---------2---0-----2---2-0-----------2---2-------2------------- +D|---------------------1-----------1-1-------1------------------- +A|-------------------------------0---------0--------------------- +E|-----------------2-----------2--------------------------------- + + + +E|-0-2-3---2-0---------------------------------0-------0-0-2---3- +B|-----3-1-----0---3-1-----0---0-1---0-----0-1---0---4-------4--- +G|---------------2-----1-2---2-----1---2-2---------2------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-0-2-0-2---3-0-2---0-----0-0-------0---0-------0-------0-------3-0- +B|---------4-------4-----4-------0-4-----------0-----0-------0-0----- +G|-----------------------------0-----------0-0-------------0--------- +D|-------------------------------------2-----------2----------------- +A|------------------------------------------------------------------- +E|---------------------0-------------------------------0------------- + + + +E|-2-0---3-3-2-2-0-0-3---2---0-----------------------------------0--- +B|-----0---------------4---1-0---4-0-1-1-0-4-1-0-0-1-4-1-0-----0----- +G|-----------------------------3-----------3-----------------0------- +D|------------------------------------------------------------------- +A|------------------------------------------------------------------- +E|---------------------------------------------------------0-------0- + + + +E|---------0-----------------0---5---------0-5-0---5---0-5-0-5----- +B|-4---1-0---4-4-1-1-0-4-1-1---0-------1-1-----------1---------2--- +G|---0-------------------------------2-----------2---------------2- +D|----------------------------------------------------------------- +A|---------------------0-----------0-------------------0---------0- +E|----------------------------------------------------------------- + + + +E|-5---0-0-5---7---9---0-7-5-5-7---4-9-0-7-5-------4---0-0-4---7----- +B|---2-------2-------2-----------------------0-------0-------0-----0- +G|---------------2---------------1-------------1-1---------------1--- +D|------------------------------------------------------------------- +A|------------------------------------------------------------------- +E|------------------------------------------------------------------- + + + +E|-0-4-7-5-2-----5---2-------2---5-----2-----2-----5-0-2--------- +B|-----------4-----------4-4-------------4-4-------------4---0--- +G|-------------2-------2-------2-----2---------2-----------1---2- +D|-----------------4---------------4----------------------------- +A|--------------------------------------------------------------- +E|-----------------------------------------------0--------------- + + + +E|-0-----0-------0-------0---------0-0-------------0-----0------- +B|-------------0-----0-------0---2-----2---------2---2-2--------- +G|---------1-1---------1-------2---------2-----2---2-------2----- +D|-----2-----------2-------2-----------------2-----------------4- +A|-----------------------------------------4-----------------4--- +E|---0----------------------------------------------------------- + + + +E|-----0----------------------------------------------------------- +B|---2---------0-----------0-----------------0-------------0------- +G|-2---------1---1-------1---1-------------2---2---------2---2----- +D|-------4-2-------2---2-------2---------1-------1-----1-------1--- +A|-------2-----------2-----------4---2-4-----------0-2-----------0- +E|-------------------4-------------4-----------------------------2- + + + +E|-----------------0-----------0-----0-----------0--------------- +B|---------------0-----------0---0-------0-------0-----------0--- +G|-------------1-------1-1-------------1-------1---1-------1----- +D|---1-------1-------2-------------2---------2-------2---2-----2- +A|-0-------0-------------------------------2-----------2--------- +E|-----0-2-----------------0---------------------------4--------- + + + +E|----------------------------------------------------------------- +B|-----0-------------0-0-------------0-0-----------0--------------- +G|-1-1-----------1-1-------------1-1-------------1-----1-----1---1- +D|-------2---2-2-------------2-2-------------2-2---------2-----2--- +A|---------2-------------2---------------2-----------2-----2------- +E|---------4---------------0---------------0----------------------- + + + +E|--------------------------------------------------------------------- +B|-0-------------0-------0---------------0-0-------------0-0----------- +G|---1---------1-----1-1-------------1-1-------------2-1-------------2- +D|-----2-----2-----2-------2-----2-2-------------2-2-------------2-1--- +A|-------2-------------------2-----------------2---------------0------- +E|---------4-------------------4-------------2---------------2--------- + + + +E|--------------------------------------------------------------- +B|-0-------0-------0-0-------------0-----0-----------0---------0- +G|---2-------2---2-----2---------2---2-2-----------2---------2--- +D|-------1-----1---------1-----1---1-------1-----1---------1----- +A|-----0-------------------------------------0---------0--------- +E|-----------2-------------2-4-----------------4---------2------- + + + +E|----------------------------------------------------------------- +B|-------------0---0---------0---------0-------------0---------0--- +G|-2---------2-2-2---------2---------2---2---------2-----2-2------- +D|---1-----1---------1-------------1-------1-----1-----1-----1----- +A|---------------------0-------0-0-------------0------------------- +E|-----4-2---------------4-------------------4-------------------4- + + + +E|------------------------------------------------------------------- +B|-----------0-0-------------0-0---------0-----0-------0-0----------- +G|-------2-2-------------2-1-----------1---1-----1---1-----1--------- +D|---1-1-------------2-1-----------2-2-------2-----2---------2-----2- +A|-------------------------------2---------2-----2-------------2----- +E|-2-------------0-2-------------0-------------------------------4--- + + + +E|--------------------------------------------------------------------- +B|---0-------0---------------0-0-------------0-0-----------0-0-------0- +G|-1-----1-1-------------1-1-------------2-1-------------2------------- +D|-----2-------2-----2-2-------------2-2-------------2-2---------2-0--- +A|---------------2-----------------2---------------2-----------2------- +E|-----------------4-------------2---------------2--------------------- + + + +E|-----0-------------0-----0---------------0-0-------------0---5-0----- +B|---0---0---------0---0-0-------------0-0---------------0------------- +G|-1-------1-----1---1-------1-----1-1---------------2-1--------------- +D|-------------0-----------------------------------2---------------2--- +A|-----------4-----------------4-2-------------0-2-----------0-------0- +E|--------------------------------------------------------------------- + + + +E|---------5---0-0-5-----9---0-5-9-4-0-------4---0-0-4---7-----0- +B|---2-------2-------2-----2-----------0-------0-------0-----0--- +G|-2-----2-------------2-----------------1-----------------1----- +D|--------------------------------------------------------------- +A|-----0--------------------------------------------------------- +E|-------------------------------4---------4--------------------- + + + +E|-4-7-5-2---------5---2-----2-5-----2-------2-5---2---------0--- +B|---------4-------------4-4-----------4-4-----------4---0------- +G|-----------2-------2-------2-----2-------2-----------1---2----- +D|---------------4---------------4-----------------------------2- +A|--------------------------------------------------------------- +E|---2---------2---------------------------------0--------------- + + + +E|---------0-----0-----------0-0-------------0-----0-----------0- +B|-------0---0-----0-------2-------------2-------2---------2----- +G|---1-1-------1---------2-------------2-------2---------2-----2- +D|-----------2---------2-----------2-------2---------2-------2--- +A|-------------------0-----------0---0-------------0---0--------- +E|-0------------------------------------------------------------- + + + +E|-----0---------0-------0-----------0-----0---------0-------0--- +B|-2---------2-------2-----------2-----2---------2-------2------- +G|---------2-------2-----------2-----2---------2-------2--------- +D|-------2-----2-----------2-------2---------2-----2-----------2- +A|---0-----0-----------0-----0-----------0-----0-----------0----- +E|--------------------------------------------------------------- + + + +E|---------0-----0---------0-------0-2-----------0---0-2--------- +B|-----2-------2---------2-------2-----2-----------2-----------2- +G|---2-----2---------2---------2---------2---2---------------2--- +D|-------2---------2---------2-------------2---2-----------2----- +A|-0---------0---------0---------------------------------0-----0- +E|--------------------------------------------------------------- + + + +E|-0-----0---0-----------0-----------0-0-----------0------------- +B|---------2---2-------2---------0-------------2-0-----------0--- +G|-----2---------2-----2-------1---------2---1-----------1-----1- +D|---2-------------2-2-------2-----------2-2---------2-----2----- +A|-------------------------2-------0---2-------------2-2--------- +E|--------------------------------------------------------------- + + + +E|-0---0-------------0---0-------------0---0-------------0---0----- +B|---0-----------0-----0-----------0-----0-----------0-----0------- +G|-----------1-----1-----------1-----1-----------1-----1----------- +D|-------2-----2-----------2-----2-----------2-----2-----------2--- +A|-------2-2---------------2-2---------------2-2---------------2-2- +E|----------------------------------------------------------------- + + + +E|-----------0-0-------------0---0-------0-0-------0------------- +B|-------0-0-------------0-----0-------0-----2-------0-----0-2--- +G|---1-1-------------1-----1---------1---------1-------1--------- +D|-2-------------2-----2-----------2-------------2-------2------- +A|---------------2-2---------------2---------------------------2- +E|--------------------------------------------------------------- + + + +E|---------0-------0-0-----------0-------------0----------------- +B|-------0-------0-----0-----------0-----0---0-----------0------- +G|---1---------1---------1-1---------------------1--------------- +D|-2---------2---------------2-2-----------2--------------------- +A|-----2-----------------------------2-2-----------1-2-2---1-2-0- +E|-----------------------------------------------------------2--- + + + +E|-----------------------0-----------0--------------------------------- +B|-----------------------------------4-----4-2-----2-1---1---1-------1- +G|---2-------------2-1---------1---------------------------1-------1--- +D|-1-----------2-1-----2-----2---1-2---1---------------1-------1------- +A|---------2-0-------------2-------------4-----3-4---------------3----- +E|-----2-0-----------------0------------------------------------------- + + + +E|----------------------------------------------------------------- +B|-1-----1-------------------------------2-------2-2-2---2-----2--- +G|---------------------------------------------2-------2----------- +D|---------1---3-1-----1-3-1-----------------2-----2---------1---2- +A|---3-4-----3-----4-4---3---4-4-3-4-3-4---3-------------4-4------- +E|----------------------------------------------------------------- + + + +E|-------------------------------------------------------------7- +B|-------------------------------4-----4---------------0---4----- +G|--------------------------------------------------------------- +D|---4-2-1-1-2---4-1-2-1-----1-1-----1---1-4-1-4-1-4-----1---4--- +A|-4-----------4---------4-4-------4-2-----2---2-----2----------- +E|--------------------------------------------------------------- + + + +E|-5-----4-7-2-5---4-0-2-------0-------0-----------0------------- +B|---0-4-------------------------0-------0-------2-----------2--- +G|---------------------------1-------1---------2-----------2----- +D|-------------------------2-------2---------2---------2-------2- +A|-----------------------------------------0---------0---0------- +E|---------------0-------0--------------------------------------- + + + +E|-0-----0-----------0-----0-0---------0-------0-----------0----- +B|-----2---------2-----2-----------2-------2-----------2-----2--- +G|---2---------2-----2-----------2-------2-----------2-----2----- +D|---------2-------2-----------2-----2-----------2-------2------- +A|-------0---0-----------0-------0-----------0-----0-----------0- +E|--------------------------------------------------------------- + + + +E|-0---------0-------0-----------0-----0---------0-------0-0----- +B|-------2-------2-----------2-------2---------2-------2-----2--- +G|-----2-------2-----------2-----2---------2---------2---------2- +D|---2-----2-----------2-------2---------2---------2------------- +A|-----0-----------0-----0---------0---------0------------------- +E|--------------------------------------------------------------- + + + +E|---------0---------0-------0-------0---4---------0-0-----4-0-4----- +B|-------2---------2-------2-------0-------------0---2-----0-------0- +G|---2-----------2-------2-------1-------------1-------1-2-------1--- +D|-2---2-------2-------2-------2-----------2-2-------2---------2----- +A|-----------0-----0-------------------0----------------------------- +E|------------------------------------------------------------------- + + + +E|-0---4-0---4-----0---4-0---4---0-4-----0---4-------0---0-4---4- +B|-------0-------0-------0-----0---------0-------0-------0------- +G|-----1-------1-------1-----1---------1-------1-------1--------- +D|---2-----2---------2-----2---------2-----2-------2---------2--- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-----0-4-----0-4---------0-0-4-4-4-0---------0-4-------0---4---0--- +B|---0---------0-------0---0-----------0-----0---------0-----------0- +G|-1---------1-------1---1---------------1-1---------1---------1----- +D|---------2-------2---2---------------------------2-------2--------- +A|------------------------------------------------------------------- +E|------------------------------------------------------------------- + + + +E|-4-------0-4-2-----------------2-2-----------------2-----2-2--- +B|---0-----------4-------------4-4---------------4-------------4- +G|-----1-----------2---------2-------2---------2---------2------- +D|-------2-----------4-----4-----------4-----4---------4--------- +A|---------------------2-2---------------2-2-------2------------- +E|--------------------------------------------------------------- + + + +E|---------------2-----2-------0-----------------------0--------- +B|-4-----------4-----4-----------0-------------------0-----0----- +G|---2-----2-------------2---------1---------------1-----1------- +D|-----4-4-----------------4---------2---------2-------2--------- +A|-----------2-----2---------2---------2-----2---2-------------2- +E|---------------------------------------0-0---0-------------0--- + + + +E|---0-----0-----------0-----------0-----------0--------- +B|-------0-----------0-----------0-----------0-------0--- +G|-----1-----------1-----------1-----------1---------1--- +D|-2-------------2-----------2-----------2---------2----- +A|-------------2-----------2-----------2---------2------- +E|-----------0-----------0-----------0-----------------0- + diff --git a/guitar/midi/alegriasTRK2_imp.tab b/guitar/midi/alegriasTRK2_imp.tab new file mode 100644 index 0000000..c689857 --- /dev/null +++ b/guitar/midi/alegriasTRK2_imp.tab @@ -0,0 +1,1018 @@ +%TabMaster v2.00r% + + +E|-0-4-2-0-4-2-0-4-2-4-2-0-0---2---0---2---2-------2---2---2-5-2- +B|-----------------4---------4-------4-----------4---4-----4----- +G|-------------------------------2-----------2-2---------2------- +D|---------------------------------------4-----------4----------- +A|---------------------------2-----------2----------------------- +E|--------------------------------------------------------------- + + + +E|-4-2-5-4-5-2-4-0-5-4-2-----0-0-------0-----0-------0-----0-0--- +B|-----------------------4---------4-0-------------0---0-------0- +G|-------------------------------1-------------1-1-------1------- +D|-----------------------------------------2-----------2--------- +A|--------------------------------------------------------------- +E|-------------------------0-------------0----------------------- + + + +E|-0-4-2-0-4-2-0-4-2---4-2---0----------------------------------- +B|-------------------4-----3---4---2-3-----2-----2-------2---2--- +G|---------------------------------------2-------------2---2----- +D|-------------------------------------2-----------2-2---------2- +A|--------------------------------------------------------------- +E|-------------------------------4-----------4-4-----------4----- + + + +E|-------------------------0---------0--------------------------- +B|---2---2---4-2---------4---2---------0-2-------0---0-------0--- +G|-2---2---------2-2-----------2-2-----------1-2-----------1----- +D|---------2---------2-2---------2---------2-----------2-2------- +A|-------------------------------------------------2-----------2- +E|---------------------------------0---------------0------------- + + + +E|--------------------------------------------------------------- +B|---0-----0---0---2-0---------0-2---------0--------------------- +G|-1-----1---1---------1-1---------1-1---------2-1-------2---2--- +D|-----2---------2---------2-2---------2-2-----------1-2-------1- +A|-------2---------2-------------------------------0-------0---0- +E|-------------------------------------------2-------------2----- + + + +E|-------------------------0---2---4-5-0-2-4-4-2-5-4-0-2---0----- +B|---------0---0---2-0-4-0---2---4-----------------------------0- +G|---2-2---------2-----------------------------------------1----- +D|-1---------1-------------------------------------------2---2--- +A|-------0------------------------------------------------------- +E|-----------------------------------------------0-------0------- + + + +E|---0-----------------------0---0-----------0---------------0--- +B|-----2-----0-------------2---2-----------2-----------2-------2- +G|-1-----1-----------1-----1-----------1-------------1-----1----- +D|---------2-------2-----2-----------2-----------2-------2------- +A|-------------2-2-----2-----------2-----2-----2---2------------- +E|--------------------------------------------------------------- + + + +E|-0-------------0---0---------------0---0-------------0-0------- +B|-----------2-----2-------------2-2-------------2-----2--------- +G|-----1-------1---------------1-----1-------1-------1----------- +D|---2---2---------------2-2---------------2-------2---------2-2- +A|-2-------2-----------2-----2---------2-------2-----------2----- +E|--------------------------------------------------------------- + + + +E|-----------0-0-0---------------0-----0-------------0-0--------- +B|-------2-2-2---------------2-----2-------------2-2------------- +G|-1-1---------1---------1-----1-----------1-1-----------------1- +D|-----2-------------2-----2-------------2-----2-----------2----- +A|-2---------------2---2-------------2-----------2-------2---2--- +E|--------------------------------------------------------------- + + + +E|-------0-0-------------0-0---0-----0-----------------------0-0- +B|-----2---2---------2-------2---2-----2-----------------2-2----- +G|---1-----------1-----1-----------1-----1-----------1---------1- +D|-2-----------2-------------2---------2-----2-----2---2--------- +A|-----------2-----2-----------------------2---2-2-----2--------- +E|--------------------------------------------------------------- + + + +E|-0-----------------0---0-0---------------0--------------------- +B|---2-----0-------2---------2-2---------2---0-0-------------2-2- +G|-----1---------1-------------1-1-1---------------------1-1----- +D|-------2-----2-------2-------------2-2-------------2-2--------- +A|-----------2-------------------2---------------2-2------------- +E|--------------------------------------------------------------- + + + +E|-0-0-0-0---------------------------------0-0---------0--------- +B|---------2-2---------0-0-------------2-2-----------2---------2- +G|-------------1-1-----------------1-1-------------1---------1--- +D|-----------------2-2---------2-2---------------2---------2----- +A|-------------------------2-2-----------------2---------2------- +E|--------------------------------------------------------------- + + + +E|-0-0---------------0---0-------------------------0---0---0----- +B|-----2-----------2---0---2-------------------2-2---2----------- +G|-------1-------1-----------1-------------1-1-------1----------- +D|-----------2-2---------------2-------2-2---------------2-----2- +A|---------2---------------------2-2-2---------------2-------2--- +E|--------------------------------------------------------------- + + + +E|-----0---------0-0---------------0-----------------2-0--------- +B|---2---------2-----0-----------2---------------4-2-----------4- +G|-1---------1---------1-------1-------------2-1-------------2--- +D|---------2-------------2---2-----------4-2---------------4----- +A|-------2-----------------2---------2-2-----------------2------- +E|--------------------------------------------------------------- + + + +E|-2---------2-------0-----2-2---------------2---2-----------2--- +B|---------4-----------4-0-4-------------4-----4---------4-----4- +G|-------2---------2-------1-----2-----2-----------2---2--------- +D|-----4---------4---------4-------2-4---------4-----4---------4- +A|---2---------2---------2-----2-----------2-----2---------2----- +E|--------------------------------------------------------------- + + + +E|-2-----------2---2---------------2-2-------2-------2---2------- +B|---------4-----4-----------4---4---------4-------4-------4----- +G|---2---2-----------2-----2-----------2-------2-------2-----2--- +D|-----4---------4-------4-------4---------4-------4-----------4- +A|-2---------2---------2-------2---------2-------2--------------- +E|--------------------------------------------------------------- + + + +E|---------2---------2-2-2-------------------------2-2---2-2----- +B|-------4---------4-------4-4-----------------4---4---------4-4- +G|-----2-----2-----------------2-2---------2-2------------------- +D|---4-----------4-----------------4-4---4-------4--------------- +A|-2-----------2-----------------------2---------------2--------- +E|--------------------------------------------------------------- + + + +E|-----------------5-------2---------5-----------2-5------------- +B|---------------4-------------4---4-----------4-----4---------4- +G|-2-2---------2---------2-------2-----------2---------2-----2--- +D|-----4-4---4-------4-------4-------------4-------------4-4----- +A|---------2-----------2---------------2-2---------------2------- +E|--------------------------------------------------------------- + + + +E|-5-5---------------4-----5-------5---4---------5-----2-----5-5- +B|-----4-----------4---------4-------4---4-----------4----------- +G|-------2-------2-------2-------2---------2---2-----------2----- +D|---------4---4-------4-------4-------------4-----4---4--------- +A|-----------2-------------------2-----------2-----------2------- +E|--------------------------------------------------------------- + + + +E|-------------------2-----4-----2-4-------------2---------5----- +B|-4-4-------------4---------4-------4-4-----------------4------- +G|-----2---------2-------2---------------2-2-----------2-------2- +D|-------4-----4-------4---------------------4-4-----4-------4--- +A|---------2-2-----------------2-------------------2------------- +E|--------------------------------------------------------------- + + + +E|---2---------5---------2---5-----------5-5---------------4----- +B|-------4---4-----------4-4-----------4-----4-----------4------- +G|---------2-----------2-------2-----2---------2-------2-------2- +D|-----4-------------4-----------4-4-------------4---4-------4--- +A|-2-------------2-2-------------2-----------------2------------- +E|--------------------------------------------------------------- + + + +E|-5-------5---4---------5-----2-----5-5-------------------2----- +B|---4-------4---4-----------4-----------4-4-------------4------- +G|-------2---------2---2-----------2---------2---------2-------2- +D|-----4-------------4-----4---4---------------4-----4-------4--- +A|-------2-----------2-----------2---------------2-2------------- +E|--------------------------------------------------------------- + + + +E|-4-----2-4-------------2---------2-----------2-----2----------- +B|---4-------4-4-----------------4---------------4-4---------4--- +G|---------------2-2-----------2-----------2-2-------------2----- +D|-------------------4-4-----4---------4-4---------------4------- +A|-----2-------------------2---------2-----------------2-------2- +E|--------------------------------------------------------------- + + + +E|-2-------2-----2-2---------------2---2-----------2---2--------- +B|-----------4-4-4-------------4-----4---------4-----4---------4- +G|-------2---------2---2-----2-----------2---2-----------2---2--- +D|-----4---------4-------4-4---------4-----4---------4-----4----- +A|---2---------2-----2-----------2-----2---------2-----2--------- +E|--------------------------------------------------------------- + + + +E|---2---2-------------2-4-------2-------2---4---------4--------- +B|-----4-----------4-4---------4-------4-------4---4------------- +G|---------2-----2---------2-------2-------2---------2---2------- +D|-----4-------4-----4---------4-------4-----------4-------4---4- +A|-2---------2-----2---------2-------2-----------2-----------2--- +E|--------------------------------------------------------------- + + + +E|-----5-5-4---------------5-------5---0---------0-----0-0------- +B|---4-------4-4---------------4-----4-------------0-------0-2--- +G|-2-------------2-2-------------2-----2-------1-----1---------1- +D|-------------------4-4-----4-----------4---2-----2------------- +A|-----------------------------2--------------------------------- +E|-----------------------0-----------------0--------------------- + + + +E|-------------------0---0-------------0---0---0-------------0--- +B|---------------2-----2-----------2-----2---------------2-2----- +G|---------1-------1-------------1---1---------------1-1--------- +D|-2-----2---2---------------2-----2-------------2-2------------- +A|---2-2-------2-----------2---2-------------2---2-------------2- +E|--------------------------------------------------------------- + + + +E|-0---------------0-0---------------0-0---------------0-0------- +B|-----------2-2-----------------2-2---------------2-2----------- +G|---------1-----1-----------1-1---------------1-1--------------- +D|---2-2-------------------2-2-------------2---2-------------2-2- +A|-------2-------------2-2---------------2---2-------------2---2- +E|--------------------------------------------------------------- + + + +E|---------0-0-----------------0-0-----------0---0-------------0- +B|-----2-2---------------2---2-------------2---2-------------2--- +G|-1-1-----------------1---1-----------1-1---------------1---1--- +D|---------------2---2---------------2---2-----------2-----2----- +A|-------------2---2---------------2-2-------------2---2--------- +E|--------------------------------------------------------------- + + + +E|---0---------------0---0-0-0-------------------------0-----0-0- +B|-2-----------2-------2-------2-------2-------------2-2--------- +G|---------1-----1---------------1-------1---------1-------1----- +D|-------2---------2---------------2---------2---2-------2------- +A|-----2-----2-----------------------2-----2---2---------2------- +E|--------------------------------------------------------------- + + + +E|-----------------0---0-0---------------0---------------------0- +B|-2-----0-------2---------2-2---------2---0-0-------------2-2--- +G|---1---------1-------------1-1-1---------------------1-1------- +D|-----2-----2-------2-------------2-2-------------2-2----------- +A|---------2-------------------2---------------2-2--------------- +E|--------------------------------------------------------------- + + + +E|-0-0-0---------------------------------0-0-----0-------0------- +B|-------2-2---------0-------------3-2-------3---------3--------- +G|-----------1-1---------------1-1-------1-----------1---------1- +D|---------------2-2-------0-2---------0-----------0-------0----- +A|---------------------2-2---------------------2-------------2--- +E|--------------------------------------------------------------- + + + +E|---0---0-0---------0-------0-0-----------------0-----0--------- +B|-3-----3-2-------------3-3-----3-------------3---------3------- +G|-----1-----1-----1---1-----------2---------1-------------2----- +D|-0---------0---2---0---------------0-----0-------------------0- +A|-------------2-----------------------2-2---------2-2-------2--- +E|--------------------------------------------------------------- + + + +E|-------0-0-----------------------0-0-0-0----------------------- +B|-----3-----3-----------------3-3---------3-3------------------- +G|---1---------2-----------1-1-----------------2-2-------------2- +D|-0-------------0-----0-0-------------------------0-0-----2-0--- +A|-----------------2-2---------------------------------2-0------- +E|--------------------------------------------------------------- + + + +E|-----0-0-------------------0-----------0-----0-------0--------- +B|---3-----3---------------2---2-------2---2-2-------2----------- +G|-1---------2---------2-2-------2---2---2-----2---2-----------1- +D|-------------0-2---2-------------2-------------4---------4-2--- +A|-----------------0---------------4-------------4-------2------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-0-------------0-----0-------0---------0-------------0--------- +G|---1---------1---1-1-------1---------2---2---------2---2------- +D|-----2-----2---2-----2---2---------1-------1-----1-------1----- +A|-------2---------------4-------2-4-----------2-0-------------0- +E|---------4-------------4-----------------------------------2--- + + + +E|-----------4-----------4-4---------4-4-----4-0-------0-0------- +B|--------------------------------------------------------------- +G|---------1-------0-1-1-----0-0-1-1-----0-1--------------------- +D|-----2---------2-------------------------2-----1-2-2-----1-1-2- +A|---2---------2------------------------------------------------- +E|-0-----2-------0----------------------------------------------- + + + +E|---0-0-----0-----------------------------------------5--------- +B|-------------0-------0-0---------0-0---------0-0---2---0---1-2- +G|--------------------------------------------------------------- +D|-2-----1-2----------------------------------------------------- +A|---------2-----1-2-2-----4-1-2-2-----1-4-2-2-----1-------2----- +E|--------------------------------------------------------------- + + + +E|---5-5---------5-5-------5-4-------4-4---------4-4-----4-2----- +B|-2-----1-1-2-2-----1-0-2-------0-0---------0-0-------0--------- +G|-----------------------------3---------3-3---------3-2-----1-2- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---2-2-------2-2-----0-2---0---4-------4-4---------4-4-----4-0- +B|--------------------------------------------------------------- +G|-2-----1-2-2-----2-1-----1---1---0-1-1-----0-0-1-1-----0-1----- +D|---------------------------------------------------------2----- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------0-0---------0-0-----0----------------------------------- +B|-----------------------------0-------0-0---------0-0---------0- +G|--------------------------------------------------------------- +D|-1-2-2-----1-1-2-2-----1-2------------------------------------- +A|-------------------------2-----1-2-2-----4-1-2-2-----1-4-2-2--- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-0-----0---0-----------0--------------------------------------- +G|---------2---2------------------------------------------------- +D|-----1-----1---------1---2-1-2-1-4-2-1-2-------4--------------- +A|---1-----------2-2-4-----2-4-----------------0---2---0-2-0-4-2- +E|-----------------------------------------2-4-----2-4----------- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------0---------0---0-2---0- +G|-------------------------------------------------1---------1--- +D|-----------------------------------------------2---------2----- +A|-0-2-4-4-2-0-4-2-0-2-0-0-2---0-----0---------2-------2--------- +E|---------------------4-----4---2-4---0-4---2------------------- + + + +E|---------0---------------------------0------------------------- +B|-------2-----2-------0---------0-----------2-----0-----------0- +G|-----1-------------1---------2---------------2-------1-----2--- +D|---2-------------2---------1-----------1-------2---------1----- +A|-2-------------2---------0---------0-----2-------------0------- +E|-----------0-----------2---------2-----------------2----------- + + + +E|-------------------------------------------------------------0- +B|---------0-------------0-0---------0-------0-------0-------0--- +G|-------2-----------1-2-----------2-------2-------2-------2----- +D|-----1---------2-1-------------1-------1-------1-------1------- +A|---0-------2-0---------------0-------0-------0-------0--------- +E|-2---------2---------------2-------2-------2-------2----------- + + + +E|---------------------0-0-0-----------------------------0-0-0--- +B|-0-------0---------0-------0-0---------------------0-0--------- +G|---1-------2-----1-------------1-1-------------1-1------------- +D|-----2-----1---2-------------------2-2-----2-2----------------- +A|-------0-----2-------------------------2-2--------------------- +E|-------2-----------------------------------------------------1- + + + +E|-----------------0---------------------------------------0----- +B|-0-------------0---------------------------------------2------- +G|---1---------1-------------------------------------1-1-----1--- +D|-----2-----2-----------------------------------2-----2--------- +A|---------2-----------------------------------2---2------------- +E|-------2-----------1-1-2-2-1-1-2-2-1-1-0-2-1-----------------0- + + + +E|---------0-0-----------------------0--------------------------- +B|-----2-2-----------0---------0-----------2-----0-----------0--- +G|-1---1-----------1---------2---------------2-------1-----2----- +D|---2-----------2---------1-----------1-------2---------1------- +A|-2-----------2---------0---------0-----2-------------0--------- +E|---------------------2---------2-----------------2-----------2- + + + +E|-----------------------------------------------------------0--- +B|-------0-------------0-0---------0-------0-------0-------0---0- +G|-----2-----------1-2-----------2-------2-------2-------2------- +D|---1---------2-1-------------1-------1-------1-------1--------- +A|-0-------2-0---------------0-------0-------0-------0----------- +E|---------2---------------2-------2-------2-------2------------- + + + +E|-------------------0---0-0-------0---------------0---0-0------- +B|-------0-------0-----0-----0-------0-----------0-----0---0----- +G|-1---2-------1---1-----------1-------1-------1-----1-------1--- +D|---2---1---2---------2---------2-------2---2-2---------------2- +A|-----0---2-------------------------------2---------2----------- +E|-----2--------------------------------------------------------- + + + +E|---------------0----------------------------------------------- +B|---------0-0---------------------0-0-------------0-0---------0- +G|-----2-1-----2---------2-----2-2-------------2-2---------1-2--- +D|---1-------------1---1---1-1-------------1-1-----------------1- +A|-2-----------------0-2---------------0------------------------- +E|---------------------------------------2-------------0-2------- + + + +E|---0---------------0-0---0-0---------0-------0-----2---0------- +B|-0-----------0---0-----0-----2-----------2-2-------------2-2--- +G|---------1-1-------1-----------2-------2-------2-----2-------2- +D|-----2---------2-----------------2---------------2------------- +A|-----------------------2-----------2--------------------------- +E|-------0------------------------------------------------------- + + + +E|-0---2---0----------------------------------------------------- +B|-------0---2---------0-------0-----2---0-----0-----2-0-0------- +G|-------------1-2---------1-1-------------1-1-------------2-1--- +D|-----------------2-----2-------2-----2---------2-------------1- +A|-------------------2-------------2----------------------------- +E|---0---------------0-----------------------------2------------- + + + +E|-----------------------------------0-----------0-----0-------0- +B|-------0-------0---1---2-3---0-4-1---2---3-0-4-------------0--- +G|-----------2-2-------------2-----------1---------------1-1----- +D|-2-------1-------1---1-----------------------------2----------- +A|-----2-------------2------------------------------------------- +E|---2-----------------------------0---------------0------------- + + + +E|-----0---------0---0---2---4-5-0-4-2-2-4-0-5-4---2-0-2-0-0-2-0- +B|-0-------0-0-2---4-0-2---4---------------------4---------4----- +G|-------1------------------------------------------------------- +D|---2----------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-2-4-2-0-0-2-4-----2-0---0-----2-4---5-0-4-2-2-4-5---4-0-2----- +B|---------------0-2-----4---0-2-----4--------------------------- +G|-------------------------------------------------------------2- +D|-----------------------------------------------------------1--- +A|---------------------------------------------------2----------- +E|--------------------------------------------------------------- + + + +E|-0---2-----------2---0-----2-4---5-0-4-2-2-4-5-4-4-2-2-0-2-4-0- +B|---0-------0-0-2---4---0-2-----4------------------------------- +G|-------2------------------------------------------------------- +D|---1----------------------------------------------------------- +A|---------2----------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-2---0-0-2---0-----0-----------0-----2-4---5-0-4-2-2-4-5---4-0- +B|---4-------4---4-2---0-2-4-2-4---0-2-----4--------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|---------------------------------------------------------0----- + + + +E|-2-----0-------0---------0---------0-----0-------------0---0--- +B|---------0-------0-----2---------2-----2-----------2-----2----- +G|-----1-------1-------2---------2-----2---------2---------2----- +D|---2-------2-------2---------2---2-----------2-------2--------- +A|-----------------0---------0-----0---------0-----0-----------0- +E|--------------------------------------------------------------- + + + +E|-------0-0---0-------------------0---0---------------0-0------- +B|-----2---------2-------------2-----2-------------2---2--------- +G|---2-------2-------------2---------2---------2-----2---------2- +D|-2-------------------2-2-------2---------2-----2---------2----- +A|-----------------0-0-------0-----------0---0-----------0---0--- +E|---------0----------------------------------------------------- + + + +E|-------0---0-------------0-----0-2-------0-----------------0-0- +B|---2-----2-----------2-------2-----2-------------------2-2----- +G|-----2-----------2-----2-------------2-------------2-2--------- +D|-2-------------2-----------2-----------2-------2-2------------- +A|-------------0-----0-----------------------0-0----------------- +E|--------------------------------------------------------------- + + + +E|-0-2-------------0-------------------0-0-------------0-0------- +B|-----2-2-------------------------2-0-------------0---0--------- +G|---------2-2-----------2-----2-1-------------1-------1-------1- +D|-------------2-2---------2-2---------------2-------2-------2--- +A|-------------------0-2-------------------2-----2---------2----- +E|--------------------------------------------------------------- + + + +E|-------0-----------0---0---0-----0-----------0---0---------0--- +B|-----0---0---0-------0-2-----------------0-------0-------0---0- +G|-------1---------1-------1-----------1---------1-------1-----1- +D|---2-----------2-------2-------2---2-------2---------2---2----- +A|-2---------2-----------------2---2-----2-----------2---2------- +E|--------------------------------------------------------------- + + + +E|---------------0-0-0---------0-------0-0----------------------- +B|---------0-------0-------0-0-------------2-----0-------------0- +G|-----1-------1---------1-----------1-------1-------------1-1--- +D|---2-------2---------2---------2-------------2-------2-2------- +A|-2-----2-----------2-------------2---------------2-2----------- +E|--------------------------------------------------------------- + + + +E|---0-0-0-0-------------------------0---0----------------------- +B|-0---------0-2---------0---------0---0---0-----------0--------- +G|---------------1-1-------------1-----------1------------------- +D|-------------------2-2-------2---------------2----------------- +A|-------------------------2-2-------------------1-2-2---1---2-0- +E|---------------------------------------------------------2----- + + + +E|---------------------3-3-3-3-----------3-3-3-3-3-3-3---3------- +B|-------------------------------------0------------------------- +G|---2-2-------------1---------------0-------------------------0- +D|-1-------------2-1---------------2-------------------------2--- +A|-----------2-0-----------------2-------------------------2----- +E|-------0-2-------------------0-----------------------0--------- + + + +E|-3---3-----------3-3-3-3-3-3-3-3-3-----------3-----3---3---3-3- +B|---0-----------0---------------------------0---------0--------- +G|-------------0---------------------------0-----0--------------- +D|-----------2---------------------------2---------2------------- +A|---------2---------------------------2-----------2------------- +E|-------0---------------------------0---------------------0----- + + + +E|-3-3-3---3-------3---3-----------3-3-3-3-3---3-----3-2-0-----3- +B|-------------------0-----------0-----------0---------0-0---3--- +G|---------------0-------------0-----------------0--------------- +D|-------------2-------------2---------------------2------------- +A|-----------2-------------2-----------------------2------------- +E|-------0---------------0---------------------------------0----- + + + +E|-2-0---------------------------------------2-2-2-2-----------2- +B|-1-0---3---1-0-----------0---------0-----------------------0--- +G|-----2---0-------2---2-0---------2---2-----2-------------2----- +D|-------------------1---------1-1---------1-------------1------- +A|---------------------------0-----------0-------------0--------- +E|---------------2-----------2-----------------------2----------- + + + +E|-2-2-2-2-2-2-2-2-2-----------2-----------2-2-2-2-3-3-3-3-----2- +B|---------------------------0---------0------------------------- +G|-------------------------2-------------2----------------------- +D|-----------------------1-----------1--------------------------- +A|---------------------0-----------0-------------------------0--- +E|-------------------2-----------2-------------------------2----- + + + +E|-------------3-----3-3-3-3-2-2-2-2-3-----------2-----------2-2- +B|-----------0-----0---------------------------0---------0------- +G|-------2-------2---------------------------2---------2--------- +D|-1-1-------------------------------------1---------------1----- +A|-----0---------------------------------0-----------0----------- +E|---------2---------------------------2-----------2------------- + + + +E|-2-2-----2-------------------------------------------0--------- +B|-----0-------0-3-1-0-0---3-0-1-1-0---3-0-1-1---3-0-1----------- +G|-------------2---------3-----------3-----------0-----------0-0- +D|-----------1-------------------------------------------2------- +A|-------0------------------------------------------------------- +E|-------------2-------------------------------0-----------0----- + + + +E|---0-----0-----0-3-2-0-3-3-2-2-0-0-3-----2-0------------------- +B|-0---0-----0-0-------0---------------3-1-----0---3-1-0-1-0-3-1- +G|-------0---------------------------------------3-----------3--- +D|-----2--------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---------------------0-----------0----------------------------- +B|-0-0-1-3-1-0-----0-----3---1-0-0-----3---1-0---------0--------- +G|---------------0---------0---------2---0-----2---2-0----------- +D|-----------------------------------------------1-----------1-1- +A|---------------------------------------------------------0----- +E|-------------0-----0-----------------------2-----------2------- + + + +E|---------0-----0-0-2-3-0-2-0-2-3---2-0------------------------- +B|---0-------4---------4---------3-1-----0---3-1-----0---0-1---0- +G|-2---2-------2---------------------------2-----1-2---2-----1--- +D|-------1------------------------------------------------------- +A|-----0--------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---------0-------0-0-2---3-0-2-0-2---3-0-2---0-----0-0-------0- +B|-----0-1---0---4-------4-----------4-------4-----4-------0-4--- +G|-2-2---------2-----------------------------------------0------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|-----------------------------------------------0--------------- + + + +E|---0-------0-------0-------3-0-2-0---3-3-2-2-0-0-3---2---0----- +B|---------0-----0-------0-0---------0---------------4---1-0---4- +G|-----0-0-------------0-------------------------------------3--- +D|-2-----------2------------------------------------------------- +A|--------------------------------------------------------------- +E|-----------------0--------------------------------------------- + + + +E|-------------------------------0-----------0-----------------0- +B|-0-1-1-0-4-1-0-0-1-4-1-0-----0-----4---1-0---4-4-1-1-0-4-1-1--- +G|---------3-----------------0---------0------------------------- +D|--------------------------------------------------------------- +A|-------------------------------------------------------0------- +E|-------------------------0-------0----------------------------- + + + +E|---5---------0-5-0---5---0-5-0-5-----5---0-0-5---7---9---0-7-5- +B|-0-------1-1-----------1---------2-----2-------2-------2------- +G|-------2-----------2---------------2---------------2----------- +D|--------------------------------------------------------------- +A|-----0-------------------0---------0--------------------------- +E|--------------------------------------------------------------- + + + +E|-5-7---4-9-0-7-5-------4---0-0-4---7-----0-4-7-5-2-----5---2--- +B|-----------------0-------0-------0-----0-----------4----------- +G|-----1-------------1-1---------------1---------------2-------2- +D|---------------------------------------------------------4----- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-----2---5-----2-----2-----5-0-2---------0-----0-------0------- +B|-4-4-------------4-4-------------4---0---------------0-----0--- +G|-------2-----2---------2-----------1---2---------1-1---------1- +D|-----------4---------------------------------2-----------2----- +A|--------------------------------------------------------------- +E|-------------------------0-----------------0------------------- + + + +E|-0---------0-0-------------0-----0-----------0----------------- +B|-----0---2-----2---------2---2-2-----------2---------0--------- +G|-------2---------2-----2---2-------2-----2---------1---1------- +D|---2-----------------2-----------------4-------4-2-------2---2- +A|-------------------4-----------------4---------2-----------2--- +E|-----------------------------------------------------------4--- + + + +E|-----------------------------------------------------------0--- +B|---0-----------------0-------------0---------------------0----- +G|-1---1-------------2---2---------2---2-----------------1------- +D|-------2---------1-------1-----1-------1-----1-------1-------2- +A|---------4---2-4-----------0-2-----------0-0-------0----------- +E|-----------4-----------------------------2-----0-2------------- + + + +E|---------0-----0-----------0----------------------------------- +B|-------0---0-------0-------0-----------0-------0-------------0- +G|-1-1-------------1-------1---1-------1-----1-1-----------1-1--- +D|-------------2---------2-------2---2-----2-------2---2-2------- +A|---------------------2-----------2-----------------2----------- +E|-----0---------------------------4-----------------4----------- + + + +E|--------------------------------------------------------------- +B|-0-------------0-0-----------0---------------0-------------0--- +G|-----------1-1-------------1-----1-----1---1---1---------1----- +D|-------2-2-------------2-2---------2-----2-------2-----2-----2- +A|---2---------------2-----------2-----2-------------2----------- +E|-----0---------------0-------------------------------4--------- + + + +E|--------------------------------------------------------------- +B|-----0---------------0-0-------------0-0-----------0-------0--- +G|-1-1-------------1-1-------------2-1-------------2---2-------2- +D|-------2-----2-2-------------2-2-------------2-1---------1----- +A|---------2-----------------2---------------0-----------0------- +E|-----------4-------------2---------------2-------------------2- + + + +E|--------------------------------------------------------------- +B|-----0-0-------------0-----0-----------0---------0------------- +G|---2-----2---------2---2-2-----------2---------2---2---------2- +D|-1---------1-----1---1-------1-----1---------1-------1-----1--- +A|-------------------------------0---------0--------------------- +E|-------------2-4-----------------4---------2-----------4-2----- + + + +E|--------------------------------------------------------------- +B|-0---0---------0---------0-------------0---------0------------- +G|-2-2---------2---------2---2---------2-----2-2-------------2-2- +D|-------1-------------1-------1-----1-----1-----1-------1-1----- +A|---------0-------0-0-------------0----------------------------- +E|-----------4-------------------4-------------------4-2--------- + + + +E|--------------------------------------------------------------- +B|-0-0-------------0-0---------0-----0-------0-0-------------0--- +G|-------------2-1-----------1---1-----1---1-----1---------1----- +D|---------2-1-----------2-2-------2-----2---------2-----2-----2- +A|---------------------2---------2-----2-------------2----------- +E|-----0-2-------------0-------------------------------4--------- + + + +E|--------------------------------------------------------------- +B|-----0---------------0-0-------------0-0-----------0-0-------0- +G|-1-1-------------1-1-------------2-1-------------2------------- +D|-------2-----2-2-------------2-2-------------2-2---------2-0--- +A|---------2-----------------2---------------2-----------2------- +E|-----------4-------------2---------------2--------------------- + + + +E|-----0-------------0-----0---------------0-0-------------0---5- +B|---0---0---------0---0-0-------------0-0---------------0------- +G|-1-------1-----1---1-------1-----1-1---------------2-1--------- +D|-------------0-----------------------------------2------------- +A|-----------4-----------------4-2-------------0-2-----------0--- +E|--------------------------------------------------------------- + + + +E|-0-------------5---0-0-5-----9---0-5-9-4-0-------4---0-0-4---7- +B|---------2-------2-------2-----2-----------0-------0-------0--- +G|-------2-----2-------------2-----------------1----------------- +D|---2----------------------------------------------------------- +A|-----0-----0--------------------------------------------------- +E|-------------------------------------4---------4--------------- + + + +E|-----0-4-7-5-2---------5---2-----2-5-----2-------2-5---2------- +B|---0-----------4-------------4-4-----------4-4-----------4---0- +G|-1---------------2-------2-------2-----2-------2-----------1--- +D|---------------------4---------------4------------------------- +A|--------------------------------------------------------------- +E|---------2---------2---------------------------------0--------- + + + +E|---0-----------0-----0-----------0-0-------------0-----0------- +B|-------------0---0-----0-------2-------------2-------2--------- +G|-2-------1-1-------1---------2-------------2-------2---------2- +D|-----2-----------2---------2-----------2-------2---------2----- +A|-------------------------0-----------0---0-------------0---0--- +E|-------0------------------------------------------------------- + + + +E|-----0-----0---------0-------0-----------0-----0---------0----- +B|-2-----2---------2-------2-----------2-----2---------2-------2- +G|-----2---------2-------2-----------2-----2---------2-------2--- +D|---2---------2-----2-----------2-------2---------2-----2------- +A|---------0-----0-----------0-----0-----------0-----0----------- +E|--------------------------------------------------------------- + + + +E|---0-----------0-----0---------0-------0-2-----------0---0-2--- +B|-----------2-------2---------2-------2-----2-----------2------- +G|---------2-----2---------2---------2---------2---2------------- +D|-----2-------2---------2---------2-------------2---2----------- +A|-0-----0---------0---------0---------------------------------0- +E|--------------------------------------------------------------- + + + +E|-------0-----0---0-----------0-----------0-0-----------0------- +B|-----2---------2---2-------2---------0-------------2-0--------- +G|---2-------2---------2-----2-------1---------2---1-----------1- +D|-2-------2-------------2-2-------2-----------2-2---------2----- +A|-----0-------------------------2-------0---2-------------2-2--- +E|--------------------------------------------------------------- + + + +E|-------0---0-------------0---0-------------0---0-------------0- +B|---0-----0-----------0-----0-----------0-----0-----------0----- +G|-----1-----------1-----1-----------1-----1-----------1-----1--- +D|-2-----------2-----2-----------2-----2-----------2-----2------- +A|-------------2-2---------------2-2---------------2-2----------- +E|--------------------------------------------------------------- + + + +E|---0---------------0-0-------------0---0-------0-0-------0----- +B|-0-------------0-0-------------0-----0-------0-----2-------0--- +G|-----------1-1-------------1-----1---------1---------1-------1- +D|-----2---2-------------2-----2-----------2-------------2------- +A|-----2-2---------------2-2---------------2--------------------- +E|--------------------------------------------------------------- + + + +E|-----------------0-------0-0-----------0-------------0--------- +B|---0-2---------0-------0-----0-----------0-----0---0----------- +G|-----------1---------1---------1-1---------------------1------- +D|-2-------2---------2---------------2-2-----------2------------- +A|-------2-----2-----------------------------2-2-----------1-2-2- +E|--------------------------------------------------------------- + + + +E|-------------------------------0-----------0------------------- +B|-0-----------------------------------------4-----4-2-----2-1--- +G|-----------2-------------2-1---------1------------------------- +D|---------1-----------2-1-----2-----2---1-2---1---------------1- +A|---1-2-0---------2-0-------------2-------------4-----3-4------- +E|-----2-------2-0-----------------0----------------------------- + + + +E|--------------------------------------------------------------- +B|-1---1-------1-1-----1-------------------------------2-------2- +G|---1-------1-----------------------------------------------2--- +D|-------1---------------1---3-1-----1-3-1-----------------2----- +A|---------3-------3-4-----3-----4-4---3---4-4-3-4-3-4---3------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-2-2---2-----2---------------------------------4-----4--------- +G|-----2--------------------------------------------------------- +D|-2---------1---2---4-2-1-1-2---4-1-2-1-----1-1-----1---1-4-1-4- +A|-------4-4-------4-----------4---------4-4-------4-2-----2---2- +E|--------------------------------------------------------------- + + + +E|---------------7-5-----4-7-2-5---4-0-2-------0-------0--------- +B|-------0---4-------0-4-------------------------0-------0------- +G|-------------------------------------------1-------1---------2- +D|-1-4-----1---4---------------------------2-------2---------2--- +A|-----2---------------------------------------------------0----- +E|-------------------------------0-------0----------------------- + + + +E|---0-------------0-----0-----------0-----0-0---------0-------0- +B|-2-----------2-------2---------2-----2-----------2-------2----- +G|-----------2-------2---------2-----2-----------2-------2------- +D|-------2-------2---------2-------2-----------2-----2----------- +A|-----0---0-------------0---0-----------0-------0-----------0--- +E|--------------------------------------------------------------- + + + +E|-----------0-----0---------0-------0-----------0-----0--------- +B|-------2-----2---------2-------2-----------2-------2---------2- +G|-----2-----2---------2-------2-----------2-----2---------2----- +D|-2-------2---------2-----2-----------2-------2---------2------- +A|---0-----------0-----0-----------0-----0---------0---------0--- +E|--------------------------------------------------------------- + + + +E|-0-------0-0-------------0---------0-------0-------0---4------- +B|-------2-----2---------2---------2-------2-------0------------- +G|-----2---------2---2-----------2-------2-------1-------------1- +D|---2-------------2---2-------2-------2-------2-----------2-2--- +A|---------------------------0-----0-------------------0--------- +E|--------------------------------------------------------------- + + + +E|---0-0-----4-0-4-----0---4-0---4-----0---4-0---4---0-4-----0--- +B|-0---2-----0-------0-------0-------0-------0-----0---------0--- +G|-------1-2-------1-------1-------1-------1-----1---------1----- +D|-----2---------2-------2-----2---------2-----2---------2-----2- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-4-------0---0-4---4-----0-4-----0-4---------0-0-4-4-4-0------- +B|-----0-------0---------0---------0-------0---0-----------0----- +G|---1-------1---------1---------1-------1---1---------------1-1- +D|-------2---------2-----------2-------2---2--------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---0-4-------0---4---0---4-------0-4-2-----------------2-2----- +B|-0---------0-----------0---0-----------4-------------4-4------- +G|---------1---------1---------1-----------2---------2-------2--- +D|-------2-------2---------------2-----------4-----4-----------4- +A|---------------------------------------------2-2--------------- +E|--------------------------------------------------------------- + + + +E|-------------2-----2-2-----------------2-----2-------0--------- +B|---------4-------------4-4-----------4-----4-----------0------- +G|-------2---------2---------2-----2-------------2---------1----- +D|-----4---------4-------------4-4-----------------4---------2--- +A|-2-2-------2-----------------------2-----2---------2---------2- +E|--------------------------------------------------------------- + + + +E|---------------0-----------0-----0-----------0-----------0----- +B|-------------0-----0-----------0-----------0-----------0------- +G|-----------1-----1-----------1-----------1-----------1--------- +D|-------2-------2---------2-------------2-----------2----------- +A|-----2---2-------------2-------------2-----------2-----------2- +E|-0-0---0-------------0-------------0-----------0-----------0--- + + + +E|-------0--------- +B|-----0-------0--- +G|---1---------1--- +D|-2---------2----- +A|---------2------- +E|---------------0- + diff --git a/guitar/midi/bumblebee.mid b/guitar/midi/bumblebee.mid new file mode 100644 index 0000000..bd70b18 Binary files /dev/null and b/guitar/midi/bumblebee.mid differ diff --git a/guitar/midi/bumblebeeTRK4.prj b/guitar/midi/bumblebeeTRK4.prj new file mode 100644 index 0000000..6698103 --- /dev/null +++ b/guitar/midi/bumblebeeTRK4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\bumblebeeTRK4_imp.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16)(794,16)(795,16)(796,16)(797,16)(798,16)(799,16)(800,16)(801,16)(802,16)(803,16)(804,16)(805,16)(806,16)(807,16)(808,16)(809,16)(810,16)(811,16)(812,16)(813,16)(814,16)(815,16)(816,16)(817,16)(818,16)(819,16)(820,16)(821,16)(822,16)(823,16)(824,16)(825,16)(826,16)(827,16)(828,16)(829,16)(830,16)(831,16)(832,16)(833,16)(834,16)(835,16)(836,16)(837,16)(838,16)(839,16)(840,16)(841,16)(842,16)(843,16)(844,16)(845,16)(846,16)(847,16)(848,16)(849,16)(850,16)(851,16)(852,16)(853,16)(854,16)(855,16)(856,16)(857,16)(858,16)(859,16)(860,16)(861,16)(862,16)(863,16)(864,16)(865,16)(866,16)(867,16)(868,16)(869,16)(870,16)(871,16)(872,16)(873,16)(874,16)(875,16)(876,16)(877,16)(878,16)(879,16)(880,16)(881,16)(882,16)(883,16)(884,16)(885,16)(886,16)(887,16)(888,16)(889,16)(890,16)(891,16)(892,16)(893,16)(894,16)(895,16)(896,16)(897,16)(898,16)(899,16)(900,16)(901,16)(902,16)(903,16)(904,16)(905,16)(906,16)(907,16)(908,16)(909,16)(910,16)(911,16)(912,16)(913,16)(914,16)(915,16)(916,16)(917,16)(918,16)(919,16)(920,16)(921,16)(922,16)(923,16)(924,16)(925,16)(926,16)(927,16)(928,16)(929,16)(930,16)(931,16)(932,16)(933,16)(934,16)(935,16)(936,16)(937,16)(938,16)(939,16)(940,16)(941,16)(942,16)(943,16)(944,16)(945,16)(946,16)(947,16)(948,16)(949,16)(950,16)(951,16)(952,16)(953,16)(954,16)(955,16)(956,16)(957,16)(958,16)(959,16)(960,16)(961,16)(962,16)(963,16)(964,16)(965,16)(966,16)(967,16)(968,16)(969,16)(970,16)(971,16)(972,16)(973,16)(974,16)(975,16)(976,16)(977,16)(978,16)(979,16)(980,16)(981,16)(982,16)(983,16)(984,16)(985,16)(986,16)(987,16)(988,16)(989,16)(990,16)(991,16)(992,16)(993,16)(994,16)(995,16)(996,16)(997,16)(998,16)(999,16)(1000,16)(1001,16)(1002,16)(1003,16)(1004,16)(1005,16)(1006,16)(1007,16)(1008,16)(1009,16)(1010,16)(1011,16)(1012,16)(1013,16)(1014,16)(1015,16)(1016,16)(1017,16)(1018,16)(1019,16)(1020,16)(1021,16)(1022,16)(1023,16)(1024,16)(1025,16)(1026,16)(1027,16)(1028,16)(1029,16)(1030,16)(1031,16)(1032,16)(1033,16)(1034,16)(1035,16)(1036,16)(1037,16)(1038,16)(1039,16)(1040,16)(1041,16)(1042,16)(1043,16)(1044,16)(1045,16)(1046,16)(1047,16)(1048,16)(1049,16)(1050,16)(1051,16)(1052,16)(1053,16)(1054,16)(1055,16)(1056,16)(1057,16)(1058,16)(1059,16)(1060,16)(1061,16)(1062,16)(1063,16)(1064,16)(1065,16)(1066,16)(1067,16)(1068,16)(1069,16)(1070,16)(1071,16)(1072,16)(1073,16)(1074,16)(1075,16)(1076,16)(1077,16)(1078,16)(1079,16)(1080,16)(1081,16)(1082,16)(1083,16)(1084,16)(1085,16)(1086,16)(1087,16)(1088,16)(1089,16)(1090,16)(1091,16)(1092,16)(1093,16)(1094,16)(1095,16)(1096,16)(1097,16)(1098,16)(1099,16)(1100,16)(1101,16)(1102,16)(1103,16)(1104,16)(1105,16)(1106,16)(1107,16)(1108,16)(1109,16)(1110,16)(1111,16)(1112,16)(1113,16)(1114,16)(1115,16)(1116,16)(1117,16)(1118,16)(1119,16)(1120,16)(1121,16)(1122,16)(1123,16)(1124,16)(1125,16)(1126,16)(1127,16)(1128,16)(1129,16)(1130,16)(1131,16)(1132,16)(1133,16)(1134,16)(1135,16)(1136,16)(1137,16)(1138,16)(1139,16)(1140,16)(1141,16)(1142,16)(1143,16)(1144,16)(1145,16)(1146,16)(1147,16)(1148,16)(1149,16)(1150,16)(1151,16)(1152,16)(1153,16)(1154,16)(1155,16)(1156,16)(1157,16)(1158,16)(1159,16)(1160,16)(1161,16)(1162,16)(1163,16)(1164,16)(1165,16)(1166,16)(1167,16)(1168,16)(1169,16)(1170,16)(1171,16)(1172,16)(1173,16)(1174,16)(1175,16)(1176,16)(1177,16)(1178,16)(1179,16)(1180,16)(1181,16)(1182,16)(1183,16)(1184,16)(1185,16)(1186,16)(1187,16)(1188,16)(1189,16)(1190,16)(1191,16)(1192,16)(1193,16)(1194,16)(1195,16)(1196,16)(1197,16)(1198,16)(1199,16)(1200,16)(1201,16)(1202,16)(1203,16)(1204,16)(1205,16)(1206,16)(1207,16)(1208,16)(1209,16)(1210,16)(1211,16)(1212,16)(1213,16)(1214,16)(1215,16)(1216,16)(1217,16)(1218,16)(1219,16)(1220,16)(1221,16)(1222,16)(1223,16)(1224,16)(1225,16)(1226,16)(1227,16)(1228,16)(1229,16)(1230,16)(1231,16)(1232,16)(1233,16)(1234,16)(1235,16)(1236,16)(1237,16)(1238,16)(1239,16)(1240,16)(1241,16)(1242,16)(1243,16)(1244,16)(1245,16)(1246,16)(1247,16)(1248,16)(1249,16)(1250,16)(1251,16)(1252,16)(1253,16)(1254,16)(1255,16)(1256,16)(1257,16)(1258,16)(1259,16)(1260,16)(1261,16)(1262,16)(1263,16)(1264,16)(1265,16)(1266,16)(1267,16)(1268,16)(1269,16)(1270,16)(1271,16)(1272,16)(1273,16)(1274,16)(1275,16)(1276,16)(1277,16)(1278,16)(1279,16)(1280,16)(1281,16)(1282,16)(1283,16)(1284,16)(1285,16)(1286,16)(1287,16)(1288,16)(1289,16)(1290,16)(1291,16)(1292,16)(1293,16)(1294,16)(1295,16)(1296,16)(1297,16)(1298,16)(1299,16)(1300,16)(1301,16)(1302,16)(1303,16)(1304,16)(1305,16)(1306,16)(1307,16)(1308,16)(1309,16)(1310,16)(1311,16)(1312,16)(1313,16)(1314,16)(1315,16)(1316,16)(1317,16)(1318,16)(1319,16)(1320,16)(1321,16)(1322,16)(1323,16)(1324,16)(1325,16)(1326,16)(1327,16)(1328,16)(1329,16)(1330,16)(1331,16)(1332,16)(1333,16)(1334,16)(1335,16)(1336,16)(1337,16)(1338,16)(1339,16) diff --git a/guitar/midi/bumblebeeTRK4.tab b/guitar/midi/bumblebeeTRK4.tab new file mode 100644 index 0000000..efb827a --- /dev/null +++ b/guitar/midi/bumblebeeTRK4.tab @@ -0,0 +1,226 @@ +%TabMaster v1.04a% + + +E|-12-12-11-11-10-10-9-9-10-10-9-9-8-8-7-7-8-8-7-7-6-6-5-5-4-4-3-3-2-2-1-1-0-0------------------------------------------------- +B|---------------------------------------------------------------------------4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-0-0--------------- +G|-------------------------------------------------------------------------------------------------------------3-3-2-2-1-1-0-0- +D|---------------------------------------------------------------------------------------------------------------------------4- +A|----------------------------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------------------- +B|------------------------------------------------------------------------------------------------------- +G|------------------------------------------------------------------------------------------------------- +D|-4-3-3-2-2-1-1-0-0-0-0---------2-2-1-1-0-0-0-0---------2-2-1-1-0-0-----3-3-2-2-1-1-2-2-1-1-0-0--------- +A|-----------------4-4-4-4-3-3-2-2---------4-4-4-4-3-3-2-2---------4-4-3-3---------------------4-4-3-3-4- +E|------------------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------------------------- +B|----------------------------------------------------------------------------------------------------------- +G|----------------------------------------------------------------------------------------------------------- +D|-0-0-1-1-2-2-1-1-0-0-----3-3-2-2-1-1-2-2-1-1-0-0---------0-0-1-1-2-2-1-1-0-0-0-0-----------------0-0-1-1-2- +A|-4-----------------4-4-3-3---------------------4-4-3-3-4-4-----------------4-4-4-4-3-3-2-2-3-3-4-4--------- +E|----------------------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------------------------- +B|------------------------------------------------------------------------------------------------------------- +G|-------------------------------------------------------------0-0-1-1-2-2-1-1-0-0-----3-3-2-2-1-1-2-2-1-1-0-0- +D|-2-3-3-2-2-1-1-2-2-1-1-0-0-0-0-----------------0-0-1-1-2-2-4-4-----------------4-4-3-3---------------------4- +A|-------------------------4-4-4-4-3-3-2-2-3-3-4-4------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------------------------- +B|----------------------------------------------------------------------------------------------------------- +G|---------0-0-1-1-2-2-1-1-0-0-----3-3-2-2-1-1-2-2-1-1-0-0---------0-0-1-1-2-2-1-1-0-0-0-0-----------------0- +D|-4-3-3-4-4-----------------4-4-3-3---------------------4-4-3-3-4-4-----------------4-4-4-4-3-3-2-2-3-3-4-4- +A|----------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------------------------------- +B|--------------------------------------------------------------------------------------------------------------- +G|-0-1-1-2-2-3-3-2-2-1-1-2-2-1-1-0-0-0-0-----------------0-0-1-1-2-2-3-3-2-2-1-1-2-----------2---------------3--- +D|---------------------------------4-4-4-4-3-3-2-2-3-3-4-4------------------------------------------------------- +A|---------------------------------------------------------------------------------0-0-0-0-0-0-0-0-0-0-0-0-0-0--- +E|-------------------------------------------------------------------------------------------------------------4- + + + +E|----------------------------------------------------------------------------------------------------------------------- +B|----------------------------------------------------------------------------------------------------------------------- +G|-3-3-----3-3-----3-3-----3-2-----------2---------------3---3-3-----3-3-----3-3-----3-2-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1-2- +D|----------------------------------------------------------------------------------------------------------------------- +A|-----------------------------0-0-0-0-0-0-0-0-0-0-0-0-0-0---------------------------0---------------0------------------- +E|-----4-4-----4-4-----4-4-4-------------------------------4-----4-4-----4-4-----4-4-4----------------------------------- + + + +E|----------------------------------------------------------------------------------------------------------------- +B|-------------------------------------0-0-1-1-2-2-1-1-0-0---------0-0-1-1-2-2-1-1-0-0-3-----------3--------------- +G|-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1-2-2-3-3-----------------3-3-2-2-3-3-----------------3-3--------------------------- +D|---------------------------------------------------------------------------------------0-0-0-0-0-0-0-0-0-0-0-0-0- +A|----------------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------------------------------- +B|-4---4-4-----4-4-----4-4-----4-3-----------3---------------4---4-4-----4-4-----4-4-----4-3-3-4-4-3-3-2-2-3-3-4-4-3- +G|------------------------------------------------------------------------------------------------------------------- +D|-0-------------------------------0-0-0-0-0-0-0-0-0-0-0-0-0-0---------------------------0--------------------------- +A|---4-----4-4-----4-4-----4-4-4-------------------------------4-----4-4-----4-4-----4-4-4--------------------------- +E|------------------------------------------------------------------------------------------------------------------- + + + +E|---------------------------------------------0-0-1-1-2-2-1-1-0-0---------0-0-1-1-2-2-1-1-0-0-10-10-9-9-8-8-7-7-6-6-11- +B|-3-2-2-3-3-4-4-3-3-2-2-3-3-4-4-3-3-2-2-3-3-4-4-----------------4-4-3-3-4-4-----------------4-4------------------------ +G|---------------------------------------------------------------------------------------------------------------------- +D|-----0---------------------------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------------------------- + + + +E|-11-10-10-9-9-10-10-9-9-8-8-7-7-6-6-7-7-8-8-9-9-10-10-9-9-8-8-7-7-8-8-7-7-6-6-5-5-6-6-7-7-8-8-9-9-8-8-9-9-10-10-11-11-12-12-11-11-10-10-9-9-10- +B|----------------------------------------------------------------------------------------------------------------------------------------------- +G|----------------------------------------------------------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------------------------------------------- + + + +E|-10-9-9-8-8-7-7-8-8-7-7-6-6-5-5-4-4-3-3-2-2-1-1-0-0-1-1-0-0-0-0-1-1-0-0-0-0-1-1-0-0-0-0-1-1-0-0-0-0----- +B|----------------------------------------------------------4-4---------4-4---------4-4---------4-4------- +G|-------------------------------------------------------------------------------------------------------- +D|--------------------------------------------------------------------------------------------------2-2--- +A|------------------------------------------------------------------------------------------------------3- +E|-------------------------------------------------------------------------------------------------------- + + + +E|-----------------------------------------------------------------------------0-0------- +B|-------------------------------------------------------------------------------1-1----- +G|---------------------------------------------------------------------------------2-2-2- +D|-------------------2-2-1-1-0-0-0-0-------------------------------------------------3-3- +A|-3-0-0-----0-0-3-3-----------4-4-4-4-3-3-2-2-3-3-2-2-1-1-0-0--------------------------- +E|-------1-1-------------------------------------------------4-4-3-3-2-2-1-1-0-0--------- + + + +E|---0-0-12-12-8-8-5-5-1-1-5-5-8-8-12-12-0-0-24-24--------------------------------------------- +B|-1-1----------------------------------------------------------------------------------------- +G|-2------------------------------------------------------------------------------------------- +D|-----------------------------------------------------------------------------------0-0-1-1-2- +A|-----------------------------------------------------------------0-0-1-1-2-2-3-3-4-4--------- +E|----------------------------------------------0--0-1-1-2-2-3-3-4-4--------------------------- + + + +E|-----------------------------0-0-------------1-1-0-0-0-0-------------------------0-0-------------1-1-0-0- +B|-------------------------------4-4-3-3-2-2-1-1-----4-4-4-4-3-3-2-2-1-1-2-2-3-3-4-4-4-4-3-3-2-2-1-1-----4- +G|--------------------------------------------------------------------------------------------------------- +D|-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1--------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------- + + + +E|-0-0-------------------------0-0-----------------------------------------0-0-1-1-0-0-0-0--------------------- +B|-4-4-4-3-3-2-2-1-1-2-2-3-3-4-4-4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-2-2-3-3-4-4---------4-4-4-4-3-3-2-2-3-3-2-2-1- +G|------------------------------------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------------------- + + + +E|---------------------0-0-2-2-3-3-4-4-5-5-4-4-3-3-2-2-1-1-6-6-5-5-4-4-5-5-4-4-3-3-2-2-1-1-2-2-3-3-4-4-5-5-4-4-3-3-2-2-1-1-6- +B|-1-0-0-1-1-2-2-3-3-4-4----------------------------------------------------------------------------------------------------- +G|--------------------------------------------------------------------------------------------------------------------------- +D|--------------------------------------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------------------------- + + + +E|-6-5-5-4-4-5-5-4-4-3-3-2-2-1-1-2-2-3-3-4-4-5-5-4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-2-2-3-3-4-4-5-5-6-6-5-5-4-4-5-5-4-4-3-3-2-2-1- +B|----------------------------------------------------------------------------------------------------------------------------- +G|----------------------------------------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------------------------- + + + +E|-1-2-2-3-3-4-4-5-5-7-7-8-8-10-10-12-12-13-13-12-12-11-11-12-12-11-11-10-10-9-9-8-8-13-13-12-12-11-11-12-12-11-11-10-10-9-9-8-8-9-9-10-10-11-11-12-12-4-4-5-5-6- +B|--------------------------------------------------------------------------------------------------------------------------------------------------------------- +G|--------------------------------------------------------------------------------------------------------------------------------------------------------------- +D|--------------------------------------------------------------------------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + +E|-6-7-7-8-8-9-9-10-10-9-9-8-8-7-7-8-8-7-7-6-6-5-5-4-4-5-5-6-6-7-7-8-8-9-9-10-10-11-11-12-12-13-13-12-12-11-11-12-12-13-13-12-12-11-11-12-12-4-4-5-5-6- +B|----------------------------------------------------------------------------------------------------------------------------------------------------- +G|----------------------------------------------------------------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------------------------------------------------- + + + +E|-6-7-7-8-8-9-9-10-10-9-9-8-8-7-7-8-8-7-7-6-6-5-5-4-4-5-5-6-6-7-7-8-8-9-9-10-10-11-11-12-12-13-13-12-12-11-11-12-12-14-14-15-15-16-16-17-17-16-16-15-15-14- +B|---------------------------------------------------------------------------------------------------------------------------------------------------------- +G|---------------------------------------------------------------------------------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------------------------------------------------------------- + + + +E|-14-15-15-14-14-13-13-12-12-13-13-12-12-11-11-10-10-9-9-8-8-7-7-6-6-5-5-4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-0-0------------------------------- +B|----------------------------------------------------------------------------------------------------------4-4-3-3-2-2-1-1-0-0------------- +G|----------------------------------------------------------------------------------------------------------------------------3-3-2-2-3-3-2- +D|------------------------------------------------------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------------------------------------------------ + + + +E|---------------------------------------------------0-0-1-1-0-0-0-0-1-1-0-0-0-0-1-1-0-0-0-0-2-2-3-3-4-4-5-5- +B|-----------------------------------------0-0-2-2-3-3---------4-4---------4-4---------4-4------------------- +G|-2-1-1-2-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1-2-2----------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------0-0-1-1-2-2-3-3-4-4-5-5-6-6-7-7-8-8-9-9-10-10-11-11-12-12-14-14-15-15-16-16-17-17-0-5- +B|-------------------------0-0-1-1-2-2-3-3-4-4---------------------------------------------------------------------------------1--- +G|-----------0-0-1-1-2-2-3-3------------------------------------------------------------------------------------------------------- +D|-2-2-3-3-4-4--------------------------------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------------------------------- + + + +E|-5-0--- +B|-1----- +G|-----2- +D|------- +A|------- +E|------- + diff --git a/guitar/midi/bumblebeeTRK4_imp.tab b/guitar/midi/bumblebeeTRK4_imp.tab new file mode 100644 index 0000000..2b2cf10 --- /dev/null +++ b/guitar/midi/bumblebeeTRK4_imp.tab @@ -0,0 +1,397 @@ +%TabMaster v1.05r% + + +E|-12-12-11-11-10-10-9-9-10-10-9-9-8-8-7-7-8-8-7-7-6-6-5-5-4-4-3-3-2-2-1- +B|----------------------------------------------------------------------- +G|----------------------------------------------------------------------- +D|----------------------------------------------------------------------- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|-1-0-0--------------------------------------------------------- +B|-----4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-0-0----------------------- +G|---------------------------------------3-3-2-2-1-1-0-0--------- +D|-----------------------------------------------------4-4-3-3-2- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-2-1-1-0-0-0-0---------2-2-1-1-0-0-0-0---------2-2-1-1-0-0----- +A|---------4-4-4-4-3-3-2-2---------4-4-4-4-3-3-2-2---------4-4-3- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-3-3-2-2-1-1-2-2-1-1-0-0---------0-0-1-1-2-2-1-1-0-0-----3-3-2- +A|-3---------------------4-4-3-3-4-4-----------------4-4-3-3----- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-2-1-1-2-2-1-1-0-0---------0-0-1-1-2-2-1-1-0-0-0-0------------- +A|-----------------4-4-3-3-4-4-----------------4-4-4-4-3-3-2-2-3- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-----0-0-1-1-2-2-3-3-2-2-1-1-2-2-1-1-0-0-0-0-----------------0- +A|-3-4-4---------------------------------4-4-4-4-3-3-2-2-3-3-4-4- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------------0-0-1-1-2-2-1-1-0-0-----3-3-2-2-1-1-2-2-1-1-0-0--- +D|-0-1-1-2-2-4-4-----------------4-4-3-3---------------------4-4- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------0-0-1-1-2-2-1-1-0-0-----3-3-2-2-1-1-2-2-1-1-0-0--------- +D|-3-3-4-4-----------------4-4-3-3---------------------4-4-3-3-4- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-0-0-1-1-2-2-1-1-0-0-0-0-----------------0-0-1-1-2-2-3-3-2-2-1- +D|-4-----------------4-4-4-4-3-3-2-2-3-3-4-4--------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-1-2-2-1-1-0-0-0-0-----------------0-0-1-1-2-2-3-3-2-2-1-1-2--- +D|-------------4-4-4-4-3-3-2-2-3-3-4-4--------------------------- +A|-------------------------------------------------------------0- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---------2---------------3---3-3-----3-3-----3-3-----3-2------- +D|--------------------------------------------------------------- +A|-0-0-0-0-0-0-0-0-0-0-0-0-0-------------------------------0-0-0- +E|---------------------------4-----4-4-----4-4-----4-4-4--------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----2---------------3---3-3-----3-3-----3-3-----3-2-2-3-3-2-2- +D|--------------------------------------------------------------- +A|-0-0-0-0-0-0-0-0-0-0-0---------------------------0------------- +E|-----------------------4-----4-4-----4-4-----4-4-4------------- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------------------------0-0- +G|-1-1-2-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1-2-2-3-3--- +D|--------------------------------------------------------------- +A|---0----------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-1-1-2-2-1-1-0-0---------0-0-1-1-2-2-1-1-0-0-3-----------3----- +G|---------------3-3-2-2-3-3-----------------3-3----------------- +D|-----------------------------------------------0-0-0-0-0-0-0-0- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-----------4---4-4-----4-4-----4-4-----4-3-----------3--------- +G|--------------------------------------------------------------- +D|-0-0-0-0-0-0-------------------------------0-0-0-0-0-0-0-0-0-0- +A|-------------4-----4-4-----4-4-----4-4-4----------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-------4---4-4-----4-4-----4-4-----4-3-3-4-4-3-3-2-2-3-3-4-4-3- +G|--------------------------------------------------------------- +D|-0-0-0-0---------------------------0--------------------------- +A|---------4-----4-4-----4-4-----4-4-4--------------------------- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------0-0-1-1-2-2-1-1-0- +B|-3-2-2-3-3-4-4-3-3-2-2-3-3-4-4-3-3-2-2-3-3-4-4----------------- +G|--------------------------------------------------------------- +D|-----0--------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-0---------0-0-1-1-2-2-1-1-0-0-10-10-9-9-8-8-7-7-6-6-11-11-10-10-9-9- +B|-4-4-3-3-4-4-----------------4-4------------------------------------- +G|--------------------------------------------------------------------- +D|--------------------------------------------------------------------- +A|--------------------------------------------------------------------- +E|--------------------------------------------------------------------- + + + +E|-10-10-9-9-8-8-7-7-6-6-7-7-8-8-9-9-10-10-9-9-8-8-7-7-8-8-7-7-6-6-5- +B|------------------------------------------------------------------- +G|------------------------------------------------------------------- +D|------------------------------------------------------------------- +A|------------------------------------------------------------------- +E|------------------------------------------------------------------- + + + +E|-5-6-6-7-7-8-8-9-9-8-8-9-9-10-10-11-11-12-12-11-11-10-10-9-9-10-10-9-9-8-8- +B|--------------------------------------------------------------------------- +G|--------------------------------------------------------------------------- +D|--------------------------------------------------------------------------- +A|--------------------------------------------------------------------------- +E|--------------------------------------------------------------------------- + + + +E|-7-7-8-8-7-7-6-6-5-5-4-4-3-3-2-2-1-1-0-0-1-1-0-0-0-0-1-1-0-0-0- +B|-----------------------------------------------4-4---------4-4- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-0-1-1-0-0-0-0-1-1-0-0-0-0------------------------------------- +B|---------4-4---------4-4--------------------------------------- +G|--------------------------------------------------------------- +D|-------------------------2-2---------------------2-2-1-1-0-0-0- +A|-----------------------------3-3-0-0-----0-0-3-3-----------4-4- +E|-------------------------------------1-1----------------------- + + + +E|---------------------------------------------0-0---------0-0-12- +B|-----------------------------------------------1-1-----1-1------ +G|-------------------------------------------------2-2-2-2-------- +D|-0-------------------------------------------------3-3---------- +A|-4-4-3-3-2-2-3-3-2-2-1-1-0-0------------------------------------ +E|---------------------------4-4-3-3-2-2-1-1-0-0------------------ + + + +E|-12-8-8-5-5-1-1-5-5-8-8-12-12-0-0-24-24----------------------------- +B|-------------------------------------------------------------------- +G|-------------------------------------------------------------------- +D|-------------------------------------------------------------------- +A|--------------------------------------------------------0-0-1-1-2-2- +E|-------------------------------------0--0-1-1-2-2-3-3-4-4----------- + + + +E|---------------------------------------------0-0-------------1- +B|-----------------------------------------------4-4-3-3-2-2-1-1- +G|--------------------------------------------------------------- +D|-------0-0-1-1-2-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1----------------- +A|-3-3-4-4------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-1-0-0-0-0-------------------------0-0-------------1-1-0-0-0-0- +B|-----4-4-4-4-3-3-2-2-1-1-2-2-3-3-4-4-4-4-3-3-2-2-1-1-----4-4-4- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------------------------0-0----------------------------------- +B|-4-3-3-2-2-1-1-2-2-3-3-4-4-4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-2-2- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------0-0-1-1-0-0-0-0----------------------------------------- +B|-3-3-4-4---------4-4-4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-2-2-3-3-4- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-0-0-2-2-3-3-4-4-5-5-4-4-3-3-2-2-1-1-6-6-5-5-4-4-5-5-4-4-3-3-2- +B|-4------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-2-1-1-2-2-3-3-4-4-5-5-4-4-3-3-2-2-1-1-6-6-5-5-4-4-5-5-4-4-3-3- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-2-2-1-1-2-2-3-3-4-4-5-5-4-4-3-3-2-2-3-3-2-2-1-1-0-0-1-1-2-2-3- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-3-4-4-5-5-6-6-5-5-4-4-5-5-4-4-3-3-2-2-1-1-2-2-3-3-4-4-5-5-7-7- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-8-8-10-10-12-12-13-13-12-12-11-11-12-12-11-11-10-10-9-9-8-8-13-13-12-12-11-11-12-12-11- +B|---------------------------------------------------------------------------------------- +G|---------------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|-11-10-10-9-9-8-8-9-9-10-10-11-11-12-12-4-4-5-5-6-6-7-7-8-8-9-9-10-10-9-9- +B|-------------------------------------------------------------------------- +G|-------------------------------------------------------------------------- +D|-------------------------------------------------------------------------- +A|-------------------------------------------------------------------------- +E|-------------------------------------------------------------------------- + + + +E|-8-8-7-7-8-8-7-7-6-6-5-5-4-4-5-5-6-6-7-7-8-8-9-9-10-10-11-11-12-12-13- +B|---------------------------------------------------------------------- +G|---------------------------------------------------------------------- +D|---------------------------------------------------------------------- +A|---------------------------------------------------------------------- +E|---------------------------------------------------------------------- + + + +E|-13-12-12-11-11-12-12-13-13-12-12-11-11-12-12-4-4-5-5-6-6-7-7-8-8-9-9-10-10-9-9- +B|-------------------------------------------------------------------------------- +G|-------------------------------------------------------------------------------- +D|-------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------- + + + +E|-8-8-7-7-8-8-7-7-6-6-5-5-4-4-5-5-6-6-7-7-8-8-9-9-10-10-11-11-12-12-13- +B|---------------------------------------------------------------------- +G|---------------------------------------------------------------------- +D|---------------------------------------------------------------------- +A|---------------------------------------------------------------------- +E|---------------------------------------------------------------------- + + + +E|-13-12-12-11-11-12-12-14-14-15-15-16-16-17-17-16-16-15-15-14-14-15-15-14-14-13-13-12-12-13-13- +B|---------------------------------------------------------------------------------------------- +G|---------------------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-12-12-11-11-10-10-9-9-8-8-7-7-6-6-5-5-4-4-3-3-2-2-3-3-2-2-1-1-0-0-1- +B|--------------------------------------------------------------------- +G|--------------------------------------------------------------------- +D|--------------------------------------------------------------------- +A|--------------------------------------------------------------------- +E|--------------------------------------------------------------------- + + + +E|-1-0-0--------------------------------------------------------- +B|-----4-4-3-3-2-2-1-1-0-0--------------------------------------- +G|-----------------------3-3-2-2-3-3-2-2-1-1-2-2-3-3-2-2-1-1-2-2- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------------------------0-0-1-1-0-0-0-0-1-1-0-0-0-0-1-1-0-0-0- +B|---------------0-0-2-2-3-3---------4-4---------4-4---------4-4- +G|-3-3-2-2-1-1-2-2----------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-0-2-2-3-3-4-4-5-5-------------------------------------------0- +B|-------------------------------------------0-0-1-1-2-2-3-3-4-4- +G|-----------------------------0-0-1-1-2-2-3-3------------------- +D|-------------------2-2-3-3-4-4--------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-0-1-1-2-2-3-3-4-4-5-5-6-6-7-7-8-8-9-9-10-10-11-11-12-12-14-14-15-15-16-16- +B|--------------------------------------------------------------------------- +G|--------------------------------------------------------------------------- +D|--------------------------------------------------------------------------- +A|--------------------------------------------------------------------------- +E|--------------------------------------------------------------------------- + + + +E|-17-17-0-5-5-0--- +B|-------1---1----- +G|---------------2- +D|----------------- +A|----------------- +E|----------------- + diff --git a/guitar/midi/carniv2.mid b/guitar/midi/carniv2.mid new file mode 100644 index 0000000..9111802 Binary files /dev/null and b/guitar/midi/carniv2.mid differ diff --git a/guitar/midi/carniv2TRK3.prj b/guitar/midi/carniv2TRK3.prj new file mode 100644 index 0000000..2e19bda --- /dev/null +++ b/guitar/midi/carniv2TRK3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\carniv2TRK3_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4)(891,4)(892,4)(893,4)(894,4)(895,4)(896,4)(897,4)(898,4)(899,4)(900,4)(901,4)(902,4)(903,4)(904,4)(905,4)(906,4)(907,4)(908,4)(909,4)(910,4)(911,4)(912,4)(913,4)(914,4)(915,4)(916,4)(917,4)(918,4)(919,4)(920,4)(921,4)(922,4)(923,4)(924,4)(925,4)(926,4)(927,4)(928,4)(929,4)(930,4)(931,4)(932,4)(933,4) diff --git a/guitar/midi/carniv2TRK3.tab b/guitar/midi/carniv2TRK3.tab new file mode 100644 index 0000000..f3ce6b2 --- /dev/null +++ b/guitar/midi/carniv2TRK3.tab @@ -0,0 +1,262 @@ +%TabMaster v1.04a% + + +E|-0-2-2-3---5-3-------2---0-2-2-3-----5-3-0-2-3-2-0-2------------------- +B|-------------------3---2---------1---------------3--------------------- +G|-----------------2----------------------------------------------------- +D|----------------------------------------------------------------------- +A|---------0-----2-------------------0---------2---------------0-------0- +E|-----------------------------------------------------0-2-3-4---3-2-0--- + + + +E|-----0---------------------------------------------------0----- +B|---1---------3-------0-----0---------0-----0---------0-----0--- +G|-0---------2-------0-----0---------0-----0---------2---2-----2- +D|---------1-------4-----4---------4-----4---------2------------- +A|-------2-----------------------2------------------------------- +E|---------------0-------------0---------------2-2--------------- + + + +E|-----------0-----------------0---------------0----------------- +B|-------0-----0-----------0-----0---------0-----0-------0-----0- +G|-----2---2-----2-------0---0-----------0---0-----2---2-----2--- +D|---1-----------------4---------------4-------------2-----2----- +A|-------------------2---------------2--------------------------- +E|-1---------------0---------------0---------------2------------- + + + +E|-------------3---------2-3-2-2-0-0---------------2----------------- +B|---------0-0-----0---0-----------------1-------4---0---------0----- +G|-2-----2-----------0---------------------0-----------------0------- +D|-----1-------------------------------2-------------------4---0---2- +A|-----------------------------------0---------2---------2----------- +E|---1-----------0---------------------------2---------0---------0--- + + + +E|-------------------3---------3-2-3-2-0---0-------------2--------- +B|---0-------0-----0-----0---0-----------------1-0-----3---0------- +G|-0---1---2---------------0---------------------0---2-----------0- +D|-------2-------1-0-----------------------2-2-----0-----------0--- +A|---------------------------------------0------------------------- +E|-----2-------1-------0-------------------------------------3----- + + + +E|---------------------------0-----------------0----------------------- +B|-0-------0-------0-1-3-3-1---------------0-1---------------0-1-1-3--- +G|-------0---1---1-----------------2-----2-----------------2----------- +D|-----0-------0-----------------2-----2-----------0-0---0-----------0- +A|-----------------------------0-----0--------------------------------- +E|---1-------0-----------------------------------2-----2-----0-----3--- + + + +E|---------------------0-------------------------0--------------- +B|---0-------------------0---------0-------1-------1-0----------- +G|-0-------0-----------------0---2---0---2-----------2-----0-2-2- +D|-------0-----------2-----2---2-------2-----2-4-------4-4------- +A|-----------------2-------------0------------------------------- +E|-----3-----3-2-0-----------0----------------------------------- + + + +E|-----0-------------------------3-------3-2-3-2-0-2---0-----------------2----- +B|-0-------0-----------0-------0-----0-----------------------1---0-1---4---0--- +G|-------2---2---2---2---1-2-3---------0-----------------------0--------------- +D|-------------2---1-0-------------------------------------2------------------- +A|-------------------------------------------------------0-----------2---1----- +E|---2-------------1-0-------------0-----------------0-----------2-----------0- + + + +E|-----------------------------------1---1-----1---------1-0------- +B|-----0-------0-------0-------0-----0---0---0---------0-----3-3--- +G|---0-------0---2---2-----------0-1-------1---1-----1------------- +D|-4-------2-------2---------1-0----------------------------------- +A|-------------------------------------------------0--------------- +E|-------0-------2-------1-1---0-------0---------0---------------0- + + + +E|-----------------0-------0-0---0---0---0---0-0---0-0---0-0---0- +B|-----------1-0-1-----1-------------------------------1--------- +G|-1---1---0-1---0-------------2-----------------2-----------2--- +D|---0---0---------------2---------2---0---3--------------------- +A|-------------------0------------------------------------------- +E|---------0----------------------------------------------------- + + + +E|---0---0---0-0---0---0---0---0---0---0-0----------------------- +B|-1---1---------1-------1-----------1-----------------------0-1- +G|---------2---------2-----------2---------2---2---2-------2----- +D|-----4-------------------3-3-------------------2---2---2------- +A|-------------------------------------------0---------0--------- +E|--------------------------------------------------------------- + + + +E|---------2-2-0-0-----------------------------0---------------------------0----- +B|-------1-----------------------0-----0-1-----------1-------3-2-0-------------0- +G|-----2-------------0-0-----0-2---2-0-------------0---0---------------2-----2--- +D|---2-----2---------2-2---2-----------0-1-0-2-------------2---------2---2------- +A|-0---------------1-----------------------------3-------0----------------------- +E|-----------------0-----0-----------------------------------------2------------- + + + +E|-------------------2-0-------------------------------12-0-2-3---5-3------- +B|---------0-2-2-3-4-------0-----0---------------0------------------------3- +G|-2-----2-----------------------------------------0--------------------2--- +D|-0---1-0-----------------1---2-------------------------------------------- +A|---------------------------2-----2-3-2------------------------0-----2----- +E|---1---0---------------0---------------2-2-3-0-----0---------------------- + + + +E|-2-0-2-2-3---5-3-------2-----------------------------0------------- +B|---------------------3-----------------------------1---------3----- +G|-------------------2-----------------------------0---2-----2-----0- +D|---------------------------------------------------------1---0----- +A|-----------0-----2---------------3-2-0---------0-------2----------- +E|-------------------------0-0-2-3-----3-3-2-3-0-----------------0--- + + + +E|--------------------------------------------------------------- +B|---0-0-----------0-0-------0-----0---0---0-------0-----0-----0- +G|---------0-----0-----0-----2---2-----2-----0-------0-----0----- +D|-4-----4-3---2---------0-----2---------1-----0-------4-4-3----- +A|--------------------------------------------------------------- +E|-----------0-------------2---------1---0-------0-----------0--- + + + +E|---------------------------------3-------------2-1-0----------- +B|-----0-------0-----0---------0-------0---0-------0---0-1-----1- +G|-0-----0-------2-----2---------0-------0---0-----0-----0---0--- +D|---2-----0-------2-----2---1-0-------------------------2------- +A|---------------------------------------------------------0----- +E|-----------2-------------1---0-----0---------0----------------- + + + +E|-0-------------------2-----------------------------------------1--- +B|-------1-0-1-2-----4---0---------------------------------0--------- +G|---0-----0-1---2---2-------0---0---0---0-----2---2-----------0----- +D|-----2---------------------4-4-------2---0-----2---2---1-----0----- +A|-----------------2------------------------------------------------- +E|---------2---------------0-------0---------2---------1-----0-----0- + + + +E|-2-3-----------2-1-0-------------0-------------2-0----------------- +B|-----0---0-------0---0-1-------1-----1-0-----3-----0-------0-----0- +G|-------0---0-----0---0-------0---------0---2-------0-----0-0------- +D|---------------------1-----2-------2-----0-------------0-----0----- +A|-------------------------0----------------------------------------- +E|-------------0---------------------------------------3---------1--- + + + +E|-----------------------------0----------------------------------------- +B|-----0-----------0-0-1-1-2-3---------------0-1-------------------0-1-1- +G|-0-----0---1---1-------------------2-----2-----2---------2-----2------- +D|---0-----0---0-------------------2-----2---------1-0---0-----0--------- +A|-------------------------------0-----0--------------------------------- +E|-----------0-----------------------------------------2-----2-----0----- + + + +E|-------------------------0---------------------------0--------------- +B|-3-0-------------------0-----------0-1-------1---------1------------- +G|-----0-----0---------------0---2-----0-2---2-------------2-----0-2--- +D|---0-----0-----------2-----2---2---------2-----2-4---------4-4------- +A|-------------------2-------------0---------------3-0----------------- +E|-3-----3-----3-2-0-----------0-------------------------------------2- + + + +E|--------------------------------------------------------------- +B|---0---0---0-----0-------0---0-------0-----0-----------0-----0- +G|---------2-----2-----2-----2-------2-----2---------2---------2- +D|-2-----------2---------2---2-----------2-----1-------1---1-1--- +A|-----0---------------------------0---------------0------------- +E|-------------------2-----------2-----------1---1--------------- + + + +E|-------------------1-2-3-------2---3-2-0-----------0------------- +B|-----0-----0-----0-------0-------0-------0-------1-----1---1----- +G|---2-----2-----------------0-------0-------0---0---------0---2-2- +D|-------1---------0-----------------------------------2----------- +A|---------------0-----------------------------0------------------- +E|-1-----------1---0---0-------0-------------------------------2--- + + + +E|-------2---------------------------------------------------1-----1--- +B|---4-------0---------------0-----0-------0---0-------0-------0-----0- +G|-----2-----------0-----0-----0-----0-----2---2---------0-1----------- +D|-------------------4-4---------2-----0-1---2---2---1-0--------------- +A|-2-----1-0----------------------------------------------------------- +E|-------------2-0---------0-------------2-------1-1---0---------0----- + + + +E|---1-----------1-0----------------------------------------------- +B|-----0-------0-----0---3---3-------------1---0-1-------1-------1- +G|-1---1-----1---------1-2-------1---1-------1---0-1-----------2--- +D|-------------------------0-------0---0---------------2---2-3----- +A|---------0-----------------------------------------0------------- +E|-------0---------------------0---------0------------------------- + + + +E|-0-------0-------0-----------------2-------2-0------------------- +B|-------1-------1---------0-1-----1-----1------------------------- +G|-----2-------2-------2-2-------2-----2---2---------0-0-----0---2- +D|---4-------3-----------------2-------------------2-----2-2-----2- +A|-------------------0-----------------------------------------1--- +E|-----------------------------------------------0----------------- + + + +E|-------0---------------------------------------------------2-2-0--------- +B|---0-1---------1---3-3---0-----0---0-------------0-2-2-3-4-------------0- +G|-0-----------0---------0---2-----------2--------------------------------- +D|---0-------2-------2---------2---2---2---2---1-0------------------------- +A|---------3-------0-------------------------------------------------1-2--- +E|---------------------------2---------------1-0-------------------0------- + + + +E|-----------------------7-12-3-0-2-2-3---5-3-------2---0-2-3---5-3-0-1-2-3-2-0- +B|-----------------0------------------------------3---2-----------------------3- +G|-------------------0-0------------------------2------------------------------- +D|------------------------------------------------------------------------------ +A|-2-3-1-2-2----------------------------0-----2---------------0-----------2----- +E|-----------2-3-0-------------------------------------------------------------- + + + +E|-2---------------------0--------------------------------------- +B|---------------------1---0-----3-------0-----0-----------0---0- +G|-------------------0---2-----2-------0-----0---0-------0---0--- +D|---------------------------1---0---4-----4-----------4--------- +A|---------2-0-0-1---------2-------------------------2----------- +E|---0-2-3---4-3-2-0---------------0---------------0------------- + + + +E|-0---7--- +B|--------- +G|---0----- +D|--------- +A|--------- +E|-------0- + diff --git a/guitar/midi/carniv2TRK3_imp.tab b/guitar/midi/carniv2TRK3_imp.tab new file mode 100644 index 0000000..371cc38 --- /dev/null +++ b/guitar/midi/carniv2TRK3_imp.tab @@ -0,0 +1,280 @@ +%TabMaster v1.04a% + + +E|-0-2-2-3---5-3-------2---0-2-2-3-----5-3-0-2-3-2-0-2----------- +B|-------------------3---2---------1---------------3------------- +G|-----------------2--------------------------------------------- +D|--------------------------------------------------------------- +A|---------0-----2-------------------0---------2---------------0- +E|-----------------------------------------------------0-2-3-4--- + + + +E|-------------0------------------------------------------------- +B|-----------1---------3-------0-----0---------0-----0---------0- +G|---------0---------2-------0-----0---------0-----0---------2--- +D|-----------------1-------4-----4---------4-----4---------2----- +A|-------0-------2-----------------------2----------------------- +E|-3-2-0-----------------0-------------0---------------2-2------- + + + +E|---0---------------0-----------------0---------------0--------- +B|-----0---------0-----0-----------0-----0---------0-----0------- +G|-2-----2-----2---2-----2-------0---0-----------0---0-----2---2- +D|-----------1-----------------4---------------4-------------2--- +A|---------------------------2---------------2------------------- +E|---------1---------------0---------------0---------------2----- + + + +E|---------------------3---------2-3-2-2-0-0---------------2----- +B|-0-----0---------0-0-----0---0-----------------1-------4---0--- +G|-----2---2-----2-----------0---------------------0------------- +D|---2---------1-------------------------------2----------------- +A|-------------------------------------------0---------2--------- +E|-----------1-----------0---------------------------2---------0- + + + +E|-------------------------------3---------3-2-3-2-0---0--------- +B|-------0-------0-------0-----0-----0---0-----------------1-0--- +G|-----0-------0---1---2---------------0---------------------0--- +D|---4---0---2-------2-------1-0-----------------------2-2-----0- +A|-2-------------------------------------------------0----------- +E|---------0-------2-------1-------0----------------------------- + + + +E|-----2-----------------------------------0-----------------0--- +B|---3---0-------0-------0-------0-1-3-3-1---------------0-1----- +G|-2-----------0-------0---1---1-----------------2-----2--------- +D|-----------0-------0-------0-----------------2-----2----------- +A|-------------------------------------------0-----0------------- +E|---------3-------1-------0-----------------------------------2- + + + +E|-----------------------------------------0--------------------- +B|-----------0-1-1-3-----0-------------------0---------0-------1- +G|---------2-----------0-------0-----------------0---2---0---2--- +D|-0-0---0-----------0-------0-----------2-----2---2-------2----- +A|-------------------------------------2-------------0----------- +E|-----2-----0-----3-------3-----3-2-0-----------0--------------- + + + +E|-----0-------------------0-------------------------3-------3-2- +B|-------1-0-----------0-------0-----------0-------0-----0------- +G|---------2-----0-2-2-------2---2---2---2---1-2-3---------0----- +D|-2-4-------4-4-------------------2---1-0----------------------- +A|--------------------------------------------------------------- +E|-----------------------2-------------1-0-------------0--------- + + + +E|-3-2-0-2---0-----------------2--------------------------------- +B|-----------------1---0-1---4---0-------0-------0-------0------- +G|-------------------0-----------------0-------0---2---2--------- +D|---------------2-------------------4-------2-------2---------1- +A|-------------0-----------2---1--------------------------------- +E|---------0-----------2-----------0-------0-------2-------1-1--- + + + +E|-------1---1-----1---------1-0-----------------------0-------0- +B|-0-----0---0---0---------0-----3-3-------------1-0-1-----1----- +G|---0-1-------1---1-----1-------------1---1---0-1---0----------- +D|-0-------------------------------------0---0---------------2--- +A|---------------------0---------------------------------0------- +E|-0-------0---------0---------------0---------0----------------- + + + +E|-0---0---0---0---0-0---0-0---0-0---0---0---0---0-0---0---0---0- +B|---------------------------1---------1---1---------1-------1--- +G|---2-----------------2-----------2-----------2---------2------- +D|-------2---0---3-------------------------4-------------------3- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---0---0---0-0-------------------------------2-2-0-0----------- +B|---------1-----------------------0-1-------1------------------- +G|-----2---------2---2---2-------2---------2-------------0-0----- +D|-3-------------------2---2---2---------2-----2---------2-2---2- +A|-----------------0---------0---------0---------------1--------- +E|-----------------------------------------------------0-----0--- + + + +E|-------------------0---------------------------0--------------- +B|-----0-----0-1-----------1-------3-2-0-------------0---------0- +G|-0-2---2-0-------------0---0---------------2-----2---2-----2--- +D|-----------0-1-0-2-------------2---------2---2-------0---1-0--- +A|---------------------3-------0--------------------------------- +E|---------------------------------------2---------------1---0--- + + + +E|---------2-0-------------------------------12-0-2-3---5-3------- +B|-2-2-3-4-------0-----0---------------0------------------------3- +G|---------------------------------------0--------------------2--- +D|---------------1---2-------------------------------------------- +A|-----------------2-----2-3-2------------------------0-----2----- +E|-------------0---------------2-2-3-0-----0---------------------- + + + +E|-2-0-2-2-3---5-3-------2-----------------------------0--------- +B|---------------------3-----------------------------1---------3- +G|-------------------2-----------------------------0---2-----2--- +D|---------------------------------------------------------1---0- +A|-----------0-----2---------------3-2-0---------0-------2------- +E|-------------------------0-0-2-3-----3-3-2-3-0----------------- + + + +E|--------------------------------------------------------------- +B|-------0-0-----------0-0-------0-----0---0---0-------0-----0--- +G|---0---------0-----0-----0-----2---2-----2-----0-------0-----0- +D|-----4-----4-3---2---------0-----2---------1-----0-------4-4-3- +A|--------------------------------------------------------------- +E|-0-------------0-------------2---------1---0-------0----------- + + + +E|-------------------------------------3-------------2-1-0------- +B|---0-----0-------0-----0---------0-------0---0-------0---0-1--- +G|-----0-----0-------2-----2---------0-------0---0-----0-----0--- +D|-------2-----0-------2-----2---1-0-------------------------2--- +A|-------------------------------------------------------------0- +E|-0-------------2-------------1---0-----0---------0------------- + + + +E|-----0-------------------2------------------------------------- +B|---1-------1-0-1-2-----4---0---------------------------------0- +G|-0-----0-----0-1---2---2-------0---0---0---0-----2---2--------- +D|---------2---------------------4-4-------2---0-----2---2---1--- +A|---------------------2----------------------------------------- +E|-------------2---------------0-------0---------2---------1----- + + + +E|-----1---2-3-----------2-1-0-------------0-------------2-0----- +B|-------------0---0-------0---0-1-------1-----1-0-----3-----0--- +G|---0-----------0---0-----0---0-------0---------0---2-------0--- +D|---0-------------------------1-----2-------2-----0------------- +A|---------------------------------0----------------------------- +E|-0-----0-------------0---------------------------------------3- + + + +E|-----------------------------------------0--------------------- +B|-----0-----0-----0-----------0-0-1-1-2-3---------------0-1----- +G|---0-0-------0-----0---1---1-------------------2-----2-----2--- +D|-0-----0-------0-----0---0-------------------2-----2---------1- +A|-------------------------------------------0-----0------------- +E|---------1-------------0--------------------------------------- + + + +E|---------------------------------------------0----------------- +B|---------------0-1-1-3-0-------------------0-----------0-1----- +G|-------2-----2-----------0-----0---------------0---2-----0-2--- +D|-0---0-----0-----------0-----0-----------2-----2---2---------2- +A|---------------------------------------2-------------0--------- +E|---2-----2-----0-----3-----3-----3-2-0-----------0------------- + + + +E|-----------0--------------------------------------------------- +B|---1---------1---------------0---0---0-----0-------0---0------- +G|-2-------------2-----0-2-----------2-----2-----2-----2-------2- +D|-----2-4---------4-4-------2-----------2---------2---2--------- +A|-------3-0---------------------0---------------------------0--- +E|-------------------------2-------------------2-----------2----- + + + +E|---------------------------------------------1-2-3-------2---3- +B|-0-----0-----------0-----0-----0-----0-----0-------0-------0--- +G|-----2---------2---------2---2-----2-----------------0-------0- +D|---2-----1-------1---1-1---------1---------0------------------- +A|-------------0---------------------------0--------------------- +E|-------1---1---------------1-----------1---0---0-------0------- + + + +E|-2-0-----------0-------------------2--------------------------- +B|-----0-------1-----1---1-------4-------0---------------0-----0- +G|-------0---0---------0---2-2-----2-----------0-----0-----0----- +D|-----------------2-----------------------------4-4---------2--- +A|---------0-------------------2-----1-0------------------------- +E|-------------------------2---------------2-0---------0--------- + + + +E|-------------------------1-----1-----1-----------1-0----------- +B|-------0---0-------0-------0-----0-----0-------0-----0---3---3- +G|-0-----2---2---------0-1-----------1---1-----1---------1-2----- +D|---0-1---2---2---1-0---------------------------------------0--- +A|-------------------------------------------0------------------- +E|-----2-------1-1---0---------0-----------0--------------------- + + + +E|-------------------------------------0-------0-------0--------- +B|-------------1---0-1-------1-------1-------1-------1---------0- +G|---1---1-------1---0-1-----------2-------2-------2-------2-2--- +D|-----0---0---------------2---2-3-------4-------3--------------- +A|-----------------------0-------------------------------0------- +E|-0---------0--------------------------------------------------- + + + +E|---------2-------2-0-------------------------0----------------- +B|-1-----1-----1---------------------------0-1---------1---3-3--- +G|-----2-----2---2---------0-0-----0---2-0-----------0---------0- +D|---2-------------------2-----2-2-----2---0-------2-------2----- +A|-----------------------------------1-----------3-------0------- +E|---------------------0----------------------------------------- + + + +E|-----------------------------------2-2-0----------------------- +B|-0-----0---0-------------0-2-2-3-4-------------0--------------- +G|---2-----------2----------------------------------------------- +D|-----2---2---2---2---1-0--------------------------------------- +A|-------------------------------------------1-2---2-3-1-2-2----- +E|---2---------------1-0-------------------0-----------------2-3- + + + +E|---------7-12-3-0-2-2-3---5-3-------2---0-2-3---5-3-0-1-2-3-2-0- +B|---0------------------------------3---2-----------------------3- +G|-----0-0------------------------2------------------------------- +D|---------------------------------------------------------------- +A|------------------------0-----2---------------0-----------2----- +E|-0-------------------------------------------------------------- + + + +E|-2---------------------0--------------------------------------- +B|---------------------1---0-----3-------0-----0-----------0---0- +G|-------------------0---2-----2-------0-----0---0-------0---0--- +D|---------------------------1---0---4-----4-----------4--------- +A|---------2-0-0-1---------2-------------------------2----------- +E|---0-2-3---4-3-2-0---------------0---------------0------------- + + + +E|-0---7--- +B|--------- +G|---0----- +D|--------- +A|--------- +E|-------0- + diff --git a/guitar/midi/closerto.mid b/guitar/midi/closerto.mid new file mode 100644 index 0000000..3911267 Binary files /dev/null and b/guitar/midi/closerto.mid differ diff --git a/guitar/midi/diana.mid b/guitar/midi/diana.mid new file mode 100644 index 0000000..a9adfd9 Binary files /dev/null and b/guitar/midi/diana.mid differ diff --git a/guitar/midi/estudio.mid b/guitar/midi/estudio.mid new file mode 100644 index 0000000..95c2aba Binary files /dev/null and b/guitar/midi/estudio.mid differ diff --git a/guitar/midi/follow.mid b/guitar/midi/follow.mid new file mode 100644 index 0000000..ad0c3ec Binary files /dev/null and b/guitar/midi/follow.mid differ diff --git a/guitar/midi/jesu_1.mid b/guitar/midi/jesu_1.mid new file mode 100644 index 0000000..1a4a86c Binary files /dev/null and b/guitar/midi/jesu_1.mid differ diff --git a/guitar/midi/kashmir.mid b/guitar/midi/kashmir.mid new file mode 100644 index 0000000..1b6c98a Binary files /dev/null and b/guitar/midi/kashmir.mid differ diff --git a/guitar/midi/lluvia.mid b/guitar/midi/lluvia.mid new file mode 100644 index 0000000..dd8c2f0 Binary files /dev/null and b/guitar/midi/lluvia.mid differ diff --git a/guitar/midi/malagens.mid b/guitar/midi/malagens.mid new file mode 100644 index 0000000..db5bf23 Binary files /dev/null and b/guitar/midi/malagens.mid differ diff --git a/guitar/midi/malagn_1.mid b/guitar/midi/malagn_1.mid new file mode 100644 index 0000000..bfc1b60 Binary files /dev/null and b/guitar/midi/malagn_1.mid differ diff --git a/guitar/midi/minuet.mid b/guitar/midi/minuet.mid new file mode 100644 index 0000000..e1e1944 Binary files /dev/null and b/guitar/midi/minuet.mid differ diff --git a/guitar/midi/minuetTRK2.tab b/guitar/midi/minuetTRK2.tab new file mode 100644 index 0000000..388a26d --- /dev/null +++ b/guitar/midi/minuetTRK2.tab @@ -0,0 +1,10 @@ +%TabMaster v1.04a% + + +E|- +B|- +G|- +D|- +A|- +E|- + diff --git a/guitar/midi/paco.mid b/guitar/midi/paco.mid new file mode 100644 index 0000000..f6da139 Binary files /dev/null and b/guitar/midi/paco.mid differ diff --git a/guitar/midi/pacoTRK1.prj b/guitar/midi/pacoTRK1.prj new file mode 100644 index 0000000..cd4baf0 --- /dev/null +++ b/guitar/midi/pacoTRK1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\pacoTRK1_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4) diff --git a/guitar/midi/pacoTRK1.tab b/guitar/midi/pacoTRK1.tab new file mode 100644 index 0000000..dbdc1c3 --- /dev/null +++ b/guitar/midi/pacoTRK1.tab @@ -0,0 +1,10 @@ +%TabMaster v1.04a% + + +E|-0---0-----0-0--- +B|-0---0-----0-0--- +G|-1-1-----1---1--- +D|-1-----2-------3- +A|----------------- +E|----------------- + diff --git a/guitar/midi/pacoTRK1_imp.tab b/guitar/midi/pacoTRK1_imp.tab new file mode 100644 index 0000000..dbdc1c3 --- /dev/null +++ b/guitar/midi/pacoTRK1_imp.tab @@ -0,0 +1,10 @@ +%TabMaster v1.04a% + + +E|-0---0-----0-0--- +B|-0---0-----0-0--- +G|-1-1-----1---1--- +D|-1-----2-------3- +A|----------------- +E|----------------- + diff --git a/guitar/midi/sevilana.mid b/guitar/midi/sevilana.mid new file mode 100644 index 0000000..546582d Binary files /dev/null and b/guitar/midi/sevilana.mid differ diff --git a/guitar/midi/sevilanaTRK2.prj b/guitar/midi/sevilanaTRK2.prj new file mode 100644 index 0000000..c56533f --- /dev/null +++ b/guitar/midi/sevilanaTRK2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\sevilanaTRK2_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4)(891,4)(892,4)(893,4)(894,4)(895,4)(896,4)(897,4)(898,4)(899,4)(900,4)(901,4)(902,4)(903,4)(904,4)(905,4)(906,4)(907,4)(908,4)(909,4)(910,4)(911,4)(912,4)(913,4)(914,4)(915,4)(916,4)(917,4)(918,4)(919,4)(920,4)(921,4)(922,4)(923,4)(924,4)(925,4)(926,4)(927,4)(928,4)(929,4)(930,4)(931,4)(932,4)(933,4)(934,4)(935,4)(936,4)(937,4)(938,4)(939,4)(940,4)(941,4)(942,4)(943,4)(944,4)(945,4)(946,4)(947,4)(948,4)(949,4)(950,4)(951,4)(952,4)(953,4)(954,4)(955,4)(956,4)(957,4)(958,4)(959,4)(960,4)(961,4)(962,4)(963,4)(964,4)(965,4)(966,4)(967,4)(968,4)(969,4)(970,4)(971,4)(972,4)(973,4)(974,4)(975,4)(976,4)(977,4)(978,4)(979,4)(980,4)(981,4)(982,4)(983,4)(984,4)(985,4)(986,4)(987,4)(988,4)(989,4)(990,4)(991,4)(992,4)(993,4)(994,4)(995,4)(996,4)(997,4)(998,4)(999,4)(1000,4)(1001,4)(1002,4)(1003,4)(1004,4)(1005,4)(1006,4)(1007,4)(1008,4)(1009,4)(1010,4)(1011,4)(1012,4)(1013,4)(1014,4)(1015,4)(1016,4)(1017,4)(1018,4)(1019,4)(1020,4)(1021,4)(1022,4)(1023,4)(1024,4)(1025,4)(1026,4)(1027,4)(1028,4)(1029,4)(1030,4)(1031,4)(1032,4)(1033,4)(1034,4)(1035,4)(1036,4)(1037,4)(1038,4)(1039,4)(1040,4)(1041,4)(1042,4)(1043,4)(1044,4)(1045,4)(1046,4)(1047,4)(1048,4)(1049,4)(1050,4)(1051,4)(1052,4)(1053,4)(1054,4)(1055,4)(1056,4)(1057,4)(1058,4)(1059,4)(1060,4)(1061,4)(1062,4)(1063,4)(1064,4)(1065,4)(1066,4)(1067,4)(1068,4)(1069,4)(1070,4)(1071,4)(1072,4)(1073,4)(1074,4)(1075,4)(1076,4)(1077,4)(1078,4)(1079,4)(1080,4)(1081,4)(1082,4)(1083,4)(1084,4)(1085,4)(1086,4)(1087,4)(1088,4)(1089,4)(1090,4)(1091,4)(1092,4)(1093,4)(1094,4)(1095,4)(1096,4)(1097,4)(1098,4)(1099,4)(1100,4)(1101,4)(1102,4)(1103,4)(1104,4)(1105,4)(1106,4)(1107,4)(1108,4)(1109,4)(1110,4)(1111,4)(1112,4)(1113,4)(1114,4)(1115,4)(1116,4)(1117,4)(1118,4)(1119,4)(1120,4)(1121,4)(1122,4)(1123,4)(1124,4)(1125,4)(1126,4)(1127,4)(1128,4)(1129,4)(1130,4)(1131,4)(1132,4)(1133,4)(1134,4)(1135,4)(1136,4)(1137,4)(1138,4)(1139,4)(1140,4)(1141,4)(1142,4)(1143,4)(1144,4)(1145,4)(1146,4)(1147,4)(1148,4)(1149,4)(1150,4)(1151,4)(1152,4)(1153,4)(1154,4)(1155,4)(1156,4)(1157,4)(1158,4)(1159,4)(1160,4)(1161,4)(1162,4)(1163,4)(1164,4)(1165,4)(1166,4)(1167,4)(1168,4)(1169,4)(1170,4)(1171,4)(1172,4)(1173,4)(1174,4)(1175,4)(1176,4)(1177,4)(1178,4)(1179,4)(1180,4)(1181,4)(1182,4)(1183,4)(1184,4)(1185,4)(1186,4)(1187,4)(1188,4)(1189,4)(1190,4)(1191,4)(1192,4)(1193,4)(1194,4)(1195,4)(1196,4)(1197,4)(1198,4)(1199,4)(1200,4)(1201,4)(1202,4)(1203,4)(1204,4)(1205,4)(1206,4)(1207,4)(1208,4)(1209,4)(1210,4)(1211,4)(1212,4)(1213,4)(1214,4)(1215,4)(1216,4)(1217,4)(1218,4)(1219,4)(1220,4)(1221,4)(1222,4)(1223,4)(1224,4)(1225,4)(1226,4)(1227,4)(1228,4)(1229,4)(1230,4)(1231,4)(1232,4)(1233,4)(1234,4)(1235,4)(1236,4)(1237,4)(1238,4)(1239,4)(1240,4)(1241,4)(1242,4)(1243,4)(1244,4)(1245,4)(1246,4)(1247,4)(1248,4)(1249,4)(1250,4)(1251,4)(1252,4)(1253,4)(1254,4)(1255,4)(1256,4)(1257,4)(1258,4)(1259,4)(1260,4)(1261,4)(1262,4)(1263,4)(1264,4)(1265,4)(1266,4)(1267,4)(1268,4)(1269,4)(1270,4)(1271,4)(1272,4)(1273,4)(1274,4)(1275,4)(1276,4)(1277,4)(1278,4)(1279,4)(1280,4)(1281,4)(1282,4)(1283,4)(1284,4)(1285,4)(1286,4)(1287,4)(1288,4)(1289,4)(1290,4)(1291,4)(1292,4)(1293,4)(1294,4)(1295,4)(1296,4)(1297,4)(1298,4)(1299,4)(1300,4)(1301,4)(1302,4)(1303,4)(1304,4)(1305,4)(1306,4)(1307,4)(1308,4)(1309,4)(1310,4)(1311,4)(1312,4)(1313,4)(1314,4)(1315,4)(1316,4)(1317,4)(1318,4)(1319,4)(1320,4)(1321,4)(1322,4)(1323,4)(1324,4)(1325,4)(1326,4)(1327,4)(1328,4)(1329,4)(1330,4)(1331,4)(1332,4)(1333,4)(1334,4)(1335,4)(1336,4)(1337,4)(1338,4)(1339,4)(1340,4)(1341,4)(1342,4)(1343,4)(1344,4)(1345,4)(1346,4)(1347,4)(1348,4)(1349,4)(1350,4)(1351,4)(1352,4)(1353,4)(1354,4)(1355,4)(1356,4)(1357,4)(1358,4)(1359,4)(1360,4)(1361,4)(1362,4)(1363,4)(1364,4)(1365,4)(1366,4)(1367,4)(1368,4)(1369,4)(1370,4)(1371,4)(1372,4)(1373,4)(1374,4)(1375,4)(1376,4)(1377,4)(1378,4)(1379,4)(1380,4)(1381,4)(1382,4)(1383,4)(1384,4)(1385,4)(1386,4)(1387,4)(1388,4)(1389,4)(1390,4)(1391,4)(1392,4)(1393,4)(1394,4)(1395,4)(1396,4)(1397,4)(1398,4)(1399,4)(1400,4)(1401,4)(1402,4)(1403,4)(1404,4)(1405,4)(1406,4)(1407,4)(1408,4)(1409,4)(1410,4)(1411,4)(1412,4)(1413,4)(1414,4)(1415,4)(1416,4)(1417,4)(1418,4)(1419,4)(1420,4)(1421,4)(1422,4)(1423,4)(1424,4)(1425,4)(1426,4)(1427,4)(1428,4)(1429,4)(1430,4)(1431,4)(1432,4)(1433,4)(1434,4)(1435,4)(1436,4)(1437,4)(1438,4)(1439,4)(1440,4)(1441,4)(1442,4)(1443,4)(1444,4)(1445,4)(1446,4)(1447,4)(1448,4)(1449,4)(1450,4)(1451,4)(1452,4)(1453,4)(1454,4)(1455,4)(1456,4)(1457,4)(1458,4)(1459,4)(1460,4)(1461,4)(1462,4)(1463,4)(1464,4)(1465,4)(1466,4)(1467,4)(1468,4)(1469,4)(1470,4)(1471,4)(1472,4)(1473,4)(1474,4)(1475,4)(1476,4)(1477,4)(1478,4)(1479,4)(1480,4)(1481,4)(1482,4)(1483,4)(1484,4)(1485,4)(1486,4)(1487,4)(1488,4)(1489,4)(1490,4)(1491,4)(1492,4)(1493,4)(1494,4)(1495,4)(1496,4)(1497,4)(1498,4)(1499,4)(1500,4)(1501,4)(1502,4)(1503,4)(1504,4)(1505,4)(1506,4)(1507,4)(1508,4)(1509,4)(1510,4)(1511,4)(1512,4)(1513,4)(1514,4)(1515,4)(1516,4)(1517,4)(1518,4)(1519,4)(1520,4)(1521,4)(1522,4)(1523,4)(1524,4)(1525,4)(1526,4)(1527,4)(1528,4)(1529,4)(1530,4)(1531,4)(1532,4)(1533,4)(1534,4)(1535,4)(1536,4)(1537,4)(1538,4)(1539,4)(1540,4)(1541,4)(1542,4)(1543,4)(1544,4)(1545,4)(1546,4)(1547,4)(1548,4)(1549,4)(1550,4)(1551,4)(1552,4)(1553,4)(1554,4)(1555,4)(1556,4)(1557,4)(1558,4)(1559,4)(1560,4)(1561,4)(1562,4)(1563,4)(1564,4)(1565,4)(1566,4)(1567,4)(1568,4)(1569,4)(1570,4)(1571,4)(1572,4)(1573,4)(1574,4)(1575,4)(1576,4)(1577,4)(1578,4)(1579,4)(1580,4)(1581,4)(1582,4)(1583,4)(1584,4)(1585,4)(1586,4)(1587,4)(1588,4)(1589,4)(1590,4)(1591,4)(1592,4)(1593,4)(1594,4)(1595,4)(1596,4)(1597,4)(1598,4)(1599,4)(1600,4)(1601,4)(1602,4)(1603,4)(1604,4)(1605,4)(1606,4)(1607,4)(1608,4)(1609,4)(1610,4)(1611,4)(1612,4)(1613,4)(1614,4)(1615,4)(1616,4)(1617,4)(1618,4)(1619,4)(1620,4)(1621,4)(1622,4)(1623,4)(1624,4)(1625,4)(1626,4)(1627,4)(1628,4)(1629,4)(1630,4)(1631,4)(1632,4)(1633,4)(1634,4)(1635,4)(1636,4)(1637,4)(1638,4)(1639,4)(1640,4)(1641,4)(1642,4)(1643,4)(1644,4)(1645,4)(1646,4)(1647,4)(1648,4)(1649,4)(1650,4)(1651,4)(1652,4)(1653,4)(1654,4)(1655,4)(1656,4)(1657,4)(1658,4)(1659,4)(1660,4)(1661,4)(1662,4)(1663,4)(1664,4)(1665,4)(1666,4)(1667,4)(1668,4)(1669,4)(1670,4)(1671,4)(1672,4)(1673,4)(1674,4)(1675,4)(1676,4)(1677,4)(1678,4)(1679,4)(1680,4)(1681,4)(1682,4)(1683,4)(1684,4)(1685,4)(1686,4)(1687,4)(1688,4)(1689,4)(1690,4)(1691,4)(1692,4)(1693,4)(1694,4)(1695,4)(1696,4)(1697,4)(1698,4)(1699,4)(1700,4)(1701,4)(1702,4)(1703,4)(1704,4)(1705,4)(1706,4)(1707,4)(1708,4)(1709,4)(1710,4)(1711,4)(1712,4)(1713,4)(1714,4)(1715,4)(1716,4)(1717,4)(1718,4)(1719,4)(1720,4)(1721,4)(1722,4)(1723,4)(1724,4)(1725,4)(1726,4)(1727,4)(1728,4)(1729,4)(1730,4)(1731,4)(1732,4)(1733,4)(1734,4)(1735,4)(1736,4)(1737,4)(1738,4)(1739,4)(1740,4)(1741,4)(1742,4)(1743,4)(1744,4)(1745,4)(1746,4)(1747,4)(1748,4)(1749,4)(1750,4)(1751,4)(1752,4)(1753,4)(1754,4)(1755,4)(1756,4)(1757,4)(1758,4)(1759,4)(1760,4)(1761,4)(1762,4)(1763,4)(1764,4)(1765,4)(1766,4)(1767,4)(1768,4)(1769,4)(1770,4)(1771,4)(1772,4)(1773,4)(1774,4)(1775,4)(1776,4)(1777,4)(1778,4)(1779,4)(1780,4)(1781,4)(1782,4)(1783,4)(1784,4)(1785,4)(1786,4)(1787,4)(1788,4)(1789,4)(1790,4)(1791,4)(1792,4)(1793,4)(1794,4)(1795,4)(1796,4)(1797,4)(1798,4)(1799,4)(1800,4)(1801,4)(1802,4)(1803,4)(1804,4)(1805,4)(1806,4)(1807,4)(1808,4)(1809,4)(1810,4)(1811,4)(1812,4)(1813,4)(1814,4)(1815,4)(1816,4)(1817,4)(1818,4)(1819,4)(1820,4)(1821,4)(1822,4)(1823,4)(1824,4)(1825,4)(1826,4)(1827,4)(1828,4)(1829,4)(1830,4)(1831,4)(1832,4)(1833,4)(1834,4)(1835,4)(1836,4)(1837,4)(1838,4)(1839,4)(1840,4)(1841,4)(1842,4)(1843,4)(1844,4)(1845,4)(1846,4)(1847,4)(1848,4)(1849,4)(1850,4)(1851,4)(1852,4)(1853,4)(1854,4)(1855,4)(1856,4)(1857,4)(1858,4)(1859,4)(1860,4)(1861,4)(1862,4)(1863,4)(1864,4)(1865,4)(1866,4)(1867,4)(1868,4)(1869,4)(1870,4)(1871,4)(1872,4)(1873,4)(1874,4)(1875,4)(1876,4)(1877,4)(1878,4)(1879,4)(1880,4)(1881,4)(1882,4)(1883,4)(1884,4)(1885,4)(1886,4)(1887,4)(1888,4)(1889,4)(1890,4)(1891,4)(1892,4)(1893,4)(1894,4)(1895,4)(1896,4)(1897,4)(1898,4)(1899,4)(1900,4)(1901,4)(1902,4)(1903,4)(1904,4)(1905,4)(1906,4)(1907,4)(1908,4)(1909,4)(1910,4)(1911,4)(1912,4)(1913,4)(1914,4)(1915,4)(1916,4)(1917,4)(1918,4)(1919,4)(1920,4)(1921,4)(1922,4)(1923,4)(1924,4)(1925,4)(1926,4)(1927,4)(1928,4)(1929,4)(1930,4)(1931,4)(1932,4)(1933,4)(1934,4)(1935,4)(1936,4)(1937,4)(1938,4)(1939,4)(1940,4)(1941,4)(1942,4)(1943,4)(1944,4)(1945,4)(1946,4)(1947,4)(1948,4)(1949,4)(1950,4)(1951,4)(1952,4)(1953,4)(1954,4)(1955,4)(1956,4)(1957,4)(1958,4)(1959,4)(1960,4)(1961,4)(1962,4)(1963,4)(1964,4)(1965,4)(1966,4)(1967,4)(1968,4)(1969,4)(1970,4)(1971,4)(1972,4)(1973,4)(1974,4)(1975,4)(1976,4)(1977,4)(1978,4)(1979,4)(1980,4)(1981,4)(1982,4)(1983,4)(1984,4)(1985,4)(1986,4)(1987,4)(1988,4)(1989,4)(1990,4)(1991,4)(1992,4)(1993,4)(1994,4)(1995,4)(1996,4)(1997,4)(1998,4)(1999,4)(2000,4)(2001,4)(2002,4)(2003,4)(2004,4)(2005,4)(2006,4)(2007,4)(2008,4)(2009,4)(2010,4)(2011,4)(2012,4)(2013,4)(2014,4)(2015,4)(2016,4)(2017,4)(2018,4)(2019,4)(2020,4)(2021,4)(2022,4)(2023,4)(2024,4)(2025,4)(2026,4)(2027,4)(2028,4)(2029,4)(2030,4)(2031,4)(2032,4)(2033,4)(2034,4)(2035,4)(2036,4)(2037,4)(2038,4)(2039,4)(2040,4)(2041,4)(2042,4)(2043,4)(2044,4)(2045,4)(2046,4)(2047,4)(2048,4)(2049,4)(2050,4)(2051,4)(2052,4)(2053,4)(2054,4)(2055,4)(2056,4)(2057,4)(2058,4)(2059,4)(2060,4)(2061,4)(2062,4)(2063,4)(2064,4)(2065,4)(2066,4)(2067,4)(2068,4)(2069,4)(2070,4)(2071,4)(2072,4)(2073,4)(2074,4)(2075,4)(2076,4)(2077,4)(2078,4)(2079,4)(2080,4)(2081,4)(2082,4)(2083,4)(2084,4)(2085,4)(2086,4)(2087,4)(2088,4)(2089,4)(2090,4)(2091,4)(2092,4)(2093,4)(2094,4)(2095,4)(2096,4)(2097,4)(2098,4)(2099,4)(2100,4)(2101,4)(2102,4)(2103,4)(2104,4)(2105,4)(2106,4)(2107,4)(2108,4)(2109,4)(2110,4)(2111,4)(2112,4)(2113,4)(2114,4)(2115,4)(2116,4)(2117,4)(2118,4)(2119,4)(2120,4)(2121,4)(2122,4)(2123,4)(2124,4)(2125,4)(2126,4)(2127,4)(2128,4)(2129,4)(2130,4)(2131,4)(2132,4)(2133,4)(2134,4)(2135,4)(2136,4)(2137,4)(2138,4)(2139,4)(2140,4)(2141,4)(2142,4)(2143,4)(2144,4)(2145,4)(2146,4)(2147,4)(2148,4)(2149,4)(2150,4)(2151,4)(2152,4)(2153,4)(2154,4)(2155,4)(2156,4)(2157,4)(2158,4)(2159,4)(2160,4)(2161,4)(2162,4)(2163,4)(2164,4)(2165,4)(2166,4)(2167,4)(2168,4)(2169,4)(2170,4)(2171,4)(2172,4)(2173,4)(2174,4)(2175,4)(2176,4)(2177,4)(2178,4)(2179,4)(2180,4)(2181,4)(2182,4)(2183,4)(2184,4)(2185,4)(2186,4)(2187,4)(2188,4)(2189,4)(2190,4)(2191,4)(2192,4)(2193,4)(2194,4)(2195,4)(2196,4)(2197,4)(2198,4)(2199,4)(2200,4)(2201,4)(2202,4)(2203,4)(2204,4)(2205,4)(2206,4)(2207,4)(2208,4)(2209,4)(2210,4)(2211,4)(2212,4)(2213,4)(2214,4)(2215,4)(2216,4)(2217,4)(2218,4)(2219,4)(2220,4)(2221,4)(2222,4)(2223,4)(2224,4)(2225,4)(2226,4)(2227,4)(2228,4)(2229,4)(2230,4)(2231,4)(2232,4)(2233,4)(2234,4)(2235,4)(2236,4)(2237,4)(2238,4)(2239,4)(2240,4)(2241,4)(2242,4)(2243,4)(2244,4)(2245,4)(2246,4)(2247,4)(2248,4)(2249,4)(2250,4)(2251,4)(2252,4)(2253,4)(2254,4)(2255,4)(2256,4)(2257,4)(2258,4)(2259,4)(2260,4)(2261,4)(2262,4)(2263,4)(2264,4)(2265,4)(2266,4)(2267,4)(2268,4)(2269,4)(2270,4)(2271,4)(2272,4)(2273,4)(2274,4)(2275,4)(2276,4)(2277,4)(2278,4)(2279,4)(2280,4)(2281,4)(2282,4)(2283,4)(2284,4)(2285,4)(2286,4)(2287,4)(2288,4)(2289,4)(2290,4)(2291,4)(2292,4)(2293,4)(2294,4)(2295,4)(2296,4)(2297,4)(2298,4)(2299,4)(2300,4)(2301,4)(2302,4)(2303,4)(2304,4)(2305,4)(2306,4)(2307,4)(2308,4)(2309,4)(2310,4)(2311,4)(2312,4)(2313,4)(2314,4)(2315,4)(2316,4)(2317,4)(2318,4)(2319,4)(2320,4)(2321,4)(2322,4)(2323,4)(2324,4)(2325,4)(2326,4)(2327,4)(2328,4)(2329,4)(2330,4)(2331,4)(2332,4)(2333,4)(2334,4)(2335,4)(2336,4)(2337,4)(2338,4)(2339,4)(2340,4)(2341,4)(2342,4)(2343,4)(2344,4)(2345,4)(2346,4)(2347,4)(2348,4)(2349,4)(2350,4)(2351,4)(2352,4)(2353,4)(2354,4)(2355,4)(2356,4)(2357,4)(2358,4)(2359,4)(2360,4)(2361,4)(2362,4)(2363,4)(2364,4)(2365,4)(2366,4)(2367,4)(2368,4)(2369,4)(2370,4)(2371,4)(2372,4)(2373,4)(2374,4)(2375,4)(2376,4)(2377,4)(2378,4)(2379,4)(2380,4)(2381,4)(2382,4)(2383,4)(2384,4)(2385,4)(2386,4)(2387,4)(2388,4)(2389,4)(2390,4)(2391,4)(2392,4)(2393,4)(2394,4)(2395,4)(2396,4)(2397,4)(2398,4)(2399,4)(2400,4)(2401,4)(2402,4)(2403,4)(2404,4)(2405,4)(2406,4)(2407,4)(2408,4)(2409,4)(2410,4)(2411,4)(2412,4)(2413,4)(2414,4)(2415,4)(2416,4)(2417,4)(2418,4)(2419,4)(2420,4)(2421,4)(2422,4)(2423,4)(2424,4)(2425,4)(2426,4)(2427,4)(2428,4)(2429,4)(2430,4)(2431,4)(2432,4)(2433,4)(2434,4)(2435,4)(2436,4)(2437,4)(2438,4)(2439,4)(2440,4)(2441,4)(2442,4)(2443,4)(2444,4)(2445,4)(2446,4)(2447,4)(2448,4)(2449,4)(2450,4)(2451,4)(2452,4)(2453,4)(2454,4)(2455,4)(2456,4)(2457,4)(2458,4)(2459,4)(2460,4)(2461,4)(2462,4)(2463,4)(2464,4)(2465,4)(2466,4)(2467,4)(2468,4)(2469,4)(2470,4)(2471,4)(2472,4)(2473,4)(2474,4)(2475,4)(2476,4)(2477,4)(2478,4)(2479,4)(2480,4)(2481,4)(2482,4)(2483,4)(2484,4)(2485,4)(2486,4)(2487,4)(2488,4)(2489,4)(2490,4)(2491,4)(2492,4)(2493,4)(2494,4)(2495,4)(2496,4)(2497,4)(2498,4)(2499,4)(2500,4)(2501,4)(2502,4)(2503,4)(2504,4)(2505,4)(2506,4)(2507,4)(2508,4)(2509,4)(2510,4)(2511,4)(2512,4)(2513,4)(2514,4)(2515,4)(2516,4)(2517,4)(2518,4)(2519,4)(2520,4)(2521,4)(2522,4)(2523,4)(2524,4)(2525,4)(2526,4)(2527,4)(2528,4)(2529,4)(2530,4)(2531,4)(2532,4)(2533,4)(2534,4)(2535,4)(2536,4)(2537,4)(2538,4)(2539,4)(2540,4)(2541,4)(2542,4)(2543,4)(2544,4)(2545,4)(2546,4)(2547,4)(2548,4)(2549,4)(2550,4)(2551,4)(2552,4)(2553,4)(2554,4)(2555,4)(2556,4)(2557,4)(2558,4)(2559,4)(2560,4)(2561,4)(2562,4)(2563,4)(2564,4)(2565,4)(2566,4)(2567,4)(2568,4)(2569,4)(2570,4)(2571,4)(2572,4)(2573,4)(2574,4)(2575,4)(2576,4)(2577,4)(2578,4)(2579,4)(2580,4)(2581,4)(2582,4)(2583,4)(2584,4)(2585,4)(2586,4)(2587,4)(2588,4)(2589,4)(2590,4)(2591,4)(2592,4)(2593,4)(2594,4)(2595,4)(2596,4)(2597,4)(2598,4)(2599,4)(2600,4)(2601,4)(2602,4)(2603,4)(2604,4)(2605,4)(2606,4)(2607,4)(2608,4)(2609,4)(2610,4)(2611,4)(2612,4)(2613,4)(2614,4)(2615,4)(2616,4)(2617,4)(2618,4)(2619,4)(2620,4)(2621,4)(2622,4)(2623,4)(2624,4)(2625,4)(2626,4)(2627,4)(2628,4)(2629,4)(2630,4)(2631,4)(2632,4)(2633,4)(2634,4)(2635,4)(2636,4)(2637,4)(2638,4)(2639,4)(2640,4)(2641,4)(2642,4)(2643,4)(2644,4)(2645,4)(2646,4)(2647,4)(2648,4)(2649,4)(2650,4)(2651,4)(2652,4)(2653,4)(2654,4)(2655,4)(2656,4)(2657,4)(2658,4)(2659,4)(2660,4)(2661,4)(2662,4)(2663,4)(2664,4)(2665,4)(2666,4)(2667,4)(2668,4)(2669,4)(2670,4)(2671,4)(2672,4)(2673,4)(2674,4)(2675,4)(2676,4)(2677,4)(2678,4)(2679,4)(2680,4)(2681,4)(2682,4)(2683,4)(2684,4)(2685,4)(2686,4)(2687,4)(2688,4)(2689,4)(2690,4)(2691,4)(2692,4)(2693,4)(2694,4)(2695,4)(2696,4)(2697,4)(2698,4)(2699,4)(2700,4)(2701,4)(2702,4)(2703,4)(2704,4)(2705,4)(2706,4)(2707,4)(2708,4)(2709,4)(2710,4)(2711,4)(2712,4)(2713,4)(2714,4)(2715,4)(2716,4)(2717,4)(2718,4)(2719,4)(2720,4)(2721,4)(2722,4)(2723,4)(2724,4)(2725,4)(2726,4)(2727,4)(2728,4)(2729,4)(2730,4)(2731,4)(2732,4)(2733,4)(2734,4)(2735,4)(2736,4)(2737,4)(2738,4)(2739,4)(2740,4)(2741,4)(2742,4)(2743,4)(2744,4)(2745,4)(2746,4)(2747,4)(2748,4)(2749,4)(2750,4)(2751,4)(2752,4)(2753,4)(2754,4)(2755,4)(2756,4)(2757,4)(2758,4)(2759,4)(2760,4)(2761,4)(2762,4)(2763,4)(2764,4)(2765,4)(2766,4)(2767,4)(2768,4)(2769,4)(2770,4)(2771,4)(2772,4)(2773,4)(2774,4)(2775,4)(2776,4)(2777,4)(2778,4)(2779,4)(2780,4)(2781,4)(2782,4)(2783,4)(2784,4)(2785,4)(2786,4)(2787,4)(2788,4)(2789,4)(2790,4)(2791,4)(2792,4)(2793,4)(2794,4)(2795,4)(2796,4)(2797,4)(2798,4)(2799,4)(2800,4)(2801,4)(2802,4)(2803,4)(2804,4)(2805,4)(2806,4)(2807,4)(2808,4)(2809,4)(2810,4)(2811,4)(2812,4)(2813,4)(2814,4)(2815,4)(2816,4)(2817,4)(2818,4)(2819,4)(2820,4)(2821,4)(2822,4)(2823,4)(2824,4)(2825,4)(2826,4)(2827,4)(2828,4)(2829,4)(2830,4)(2831,4)(2832,4)(2833,4)(2834,4)(2835,4)(2836,4)(2837,4)(2838,4)(2839,4)(2840,4)(2841,4)(2842,4)(2843,4)(2844,4)(2845,4)(2846,4)(2847,4)(2848,4)(2849,4)(2850,4)(2851,4)(2852,4)(2853,4)(2854,4)(2855,4)(2856,4)(2857,4)(2858,4)(2859,4)(2860,4)(2861,4)(2862,4)(2863,4)(2864,4)(2865,4)(2866,4)(2867,4)(2868,4)(2869,4)(2870,4)(2871,4)(2872,4)(2873,4)(2874,4)(2875,4)(2876,4)(2877,4)(2878,4)(2879,4)(2880,4)(2881,4)(2882,4)(2883,4)(2884,4)(2885,4)(2886,4)(2887,4)(2888,4)(2889,4)(2890,4)(2891,4)(2892,4)(2893,4)(2894,4)(2895,4)(2896,4)(2897,4)(2898,4)(2899,4)(2900,4)(2901,4)(2902,4)(2903,4)(2904,4)(2905,4)(2906,4)(2907,4)(2908,4)(2909,4)(2910,4)(2911,4)(2912,4)(2913,4)(2914,4)(2915,4)(2916,4)(2917,4)(2918,4)(2919,4)(2920,4)(2921,4)(2922,4)(2923,4)(2924,4)(2925,4)(2926,4)(2927,4)(2928,4)(2929,4)(2930,4)(2931,4)(2932,4)(2933,4)(2934,4)(2935,4)(2936,4)(2937,4)(2938,4)(2939,4)(2940,4)(2941,4)(2942,4)(2943,4)(2944,4)(2945,4)(2946,4)(2947,4)(2948,4)(2949,4)(2950,4)(2951,4)(2952,4)(2953,4)(2954,4)(2955,4)(2956,4)(2957,4)(2958,4)(2959,4)(2960,4)(2961,4)(2962,4)(2963,4)(2964,4)(2965,4)(2966,4)(2967,4)(2968,4)(2969,4)(2970,4)(2971,4)(2972,4)(2973,4)(2974,4)(2975,4)(2976,4)(2977,4)(2978,4)(2979,4)(2980,4)(2981,4)(2982,4)(2983,4)(2984,4)(2985,4)(2986,4)(2987,4)(2988,4)(2989,4)(2990,4)(2991,4)(2992,4)(2993,4)(2994,4)(2995,4)(2996,4)(2997,4)(2998,4)(2999,4)(3000,4)(3001,4)(3002,4)(3003,4)(3004,4)(3005,4)(3006,4)(3007,4)(3008,4)(3009,4)(3010,4)(3011,4)(3012,4)(3013,4)(3014,4)(3015,4)(3016,4)(3017,4)(3018,4)(3019,4)(3020,4)(3021,4)(3022,4)(3023,4)(3024,4)(3025,4)(3026,4)(3027,4)(3028,4)(3029,4)(3030,4)(3031,4)(3032,4)(3033,4)(3034,4)(3035,4)(3036,4)(3037,4)(3038,4)(3039,4)(3040,4)(3041,4)(3042,4)(3043,4)(3044,4)(3045,4)(3046,4)(3047,4)(3048,4)(3049,4)(3050,4)(3051,4)(3052,4)(3053,4)(3054,4)(3055,4)(3056,4)(3057,4)(3058,4)(3059,4)(3060,4)(3061,4)(3062,4)(3063,4)(3064,4)(3065,4)(3066,4)(3067,4)(3068,4)(3069,4)(3070,4)(3071,4)(3072,4)(3073,4)(3074,4)(3075,4)(3076,4)(3077,4)(3078,4)(3079,4)(3080,4)(3081,4)(3082,4)(3083,4)(3084,4)(3085,4)(3086,4)(3087,4)(3088,4)(3089,4)(3090,4)(3091,4)(3092,4)(3093,4)(3094,4)(3095,4)(3096,4)(3097,4)(3098,4)(3099,4)(3100,4)(3101,4)(3102,4)(3103,4)(3104,4)(3105,4)(3106,4)(3107,4)(3108,4)(3109,4)(3110,4)(3111,4)(3112,4)(3113,4)(3114,4)(3115,4)(3116,4)(3117,4)(3118,4)(3119,4)(3120,4)(3121,4)(3122,4)(3123,4)(3124,4)(3125,4)(3126,4)(3127,4)(3128,4)(3129,4)(3130,4)(3131,4)(3132,4)(3133,4)(3134,4)(3135,4)(3136,4)(3137,4)(3138,4)(3139,4)(3140,4)(3141,4)(3142,4)(3143,4)(3144,4)(3145,4)(3146,4)(3147,4)(3148,4)(3149,4)(3150,4)(3151,4)(3152,4)(3153,4)(3154,4)(3155,4)(3156,4)(3157,4)(3158,4)(3159,4)(3160,4)(3161,4)(3162,4)(3163,4)(3164,4)(3165,4)(3166,4)(3167,4)(3168,4)(3169,4)(3170,4)(3171,4)(3172,4)(3173,4)(3174,4)(3175,4)(3176,4)(3177,4)(3178,4)(3179,4)(3180,4)(3181,4)(3182,4)(3183,4)(3184,4)(3185,4)(3186,4)(3187,4)(3188,4)(3189,4)(3190,4)(3191,4)(3192,4)(3193,4)(3194,4)(3195,4)(3196,4)(3197,4)(3198,4)(3199,4)(3200,4)(3201,4)(3202,4)(3203,4)(3204,4)(3205,4)(3206,4)(3207,4)(3208,4)(3209,4)(3210,4)(3211,4)(3212,4)(3213,4)(3214,4)(3215,4)(3216,4)(3217,4)(3218,4)(3219,4)(3220,4)(3221,4)(3222,4)(3223,4)(3224,4)(3225,4)(3226,4)(3227,4)(3228,4)(3229,4)(3230,4)(3231,4)(3232,4)(3233,4)(3234,4)(3235,4)(3236,4)(3237,4)(3238,4)(3239,4)(3240,4)(3241,4)(3242,4)(3243,4)(3244,4)(3245,4)(3246,4)(3247,4)(3248,4)(3249,4)(3250,4)(3251,4)(3252,4)(3253,4)(3254,4)(3255,4)(3256,4)(3257,4)(3258,4)(3259,4)(3260,4)(3261,4)(3262,4)(3263,4)(3264,4)(3265,4)(3266,4)(3267,4)(3268,4)(3269,4)(3270,4)(3271,4)(3272,4)(3273,4)(3274,4)(3275,4)(3276,4)(3277,4)(3278,4)(3279,4)(3280,4)(3281,4)(3282,4)(3283,4)(3284,4)(3285,4)(3286,4)(3287,4)(3288,4)(3289,4)(3290,4)(3291,4)(3292,4)(3293,4)(3294,4)(3295,4)(3296,4)(3297,4)(3298,4)(3299,4)(3300,4)(3301,4)(3302,4)(3303,4)(3304,4)(3305,4)(3306,4)(3307,4)(3308,4)(3309,4)(3310,4)(3311,4)(3312,4)(3313,4)(3314,4)(3315,4)(3316,4)(3317,4)(3318,4)(3319,4)(3320,4)(3321,4)(3322,4)(3323,4)(3324,4)(3325,4)(3326,4)(3327,4)(3328,4)(3329,4)(3330,4)(3331,4)(3332,4)(3333,4)(3334,4)(3335,4)(3336,4)(3337,4)(3338,4)(3339,4)(3340,4)(3341,4)(3342,4)(3343,4)(3344,4)(3345,4)(3346,4)(3347,4)(3348,4)(3349,4)(3350,4)(3351,4)(3352,4)(3353,4)(3354,4)(3355,4)(3356,4)(3357,4)(3358,4)(3359,4)(3360,4)(3361,4)(3362,4)(3363,4)(3364,4)(3365,4)(3366,4)(3367,4)(3368,4)(3369,4)(3370,4)(3371,4)(3372,4)(3373,4)(3374,4)(3375,4)(3376,4)(3377,4)(3378,4)(3379,4)(3380,4)(3381,4)(3382,4)(3383,4)(3384,4)(3385,4)(3386,4)(3387,4)(3388,4)(3389,4)(3390,4)(3391,4)(3392,4)(3393,4)(3394,4)(3395,4)(3396,4)(3397,4)(3398,4)(3399,4)(3400,4)(3401,4)(3402,4)(3403,4)(3404,4)(3405,4)(3406,4)(3407,4)(3408,4)(3409,4)(3410,4)(3411,4)(3412,4)(3413,4)(3414,4)(3415,4)(3416,4)(3417,4)(3418,4)(3419,4)(3420,4)(3421,4)(3422,4)(3423,4)(3424,4)(3425,4)(3426,4)(3427,4)(3428,4)(3429,4)(3430,4)(3431,4)(3432,4)(3433,4)(3434,4)(3435,4)(3436,4)(3437,4)(3438,4)(3439,4)(3440,4)(3441,4)(3442,4)(3443,4)(3444,4)(3445,4)(3446,4)(3447,4)(3448,4)(3449,4)(3450,4)(3451,4)(3452,4)(3453,4)(3454,4)(3455,4)(3456,4)(3457,4)(3458,4)(3459,4)(3460,4)(3461,4)(3462,4)(3463,4)(3464,4)(3465,4)(3466,4)(3467,4)(3468,4)(3469,4)(3470,4)(3471,4)(3472,4)(3473,4)(3474,4)(3475,4)(3476,4)(3477,4)(3478,4)(3479,4)(3480,4)(3481,4)(3482,4)(3483,4)(3484,4)(3485,4)(3486,4)(3487,4)(3488,4)(3489,4)(3490,4)(3491,4)(3492,4)(3493,4)(3494,4)(3495,4)(3496,4)(3497,4) diff --git a/guitar/midi/sevilanaTRK2.tab b/guitar/midi/sevilanaTRK2.tab new file mode 100644 index 0000000..c6758e9 --- /dev/null +++ b/guitar/midi/sevilanaTRK2.tab @@ -0,0 +1,982 @@ +%TabMaster v1.05r% + + +E|---------0-----------0-----------0-----0-------------0---0----- +B|-------2---------2-------------2-----2---------------2-2------- +G|-----2---------2---------2---------2-------------2-2---------2- +D|---2---------2---------2-----2-----------2-----2-------------2- +A|-0---------0-------0-------0---------------0-0-------------0--- +E|--------------------------------------------------------------- + + + +E|---0---------0-----------0---0---0-0-------0-----------0------- +B|-2---------2-------------2-0---0-----0-------2---------0-----0- +G|---------2-----------2---1-----------1-1-------2-----1-----1--- +D|-------2---------2-----0---------------0-0-----2---0-----0----- +A|-----0---------0---2-------------------------0-2-2------------- +E|--------------------------------------------------------------- + + + +E|-0---0-0-------------0---------0-0-0-------------------0-----0- +B|---0-----0-----------0-------2-------2---2-------------2---2--- +G|---------1-1-------------2-1-----------2-----2-------2---2----- +D|-----------0-0---0-----2-------------------2---2-----2-2------- +A|---------------2---0-----------------------------0-0----------- +E|--------------------------------------------------------------- + + + +E|-----0-------0---------0-----0-----------0-----0---------0----- +B|-------2---2-------2-------2---------2-------2-------2-------2- +G|-----2---2-----2---------2-------2---------2-----2---------2--- +D|-2-----2-----2-------2-------2---------2-------2-------2------- +A|-0-0---------0---0-------------0---0-----------0---0----------- +E|--------------------------------------------------------------- + + + +E|-0-0-0-----------------0-----0-0-0-----------------0-------0--- +B|-----2---2-------------2---2-------2-2-------------2-----0---0- +G|-------2-----2-----2-----2-------------2-2-------2-----1------- +D|-----------2---2---2-2---------------------2-2---2---0--------- +A|-----------------0-0---------------------------0-2------------- +E|--------------------------------------------------------------- + + + +E|-0-0---------------0-------0---0-0-------------0---------0-0-0- +B|-----0-------------0-----0---0-----0-----------0-------2------- +G|-----1-1---------1-----1-----------1-1-------------2-1--------- +D|-------0-0-----0-----0---------------0-0---0-----2------------- +A|-----------2-2---------------------------2---0----------------- +E|--------------------------------------------------------------- + + + +E|-------------------0-----0-----0-------0---------0-----0------- +B|-2---2-------------2---2---------2---2-------2-------2--------- +G|---2-----2-------2---2---------2---2-----2---------2-------2--- +D|-------2---2-----2-2-------2-----2-----2-------2-------2------- +A|-------------0-0-----------0-0---------0---0-------------0---0- +E|--------------------------------------------------------------- + + + +E|-----0-----0---------0-----0-0-0-----------------0-----0-0-0--- +B|-2-------2-------2-------2-----2---2-------------2---2-------2- +G|-------2-----2---------2---------2-----2-----2-----2----------- +D|---2-------2-------2-----------------2---2---2-2--------------- +A|-----------0---0---------------------------0-0----------------- +E|--------------------------------------------------------------- + + + +E|---------------0-------0---0-0---------------0-------0---0-0--- +B|-2-------------2-----0---0-----0-------------0-----0---0-----0- +G|---2-2-------2-----1-----------1-1---------1-----1-----------1- +D|-------2-2---2---0---------------0-0-----0-----0--------------- +A|-----------0-2-----------------------2-2----------------------- +E|--------------------------------------------------------------- + + + +E|-----------0---------0-0-0-------------------0-----0-----0----- +B|-----------0-------2-------2---2-------------2---2---------2--- +G|-1-------------2-1-----------2-----2-------2---2---------2---2- +D|-0-0---0-----2-------------------2---2-----2-2-------2-----2--- +A|-----2---0-----------------------------0-0-----------0-0------- +E|--------------------------------------------------------------- + + + +E|---0---------0-----0-----------0-----0---------0-----0-0-0----- +B|-2-------2-------2---------2-------2-------2-------2-------2--- +G|-----2---------2-------2---------2-----2---------2-----------2- +D|---2-------2-------2---------2-------2-------2----------------- +A|---0---0-------------0---0-----------0---0--------------------- +E|--------------------------------------------------------------- + + + +E|-----0-0-5-0-5-2-2-4-5-4-5-0-2-2-0-2-4-4-2-0-0-0-2-0-2-2-----0---2-0- +B|---------------------------------------------------------3-2---0----- +G|--------------------------------------------------------------------- +D|-2------------------------------------------------------------------- +A|---0----------------------------------------------------------------- +E|--------------------------------------------------------------------- + + + +E|---------------0-------------0-----------0-----0--------------- +B|---3-------2-2---------2---0-----------2-----2----------------- +G|---------2-----------2-----------2---------2-------------2---2- +D|-------2-----------2-----------2-----2-----------2-----2------- +A|-0---0-----------0-------0---------0---------------0-0-----0--- +E|--------------------------------------------------------------- + + + +E|-0---0-------0---------0---------------0-0---0-0-------0--------- +B|-2-2-------2---------2---------------0-2---0-----0---------2----- +G|---------2---------2-------------1-2-------------1-1---------2-1- +D|---------2-------2-----------2-0-------------------0-0-----0-2--- +A|-------0-------0---------2-0---------------------------2-2-0----- +E|----------------------------------------------------------------- + + + +E|-0-------0---0-0-------------0---------0-0-0------------------- +B|-0-----0---0-----0-----------0-------2-------2---2------------- +G|-----1-----------1-1-------------2-1-----------2-----2-------2- +D|---0---------------0-0---0-----2-------------------2---2-----2- +A|-----------------------2---0-----------------------------0-0--- +E|--------------------------------------------------------------- + + + +E|-0-----0-----0-------0---------0-----0-----------0-----0------- +B|-2---2---------2---2-------2-------2---------2-------2-------2- +G|---2---------2---2-----2---------2-------2---------2-----2----- +D|-2-------2-----2-----2-------2-------2---------2-------2------- +A|---------0-0---------0---0-------------0---0-----------0---0--- +E|--------------------------------------------------------------- + + + +E|---0-----0-0-0---------0-0-5-0-4-5-2-4-0-2-2-0---2-------0------- +B|-------2-------2---------------------------------------2--------- +G|-----2-----------2-----------------------------------2-------2--- +D|-2-----------------2-------------------------------2---------2--- +A|---------------------0-------------------------0-----------0---0- +E|----------------------------------------------------------------- + + + +E|---0-----0---------0---0-------------0---0-0-0-------0-0-0-0-5- +B|---2---2-----------2-2-----------2-----2---2---2-----2--------- +G|-----2---------2---2-----------2---2-------2-----2---2--------- +D|-2-------------2-2---------2---2-----------2-------2-2--------- +A|-----------0-0-----------0---0-------------0------------------- +E|--------------------------------------------------------------- + + + +E|-0-4-5-2-4-0-2-2-0-2-------0-----------0-----0-----------0----- +B|-------------------------0---------0-------0---------0-------0- +G|-----------------------1---------1-------1---------1-------1--- +D|---------------------0---------0-----0-----------0-----0------- +A|-------------------2---------2---2-------------2-----2--------- +E|--------------------------------------------------------------- + + + +E|-0-------------0-----0-------0-0-------0-------------0---2-0-4- +B|-----------0-------0---------0---0-------0-0-2-0-3-2---3------- +G|---------1-------1---------1-------1---1----------------------- +D|-----0-------0-----------0-----------0---0--------------------- +A|---2---2---------------2--------------------------------------- +E|--------------------------------------------------------------- + + + +E|-2-2-4---------2-0---------0-----0---------0---0-------------0- +B|-------------2-------------2---2-----------2-2-----------2----- +G|-----------2---------2-------2---------2---2-----------2---2--- +D|---------2-----------2---2-------------2-2---------2---2------- +A|-------0-----------0---0-----------0-0-----------0---0--------- +E|--------------------------------------------------------------- + + + +E|---0-0-0-------0-0-0-0-5-0-5-2-2-4-5-4-5-0-2-2-0-2-4-4-2-0-0-0-2-0- +B|-2---2---2-----2--------------------------------------------------- +G|-----2-----2---2--------------------------------------------------- +D|-----2-------2-2--------------------------------------------------- +A|-----0------------------------------------------------------------- +E|------------------------------------------------------------------- + + + +E|-2-2-----0---2-0---------------0-------------0-----------0----- +B|-----3-2---0-------3-------2-2---------2---0-----------2-----2- +G|-------------------------2-----------2-----------2---------2--- +D|-----------------------2-----------2-----------2-----2--------- +A|-----------------0---0-----------0-------0---------0----------- +E|--------------------------------------------------------------- + + + +E|-0---------------0---0-------0---------0---------------0-0---0- +B|-----------------2-2-------2---------2---------------0-2---0--- +G|-----------2---2---------2---------2-------------1-2----------- +D|---2-----2---------------2-------2-----------2-0--------------- +A|-----0-0-----0---------0-------0---------2-0------------------- +E|--------------------------------------------------------------- + + + +E|-0-------0---------0-------0---0-0-------------0---------0-0-0--- +B|---0---------2-----0-----0---0-----0-----------0-------2-------2- +G|---1-1---------2-1-----1-----------1-1-------------2-1----------- +D|-----0-0-----0-2-----0---------------0-0---0-----2--------------- +A|---------2-2-0---------------------------2---0------------------- +E|----------------------------------------------------------------- + + + +E|-----------------0-----0-----0-------0---------0-----0--------- +B|---2-------------2---2---------2---2-------2-------2---------2- +G|-2-----2-------2---2---------2---2-----2---------2-------2----- +D|-----2---2-----2-2-------2-----2-----2-------2-------2--------- +A|-----------0-0-----------0-0---------0---0-------------0---0--- +E|--------------------------------------------------------------- + + + +E|---0-----0---------0-----0-0-0---------0-0-0-5-4-5-2-4-0-2-2-0--- +B|-------2-------2-------2-------2--------------------------------- +G|-----2-----2---------2-----------2------------------------------- +D|-2-------2-------2-----------------2----------------------------- +A|---------0---0-----------------------0-------------------------0- +E|----------------------------------------------------------------- + + + +E|-2-------0---------0-----0---------0---0-------------0---0-0-0- +B|-------2-----------2---2-----------2-2-----------2-----2---2--- +G|-----2-------2-------2---------2---2-----------2---2-------2--- +D|---2---------2---2-------------2-2---------2---2-----------2--- +A|-----------0---0-----------0-0-----------0---0-------------0--- +E|--------------------------------------------------------------- + + + +E|-------0-0-0-0-5-0-4-5-2-4-0-2-2-0-2-------0-----------0-----0- +B|-2-----2---------------------------------0---------0-------0--- +G|---2---2-------------------------------1---------1-------1----- +D|-----2-2-----------------------------0---------0-----0--------- +A|-----------------------------------2---------2---2------------- +E|--------------------------------------------------------------- + + + +E|-----------0-----0-------------0-----0-------0-0-------0------- +B|-------0-------0-----------0-------0---------0---0-------0-0-2- +G|-----1-------1-----------1-------1---------1-------1---1------- +D|---0-----0-----------0-------0-----------0-----------0---0----- +A|-2-----2-----------2---2---------------2----------------------- +E|--------------------------------------------------------------- + + + +E|-------0---2-0-4-2-2-4---------2-0---------0-----0---------0--- +B|-0-3-2---3-------------------2-------------2---2-----------2-2- +G|---------------------------2---------2-------2---------2---2--- +D|-------------------------2-----------2---2-------------2-2----- +A|-----------------------0-----------0---0-----------0-0--------- +E|--------------------------------------------------------------- + + + +E|-0-------------0---0-0-0-------0-0-0-0-5-0-5-2-2-4-5-4-5-0-2-2-0- +B|-----------2-----2---2---2-----2--------------------------------- +G|---------2---2-------2-----2---2--------------------------------- +D|-----2---2-----------2-------2-2--------------------------------- +A|---0---0-------------0------------------------------------------- +E|----------------------------------------------------------------- + + + +E|-2-4-4-2-0-0-0-2-0-2-2-----0---2-0---------------0-------------0- +B|-----------------------3-2---0-------3-------2-2---------2---0--- +G|-------------------------------------------2-----------2--------- +D|-----------------------------------------2-----------2----------- +A|-----------------------------------0---0-----------0-------0----- +E|----------------------------------------------------------------- + + + +E|-----------0-----0---------------0---0-------0---------0------- +B|---------2-----2-----------------2-2-------2---------2--------- +G|---2---------2-------------2---2---------2---------2----------- +D|-2-----2-----------2-----2---------------2-------2-----------2- +A|-----0---------------0-0-----0---------0-------0---------2-0--- +E|--------------------------------------------------------------- + + + +E|---------0-0---0-0-------0---------0-------0---0-0-------------0- +B|-------0-2---0-----0---------2-----0-----0---0-----0-----------0- +G|---1-2-------------1-1---------2-1-----1-----------1-1----------- +D|-0-------------------0-0-----0-2-----0---------------0-0---0----- +A|-------------------------2-2-0---------------------------2---0--- +E|----------------------------------------------------------------- + + + +E|---------0-0-0-------------------0-----0-----0-------0--------- +B|-------2-------2---2-------------2---2---------2---2-------2--- +G|---2-1-----------2-----2-------2---2---------2---2-----2------- +D|-2-------------------2---2-----2-2-------2-----2-----2-------2- +A|---------------------------0-0-----------0-0---------0---0----- +E|--------------------------------------------------------------- + + + +E|-0-----0-----------0-----0---------0-----0-0-0---------0-0-0-5-4- +B|-----2---------2-------2-------2-------2-------2----------------- +G|---2-------2---------2-----2---------2-----------2--------------- +D|-------2---------2-------2-------2-----------------2------------- +A|---------0---0-----------0---0-----------------------0----------- +E|----------------------------------------------------------------- + + + +E|-5-2-4-0-2-2-0---2-------0---------0-----0---------0---0------- +B|-----------------------2-----------2---2-----------2-2--------- +G|---------------------2-------2-------2---------2---2----------- +D|-------------------2---------2---2-------------2-2---------2--- +A|---------------0-----------0---0-----------0-0-----------0---0- +E|--------------------------------------------------------------- + + + +E|-------0---0-0-0-------0-0-0-0-5-0-4-5-2-4-0-2-2-0-2-------0--- +B|---2-----2---2---2-----2---------------------------------0----- +G|-2---2-------2-----2---2-------------------------------1------- +D|-2-----------2-------2-2-----------------------------0--------- +A|-------------0-------------------------------------2---------2- +E|--------------------------------------------------------------- + + + +E|---------0-----0-----------0-----0-------------0-----0-------0- +B|-----0-------0---------0-------0-----------0-------0---------0- +G|---1-------1---------1-------1-----------1-------1---------1--- +D|-0-----0-----------0-----0-----------0-------0-----------0----- +A|---2-------------2-----2-----------2---2---------------2------- +E|--------------------------------------------------------------- + + + +E|-0-------0-------------0---2-0-4-2-2-4---------2-0---------0--- +B|---0-------0-0-2-0-3-2---3-------------------2-------------2--- +G|-----1---1---------------------------------2---------2-------2- +D|-------0---0-----------------------------2-----------2---2----- +A|---------------------------------------0-----------0---0------- +E|--------------------------------------------------------------- + + + +E|---0---------0---0-------------0---0-0-0-------0-0-0-0-5-0-5-2- +B|-2-----------2-2-----------2-----2---2---2-----2--------------- +G|---------2---2-----------2---2-------2-----2---2--------------- +D|---------2-2---------2---2-----------2-------2-2--------------- +A|-----0-0-----------0---0-------------0------------------------- +E|--------------------------------------------------------------- + + + +E|-2-4-5-4-5-0-2-2-0-2-4-4-2-0-0-0-2-0-2-2-----0---2-0--------------- +B|-----------------------------------------3-2---0-------3-------2-2- +G|-------------------------------------------------------------2----- +D|-----------------------------------------------------------2------- +A|-----------------------------------------------------0---0--------- +E|------------------------------------------------------------------- + + + +E|-0-----0-------------------0-------0-------0-------0-----0----- +B|---0-------2-----------1-------1-------1-------1-------1------- +G|---------------2-----2-------2-------2-------2-------2--------- +D|---------2---------2-------2-----2---------2-----2-----------2- +A|-----0-------0---0-------0---0-----------0---0-------------0--- +E|--------------------------------------------------------------- + + + +E|-----------0---0-----------0---0---------------0-0-0-0--------- +B|-------1-----1-----------1---1---------------0---1-----0-0----- +G|---2-----2-----------2-2-----------------1-2---------------1-1- +D|-----2-----------2---2---------------0-2----------------------- +A|-0---------------0-0-------------0-2--------------------------- +E|--------------------------------------------------------------- + + + +E|---------------------0-0-0-0---------------------------0-0-0---0----------- +B|-----------------0-0---------0-0-------------------1-0-------1-----1------- +G|-------------1-1-----------------1-1-----------1-2-------------2-2--------- +D|-0-0-----0-0-------------------------0-0---0-2---------------------2-2----- +A|-----2-2---------------------------------0-2---------------------------0-0- +E|--------------------------------------------------------------------------- + + + +E|-----------0-0-------0-------0---------------0-0---------------0-0- +B|-------1-1---------------1-1-------------1-1---------------1-1----- +G|---2-----2-----2-------2-------------2-2---------------2-----2----- +D|-2---2---------2---2-------------2-2-----------------2---2--------- +A|---------------0-0-------------0---0-------------0-0-------------0- +E|------------------------------------------------------------------- + + + +E|-----------0-0-0-0---------------------------0---0-0-----0----- +B|---------1-1-------1---1-----------------1-----1-----1-------1- +G|-----2-2-------------2-----2---------2-----2-----------2------- +D|---2-2-------------------2---2-----2---2-------------------2--- +A|-0-----------------------------0-0----------------------------- +E|--------------------------------------------------------------- + + + +E|-------------------0-0-0-0-----------------------------0-0-0-0--------------- +B|-------------1---0---------0-0---------------------0-0---------0-0----------- +G|-2-----------1-2---------------1-1-------------1-1-----------------1-1------- +D|---2-----0-2-----------------------0-0-----0-0-------------------------0-0-0- +A|-----0-2-------------------------------2-2---------------------------------2- +E|----------------------------------------------------------------------------- + + + +E|-------------0-0-0---0---------------------0-0-------0-------0--- +B|---------0-1-------1-----1-------------1-1---------------1-1----- +G|-----1-2-------------2-2-----------2-----2-----2-------2--------- +D|---2---------------------2-2-----2---2---------2---2------------- +A|-0---------------------------0-0---------------0-0-------------0- +E|----------------------------------------------------------------- + + + +E|-------------0-0---------------0-0-----------0-0-0-0------------- +B|---------1-1---------------1-1-------------1-1-------1---1------- +G|-----2-2---------------2-----2---------2-2-------------2-----2--- +D|-2-2-----------------2---2-----------2-2-------------------2---2- +A|---0-------------0-0-------------0-0----------------------------- +E|----------------------------------------------------------------- + + + +E|---------------0---0-0-----0-----------------------0-0-0-0--------- +B|-----------1-----1-----1-------1-------------1---0---------0-0----- +G|-------2-----2-----------2-------2-----------1-2---------------1-1- +D|-----2---2-------------------2-----2-----0-2----------------------- +A|-0-0---------------------------------0-2--------------------------- +E|------------------------------------------------------------------- + + + +E|---------------------0-0-0-0---------------------------0-0-0---0--------- +B|-----------------0-0---------0-0-------------------0-1-------1-----1----- +G|-------------1-1-----------------1-1-----------1-2-------------2-2------- +D|-0-0-----0-0-------------------------0-0-0---2---------------------2-2--- +A|-----2-2---------------------------------2-0---------------------------0- +E|------------------------------------------------------------------------- + + + +E|-------------0-0-------0-------0---------------0-0---------------0- +B|---------1-1---------------1-1-------------1-1---------------1-1--- +G|-----2-----2-----2-------2-------------2-2---------------2-----2--- +D|---2---2---------2---2-------------2-2-----------------2---2------- +A|-0---------------0-0-------------0---0-------------0-0------------- +E|------------------------------------------------------------------- + + + +E|-0-------------0-0-----0------------------------------------------- +B|-------------1-1---------1----------------------------------------- +G|---------2-2---------------2--------------------------------------- +D|-----2-2-------------2-----------------------2-----0-2-2-0-----0--- +A|-0-0---------------3---0-----3-2-0-3-2-3-2-3-0-2-3---------3-2---0- +E|------------------------------------------------------------------- + + + +E|-----------------0-------0-----0-------0-----0-------0-----0----------- +B|---------------1---------1---1---------1---1---------1---1------------- +G|-------------2---------2---2---------2---2---------2---2-------------2- +D|-2-0-------2-------2---2---------2---2---------2-----2-----------2-2--- +A|-----2-0-3-0-------0-0-----------0-0-----------0-0-----------0-0------- +E|----------------------------------------------------------------------- + + + +E|---0---0---------0---0-0-0-----------------------------0-0-0-0----------- +B|---1-1-----------1-0-------0-0---------------------0-0---------0-0------- +G|-2-------------2-1-------------1-1-------------1-1-----------------1-1--- +D|-------------2-0-------------------0-0-----0-0-------------------------0- +A|---------0-2---------------------------2-2------------------------------- +E|------------------------------------------------------------------------- + + + +E|-----------------0-0-0---0---------------------0-0-------0------- +B|-------------0-1-------1-----1-------------1-1---------------1-1- +G|---------1-2-------------2-2-----------2-----2-----2-------2----- +D|-0-0---2---------------------2-2-----2---2---------2---2--------- +A|---2-0---------------------------0-0---------------0-0----------- +E|----------------------------------------------------------------- + + + +E|-0---------------0-0---------------0-0-------------0-0-----0----- +B|-------------1-1---------------1-1---------------1-1---------1--- +G|---------2-2---------------2-----2-----------2-2---------------2- +D|-----2-2-----------------2---2-----------2-2-------------2------- +A|---0---0-------------0-0-------------0-0---------------3---0----- +E|----------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------- +B|----------------------------------------------------------------------------- +G|----------------------------------------------------------------------------- +D|-------------------------------------------------------------------0-2---2-0- +A|-3-2-0-3-0-3-2-2-3-0-0-0-2-3-3-3-0-2-0-3-0-3-2-2-3-0-0-0-2-3-2-0-3---2-3----- +E|----------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|------------------------------------------------------------------- +D|-2-2-2-0-2-2-2-3-2-2-0-0-2-3-2-0-2---0-0-2-2-0---0-2-0-2-0-----0--- +A|-----------------------------------3-----------3-----------3-2---0- +E|------------------------------------------------------------------- + + + +E|---------------0-------0-----0---------0-----0-------0-----0--------- +B|-------------1---------1---1-----------1---1---------1---1----------- +G|-----------2---------2---2-----------2---2---------2---2------------- +D|-2-0-----2-------2---2-----------2---2---------2-----2-----------2-2- +A|-----0-3---------0-0-----------2-0-0-----------0-0-0---------0-0----- +E|--------------------------------------------------------------------- + + + +E|-----0---0---------0---0-0-0-----------------------------0-0-0-0--------- +B|-----1-1-----------1-0-------0-0---------------------0-0---------0-0----- +G|-2-2-------------2-1-------------1-1-------------1-1-----------------1-1- +D|---------------2-0-------------------0-0-----0-0------------------------- +A|-----------0-2---------------------------2-2----------------------------- +E|------------------------------------------------------------------------- + + + +E|-------------------0-0-0---0---------------------0-0-------0--- +B|---------------0-1-------1-----1-------------1-1--------------- +G|-----------1-2-------------2-2-----------2-----2-----2-------2- +D|-0-0-0---2---------------------2-2-----2---2---------2---2----- +A|-----2-0---------------------------0-0---------------0-0------- +E|--------------------------------------------------------------- + + + +E|-----0---------------0-0---------------0-0-------------0-0-----0--- +B|-1-1-------------1-1---------------1-1---------------1-1---------1- +G|-------------2-2---------------2-----2-----------2-2--------------- +D|---------2-2-----------------2---2-----------2-2-------------2----- +A|-------0---0-------------0-0-------------0-0---------------3---0--- +E|------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------- +B|----------------------------------------------------------------------------- +G|-2--------------------------------------------------------------------------- +D|---------------------------------------------------------------------0-2---2- +A|---3-2-0-3-0-3-2-2-3-0-0-0-2-3-3-3-0-2-0-3-0-3-2-2-3-0-0-0-2-3-2-0-3---2-3--- +E|----------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|------------------------------------------------------------------- +D|-0-2-2-2-0-2-2-2-3-2-2-0-0-2-3-2-0-2---0-0-2-2-0---0-2-0-2-0-----0- +A|-------------------------------------3-----------3-----------3-2--- +E|------------------------------------------------------------------- + + + +E|-----------------0-------0-----0---------0-----0-------0-----0----- +B|---------------1---------1---1-----------1---1---------1---1------- +G|-------------2---------2---2-----------2---2---------2---2--------- +D|---2-0-----2-------2---2-----------2---2---------2-----2----------- +A|-0-----0-3---------0-0-----------2-0-0-----------0-0-0---------0-0- +E|------------------------------------------------------------------- + + + +E|---------0---0---------0---0-0-0-----------------------------0-0-0-0----- +B|---------1-1-----------1-0-------0-0---------------------0-0---------0-0- +G|-----2-2-------------2-1-------------1-1-------------1-1----------------- +D|-2-2---------------2-0-------------------0-0-----0-0--------------------- +A|---------------0-2---------------------------2-2------------------------- +E|------------------------------------------------------------------------- + + + +E|-----------------------0-0-0---0---------------------0-0-------0- +B|-------------------0-1-------1-----1-------------1-1------------- +G|-1-1-----------1-2-------------2-2-----------2-----2-----2------- +D|-----0-0-0---2---------------------2-2-----2---2---------2---2--- +A|---------2-0---------------------------0-0---------------0-0----- +E|----------------------------------------------------------------- + + + +E|-------0---------------0-0---------------0-0-------------0-0-----0- +B|---1-1-------------1-1---------------1-1---------------1-1--------- +G|-2-------------2-2---------------2-----2-----------2-2------------- +D|-----------2-2-----------------2---2-----------2-2-------------2--- +A|---------0---0-------------0-0-------------0-0---------------3---0- +E|------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------- +B|-1--------------------------------------------------------------------------- +G|---2------------------------------------------------------------------------- +D|-----------------------------------------------------------------------0-2--- +A|-----3-2-0-3-0-3-2-2-3-0-0-0-2-3-3-3-0-2-0-3-0-3-2-2-3-0-0-0-2-3-2-0-3---2-3- +E|----------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|------------------------------------------------------------------- +D|-2-0-2-2-2-0-2-2-2-3-2-2-0-0-2-3-2-0-2---0-0-2-2-0---0-2-0-2-0---0- +A|---------------------------------------3-----------3-----------3--- +E|------------------------------------------------------------------- + + + +E|---------------------0-------0---------0-------------0---0--------- +B|-------------------1---1-------------0---------0-------0-------0--- +G|-----------------2---------2-------1-------------1-1--------------- +D|---2-0---------2-----------2-----2-----------2-2---------------2-2- +A|-0-----0-0-3-2---------0-2-----2---------2-2---------------2-2----- +E|------------------------------------------------------------------- + + + +E|---0-----0-------------0---0---------------0-0---------0---0----- +B|-------0---------0-------0---------0-----0-------0-------0------- +G|-1---1-------------1-1---------1-------1-------1-------2--------- +D|---------------2-2---------------2-2-------------2-3-----------3- +A|-----------2-2---------------2-------2---------3-----2-------3-3- +E|----------------------------------------------------------------- + + + +E|-------0---0-------0---0-0-0-------------------------0---0----- +B|-----0---0-------0---0-----0-0---------------------0---0------- +G|-2---2-----------2-1-----------1-1-----------1---1------------- +D|---3-----------2-3-----------------2-2---2-2------------------- +A|-------------2-----3-------------------2-------2-----------2-2- +E|--------------------------------------------------------------- + + + +E|-----------0---0-------0-----------0-------0-----------0---0------- +B|-------0-0-----------0-------0---------0---------0-------0-----0--- +G|---1-1-------------1-------------1---1-------------1-1-----------1- +D|-2-2-------------2-----------2-2---------------2-2-------------2--- +A|-------------2-----------2-2-------------2---2---------------2----- +E|------------------------------------------------------------------- + + + +E|-0-0-0-------------------------0---0-0---------0--------------- +B|-----0-0---------------------0---0-----0-----0---------------0- +G|---------1-1-----------1---1-------------1-1-------------1-2--- +D|-------------2-2---2-2-------------------2---2-------3-2------- +A|-----------------2-------2-----------------------2-3----------- +E|--------------------------------------------------------------- + + + +E|---0-0-0-0-----------------------------0-0-0-0---------------0------- +B|-0---------0---0-------------------0-0---------0---0---------0------- +G|-------------2---2-------------2-2---------------2---2-------2------- +D|-------------------3-3---3-3---------------------------3-3-----2-3--- +A|-----------------------3-----3-----------------------------2-------3- +E|--------------------------------------------------------------------- + + + +E|-----0-0-0-------------------------0---0---------------0---0----- +B|---0-----0-0---------------------0---0-------------0-0----------- +G|-1-----------1-1-----------1---1---------------1-1-------------1- +D|-----------------2-2---2-2-------------------2-2-------------2--- +A|---------------------2-------2-----------2-2-------------2------- +E|----------------------------------------------------------------- + + + +E|---0-----------0-------0-----------0---0-------0-0-0------------- +B|-0-------0---------0---------0-------0-----0-------0-0----------- +G|-------------1---1-------------1-1-----------1---------1-1------- +D|---------2-2---------------2-2-------------2---------------2-2--- +A|-----2-2-------------2---2---------------2---------------------2- +E|----------------------------------------------------------------- + + + +E|-------------0---0-0---------0-----------------0-0-0-0----------- +B|-----------0---0-----0-----0---------------0-0---------0---0----- +G|-----1---1-------------1-1-------------1-2---------------2---2--- +D|-2-2-------------------2---2-------3-2-------------------------3- +A|-------2-----------------------2-3------------------------------- +E|----------------------------------------------------------------- + + + +E|-------------------0-0-0-0---------------0---------0---0-0------- +B|---------------0-0---------0---0---------0-------0-------0-0----- +G|-----------2-2---------------2---2-------2-----1-------------1-1- +D|-3---3-3---------------------------3-3-----2---------3----------- +A|---3-----3-----------------------------2-----3------------------- +E|----------------------------------------------------------------- + + + +E|-------------------0---0---------------0---0-------0-----------0--- +B|-----------------0---0-------------0-0-----------0-------0--------- +G|-----------1---1---------------1-1-------------1-------------1---1- +D|-2-2---2-2-------------------2-2-------------2-----------2-2------- +A|-----2-------2-----------2-2-------------2-----------2-2----------- +E|------------------------------------------------------------------- + + + +E|-----0-----------0---0-------0-0--------------------------------- +B|-0---------0-------0-----0---------0----------------------------- +G|-------------1-1-----------1-------1----------------------------- +D|---------2-2-------------2-----------2--------------------------- +A|---2---2---------------2---------0-2---2-3-2-0-0-2-2-0-3---2-0-2- +E|---------------------------------------------------------3---1--- + + + +E|-------------------------0-------------------0---0--------------- +B|---------------------------0---------------0---0---------------0- +G|-----------------------------1---------1-1-----------------1-1--- +D|-------------------------------2---2-2-------------------2-2----- +A|---0-0---2-3-0-0-2-3---0---------2-----------------2-2----------- +E|-3---3-1---3-----3---1-0-----------3-------------------1--------- + + + +E|---0---0-------0-----------0-------0-----------0---0-------0-0-0- +B|-0-----------0-------0---------0---------0-------0-----0-------0- +G|-----------1-------------1---1-------------1-1-----------1------- +D|---------2-----------2-2---------------2-2-------------2--------- +A|-----2-----------2-2-------------2---2---------------2----------- +E|----------------------------------------------------------------- + + + +E|---------------------------0---0-0---------0-----------------0- +B|-0-----------------------0---0-----0-----0---------------0-0--- +G|---1-1-------------1---1-------------1-1-------------1-2------- +D|-------2-2-----2-2-------------------2---2-------3-2----------- +A|-------------2-------2-----------------------2-3--------------- +E|-----------0--------------------------------------------------- + + + +E|-0-0-0-----------------------------0-0-0-0---------------0--------- +B|-------0---0-------------------0-0---------0---0---------0-------0- +G|---------2---2-------------2-2---------------2---2-------2-----1--- +D|---------------3-3---3-3---------------------------3-3-----2------- +A|-------------------3-----3-----------------------------2-----3----- +E|------------------------------------------------------------------- + + + +E|-0---0-0-------------------------0---0---------------0---0------- +B|-------0-0---------------------0---0-------------0-0-----------0- +G|-----------1-1-----------1---1---------------1-1-------------1--- +D|---3-----------2-2---2-2-------------------2-2-------------2----- +A|-------------------2-------2-----------2-2-------------2--------- +E|----------------------------------------------------------------- + + + +E|-0-----------0-------0-----------0---0-------0-0------------------- +B|-------0---------0---------0-------0-----0---------0--------------- +G|-----------1---1-------------1-1-----------1-------1--------------- +D|-------2-2---------------2-2-------------2-------2---2-2-0-2-2-0-2- +A|---2-2-------------2---2---------------2-----------2--------------- +E|------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|------------------------------------------------------------------- +D|-----0-2-0-0-----0-2-0-0---2-0-0-2---0-2-0---0-----0-0-------0----- +A|-3-2-------3-2-4---------4-------3-2-------3---4-2-----4-2-0---2-0- +E|------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|-2---0-0-2-0-2---3-2-0-0-2-3-2---0-----0---2---3-0-0---2---3--- +E|---4-----------4---------------3---1-3---3-1-3-------3---1---0- + + + +E|-------------0---------0-----------0-------0-----------0---0----- +B|-----------0---------0-------0---------0---------0-------0-----0- +G|---------1---------1-------------1---1-------------1-1----------- +D|-------2---------2-----------2-2---------------2-2-------------2- +A|-0-2-----------2---------2-2-------------2---2---------------2--- +E|-----3---------------------------------------1------------------- + + + +E|---0-------------0-0-0-----------0---------------0---0-0--------- +B|-----0---------0-------0-------0---------------0---0-----0-----0- +G|-1-----1-----1-----------1-1-------------1-1---------------1-1--- +D|---------2-2---------------2-2-------2-2-------------------2---2- +A|-------2-----2---------------------2---------2------------------- +E|-------0--------------------------------------------------------- + + + +E|-0-------------0-0---0-0-----------------------------0-0-0-0--------- +B|-------------0-----0-----0---0-------------------0-0---------0---0--- +G|-----------2-1-------------2---2-------------2-2---------------2---2- +D|-------3-2-----------------------3-3---3-3--------------------------- +A|---3-2-------------------------------3-----3------------------------- +E|--------------------------------------------------------------------- + + + +E|-------0---------0---0-0-------------------------0---0----------- +B|-------0-------0-------0-0---------------------0---0------------- +G|-------2-----1-------------1-1-----------1---1---------------1-1- +D|-3-3-----2---------3-----------2-2---2-2-------------------2-2--- +A|-----2-----3-----------------------2-------2-----------2-2------- +E|----------------------------------------------------------------- + + + +E|-----0---0-------0-----------0-------0-----------0---0-------0-0- +B|-0-0-----------0-------0---------0---------0-------0-----0------- +G|-------------1-------------1---1-------------1-1-----------1----- +D|-----------2-----------2-2---------------2-2-------------2------- +A|-------2-----------2-2-------------2---2---------------2--------- +E|----------------------------------------------------------------- + + + +E|----------------------------------------------------------------- +B|---0------------------------------------------------------------- +G|---1------------------------------------------------------------- +D|-2---2-2-2-2-2-0-2-0-2-----0-2-0-0-----0-2-0-0---2-0-0-2---0-2-0- +A|---2-------------------3-2-------3-2-4---------4-------3-2------- +E|----------------------------------------------------------------- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|---0-----0-0-------0--------------------------------------------- +A|-3---4-2-----4-2-0---2-0-2---0-0-2-0-2---3-2-0-0-2-3-2---0-----0- +E|---------------------------4-----------4---------------3---1-3--- + + + +E|-----------------------------------0---------0-----------0------- +B|---------------------------------0---------0-------0---------0--- +G|-------------------------------1---------1-------------1---1----- +D|-----------------------------2---------2-----------2-2----------- +A|---2---3-0-0---2---3---0-2-----------2---------2-2-------------2- +E|-3-1-3-------3---1---0-----3------------------------------------- + + + +E|-0-----------0---0-------0-------------0-0-0-----------0--------- +B|-------0-------0-----0-----0---------0-------0-------0----------- +G|---------1-1-----------1-----1-----1-----------1-1-------------1- +D|-----2-2-------------2---------2-2---------------2-2-------2-2--- +A|---2---------------2---------2-----2---------------------2------- +E|---1-------------------------0----------------------------------- + + + +E|-------0---0-0---------0-------------0-0---0-0--------------------- +B|-----0---0-----0-----0-------------0-----0-----0---0--------------- +G|-1---------------1-1-------------2-1-------------2---2------------- +D|-----------------2---2-------3-2-----------------------3-3---3-3--- +A|---2---------------------3-2-------------------------------3-----3- +E|------------------------------------------------------------------- + + + +E|---------0-0-0-0---------------0---------0---0-0----------------- +B|-----0-0---------0---0---------0-------0-------0-0--------------- +G|-2-2---------------2---2-------2-----1-------------1-1----------- +D|-------------------------3-3-----2---------3-----------2-2---2-2- +A|-----------------------------2-----3-----------------------2----- +E|----------------------------------------------------------------- + + + +E|---------0---0---------------0---0-------0-----------0-------0----- +B|-------0---0-------------0-0-----------0-------0---------0--------- +G|-1---1---------------1-1-------------1-------------1---1----------- +D|-------------------2-2-------------2-----------2-2---------------2- +A|---2-----------2-2-------------2-----------2-2-------------2---2--- +E|------------------------------------------------------------------- + + + +E|-------0---0-------0-0----------------------------------------- +B|-0-------0-----0---------0------------------------------------- +G|---1-1-----------1-------1------------------------------------- +D|-2-------------2-------2---2-2-2-2-2-0-2-0-2-----0-2-0-0-----0- +A|-------------2-----------2-------------------3-2-------3-2-4--- +E|--------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|------------------------------------------------------------------- +D|-2-0-0---2-0-0-2---0-2-0---0-----0-0-------0----------------------- +A|-------4-------3-2-------3---4-2-----4-2-0---2-0-2---0-0-2-0-2---3- +E|---------------------------------------------------4-----------4--- + + + +E|---------------------------------------------------------0----- +B|-------------------------------------------------------0------- +G|-----------------------------------------------------1--------- +D|---------------------------------------------------2----------- +A|-2-0-0-2-3-2---0-----0---2---3-0-0---2---3---0-2-------------2- +E|-------------3---1-3---3-1-3-------3---1---0-----3---------1--- + + + +E|-------------0- +B|---------0-0--- +G|-----1---1----- +D|---2---2------- +A|-2------------- +E|-0------------- + diff --git a/guitar/midi/sevilanaTRK2_imp.tab b/guitar/midi/sevilanaTRK2_imp.tab new file mode 100644 index 0000000..4197405 --- /dev/null +++ b/guitar/midi/sevilanaTRK2_imp.tab @@ -0,0 +1,1018 @@ +%TabMaster v1.05r% + + +E|---------0-----------0-----------0-----0-------------0---0----- +B|-------2---------2-------------2-----2---------------2-2------- +G|-----2---------2---------2---------2-------------2-2---------2- +D|---2---------2---------2-----2-----------2-----2-------------2- +A|-0---------0-------0-------0---------------0-0-------------0--- +E|--------------------------------------------------------------- + + + +E|---0---------0-----------0---0---0-0-------0-----------0------- +B|-2---------2-------------2-0---0-----0-------2---------0-----0- +G|---------2-----------2---1-----------1-1-------2-----1-----1--- +D|-------2---------2-----0---------------0-0-----2---0-----0----- +A|-----0---------0---2-------------------------0-2-2------------- +E|--------------------------------------------------------------- + + + +E|-0---0-0-------------0---------0-0-0-------------------0-----0- +B|---0-----0-----------0-------2-------2---2-------------2---2--- +G|---------1-1-------------2-1-----------2-----2-------2---2----- +D|-----------0-0---0-----2-------------------2---2-----2-2------- +A|---------------2---0-----------------------------0-0----------- +E|--------------------------------------------------------------- + + + +E|-----0-------0---------0-----0-----------0-----0---------0----- +B|-------2---2-------2-------2---------2-------2-------2-------2- +G|-----2---2-----2---------2-------2---------2-----2---------2--- +D|-2-----2-----2-------2-------2---------2-------2-------2------- +A|-0-0---------0---0-------------0---0-----------0---0----------- +E|--------------------------------------------------------------- + + + +E|-0-0-0-----------------0-----0-0-0-----------------0-------0--- +B|-----2---2-------------2---2-------2-2-------------2-----0---0- +G|-------2-----2-----2-----2-------------2-2-------2-----1------- +D|-----------2---2---2-2---------------------2-2---2---0--------- +A|-----------------0-0---------------------------0-2------------- +E|--------------------------------------------------------------- + + + +E|-0-0---------------0-------0---0-0-------------0---------0-0-0- +B|-----0-------------0-----0---0-----0-----------0-------2------- +G|-----1-1---------1-----1-----------1-1-------------2-1--------- +D|-------0-0-----0-----0---------------0-0---0-----2------------- +A|-----------2-2---------------------------2---0----------------- +E|--------------------------------------------------------------- + + + +E|-------------------0-----0-----0-------0---------0-----0------- +B|-2---2-------------2---2---------2---2-------2-------2--------- +G|---2-----2-------2---2---------2---2-----2---------2-------2--- +D|-------2---2-----2-2-------2-----2-----2-------2-------2------- +A|-------------0-0-----------0-0---------0---0-------------0---0- +E|--------------------------------------------------------------- + + + +E|-----0-----0---------0-----0-0-0-----------------0-----0-0-0--- +B|-2-------2-------2-------2-----2---2-------------2---2-------2- +G|-------2-----2---------2---------2-----2-----2-----2----------- +D|---2-------2-------2-----------------2---2---2-2--------------- +A|-----------0---0---------------------------0-0----------------- +E|--------------------------------------------------------------- + + + +E|---------------0-------0---0-0---------------0-------0---0-0--- +B|-2-------------2-----0---0-----0-------------0-----0---0-----0- +G|---2-2-------2-----1-----------1-1---------1-----1-----------1- +D|-------2-2---2---0---------------0-0-----0-----0--------------- +A|-----------0-2-----------------------2-2----------------------- +E|--------------------------------------------------------------- + + + +E|-----------0---------0-0-0-------------------0-----0-----0----- +B|-----------0-------2-------2---2-------------2---2---------2--- +G|-1-------------2-1-----------2-----2-------2---2---------2---2- +D|-0-0---0-----2-------------------2---2-----2-2-------2-----2--- +A|-----2---0-----------------------------0-0-----------0-0------- +E|--------------------------------------------------------------- + + + +E|---0---------0-----0-----------0-----0---------0-----0-0-0----- +B|-2-------2-------2---------2-------2-------2-------2-------2--- +G|-----2---------2-------2---------2-----2---------2-----------2- +D|---2-------2-------2---------2-------2-------2----------------- +A|---0---0-------------0---0-----------0---0--------------------- +E|--------------------------------------------------------------- + + + +E|-----0-0-5-0-5-2-2-4-5-4-5-0-2-2-0-2-4-4-2-0-0-0-2-0-2-2-----0- +B|---------------------------------------------------------3-2--- +G|--------------------------------------------------------------- +D|-2------------------------------------------------------------- +A|---0----------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---2-0---------------0-------------0-----------0-----0--------- +B|-0-------3-------2-2---------2---0-----------2-----2----------- +G|---------------2-----------2-----------2---------2------------- +D|-------------2-----------2-----------2-----2-----------2-----2- +A|-------0---0-----------0-------0---------0---------------0-0--- +E|--------------------------------------------------------------- + + + +E|-------0---0-------0---------0---------------0-0---0-0-------0- +B|-------2-2-------2---------2---------------0-2---0-----0------- +G|-2---2---------2---------2-------------1-2-------------1-1----- +D|---------------2-------2-----------2-0-------------------0-0--- +A|---0---------0-------0---------2-0---------------------------2- +E|--------------------------------------------------------------- + + + +E|---------0-------0---0-0-------------0---------0-0-0----------- +B|---2-----0-----0---0-----0-----------0-------2-------2---2----- +G|-----2-1-----1-----------1-1-------------2-1-----------2-----2- +D|---0-2-----0---------------0-0---0-----2-------------------2--- +A|-2-0---------------------------2---0--------------------------- +E|--------------------------------------------------------------- + + + +E|---------0-----0-----0-------0---------0-----0-----------0----- +B|---------2---2---------2---2-------2-------2---------2-------2- +G|-------2---2---------2---2-----2---------2-------2---------2--- +D|-2-----2-2-------2-----2-----2-------2-------2---------2------- +A|---0-0-----------0-0---------0---0-------------0---0----------- +E|--------------------------------------------------------------- + + + +E|-0---------0-----0-0-0---------0-0-5-0-4-5-2-4-0-2-2-0---2----- +B|-------2-------2-------2--------------------------------------- +G|---2---------2-----------2-----------------------------------2- +D|-2-------2-----------------2-------------------------------2--- +A|-0---0-----------------------0-------------------------0------- +E|--------------------------------------------------------------- + + + +E|---0---------0-----0---------0---0-------------0---0-0-0------- +B|-2-----------2---2-----------2-2-----------2-----2---2---2----- +G|-------2-------2---------2---2-----------2---2-------2-----2--- +D|-------2---2-------------2-2---------2---2-----------2-------2- +A|-----0---0-----------0-0-----------0---0-------------0--------- +E|--------------------------------------------------------------- + + + +E|-0-0-0-0-5-0-4-5-2-4-0-2-2-0-2-------0-----------0-----0------- +B|-2---------------------------------0---------0-------0--------- +G|-2-------------------------------1---------1-------1---------1- +D|-2-----------------------------0---------0-----0-----------0--- +A|-----------------------------2---------2---2-------------2----- +E|--------------------------------------------------------------- + + + +E|-----0-----0-------------0-----0-------0-0-------0------------- +B|-0-------0-----------0-------0---------0---0-------0-0-2-0-3-2- +G|-------1-----------1-------1---------1-------1---1------------- +D|---0-----------0-------0-----------0-----------0---0----------- +A|-2-----------2---2---------------2----------------------------- +E|--------------------------------------------------------------- + + + +E|-0---2-0-4-2-2-4---------2-0---------0-----0---------0---0----- +B|---3-------------------2-------------2---2-----------2-2------- +G|---------------------2---------2-------2---------2---2--------- +D|-------------------2-----------2---2-------------2-2---------2- +A|-----------------0-----------0---0-----------0-0-----------0--- +E|--------------------------------------------------------------- + + + +E|---------0---0-0-0-------0-0-0-0-5-0-5-2-2-4-5-4-5-0-2-2-0-2-4- +B|-----2-----2---2---2-----2------------------------------------- +G|---2---2-------2-----2---2------------------------------------- +D|---2-----------2-------2-2------------------------------------- +A|-0-------------0----------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-4-2-0-0-0-2-0-2-2-----0---2-0---------------0-------------0--- +B|-------------------3-2---0-------3-------2-2---------2---0----- +G|---------------------------------------2-----------2----------- +D|-------------------------------------2-----------2-----------2- +A|-------------------------------0---0-----------0-------0------- +E|--------------------------------------------------------------- + + + +E|---------0-----0---------------0---0-------0---------0--------- +B|-------2-----2-----------------2-2-------2---------2----------- +G|-2---------2-------------2---2---------2---------2------------- +D|-----2-----------2-----2---------------2-------2-----------2-0- +A|---0---------------0-0-----0---------0-------0---------2-0----- +E|--------------------------------------------------------------- + + + +E|-------0-0---0-0-------0---------0-------0---0-0-------------0- +B|-----0-2---0-----0---------2-----0-----0---0-----0-----------0- +G|-1-2-------------1-1---------2-1-----1-----------1-1----------- +D|-------------------0-0-----0-2-----0---------------0-0---0----- +A|-----------------------2-2-0---------------------------2---0--- +E|--------------------------------------------------------------- + + + +E|---------0-0-0-------------------0-----0-----0-------0--------- +B|-------2-------2---2-------------2---2---------2---2-------2--- +G|---2-1-----------2-----2-------2---2---------2---2-----2------- +D|-2-------------------2---2-----2-2-------2-----2-----2-------2- +A|---------------------------0-0-----------0-0---------0---0----- +E|--------------------------------------------------------------- + + + +E|-0-----0-----------0-----0---------0-----0-0-0---------0-0-0-5- +B|-----2---------2-------2-------2-------2-------2--------------- +G|---2-------2---------2-----2---------2-----------2------------- +D|-------2---------2-------2-------2-----------------2----------- +A|---------0---0-----------0---0-----------------------0--------- +E|--------------------------------------------------------------- + + + +E|-4-5-2-4-0-2-2-0---2-------0---------0-----0---------0---0----- +B|-------------------------2-----------2---2-----------2-2------- +G|-----------------------2-------2-------2---------2---2--------- +D|---------------------2---------2---2-------------2-2---------2- +A|-----------------0-----------0---0-----------0-0-----------0--- +E|--------------------------------------------------------------- + + + +E|---------0---0-0-0-------0-0-0-0-5-0-4-5-2-4-0-2-2-0-2-------0- +B|-----2-----2---2---2-----2---------------------------------0--- +G|---2---2-------2-----2---2-------------------------------1----- +D|---2-----------2-------2-2-----------------------------0------- +A|-0-------------0-------------------------------------2--------- +E|--------------------------------------------------------------- + + + +E|-----------0-----0-----------0-----0-------------0-----0------- +B|-------0-------0---------0-------0-----------0-------0--------- +G|-----1-------1---------1-------1-----------1-------1---------1- +D|---0-----0-----------0-----0-----------0-------0-----------0--- +A|-2---2-------------2-----2-----------2---2---------------2----- +E|--------------------------------------------------------------- + + + +E|-0-0-------0-------------0---2-0-4-2-2-4---------2-0---------0- +B|-0---0-------0-0-2-0-3-2---3-------------------2-------------2- +G|-------1---1---------------------------------2---------2------- +D|---------0---0-----------------------------2-----------2---2--- +A|-----------------------------------------0-----------0---0----- +E|--------------------------------------------------------------- + + + +E|-----0---------0---0-------------0---0-0-0-------0-0-0-0-5-0-5- +B|---2-----------2-2-----------2-----2---2---2-----2------------- +G|-2---------2---2-----------2---2-------2-----2---2------------- +D|-----------2-2---------2---2-----------2-------2-2------------- +A|-------0-0-----------0---0-------------0----------------------- +E|--------------------------------------------------------------- + + + +E|-2-2-4-5-4-5-0-2-2-0-2-4-4-2-0-0-0-2-0-2-2-----0---2-0--------- +B|-------------------------------------------3-2---0-------3----- +G|--------------------------------------------------------------- +D|-------------------------------------------------------------2- +A|-------------------------------------------------------0---0--- +E|--------------------------------------------------------------- + + + +E|-------0-------------0-----------0-----0---------------0---0--- +B|---2-2---------2---0-----------2-----2-----------------2-2----- +G|-2-----------2-----------2---------2-------------2---2--------- +D|-----------2-----------2-----2-----------2-----2--------------- +A|---------0-------0---------0---------------0-0-----0---------0- +E|--------------------------------------------------------------- + + + +E|-----0---------0---------------0-0---0-0-------0---------0----- +B|---2---------2---------------0-2---0-----0---------2-----0----- +G|-2---------2-------------1-2-------------1-1---------2-1-----1- +D|-2-------2-----------2-0-------------------0-0-----0-2-----0--- +A|-------0---------2-0---------------------------2-2-0----------- +E|--------------------------------------------------------------- + + + +E|---0---0-0-------------0---------0-0-0-------------------0----- +B|-0---0-----0-----------0-------2-------2---2-------------2---2- +G|-----------1-1-------------2-1-----------2-----2-------2---2--- +D|-------------0-0---0-----2-------------------2---2-----2-2----- +A|-----------------2---0-----------------------------0-0--------- +E|--------------------------------------------------------------- + + + +E|-0-----0-------0---------0-----0-----------0-----0---------0--- +B|---------2---2-------2-------2---------2-------2-------2------- +G|-------2---2-----2---------2-------2---------2-----2---------2- +D|---2-----2-----2-------2-------2---------2-------2-------2----- +A|---0-0---------0---0-------------0---0-----------0---0--------- +E|--------------------------------------------------------------- + + + +E|---0-0-0---------0-0-0-5-4-5-2-4-0-2-2-0---2-------0---------0- +B|-2-------2---------------------------------------2-----------2- +G|-----------2-----------------------------------2-------2------- +D|-------------2-------------------------------2---------2---2--- +A|---------------0-------------------------0-----------0---0----- +E|--------------------------------------------------------------- + + + +E|-----0---------0---0-------------0---0-0-0-------0-0-0-0-5-0-4- +B|---2-----------2-2-----------2-----2---2---2-----2------------- +G|-2---------2---2-----------2---2-------2-----2---2------------- +D|-----------2-2---------2---2-----------2-------2-2------------- +A|-------0-0-----------0---0-------------0----------------------- +E|--------------------------------------------------------------- + + + +E|-5-2-4-0-2-2-0-2-------0-----------0-----0-----------0-----0--- +B|---------------------0---------0-------0---------0-------0----- +G|-------------------1---------1-------1---------1-------1------- +D|-----------------0---------0-----0-----------0-----0----------- +A|---------------2---------2---2-------------2-----2-----------2- +E|--------------------------------------------------------------- + + + +E|-----------0-----0-------0-0-------0-------------0---2-0-4-2-2- +B|-------0-------0---------0---0-------0-0-2-0-3-2---3----------- +G|-----1-------1---------1-------1---1--------------------------- +D|-0-------0-----------0-----------0---0------------------------- +A|---2---------------2------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-4---------2-0---------0-----0---------0---0-------------0---0- +B|---------2-------------2---2-----------2-2-----------2-----2--- +G|-------2---------2-------2---------2---2-----------2---2------- +D|-----2-----------2---2-------------2-2---------2---2----------- +A|---0-----------0---0-----------0-0-----------0---0------------- +E|--------------------------------------------------------------- + + + +E|-0-0-------0-0-0-0-5-0-5-2-2-4-5-4-5-0-2-2-0-2-4-4-2-0-0-0-2-0- +B|-2---2-----2--------------------------------------------------- +G|-2-----2---2--------------------------------------------------- +D|-2-------2-2--------------------------------------------------- +A|-0------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-2-2-----0---2-0---------------0-----0-------------------0----- +B|-----3-2---0-------3-------2-2---0-------2-----------1-------1- +G|-------------------------2-------------------2-----2-------2--- +D|-----------------------2---------------2---------2-------2----- +A|-----------------0---0-------------0-------0---0-------0---0--- +E|--------------------------------------------------------------- + + + +E|---0-------0-------0-----0---------------0---0-----------0---0- +B|-------1-------1-------1-------------1-----1-----------1---1--- +G|-----2-------2-------2-----------2-----2-----------2-2--------- +D|-2---------2-----2-----------2-----2-----------2---2----------- +A|---------0---0-------------0---0---------------0-0------------- +E|--------------------------------------------------------------- + + + +E|---------------0-0-0-0-----------------------------0-0-0-0----- +B|-------------0---1-----0-0---------------------0-0---------0-0- +G|---------1-2---------------1-1-------------1-1----------------- +D|-----0-2-----------------------0-0-----0-0--------------------- +A|-0-2-------------------------------2-2------------------------- +E|--------------------------------------------------------------- + + + +E|-----------------------0-0-0---0---------------------0-0------- +B|-------------------1-0-------1-----1-------------1-1----------- +G|-1-1-----------1-2-------------2-2-----------2-----2-----2----- +D|-----0-0---0-2---------------------2-2-----2---2---------2---2- +A|---------0-2---------------------------0-0---------------0-0--- +E|--------------------------------------------------------------- + + + +E|-0-------0---------------0-0---------------0-0-----------0-0-0- +B|-----1-1-------------1-1---------------1-1-------------1-1----- +G|---2-------------2-2---------------2-----2---------2-2--------- +D|-------------2-2-----------------2---2-----------2-2----------- +A|-----------0---0-------------0-0-------------0-0--------------- +E|--------------------------------------------------------------- + + + +E|-0---------------------------0---0-0-----0--------------------- +B|---1---1-----------------1-----1-----1-------1-------------1--- +G|-----2-----2---------2-----2-----------2-------2-----------1-2- +D|---------2---2-----2---2-------------------2-----2-----0-2----- +A|---------------0-0---------------------------------0-2--------- +E|--------------------------------------------------------------- + + + +E|---0-0-0-0-----------------------------0-0-0-0----------------- +B|-0---------0-0---------------------0-0---------0-0------------- +G|---------------1-1-------------1-1-----------------1-1--------- +D|-------------------0-0-----0-0-------------------------0-0-0--- +A|-----------------------2-2---------------------------------2-0- +E|--------------------------------------------------------------- + + + +E|-----------0-0-0---0---------------------0-0-------0-------0--- +B|-------0-1-------1-----1-------------1-1---------------1-1----- +G|---1-2-------------2-2-----------2-----2-----2-------2--------- +D|-2---------------------2-2-----2---2---------2---2------------- +A|---------------------------0-0---------------0-0-------------0- +E|--------------------------------------------------------------- + + + +E|-------------0-0---------------0-0-----------0-0-0-0----------- +B|---------1-1---------------1-1-------------1-1-------1---1----- +G|-----2-2---------------2-----2---------2-2-------------2-----2- +D|-2-2-----------------2---2-----------2-2-------------------2--- +A|---0-------------0-0-------------0-0--------------------------- +E|--------------------------------------------------------------- + + + +E|-----------------0---0-0-----0-----------------------0-0-0-0--- +B|-------------1-----1-----1-------1-------------1---0---------0- +G|---------2-----2-----------2-------2-----------1-2------------- +D|-2-----2---2-------------------2-----2-----0-2----------------- +A|---0-0---------------------------------0-2--------------------- +E|--------------------------------------------------------------- + + + +E|---------------------------0-0-0-0---------------------------0- +B|-0---------------------0-0---------0-0-------------------0-1--- +G|---1-1-------------1-1-----------------1-1-----------1-2------- +D|-------0-0-----0-0-------------------------0-0-0---2----------- +A|-----------2-2---------------------------------2-0------------- +E|--------------------------------------------------------------- + + + +E|-0-0---0---------------------0-0-------0-------0--------------- +B|-----1-----1-------------1-1---------------1-1-------------1-1- +G|-------2-2-----------2-----2-----2-------2-------------2-2----- +D|-----------2-2-----2---2---------2---2-------------2-2--------- +A|---------------0-0---------------0-0-------------0---0--------- +E|--------------------------------------------------------------- + + + +E|-0-0---------------0-0-------------0-0-----0------------------- +B|---------------1-1---------------1-1---------1----------------- +G|-----------2-----2-----------2-2---------------2--------------- +D|---------2---2-----------2-2-------------2--------------------- +A|-----0-0-------------0-0---------------3---0-----3-2-0-3-2-3-2- +E|--------------------------------------------------------------- + + + +E|-----------------------------------------0-------0-----0------- +B|---------------------------------------1---------1---1--------- +G|-------------------------------------2---------2---2---------2- +D|---2-----0-2-2-0-----0---2-0-------2-------2---2---------2---2- +A|-3-0-2-3---------3-2---0-----2-0-3-0-------0-0-----------0-0--- +E|--------------------------------------------------------------- + + + +E|-0-----0-------0-----0-------------0---0---------0---0-0-0----- +B|-1---1---------1---1---------------1-1-----------1-0-------0-0- +G|---2---------2---2-------------2-2-------------2-1------------- +D|---------2-----2-----------2-2---------------2-0--------------- +A|---------0-0-----------0-0---------------0-2------------------- +E|--------------------------------------------------------------- + + + +E|-------------------------0-0-0-0---------------------------0-0- +B|---------------------0-0---------0-0-------------------0-1----- +G|-1-1-------------1-1-----------------1-1-----------1-2--------- +D|-----0-0-----0-0-------------------------0-0-0---2------------- +A|---------2-2---------------------------------2-0--------------- +E|--------------------------------------------------------------- + + + +E|-0---0---------------------0-0-------0-------0---------------0- +B|---1-----1-------------1-1---------------1-1-------------1-1--- +G|-----2-2-----------2-----2-----2-------2-------------2-2------- +D|---------2-2-----2---2---------2---2-------------2-2----------- +A|-------------0-0---------------0-0-------------0---0----------- +E|--------------------------------------------------------------- + + + +E|-0---------------0-0-------------0-0-----0--------------------- +B|-------------1-1---------------1-1---------1------------------- +G|---------2-----2-----------2-2---------------2----------------- +D|-------2---2-----------2-2-------------2----------------------- +A|---0-0-------------0-0---------------3---0-----3-2-0-3-0-3-2-2- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|---------------------------------------------------0-2---2-0-2- +A|-3-0-0-0-2-3-3-3-0-2-0-3-0-3-2-2-3-0-0-0-2-3-2-0-3---2-3------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-2-2-0-2-2-2-3-2-2-0-0-2-3-2-0-2---0-0-2-2-0---0-2-0-2-0-----0- +A|---------------------------------3-----------3-----------3-2--- +E|--------------------------------------------------------------- + + + +E|-----------------0-------0-----0---------0-----0-------0-----0- +B|---------------1---------1---1-----------1---1---------1---1--- +G|-------------2---------2---2-----------2---2---------2---2----- +D|---2-0-----2-------2---2-----------2---2---------2-----2------- +A|-0-----0-3---------0-0-----------2-0-0-----------0-0-0--------- +E|--------------------------------------------------------------- + + + +E|-------------0---0---------0---0-0-0--------------------------- +B|-------------1-1-----------1-0-------0-0---------------------0- +G|---------2-2-------------2-1-------------1-1-------------1-1--- +D|-----2-2---------------2-0-------------------0-0-----0-0------- +A|-0-0---------------0-2---------------------------2-2----------- +E|--------------------------------------------------------------- + + + +E|---0-0-0-0---------------------------0-0-0---0----------------- +B|-0---------0-0-------------------0-1-------1-----1------------- +G|---------------1-1-----------1-2-------------2-2-----------2--- +D|-------------------0-0-0---2---------------------2-2-----2---2- +A|-----------------------2-0---------------------------0-0------- +E|--------------------------------------------------------------- + + + +E|-----0-0-------0-------0---------------0-0---------------0-0--- +B|-1-1---------------1-1-------------1-1---------------1-1------- +G|---2-----2-------2-------------2-2---------------2-----2------- +D|---------2---2-------------2-2-----------------2---2----------- +A|---------0-0-------------0---0-------------0-0-------------0-0- +E|--------------------------------------------------------------- + + + +E|-----------0-0-----0------------------------------------------- +B|---------1-1---------1----------------------------------------- +G|-----2-2---------------2--------------------------------------- +D|-2-2-------------2--------------------------------------------- +A|---------------3---0-----3-2-0-3-0-3-2-2-3-0-0-0-2-3-3-3-0-2-0- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-----------------------------0-2---2-0-2-2-2-0-2-2-2-3-2-2-0-0- +A|-3-0-3-2-2-3-0-0-0-2-3-2-0-3---2-3----------------------------- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------------------0----- +B|-------------------------------------------------------1------- +G|-----------------------------------------------------2--------- +D|-2-3-2-0-2---0-0-2-2-0---0-2-0-2-0-----0---2-0-----2-------2--- +A|-----------3-----------3-----------3-2---0-----0-3---------0-0- +E|--------------------------------------------------------------- + + + +E|---0-----0---------0-----0-------0-----0-------------0---0----- +B|---1---1-----------1---1---------1---1---------------1-1------- +G|-2---2-----------2---2---------2---2-------------2-2----------- +D|-2-----------2---2---------2-----2-----------2-2--------------- +A|-----------2-0-0-----------0-0-0---------0-0---------------0-2- +E|--------------------------------------------------------------- + + + +E|-----0---0-0-0-----------------------------0-0-0-0------------- +B|-----1-0-------0-0---------------------0-0---------0-0--------- +G|---2-1-------------1-1-------------1-1-----------------1-1----- +D|-2-0-------------------0-0-----0-0-------------------------0-0- +A|---------------------------2-2--------------------------------- +E|--------------------------------------------------------------- + + + +E|---------------0-0-0---0---------------------0-0-------0------- +B|-----------0-1-------1-----1-------------1-1---------------1-1- +G|-------1-2-------------2-2-----------2-----2-----2-------2----- +D|-0---2---------------------2-2-----2---2---------2---2--------- +A|-2-0---------------------------0-0---------------0-0----------- +E|--------------------------------------------------------------- + + + +E|-0---------------0-0---------------0-0-------------0-0-----0--- +B|-------------1-1---------------1-1---------------1-1---------1- +G|---------2-2---------------2-----2-----------2-2--------------- +D|-----2-2-----------------2---2-----------2-2-------------2----- +A|---0---0-------------0-0-------------0-0---------------3---0--- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-2------------------------------------------------------------- +D|--------------------------------------------------------------- +A|---3-2-0-3-0-3-2-2-3-0-0-0-2-3-3-3-0-2-0-3-0-3-2-2-3-0-0-0-2-3- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-------0-2---2-0-2-2-2-0-2-2-2-3-2-2-0-0-2-3-2-0-2---0-0-2-2-0- +A|-2-0-3---2-3---------------------------------------3----------- +E|--------------------------------------------------------------- + + + +E|-------------------------------------0-------0---------0------- +B|-----------------------------------1---1-------------0--------- +G|---------------------------------2---------2-------1----------- +D|---0-2-0-2-0---0---2-0---------2-----------2-----2-----------2- +A|-3-----------3---0-----0-0-3-2---------0-2-----2---------2-2--- +E|--------------------------------------------------------------- + + + +E|-------0---0-----------0-----0-------------0---0--------------- +B|-0-------0-------0---------0---------0-------0---------0-----0- +G|---1-1---------------1---1-------------1-1---------1-------1--- +D|-2---------------2-2---------------2-2---------------2-2------- +A|-------------2-2---------------2-2---------------2-------2----- +E|--------------------------------------------------------------- + + + +E|-0-0---------0---0-----------0---0-------0---0-0-0------------- +B|-------0-------0-----------0---0-------0---0-----0-0----------- +G|-----1-------2---------2---2-----------2-1-----------1-1------- +D|-------2-3-----------3---3-----------2-3-----------------2-2--- +A|-----3-----2-------3-3-------------2-----3-------------------2- +E|--------------------------------------------------------------- + + + +E|-------------0---0---------------0---0-------0-----------0----- +B|-----------0---0-------------0-0-----------0-------0---------0- +G|-----1---1---------------1-1-------------1-------------1---1--- +D|-2-2-------------------2-2-------------2-----------2-2--------- +A|-------2-----------2-2-------------2-----------2-2------------- +E|--------------------------------------------------------------- + + + +E|---0-----------0---0-------0-0-0-------------------------0---0- +B|---------0-------0-----0-------0-0---------------------0---0--- +G|-----------1-1-----------1---------1-1-----------1---1--------- +D|-------2-2-------------2---------------2-2---2-2--------------- +A|-2---2---------------2---------------------2-------2----------- +E|--------------------------------------------------------------- + + + +E|-0---------0-----------------0-0-0-0--------------------------- +B|---0-----0---------------0-0---------0---0-------------------0- +G|-----1-1-------------1-2---------------2---2-------------2-2--- +D|-----2---2-------3-2-------------------------3-3---3-3--------- +A|-------------2-3---------------------------------3-----3------- +E|--------------------------------------------------------------- + + + +E|---0-0-0-0---------------0-----------0-0-0--------------------- +B|-0---------0---0---------0---------0-----0-0------------------- +G|-------------2---2-------2-------1-----------1-1-----------1--- +D|-------------------3-3-----2-3-------------------2-2---2-2----- +A|-----------------------2-------3---------------------2-------2- +E|--------------------------------------------------------------- + + + +E|-----0---0---------------0---0-------0-----------0-------0----- +B|---0---0-------------0-0-----------0-------0---------0--------- +G|-1---------------1-1-------------1-------------1---1----------- +D|---------------2-2-------------2-----------2-2---------------2- +A|-----------2-2-------------2-----------2-2-------------2---2--- +E|--------------------------------------------------------------- + + + +E|-------0---0-------0-0-0-------------------------0---0-0------- +B|-0-------0-----0-------0-0---------------------0---0-----0----- +G|---1-1-----------1---------1-1-----------1---1-------------1-1- +D|-2-------------2---------------2-2---2-2-------------------2--- +A|-------------2---------------------2-------2------------------- +E|--------------------------------------------------------------- + + + +E|---0-----------------0-0-0-0-----------------------------0-0-0- +B|-0---------------0-0---------0---0-------------------0-0------- +G|-------------1-2---------------2---2-------------2-2----------- +D|-2-------3-2-------------------------3-3---3-3----------------- +A|-----2-3---------------------------------3-----3--------------- +E|--------------------------------------------------------------- + + + +E|-0---------------0---------0---0-0-------------------------0--- +B|---0---0---------0-------0-------0-0---------------------0---0- +G|-----2---2-------2-----1-------------1-1-----------1---1------- +D|-----------3-3-----2---------3-----------2-2---2-2------------- +A|---------------2-----3-----------------------2-------2--------- +E|--------------------------------------------------------------- + + + +E|-0---------------0---0-------0-----------0-------0-----------0- +B|-------------0-0-----------0-------0---------0---------0------- +G|---------1-1-------------1-------------1---1-------------1-1--- +D|-------2-2-------------2-----------2-2---------------2-2------- +A|---2-2-------------2-----------2-2-------------2---2----------- +E|--------------------------------------------------------------- + + + +E|---0-------0-0------------------------------------------------- +B|-0-----0---------0--------------------------------------------- +G|---------1-------1--------------------------------------------- +D|-------2-----------2------------------------------------------- +A|-----2---------0-2---2-3-2-0-0-2-2-0-3---2-0-2---0-0---2-3-0-0- +E|---------------------------------------3---1---3---3-1---3----- + + + +E|---------0-------------------0---0-----------------0---0------- +B|-----------0---------------0---0---------------0-0-----------0- +G|-------------1---------1-1-----------------1-1-------------1--- +D|---------------2---2-2-------------------2-2-------------2----- +A|-2-3---0---------2-----------------2-2---------------2--------- +E|-3---1-0-----------3-------------------1----------------------- + + + +E|-0-----------0-------0-----------0---0-------0-0-0------------- +B|-------0---------0---------0-------0-----0-------0-0----------- +G|-----------1---1-------------1-1-----------1---------1-1------- +D|-------2-2---------------2-2-------------2---------------2-2--- +A|---2-2-------------2---2---------------2----------------------- +E|-------------------------------------------------------------0- + + + +E|---------------0---0-0---------0-----------------0-0-0-0------- +B|-------------0---0-----0-----0---------------0-0---------0---0- +G|-------1---1-------------1-1-------------1-2---------------2--- +D|---2-2-------------------2---2-------3-2----------------------- +A|-2-------2-----------------------2-3--------------------------- +E|--------------------------------------------------------------- + + + +E|-----------------------0-0-0-0---------------0---------0---0-0- +B|-------------------0-0---------0---0---------0-------0-------0- +G|-2-------------2-2---------------2---2-------2-----1----------- +D|---3-3---3-3---------------------------3-3-----2---------3----- +A|-------3-----3-----------------------------2-----3------------- +E|--------------------------------------------------------------- + + + +E|-------------------------0---0---------------0---0-------0----- +B|-0---------------------0---0-------------0-0-----------0------- +G|---1-1-----------1---1---------------1-1-------------1--------- +D|-------2-2---2-2-------------------2-2-------------2----------- +A|-----------2-------2-----------2-2-------------2-----------2-2- +E|--------------------------------------------------------------- + + + +E|-------0-------0-----------0---0-------0-0--------------------- +B|-0---------0---------0-------0-----0---------0----------------- +G|-----1---1-------------1-1-----------1-------1----------------- +D|-2-2---------------2-2-------------2-------2---2-2-0-2-2-0-2--- +A|-------------2---2---------------2-----------2---------------3- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|---0-2-0-0-----0-2-0-0---2-0-0-2---0-2-0---0-----0-0-------0--- +A|-2-------3-2-4---------4-------3-2-------3---4-2-----4-2-0---2- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|-0-2---0-0-2-0-2---3-2-0-0-2-3-2---0-----0---2---3-0-0---2---3- +E|-----4-----------4---------------3---1-3---3-1-3-------3---1--- + + + +E|---------------0---------0-----------0-------0-----------0---0- +B|-------------0---------0-------0---------0---------0-------0--- +G|-----------1---------1-------------1---1-------------1-1------- +D|---------2---------2-----------2-2---------------2-2----------- +A|---0-2-----------2---------2-2-------------2---2--------------- +E|-0-----3---------------------------------------1--------------- + + + +E|-------0-------------0-0-0-----------0---------------0---0-0--- +B|---0-----0---------0-------0-------0---------------0---0-----0- +G|-----1-----1-----1-----------1-1-------------1-1--------------- +D|---2---------2-2---------------2-2-------2-2------------------- +A|-2---------2-----2---------------------2---------2------------- +E|-----------0--------------------------------------------------- + + + +E|-------0-------------0-0---0-0-----------------------------0-0- +B|-----0-------------0-----0-----0---0-------------------0-0----- +G|-1-1-------------2-1-------------2---2-------------2-2--------- +D|-2---2-------3-2-----------------------3-3---3-3--------------- +A|---------3-2-------------------------------3-----3------------- +E|--------------------------------------------------------------- + + + +E|-0-0---------------0---------0---0-0-------------------------0- +B|-----0---0---------0-------0-------0-0---------------------0--- +G|-------2---2-------2-----1-------------1-1-----------1---1----- +D|-------------3-3-----2---------3-----------2-2---2-2----------- +A|-----------------2-----3-----------------------2-------2------- +E|--------------------------------------------------------------- + + + +E|---0---------------0---0-------0-----------0-------0----------- +B|-0-------------0-0-----------0-------0---------0---------0----- +G|-----------1-1-------------1-------------1---1-------------1-1- +D|---------2-2-------------2-----------2-2---------------2-2----- +A|-----2-2-------------2-----------2-2-------------2---2--------- +E|--------------------------------------------------------------- + + + +E|-0---0-------0-0----------------------------------------------- +B|---0-----0---------0------------------------------------------- +G|-----------1-------1------------------------------------------- +D|---------2-------2---2-2-2-2-2-0-2-0-2-----0-2-0-0-----0-2-0-0- +A|-------2-----------2-------------------3-2-------3-2-4--------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|---2-0-0-2---0-2-0---0-----0-0-------0------------------------- +A|-4-------3-2-------3---4-2-----4-2-0---2-0-2---0-0-2-0-2---3-2- +E|---------------------------------------------4-----------4----- + + + +E|-------------------------------------------------------0------- +B|-----------------------------------------------------0--------- +G|---------------------------------------------------1---------1- +D|-------------------------------------------------2---------2--- +A|-0-0-2-3-2---0-----0---2---3-0-0---2---3---0-2-----------2----- +E|-----------3---1-3---3-1-3-------3---1---0-----3--------------- + + + +E|---0-----------0-------0-----------0---0-------0-------------0- +B|-0-------0---------0---------0-------0-----0-----0---------0--- +G|-------------1---1-------------1-1-----------1-----1-----1----- +D|---------2-2---------------2-2-------------2---------2-2------- +A|-----2-2-------------2---2---------------2---------2-----2----- +E|-------------------------1-------------------------0----------- + + + +E|-0-0-----------0---------------0---0-0---------0-------------0- +B|-----0-------0---------------0---0-----0-----0-------------0--- +G|-------1-1-------------1-1---------------1-1-------------2-1--- +D|---------2-2-------2-2-------------------2---2-------3-2------- +A|-----------------2---------2---------------------3-2----------- +E|--------------------------------------------------------------- + + + +E|-0---0-0-----------------------------0-0-0-0---------------0--- +B|---0-----0---0-------------------0-0---------0---0---------0--- +G|-----------2---2-------------2-2---------------2---2-------2--- +D|-----------------3-3---3-3---------------------------3-3-----2- +A|---------------------3-----3-----------------------------2----- +E|--------------------------------------------------------------- + + + +E|-------0---0-0-------------------------0---0---------------0--- +B|-----0-------0-0---------------------0---0-------------0-0----- +G|---1-------------1-1-----------1---1---------------1-1--------- +D|---------3-----------2-2---2-2-------------------2-2----------- +A|-3-----------------------2-------2-----------2-2-------------2- +E|--------------------------------------------------------------- + + + +E|-0-------0-----------0-------0-----------0---0-------0-0------- +B|-------0-------0---------0---------0-------0-----0---------0--- +G|-----1-------------1---1-------------1-1-----------1-------1--- +D|---2-----------2-2---------------2-2-------------2-------2---2- +A|-----------2-2-------------2---2---------------2-----------2--- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-2-2-2-2-0-2-0-2-----0-2-0-0-----0-2-0-0---2-0-0-2---0-2-0---0- +A|-----------------3-2-------3-2-4---------4-------3-2-------3--- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-----0-0-------0----------------------------------------------- +A|-4-2-----4-2-0---2-0-2---0-0-2-0-2---3-2-0-0-2-3-2---0-----0--- +E|-----------------------4-----------4---------------3---1-3---3- + + + +E|---------------------------------0-----------------0- +B|-------------------------------0---------------0-0--- +G|-----------------------------1-------------1---1----- +D|---------------------------2-------------2---2------- +A|-2---3-0-0---2---3---0-2-------------2-2------------- +E|-1-3-------3---1---0-----3---------1---0------------- + diff --git a/guitar/midi/solear_1.mid b/guitar/midi/solear_1.mid new file mode 100644 index 0000000..4167392 Binary files /dev/null and b/guitar/midi/solear_1.mid differ diff --git a/guitar/midi/takeonme.mid b/guitar/midi/takeonme.mid new file mode 100644 index 0000000..70bbeda Binary files /dev/null and b/guitar/midi/takeonme.mid differ diff --git a/guitar/midi/takeonmeTRK3.prj b/guitar/midi/takeonmeTRK3.prj new file mode 100644 index 0000000..0f62673 --- /dev/null +++ b/guitar/midi/takeonmeTRK3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\takeonmeTRK3_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4) diff --git a/guitar/midi/takeonmeTRK3.tab b/guitar/midi/takeonmeTRK3.tab new file mode 100644 index 0000000..6190d38 --- /dev/null +++ b/guitar/midi/takeonmeTRK3.tab @@ -0,0 +1,19 @@ +%TabMaster v1.05r% + + +E|-2-9-10-14-21-9-5-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-14-12-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-14-12-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-12-5-4-2-5-4-2-5-4-2-2-5-4-2-5-4-2-5-4-2-2-12-10-12-10-14-14-10-7-7- +B|-3-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3-3-----------------3-3------------------------------------------ +G|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +D|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + +E|-12-12-12-16-16-17-19-14-14-10-7-7-12-12-12-16-16-17-19-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-14-12-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-12-5-4-2-5-4-2-5-4-2-2- +B|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3-3----------------- +G|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +D|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + diff --git a/guitar/midi/takeonmeTRK3_imp.tab b/guitar/midi/takeonmeTRK3_imp.tab new file mode 100644 index 0000000..f22bc34 --- /dev/null +++ b/guitar/midi/takeonmeTRK3_imp.tab @@ -0,0 +1,55 @@ +%TabMaster v1.05r% + + +E|-2-9-10-14-21-9-5-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-14-12- +B|-3-------------------------------------------------------------------------------------- +G|---------------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-14-12-14-14-10-7-7-12-12- +B|------------------------------------------------------------------------------------------ +G|------------------------------------------------------------------------------------------ +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-12-5-4-2-5-4-2-5-4-2-2-5-4-2-5-4- +B|-------------------------------------------------3-3-----------------3-3------- +G|------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------- + + + +E|-2-5-4-2-2-12-10-12-10-14-14-10-7-7-12-12-12-16-16-17-19-14-14-10-7-7-12-12-12-16-16- +B|------------------------------------------------------------------------------------- +G|------------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|-17-19-14-14-10-7-7-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-14-12-14-14-10-7-7- +B|------------------------------------------------------------------------------------------ +G|------------------------------------------------------------------------------------------ +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|-12-12-12-16-16-17-19-17-17-17-12-10-14-14-14-12-12-12-5-4-2-5-4-2-5-4-2-2- +B|-------------------------------------------------------3-3----------------- +G|--------------------------------------------------------------------------- +D|--------------------------------------------------------------------------- +A|--------------------------------------------------------------------------- +E|--------------------------------------------------------------------------- + diff --git a/guitar/midi/tientos.mid b/guitar/midi/tientos.mid new file mode 100644 index 0000000..316b249 Binary files /dev/null and b/guitar/midi/tientos.mid differ diff --git a/guitar/midi/tremfals.mid b/guitar/midi/tremfals.mid new file mode 100644 index 0000000..68bfcae Binary files /dev/null and b/guitar/midi/tremfals.mid differ diff --git a/guitar/midi/zapatead.mid b/guitar/midi/zapatead.mid new file mode 100644 index 0000000..909d184 Binary files /dev/null and b/guitar/midi/zapatead.mid differ diff --git a/guitar/midi/zapateadTRK2.prj b/guitar/midi/zapateadTRK2.prj new file mode 100644 index 0000000..1ad298f --- /dev/null +++ b/guitar/midi/zapateadTRK2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\midi\zapateadTRK2_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4)(891,4)(892,4)(893,4)(894,4)(895,4)(896,4)(897,4)(898,4)(899,4)(900,4)(901,4)(902,4)(903,4)(904,4)(905,4)(906,4)(907,4)(908,4)(909,4)(910,4)(911,4)(912,4)(913,4)(914,4)(915,4)(916,4)(917,4)(918,4)(919,4)(920,4)(921,4)(922,4)(923,4)(924,4)(925,4)(926,4)(927,4)(928,4)(929,4)(930,4)(931,4)(932,4)(933,4)(934,4)(935,4)(936,4)(937,4)(938,4)(939,4)(940,4)(941,4)(942,4)(943,4)(944,4)(945,4)(946,4)(947,4)(948,4)(949,4)(950,4)(951,4)(952,4)(953,4)(954,4)(955,4)(956,4)(957,4)(958,4)(959,4)(960,4)(961,4)(962,4)(963,4)(964,4)(965,4)(966,4)(967,4)(968,4)(969,4)(970,4)(971,4)(972,4)(973,4)(974,4)(975,4)(976,4)(977,4)(978,4)(979,4)(980,4)(981,4)(982,4)(983,4)(984,4)(985,4)(986,4)(987,4)(988,4)(989,4)(990,4)(991,4)(992,4)(993,4)(994,4)(995,4)(996,4)(997,4)(998,4)(999,4)(1000,4)(1001,4)(1002,4)(1003,4)(1004,4)(1005,4)(1006,4)(1007,4)(1008,4)(1009,4)(1010,4)(1011,4)(1012,4)(1013,4)(1014,4)(1015,4)(1016,4)(1017,4)(1018,4)(1019,4)(1020,4)(1021,4)(1022,4)(1023,4)(1024,4)(1025,4)(1026,4)(1027,4)(1028,4)(1029,4)(1030,4)(1031,4)(1032,4)(1033,4)(1034,4)(1035,4)(1036,4)(1037,4)(1038,4)(1039,4)(1040,4)(1041,4)(1042,4)(1043,4)(1044,4)(1045,4)(1046,4)(1047,4)(1048,4)(1049,4)(1050,4)(1051,4)(1052,4)(1053,4)(1054,4)(1055,4)(1056,4)(1057,4)(1058,4)(1059,4)(1060,4)(1061,4)(1062,4)(1063,4)(1064,4)(1065,4)(1066,4)(1067,4)(1068,4)(1069,4)(1070,4)(1071,4)(1072,4)(1073,4)(1074,4)(1075,4)(1076,4)(1077,4)(1078,4)(1079,4)(1080,4)(1081,4)(1082,4)(1083,4)(1084,4)(1085,4)(1086,4)(1087,4)(1088,4)(1089,4)(1090,4)(1091,4)(1092,4)(1093,4)(1094,4)(1095,4)(1096,4)(1097,4)(1098,4)(1099,4)(1100,4)(1101,4)(1102,4)(1103,4)(1104,4)(1105,4)(1106,4)(1107,4)(1108,4)(1109,4)(1110,4)(1111,4)(1112,4)(1113,4)(1114,4)(1115,4)(1116,4)(1117,4)(1118,4)(1119,4)(1120,4)(1121,4)(1122,4)(1123,4)(1124,4)(1125,4)(1126,4)(1127,4)(1128,4)(1129,4)(1130,4)(1131,4)(1132,4)(1133,4)(1134,4)(1135,4)(1136,4)(1137,4)(1138,4)(1139,4)(1140,4)(1141,4)(1142,4)(1143,4)(1144,4)(1145,4)(1146,4)(1147,4)(1148,4)(1149,4)(1150,4)(1151,4)(1152,4)(1153,4)(1154,4)(1155,4)(1156,4)(1157,4)(1158,4)(1159,4)(1160,4)(1161,4)(1162,4)(1163,4)(1164,4)(1165,4)(1166,4)(1167,4)(1168,4)(1169,4)(1170,4)(1171,4)(1172,4)(1173,4)(1174,4)(1175,4)(1176,4)(1177,4)(1178,4)(1179,4)(1180,4)(1181,4)(1182,4)(1183,4)(1184,4)(1185,4)(1186,4)(1187,4)(1188,4)(1189,4)(1190,4)(1191,4)(1192,4)(1193,4)(1194,4)(1195,4)(1196,4)(1197,4)(1198,4)(1199,4)(1200,4)(1201,4)(1202,4)(1203,4)(1204,4)(1205,4)(1206,4)(1207,4)(1208,4)(1209,4)(1210,4)(1211,4)(1212,4)(1213,4)(1214,4)(1215,4)(1216,4)(1217,4)(1218,4)(1219,4)(1220,4)(1221,4)(1222,4)(1223,4)(1224,4)(1225,4)(1226,4)(1227,4)(1228,4)(1229,4)(1230,4)(1231,4)(1232,4)(1233,4)(1234,4)(1235,4)(1236,4)(1237,4)(1238,4)(1239,4)(1240,4)(1241,4)(1242,4)(1243,4)(1244,4)(1245,4)(1246,4)(1247,4)(1248,4)(1249,4)(1250,4)(1251,4)(1252,4)(1253,4)(1254,4)(1255,4)(1256,4)(1257,4)(1258,4)(1259,4)(1260,4)(1261,4)(1262,4)(1263,4)(1264,4)(1265,4)(1266,4)(1267,4)(1268,4)(1269,4)(1270,4)(1271,4)(1272,4)(1273,4)(1274,4)(1275,4)(1276,4)(1277,4)(1278,4)(1279,4)(1280,4)(1281,4)(1282,4)(1283,4)(1284,4)(1285,4)(1286,4)(1287,4)(1288,4)(1289,4)(1290,4)(1291,4)(1292,4)(1293,4)(1294,4)(1295,4)(1296,4)(1297,4)(1298,4)(1299,4)(1300,4)(1301,4)(1302,4)(1303,4)(1304,4)(1305,4)(1306,4)(1307,4)(1308,4)(1309,4)(1310,4)(1311,4)(1312,4)(1313,4)(1314,4)(1315,4)(1316,4)(1317,4)(1318,4)(1319,4)(1320,4)(1321,4)(1322,4)(1323,4)(1324,4)(1325,4)(1326,4)(1327,4)(1328,4)(1329,4)(1330,4)(1331,4)(1332,4)(1333,4)(1334,4)(1335,4)(1336,4)(1337,4)(1338,4)(1339,4)(1340,4)(1341,4)(1342,4)(1343,4)(1344,4)(1345,4)(1346,4)(1347,4)(1348,4)(1349,4)(1350,4)(1351,4)(1352,4)(1353,4)(1354,4)(1355,4)(1356,4)(1357,4)(1358,4)(1359,4)(1360,4)(1361,4)(1362,4)(1363,4)(1364,4)(1365,4)(1366,4)(1367,4)(1368,4)(1369,4)(1370,4)(1371,4)(1372,4)(1373,4)(1374,4)(1375,4)(1376,4)(1377,4)(1378,4)(1379,4)(1380,4)(1381,4)(1382,4)(1383,4)(1384,4)(1385,4)(1386,4)(1387,4)(1388,4)(1389,4)(1390,4)(1391,4)(1392,4)(1393,4)(1394,4)(1395,4)(1396,4)(1397,4)(1398,4)(1399,4)(1400,4)(1401,4)(1402,4)(1403,4)(1404,4)(1405,4)(1406,4)(1407,4)(1408,4)(1409,4)(1410,4)(1411,4)(1412,4)(1413,4)(1414,4)(1415,4)(1416,4)(1417,4)(1418,4)(1419,4)(1420,4)(1421,4)(1422,4)(1423,4)(1424,4)(1425,4)(1426,4)(1427,4)(1428,4)(1429,4)(1430,4)(1431,4)(1432,4)(1433,4)(1434,4)(1435,4)(1436,4)(1437,4)(1438,4)(1439,4)(1440,4)(1441,4)(1442,4)(1443,4)(1444,4)(1445,4)(1446,4)(1447,4)(1448,4)(1449,4)(1450,4)(1451,4)(1452,4)(1453,4)(1454,4)(1455,4)(1456,4)(1457,4)(1458,4)(1459,4)(1460,4)(1461,4)(1462,4)(1463,4)(1464,4)(1465,4)(1466,4)(1467,4)(1468,4)(1469,4)(1470,4)(1471,4)(1472,4)(1473,4)(1474,4)(1475,4)(1476,4)(1477,4)(1478,4)(1479,4)(1480,4)(1481,4)(1482,4)(1483,4)(1484,4)(1485,4)(1486,4)(1487,4)(1488,4)(1489,4)(1490,4)(1491,4)(1492,4)(1493,4)(1494,4)(1495,4)(1496,4)(1497,4)(1498,4)(1499,4)(1500,4)(1501,4)(1502,4)(1503,4)(1504,4)(1505,4)(1506,4)(1507,4)(1508,4)(1509,4)(1510,4)(1511,4)(1512,4)(1513,4)(1514,4)(1515,4)(1516,4)(1517,4)(1518,4)(1519,4)(1520,4)(1521,4)(1522,4)(1523,4)(1524,4)(1525,4)(1526,4)(1527,4)(1528,4)(1529,4)(1530,4)(1531,4)(1532,4)(1533,4)(1534,4)(1535,4)(1536,4)(1537,4)(1538,4)(1539,4)(1540,4)(1541,4)(1542,4)(1543,4)(1544,4)(1545,4)(1546,4)(1547,4)(1548,4)(1549,4)(1550,4)(1551,4)(1552,4)(1553,4)(1554,4)(1555,4)(1556,4)(1557,4)(1558,4)(1559,4)(1560,4)(1561,4)(1562,4)(1563,4)(1564,4)(1565,4)(1566,4)(1567,4)(1568,4)(1569,4)(1570,4)(1571,4)(1572,4)(1573,4)(1574,4)(1575,4)(1576,4)(1577,4)(1578,4)(1579,4)(1580,4)(1581,4)(1582,4)(1583,4)(1584,4)(1585,4)(1586,4)(1587,4)(1588,4)(1589,4)(1590,4)(1591,4)(1592,4)(1593,4)(1594,4)(1595,4)(1596,4)(1597,4)(1598,4)(1599,4)(1600,4)(1601,4)(1602,4)(1603,4)(1604,4)(1605,4)(1606,4)(1607,4)(1608,4)(1609,4)(1610,4)(1611,4)(1612,4)(1613,4)(1614,4)(1615,4)(1616,4)(1617,4)(1618,4)(1619,4)(1620,4)(1621,4)(1622,4)(1623,4)(1624,4)(1625,4)(1626,4)(1627,4)(1628,4)(1629,4)(1630,4)(1631,4)(1632,4)(1633,4)(1634,4)(1635,4)(1636,4)(1637,4)(1638,4)(1639,4)(1640,4)(1641,4)(1642,4)(1643,4)(1644,4)(1645,4)(1646,4)(1647,4)(1648,4)(1649,4)(1650,4)(1651,4)(1652,4)(1653,4)(1654,4)(1655,4)(1656,4)(1657,4)(1658,4)(1659,4)(1660,4)(1661,4)(1662,4)(1663,4)(1664,4)(1665,4)(1666,4)(1667,4)(1668,4)(1669,4)(1670,4)(1671,4)(1672,4)(1673,4)(1674,4)(1675,4)(1676,4)(1677,4)(1678,4)(1679,4)(1680,4)(1681,4)(1682,4)(1683,4)(1684,4)(1685,4)(1686,4)(1687,4)(1688,4)(1689,4)(1690,4)(1691,4)(1692,4)(1693,4)(1694,4)(1695,4)(1696,4)(1697,4)(1698,4)(1699,4)(1700,4)(1701,4)(1702,4)(1703,4)(1704,4)(1705,4)(1706,4)(1707,4)(1708,4)(1709,4)(1710,4)(1711,4)(1712,4)(1713,4)(1714,4)(1715,4)(1716,4)(1717,4)(1718,4)(1719,4)(1720,4)(1721,4)(1722,4)(1723,4)(1724,4)(1725,4)(1726,4)(1727,4)(1728,4)(1729,4)(1730,4)(1731,4)(1732,4)(1733,4)(1734,4)(1735,4)(1736,4)(1737,4)(1738,4)(1739,4)(1740,4)(1741,4)(1742,4)(1743,4)(1744,4)(1745,4)(1746,4)(1747,4)(1748,4)(1749,4)(1750,4)(1751,4)(1752,4)(1753,4)(1754,4)(1755,4)(1756,4)(1757,4)(1758,4)(1759,4)(1760,4)(1761,4)(1762,4)(1763,4)(1764,4)(1765,4)(1766,4)(1767,4)(1768,4)(1769,4)(1770,4)(1771,4)(1772,4)(1773,4)(1774,4)(1775,4)(1776,4)(1777,4)(1778,4)(1779,4)(1780,4)(1781,4)(1782,4)(1783,4)(1784,4)(1785,4)(1786,4)(1787,4)(1788,4)(1789,4)(1790,4)(1791,4)(1792,4)(1793,4)(1794,4)(1795,4)(1796,4)(1797,4)(1798,4)(1799,4)(1800,4)(1801,4)(1802,4)(1803,4)(1804,4)(1805,4)(1806,4)(1807,4)(1808,4)(1809,4)(1810,4)(1811,4)(1812,4)(1813,4)(1814,4)(1815,4)(1816,4)(1817,4)(1818,4)(1819,4)(1820,4)(1821,4)(1822,4)(1823,4)(1824,4)(1825,4)(1826,4)(1827,4)(1828,4)(1829,4)(1830,4)(1831,4)(1832,4)(1833,4)(1834,4)(1835,4)(1836,4)(1837,4)(1838,4)(1839,4)(1840,4)(1841,4)(1842,4)(1843,4)(1844,4)(1845,4)(1846,4)(1847,4)(1848,4)(1849,4)(1850,4)(1851,4)(1852,4)(1853,4)(1854,4)(1855,4)(1856,4)(1857,4)(1858,4)(1859,4)(1860,4)(1861,4)(1862,4)(1863,4)(1864,4)(1865,4)(1866,4)(1867,4)(1868,4)(1869,4)(1870,4)(1871,4)(1872,4)(1873,4)(1874,4)(1875,4)(1876,4)(1877,4)(1878,4)(1879,4)(1880,4)(1881,4)(1882,4)(1883,4)(1884,4)(1885,4)(1886,4)(1887,4)(1888,4)(1889,4)(1890,4)(1891,4)(1892,4)(1893,4)(1894,4)(1895,4)(1896,4)(1897,4)(1898,4)(1899,4)(1900,4)(1901,4)(1902,4)(1903,4)(1904,4)(1905,4)(1906,4)(1907,4)(1908,4)(1909,4)(1910,4)(1911,4)(1912,4)(1913,4)(1914,4)(1915,4)(1916,4)(1917,4)(1918,4)(1919,4)(1920,4)(1921,4)(1922,4)(1923,4)(1924,4)(1925,4)(1926,4)(1927,4)(1928,4)(1929,4)(1930,4)(1931,4)(1932,4)(1933,4)(1934,4)(1935,4)(1936,4)(1937,4)(1938,4)(1939,4)(1940,4)(1941,4)(1942,4)(1943,4)(1944,4)(1945,4)(1946,4)(1947,4)(1948,4)(1949,4)(1950,4)(1951,4)(1952,4)(1953,4)(1954,4)(1955,4)(1956,4)(1957,4)(1958,4)(1959,4)(1960,4)(1961,4)(1962,4)(1963,4)(1964,4)(1965,4)(1966,4)(1967,4)(1968,4)(1969,4)(1970,4)(1971,4)(1972,4)(1973,4)(1974,4)(1975,4)(1976,4)(1977,4)(1978,4)(1979,4)(1980,4)(1981,4)(1982,4)(1983,4)(1984,4)(1985,4)(1986,4)(1987,4)(1988,4)(1989,4)(1990,4)(1991,4)(1992,4)(1993,4)(1994,4)(1995,4)(1996,4)(1997,4)(1998,4)(1999,4)(2000,4)(2001,4)(2002,4)(2003,4)(2004,4)(2005,4)(2006,4)(2007,4)(2008,4)(2009,4)(2010,4)(2011,4)(2012,4)(2013,4)(2014,4)(2015,4)(2016,4)(2017,4)(2018,4)(2019,4)(2020,4)(2021,4)(2022,4)(2023,4)(2024,4)(2025,4)(2026,4)(2027,4)(2028,4)(2029,4)(2030,4)(2031,4)(2032,4)(2033,4)(2034,4)(2035,4)(2036,4)(2037,4)(2038,4)(2039,4)(2040,4)(2041,4)(2042,4)(2043,4)(2044,4)(2045,4)(2046,4)(2047,4)(2048,4)(2049,4)(2050,4)(2051,4)(2052,4)(2053,4)(2054,4)(2055,4)(2056,4)(2057,4)(2058,4)(2059,4)(2060,4)(2061,4)(2062,4)(2063,4)(2064,4)(2065,4)(2066,4)(2067,4)(2068,4)(2069,4)(2070,4)(2071,4)(2072,4)(2073,4)(2074,4)(2075,4)(2076,4)(2077,4)(2078,4)(2079,4)(2080,4)(2081,4)(2082,4)(2083,4)(2084,4)(2085,4)(2086,4)(2087,4)(2088,4)(2089,4)(2090,4)(2091,4)(2092,4)(2093,4)(2094,4)(2095,4)(2096,4)(2097,4)(2098,4)(2099,4)(2100,4)(2101,4)(2102,4)(2103,4)(2104,4)(2105,4)(2106,4)(2107,4)(2108,4)(2109,4)(2110,4)(2111,4)(2112,4)(2113,4)(2114,4)(2115,4)(2116,4)(2117,4)(2118,4)(2119,4)(2120,4)(2121,4)(2122,4)(2123,4)(2124,4)(2125,4)(2126,4)(2127,4)(2128,4)(2129,4)(2130,4)(2131,4)(2132,4)(2133,4)(2134,4)(2135,4)(2136,4)(2137,4)(2138,4)(2139,4)(2140,4)(2141,4)(2142,4)(2143,4)(2144,4)(2145,4)(2146,4)(2147,4)(2148,4)(2149,4)(2150,4)(2151,4)(2152,4)(2153,4)(2154,4)(2155,4)(2156,4)(2157,4)(2158,4)(2159,4)(2160,4)(2161,4)(2162,4)(2163,4)(2164,4)(2165,4)(2166,4)(2167,4)(2168,4)(2169,4)(2170,4)(2171,4)(2172,4)(2173,4)(2174,4)(2175,4)(2176,4)(2177,4)(2178,4)(2179,4)(2180,4)(2181,4)(2182,4)(2183,4)(2184,4)(2185,4)(2186,4)(2187,4)(2188,4)(2189,4)(2190,4)(2191,4)(2192,4)(2193,4)(2194,4)(2195,4)(2196,4)(2197,4)(2198,4)(2199,4)(2200,4)(2201,4)(2202,4)(2203,4)(2204,4)(2205,4)(2206,4)(2207,4)(2208,4)(2209,4)(2210,4)(2211,4)(2212,4)(2213,4)(2214,4)(2215,4)(2216,4)(2217,4)(2218,4)(2219,4)(2220,4)(2221,4)(2222,4)(2223,4)(2224,4)(2225,4)(2226,4)(2227,4)(2228,4)(2229,4)(2230,4)(2231,4)(2232,4)(2233,4)(2234,4)(2235,4)(2236,4)(2237,4)(2238,4)(2239,4)(2240,4)(2241,4)(2242,4)(2243,4)(2244,4)(2245,4)(2246,4)(2247,4)(2248,4)(2249,4)(2250,4)(2251,4)(2252,4)(2253,4)(2254,4)(2255,4)(2256,4)(2257,4)(2258,4)(2259,4)(2260,4)(2261,4)(2262,4)(2263,4)(2264,4)(2265,4)(2266,4)(2267,4)(2268,4)(2269,4)(2270,4)(2271,4)(2272,4)(2273,4)(2274,4)(2275,4)(2276,4)(2277,4)(2278,4)(2279,4)(2280,4)(2281,4)(2282,4)(2283,4)(2284,4)(2285,4)(2286,4)(2287,4)(2288,4)(2289,4)(2290,4)(2291,4)(2292,4)(2293,4)(2294,4)(2295,4)(2296,4)(2297,4)(2298,4)(2299,4)(2300,4)(2301,4)(2302,4)(2303,4)(2304,4)(2305,4)(2306,4)(2307,4)(2308,4)(2309,4)(2310,4)(2311,4)(2312,4)(2313,4)(2314,4)(2315,4)(2316,4)(2317,4)(2318,4)(2319,4)(2320,4)(2321,4)(2322,4)(2323,4)(2324,4)(2325,4)(2326,4)(2327,4)(2328,4)(2329,4)(2330,4)(2331,4)(2332,4)(2333,4)(2334,4)(2335,4)(2336,4)(2337,4)(2338,4)(2339,4)(2340,4)(2341,4)(2342,4)(2343,4)(2344,4)(2345,4)(2346,4)(2347,4)(2348,4)(2349,4)(2350,4)(2351,4)(2352,4)(2353,4)(2354,4)(2355,4)(2356,4)(2357,4)(2358,4)(2359,4)(2360,4)(2361,4)(2362,4)(2363,4)(2364,4)(2365,4)(2366,4)(2367,4)(2368,4)(2369,4)(2370,4)(2371,4)(2372,4)(2373,4)(2374,4)(2375,4)(2376,4)(2377,4)(2378,4)(2379,4)(2380,4)(2381,4)(2382,4)(2383,4)(2384,4)(2385,4)(2386,4)(2387,4)(2388,4)(2389,4)(2390,4)(2391,4)(2392,4)(2393,4)(2394,4)(2395,4)(2396,4)(2397,4)(2398,4)(2399,4)(2400,4)(2401,4)(2402,4)(2403,4)(2404,4)(2405,4)(2406,4)(2407,4)(2408,4)(2409,4)(2410,4)(2411,4)(2412,4)(2413,4)(2414,4)(2415,4)(2416,4)(2417,4)(2418,4)(2419,4)(2420,4)(2421,4)(2422,4)(2423,4)(2424,4)(2425,4)(2426,4)(2427,4)(2428,4)(2429,4)(2430,4)(2431,4)(2432,4)(2433,4)(2434,4)(2435,4)(2436,4)(2437,4)(2438,4)(2439,4)(2440,4)(2441,4)(2442,4)(2443,4)(2444,4)(2445,4)(2446,4)(2447,4)(2448,4)(2449,4)(2450,4)(2451,4)(2452,4)(2453,4)(2454,4)(2455,4)(2456,4)(2457,4)(2458,4)(2459,4)(2460,4)(2461,4)(2462,4)(2463,4)(2464,4)(2465,4)(2466,4)(2467,4)(2468,4)(2469,4)(2470,4)(2471,4)(2472,4)(2473,4)(2474,4)(2475,4)(2476,4)(2477,4)(2478,4)(2479,4)(2480,4)(2481,4)(2482,4)(2483,4)(2484,4)(2485,4)(2486,4)(2487,4)(2488,4)(2489,4)(2490,4)(2491,4)(2492,4)(2493,4)(2494,4)(2495,4)(2496,4)(2497,4)(2498,4)(2499,4)(2500,4)(2501,4)(2502,4)(2503,4)(2504,4)(2505,4)(2506,4)(2507,4)(2508,4)(2509,4)(2510,4)(2511,4)(2512,4)(2513,4)(2514,4)(2515,4)(2516,4)(2517,4)(2518,4)(2519,4)(2520,4)(2521,4)(2522,4)(2523,4)(2524,4)(2525,4)(2526,4)(2527,4)(2528,4)(2529,4)(2530,4)(2531,4)(2532,4)(2533,4)(2534,4)(2535,4)(2536,4)(2537,4)(2538,4)(2539,4)(2540,4)(2541,4)(2542,4)(2543,4)(2544,4)(2545,4)(2546,4)(2547,4)(2548,4)(2549,4)(2550,4)(2551,4)(2552,4)(2553,4)(2554,4)(2555,4)(2556,4)(2557,4)(2558,4)(2559,4)(2560,4)(2561,4)(2562,4)(2563,4)(2564,4)(2565,4)(2566,4)(2567,4)(2568,4)(2569,4)(2570,4)(2571,4)(2572,4)(2573,4)(2574,4)(2575,4)(2576,4)(2577,4)(2578,4)(2579,4)(2580,4)(2581,4)(2582,4)(2583,4)(2584,4)(2585,4)(2586,4)(2587,4)(2588,4)(2589,4)(2590,4)(2591,4)(2592,4)(2593,4)(2594,4)(2595,4)(2596,4)(2597,4)(2598,4)(2599,4)(2600,4)(2601,4)(2602,4)(2603,4)(2604,4)(2605,4)(2606,4)(2607,4)(2608,4)(2609,4)(2610,4)(2611,4)(2612,4)(2613,4)(2614,4)(2615,4)(2616,4)(2617,4)(2618,4)(2619,4)(2620,4)(2621,4)(2622,4)(2623,4)(2624,4)(2625,4)(2626,4)(2627,4)(2628,4)(2629,4)(2630,4)(2631,4)(2632,4)(2633,4)(2634,4)(2635,4)(2636,4)(2637,4)(2638,4)(2639,4)(2640,4)(2641,4)(2642,4)(2643,4)(2644,4)(2645,4)(2646,4)(2647,4)(2648,4)(2649,4)(2650,4)(2651,4)(2652,4)(2653,4)(2654,4)(2655,4)(2656,4)(2657,4)(2658,4)(2659,4)(2660,4)(2661,4)(2662,4)(2663,4)(2664,4)(2665,4)(2666,4)(2667,4)(2668,4)(2669,4)(2670,4)(2671,4)(2672,4)(2673,4)(2674,4)(2675,4)(2676,4)(2677,4)(2678,4)(2679,4)(2680,4)(2681,4)(2682,4)(2683,4)(2684,4)(2685,4)(2686,4)(2687,4)(2688,4)(2689,4)(2690,4)(2691,4)(2692,4)(2693,4)(2694,4)(2695,4)(2696,4)(2697,4)(2698,4)(2699,4)(2700,4)(2701,4)(2702,4)(2703,4)(2704,4)(2705,4)(2706,4)(2707,4)(2708,4)(2709,4)(2710,4)(2711,4)(2712,4)(2713,4)(2714,4)(2715,4)(2716,4)(2717,4)(2718,4)(2719,4)(2720,4)(2721,4)(2722,4)(2723,4)(2724,4)(2725,4)(2726,4)(2727,4)(2728,4)(2729,4)(2730,4)(2731,4)(2732,4)(2733,4)(2734,4)(2735,4)(2736,4)(2737,4)(2738,4)(2739,4)(2740,4)(2741,4)(2742,4)(2743,4)(2744,4)(2745,4)(2746,4)(2747,4)(2748,4)(2749,4)(2750,4)(2751,4)(2752,4)(2753,4)(2754,4)(2755,4)(2756,4)(2757,4)(2758,4)(2759,4)(2760,4)(2761,4)(2762,4)(2763,4)(2764,4)(2765,4)(2766,4)(2767,4)(2768,4)(2769,4)(2770,4)(2771,4)(2772,4)(2773,4)(2774,4)(2775,4)(2776,4)(2777,4)(2778,4)(2779,4)(2780,4)(2781,4)(2782,4)(2783,4)(2784,4)(2785,4)(2786,4)(2787,4)(2788,4)(2789,4)(2790,4)(2791,4)(2792,4)(2793,4)(2794,4)(2795,4)(2796,4)(2797,4)(2798,4)(2799,4)(2800,4)(2801,4)(2802,4)(2803,4)(2804,4)(2805,4)(2806,4)(2807,4)(2808,4)(2809,4)(2810,4)(2811,4)(2812,4)(2813,4)(2814,4)(2815,4)(2816,4)(2817,4)(2818,4)(2819,4)(2820,4)(2821,4)(2822,4)(2823,4)(2824,4)(2825,4)(2826,4)(2827,4)(2828,4)(2829,4)(2830,4)(2831,4)(2832,4)(2833,4)(2834,4)(2835,4)(2836,4)(2837,4)(2838,4)(2839,4)(2840,4)(2841,4)(2842,4)(2843,4)(2844,4)(2845,4)(2846,4)(2847,4)(2848,4)(2849,4)(2850,4)(2851,4)(2852,4)(2853,4)(2854,4)(2855,4)(2856,4)(2857,4)(2858,4)(2859,4)(2860,4)(2861,4)(2862,4)(2863,4)(2864,4)(2865,4)(2866,4)(2867,4)(2868,4)(2869,4)(2870,4)(2871,4)(2872,4)(2873,4)(2874,4)(2875,4)(2876,4)(2877,4)(2878,4)(2879,4)(2880,4)(2881,4)(2882,4)(2883,4)(2884,4)(2885,4)(2886,4)(2887,4)(2888,4)(2889,4)(2890,4)(2891,4)(2892,4)(2893,4)(2894,4)(2895,4)(2896,4)(2897,4)(2898,4)(2899,4)(2900,4)(2901,4)(2902,4)(2903,4)(2904,4)(2905,4)(2906,4)(2907,4)(2908,4)(2909,4)(2910,4)(2911,4)(2912,4)(2913,4)(2914,4)(2915,4)(2916,4)(2917,4)(2918,4)(2919,4)(2920,4)(2921,4)(2922,4)(2923,4)(2924,4)(2925,4)(2926,4)(2927,4)(2928,4)(2929,4)(2930,4)(2931,4)(2932,4)(2933,4)(2934,4)(2935,4)(2936,4)(2937,4)(2938,4)(2939,4)(2940,4)(2941,4)(2942,4)(2943,4)(2944,4)(2945,4)(2946,4)(2947,4)(2948,4)(2949,4)(2950,4)(2951,4)(2952,4)(2953,4)(2954,4)(2955,4)(2956,4)(2957,4)(2958,4)(2959,4)(2960,4)(2961,4)(2962,4)(2963,4)(2964,4)(2965,4)(2966,4)(2967,4)(2968,4)(2969,4)(2970,4)(2971,4)(2972,4)(2973,4)(2974,4)(2975,4)(2976,4)(2977,4)(2978,4)(2979,4)(2980,4)(2981,4)(2982,4)(2983,4)(2984,4)(2985,4)(2986,4)(2987,4)(2988,4)(2989,4)(2990,4)(2991,4)(2992,4)(2993,4)(2994,4)(2995,4)(2996,4)(2997,4)(2998,4)(2999,4)(3000,4)(3001,4)(3002,4)(3003,4)(3004,4)(3005,4)(3006,4)(3007,4)(3008,4)(3009,4)(3010,4)(3011,4)(3012,4)(3013,4)(3014,4)(3015,4)(3016,4)(3017,4)(3018,4)(3019,4)(3020,4)(3021,4)(3022,4)(3023,4)(3024,4)(3025,4)(3026,4)(3027,4)(3028,4)(3029,4)(3030,4)(3031,4)(3032,4)(3033,4)(3034,4)(3035,4)(3036,4)(3037,4)(3038,4)(3039,4)(3040,4)(3041,4)(3042,4)(3043,4)(3044,4)(3045,4)(3046,4)(3047,4)(3048,4)(3049,4)(3050,4)(3051,4)(3052,4)(3053,4)(3054,4)(3055,4)(3056,4)(3057,4)(3058,4)(3059,4)(3060,4)(3061,4)(3062,4)(3063,4)(3064,4)(3065,4)(3066,4)(3067,4)(3068,4)(3069,4)(3070,4)(3071,4)(3072,4)(3073,4)(3074,4)(3075,4)(3076,4)(3077,4)(3078,4)(3079,4)(3080,4)(3081,4)(3082,4)(3083,4)(3084,4)(3085,4)(3086,4)(3087,4)(3088,4)(3089,4)(3090,4)(3091,4)(3092,4)(3093,4)(3094,4)(3095,4)(3096,4)(3097,4)(3098,4)(3099,4)(3100,4)(3101,4)(3102,4)(3103,4)(3104,4)(3105,4)(3106,4)(3107,4)(3108,4)(3109,4)(3110,4)(3111,4)(3112,4)(3113,4)(3114,4)(3115,4)(3116,4)(3117,4)(3118,4)(3119,4)(3120,4)(3121,4)(3122,4)(3123,4)(3124,4)(3125,4)(3126,4)(3127,4)(3128,4)(3129,4)(3130,4)(3131,4)(3132,4)(3133,4)(3134,4)(3135,4)(3136,4)(3137,4)(3138,4)(3139,4)(3140,4)(3141,4)(3142,4)(3143,4)(3144,4)(3145,4)(3146,4)(3147,4)(3148,4)(3149,4)(3150,4)(3151,4)(3152,4)(3153,4)(3154,4)(3155,4)(3156,4)(3157,4)(3158,4)(3159,4)(3160,4)(3161,4)(3162,4)(3163,4)(3164,4)(3165,4)(3166,4)(3167,4)(3168,4)(3169,4)(3170,4)(3171,4)(3172,4)(3173,4)(3174,4)(3175,4)(3176,4)(3177,4)(3178,4)(3179,4)(3180,4)(3181,4)(3182,4)(3183,4)(3184,4)(3185,4)(3186,4)(3187,4)(3188,4)(3189,4)(3190,4)(3191,4)(3192,4)(3193,4)(3194,4)(3195,4)(3196,4)(3197,4)(3198,4)(3199,4)(3200,4)(3201,4)(3202,4)(3203,4)(3204,4)(3205,4)(3206,4)(3207,4)(3208,4)(3209,4)(3210,4)(3211,4)(3212,4)(3213,4)(3214,4)(3215,4)(3216,4)(3217,4)(3218,4)(3219,4)(3220,4)(3221,4)(3222,4)(3223,4)(3224,4)(3225,4)(3226,4)(3227,4)(3228,4)(3229,4)(3230,4)(3231,4)(3232,4)(3233,4)(3234,4)(3235,4)(3236,4)(3237,4)(3238,4)(3239,4)(3240,4)(3241,4)(3242,4)(3243,4)(3244,4)(3245,4)(3246,4)(3247,4)(3248,4)(3249,4)(3250,4)(3251,4)(3252,4)(3253,4)(3254,4)(3255,4)(3256,4)(3257,4)(3258,4)(3259,4)(3260,4)(3261,4)(3262,4)(3263,4)(3264,4)(3265,4)(3266,4)(3267,4)(3268,4)(3269,4)(3270,4)(3271,4)(3272,4)(3273,4)(3274,4)(3275,4)(3276,4)(3277,4)(3278,4)(3279,4)(3280,4)(3281,4)(3282,4)(3283,4)(3284,4)(3285,4)(3286,4)(3287,4)(3288,4)(3289,4)(3290,4)(3291,4)(3292,4)(3293,4)(3294,4)(3295,4)(3296,4)(3297,4)(3298,4)(3299,4)(3300,4)(3301,4)(3302,4)(3303,4)(3304,4)(3305,4)(3306,4)(3307,4)(3308,4)(3309,4)(3310,4)(3311,4)(3312,4)(3313,4)(3314,4)(3315,4)(3316,4)(3317,4)(3318,4)(3319,4)(3320,4)(3321,4)(3322,4)(3323,4)(3324,4)(3325,4)(3326,4)(3327,4)(3328,4)(3329,4)(3330,4)(3331,4)(3332,4)(3333,4)(3334,4)(3335,4)(3336,4)(3337,4)(3338,4)(3339,4)(3340,4)(3341,4)(3342,4)(3343,4)(3344,4)(3345,4)(3346,4)(3347,4)(3348,4)(3349,4)(3350,4)(3351,4)(3352,4)(3353,4)(3354,4)(3355,4)(3356,4)(3357,4)(3358,4)(3359,4)(3360,4)(3361,4)(3362,4)(3363,4)(3364,4)(3365,4)(3366,4)(3367,4)(3368,4)(3369,4)(3370,4)(3371,4)(3372,4)(3373,4)(3374,4)(3375,4)(3376,4)(3377,4)(3378,4)(3379,4)(3380,4)(3381,4)(3382,4)(3383,4)(3384,4)(3385,4)(3386,4)(3387,4)(3388,4)(3389,4)(3390,4)(3391,4)(3392,4)(3393,4)(3394,4) diff --git a/guitar/midi/zapateadTRK2.tab b/guitar/midi/zapateadTRK2.tab new file mode 100644 index 0000000..92f4b4f --- /dev/null +++ b/guitar/midi/zapateadTRK2.tab @@ -0,0 +1,955 @@ +%TabMaster v2.00r% + + +E|---3-----------------3---3-------3---3-----3---3----------------- +B|-----1---1-------1---------1-1-----1-----1---1-------0-----0----- +G|-------0-----0-0-------0-------0-------0---0-------0---0-----0-0- +D|-----------2-------2-------------------------------------0------- +A|-3--------------------------------------------------------------- +E|-------------------------------------------------3--------------- + + + +E|---3---3-----3-3-------3---3---------------------3---3-------3--- +B|-0-------0-0-----0---0-------0-1-----1-------1---------1-1-----1- +G|-----0-------0-----0---0---------0-0-----0-0-------0-------0----- +D|-0-------------------------------------2-------2----------------- +A|-------------------------3--------------------------------------- +E|----------------------------------------------------------------- + + + +E|-3-------3---3-------------------3---3-----3-3-------3---1----- +B|-----1-----1-------0-----0-----0-------0-0-----0---0-------0-1- +G|---0---0---------0---0-----0-0-----0-------0-----0---0--------- +D|-----------------------0-------0------------------------------- +A|--------------------------------------------------------------- +E|---------------3---------------------------------------1------- + + + +E|-----------------1-3-------3---1-----1-----0-----------------0--- +B|-----1-------1---------1-1---1-----1-----1-----1---1-----1------- +G|-0-2-----2-2---------2-----2-----2---2-------2---0---0-0-------0- +D|-------3-------3-----------------------------------2-------2----- +A|---------------------------------------3------------------------- +E|----------------------------------------------------------------- + + + +E|-1-----1---0-----0---1-------------------1---3-----3-1-----1----- +B|---1-1---1---1-----1-----0---0-------0---------0-0---0---0-----0- +G|-------0-----0-0-------0---0-----0-0-------0-------0---0---0----- +D|-------------------------------0-------0------------------------- +A|-------------------------------------------------------------3--- +E|-------------------3--------------------------------------------- + + + +E|---------------------0---0-0-----------0---------1-----1------- +B|-----1-------1-----1---1-----1-------1---------0-----0--------- +G|---0---0---0-----0-------0-----0-----0-------0-----0---------0- +D|-2-------2-------2---------2-----2-------2-0---------0-----0--- +A|-------------3-3-------------------3-----2---------2-----2----- +E|--------------------------------------------------------------- + + + +E|---1-----------1---1-----------1---1-----------1---1-----1-1--- +B|-0-------0-------0---------0-----0-----------0---0-----0-----0- +G|---------0---0-------------0-0-----------0-----0-------0------- +D|-----0-----0-----------0-0-------------0---0---------0--------- +A|-----2-2-------------2-2-------------2---2--------------------- +E|--------------------------------------------------------------- + + + +E|-------1-------------1---1---1-----------------1---0----------- +B|-----------0-------0-------0---0-----------0-----1------------- +G|-0---------0-----0-----0---------0-----0-----0-------0--------- +D|---0-----0-----0-------0-----------0-0-----2---------------2-2- +A|-----2-------2-----------------------2---3-------------3-3----- +E|--------------------------------------------------------------- + + + +E|-----0---0---------0---0-----------0---0-----------0-----0----- +B|-1-----1-----------1-1---------1-----1-----------1-----1-----1- +G|---0-----------0-0-------------0-0---------------0---0-------0- +D|-------------2-2---------2---2-------------2---2-----------2--- +A|-----------3-3-----------3-3-------------3---3----------------- +E|--------------------------------------------------------------- + + + +E|-0-0-----------0-------0---0-0-------------0---------1-----1----- +B|-----1---------1-----1-----1-----1-----------1-----0-----0------- +G|-------0-------0---0-----------0---0-----0-------0-----0--------- +D|---------2-----2-2-------2-----------2---2-----0---------0-----0- +A|-----------3-3-------------------------3---2-----------2-----2--- +E|----------------------------------------------------------------- + + + +E|-----1-----------1---1-----------1---1-----------1---1-----1-1- +B|---0-------0-------0---------0-----0-----------0---0-----0----- +G|-0---------0---0-------------0-0-----------0-----0-------0----- +D|-------0-----0-----------0-0-------------0---0---------0------- +A|-------2-2-------------2-2-------------2---2------------------- +E|--------------------------------------------------------------- + + + +E|---------1-------------1---1---1-----------------1---0--------- +B|-0-----------0-------0-------0---0-----------0-----1----------- +G|---0---------0-----0-----0---------0-----0-----0-------0------- +D|-----0-----0-----0-------0-----------0-0-----2---------------2- +A|-------2-------2-----------------------2---3-------------3-3--- +E|--------------------------------------------------------------- + + + +E|-------0---0---------0---0-----------0---0-----------0-----0--- +B|---1-----1-----------1-1---------1-----1-----------1-----1----- +G|-----0-----------0-0-------------0-0---------------0---0------- +D|-2-------------2-2---------2---2-------------2---2-----------2- +A|-------------3-3-----------3-3-------------3---3--------------- +E|--------------------------------------------------------------- + + + +E|---0-0-----------0-------0---0-0-------------0---------1---1----- +B|-1-----1---------1-----1-----1-----1-----------1-----1---------1- +G|-0-------0-------0---0-----------0---0-----0-------2-------2----- +D|-----------2-----2-2-------2-----------2---2-----3-------3------- +A|-------------3-3-------------------------3---3---------------3-3- +E|----------------------------------------------------------------- + + + +E|-------1-----1-------1-----1-------1-------1-------1---1-1------- +B|-----1-------1-----1-------1-----1---------1-----1-----1---1----- +G|---2-------2-----2-------2-----2---------2-----2-----2-------2--- +D|-3---------3---3---------3---3-----------3---3-------3---------3- +A|---------3-3-----------3-3-----------3-3------------------------- +E|----------------------------------------------------------------- + + + +E|---1---------1-1-1-------------1---------0---------------0---0- +B|---1-------1-------1-1-----------1-----1-------------1-----1--- +G|---2-----2---------2-----2-------2---0-----0-----------0------- +D|---3---3---------------3---3---3---2-------------2-2----------- +A|-3---3-----------------------3---3-----------3-3--------------- +E|--------------------------------------------------------------- + + + +E|---------0---0-----------0---0-----------0-----0-----0-0------- +B|---------1-1---------1-----1-----------1-----1-----1-----1----- +G|-----0-0-------------0-0---------------0---0-------0-------0--- +D|---2-2---------2---2-------------2---2-----------2-----------2- +A|-3-3-----------3-3-------------3---3--------------------------- +E|--------------------------------------------------------------- + + + +E|-----0-------0-----0-------------1---1---1-----------------1--- +B|-----1-----1---------1---------0-------0---0-----------0-----0- +G|-----0---0-------------0-----0-----0---------0-----0-----0----- +D|-----2-2---------2---------0-------0-----------0-0-----0------- +A|-3-3-----------3---------2-----------------------2---2--------- +E|--------------------------------------------------------------- + + + +E|-1---1---1-------------------1---1---1---1-------------------1- +B|-------0---0-----------0-------0-------0---0-------------0----- +G|---0---------0-----0-------0-------0---------0-----0-------0--- +D|---0-----------0-0-------0---------0-----------0-0-----2------- +A|-----------------2---2---------------------------2---3--------- +E|--------------------------------------------------------------- + + + +E|---0---0-0-0-0-0-1-0---0-1-0-----0-------------0---------0-----0--- +B|-1---1---------------3-----3-3-0-1-3---1-----1-----------0-1-1----- +G|-----0-------------------------------------0---------0-0----------- +D|-----2-----------------------------------2---------2-2-----------2- +A|-------3-----------------------------3-----------3-3-------------3- +E|------------------------------------------------------------------- + + + +E|---------0---0-----------0-----0-----0-0-------0---0-0-0-0-1-0- +B|-----1-----1-----------1-----1-----1-----1---------1----------- +G|-----0-0---------------0---0-------0-------0-------0----------- +D|---2-------------2---2-----------2-----------2-----2----------- +A|-3-------------3---3-----------------------------3------------- +E|--------------------------------------------------------------- + + + +E|---1---0---------------------1-----------1---1-----------1---1- +B|-3-1-0---3---1---0---------0-------0-------0---------0-----0--- +G|-----------2-0-2---0-----0---------0---0-------------0-0------- +D|-----------------------0-------0-----0-----------0-0----------- +A|---------------------2---------2-2-------------2-2------------- +E|--------------------------------------------------------------- + + + +E|-----------1---1-----1-1-----------1-----0-1-----0-0-1-1-3---0-1- +B|---------0---0-----0-----0-----3-------0-----3-3-----------3----- +G|-----0-----0-------0-------0-----------0------------------------- +D|---0---0---------0-----------0-------0--------------------------- +A|-2---2---------------------------2------------------------------- +E|----------------------------------------------------------------- + + + +E|-0-1-3---1-0-0-1---0-0---1---0-----0-----------0-----------0------- +B|-------1-3-----1-3---3-0---1---3-3---0-3-1-3-1-----1-----1--------- +G|-------------------------------------------------------0---------0- +D|-----------------------------------------------------2---------2-2- +A|-------------------------------------------------3-----------3-3--- +E|------------------------------------------------------------------- + + + +E|-0-----0-----------0---0-----------0-----0-----0-0-------0---0-0- +B|-3-1-1---------1-----1-----------1-----1-----1-----1---------1--- +G|-0-------------0-0---------------0---0-------0-------0-------0--- +D|---------2---2-------------2---2-----------2-----------2-----2--- +A|---------3-3-------------3---3-----------------------------3----- +E|----------------------------------------------------------------- + + + +E|-0-0-1-0---0-1-0-----0-------------0---------0-----0-----------0--- +B|---------3-----3-3-0-1-3---1-----1-----------0-1-1---------1-----1- +G|-------------------------------0---------0-0---------------0-0----- +D|-----------------------------2---------2-2-----------2---2--------- +A|-------------------------3-----------3-3-------------3-3----------- +E|------------------------------------------------------------------- + + + +E|-0-----------0-----0-----0-0-------0---0-0-0-0-1-0---1---0----- +B|-----------1-----1-----1-----1---------1-----------3-1-0---3--- +G|-----------0---0-------0-------0-------0---------------------2- +D|-----2---2-----------2-----------2-----2----------------------- +A|---3---3-----------------------------3------------------------- +E|--------------------------------------------------------------- + + + +E|-----------------1-----------1---1-----------1---1-----------1- +B|-1---0---------0-------0-------0---------0-----0-----------0--- +G|-0-2---0-----0---------0---0-------------0-0-----------0-----0- +D|-----------0-------0-----0-----------0-0-------------0---0----- +A|---------2---------2-2-------------2-2-------------2---2------- +E|--------------------------------------------------------------- + + + +E|---1-----1-1-----------1-----0-1-----0-0-1-1-3---1-0-0-1-3-----1-0-0-1- +B|-0-----0-----0-----3-------0-----3-3-----------3-----------1-3-------1- +G|-------0-------0-----------0------------------------------------------- +D|-----0-----------0-------0--------------------------------------------- +A|---------------------2------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|-0-0---1---0-----0-----------0-----------0-----------0---0------- +B|-3-3-0---1---3-3---0-3-1-3-1-----1-----1---------3---1-1--------- +G|-------------------------------------0---------0---0------------- +D|-----------------------------------2---------2-2-----------2---2- +A|-------------------------------3-----------3-3-------------3-3--- +E|----------------------------------------------------------------- + + + +E|-----0---0-----------0-----0-----0-0---------0-------0-0---0--- +B|-1-----1-----------1-----1-----1-----1-------1-----1-----1---1- +G|-0-0---------------0---0-------0-------0-----0---0-------0----- +D|-------------2---2-----------2-----------2---2-2-------------2- +A|-----------3---3---------------------------3-3----------------- +E|--------------------------------------------------------------- + + + +E|-----0-----------1-----1---------1-----------1---1-----------1- +B|-------1-------0-----0---------0-------0-------0---------0----- +G|-0-----0-----0-----0---------0---------0---0-------------0-0--- +D|---2-2-----0---------0-----0-------0-----0-----------0-0------- +A|---------2-------3-2-----2---------2-2-------------2-2--------- +E|--------------------------------------------------------------- + + + +E|---1-----------1---1-----1-1---------1-------------1---1---1--- +B|-0-----------0---0-----0-----0-----------0-------0-------0---0- +G|---------0-----0-------0-------0---------0-----0-----0--------- +D|-------0---0---------0-----------0-----0-----0-------0--------- +A|-----2---2-------------------------2-------2------------------- +E|--------------------------------------------------------------- + + + +E|---------------1---0---------------0---0---------0---0--------- +B|-----------0-----1-------------1-----1-----------1-1---------1- +G|-0-----0-----0-------0-----------0-----------0-0-------------0- +D|---0-0-----2---------------2-2-------------2-2---------2---2--- +A|-----2---3-------------3-3---------------3-3-----------3-3----- +E|--------------------------------------------------------------- + + + +E|---0---0-----------0-----0-----0-0-----------0-------0---0-0----- +B|-----1-----------1-----1-----1-----1---------1-----1-----1-----1- +G|-0---------------0---0-------0-------0-------0---0-----------0--- +D|-----------2---2-----------2-----------2-----2-2-------2--------- +A|---------3---3---------------------------3-3--------------------- +E|----------------------------------------------------------------- + + + +E|---------0---------1-----1---------1-----------1---1----------- +B|-----------1-----0-----0---------0-------0-------0---------0--- +G|-0-----0-------0-----0---------0---------0---0-------------0-0- +D|---2---2-----0---------0-----0-------0-----0-----------0-0----- +A|-----3---2-----------2-----2---------2-2-------------2-2------- +E|--------------------------------------------------------------- + + + +E|-1---1-----------1---1-----1-1---------1-------------1---1---1- +B|---0-----------0---0-----0-----0-----------0-------0-------0--- +G|-----------0-----0-------0-------0---------0-----0-----0------- +D|---------0---0---------0-----------0-----0-----0-------0------- +A|-------2---2-------------------------2-------2----------------- +E|--------------------------------------------------------------- + + + +E|-----------------1---0---------------0---0---------0---0------- +B|-0-----------0-----1-------------1-----1-----------1-1--------- +G|---0-----0-----0-------0-----------0-----------0-0------------- +D|-----0-0-----2---------------2-2-------------2-2---------2---2- +A|-------2---3-------------3-3---------------3-3-----------3-3--- +E|--------------------------------------------------------------- + + + +E|-----0---0-----------0-----0-----0-0-----------0-------0---0-0--- +B|-1-----1-----------1-----1-----1-----1---------1-----1-----1----- +G|-0-0---------------0---0-------0-------0-------0---0-----------0- +D|-------------2---2-----------2-----------2-----2-2-------2------- +A|-----------3---3---------------------------3-3------------------- +E|----------------------------------------------------------------- + + + +E|-----------0---------1---1-----------1-----1-------1-----1----- +B|-1-----------1-----1---------1-----1-------1-----1-------1----- +G|---0-----0-------2-------2-------2-------2-----2-------2-----2- +D|-----2---2-----3-------3-------3---------3---3---------3---3--- +A|-------3---3---------------3-3---------3-3-----------3-3------- +E|--------------------------------------------------------------- + + + +E|---1-------1-------1---1-1---------1---------1-1-1-------------1- +B|-1---------1-----1-----1---1-------1-------1-------1-1----------- +G|---------2-----2-----2-------2-----2-----2---------2-----2------- +D|---------3---3-------3---------3---3---3---------------3---3---3- +A|-----3-3-------------------------3---3-----------------------3--- +E|----------------------------------------------------------------- + + + +E|---------0---------------0---0---------0---0-----------0---0--- +B|-1-----1-------------1-----1-----------1-1---------1-----1----- +G|-2---0-----0-----------0-----------0-0-------------0-0--------- +D|---2-------------2-2-------------2-2---------2---2------------- +A|-3-----------3-3---------------3-3-----------3-3-------------3- +E|--------------------------------------------------------------- + + + +E|---------0-----0-----0-0-----------0-------0-----0------------- +B|-------1-----1-----1-----1---------1-----1---------1---------0- +G|-------0---0-------0-------0-------0---0-------------0-----0--- +D|-2---2-----------2-----------2-----2-2---------2---------0----- +A|---3---------------------------3-3-----------3---------2------- +E|--------------------------------------------------------------- + + + +E|-1---1---1-----------------1---1---1---1-------------------1--- +B|-------0---0-----------0-----0-------0---0-----------0-------0- +G|---0---------0-----0-----0-------0---------0-----0-------0----- +D|---0-----------0-0-----0---------0-----------0-0-------0------- +A|-----------------2---2-------------------------2---2----------- +E|--------------------------------------------------------------- + + + +E|-1---1---1-------------------1---0-0---0---------0-0-------0----- +B|-------0---0-------------0-----1-----1--------------------------- +G|---0---------0-----0-------0---------------0--------------------- +D|---0-----------0-0-----2---------------------2-2-----2-0-2---2-2- +A|-----------------2---3-------------------3----------------------- +E|----------------------------------------------------------------- + + + +E|-----0-----------0---0-----0---0-----0---------1-------1-1-------0- +B|---------------1---------1----------------------------------------- +G|-------------0---------0-------------------------------0---------0- +D|-0-0---2-2-0-------2---2-----2---0-2---2-2-0-0---2-0-0-------2-0--- +A|---3---------3-------------------------------------2-------2------- +E|---------------------------------------------3-------3------------- + + + +E|-1-----0---------3---------1-3---------1-0---------0---------0------- +B|--------------------------------------------------------------------- +G|---------------0-------0-0-------0----------------------------------- +D|-2-0-2---2-2-0-0---2-0---3-----3---2-3-----2-3-0-2---2-2-0-0---2-2-0- +A|-----------------------------------------------------------3--------- +E|--------------------------------------------------------------------- + + + +E|---0---0---0---0-----0---------0---------0---0---0---0-----0------- +B|---1-------1-----------------------------1-------1----------------- +G|-0-------0-----------------------------0-------0------------------- +D|-----2---2---2---0-2---2-2-0-0---2-2-0-----2---2---2---0-2---2-2-0- +A|-3---------------------------3---------3--------------------------- +E|------------------------------------------------------------------- + + + +E|---1---------1-1-------5-1-----5-5---------3-5-------3-3-------1-3-----1------------- +B|------------------------------------------------------------------------------------- +G|-------------0---------0------------------------------------------------------------- +D|-0---2-0---0-------3-0---0-3-3-----0-0-2-3-----0-2-2-----2-0-2-----2-0---0-------0--- +A|---------2-------2-----------------------------3---------3---------0-2-3-0-3-2-3---3- +E|-3---------3------------------------------------------------------------------------- + + + +E|-------0---0-0-----------0---------1-----1---------1----------- +B|-----1---1-----1-------1---------0-----0---------0-------0----- +G|---0-------0-----0-----0-------0-----0---------0---------0---0- +D|---2---------2-----2-------2-0---------0-----0-------0-----0--- +A|-3-------------------3-----2---------2-----2---------2-2------- +E|--------------------------------------------------------------- + + + +E|-1---1-----------1---1-----------1---1-----1-1---------1------- +B|---0---------0-----0-----------0---0-----0-----0-----------0--- +G|-------------0-0-----------0-----0-------0-------0---------0--- +D|---------0-0-------------0---0---------0-----------0-----0----- +A|-------2-2-------------2---2-------------------------2-------2- +E|--------------------------------------------------------------- + + + +E|-------1---1---1-----------------1---0---------------0---0----- +B|-----0-------0---0-----------0-----1-------------1-----1------- +G|---0-----0---------0-----0-----0-------0-----------0----------- +D|-0-------0-----------0-0-----2---------------2-2-------------2- +A|-----------------------2---3-------------3-3---------------3-3- +E|--------------------------------------------------------------- + + + +E|-----0---0-----------0---0-----------0-----0-----0-0----------- +B|-----1-1---------1-----1-----------1-----1-----1-----1--------- +G|-0-0-------------0-0---------------0---0-------0-------0------- +D|-2---------2---2-------------2---2-----------2-----------2----- +A|-----------3-3-------------3---3---------------------------3-3- +E|--------------------------------------------------------------- + + + +E|-0-------0---0-0-------------0---------1-----1---------1--------- +B|-1-----1-----1-----1-----------1-----0-----0---------0-------0--- +G|-0---0-----------0---0-----0-------0-----0---------0---------0--- +D|-2-2-------2-----------2---2-----0---------0-----0-------0-----0- +A|-------------------------3---2-----------2-----2---------2-2----- +E|----------------------------------------------------------------- + + + +E|---1---1-----------1---1-----------1---1-----1-1---------1----- +B|-----0---------0-----0-----------0---0-----0-----0-----------0- +G|-0-------------0-0-----------0-----0-------0-------0---------0- +D|-----------0-0-------------0---0---------0-----------0-----0--- +A|---------2-2-------------2---2-------------------------2------- +E|--------------------------------------------------------------- + + + +E|---------1---1---1-----------------1---0---------------0---0--- +B|-------0-------0---0-----------0-----1-------------1-----1----- +G|-----0-----0---------0-----0-----0-------0-----------0--------- +D|---0-------0-----------0-0-----2---------------2-2------------- +A|-2-----------------------2---3-------------3-3---------------3- +E|--------------------------------------------------------------- + + + +E|-------0---0-----------0---0-----------0-----0-----0-0--------- +B|-------1-1---------1-----1-----------1-----1-----1-----1------- +G|---0-0-------------0-0---------------0---0-------0-------0----- +D|-2-2---------2---2-------------2---2-----------2-----------2--- +A|-3-----------3-3-------------3---3---------------------------3- +E|--------------------------------------------------------------- + + + +E|---0-------0---0-0-------------0---------1---1-----------1-----1- +B|---1-----1-----1-----1-----------1-----1---------1-----1-------1- +G|---0---0-----------0---0-----0-------2-------2-------2-------2--- +D|---2-2-------2-----------2---2-----3-------3-------3---------3--- +A|-3-------------------------3---3---------------3-3---------3-3--- +E|----------------------------------------------------------------- + + + +E|-------1-----1-------1-------1-------1---1-1---------1---------1- +B|-----1-------1-----1---------1-----1-----1---1-------1-------1--- +G|---2-------2-----2---------2-----2-----2-------2-----2-----2----- +D|-3---------3---3-----------3---3-------3---------3---3---3------- +A|---------3-3-----------3-3-------------------------3---3--------- +E|----------------------------------------------------------------- + + + +E|-1-1-------------1---------0---------------0---0---------0---0- +B|-----1-1-----------1-----1-------------1-----1-----------1-1--- +G|-----2-----2-------2---0-----0-----------0-----------0-0------- +D|---------3---3---3---2-------------2-2-------------2-2--------- +A|---------------3-3-------------3-3---------------3-3----------- +E|--------------------------------------------------------------- + + + +E|-----------0---0-----------0-----0-----0-0-----------0-------0- +B|-------1-----1-----------1-----1-----1-----1---------1-----1--- +G|-------0-0---------------0---0-------0-------0-------0---0----- +D|-2---2-------------2---2-----------2-----------2-----2-2------- +A|-3-3-------------3---3---------------------------3-3----------- +E|--------------------------------------------------------------- + + + +E|-----0-------------1---1---1-----------------1---1---1---1----- +B|-------1---------0-------0---0-----------0-----0-------0---0--- +G|---------0-----0-----0---------0-----0-----0-------0---------0- +D|---2---------0-------0-----------0-0-----0---------0----------- +A|-3---------2-----------------------2---2----------------------- +E|--------------------------------------------------------------- + + + +E|---------------1---1---1---1-------------------1---0-------0--- +B|---------0-------0-------0---0-------------0-----1-----1------- +G|-----0-------0-------0---------0-----0-------0-------0-------0- +D|-0-0-------0---------0-----------0-0-----2---------------2----- +A|---2---2---------------------------2---3-------------3--------- +E|--------------------------------------------------------------- + + + +E|-3---5---3-----3-5---1---3-----0-1-------0-------------------0----- +B|-------------------------------------3-------1-3---0---1-------0--- +G|---2---0---2-0---------0------------------------------------------- +D|-------------------3-------2-3-----0---2---0-------------2-------3- +A|-------------------------------------------3-----2---3-----2------- +E|------------------------------------------------------------------- + + + +E|-1---0-----0-1-------0-------------------------------------3---5--- +B|-----------------3---------3-1---0---1-----0----------------------- +G|---------------------------------------------2---0---2-0-0---2---0- +D|---2---2-3-----0---2-----0----------------------------------------- +A|-----------------------3-------2---3---0-2---------0--------------- +E|-----------------------------------------------3-------3----------- + + + +E|-3-----3-5---1---3-----0-1-------0-------------------0-----1---0----- +B|-----------------------------3-------1-3---0---1-------0------------- +G|---2-0---------0----------------------------------------------------- +D|-----------3-------2-3-----0---2---0-------------2-------3---2---2-3- +A|-----------------------------------3-----2---3-----2----------------- +E|--------------------------------------------------------------------- + + + +E|-0-1-------0-------------------------------------3---5---5-3-----3- +B|-------3---------3-1---0---1-----0--------------------------------- +G|-----------------------------------2---0---2-0-0---2---0-----0-2--- +D|-----0---2-----0--------------------------------------------------- +A|-------------3-------2---3---0-2---------0------------------------- +E|-------------------------------------3-------3--------------------- + + + +E|-5---1-5---1-3-----0-1---1-----0-------------------------0---1--- +B|---------------------------3-----3---1-3---0-3---1-----0--------- +G|---------0------------------------------------------------------- +D|---3-----------2-3-----0-----2-----0-----------------2-----3---2- +A|-----------------------------------3-----2-----3---2------------- +E|----------------------------------------------------------------- + + + +E|-1-0-----0-1---1---0-------------------------------------------3---5- +B|---------------3-3-------1-3-3---0---0-1-------0---0----------------- +G|---------------------------------------------2-------0---2-0-0---2--- +D|-----2-3-----0---2-----0--------------------------------------------- +A|---------------------3---------2---3-----0-2-----------0------------- +E|-------------------------------------------------3---------3--------- + + + +E|---5-3-----3-5---1-5---1-3-----0-1---1-----0----------------------- +B|---------------------------------------3-----3---1-3---0-3---1----- +G|-0-----0-2-----------0--------------------------------------------- +D|---------------3-----------2-3-----0-----2-----0-----------------2- +A|-----------------------------------------------3-----2-----3---2--- +E|------------------------------------------------------------------- + + + +E|---0---1---1-0-----0-1---1---0--------------------------------------- +B|-0-----------------------3-3-------1-3-3---0---0-1-------0---0------- +G|-------------------------------------------------------2-------0---2- +D|-----3---2-----2-3-----0---2-----0----------------------------------- +A|-------------------------------3---------2---3-----0-2-----------0--- +E|-----------------------------------------------------------3--------- + + + +E|------------------------------------------------------------------------- +B|------------------------------------------------------------------------- +G|-----0------------------------------------------------------------------- +D|---------0-3---2-0-0-3-2-2-0-0-2---0-------------------0-3---2-0-0-3-2-2- +A|-------2-----2-------------------3---3-2-3-3-0-2---2-0-----2------------- +E|-3-3-----3---------------------------------------3-----3----------------- + + + +E|------------------------------------------------------------------------- +B|-----------------------------------------------------------------------3- +G|------------------------------------------------------------------------- +D|-0-0-2---0-------------------0-3---2-0-0-3-2-0---------0-----2-3-0-2-3--- +A|-------3---3-2-3-3-0-2---2-0-----2-------------0-2-3-0---2-3------------- +E|-----------------------3-----3-------------3-----3----------------------- + + + +E|-0-1---0-0-1-1---3-0-1-1-0-3-1---0---0---1-0-0---1-0-------------0----- +B|---3-3---------3-------------1-3---1---3-------3-----0-1-3-3-0-1---3-3- +G|----------------------------------------------------------------------- +D|----------------------------------------------------------------------- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|-0--------------------------------------------------------------- +B|-1-3-1-------1-1-------------------------------1-1--------------- +G|-----------0-0-0-0-----------0-0-------------0-0-0-0-----------0- +D|---------2-2-----2-0-2-0---0-0-0-0---------2-2-----2-0-2-0---0-0- +A|-------3-----------------2-2-----2-0-3-2-0-----------------2-2--- +E|---------------------3---------------------------------3--------- + + + +E|------------------------------------------------------------------- +B|---------------------------------------1---1-1-1-1---1------------- +G|-0-----------------------------0-0-0-0---0-0-------0-0-0-0-0-0----- +D|-0-0---------------2-2---2-2-2---2-------------------------2---2-2- +A|---2-0-3-2-0-3-3-3-3---3------------------------------------------- +E|------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------- +B|--------------------------------------------------------------------------- +G|-------------------------0-0---0-0-0---0-------------------------------0-0- +D|-2-2-2---------0---0-0-0-0---0-----0-0---0-0-0-----0---------2-2-2-2-2---2- +A|-------2-2-2-2-2-2-----------------------------2-2-2-2-3-2-2--------------- +E|---3----------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------- +B|-----1---1-1-1-1---1------------------------------------------------- +G|-0-0---0-0-------0-0-0-0-0-0-----------------------------0-0---0-0-0- +D|-------------------------2---2-2-2-2-2---------0---0-0-0-0---0-----0- +A|---------------------------------------2-2-2-2-2-2------------------- +E|-----------------------------------3--------------------------------- + + + +E|--------------------------------------------------------------------- +B|--------------------------------------------------------------------- +G|---0----------------------------------------------------------------- +D|-0---0-0-0-----0-------------0-3---2-0-0-3-2-2-0-0-2---0------------- +A|-----------2-2---2-2-2---2-2-----2-------------------3---3-2-3-3-0-2- +E|-----------------------3--------------------------------------------- + + + +E|--------------------------------------------------------------------------- +B|--------------------------------------------------------------------------- +G|--------------------------------------------------------------------------- +D|-------0-3---2-0-0-3-2-2-0-0-2---0-------------------0-3---2-0-0-3---2-0--- +A|---2-0-----2-------------------3---3-2-3-3-0-2---2-0-----2---------------0- +E|-3---------------------------------------------3-------------------3-3----- + + + +E|---------------------------0-1---0-0-1-1---3-0-1-1-0-3-1---0---0---1-0-0- +B|-------------------------3---3-3---------3-------------1-3---1---3------- +G|------------------------------------------------------------------------- +D|-------0-----2---3-0-2-3------------------------------------------------- +A|-2-3-0---2-3------------------------------------------------------------- +E|---------------3--------------------------------------------------------- + + + +E|---1-0-------------0-----0--------------------------------------------------- +B|-3-----0-1-3-3-0-1---3-3-1-3-----1------------------------------------------- +G|---------------------------------------------------0-----0------------------- +D|-----------------------------0-2---3-0-0-2-2-3-3-0-2-3-3-2-3-0-2-2---3-0-2-2- +A|-----------------------------------------------------------3-------3--------- +E|----------------------------------------------------------------------------- + + + +E|-----------------------------------0-------0-------1-1------------- +B|---------------------------------1---1-----------0-----0----------- +G|-------------------------------0-----0---------0---------0--------- +D|-0-3-2---0-0---2-0-0-2-0-----2-------------2-0-------------0-----0- +A|-------2-3---2-3-----3---3-3-----------2-3-------------------2-2--- +E|------------------------------------------------------------------- + + + +E|-----1-1-------------0-0-----------------0---0---------1-1------- +B|---0-------0-------1-----1-------------1-----1-------0-------0--- +G|-0-------0-------0---------0---------0-----0-------0-------0----- +D|---------0-----2-------------2-----2-----------0-2---------0----- +A|-----------2-3-----------------3-3---------2---3-------------2-2- +E|----------------------------------------------------------------- + + + +E|-------1-----------------1-1-------1-------1-------------1---1-1- +B|-----0---------------0-0-----------0-----0-----------0-----0---0- +G|---0-------------0-0---------------0---0---------0-----0--------- +D|-0---------0---0---------------0-----0-----------0-0-----------0- +A|---------2---2---------------2---2-----------2-2----------------- +E|----------------------------------------------------------------- + + + +E|---1-----------------1-1-------1-------------0---------0------- +B|-----0-------------0-------0-------0-----1---------1----------- +G|-0-----0---------0-------0-----------0-0---------0-----------0- +D|---------0-----0---------0-------2---------0---2-----------2--- +A|-----------2-2-------------2-3-----------------------3---3----- +E|--------------------------------------------------------------- + + + +E|---0-0---0-----------0---------1-1-------------1-1-1------------- +B|-1-----1---1-----1-----------0-------0-------0-------0-0--------- +G|-------0-----0-----0-------0-----0---------0---------0-----0---0- +D|-----------2---2-----2---0---------0-----0---------------0---0-0- +A|-----------------------2-3-----------2-2-----------------------2- +E|----------------------------------------------------------------- + + + +E|-1-------0---------0---------0-0---0-----------0---------1-1--- +B|-0-----1-------1-----------1-----1---1-----1-----------0------- +G|-----0-------0-----------0-------0-----0-----0-------0-------0- +D|---2-------2-----------2-------------2---2-----2---0---------0- +A|-3---------------3---3---------------------------2-3----------- +E|--------------------------------------------------------------- + + + +E|-----------1-----------------1-1-------1-------1-------------1--- +B|-0-------0---------------0-0-----------0-----0-----------0-----0- +G|-------0-------------0-0---------------0---0---------0-----0----- +D|-----0---------0---0---------------0-----0-----------0-0--------- +A|-2-2---------2---2---------------2---2-----------2-2------------- +E|----------------------------------------------------------------- + + + +E|-1-1---1-------------------1---0---------------0---0----------- +B|---0-----0---------0---------1-------------1-----1-----------1- +G|-----0-----0-----------0---0-----------0-----0-------------0--- +D|---0---------0-0---------2---------2-----2-------------2-----2- +A|-----------------2---3-----------3---3---------------3---3----- +E|--------------------------------------------------------------- + + + +E|---0-0---------------0---0-0-------------0-0---0-----------0----- +B|---1-------------1-----1---1-----------1-----1---1-----1--------- +G|-0---------0-------0-----------0-----0-------0-----0-----0------- +D|-------------2-2-------------2-----2-------------2---2-----2---0- +A|-------3-3---------------------3-3---------------------------2-3- +E|----------------------------------------------------------------- + + + +E|-----1-1-------------1-----------------1-1-------1-------1------- +B|---0-------0-------0---------------0-0-----------0-----0--------- +G|-0-------0-------0-------------0-0---------------0---0---------0- +D|---------0-----0---------0---0---------------0-----0-----------0- +A|-----------2-2---------2---2---------------2---2-----------2-2--- +E|----------------------------------------------------------------- + + + +E|-------1---1-1---1---------------------1-1-1-1------------------- +B|---0-----0---0-----0---------0---------0-------0-0-------0------- +G|-----0---------0-----0-----------0---0---------0---0---------0--- +D|-0-----------0---------0-0---------0-----------0-----0-0-------2- +A|---------------------------2---2-------------------------3-2----- +E|----------------------------------------------------------------- + + + +E|---1---0---------0---0-------------0-0-------------0-0--------- +B|-----1---------1---1-----------1-1-------------1---1----------- +G|-0-----------0-0-------------0-0-------------0---0-----------0- +D|-----------2-2-------------2-2-------------2-2-------------2--- +A|---------3-3-----------3-3-------------3-3-------------3-3----- +E|--------------------------------------------------------------- + + + +E|-------0-0-0-0-----------0-------------0-0---0-----------0----- +B|---1-1---------1-1-----------1-------1-----1---1-----1--------- +G|---0-----------0---0---------0-----0-------0-----0-----0------- +D|-2-------------2-----2---------2-2-------------2---2-----2---0- +A|-----------------------3---3-------------------------------2-3- +E|--------------------------------------------------------------- + + + +E|-----1-1-------------1-----------------1-1-------1-------1------- +B|---0-------0-------0---------------0-0-----------0-----0--------- +G|-0-------0-------0-------------0-0---------------0---0---------0- +D|---------0-----0---------0---0---------------0-----0-----------0- +A|-----------2-2---------2---2---------------2---2-----------2-2--- +E|----------------------------------------------------------------- + + + +E|-------1---1-1---1---------------------1-1-1-1------------------- +B|---0-----0---0-----0---------0---------0-------0-0-------0------- +G|-----0---------0-----0-----------0---0---------0---0---------0--- +D|-0-----------0---------0-0---------0-----------0-----0-0-------2- +A|---------------------------2---2-------------------------3-2----- +E|----------------------------------------------------------------- + + + +E|---1---0---------0---0-------------0-0-------------0-0--------- +B|-----1---------1---1-----------1-1-------------1---1----------- +G|-0-----------0-0-------------0-0-------------0---0-----------0- +D|-----------2-2-------------2-2-------------2-2-------------2--- +A|---------3-3-----------3-3-------------3-3-------------3-3----- +E|--------------------------------------------------------------- + + + +E|-------0-0-0-0-----------0-------------0-0---0-----------0----- +B|---1-1---------1-1-----------1-------1-----1---1-----1--------- +G|---0-----------0---0---------0-----0-------0-----0-----0------- +D|-2-------------2-----2---------2-2-------------2---2-----2---3- +A|-----------------------3---3-------------------------------3-3- +E|--------------------------------------------------------------- + + + +E|-----1---1-----------1-----1-------1-----1-------1-------1----- +B|---1---------1-----1-------1-----1-------1-----1---------1----- +G|-2-------2-------2-------2-----2-------2-----2---------2-----2- +D|-------3-------3---------3---3---------3---3-----------3---3--- +A|-----------3-3---------3-3-----------3-3-----------3-3--------- +E|--------------------------------------------------------------- + + + +E|---1---1-1---------1---------1-1-1-------------1---------0------- +B|-1-----1---1-------1-------1-------1-1-----------1-----1--------- +G|-----2-------2-----2-----2---------2-----2-------2---0-----0----- +D|-----3---------3---3---3---------------3---3---3---2------------- +A|-----------------3---3-----------------------3---3-----------3-3- +E|----------------------------------------------------------------- + + + +E|---------0---0---------0---0-----------0---0-----------0-----0- +B|-----1-----1-----------1-1---------1-----1-----------1-----1--- +G|-------0-----------0-0-------------0-0---------------0---0----- +D|-2-2-------------2-2---------2---2-------------2---2----------- +A|---------------3-3-----------3-3-------------3---3------------- +E|--------------------------------------------------------------- + + + +E|-----0-0-----------0-------0-----0-----1----------------------- +B|---1-----1---------1-----1---------1-----0-------------------0- +G|---0-------0-------0---0-------------0-----0-----------------0- +D|-2-----------2-----2-2---------2------------------------------- +A|---------------3-3-----------3---------------3-0-------3-0-0-3- +E|-------------------------------------------------1-1-1--------- + + + +E|---1---1-----------1---1-1-----1-------------------------1---1--- +B|-----0-----------0---0-------0---0-------------------0-----0----- +G|-0-------------0---0-----0---------0-----------------0-0--------- +D|----------------------------------------------------------------- +A|---------0-3-0---3-------3-0---------3-0-------3-0-0-3---------0- +E|---------1-1-----------------1-----------1-1-1-----------------1- + + + +E|---------1---1-1-----1-------------------------1---1-----------1- +B|-------0---0-------0---0-------------------0-----0-----------0--- +G|-----0---0-----0---------0-----------------0-0-------------0---0- +D|----------------------------------------------------------------- +A|-3-0---3-------3-0---------3-0-------3-0-0-3---------0-3-0---3--- +E|-1-----------------1-----------1-1-1-----------------1-1--------- + + + +E|---1-1-----0-------------0------- +B|-0-------0---1---------1--------- +G|-----0---------0-----------0----- +D|-----------------2-----------2--- +A|-----3-0-----------3-----------3- +E|---------1-----------3----------- + diff --git a/guitar/midi/zapateadTRK2_imp.tab b/guitar/midi/zapateadTRK2_imp.tab new file mode 100644 index 0000000..2dd3a2e --- /dev/null +++ b/guitar/midi/zapateadTRK2_imp.tab @@ -0,0 +1,991 @@ +%TabMaster v2.00r% + + +E|---3-----------------3---3-------3---3-----3---3--------------- +B|-----1---1-------1---------1-1-----1-----1---1-------0-----0--- +G|-------0-----0-0-------0-------0-------0---0-------0---0-----0- +D|-----------2-------2-------------------------------------0----- +A|-3------------------------------------------------------------- +E|-------------------------------------------------3------------- + + + +E|-----3---3-----3-3-------3---3---------------------3---3------- +B|---0-------0-0-----0---0-------0-1-----1-------1---------1-1--- +G|-0-----0-------0-----0---0---------0-0-----0-0-------0-------0- +D|---0-------------------------------------2-------2------------- +A|---------------------------3----------------------------------- +E|--------------------------------------------------------------- + + + +E|-3---3-------3---3-------------------3---3-----3-3-------3---1- +B|---1-----1-----1-------0-----0-----0-------0-0-----0---0------- +G|-------0---0---------0---0-----0-0-----0-------0-----0---0----- +D|---------------------------0-------0--------------------------- +A|--------------------------------------------------------------- +E|-------------------3---------------------------------------1--- + + + +E|---------------------1-3-------3---1-----1-----0--------------- +B|-0-1-----1-------1---------1-1---1-----1-----1-----1---1-----1- +G|-----0-2-----2-2---------2-----2-----2---2-------2---0---0-0--- +D|-----------3-------3-----------------------------------2------- +A|-------------------------------------------3------------------- +E|--------------------------------------------------------------- + + + +E|---0---1-----1---0-----0---1-------------------1---3-----3-1--- +B|---------1-1---1---1-----1-----0---0-------0---------0-0---0--- +G|-----0-------0-----0-0-------0---0-----0-0-------0-------0---0- +D|-2-----------------------------------0-------0----------------- +A|--------------------------------------------------------------- +E|-------------------------3------------------------------------- + + + +E|---1-------------------------0---0-0-----------0---------1----- +B|-0-----0-----1-------1-----1---1-----1-------1---------0-----0- +G|---0-------0---0---0-----0-------0-----0-----0-------0-----0--- +D|---------2-------2-------2---------2-----2-------2-0---------0- +A|-----3---------------3-3-------------------3-----2---------2--- +E|--------------------------------------------------------------- + + + +E|-1---------1-----------1---1-----------1---1-----------1---1--- +B|---------0-------0-------0---------0-----0-----------0---0----- +G|-------0---------0---0-------------0-0-----------0-----0------- +D|-----0-------0-----0-----------0-0-------------0---0---------0- +A|---2---------2-2-------------2-2-------------2---2------------- +E|--------------------------------------------------------------- + + + +E|---1-1---------1-------------1---1---1-----------------1---0--- +B|-0-----0-----------0-------0-------0---0-----------0-----1----- +G|-0-------0---------0-----0-----0---------0-----0-----0-------0- +D|-----------0-----0-----0-------0-----------0-0-----2----------- +A|-------------2-------2-----------------------2---3------------- +E|--------------------------------------------------------------- + + + +E|-------------0---0---------0---0-----------0---0-----------0--- +B|---------1-----1-----------1-1---------1-----1-----------1----- +G|-----------0-----------0-0-------------0-0---------------0---0- +D|-----2-2-------------2-2---------2---2-------------2---2------- +A|-3-3---------------3-3-----------3-3-------------3---3--------- +E|--------------------------------------------------------------- + + + +E|---0-----0-0-----------0-------0---0-0-------------0---------1- +B|-1-----1-----1---------1-----1-----1-----1-----------1-----0--- +G|-------0-------0-------0---0-----------0---0-----0-------0----- +D|-----2-----------2-----2-2-------2-----------2---2-----0------- +A|-------------------3-3-------------------------3---2----------- +E|--------------------------------------------------------------- + + + +E|-----1---------1-----------1---1-----------1---1-----------1--- +B|---0---------0-------0-------0---------0-----0-----------0---0- +G|-0---------0---------0---0-------------0-0-----------0-----0--- +D|---0-----0-------0-----0-----------0-0-------------0---0------- +A|-2-----2---------2-2-------------2-2-------------2---2--------- +E|--------------------------------------------------------------- + + + +E|-1-----1-1---------1-------------1---1---1-----------------1--- +B|-----0-----0-----------0-------0-------0---0-----------0-----1- +G|-----0-------0---------0-----0-----0---------0-----0-----0----- +D|---0-----------0-----0-----0-------0-----------0-0-----2------- +A|-----------------2-------2-----------------------2---3--------- +E|--------------------------------------------------------------- + + + +E|-0---------------0---0---------0---0-----------0---0----------- +B|-------------1-----1-----------1-1---------1-----1-----------1- +G|---0-----------0-----------0-0-------------0-0---------------0- +D|---------2-2-------------2-2---------2---2-------------2---2--- +A|-----3-3---------------3-3-----------3-3-------------3---3----- +E|--------------------------------------------------------------- + + + +E|-0-----0-----0-0-----------0-------0---0-0-------------0------- +B|-----1-----1-----1---------1-----1-----1-----1-----------1----- +G|---0-------0-------0-------0---0-----------0---0-----0-------2- +D|---------2-----------2-----2-2-------2-----------2---2-----3--- +A|-----------------------3-3-------------------------3---3------- +E|--------------------------------------------------------------- + + + +E|---1---1-----------1-----1-------1-----1-------1-------1------- +B|-1---------1-----1-------1-----1-------1-----1---------1-----1- +G|-------2-------2-------2-----2-------2-----2---------2-----2--- +D|-----3-------3---------3---3---------3---3-----------3---3----- +A|---------3-3---------3-3-----------3-3-----------3-3----------- +E|--------------------------------------------------------------- + + + +E|-1---1-1---------1---------1-1-1-------------1---------0------- +B|-----1---1-------1-------1-------1-1-----------1-----1--------- +G|---2-------2-----2-----2---------2-----2-------2---0-----0----- +D|---3---------3---3---3---------------3---3---3---2------------- +A|---------------3---3-----------------------3---3-----------3-3- +E|--------------------------------------------------------------- + + + +E|---------0---0---------0---0-----------0---0-----------0-----0- +B|-----1-----1-----------1-1---------1-----1-----------1-----1--- +G|-------0-----------0-0-------------0-0---------------0---0----- +D|-2-2-------------2-2---------2---2-------------2---2----------- +A|---------------3-3-----------3-3-------------3---3------------- +E|--------------------------------------------------------------- + + + +E|-----0-0-----------0-------0-----0-------------1---1---1------- +B|---1-----1---------1-----1---------1---------0-------0---0----- +G|---0-------0-------0---0-------------0-----0-----0---------0--- +D|-2-----------2-----2-2---------2---------0-------0-----------0- +A|---------------3-3-----------3---------2----------------------- +E|--------------------------------------------------------------- + + + +E|-----------1---1---1---1-------------------1---1---1---1------- +B|-------0-----0-------0---0-----------0-------0-------0---0----- +G|---0-----0-------0---------0-----0-------0-------0---------0--- +D|-0-----0---------0-----------0-0-------0---------0-----------0- +A|-2---2-------------------------2---2--------------------------- +E|--------------------------------------------------------------- + + + +E|-------------1---0---0-0-0-0-0-1-0---0-1-0-----0-------------0- +B|---------0-----1---1---------------3-----3-3-0-1-3---1-----1--- +G|---0-------0-------0-------------------------------------0----- +D|-0-----2-----------2-----------------------------------2------- +A|-2---3---------------3-----------------------------3----------- +E|--------------------------------------------------------------- + + + +E|---------0-----0-----------0---0-----------0-----0-----0-0----- +B|---------0-1-1---------1-----1-----------1-----1-----1-----1--- +G|-----0-0---------------0-0---------------0---0-------0-------0- +D|---2-2-----------2---2-------------2---2-----------2----------- +A|-3-3-------------3-3-------------3---3------------------------- +E|--------------------------------------------------------------- + + + +E|---0---0-0-0-0-1-0---1---0---------------------1-----------1--- +B|-------1-----------3-1-0---3---1---0---------0-------0-------0- +G|-------0---------------------2-0-2---0-----0---------0---0----- +D|-2-----2---------------------------------0-------0-----0------- +A|-----3---------------------------------2---------2-2----------- +E|--------------------------------------------------------------- + + + +E|-1-----------1---1-----------1---1-----1-1-----------1-----0-1- +B|---------0-----0-----------0---0-----0-----0-----3-------0----- +G|---------0-0-----------0-----0-------0-------0-----------0----- +D|-----0-0-------------0---0---------0-----------0-------0------- +A|---2-2-------------2---2---------------------------2----------- +E|--------------------------------------------------------------- + + + +E|-----0-0-1-1-3---0-1-0-1-3---1-0-0-1---0-0---1---0-----0------- +B|-3-3-----------3-----------1-3-----1-3---3-0---1---3-3---0-3-1- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-----0-----------0-------0-----0-----------0---0-----------0--- +B|-3-1-----1-----1---------3-1-1---------1-----1-----------1----- +G|-------------0---------0-0-------------0-0---------------0---0- +D|-----------2---------2-2---------2---2-------------2---2------- +A|-------3-----------3-3-----------3-3-------------3---3--------- +E|--------------------------------------------------------------- + + + +E|---0-----0-0-------0---0-0-0-0-1-0---0-1-0-----0-------------0- +B|-1-----1-----1---------1-----------3-----3-3-0-1-3---1-----1--- +G|-------0-------0-------0---------------------------------0----- +D|-----2-----------2-----2-------------------------------2------- +A|---------------------3-----------------------------3----------- +E|--------------------------------------------------------------- + + + +E|---------0-----0-----------0---0-----------0-----0-----0-0----- +B|---------0-1-1---------1-----1-----------1-----1-----1-----1--- +G|-----0-0---------------0-0---------------0---0-------0-------0- +D|---2-2-----------2---2-------------2---2-----------2----------- +A|-3-3-------------3-3-------------3---3------------------------- +E|--------------------------------------------------------------- + + + +E|---0---0-0-0-0-1-0---1---0---------------------1-----------1--- +B|-------1-----------3-1-0---3---1---0---------0-------0-------0- +G|-------0---------------------2-0-2---0-----0---------0---0----- +D|-2-----2---------------------------------0-------0-----0------- +A|-----3---------------------------------2---------2-2----------- +E|--------------------------------------------------------------- + + + +E|-1-----------1---1-----------1---1-----1-1-----------1-----0-1- +B|---------0-----0-----------0---0-----0-----0-----3-------0----- +G|---------0-0-----------0-----0-------0-------0-----------0----- +D|-----0-0-------------0---0---------0-----------0-------0------- +A|---2-2-------------2---2---------------------------2----------- +E|--------------------------------------------------------------- + + + +E|-----0-0-1-1-3---1-0-0-1-3-----1-0-0-1-0-0---1---0-----0------- +B|-3-3-----------3-----------1-3-------1-3-3-0---1---3-3---0-3-1- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-----0-----------0-----------0---0-----------0---0-----------0- +B|-3-1-----1-----1---------3---1-1---------1-----1-----------1--- +G|-------------0---------0---0-------------0-0---------------0--- +D|-----------2---------2-2-----------2---2-------------2---2----- +A|-------3-----------3-3-------------3-3-------------3---3------- +E|--------------------------------------------------------------- + + + +E|-----0-----0-0---------0-------0-0---0-------0-----------1----- +B|---1-----1-----1-------1-----1-----1---1-------1-------0-----0- +G|-0-------0-------0-----0---0-------0-----0-----0-----0-----0--- +D|-------2-----------2---2-2-------------2---2-2-----0---------0- +A|---------------------3-3-------------------------2-------3-2--- +E|--------------------------------------------------------------- + + + +E|-1---------1-----------1---1-----------1---1-----------1---1--- +B|---------0-------0-------0---------0-----0-----------0---0----- +G|-------0---------0---0-------------0-0-----------0-----0------- +D|-----0-------0-----0-----------0-0-------------0---0---------0- +A|---2---------2-2-------------2-2-------------2---2------------- +E|--------------------------------------------------------------- + + + +E|---1-1---------1-------------1---1---1-----------------1---0--- +B|-0-----0-----------0-------0-------0---0-----------0-----1----- +G|-0-------0---------0-----0-----0---------0-----0-----0-------0- +D|-----------0-----0-----0-------0-----------0-0-----2----------- +A|-------------2-------2-----------------------2---3------------- +E|--------------------------------------------------------------- + + + +E|-------------0---0---------0---0-----------0---0-----------0--- +B|---------1-----1-----------1-1---------1-----1-----------1----- +G|-----------0-----------0-0-------------0-0---------------0---0- +D|-----2-2-------------2-2---------2---2-------------2---2------- +A|-3-3---------------3-3-----------3-3-------------3---3--------- +E|--------------------------------------------------------------- + + + +E|---0-----0-0-----------0-------0---0-0-------------0---------1- +B|-1-----1-----1---------1-----1-----1-----1-----------1-----0--- +G|-------0-------0-------0---0-----------0---0-----0-------0----- +D|-----2-----------2-----2-2-------2-----------2---2-----0------- +A|-------------------3-3-------------------------3---2----------- +E|--------------------------------------------------------------- + + + +E|-----1---------1-----------1---1-----------1---1-----------1--- +B|---0---------0-------0-------0---------0-----0-----------0---0- +G|-0---------0---------0---0-------------0-0-----------0-----0--- +D|---0-----0-------0-----0-----------0-0-------------0---0------- +A|-2-----2---------2-2-------------2-2-------------2---2--------- +E|--------------------------------------------------------------- + + + +E|-1-----1-1---------1-------------1---1---1-----------------1--- +B|-----0-----0-----------0-------0-------0---0-----------0-----1- +G|-----0-------0---------0-----0-----0---------0-----0-----0----- +D|---0-----------0-----0-----0-------0-----------0-0-----2------- +A|-----------------2-------2-----------------------2---3--------- +E|--------------------------------------------------------------- + + + +E|-0---------------0---0---------0---0-----------0---0----------- +B|-------------1-----1-----------1-1---------1-----1-----------1- +G|---0-----------0-----------0-0-------------0-0---------------0- +D|---------2-2-------------2-2---------2---2-------------2---2--- +A|-----3-3---------------3-3-----------3-3-------------3---3----- +E|--------------------------------------------------------------- + + + +E|-0-----0-----0-0-----------0-------0---0-0-------------0------- +B|-----1-----1-----1---------1-----1-----1-----1-----------1----- +G|---0-------0-------0-------0---0-----------0---0-----0-------2- +D|---------2-----------2-----2-2-------2-----------2---2-----3--- +A|-----------------------3-3-------------------------3---3------- +E|--------------------------------------------------------------- + + + +E|---1---1-----------1-----1-------1-----1-------1-------1------- +B|-1---------1-----1-------1-----1-------1-----1---------1-----1- +G|-------2-------2-------2-----2-------2-----2---------2-----2--- +D|-----3-------3---------3---3---------3---3-----------3---3----- +A|---------3-3---------3-3-----------3-3-----------3-3----------- +E|--------------------------------------------------------------- + + + +E|-1---1-1---------1---------1-1-1-------------1---------0------- +B|-----1---1-------1-------1-------1-1-----------1-----1--------- +G|---2-------2-----2-----2---------2-----2-------2---0-----0----- +D|---3---------3---3---3---------------3---3---3---2------------- +A|---------------3---3-----------------------3---3-----------3-3- +E|--------------------------------------------------------------- + + + +E|---------0---0---------0---0-----------0---0-----------0-----0- +B|-----1-----1-----------1-1---------1-----1-----------1-----1--- +G|-------0-----------0-0-------------0-0---------------0---0----- +D|-2-2-------------2-2---------2---2-------------2---2----------- +A|---------------3-3-----------3-3-------------3---3------------- +E|--------------------------------------------------------------- + + + +E|-----0-0-----------0-------0-----0-------------1---1---1------- +B|---1-----1---------1-----1---------1---------0-------0---0----- +G|---0-------0-------0---0-------------0-----0-----0---------0--- +D|-2-----------2-----2-2---------2---------0-------0-----------0- +A|---------------3-3-----------3---------2----------------------- +E|--------------------------------------------------------------- + + + +E|-----------1---1---1---1-------------------1---1---1---1------- +B|-------0-----0-------0---0-----------0-------0-------0---0----- +G|---0-----0-------0---------0-----0-------0-------0---------0--- +D|-0-----0---------0-----------0-0-------0---------0-----------0- +A|-2---2-------------------------2---2--------------------------- +E|--------------------------------------------------------------- + + + +E|-------------1---0-0---0---------0-0-------0---------0--------- +B|---------0-----1-----1----------------------------------------- +G|---0-------0---------------0---------------------------------0- +D|-0-----2---------------------2-2-----2-0-2---2-2-0-0---2-2-0--- +A|-2---3-------------------3-------------------------3---------3- +E|--------------------------------------------------------------- + + + +E|---0---0-----0---0-----0---------1-------1-1-------0-1-----0--- +B|-1---------1--------------------------------------------------- +G|---------0-------------------------------0---------0----------- +D|-----2---2-----2---0-2---2-2-0-0---2-0-0-------2-0---2-0-2---2- +A|-------------------------------------2-------2----------------- +E|-------------------------------3-------3----------------------- + + + +E|-------3---------1-3---------1-0---------0---------0---------0- +B|-------------------------------------------------------------1- +G|-----0-------0-0-------0-----------------------------------0--- +D|-2-0-0---2-0---3-----3---2-3-----2-3-0-2---2-2-0-0---2-2-0----- +A|-------------------------------------------------3---------3--- +E|--------------------------------------------------------------- + + + +E|---0---0---0-----0---------0---------0---0---0---0-----0------- +B|-------1-----------------------------1-------1----------------- +G|-----0-----------------------------0-------0------------------- +D|-2---2---2---0-2---2-2-0-0---2-2-0-----2---2---2---0-2---2-2-0- +A|-------------------------3---------3--------------------------- +E|--------------------------------------------------------------- + + + +E|---1---------1-1-------5-1-----5-5---------3-5-------3-3------- +B|--------------------------------------------------------------- +G|-------------0---------0--------------------------------------- +D|-0---2-0---0-------3-0---0-3-3-----0-0-2-3-----0-2-2-----2-0-2- +A|---------2-------2-----------------------------3---------3----- +E|-3---------3--------------------------------------------------- + + + +E|-1-3-----1-------------------0---0-0-----------0---------1----- +B|---------------------------1---1-----1-------1---------0-----0- +G|-------------------------0-------0-----0-----0-------0-----0--- +D|-----2-0---0-------0-----2---------2-----2-------2-0---------0- +A|-----0-2-3-0-3-2-3---3-3-------------------3-----2---------2--- +E|--------------------------------------------------------------- + + + +E|-1---------1-----------1---1-----------1---1-----------1---1--- +B|---------0-------0-------0---------0-----0-----------0---0----- +G|-------0---------0---0-------------0-0-----------0-----0------- +D|-----0-------0-----0-----------0-0-------------0---0---------0- +A|---2---------2-2-------------2-2-------------2---2------------- +E|--------------------------------------------------------------- + + + +E|---1-1---------1-------------1---1---1-----------------1---0--- +B|-0-----0-----------0-------0-------0---0-----------0-----1----- +G|-0-------0---------0-----0-----0---------0-----0-----0-------0- +D|-----------0-----0-----0-------0-----------0-0-----2----------- +A|-------------2-------2-----------------------2---3------------- +E|--------------------------------------------------------------- + + + +E|-------------0---0---------0---0-----------0---0-----------0--- +B|---------1-----1-----------1-1---------1-----1-----------1----- +G|-----------0-----------0-0-------------0-0---------------0---0- +D|-----2-2-------------2-2---------2---2-------------2---2------- +A|-3-3---------------3-3-----------3-3-------------3---3--------- +E|--------------------------------------------------------------- + + + +E|---0-----0-0-----------0-------0---0-0-------------0---------1- +B|-1-----1-----1---------1-----1-----1-----1-----------1-----0--- +G|-------0-------0-------0---0-----------0---0-----0-------0----- +D|-----2-----------2-----2-2-------2-----------2---2-----0------- +A|-------------------3-3-------------------------3---2----------- +E|--------------------------------------------------------------- + + + +E|-----1---------1-----------1---1-----------1---1-----------1--- +B|---0---------0-------0-------0---------0-----0-----------0---0- +G|-0---------0---------0---0-------------0-0-----------0-----0--- +D|---0-----0-------0-----0-----------0-0-------------0---0------- +A|-2-----2---------2-2-------------2-2-------------2---2--------- +E|--------------------------------------------------------------- + + + +E|-1-----1-1---------1-------------1---1---1-----------------1--- +B|-----0-----0-----------0-------0-------0---0-----------0-----1- +G|-----0-------0---------0-----0-----0---------0-----0-----0----- +D|---0-----------0-----0-----0-------0-----------0-0-----2------- +A|-----------------2-------2-----------------------2---3--------- +E|--------------------------------------------------------------- + + + +E|-0---------------0---0---------0---0-----------0---0----------- +B|-------------1-----1-----------1-1---------1-----1-----------1- +G|---0-----------0-----------0-0-------------0-0---------------0- +D|---------2-2-------------2-2---------2---2-------------2---2--- +A|-----3-3---------------3-3-----------3-3-------------3---3----- +E|--------------------------------------------------------------- + + + +E|-0-----0-----0-0-----------0-------0---0-0-------------0------- +B|-----1-----1-----1---------1-----1-----1-----1-----------1----- +G|---0-------0-------0-------0---0-----------0---0-----0-------2- +D|---------2-----------2-----2-2-------2-----------2---2-----3--- +A|-----------------------3-3-------------------------3---3------- +E|--------------------------------------------------------------- + + + +E|---1---1-----------1-----1-------1-----1-------1-------1------- +B|-1---------1-----1-------1-----1-------1-----1---------1-----1- +G|-------2-------2-------2-----2-------2-----2---------2-----2--- +D|-----3-------3---------3---3---------3---3-----------3---3----- +A|---------3-3---------3-3-----------3-3-----------3-3----------- +E|--------------------------------------------------------------- + + + +E|-1---1-1---------1---------1-1-1-------------1---------0------- +B|-----1---1-------1-------1-------1-1-----------1-----1--------- +G|---2-------2-----2-----2---------2-----2-------2---0-----0----- +D|---3---------3---3---3---------------3---3---3---2------------- +A|---------------3---3-----------------------3-3-------------3-3- +E|--------------------------------------------------------------- + + + +E|---------0---0---------0---0-----------0---0-----------0-----0- +B|-----1-----1-----------1-1---------1-----1-----------1-----1--- +G|-------0-----------0-0-------------0-0---------------0---0----- +D|-2-2-------------2-2---------2---2-------------2---2----------- +A|---------------3-3-----------3-3-------------3---3------------- +E|--------------------------------------------------------------- + + + +E|-----0-0-----------0-------0-----0-------------1---1---1------- +B|---1-----1---------1-----1---------1---------0-------0---0----- +G|---0-------0-------0---0-------------0-----0-----0---------0--- +D|-2-----------2-----2-2---------2---------0-------0-----------0- +A|---------------3-3-----------3---------2----------------------- +E|--------------------------------------------------------------- + + + +E|-----------1---1---1---1-------------------1---1---1---1------- +B|-------0-----0-------0---0-----------0-------0-------0---0----- +G|---0-----0-------0---------0-----0-------0-------0---------0--- +D|-0-----0---------0-----------0-0-------0---------0-----------0- +A|-2---2-------------------------2---2--------------------------- +E|--------------------------------------------------------------- + + + +E|-------------1---0-------0---3---5---3-----3-5---1---3-----0-1- +B|---------0-----1-----1----------------------------------------- +G|---0-------0-------0-------0---2---0---2-0---------0----------- +D|-0-----2---------------2-----------------------3-------2-3----- +A|-2---3-------------3------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------0-------------------0-----1---0-----0-1-------0--------- +B|---3-------1-3---0---1-------0-------------------3---------3-1- +G|--------------------------------------------------------------- +D|-0---2---0-------------2-------3---2---2-3-----0---2-----0----- +A|---------3-----2---3-----2-----------------------------3------- +E|--------------------------------------------------------------- + + + +E|-----------------------------3---5---3-----3-5---1---3-----0-1- +B|---0---1-----0------------------------------------------------- +G|---------------2---0---2-0-0---2---0---2-0---------0----------- +D|-----------------------------------------------3-------2-3----- +A|-2---3---0-2---------0----------------------------------------- +E|-----------------3-------3------------------------------------- + + + +E|-------0-------------------0-----1---0-----0-1-------0--------- +B|---3-------1-3---0---1-------0-------------------3---------3-1- +G|--------------------------------------------------------------- +D|-0---2---0-------------2-------3---2---2-3-----0---2-----0----- +A|---------3-----2---3-----2-----------------------------3------- +E|--------------------------------------------------------------- + + + +E|-----------------------------3---5---5-3-----3-5---1-5---1-3--- +B|---0---1-----0------------------------------------------------- +G|---------------2---0---2-0-0---2---0-----0-2-----------0------- +D|-------------------------------------------------3-----------2- +A|-2---3---0-2---------0----------------------------------------- +E|-----------------3-------3------------------------------------- + + + +E|---0-1---1-----0-------------------------0---1---1-0-----0-1--- +B|-----------3-----3---1-3---0-3---1-----0----------------------- +G|--------------------------------------------------------------- +D|-3-----0-----2-----0-----------------2-----3---2-----2-3-----0- +A|-------------------3-----2-----3---2--------------------------- +E|--------------------------------------------------------------- + + + +E|-1---0-------------------------------------------3---5---5-3--- +B|-3-3-------1-3-3---0---0-1-------0---0------------------------- +G|-------------------------------2-------0---2-0-0---2---0-----0- +D|---2-----0----------------------------------------------------- +A|-------3---------2---3-----0-2-----------0--------------------- +E|-----------------------------------3---------3----------------- + + + +E|---3-5---1-5---1-3-----0-1---1-----0-------------------------0- +B|-------------------------------3-----3---1-3---0-3---1-----0--- +G|-2-----------0------------------------------------------------- +D|-------3-----------2-3-----0-----2-----0-----------------2----- +A|---------------------------------------3-----2-----3---2------- +E|--------------------------------------------------------------- + + + +E|---1---1-0-----0-1---1---0------------------------------------- +B|---------------------3-3-------1-3-3---0---0-1-------0---0----- +G|---------------------------------------------------2-------0--- +D|-3---2-----2-3-----0---2-----0--------------------------------- +A|---------------------------3---------2---3-----0-2-----------0- +E|-------------------------------------------------------3------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-2-----0------------------------------------------------------- +D|-----------0-3---2-0-0-3-2-2-0-0-2---0-------------------0-3--- +A|---------2-----2-------------------3---3-2-3-3-0-2---2-0-----2- +E|---3-3-----3---------------------------------------3-----3----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-2-0-0-3-2-2-0-0-2---0-------------------0-3---2-0-0-3-2-0----- +A|-------------------3---3-2-3-3-0-2---2-0-----2-------------0-2- +E|-----------------------------------3-----3-------------3-----3- + + + +E|-----------------------0-1---0-0-1-1---3-0-1-1-0-3-1---0---0--- +B|---------------------3---3-3---------3-------------1-3---1---3- +G|--------------------------------------------------------------- +D|-----0-----2-3-0-2-3------------------------------------------- +A|-3-0---2-3----------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-1-0-0---1-0-------------0-----0------------------------------- +B|-------3-----0-1-3-3-0-1---3-3-1-3-1-------1-1----------------- +G|-----------------------------------------0-0-0-0-----------0-0- +D|---------------------------------------2-2-----2-0-2-0---0-0-0- +A|-------------------------------------3-----------------2-2----- +E|---------------------------------------------------3----------- + + + +E|--------------------------------------------------------------- +B|---------------1-1--------------------------------------------- +G|-------------0-0-0-0-----------0-0----------------------------- +D|-0---------2-2-----2-0-2-0---0-0-0-0---------------2-2---2-2-2- +A|-2-0-3-2-0-----------------2-2-----2-0-3-2-0-3-3-3-3---3------- +E|-----------------------3--------------------------------------- + + + +E|--------------------------------------------------------------- +B|---------1---1-1-1-1---1--------------------------------------- +G|-0-0-0-0---0-0-------0-0-0-0-0-0-----------------------------0- +D|---2-------------------------2---2-2-2-2-2---------0---0-0-0-0- +A|-------------------------------------------2-2-2-2-2-2--------- +E|---------------------------------------3----------------------- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------------------1---1-1-1- +G|-0---0-0-0---0-------------------------------0-0-0-0---0-0----- +D|---0-----0-0---0-0-0-----0---------2-2-2-2-2---2--------------- +A|---------------------2-2-2-2-3-2-2----------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-1---1--------------------------------------------------------- +G|---0-0-0-0-0-0-----------------------------0-0---0-0-0---0----- +D|-----------2---2-2-2-2-2---------0---0-0-0-0---0-----0-0---0-0- +A|-------------------------2-2-2-2-2-2--------------------------- +E|---------------------3----------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-0-----0-------------0-3---2-0-0-3-2-2-0-0-2---0--------------- +A|---2-2---2-2-2---2-2-----2-------------------3---3-2-3-3-0-2--- +E|---------------3---------------------------------------------3- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-----0-3---2-0-0-3-2-2-0-0-2---0-------------------0-3---2-0-0- +A|-2-0-----2-------------------3---3-2-3-3-0-2---2-0-----2------- +E|---------------------------------------------3----------------- + + + +E|-------------------------------------0-1---0-0-1-1---3-0-1-1-0- +B|-----------------------------------3---3-3---------3----------- +G|--------------------------------------------------------------- +D|-3---2-0---------0-----2---3-0-2-3----------------------------- +A|---------0-2-3-0---2-3----------------------------------------- +E|---3-3-------------------3------------------------------------- + + + +E|-3-1---0---0---1-0-0---1-0-------------0-----0----------------- +B|---1-3---1---3-------3-----0-1-3-3-0-1---3-3-1-3-----1--------- +G|--------------------------------------------------------------- +D|-------------------------------------------------0-2---3-0-0-2- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---------0-----0----------------------------------------------- +D|-2-3-3-0-2-3-3-2-3-0-2-2---3-0-2-2-0-3-2---0-0---2-0-0-2-0----- +A|-----------------3-------3---------------2-3---2-3-----3---3-3- +E|--------------------------------------------------------------- + + + +E|-------0-------0-------1-1-----------------1-1-------------0-0- +B|-----1---1-----------0-----0-------------0-------0-------1----- +G|---0-----0---------0---------0---------0-------0-------0------- +D|-2-------------2-0-------------0-----0---------0-----2--------- +A|-----------2-3-------------------2-2-------------2-3----------- +E|--------------------------------------------------------------- + + + +E|-----------------0---0---------1-1-------------1--------------- +B|-1-------------1-----1-------0-------0-------0---------------0- +G|---0---------0-----0-------0-------0-------0-------------0-0--- +D|-----2-----2-----------0-2---------0-----0---------0---0------- +A|-------3-3---------2---3-------------2-2---------2---2--------- +E|--------------------------------------------------------------- + + + +E|---1-1-------1-------1-------------1---1-1---1----------------- +B|-0-----------0-----0-----------0-----0---0-----0-------------0- +G|-------------0---0---------0-----0---------0-----0---------0--- +D|---------0-----0-----------0-0-----------0---------0-----0----- +A|-------2---2-----------2-2---------------------------2-2------- +E|--------------------------------------------------------------- + + + +E|-1-1-------1-------------0---------0---------0-0---0----------- +B|-------0-------0-----1---------1-----------1-----1---1-----1--- +G|-----0-----------0-0---------0-----------0-------0-----0-----0- +D|-----0-------2---------0---2-----------2-------------2---2----- +A|-------2-3-----------------------3---3------------------------- +E|--------------------------------------------------------------- + + + +E|-0---------1-1-------------1-1-1-------------1-------0--------- +B|---------0-------0-------0-------0-0---------0-----1-------1--- +G|-------0-----0---------0---------0-----0---0-----0-------0----- +D|-2---0---------0-----0---------------0---0-0---2-------2------- +A|---2-3-----------2-2-----------------------2-3---------------3- +E|--------------------------------------------------------------- + + + +E|-0---------0-0---0-----------0---------1-1-------------1------- +B|---------1-----1---1-----1-----------0-------0-------0--------- +G|-------0-------0-----0-----0-------0-------0-------0----------- +D|-----2-------------2---2-----2---0---------0-----0---------0--- +A|---3---------------------------2-3-----------2-2---------2---2- +E|--------------------------------------------------------------- + + + +E|-----------1-1-------1-------1-------------1---1-1---1--------- +B|-------0-0-----------0-----0-----------0-----0---0-----0------- +G|---0-0---------------0---0---------0-----0---------0-----0----- +D|-0---------------0-----0-----------0-0-----------0---------0-0- +A|---------------2---2-----------2-2----------------------------- +E|--------------------------------------------------------------- + + + +E|-----------1---0---------------0---0-------------0-0----------- +B|---0---------1-------------1-----1-----------1---1------------- +G|-------0---0-----------0-----0-------------0---0---------0----- +D|---------2---------2-----2-------------2-----2-------------2-2- +A|-2---3-----------3---3---------------3---3-----------3-3------- +E|--------------------------------------------------------------- + + + +E|-----0---0-0-------------0-0---0-----------0---------1-1------- +B|-1-----1---1-----------1-----1---1-----1-----------0-------0--- +G|---0-----------0-----0-------0-----0-----0-------0-------0----- +D|-------------2-----2-------------2---2-----2---0---------0----- +A|---------------3-3---------------------------2-3-----------2-2- +E|--------------------------------------------------------------- + + + +E|-------1-----------------1-1-------1-------1-------------1---1- +B|-----0---------------0-0-----------0-----0-----------0-----0--- +G|---0-------------0-0---------------0---0---------0-----0------- +D|-0---------0---0---------------0-----0-----------0-0----------- +A|---------2---2---------------2---2-----------2-2--------------- +E|--------------------------------------------------------------- + + + +E|-1---1---------------------1-1-1-1---------------------1---0--- +B|-0-----0---------0---------0-------0-0-------0-----------1----- +G|---0-----0-----------0---0---------0---0---------0---0--------- +D|-0---------0-0---------0-----------0-----0-0-------2----------- +A|---------------2---2-------------------------3-2-------------3- +E|--------------------------------------------------------------- + + + +E|-------0---0-------------0-0-------------0-0---------------0-0- +B|-----1---1-----------1-1-------------1---1-------------1-1----- +G|---0-0-------------0-0-------------0---0-----------0---0------- +D|-2-2-------------2-2-------------2-2-------------2---2--------- +A|-3-----------3-3-------------3-3-------------3-3--------------- +E|--------------------------------------------------------------- + + + +E|-0-0-----------0-------------0-0---0-----------0---------1-1--- +B|-----1-1-----------1-------1-----1---1-----1-----------0------- +G|-----0---0---------0-----0-------0-----0-----0-------0-------0- +D|-----2-----2---------2-2-------------2---2-----2---0---------0- +A|-------------3---3-------------------------------2-3----------- +E|--------------------------------------------------------------- + + + +E|-----------1-----------------1-1-------1-------1-------------1- +B|-0-------0---------------0-0-----------0-----0-----------0----- +G|-------0-------------0-0---------------0---0---------0-----0--- +D|-----0---------0---0---------------0-----0-----------0-0------- +A|-2-2---------2---2---------------2---2-----------2-2----------- +E|--------------------------------------------------------------- + + + +E|---1-1---1---------------------1-1-1-1---------------------1--- +B|-0---0-----0---------0---------0-------0-0-------0-----------1- +G|-------0-----0-----------0---0---------0---0---------0---0----- +D|-----0---------0-0---------0-----------0-----0-0-------2------- +A|-------------------2---2-------------------------3-2----------- +E|--------------------------------------------------------------- + + + +E|-0---------0---0-------------0-0-------------0-0--------------- +B|---------1---1-----------1-1-------------1---1-------------1-1- +G|-------0-0-------------0-0-------------0---0-----------0---0--- +D|-----2-2-------------2-2-------------2-2-------------2---2----- +A|---3-3-----------3-3-------------3-3-------------3-3----------- +E|--------------------------------------------------------------- + + + +E|-0-0-0-0-----------0-------------0-0---0-----------0---------1- +B|---------1-1-----------1-------1-----1---1-----1-----------1--- +G|---------0---0---------0-----0-------0-----0-----0-------2----- +D|---------2-----2---------2-2-------------2---2-----2---3------- +A|-----------------3---3-------------------------------3-3------- +E|--------------------------------------------------------------- + + + +E|---1-----------1-----1-------1-----1-------1-------1-------1--- +B|-------1-----1-------1-----1-------1-----1---------1-----1----- +G|---2-------2-------2-----2-------2-----2---------2-----2-----2- +D|-3-------3---------3---3---------3---3-----------3---3-------3- +A|-----3-3---------3-3-----------3-3-----------3-3--------------- +E|--------------------------------------------------------------- + + + +E|-1-1---------1---------1-1-1-------------1---------0----------- +B|-1---1-------1-------1-------1-1-----------1-----1------------- +G|-------2-----2-----2---------2-----2-------2---0-----0--------- +D|---------3---3---3---------------3---3---3---2-------------2-2- +A|-----------3---3-----------------------3---3-----------3-3----- +E|--------------------------------------------------------------- + + + +E|-----0---0---------0---0-----------0---0-----------0-----0----- +B|-1-----1-----------1-1---------1-----1-----------1-----1-----1- +G|---0-----------0-0-------------0-0---------------0---0-------0- +D|-------------2-2---------2---2-------------2---2-----------2--- +A|-----------3-3-----------3-3-------------3---3----------------- +E|--------------------------------------------------------------- + + + +E|-0-0-----------0-------0-----0-----1-------------------------1- +B|-----1---------1-----1---------1-----0-------------------0----- +G|-------0-------0---0-------------0-----0-----------------0-0--- +D|---------2-----2-2---------2----------------------------------- +A|-----------3-3-----------3---------------3-0-------3-0-0-3----- +E|---------------------------------------------1-1-1------------- + + + +E|---1-----------1---1-1-----1-------------------------1---1----- +B|-0-----------0---0-------0---0-------------------0-----0------- +G|-----------0---0-----0---------0-----------------0-0----------- +D|--------------------------------------------------------------- +A|-----0-3-0---3-------3-0---------3-0-------3-0-0-3---------0-3- +E|-----1-1-----------------1-----------1-1-1-----------------1-1- + + + +E|-------1---1-1-----1-------------------------1---1-----------1- +B|-----0---0-------0---0-------------------0-----0-----------0--- +G|---0---0-----0---------0-----------------0-0-------------0---0- +D|--------------------------------------------------------------- +A|-0---3-------3-0---------3-0-------3-0-0-3---------0-3-0---3--- +E|-----------------1-----------1-1-1-----------------1-1--------- + + + +E|---1-1-----0-------------0------- +B|-0-------0---1---------1--------- +G|-----0---------0-----------0----- +D|-----------------2-----------2--- +A|-----3-0-----------3-----------3- +E|---------1-----------3----------- + diff --git a/guitar/new.lic b/guitar/new.lic new file mode 100644 index 0000000..aee7002 --- /dev/null +++ b/guitar/new.lic @@ -0,0 +1,3 @@ +BEGIN LICENSE +6'`5Y>'T:>GAX>GA\>'UX>GAX>'LL<`"K +END LICENSE diff --git a/guitar/notepath.cpp b/guitar/notepath.cpp new file mode 100644 index 0000000..d6f75df --- /dev/null +++ b/guitar/notepath.cpp @@ -0,0 +1,12 @@ +#include + +String NotePath::toString(void) +{ + String strNotePath; + + for(int index=0;index +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class NotePath; +typedef Array NotePaths; + +class NotePath : public Block +{ +public: + String toString(void); +}; +#endif diff --git a/guitar/ordering.hpp b/guitar/ordering.hpp new file mode 100644 index 0000000..81ab6b1 --- /dev/null +++ b/guitar/ordering.hpp @@ -0,0 +1,73 @@ +#ifndef _GUITAR_ORDERING_HPP_ +#define _GUITAR_ORDERING_HPP_ + +class Ordering +{ +public: + Ordering(int criteria=0,int value=0); + virtual ~Ordering(); + bool operator<(const Ordering &ordering)const; + bool operator>(const Ordering &ordering)const; + bool operator==(const Ordering &ordering)const; + int getCriteria(void)const; + void setCriteria(int criteria); + int getValue(void)const; + void setValue(int value); +private: + int mCriteria; + int mValue; +}; + +inline +Ordering::Ordering(int criteria,int value) +: mCriteria(criteria), mValue(value) +{ +} + +inline +Ordering::~Ordering() +{ +} + +inline +bool Ordering::operator<(const Ordering &ordering)const +{ + return mCriteria(const Ordering &ordering)const +{ + return mCriteria>ordering.mCriteria; +} + +inline +bool Ordering::operator==(const Ordering &ordering)const +{ + return mCriteria==ordering.mCriteria; +} + +inline +int Ordering::getCriteria(void)const +{ + return mCriteria; +} + +inline +void Ordering::setCriteria(int criteria) +{ + mCriteria=criteria; +} + +inline +int Ordering::getValue(void)const +{ + return mValue; +} + +inline +void Ordering::setValue(int value) +{ + mValue=value; +} +#endif diff --git a/guitar/permanent-2.00.lic.txt b/guitar/permanent-2.00.lic.txt new file mode 100644 index 0000000..09805ed --- /dev/null +++ b/guitar/permanent-2.00.lic.txt @@ -0,0 +1,6 @@ +BEGIN LICENSE +6'`5Z>'@:>GAX>GA]>GMX>GAX>'LL?0"K +END LICENSE + + + diff --git a/guitar/permanent.lic b/guitar/permanent.lic new file mode 100644 index 0000000..09805ed --- /dev/null +++ b/guitar/permanent.lic @@ -0,0 +1,6 @@ +BEGIN LICENSE +6'`5Z>'@:>GAX>GA]>GMX>GAX>'LL?0"K +END LICENSE + + + diff --git a/guitar/registration.cpp b/guitar/registration.cpp new file mode 100644 index 0000000..2b6ab23 --- /dev/null +++ b/guitar/registration.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include + +SmartPointer Registration::smRegistration; + +Registration::Registration() +: mRegistrationKeyName(STRING_REGISTRATIONKEYNAME), + mSettingsLicenseKey(STRING_SETTINGSLICENSE) +{ +} + +Registration::~Registration() +{ +} + +Registration &Registration::getInstance() +{ + if(!smRegistration.isOkay()) + { + smRegistration=::new Registration(); + smRegistration.disposition(PointerDisposition::Delete); + } + return *smRegistration; +} + +bool Registration::hasGID(void)const +{ + FileHandle gidFile; + return gidFile.open("install.gid",FileHandle::Read,FileHandle::ShareRead,FileHandle::Open,FileHandle::Hidden); +} + +bool Registration::hasLicense(void)const +{ + RegKey regKeyRegistration; + String strLicense; + + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + return strLicense.isNull()?false:true; +} + +bool Registration::getLicense(License &license)const +{ + String strLicense; + RegKey regKeyRegistration; + if(!regKeyRegistration.openKey(mRegistrationKeyName))return false; + regKeyRegistration.queryValue(mSettingsLicenseKey,strLicense); + license.fromString(strLicense); + return true; +} + +bool Registration::applyLicense(Block &strLicenseLines) +{ + RegKey regKeyRegistration; + License license; + + license.fromLines(strLicenseLines); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,license.getUUEncodedLicense()); + return true; +} + +bool Registration::applyLicense(const String &uuencodedLicense) +{ + RegKey regKeyRegistration; + License license; + + license.fromString(uuencodedLicense); + if(!license.isValid())return false; + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + regKeyRegistration.setValue(mSettingsLicenseKey,uuencodedLicense); + return true; +} + +bool Registration::create30DayLicense(void)const +{ + createLicense(30); + return true; +} + +bool Registration::create15DayLicense(void)const +{ + createLicense(15); + return true; +} + +bool Registration::createPermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + +License Registration::generatePermanentLicense(void)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + License license; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Permanent,0); + license.fromString(strLicense); + return license; +} + +bool Registration::removeLicense(void) +{ + RegKey regKeyRegistration; + return regKeyRegistration.deleteKey(mRegistrationKeyName); +} + +bool Registration::createLicense(int days)const +{ + VersionInfo versionInfo; + SystemTime issueDate; + String strLicense; + String strVersion; + RegKey regKeyRegistration; + FileHandle gidFile; + + if(!regKeyRegistration.openKey(mRegistrationKeyName)) + { + regKeyRegistration.createKey(mRegistrationKeyName,""); + regKeyRegistration.openKey(mRegistrationKeyName); + } + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + strLicense=License::generate(strVersion,issueDate,License::Expires,days); + regKeyRegistration.setValue(mSettingsLicenseKey,strLicense); + gidFile.open("install.gid",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite,FileHandle::Hidden); + return true; +} + diff --git a/guitar/registry.cpp b/guitar/registry.cpp new file mode 100644 index 0000000..ecf9669 --- /dev/null +++ b/guitar/registry.cpp @@ -0,0 +1,191 @@ +#include +#include + +Registry::Registry(void) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mRegKeyHistory(RegKey::CurrentUser), + mSettingsAction(STRING_SETTINGSACTION), + mSettingsMicrosecondsPerQuarterNote(STRING_SETTINGSMICROSECONDSPERQUARTERNOTE), + mSettingsInstrument(STRING_SETTINGSINSTRUMENT), + mSettingsNoteLetters(STRING_SETTINGSNOTELETTERS), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT) +{ + guarantee(); + getCacheNames(); +} + +Registry::Registry(const Registry &someRegistry) +: mRegistryKeyName(STRING_REGISTRYKEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsMIDIOutput(STRING_SETTINGSMIDIOUTPUT), + mRegKeyHistory(RegKey::CurrentUser) +{ + *this=someRegistry; +} + +Registry::~Registry() +{ +} + +Registry &Registry::operator=(const Registry &/*registry*/) +{ + return *this; +} + +void Registry::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +void Registry::guarantee(void) +{ + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setShowAction(GlobalDefs::ShowAction); + setShowNotes(GlobalDefs::ShowNotes); + setMicrosecondsPerQuarterNote(GlobalDefs::MicrosecondsPerQuarterNote); + setMIDIOutputDevice("MIDIMAPPER"); + } + Instrument instrument=getInstrument(); + if(!instrument.isOkay())setInstrument(Instruments()[0]); +} + +bool Registry::isOkay(void)const +{ + return mRegKeyHistory.isOkay(); +} + +bool Registry::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool Registry::setHistory(Block &nameList) +{ + removeHistory(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;indexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif +#ifndef _GUITAR_GUITAR_HPP_ +#include +#endif + +class Registry +{ +public: + Registry(void); + Registry(const Registry ®istry); + virtual ~Registry(); + Registry &operator=(const Registry ®istry); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool removeHistory(const String &strName); + bool getShowNotes(void); + void setShowNotes(bool showNoteLetters); + bool getShowAction(void)const; + void setShowAction(bool showAction); + int getMicrosecondsPerQuarterNote(void)const; + void setMicrosecondsPerQuarterNote(int microsecondsPerQuarterNote); + long getMillisecondsPerQuarterNote(void)const; + Instrument getInstrument(void)const; + void setInstrument(Instrument instrument); + String getMIDIOutputDevice(void)const; + void setMIDIOutputDevice(const String &midiOutputDevice); + bool isOkay(void)const; +private: + enum {MaxCachedNames=7}; + void guarantee(void); + void getCacheNames(void); + bool removeHistory(void); + + Block mCachedNames; + String mHistoryKeyName; + String mHistoryKeyShortName; + String mRegistryKeyName; + String mSettingsKeyName; + String mSettingsAction; + String mSettingsNoteLetters; + String mSettingsMicrosecondsPerQuarterNote; + String mSettingsInstrument; + String mSettingsMIDIOutput; + RegKey mRegKeyHistory; + RegKey mRegKeySettings; +}; + +inline +long Registry::getMillisecondsPerQuarterNote(void)const +{ + return getMicrosecondsPerQuarterNote()/1000; +} +#endif diff --git a/guitar/requirement.hpp b/guitar/requirement.hpp new file mode 100644 index 0000000..f90c959 --- /dev/null +++ b/guitar/requirement.hpp @@ -0,0 +1,55 @@ +#ifndef _GUITAR_REQUIREMENT_HPP_ +#define _GUITAR_REQUIREMENT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_FRETTEDNOTE_HPP_ +#include +#endif + +class Requirement; + +typedef SmartPointer PtrRequirement; + +class Requirement : public FrettedNote +{ +public: + Requirement(); + virtual ~Requirement(); + bool getSatisfied(void)const; + void setSatisfied(bool satisfied); + Requirement &operator=(const FrettedNote &frettedNote); +private: + bool mSatisfied; +}; + +inline +Requirement::Requirement() +: mSatisfied(false) +{ +} + +inline +Requirement::~Requirement() +{ +} + +inline +Requirement &Requirement::operator=(const FrettedNote &frettedNote) +{ + (FrettedNote&)*this=frettedNote; + return *this; +} + +inline +bool Requirement::getSatisfied(void)const +{ + return mSatisfied; +} + +inline +void Requirement::setSatisfied(bool satisfied) +{ + mSatisfied=satisfied; +} +#endif diff --git a/guitar/requirements.cpp b/guitar/requirements.cpp new file mode 100644 index 0000000..b5b6851 --- /dev/null +++ b/guitar/requirements.cpp @@ -0,0 +1,77 @@ +#include +#include + +void Requirements::setRequirements(Block ¬es) +{ + size(notes.size()); + for(int index=0;index searchOrder; + + searchOrder.size(notePaths.size()); + for(int index=0;index sortOrder; + sortOrder.sortItems(searchOrder); // sort the sets in ascending order (ie) first item contains least number of solutions sets + for(index=0;indexsetSatisfied(true); + satisfied=true; + break; + } + } + return satisfied; +} + +bool Requirements::isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement) +{ + for(int index=0;indextoString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + if(requirement->getNote()==frettedNote.getNote()&& + requirement->getOctave()==frettedNote.getOctave()&& + !requirement->getSatisfied())return true; + } + return false; +} + +bool Requirements::haveRequirement(const FrettedNote &frettedNote) +{ + for(int index=0;index +#endif +#ifndef _GUITAR_ORDERING_HPP_ +#include +#endif +#ifndef _GUITAR_NOTEPATH_HPP_ +#include +#endif +#ifndef _GUITAR_REQUIREMENT_HPP_ +#include +#endif + +class Requirements : public Array +{ +public: + Requirements(void); + Requirements(Block ¬es); + virtual ~Requirements(); + bool satisfyRequirements(NotePaths ¬ePaths); + void setRequirements(Block ¬es); +private: + bool satisfyRequirement(NotePath ¬ePath); + bool haveRequirement(const FrettedNote &frettedNote); + bool isPositionAvailable(const FrettedNote &frettedNote,PtrRequirement &requirement); +}; + +inline +Requirements::Requirements(void) +{ +} + +inline +Requirements::Requirements(Block ¬es) +{ + setRequirements(notes); +} + +inline +Requirements::~Requirements() +{ +} +#endif diff --git a/guitar/res/makeres.exe b/guitar/res/makeres.exe new file mode 100644 index 0000000..0c68c03 Binary files /dev/null and b/guitar/res/makeres.exe differ diff --git a/guitar/res/stringres.txt b/guitar/res/stringres.txt new file mode 100644 index 0000000..90fbb8c --- /dev/null +++ b/guitar/res/stringres.txt @@ -0,0 +1,1831 @@ +STRINGTABLE DISCARDABLE +BEGIN + STRING_22000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_22001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_22002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_22003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_22004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_22005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_22006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_22007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " + STRING_22008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_22009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_22010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_22011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_22012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_22013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_22014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_22015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_22016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_22017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_22018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_22019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_22020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_22021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_22022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_22023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " + STRING_22024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_22025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_22030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_22032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_22033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_22034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_22035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_22036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_22037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_22038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_22039 "A7sus4 [x 0 2 0 3 3] (D E G A) " + STRING_22040 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_22041 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_22042 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_22043 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_22044 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_22045 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22046 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22047 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_22048 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_22049 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_22050 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22051 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_22052 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22053 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22054 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_22055 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22056 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22057 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22058 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22059 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_22060 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_22061 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_22062 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_22063 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_22064 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_22065 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_22066 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_22067 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22068 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22069 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22070 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_22071 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " + STRING_22072 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22073 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22074 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_22075 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22076 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22077 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_22078 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22079 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_22080 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_22081 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_22082 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_22083 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_22084 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22085 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22086 "Am [x 0 2 2 1 0] (C E A) " + STRING_22087 "Am [x 0 7 5 5 5] (C E A) " + STRING_22088 "Am [x 3 2 2 1 0] (C E A) " + STRING_22089 "Am [8 12 x x x 0] (C E A) " + STRING_22090 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_22091 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_22092 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_22093 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_22094 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_22095 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_22096 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_22097 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_22098 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_22099 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_22100 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_22101 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_22102 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_22103 "Am/G [x 0 5 5 5 8] (C E G A) " + STRING_22104 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_22105 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_22106 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_22107 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_22108 "Am6 [5 x 4 5 5 5] (A Gb C E A)" + STRING_22109 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_22110 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_22111 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_22112 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_22113 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_22114 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_22115 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_22116 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_22117 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_22118 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_22119 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_22120 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " + STRING_22121 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_22122 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_22123 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_22124 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_22125 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_22126 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22127 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_22128 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_22129 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_22130 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_22131 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22132 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22133 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22134 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_22135 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_22136 "Asus2/G [x 0 2 0 0 0] (E G A B) " + STRING_22137 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_22138 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22139 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22140 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22141 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_22142 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22143 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_22144 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_22145 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22146 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_22147 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_22148 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_22149 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_22150 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_22151 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_22152 "Asus4/G [x 0 2 2 3 3] (D E G A) " + STRING_22153 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_22154 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22155 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22156 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22157 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22158 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22159 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22160 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22161 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_22162 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_22163 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_22164 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22165 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22166 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22167 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22168 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22169 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22170 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_22171 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_22172 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_22173 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22174 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22175 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22176 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22177 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22178 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_22179 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_22180 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_22181 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_22182 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22183 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22184 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " + STRING_22185 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_22186 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_22187 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22188 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_22189 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_22190 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22191 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_22192 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_22193 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_22194 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_22195 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_22196 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_22197 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_22198 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_22199 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_22200 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22201 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22202 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_22203 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22204 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_22205 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22206 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_22207 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_22208 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_22209 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_22210 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22211 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22212 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22213 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22214 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_22215 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22216 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " + STRING_22217 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22218 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22219 "Bbm6 [6 x 5 6 6 6] (Bb G Db F Bb) " + STRING_22220 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_22221 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_22222 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_22223 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22224 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22225 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_22226 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_22227 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_22228 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_22229 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_22230 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_22231 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_22232 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_22233 "Bdim/G [x x 0 0 0 1] (D F G B) " + STRING_22234 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22235 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22236 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22237 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_22238 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_22239 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_22240 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_22241 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_22242 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_22243 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_22244 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_22245 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_22246 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_22247 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_22248 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_22249 "Bm7 [x 0 4 4 3 2] (D Gb A B) " + STRING_22250 "Bm6 [7 x 6 7 7 7] (B Ab D Eb B) " + STRING_22251 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_22252 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_22253 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_22254 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_22255 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_22256 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_22257 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_22258 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22259 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22260 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_22261 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_22262 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_22263 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_22264 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_22265 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22266 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22267 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22268 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22269 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22270 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22271 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22272 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22273 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22274 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22275 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22276 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22277 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22278 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_22279 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_22280 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_22281 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_22282 "C or Cmaj [x 3 2 0 1 0] (C E G) " + STRING_22283 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_22284 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_22285 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_22286 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_22287 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_22288 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_22289 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_22290 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_22291 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_22292 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_22293 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_22294 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_22295 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_22296 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_22297 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_22298 "C/D [x x 0 0 1 0] (C D E G) " + STRING_22299 "C/D [x x 0 5 5 3] (C D E G) " + STRING_22300 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_22301 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_22302 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_22303 "C/F [x x 3 0 1 0] (C E F G) " + STRING_22304 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_22305 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_22306 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_22307 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_22308 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_22309 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_22310 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_22311 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_22312 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22313 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_22314 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " + STRING_22315 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22316 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_22317 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_22318 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_22319 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_22320 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22321 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_22322 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_22323 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22324 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22325 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_22326 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22327 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_22328 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_22329 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_22330 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22331 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_22332 "Cm6 [8 x 7 8 8 8] (C A Eb G C) " + STRING_22333 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22334 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_22335 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_22336 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_22337 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_22338 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_22339 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_22340 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_22341 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_22342 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_22343 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_22344 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_22345 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_22346 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_22347 "Csus2/B [x 3 0 0 0 3] (C D G B) " + STRING_22348 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_22349 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_22350 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_22351 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_22352 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_22353 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_22354 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_22355 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_22356 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_22357 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_22358 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_22359 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_22360 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22361 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_22362 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_22363 "Csus4/E [x x 3 0 1 0] (C E F G) " + STRING_22364 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_22365 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_22366 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_22367 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_22368 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_22369 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_22370 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_22371 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_22372 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_22373 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_22374 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_22375 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_22376 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_22377 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_22378 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_22379 "D/C [x 3 x 2 3 2] (C D Gb A) " + STRING_22380 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_22381 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_22382 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_22383 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_22384 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_22385 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_22386 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_22387 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_22388 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_22389 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_22390 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_22391 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_22392 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_22393 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_22394 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_22395 "D6 [x 2 0 2 0 2] (D Gb A B) " + STRING_22396 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_22397 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_22398 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_22399 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22400 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22401 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_22402 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_22403 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_22404 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_22405 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_22406 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_22407 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_22408 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_22409 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_22410 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22411 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " + STRING_22412 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_22413 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_22414 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_22415 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_22416 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_22417 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_22418 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22419 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_22420 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_22421 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_22422 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_22423 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_22424 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_22425 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_22426 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_22427 "Db/B [x 4 3 4 0 4] (Db F Ab B) " + STRING_22428 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22429 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_22430 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_22431 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_22432 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22433 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_22434 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22435 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22436 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_22437 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_22438 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_22439 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_22440 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_22441 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_22442 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_22443 "Dbdim/D [x x 0 0 2 0] (Db D E G) " + STRING_22444 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22445 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22446 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_22447 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_22448 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_22449 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_22450 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_22451 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_22452 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22453 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22454 "Dbm6 [9 x 8 9 9 9] (Db Bb E Ab Bb) " + STRING_22455 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_22456 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_22457 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_22458 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_22459 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22460 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " + STRING_22461 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_22462 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_22463 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22464 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_22465 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_22466 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22467 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22468 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22469 "Dm [x 0 0 2 3 1] (D F A) " + STRING_22470 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_22471 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_22472 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_22473 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_22474 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_22475 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_22476 "Dm/C [x x 0 5 6 5] (C D F A) " + STRING_22477 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_22478 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_22479 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_22480 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_22481 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_22482 "Dm6 [10 x 9 10 10 10] (D B F A D) " + STRING_22483 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_22484 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_22485 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_22486 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_22487 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_22488 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_22489 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_22490 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_22491 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_22492 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_22493 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " + STRING_22494 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_22495 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_22496 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_22497 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_22498 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_22499 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_22500 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22501 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_22502 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_22503 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22504 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_22505 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_22506 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22507 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_22508 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_22509 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " + STRING_22510 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_22511 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_22512 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_22513 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_22514 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_22515 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_22516 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22517 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22518 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22519 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22520 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22521 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22522 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22523 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_22524 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_22525 "Dsus4/C [x 5 7 5 8 3] (C D G A)" + STRING_22526 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_22527 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_22528 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_22529 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_22530 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_22531 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_22532 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22533 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22534 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_22535 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_22536 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_22537 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_22538 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_22539 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_22540 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_22541 "E/D [x x 0 1 0 0] (D E Ab B) " + STRING_22542 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_22543 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_22544 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22545 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22546 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_22547 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22548 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22549 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22550 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_22551 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_22552 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_22553 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22554 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22555 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_22556 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_22557 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " + STRING_22558 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_22559 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_22560 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_22561 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_22562 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_22563 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_22564 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22565 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22566 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22567 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_22568 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_22569 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_22570 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_22571 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_22572 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22573 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22574 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22575 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22576 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22577 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_22578 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_22579 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22580 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22581 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22582 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22583 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22584 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22585 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22586 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22587 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22588 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22589 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " + STRING_22590 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22591 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_22592 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22593 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22594 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22595 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22596 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22597 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_22598 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_22599 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_22600 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_22601 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_22602 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22603 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22604 "Em [0 2 2 0 0 0] (E G B) " + STRING_22605 "Em [3 x 2 0 0 0] (E G B) " + STRING_22606 "Em [x 2 5 x x 0] (E G B) " + STRING_22607 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_22608 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_22609 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_22610 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_22611 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_22612 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_22613 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_22614 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_22615 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_22616 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_22617 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_22618 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_22619 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_22620 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_22621 "Em/D [x 10 12 12 12 0] (D E G B) " + STRING_22622 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_22623 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_22624 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_22625 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_22626 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_22627 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_22628 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_22629 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_22630 "Em6 [12 x 11 12 12 12] (E Db G B E) " + STRING_22631 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_22632 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_22633 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_22634 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_22635 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_22636 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_22637 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_22638 "Em7 [x x 2 4 3 3] (D E G B) " + STRING_22639 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_22640 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_22641 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_22642 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_22643 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_22644 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_22645 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_22646 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_22647 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_22648 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22649 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22650 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_22651 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_22652 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_22653 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_22654 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " + STRING_22655 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_22656 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_22657 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_22658 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_22659 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_22660 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_22661 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_22662 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_22663 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22664 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22665 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22666 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22667 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22668 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22669 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22670 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22671 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22672 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22673 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22674 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22675 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22676 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_22677 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_22678 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_22679 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_22680 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22681 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22682 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22683 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_22684 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_22685 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_22686 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22687 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22688 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_22689 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_22690 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_22691 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_22692 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_22693 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_22694 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_22695 "F/D [x x 0 2 1 1] (C D F A) " + STRING_22696 "F/D [x x 0 5 6 5] (C D F A) " + STRING_22697 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_22698 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_22699 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_22700 "F/E [x x 2 2 1 1] (C E F A) " + STRING_22701 "F/E [x x 3 2 1 0] (C E F A) " + STRING_22702 "F/Eb [x x 1 2 1 1] (C Eb F A) " + STRING_22703 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_22704 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_22705 "F/G [x x 3 2 1 3] (C F G A) " + STRING_22706 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_22707 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_22708 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_22709 "F6 [x x 0 2 1 1] (C D F A) " + STRING_22710 "F6 [x x 0 5 6 5] (C D F A) " + STRING_22711 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_22712 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_22713 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_22714 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_22715 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_22716 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_22717 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22718 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " + STRING_22719 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_22720 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_22721 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_22722 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22723 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22724 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22725 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_22726 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_22727 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_22728 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_22729 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_22730 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22731 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_22732 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_22733 "Fm6 [1 x 0 1 1 1] (F D Ab C F) " + STRING_22734 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22735 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22736 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_22737 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_22738 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_22739 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_22740 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_22741 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_22742 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_22743 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_22744 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_22745 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_22746 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_22747 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_22748 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_22749 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_22750 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22751 "Fsus2/D [3 3 0 0 1 1] (C D F G) " + STRING_22752 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_22753 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_22754 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22755 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_22756 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_22757 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_22758 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_22759 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_22760 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_22761 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_22762 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_22763 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_22764 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_22765 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_22766 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_22767 "G/C [3 3 0 0 0 3] (C D G B) " + STRING_22768 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_22769 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_22770 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_22771 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_22772 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_22773 "G/E [x x 0 12 12 12] (D E G B) " + STRING_22774 "G/E [x x 0 9 8 7] (D E G B) " + STRING_22775 "G/E [x x 2 4 3 3] (D E G B) " + STRING_22776 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_22777 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_22778 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_22779 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_22780 "G/F [x x 0 0 0 1] (D F G B) " + STRING_22781 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_22782 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_22783 "G/Gb [3 2 0 0 0 2] (D Gb G B) " + STRING_22784 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_22785 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_22786 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_22787 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_22788 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_22789 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_22790 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_22791 "G6 [x x 0 12 12 12] (D E G B) " + STRING_22792 "G6 [x x 0 9 8 7] (D E G B) " + STRING_22793 "G6 [x x 2 4 3 3] (D E G B) " + STRING_22794 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_22795 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_22796 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_22797 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_22798 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_22799 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " + STRING_22800 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_22801 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_22802 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_22803 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_22804 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_22805 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_22806 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_22807 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_22808 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22809 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22810 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_22811 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_22812 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_22813 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22814 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22815 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22816 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22817 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22818 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22819 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22820 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22821 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22822 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22823 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_22824 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_22825 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22826 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22827 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_22828 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_22829 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_22830 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_22831 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " + STRING_22832 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_22833 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22834 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22835 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_22836 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_22837 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_22838 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_22839 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_22840 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_22841 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_22842 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_22843 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_22844 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_22845 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22846 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22847 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22848 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22849 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_22850 "Gbm6 [2 x 1 2 2 2] (Gb Eb A Db Gb) " + STRING_22851 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_22852 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_22853 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22854 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22855 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_22856 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22857 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22858 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_22859 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_22860 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22861 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22862 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22863 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22864 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22865 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_22866 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_22867 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_22868 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22869 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_22870 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_22871 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_22872 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_22873 "Gm6 [3 x 2 3 3 3] (G E Bb D G) " + STRING_22874 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_22875 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_22876 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22877 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_22878 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_22879 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_22880 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_22881 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " + STRING_22882 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_22883 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_22884 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_22885 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_22886 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_22887 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_22888 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_22889 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_22890 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_22891 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_22892 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_22893 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_22894 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_22895 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_22896 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_22897 "Gsus2/E [5 0 0 0 3 0] (D E G A) " + STRING_22898 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22899 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22900 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_22901 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_22902 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_22903 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_22904 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_22905 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_22906 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_22907 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_22908 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_22909 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_22910 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_22911 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_22912 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END +****************************************************** +#define STRING_22000 22000 +#define STRING_22001 22001 +#define STRING_22002 22002 +#define STRING_22003 22003 +#define STRING_22004 22004 +#define STRING_22005 22005 +#define STRING_22006 22006 +#define STRING_22007 22007 +#define STRING_22008 22008 +#define STRING_22009 22009 +#define STRING_22010 22010 +#define STRING_22011 22011 +#define STRING_22012 22012 +#define STRING_22013 22013 +#define STRING_22014 22014 +#define STRING_22015 22015 +#define STRING_22016 22016 +#define STRING_22017 22017 +#define STRING_22018 22018 +#define STRING_22019 22019 +#define STRING_22020 22020 +#define STRING_22021 22021 +#define STRING_22022 22022 +#define STRING_22023 22023 +#define STRING_22024 22024 +#define STRING_22025 22025 +#define STRING_22026 22026 +#define STRING_22027 22027 +#define STRING_22028 22028 +#define STRING_22029 22029 +#define STRING_22030 22030 +#define STRING_22031 22031 +#define STRING_22032 22032 +#define STRING_22033 22033 +#define STRING_22034 22034 +#define STRING_22035 22035 +#define STRING_22036 22036 +#define STRING_22037 22037 +#define STRING_22038 22038 +#define STRING_22039 22039 +#define STRING_22040 22040 +#define STRING_22041 22041 +#define STRING_22042 22042 +#define STRING_22043 22043 +#define STRING_22044 22044 +#define STRING_22045 22045 +#define STRING_22046 22046 +#define STRING_22047 22047 +#define STRING_22048 22048 +#define STRING_22049 22049 +#define STRING_22050 22050 +#define STRING_22051 22051 +#define STRING_22052 22052 +#define STRING_22053 22053 +#define STRING_22054 22054 +#define STRING_22055 22055 +#define STRING_22056 22056 +#define STRING_22057 22057 +#define STRING_22058 22058 +#define STRING_22059 22059 +#define STRING_22060 22060 +#define STRING_22061 22061 +#define STRING_22062 22062 +#define STRING_22063 22063 +#define STRING_22064 22064 +#define STRING_22065 22065 +#define STRING_22066 22066 +#define STRING_22067 22067 +#define STRING_22068 22068 +#define STRING_22069 22069 +#define STRING_22070 22070 +#define STRING_22071 22071 +#define STRING_22072 22072 +#define STRING_22073 22073 +#define STRING_22074 22074 +#define STRING_22075 22075 +#define STRING_22076 22076 +#define STRING_22077 22077 +#define STRING_22078 22078 +#define STRING_22079 22079 +#define STRING_22080 22080 +#define STRING_22081 22081 +#define STRING_22082 22082 +#define STRING_22083 22083 +#define STRING_22084 22084 +#define STRING_22085 22085 +#define STRING_22086 22086 +#define STRING_22087 22087 +#define STRING_22088 22088 +#define STRING_22089 22089 +#define STRING_22090 22090 +#define STRING_22091 22091 +#define STRING_22092 22092 +#define STRING_22093 22093 +#define STRING_22094 22094 +#define STRING_22095 22095 +#define STRING_22096 22096 +#define STRING_22097 22097 +#define STRING_22098 22098 +#define STRING_22099 22099 +#define STRING_22100 22100 +#define STRING_22101 22101 +#define STRING_22102 22102 +#define STRING_22103 22103 +#define STRING_22104 22104 +#define STRING_22105 22105 +#define STRING_22106 22106 +#define STRING_22107 22107 +#define STRING_22108 22108 +#define STRING_22109 22109 +#define STRING_22110 22110 +#define STRING_22111 22111 +#define STRING_22112 22112 +#define STRING_22113 22113 +#define STRING_22114 22114 +#define STRING_22115 22115 +#define STRING_22116 22116 +#define STRING_22117 22117 +#define STRING_22118 22118 +#define STRING_22119 22119 +#define STRING_22120 22120 +#define STRING_22121 22121 +#define STRING_22122 22122 +#define STRING_22123 22123 +#define STRING_22124 22124 +#define STRING_22125 22125 +#define STRING_22126 22126 +#define STRING_22127 22127 +#define STRING_22128 22128 +#define STRING_22129 22129 +#define STRING_22130 22130 +#define STRING_22131 22131 +#define STRING_22132 22132 +#define STRING_22133 22133 +#define STRING_22134 22134 +#define STRING_22135 22135 +#define STRING_22136 22136 +#define STRING_22137 22137 +#define STRING_22138 22138 +#define STRING_22139 22139 +#define STRING_22140 22140 +#define STRING_22141 22141 +#define STRING_22142 22142 +#define STRING_22143 22143 +#define STRING_22144 22144 +#define STRING_22145 22145 +#define STRING_22146 22146 +#define STRING_22147 22147 +#define STRING_22148 22148 +#define STRING_22149 22149 +#define STRING_22150 22150 +#define STRING_22151 22151 +#define STRING_22152 22152 +#define STRING_22153 22153 +#define STRING_22154 22154 +#define STRING_22155 22155 +#define STRING_22156 22156 +#define STRING_22157 22157 +#define STRING_22158 22158 +#define STRING_22159 22159 +#define STRING_22160 22160 +#define STRING_22161 22161 +#define STRING_22162 22162 +#define STRING_22163 22163 +#define STRING_22164 22164 +#define STRING_22165 22165 +#define STRING_22166 22166 +#define STRING_22167 22167 +#define STRING_22168 22168 +#define STRING_22169 22169 +#define STRING_22170 22170 +#define STRING_22171 22171 +#define STRING_22172 22172 +#define STRING_22173 22173 +#define STRING_22174 22174 +#define STRING_22175 22175 +#define STRING_22176 22176 +#define STRING_22177 22177 +#define STRING_22178 22178 +#define STRING_22179 22179 +#define STRING_22180 22180 +#define STRING_22181 22181 +#define STRING_22182 22182 +#define STRING_22183 22183 +#define STRING_22184 22184 +#define STRING_22185 22185 +#define STRING_22186 22186 +#define STRING_22187 22187 +#define STRING_22188 22188 +#define STRING_22189 22189 +#define STRING_22190 22190 +#define STRING_22191 22191 +#define STRING_22192 22192 +#define STRING_22193 22193 +#define STRING_22194 22194 +#define STRING_22195 22195 +#define STRING_22196 22196 +#define STRING_22197 22197 +#define STRING_22198 22198 +#define STRING_22199 22199 +#define STRING_22200 22200 +#define STRING_22201 22201 +#define STRING_22202 22202 +#define STRING_22203 22203 +#define STRING_22204 22204 +#define STRING_22205 22205 +#define STRING_22206 22206 +#define STRING_22207 22207 +#define STRING_22208 22208 +#define STRING_22209 22209 +#define STRING_22210 22210 +#define STRING_22211 22211 +#define STRING_22212 22212 +#define STRING_22213 22213 +#define STRING_22214 22214 +#define STRING_22215 22215 +#define STRING_22216 22216 +#define STRING_22217 22217 +#define STRING_22218 22218 +#define STRING_22219 22219 +#define STRING_22220 22220 +#define STRING_22221 22221 +#define STRING_22222 22222 +#define STRING_22223 22223 +#define STRING_22224 22224 +#define STRING_22225 22225 +#define STRING_22226 22226 +#define STRING_22227 22227 +#define STRING_22228 22228 +#define STRING_22229 22229 +#define STRING_22230 22230 +#define STRING_22231 22231 +#define STRING_22232 22232 +#define STRING_22233 22233 +#define STRING_22234 22234 +#define STRING_22235 22235 +#define STRING_22236 22236 +#define STRING_22237 22237 +#define STRING_22238 22238 +#define STRING_22239 22239 +#define STRING_22240 22240 +#define STRING_22241 22241 +#define STRING_22242 22242 +#define STRING_22243 22243 +#define STRING_22244 22244 +#define STRING_22245 22245 +#define STRING_22246 22246 +#define STRING_22247 22247 +#define STRING_22248 22248 +#define STRING_22249 22249 +#define STRING_22250 22250 +#define STRING_22251 22251 +#define STRING_22252 22252 +#define STRING_22253 22253 +#define STRING_22254 22254 +#define STRING_22255 22255 +#define STRING_22256 22256 +#define STRING_22257 22257 +#define STRING_22258 22258 +#define STRING_22259 22259 +#define STRING_22260 22260 +#define STRING_22261 22261 +#define STRING_22262 22262 +#define STRING_22263 22263 +#define STRING_22264 22264 +#define STRING_22265 22265 +#define STRING_22266 22266 +#define STRING_22267 22267 +#define STRING_22268 22268 +#define STRING_22269 22269 +#define STRING_22270 22270 +#define STRING_22271 22271 +#define STRING_22272 22272 +#define STRING_22273 22273 +#define STRING_22274 22274 +#define STRING_22275 22275 +#define STRING_22276 22276 +#define STRING_22277 22277 +#define STRING_22278 22278 +#define STRING_22279 22279 +#define STRING_22280 22280 +#define STRING_22281 22281 +#define STRING_22282 22282 +#define STRING_22283 22283 +#define STRING_22284 22284 +#define STRING_22285 22285 +#define STRING_22286 22286 +#define STRING_22287 22287 +#define STRING_22288 22288 +#define STRING_22289 22289 +#define STRING_22290 22290 +#define STRING_22291 22291 +#define STRING_22292 22292 +#define STRING_22293 22293 +#define STRING_22294 22294 +#define STRING_22295 22295 +#define STRING_22296 22296 +#define STRING_22297 22297 +#define STRING_22298 22298 +#define STRING_22299 22299 +#define STRING_22300 22300 +#define STRING_22301 22301 +#define STRING_22302 22302 +#define STRING_22303 22303 +#define STRING_22304 22304 +#define STRING_22305 22305 +#define STRING_22306 22306 +#define STRING_22307 22307 +#define STRING_22308 22308 +#define STRING_22309 22309 +#define STRING_22310 22310 +#define STRING_22311 22311 +#define STRING_22312 22312 +#define STRING_22313 22313 +#define STRING_22314 22314 +#define STRING_22315 22315 +#define STRING_22316 22316 +#define STRING_22317 22317 +#define STRING_22318 22318 +#define STRING_22319 22319 +#define STRING_22320 22320 +#define STRING_22321 22321 +#define STRING_22322 22322 +#define STRING_22323 22323 +#define STRING_22324 22324 +#define STRING_22325 22325 +#define STRING_22326 22326 +#define STRING_22327 22327 +#define STRING_22328 22328 +#define STRING_22329 22329 +#define STRING_22330 22330 +#define STRING_22331 22331 +#define STRING_22332 22332 +#define STRING_22333 22333 +#define STRING_22334 22334 +#define STRING_22335 22335 +#define STRING_22336 22336 +#define STRING_22337 22337 +#define STRING_22338 22338 +#define STRING_22339 22339 +#define STRING_22340 22340 +#define STRING_22341 22341 +#define STRING_22342 22342 +#define STRING_22343 22343 +#define STRING_22344 22344 +#define STRING_22345 22345 +#define STRING_22346 22346 +#define STRING_22347 22347 +#define STRING_22348 22348 +#define STRING_22349 22349 +#define STRING_22350 22350 +#define STRING_22351 22351 +#define STRING_22352 22352 +#define STRING_22353 22353 +#define STRING_22354 22354 +#define STRING_22355 22355 +#define STRING_22356 22356 +#define STRING_22357 22357 +#define STRING_22358 22358 +#define STRING_22359 22359 +#define STRING_22360 22360 +#define STRING_22361 22361 +#define STRING_22362 22362 +#define STRING_22363 22363 +#define STRING_22364 22364 +#define STRING_22365 22365 +#define STRING_22366 22366 +#define STRING_22367 22367 +#define STRING_22368 22368 +#define STRING_22369 22369 +#define STRING_22370 22370 +#define STRING_22371 22371 +#define STRING_22372 22372 +#define STRING_22373 22373 +#define STRING_22374 22374 +#define STRING_22375 22375 +#define STRING_22376 22376 +#define STRING_22377 22377 +#define STRING_22378 22378 +#define STRING_22379 22379 +#define STRING_22380 22380 +#define STRING_22381 22381 +#define STRING_22382 22382 +#define STRING_22383 22383 +#define STRING_22384 22384 +#define STRING_22385 22385 +#define STRING_22386 22386 +#define STRING_22387 22387 +#define STRING_22388 22388 +#define STRING_22389 22389 +#define STRING_22390 22390 +#define STRING_22391 22391 +#define STRING_22392 22392 +#define STRING_22393 22393 +#define STRING_22394 22394 +#define STRING_22395 22395 +#define STRING_22396 22396 +#define STRING_22397 22397 +#define STRING_22398 22398 +#define STRING_22399 22399 +#define STRING_22400 22400 +#define STRING_22401 22401 +#define STRING_22402 22402 +#define STRING_22403 22403 +#define STRING_22404 22404 +#define STRING_22405 22405 +#define STRING_22406 22406 +#define STRING_22407 22407 +#define STRING_22408 22408 +#define STRING_22409 22409 +#define STRING_22410 22410 +#define STRING_22411 22411 +#define STRING_22412 22412 +#define STRING_22413 22413 +#define STRING_22414 22414 +#define STRING_22415 22415 +#define STRING_22416 22416 +#define STRING_22417 22417 +#define STRING_22418 22418 +#define STRING_22419 22419 +#define STRING_22420 22420 +#define STRING_22421 22421 +#define STRING_22422 22422 +#define STRING_22423 22423 +#define STRING_22424 22424 +#define STRING_22425 22425 +#define STRING_22426 22426 +#define STRING_22427 22427 +#define STRING_22428 22428 +#define STRING_22429 22429 +#define STRING_22430 22430 +#define STRING_22431 22431 +#define STRING_22432 22432 +#define STRING_22433 22433 +#define STRING_22434 22434 +#define STRING_22435 22435 +#define STRING_22436 22436 +#define STRING_22437 22437 +#define STRING_22438 22438 +#define STRING_22439 22439 +#define STRING_22440 22440 +#define STRING_22441 22441 +#define STRING_22442 22442 +#define STRING_22443 22443 +#define STRING_22444 22444 +#define STRING_22445 22445 +#define STRING_22446 22446 +#define STRING_22447 22447 +#define STRING_22448 22448 +#define STRING_22449 22449 +#define STRING_22450 22450 +#define STRING_22451 22451 +#define STRING_22452 22452 +#define STRING_22453 22453 +#define STRING_22454 22454 +#define STRING_22455 22455 +#define STRING_22456 22456 +#define STRING_22457 22457 +#define STRING_22458 22458 +#define STRING_22459 22459 +#define STRING_22460 22460 +#define STRING_22461 22461 +#define STRING_22462 22462 +#define STRING_22463 22463 +#define STRING_22464 22464 +#define STRING_22465 22465 +#define STRING_22466 22466 +#define STRING_22467 22467 +#define STRING_22468 22468 +#define STRING_22469 22469 +#define STRING_22470 22470 +#define STRING_22471 22471 +#define STRING_22472 22472 +#define STRING_22473 22473 +#define STRING_22474 22474 +#define STRING_22475 22475 +#define STRING_22476 22476 +#define STRING_22477 22477 +#define STRING_22478 22478 +#define STRING_22479 22479 +#define STRING_22480 22480 +#define STRING_22481 22481 +#define STRING_22482 22482 +#define STRING_22483 22483 +#define STRING_22484 22484 +#define STRING_22485 22485 +#define STRING_22486 22486 +#define STRING_22487 22487 +#define STRING_22488 22488 +#define STRING_22489 22489 +#define STRING_22490 22490 +#define STRING_22491 22491 +#define STRING_22492 22492 +#define STRING_22493 22493 +#define STRING_22494 22494 +#define STRING_22495 22495 +#define STRING_22496 22496 +#define STRING_22497 22497 +#define STRING_22498 22498 +#define STRING_22499 22499 +#define STRING_22500 22500 +#define STRING_22501 22501 +#define STRING_22502 22502 +#define STRING_22503 22503 +#define STRING_22504 22504 +#define STRING_22505 22505 +#define STRING_22506 22506 +#define STRING_22507 22507 +#define STRING_22508 22508 +#define STRING_22509 22509 +#define STRING_22510 22510 +#define STRING_22511 22511 +#define STRING_22512 22512 +#define STRING_22513 22513 +#define STRING_22514 22514 +#define STRING_22515 22515 +#define STRING_22516 22516 +#define STRING_22517 22517 +#define STRING_22518 22518 +#define STRING_22519 22519 +#define STRING_22520 22520 +#define STRING_22521 22521 +#define STRING_22522 22522 +#define STRING_22523 22523 +#define STRING_22524 22524 +#define STRING_22525 22525 +#define STRING_22526 22526 +#define STRING_22527 22527 +#define STRING_22528 22528 +#define STRING_22529 22529 +#define STRING_22530 22530 +#define STRING_22531 22531 +#define STRING_22532 22532 +#define STRING_22533 22533 +#define STRING_22534 22534 +#define STRING_22535 22535 +#define STRING_22536 22536 +#define STRING_22537 22537 +#define STRING_22538 22538 +#define STRING_22539 22539 +#define STRING_22540 22540 +#define STRING_22541 22541 +#define STRING_22542 22542 +#define STRING_22543 22543 +#define STRING_22544 22544 +#define STRING_22545 22545 +#define STRING_22546 22546 +#define STRING_22547 22547 +#define STRING_22548 22548 +#define STRING_22549 22549 +#define STRING_22550 22550 +#define STRING_22551 22551 +#define STRING_22552 22552 +#define STRING_22553 22553 +#define STRING_22554 22554 +#define STRING_22555 22555 +#define STRING_22556 22556 +#define STRING_22557 22557 +#define STRING_22558 22558 +#define STRING_22559 22559 +#define STRING_22560 22560 +#define STRING_22561 22561 +#define STRING_22562 22562 +#define STRING_22563 22563 +#define STRING_22564 22564 +#define STRING_22565 22565 +#define STRING_22566 22566 +#define STRING_22567 22567 +#define STRING_22568 22568 +#define STRING_22569 22569 +#define STRING_22570 22570 +#define STRING_22571 22571 +#define STRING_22572 22572 +#define STRING_22573 22573 +#define STRING_22574 22574 +#define STRING_22575 22575 +#define STRING_22576 22576 +#define STRING_22577 22577 +#define STRING_22578 22578 +#define STRING_22579 22579 +#define STRING_22580 22580 +#define STRING_22581 22581 +#define STRING_22582 22582 +#define STRING_22583 22583 +#define STRING_22584 22584 +#define STRING_22585 22585 +#define STRING_22586 22586 +#define STRING_22587 22587 +#define STRING_22588 22588 +#define STRING_22589 22589 +#define STRING_22590 22590 +#define STRING_22591 22591 +#define STRING_22592 22592 +#define STRING_22593 22593 +#define STRING_22594 22594 +#define STRING_22595 22595 +#define STRING_22596 22596 +#define STRING_22597 22597 +#define STRING_22598 22598 +#define STRING_22599 22599 +#define STRING_22600 22600 +#define STRING_22601 22601 +#define STRING_22602 22602 +#define STRING_22603 22603 +#define STRING_22604 22604 +#define STRING_22605 22605 +#define STRING_22606 22606 +#define STRING_22607 22607 +#define STRING_22608 22608 +#define STRING_22609 22609 +#define STRING_22610 22610 +#define STRING_22611 22611 +#define STRING_22612 22612 +#define STRING_22613 22613 +#define STRING_22614 22614 +#define STRING_22615 22615 +#define STRING_22616 22616 +#define STRING_22617 22617 +#define STRING_22618 22618 +#define STRING_22619 22619 +#define STRING_22620 22620 +#define STRING_22621 22621 +#define STRING_22622 22622 +#define STRING_22623 22623 +#define STRING_22624 22624 +#define STRING_22625 22625 +#define STRING_22626 22626 +#define STRING_22627 22627 +#define STRING_22628 22628 +#define STRING_22629 22629 +#define STRING_22630 22630 +#define STRING_22631 22631 +#define STRING_22632 22632 +#define STRING_22633 22633 +#define STRING_22634 22634 +#define STRING_22635 22635 +#define STRING_22636 22636 +#define STRING_22637 22637 +#define STRING_22638 22638 +#define STRING_22639 22639 +#define STRING_22640 22640 +#define STRING_22641 22641 +#define STRING_22642 22642 +#define STRING_22643 22643 +#define STRING_22644 22644 +#define STRING_22645 22645 +#define STRING_22646 22646 +#define STRING_22647 22647 +#define STRING_22648 22648 +#define STRING_22649 22649 +#define STRING_22650 22650 +#define STRING_22651 22651 +#define STRING_22652 22652 +#define STRING_22653 22653 +#define STRING_22654 22654 +#define STRING_22655 22655 +#define STRING_22656 22656 +#define STRING_22657 22657 +#define STRING_22658 22658 +#define STRING_22659 22659 +#define STRING_22660 22660 +#define STRING_22661 22661 +#define STRING_22662 22662 +#define STRING_22663 22663 +#define STRING_22664 22664 +#define STRING_22665 22665 +#define STRING_22666 22666 +#define STRING_22667 22667 +#define STRING_22668 22668 +#define STRING_22669 22669 +#define STRING_22670 22670 +#define STRING_22671 22671 +#define STRING_22672 22672 +#define STRING_22673 22673 +#define STRING_22674 22674 +#define STRING_22675 22675 +#define STRING_22676 22676 +#define STRING_22677 22677 +#define STRING_22678 22678 +#define STRING_22679 22679 +#define STRING_22680 22680 +#define STRING_22681 22681 +#define STRING_22682 22682 +#define STRING_22683 22683 +#define STRING_22684 22684 +#define STRING_22685 22685 +#define STRING_22686 22686 +#define STRING_22687 22687 +#define STRING_22688 22688 +#define STRING_22689 22689 +#define STRING_22690 22690 +#define STRING_22691 22691 +#define STRING_22692 22692 +#define STRING_22693 22693 +#define STRING_22694 22694 +#define STRING_22695 22695 +#define STRING_22696 22696 +#define STRING_22697 22697 +#define STRING_22698 22698 +#define STRING_22699 22699 +#define STRING_22700 22700 +#define STRING_22701 22701 +#define STRING_22702 22702 +#define STRING_22703 22703 +#define STRING_22704 22704 +#define STRING_22705 22705 +#define STRING_22706 22706 +#define STRING_22707 22707 +#define STRING_22708 22708 +#define STRING_22709 22709 +#define STRING_22710 22710 +#define STRING_22711 22711 +#define STRING_22712 22712 +#define STRING_22713 22713 +#define STRING_22714 22714 +#define STRING_22715 22715 +#define STRING_22716 22716 +#define STRING_22717 22717 +#define STRING_22718 22718 +#define STRING_22719 22719 +#define STRING_22720 22720 +#define STRING_22721 22721 +#define STRING_22722 22722 +#define STRING_22723 22723 +#define STRING_22724 22724 +#define STRING_22725 22725 +#define STRING_22726 22726 +#define STRING_22727 22727 +#define STRING_22728 22728 +#define STRING_22729 22729 +#define STRING_22730 22730 +#define STRING_22731 22731 +#define STRING_22732 22732 +#define STRING_22733 22733 +#define STRING_22734 22734 +#define STRING_22735 22735 +#define STRING_22736 22736 +#define STRING_22737 22737 +#define STRING_22738 22738 +#define STRING_22739 22739 +#define STRING_22740 22740 +#define STRING_22741 22741 +#define STRING_22742 22742 +#define STRING_22743 22743 +#define STRING_22744 22744 +#define STRING_22745 22745 +#define STRING_22746 22746 +#define STRING_22747 22747 +#define STRING_22748 22748 +#define STRING_22749 22749 +#define STRING_22750 22750 +#define STRING_22751 22751 +#define STRING_22752 22752 +#define STRING_22753 22753 +#define STRING_22754 22754 +#define STRING_22755 22755 +#define STRING_22756 22756 +#define STRING_22757 22757 +#define STRING_22758 22758 +#define STRING_22759 22759 +#define STRING_22760 22760 +#define STRING_22761 22761 +#define STRING_22762 22762 +#define STRING_22763 22763 +#define STRING_22764 22764 +#define STRING_22765 22765 +#define STRING_22766 22766 +#define STRING_22767 22767 +#define STRING_22768 22768 +#define STRING_22769 22769 +#define STRING_22770 22770 +#define STRING_22771 22771 +#define STRING_22772 22772 +#define STRING_22773 22773 +#define STRING_22774 22774 +#define STRING_22775 22775 +#define STRING_22776 22776 +#define STRING_22777 22777 +#define STRING_22778 22778 +#define STRING_22779 22779 +#define STRING_22780 22780 +#define STRING_22781 22781 +#define STRING_22782 22782 +#define STRING_22783 22783 +#define STRING_22784 22784 +#define STRING_22785 22785 +#define STRING_22786 22786 +#define STRING_22787 22787 +#define STRING_22788 22788 +#define STRING_22789 22789 +#define STRING_22790 22790 +#define STRING_22791 22791 +#define STRING_22792 22792 +#define STRING_22793 22793 +#define STRING_22794 22794 +#define STRING_22795 22795 +#define STRING_22796 22796 +#define STRING_22797 22797 +#define STRING_22798 22798 +#define STRING_22799 22799 +#define STRING_22800 22800 +#define STRING_22801 22801 +#define STRING_22802 22802 +#define STRING_22803 22803 +#define STRING_22804 22804 +#define STRING_22805 22805 +#define STRING_22806 22806 +#define STRING_22807 22807 +#define STRING_22808 22808 +#define STRING_22809 22809 +#define STRING_22810 22810 +#define STRING_22811 22811 +#define STRING_22812 22812 +#define STRING_22813 22813 +#define STRING_22814 22814 +#define STRING_22815 22815 +#define STRING_22816 22816 +#define STRING_22817 22817 +#define STRING_22818 22818 +#define STRING_22819 22819 +#define STRING_22820 22820 +#define STRING_22821 22821 +#define STRING_22822 22822 +#define STRING_22823 22823 +#define STRING_22824 22824 +#define STRING_22825 22825 +#define STRING_22826 22826 +#define STRING_22827 22827 +#define STRING_22828 22828 +#define STRING_22829 22829 +#define STRING_22830 22830 +#define STRING_22831 22831 +#define STRING_22832 22832 +#define STRING_22833 22833 +#define STRING_22834 22834 +#define STRING_22835 22835 +#define STRING_22836 22836 +#define STRING_22837 22837 +#define STRING_22838 22838 +#define STRING_22839 22839 +#define STRING_22840 22840 +#define STRING_22841 22841 +#define STRING_22842 22842 +#define STRING_22843 22843 +#define STRING_22844 22844 +#define STRING_22845 22845 +#define STRING_22846 22846 +#define STRING_22847 22847 +#define STRING_22848 22848 +#define STRING_22849 22849 +#define STRING_22850 22850 +#define STRING_22851 22851 +#define STRING_22852 22852 +#define STRING_22853 22853 +#define STRING_22854 22854 +#define STRING_22855 22855 +#define STRING_22856 22856 +#define STRING_22857 22857 +#define STRING_22858 22858 +#define STRING_22859 22859 +#define STRING_22860 22860 +#define STRING_22861 22861 +#define STRING_22862 22862 +#define STRING_22863 22863 +#define STRING_22864 22864 +#define STRING_22865 22865 +#define STRING_22866 22866 +#define STRING_22867 22867 +#define STRING_22868 22868 +#define STRING_22869 22869 +#define STRING_22870 22870 +#define STRING_22871 22871 +#define STRING_22872 22872 +#define STRING_22873 22873 +#define STRING_22874 22874 +#define STRING_22875 22875 +#define STRING_22876 22876 +#define STRING_22877 22877 +#define STRING_22878 22878 +#define STRING_22879 22879 +#define STRING_22880 22880 +#define STRING_22881 22881 +#define STRING_22882 22882 +#define STRING_22883 22883 +#define STRING_22884 22884 +#define STRING_22885 22885 +#define STRING_22886 22886 +#define STRING_22887 22887 +#define STRING_22888 22888 +#define STRING_22889 22889 +#define STRING_22890 22890 +#define STRING_22891 22891 +#define STRING_22892 22892 +#define STRING_22893 22893 +#define STRING_22894 22894 +#define STRING_22895 22895 +#define STRING_22896 22896 +#define STRING_22897 22897 +#define STRING_22898 22898 +#define STRING_22899 22899 +#define STRING_22900 22900 +#define STRING_22901 22901 +#define STRING_22902 22902 +#define STRING_22903 22903 +#define STRING_22904 22904 +#define STRING_22905 22905 +#define STRING_22906 22906 +#define STRING_22907 22907 +#define STRING_22908 22908 +#define STRING_22909 22909 +#define STRING_22910 22910 +#define STRING_22911 22911 +#define STRING_22912 22912 +#define STRING_CHORD_END 22913 diff --git a/guitar/res/strings.rc b/guitar/res/strings.rc new file mode 100644 index 0000000..5337a91 --- /dev/null +++ b/guitar/res/strings.rc @@ -0,0 +1,1867 @@ +STRINGTABLE DISCARDABLE +BEGIN + STRING_22000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_22001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_22002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_22003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_22004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_22005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_22006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_22007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " + STRING_22008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_22009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_22010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_22011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_22012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_22013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_22014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_22015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_22016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_22017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_22018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_22019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_22020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_22021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_22022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_22023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " + STRING_22024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_22025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_22030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_22032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_22033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_22034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_22035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_22036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_22037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_22038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_22039 "A7sus4 [x 0 2 0 3 3] (D E G A) " + STRING_22040 "A7#9(#11) [5 x 6 7 5 7] (A Ab D E B) " + STRING_22041 "A7b9(#11) [5 x 8 8 8 x] (A Bb Eb G) " + STRING_22042 "A7#9 [x 12 11 12 13 12] (A Dd G C E) " + STRING_22043 "A13#9 [5 x 5 6 7 8] (A G Db Gb C) " + STRING_22044 "A13b9 [5 x 5 6 7 6] (A G Db Gb Cb) " + STRING_22045 "A13b9 [5 x 5 3 2 2] (A G Bb Db Gb) " + STRING_22046 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_22047 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_22048 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_22049 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_22050 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_22051 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22052 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22053 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_22054 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_22055 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_22056 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22057 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_22058 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22059 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22060 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_22061 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22062 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22063 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22064 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22065 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_22066 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_22067 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_22068 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_22069 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_22070 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_22071 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_22072 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_22073 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22074 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22075 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22076 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_22077 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " + STRING_22078 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22079 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22080 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_22081 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22082 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22083 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_22084 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22085 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_22086 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_22087 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_22088 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_22089 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_22090 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22091 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22092 "Am [x 0 2 2 1 0] (C E A) " + STRING_22093 "Am [x 0 7 5 5 5] (C E A) " + STRING_22094 "Am [x 3 2 2 1 0] (C E A) " + STRING_22095 "Am [8 12 x x x 0] (C E A) " + STRING_22096 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_22097 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_22098 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_22099 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_22100 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_22101 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_22102 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_22103 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_22104 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_22105 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_22106 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_22107 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_22108 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_22109 "Am/G [x 0 5 5 5 8] (C E G A) " + STRING_22110 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_22111 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_22112 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_22113 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_22114 "Am6 [5 x 4 5 5 5] (A Gb C E A)" + STRING_22115 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_22116 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_22117 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_22118 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_22119 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_22120 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_22121 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_22122 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_22123 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_22124 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_22125 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_22126 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " + STRING_22127 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_22128 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_22129 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_22130 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_22131 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_22132 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22133 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_22134 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_22135 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_22136 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_22137 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22138 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22139 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22140 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_22141 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_22142 "Asus2/G [x 0 2 0 0 0] (E G A B) " + STRING_22143 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_22144 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22145 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22146 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22147 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_22148 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22149 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_22150 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_22151 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22152 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_22153 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_22154 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_22155 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_22156 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_22157 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_22158 "Asus4/G [x 0 2 2 3 3] (D E G A) " + STRING_22159 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_22160 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22161 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22162 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22163 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22164 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22165 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22166 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22167 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_22168 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_22169 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_22170 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22171 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22172 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22173 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22174 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22175 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22176 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_22177 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_22178 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_22179 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22180 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22181 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22182 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22183 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22184 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_22185 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_22186 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_22187 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_22188 "B7#9(#11) [7 x 8 9 7 9] (B Bb E Gb Dd) " + STRING_22189 "B7b9(#11) [7 x 10 10 10 x] (B C F A) " + STRING_22190 "B7#9 [x 14 13 14 15 14] (B Eb A D Gb) " + STRING_22191 "B13#9 [7 x 7 8 9 10] (B A Eb Ab D) " + STRING_22192 "B13b9 [7 x 7 8 9 8] (A G Db Gb Cb) " + STRING_22193 "B13b9 [7 x 7 5 4 4] (B A C Eb Ab) " + STRING_22194 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22195 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22196 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " + STRING_22197 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_22198 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_22199 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22200 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_22201 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_22202 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22203 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_22204 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_22205 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_22206 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_22207 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_22208 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_22209 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_22210 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_22211 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_22212 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22213 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22214 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_22215 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22216 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_22217 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22218 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_22219 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_22220 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_22221 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_22222 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22223 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22224 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22225 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22226 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_22227 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22228 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " + STRING_22229 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22230 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22231 "Bbm6 [6 x 5 6 6 6] (Bb G Db F Bb) " + STRING_22232 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_22233 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_22234 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_22235 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22236 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22237 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_22238 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_22239 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_22240 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_22241 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_22242 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_22243 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_22244 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_22245 "Bdim/G [x x 0 0 0 1] (D F G B) " + STRING_22246 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22247 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22248 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22249 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_22250 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_22251 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_22252 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_22253 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_22254 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_22255 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_22256 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_22257 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_22258 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_22259 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_22260 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_22261 "Bm7 [x 0 4 4 3 2] (D Gb A B) " + STRING_22262 "Bm6 [7 x 6 7 7 7] (B Ab D Eb B) " + STRING_22263 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_22264 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_22265 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_22266 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_22267 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_22268 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_22269 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_22270 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22271 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22272 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_22273 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_22274 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_22275 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_22276 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_22277 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22278 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22279 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22280 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22281 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22282 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22283 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22284 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22285 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22286 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22287 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22288 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22289 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22290 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_22291 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_22292 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_22293 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_22294 "C or Cmaj [x 3 2 0 1 0] (C E G) " + STRING_22295 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_22296 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_22297 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_22298 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_22299 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_22300 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_22301 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_22302 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_22303 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_22304 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_22305 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_22306 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_22307 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_22308 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_22309 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_22310 "C/D [x x 0 0 1 0] (C D E G) " + STRING_22311 "C/D [x x 0 5 5 3] (C D E G) " + STRING_22312 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_22313 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_22314 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_22315 "C/F [x x 3 0 1 0] (C E F G) " + STRING_22316 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_22317 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_22318 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_22319 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_22320 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_22321 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_22322 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_22323 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_22324 "C7#9(#11) [8 x 10 11 8 11] (C C Gb G Eb) " + STRING_22325 "C7b9(#11) [8 x 11 11 11] (C Db Gb Bb) " + STRING_22326 "C7#9 [x 3 2 3 4 3] (C E Bb Eb G) " + STRING_22327 "C13#9 [8 x 8 9 10 11] (C Bb E A Eb) " + STRING_22328 "C13b9 [8 x 8 9 10 9] (C Bb A A D) " + STRING_22329 "C13b9 [8 x 8 6 5 5] (C Bb Db E A) " + STRING_22330 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22331 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_22332 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " + STRING_22333 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22334 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_22335 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_22336 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_22337 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_22338 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22339 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_22340 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_22341 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22342 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22343 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_22344 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22345 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_22346 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_22347 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_22348 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22349 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_22350 "Cm6 [8 x 7 8 8 8] (C A Eb G C) " + STRING_22351 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22352 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_22353 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_22354 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_22355 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_22356 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_22357 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_22358 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_22359 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_22360 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_22361 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_22362 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_22363 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_22364 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_22365 "Csus2/B [x 3 0 0 0 3] (C D G B) " + STRING_22366 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_22367 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_22368 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_22369 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_22370 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_22371 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_22372 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_22373 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_22374 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_22375 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_22376 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_22377 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_22378 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22379 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_22380 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_22381 "Csus4/E [x x 3 0 1 0] (C E F G) " + STRING_22382 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_22383 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_22384 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_22385 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_22386 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_22387 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_22388 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_22389 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_22390 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_22391 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_22392 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_22393 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_22394 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_22395 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_22396 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_22397 "D/C [x 3 x 2 3 2] (C D Gb A) " + STRING_22398 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_22399 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_22400 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_22401 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_22402 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_22403 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_22404 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_22405 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_22406 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_22407 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_22408 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_22409 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_22410 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_22411 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_22412 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_22413 "D6 [x 2 0 2 0 2] (D Gb A B) " + STRING_22414 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_22415 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_22416 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_22417 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22418 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22419 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_22420 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_22421 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_22422 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_22423 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_22424 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_22425 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_22426 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_22427 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_22428 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22429 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " + STRING_22430 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_22431 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_22432 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_22433 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_22434 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_22435 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_22436 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22437 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_22438 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_22439 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_22440 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_22441 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_22442 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_22443 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_22444 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_22445 "Db/B [x 4 3 4 0 4] (Db F Ab B) " + STRING_22446 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22447 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_22448 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_22449 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_22450 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22451 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_22452 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22453 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22454 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_22455 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_22456 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_22457 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_22458 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_22459 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_22460 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_22461 "Dbdim/D [x x 0 0 2 0] (Db D E G) " + STRING_22462 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22463 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22464 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_22465 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_22466 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_22467 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_22468 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_22469 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_22470 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22471 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22472 "Dbm6 [9 x 8 9 9 9] (Db Bb E Ab Bb) " + STRING_22473 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_22474 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_22475 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_22476 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_22477 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22478 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " + STRING_22479 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_22480 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_22481 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22482 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_22483 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_22484 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22485 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22486 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22487 "Dm [x 0 0 2 3 1] (D F A) " + STRING_22488 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_22489 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_22490 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_22491 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_22492 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_22493 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_22494 "Dm/C [x x 0 5 6 5] (C D F A) " + STRING_22495 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_22496 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_22497 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_22498 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_22499 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_22500 "Dm6 [10 x 9 10 10 10] (D B F A D) " + STRING_22501 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_22502 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_22503 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_22504 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_22505 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_22506 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_22507 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_22508 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_22509 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_22510 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_22511 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " + STRING_22512 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_22513 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_22514 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_22515 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_22516 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_22517 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_22518 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22519 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_22520 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_22521 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22522 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_22523 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_22524 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22525 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_22526 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_22527 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " + STRING_22528 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_22529 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_22530 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_22531 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_22532 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_22533 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_22534 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22535 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22536 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22537 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22538 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22539 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22540 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22541 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_22542 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_22543 "Dsus4/C [x 5 7 5 8 3] (C D G A)" + STRING_22544 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_22545 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_22546 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_22547 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_22548 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_22549 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_22550 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22551 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22552 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_22553 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_22554 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_22555 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_22556 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_22557 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_22558 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_22559 "E/D [x x 0 1 0 0] (D E Ab B) " + STRING_22560 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_22561 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_22562 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22563 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22564 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_22565 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22566 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22567 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22568 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_22569 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_22570 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_22571 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22572 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22573 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_22574 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_22575 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " + STRING_22576 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_22577 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_22578 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_22579 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_22580 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_22581 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_22582 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22583 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22584 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22585 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_22586 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_22587 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_22588 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_22589 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_22590 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22591 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22592 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22593 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22594 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22595 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_22596 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_22597 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22598 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22599 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22600 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22601 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22602 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22603 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22604 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22605 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22606 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22607 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " + STRING_22608 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22609 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_22610 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22611 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22612 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22613 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22614 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22615 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_22616 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_22617 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_22618 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_22619 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_22620 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22621 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22622 "Em [0 2 2 0 0 0] (E G B) " + STRING_22623 "Em [3 x 2 0 0 0] (E G B) " + STRING_22624 "Em [x 2 5 x x 0] (E G B) " + STRING_22625 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_22626 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_22627 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_22628 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_22629 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_22630 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_22631 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_22632 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_22633 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_22634 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_22635 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_22636 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_22637 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_22638 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_22639 "Em/D [x 10 12 12 12 0] (D E G B) " + STRING_22640 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_22641 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_22642 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_22643 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_22644 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_22645 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_22646 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_22647 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_22648 "Em6 [12 x 11 12 12 12] (E Db G B E) " + STRING_22649 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_22650 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_22651 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_22652 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_22653 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_22654 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_22655 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_22656 "Em7 [x x 2 4 3 3] (D E G B) " + STRING_22657 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_22658 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_22659 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_22660 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_22661 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_22662 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_22663 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_22664 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_22665 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_22666 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22667 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22668 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_22669 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_22670 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_22671 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_22672 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " + STRING_22673 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_22674 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_22675 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_22676 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_22677 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_22678 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_22679 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_22680 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_22681 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22682 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22683 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22684 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22685 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22686 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22687 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22688 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22689 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22690 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22691 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22692 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22693 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22694 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_22695 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_22696 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_22697 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_22698 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22699 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22700 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22701 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_22702 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_22703 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_22704 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22705 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22706 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_22707 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_22708 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_22709 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_22710 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_22711 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_22712 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_22713 "F/D [x x 0 2 1 1] (C D F A) " + STRING_22714 "F/D [x x 0 5 6 5] (C D F A) " + STRING_22715 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_22716 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_22717 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_22718 "F/E [x x 2 2 1 1] (C E F A) " + STRING_22719 "F/E [x x 3 2 1 0] (C E F A) " + STRING_22720 "F/Eb [x x 1 2 1 1] (C Eb F A) " + STRING_22721 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_22722 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_22723 "F/G [x x 3 2 1 3] (C F G A) " + STRING_22724 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_22725 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_22726 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_22727 "F6 [x x 0 2 1 1] (C D F A) " + STRING_22728 "F6 [x x 0 5 6 5] (C D F A) " + STRING_22729 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_22730 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_22731 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_22732 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_22733 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_22734 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_22735 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22736 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " + STRING_22737 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_22738 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_22739 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_22740 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22741 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22742 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22743 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_22744 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_22745 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_22746 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_22747 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_22748 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22749 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_22750 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_22751 "Fm6 [1 x 0 1 1 1] (F D Ab C F) " + STRING_22752 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22753 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22754 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_22755 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_22756 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_22757 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_22758 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_22759 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_22760 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_22761 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_22762 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_22763 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_22764 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_22765 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_22766 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_22767 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_22768 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22769 "Fsus2/D [3 3 0 0 1 1] (C D F G) " + STRING_22770 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_22771 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_22772 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22773 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_22774 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_22775 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_22776 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_22777 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_22778 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_22779 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_22780 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_22781 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_22782 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_22783 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_22784 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_22785 "G/C [3 3 0 0 0 3] (C D G B) " + STRING_22786 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_22787 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_22788 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_22789 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_22790 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_22791 "G/E [x x 0 12 12 12] (D E G B) " + STRING_22792 "G/E [x x 0 9 8 7] (D E G B) " + STRING_22793 "G/E [x x 2 4 3 3] (D E G B) " + STRING_22794 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_22795 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_22796 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_22797 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_22798 "G/F [x x 0 0 0 1] (D F G B) " + STRING_22799 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_22800 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_22801 "G/Gb [3 2 0 0 0 2] (D Gb G B) " + STRING_22802 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_22803 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_22804 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_22805 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_22806 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_22807 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_22808 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_22809 "G6 [x x 0 12 12 12] (D E G B) " + STRING_22810 "G6 [x x 0 9 8 7] (D E G B) " + STRING_22811 "G6 [x x 2 4 3 3] (D E G B) " + STRING_22812 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_22813 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_22814 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_22815 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_22816 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_22817 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " + STRING_22818 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_22819 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_22820 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_22821 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_22822 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_22823 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_22824 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_22825 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_22826 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22827 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22828 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_22829 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_22830 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_22831 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22832 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22833 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22834 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22835 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22836 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22837 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22838 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22839 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22840 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22841 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_22842 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_22843 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22844 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22845 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_22846 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_22847 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_22848 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_22849 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " + STRING_22850 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_22851 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22852 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22853 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_22854 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_22855 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_22856 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_22857 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_22858 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_22859 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_22860 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_22861 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_22862 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_22863 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22864 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22865 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22866 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22867 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_22868 "Gbm6 [2 x 1 2 2 2] (Gb Eb A Db Gb) " + STRING_22869 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_22870 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_22871 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22872 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22873 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_22874 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22875 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22876 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_22877 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_22878 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22879 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22880 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22881 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22882 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22883 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_22884 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_22885 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_22886 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22887 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_22888 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_22889 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_22890 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_22891 "Gm6 [3 x 2 3 3 3] (G E Bb D G) " + STRING_22892 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_22893 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_22894 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22895 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_22896 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_22897 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_22898 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_22899 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " + STRING_22900 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_22901 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_22902 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_22903 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_22904 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_22905 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_22906 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_22907 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_22908 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_22909 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_22910 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_22911 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_22912 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_22913 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_22914 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_22915 "Gsus2/E [5 0 0 0 3 0] (D E G A) " + STRING_22916 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22917 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22918 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_22919 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_22920 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_22921 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_22922 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_22923 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_22924 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_22925 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_22926 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_22927 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_22928 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_22929 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_22930 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END +****************************************************** +#define STRING_22000 22000 +#define STRING_22001 22001 +#define STRING_22002 22002 +#define STRING_22003 22003 +#define STRING_22004 22004 +#define STRING_22005 22005 +#define STRING_22006 22006 +#define STRING_22007 22007 +#define STRING_22008 22008 +#define STRING_22009 22009 +#define STRING_22010 22010 +#define STRING_22011 22011 +#define STRING_22012 22012 +#define STRING_22013 22013 +#define STRING_22014 22014 +#define STRING_22015 22015 +#define STRING_22016 22016 +#define STRING_22017 22017 +#define STRING_22018 22018 +#define STRING_22019 22019 +#define STRING_22020 22020 +#define STRING_22021 22021 +#define STRING_22022 22022 +#define STRING_22023 22023 +#define STRING_22024 22024 +#define STRING_22025 22025 +#define STRING_22026 22026 +#define STRING_22027 22027 +#define STRING_22028 22028 +#define STRING_22029 22029 +#define STRING_22030 22030 +#define STRING_22031 22031 +#define STRING_22032 22032 +#define STRING_22033 22033 +#define STRING_22034 22034 +#define STRING_22035 22035 +#define STRING_22036 22036 +#define STRING_22037 22037 +#define STRING_22038 22038 +#define STRING_22039 22039 +#define STRING_22040 22040 +#define STRING_22041 22041 +#define STRING_22042 22042 +#define STRING_22043 22043 +#define STRING_22044 22044 +#define STRING_22045 22045 +#define STRING_22046 22046 +#define STRING_22047 22047 +#define STRING_22048 22048 +#define STRING_22049 22049 +#define STRING_22050 22050 +#define STRING_22051 22051 +#define STRING_22052 22052 +#define STRING_22053 22053 +#define STRING_22054 22054 +#define STRING_22055 22055 +#define STRING_22056 22056 +#define STRING_22057 22057 +#define STRING_22058 22058 +#define STRING_22059 22059 +#define STRING_22060 22060 +#define STRING_22061 22061 +#define STRING_22062 22062 +#define STRING_22063 22063 +#define STRING_22064 22064 +#define STRING_22065 22065 +#define STRING_22066 22066 +#define STRING_22067 22067 +#define STRING_22068 22068 +#define STRING_22069 22069 +#define STRING_22070 22070 +#define STRING_22071 22071 +#define STRING_22072 22072 +#define STRING_22073 22073 +#define STRING_22074 22074 +#define STRING_22075 22075 +#define STRING_22076 22076 +#define STRING_22077 22077 +#define STRING_22078 22078 +#define STRING_22079 22079 +#define STRING_22080 22080 +#define STRING_22081 22081 +#define STRING_22082 22082 +#define STRING_22083 22083 +#define STRING_22084 22084 +#define STRING_22085 22085 +#define STRING_22086 22086 +#define STRING_22087 22087 +#define STRING_22088 22088 +#define STRING_22089 22089 +#define STRING_22090 22090 +#define STRING_22091 22091 +#define STRING_22092 22092 +#define STRING_22093 22093 +#define STRING_22094 22094 +#define STRING_22095 22095 +#define STRING_22096 22096 +#define STRING_22097 22097 +#define STRING_22098 22098 +#define STRING_22099 22099 +#define STRING_22100 22100 +#define STRING_22101 22101 +#define STRING_22102 22102 +#define STRING_22103 22103 +#define STRING_22104 22104 +#define STRING_22105 22105 +#define STRING_22106 22106 +#define STRING_22107 22107 +#define STRING_22108 22108 +#define STRING_22109 22109 +#define STRING_22110 22110 +#define STRING_22111 22111 +#define STRING_22112 22112 +#define STRING_22113 22113 +#define STRING_22114 22114 +#define STRING_22115 22115 +#define STRING_22116 22116 +#define STRING_22117 22117 +#define STRING_22118 22118 +#define STRING_22119 22119 +#define STRING_22120 22120 +#define STRING_22121 22121 +#define STRING_22122 22122 +#define STRING_22123 22123 +#define STRING_22124 22124 +#define STRING_22125 22125 +#define STRING_22126 22126 +#define STRING_22127 22127 +#define STRING_22128 22128 +#define STRING_22129 22129 +#define STRING_22130 22130 +#define STRING_22131 22131 +#define STRING_22132 22132 +#define STRING_22133 22133 +#define STRING_22134 22134 +#define STRING_22135 22135 +#define STRING_22136 22136 +#define STRING_22137 22137 +#define STRING_22138 22138 +#define STRING_22139 22139 +#define STRING_22140 22140 +#define STRING_22141 22141 +#define STRING_22142 22142 +#define STRING_22143 22143 +#define STRING_22144 22144 +#define STRING_22145 22145 +#define STRING_22146 22146 +#define STRING_22147 22147 +#define STRING_22148 22148 +#define STRING_22149 22149 +#define STRING_22150 22150 +#define STRING_22151 22151 +#define STRING_22152 22152 +#define STRING_22153 22153 +#define STRING_22154 22154 +#define STRING_22155 22155 +#define STRING_22156 22156 +#define STRING_22157 22157 +#define STRING_22158 22158 +#define STRING_22159 22159 +#define STRING_22160 22160 +#define STRING_22161 22161 +#define STRING_22162 22162 +#define STRING_22163 22163 +#define STRING_22164 22164 +#define STRING_22165 22165 +#define STRING_22166 22166 +#define STRING_22167 22167 +#define STRING_22168 22168 +#define STRING_22169 22169 +#define STRING_22170 22170 +#define STRING_22171 22171 +#define STRING_22172 22172 +#define STRING_22173 22173 +#define STRING_22174 22174 +#define STRING_22175 22175 +#define STRING_22176 22176 +#define STRING_22177 22177 +#define STRING_22178 22178 +#define STRING_22179 22179 +#define STRING_22180 22180 +#define STRING_22181 22181 +#define STRING_22182 22182 +#define STRING_22183 22183 +#define STRING_22184 22184 +#define STRING_22185 22185 +#define STRING_22186 22186 +#define STRING_22187 22187 +#define STRING_22188 22188 +#define STRING_22189 22189 +#define STRING_22190 22190 +#define STRING_22191 22191 +#define STRING_22192 22192 +#define STRING_22193 22193 +#define STRING_22194 22194 +#define STRING_22195 22195 +#define STRING_22196 22196 +#define STRING_22197 22197 +#define STRING_22198 22198 +#define STRING_22199 22199 +#define STRING_22200 22200 +#define STRING_22201 22201 +#define STRING_22202 22202 +#define STRING_22203 22203 +#define STRING_22204 22204 +#define STRING_22205 22205 +#define STRING_22206 22206 +#define STRING_22207 22207 +#define STRING_22208 22208 +#define STRING_22209 22209 +#define STRING_22210 22210 +#define STRING_22211 22211 +#define STRING_22212 22212 +#define STRING_22213 22213 +#define STRING_22214 22214 +#define STRING_22215 22215 +#define STRING_22216 22216 +#define STRING_22217 22217 +#define STRING_22218 22218 +#define STRING_22219 22219 +#define STRING_22220 22220 +#define STRING_22221 22221 +#define STRING_22222 22222 +#define STRING_22223 22223 +#define STRING_22224 22224 +#define STRING_22225 22225 +#define STRING_22226 22226 +#define STRING_22227 22227 +#define STRING_22228 22228 +#define STRING_22229 22229 +#define STRING_22230 22230 +#define STRING_22231 22231 +#define STRING_22232 22232 +#define STRING_22233 22233 +#define STRING_22234 22234 +#define STRING_22235 22235 +#define STRING_22236 22236 +#define STRING_22237 22237 +#define STRING_22238 22238 +#define STRING_22239 22239 +#define STRING_22240 22240 +#define STRING_22241 22241 +#define STRING_22242 22242 +#define STRING_22243 22243 +#define STRING_22244 22244 +#define STRING_22245 22245 +#define STRING_22246 22246 +#define STRING_22247 22247 +#define STRING_22248 22248 +#define STRING_22249 22249 +#define STRING_22250 22250 +#define STRING_22251 22251 +#define STRING_22252 22252 +#define STRING_22253 22253 +#define STRING_22254 22254 +#define STRING_22255 22255 +#define STRING_22256 22256 +#define STRING_22257 22257 +#define STRING_22258 22258 +#define STRING_22259 22259 +#define STRING_22260 22260 +#define STRING_22261 22261 +#define STRING_22262 22262 +#define STRING_22263 22263 +#define STRING_22264 22264 +#define STRING_22265 22265 +#define STRING_22266 22266 +#define STRING_22267 22267 +#define STRING_22268 22268 +#define STRING_22269 22269 +#define STRING_22270 22270 +#define STRING_22271 22271 +#define STRING_22272 22272 +#define STRING_22273 22273 +#define STRING_22274 22274 +#define STRING_22275 22275 +#define STRING_22276 22276 +#define STRING_22277 22277 +#define STRING_22278 22278 +#define STRING_22279 22279 +#define STRING_22280 22280 +#define STRING_22281 22281 +#define STRING_22282 22282 +#define STRING_22283 22283 +#define STRING_22284 22284 +#define STRING_22285 22285 +#define STRING_22286 22286 +#define STRING_22287 22287 +#define STRING_22288 22288 +#define STRING_22289 22289 +#define STRING_22290 22290 +#define STRING_22291 22291 +#define STRING_22292 22292 +#define STRING_22293 22293 +#define STRING_22294 22294 +#define STRING_22295 22295 +#define STRING_22296 22296 +#define STRING_22297 22297 +#define STRING_22298 22298 +#define STRING_22299 22299 +#define STRING_22300 22300 +#define STRING_22301 22301 +#define STRING_22302 22302 +#define STRING_22303 22303 +#define STRING_22304 22304 +#define STRING_22305 22305 +#define STRING_22306 22306 +#define STRING_22307 22307 +#define STRING_22308 22308 +#define STRING_22309 22309 +#define STRING_22310 22310 +#define STRING_22311 22311 +#define STRING_22312 22312 +#define STRING_22313 22313 +#define STRING_22314 22314 +#define STRING_22315 22315 +#define STRING_22316 22316 +#define STRING_22317 22317 +#define STRING_22318 22318 +#define STRING_22319 22319 +#define STRING_22320 22320 +#define STRING_22321 22321 +#define STRING_22322 22322 +#define STRING_22323 22323 +#define STRING_22324 22324 +#define STRING_22325 22325 +#define STRING_22326 22326 +#define STRING_22327 22327 +#define STRING_22328 22328 +#define STRING_22329 22329 +#define STRING_22330 22330 +#define STRING_22331 22331 +#define STRING_22332 22332 +#define STRING_22333 22333 +#define STRING_22334 22334 +#define STRING_22335 22335 +#define STRING_22336 22336 +#define STRING_22337 22337 +#define STRING_22338 22338 +#define STRING_22339 22339 +#define STRING_22340 22340 +#define STRING_22341 22341 +#define STRING_22342 22342 +#define STRING_22343 22343 +#define STRING_22344 22344 +#define STRING_22345 22345 +#define STRING_22346 22346 +#define STRING_22347 22347 +#define STRING_22348 22348 +#define STRING_22349 22349 +#define STRING_22350 22350 +#define STRING_22351 22351 +#define STRING_22352 22352 +#define STRING_22353 22353 +#define STRING_22354 22354 +#define STRING_22355 22355 +#define STRING_22356 22356 +#define STRING_22357 22357 +#define STRING_22358 22358 +#define STRING_22359 22359 +#define STRING_22360 22360 +#define STRING_22361 22361 +#define STRING_22362 22362 +#define STRING_22363 22363 +#define STRING_22364 22364 +#define STRING_22365 22365 +#define STRING_22366 22366 +#define STRING_22367 22367 +#define STRING_22368 22368 +#define STRING_22369 22369 +#define STRING_22370 22370 +#define STRING_22371 22371 +#define STRING_22372 22372 +#define STRING_22373 22373 +#define STRING_22374 22374 +#define STRING_22375 22375 +#define STRING_22376 22376 +#define STRING_22377 22377 +#define STRING_22378 22378 +#define STRING_22379 22379 +#define STRING_22380 22380 +#define STRING_22381 22381 +#define STRING_22382 22382 +#define STRING_22383 22383 +#define STRING_22384 22384 +#define STRING_22385 22385 +#define STRING_22386 22386 +#define STRING_22387 22387 +#define STRING_22388 22388 +#define STRING_22389 22389 +#define STRING_22390 22390 +#define STRING_22391 22391 +#define STRING_22392 22392 +#define STRING_22393 22393 +#define STRING_22394 22394 +#define STRING_22395 22395 +#define STRING_22396 22396 +#define STRING_22397 22397 +#define STRING_22398 22398 +#define STRING_22399 22399 +#define STRING_22400 22400 +#define STRING_22401 22401 +#define STRING_22402 22402 +#define STRING_22403 22403 +#define STRING_22404 22404 +#define STRING_22405 22405 +#define STRING_22406 22406 +#define STRING_22407 22407 +#define STRING_22408 22408 +#define STRING_22409 22409 +#define STRING_22410 22410 +#define STRING_22411 22411 +#define STRING_22412 22412 +#define STRING_22413 22413 +#define STRING_22414 22414 +#define STRING_22415 22415 +#define STRING_22416 22416 +#define STRING_22417 22417 +#define STRING_22418 22418 +#define STRING_22419 22419 +#define STRING_22420 22420 +#define STRING_22421 22421 +#define STRING_22422 22422 +#define STRING_22423 22423 +#define STRING_22424 22424 +#define STRING_22425 22425 +#define STRING_22426 22426 +#define STRING_22427 22427 +#define STRING_22428 22428 +#define STRING_22429 22429 +#define STRING_22430 22430 +#define STRING_22431 22431 +#define STRING_22432 22432 +#define STRING_22433 22433 +#define STRING_22434 22434 +#define STRING_22435 22435 +#define STRING_22436 22436 +#define STRING_22437 22437 +#define STRING_22438 22438 +#define STRING_22439 22439 +#define STRING_22440 22440 +#define STRING_22441 22441 +#define STRING_22442 22442 +#define STRING_22443 22443 +#define STRING_22444 22444 +#define STRING_22445 22445 +#define STRING_22446 22446 +#define STRING_22447 22447 +#define STRING_22448 22448 +#define STRING_22449 22449 +#define STRING_22450 22450 +#define STRING_22451 22451 +#define STRING_22452 22452 +#define STRING_22453 22453 +#define STRING_22454 22454 +#define STRING_22455 22455 +#define STRING_22456 22456 +#define STRING_22457 22457 +#define STRING_22458 22458 +#define STRING_22459 22459 +#define STRING_22460 22460 +#define STRING_22461 22461 +#define STRING_22462 22462 +#define STRING_22463 22463 +#define STRING_22464 22464 +#define STRING_22465 22465 +#define STRING_22466 22466 +#define STRING_22467 22467 +#define STRING_22468 22468 +#define STRING_22469 22469 +#define STRING_22470 22470 +#define STRING_22471 22471 +#define STRING_22472 22472 +#define STRING_22473 22473 +#define STRING_22474 22474 +#define STRING_22475 22475 +#define STRING_22476 22476 +#define STRING_22477 22477 +#define STRING_22478 22478 +#define STRING_22479 22479 +#define STRING_22480 22480 +#define STRING_22481 22481 +#define STRING_22482 22482 +#define STRING_22483 22483 +#define STRING_22484 22484 +#define STRING_22485 22485 +#define STRING_22486 22486 +#define STRING_22487 22487 +#define STRING_22488 22488 +#define STRING_22489 22489 +#define STRING_22490 22490 +#define STRING_22491 22491 +#define STRING_22492 22492 +#define STRING_22493 22493 +#define STRING_22494 22494 +#define STRING_22495 22495 +#define STRING_22496 22496 +#define STRING_22497 22497 +#define STRING_22498 22498 +#define STRING_22499 22499 +#define STRING_22500 22500 +#define STRING_22501 22501 +#define STRING_22502 22502 +#define STRING_22503 22503 +#define STRING_22504 22504 +#define STRING_22505 22505 +#define STRING_22506 22506 +#define STRING_22507 22507 +#define STRING_22508 22508 +#define STRING_22509 22509 +#define STRING_22510 22510 +#define STRING_22511 22511 +#define STRING_22512 22512 +#define STRING_22513 22513 +#define STRING_22514 22514 +#define STRING_22515 22515 +#define STRING_22516 22516 +#define STRING_22517 22517 +#define STRING_22518 22518 +#define STRING_22519 22519 +#define STRING_22520 22520 +#define STRING_22521 22521 +#define STRING_22522 22522 +#define STRING_22523 22523 +#define STRING_22524 22524 +#define STRING_22525 22525 +#define STRING_22526 22526 +#define STRING_22527 22527 +#define STRING_22528 22528 +#define STRING_22529 22529 +#define STRING_22530 22530 +#define STRING_22531 22531 +#define STRING_22532 22532 +#define STRING_22533 22533 +#define STRING_22534 22534 +#define STRING_22535 22535 +#define STRING_22536 22536 +#define STRING_22537 22537 +#define STRING_22538 22538 +#define STRING_22539 22539 +#define STRING_22540 22540 +#define STRING_22541 22541 +#define STRING_22542 22542 +#define STRING_22543 22543 +#define STRING_22544 22544 +#define STRING_22545 22545 +#define STRING_22546 22546 +#define STRING_22547 22547 +#define STRING_22548 22548 +#define STRING_22549 22549 +#define STRING_22550 22550 +#define STRING_22551 22551 +#define STRING_22552 22552 +#define STRING_22553 22553 +#define STRING_22554 22554 +#define STRING_22555 22555 +#define STRING_22556 22556 +#define STRING_22557 22557 +#define STRING_22558 22558 +#define STRING_22559 22559 +#define STRING_22560 22560 +#define STRING_22561 22561 +#define STRING_22562 22562 +#define STRING_22563 22563 +#define STRING_22564 22564 +#define STRING_22565 22565 +#define STRING_22566 22566 +#define STRING_22567 22567 +#define STRING_22568 22568 +#define STRING_22569 22569 +#define STRING_22570 22570 +#define STRING_22571 22571 +#define STRING_22572 22572 +#define STRING_22573 22573 +#define STRING_22574 22574 +#define STRING_22575 22575 +#define STRING_22576 22576 +#define STRING_22577 22577 +#define STRING_22578 22578 +#define STRING_22579 22579 +#define STRING_22580 22580 +#define STRING_22581 22581 +#define STRING_22582 22582 +#define STRING_22583 22583 +#define STRING_22584 22584 +#define STRING_22585 22585 +#define STRING_22586 22586 +#define STRING_22587 22587 +#define STRING_22588 22588 +#define STRING_22589 22589 +#define STRING_22590 22590 +#define STRING_22591 22591 +#define STRING_22592 22592 +#define STRING_22593 22593 +#define STRING_22594 22594 +#define STRING_22595 22595 +#define STRING_22596 22596 +#define STRING_22597 22597 +#define STRING_22598 22598 +#define STRING_22599 22599 +#define STRING_22600 22600 +#define STRING_22601 22601 +#define STRING_22602 22602 +#define STRING_22603 22603 +#define STRING_22604 22604 +#define STRING_22605 22605 +#define STRING_22606 22606 +#define STRING_22607 22607 +#define STRING_22608 22608 +#define STRING_22609 22609 +#define STRING_22610 22610 +#define STRING_22611 22611 +#define STRING_22612 22612 +#define STRING_22613 22613 +#define STRING_22614 22614 +#define STRING_22615 22615 +#define STRING_22616 22616 +#define STRING_22617 22617 +#define STRING_22618 22618 +#define STRING_22619 22619 +#define STRING_22620 22620 +#define STRING_22621 22621 +#define STRING_22622 22622 +#define STRING_22623 22623 +#define STRING_22624 22624 +#define STRING_22625 22625 +#define STRING_22626 22626 +#define STRING_22627 22627 +#define STRING_22628 22628 +#define STRING_22629 22629 +#define STRING_22630 22630 +#define STRING_22631 22631 +#define STRING_22632 22632 +#define STRING_22633 22633 +#define STRING_22634 22634 +#define STRING_22635 22635 +#define STRING_22636 22636 +#define STRING_22637 22637 +#define STRING_22638 22638 +#define STRING_22639 22639 +#define STRING_22640 22640 +#define STRING_22641 22641 +#define STRING_22642 22642 +#define STRING_22643 22643 +#define STRING_22644 22644 +#define STRING_22645 22645 +#define STRING_22646 22646 +#define STRING_22647 22647 +#define STRING_22648 22648 +#define STRING_22649 22649 +#define STRING_22650 22650 +#define STRING_22651 22651 +#define STRING_22652 22652 +#define STRING_22653 22653 +#define STRING_22654 22654 +#define STRING_22655 22655 +#define STRING_22656 22656 +#define STRING_22657 22657 +#define STRING_22658 22658 +#define STRING_22659 22659 +#define STRING_22660 22660 +#define STRING_22661 22661 +#define STRING_22662 22662 +#define STRING_22663 22663 +#define STRING_22664 22664 +#define STRING_22665 22665 +#define STRING_22666 22666 +#define STRING_22667 22667 +#define STRING_22668 22668 +#define STRING_22669 22669 +#define STRING_22670 22670 +#define STRING_22671 22671 +#define STRING_22672 22672 +#define STRING_22673 22673 +#define STRING_22674 22674 +#define STRING_22675 22675 +#define STRING_22676 22676 +#define STRING_22677 22677 +#define STRING_22678 22678 +#define STRING_22679 22679 +#define STRING_22680 22680 +#define STRING_22681 22681 +#define STRING_22682 22682 +#define STRING_22683 22683 +#define STRING_22684 22684 +#define STRING_22685 22685 +#define STRING_22686 22686 +#define STRING_22687 22687 +#define STRING_22688 22688 +#define STRING_22689 22689 +#define STRING_22690 22690 +#define STRING_22691 22691 +#define STRING_22692 22692 +#define STRING_22693 22693 +#define STRING_22694 22694 +#define STRING_22695 22695 +#define STRING_22696 22696 +#define STRING_22697 22697 +#define STRING_22698 22698 +#define STRING_22699 22699 +#define STRING_22700 22700 +#define STRING_22701 22701 +#define STRING_22702 22702 +#define STRING_22703 22703 +#define STRING_22704 22704 +#define STRING_22705 22705 +#define STRING_22706 22706 +#define STRING_22707 22707 +#define STRING_22708 22708 +#define STRING_22709 22709 +#define STRING_22710 22710 +#define STRING_22711 22711 +#define STRING_22712 22712 +#define STRING_22713 22713 +#define STRING_22714 22714 +#define STRING_22715 22715 +#define STRING_22716 22716 +#define STRING_22717 22717 +#define STRING_22718 22718 +#define STRING_22719 22719 +#define STRING_22720 22720 +#define STRING_22721 22721 +#define STRING_22722 22722 +#define STRING_22723 22723 +#define STRING_22724 22724 +#define STRING_22725 22725 +#define STRING_22726 22726 +#define STRING_22727 22727 +#define STRING_22728 22728 +#define STRING_22729 22729 +#define STRING_22730 22730 +#define STRING_22731 22731 +#define STRING_22732 22732 +#define STRING_22733 22733 +#define STRING_22734 22734 +#define STRING_22735 22735 +#define STRING_22736 22736 +#define STRING_22737 22737 +#define STRING_22738 22738 +#define STRING_22739 22739 +#define STRING_22740 22740 +#define STRING_22741 22741 +#define STRING_22742 22742 +#define STRING_22743 22743 +#define STRING_22744 22744 +#define STRING_22745 22745 +#define STRING_22746 22746 +#define STRING_22747 22747 +#define STRING_22748 22748 +#define STRING_22749 22749 +#define STRING_22750 22750 +#define STRING_22751 22751 +#define STRING_22752 22752 +#define STRING_22753 22753 +#define STRING_22754 22754 +#define STRING_22755 22755 +#define STRING_22756 22756 +#define STRING_22757 22757 +#define STRING_22758 22758 +#define STRING_22759 22759 +#define STRING_22760 22760 +#define STRING_22761 22761 +#define STRING_22762 22762 +#define STRING_22763 22763 +#define STRING_22764 22764 +#define STRING_22765 22765 +#define STRING_22766 22766 +#define STRING_22767 22767 +#define STRING_22768 22768 +#define STRING_22769 22769 +#define STRING_22770 22770 +#define STRING_22771 22771 +#define STRING_22772 22772 +#define STRING_22773 22773 +#define STRING_22774 22774 +#define STRING_22775 22775 +#define STRING_22776 22776 +#define STRING_22777 22777 +#define STRING_22778 22778 +#define STRING_22779 22779 +#define STRING_22780 22780 +#define STRING_22781 22781 +#define STRING_22782 22782 +#define STRING_22783 22783 +#define STRING_22784 22784 +#define STRING_22785 22785 +#define STRING_22786 22786 +#define STRING_22787 22787 +#define STRING_22788 22788 +#define STRING_22789 22789 +#define STRING_22790 22790 +#define STRING_22791 22791 +#define STRING_22792 22792 +#define STRING_22793 22793 +#define STRING_22794 22794 +#define STRING_22795 22795 +#define STRING_22796 22796 +#define STRING_22797 22797 +#define STRING_22798 22798 +#define STRING_22799 22799 +#define STRING_22800 22800 +#define STRING_22801 22801 +#define STRING_22802 22802 +#define STRING_22803 22803 +#define STRING_22804 22804 +#define STRING_22805 22805 +#define STRING_22806 22806 +#define STRING_22807 22807 +#define STRING_22808 22808 +#define STRING_22809 22809 +#define STRING_22810 22810 +#define STRING_22811 22811 +#define STRING_22812 22812 +#define STRING_22813 22813 +#define STRING_22814 22814 +#define STRING_22815 22815 +#define STRING_22816 22816 +#define STRING_22817 22817 +#define STRING_22818 22818 +#define STRING_22819 22819 +#define STRING_22820 22820 +#define STRING_22821 22821 +#define STRING_22822 22822 +#define STRING_22823 22823 +#define STRING_22824 22824 +#define STRING_22825 22825 +#define STRING_22826 22826 +#define STRING_22827 22827 +#define STRING_22828 22828 +#define STRING_22829 22829 +#define STRING_22830 22830 +#define STRING_22831 22831 +#define STRING_22832 22832 +#define STRING_22833 22833 +#define STRING_22834 22834 +#define STRING_22835 22835 +#define STRING_22836 22836 +#define STRING_22837 22837 +#define STRING_22838 22838 +#define STRING_22839 22839 +#define STRING_22840 22840 +#define STRING_22841 22841 +#define STRING_22842 22842 +#define STRING_22843 22843 +#define STRING_22844 22844 +#define STRING_22845 22845 +#define STRING_22846 22846 +#define STRING_22847 22847 +#define STRING_22848 22848 +#define STRING_22849 22849 +#define STRING_22850 22850 +#define STRING_22851 22851 +#define STRING_22852 22852 +#define STRING_22853 22853 +#define STRING_22854 22854 +#define STRING_22855 22855 +#define STRING_22856 22856 +#define STRING_22857 22857 +#define STRING_22858 22858 +#define STRING_22859 22859 +#define STRING_22860 22860 +#define STRING_22861 22861 +#define STRING_22862 22862 +#define STRING_22863 22863 +#define STRING_22864 22864 +#define STRING_22865 22865 +#define STRING_22866 22866 +#define STRING_22867 22867 +#define STRING_22868 22868 +#define STRING_22869 22869 +#define STRING_22870 22870 +#define STRING_22871 22871 +#define STRING_22872 22872 +#define STRING_22873 22873 +#define STRING_22874 22874 +#define STRING_22875 22875 +#define STRING_22876 22876 +#define STRING_22877 22877 +#define STRING_22878 22878 +#define STRING_22879 22879 +#define STRING_22880 22880 +#define STRING_22881 22881 +#define STRING_22882 22882 +#define STRING_22883 22883 +#define STRING_22884 22884 +#define STRING_22885 22885 +#define STRING_22886 22886 +#define STRING_22887 22887 +#define STRING_22888 22888 +#define STRING_22889 22889 +#define STRING_22890 22890 +#define STRING_22891 22891 +#define STRING_22892 22892 +#define STRING_22893 22893 +#define STRING_22894 22894 +#define STRING_22895 22895 +#define STRING_22896 22896 +#define STRING_22897 22897 +#define STRING_22898 22898 +#define STRING_22899 22899 +#define STRING_22900 22900 +#define STRING_22901 22901 +#define STRING_22902 22902 +#define STRING_22903 22903 +#define STRING_22904 22904 +#define STRING_22905 22905 +#define STRING_22906 22906 +#define STRING_22907 22907 +#define STRING_22908 22908 +#define STRING_22909 22909 +#define STRING_22910 22910 +#define STRING_22911 22911 +#define STRING_22912 22912 +#define STRING_22913 22913 +#define STRING_22914 22914 +#define STRING_22915 22915 +#define STRING_22916 22916 +#define STRING_22917 22917 +#define STRING_22918 22918 +#define STRING_22919 22919 +#define STRING_22920 22920 +#define STRING_22921 22921 +#define STRING_22922 22922 +#define STRING_22923 22923 +#define STRING_22924 22924 +#define STRING_22925 22925 +#define STRING_22926 22926 +#define STRING_22927 22927 +#define STRING_22928 22928 +#define STRING_22929 22929 +#define STRING_22930 22930 +#define STRING_CHORD_END 22931 diff --git a/guitar/res/strings.txt b/guitar/res/strings.txt new file mode 100644 index 0000000..fac01a8 --- /dev/null +++ b/guitar/res/strings.txt @@ -0,0 +1,1154 @@ + + +"A or Amaj [0 0 2 2 2 0] (Db E A) " +"A or Amaj [0 4 x 2 5 0] (Db E A) " +"A or Amaj [5 7 7 6 5 5] (Db E A) " +"A or Amaj [x 0 2 2 2 0] (Db E A) " +"A or Amaj [x 4 7 x x 5] (Db E A) " +"A #5 or Aaug [x 0 3 2 2 1] (Db F A) " +"A #5 or Aaug [x 0 x 2 2 1] (Db F A) " +"A/Ab [x 0 2 1 2 0] (Db E Ab A) " + + + + +"A/B [0 0 2 4 2 0] (Db E A B) " +"A/B [x 0 7 6 0 0] (Db E A B) " +"A/D [x 0 0 2 2 0] (Db D E A) " +"A/D [x x 0 2 2 0] (Db D E A) " +"A/D [x x 0 6 5 5] (Db D E A) " +"A/D [x x 0 9 10 9] (Db D E A) " +"A/G [3 x 2 2 2 0] (Db E G A) " +"A/G [x 0 2 0 2 0] (Db E G A) " +"A/G [x 0 2 2 2 3] (Db E G A) " +"A/Gb [0 0 2 2 2 2] (Db E Gb A) " +"A/Gb [0 x 4 2 2 0] (Db E Gb A) " +"A/Gb [2 x 2 2 2 0] (Db E Gb A) " +"A/Gb [x 0 4 2 2 0] (Db E Gb A) " +"A/Gb [x x 2 2 2 2] (Db E Gb A) " +"A5 or A(no 3rd) [5 7 7 x x 5] (E A)" +"A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " + + + + +"A5 or A(no 3rd) [5 7 7 x x 0] (E A) " +"A6 [0 0 2 2 2 2] (Db E Gb A) " +"A6 [0 x 4 2 2 0] (Db E Gb A) " +"A6 [2 x 2 2 2 0] (Db E Gb A) " +"A6 [x 0 4 2 2 0] (Db E Gb A) " +"A6 [x x 2 2 2 2] (Db E Gb A) " +"A6/7 [0 0 2 0 2 2] (Db E Gb G A) " +"A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " +"A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " +"A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " +"A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " +"A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " +"A7(#5) [1 0 3 0 2 1] (Db F G A) " +"A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " +"A7sus4 [x 0 2 0 3 0] (D E G A) " +"A7sus4 [x 0 2 0 3 3] (D E G A) " + + +"A7#9(#11) [5 x 6 7 5 7] (A Ab D E B) " +"A7b9(#11) [5 x 8 8 8 x] (A Bb Eb G) " +"A7#9 [x 12 11 12 13 12] (A Dd G C E) " +"A13#9 [5 x 5 6 7 8] (A G Db Gb C) " +"A13b9 [5 x 5 6 7 6] (A G Db Gb Cb) " +"A13b9 [5 x 5 3 2 2] (A G Bb Db Gb) " + + +"A7sus4 [x 0 2 2 3 3] (D E G A) " +"A7sus4 [5 x 0 0 3 0] (D E G A) " +"A7sus4 [x 0 0 0 x 0] (D E G A) " +"Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " +"Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " +"Aaug/D [x x 0 2 2 1] (Db D F A) " +"Aaug/G [1 0 3 0 2 1] (Db F G A) " +"Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " +"Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " +"Ab/A [x x 1 2 1 4] (C Eb Ab A) " +"Ab/F [x 8 10 8 9 8] (C Eb F Ab) " +"Ab/F [x x 1 1 1 1] (C Eb F Ab) " +"Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " +"Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " +"Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" +"Ab6 [x 8 10 8 9 8] (C Eb F Ab) " + + + + +"Ab6 [x x 1 1 1 1] (C Eb F Ab) " +"Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " +"Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " +"Abdim/E [0 2 0 1 0 0] (D E Ab B) " +"Abdim/E [0 2 2 1 3 0] (D E Ab B) " +"Abdim/E [x 2 0 1 3 0] (D E Ab B) " +"Abdim/E [x x 0 1 0 0] (D E Ab B) " +"Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " +"Abdim/F [x 2 0 1 0 1] (D F Ab B) " +"Abdim/F [x x 0 1 0 1] (D F Ab B) " +"Abdim/F [x x 3 4 3 4] (D F Ab B) " +"Abdim7 [x 2 0 1 0 1] (D F Ab B) " +"Abdim7 [x x 0 1 0 1] (D F Ab B) " +"Abdim7 [x x 3 4 3 4] (D F Ab B) " +"Abm [x x 6 4 4 4] (Eb Ab B) " +"Abm/D [x x 0 4 4 4] (D Eb Ab B) " + + + + +"Abm/E [0 2 1 1 0 0] (Eb E Ab B) " +"Abm/E [0 x 6 4 4 0] (Eb E Ab B) " +"Abm/E [x x 1 1 0 0] (Eb E Ab B) " +"Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " +"Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " +"Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " +"Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " +"Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " +"Adim/E [0 3 x 2 4 0] (C Eb E A) " +"Adim/F [x x 1 2 1 1] (C Eb F A) " +"Adim/F [x x 3 5 4 5] (C Eb F A) " +"Adim/G [x x 1 2 1 3] (C Eb G A) " +"Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " +"Adim7 [x x 1 2 1 2] (C Eb Gb A) " +"Am [x 0 2 2 1 0] (C E A) " +"Am [x 0 7 5 5 5] (C E A) " + + + + +"Am [x 3 2 2 1 0] (C E A) " +"Am [8 12 x x x 0] (C E A) " +"Am/B [0 0 7 5 0 0] (C E A B) " +"Am/B [x 3 2 2 0 0] (C E A B) " +"Am/D [x x 0 2 1 0] (C D E A) " +"Am/D [x x 0 5 5 5] (C D E A) " +"Am/Eb [0 3 x 2 4 0] (C Eb E A) " +"Am/F [0 0 3 2 1 0] (C E F A) " +"Am/F [1 3 3 2 1 0] (C E F A) " +"Am/F [1 x 2 2 1 0] (C E F A) " +"Am/F [x x 2 2 1 1] (C E F A) " +"Am/F [x x 3 2 1 0] (C E F A) " +"Am/G [0 0 2 0 1 3] (C E G A) " +"Am/G [x 0 2 0 1 0] (C E G A) " +"Am/G [x 0 2 2 1 3] (C E G A) " +"Am/G [x 0 5 5 5 8] (C E G A) " + + + + +"Am/Gb [x 0 2 2 1 2] (C E Gb A) " +"Am/Gb [x x 2 2 1 2] (C E Gb A) " +"Am6 [x 0 2 2 1 2] (C E Gb A) " +"Am6 [x x 2 2 1 2] (C E Gb A) " +"Am6 [5 x 4 5 5 5] (A Gb C E A)" +"Am7 [0 0 2 0 1 3] (C E G A) " +"Am7 [x 0 2 0 1 0] (C E G A) " +"Am7 [x 0 2 2 1 3] (C E G A) " +"Am7 [x 0 5 5 5 8] (C E G A) " +"Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " +"Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " +"Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " +"Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " +"Asus or Asus4 [0 0 2 2 3 0] (D E A) " +"Asus or Asus4 [x 0 2 2 3 0] (D E A) " +"Asus or Asus4 [5 5 7 7 x 0] (D E A) " +"Asus or Asus4 [x 0 0 2 3 0] (D E A) " + + + + +"Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " +"Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " +"Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " +"Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " +"Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " +"Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " +"Asus2/C [0 0 7 5 0 0] (C E A B) " +"Asus2/C [x 3 2 2 0 0] (C E A B) " +"Asus2/D [0 2 0 2 0 0] (D E A B) " +"Asus2/D [x 2 0 2 3 0] (D E A B) " +"Asus2/Db [0 0 2 4 2 0] (Db E A B) " +"Asus2/Db [x 0 7 6 0 0] (Db E A B) " +"Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " +"Asus2/F [0 0 3 2 0 0] (E F A B) " +"Asus2/G [3 x 2 2 0 0] (E G A B) " +"Asus2/G [x 0 2 0 0 0] (E G A B) " + + + + +"Asus2/G [x 0 5 4 5 0] (E G A B) " +"Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " +"Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " +"Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " +"Asus4/B [0 2 0 2 0 0] (D E A B) " +"Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " +"Asus4/C [x x 0 2 1 0] (C D E A) " +"Asus4/C [x x 0 5 5 5] (C D E A) " +"Asus4/Db [x 0 0 2 2 0] (Db D E A) " +"Asus4/Db [x x 0 2 2 0] (Db D E A) " +"Asus4/Db [x x 0 6 5 5] (Db D E A) " +"Asus4/Db [x x 0 9 10 9] (Db D E A) " +"Asus4/F [x x 7 7 6 0] (D E F A) " +"Asus4/G [x 0 2 0 3 0] (D E G A) " +"Asus4/G [x 0 2 0 3 3] (D E G A) " +"Asus4/G [x 0 2 2 3 3] (D E G A) " + + + + +"Asus4/G [x 0 0 0 x 0] (D E G A) " +"Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " +"Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " +"Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " +"Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " +"Asus4/Gb [x x 2 2 3 2] (D E Gb A) " +"Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " +"Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " +"B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " +"B #5 or Baug [3 2 1 0 0 3] (Eb G B) " +"B #5 or Baug [3 x 1 0 0 3] (Eb G B) " +"B/A [2 x 1 2 0 2] (Eb Gb A B) " +"B/A [x 0 1 2 0 2] (Eb Gb A B) " +"B/A [x 2 1 2 0 2] (Eb Gb A B) " +"B/A [x 2 4 2 4 2] (Eb Gb A B) " +"B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " + + + + +"B/E [x 2 2 4 4 2] (Eb E Gb B) " +"B/E [x x 4 4 4 0] (Eb E Gb B) " +"B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" +"B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" +"B6 [x x 4 4 4 4] (Eb Gb Ab B) " +"B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " +"B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " +"B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " +"B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " +"B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " +"B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " +"B7sus4 [x 0 4 4 0 0] (E Gb A B) " +"B7sus4 [x 2 4 2 5 2] (E Gb A B) " + +"B7#9(#11) [7 x 8 9 7 9] (B Bb E Gb Dd) " +"B7b9(#11) [7 x 10 10 10 x] (B C F A) " +"B7#9 [x 14 13 14 15 14] (B Eb A D Gb) " +"B13#9 [7 x 7 8 9 10] (B A Eb Ab D) " +"B13b9 [7 x 7 8 9 8] (A G Db Gb Cb) " +"B13b9 [7 x 7 5 4 4] (B A C Eb Ab) " + +"Baug/E [3 x 1 0 0 0] (Eb E G B) " +"Baug/E [x x 1 0 0 0] (Eb E G B) " +"Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " + + + + +"Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " +"Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " +"Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " +"Bb b5 [x x 0 3 x 0] (D E Bb) " +"Bb/A [1 1 3 2 3 1] (D F A Bb) " +"Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " +"Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " +"Bb/Db [x x 0 6 6 6] (Db D F Bb) " +"Bb/E [x 1 3 3 3 0] (D E F Bb) " +"Bb/G [3 5 3 3 3 3] (D F G Bb) " +"Bb/G [x x 3 3 3 3] (D F G Bb) " +"Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" +"Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" +"Bb6 [3 5 3 3 3 3] (D F G Bb) " +"Bb6 [x x 3 3 3 3] (D F G Bb) " +"Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " + + + + +"Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " +"Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " +"Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " +"Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " +"Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " +"Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " +"Bbdim/D [x x 0 3 2 0] (Db D E Bb) " +"Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " +"Bbdim/G [x x 2 3 2 3] (Db E G Bb) " +"Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " +"Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " +"Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " +"Bbdim7 [x x 2 3 2 3] (Db E G Bb) " +"Bbm [1 1 3 3 2 1] (Db F Bb) " +"Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " +"Bbm/D [x x 0 6 6 6] (Db D F Bb) " + + +"Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " +"Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " +"Bbm6 [6 x 5 6 6 6] (Bb G Db F Bb) " + + +"Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " +"Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " +"Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " +"Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " +"Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " +"Bdim/A [1 2 3 2 3 1] (D F A B) " +"Bdim/A [x 2 0 2 0 1] (D F A B) " +"Bdim/A [x x 0 2 0 1] (D F A B) " +"Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " +"Bdim/Ab [x x 0 1 0 1] (D F Ab B) " +"Bdim/Ab [x x 3 4 3 4] (D F Ab B) " +"Bdim/G [1 x 0 0 0 3] (D F G B) " +"Bdim/G [3 2 0 0 0 1] (D F G B) " +"Bdim/G [x x 0 0 0 1] (D F G B) " + + + + +"Bdim7 [x 2 0 1 0 1] (D F Ab B) " +"Bdim7 [x x 0 1 0 1] (D F Ab B) " +"Bdim7 [x x 3 4 3 4] (D F Ab B) " +"Bm [2 2 4 4 3 2] (D Gb B) " +"Bm [x 2 4 4 3 2] (D Gb B) " +"Bm [x x 0 4 3 2] (D Gb B) " +"Bm/A [x 0 4 4 3 2] (D Gb A B) " +"Bm/A [x 2 0 2 0 2] (D Gb A B) " +"Bm/A [x 2 0 2 3 2] (D Gb A B) " +"Bm/A [x 2 4 2 3 2] (D Gb A B) " +"Bm/A [x x 0 2 0 2] (D Gb A B) " +"Bm/G [2 2 0 0 0 3] (D Gb G B) " +"Bm/G [2 2 0 0 3 3] (D Gb G B) " +"Bm/G [3 2 0 0 0 2] (D Gb G B) " +"Bm/G [x x 4 4 3 3] (D Gb G B) " +"Bm7 [x 0 4 4 3 2] (D Gb A B) " +"Bm6 [7 x 6 7 7 7] (B Ab D Eb B) " +"Bm7 [x 2 0 2 0 2] (D Gb A B) " +"Bm7 [x 2 0 2 3 2] (D Gb A B) " +"Bm7 [x 2 4 2 3 2] (D Gb A B) " +"Bm7 [x x 0 2 0 2] (D Gb A B) " +"Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " +"Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " +"Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " +"Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " +"Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " +"Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " +"Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " +"Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " +"Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" +"Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " +"Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " +"Bsus4/A [x 0 4 4 0 0] (E Gb A B) " + + + + +"Bsus4/A [x 2 4 2 5 2] (E Gb A B) " +"Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " +"Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " +"Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " +"Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " +"Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " +"Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " +"Bsus4/G [0 2 2 0 0 2] (E Gb G B) " +"Bsus4/G [0 2 4 0 0 0] (E Gb G B) " +"Bsus4/G [0 x 4 0 0 0] (E Gb G B) " +"Bsus4/G [2 2 2 0 0 0] (E Gb G B) " +"C or Cmaj [0 3 2 0 1 0] (C E G) " +"C or Cmaj [0 3 5 5 5 3] (C E G) " +"C or Cmaj [3 3 2 0 1 0] (C E G) " +"C or Cmaj [3 x 2 0 1 0] (C E G) " +"C or Cmaj [x 3 2 0 1 0] (C E G) " + + + + +"C or Cmaj [x 3 5 5 5 0] (C E G) " +"C #5 or Caug [x 3 2 1 1 0] (C E Ab) " +"C b5 [x x 4 5 x 0] (C E Gb) " +"C/A [0 0 2 0 1 3] (C E G A) " +"C/A [x 0 2 0 1 0] (C E G A) " +"C/A [x 0 2 2 1 3] (C E G A) " +"C/A [x 0 5 5 5 8] (C E G A) " +"C/B [0 3 2 0 0 0] (C E G B) " +"C/B [x 2 2 0 1 0] (C E G B) " +"C/B [x 3 5 4 5 3] (C E G B) " +"C/Bb [x 3 5 3 5 3] (C E G Bb) " +"C/D [3 x 0 0 1 0] (C D E G) " +"C/D [x 3 0 0 1 0] (C D E G) " +"C/D [x 3 2 0 3 0] (C D E G) " +"C/D [x 3 2 0 3 3] (C D E G) " +"C/D [x x 0 0 1 0] (C D E G) " + + + + +"C/D [x x 0 5 5 3] (C D E G) " +"C/D [x 10 12 12 13 0] (C D E G) " +"C/D [x 5 5 5 x 0] (C D E G) " +"C/F [x 3 3 0 1 0] (C E F G) " +"C/F [x x 3 0 1 0] (C E F G) " +"C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" +"C6 [0 0 2 0 1 3] (C E G A) " +"C6 [x 0 2 0 1 0] (C E G A) " +"C6 [x 0 2 2 1 3] (C E G A) " +"C6 [x 0 5 5 5 8] (C E G A) " +"C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " +"C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " +"C7sus4 [x 3 5 3 6 3] (C F G Bb) " + +"C7#9(#11) [8 x 10 11 8 11] (C C Gb G Eb) " +"C7b9(#11) [8 x 11 11 11] (C Db Gb Bb) " +"C7#9 [x 3 2 3 4 3] (C E Bb Eb G) " +"C13#9 [8 x 8 9 10 11] (C Bb E A Eb) " +"C13b9 [8 x 8 9 10 9] (C Bb A A D) " +"C13b9 [8 x 8 6 5 5] (C Bb Db E A) " + +"C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " +"Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " +"Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " + + + + +"Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " +"Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " +"Cadd9 or C2 [x x 0 0 1 0] (C D E G) " +"Cadd9 or C2 [x x 0 5 5 3] (C D E G) " +"Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " +"Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " +"Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " +"Cdim/A [x x 1 2 1 2] (C Eb Gb A) " +"Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " +"Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " +"Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" +"Cdim7 [x x 1 2 1 2] (C Eb Gb A) " +"Cm [x 3 5 5 4 3] (C Eb G) " +"Cm [x x 5 5 4 3] (C Eb G) " +"Cm/A [x x 1 2 1 3] (C Eb G A) " +"Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " + + + + +"Cm6 [x x 1 2 1 3] (C Eb G A) " +"Cm6 [8 x 7 8 8 8] (C A Eb G C) " +"Cm7 [x 3 5 3 4 3] (C Eb G Bb) " +"Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " +"Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " +"Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " +"Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " +"Csus or Csus4 [x 3 3 0 1 1] (C F G) " +"Csus or Csus4 [x x 3 0 1 1] (C F G) " +"Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" +"Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" +"Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " +"Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " +"Csus2/A [x 5 7 5 8 3] (C D G A)" +"Csus2/A [x x 0 2 1 3] (C D G A) " +"Csus2/B [3 3 0 0 0 3] (C D G B) " +"Csus2/B [x 3 0 0 0 3] (C D G B) " + + + + +"Csus2/E [3 x 0 0 1 0] (C D E G) " +"Csus2/E [x 3 0 0 1 0] (C D E G) " +"Csus2/E [x 3 2 0 3 0] (C D E G) " +"Csus2/E [x 3 2 0 3 3] (C D E G) " +"Csus2/E [x x 0 0 1 0] (C D E G) " +"Csus2/E [x x 0 5 5 3] (C D E G) " +"Csus2/E [x 10 12 12 13 0] (C D E G) " +"Csus2/E [x 5 5 5 x 0] (C D E G) " +"Csus2/F [3 3 0 0 1 1] (C D F G) " +"Csus4/A [3 x 3 2 1 1] (C F G A) " +"Csus4/A [x x 3 2 1 3] (C F G A) " +"Csus4/B [x 3 3 0 0 3] (C F G B) " +"Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " +"Csus4/D [3 3 0 0 1 1] (C D F G) " +"Csus4/E [x 3 3 0 1 0] (C E F G) " +"Csus4/E [x x 3 0 1 0] (C E F G) " + + + + +"D or Dmaj [x 5 4 2 3 2] (D Gb A)" +"D or Dmaj [x 9 7 7 x 2] (D Gb A)" +"D or Dmaj [2 0 0 2 3 2] (D Gb A) " +"D or Dmaj [x 0 0 2 3 2] (D Gb A) " +"D or Dmaj [x 0 4 2 3 2] (D Gb A) " +"D or Dmaj [x x 0 2 3 2] (D Gb A) " +"D or Dmaj [x x 0 7 7 5] (D Gb A) " +"D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " +"D/B [x 0 4 4 3 2] (D Gb A B) " +"D/B [x 2 0 2 0 2] (D Gb A B) " +"D/B [x 2 0 2 3 2] (D Gb A B) " +"D/B [x 2 4 2 3 2] (D Gb A B) " +"D/B [x x 0 2 0 2] (D Gb A B) " +"D/C [x 5 7 5 7 2] (C D Gb A)" +"D/C [x 0 0 2 1 2] (C D Gb A) " +"D/C [x 3 x 2 3 2] (C D Gb A) " + + + + +"D/C [x 5 7 5 7 5] (C D Gb A) " +"D/Db [x x 0 14 14 14] (Db D Gb A) " +"D/Db [x x 0 2 2 2] (Db D Gb A) " +"D/E [0 0 0 2 3 2] (D E Gb A) " +"D/E [0 0 4 2 3 0] (D E Gb A) " +"D/E [2 x 0 2 3 0] (D E Gb A) " +"D/E [x 0 2 2 3 2] (D E Gb A) " +"D/E [x x 2 2 3 2] (D E Gb A) " +"D/E [x 5 4 2 3 0] (D E Gb A) " +"D/E [x 9 7 7 x 0] (D E Gb A) " +"D/G [5 x 4 0 3 5] (D Gb G A)" +"D/G [3 x 0 2 3 2] (D Gb G A) " +"D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" +"D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" +"D6 [x 0 4 4 3 2] (D Gb A B) " +"D6 [x 2 0 2 0 2] (D Gb A B) " + + + + +"D6 [x 2 0 2 3 2] (D Gb A B) " +"D6 [x 2 4 2 3 2] (D Gb A B) " +"D6 [x x 0 2 0 2] (D Gb A B) " +"D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " +"D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " +"D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" +"D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " +"D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " +"D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " +"D7sus4 [x 5 7 5 8 3] (C D G A)" +"D7sus4 [x x 0 2 1 3] (C D G A) " +"D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " +"D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " +"D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " +"D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " +"Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " + + + + +"Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " +"Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " +"Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " +"Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " +"Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " +"Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " +"Daug/E [2 x 4 3 3 0] (D E Gb Bb) " +"Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " +"Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " +"Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " +"Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " +"Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " +"Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " +"Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " +"Db b5 [x x 3 0 2 1] (Db F G) " +"Db/B [x 4 3 4 0 4] (Db F Ab B) " + + + + +"Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " +"Db/C [x 3 3 1 2 1] (C Db F Ab) " +"Db/C [x 4 6 5 6 4] (C Db F Ab) " +"Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" +"Db6 [x 1 3 1 2 1] (Db F Ab Bb) " +"Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " +"Dbaug/D [x x 0 2 2 1] (Db D F A) " +"Dbaug/G [1 0 3 0 2 1] (Db F G A) " +"Dbdim/A [3 x 2 2 2 0] (Db E G A) " +"Dbdim/A [x 0 2 0 2 0] (Db E G A) " +"Dbdim/A [x 0 2 2 2 3] (Db E G A) " +"Dbdim/B [0 2 2 0 2 0] (Db E G B) " +"Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " +"Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " +"Dbdim/D [3 x 0 0 2 0] (Db D E G) " +"Dbdim/D [x x 0 0 2 0] (Db D E G) " + + + + +"Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " +"Dbdim7 [x x 2 3 2 3] (Db E G Bb) " +"Dbm [x 4 6 6 5 4] (Db E Ab) " +"Dbm [x x 2 1 2 0] (Db E Ab) " +"Dbm [x 4 6 6 x 0] (Db E Ab) " +"Dbm/A [x 0 2 1 2 0] (Db E Ab A) " +"Dbm/B [0 2 2 1 2 0] (Db E Ab B) " +"Dbm/B [x 4 6 4 5 4] (Db E Ab B) " +"Dbm7 [0 2 2 1 2 0] (Db E Ab B) " +"Dbm7 [x 4 6 4 5 4] (Db E Ab B) " +"Dbm6 [9 x 8 9 9 9] (Db Bb E Ab Bb) " +"Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " +"Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " +"Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " +"Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " +"Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " +"Ddim/B [x 2 0 1 0 1] (D F Ab B) " + + + + +"Ddim/B [x x 0 1 0 1] (D F Ab B) " +"Ddim/B [x x 3 4 3 4] (D F Ab B) " +"Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " +"Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " +"Ddim/C [x x 0 1 1 1] (C D F Ab) " +"Ddim7 [x 2 0 1 0 1] (D F Ab B) " +"Ddim7 [x x 0 1 0 1] (D F Ab B) " +"Ddim7 [x x 3 4 3 4] (D F Ab B) " +"Dm [x 0 0 2 3 1] (D F A) " +"Dm/B [1 2 3 2 3 1] (D F A B) " +"Dm/B [x 2 0 2 0 1] (D F A B) " +"Dm/B [x x 0 2 0 1] (D F A B) " +"Dm/Bb [1 1 3 2 3 1] (D F A Bb) " +"Dm/C [x 5 7 5 6 5] (C D F A) " +"Dm/C [x x 0 2 1 1] (C D F A) " +"Dm/C [x x 0 5 6 5] (C D F A) " + + + + +"Dm/Db [x x 0 2 2 1] (Db D F A) " +"Dm/E [x x 7 7 6 0] (D E F A) " +"Dm6 [1 2 3 2 3 1] (D F A B) " +"Dm6 [x 2 0 2 0 1] (D F A B) " +"Dm6 [x x 0 2 0 1] (D F A B) " +"Dm6 [10 x 9 10 10 10] (D B F A D) " +"Dm7 [x 5 7 5 6 5] (C D F A) " +"Dm7 [x x 0 2 1 1] (C D F A) " +"Dm7 [x x 0 5 6 5] (C D F A) " +"Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " +"Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " +"Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " +"Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " +"Dmin/maj7 [x x 0 2 2 1] (Db D F A) " +"Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" +"Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " +"Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " + + + + +"Dsus or Dsus4 [x x 0 2 3 3] (D G A) " +"Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" +"Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" +"Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " +"Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " +"Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " +"Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " +"Dsus2/B [0 2 0 2 0 0] (D E A B) " +"Dsus2/B [x 2 0 2 3 0] (D E A B) " +"Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " +"Dsus2/C [x x 0 2 1 0] (C D E A) " +"Dsus2/C [x x 0 5 5 5] (C D E A) " +"Dsus2/Db [x 0 0 2 2 0] (Db D E A) " +"Dsus2/Db [x x 0 2 2 0] (Db D E A) " +"Dsus2/Db [x x 0 6 5 5] (Db D E A) " +"Dsus2/Db [x x 0 9 10 9] (Db D E A) " + + + + +"Dsus2/F [x x 7 7 6 0] (D E F A) " +"Dsus2/G [x 0 2 0 3 0] (D E G A) " +"Dsus2/G [x 0 2 0 3 3] (D E G A) " +"Dsus2/G [x 0 2 2 3 3] (D E G A) " +"Dsus2/G [5 x 0 0 3 0] (D E G A) " +"Dsus2/G [x 0 0 0 x 0] (D E G A) " +"Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " +"Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " +"Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " +"Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " +"Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " +"Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " +"Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " +"Dsus4/B [3 0 0 0 0 3] (D G A B) " +"Dsus4/B [3 2 0 2 0 3] (D G A B) " +"Dsus4/C [x 5 7 5 8 3] (C D G A)" + + + + +"Dsus4/C [x x 0 2 1 3] (C D G A) " +"Dsus4/E [x 0 2 0 3 0] (D E G A) " +"Dsus4/E [x 0 2 0 3 3] (D E G A) " +"Dsus4/E [x 0 2 2 3 3] (D E G A) " +"Dsus4/E [5 x 0 0 3 0] (D E G A) " +"Dsus4/E [x 0 0 0 x 0] (D E G A) " +"Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" +"Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " +"E or Emaj [0 2 2 1 0 0] (E Ab B) " +"E or Emaj [x 7 6 4 5 0] (E Ab B) " +"E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " +"E/A [x 0 2 1 0 0] (E Ab A B) " +"E/D [0 2 0 1 0 0] (D E Ab B) " +"E/D [0 2 2 1 3 0] (D E Ab B) " +"E/D [x 2 0 1 3 0] (D E Ab B) " +"E/D [x x 0 1 0 0] (D E Ab B) " + + + + +"E/Db [0 2 2 1 2 0] (Db E Ab B) " +"E/Db [x 4 6 4 5 4] (Db E Ab B) " +"E/Eb [0 2 1 1 0 0] (Eb E Ab B) " +"E/Eb [0 x 6 4 4 0] (Eb E Ab B) " +"E/Eb [x x 1 1 0 0] (Eb E Ab B) " +"E/Gb [0 2 2 1 0 2] (E Gb Ab B) " +"E/Gb [0 x 4 1 0 0] (E Gb Ab B) " +"E/Gb [2 2 2 1 0 0] (E Gb Ab B) " +"E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " +"E5 or E(no 3rd) [0 2 x x x 0] (E B) " +"E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " +"E6 [0 2 2 1 2 0] (Db E Ab B) " +"E6 [x 4 6 4 5 4] (Db E Ab B) " +"E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " +"E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " +"E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " + + + + +"E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " +"E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " +"E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " +"E7sus4 [0 2 0 2 0 0] (D E A B) " +"E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " +"E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " +"Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " +"Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " +"Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " +"Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " +"Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " +"Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " +"Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " +"Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " +"Eb/C [x 3 5 3 4 3] (C Eb G Bb) " +"Eb/D [x 6 8 7 8 6] (D Eb G Bb) " + + + + +"Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " +"Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " +"Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " +"Eb/E [x x 5 3 4 0] (Eb E G Bb) " +"Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" +"Eb6 [x 3 5 3 4 3] (C Eb G Bb) " +"Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " +"Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " +"Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " +"Ebaug/E [3 x 1 0 0 0] (Eb E G B) " +"Ebaug/E [x x 1 0 0 0] (Eb E G B) " +"Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " +"Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " +"Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " +"Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " +"Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " + + + + +"Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " +"Ebm [x x 4 3 4 2] (Eb Gb Bb) " +"Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " +"Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " +"Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " +"Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " +"Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " +"Edim/C [x 3 5 3 5 3] (C E G Bb) " +"Edim/D [3 x 0 3 3 0] (D E G Bb) " +"Edim/Db [x 1 2 0 2 0] (Db E G Bb) " +"Edim/Db [x x 2 3 2 3] (Db E G Bb) " +"Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " +"Edim7 [x 1 2 0 2 0] (Db E G Bb) " +"Edim7 [x x 2 3 2 3] (Db E G Bb) " +"Em [0 2 2 0 0 0] (E G B) " +"Em [3 x 2 0 0 0] (E G B) " + + + + +"Em [x 2 5 x x 0] (E G B) " +"Em/A [3 x 2 2 0 0] (E G A B) " +"Em/A [x 0 2 0 0 0] (E G A B) " +"Em/A [x 0 5 4 5 0] (E G A B) " +"Em/C [0 3 2 0 0 0] (C E G B) " +"Em/C [x 2 2 0 1 0] (C E G B) " +"Em/C [x 3 5 4 5 3] (C E G B) " +"Em/D [0 2 0 0 0 0] (D E G B) " +"Em/D [0 2 0 0 3 0] (D E G B) " +"Em/D [0 2 2 0 3 0] (D E G B) " +"Em/D [0 2 2 0 3 3] (D E G B) " +"Em/D [x x 0 12 12 12] (D E G B) " +"Em/D [x x 0 9 8 7] (D E G B) " +"Em/D [x x 2 4 3 3] (D E G B) " +"Em/D [0 x 0 0 0 0] (D E G B) " +"Em/D [x 10 12 12 12 0] (D E G B) " + + + + +"Em/Db [0 2 2 0 2 0] (Db E G B) " +"Em/Eb [3 x 1 0 0 0] (Eb E G B) " +"Em/Eb [x x 1 0 0 0] (Eb E G B) " +"Em/Gb [0 2 2 0 0 2] (E Gb G B) " +"Em/Gb [0 2 4 0 0 0] (E Gb G B) " +"Em/Gb [0 x 4 0 0 0] (E Gb G B) " +"Em/Gb [2 2 2 0 0 0] (E Gb G B) " +"Em6 [0 2 2 0 2 0] (Db E G B) " +"Em6 [12 x 11 12 12 12] (E Db G B E) " +"Em7 [0 2 0 0 0 0] (D E G B) " +"Em7 [0 2 0 0 3 0] (D E G B) " +"Em7 [0 2 2 0 3 0] (D E G B) " +"Em7 [0 2 2 0 3 3] (D E G B) " +"Em7 [x x 0 0 0 0] (D E G B) " +"Em7 [x x 0 12 12 12] (D E G B) " +"Em7 [x x 0 9 8 7] (D E G B) " +"Em7 [x x 2 4 3 3] (D E G B) " + + + + +"Em7 [0 x 0 0 0 0] (D E G B) " +"Em7 [x 10 12 12 12 0] (D E G B) " +"Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " +"Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " +"Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " +"Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " +"Em9 [0 2 0 0 0 2] (D E Gb G B) " +"Em9 [0 2 0 0 3 2] (D E Gb G B) " +"Em9 [2 2 0 0 0 0] (D E Gb G B) " +"Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " +"Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " +"Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " +"Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " +"Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " +"Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " +"Emin/maj7 [x x 1 0 0 0] (Eb E G B) " + + + + +"Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " +"Esus or Esus4 [0 0 2 2 0 0] (E A B) " +"Esus or Esus4 [0 0 2 4 0 0] (E A B) " +"Esus or Esus4 [0 2 2 2 0 0] (E A B) " +"Esus or Esus4 [x 0 2 2 0 0] (E A B) " +"Esus or Esus4 [x x 2 2 0 0] (E A B) " +"Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" +"Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" +"Esus2/A [x 0 4 4 0 0] (E Gb A B) " +"Esus2/A [x 2 4 2 5 2] (E Gb A B) " +"Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " +"Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " +"Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " +"Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " +"Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " +"Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " + + + + +"Esus2/G [0 2 2 0 0 2] (E Gb G B) " +"Esus2/G [0 2 4 0 0 0] (E Gb G B) " +"Esus2/G [0 x 4 0 0 0] (E Gb G B) " +"Esus2/G [2 2 2 0 0 0] (E Gb G B) " +"Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " +"Esus4/C [0 0 7 5 0 0] (C E A B) " +"Esus4/C [x 3 2 2 0 0] (C E A B) " +"Esus4/D [0 2 0 2 0 0] (D E A B) " +"Esus4/D [x 2 0 2 3 0] (D E A B) " +"Esus4/Db [0 0 2 4 2 0] (Db E A B) " +"Esus4/Db [x 0 7 6 0 0] (Db E A B) " +"Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " +"Esus4/F [0 0 3 2 0 0] (E F A B) " +"Esus4/G [x 0 2 0 0 0] (E G A B) " +"Esus4/G [x 0 5 4 5 0] (E G A B) " +"Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " + + + + +"Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " +"F or Fmaj [1 3 3 2 1 1] (C F A) " +"F or Fmaj [x 0 3 2 1 1] (C F A) " +"F or Fmaj [x 3 3 2 1 1] (C F A) " +"F or Fmaj [x x 3 2 1 1] (C F A) " +"F #5 or Faug [x 0 3 2 2 1] (Db F A) " +"F #5 or Faug [x 0 x 2 2 1] (Db F A) " +"F/D [x 5 7 5 6 5] (C D F A) " +"F/D [x x 0 2 1 1] (C D F A) " +"F/D [x x 0 5 6 5] (C D F A) " +"F/E [0 0 3 2 1 0] (C E F A) " +"F/E [1 3 3 2 1 0] (C E F A) " +"F/E [1 x 2 2 1 0] (C E F A) " +"F/E [x x 2 2 1 1] (C E F A) " +"F/E [x x 3 2 1 0] (C E F A) " +"F/Eb [x x 1 2 1 1] (C Eb F A) " + + + + +"F/Eb [x x 3 5 4 5] (C Eb F A) " +"F/G [3 x 3 2 1 1] (C F G A) " +"F/G [x x 3 2 1 3] (C F G A) " +"F5 or F(no 3rd) [1 3 3 x x 1] (C F)" +"F5 or F(no 3rd) [x 8 10 x x 1] (C F)" +"F6 [x 5 7 5 6 5] (C D F A) " +"F6 [x x 0 2 1 1] (C D F A) " +"F6 [x x 0 5 6 5] (C D F A) " +"F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " +"F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " +"F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " +"Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " +"Fadd9 or F2 [x x 3 2 1 3] (C F G A) " +"Faug/D [x x 0 2 2 1] (Db D F A) " +"Faug/G [1 0 3 0 2 1] (Db F G A) " +"Fdim/D [x 2 0 1 0 1] (D F Ab B) " + + + + +"Fdim/D [x x 0 1 0 1] (D F Ab B) " +"Fdim/D [x x 3 4 3 4] (D F Ab B) " +"Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " +"Fdim7 [x 2 0 1 0 1] (D F Ab B) " +"Fdim7 [x x 0 1 0 1] (D F Ab B) " +"Fdim7 [x x 3 4 3 4] (D F Ab B) " +"Fm [x 3 3 1 1 1] (C F Ab) " +"Fm [x x 3 1 1 1] (C F Ab) " +"Fm/D [x x 0 1 1 1] (C D F Ab) " +"Fm/Db [x 3 3 1 2 1] (C Db F Ab) " +"Fm/Db [x 4 6 5 6 4] (C Db F Ab) " +"Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " +"Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " +"Fm6 [x x 0 1 1 1] (C D F Ab) " +"Fm6 [1 x 0 1 1 1] (F D Ab C F) " +"Fm7 [x 8 10 8 9 8] (C Eb F Ab) " +"Fm7 [x x 1 1 1 1] (C Eb F Ab) " + + + + +"Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " +"Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " +"Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " +"Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " +"Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " +"Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " +"Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " +"Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " +"Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " +"Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " +"Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " +"Fsus2/A [3 x 3 2 1 1] (C F G A) " +"Fsus2/A [x x 3 2 1 3] (C F G A) " +"Fsus2/B [x 3 3 0 0 3] (C F G B) " +"Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " +"Fsus2/D [3 3 0 0 1 1] (C D F G) " + + + + +"Fsus2/E [x 3 3 0 1 0] (C E F G) " +"Fsus2/E [x x 3 0 1 0] (C E F G) " +"Fsus4/G [x 3 5 3 6 3] (C F G Bb) " +"G or Gmaj [x 10 12 12 12 10] (D G B)" +"G or Gmaj [3 2 0 0 0 3] (D G B) " +"G or Gmaj [3 2 0 0 3 3] (D G B) " +"G or Gmaj [3 5 5 4 3 3] (D G B) " +"G or Gmaj [3 x 0 0 0 3] (D G B) " +"G or Gmaj [x 5 5 4 3 3] (D G B) " +"G or Gmaj [x x 0 4 3 3] (D G B) " +"G or Gmaj [x x 0 7 8 7] (D G B) " +"G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " +"G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " +"G/A [3 0 0 0 0 3] (D G A B) " +"G/A [3 2 0 2 0 3] (D G A B) " +"G/C [3 3 0 0 0 3] (C D G B) " + + + + +"G/C [x 3 0 0 0 3] (C D G B) " +"G/E [0 2 0 0 0 0] (D E G B) " +"G/E [0 2 0 0 3 0] (D E G B) " +"G/E [0 2 2 0 3 0] (D E G B) " +"G/E [0 2 2 0 3 3] (D E G B) " +"G/E [x x 0 12 12 12] (D E G B) " +"G/E [x x 0 9 8 7] (D E G B) " +"G/E [x x 2 4 3 3] (D E G B) " +"G/E [0 x 0 0 0 0] (D E G B) " +"G/E [x 10 12 12 12 0] (D E G B) " +"G/F [1 x 0 0 0 3] (D F G B) " +"G/F [3 2 0 0 0 1] (D F G B) " +"G/F [x x 0 0 0 1] (D F G B) " +"G/Gb [2 2 0 0 0 3] (D Gb G B) " +"G/Gb [2 2 0 0 3 3] (D Gb G B) " +"G/Gb [3 2 0 0 0 2] (D Gb G B) " + + + + +"G/Gb [x x 4 4 3 3] (D Gb G B) " +"G5 or G(no 3rd) [3 5 5 x x 3] (D G)" +"G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " +"G6 [0 2 0 0 0 0] (D E G B) " +"G6 [0 2 0 0 3 0] (D E G B) " +"G6 [0 2 2 0 3 0] (D E G B) " +"G6 [0 2 2 0 3 3] (D E G B) " +"G6 [x x 0 12 12 12] (D E G B) " +"G6 [x x 0 9 8 7] (D E G B) " +"G6 [x x 2 4 3 3] (D E G B) " +"G6 [0 x 0 0 0 0] (D E G B) " +"G6 [x 10 12 12 12 0] (D E G B) " +"G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " +"G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " +"G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " +"G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " + + + + +"G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " +"G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " +"G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " +"G7sus4 [3 3 0 0 1 1] (C D F G) " +"G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " +"G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " +"Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " +"Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " +"Gaug/E [3 x 1 0 0 0] (Eb E G B) " +"Gaug/E [x x 1 0 0 0] (Eb E G B) " +"Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " +"Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " +"Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " +"Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " +"Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " +"Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " + + + + +"Gb/E [x x 4 3 2 0] (Db E Gb Bb) " +"Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " +"Gb/F [x x 3 3 2 2] (Db F Gb Bb) " +"Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " +"Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " +"Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " +"Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " +"Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " +"Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " +"Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " +"Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " +"Gbdim/D [x 5 7 5 7 2] (C D Gb A)" +"Gbdim/D [x 0 0 2 1 2] (C D Gb A) " +"Gbdim/D [x 3 x 2 3 2] (C D Gb A) " +"Gbdim/D [x 5 7 5 7 5] (C D Gb A) " +"Gbdim/E [x 0 2 2 1 2] (C E Gb A) " + + + + +"Gbdim/E [x x 2 2 1 2] (C E Gb A) " +"Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " +"Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " +"Gbm [2 4 4 2 2 2] (Db Gb A) " +"Gbm [x 4 4 2 2 2] (Db Gb A) " +"Gbm [x x 4 2 2 2] (Db Gb A) " +"Gbm/D [x x 0 14 14 14] (Db D Gb A) " +"Gbm/D [x x 0 2 2 2] (Db D Gb A) " +"Gbm/E [0 0 2 2 2 2] (Db E Gb A) " +"Gbm/E [0 x 4 2 2 0] (Db E Gb A) " +"Gbm/E [2 x 2 2 2 0] (Db E Gb A) " +"Gbm/E [x 0 4 2 2 0] (Db E Gb A) " +"Gbm/E [x x 2 2 2 2] (Db E Gb A) " +"Gbm7 [0 0 2 2 2 2] (Db E Gb A) " +"Gbm7 [0 x 4 2 2 0] (Db E Gb A) " +"Gbm7 [2 x 2 2 2 0] (Db E Gb A) " +"Gbm7 [x 0 4 2 2 0] (Db E Gb A) " +"Gbm7 [x x 2 2 2 2] (Db E Gb A) " +"Gbm6 [2 x 1 2 2 2] (Gb Eb A Db Gb) " +"Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " +"Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " +"Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " +"Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " +"Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " +"Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " +"Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " +"Gdim/E [x 1 2 0 2 0] (Db E G Bb) " +"Gdim/E [x x 2 3 2 3] (Db E G Bb) " +"Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " +"Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " +"Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " +"Gdim7 [x 1 2 0 2 0] (Db E G Bb) " +"Gdim7 [x x 2 3 2 3] (Db E G Bb) " + + + + +"Gm [3 5 5 3 3 3] (D G Bb) " +"Gm [x x 0 3 3 3] (D G Bb) " +"Gm/E [3 x 0 3 3 0] (D E G Bb) " +"Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " +"Gm/F [3 5 3 3 3 3] (D F G Bb) " +"Gm/F [x x 3 3 3 3] (D F G Bb) " +"Gm13 [0 0 3 3 3 3] (D E F G A Bb) " +"Gm6 [3 x 0 3 3 0] (D E G Bb) " +"Gm6 [3 x 2 3 3 3] (G E Bb D G) " +"Gm7 [3 5 3 3 3 3] (D F G Bb) " +"Gm7 [x x 3 3 3 3] (D F G Bb) " +"Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " +"Gm9 [3 5 3 3 3 5] (D F G A Bb) " +"Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " +"Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " +"Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " +"Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " + + + + +"Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" +"Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " +"Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " +"Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " +"Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" +"Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " +"Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " +"Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " +"Gsus2/B [3 0 0 0 0 3] (D G A B) " +"Gsus2/B [3 2 0 2 0 3] (D G A B) " +"Gsus2/C [x 5 7 5 8 3] (C D G A)" +"Gsus2/C [x x 0 2 1 3] (C D G A) " +"Gsus2/E [x 0 2 0 3 0] (D E G A) " +"Gsus2/E [x 0 2 0 3 3] (D E G A) " +"Gsus2/E [x 0 2 2 3 3] (D E G A) " +"Gsus2/E [5 0 0 0 3 0] (D E G A) " + + + + +"Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" +"Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " +"Gsus4/A [x 5 7 5 8 3] (C D G A)" +"Gsus4/A [x x 0 2 1 3] (C D G A) " +"Gsus4/B [3 3 0 0 0 3] (C D G B) " +"Gsus4/B [x 3 0 0 0 3] (C D G B) " +"Gsus4/E [3 x 0 0 1 0] (C D E G) " +"Gsus4/E [x 3 0 0 1 0] (C D E G) " +"Gsus4/E [x 3 2 0 3 0] (C D E G) " +"Gsus4/E [x 3 2 0 3 3] (C D E G) " +"Gsus4/E [x x 0 0 1 0] (C D E G) " +"Gsus4/E [x x 0 5 5 3] (C D E G) " +"Gsus4/E [x 10 12 12 13 0] (C D E G) " +"Gsus4/E [x 5 5 5 x 0] (C D E G) " +"Gsus4/F [3 3 0 0 1 1] (C D F G) " + diff --git a/guitar/resource.h b/guitar/resource.h new file mode 100644 index 0000000..1797ae6 --- /dev/null +++ b/guitar/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by guitar.rc +// +#define APPICON 103 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1087 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/guitar/scraps.txt b/guitar/scraps.txt new file mode 100644 index 0000000..7deff40 --- /dev/null +++ b/guitar/scraps.txt @@ -0,0 +1,3769 @@ + +/* + +G Ionian Major G A B C D E F# G +A Dorian minor A B C D E F# G A +B Phrygian minor B C D E F# G A B +C Lydian Major C D E F# G A B C +D Mixolydian Major D E F# G A B C D +E Aeolian minor E F# G A B C D E +F# Locrian diminished F# G A B C D E F# + + +E(4),F#(4),G(4),A(4),B(4),C(5),D(5),E(5) + + + || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +FHFFHFF + + + + + +Ionian I - Tonic Major Regular Major +Dorian ii - Supertonic Minor Blues Minor +Phrygian iii - Mediant Minor Spanish Minor +Lydian IV - Subdominant Major Jazz Major +Mixolydian V - Dominant Major Dominant Major +Aeolian vi - Submediant Minor Pure Minor +Locrian vii - Subtonic Diminished Diminished +*/ + + + +/* || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +------------------------------------------------------------------------------ + 0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 + 1 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 + 2 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 + 3 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 + 4 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + 5 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 + 6 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 + 7 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 + 8 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 + 9 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 + 10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | */ + + + + +/* +The I, IV, and V7 patterns +Make sure all of section one leaks into your brain and stays there permanently, because we’re moving fast here. Okay, before we move on, +you must know that a chord is two or more notes played at the same time. A triad is three notes played at the same time. Sometimes I will +call a triad a chord, because a triad is basically a special type of chord. (Just like how a dog is a type of mammal, or how music is a +form of noise.) + +Each major key has three primary chords. These are three triads that sound beautiful and are absolutely essential to harmonics. (try not +to confuse harmonics with harmonica...) The first primary chord is the I chord. This is the first note of the scale, the third note, and +the fifth note. So the I chord for the C scale is consisted of the notes C, E, and G played at the same time. Go ahead, try it. Play those +three notes at the same time. Don’t it just sound heavenly? + +The IV chord consists of the first note, the fourth note, and the sixth note played at the same time. For the C scale, those notes would be + C, F, and A. Finally, the V7 chord consists of the fourth note, the fifth note, and (pay attention to this one now.) the note one note + below the first note. So for the C scale, those notes would be B(the one below the first note, not the one before the last note), F, and + G. Got it? Now you can make up your own happy song with these chords. Go ahead, try it. Try playing the chords in this order: + +I, IV, V7, I + +*/ + + + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ +/* Point clickPoint(someCallbackData.loWord(),someCallbackData.hiWord()); + CallbackData callbackData; + String strPathFileName; + String strItemName; + + clickPoint.x(clickPoint.x()+mScrollInfo.currScrollx()); + clickPoint.y(clickPoint.y()+mScrollInfo.currScrolly()); + if(!mThumbPage.hitTest(*this,clickPoint,strItemName))return (CallbackData::ReturnType)FALSE; + strPathFileName=getTitle()+String("\\")+strItemName; + ::OutputDebugString(strPathFileName+String("\n")); + callbackData.lParam(int((char*)strPathFileName)); + mSelectHandler.callback(callbackData); */ + return (CallbackData::ReturnType)FALSE; +} + + + + +#include +#include +#include +#include +#include +#include + + +void outDebug(const String &string); +void scalesAndChords(void); +void minorsAndHarmonics(void); +void tuningAndFretboard(void); + +main() +{ +} + +void minorsAndHarmonics() +{ + MIDIOutputDevice midiDevice; + if(!midiDevice.openDevice())return; + Note::NoteType root=Note::A; + IonianScale ionianScale(root); + outDebug(ionianScale.toString()); + AeolianScale aeolianScale(Note::A); +// outDebug(aeolianScale.toString()); + HarmonicMinorScale harmonicMinorScale(Note::A); +// outDebug(harmonicMinorScale.toString()); + MelodicMinorScale melodicMinorScale(Note::A); + + Music::Chord chord=aeolianScale.getIChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + ::Sleep(1000); + + chord=aeolianScale.getIVChord(); + chord.play(midiDevice); + ::Sleep(1000); + + chord=aeolianScale.getV7Chord(); + chord.play(midiDevice); + ::Sleep(250); + chord.play(midiDevice); + ::Sleep(250); + chord.play(midiDevice); + ::Sleep(250); + chord=aeolianScale.getIChord(); + chord.play(midiDevice); + ::Sleep(750); + + + outDebug(melodicMinorScale.toString()); + melodicMinorScale.play(midiDevice); + ::Sleep(1000); +// aeolianScale.play(midiDevice); + outDebug(harmonicMinorScale.toString()); + +// harmonicMinorScale.playBack(midiDevice); + midiDevice.closeDevice(); +} + + +void tuningAndFretboard() +{ + Fretboard fretboard; + MIDIOutputDevice midiDevice; + outDebug(fretboard.toString()); + if(!midiDevice.openDevice())return; + const Tuning &tuning=fretboard.getTuning(); +// tuning.play(midiDevice); + fretboard.play(midiDevice); + midiDevice.closeDevice(); +} + +void scalesAndChords(void) +{ + using namespace Music; + Music::Chord chord; + + MIDIOutputDevice midiDevice; + if(!midiDevice.openDevice())return; + AeolianScale scale; + outDebug(scale.toString()); + scale.setDelay(150); + scale.play(midiDevice); + scale.playBack(midiDevice); + + chord=scale.getIChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + + chord=scale.getIVChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + + chord=scale.getV7Chord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + chord.play(midiDevice); + chord.pause(); + + chord=scale.getIChord(); + outDebug(chord.toString()); + chord.play(midiDevice); + chord.pause(); + chord.pause(); + + midiDevice.closeDevice(); +} + +void outDebug(const String &string) +{ + String outString(string+String("\n")); + ::printf("%s\n",((String&)string).str()); + ::OutputDebugString(outString.str()); +} + + + + + + +// mTablature.setDelayAtAndThereafter(0,250); +/* + mTablature.setDelayAt(4,1000); + mTablature.setDelayAt(5,750); + mTablature.setDelayAt(8,1000); + mTablature.setDelayAt(9,750); + mTablature.setDelayAt(10,750); + mTablature.setDelayAt(11,750); + mTablature.setDelayAt(12,750); + mTablature.setDelayAtAndThereafter(13,100); +// mTablature.setDelayAtAndThereafter(13,250); + mTablature.setDelayAt(64,1500); */ + + + +/* +bool TabPage::drawTabPage(PureDevice &pureDevice,GUIWindow &guiWindow) +{ + Point xyPoint; + SIZE entryExtents; + + getEntryExtents(pureDevice,entryExtents); + if(!pureDevice.isOkay()||!guiWindow.isValid()||!mTabEntries.size())return false; + for(int index=0;index=guiWindow.width()) + { + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } +// pureDevice.select(mDIBitmap->getBitmap()); +// pureDevice.setTextColor(RGBColor(0,255,0)); +// pureDevice.drawText(Point(0,0),"Text"); + +// ptrThumbNail->draw(pureDevice,xyPoint); + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + return true; +} +*/ + + + + +/* +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + Point xyPoint; + + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + setNumTabs(0); + if(!guiWindow.isValid()||!mTabEntries.size())return getNumTabs(); + xyPoint.x(LeftMargin); + xyPoint.y(TopMargin); + for(int index=0;index=guiWindow.width()-RightMargin) + { + if(!getNumTabs()) + { + setItemsPerTab(index+1); + gdiPoint.x(xyPoint.x()); + } + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + setNumTabs(getNumTabs()+1); + } + xyPoint.x(xyPoint.x()+getCharWidth()); + } + gdiPoint.y(xyPoint.y()); +// gdiPoint.y(xyPoint.y()+TabHeight+TabSeparator); + gdiPoint.x(guiWindow.width()); + if(!getNumTabs())setNumTabs(mTabEntries.size()); + ::OutputDebugString(String(String("TabCount:")+String().fromInt(getNumTabs())+String("\n")).str()); + ::OutputDebugString(String(String("ItemsPerTab:")+String().fromInt(getItemsPerTab())+String("\n")).str()); + return getNumTabs(); +} +*/ + + + + +/* +int TabPage::getWidestEntry(PureDevice &pureDevice,const TabEntry &entry)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + widestEntry=0; + for(int index=0;indexwidestEntry)widestEntry=sizeStruct.cx; + } + return widestEntry; +} +*/ + + + + +/* +bool TabPage::drawTabPage(GUIWindow &guiWindow) +{ + Point xyPoint; + String strString; + SIZE entryExtents; + + PureDevice pureDevice(guiWindow); + getEntryExtents(pureDevice,entryExtents); + if(!guiWindow.isValid()||!mTabEntries.size())return false; + for(int index=0;index=guiWindow.width()) + { + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } + Point p1(xyPoint); + Point p2(xyPoint.x()+entryExtents.cx,xyPoint.y()); + mDIBitmap->line(p1,p2,1); + + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + return true; +} +*/ + +/* + +DWORD TabPage::rowItems(GUIWindow &guiWindow)const +{ + PureDevice pureDevice(guiWindow); + Point xyPoint; + DWORD rowItems; + SIZE entryExtents; + + rowItems=0; + getEntryExtents(pureDevice,entryExtents," "); + if(!guiWindow.isValid()||!mTabEntries.size())return rowItems; + for(int index=0;index=guiWindow.width()) + { + if(!rowItems)rowItems=index+1; + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + if(!rowItems)rowItems=mTabEntries.size(); + return rowItems; +} +*/ + + +/* +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + Point xyPoint; + SIZE entryExtents; + + PureDevice pureDevice(guiWindow); + getEntryExtents(pureDevice,entryExtents); + gdiPoint=GDIPoint(); + rowItems(0); + if(!guiWindow.isValid()||!mTabEntries.size())return rowItems(); + for(int index=0;index=guiWindow.width()) + { + if(!rowItems()) + { + rowItems(index+1); + gdiPoint.x(xyPoint.x()); + } + xyPoint.x(0); + xyPoint.y(xyPoint.y()+entryExtents.cy+Separator); + } + xyPoint.x(xyPoint.x()+entryExtents.cx+Separator); + } + gdiPoint.y(xyPoint.y()+entryExtents.cy+Separator); + if(!rowItems())rowItems(mTabEntries.size()); + gdiPoint.y(200); + return rowItems(); +} +*/ + + +/* + Point p1=getEntryPoint(entryIndex); + + p1.y(p1.y()-(font.charHeight()/2)); + + pureDevice.textOut(p1.x(),p1.y(),"2"); + +// Point p1=getEntryPoint(entryIndex); +// pureDevice.textOut(p1.x(),p1.y()-(font.charHeight()/2),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + + p1.y(p1.y()+TabSpacing); + pureDevice.textOut(p1.x(),p1.y(),"2"); +// mDIBitmap->square(p1,2,TabLineColor); + +// mParent->invalidate(); */ + + + + + +// void outlineEntry(int entryIndex); + + + +/* +void TabPage::outlineEntry(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + Rect outlineRect; + + if(!isOkay())return; + PureDevice &pureDevice=mDIBitmap->getDevice(); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + outlineRect.left(xyPoint.x()); + outlineRect.top(xyPoint.y()); + outlineRect.right(xyPoint.x()+getCharWidth()-1); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + pureDevice.outlineRect(outlineRect,mOutlinePen); +} +*/ + + + +bool TabPage::addTip(const Rect &prevOutlineRect,const Rect &outlineRect,const String &strText) +{ + if(!mToolTipControl.isOkay())return false; + + PureToolInfo pureToolInfo; + PureToolInfo currentTool; + + +// pureToolInfo.rect(mPrevOutlineRect); +// mToolTipControl->delTool(pureToolInfo); + + pureToolInfo.flags((UINT)PureToolInfo::IDIsHwnd|(UINT)PureToolInfo::SubClass); + pureToolInfo.hwnd(*mParent); + pureToolInfo.toolID((UINT)(HWND)*mParent); + pureToolInfo.rect(outlineRect); + pureToolInfo.resInst(mParent->processInstance()); + pureToolInfo.szText(strText); + + if(!mToolTipControl->getCurrentTool(currentTool)) + { + mToolTipControl->addTool(pureToolInfo); + } + else + { + currentTool.rect(outlineRect); + currentTool.szText(strText); + mToolTipControl->setToolInfo(currentTool); + +// mToolTipControl->setToolInfo(pureToolInfo); + } + return true; +} + + + bool addTip(const Rect &prevOutlineRect,const Rect &outlineRect,const String &strText); + + +// addTip(mPrevOutlineRect,outlineRect,entry.toString()); + + + mToolTipControl=::new ToolTip(parent); + mToolTipControl.disposition(PointerDisposition::Delete); + mToolTipControl->setDelayTime(ToolTip::Initial,25); + mToolTipControl->setDelayTime(ToolTip::Reshow,25); + + +#ifndef _TOOLTIP_TOOLTIP_HPP_ +#include +#endif + + + SmartPointer mToolTipControl; + + + + + bool isValidFret(int fret); + bool haveElement(int elements[6]); + + +/* +bool Tablature::parseTab(void) +{ + int elements[6]; + + for(int index=0;index + +bool Tablature::play(MIDIOutputDevice &midiDevice,GUIFretboard &guiFretboard,GUIWindow &guiWindow) +{ + PureDevice device(guiWindow); + if(!midiDevice.hasDevice())return false; + setCancelled(false); + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); +// mParent->update(); +// mParent->invalidate(true); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); +// mParent->update(); + } + mPrevOutlineRect=outlineRect; + return true; +} + + + +/* + File inFile; + String strLine; + String strIndex; + String strDelay; + + if(!inFile.open(pathFileName))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + ::MessageBox(*this,strLine,"Project does not contain a reference to any tablature.",MB_OK); + return false; + } + if(!open(strLine))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("DELAYS")))return false; + strLine=strLine.betweenString('=',0); + char *ptr=strLine.str(); + if(ptr) + { + ptr=::strtok(ptr,")"); + while(true) + { + String str(ptr); + strIndex=str.betweenString('(',','); + strDelay=str.betweenString(',',0); + mTablature.setDelayAt(strIndex.toInt(),strDelay.toInt()); + ptr=::strtok(0,")"); + if(!ptr)break; + } + } +*/ + + + +/* +bool ViewWindow::saveProject(const String &pathFileName) +{ + File outFile; + if(!outFile.open(pathFileName,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mTablature.getPathFileName().isNull())outFile.writeLine("TABLATURE="); + else outFile.writeLine(String("TABLATURE=")+mTablature.getPathFileName()); + outFile.writeLine(String("DELAYS=")+mTablature.getDelays()); + setTitle(pathFileName); + return true; +}*/ + + + + +/* +bool FretViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + return true; +}*/ + +/*void FretViewWindow::stopPlay(void) +{ + mTablature.setCancelled(true); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +}*/ + + +/* +void GUIFretboard::createVirtualFretboard(void) +{ + PurePalette systemPalette; + int xStart=LeftBorder; + int yStart=TopBorder; + int width=CellWidth; + int height=CellHeight; + + size(mTuning.size()); + systemPalette.systemPalette(); + PureDevice pureDevice(*mParent); + for(int strIndex=0;strIndexwidth(),mParent->height(),systemPalette); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->setBits(255); +} +*/ + + + + if(!getDocumentClass(String(STRING_FRETVIEWWINDOWCLASSNAME),fretWindow))return; + fretWindow->top(); + + + + +#include +#include +/* MIDIOutputDevice midiDevice; + if(!midiDevice.openDevice())return 0; + Tablature tab("LaVilla.tab"); + + tab.setDelayAt(4,1000); + tab.setDelayAt(5,750); + tab.setDelayAt(8,1000); + tab.setDelayAt(9,750); + tab.setDelayAt(10,750); + tab.setDelayAt(11,750); + tab.setDelayAt(12,750); +// tab.setDelayAtAndThereafter(13,100); + tab.setDelayAtAndThereafter(13,250); + tab.setDelayAt(64,1500); + + tab.play(midiDevice); + midiDevice.closeDevice(); + return 0; */ + + +// mMIDIDevice->midiEvent(ProgramChange(30).getEvent()); // 25 + + + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + outDebug("[TabPage::sizeHandler]ENTER"); + if(isInPlay())isPaused(true); + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + + if(!sizePoint.x()||!sizePoint.y())return false; + update(*mParent); + if(!mDIBitmap.isOkay())return false; +// mScrollInfo.handleSize(someCallbackData); // bitmap creation handles this + if(isInPlay())isPaused(false); + outDebug("[TabPage::sizeHandler]LEAVE"); + return false; +} + + + +//bool Tablature::setDelayAtAndThereafter(int index,int delay) +//{ +// for(;indexoutlineRect(cRect); + cRect.left(cRect.left()+1); + cRect.right(cRect.right()-1); + cRect.top(cRect.top()+1); + cRect.bottom(cRect.bottom()-1); + mDIBitmap->colorRect(cRect,208); */ + +// Point cPoint(20,20); +/* + mDIBitmap->circle(100,cPoint,5,208); + mDIBitmap->circle(100,cPoint,4,208); + mDIBitmap->circle(100,cPoint,3,208); + mDIBitmap->circle(100,cPoint,2,208); + mDIBitmap->circle(100,cPoint,1,208); */ + +// WORD circle(WORD aspectValue,const Point &xyPoint,WORD radius,WORD palIndex); + + + +// WORD roundRectangle(const Point &upperLeftPoint,const Point &lowerRightPoint,DWORD width,DWORD height); + + +// device.circle(cPoint,7,RGBColor(255,255,255)); +// device.floodFill(cPoint,RGBColor(231,33,33),RGBColor(0,0,0)); + +//,5,RGBColor(231,33,33) +/* + WORD circle(Window &displayWindow,const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const; + WORD circle(const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const; + WORD crossHair(const Point &midPoint,WORD sectionlength,const Pen &somePen); + WORD crossHairs(PureVector &midPoints,WORD sectionLength,const Pen &somePen); + WORD crossHairs(PureVector &midPoints,WORD sectionLength,RGBColor rgbColor); + WORD floodFill(const Point &xyPoint,const RGBColor &fillColor,const RGBColor &boundaryColor)const; +*/ + + + +/* +void GUIFretboard::setNote(const TabEntry &entry) +{ + int offsetWidth=mCellWidth/OutlineRatio; + int offsetHeight=mCellHeight/OutlineRatio; + + clearNotes(); + for(int index=0;indexcolorRect(fillRect,FillColorBlack); + mParent->invalidate(fillRect,false); + } + mParent->update(); +} +*/ + + + +void GUIFretboard::createVirtualFretboard(void) +{ +/* + SmartPointer activeFret; + PurePalette systemPalette; + int xStart=LeftBorder; + int yStart=TopBorder; + + mCellWidth=(mParent->width()-(LeftBorder+RightBorder+StockBorder+WindowBorder))/mFrets; + mCellHeight=(mParent->height()-(TopBorder+BottomBorder+(WindowBorder/2)))/DefaultStrings; + size(mTuning.size()); + systemPalette.systemPalette(); + PureDevice pureDevice(*mParent); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } + if(!frIndex)x+=mCellWidth+StockBorder; + else x+=mCellWidth; + } + yStart+=mCellHeight; + } + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,mParent->width(),mParent->height(),systemPalette); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->setBits(255); +*/ + + SmartPointer activeFret; +// PurePalette systemPalette; +// int xStart=LeftBorder; +// int yStart=TopBorder; + +// mCellWidth=(mParent->width()-(LeftBorder+RightBorder+StockBorder+WindowBorder))/mFrets; +// mCellHeight=(mParent->height()-(TopBorder+BottomBorder+(WindowBorder/2)))/DefaultStrings; + size(mTuning.size()); +// systemPalette.systemPalette(); +// PureDevice pureDevice(*mParent); + for(int strIndex=0;strIndexsetBoundingRect(frettedBoundingNote.getBoundingRect()); + } +// if(!frIndex)x+=mCellWidth+StockBorder; +// else x+=mCellWidth; + } +// yStart+=mCellHeight; + } +// if(mDIBitmap.isOkay())mDIBitmap.destroy(); +// mDIBitmap=::new DIBitmap(pureDevice,mParent->width(),mParent->height(),systemPalette); +// mDIBitmap.disposition(PointerDisposition::Delete); +// mDIBitmap->setBits(255); + + + + PureDevice pureDevice(*mParent); + if(mDIBitmap.isOkay())mDIBitmap.destroy(); + mDIBitmap=::new DIBitmap(pureDevice,(BitmapInfo&)*mResBitmap,(PurePalette&)*mResBitmap); + for(int row=0;rowheight();row++) + { + for(int col=0;colwidth();col++) + { + mDIBitmap->setByte(row,col,*(mResBitmap->ptrData()+((row*mResBitmap->width())+col))); + } + } +} + + + + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + hasFocus(true); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new MIDIOutputDevice(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// mParent->setCapture(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::killFocusHandler"); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + GlobalDefs::outDebug("[TabPage::killFocusHandler] Clearing last update region"); + isInOutline(false); + clearUpdate(); + } +// mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + if(isInPlay()) // if we're playing the tab just let go of the capture + { +// mParent->releaseCapture(); + return false; + } +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { +// mParent->releaseCapture(); // let go of the capture + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } +// else if(!mParent->hasCapture())mParent->setCapture(); // user is moving withing the tab window, make sure we have the capture + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } +// if(mParent->hasCapture())mParent->releaseCapture(); // if we've got the capture, then let it go + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + currEntryIndex(entryIndex); + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + if(mMIDIDevice.isOkay()&&mMIDIDevice->hasDevice())entry.play(*mMIDIDevice,0,false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + + + + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + hasFocus(true); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new MIDIOutputDevice(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// mParent->setCapture(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::killFocusHandler"); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + GlobalDefs::outDebug("[TabPage::killFocusHandler] Clearing last update region"); + isInOutline(false); + clearUpdate(); + } +// mParent->releaseCapture(); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + if(isInPlay()) // if we're playing the tab just let go of the capture + { +// mParent->releaseCapture(); + return false; + } +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { +// mParent->releaseCapture(); // let go of the capture + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } +// else if(!mParent->hasCapture())mParent->setCapture(); // user is moving withing the tab window, make sure we have the capture + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } +// if(mParent->hasCapture())mParent->releaseCapture(); // if we've got the capture, then let it go + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + currEntryIndex(entryIndex); + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + if(mMIDIDevice.isOkay()&&mMIDIDevice->hasDevice())entry.play(*mMIDIDevice,0,false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + + +// mChordList->insertString(strResource.betweenString(0,'[').+strResource.betweenString(']',0)); +// mChordList->insertString(strResource.betweenString(0,'[')+String("(")+strResource.betweenString('(',')')+String(")")); + + + +int LineParser::getElement(int &num) +{ + char ch; + num=-1; + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch))num=ch-48; + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch)num=0; // instead of zero some tabs have an alpha 'O' - for (O)pen. + else if('p'==ch||'P'==ch)return 0; // pull-off + else if('b'==ch||'B'==ch)return 0; // bend + else if('h'==ch||'H'==ch)return 0; // hammer-on + else if('r'==ch||'R'==ch)return 0; // release previous bend + else return 0; // or any other inflections yet. + } + else if('\\'==ch)return 0; // slide-down + else if('/'==ch)return 0; // slide-up + else if('^'==ch)return 0; // bend + else return 0; + ch=charAt(mPosition); + if(!::isdigit(ch))return 1; + mPosition++; + num=(num*10)+(ch-48); + return 1; +} + + + int getElement(int &num); + + + +/* +// if(validate(element[0])) +// { +// if(Element::Pick==element[0].getAction()&&Fretboard::isValidFret(element[0].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(5,element[0].getFret()),5,element[0].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(5,element[0].getFret()),5,element[0].getFret())); + } + if(validate(element[1])) + { +// if(Element::Pick==element[1].getAction()&&Fretboard::isValidFret(element[1].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(4,element[1].getFret()),4,element[1].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(4,element[1].getFret()),4,element[1].getFret())); + } + if(validate(element[2])) + { +// if(Element::Pick==element[2].getAction()&&Fretboard::isValidFret(element[2].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(3,element[2].getFret()),3,element[2].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(3,element[2].getFret()),3,element[2].getFret())); + } +// if(Element::Pick==element[3].getAction()&&Fretboard::isValidFret(element[3].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(2,element[3].getFret()),2,element[3].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(2,element[3].getFret()),2,element[3].getFret())); +// } +// if(Element::Pick==element[4].getAction()&&Fretboard::isValidFret(element[4].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(1,element[4].getFret()),1,element[4].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(1,element[4].getFret()),1,element[4].getFret())); +// } +// if(Element::Pick==element[5].getAction()&&Fretboard::isValidFret(element[5].getFret())) +// { +// FrettedNote frettedNote(fretboard.getAt(0,element[5].getFret()),0,element[5].getFret()); +// entry.insert(&frettedNote); + entry.insert(&FrettedNote(fretboard.getAt(0,element[5].getFret()),0,element[5].getFret())); +// } +*/ + + + +void TabLines::synchronize(void) +{ + int maxPos; + int index; + + for(index=0;indexmaxPos)maxPos=operator[](index).getPosition(); + } + for(index=0;indexmaxPos)maxPos=operator[](1).getPosition(); + if(operator[](2).getPosition()>maxPos)maxPos=operator[](2).getPosition(); + if(operator[](3).getPosition()>maxPos)maxPos=operator[](3).getPosition(); + if(operator[](4).getPosition()>maxPos)maxPos=operator[](4).getPosition(); + if(operator[](5).getPosition()>maxPos)maxPos=operator[](5).getPosition(); + while(operator[](0).getPosition()!=maxPos)(operator[](0))++; + while(operator[](1).getPosition()!=maxPos)(operator[](1))++; + while(operator[](2).getPosition()!=maxPos)(operator[](2))++; + while(operator[](3).getPosition()!=maxPos)(operator[](3))++; + while(operator[](4).getPosition()!=maxPos)(operator[](4))++; + while(operator[](5).getPosition()!=maxPos)(operator[](5))++; +*/ +} + + + + + +/* +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0 + + if(lineLength>=2&&(strLine.charAt(0)=='e'||strLine.charAt(0)=='E')&&(strLine.charAt(1)==':'||strLine.charAt(1)=='|')) + { + startElement=2; + return true; + } + if(lineLength>=2&&strLine.charAt(0)=='|'&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==':'&&(::isalnum(strLine.charAt(1))||strLine.charAt(1)=='-')) + { + startElement=1; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==':'&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='E'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=1&&strLine.charAt(0)=='-') + { + startElement=0; + return true; + } + if(lineLength>=5&&strLine.charAt(0)==' '&&strLine.charAt(1)==' '&&(strLine.charAt(2)=='E'||strLine.charAt(2)=='e')&&strLine.charAt(3)==' '&&strLine.charAt(4)=='|') + { + startElement=5; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==' '&&strLine.charAt(1)=='|') + { + startElement=2; + return true; + } + if(lineLength>=2&&strLine.charAt(0)==' '&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=4&&strLine.charAt(0)==' '&&strLine.charAt(1)==' '&&strLine.charAt(2)=='I'&&strLine.charAt(3)=='-') + { + startElement=3; + return true; + } + if(lineLength>=3&&strLine.charAt(0)==' '&&strLine.charAt(1)=='E'&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=2&&strLine.charAt(0)=='E'&&strLine.charAt(1)=='-') + { + startElement=1; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='E'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='|'&&strLine.charAt(3)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='E'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='|'&&strLine.charAt(3)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)=='e'&&strLine.charAt(1)==']'&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)==':'&&strLine.charAt(1)==' '&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&strLine.charAt(0)==' '&&strLine.charAt(1)==' '&&strLine.charAt(2)=='-') + { + startElement=2; + return true; + } + if(lineLength>=3&&::isdigit(strLine.charAt(0))&&strLine.strstr("-")) + { + startElement=0; + return true; + } + return false; +} +*/ + + + + + + +int LineParser::getElement(Element &element) +{ + char ch; + + element.setFret(-1); + element.setAction(Action::None); + if(mPosition>=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + +// element.setAction(Element::PullOff); // pull-off +// element.setFret(-1); // references previous note +// return 0; // return not-handled + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + +// element.setAction(Action::Bend); // bend +// element.setFret(-1); // references next note +// return 0; // return not-handled + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + +// element.setAction(Element::HammerOn); // hammer-on +// element.setFret(-1); // references next note +// return 0; // return not-handled + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + +// element.setAction(Action::SlideDown); // slide down +// element.setFret(-1); // no referenced fret +// return 0; // return not-handled + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + +// element.setAction(Action::SlideUp); // slide up +// element.setFret(-1); // no referenced fret +// return 0; // return not-handled + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + if(!::isdigit(ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + + + +bool TabLines::haveElement(TabElement &elements)const +{ + for(int index=0;index +#include +#include +#include +#include + +/* MIDIOutputDevice midiDevice; + +// 0 acoustic grand piano +// 1 bright acoustic piano +// 2 electric grand piano +// 24 acoustic guitar nylon +// 25 acoustic guitar steel +// 26 jazz electric +// 27 clean electric +// 28 muted electric +// 29 overdriven guitar +// 30 distorted guitar + + +// for(int index=51;index<127;index++) +// { + int index=2; + midiDevice.midiEvent(ChannelModeMessage(ChannelModeMessage::Sustain).getEvent(0,0,-127)); +// midiDevice.midiEvent(ChannelModeMessage(ChannelModeMessage::AllNotesOff).getEvent()); + + + midiDevice.midiEvent(ProgramChange(index).getEvent()); + IonianScale scale(Note::C); + scale.play(midiDevice); +// } + return 0; */ + + + + +inline +void TabEntry::delay(int offsetDelay) +{ + int actualDelay=Timing::getDelay(mNoteType); +// int actualDelay=Timing::getDelay(mNoteType)-offsetDelay; +// if(actualDelay<=0)return; + GlobalDefs::outDebug("[TabEntry::delay]"+String().fromInt(actualDelay)); + ::Sleep(actualDelay); +} + + + + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining +// mMIDIDevice->clearNotes(); // smk + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining +// mMIDIDevice->clearNotes(); // smk + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + currEntryIndex(entryIndex); + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); +// mMIDIDevice->clearNotes(); // smk + if(mMIDIDevice.isOkay()&&mMIDIDevice->hasDevice())entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); +// mMIDIDevice->clearNotes(); // smk + } + return false; +} + + + +// void parseTiming(const String &strLine); +// else if(strLine.betweenString(0,'=')==String("TEMPO"))parseTiming(strLine); +//void Tablature::parseTiming(const String &strLine) +//{ +// Timing::microsecondsPerQuarterNote(strLine.betweenString('=',0).toInt()); +//} +// outFile.writeLine(String("TEMPO=")+String().fromInt(Timing::microsecondsPerQuarterNote())); + + + +/*bool TabPage::insert(const TabEntry &entry) +{ + mTabEntries.insert(&entry); + return true; +}*/ + +/*void TabPage::remove(const TabEntry &entry) +{ + bool removed=false; + for(int index=0;index mPrinters; + +bool getPrinters(void) +{ + String strPrinterKey("System\\CurrentControlSet\\Control\\Print\\Printers"); + String strDefaultPrinter; +// RegKey cfgKey(RegKey::CurrentConfig); + RegKey cfgKey(RegKey::LocalMachine); + Printer printer; + String strPrinter; + int enumKey(0); + + mPrinters.remove(); + if(!cfgKey.openKey(strPrinterKey))return FALSE; + cfgKey.queryValue("Default",strDefaultPrinter); +// if(getPrinter(strPrinterKey+String("\\")+strDefaultPrinter,printer))mDefaultPrinter=printer; + while(TRUE) + { + if(!cfgKey.enumKey(enumKey++,strPrinter))break; + if(getPrinter(strPrinterKey+String("\\")+strPrinter,printer))mPrinters.insert(&printer); + } + cfgKey.closeKey(); + return TRUE; +} + +bool getPrinter(String &strPrinterKey,Printer &printer) +{ + RegKey mchKey(RegKey::LocalMachine); + String strPrinterNameKey("Name"); + String strPrinterDriverKey("Printer Driver"); + String strPrinterPortKey("Port"); + String strQuery; + + if(!mchKey.openKey(strPrinterKey))return FALSE; + mchKey.queryValue(strPrinterNameKey,strQuery); + printer.printerName(strQuery); + mchKey.queryValue(strPrinterDriverKey,strQuery); + printer.driverName(strQuery); + mchKey.queryValue(strPrinterPortKey,strQuery); + printer.portName(strQuery); + mchKey.closeKey(); + return TRUE; +} + + + getPrinters(); + return 0; + + +#include +#include + + + + + + +/* +void GUIFretboard::prepareDevice(PureDevice &device,bool prepare) +{ + if(prepare) + { + mPrevBrush=::SelectObject(device.getDC(),(GDIObj)mRedBrush); + if(getShowNotes()) + { + mPrevFont=::SelectObject(device.getDC(),(GDIObj)mTextFont); + mPrevBkMode=device.setBkMode(PureDevice::Transparent); + mPrevTextColor=device.setTextColor(RGBColor(255,255,255)); + } + } + else + { + ::SelectObject(device.getDC(),mPrevBrush); + ::SelectObject(device.getDC(),mPrevFont); + device.setBkMode(PureDevice::BkMode(mPrevBkMode)); + device.setTextColor(mPrevTextColor); + } +} +*/ + + + + +#include +#include +#include + + Note degreeI; + Note degreeIII; + Note degreeV; + Note degreeVII; + IonianScale ionianScale(Note::G); + degreeI=ionianScale.getDegree(Scale::I); + degreeIII=ionianScale.getDegree(Scale::III); + degreeV=ionianScale.getDegree(Scale::V); + degreeVII=ionianScale.getDegree(Scale::VII); + GlobalDefs::outDebug(String("I:")+degreeI.toString()); + GlobalDefs::outDebug(String("III:")+degreeIII.toString()); + GlobalDefs::outDebug(String("V:")+degreeV.toString()); + GlobalDefs::outDebug(String("VII:")+degreeVII.toString()); + +// return 0; + + +// STRING_21747 "G or Gmaj [x 10 12 12 12 10] (D G B)" + + +/* Notes notes; + notes.size(3); + notes[0]=Note::D; + notes[1]=Note::CSh; + notes[2]=Note::A; + GlobalDefs::outDebug(notes.toString()); + notes.sort(); + GlobalDefs::outDebug(notes.toString()); +*/ + + + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + if(isInPlay()) + { + setCancelled(true); + return false; + } + + +/* + TabDialog tabDialog; + + GlobalDefs::outDebug("TabPage::leftButtonDownHandler"); + if(isInPlay())setCancelled(true); + + if(!isInOutline()||isInPlay())return false; + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + TabEntry &entry=mTabEntries[currEntryIndex()]; + keepOutline(true); + if(tabDialog.perform(*mParent,mTabEntries,currEntryIndex(),mousePoint))isDirty(true); + keepOutline(false); + GDIPoint point(mousePoint.x(),mousePoint.y()); + mParent->clientToScreen(point); + ::SetCursorPos(point.x(),point.y()); +*/ + return false; +} + + + +/* + GlobalDefs::outDebug(ptr); + String strItem=ptr; + char *pItem=strItem.str(); + + FrettedNote frettedNote; + + pItem=::strtok(pItem,"="); + pItem=::strtok(0," "); + frettedNote.setString(::atoi(pItem)); + + + + + pItem=::strtok(0,"="); + pItem=::strtok(0," "); + frettedNote.setFret(::atoi(pItem)); + + pItem=::strtok(0,"="); + pItem=::strtok(0," "); + frettedNote.setNote(fretboard.getAt(frettedNote.getString(),frettedNote.getFret())); + + pItem=::strtok(0,"="); + pItem=::strtok(0,"]"); + frettedNote.setAction(Action().fromString(pItem)); + + GlobalDefs::outDebug(frettedNote.toString()); + insert(&frettedNote); + */ + + + + + +/* + +bool TabWriter::write(TabEntries &entries,const String &pathFileTablature) +{ + VersionInfo versionInfo; + File outFile; + Array outLines; + int outIndex; + outIndex=0; + + if(pathFileTablature.isNull())return false; + if(!outFile.open(pathFileTablature,"wb"))return false; + outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%")); + + initLines(outLines,BufferLength); + setHeader(outLines,outIndex); + + for(int index=0;indexMaxChars) + { + outFile.writeLine(String(" ")); + outFile.writeLine(String(" ")); + writeLines(outLines,outFile); + outFile.writeLine(String(" ")); + initLines(outLines,BufferLength); + setHeader(outLines,outIndex); + } + TabEntry &entry=entries[index]; + for(int noteIndex=0;noteIndex &outLines,File &outFile) +{ + for(int index=0;index<6;index++)outFile.writeLine(outLines[index]); +} + +void TabWriter::initLines(Array &outLines,int size) +{ + outLines.size(6); + for(int line=0;line<6;line++) + { + outLines[line].reserve(size,true); + for(int charIndex=0;charIndex &outLines,int &outIndex) +{ + outIndex=0; + outLines[0].setAt(outIndex,'E'); + outLines[1].setAt(outIndex,'B'); + outLines[2].setAt(outIndex,'G'); + outLines[3].setAt(outIndex,'D'); + outLines[4].setAt(outIndex,'A'); + outLines[5].setAt(outIndex,'E'); + outIndex++; + outLines[0].setAt(outIndex,'|'); + outLines[1].setAt(outIndex,'|'); + outLines[2].setAt(outIndex,'|'); + outLines[3].setAt(outIndex,'|'); + outLines[4].setAt(outIndex,'|'); + outLines[5].setAt(outIndex,'|'); + outIndex++; + outLines[0].setAt(outIndex,'-'); + outLines[1].setAt(outIndex,'-'); + outLines[2].setAt(outIndex,'-'); + outLines[3].setAt(outIndex,'-'); + outLines[4].setAt(outIndex,'-'); + outLines[5].setAt(outIndex,'-'); + outIndex++; +} + + +*/ + + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + + + +bool Tablature::saveProject(const String &pathFileName) +{ +// String strPathFileName; + File outFile; + + if(pathFileName.isNull())return false; + mPathFileProject=pathFileName; + if(!outFile.open(pathFileName,"wb"))return false; +// if(pathFileName.isNull())strPathFileName=mPathFileProject; +// else strPathFileName=pathFileName; +// if(!outFile.open(strPathFileName,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(getPathFileTablature().isNull())outFile.writeLine("TABLATURE="); + else + { + String strFileTablature; + Profile::makeFileName(getPathFileTablature(),strFileTablature); + outFile.writeLine(String("TABLATURE=")+strFileTablature); + } + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;index=mLength)return -1; + ch=charAt(mPosition++); + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) + { + if('o'==ch||'O'==ch) // instead of zero some tabs have an alpha 'O' - for (O)pen. + { + element.setAction(Action::Pick); + element.setFret(0); + return 1; + } + else if('p'==ch||'P'==ch) // pull-off + { + int result=getElement(element); // fetch the next element, this is what we are pulling into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::PullOff); // set action to pull-off + return result; + } + else if('b'==ch||'B'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('h'==ch||'H'==ch) // hammer-on + { + int result=getElement(element); // fetch the next element, this is what we are hammering onto + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::HammerOn); // set action to hammer-on + return result; + } + else if('r'==ch||'R'==ch) // Release(bend) into this note + { + int result=getElement(element); // fetch the next element, this is what we are releasing into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Release); // set action to Release + return result; + } + else if('s'==ch||'S'==ch) // Slide + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + } + else if('^'==ch) // Bend + { + int result=getElement(element); // fetch the next element, this is what we are bending into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::Bend); // set action to bend + return result; + } + else if('\\'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding into + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideDown); // set action to SlideDown + return result; + } + else if('/'==ch) + { + int result=getElement(element); // fetch the next element, this is what we are sliding + if(1!=result)return result; // if we didn't get anything return; + element.setAction(Action::SlideUp); // set action to SlideUp + return result; + } + else + { + element.setAction(Action::None); // invalid entry + element.setFret(-1); // no referenced note + return 0; // return not-handled + } + ch=charAt(mPosition); + +/* + if(::isdigit(ch)&&(ch>='0'&&ch<='9')) + { + element.setAction(Action::Pick); + element.setFret(ch-48); + } + else if(::isalpha(ch)) +*/ + + + if(!(::isdigit(ch)&&(ch>='0'&&ch<='9'))&&!(::isalpha(ch)&&'O'==ch)) + { + element.setAction(Action::Pick); // fretted note + return 1; // return handled + } + if('O'==ch||'o'==ch)ch='0'; + +// if(!::isdigit(ch)) +// { +// element.setAction(Action::Pick); // fretted note +// return 1; // return handled +// } + mPosition++; + element.setFret((element.getFret()*10)+(ch-48)); + return 1; // return handled +} + + + +/* + + Rect outlineRect; + Point clickPoint; + getOutlineRect(mCurrEntryIndex,outlineRect); + clickPoint.x(someCallbackData.loWord()); + clickPoint.y(someCallbackData.hiWord()); + ::OutputDebugString(clickPoint.toString()+String("\n")); + ::OutputDebugString(outlineRect.toString()+String("\n")); + + distanceMap[abs(clickPoint.y()-outlineRect.top())]=6; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=1; + + map::iterator minItem=distanceMap.begin(); + int minValue=(*minItem).first; + int minString=(*minItem).second; + ::OutputDebugString(String("Closest string is:")+String().fromInt(minString)+String("\n")); +*/ + + + ::OutputDebugString(String("Closest string is:")+String().fromInt(nearestString)+String("\n")); + + + +bool TabPage::modifyProperties(void) +{ + TabDialog tabDialog; + POINT cursorPoint; + + GlobalDefs::outDebug(String("[TabPage::modifyProperties]"),GlobalDefs::Debug); + if(!isInOutline()||isInPlay())return false; + ::GetCursorPos(&cursorPoint); + GDIPoint mousePoint(cursorPoint.x,cursorPoint.y); +// mParent->screenToClient(mousePoint); + TabEntry &entry=mTabEntries[currEntryIndex()]; + keepOutline(true); + if(tabDialog.perform(*mParent,mTabEntries,currEntryIndex(),mousePoint))isDirty(true); + keepOutline(false); +// mParent->clientToScreen(mousePoint); + ::SetCursorPos(mousePoint.x(),mousePoint.y()); + return true; +} + + +/* + LRESULT currSel; + String selText; + bool applyRemainder; + + currSel=sendMessage(TABENTRY_NOTETYPE,CB_GETCURSEL,0,0L); + sendMessage(TABENTRY_NOTETYPE,CB_GETLBTEXT,currSel,(LPARAM)selText.str()); + applyRemainder=sendMessage(TABENTRY_REMAINDER,BM_GETCHECK,0,0L); + NoteType noteType(NoteType().fromString(selText)); + if(applyRemainder) + { + for(int index=mCurrEntryIndex;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); +// entry.setNoteType(NoteType().fromString(selText)); + + + +/* +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + FretDialog fretDialog; + Point clickPoint; + int selectedString; + clickPoint.x(someCallbackData.loWord()); + clickPoint.y(someCallbackData.hiWord()); + if(!getNearestString(clickPoint,selectedString))return false; + + + keepOutline(true); + if(fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex)) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return false; +} +*/ + + + +// if(!mTabEntries.size()) +// { +// mTabEntries.insert(&entry); +// currEntryIndex(0); +// } +// else mTabEntries.insertAfter(currEntryIndex(),&entry); +// isDirty(true); +// update(*mParent); +// mParent->invalidate(true); +// mParent->update(); +// showCurrent(); +// return true; + + + + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) + { + Rect outlineRect; + clearUpdate(); + mTabEntries.insert(&TabEntry()); + mCurrEntryIndex=mTabEntries.size()-1; +// getOutlineRect(mCurrEntryIndex,outlineRect); +// showCurrent(); + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + clearUpdate(); + showCurrent(); + getOutlineRect(mCurrEntryIndex,outlineRect); + ::SetCaretPos(outlineRect.left(),outlineRect.top()); + } + + +/* +void MainFrame::handleFileNew(void) +{ + OpenDialog openDialog; + String strPathTabFile; + + if(!openDialog.getOpenFileName(*this,"*.tab","Open Tab","*.tab",strPathTabFile))return; + createProjectView(strPathTabFile); +} +*/ + + + +/* +bool TabEntry::setFret(int string,int fret) +{ + int entryIndex; + if(!contains(string,entryIndex))return false; + operator[](entryIndex).setFret(fret); + return true; +} + +bool TabEntry::add(int string,int fret) +{ + Fretboard fretboard; + FrettedNote frettedNote(fretboard.getAt(string,fret),string,fret); + insert(&frettedNote); + return true; +} + +*/ + + + + + +// PureNote pureNote(pureEvent.firstData(),pureEvent.secondData()); +// Note note(pureNote); +// fretboard.getAt(note,frettedNote); + +// ::OutputDebugString(note.toString()+String("\n")); +// ::OutputDebugString(frettedNote.toString()+String("\n")); + +// TabEntry entry; +// entry.insert(&frettedNote); + + + +// tabEntries[pureEvent.channel()].insert(&entry); + + + + + + +#ifndef _GUITAR_MIDIHELPER_HPP_ +#define _GUITAR_MIDIHELPER_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIDATA_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_FRETBOARD_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif + +class MIDIHelper +{ +public: + static void import(const String &musicFileName); +private: +}; + +void MIDIHelper::import(const String &musicFileName) +{ +// String musicFileName("D:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); + String musicFileName("D:\\WORK\\GUITAR\\MIDI\\2112.mid"); +// String musicFileName("C:\\WINNT\\MEDIA\\PASSPORT.MID"); +// String musicFileName("D:\\WORK\\GUITAR\\MIDI\\PACO.MID"); + + WORD currPlayTime=0; + WORD prevPlayTime=0; + + Fretboard fretboard; + TabEntries tabEntries; + Tablature tablature; + +// Array eventBlock; +// Block frettedNotes; + Block tracks; + Block notes; +// TabEntry entry; +// bool found; + + MidiData midiData(musicFileName); + midiData.makeRealTime(); +// midiData.combineTracks(eventBlock); + + midiData.getTracks(tracks); + if(!tracks.size())return; + WORD maxEvents=0; + int currentTrack; + for(int trIndex=0;trIndexmaxEvents) + { + maxEvents=midiData.getEventCount(tracks[trIndex].getValue()); + currentTrack=tracks[trIndex].getValue(); + } + } + + + + FrettedNote frettedNote; +// PureNote pureNote; +// Note note; + +// entry.remove(); + + for(int index=0;index=highestOctave)note.setOctave(highestOctave-1); + fretboard.getAt(note,frettedNotes); + } + found=false; + for(int fnIndex=0;fnIndex +#include + +void MIDIHelper::import(const String &musicFileName) +{ + TabEntries tabEntries; + Tablature tablature; + TabEntry entry; + WORD currPlayTime; + WORD prevPlayTime; + + mMessages.remove(); + currPlayTime=0; + prevPlayTime=0; + + + Block tracks; + Block notes; + +// ::OutputDebugString(mFretboard.toString()); + + + MidiData midiData(musicFileName); + midiData.makeRealTime(); +// midiData.combineTracks(eventBlock); + midiData.getTracks(tracks); + if(!tracks.size())return; + WORD maxEvents=0; + int currentTrack; + + for(int trIndex=0;trIndexmaxEvents) + { + maxEvents=midiData.getEventCount(tracks[trIndex].getValue()); + currentTrack=tracks[trIndex].getValue(); + } + } + + for(int index=0;index ¬es,TabEntry &entry) +{ + NotePaths notePaths; + Requirements requirements; + + if(!notes.size())return false; + if(!filterNotesOnFretboard(notes))return false; + requirements.setRequirements(notes); + + notePaths.size(notes.size()); + + for(int pathIndex=0;pathIndex ¬es) +{ + for(int noteIndex=0;noteIndex=highestOctave)note.setOctave(highestOctave-1); + fretboard.getAt(note,frettedNotes); + } + found=false; + for(int fnIndex=0;fnIndex=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + +// mParent->clientToScreen(outlineRect); +// cursorPos.x(outlineRect.left()); +// ::SetCursorPos(cursorPos.x(),cursorPos.y()); + +/* Rect outlineRect; + GDIPoint cursorPos; + + ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + mTabEntries.insert(&TabEntry()); + mCurrEntryIndex=mTabEntries.size()-1; + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + clearUpdate(); + showCurrent(); + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); */ + } +/* else if(keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + } */ + GlobalDefs::outDebug(String("Key Code=")+String().fromInt(keyData.virtualKey())); + return false; +} + + + void removeHistory(const String &pathFileName); + +void MainFrame::removeHistory(const String &pathFileName) +{ + Registry registry; + SmartPointer mdiWindow; + Array > mdiWindows; + + if(!registry.removeHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + if(!getDocuments(mdiWindows))return; + for(int index=0;indexgetMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + + +void MainFrame::openProjectView(const String &strPathProjectFile) +{ + SmartPointer mdiWindow; + ViewWindow *pViewWindow; + + if(strPathProjectFile.isNull())return; + if(isActive(mdiWindow,strPathProjectFile)) + { + mdiWindow->top(); + return; + } + insert(*(pViewWindow=::new ViewWindow)); + operator[](size()-1).createWindow(*this,String(STRING_TABVIEWWINDOWCLASSNAME),"Tablature","viewMenu","APP_ICON"); + pViewWindow->setStatusControlRef(mStatusControl); + if(!pViewWindow->openProject(strPathProjectFile)) + { + pViewWindow->close(); +// removeHistory(strPathProjectFile); + return; + } + else pViewWindow->setFretboardHandler(CallbackPointer(&mGUIFretboardHandler)); + updateHistory(strPathProjectFile); +} + + +//#define IDR_ACCELERATOR1 104 +//#define IDD_DIALOG1 105 + + + +/* + +bool MIDIHelper::import(const String &strPathMidiFileName,const String &strPathTabFileName) +{ + String tabFileName; + TabEntries tabEntries; + Tablature tablature; + TabEntry entry; + WORD currPlayTime; + WORD prevPlayTime; + Block tracks; + Block notes; + + if(strPathMidiFileName.isNull()||strPathTabFileName.isNull())return false; +// if(midiFileName.isNull())return; +// tabFileName=Profile::removeExtension(midiFileName)+String(".tab"); + + mMessages.remove(); + currPlayTime=0; + prevPlayTime=0; + +// ::OutputDebugString(mFretboard.toString()); +// MidiData midiData(midiFileName); + MidiData midiData(strPathMidiFileName); + midiData.makeRealTime(); +// midiData.combineTracks(eventBlock); + midiData.getTracks(tracks); + if(!tracks.size())return false; + WORD maxEvents=0; + int currentTrack; + + for(int trIndex=0;trIndexmaxEvents) + { + maxEvents=midiData.getEventCount(tracks[trIndex].getValue()); + currentTrack=tracks[trIndex].getValue(); + } + } + + for(int index=0;index + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ +// MidiData midiData("D:\\WORK\\GUITAR\\MIDI\\2112.mid"); +// midiData.play(); + + +/* +// String musicFileName("D:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); + String musicFileName("D:\\WORK\\GUITAR\\MIDI\\2112.mid"); +// String musicFileName("C:\\WINNT\\MEDIA\\PASSPORT.MID"); +// String musicFileName("D:\\WORK\\GUITAR\\MIDI\\PACO.MID"); + + + + MIDIHelper midiHelper; + midiHelper.import(musicFileName); + + return 0; +*/ + + MainFrame mainFrame; + VersionInfo versionInfo; + + if(lpszCmdLine&&!(String(lpszCmdLine)=="NOLOGO")) + { + SplashScreen splash("GUITAR","2002 - Diversified Software Solutions. \"http:\\www.guitartabpro.com\"",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()); + splash.perform(); + } + String str=versionInfo.getProductVersion(); + GlobalDefs::setLogLevel(GlobalDefs::Debug); +// GlobalDefs::setLogFile("TabMaster.log"); + GlobalDefs::setRegisteredClipboardFormat(Clipboard::registerClipboardFormat(String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"))); + GlobalDefs::outDebug("Application started."); + GlobalDefs::outDebug("Creating main window.",GlobalDefs::Info); + mainFrame.createWindow("TabMaster",versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion(),"mainMenu","APP_ICON"); + GlobalDefs::outDebug("Loading accelerators.",GlobalDefs::Info); + mainFrame.loadAccelerators(TABACCELERATORS); + return mainFrame.messageLoop(); +} + + + + VersionInfo versionInfo; + SystemTime currDate; + String strVersion; + + strVersion=versionInfo.getProductVersionString(); + strVersion.removeTokens(", "); + strVersion.upper(); + if(!(strVersion==mProductVersion))return false; + if(Permanent==mLicenseType)return true; + SystemTime expireDate(mIssueDate); + expireDate.daysAdd360(mDayCount); + if(expireDate>currDate)return false; + return true; + + + + + + +/* +#include +#include +#include +#include + +void proto(void) +{ + if(!Registration::getInstance().hasLicense()) + { + if(Registration::getInstance().hasGID()) + { + ::OutputDebugString("User deleted license, prompt for new one, exit if none entered.\n"); + return; + } + else + { + License license; + Registration::getInstance().create30DayLicense(); + Registration::getInstance().getLicense(license); + ::OutputDebugString(String("Created 30 day license.")+String("There are ")+String().fromInt(license.getRemainingDays())+String(" days remaining\n")); + } + } + else + { + License license; + Registration::getInstance().getLicense(license); + if(!license.isValid()) + { + ::OutputDebugString("The license is no longer valid, please enter a valid license.\n"); + return; + } + else + { + if(!license.isExpiring())::OutputDebugString("Permanent license was accepted.\n"); + else ::OutputDebugString(String("License accepted. ")+String("There are ")+String().fromInt(license.getRemainingDays())+String(" days remaining.\n")); + return; + } + } +} +*/ + + + +LICENSEDIALOG DIALOGEX 0, 0, 223, 135 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTERMOUSE | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "License Helper" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT LICENSE_DIALOG_LICENSE,2,117,215,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "O&k",IDOK,154,2,65,14 + PUSHBUTTON "Cancel",IDCANCEL,154,17,65,14 + LTEXT "If you have received a new license, copy the license exactly as you", + IDC_STATIC,5,67,214,8 + LTEXT "You are seeing this because you have an invalid or expired License.", + IDC_STATIC,5,53,216,8 + LTEXT "received it and paste it below.",IDC_STATIC,5,80,95,8 + LTEXT "You can request a new license by",IDC_STATIC,104,80,108, + 8 + LTEXT "choosing the ""Request License"" button above.", + IDC_STATIC,5,93,210,8 + PUSHBUTTON "Request License",LICENSE_DIALOG_REQUEST_LICENSE,154,32, + 65,14 +END + + + + + +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + ::OutputDebugString(encodeNumeric(lineString)+String("\n")); + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + ::OutputDebugString(encodeNumeric(strLine)+String("\n")); + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + +String UUTool::decode(Array &bytes) // strLine +{ +// int stringLength=strLine.length(); + int stringLength=bytes.size(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); +// ptrBuff=strLine.str(); + ptrBuff=(char*)&bytes[0]; + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + if(ch>=100) + { + ::OutputDebugString(">=100"); + // ::DebugBreak(); + } +// (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// (*ptrLine++)=ch; + } + else if(n>=3) + { + if(ch>=100) + { + ::OutputDebugString(">=100"); +// ::DebugBreak(); + } +// if(ch>=100)::OutputDebugString(">=100"); +// (*ptrLine++)=ch; + } + } + } + return lineString; +} + + +String UUTool::encodeNumeric(String strEncode) +{ + String strNumeric; + String strHex; + for(int index=0;index +#include +#include + +void proto(); +void proto2(); + +String encodeNumeric(String strLine); + + + +// Registration::getInstance().generatePermanentLicense(); +// Version 2.00 must have permanent license. +// if(!Registration::getInstance().hasLicense()&&!Registration::getInstance().hasGID()) +// Registration::getInstance().create15DayLicense(); + +// if(!()) lpszCmdLine&&!(String(lpszCmdLine)=="NOLOGO")) + + + + +void GUIFretboard::setNote(const TabEntry &entry,bool clear,bool play) +{ + PureDevice device(*mParent); + getSequencer(); + if(clear)clearNotes(); + prepareDevice(device,true); + for(int index=0;indexgetDevice()); + } + } + prepareDevice(device,false); +// if(play)((TabEntry&)entry).play(mSequencer->getDevice()); +} + + + + + +void ChordDialog::handleChordSelection(void) +{ + String strSelect; + TabEntry entry; + + strSelect=String(mChordList->getCurrent()+ResBegin); + if(strSelect.isNull())return; + makeTabEntry(strSelect,entry); + CallbackData cbData(0,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +/* if(!mMIDIDevice->getDevice().hasDevice()) + mMIDIDevice->getDevice().openDevice(); + for(int index=0;indexgetDevice()); + } +*/ +} + + + +CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData) +{ + GDIPoint cursorPoint; + + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + ::GetCursorPos(&cursorPoint.getPOINT()); + move(cursorPoint); + mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST); + mScaleList.disposition(PointerDisposition::Delete); + mScaleList->addString("Ionian"); + mScaleList->addString("Dorian"); + mScaleList->addString("Phrygian"); + mScaleList->addString("Lydian"); + mScaleList->addString("Mixolydian"); + mScaleList->addString("Aeolian"); + mScaleList->addString("Locrian"); + mScaleList->addString("Pentatonic Minor"); + mScaleList->addString("Harmonic Minor"); + mScaleList->addString("Melodic Minor"); + mScaleList->addString("Dorian-II"); + mScaleList->addString("Lydian Augmented"); + mScaleList->addString("Lydian Dominant"); + mScaleList->addString("Locrian2"); + mScaleList->addString("Altered"); + mScaleList->addString("Diminished(Whole Step)"); + mScaleList->addString("Diminished(Half Step)"); + mScaleList->addString("Whole Tone"); + sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0)); + sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L); + sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L); + setText(SCALEDLG_ROOT,"A"); + mScaleList->setCurrent(0); +// showScale(); + return (CallbackData::ReturnType)FALSE; +} + + + + +bool TabPage::insert(const TabEntries &entries) +{ + GlobalDefs::outDebug("[TabPage::insert]TabEntries",GlobalDefs::Debug); + if(!entries.size())return false; + for(int index=0;indexinvalidate(true); + mParent->update(); + showCurrent(); + + return true; +} + + + +/* +bool Fretboard::getAt(const Music::Chord &chord,Block &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes)) + frettedNotes.insert(&frettedNote); + else returnCode=false; + } + return returnCode; +} +*/ + + + + +using namespace Music; +#include +#include +/* Block frettedNotes; + ChordCompiler chordCompiler; + ChordMapper chordMapper; + Music::Chord chord; + String strChord("C7b9"); + + chordCompiler.compile(strChord,chord); + chordMapper.map(chord,frettedNotes); + +*/ + + + + + +/* +bool ChordMapper::map(const Music::Chord &chord,Block > &frettedNotesBlock) +{ + frettedNotesBlock.remove(); + + Music::Chord tmpChord(chord); + for(int rIndex=0;rIndex tryBlock; + if(!generateMapping(tmpChord,string,tryBlock))continue; + +// getFillerNotes(tryBlock[0].getFret(),tmpChord,tryBlock); + + + frettedNotesBlock.insert(&tryBlock); + Block &frettedNotes=frettedNotesBlock[frettedNotesBlock.size()-1]; + ::OutputDebugString("***************************************************************\n"); + for(int index=0;index &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + + frettedNotes.remove(); + for(int index=0;index=Fretboard::Strings)startingString=0; + if(getAt(startingString,note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else returnCode=false; + if(!returnCode)break; + } + return returnCode; +} +*/ + +/* +bool ChordMapper::map(const Music::Chord &chord,Block &frettedNotes) +{ + FrettedNote frettedNote; + bool returnCode=true; + bool isBarChord=false; + + frettedNotes.remove(); + if(getAt(chord.getRoot(),frettedNote,frettedNotes)) // try to set the root on the top string + { + frettedNotes.insert(&frettedNote); + isBarChord=true; + } + for(int index=chord.size()-1;index>=0;index--) + { + Note ¬e=((Music::Chord&)chord)[index]; + if(getAt(note,frettedNote,frettedNotes))frettedNotes.insert(&frettedNote); + else + { + returnCode=false; + } + } +// need to come up with a strategy here for mapping notes on the fretboard + if(isBarChord) // check to see if we can fill in some notes at the bar chord fret + { + getFillerNotes(frettedNotes[0].getFret(),chord,frettedNotes); + } + return returnCode; +} +*/ + + + + +/* + Shift positions of notes in chord + @param Chord - The chord + @return None +*/ +void ChordMapper::shiftChord(Music::Chord &chord) +{ + Note note; + + note=chord[0]; + for(int index=1;indexgetAt(mOverlay,outlineRect); + + mDIBitmap->bitBlt(mOverlay->getDevice(),PureDevice::DstInvert); + +// Rect rect(outlineRect); +// rect.left(rect.left()+1); +// rect.top(rect.top()+1); +// rect.right(rect.right()-1); +// rect.bottom(rect.bottom()-1); +// mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + + mDIBitmap->bitBlt(mOverlay->getDevice(),PureDevice::DstInvert); + + +// Rect rect(outlineRect); +// rect.left(rect.left()+1); +// rect.top(rect.top()+1); +// rect.right(rect.right()-1); +// rect.bottom(rect.bottom()-1); +// mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} +*/ diff --git a/guitar/settingsdlg.cpp b/guitar/settingsdlg.cpp new file mode 100644 index 0000000..d6fc4c0 --- /dev/null +++ b/guitar/settingsdlg.cpp @@ -0,0 +1,209 @@ +#include +#include +#include +#include +#include +#include + +SettingsDialog::SettingsDialog(void) +{ + mInitHandler.setCallback(this,&SettingsDialog::initHandler); + mCreateHandler.setCallback(this,&SettingsDialog::createHandler); + mCloseHandler.setCallback(this,&SettingsDialog::closeHandler); + mDestroyHandler.setCallback(this,&SettingsDialog::destroyHandler); + mCommandHandler.setCallback(this,&SettingsDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog::SettingsDialog(const SettingsDialog &someSettingsDialog) +{ // private implementation + *this=someSettingsDialog; +} + +SettingsDialog::~SettingsDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +SettingsDialog &SettingsDialog::operator=(const SettingsDialog &someSettingsDialog) +{ // private implementation + return *this; +} + +bool SettingsDialog::perform(GUIWindow &parentWindow) +{ + Rect clientRect; + parentWindow.clientRect(clientRect); + mDisplayPoint.x((clientRect.right()-clientRect.left())/2); + mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2); + return ::DialogBoxParam(processInstance(),(LPSTR)"SETTINGSDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SettingsDialog::initHandler(CallbackData &someCallbackData) +{ + mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); + mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); + move(mDisplayPoint); + initialize(); + return (CallbackData::ReturnType)false; +} + +CallbackData::ReturnType SettingsDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SettingsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + apply(); + break; + case SETTINGS_DEFAULTS : + selectDefaults(); + } + return (CallbackData::ReturnType)FALSE; +} + +void SettingsDialog::initialize(void) +{ + Registry registry; + + sendMessage(SETTINGS_INSTRUMENT,CB_RESETCONTENT,0,0L); + for(int index=0;index deviceNames; + int currentSelection=-1; + + MIDIOutputDevice::getDeviceNames(deviceNames); + sendMessage(SETTINGS_MIDIOUT,CB_RESETCONTENT,0,0L); + deviceNames.insert(&String("MIDIMAPPER")); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _GUITAR_INSTRUMENT_HPP_ +#include +#endif + +class SettingsDialog : public DWindow +{ +public: + SettingsDialog(void); + virtual ~SettingsDialog(); + bool perform(GUIWindow &parentWindow); +private: + SettingsDialog(const SettingsDialog &someSettingsDialog); + SettingsDialog &operator=(const SettingsDialog &someSettingsDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void initialize(void); + void selectInstrument(Instrument instrument); + void selectDefaults(void); + void selectTiming(int timing); + void selectAction(bool action); + void selectShowNotes(bool showNotes); + void selectMIDIOutputDevice(const String &midiOutputDevice); + String getMIDIOutputDevice(void); + Instrument getInstrument(void); + bool getShowNotes(void); + bool getAction(void); + int getTiming(void); + void apply(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Instruments mInstruments; + Point mDisplayPoint; +}; +#endif diff --git a/guitar/splash.cpp b/guitar/splash.cpp new file mode 100644 index 0000000..5d5c336 --- /dev/null +++ b/guitar/splash.cpp @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mStrTitle(strTitle), mTimeout(timeout), + mTextFont("Helv",8,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mLeftButtonHandler.setCallback(this,&SplashScreen::leftButtonHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|0x04|WS_CLIPSIBLINGS|WS_DLGFRAME; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)"Splash",style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::leftButtonHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIB24(); + mDIBitmap.disposition(PointerDisposition::Delete); + mDIBitmap->create(mResBitmap->width(),mResBitmap->height(),*mPureDevice); + mDIBitmap->copyBits(*mResBitmap); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + WinInfo winInfo; + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + mDIBitmap->bitBlt(pureDevice,Rect(0,0,width(),height()),Point()); + ((PurePalette&)*mResBitmap).usePalette(pureDevice,true); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); + pureDevice.textOut(5,200,mStrCaption); + showLicense(pureDevice); + + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(1,60,String("Windows version:")+winInfo.strProductName()+String(" ")+winInfo.strVersion()); // add 15 + pureDevice.textOut(1,75,String("Registered owner:")+winInfo.strRegisteredOwner()); + pureDevice.textOut(1,90,String("OEM:")+winInfo.strProductID()); + + if(!mStrTitle.isNull()) + { + Font mFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold); + pureDevice.select((GDIObj)mFont,TRUE); + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(12,10,mStrTitle); + pureDevice.select((GDIObj)mFont,FALSE); + } + return (CallbackData::ReturnType)FALSE; +} + +void SplashScreen::showLicense(PureDevice &pureDevice) +{ + pureDevice.setTextColor(RGBColor(255,255,255)); + if(Registration::getInstance().hasLicense()) + { + License license; + Registration::getInstance().getLicense(license); + if(license.isValid()) + { +// if(license.isExpiring())pureDevice.textOut(1,250,String("License will expire in ")+String().fromInt(license.getRemainingDays())+String(" days.")); +// if(license.isExpiring())pureDevice.textOut(1,250,String("You are on day ")+String().fromInt(license.getDay())+String(" of your ")+String().fromInt(license.getDayCount())+String(" day license.")); + if(license.isExpiring())pureDevice.textOut(1,250,String("This version of TabMaster requires a permanent license.")); + else pureDevice.textOut(1,250,"Permanent license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); + } + else pureDevice.textOut(1,250,"Invalid or expired license."); +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} diff --git a/guitar/splash.hpp b/guitar/splash.hpp new file mode 100644 index 0000000..2b3066d --- /dev/null +++ b/guitar/splash.hpp @@ -0,0 +1,70 @@ +#ifndef _GUITAR_SPLASHSCREEN_HPP_ +#define _GUITAR_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIB24; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=5000}; + SplashScreen(const String &strBitmap,const String &strCaption,const String &strTitle,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + void showLicense(PureDevice &pureDevice); + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + Callback mLeftButtonHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mStrTitle; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} +#endif \ No newline at end of file diff --git a/guitar/tabdlg.cpp b/guitar/tabdlg.cpp new file mode 100644 index 0000000..d913b91 --- /dev/null +++ b/guitar/tabdlg.cpp @@ -0,0 +1,156 @@ +#include +#include +#include + +TabDialog::TabDialog(void) +: mCurrEntryIndex(0) +{ + mInitHandler.setCallback(this,&TabDialog::initHandler); + mCreateHandler.setCallback(this,&TabDialog::createHandler); + mCloseHandler.setCallback(this,&TabDialog::closeHandler); + mDestroyHandler.setCallback(this,&TabDialog::destroyHandler); + mCommandHandler.setCallback(this,&TabDialog::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog::TabDialog(const TabDialog &someTabDialog) +{ // private implementation + *this=someTabDialog; +} + +TabDialog::~TabDialog() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +TabDialog &TabDialog::operator=(const TabDialog &someTabDialog) +{ // private implementation + return *this; +} + +bool TabDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex) +{ + mTabEntries=SmartPointer(&entries); + mCurrEntryIndex=currEntryIndex; + return ::DialogBoxParam(processInstance(),(LPSTR)"TABDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType TabDialog::initHandler(CallbackData &someCallbackData) +{ + Block stops; + mTabEntryList=::new OwnerDrawListAltColor(*this,getItem(TABENTRY_LIST),TABENTRY_LIST); + mTabEntryList.disposition(PointerDisposition::Delete); + stops.insert(&PureDWORD(15)); + stops.insert(&PureDWORD(35)); + stops.insert(&PureDWORD(50)); + mTabEntryList->setTabStops(stops); + setTypes(); + + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + if(entry.hasSeparator())sendMessage(TABENTRY_SEPARATOR,BM_SETCHECK,1,0L); + for(int index=0;indexinsertString(strLine); + } + if(!entry.getComment().isNull())setText(TABENTRY_COMMENTS,entry.getComment()); + mTabEntryList->setCurrent(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TabDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + endDialog(false); + break; + case IDOK : + handleOk(); + endDialog(true); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void TabDialog::setTypes() +{ + Array notes; + sendMessage(TABENTRY_NOTETYPE,CB_RESETCONTENT,0,0L); + notes=NoteType::enumerate(); + int currSel=-1; + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + for(int index=0;indexsize();index++) + { + TabEntry &entry=(*mTabEntries)[index]; + entry.setNoteType(noteType); + } + } + else + { + TabEntry &entry=(*mTabEntries)[mCurrEntryIndex]; + entry.setNoteType(noteType); + } +} diff --git a/guitar/tabdlg.hpp b/guitar/tabdlg.hpp new file mode 100644 index 0000000..e5a79e4 --- /dev/null +++ b/guitar/tabdlg.hpp @@ -0,0 +1,45 @@ +#ifndef _GUITAR_TABDLG_HPP_ +#define _GUITAR_TABDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTALTCOLOR_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif + +class TabDialog : public DWindow +{ +public: + TabDialog(void); + virtual ~TabDialog(); + bool perform(GUIWindow &parentWindow,TabEntries &entries,int currEntryIndex); +private: + TabDialog(const TabDialog &someTabDialog); + TabDialog &operator=(const TabDialog &someTabDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void setTypes(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mTabEntries; + int mCurrEntryIndex; + SmartPointer mTabEntryList; +}; +#endif diff --git a/guitar/tablature.cpp b/guitar/tablature.cpp new file mode 100644 index 0000000..7b6c764 --- /dev/null +++ b/guitar/tablature.cpp @@ -0,0 +1,454 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TabEntries &Tablature::getTabEntries(void)const +{ + return mTabEntries; +} + +void Tablature::setTabEntries(const TabEntries &entries) +{ + mTabEntries.remove(); + for(int index=0;index=mTabEntries.size()) + { + GlobalDefs::outDebug("[Tablature::setTypeAt] index out of bounds : "+String().fromInt(index)); + return false; + } + mTabEntries[index].setNoteType(noteType); + return true; +} + +bool Tablature::open(const String &pathFileTablature) +{ + mLastError=None; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=pathFileTablature.betweenString(0,'.')+String(STRING_PRJEXTENSION); + if(!loadTabFile(pathFileTablature))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + return true; +} + +bool Tablature::import(String pathFileTablature) +{ + mLastError=None; + String strExtension; + String pathFileTablatureImport; + + pathFileTablatureImport=pathFileTablature; + strExtension=Profile::getExtension(pathFileTablature); + strExtension.lower(); + if(strExtension.isNull()||!(strExtension==String(STRING_TABEXTENSION)))return false; + pathFileTablature=Profile::removeExtension(pathFileTablature); + pathFileTablature+=strExtension; + mPathFileTablature=pathFileTablature; + if(mPathFileProject.isNull())mPathFileProject=getPathFileProject(pathFileTablatureImport); + if(!loadTabFile(pathFileTablatureImport))return false; + mPathFileName=pathFileTablature; + if(!parseTab())return false; + saveAs(pathFileTablature); + return true; +} + +String Tablature::getPathFileProject(const String &pathFileTablature) +{ + return Profile::removeExtension(pathFileTablature)+String(STRING_PRJEXTENSION); +} + +bool Tablature::saveAs(const String &pathFileTablature) +{ + TabWriter tabWriter; + if(pathFileTablature.isNull())return false; + return tabWriter.write(mTabEntries,pathFileTablature); +} + +bool Tablature::save(void) +{ + if(mPathFileTablature.isNull())return false; + return saveAs(mPathFileTablature); +} + +bool Tablature::openProject(const String &pathFileName) +{ + DiskInfo diskInfo; + File inFile; + String strLine; + String strDirectory; + + mPathFileProject=pathFileName; + strDirectory=mPathFileProject; + Profile::makeDirectoryName(strDirectory); + if(!diskInfo.setCurrentDirectory(strDirectory)||!inFile.open(pathFileName)) + { + mLastError=FileOpenError; + return false; + } + if(!inFile.readLine(strLine))return false; + if(!(strLine=="WINTABV1.00"))return false; + if(!inFile.readLine(strLine))return false; + if(!(strLine.betweenString(0,'=')==String("TABLATURE")))return false; + strLine=strLine.betweenString('=',0); + if(strLine.isNull()) + { + MessageBox::messageBox("Project does not contain a reference to any tablature.",strLine); + return false; + } + if(!open(strLine))return false; + while(inFile.readLine(strLine)) + { + if(strLine.betweenString(0,'=')==String("TYPES"))parseTypes(strLine); + else if(strLine.betweenString(0,'=')==String("RANGE"))parseRange(strLine); + else if(strLine.betweenString(0,'=')==String("COMMENT"))parseComment(strLine); + else if(strLine.betweenString(0,'=')==String("SEPARATOR"))parseSeparator(strLine); + } + return true; +} + +bool Tablature::saveProject(const String &pathFileName) +{ + File outFile; + + if(!pathFileName.isNull())mPathFileProject=pathFileName; + if(mPathFileProject.isNull())return false; + if(!outFile.open(mPathFileProject,"wb"))return false; + outFile.writeLine("WINTABV1.00"); + if(mPathFileName.isNull())mPathFileName=Profile::removeExtension(mPathFileProject)+String(STRING_TABEXTENSION); + Profile::makeFileName(mPathFileName,mPathFileName); + outFile.writeLine(String("TABLATURE=")+mPathFileName); + outFile.writeLine(String("TYPES=")+getTypes()); + for(int index=0;indexlength)continue; + if(isTabLine(strLine,startElement)) + { + mTablature.insert(&TabLines()); + TabLines &tabLines=mTablature[mTablature.size()-1]; + tabLines[0]=strLine.substr(startElement); + for(int string=1;string<6;string++,line++) + { + if(!inFile.readLine(strLine))break; + tabLines[string]=strLine.substr(startElement); + } + } + } + GlobalDefs::outDebug(String("[Tablature::loadTabFile] ")+String().fromInt(mTablature.size())+String(" tabs, in ")+String().fromInt((::GetTickCount()-elapsedTime)/1000)+String(" seconds.")); + if(mTablature.size())return true; + mLastError=NoTabsParsedError; + return false; +} + +bool Tablature::isTabLine(const String &strLine,int &startElement)const +{ + int lineLength=strLine.length(); + char charAt0; + char charAt1; + char charAt2; + char charAt3; + char charAt4; + char lastChar; + + if(!lineLength)return false; + charAt0=lineLength?strLine.charAt(0):0; + charAt1=lineLength>=1?strLine.charAt(1):0; + charAt2=lineLength>=2?strLine.charAt(2):0; + charAt3=lineLength>=3?strLine.charAt(3):0; + charAt4=lineLength>=4?strLine.charAt(4):0; + lastChar=lineLength?strLine.charAt(lineLength-1):0; + + if((charAt0=='e'||charAt0=='E')&&(charAt1==':'||charAt1=='|')) + { + startElement=2; + return true; + } + if(charAt0=='|'&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==':'&&(::isalnum(charAt1)||charAt1=='-')) + { + startElement=1; + return true; + } + if(charAt0==':'&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0=='-') + { + startElement=0; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' '&&charAt4=='|') + { + startElement=5; + return true; + } + if(charAt0==' '&&charAt1=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1=='-') + { + startElement=1; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='I'&&charAt3=='-') + { + startElement=3; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1=='-') + { + startElement=1; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&charAt2=='|'&&charAt3=='-') + { + startElement=2; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==']'&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==':'&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(charAt0==' '&&charAt1==' '&&charAt2=='-') + { + startElement=2; + return true; + } + if(::isdigit(charAt0)&&(lastChar=='-'||lastChar=='|')) + { + startElement=0; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2=='|') + { + startElement=2; + return true; + } + if(charAt0==' '&&(charAt1=='E'||charAt1=='e')&&charAt2==' '&&charAt3=='|') + { + startElement=3; + return true; + } + if(charAt0==' '&&charAt1==' '&&(charAt2=='E'||charAt2=='e')&&charAt3==' ') + { + startElement=4; + return true; + } + if((charAt0=='E'||charAt0=='e')&&charAt1==' '&&(charAt2=='|'||charAt2=='+')&&charAt3=='-') + { + startElement=3; + return true; + } + return false; +} diff --git a/guitar/tabpage.cpp b/guitar/tabpage.cpp new file mode 100644 index 0000000..82b6a25 --- /dev/null +++ b/guitar/tabpage.cpp @@ -0,0 +1,1049 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TabPage::TabPage(ViewWindow &parent) +: mItemsPerTab(0), mNumTabs(0), mCharWidth(0), mOutlinePen(RGBColor(0,0,0),Pen::PDot) , + mDrawFont("Courier New",10), mHasFocus(false), mIsCancelled(false), mIsInPlay(false), + mIsPaused(false), mIsDirty(false), mKeepOutline(false), mCurrEntryIndex(0), mIsInSetRange(false) +{ + mMIDIDevice=::new Sequencer(); + mMIDIDevice.disposition(PointerDisposition::Delete); + mSizeHandler.setCallback(this,&TabPage::sizeHandler); + mPaintHandler.setCallback(this,&TabPage::paintHandler); + mVerticalScrollHandler.setCallback(this,&TabPage::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&TabPage::horizontalScrollHandler); + mLeftButtonUpHandler.setCallback(this,&TabPage::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&TabPage::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&TabPage::mouseMoveHandler); + mKillFocusHandler.setCallback(this,&TabPage::killFocusHandler); + mSetFocusHandler.setCallback(this,&TabPage::setFocusHandler); + mLeftButtonDoubleHandler.setCallback(this,&TabPage::leftButtonDoubleHandler); + mKeyDownHandler.setCallback(this,&TabPage::keyDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)parent).insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mParent=&parent; + mParent.disposition(PointerDisposition::Assume); + mScrollInfo.hwndOwner(parent); + createBitmap(parent); +} + +TabPage::TabPage(const TabPage &/*someTabPage*/) +{ // private implementation +} + +TabPage::~TabPage() +{ + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KillFocusHandler,&mKillFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + ((GUIWindow&)*mParent).removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); +} + +bool TabPage::insert(const TabEntry &entry,bool setDirty) +{ + TabEntries entries; + entries.insert(&entry); + return insert(entries,setDirty); +} + +bool TabPage::insert(const TabEntries &entries,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabEntries",GlobalDefs::Debug); + if(!entries.size())return false; + for(int index=0;indexinvalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +bool TabPage::insert(const TabRanges &ranges,bool setDirty) +{ + GlobalDefs::outDebug("[TabPage::insert]TabRanges",GlobalDefs::Debug); + if(!ranges.size())return false; + for(int index=0;indexsetBits(BkColorBits); + drawTabPage(); + drawEntries(); + cursorControl.waitCursor(false); + mScrollInfo.scrollableObjectDimensions(mDIBitmap->width(),mDIBitmap->height()); + elapsedTime=(::GetTickCount()-elapsedTime)/1000; + GlobalDefs::outDebug(String("[TabPage::createBitmap]took ")+String().fromInt(elapsedTime)+String(" seconds."),GlobalDefs::Debug); + return mDIBitmap.isOkay(); +} + +bool TabPage::drawEntries(const RGBColor &rgbColor) +{ + Point p1; + Point p2; + String strFret; + Registry registry; + bool showAction(registry.getShowAction()); + Pen colorPen(RGBColor(0,0,0),PenWidth); + + if(!isOkay())return false; + GlobalDefs::outDebug(String("[TabPage::drawEntries]"),GlobalDefs::Debug); + PureDevice &pureDevice=mDIBitmap->getDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + for(int entryIndex=0;entryIndexgetDevice(); + pureDevice.select(mDIBitmap->getBitmap()); + pureDevice.setTextColor(rgbColor); + ::SelectObject(pureDevice.getDC(),(HFONT)mDrawFont); + Point p1=getEntryPoint(entryIndex); + Point p2; + TabEntry &entry=mTabEntries[entryIndex]; + for(int index=0;indexgetAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + else + { + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mDIBitmap->getAt(mOverlay,outlineRect); + Rect rect(outlineRect); + rect.left(rect.left()+1); + rect.top(rect.top()+1); + rect.right(rect.right()-1); + rect.bottom(rect.bottom()-1); + mDIBitmap->outlineRect(rect); + invalidate(outlineRect); + } + mPrevOutlineRect=outlineRect; + return true; +} + +bool TabPage::clearUpdate(void) +{ + GlobalDefs::outDebug(String("[TabPage::clearUpdate]"),GlobalDefs::Debug); + if(!isOkay())return false; + if(!mOverlay.isOkay())return false; + mDIBitmap->overlay(*mOverlay,Point(mPrevOutlineRect.left(),mPrevOutlineRect.top())); + invalidate(mPrevOutlineRect); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + mOverlay.destroy(); + return true; +} + +bool TabPage::getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(outlineRect.ptInRect(mousePoint)) + { + entryIndex=index; + return true; + } + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getOutlineRect(int entryIndex,Rect &outlineRect) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getOutlineRect]"),GlobalDefs::Debug); + if(!isOkay())return false; + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + outlineRect.right(getWidth()-(RightMargin+1)); + outlineRect.bottom(xyPoint.y()+TabHeight-TabSpacing); + if(index==entryIndex)return true; + if(xyPoint.x()+getCharWidth()>=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return false; +} + +bool TabPage::getNearestString(const Point &clickPoint,int &nearestString) +{ + Rect outlineRect; + map distanceMap; + + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return false; + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + distanceMap[abs(clickPoint.y()-outlineRect.top())]=5; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+TabSpacing))]=4; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*2)))]=3; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*3)))]=2; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*4)))]=1; + distanceMap[abs(clickPoint.y()-(outlineRect.top()+(TabSpacing*5)))]=0; + nearestString=(*distanceMap.begin()).second; + return true; +} + +Point TabPage::getEntryPoint(int entryIndex) +{ + Point xyPoint(LeftMargin,TopMargin); + + GlobalDefs::outDebug(String("[TabPage::getEntryPoint]"),GlobalDefs::Debug); + for(int index=0;index=getWidth()-(RightMargin+LeftMargin)) + { + xyPoint.x(LeftMargin); + xyPoint.y(xyPoint.y()+TabHeight+TabSeparator); + } + else xyPoint.x(xyPoint.x()+getCharWidth()); + } + return xyPoint; +} + +bool TabPage::showCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + if(!getOutlineRect(mCurrEntryIndex,outlineRect))return false; + mOverlay.destroy(); + mPrevOutlineRect=Rect(-1,-1,-1,-1); + isInOutline(true); + mParent->clientRect(clientRect); + bringOutlineIntoView(outlineRect,clientRect); + this->outlineRect(outlineRect); + showFretEntry(mTabEntries[mCurrEntryIndex]); + return true; +} + +bool TabPage::drawTabPage(void) +{ + int yStart=TopMargin; + int xStart=0; + int elapsedTime; + + GlobalDefs::outDebug(String("[TabPage::drawTabPage]"),GlobalDefs::Debug); + elapsedTime=::GetTickCount(); + if(!getNumTabs())drawTab(LeftMargin,RightMargin,xStart,yStart,TabSpacing,TabLines); // draw at least one + for(int index=0;indexline(Point(marginLeft-1,yStart),Point(marginLeft-1,1+yStart+((lineCount-1)*spacing)),TabLineColor); + for(int line=0;lineline(Point(xPos,yPos),Point(mDIBitmap->width()-marginRight,yPos),TabLineColor); + yPos+=spacing; + } + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point(mDIBitmap->width()-marginRight,1+yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart),Point((mDIBitmap->width()-marginRight)+2,yStart),TabLineColor); + mDIBitmap->line(Point(mDIBitmap->width()-marginRight,yStart+((lineCount-1)*spacing)),Point((mDIBitmap->width()-marginRight)+2,yStart+((lineCount-1)*spacing)),TabLineColor); + mDIBitmap->line(Point((mDIBitmap->width()-marginRight)+2,yStart),Point((mDIBitmap->width()-marginRight)+2,1+yStart+((lineCount-1)*spacing)),TabLineColor); + return yStart+((lineCount-1)*spacing); +} + +int TabPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + PureDevice pureDevice(guiWindow); + setCharWidth(getWidestEntry(pureDevice)); + gdiPoint=GDIPoint(); + + GlobalDefs::outDebug(String("[TabPage::getDimensions]"),GlobalDefs::Debug); + setItemsPerTab(((guiWindow.width())-(RightMargin+LeftMargin))/getCharWidth()); + setNumTabs((mTabEntries.size()/getItemsPerTab())); + setNumTabs(getNumTabs()+(mTabEntries.size()%getItemsPerTab()?1:0)); + if(!getNumTabs())gdiPoint.y(TopMargin+((TabHeight+TabSeparator))); + else gdiPoint.y(TopMargin+(getNumTabs()*(TabHeight+TabSeparator))); + gdiPoint.x(guiWindow.width()); + GlobalDefs::outDebug(String("[TabPage::getDimensions]ItemsPerTab:")+String().fromInt(getItemsPerTab())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]NumTabs:")+String().fromInt(getNumTabs())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]AvgCharWidth:")+String().fromInt(getCharWidth())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmWidth:")+String().fromInt(gdiPoint.x())); + GlobalDefs::outDebug(String("[TabPage::getDimensions]BmHeight:")+String().fromInt(gdiPoint.y())); + return getNumTabs(); +} + +int TabPage::getWidestEntry(PureDevice &pureDevice)const +{ + String string; + int widestEntry; + SIZE sizeStruct; + + GlobalDefs::outDebug(String("[TabPage::getWidestEntry]"),GlobalDefs::Debug); + if(!mTabEntries.size())return MinCharWidth; + widestEntry=0; + for(int entryIndex=0;entryIndexwidestEntry)widestEntry=sizeStruct.cx; + } + } + return widestEntry*2; +} + +void TabPage::bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + GlobalDefs::outDebug(String("[TabPage::bitBlt]"),GlobalDefs::Debug); + if(!mDIBitmap.isOkay())return; + mDIBitmap->usePalette(pureDevice,true); // the usePalette code can be removed... + mDIBitmap->bitBlt(pureDevice,dstRect,srcPoint); // but needs test on Win '98 first + mDIBitmap->usePalette(pureDevice,false); +} + +void TabPage::invalidate(Rect rect) +{ + GlobalDefs::outDebug(String("[TabPage::invalidate]"),GlobalDefs::Debug); + rect.left(rect.left()-mScrollInfo.currScrollx()); + rect.top(rect.top()-mScrollInfo.currScrolly()); + rect.right(rect.right()-mScrollInfo.currScrollx()); + rect.bottom(rect.bottom()-mScrollInfo.currScrollx()); + mParent->invalidate(rect,false); +} + +void TabPage::bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect) +{ + GlobalDefs::outDebug(String("[TabPage::bringOutlineIntoView]"),GlobalDefs::Debug); + if(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + while(outlineRect.bottom()+TabClearance>mScrollInfo.currScrolly()+clientRect.bottom()) + { + if(!mScrollInfo.pageDown())break; + } + } + else if(outlineRect.top()invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + ::SetCursorPos(mousePoint.x(),mousePoint.y()); + return true; +} + +bool TabPage::increaseTempo(void) +{ + GlobalDefs::outDebug(String("[TabPage::increaseTempo]"),GlobalDefs::Debug); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + if(!tabEntry.getComment().isNull())setStatusText(tabEntry.getComment()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::play(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::play]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=0;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + if(!tabEntry.getComment().isNull())setStatusText(tabEntry.getComment()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +bool TabPage::playFromCurrent(void) +{ + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug(String("[TabPage::playFromCurrent]"),GlobalDefs::Debug); + setCancelled(false); + isInPlay(true); + for(int index=mCurrEntryIndex;indexclientRect(clientRect); + getOutlineRect(index,outlineRect); + this->outlineRect(outlineRect); + bringOutlineIntoView(outlineRect,clientRect); + showFretEntry(tabEntry); + tabEntry.play(mMIDIDevice->getDevice()); + if(!tabEntry.getComment().isNull())setStatusText(tabEntry.getComment()); + mMIDIDevice->clearNotes(); + } + isInPlay(false); + clearUpdate(); + return true; +} + +void TabPage::showFretEntry(const TabEntry &entry) +{ + GlobalDefs::outDebug(String("[TabPage::showFretEntry]"),GlobalDefs::Debug); + if(!mPlayNoteHandler.isOkay())return; + CallbackData cbData(CBCommands::FBShowTab,(DWORD)&entry); + mPlayNoteHandler.callback(cbData); +} + +void TabPage::setStartRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setStartRange]"),GlobalDefs::Debug); + isInSetRange(true); + mCurrRange.setBeginRange(mCurrEntryIndex); +} + +void TabPage::setEndRange(void) +{ + GlobalDefs::outDebug(String("[TabPage::setEndRange]"),GlobalDefs::Debug); + isInSetRange(false); + mCurrRange.setEndRange(mCurrEntryIndex); + mCurrRange.autoName(); + mTabRanges.insert(&mCurrRange); + isDirty(true); + GlobalDefs::outDebug(mCurrRange.toString()); +} + +void TabPage::cut(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::cut]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + mParent->enablePaste(true); + if(!mTabEntries.size())mParent->enableCut(false); + showCurrent(); +} + +void TabPage::copy(void) +{ + Clipboard clipboard(*mParent); + String strHeader; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::copy]"),GlobalDefs::Debug); + if(isInPlay())return; + if(mCurrEntryIndex<0||mCurrEntryIndex>=mTabEntries.size())return; + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + strHeader=String("[")+versionInfo.getProductNameString()+String(",")+versionInfo.getProductVersion()+String("]"); + clipboard.setClipboard(GlobalDefs::getRegisteredClipboardFormat(),strHeader+entry.toString()); + mParent->enablePaste(true); +} + +bool TabPage::paste(void) +{ + Clipboard clipboard(*mParent); + String strText; + String strHeader; + TabEntry entry; + VersionInfo versionInfo; + + GlobalDefs::outDebug(String("[TabPage::paste] Current position is ")+String().fromInt(mCurrEntryIndex),GlobalDefs::Debug); + clipboard.getClipboard(GlobalDefs::getRegisteredClipboardFormat(),strText); + if(strText.isNull())return false; + GlobalDefs::outDebug(strText); + strHeader=strText.betweenString('[',']'); + if(strHeader.isNull())return false; + if(!(versionInfo.getProductNameString()==strHeader.betweenString(0,',')))return false; + if(!(versionInfo.getProductVersion()==strHeader.betweenString(',',0)))return false; + entry.fromString(strText.betweenString(']',0)); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else mTabEntries.insertAfter(mCurrEntryIndex,&entry); + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + return true; +} + +// ********************************************************************************************* +// callback handlers + +CallbackData::ReturnType TabPage::sizeHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::sizeHandler]ENTER",GlobalDefs::Verbose); + if(isInPlay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Pausing play...",GlobalDefs::Debug); + isPaused(true); + } + Point sizePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + if(!sizePoint.x()||!sizePoint.y()) + { + if(isInPlay())isPaused(false); + return false; + } + clearUpdate(); + if(!update(*mParent)) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + + return false; + } + if(!mDIBitmap.isOkay()) + { + GlobalDefs::outDebug("[TabPage::sizeHandler]Resuming play",GlobalDefs::Debug); + if(isInPlay())isPaused(false); + return false; + } + if(isInPlay())isPaused(false); + GlobalDefs::outDebug("[TabPage::sizeHandler]LEAVE",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::paintHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::paintHandler]",GlobalDefs::Verbose); + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(!mDIBitmap.isOkay())return false; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + bitBlt(paintDevice,Rect(0,0,getWidth(),getHeight()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + bitBlt(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType TabPage::verticalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::verticalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleVerticalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::horizontalScrollHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::horizontalScrollHandler]",GlobalDefs::Verbose); + mScrollInfo.handleHorizontalScroll(someCallbackData); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDoubleHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::leftButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonDownHandler]",GlobalDefs::Verbose); + if(isInPlay())setCancelled(true); + Point mousePoint; + int selectedString; + Rect outlineRect; + int entryIndex; + + mousePoint.x(someCallbackData.loWord()+mScrollInfo.currScrollx()); + mousePoint.y(someCallbackData.hiWord()+mScrollInfo.currScrolly()); + if(!getOutlineRect(mousePoint,entryIndex,outlineRect))return false; + if(!getNearestString(mousePoint,selectedString))return false; + getFretEntry(selectedString); + return false; +} + +bool TabPage::getFretEntry(int selectedString) +{ + FretDialog fretDialog; + bool returnCode=false; + + keepOutline(true); + if((returnCode=fretDialog.perform(*mParent,mTabEntries,selectedString,mCurrEntryIndex))) + { + if(!mTabEntries[mCurrEntryIndex].size()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex--; + } + isDirty(true); + update(*mParent); + mParent->invalidate(true); + mParent->update(); + showCurrent(); + } + keepOutline(false); + return returnCode; +} + +void TabPage::setCursorToTab(void) +{ + Rect outlineRect; + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + ::SetCursorPos((outlineRect.left()+outlineRect.right())/2,(outlineRect.top()+outlineRect.bottom())/2); +} + +// *************************************************************************************************** +// C A L L B A C K S +// *************************************************************************************************** + +CallbackData::ReturnType TabPage::leftButtonUpHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::leftButtonUpHandler]",GlobalDefs::Verbose); + return false; +} + +CallbackData::ReturnType TabPage::setFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::setFocusHandler]",GlobalDefs::Verbose); + hasFocus(true); + if(Clipboard::hasData(GlobalDefs::getRegisteredClipboardFormat()))mParent->enablePaste(true); + else mParent->enablePaste(false); + if(!mMIDIDevice.isOkay())mMIDIDevice=::new Sequencer(); + if(!mMIDIDevice->hasDevice()&&!mMIDIDevice->openDevice())return false; + if(isInPlay())isPaused(false); +// showCurrent(); + return false; +} + +CallbackData::ReturnType TabPage::killFocusHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("[TabPage::killFocusHandler]",GlobalDefs::Verbose); + hasFocus(false); + if(isInPlay())isPaused(true); + if(!mMIDIDevice.isOkay()||!mMIDIDevice->hasDevice())return false; + mMIDIDevice->closeDevice(); + if(isInOutline()&&!keepOutline()) + { + isInOutline(false); + clearUpdate(); + } + mParent->releaseCapture(); + setStatusText(" "); + return false; +} + +CallbackData::ReturnType TabPage::mouseMoveHandler(CallbackData &someCallbackData) +{ + int entryIndex; + Rect outlineRect; + Rect clientRect; + + GlobalDefs::outDebug("[TabPage::mouseMoveHandler]",GlobalDefs::Verbose); + if(isInPlay())return false; +// user is free-playing + Point mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mParent->clientRect(clientRect); + if(!clientRect.ptInRect(mousePoint)) // user glides off the tab window + { + mParent->releaseCapture(); + if(isInOutline()) // are we in an outline?? + { + clearUpdate(); // if so, clear the outline rectangle + isInOutline(false); // we're no longer outlining + } + return false; // return + } + if(!hasFocus()) // we're within the window, but we don't have focus + { + if(isInOutline()) // are we outlining a rectangle?? + { + clearUpdate(); // if so, clear the update + isInOutline(false); // we're no longer outlining + } + return false; // we're done with this mouse movement + } + mousePoint.x(mousePoint.x()+mScrollInfo.currScrollx()); + mousePoint.y(mousePoint.y()+mScrollInfo.currScrolly()); + if(getOutlineRect(mousePoint,entryIndex,outlineRect)) + { + isInOutline(true); + mParent->enableCut(true); + mParent->enableCopy(true); + mCurrEntryIndex=entryIndex; + bringOutlineIntoView(outlineRect,clientRect); + if(this->outlineRect(outlineRect)) + { + TabEntry &entry=mTabEntries[entryIndex]; + showFretEntry(entry); + entry.play(mMIDIDevice->getDevice(),false); + } + } + else if(isInOutline()) + { + isInOutline(false); + clearUpdate(); + } + return false; +} + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(Space==keyData.virtualKey()) + { + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Enter==keyData.virtualKey()) + { + modifyProperties(); + } + else if(keyData.shiftKeyPressed()&&Enter==keyData.virtualKey()) + { +// modifyProperties(); + } + else if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + setCursorToTab(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + setCursorToTab(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + setCursorToTab(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + clearUpdate(); + showCurrent(); + setCursorToTab(); + } + return false; +} + diff --git a/guitar/tabpage.hpp b/guitar/tabpage.hpp new file mode 100644 index 0000000..862dad6 --- /dev/null +++ b/guitar/tabpage.hpp @@ -0,0 +1,398 @@ +#ifndef _GUITAR_TABPAGE_HPP_ +#define _GUITAR_TABPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _GUITAR_SCROLLINFO_HPP_ +#include +#endif +#ifndef _GUITAR_TABENTRY_HPP_ +#include +#endif +#ifndef _GUITAR_SEQUENCER_HPP_ +#include +#endif +#ifndef _GUITAR_RANGE_HPP_ +#include +#endif +#ifndef _GUITAR_GLOBALDEFS_HPP_ +#include +#endif + +class GUIWindow; +class ViewWindow; + +class TabPage +{ +public: + TabPage(ViewWindow &parent); + virtual ~TabPage(); + bool insert(const TabEntries &entries,bool setDirty=true); + bool insert(const TabEntry &entry,bool setDirty=true); + bool insert(const TabRanges &ranges,bool setDirty=true); + bool update(GUIWindow &guiWindow); + bool play(void); + bool playRange(int rangeIndex); + bool playFromCurrent(void); + void cut(void); + void copy(void); + bool paste(void); + bool modifyProperties(void); + bool increaseTempo(void); + bool decreaseTempo(void); + bool getCancelled(void)const; + void setCancelled(bool cancelled); + bool isInPlay(void)const; + bool isPaused(void)const; + int getWidth(void)const; + int getHeight(void)const; + const TabEntries &getEntries(void)const; + const TabRanges &getRanges(void)const; + void setRanges(const TabRanges &ranges); + bool hasRange(void)const; + void setPlayNoteHandler(CallbackPointer &callbackPointer); + void setStartRange(void); + void setEndRange(void); + bool isDirty(void)const; + void isDirty(bool isDirty); + bool isInOutline(void)const; + bool isInSetRange(void)const; + void isInSetRange(bool isInSetRange); + void setStatusControlRef(SmartPointer &statusBar); + bool isOkay(void)const; +private: + enum {BkColorBits=255,TabLineColor=0}; + enum {LeftMargin=10,RightMargin=10,TopMargin=10,TabLines=6,TabSpacing=10,TabHeight=TabLines*TabSpacing, + TabSeparator=20,CharSpacing=3,TabClearance=3,MinCharWidth=16}; + enum {RightArrow=0x27,LeftArrow=0x25,DownArrow=0x28,UpArrow=0x26,Insert=0x2D,Home=0x24,End=0x23,Delete=0x2E,Space=0x20,Enter=0x0D}; + enum {PenWidth=1}; + TabPage(const TabPage &someTabPage); + TabPage &operator=(const TabPage &someTabPage); + int drawTab(int marginLeft,int marginRight,int xPos,int yPos,int spacing,int lineCount); + void getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const; + void bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + void bringOutlineIntoView(const Rect &outlineRect,const Rect &clientRect); + bool drawEntry(int entryIndex,const RGBColor &rgbColor=RGBColor(0,0,0)); + bool getOutlineRect(Point mousePoint,int &entryIndex,Rect &outlineRect); + bool getNearestString(const Point &clickPoint,int &nearestString); + bool drawEntries(const RGBColor &rgbColor=RGBColor(0,0,0)); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool getOutlineRect(int entryIndex,Rect &outlineRect); + int getWidestEntry(PureDevice &pureDevice)const; + bool getFretEntry(int selectedString=0); + bool createBitmap(GUIWindow &someGUIWindow); + bool outlineRect(const Rect &outlineRect); + Point getEntryPoint(int entryIndex); + bool drawTabPage(void); + void setItemsPerTab(int itemsPerTab); + void setNumTabs(int numTabs); + void setCharWidth(int charWidth); + int getNumEntries(void)const; + int getNumTabs(void)const; + int getItemsPerTab(void)const; + int getCharWidth(void)const; + void invalidate(Rect rect); + void isInOutline(bool isInOutline); + bool clearUpdate(void); + bool hasFocus(void)const; + void hasFocus(bool hasFocus); + void isInPlay(bool isInPlay); + void isPaused(bool isPaused); + void showFretEntry(const TabEntry &entry); + void setStatusText(const String &statusText); + void keepOutline(bool keepOutline); + bool keepOutline(void)const; + bool showCurrent(void); + void setCursorToTab(void); + + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType killFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mKillFocusHandler; + Callback mSetFocusHandler; + Callback mLeftButtonDoubleHandler; + Callback mKeyDownHandler; + + CallbackPointer mPlayNoteHandler; + TabEntries mTabEntries; + TabRanges mTabRanges; + SmartPointer mDIBitmap; + SmartPointer mOverlay; + SmartPointer mParent; + SmartPointer mMIDIDevice; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + + Rect mPrevOutlineRect; + Pen mOutlinePen; + int mNumTabs; + int mItemsPerTab; + int mCharWidth; + + bool mIsInOutline; + bool mHasFocus; + bool mIsCancelled; + bool mIsInPlay; + bool mIsPaused; + bool mIsDirty; + bool mKeepOutline; + + bool mIsInSetRange; + Range mCurrRange; + int mCurrEntryIndex; + Font mDrawFont; +}; + +inline +TabPage &TabPage::operator=(const TabPage &/*someTabPage*/) +{ // private implementation + return *this; +} + +inline +int TabPage::getNumEntries(void)const +{ + return mTabEntries.size(); +} + +inline +void TabPage::getEntryExtents(PureDevice &pureDevice,SIZE &sizeStruct,const String &string)const +{ + pureDevice.getTextExtentPoint32(((String&)string).str(),&sizeStruct); +} + +inline +int TabPage::getWidth(void)const +{ + return ((SmartPointer&)mDIBitmap)->width(); +} + +inline +int TabPage::getHeight(void)const +{ + return ((SmartPointer&)mDIBitmap)->height(); +} + +inline +int TabPage::getNumTabs(void)const +{ + return mNumTabs; +} + +inline +void TabPage::setNumTabs(int numTabs) +{ + mNumTabs=numTabs; +} + +inline +int TabPage::getCharWidth(void)const +{ + return mCharWidth; +} + +inline +void TabPage::setCharWidth(int charWidth) +{ + mCharWidth=charWidth; +} + +inline +int TabPage::getItemsPerTab(void)const +{ + return mItemsPerTab; +} + +inline +void TabPage::setItemsPerTab(int itemsPerTab) +{ + mItemsPerTab=itemsPerTab; +} + +inline +void TabPage::isInOutline(bool isInOutline) +{ + mIsInOutline=isInOutline; +} + +inline +bool TabPage::isInOutline(void)const +{ + return mIsInOutline; +} + +inline +bool TabPage::hasFocus(void)const +{ + return mHasFocus; +} + +inline +void TabPage::hasFocus(bool hasFocus) +{ + mHasFocus=hasFocus; +} + +inline +bool TabPage::getCancelled(void)const +{ + return mIsCancelled; +} + +inline +void TabPage::setCancelled(bool cancelled) +{ + mIsCancelled=cancelled; +} + +inline +bool TabPage::isInPlay(void)const +{ + return mIsInPlay; +} + +inline +void TabPage::isInPlay(bool isInPlay) +{ + mIsInPlay=isInPlay; +} + +inline +bool TabPage::isPaused(void)const +{ + return mIsPaused; +} + +inline +void TabPage::isPaused(bool isPaused) +{ + mIsPaused=isPaused; +} + +inline +void TabPage::setPlayNoteHandler(CallbackPointer &callbackPointer) +{ + mPlayNoteHandler=callbackPointer; +} + +inline +const TabEntries &TabPage::getEntries(void)const +{ + return mTabEntries; +} + +inline +const TabRanges &TabPage::getRanges(void)const +{ + return mTabRanges; +} + +inline +bool TabPage::hasRange(void)const +{ + return mTabRanges.size()?true:false; +} + +inline +bool TabPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void TabPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +void TabPage::keepOutline(bool keepOutline) +{ + GlobalDefs::outDebug(String("[TabPage::keepOutline]")+(keepOutline?String("true"):String("false")),GlobalDefs::Debug); + mKeepOutline=keepOutline; +} + +inline +bool TabPage::keepOutline(void)const +{ + return mKeepOutline; +} + +inline +bool TabPage::isInSetRange(void)const +{ + return mIsInSetRange; +} + +inline +void TabPage::isInSetRange(bool isInSetRange) +{ + mIsInSetRange=isInSetRange; +} + +inline +void TabPage::setRanges(const TabRanges &ranges) +{ + mTabRanges=ranges; + isDirty(true); +} + +inline +void TabPage::setStatusText(const String &statusText) +{ + if(!mStatusBar.isOkay())return; + mStatusBar->setText(statusText); +} + +inline +void TabPage::setStatusControlRef(SmartPointer &statusBar) +{ + mStatusBar=statusBar; +} + +inline +bool TabPage::isOkay(void)const +{ + return mTabEntries.size()&&mDIBitmap.isOkay(); +} +#endif \ No newline at end of file diff --git a/guitar/tabs/Al Dimeola/Al Dimela arpeggios.prj b/guitar/tabs/Al Dimeola/Al Dimela arpeggios.prj new file mode 100644 index 0000000..81ea1ef --- /dev/null +++ b/guitar/tabs/Al Dimeola/Al Dimela arpeggios.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=Al Dimela arpeggios.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,4)(36,8)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,4)(46,8)(47,16) +RANGE=0;16;study 1 diff --git a/guitar/tabs/Al Dimeola/Al Dimela arpeggios.tab b/guitar/tabs/Al Dimeola/Al Dimela arpeggios.tab new file mode 100644 index 0000000..ce524ff --- /dev/null +++ b/guitar/tabs/Al Dimeola/Al Dimela arpeggios.tab @@ -0,0 +1,25 @@ +Al Dimela arpeggios + + + +This is the opening riff from AL Dimeola's "Mediterranean Sundance," as heard on Friday Night in San Francisco. Enjoy! + + +Key = Em + + + E |--0---0---0---0----0--0--0---0-|---------000-----------000--------| + B |-1---1---1-1-1-1--1--1--1-1-1-1|---0-----000-----0-----000--------| + G |4---2--0----2----4--2--0---2---|--0-0----999----0-0----999--------| + D |-------------------------------|-4---4---999---4---4---999--------| + A |-------------------------------|2-----2--777--2-----2--777--------| + E |-------------------------------|-------0-------------0------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + +o \ No newline at end of file diff --git a/guitar/tabs/Al Dimeola/Al Dimeola - ROLLER JUBILEE.prj b/guitar/tabs/Al Dimeola/Al Dimeola - ROLLER JUBILEE.prj new file mode 100644 index 0000000..1255b2f --- /dev/null +++ b/guitar/tabs/Al Dimeola/Al Dimeola - ROLLER JUBILEE.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=Al Dimeola - ROLLER JUBILEE.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16) +TEMPO=651578 diff --git a/guitar/tabs/Al Dimeola/Al Dimeola - ROLLER JUBILEE.tab b/guitar/tabs/Al Dimeola/Al Dimeola - ROLLER JUBILEE.tab new file mode 100644 index 0000000..d015346 --- /dev/null +++ b/guitar/tabs/Al Dimeola/Al Dimeola - ROLLER JUBILEE.tab @@ -0,0 +1,65 @@ + + AL DI MEOLA + SPLENDIDO HOTEL + ROLLER JUBILEE + transcribed by: VVV + VVV's E-mail is vokkolainen@hotmail.com + + + you could have more of my tablatures in ULTIMATE TABLATURE PAGE. + we have tablatures of all those bands that you know so visit to us + in INTERNET our address in + come/to.tabs + or if you can't find it that way you might go in altavista or yahoo and + search us as the ultimate tablature page + + HAPPY JAMMINGS. + + this tab contains only the basic things of this song. + OK.here it comes + + + I---------------------10-I----10----10-----------------I----10----10-------------I + I------------10-11-13----I-13----13----13---11--10--11-I-13----13----13-11-10-11-I + I----9-10-12-------------I-----------------------------I-------------------------I + I-12---------------------I-----------------------------I-------------------------I + I------------------------I-----------------------------I-------------------------I + I------------------------I-----------------------------I-------------------------I + + 2\ + I------------II-----------------------------------I-----------------------II + I-13---------II----------10-11-10-----------10----I-----------------10----II + I----10-10---II----10-12----------12---12------10-I-12-12b-10----12----10-II + I------------II-12--------------------------------I-----------12----------II + I------------II-----------------------------------I-----------------------II + I------------II-----------------------------------I-----------------------II + + + I------I------------------------I-----------------------I + I-13---I-13---11---10-----------I-----------------------I + I------I----------------12-10---I-12---10---9-----------I + I------I------------------------I---------------12-10---I + I------I------------------------I-----------------------I + I------I------------------------I-----------------------I + + + I----------------------I-----------------I----------------I---------------I + I-13-11-10-------10----I----------13-9---I-13-11-10-------I---------------I + I----------12-12----10-I----10-12--------I----------12-10-I-12-10-9-------I + I----------------------I-10--------------I----------------I---------12-10-I + I----------------------I-----------------I----------------I---------------I + I----------------------I-----------------I----------------I---------------I + + + I----------------------I-------------10---I---I---I-13------------------I + I-13-11-10-------10----I----------13------I---I---I---------------------I + I----------12-12----10-I----10-12---------I---I---I---------------------I + I----------------------I-10---------------I---I---I---------------------I + I----------------------I------------------I---I---I---------------------I + I----------------------I------------------I---I---I---------------------I + + thank you to downloading this AL DI MEOLA TABLATURE. + + + + diff --git a/guitar/tabs/Al Dimeola/Al Dimeola - bianca_midnight_lullaby.tab b/guitar/tabs/Al Dimeola/Al Dimeola - bianca_midnight_lullaby.tab new file mode 100644 index 0000000..efa041c --- /dev/null +++ b/guitar/tabs/Al Dimeola/Al Dimeola - bianca_midnight_lullaby.tab @@ -0,0 +1,47 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +AL DiMEOLA +BIANCA'S MIDNIGHT LULLABY +(AL DiMEOLA GREATEST HITS) + +E--5-7-/9--\12--7--5-7-9-12-17--16-14-12-12---5-4-5-2-4-0------------------ +B--5---------------5--------------------------------------2-3-5-5-3-2-2-0-0 +G--6---------------6------------------------------------------------------- + +E---------------5-7-/9--\12--7--5-7-9-12-17--16-14-12-12 +B-0-------------5---------------5----------------------- +G--1------------6---------------6----------------------- +D---2-1-0-7-7------------------------------------------- + +E-5-4-5-2-4-0------------------------------- +B-------------2-3-5-5-3-2-2-0-0--0---------- +G---------------------------------1--------- +D----------------------------------2-1-0-7-7 + +Partialy muted part : +E--7-5-4-7-16-12-17--7-5-4-7-16-12-------------5-7-9-12-14-12-12 +B----------------------------------9-7-5-3-2-5------------------ +G--------------------------------------------------------------- + +E--7-5-4-7-16-12-17--7-5-4-7-16-12-------------5-7-9-12-7-5-5--- +B----------------------------------9-7-5-3-2-5------------------ +G--------------------------------------------------------------- + +Back to start : +E--5-7-/9--\12--7--5-7-9-12-17--16-14-12-12---5-4-5-2-4-0------------------ +B--5---------------5--------------------------------------2-3-5-5-3-2-2-0-0 +G--6---------------6------------------------------------------------------- + +Playing a bit slower: +E------------- +B-0----------- +G--1---------- +D---2-1-0-7-7- + +That's my transcription of Al DiMeola's Bianca's Midnight Lullaby from Greatest +Hits. Sorry, but it was too difficult for me to figure out the second guitar. + +If you find any errors,etc.. contact me at polony@bb.sanet.sk (V.A.Polony) + \ No newline at end of file diff --git a/guitar/tabs/Al Dimeola/mediterraneansundance.prj b/guitar/tabs/Al Dimeola/mediterraneansundance.prj new file mode 100644 index 0000000..0dc5965 --- /dev/null +++ b/guitar/tabs/Al Dimeola/mediterraneansundance.prj @@ -0,0 +1,6 @@ +WINTABV1.00 +TABLATURE=mediterraneansundance.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,4)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,16)(62,16)(63,16)(64,16)(65,8)(66,16)(67,16)(68,16)(69,16)(70,8)(71,16)(72,16)(73,16)(74,16)(75,8)(76,16)(77,16)(78,16)(79,8)(80,8)(81,16)(82,16)(83,16)(84,16)(85,8)(86,16)(87,16)(88,16)(89,16)(90,8)(91,16)(92,16)(93,16)(94,16)(95,8)(96,8)(97,8)(98,8)(99,8)(100,16)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,16)(120,16)(121,16)(122,16)(123,8)(124,16)(125,16)(126,16)(127,16)(128,8)(129,16)(130,16)(131,16)(132,16)(133,8)(134,8)(135,8)(136,4)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16)(794,16)(795,16)(796,16)(797,16)(798,16)(799,16)(800,16)(801,16)(802,16)(803,16)(804,16)(805,16)(806,16)(807,16)(808,16)(809,16)(810,16)(811,16)(812,16)(813,16)(814,16)(815,16)(816,16)(817,16)(818,16)(819,16)(820,16)(821,16)(822,16)(823,16)(824,16)(825,16)(826,16)(827,16)(828,16)(829,16)(830,16)(831,16)(832,16)(833,16)(834,16)(835,16)(836,16)(837,16)(838,16)(839,16)(840,16)(841,16)(842,16)(843,16)(844,16)(845,16)(846,16)(847,16)(848,16)(849,16)(850,16)(851,16)(852,16)(853,16)(854,16)(855,16)(856,16)(857,16)(858,16)(859,16)(860,16)(861,16)(862,16)(863,16)(864,16)(865,16)(866,16)(867,16)(868,16)(869,16)(870,16)(871,16)(872,16)(873,16)(874,16)(875,16)(876,16)(877,16)(878,16)(879,16)(880,16)(881,16)(882,16)(883,16)(884,16)(885,16)(886,16)(887,16)(888,16)(889,16)(890,16)(891,16)(892,16)(893,16)(894,16)(895,16)(896,16)(897,16)(898,16)(899,16)(900,16)(901,16)(902,16)(903,16)(904,16)(905,16)(906,16)(907,16)(908,16)(909,16)(910,16)(911,16)(912,16)(913,16)(914,16)(915,16)(916,16)(917,16)(918,16)(919,16)(920,16)(921,16)(922,16)(923,16)(924,16)(925,16)(926,16)(927,16)(928,16)(929,16)(930,16)(931,16)(932,16)(933,16)(934,16)(935,16)(936,16)(937,16)(938,16)(939,16)(940,16)(941,16)(942,16)(943,16)(944,16)(945,16)(946,16)(947,16)(948,16)(949,16)(950,16)(951,16)(952,16)(953,16)(954,16)(955,16)(956,16)(957,16)(958,16)(959,16)(960,16)(961,16)(962,16)(963,16)(964,16)(965,16)(966,16)(967,16)(968,16)(969,16)(970,16)(971,16)(972,16)(973,16)(974,16)(975,16)(976,16)(977,16)(978,16)(979,16)(980,16)(981,16)(982,16)(983,16)(984,16)(985,16)(986,16)(987,16)(988,16)(989,16)(990,16)(991,16)(992,16)(993,16)(994,16)(995,16)(996,16)(997,16)(998,16)(999,16)(1000,16)(1001,16)(1002,16)(1003,16)(1004,16)(1005,16)(1006,16)(1007,16)(1008,16)(1009,16)(1010,16)(1011,16)(1012,16)(1013,16)(1014,16)(1015,16)(1016,16)(1017,16)(1018,16)(1019,16)(1020,16)(1021,16)(1022,16)(1023,16)(1024,16)(1025,16)(1026,16)(1027,16)(1028,16)(1029,16)(1030,16)(1031,16)(1032,16)(1033,16)(1034,16)(1035,16)(1036,16)(1037,16)(1038,16)(1039,16)(1040,16)(1041,16)(1042,16)(1043,16)(1044,16)(1045,16)(1046,16)(1047,16)(1048,16)(1049,16)(1050,16)(1051,16)(1052,16)(1053,16)(1054,16)(1055,16)(1056,16)(1057,16)(1058,16)(1059,16)(1060,16)(1061,16)(1062,16)(1063,16)(1064,16)(1065,16)(1066,16)(1067,16)(1068,16)(1069,16)(1070,16)(1071,16)(1072,16)(1073,16)(1074,16)(1075,16) +RANGE=0;36;RANGE_0_36 +RANGE=37;136;RANGE_37_136 +RANGE=137;1075;RANGE_137_1075 diff --git a/guitar/tabs/Al Dimeola/mediterraneansundance.tab b/guitar/tabs/Al Dimeola/mediterraneansundance.tab new file mode 100644 index 0000000..82f9eff --- /dev/null +++ b/guitar/tabs/Al Dimeola/mediterraneansundance.tab @@ -0,0 +1,458 @@ + + +Archive Browser + +/main / d / dimeola_al / mediterranean_sundance.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +~From: ebshen@athena.mit.edu (Eric B Shen) + +This is my transcription of Al DiMeola's _Mediterranean Sundance_, an +acoustic duet with Paco Delucia off of the album _Elegant Gypsy_. Al +plays on the right channel, and Paco plays on the left channel. Paco +picks finger-style, while Al uses a pick. + +Some notes: + +I have only transcribed Al's parts, as I got tired of transcribing this +monster. (Paco's rhythm parts would be very difficult to transcribe +note for note, as he plays more intricate finger-style parts than Al) + +Apparently, an incomplete transcription of this piece exists (from an +old magazine). I have not seen it, and therefore have not had the +opportunity to refer to it. + +Al's playing is very fast and very clean. Amazing, especially beacause +he is doing it on a steel-strung acoustic. He may be playing +certain phrases in different positions, but the ones I notated are the +most likely. The transcription is broken up roughly by phrasing. + +Though I have not transcribed any of Paco's parts, there are only two +basic chord progresssions in the entire piece. Em D C B7, and Am Bm7 +(Bbm7) Am7 B7. Paco uses the Bbm7 to approach the Am7 from the Bm7 when +he is playing in the upper positions, a very common jazz-thing. + +This piece is ideal for a duet. One player can jam out the chords, +while the other solos, and the players can switch around. It would be +kind of silly to try to recreate this piece note for note, don't you +think? Otherwise, Al's leads are good scalar exercises for building up +your acoustic chops. + +============================================================================ +Transcription notation: + +h - hammer on + +p - pull off + +/ - slide up + +\ - slide down + +~ - vibrato + +muted - palm mute + +strum - strum the preceding chord + +random comments are located throughout the transcription +============================================================================ +Mediterranean Sundance (any comments please email ebshen@athena.mit.edu) + + +A: +|---0--0--0----0----0--0--0----0-----------0-|------------------------------ +|--1--1--1----1-1--1--1--1----1-1----0-----0-|------------------------------ +|-4--2--0--0h2----4--2--0--0h2------0-0------|-(repeat A 2nd time muted)--- +|----------------------------------4---4---2-|------------------------------ +|---------------------------------2-----2--2-|------------------------------ +|----------------------------------------0-0-|------------------------------ + + + +B: +|---------10--12\------12-10-7-10-7-----7-7-7-5-3-5-3-2-2-----2-3-5-3-2----- +|--8-10/12--12-------8-10--8-5--8-5-----5-5-5-3-1-3-1-0-0------------------- +|-9-9---------------9------------------------------------------------------- +|-------------------------------------------------------------(fast)-------- +|----------------------|-muted----|-----|---let ring----|------------------- +|--------------------------------------------------------------------------- + + + + +-----------2-3-5-3-2-----------2-3-5-3-2-----------2-3-5-3-2---------|------ +-4-5-7-5-4-----------5-4-5/7-7-----------4-5-7-5-4-----------5-4-5-5-|------ +---------------------------------------------------------------------|------ +---------------------------------------------------------------------|------ +---------------------------------------------------------------------|------ +---------------------------------------------------------------------|------ + + + + +------------|--7-8-10-8-7------------7-8-10-8-7---------------7-8-10-8-7---- +------------|-------------7-8-10-8-7------------10-8-10/12-12--------------- +-(repeat B)-|--------------------------------------------------------------- +------------|--(fast)------------------------------------------------------- +------------|--------------------------------------------------------------- +------------|--------------------------------------------------------------- + + + + +------------7-8-10-8-7--------||-------------------------------------------- +-7-8-10-8-7------------8-7-5~-||-------------------------------------------- +------------------------------||---(end of the intro)----------------------- +------------------------------||-------------------------------------------- +------------------------------||-------------------------------------------- +------------------------------||-------------------------------------------- + + + +DiMeola's Lead, Paco plays essentially Am Bm7 (Bbm7) Am7 B7 +|--------------------------------------------------------------------------- +|---7---8---10---12-----13p12-10h12-10-8-8h10-8h10-8-8h10-8-8h10-8---------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|-|-tremelo-picking-|------------------------------------------------------- +|--------------------------------------------------------------------------- + + + + +-----------------------------------------------|--------5-7-8-7-5---7-5----- +-8p7-8p7-8p7-8p7--7-7\5-5----5-5-5-5-5-5/7-7~--|--5-7-8-----------8-----8-7- +-----------------------------------------------|---------------------------- +-----------------------------------------------|---------------------------- +-----------------------------------------------|--(fast)-------------------- +-----------------------------------------------|---------------------------- + + + + +-5----------------------------------------------------------|--------------- +---8-7-5-8-7-5----------------------------------------------|--------------- +---------------7-5---4-----------------------4-5-4---4-5-4--|----------5-7-- +-------------------7---5-7-4-5---4-----4-5-7-------7--------|--4/5-7-9------ +-------------------------------7---5-7----------------------|--------------- +-----------------------------------------------(slower)-----|--(fast)------- + + + + +--------------------7-------------7-10-8-7----8-7-------------7-8-10--10---- +-------7---8-7-10-8---10-8-7-8-10----------10-----10-8-7-8-10--------------- +-9-7-9---9------------------------------------------------------------------ +--------------------------------------------------------------------(slower) +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + + +-10/12-12-12/14-14-14/15-15-15\14-14-14-14\12-12-12-12\10-10-10-10\8-8-8\7-- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + + +-7-7/8-7-7-5-5/7-7--|--------5-7-8-7-5---7-5-----5-------------------------- +--------------------|--5-7-8-----------8-----8-7---8-7-5-8-7-5-------------- +--------------------|------------------------------------------7-5-4-7-5-4-- +--------------------|------------------------------------------------------7 +--------------------|--(fast)----------------------------------------------- +--------------------|------------------------------------------------------- + + + + Paco plays Em D C B7 +--------------------------------------------------------|-----------12-14-15 +--------------------------------------------------------|--12-13-15--------- +-5-4-----4----------------------------------------------|------------------- +-----7-5---7-5-4-7-5-4----------------------------------|--(fast and muted)- +-----------------------7-5-3-2-0-2-0-2-0-------0-2-0-2--|------------------- +-----------------------------------------3-2-3----------|------------------- + + + + +-14-12-14-12-14-12--|-----------12-14-12-14-12----12-----|-----------12-14-- +--------------------|--12-13-15----------------15----15--|--12-13-15-------- +--------------------|------------------------------------|------------------ +-------(slower)-----|--(fast and muted)--(slower)--------|--(fast)---------- +--------------------|------------------------------------|------------------ +--------------------|------------------------------------|------------------ + + + + +-15-14-12----14-12-------12------------------------------------------------- +----------15-------15-13----15-13-12-15-13-12------------------------------- +----------------------------------------------14-12-11-14-12-11-9-12-11-9--- +--------------------------------------------------------------------------12 +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-11-9-------9--------------------------------------------------------------- +------12-10---12-10-9-12-10-9----10-9-------9---------------9-10-12-9-10-12- +------------------------------12------12-10---12-10-9-10-12----------------- +---------------------------------------------------------------------------- + + + + +--------------------------10-|-12-10-------10------------------------------- +-----------------10-12-13----|-------13-12----13-12-10-13-12-10----12-10---- +-9-11-12-9-11-12-------------|----------------------------------12-------12- +-----------------------------|---------------------------------------------- +-----------------------------|-(still fast)--------------------------------- +-----------------------------|---------------------------------------------- + + + + +-----------------7-8-7-------------7-8-10-8-7------------------------------- +----10---------8-------10-8-7-8-10------------10-8-7-10-8-7----------------- +-11----12-11-9----------------------------------------------9-7------------- +----------------------------------------------------------------10-9-7-10-9- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + + +---------------------------------7-8-7-----------------------|-------------- +--------------------------7-8-10-------10-8-7~---7-8-7-------|---7-7-------- +----------------------7-9----------------------9-------9-8~--|-9-----9-9---- +-7-------------7-9-10----------------------------------------|-------------- +---10-9-7-9-10-------------------(slower)--------------------|-(slow)------- +-------------------------------------------------------------|-------------- + + + + +-7\--7h8-7-------12\--12-12-10-12-10-8-10-8-7-8-7----7-7----7---7-7----7-7-- +-7\--------10-10-12\------------------------------10-----10---------10------ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + + +----7-7-------------7-8-10-8-7------7--------------------------------------- +-10-----10-8-7-8-10------------10-8---10-8-7-10-8-7------------------------- +----------------------------------------------------9-7-5-4----------------- +------------------------------------------------------------7-5-4----------- +------------------------------------------------------------------7-5-3-2-0- +---------------------------------------------------------------------------- + + + + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------2-0-------0-2-4-5-4------------------ +-2-0-------0-2-0-------0-2-3-5-3-2-0-------3-2-3-------------5-3-2-5-3-2-0-- +-----3-2-3-------3-2-3---------------3---------------------3---------------- + + + + +-----------------------------------------------------------||--------------- +-----------------------------------------------------------||----end-of----- +-----------------------------------------------------------||--------------- +-----------------------------------------------------------||----DiMeola's-- +-3-2-0---2-0-------0-2-3-5-3-2-0---------------------------||--------------- +-------3-----3-2-3---------------2h3-2-2~-3-3~-2-2-3-3-2-2-||----lead------- + + + +DiMeola's rhythm Em D C B7 (but he actually doesn't play the thirds) +|------------------------------------------|-------------------------------- +|------------------------------------------|-------------------------------- +|---------9---7----------5---------4-------|--9---------7-----------5--4--5- +|---------9---7(strum)---5(strum)--4(strum)|--9(strum)--7(strum)---5-5--5--5 +|---------7---5----------3---------2-------|--7---------5---------3---3--3-- +|-0-0-0-0-0--------------------------------|-------------------------------- + + + + +----------------------|----------------------------------------------------- +----------------------|-----------------------------------------------0----- +--4-----0-0---0---0---|--9---------7---------5-----------5---0--0--0---0---0 +---5---4---4-4-4-4-4--|--9(strum)--7(strum)--5(strum)---5-5-4-4--4--4---4-4- +-3--3-2-----2---2---2-|--7---------5---------3---------3---2---2--2--2---2-- +----------------------|----------------------------------------------------- + + + + +|---------(rhthmically strumming now)--(something like this...)------------| +|--------------------------------------------------------------------------| +|---------9---------7--------5---------4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-| +|---------9(strum)--7(strum)-5(strum)--4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-| +|---------7---------5--------3---------2-2-2-2-0-0-2-2-2-2-2-2-0-2-3-2-0-2-| +|-0-0-0-0------------------------------------------------------------------| + + + + +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-9-9-9---------------0--0---0------------|--------------------------7-5-7--- +-9-9-9-7-7-7-5-5-5--4--4-4-4-4-----------|---------------------------7-7-7-- +-7-7-7-5-5-5-3-3-3-2--2---2---2-0-0-0-0--|--------7-7-7-7-7-5-5-5-5-------5- +-----------------------------------------|--0-0-0---0-0-0-0----------------- + + + + +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-----5---5---5-4-2-------------------------------------|----------9--------- +---5--5-5-5-5------5-4-2-------------------------------|----------9(strum)-- +-3-3---3---3-------------5-3-2-----------2-0-2-0-2-3-2-|----------7--------- +-------------------------------5-3-2-3-5---------------|--0-0-0-0----------- + + + + +-------------------------------------|-------------------------------------- +-----------------------0--0----------|-------------------------------------- +-7---------5------------0--0--0---0--|----------9--------5-7-5-4------------ +-7(strum)--5(strum)---4-----4--4-4-4-|----------9(strum)---------7-5-4---4-5 +-5---------3---------2---2---2--2----|----------7----------------------7---- +-------------------------------------|--0-0-0-0----------------------------- + + + + +-----------------------------------------------------------|--------0------- +-----------------------------------------------------------|--------0------- +-----------5---------5---5----5-4-2------------------------|---------------- +-4---------5(strum)---5-5-----------5-4-2------------------|--------2------- +---7-5-0-3-3-----------3--3-5-------------5-3-2-0------0-2-|--------2------- +-------------------------------------------------3-2-3-----|--0-0-0-0------- + + + + +---------------------------------------------------------------------------- +------------------------------------------------------------------------0--- +-7---------------4-5-7-5-4---5-4-----4-----------------5-5-5---5---5---0-0-- +-7(strum)--4-5-7-----------7-----7-5---7-5-4-7-5-4-----5-5--5-5-5-5---4---4- +-5-------------------------------------------------7-5-3-3---3---3---2-----2 +---------------------------------------------------------------------------- + + + + +-----------------|---------------------------------------------------------- +-----------------|---------------------------------------------------------- +--0--5-4-2-------|-----------------------------------------------------5-7-9 +-4-4-------5-4-2-|-2-2-2-(etc.)--0-0-0-(etc.)--------------5-7---5-7-9------ +-----------------|-----------------------------------5-7-9-----9------------ +-----------------|-----------------------------5-7-9------------------------ + + + + +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-7-5-4----------5-4-2----------------------------------|----------9--------- +-------5-5-5-5--------5-4-2----------------------------|----------9(strum)-- +-------3-3-3-3-0------------5-3-2-0------------2-3-2---|----------7--------- +------------------------------------3-2--2-3-5-------0-|--0-0-0-0----------- + + + + +------------------------------------------------------------------7--------- +-----------------------------------------------------7---8-7-10-8---10-8-7-8 +-(knock on guitar body)--7-----------------5-7-9-7-9---9-------------------- +-------------------------7(strum)--4/5-7-9---------------------------------- +-------------------------5-------------------------------------------------- +---------------------------------------------------------------------------- + + + + +----7-8-10-8-7----8-7------7-------------7--7-----7-7-7-7-7-8-8-8-8-8------- +-10------------10-----10-8---10-8-7-8-10------------------------------------ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + + +---10--/----14-------12-----15---14---12-----------------12----------------- +------------------------------------------------------15----15-13-12-------- +--(tremelo picking)------|play ten times very fast|------------------14-12-- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-11--11-----11---11-11-11-11-----11---11-11-11--12--11-9-7------------------ +-----------------------------------------------------------10-9-7----------- +------------------------------------------------------------------10-9-7---- +---------------------------------------------------------------------------- + + + + +------------------------|-(very fast constant strumming)----------|--------- +------------------------|-----------------------------------------|--------- +------------------------|-9---------7---------5---------4---------|--------- +---------------9--------|-9(strum)--7(strum)--5(strum)--4(strum)--|--------- +---------------9(strum)-|-7---------5---------3---------2---------|--------- +-10-8-7-10-8-7-7--------|-----------------------------------------|--------- + + + + +(fast constant strumming)----------------|--------------------------------|| +-----------------------------------------|--------------------------------|| +-9---------7---------5---------4---------|--------------------------------|| +-9(strum)--7(strum)--5(strum)--4(strum)--|--play intro, without A, to end-|| +-7---------5---------3---------2---------|--------------------------------|| +-----------------------------------------|--------------------------------|| + + + + + + + + + + + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Al Dimeola/sarabande.prj b/guitar/tabs/Al Dimeola/sarabande.prj new file mode 100644 index 0000000..d4738a5 --- /dev/null +++ b/guitar/tabs/Al Dimeola/sarabande.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=sarabande.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8) diff --git a/guitar/tabs/Al Dimeola/sarabande.tab b/guitar/tabs/Al Dimeola/sarabande.tab new file mode 100644 index 0000000..06f2ef5 --- /dev/null +++ b/guitar/tabs/Al Dimeola/sarabande.tab @@ -0,0 +1,43 @@ +Sarabande (old Spanish dance of a grave character) +(Speed=3D3D72) +e||-2---------|----------|--------------|----------|------------| 3 = +B||-3--8-7-5--|-7-9-7-6--|---5-3p2-3p0--|----------|-0----------| T / = +G||----7-6----|-7--------|-4------------|-4--------|---2--------| A 4 = +D||-4----7----|-0--------|-5---2---3----|-5-7-5-4--|-4-2-5p4h5--| B = +A||-2--7-0----|----------|--------------|----------|-5-4-2------| = +E||-----------|----------|--------------|----------|------------| + Repeat 1 Repeat 2 +e|--------|--------------|-2-------:|---2-------|:-6-6-6--|-----7-5-4----= | +B|-2-3-5--|-3-2-5-3------|-2-------:|---2-------|:--------|---7-------7--= | +G|-0------|---------6-4--|---------:|-----------|:-6-6-6--|-4------------= | +D|-----4--|-4---5--------|-4-------:|---4-------|:-4-2-4--|-0------------= | +A|-0------|-2------------|---7-5-4-:|-----------|:--------|--------------= | +E|-----6--|--------------|---------:|-----------|:--------|--------------= | + +e|-0-2-4-|-5-3-2---|---8-7-----5-|-----------5-3-|-3-2-2-0-0---|-0-------= | +B|-0-2-3-|-2-----5-|-------5-4---|-1p0-1---0---0-|-1---0-----4-|---5-4-2-= | +G|-1-2---|---------|-8-----------|-------2-------|-2---0---2---|---------= | +D|-0---0-|-2-------|-7-----5-4---|-2-------1---2-|---------4---|-2-------= | +A|---4-2-|-0-------|-------------|---------------|-0---2---2---|---------= | +E|-------|---------|-------------|---------------|-------------|---------= | + +e|-------------|-----0-2--|-7--------|-0--2--3-----|---------------------= | +B|-2-3p2--0----|-3--------|-0--8--7--|-2--3--5-----|------8--7--5--3--2--= | +G|-2------0-2--|----------|-------7--|-2--------6--|-4p3-----------------= | +D|-2-----------|-4-2---0--|-0--6-----|-------------|-2-------------------= | +A|-0-----------|----------|----7--5--|-0-----------|-4-------------------= | +E|-------------|----------|-3--------|-------------|-2-------------------= | + +e|----------|-2-------------|-------------|----------|-------------4-----= | +B|-3--5--7--|-0--5--3--2-0--|-------------|-0--2--3--|-3-----------------= | +G|-------6--|-0-------------|-3-----------|----3--4--|-------4--7-----7--= | +D|-4-----4--|----------2----|-4--5--4--2--|-4--------|-2--6--------------= | +A|-2-----5--|---------------|-------------|-5--5--2--|-------------------= | +E|----------|-3-------------|-------------|----------|-------------------= | + ~~ +e|--------------0-|-0-------6----|-7--5-3--|------------|---------|----:|= | +B|--------------0-|-------5---5--|---------|---8-7-5-3--|---2-2-0-|-0--:|= | +G|-6p4h6--7p6h7---|-3-4-6--------|-7--6-4--|-3----------|---------|----:|= | +D|--------------2-|-4------------|-4-------|-2-------4--|-2---4---|-4--:|= | +A|-7------5-----4-|--------------|----7-5--|-4-------2--|---------|-2--:|= | +E|----------------|--------------|---------|------------|---------|----:|= | diff --git a/guitar/tabs/Boston/morethanafeeling.prj b/guitar/tabs/Boston/morethanafeeling.prj new file mode 100644 index 0000000..a2cf54e --- /dev/null +++ b/guitar/tabs/Boston/morethanafeeling.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=morethanafeeling.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16) diff --git a/guitar/tabs/Boston/morethanafeeling.tab b/guitar/tabs/Boston/morethanafeeling.tab new file mode 100644 index 0000000..aab6223 --- /dev/null +++ b/guitar/tabs/Boston/morethanafeeling.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-------3---2-----------------------0-----0---------------3----- +B|---3-----3---3-------3-----3---3-----3-----3---3-----3-----3--- +G|-----2---------0---0-----0-------------0-----0-----0---0-----0- +D|-0------------------------------------------------------------- +A|-----------------3-----2---------3---------------2------------- +E|-----------------------------3--------------------------------- + + + +E|-------------------2-----------------------------------------0-0-0-0---3-2-0-2- +B|-0-------1-------1-3-13-12-12-h13-p12-10-13-12-10-h12-p10----3-3-2-0-2-3-3-0-3- +G|-------2-------2---2--------------------------------------12-0-2-2-2-2-0-2-0-2- +D|-----2-------2-----0-----------------------------------------2-2-2-2-2-0-0-2-0- +A|---0---------------------------------------------------------2---------2---2--- +E|-----------3-------------------------------------------------0---------3-2-0--- + diff --git a/guitar/tabs/Classic/24th caprice.prj b/guitar/tabs/Classic/24th caprice.prj new file mode 100644 index 0000000..14e1d4d --- /dev/null +++ b/guitar/tabs/Classic/24th caprice.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=24th caprice.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8) +RANGE=0;4;RANGE_0_4 diff --git a/guitar/tabs/Classic/24th caprice.tab b/guitar/tabs/Classic/24th caprice.tab new file mode 100644 index 0000000..93ff080 --- /dev/null +++ b/guitar/tabs/Classic/24th caprice.tab @@ -0,0 +1,10 @@ +%TabMaster v1.02a% + + +E|-5-8-12-8-5------------------------5-8-12-8-5------------ +B|------------------5-9-12-9-5-------------------------9--- +G|------------9-5-------------------------------9-5-------- +D|----------------7------------9-6------------------h7---7- +A|---------------------------------7----------------------- +E|--------------------------------------------------------- + diff --git a/guitar/tabs/Classic/Aire on a G-String by Bach.prj b/guitar/tabs/Classic/Aire on a G-String by Bach.prj new file mode 100644 index 0000000..32e93fc --- /dev/null +++ b/guitar/tabs/Classic/Aire on a G-String by Bach.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=Aire on a G-String by Bach.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8)(154,8)(155,8)(156,8)(157,8)(158,8)(159,8)(160,8)(161,8)(162,8)(163,8)(164,8)(165,8)(166,8)(167,8)(168,8)(169,8)(170,8)(171,8)(172,8)(173,8)(174,8)(175,8)(176,8)(177,8)(178,8)(179,8)(180,8)(181,8)(182,8)(183,8)(184,8)(185,8)(186,8)(187,8)(188,8)(189,8)(190,8)(191,8)(192,8)(193,8)(194,8)(195,8)(196,8)(197,8)(198,8)(199,8)(200,8)(201,8)(202,8)(203,8)(204,8)(205,8)(206,8)(207,8) +TEMPO=651578 diff --git a/guitar/tabs/Classic/Aire on a G-String by Bach.tab b/guitar/tabs/Classic/Aire on a G-String by Bach.tab new file mode 100644 index 0000000..b657c2d --- /dev/null +++ b/guitar/tabs/Classic/Aire on a G-String by Bach.tab @@ -0,0 +1,286 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Subject: TAB: Aire on a G-String by Bach +floyd1@waikato.ac.nz + + +Air On A G String by Johann Sebastian Bach +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Transcription by Grant Floyd + +The timing is 4/4. I have used spacing to indicate the timing +so that the initial sequence is very strung out with four +beats to the bar and later as the notes become closer the +grouping of notes indicates which are to be played together. +Some bars have a single or very few notes. If they're at the +start of the bar then allow them to ring throughout that bar +(ie everything is spaced according to time at playing) +All this stuff is pretty self-evident but timing is very +important in this piece, listen to it and you'll see what I +mean. + +Basic Bar Structure (smallest spacing = 1/16 note) + -0--0--0--0--0--0--0--0--0--0--0--0--0--0--0--0- + ^ ^ ^ ^ beats + +: -0---------------------------------------------- +:o-1-----------1-----------1-----------1---------- +: -0-----------0-----------0-----------0---------- +: ------------------------------------------------ +:o-3-----------3-----------2-----------2---------- +: ------------------------------------------------ + + -0---------------------------------------------- + -1-----------1-----------1-----------1---------- + -2-----------2-----------0-----------0---------- + ------------------------------------------------ + -0---------------------------------------------- + ------------------------------------------------ + ^ ^ ^ ^ + -0-----------5-----1---------------------------- + -1-----------------------3-----1-----0---1------ + ------------------------------------------------ + -3-----------3-----------4-----------3---------- + ------------------------------------------------ + ------------------------------------------------ + + ------------------------------------------------ + -0-----------0---------------------------------- + -0-----------------2-----0---------------------- + ------------------------------------------------ + ------------------------------------------------ + -------------3-----------1-----------1---------- + ^ ^ ^ ^ + -3---------------------------------------------- + -0-----------0-----------0-----------0---------- + -0-----------0-----------0-----------0---------- + -------------2-----------0-----------0---------- + ------------------------------------------------ + -0---------------------------------------------- + + + -3-----0-----------------------------3-----1---- + -------------------------3-----2---------------- + -------------3-----2---------------------------- + ------------------------------------------------ + -4-----------3-----------0-----------0---------- + ------------------------------------------------ + + -1---------------------------------------------- + -3-----------3-----------3-----------3---------- + -2-----------2-----------2-----------2---------- + -0-----------0---------------------------------- + -------------------------3-----------3---------- + ------------------------------------------------ + ^ ^ ^ ^ + -1-----------------------------------1-----0---- + -------3-----------------1-----0---------------- + -------------2-----0---------------------------- + ------------------------------------------------ + -2-----------2---------------------------------- + -------------------------3-----------3---------- + + -0-----------------------------------2-----3---- + -1-----------1-----------1-----------1---------- + -0-----------0-----------0-----------0---------- + ------------------------------------------------ + -3-----------3-----------2-----------2---------- + ------------------------------------------------ + ^ ^ ^ ^ + -------------0-----------0---------------------- + -1-----1--3--------------------3-----3-----1---- + -2---------------------------------------------- + -------------------------------------0---------- + -0---------------------------------------------- + -------------3-----------2---------------------- + + ------------------------------------------------ + -0--------------0--1-----1-----------0---------- + -------2-----2-----------------------------2---- + -------------------------0-----------0---------- + -------------3---------------------------------- + -3---------------------------------------------- + + ------------------------------------------------ : + ------------------------------------------------o: + -0---------------------------------------------- : + -------------------------0-----3-----2---------- : + -------0-----2-----3-----------------------0----o: + -3---------------------------------------------- : + ^ ^ ^ ^ + + ------------------------------------------------ + -0-----------------------0--1--0-----0---------- + -------------0--------------------2--------0---- + -------------------------3-----------3---------- + ------------------------------------------------ + -3---------------------------------------------- + ^ ^ ^ ^ + + -3---------------------------------------------- + ------------------------------------------------ + -------------------------------------3---------- + -2-----------2-----------0-----------0---------- + ------------------------------------------------ + ------------------------------------------------ + + -------------0-----------------3-----1-----0---- + -------------------3-----2---------------------- + -2---------------------------------------------- + -------------------------2---------------------- + -4-----------3-----------------------0---------- + ------------------------------------------------ + ^ ^ ^ ^ + -0--1--------------------1--0------------------- + -------------------------------3--1--0---------- + -------------------------------------------2---- + -0-----------0---------------------------------- + -------------------------3-----------3---------- + ------------------------------------------------ + + ------------------------------------------------ + -------------0-----------0-----1-----3---------- + -1-----2---------------------------------------- + ------------------------------------------------ + -2-----------2-----------0-----------0---------- + ------------------------------------------------ + + -------0-----1-----------1-----------0---------- + -3---------------------------------------------- + ------------------------------------------------ + ------------------------------------------------ + -------------0-----------2---------------------- + -4-----------------------------------3---------- + ^ ^ ^ ^ + ------------------------------------------------ + -3-----1-----0-----------0-----1--3--1-----0---- + -------------------2---------------------------- + -------------3-----------0---------------------- + -0---------------------------------------------- + ------------------------------------------------ + + ------------------------------------------------ + ------------------------------------------------ + -2---------------------------------------------- + ------------------------------------------------ + -0-----------0---------------------------------- + -------------------------3-----------3---------- + ^ ^ ^ ^ + -------------------------------0---------------- + -1-----------------------1-----------3-----1---- + -2-----------------------2---------------------- + -0-----------------------0-----------2---------- + ------------------------------------------------ + -2-----------1-----------0---------------------- + + -5-----------------------------------3-----1---- + ------------------------------------------------ + ------------------------------------------------ + -0-----------0---------------------------------- + -------------------------3-----------3---------- + ------------------------------------------------ + + -0-----------3---------------------------------- + -------3-----------------------------------0--1- + -------------------0-----2-----------2---------- + -------------------------------------0---------- + -2-----------2-----------3---------------------- + ------------------------------------------------ + ^ ^ ^ ^ + ------------------------------------------------ + -0-----------0---------------------------------- + -------------------2-----0---------------------- + ------------------------------------------------ + ------------------------------------------------ + -3-----------3-----------1-----------1---------- + + -------------------------------------0---------- + -1-----------------------------------------3---- + -0-----------------------2---------------------- + ------------------------------------------------ + ------------------------------------------------ + -0-----------0-----------1-----------1---------- + + -------------------------------------1-----0---- + -3-----------------------0---------------------- + -2-----------------------0---------------------- + -0---------------------------------------------- + ------------------------------------------------ + -2-----------1-----------3-----------3---------- + ^ ^ ^ ^ + + -------0-----------------------------3-----1---- + -3-----------------------1---------------------- + -4-----------------------2---------------------- + ------------------------------------------------ + -------------------------0-----------0---------- + -4-----------3---------------------------------- + ^ ^ ^ ^ + -1---------------------------------------------- + -3---------------------------------------------- + -2---------------------------------------------- + -0-----------0---------------------------------- + -------------------------3-----------3---------- + ------------------------------------------------ + + -------------------------------------------1---- + -------------------------------0-----3---------- + -0-----------------------0---------------------- + ------------------------------------------------ + -2-----------2-----------------------2---------- + -------------------------3---------------------- + + -1-----------0-----------0-----------0-----1--3- + -------3---------------------------------------- + -0-----------------------0---------------------- + ------------------------------------------------ + -3-----------3-----------1-----------2---------- + ------------------------------------------------ + ^ ^ ^ ^ + -------------------------------0-----3-----6---- + -1-----------------------1---------------------- + -2-----------------------0-----------0---------- + ------------------------------------------------ + -0-----------0---------------------------------- + -------------------------3---------------------- + + -6-----------5---------------------------------- + -------------------------------------1---------- + ------------------------------------------------ + -3-----------3-----------2-----------2---------- + ------------------------------------------------ + ------------------------------------------------ + + -------------1---------------------------------- + -0-----3---------------------------------------- + -------------------------------------2---------- + -0-----------0---------------------------------- + -------------------------3-----------3---------- + ------------------------------------------------ + ^ ^ ^ ^ + + -------------------0--1--1--0------------------- + -------------3--------------------------------3- + -0-----------------------0-----------2---------- + ------------------------------------------------ + -2-----------------------3---------------------- + -------------3-----------------------1---------- + ^ ^ ^ ^ + ------------------------------------------------ + -1--0--------------0-----0--1--0-----0-----1---- + -------2-----2--------------------2------------- + ------------------------------------------------ + ------------------------------------------------ + -3-----------1-----------3-----------3---------- + + ------------------------------------------------ + -1---------------------------------------------- + -0---------------------------------------------- + -2---------------------------------------------- + -3---------------------------------------------- + ------------------------------------------------ + Fine + + diff --git a/guitar/tabs/Classic/Allegro- Violin Concerto in E.prj b/guitar/tabs/Classic/Allegro- Violin Concerto in E.prj new file mode 100644 index 0000000..e357105 --- /dev/null +++ b/guitar/tabs/Classic/Allegro- Violin Concerto in E.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=Allegro- Violin Concerto in E.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32) +TEMPO=651578 diff --git a/guitar/tabs/Classic/Allegro- Violin Concerto in E.tab b/guitar/tabs/Classic/Allegro- Violin Concerto in E.tab new file mode 100644 index 0000000..189db1a --- /dev/null +++ b/guitar/tabs/Classic/Allegro- Violin Concerto in E.tab @@ -0,0 +1,196 @@ +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# + +Date: Tue, 12 May 1998 16:14:28 -0400 (EDT) +From: Paul Harvey Dearhouse +Subject: b/bach_johann_sebastian/violin_concerto_in_E_BWV_1042.tab + +J.S. Bach, Allegro- Violin Concerto in E, BWV 1042 + +transcribed by Paul Dearhouse- dearhous@uclink4.berkeley.edu + +This piece sounds nice on the guitar and the notes fall in +good places on the neck(i.e. the music is well-suited for +guitar). The piece should "ring a bell" in your head. + +I wrote just the introduction to this movement, the first 11 bars. +I included the first violin and cello, since their interplay is the +most interesting to me. + +I wrote the time signature in between the violin and cello tab. +The piece is in 4/4 time and I wrote "-" symbols on the 8th notes +in between the quarter notes. Much of the piece uses 16th notes, +which is obvious(hopefully) from first glance. In only 1 or 2 places +do 32nd notes appear briefly. + +Please feel free to email me with any further comments, corrections, +or suggestions. I know much more of this piece, but just haven't taken +the time to write it out. I will also be taking some time to write out +excerpts from Bach's other 2 concertos, in A minor and D minor, so +hopefully I can submit those real soon now. Well, good luck and have fun. + + +Allegro - BWV 1042, J.S. Bach, Violin Concerto in E Major. + + + violin 1 + E------------------------|----------------------------| + B------------------------|----------------------------| + G------------------------|----------9-----------------| + D-------6-----9-------6-7|9--6-7-9------9--9-7-6------| + A--7---------------------|------------------------9-7-| + E------------------------|----------------------------| + | 1 2 3 4 - 1 - 2 - 3 - 4 - + | + | cello + E------------------------|-----------------------------| + B------------------------|-----------------------------| + G------------------------|-----------------------------| + D------------------------|----6------6------6----------| + A--7----------7----------|-7----9-7----9-7----9-7--6---| + E-------0-------------0--|-----------------------------| + + + + E---------------------------------------------------| + B----------------------------------------7--9-10----| + G-------6-----------------------6--7--9-------------| + D-7--9-----7--6--7--9--6-----9----------------------| + A-------------------------9-------------------------| + E---------------------------------------------------| + | 1 - 2 - 3 - 4 - + | + | + E---------------------------------------------------| + B---------------------------------------------------| + G---------------------------------------------------| + D---------------------------------------------------| + A-------6-----7-------------------------------------| + E-9-----------------0-----7-------------------------| + + + + E---------------------------------------------------| + B-12-12-12-12-12-12-12-12-12--9-----------------9---| + G-------------------------------10-----------10-----| + D----------------------------------11--9--11--------| + A---------------------------------------------------| + E---------------------------------------------------| + | 1 - 2 - 3 - 4 - + | + | + E---------------------------------------------------| + B---------------------------------------------------| + G---------------------------------------------------| + D-------------------4--6----------------------------| + A----------4--6--7--------4-------------------------| + E-4--5--7-------------------------------------------| + + E---------------------------------------------------| + B-10-10-10-10-10-10-10-10-10-7----------------7-----| + G------------------------------8-----------8--------| + D---------------------------------9--7--9-----------| + A---------------------------------------------------| + E---------------------------------------------------| + | 1 - 2 - 3 - 4 - + | + | + E---------------------------------------------------| + B---------------------------------------------------| + G---------------------------------------------------| + D-------------------2--4----------------------------| + A----------2--4--6--------2-------------------------| + E-2--4--5-------------------------------------------| + + + + E----------------------------7--9-----------7---| + B-9--9--9--9--9--9--9--9--10------10--9--10---9-| + G-----------------------------------------------| + D-----------------------------------------------| + A-----------------------------------------------| + E-----------------------------------------------| + | 1 - 2 - 3 - 4 - + | + | + E-----------------------------------------------| + B-----------------------------------------------| + G-------------------------------6-----------4---| + D----------------------2------------------------| + A-------------2--4--6-----4---------------------| + E-0--2--4--5------------------------------------| + + + + E-------------------------------------------------| + B---7--9--10-7-----7--9-----------7---------------| + G---------------9--------9--8--9-----8-------6----| + D--------------------------------------7--9-----7-| + A-------------------------------------------------| + E-------------------------------------------------| + | 1 - 2 - 3 - 4 - + | + | + E-------------------------------------------------| + B-------------------------------------------------| + G---2---------------------------------------------| + D---------------------------------4----------2----| + A-------------------------------------------------| + E---------5-----------4-----2---------------------| + + + + E-------------------------------------------------------| + B-------------------------------------------7--9-10-----| + G-------------------------------------------------------| + D----6--7-----------------------------------------------| + A-9--------9--6--7--9--6--------------------------------| + E-------------------------7-----------------------------| + | 1 - 2 - 3 - 4 - + | + | + E-------------------------------------------------------| + B-------------------------------------------------------| + G-------------------------------------------------------| + D-1--------------------------2--4--1--------1-----------| + A-------------------------------------2-----------------| + E-------------------------------------------------------| + + + + tr. + E--------------------------------------------------| + B-9----7------9--7---------------------------------| + G---------9---------9--8--9-----------6--6--7--7---| + D------------------------------9--9----------------| + A--------------------------------------------------| + E--------------------------------------------------| + | 1 - 2 - 3 - 4 - + | + | + E--------------------------------------------------| + B--------------------------------------------------| + G--------------------------------------------------| + D-2------------------------------------------------| + A-------------------2-----4-----------------2--2---| + E------4------5----------------4--4---5--5---------| + + E-----------------------------------|----------------------------| + B-------------------7-9----10-7-12--|-10-9-7----9-7--------------| + G-9-9-----6-6-7-7-9------9----------|---------9-------9-8-9------| + D-----9-9---------------------------|----------------------------| + A-----------------------------------|----------------------------| + E-----------------------------------|----------------------------| + | 1 - 2 - 3 - 4 - 1 - 2 - 3 4 + | + | + E-----------------------------------|----------------------------| + B-----------------------------------|----------------------------| + G-----------------------------------|----------------------------| + D-------------------------------1-1-|-2--------------------------| + A-4-4---------2-2-4-4-2-2--4-4------|------4----0-----2----------| + E-----4-4-5-5-----------------------|---------------------0------| + + diff --git a/guitar/tabs/Classic/Beethoven's fifth.prj b/guitar/tabs/Classic/Beethoven's fifth.prj new file mode 100644 index 0000000..67150c0 --- /dev/null +++ b/guitar/tabs/Classic/Beethoven's fifth.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=Beethoven's fifth.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16)(794,16)(795,16)(796,16)(797,16)(798,16)(799,16)(800,16)(801,16)(802,16)(803,16)(804,16)(805,16)(806,16)(807,16)(808,16)(809,16)(810,16)(811,16)(812,16)(813,16)(814,16)(815,16)(816,16)(817,16)(818,16)(819,16)(820,16)(821,16)(822,16)(823,16)(824,16)(825,16)(826,16)(827,16)(828,16)(829,16)(830,16)(831,16)(832,16)(833,16)(834,16)(835,16)(836,16)(837,16)(838,16)(839,16)(840,16)(841,16)(842,16)(843,16)(844,16)(845,16)(846,16)(847,16)(848,16)(849,16)(850,16)(851,16)(852,16)(853,16)(854,16)(855,16)(856,16)(857,16)(858,16)(859,16)(860,16)(861,16)(862,16)(863,16)(864,16)(865,16)(866,16)(867,16)(868,16)(869,16)(870,16)(871,16)(872,16)(873,16)(874,16)(875,16)(876,16)(877,16)(878,16)(879,16)(880,16)(881,16)(882,16)(883,16)(884,16)(885,16)(886,16)(887,16)(888,16)(889,16)(890,16)(891,16)(892,16)(893,16)(894,16)(895,16)(896,16)(897,16)(898,16)(899,16)(900,16)(901,16)(902,16)(903,16)(904,16)(905,16)(906,16)(907,16)(908,16)(909,16)(910,16)(911,16)(912,16)(913,16)(914,16)(915,16)(916,16)(917,16)(918,16)(919,16)(920,16)(921,16)(922,16)(923,16)(924,16)(925,16)(926,16)(927,16)(928,16)(929,16) +TEMPO=651578 diff --git a/guitar/tabs/Classic/Beethoven's fifth.tab b/guitar/tabs/Classic/Beethoven's fifth.tab new file mode 100644 index 0000000..6c44d19 --- /dev/null +++ b/guitar/tabs/Classic/Beethoven's fifth.tab @@ -0,0 +1,337 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: dao002@acad.drake.edu (Xelard(Dave)) +Subject: TAB:Beethoven's fifth(Adagio con brio) +Nntp-Posting-Host: acad.drake.edu +Date: Fri, 6 May 1994 04:46:36 GMT + + Beethoven's fifth. + Tabbed by David Olson for one guitar + +2/4 time. eight - per measure. + +--3-3-3----------1-1-1------------------------------------------------------- +--------4--------------3-------------------------------4-4-4-1--------------- +--0-0-0--------------------------------0-0-0---1-1-1-0---------------0-0-0--- +--------1--------3-3-3-0---------------------1-----------------------------0- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +--------1-1-1----------3-3-1-----------3-3-1-----------3-3-1---------------2 +--------------3--------------4-------3-------4-------3------4--------------3 +1-1-1-0------------------------------0---------------0------5------5-------4 +-------------------------------1-1-3-----------1-1-3--------5------4-------5 +-------------------------------------------------------------------6-------5 +---------------------------------------------------------------------------2 + +---------4-4-4-1--------------------------------------------------------------- +------------------------------------------------------------------------------- +---------1-1-1---------------1-1-1---------------------1-1-1------------------- +---------------3-------------------3-0-0-0-----------1-------3-0-0-0----------- +-------------------------------------------2-------------------------2--------- +---------------------------------------------4-4-4-3-------------------4-4-4-3- + +2-2-2--------------------------------------------1-1-0-0-3-3-1-1-4-4-3-3-6-6-- +3-3-3-4---1-1-1-----0-0-0-3-3------1-1-1-4-4-3-3------------------------------ +0-0-0-5-0--------------------------------------------------------------------- +------5----------------------------------------------------------------------- +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + (elevens, not ones) +-4-4-8-8-7-710-8111111-8------------------------13----------------------------- +-------------------------8-8-8--------------------151512----------------------- +-------------------------------8------------------------121010-7--------------- +--------------------------------10-------------------------------9------------- +----------------------------------1010-6--------------------------10-8--------- +-----------------------------------------------------------------------10------ + +-------111111-------------------5-5-5---------------6---------------------- +-------------13101010-----------7-7-7---------------6---------------------- +---------------------11-8-8-8---8-8-8---------------7-----------------8---- +-----------------------------10-----------------------------------8-------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + +------------------------------11--10--11--13---8---8------------------------- +-------------------------11---------------------------11--------------------- +7---8--10------------------------------------------------------8---7---8--10- +-----------10--10----8-------------------------------------8----------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +---------------6---8---9---8---6---8---6---4---9--11--13--11---9--11---9---8- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +--10--10---8----------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +E-----------8-------8-------6-------6-------5-------5-------5-------5-------5- +B---4---6---7---6---4---6---7---6---4---6---7---6---4---6---7---6---4---6---7- + + +------5---5---6--------8-6-4-4-3-1-------------------------------------5-6-5- +--6---7---4---9--------------------4-4-3-1-3-6-4-----3-1-----1--------------- +-------------10----------------------------------3-0-----1-----3-0----------- +-----------------------------------------------------------3-------0--------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +6-5-6-5-6-8-6-4-4-3-1---------------------------------------6-6---15151511-- +----------------------4-4-3-1-3-6-4-----3-1---------------------8---------11 +------------------------------------3-0-----1---5-3------------------------- +----------------------------------------------3-----0-0---8----------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + (fifteens and elevens again) +-----------------------15151511-------------------------------6-6-6-6--------- +1111-8-4-4-4---6-6-6-8---------111111-8-4-4-4---6-6-6-8-------6-6-6-8--------- +---------------7-7-7-8--------------------------7-7-7-8-------7-7-7-8--------- +-------------8--------------------------------8-------8----------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +10101011---------------------|--6-6-6-3--------------------------------------- +11111111--------------------o|---------------------------------1-1-1---3-3-3-1 +10101012---------------------|---------------------------------------1-------- +-----------------------------|------------------------------------------------ +----------------------------o|----------4-4-4-3------------------------------- +-----------------------------|------------------------------------------------ + +-4-4-4-1------------------------6-6-6-3--------8-8-6-4-----3-8-8-6-4-------3- +----------------1-1-1---3-3-3-1----------------------------1---------------1- +----------------------0------------------------------1-1-3-0-------1-1-1-3-0- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +8-8-6-4-4-4-3-1-1-1-------------------------------------------------------6-- +--------------------4-3-3-3-1-0--------4-4-6-8--------4-4-6-8--------10------ +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +--8---9--101010-8-6------51010-8-6------5--------3-3-5-6---------2-5-6-8----- +---------------10-8------7-------8------7----------------------1------------- +-----------1111------------------------------------------0-2-3-------------2- +-------------------------------------------------------------------------4--- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + (elevens and tens) +------5-6-8-----------6-810-----------6-8-10-6-810111111111111111111-------- +----7---------------8---------------8-------------101010101010101010-------- +3-5-------------5-7---------------7---------------111111111111111111-------- +------------7-8---------------810------------81012-------------------------- +---------------------------10----------------------------------------------- +---------------------------------------------------------------------------- +(twelves and elevens) +121212121212121212121212--------10101010----------9-9-9---101010101010-------- +111111111111111111111111--------11111111---------111111---101010-------8------ +121212121212121212121212--------12121212---------121212----------------------- +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + (I'm not sure I tabbed the lead here) +5--------------------------2-2-5---1010--151515-8-----10-------------------- +-------3-----------1-1-3-----------101012---------------------8------------- +-----------------------------------111112121212----------------------------- +-------0---4-4-4------------------------------------------------------------ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + +----3-----7-710--151512--------------------|---------------1------3------| +----0-0-0-7-7----151513131313--------8-----|o---------------------------o| +-----------------1212--------10------------|----------------------0------| +-------------------------------------------|-2------3--------------------||| +-------------------------------------------|o---------------------------o| +-------------------------------------------|-----------------------------| + +still in 2/4 time, but now I will use measure marks to save space + +|-|-|5|6|-|7|-|9|-|9-|-|9-|-|9-|-|10|-|10|-|10|-|10|--101010|10|10|10|-|10|-| +|-|-|-|-|-|-|-|-|-|10|-|10|-|10|-|10|-|10|-|10|-|10|--------|12|13|10|-|10|-| +|-|2|-|-|-|-|-|-|-|--|-|11|-|11|-|11|-|11|-|11|-|11|--------|--|--|--|-|--|-| +|4|-|-|-|-|-|-|-|-|--|-|--|-|--|-|--|0|--|0|--|0|--|--------|--|--|--|0|--|0| +|-|-|-|-|1|-|2|-|4|--|0|--|0|--|0|--|0|--|0|--|0|--|--------|--|--|--|-|--|-| +|-|-|-|-|1|-|2|-|4|--|-|--|-|--|-|--|-|--|-|--|-|--|--------|--|--|--|-|--|-| + stopped using measure marks +10|-|10|-|10|---------4-4-4-1---------4-4-4-1---------4-4-4-1-4-4-4-1151515|15| +10|-|10|-|10|--------------------------------------------------------------|16| +--|-|--|-|--|--------------------------------------------------------------|--| +--|0|--|0|--|-0------------------------------------------------------------|--| +--|-|--|-|--|--------------------------------------------------------------|--| +--|-|--|-|--|-4-4-4-1---------4-4-4-1---------4-4-4-1-4-4-4-1-4-4-4-1------|--| + +--151515|15|-|-|--------|-----------------------------------------1-1-1|-| +--181818|15|-|-|--------|----------4-4-4-1-----------------------------|3| +--------|--|-|-|---0-0-0|--1-1-1-0----------------0-0-0---1-1-1-0------|-| +--------|--|-|-|--------|1------------------------------0--------------|-| +--------|--|-|-|--------|3------------------------------2--------------|-| +--------|--|-|-|--------|----------------------------------------------|-| + Adagio(play slowly) +--3-3-1-----------3-3-1-----------3-3-1|-|-|3-1-------------1----------- +--------4-------3-------4-------3------|4|1|3-----4---3-4313----4---3--- +--------0-------0-------0-------0------|0|-|4--------------------------- +----------1-1-3-----------1-1-3--------|-|4|5--------------------------- +---------------------------------------|-|-|5--------------------------- +---------------------------------------|-|-|3--------------------------- + +----------------------------------------------7-------7---------------------- +----------------------------------------------6-------6-0-0-0-1---1-1-1------ +--1-1-1-----------------------1-1-1-----------7-------7---------0------------ +--------3-0-0-0---------------------3---------------------------------------- +----------------2------------------------------------------------------------ +------------------4-4-4-3-------------4-4-4-1-------------------------------- + +------------------------------1-1-0-0-3-3-1-1-4-4-3-3-6-6-4-4-8-8-7-7-10-8- +-0-0-0-3-3------1-1-1-4-4-3-3---------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + +111111-8--------------|-|--13--------------------|--|--111111----------------- +---------8-8-8--------|-|----151512--------------|--|--------13101010--------- +---------------8------|-|----------121010-7------|--|----------------11-8-8-8- +----------------10----|-|-------------------9----|--|------------------------- +------------------1010|6|--------------------10-8|--|------------------------- +----------------------|-|------------------------|10|------------------------- + notes tabbed twice as fast as they are played + or four ---- per measure +--|2|-|-|3|-------|-|-|-|-------------------8-7-810-------------------------8- +--|4|-|-|3|-------|-|-|-|---1-0-1-3-------8--------1010-8---1-0-1-3-------8--- +--|5|-|-|-|--0-0-0|-|-|-|-0---------2-2-0-----------------0---------2-2-0----- +10|-|-|-|-|-------|-|0|-|----------------------------------------------------- +--|-|-|-|-|-------|3|-|-|----------------------------------------------------- +--|-|-|-|-|-------|-|-|3|----------------------------------------------------- + +7-810----------------------------------------------------------------------- +-----1010-8---1-2-1-------------------------6-8-9-8-6-8-9-8-6-8-9-8-6-8-9-8- +------------3-------3-5-3-2-5-7-8-7-5-6-5-4--------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + |now eight -'s per measure +---------------------------|15|--1715131312------------10-8-----7-5-----5-3--- +7-810-8-7-810-8-7-8-7-8-7-8|--|------------151313121012-----8-5-----6-3-----4- +---------------------------|--|----------------------------------------------- +---------------------------|--|----------------------------------------------- +---------------------------|--|----------------------------------------------- +---------------------------|--|----------------------------------------------- + +----2-3-2-3141514151715131312------------10-8-----7-5-----5-3---------3-3- +--0--------------------------151313121012-----8-5-----6-3-----4-----0----- +5---------------------------------------------------------------5--------- +------------------------------------------------------------------0------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +--121212------------------10101012121212-8---------8-8-8--------|-|---8-8-8|8| +--------13----------------12121213---------8-8-8-5-------8------|5|---8-8-8|5| +----------121212-9-5-5-5-0---------9-9-9-5-----------------7-7-7|-|--------|-| +----------------------------------------------------------------|-|--------|-| +----------------------------------------------------------------|-|--------|-| +----------------------------------------------------------------|-|--------|-| + +---7-7-7|8|--8-8-8|8|--8-8-8|8|--8-8-8|8|--8-8-8-9-9-9-9-9-9-9-9-9-9-9-9- +---8-8-8|8|--8-8-8|6|--6-6-6|8|--8-8-8|9|--9-9-9-9-9-9-9-9-9-9-9-9-9-9-9- +---7-7-7|9|--9-9-9|-|-------|-|-------|-|-------101010101010101010101010- +--------|-|-------|-|-------|-|-------|-|-------------------------------- +--------|-|-------|-|-------|-|-------|-|-------------------------------- +--------|-|-------|-|-------|-|-------|-|-------------------------------- + +-9-9-9-9-9------------|--|-|--11111111-----111111111111111111111111---------8 +-9-9-9-9-9------------|--|-|--13131313-----131313131313131313131313---------- +1010101010------------|-1|-|--14141414-----141414141414141414141414---------- +-----------------3-3-3|--|-|------------------------------------------------- +----------------------|--|-|------------------------------------------------- +----------------------|--|-|------------------------------------------------- + +-8-811---------------------4-3-4-3-4-3|-|--------------4-3-4-3-4-3-4-3-6-4 +---------------------4-6-8------------|-|--------4-6-8-------------------- +-------0-0-0---4-5-8------------------|-|--4-5-8-------------------------- +-------------1------------------------|-|--------------------------------- +--------------------------------------|-|--------------------------------- +--------------------------------------|-|--------------------------------- + +------------------------10-81110-8-610-8-6-4-8-6-4-3-6-4---3---3---3---3---3- +-8-6-9-8-6-4-8-6-4-3-6-4---------------------------------6---4---3---4---6--- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +---3---3-3-8---8---8---8--13--13--13--13--1311---8--10--11--13--10-- +-4---6-------9---8---9--12--13--12--13--15-------------------------- +-------------------------------------------------------------------- +-------------------------------------------------------------------- +-------------------------------------------------------------------- +-------------------------------------------------------------------- + +11--13--15--11--13--15---4---1---3---5---7---3---5---7---8---3---4-------1--- +---------------------------------------------------------------------4------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +---------------------------------------------------------6---8---9---6------- +3---4---6---8---7---8-------1------3---4---6---3-------------------------0--- +------------------------0---------------------------------------------------- +-------------------------------------------------1-3-5-1--------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +------------8--10--11--10---8---7---4---3-----------4---3---16---15-----15--- +1---3---0---------------------------------------------------18---16-----16--- +--------------------------------------------1---0---------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +----15-------------------------4---3-----------16--15-----15--------15------ +----15-4---3---1-----------------------1---1--------------16--------15------ +-------------------3---1---0------------------------------------------17-0-0 +----------------------------------------------------------------------17---- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + crescendo +-----3-3-3-3-----3---3---3---3---3---3---3---------------3-3-3-3-315151515---- +-----3-3-3-3-----3---4---6---3---4---6---4------------------------------16---- +-0-0---------------------------------------------0-0-0-0-0-0-0-0-0121212------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + +---151515|15|-|-----------------------------4-3------------------------------ +---181818|15|-|------------------4-4-4-1------------------------4-4-4-1------ +---------|--|-|--0-0-0---1-1-1-0----------------0-0-0---1-1-1-0-------------- +---------|--|-|--------1------------------------------1---------------------- +---------|--|-|-------------------------------------------------------------- +---------|--|-|-------------------------------------------------------------- + +-4-315151515--------15151515--------15151515---7---8---7---8---7---8---7---8 +----12121213--------12121213--------12121213-------------------------------- +----12121212--------12121212--------12121212---7---8---7---8---7---8---7---8 +-----------------------------------------------9--10---9--10---9--10---9--10 +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + +------7----------8--------------------| +-----------------8--------------------| +------7----------8--------------------| +------9---------10--------------------| +--------------------------------------| +--------------------------------------| + +That's All folks. + +There may be some mistakes, but there shouldn't be too many. + + diff --git a/guitar/tabs/Classic/Concerto Dm.prj b/guitar/tabs/Classic/Concerto Dm.prj new file mode 100644 index 0000000..6417de5 --- /dev/null +++ b/guitar/tabs/Classic/Concerto Dm.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Concerto Dm.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16) diff --git a/guitar/tabs/Classic/Concerto Dm.tab b/guitar/tabs/Classic/Concerto Dm.tab new file mode 100644 index 0000000..c649dae --- /dev/null +++ b/guitar/tabs/Classic/Concerto Dm.tab @@ -0,0 +1,47 @@ +This is only the first part of the piece, but hey, itz better than nutn rite? = ) + + +J.S. Bach Concerto Dm + + +E|---------------------------------------------------------------] +B|------------------15--14---------------------------------------] +G|-----------12-14----------14------12----------17----16-14-16---] +D|--12-14-15--------------------14------16--12-------------------] +A|---------------------------------------------------------------] +E|---------------------------------------------------------------] + +E|---------------------------------------------------------------] +B|---------------------------------------------------------------] +G|--------------15-14-15-----------------------------------------] +D|--17--14--17------------17------17----15----14-----------------] +A|----------------------------17--------------------17-16-17-----] +E|---------------------------------------------------------------] + +E|---------------------------------17--16------------------------] +B|--------------------------15-17----------17--------15----14----] +G|-----------------14-16-17---------------------16-------------14] +D|--14-15-14-15-17-----------------------------------------------] +A|---------------------------------------------------------------] +E|---------------------------------------------------------------] + +E|--15---14-12-14-----------------13-12-13--------12-13-12-------] +B|-----------------15---12---15--------------15------------------] +G|---------------------------------------------------------------] +D|---------------------------------------------------------------] +A|---------------------------------------------------------------] +E|---------------------------------------------------------------] + +E|---------------------------------------------------------------] +B|--15--13--12---------------------------------------------------] +G|---------------14----------------------------------------------] +D|---------------------------------------------------------------] +A|---------------------------------------------------------------] +E|---------------------------------------------------------------] + +E|------------------------------------------------------------] +B|------------------------------------------------------------] +G|------------------------------------------------------------] +D|------------------------------------------------------------] +A|------------------------------------------------------------] +E|------------------------------------------------------------] diff --git a/guitar/tabs/Classic/Mozart - Allegro from Divertimento #13, K. 253.tab b/guitar/tabs/Classic/Mozart - Allegro from Divertimento #13, K. 253.tab new file mode 100644 index 0000000..8f4e909 --- /dev/null +++ b/guitar/tabs/Classic/Mozart - Allegro from Divertimento #13, K. 253.tab @@ -0,0 +1,149 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: darsie@ece.ucdavis.edu (Richard Darsie) +Subject: TAB: Mozart + +Allegro from Divertimento #13, K. 253 +W. A. Mozart +arranged for guitar by +Richard Darsie +darsie@ece.ucdavis.edu + +Time = 2/4 +Tuning = Drop D (DADGBE) + +Key to symbols: h = half note + q = quarter note + e = eighth note + s = sixteenth note + . = dotted note (when placed after h,q,e,s) + / = hammer on to note (when placed between two notes) + +Section One + + e h h e e e e q. e e e e e e e e e + +E-------|--3--|--7--|-10--7--10--7-|-10---3-|-2--0-----3-|-2--0-------| +B-----3-|-----|-----|--------------|--------|-------3----|-------3--3-| +G-------|-----|-----|--------------|--------|------------|------------| +D-------|-----|-----|--------------|--------|------------|------------| +A-------|-----|-----|--------------|------2-|-3-----2----|-3-----2----| +D-------|-----|-----|--------------|--------|------------|------------| + + q q s s s s e e h h e e e e q. e e e e e + +E--8---7-|-5-3-2-0------|--3--|--7--|-10--7--10--7-|-10---3-|-2--0-----3-| +B--------|---------3--3-|-----|--0--|--------------|--------|-------3----| +G--------|--------------|--0--|-----|--------------|--------|------------| +D--------|--------------|-----|-----|--0------0----|--0-----|------------| +A--------|--------------|-----|-----|--------------|------2-|-3-----2----| +D--4---5-|-0------------|--5--|--9--|-----9------9-|--------|------------| + + e e e e q q q. + +E--2--0-----7-|--8----5-|--3--|| +B-------------|--10---7-|--0--|| +G--------7----|---------|-----|| +D-------------|-------0-|-----|| +A--3----------|---------|-----|| +D--------9----|--10-----|--5--|| + + +Section Two + + e q q e e e e e e e e + +------|--6/7--6/7-|-5--3--2--0-|----0--2----| +------|-----------|------------|-4--------4-| +------|-----------|-------2--0-|------------| +------|-----------|-2----------|-4----------| +------|-----------|------------|-2----------| +------|-----------|------------|------------| + + e e e e q q e e e e e e e e e e e e e e e +e + +E--0--2--3--4-|-4/5--4/5-|-3--2--0----|-------0----|------------|----0-------| +B-------------|----------|----------3-|-2--3-----2-|-3-----3--3-|-6-----6----| +G--0----------|----------|-------0----|------------|----2-------|----------7-| +D-------------|----------|-0--------4-|-2----------|-4----------|------------| +A-------------|----------|------------|-0----------|------------|------------| +D--2----------|----------|------------|------------|-0----------|-6----------| + + q e e e e e e q e e e e e e e q e e e e e + +E--5---0--0-|----0-------|-5---0--0-|-9--10--9--10-|-12--------|------------| +B-----------|-6-----6----|----------|--------------|---------7-|-5----------| +G--6--------|----------7-|-6--------|-0------------|-----12----|----7-----6-| +D-----------|------------|----------|------------0-|---------0-|------------| +A--0--------|------------|-0--------|-----9--7-----|-----------|-------0----| +D-----------|-6----------|----------|--------------|-11--------|-5----------| + + e e e e e e e e e e e e e e e e e e e e + +E-------------|------------|------------|------------|------------| +B--3--------3-|-6----------|------------|-4----------|----------0-| +G-------------|------------|----------5-|------------|------------| +D--------0--0-|----6--6--6-|-7--6--7----|----4--4--4-|-5--4--5----| +A-----0-------|-8----------|----------3-|-6----------|----------2-| +D--0----------|----6--6--6-|-7--6--7----|----4--4--4-|-5--4--5----| + + e e e e e e e e e e e e e e e e e e e e + +E-------------|-0----------|-2----------|-3----------|-5----------| +B--3----------|------------|----1--1--1-|----0--0--0-|------------| +G-------------|------------|------------|------------|----5--5--5-| +D-----3--3--3-|----2--2--2-|----0--0--0-|----2--2--2-|----4--4--4-| +A-----2--2--2-|----3--3--3-|------------|------------|------------| +D-------------|------------|------------|------------|------------| + + e e e e e e e e q. + +E--7----------|-9----------|--10--|| +B-----0--0--0-|----8--8--8-|---7--|| +G-------------|------------|------|| Repeat Section One, +D-----5--5--5-|----7--7--7-|---0--|| Then jump to Section Three +A-------------|------------|------|| +D-------------|------------|------|| + +Section Three + + e q q q. e q q q. e e e e e e e e e + +E------|--------|-------|--------|------10-|-8-----8----|-7-----5--3-| +B------|--------|-------|--------|---------|------------|------------| +G----0-|--0--0--|--0--2-|--2--2--|--2------|------------|------------| +D------|--3--3--|--2----|--5--5--|--4------|------------|------------| +A------|--2--2--|--3----|--4--4--|--5------|----0-------|----2--0----| +D------|--------|-------|--------|---------|-0-----4--0-|-5--------5-| + + q q q. e q q q. e q q q. e e e e e + +E--10-----|--3-----|--------|-------|--------|------10-|-8-----8----| +B---------|--------|--------|-------|--------|---------|------------| +G-------7-|------0-|--0--0--|--0--2-|--2--2--|--2------|------------| +D---0-----|--------|--3--3--|--2----|--5--5--|--4------|------------| +A---------|--------|--2--2--|--3----|--4--4--|--5------|----0-------| +D-------0-|--5-----|--------|-------|--------|---------|-0-----4--0-| + + e e e e q q q e e e e e e q e e e e e e + +E--7-----5--3-|-10-----|----7----|-7-----10----|----7----|-7-----10----| +B-------------|--------|-8-----8-|----8------7-|-8-----8-|----8------7-| +G-------------|------7-|---------|-------------|---------|-------------| +D-------------|--0-----|---------|-------------|---------|-------------| +A-----2--0----|--------|---------|-------------|---------|-------------| +D--5--------5-|------0-|-5-------|-5------0----|-5-------|-5------0----| + + q e. s e e e e q q q. + +E--3---------|------------|----3-|--3--|| +B--0---------|----0--3--0-|----3-|--3--|| +G------0---0-|-0----------|-0--4-|--4--|| +D------------|-------0----|----5-|--5--|| Fin. +A------------|----2-----2-|------|--5--|| +D--5---5---5-|-5----------|-5----|--5--|| + + diff --git a/guitar/tabs/Classic/Mozart - Minuet.tab b/guitar/tabs/Classic/Mozart - Minuet.tab new file mode 100644 index 0000000..b81fe48 --- /dev/null +++ b/guitar/tabs/Classic/Mozart - Minuet.tab @@ -0,0 +1,86 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Here's the whole thing, last one was only partial +Wolfgang Amadeus Mozart +Minuet +letostak@netcom.com + + +|-----------|----------------------|---------5-h-9--7-p-5--|-4-h-7--12-p-11- +|-----------|--------5-h-9--7-p-5--|--4-h-7----------------|---------------- +|-----------|----------------------|-----------------------|---------------- +|--9-p-7----|-6-h-9----------------|-----------------------|---------------- +|-----------|----------------------|-----------------------|---------------- +|-----------|----------------------|-----------------------|---------------- + + +-12-p-9--|-7-h-8--9-p-7--|-5-h-7--5-p-4---------|--------------------------| +---------|---------------|---------------7-p-5--|--4-h-5--4-p-2------------| +---------|---------------|----------------------|----------------4-p-2-----| +---------|---------------|----------------------|--------------------------| +---------|---------------|----------------------|--------------------------| +---------|---------------|----------------------|--------------------------| + + +|--------0-h-4--5-p-2--|-------4h5p4--------|-------5---5h7p5--------------| +|----------------------|--5-----------7--5--|----7-------------9--7--------| +|-1-h-4----------------|--------------------|-8----------------------------| +|----------------------|--------------------|------------------------------| +|----------------------|--------------------|------------------------------| +|----------------------|--------------------|------------------------------| + + harmonics +|--------7---7h9p7---------|---------9-----------|-12----|| repeat from +|-----9-------------10--9--|-----10--------12----|-------|| start +|-9------------------------|-11------------------|-------|| +|--------------------------|---------------------|-------|| +|--------------------------|---------------------|-------|| +|--------------------------|---------------------|-------|| + + +||-----|-----------------------------------6--|----------7-------------9---- +||-----|--5--7--8--7--5--------0--------7-----|-------7------------11------- +||-----|-----------------7--6--------6--------|----7------------9----------- +||-----|--------------------------8-----------|-9-----------11-------------- +||--7--|--------------------------------------|----------------------------- +||-----|--------------------------------------|----------------------------- + + +-------------10--|--------9--12----------10--14--12--10--9-----|------------ +---------12------|----11-------------12---------------------12-|-10----9---- +-----11----------|-9-------------11----------------------------|------------ +-12--------------|---------------------------------------------|------------ +-----------------|---------------------------------------------|------------ +-----------------|---------------------------------------------|------------ + + +--------------|-5--0--9--7--5--4--2-----------------|-------2--0------------ +--------------|----------------------5--3--2--------|-3-p-0-------3--2------ +--9----8---9--|-------------------------------4--2--|----------------------- +--------------|-------------------------------------|----------------------- +--------------|-------------------------------------|----------------------- +--------------|-------------------------------------|----------------------- + + +--------------------|------------------------------------|-------2--4------- +--------------------|----------------------------------2-|-3--5------------- +--4--2--1-----------|-------------------------1--2--4----|------------------ +-----------4--2--0--|----------------0--2--4-------------|------------------ +--------------------|-4--2--0--2--4----------------------|------------------ +--------------------|------------------------------------|------------------ + + +---------------------14--16--17--|--16-p-14---------------------|----------|| +---------14--15--17--------------|-----------17--15--14---------|----------|| +-14--16--------------------------|-----------------------16--14-|----------|| +---------------------------------|------------------------------|----------|| +---------------------------------|------------------------------|---0------|| +---------------------------------|------------------------------|----------|| + + + + diff --git a/guitar/tabs/Classic/Mozart - Quartet No.14 in G Major.tab b/guitar/tabs/Classic/Mozart - Quartet No.14 in G Major.tab new file mode 100644 index 0000000..375c1ba --- /dev/null +++ b/guitar/tabs/Classic/Mozart - Quartet No.14 in G Major.tab @@ -0,0 +1,43 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Wolfgang Amadeus Mozart +Quartet No.14 in G Major +letostak@netcom.com + +|-15p14-12----------------|-------------------15-14-|-15p14-12--------------| +|----------15-13-12-------|-------15-13-12-15-------|----------15-13-12-----| +|-------------------14-12-|-11h14-------------------|------------------14-12| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| + + +|-------------------15-14-|-15p14-12----12----------|----------------------| +|-------15-13-12-15-------|----------15----15-13-12-|-----15---------------| +|-11h14-------------------|-------------------------|-14------12-----------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| + + +|-20-19-17----------------|-------15-------15-20-19-|20-19-17---------------| +|----------20-18-17-------|----------19-17----------|---------20-18-17------| +|-------------------19-17-|-16h19-------------------|------------------19-17| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| + + +|-------15-------15-20-19-|-20-19-17----17----------|----------------------| +|----------19-17----------|----------20----20-18-17-|-----20---------------| +|-16-19-------------------|-------------------------|-19------17-----------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| + + + diff --git a/guitar/tabs/Classic/Mozart - Quartet No.15 in D Minor.tab b/guitar/tabs/Classic/Mozart - Quartet No.15 in D Minor.tab new file mode 100644 index 0000000..7017616 --- /dev/null +++ b/guitar/tabs/Classic/Mozart - Quartet No.15 in D Minor.tab @@ -0,0 +1,44 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Wolfgang Amadeus Mozart +Quartet No.15 in D Minor +letostak@netcom.com + + +|---------|-------------------------|-------------------------17--17-------| +|---------|-15---14-15--18---17-15--|-14---15-17---------------------------| +|--14-----|-------------------------|--------------14----------------------| +|---------|-------------------------|--------------------------------------| +|---------|-------------------------|--------------------------------------| +|---------|-------------------------|--------------------------------------| + + +|-17----17-17-17-----17-17-|-17---------------|---------15---15------------| +|--------------------------|-------17---------|-17---18-----------18-17----| +|--------------------------|--------------14--|----------------------------| +|--------------------------|------------------|----------------------------| +|--------------------------|------------------|----------------------------| +|--------------------------|------------------|----------------------------| + + +|-17---------------------22-22-|-22-----22-22-22-----22-22-|-22------------| +|-------18-15---15-------------|---------------------------|---------------| +|------------------------------|---------------------------|--------19-----| +|------------------------------|---------------------------|---------------| +|------------------------------|---------------------------|---------------| +|------------------------------|---------------------------|---------------| + + +|-----------|-------------------------17----------22-| +|-----------|-------------18----------------18-------| +|-----------|-19----------------19-------------------| +|-19--------|-------19-------------------------------| +|-----------|----------------------------------------| +|-----------|----------------------------------------| + + + diff --git a/guitar/tabs/Classic/Mozart - Sonata K.331 in A major.tab b/guitar/tabs/Classic/Mozart - Sonata K.331 in A major.tab new file mode 100644 index 0000000..fe315a3 --- /dev/null +++ b/guitar/tabs/Classic/Mozart - Sonata K.331 in A major.tab @@ -0,0 +1,403 @@ +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# + +Date: Wed, 25 Feb 1998 00:24:50 -0800 +From: Ben +Subject: Mozart's Rondo Alla Turka Resend + + + +Attatched is my transcription of Mozart's 'Rondo Alla Turka' for classical +guitar. + + +Thanks, +Ben Neely + +*this time i attatched the file* + + + +W. A. Mozart +Sonata K.331 in A major +Movement 3, 'Rondo alla Turka' + + +Transcription by Ben Neely (unk@uclink4.berkeley.edu) +Release 1.0 +This is just my first rough fingering ideas, please email +all comments/questions so that I can polish this up. Thanks. + + + +Standard tuning. +2/4 timing. +Allegretto. (ouch) + +part A + + | . | . | . | . | . | +E*-----------|------------------------|----0---------1p0---0---|----7p5- +B*-----------|----1---------3p1--0h1--|-------------------4----|-------- +G*--4p2-1h2--|------------------------|------------------------|-------- +D*-----------|---------2----2----2----|---------2----2----2----|-------- +A*-----------|----0----3----3----3----|----0----3----3----3----|----0--- +E*-----------|------------------------|------------------------|-------- + + + + . | . | . | . | . | . +E*--4h5--7p5--4h5--|----8--------------8----|----3s7--5----3----5----|-- +B*-----------------|--------------10--------|--------------5---------|-- +G*-----------------|------------------------|---------4---------4----|-- +D*-----------------|------------------------|------------------------|-- +A*--3----0----3----|----0-------------------|------------------------|-- +E*-----------------|---------8----8----8----|----0----0----0----0----|-- + + + + | . | . | . | . +E*--3s7--5----3----5----|----3s7--5----3----2----|----0----|-Repeat-once +B*------------5---------|--------------5----4----|---------|-----then--- +G*-------4---------4----|---------4--------------|---------|--proceed:-- +D*----------------------|------------------------|---------|------------ +A*----------------------|--------------2----2----|---------|------------ +E*--0----0----0----0----|----0----0--------------|----0----|------------ + +Part B + + | . | . | . | . | . | +E*--0----1----|----3----3----5p3p1p0---|--------------0----1----|----3-- +B*--1----3----|----5----5--------------|----3---------1----3----|----5-- +G*------------|------------------------|----4-------------------|------- +D*------------|------------------------|---------5--------------|------- +A*------------|----3======-------------|------------------------|----3== +E*------------|--------------0======---|----3======-------------|------- + + + + . | . | . | . | . | . +E*--3----5p3p1p0---|------------------------|----0----0----1p0-------|-- +B*--5--------------|----3---------1----3----|----1----1---------3-1--|-- +G*-----------------|----4---------2----4----|------------------------|-- +D*-----------------|------------------------|------------------------|-- +A*===--------------|------------------------|----0=====----3=======--|-- +E*-------0======---|----3======-------------|------------------------|-- + + + + | . | . | . | . | . | . +E*----------------------|----0----0----1p0-------|----------------------- +B*--0---------1----3----|----1----1---------3-1--|----0------------------ +G*--1---------2----4----|------------------------|----1---------4p2-1h2-- +D*-------2--------------|------------------------|----------------------- +A*----------------------|----0=====----3=======--|----------------------- +E*--0======-------------|------------------------|----0====-------------- + + + + | . | . | . | . | . | . +E*----------------------|----0---------1p0----0--|----7p5--4h5--7p5--4h5- +B*--1---------3p1--0h1--|-------------------4----|----------------------- +G*----------------------|------------------------|----------------------- +D*-------2----2----2----|---------2----2----2----|----------------------- +A*--0----3----3----3----|----0----3----3----3----|----0----3----0----3--- +E*----------------------|------------------------|----------------------- + + + + | . | . | . | . | . | . +E*--8===------5----7----|----8----7----5----4----|----5----0----1-------- +B*----------------------|------------------------|-------------------3--- +G*-------8===-----------|------------------------|----------------------- +D*-------7===-----------|--------------0----0----|--------------0----3--- +A*--8===----------------|----7----7--------------|----3----3------------- +E*----------------------|------------------------|----------------------- + + + + | . | | . +E*------------trill--------------------|--------------------------------- +B*--1--------(0h1)=====----------------|-----Repeat-this-last-section---- +G*-------2----1========---2h4---2====--|-----once,-and-then-proceed:----- +D*--2----------------------------------|--------------------------------- +A*------------------------------0====--|--------------------------------- +E*------------0========----------------|--------------------------------- + +Part C + + | . | . | . | . | . | +E*--5----7----|----9---------5----7----|----9----7----5----4----|-------- +B*------------|------------------------|------------------------|----7--- +G*--2----4----|----6---------2----4----|----6----4----2----1----|-------- +D*------------|----7-------------------|----7-------------------|----4--- +A*------------|----0----0----0----0----|----0----0----0----0----|----5--- +E*------------|------------------------|------------------------|-------- + + + + . | . | . | . | . | . +E*-------5----7----|----4----0----5----7----|----9---------5----7----|--- +B*--9---------0----|------------------------|------------------------|--- +G*-----------------|----1---------2----4----|----6---------2----4----|--- +D*--6----7---------|---------2--------------|----7-------------------|--- +A*-------6---------|------------------------|----0----0----0----0----|--- +E*-----------------|----0-------------------|------------------------|--- + + + + | . | . +E*--9----7----5----4----|---------7----4----0----|---5===---|--Repeat---- +B*----------------------|----7----0--------------|----------|-this-last-- +G*--6----4----2----1----|--------------1---------|---2===---|--section--- +D*--7-------------------|----4--------------2----|----------|--then------ +A*--0----0----0----0----|----5-------------------|---0===---|--proceed:-- +E*----------------------|--------------0---------|----------|------------ + +Part D + + | . | . | . | . | . | +E*--9h10-9p7--|----5h7--5p4------------|------------------------|-------- +B*------------|--------------7h10-9p7--|----6h7--9p6-------6----|----7p6- +G*------------|------------------------|--------------6h8----6--|-------- +D*------------|----4=======--7=======--|----6=======--9=======--|----4=== +A*------------|------------------------|------------------------|-------- +E*------------|------------------------|------------------------|-------- + + + + | . | | . | . | . | . +E*----4----------7-|----9p8--9p8--9h10-9p7--|----5h7--5p4------------|--- +B*--7----10p9-10---|------------------------|--------------7h10-9p7--|--- +G*-----------------|------------------------|------------------------|--- +D*=====--7=======--|------------------------|----4=======--7=======--|--- +A*-----------------|----8-------------------|------------------------|--- +E*-----------------|------------------------|------------------------|--- + + + + | . | . | . | . +E*-------4--------------|------------------------|---------|--Repeat-this +B*--5h7----5-------5----|----4h5--7p4-------4----|--2====--|---last------ +G*------------6h8----6--|--------------5h6----5--|---------|---section--- +D*--6=======------------|----4=======------------|---------|-once,-then-- +A*------------7=======--|--------------6=======--|--4====--|---proceed:-- +E*----------------------|------------------------|---------|------------- + +Part E + + | . | . | . | . | . | +E*------------|--------------0h2--4h5--|----5p4--2--------------|-------- +B*--5p3--2----|---------2h3------------|-----------5--5p3----0--|-------- +G*---------4--|----2h4-----------------|-------------------6----|----2h4- +D*------------|------------------------|------------------------|-------- +A*------------|----0=======--0=======--|----2=======------------|----0=== +E*------------|------------------------|--------------4=======--|-------- + + + + . | . | . | . | . | . +E*-------0h2--4h5--|----6===-7--------------|--------------0h2--4h5--|--- +B*--2h3------------|--------------5p3----0--|---------2h3------------|--- +G*-----------------|-------------------6----|----2h4-----------------|--- +D*-----------------|------------------------|------------------------|--- +A*=====--0=======--|------------------------|----0=======--0=======--|--- +E*-----------------|----0---------4---------|------------------------|--- + + + + | . | . | . | . | . +E*--5p4--2--------------|------------------------|--------------- +B*---------5--5p3----0--|----2h5----2--0h3----0--|--------------- +G*-----------------6----|---------2---------1----|----2====------ +D*----------------------|---------4----0----2----|--------------- +A*--2=======------------|----0-------------------|---------0====- +E*------------4=======--|------------------------|--------------- + + + + | . | . | . | . | . | +E*--9h10-9p7--|----5h7--5p4------------|------------------------|-------- +B*------------|--------------7h10-9p7--|----6h7--9p6-------6----|----7p6- +G*------------|------------------------|--------------6h8----6--|-------- +D*------------|----4=======--7=======--|----6=======--9=======--|----4=== +A*------------|------------------------|------------------------|-------- +E*------------|------------------------|------------------------|-------- + + + + | . | | . | . | . | . +E*----4----------7-|----9p8--9p8--9p8--9----|----10p9-10p9-10p9-10p9-|--- +B*--7----10p9-10---|---------------------11-|------------------------|--- +G*-----------------|--------------0---------|------------------------|--- +D*=====--7=======--|----6=======------------|------------------------|--- +A*-----------------|-------------------9----|--------------9=======--|--- +E*-----------------|------------------------|----7=======------------|--- + + + | . | . | . | . | +E*--10p9-7----4h5--7p4--|----5h7--9p5-------4----|----2====--|----------- +B*---------10-----------|--------------6h7----6--|-----------|----------- +G*------------4=======--|----6=======------------|-----------|----------- +D*--6========-----------|------------------------|----4====--|----------- +A*----------------------|--------------4=======--|-----------|----------- +E*----------------------|------------------------|-----------|----------- + +Repeat this last part once, then play part C twice. + +Then play part A twice. + +Then play part B twice. + +Then proceed: + +Part F + + | . | . | . | . | . | +E*----5----7--|------9---------5----7--|------9----7----5----4--|-------- +B*------------|------------------------|------------------------|------7- +G*--2----4----|----6---------2----4----|----6----4----2----1----|-------- +D*------------|------------------------|------------------------|----4--- +A*------------|----0-------------------|----0---------0---------|----5--- +E*------------|------------------------|------------------------|-------- + + + + . | . | . | . | . | . +E*----4----5----7--|------4----0----5----7--|------9---------5----7--|--- +B*------------0----|------------------------|------------------------|--- +G*-----------------|----1---------2----4----|----6---------2----4----|--- +D*--6----7---------|----2----2--------------|------------------------|--- +A*-------6---------|------------------------|----0-------------------|--- +E*-----------------|---------0--------------|------------------------|--- + + + 1st Ending + [----------] + | . | . | . | . | +E*----9----7----5----4--|------7----7----4----0--|----5===---|-Repeat---- +B*----------------------|---------0--------------|-----------|-once,----- +G*--6----4----2----1----|--------------1---------|----2===---|-then-2nd-- +D*----------------------|----4---------2----2----|-----------|-time-end-- +A*--0---------0---------|----5-------------------|----0===---|-like-so:-- +E*----------------------|-------------------0----|-----------|----------- + + + | . | . | . | . | . | . +E*--5---------9======-9-|---(9-------------------|---(9------------------ +B*----------------------|---)10------------------|---)10----------------- +G*--2-------------------|---(9-------------------|---(9------------------ +D*----------------------|---)11------------------|---)11----------------- +A*--0----0----0----0----|---(0----0----0----0----|---(0----0----0----0--- +E*----------------------|------------------------|----------------------- + + + | . | . | . | . | . | . +E*--10p9----9-10p9----9-|---)10------------------|----9h10-9h10-9h10-9h10 +B*-------12--------12---|---(10------------------|----10---10---10---10-- +G*----------------------|---)11------------------|----9----9----9----9--- +D*----------------------|---(0----0----0----0----|----------------------- +A*--0----0----0----0----|------------------------|----0----0----0----0--- +E*----------------------|------------------------|----------------------- + + + | . | . | . | . | . | . +E*--7--------------12---|---)9-------------------|---)9------------------ +B*--9-------------------|---(10------------------|---(10----------------- +G*--9-------------------|---)9-------------------|---)9------------------ +D*----------------------|---(11------------------|---(11----------------- +A*----------------------|----0----0----0----0----|----0----0----0----0--- +E*--0----0----0----0----|------------------------|----------------------- + + + | . | . | . | . | . | . +E*--10p9----9-10p9----9-|---)10------------------|----10p9--------------- +B*-------12--------12---|---(10------------------|----10----------------- +G*----------------------|---)11------------------|----9------------------ +D*----------------------|---(0----0----0----0----|----------------------- +A*--0----0----0----0----|------------------------|----0----0----0----0--- +E*----------------------|------------------------|----------------------- + + | . | . | . | . | . | . +E*--5h7--5h7--5h7--5h7--|----5---------9------9--|----9================== +B*--9----9----9----9----|------5----5----5-------|------5----5----5----5- +G*----------------------|---------6---------6----|---------6---------6--- +D*----------------------|------------------------|----------------------- +A*----------------------|----0---------0---------|----0---------0-------- +E*--0----0----0----0----|------------------------------------------------ + + + | . | . | . | . | . | . +E*--9=================--|----10p9-7h9--10p9-7h9--|----10----------------- +B*----5----5----5----5--|------------------------|-------7---7----7----7- +G*-------6---------6----|------------------------|---------7---------7--- +D*----------------------|------------------------|----0---------0-------- +A*--0---------0---------|----0----0----0----0----|----------------------- +E*----------------------|------------------------|----------------------- + + + + | . | . | . | . | . | . +E*--8h9--9----9----9----|----7--------------12---|---)9------------------ +B*-----5---5----5----5--|------9----9----9-----9-|---(10----------------- +G*----------------------|---------9--------------|---)9------------------ +D*----------------------|------------------------|---(11----------------- +A*--0---------0---------|------------------------|----0----0----0----0--- +E*----------------------|----0---------0---------|----------------------- + + + | . | . | . | . | . | . +E*-)9-------------------|----10p9----9-10p9----9-|---(10----------------- +B*-(10------------------|---------12--------12---|---)10----------------- +G*-)9-------------------|------------------------|---(11----------------- +D*-(11------------------|------------------------|----0----0----0----0--- +A*--0----0----0----0----|----0----0----0----0----|----------------------- +E*----------------------|------------------------|----------------------- + + + | . | . | . | . | . | . +E*--10p9----------------|----5h7--5h7--5h7--5h7--|----5--------------9--- +B*--10------------------|----9----9----9----9----|----5------------------ +G*--9-------------------|------------------------|----6--------------6--- +D*----------------------|------------------------|----------------------- +A*--0----0----0----0----|------------------------|----0----0----0----0--- +E*----------------------|----0----0----0----0----|----------------------- + + + + | . | . | . | . | . | . +E*-----------------12---|-------------------9----|---------9---------12-- +B*--10------------------|----10------------------|----10--------10------- +G*-----------------9----|-------------------6----|---------6---------9--- +D*--7-------------------|----7-------------------|----7---------7-------- +A*--0----0----0----0----|----0----0----0----0----|----0----0----0----0--- +E*----------------------|------------------------|----------------------- + + + + | . | . | . | . | . | . +E*-----------(5---------|---(5===============----|----------------------- +B*--10-------)5---------|---)5===============----|----------------------- +G*-----------(6---------|---(6===============----|-------fin------------- +D*--7--------)7---------|---)7===============----|----------------------- +A*--0--------(0---------|---(0===============----|----------------------- +E*----------------------|------------------------|----------------------- + + +Tablature Explanation: + Tempo Beats + /---------\ + | | | + / E-|--------|-------|-------|----(0----|--------0===| + | B-|--------|-------|-------|----)1----|------1=----| + String| G-|--<12>--|--5h8--|--8p5--|----(2----|----2=------| + Tuning| D-|--------|-------|-------|----)2----|------------| + | A-|--------|-------|-------|----(0----|0==---------| + \ E-|--------|-------|-------|----------|------------| + + Harmonic Hammer Pull Arpeggiate Sustain + on off + + diff --git a/guitar/tabs/Classic/Paganini - Andantino in C.tab b/guitar/tabs/Classic/Paganini - Andantino in C.tab new file mode 100644 index 0000000..b087f38 --- /dev/null +++ b/guitar/tabs/Classic/Paganini - Andantino in C.tab @@ -0,0 +1,117 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + + +Date: Wed, 19 Apr 2000 00:01:55 -0400 +From: Weed +Subject: classical/p/paganini_nicolo/Andantino in C + +Andantino in C - Niccolo Paganini (1782-1849) + +(No 1 from "26 Orig Comps for solo guitar") + +guitar tab by Weed 17 April 2000 + + +********************************************************* +tab explanation + +left hand fingering below the tab +\ slide down from previous note +/ slide up from previous note +-----6----- 6 notes played during 1 beat of the bar +CI barre on the first fret +CV barre on the fifth fret +3p1 pull-off from the 3rd fret to the 1st (acciacatura) +********************************************************* + + +C Major 2/4 Andantino + +0 --.-----|--|-----.-----|-----.-----|--|-----.-----|-----.-----| +E---3-----|--5-----3----\2----/3-----|--5-----3-----2-----3-----| +B---5-----|--6-----5----\4----/5-----|--6-----5-----4-----5-----| +G---------|--------------------------|--------------------------| +D---------|--------------------------|--------------------------| +A---------|--------------------------|--------------------------| +E---------|--------------------------|--------------------------| + 1 2 1 + 3 3 3 + + + -----6----- ----6------ CI........... +3 -|--|-----.-----|-----.-----|--|-----.-----|-----.-----| +E--|--------0-----------1-----|--------0-----------3-----| +B--|------1---1-------3---3---|--------1-----3-----5-----| +G--|----0-------0---0-------0-|--------0-----------------| +D--|--------------------------|--------------------------| +A--|--3-----------2-----------|--3-----------3-----------| +E--|--------------------------|--------------------------| + 2 4 1 + 3 + +5 --|--|-----.-----|-----.-----|--|-----.-----|-----.-----| +E---|--5-----3----\2----/3-----|-/5-----3-----2-----3-----| +B---|--6-----5----\4----/5-----|--6-----5-----4-----5-----| +G---|--------------------------|--------------------------| +D---|--------------------------|--------------------------| +A---|--------------------------|--------------------------| +E---|--------------------------|--------------------------| + 2 1 + 3 3 + + + -----6----- ----6------ +7 -|--|-----.-----|-----.-----|--|-----.-----|--||--.-----| +E--|--------0-----------1-----|--------0-----0--||--0-----| +B--|------1---1-------3---3---|--------1-----1--||--------| +G--|----0-------0---0-------0-|--------0-----0--||--------| +D--|--------------------------|-----------------||--------| +A--|--3-----------2-----------|--3--------------||--------| +E--|--------------------------|-----------------||--------| + + + CV........... +9 -|--|-----.-----|-----.-----|--|-----.-----|-----.-----| +E--|--8-----7-----5-----------|--------------0-----------| +B--|--------------------5-----|--6-----------------3-----| +G--|--------------------------|--------------------------| +D--|--------------------------|--------------------------| +A--|--0-----------0-----------|--------------------------| +E--|--------------------------|--0-----------------------| + 4 3 1 + + +11-|--|-----.-----|-----.-----|--|-----.-----|-----.-----| +E--|--------------------------|--------------------0-----| +B--|--3p1---0-----1-----------|--------0-----------------| +G--|--------------------2-----|--1-----------------------| +D--|--------------------------|--------------2-----------| +A--|--0-----------------------|--------------------------| +E--|--------------------------|--0-----------0-----------| + + + CI........... +13-|--|-----.-----|-----.-----|--|-----.-----|-----.-----| +E--|--8-----7-----5-----------|--------------0-----------| +B--|--------------------5-----|--6-----------------3-----| +G--|--------------------------|--------------------------| +D--|--------------------------|--------------------------| +A--|--0-----------0-----------|--------------------------| +E--|--------------------------|--0-----------------------| + + + +15-|--|-----.-----|-----.-----|--|-----.-----|-----.-----|| + +E--|--------------------------|--------------------------|| +B--|--1-----------0-----------|--------------------------|| +G--|--------2-----------1-----|--2-----2-----2-----------|| +D--|--------------------------|--------------------------|| +A--|--0-----------------------|--0-----0-----0-----------|| +E--|--------------0-----------|--------------------------|| + \ No newline at end of file diff --git a/guitar/tabs/Classic/Paganini - Arietta in D.tab b/guitar/tabs/Classic/Paganini - Arietta in D.tab new file mode 100644 index 0000000..68c1481 --- /dev/null +++ b/guitar/tabs/Classic/Paganini - Arietta in D.tab @@ -0,0 +1,119 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + + +Date: Wed, 19 Apr 2000 00:03:14 -0400 +From: Weed +Subject: /classical/p/paganini_nicolo/Arietta in D.tab + +Arietta in D - Niccolo Paganini (1782-1849) + +(No 2 from "26 Orig Comps for solo guitar") + +guitar tab by Weed 17 April 2000 + + +********************************************************* +tab explanation + +left hand fingering below the tab +\ slide down from previous note +2h3 hammer on from the 2nd fret to the 3rd (acciacatura) +3p2 pull-off from the 3rd fret to the 2nd (acciacatura) +********************************************************* + + +D major 4/4 + +0 +-|--.---|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---.---|---.- +--| +E--2----0-|--------------------------0-----2-|--3-------0---------------5--- +--3-| +B---------|--2h3-------------------3---------|------------------------------ +----| +G---------|----------2-----------------------|------------------------------ +----| +D---------|--0---------------0---------------|------------------------------ +----| +A---------|----------------------------------|--0---------------0----------- +----| +E---------|----------------------------------|------------------------------ +----| + 1 4 + 2 + + +3 -|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---.---|---.---| +E--|--3p2---0-----------------------0-|--------------------------2-----0-| +B--|----------3-----2-0-----2-3-------|--2-----3-0-----2-----------------| +G--|----------------------------------|------------------2---------------| +D--|--0-------------------------------|----------------------------------| +A--|----------------------------------|--0---------------0---------------| +E--|------------------3---------------|----------0-----------------------| + 2 + + +5 -|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---.---|---.---| +E--|--------------------------0-----2-|--2h3-----0---------------5-----3-| +B--|--2h3-------------------3---------|----------------------------------| +G--|----------2-----------------------|----------------------------------| +D--|--0---------------0---------------|----------------------------------| +A--|----------------------------------|--0---------------0---------------| +E--|----------------------------------|----------------------------------| + + +7 -|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---||--|---.---| +E--|--2-----5-5p3---2-0-----3-3p2-0---|----------------------||--5-----5-| +B--|----------------------------------|--3-------3-------3---||--7-----7-| +G--|----------------------------------|----------------------||----------| +D--|--0-------------------------------|--0-------0-------0---||----------| +A--|------------------0---------------|----------------------||----------| +E--|----------------------------------|----------------------||----------| + 1 + 3 + + +9 -|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---.---|---.---| +E--|--7-----5-7-----5-7-----5-3-----2-|--0-----2-3-----2-0-----2-3-----4-| +B--|--8-----7-8-----7-8-----7-5-----3-|--2-----3-5-----3-2-----3-5-----6-| +G--|--0---------------0---------------|----------------------------------| +D--|----------------------------------|----------------------------------| +A--|----------------------------------|--0---------------0---------------| +E--|----------------------------------|----------------------------------| + 2 1 + 3 3 + + +11-|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---.---|---.---| +E--|--5----\4-5-----4-5-----3-2-----0-|--------------------------2-----0-| +B--|--7----\6-7-----6-7-----5-3-----2-|--3-----2-0-----4-2---------------| +G--|----------------------------------|--4-----2-1-----3-2---------------| +D--|--0---------------0---------------|----------------------------------| +A--|----------------------------------|------------------0---------------| +E--|----------------------------------|--0-------------------------------| + 1 + 3 + + + +13-|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---.---|---.---| +E--|--------------------------0-----2-|--2h3-----0---------------5-----3-| +B--|--2h3-------------------3---------|----------------------------------| +G--|----------2-----------------------|----------------------------------| +D--|--0---------------0---------------|----------------------------------| +A--|----------------------------------|--0---------------0---------------| +E--|----------------------------------|----------------------------------| + + +15-|--|---.---|---.---|---.---|---.---|--|---.---|---.---|---.---|| +E--|--2-----5-5p3---2-0-----3-3p2---0-|--------------------------|| +B--|----------------------------------|--2h3-----3-------3-------|| +G--|----------------------------------|--------------------------|| +D--|--0-------------------------------|--0-------0-------0-------|| +A--|------------------0---------------|--------------------------|| +E--|----------------------------------|--------------------------|| diff --git a/guitar/tabs/Classic/Toccata de Bach en E mineur pour Orgue.tab b/guitar/tabs/Classic/Toccata de Bach en E mineur pour Orgue.tab new file mode 100644 index 0000000..11895a8 --- /dev/null +++ b/guitar/tabs/Classic/Toccata de Bach en E mineur pour Orgue.tab @@ -0,0 +1,271 @@ +Toccata de Bach en E mineur pour Orgue. +www.multimania.com/guitarweb + +Transcritpion pour Guitar Web par Francois LEMASSON. + +un conseil: achetez la verion originale et ecoutez, ecoutez, ecoutez, ecoutez.... + +* = natural harmonic x= ghost note s= slide h= hammer on p= pulloff +b = bend bf = bend full br bfr bend then release +~ = vibrato + +|-17-15-17----15---------------------------------------| +|---------------18-17-15-14-15----10-8-10--------------| +|--------------------------------------------9-10-6-7--| +|------------------------------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| + +|------------------------------------------------------| +|---------------------------------------------------5--| +|-----------------------------7------------------6-----| +|-7---7-----------------------7------------5--8--------| +|--10-----10-9-7--------------5------4--7--------------| +|----------------10-9-10-------------------------------| + +|------------------------------------------------------| +|-5----------------------------------------------------| +|-6----------------------------------------------------| +|-8---------------5------------------------------------| +|-7---------------------7----/9~-----------------------| +|----------------------------------------------------9-| + + +|----------------------------------------------------| +|----------------------------------------------------| +|----------------------------------------------------| +|---------------------------3-5p---3-5p---3-5p---3-5-| +|-5-7p---5-7p---5-7p---5-7------7------7------7------| +|------9------9------9-------------------------------| + + +|------------------------------------------------| +|------------------------------------------------| +|-2-3p---2-3p---2-3p---2~------------------------| +|------5------5------5------------------------11-| +|------------------------------------------------| +|------------------------------------------------| + + +|------------------------------------------------------| +|-----------------------------6-8p---6-8p---6-8p---6-8-| +|-7-9p----7-9p----7-9p----7-9------9------9------9-----| +|-----11------11------11-------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| + + +|-5-6p---5-6p---5-6p---5~------------------------------| +|------8------8------8---------------------------------| +|---------------------------------------------------14-| +|------------------------------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| + + +|-------------------------------------------------------| +|-------------------------------------------------------| +|---15-----15-----14-----14-----12-----12-----10----10--| +|-17--14-17--14-15--12-15--12-14--10-14--10-12--8-12--8-| +|-------------------------------------------------------| +|-------------------------------------------------------| + + +|------------------------------------| +|------------------------------------| +|---9----9---7---7---5---5---3---3---| +|-10-7-10-7-8-5-8-5-7-3-7-3-5-2-5-2--| +|------------------------------------| +|------------------------------------| + + +|------------------------------------------------------| +|------------------------------------------------------| +|--2----2----------------------7-----------------------| +|-3--0-3-0-2-5---5-------------7-----------------------| +|-------------4-7-4~-----------5-----------------------| +|------------------------------------------------------| + + +|-------------------------------------------------------| +|-------------------------------------------------------| +|---0-3--3-2--------------------------------------------| +|--2--------5-3-2-------------2-5-3-2-3p-2h-3p---2~-----| +|-4---------------5-4-2--4-0-4--------------------------| +|-------------------------------------------------------| + + +|-----------5-10p-5h-12p-5h-13p-5h-10p-5h-12p-5h-13p-5h-15p-5h-12p-5h-| +|-2-------------------------------------------------------------------| +|-3-------------------------------------------------------------------| +|-0-------------------------------------------------------------------| +|---------------------------------------------------------------------| +|---------------------------------------------------------------------| + + +|-13p-5-15p-5-17p-5-13p-5-15p-5-17p-5-18p-5-15p-5-17p-5-13p-5-15p-5-12p-5-13p-5-10p-5-12p-5-9p-5| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| + + +|-10p-5------------------------------------------------------------------| +|------------------------------------------------------------------------| +|------------------------------------------------------------------------| +|------19p-7-20p-7-17p-7-19p-7-15p-7-17p-7-14p-7-15p-7-12p-7-14p-7-11p-7-| +|------------------------------------------------------------------------| +|------------------------------------------------------------------------| + + + +|-----------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------| +|-13-7------------------------------------------------------------------------------------| +|------12p-0-13p-0-10p-0-12p-0-8p-0-10p-0-7p-0-8p-0-5p-0-10p-0-7p-0-8p-0-5p-0-7p-0-4p-0---| +|-----------------------------------------------------------------------------------------| + + + +|------------------------------------------------------| +|------------------------------------------------------| +|----------3-------2-------0----------2----3----2----0-| +|--------3---3---2---2---0---0------2------3----2----0-| +|-5p---5-------3-------1-------0--4------5----0----1---| +|------------------------------------------------------| + + + +|------------------------------------------------------| +|------------------------------------------------------| +|-2--------3-------2-------0----------2----3----2----0-| +|-2------3---3---2---2---0---0------2------3----2----0-| +|-0----5-------3-------1-------0--4------5----0----1---| +|------------------------------------------------------| + + + +|--------------------------------------------------------| +|-10-----------------------------------------------------| +|-9----------------------------------------------------6-| +|-7------7-5-------------------------5-7-5-----------7---| +|------------9-7-5-------------5-7-8-------8-7-8-5-8-----| +|------------------8-7-8-5-7-8---------------------------| + + + +|-----------------------------------------------------------------| +|---------------------10-11~------11----10---8---10---------11----| +|-7-----------9-10-12-------------10----9----7---9-------10---10--| +|-----9-10-12------------------12-----7----8-----7----12----------| +|--12--------------------------------------------0----------------| +|-----------------------------------------------------------------| + + + +|-------------------------5---------------------------------------| +|------10-------8-------5---------11----10---8---10---------------| +|----9----9---7---7---6-----------10----9----7---9------4---------| +|-10--------8-------7----------12-----7----8-----7------3---------| +|------------------------------------------------0------5---------| +|-----------------------------------------------------------------| + + + +|--------------------------5---------------------------------| +|------------------11~--------8-6-5-6-5----------------------| +|-6----------6-9-12---------------------7-6-7-5--------------| +|-5------7-9------------------------------------8-7-5-3-2-0--| +|-7----------------------------------------------------------| +|-5----------------------------------------------------------| + + + +|------------------------------------------------------| +|------------------------------------------------------| +|-3------------------------9--------------9------------| +|-2---------------------10---10-9-11-9-10---10-9-11-9--| +|-4----------------------------------------------------| +|------------------------------------------------------| + + + +|--------------------------------------------------------------| +|--------------------------------------------------------------| +|----9--------------9------------------------------------------| +|-11---11-8-11-8-11---11-8-11-8----8---------------8-----------| +|-------------------------------10---10-7-10-7-10----10-7-10-7-| +|--------------------------------------------------------------| + + + +|--------------------------------------------------------| +|--------------------------------------------------------| +|--------------------------------------------------------| +|----8---------------8-----------------------------------| +|-10---10-7-10-7-10----10-7-10-7---7-----------7---------| +|--------------------------------9---9-6-9-6-9---9-6-9-6-| + + + +|--------------------------------------------------------| +|--------------------------------------------------------| +|--------------------------------------------------------| +|--------------------------------------------------------| +|---7----------7------------10--------------10-----------| +|-9--9-6-9-6-9---9-6-9-6-12----12-9-12-9-12----12-9-12-9-| + + + +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|------------------------------------8----8----8----8----8----8-| +|----10--------------10-----------10---10---10---10---10---10---| +|-12----12-9-12-9-12----12-9-12-9-------------------------------| + + + +|---------------------------------------------------------------| +|------------------------------------2--------------------------| +|---------9----9----9----9----9------2--------------------------| +|-11-8-11---11---11---11---11--------2------------3-------------| +|------------------------------------0------------3-------------| +|-------------------------------------------------1-------------| + + +|---------------------------------------------------------| +|------------------2--------------------------------------| +|-3----------------2--------------------------------------| +|-3--------2--0----2------------------------2--3--0--2----| +|-1----------------0------------------------------------4-| +|---------------------------------------------------------| + + +|--------------------------------------------------------| +|-----------------------------------------------2--------| +|---------------------------------------------------0----| +|--0------------------5~----3----0-----------------------| +|----2--4--0--1-----0-------------------0----------------| +|----------------4---------------------------------------| + + +|--------------------------------------------------| +|-3------------------------------------------------| +|-2------------------------------------------------| +|-0------------------------------------------------| +|--------------------------------------------------| +|----------------0---1---0-------------------------| + + +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| + + + diff --git a/guitar/tabs/Classic/bach bouree.prj b/guitar/tabs/Classic/bach bouree.prj new file mode 100644 index 0000000..fd4826c --- /dev/null +++ b/guitar/tabs/Classic/bach bouree.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=bach bouree.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8) diff --git a/guitar/tabs/Classic/bach bouree.tab b/guitar/tabs/Classic/bach bouree.tab new file mode 100644 index 0000000..e20dbe3 --- /dev/null +++ b/guitar/tabs/Classic/bach bouree.tab @@ -0,0 +1,60 @@ +submitted by treyrab +treyrab@hotmail.com + +2X +||--0--2--3--2--0--------0--2---------------0----------- +||------------------4------------0----2--4-------3--1--- +||------------------------------------------------------ +||------------------------------------------------------ +||-----------0------2----0------------------------------ +||--3--2--0----------------------3----2-----0----2------ + +------------------------------------------0--2----3----2--0-------0--2-- +-0---------------------0-------------------------------------4---------- +------2--0-------0--2-----2--0------------------------------------------ +------------4--------------------4--2----------------------------------- +------0-----2----0-----------2-------------------------0-----2----0----- +-3---------------------3------------0--2--3--2----0--------------------- + +------------------------------------------------|| +--0----2--4--5----3--1---0----------------------|| +-----------------------------2--0---------0---0-|| +-----------------------------------4----------0-|| +-----------------------------3-----5---5------2-|| +--3----2-----0----2------3--------------------3-|| + +---------------------------3------0-------------------- +-0--------3-------1--0--------3--------0--3--1--------- +-----0---------2----------------------------------4--2- +---------------0----------------------------------0---- +---------------------------2------3----------0--------- +-3--------2----------3-----------------4--------------- + +-------------------------------------------------------3------0---------- +------------1-----------------------------3-------0-------3--------0--3-- +--1---2--4-------4--2---2--------------------2--------------------------- +--2---------2------------------------------------------------------------ +------0-----------------0--2--0------------------------2------3---------- +-----------------0---------------3--2-----2-------3----------------4----- + +-------5-------------0--------------------------------------------7----- +--1-------5--7----2-------3----2-------------0---0-------------------7-- +----------------------------------4--3---------------------------------- +-------------0-----------------2-----4-----------------------1---------- +--0----4----------1-------2----------------------2--1--2--4------------- +------------------------------------------2-----------------------7----- + +--4---2-0--5--0--3--2--0-----3-----1--0--5--0--2-----0-----------------0- +--------------------------3-----3-----------------2-----4--0------------- +------------------------------------------------------------------------- +--2---0-------------0---------------------------------------------------- +-----------4--0--------3-----2--------3--2-----0--------2-----3--2--0---- +--------------------------------3-----------------2--------------------4- + +---------------------------------------------------------------------- +-0--1-----3-----0-----1----------------------------------------------- +-------------2-----------0--2-----4------------------------0---------- +-------2--4--------1--2--------------4--5--4--2--1---2--4-----4--2--2- +----0--------------------------4--6--------0-----2---0-----2---------- +----------------3-----------2-----------0---------------------------0- + diff --git a/guitar/tabs/Classic/caprice1.prj b/guitar/tabs/Classic/caprice1.prj new file mode 100644 index 0000000..3648994 --- /dev/null +++ b/guitar/tabs/Classic/caprice1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=caprice1.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16) diff --git a/guitar/tabs/Classic/caprice1.tab b/guitar/tabs/Classic/caprice1.tab new file mode 100644 index 0000000..0c033fb --- /dev/null +++ b/guitar/tabs/Classic/caprice1.tab @@ -0,0 +1,40 @@ + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Nicolo Paganini +Caprice No.1 Opus 1 +letostak@netcom.com +This is a pretty good arpeggio excersize...Played at warp speed...Good +Luck with this one. + + +|----------12-12----------------------------------|----------12-12---------- +|-------12-------12----------------19-19----------|-------12-------12------- +|----12-------------12----------16-------16-------|----12-------------12---- +|-14-------------------14----16-------------16----|-14-------------------14- +|-------------------------17-------------------17-|------------------------- +|-------------------------------------------------|------------------------- + + +-------------19-19--------------|----------12-12---------------------------- +----------19-------19-----------|-------12-------12----------------17-17---- +-------19-------------19--------|----12-------------12----------16-------16- +----16-------------------16-----|-14-------------------14----16------------- +-14-------------------------14--|-------------------------17---------------- +--------------------------------|------------------------------------------- + + +--------|----------12-12----------------------19-19--------------|| +--------|-------12-------12----------------19-------19-----------|| +--------|----12-------------12----------19-------------19--------|| +-16-----|-14-------------------14----16-------------------16-----|| +----17--|-------------------------14-------------------------14--|| +--------|--------------------------------------------------------|| + + + + diff --git a/guitar/tabs/Classic/caprice11.tab b/guitar/tabs/Classic/caprice11.tab new file mode 100644 index 0000000..eb905c1 --- /dev/null +++ b/guitar/tabs/Classic/caprice11.tab @@ -0,0 +1,150 @@ + +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# +Date: Sun, 25 Jan 1998 15:53:07 +0000 +From: dearhous +Subject: TAB: Caprice #11, Paganini + + Paganini Caprice #11 + + (transcribed by Paul Dearhouse: dearhous@pilot.msu.edu + feel free to write me with corrections, comments, or suggestions) + + This is a slower caprice by Paganini, from his 24 Caprices. It is also + one of the more beautiful sounding, in my opinion. The tempo is slow, + and I have only transcribed the first slow section. A second, faster + section follows this one, which is then followed by the slow section + again to finish the caprice. I have included chords below the TAB, + and comments are on the top. + + + CAPRICE #11 + + +(trill) + E-------7--5--3--1---------------------------------------------------- + B--8----0----------6-----5----3----1----------------5--3-------------- + G--5--------------------------1---------5--7-5-4-5---------4h5p4h5p4-- + D-------0----------5-----5---------2----4-----------5------3---------- + A--7---------------3-----3----2----0---------------------------------- + E---------------------------------------4-----------3------3---------- + C G Csus4 C E7 Am D7b5/Ab G G7 + + + + (tr) + E----8--7-5---------------8--765---------------8---6-4-4-3---3--2--3---- + B-----------8-------------------98-------------------------------------- + G----5----------4h5p4h5---5----------454545----5-------------------4---- + D---------------3--------------------3---------------------------------- + A----7--------------------7--------------------6-------------------5---- + E---------------3--------------------3---------------------------------- + C G7 C G7 Cm G + + + + ...this is the "minor" section, mood change.... + (*tension right here!) + E----------6--5---------------3--1------------------------------------- + B----8-----------8--6--4------------4--3--1--4--3--6--4--4--4--3------- + G----------3------------------0---------------------------------------- + D----8-----------------5----------------------------------------------- + A----6-----5-----------3------1--------------0--1--2--3--2--1--1------- + E-----------------------------------------4---------------------------- + Eb Bb/D Cm Gm/Bb *??? Bb + + + + (tr) (tr) (tr) + E-------------------------------------------------------------------- + B---------------4--3--1-----------------4-3-2-1---------------------- + G----3h5p3h5p3-----------3----3h5p3h5-----------4-3---4h5p4h5-------- + D---------------1-----------------------1---------------------------- + A-------------------------------------------------------------------- + E----4----------3-------------4---------3-------------4-------------- + Ab Eb Ab Eb + + + + more tension... slowing down..... + E-----------------------4-3---4-3------8------------------------ + B-----3-4-4-3------------------------8-----9-6---8-4-----6--3--- + G---5---------5--4-5--4-----4------5-----6-----5------4--------- + D---------------------5-----3------5-----6-----5------3--------- + A----------------------------------6-----8-----6------5--------- + E---3-----4---3------------------------------------------------- + G7 Cm Db Cm G7 + + + + speed up slowly... (this part is just like the beggining) + E-------------------------------7-5---------------------------------- + B--------------------5-6-7-8--------8-6--6---5----3----1------------- + G------------5-6-7-8-------5----4-----------------1------------------ + D---5--7-8-9-----------------------------5---5---------2------------- + A--------------------------7----5--------3---3----2----0------------- + E-------------------------------------------------------------------- + C G C E7 Am + + + ...tension building.... + E----------------------3--------8-7------7-8------10-8-----8-10-------- + B---------------5--3---------8-------10-------10--------12-------12---- + G---5--7-5-4-5---------4-----5----------------7------------------9----- + D---4-----------5------3-------------10-----------------12------------- + A----------------------------7-------8--------9---------10-------11---- + E---4-----------3------3----------------------------------------------- + D7b5/Ab G G7 C F D G E + + + |-------beautiful chord... + V + E--12-10--8--10-12--13--10----10----------------------------- + B---------------------------------13---13------12------------ + G---------9---------10--------9--------12------12------------ + D---------7-------------------------------------------------- + A-------------------11--------10-------10------10------------ + E------------------------------------------------------------ + Am G#dim?? Cadd9 Gadd11 G + + + ending flourish hold.... + E-------------------------------------------------------------- + B---------------------------------------------3---------------- + G----5-----5---5-----5---5---5---3---3---2--------------------- + D----2-----3---5-----7---7---4---5---2---3----3---------------- + A----3-----5---7-----8---6---5---5---3---3--------------------- + E---------------------------------------------4---------------- + C Dm7 C/E F F7 D7 Gm C7 F G#dim + + + forte + E---------------------------| + B---------------------------| + G----5------4------5--------| + D----2-------------2--------| + A-----------5------3--------| + E----3------3---------------| + C G C + + + NOTE: The chords sound best when you "strum" them with your fingers, + where each note is a little offset from the other. For example, + the last flourish before the ending could be written as: + + hold.... + E------------------------------------------------------------------- + B------------------------------------------------------3------------ + G------5-----5----5-----5----5----5----3----3----2------------------ + D-----2-----3----5-----7----7----4----5----2----3-----3------------- + A----3-----5----7-----8----6----5----5----3----3-------------------- + E----------------------------------------------------4-------------- + C Dm7 C/E F F7 D7 Gm C7 F G#dim? + + + ...but since it was easier to write the TAB with the chord notes + right on top of each other, I just did that to save space. + Well, that was just a tip or suggestion, HAVE FUN! + diff --git a/guitar/tabs/Classic/caprice16.prj b/guitar/tabs/Classic/caprice16.prj new file mode 100644 index 0000000..4381b57 --- /dev/null +++ b/guitar/tabs/Classic/caprice16.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=caprice16.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16) +TEMPO=651578 diff --git a/guitar/tabs/Classic/caprice16.tab b/guitar/tabs/Classic/caprice16.tab new file mode 100644 index 0000000..f979fe7 --- /dev/null +++ b/guitar/tabs/Classic/caprice16.tab @@ -0,0 +1,202 @@ + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Nicolo Paganini +Caprice No.16 +letostak@netcom.com +This is played at a very fast speed, but it also is very pretty when +played slow, especially the begining. Happy Picking + + +||-------3--5--6--2--5--3-------|------------10--8-------------------------| +||-----3------------------3-----|-------------------10--7------------------| +||---3----------------------3---|---2---2------------------7---------------| +||-5--------------------------5-|-4---1---0-------------------10--7--------| +||------------------------------|------------------------------------------| +||------------------------------|------------------------------------------| + + +|-----------------8---------------------|----------------------------13p10--| +|--------------7-----10--7--------------|-------------------------12------12| +|-----------8---------------8-----------|----7-----7-----------12-----------| +|----7--10---------------------10--8--7-|-8-----7-----------12--------------| +|-9-------------------------------------|------------10h14------------------| +|---------------------------------------|-----------------------------------| + + +|-8----------------------11p8------|-6-----------------------8-------------| +|---8-----------------10-------10--|---6---------11-10-8-------10----------| +|-----8------------10--------------|-----7------------------------11-------| +|-------10------10-----------------|-------8-------------------------------| +|------------12--------------------|----------------------9----------------| +|----------8-----------------------|----------6----------------------------| + + +|----------------------------------|----------10----14-10-----------------|| +|-11p8-----11---11---11---11---11--|----10-------10-------10--------------|| +|----------------------------------|-------11----------------11-----------|| +|----------------------------------|----------------------------12-10-----|| +|-------10----8----6----5----4-----|----------------------------------12--|| +|----------------------------------|-10-----------------------------------|| +Repeat from begining + + + +|-------------------------|---------------------------|--------------------- +|---------6-9-8-6-----9-8-|-6-------------------------|-----------7-6------- +|-------7---------7-------|---8-7-5---8----10---8---7-|-------5-8-----8-5--- +|---5-9-------------9-----|---------------------------|---3-7-------------7- +|-------------------------|---------------------------|--------------------- +|-7-----------------------|---------8---10----8---6---|-5------------------- + + +-----|------------------------------|-----------------------------|--------- +-7-6-|---------------------11-------|-10p8------8p6---------------|--------- +-----|-8-7-5-----7----10---------10-|-------------------10p8------|-8p7----- +-----|-------8----------------------|-----------------------------|--------- +-----|-------------------8----------|------6-10-----5-8-----------|--------- +-----|---------6---10---------10----|------------------------8-11-|--------- + + +---------------------13h18-|-------------------------------------|---------- +------------------15-------|-------14-------------14-------------|---------- +----------7h10-15----------|-14-15----15-------------15----------|---------- +--------8------------------|-------------17-15-14-------17-15-14-|-17-15-14- +------8--------------------|-------------------------------------|---------- +-6-10----------------------|-------------------------------------|---------- + + +----------------------------|-------------------------------------|--------- +----------------------------|-------------------------------------|--------- +----------------------------|-------------------------------------|--------- +-16-15-14-17-15-14-15-13----|-12----------------------------------|--------- +-------------------------15-|----13-12-14-13-12-15-13-12-13-------|--------- +----------------------------|-------------------------------14-12-|-15-13--- + + +-12-14-13-12-15-13-12-13-------|-------------------------------------|------ +-------------------------16-13-|-15----------------------------------|------ +-------------------------------|----15-14-16-15-14-17-15-14-15-------|------ +-------------------------------|-------------------------------16-14-|-17-15 +-------------------------------|-------------------------------------|------ +-------------------------------|-------------------------------------|------ + + +------------------------------|----------------------------|---8-5-8---8---8 +------------------------------|----------------------------|---------6------ +------------------------------|----------6-7---------------|-------------8-- +-14-16-15-13------------------|--------8-----7-10-8--------|---------------- +-------------15-12------------|------8--------------8------|---------------- +-------------------13-12-11-8-|-6-10------------------10-6-|-5-------------- + + +---8---8-|-------------------------|---10-6-10---10---10---10---10-|----11-- +---------|---------3-4---3---------|-----------6-------------------|-------- +-5-------|-----2-5-----4---5-2-----|----------------7--------------|-------- +-----7---|-------------------------|-0-------------------8---------|-------- +---------|-3h6-----------------6-3-|--------------------------8----|-10----- +---------|-------------------------|-------------------------------|-------- + + +-10-11---10-9-10---9-8-9-|---10-9-10---8-7-8---6-5-6-|---------------------- +-------------------------|---------------------------|---------------------- +-------------------------|---------------------------|---------------8h12--- +-------------------------|---------------------------|------5h8-8h11-------- +-------8---------7-------|-8---------6-------5-------|-6h10----------------- +-------------------------|---------------------------|---------------------- + + +------6h11-|-------------------------8h11-|--------------------------8h11--| +-8h11------|--------------------9h13------|--------------------10h13-------| +-----------|-----------5h8-8h13-----------|-----------5h8-8h14-------------| +-----------|------6h10--------------------|------7h10----------------------| +-----------|-6h11-------------------------|-6h12---------------------------| +-----------|------------------------------|--------------------------------| + + +|-10-13----------10------------------|-------------------------------------| +|-------10-13-11-------10----11------|---------------11-10-9---------------| +|-------------------11----12------10-|----12-----------------12-11-10-9----| +|-------------------------------12---|-14----9-12-10-----------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-----------------------------|---------------------------------|----------- +|-----------------------------|---11-10-9-----------------------|----------- +|-12-10-----------------------|-----------12-11-10-9-12-11-10-9-|-12-11-10-9 +|-------12-8------------------|---------------------------------|----------- +|------------10-7-9-8-7-8-6---|---------------------------------|----------- +|---------------------------8-|-6-------------------------------|----------- + + +-----------------|---6--------------------------|--------------------10----- +-----------------|-------8---8------------------|-----------7---10-7----10-- +-8-7-5-----------|----------------7-----5----3--|-------7-----7------------- +-------8-7-6-5-4-|-5----------------------------|---4-7---7----------------- +-----------------|-----5------------------------|-5------------------------- +-----------------|---------8----6----5-----3----|--------------------------- + + +-14--|---8---------------------------|-----------3---6---10----15-|13p10---- +-----|-------10----------------------|-------3-----3---8----11----|------12- +-----|-------------11---8---7-----5--|---3-----3------------------|--------- +-----|-7-----------------------------|-----5----------------------|--------- +-----|-----6-------------------------|----------------------------|--------- +-----|----------10----8---6----5-----|-3--------------------------|--------- + + +-------------------------|-------------------------|-------------------5---6| +----12p8-----------------|-------------------------|-----------7-5-8-7---8--| +-12------10--------------|-----------------------5-|---7-5-8-7--------------| +------------12-9---------|-----------5-4-7-5-8-7---|-8----------------------| +-----------------10-8----|---6-5-8-6---------------|------------------------| +----------------------10-|-8-----------------------|------------------------| + + +|----8----10-------------------------|---------------------------|---------- +|-10---11-------11----13----10----11-|---8----10---6---8---4---6-|---3---4-- +|------------12----14----10----12----|-8---10----7---8---5---7---|-3---5---- +|------------------------------------|---------------------------|---------- +|------------------------------------|---------------------------|---------- +|------------------------------------|---------------------------|---------- + + +------------------|---10---8---6--------------|----------------------------| +---------2h3h4----|----------------8-7--------|---11-10-9-8-7-6-5-------7--| +-2h3h4h5-------5--|---------------------------|-------------------8-7------| +------------------|-8----7---5----------------|----------------------------| +------------------|--------------5------------|-----------------------5----| +------------------|--------------------8-6-5--|-3--------------------------| + + +|----6-5-4------------------|------------------------10-14-|---------------- +|----------8-7-6-5-------7--|------------------------------|---------------- +|------------------8-7------|------------------------------|---------------- +|---------------------------|---8-7-6----------------------|---8-7-6-------- +|----------------------5----|---------10-9-8-7-------------|---------10-9-8- +|-3-------------------------|-3----------------11-10-------|-3-------------- + + +---------10-14--|---15-10---10-6---6-3-|-------------------|---------------- +----------------|----------------------|---8-3-------------|---------------- +----------------|----------------------|---------7-3-------|---------------- +----------------|----------------------|---------------8-5-|---------------- +-7--------------|----------------------|-------------------|---------------- +---11-10--------|-3-------3------3-----|-3-----3-----3-----|-3--3-5-6-7----- + + +----------|--3-----|| +----------|--------|| +----------|--3-----|| +----------|--0-----|| +-3-4-5-1--|--------|| +----------|--3-----|| + + + + diff --git a/guitar/tabs/Classic/caprice17.prj b/guitar/tabs/Classic/caprice17.prj new file mode 100644 index 0000000..e489208 --- /dev/null +++ b/guitar/tabs/Classic/caprice17.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=caprice17.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16) +TEMPO=651578 diff --git a/guitar/tabs/Classic/caprice17.tab b/guitar/tabs/Classic/caprice17.tab new file mode 100644 index 0000000..f979fe7 --- /dev/null +++ b/guitar/tabs/Classic/caprice17.tab @@ -0,0 +1,202 @@ + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Nicolo Paganini +Caprice No.16 +letostak@netcom.com +This is played at a very fast speed, but it also is very pretty when +played slow, especially the begining. Happy Picking + + +||-------3--5--6--2--5--3-------|------------10--8-------------------------| +||-----3------------------3-----|-------------------10--7------------------| +||---3----------------------3---|---2---2------------------7---------------| +||-5--------------------------5-|-4---1---0-------------------10--7--------| +||------------------------------|------------------------------------------| +||------------------------------|------------------------------------------| + + +|-----------------8---------------------|----------------------------13p10--| +|--------------7-----10--7--------------|-------------------------12------12| +|-----------8---------------8-----------|----7-----7-----------12-----------| +|----7--10---------------------10--8--7-|-8-----7-----------12--------------| +|-9-------------------------------------|------------10h14------------------| +|---------------------------------------|-----------------------------------| + + +|-8----------------------11p8------|-6-----------------------8-------------| +|---8-----------------10-------10--|---6---------11-10-8-------10----------| +|-----8------------10--------------|-----7------------------------11-------| +|-------10------10-----------------|-------8-------------------------------| +|------------12--------------------|----------------------9----------------| +|----------8-----------------------|----------6----------------------------| + + +|----------------------------------|----------10----14-10-----------------|| +|-11p8-----11---11---11---11---11--|----10-------10-------10--------------|| +|----------------------------------|-------11----------------11-----------|| +|----------------------------------|----------------------------12-10-----|| +|-------10----8----6----5----4-----|----------------------------------12--|| +|----------------------------------|-10-----------------------------------|| +Repeat from begining + + + +|-------------------------|---------------------------|--------------------- +|---------6-9-8-6-----9-8-|-6-------------------------|-----------7-6------- +|-------7---------7-------|---8-7-5---8----10---8---7-|-------5-8-----8-5--- +|---5-9-------------9-----|---------------------------|---3-7-------------7- +|-------------------------|---------------------------|--------------------- +|-7-----------------------|---------8---10----8---6---|-5------------------- + + +-----|------------------------------|-----------------------------|--------- +-7-6-|---------------------11-------|-10p8------8p6---------------|--------- +-----|-8-7-5-----7----10---------10-|-------------------10p8------|-8p7----- +-----|-------8----------------------|-----------------------------|--------- +-----|-------------------8----------|------6-10-----5-8-----------|--------- +-----|---------6---10---------10----|------------------------8-11-|--------- + + +---------------------13h18-|-------------------------------------|---------- +------------------15-------|-------14-------------14-------------|---------- +----------7h10-15----------|-14-15----15-------------15----------|---------- +--------8------------------|-------------17-15-14-------17-15-14-|-17-15-14- +------8--------------------|-------------------------------------|---------- +-6-10----------------------|-------------------------------------|---------- + + +----------------------------|-------------------------------------|--------- +----------------------------|-------------------------------------|--------- +----------------------------|-------------------------------------|--------- +-16-15-14-17-15-14-15-13----|-12----------------------------------|--------- +-------------------------15-|----13-12-14-13-12-15-13-12-13-------|--------- +----------------------------|-------------------------------14-12-|-15-13--- + + +-12-14-13-12-15-13-12-13-------|-------------------------------------|------ +-------------------------16-13-|-15----------------------------------|------ +-------------------------------|----15-14-16-15-14-17-15-14-15-------|------ +-------------------------------|-------------------------------16-14-|-17-15 +-------------------------------|-------------------------------------|------ +-------------------------------|-------------------------------------|------ + + +------------------------------|----------------------------|---8-5-8---8---8 +------------------------------|----------------------------|---------6------ +------------------------------|----------6-7---------------|-------------8-- +-14-16-15-13------------------|--------8-----7-10-8--------|---------------- +-------------15-12------------|------8--------------8------|---------------- +-------------------13-12-11-8-|-6-10------------------10-6-|-5-------------- + + +---8---8-|-------------------------|---10-6-10---10---10---10---10-|----11-- +---------|---------3-4---3---------|-----------6-------------------|-------- +-5-------|-----2-5-----4---5-2-----|----------------7--------------|-------- +-----7---|-------------------------|-0-------------------8---------|-------- +---------|-3h6-----------------6-3-|--------------------------8----|-10----- +---------|-------------------------|-------------------------------|-------- + + +-10-11---10-9-10---9-8-9-|---10-9-10---8-7-8---6-5-6-|---------------------- +-------------------------|---------------------------|---------------------- +-------------------------|---------------------------|---------------8h12--- +-------------------------|---------------------------|------5h8-8h11-------- +-------8---------7-------|-8---------6-------5-------|-6h10----------------- +-------------------------|---------------------------|---------------------- + + +------6h11-|-------------------------8h11-|--------------------------8h11--| +-8h11------|--------------------9h13------|--------------------10h13-------| +-----------|-----------5h8-8h13-----------|-----------5h8-8h14-------------| +-----------|------6h10--------------------|------7h10----------------------| +-----------|-6h11-------------------------|-6h12---------------------------| +-----------|------------------------------|--------------------------------| + + +|-10-13----------10------------------|-------------------------------------| +|-------10-13-11-------10----11------|---------------11-10-9---------------| +|-------------------11----12------10-|----12-----------------12-11-10-9----| +|-------------------------------12---|-14----9-12-10-----------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-----------------------------|---------------------------------|----------- +|-----------------------------|---11-10-9-----------------------|----------- +|-12-10-----------------------|-----------12-11-10-9-12-11-10-9-|-12-11-10-9 +|-------12-8------------------|---------------------------------|----------- +|------------10-7-9-8-7-8-6---|---------------------------------|----------- +|---------------------------8-|-6-------------------------------|----------- + + +-----------------|---6--------------------------|--------------------10----- +-----------------|-------8---8------------------|-----------7---10-7----10-- +-8-7-5-----------|----------------7-----5----3--|-------7-----7------------- +-------8-7-6-5-4-|-5----------------------------|---4-7---7----------------- +-----------------|-----5------------------------|-5------------------------- +-----------------|---------8----6----5-----3----|--------------------------- + + +-14--|---8---------------------------|-----------3---6---10----15-|13p10---- +-----|-------10----------------------|-------3-----3---8----11----|------12- +-----|-------------11---8---7-----5--|---3-----3------------------|--------- +-----|-7-----------------------------|-----5----------------------|--------- +-----|-----6-------------------------|----------------------------|--------- +-----|----------10----8---6----5-----|-3--------------------------|--------- + + +-------------------------|-------------------------|-------------------5---6| +----12p8-----------------|-------------------------|-----------7-5-8-7---8--| +-12------10--------------|-----------------------5-|---7-5-8-7--------------| +------------12-9---------|-----------5-4-7-5-8-7---|-8----------------------| +-----------------10-8----|---6-5-8-6---------------|------------------------| +----------------------10-|-8-----------------------|------------------------| + + +|----8----10-------------------------|---------------------------|---------- +|-10---11-------11----13----10----11-|---8----10---6---8---4---6-|---3---4-- +|------------12----14----10----12----|-8---10----7---8---5---7---|-3---5---- +|------------------------------------|---------------------------|---------- +|------------------------------------|---------------------------|---------- +|------------------------------------|---------------------------|---------- + + +------------------|---10---8---6--------------|----------------------------| +---------2h3h4----|----------------8-7--------|---11-10-9-8-7-6-5-------7--| +-2h3h4h5-------5--|---------------------------|-------------------8-7------| +------------------|-8----7---5----------------|----------------------------| +------------------|--------------5------------|-----------------------5----| +------------------|--------------------8-6-5--|-3--------------------------| + + +|----6-5-4------------------|------------------------10-14-|---------------- +|----------8-7-6-5-------7--|------------------------------|---------------- +|------------------8-7------|------------------------------|---------------- +|---------------------------|---8-7-6----------------------|---8-7-6-------- +|----------------------5----|---------10-9-8-7-------------|---------10-9-8- +|-3-------------------------|-3----------------11-10-------|-3-------------- + + +---------10-14--|---15-10---10-6---6-3-|-------------------|---------------- +----------------|----------------------|---8-3-------------|---------------- +----------------|----------------------|---------7-3-------|---------------- +----------------|----------------------|---------------8-5-|---------------- +-7--------------|----------------------|-------------------|---------------- +---11-10--------|-3-------3------3-----|-3-----3-----3-----|-3--3-5-6-7----- + + +----------|--3-----|| +----------|--------|| +----------|--3-----|| +----------|--0-----|| +-3-4-5-1--|--------|| +----------|--3-----|| + + + + diff --git a/guitar/tabs/Classic/caprice5.prj b/guitar/tabs/Classic/caprice5.prj new file mode 100644 index 0000000..679bf6d --- /dev/null +++ b/guitar/tabs/Classic/caprice5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=caprice5.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,4)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16)(794,16)(795,16)(796,16)(797,16)(798,16)(799,16)(800,16)(801,16)(802,16)(803,16)(804,16)(805,16)(806,16)(807,16)(808,16)(809,16)(810,16)(811,16)(812,16)(813,16)(814,16)(815,16)(816,16)(817,16)(818,16)(819,16)(820,16)(821,16)(822,16)(823,16)(824,16)(825,16)(826,16)(827,16)(828,16)(829,16)(830,16)(831,16)(832,16)(833,16)(834,16)(835,16)(836,16)(837,16)(838,16)(839,16)(840,16)(841,16)(842,16)(843,16)(844,16)(845,16)(846,16)(847,16)(848,16)(849,16)(850,16)(851,16)(852,16)(853,16)(854,16)(855,16)(856,16)(857,16)(858,16)(859,16)(860,16)(861,16)(862,16)(863,16)(864,16)(865,16)(866,16)(867,16)(868,16)(869,16)(870,16)(871,16)(872,16)(873,16)(874,16)(875,16)(876,16)(877,16)(878,16)(879,16)(880,16)(881,16)(882,16)(883,16)(884,16)(885,16)(886,16)(887,16)(888,16)(889,16)(890,16)(891,16)(892,16)(893,16)(894,16)(895,16)(896,16)(897,16)(898,16)(899,16)(900,16)(901,16)(902,16)(903,16)(904,16)(905,16)(906,16)(907,16)(908,16)(909,16)(910,16)(911,16)(912,16)(913,16)(914,16)(915,16)(916,16)(917,16)(918,16)(919,16)(920,16)(921,16)(922,16)(923,16)(924,16)(925,16)(926,16)(927,16)(928,16)(929,16)(930,16)(931,16)(932,16)(933,16)(934,16)(935,16)(936,16)(937,16)(938,16)(939,16)(940,16)(941,16)(942,16)(943,16)(944,16)(945,16)(946,16)(947,16)(948,16)(949,16)(950,16)(951,16)(952,16)(953,16)(954,16)(955,16)(956,16)(957,16)(958,16)(959,16)(960,16)(961,16)(962,16)(963,16)(964,16)(965,16)(966,16)(967,16)(968,16)(969,16)(970,16)(971,16)(972,16)(973,16)(974,16)(975,16)(976,16)(977,16)(978,16)(979,16)(980,16)(981,16)(982,16)(983,16)(984,16)(985,16)(986,16)(987,16)(988,16)(989,16)(990,16)(991,16)(992,16)(993,16)(994,16)(995,16)(996,16)(997,16)(998,16)(999,16)(1000,16)(1001,16)(1002,16)(1003,16)(1004,16)(1005,16)(1006,16)(1007,16)(1008,16)(1009,16)(1010,16)(1011,16)(1012,16)(1013,16)(1014,16)(1015,16)(1016,16)(1017,16)(1018,16)(1019,16)(1020,16)(1021,16)(1022,16)(1023,16)(1024,16)(1025,16)(1026,16)(1027,16)(1028,16)(1029,16)(1030,16)(1031,16)(1032,16)(1033,16)(1034,16)(1035,16)(1036,16)(1037,16)(1038,16)(1039,16)(1040,16)(1041,16)(1042,16)(1043,16)(1044,16)(1045,16)(1046,16)(1047,16)(1048,16)(1049,16)(1050,16)(1051,16)(1052,16)(1053,16)(1054,16)(1055,16)(1056,16)(1057,16)(1058,16)(1059,16)(1060,16)(1061,16)(1062,16)(1063,16)(1064,16)(1065,16)(1066,16)(1067,16)(1068,16)(1069,16)(1070,16)(1071,16)(1072,16)(1073,16)(1074,16)(1075,16)(1076,16)(1077,16)(1078,16)(1079,16)(1080,16)(1081,16)(1082,16)(1083,16)(1084,16)(1085,16)(1086,16)(1087,16)(1088,16)(1089,16)(1090,16)(1091,16)(1092,16)(1093,16)(1094,16)(1095,16)(1096,16)(1097,16)(1098,16)(1099,16)(1100,16)(1101,16)(1102,16)(1103,16)(1104,16)(1105,16)(1106,16)(1107,16)(1108,16)(1109,16)(1110,16)(1111,16)(1112,16)(1113,16)(1114,16)(1115,16)(1116,16)(1117,16)(1118,16)(1119,16)(1120,16)(1121,16)(1122,16)(1123,16)(1124,16)(1125,16)(1126,16)(1127,16)(1128,16)(1129,16)(1130,16)(1131,16)(1132,16)(1133,16)(1134,16)(1135,16)(1136,16)(1137,16)(1138,16)(1139,16)(1140,16)(1141,16)(1142,16)(1143,16)(1144,16)(1145,16)(1146,16)(1147,16)(1148,16)(1149,16)(1150,16)(1151,16)(1152,16)(1153,16)(1154,16)(1155,16)(1156,16)(1157,16)(1158,16)(1159,16)(1160,16)(1161,16)(1162,16)(1163,16)(1164,16)(1165,16)(1166,16)(1167,16)(1168,16)(1169,16)(1170,16)(1171,16)(1172,16)(1173,16)(1174,16)(1175,16)(1176,16)(1177,16)(1178,16)(1179,16)(1180,16)(1181,16)(1182,16)(1183,16)(1184,16)(1185,16)(1186,16)(1187,16)(1188,16)(1189,16)(1190,16)(1191,16)(1192,16)(1193,16)(1194,16)(1195,16)(1196,16)(1197,16)(1198,16)(1199,16)(1200,16)(1201,16)(1202,16)(1203,16)(1204,16)(1205,16)(1206,16)(1207,16)(1208,16)(1209,16)(1210,16)(1211,16)(1212,16)(1213,16)(1214,16)(1215,16)(1216,16)(1217,16)(1218,16)(1219,16)(1220,16)(1221,16)(1222,16)(1223,16)(1224,16)(1225,16)(1226,16) diff --git a/guitar/tabs/Classic/caprice5.tab b/guitar/tabs/Classic/caprice5.tab new file mode 100644 index 0000000..e8fbc08 --- /dev/null +++ b/guitar/tabs/Classic/caprice5.tab @@ -0,0 +1,401 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Nicolo Paganini +Caprice No.5 +letostak@netcom.com + + + +|-------------------7--12---11-8-7-----------------------------------------| +|-----------------8----------------10-8-7----------------------------------| +|-----------0---9-------------------------9-8------------------------------| +|---------2---9-------------------------------10-9-7-----------------------| +|-------2--------------------------------------------10-9-7-6--------------| +|-0---3-------------------------------------------------------8-7-5-3-2----| + + +|--------------------------12--15----14-12-11-8-7--------------------------- +|-----------------------12------------------------10-8-7-------------------- +|-----------0--------12----------------------------------9-8---------------- +|---------2-------14-----------------------------------------10-9-7--------- +|-------2------14---------------------------------------------------10-9---- +|-0---3--------------------------------------------------------------------- + + +----------------|--------------------------12-15-19----17-15-14-12-11-8-7--- +----------------|-----------------------12---------------------------------- +----------------|-----------0--------12------------------------------------- +----------------|---------2-------14---------------------------------------- +-7-6------------|-------2------14------------------------------------------- +-----8-7-5-3-2--|-0---3----------------------------------------------------- + + +--------------------------------------|-----------------------------15-19-24 +-10-8-7-------------------------------|-----------------------12-17--------- +--------9-8---------------------------|-----------0--------12--------------- +------------10-9-7--------------------|---------2-------14------------------ +-------------------10-9-7-6-----------|-------2------14--------------------- +----------------------------8-7-5-3-2-|-0---3------------------------------- + + +-23-20-19------------------------------------------------------------------| +----------22-20-19---------------------------------------------------------| +-------------------21-20-17-16---------------------------------------------| +-------------------------------19-17-16-14-13------------------------------| +----------------------------------------------15-14-12-10-9-7-6------------| +----------------------------------------------------------------8-7-5-3-2--| + + +|---------------------------------------------------|----------------------- +|-------------------------------------------1-2-3-4-|-5-4-3-2--------------- +|-----------------------------------1-2-3-4---------|---------5-4-3-2------- +|---------------------------2-3-4-5-----------------|-----------------6-5-4- +|-------------------3-4-5-6-------------------------|----------------------- +|-0---1-2-3-4-5-6-7---------------------------------|----------------------- + + +----------------------------------------| +----------------------------------5-----| +----------------------------------0-----| +3---------------------------------------| +---7-6-5-4------------------------2-----| +-----------8-7-6-5-4-3-2-1-0------------| + + +||---------------------------------|---------------------------------------| +||---------------------------------|---------------------------------------| +||-------------------9-7-5---------|-------------------9-7-5---------------| +||---5-9-5---7-9-7-5-------9-7-5---|---5-9-5---7-9-7-5-------9-7-5---------| +||-7-------9---------------------9-|-7-------9----------------------9------| +||---------------------------------|---------------------------------------| + + +|----------------------------------|------------------------------------14-- +|----------------------------------|---------------------------------16----- +|------------------------------4---|------------------------------16-------- +|---6-9-6---7-10-7---4-7-4---5---5-|-----10-7------14----------16----------- +|-7-------7--------5-------5-------|-6-9------10-7----13-14-18-------------- +|----------------------------------|---------------------------------------- + + +-17-19-|-------------------------------------------------|------------------ +-------|----------------------------17-15-13-------------|------------------ +-------|----12-16-12----14-16-14-12----------16-14-12----|----12-16-12------ +-------|-14----------16-------------------------------16-|-14----------16--- +-------|-------------------------------------------------|------------------ +-------|-------------------------------------------------|------------------ + + +----------------------------------|-------------12----------------14-12----- +-------------17-15-13-------------|-------12-------15-13-12-------------15-- +-14-16-14-12----------16-14-12----|----13----13-------------13-14----------- +-------------------------------16-|-14-------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +----------|---------------------------------------------|------------------- +-13-12----|---------------------------------------------|------------------- +-------14-|-12-11------------------------12--------11---|-----9-------7----- +----------|-------14-12-11-12-14-10-9-12----9-7-10----7-|-5-9---9-4-7---7-2- +----------|---------------------------------------------|------------------- +----------|---------------------------------------------|------------------- + + +---------------|---------------3--------5--------7--|--------8-------------- +---------------|-------------3--------7--------8----|------8-------11------- +---5-------5---|-----5-----4--------5--------7------|----9------------12---- +-5---2-1-5---1-|-0-4---4-5--------7--------9--------|-10--------11-------14- +---------------|------------------------------------|----------------------- +---------------|------------------------------------|----------------------- + + +-----10-------------------|----15-14-12----------------14-12---------------| +--------12-------13-10----|-------------15-13-12----13-------15-14-12-11---| +-----------12----------11-|-12-------------------12----------------------11| +-12-----------12----------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + +|----12-10-8--------------10-8-7----------|---8-7---------------------9-12-- +|-12---------12-10-9---10--------10-8-7---|-8-----10-8-7---------8-11------- +|--------------------9------------------7-|--------------9-7-6-9------------ +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- + + +-15-9-|-15-10-------------------14-10------------------|----15-14-13-12-11-- +------|-------12----------------------10---------------|-------------------- +------|----------12----------------------11------------|-------------------- +------|-------------12-9--------------------12---------|-------------------- +------|------------------10--------------------12-9----|-10----------------- +------|---------------------10----------------------10-|-------------------- + + +-10-9-------------------------|--------------------------------------------| +------13-12-11-10-------------|--------------------------------------------| +------------------13-12-11-10-|----------------------------9-7---7---------| +------------------------------|-14-13-12-11-10-9-8-7-----9---------10-7----| +------------------------------|-----------------------10-------9-----------| +------------------------------|--------------------------------------------| + + +|-----------------------------------------|| +|-----------------------------------------|| +|--------------7-------------------7------|| +|----9-----------10-7----9-----------10-7-|| +|-10------10-9--------10------10-9--------|| +|------10------------------10-------------|| + +play ending 1 +repeat from first || and play rest + + + +ending 1 + +|----------------------------------| +|----------------------------------| +|-----------5----------------------| +|-5-9-7-5-4---7-4------------7-----| +|-----------------7-10-9-7-6---9-6-| +|----------------------------------| + + + +|-----------------------------------|---8-------7--------------------------| +|-----------------------------------|-----8-------9------10--------8-------| +|----7--------7-------5-------4-----|-------9-7-----7-------9--------7-----| +|------9--------9-------5-------3---|-----------------10------10-9-----9---| +|-10-----10-8-----8-7-----7-5-----5-|-7------------------------------------| +|-----------------------------------|--------------------------------------| + + +|------------------------------------------|----13----------12-------------- +|----10--------8---------------------------|-------13----------14-------15-- +|-------9--------9------10----------9------|----------14-12-------12-------- +|-10------10-8-----8-------10---------9----|-------------------------15----- +|--------------------12-------12-10-----10-|-12----------------------------- +|------------------------------------------|-------------------------------- + + +-------------------|-------------------------------------------------------| +----------13-------|----15----------13-------------------------------------| +-14----------12----|-------14----------14-------15----------14-------------| +----15-14-------14-|-15-------15-13-------13-------15----------14----------| +-------------------|-------------------------17-------17-15-------15-------| +-------------------|-------------------------------------------------------| + + +|----18----------17----------15----------13-------|----15-14-13-12-11-10-9-- +|-------18----------19----------15----------13----|------------------------- +|----------19-17-------17-15-------15-14-------14-|-12---------------------- +|-------------------------------------------------|------------------------- +|-17----------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +-------------------------|----------------------------------------|----11--- +-13-12-11-10-------------|----------------------------------------|--------- +-------------13-12-11-10-|---------------------------8-7---7------|--------- +-------------------------|-14-13-12-11-10-9-8-7----8---------10-7-|--------- +-------------------------|----------------------10-------9--------|-10------ +-------------------------|----------------------------------------|--------- + + +-10-9-8-7-6-5-----------------|----------------------------------|---------- +--------------9-8-7-6---------|----------------------------------|---4------ +----------------------9-8-7-6-|----------------------5-3---3-----|-----3---- +------------------------------|-10-9-8-7-6-5-4-3---5---------6-3-|-------5-- +------------------------------|------------------6-------5-------|-6-------7 +------------------------------|----------------------------------|---------- + + +-------------------------------|-----------------------------7----13-|-11-8- +-2-------2-------6-------4-----|----8--------6-----------8-----------|------ +---3-------3-------5-------5---|------7--------7-----7-----7---12----|------ +-----5-------5-------6-------7-|--------8--------6-----9-------------|------ +-------7-------8-------9-------|-10-------11-------8-----------------|------ +-------------------------------|-------------------------------------|------ + + +-----------------------------------|----------------10----11-6-------------| +-8----------------------------9----|----------10-11----11------8-----------| +---8------8--------------9-10---10-|-8-7-------------------------8-7-8-6---| +-----9-10---10-8-------------------|-----10-8----------------------------8-| +-----------------11-10-8-----------|---------------------------------------| +-----------------------------------|---------------------------------------| + + +|---------------------------------|----------------------------------------| +|-------------------9-8-6---------|-------------7-------7-------6----------| +|---5-8-5---6-8-6-5-------8-6-5---|---5-8-5---8---8---8---8---6---6--------| +|-6-------8---------------------8-|-6-------6-------7-------8--------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| + + +|----------------------------------------|----------------------------------| +|----------------------11-10-8-----------|-----6-----6-9-6---6-9-6----------| +|---7-10-7----8-10-8-7---------10-8-7----|---7---7--------------------8-12-8| +|-8--------10-------------------------10-|-8-------8-------9-------10-------| +|----------------------------------------|----------------------------------| +|----------------------------------------|----------------------------------| + + +|---------------8--------8---------9-------|-------------------------------- +|----11-8---------9--------10--------11----|----12-9------------------------ +|-------------------10-8------8---------10-|---------10-------------------11 +|-11------11-10-----------------11---------|-11---------11-9-----------11--- +|------------------------------------------|-----------------11-8-9-13------ +|------------------------------------------|-------------------------------- + + +-------14-18-|-------------------------------11-14-|------------------------ +-11-14-------|---9-6----------------------11-------|------------------------ +-------------|-------7---------------8-11----------|---8-11-8----9-11-9----- +-------------|-8-------8-6---------8---------------|-9--------11--------13-- +-------------|-------------8-5-6-9-----------------|------------------------ +-------------|-------------------------------------|------------------------ + + +----------------------|----------------------------------------------------| +----12----------12----|-------14----------14----------16----------17-------| +-11----11----12----12-|----13----13----15----15----15----15----16----16----| +----------14----------|-15----------16----------17----------18-------------| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| + + +|-------14----------14----------------------14----|-------------------12---- +|----14----14----16----16----15-18-15----14----14-|----13-16-13----12----12- +|-15----------16----------16----------15----------|-14----------13---------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +-------------------10----|---------------8----------------7---|------------- +----11-14-11----10----10-|----9-12-9---8---8---8-11-8---7---7-|---6-11-6---- +-12----------11----------|-10--------9-------9--------8-------|-7--------6-- +-------------------------|------------------------------------|------------- +-------------------------|------------------------------------|------------- +-------------------------|------------------------------------|------------- + + +---5-----------------------|--------------------19-23----------------------| +-5---5------10--------11---|--------------16-19------------10--------11----| +----------9----9----9----9-|-----------16----------------9----9----9----9--| +-------10--------10--------|-------116----------------10--------10---------| +---------------------------|-14-18-----------------------------------------| +---------------------------|-----------------------------------------------| + + +|-------7-------14-19----15-19-15----17-19-17-|----24-22-20-19-------------- +|-----7------16-------17----------19----------|-20-------------22-20-19-17-- +|---8-----16----------------------------------|----------------------------- +|-9-------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- + + +-15-19-15----17-19-17-|----24-22-20-19-------------22-20-19----------------| +----------19----------|-20-------------22-21----22----------22-20-19-------| +----------------------|----------------------21----------------------19----| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| + + +|----20-19-17----------------19-17-15-------------|----17-15-14------------- +|-20----------20-19-17----19----------19-17-16----|-17----------17-15-13---- +|----------------------17----------------------16-|----------------------16- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +----15-12----------------|-15-12-------------------14-11-------------------| +----------14-------------|-------12----------------------------------------| +-15----------15-12-------|----------12-------------------14-11-------------| +-------------------14----|-------------14----------------------13----------| +----------------------13-|----------------14----------------------12-------| +-------------------------|-------------------15-12-------------------14-11-| + + +|----12-11-10-9-8-7-6-------------------|----------------------------------| +|---------------------10-9-8-7----------|----------------------------------| +|------------------------------10-9-8-7-|-----------------------5-4---4----| +|---------------------------------------|-11-10-9-8-7-6-5-4---5---------7-4| +|---------------------------------------|-------------------7-------6------| +|-12------------------------------------|----------------------------------| + + +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|----------------4-----------------------4--------|----------------4-------- +|----5--4--7--5--------4-----5--4--7--5--------4--|----5--4--7--5--------4-- +|-7-----------------6-----7-----------------6-----|-7-----------------6----- +|-------------------------------------------------|------------------------- + + +------------------------| +------------------------| +----------------4-------| +----5--4--7--5--------4-| +-7-----------------6----| +------------------------| + + +|-------------------7-12----11-9-7-----------------------------------------| +|-------------0---9----------------10-9-7----------------------------------| +|-----------1---9-------------------------9-8-6----------------------------| +|---------2-------------------------------------9-7-6----------------------| +|-------2---------------------------------------------9-7-6----------------| +|-0---4-----------------------------------------------------9-7-5-4-2------| + + +|-------------------------12-16----14-12-11-9-7----------------------------- +|--------------0-------12-----------------------10-9-7---------------------- +|------------1------13---------------------------------9-8-6---------------- +|----------2-----14------------------------------------------9-7-6---------- +|--------2---------------------------------------------------------9-7-6---- +|-0----4-----------------------------------------------------------------9-- + + +----------|----------------------------16-19-24--23-21-19------------------- +----------|--------------0----------17--------------------22-21-19-17-16-14- +----------|------------1---------16----------------------------------------- +----------|----------2--------18-------------------------------------------- +----------|--------2-------19----------------------------------------------- +-7-5-4-2--|-0----4---------------------------------------------------------- + + +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- +-16-14-13-------------------------------------|----------------------------- +----------16-14-13-11-9-7---------------------|----------------------------- +--------------------------11-9-7-6------------|--------------------3-4-5-6-- +-----------------------------------9-7-5-4-2--|-0----1-2-3-4-5-6-7---------- + + +--------------------------|------------------------------------------------- +-----------------1-2-3-4--|-5-4-3-2----------------------------------------- +---------1-2-3-4----------|---------5-4-3-2--------------------------------- +-2-3-4-5------------------|-----------------6-5-4-3------------------------- +--------------------------|-------------------------7-6-5-4----------------- +--------------------------|----------------------------------8-7-6-5-4-3-2-- + + +----------|| +-------5--|| +----------|| +-------6--|| +-------2--|| +-1-0------|| diff --git a/guitar/tabs/Classic/caprice_24.prj b/guitar/tabs/Classic/caprice_24.prj new file mode 100644 index 0000000..c0f4aea --- /dev/null +++ b/guitar/tabs/Classic/caprice_24.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=caprice_24.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4) diff --git a/guitar/tabs/Classic/caprice_24.tab b/guitar/tabs/Classic/caprice_24.tab new file mode 100644 index 0000000..c7c6db4 --- /dev/null +++ b/guitar/tabs/Classic/caprice_24.tab @@ -0,0 +1,401 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / p / paganini_nicolo / caprice_24.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# +# + +Niccolo Paganini: Caprice No.24 +Arranged for classical guitar by Gerald Garcia +CD : 'Romantic Guitar Favourites' (Paganini, Mendelssohn, Schubert) +by Gerald Garcia, 1992 + +four parts + +0:00-56 +|---------------------------------|----| +|---------5---------------5-------|----| +|-2--225424-------2--225424-------|-0/-| +|-2-------6----64-2-------6-------|-/0-| +|-3----------77--73-----------7---|----| +|-5---------------5---------------|----| + +|-5--5565---------3--3353----------------------------------------| +|-5------86----65-3------65----53-6-------5---------4553---------| +|-6-------7--77--74-------5--55--5---447545----54---22--42-------| +|---------7---------------5-------7-------7--77--73--2-----------| +|---------5---------------3-------5-------7------------------0---| +|-5---------------3----------------------------------------------| + +|-5--5565---------3--3353----------------------------------------| +|-5------86----65-3------65----53-6-------5---------4553---------| +|-6-------7--77--74-------5--55--57----75-2--22542--22--42-------| +|---------7---------------5-------8--88--8--------3--2-----------| +|---------5---------------3-------5-------3------------------0---| +|-5---------------3----------------------------------------------| + + _______ _____ _______ +|----8-12-8-------------4-7-4------------8-12-8---------------------|----| +|-10--------10\-5-----5-------5-------10--------10\-5-----5---------|----| +|-----------------5-------------4---------------------5---4---------|-0/-| +|-------------------7-------------6---------------------7-6---------|-/0-| +|-(0)-------------------------------7-(0)-----------------7---------|----| +|---------------------(0)---------------------------------------0---|----| + ________ ________ +|----12-17-12-----------------------10-13----10-15-10--------------------8-12-| +|-14----------14\-10-------------10-------12----------12\-8------------8------| +|--------------------9------7-10----------0-----------------7--------9--------| +|----------------------11-0-----------------------------------9---10----------| +|-(0)-------------------------------------------------------------------------| +|---------------------------------------------------------------8-------------| + _____ ____ +|-13p10------------------12p8------------------1---0-------------|-----| +|-------12--------------------10-----------0-3-------------------|-----| +|----------13-10-----------------9-5-----------------1-2---------|-0//-| +|----------------12-9----------------7-----0-----2---------------|-//0-| +|---------------------11---------------7---------------------0---|-----| +|----------------------------------------8-----------------------|-----| +... + +2:25-52 +|------17-16-15-14-13-12-11-13p12-11-13-12-7--------| +|--------------------------------------------9------| +|-14-------------------------------------------9/13-| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| + +|------17\-16-15-14-13-12-11-13-12-11-13-12--------|-----| +|--------------------------------------------------|-----| +|-14-------------------------------------------9---|-0//-| +|--------------------------------------------------|-//0-| +|--------------------------------------------------|-----| +|--------------------------------------------------|-----| + +|------17-16-15-14-13-12-10-9-12----9-10-----------| +|--------------------------------10------10--------| +|-14----------------------------------------10\-7/-| +|--------------------------------------------------| +|--------------------------------------------------| +|--------------------------------------------------| + +|-----15-14-13-12-11-10-8-7-10---7-8--------| +|------------------------------8-----8------| +|-12-----------------------------------9-5/-| +|-------------------------------------------| +|-------------------------------------------| +|-------------------------------------------| + +|----13-12-11-10-9-8-7----12-11-10-9-8-7-5-| +|------------------------------------------| +|-10-------------------9-------------------| +|------------------------------------------| +|------------------------------------------| +|------------------------------------------| + +|---------------------17-12---------------| +|-6p5-----------------------13----5-------| +|-----8-7-6p5-4----------------14---5-----| +|---------------6---------------------7..-| +|-----------------12----------------------| +|-----------------------------------------| +... + +3:55-5:35 +|-12h13p12--------5h7p5-7h8p7-4h5p4-0h1p0------| +|----------13----------------------------------| +|----------------------------------------------| +|-----------------------------------------2----| +|----------------------------------------------| +|----------------------------------------------| + +|-12h13p12---------------------------------------|-12..----| +|----------13------------------------------------|---------| +|------------------------------------------------|-----0//-| +|------------------------------------------------|-----//0-| +|-----------------0h2p0-2h3p2-7h8p7-11h12p11-----|-0..-----| +|--------------------------------------------0---|---------| + + +|-12h13p12-----------------10h12p10---------------------| +|----------14-----10h11p10------------------------------| +|-------------------------------------------------------| +|-----------------------------------7h8p7-3h5p3-0h2p0---| +|-0-----------------------------------------------------| +|-------------------------------------------------------| + +|-10h12p10---------------8h10p8-------------------| +|----------12-----8h10p8--------------------------| +|-------------------------------------------------| +|-------------------------------5h7p5-2h3p2-------| +|-10----------------------------------------3h5p3-| +|-------------------------------------------------| + +|-10h12p10-13--------------8h10p8-12-------------| +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| +|-10--------------10h12p10----------------8h10p8-| + +|-10h12p10-------7h8p7-------------5h7p5-----|-------| +|--------------------------------------------|-------| +|--------------------------------------------|-0////-| +|--------------------------------------------|-////0-| +|--------------------------------------------|-------| +|----------7h8p7-------4h5p4-5h7p5-------5---|-------| + +|-0---0---0---0---0---7--7---0---0---0---0---0---0---5---5---0---| +|-1---5---3---1---0---0--0---0---1---5---3---1---0---4---4---0---| +|-2---5---4---2------------------2---5---4---2-------------------| +|-----------------6------4---6-------------------6---3---2---2---| +|---------------------7------------------------------------------| +|----------------------------------------------------------------| + +|----0--0-0-0-0-0-0-0-0-7-7-7-0-0-0-0-0-0-0-0-0-0-0-0-0-5-5-4-4-0--| +|---1----5---3---1---0---0---5---0---1---5---3---1---0---4---5---0-| +|--2---5---4---2-------------------2---5---4---2------------------1| +|------------------6-------4---6-------------------6---3---2---2---| +|-0--------------------7-------------------------------------------| +|------------------------------------------------------------------| + +|---------0--0--0-0-10--10-12--12-13--13-10--10| +|----3---5--5----------------------------------| +|---4---7--6--6--6----10-----12-----14-----10--| +|--5---9-------7---0------0------0------0------| +|-0--------------------------------------------| +|----------------------------------------------| + +|-----------------0-0-1-1-3-3-0-0----------------| +|-0-0-1-1-3-3-0-0-----------------6-6-3-3-5-5-6-6| +|------------------0---0---0---0---4---4---4---4-| +|--0---2---3---0-----0---2-------0---0---0---0---| +|----------------3-----------3-------------------| +|3---3---3---3-----------------------------------| + +|--0----------------------5-5---5----5454---5-------------| +|---10-3---1-1-2-2---3----------------------5-------------| +|-------4---0---0----------5----5-----------5-------------| +|--------4-----------3------------------------------------| +|-3---2---0---0------5---6------7-----------7-------------| +|-----------------------------------0---------------5-----| + +'pizzicato' +|-8p5-------------7p4---10p7-------8p5-------------7p4-------------|----| +|-----5-----5---------5--------9-------5-----5---------5-5---------|----| +|-------5-----5--------------9---9-------5-----5-----------4-------|-0/-| +|---------7-----7--------------------------7-----7-----------6-----|-/0-| +|--------------------------------------------------------------7---|----| +|------------------------------------------------------------------|----| + +|-12p9-5p0-------------10------------10p7-----------------8-----------| +|-------------------------10-6------------8p6---------------8-5-------| +|----------6p2-----------------7--------------7p4---------------5-----| +|--------------5p2-3p0----------------------------3p0-----------------| +|--------------------------------8p5------------------7p3---------7p3-| +|---------------------------------------------------------------------| + +|-7-5-4------------------------------=---------------5p0---------|-----| +|-------6\5-3-------------------------10p6------12p9-------------|-----| +|-------------5-4-2-0------------------------------------5-------|-0//-| +|---------------------3-2-0--------------------------------7-----|-//0-| +|---------------------------3-2-0-8p5------11p7--------------0---|-----| +|----------------------------------------------------------------|-----| +... + +6:13- +|---0---0---0---0-------___-----7-12-| +|---1---1---0---0---__----0---9------| +|---2-2-2---1-2------1---1--9--------| +|-2---2---2---2---------2------------| +|-3---3---2---0-----2-2--------------| +|-----------------4------------------| + +|---0---0---7---5---0-12-7---0-------|-----| +|-----------5---5---0------9---0-----|-----| +|---2---2-------5----------------1---|-0//-| +|-----------6------2---------------2-|-//0-| +|-3---3------------------------------|-----| +|---------7---5---4------------------|-----| + + ___ +|---9----9-----10----12---___----5----5-10-| +|--------------------10-----6---6---6------| +|---9----9-----10----------7---7--7--------| +|-------------------------7--7-------------| +|---12---12----12-------5------------------| +|-9----9----10----12-----------------------| + +|---7---7----8---10-----------____--------8-| +|-----------------0---_____------8------8---| +|---7---7----9----0-------9-----9-----9-----| +|---5---5---10----------10----10---10-------| +|---------------------10---10---------------| +|-7---7---8----10---8-----------------------| + +|----10----10---8---7---5/---7---8-----14---| +|-------------------5---5/---9---10----13---| +|----10----10---9-------5/---7---9-----14---| +|----9-----9----7---6-----------------------| +|-------------------------------------------| +|-10----10----8---7---5----7---8----11------| + +|---------5-8------------4-7-| +|-------5--------------5-----| +|-----5--------------4-------| +|---7--------------6---------| +|-7--------------------------| +|---------------0------------| + +|-------------5-----------------------5-----------------------------------10--| +|-----------5---5-------------------5---5---------------------10-------10-----| +|---------5-------5---------------6-------6----------------10-------10--------| +|-------7-----------7-----------7-----------7---------7-12-------12-----------| +|-----7---------------7-------7---------------7-4-5/8-------------------------| +|-5h8-------------------8-5h9-------------------------------------------------| + +|-----7-------10--------13-------7---|-----| +|-----6--------9--------12-------6---|-----| +|-----7-------10--------13-------7---|-0//-| +|------------------------------------|-//0-| +|------------------------------------|-----| +|-4-------7--------10--------4-------|-----| + +|-------------5--------------------------5--9-5------------| +|-----------5---5---------------------5---------5----------| +|---------5-------5-----------------6-------------6--------| +|-------7-----------7-------------7-----------------7------| +|-----7---------------7--------7----------------------7----| +|-5h9-------------------9--5h9--------------------------9--| + +|------------------9-12-9-----------------| +|---------------10--------10--------------| +|----------6/-9--------------9\--6--------| +|--------7-------------------------7------| +|-----7------------------------------7----| +|-5h9----------------------------------9--| + +|------------------9/-12--17p12-9----------------------| +|---------------10----------------10-------------------| +|----------6/-9----------------------9---6-------------| +|--------7---------------------------------7-----------| +|-----7--------------------------------------7-4--0----| +|-5h9--------------------------------------------------| + +|---------------------------------------------------5---| +|---------------------------------------------------5---| +|-3--2--3--2--3-2-3----3p2h3---3p2h3---3p2h3--------6---| +|---------------------------------------------------7---| +|-------------------0--------1-------0--------------7---| +|--------------------------------------------4--5---5---| +Transcription by Pinter Denes +(dpinter@eik.bme.hu) + +0/ 0/// +/0 : repeat last bar ///0 : repeat last three bars + +----___--- +----5-7--- shorter notes +---------- + +Note: many pull off and hammer on are unsigned + + +From: letostak@netcom.com (Judy Letostak) + +Nicolo Paganini +Caprice No. 24 Opus 1 +letostak@netcom.com + + + +|----------------------|----------------------|----------------------------| +|-------------------3--|-5p4h5p4--5-----------|-------------------3--------| +|-2p1h2p1--2--4--5-----|-------------7--5--4--|-2p1h2p1--2--4--5-----------| +|----------------------|----------------------|----------------------------| +|----------------------|----------------------|----------------------------| +|----------------------|----------------------|----------------------------| + + +|-------------------|-5p4h5p4--5--------------|----------------------------| +|-5p4h5p4--5--------|-------------8--6--5-----|-------------5--6-----------| +|-------------------|-------------------------|-7p6h7p6--7--------7--------| +|-------------7-----|-------------------------|----------------------------| +|-------------------|-------------------------|----------------------------| +|-------------------|-------------------------|----------------------------| + + +|----------------------|----------------------|----------------------------| +|-8p7h8p7--8--6--5-----|----------------5-----|-6p5h6p5--6-----------------| +|-------------------7--|-5p4h5p4--5--7-----5--|-------------7--5--4--------| +|----------------------|----------------------|----------------------------| +|----------------------|----------------------|----------------------------| +|----------------------|----------------------|----------------------------| + + +|----------------------|----------------------|----------------------------| +|-5p4h5p4--5-----------|-------------6--5-----|----------------------------| +|-------------5--4-----|-4p3h4p3--4-----------|----------------------------| +|-------------------7--|-------------------6--|-7p6h7p6--7-----------------| +|----------------------|----------------------|----------------------------| +|----------------------|----------------------|----------------------------| + + +||-12h13p12-----------------------|----------------------------------------| +||-----------13---------10h12p10--|-12h13p12---9h10p9----------------------| +||--------------------------------|--------------------9h10p9--------------| +||--------------------------------|----------------------------------------| +||--------------------------------|----------------------------7-----------| +||--------------------------------|----------------------------------------| + + +|-12h13p12------------------------|---------------------------------------|| +|-----------13--------------------|---------------------------------------|| +|---------------------------------|---------------------13h14p13----------|| +|---------------------------------|-----------14h15p14------------14------|| +|----------------------12h14p12---|-14h15p14------------------------------|| +|---------------------------------|---------------------------------------|| + + + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Classic/caprice_5.prj b/guitar/tabs/Classic/caprice_5.prj new file mode 100644 index 0000000..6dc1767 --- /dev/null +++ b/guitar/tabs/Classic/caprice_5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=caprice_5.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4)(891,4)(892,4)(893,4)(894,4)(895,4)(896,4)(897,4)(898,4)(899,4)(900,4)(901,4)(902,4)(903,4)(904,4)(905,4)(906,4)(907,4)(908,4)(909,4)(910,4)(911,4)(912,4)(913,4)(914,4)(915,4)(916,4)(917,4)(918,4)(919,4)(920,4)(921,4)(922,4)(923,4)(924,4)(925,4)(926,4)(927,4)(928,4)(929,4)(930,4)(931,4)(932,4)(933,4)(934,4)(935,4)(936,4)(937,4)(938,4)(939,4)(940,4)(941,4)(942,4)(943,4)(944,4)(945,4)(946,4)(947,4)(948,4)(949,4)(950,4)(951,4)(952,4)(953,4)(954,4)(955,4)(956,4)(957,4)(958,4)(959,4)(960,4)(961,4)(962,4)(963,4)(964,4)(965,4)(966,4)(967,4)(968,4)(969,4)(970,4)(971,4)(972,4)(973,4)(974,4)(975,4)(976,4)(977,4)(978,4)(979,4)(980,4)(981,4)(982,4)(983,4)(984,4)(985,4)(986,4)(987,4)(988,4)(989,4)(990,4)(991,4)(992,4)(993,4)(994,4)(995,4)(996,4)(997,4)(998,4)(999,4)(1000,4)(1001,4)(1002,4)(1003,4)(1004,4)(1005,4)(1006,4)(1007,4)(1008,4)(1009,4)(1010,4)(1011,4)(1012,4)(1013,4)(1014,4)(1015,4)(1016,4)(1017,4)(1018,4)(1019,4)(1020,4)(1021,4)(1022,4)(1023,4)(1024,4)(1025,4)(1026,4)(1027,4)(1028,4)(1029,4)(1030,4)(1031,4)(1032,4)(1033,4)(1034,4)(1035,4)(1036,4)(1037,4)(1038,4)(1039,4)(1040,4)(1041,4)(1042,4)(1043,4)(1044,4)(1045,4)(1046,4)(1047,4)(1048,4)(1049,4)(1050,4)(1051,4)(1052,4)(1053,4)(1054,4)(1055,4)(1056,4)(1057,4)(1058,4)(1059,4)(1060,4)(1061,4)(1062,4)(1063,4)(1064,4)(1065,4)(1066,4)(1067,4)(1068,4)(1069,4)(1070,4)(1071,4)(1072,4)(1073,4)(1074,4)(1075,4)(1076,4)(1077,4)(1078,4)(1079,4)(1080,4)(1081,4)(1082,4)(1083,4)(1084,4)(1085,4)(1086,4)(1087,4)(1088,4)(1089,4)(1090,4)(1091,4)(1092,4)(1093,4)(1094,4)(1095,4)(1096,4)(1097,4)(1098,4)(1099,4)(1100,4)(1101,4)(1102,4)(1103,4)(1104,4)(1105,4)(1106,4)(1107,4)(1108,4)(1109,4)(1110,4)(1111,4)(1112,4)(1113,4)(1114,4)(1115,4)(1116,4)(1117,4)(1118,4)(1119,4)(1120,4)(1121,4)(1122,4)(1123,4)(1124,4)(1125,4)(1126,4)(1127,4)(1128,4)(1129,4)(1130,4)(1131,4)(1132,4)(1133,4)(1134,4)(1135,4)(1136,4)(1137,4)(1138,4)(1139,4)(1140,4)(1141,4)(1142,4)(1143,4)(1144,4)(1145,4)(1146,4)(1147,4)(1148,4)(1149,4)(1150,4)(1151,4)(1152,4)(1153,4)(1154,4)(1155,4)(1156,4)(1157,4)(1158,4)(1159,4)(1160,4)(1161,4)(1162,4)(1163,4)(1164,4)(1165,4)(1166,4)(1167,4)(1168,4)(1169,4)(1170,4)(1171,4)(1172,4)(1173,4)(1174,4)(1175,4)(1176,4)(1177,4)(1178,4)(1179,4)(1180,4)(1181,4)(1182,4)(1183,4)(1184,4)(1185,4)(1186,4)(1187,4)(1188,4)(1189,4)(1190,4)(1191,4)(1192,4)(1193,4)(1194,4)(1195,4)(1196,4)(1197,4)(1198,4)(1199,4)(1200,4)(1201,4)(1202,4)(1203,4)(1204,4)(1205,4)(1206,4)(1207,4)(1208,4)(1209,4)(1210,4)(1211,4)(1212,4)(1213,4)(1214,4)(1215,4)(1216,4)(1217,4)(1218,4)(1219,4)(1220,4)(1221,4)(1222,4)(1223,4)(1224,4)(1225,4)(1226,4) diff --git a/guitar/tabs/Classic/caprice_5.tab b/guitar/tabs/Classic/caprice_5.tab new file mode 100644 index 0000000..3b6963f --- /dev/null +++ b/guitar/tabs/Classic/caprice_5.tab @@ -0,0 +1,446 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / p / paganini_nicolo / caprice_5.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Nicolo Paganini +Caprice No.5 +letostak@netcom.com + + + +|-------------------7--12---11-8-7-----------------------------------------| +|-----------------8----------------10-8-7----------------------------------| +|-----------0---9-------------------------9-8------------------------------| +|---------2---9-------------------------------10-9-7-----------------------| +|-------2--------------------------------------------10-9-7-6--------------| +|-0---3-------------------------------------------------------8-7-5-3-2----| + + +|--------------------------12--15----14-12-11-8-7--------------------------- +|-----------------------12------------------------10-8-7-------------------- +|-----------0--------12----------------------------------9-8---------------- +|---------2-------14-----------------------------------------10-9-7--------- +|-------2------14---------------------------------------------------10-9---- +|-0---3--------------------------------------------------------------------- + + +----------------|--------------------------12-15-19----17-15-14-12-11-8-7--- +----------------|-----------------------12---------------------------------- +----------------|-----------0--------12------------------------------------- +----------------|---------2-------14---------------------------------------- +-7-6------------|-------2------14------------------------------------------- +-----8-7-5-3-2--|-0---3----------------------------------------------------- + + +--------------------------------------|-----------------------------15-19-24 +-10-8-7-------------------------------|-----------------------12-17--------- +--------9-8---------------------------|-----------0--------12--------------- +------------10-9-7--------------------|---------2-------14------------------ +-------------------10-9-7-6-----------|-------2------14--------------------- +----------------------------8-7-5-3-2-|-0---3------------------------------- + + +-23-20-19------------------------------------------------------------------| +----------22-20-19---------------------------------------------------------| +-------------------21-20-17-16---------------------------------------------| +-------------------------------19-17-16-14-13------------------------------| +----------------------------------------------15-14-12-10-9-7-6------------| +----------------------------------------------------------------8-7-5-3-2--| + + +|---------------------------------------------------|----------------------- +|-------------------------------------------1-2-3-4-|-5-4-3-2--------------- +|-----------------------------------1-2-3-4---------|---------5-4-3-2------- +|---------------------------2-3-4-5-----------------|-----------------6-5-4- +|-------------------3-4-5-6-------------------------|----------------------- +|-0---1-2-3-4-5-6-7---------------------------------|----------------------- + + +----------------------------------------| +----------------------------------5-----| +----------------------------------0-----| +3---------------------------------------| +---7-6-5-4------------------------2-----| +-----------8-7-6-5-4-3-2-1-0------------| + + +||---------------------------------|---------------------------------------| +||---------------------------------|---------------------------------------| +||-------------------9-7-5---------|-------------------9-7-5---------------| +||---5-9-5---7-9-7-5-------9-7-5---|---5-9-5---7-9-7-5-------9-7-5---------| +||-7-------9---------------------9-|-7-------9----------------------9------| +||---------------------------------|---------------------------------------| + + +|----------------------------------|------------------------------------14-- +|----------------------------------|---------------------------------16----- +|------------------------------4---|------------------------------16-------- +|---6-9-6---7-10-7---4-7-4---5---5-|-----10-7------14----------16----------- +|-7-------7--------5-------5-------|-6-9------10-7----13-14-18-------------- +|----------------------------------|---------------------------------------- + + +-17-19-|-------------------------------------------------|------------------ +-------|----------------------------17-15-13-------------|------------------ +-------|----12-16-12----14-16-14-12----------16-14-12----|----12-16-12------ +-------|-14----------16-------------------------------16-|-14----------16--- +-------|-------------------------------------------------|------------------ +-------|-------------------------------------------------|------------------ + + +----------------------------------|-------------12----------------14-12----- +-------------17-15-13-------------|-------12-------15-13-12-------------15-- +-14-16-14-12----------16-14-12----|----13----13-------------13-14----------- +-------------------------------16-|-14-------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +----------|---------------------------------------------|------------------- +-13-12----|---------------------------------------------|------------------- +-------14-|-12-11------------------------12--------11---|-----9-------7----- +----------|-------14-12-11-12-14-10-9-12----9-7-10----7-|-5-9---9-4-7---7-2- +----------|---------------------------------------------|------------------- +----------|---------------------------------------------|------------------- + + +---------------|---------------3--------5--------7--|--------8-------------- +---------------|-------------3--------7--------8----|------8-------11------- +---5-------5---|-----5-----4--------5--------7------|----9------------12---- +-5---2-1-5---1-|-0-4---4-5--------7--------9--------|-10--------11-------14- +---------------|------------------------------------|----------------------- +---------------|------------------------------------|----------------------- + + +-----10-------------------|----15-14-12----------------14-12---------------| +--------12-------13-10----|-------------15-13-12----13-------15-14-12-11---| +-----------12----------11-|-12-------------------12----------------------11| +-12-----------12----------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + +|----12-10-8--------------10-8-7----------|---8-7---------------------9-12-- +|-12---------12-10-9---10--------10-8-7---|-8-----10-8-7---------8-11------- +|--------------------9------------------7-|--------------9-7-6-9------------ +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- + + +-15-9-|-15-10-------------------14-10------------------|----15-14-13-12-11-- +------|-------12----------------------10---------------|-------------------- +------|----------12----------------------11------------|-------------------- +------|-------------12-9--------------------12---------|-------------------- +------|------------------10--------------------12-9----|-10----------------- +------|---------------------10----------------------10-|-------------------- + + +-10-9-------------------------|--------------------------------------------| +------13-12-11-10-------------|--------------------------------------------| +------------------13-12-11-10-|----------------------------9-7---7---------| +------------------------------|-14-13-12-11-10-9-8-7-----9---------10-7----| +------------------------------|-----------------------10-------9-----------| +------------------------------|--------------------------------------------| + + +|-----------------------------------------|| +|-----------------------------------------|| +|--------------7-------------------7------|| +|----9-----------10-7----9-----------10-7-|| +|-10------10-9--------10------10-9--------|| +|------10------------------10-------------|| + +play ending 1 +repeat from first || and play rest + + + +ending 1 + +|----------------------------------| +|----------------------------------| +|-----------5----------------------| +|-5-9-7-5-4---7-4------------7-----| +|-----------------7-10-9-7-6---9-6-| +|----------------------------------| + + + +|-----------------------------------|---8-------7--------------------------| +|-----------------------------------|-----8-------9------10--------8-------| +|----7--------7-------5-------4-----|-------9-7-----7-------9--------7-----| +|------9--------9-------5-------3---|-----------------10------10-9-----9---| +|-10-----10-8-----8-7-----7-5-----5-|-7------------------------------------| +|-----------------------------------|--------------------------------------| + + +|------------------------------------------|----13----------12-------------- +|----10--------8---------------------------|-------13----------14-------15-- +|-------9--------9------10----------9------|----------14-12-------12-------- +|-10------10-8-----8-------10---------9----|-------------------------15----- +|--------------------12-------12-10-----10-|-12----------------------------- +|------------------------------------------|-------------------------------- + + +-------------------|-------------------------------------------------------| +----------13-------|----15----------13-------------------------------------| +-14----------12----|-------14----------14-------15----------14-------------| +----15-14-------14-|-15-------15-13-------13-------15----------14----------| +-------------------|-------------------------17-------17-15-------15-------| +-------------------|-------------------------------------------------------| + + +|----18----------17----------15----------13-------|----15-14-13-12-11-10-9-- +|-------18----------19----------15----------13----|------------------------- +|----------19-17-------17-15-------15-14-------14-|-12---------------------- +|-------------------------------------------------|------------------------- +|-17----------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +-------------------------|----------------------------------------|----11--- +-13-12-11-10-------------|----------------------------------------|--------- +-------------13-12-11-10-|---------------------------8-7---7------|--------- +-------------------------|-14-13-12-11-10-9-8-7----8---------10-7-|--------- +-------------------------|----------------------10-------9--------|-10------ +-------------------------|----------------------------------------|--------- + + +-10-9-8-7-6-5-----------------|----------------------------------|---------- +--------------9-8-7-6---------|----------------------------------|---4------ +----------------------9-8-7-6-|----------------------5-3---3-----|-----3---- +------------------------------|-10-9-8-7-6-5-4-3---5---------6-3-|-------5-- +------------------------------|------------------6-------5-------|-6-------7 +------------------------------|----------------------------------|---------- + + +-------------------------------|-----------------------------7----13-|-11-8- +-2-------2-------6-------4-----|----8--------6-----------8-----------|------ +---3-------3-------5-------5---|------7--------7-----7-----7---12----|------ +-----5-------5-------6-------7-|--------8--------6-----9-------------|------ +-------7-------8-------9-------|-10-------11-------8-----------------|------ +-------------------------------|-------------------------------------|------ + + +-----------------------------------|----------------10----11-6-------------| +-8----------------------------9----|----------10-11----11------8-----------| +---8------8--------------9-10---10-|-8-7-------------------------8-7-8-6---| +-----9-10---10-8-------------------|-----10-8----------------------------8-| +-----------------11-10-8-----------|---------------------------------------| +-----------------------------------|---------------------------------------| + + +|---------------------------------|----------------------------------------| +|-------------------9-8-6---------|-------------7-------7-------6----------| +|---5-8-5---6-8-6-5-------8-6-5---|---5-8-5---8---8---8---8---6---6--------| +|-6-------8---------------------8-|-6-------6-------7-------8--------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| + + +|----------------------------------------|----------------------------------| +|----------------------11-10-8-----------|-----6-----6-9-6---6-9-6----------| +|---7-10-7----8-10-8-7---------10-8-7----|---7---7--------------------8-12-8| +|-8--------10-------------------------10-|-8-------8-------9-------10-------| +|----------------------------------------|----------------------------------| +|----------------------------------------|----------------------------------| + + +|---------------8--------8---------9-------|-------------------------------- +|----11-8---------9--------10--------11----|----12-9------------------------ +|-------------------10-8------8---------10-|---------10-------------------11 +|-11------11-10-----------------11---------|-11---------11-9-----------11--- +|------------------------------------------|-----------------11-8-9-13------ +|------------------------------------------|-------------------------------- + + +-------14-18-|-------------------------------11-14-|------------------------ +-11-14-------|---9-6----------------------11-------|------------------------ +-------------|-------7---------------8-11----------|---8-11-8----9-11-9----- +-------------|-8-------8-6---------8---------------|-9--------11--------13-- +-------------|-------------8-5-6-9-----------------|------------------------ +-------------|-------------------------------------|------------------------ + + +----------------------|----------------------------------------------------| +----12----------12----|-------14----------14----------16----------17-------| +-11----11----12----12-|----13----13----15----15----15----15----16----16----| +----------14----------|-15----------16----------17----------18-------------| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| + + +|-------14----------14----------------------14----|-------------------12---- +|----14----14----16----16----15-18-15----14----14-|----13-16-13----12----12- +|-15----------16----------16----------15----------|-14----------13---------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +-------------------10----|---------------8----------------7---|------------- +----11-14-11----10----10-|----9-12-9---8---8---8-11-8---7---7-|---6-11-6---- +-12----------11----------|-10--------9-------9--------8-------|-7--------6-- +-------------------------|------------------------------------|------------- +-------------------------|------------------------------------|------------- +-------------------------|------------------------------------|------------- + + +---5-----------------------|--------------------19-23----------------------| +-5---5------10--------11---|--------------16-19------------10--------11----| +----------9----9----9----9-|-----------16----------------9----9----9----9--| +-------10--------10--------|-------116----------------10--------10---------| +---------------------------|-14-18-----------------------------------------| +---------------------------|-----------------------------------------------| + + +|-------7-------14-19----15-19-15----17-19-17-|----24-22-20-19-------------- +|-----7------16-------17----------19----------|-20-------------22-20-19-17-- +|---8-----16----------------------------------|----------------------------- +|-9-------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- + + +-15-19-15----17-19-17-|----24-22-20-19-------------22-20-19----------------| +----------19----------|-20-------------22-21----22----------22-20-19-------| +----------------------|----------------------21----------------------19----| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| + + +|----20-19-17----------------19-17-15-------------|----17-15-14------------- +|-20----------20-19-17----19----------19-17-16----|-17----------17-15-13---- +|----------------------17----------------------16-|----------------------16- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +----15-12----------------|-15-12-------------------14-11-------------------| +----------14-------------|-------12----------------------------------------| +-15----------15-12-------|----------12-------------------14-11-------------| +-------------------14----|-------------14----------------------13----------| +----------------------13-|----------------14----------------------12-------| +-------------------------|-------------------15-12-------------------14-11-| + + +|----12-11-10-9-8-7-6-------------------|----------------------------------| +|---------------------10-9-8-7----------|----------------------------------| +|------------------------------10-9-8-7-|-----------------------5-4---4----| +|---------------------------------------|-11-10-9-8-7-6-5-4---5---------7-4| +|---------------------------------------|-------------------7-------6------| +|-12------------------------------------|----------------------------------| + + +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|----------------4-----------------------4--------|----------------4-------- +|----5--4--7--5--------4-----5--4--7--5--------4--|----5--4--7--5--------4-- +|-7-----------------6-----7-----------------6-----|-7-----------------6----- +|-------------------------------------------------|------------------------- + + +------------------------| +------------------------| +----------------4-------| +----5--4--7--5--------4-| +-7-----------------6----| +------------------------| + + +|-------------------7-12----11-9-7-----------------------------------------| +|-------------0---9----------------10-9-7----------------------------------| +|-----------1---9-------------------------9-8-6----------------------------| +|---------2-------------------------------------9-7-6----------------------| +|-------2---------------------------------------------9-7-6----------------| +|-0---4-----------------------------------------------------9-7-5-4-2------| + + +|-------------------------12-16----14-12-11-9-7----------------------------- +|--------------0-------12-----------------------10-9-7---------------------- +|------------1------13---------------------------------9-8-6---------------- +|----------2-----14------------------------------------------9-7-6---------- +|--------2---------------------------------------------------------9-7-6---- +|-0----4-----------------------------------------------------------------9-- + + +----------|----------------------------16-19-24--23-21-19------------------- +----------|--------------0----------17--------------------22-21-19-17-16-14- +----------|------------1---------16----------------------------------------- +----------|----------2--------18-------------------------------------------- +----------|--------2-------19----------------------------------------------- +-7-5-4-2--|-0----4---------------------------------------------------------- + + +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- +-16-14-13-------------------------------------|----------------------------- +----------16-14-13-11-9-7---------------------|----------------------------- +--------------------------11-9-7-6------------|--------------------3-4-5-6-- +-----------------------------------9-7-5-4-2--|-0----1-2-3-4-5-6-7---------- + + +--------------------------|------------------------------------------------- +-----------------1-2-3-4--|-5-4-3-2----------------------------------------- +---------1-2-3-4----------|---------5-4-3-2--------------------------------- +-2-3-4-5------------------|-----------------6-5-4-3------------------------- +--------------------------|-------------------------7-6-5-4----------------- +--------------------------|----------------------------------8-7-6-5-4-3-2-- + + +----------|| +-------5--|| +----------|| +-------6--|| +-------2--|| +-1-0------|| + + + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Def Leppard/hysteria.tab b/guitar/tabs/Def Leppard/hysteria.tab new file mode 100644 index 0000000..c790783 --- /dev/null +++ b/guitar/tabs/Def Leppard/hysteria.tab @@ -0,0 +1,153 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / d / def_leppard / hysteria.btab / [Click Here For A Printer Friendly Copy] + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Thu, 27 Jul 2000 01:54:16 -0400 +From: "Edgar Cantu" +Subject: d/def_leppard/hysteria.btab + + Hysteria-Def Leppard + +This is My favourite song on Hysteria Album, It's easy to play. + +The tab is very basic, does not have many adjustments, but the base +of the song this is d:o) + +Made by: Brandon Price +If you have any comments/corrections, you can E-mail me at +slang@defleppard.zzn.com + +Riff 1 + D G E G D +G |--------------------------------------------| +D |--------------------------------------------| +A |----55555555--------------------55555555----| +E |-------------33333333-0000-3333-------------| + + +Riff 2 + D/C C D/G G D/C C C/G/D +G |---------------|-----------|------------|-------------| +D |---------------|-----------|------------|-------------| +A |----553-333333-|--55-------|-553-333333-|-3-555555555-| +E |---------------|----333333-|------------|--3----------| + +Riff 3 + E C D E C D E C D +G |----------------------|----------------------|---------------| +D |----------------------|----------------------|---------------| +A |---7777-3333-55555555-|---7777-3333-55555555-|---7777-3333-5-| +E |----------------------|----------------------|---------------| + +Riff 4 + D G +G |-----------------------| +D |-----------------------| +A |----55555555-----------| +E |-------------33333333--| + +Riff 5 + A D A D A D +G |----------------------|---------------------|---------------------| +D |----------------------|---------------------|---------------------| +A |------------55555556--|------------55555556-|------------55555560-| +E |---55555556-----------|---55555560----------|---55555550----------| + + +Riff 6 + D G D C +G :|----------------------|: +D :|----------------------|: +A :|--55555555-55555555---|: +E :|----------3--------3--|: + +Intro +Riff 1 x 1 + + +Riff 1 +Out ... +You could ... +I'm in luck,.. +Hypnotized, >.. + +Riff 2 +I gotta .. +Can't stop.... + +Riff 3 +I get ... +Oh can ... +It's ... +When ... +Cause ... + +Hysteria when you're near + + +Riff 4 + +Riff 1 +Riff 2 +Riff 3 + +Come on +(Solo) Riff 5 + +Riff 2 + +Riff 3 + +Riff4-Riff6 + +Get closer to me +Get closer baby +Closer, get closer +Closer to me + +EnD + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Def Leppard/photograph.prj b/guitar/tabs/Def Leppard/photograph.prj new file mode 100644 index 0000000..3c1bf7d --- /dev/null +++ b/guitar/tabs/Def Leppard/photograph.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=photograph.tab +DELAYS diff --git a/guitar/tabs/Def Leppard/photograph.tab b/guitar/tabs/Def Leppard/photograph.tab new file mode 100644 index 0000000..e7c7819 --- /dev/null +++ b/guitar/tabs/Def Leppard/photograph.tab @@ -0,0 +1,241 @@ + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / d / def_leppard / photograph.tab / [Click Here For A Printer Friendly Copy] + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Sat, 7 Apr 2001 13:03:22 -0400 +From: "Jon LeBlanc" +Subject: d/def_leppard/photograph.tab + +Artist:Def Leppard +Song:Photograph +Tabbed by: Jon Leblanc#14 + +this is a great song from the album Pyromania and Vault.Wicked solo and +tab. + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-----------------|---9-9-9-8-8-----|-9-9-----7~~~~~--|---9-9-9-8-8---- +D:-----------------|---9-9-9-9-9-----|-7-7-----7~~~~~--|---9-9-9-9-9---- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-9-9-----7~~~----|---9-9-8-8-8-----|---9-9-7-7-7-----|---9-9-8-8-8---- +D:-7-7-----7~~~----|---9-9-9-9-9-----|---7-7-7-7-7-----|---9-9-9-9-9---- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + +Verse +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:---9-9-7-7-7-----|---9-9-8-8-8-----|---9-9-7-7-7-----|---9-9-8-8-8---- +D:---7-7-7-7-7-----|---9-9-9-9-9-----|---7-7-7-7-7-----|---9-9-9-9-9---- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + I'm .... + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:---9-9-7-7-7-----|---9-9-8-8-8-----|---9-9-7-7-7-----|---9-9-8-8-8---- +D:---7-7-7-7-7-----|---9-9-9-9-9-----|---7-7-7-7-7-----|---9-9-9-9-9---- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + -ture of p.... + +e:-------0---------|-----------------|-----------------|---------------- +B:-------2---------|-----------------|-----------------|---------------- +G:-2-2-2-2---------|---9-9-8-8-8-----|---9-9-7-7-7-----|---9-9-8-8-8---- +D:-2-2-2-2---------|---9-9-9-9-9-----|---7-7-7-7-7-----|---9-9-9-9-9---- +A:-0-0-0-0---------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + touch I see .... + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|-------------2-2 +G:---9-9-7-7-7-----|---9-9-8-8-8-----|---9-9-7-7-9-9-9-|-9---4-4-----2-2 +D:---7-7-7-7-7-----|---9-9-9-9-9-----|---7-7-7-7-9-9-9-|-9---4-4-----2-2 +A:-----------------|-----------------|-----------7-7-7-|-7---2-2-----0-0 +E:-----------------|-----------------|-----------------|---------------- + magazine.. wild so free So ... + +Pre-Chorus (X 2) +e:-----------------|-3-3-3---------3-|-3-3-----------2-|---------------2 +B:-----------------|-3-3-3---------0-|-0-0-----------3-|-2-2-----------3 +G:---9-9---9-9-9---|.0-0-0---------0-|-0-0-----------2-|-2-2-----------2 +D:---7-7---7-7-7---|.X-X-X---------X-|-X-X-----------0-|-2-2-----------0 +A:---0-0---0-0-0---|-3-3-3---------2-|-2-2-------------|-0-0------------ +E:-----------------|-----------------|-----------------|---------------- + Yeah... ... + + + Chorus: +e:-----------------|-----------------|-----------------|---------------- +B:-2-2-------2-2---|-----------------|-----------------|---------------- +G:-2-2-------2-2--.|-----0-------0---|-----0-------0---|-----0------0--- +D:-2-2-------2-2--.|---0-------2-----|---4-------4-----|---0------2----- +A:-0-0-------0-0---|-2-----3---------|-5-----7---------|-2-----3-------- +E:------4~~--------|-----------------|-----------------|---------------- + Photograph ... + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-----0------0----|-----0------0----|-----0-------0---|-----0------0--- +D:---4------4------|---0------2------|---4-------4-----|---0------2----- +A:-7-----5-------0-|-2-----3---------|-5-----7---------|-2-----3------3- +E:-----------------|-----------------|-----------------|---------------- + I dont need your Photograph All I've got is a Photograph + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-----------------|-4/5-5-5-4/5-5-5-|-4/5-5-5-4/5-5-5-|-4/5-5-5-------- +D:-----------------|-----------------|-----------------|---------------- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + Its not enough + + Chorus +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-(Repeat-verse,--|-----0-------0---|-----0-------0---|-----0-------0-- +D:----pre-chorus)--|---0-------2-----|---4-------4-----|---0-------2---- +A:-----------------|-2------3--------|-5-----7---------|-2-----3-------- +E:-----------------|-----------------|-----------------|---------------- + Photograph I dont want your Photograph + + + End Chorus +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-----0-------0---|-----0-------0---|-----0-------0---|-----0-------0-- +D:---4-------4-----|---0-------2-----|---4-------4-----|---0-------2---- +A:-7-----5---------|-2-----3---------|-5-----7---------|-2-----3-------0 +E:-----------------|-----------------|-----------------|---------------- + I dont need your Photograph All Ive got is a Photograph + + + Interlude: +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-----0---0-------|---9-9-9-8-8-----|-9-9---7---------|---9-9-9-8-8---- +D:---4---4---------|---9-9-9-9-9-----|-7-7---7---------|---9-9-9-9-9---- +A:-7---------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + Gone .... + + Solo: +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|-------------15^ +G:-9-9---7---------|---9-9-9-8-8-----|-9-9---7---------|-8-------------- +D:-7-7---7---------|---9-9-9-9-9-----|-7-7---7---------|---------------- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + + + Full Full Full Full +e:-----------15^---|-----------------|-----------------|---------------- +B:-15^-15-12-------|-----------------|-----------------|-12-12p9-------- +G:-----------------|-----------------|-----------------|---------11^---- +D:-----------------|-14~14~14~11-14~~|-14~11-14-16^----|---------------- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + + + + Full Full Full +e:---12-11-9-------|---------14^-14^-|-12-14^-12---12--|---------------- +B:-9---------12p9--|-12^--~~~--------|----------14-----|---9~~-9-9-10-12 +G:-----------------|-----------------|---------------9-|-11------------- +D:-----------------|-----------------|-----------------|---------------- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + + + + Full +e:-X----------------|-----------------|-----------------|--------------- +B:-X-17-17-19-21-19-|-16-19-21-19-21--|-22^-------------|--------------- +G:------------------|-----------------|-----------------|-(Repeat-pre--- +D:------------------|-----------------|-----------------|--chorus-and--- +A:------------------|-----------------|-----------------|--2nd-chorus)-- +E:------------------|-----------------|-----------------|--------------- + + + + P.M............ +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-----0-----0-0---|-----------------|-----------------|-5-5-5-5-7-7-9-- +D:---0-----2---2---|-----------------|---------5-5-5-5-|-5-5-5-5-7-7-9-- +A:-2-----3-----3---|-----------------|-3-3-3-3-3-3-3-3-|-3-3-3-3-5-5-7-- +E:-----------------|-----------------|-----------------|---------------- + Photograph I ... + + + Chorus 3: + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:-----0-------0---|------0------0---|-----0------0----|-----0-----0---- +D:---0-------2-----|---4-------4-----|---0------2------|---4-----4------ +A:-2-----3---------|-5------7--------|-2-----3---------|-5-----7-------- +E:-----------------|-----------------|-----------------|---------------- + Photograph Ohh Photograph Yeaah + + (W/Chorus 3) + Outro solo: Full + +e:-----------------|------------------|-----------------|--------------- +B:-15^--15~~~12-13-|-15-13-13p12-9-12-|-----------------|--------------- +G:-----------------|------------------|-14-12-14-14^----|-12-14~~~-12-14 +D:-----------------|------------------|-----------------|--------------- +A:-----------------|------------------|-----------------|--------------- +E:-----------------|------------------|-----------------|--------------- + + + + Full P.H... Full Full Full +e:-----------------|-------17^-19~~~-|-15-19-17^-------|-15-17^-15-17~~~ +B:-----------------|-5-5-------------|-----------15-17-|---------------- +G:-14^----12-14^---|-----------------|-----------------|---------------- +D:-----------------|-----------------|-----------------|---------------- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + + + + Full + +e:-17-19-21-20^----|-17p15p14--------|-----------------| +B:-----------------|----------17....-|-----------------| +G:-----------------|-----------------|-----------------| +D:-----------------|-----------------|--(Fade-Out...)--| +A:-----------------|-----------------|-----------------| +E:-----------------|-----------------|-----------------| + +"It's better to burn out then fade away!" + "have fun"(Jon) + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/DimeolaRuns/Am7.prj b/guitar/tabs/DimeolaRuns/Am7.prj new file mode 100644 index 0000000..461fb04 --- /dev/null +++ b/guitar/tabs/DimeolaRuns/Am7.prj @@ -0,0 +1,48 @@ +WINTABV1.00 +TABLATURE=Am7.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8)(154,8)(155,8)(156,8)(157,8)(158,8)(159,8)(160,8)(161,8)(162,8)(163,8)(164,8)(165,8)(166,8)(167,8)(168,8)(169,8)(170,8)(171,8)(172,8)(173,8)(174,8)(175,8)(176,8)(177,8)(178,8)(179,8)(180,8)(181,8)(182,8)(183,8)(184,8)(185,8)(186,8)(187,2)(188,8)(189,8)(190,8)(191,8)(192,8)(193,8)(194,8)(195,8)(196,8)(197,8)(198,8)(199,8)(200,8)(201,8)(202,8)(203,8)(204,8)(205,2)(206,8)(207,8)(208,8)(209,8)(210,8)(211,8)(212,8)(213,8)(214,8)(215,8)(216,8)(217,8)(218,8)(219,8)(220,8)(221,8)(222,2)(223,8)(224,8)(225,8)(226,8)(227,8)(228,8)(229,8)(230,8)(231,8)(232,8)(233,8)(234,8)(235,8)(236,8)(237,8)(238,8)(239,8)(240,8)(241,8)(242,8)(243,8)(244,8)(245,8)(246,8)(247,8)(248,8)(249,8)(250,8)(251,8)(252,8)(253,8)(254,8)(255,8)(256,8)(257,8)(258,8)(259,8)(260,8)(261,8)(262,8)(263,8)(264,8)(265,8)(266,8)(267,8)(268,8)(269,8)(270,8)(271,8)(272,8)(273,8)(274,8)(275,8)(276,8)(277,8)(278,8)(279,8)(280,8)(281,8)(282,8)(283,8)(284,8)(285,8)(286,8)(287,8)(288,8)(289,8)(290,8)(291,8)(292,8)(293,8)(294,8)(295,8)(296,8)(297,8)(298,8)(299,8)(300,8)(301,8)(302,8)(303,8)(304,8)(305,8)(306,8)(307,8)(308,8)(309,8)(310,8)(311,8)(312,8)(313,8)(314,8)(315,8)(316,8)(317,8)(318,8)(319,8)(320,8)(321,8)(322,8)(323,8)(324,8)(325,8)(326,8)(327,8)(328,8)(329,8)(330,8)(331,8)(332,8)(333,8)(334,8)(335,8)(336,8)(337,8)(338,8)(339,8)(340,8)(341,8)(342,8)(343,8)(344,8)(345,8)(346,8)(347,8)(348,8)(349,8)(350,8)(351,8)(352,8)(353,8)(354,8)(355,8)(356,8)(357,8)(358,8)(359,8)(360,8)(361,8)(362,8)(363,8)(364,8)(365,8)(366,8)(367,8)(368,8)(369,8)(370,8)(371,8)(372,8)(373,8)(374,8)(375,8)(376,8)(377,8)(378,8)(379,8)(380,8)(381,8)(382,8)(383,8)(384,8)(385,8)(386,8)(387,8)(388,8)(389,8)(390,8)(391,8)(392,8)(393,8)(394,8)(395,8)(396,8)(397,8)(398,8)(399,8)(400,8)(401,8)(402,8)(403,8)(404,8)(405,8)(406,8)(407,8)(408,8)(409,8)(410,8)(411,8)(412,8)(413,8)(414,8)(415,8)(416,8)(417,8)(418,8)(419,8)(420,8)(421,8)(422,8)(423,8)(424,8)(425,8)(426,8)(427,8)(428,8)(429,8)(430,8)(431,8)(432,8)(433,8)(434,8)(435,8)(436,8)(437,8)(438,8)(439,8)(440,8)(441,8)(442,8)(443,8)(444,8)(445,8)(446,8)(447,8)(448,8)(449,8)(450,8)(451,8)(452,8)(453,8)(454,8)(455,8)(456,8)(457,8)(458,8)(459,8)(460,8)(461,8)(462,8)(463,8)(464,8)(465,8)(466,8)(467,8)(468,8)(469,8)(470,8)(471,8)(472,8)(473,8)(474,8)(475,8)(476,8)(477,8)(478,8)(479,8)(480,8)(481,8)(482,8)(483,8)(484,8)(485,8)(486,8)(487,8)(488,8)(489,8)(490,8)(491,8)(492,8)(493,8)(494,8)(495,8)(496,8)(497,8)(498,8)(499,8)(500,8)(501,8)(502,8)(503,8)(504,8)(505,8)(506,8)(507,8)(508,8)(509,8)(510,8)(511,8)(512,8)(513,8)(514,8)(515,8)(516,8)(517,8)(518,8)(519,8)(520,8)(521,8)(522,8)(523,8)(524,8)(525,8)(526,8)(527,8)(528,8)(529,8)(530,8)(531,8)(532,8)(533,8)(534,8)(535,8)(536,8)(537,8)(538,8)(539,8)(540,8)(541,8)(542,8)(543,8)(544,8)(545,8)(546,8)(547,8)(548,8)(549,8)(550,8)(551,8)(552,8)(553,8)(554,8)(555,8)(556,8)(557,8)(558,8)(559,8)(560,8)(561,8)(562,8)(563,8)(564,8)(565,8)(566,8)(567,8)(568,8)(569,8)(570,8)(571,8)(572,8)(573,8) +RANGE=0;15;1 +RANGE=16;32;2 +RANGE=33;47;2 +RANGE=48;62;4 +RANGE=63;77;5 +RANGE=78;93;6 +RANGE=94;107;7 +RANGE=108;124;8 +RANGE=125;142;9 +RANGE=143;150;10 +RANGE=151;170;11 +RANGE=171;186;12 +RANGE=187;204;13 +RANGE=205;221;14 +RANGE=222;232;15 +RANGE=233;249;16 +RANGE=250;261;17 +RANGE=262;277;18 +RANGE=278;290;19 +RANGE=291;306;20 +RANGE=307;324;21 +RANGE=325;342;22 +RANGE=343;364;23 +RANGE=365;394;24 +RANGE=395;418;25 +RANGE=419;433;26 +RANGE=434;444;27 +RANGE=445;461;28 +RANGE=462;469;29 +RANGE=470;478;30 +RANGE=479;491;31 +RANGE=492;506;32 +RANGE=507;521;33 +RANGE=522;535;34 +RANGE=536;554;35 +RANGE=555;572;36 +COMMENT=(0,"Am7") +COMMENT=(16,"Eb(Half Diminished) H W ....") +COMMENT=(33,"FM") +COMMENT=(48,"E (Half Diminished) H W ...") +COMMENT=(63,"Am7") +COMMENT=(78,"Eb (Half Diminished) H W...") +COMMENT=(94,"FM") +COMMENT=(108,"E (Half Diminished)") +COMMENT=(125,"Am7") diff --git a/guitar/tabs/DimeolaRuns/Am7.tab b/guitar/tabs/DimeolaRuns/Am7.tab new file mode 100644 index 0000000..ba0cef1 --- /dev/null +++ b/guitar/tabs/DimeolaRuns/Am7.tab @@ -0,0 +1,172 @@ +%TabMaster v2.00r% + + +E|-5------------8-12-15-15-15-15-15-12----------2-------11-11-14-11------------------------- +B|-5---------10------------------------15-13-12-1-10-13-------------13-------13------------- +G|-5----9-12------------------------------------2----------------------14-11----14-11------- +D|-5-10-----------------------------------------1-------------------------------------13-10- +A|-7---------------------------------------------------------------------------------------- +E|-5---------------------------------------------------------------------------------------- + + + +E|-------1---------------------------------------------------------------8-10-11-12-7- +B|-------1----------------------------------------8-----------9-10-11-12-------------- +G|----10-2-10-9-------------------------9---------7---------9------------------------- +D|-------2------12-10-10-12-13-12-10-10---12-10-9-6-------9--------------------------- +A|-12----3----------------------------------------7-12-11----------------------------- +E|-------1---------------------------------------------------------------------------- + + + +E|-10-5-8-10-8-7-10-10-8-8-8-11-10-10-9-8-2-8-8-11-11-8------------------------ +B|----5-----------------------------------1-------------10------10------------- +G|----5-----------------------------------2----------------11-8----11-8-------- +D|----5-----------------------------------1-----------------------------10-7--- +A|----7----------------------------------------------------------------------9- +E|----5------------------------------------------------------------------------ + + + +E|---1----------------------------------------------------------------------------12-15- +B|---1--------------------------------------8--------9-10-11-12-15-15-13-12----13------- +G|-7-2-10-9---------------------------------7------9------------------------14---------- +D|---2------10-10-12-12-12-13-12-12-10-9----6----9-------------------------------------- +A|---3-----------------------------------12-7-11---------------------------------------- +E|---1---------------------------------------------------------------------------------- + + + +E|-14-5-13-12----------------------11-14-11----11-14-11----2----13-12-13-12-13-12-1-13-12---- +B|----5-------16-15-14-13-12-10-13----------13----------13-1----------------------1-------15- +G|----5----------------------------------------------------2-14-------------------2---------- +D|----5----------------------------------------------------1----------------------2---------- +A|----7---------------------------------------------------------------------------3---------- +E|----5---------------------------------------------------------------------------1---------- + + + +E|----------------------12----10---------------------------------------------------------- +B|-13-12-15-13-12----13----13----13-12-10-13-12-10-8-------------------------------------- +G|----------------14-------------------------------7-12-9---------------9----------------- +D|-------------------------------------------------6------12-10-9-10-12---10-------------- +A|-------------------------------------------------7-------------------------12-11-8-7---- +E|-------------------------------------------------------------------------------------10- + + + +E|---5----------------------------------------2-----------------8-11-8------- +B|---5----------------------------------------1--------------10--------10---- +G|---5----------------------------------------2------8-11-11--------------11- +D|---5-----------------------------9-9-7----7-1-7-10------------------------- +A|---7----7-7-7-7-------------7-10-------10---------------------------------- +E|-8-5-10---------10-8-7-8-10------------------------------------------------ + + + +E|--------------1----------------------------------------------------10-13-16-13- +B|---10---------1------------------------8----------------------9-12------------- +G|-8----11-8----2--------9-7-----9-12-10-7-9-----------------10------------------ +D|-----------10-2---7-10-------7---------6---12-10------9-12--------------------- +A|--------------3-8----------8-----------7---------7-11-------------------------- +E|--------------1---------------------------------------------------------------- + + + +E|-------5-17-17-17-20-20-20-20-19-19-17-17-2-17-20-17-------------------------------------1- +B|-15----5----------------------------------1----------19-------19-------------------------1- +G|----16-5----------------------------------2-------------20-17----20-17-------------------2- +D|-------5----------------------------------1----------------------------19-16-------16-16-2- +A|-------7---------------------------------------------------------------------18-18-------3- +E|-------5---------------------------------------------------------------------------------1- + + + +E|---------------------------------------------------------------------------------5------ +B|-------------------------------------8-------------------------------------------5------ +G|-------------------------------------7-------------------------------------------5------ +D|-16-17-16-16-17-15-15-16-14-14-15-13-6-13-14-12-13-11-12-10-11-9-10-9----9-------5----9- +A|-------------------------------------7--------------------------------12---12-11-7-12--- +E|---------------------------------------------------------------------------------5------ + + + +E|-----------------------------------------2--------------8-5-8-5------------- +B|-----------------------------------------1-----------10---------7-----7----- +G|---------------9--------------------9----2------8-11--------------8-5---8-5- +D|-------9-10-12---12-10-9-12-9----10---12-1-7-10----------------------------- +A|-11-12------------------------12-------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|-----1-----------------5-----------5-7-8-10-7--------------------- +B|-----1-------6-6-5---5---8-6-5-6-8------------8---8--------------- +G|-----2-----5-------7----------------------------9-7-7------------- +D|-7-4-2---7----------------------------------------6---10-9-7-9-10- +A|-----3-8------------------------------------------7--------------- +E|-----1------------------------------------------------------------ + + + +E|-------------------7-8-10-8-7-8-10-12-10-9-8-10-12-13-12-5-10-------12-13-15-13- +B|-----7-8-10-7-8-10---------------------------------------5----13-15------------- +G|-7-9-----------------------------------------------------5---------------------- +D|---------------------------------------------------------5---------------------- +A|---------------------------------------------------------7---------------------- +E|---------------------------------------------------------5---------------------- + + + +E|-12----------------12----15-17-12---------------2------------------------------8- +B|----15-13-12-13-15----15----------13------------1-------------------------7-10--- +G|-------------------------------------14-12-9----2-----------------------8-------- +D|---------------------------------------------10-1-9----------------7-10---------- +A|----------------------------------------------------10-------6-9-9--------------- +E|-------------------------------------------------------5-5-8--------------------- + + + +E|-1-8-8-8-10-13----10-------------------------------------7-8-7-5-4-5-7-5- +B|-1-------------12----13-------8------------------------9-----------5----- +G|-2----------------------12-10-7-9-----------------7-10-------------5----- +D|-2----------------------------6---12-10-9-9---6-9------------------5----- +A|-3----------------------------7-------------7----------------------7----- +E|-1-----------------------------------------------------------------5----- + + + +E|-5---------2-----------------1-------------------------------------- +B|---5-------1-----------------1-----------------------------8-------- +G|-----5-4---2-----------------2-----------------------------7-------- +D|---------5-1-------------7-7-2-7---7-10-9-8-7--------------6-------- +A|---------------------6-9-----3---8------------11-10-10-9-8-7-8-7-10- +E|-------------5-4-5-8---------1-------------------------------------- + + + +E|-----------------10-12-13-12-10-5----10---------------10-----------------2------------- +B|--------------12----------------5-12----13------12-12----13--------------1------------- +G|---------9-12-------------------5----------12-9-------------12-9---------2------------- +D|----8-11------------------------5--------------------------------12-10-9-1-13-12-12-10- +A|-10-----------------------------7------------------------------------------------------ +E|--------------------------------5------------------------------------------------------ + + + +E|-------------------------15-1-15-12----------------------------------12-15-14-13-12---16-13- +B|----------10-13-13-13-13----1-------13----------------------------------------------8------- +G|----------------------------2----------14-12----------------12-14-------------------7------- +D|-10-10----------------------2----------------15-14-12-14-15-------14----------------6------- +A|-------12-------------------3-------------------------------------------------------7------- +E|----------------------------1--------------------------------------------------------------- + + + +E|----------------------------------------------5- +B|-15-------15----------------------------15-13-5- +G|----16-13----16-13----------------13-16-------5- +D|-------------------15-12----12-15-------------5- +A|-------------------------14-------------------7- +E|----------------------------------------------5- + diff --git a/guitar/tabs/DimeolaRuns/G7Altered.prj b/guitar/tabs/DimeolaRuns/G7Altered.prj new file mode 100644 index 0000000..50179c7 --- /dev/null +++ b/guitar/tabs/DimeolaRuns/G7Altered.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\DimeolaRuns\G7Altered.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16) diff --git a/guitar/tabs/DimeolaRuns/G7Altered.tab b/guitar/tabs/DimeolaRuns/G7Altered.tab new file mode 100644 index 0000000..b83f833 --- /dev/null +++ b/guitar/tabs/DimeolaRuns/G7Altered.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|------------------------------------------------------------------------------- +B|--------------------------------12---------------------------------------13-14- +G|-----------------3---6---9-8---------------------------------------13-14------- +D|---------------4-------------10-------11------13-------15-11-13-14------------- +A|-------1-2-4-5-----7---6-----------10-------9-------11------------------------- +E|-0-1-2-----------------------------------12------13---------------------------- + + + +E|-16-12-------15-20- +B|-------13-15------- +G|------------------- +D|------------------- +A|------------------- +E|------------------- + diff --git a/guitar/tabs/DimeolaRuns/G7AlteredVamp.prj b/guitar/tabs/DimeolaRuns/G7AlteredVamp.prj new file mode 100644 index 0000000..5de749b --- /dev/null +++ b/guitar/tabs/DimeolaRuns/G7AlteredVamp.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\DimeolaRuns\G7AlteredVamp.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32) diff --git a/guitar/tabs/DimeolaRuns/G7AlteredVamp.tab b/guitar/tabs/DimeolaRuns/G7AlteredVamp.tab new file mode 100644 index 0000000..5d2871b --- /dev/null +++ b/guitar/tabs/DimeolaRuns/G7AlteredVamp.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|-----------------3-----------3-4-6-7-4------------------------- +B|-6-4-3-6-4-3---4-------3-4-6-----------6-----6----------------- +G|-------------5-----4-5-------------------7-4---7-4------------- +D|---------------------------------------------------6-3-----3-6- +A|-------------------------------------------------------5-5----- +E|--------------------------------------------------------------- + + + +E|---------------3-4-6-7-10-10-10-10-10-10-10-10------------------8------8- +B|---3-6-4-3---4---------------------------------8-8-8-8-9-8----9------9--- +G|-4---------------------------------------------------------10-----10----- +D|-----------5------------------------------------------------------------- +A|------------------------------------------------------------------------- +E|------------------------------------------------------------------------- + + + +E|------8------8------------------------------------------------------------------- +B|----9------9---11-9-8-11-9-8-9-8------------------------------------------------- +G|-10-----10-----------------------10-10-10-10-10-10-10-10-10-7-10-10-10-7--------- +D|-------------------------------------------------------------------------------9- +A|-------------------------------------------------------------------------10-10--- +E|--------------------------------------------------------------------------------- + + + +E|------------10-11-13-10-10------- +B|-------9-12----------------11---- +G|----10------------------------12- +D|-12------------------------------ +A|--------------------------------- +E|--------------------------------- + diff --git a/guitar/tabs/DimeolaRuns/G7b9.prj b/guitar/tabs/DimeolaRuns/G7b9.prj new file mode 100644 index 0000000..b7b1fd4 --- /dev/null +++ b/guitar/tabs/DimeolaRuns/G7b9.prj @@ -0,0 +1,26 @@ +WINTABV1.00 +TABLATURE=G7b9.tab +TYPES=(0,8)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,4) +COMMENT=(0,"G7b9 - G(I), B(III), D(V), F(VII), Ab(b9)") +COMMENT=(2,"B (II)") +COMMENT=(3,"D (III)") +COMMENT=(4,"G (VIII) M7") +COMMENT=(5,"E (VI)") +COMMENT=(6,"F (VII)") +COMMENT=(7,"G (VIII) M7") +COMMENT=(8,"G# (I)") +COMMENT=(9,"A# (II)") +COMMENT=(10,"B (III)") +COMMENT=(11,"C# (IV)") +COMMENT=(12,"D (V)") +COMMENT=(13,"G (VIII) M7") +COMMENT=(14,"E (VI)") +COMMENT=(15,"F (VII)") +COMMENT=(16,"G (VIII) M7") +COMMENT=(17,"G# (I)") +COMMENT=(18,"A# (II)") +COMMENT=(19,"B (III)") +COMMENT=(20,"C# (IV)") +COMMENT=(21,"D (V)") +COMMENT=(22,"E (VI)") +COMMENT=(23,"F (VII)") diff --git a/guitar/tabs/DimeolaRuns/G7b9.tab b/guitar/tabs/DimeolaRuns/G7b9.tab new file mode 100644 index 0000000..b77dbc6 --- /dev/null +++ b/guitar/tabs/DimeolaRuns/G7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-4------------------------------------------9-10-12-13-4- +B|-3-------------------------8------8-9-11-12------------3- +G|-4---------------------6-7---9-10----------------------4- +D|-3-------5-----5-6-8-9---------------------------------3- +A|-5-----5---7-8-----------------------------------------5- +E|-3-4-7-------------------------------------------------3- + diff --git a/guitar/tabs/DimeolaRuns/TEST.prj b/guitar/tabs/DimeolaRuns/TEST.prj new file mode 100644 index 0000000..6195e5d --- /dev/null +++ b/guitar/tabs/DimeolaRuns/TEST.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\DimeolaRuns\TEST.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/DimeolaRuns/TEST.tab b/guitar/tabs/DimeolaRuns/TEST.tab new file mode 100644 index 0000000..7d18295 --- /dev/null +++ b/guitar/tabs/DimeolaRuns/TEST.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--8- +B|-8--8- +G|-9--9- +D|-8--8- +A|-10-5- +E|-8--8- + diff --git a/guitar/tabs/Diminished/DiminishedRun_1.prj b/guitar/tabs/Diminished/DiminishedRun_1.prj new file mode 100644 index 0000000..2070433 --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Diminished\DiminishedRun_1.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16) diff --git a/guitar/tabs/Diminished/DiminishedRun_1.tab b/guitar/tabs/Diminished/DiminishedRun_1.tab new file mode 100644 index 0000000..3f77f01 --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_1.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-5-2---------------------------------------------------------------- +B|-----4-7-4---------------------------------------------------------- +G|-----------5-8-5--------------------------------------------------9- +D|-----------------7-10-7-------------------------------------9---8--- +A|------------------------9-12-9----9-----------------------8---7----- +E|-------------------------------11---11-8-11-8-5-8-5-2-2-7----------- + + + +E|------------10- +B|-----10---9---- +G|---8----7------ +D|-7------------- +A|--------------- +E|--------------- + diff --git a/guitar/tabs/Diminished/DiminishedRun_2.prj b/guitar/tabs/Diminished/DiminishedRun_2.prj new file mode 100644 index 0000000..77f108b --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Diminished\DiminishedRun_2.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32) diff --git a/guitar/tabs/Diminished/DiminishedRun_2.tab b/guitar/tabs/Diminished/DiminishedRun_2.tab new file mode 100644 index 0000000..3c04c59 --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_2.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------------------------10- +B|-----------------10---9---- +G|-----------9---8----7------ +D|-----9---8---7------------- +A|---8---7------------------- +E|-7------------------------- + diff --git a/guitar/tabs/Diminished/DiminishedRun_3.prj b/guitar/tabs/Diminished/DiminishedRun_3.prj new file mode 100644 index 0000000..5252ecd --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Diminished\DiminishedRun_3.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32) diff --git a/guitar/tabs/Diminished/DiminishedRun_3.tab b/guitar/tabs/Diminished/DiminishedRun_3.tab new file mode 100644 index 0000000..057fba3 --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_3.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----------------------------13- +B|-------------------12----12---- +G|-----------10---10----10------- +D|-----9---9----9---------------- +A|---8---8----------------------- +E|-7----------------------------- + diff --git a/guitar/tabs/Diminished/DiminishedRun_4.prj b/guitar/tabs/Diminished/DiminishedRun_4.prj new file mode 100644 index 0000000..3aa0e1a --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Diminished\DiminishedRun_4.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,4)(9,32)(10,32)(11,32) diff --git a/guitar/tabs/Diminished/DiminishedRun_4.tab b/guitar/tabs/Diminished/DiminishedRun_4.tab new file mode 100644 index 0000000..5a5aabf --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-----------------------8- +B|-----------------8---6--- +G|-----------7---6---5----- +D|-----7---6---5----------- +A|---6---5----------------- +E|-5----------------------- + diff --git a/guitar/tabs/Diminished/DiminishedRun_5.prj b/guitar/tabs/Diminished/DiminishedRun_5.prj new file mode 100644 index 0000000..607b17d --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Diminished\DiminishedRun_5.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32) diff --git a/guitar/tabs/Diminished/DiminishedRun_5.tab b/guitar/tabs/Diminished/DiminishedRun_5.tab new file mode 100644 index 0000000..f406d23 --- /dev/null +++ b/guitar/tabs/Diminished/DiminishedRun_5.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----------3-----------4-----------5-----------6-----------7--- +D|-----3---2-------4---3-------5---4-------6---5-------7---6----- +A|---2---1-------3---2-------4---3-------5---4-------6---5------- +E|-1-----------2-----------3-----------4-----------5-----------6- + + + +E|----------------------------------------------------------------------------- +B|----------------------------------------------------------------------------- +G|---------8-----------9------------10--------------11----------------12------- +D|---8---7-------9---8-------10---9---------11---10----------12----11---------- +A|-7---6-------8---7-------9----8--------10----9----------11----10----------12- +E|-----------7-----------8-------------9---------------10----------------11---- + + + +E|------------------------------- +B|------------------------------- +G|----------13----------------14- +D|-13----12----------14----13---- +A|----11----------13----12------- +E|-------------12---------------- + diff --git a/guitar/tabs/Diminished/Practice_1.prj b/guitar/tabs/Diminished/Practice_1.prj new file mode 100644 index 0000000..55c59f0 --- /dev/null +++ b/guitar/tabs/Diminished/Practice_1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Diminished\DiminishedRun_5.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4) diff --git a/guitar/tabs/Diminished/Practice_2.prj b/guitar/tabs/Diminished/Practice_2.prj new file mode 100644 index 0000000..796d450 --- /dev/null +++ b/guitar/tabs/Diminished/Practice_2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Diminished\DiminishedRun_5.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16) diff --git a/guitar/tabs/Dream Theatre/pullmeunder.prj b/guitar/tabs/Dream Theatre/pullmeunder.prj new file mode 100644 index 0000000..e79d6e4 --- /dev/null +++ b/guitar/tabs/Dream Theatre/pullmeunder.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=pullmeunder.tab +DELAYS= diff --git a/guitar/tabs/Dream Theatre/pullmeunder.tab b/guitar/tabs/Dream Theatre/pullmeunder.tab new file mode 100644 index 0000000..42d7d10 --- /dev/null +++ b/guitar/tabs/Dream Theatre/pullmeunder.tab @@ -0,0 +1,713 @@ + +Home New Tabs Guitar Forums Cool! Lessons ICQ Buddies Premier Sites + + + Mon Dec 3, 2001 TabCrawler.Com- Use It To Play Something... + + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Received: from animal-farm.nevada.edu by redrock.nevada.edu (5.65c/M1.4) + with SMTP id ; Sun, 12 Sep 1993 15:47:52 -0700 +Received: from hamp.hampshire.edu by animal-farm.nevada.edu id ; Sun, 12 Sep 1993 15:47:43 -0700 +Date: Sun, 12 Sep 93 18:49 EDT +From: DTONYA@hamp.hampshire.edu +Subject: Pull Me Under by Dream Theater +To: jamesb@animal-farm.nevada.edu +Message-Id: +X-Envelope-To: jamesb@nevada.EDU +X-Vms-To: IN%"jamesb@nevada.edu" + +Date sent: 12-SEP-1993 18:46:45 + + Here is Pull Me Under by Dream Theater as released on the Images +and Words album in 1992. + + PULL ME UNDER + + +Notation + + (1) --------------------------------- +|--7^--| = bend (one whole step) | Transcribed by Patrick Mabry | + \ = slide down | | + / = slide up | Tabbed by Daniel Tonya | +~~~~~~~ = palm mute --------------------------------- + X = percussive mute +|-5h6p5-| = hammer on, pull off + +Intro + + ~~~~~~~~~ ~~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-----------------0-------0-------|----------------0-------0--------|| +D||-----------7---------------------|---------4-----------------------|| +A||---------------------------------|---------------------------------|| +e||---0-----------------------------|---0-----------------------------|| + + ~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|-----------------------------0---|| +G||----------------0--------0-------|-----------0------------2--------|| +D||---------4-----------------------|-------------------0-------------|| +A||---------------------------------|-------3-------------------------|| +e||---0-----------------------------|--0------------------------------|| + + ~~~~~~~~~ ~~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-----------------0-------0-------|----------------0-------0--------|| +D||-----------7---------------------|---------4-----------------------|| +A||---------------------------------|---------------------------------|| +e||---0-----------------------------|---0-----------------------------|| + + ~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|-----------------------------0---|| +G||----------------0--------0-------|-----------0------------2--------|| +D||---------4-----------------------|---------------------------------|| +A||---------------------------------|-------3-------------------------|| +e||---0-----------------------------|--0-----------------1------------|| + + ~~~~~~~~~ ~~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-----------------0-------0-------|----------------0-------0--------|| +D||-----------7---------------------|---------4-----------------------|| +A||---------------------------------|---------------------------------|| +e||---0-----------------------------|---0-----------------------------|| + + ~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|-----------------------------0---|| +G||----------------0--------0-------|-----------0------------2--------|| +D||---------4-----------------------|-------------------0-------------|| +A||---------------------------------|-------3-------------------------|| +e||---0-----------------------------|--0------------------------------|| + + ~~~~~~~~~ ~~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-----------------0-------0-------|----------------0-------0--------|| +D||-----------7---------------------|---------4-----------------------|| +A||---------------------------------|---------------------------------|| +e||---0-----------------------------|---0-----------------------------|| + + ~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|-----------------------------0---|| +G||----------------0--------0-------|-----------0------------2--------|| +D||---------4-----------------------|---------------------------------|| +A||---------------------------------|-------3-------------------------|| +e||---0-----------------------------|--0-----------------1------------|| + +E||-----------------------0---------|----------------------0----------|| +B||----------------------------0----|----------------------------0----|| +G||-------------0-------------------|------------0--------------------|| +D||---------7-----------------------|--------4------------------------|| +A||---------------------------------|---------------------------------|| +e||---0--------------0--------------|---0-------------0---------------|| + +E||-----------------------0---------|---------------------------------|| +B||----------------------------0----|------------------------------0--|| +G||-------------0-------------------|-------------0------------2------|| +D||---------4-----------------------|----------------------0----------|| +A||---------------------------------|---------3-----------------------|| +e||---0--------------0--------------|--0------------------------------|| + +E||-----------------------0---------|----------------------0----------|| +B||----------------------------0----|----------------------------0----|| +G||-------------0-------------------|------------0--------------------|| +D||---------7-----------------------|--------4------------------------|| +A||---------------------------------|---------------------------------|| +e||---0--------------0--------------|---0-------------0---------------|| + +E||-----------------------0---------|---------------------------------|| +B||----------------------------0----|------------------------------0--|| +G||-------------0-------------------|-------------0------------2------|| +D||---------4-----------------------|---------------------------------|| +A||---------------------------------|---------3-----------------------|| +e||---0--------------0--------------|--0--------------------1---------|| + +E||-----------------------0---------|----------------------0----------|| +B||----------------------------0----|----------------------------0----|| +G||-------------0-------------------|------------0--------------------|| +D||---------7-----------------------|--------4------------------------|| +A||---------------------------------|---------------------------------|| +e||---0--------------0--------------|---0-------------0---------------|| + +E||-----------------------0---------|---------------------------------|| +B||----------------------------0----|------------------------------0--|| +G||-------------0-------------------|-------------0------------2------|| +D||---------4-----------------------|----------------------0----------|| +A||---------------------------------|---------3-----------------------|| +e||---0--------------0--------------|--0------------------------------|| + +E||-----------------------0---------|----------------------0----------|| +B||----------------------------0----|----------------------------0----|| +G||-------------0-------------------|------------0--------------------|| +D||---------7-----------------------|--------4------------------------|| +A||---------------------------------|---------------------------------|| +e||---0--------------0--------------|---0-------------0---------------|| + +E||-----------------------0---------|---------------------------------|| +B||----------------------------0----|------------------------------0--|| +G||-------------0-------------------|-------------0------------2------|| +D||---------4-----------------------|---------------------------------|| +A||---------------------------------|---------3-----------------------|| +e||---0--------------0--------------|--0--------------------1---------|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-------__------------------------|------__-------------------------|| +D||------7--9-----------------------|-----7--9------------------------|| +A||------7--------------------------|-----7---------------------------|| +e||------0--------------------------|-----0---------------------------|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-------__------------------------|----__---------------------------|| +D||------7--9-----------------------|---7--9\---5----5--------7---7---|| +A||------7--------------------------|---7--7\---3----3--------5---5---|| +e||------0--------------------------|---0-----------------------------|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-------__------------------------|------__-------------------------|| +D||------7--9-----------------------|-----7--9------------------------|| +A||------7--------------------------|-----7---------------------------|| +e||------0--------------------------|-----0---------------------------|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-------__------------------------|----__---------------------------|| +D||------7--9-----------------------|---7--9\---5----5-------X--------|| +A||------7--------------------------|---7--7\---3----3-------X--3--3--|| +e||------0--------------------------|---0-----------------------1--1--|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||-------------7--5----------------|-------------4--5----------------|| +A||---2--2--2---7--5---2--2--2--2---|---X--X------4--5---2--2--2--2---|| +e||---0--0--0----------0--0--0--0---|---X--X--0----------0--0--0--0---|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||-------------6--5----------------|-----------------------------0---|| +A||---X--X------4--5---2--2--2--2---|---X--X-------2--3----X--X---0---|| +e||---X--X--0----------0--0--0--0---|---X--X--0----2--3----X--X-------|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||-------------7--5----------------|-------------4--5----------------|| +A||---2--2--2---7--5---2--2--2--2---|---X--X------4--5---2--2--2--2---|| +e||---0--0--0----------0--0--0--0---|---X--X--0----------0--0--0--0---|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||-------------6--5----------------|---------------------------------|| +A||---X--X------4--5---2--2--2--2---|---X--X-------2--3----X--X---3---|| +e||---X--X--0----------0--0--0--0---|---X--X--0----2--3----X--X---1---|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||----------7--7-------------------|----------4--5-------------------|| +A||--2-2-2---5--5---X-X-2---X-X-2---|--X-X-----4--5---X-X-2---X-X-2---|| +e||--0-0-0----------X-X-0---X-X-0---|--X-X-0----------X-X-0---X-X-0---|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||----------6--5-------------------|-----------------------------0---|| +A||--X-X-----4--5---X-X-2---X-X-2---|---X--X-------2--3----X--X---0---|| +e||--X-X-0----------X-X-0---X-X-0---|---X--X--0----2--3----X--X-------|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||----------7--7-------------------|----------4--5-------------------|| +A||--2-2-2---5--5---X-X-2---X-X-2---|--X-X-----4--5---X-X-2---X-X-2---|| +e||--0-0-0----------X-X-0---X-X-0---|--X-X-0----------X-X-0---X-X-0---|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||----------6--5-------------------|---------------------------------|| +A||--X-X-----4--5---X-X-2---X-X-2---|---X--X-------2--3----X--X---3---|| +e||--X-X-0----------X-X-0---X-X-0---|---X--X--0----2--3----X--X---1---|| + + Mute all 6 strings with left hand for percussive effect +E||X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X--X-|| +B||X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X--X-|| +G||X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X--X-|| +D||X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X--X-|| +A||X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X--X-|| +e||X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X-|-X-X---X-X---X-X---X-X--X-|| + +First Verse + + Esus2 +E||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +B||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +G||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +D||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +A||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +e||-----------------------------------------------------------------|| + + C(add#4) +e||-----------------------------------------------------------------|| +B||--8---8---X---X---8---8---X---X---8---8---X---X---8---8---X---X--|| +G||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +D||--X---X---X---X---X---X---X---X---X---X---X---X---X---X---X---X--|| +A||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +E||--8---8---X---X---8---8---X---X---8---8---X---X---8---8---X---X--|| + + A5 +E||-----------------------------------------------------------------|| +B||--10--10--X---X---10--10--X---X---10--10--X---X---10--10--X---X--|| +G||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +D||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +A||-----------------------------------------------------------------|| +e||-----------------------------------------------------------------|| + + C5 Cb5 +E||--8---8---X---X---8---8---X---X---8---8---X---X---8---8---X---X--|| +B||--8---8---X---X---8---8---X---X---7---7---X---X---7---7---X---X--|| +G||--5---5---X---X---5---5---X---X---5---5---X---X---5---5---X---X--|| +D||-----------------------------------------------------------------|| +A||-----------------------------------------------------------------|| +e||-----------------------------------------------------------------|| + + Esus2 +E||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +B||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +G||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +D||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +A||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +e||-----------------------------------------------------------------|| + + C(add#4) +e||-----------------------------------------------------------------|| +B||--8---8---X---X---8---8---X---X---8---8---X---X---8---8---X---X--|| +G||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +D||--X---X---X---X---X---X---X---X---X---X---X---X---X---X---X---X--|| +A||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +E||--8---8---X---X---8---8---X---X---8---8---X---X---8---8---X---X--|| + + A5 +E||-----------------------------------------------------------------|| +B||--10--10--X---X---10--10--X---X---10--10--X---X---10--10--X---X--|| +G||--9---9---X---X---9---9---X---X---9---9---X---X---9---9---X---X--|| +D||--7---7---X---X---7---7---X---X---7---7---X---X---7---7---X---X--|| +A||-----------------------------------------------------------------|| +e||-----------------------------------------------------------------|| + + C5 F5 +E||--8---8---X---X---8---8---X---X---8---8---X---X------------------|| +B||--8---8---X---X---8---8---X---X---6---6---X---X---6---6---X---X--|| +G||--5---5---X---X---5---5---X---X---5---5---X---X---5---5---X---X--|| +D||-----------------------------------------------------------------|| +A||-----------------------------------------------------------------|| +e||-----------------------------------------------------------------|| + +Pre-Chorus + + Guitar 1 +E||-----------2---|--------3-------|---4------------|----3----2-----|| +B||---------------|------------3---|-----5--4h5p4---|----3----0-----|| +G||-------4-------|-----5----------|-6------------6-|---------------|| +D||---------------|----------------|----------------|---------------|| +A||---------------|----------------|----------------|---------------|| +e||---------------|----------------|----------------|---------------|| + ||Guitar 2 | | | || + || Esus2 | Csus2 | C#m(add9) | G B5 || +E||---------------|----------------|----------------|---------------|| +B||---------------|----------------|----------------|----0----------|| +G||---9-----------|---5------------|-6--------------|----0----4-----|| +D||---9-----------|---5------------|-6--------------|----0----4-----|| +A||---7-----------|---3------------|-4--------------|---------2-----|| +e||---0-----------|----------------|----------------|----3----------|| + + Guitar 1 +E||------2---3--2-|------2----3--2-|---4------------|----3----2-----|| +B||---------------|----------------|-----5--4h5p4---|----3----0-----|| +G||---4-----------|---5------------|-6------------6-|---------------|| +D||---------------|----------------|----------------|---------------|| +A||---------------|----------------|----------------|---------------|| +e||---------------|----------------|----------------|---------------|| + ||Guitar 2 | | | || + || Esus2 | Csus2 | C#m(add9) | G B5 || +E||---------------|----------------|----------------|---------------|| +B||---------------|----------------|----------------|----0----------|| +G||---9-----------|---5------------|-6--------------|----0----4-----|| +D||---9-----------|---5------------|-6--------------|----0----4-----|| +A||---7-----------|---3------------|-4--------------|---------2-----|| +e||---0-----------|----------------|----------------|----3----------|| + +Synth Solo #1 + + E5 Play with heavy palm muting next 8 bars D/F# +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------------|---------------------------------|| +A||-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-|| +e||-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|| + + C#dim(no 3rd) C5 +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-|| +A||-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-|-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-|| +e||---------------------------------|---------------------------------|| + + E5 F#5 +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------------|---------------------------------|| +A||-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-|| +e||-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|| + + C#dim(no 3rd) C5 F5 +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-|-5-5-5-5-5-5-5-5-----------------|| +A||-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-|-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-|| +e||---------------------------------|-----------------1-1-1-1-1-1-1-1-|| + +Second Verse + + E5 G5 Palm mute next 3 bars +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------5-----|---------------------------------|| +A||--2---2--------------------5-----|---------------------------------|| +e||--0---0--------------------3-----|-0-0-2-0-3-0-0-6-0-5-0-0-3-0-1-0-|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------------|---------------------------------|| +A||---------------------------------|---------------------------------|| +e||-0-0-2-0-3-0-0-6-0-5-0-0-3-0-1-0-|-0-0-2-0-3-0-0-6-0-5-0-0-3-0-1-0-|| + +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------------|---------------------------------|| +A||---------------------------------|---------------------------------|| +e||-0-0-2p0-3p0-0-6p0-5p0-0-3p0-1p0-|-0-0-2p0-3p0-0-6p0-5p0-0-3p0-1p0-|| + + PM...................\ PM...... +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|-----------------------5p4-2-----|| +D||---------------------------------|-----------------5-4-2-----------|| +A||---------------------------------|-----------3-2-0-----------------|| +e||-0-0-2p0-3p0-0-6p0-5p0-0-3p0-1p0-|-0-2-3-2-0-------------------3-2-|| + + Pre-Chorus #2 + + PM.......\ PM......................\ PM.................. +E||----------------------------------|-----------------------------------|| +B||----------------------------------|-----------------------------------|| +G||----------------------------------|-----------------------------------|| +D||----------------------------------|-----------------------------------|| +A||-------0-2-3-3p2p0---2---0---0----|-------2-3-5-5p3p2---3---2---2-----|| +e||-0-2-3-------------5---2---2--3-2-|-0-3-5-------------5---5---3---5-3-|| + + PM......\ PM..................\ PM....\ +E||-------------------------------|----------------------------------------|| +B||-------------------------------|----------------------------------------|| +G||-------------------------------|----------------------------------------|| +D||-------------------------------|---------2h5p2h5p2p0--------4h7p4h7p4p0-|| +A||------4-5-7-7p5p4--4-5-4-4-----|---2-3-5---------------3-5-7------------|| +e||-0-5-7----------------7-5-7-5--|-0--------------------0-----------------|| + + PM......\ PM.........................\ PM...............\ +E||-------------------------------------|----------------------------------|| +B||-------------------------------------|----------------------------------|| +G||-------------------------------------|----------------------------------|| +D||------4-5-7p5h7p5-4-5-4--------------|------5-7-9-9p7p5-5-7--5--5-------|| +A||-7-5-7-----------------7-9-7-5-9-7-5-|-7-7-9----------------9--7--7-5---|| +e||-------------------------------------|----------------------------------|| + + PM...........\ PM...............\ +E||---------------------------------------|| +B||---------------------------------------|| +G||---------------------------------------|| +D||--------7-9-11-11p9p7-7-9---7---7------|| +A||-9-9-11-------------------11--9---11-9-|| +e||---------------------------------------|| + + Guitar1 + ~~~~~~~~ ~~~~~~~~~~ ~~~~~~ +E||------------------------------------|------------------------------|| +B||------------------------------13-12-|----12-13-15--------13-12-----|| +G||---------------------10-----10------|--------------------------14--|| +D||----------------9-10---10-10--------|------------------------------|| +A||------------------------------------|------------------------------|| +e||------------------------------------|------------------------------|| + || Guitar 2 | || + || PM.......\ PM...\ | PM....\ || +E||------------------------------------|------------------------------|| +B||------------------------------------|------------------------------|| +G||--------------------------------5---|------------------------------|| +D||--------9-10-12p10p9-----3--2-3-----|------------------------------|| +A||-10-10-9-------------2-3--3-------2-|------------------2--------3--|| +e||----------------------------------0-|------------0--0--0--------1--|| + + Guitar1 + ~~~~~ +E||----------------------------------------16-16-17-18-|| +B||----------------------------17-18-20-18-------------|| +G||----16-17-18-19-17-18-19-20-------------------------|| +D||-17-------------------------------------------------|| +A||----------------------------------------------------|| +e||----------------------------------------------------|| + || Guitar 2 || + || PM........\ || +E||----------------------------------------------------|| +B||----------------------------------------------------|| +G||----------------------------------------------------|| +D||----------------------------------------------------|| +A||----------------------------------------3-----------|| +e||-----------------------------1------1---1-----------|| + + B5 C5 D5 B A5 G5 C5 ~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||----------------4-------10\------|--8---------------------3--------|| +G||---4---5---7----4--------9\------|--7----5----4---4p2--4-----4-----|| +D||---4---5---7----4--------7\------|--5----5-------------------------|| +A||-------------------------7\------|--5----3-------------------------|| +e||---------------------------------|---------------------------------|| + +Chorus #1 + + A5 A5 A5 A5 F5 G5 G5 +E||------|------------|----------|----------|-------------------------|| +B||------|------------|----------|----------|-------6-------8---8-----|| +G||------|-----2------|----2-----|-----2----|---2---5-------7---7-----|| +D||------|-----2------|----2-----|-----2----|---2---3-------5---5-----|| +A||------|-----0------|----0-----|-----0----|---0---3-------5---5-----|| +e||------|------------|----------|----------|-------------------------|| + + A5 G\B C5 C5 D5 E5 F5 F5 Bb5 +E||----------------|----------------|-----------------|---------------|| +B||----------------|----------------|-----------------|---------------|| +G||-2-----------5--|---5------------|-7--------9---10-|--10-------3---|| +D||-2-------5---5--|---5------------|-7--------9---10-|--10-------3---|| +A||-0-------2---3--|---3------------|-5--------7----8-|---8-------1---|| +e||----------------|----------------|-----------------|---------------|| + + PM.....................\ PM.....................\ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---0h2---------------------------|---0h2---------------------------|| +D||---0h2---------------------------|---0h2---------------------------|| +A||---0h2--2--2--2--2--2-2-2--2-2---|---0h2--2--2--2--2--2-2-2--2-2---|| +e||--------0--0--0--0--0-0-0--0-0---|--------0--0--0--0--0-0-0--0-0---|| + + PM.....................\ PM.....................\ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---0h2---------------------------|---0h2---------------------------|| +D||---0h2---------------------------|---0h2---------------------------|| +A||---0h2--2--2--2--2--2-2-2--2-2---|---0h2--2--2--2--2--2-2-2--2-2---|| +e||--------0--0--0--0--0-0-0--0-0---|--------0--0--0--0--0-0-0--0-0---|| + +Verse #3 + + ~~~~ ~~~~~~~~ ~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------------|---------------------------------|| +A||--------------------x---x---5----|---7p5--7----------5h7p5---------|| +e||--0----3----5---7----------------|--------------------------7------|| + + ~~~~ ~~~~~~~~ ~~~~~ D5 D5 +E||---------------------------------|----------------------------------|| +B||---------------------------------|----------------------------------|| +G||---------------------------------|--------------------7----------7--|| +D||---------------------------------|--------------------7----------7--|| +A||--------------------x---x---5----|---7p5--------x--x--5----x--x--5--|| +e||--0----3----5---7----------------|--------8-----x--x--5----x--x--5--|| + + ~~~~ ~~~~~~~~ ~~~~ ~~trill~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------------|---------------------------------|| +A||--------------------x---x---5----|---7p5--7----------5h7p5---------|| +e||--0----3----5---7----------------|---------------------------------|| + + ~~~~ ~~~~~~~~ ~~~~~ +E||---------------------------------|----------------------------------|| +B||---------------------------------|----------------------------------|| +G||---------------------------------|----------------------------------|| +D||---------------------------------|--------------------3----------3--|| +A||--------------------x---x---5----|--7p5---------3--3--3----3--3--3--|| +e||--0----3----5---7----------------|-------8---8\-1--1--1----1--1--1--|| + +Pre-Chorus #3 + + Esus2 Csus2 C#m(add9) G B5 +E||---------------|----------------|----------------|---------------|| +B||---------------|----------------|----------------|---------------|| +G||---9-----------|--5-------------|--6-------------|--0------4-----|| +D||---9-----------|--3-------------|--4-------------|--0------4-----|| +A||---7-----------|--3-------------|--4-------------|---------2-----|| +e||---0-----------|----------------|----------------|--3------------|| + + Esus2 Csus2 Csus2 G B5 +E||---------------|----------------|----------------|---------------|| +B||---------------|----------------|----------------|---------------|| +G||---9-----------|--5-------------|--5-------------|--0------4-----|| +D||---9-----------|--3-------------|--3-------------|--0------4-----|| +A||---7-----------|--3-------------|--3-------------|---------2-----|| +e||---0-----------|----------------|----------------|--3------------|| + +Synth Solo #2 + + E5 F#5 +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||---------------------------------|---------------------------------|| +D||---------------------------------|---------------------------------|| +A||-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-|| +e||-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|| + ___________________ + C#dim(no 3rd) C5 | Harmonics | +E||---------------------------------|-----------------------------------|| +B||---------------------------------|-----------------------------13-12-|| +G||---------------------------------|--------------------10---9-10------|| +D||-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-|-5-5-5-5-5-5-5-5-10---10-----------|| +A||-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-|-3-3-3-3-3-3-3-3-------------------|| +e||---------------------------------|-----------------------------------|| + + ~~~~~~~~~~ ~~~~ +E||------------------------|---------------------------------------15-17-18-|| +B||-12-13-15------13-12-13-|--------------------------15-15-16-17-19-18-----|| +G||------------------------|---------------16-17-18-19----------------------|| +D||------------------------|-17-15-17-18-19---------------------------------|| +A||------------------------|------------------------------------------------|| +e||------------------------|------------------------------------------------|| + + ~~~~~~~~~~~~~~~~~~~~~~~ G5 C5 (1)~~~~~~~~ +E||------19-------------------------|--------------------------5^------|| +B||---------------------------------|--8--------------------3----------|| +G||---------------------------------|--7---5-----4---4p2-4-------------|| +D||---------------------------------|--5---3---------------------------|| +A||---------------------------------|--5---3---------------------------|| +e||---------------------------------|----------------------------------|| + +Chorus #2 + + A5 A5 A5 +E||------|------------|----------|----------|| +B||------|------------|----------|----------|| +G||------|-----2------|----2-----|-----2----|| +D||------|-----2------|----2-----|-----2----|| +A||------|-----0------|----0-----|-----0----|| +e||------|------------|----------|----------|| + + A5 F5 G5 G5 A5 G\B C5 +E||-------------------------|-------------------|| +B||-------6-------8---8-----|-------------------|| +G||---2---5-------7---7-----|-2--------------5--|| +D||---2---3-------5---5-----|-2----------5---5--|| +A||---0---3-------5---5-----|-0----------2---3--|| +e||-------------------------|-------------------|| + + C5 D5 E5 F5 F5 Bb5 +E||----------------|-----------------|----------------------|| +B||----------------|-----------------|----------------------|| +G||---5------------|-7--------9---10-|--10----10\-3-----3---|| +D||---5------------|-7--------9---10-|--10----10\-3-----3---|| +A||---3------------|-5--------7----8-|---8-----8\-1-----1---|| +e||----------------|-----------------|----------------------|| + + ~~~~~~~~~ ~~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-----------------0-------0-------|----------------0-------0--------|| +D||-----------7---------------------|---------4-----------------------|| +A||---------------------------------|---------------------------------|| +e||---0-----------------------------|---0-----------------------------|| + + ~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|-----------------------------0---|| +G||----------------0--------0-------|-----------0------------2--------|| +D||---------4-----------------------|-------------------0-------------|| +A||---------------------------------|-------3-------------------------|| +e||---0-----------------------------|--0------------------------------|| + + ~~~~~~~~~ ~~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|---------------------------------|| +G||-----------------0-------0-------|----------------0-------0--------|| +D||-----------7---------------------|---------4-----------------------|| +A||---------------------------------|---------------------------------|| +e||---0-----------------------------|---0-----------------------------|| + + ~~~~~~~~~ +E||---------------------------------|---------------------------------|| +B||---------------------------------|-----------------------------0---|| +G||----------------0--------0-------|-----------0------------2--------|| +D||---------4-----------------------|---------------------------------|| +A||---------------------------------|-------3-------------------------|| +e||---0-----------------------------|--0-----------------1------------|| + +E||-------------------0-------------|----------------------0----------|| +B||---------------------------------|---------------------------------|| +G||-------------0-------------------|-------------2--------0----------|| +D||---------------------------------|--------4------------------------|| +A||---------------------------------|---------------------------------|| +e||----0----------------------------|----0----------------------------|| + +E||---------------------0-----------|---------------------------------|| +B||---------------------7-----------|----------------------7----------|| +G||---------------0-----------------|----------------------7----------|| +D||---------------------------------|-------------5-------------------|| +A||----------4----------------------|--------3------------------------|| +e||----0----------------------------|----0----------------------------|| + +E||----7----7--7--7----7--7--7------|---10----10-10-10----10-10-10----|| +B||----8----8--8--8----8--8--8------|---10----10-10-10----10-10-10----|| +G||----7----7--7--7----7--7--7------|---11----11-11-11----11-11-11----|| +D||----9----9--9--9----9--9--9------|---12----12-12-12----12-12-12----|| +A||---------------------------------|---------------------------------|| +e||---------------------------------|---------------------------------|| + +E||----12---12-12-12----12-12-12----|---12----12-12-12----12-12-12----|| +B||----12---12-12-12----12-12-12----|---10----10-10-10----10-10-10----|| +G||----12---12-12-12----12-12-12----|---10----10-10-10----10-10-10----|| +D||----11---11-11-11----11-11-11----|---10----10-10-10----10-10-10----|| +A||---------------------------------|---------------------------------|| +e||---------------------------------|---------------------------------|| + + Shamelessly taken from the May 1993 Guitar World Magazine. I hope this +all makes sense, I tried to be as exacting as possible with ASCII text. Great +song that is incredible to jam to, hope people can use this monster post! + + + + + +Back to Directory + + diff --git a/guitar/tabs/Dream Theatre/surrounded.prj b/guitar/tabs/Dream Theatre/surrounded.prj new file mode 100644 index 0000000..16ea2a7 --- /dev/null +++ b/guitar/tabs/Dream Theatre/surrounded.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=surrounded.tab +DELAYS diff --git a/guitar/tabs/Dream Theatre/surrounded.tab b/guitar/tabs/Dream Theatre/surrounded.tab new file mode 100644 index 0000000..3cd3b13 --- /dev/null +++ b/guitar/tabs/Dream Theatre/surrounded.tab @@ -0,0 +1,370 @@ + +Home New Tabs Guitar Forums Cool! Lessons ICQ Buddies Premier Sites + + + Mon Dec 3, 2001 TabCrawler.Com- Use It To Play Something... + + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: Gary Chapman + +Dream Theater - Surrounded - transcribed by Gary Chapman +========================== + +This transcription is copyright (c)1994 Gary Chapman. + +--- + +/ = slide +^ = hammer/pull +~ = vibrato ++ = tap +(+) = tap 12 frets above indicated note to get an octave harmonic + +--- + + +(piano chords used) + + Dsus4 Cadd9 Am/C E GaddA G(1) G(2) C(1) C(2) D(1) D6 Am7 Cmaj7 +E ----- ----- --8-- -7- --5-- -3- -10- --- ---- -10- ---- ---- --7-- +B ----- ----- --10- --- --3-- -3- -12- -5- -8-- -10- -12- -8-- --8-- +G --2-- --7-- --9-- -9- --4-- -4- -12- -5- -9-- -11- -11- -9-- --9-- +D --5-- --5-- --10- --- --5-- -5- -12- -5- -10- -12- -12- -10- --10- +A --5-- --3-- ----- --- ----- --- ---- -3- ---- ---- ---- -0-- ----- +E ----- ----- --8-- --- --3-- -3- ---- --- ---- ---- ---- ---- ----- + + D(2) Bm Em7 Dsus4(2) +E -5- -7- -7- ---10--- +B -7- -7- -8- ---8---- +G -7- -7- -7- ---7---- +D -7- -9- -9- ---0---- +A -5- --- -7- -------- +E --- --- --- -------- + +Intro: + +(keyboard arranged for guitar) +E -10---------- +B ----10------- +G -------12---- (repeatedly - alternate Dsus4 and Cadd9 piano chords) +D ----------12- +A ------------- +E ------------- + + +Dsus4 Cadd9 + Morning comes too early, + and nighttime falls too late. + + Am/C E GaddA G(1) C(1) +And sometimes all I want to do is wait. + + Am/C E GaddA G(1) D(1) D6 Am7 +The shadow I've been hiding in has fled from me today. + +Cmaj7 D(2) D(1) D6 Em7 + I know it's easier to walk away than look in in the eye. + +Am G(2) C(2) +And I will raise a shelter to the sky. + + Am G(2) C(2) +And here beneath this star tonight I'll lie. + + Am G(2) C(2) Dsus4(2) +She will slowly yield the light as I awaken from the longest + + + G Cadd9 D F +E ------------------------------------------------------------------------- +B -8-10-10/12-8----------------------------------------------------------- +G ---------------7/9-7~--/7-7-5-4--5-4-------9-9-7\5-7--------------------- +D -------------------------------------5~--------------7~-----7--9-9/10--9- +A ----------------------------------------------------------7-------------- +E ------------------------------------------------------------------------- + night. + +E ---------------- +B ---------------- +G ---------------- +D -7/9--7^8^7----- +A ------------10~- +E ---------------- + +E --------------------------------------------------------------------- +B ---8-10-10/12-8--8-10-8~----------------------5-^6^5^3----3----------- +G -7---------------7/9--7~--/7-7-5-4--5-4----------------5----2---/14~- +D ----------------------------------------5~--------------------------- +A --------------------------------------------------------------------- +E --------------------------------------------------------------------- + +E ------------------------------------- +B ------------------------------------- +G -14-16-16/17--16-14/16--14^16^14-12~- +D ------------------------------------- +A ------------------------------------- +E ------------------------------------- + +Keyboard/guitar duet: +(keyboard arranged for guitar) +E ------------------------------------------------- +B -12-10--------12-10--------12-10--------12-10---- +G -------12-12--------12-12--------12-12--------12- +D ------------------------------------------------- +A ------------------------------------------------- +E ------------------------------------------------- +(guitar) +E ------------------------------------------------- +B -8---------------------8---8--8--8--8----8--8---- +G -7---------------------7---7--7--7--7----7--7---- +D -5---------------------7---7--7--7--7----5--5---- +A ------------------------------------------------- +E ------------------------------------------------- + +(keyboard) +E ------------------------------------------------- +B -13-12-10-----13-12-10-----13-12-10-----13-12-10- +G ----------12-----------12-----------12----------- +D ------------------------------------------------- +A ------------------------------------------------- +E ------------------------------------------------- +(guitar) +E ------------------------------------------------- +B ------------------------------------------------- +G -5~---------------------0----4--4--4^5-----4-4--- +D -5~---------------------0----5--5--5-5-----5-5--- +A ------------------------------------------------- +E ------------------------------------------------- + +(keyboard) +E -10-----------10-----------10-----------10------- +B ----13-12--------13-12--------13-12--------13-12- +G ----------12-----------12-----------12----------- +D ------------------------------------------------- +A ------------------------------------------------- +E ------------------------------------------------- +(guitar) +E ------------------------------------------------- +B ------------------------------------------------- +G -7~---------------------7----7--7--7--7----7-7--- +D -7~---------------------7----7--7--7--7----7-7--- +A ------------------------------------------------- +E ------------------------------------------------- + +(keyboard) +E ------------------------------------------------- +B -13-12-10-----13-12-10-----13-12-10-------------- +G ----------12-----------12-----------12-----12---- +D ----------------------------------------12----12- +A ------------------------------------------------- +E ------------------------------------------------- +(guitar) +E -----------------------8---8--------------------- +B -----------------------8---8--------------------- +G -10~-------------------10--10-------------------- +D -10~-------------------10--10-------------------- +A ------------------------------------------------- +E ------------------------------------------------- + + +E --------------------------------------------- +B ----------8---8------------------------------ +G ----5--7----7----7-----7-----7-5---5\4------- +D -5------------------5-----5------7-----5----- +A -----------------------------------------5-3- +E --------------------------------------------- + + Dreams are shaking set sirens waking up + tired eyes. With the + light the memories all rush into his + head. + + +E ----------------------------------------------------------------- +B -----8---------------8---------8--------------------------------- +G -----7---------------7---------7---5------------------5--------5- +D -----5---------------5---------5---5------------------5--------5- +A ----------------------------------------------------------------- +E ----------------------------------------------------------------- + By a candle stands a mirror of his heart and soul she dances. She was + +E ----------------------------------------------------------------- +B ------------------------------------------------8---------------- +G -7--------7---7------7-----------7---10-----10--10--------5------ +D -7--------7---7------7-----------7---10-----10--10--------5------ +A ----------------------------------------------------------3------ +E ----------------------------------------------------------------- + dancing through the night above his bed. And walking to the + +E -3-------------------------------------------------------------------- +B ---3----------------------3----------------------------8----8---8--8-- +G -----5----------------0--------------------------------7----7---7--7-- +D -----5------------4------------------------------------5----5---5--5-- +A -----------5---------------------------------------------------------- +E ---------------------------------------------------------------------- + window he throws the shutters out against the wall. + +E -----------------------------------------------------------------3---- +B -8----8---8--8----8----8---8--8----8----8---8------3---------------3-- +G -5----5---5--5----7----7---7--7----7----7---7------5-----------------5 +D -5----5---5--5----5----5---5--5----7----7---5------5------------------ +A ---------------------------------------------------3------------------ +E ---------------------------------------------------------------------- + And from an ivory tower + +E --------------------------------- +B --------------------3------------ +G -----------------0--------------- +D -5------------4------------------ +A -3---------5--------------------- +E --------------------------------- + hears her call "let light surround you". + +(keyboard/guitar duet) + +E ------------------------------ +B ------------------------------ +G ------------------------------ +D -----5----5----------5----5--- +A ------------5---------------5- +E -3------------3---3----------- + It's been a long long time he's had a + while to think it over. + But in the end he only sees the change, light to dark + dark to light, light to dark, dark to light. + + +E ------------------------------------------------------------ +B ------------------------------------------------------------ +G -0-------------2---------0---------5------------4------5--4- +D -0-------------0---------0---------5------------5------5--5- +A ------------------------------------------------------------ +E -3---------------------------------------------------------- + Heaven must be more than this when angels waken with a kiss. + +E ------------------------------------------------------- +B ----------------------------------------------------8-- +G -7-------------7------7--------------7---10-----10--10- +D -7-------------7------7--------------7---10-----10--10- +A ------------------------------------------------------- +E ------------------------------------------------------- + Sacred hearts won't take the pain. But mine will never be the same. + + +E ---------------------3-------------------------- +B ----3------------------3----------------------3- +G ----5--------------------5----------------0----- +D ----5--------------------5------------4--------- +A ----3------------------------------5------------ +E ------------------------------------------------ + He stands before the window, his shadow slowly fading from the wall. + + + (+) +E --------------------------------------------------------------------- +B -12---12--12-12---12---12--12-12---12---12--------------------------- +G -12---12--12-12---10---10--10-10---12---12-----12-19-12-12(b)14-12~\- +D -10---10--10-10---10---10--10-10---10---10--------------------------- +A --------------------------------------------------------------------- +E --------------------------------------------------------------------- + + +E ------------------3---------------------------------------------------------- +B ----3---------------3----------------------3--------------------------------- +G ----5-----------------5-----------------0------------------------------------ +D ----5-------------------5------------4--------------------------------------- +A ----3-----------------------------5------------------------------------------ +E ----------------------------------------------------------------------------- + and from an ivory tower hears her call "let the light surround you" + + +Solo: Requires a single slap-back delay of ~200-300 ms. My timing isn't + good enough to get it sounding right, or indeed work out exactly + what is being played. What's below is a rough idea of what I think + is going on. To confuse matters even further it sounds as though + there are regular pull-offs onto the open G. Knowing what John + Petrucci is capable of, he probably didn't even use a delay ! + +E ------------------------- ------------------------- +B ------------------------- ------------------------- +G -14-14-14\12-12-11-11/12- (repeat x 3) -17-17-17\16-14-16-16/17- +D ------------------------- ------------------------- +A ------------------------- ------------------------- +E ------------------------- ------------------------- + +E ------------------------- +B ------------------------- +G -19-19-19\17-17-16-16/17- (repeat x 3) +D ------------------------- +A ------------------------- +E ------------------------- + +E -13-15-12-15----15----15----15----15----15----15----- +B -------------15----13----12-------------------------- +G -------------------------------14----12-------------- +D -------------------------------------------15----14~- +A ----------------------------------------------------- +E ----------------------------------------------------- + +E ----------------------------------------------------------------------------- +B ------------------------------3---------------------------------------------- +G -2----------------------------2---------------------------------------------- +D -2------------------------2---0----------------4-------5-------------4---5--- +A -0------------------------2---0------7~----------------------5~-------------- +E ---------------------2~---0-------------------------------------------------- + Once lost but I was found. When I heard the stained glass shatter all a - + +E ----------------------------------------------------------------------------- +B -----------------------------------------3----------------3-----------------0 +G --------------------------------------------5-------0----------0---------5--- +D -----------x--x---2~-----------------5--------------------------------5------ +A -4~--------x--x-------0---3----------------2-----------------0--------- +E ----------------------------------------------------------------------------- + round me. I sent the spirits tumbling down the hill. + +E ----------------------------------------------------------------------------- +B ---------------------------------------------3---------------2--------------- +G -------2--0--------------------0---------0-----------2---------------2------- +D ----0---------------------4----------4-------------------5---------------5--- +A ---------------------2-----------5---------------4---------------0----------- +E -3--------------0------------------------------------------------------------ + But I will hold this one on high above me still. + +E ----------------------------------------------------------------------------- +B --------------1----------------0---------------------------------------3----- +G ------------------2--------0-------0--------------2----0-----------0--------- +D ----------2----------------------------------2-----------------4------------- +A -----0-----------------2----------------3------------------5----------------- +E ----------------------------------------------------------------------------- + She whispers words to clear my mind, I once could see but now at last I'm + +E -------- +B -------- +G -0------ +D -0------ +A -------- +E -3------ + blind. + + +Cmaj7 D(2) D(1) D6 Em7 +I know it's easier to walk away, than look it in the eye. + + Am G(2) C(2) +But I have given all that I could take. + + Am G(2) C(2) +And now I've only habits left to break. + + Am G(2) C(2) Dsus4(2) G(1) +Tonight I'll still be lying here, surrounded in all the light. + +--- + + +Back to Directory + + diff --git a/guitar/tabs/Eagles/hotel california.tab b/guitar/tabs/Eagles/hotel california.tab new file mode 100644 index 0000000..1c7fc5d --- /dev/null +++ b/guitar/tabs/Eagles/hotel california.tab @@ -0,0 +1,51 @@ + + Em B7 Dadd9 +e:-0-------------0---0-----|-2-------2----------|-------0--------------| +B:-0-------0-----------0-0-|-0-----------0------|-----3---3------3---0-| +G:-0---0-------0---0---0-2-|-2---2-----2--------|---2----------2---2---| +D:-2-2---2---2-------------|-1-1---1-------1~~~-|-0----------0---------| +A:-2-----------------------|-2------------------|----------------------| +E:-0-----------------------|--------------------|----------------------| + + E9 C G +e:-----0-0-------0-|---------------0---0-------|-----3---3-----------------| +B:---------0-------|---------1-----------------|-------------0-----0-------| +G:-----------0-0---|-----0-------0-----------0-|-------0---0-----0-------0-| +D:---5-------------|---2---2---2-----2---0^2---|---0-----------------0-----| +A:-4---------------|-3-------------------------|---------------2---2-------| +E:-----------------|---------------------------|-3-----------------3-------| + + Am7 B7 +e:---------------0-----------|-----------------0~~~~~~~~~~~~~~~~~~~~~~-| +B:---------1---------1-1~~~~-|---------0-------------------------------| +G:-----0-------0---0---0~~~~-|-----2-2---2-----------------------------| +D:---2---2---2---------------|---1---------1---------------------------| +A:-0-------------------------|-2-------------2-------------------------| +E:---------------------------|-----------------------------------------| + +That much repeats itself, but on the second time through, another guitar +(6-string acoustic without capo) is playing: + + Em B7 Dadd9 +e:-------------------------|--------------------|----------------------| +B:-------------------------|--------------------|----------------------| +G:-------------------------|--------------------|----------------------| +D:-0---------2------4------|--2-----0-----------|--------0--2----------| +A:-------------------------|-----------4--------|--4-------------------| +E:-------------------------|--------------------|----------------------| + + E9 C G +e:-------------------------|--------------------|----------------------| +B:-------------------------|--------------------|----------------------| +G:-------------------------|--------------------|----------------------| +D:-------------------------|--------------0-----|-0--0-/-4----0--------| +A:-2~~~~~~~~~~~~~~~~~~~~~~-|-2------4-----------|----------------------| +E:-------------------------|--------------------|----------------------| + + Am7 B7 +e:-------------------------|--------------------| +B:-------------------------|--------------------| +G:-------------------------|--------------------| +D:-2---2--/--5----2--------|-4~~~~~~~~~~~~~~~~~-| +A:-------------------------|--------------------| +E:-------------------------|--------------------| diff --git a/guitar/tabs/Eagles/hotelcalifornia.prj b/guitar/tabs/Eagles/hotelcalifornia.prj new file mode 100644 index 0000000..3ac86a2 --- /dev/null +++ b/guitar/tabs/Eagles/hotelcalifornia.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=hotelcalifornia.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8)(154,8)(155,8)(156,8)(157,8)(158,8)(159,8)(160,8)(161,8)(162,8)(163,8)(164,8)(165,8)(166,8)(167,8)(168,8)(169,8)(170,8)(171,8)(172,8)(173,8)(174,8)(175,8)(176,8)(177,8)(178,8)(179,8)(180,8)(181,8)(182,8)(183,8)(184,8)(185,8)(186,8)(187,8)(188,8)(189,8)(190,8)(191,8)(192,8)(193,8)(194,8)(195,8)(196,8)(197,8)(198,8)(199,8)(200,8)(201,8)(202,8)(203,8)(204,8)(205,8)(206,8)(207,8)(208,8)(209,8)(210,8)(211,8)(212,8)(213,8)(214,8)(215,8)(216,8)(217,8)(218,8)(219,8)(220,8)(221,8)(222,8)(223,8)(224,8)(225,8)(226,8)(227,8)(228,8)(229,8)(230,8)(231,8)(232,8)(233,8)(234,8)(235,8)(236,8)(237,8)(238,8)(239,8)(240,8)(241,8)(242,8)(243,8)(244,8)(245,8)(246,8)(247,8)(248,8)(249,8)(250,8)(251,8)(252,8)(253,8)(254,8)(255,8)(256,8)(257,8)(258,8)(259,8)(260,8)(261,8)(262,8)(263,8)(264,8)(265,8)(266,8)(267,8)(268,8)(269,8)(270,8)(271,8)(272,8)(273,8)(274,8)(275,8)(276,8)(277,8)(278,8)(279,8)(280,8)(281,8)(282,8)(283,8)(284,8)(285,8)(286,8)(287,8)(288,8)(289,8)(290,8)(291,8)(292,8)(293,8)(294,8)(295,8)(296,8)(297,8)(298,8)(299,8)(300,8)(301,8)(302,8)(303,8)(304,8)(305,8)(306,8)(307,8)(308,8)(309,8)(310,8)(311,8)(312,8)(313,8)(314,8)(315,8)(316,8)(317,8)(318,8)(319,8)(320,8)(321,8)(322,8)(323,8)(324,8)(325,8)(326,8)(327,8)(328,8)(329,8)(330,8)(331,8)(332,8)(333,8)(334,8)(335,8)(336,8)(337,8)(338,8)(339,8)(340,8)(341,8)(342,8)(343,8)(344,8)(345,8)(346,8)(347,8)(348,8)(349,8)(350,8)(351,8)(352,8)(353,8)(354,8)(355,8)(356,8)(357,8)(358,8)(359,8)(360,8)(361,8)(362,8)(363,8)(364,8)(365,8)(366,8)(367,8)(368,8)(369,8)(370,8)(371,8)(372,8)(373,8)(374,8)(375,8)(376,8)(377,8)(378,8)(379,8)(380,8)(381,8)(382,8)(383,8)(384,8)(385,8)(386,8)(387,8)(388,8)(389,8)(390,8)(391,8)(392,8)(393,8)(394,8)(395,8)(396,8)(397,8)(398,8)(399,8)(400,8)(401,8)(402,8)(403,8)(404,8)(405,8)(406,8)(407,8)(408,8)(409,8)(410,8)(411,8)(412,8)(413,8)(414,8)(415,8)(416,8)(417,8)(418,8)(419,8)(420,8)(421,8)(422,8)(423,8)(424,8)(425,8)(426,8)(427,8)(428,8)(429,8)(430,8)(431,8)(432,8)(433,8)(434,8)(435,8)(436,8)(437,8)(438,8)(439,8)(440,8)(441,8)(442,8)(443,8)(444,8)(445,8)(446,8)(447,8)(448,8)(449,8)(450,8)(451,8)(452,8)(453,8)(454,8)(455,8)(456,8) +TEMPO=750000 diff --git a/guitar/tabs/Eagles/hotelcalifornia.tab b/guitar/tabs/Eagles/hotelcalifornia.tab new file mode 100644 index 0000000..fa96e7e --- /dev/null +++ b/guitar/tabs/Eagles/hotelcalifornia.tab @@ -0,0 +1,287 @@ + +Home New Tabs Guitar Forums Cool! Lessons ICQ Buddies Premier Sites + + + Mon Dec 3, 2001 TabCrawler.Com- Use It To Play Something... + + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + + HOTEL CALIFORNIA by The Eagles (Live Version) + +*a 12 string strums each of the chords +*a classical guitar does the picking + + Bm9 A/B (an A works as well) +|-9-------------------------------------|-X-------------------------------| +|-7---------------2-3-5-7-7/8\7-5/7~~~~-|-10-------3-2--------------------| +|-7--4-4h6p4p3-4------------------------|-9---2-4------0-2-2h4-2----------| +|-7-------------------------------------|-11----------------------4/2-----| +|-9-------------------------------------|-12--------------------------5/7-| +|-7-------------------------------------|-9-------------------------------| + + Em ******REPEAT****** F#7 +-7--------0------0------0------0|---7p0---10p0-|-----7-6-7-9-10-9-10-12/14-2| +-8------0------0------0------0--|--8-----8-----|---8-----------------------2| +-9----0------2------4------7----|-9-----9------|-9-------------------------3| +-9--2------4------5------9------|--------------|-----------------2----------| +-X------------------------------|--------------|---------------4------------| +-X------------------------------|--------------|-------------2--------------| + +*5 BARS OF PERCUSSION THEN PLAY: + + Bm9 A/B +|-9----2h3p2---2-2---2---|-------------|-X----------------------- +|-7----------5-----5---3-|-5p3---3-----|-10------3p2---2--2------ +|-7--4-------------------|-----4---2/4-|-9---2-4-----4------2--4- +|-7----------------------|-------------|-11---------------------- +|-9----------------------|-------------|-12---------------------- +|-7----------------------|-------------|-9----------------------- + + Em +-----------------7--9-10-9-10-|-12\----------0--------0--------0- +-----5-8--7-7-8h10------------|------------0--------0--------0--- +-6-7--------------------------|----------0--------2--------4----- +------------------------------|-------2--------4--------5-------- +------------------------------|---------------------------------- +------------------------------|---------------------------------- + + F#7 +-------0-7p0---10-12-10----|---9-9h10p9/7-7h9p7/6--3-2-2-2-3-2--0-2----------| +-----0------------------12-|----------------------------------------3--2-----| +---7-----------------------|---------------------------------------------4-3-| +-9-----------9-------------|-------------------------------------------------| +---------------------------|-------------------------------------------------| +---------------------------|-------------------------------------------------| + +*The next part is repeated throughout the song with minor variations + (capoed on 7th fret of a 12 string) + +|-----------0-----|------2-----|------0-------|----------0-|----------0-------| +|-------0---------|----0---2-4-|----3-----3---|------0-----|------1-----------| +|-----0---0---0-2-|--2---------|--2-----2---2-|----0---0---|----0-----------0-| +|---2-------------|1-----------|0-------------|--2---------|--2-----2---0h2---| +|-----------------|------------|--------------|4-----------|3-----------------| +|-0---------------|------------|--------------|------------|------------------| + +|-------3------|------------0---|-----------2---| +|-----0-----0--|--------1-------|-------0-------| +|---0-----0----|------0---0-----|---0-2---2-----| +|--------------|----2-----------|---------------| +|-2------------|--0-------------|-2-------------| +|-------------3|--------------0-|---------------| + +*This is the bass run which leads into the song. + Bm F# A E +|----------|----------------|-----------|-------------0-| +|----------|----------------|-----------|---------------| +|----------|----------------|-----------|-------1---1---| +|------2-4-|-2-----0h2p0----|-----------|-----0---0-----| +|-5--------|-------------4--|-4----5-7\-|2--2-----------| +|----------|----------------|-----------|---------------| + G D Em F# +|-----------------|-------------|----------|-----------| +|-----------------|-------------|----------|-----------| +|-----------------|-------------|----------|-----------| +|-----------------|---0---/4----|-2----4-5-|-4h5p4p2-4-| +|-2----4---5-(5)\-|4----0-----5-|----------|-----------| +|-----------------|-------------|----------|-----------| + +Bm F# +On a dark desert highway, cool wind in my hair +A E +Warm smell of colitas rising up through the air +G D +Up ahead in the distance, I saw a shimmering light +Em +My head grew heavy and my sight grew dim +F# +I had to stop for the night + +Bm F# +There she stood in the doorway; I heard the mission bell +A E +And I was thinking to myself this could be heaven or this could be hell +G D +Then she lit up a candle, and she showed me the way +Em F# +There were voices down the corridor, I thought I heard them say + +D---------5-- +A---1-2-4-5-- +E-2---------- + + G D *1st time *second time + Welcome to the Hotel California. B-3-3--3--3-------- E|-9--9--9-/7-7-7/5-5\ + G-2-2--4--2-/6-4-2- B|-10-10-10/8-8-8/7-5\ + D-----------/7-5-4- + A------------------ + + Em Bm7 + Such a lovely place, such a lovely face + D|---------2-4-5- + A|2--4--5-------- + + G D + (1)Plenty of room at the Hotel California E|-9--9-/7-7-7-7/5-5-5\ + B|-10-10/8-8-8-8/7-7-7\ + + (2)They livin' it up at the Hotel California E|-9--9--9-/7-7-7/5-5\ + B|-10-10-10/8-8-8/7-7\ + Em F# +(1)Any time of year (any time of year) you can find it here +(2)What a nice surprise (what a nice surprise) bring your alibis + + +Her mind is Tiffany twisted, she got the Mercedes bends +She got a lot of pretty, pretty boys that she calls friends +How they dance in the courtyard, sweet summer sweat +Some dance to remember, some dance to forget + +So I called up the captain; "Please bring me my wine." +"We haven't had that spirit here since nineteen sixty-nine" +And still those voices are calling from far away +Wake you up in the middle of the night, just to hear them say + +CHORUS (with ending 2) + +Mirrors on the ceiling, the pink champagne on ice +And she said "We are all just prisoners here, of our own device" +And in the master's chambers, they gathered for the feast +They stab it with their steely knives, but they just can't kill the beast + +Last thing I remember, I was running for the door +I had to find the passage back to the place I was before +"Relax" said the nightman, "We are programmed to receive" +"You can check out anytime you like, but you can never leave" + +1st solo: + Bm F# +|-------|---------------------|-7-5-3-2----9-10-| +|-------|---------------------|-----------------| +|-----6-|9--9-9-9-9\7-6-9-7-6-|-7-6-4-3---------| +|-8-9---|---------------------|-----------------| +|-------|---------------------|-----------------| +|-------|---------------------|-----------------| +A E +|-12-12-12-12~~~12-10-9----10-9-------|-------------| +|-----------------------12------12-10-|-9-----------| +|-------------------------------------|---9---------| +|-------------------------------------|-----9-------| +|-------------------------------------|-------9h11--| +|-------------------------------------|------------2| + G D +|--------------------------------|-----------| +|--------------------------------|-----------| +|----------------------------2/4-|2-----4----| +|--------------2----4-2--5-4-----|---12---4--| +|-----0-2--5-4---5---------------|----|------| +|---3----------------------------|----|------| + | + --harmonic + + Em F#7 +|-0------0------0-------0-|---2----------2-2- +|---0------0------0-----0-|-----2----------2- +|-----0------0------0---0-|-------3---------- +|-------2------2------2---|---------4------4- +|-------------------------|-----------4------ +|-------------------------|-2-----------2---- + *****roll w/pick hand finger*********** + +2nd solo: + Bm +------------------------|----------------------------------------------------| +------------------------|----------------------------------------------------| +------------------9-11--|11h12p11\9-11----9-11-11h12p11\9-9h11p9\7-7h9p7\6---| +-9h11p9\8-9-11-12-------|--------------12----------------------------------9-| +------------------------|----------------------------------------------------| +------------------------|----------------------------------------------------| + F# A +|-------------------14-------|------------------------| +|-------12-14-12-11----------|--7-7-7-5-5-5-----------| +|---6-9----------------------|--------------7-7-6-4-2-| +|-8---------------------12\--|7-----------------------| +|----------------------------|------------------------| +|----------------------------|------------------------| + E G +|-------------------------0--------|--------------------------------3-| +|---3-3h5p3\2-2h3p2\0--------------|----------------------------3-5---| +|-1-------------------2-1----------|------------2-4-4h6p4\3-4-6-------| +|------------------------------2-4-|-5h7p5\4-5------------------------| +|----------------------------------|----------------------------------| +|----------------------------------|----------------------------------| + D Em +|-/5-5-5-5/7-5-3/5-----------------------|-------3p0---7p3-0-10p7----12p10----| +|-/7-7-7-7/8-7-5/7-----------------0h2h3-|-5p0-------0------------11-------12\| +|--------------------------0h1h2h3-------|-----0------------------------------| +|------------------0h2h3h4---------------|------------------------------------| +|----------------------------------------|------------------------------------| +|----------------------------------------|------------------------------------| + F# +|-2-2h3p2\0---0h2-0-------------------0-| +|-----------3-------3-2h3p2p0-2-3p2-3---| +|---------------------------------------| +|---------------------------------------| +|---------------------------------------| +|---------------------------------------| + +Outro: + +GTR 1 + Bm F# +e|------------------------------------|-----------------/6-| +B|-7p3----7p3----7p3----7p3----7p3----|-5p2---5p2---5p2----| +G|------4------4------4------4------4-|-----3-----3--------| + +GTR 2 +e|-10p7---10p7---10p7---10p7---10p7---|-9p6---9p6---9p6/14-| +B|------7------7------7------7------7-|-----7-----7--------| +G|------------------------------------|--------------------| + + +GTR 1 + A E +e|-------------------------------|-----------------/4-| +B|-5p2---5p2---5p2---5p2---5p2---|-3p0---3p0---3p0----| +G|-----2-----2-----2-----2-----2-|-----1-----1--------| + +GTR2 +e|-9p5---9p5---9p5---9p5---9p5---|-7p4---7p4---7p4/12-| +B|-----5-----5-----5-----5-----5-|-----5-----5--------| +G|-------------------------------|--------------------| + + +GTR 1 + G D +e|-------------------------------|--------------------| +B|-3p0---3p0---3p0---3p0---3p0---|-3-----3-----3---/7-| +G|-------------------------------|---2-----2-----2----| +D|-----5-----5-----5-----5-----5-|-----4-----4--------| + +GTR 2 +e|-7p3---7p3---7p3---7p3---7p3---|-5p2---5p2---5-/-10-| +B|-----3-----3-----3-----3-----3-|-----3-----3--------| +G|-------------------------------|--------------------| + + +GTR 1 + Em F# Bm +e|-----------------------------------|-------------------2------------|-2-| +B|-4p0---4p0---4p0---4p0---4p0---3h4-|-2-----3p0---5p2-----3---3p2----|-3-| +G|-----2-----2-----2-----2-----2-----|---3-------------3-----4----3-5-|-4-| +D|-----------------------------------|-----4-----4--------------------|-4-| + |-2-| +GTR 2 +e|-3p0---3p0---3p0---3p0---3p0-------|-------2----6----7--------------|-7-| +B|-----0-----0-----0-----0-----0-2h3-|-5-2-----3----7----7-------7-11-|-7-| +G|-----------------------------------|-----3-----4----9----7-7-9------|-7-| +D|-----------------------------------|--------------------------------|-9-| + + +Back to Directory + + diff --git a/guitar/tabs/Eagles/lifeinthefastlane.tab b/guitar/tabs/Eagles/lifeinthefastlane.tab new file mode 100644 index 0000000..c1f7fc7 --- /dev/null +++ b/guitar/tabs/Eagles/lifeinthefastlane.tab @@ -0,0 +1,181 @@ + +Home New Tabs Guitar Forums Cool! Lessons ICQ Buddies Premier Sites + + + Mon Dec 3, 2001 TabCrawler.Com- Use It To Play Something... + + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: rsn@cory.Berkeley.EDU (Sekhar Narayanaswami) +Subject: INTRO: Life in the Fast Lane (Eagles) + + +Here is what I think the intro to Life in the Fast Lane (by the +Eagles) is: + +E--------------------------------------------- +B--------------------------------------------- +G-----2---0--------------------2---0---------- +D-0^2---2---2p0------------0^2---2---2p0------ +A---------------0------------------------0---- +E-----------------3-0----------------------3-- + +E---------------------------------------- +B---------------------------------------- +G-----2---0---------------2---0---------- +D-0^2---2---2p0-------0^2---2---2p0------ +A---------------0-------------------0---- +E-----------------3-0-----------------3-- + +The difference between the two above riffs is that the first has a break in +it (the big space) and the second is continuous. +------------------ + +Return-Path: +Date: Wed, 3 Aug 1994 15:44:49 -0400 +To: guitar@nevada.edu + + +rsn@cory.Berkeley.EDU (Sekhar Narayanaswami) writes: +>Here is what I think the intro to Life in the Fast Lane (by the +>Eagles) is: +>E--------------------------------------------- +>B--------------------------------------------- +>G-----2---0--------------------2---0---------- +>D-0^2---2---2p0------------0^2---2---2p0------ +>A---------------0------------------------0---- +>E-----------------3-0----------------------3-- + +and later +Adam Schneider indigo@ucscb.ucsc.edu writes: +>Looks pretty good, but I think the last couple notes are like so: +> E--------------------------------------------- +> B--------------------------------------------- +> G-----2---0--------------------2---0---------- +> D-0^2---2---2p0------------0^2---2---2p0------ +> A---------------3-0----------------------3-0-- +> E-------------------3------------------------- +> ^^^^^ ^^^ + + +however,if you want to play the riff with some feeling +and sound..then I suggest neither of the above are right.. +This is how I do it..in the key of E! (chords of the song are E/A/B +basically) + + E----------------------------------|--------------------------- + B----------------------------------|--------------------------- + G----------------------------------|--------------------------- + D------7---5~----------------------|------7---5~--------------- + A--5^7---7-----7p5-----------------|--5^7---7----7p5----------- + E-------------------7--3~--0-------|------------------7--3~.--- + ^^^ +where ~ stands for a microtone bend(1/4) +and . stands for a muted note + + +Still more corrections..most welcome..(if any) + +Urban De Souza +(ujd@ecl.psu.edu) + + +From: dbloom@harp.aix.calpoly.edu (David M. Bloom) +Subject: TAB: Life in the Fast Lane Intro -Eagles + + +Alright, I got my tabber working. So here's the first Eagles tab from me. +If anyone wants any more Eagles' songs lemme know and I'll post 'em. +Latr +Dave + + + + Life in the Fast Lane + Eagles +Written by: +Don Henley +Glen Fry annd Joe Walsh + + + + +|-----------------------|-----------------------|---------------------------|--- +|-----------------------|-----------------------|---------------------------|--- +|-----------------------|-----------------------|---------------------------|--- +|-----7---5-------------|-----7---5-------------|-----7---5-----------------|--- +|-5h7---7---7-5---------|-5h7---7---7-5---------|-5h7---7---7-5---------5-7-|--- +|---------------7p5-3-0-|---------------7p5-3/4-|---------------7p5-3-0-----|--- + + + +------------------|-----------------------|-----------------------|------------- +------------------|-----------------------|-----------------------|------------- +------------------|-----------------------|-----------------------|------------- +7---5-------------|-----7---5-------------|-----7---5-------------|------------- +--7---7-5---------|-5h7---7---7-5---------|-5h7---7---7-5---------|------------- +----------7\5-3b4-|---------------7p5-3-0-|---------------7p5-3b4-|------------- + + + +--------------------------|-----------------------||---------------------|------ +--------------------------|-----------------------||---------------------|------ +--------------------------|-----------------------||---------------------|------ +----7---5-----------------|-7---5-----------------||---5p2-----2---------|------ +5h7---7---7-5---------5-7-|---7---7-5-------------||-------(3)---5/7-7-7-|------ +--------------7p5-3-0-----|-----------7\5-3-5-6-7-||-0-------------------|------ + + + +----------------------|-----------------------|-------------------||------------ +----------------------|-----------------------|-------------------||------------ +----------------------|-----------------------|-------------------||------------ +--5p2-----2---0-------|-5p2---x-2-------------|---5p2---2-0-------||------------ +------x-2-------2-----|-----x-----5/7---7---x-|-x-----x-----2-----||------------ +0-----------------3/4-|-------------------0---|---------------3/4-||------------ + + + + +================================================================================ +== TABLATURE EXPLANATION == +================================================================================ + +---------- ---------- +----5h8--- Hammeron ----(8)--- Ghost Note +---------- ---------- +----5p8--- Pulloff ---------- + +---------- ---------- +----5/8--- Slide Up -----x---- Dead Note +---------- ---------- +----5\8--- Slide Down ---------- + +---------- ||------|| Repeat Start & End +----5~~~-- Vibrato ||*----*|| +---------- ||*----*|| +---------- ||------|| + +Rhythm: + w = whole note W = dotted whole + h = half note H = dotted half + q = quarter note Q = dotted quarter + e = eighth note E = dotted eighth + s = sixteenth note S = dotted sixteenth + ^ = triplet + +================================================================================ +== Created with a shareware version of the BUCKET 'O TAB == +== tablature creation software for Windows == +== For more information: == +== email: gse@ocsystems.com == +== US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124 == +================================================================================ + + +Back to Directory + + diff --git a/guitar/tabs/Eric Johnson/CliffsOfDover.prj b/guitar/tabs/Eric Johnson/CliffsOfDover.prj new file mode 100644 index 0000000..90fa7b5 --- /dev/null +++ b/guitar/tabs/Eric Johnson/CliffsOfDover.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=ericj.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16) diff --git a/guitar/tabs/Eric Johnson/ericj.prj b/guitar/tabs/Eric Johnson/ericj.prj new file mode 100644 index 0000000..e4550f0 --- /dev/null +++ b/guitar/tabs/Eric Johnson/ericj.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=ericj.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4) +TEMPO=651578 diff --git a/guitar/tabs/Eric Johnson/ericj.tab b/guitar/tabs/Eric Johnson/ericj.tab new file mode 100644 index 0000000..41b9f1b --- /dev/null +++ b/guitar/tabs/Eric Johnson/ericj.tab @@ -0,0 +1,55 @@ +%TabMaster v1.02a% + + +E|---15-15-12-14----12-------12----------------12-15-14-12----14-12-------10-12-10-------10---- +B|---------------15----12-15----15-12----12-15-------------15-------15-12----------12-10----12- +G|------------------------------------14------------------------------------------------------- +D|--------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------- +E|-0------------------------------------------------------------------------------------------- + + + +E|----10---------------------5-7-6-5----------------------------------- +B|-10----12-10-10-p8-----5-8---------8-5---5-7---5--------------------- +G|-------------------9-7-----------------7-----4---7-4-----4----------- +D|-----------------------------------------------------7-5---7-5-----5- +A|---------------------------------------------------------------7-5--- +E|--------------------------------------------------------------------- + + + +E|--------------------------------------------7----8-h10-8--------------------- +B|---------------------------------------8-10---10---------12------12-------13- +G|-------------------12-12-----9------11-------------------------9------------- +D|-2-----2-------------------7------9------------------------------------14---- +A|---5-2---5-2------------------------------------------------10------12------- +E|-------------5-3-0-------8-----10-------------------------------------------- + + + +E|----------------------------15-15----15----15----15----15----15----15----15----15----15----15- +B|-------15-------17-------19-------19----------------------------17----19---------------------- +G|----------------------------------------19----------------17----------------19---------------- +D|----17-------17-------19----------------------19----17----------------------------19----17---- +A|-14-------15-------17------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|----15----15----15----15----15----15----15----15----15----15----17-15----15-19-17-15----17-15- +B|-------17----19----------------17----19----------------17----19-------19-------------19------- +G|-17----------------19----17----------------17----17------------------------------------------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------- +B|-19-15-13-17-15-13--------------------------------------------------------------- +G|-------------------14-12-16-14-12-------16-14-12-------16-14-14-12-------------0- +D|----------------------------------14-12----------14-12-------------14-12----17--- +A|--------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------15------ + diff --git a/guitar/tabs/Eric Johnson/manhattan.prj b/guitar/tabs/Eric Johnson/manhattan.prj new file mode 100644 index 0000000..a25ef1d --- /dev/null +++ b/guitar/tabs/Eric Johnson/manhattan.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=manhattan.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16) +TEMPO=651578 diff --git a/guitar/tabs/Eric Johnson/manhattan.tab b/guitar/tabs/Eric Johnson/manhattan.tab new file mode 100644 index 0000000..b4c8f5c --- /dev/null +++ b/guitar/tabs/Eric Johnson/manhattan.tab @@ -0,0 +1,657 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# +# + + +ERIC JOHNSON/ALBUM, 'VENUS ISLE', 'MANHATTAN' + +Firstly, put this all in a font with homogenous spacing, like Courier. +I'm pretty sure Eric tuned down a half step and played this in Em. +Anyway, that's how I've done it here which makes a few of the chords +more playable ( at least the way I've transcribed it- email me with any +alternative suggestions.) + +Use a clean sound, neck pickup, some reverb etc. + +Also, if anybody has some input on that harp arpeggio around 1:10, please advise. + +Ken Temple +(ktemple@idt.net) + + +MANHATTAN +Eric Johnson/ Venus Isle + + +---12---10-----------------------------------------------7------------12-- +-------------/12-------8-/12------------8h10p8----8/-10-----8------------- +----9----7--------9----------------------------7--7/-9------7----------9-- +-------------/9--------5--/9---------------------------------------------- +------------------7-----------------7-----------------------7------------- +-------------------------------------------------------------------------- + +-10---------------------- +-----/12----8---10------- +--7-----------------/9--- +-----/9-----5----7-------- +--------------------/7--- +------------------------- + +------------H------------------------12---10-----------------------------5 +---------12-13------8/10\8--------------------/12-------8--/12--------8--- +---------12---------------------------9----7--------9-----------------5--7 +-------------------10/12\10--------------------/9-------5---/9------------ +-----10---------------------------------------------7--------------------- +-------------------------------------------------------------------------- + + +--7--------5------------ +--5--------3------------ +-----------4------------ +--------0--------------- +------------------------ +------------------------ + + + + 00:19 +-----------------------------------------------------------------------12- +-------------------------------------------------------------------------- +------------12--12H14P12---11-------------12---11---9---7---9----------9-- +---------14-------------------12--14------------------9---7-9------------- +------14----------------------------------10----9---7---5---7------------- +-------------------------------------------------------------------------- + + +--10------------------- +--------/12------8--/12 +---7--------9---------- +---------/9------5--/9-- +------------7---------- +----------------------- + + + ^2 +-----/12------------------------------------------------------------------ +-----/12--------------7----------13--------------------------------------8 +-------------------7-----9-----------12------------------------------11--- +----------------7------------------------14--12----------------------12--- +------------10-----------10-----------------------14--12--14--10---------- +-------------------------------------------------------------------------- + + +----------------------- +----8------------------ +----9------------------ +---10------------------ +----------------------- +----------------------- + + +------12---10-------------------------------5---7--------5---------------- +---------------/12-------8---/12---------8------5--------3---------------- +-------9----7--------9-------------------5--7---7--------4--------------12 +---------------/9--------5---/9-----------------------0--------------14--- +---------------------7--------------------------------------------14------ +-------------------------------------------------------------------------- + + +----------------------- +----------------------- +--12H14---12--11------- +-----------------12--14 +----------------------- +----------------------- + + +------------------------------------------------x-------X------X---------- +------------------------------12--13/15---/12---8-------8------8---------8 +------12---11--9---7---9------------------------5-------5------5-----9---- +-----------------9---7-9-------9--10/12---/9----7-------7------7---------5 +------10---9---7---5---7------------------------0-------X------5-----7---- +------------------------------------------------x-------8------X---------- + +----------------------- +--10/12/13\12---------- +----------------------- +---7/9/-10\9----------- +----------------------- +----------------------- + + +------X------X------X------X-----------------------------------X-------X-- +------8------8------8------8---------12--13/15----17-----------8-------8-- +------5------5------5------5-------------------------/16-------5-------5-- +------7------7------7------7----------9--10/12----14-----------7-------7-- +------0------0------X------5-------------------------/14-------0-------0-- +------X------X------8------X-----------------------------------X-------X-- + + +----X-------X---------- +----8-------8---------- +----5-------5---------- +----7-------7---------- +----X-------5---------- +----8-------X---------- + + +------------------------------------------------------------------------12 +------------------------------------------12---10------------------------- +-------------12--12H14-12---11----------------------12---11---9----------9 +---------14---------------------12---14----9----7-------------9----------- +-----14---------------------------------------------10---9----7----------- +-------------------------------------------------------------------------- + + +---10------------------ +--------12--------8---- +----7---------9-------- +---------9--------5---- +--------------7-------- +----------------------- + + + ^2 01:04 + +-------------/12---------------------------12----------------------------- +-----/12-----/12------------------13--15-------15--13--------------------- +-----------------------------14------------------------14/16------12H14P12 +-----/9------------------12-----------------------------------14---------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + +HARP ARPEGGIO +----------------------- +----------------------- +---??!!!!????????------ +----------------------- +----------------------- +----------------------- + + + + + dist +-----12---10-------------------------------------------------------------- +--------------/12---------8---/12------12---10---8------------------------ +-----9----7----------9-----------------12---9----7------------11-12--14--- +--------------/9----------5---/9-------10---10---------------------------- +---------------------7---------------------------7---------12------------- +--------------------------------------------------------10---------------- + +----------------------- +----------------------- +-12--11---------------- +---------12--14-------- +----------------------- +----------------------- + + + CLEAN +-------------------10---12-------------------------------X-------X------X- +-----8---10--/12---10---12----------12--13/15---/12------8-------8------8- +-----7---9---/11---7----9--------------------------------5-------5------5- +-----5---7---/9---------------------9---10/12---/9-------7-------7------7- +---------------------------------------------------------0-------0------X- +---------------------------------------------------------X-------X------8- + +----X------------------ +----X------------------ +----8------------9----- +----5------------------ +----7------------7----- +----5------------------ + + + +-------------------------------X--------20---19---17---15---12---14---15-- +------8---10/12/13\12----------8------------------------------------------ +-------------------------------5------------------14---12---12---14---12-- +------5---7/-9/-10-\9----------7--------19---17------------------12------- +-------------------------------0----------------------------12--------12-- +-------------------------------X------------------------------------------ + + +----x------x----------- +----8------8----------- +----5------5----------- +----7------7----------- +----x------5----------- +----8------x----------- + + + +01:36 + +--------------------------------------------------------------10----7----- +------------------------------------------------8---10--/12---10----x----- +--------------12--12p14---12-----11-------------7---9---/11---7-----9----- +----------14-------------------------12---14----5---7---/9----------7----- +------14------------------------------------------------------------7----- +--------------------------------------------------------------------x----- + + +solo +----------------------- +----------------------- +---------------16------ +-------14--17---------- +---17------------------ +----------------------- + + + + +----------15--17--19-------17--15--19--------------------15--19--17-----15 +------17---------------------------------------------17------------------- +---------------------------------------------14--16----------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + +--17---15/17\15------- +----------------------- +----------------------- +----------------------- +----------------------- +----------------------- + + + + ^2 ^2 +----------------------------------------------------------------12-------- +------17---15------15---17----15------17----------------12--15------15--12 +---------------16-----------------14----------------14-------------------- +-------------------------------------------------------------------------- +--------------------------------------------12--14------------------------ +-------------------------------------------------------------------------- + + +----------------------- +---------------------- +--14--12--------------- +----------14----------- +----------------------- +---------------15--12-- + + + + + ^2 +---------------------------------------------------------------------12-15 +-----------------------------------------------------------------12------- +------14--14--12-----------12--------------------------------12----------- +------------------------------------14-------------------14--------------- +-------------------------------------------------10--14------------------- +-------------------12--12----------------10--12--------------------------- + + +--------17/19----17---- +----------------------- +----------------------- +----------------------- +----------------------- +----------------------- + + +------16-----12--14------12-------------------13P12P10--12P10------------- +---------------------14------12--14------12--------------------13-12------ +-------------------------------------13----------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + +----------------------- +----15--12------------- +/14----------12-------- +----------------13----- +----------------------- +----------------------- + + + 01:57 +-------------------------------------------------------------------------- +-----------------11------------------------------------------------------- +---------------------12-----------14----------14------11------------------ +-------------------------13---10------14--12--------------12-------------- +------15--14--------------------------------------------------14---------- +-------------------------------------------------------------------------- + + +-------------------12-- +---------------12------ +------------9---------- +----5--7/9------------- +-7--------------------- +----------------------- + + + ^2 +---------------17-16------------------------------------------------------ +-------15------------17-19------------------------------------------------ +---------------------------18-16-------16----------------------------/19-- +---------------------------------19-16----19-16--------------------------- +-------------------------------------------------19-16-14----------------- +-----------------------------------------------------------17-14---------- + + +-----19-22-19-------19- +20-22---------22-20---- +----------------------- +----------------------- +----------------------- +----------------------- + + +------------------------------------------------------------------------- +-------22-20----20-------------------------------------------------------- +-------------21----21-19----21-19-------------19-16----------------------- +-------------------------21-------21-19-17----------19-17----------------- +-------------------------------------------19--------------19-17--14------ +----------------------------------------------------------------------15-- + + + ^2 ^2* +----------------------- +--------15--12--------- +---------------14------ +----------------------- +----------------------- +12--------------------- + *Begin note bent ^2 + + ^2 +------------------------------------15/17---15--------------------15--17-/ +----------------15--------------17---------------17-----------17---------- +-------12--------------------16---------------------------16-------------- +------------14------------------------------------------------------------ +------------------------------------------------------16------------------ +-------------------------------------------------------------------------- + + ^1/2 ^2 +19----------14--12----- +---17---------------15- +----------------------- +----------------------- +----------------------- +----------------------- + + +end solo + 02:16 +---------------------7------------7-8-7----------------7------------10---- +------------------8-----10-----8---------10---------8-----10-----8-------- +----------------------------9-----------------7--9------------9----------- +--------7--9--10---------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + + +------------7---------- +---------8------10----- +----------------------- +-9--10----------------- +----------------------- +----------------------- + + + played w/ slide 02:13 +----------------7-8-7---------------------------11--9--7-----12--14--15--- +-------------8---------10------12--10--12---12---------------------------- +---------9---------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + +-----12--17------------ +--12---------17/19----- +----------------------- +----------------------- +----------------------- + + + +-------------------------------------------------------------------------- +--------15------15-------------14/16--12-----------------------------14/16 +------------14------16\14/16--------------14--12-------------9--11-------- +--------------------------------------------------------7/9--------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + +----------12--14--15--- +\14--12---------------- +----------------------- +----------------------- +----------------------- +----------------------- + + + 3:05 * +------------12---17------------------------------------------------------- +--------12-----------17/19---15------15----------15--------------------10- +---------------------------------14------16----------14/15\14---12-------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + *make ^ octave harmonics with index + * * * finger of picking hand +---------10------------ +--------------------- +-12-------------------- +-----14-------10------- +----------------------- +----------------------- + + + + ^2* +-------------------7-------------------------7--8-------------------7----- +-------8----------------10----8----------8-----------------------------11\ +-------------------7----------------7H9------7------14----12--------7----- +-----------9--10--------------------9---------------12----10-------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + *ONLY BEND 3rd STG UP 2 AND RELEASE + +----------------------- +10---8--------8---8---- +-----------7H9----7--- +-----10---10------9---- +----------------------- +----------------------- + + + 03:28 +---------10---------7--------------------------------10------12------12--- +-----8------------------11\10--8-----------8-----12-------15-----15------- +-----7--------------7----------9------7H9--------------------------------- +----10-------------------------------10----------12----------------------- +----------------------------------------------------------15-------------- +-------------------------------------------------------------------------- + + +---10----10------5----- +----8-----8------5---- +----7-----7------7----- +----9----10------X----- +-----------------X----- +-----------------7----- + +-------X-------X------X----------------------------------X-------------X-- +-------8-------8------8-------------8----10/12/13\12-----8-------------8-- +-------5-------5------5--------9-------------------------5--------7----5-- +-------7-------7------7-------------5----7-/9-/10\12-----7-------------7-- +-------0-------X------5--------7-------------------------0-------------5-- +-------X-------8------X----------------------------------X--------8----X-- + + +----------------------- +-----12--13/15---17---- +----------------------- +-----9---10/12---14---- +----------------------- +----------------------- + + 03:43 + ^2 ^2 2\ +-------------X------X------X------------------------12-------------------- +-------------8------8------8------------------15---------15--------------- +-----/16-----5------5------5-------------14------------------14---14---12- +-------------7------7------7---------12----------------------------------- +-----/14-----0------X------5---------------------------------------------- +-------------X------8------X---------------------------------------------- + + +----------------------- +----------------------- +-----------12---------- +--14---12-------14----- +----------------------- +----------------------- + + + DIST 03:51 +------X------X------5--------------12---14\15---12-----------12----------- +------8------8------5---------10---------------------15\13-------15----10- +------5------5------7----------------------------------------------------- +------7------7------7-----10---------------------------------------------- +------X------5------5----------------------------------------------------- +------8------X------5----------------------------------------------------- + + ^2 +----------------------- +----------------------- +-12---9---7------------ +----------------------- +----------------------- +----------------------- + + + 03:58 +----------------------------------------15-------------------------------- +-----------------------12-/13---15--15------------------------------------ +-------------------------------------------------------------12--14/16\14- +-------------------12----------------------------------------------------- +------7--9--10---------------------------------12--14--15----------------- +-------------------------------------------------------------------------- + + +----------------------- +--------------8--10---- +--------7--9----------- +----------------------- +----/7----------------- +----------------------- + + +------10--8--7---------------------15--12--------------------------------- +------------------------12\13--15-----------15--13--12-------------------- +---------------------------------------------------------14--14H15P14--12- +--------------------14---------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + +----------------------- +----------------------- +----------------------- +---------------7---10-- +-------7--10----------- +----8------------------ + + +---------------------------------------------------------------15-17----15 +---------8--12-------------------------------------------15-17------------ +------9-----------------------------------------------16------------------ +------------------------------------------------14-17--------------------- +---------------------------14H15P14-----14--17---------------------------- +-------------------/12--15----------17------------------------------------ + + +--------15------------- +--17-15----17-15------- +----------------------- +----------------------- +----------------------- +----------------------- + + + + CLEAN +---------------------X------X---------------------------------X----------- +---------------------8------8-----------8---10-/12/13\12------8----------- +-----16-14-12--------5------5------9--------------------------5--------7-- +---------------------7------7-----------5---7---/9/10\9-------7----------- +---------------------X------5------7--------------------------0----------- +---------------------8------X---------------------------------X--------8-- + + +--X-------------------- +--8-------------------- +--5-------------------- +--7-------------------- +--5-------------------- +--X-------------------- + + + + + 04:15 +------13---13--12--12-11--11---/10----/7------X-----X------X-------------- +------11---11--10--10-9---9----/8-------------8-----8------8-------------- +--------------------------------------/9------5-----5------5---------9---- +------11---11--10--10-9---9----/10----/9------7-----7------7-------------- +----------------------------------------------0-----X------5---------7---- +----------------------------------------------X-----8------X-------------- + + +10/12\10--12------------- +--------------/12-------- +-7/9\-7---9---------9---- +--------------/9--------- +--------------------7---- +------------------------- + + + +-----X----X-----5--------------------------------------------------------- +-----8----8-----8--------------------------------------------------------- +-----5----7-----5-------------12--12H14-12--11----------------12---11--9-- +-----7----5-----7---------14--------------------12--14-------------------9 +-----0----X-----5------14-------------------------------------10---9---7-- +-----X----8-----X--------------------------------------------------------- + + +----------------------- +-------5----5---------- +-7-------------4------- +---7------------------- +-5--------------------- +-------5----4---------- + + + 04:33 * +-----------------------------------------------10----------15-----------17 +-----3-------3---------------------10----12-----------17-------------19--- +---------2-------2----0-------12---------12------------------------19----- +------------------------------14---------10------------------------19----- +-------------------------------------------------------------------17----- +-----3-------2--------1-------12------------------------------------------ + + + *I have no idea how you'd finger this + but it sounds like an DMAJ in 17pos. Try + hitting a one octave harm. on the D string. + + + + + diff --git a/guitar/tabs/Heart/Heart - Magic Man.tab b/guitar/tabs/Heart/Heart - Magic Man.tab new file mode 100644 index 0000000..ddb9105 --- /dev/null +++ b/guitar/tabs/Heart/Heart - Magic Man.tab @@ -0,0 +1,198 @@ +Archive Browser + + About OLGA + Shop + FAQs + Community + Find Tab + + + Browse The Archive + Guitar Tab + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction + Don't know the chords? Check out ... + The LARGE Chord Dictionary + or use the chord generator, + thanks to Jim Cranwell. + For tab files, read the... + Guide To Reading Tablature + + + Archive Browser + + /main / h / heart / magic_man.tab / [Click Here For A Printer + Friendly Copy] + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Sat, 24 Feb 2001 13:28:01 -0500 +From: Pyroguy +Subject: h/heart/magic_man.tab + +From: Chris Grimsley (Pyroguy131@yahoo.com) + +This tab is correct and complete (except for the breakdown solo +and one other part that I couldn't figure out because it was too fast) +you should listen to the CD when you're learning this; +it will make it a lot easier. +If you have any questions or anything feel free to e-mail me. + +The rhythm is pretty easy to figure out so I wont put +it on here, but +the chords used are: G5 F5 C5 A#5 +I think an acoustic guitar plays these chords: G F C A + +^ Bend +(22) Bend to fret +RB Release Bend +H Hammer on +P Pull off +TR Trill +~ Vibrato +/ slide + +Heart - Magic Man + +Intro solo (0:00) +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-19^(22)-19-21^(24)-22-19-17-15-14-15-17-15h17/19-17h19/22-22^(24)~~--- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +Fill (0:53) +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-15^(17)rb-p12--------------------------------------------------------- +D---------------15^(17)------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +Second solo (1:41) +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-3tr5----17^(19)-17^(19)rb-17p15-19^(22)-22p19-22^(24)rb--------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-17^(19)rb-p15-17^(19)-24^--------------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +Third solo (2:39) + +e-18^(20)rb-p15--------------------------------------------------------- +B---------------18^(20)rb-P15------------------------------------------- +G-----------------------------17^(19)rb-P15----------------------------- +D-----------------------------------------------------17---------------- +A--------------------------------------------13~------17---------------- +E------------------------------------------------15~--15---------------- +Repeat 1x + + + +e----------------------------------------------------------------------- +B-19^(21)^^^^----------------------------------------------------------- +G-------------17^(19)/19-17/15------------------------------------------ +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E--------------------------------15/0----------------------------------- + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A-15^(17)-12h13p12-----12h13p12-----12h13p12------12h13p12-------------- +E------------------13-----------13------------13-----------13/15~------- + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A-12-13-12-13p12-------------------------------------------------------- +E----------------13-13/15~---------------------------------------------- + + +Fourth solo (slow solo) (3:09) +e----------------------------------------------------------------------- +B--------------------------------11------------------------------------- +G-9^(10)-9-9^(10)rb-p7----7-9-10----9^(10)rb-p7---7---------------------- +D----------------------8------------------------8----------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- +Repeat 1x + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A-17/15--15/13--13/12--8/10--------------------------------------------- +E----------------------------------------------------------------------- + + +Break down solo (3:29) +This is the part that I couldn't figure out + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + +Repeat 4x + + + +(3:52) + +e----------------------------------------------------------------------- +B-21^(23)/0------------------------------------13----------------------- +G------------------------15-12-15----15-12-15--12--15------------------- +D------------3-4-5-5-----15-12-15----15-12-15------15------------------- +A------------3-4-5-5---------------------------------------------------- +E------------1-2-3-3---------------------------------------------------- + {--------- Palm Mute ---------} + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-15p12----12----------------------------------------------------------- +D-------15------15p12----12--------------------------------------------- +A---------------------15----15p14----14--------------------------------- +E---------------------------------15----14------------------------------ + + + +===== +--pyroguy131 + + + + +Copyright (c) 2001 by OLGA, Inc. diff --git a/guitar/tabs/Heart/crazy_on_you.prj b/guitar/tabs/Heart/crazy_on_you.prj new file mode 100644 index 0000000..9383104 --- /dev/null +++ b/guitar/tabs/Heart/crazy_on_you.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=crazy_on_you.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4) diff --git a/guitar/tabs/Heart/crazy_on_you.tab b/guitar/tabs/Heart/crazy_on_you.tab new file mode 100644 index 0000000..2254b4f --- /dev/null +++ b/guitar/tabs/Heart/crazy_on_you.tab @@ -0,0 +1,225 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / h / heart / crazy_on_you.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Received: from nevada.edu (animal-farm.nevada.edu) by redrock.nevada.edu (5.65c/M1.4) + with SMTP id ; Fri, 11 Dec 1992 08:54:01 -0800 +Received: from gould.encore.COM by animal-farm.nevada.edu. id aa13554; + 11 Dec 92 8:49 PST +Received: from mfgml.encore.COM by gould.encore.com with SMTP + id AA10604 (5.64+/UK-2.1-921111); Fri, 11 Dec 92 11:50:24 -0500 +Received: by mfgml.encore.com id AA26517 (5.52/UK-2.1-910806); + Fri, 11 Dec 92 11:51:14 EST +Message-Id: <26517.9212111651@mfgml.encore.com> +From: Mike Hoffman +Date: Fri, 11 Dec 92 11:51:12 EST +Organization: Encore Computer Corporation +X-Mailer: Mail User's Shell (7.0.3 12/22/89) +To: jamesb@nevada.edu +Subject: TAB: Crazy on You (Intro) - Heart + +James, + +Here is my contribution to the archives. I have transcribed the acoustic +intro to crazy on you as it was taught to me; I understand that it appeared +a few years back in one of the guitar mags, but I have never seen it. + +Thanks for doing a great job in maintaining the archives; I have grabbed many +of the selections stored there, and I hope that my small contribution will +repay in a small way for this fantastic resource. + + MH++ + + _ _ __ ___ ___ __ __ _ _ _ Michael J. Hoffman +| |_| |/ .\| =| =| V | / \ | \| | Encore Computer Corporation +|_| |_|\__/|_| |_| |_|V|_|/_^_\|_|\_| mhoffman@encore.com +"I am logged in, therefore I am." + + +---------8<---CUT HERE--->8---------- + +Here is the acoustic intro section to 'Crazy on You'. It is split into +several sections; this has the combined advantages of 1) helping to +break up the learning of it into smaller pieces, and 2) helping to +remember where you are, as there is some repetition and it is easy to +fall into a 'loop' :-) + +I have added the symbol ^ under the tab to try to approximate the +downbeat; the rhythm is something along the lines of a shuffle. It +certainly helps to listen to the original when you try to learn this! + +I have used the following symbols in the tablature: + +/ Slide up +\ Slide down +p Pull off +h Hammer on +() The note is still ringing from the previous time it was struck +<> The note is a harmonic +^ Rhythm beat + + + CRAZY ON YOU (INTRO) + + Heart + + +Section 1 + +E------------------------ +B--------3-1\0----------- +G----2/4---2\0-0--------- +D------------------------ +A------------------------ +E------------------------ + ^ ^ + +Section 2 + +E------------------------------------------------------------------------ +B------------3p1p0---1-----------------------------------3p1p0---1------- +G------------------2---2-------0------4---5---0h2-(2)(2)-------2---2----- +D--------------------------2/4--------4---5---0h2-(2)(2)----------------- +A--------0-0---------0---0--------0-0---0----------0--0----------0---0--- +E------------------------------------------------------------------------ + ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ + +Section 3 + rake +E------------------------------------------------------------------------ +B------------------------------------------------0----------------------- +G------------0----2-----2--1---2/4---2---0h1--------2p0------------------ +D--------2/4------2----2-------------------------0----------------------- +A--------------0--3---3----2---3/5---4---2(2)---------------------------- +E----------------------------0-----0---0------0--3----------------------- + ^ ^ ^ ^ ^ ^ ^ ^ + +Section 4 (Just like Section 2 except add 'A' on the first two notes) + +E------------------------------------------------------------------------ +B------------3p1p0---1-----------------------------------3p1p0---1------- +G--------2-2-------2---2-------0------4---5---0h2-(2)(2)-------2---2----- +D--------------------------2/4--------4---5---0h2-(2)(2)----------------- +A--------0-0---------0---0--------0-0---0----------0--0----------0---0--- +E------------------------------------------------------------------------ + ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ + +Section 5 + <---See Note 1----> +E------------------------------------5----------------------------------- +B------------------------3-----5p3---3---0----<12>----------------------- +G------------0-----4-----4---4-----4-----0----<12>----------------------- +D--------2/4---------4-------------------0----<12>----------------------- +A--------------0-0-0---0---0---------0----------------------------------- +E------------------------------------------------------------------------ + ^ ^ ^ ^ ^ ^ + +Section 6 (Same as Section 2) + +E------------------------------------------------------------------------ +B------------3p1p0---1-----------------------------------3p1p0---1------- +G------------------2---2-------0------4---5---0h2-(2)(2)-------2---2----- +D--------------------------2/4--------4---5---0h2-(2)(2)----------------- +A--------0-0---------0---0--------0-0---0----------0--0----------0---0--- +E------------------------------------------------------------------------ + ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ + +Section 7 + +E------------------------------------------------------------------------ +B------------------------------------------------------------------------ +G------------0----------------------------------------------------------- +D--------2/4-----0-----4-----2------------------------------------------- +A--------------0-----5-----3--------------------------------------------- +E------------------5-----3----------------------------------------------- + ^ ^ ^ ^ + +Section 8 + <---See Note 2---> +E--------------------------0-------------------------------------0------- +B------3p1p0---1-------------3-1-0---------3p1p0---1-----------0---0----- +G------------2---2-----------------2-0-----------2---2---0h1-1---1---1--- +D--------------------0---0-------------------------------------0---0----- +A--0-0---------0---0-----------------------------------------2-------2--- +E----------------------3---------------2-2---------2---2---0------------- + ^ ^ ^ ^ ^ Free Time--> +Section 9 + +E--------------------------------- +B-----6---5h6p5p0---5------------- +G-----------------5---7-5-4------- +D-----0---------------------6----- +A--------------------------------- +E-----------------------------0--- + + +Note 1: Use the chord shown below. Your pinky belongs on the first string + at the 5th fret, but you should move it over to the second string + 5th fret for the pull-off, then place it on the first string for + the chord that follows. + +E---5-- pinky +B---3-- index +G---4-- ring +D---4-- middle +A---0-- +E------ + + +Mote 2: Use the chord shown below. Again, you'll need your pinky to pull off + from the third fret on the second string, but if your hand is in this + basic position it will make things easier. + +E------ +B---1-- index +G---2-- ring +D------ +A------ +E---2-- middle + +--- + _ _ __ ___ ___ __ __ _ _ _ Michael J. Hoffman +| |_| |/ .\| =| =| V | / \ | \| | +|_| |_|\__/|_| |_| |_|V|_|/_^_\|_|\_| mhoffman@encore.com + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Heart/magic_man.prj b/guitar/tabs/Heart/magic_man.prj new file mode 100644 index 0000000..1e44332 --- /dev/null +++ b/guitar/tabs/Heart/magic_man.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=magic_man.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4) diff --git a/guitar/tabs/Heart/magic_man.tab b/guitar/tabs/Heart/magic_man.tab new file mode 100644 index 0000000..d943509 --- /dev/null +++ b/guitar/tabs/Heart/magic_man.tab @@ -0,0 +1,202 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / h / heart / magic_man.tab / [Click Here For A Printer Friendly Copy] + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Sat, 24 Feb 2001 13:28:01 -0500 +From: Pyroguy +Subject: h/heart/magic_man.tab + +From: Chris Grimsley (Pyroguy131@yahoo.com) + +This tab is correct and complete (except for the breakdown solo +and one other part that I couldn't figure out because it was too fast) +you should listen to the CD when you're learning this; +it will make it a lot easier. +If you have any questions or anything feel free to e-mail me. + +The rhythm is pretty easy to figure out so I wont put +it on here, but +the chords used are: G5 F5 C5 A#5 +I think an acoustic guitar plays these chords: G F C A + +^ Bend +(22) Bend to fret +RB Release Bend +H Hammer on +P Pull off +TR Trill +~ Vibrato +/ slide + +Heart - Magic Man + +Intro solo (0:00) +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-19^(22)-19-21^(24)-22-19-17-15-14-15-17-15h17/19-17h19/22-22^(24)~~--- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +Fill (0:53) +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-15^(17)rb-p12--------------------------------------------------------- +D---------------15^(17)------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +Second solo (1:41) +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-3tr5----17^(19)-17^(19)rb-17p15-19^(22)-22p19-22^(24)rb--------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-17^(19)rb-p15-17^(19)-24^--------------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +Third solo (2:39) + +e-18^(20)rb-p15--------------------------------------------------------- +B---------------18^(20)rb-P15------------------------------------------- +G-----------------------------17^(19)rb-P15----------------------------- +D-----------------------------------------------------17---------------- +A--------------------------------------------13~------17---------------- +E------------------------------------------------15~--15---------------- +Repeat 1x + + + +e----------------------------------------------------------------------- +B-19^(21)^^^^----------------------------------------------------------- +G-------------17^(19)/19-17/15------------------------------------------ +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E--------------------------------15/0----------------------------------- + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A-15^(17)-12h13p12-----12h13p12-----12h13p12------12h13p12-------------- +E------------------13-----------13------------13-----------13/15~------- + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A-12-13-12-13p12-------------------------------------------------------- +E----------------13-13/15~---------------------------------------------- + + +Fourth solo (slow solo) (3:09) +e----------------------------------------------------------------------- +B--------------------------------11------------------------------------- +G-9^(10)-9-9^(10)rb-p7----7-9-10----9^(10)rb-p7---7---------------------- +D----------------------8------------------------8----------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- +Repeat 1x + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A-17/15--15/13--13/12--8/10--------------------------------------------- +E----------------------------------------------------------------------- + + +Break down solo (3:29) +This is the part that I couldn't figure out + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + +Repeat 4x + + + +(3:52) + +e----------------------------------------------------------------------- +B-21^(23)/0------------------------------------13----------------------- +G------------------------15-12-15----15-12-15--12--15------------------- +D------------3-4-5-5-----15-12-15----15-12-15------15------------------- +A------------3-4-5-5---------------------------------------------------- +E------------1-2-3-3---------------------------------------------------- + {--------- Palm Mute ---------} + + +e----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-15p12----12----------------------------------------------------------- +D-------15------15p12----12--------------------------------------------- +A---------------------15----15p14----14--------------------------------- +E---------------------------------15----14------------------------------ + + + +===== +--pyroguy131 + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Jason Becker/JASON BECKER - Perpetual Burn.prj b/guitar/tabs/Jason Becker/JASON BECKER - Perpetual Burn.prj new file mode 100644 index 0000000..e308221 --- /dev/null +++ b/guitar/tabs/Jason Becker/JASON BECKER - Perpetual Burn.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=JASON BECKER - Perpetual Burn.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4) diff --git a/guitar/tabs/Jason Becker/JASON BECKER - Perpetual Burn.tab b/guitar/tabs/Jason Becker/JASON BECKER - Perpetual Burn.tab new file mode 100644 index 0000000..c9aec56 --- /dev/null +++ b/guitar/tabs/Jason Becker/JASON BECKER - Perpetual Burn.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|-17-16-17-20-17-16---------------------------------------------------------------------------- +B|-------------------17-18-17-15---------------------------------------------------------------- +G|-------------------------------17-16-14-16-13-13-14-16-17-16-14-13-------------------------14- +D|-------------------------------------------------------------------15-14---------------------- +A|-------------------------------------------------------------------------15-14-12-11---------- +E|-------------------------------------------------------------------------------------13-12---- + + + +E|----12-17-12----------------12----------------------12----12---------------------------------- +B|-13----------13----------13----13----------------13----15----15-13-12------------------------- +G|----------------14----14----------14----------14----------------------14-13-13-14-16-17-16-14- +D|-------------------14----------------14----14------------------------------------------------- +A|----------------------------------------15---------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------8-13-p8----------8-13-8----------------- +B|-------------------------------------------10---------10----10--------10-------------- +G|-13-------------------------------------10---------------10--------------10----------- +D|----15-14----------------------------10-------------------------------------10-------- +A|----------15-14-12-11----12-----8-12-------------------------------------------12----- +E|----------------------12----5-8---------------------------------------------------5-8- + + + +E|-------------8-17-12----------------------------12-------------------------------- +B|----------10---------13----------------------13----------------------10----------- +G|--------9---------------14----------------14--------------------8-11----11-8----8- +D|---7-10--------------------14----------14------------------7-10--------------10--- +A|-7----------------------------15-12-15-----------------6-9------------------------ +E|---------------------------------------------------5-8---------------------------- + + + +E|------------------------------9-14-17-14---------------------------------------------- +B|---------------------------10------------14----------------------------------------10- +G|-11-11-8---------8------11------------------14-13-9--------------------------11------- +D|---------10-7-10------------------------------------11--------------------11----11---- +A|-------------------------------------------------------12-11------11-9-12------------- +E|-------------------7-11--------------------------------------12-9--------------------- + + + +E|-------9-14-p9----------9-14-p10----------9-14-p9----------9-14-p9----------9-14-p9------- +B|-10-10---------10----10----------12----12---------10----10---------10----10---------10---- +G|------------------11----------------11---------------11---------------11---------------11- +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|----9-14-p10----------9-14-p9----------9-14-16-17-p12----------12-17-p13----------12-17-p12---- +B|-10----------12----12---------10----10----------------13----13-----------15----15-----------13- +G|----------------11---------------11----------------------14-----------------14----------------- +D|----------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|-------12-17-p12----------12-17-p12----------12-17-p13----------12-17-p12----------12-17-19-20-p17- +B|----13-----------13----13-----------13----13-----------15----15-----------13----13----------------- +G|-14-----------------14-----------------14-----------------14-----------------14-------------------- +D|--------------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------- + + + +E|----------17-15-p12----------12-13-p10----------10-15-p12----------12-14-p9----------9-15-p12---- +B|-17----17-----------12----12-----------10----10-----------13----13----------10----10----------13- +G|----17-----------------12-----------------10-----------------12----------------11---------------- +D|------------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------- + + + +E|-------12-14-p9----------9-9-14----9-14- +B|----13----------10----10--------10------ +G|-12----------------11------------------- +D|---------------------------------------- +A|---------------------------------------- +E|---------------------------------------- + diff --git a/guitar/tabs/Jason Becker/Jason Becker - Air.prj b/guitar/tabs/Jason Becker/Jason Becker - Air.prj new file mode 100644 index 0000000..4064f7b --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Air.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Jason Becker - Air.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4)(891,4)(892,4)(893,4)(894,4)(895,4)(896,4)(897,4)(898,4)(899,4)(900,4)(901,4)(902,4)(903,4)(904,4)(905,4)(906,4)(907,4)(908,4)(909,4)(910,4)(911,4)(912,4)(913,4)(914,4)(915,4)(916,4)(917,4)(918,4)(919,4)(920,4)(921,4)(922,4)(923,4)(924,4)(925,4)(926,4)(927,4)(928,4)(929,4)(930,4)(931,4)(932,4)(933,4)(934,4)(935,4)(936,4)(937,4)(938,4)(939,4)(940,4)(941,4)(942,4)(943,4)(944,4)(945,4)(946,4)(947,4)(948,4)(949,4)(950,4)(951,4)(952,4)(953,4)(954,4)(955,4)(956,4)(957,4)(958,4)(959,4)(960,4)(961,4)(962,4)(963,4)(964,4)(965,4)(966,4)(967,4)(968,4)(969,4)(970,4)(971,4)(972,4)(973,4)(974,4)(975,4)(976,4)(977,4)(978,4)(979,4)(980,4)(981,4)(982,4)(983,4)(984,4)(985,4)(986,4)(987,4)(988,4)(989,4)(990,4)(991,4)(992,4)(993,4)(994,4)(995,4)(996,4)(997,4)(998,4)(999,4)(1000,4)(1001,4)(1002,4)(1003,4)(1004,4)(1005,4)(1006,4)(1007,4)(1008,4)(1009,4)(1010,4)(1011,4)(1012,4)(1013,4)(1014,4)(1015,4)(1016,4)(1017,4)(1018,4)(1019,4)(1020,4)(1021,4)(1022,4)(1023,4)(1024,4)(1025,4)(1026,4)(1027,4)(1028,4)(1029,4)(1030,4)(1031,4)(1032,4)(1033,4)(1034,4)(1035,4)(1036,4)(1037,4)(1038,4)(1039,4)(1040,4)(1041,4)(1042,4)(1043,4)(1044,4)(1045,4)(1046,4)(1047,4)(1048,4)(1049,4)(1050,4)(1051,4)(1052,4)(1053,4)(1054,4)(1055,4)(1056,4)(1057,4)(1058,4)(1059,4)(1060,4)(1061,4)(1062,4)(1063,4)(1064,4)(1065,4)(1066,4)(1067,4)(1068,4)(1069,4)(1070,4)(1071,4)(1072,4)(1073,4)(1074,4)(1075,4)(1076,4)(1077,4)(1078,4)(1079,4)(1080,4)(1081,4)(1082,4)(1083,4)(1084,4)(1085,4)(1086,4)(1087,4)(1088,4)(1089,4)(1090,4)(1091,4)(1092,4)(1093,4)(1094,4)(1095,4)(1096,4)(1097,4)(1098,4)(1099,4)(1100,4)(1101,4)(1102,4)(1103,4)(1104,4)(1105,4)(1106,4)(1107,4)(1108,4)(1109,4)(1110,4)(1111,4)(1112,4)(1113,4)(1114,4)(1115,4)(1116,4)(1117,4)(1118,4)(1119,4)(1120,4)(1121,4)(1122,4)(1123,4)(1124,4)(1125,4)(1126,4)(1127,4)(1128,4)(1129,4)(1130,4)(1131,4)(1132,4)(1133,4)(1134,4)(1135,4)(1136,4)(1137,4)(1138,4)(1139,4)(1140,4)(1141,4)(1142,4)(1143,4)(1144,4)(1145,4)(1146,4)(1147,4)(1148,4)(1149,4)(1150,4)(1151,4)(1152,4)(1153,4)(1154,4)(1155,4)(1156,4)(1157,4)(1158,4)(1159,4)(1160,4)(1161,4)(1162,4)(1163,4)(1164,4)(1165,4)(1166,4)(1167,4)(1168,4)(1169,4)(1170,4)(1171,4)(1172,4)(1173,4)(1174,4)(1175,4)(1176,4)(1177,4)(1178,4)(1179,4)(1180,4)(1181,4)(1182,4)(1183,4)(1184,4)(1185,4)(1186,4)(1187,4)(1188,4)(1189,4)(1190,4)(1191,4)(1192,4)(1193,4)(1194,4)(1195,4)(1196,4)(1197,4)(1198,4)(1199,4)(1200,4)(1201,4)(1202,4)(1203,4)(1204,4)(1205,4)(1206,4)(1207,4)(1208,4)(1209,4)(1210,4)(1211,4)(1212,4)(1213,4)(1214,4)(1215,4)(1216,4)(1217,4)(1218,4)(1219,4)(1220,4)(1221,4)(1222,4)(1223,4)(1224,4)(1225,4)(1226,4)(1227,4)(1228,4)(1229,4)(1230,4)(1231,4)(1232,4)(1233,4)(1234,4)(1235,4)(1236,4)(1237,4)(1238,4)(1239,4)(1240,4)(1241,4)(1242,4)(1243,4)(1244,4)(1245,4)(1246,4)(1247,4)(1248,4)(1249,4)(1250,4)(1251,4)(1252,4)(1253,4)(1254,4)(1255,4)(1256,4)(1257,4)(1258,4)(1259,4)(1260,4)(1261,4)(1262,4)(1263,4)(1264,4)(1265,4)(1266,4)(1267,4)(1268,4)(1269,4)(1270,4)(1271,4)(1272,4)(1273,4)(1274,4)(1275,4)(1276,4)(1277,4)(1278,4)(1279,4)(1280,4)(1281,4)(1282,4)(1283,4)(1284,4)(1285,4)(1286,4)(1287,4)(1288,4)(1289,4)(1290,4)(1291,4)(1292,4)(1293,4)(1294,4)(1295,4)(1296,4)(1297,4)(1298,4)(1299,4)(1300,4)(1301,4)(1302,4)(1303,4)(1304,4)(1305,4)(1306,4)(1307,4)(1308,4)(1309,4)(1310,4)(1311,4)(1312,4)(1313,4)(1314,4)(1315,4)(1316,4)(1317,4)(1318,4)(1319,4)(1320,4)(1321,4)(1322,4)(1323,4)(1324,4)(1325,4)(1326,4)(1327,4)(1328,4)(1329,4)(1330,4)(1331,4)(1332,4)(1333,4)(1334,4)(1335,4)(1336,4)(1337,4)(1338,4)(1339,4)(1340,4)(1341,4)(1342,4)(1343,4)(1344,4)(1345,4)(1346,4)(1347,4)(1348,4)(1349,4)(1350,4)(1351,4)(1352,4)(1353,4)(1354,4)(1355,4)(1356,4)(1357,4)(1358,4)(1359,4)(1360,4)(1361,4)(1362,4)(1363,4)(1364,4)(1365,4)(1366,4)(1367,4)(1368,4)(1369,4)(1370,4)(1371,4)(1372,4)(1373,4)(1374,4)(1375,4)(1376,4)(1377,4)(1378,4)(1379,4)(1380,4)(1381,4)(1382,4)(1383,4)(1384,4)(1385,4)(1386,4)(1387,4)(1388,4)(1389,4)(1390,4)(1391,4)(1392,4)(1393,4)(1394,4)(1395,4)(1396,4)(1397,4)(1398,4)(1399,4)(1400,4)(1401,4)(1402,4)(1403,4)(1404,4)(1405,4)(1406,4)(1407,4)(1408,4)(1409,4)(1410,4)(1411,4)(1412,4)(1413,4)(1414,4)(1415,4)(1416,4)(1417,4)(1418,4)(1419,4)(1420,4)(1421,4)(1422,4)(1423,4)(1424,4)(1425,4)(1426,4)(1427,4)(1428,4)(1429,4)(1430,4)(1431,4)(1432,4)(1433,4)(1434,4)(1435,4)(1436,4)(1437,4)(1438,4)(1439,4)(1440,4)(1441,4)(1442,4)(1443,4)(1444,4)(1445,4)(1446,4)(1447,4)(1448,4)(1449,4)(1450,4)(1451,4)(1452,4)(1453,4)(1454,4)(1455,4)(1456,4)(1457,4)(1458,4)(1459,4)(1460,4)(1461,4)(1462,4)(1463,4)(1464,4)(1465,4)(1466,4)(1467,4)(1468,4)(1469,4)(1470,4)(1471,4)(1472,4)(1473,4)(1474,4)(1475,4)(1476,4)(1477,4)(1478,4)(1479,4)(1480,4)(1481,4)(1482,4)(1483,4)(1484,4)(1485,4)(1486,4)(1487,4)(1488,4)(1489,4)(1490,4)(1491,4)(1492,4)(1493,4)(1494,4)(1495,4)(1496,4)(1497,4)(1498,4)(1499,4)(1500,4)(1501,4)(1502,4)(1503,4)(1504,4)(1505,4)(1506,4)(1507,4)(1508,4)(1509,4)(1510,4)(1511,4)(1512,4)(1513,4)(1514,4)(1515,4)(1516,4)(1517,4)(1518,4)(1519,4)(1520,4)(1521,4)(1522,4)(1523,4)(1524,4)(1525,4)(1526,4)(1527,4)(1528,4)(1529,4)(1530,4)(1531,4)(1532,4)(1533,4)(1534,4)(1535,4)(1536,4)(1537,4)(1538,4)(1539,4)(1540,4)(1541,4)(1542,4)(1543,4)(1544,4)(1545,4)(1546,4)(1547,4)(1548,4)(1549,4)(1550,4)(1551,4)(1552,4)(1553,4)(1554,4)(1555,4)(1556,4)(1557,4)(1558,4)(1559,4)(1560,4)(1561,4)(1562,4)(1563,4)(1564,4)(1565,4)(1566,4)(1567,4)(1568,4)(1569,4)(1570,4)(1571,4)(1572,4)(1573,4)(1574,4)(1575,4)(1576,4)(1577,4)(1578,4)(1579,4)(1580,4)(1581,4)(1582,4)(1583,4)(1584,4)(1585,4)(1586,4)(1587,4)(1588,4)(1589,4)(1590,4)(1591,4)(1592,4)(1593,4)(1594,4)(1595,4)(1596,4)(1597,4)(1598,4)(1599,4)(1600,4)(1601,4)(1602,4)(1603,4)(1604,4)(1605,4)(1606,4)(1607,4)(1608,4)(1609,4)(1610,4)(1611,4)(1612,4)(1613,4)(1614,4)(1615,4)(1616,4)(1617,4)(1618,4)(1619,4)(1620,4)(1621,4)(1622,4)(1623,4)(1624,4)(1625,4)(1626,4)(1627,4)(1628,4)(1629,4)(1630,4)(1631,4)(1632,4)(1633,4)(1634,4)(1635,4)(1636,4)(1637,4)(1638,4)(1639,4)(1640,4)(1641,4)(1642,4)(1643,4)(1644,4)(1645,4)(1646,4)(1647,4)(1648,4)(1649,4)(1650,4)(1651,4)(1652,4)(1653,4)(1654,4)(1655,4)(1656,4)(1657,4)(1658,4)(1659,4)(1660,4)(1661,4)(1662,4)(1663,4)(1664,4)(1665,4)(1666,4)(1667,4)(1668,4)(1669,4)(1670,4)(1671,4)(1672,4)(1673,4)(1674,4)(1675,4)(1676,4)(1677,4)(1678,4)(1679,4)(1680,4)(1681,4)(1682,4)(1683,4)(1684,4)(1685,4)(1686,4)(1687,4)(1688,4)(1689,4)(1690,4)(1691,4)(1692,4)(1693,4)(1694,4)(1695,4)(1696,4)(1697,4)(1698,4)(1699,4)(1700,4)(1701,4)(1702,4)(1703,4)(1704,4)(1705,4)(1706,4)(1707,4)(1708,4)(1709,4)(1710,4)(1711,4)(1712,4)(1713,4)(1714,4)(1715,4)(1716,4)(1717,4)(1718,4)(1719,4)(1720,4)(1721,4)(1722,4)(1723,4)(1724,4)(1725,4)(1726,4)(1727,4)(1728,4)(1729,4)(1730,4)(1731,4)(1732,4)(1733,4)(1734,4)(1735,4)(1736,4)(1737,4)(1738,4)(1739,4)(1740,4)(1741,4)(1742,4)(1743,4)(1744,4)(1745,4)(1746,4)(1747,4)(1748,4)(1749,4)(1750,4)(1751,4)(1752,4)(1753,4)(1754,4)(1755,4)(1756,4)(1757,4)(1758,4)(1759,4)(1760,4)(1761,4)(1762,4)(1763,4)(1764,4)(1765,4)(1766,4)(1767,4)(1768,4)(1769,4)(1770,4)(1771,4)(1772,4)(1773,4)(1774,4)(1775,4)(1776,4)(1777,4)(1778,4)(1779,4)(1780,4)(1781,4)(1782,4)(1783,4)(1784,4)(1785,4)(1786,4)(1787,4)(1788,4)(1789,4)(1790,4)(1791,4)(1792,4)(1793,4)(1794,4)(1795,4)(1796,4)(1797,4)(1798,4)(1799,4)(1800,4)(1801,4)(1802,4)(1803,4)(1804,4)(1805,4)(1806,4)(1807,4)(1808,4)(1809,4)(1810,4)(1811,4)(1812,4)(1813,4)(1814,4)(1815,4)(1816,4)(1817,4)(1818,4)(1819,4)(1820,4)(1821,4)(1822,4)(1823,4)(1824,4)(1825,4)(1826,4)(1827,4)(1828,4)(1829,4)(1830,4)(1831,4)(1832,4)(1833,4)(1834,4)(1835,4)(1836,4)(1837,4)(1838,4)(1839,4)(1840,4)(1841,4)(1842,4)(1843,4)(1844,4)(1845,4)(1846,4)(1847,4)(1848,4)(1849,4)(1850,4)(1851,4)(1852,4)(1853,4)(1854,4)(1855,4)(1856,4)(1857,4)(1858,4)(1859,4)(1860,4)(1861,4)(1862,4)(1863,4)(1864,4)(1865,4)(1866,4)(1867,4)(1868,4)(1869,4)(1870,4)(1871,4)(1872,4)(1873,4)(1874,4)(1875,4)(1876,4)(1877,4)(1878,4)(1879,4)(1880,4)(1881,4)(1882,4)(1883,4)(1884,4)(1885,4)(1886,4)(1887,4)(1888,4)(1889,4)(1890,4)(1891,4)(1892,4)(1893,4)(1894,4)(1895,4)(1896,4)(1897,4)(1898,4)(1899,4)(1900,4)(1901,4)(1902,4)(1903,4)(1904,4)(1905,4)(1906,4)(1907,4)(1908,4)(1909,4)(1910,4)(1911,4)(1912,4)(1913,4)(1914,4)(1915,4)(1916,4)(1917,4)(1918,4)(1919,4)(1920,4)(1921,4)(1922,4)(1923,4)(1924,4)(1925,4)(1926,4)(1927,4)(1928,4)(1929,4)(1930,4)(1931,4)(1932,4)(1933,4)(1934,4)(1935,4)(1936,4)(1937,4)(1938,4)(1939,4)(1940,4)(1941,4)(1942,4)(1943,4)(1944,4)(1945,4)(1946,4)(1947,4)(1948,4)(1949,4)(1950,4)(1951,4)(1952,4)(1953,4)(1954,4)(1955,4)(1956,4)(1957,4)(1958,4)(1959,4)(1960,4)(1961,4)(1962,4)(1963,4)(1964,4)(1965,4)(1966,4)(1967,4)(1968,4)(1969,4)(1970,4)(1971,4)(1972,4)(1973,4)(1974,4)(1975,4)(1976,4)(1977,4)(1978,4)(1979,4)(1980,4)(1981,4)(1982,4)(1983,4)(1984,4)(1985,4)(1986,4)(1987,4)(1988,4)(1989,4)(1990,4)(1991,4)(1992,4)(1993,4)(1994,4)(1995,4)(1996,4)(1997,4)(1998,4)(1999,4)(2000,4)(2001,4)(2002,4)(2003,4)(2004,4)(2005,4)(2006,4)(2007,4)(2008,4)(2009,4)(2010,4)(2011,4)(2012,4)(2013,4)(2014,4)(2015,4)(2016,4)(2017,4)(2018,4)(2019,4)(2020,4)(2021,4)(2022,4)(2023,4)(2024,4)(2025,4)(2026,4)(2027,4)(2028,4)(2029,4)(2030,4)(2031,4)(2032,4)(2033,4)(2034,4)(2035,4)(2036,4)(2037,4)(2038,4)(2039,4)(2040,4)(2041,4)(2042,4)(2043,4)(2044,4)(2045,4)(2046,4)(2047,4)(2048,4)(2049,4)(2050,4)(2051,4)(2052,4)(2053,4)(2054,4)(2055,4)(2056,4)(2057,4)(2058,4)(2059,4)(2060,4)(2061,4)(2062,4)(2063,4)(2064,4)(2065,4)(2066,4)(2067,4)(2068,4)(2069,4)(2070,4)(2071,4)(2072,4)(2073,4)(2074,4)(2075,4)(2076,4)(2077,4)(2078,4)(2079,4)(2080,4)(2081,4)(2082,4)(2083,4)(2084,4)(2085,4)(2086,4)(2087,4)(2088,4)(2089,4)(2090,4)(2091,4)(2092,4)(2093,4)(2094,4)(2095,4)(2096,4)(2097,4)(2098,4)(2099,4)(2100,4)(2101,4)(2102,4)(2103,4)(2104,4)(2105,4)(2106,4)(2107,4)(2108,4)(2109,4)(2110,4)(2111,4)(2112,4)(2113,4)(2114,4)(2115,4)(2116,4)(2117,4)(2118,4)(2119,4)(2120,4)(2121,4)(2122,4)(2123,4)(2124,4)(2125,4)(2126,4)(2127,4)(2128,4)(2129,4)(2130,4)(2131,4)(2132,4)(2133,4)(2134,4)(2135,4)(2136,4)(2137,4)(2138,4)(2139,4)(2140,4)(2141,4)(2142,4)(2143,4)(2144,4)(2145,4)(2146,4)(2147,4)(2148,4)(2149,4)(2150,4)(2151,4)(2152,4)(2153,4)(2154,4)(2155,4)(2156,4)(2157,4)(2158,4)(2159,4)(2160,4)(2161,4)(2162,4)(2163,4)(2164,4)(2165,4)(2166,4)(2167,4)(2168,4)(2169,4)(2170,4)(2171,4)(2172,4)(2173,4)(2174,4)(2175,4)(2176,4)(2177,4)(2178,4)(2179,4)(2180,4)(2181,4)(2182,4)(2183,4)(2184,4)(2185,4)(2186,4)(2187,4)(2188,4)(2189,4)(2190,4)(2191,4)(2192,4)(2193,4)(2194,4)(2195,4)(2196,4)(2197,4)(2198,4)(2199,4)(2200,4)(2201,4)(2202,4)(2203,4)(2204,4)(2205,4)(2206,4)(2207,4)(2208,4)(2209,4)(2210,4)(2211,4)(2212,4)(2213,4)(2214,4)(2215,4)(2216,4)(2217,4)(2218,4)(2219,4)(2220,4)(2221,4)(2222,4)(2223,4)(2224,4)(2225,4)(2226,4)(2227,4)(2228,4)(2229,4)(2230,4)(2231,4)(2232,4)(2233,4)(2234,4)(2235,4)(2236,4)(2237,4)(2238,4)(2239,4)(2240,4)(2241,4)(2242,4)(2243,4)(2244,4)(2245,4)(2246,4)(2247,4)(2248,4)(2249,4)(2250,4)(2251,4)(2252,4)(2253,4)(2254,4)(2255,4)(2256,4)(2257,4)(2258,4)(2259,4)(2260,4)(2261,4)(2262,4)(2263,4)(2264,4)(2265,4)(2266,4)(2267,4)(2268,4)(2269,4)(2270,4)(2271,4)(2272,4)(2273,4)(2274,4)(2275,4)(2276,4)(2277,4)(2278,4)(2279,4)(2280,4)(2281,4)(2282,4)(2283,4)(2284,4)(2285,4)(2286,4)(2287,4)(2288,4)(2289,4)(2290,4)(2291,4)(2292,4)(2293,4)(2294,4)(2295,4)(2296,4)(2297,4)(2298,4)(2299,4)(2300,4)(2301,4)(2302,4)(2303,4)(2304,4)(2305,4)(2306,4)(2307,4)(2308,4)(2309,4)(2310,4)(2311,4)(2312,4)(2313,4)(2314,4)(2315,4)(2316,4)(2317,4)(2318,4)(2319,4)(2320,4)(2321,4)(2322,4)(2323,4)(2324,4)(2325,4)(2326,4)(2327,4)(2328,4)(2329,4)(2330,4)(2331,4)(2332,4)(2333,4)(2334,4)(2335,4)(2336,4)(2337,4)(2338,4)(2339,4)(2340,4)(2341,4)(2342,4)(2343,4)(2344,4)(2345,4)(2346,4)(2347,4)(2348,4)(2349,4)(2350,4)(2351,4)(2352,4)(2353,4)(2354,4)(2355,4)(2356,4)(2357,4)(2358,4)(2359,4)(2360,4)(2361,4)(2362,4)(2363,4)(2364,4)(2365,4)(2366,4)(2367,4)(2368,4)(2369,4)(2370,4)(2371,4)(2372,4)(2373,4)(2374,4)(2375,4)(2376,4)(2377,4)(2378,4)(2379,4)(2380,4)(2381,4)(2382,4)(2383,4)(2384,4)(2385,4)(2386,4)(2387,4)(2388,4)(2389,4)(2390,4)(2391,4)(2392,4)(2393,4)(2394,4)(2395,4)(2396,4)(2397,4)(2398,4)(2399,4)(2400,4)(2401,4)(2402,4)(2403,4)(2404,4)(2405,4)(2406,4)(2407,4)(2408,4)(2409,4)(2410,4)(2411,4)(2412,4)(2413,4)(2414,4)(2415,4)(2416,4)(2417,4)(2418,4)(2419,4)(2420,4)(2421,4)(2422,4)(2423,4)(2424,4)(2425,4)(2426,4)(2427,4)(2428,4)(2429,4)(2430,4)(2431,4)(2432,4)(2433,4)(2434,4)(2435,4)(2436,4)(2437,4)(2438,4)(2439,4)(2440,4)(2441,4)(2442,4)(2443,4)(2444,4)(2445,4)(2446,4)(2447,4)(2448,4)(2449,4)(2450,4)(2451,4)(2452,4)(2453,4)(2454,4)(2455,4)(2456,4)(2457,4)(2458,4)(2459,4)(2460,4)(2461,4)(2462,4)(2463,4)(2464,4)(2465,4)(2466,4)(2467,4)(2468,4)(2469,4)(2470,4)(2471,4)(2472,4)(2473,4)(2474,4)(2475,4)(2476,4)(2477,4)(2478,4)(2479,4)(2480,4)(2481,4)(2482,4)(2483,4)(2484,4)(2485,4)(2486,4)(2487,4)(2488,4)(2489,4)(2490,4)(2491,4)(2492,4)(2493,4)(2494,4)(2495,4)(2496,4)(2497,4)(2498,4)(2499,4)(2500,4)(2501,4)(2502,4)(2503,4)(2504,4)(2505,4)(2506,4)(2507,4)(2508,4)(2509,4)(2510,4)(2511,4)(2512,4)(2513,4)(2514,4)(2515,4)(2516,4)(2517,4)(2518,4)(2519,4)(2520,4)(2521,4)(2522,4)(2523,4)(2524,4)(2525,4)(2526,4)(2527,4)(2528,4)(2529,4)(2530,4)(2531,4)(2532,4)(2533,4)(2534,4)(2535,4)(2536,4)(2537,4)(2538,4)(2539,4)(2540,4)(2541,4)(2542,4)(2543,4)(2544,4)(2545,4)(2546,4)(2547,4)(2548,4)(2549,4)(2550,4)(2551,4)(2552,4)(2553,4)(2554,4)(2555,4)(2556,4)(2557,4)(2558,4)(2559,4)(2560,4)(2561,4)(2562,4)(2563,4)(2564,4)(2565,4)(2566,4)(2567,4)(2568,4)(2569,4)(2570,4)(2571,4)(2572,4)(2573,4)(2574,4)(2575,4)(2576,4)(2577,4)(2578,4)(2579,4)(2580,4)(2581,4)(2582,4)(2583,4)(2584,4)(2585,4)(2586,4)(2587,4)(2588,4)(2589,4)(2590,4)(2591,4)(2592,4)(2593,4)(2594,4)(2595,4)(2596,4)(2597,4)(2598,4)(2599,4)(2600,4)(2601,4)(2602,4)(2603,4)(2604,4)(2605,4)(2606,4)(2607,4)(2608,4)(2609,4)(2610,4)(2611,4)(2612,4)(2613,4)(2614,4)(2615,4)(2616,4)(2617,4)(2618,4)(2619,4)(2620,4)(2621,4)(2622,4)(2623,4)(2624,4)(2625,4)(2626,4)(2627,4)(2628,4)(2629,4)(2630,4)(2631,4)(2632,4)(2633,4)(2634,4)(2635,4)(2636,4)(2637,4)(2638,4)(2639,4)(2640,4)(2641,4)(2642,4)(2643,4)(2644,4)(2645,4)(2646,4)(2647,4)(2648,4)(2649,4)(2650,4)(2651,4)(2652,4)(2653,4)(2654,4)(2655,4)(2656,4)(2657,4)(2658,4)(2659,4)(2660,4)(2661,4)(2662,4)(2663,4)(2664,4)(2665,4)(2666,4)(2667,4)(2668,4)(2669,4)(2670,4)(2671,4)(2672,4)(2673,4)(2674,4)(2675,4)(2676,4)(2677,4)(2678,4)(2679,4)(2680,4)(2681,4)(2682,4)(2683,4)(2684,4)(2685,4)(2686,4)(2687,4)(2688,4)(2689,4)(2690,4)(2691,4)(2692,4)(2693,4)(2694,4)(2695,4)(2696,4)(2697,4)(2698,4)(2699,4)(2700,4)(2701,4)(2702,4)(2703,4)(2704,4)(2705,4)(2706,4)(2707,4)(2708,4)(2709,4)(2710,4)(2711,4)(2712,4)(2713,4)(2714,4)(2715,4)(2716,4)(2717,4)(2718,4)(2719,4)(2720,4)(2721,4)(2722,4)(2723,4)(2724,4)(2725,4)(2726,4)(2727,4)(2728,4)(2729,4)(2730,4)(2731,4)(2732,4)(2733,4)(2734,4)(2735,4)(2736,4)(2737,4)(2738,4)(2739,4)(2740,4)(2741,4)(2742,4)(2743,4)(2744,4)(2745,4)(2746,4)(2747,4)(2748,4)(2749,4)(2750,4)(2751,4)(2752,4)(2753,4)(2754,4)(2755,4)(2756,4)(2757,4)(2758,4)(2759,4)(2760,4)(2761,4)(2762,4)(2763,4)(2764,4)(2765,4)(2766,4)(2767,4)(2768,4)(2769,4)(2770,4)(2771,4)(2772,4)(2773,4)(2774,4)(2775,4)(2776,4)(2777,4)(2778,4)(2779,4)(2780,4)(2781,4)(2782,4)(2783,4)(2784,4)(2785,4)(2786,4)(2787,4)(2788,4)(2789,4)(2790,4)(2791,4)(2792,4)(2793,4)(2794,4)(2795,4)(2796,4)(2797,4)(2798,4)(2799,4)(2800,4)(2801,4)(2802,4)(2803,4)(2804,4)(2805,4)(2806,4)(2807,4)(2808,4)(2809,4)(2810,4)(2811,4)(2812,4)(2813,4)(2814,4)(2815,4)(2816,4)(2817,4)(2818,4)(2819,4)(2820,4)(2821,4)(2822,4)(2823,4)(2824,4)(2825,4)(2826,4)(2827,4)(2828,4)(2829,4)(2830,4)(2831,4)(2832,4)(2833,4)(2834,4)(2835,4)(2836,4)(2837,4)(2838,4)(2839,4)(2840,4)(2841,4)(2842,4)(2843,4)(2844,4)(2845,4)(2846,4)(2847,4)(2848,4)(2849,4)(2850,4)(2851,4)(2852,4)(2853,4)(2854,4)(2855,4)(2856,4)(2857,4)(2858,4)(2859,4)(2860,4)(2861,4)(2862,4)(2863,4)(2864,4)(2865,4)(2866,4)(2867,4)(2868,4)(2869,4)(2870,4)(2871,4)(2872,4)(2873,4)(2874,4)(2875,4)(2876,4)(2877,4)(2878,4)(2879,4)(2880,4)(2881,4)(2882,4)(2883,4)(2884,4)(2885,4)(2886,4)(2887,4)(2888,4)(2889,4)(2890,4)(2891,4)(2892,4)(2893,4)(2894,4)(2895,4)(2896,4)(2897,4)(2898,4)(2899,4)(2900,4)(2901,4)(2902,4)(2903,4)(2904,4)(2905,4)(2906,4)(2907,4)(2908,4)(2909,4)(2910,4)(2911,4)(2912,4)(2913,4)(2914,4)(2915,4)(2916,4)(2917,4)(2918,4)(2919,4)(2920,4)(2921,4)(2922,4)(2923,4)(2924,4)(2925,4)(2926,4)(2927,4)(2928,4)(2929,4)(2930,4)(2931,4)(2932,4)(2933,4)(2934,4)(2935,4)(2936,4)(2937,4)(2938,4)(2939,4)(2940,4)(2941,4)(2942,4)(2943,4)(2944,4)(2945,4)(2946,4)(2947,4)(2948,4)(2949,4)(2950,4)(2951,4)(2952,4)(2953,4)(2954,4)(2955,4)(2956,4)(2957,4)(2958,4)(2959,4)(2960,4)(2961,4)(2962,4)(2963,4)(2964,4)(2965,4)(2966,4)(2967,4)(2968,4)(2969,4)(2970,4)(2971,4)(2972,4)(2973,4)(2974,4)(2975,4)(2976,4)(2977,4)(2978,4)(2979,4)(2980,4)(2981,4)(2982,4)(2983,4)(2984,4)(2985,4)(2986,4)(2987,4)(2988,4)(2989,4)(2990,4)(2991,4)(2992,4)(2993,4)(2994,4)(2995,4)(2996,4)(2997,4)(2998,4)(2999,4)(3000,4)(3001,4)(3002,4)(3003,4)(3004,4)(3005,4)(3006,4)(3007,4)(3008,4)(3009,4)(3010,4)(3011,4)(3012,4)(3013,4)(3014,4)(3015,4)(3016,4)(3017,4)(3018,4)(3019,4)(3020,4)(3021,4)(3022,4)(3023,4)(3024,4)(3025,4)(3026,4)(3027,4)(3028,4)(3029,4)(3030,4)(3031,4)(3032,4)(3033,4)(3034,4) diff --git a/guitar/tabs/Jason Becker/Jason Becker - Air.tab b/guitar/tabs/Jason Becker/Jason Becker - Air.tab new file mode 100644 index 0000000..e45da40 --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Air.tab @@ -0,0 +1,883 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-2-------------2-----2-0-----0--------------------------------- +D|-4---4-5-----5---4-------------4-----4-8-8-4---5-----5-4-----4- +A|---2-----2-4-------5-----5-7-----7-9---------9---9-7-----7-5--- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----------------------------------------0---------------0----- +D|-2-----2-0-----0---0-----4-----------4-------------2---0---0--- +A|---5-4-----4-2---2---7-----5---4-7-----5---7-3-2-----5-------9- +E|-----------------------9-----7-----9-------------6------------- + + + +E|---------5-5--------------------------------------------------------- +B|---------7-7----------------------------------------------------5-h7- +G|---------7-7-----------4-7-6---------4-6-h7-s9-7----------6-7-7------ +D|---------0-0-----4-5-7---------4-5-7------------------7-9------------ +A|-------------5-7-------------7-------------------9-10---------------- +E|-12-10-9------------------------------------------------------------- + + + +E|--------------------------------------------------------------------- +B|-p5-----------5-5---------------------------------------------------- +G|--------4-6-7-----7-----------4-7-7-p6---------4-6-h7-s9-9-p7-------- +D|----5-7-----------------4-5-7------------4-5-7---------------------7- +A|--------------------5-7----------------7----------------------9-10--- +E|--------------------------------------------------------------------- + + + +E|--------------------------------------9-12-17-16-p14--------1-p0---0--- +B|-------7-5-----------5-7-----------10------------------3-h5------3----- +G|---6-7---------4-6-7-----------7-9-------------------2----------------- +D|-9---------5-7---------------7-----------------------0----------------- +A|-------------------------5-9--------------------------------1------0-1- +E|----------------------------------------------------------------------- + + + +E|-----------------6-5-3-3-------5-10-8-5---------6-5------------- +B|-----2-3-5-------------------6----------7-8---------8-5-6-8---5- +G|---2-------7-6-7--------------------------------------------7--- +D|----------------------------------------------8-5--------------- +A|-3-0-----4-------------------5----------5-6-8---------5--------- +E|---------------6-------3-5-6--------5-----------------------6--- + + + +E|-------5-6-5-------------5-12------13-10----6-----5-----3----------- +B|-6-----------6-5-3-----6-----------------10---8-5---6-3---5-2-3----- +G|---6-7-------------3------------------------------------------------ +D|---------3-----------7-----7--8-11-0--------5-----3-----2-----3-2-3- +A|---------------3-----5---------------------------------------------- +E|---5---------------------------------------------------------------- + + + +E|-0-----1-3-5-3-5-6-5-----6-5---------1-3-5-4-5-7-5-----------6- +B|-----------------------------6-5------------------------------- +G|-0---------------------2-3-2-------------------------2--------- +D|---3-2-0-----2-----3-5-------3-2-0---0-----2-----3-5---5-3-2-3- +A|-----------------------------------4--------------------------- +E|--------------------------------------------------------------- + + + +E|-5---------------------------------------------2-----2-----3-2- +B|---6-5-3---6-3---3-----2-----------2-0-2---------3------------- +G|---------3-----2---3-0---2---7-----------2---------3----------- +D|-----------0---------------2---6-9-----------2-------------2--- +A|-----3-----------1-----0-----------0-----4-5---1-----1-2-4----- +E|-----------------------------4--------------------------------- + + + +E|----------------------9-6---10-----12-9---------------------------- +B|-5-3----------------------7------7--------------------------------- +G|---------6-9-6-7------------------------11-9-6---------------7----- +D|-----------------------------------------------8---------------9--- +A|---2-4-5------------9-9-----9--7-9-9-------------9-7-5-----------9- +E|---------6-----7-10------------------------6---9-6-----9-7-6-7----- + + + +E|--------------------------------------------------------------------- +B|-----------------------------------------------------2-14------------ +G|-4-----4-----3-----------4-----------------4-16----------------4----- +D|---5-----3-----2-------4---4----------4-16------4-16------4-16-4----- +A|-----7-----2-----4---5-------5---5-17----------------------------7-9- +E|-3-----1-----2-----7-----------7------------------------------------- + + + +E|-------------------------------------------------------------------------------- +B|--------------------------------9-12-p9-------------------------9-12-p9----12--- +G|-------------------------8-9-11---------10-------------------10---------10----4- +D|----7-9-11-9-7----7-9-11-------------------12-9---------9-12------------------4- +A|-11------------11-------------------------------11-8-11------------------------- +E|-------------------------------------------------------------------------------- + + + +E|--------------------------------7-10-p7---------------------7-10-p7--- +B|-------------------------7-9-10---------9-----------------9---------9- +G|-------6-8-9-8-6---6-8-9------------------10-7-------7-10------------- +D|-6-7-9-----------9-----------------------------9-6-9------------------ +A|---------------------------------------------------------------------- +E|---------------------------------------------------------------------- + + + +E|-10----------------------------------------------------------------11-p6----- +B|----11-p9-----------------------------------------------------8-11-------8--- +G|----------11-9-8----------------------------------------8---8--------------8- +D|-----------------11-9-8-9-8-h9-p8---------------------8---8------------------ +A|----------------------------------11-9-7-----------10------------------------ +E|-----------------------------------------11-9-7-11--------------------------- + + + +E|---6-11-6-9-p7-6-------------------------------------------------11-15- +B|-8---------------9-7------------------------------------8---8-11------- +G|---------------------9-8-6-8-6-h8-p6------------------8---8------------ +D|-------------------------------------9-8-6----------8------------------ +A|-------------------------------------------9-7-6-10-------------------- +E|----------------------------------------------------------------------- + + + +E|-p11----------11-15-11-12-p7---------------------7-12-p7---12-11-p7---------------- +B|-----11----11----------------9-----------------9---------9----------9-------------- +G|--------12---------------------9-------------9------------------------8------------ +D|---------------------------------9---------9----------------------------9---------- +A|-----------------------------------11-7-11--------------------------------11----11- +E|-----------------------------------------------------------------------------11---- + + + +E|-------7-11-p7---11-16-p12-------------------------12-16-p12----16-16-p11------------------- +B|-----9---------9-----------12-------------------12-----------12-----------12---------------- +G|---8--------------------------13-------------13------------------------------13------------- +D|-9-------------------------------14-------14------------------------------------13---------- +A|------------------------------------14-11------------------------------------------14-11-14- +E|-------------------------------------------------------------------------------------------- + + + +E|----------11-16-p11----10-p7----------------------7-10-p7---10-9-p6-------------- +B|-------12-----------12-------9------------------9---------9---------8------------ +G|----13-------------------------10-7--------7-10-----------------------9-6-------- +D|-13---------------------------------9----9--------------------------------8----8- +A|--------------------------------------11------------------------------------10--- +E|--------------------------------------------------------------------------------- + + + +E|-------6-9-p6---9-13-p10----------------------------10-13-p10----13-12-p9--------------- +B|-----8--------8----------12----------------------12-----------12----------11------------ +G|-6-9------------------------13-10----------10-13-----------------------------12-9------- +D|----------------------------------12----12----------------------------------------11---- +A|-------------------------------------14----------------------------------------------13- +E|---------------------------------------------------------------------------------------- + + + +E|------------9-12-p9----12-7-p4---7-s11-p7---------------7-9-11-7-11-p8------------ +B|---------11---------11---------4----------9--------9-11----------------10--------- +G|----9-12------------------------------------8-9-11------------------------11-8---- +D|-11----------------------------------------------------------------------------10- +A|---------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|---------------8-11-p8----11-11-p7---7-s16-p11-------------------11-12-14-11-14-p11---------- +B|------------10---------10----------9-----------12-------11-12-14--------------------13------- +G|-------8-11---------------------------------------11-13--------------------------------14-11- +D|----10--------------------------------------------------------------------------------------- +A|-12------------------------------------------------------------------------------------------ +E|--------------------------------------------------------------------------------------------- + + + +E|-------------------11-14-p11----11-12-p9---9-p4---7-5-4---------------------5- +B|----------------13-----------13----------9------5-------7-5-4-------------5--- +G|----------11-14-----------------------------------------------6-4-------6----- +D|-13----13---------------------------------------------------------7-6-7------- +A|----15------------------------------------------------------------------------ +E|------------------------------------------------------------------------------ + + + +E|-7-p5---9-p5---9-7-5-------------16-p12----12-p9---11-9--------------------- +B|------5------5-------9-7----------------14-------9------12-10-9------------- +G|-------------------------9-6------------------------------------11-9-8------ +D|-----------------------------9-7---------------------------------------11-9- +A|---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|---------9-10-p9----12-p9----12-10-9----------------------------------------------- +B|------10---------10-------10---------12-10-9---------------9-10-p9---12-p9---12-10- +G|----9----------------------------------------9-----------9---------9-------9------- +D|-11--------------------------------------------12-11-6-9--------------------------- +A|----------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------7-9- +B|-9--------------------------10-13-p10----16-p13----16-p13--------------------------9----- +G|---11-9------------------11-----------11--------14--------14---------------------9------- +D|--------13-11-9----10-13-------------------------------------16-13-------------9--------- +A|----------------12-------------------------------------------------15-12----------------- +E|-------------------------------------------------------------------------14-11----------- + + + +E|-p7---12-p7---11-9-7----------------------8-11-p8----14-p10----14-p11---------------- +B|----9-------9--------10-9-7------------10---------10--------13--------13------------- +G|----------------------------9-8-6-8-11-----------------------------------14-11------- +D|-------------------------------------------------------------------------------13-10- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------------- +B|------------------------------12-------------------------------------------13-16-p13----16-p13- +G|---------------------11-13-14----14-13-11-14-13-11----11-13-11-------11-14-----------14-------- +D|------------11-13-14-------------------------------14----------14-13--------------------------- +A|-12-9----11------------------------------------------------------------------------------------ +E|------12--------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------9-11-9-------9------- +B|--------------------------------------------------------------9-10-12--------12-10---12-10- +G|-14------------------------------------------------------9-11------------------------------ +D|----16-13----------13-16-p13----16-p13----------------11----------------------------------- +A|----------15-12-15-----------15--------15-12-------11-------------------------------------- +E|---------------------------------------------14-11----------------------------------------- + + + +E|-----------------------11-14-p11----14-p11---------------------------------------------------- +B|-9-10-12-10-9----10-13-----------13--------13------------------------------------------------- +G|--------------11------------------------------14-11----------11-14-11----14-p11--------------- +D|----------------------------------------------------13-10-13----------13--------13-10--------- +A|--------------------------------------------------------------------------------------12-9-11- +E|---------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------9-12-p9----12-p9--------- +B|----------12----------11----------------------------------11----11---------11-------11------ +G|-------13----13-11-13----11-13----11----------------11-13----12------------------------12-9- +D|----13-------------------------14----13-14-11-13-14----------------------------------------- +A|-14----------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-----------------------------------------------11---------------------------------------- +B|--------------------------------------------12----12-11-12-14-11-12----11---------------- +G|---------9-12-p9----12-p9----------------13-------------------------13----11-13----11-13- +D|-11-8-11---------11-------11-8------9-13----------------------------------------14------- +A|-------------------------------10-7------------------------------------------------------ +E|----------------------------------------------------------------------------------------- + + + +E|----------------12-15-p12----15-p12----------------------------------------------------------- +B|-11-12-14-11-14-----------14--------14-11----------------------------------------------------- +G|------------------------------------------12----------12-15-p12----15-p12--------------------- +D|---------------------------------------------14-11-14-----------14--------14-11--------------- +A|--------------------------------------------------------------------------------13-10-6-6-7-9- +E|---------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------- +B|-------------------------------------------------------------------- +G|--------------------------------------------------------------9----- +D|--------------9----------------------7--------8--------------------- +A|-6-7-p9---6-----4-4-5-7-4-5-p4---4-----9-9-11---9-11-p9-7-9-6---7-7- +E|--------9---7------------------7---5-------------------------------- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|------------------7--------------------------------------------- +D|---6----------------------2-----------2------------------------- +A|-9---7-9-p7-5-7-4---2-3-5---5-3-2-3-5---5-3-2-----------2------- +E|----------------------------------------------5-3-2-3-5---5-3-2- + + + +E|-------------------------7---10-p7----------13-p10----------------------- +B|---------------------6-9---9-------9---------------12-p9----------------- +G|-----------------4-7-----------------10-7----------------10-------------- +D|-------------3-6--------------------------9-----------------12-------5--- +A|---------2-5---------------------------------------------------5-7-9---9- +E|-3-5-1-4----------------------------------------------------------------- + + + +E|-------------------------------------------------------------10---- +B|--------------------------------------------------------9-12----12- +G|---------------------------------------------------7-10------------ +D|---------5-------------------------------------6-9----------------- +A|-7-5-7-9---9-7-5-----------5---------------5-8--------------------- +E|-----------------8-7-5-7-5---8-7-5-7-8-4-7------------------------- + + + +E|-13-p10-------------16-p13-------------14-p9---------------------------9-12-p7------------ +B|--------12-----------------15----------------10---------------------10---------9---------- +G|-----------13-10--------------16-13-------------11---------------11--------------9-------- +D|-----------------12-----------------15-------------11---------11-------------------9------ +A|------------------------------------------------------12-9-12------------------------11-7- +E|------------------------------------------------------------------------------------------ + + + +E|----------7-17-p14----------------------------14-16-p12----------------------------12---10- +B|--------9----------14----------------------14-----------12----------------------12--------- +G|------9---------------14----------------14-----------------13----------------13-------2---- +D|----9--------------------16----------16-----------------------14----------14----------4---- +A|-11-------------------------16----16-----------------------------14-11-14------------------ +E|-------------------------------17---------------------------------------------------------- + + + +E|------------------------------------------------------------10-9-7- +B|-------7-8-10-7-8-p7---7----------------------------------7-------- +G|-6-7-9---------------9---7-9-6-7-p6---6---9---9-7-6-7---7---------- +D|------------------------------------9---8-------------9------------ +A|--------------------------------------------9---------------------- +E|------------------------------------------------------------------- + + + +E|----------14--------------------------------------------------------------- +B|-10-8-7-------------------------------------------------------------------- +G|--------2------------------------------------------------------------------ +D|--------4----------------------------9-----------------------9------------- +A|-------------7-9-7----7------------9---9-------------------9---9---------9- +E|-------------------10---10-9-7-h10-------10-6-10-9-10-7-10-------10-7-10--- + + + +E|-------------------------------6-9-10-p7-----------------6-9-10-p7--- +B|-----------------------------8-----------7-------------8-----------7- +G|-----------9-7-6-7---6---6-9---------------7-6-7---6-9--------------- +D|-------------------9---8-------------------------8------------------- +A|-10-9-7-------------------------------------------------------------- +E|--------10----------------------------------------------------------- + + + +E|-----7-12-p7---14-p7---12-p7---10-p7---9-p7--------7----------------------- +B|---7---------7-------7-------7-------7------7-8-10------------------------- +G|-7------------------------------------------------------------------------- +D|--------------------------------------------------------------------------- +A|-----------------------------------------------------------7-10-7--------9- +E|-----------------------------------------------------9-6-9--------9-7-10--- + + + +E|---------------------------------------------------------------------------- +B|---------------------------------------------------------------------------- +G|---------------------------------------------------------------------------- +D|-9--------------------------9---------------7---------------------------7-9- +A|---9--------7-10-7--------9---9----10---------9-9-10-------9-------7-------- +E|-----10-6-9--------9-7-10-------10----10-10----------10-10---10-10---10----- + + + +E|-----12-p7-------7-10-p7-------7-9-p6-------6-10-p7-------7-10-p7------- +B|-----------8---8---------7---7--------8---8---------7---7---------8---8- +G|-6-7---------9-------------7------------9-------------7-------------7--- +D|------------------------------------------------------------------------ +A|------------------------------------------------------------------------ +E|------------------------------------------------------------------------ + + + +E|-7-10-p7-------7-------------------------------------------------------- +B|---------7---7---------------------------------------------------------- +G|-----------7------------9----------------------------------------------- +D|----------------------9---9-----------9---------------------9---------9- +A|-----------------7-10-------10------9-------7-10-7--------9--------10--- +E|-------------------------------7-10-----6-9--------9-7-10-----7-10------ + + + +E|----------------10-p7--------7-12-p9---------9-14-p9----------9-7-p9-h7--------- +B|----------------------9----9---------10---10---------11----11-----------7------- +G|------------------------10--------------9---------------11----------------6----- +D|--------------9-------------------------------------------------------------8-6- +A|-10---------9------------------------------------------------------------------- +E|----10-7-10--------------------------------------------------------------------- + + + +E|---------6-9-14-p9------------------------------------------------------------- +B|-------7-----------11---------------------------------------------------------- +G|-----6----------------11----------------------------------------------------11- +D|---8---------------------11----------------------7-11-p7-------8-h11-p8-h11---- +A|-9--------------------------13-----8-11-8------7---------7-9-9----------------- +E|-------------------------------7-9--------10-9--------------------------------- + + + +E|------------------------------------9-10-14-13-p9--------9-13-p9------------------- +B|---------------------------------12---------------9----9---------9----------------- +G|-p6-------------11------------11--------------------10-------------10-------------- +D|----8-----8-p11----11-p8-9-12-----------------------------------------11------8-11- +A|------9-9----------------------------------------------------------------11-9------ +E|----------------------------------------------------------------------------------- + + + +E|-------9-s14-----------------------------------13-p9--------9-13-p9--------- +B|----11-----------------------------------------------9----9---------9------- +G|-11----------------------------------------------------10-------------10---- +D|-----------------------------------------4-------------------------------11- +A|----------------------7-9-10---8-9-----4---4-------------------------------- +E|-------------7-7-9-10--------9-----2-6-------6------------------------------ + + + +E|-----------------9-s14-12-p9---------9-12-p9--------------------------------- +B|--------------11-------------10---10---------10------------------------------ +G|-----------11-------------------9---------------9---------------------------- +D|------8-11----------------------------------------11-7-------------4--------- +A|-11-9----------------------------------------------------8-9-----4---4-----4- +E|-------------------------------------------------------9-----2-6-------6-5--- + + + +E|------------7-12---------------------6-9-9-6-----------------6-9- +B|----------9------------------------7---------7-------------7----- +G|--------9----------------3-6-----6-------------6---------6------- +D|------9----------------4-----4-8-----------------8-6---8--------- +A|-7-11----------------4-------------------------------9----------- +E|-----------------2-6--------------------------------------------- + + + +E|-----------------------------------------14-9--------------------------- +B|----------------------------------------------11---------------------11- +G|-------------------------------------------------11---------------11---- +D|-------------0-------4-2----------------------------11---------11------- +A|-7---2-1-------4-2-1-----5-4-2-1-------1---------------13-9-13---------- +E|---4-----3-2---------------------3-2-3---------------------------------- + + + +E|-9-14-p9----------9-14-p9----14-p9----------10-14-p10----15-p12----18-p14---------------- +B|---------11----11---------11-------11-12-14-----------12--------14--------14------------- +G|------------11--------------------------------------------------------------------------- +D|-----------------------------------------------------------------------------0----------- +A|-------------------------------------------------------------------------------4-2-1-2-4- +E|----------------------------------------------------------------------------------------- + + + +E|-----------------------------------19-p14-------------------------------14-p10- +B|------------------------------------------15-------------------------15-------- +G|---------------------------------------------16-------------------16----------- +D|-4-2-------2-5-4-2------------------------------16-------------16-------------- +A|-----5-4-5---------5-4-2---5-2-4-------------------17-14-16-17----------------- +E|-------------------------2-------2--------------------------------------------- + + + +E|----15-14-12-------------------------------------------------------------------- +B|-12----------15-14-12-11-12-14-------------------------------------------------- +G|-------------------------------11-13-14----------------------------------------- +D|----------------------------------------11-12-14-8-9-11---------------4-5-4-2--- +A|--------------------------------------------------------9-2-2-4-5-2-5---------5- +E|-------------------------------------------------------------------------------- + + + +E|---------------17-15-14---------------------------------------------------------- +B|------------------------17-15-14------------------------------------------------- +G|---------------------------------16-14-12-11------------------------------------- +D|-------------4-------------------------------14-12-11---------------------------- +A|-4-2-1---1-4------------------------------------------14-12-10-9----------------- +E|-------2---------------------------------------------------------12-10-9-7-6-7-9- + + + +E|---------------------------------------------------------2-3-2- +B|---------------------------------------------------2-3-5------- +G|-------------------------------------------------4------------- +D|-------------------4---5-------2-4-5-4-2---2-4-5--------------- +A|-------5-4-2-4-7-5---7---2-4-5-----------5--------------------- +E|-2-3-5--------------------------------------------------------- + + + +E|-----2-3-7-5-7-9-14-12-10---------------------------------------------- +B|-5-3----------------------12----10------------------------------------- +G|-----------------------------12----11-12-9----------------------------- +D|-------------------------------------------------------5-4-2----------- +A|-----------------------------------------------4-------------5-4-2-1-2- +E|-------------------------------------------6-7---2-3-5----------------- + + + +E|-----------------------------------------------2---------------------- +B|---------------------2-3-5-3-2-----------2-3-5------------------10---- +G|-----------------2-4-----------4-2---2-4---------12-p11-9-11-12----12- +D|-----------2-4-5-------------------5---------------------------------- +A|-4---1-4-5------------------------------------------------------------ +E|---2------------------------------------------------------------------ + + + +E|----------------------------------------------------------------3-2-h3-p2---2-3-5-7-9- +B|-12-11--------------------------------------------------------------------5----------- +G|-------11----------------------11-12-11----------------11----------------------------- +D|----------11----12-12-11-12-14----------14-12-14-11-14-------------------------------- +A|-------------13-------------------------------------------11-14----------------------- +E|-------------------------------------------------------------------------------------- + + + +E|-10-9-7---------------------------------------10-9-10-7-10-9---------------------- +B|--------10-8-10---10-7-10---10-8-10---10-7-10-------------------------12---------- +G|----------------9---------7---------9------------------------11-12-14----14-12-11- +D|---------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------10-h12-h14-10----10-9-10-7-10-9- +B|----------12-14----14----14----14-12-14----14----14-15-14-15---------------10---------------- +G|-12----12-------12----14----11----------12----14--------------------------------------------- +D|----14--------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------- + + + +E|-10-12-10-12-14-12-10-9-------------------------------------10-10-h12-h14---------------10-h12-h14- +B|------------------------12-10-----------------10-10-h12-h14---------------10-10-h12-h14------------ +G|------------------------------12-11-9-------9------------------------------------------------------ +D|--------------------------------------12-11-------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------------- +B|-10-h12-h14-----------10-h12-h14-----------------------------10----10---10----10----10----10---10- +G|------------9-h11-h12------------9-h11-h12--------------9-11----12----9----11----------12----9---- +D|-------------------------------------------9-h11-h12-12--------------------------12--------------- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|-------10-9-10----10-9----------------------------------------------------------------10----10- +B|----10---------12----------------10-h12-h14-12-14-12-14-12-14----14-12-14----14-10-14----14---- +G|-11--------------------9-h11-h12------------------------------11----------12------------------- +D|----------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|-10-h12-h14-10----10-9-10----10-9-10-12-10-12-14-10----10-14-15-14-12----------12----------14- +B|---------------10---------12------------------------10----------------15-14-12----15----15---- +G|-------------------------------------------------------------------------------------14------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-17-p14---------------------10-10-h12-h14------------------------------------------------------ +B|--------15----10-10-h12-h14---------------10-10-h12-h14---------------------------------------- +G|-----------14-------------------------------------------11-9----------------------------------- +D|-------------------------------------------------------------12-11-9-------------------------4- +A|---------------------------------------------------------------------12-10-9---------------5--- +E|-----------------------------------------------------------------------------12-10-9-12-10----- + + + +E|-------15-p12-------14-10-------12-9------10-p7-----s12-p9------9------------------- +B|--------------14----------10---------10---------8----------10-----10---------------- +G|-----------------14----------11---------9---------7-----------9------9-------------- +D|-h5-h7-----------------------------------------------------------------11-7--------- +A|----------------------------------------------------------------------------7---7--- +E|------------------------------------------------------------------------------9---5- + + + +E|---------------------------------------------------------------------5-9- +B|-------------------------------------------------------------------5----- +G|-----------------------------------------------------------------6------- +D|-------------------4-h5-h7-------------------------------------7--------- +A|---------4-h5-h7-5-----------4-h5-h7---2-h4-h5---4-h5-h7---4-7----------- +E|-7-9-5-5-------------------5---------3---------3---------5--------------- + + + +E|-12-p9----9--------------------------------------------------------- +B|-------10---------------7---8-7-h8-p7------------------------------- +G|--------------------7-9---7-----------9-7-6-------------------6-7-9- +D|------------------9-------------------------7---7-------5-7-9------- +A|--------------9-5-----------------------------9---5-7-9------------- +E|------------7------------------------------------------------------- + + + +E|--------7-7-9-10-9-7-6-7-----------------------7------------------- +B|-7-8-10------------------7-8-7-h8-p7------------------------------- +G|-------------------------------------9-7-6-------------------4-6-7- +D|-------------------------------------------7-----------4-5-7------- +A|---------------------------------------------5---4-5-7------------- +E|------------------------------------------------------------------- + + + +E|-------5-5----------------------------------------------------- +B|-5-7-8-----8-7-5-------------------8-7-5----------------------- +G|-----------------7-6-4-------------------7-6-4----------------- +D|-----------------------7-5-4-------------------7-5-4----------- +A|-----------------------------7-5-4-------------------7-5-4-2-4- +E|--------------------------------------------------------------- + + + +E|-------------------2-3-19-p14----------14-16-p14----------14-------------------- +B|-------------2-3-5------------15----15-----------15----15----------------------- +G|---------2-4---------------------16-----------------16---------11-9-7----------- +D|---2-4-5--------------------------------------------------------------11-9-7---- +A|-5---------------------------------------------------------------------------10- +E|-------------------------------------------------------------7------------------ + + + +E|------------14-p10----------10-13-p10----------10-17-p12----------12-14-p12----------12-15-14- +B|-------------------12----12-----------12----12-----------14----14-----------14----14---------- +G|----------------------11-----------------13-----------------14-----------------15------------- +D|---------------------------------------------------------------------------------------------- +A|-9-7------------------------------------------------------------------------------------------ +E|-----10-9-7----------------------------------------------------------------------------------- + + + +E|-12----------------14-15-p14----17-15-14-----------------------------12-p9---------9-12-p9---- +B|----15-14-12-14-15-----------15----------17-15-14-------15-19-p15----------10---10---------11- +G|--------------------------------------------------15-16-----------16----------9--------------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-------9-19-17-15----------------17-22-p17----21-19-17----------------14-17-p14--------------- +B|----11------------19-17-15-17-19-----------19----------20-19-17-14-15-----------15------------ +G|-12--------------------------------------------------------------------------------11-9------- +D|----------------------------------------------------------------------------------------11---- +A|-------------------------------------------------------------------------------------------12- +E|---------------------------------------------------------------------------------------------- + + + +E|-----------------------------------------------------------10-p7-------7-10-p5------- +B|------------------------10--------------12-p10----------10-------8---8---------7---7- +G|----9-12-11----------11----11-9----9-12--------11----11------------7-------------7--- +D|-11---------12----12------------11----------------12--------------------------------- +A|---------------12-------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|-5----------------14-------14-15-17-14-17-15-------------17-p14--------------15-p10----------10- +B|---------14-15-17----15-17-------------------15-14--------------15------------------12----12---- +G|---14-16-------------------------------------------16-14-----------14-s11--------------12------- +D|--------------------------------------------------------------------------12-------------------- +A|------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------ + + + +E|-14-p12-10----------9-p5-------5-10-p5-14-10-12-14-15-14-12----------------------12-14-12- +B|-----------14-12-10------5---5------------------------------15-14-12----12-14-15---------- +G|---------------------------6-----------------------------------------15------------------- +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|-p9--------------7-h10-14-p10----12-p9---------9-------10----9-10-12-10-9---------------- +B|----11---------7--------------12-------10---10---10-p7----10--------------12-10---------- +G|-------12-9-12----------------------------9-------------------------------------12-11-12- +D|----------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------- + + + +E|-------9-10---------------------------------------14-p12----------12-14-p10------------------- +B|-10-12------14-p11---------------------------------------14----14-----------12---------------- +G|-------------------12----------------16-19-p16--------------15-----------------11------------- +D|----------------------14-11-14-12-16-----------16---------------------------------12-9-------- +A|---------------------------------------------------------------------------------------9------ +E|-----------------------------------------------------------------------------------------10-7- + + + +E|---------------------9-------18-21----18-19-p14----------14--------------------19-p14------- +B|------------------11---17-19-------19----19-----15----15----17-p14----------14--------15-12- +G|-------------9-11----------------------------------16--------------15----15----------------- +D|------9-8-11----------------------------------------------------------14-------------------- +A|----9--------------------------------------------------------------------------------------- +E|-10----------------------------------------------------------------------------------------- + + + +E|------------------------------------12-14-12-------------14-p10----------10-16-p13---------- +B|------------------------------11-14----------14-11-------12-----12----12-----------15----15- +G|-11------------------------11----------------------11--------------11-----------------16---- +D|----12-9--------9-12-11-14----------------------------14------------------------------------ +A|---------9----9----------------------------------------------------------------------------- +E|-----------10------------------------------------------------------------------------------- + + + +E|-13-17-p12----------12-14-p12----------12-15-14-12----------------14-19-p14----17-15-14---------- +B|-----------14----14-----------14----14-------------15-14-12-14-15-----------15----------17-15-12- +G|--------------14-----------------15-------------------------------------------------------------- +D|------------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------- + + + +E|-13-p10----------10-12-p9---------9-12-p9----------9-19-p17-15----------------17-22-p17----21- +B|--------12----12----------10---10---------11----11-------------19-17-15-17-19-----------19---- +G|-----------13----------------9---------------12----------------------------------------------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-19-17----------------------------------------10-14-p10-------------------------- +B|-------20-19-17-------------------------11-12-----------12------------------8-p7- +G|------------------------------------4----------------------11-p9----------9------ +D|----------------3---------------4-----4--------------------------11----11-------- +A|------------------2-0-4-1---2-5---5---------------------------------12----------- +E|--------------------------2------------------------------------------------------ + + + +E|-------------------------------------------------------------------14-17-p14------------- +B|-------7-10-8--------8-12-p10----------10-15-p12----------12-14-15-----------15-------14- +G|-7---7--------9----9----------11----11-----------12----12-----------------------14-16---- +D|---7------------11---------------12-----------------12----------------------------------- +A|----------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------- + + + +E|----------------14-15-17-14-17-p15-------------17-p14--------------15-p10----------10--------- +B|-15-17-14-15-17--------------------15-14--------------15------------------12----12------------ +G|-----------------------------------------16-14-----------14-s11--------------12--------------- +D|----------------------------------------------------------------12----------------------4----- +A|--------------------------------------------------------------------------------------5---0-4- +E|---------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------14-10-12-14-15-14-12------- +B|-----------------15-p10----------10-14-p10--------10-15-p10----------------------15-14- +G|------------------------11----11-----------9----9-------------------------------------- +D|---4-2-----4-5-------------12----------------11---------------------------------------- +A|-5-----4-5-----5----------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------- + + + +E|-------------10-12-14-12-p9------------14-12-10----------12-9---------9-------10-7-9-10- +B|-12-11-12-14----------------11------------------14-12-10------10---10---10-p7----------- +G|-------------------------------12-9-12---------------------------9---------------------- +D|---------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|-12-10-9----------------------9-10-9----------------------------------------- +B|---------12-10----------10-12--------11-------------------------------------- +G|---------------12-11-12-----------------12-9----9-------------------------11- +D|---------------------------------------------11---4---------4-2---5-2---2---- +A|----------------------------------------------------5-0-4-5-----4-----4------ +E|----------------------------------------------------------------------------- + + + +E|----10-14-p10----14-12----------12-14-p10-----------------------------------10-------12-9- +B|-12-----------12-------14-11-14-----------12-----------------------------12----10--------- +G|---------------------------------------------11-----------------------11----------11------ +D|------------------------------------------------12-9-------------9-12--------------------- +A|-----------------------------------------------------9---------9-------------------------- +E|-------------------------------------------------------10-7-10---------------------------- + + + +E|----------9-19-p14---------------------------------------------------------------- +B|-11----11----------15----------------------------------------------------11-14-17- +G|----12----------------16-11-------------------------------------------11---------- +D|----------------------------12-9--------9-12-4-----------4------11-14------------- +A|---------------------------------9----9--------5---1-2-5---5-13------------------- +E|-----------------------------------10------------2-------------------------------- + + + +E|----18-21----18---------------------------------12-14-12------------------------------- +B|-19-------19----19------------------------11-14----------14-11-------12---------------- +G|-----------------------------2---------11----------------------11---------------------- +D|-------------------4-5-----5-----11-14----------------------------14-12-11-12-14-11-12- +A|----------------2------2-4-----4------------------------------------------------------- +E|--------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------ +B|---------------------------------------------------------------11------- +G|----s12-------12---------------2---------------------3------------11-12- +D|-14-----14-11--------------------5---2-5-4-2-4-4-6-4---6-4-4-4---------- +A|-------------------1-4-1-2-2-5-----5------------------------------------ +E|-----------------2------------------------------------------------------ + + + +E|-------------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------------- +G|-11-------------------------------------------------------------11-------------------- +D|----14-12-11----11-------11-14-11-14-12-11-14-12-11----11-12-14----12-----2---4-----4- +A|-------------12----14-12----------------------------14----------------2-5---4---5-2--- +E|-------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------- +B|----------------------------------------------------------------------------------- +G|--------------------------------------11-------11----11-12-14-12-14-12------------- +D|-2---4---5-2--------11-12-14-11-12-14----12-------14-------------------14-10-9---2- +A|---5---5-----3-2-14-------------------------14---------------------------------1--- +E|----------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------ +B|------------------------------------------------------10-14-p10------12- +G|---3--------------------9-12-11-9-11----9----------11-----------9-11---- +D|---------4-2-------8-11--------------12---11----12---------------------- +A|-4---2-5-----5-4-2---------------------------12------------------------- +E|------------------------------------------------------------------------ + diff --git a/guitar/tabs/Jason Becker/Jason Becker - Altitudes.prj b/guitar/tabs/Jason Becker/Jason Becker - Altitudes.prj new file mode 100644 index 0000000..3efafff --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Altitudes.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Jason Becker - Altitudes.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4) diff --git a/guitar/tabs/Jason Becker/Jason Becker - Altitudes.tab b/guitar/tabs/Jason Becker/Jason Becker - Altitudes.tab new file mode 100644 index 0000000..3732173 --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Altitudes.tab @@ -0,0 +1,82 @@ +%TabMaster v2.00r% + + +E|-14-p12----------12-14-p12----------12-14-p12-------16-p12----------12-16-p12----------12-16-p12---- +B|--------14----14-----------14----14-----------14-----------14----14-----------14----14-----------14- +G|-----------13-----------------13-----------------13-----------13-----------------13----------------- +D|---------------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------- + + + +E|----14-p12----------12-14-p12----------12-14-p12-------11-h12-p11----------11-12-p11----------11-12- +B|-----------14----14-----------14----14-----------14---------------14----14-----------14----14------- +G|-13-----------13-----------------13-----------------13---------------13-----------------13---------- +D|---------------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------- + + + +E|-p11-------s16-p12----------12-s21-p16----------16-21-p16-------21-p17----------17-24-p17----------17- +B|-----14------------14----14------------17----17-----------17-----------17----17-----------17----17---- +G|--------13------------13------------------18-----------------18-----------18-----------------18------- +D|------------------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------------ + + + +E|-21-p17-------19-p16----------16-19-p16----------16-19-p16-------19-p14----------14-19-p14---------- +B|--------17-----------17----17-----------17----17-----------17-----------16----16-----------16----16- +G|-----------18-----------16-----------------16-----------------16-----------16-----------------16---- +D|---------------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------- + + + +E|-14-19-p14-------17-p14-----------------------------12-h16-p12----------12-16-p12----------12-16-p12---- +B|-----------16-----------16-------------------------------------14----14-----------14----14-----------14- +G|--------------16-----------16-p14------------14-h16---------------13-----------------13----------------- +D|----------------------------------16-p13-h16------------------------------------------------------------ +A|-------------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------------- + + + +E|----16-p14----------14-16-p14----------14-16-p14-------16-p12----------12-16-p12----------12-16-p12- +B|-----------16----16-----------16----16-----------16-----------14----14-----------14----14----------- +G|-13-----------13-----------------13-----------------13-----------13-----------------13-------------- +D|---------------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------- + + + +E|-------18-p15----------15-21-p18----------18-24-p21----21-23-p19----19----------------19---------- +B|-14-----------17----17-----------20----20-----------23-----------19----19----------19----19----19- +G|----13-----------18-----------------21------------------------------------20----20----------20---- +D|-----------------------------------------------------------------------------21------------------- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|-17-p14----------14-p11---------------------------17-p14---------------------------------------------- +B|--------16--------------13-----------16-p13----13--------16------------------------------------------- +G|-----------16-14-----------14-p11-----------14--------------16-p14------------------------------------ +D|----------------------------------13-------------------------------16-p13----------------------------- +A|--------------------------------------------------------------------------15-p12-------------12-14-15- +E|---------------------------------------------------------------------------------14-11-13-14---------- + + + +E|------------------- +B|------------------- +G|----------14-16-17- +D|-13-15-16---------- +A|------------------- +E|------------------- + diff --git a/guitar/tabs/Jason Becker/Jason Becker - Clinic.prj b/guitar/tabs/Jason Becker/Jason Becker - Clinic.prj new file mode 100644 index 0000000..d852250 --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Clinic.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Jason Becker - Clinic.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32) diff --git a/guitar/tabs/Jason Becker/Jason Becker - Clinic.tab b/guitar/tabs/Jason Becker/Jason Becker - Clinic.tab new file mode 100644 index 0000000..8642b81 --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Clinic.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------------12-17-12---------------------------------- +B|-------------------------------------------------14----------14------------------------------- +G|----------16----------------16----------------14----------------14----------------18---------- +D|----11-14----14-11----11-14----14-11----11-14----------------------14-11----12-16----16-12---- +A|-12----------------12----------------12----------------------------------14----------------14- +E|---------------------------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------------------------------- +B|---------------------------------------------------------------------------------------------- +G|-------18----------------16----------------16----------------18----------------18------------- +D|-12-16----16-12----12-16----16-12----12-16----16-12----12-16----16-12----12-16----16-12----12- +A|----------------14----------------14----------------14----------------14----------------14---- +E|---------------------------------------------------------------------------------------------- + + + +E|----------14-19-14------------- +B|-------15----------15---------- +G|----16----------------16------- +D|-16----------------------16-12- +A|------------------------------- +E|------------------------------- + diff --git a/guitar/tabs/Jason Becker/Jason Becker - Eleven Blue Egyptians.prj b/guitar/tabs/Jason Becker/Jason Becker - Eleven Blue Egyptians.prj new file mode 100644 index 0000000..75fddff --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Eleven Blue Egyptians.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Jason Becker - Eleven Blue Egyptians.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32)(104,32)(105,32)(106,32)(107,32)(108,32)(109,32)(110,32)(111,32)(112,32)(113,32)(114,32)(115,32)(116,32)(117,32)(118,32)(119,32)(120,32)(121,32)(122,32)(123,32)(124,32)(125,32)(126,32)(127,32)(128,32)(129,32)(130,32)(131,32)(132,32)(133,32)(134,32)(135,32)(136,32)(137,32)(138,32)(139,32)(140,32)(141,32)(142,32)(143,32)(144,32)(145,32)(146,32)(147,32)(148,32)(149,32)(150,32)(151,32)(152,32)(153,32)(154,32)(155,32)(156,32)(157,32)(158,32)(159,32)(160,32)(161,32)(162,32)(163,32)(164,32)(165,32)(166,32)(167,32)(168,32)(169,32)(170,32)(171,32)(172,32)(173,32)(174,32)(175,32)(176,32)(177,32)(178,32)(179,32)(180,32)(181,32)(182,32)(183,32)(184,32)(185,32)(186,32)(187,32)(188,32)(189,32)(190,32)(191,32)(192,32)(193,32)(194,32)(195,32)(196,32)(197,32)(198,32)(199,32)(200,32)(201,32)(202,32)(203,32)(204,32)(205,32)(206,32)(207,32)(208,32)(209,32)(210,32)(211,32)(212,32)(213,32)(214,32)(215,32)(216,32)(217,32)(218,32)(219,32)(220,32)(221,32)(222,32)(223,32)(224,32)(225,32)(226,32)(227,32)(228,32)(229,32)(230,32)(231,32)(232,32)(233,32)(234,32)(235,32)(236,32)(237,32)(238,32)(239,32)(240,32)(241,32)(242,32)(243,32)(244,32)(245,32)(246,32)(247,32)(248,32)(249,32)(250,32)(251,32)(252,32)(253,32)(254,32)(255,32)(256,32)(257,32)(258,32)(259,32)(260,32)(261,32)(262,32)(263,32)(264,32)(265,32)(266,32)(267,32)(268,32)(269,32)(270,32)(271,32)(272,32)(273,32)(274,32)(275,32)(276,32)(277,32)(278,32)(279,32)(280,32)(281,32)(282,32)(283,32)(284,32)(285,32)(286,32)(287,32)(288,32)(289,32)(290,32)(291,32)(292,32)(293,32)(294,32)(295,32)(296,32)(297,32)(298,32)(299,32)(300,32)(301,32)(302,32)(303,32)(304,32)(305,32)(306,32)(307,32)(308,32)(309,32)(310,32)(311,32)(312,32)(313,32)(314,32)(315,32)(316,32)(317,32)(318,32)(319,32)(320,32)(321,32)(322,32)(323,32)(324,32)(325,32)(326,32)(327,32)(328,32)(329,32)(330,32)(331,32)(332,32)(333,32)(334,32)(335,32)(336,32)(337,32)(338,32)(339,32)(340,32)(341,32)(342,32)(343,32)(344,32)(345,32)(346,32)(347,32)(348,32)(349,32)(350,32)(351,32)(352,32)(353,32)(354,32)(355,32)(356,32)(357,32)(358,32)(359,32)(360,32)(361,32)(362,32)(363,32)(364,32)(365,32)(366,32)(367,32)(368,32)(369,32)(370,32)(371,32)(372,32)(373,32)(374,32)(375,32)(376,32)(377,32)(378,32)(379,32)(380,32)(381,32)(382,32)(383,32)(384,32)(385,32)(386,32)(387,32)(388,32)(389,32)(390,32)(391,32)(392,32)(393,32)(394,32)(395,32)(396,32)(397,32)(398,32)(399,32)(400,32)(401,32)(402,32)(403,32)(404,32)(405,32)(406,32) diff --git a/guitar/tabs/Jason Becker/Jason Becker - Eleven Blue Egyptians.tab b/guitar/tabs/Jason Becker/Jason Becker - Eleven Blue Egyptians.tab new file mode 100644 index 0000000..fa60148 --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Eleven Blue Egyptians.tab @@ -0,0 +1,127 @@ +%TabMaster v2.00r% + + +E|-------------------------------------------------------------------- +B|-------------------------------------------------------------------- +G|-7-------------7---------------------------------------------------- +D|---11-8-7-8-11---11-8-7----8-7-8-7----------2-----3-2-----2-----3-2- +A|------------------------10---------10-8-7-7-0-0-0-1-0-0-0-0-0-0-1-0- +E|-------------------------------------------------------------------- + + + +E|---------------------------------------------------------------- +B|-----------------------------------------6---------------------- +G|-------------------------------------5-7-3---------------7------ +D|-----2-----3-2-----3-5-2-----3-2-----3-5---2-----3-2-------11-8- +A|-0-0-0-0-0-1-0-0-0-1-3-0-0-0-1-0-0-0-------0-0-0-1-0-0-0-------- +E|---------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|--------7---------------------------------------------------------- +D|-7-8-11---11-8-7----8-7-8-7--------------6-7-8-7-6----------------- +A|-----------------10---------10-8-7-7-7-8-----------8-7-5-7-5-4----- +E|---------------------------------------------------------------5-5- + + + +E|-------------------------------------------------------------------- +B|-------------------------------------------------------------------- +G|-7-------------7---------------------------------------------------- +D|---11-8-7-8-11---11-8-7----8-7-8-7--------------6-7-8-7-6----------- +A|------------------------10---------10-8-7-7-7-8-----------8-7-5-7-5- +E|-------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------- +B|--------------------------------------------------12-10-12-12-s15-12-h15-p12-10- +G|-------7-------------7---------------------------------------------------------- +D|---------11-8-7-8-11---11-8-7----8-7-8-7---------------------------------------- +A|-4----------------------------10---------10-8-7-7------------------------------- +E|---5-5-------------------------------------------------------------------------- + + + +E|------------------------8-13-12-12-13-12-10-12-10----10------------------------------------ +B|-13-12-10-12---------10---------------------------13----12-13-12-10-12-10---------12-10-12- +G|----------------9-10------------------------------------------------------13-10-9---------- +D|-------------12---------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + + + +E|---------------------------------------------8-13-12---------------------------------------- +B|-12-s15-12-h15-p12-10-13-12-10-12---------10------------------------------------------------ +G|-------------------------------------9-10------------9-10-7-7-5-9-10-s12-10-h12-p10-h12-7-9- +D|----------------------------------12-------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------- +G|-9-p5-5-4-7-9-10-9-h10-9-10-10-p7-7-5-9-10-12-12-p10-p9-h10-7-9-9-p5-5-4-7-9-10- +D|-------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------- +B|---------------------------------------------------------------------- +G|-9-h10-7-------------7------------------------------------------------ +D|---------11-8-7-8-11---11-8-7----8-7-8-7--------------6-7-8-7-6------- +A|------------------------------10---------10-8-7-7-7-8-----------8-7-5- +E|---------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------- +B|------------------------------------------------------12-10-12-12-s15-12-h15- +G|-----------7-------------7--------------------------------------------------- +D|-------------11-8-7-8-11---11-8-7----8-7-8-7--------------------------------- +A|-7-5-4----------------------------10---------10-8-7-7------------------------ +E|-------5-5------------------------------------------------------------------- + + + +E|-------------------------------8-13-12-12-13-12-10-12-10----10------------------------------ +B|-p12-10-13-12-10-12---------10---------------------------13----12-13-12-10-12-10---------12- +G|-----------------------9-10------------------------------------------------------13-10-9---- +D|--------------------12---------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|---------------------------------------------------8-13-12------------------------------------ +B|-10-12-12-s15-12-h15-p12-10-13-12-10-12---------10-------------------------------------------- +G|-------------------------------------------9-10------------9-10-7-7-5-9-10-s12-10-h12-p10-h12- +D|----------------------------------------12---------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------- +G|-7-9-9-p5-5-4-7-9-10-9-h10-9-10-10-p7-7-5-9-10-s12-12-p10-p9-h10-7-9-9-p5-5-4-7- +D|-------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------- + + + +E|------------ +B|------------ +G|-9-10-9-h10- +D|------------ +A|------------ +E|------------ + diff --git a/guitar/tabs/Jason Becker/Jason Becker - Mabel's Fatal Fable.prj b/guitar/tabs/Jason Becker/Jason Becker - Mabel's Fatal Fable.prj new file mode 100644 index 0000000..a1a6d6b --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Mabel's Fatal Fable.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Jason Becker - Mabel's Fatal Fable.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32)(104,32)(105,32)(106,32)(107,32)(108,32)(109,32)(110,32)(111,32)(112,32)(113,32)(114,32)(115,32)(116,32)(117,32)(118,32)(119,32)(120,32)(121,32)(122,32)(123,32)(124,32)(125,32)(126,32)(127,32)(128,32)(129,32)(130,32)(131,32)(132,32)(133,32)(134,32)(135,32)(136,32)(137,32)(138,32)(139,32)(140,32)(141,32)(142,32)(143,32)(144,32)(145,32)(146,32)(147,32)(148,32)(149,32)(150,32)(151,32)(152,32)(153,32)(154,32)(155,32)(156,32)(157,32)(158,32)(159,32)(160,32)(161,32)(162,32)(163,32)(164,32)(165,32)(166,32)(167,32)(168,32)(169,32)(170,32)(171,32)(172,32)(173,32)(174,32)(175,32)(176,32)(177,32)(178,32)(179,32)(180,32)(181,32)(182,32)(183,32)(184,32)(185,32)(186,32)(187,32)(188,32)(189,32)(190,32)(191,32)(192,32)(193,32)(194,32)(195,32)(196,32)(197,32)(198,32)(199,32)(200,32)(201,32)(202,32)(203,32)(204,32)(205,32)(206,32)(207,32)(208,32)(209,32)(210,32)(211,32)(212,32)(213,32)(214,32)(215,32)(216,32)(217,32)(218,32)(219,32)(220,32)(221,32)(222,32)(223,32)(224,32)(225,32)(226,32)(227,32)(228,32)(229,32)(230,32)(231,32)(232,32)(233,32)(234,32)(235,32)(236,32)(237,32)(238,32)(239,32)(240,32)(241,32)(242,32)(243,32)(244,32)(245,32)(246,32)(247,32)(248,32)(249,32)(250,32)(251,32)(252,32)(253,32)(254,32)(255,32)(256,32)(257,32)(258,32)(259,32)(260,32)(261,32)(262,32)(263,32)(264,32)(265,32)(266,32)(267,32)(268,32)(269,32)(270,32)(271,32)(272,32)(273,32)(274,32)(275,32)(276,32)(277,32)(278,32)(279,32)(280,32)(281,32) diff --git a/guitar/tabs/Jason Becker/Jason Becker - Mabel's Fatal Fable.tab b/guitar/tabs/Jason Becker/Jason Becker - Mabel's Fatal Fable.tab new file mode 100644 index 0000000..d9e7833 --- /dev/null +++ b/guitar/tabs/Jason Becker/Jason Becker - Mabel's Fatal Fable.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|------------------------------------------------------------------------ +B|----------------8-10-8-------------------------------------------------- +G|---------7-9-10--------10-9-7---------7-9-10---------------------------- +D|-10-9-10----------------------10-9-10--------7-9-10-6-7-9-6-----7-----9- +A|------------------------------------------------------------8-7---8-7--- +E|------------------------------------------------------------------------ + + + +E|------------------------------------------------------------------------ +B|------------------------------------------------------------------------ +G|------------5-----7-----9-----10-----10-9-7-10-9-7----9-7--------------- +D|-----10-------7-6---7-6---7-6----7-6---------------10-----10-9-10-12-10- +A|-8-7----8-7------------------------------------------------------------- +E|------------------------------------------------------------------------ + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|---------9-8-9------------------------9-10-9------------------------7-9-7- +D|-9-6-7-9-------6-7-9----------9-10-12--------12-10-9---------7-9-10------- +A|---------------------12-11-12------------------------10-9-10-------------- +E|-------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|--------------------5-7-5---------------------------4-5-6-5-6-7-6- +D|-10-9-7-------6-7-9-------9-7-6-7-9-10-6-7-9-7-9-10--------------- +A|--------8-7-8----------------------------------------------------- +E|------------------------------------------------------------------ + + + +E|---------7-12---16-12----------12-13-12-10-------------------------------------- +B|-------9------9-------12----12-------------13-12-10----------------------------- +G|-7-8-9-------------------13-------------------------12-10-9---------------9----- +D|------------------------------------------------------------12-10-9---6-9---9-6- +A|--------------------------------------------------------------------7----------- +E|-------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------ +B|------------------------------------------------------------------------------ +G|-13-9--------9-10-9-7-10-9-7-9-7----------------------------9-10-9------------ +D|------9----9---------------------10-9-10-9----------9-10-12--------12-10-9---- +A|--------11---------------------------------12-11-12------------------------10- +E|------------------------------------------------------------------------------ + + + +E|----------------------------------------------------------------10-15-10- +B|-------------------------------------------------------------12---------- +G|-------------7-9-7--------------------5-7-5---------------12------------- +D|------7-9-10-------10-9-7-------6-7-9-------9-7-6----9-12---------------- +A|-9-10---------------------8-7-8-------------------10--------------------- +E|------------------------------------------------------------------------- + + + +E|------------15-11----------------------------11-15-10--------------------------10-15-11---- +B|-12---------------13----------------------13----------12--------------------12----------13- +G|----12---------------12----------------12----------------12--------------12---------------- +D|-------12-9-------------13----------13----------------------12-9----9-12------------------- +A|---------------------------15-10-15------------------------------10------------------------ +E|------------------------------------------------------------------------------------------- + + + +E|-------------------------11----10-15----11-15----10-15----11-15----10-15----11-15----10-15---- +B|----------------------13----12-------13-------12-------13-------12-------13-------12-------13- +G|-12----------------12------------------------------------------------------------------------- +D|----13----------13---------------------------------------------------------------------------- +A|-------15-10-15------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-11-15-16- +B|---------- +G|---------- +D|---------- +A|---------- +E|---------- + diff --git a/guitar/tabs/Jazz/Jazz-Rock Lick.tab b/guitar/tabs/Jazz/Jazz-Rock Lick.tab new file mode 100644 index 0000000..bdc7775 --- /dev/null +++ b/guitar/tabs/Jazz/Jazz-Rock Lick.tab @@ -0,0 +1,24 @@ + + + + + +Jazz/Rock Lick + + +A friend of mine showed me this little lick that he gleened from a Satriani song. I, of course, tweaked it a little bit and made it my own. + +This is a good example of how you can learn new licks by listening to your favorite CDs and trying to figure out the solos by ear. You probably won't be able to play exactly what you hear on the CD, but in the process you'll get new ideas and come up with your own stuff. + + +Key = A Minor + + +E |----------------5-------------------------------------------| +B |--3-/-5-h-8-p-5---8-p-5---5---------------------7-\---------| +G |------------------------7---8-p-7-p-5---7---5~--5-\---------| +D |--------------------------------------7---7----------/-4~---| +A |------------------------------------------------------------| +E |------------------------------------------------------------| + + diff --git a/guitar/tabs/Jazz/jazzriff.prj b/guitar/tabs/Jazz/jazzriff.prj new file mode 100644 index 0000000..6e20046 --- /dev/null +++ b/guitar/tabs/Jazz/jazzriff.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=jazzriff.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16) +TEMPO=651578 diff --git a/guitar/tabs/Jazz/jazzriff.tab b/guitar/tabs/Jazz/jazzriff.tab new file mode 100644 index 0000000..a0ed8c8 --- /dev/null +++ b/guitar/tabs/Jazz/jazzriff.tab @@ -0,0 +1,28 @@ + + + + +A Jazz riff + + +A found this in my magazine. Pretty cool. + + + +Key = e-a-d-g-b-e + + + E |----3--------------------------|----------------------------------| + B |-5-----6--5--3-----------------|----------------------------------| + G |----------------5--------5-----|----------------------------------| + D |-------------------4--5-----5--|-------3------------2-------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |----2--5-----2--5-----1/2------|----------------------------------| + A |3--------3--------3-------3---3|----------------------------------| + E |----------------------------3--|----------------------------------| + diff --git a/guitar/tabs/Jazz/jazzriff2.prj b/guitar/tabs/Jazz/jazzriff2.prj new file mode 100644 index 0000000..d2c5ba8 --- /dev/null +++ b/guitar/tabs/Jazz/jazzriff2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=jazzriff2.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500) diff --git a/guitar/tabs/Jazz/jazzriff2.tab b/guitar/tabs/Jazz/jazzriff2.tab new file mode 100644 index 0000000..d97db6c --- /dev/null +++ b/guitar/tabs/Jazz/jazzriff2.tab @@ -0,0 +1,25 @@ +another jazz riff + + +NEATO!!! + + + +Key = e-a-d-g-b-e + + + E |-------------------------------|----------------------------------| + B |-------9-----------------------|-------9--------------------------| + G |-------9--7--7-----------------|-------9--7--7--------------------| + D |----------------9--7--9--------|----------------9--7--9-----------| + A |-7--7--------------------------|-7--7-----------------------------| + E |-------------------------------|----------------------------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + diff --git a/guitar/tabs/JazzImprovisation/Chord Types/MinorModeProgression.prj b/guitar/tabs/JazzImprovisation/Chord Types/MinorModeProgression.prj new file mode 100644 index 0000000..78eabf0 --- /dev/null +++ b/guitar/tabs/JazzImprovisation/Chord Types/MinorModeProgression.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=MinorModeProgression.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4) +COMMENT=(0,"Cm6") diff --git a/guitar/tabs/JazzImprovisation/Chord Types/MinorModeProgression.tab b/guitar/tabs/JazzImprovisation/Chord Types/MinorModeProgression.tab new file mode 100644 index 0000000..e932b72 --- /dev/null +++ b/guitar/tabs/JazzImprovisation/Chord Types/MinorModeProgression.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3-8--8-5-7-8-10-12-1-3- +B|-1-8--8-5-7-8-10-12-1-3- +G|-2-8--8-5-7-8-10-12-1-3- +D|-1-10-7-4-6-7-9--11-0-2- +A|---12------------------- +E|---8--8-5-7-8-10-12-1-3- + diff --git a/guitar/tabs/JazzImprovisation/Modulation/Modulation.prj b/guitar/tabs/JazzImprovisation/Modulation/Modulation.prj new file mode 100644 index 0000000..f7339f7 --- /dev/null +++ b/guitar/tabs/JazzImprovisation/Modulation/Modulation.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Modulation.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4) diff --git a/guitar/tabs/JazzImprovisation/Modulation/Modulation.tab b/guitar/tabs/JazzImprovisation/Modulation/Modulation.tab new file mode 100644 index 0000000..a031d64 --- /dev/null +++ b/guitar/tabs/JazzImprovisation/Modulation/Modulation.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--10-7-8--3-5-3-8-- +B|-8--10-7-8--3-5-3-8-- +G|-9--10-8-9--3-5-4-9-- +D|-9--10-9-9--3-5-3-9-- +A|-10-12-7-10-5-7-5-10- +E|-8--10---8--3-5-3-8-- + diff --git a/guitar/tabs/Joe Satriani/Always With you Fast riff.prj b/guitar/tabs/Joe Satriani/Always With you Fast riff.prj new file mode 100644 index 0000000..1f0c708 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Always With you Fast riff.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Always With you Fast riff.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32) diff --git a/guitar/tabs/Joe Satriani/Always With you Fast riff.tab b/guitar/tabs/Joe Satriani/Always With you Fast riff.tab new file mode 100644 index 0000000..4ab7a76 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Always With you Fast riff.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-9-9-b7----7-------------------------------------------------------------------------- +B|--------10---10-p8-p7----------------------------------------------------------------- +G|----------------------9-p7-p6-h7-h9-p7-p6-s4-h6-h7-p6-p4---------------4-------------- +D|---------------------------------------------------------7-p5-p4-h5-h7---7-p5-p4------ +A|---------------------------------------------------------------------------------7-p5- +E|-------------------------------------------------------------------------------------- + + + +E|----21------------------------------------------------------------------- +B|-----------------------------------12-h14-h15-p14-p12-------------------- +G|------------------------11-h12-h14--------------------14-p12-p11-s15-s11- +D|-------------11-h12-h14-------------------------------------------------- +A|-p4----12-14------------------------------------------------------------- +E|------------------------------------------------------------------------- + diff --git a/guitar/tabs/Joe Satriani/Am9 Arpeggio.prj b/guitar/tabs/Joe Satriani/Am9 Arpeggio.prj new file mode 100644 index 0000000..8d47a20 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Am9 Arpeggio.prj @@ -0,0 +1,5 @@ +WINTABV1.00 +TABLATURE=Am9 Arpeggio.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16) +RANGE=25;50;STUDY_1 +RANGE=0;6;RANGE_0_6 diff --git a/guitar/tabs/Joe Satriani/Am9 Arpeggio.tab b/guitar/tabs/Joe Satriani/Am9 Arpeggio.tab new file mode 100644 index 0000000..0297fd3 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Am9 Arpeggio.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-------3-----------3-----3-3-------2-----------2-------2-2----- +B|-----1---1-------1---1-----1-----0---0-------0---0-------0----- +G|---4-------4---4-------4---4---3-------3---3-------3-----3---0- +D|-2-----------2-----------2-2-1-----------1-----------1-1-1-0--- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---2-------3-3-------0-----------0-----------0--------15- +B|-0-------0---0-----2---2-------5---5-------8---8---13-14- +G|-------0-----0---3-------3---6-------6---9-------9-14-15- +D|-----0-------0-2-----------5-----------8-----------13-14- +A|--------------------------------------------------------- +E|--------------------------------------------------------- + diff --git a/guitar/tabs/Joe Satriani/Back to Shalla-Bal.prj b/guitar/tabs/Joe Satriani/Back to Shalla-Bal.prj new file mode 100644 index 0000000..8f985ae --- /dev/null +++ b/guitar/tabs/Joe Satriani/Back to Shalla-Bal.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Back to Shalla-Bal.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16) diff --git a/guitar/tabs/Joe Satriani/Back to Shalla-Bal.tab b/guitar/tabs/Joe Satriani/Back to Shalla-Bal.tab new file mode 100644 index 0000000..6b23eaf --- /dev/null +++ b/guitar/tabs/Joe Satriani/Back to Shalla-Bal.tab @@ -0,0 +1,450 @@ +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# + +Date: Tue, 16 Jun 1998 11:53:18 -0700 (PDT) +From: Yuri Zhukov +Subject: s/satriani_joe/back_to_shalla-bal.tab + +“Back to Shalla-Bal” by Joe Satriani +from the “Flying in a Blue Dream” Album + +tabbed by Yuri Zhukov + + +|-------------------------| +|-------------------------| +|-------------------------| +|-9-9---9-9---9-9---9-9---| +|-9-9---9-9---9-9---9-9---| +|-7-7---7-7---7-7---7-7---| + +The “growling” part, all with whammy bar: +|-------------------------| +|-------------------------| +|-------------------------| +|-------------------------| +|------------------ph-----| +|-0(2)(0)(1)(0)(2)-2-(5)--| + +main melody 1, w/ wah: +|-------------------------------| +|-ph------------ph--------------| +|-9(11)-7-------7(7.5)(7)-------| +|---------9-7-9-----------7-9~~-| +|-------------------------------| +|-------------------------------| + +|-7--------------|----------------------| +|--10----9~~-7-7-|-ph-------------------| +|----11----------|-9(11)(9)(11)-7-------| +|------9---------|----------------9-7---| +|----------------|----------------------| +|----------------|----------------------| + +|-------------------------------| +|--------------------ph-ph-ph---| +|---------------2(4)--4--4--4--•| +|-------ph-0-0-----------------•| +|-7-5-7-7-----------------------| +|-------------------------------| + + +melody 2: +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-------4(5)(4)-2--slow bend--| +|-0-4-7-------------3(4)~~~~--| + +|--------------------------------| +|--------------------------------| +|--------------------------------| +|--------------------------------| +|------9-11(12)(11)-9------------| +|-7-11----------------10(11)~~~--| + +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-------4(5)(4)-2--slow bend--| +|-0-4-7-------------3(4)~~~~--| + +|-------------------------------------| +|-------------------------------------| +|--------7(7.5)-4------4-7(7.5)-4~~~--| +|------------------4-6----------------| +|------9------------------------------| +|-7-11--------------------------------| + +|--------------------------------| +|--------------------------------| +|--------------------------------| +|------9-11(12)(11)-9------------| +|-7-11----------------10(11)~~~--| +|--------------------------------| + +|--------------------------------------| +|--------------------------------12~~--| +|------11-13(13.5)(13)-11--------------| +|-9-13--------------------12(13)-------| +|--------------------------------------| +|--------------------------------------| + +|------------------------------12~~--| +|------12-14(15)(14)-12--------------| +|-9-13------------------12(13)-------| +|------------------------------------| +|------------------------------------| +|------------------------------------| + +|-4(6)-6-6-4(6)-6-6~~---| +|-5(7)-7-7-5(7)-7-7~~---| +|-----------------------| +|-----------------------| +|-----------------------| +|-----------------------| + +|-7(9)--9--9--7(9)--9--9~~~--| +|-9(11)-11-11-9(11)-11-11~~--| +|----------------------------| +|----------------------------| +|----------------------------| +|----------------------------| + +|-10(12)-12-12-10(12)-12-12~~---| +|-12(14)-14-14-12(14)-14-14~~---| +|-------------------------------| +|-------------------------------| +|-------------------------------| +|-------------------------------| + +|-12(14)-14-14-12(14)-14-14~~--| +|-14(16)-16-16-14(16)-16-16~~--| +|------------------------------| +|------------------------------| +|------------------------------| +|------------------------------| + +solo: +|-19(21)-19(21)-19(21)-19(21)(19)|-21^16^21^16^14-19^16^14---- +|--------------------------------|------------------------16-- +|--------------------------------|--------------------------18 +|--------------------------------|---------------------------- +|--------------------------------|---------------------------- +|--------------------------------|---------------------------- + +-------------------|-21^19^16^14^21^19^16^19^21^19^16^14^- +-21^19^16^14-21^19-|-------------------------------------- +-------------------|-------------------------------------- +-------------------|-------------------------------------- +-------------------|-------------------------------------- +-------------------|-------------------------------------- + +-21^19^16^14^21^19^16^14^16-18-19^18^16^14^16^18^19^18^16^14| +------------------------------------------------------------| +------------------------------------------------------------| +------------------------------------------------------------| +------------------------------------------------------------| +------------------------------------------------------------| + +|-18^16^14^16^18^19^18^16^14^16^14^12^11^14-12-11-| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| + +|------------------------------------| +|-14(16)(14)(17)(pull off fretboard)-| +|------------------------------------| +|------------------------------------| +|------------------------------------| +|------------------------------------| + +|-----------------------------------------------------------| +|-------------(very very fast)------------------------------| +|-ph-15-16-181615181615181615181615181615181615181615181615-| +|-14--------------------------------------------------------| +|-----------------------------------------------------------| +|-----------------------------------------------------------| + +|------------------------------------------------- +|-------------------------(elevens not ones)------ +|-181615181615181615\131313\111111/131313\111111\- +|------------------------------------------------- +|------------------------------------------------- +|------------------------------------------------- + +-----------------------------------------------------------| +-----------------ph--17(19)--14^12-------------------------| +-99119\8898\6686\4----------------13^11--------------------| +---------------------------------------14^11^14^11^9--9----| +----------------------------------------------------11-9^7^| +-----------------------------------------------------------| + +|----------------------------------------| +|----------------------------------------| +|-----------------------------------4-4--| +|-------------------ph-------------------| +|-9^7^9^7^9^7^9(11)-7(9)(7)(9)(7)(9)-----| +|----------------------------------------| + t t t t t +|-15-7^10-15-7^10-15-7^10-15-7^10-15-7^10-| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| + t t t t t +|-14-5^10-14-5^10-14-5^10-14-5^10-14-5^10-| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| + t t t t t +|-17-9^12-17-9^12-17-9^12-17-9^12-17-9^12-| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| + t t t t t +|-16-7^12-16-7^12-16-7^12-16-7^12-16-7^12-| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| +|-----------------------------------------| + t t t t t +|-19-10^15-19-10^15-19-10^15-19-10^15-19-10^15-| +|----------------------------------------------| +|----------------------------------------------| +|----------------------------------------------| +|----------------------------------------------| +|----------------------------------------------| + t t t t t +|-17-10^14-17-10^14-17-10^14-17-10^14-17-10^14-| +|----------------------------------------------| +|----------------------------------------------| +|----------------------------------------------| +|----------------------------------------------| +|----------------------------------------------| + +|-19^0^17^0^16^0^14^0^12^10^0^10^9^0^9^7^0^7^5^0^5^4^0^4^2^0-| +|------------------------------------------------------------| +|------------------------------------------------------------| +|------------------------------------------------------------| +|------------------------------------------------------------| +|------------------------------------------------------------| + +|-4^2^4^0^2^0------------------------| +|------------3^2^3^0^2^0^9^7^5^3^2^0-| +|------------------------------------| +|------------------------------------| +|------------------------------------| +|------------------------------------| + +|---------------------| +|-ph-----18-19-19~~~--| +|-10------------------| +|---------------------| +|---------------------| +|---------------------| + +back to main theme: + +|-------------------------------| +|-ph------------ph--------------| +|-9(11)-7-------7(7.5)(7)-------| +|---------9-7-9-----------7-9~~-| +|-------------------------------| +|-------------------------------| + +|-7--------------|----------------------| +|--10----9~~-7-7-|-ph-------------------| +|----11----------|-9(11)(9)(11)-7-------| +|------9---------|----------------9-7---| +|----------------|----------------------| +|----------------|----------------------| + +|-------------------------------| +|--------------------ph-ph-ph---| +|---------------2(4)--4--4--4--•| +|-------ph-0-0-----------------•| +|-7-5-7-7-----------------------| +|-------------------------------| + +melody 2 w/ ad lib: +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-------4(5)(4)-2--slow bend--| +|-0-4-7-------------3(4)~~~~--| + +|--------------------------------| +|--------------------------------| +|--------------------------------| +|--------------------------------| +|------9-11(12)(11)-9------------| +|-7-11----------------10(11)~~~--| + +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-------4(5)(4)-2--slow bend--| +|-0-4-7-------------3(4)~~~~--| + +|-------------------------------------| +|-------------------------------------| +|--------7(7.5)-4------4-7(7.5)-4~~~--| +|------------------4-6----------------| +|------9------------------------------| +|-7-11--------------------------------| + +|--------------------------------| +|--------------------------------| +|------------------------------9-| +|------9-11(12)(11)-9------------| +|-7-11----------------10(11)~~~--| +|--------------------------------| + +|-10(12)(11)-7-5----------------| +|----------------7--------------| +|-----------------9(11)-0-7~~~--| +|-------------------------------| +|-------------------------------| +|-------------------------------| + +|--------------------------------| +|--------------------------------| +|--------------------------------| +|------9-11(12)(11)-9------------| +|-7-11----------------10(11)~~~--| +|--------------------------------| + +|-----------------------7-7-7-| +|-10-10-5---7^9^7^9^7---------| +|-11-11-4-4-7^9^7^9^7---------| +|---------------------9-------| +|-----------------------------| +|-----------------------------| + +solo 2: + t t t t t t +|--------------------------------------| +|-9-3^5-9-3^5-9-3^5-9-3^5-9-3^5-9-3^5--| +|--------------------------------------| +|--------------------------------------| +|--------------------------------------| +|--------------------------------------| + t t t t t t +|-------------------------------------------------| +|-9-3^5^7-9-3^5^7-9-3^5^7-9-3^5^7-9-3^5^7-9-3^5^7-| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| + t t t t t t +|-------------------------------------------------------| +|-10-4^5^9-10-4^5^9-10-4^5^9-10-4^5^9-10-4^5^9-10-4^5^9-| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| + + t t t t t t +|-------------------------------------------------------| +|-10-4^5^9-10-4^5^9-10-4^5^9-10-4^5^9-10-4^5^9-10-4^5^9-| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| + +|-10^9-4^7-10^9-4^7-10^9-4^7-10^9-4^7-10^9-4^7-10^9-4^7-| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| + +|-10^9-4^7-10^9-4^7-10^9-4^7-10^9-4^7-10^9-4^7-10^9-4^7-| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| + +|-11^10-5^7-11^10-5^7-11^10-5^7-11^10-5^7-11^10-5^7-11^10-5^7-9-| +|-------------------------------------------------------------10| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| + + tremolo picking +|-16/////////////-17/////////////-16///-14///-12///-10///-| +|-15/////////////-X-/////////////-------------------------| +|-16/////////////-16/////////////-16///-14///-13///-11///-| +|---------------------------------------------------------| +|---------------------------------------------------------| +|---------------------------------------------------------| + +|-9-8-7--| +|-5-4-3--| +|--------| +|--------| +|--------| +|--------| + +|-4(6)-6-6-4(6)-6-6~~---| +|-5(7)-7-7-5(7)-7-7~~---| +|-----------------------| +|-----------------------| +|-----------------------| +|-----------------------| + +|-7(9)--9--9--7(9)--9--9~~~--| +|-9(11)-11-11-9(11)-11-11~~--| +|----------------------------| +|----------------------------| +|----------------------------| +|----------------------------| + +|-10(12)-12-12-10(12)-12-12~~---| +|-12(14)-14-14-12(14)-14-14~~---| +|-------------------------------| +|-------------------------------| +|-------------------------------| +|-------------------------------| + +|-12(14)-14-14-12(14)-14-14~~--| +|-14(16)-16-16-14(16)-16-16~~--| +|------------------------------| +|------------------------------| +|------------------------------| +|------------------------------| + +|--------------------------12-17-19~~~----------------| +|-17(19)^15^17^15----12-15-------------------10-12~~~-| +|-----------------14--------------------9(11)---------| +|-----------------------------------------------------| +|-----------------------------------------------------| +|-----------------------------------------------------| + +tab key: +t=tap +ph=pinch harmonic +^=legato +x(y)=bend note "x" to pitch "y" +/=slide up +\=slide down +~=vibrato + + diff --git a/guitar/tabs/Joe Satriani/Baroque by Joe Satriani.prj b/guitar/tabs/Joe Satriani/Baroque by Joe Satriani.prj new file mode 100644 index 0000000..1bb2ca0 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Baroque by Joe Satriani.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Baroque by Joe Satriani.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8)(154,8)(155,8)(156,8)(157,8)(158,8)(159,8)(160,8)(161,8)(162,8)(163,8)(164,8)(165,8)(166,8)(167,8)(168,8)(169,8)(170,8)(171,8)(172,8)(173,8)(174,8)(175,8)(176,8)(177,8)(178,8)(179,8)(180,8)(181,8)(182,8)(183,8)(184,8)(185,8)(186,8)(187,8)(188,8)(189,8)(190,8)(191,8)(192,8)(193,8)(194,8)(195,8)(196,8)(197,8)(198,8)(199,8)(200,8)(201,8)(202,8)(203,8)(204,8)(205,8)(206,8)(207,8)(208,8)(209,8)(210,8)(211,8)(212,8)(213,8)(214,8)(215,8)(216,8)(217,8)(218,8)(219,8)(220,8)(221,8)(222,8)(223,8)(224,8)(225,8)(226,8)(227,8)(228,8)(229,8)(230,8)(231,8)(232,8)(233,8)(234,8)(235,8)(236,8)(237,8)(238,8)(239,8)(240,8)(241,8)(242,8)(243,8)(244,8)(245,8)(246,8)(247,8)(248,8)(249,8)(250,8)(251,8)(252,8)(253,8)(254,8)(255,8)(256,8)(257,8)(258,8)(259,8)(260,8)(261,8)(262,8)(263,8)(264,8)(265,8)(266,8)(267,8)(268,8)(269,8)(270,8)(271,8)(272,8)(273,8)(274,8)(275,8)(276,8)(277,8)(278,8)(279,8)(280,8)(281,8)(282,8)(283,8)(284,8)(285,8)(286,8)(287,8)(288,8)(289,8)(290,8)(291,8)(292,8)(293,8)(294,8)(295,8)(296,8)(297,8)(298,8)(299,8)(300,8)(301,8)(302,8)(303,8) diff --git a/guitar/tabs/Joe Satriani/Baroque by Joe Satriani.tab b/guitar/tabs/Joe Satriani/Baroque by Joe Satriani.tab new file mode 100644 index 0000000..16abed5 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Baroque by Joe Satriani.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|---------------------------------------------------------------------------------------- +B|---------------------------------------------------------------------------------------- +G|-12----------------------12----------12----------------------12-------------------15-14- +D|-------------------------------------------------------------------------12-10-12-12-15- +A|-10-10-10-10-10-10-10-10-8--8-8-8-10-10-10-10-10-10-10-10-10-8--8-8-8-10-10-12-13------- +E|---------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------------- +B|-------------------------------13----------------------------------16-15-13----13-15--------- +G|-15-12-------------------15-14----------------15-14-15-12-------------------15-------15-15--- +D|-15----15-------12-10-12-12-15-15-17-12-10-12-12-15-15----15-------------------------------7- +A|----------13----10-12-13----------15-10-12-13----------------13----15-------13-------13-13-5- +E|----11-------11-------------------13-------------------11-------11----15-13----13------------ + + + +E|------------------------------------------------------------------------------- +B|-----------------------------------8-----------------------------8-10-------15- +G|-----10-9--10-7--------------10-9--------------10-9--10-7-------------10-10-12- +D|-5-7-7--10-10---10-----7-5-7-7--10-10-12-7-5-7-7--10-10---10------------------- +A|-7-8---------------8---5-7-8----------10-5-7-8---------------8--------8--8----- +E|--------------6------6----------------8-----------------6------6-8------------- + + + +E|----------------------------------------------------------------11-------------- +B|-13-10-8----9---------------------------4-----6-8-6-8--------15-------11-----18- +G|---------12---12--------------------1-----7------------------------------------- +D|-14-12-9---------10-10-s12-10-----5---------8-------5-7-9-12-------13----s17---- +A|--------------------------------3---------------6-8----------15----------------- +E|--------------------11-s13-11-1-------4-------6--------------------------------- + + + +E|----8---------------11----11----11----11----11----11----11----11----10----10----10----10---- +B|-11-----------11-15----15----13----11----15----15----13----11----13----13----11----10----13- +G|---------8---------------------------------------------------------------------------------- +D|------10---15------------------------------------------------------------------------------- +A|-11----------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-10----10----10----11----11----11----11----11----11----11----11----11----10----10----10----10- +B|----13----11----10----15----15----13----11----15----15----13----11----13----13----11----10---- +G|---------------------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|----10----10----10----11----------14-15------------------------------------------------------- +B|-13----13----11----10----10----10-------------------------------------------------13---------- +G|----------------------------------------------15-14-15-12-------------------15-14------------- +D|----------------------------12----------10-12-12-15-15----15-------12-10-12-12-15-15-17-12-10- +A|-------------------------------------10-12-13----------------13----10-12-13----------15-10-12- +E|-------------------------------------------------------11-------11-------------------13------- + + + +E|------------------------------------------------------------------------------------- +B|-------------------------16-15-13----13-15------------------------------------------- +G|----15-14-15-12-------------------15-------15-15------------10-s9--10-7-------------- +D|-12-12-15-15----15-------------------------------7-10-7-5-7-7--s10-10---10-----7-5-7- +A|-13----------------13----15-------13-------13-13-8-7--5-7-8----------------8---5-7-8- +E|-------------11-------11----15-13----13-------------------------------6------6------- + + + +E|------------------------------------------------------------------------------------- +B|--------8------------------------------11-10-8----8-10-------8-10-11-10-8----8-10---- +G|-10-s9--------------10-s9--10-7----------------10------10-10--------------10------10- +D|-7--s10-10-12-7-5-7-7--s10-10---10--------------------------------------------------- +A|-----------10-5-7-8----------------8---10------8-------8--8--7-8--10------8-------8-- +E|-----------8------------------6------6----10-8----8------------------10-8----8------- + + + +E|----------------------------------------------------------------------- +B|----15-13-11-10-8----8-10-------8-10-11-10-8-10-8-10------------------- +G|-10---------------10------10-10----------------------10-10------------- +D|-----------------------------------------------------------8-h10-8-h10- +A|-8--13-12-10------8-------8--8--7-8--10------8------------------------- +E|-------------10-8----8------------------10-8----8-------6-------------- + diff --git a/guitar/tabs/Joe Satriani/Cryin - Joe Satriani.prj b/guitar/tabs/Joe Satriani/Cryin - Joe Satriani.prj new file mode 100644 index 0000000..d6c017e --- /dev/null +++ b/guitar/tabs/Joe Satriani/Cryin - Joe Satriani.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cryin - Joe Satriani.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500) diff --git a/guitar/tabs/Joe Satriani/Cryin - Joe Satriani.tab b/guitar/tabs/Joe Satriani/Cryin - Joe Satriani.tab new file mode 100644 index 0000000..f530bce --- /dev/null +++ b/guitar/tabs/Joe Satriani/Cryin - Joe Satriani.tab @@ -0,0 +1,327 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: Jerry Moffett + + + + Cryin' + by Joe Satriani + + + + + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- +11--(12)--11p9-----11--(12)--(11)--(12)p9-------------9~~~---------11--(12)- + ---- + -------------------------------------------11--9--11--------11--9----------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- +11p9--11--(12)--(11)--(12)p9-------------11--(12)--11p9--11--(12)--(11)----- + ---- + ------------------------------9/11/14\9------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- +(12)p9-------------9~~~--------------------------------------(20)--(19)p17-- + ---- + --------11--9--11--------11--9-----12/14\9--9/14\12\9----------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- +19--(20)--(19)--(20)--(19)p17---------17-------------(20)--(19)p17--19--(20) + ---- + -------------------------------x--18------18--16---------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ---------------------19--19--(21)--(19)~~~---------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- +(19)--(20)--(19)p17-------------------------(20)--(19)p17--19--(20)--(19)--- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ----------------------------------------------------------------------17---- + ---- + ------------------------------------------------------------------17-------- + ---- +(20)--(19)p17----------17--17----------16----------------------------------- + ---- + ---------------18--18----------18--16------16--18--(21)--(18)--------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + +(19)------17--(19)--------------16--(17)--(16)------------------------------ + ---- + ------17------------16--17--17------------------17--(19)--17-----(19)~~~---- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ----17--(19)------17--(19)--------------19--(21)--16--(17)--(16)------------ + ---- +17------------17------------16--17--17----------------------------17--(19)-- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ---------------------------------------------------------------------------- + ---- +~~~------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + --------------2--4--2--x--x--4--2--(6)--(4)p2--x--x-----------2------------- + ---- + --------2--4-----------------------------------------4--2--4-----4--2------- + ---- + -----------------------------------------------------------------------2---- + ---- + + + + + + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ----------------2--4--2--x--x--4--2--(6)--(4)p2--x--x--2/4/7\2-------------- + ---- + ----------2--4--------------------------------------------------------2--4-- + ---- +(4)p0----------------------------------------------------------------------- + ---- + + + + + + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- +2--4--2--x--x--4--2--(6)--(4)p2--x--x-----------2--2--------------------2--4 + ---- + ---------------------------------------4--2--4--------4--2-----2--2--4------ + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ------------------------------9--------------------------------------------- + ---- + ---------------------------------9---------------------------------12--(14)- + ---- + --------4--4--6--4--11--(13)--------(12)--11--(13)--(11)p9--11--9----------- + ---- +2--4/6---------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + ---------17--(19)------17--(19)--------------16--(17)--(16)----------------- + ---- +~~~--17------------17------------16--17--17------------------17--(19)--(17)- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + + -----------------------------------------17--(19)------17--(19)------------- + ---- + ---(19)~~~---------------------------17------------17------------16--17--17- + ---- + ------------16--(18)--(16)--(18)-------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + +19--(21)--16--(17)--(16)---------------------------------------------------- + ---- + --------------------------17--(19)~~~--------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + ---------------------------------------------------------------------------- + ---- + + + + + +============================================================================ +==== +== TABLATURE EXPLANATION + == +============================================================================ +==== + + ---------- ---------- + ----5h8--- Hammeron ----(8)--- Ghost Note + ---------- ---------- + ----5p8--- Pulloff ---------- + + ---------- ---------- + ----5/8--- Slide Up -----x---- Dead Note + ---------- ---------- + ----5\8--- Slide Down ---------- + + ---------- ||------|| Repeat Start & End + ----5~~~-- Vibrato ||*----*|| + ---------- ||*----*|| + ---------- ||------|| + +============================================================================ +==== +== Created with a shareware version of the BUCKET 'O TAB + == +== tablature creation software for Windows + == +== For more information: + == +== email: gse@ocsystems.com + == +== US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124 + == +============================================================================ +==== +I used "Bucket 'o Tab" to tab this. The only complaint I have is how to tab +a bend. Maybe I just don't know how to use it yet, but anyway.... + +For bends, I put the note bent to in parens. On pre-bends, the paren note +is first. I have parts of the following songs also if anyone wants them, +e-mail me. + +Crush of Love +One Big Rush +Into the Light +Rubina +Ice 9 +Surfing with the Alien +Tears in the Rain +Flying in a Blue Dream +The Bells of Lal Part II +The Forgotten I & II +The Snake +Brother John +Always with You, Always with Me + + diff --git a/guitar/tabs/Joe Satriani/Day At The Beach - Joe Satriani.prj b/guitar/tabs/Joe Satriani/Day At The Beach - Joe Satriani.prj new file mode 100644 index 0000000..73dc82f --- /dev/null +++ b/guitar/tabs/Joe Satriani/Day At The Beach - Joe Satriani.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Day At The Beach - Joe Satriani.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16) diff --git a/guitar/tabs/Joe Satriani/Day At The Beach - Joe Satriani.tab b/guitar/tabs/Joe Satriani/Day At The Beach - Joe Satriani.tab new file mode 100644 index 0000000..018a770 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Day At The Beach - Joe Satriani.tab @@ -0,0 +1,506 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: bwinkler@math.uni-frankfurt.de +Subject: /s/joe_satriani/day_at_the_beach.tab + + +Hi, here is Joe Satriani's 'Day At The Beach (New Rays From An Ancient Sun)'. + +Since I was learning this song with my guitar teacher, I thought it would be +nice to post this song. I got the TABs from my teacher, who took them from the + official 'Flying In A Blue Dream'-Songbook. +Try this nice little song, it's not too difficult once you got the +tapping-pattern down. All notes are 16th, except for the last note of every +sequence, which is a 8th. +'t' is for left-hand tapping, 'T' for right-hand tapping. + +Note: I used TAB MASTER to write it down. It's a nice program (hi to OFIR ;-)). + + +Bj"orn Winkler, bwinkler@math.uni-frankfurt.de +-------------------------------------------------------------------- + + + t t T t t T t t T t t T t t T +e:||----------------------------------------------------------| +B:||-*--------14--------------------------------------14------| +G:||-------6--14-----6--16-----6--14-----6--16-----6--14------| +D:||-*-----7---------7--16-----7--14-----7--16-----7----------| +A:||----------------------------------------------------------| +E:||----5---------5---------5---------5---------5-------------| + + + + + use same tapping pattern for the rest of the song +e:--------------------------------------------------------| +B:--------14----------------------------------------------| +G:-----6--14-----6--16-----6--14-----6--14-----9--14------| +D:-----7---------7--16-----7--14-----7--14-----9--14------| +A:--------------------------------------------------------| +E:--5---------5---------5---------5---------9-------------| + + + + + +e:-------------------------------------------------------------| +B:-----10--14-----10---------10---------10---------10--14------| +G:-----11--14-----11--16-----11--14-----11--16-----11--14------| +D:--------------------16---------14---------16-----------------| +A:--9----------9----------9----------9----------9--------------| +E:-------------------------------------------------------------| + + + + + +e:--------------------------------------------------------------|| +B:-----10--14-----10---------10---------10---------9----------*-|| +G:-----11--14-----11--16-----11--14-----11--14-----9--14--------|| +D:--------------------16---------14---------14--------14------*-|| +A:--9----------9----------9----------9----------7---------------|| +E:--------------------------------------------------------------|| + + + + + +e:--------------------------------------12----------------| +B:-----7--14-----7---------7--14-----7--12-----7--14------| +G:-----7--14-----7--16-----7--14-----7---------7--14------| +D:------------------16------------------------------------| +A:--5---------5---------5---------5---------5-------------| +E:--------------------------------------------------------| + + + + +e:--------14--------14--------12-------12--------12------| +B:-----9--14-----9--14-----9--12----9--12-----9--12------| +G:-----9---------9---------9--------9---------9----------| +D:-------------------------------------------------------| +A:--7---------7---------7---------7--------7-------------| +E:-------------------------------------------------------| + + + + + +e:--------12--------------------------------------12------| +B:-----7--12-----7--14-----7---------7--14-----7--12------| +G:-----7---------7--14-----7--16-----7--14-----7----------| +D:----------------------------16--------------------------| +A:--5---------5---------5---------5---------5-------------| +E:--------------------------------------------------------| + + + + + +e:--------14--------14--------16--------16--------16------|| +B:-----9--14-----9--14-----9---------9---------9----------|| +G:-----9---------9---------9--16-----9--16-----9--16------|| +D:--------------------------------------------------------|| +A:--7---------7---------7---------7---------7-------------|| +E:--------------------------------------------------------|| + + + + + +e:----------17----------17----------19----------19----------21------| +B:------14--17------14--17------14----------14----------14----------| +G:------14----------14----------14--19------14--19------14--21------| +D:------------------------------------------------------------------| +A:--12----------12----------12----------12----------12--------------| +E:------------------------------------------------------------------| + + + + + +e:----------14----------14--------15--------15--------15------| +B:------12--14------12--14-----8--15-----8--15-----8--15------| +G:------12----------12---------9---------9---------9----------| +D:------------------------------------------------------------| +A:--10----------10----------7---------7---------7-------------| +E:------------------------------------------------------------| + + + + + +e:----------17----------17----------19----------19----------17------| +B:------14--17------14--17------14----------14----------14--17------| +G:------14----------14----------14--19------14--19------14----------| +D:------------------------------------------------------------------| +A:--12----------12----------12----------12----------12--------------| +E:------------------------------------------------------------------| + + + + + +e:----------14----------14--------15--------15--------15------| +B:------12--14------12--14-----8--15-----8--15-----8--15------| +G:------12----------12---------9---------9---------9----------| +D:------------------------------------------------------------| +A:--10----------10----------7---------7---------7-------------| +E:------------------------------------------------------------| + + + + + +e:----------17----------17----------19----------19----------21------| +B:------14--17------14--17------14----------14----------14----------| +G:------14----------14----------14--19------14--19------14--21------| +D:------------------------------------------------------------------| +A:--12----------12----------12----------12----------12--------------| +E:------------------------------------------------------------------| + + + + + +e:----------14----------14--------15--------15--------15------| +B:------12--14------12--14-----8--15-----8--15-----8--15------| +G:------12----------12---------9---------9---------9----------| +D:------------------------------------------------------------| +A:--10----------10----------7---------7---------7-------------| +E:------------------------------------------------------------| + + + + + +e:---------15---------17---------20---------22---------17------| +B:-----10--15-----10--17-----10--20-----10--22-----10--17------| +G:-----9----------9----------9----------9----------9-----------| +D:-------------------------------------------------------------| +A:--8----------8----------8----------8----------8--------------| +E:-------------------------------------------------------------| + + + + +e:---------20---------20---------17---------17---------17------| +B:-----10--20-----10--20-----10--17-----10--17-----10--17------| +G:-----9----------9----------9----------9----------9-----------| +D:-------------------------------------------------------------| +A:--8----------8----------8----------8----------8--------------| +E:-------------------------------------------------------------| + + + + + +e:------------------------------------------------------------------| +B:------12--17------12--17------12--15------12--15------12--15------| +G:------12--17------12--17------12--16------12--16------12--16------| +D:------------------------------------------------------------------| +A:--10----------10----------10----------10----------10--------------| +E:------------------------------------------------------------------| + + + + + +e:--------------------------------------------------------| +B:-----9--14-----9--14-----9--12-----9--12-----9--12------| +G:-----9--14-----9--14-----9--13-----9--13-----9--13------| +D:--------------------------------------------------------| +A:--7---------7---------7---------7---------7-------------| +E:--------------------------------------------------------| + + + + + +e:------------------------------------------------------------------| +B:------12--17------12--17------12--15------12--15------12--15------| +G:------12--17------12--17------12--16------12--16------12--16------| +D:------------------------------------------------------------------| +A:--10----------10----------10----------10----------10--------------| +E:------------------------------------------------------------------| + + + + + +e:--------------------------------------------------------|| +B:-----9--14-----9--14-----9--12-----9--12-----9--12------|| +G:-----9--14-----9--14-----9--13-----9--13-----9--13------|| +D:--------------------------------------------------------|| +A:--7---------7---------7---------7---------7-------------|| +E:--------------------------------------------------------|| + + + + + +e:----------------------------------------------------------| +B:-*--------14--------------------------------------14------| +G:-------6--14-----6--16-----6--14-----6--16-----6--14------| +D:-*-----7---------7--16-----7--14-----7--16-----7----------| +A:----------------------------------------------------------| +E:----5---------5---------5---------5---------5-------------| + + + + + +e:--------------------------------------------------------| +B:--------14--------16------------------------------------| +G:-----6--14-----6--16-----6--14-----6--14-----9--14------| +D:-----7---------7---------7--14-----7--14-----9--14------| +A:--------------------------------------------------------| +E:--5---------5---------5---------5---------9-------------| + + + + + +e:-------------------------------------------------------------| +B:-----10--14-----10---------10---------10---------10--14------| +G:-----11--14-----11--16-----11--14-----11--16-----11--14------| +D:--------------------16---------14---------16-----------------| +A:--9----------9----------9----------9----------9--------------| +E:-------------------------------------------------------------| + + + + + +e:--------------------------------------------------------------|| +B:-----10--14-----10---------10---------10---------9----------*-|| +G:-----11--14-----11--16-----11--14-----11--14-----9--14--------|| +D:--------------------16---------14---------14--------14------*-|| +A:--9----------9----------9----------9----------7---------------|| +E:--------------------------------------------------------------|| + + + + + +e:--------------------------------------12----------------| +B:-----7--14-----7---------7--14-----7--12-----7--14------| +G:-----7--14-----7--16-----7--14-----7---------7--14------| +D:------------------16------------------------------------| +A:--5---------5---------5---------5---------5-------------| +E:--------------------------------------------------------| + + + + + +e:--------14--------14--------12--------12--------12------| +B:-----9--14-----9--14-----9--12-----9--12-----9--12------| +G:-----9---------9---------9---------9---------9----------| +D:--------------------------------------------------------| +A:--7---------7---------7---------7---------7-------------| +E:--------------------------------------------------------| + + + + + +e:--------12--------------------------------------12------| +B:-----7--12-----7--14-----7---------7--14-----7--12------| +G:-----7---------7--14-----7--16-----7--14-----7----------| +D:----------------------------16--------------------------| +A:--5---------5---------5---------5---------5-------------| +E:--------------------------------------------------------| + + + + + +e:--------14--------14--------16--------16--------16------| +B:-----9--14-----9--14-----9---------9---------9----------| +G:-----9---------9---------9--16-----9--16-----9--16------| +D:--------------------------------------------------------| +A:--7---------7---------7---------7---------7-------------| +E:--------------------------------------------------------| + + + + + +e:---------17---------17---------17---------17---------14------| +B:-----10--17-----10--17-----10--17-----10--17-----10--14------| +G:-----11---------11---------11---------11---------11----------| +D:-------------------------------------------------------------| +A:--9----------9----------9----------9----------9--------------| +E:-------------------------------------------------------------| + + + + + +e:-----------------------------------------------------12------| +B:-----10--16-----10--16-----10--16-----10--16-----10--12------| +G:-----11--16-----11--16-----11--16-----11--16-----11----------| +D:-------------------------------------------------------------| +A:--9----------9----------9----------9----------9--------------| +E:-------------------------------------------------------------| + + + + + +e:--------------------------------------------------------------| +B:-----10---------10---------10---------10---------10-----------| +G:-----11--14-----11--14-----11--16-----11--16-----11--16-------| +D:---------14---------14---------16---------16---------16-------| +A:--9----------9----------9----------9----------9---------------| +E:--------------------------------------------------------------| + + + + + +e:------------------------------------------------------------|| +B:-------------------------------------------------9----------|| +G:-----11---------11---------11---------11---------9--14------|| +D:---------16---------16---------16---------16--------14------|| +A:--9----------9----------9----------9----------7-------------|| +E:------------------------------------------------------------|| + + + + + +e:--------------------------------------------------------| +B:--------14--------------------------------------14------| +G:-----6--14-----6--16-----6--14-----6--16-----6--14------| +D:-----7---------7--16-----7--14-----7--16-----7----------| +A:--------------------------------------------------------| +E:--5---------5---------5---------5---------5-------------| + + + + + +e:--------------------------------------------------------------| +B:--------14----------------------------------------------------| +G:-----4--14-----4--16------11--14------11--14------11--14------| +D:-----5---------5--16----------14----------14----------14------| +A:--------------------------12----------12----------12----------| +E:--3---------3---------10----------10----------10--------------| + + + + + +e:--------------------------------------------------------| +B:--------14----------------------------------------------| +G:-----6--14-----6--16-----6--14-----6--16-----6--14------| +D:-----7---------7--16-----7--14-----7--16-----7--14------| +A:--------------------------------------------------------| +E:--5---------5---------5---------5---------5-------------| + + + + +e:--------------------------------------------------------------| +B:--------14----------------------------------------------------| +G:-----4--14-----4--16------11--14------11----------11----------| +D:-----5---------5--16----------14----------14----------16------| +A:--------------------------12----------12--14------12--16------| +E:--3---------3---------10----------10----------10--------------| + + + + + +e:--------------------------------------------------------| +B:--------14--------------------------------------14------| +G:-----6--14-----6--16-----6--14-----6--16-----6--14------| +D:-----7---------7--16-----7--14-----7--16-----7----------| +A:--------------------------------------------------------| +E:--5---------5---------5---------5---------5-------------| + + + + + +e:--------------------------------------------------------------| +B:--------14----------------------------------------------------| +G:-----4--14-----4--16------11--14------11--14------11--14------| +D:-----5---------5--16----------14----------14----------14------| +A:--------------------------12----------12----------12----------| +E:--3---------3---------10----------10----------10--------------| + + + + + +e:--------------------------------------------------------| +B:--------------------------------------------------------| +G:-----9--14-----9--14-----9--14-----9--14-----9--14------| +D:-----9--14-----9--14-----9--14-----9--14-----9--14------| +A:--7---------7---------7---------7---------7-------------| +E:--------------------------------------------------------| + + + + + +e:--------------------------------------------------------| +B:--------------------------------------------------------| +G:-----9--13-----9--13-----9--13-----9--13-----9--13------| +D:-----9--14-----9--14-----9--14-----9--14-----9--14------| +A:--7---------7---------7---------7---------7-------------| +E:--------------------------------------------------------| + + + + + +e:----------------------------------------------------------| +B:-*--------15--------15--------15--------15--------15------| +G:-------4--14-----4--14-----4--14-----4--14-----4--14------| +D:-*-----5---------5---------5---------5---------5----------| +A:----------------------------------------------------------| +E:----3---------3---------3---------3---------3-------------| + + + + + +e:--------------------------------------------------------| +B:--------14--------14--------14--------14--------14------| +G:-----6--14-----6--14-----6--14-----6--14-----6--14------| +D:-----7---------7---------7---------7---------7----------| +A:--------------------------------------------------------| +E:--5---------5---------5---------5---------5-------------| + + + + + +e:--------------------------------------------------------| +B:-----3---------3---------3---------3---------3----------| +G:-----4--16-----4--16-----4--16-----4--16-----4--16------| +D:--------16--------16--------16--------16--------16------| +A:--------------------------------------------------------| +E:--3---------3---------3---------3---------3-------------| + + + + + +e:---------------------------------------------------|| +B:-------------------------------------------------*-|| +G:-----6--14-----6--14-----6--14-----6--14-----------|| +D:-----7--14-----7--14-----7--14-----7--14---------*-|| +A:---------------------------------------------------|| +E:--5---------5---------5---------5---------5--------|| + + + + diff --git a/guitar/tabs/Joe Satriani/Distortionless Satch.prj b/guitar/tabs/Joe Satriani/Distortionless Satch.prj new file mode 100644 index 0000000..0070ad7 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Distortionless Satch.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=Distortionless Satch.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16) +TEMPO=651578 diff --git a/guitar/tabs/Joe Satriani/Distortionless Satch.tab b/guitar/tabs/Joe Satriani/Distortionless Satch.tab new file mode 100644 index 0000000..32b1b86 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Distortionless Satch.tab @@ -0,0 +1,23 @@ + +Distortionless Satch + + +This is the Intro To tears in the Rain of The Extremist album +by Satriani. Its erally good to get your fingers warmed up and +stretched. I think it sounds almost like an opera kinda of song +but its really cool, even if it doesn't say opera to you ! + + + + +Key = Am + +E-------0-------------0-------------0-------------0---------- +B-----3---3---------3---3---------6---6---------3---3-------- +G---5-------5-----4-------4-----7-------7-----5-------5------ +D-7-------------3-------------6-------------7---------------- +A------------------------------------------------------------ +E------------------------------------------------------------ + + + diff --git a/guitar/tabs/Joe Satriani/House Full of Bullets.prj b/guitar/tabs/Joe Satriani/House Full of Bullets.prj new file mode 100644 index 0000000..c88def7 --- /dev/null +++ b/guitar/tabs/Joe Satriani/House Full of Bullets.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=House Full of Bullets_imp.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16)(794,16)(795,16)(796,16)(797,16)(798,16)(799,16)(800,16)(801,16)(802,16)(803,16)(804,16)(805,16)(806,16)(807,16)(808,16)(809,16)(810,16)(811,16)(812,16)(813,16)(814,16)(815,16)(816,16)(817,16)(818,16)(819,16)(820,16)(821,16)(822,16)(823,16)(824,16)(825,16)(826,16)(827,16)(828,16)(829,16)(830,16)(831,16)(832,16)(833,16)(834,16)(835,16)(836,16)(837,16)(838,16)(839,16)(840,16)(841,16)(842,16)(843,16)(844,16)(845,16)(846,16)(847,16)(848,16)(849,16)(850,16)(851,16)(852,16)(853,16)(854,16)(855,16)(856,16)(857,16)(858,16)(859,16)(860,16)(861,16)(862,16) diff --git a/guitar/tabs/Joe Satriani/House Full of Bullets.tab b/guitar/tabs/Joe Satriani/House Full of Bullets.tab new file mode 100644 index 0000000..5e117d5 --- /dev/null +++ b/guitar/tabs/Joe Satriani/House Full of Bullets.tab @@ -0,0 +1,651 @@ +House Full of Bullets by Joe Satriani from Crystal Planet +TAB'd by Frank A. Taylor - mork@sonic.net + +Check out my Satriani TAB page, dozens of TAB's! +http://www.sonic.net/mork/satriani.html + +Frank. + +House Full of Bullets + +Repeat first bar 4 times + ~~~~ P P P P +E|------------------------------------------------| +B|------------------------------------------------| +G|------------------------------------------------| +D|------------------------------------------------| +A|------------------------------------------------| +E|--2-----0----2--0----2---2--0--2--0----0--2--0--| + + + ~~~~ P P P P +E|------------------------------------------------| +B|------------------------------------------------| +G|------------------------------------------------| +D|------------------------------------------------| +A|--2-----0----2--0----2---2--0--2--0----0--2--0--| +E|------------------------------------------------| + + + ~~~~ P P P P +E|----------------------------------------------------| +B|----------------------------------------------------| +G|----------------------------------------------------| +D|----------------------------------------------------| +A|--2-----0----2--0----2---2>(3)>(2)--0---2--0--------| +E|----------------------------------------------2--0--| + + + ~~~~ P P P P +E|------------------------------------------------| +B|------------------------------------------------| +G|------------------------------------------------| +D|------------------------------------------------| +A|------------------------------------------------| +E|--2-----0----2--0----2---2--0--2--0----0--2--0--| + + + ~~~~ P P P P +E|------------------------------------------------| +B|------------------------------------------------| +G|------------------------------------------------| +D|------------------------------------------------| +A|------------------------------------------------| +E|--2-----0----2--0----2---2--0--2--0----0--2--0--| + + + ~~~~ P P P +E|------------------------------------------------| +B|------------------------------------------------| +G|------------------------------------------------| +D|--4-----2----4--2----4---4--2--4--2----2--4--0--| +A|------------------------------------------------| +E|------------------------------------------------| + + + ~~~~ P P P P +E|----------------------------------------------------| +B|----------------------------------------------------| +G|----------------------------------------------------| +D|----------------------------------------------------| +A|--2-----0----2--0----2---2>(3)>(2)--0---2--0--------| +E|----------------------------------------------2--0--| + + + ~~~~ P P P P +E|------------------------------------------------| +B|------------------------------------------------| +G|------------------------------------------------| +D|------------------------------------------------| +A|------------------------------------------------| +E|--2-----0----2--0----2---2--0--2--0----0--2--0--| + + + ~~~~ P +E|-----------------------------| +B|-----------------------------| +G|-----------------------------| +D|-----------------------------| +A|-----------------------------| +E|--2-----0----2--0----2/------| + ^ + Slide off neck + + P.M.-----------------------------| + P +E|---------------------------------------------| +B|--4----2-------------------------------------| +G|--2----2-------------------------------------| +D|---------------------------------------------| +A|---------------------------------------------| +E|------------0--2--0--2--2--0--2--0--0--2--0--| + + +P.M.-----------------| + ~~~~ P +E|------------------------------------| +B|----------------------X--2---4---5--| +G|----------------------X--2---2---2--| +D|------------------------------------| +A|------------------------------------| +E|--2-----0----2--0--2----------------| + + + P.M.-----------------------------| + P +E|---------------------------------------------| +B|--4----2-------------------------------------| +G|--2----2-------------------------------------| +D|---------------------------------------------| +A|---------------------------------------------| +E|------------0--2--0--2--2--0--2--0--0--2--0--| + + +P.M.-----------------| + ~~~~ P +E|------------------------------------| +B|----------------------X--2---4---5--| +G|----------------------X--2---2---2--| +D|------------------------------------| +A|------------------------------------| +E|--2-----0----2--0--2----------------| + + + P.M.-----------------------------| + P +E|---------------------------------------------| +B|--4----5-------------------------------------| +G|--2----2-------------------------------------| +D|---------------------------------------------| +A|------------0--2--0--2--2--0--2--0--0--2--0--| +E|---------------------------------------------| + + + ~~~~ P +E|------------------------------------| +B|----------------------X--2---4---5--| +G|----------------------X--2---2---2--| +D|------------------------------------| +A|--2-----0----2--0--2----------------| +E|------------------------------------| + + + P.M.-----------------------------| + P +E|---------------------------------------------| +B|--4----2-------------------------------------| +G|--2----2-------------------------------------| +D|---------------------------------------------| +A|---------------------------------------------| +E|------------0--2--0--2--2--0--2--0--0--2--0--| + + + ~~~~ P +E|------------------------------------| +B|----------------------X--2---4---5--| +G|----------------------X--2---2---2--| +D|------------------------------------| +A|------------------------------------| +E|--2-----0----2--0--2----------------| + + + P P P +E|-------2-----------------------------------| +B|--5----2-----------------------------------| +G|--4----------------------------------------| +D|-------------------------------------------| +A|------------4--2--4---4--2--4--2--2--4--0--| +E|-------------------------------------------| + + + ~~~~ P +E|------------------------------------| +B|----------------------X--2---4---5--| +G|----------------------X--2---2---2--| +D|------------------------------------| +A|--2-----0----2--0--2----------------| +E|------------------------------------| + + + P P P P +E|---------------------------------------------| +B|--4----2-------------------------------------| +G|--2----2-------------------------------------| +D|---------------------------------------------| +A|---------------------------------------------| +E|------------0--2--0--2--2--0--2--0--0--2--0--| + + + ~~~~ P +E|--------------------------------| +B|--------------------------------| +G|--------------------------------| +D|-----------------------------4--| +A|--------------------------------| +E|--2-----0----2--0----2/---------| + ^ + Slide off neck + +This next parts proves the hardest to work out for +me personally, what the tab book I have says is wrong +and what I see Joe play on stage is something else: This +is what I get by with, any ideas: mail me! + +Next bar played 11 times + +E|--7---7-------5----5--------5------------| +B|--4---4-------5----5--------5---7--5-----| +G|-----------4----------4---------6--4-----| +D|------------------------4-------------4--| +A|-----------------------------------------| +E|-----------------------------------------| + + +E|--7----7-------5----------------| +B|--4----4-------5----------------| +G|------------4-------------------| +D|--------------------------------| +A|--------------------------------| +E|----------------------X/--------| + Pick Slide + +Solo + + H H P H P H P +E|-----------------------------------------------| +B|--5--7---5--7----(7)--5------------------------| +G|---------------------------6--4----------------| +D|-----------------------------------7--4--------| +A|-----------------------------------------------| +E|-----------------------------------------------| + ^ ^ + These are left hand hammer-on's + + H H P P H H P P H H P P +E|-------------------------------------------------------------------- +B|-------12---9--10--12--10--9/10--12--14----12--10/9--10--12--10--9-- +G|--6/9--------------------------------------------------------------- +D|-------------------------------------------------------------------- +A|-------------------------------------------------------------------- +E|-------------------------------------------------------------------- + + P H H P P H H P P H P +E------------------------|----------------------------------------- +B------------------------|----------------------------------------- +G--11--8--9--11----9--8--|--(8)/9--11--13----11--9/8--9--8/6----8-- +D------------------------|----------------------------------------- +A------------------------|----------------------------------------- +E------------------------|----------------------------------------- + + H P H H P P P H +E----------------------------------------------|------------ +B----------------------------------------------|------------ +G--6--8--6-----6-------------------------------|------------ +D-----------9-----9--6/7--9--11--9--7----------|---------9-- +A--------------------------------------11--7/--|--/6--7----- +E----------------------------------------------|------------ + + H H P P ~~~~ P P +E--------------------------------------------4--9--|--4-------- +B------------------------------------------X-------|-----5--4-- +G----------------------------------------X---------|----------- +D--6--7--9--7--6-----------------------------------|----------- +A-----------------9--/12/9----(9)--/2--------------|----------- +E--------------------------------------------------|----------- + Rake + + P P H P P H P P +E-----4-----------7---5--4/2---4--5--4--2-----2--------------| +B--7-----7--5--4---------------------------5-----4--5--4--2--| +G------------------------------------------------------------| +D------------------------------------------------------------| +A------------------------------------------------------------| +E------------------------------------------------------------| + + H P +E|--------------------------------------------------| +B|-----2--4--2-----2--------------------------------| +G|--4-----------4-----4--2/1------------------------| +D|----------------------------------7-------9/11/9--| +A|-------------------------------------9------------| +E|--------------------------------------------------| + + +E|-----------------------------------------------------------------| +B|-----------------------------------------------------------------| +G|-----------------------------------------------------------------| +D|--(9)/-14-/-13-/-11-/-13-/-14-/-16-/-13-/-14-/-11-/-13-/-11-/-9--| +A|-----------------------------------------------------------------| +E|-----------------------------------------------------------------| + ** Spaced this out a bit more to make it more readable :) + + sh~~~~~~~~~~~~~~~~~ +E|--------------------------------------------| +B|--------------------------------------------| +G|--------------------------------11--11--13--| +D|--/11/7----7-----7-----7-----9--------------| +A|--------------------------------------------| +E|--------------------------------------------| + + sh P +E|--12----------------------------------------------------------| +B|------14--13--12----13>(14)>(13)--12-------12----12----12-----| +G|----------------------------------------14----14----14----14--| +D|--------------------------------------------------------------| +A|--------------------------------------------------------------| +E|--------------------------------------------------------------| + + +E|---------------------------------------------------------------------| +B|--12----12----12----12----12----12----12----12----12--12--12--12-----| +G|-----14----14----14----14----14----14----------14----------------14--| +D|---------------------------------------------------------------------| +A|---------------------------------------------------------------------| +E|---------------------------------------------------------------------| + + ~~~~ ~~~~~~ +E|---------------------------------------------------| +B|---------------------------------------------------| +G|--11----11--14------11------9--11-------11--9--11--| +D|----------------11-----------------9--X------------| +A|---------------------------------------------------| +E|---------------------------------------------------| + Rake + + ~~~~~~ H H +E|-------------9----------------------------|--9--11---9--11-- +B|--12-----------9---12---------------------|----------------- +G|------11--9------9-----11--9--11------11--|----------------- +D|------------------------------------------|----------------- +A|------------------------------------------|----------------- +E|------------------------------------------|----------------- + + + H P H P H P P H P H +E--9--11--9------------------------------------------------------------| +B---------------------10---9--10--9------------------------------------| +G-----------9--11--9------------------------11---9--11--9--------------| +D------------------------------------11--9-----------------11--9---11--| +A----------------------------------------------------------------------| +E----------------------------------------------------------------------| + + + P H H ~~~~ H H sh +E|-------------------------------------------------------------------| +B|-----------------------------------------------------------14------| +G|-------------------------------------------------------13----------| +D|--9--9------9-------------------------11--/13--14--16----------16--| +A|--------12-----12--11---9/11--12--14-------------------------------| +E|-------------------------------------------------------------------| + + ~~~~~~ ~~~~ +E|---------------------------------------------12------| +B|----------------------------------------/13------14--| +G|--13--14>(16)>(14)--14------14----14/9---------------| +D|-----------------------------------------------------| +A|-----------------------------------------------------| +E|-----------------------------------------------------| + + +E|----------14-------------12-----------------------------------------| +B|--13--12------13>(13.5)------14--13--12-----------------------------| +G|-----------------------------------------14--11----14----11---------| +D|------------------------------------------------13----13----11--14--| +A|--------------------------------------------------------------------| +E|--------------------------------------------------------------------| + ^Quarter tone bend + + ~~~~~~ +E|------------------------------------------------| +B|----------------------------------/16>(19)------| +G|--------------11------14------11----------------| +D|--13--13----------11------13--------------------| +A|------------------------------------------------| +E|------------------------------------------------| + ^ + slow bend! + sh ~~~~~~ +E|--14----------------------------------14-----------------| +B|------17>(19)---17>(19)---17>(19)---------14---/19>(22)--| +G|---------------------------------------------------------| +D|---------------------------------------------------------| +A|---------------------------------------------------------| +E|---------------------------------------------------------| + + ~~~~~ +E|------------------------x---x---x---17>(19)>(17)>(19)--| +B|--(22)--(22)----(22)/---x---x---x----------------------| +G|------------------------x---x---x----------------------| +D|-------------------------------------------------------| +A|-------------------------------------------------------| +E|-------------------------------------------------------| + ^ + bend, lower and rebend + + ~~~~~~ +E|--19>(21)---19>(21)----(21)-----x---x---x---x---21>(24)----| +B|--------------------------------x---x---x---x--------------| +G|--------------------------------x---x---x---x--------------| +D|-----------------------------------------------------------| +A|-----------------------------------------------------------| +E|-----------------------------------------------------------| + + ~~~~ +E|--21--20--19--17--19----------------------14--| +B|----------------------16----(16)/----/16------| +G|----------------------------------------------| +D|----------------------------------------------| +A|----------------------------------------------| +E|----------------------------------------------| + + P P P +E|--------------------------------------------------------------- +B|--17--16--15--14---16--14------14------------------------------ +G|---------------------------16------17--16--14------16------14-- +D|-----------------------------------------------16------16------ +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + P ~~~~ P H P +E-------------------------------------------|------------------------ +B-------------------------------------------|------------------------ +G-------------------------------------------|------------------------ +D--16--14/13---14---13/11---13--11--13--11--|--9--11------9---------- +A-------------------------------------------|---------12-----11--12-- +E-------------------------------------------|------------------------ + + ~~~~~~ ~~~~~ ~~~~ P +E----------------|------------------------------------------| +B----------------|------------------------------------------| +G----------------|------------------------------------------| +D--9/12/7---9/4--|--4-------4------4----(4)/--------13--11--| +A----------------|------------------------------------------| +E----------------|------------------------------------------| + + +E|---------------------------------------------------------------| +B|--14-14----------14-14----------14-14----------14-14-----------| +G|--14-14----------14-14----------14-14----------14-14-----------| +D|--------11-12-11-------11-13-11-------11-13-11-------11-13-11--| +A|---------------------------------------------------------------| +E|---------------------------------------------------------------| + + +E|-----------------------------------------------------------------| +B|--14-14----------14-14-------------------------------------------| +G|--14-14----------14-14--11----12-13-----11/9---11----------------| +D|--------11-13-11-----------14-------14--11/9---11---/11--11--11--| +A|-----------------------------------------------------------------| +E|-----------------------------------------------------------------| + + +E|--------------------------------------------------------------| +B|--14-14----------14-14----------14-14------------14-14--------| +G|--14-14----------14-14----------14-14--11----11--14-14--------| +D|--------11-13-11-------11-13-11-----------14-----------11-----| +A|----------------------------------------------------------14--| +E|--------------------------------------------------------------| + + P ~~~~ +E|-----------------------------------------------------14---------14--| +B|------------------14----------16-14----16--------15-----17>(19)-----| +G|---------------16-14--16--17--16-14----16--14----16-----------------| +D|--/14--12--14--16-------------------16------------------------------| +A|--------------------------------------------------------------------| +E|--------------------------------------------------------------------| + + ~~~~ ~~~~~~ H +E|-----------------14----16------14/--------------| +B|--17--(17)>19-------14------------------16--17--| +G|------------------------------------------------| +D|------------------------------------------------| +A|------------------------------------------------| +E|------------------------------------------------| + ^ + prebent + + P H P H +E|-----------------------------------------------------------7/--| +B|--16--17--16/12---14--16---12--14------12--12/5--7--9--10------| +G|-----------------------------------14--------------------------| +D|---------------------------------------------------------------| +A|---------------------------------------------------------------| +E|---------------------------------------------------------------| + + sh---} H P H P H P P P +E|--/4--7--5---4/2--4--5--4--2-------------------------------------| +B|------------------------------5--2---4--5--4--2---2--4-----------| +G|------------------------------------------------4----------4--2--| +D|-----------------------------------------------------------------| +A|-----------------------------------------------------------------| +E|-----------------------------------------------------------------| + + P H H P P H H P P P P H H H H P P +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|--1--2--4--2--1/2--4--6--4--2-----------------------2--4--6--4--2-- +D|-------------------------------6--4--2--4--6---2------------------- +A|------------------------------------------------------------------- +E|------------------------------------------------------------------- + + H H P P H H P P +E-----------------------------------------| +B-----------------------------------------| +G-----2--4--6--4--2-----2--4--6--4--2-----| +D--6-----------------6-----------------6--| +A-----------------------------------------| +E-----------------------------------------| + + + H H P P H H P P H H P P +E|-------------------------------------------------------- +B|-------------------------------------------------------- +G|--2--4--6--4--2-----2--4--6--4--2-----2--4--6--4--2----- +D|-----------------6-----------------6-----------------6-- +A|-------------------------------------------------------- +E|-------------------------------------------------------- + + + H H P P H H H H H H +E----------------------------------------------------| +B----------------------------------------------------| +G----------------------------------------------------| +D--2--4--6--4--2-------------------------------------| +A-----------------6---2--4--6---2--4--6---4/6--7--9--| +E----------------------------------------------------| + + H H H H P P H H H H P P +E|-----------------------------------------------------------------------| +B|-----------------------------------------------------------------------| +G|---------------------------------8--9--11--9--8------------------------| +D|----------6--7--9--7--6/7--9--11----------------11--7/9---11--9/7---9--| +A|--6--7--9--------------------------------------------------------------| +E|-----------------------------------------------------------------------| + + ~~~~~ ~~~~~ ~~~~~ +E|--------------------------------------------| +B|--------------------------------------------| +G|-------------------------------------9------| +D|----------------------7-----7--9/11---------| +A|--7--9------7--9---------9------------------| +E|--------------------------------------------| + + sh------| + ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ +E|---------------------------------------------------| +B|----------------------------------------------/14--| +G|--9-----9-----9-----9-----9-----(9)/---------------| +D|---------------------------------------------------| +A|---------------------------------------------------| +E|---------------------------------------------------| + +The next 11 bars with two note chords are all tremolo picked, +which means strum them fast as you can :) + +E|--12------|--/12------/14----|--/12------|--/12------/12----13----| +B|--14------|--/14------/16----|--/14------|--/14------/14----15----| +G|----------|------------------|-----------|------------------------| +D|----------|------------------|-----------|------------------------| +A|----------|------------------|-----------|------------------------| +E|----------|-------------------------------------------------------| + + +E|--14--------14--|--(14)-----14-----(14)/--|--/17-----|--(17)----19----20--| +B|--16--------17--|--(17)-----16-----(16)/--|--/17-----|--(17)----19----19--| +G|----------------|-------------------------|----------|--------------------| +D|----------------|-------------------------|----------|--------------------| +A|----------------|-------------------------|----------|--------------------| +E|----------------|-------------------------|----------|--------------------| + + +E|--21------20----|--19------|--17------|--------------------------------- +B|--19------19----|--19------|--17------|--19/---------------------------- +G|----------------|----------|----------|-------14/----------------------- +D|----------------|----------|----------|------------X/------------------ +A|----------------|----------|----------|----------------X/--------------- +E|----------------|----------|----------|--------------------X/---------- + ^ + various hand slides down the fretboard + + +The rest of the song is pretty much repeats of what I had before with three +notable 'fills' if you like which I have here. You should be able to hear +where they fit in :) + +Fill 1 + sh ~~~~~~ +E|--17>(19)>(17)--14-----------14----------------------| +B|--------------------17>(19)------17>(19)-------------| +G|-----------------------------------------------------| +D|-----------------------------------------------------| +A------------------------------------------------------| +E-----------------------------------------------X/-----| + +Fill 2 + ~~~~~~~~~~~~ ~~~~ +E|----------|----------------------------------5--------| +B|----------|----------------------5-----7--X-----X--X--| +G|----------|---------------2--/6-----------------X--X--| +D|------2---|--(2)----4--X------------------------------| +A|--/4------|-------------------------------------------| +E|----------|-------------------------------------------| + + +Fill 3 + + sh------------------------| + ~~~~~~ ~~~~~ ~~~~~ ~~~~~~~~ +E|------------|---------------------------------------| +B|------------|---------------------------------------| +G|--14>(16)>--|--(14)--14-----14-----14-----14--------| +D|------------|---------------------------------------| +A|------------|---------------------------------------| +E|------------|---------------------------------------| + slow release + + sh----------------| + ~~~~~ ~~~~~ ~~~~ ~~~~~ +E|----------------------------------------| +B|----------------------------------------| +G|--14-----14-----14----14------14--------| +D|----------------------------------------| +A|----------------------------------------| +E|------------------------------------X/--| + + +Well, there you go! Rocking song! gets those feet tapping :) + +Hope you were helped somewhat by this tab and my others from +my page, takes many hours to get each one up on the page so if +you liked it, send me thanks and comments - tell Joe to check it +out if you know him *grin* + +All my TAB's are available at my Satch TAB site which has well over +75 different Satriani TAB's! More than anywhere else! + +http://www.sonic.net/mork/satriani.html + +or mail me at mork@sonic.net and say hi :) + +Mork/Frank + diff --git a/guitar/tabs/Joe Satriani/House Full of Bullets_imp.tab b/guitar/tabs/Joe Satriani/House Full of Bullets_imp.tab new file mode 100644 index 0000000..43b9246 --- /dev/null +++ b/guitar/tabs/Joe Satriani/House Full of Bullets_imp.tab @@ -0,0 +1,253 @@ +%TabMaster v1.01a% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|-------------------------2-0-2-0-2-2-0-2-0-0-2-0-2-0-2-0-2-2-3- +E|-2-0-2-0-2-2-0-2-0-0-2-0--------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-------------------------------------------------------------4- +A|-2-0-2-0------------------------------------------------------- +E|---------2-0-2-0-2-0-2-2-0-2-0-0-2-0-2-0-2-0-2-2-0-2-0-0-2-0--- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-2-4-2-4-4-2-4-2-2-4-0----------------------------------------- +A|-----------------------2-0-2-0-2-2-3-2-0-2-0------------------- +E|---------------------------------------------2-0-2-0-2-0-2-2-0- + + + +E|--------------------------------------------------------------- +B|---------------------4-2---------------------------------2-4-5- +G|---------------------2-2---------------------------------2-2-2- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|-2-0-0-2-0-2-0-2-0-2-----0-2-0-2-2-0-2-0-0-2-0-2-0-2-0-2------- + + + +E|--------------------------------------------------------------- +B|-4-2---------------------------------2-4-5-4-5----------------- +G|-2-2---------------------------------2-2-2-2-2----------------- +D|--------------------------------------------------------------- +A|-----------------------------------------------0-2-0-2-2-0-2-0- +E|-----0-2-0-2-2-0-2-0-0-2-0-2-0-2-0-2--------------------------- + + + +E|--------------------------------------------------------------- +B|-----------------2-4-5-4-2---------------------------------2-4- +G|-----------------2-2-2-2-2---------------------------------2-2- +D|--------------------------------------------------------------- +A|-0-2-0-2-0-2-0-2----------------------------------------------- +E|---------------------------0-2-0-2-2-0-2-0-0-2-0-2-0-2-0-2----- + + + +E|-----2--------------------------------------------------------- +B|-5-5-2-------------------------------2-4-5-4-2----------------- +G|-2-4---------------------------------2-2-2-2-2----------------- +D|--------------------------------------------------------------- +A|-------4-2-4-4-2-4-2-2-4-0-2-0-2-0-2--------------------------- +E|-----------------------------------------------0-2-0-2-2-0-2-0- + + + +E|-------------------7-7---5-5-----5-------7-7---5--------------- +B|-------------------4-4---5-5-----5-7-5---4-4---5-5-7-5-7-7-5--- +G|-----------------------4-----4-----6-4-------4---------------6- +D|-----------------4-------------4-------4----------------------- +A|--------------------------------------------------------------- +E|-0-2-0-2-0-2-0-2----------------------------------------------- + + + +E|----------------------------------------------------------------------------------- +B|------------12-9-10-12-10-9-s10-12-14-12-10-s9-10-12-10-9-------------------------- +G|-4-----6-s9-----------------------------------------------11-8-9-11-9-8-8-s9-11-13- +D|---7-4----------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------ +B|------------------------------------------------------------------------ +G|-11-9-s8-9-8-s6-8-6-8-6---6--------------------------------------------- +D|------------------------9---9-6-s7-9-11-9-7-----------9-6-7-9-7-6------- +A|--------------------------------------------11-7-s6-7-------------9-s12- +E|------------------------------------------------------------------------ + + + +E|---------4-9-4-------4-------7-5-4-s2-4-5-4-2---2----------------- +B|---------------5-4-7---7-5-4------------------5---4-5-4-2---2-4-2- +G|----------------------------------------------------------4------- +D|------------------------------------------------------------------ +A|-s9-9-s2---------------------------------------------------------- +E|------------------------------------------------------------------ + + + +E|----------------------------------------------------------------------------------- +B|---2------------------------------------------------------------------------------- +G|-4---4-2-s1------------------------------------------------------------------11-11- +D|------------7---9-s11-s9-9-14-13-11-13-14-16-13-14-11-13-11-9-s11-s7-7-7-7-9------- +A|--------------9-------------------------------------------------------------------- +E|----------------------------------------------------------------------------------- + + + +E|----12---------------------------------------------------------------------------------------- +B|-------14-13-12-13-14-13-12----12----12----12----12----12----12----12----12----12----12-12---- +G|-13-------------------------14----14----14----14----14----14----14----14----14----14-------14- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------9-------------------9-11-9-11- +B|-12-12-12-12----------------------------------12--------9---12---------------------- +G|-------------14-11-11-14----11-9-11---11-9-11----11-9-----9----11-9-11-11----------- +D|-------------------------11---------9----------------------------------------------- +A|------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------ + + + +E|-9-11-9--------------------------------------------------------------------------- +B|---------------10-9-10-9---------------------------------------------------------- +G|--------9-11-9----------------11-9-11-9------------------------------------------- +D|-------------------------11-9-----------11-9-11-9-9----9-------------------11-s13- +A|----------------------------------------------------12---12-11-9-s11-12-14-------- +E|---------------------------------------------------------------------------------- + + + +E|--------------------------------------------12----------14---------12------------------------- +B|----------14----------------------------s13----14-13-12----13-13-5----14-13-12---------------- +G|-------13-------13-14-16-14-14-14-14-s9----------------------------------------14-11----14---- +D|-14-16-------16----------------------------------------------------------------------13----13- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|--------------------------------------14-------------------14--------------------17-19-17-19-19- +B|-------------------------------s16-19----17-19-17-19-17-19----14-s19-22-22-22-22---------------- +G|-11-------------11----14----11------------------------------------------------------------------ +D|----11-14-13-13----11----13--------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------ + + + +E|-21-19-21-21-21-24-21-20-19-17-19-----------14------------------------------------------------- +B|----------------------------------16-16-s16----17-16-15-14-16-14----14------------------------- +G|-----------------------------------------------------------------16----17-16-14----16----14---- +D|--------------------------------------------------------------------------------16----16----16- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------- +B|--------------------------------------------------------------------------14-14---------- +G|--------------------------------------------------------------------------14-14---------- +D|-14-s13-14-13-s11-13-11-13-11-9-11----9-------9-s12-s7-9-s4-4-4-4-4-13-11-------11-12-11- +A|-----------------------------------12---11-12-------------------------------------------- +E|----------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------------- +B|-14-14----------14-14----------14-14----------14-14----------14-14----------------------------- +G|-14-14----------14-14----------14-14----------14-14----------14-14-11----12-13----11-s9-11----- +D|-------11-13-11-------11-13-11-------11-13-11-------11-13-11----------14-------14-11-s9-11-s11- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------------- +B|-------14-14----------14-14----------14-14----------14-14--------------------14-------16-14---- +G|-------14-14----------14-14----------14-14-11----11-14-14-----------------16-14-16-17-16-14---- +D|-11-11-------11-13-11-------11-13-11----------14----------11----s14-12-14-16----------------16- +A|-------------------------------------------------------------14-------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|----------14-------14----------14----16-14--------------------------------------------------- +B|-16----15----17-19----17-17-19----14-------16-17-16-17-16-s12-14-16-12-14----12-12-s5-7-9-10- +G|-16-14-16-----------------------------------------------------------------14----------------- +D|--------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------- + + + +E|-7-s4-7-5-4-s2-4-5-4-2-------------------------------------------- +B|-----------------------5-2-4-5-4-2---2-4-------------------------- +G|-----------------------------------4-----4-2-1-2-4-2-1-s2-4-6-4-2- +D|------------------------------------------------------------------ +A|------------------------------------------------------------------ +E|------------------------------------------------------------------ + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------------2-4-6-4-2---2-4-6-4-2---2-4-6-4-2---2-4-6-4-2---2- +D|-6-4-2-4-6-2-----------6-----------6-----------6-----------6--- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|-4-6-4-2---2-4-6-4-2-------------------------------------------- +D|---------6-----------6-2-4-6-4-2------------------------------6- +A|---------------------------------6-2-4-6-2-4-6-4-s6-7-9-6-7-9--- +E|---------------------------------------------------------------- + + + +E|------------------------------------------------------------------------ +B|------------------------------------------------------------------------ +G|-----------------8-9-11-9-8---------------------------------------9-9-9- +D|-7-9-7-6-s7-9-11------------11-7-s9-11-9-s7-9---------7---7-9-s11------- +A|----------------------------------------------7-9-7-9---9--------------- +E|------------------------------------------------------------------------ + + + +E|-------------12-s12-s14-s12-s12-s12-13-14-14-14-14-14-s17-17-19-20-21-20-19-17-------17-19-17-14- +B|---------s14-14-s14-s16-s14-s14-s14-15-16-17-17-16-16-s17-17-19-19-19-19-19-17-19---------------- +G|-9-9-9-9--------------------------------------------------------------------------14------------- +D|------------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------- + + + +E|-------14-------------------------5------------------------------------- +B|-17-19----17-19---------------5-7--------------------------------------- +G|-------------------------2-s6-------14-16-14-14-14-14-14-14-14-14-14-14- +D|-------------------2-2-4------------------------------------------------ +A|----------------s4------------------------------------------------------ +E|------------------------------------------------------------------------ + diff --git a/guitar/tabs/Joe Satriani/Joe Satriani 'Ceremony' off Crystal Planet.prj b/guitar/tabs/Joe Satriani/Joe Satriani 'Ceremony' off Crystal Planet.prj new file mode 100644 index 0000000..ef60f9f --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani 'Ceremony' off Crystal Planet.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Joe Satriani 'Ceremony' off Crystal Planet.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32)(104,32)(105,32)(106,32)(107,32)(108,32)(109,32)(110,32)(111,32)(112,32)(113,32)(114,32)(115,32)(116,32)(117,32)(118,32)(119,32)(120,32)(121,32)(122,32)(123,32)(124,32)(125,32)(126,32)(127,32)(128,32)(129,32)(130,32)(131,32)(132,32)(133,32)(134,32)(135,32)(136,32)(137,32)(138,32)(139,32)(140,32)(141,32)(142,32)(143,32)(144,32)(145,32)(146,32)(147,32)(148,32)(149,32)(150,32)(151,32)(152,32)(153,32)(154,32)(155,32)(156,32)(157,32)(158,32)(159,32)(160,32)(161,32)(162,32)(163,32)(164,32)(165,32)(166,32)(167,32)(168,32)(169,32)(170,32)(171,32)(172,32)(173,32)(174,32)(175,32)(176,32)(177,32)(178,32)(179,32)(180,32)(181,32)(182,32)(183,32)(184,32)(185,32)(186,32)(187,32)(188,32)(189,32)(190,32)(191,32)(192,32)(193,32)(194,32)(195,32)(196,32)(197,32)(198,32)(199,32)(200,32)(201,32)(202,32)(203,32)(204,32)(205,32)(206,32)(207,32)(208,32)(209,32)(210,32)(211,32)(212,32)(213,32)(214,32)(215,32)(216,32)(217,32)(218,32)(219,32)(220,32)(221,32)(222,32)(223,32)(224,32)(225,32)(226,32)(227,32)(228,32)(229,32)(230,32)(231,32)(232,32)(233,32)(234,32)(235,32)(236,32)(237,32)(238,32)(239,32)(240,32)(241,32)(242,32)(243,32)(244,32)(245,32)(246,32)(247,32)(248,32)(249,32)(250,32)(251,32)(252,32)(253,32)(254,32)(255,32)(256,32)(257,32)(258,32)(259,32)(260,32)(261,32)(262,32)(263,32)(264,32)(265,32)(266,32)(267,32)(268,32)(269,32)(270,32)(271,32)(272,32)(273,32)(274,32)(275,32)(276,32)(277,32)(278,32)(279,32)(280,32)(281,32)(282,32)(283,32)(284,32)(285,32)(286,32)(287,32)(288,32)(289,32)(290,32)(291,32)(292,32)(293,32)(294,32)(295,32)(296,32)(297,32)(298,32) diff --git a/guitar/tabs/Joe Satriani/Joe Satriani 'Ceremony' off Crystal Planet.tab b/guitar/tabs/Joe Satriani/Joe Satriani 'Ceremony' off Crystal Planet.tab new file mode 100644 index 0000000..54e8390 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani 'Ceremony' off Crystal Planet.tab @@ -0,0 +1,212 @@ +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# + +Date: Tue, 28 Apr 1998 13:29:05 -0700 (PDT) +From: Yuri Zhukov +Subject: s/satriani_joe/ceremony.tab + +Joe Satriani: "Ceremony" off Crystal Planet +tab by Yuri Zhukov + +Comments, corrections, constructive critisism welcome. +(BadHorsie9@yahoo.com) + +This is pretty straightforward. For a Satch song, "Ceremony" is +pretty easy. I know he uses a ton of effects on this song, but +all you really need is a wah and overdrive. I tabbed it out the +way I play it. I know some of the positions can be kind of awkward +for some people, especially when you get to the solo. I don't +know, I love long streches, and I know Joe does, too. Just +make sure you warm up first. + +Key: +^=legato +9(11)=bend note to pitch in parentheses +~=vibrato +ph=pinch harmonic +t=tap + + +w/ wah +|-----------------------------|----------------------------| +|-----------------------------|----------------------------| +|-----------------------------|---------------------------*| +|-6--------6--------6---6-----|-6--------6----------9--9--*| +|-6^7^6----6^7^6----6^7-6^7---|-6^7^6----6^7^6------6--6---| +|-------^9-------^9-----------|-------^9-------^9---7--7---| + +|-------------------------|-----------------------------| +|-------------------------|-----------------------------| +|-------------------------|----------------------------*| +|-------------------------|----------------------------*| +|---------7---------------|----------7------------------| +|-7^9-9-9---9-9-9---7-9-9-|--7-9-9-9---9-9-9--9-7-7-7---| + +Fill: +|--12-9--9---9--|--9-9(11)(9)-9-9--|--9-11---------| +|----------13---|------------------|---------------| +|---------------|------------------|---------------| +|---------------|------------------|-------11~~~---| +|---------------|------------------|---------------| +|---------------|------------------|---------------| + +Now bass and rhythm guitar pedal C# for a while. + +Main melody: +|------------------------------|---------------------------| +|------------------------------|---------------------------| +|-----9-11(13)(11)^9-11-9-6-4--|-----9-11(13)(11)-8(9)^6--*| +|--11--------------------------|--11----------------------*| +|------------------------------|---------------------------| +|------------------------------|---------------------------| + +|----------------------------------------------------------| +|----------------------------------------------------------| +|-11(13)-11(13)^9^6^4---11(13)-11(13)^9^6^4--11(13)(11)-11*| +|---------------------------------------------------------*| +|----------------------------------------------------------| +|----------------------------------------------------------| + +1st time: +|----9----| +|-12------| +|---------| +|---------| +|---------| +|---------| + +2nd time: +|----------| +|-12(14)~~~| +|----------| +|----------| +|----------| +|----------| + + +Play main melody 1 more time. + + +Solo: +|-12^11^9^11--12^11^9^11^12^11^9^11/| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| + +|12/14~~14^12^11^12^11^12^11^9^11^9^11^9^7^9| +|-------------------------------------------| +|-------------------------------------------| +|-------------------------------------------| +|-------------------------------------------| +|-------------------------------------------| + +|-11----------------------|----------------------------------------| +|---9-9(10)(9)(10)(9)(10)-|-10^9^7^9~~~9-12^9--9-------4-----------| +|-------------------------|------------------11-11^8-6--6(7)^4---6-| +|-------------------------|------------------------------------6---| +|-------------------------|----------------------------------------| +|-------------------------|----------------------------------------| + +|----------------------------------------------|------------------| +|----------------------------------------------|------------------| +|---4------------------------------------------|---------------8--| +|-6---6^4---------1-4-6-4\2/4-7-9-7^9^7^6-6(7)-|--6-------9^11----| +|---------6^4^2-4------------------------------|-7--^9/11---------| +|----------------------------------------------|------------------| + +|-------/9-11/14-14-14^11^14/16-|-14-16/19/21~~~--| +|-7/9-9-------------------------|-----------------| +|-------------------------------|-----------------| +|-------------------------------|-----------------| +|-------------------------------|-----------------| +|-------------------------------|-----------------| + +|-12^16^17^16^12^16^17^16^12^16^17^16^12^16^17^16^12^| +|----------------------------------------------------| +|----------------------------------------------------| +|----------------------------------------------------| +|----------------------------------------------------| +|----------------------------------------------------| + +|16^17^16^12^16^17^16^12^16^17^16^12^16^17^16^12^-| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| + + +|------------------------------------| +|-14^16^14^12^14^16^14^12^14^16^14^12| +|------------------------------------| +|------------------------------------| +|------------------------------------| +|------------------------------------| + +|12^16^17^16^12^16^17^16^12^16^17^16^12--| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| + +|12^16^17^16^12^16^17^16^12^16^17^16^12--| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| + +|-----------------| +|-14(16)^12-9-4-3-| +|-----------------| +|-----------------| +|-----------------| +|-----------------| + +|-11^12^11^9----11^12^11^9----11^12^11^9--------------------| +|------------12-------------12-----------12^10^9-6-9--------| +|----------------------------------------------------11(13)-| +|-----------------------------------------------------------| +|-----------------------------------------------------------| +|-----------------------------------------------------------| + +|-------------------9^12^9----------9^7---| +|-9----------------9-------9-12(14)-----9-| +|--11(13)--9^11(13)-----------------------| +|--------11-------------------------------| +|-----------------------------------------| +|-----------------------------------------| + +|-12-14-7^14-7^14---------------------------| +|------------------9^12^9----------9--------| +|-------------------------11(13)^9---11(13)-| +|----------------------------------11-------| +|-------------------------------------------| +|-------------------------------------------| + +|------------------------------------| +|-12---------------------------------| +|----11(13)-11-9-6-9-11-9-6-9-11-12--| +|------------------------------------| +|------------------------------------| +|------------------------------------| + +|---------------------------------------------| +|---------------------------------------------| +|-11^9-6-11----9-6-4--------------------------| +|-----------11-------6\4-2-4---2--------------| +|--------------------------------4-4-2(4)~~~--| +|---------------------------------------------| + +Back to main theme. + +Then Joe does a little outro solo, it's basically +just tremolo picking triads on the C#minor scale. + + + diff --git a/guitar/tabs/Joe Satriani/Joe Satriani - Luminous Flesh Giants.tab b/guitar/tabs/Joe Satriani/Joe Satriani - Luminous Flesh Giants.tab new file mode 100644 index 0000000..446bbf6 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani - Luminous Flesh Giants.tab @@ -0,0 +1,568 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + +Joe Satriani - Luminous Flesh Giants +letostak@ix.netcom.com (Judy Letostak) +The Music Shop BBS (619)423-4970 San Diego, CA + +||-------------------------------------------------------- +||-------------------------------------------------------- +||o----5--7----------------5*--7-------------------------- +||o----------3--------------------3----------------------- +||--5-----------5--5*----------------5--5*~--------------- +||-------------------------------------------------------- + +end 1================================================= +--------------------------------10-----12--------------|| +------------------------11---------10--12-10-----------|| +--5~--7-----------------12--bf---------------12p10----o|| +---------3--------------------------------------------o|| +------------5--5~----------------------------------5~--|| +-------------------------------------------------------|| + +end 2 1/2 +-------------------------------------------------------|| +-------------------------------------------------------|| +-5~--7------------------------------------------------o|| +------------3--5----b---rb--5--3--5-------------------o|| +--------/5---------------------------3~w/bar--5~-------|| +-------------------------------------------------------|| + +end 3 1/2 +-------------------------------------------------------|| +-------------------------------------------------------|| +--5*--7-----------------------------------------------o|| +---------3--5b--rb--5b-rb--3--------------------------o|| +------------------------------5*-3*~------5~-----------|| +-------------------------------------------------------|| + +end 4 +--------------------------10-------------10-------------- +------------------13bf~-------13p10---------13p10-------- +-----5~--4-----0--------------------12bf----------12-10-- +------------0-------------------------------------------- +-5/------------------------------------------------------ +--------------------------------------------------------- + +1/2 +-------------------------------------------------------|| +-------------------------------------------------------|| +12b-rb12p10-------------------------------------------o|| +------------12p10-------------------------------------o|| +------------------12\8--5~-----------------------------|| +-------------------------------------------------------|| + +end 5 +--------------------------------------------------------- +-----------10---10--10--10--10--10--10--10--10--10------- +-/10-------10---10--10--10--10--10--10--10--10--10------- +-/10----------------------------------------------------- +----------------------------------------------------x\--- +----------------------------------------------------x\--x\ + p.s. + +--------------------------------------------------------- +--------------------------------------------------------- +-------------9--/---------------------------------------- +-------------9--/---------------------------------------- +--x\--------------------5~------------------------------- +--x\---x\------------------------------------------------ + + 1/2 +--------------------------------------------------------- +-15--17p15--17~--15--17p15--17b--~w/bar------------------ +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +--------------------------------------------------------- +-15--17p15--17~--15-------------------------------------- +---------------------14b--rb----------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1 1/2 +----------------------------------15---17--20--22b--rb--- +-15-17p15--17~--15---17p15--18~-------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 2 +--------------------------------------------------------- +--15---17p15--17~---15--17p15--18bf-~--(18b)-rb--15~----- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +-(15~)---\----------------------------------------------- +--------------14~--13~--12~-11~--10~--9~--8~--10--7~----- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +--------------------------------------------------------- +---------------------------15bf---15b---15~--14--13~----- +-----7-----7--10--7---\1--------------------------------- +--7-----7------------------------------------------------ +--------------------------------------------------------- +--------------------------------------------------------- + + +-------------------------10-13p10-10------10------10----- +-12--11~--13--10~---13bf-------------13bf----13bf----13bf +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +-10------10---------------------------------------------- +----13bf----10-13---------------------------------------- +------------------12bf-rb-10----10~--\11----------------- +-----------------------------12-------------------------- +---------------------------------------9----------------- +--------------------------------------------------------- + + +--------10------10\8--8-----------------------15bf--rb--- +-10------------------------------------------------------ +---------7-------7\5--5----------5/---------------------- +--7----------------------------------0------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +-13--------------------10-----10-10-10/13--13\8---------- +----15~----\----10--------------------------------------- +------------------------7------7--7--7/10--10-5---------- +-----------------7--------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +-8--8---------------------------------------------------- +--------------------------------------------------------- +-5--5--5/--h17p0h17p0h17p0h17p0h17p0h17p0h17p0h17p0h17p0- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 3 1/2 +-----------------------------------------10---10-10-10--- +----------------10-10-10-10-10-10-10-10------------------ +-h17w/bar---------------------------------7----7--7--7--- +-----------------7--7--7--7--7--7--7--7------------------ +--------------------------------------------------------- +--------------------------------------------------------- + + +-10-10-10-10-10-10--\--8----8--8--8--8--8/--------10----- +---------------------------------------------13~------13- +--7--7--7--7--7--7--\--5----5--5--5--5------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +-10--13---10--------------------------------------------- +-------------13p10-13-------------------------------10--- +----------------------10-12p10--12b---10----------------- +-----------------------------------------12p10-------7--- +-----------------------------------------------12-------- +--------------------------------------------------------- + + +------------------------------10----10-10-10-10-10-10-10/ +-10-10---10-10-10-10-10-10-10---------------------------- +-------------------------------7-----7--7--7--7--7--7--7/ +--7--7----7--7--7--7--7--7--7---------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +/13---13--\8---8--8---8-8-8-8-8-8------------------------ +-----------------------------------/13-t18p13y15p13------ +/10---10--\5---5--5---5-5-5-5-5-5------------------------ +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +---13tr15~----------t15---------------------------------- +--------------------------------------------------------- +-------------------------x\x/---------------------------- +--------------------------------------------------------- +-------------------------------x/------------------------ + + +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--5---7--10--5--7-----5---6---5---4--7---5---7---10--5--7 + + +--------------------------5-------------------5------5--- +--------------------------5-------------------5------5--- +---------------5--5--7bf-----7bf-7bf-7bf-7bf-----7bf----- +---------------5--5-------------------------------------- +-----5--6--7--------------------------------------------- +-10------------------------------------------------------ + + +------5-------5-------5-------5-------5-------5-------5-- +------5-------5-------5-------5-------5-------5-------5-- +-7bf-----7bf-----7bf-----7bf-----7bf-----7bf-----7bf----- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +-------5-------5------------------5--------5--8--5------- +-------5-------5----------5---------8p5----5--8--5------- +--7bf-----7bf-----7bf--5-----7bf--------7---------------- +-----------------------------------------------------0--- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +--8bf------8b----5--------------------------------------- +--------------------8--5--------5/x---------------------- +--------------------------8--8----8--7--------15~-------- +--------------------------------------------------------- +--------------------------------------------------------- +-----------------------------------------0----5~--------- + + 1/2 +--------------------------------------------------------- +--------------------------------------------------------- +---------------15-----------15--15b-------------15------- +--17p15-----------17p15--------------17p15----------17p15 +---------17-------------17------------------17----------- +--------------------------------------------------------- + + 1/4 same======================================= +--------------------------------------------------------- +--------------------------------------------------------- +-------15b---------------15b-------------15b------------- +--------------17b15-----------17p15---------------17p15-- +--17-----------------17--------------17-------17--------- +--------------------------------------------------------- + +==== +--------------------------------------------------------- +--------------------------------------------------------- +-15b-------------17--15-----15--17bf--15----15-17bf--15-- +----------15h17---------17---------------17-------------- +------17------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +-----------------------------------------------------18-- +------15-17bf--rb15------15--17bf-rb--15--17--17bf------- +--17-----------------17---------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +------------------------18------------------------------- +--17bf-rb1/2---15-17bf-------17bf-rb--15----15-17-15~---- +-----------------------------------------17-------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +------------15-------------------18-15------15----------- +--------15------15--18bf--15--15-------18bf----15-18p15-- +--17bf--------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 1/2 +--------------------------------------------------------- +------15----------18bf-rbp15-17b--15--------------------- +-17bf----18-17-15--------------------17-15b-------------- +---------------------------------------------17-15------- +---------------------------------------------------17---- +--------------------------------------------------------- + + 1/2 +--------------------------------------------------------- +--------------------------------------------------------- +--15--17---17~-----------x-x-x-x-x-x-x-x-----------17b--- +--15--17-----------19----x-x-x-x-x-x-x-x--17~---19------- +-------------------------x-x-x-x-x-x-x-x----------------- +-------------------------x-x-x-x-x-x-x-x----------------- + + 1 1/2 +-----------------------------15----15-------------------- +---------------17b-------rb-----16----16~-----17\-------- +--x-x-x-x-x-x--------------------------------------x-x-x- +--x-x-x-x-x-x-------------------------------------------- +--x-x-x-x-x-x-------------------------------------------- +--x-x-x-x-x-x-------------------------------------------- + + 5x 3x===== +-17---------------17---17-----------------17------------- +-15bf---15bf--13-------15bf-rb--13-15-----15bf-rb-p13---- +--------------------------------------14--------------14\ +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1 1/2 1 1/2 +-20bf--b--------20~------20b--~~~~----------------------- +--------------------------------------------------------- +---------------------0-----------------7w/wah------------ +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + +w/wah=========================================== +--------------------------------------------------------- +--------------------------------------------------------- +--7-------------7------------7------------7-------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +--------------------------------------------------------- +--------------------------------------------------------- +--------5--7--7--7b----7~---8--7--8p7--5--7h8p7h8p7--5--- +--5--7--------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +-7h8p7h8p7p5-7h8-7h8p7p5-7~--5-5h8p7h8p7p5-7h8p7-5-7h8p7- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +--------------------------------------------------------- +--------------------------------------------------------- +-5/7-8h10-8/10h12-10/12-12h14p12-14b-rb--12h14p12-10h12p10 +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +-8h10p8-7-7h8-5h7p5--3h5p3\2--2h3-3p2h3-5h7p5p3---------- +-------------------------------------------------7p5p3--- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +----------2h3h5/7p3-2h3h5p3p2h3-------------------------- +-7p5p3h5-------------------------3--3--5p3p0------------- +----------------------------------------------5-3-3-3-5~- +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +----------0---------------------------------------------- +--------------------------------------------------------- +--\---/x------------------------------------------------- +--------------x--0--------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--5---7--5--7~---5-----7--5----8~w/bar------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +---5--7p5--7~----5-----1w/bar--p0------------------------ +--------------------------------------------------------- + push on bar before striking note + +--------------------------------------------------------- +--------------------------------------------------------- +------------------------------------------10~~--\-------- +--------------------------------5--7/10------------------ +--5---7p5--7~---5---5--7--8------------------------------ +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +------------------------------------------------14~~~---- +--------------------------------------------------------- +---5---7p5--7~---5---5/7---7---7~---5--5~~--------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +----------------------------------------------------15bf- +--13~--12~--11--10~--9~--8~--10--7~--\----3+w/bar-------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +--------------------------------------------------------- +--15b---15~---14---13~---12---11~---13---10~---10-------- +---------------------------------------------------12bf-- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--10-------10------10------10------10------10------12---- +------12bf----12bf----12bf----12bf----12bf----12bf------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 1/2 +-------10------------------------------------------------ +--13bf----13p10----------------------------20bf----20b--- +----------------12bf-rb-10----10b--10-------------------- +---------------------------12---------12----------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1 1/2 +-----------------------------------------17b---rb-------- +--20--19--18~---17--16~---18--15~----15------------15~--- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + 1/2 +-------------22bf---22b--22--22--21--20~--19--18--20--17~ +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--x\p.s.------------------------------------------------- + + +---17--22p17----22p17----22p17----22p17-----22p17----22-- +-------------21-------21-------21-------21--------21----- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + trill +-17--20bf~--\----------8---8-8-8-8/---20-t22-20---------- +--------------------------------------------------------- +-----------------11----5---5-5-5-5/---------------------- +--------------------------------------------------------- +------------------9-------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +------------------------13~----15-----13~----15----12\9-- +------------/7------------------------------------------- +--------------------------------------------------------- +------------/5------------------------------------------- +--17\--x\------------------------------------------------ + + +--------------------------------------------------------- +-10h12/13-13-12h13p12p10\9h10-9\7--6--------------------- +--------------------------------------7\5/7\5/7~---5-5--- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +-----------------------------------9-------------9h10h12- +--5/7/8h11---7/8h10h11--7/8h10h11-----7/8h10h11---------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--9/10-12h13--/15--p13p12h13~-p12h13p10-12-9-9-10-------- +----------------------------------------------------10p9- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +-10h11p10p8\7h8--7h8p7-5h7p5----------------------------- +-----------------------------7p6----6-7--6-7-6-6-7-6-6-6- +--------------------------------------------------------- +--------------------------------------------------------- + + +--------------------------------------------------------- +--------------------------------------------------------- +-----------------------------------7/17bf---------------- +-6-6-7-6-6-6-7--6-6-6-7-6-6-6-7-6------------------------ +--------------------------------------------------------- +--------------------------------------------------------- + +w/bar slack +---------------------20----------20--22---22---22\------- +-----18-------20-----------20---------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- +--------------------------------------------------------- + +The Music Shop BBS (619)423-4970 (San Diego, CA USA) +Over 8,000 Guitar Tabs, pictures, construction docs, lessons, +interviews, Over1000 Bass Tabs, sound files, lyrics, programs, +Hacker Files, Doom, Doom2,Duke 3d utils and wads...Much more! +Also, free support for unsigned/indie bands email me a bio, lyrics, +pictures gig info, demo info sound files etc., + +======================================================================= +h = hammeron ps = pick scrape +p = pulloff % = repeat phrase +~ = vibrato +letostak@ix.netcom.com +b = bend + natural harmonic +/\ = Slide +* = Artificial Harmonic +x = ghost note +tr = trill +===================================================================== + +letostak@ix.netcom.com (Judy Letostak) +The Music Shop BBS (619)423-4970 +over 5,000 guitar/bass tab, much more!!! +Sysop's Email me about MetalNet a music Network, with messages, files +games... diff --git a/guitar/tabs/Joe Satriani/Joe Satriani - Speed Of Light.tab b/guitar/tabs/Joe Satriani/Joe Satriani - Speed Of Light.tab new file mode 100644 index 0000000..4942e7e --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani - Speed Of Light.tab @@ -0,0 +1,396 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Date: Tue, 12 Dec 1995 09:01:12 +0100 +From: Frank Taylor +Subject: TAB Speed Of Light by Joe Satriani + +Hiya! I thought I'd TAb out some of this groovy tune since I go to see the +Satch here in Scotland in two days and I got Satch fever :) I only done up +to the solo but I will do the rest if anyone wants it but I thought I would +post this now since I have it done. Have a good time playing it! + +Speed Of Light by Joe Satriani from `Time Machine` +TAB'd by Frank A. Taylor - mork@oceana.sdsc.edu + + + Play 4 Times + D5 +E|-----------------------------|-----------------------------| +B|---------3----------1--------|--5--------3-----------------| +G|o--------2----------0--------|--2--------0----------------o| +D|o----------------------------|----------------------------o| +A|-----------------------------|-----------------------------| +E|-----------------------------|-----------------------------| + | | | + | P.M.------------------------------------------------| | +E|-----------------------------|-----------------------------| +B|-----------------------------|-----------------------------| +G|o----------------------------|----------------------------o| +D|o----------------------------|----------------------------o| +A|---5--5--5--5----5--5--5--5--|--5--5--5--5----5--5--5--5---| +E|-----------------------------|-----------------------------| + + + D5 +E|------------------------------|----------------------------| +B|---10------------12-------10--|-----7----------------------| +G|o--7-------------7--------7---|-----7----------9-----7-----| +D|o-----------------------------|----------------------------| +A|------------------------------|----------------------------| +E|------------------------------|----------------------------| + | | | + | P.M.--------------------------------------------------| | +E|------------------------------|----------------------------| +B|------------------------------|----------------------------| +G|o-----------------------------|----------------------------| +D|o-----------------------------|----------------------------| +A|---5--5--5--5----5--5--5--5---|--5--5--5--5----5--5--5--5--| +E|------------------------------|----------------------------| + + + Harm---------| +E|-----------------------------|--------------------------------------| +B|--10------------12-------10--|--------------------------------------| +G|--7-------------7--------7---|--------------------------------------| +D|-----------------------------|----------------------2.6--3.3--4--5--| +A|-----------------------------|--------------------------------------| +E|-----------------------------|--------------------------------------| + | | | + | P.M.-------------------------------------------------| | +E|-----------------------------|--------------------------------------| +B|-----------------------------|--------------------------------------| +G|-----------------------------|--------------------------------------| +D|-----------------------------|--------------------------------------| +A|--5--5--5--5----5--5--5--5---|--5--5--5--5----5--5--5--5------------| +E|-----------------------------|--------------------------------------| + + + +E|-----------------------------|----------------------------| +B|--10------------12-------10--|-----7----------------------| +G|--7-------------7--------7---|-----7----------9-----7-----| +D|-----------------------------|----------------------------| +A|-----------------------------|----------------------------| +E|-----------------------------|----------------------------| + | | | + | P.M.-------------------------------------------------| | +E|-----------------------------|----------------------------| +B|-----------------------------|----------------------------| +G|-----------------------------|----------------------------| +D|-----------------------------|----------------------------| +A|--5--5--5--5----5--5--5--5---|--5--5--5--5----5--5--5--5--| +E|-----------------------------|----------------------------| + + + C5 G5 +E|----------------------------|----------------------------| +B|--13------------15----------|--12------------------------| +G|--12------------12----------|--12------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.------------------------------------------------| | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|--3--3--3--3----3--3--3--3--|----------------------------| +E|----------------------------|--3--3--3--3----3--3--3--3--| + + + D5 +E|-----------------------------|------------------------|--------------7h10-- +B|--10---------------12----10--|----7-------------------|--10---------------- +G|--7----------------7-----7---|----7----------9-----7--|--7----------------- +D|-----------------------------|------------------------|-------------------- +A|-----------------------------|------------------------|-------------------- +E|-----------------------------|------------------------|-------------------- + + +E------|--------------------------|-----------------------------|--------- +B--10--|--------------------------|--10---------------12----10--|----7---- +G--7---|--------------------------|--7----------------7-----7---|----7---- +D------|----------2.6--3.3--4--5--|-----------------------------|--------- +A------|--------------------------|-----------------------------|--------- +E------|--------------------------|-----------------------------|--------- + + C5 G5 +E----------|----------------------------|----------------------------| +B----------|--13------------15----------|--15------------------------| +G--9----7--|--12------------12----------|--12------------------------| +D----------|----------------------------|----------------------------| +A----------|----------------------------|----------------------------| +E----------|----------------------------|----------------------------| + + Riff A + Am C +E|----------------------------|----------------------------| +B|--1~~~~~~~~-----3~~~~~~~~---|--5~~~~~~~~-----7~~~~~~~~---| +G|--2~~~~~~~~-----4~~~~~~~~---|--5~~~~~~~~-----7~~~~~~~~---| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.------------------------------------------------| | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|--5--5--5--5----5--5--5--5--|--3--3--3--3----3--3--3--3--| + + + End Riff A + Em * +E|----------------------------|-------------------------0h-| +B|--8~~~~~~~~-----10~~~~~~~~--|--12~~~~~~~~~~~~~~~~~~~-----| +G|--9~~~~~~~~-----11~~~~~~~~--|--12~~~~~~~~~~~~~~~~~~~-----| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.------------------------------------------------| | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|--0--0--0--0----0--0--0--0--|--0--0--0--0----0--0--0--0--| +*=1st Time though only + + + ** + Am C +E|-h17p0--15p0----14p0--12p0--|--10p0--8p0-----7p0---5p0---| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.------------------------------------------------| | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|--3--3--3--3----3--3--3--3--| +E|--5--5--5--5----5--5--5--5--|----------------------------| +**=2nd Time play Fill 1, see below. + + + Em +E|--3p0---2p0--------------0--|----------------------------| +B|----------------5p0---3-----|--3sl5----------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.-------------------| | | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|--0--0--0--0----0--0--0--0--|-----2 > 3 > 2--0--0--------| + + +Fill 1 + Am C +E|--20p0--20p0--19p0--19p0----17p0--17p0--15p0--15p0--|--14p0--14p0---- +B|----------------------------------------------------|---------------- +G|----------------------------------------------------|---------------- +D|----------------------------------------------------|---------------- +A|----------------------------------------------------|---------------- +E|----------------------------------------------------|---------------- + | | + | P.M.--------------------------------------------------------------- +E|----------------------------------------------------|---------------- +B|----------------------------------------------------|---------------- +G|----------------------------------------------------|---------------- +D|----------------------------------------------------|---------------- +A|----------------------------------------------------|--3-----3------- +E|--5-----5-----5-----5-------5-----5-----5-----5-----|---------------- + + + Em +E--12p0--12p0----10p0--10p0--8p0---8p0--|--7p0--7p0--5p0--5p0----3p0--3p0---- +B---------------------------------------|------------------------------------ +G---------------------------------------|------------------------------------ +D---------------------------------------|------------------------------------ +A---------------------------------------|------------------------------------ +E---------------------------------------|------------------------------------ + | + ---------------------------------------------------------------------------- +E---------------------------------------|------------------------------------ +B---------------------------------------|------------------------------------ +G---------------------------------------|------------------------------------ +D---------------------------------------|------------------------------------ +A---------------------------------------|------------------------------------ +E--3-----3-------3-----3-----3-----3----|--0----0----0----0------0----0------ + + + +E--2p0--2p0--|----------------------------| +B------------|--3sl5----------------------| +G------------|----------------------------| +D------------|----------------------------| +A------------|----------------------------| +E------------|----------------------------| + | | + -------| | | +E------------|----------------------------| +B------------|----------------------------| +G------------|----------------------------| +D------------|----------------------------| +A------------|----------------------------| +E--0----0----|-----2 > 3 > 2--0--0--------| +End Fill 1 + + +With Riff A + *** + Am C Em +E|----------------------------|----------------------------|---------------- +B|-(5)~~~~~~~~~~~~~~~~~~~~~~--|-(5)~~~~~~~~~~~~~~~~~~~~~~--|-(5)~~~~~~~~~~~~ +G|----------------------------|----------------------------|---------------- +D|----------------------------|----------------------------|---------------- +A|----------------------------|----------------------------|---------------- +E|----------------------------|----------------------------|---------------- + | | | + | P.M.-------------------------------------------------------------------- +E|----------------------------|----------------------------|---------------- +B|----------------------------|----------------------------|---------------- +G|----------------------------|----------------------------|---------------- +D|----------------------------|----------------------------|---------------- +A|----------------------------|--3--3--3--3----3--3--3--3--|---------------- +E|--5--5--5--5----5--5--5--5--|----------------------------|--0--0--0--0---- +***=Continues for next 12 bars with vibrato + + Am +E--------------|-------------------22--22--22--|--22sl20---20------19----19--| +B--~~~~~~~~~~--|-(5)~~~~~~~~~~~~---------------|-----------------------------| +G--------------|-------------------23--23--23--|--23sl21---21------19----19--| +D--------------|-------------------------------|-----------------------------| +A--------------|-------------------------------|-----------------------------| +E--------------|-------------------------------|-----------------------------| + | +| | + ------------------------------------------------------------------------| | +E--------------|-------------------------------|-----------------------------| +B--------------|-------------------------------|-----------------------------| +G--------------|-------------------------------|-----------------------------| +D--------------|-------------------------------|-----------------------------| +A--------------|-------------------------------|-----------------------------| +E--0--0--0--0--|--0--0--0--0----0--0--0--0-----|--5--5--5--5----5--5--5--5---| + + + C G5 +E|--19sl17---17~~~~~~~~~~~~~--|--15sl17---15sl----10sl12---| +B|----------------------------|--15sl17---15sl----10sl12---| +G|--19sl17---17~~~~~~~~~~~~~--|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.------------------------------------------------| | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|--3--3--3--3----3--3--3--3--|----------------------------| +E|----------------------------|--3--3--3--3----3--3--3--3--| + + + D5 +E|--12sl10--------------------|-(10)~~~~~~~~~~~~~~~~~~~~~--| +B|--12sl10--------------------|-(10)~~~~~~~~~~~~~~~~~~~~~--| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.------------------------------------------------| | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|-----------2----2--3--3--4--|--5--5--5--5----5--5--5--5--| +E|--3--3--3-------------------|----------------------------| + + + +E|-(10)~~~~~~~~~~~~~~~~~~~~---|-(10)~~~~~~~~~~~~~~~~~~~~~--| +B|-(10)~~~~~~~~~~~~~~~~~~~~---|-(10)~~~~~~~~~~~~~~~~~~~~~--| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|----------------------------|----------------------------| +E|----------------------------|----------------------------| + | | | + | P.M.------------------------------------------------| | +E|----------------------------|----------------------------| +B|----------------------------|----------------------------| +G|----------------------------|----------------------------| +D|----------------------------|----------------------------| +A|--5--5--5--5----5--5--5--5--|--5--5--5--5----5--5--5--5--| +E|----------------------------|----------------------------| + + + +E|-(10)~~~~~~~~~~~~~~~~~~~~----| +B|-(10)~~~~~~~~~~~~~~~~~~~~----| +G|----------------------------o| +D|----------------------------o| +A|-----------------------------| +E|-----------------------------| + | | + | P.M.-------------------| | +E|-----------------------------| +B|-----------------------------| +G|----------------------------o| +D|----------------------------o| +A|--5--5--5--5----5--5--5--5---| +E|-----------------------------| + + + Bm 1. 2. 3. |-------------------| +E|-----------------------------|--0--------------------------| +B|--------------------3--------|-----------3-----------------| +G|o-----------0----------------|----------------------0-----o| +D|o--------4-------------------|-------------------------4--o| +A|---2-------------------------|-----------------------------| +E|-----------------------------|-----------------------------| + | | | + | P.M.------------------------------------------------| | +E|-----------------------------|-----------------------------| +B|-----------------------------|-----------------------------| +G|o----------------------------|----------------------------o| +D|o----------------------------|----------------------------o| +A|---2--2--2--2----2--2--2--2--|--2--2--2--2----2--2--2--2---| +E|-----------------------------|-----------------------------| + + + 4. |------------------------| +E|--0-------------------------| +B|-----------3----------------| +G|----------------------------| +D|----------------------------| +A|----------------------------| +E|----------------------------| + | | + | P.M.-------------------| | +E|----------------------------| +B|----------------------------| +G|----------------------------| +D|----------------------------| +A|--2--2--2--2----2--2--2--2--| +E|----------------------------| + +Same notation applies as usual :) +mork@oceana.sdsc.edu + + + diff --git a/guitar/tabs/Joe Satriani/Joe Satriani - The Mystical Potato Head Groove Thing.tab b/guitar/tabs/Joe Satriani/Joe Satriani - The Mystical Potato Head Groove Thing.tab new file mode 100644 index 0000000..bc1c4e1 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani - The Mystical Potato Head Groove Thing.tab @@ -0,0 +1,387 @@ + + + The Mystical Potato Head Groove Thing + Chris Wilkinson + + + + PM................... PM................... PM................... +||------------------------|------------------------||--------------------------- +||------------------------|------------------------||--------------------------- +||*-----------------------|-----------------------*||--------------------------- +||*---------------11--12--|---------------12--11--*||---------------11--12------ +||----------------7---7---|---------------7---7----||---------------7---7------- +||----0--0--0--0----------|---0--0--0--0-----------||---0--0--0--0-------------- + + + B PM................... +|--------------------|-----------------------|----------------------|----------- +|--------------------|-----------------------|----------------------|----------- +|--------------------|-----------------------|----------------------|----------- +|--------------------|---------------12--11--|----------------------|----------- +|--------------------|---------------7---7---|----------------5~~~--|----------- +|--0--3--0---5--3p0--|---0--0--0--0----------|--0--3--0--6h7--------|----------- + + +PM................... B PM................... +---------------------|--------------------|-----------------------|------------- +---------------------|--------------------|-----------------------|------------- +---------------------|--------------------|-----------------------|--------2---- +-------------11--12--|--------------------|---------------12--11--|------------- +-------------7---7---|--------------------|---------------7---7---|--2--3------- +-0--0--0--0----------|--0--3--0---5--3p0--|---0--0--0--0----------|------------- + + + PM................... B +---0-------|-----------------------|--------------------|----------------------- +-----------|-----------------------|--------------------|----------------------- +3-----3\2--|-----------------------|--------------------|----------------------- +-----------|---------------11--12--|--------------------|----------------------- +-----------|---------------7---7---|--------------------|----------------------- +-----------|---0--0--0--0----------|--0--3--0---5--3p0--|----------------------- + + +PM................... B B PM................... +---------------------|-------------------------|-----------------------|-------- +---------------------|-------------------------|-----------------------|-------- +---------------------|-------------------------|-----------------------|-------- +-------------12--11--|-------------------------|---------------11--12--|-------- +-------------7---7---|-------------------------|---------------7---7---|-------- +-0--0--0--0----------|--0--3--0---6--7---6~~~--|---0--0--0--0----------|--0----- + + + B PM................... WB down Harm WB up +---------------|-----------------------|-------------------------------|-------- +---------------|-----------------------|-------------------------------|/5------ +---------------|-----------------------|---x---------4------~~~~~~~~~--|-------- +---------------|---------------12--11--|-------------------------------|-------- +---------------|---------------7---7---|-------------------------------|-------- +3--0---5--3p0--|---0--0--0--0----------|-------------------------------|-------- + + + B Rb B RB PM................ +-----------------------------|-------------||----------------------------------- +4----------------------------|-------------||----------------------------------- +---5--4----------------------|-------------||*---------------9------------------ +---------5---4------4---~~~--|-------------||*--9------------9------------------ +-----------------------------|/2--3--3--2--||---7------------------------------- +-----------------------------|-------------||-------0--0--0--------------------- + + +PM..................PM........................PM................... +-------------------------------------------|------------------------------------ +-------------------------------------------|------------------------------------ +-------------------------------------------|---------------7-------------------- +-------------11-12------11-----9--9/11--9--|---------------7-------------------- +-------------9-/10---9------7-----7-9---7--|---5--5--5--5----------------------- +-0--0--0--0--------------------------------|------------------------------------ + + +PM............. PM........ Harm B B +-------------------------0--0------||--------14--12~~~---14--|------------------ +-------7-----------------3--3------||---12-------------------|------17--19------ +-------7-------4---------2--2-----*||------------------------|--18-------------- +-------7-------4------------------*||------------------------|------------------ +-5--5-----5\2------2--2--------2---||------------------------|------------------ +-----------------------------------||------------------------|------------------ + + + B B B Rb B RB PH +16--17--19---19---16---------------------------|-------------------------------- +----------------------17---------17~~~---------|---14-----12-------------------- +--------------------------16~~~---------16~~~--|---------------13p11---9-------- +-----------------------------------------------|-------------------------------- +-----------------------------------------------|-------------------------------- +-----------------------------------------------|-------------------------------- + + + PH B RB B B B RB B RB +---------------------|-------14--12~~~---17--|---19-----21------19-----19------- +---------------------|--12-------------------|---------------------22----------- +~~~\7------6----~~~--|-----------------------|---------------------------------- +-------7-------------|-----------------------|---------------------------------- +---------------------|-----------------------|---------------------------------- +---------------------|-----------------------|---------------------------------- + + +PH Harmonics.....Harmonics... All notes tapped on with LH whilst +----------|------12-----7------------5--||-------------h12---------------------- +----------|--0-------7-----0---5--5-----||----------h10---h10------------------- +21-21~~~--|-----------------------------||*-------h7---------h7----------------- +----------|-----------------------------||*----h11-------------h11------h11----- +----------|-----------------------------||---h9-------------------h9--h9-------- +----------|-----------------------------||-h7-----------------------h7---------- + + + Muting strings with Rh behind and over the neck +-----h12--|---------------h16---------------------------h14---||---------------- +--h10-----|------------h14---h14---------------------h12------||---------------- +h7--------|---------h11---------h11---------------h11--------*||---------------- +----------|------h14---------------h14---------h14-----------*||---------------- +----------|---h12---------------------h12---h12---------------||---------------- +----------|h10---------------------------h10------------------||---------------- + + +Harmonics until noted not +-5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--|--5--5--5--5--5--5--5--5--5------ +----------------------------------------------|--------------------------------- +----------------------------------------------|--------------------------------- +----------------------------------------------|--------------------------------- +----------------------------------------------|--------------------------------- +----------------------------------------------|--------------------------------- + + + +5--5--5--5--5--5--5--|--7--7--------7------------------------------------------- +---------------------|--------7--7-----7--7--7--7--7--7--7--7--7--7--7--7--7---- +---------------------|---------------------------------------------------------- +---------------------|---------------------------------------------------------- +---------------------|---------------------------------------------------------- +---------------------|---------------------------------------------------------- + + + Stop Harm +------------------------12--12------------0--0--0--|--0--x/0--0--x\------------- +12--12--12--12--12--12-----------------------------|---------------0--0--x------ +---------------------------------------------------|---------------------------- +---------------------------------------------------|---------------------------- +---------------------------------------------------|---------------------------- +---------------------------------------------------|---------------------------- + + + B Rb Ph B B B B +-------------------|----------14--12~~~---14--|---------------16--17--19-------- +/0-----------------|-----12-------------------|------17---19-------------------- +-----2----------2--|--------------------------|--18----------------------------- +-------------------|--------------------------|--------------------------------- +-------------------|--------------------------|--------------------------------- +-------------------|--0-----------------------|--------------------------------- + + + B B PH Harm till stop +19---16-------------------------------------------------|-------12-----7-------- +---------17--------------------17~~~---------17------17\|---12------7-----7----- +-------------16---18--16---16---------16~~~------16-----|----------------------- +--------------------------------------------------------|----------------------- +--------------------------------------------------------|----------------------- +--------------------------------------------------------|----------------------- + + + Stop Harm B B B RB B Rb +---7---------5-----|-------14--12~~~---17--|---1--19--17--19---19------17------- +7-----7--5---------|--12-------------------|------------------------------------ +-------------------|-----------------------|------------------------------------ +-------------------|-----------------------|------------------------------------ +-------------------|-----------------------|------------------------------------ +-------------------|-----------------------|------------------------------------ + + + +19~~~-------------|--16h17p16p0--10h12p10p0--9h10p9p0--7h9p7p0------------------ +-------17--17~~~--|---------------------------------------------7h9p7p0--------- +------------------|------------------------------------------------------7------ +------------------|------------------------------------------------------------- +------------------|------------------------------------------------------------- +------------------|------------------------------------------------------------- + + + B WB This bit continues under the next section that repeats +----------------------|------------h12----------------------h12--|-------------- +----------------------|---------h10---h10----------------h10-----|-------------- +h9p7\6h7\4h-6~~~-~~~--|-------h7---------h7------------h7--------|-------------- +----------------------|----h11-------------h11------h11----------|------h14----- +----------------------|--h9-------------------h9--h9-------------|---h12-------- +----------------------|h7-----------------------h7---------------|h10----------- + + + itself 20 times Repeat this bit 20 times +------h16---------------------------h14--||---16--17p16p12------12---||--------- +---h14---h14---------------------h12-----||-----------------17-------||--------- +h11---------h11---------------h11--------||*------------------------*||--------- +---------------h14---------h14-----------||*------------------------*||--9------ +------------------h12---h12--------------||--------------------------||--------- +---------------------h10-----------------||--------------------------||--------- + + + PM...... +-----------------|-------------------------------------------------------------- +-----------9-----|--7--9-----------------------------9-----12--12--------------- +-----------7-----|--7--------------------------------7-----7---7----7--7-------- +~~~~~~--x-----x--|--------x--x--9--9--9--9--9~~~--x-----x-----------------9----- +-----------------|-------------------------------------------------------------- +-----------------|-------------------------------------------------------------- + + + WB UP +------------|-----------------------------------------------|---------16-------- +------------|-----9-----7--9--------------------------9-----|--9~~~---17-------- +------------|-----9-----7--9--------7-----------------7-----|------------------- +9--9--9~~~--|--x-----x--------x--x-----9--9--9~~~--x-----x--|------------------- +------------|-----------------------------------------------|------------------- +------------|-----------------------------------------------|------------------- + + +PH B RB +-----------|----------------------------|--------------------------------------- +-----------|----------------------------|-----------------------------7--9------ +-4---------|--2-------------------------|--------------------6--7--9------------ +-----------|-----4--2--1----2--4--------|-------7-----6h7h9--------------------- +-----------|------------/5--------5~~~--|--7h9-----9---------------------------- +-----------|----------------------------|--------------------------------------- + + + T T +----7--9h10p9p7------7h9p7--10p7--9p7------7--9--10p9p7h10p7--|---14p10---14---- +10---------------10--------------------10---------------------|----------------- +--------------------------------------------------------------|----------------- +--------------------------------------------------------------|----------------- +--------------------------------------------------------------|----------------- +--------------------------------------------------------------|----------------- + + + T T T T +p10p9p7---13/14\13p10p9p7---13/14\13p10p9p7---13/14\13p10p9p7---13/14\13p10----- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + + + T T T T T +p9p7---13/14\13p10p9p7---13/14\13p10p9p7---13/16p7/10---17/18\17p13p10---17----- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + + + T T T T +/18\17p13p10---17/18\17p13p10---17/18\17p13p10---17/18\17p13p10---17/18\17------ +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + + + B RB B +p13p10--|--20-------17------------------------|--------------------------------- +--------|---------------18---------17---------|--------------------------------- +--------|-------------------17\15-------------|--15p12--15p12------15p12-------- +--------|------------------------------14~~~--|----------------12---------14---- +--------|-------------------------------------|--------------------------------- +--------|-------------------------------------|--------------------------------- + + + +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +15p12--15p12------15p12------15p12--15p12------15p12------15p12--15p12---------- +--------------14---------14----------------14---------14----------------14------ +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + + + B +----------|--13--------------15------13----------------------------------------- +------13--|------15--14--13------14------15--14--13----------------------------- +----------|------------------------------------------15--12-------------12------ +p12-------|--------------------------------------------------15--12--8---------- +----------|--------------------------------------------------------------------- +----------|--------------------------------------------------------------------- + + + +--------------------------------------------------------------------|----------- +-----8-10--10--10--8-10--10--10--8-10--10--10--9-----7--9--7--9--7--|----------- +~~~--9/11--11--11--9/11--11--11--9/11--11--11--9-----7--9--7--9--7--|----------- +--------------------------------------------------9-----9--7--9--7--|--9--7----- +--------------------------------------------------------------------|----------- +--------------------------------------------------------------------|----------- + + + T Trill with pick B +--------------------------|-----------------------|------19--19~~~--|----------- +7--------7-----9--7--9--7-|-----------------------|-----------------|--15------- +7--------7-----9--7--9--7/|--14h-16---------------|-----------------|----------- +7--9--7--7--9--9--7--9--7-|-----------------------|-----------------|----------- +--------------------------|-----------------------|-----------------|----------- +--------------------------|-----------------------|-----------------|----------- + + + Warble bar +14--16--17------------------------------------|-------------h2h3h5p3p2~~~------- +------------15--------------------------------|----------4h5-------------------- +----------------16------0---------------------|/4---4h5------------------------- +--------------------14-----12-----------------|--------------------------------- +-------------------------------14--12--14~~~--|--------------------------------- +----------------------------------------------|--------------------------------- + + + WB WB B B B +~~~--|/7-~~~--|-----------19--|----------14--12---14--|---------------16--17---- +-----|--------|------19-------|-----12----------------|------17---19------------ +-----|--------|--16-----------|-----------------------|--18--------------------- +-----|--------|---------------|-----------------------|------------------------- +-----|--------|---------------|-----------------------|------------------------- +-----|--------|---------------|-----------------------|------------------------- + + + B B Harmonics until stop +19--19---19---16----------------------------|-------12---------7-----7--12------ +------------------17------17~~~-------------|---12------12--7-----7------------- +----------------------16---------16--16~~~--|----------------------------------- +--------------------------------------------|----------------------------------- +--------------------------------------------|----------------------------------- +--------------------------------------------|----------------------------------- + + + Stop B B B B +---5-----7--------3--4--3---2--0--|-------14--12---17~~~--|---19-21--21--19----- +5-----7-----7--3------------------|--12-------------------|--------------------- +----------------------------------|-----------------------|--------------------- +----------------------------------|-----------------------|--------------------- +----------------------------------|-----------------------|--------------------- +----------------------------------|-----------------------|--------------------- + + + +---19-----------|--16h17p16p0--14h16p14p0--12h14p12p0--10h12p10p0--9h10p9p0----- +22--------------|--------------------------------------------------------------- +------20-20~~~--|--------------------------------------------------------------- +----------------|--------------------------------------------------------------- +----------------|--------------------------------------------------------------- +----------------|--------------------------------------------------------------- + + + B Rb Wb +------------------------------|------------------------------------------------- +9h10p9p0--7h9p7p0-------------|------------------------------------------------- +--------------------6~~~-~~~--|--7--7--6--4--4---------4------------------------ +------------------------------|-----------------7p6h7-----7--4h6--4h6p4\2--4---- +------------------------------|------------------------------------------------- +------------------------------|------------------------------------------------- + + + B +-------------------------------------------|------------||---------------------- +-------------------------------------------|---------9--||---9--9--9------------ +-------------------------------------------|---------9--||*--9--9--9------------ +2h4p2--------------------------------------|--12-11--9--||*--9--9--9-----7------ +-------5--4p2---4--2--4--2--------------2--|--10\9---7--||---7--7--7-----5------ +----------------------------4--0--0--0--0--|------------||------------7--------- + + + Pick slide +---------------------||------------------------------------------------|-------- +-----------------9---||--9--9--9---------------------------------9--9--|-------- +-----------------9--*||--9--9--9---------------------------------9--9--|-------- +-6--4--4--12-11--9--*||--9--9--9-----7-6--4--4-------------------9--9--|-------- +\4--2--2--10\9---7---||--7--7--7-----5\4--2--2-----5--4--2--2----7--7--|-------- +---------------------||-----------7-------------0--3--2--0--0/x///-----|-------- + + + + diff --git a/guitar/tabs/Joe Satriani/Joe Satriani Lead Run.prj b/guitar/tabs/Joe Satriani/Joe Satriani Lead Run.prj new file mode 100644 index 0000000..8d8ddaa --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani Lead Run.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Joe Satriani Lead Run.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16) diff --git a/guitar/tabs/Joe Satriani/Joe Satriani Lead Run.tab b/guitar/tabs/Joe Satriani/Joe Satriani Lead Run.tab new file mode 100644 index 0000000..5e15c34 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani Lead Run.tab @@ -0,0 +1,28 @@ +Joe Satriani Lead Run + + + +This is a very good lick that i love doing in fast songs. +You´ll have to be very good with the legato, because this trick has a lot of +pull off and hammer on. Just start doing it slow and clean, then you´ll have +to use distortion i fou want to hear it complete. + + +Key = Em + + + E |---------14h15h17p15p14/12h14h15p14p12-----------------10h12h14p12| + B |-13h15h17----------------------|------15p13p12/10h12h13-----------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |p10/8h10h12p10p8--------------7h8h10h8h7h10p7h8h10p8p7------------| + B |----------------12p10p8/7h8h10------------------------10p8p7------| + G |-------------------------------|-----------------------------9p7--| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + diff --git a/guitar/tabs/Joe Satriani/Joe Satriani Trick.tab b/guitar/tabs/Joe Satriani/Joe Satriani Trick.tab new file mode 100644 index 0000000..7e8060f --- /dev/null +++ b/guitar/tabs/Joe Satriani/Joe Satriani Trick.tab @@ -0,0 +1,31 @@ + +Joe Satriani Trick + + +This is a trick that Joe Satriani uses a lot. It produces a faster sound than any two or three fingers could. +Use your plecky to pluck the string and hammer down on the 12th string +while hammering on and of the 10th string with your finger. Do this as fast as you can-you need to get a rhythm going. +You can also change strings and hammer down on the 12th then 13th, 14th... With your plecky. It's quite flexible + + + +Key = Depends on the song + + + + + + E |-------------------------------|12-10-8-13-10-8-14-10-8-----------| + B |-12-10-8-12-10-8-12-10-8-------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + diff --git a/guitar/tabs/Joe Satriani/Phrase Like Satch.prj b/guitar/tabs/Joe Satriani/Phrase Like Satch.prj new file mode 100644 index 0000000..b4cb257 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Phrase Like Satch.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Phrase Like Satch.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16) diff --git a/guitar/tabs/Joe Satriani/Phrase Like Satch.tab b/guitar/tabs/Joe Satriani/Phrase Like Satch.tab new file mode 100644 index 0000000..b6623c8 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Phrase Like Satch.tab @@ -0,0 +1,27 @@ +Phrase Like Satch + + + +This is a simple exercise that will increase you legato phrasing tremendously. Play it at a pace you feel comfortable with and then try to increase your speed. Once you feel that you have mastered one position, try moving down a fret each time until you are comfortable playing in any shape across the fretboard. + + + +Key = None + + + E |-------------------------------|------------------------8h10h12----------| + B |-------------------------------|-------------8h10h12---------------------| + G |-------------------------------|--8h10h12--------------------------------| + D |----------------------8h10h12--|-----------------------------------------| + A |------------8h10h12------------|-----------------------------------------| + E |--8h10h12----------------------|-----------------------------------------| + + E |--12p10p8----------------------|-----------------------------------------| + B |------------12p10p8------------|-----------------------------------------| + G |----------------------12p10p8--|-----------------------------------------| + D |-------------------------------|-12p10p8---------------------------------| + A |-------------------------------|-------------12p10p8---------------------| + E |-------------------------------|------------------------12p10p8----------| + + + diff --git a/guitar/tabs/Joe Satriani/Power Cosmic.prj b/guitar/tabs/Joe Satriani/Power Cosmic.prj new file mode 100644 index 0000000..a5ba135 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Power Cosmic.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Power Cosmic.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16) diff --git a/guitar/tabs/Joe Satriani/Power Cosmic.tab b/guitar/tabs/Joe Satriani/Power Cosmic.tab new file mode 100644 index 0000000..a6c3cbb --- /dev/null +++ b/guitar/tabs/Joe Satriani/Power Cosmic.tab @@ -0,0 +1,127 @@ +%TabMaster v2.00r% + + +E|-----------10----------------------------19----------------------------------15---- +B|---------8----8-----------------------17----17----------------------------13----13- +G|-------5--------5------------------14----------14----------------------10---------- +D|-----9------------9-------------17----------------17----------------14------------- +A|---7----------------7---7----15----------------------15----15----12---------------- +E|-5--------------------5---13----------------------------13----10------------------- + + + +E|----------------------------12------------------------------16----------------------- +B|-------------------------10----10------------------------14----14-------------------- +G|-10--------------------7----------7-------------------11----------11----------------- +D|----14--------------10--------------10-------------14----------------14-------------- +A|-------12----12---8--------------------8---8----12----------------------12----12---8- +E|----------10----6------------------------6---10----------------------------10----6--- + + + +E|---------12---------------------------12------------------------------21---------- +B|------10----10---------------------10----10------------------------19----19------- +G|----7----------7-----------------7----------7-------------------16----------16---- +D|-10--------------10-----------11--------------11-------------19----------------19- +A|--------------------8---8---9--------------------9---9----17---------------------- +E|----------------------6---7------------------------7---15------------------------- + + + +E|-------------------------17--------------------------------14--------------------------- +B|----------------------15----15--------------------------12----12------------------------ +G|-------------------12----------12---------------------9----------9--------------------9- +D|----------------16----------------16---------------12--------------12--------------13--- +A|-17----17----14----------------------14----14---10--------------------10---10---11------ +E|----15----12----------------------------12----8--------------------------8----9--------- + + + +E|----14-----------------------------12-------------------------10----------- +B|-12----12-----------------------10----10--------------------8----8--------- +G|----------9-------------------7----------7----------------5--------5------- +D|------------13-------------10--------------10-----------9------------9----- +A|---------------11---11---8--------------------8---8---7----------------7--- +E|------------------9----6------------------------6---5--------------------5- + + + +E|-------------11------------------------11--------------------------12- +B|-----------9----9--------------------9----9---------------------10---- +G|---------6--------6----------------6--------6-----------------7------- +D|-------9------------9-----------10------------10-----------11--------- +A|-7---7----------------7---7---8------------------8---8---9------------ +E|---5--------------------5---6----------------------6---7-------------- + + + +E|----------------------------13--------------------------------17---------------------- +B|-10----------------------11----11--------------------------15----15------------------- +G|----7------------------8----------8---------------------12----------12---------------- +D|------11------------12--------------12---------------16----------------16------------- +A|---------9---9---10--------------------10---10----14----------------------14----14---- +E|-----------7---8--------------------------8----12----------------------------12----13- + + + +E|-------------18----------------------------------18----------------------------------16------- +B|----------16----16----------------------------16----16----------------------------14----14---- +G|-------13----------13----------------------13----------13----------------------11----------11- +D|----17----------------17----------------16----------------16----------------15---------------- +A|-15----------------------15----15----14----------------------14----14----13------------------- +E|----------------------------13----12----------------------------12----11---------------------- + + + +E|----------------------------16--------------------------------14------------------------- +B|-------------------------14----14--------------------------12----12---------------------- +G|----------------------11----------11---------------------9----------9-------------------- +D|-15----------------14----------------14---------------13--------------13--------------12- +A|----13----13----12----------------------12----12---11--------------------11---11---10---- +E|-------11----10----------------------------10----9--------------------------9----8------- + + + +E|------14-----------------------------12---------------------------12----------- +B|---12----12-----------------------10----10---------------------10----10-------- +G|-9----------9-------------------7----------7-----------------7----------7------ +D|--------------12-------------11--------------11-----------10--------------10--- +A|-----------------10---10---9--------------------9---9---8--------------------8- +E|--------------------9----7------------------------7---6------------------------ + + + +E|----------------12------------------------11----------------------- +B|-------------10----10-------------------9----9-------------------8- +G|-----------7----------7---------------6--------6---------------5--- +D|---------9--------------9-----------9------------9-----------9----- +A|---8---7------------------7---7---7----------------7---7---7------- +E|-6---5----------------------5---5--------------------5---5--------- + + + +E|-10-----------------------11----------------------------16------------------- +B|----8-------------------9----9-----------------------15----15---------------- +G|------5---------------6--------6------------------13----------13------------- +D|--------9-----------9------------9-------------15----------------15---------- +A|----------7---7---7----------------7---7----14----------------------14----14- +E|------------5---5--------------------5---12----------------------------12---- + + + +E|----------------15--------------------------------12----------------------------10--- +B|-------------13----13--------------------------10----10-----------------------8----8- +G|----------10----------10---------------------9----------9-------------------7-------- +D|-------14----------------14---------------12--------------12-------------10---------- +A|----12----------------------12----12---10--------------------10---10---8------------- +E|-10----------------------------10----8--------------------------8----6--------------- + + + +E|-------------- +B|-------------- +G|-7------------ +D|---10--------- +A|------8---8--- +E|--------6---5- + diff --git a/guitar/tabs/Joe Satriani/Raspberry Jam Delta-V.prj b/guitar/tabs/Joe Satriani/Raspberry Jam Delta-V.prj new file mode 100644 index 0000000..447ca51 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Raspberry Jam Delta-V.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Raspberry Jam Delta-V.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16) diff --git a/guitar/tabs/Joe Satriani/Raspberry Jam Delta-V.tab b/guitar/tabs/Joe Satriani/Raspberry Jam Delta-V.tab new file mode 100644 index 0000000..f55d46d --- /dev/null +++ b/guitar/tabs/Joe Satriani/Raspberry Jam Delta-V.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|-----------12-11-0----------------------------------12-11-0------------------- +B|-10-0-12-0---------10-0-12-0-10-12-0-10-0-10-0-12-0---------5-0-7-0-9-10-0-10- +G|------------------------------------------------------------------------------ +D|------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------ + + + +E|-------------12-11-0----------------------------------12-11-0---------------- +B|-0-10-0-12-0---------10-0-12-0-10-12-0-10-0-10-0-12-0---------5-0-7-0-9-10-0- +G|----------------------------------------------------------------------------- +D|----------------------------------------------------------------------------- +A|----------------------------------------------------------------------------- +E|----------------------------------------------------------------------------- + + + +E|----------------12-11-0----------------------------------12-11-0-------------- +B|-10-0-10-0-12-0---------10-0-12-0-10-12-0-10-0-10-0-12-0---------5-0-7-0-9-10- +G|------------------------------------------------------------------------------ +D|------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------ + + + +E|------------------12-11-0------------------------12-11-0---------------------- +B|-0-10-0-10-0-12-0---------10-0-12-0-10-12-0-10-0---------12-10-0-10-9-0-7-5-0- +G|------------------------------------------------------------------------------ +D|------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------ + + + +E|----7- +B|-s7--- +G|------ +D|------ +A|------ +E|------ + diff --git a/guitar/tabs/Joe Satriani/Rubina.prj b/guitar/tabs/Joe Satriani/Rubina.prj new file mode 100644 index 0000000..da4b9c8 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Rubina.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Rubina.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16) diff --git a/guitar/tabs/Joe Satriani/Rubina.tab b/guitar/tabs/Joe Satriani/Rubina.tab new file mode 100644 index 0000000..b9b25aa --- /dev/null +++ b/guitar/tabs/Joe Satriani/Rubina.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|---------------------------------------------------------------------- +B|---8-8-7-7-----------------------8-8-7-7------------8-8-7-7----------- +G|-7---------7---------7-s9-9-s7-7---------7------9-7---------7--------- +D|-------------7-s9-s7-----------------------7-s9---------------7-s9-s7- +A|---------------------------------------------------------------------- +E|---------------------------------------------------------------------- + + + +E|------------------------------------7-------------7-------------7---------- +B|------------8-8-7-7------------8-10---10-8---8-10---10-8---8-10------------ +G|-9-9-s11-s7---------7------9-9-------------9-------------9--------9-s11-s9- +D|----------------------7-s9------------------------------------------------- +A|--------------------------------------------------------------------------- +E|--------------------------------------------------------------------------- + + + +E|----------7----------------10-12-10-------10-12-10----------10-12----------------10-12-10- +B|-----8-10------------10-12-10-12-10-10-12-10-12-10----10-12-10-12-8-s10-s8-10-12-10-12-10- +G|-9-9--------9-s11-s9-11-12----------11-12----------12-11-12-------9-s11-s9-11-12---------- +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|-12----10--------------15-15-14-14-12----10-12-12-15-14-----------------------2-15-15-14-14-12---- +B|-12----10-12-s10-10-s8-17-17-15-15-12-12-10-12-12-17-15-10-s12-s10-10-s12-s10-3-17-17-15-15-12-12- +G|----12----12-s10-11-s9----------------12-------12----------------------------------------------12- +D|-------------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|-10-12-12-19-17----------------------- +B|-10-12-12-17-15-10-s12-s10-10-s12-s10- +G|-11-12-12-16-14----------------------- +D|-------------------------------------- +A|-------------------------------------- +E|-------------------------------------- + diff --git a/guitar/tabs/Joe Satriani/Satch Harmonics.prj b/guitar/tabs/Joe Satriani/Satch Harmonics.prj new file mode 100644 index 0000000..1b502bb --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satch Harmonics.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Satch Harmonics.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500) diff --git a/guitar/tabs/Joe Satriani/Satch Harmonics.tab b/guitar/tabs/Joe Satriani/Satch Harmonics.tab new file mode 100644 index 0000000..496eab1 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satch Harmonics.tab @@ -0,0 +1,21 @@ + +Satch Harmonics + + +Here are some typical satriani harmonics. They are really cool +if you can master them. Take them Slow make sure you play each +note properly and make it distinctly heard otherwise it sounds +dumb ! + + + +Key = A + +N.H---> +E|-----------------|----------------| +B|-----------------|----------------| +G|---------5-------|----------------| +D|-------5---5-----|-----5-5-5-5----| +A|---5-4-------4-5-|--5-4-------4-5-| +E|-----------------|----------------| + diff --git a/guitar/tabs/Joe Satriani/Satch chord stuff.prj b/guitar/tabs/Joe Satriani/Satch chord stuff.prj new file mode 100644 index 0000000..730b2dc --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satch chord stuff.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Satch chord stuff.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500) diff --git a/guitar/tabs/Joe Satriani/Satch chord stuff.tab b/guitar/tabs/Joe Satriani/Satch chord stuff.tab new file mode 100644 index 0000000..1890ad8 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satch chord stuff.tab @@ -0,0 +1,18 @@ +Satch chord stuff + + +Here's some of Satriani's chords which are very strange. the order of which there played is as follows F5/E, E(flat5), Aflat5/E, Dm/E, F5, and E(flat5) + + + +Key = + + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |----10----8----6----3----6-----|---------------3-3----------------| + A |-----8----7----6----5----6-----|---------------3-3---1------------| + E |-0-0---0-0--0-0--0-0--0-0------|-0-0-0--0-0-0--1-1---0------------| + + diff --git a/guitar/tabs/Joe Satriani/Satch-type legato exercise.prj b/guitar/tabs/Joe Satriani/Satch-type legato exercise.prj new file mode 100644 index 0000000..b48e9b8 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satch-type legato exercise.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Satch-type legato exercise.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500)(32,500)(33,500)(34,500)(35,500)(36,500)(37,500)(38,500)(39,500)(40,500)(41,500)(42,500)(43,500)(44,500)(45,500)(46,500)(47,500)(48,500)(49,500)(50,500)(51,500)(52,500)(53,500)(54,500)(55,500)(56,500)(57,500)(58,500)(59,500)(60,500)(61,500)(62,500)(63,500)(64,500)(65,500)(66,500)(67,500)(68,500)(69,500)(70,500)(71,500)(72,500)(73,500)(74,500)(75,500)(76,500)(77,500)(78,500)(79,500)(80,500)(81,500)(82,500)(83,500)(84,500)(85,500)(86,500)(87,500)(88,500)(89,500)(90,500) diff --git a/guitar/tabs/Joe Satriani/Satch-type legato exercise.tab b/guitar/tabs/Joe Satriani/Satch-type legato exercise.tab new file mode 100644 index 0000000..e7cb29d --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satch-type legato exercise.tab @@ -0,0 +1,49 @@ +Satch-type legato exercise + + +Go easy on the left hand when practicing this kind of legato playing, don't do it too long without pause. The best way to practice this without injury is to play it for a few minutes (about 5) and then switch to something that is easy for the left hand, f.e. something with a complex picking pattern. + +When you switch to another string pick the first note, then play all the other notes by hammers, pulls and slides as indicated in the tab. Be carefull to avoid noise from other strings while doing the hammers and pulls. All the slides are done with the index finger. + +The shapes I play in this exercise are the same ones that Satch uses a lot in his improvisation-legato playing. You should try to do the same: once you got the basic ideas down, just roll around over the scale-patterns every which way you like until you can do it on "auto-pilot" and not think about it. I did not do that here, because I would have a very hard time to tab it afterwards... Add a little "wah" to it to get it even smoother. + + +Key = + +E|-7-h8-h10-p8-p7--------------------------------------------------| +B|----------------10-p8-p7-h8-h10-p8-p7----------------------------| +G|--------------------------------------9-p7-p5-h7-h9-p7-p5-/4-h5--| +D|-----------------------------------------------------------------| +A|-----------------------------------------------------------------| +E|-----------------------------------------------------------------| + +E|-----------------------------------------------------------------| +B|-----------------------------------------------------------------| +G|-h7-p5-p4--------------------------------------------------------| +D|----------7-p5-p4-h5-h7-p5-p4-/5-h7-h9-p7-p5-/4-h5-h7-p5-p4------| +A|-----------------------------------------------------------------| +E|-----------------------------------------------------------------| + +E|-----------------------------------------------------------------| +B|-----------------------------------------------------------------| +G|-----------------------------------------------------------------| +D|-----------------------------------------------------------------| +A|-7-p5-p3-h5-h7-p5-p3-/2-h3-h5-p3-p2---------------2-h3-h5-p3-p2--| +E|------------------------------------5-p3-p2-h3-h5----------------| + +E|-----------------------------------------------------------------| +B|-----------------------------------------------------------------| +G|---------------------------------5-h7-h9-p7-p5-/7-h9-h11---------| +D|----------4-h5-h7-p5-p4-/5-h7-h9---------------------------------| +A|-/3-h5-h7--------------------------------------------------------| +E|-----------------------------------------------------------------| + +E|-----------------------------------------------------------------| +B|-8-h10-h12-p10-p8-/7-h8-h10-p8-----------------------------------| +G|-----------------------------------------------------------------| +D|-----------------------------------------------------------------| +A|-----------------------------------------------------------------| +E|-----------------------------------------------------------------| + + + diff --git a/guitar/tabs/Joe Satriani/Satriani Scream.prj b/guitar/tabs/Joe Satriani/Satriani Scream.prj new file mode 100644 index 0000000..0a75562 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satriani Scream.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Satriani Scream.tab +DELAYS=(0,500) diff --git a/guitar/tabs/Joe Satriani/Satriani Scream.tab b/guitar/tabs/Joe Satriani/Satriani Scream.tab new file mode 100644 index 0000000..3fa30d3 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satriani Scream.tab @@ -0,0 +1,25 @@ +Satriani Scream + + +In this effect you are trying to get that screaming sound Satriani is notable for. What you do is press your whammy bar down with your LEFT hand and pinch harmonics open B and G with your right hand. Slowly release the bar with your left hand and hopefully you will accomplish the effect. If you've never seen it done, watch the G3 concert and satch does it while playing cool Number 9. Have fun with this effect. + + + +Key = None- Effect + + + E |-------------------------------|----------------------------------| + B |---<0>-------------------------|----------------------------------| + G |---<0>-------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + diff --git a/guitar/tabs/Joe Satriani/Satriani Style Riff.tab b/guitar/tabs/Joe Satriani/Satriani Style Riff.tab new file mode 100644 index 0000000..e8c72d7 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satriani Style Riff.tab @@ -0,0 +1,21 @@ +Satriani Style Riff + + +Just a little Satriani style riff to get the Jam Session started. +Use Crunchy lead Distortion. Faster the better, but let the open B ring throughout the riff. + + +Key = D + + + + + + E |-------------2------------2----|---2-2--4---4--2~-----------------| + B |---0h2p0---0----0h2p0---0------|---0-0--0---0--0~-----------------| + G |---------4------------4--------|------------4--4~-----------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + diff --git a/guitar/tabs/Joe Satriani/Satriani sweep.tab b/guitar/tabs/Joe Satriani/Satriani sweep.tab new file mode 100644 index 0000000..b513010 --- /dev/null +++ b/guitar/tabs/Joe Satriani/Satriani sweep.tab @@ -0,0 +1,31 @@ +Satriani sweep + + +The trick is a cool AMinor arpeggio A´la Joe Satriani. + +D=downward pick +U=Upward pick + + + +Key = Aminor + + + + + + E |---------------------------10--------------------------------------- + B |-----------------------8--------|----------------------------------| + G |--------------------5-----------|----------------------------------| + D |----------------9---------------|----------------------------------| + A |---------7----------------------|----------------------------------| + E |----5---------------------------|----------------------------------| + d d d d d d + E |---10--------------------------------------------------------------- + B |--------8-----------------------|----------------------------------| + G |------------5-------------------|----------------------------------| + D |----------------9---------------|----------------------------------| + A |--------------------7-----------|----------------------------------| + E |------------------------5-------|----------------------------------| + U U U U U U + diff --git a/guitar/tabs/Joe Satriani/The Extremist.prj b/guitar/tabs/Joe Satriani/The Extremist.prj new file mode 100644 index 0000000..9ff2c31 --- /dev/null +++ b/guitar/tabs/Joe Satriani/The Extremist.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=The Extremist.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16) diff --git a/guitar/tabs/Joe Satriani/The Extremist.tab b/guitar/tabs/Joe Satriani/The Extremist.tab new file mode 100644 index 0000000..bc88706 --- /dev/null +++ b/guitar/tabs/Joe Satriani/The Extremist.tab @@ -0,0 +1,99 @@ +The Extremist + + +Artist: Joe Satriani +Album: The Extremist The whole song is triplets except for a few notes. It is entirely arpeggiated chords. So it is easiest to play it that way. + + +Key = + + + Repeat this once + E +--------0-----------0-----------0-----------0-----------+ + B |------3---3-------3---3-------6---6-------3---3---------| + G |----5-------5---4-------4---7-------7---5-------5-------| + D |--7-----------3-----------6-----------7-----------------| + A |--------------------------------------------------------| + E +--------------------------------------------------------+ + + + Repeat this once + E +------8-----------5-------------------------------------+ + B |----6---6-------5---5-----------------------------------| + G |--9-------9---5-------5---------------------------------| + D |7-----------7-------------------------------------------| + A |--------------------------------------------------------| + E +--------------------------------------------------------+ + + + E +--------------------------------------------------------+ + B |------5----------5-----------5-----------5--------------| + G |----5---5------5---5-------7---7-------7---7------------| + D |--7-------7--7-------7---6-------6---6-------6----------| + A |8----------8-----------8-----------8--------------------| + E +--------------------------------------------------------+ + + + E +--------------------------------------------------------+ + B |------5----------5--------------------------------------| + G |----5---5------7---7------------------------------------| + D |--7-------7--6-------6----------------------------------| + A |7----------7-----------0-2-3-----2-0--------------------| + E +-----------------------------0-4------------------------+ + + + E +------0-----------0-----------0-----------0-------------+ + B |----3---3-------3---3-------6---6-------3---3-----------| + G |--5-------5---4-------4---7-------7---5-------5---------| + D |------------3-----------6-----------7-------------------| + A |0-------------------------------------------------------| + E +--------------------------------------------------------+ + + + E +------8----------8------------7-------------7-----------+ + B |----6---6------6---6-------10---10-------10---10--------| + G |--9-------9--9-------9---9---------9---9---------9------| + D |0----------0--------------------------------------------| + A |--------------------------------------------------------| + E +---------------------- 8-------------8------------------+ + + + E +--------------------------------------------------------+ + B |------5-----------5-----------6-----------5-------------| + G |----7---7-------7---7-------7---7-------5---5-----------| + D |--7-------7---6-------6---7-------7---7-------7---------| + A |------------------------0-----------0-------------------| + E +7-----------0-------------------------------------------+ + + + E +-------8----------8------------7-------------7----------+ + B |-----6 --6------6---6-------10---10-------10---10-------| + G |---9-------9--9-------9---9---------9---9---------9-----| + D |-0----------0-------------------------------------------| + A |--------------------------------------------------------| + E +------------------------8-------------8-----------------+ + + + E +--------------------------------------------------------+ + B |----------12----------9---------6--------3--------------| + G |-------10----10-----7---7-----4---4----1---1------------| + D |----12------------9---------6--------3------------------| + A |-11-------------8---------5--------2--------------------| + E +--------------------------------------------------------+ + + + E +--------------------------------------------------------+ + B |-------3---------0-------------1-----------0------------| + G |-----4---4-----1---1---------2---2-------1---1----------| + D |---3---------0-------0-----2-------2---2-------2--------| + A |--------------------------------------------------------| + E +-4---------1-----------0-------------0------------------+ + + + E +------------------------------5--7--8-------------------+ + B |------------------5---------5---------------------------| + G |------5---------5---5-----5------7--9-------------------| + D |----7---7-----7-------7-7-------------------------------| + A |--7-------7-7-------------------------Tapped------------| + E +5-------------------------------------5-----------------+ + diff --git a/guitar/tabs/Joe Satriani/The Forgotten.prj b/guitar/tabs/Joe Satriani/The Forgotten.prj new file mode 100644 index 0000000..1557865 --- /dev/null +++ b/guitar/tabs/Joe Satriani/The Forgotten.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=The Forgotten.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16) +TEMPO=651578 diff --git a/guitar/tabs/Joe Satriani/The Forgotten.tab b/guitar/tabs/Joe Satriani/The Forgotten.tab new file mode 100644 index 0000000..75adcd1 --- /dev/null +++ b/guitar/tabs/Joe Satriani/The Forgotten.tab @@ -0,0 +1,23 @@ +Joe Satriani: The Forgotten + + +I just love this part of the solo. It's a great hartfelt, emotional section that displays technical tricks but maintains a good melody at the same time. + + +Key = C minor + + + E |--15b(16)rb15-13--13-----------|----------------------------------| + B |X---------------16---16p13-----|----------------------------------| + G |X------------------------------|-15b(17)rb15---13h15p12-----------| + D |X------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |-----------------------11------|15/20p15--------------------------| + B |-----13b15-11h15-16-13---------|--------16-16---------------------| + G |13p12--------------------------|-------------17/12----------------| + D |-------------------------------|------------------10--------------| + A |-------------------------------|--------------------13/15~etc.----| + E |-------------------------------|----------------------------------| + diff --git a/guitar/tabs/Joe Satriani/The Mighty Turtle Head - Joe Satriani.tab b/guitar/tabs/Joe Satriani/The Mighty Turtle Head - Joe Satriani.tab new file mode 100644 index 0000000..2cbbd2f --- /dev/null +++ b/guitar/tabs/Joe Satriani/The Mighty Turtle Head - Joe Satriani.tab @@ -0,0 +1,327 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Date: Mon, 6 Nov 1995 17:57:55 -0500 +From: Joel +Subject: TAB: the_mighty_turtle_head.tab by joe satriani + + "The Mighty Turtle Head" - Joe Satriani + from the album - "Time Machine + Transcribed by: Patrick Mabrey + Tabbed by: Shpank +This TAB transcription was created using TAB MASTER version 1.0. + +-------------------------------------------------------------------- + +Intro: + h p p h p p + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:---------------------------------------------------------------------------| +D:2--4-5-4-2--4--2-----------------------------------------------------2~~~--| +A:------------------4--------------------2--4-5-4-2--4--2------------------4-| +E:---------------------0-----1--2--3--4--------------------4--3--2--0--------| + + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:-----------------------------------------------------------------------9~~~| +D:---2--4-5-4-2--4--2--------------------------------------------------------| +A:---------------------4-------------------2--4-5-4-2--4--2------------------| +E:------------------------0----1--2--3--4--------------------4--3--2--0------| + + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:~-------------------------------------------------------------------------9| +D:-11---2--4-5-4-2--4--2-----------------------------------------------------| +A:------------------------4-------------------2--4-5-4-2--4--2---------------| +E:---------------------------0----1--2--3--4--------------------4--3--2--0---| + + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:~~~------------------------------------------------------------------------| +D:---11-\2--4-5-4-2--4--2----------------------------------------------------| +A:-------------------------4------------------2--4-5-4-2--4--2---------------| +E:----------------------------0---1--2--3--4--------------------4--3--2--0---| + + + + Main melody. + +e:--------------------------------------------------------|------------------| +B:---------9--9--9--9----9--9--9--9--9---9---9------------|------------------| +G:---------9--9--9--9----9--11-11-11-11--11--9------------|------------------| +D:---9-----9--9--9--9----------9-------------9--11-----11-|-------11------9--| +A:--------------------------------------------------------|------------------| +E:---9--9-------------------------------------------------|-9--9-----9-9-----| + + + + b(.5) s + +e:--------------------------------------------------------2------------------| +B:-----------------------------------------0--0--0--------------0------------| +G:---------------8-8b(9)----------------3--------------3-----3---------------| +D:11-------9-/11---------9--11-/x-------4-----------4----------------------11| +A:--------------------------------------4------------------------------------| +E:---7--7-------------------------0--2-----------------------------0--9--9---| + + + + b(.5) b(.5) b(.5) + (2nd time - fill 1) +e:---------------------------------------------------------------------------| +B:--------------------------------11b(12)-11-----11--9--11--11b(12)----11b(12| +G:-----------------------8--9--11-11b(12)-11-----11--9--11--11b(12)----11b(12| +D:-----9--11-------9-/11------------------11-----11--------------------------| +A:---------------------------------------------------------------------------| +E:--9--------7--7------------------------------------------------------------| + + + + r b(.5) r b(.5)r + +e:---------------------------------------------------------------------------| +B:-b(11)11b(12)b(11)-9-------------------------------------------------------| +G:-b(11)11b(12)b(11)-9----------------------------------------8--8b(9)b(8)---| +D:----------------------11---11-------11----9--11-------9-/11---------------9| +A:---------------------------------------------------------------------------| +E:-------------------------9----9--9-----9--------7--7-----------------------| + + + + p s + (2nd time - fill 2) +e:---------------------------------------------------------------------------| +B:-----------------------------------------------------------------------9---| +G:------------------------------------------------------------------8--9-11b(| +D:--11---9-8--------------------------------11----9--11-------9-/11----------| +A:------------9-7---9---7-9-7------------------------------------------------| +E:----------------------------9-7--9--9--9-----9--------7--7-----------------| + + + + b(1) b(1) b(1) p p b(.25) + +e:----9------------9-----------9----------9----9-12-9----9-------------------| +B:------12b(14)-----9-12b(14)---9-12b(14)---12--------12---9-12-9--------9---| +G:13)-------------------------------------------------------------11b(12)--12| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + Melody 2. + s s s s + +e:---------|--9---9-9-9--111111111111121212121214-14-14-14-14-14-16-16-16-16-| +B:---------|-----------------------------------------------------------------| +G:-11-9-/x-|--6---6-6-6--8-8-8-8-8-8/9-9-9-9-9/11-11-11-11-11-11/13-13-13-13-| +D:---------|-----------------------------------------------------------------| +A:---------|-----------------------------------------------------------------| +E:---------|-----------------------------------------------------------------| + + + + s s s s s + +e:16-17-17-17-17-17-19-19-19-19-17-17-17-16-16-16-14-14-14-14-14-14-16-16-16-| +B:---------------------------------------------------------------------------| +G:13/14-14-14-14-14/16-16-16-16\14-14-14-13-13-13\11-11-11-11-11-11/13-13-13-| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + s s s s s + +e:16-16-14--121212-1111119--9--9-9-9-11-11-11111111121212121214-14-14-14-14-1| +B:---------------------------------------------------------------------------| +G:13-13\11--9-9-9--8-8-8\6--6--6-6-6/8--8--8-8-8-8/9-9-9-9-9/11-11-11-11-11-1| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + s + +e:4-16-16-16-16-16-16--14-14-14--14--14--1212121212-12----11-1111111111-12121| +B:--0--0--0--0--0--0---0--0--0---0---0---0-0-0-0-0--0--0--0--0-0-0-0-0--0-0-0| +G:1/13-13-13-13-13-13--11-11-11--11--11--9-9-9-9-9--9-----8--8-8-8-8-8--9-9-9| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + s s s s + +e:212121212-1212-1214-14-14-14-1212-111111-9-7--7--7--9--9--9------9--9------| +B:-0-0-0-0--0---------0--0-----0-0--0-0-0-------------0--0--0------0--0------| +G:-9-9-9-9--9-9--9/11-11-11-11\9-9--8-8-8--6\4--4--4/-6--6--6------6--6------| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:-----------------------------------------------------------------------9-9-| + + + + s s s + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:---------------------------------------------------------------------------| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:-9-9--9--9--9--9--9--9--9--9-7--8--9--7--8--9--16\x-x-7---8-9-7-8-9--/15\--| + +Between 2nd verse and solo: (repeat) + +E----------------------------------------------------------------------------- +B----------------------------------------------------------------------------- +G----------------------------------------------------------------------------- +D----------------------------------------------------------------------------- +A-----------------------------------x-x-x-2---3-4-2-3-4--x-x-x-2---3-4-2-3-4-- +E-0---1-2-0-1-2-2-x-x-0---1-2-0-1-2------------------------------------------x + + + Guitar Solo: + b(1) b(1) b(1) b(1) b(1) b(1) + +e:----|----------------------------------------------------------------------| +B:----|------------7---------10--------7-10------------7-10-------7-10-------| +G:----|---9b(11)-----9b(11)----9b(11)-------9b(11)----------9b(11)-------11b-| +D:----|--x--------------------------------------------------------------x----| +A:----|-x--------------------------------------------------------------x-----| +E:9-9-|----------------------------------------------------------------------| + + + + p.h. b(1) b(1) b(1) b(1) b(1) + slow release +e:-----------------------------------2---------2----------2-5-2-----2-5-2---2| +B:-------------------------------------5-2---2---5-2----2-2-5-2-------5-2---2| +G:----------b(11)--9---9--9--9\--4b(6)-----4b(6)-----4b(6)------4b(6)-----4b(| +D:-------------------9-------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + p p p p p p p p p p p p p p p p p p p p + +e:-5-------------------------------------------------------------------------| +B:-5---2-4-2-0-2-5-4-2-0-2-5-4-2-0-2-5-4-2-0-2-5-4-2-0-2-5-4-2-0-2-5-4-2-0-2-| +G:6)-4-----------------------------------------------------------------------| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + p p p p s b(.25) b(1) + +e:---------------------------------------------------------------------------| +B:4-2-0-2--------------------------------------------------------------------| +G:--------5-4-2--------------------14-16b(18)-----------------14--16-14------| +D:--------------4-/x---14b(15)--16-------------------14~~~-16-----------16~~~| +A:-------------------xx------------------------------------------------------| +E:-------------------xx------------------------------------------------------| + + + + b(1) b(1) b(1) b(1) b(1) p + +e:-----------------------------------------------17b(19)------14--------17-14| +B:----------------------17-------17-17----------x---------------17b(19)------| +G:-------------14-16b(18)--16b(18)--16b(18)----------------------------------| +D:~~-14~~~~-16--------------------------------x------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + b(1) b(1) b(1) p b(1) b(1) p b(1) + +e:-------14-------------14------14-17-14------14-------14-17-14----------14--| +B:-17b(19)--17b(19)-------17b(19)-------17b(19)--17b(19)--------17-17b(19)--1| +G:---------------------------------------------------------------------------| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + b(1) p b(1) b(1) s Backwards Guitar: (????????) + +e:-----14----14-17-14-------14-0-19b(21--\-|-------------------------------|-| +B:7b(19)--17----------17b(19)--------------|-------------------------------|-| +G:-----------------------------------------|-------------------------------|-| +D:-----------------------------------------|-------------------------------|-| +A:-----------------------------------------|-------------------------------|-| +E:-----------------------------------------|-------------------------------|-| + + + + Fill 1. b(.5) p.h. Fill 2. + +e:------------------------9---------------------------------------|----------| +B:-11--9--9--7--9--9---12---12----11-11b(12)-9--------------------|----------| +G:-11--9--9-----11-11----------11----11b(12)-9--------------------|----------| +D:-11-----9----------------------------------9-----11---9-11-11---|----9-/11-| +A:----------------------------------------------------------------|----------| +E:----------------------------------------------9-----9---------7-|--7-------| + + + + Ending. + +e:-----------------------9-------9-------9------9---------|------------------| +B:----------9---9------9------12------12---9-12----12-----|------------------| +G:8-9-11b(12)-9-11b(13)----11------11------------------11-|------------------| +D:--------------------------------------------------------|------------------| +A:--------------------------------------------------------|--------------9---| +E:--------------------------------------------------------|--7-7-7-7-7-7-----| + + + + (play 4 times) + +e:--------------------------------------|-------------------------------| +B:--------------------------------------|-------------------------------| +G:--------------------------------------|-------------------------------| +D:--------------------------------------|-------------------------------| +A:--8-----7---------------5-----7---5---|----------------5-----7---5----| +E:7-----7-----7-7-7-7-7-7-----7-------7-|----7-7-7-7-7-7-----7-------7--| + +Notation: +h - hammer-on +p - pull-off +p.h. - pinched marmonic +p.m. - palm mute +b - bend (number in () refers to degree and what fret it would be too.) +r - release (" ") +x - rake or unknown point +~ - tremelo + +Play through again with main and melody 2 and then to the ending. there +is about a 4 or 5 measure pause for synthesizer, then play the ending. +any comments, e-mail me to: joel@mail.dmv.com. thanks...... +--=====================_626407214==_-- + + + diff --git a/guitar/tabs/Joe Satriani/Up In The Sky.prj b/guitar/tabs/Joe Satriani/Up In The Sky.prj new file mode 100644 index 0000000..fdc429d --- /dev/null +++ b/guitar/tabs/Joe Satriani/Up In The Sky.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Up In The Sky.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16) diff --git a/guitar/tabs/Joe Satriani/Up In The Sky.tab b/guitar/tabs/Joe Satriani/Up In The Sky.tab new file mode 100644 index 0000000..d066d9d --- /dev/null +++ b/guitar/tabs/Joe Satriani/Up In The Sky.tab @@ -0,0 +1,559 @@ +Up In The Sky by Joe Satriani from Crystal Planet + +TAB'd by Frank A. Taylor - mork@sonic.net + +Get all the latest Satriani TAB's at my Satch TAB Page: +http://www.sonic.net/mork/satriani.html + +Hope this helps you to play this most rocking tune! + +Frank + +Up In The Sky (Intro) + +All these notes are harmonics, place your finger above the fret +resting on the string but not pushing down to sound the notes + +Repeat these two bars 4 times. + +E|--12----------7-----------------5--|--12-------------------5--| +B|------12---------7-----7-----5-----|------12------7-----5-----| +G|----------12--------7-----5--------|----------12-----5--------| +D|-----------------------------------|--------------------------| +A|-----------------------------------|--------------------------| +E|-----------------------------------|--------------------------| + +Difficult to get this harmonic part where it goes from that 7th fret +B to those three 5th fret harmonics, best to practice slow and have your +ring finger play the 7th and your first finger barre the 5th fret. Play +the 7th fret B string on an upstroke of the pick and the 5th's by sweeping +down - hope that helps! + +E|-----------|--------------------------------------| +B|-----------|--------------------------------------| +G|-----------|--------------------------------------| +D|-----------|-----------------5--X--X--7--X--X-----| +A|-----------|--------7--X--X-----------------------| +E|------17/--|--0--0--------------------------------| + + ~~~~ +E|---------------------------------| +B|---------------------------------| +G|-------7----7--------------------| +D|--/9------------9/7--5-----------| +A|------------------------7--7-----| +E|---------------------------------| + + ~~~~ ~~~~~~ +E|---------------------------------------|------------------| +B|---------------------------------------|------------------| +G|---------------------------------------|------------------| +D|-------------0--0--5---X--X--7--X--X---|--7---------------| +A|--(7)----/7----------------------------|-----5----5-------| +E|---------------------------------------|------------------| + + P +E|--------------------------------------|------------------- +B|--------------------------------------|------------------- +G|--------------------------------------|--------7----9--7-- +D|-----------------5--X--X--7--X--X-----|----/9------------- +A|--------7--X--X-----------------------|------------------- +E|--0--0--------------------------------|------------------- + + + sh~~~~~~~~~~~~~ +E-----------------------|-------------------------------------| +B-----------------------|-------------------------------------| +G-----------------------|-------------------------------------| +D--9/7--5---------------|-------------0--0--5--X--X--7--X--X--| +A----------7---7--------|--(7)----/7--------------------------| +E-----------------------|-------------------------------------| + + ~~~~~~~~ +E|-----------------------| +B|-----------------------| +G|-----------------------| +D|-----------------------| +A|--4>(6)>(4)--4---------| +E|-----------------------| + + ~~~~~~~~ P ~~~~~~ +E|------------------------------|-------------------------------| +B|------------------------------|-------------------------------| +G|--------11>(12)--11--------9--|--9--7-------------------------| +D|------------------------------|--------12--9--9-------9--5/7--| +A|------------------------------|-------------------------------| +E|--0--0------------------------|-------------------------------| + + ~~~~~~~~ P ~~~~~~ +E|-------------------------------|------------------------| +B|-------------------------------|------------------------| +G|---------11>(12)--11--------9--|--9--7------------------| +D|-------------------------------|--------12--------------| +A|--7--7-------------------------|------------12--12------| +E|-------------------------------|------------------------| + + ~~~~~~~~ P ~~~~~~ +E|------------------------------|-------------------------------| +B|------------------------------|-------------------------------| +G|--------11>(12)--11--------9--|--9--7-------------------------| +D|------------------------------|--------12--9--9-------9--5/7--| +A|------------------------------|-------------------------------| +E|--0--0------------------------|-------------------------------| + + ~~~~~~~~ P ~~~~~~ +E|-------------------------------|-----------------------------| +B|-------------------------------|-----------------------------| +G|---------11>(12)--11--------9--|--9--7-----------------------| +D|-------------------------------|--------12-------------------| +A|--7--7-------------------------|------------12--12------12/--| +E|-------------------------------|-----------------------------| + + +E|--------------------------------------| +B|--------------------------------------| +G|------------------12--X--X--14--X--X--| +D|--------14--X--X----------------------| +A|--------------------------------------| +E|--0--0--------------------------------| + + +E|-------------------------------------| +B|-------15----15----------------------| +G|--/16------------16/14--12-----------| +D|----------------------------14--14/--| +A|-------------------------------------| +E|-------------------------------------| + + ~~~~ ~~~~ ~~~~~~ +E|-------------------------------------|----------------------------| +B|-------------------------------------|----------------------------| +G|---------12--12--12--X--X--14--X--X--|--14------------------------| +D|----/14------------------------------|------12----12------12------| +A|-------------------------------------|----------------------------| +E|-------------------------------------|----------------------------| + + +E|--------------------------------------| +B|--------------------------------------| +G|------------------12--X--X--14--X--X--| +D|--------14--X--X----------------------| +A|--------------------------------------| +E|--0--0--------------------------------| + + P +E|-----------------------------------------| +B|-------15----17--15----------------------| +G|--/16----------------16/14--12-----------| +D|--------------------------------14--14/--| +A|-----------------------------------------| +E|-----------------------------------------| + ^ + Should be able to get this + pull off with your pinkie. + +E|-----------------------------------| +B|-----------------------------------| +G|---------------12--X--X--14--X--X--| +D|----/14--X--X----------------------| +A|-----------------------------------| +E|-----------------------------------| + + Let Ring----------------------] +E|---------------------------------| +B|----------------10------10-------| +G|---------------------------------| +D|--11>(12)>(11)---------------11--| +A|---------------------------------| +E|---------------------------------| + + ~~~~~~~~ P P ~~~~~~~~ +E|--------14>(15)--14--------12--|--14--12--10--------------| +B|-------------------------------|--------------12--12------| +G|-------------------------------|--------------------------| +D|-------------------------------|--------------------------| +A|-------------------------------|--------------------------| +E|--0--0-------------------------|--------------------------| + + ~~~~ ~~~~~~~~ P P ~~~~~~~~~~~~ +E|---------14>(15)--14--------12--|--14--12--10------------------| +B|--(12)--------------------------|--------------10--10----------| +G|--------------------------------|------------------------------| +D|--------------------------------|------------------------------| +A|--------------------------------|------------------------------| +E|--------------------------------|------------------------------| + + ~~~~ ~~~~~~~~ P P ~~~~~~~~ +E|------------14>(15)--14--------12--|--14--12--10--------------| +B|--(10)-----------------------------|--------------12--12------| +G|-----------------------------------|--------------------------| +D|-----------------------------------|--------------------------| +A|-----------------------------------|--------------------------| +E|-----------------------------------|--------------------------| + + ~~~~ ~~~~~~~~ P P ~~~~~~~~ +E|---------14>(15)--14--------12--|--14--12--10-------------------| +B|--(12)--------------------------|--------------10--10-----------| +G|--------------------------------|-------------------------------| +D|--------------------------------|-------------------------------| +A|--------------------------------|--------------------------19/--| +E|--------------------------------|-------------------------------| + + +E|-----------------------------------|--------------------------| +B|--------8--------8--8-----8-----8--|-----8-----8-----8-----8--| +G|--------7--------7--7-----7-----7--|-----7-----7-----7-----7--| +D|-----------------------------------|--------------------------| +A|-----7-----7--7--------7-----7-----|--7-----7-----7-----7-----| +E|--0--------------------------------|--------------------------| + + +E|-----------------------------|---------------------------------| +B|--8-----8-----8-----8-----8--|--X--8----8----8--8--8--8--8-----| +G|--7-----7-----7-----7-----7--|--X--7----7----7--7--7--7--7-----| +D|-----------------------------|---------------------------------| +A|-----7-----7-----7----7------|---------------------------------| +E|-----------------------------|---------------------------------| + +This next part is played throughout slightly differently and usually +more rhythmically than I have it here - but here's the basic form! + +E|-----------------------|------------------------| +B|-----------------------|------------------------| +G|--11----9---------11/--|--4----4------4/--------| +D|--9-----9---------9/---|--0----0----------0--0--| +A|-----------------------|------------------------| +E|--7----------7---------|--3---------------------| + ^ ^ + To get these shapes, your first finger when playing the E string, + slightly dampens the A string, so you can play this like a chord. + + +E|-----------------------|-----------------------------| +B|-----------------------|-----------------------------| +G|--14-----12-----11-----|--9--------------------------| +D|------0------0------0--|--7------7--11<(12)----11/9--| +A|-----------------------|--0--------------------------| +E|-----------------------|-----------------------------| + + +E|-----------------------------------| +B|-----------------------------------| +G|--11----11-----9---------11--------| +D|--9------------9---------9---------| +A|-----------------------------------| +E|--7---------7-------7----------7/--| + + +E|--------------------|--------------------| +B|--------------------|--------------------| +G|--4----4---4--4-----|--7-----9-----11/9--| +D|--0----0---0--0--0--|-----0-----0--------| +A|--------------------|--------------------| +E|--3-----------------|--------------------| + + +E|----------------------------| +B|----------------------------| +G|--9-------------------------| +D|--7----7---7---9/11---11/9--| +A|--0----0---0----------------| +E|---------------7/9----9/7---| + + +E|---------------------------|----------------------| +B|---------------------------|----------------------| +G|--11--------9---------11/--|--4----4-------4/-----| +D|--9---------9--------------|--0----0----0------0--| +A|---------------------------|----------------------| +E|--7-----7--------7---------|--3-------------------| + + +E|-----------------------|-----------------------------| +B|-----------------------|-----------------------------| +G|--14-----12-----11-----|--9------11---------12-------| +D|------0------0------0--|--7------------7----------9--| +A|-----------------------|--0--------------------------| +E|-----------------------|-----------------------------| + + *** +E|---------------------------|--------------------------| +B|---------------------------|--------------------------| +G|--11--------9----9----11/--|--4---4---4----4--4-------| +D|--9---------9----9----9-/--|--0---0---0----0--0----0--| +A|---------------------------|--------------------------| +E|--7-----7-------------7-/--|--3-----------------------| + + t<0.5 +E|---------------------|-------------------------| +B|---------------------|-------------------------| +G|--7-----9-----11-----|--9----9--9------9----X--| +D|-----0-----0------0--|--7----7--7------7----X--| +A|---------------------|--0----------------------| +E|---------------------|-------------------------| + +Indicates half fret dip of the trem bar. + + H +E|--10---X--10----X--10--12--12---12--12--12----| +B|--10---X--10----X--10-----------10--10--10----| +G|----------------------------------------------| +D|----------------------------------------------| +A|----------------------------------------------| +E|----------------------------------------------| + +E|--10---10--10--10--10---12---12--|--12---12--12--12--12---12--12--| +B|--10---10--10--10--10---10---10--|--10---10--10--10--10---10--10--| +G|------------------------------------------------------------------| +D|------------------------------------------------------------------| +A|------------------------------------------------------------------| +E|------------------------------------------------------------------| + +Repeat these two bars 4 times. + +E|--12----------7-----------------5--|--12-------------------5--| +B|------12---------7-----7-----5-----|------12------7-----5-----| +G|----------12--------7-----5--------|----------12-----5--------| +D|-----------------------------------|--------------------------| +A|-----------------------------------|--------------------------| +E|-----------------------------------|--------------------------| + +Solo + +Let ring------------] t<0.5 +E|-----------------------------------| +B|--16-------------------------------| +G|--15-------------------------------| +D|------------0--------0----(0)------| +A|-----------------------------------| +E|-----------------------------------| + + + t<0.5 t<0.5 t<0.5 +E|------------------------------------------------| +B|------------------------------------------------| +G|------------------------------------------------| +D|--(0)--(0)----------(0)-----(0)-----------------| +A|---------------------------------------17/------| +E|---------------------------------------17/------| + + + ~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +E|------------------------------|--------------------------| +B|------------------------------|--------------------------| +G|--/10----------12/5---5/7-----|--(7)--7----7--7----7-----| +D|------------------------------|--------------------------| +A|------------------------------|--------------------------| +E|------------------------------|--------------------------| + + H H H H P P P P +E|-------------------------------------------| +B|-------------------------------------------| +G|-------------3--4--6----4--3/4----8--6--4--| +D|----3--4--6--------------------------------| +A|-------------------------------------------| +E|-------------------------------------------| + + H P ~~~~~~ +E|----------------------------------| +B|----------------------------------| +G|----------------------------------| +D|--4--6----6--4--------------------| +A|----------------6---6/9/4-----/6--| +E|----------------------------------| + + + P P P H +E|------------------------------------------| +B|------------------------------------------| +G|--6>(8)---6--4---6--4---------------------| +D|-----------------------6--4---------------| +A|-----------------------------6--4---4--6--| +E|------------------------------------------| + + P P.M. ~~~~ ~~~~ ~~~~ ~~~~ +E|-------------------------------|-------------------------------| +B|-------------------------------|-------------------------------| +G|-------------------------------|---------------5-----/7-----7--| +D|--4---6--4---6---4---6-----6/--|-----7-----7-------------------| +A|-------------------------------|--0----------------------------| +E|-------------------------------|-------------------------------| + ^ + Next part played with an octave doubler, which + adds a 2nd guitar part one octave higher. + + ~~~~ ~~~~ ~~~~~ ~~~~~ +E|-----------------------------|--8--8--8--8--10--- +B|----------------8-----10-----|------------------- +G|--9--9--9----9---------------|------------------- +D|-----------------------------|------------------- +A|-----------------------------|------------------- +E|-----------------------------|------------------- + + P p p ~~~~~~ +E--12--12--12--12--15----|--17>(19)>(17)--15-----------------------| +B------------------------|--------------------17--15--17--15-------| +G------------------------|-----------------------------------17/---| +D------------------------|-----------------------------------------| +A------------------------|-----------------------------------------| +E------------------------|-----------------------------------------| + + ~~~~~~~ P +E|----21>(24)----21-------18----18--21--|--18-- +B|---------------------------21---------|------ +G|--------------------------------------|------ +D|--------------------------------------|------ +A|--------------------------------------|------ +E|--------------------------------------|------ + + P +E------18--------------18---------------------------- +B--21------21--21--18------18--------------------18-- +G------------------------------21--20---21---20------ +D---------------------------------------------------- +A---------------------------------------------------- +E---------------------------------------------------- + + P +E------|------------------------------------------------------| +B------|------18---------18---------18---------18---------18--| +G--21--|--20-----21--20-----21--20-----21--20-----21--20------| +D------|------------------------------------------------------| +A------|------------------------------------------------------| +E------|------------------------------------------------------| + + ~~~~~~~~~~ +E|----------------------------------| +B|--21>(23)-------------------------| +G|----------------------------------| +D|----------------------------------| +A|----------------------------------| +E|--------------------X/------------| + ^ +Double octaver off ^ Pick slide + + Harm--] +E|---------------------------------|-------------------0--| +B|---------------------------------|-------7-----0--------| +G|---------------------------------|----------------------| +D|------------------------9--------|--7-------------------| +A|-------------7-------------------|----------------------| +E|--0------------------------------|----------------------| + + +Next 34 bars I think it is are pretty much repeats of whats before +that you can piece together, up until the part marked with a *** - +then it jumps to here! + +E|------------------------|------------------------------| +B|------------------------|------------------------------| +G|--7--------7---7--7--7--|--7/9--9--9----9/11----11/----| +D|--0----0---0---0--0--0--|--0------------0--------------| +A|------------------------|------------------------------| +E|------------------------|------------------------------| + + +E|------------------------------| +B|---------10------10-----------| +G|--9------9-------9------------| +D|--7------7-------7------0--0--| +A|------------------------------| +E|------------------------------| + + +For this next part you have to strum these shapes so +make sure you mute that B stringwith the side of your finger! + +E|--17---X--17----17--17---17--17--17--17---17--17--| +B|--------------------------------------------------| +G|--14---X--14----14--14---14--14--14--14---14--14--| +D|--------------------------------------------------| +A|--------------------------------------------------| +E|--------------------------------------------------| + +E|--17/19--19--19--19--19--19---19--19--19--19--| +B|----------------------------------------------| +G|--14/16--16--16--16--16--16---16--16--16--16--| +D|----------------------------------------------| +A|----------------------------------------------| +E|----------------------------------------------| + + +E|--19/21--21--21--21--21---21--21--21--21--21--| +B|----------------------------------------------| +G|--16/18--18--18--18--18---18--18--18--18--18--| +D|----------------------------------------------| +A|----------------------------------------------| +E|----------------------------------------------| + + + +E|--22---22--22--22---22--22--22--22--22--22--22--22--22--22--| +B|------------------------------------------------------------| +G|--19---19--19--19---19--19--19--19--19--19--19--19--19--19--| +D|------------------------------------------------------------| +A|------------------------------------------------------------| +E|------------------------------------------------------------| + + + +E|--22--22--22--22--22--22--22--22--22--22-------------| +B|--------------------------------------------20---20--| +G|--19--19--19--19--19--19--19--19--19--19-------------| +D|-----------------------------------------------------| +A|-----------------------------------------------------| +E|-----------------------------------------------------| + + + H +E|-----------------------------------|--------0-----------0------| +B|--19---19----17---17----19---19----|-----------15--17----------| +G|-----------------------------------|--19-------------------16--| +D|-----------------------------------|---------------------------| +A|-----------------------------------|---------------------------| +E|-----------------------------------|---------------------------| + + +Let ring----------------------------------------------------- +E|--0--0------0--0------0--0--|------0--0------0--0------0--| +B|----------------------------|-----------------------------| +G|--------14--------12--------|--11--------12--------11-----| +D|----------------------------|-----------------------------| +A|----------------------------|-----------------------------| +E|----------------------------------------------------------| + +-------------------------------------------------] +E|--0-----0--0------------|------------0------0------| +B|------------------------|---------0---------0------| +G|-----9--------7/9--9/4--|--4-----------------------| +D|------------------------|--------------------------| +A|------------------------|--------------------------| +E|------------------------|--------------------------| + +Repeat these two bars 4 times. + +E|--12----------7-----------------5--|--12-------------------5--| +B|------12---------7-----7-----5-----|------12------7-----5-----| +G|----------12--------7-----5--------|----------12-----5--------| +D|-----------------------------------|--------------------------| +A|-----------------------------------|--------------------------| +E|-----------------------------------|--------------------------| + + ~~~~~~~~~~~~~~~~~~~~~~~~ +E|----------------------------| +B|----------------------------| +G|--2-------------------------| +D|--2-------------------------| +A|--2-------------------------| +E|--0-------------------------| + ^ + Vibrate with trem bar + + + +Hope you enjoy! Any comments welcome - mork@sonic.net + +Get all my TAB from http://www.sonic.net/mork/satriani.html + +- Frank 12/3/98 + diff --git a/guitar/tabs/Joe Satriani/You're My World.prj b/guitar/tabs/Joe Satriani/You're My World.prj new file mode 100644 index 0000000..8bc39f9 --- /dev/null +++ b/guitar/tabs/Joe Satriani/You're My World.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=You're My World.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16) diff --git a/guitar/tabs/Joe Satriani/You're My World.tab b/guitar/tabs/Joe Satriani/You're My World.tab new file mode 100644 index 0000000..fe068e0 --- /dev/null +++ b/guitar/tabs/Joe Satriani/You're My World.tab @@ -0,0 +1,504 @@ + "You're My World" - Joe Satriani + from the album - "Joe Satriani + Tabbed by: John Burrows + E-mail address: John.Burrows@btinternet.com + + +Well, before I start, I'd just like to say that Joe is one of my favourite guitarists, +and I'm gonna start trying to tab all of the songs from "Joe Satriani" the album , because +I think it's his best one. I know that some people disagree with me on that, but I like +this kind of bluesy stuff. I think that I've tabbed this song accurately, but if anybody +notices anything that doesn't sound quite right, feel free to E-mail me and I'd be glad +to correct it. + +Put this tab into a self-aligning font ( I use Courier , text size 8pt ) for the best effect. + +Please E-mail me with corrections, constructive criticism, thankyou's etc. If I get just one +positive bit of feedback I'll be happy, and I'll quite happily try some of the other songs +from this album. Give me a mail and let me know which ones you'd like me to post the most :) + + + +Rhythm Figure 1 +----------0--------------0-----|--------0-----------|--------0-----------|------ +-------------0--------------0--|--------------0-----|--------------0-----|------ +-------9--------------9--------|-----7-----------7--|-----6-----------6--|------ +----7-----------6--------------|--5-----------------|--7-----------------|------ +-------------------------------|--------------------|--------------------|------ +-------------------------------|--------------------|--------------------|------ + + + +---------0-----------------|--------0--------------0-----|--------0------------- +---------------0-----------|-----------0--------------0--|-----------0---------- +------9-----------9--------|-----9--------------9--------|-----7--------7------- +---6-----------------------|--7--------------6-----------|--5------------------- +---------------------------|-----------------------------|---------------------- +---------------------------|-----------------------------|---------------------- + + + ( end Rhy. Fig 1) (Drum Fill) +|--------------0-----------------|---------0-----------|------------------------ +|--------------------0-----------|---------------0-----|------------------------ +|-----------6-----------6--------|------9-----------9--|---(9)------------------ +|--------7-----------------------|---6-----------------|------------------------ +|--------------------------------|---------------------|------------------------ +|--------------------------------|---------------------|------------------------ + + + This is the lead ( play with Rhy.Fig1) 1 +------||--------------------------------------|--------------------------------- +------||---------------10~~~------------------|--------------------------------- +------||-------------------------9~~~-----(9)\|--7p5--7~~~-----(7)-^-7--(7)----- +------||--------------------------------------|--------------------------------- +------||--------------------------------------|--------------------------------- +------||--------------------------------------|--------------------------------- + + + 1/2 +---------------|------------------------------------|------------------|-------- +---------------|------------------------------------|------------------|--10---- +p5-------------|---------------------------------5-^|--(5)--(5)~~~~~---|-------- +----7~~~p5--7--|--(7)\------5--7-----5--7-----5-----|------------------|-------- +---------------|------------------------------------|------------------|-------- +---------------|------------------------------------|------------------|-------- + + + 1 +---------------------|-----------------------------------------------|---------- +~~~--8~~~------------|-----------------------------------------------|---------- +-----------9~~~--(9)\|--7p5--7~~~-----7-^-7--(7)p5-------------------|---------- +---------------------|-----------------------------7p5--7~~~-----(7)\|-----5---- +---------------------|-----------------------------------------------|---------- +---------------------|-----------------------------------------------|---------- + + + 1/4 +---------------------|---------------------------|------------------------------ +---------------------|---------------------------|------------------------------ +-----------------5-^-|---------------------------|------------------------------ +7-----5--7-----5-----|--7~~~~~~--(7)\------------|------------------------------ +---------------------|---------------------------|------------------------------ +---------------------|---------------------------|------------------------------ + + +With Rhy.Fig.2 ( given at end of song ) +----------------------------------|---------------------------------|----------- +----------------------------------|---------------------------------|----------- +----------------------------------|-----------7~~~------------------|----------- +----------------------------------|-----------------7--(7)p5-----7--|--7-------- +----------------------------------|---------------------------------|----------- +----------------------------------|---------------------------------|----------- + + + With Rhy.Fig.1 +-----------------|-------------------|----------------------|------------------- +-----------------|-------------------|---22-----------------|------------------- +-----------------|-------------------|----------21--(21)\---|--19p17--19-------- +~~~~~~~~~~~~~~~--|--(7)~~~~~~~~~~~~--|----------------------|------------------- +-----------------|-------------------|----------------------|------------------- +-----------------|-------------------|----------------------|------------------- + + + + + 1 1/2 +-------------------------|--------------------------------|--------------------- +-------------------------|--------------------------------|--------------------- +19-^-19--(19)p17---------|---------------------------17-^-|--(17)--------------- +-----------------19--19--|--------17--19--17--19--17------|--------------------- +-------------------------|--------------------------------|--------------------- +-------------------------|--------------------------------|--------------------- + + + 1 +------------|-----------------------------|------------------------------------- +------------|--22-----20------------------|------------------------------------- +------------|----------------21-----------|--19p17--19--------19-^-19----17----- +------------|-----------------------------|------------------------------------- +------------|-----------------------------|------------------------------------- +------------|-----------------------------|------------------------------------- + + + +----------------|--------------------------------------|------------------------ +----------------|--------------------------------------|------------------------ +----------------|------------------------------17------|------------------------ +19--19--(19)---\|-----------17--19--17--19---------19--|--19-------------------- +----------------|--------------------------------------|------------------------ +----------------|--------------------------------------|------------------------ + + + +--------------------|-----------------------------|-----------------------|----- +--------------------|-----------------------------|-----------------------|----- +--------------------|-----------------------------|--19-------------------|----- +---(19)---\---------|-----------------------------|------19--(19)p17--19--|----- +--------------------|-----------------------------|-----------------------|----- +--------------------|-----------------------------|-----------------------|----- + + + W/Riff A +-------------------------|--------------------------------|--------------------- +-------------------------|--------------------------------|--------------------- +-------------------------|--------------------------------|--------------------- +19-----------------------|--(19)--------------------19\---|--------------------- +-------------------------|--------------------------------|--------------------- +-------------------------|--------------------------------|--------------------- + + + 1 +------------|----------------------------------|-----------------------|-------- +------------|----------------------------------|-----------------------|-------- +------------|----------------------------------|-----------------------|-------- +------------|----------------------------------|-----------------------|-------- +------------|--------5--7-----7----------------|-----------------------|-------- +------------|--7----------------------5--(5)-^-|--5--------------------|-------- + + W/Riff B(2 times) + 1 +--------------------------------||------------------------------------|--------- +--------------------------------||------------------------------------|--------- +--------------------------------||--------------19-^----'-(19)p17-----|--19----- +--------------------------------||------------------------------------|--------- +--------------------------------||------------------------------------|--------- +(5)-----------------------------||------------------------------------|--------- + + + 1 +------------------------|----------------------------|-------------------------- +------------------------|----------------------------|-------------------------- +---------------(19)-^---|---------------17-----(17)--|--(17)-------------------- +------------------------|-----------19---------------|--------------------19---- +------------------------|----------------------------|-------------------------- +------------------------|----------------------------|-------------------------- + + + 1 1 +--------------------|----------------------------------|------------------------ +--------------------|----------------------------------|------------------------ +--------------------|-----------19-^-19-^---'-(19)p17--|--19-------------------- +p17-----------------|----------------------------------|------------------------ +--------------------|----------------------------------|------------------------ +--------------------|----------------------------------|------------------------ + + + 1 +------------|-----------------------|------------------------------------------- +------------|-----------------------|------------------------------------------- +(19)-^------|------17--------17-----|--(17)------------------------------------- +------------|--19-------------------|--------------------19p17------------------ +------------|-----------------------|------------------------------------------- +------------|-----------------------|------------------------------------------- + +Rhythm Guitar plays chords above staff (chords given at end of tab) + A(#4) A5 A(#4) +------||-----------------------|--------------------------------------|--------- +------||--------------4--5-----|--4-----5--------------x--4-----4--5--|--5------ +------||-----------------------|--------------------------------------|--------- +------||-----------------------|--------------------------------------|--------- +------||--0--0--0--------------|--------------------------------------|--------- +------||-----------------------|--------------------------------------|--------- + + +W/Rhy.Fig.3 (3 times) A5 A(#4) +---------------------------|--------------------------------------------|------- +4-----4--------------------|-----------4h5p4--4--4----------------------|------- +---6-----------6-----4--6--|------------------------6--4----------------|------- +---------------------------|------------------------------6--4\2--------|------- +---------------------------|--------------------------------------------|------- +---------------------------|--------------------------------------------|------- + + A.H + 1/2 1/2 1/2 1/2 +---------------------------------|--------------------------------------|------- +---------------------------------|--------------------------------------|------- +---------------------------------|--------------------------------------|------- +---------------------------------|--------------------------------------|------- +----4-^-'-^-'-^-'-^-'-4----------|6--------4-----6-----4----------------|------- +---------------------------------|--------------------------------------|------- + + +A(#4) tr tr tr tr tr A5 +------------------------------------------11--(12)-----------|------------------ +---------------------------------9--(10)---------------------|--9h10p9h10p9----- +-------------------------8--(9)------------------------------|------------------ +-----------------6--(7)--------------------------------------|------------------ +---------6--(7)----------------------------------------------|------------------ +-------------------------------------------------------------|------------------ + + + W/Rhy.Fig.1 +-----------------------------||----------------------------------|-------------- +h10p9------------------------||----------------------------------|-------------- +-----------------------------||----------------------------------|--------5----- +-------7-p6h7p6h7p6h7p6h7p6--||--x--x--x-----x-------------x-----|--5--7-------- +-----------------------------||--x--x--x-----x-------------x-----|-------------- +-----------------------------||--x--x--x-----x-----x\------x-----|-------------- + + + 1 1 p1 +------------------|--------------5------------------------|--------------------- +------------------|-----------------5--8------------------|--------------------- +------------5--5--|--7-^-7-^-------------7-^-(7)p5--7--6--|--------------------- +7-----5--7--------|---------------------------------------|--------7------------ +------------------|---------------------------------------|--------------------- +------------------|---------------------------------------|--------------------- + + + 1/4 1 +-------------------------------|------------------------------------|----------- +-------------------------------|------------------------------------|----------- +-------------------------------|----------------17-^-----------19-^-|--(19)----- +5--7-----7--------5------------|--17--19----------------------------|----------- +---------------------------19--|------------------------------------|----------- +-------------------------------|------------------------------------|----------- + + + 1/2 +------------------------------------------|-----------------------20-^---17----- +------------------------------------------|------------------------------------- +(19)-----19--17-----17----------------17--|------------------------------------- +------------------------19-----19---------|------------------------------------- +------------------------------------------|------------------------------------- +------------------------------------------|------------------------------------- + + + +--------------------|----------------------------------------------------------- +------------20--17--|----------------------------------------------------------- +--------------------|--19--19--18------19--17----------------------------------- +--------------------|--------------19----------19--19--------------------------- +--------------------|----------------------------------------------------------- +--------------------|----------------------------------------------------------- + + + (W/Last bar of Rhy.Fig.2) W/Rhy.Fig.2(23/4 ) +---------||-----------------------------------------|--------------------------- +---------||-----------------------------------------|--------------------------- +---------||-----------------------------------------|--------------------------- +---------||--------------(7)--------(7)\------------|--------------------------- +---------||-----------------------------------------|--------------------------- +---------||-----------------------------------------|--------------------------- + + + +------|------------------------------------------|------------------------------ +------|------------------------------------------|------------------------------ +------|-----------19-----19p17-------------------|------------------------------ +------|-------------------------19--(19)p17--19--|--------------(19)--17-------- +------|------------------------------------------|------------------------19---- +------|------------------------------------------|------------------------------ + + + W/Riff A (2 Times) +----------------------------------|------------------------|-------------------- +----------------------------------|------------------------|--5----------------- +----------------------------------|------------------------|--5----------------- +----------------------------------|------------------------|--7----------------- +p17--------------17h19p17\16------|---------------------8--|--8----------------- +------------------------------17--|--17--------------------|-------------------- + + + +|-----------------|-------------------------------------------------|----------- +|--3--------------|-------------------------------------------------|----------- +|--4--------------|-------------------------------------------------|----------- +|--5--------------|--------------------------7-----------7p5h7p5h7--|----------- +|--5--------------|-------------------------------------------------|----------- +|-----------------|-------------------------------------------------|----------- + + + +------------------------------|-------------------------------------------|----- +------------------------------|-------------------------------------------|----- +------------------------------|-------------------------------------------|----- +7p5--7-----7--------7p5--7p5--|--7-----5h7--------------x--x--x--7--------|----- +------------------------------|-------------------------------------------|----- +------------------------------|-------------------------------------------|----- + + + +--------------------------------------------------------|----------------------- +--------------------------------------------------------|----------------------- +--------------------------------------------------------|----------------------- +------7--------5--------x--x--x--x--5--------7p5--------|--7-------------------- +--------------------------------------------------------|----------------------- +--------------------------------------------------------|----------------------- + + + +-----------------|-----------------------------|-------------------------------- +-----------------|-----------------------------|-------------------------------- +-----------------|-----------------------------|-------------------------------- +-----------------|-----------------------------|-------------------------------- +---------5p4-----|-----------------------------|-------------------------------- +--------------5--|--5--------------------------|-------------------------------- + + + +t17p15p12p10h12p10h15p12ph15p12p10-t17p15p12h15-t17p15p12h15-t17p15p12-t17------ +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + + + +p15p12p10h12p10h12--|h12p10h15p12-t17p15p12h15p12p10h15p12p10h15p12p10h15p12---- +--------------------|----------------------------------------------------------- +--------------------|----------------------------------------------------------- +--------------------|----------------------------------------------------------- +--------------------|----------------------------------------------------------- +--------------------|----------------------------------------------------------- + + + +------------------------------|h15p12p10----t17p15p12h15-t17p15p12p10-t17p15---- +------------------------------|------------------------------------------------- +------------------------------|------------------------------------------------- +------------------------------|------------------------------------------------- +------------------------------|------------------------------------------------- +------------------------------|------------------------------------------------- + + + +p12p10-t17p15p12h15-t17p15p12p10-t17p15p12p10-t17p15p12p10-t17p15p12p10h12------ +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + + + +|-t17p15p12-t17p15p12-t17p15p12h15-t17p15p12p10-t17p15p12p10-t17p15p12p10------- +|------------------------------------------------------------------------------- +|------------------------------------------------------------------------------- +|------------------------------------------------------------------------------- +|------------------------------------------------------------------------------- +|------------------------------------------------------------------------------- + + + (END OF SONG) +t17p15p12-t17p15p12-t17p15p12-t17p15p12p10h12--|---0-------------||------------- +-----------------------------------------------|-----------------||------------- +-----------------------------------------------|-----------------||------------- +-----------------------------------------------|-----------------||------------- +-----------------------------------------------|-----------------||------------- +-----------------------------------------------|-----------------||------------- + + +Rhythm Figure 2 +-------0--------------|--------0--------------|--------0-------------0---------- +----------3-----------|-----------0-----------|-----0-----0--------------------- +----0-----------------|-----2-----------------|--------------1h2--------2p1----- +----------------------|-----------------------|--2------------------------------ +-3--------------------|--2--------------------|--------------------------------- +----------------------|-----------------------|--------------------------------- + + + End.Rhy.Fig.2 Riff A +---|-----------0-----------|-------------------------|-------------------------- +---|--------------0--------|-------------------------|-------------------------- +---|-----------------------|------17-----------------|--16-----14-----12-------- +2--|--(2)---2--------------|-------------------------|-------------------------- +---|-----------------------|------15-----------------|--14-----12-----10-------- +---|-----------------------|-------------------------|-------------------------- + + + chord slide End Riff A +---------------------|------------------|---------------------------||---------- +---------------------|------------------|---------------------------||---------- +---------14------16--|--14--------------|---------------------------||--5p0----- +---------------------|------------------|---------------------------||---------- +---------12------14--|--12--------------|---------------------------||---------- +---------------------|------------------|---------------------------||---------- + + + +-----------------------------------|-------------------------------------------- +-----------------------------------|-------------------------------------------- +5p0--5p0--5p0--5p0--5p0--5p0--5p0--|--4p0--4p0--4p0--4p0--4p0--4p0--4p0--4------ +-----------------------------------|-------------------------------------------- +-----------------------------------|-------------------------------------------- +-----------------------------------|-------------------------------------------- + + + +----|------------------------------------------|-------------------------------- +----|------------------------------------------|-------------------------------- +p0--|--2p0--2p0--2p0--2p0--2p0--2p0--2p0--2p0--|--2p0--2p0--2p0--2p0--2p0--2---- +----|------------------------------------------|-------------------------------- +----|------------------------------------------|-------------------------------- +----|------------------------------------------|-------------------------------- + + + End Riff B +---------------|----------0-----------------|-------------------|--------------- +---------------|-------------0--------------|--(0)--------------|--(0)---------- +p0---2p0--2p0--|----------------------------|-------------------|--------------- +---------------|--(2)--2--------------------|-------------------|--------------- +---------------|----------------------------|-------------------|--------------- +---------------|----------------------------|-------------------|--------------- + + + +------|-----------------|-------------------|-------------------||-------------- +------|-----------------|-------------------|-------------------||-------------- +------|-----------------|-------------------|-------------------||-------------- +------|--2--------------|--(2)--------------|--(2)--------------||-------------- +------|-----------------|-------------------|-------------------||-------------- +------|-----------------|-------------------|-------------------||-------------- + + + + + +================================================================================ +== TABLATURE EXPLANATION == +================================================================================ + +---------- ---------- +----5h8--- Hammeron ----(8)--- Ghost Note +---------- ---------- +----5p8--- Pulloff ---------- + +---------- ---------- +----5/8--- Slide Up -----x---- Dead Note +---------- ---------- +----5\8--- Slide Down ---------- + +---------- ||------|| Repeat Start & End +----5~~~-- Vibrato ||*----*|| +---------- ||*----*|| +---------- ||------|| + + 1 1 +---------- ---------- +----5^---- Bent up 1 step(2 frets) ----5^--'- Bent up 1 step and +---------- Number above signifies ---------- then released to +---------- degree of bend. ---------- origional pitch. + Either 1 1/2 steps,1 step + or 1/2 step. + 1/2s--1 p1/2 +---------- Bend is sustained and ---------- +--5^----^- then bent up again.In --5^------ Note is pre bent. +---------- this case then note is ---------- +---------- bent a half step before ---------- + being bent up to a whole + step. + + +================================================================================ +== Created with a shareware version of the BUCKET 'O TAB == +== tablature creation software for Windows == +== For more information: == +== email: gse@ocsystems.com == +== US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124 == +================================================================================ + + + + diff --git a/guitar/tabs/Joe Satriani/ceremony.prj b/guitar/tabs/Joe Satriani/ceremony.prj new file mode 100644 index 0000000..79f2f69 --- /dev/null +++ b/guitar/tabs/Joe Satriani/ceremony.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=ceremony.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16) diff --git a/guitar/tabs/Joe Satriani/ceremony.tab b/guitar/tabs/Joe Satriani/ceremony.tab new file mode 100644 index 0000000..ea3d6dc --- /dev/null +++ b/guitar/tabs/Joe Satriani/ceremony.tab @@ -0,0 +1,64 @@ + + P P P P P P +E|--16--17--16--12------12----16--17--16--12------12----16--17--16--12--| +B|------------------17------------------------17------------------------| +G|----------------------------------------------------------------------| +D|----------------------------------------------------------------------| +A|----------------------------------------------------------------------| +E|----------------------------------------------------------------------| + + P H P P P P +E|------12----16--17--16--12------12----16--17--16--12---17--12--16--12--| +B|--17------------------------17-----------------------------------------| +G|-----------------------------------------------------------------------| +D|-----------------------------------------------------------------------| +A|-----------------------------------------------------------------------| +E|-----------------------------------------------------------------------| + + P P P H P P P H P P +E|--17--12--16--12--17--12----16--17--16--12---16--12----14--16--14--12--| +B|-----------------------------------------------------------------------| +G|-----------------------------------------------------------------------| +D|-----------------------------------------------------------------------| +A|-----------------------------------------------------------------------| +E|-----------------------------------------------------------------------| + + H H P P H P H P H P H P H P +E|--------------------------------------------------------------------| +B|--14--17----14--16--14--12--16--12--14--12--16--12--14--12--14--12--| +G|--------------------------------------------------------------------| +D|--------------------------------------------------------------------| +A|--------------------------------------------------------------------| +E|--------------------------------------------------------------------| + + H P P P P P P P P +E|--16--17--16--12---17--12---16--17--16--12---17--12---16--17--16--12--| +B|----------------------------------------------------------------------| +G|----------------------------------------------------------------------| +D|----------------------------------------------------------------------| +A|----------------------------------------------------------------------| +E|----------------------------------------------------------------------| + + H P P P P P +E|------12--16--17--16--12--------12--16--17--16--12------12----19--12--| +B|--17------------------------17----------------------16----------------| +G|----------------------------------------------------------------------| +D|----------------------------------------------------------------------| +A|----------------------------------------------------------------------| +E|----------------------------------------------------------------------| + + P P P P P P P H +E|--19--12--19--12---17--12--17--12---16---17--16--12---16--12---14--16--| +B|-----------------------------------------------------------------------| +G|-----------------------------------------------------------------------| +D|-----------------------------------------------------------------------| +A|-----------------------------------------------------------------------| +E|-----------------------------------------------------------------------| + + P H P +E|--14--12/11--14-------------------------| +B|-----------------14>(16)>(14)--12---14--| +G|----------------------------------------| +D|----------------------------------------| +A|----------------------------------------| +E|----------------------------------------| diff --git a/guitar/tabs/Joe Satriani/cool #9.prj b/guitar/tabs/Joe Satriani/cool #9.prj new file mode 100644 index 0000000..0405252 --- /dev/null +++ b/guitar/tabs/Joe Satriani/cool #9.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=cool #9.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32)(104,32)(105,32)(106,32)(107,32)(108,32)(109,32)(110,32)(111,32)(112,32)(113,32)(114,32)(115,32)(116,32)(117,32)(118,32)(119,32)(120,32)(121,32)(122,32)(123,32)(124,32)(125,32)(126,32)(127,32)(128,32)(129,32)(130,32) +TEMPO=651578 diff --git a/guitar/tabs/Joe Satriani/cool #9.tab b/guitar/tabs/Joe Satriani/cool #9.tab new file mode 100644 index 0000000..1ea50ef --- /dev/null +++ b/guitar/tabs/Joe Satriani/cool #9.tab @@ -0,0 +1,55 @@ +Expressive soloing: cool #9 + + +Joe Satriani´s song "Cool #9" contains many brilliant passages, but I +particularly like the short subtle solo in the middle of the song. If you got the CD, +listen to Joe play it, if not, you have to settle for my attempt. It contains tons of +bends, delicate pinch harmonics, vibrato and so on. Listen carefully to it, and try to +put as much expression in your own interpretation. The trick I denoted in the tab with +** is done by hitting the whammy bar hard to make the tremolo vibrate. + + +Key = C + +E|-------------11------------------------------------------------------------| +B|----13----13------18^(1/2)-18-16-18-p16-h18-18^(1/2)-18^(1/2)--------------| +G|-12----12------------------------------------------------------------------| +D|---------------------------------------------------------------------------| +A|---------------------------------------------------------------------------| +E|---------------------------------------------------------------------------| + +E|-18------------------------------------------------------------------------| +B|----18^(1/2)r-p16-18-p16---------------------------------------------------| +G|-------------------------17-17~---------15-17---10/8----8----8-10-8--------| +D|----------------------------------15-17--------------10---10--------10-----| +A|---------------------------------------------------------------------------| +E|---------------------------------------------------------------------------| + +E|---------------------------------------------------------------------------| +B|---------------------------------------------------------------------------| +G|---------------------------------------------------------------------------| +D|-10-8^(1/4)-10--10-8^(1/4)-10--10-8^(1/4)-10--10-8^(1/4)-10--10-8^(1/4)-10-| +A|---------------------------------------------------------------------------| +E|---------------------------------------------------------------------------| + +E|---------------------------------------------------------------------------| +B|---------------------------------------------------------------------------| +G|-----------------------------8----10-8----------8----10-8------------------| +D|-10-8^(1/4)-10--10-8-10-8-10---10------10-8-10~---10------10-8-10----------| +A|---------------------------------------------------------------------------| +E|---------------------------------------------------------------------------| + +E|----------------------------------------------15--20^(1)-20-18-------------| +B|---------11--------------------------------13------------------20~---------| +G|-8-10/12----12-11-10--------8------8----12---------------------------------| +D|---------------------14-10----10-8---10------------------------------------| +A|---------------------------------------------------------------------------| +E|---------------------------------------------------------------------------| + +E|-18----------18------------------------------------------------------------| +B|----19^(1/2)----20-19-18---------------------------------------------------| +G|-------------------------20-17----17-20-20*-*-17----17---------------------| +D|-------------------------------20----------------20------------------------| +A|-------------------------------------------------------20-18~--------------| +E|---------------------------------------------------------------------------| + diff --git a/guitar/tabs/Joe Satriani/driving_at_night - Joe Satriani.prj b/guitar/tabs/Joe Satriani/driving_at_night - Joe Satriani.prj new file mode 100644 index 0000000..2f4b363 --- /dev/null +++ b/guitar/tabs/Joe Satriani/driving_at_night - Joe Satriani.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=driving_at_night - Joe Satriani.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8) +TEMPO=651578 diff --git a/guitar/tabs/Joe Satriani/driving_at_night - Joe Satriani.tab b/guitar/tabs/Joe Satriani/driving_at_night - Joe Satriani.tab new file mode 100644 index 0000000..8c3025d --- /dev/null +++ b/guitar/tabs/Joe Satriani/driving_at_night - Joe Satriani.tab @@ -0,0 +1,145 @@ +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# + +Date: Fri, 8 May 1998 07:54:35 -0700 +From: Jon Cutright +Subject: s/satriani_joe/driving_at_night.tab + +This is my first attempt at tabbing, so please be kind. Joe uses a lot +of vibrato in this song. I have not indicated it all because some is +rather subtle. He uses some hand vibrato and some whammy bar, but I +have just written it all as "vibrato". Personally, I use the whammy bar +throughout most of the song, but either will do. Just listen to the song +to get it right. If you have any questions or comments, let me know. + +Jon Cutright + + + + +Driving At Night +~~~~~~~~~~~~~~~~ +by Joe Satriani +from "NOT OF THIS EARTH" (1986) + + +Drum intro.... + + +e]--------------------------------------------------------------------- +B]--------------------------------------------------------------------- +G]--------------(7)/9--9-----------------------(7)/9--9---------------- +D]--------------(7)/9--9----(7)/9--9-----------(7)/9--9----(7)/9--9---- +A]--------------(5)/7--7----(7)/9--9-----------(5)/7--7----(7)/9--9---- +E]--------------------------(5)/7--7-----------------------(5)/7--7---- + + +e]--------------------------------------------------------------------- +B]--------------------------------------------------------------------- +G]-----(7)/9--9-----------------------(7)/9--9------------------------- +D]-----(7)/9--9----(7)/9--9-----------(7)/9--9----(7)/9--9------------- +A]-----(5)/7--7----(7)/9--9-----------(5)/7--7----(7)/9--9------------- +E]-----------------(5)/7--7-----------------------(5)/7--7------------- + This is continued throughout the +song.... + + +e]--------------------------------------------------------------------- +B]-----8--10--8--10^^^^^\---------8--10--11--10--8-----8--10----------- +G]--9--------------------------9--------------------9---------9^^^^^\-- +D]--------------------------------------------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]---------------------------------------------------10---------------- +B]-----8--10--8--10^^^^^\---------8--10--11--10--8-------8------------- +G]--9--------------------------9-------------------9-------9--7^^^^^\-- +D]--------------------------------------------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]----------------------------------------14--15--14--------------14--- +B]-----15--17--15--17^^^^^/-------15--17--------------17--15--17------- +G]--16----------------------------------------------------------------- +D]--------------------------------------------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]--------------------------------------------------------------------- +B]------------------------------------------------8--10--8-10^^^^^\---- +G]--16-----16b17---12b13---8b9----------------9------------------------ +D]-------------------------------8b9----------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]--------------------------0--------------------------------------12-- +B]-----8--10--11--10--8-----10--8----------------------10--12--13------ +G]--9--------------------9---------9----11---7------------------------- +D]--------------------------------------------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]---------------10--------------------13--12--10--12--8--------------- +B]---10--12--13------------10--12--13---------------------------------- +G]--------------------------------------------------------------------- +D]--------------------------------------------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]-----------17---21b23^^^^--------------17---20b22^^^^-----19>^^^^^--- +B]---18--20----------------------18--20-------------------------------- +G]--------------------------------------------------------------------- +D]--------------------------------------------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]---17---15h17---13h15------------------------------------------------ +B]------------------------13h15----12^^^^^^^^^------------------------- +G]--------------------------------------------------------------------- +D]--------------------------------------------------------------------- +A]--------------------------------------------------------------------- +E]--------------------------------------------------------------------- + + +e]--------------------------------------------------------------------- +B]--------------------------------------------------------------------- +G]-----(7)/9--9-----------------------(7)/9--9------------------------- +D]-----(7)/9--9----(7)/9--9-----------(7)/9--9----(7)/9--9------------- +A]-----(5)/7--7----(7)/9--9-----------(5)/7--7----(7)/9--9------------- +E]-----------------(5)/7--7-----------------------(5)/7--7------------- + + +e]--------------------------------------------------------------------- +B]--------------------------------------------------------------------- +G]-----(7)/9--9-----------------------(7)/9--9------------------------- +D]-----(7)/9--9----(7)/9--9-----------(7)/9--9----(7)/9--9------------- +A]-----(5)/7--7----(7)/9--9-----------(5)/7--7----(7)/9--9------------- +E]-----------------(5)/7--7-----------------------(5)/7--7------------- + + + + + + Symbols used: This is all I have figured out so far. + b-bend When I work out the rest of the +song, I + r-release bend will post it, or if someone has it, send + p-pull off it to me and I will add it. If +you have + h-hammer on questions or comments, please let me + /-slide up know. Thanks. + \-slide down + ^-vibrato + >-hold note +()-ghost note + x-dead note + diff --git a/guitar/tabs/Joe Satriani/echo - Joe Satriani.prj b/guitar/tabs/Joe Satriani/echo - Joe Satriani.prj new file mode 100644 index 0000000..1456070 --- /dev/null +++ b/guitar/tabs/Joe Satriani/echo - Joe Satriani.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=echo - Joe Satriani.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16) diff --git a/guitar/tabs/Joe Satriani/echo - Joe Satriani.tab b/guitar/tabs/Joe Satriani/echo - Joe Satriani.tab new file mode 100644 index 0000000..c3a5b98 --- /dev/null +++ b/guitar/tabs/Joe Satriani/echo - Joe Satriani.tab @@ -0,0 +1,125 @@ + + + + + + + + + + +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# +#-- File created with Instab - http://www.pconline.com/~smcarey/instab.html --# +#-----------------------------------------------------------------------------# + +Author/Artist: joe satriani +Title: echo +Album: surfing with the alien +Transcribed by: rinaldo tijssen +Email:ritijs47@brunssum.net + +if there any mistakes, email me on ritijs47@brunssum.net +tune down a half step + +-||--------------------------|---------------------------|-------------------- +-||---11-11-11-11h13---------|----11-11-11-11h13---------|-------------------- +-||10----------------10-x-10-|-10----------------10-x-10-|-x-12h13-12-v8-10--- +-||--------------------------|---------------------------|-------------------- +-||--------------------------|---------------------------|-------------------- +-||--------------------------|---------------------------|-------------------- + + +------|------------------------||-------------|------------------------------- +-9----|------------------11----||-------------|----------------16----16-17---- +---10-|-x-12h13-12-v8-10----10-||-/8-6-8-6----|----17-17-15-13--b-14--b------- +------|------------------------||----------v8-|-15--b------------------------- +------|------------------------||-------------|------------------------------- +------|------------------------||-------------|------------------------------- + + +--------------------------------------------------------------------------|--- +-15-15h17--15-13-v13-15-v15--13-11-13-13-13--13-11-11-13-v13--11----11/13-|--- +--------v------------------------------b--b----------------------10-------|--- +--------------------------------------------------------------------------|--- +--------------------------------------------------------------------------|--- +--------------------------------------------------------------------------|--- + guitar solo pm----- + +-|-------6h8h9p8p6---------------------------------------------------|-------- +-|-6h8h9-----------9p8p6---------------------------------------------|-------- +-|-----------------------8p6p5h6h9p6p5---5h6p5---5-------------------|-------- +-|-------------------------------------8-------8---8-6-5-/3----------|---3-5-- +-|----------------------------------------------------------v4-4p3p1-|-4------ +-|-------------------------------------------------------------------|-------- + --------- pm---------------------- + +----------------|-----------------------|-----------------------------------|- +----------------|-----------------------|-----8h9----9p8--------------------|- +----------------|-----------------------|-v10-----v8-----10-----------------|- +-6-6-3-5-1-v3-5-|-5h6h8-8/10\8-6-6h8-v6-|-------------------/10-\8-v6-------|- +----------------|-----------------------|-----------------------------6h8v6-|- +----------------|-----------------------|-----------------------------------|- + + +-|--------------------------|-------v13p11-8h9h11p9p8p6h8h9p8p6--------------- +-|--------------------------|-16-16-----------------------------9p8p6--------- +-|-----13-15-13----------13-|-rb--b-----------------------------------8------- +-|-/15-------rb-15p13h15--r-|------------------------------------------------- +-|--------------------------|------------------------------------------------- +-|--------------------------|------------------------------------------------- + + +------------------------------||---------||----------------------------------- +-6h7p6------------------------||---------||----------------------------------- +-------8p6p5---5h6p5----------||---------||----------------------------------- +-------------8-------8p6p5----||5h6p5p3p-||----------------------------------- +---------------------------v8-||--------6||-------1h3h4p3p1-----------1h3h4h-- +------------------------------||---------||-1h3h4-----------4p3p1h3h4--------- + + +------------------------------------------------------------------------------ +-------------------------------------------------------4h6h8p6p4-----------4-- +-------------------------------------3h5h6p5p3---3h5h6-----------6p5p3h5h6---- +-------------------3h5h6p5p3---3h5h6-----------6------------------------------ +-3h4h6p4p3---3h4h6-----------6------------------------------------------------ +-----------6------------------------------------------------------------------ + + +-----4h6h8p6p4-----------|-------------------|-------------------------------- +-6h8-----------8p6p4h6h8-|-18-17-14-------18-|-8p6---------------------------- +-------------------------|--b-------17-15--b-|-----8p6------------------------ +-------------------------|-------------------|---------8p6-8/10-8-6-5---5-6-8- +-------------------------|-------------------|------------------------8------- +-------------------------|-------------------|-------------------------------- + *bend string before picking + +-------------------------|----------|-18---21--18-*18p16----16-|-15-13-15-16-- +-------------------------|----------|-rb---rb------rb----18--v-|-rb----------- +-------8----8----8p10-10-|----------|---------------------v----|-------------- +-/8-10---10---10---------|-/6-8p6---|--------------------------|-------------- +-------------------------|--------8-|--------------------------|-------------- +-------------------------|--------v-|--------------------------|-------------- + + +-15-13----------------|-------------------------------------|----------------- +-------16-15-13-15-16-|-6h8h9p8p6---------------------------|----------------- +----------------------|-----------6p5h6---------------------|----------------- +----------------------|-----------------10p8h10-8p6h8-6p5---|----------------- +----------------------|-----------------------------------8-|-6h8-8--6h8-8---- +----------------------|-----------------------------------v-|----------------- + then play the first part. + +-------|---------------------------------------------------------------------- +-------|---------------------------------------------------------------------- +-------|---------------------------------------------------------------------- +-6-5---|---------------------------------------------------------------------- +-----8-|---------------------------------------------------------------------- +-------|---------------------------------------------------------------------- + + + + + diff --git a/guitar/tabs/Joe Satriani/home - Joe Satriani.prj b/guitar/tabs/Joe Satriani/home - Joe Satriani.prj new file mode 100644 index 0000000..964cbf9 --- /dev/null +++ b/guitar/tabs/Joe Satriani/home - Joe Satriani.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=home - Joe Satriani.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16) +TEMPO=651578 diff --git a/guitar/tabs/Joe Satriani/home - Joe Satriani.tab b/guitar/tabs/Joe Satriani/home - Joe Satriani.tab new file mode 100644 index 0000000..87d446a --- /dev/null +++ b/guitar/tabs/Joe Satriani/home - Joe Satriani.tab @@ -0,0 +1,388 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + + +Date: Sat, 2 Dec 1995 02:52:18 -0800 +From: Joel =?iso-8859-1?Q?Hern=E1ndez?= +Subject: TAB: HOME by Joe Satriani + + +hello... +this is a song from the latest CD from Joe Satriani, track #7 "HOME" +As you will see, I don't know much about writing down rhythm but I'm +learning, so instead of normal rhythm bars I divided the song into +identifyable phrases, as for the actual transcription I think it's +pretty accurate although corrections or comments will be apreciated... +have fun... + + -=(Home)=- + from the CD Joe Satriani + by Joe Satriani + transcribed by + Joel Hernandez + jhdez@148.231.1.3 + Nov. 21 1995 + + + G Csus2 G Csus2 G Csus2 + +|----------------|-----------------|----------------|------------------- +|----------------|---------12------|----------------|------------------- +|--12/14\12--12--|--12/14------12--|----------------|--12/14--12--12---- +|----------------|-----------------|--12/14\12--12--|------------------- +|----------------|-----------------|----------------|------------------- +|----------------|-----------------|----------------|------------------- + + + Bm Csus2 D G Csus2 G + +|--------------------------------------|--15h17--15--15--|--15h17------- +|--------------------------------------|-----------------|-------------- +|--11/-(12)\(11)--9--------------------|-----------------|-------------- +|--------------------12--12/14\12--12--|-----------------|-------------- +|--------------------------------------|-----------------|-------------- +|--------------------------------------|-----------------|-------------- + + + Csus2 G Csus2 Bm + +17-/(19)--15--|-------------------|--15h17--15--15--|--20-/(22)\(20)---- +--------------|--15-/(17)p15--17--|-----------------|------------------- +--------------|-------------------|-----------------|------------------- +--------------|-------------------|-----------------|------------------- +--------------|-------------------|-----------------|------------------- +--------------|-------------------|-----------------|------------------- + + + Csus2 Bm Csus2 Bm Csus2 + +19--17--15--|----------------------------|--20-/(22)\(20)--19--17\15---- +------------|----------------------------|------------------------------ +------------|--17-/(19)\(17)--16--14\12--|------------------------------ +------------|----------------------------|------------------------------ +------------|----------------------------|------------------------------ +------------|----------------------------|------------------------------ + + D5 Gsus4(Add E) + Gsus4(Add E) ghost bend ghost bend +|--------------------------------------------|-------------------------- +|--17-/(18)\(17)--15--17---(17)/(18)\17--15--|-------------------------- +|--------------------------------------------|---(16)/-(17)\(16)--14---- +|--------------------------------------------|-------------------------- +|--------------------------------------------|-------------------------- +|--------------------------------------------|-------------------------- + + + D5 +-----------------------------------------|------------------------------ +-----------------------------------------|------------------------------ +\12--14--12~~~---------------------------|------------------------------ +----------------14--14/-(15)\(14)--12~~~\|------------------------------ +-----------------------------------------|------------------------------ +-----------------------------------------|------------------------------ + +G(Add A) +P.M................................ +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ +-12--12--12--12--10--12--12--10--12------------------------------------- +------------------------------------------------------------------------ +------------------------------------------------------------------------ + +Csus2 G +.................................. P.M....... P.M.... +------------------------------------------------------------------------ +------------------------------------------------------------------------ +-------------------------------------12---------------12---------------- +-12--x--12--12--10--12--12---10--12-------12--10--12------12--10--12~~~- +------------------------------------------------------------------------ +------------------------------------------------------------------------ + + Csus2 + P.M..................................... +--|--------------------------------------------------------------------- +--|--------------------------------------------------------------------- +--|-------------------------------------------12------------------------ +--|---12--12--12--12--12--10---12--12--x--12------12--10--12--10-------- +--|--------------------------------------------------------------------- +--|--------------------------------------------------------------------- + + + G Csus2 +-------------------------------|----------------------------------|----- +-------------------------------|----------------------------------|----- +------------12-----------------|----------------------------------|----- +12--10--12------12--10--12~~~--|--10h12p10\9--10--9\7\5/7/9--9\5--|----- +-------------------------------|----------------------------------|----- +-------------------------------|----------------------------------|----- + + +Asus4 D G +----------------------------------|------------------------------------- +----------------------------------|------------------------------------- +----------------------------------|------------------------------------- +4/(5)\4h2p0h2/4/5--4/5\4\2/4\2p0--|----------------5--7--7/9--9--10----- +----------------------------------|-----2--3--5/7----------------------- +----------------------------------|--5---------------------------------- + + + Csus2 P.M. + +|------------------------------------------|---------------------------- +|------------------------------------------|---------------------------- +|-------------------------------------(5)--|--7h11--11--11--7h11p7------ +|--9h10p9\7--------------------------------|---------------------------- +|------------10--10/12--12\10--10----------|---------------------------- +|------------------------------------------|---------------------------- + + + G Csus2 G +------------|----------------------------|------------------------------ +------------|----------------------------|------------------------------ +\4--4/7~~~--|--9/12\9\7--7/9\7\4/7--7\5--|--4/-(5)\(4)\2/4--4/-(5)------ +------------|----------------------------|------------------------------ +------------|----------------------------|------------------------------ +------------|----------------------------|------------------------------ + + + Csus2 Asus4 + +------------------------------------------------------------------------ +------------------------------------------------------------------------ +\(4)~~~--4~~~p0--2/4\2--4p2p0-------0----0--2h4p2p0----0---------------- +-------------------------------x/4---/4------------/4-----4\2--2p0------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ + + + D Asus4 +--------------------------|--------------------------------------------- +--------------------------|--------------------------------------------- +--------------------------|--------------------------------------------- +--------------------------|--------------------------------------------- +3--2--3--2/3--3/5--5/7\5--|--5/7\5p3--5--3\2--3--2/-(3)\2--------------- +--------------------------|--------------------------------3/5\3--0----- + + + d +-----|--|--15h17--15--15--|--15h17--15h17--17/-(19)--15~~~--|----------- +-----|--|-----------------|---------------------------------|--15/------ +-----|--|-----------------|---------------------------------|----------- +-----|--|-----------------|---------------------------------|----------- +-----|--|-----------------|---------------------------------|----------- +3/5\-|--|-----------------|---------------------------------|----------- + + + +-----------------|--15/-(17)\(15)--15--|-------------------------------- +(17)\(15)p13h15--|---------------------|--19/-(20)\(19)p17-------------- +-----------------|---------------------|--------------------19--19------ +-----------------|---------------------|-------------------------------- +-----------------|---------------------|-------------------------------- +-----------------|---------------------|-------------------------------- + + + +----------|--------------------------------------------|--15/-(17)------ +----------|--------------------------------------------|---------------- +/(21)~~~--|--16/-(17)\(16)--14------14-----------------|---------------- +----------|---------------------17------17/-(19)\(17)--|---------------- +----------|--------------------------------------------|---------------- +----------|--------------------------------------------|---------------- + + + +\(15)--14------------|------------------------------------------|------- +-----------17--(17)--|------------------------------------------|------- +---------------------|--14/-(15)\(14)---------------------------|------- +---------------------|-----------------12/-(14)\(12)--12/14\12--|------- +---------------------|------------------------------------------|------- +---------------------|------------------------------------------|------- + + + +15/-(17)\(15)--14------------------------------------------------------- +-------------------x--15/(17)~~~\(15)-----(15)--13--12------------------ +--------------------------------------------------------14--12--11------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ + + + +---------------------------------------|-------------------------------- +---------------------------------------|-------------------------------- +9--------------------------------------|--12h14--12--12--12/14--14------ +---12--10--9--7--5--4--5/7/-(9)\(7)--7\|-------------------------------- +---------------------------------------|-------------------------------- +---------------------------------------|-------------------------------- + + + +-----------------------------------------------|------------------------ +-----------------------------------------------|------------------------ +/-(16)--12-------------------12/14--12--12~~~--|--11/(12)\(11)---------- +------------12/14\12--12~~~--------------------|----------------14------ +-----------------------------------------------|------------------------ +-----------------------------------------------|------------------------ + + + P.M. +----------------|------------------------------------------------------- +----------------|------------------------------------------------------- +----------------|------------------------------------------------------- +12-------12/14--|------------------------------------------------------- +-----14---------|------------------------------------------------------- +----------------|------------------------------------------------------- + + + + +======================================================================== +== TABLATURE EXPLANATION == +======================================================================== + +---------- ---------- +----5h8--- Hammeron ----(8)--- Ghost Note +---------- ---------- +----5p8--- Pulloff ---------- + +---------- ---------- +----5/8--- Slide Up -----x---- Dead Note +---------- ---------- +----5\8--- Slide Down ---------- + +---------- ||------|| Repeat Start & End +----5~~~-- Vibrato ||*----*|| +---------- ||*----*|| +---------- ||------|| + +---------- ---------- +-5/(6)\(5) bend-release --5/(6)--- bend +---------- ---------- +---------- ---------- + + +======================================================================== +== Created with a shareware version of the BUCKET 'O TAB == +== tablature creation software for Windows == +== For more information: == +== email: gse@ocsystems.com == +== US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124 == +======================================================================== + + + + + +Date: Thu, 13 Mar 1997 20:47:03 +0800 +From: shredgod +Subject: TAB: Home by Joe Satriani + +This is how I play "Home"from JS's new selftitled album. Sorry, but this is +just the +first part, but it usually repeats, I'll transcribe the solo, but I need a +better +free tab writer. Anyone know how to get it? Also for the person who asked for +"brother", I need a tab maker w/ch can transfer to notepad to finish it,k? + + + + home + from "joe satriani" + Joe Satriani + Transcrib +ed by + David +Arevalo + + +|-----------------------|------------------------------------------------------- +|-----------------------|------------------------------------------------------- +|--12/14-----12--12~~~--|--12/14~~~/16-----12~~~--------------12/14-----12------ +|-----------------------|--------------------------/14~~~----------------------- +|-----------------------|------------------------------------------------------- +|-----------------------|------------------------------------------------------- + + + +----------------------------------------------------|--15/17--15--15~~~--|------ +----------------------------------------------------|--------------------|------ +12~~~\11-----11h12p11-------------------------------|--------------------|------ +-----------------------14--12-----12/14~~~--12--12--|--------------------|------ +----------------------------------------------------|--------------------|------ +----------------------------------------------------|--------------------|------ + + + +15/17--19--15~~~-------------------------|--15/17-----15--15~~~--15-----15------ +------------------15/17-----15p13h15~~~--|-------------------------------------- +-----------------------------------------|-------------------------------------- +-----------------------------------------|-------------------------------------- +-----------------------------------------|-------------------------------------- +-----------------------------------------|-------------------------------------- + + + +/22~~~-----19--17-----15~~~--|-------------------------------|--22~~~--19------- +-----------------------------|--13/15~~~--13--12-------------|------------------ +-----------------------------|--------------------14--12~~~--|------------------ +-----------------------------|-------------------------------|------------------ +-----------------------------|-------------------------------|------------------ +-----------------------------|-------------------------------|------------------ + + + BU then BD BU then BD BU then BD +17--15~~~--|-------------------------------------------------|------------------ +-----------|------------17p15~~~--17---------------17p15-----|------------------ +-----------|-------------------------------------------------|------------16---- +-----------|-------------------------------------------------|------------------ +-----------|-------------------------------------------------|------------------ +-----------|-------------------------------------------------|------------------ + + + +------------------------------------|------------------------------------------- +------------------------------------|------------------------------------------- +p14\12--14--12~~~-------------------|------------------------------------------- +-------------------14-----14p12~~~--|--12--10--12--12--10--12--12--10--12------- +------------------------------------|------------------------------------------- +------------------------------------|------------------------------------------- + + + legato +-------------||---------------------------------------------------------|------- +-------------||---------------------------------------------------------|------- +12----------*||---------------------------------------------------------|------- +----12--10--*||--12~~~---------10h12p10p9~~~--10--9---------------------|------- +-------------||--------------------------------------12--10--12/14--10--|------- +-------------||---------------------------------------------------------|------- + + + + +================================================================================ +== TABLATURE EXPLANATION == +================================================================================ + +---------- ---------- +----5h8--- Hammeron ----(8)--- Ghost Note +---------- ---------- +----5p8--- Pulloff ---------- + +---------- ---------- +----5/8--- Slide Up -----x---- Dead Note +---------- ---------- +----5\8--- Slide Down ---------- + +---------- ||------|| Repeat Start & End +----5~~~-- Vibrato ||*----*|| +---------- ||*----*|| +David "Shredgod" Arevalo +shredgod@hotmail.com or +valmaris@mnl.sequel.net + + diff --git a/guitar/tabs/Joe Satriani/if - Joe Satriani.prj b/guitar/tabs/Joe Satriani/if - Joe Satriani.prj new file mode 100644 index 0000000..8998d00 --- /dev/null +++ b/guitar/tabs/Joe Satriani/if - Joe Satriani.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=if - Joe Satriani.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8) +TEMPO=651578 diff --git a/guitar/tabs/Joe Satriani/if - Joe Satriani.tab b/guitar/tabs/Joe Satriani/if - Joe Satriani.tab new file mode 100644 index 0000000..a12e999 --- /dev/null +++ b/guitar/tabs/Joe Satriani/if - Joe Satriani.tab @@ -0,0 +1,1307 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# +# + +From: John Burrows John.Burrows@btinternet.com +Subject: TAB: If by Joe Satriani +Date: Fri, 17 Oct 1997 23:56:21 +0100 + + "If" - Joe Satriani + from the album - "Joe Satriani + Tabbed by: John Burrows + E-mail address: John.Burrows@btinternet.com + + +Put this tab into a self-aligning font ( I use Courier , text size 8pt ) +for the best effect. + +Please E-mail me with corrections, constructive criticism, thankyou's etc. +If I get just one positive bit of feedback I'll be happy, and I'll quite +happily try some of the other songs from this album. Give me a mail and let +me know which ones you'd like me to post the most :) + +If anyone wants to talk about Satch, then drop me an E-mail. I use my +Internet Cafe about once every two weeks, so I'll E-Mail you back when I +can. + +Oh yeah, this is a big plea!!!! Does anybody know Joe's address. I'd love +to know how to get in touch with him ( apart from the comments page on his +site ). An E-mail address would do if nobody knows where he lives. + + + + +--------------------------------------|--------------------------- +--------------------------------------|--------------------------- +--------------------------------------|--------------------------- +5/7--7---7-----5/7--7--7------------- |--5/7--7--7-----5/7--7--7-- +5/7--7---7-----5/7--7--7--------------|--5/7--7--7-----5/7--7--7-- +3/5--5---5-----3/5--5--5--------------|--3/5--5--5-----3/5--5--5-- + + + + + +|------------------------------------|-------------------------------------- + +|------------------------------------|-------------------------------------- + +|------------------------------------|-------------------------------------- + +|--5/7--7--7-----5/7--7--7-----------|--5/7--7--7----5/7--7--7-----5/7--7--7 + +|--5/7--7--7-----5/7--7--7-----------|--5/7--7--7----5/7--7--7-----5/7--7--7 + +|--3/5--5--5-----3/5--5--5-----------|--3/5--5--5----3/5--5--5-----3/5--5--5 + + + + + + +|-----------------------| +|-----------------------| +|---------17-----19---17| +|--19-------------------| +|-----------------------| +|-----------------------| + + + + 1 1/2 + +-------------------------------------------|------------------------------- +------20-----------------------------------|-----19^----19~~~-------------- +--19^--------------------------------------|----------------------19------- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- + + + + + +--------------|---------------------------------------|--------------------- +---- +--------------|---------------------------------------|--------------------- +---- +17-----19~~~--|--(19)-----17--------------------------|---------17-----19--- +---- +--------------|---------------19--17-----19-----------|--19~~~-------------- +---- +--------------|---------------------------------------|--------------------- +---- +--------------|---------------------------------------|--------------------- +---- + + + + 1 1 p1/2 + +----|------17-----------------|--------------------------------|------------ +---- +----|-------------------------|--20^----(20)~~~-----19-----19^'|--(19)------ +---- +17--|--19^--------------------|--------------------------------|--------19-- +---- +----|-------------------------|--------------------------------|------------ +---- +----|-------------------------|--------------------------------|------------ +---- +----|-------------------------|--------------------------------|------------ +---- + + + + 1 + +-------------------------|--------22^-------20---------------20------------- +---- +-------------------------|-------------------------22~~~~~~----------------- +---- +17-----------------------|-------------------------------------------------- +---- +----19--17--19-----------|-------------------------------------------------- +---- +-------------------------|-------------------------------------------------- +---- +-------------------------|-------------------------------------------------- +---- + + + + 1 + +|--22^----20--22~~~~~~--|--22^-------20---------------20-----------|--22^-22 +---- +|-----------------------|-------------------22~~~~~~---------------|-------- +---- +|-----------------------|------------------------------------------|-------- +---- +|-----------------------|------------------------------------------|-------- +---- +|-----------------------|------------------------------------------|-------- +---- +|-----------------------|------------------------------------------|-------- +---- + + + + 1 + +20--22--20------------------------|-------------------------------|--------- +---- +------------22--22~~~--(22)---\---|-------------------------------|--------- +---- +----------------------------------|---------17--------19--17--19^-|--(19)--- +---- +----------------------------------|--19~~~------------------------|--------- +---- +----------------------------------|-------------------------------|--------- +---- +----------------------------------|-------------------------------|--------- +---- + + + + + +-------------------------------------------------|-------------------------- +---- +20-----------------------------------------------|--------17--20--17--20---- +---- +-------------------------------------------------|-------------------------- +---- +-------------------------------------------------|-------------------------- +---- +-------------------------------------------------|-------------------------- +---- +-------------------------------------------------|-------------------------- +---- + + + + 1 1 + +-----------------------|-----------------------------------20^||--(20)--(20) +---- +20--17--20-----17--20^-|-----(20)--20^----(20)~~~~~20-'-17----||------------ +---- +-----------------------|--------------------------------------||------------ +---- +-----------------------|--------------------------------------||------------ +---- +-----------------------|--------------------------------------||------------ +---- +-----------------------|--------------------------------------||------------ +---- + + + + p1/2 1 1 + +-~~~--20--17------------------------------------|--------------------------- +---- +--------------20--17----------------------------|--------------------------- +---- +----------------------19^'(19)---p17-----19p17--|--19^----19^--------------- +---- +------------------------------------------------|--------------------------- +---- +------------------------------------------------|--------------------------- +---- +------------------------------------------------|--------------------------- +---- + + + + 1/2 + +----------------|--------------------------------------------|-------------- +---- +----------------|--------------------------------------------|-------------- +---- +----17--19--19^-|--(19)----'---17--19~~~~----17--------------|-------------- +---- +19--------------|--------------------------------19--17--19--|--(19)-------- +---- +----------------|--------------------------------------------|-------------- +---- +----------------|--------------------------------------------|-------------- +---- + + + + 1 + +-----------------------------17--20^-|--(20)--(20)---~~~~~~--20-----17------ +---- +-------------------------17----------|----------------------------------20-- +---- +-----------------17--19--------------|-------------------------------------- +---- +---------17--19----------------------|-------------------------------------- +---- +-------------------------------------|-------------------------------------- +---- +-------------------------------------|-------------------------------------- +---- + + + + p1 1/2 + +17----------|------------17-----------------------------------------17--20-- +---- +----17--20--|--20^~~~~~~-----17--20-----------------------------17---------- +---- +------------|------------------------19^-'(19)--17----------19-------------- +---- +------------|--------------------------------------------------------------- +---- +------------|--------------------------------------------------------------- +---- +------------|--------------------------------------------------------------- +---- + + + + 1 1 + +|--(20)^----------(20)---~~~~~~~~~'------------------------------|---------- +---- +|-----------------------------------------20^----------20~~~-----|--(20)---- +---- +|----------------------------------------------------------------|---------- +---- +|----------------------------------------------------------------|---------- +---- +|----------------------------------------------------------------|---------- +---- +|----------------------------------------------------------------|---------- +---- + + + + 1 + +--------17----------------------------17--20^-|--(20)--------20--------17--- +---- +~~~---------17--------------------17----------|----------------------------- +---- +----------------19--------17--19--------------|----------------------------- +---- +----------------------------------------------|----------------------------- +---- +----------------------------------------------|----------------------------- +---- +----------------------------------------------|----------------------------- +---- + + + + 1/2 p1 + +------------------------|---------------------------------||---10-----10--10 +---- +20--------20^-------20^-|--(20)---~~~~~~------------------||---------------- +---- +------------------------|---------------------------------||*--7------7---10 +---- +------------------------|---------------------------------||*-------------3- +---- +------------------------|---------------------------------||---5------5----- +---- +------------------------|-----------------x\x\------------||---------------- +---- + + + + + +---10--10-----10--10-----10--10-----10--10--|--10--10--10-----10--10--10--10 +---- +-------8------8---9------9---8------8-------|------------------------------- +---- +---10-----------------------------------10--|--10--10--7------7------------- +---- +---3---5------5---6------6---5------5---3---|--3---3--------------10--10--9- +---- +--------------------------------------------|----------5------5---3---3---2- +---- +--------------------------------------------|------------------------------- +---- + + + + 1 1 1 1/2 1 1/2 + +----------||----------------12------15--(15)^----------15^----15--|--(15)--- +---- +----------||--15^----15^--------12--------------------------------|--------- +---- +---------*||------------------------------------------------------|--------- +---- +---------*||------------------------------------------------------|--------- +---- +----------||------------------------------------------------------|--------- +---- +----------||------------------------------------------------------|--------- +---- + + + bkwds. + 1 rake----------| + +12------12------15-----12-----12-----------------12--------12--------|------ +---- +----15^-----12------12h14---------12----------12h14-----12h14--------|--12-- +---- +--------------------------------------12-----------------------------|------ +---- +------------------------------------------14-------------------------|------ +---- +---------------------------------------------------------------------|------ +---- +---------------------------------------------------------------------|------ +---- + + + + + +--------12-----------------12--------------------12--------------------12--- +---- +h14---------12----------12h14-----12----------12h14-----12----------12h14--- +---- +----------------12--------------------12--------------------12-------------- +---- +--------------------14--------------------14--------------------14---------- +---- +---------------------------------------------------------------------------- +---- +---------------------------------------------------------------------------- +---- + + + + 1 +---|12/15--15-----------------------12------------------------------------|- +---- +---|12/15--15-----------------------12h14----------12---------------------|- +---- +---|------------14^-(14)---p12--14---------12--14--12---------------------|- +---- +---|---------------------------------------------------14--11--14--11~~~--|- +---- +---|----------------------------------------------------------------------|- +---- +---|----------------------------------------------------------------------|- +---- + + + + 1 1 + +-------------------------------------------------------|-------------------- +---- +-------------------------------------------------------|-------------------- +---- +------12^------------12~~~---------12--14^-14--14--14--|--14--14--14--14--14 +---' +(11)---------14--12------------14----------------------|-------------------- +---- +-------------------------------------------------------|-------------------- +---- +-------------------------------------------------------|-------------------- +---- + + + + 1 1 1/2 + +----------------------------12----------12------15-----|------12------------ +---- +------------------------12------12--15^-----12---------|--14^-----12--14---- +---- +(14)---p12------12--14^--------------------------------|------------------15 +---- +------------14-----------------------------------------|-------------------- +---- +-------------------------------------------------------|-------------------- +---- +-------------------------------------------------------|-------------------- +---- + + + + 1 p1/2 + +------------12-----------------------------------|-------------------------- +---- +12------12------12--15---------------------------|-------------------------- +---- +----14^-----------------14^-'(14)p12-----14------|--12------12-------------- +---- +-------------------------------------14------14--|------14--14p12----------- +---- +-------------------------------------------------|-----------------14--12\10 +---- +-------------------------------------------------|-------------------------- +---- + + + + + 1/2 1 1 1/2 +-----------------------------------------||--15^-------15^-------15^-------- +---- +------------------------------(0)--------||--------------------------------- +---- +-----------------------------------------||--------------------------------- +---- +---------------12--12--12~~~-------------||--------------------------------- +---- +12--10--12/14----------------------------||--------------------------------- +---- +-----------------------------------------||--------------------------------- +---- + + + +1 1/2 1 1/2 + +15^------'(15)---p(13)------|--15--13--------------------------------------- +---- +------------------------15--|-------------15^----------15p13------15--13---- +---- +----------------------------|---------------------------------14------------ +---- +----------------------------|----------------------------------------------- +---- +----------------------------|----------------------------------------------- +---- +----------------------------|----------------------------------------------- +---- + + + 1 + 2 p1/2s--^ 1 1/2 + +--------|----------10--13^-------13^-------13^----13~~~--10------|--10------ +---- +~~~~~~--|--10--12--------------------------------------------12--|------12-- +---- +--------|--------------------------------------------------------|---------- +---- +--------|--------------------------------------------------------|---------- +---- +--------|--------------------------------------------------------|---------- +---- +--------|--------------------------------------------------------|---------- +---- + + + + p1 1 1 1 + +13------10--10--10--15^----'--15^'(15)---p13----------------|--20^-------20^ +---' +----12----------------------------------------15p13--15-----|--------------- +---- +------------------------------------------------------------|--------------- +---- +------------------------------------------------------------|--------------- +---- +------------------------------------------------------------|--------------- +---- +------------------------------------------------------------|--------------- +---- + + + + 1 1/2 1 + +------------(20)^\--------------10------13------10--|------------------10--- +---- +------------------------(0)--12------10------12^----|--10--13------10------- +---- +----------------------------------------------------|----------12^---------- +---- +----------------------------------------------------|----------------------- +---- +----------------------------------------------------|----------------------- +---- +----------------------------------------------------|----------------------- +---- + + + + 1 1 + +13------------------------------------------|------------------------------- +---- +13------------------------------------------|------------------------------- +---- +-------12^'(12)p10--12--10------10--12^-12--|--12--12--12--12--12'(12)------ +---- +----------------------------12--------------|------------------------------- +---- +--------------------------------------------|------------------------------- +---- +--------------------------------------------|------------------------------- +---- + + + + 1 1 + +--------------------------------------------------------|------------------- +---- +--------------------------------------------------------|------------------- +---- +p10------12--10--12--10h12-----12^'(12)p10------10--12^-|-'(12)-----10--12-- +---- +-----12-------------------------------------12--10------|-----------10--12-- +---- +--------------------------------------------------------|------------------- +---- +--------------------------------------------------------|------------------- +---- + + + bkwds. + rake--------| +----x-----------------------------------------||---------------------------- +---- +12-----x--------------------------------------||---------------------------- +---- +12--------x------10---------------------------||---------------------------- +---- +-------------12-------------------------------||---------------------------- +---- +---------------------12--10\8-----10--10/x\---||--5/7--7--7-----5/7--7------ +---- +----------------------------------------------||--3/5--5--5-----3/5--5------ +---- + + + + +------------------------------------------------|--------------------------- +---- +------x-----x-----x-----x-----7--5--x-----x-----|--------------------------- +---- +------------------------------7--5--------------|--------------------------- +---- +------------------------------------------------|--------------------------- +---- +7-----------------------------------------------|--5/7--7--7-----5/7--7--7-- +---- +5-----------------------------------------------|--3/5--5--5-----3/5--5--5-- +---- + + + + + +---------------|--------------------------------------|--------------------- +---- +---------------|--------------------------------------|--------------------- +---- +---------------|--------------------------------------|--------------------- +---- +---------------|--------------------------------------|--------------------- +---- +---------------|--------------------------------------|--------------------- +---- +---------------|--------------------------------------|--------------------- +---- + + + + 1 + +-------------------------||------------------------------|------------------ +---- +-------------------------||------------------------------|------20---------- +---- +-------------------------||------------17--------19--17--|--19^------------- +---- +-------------------------||--19~~~-----------------------|------------------ +---- +-------------------------||------------------------------|------------------ +---- +-------------------/x\---||------------------------------|------------------ +---- + + + + p1 + +---------------|------------------------------------------------------------ +---- +---------------|------------------------------------------------------------ +---- +---------------|--------------19^'(19)---p17--19--------------19--17-------- +---- +---------------|------------------------------------------------------19--19 +---- +---------------|------------------------------------------------------------ +---- +---------------|------------------------------------------------------------ +---- + + + + + +-----|--------------------------------------|------------------------------- +---- +-----|--------------------------------------|------------------------------- +---- +-----|--------------------------------------|---------------17--------19---- +---- +~~~--|--(19)--------------------------------|--------19~~~------------------ +---- +-----|--------------------------------------|------------------------------- +---- +-----|--------------------------------------|------------------------------- +---- + + + + p1 1 + +-------|--------17---------------------------|------------------------------ +---- +-------|---------------------------------19^-|--(19)--------------19~~~----- +---- +---19^-|--(19)-------------------------------|---------------------------19- +---- +-------|-------------------------------------|------------------------------ +---- +-------|-------------------------------------|------------------------------ +---- +-------|-------------------------------------|------------------------------ +---- + + + + 1 1 + +-----------------------------|-------------------------------|--22^-------20 +---- +-----------------------------|-------------------------------|-------------- +---- +17-----19^----19--17--19~~~--|--(19)---~~~~~~--(19)---\------|-------------- +---- +-----------------------------|-------------------------------|-------------- +---- +-----------------------------|-------------------------------|-------------- +---- +-----------------------------|-------------------------------|-------------- +---- + + + + 1 1 + +-------20~~~--|--22^----20--22~~~~~~--|--------22^----20---------20~~~--|--- +---- +22~~~---------|-----------------------|-------------------22~~~---------|--- +---- +--------------|-----------------------|---------------------------------|--- +---- +--------------|-----------------------|---------------------------------|--- +---- +--------------|-----------------------|---------------------------------|--- +---- +--------------|-----------------------|---------------------------------|--- +---- + + + + 1 1 + +20^-------(20)---~~~~~~-----20--17------17~~~--|--(17)--------22^-------20-- +---- +------------------------------------20---------|---------------------------- +---- +-----------------------------------------------|---------------------------- +---- +-----------------------------------------------|---------------------------- +---- +-----------------------------------------------|---------------------------- +---- +-----------------------------------------------|---------------------------- +---- + + + + 1 1 + +~~~------20-----------|-----22^-22--22--22-'20--22~~~--20--------|--22^----- +---- +-----22---------------|------------------------------------------|---------- +---- +----------------------|------------------------------------------|---------- +---- +----------------------|------------------------------------------|---------- +---- +----------------------|------------------------------------------|---------- +---- +----------------------|------------------------------------------|---------- +---- + + + + 1 1/2 + +20------20-----20--17--|---------------------------------------------------- +---- +----22-----------------|--20--17-----20--17------20---p17------17----------- +---- +-----------------------|---------------------19------------19^-----19^'(19)- +---- +-----------------------|---------------------------------------------------- +---- +-----------------------|---------------------------------------------------- +---- +-----------------------|---------------------------------------------------- +---- + + + + 1/2 + +-------------------------------------||------------------------------------- +---- +-------------------------------------||------------------------------------- +---- +-p17------19p17------19--17--19--19^-||--(19)--------19~~~--17~~~--19--17--- +---- +------19---------19------------------||------------------------------------- +---- +-------------------------------------||------------------------------------- +---- +-------------------------------------||------------------------------------- +---- + + + 1 1 P.M 1/2 + +----------------|--------------------------------------------------|-------- +---- +----------------|--------------------------------------------------|-------- +---- +19--19--17--19^-|--(19)--19^-------------------19----------17--19^-|--(19)-- +---- +----------------|----------------------------------17--19----------|-------- +---- +----------------|--------------------------------------------------|-------- +---- +----------------|--------------------------------------------------|-------- +---- + + + + P.M--| + +---------------------------------------------|------------------------------ +---- +---------------------------------------------|------------------------------ +---- +------19~~~--17~~~--19p17-----17-------------|-----------x--x--19--17-----17 +---- +----------------------------------19--19~~~--|--(19)~~~--------------------- +---- +---------------------------------------------|------------------------------ +---- +---------------------------------------------|------------------------------ +---- + + + + 1/2 1 + +------------------------|--------------------------------------------------- +---- +------------------------|--------------------------------------------------- +---- +----17--19--17--19--19^-|--(19)--~~~--19--'--17-----19--17-----19--17--19^-- +--- +19----------------------|--------------------------------------------------- +---- +------------------------|--------------------------------------------------- +---- +------------------------|--------------------------------------------------- +---- + + + + 1 1 + +|-----------------------------------------------17--20^-|--(20)--(20)~~~---- +---- +|---------------------------------------17--20----------|------------------- +---- +|--(19)--19^--------------------17--19------------------|------------------- +---- +|---------------------------19--------------------------|------------------- +---- +|-------------------------------------------------------|------------------- +---- +|-------------------------------------------------------|------------------- +---- + + + + 1 1/4 1 + +~~~--20^----------20^-17--|--(17)--------17--17--17--17--17------17--20^-|-- +---- +--------------------------|----------------------------------20----------|-- +---- +--------------------------|----------------------------------------------|-- +---- +--------------------------|----------------------------------------------|-- +---- +--------------------------|----------------------------------------------|-- +---- +--------------------------|----------------------------------------------|-- +---- + + + + 1 1/4 + +(20)--(20)---~~~~~~--20^-------20^----17~~~--|--(17)---~~~--17------17------ +---- +---------------------------------------------|------------------20------20-- +---- +---------------------------------------------|------------------------------ +---- +---------------------------------------------|------------------------------ +---- +---------------------------------------------|------------------------------ +---- +---------------------------------------------|------------------------------ +---- + + + + p1/2 1 1 + +------------------------------------17--20^-|--(20)--(20)---~~~~~~--20^----- +---- +20------------------------------17----------|------------------------------- +---- +----19^'(19)---p17--19--17--19--------------|------------------------------- +---- +--------------------------------------------|------------------------------- +---- +--------------------------------------------|------------------------------- +---- +--------------------------------------------|------------------------------- +---- + + + + + +---20~~~--17~~~--|--(17)---~~~--17~~~--17\|-----------------|--------------- +---- +-----------------|------------------------|-----------------|--------------- +---- +-----------------|------------------------|-----------------|--------------- +---- +-----------------|------------------------|-----------------|--------------- +---- +-----------------|------------------------|-----------------|--------------- +---- +-----------------|------------------------|-----------------|--3-----5--3--- +---- + + + A.H + 1 + +------------------------------|------------------------------|-------------- +---- +------------------------------|------------------------------|-------------- +---- +------------------------------|--------------------5p2p0-----|--------5p2p0- +---- +------------------------------|---------------------------4--|-------------- +---- +------------3--5-----3^-------|--3~~~~~~---------------------|-------------- +---- +5-----3--5--------------------|------------------------------|-------------- +---- + semi + + harm + 1/4 + +--------------------------------||------------------------------------------ +---- +--------------------------------||---------------3--5----------------------- +---- +------5p2p0--------5p2p0--------||--5p2p0--4--4--------5^------------------- +---- +4------------4------------4-----||------------------------------------------ +---- +--------------------------------||------------------------------------------ +---- +--------------------------------||------------------------------------------ +---- + + + + + +-------------|-------------------------------------------|------------------ +---- +-------------|-------------------------------------------|------------------ +---- +5p2p0-----0--|-------------------------------------------|-----------------5 +---- +-------4-----|-----4p2p0--0--0---------------------------|------------------ +---- +-------------|------------------3p0-----0--3p0-----------|------------------ +---- +-------------|-----------------------3-------------------|------------------ +---- + + + + p1/2 1 + +--------------------------|------------------------------------------------- +---- +--------------5-----------|------------------------------------------------- +---- +--------------5-----------|--------7^----'---^-------7p5-----7--5-----5~~~-- +---- +7--(7)~~~~~~--------------|-------------------------------7--------7-------- +---- +--------------------------|------------------------------------------------- +---- +--------------------------|------------------------------------------------- +---- + + + + 1/2 1 1/2 + +------5-----|--------------------5------------------------------------------ +---- +------5--7--|-----------------5-----5h8p5--------8-------------------------- +---- +------------|--------------7^--------------7^-5--8--7^'(7)p5-----7p5-----5-- +---- +------------|-------------------------------------------------7-------7----- +---- +------------|--------------------------------------------------------------- +---- +------------|--------------------------------------------------------------- +---- + + + + 1/2 1 1/2 + +-------------------------------------------------|-------------------------- +---- +-------------------------------------------------|-------------------------- +---- +-------------------------------------------------|-------------------------- +---- +7p5-----5----------------------------------------|-------------------------- +---- +-----7-----7--5h7p5\3--5--3----------------------|--------5^-0--5^-------5-- +---- +-----------------------------5p3-----------------|-------------------------- +---- + + + + + +---------------------------|---------------------------------------------|-- +---- +---------------------------|---------------------------------------------|-- +---- +---------------------------|-----0--0-----0-----0-----0--0---------------|-- +---- +---------------------------|--4--------4-----4-----4---------------------|-- +---- +3--------5-----------------|--------------------------------3p0--0--3p0--|-- +---- +---------------------------|---------------------------------------------|-- +---- + + + + 1 1 1 + +--------------------------------------------------5--|--(5)-----5--5-------- +---- +5--------7--5-----x--5-------------------------5-----|----------5--5-------- +---- +5--------7--5-----x--5--------7^-------(7)~~~--------|-------7^----------7^- +---- +-----------------------------------------------------|---------------------- +---- +-----------------------------------------------------|---------------------- +---- +-----------------------------------------------------|---------------------- +---- + + + + 1 1/2 1/2 1/4 +p1 +-----------------------------|--5--5--8--------5--------8^-5-----5--5--8---- +---- +-----------5-----5-----5~~~--|-----5--8-----5--5--------------8^----5--8---- +---- +(7)~~~~~~--------------7^----|-----------7^-------------------------------7^ +---' +-----------------------------|---------------------------------------------- +---- +-----------------------------|---------------------------------------------- +---- +-----------------------------|---------------------------------------------- +---- + + + + 1/4 1/4 p1/2 +1s-------------- +----------|-----------------------------------------------|----------------- +---- +----------|--7-----------------------------5^-------------|----------------- +---- +(7)p5-----|--7-----5^----------------------5^----7-----7^-|-----7^----7----- +---- +-------7--|-----7-----7--5--7-----7~~~~~~-----------------|----------------- +---- +----------|-----------------------------------------------|----------------- +---- +----------|-----------------------------------------------|----------------- +---- + + + 2 +------^ 1/2 1/2 + +-------------------------------------|-------------------------------------- +---- +-------------------------------------|-------------------------------------- +---- +7-----7-----(7)p5-----7-----5~~~~~~--|--7--5-----7^-5-----7--5-----5--7p5^-- +---' +-------------------7-----------------|--------------------------7----------- +---- +-------------------------------------|-------------------------------------- +---- +-------------------------------------|-------------------------------------- +---- + + + + 1/2 + +--------------|----------------------------------------------------|-------- +---- +--------------|----------------------------------------------------|-------- +---- +(5)-----5-----|-------------------------5--------------7--5--x--x--|--5----- +---- +-----7-----6^-|--(6)~~~--7--6--6-----7-----------7--x--------------|--5----- +---- +--------------|----------------------------------------------------|-------- +---- +--------------|----------------------------------------------------|-------- +---- + + + 1 + 1/2s----^ 1 1 + +--------------------------------------------------|------------------------- +---- +--------------------------------------------------|------------------------- +---- +---5----------------------------------------------|------------------------- +---- +---5----------------------------------------------|------------------------- +---- +7--------(0)--5^-------------5^-------5^'(5)p3p0--|--5p3p0--0--------0--3--5 +---- +--------------------------------------------------|------------------------- +---- + + + + p1/2 1/2 + +---------------------|--------------------------------------------|--------- +---- +---------------------|--------------------------------------------|--------- +---- +---------------------|--------------------------------------------|--------- +---- +---------------------|--------------------------------------------|------7-- +---- +3p0--3p0--5--3p0-----|-----5--3p0--0--0--0--3p0--5--5^-5p0/9--(9)^|--------- +---- +---------------------|--------------------------------------------|--------- +---- + + + + + +-----------------------------------------|--------------------0------------- +---- +---------------------------------10--10--|-----10--10-----10---------------- +---- +---------------------------------12--12--|-----12--12-----12----------14---- +---- +---10--7--------7------------------------|-----------------------(0)-------- +---- +----------------------9/-----------------|---------------------------------- +---- +-----------------------------------------|---------------------------------- +---- + + + + 1 1 1 + +------------------------|--------------------------------------------------- +---- +------------------------|--20--------20--20--------------------20-----20--20 +---- +~~~~~~--------19^-------|--19^-----------19^-------------------19-----19--19 +---- +------------------------|--------------------------------------------------- +---- +------------------------|--------------------------------------------------- +---- +------------------------|--------------------------------------------------- +---- + + + + 1/4 1 + +-----------------------|-------------------------------------------20^------ +---- +20--20--20-------------|--19------------------------------------------------ +---- +19--19--19-----17------|--19--17----------------17^------------------------- +---- +-------------------19--|----------19--19~~~~~~------------------------------ +---- +-----------------------|---------------------------------------------------- +---- +-----------------------|---------------------------------------------------- +---- + + + + 1 1/4 1/2 1 + +---20^-|--20----------------------------8^-5-----5---------------------||--- +---- +-------|--------------------------------------8^----5--8---------------||--- +---- +-------|------------------x\------------------------------7^'(7)p5-----||--- +---- +-------|------------------------------------------------------------7--||--- +---- +-------|---------------------------------------------------------------||--- +---- +-------|---------------------------------------------------------------||--- +---- + + + + + +---------------------------------------------------------------------------- +---- +---------------------------------------------------------------------------- +---- +---------------------------------------------------------------------------- +---- +---------------------------------------------------------------------------- +---- +---------------------------------------------------------------------------- +---- +---------------------------------------------------------------------------- +---- + + + + + +============================================================================ +==== +== TABLATURE EXPLANATION + == +============================================================================ +==== + +---------- ---------- +----5h8--- Hammeron ----(8)--- Ghost Note +---------- ---------- +----5p8--- Pulloff ---------- + +---------- ---------- +----5/8--- Slide Up -----x---- Dead Note +---------- ---------- +----5\8--- Slide Down ---------- + +---------- ||------|| Repeat Start & End +----5~~~-- Vibrato ||*----*|| +---------- ||*----*|| +---------- ||------|| + + 1 1 +---------- ---------- +----5^---- Bent up 1 step(2 frets) ----5^--'- Bent up 1 step and +---------- Number above signifies ---------- then released to +---------- degree of bend. ---------- origional pitch. + Either 1 1/2 steps,1 step + or 1/2 step. + 1/2s--1 p1/2 +---------- Bend is sustained and ---------- +--5^----^- then bent up again.In --5^------ Note is pre bent. +---------- this case then note is ---------- +---------- bent a half step before ---------- + being bent up to a whole + step. + +============================================================================ +==== +== Created with a shareware version of the BUCKET 'O TAB + == +== tablature creation software for Windows + == +== For more information: + == +== email: gse@ocsystems.com + == +== US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124 + == +============================================================================ +==== + + diff --git a/guitar/tabs/Joe Satriani/summer song.tab b/guitar/tabs/Joe Satriani/summer song.tab new file mode 100644 index 0000000..6e55e78 --- /dev/null +++ b/guitar/tabs/Joe Satriani/summer song.tab @@ -0,0 +1,431 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +okay, this one is for all you people who had a hard time trying to read in +the last version Summer Song. This one is 100% ASCII! Same exact song, +tab, and everything else. + By the way, I'm sorry about all the little "^M"s. I don't know +why my editor stuck those in! + + +--------------------------------------------------------------------------- + +SUMMER SONG +=========== +by Joe Satriani + +' - bend example:-15'-----`(15) +` - release bend release to original note +^ - bend and release +(2) - ghost note AH - Artificial Harmonic +X - percussive sound P - Pull-off +/ - slide up H - Hammer-on +\ - slide down trem. - tremolo (whammy) bar +~ - vibrato +.. - note held Note: Please read EVERYTHING above the staff +PM - palm muted as well as in it!! + +The intro is just a combination of an A5 chord and a D/A + (Rhy. Fig. 1) + PM--| PM--| PM--| PM--| PM--| PM--| PM--| +-5-5-----5-----2-2-----2-----5-5-----5-----5-5-----5- +-5-5-----5-----3-3-----3-----5-5-----5-----5-5-----5- +-2-2-----2-----2-2-----2-----2-2-----2-----2-2-----2- +-2-2-----2-----4-4-----4-----2-2-----2-----2-2-----2- +-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0- +----------------------------------------------------- + Note: You hardly hear the muted A on the fifth string +Guitar I continues with Rhy. Fig. I +Guitar II comes in with Harmonics. + harm.--------> +|-----------------|-----------------|-----------------|-----------------| +|-----------------|-----------------|-----------------|-----------------| +|---------5-------|-----------------|---------5-------|-----------------| +|-------5---5-----|-----------------|-------5---5-----|-----------------| +|---5-4-------4-5-|-----------------|---5-4-------4-5-|-----------------| +|-----------------|-----------------|-----------------|-----------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + +|-----------------|-----------------|-----------------|-----------------| +|-----------------|-----------------|-----------------|-----------------| +|-----------------|-----------------|---------5-------|---------5-------| +|-------5---------|---5-------------|-------5---5-----|-------5---5-----| +|---5-4---4-5---5-|-4---4-5---------|---5-4-------4-5-|---5-4-------4-5-| +|-----------------|-----------------|-----------------|-----------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + +|-----------------|-----------------|-----------------| +|-----------------|-----------------|-----------------| +|-----------------|---------5-------|-----------------| +|-------5---------|-------5---5-----|-----------------| +|---5-4---4-5-----|---5-4-------4-5-|-----------------| +|-----------------|-----------------|-----------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + +Main part thingy: + 1/2 (slight vib.) trem. +|-------------------------------------------------------------------------| +|-----10------------------------------------10----------------------------| +|-X-9----9---11^-9-7-9/11-9-9~~~~~~~~\(0)-9----9--11^-9-7-7/9.....\2~~~~~~| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1/2 +|-------------------------------------------------------------------------| +|------------10---------------------------P-------------------------------| +|-(2)/(19)-9----9-11-11' `~~~-9\7/9-11-11^-(9)-9\7--9/11--9~~~~~~~~(9)~~~~| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 +|---H---------------------------------------------------------------------| +|-10-12-14-14'--`-12~~~~--------------------------------------------------| +|------------------------14---14'---(14)--`-14~~~~~~~~~~~~~~~~~~~~~~~~~~\-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1/2 +|----17------------------------------------------------17-----------------| +|-17----17---19'-`--17--15--17/19--17--17~~~~~~~~~--17----17--19'-`-17-15-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + Harm.------------| 1/2 1/2 +|------------------------------------------17--------------------P--H-----| +|-17~~~~~~~~~~~-------------------------17----17-19-19'-19'`'`-17-15-17---| +|-----------------------------5-------------------------------------------| +|---------------7\5/7-------5---5-----------------------------------------| +|---------------------4-5-4-------4-5-------------------------------------| +|-------------------------------------5-----------------------------------| + + H 1/2 1 AH +|-----------P-----------------------17-19-21-21^--19~~~~17--17'--------`17| +|19'~~~~`-17-15--19--17~~~~~~~~~~~\---------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 1 1/2 1 1/2 1/2 +|(17)~~~~~~~~~~X\---||-8'--8'~~~~~-8-5----5-------------------------------| +|--------------X\-5-||-----------------8'----8'~~~8-7^-5------------------| +|-------------------||-----------------------------------7-5'---AH--------| +|-------------------||----------------------------------------7-5---------| +|-------------------||--------------------------------------------7-5\3---| +|-------------------||--------------------------------------------------5-| + + 1 1 1 1/2 1 +|-------------------8'--8'~~~~-8-5----5-----------------------------------| +|----------------------------------8'---8'~~~~----------------------------| +|------------------------------------------------------5~~~~~~-7/9-7------| +|----------------------------------------------3-3-5/7--------------------| +|-----------------X-------------------------------------------------------| +|3'~~~~~~(3)/12\--X-------------------------------------------------------| + 1 1/2 +Harm. 2 v 6* rake 1 1 1 1 2 +|5----(5)\-/--\-----------------------------------------------------------| +|--------------------------13^-13'`'`'-13^-10----10~~~~~(10)\-------------| +|----------------X-------X--------------------12--------------11/12-11----| +|----------------X--------------------------------------------------------| +|----------------X--------------------------------------------------------| +|------------------3/5----------------------------------------------------| + * - Note is bent with whammy bar + 1 1/2 +|------------------------------PM--8'~~~~~~~`-5-8'-5---5~~~~~-------------| +|----------------------------------------------------8--------6-6-(8)/10--| +|9\7-9/11-9\7-7/9\2-2-2~~~~~~~/(0)----------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 3 3 + v v Harm. 1 1 1 +|8~~~-10/12-10-(10)-10-------------20'-20-17------------------------------| +|-------------------10-----------------------20^-17--------20'~~~~~~~~-X\-| +|---------------------trem.---19--------------------19'-17-------------X\-| +|----------------------0------19---------------------------------------X\-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 1 1 1/2 +|------------P----------------------------------------------17-20'-17-----| +|-------------0-15'~~~~~~-------------------15-18'~~~~~-20'-----------20--| +|11^-9-(9)/13-0-----------9-11-12~~~(12)/16-------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 AH 1/2 +|17~~~~~~~~------trem.-------------------------------------------------3--| +|-----------20'~~~~~~~~~~-----------3---------3-------------3----3-4-5----| +|-------------------------3~~~~~~-5---3~~~~-5---3-5-3-5~~~~---5'----------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 3 1 3 + 1 1 1 v v \ +|6---3--------------------------------------------------------------------| +|--5---5~~~~-3\1------AH----------------------------------/X-AH--P---P----| +|----------------3^^^^-3^^^~~~~~------P---P---------------/X-0--3-0-3-0---| +|----------------------^---------3/5\3-2-3-2---P-H--------/X--------------| +|---------------squeal this note-------------1^-0--P----------------------| +|-------------------------------------------------1-0-(0)-----------------| + + +|-------------------------------------------------------------------------| +|---P-----P---P-----P------P----P------P-------P----P------P---------P----| +|0-5-0-0-6-0-6-0-0-7-0-0-10-0-10-0-0-12-0-15-15-0-15-0-0-17-0-0-19/20-0-21| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + P P P P P +|------------------------------------22-15-22-15-15-21-15-15-20-15-20-15--| +|--P------P-------------H-----P--0-0--------------------------------------| +|21-0-0-19-0-19/20-20\19-21-21-0------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + P P P H H P P P P H H P P +|---20-15-18-20-18-15-18-15-17-18-17-15----15-18-20-18-15-19-15-17-18-17--| +|18-------------------------------------18--------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 2 +P 1 v +|15------------P--P-------------------------------------------------------| +|---18-15-17-18-17-15----15------P---18'....(18)~~~~~~----/X----trem.-----| +|---------------------18----18-17-15----------------------/X--0--14.......| +|---------------------------------------------------------/X--------------| +|------------------------------------------------------4------------------| +|-------------------------------------------------------------------------| + 4 2 2 7 6 + \ / v \ / 1 H P +|-------------------trem.--------------------------17'-17-14-17-14----14--| +|------H--------------17..........\-H------------------------------17-----| +|(14)\--11~~~~~~~\8-0-17..........\--14~~~~~~~~~~\------------------------| +|--------^----------------------------^-----------------------------------| +|----Depress-bar------------------Depress-bar-----------------------------| +|--before-sounding--------------before-sounding---------------------------| + note note + 1/2 1 +|-----P-----------------------------P---------------------------17-17-----| +|14-17-14---P--------P--H--H---14-17-14----14------P--------20'-------20'-| +|---------17-16-17-16-14-16-17----------17----17-16-14/16-0---------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 1 1 1 1 1/2 +|17-----17-----17-20^-17----------------17'-`-14^-------------------------| +|---20'----20'-----------20'~~~~~~~~\-------------15-13\12----------------| +|----------------------------------------------------------14-12\11-------| +|-------------------------------------0-----------------------------12-10/| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 +|-------------------------------------------------------------------------| +|------------------------------------------/X\-------------9-10-11-12-12--| +|------------------------------------------/X\---9~~~~-11'----------------| +|12--------------P-------------------------/X\-0--------------------------| +|---10/12\10\9-10-9-7/9\7\5-7\5-2-2/5~~~~~~-------------------------------| +|-------------------------------------------------------------------------| + + 1 trem. +|--------------------12------------16-17-18-19-20-21-22~~~~~~~~~~~~-------| +|11-12-13-14-15~~~~~----17~~~~-19'----------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +back to first part: + PM 1/2 1/2 +|-------------------------------------------------------------------------| +|---10-----------------------------------10---10--------------------------| +|-9----9--11'-`-9-7-9/11-9-9~~~~~~~~~~~~----9----9-11'-`-9-7-7/9..../12---| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1/2 +|-------------------------------------------------------------------------| +|-----------------------10------------------------------------------------| +|---AH----------------9----9-11-11'~~`-9\7/9-11-11'~~`--9\7-9/11-9~~~~~~~~| +|12\7.......(7)\5/7-------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 H 1 1 +|--H------------------------------------------------10-12----8'-8'~~~~~-5-| +|10-12-14-14'-`-12~~~~----------------trem.---10/20-------12--------------| +|---------------------14-14'.....`-14~~~~~~~~-----------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 1 1/2 1 1 1 1 1/2 +|---5------5-5---------------------------------------8'-8'~~~~-8-5----5~~~| +|8'---8'~~~--5-----------------------------------------------------8'-----| +|--------------7'-`-5'----------------------------------------------------| +|----------------------7\5------------------------------------------------| +|--------------------------5\3/5-3-----AH---------PM----------------------| +|----------------------------------3'-`'~~~~~~/15\-0----------------------| + 1 1/2 1 + \/ \ 1 1 2 +|(5)/17-------------------------------------------------------------------| +|----------------------------Harm-------13^-13^^'-^-10----10~~~~----------| +|---------------5~~~~~7/9-7-X-12-----------------------12-------11/12-----| +|-------3-3-5/7-------------X-------X-------------------------------------| +|-----------------------------------X-------------------------------------| +|-------------------------------------0-----------------------------------| + + PM 1 1/4 +|--------------------------------------------8'~~~~8-5-8'-5---5~~~~~X-----| +|-----------------------------AH-----------grad.------------8---------6~~~| +|(12)-11\9\7-9/11\9\7-7/9\2-2-2~~~~~~~~~/--bend---------------------------| +|-----------------------------------------0-------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 1/2 + v 1 1 1 1 1 +|----------8~~~~~-10/12-10~~~~~~-------------20'-`-17---------------------| +|(6)~-8/10-----------------------13'-'~~~~~0----------20'-17--------20'~~~| +|------------------------------------------------------------19^-17-------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 1/2 1 1/2 1 +|---------------------------------------5-8'-5---5...----trem.------------| +|X\-------15'~~~~~---------18'~~~~~--8'--------8------8'~~~~~~~~------15'~| +|X\--------------------------------0--------------------------------------| +|X\-----------------------------------------------------------------------| +pick----------------------------------------------------------------------| +|sl.-2^-0----------0-2-3\0---------------------------------------2^-0-----| + + 1 1 1/2 +|-------------------------------17-20'-17----17.................----------| +|(15)~~------------18'~~~~~-20'-----------20------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|---------------P---------------------------------------------------------| +|-------0-2-3/15-0--------------------------------------------------------| + + H P 1/2 H P +|15-17-15\14\12\10/12-12/14-12\10-10/12~~~~~~-14-(14)^-12-14-12\10\9------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + H P P H P P P P P P H P P +|10\9\7\5\3-3/5~~~~~-7-5-7-5-0-7-9-0-9/10-0-10/12-0-9/10-0-7-0-5-0-3-5-3-0| +|-------------------------------------------------------------------------| +|---------------------------------very fast little licks------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + H P P H P P H P P +|2-3-2-0-3-5-3-0-2-3-2-0--H-P-P---H-P-P---H-P-P---H-P-P---H-P-P---P-AH----| +|------------------------3-5-3-0-2-3-2-0-3-5-3-0-5-7-5-0-3-5-3-0-2-0-3/5..| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + Fdbk. +|--------------------------pitches:---------------------------------------| +|(5)...../17\-----------------A-----------C#-------------E-----trem.------| +|--------------2............-(2).........(2)............(2)~~~~~~~~~~~~~~~| +|--------------2............----------------------------------------------| +|--------------0............----------------------------------------------| +|-------------------------------------------------------------------------| + +Fdbk. Harm.-------| Harm.-------| Harm.-------| +continues-----------------------------------------------------------------| +|-------------------------------------------------------------------------| +|(2).....-------5----------------------5---------------------5------------| +|-------------5---5------------------5---5-----------------5---5----------| +|---------5-4-------4-5----------5-4-------4-5---------5-4-------4-5------| +|-------------------------------------------------------------------------| + + Harm.-------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------5-----------------------------------------------------------------| +|-----5---5---------------------------------------------------------------| +|-5-4-------4-5-----------------------------------------------------------| +|-------------------------------------------------------------------------| +Outro Solo: + +|--------------------------------------------------------P----------------| +|------H---12....-------------12...------------12-14~~~~~-12---------H--P-| +|-14-12-14--------14-12...-14-------14-12..-14---------------14-12\11-12--| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|----------------------------------------17-------15-------14-------12----| +|P--H--P---------------------------12/15----15\14----14\12----12\10----10\| +|-11-12-11\7-7/9-9/11\9-9~~~~~~~~~----------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + H P P +|---10-----9-----7-----5-----3-2-3-2-0----H-P-P---------------------------| +|\8----8\7---7\5---5\3---3\2-----------3-2-3-2-0------P-------------------| +|------------------------------------------------2/4\2-0---AH-------------| +|--------------------------------------------------------2/7~~~~~~~/X-----| +|---------------------------------------------------------------------X---| +|---------------------------------------------------------------------X---| + + 1 1 AH +|17'-`-19'-17~~~~~~~~~(17)~~~~~\15-19-15-14------P------------------------| +|-------------------------------------------15-14-12----------------------| +|----------------------------------------------------12\11---------11-----| +|----------------------------------------------------------12\11\9----9\7-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 H +|------------------------------------------------------------H--0-2/3-0-5-| +|--------------------------------------H-H---------------P--3-5-----------| +|9-------7/9---------0-11/12------H---0-9-11--H-H-----7\4-0---------------| +|--7\5-5-----7'-7~~~---------12\11-12--------0-9-11-0---------------------| +|-------------------------------------------------------------------------| +|--------------------Starting here, very fast licks (16th notes)----------| + +H H H 1 +|7--H-P----0-3-5--H-H-----------------------------------------------------| +|--5-7-5-5-------0-3-5--H-H----------------------------------12'~~~~~~~~~~| +|----------------------0-4-6--H-H-----------------------------------------| +|----------------------------0-4-5--H-H----4/5------P-H-------------------| +|----------------------------------0-4-5-0-----0-4/5-0-2-2-0--------------| +|------------------------------------------------(ends here)--------------| + + -Gtr. I keep repeating this- -Gtr. II plays this until fade out--- +|-----------until fade out----------|-------------------------------------| +|-----------------------------------|-------------------------------------| +|------1------1------1------1-------|-------------------------------------| +|------v------v------v------v-------|-----5-------------5-----------------| +|12\0----0-0----0-0----0-0----0-0---|-5-4---4-5-----5-4---4-5-------------| +|-----3'-----3'-----3'-----3'-------|-------------------------------------| + Harm.------------------| + +Note: Again if you don't have this tape/CD, or unless you know this song + backwards and forwards, this is not going to make ANY sense + whatsoever!!!!!! (Hopefully, it make sense even if you do!) + diff --git a/guitar/tabs/Joe Satriani/summersong.tab b/guitar/tabs/Joe Satriani/summersong.tab new file mode 100644 index 0000000..0ff68b5 --- /dev/null +++ b/guitar/tabs/Joe Satriani/summersong.tab @@ -0,0 +1,473 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive +Dec 02: 20919 files + Guitar Tab + Everything + Rock + Pop + Jazz + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / s / satriani_joe / summer_song.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +okay, this one is for all you people who had a hard time trying to read in +the last version Summer Song. This one is 100% ASCII! Same exact song, +tab, and everything else. + By the way, I'm sorry about all the little "^M"s. I don't know +why my editor stuck those in! + + +--------------------------------------------------------------------------- + +SUMMER SONG +=========== +by Joe Satriani + +' - bend example:-15'-----`(15) +` - release bend release to original note +^ - bend and release +(2) - ghost note AH - Artificial Harmonic +X - percussive sound P - Pull-off +/ - slide up H - Hammer-on +\ - slide down trem. - tremolo (whammy) bar +~ - vibrato +.. - note held Note: Please read EVERYTHING above the staff +PM - palm muted as well as in it!! + +The intro is just a combination of an A5 chord and a D/A + (Rhy. Fig. 1) + PM--| PM--| PM--| PM--| PM--| PM--| PM--| +-5-5-----5-----2-2-----2-----5-5-----5-----5-5-----5- +-5-5-----5-----3-3-----3-----5-5-----5-----5-5-----5- +-2-2-----2-----2-2-----2-----2-2-----2-----2-2-----2- +-2-2-----2-----4-4-----4-----2-2-----2-----2-2-----2- +-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0- +----------------------------------------------------- + Note: You hardly hear the muted A on the fifth string +Guitar I continues with Rhy. Fig. I +Guitar II comes in with Harmonics. + harm.--------> +|-----------------|-----------------|-----------------|-----------------| +|-----------------|-----------------|-----------------|-----------------| +|---------5-------|-----------------|---------5-------|-----------------| +|-------5---5-----|-----------------|-------5---5-----|-----------------| +|---5-4-------4-5-|-----------------|---5-4-------4-5-|-----------------| +|-----------------|-----------------|-----------------|-----------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + +|-----------------|-----------------|-----------------|-----------------| +|-----------------|-----------------|-----------------|-----------------| +|-----------------|-----------------|---------5-------|---------5-------| +|-------5---------|---5-------------|-------5---5-----|-------5---5-----| +|---5-4---4-5---5-|-4---4-5---------|---5-4-------4-5-|---5-4-------4-5-| +|-----------------|-----------------|-----------------|-----------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + +|-----------------|-----------------|-----------------| +|-----------------|-----------------|-----------------| +|-----------------|---------5-------|-----------------| +|-------5---------|-------5---5-----|-----------------| +|---5-4---4-5-----|---5-4-------4-5-|-----------------| +|-----------------|-----------------|-----------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + +Main part thingy: + 1/2 (slight vib.) trem. +|-------------------------------------------------------------------------| +|-----10------------------------------------10----------------------------| +|-X-9----9---11^-9-7-9/11-9-9~~~~~~~~\(0)-9----9--11^-9-7-7/9.....\2~~~~~~| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1/2 +|-------------------------------------------------------------------------| +|------------10---------------------------P-------------------------------| +|-(2)/(19)-9----9-11-11' `~~~-9\7/9-11-11^-(9)-9\7--9/11--9~~~~~~~~(9)~~~~| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 +|---H---------------------------------------------------------------------| +|-10-12-14-14'--`-12~~~~--------------------------------------------------| +|------------------------14---14'---(14)--`-14~~~~~~~~~~~~~~~~~~~~~~~~~~\-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1/2 +|----17------------------------------------------------17-----------------| +|-17----17---19'-`--17--15--17/19--17--17~~~~~~~~~--17----17--19'-`-17-15-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + Harm.------------| 1/2 1/2 +|------------------------------------------17--------------------P--H-----| +|-17~~~~~~~~~~~-------------------------17----17-19-19'-19'`'`-17-15-17---| +|-----------------------------5-------------------------------------------| +|---------------7\5/7-------5---5-----------------------------------------| +|---------------------4-5-4-------4-5-------------------------------------| +|-------------------------------------5-----------------------------------| + + H 1/2 1 AH +|-----------P-----------------------17-19-21-21^--19~~~~17--17'--------`17| +|19'~~~~`-17-15--19--17~~~~~~~~~~~\---------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 1 1/2 1 1/2 1/2 +|(17)~~~~~~~~~~X\---||-8'--8'~~~~~-8-5----5-------------------------------| +|--------------X\-5-||-----------------8'----8'~~~8-7^-5------------------| +|-------------------||-----------------------------------7-5'---AH--------| +|-------------------||----------------------------------------7-5---------| +|-------------------||--------------------------------------------7-5\3---| +|-------------------||--------------------------------------------------5-| + + 1 1 1 1/2 1 +|-------------------8'--8'~~~~-8-5----5-----------------------------------| +|----------------------------------8'---8'~~~~----------------------------| +|------------------------------------------------------5~~~~~~-7/9-7------| +|----------------------------------------------3-3-5/7--------------------| +|-----------------X-------------------------------------------------------| +|3'~~~~~~(3)/12\--X-------------------------------------------------------| + 1 1/2 +Harm. 2 v 6* rake 1 1 1 1 2 +|5----(5)\-/--\-----------------------------------------------------------| +|--------------------------13^-13'`'`'-13^-10----10~~~~~(10)\-------------| +|----------------X-------X--------------------12--------------11/12-11----| +|----------------X--------------------------------------------------------| +|----------------X--------------------------------------------------------| +|------------------3/5----------------------------------------------------| + * - Note is bent with whammy bar + 1 1/2 +|------------------------------PM--8'~~~~~~~`-5-8'-5---5~~~~~-------------| +|----------------------------------------------------8--------6-6-(8)/10--| +|9\7-9/11-9\7-7/9\2-2-2~~~~~~~/(0)----------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 3 3 + v v Harm. 1 1 1 +|8~~~-10/12-10-(10)-10-------------20'-20-17------------------------------| +|-------------------10-----------------------20^-17--------20'~~~~~~~~-X\-| +|---------------------trem.---19--------------------19'-17-------------X\-| +|----------------------0------19---------------------------------------X\-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 1 1 1/2 +|------------P----------------------------------------------17-20'-17-----| +|-------------0-15'~~~~~~-------------------15-18'~~~~~-20'-----------20--| +|11^-9-(9)/13-0-----------9-11-12~~~(12)/16-------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 AH 1/2 +|17~~~~~~~~------trem.-------------------------------------------------3--| +|-----------20'~~~~~~~~~~-----------3---------3-------------3----3-4-5----| +|-------------------------3~~~~~~-5---3~~~~-5---3-5-3-5~~~~---5'----------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 3 1 3 + 1 1 1 v v \ +|6---3--------------------------------------------------------------------| +|--5---5~~~~-3\1------AH----------------------------------/X-AH--P---P----| +|----------------3^^^^-3^^^~~~~~------P---P---------------/X-0--3-0-3-0---| +|----------------------^---------3/5\3-2-3-2---P-H--------/X--------------| +|---------------squeal this note-------------1^-0--P----------------------| +|-------------------------------------------------1-0-(0)-----------------| + + +|-------------------------------------------------------------------------| +|---P-----P---P-----P------P----P------P-------P----P------P---------P----| +|0-5-0-0-6-0-6-0-0-7-0-0-10-0-10-0-0-12-0-15-15-0-15-0-0-17-0-0-19/20-0-21| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + P P P P P +|------------------------------------22-15-22-15-15-21-15-15-20-15-20-15--| +|--P------P-------------H-----P--0-0--------------------------------------| +|21-0-0-19-0-19/20-20\19-21-21-0------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + P P P H H P P P P H H P P +|---20-15-18-20-18-15-18-15-17-18-17-15----15-18-20-18-15-19-15-17-18-17--| +|18-------------------------------------18--------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 2 +P 1 v +|15------------P--P-------------------------------------------------------| +|---18-15-17-18-17-15----15------P---18'....(18)~~~~~~----/X----trem.-----| +|---------------------18----18-17-15----------------------/X--0--14.......| +|---------------------------------------------------------/X--------------| +|------------------------------------------------------4------------------| +|-------------------------------------------------------------------------| + 4 2 2 7 6 + \ / v \ / 1 H P +|-------------------trem.--------------------------17'-17-14-17-14----14--| +|------H--------------17..........\-H------------------------------17-----| +|(14)\--11~~~~~~~\8-0-17..........\--14~~~~~~~~~~\------------------------| +|--------^----------------------------^-----------------------------------| +|----Depress-bar------------------Depress-bar-----------------------------| +|--before-sounding--------------before-sounding---------------------------| + note note + 1/2 1 +|-----P-----------------------------P---------------------------17-17-----| +|14-17-14---P--------P--H--H---14-17-14----14------P--------20'-------20'-| +|---------17-16-17-16-14-16-17----------17----17-16-14/16-0---------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 1 1 1 1 1/2 +|17-----17-----17-20^-17----------------17'-`-14^-------------------------| +|---20'----20'-----------20'~~~~~~~~\-------------15-13\12----------------| +|----------------------------------------------------------14-12\11-------| +|-------------------------------------0-----------------------------12-10/| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1 +|-------------------------------------------------------------------------| +|------------------------------------------/X\-------------9-10-11-12-12--| +|------------------------------------------/X\---9~~~~-11'----------------| +|12--------------P-------------------------/X\-0--------------------------| +|---10/12\10\9-10-9-7/9\7\5-7\5-2-2/5~~~~~~-------------------------------| +|-------------------------------------------------------------------------| + + 1 trem. +|--------------------12------------16-17-18-19-20-21-22~~~~~~~~~~~~-------| +|11-12-13-14-15~~~~~----17~~~~-19'----------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +back to first part: + PM 1/2 1/2 +|-------------------------------------------------------------------------| +|---10-----------------------------------10---10--------------------------| +|-9----9--11'-`-9-7-9/11-9-9~~~~~~~~~~~~----9----9-11'-`-9-7-7/9..../12---| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1/2 +|-------------------------------------------------------------------------| +|-----------------------10------------------------------------------------| +|---AH----------------9----9-11-11'~~`-9\7/9-11-11'~~`--9\7-9/11-9~~~~~~~~| +|12\7.......(7)\5/7-------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 H 1 1 +|--H------------------------------------------------10-12----8'-8'~~~~~-5-| +|10-12-14-14'-`-12~~~~----------------trem.---10/20-------12--------------| +|---------------------14-14'.....`-14~~~~~~~~-----------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 1 1/2 1 1 1 1 1/2 +|---5------5-5---------------------------------------8'-8'~~~~-8-5----5~~~| +|8'---8'~~~--5-----------------------------------------------------8'-----| +|--------------7'-`-5'----------------------------------------------------| +|----------------------7\5------------------------------------------------| +|--------------------------5\3/5-3-----AH---------PM----------------------| +|----------------------------------3'-`'~~~~~~/15\-0----------------------| + 1 1/2 1 + \/ \ 1 1 2 +|(5)/17-------------------------------------------------------------------| +|----------------------------Harm-------13^-13^^'-^-10----10~~~~----------| +|---------------5~~~~~7/9-7-X-12-----------------------12-------11/12-----| +|-------3-3-5/7-------------X-------X-------------------------------------| +|-----------------------------------X-------------------------------------| +|-------------------------------------0-----------------------------------| + + PM 1 1/4 +|--------------------------------------------8'~~~~8-5-8'-5---5~~~~~X-----| +|-----------------------------AH-----------grad.------------8---------6~~~| +|(12)-11\9\7-9/11\9\7-7/9\2-2-2~~~~~~~~~/--bend---------------------------| +|-----------------------------------------0-------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + 1/2 + v 1 1 1 1 1 +|----------8~~~~~-10/12-10~~~~~~-------------20'-`-17---------------------| +|(6)~-8/10-----------------------13'-'~~~~~0----------20'-17--------20'~~~| +|------------------------------------------------------------19^-17-------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 1 1/2 1 1/2 1 +|---------------------------------------5-8'-5---5...----trem.------------| +|X\-------15'~~~~~---------18'~~~~~--8'--------8------8'~~~~~~~~------15'~| +|X\--------------------------------0--------------------------------------| +|X\-----------------------------------------------------------------------| +pick----------------------------------------------------------------------| +|sl.-2^-0----------0-2-3\0---------------------------------------2^-0-----| + + 1 1 1/2 +|-------------------------------17-20'-17----17.................----------| +|(15)~~------------18'~~~~~-20'-----------20------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|---------------P---------------------------------------------------------| +|-------0-2-3/15-0--------------------------------------------------------| + + H P 1/2 H P +|15-17-15\14\12\10/12-12/14-12\10-10/12~~~~~~-14-(14)^-12-14-12\10\9------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + H P P H P P P P P P H P P +|10\9\7\5\3-3/5~~~~~-7-5-7-5-0-7-9-0-9/10-0-10/12-0-9/10-0-7-0-5-0-3-5-3-0| +|-------------------------------------------------------------------------| +|---------------------------------very fast little licks------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + H P P H P P H P P +|2-3-2-0-3-5-3-0-2-3-2-0--H-P-P---H-P-P---H-P-P---H-P-P---H-P-P---P-AH----| +|------------------------3-5-3-0-2-3-2-0-3-5-3-0-5-7-5-0-3-5-3-0-2-0-3/5..| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + Fdbk. +|--------------------------pitches:---------------------------------------| +|(5)...../17\-----------------A-----------C#-------------E-----trem.------| +|--------------2............-(2).........(2)............(2)~~~~~~~~~~~~~~~| +|--------------2............----------------------------------------------| +|--------------0............----------------------------------------------| +|-------------------------------------------------------------------------| + +Fdbk. Harm.-------| Harm.-------| Harm.-------| +continues-----------------------------------------------------------------| +|-------------------------------------------------------------------------| +|(2).....-------5----------------------5---------------------5------------| +|-------------5---5------------------5---5-----------------5---5----------| +|---------5-4-------4-5----------5-4-------4-5---------5-4-------4-5------| +|-------------------------------------------------------------------------| + + Harm.-------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------5-----------------------------------------------------------------| +|-----5---5---------------------------------------------------------------| +|-5-4-------4-5-----------------------------------------------------------| +|-------------------------------------------------------------------------| +Outro Solo: + +|--------------------------------------------------------P----------------| +|------H---12....-------------12...------------12-14~~~~~-12---------H--P-| +|-14-12-14--------14-12...-14-------14-12..-14---------------14-12\11-12--| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|----------------------------------------17-------15-------14-------12----| +|P--H--P---------------------------12/15----15\14----14\12----12\10----10\| +|-11-12-11\7-7/9-9/11\9-9~~~~~~~~~----------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + H P P +|---10-----9-----7-----5-----3-2-3-2-0----H-P-P---------------------------| +|\8----8\7---7\5---5\3---3\2-----------3-2-3-2-0------P-------------------| +|------------------------------------------------2/4\2-0---AH-------------| +|--------------------------------------------------------2/7~~~~~~~/X-----| +|---------------------------------------------------------------------X---| +|---------------------------------------------------------------------X---| + + 1 1 AH +|17'-`-19'-17~~~~~~~~~(17)~~~~~\15-19-15-14------P------------------------| +|-------------------------------------------15-14-12----------------------| +|----------------------------------------------------12\11---------11-----| +|----------------------------------------------------------12\11\9----9\7-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 H +|------------------------------------------------------------H--0-2/3-0-5-| +|--------------------------------------H-H---------------P--3-5-----------| +|9-------7/9---------0-11/12------H---0-9-11--H-H-----7\4-0---------------| +|--7\5-5-----7'-7~~~---------12\11-12--------0-9-11-0---------------------| +|-------------------------------------------------------------------------| +|--------------------Starting here, very fast licks (16th notes)----------| + +H H H 1 +|7--H-P----0-3-5--H-H-----------------------------------------------------| +|--5-7-5-5-------0-3-5--H-H----------------------------------12'~~~~~~~~~~| +|----------------------0-4-6--H-H-----------------------------------------| +|----------------------------0-4-5--H-H----4/5------P-H-------------------| +|----------------------------------0-4-5-0-----0-4/5-0-2-2-0--------------| +|------------------------------------------------(ends here)--------------| + + -Gtr. I keep repeating this- -Gtr. II plays this until fade out--- +|-----------until fade out----------|-------------------------------------| +|-----------------------------------|-------------------------------------| +|------1------1------1------1-------|-------------------------------------| +|------v------v------v------v-------|-----5-------------5-----------------| +|12\0----0-0----0-0----0-0----0-0---|-5-4---4-5-----5-4---4-5-------------| +|-----3'-----3'-----3'-----3'-------|-------------------------------------| + Harm.------------------| + +Note: Again if you don't have this tape/CD, or unless you know this song + backwards and forwards, this is not going to make ANY sense + whatsoever!!!!!! (Hopefully, it make sense even if you do!) + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Joe Satriani/surfin.prj b/guitar/tabs/Joe Satriani/surfin.prj new file mode 100644 index 0000000..98e7913 --- /dev/null +++ b/guitar/tabs/Joe Satriani/surfin.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=surfinwiththealien.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8)(154,8)(155,8)(156,8)(157,8)(158,8)(159,8)(160,32)(161,32)(162,32)(163,32)(164,32)(165,32)(166,32)(167,32)(168,32)(169,32)(170,32)(171,32)(172,32)(173,32)(174,32)(175,32)(176,32)(177,32)(178,32)(179,32)(180,32)(181,32)(182,32)(183,32)(184,32)(185,32)(186,32)(187,32)(188,32)(189,32)(190,32)(191,32)(192,32)(193,32)(194,32)(195,32)(196,32)(197,32)(198,32)(199,32)(200,32)(201,32)(202,32)(203,32)(204,32)(205,32)(206,32)(207,32)(208,32)(209,32)(210,32)(211,32)(212,32)(213,32)(214,32)(215,32)(216,32)(217,32)(218,32)(219,32)(220,32)(221,32)(222,32)(223,32)(224,32)(225,32)(226,32)(227,32)(228,32)(229,32)(230,32)(231,32)(232,32)(233,32)(234,32)(235,32)(236,32)(237,32)(238,32)(239,32)(240,32)(241,32)(242,32)(243,32)(244,32)(245,32)(246,32)(247,32)(248,32)(249,32)(250,32)(251,32)(252,32)(253,32)(254,32)(255,32)(256,32)(257,32)(258,32)(259,32)(260,32)(261,32)(262,32)(263,32)(264,32)(265,32)(266,32)(267,32)(268,32)(269,32)(270,32)(271,32)(272,32)(273,32)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16)(794,16)(795,16)(796,16)(797,16)(798,16)(799,16)(800,16)(801,16)(802,16)(803,16)(804,16)(805,16)(806,16)(807,16)(808,16)(809,16)(810,16)(811,16)(812,16)(813,16)(814,16)(815,16)(816,16)(817,16)(818,16)(819,16)(820,16)(821,16)(822,16)(823,16)(824,16)(825,16)(826,16)(827,16)(828,16)(829,16)(830,16)(831,16)(832,16)(833,16)(834,16)(835,16)(836,16)(837,16)(838,16)(839,16)(840,16)(841,16)(842,16)(843,16)(844,16)(845,16)(846,16)(847,16)(848,16)(849,16)(850,16)(851,16)(852,16)(853,16)(854,16)(855,16)(856,16)(857,16)(858,16)(859,16)(860,16)(861,16)(862,16)(863,16)(864,16)(865,16)(866,16)(867,16)(868,16)(869,16)(870,16)(871,16)(872,16)(873,16)(874,16)(875,16)(876,16)(877,16)(878,16)(879,16)(880,16)(881,16)(882,16)(883,16)(884,16)(885,16)(886,16)(887,16)(888,16)(889,16)(890,16)(891,16)(892,16)(893,16)(894,16)(895,16)(896,16)(897,16)(898,16)(899,16)(900,16)(901,16)(902,16)(903,16)(904,16)(905,16)(906,16)(907,16)(908,16)(909,16)(910,16)(911,16)(912,16)(913,16)(914,16)(915,16)(916,16)(917,16)(918,16)(919,16)(920,16)(921,16)(922,16)(923,16)(924,16)(925,16)(926,16)(927,16)(928,16)(929,16)(930,16)(931,16)(932,16)(933,16)(934,16)(935,16)(936,16)(937,16)(938,16)(939,16)(940,16)(941,16)(942,16)(943,16)(944,16)(945,16)(946,16)(947,16)(948,16)(949,16)(950,16)(951,16)(952,16)(953,16)(954,16)(955,16)(956,16)(957,16)(958,16)(959,16)(960,16)(961,16)(962,16)(963,16)(964,16)(965,16)(966,16)(967,16)(968,16)(969,16)(970,16)(971,16)(972,16)(973,16)(974,16)(975,16)(976,16)(977,16)(978,16)(979,16)(980,16)(981,16)(982,16)(983,16)(984,16)(985,16)(986,16)(987,16)(988,16)(989,16)(990,16)(991,16)(992,16)(993,16)(994,16)(995,16)(996,16)(997,16)(998,16)(999,16)(1000,16)(1001,16)(1002,16)(1003,16)(1004,16)(1005,16)(1006,16)(1007,16)(1008,16)(1009,16)(1010,16)(1011,16)(1012,16)(1013,16)(1014,16)(1015,16)(1016,16)(1017,16)(1018,16)(1019,16)(1020,16)(1021,16)(1022,16)(1023,16)(1024,16)(1025,16)(1026,16)(1027,16)(1028,16)(1029,16)(1030,16)(1031,16)(1032,16)(1033,16)(1034,16)(1035,16)(1036,16)(1037,16)(1038,16)(1039,16)(1040,16)(1041,16)(1042,16)(1043,16)(1044,16)(1045,16)(1046,16)(1047,16)(1048,16)(1049,16)(1050,16)(1051,16)(1052,16)(1053,16)(1054,16)(1055,16)(1056,16)(1057,16)(1058,16)(1059,16)(1060,16)(1061,16)(1062,16)(1063,16)(1064,16)(1065,16)(1066,16)(1067,16)(1068,16)(1069,16)(1070,16)(1071,16) +TEMPO=651578 diff --git a/guitar/tabs/Joe Satriani/surfinwiththealien.tab b/guitar/tabs/Joe Satriani/surfinwiththealien.tab new file mode 100644 index 0000000..1d010e3 --- /dev/null +++ b/guitar/tabs/Joe Satriani/surfinwiththealien.tab @@ -0,0 +1,514 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# +# + + +From Newhall@Juno.com Thu May 8 17:37:05 1997 +Date: Fri, 02 May 1997 12:09:12 -0500 +From: Jason Perez +To: guitar@olga.net +Subject: Surfing with an Alien Joe Satriani + +Joe Satriani +SURFING WITH AN ALIEN Live +from Time Machine + + +P.M. = palm mute /sl = slide up +/ 1/2 = half bend \sl = Slide Down +/ 1 = full bend \ = Release +P.H. = Pick Harmonic H = Natural Harmonic +^^^^ = Vibrato + +1/2 + /\ = half bend and release + + + +MAIN RIFF +:--|-------------------|--------------|---------------| +:--|-------------------|---6-5--------|---------------| +:--|-------------------|---3-5--------|---------------| +:5-|(5)-5-5-5-5-5-5-5--|---3-5--5-7-3-|8-8-7-3-5-5-7-5| +:5-|(5)-5-5-5-5-5-5-5--|---3-3--3-3-3-|3-3-3-3-3-3-3-3| +:3-|(3)-3-3-3-3-3-3-3-3|-6------------|---------------| + P.M.................| P.M..................| + + + 1/2 sl +:--------------|------------------|-------------| +:--------------|------------------|--6-5--------| +:2/\-0----0----|------------------|--3-5--------| +:2/\-0-/5-0--5-|(5)-5-5-5-5-5-5-5-|--3-5--5-7-3-| +:------/5----5-|(5)-5-5-5-5-5-5-5-|--3-3--3-3-3-| +:------------3-|(3)-3-3-3-3-3-3-3-|6------------| + P.M.............| P.M...... + +:----------------|------------|| +:----------------|------------|| +:----------0-3-0-|-5-0-3-0----|| +:8---7-3-5-0-3-0-|-5-0-3-0--5-|| +:3-3-3-3-3-------|----------5-|| +:----------------|----------3-|| +..........| + + +@ 1/2 +:---------------|------|----------------| +:---------------|------|----------------| +:12-10----10-12-|9/\9--|----------------| +:------12-------|------|---8----10-8----| +:---------------|------|10---10------10-| +:---------------|------|----------------| + + + 1/2 1/2 1/2 +:-------------------|------------|---------------| +:---------11/-------|11/11/------|---------------| +:12-10--------12-10-|--------12\-|---------------| +:-------------------|------------|---8---10-8----| +:-------------------|------------|10---10-----10-| +:-------------------|------------|---------------| + + + + +:---------------|------|----------------| +:---------------|------|----------------| +:12-10----10-12-|9/\9--|----------------| +:------12-------|------|---8----10-8----| +:---------------|------|10---10------10-| +:---------------|------|----------------| + + + 1/2 FULL +:-------------------|------------|------------------| +:---------11/-------|11/\--------|---------17-------| +:12-10--------12-10-|--------12\-|17-15-17-17-15----| +:-------------------|------------|17----17-------17-| +:-------------------|------------|------------------| +:-------------------|------------|------------------| + + FULL 1/2 1/2 1/2 +:--------|----------|-----------------|------------| +:--------|----------|-----------------|------------| +:--------|----------|GRADUAL-BEND-----|5-----------| +:--5-7-7/|--5--7P5--|-7/-----------7/-|--7/\-5-7-5-| +:7-------|7---------|-----------------|------------| +:--------|----------|-----------------|------------| + + FULL H -4.5 +:-----------|---------|--------|---------------| +:-----------|---------|--------|---------------| +:-----------|---------|--------|1.8 DIVE W/BAR-| +:----5-7-7/-|--5--7P5-|7--(7)/-|---------------| +:5-5--------|5--------|--------|---------------| +:-----------|---------|--------|---------------| + + FULL 1/2 W/BAR +:-------------|-------------|------------------| +:-------------|-------------|GRADUAL-BEND------| +:---12-14-14/-|---12--14P12-|14/----------^^^^-| +:14-----------|14-----------|------------------| +:-------------|-------------|------------------| +:-------------|-------------|------------------| + GOTO * 2ND TIME-->| + + + + RELEASE + FULL W/BAR FULL +:15-----13^^^-|(13)--------------|-------------|-----FEEDBACK| +:-------------|------------------|-------------|-------------| +:---14\-------|--------12-14-14/-|---12--14p12-|14--(14)^^^^-| +:-------------|-----12-----------|12-----------|-------------| +:-------------|------------------|-------------|-------------| +:-------------|------------------|-------------|-------------| + + T T T T T T T T T T T T +:------22P21-22|P21-22P21-22P21-22P21-22P21-22P21-22P21-22P21-22P21-22P19-22| +:--------------|------------------------------------------------------------| +:--------------|------------------------------------------------------------| +:--------------|------------------------------------------------------------| +:---X\---------|------------------------------------------------------------| +:X\-X\---------|------------------------------------------------------------| + + + T T T T T T T T T T +:P19-22P19-22P19-22P21-22P21-22P17-22P17-22P19-22P19-22P19-22| +:------------------------------------------------------------| +:------------------------------------------------------------| +:------------------------------------------------------------| +:------------------------------------------------------------| +:------------------------------------------------------------| + + T T T T T T T T T T +:P16-22P16-22P17-22P17-22P16-22P16-22P14-22P14-22P13-22P14-22| +:------------------------------------------------------------| +:------------------------------------------------------------| +:------------------------------------------------------------| +:------------------------------------------------------------| +:------------------------------------------------------------| + + + T T T T T T T T T sl +:P14-22P13-22P14-22P13-22P13-21P19-21P9-21P9-21P7-21/-| +:-----------------------------------------------------| +:-----------------------------------------------------| +:-----------------------------------------------------| +:-----------------------------------------------------| +:-----------------------------------------------------| + + + +:7-9/\P7-10P7-7-10P9P7----7H9H10P9-7-| +:----------------------10------------| +:------------------------------------| +:------------------------------------| +:------------------------------------| +:------------------------------------| + + + +:10P7H9H10P9P7----7H9H10P9P7H10P7H9H10P9P7-----|-----------------------------| +:--------------10--------------------------10-7|H9P7-------------------------| +:----------------------------------------------|-----9-7-6H7P6---6-----------| +:----------------------------------------------|---------------9---9P7-------| +:----------------------------------------------|-----------------------9-9P7-| +:----------------------------------------------|-----------------------------| + + + sl P.H. 1/4 +:---------------|----------------|--------------|-------------------| +:---------------|----------------|--------------|----------8--------| +:---------------|----------------|------------6-|(6)-6-6-----6-6/---| +:---------------|----------------|5-6P5---------|--------8--------8-| +:7-7----------6-|(6)-7-6P0-4-6P0-|------4-------|-------------------| +:----7-9-(9)/---|----------------|--------6-6---|-------------------| + + + P.H. FULL sl +:--------------|------------|-------------11-------| +:--------------|------------|---------14/----14P11-| +:6-6-6/-6-(6)/-|12-13-------|12--------------------| +:--------------|------11-13-|---13-11--------------| +:--------------|------------|----------------------| +:--------------|------------|----------------------| + + + HOLD BEND........| +FULL FULL FULL FULL sl 2 sl +:----11-----------11H14P11-----------|11--------------------------| +:14/----14P11-14/----------14/-11-11-|---14P11-14/-/19(19)/-(19)\-| +:------------------------------------|----------------------------| +:------------------------------------|----------------------------| +:------------------------------------|----------------------------| +:------------------------------------|----------------------------| + + + +:---------------------------|-----------------------------| +:---------------------------|-----------------------------| +:---------------------------|-----------------------------| +:7-7H8P7P4-----7H8P7P4---7-8|P7P4---7-8P7P4---7-8P7P4-7P4-| +:----------8-8---------8----|-----8---------8-------------| +:---------------------------|-----------------------------| + + FULL FULL sl FULL 1.5 FULL 1.5 +:--------------|---------------20/|(20)\-20/\-20/|(20)\(20)/--| +:----8---------|------------------|--------------|------------| +:8---8---8---8-|------------------|--------------|------------| +:--7---7---7---|------------------|--------------|------------| +:--------------|6/\--6\-6-6\------|--------------|-----------9| +:--------------|------------------|--------------|------------| + + + H +:------7-GRADUALLY-PULL-ON-BAR-TO-| +:------7-BRING-HARMONIC-2.5-STEPS-| +:--------THEN-RELEASE-TO-NORMAL---| +:---------------------------------| +:(9)-8----------------------------| +:---------------------------------| + + FULL W/BAR W/BAR FULL +:-------15^^^|(15)-----13^^^-|-------12----------|---------------| +:------------|-----14\-------|----------12-15----|---------------| +:14-14/------|---------------|14-14/----------14\|(14)P12--------| +:------------|---------------|-------------------|---------------| +:------------|---------------|-------------------|---------------| +:------------|---------------|-------------------|--------12/-10-| + GO TO @-->| + + +*1/2 1/2 FULL FULL FULL +:------------------|-----------------|-----------------|------------| +:----15-----15-----|15------13-------|-----------------|------------| +:14/----14/----14/-|---14/\-------14/|(14)---12-14-14/-|---12-14P12-| +:------------------|-----------12----|-----12----------|12----------| +:------------------|-----------------|-----------------|------------| +:------------------|-----------------|-----------------|------------| + + P.H. W/BAR W/BAR -5.5 H H +:--------------|---------------BRING-UP|-------------------------------| +:--------------|------------12-TO -1.5-|(12)-12-------GRADUALLY RELEASE| +:14-(14)^^^----|-----------------------|-----PUSH-BAR-----AND-THEN-PULL| +:--------------|-----------------------|-----TO -4 ----------UP-TO +1/2| +:--------------|0\---------------------|-------------------------------| +:-----------X\-|0\---------------------|-------------------------------| + + +:7P3-7P3---7P3---7P3-7P3---7P3---|7P3-7P3---7P3---6P3-6P3---6P3---| +:--------6-----6---------6-----6-|--------6-----5---------5-----5-| +:--------------------------------|--------------------------------| +:--------------------------------|--------------------------------| +:--------------------------------|--------------------------------| +:--------------------------------|--------------------------------| + + +:6P3-6P3---6P3---6P3-6P3---6P3---|6P3-6P3---6P3---7P3-7P3---7P3---| +:--------5-----5---------5-----5-|--------5-----5---------6-----6-| +:--------------------------------|--------------------------------| +:--------------------------------|--------------------------------| +:--------------------------------|--------------------------------| +:--------------------------------|--------------------------------| + + +:8P3---7P3---8P3---7P3---8P3---7|P3-8P3---7P3-6P3-6P3---3-5H6P5| +:----6-----3-----6-----6-----6--|-------6-------------6--------| +:-------------------------------|------------------------------| +:-------------------------------|------------------------------| +:-------------------------------|------------------------------| +:-------------------------------|------------------------------| + + sl sl +:P3-8P3---7P3-6P3-6P3---3-5H6P5|P3---3-5H6P5P3-6P3H5H6P5P3----------------| +:-------6-------------6--------|---6-----------------------6P3H5P6P5P3\2\-| +:------------------------------|------------------------------------------| +:------------------------------|------------------------------------------| +:------------------------------|------------------------------------------| +:------------------------------|------------------------------------------| + + + W/BAR + sl -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 +:---------------------\/|-\/--\/--\/-\/--\/-\/--\/-\/|-\/-\/-\/----\/| +:/3-6P5P3-------------18|(18)(18)P17(17)P15(15)H17P15|H18P17-------18| +:---------6-6-3P0-------|----------------------------|-------15-15---| +:-----------------/12---|----------------------------|---------------| +:-----------------------|----------------------------|---------------| +:-----------------------|----------------------------|---------------| + + + -2 -2 -2 -2 -2 -2 FULL -3 W/BAR +:-\/--\/--\/-\/--\/-\/--17/|(17)\------18|(17)--18-|18-15------18| +:(18)(18)P17(17)P15(15)----|-----------17|(18)--17-|17----18/----| +:--------------------------|-------------|---------|-------------| +:--------------------------|-------------|---------|-------------| +:--------------------------|-------------|---------|-------------| +:--------------------------|-----0-0-0---|---------|-------------| + + FULL 1/4 1/4 1/4 +:(18)--18--18-|18-15-----17P15-|18/-15----15-18/-15----15--------| +:------17-----|------18/-17P15-|17/-15H17-15-17/-15H17----17/-15-| +:-------------|----------------|---------------------------------| +:-------------|----------------|---------------------------------| +:-------------|----------------|---------------------------------| +:-------------|----------------|---------------------------------| + + + 1/4 1/4 1/4 1/4 1/4 +:------18/-------15--------18----18/|(18)-------15-18/----------15/-15-17-15-| +:17-15-17/-15-17----17/-15----17-17/|(17)-15-17----17/-15-17-15-17/-15-17-15-| +:-----------------------------------|----------------------------------------| +:-----------------------------------|----------------------------------------| +:-----------------------------------|----------------------------------------| +:-----------------------------------|----------------------------------------| + + 1/4 1/4 sl FULL 1/2 +:18/----18-18/-15\---|----------|---------------|----------------| +:17/-15-17-17/-----5/|(5)-3-5-3-|5/\-3--5-3-5-3-|3-3-5-3-5-5-3---| +:--------------------|----3-5-3-|5/\-3--5-3-5-3-|3-3---3-5-5-3-5-| +:--------------------|----------|---------------|--------------5-| +:--------------------|----------|---------------|----------------| +:--------------------|----------|---------------|----------------| + + + 1/2 sl 1/4 +:----------------|6---------------|-------------|-------------------| +:3-----5/\-3---6-|8-6-6-6-6-6-6-6-|6\----5-3----|-------------------| +:3-5-3-5/\-3-0-7-|--7-7-7-7-7-7-7-|7\----5-3---3|(3)-5-3/-----0-----| +:------------0---|----------------|----0-----0--|---------5-3-0-3-0-| +:----------------|----------------|-------------|-------------------| +:----------------|----------------|-------------|-------------------| + + + sl T T T T T T T T T T T +:------------|13P10-13P10-13P10-13P10-1310-13P10-13P10-13P10-13P10-13P10-13| +:------------|-------------------------------------------------------------| +:------------|-------------------------------------------------------------| +:------------|-------------------------------------------------------------| +:3P1-3-------|-------------------------------------------------------------| +:------3--3/-|-------------------------------------------------------------| + + + T T T T T T T T T T +:P10-13P10-13P10-13P10-12P8-12P8-12P8-12P8-12P8-10P6-10P6-| +:---------------------------------------------------------| +:---------------------------------------------------------| +:---------------------------------------------------------| +:---------------------------------------------------------| +:---------------------------------------------------------| + + + T T T T T T T T T T T +:10P6-10P6-10P6-10P6-8P5-8P5-8P5-8P5-7P3-6P3-6P3-| +:------------------------------------------------| +:------------------------------------------------| +:------------------------------------------------| +:------------------------------------------------| +:------------------------------------------------| + + + T T T T T T T T Tsl FULL FULL FULL FULL +:6P3-6P3-6P3-6P3-7P3-7P3-7P3-7P3-7/18-|---------|---------------| +:-------------------------------------|-----6---|---6----6----6-| +:-------------------------------------|-5/----5/|(5)--5/---5/---| +:-------------------------------------|---------|---------------| +:-------------------------------------|---------|---------------| +:-------------------------------------|---------|---------------| + + FULL FULL FULL FULL FULL FULL FULL 1.5 HOLD 1/2 FULL 1/2 FULL +:--------------------|----------------|15---18/-18--15-|15----15----15-------| +:---6----6----6----6-|---6----6---18/-|---15-----------|---18/---18/---18/\/\| +:5/---5/---5/---5/---|5/---5/---------|----------------|---------------------| +:--------------------|----------------|----------------|---------------------| +:--------------------|----------------|----------------|---------------------| +:--------------------|----------------|----------------|---------------------| + + 1/2 FULL 1/2 FULL 1.5 -2 -2 -2 -2 -2 -2 -2 -2 -2 +:15-------15-------15----|-------\/|-\/--\/--\/-\/--\/-\/--\/-\/| +:---18/\/----18/\/----18/|\-18/--18|(18)(18)P17(17)P15(15)P17P15| +:------------------------|---------|----------------------------| +:------------------------|---------|----------------------------| +:------------------------|---------|----------------------------| +:------------------------|---------|----------------------------| + + + -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 +:-\/-\/------\/|-\/--\/--\/-\/--\/-\/--\/-\/|\/-\/--------\/| +:H18P17-\/---18|(18)(18)P17(17)P15(15)P17P15|18P17--\/-\/-18| +:-------15-----|----------------------------|-------15-15---| +:--------------|----------------------------|---------------| +:--------------|----------------------------|---------------| +:--------------|----------------------------|---------------| + + + -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 +:-\/--\/--\/-\/--\/-\/--\/-\/|-\/-\/-\/---------------------------| +:(18)(18)P17(17)P15(15)H17P15|H18P17P15-\/--\/--\/---GRADUAL-DIVE-| +:----------------------------|----------15-(15)(15)-0\------------| +:----------------------------|------------------------------------| +:----------------------------|------------------------------------| +:----------------------------|------------------------------------| + + 1/2 1/2 +:------|---------------|-------------|------------------|-------------| +:-----6|(6)-5--3-3-5-3-|5/\P3-5-----6|(6)-6-5-3-3-3-----|5/\------0-6-| +:(0)--7|(7)-5--3-3-5-3-|5/\P3-5--5--7|(7)-7-5-3-3-3-5-3-|5/\-3------7-| +:------|---------------|-----------0-|------------------|------5------| +:------|---------------|-------------|------------------|-------------| +:------|---------------|-------------|------------------|-------------| + + 1/2 FULL FULL +:----------------|--------|--------|--------|3--|3--|-------3---6----| +:6-6-5-3-3-3-5-3-|5/\P3---|5/\P3---|5/\P3---|3--|3--|6/^^^----3-6-6/-| +:7-7-5-3-3-3-5-3-|5/\P3---|5/\P3-3-|5/\P3---|0--|0--|----------------| +:----------------|------5-|------5-|------5-|0--|0--|----------------| +:----------------|--------|--------|--------|---|---|----------------| +:----------------|--------|--------|--------|3--|3--|----------------| + + + FULL FULL FULL FULL FULL FULL +:---3----3---|6/----6(6)/-|3----3-----3-------| +:6/---6/---3-|------------|--6/---6/----6P3H6-| +:------------|------------|-------------------| +:------------|------------|-------------------| +:------------|------------|-------------------| +:------------|------------|-------------------| + + + FULL +:---3--------------------------------|--------------------------------------| +:-----6P3---6P3---6P3-6P3---6P3-6P3--|---------3-3---3-5P3---3-5H6P5P3---3H5| +:5/-------6-----6---------6---------6|P0-6P0-6-----6-------6-----------6----| +:------------------------------------|--------------------------------------| +:------------------------------------|--------------------------------------| +:------------------------------------|--------------------------------------| + + +:-----------------------------------------3---| +:H6P5P3---3H5H6P5P3---3H5H6P5P3---3-5-3---3-6-| +:-------6-----------6-----------6-------6-----| +:---------------------------------------------| +:---------------------------------------------| +:---------------------------------------------| +| +| FULL +:---------------------------------------------| +:---------------------------------------------| +:17----(17)/GRADUAL BEND----------------------| +:---------------------------------------------| +:---------------------------------------------| +:---------------------------------------------| + +:5-----------------------------------------|----------------------| +:5-3---3-5-6p5p3---3h5p3---3---------------|----------------------| +:----6-----------6-------6---6-3\2h3h5p3p2-|----------------------| +:------------------------------------------|2---------------------| +:------------------------------------------|--3/\--1/GRADUAL-BEND-| +:------------------------------------------|----------------------| +| +| FULL FULL +:19^^^^------------------------------------|----------19--15H17-13| +:------------------------------------------|----------------------| +:------------------------17\GRADUAL-RELEASE|(17)/-----------------| +:------------------------------------------|----------------------| +:------------------------------------------|----------------------| +:------------------------------------------|----------------------| + + + +:------------------------------|18/---15-------| +:------------------------------|---------18P15-| +:------------------------------|---------------| +:------------------------------|---------------| +:------------------------------|---------------| +:3^^^^^^^^^^^^^----------------|---------------| +| +| sl +:H15-12H13-10H12-8H10-7H8-5H7-3|H5-1H3----/8-7-| +:------------------------------|---------------| +:------------------------------|---------------| +:------------------------------|---------------| +:------------------------------|---------------| +:------------------------------|---------------| + + FULL sl +:---FULL--|FULL|----------|----------------------------------|3-------| +:18/-----\|18-\|18/^^^-/X-|----------------------------------|3-------| +:---------|----|----------|----------------------------------|0-------| +:---------|----|----------|----------------------------------|0-------| +:---------|----|----------|---DIVE-W/BAR-TO-SLACK-THEN-PULL--|--------| +:---------|----|----------|O\-UP +1.5-THEN-RELEASE-TO-NORMAL-|3---X-O-| +| +| 1/2 +:---------|----|----------|----------------------------------|3-------| +:/3-------|----|----------|----------------------------------|3-------| +:---5-3H4-|2-0-|----------|----------------W/BAR-------------|0-------| +:---------|----|3\2-2-----|(2)/^^^^^^FDBACK^^^^^^^^^^^^^^^^^^|0-------| +:---------|----|----------|----------------------------------|--------| +:---------|----|----------|----------------------------------|3-------| + diff --git a/guitar/tabs/Joe Satriani/top gun.prj b/guitar/tabs/Joe Satriani/top gun.prj new file mode 100644 index 0000000..70d50cf --- /dev/null +++ b/guitar/tabs/Joe Satriani/top gun.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=top gun.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16) diff --git a/guitar/tabs/Joe Satriani/top gun.tab b/guitar/tabs/Joe Satriani/top gun.tab new file mode 100644 index 0000000..fa269de --- /dev/null +++ b/guitar/tabs/Joe Satriani/top gun.tab @@ -0,0 +1,31 @@ + + + + +top gun + + +That is the melody that Joe Satriani plays for the movie Top Gun. +Its only the first part but is cool. + + + +Key = + + + E |-------------------------------|----------------------------------| + B |-12-15-15-13-12-13-12-10-10-8--|10-12-10-12-13-12-8-12-10-10------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + + diff --git a/guitar/tabs/Led Zeppelin/Living Loving Maid.tab b/guitar/tabs/Led Zeppelin/Living Loving Maid.tab new file mode 100644 index 0000000..f00b8c5 --- /dev/null +++ b/guitar/tabs/Led Zeppelin/Living Loving Maid.tab @@ -0,0 +1,231 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / l / led_zeppelin / living_loving_maid.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# + +Led Zeppelin - Living Loving Maid + + From the CD 'Led Zeppelin II' + Written by Page/Plant + Atlantic Records 82633-2 + + Original transcription by Paul Zimmerman +, the solo was transcribed by Jeremy Kerans +(purepig@aol.com). The key is A. The guitar is doubled during the single +note runs (except for the solo). + +Jimmy Pena - jimmy@walrus.com + +| = not a standard bar line; just used to separate music +~ = vibrato or held note +x = percussive note with no pitch; muted note +h = hammer on +p = pull off +s = slide +b = bend string up to indicated pitch/fret +r = release bend to indicated string/fret ++ = bass position for wah-wah pedal (depressed fully back) +o = treble position for wah-wah pedal (depressed fully forward) + + +[Riff 1] + A +e:-------------------------------------------------| +B:---(10)------------------------------------------| +G:----9-------------------(9)-(9)-(9)--------------| +D:----7---(7)-(7)-(7)-(7)-(7)-(7)-(7)--------------| +A:----0---(0)-(0)-(0)-(0)-(0)-(0)-(0)--------------| +E:-------------------------------------------------| + +[Riff 2] [Riff 3] + (N.C.) A A A D A +e:--------------------------------|------------------------------| +B:--------------------------------|--------------5-5-5---7----5--| +G:--------------------------------|--------------6-6-6---7----6--| +D:--------------------------------|--------------7-7-7---7----7--| +A:----3---3--4--5------------3----|--------------7-7-7---5----7--| +E:--5---5---------3--3--3--5---5--|-3--5--3--5-------------------| + +[Riff 4] + D A +e:-----------------------------------------------------------------------| +B:--7--7---7-7--7--7--7--7-7-7-7--5--5---5-5--5--5--5---5-5-5-5----------| +G:--7--7---7-7--7--7--7--7-7-7-7--6--6---6-6--6--6--6---6-6-6-6----------| +D:--7--7---7-7--7--7--7--7-7-7-7--7--7---7-7--7--7--7---7-7-7-7----------| +A:--5--5---5-5--5--5--5--5-5-5-5--7--7---7-7--7--7--7---7-7-7-7----------| +E:-----------------------------------------------------------------------| + + D E +e:------------------------------------0~--| +B:--7--7---7-7--7--7--7--7-7-7-7------0~--| +G:--7--7---7-7--7--7--7--7-7-7-7------1~--| +D:--7--7---7-7--7--7--7--7-7-7-7------2~--| +A:--5--5---5-5--5--5--5--5-5-5-5------2~--| +E:------------------------------------0~--| + +[Riff 5] +e:--------------------------------| +B:--9-----------------------------| +G:--9-----------------------------| +D:--9-----------------------------| +A:--7-----------------------------| +E:--0-----------------------------| + +[Riff 6] +e:--------------------------------| +B:--------------------------------| +G:--------------------------------| +D:-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7| +A:--------------------------------| +E:--------------------------------| + +[These fills are played on another guitar using a slide and wah-wah +effect. They are carefully placed in the chorus so watch out for them.] + +[Fill 1] [Fill 2] [Fill 3] + o + o + o + +e:-----------------|-----------------|-------------------------------| +B:-/7----------7\--|-/14------(14)\--|--2/7------(7)\----------------| +G:-/7----------7\--|-/14------(14)\--|--2/7------(7)\----------------| +D:-/7----------7\--|-/14------(14)\--|--2/7------(7)\----------------| +A:-----------------|-----------------|-------------------------------| +E:-----------------|-----------------|-------------------------------| + + +Song progression: + +[Riff 1] w/ lyrics: + With a purple umbrella ... +[Riff 2+3] (livin', lovin', ... + +[Riff 1] w/ lyrics: + Missus Cool rides ... +[Riff 2+3] (livin', lovin', she's ... + +[Riff 4] w/ lyrics: + [Fill 1] + Come on babe on ... + [Fill 2] + ride on the ... + [Fill 3] + We all know what your name ... + +Strum [Riff 5] + +[Riff 2+3] x1 + +[Riff 1] w/ lyrics: + + Alimony, alimony .... +[Riff 3] (livin', lovin', ... + +[Riff 1] w/ lyrics: + + When your conscience ... +[Riff 3] (livin', lovin', ... + +[Riff 4] w/ lyrics: + [Fill 1] + Come on babe on ... + [Fill 2] + ride on the merry-.... + [Fill 1] + We all know what your name is... + +[Riff 1] w/ lyrics: + Tellin' tall tales... +[Riff 2+3] (livin', lovin', ... + +[Riff 1] w/ lyrics: + with the butler and ... +[Riff 2+3] (livin', lovin', ... + +[Guitar Solo] /w [Riff 3] x1: + D A +e:---------------------------------------------------------------------| +B:---------------------------------------------17b19--17b19-17b19--17~-| +G:-------14----14--16--16b18r16b18r16---14~----------------------------| +D:-14-16----16---------------------------------------------------------| +A:---------------------------------------------------------------------| +E:---------------------------------------------------------------------| + D +e:-------------------------------------------------------------------| +B:-------15-14~------------------------------------------------------| +G:------------------------14----14--16--16b18r16b18r16--14~----------| +D:------------------14-16----16--------------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + E +e:-------------------------------------------------------------------| +B:-5-x-6-x-7-x-8-x-9-x-10-x-11-x-12-x-13---13-14-13--14b16~~---------| +G:-------------------------------------------------------------------| +D:-------------------------------------------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +Strum [Riff 5] + +[Riff 2+3] x1 + +[Riff 1] w/ lyrics: + Nobody hears a ... +[Riff 3] (livin', lovin', she's ... + +[Riff 1] w/ lyrics: + but you keep on ... +[Riff 3] (livin', lovin', ... + +[Riff 4] w/ lyrics: + [Fill 1] + Come on babe on ... + [Fill 2] + ride on the ... + [Fill 3] + We all know what your name is.... + +[Riff 6] x1 + +[Riff 2+3] until end (3 times) + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Led Zeppelin/Nobody's Fault But Mine - Led Zeppelin.prj b/guitar/tabs/Led Zeppelin/Nobody's Fault But Mine - Led Zeppelin.prj new file mode 100644 index 0000000..b0a152b --- /dev/null +++ b/guitar/tabs/Led Zeppelin/Nobody's Fault But Mine - Led Zeppelin.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Nobody's Fault But Mine - Led Zeppelin.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4) diff --git a/guitar/tabs/Led Zeppelin/Nobody's Fault But Mine - Led Zeppelin.tab b/guitar/tabs/Led Zeppelin/Nobody's Fault But Mine - Led Zeppelin.tab new file mode 100644 index 0000000..7641de8 --- /dev/null +++ b/guitar/tabs/Led Zeppelin/Nobody's Fault But Mine - Led Zeppelin.tab @@ -0,0 +1,337 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / l / led_zeppelin / nobodys_fault_but_mine.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# + +Nobody's Fault But Mine - Led Zeppelin + + From the CD set 'Remasters' + Written by Page/Plant + Atlantic Records 82371-2 + + This tab is not 100% correct, but it is close enough. The +original transcription is from Charles Eric Horowitz +(ceh1@acpub.duke.edu). I have added the double-tracked intro, some rhythm +parts, and the solo. The key is A. + +Jimmy Pena - jimmy@walrus.com + +| = not a standard bar line; just used to separate music +~ = vibrato or held note +x = percussive note with no pitch; muted note +. = staccato; mute the note immediately after striking it +h = hammer on +p = pull off +s = slide +b = bend string up to indicated pitch/fret +r = release bend to indicated string/fret +/ = slide up from infinity +\ = slide down into infinity +o \_ +o / repeat sign (always look for these!) + + +[Intro] /w phaser (doubled by two guitars playing [Intro2]) + +e:-------------------------------|-------------------------------------| +B:-15p12-12-15p12-12-15-15b17~---|-15p12-12-15p12-12-------------------| +G:-------------------------------|-------------------12-14b16~---------| +D:-------------------------------|-------------------------------------| +A:-------------------------------|-------------------------------------| +E:-------------------------------|-------------------------------------| + +e:----------------------------------|--------------------------------| +B:-15p12-12-15~--15b17---15-12------|--------------------------------| +G:-----------------------------14p12|-14p13-13-14p13-13-14-14b16r14--| +D:----------------------------------|--------------------------------| +A:----------------------------------|--------------------------------| +E:----------------------------------|--------------------------------| + +e:--------------------| +B:--------------------| +G:-13-----------------| +D:----14~-------------| +A:--------------------| +E:--------------------| + +[Intro2] also /w phaser + +e:-----------------------|----------------------|--------------------| +B:--3p0-0-3p0-0-3--3b5~--|-3p0-0-3p0-0----------|-3p0-0-3~--3b5--3-0-| +G:-----------------------|-------------0--2b4~--|--------------------| +D:-----------------------|----------------------|--------------------| +A:-----------------------|----------------------|--------------------| +E:-----------------------|----------------------|--------------------| + +e:------|------------------------------------------------------------| +B:------|------------------------------------------------------------| +G:-2p0~-|-2p1-1-2p1-1-2--2b4r2--1---1~-------------------------------| +D:------|---------------------------2~-------------------------------| +A:------|---------------------------2~-------------------------------| +E:------|---------------------------0~-------------------------------| + +[Riff 1] + +e:-----------------------------|-------------------------------------| +B:-----------------------------|-------------------------------------| +G:----------7------------------|-----------7-------------------------| +D:--9p7-----7------------------|---9p7--7--7------------2~-----------| +A:--7p5--7--5p2--2-------------|---7p5--5--5----0-------0~-----------| +E:------------------3b---0~----|--------------------3b---------------| + +[Riff 2] + +e:-------------------------|-----------------------------------------| +B:-------------------------|-----------------------------------------| +G:-------------------------|----------------------2~-----------------| +D:-2p0-0-------------------|--2p0-0---------------2~-----------------| +A:-------2p0---------------|--------2p0--0--------0~-----------------| +E:-----------0---3b---0~---|----------------3b4----------------------| + +[Riff 3] Freely + +e:-----------------------|-------------------------------------------| +B:-----------------------|-------------------------9-9-10-10--9-10---| +G:-7-----7-7-----9-x-x-9-|--7-----7---7---------9--9-9--9--9--9--9---| +D:-7-----7-7---9-9-x-x-9-|--7-----7---7--------11--9-9-11-11--9-11---| +A:-5-0-0-5-0-0-7-7-x-x-7-|--5-0-0-5-0-0--10-11-----------------------| +E:-------------0---------|-------------------------------------------| + +Song progression: + +Fade into [Intro] and [Intro2] (/w phaser!) played FOUR times + +Repeat lyrics two times, with [Intro] and [Intro2] + +Aah aah aah... + +[phaser off] + +[Riff 1] x1 + +[Riff 3] x2 + +[Riff 3] x1 /w lyrics: + +Oh, nobody's ... +oh, nobody's fault ... + +[strum] + E F#5 G5 A5 + tryin' to save ... + +Oh it's nobody's .... + +[Riff 2] x1 + +[Riff 3] x2 + +[Riff 3] x1 /w lyrics: + +Devil he ... +the Devil he ... + +[strum] + E F#5 G5 A5 + how to roll ... + +Oh it's nobody's ... +[Riff 2] x1 + +[Riff 1] x1 + +Repeat lyrics *three* times, with [Intro] and [Intro2] (and phaser) + +Aah aah aah... + +[phaser off] + +[Riff 1] x2 + +During Harmonica solo, guitar plays: + +[Riff 3] x9 1/2 times freely + +[Riff 3] x1 /w lyrics: + +Brother he showed me the.... + +[strum] + E F#5 G5 A5 + how to kick ... + +Oh it's nobody's ... + +[Riff 2] x1 + +[Riff 3] x2 + +[Riff 3] x1 /w lyrics: + +Gotta monkey on my .... + +[strum] + E F#5 G5 A5 + Vow to change my ... + +Nobody's fault .... + +[Guitar Solo] + +Rhythm for guitar solo is: [Riff 1] x2, then [Riff 3] x8 + +e:-------------------------------------------------------------------| +B:---------------3~--------------------------------------------------| +G:--2b4r3b4~---------2b3r2b3r2p0------0~~----0b2r0b2r0---------------| +D:----------------------------------2-------------------2~-----------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + /\ + (bend the open note behind the nut) + +e:-------3-----3----5h6---5--3---5--3-----3--------------------------| +B:-----3---5~----5--------------------5------------------------------| +G:-2h4-------------------------------------------------------9~------| +D:------------------------------------------------------9h11---------| +A:-------------------------------------------------7h11--------------| +E:-------------------------------------------------------------------| + +e:------------------------------------------12-9----9----------------| +B:-----------------------------------------------12---12-9--------12-| +G:-11b13r11b13r11p9----11--9----9~-------------------------11b13-----| +D:---------------------------11----11--------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-9----9------------------------------------------------------------| +B:---12---12~-9--------------------------------------12b14r12b14~----| +G:--------------11--11b13--11-9----9-9----9~-9-----------------------| +D:------------------------------11-----11------11--------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-------------------------------------------------------------------| +B:-12--11b12---10---------10-------------------12b14r12b14~------12--| +G:----------------12b14------12-11-9-9~--9---------------------------| +D:-----------------------------------------11------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-------------------------------------------------------------------| +B:--9----9~--x--10------11b12------11b12-----11b12------11b12--------| +G:----11---------9--------------x----------x---------x----------x----| +D:-------------------------------------------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-------------------------------------------------12----------------| +B:-11b12------11b12-----------------------------12-----15b17~~-------| +G:---------x----------x--x---9----9----9--11h13----------------------| +D:-----------------------------11---11-------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-15.--------15.--------15---------------15.---------15.------------| +B:----15b17------15b17------15----------------15b17-------15b17r15---| +G:-----------------------------14b15r14------------------------------| +D:-------------------------------------------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:------------------------------------12-----------------------------| +B:-12------------------------------------15~--------12-12-15---------| +G:----14b15----12-14-12b13------12h13---------12s13------------------| +D:---------------------------14--------------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-------------------------------------------------------------------| +B:-------12-12-15~-----------------------------------------------9---| +G:-12s13------------14b16r14b16r14-----------9--9----9---11b13-------| +D:-----------------------------------14-x---------11-----------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-9----------------------------------------------14b16----14--12~---| +B:----12p9-12p9----9---------------------------12--------------------| +G:--------------11---11p9-11p9----9----9-11s13-----------------------| +D:-----------------------------11---11-------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-12------------12--14b16----14--12----12--------12--14b16----------| +B:----15------12---------------------15---------12-------------------| +G:---------13---------------------------------x----------------------| +D:-------------------------------------------------------------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +e:-14b16r14---12---12~--12p9-----------------------------------------| +B:---------------x-----------12-9-----------------------10-----------| +G:------------------------------------9----11----9----9-11-9--9~~----| +D:---------------------------------11---11----11---11----------------| +A:-------------------------------------------------------------------| +E:-------------------------------------------------------------------| + +Repeat lyrics *two and one half* times, with [Intro] and [Intro2] (and + phaser) + +Aah aah aah .... + +[phaser off] + +[strum] + E F#5 G5 A5 + I will get down ... + + N-n-n-n-n-n-n ... + +e:----------------------|--------------------------------------------| +B:----------------------|--------------------------------------------| +G:--7-----7-7---7--9~---|--------------------------------------------| +D:--7-----7-7---7--9~---|--9s7--7--7s4--4--4s2--2--------------------| +A:--5-0-0-5-0-0-5--7~---|--7s5--5--5s2--2--2p0--0---5-5-5--2-2-2-2---| +E:----------------------|---------------------------3-3-3--0-0-0-0---| + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Led Zeppelin/RainSong.prj b/guitar/tabs/Led Zeppelin/RainSong.prj new file mode 100644 index 0000000..ceefb71 --- /dev/null +++ b/guitar/tabs/Led Zeppelin/RainSong.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=RainSong.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4) +TEMPO=651578 diff --git a/guitar/tabs/Led Zeppelin/RainSong.tab b/guitar/tabs/Led Zeppelin/RainSong.tab new file mode 100644 index 0000000..c0ef973 --- /dev/null +++ b/guitar/tabs/Led Zeppelin/RainSong.tab @@ -0,0 +1,621 @@ + + The Rain Song - Led Zeppelin + ----------------------------------------- + + + Half tabbed by Jeff Lo + Additions/corrections by Howard Wright + spxhaw@uk.ac.cf.thor + + + +Tuning : +--------- + +From low to high : D G C G C D + +/ means slide +h means hammer on +p means pull off + + + +D---0-------0--0--0----0-------0--0--0--------------------------------- +C----7------7--7--7-----6------6--6--6-------5-5-3-2---3----3--3------- +G-----0-----0--0--0------0-----0--0--0-------4-4-4-4---3----3--3------ +C------7----7--7--7-------6----6--6--6-------5-5-5-5---3----3--3------- +G-------0---0--0--0--------0---0--0--0---0---0---------0----0--0------ +D---------------------------------------------------------------------- + + + + +D-----------------0---0---0---0---0---0-0-----0---0---0---0---0---0-0-- +C-----------------11--9---12--11--4---9-9-----11--9---12--11--4---9-9-- +G-----2---4-4-----0---0---0---0---0---0-0-----0---0---0---0---0---0-0-- +C-----2---2-2-----11--9---12--11--4---9-9-----11--9---12--11--4---9-9-- +G-0-0-0---0-0-----0---0---0---0---0---8-8-----0---0---0---0---0---8-8-- +D--------------------------------------------------------------------- + + + + +D--0----------------0-----------------5--5--5-------5--5--5--] +C--10/9----9---9----9-----9---9-------0--0--0-------0--0--0--] +G--11/10---10--10---10----10--10------0--0--0-------0--0--0--] Repeat 3 +C--12/11---11--11---10----10--10------5--4--0---0-4-5--4--0--] times +G--0-------0---0----0-----0---0------------------------------] +D------------------------------------------------------------] + + +Guitar 1: +D------------------------------------------------------------------2------- +C-2--2--2-------------2--2--2-------------2--2--2-------------2--2----2---- +G-2--4--4-------------2--4--4-------------2--4--4-------------2--4------4-- +C-2--2--2-------------3--3--3-------------4--4--4-------------5--5--------- +G-0-----0-------------0-----0-------------0-----0-------------0-----------0 +D---------------------------------------------------------------------- + +Guitar2: +D-------------------------------------------------------------------- +C-------------------------------------------------------------------- +G--------2-4-0-2---0---------2-4-0-2---0---------2-4-0-2---0--------- +C----------------4---2---------------4---2---------------4---2------- +G-------------------------------------------------------------------- +D-------------------------------------------------------------------- + + + + + +D----5--4h5p4-------4--2--4----4-----0---2--0h2p0------0--2--0h2p0---- +C----4--------4-----2--2--2----2-----0-----------0-----0----------0--- +G----4----------4---2--2--2----2-----0------------0----0-----------0-- +C--0---------------------------------0-------------0---0-------------- +G-------------------4-----4----4-----2--------------2--2-------------- +D--------------------------------------------------------------------- + + + + +D------------- +C------------- +G--2--4--4---- +C--2--2--2---- +G--0--0--0---- +D------------- + + + + +Variation : +------------ +(slightly different version of the above two lines of TAB) + + +D-----5--4h5p4-------4--2--4---4----5---5---5-----7--7--7--7-----5--5---- +C-----4--------4-----2--2--2---2----4---4---4-----5--5--5--5-----4--4--- +G-----4----------4---2--2--2---2----4---4---4-----5--5--5--5-----4--4---- +C---0-------------------------------0---0---0--------------------0--0----- +G--------------------4-----4---4------------------7--7--7--7------------- +D---------------------------------------------------------------------- + + + + +D--4h5p4-------4--2--4---4------0---2--0h2p0------0--2--0h2p0------- +C--------4-----2--2--2---2------0-----------0-----0----------0------ +G----------4---2--2--2---2------0------------0----0-----------0------ +C-------------------------------0-------------0---0------------------- +G--------------4-----4---4------2--------------2--2------------------- +D---------------------------------------------------------------------- + + + + +Ending : +--------- + + +D---/9--9---9--7----7--7----5--7-----5--5---5--4-----4--4---4--5--------- +C---/7--7---7----7--5--5--5-5--------4--4---4----4---2--2---2--4--------- +G---/7--7---7-------5--5----5--------4--4---4--------2--2---2--4--------- +C---/7--7---7-------5--5-------------0--0---0------------------0--------- +G---0---0-----------0--0-----------------------------4--4---4------------ +D---------------------------------------------------------------------- + + + +D---7--7---7-8----10--8--10--8--10--12/---------------0--------- +C---5--5---5-7----8------8------8-------------------5---5---5---- +G---5--5---5-7----8------8------8-----------------6-------6------- +C-----------------------------------------------7----------------- +G---7--7---7-8----10--------------------------0------------------- +D----------------------------------------------------------------- + + + +D----------0----------7p5-----5--2p0--------5p3---3----------0-----0--- +C--------5---5---5--------6----------0---------4-4-4--------5-----4---- +G------6-------6------------7----------0--------5---5------0-----0----- +C----7----------------0----------0-------0--0-------------0------------ +G--0------------------------------------------------------------4------ +D---------------------------------------------------------------------- + + + +D-----0----0----0----0--------0------------ +C----2----2----2----2--------2------------- +G---0----0----0----0--------2-------------- +C--------------------------2--------------- +G--2----2----2----2-------0---------------- +D------------------------0----------------- + + + + +From: Jay Reeves +Subject: Led Zeppelin/ The Rain Song + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + The Rain Song + from Led Zeppelins "Houses Of The Holy" + (6 string acoustic studio track) + transcribed by Jay Reeves + jay@ffs.b15.ingr.com + +Tuning open G (DGDGBD low to high) + +INTRO: +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|-0-----0--0--0--0--0----|-0-----0--0--0--0--0--0-|-------3--3--3--3--3--1-| +|-8-----8--8--8--8--8----|-7-----7--7--7--7--7--7-|-------6--6--4--3--3--4-| +|-0-----0--0--0--0--0----|-0-----0--0--0--0--0--0-|-------4--4--3--3--3--3-| +|-5-----5--5--5--5--5----|-5-----5--5--5--5--5--5-|-------5--5--5--5--5--1-| +|--0----0--0--0--0--0----|--0----0--0--0--0--0--0-|-0----------------------| +|------------------------|------------------------|------------------------| + ^play strings 1-4 with ^same as last lightly^ ^pluck + lethargic upstroke measure + then accent 5th string + with down stroke + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|-------1--1--1----------|----2--2----------------|------------------------| +|-------4--4--4--------3-|----3--3-----3--5--1--3-|-X--3--X--3-----3-----3-| +|-------3--3--3--------2-|----4--4-----4--5--2--4-|-X--2--X--5-----4-------| +|-------1--1--1----------|----------------------5-|-X--5--X--5-----5-----1-| +|----------------0--0----|------------------------|------------------------| +|------------------------|------------------------|------------------------| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|------------------------|------------------------|-------------------7/ 8\| +|-3--3--3-----3--3--3--3-|----3-----3-----3-----3-|----3--3-----3--3--6/ 7\| +|-X--2--2-----2--2--2--4-|----2-----5-----4-------|----2--2-----2--2--4/ 5\| +|-1--1--1-----1--1--1--5-|----5-----5-----5-----1-|----1--1-----1--1--5/ 5\| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| + ^lightly + +VERSE: + | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================== +|| (7)----7-----7--0--0--0-|----7--7-----7--0--0--5-|----5-----5-----5--5--5-| +|| (6)----6-----6--6--6--6-|----6--6-----6--6--6\ 3-|----3-----3-----3--3--3-| +||.(4)----4-----4--4--4--3-|----3--3-----3--3--3----|------------------------| +||.(5)----5-----5--5--5--5-|----5--5-----5--5--5\ 3-|----2-----5-----5--2--3-| +|| ------------------------|------------------------|----------5-----5-------| +|| ------------------------|------------------------|------------------------| + + +| 1 & 2 & 3 & 4 & | | 1 & 2 & 3 & 4 & | +============================================================================== +|----5-----5--5--5--7/ 8\ || repeat last 4 measures |----5-----5--5--5--8\---|| +|----3-----3--3--3--6/ 7\ || twice, except on last |----3-----3--3--3--7\ 3-|| +|-------------------4/ 5\.|| pass play the follow- |-------------------5\ 2-|| +|----2-----5--2--3--5/ 6\.|| ing mesaure instead of |----2-----5--2--3--6\---|| +|----------5------------- || measure 4 -> |----------5-------------|| +|------------------------ || |------------------------|| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|------------------------|----------------------2-|----2--2-----2--2-------| +|----3--3-----5--5--3--3-|----3--3-----3--3--3--3-|----3--3-----3--3--3--3-| +|----4--4-----4--4--0--2-|----4--4-----4--4--0--2-|----4--4-----4--4--0--2-| +|-------------------0--1-|----1--1-----1--1--1--2-|----2--2-----2--2--2--3-| +|-------------------0----|------------------------|------------------------| +|--------------------------------------------------------------------------| + choke^ + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|------------------------|-5-----5--5--5--5--0--4-|----2--4-----4--0--0----| +|----3--3--5-----3--0--0-|-5-----5--5--5--5--0--3-|----3--3-----3--3--3----| +|----4--4--4-----4--4--0-|-5-----5--5--5--5--0--2-|----2--2-----2--2--2----| +|----3--3--3-----3--3--3-|-5-----5--5--5--5--0----|------------------------| +|------------------------|-5-----5--5--5--5--0----|------------------------| +|------------------------|-5-----5--5--5--5-------|------------------------| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +================================================================================ +|-0--------2--0h2p0--------|-0--------2--0h2p0--------|----2--2-----2--2--2----| +|-1-----------------1------|-1-----------------1----3-|----3--3-----3--3--3----| +|-0-------------------0----|-0-------------------0--2-|----4--4-----4--4--4----| +|-2----------------------0-|-2------------------------|------------------------| +|-2------------------------|-2------------------------|------------------------| +|-0------------------------|-0------------------------|------------------------| + end of verse + +In measure 9 of first verse, there's a slight nuance: + +| 1 & 2 & 3 & 4 & | +========================== +|----7--7-----7--0--0--0-| +|----6--6-----6--6--6--6-| +|----4--4-----4--4--4--3-| +|----5--5-----5--5--5--5-| +|------------------------| +|------------------------| + +Return to INTRO for second time, then VERSE for second time, however, there +is a slight nuance of the second verse, measure 5 which is the same as +the above nuance. Also, measure 8 of the second verse varies slightly: + +| 1 & 2 & 3 & 4 & | +========================== +|-5--5-----5--5--5--7/ 8\| +|-3--3-----3--3--3--6/ 8\| +|-------------------4/ 5\| +|-3--2-----5--2--3--5/ 6\| +|----------5-------------| +|------------------------| + +Measure 17 of the second verse changes: + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|-5-----5--5--5--4--2--4-|-------------4--2--4----|-5-----5--5--4--2--2--7-| +|-5-----5--5--3--3--3--3-|----3--3-----3--3--3--3-|-5-----5--5--3--3--3--7-| +|-5-----5--5--2--2--2--2-|----2--2-----2--2--2--2-|-5-----5--5--2--2--2--7-| +|-5-----5--5-------------|------------------------|-5-----5--5-----------7-| +|-5-----5--5-------------|------------------------|-5-----5--5-----------7-| +|-5-----5--5-------------|------------------------|-5-----5--5-----------7-| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|-------------4--2-----5-|-------5--5--4--2--2--4-|----0--0-----0-----4--0-| +|----3--3--3--3--3--3--5-|-------5--5--3--3--3--3-|----3--3-----3-----3--3-| +|----2--2--2--2--2--2--5-|-------5--5--2--2--2--2-|----2--2-----2-----2--2-| +|----------------------5-|-------5--5-------------|------------------------| +|----------------------5-|-------5--5-------------|------------------------| +|----------------------5-|-------5--5-------------|------------------------| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +================================================================================ +|-0--------2--0h2p0--------|-0--------2--0h2p0--------|----2--2-----2--2--2----| +|-1-----------------1------|-1-----------------1----3-|----3--3-----3--3--3----| +|-0-------------------0--0-|-0-------------------0--2-|----4--4-----4--4--4----| +|-2------------------------|-2------------------------|------------------------| +|-2------------------------|-2------------------------|------------------------| +|-0------------------------|-0------------------------|------------------------| + end of second verse + +Return to INTRO for third time, however measures 5 thru 9 change: + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|----2--2--------------9-|-X--7--X-10-----9-------|----7--7-----7--7--7--9-| +|----3--3-----3--5--1--8-|-X--8--X--8-----8-----4/| 5--4--4-----4--4--4--8-| +|----4--4-----4--5--2--7-|-X--7--X--7-----7-----6/| 7--------------------7-| +|------------------------|-X-----X--------------4/| 5--5--5-----5--5--5----| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +=================================================== +|-X--7--X-10-----9-------|----7--7-----7--7--7/ 8\| +|-X--8--X--8-----8-----4/| 5--4--4-----4--4--6/ 7\| +|-X--7--X--7-----7-----6/| 7-----------------4/ 5\| +|-X-----X--------------4/| 5--5--5-----5--5--5/ 6\| +|------------------------|------------------------| +|------------------------|------------------------| + +Then the 3rd verse continues, however, the first 4 measures of the verse that +are repeated 3 times in the 1st and 2nd verses, are repeated 4 times in the +3rd verse. + +The 24th measure of the 3rd verse starts VERSE PRIME: + +VERSE PRIME: +| 1 & 2 & 3 e & a 4 & | 1 & 2 & a 3 & 4 & | 1 & 2 & 3 & 4 e & | +================================================================================ +|-0--------2--0h2p0-------|| 5-----5----5-5--0--0--3-|----3--3--3--3--3--3p0---| +|-1-----------------1-----|| 3-----3----3-3--0--0--1-|----1--1--1--1--1--1---1-| +|-0-------------------0---||.0-----0----0-0--0--0--0-|----0--0--0--0--0--0-----| +|-2-----------------------||.0-----0----0-0--0--0--0-|----3--3--3--3--3--3-----| +|-2-----------------------|| 0-----0----0-0--0--0--0-|----0--0--0--0--0--0-----| +|-0-----------------------|| 5-----5----5-5--5--5--3-|----3--3--3--3--3--3-----| + + +| 1 & 2 & a 3 & 4 & | 1 & 2 & 3 e & a 4 e & a | +========================================================= +|-5-----5----5-5--------0-|----0--5-----5p0-0-0-0-0-5-0- || +|-5-----5----5-5--7--5--0-|----3--3-----3---3-5-3-5-3-3- || +|-5-----5----5-5--0--0--0-|----0--0-----0---0-0-0-0-0-0-.|| +|-5-----5----5-5--7--5--0-|----0--0-----0---0-0-0-0-0-0-.|| +|-5-----5----5-5--------0-|----0--0-----0---0-0-0-0-0-0- || +|-5-----5----5-5--------5-|----5--5-----5---5-5-5-5-5-5- || + +Repeat the last 4 measures 3 more times, however on the +last repeat, substitute the following for the last measure: + +| 1 & a 2 & 3 & 4 & | +=========================== +|----5-5-5--0--5--0--7/ 8\| +|----3-3-3--3--3--3--6/ 7\| Then the 4th verse is played, same as the 1st +|--------------------4/ 5\| verse, except the first 4 measures are played +|--------------------5/ 6\| 4 times instead of 3 times as in the 1st verse. +|-------------------------| +|-------------------------| + +Note about the 4th verse: the last 2 measures are left off of the 4th +verse and it goes into the coda: + +| 1 & 2 & 3 e & a 4 & | 1 & 2 & a 3 & 4 & | +======================================================= +|-0--------2--0h2p0--------|/9-----9--9-9-9--7--X-----| +|-1-----------------1------|/8-----8--8-8-8--8--8--10-| +|-0-------------------0----|/7-----7--7-7-7--7--7--10-| +|-2------------------------|-----------------------10-| +|-2------------------------|-----------------------10-| +|-0------------------------|--------------------------| + + +| 1 & 2 & 3 & 4 & a | 1 & 2 & a 3 & 4 & | +======================================================= +|---------------------------|-------------------------4-| +|----8--8-----8--10-10-8--8-|-8-----8--8--8--8--7-----3-| +|----10-10----10-10-10-10-10|-------------------------2-| +|----10-10-12-10-10-10-10-10|-10----10-10-10-10-10-10---| +|----10-10----10-10-10-10-10|-9-----9--9--9--9--9--9--4-| +|---------------------------|-10----10-10-10-10-10-10---| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | +============================================================================ +|-------4--2--4--5-----7-|-------7--5--7--8----10-|------10--8-10-12\0-----| +|-------3--3--3--5-----6-|-------6--6--6--8-----9-|-------9--9--9----------| +|-------2--2--2--4-----5-|-------5--5--5--7-----8-|-------8--8--8----------| +|------------------------|------------------------|------------------------| +|-------4--4--4--5-----7-|-------7--7--7--8----10-|------10-10-10----------| +|------------------------|------------------------|------------------------| + + +| 1 & 2 & 3 & 4 & | 1 & 2 & 3 & 4 & | 1 e & 2 & 3 e & 4 & | +============================================================================== +|----------3-----3-----3-|----------3-----3-----3-|-7p5----------------------| +|-------2-----3-----2----|-------2-----3-----2----|-----7-----7--5p3---------| +|----0-------------------|----0-------------------|--------7---------5-----5-| +|------------------------|------------------------|---------------------5----| +|-0----------------------|-0----------------------|-5------------5-----------| +|------------------------|------------------------|--------------------------| + + +| 1 e & a 2 e & a 3 e & a 4 e & a | 1 e & a 2 e & a 3 e & a 4 e & a | +====================================================================== +|-5p3-------3---------3-------2---|-----0-0-0-------0-0-----3-------|| +|-----5---5---5---------3-------3-|-------------------------0-------|| +|-------5-------5---0-------0-----|---0-----------0---------2-------|| +|---------------------------------|-------------------------0h4-----|| +|-5---------------5-------4-------|-2-----------2-----------0-------|| +|---------------------------------|-------------------------0-------|| + ^ + this should be played + flamenco style - start + with fingers curled in + palm of hand, positioned + above the 6th string and + straighten each finger + in succession, starting + with the first, followed + by the second, third, then + forth, striking all 6 + strings with each finger. + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +tab explaination: 7/9 = slide from 7th fret up to 9th fret + 9\7 = slide from 9th fret down to 7th fret + 0h2 = open string hammer-on to 2nd fret + 2p0 = open string pull-off from 2nd fret + X = muted string + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +From: mikew@hicomb.hi.com (Michael Winiarski) +Subject: Re: ADD: TAB: Led Zeppelin - The Rain Song + +-------- + +A couple of previous posts showed this with an alternate tuning. +I learned this with "standard" tuning. + +Here's my attempt at its TAB: + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +"The Rain Song" by Jimmy Page and Robert Plant + + +e--0-----------|--0------------|---------------|--------------0|-------0---0--- +B-10-----------|--9------------|---8-8-6-5----6|6-------------0|-------2---2--- +G--9-----------|--9------------|---6-6--------5|5-------------2|-------2---2--- +D--7-----------|--7------------|---5-5-3-2----3|3-------------2|-------2---2--- +A--0-----------|--0------------|-0-------------|0-------------0|-------0---0--- +E--------------|---------------|---------------|---------------|--------------- + +e--0--0--0--0--|---------------|--0--0--0--0---|---------------|--8-\-7-------- +B-14-12-15-14-7|----12-12------|-14-12-15-14--7|----12-12------|--9-\-8-------- +G-------------6|----10-10------|--------------6|----10-10------|--7-\-6-------- +D-11--9-12--9-4|-----9--9------|-11--9-12--9--4|-----9--9------|--8-\-7-------- +A-------------0|-----0--0------|--------------0|-----0--0------|--------------- +E--------------|---------------|---------------|---------------|--------------- + +e--7-----------|5-5-5-----5-5-5|--8-\-7--------|--7------------|5-5-5-----5-5-5 +B--8-----------|3-3-3-----3-3-3|--9-\-8--------|--8------------|3-3-3-----3-3-3 +G--5-----------|---------------|--7-\-6--------|--5------------|--------------- +D--7-----------|5-4-0-2-4-5-4-0|--8-\-7--------|--7------------|5-4-0-2-4-5-4-0 +A--------------|---------------|---------------|---------------|--------------- +E--------------|---------------|---------------|---------------|--------------- + +e-0--00--------|-0--00---------|-0--00---------|-0-------2---0-|-----5-454----- +B-0--22-02-----|-0--22-02------|-0--22-02------|-0---2---2-----|-----------7--- +G-2--22---24-2-|-2--22---24-2--|-2--22---24-2--|-2---2---2-----|-------------6- +D-2--22-----4-2|-3--33-----4-2-|-4--44-----4-2-|-5---5---5-----|-4-0----------- +A-0--00--------|-0-------------|-0-------------|---------------|--------------- +E--------------|---------------|---------------|---------------|--------------- + +e-4----2-------|-2--5-454------|-2--5-454------| +B---5----------|-3--------7-5--|-3--------7-5--| +G--------------|-2------------7|-2------------7| +D-2----0-------|-0-------------|-0-------------| +A---------4--2-|-2-------------|-2-------------| +E--------------|-0-------------|-0-------------| + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + LED ZEPPELIN THE RAIN SONG FROM HOUSES OF THE HOLY + Hey guys, this is a song I really enjoy playing. I learned it from a + friend a while back and thought Id tab it out for the beginners in the + forum, to show you what fun alternate tunings can be. This is a modal tuning + originally in D + Acoustics: tune down to DGCGCD from low to high Electric: its easier to + because of high tension strings tune 3rd string up to A + and the 2nd string up to + D for EADADE low to high + These are the main parts but not the song from beginning to end. Youll + have to listen to the album for rythms and suquence of parts. +__________ +VERSE PART +__________ + +--0----|--0--|--0--0--0--0-|-3-------|------------|E HIGH +--7----|--6--|--5--5--3--2-|-3-------|------------|D +--0----|--0--|--4--4--4--4-|-3-------|2-4-4-------|A +--7----|--6--|--5--5--5--5-|-3-------|2-2-2-------|D +--0----|--0--|0-0--0--0--0-|-----0-0-|0-0-0-0-0-0-|A +-------|-----|-------------|---------|------------|E LOW + + play +-0---0--0---0--|--0-----/----0-0| X2 +-11--9--12--11-|--4----/-----9-9| +-0---0--0---0--|--0---/------0-0| +-11--9--12--11-|--4--/slow---9-9| +-0---0--0---0--|--0-/slide---8-8| +---------------|----------------| + + +-0---0--|--0-----|-5-5-----5-5-5---5-5-| +-10--9--|--9-----|-0-0-----0-0-0---0-0-| PLAYX2 +-11--10-|--10----|-0-0-----0-0-0---0-0-| || +-12--11-|--10----|-5-4-----4-5-4---4-5-| || +-0---0--|--0-----|-----5-5-------5-----| <='' +--------|--------|---------------------| + +-0--0--------------|-0-------------|-5-5-----5-5-5---5------| +-10-9--------9-12-9|-9-------9-12-9|-0-0-----0-0-0---0------| +-11-10----10-------|-10----10------|-0-0-----0-0-0---0------| +-12-11--11---------|-10-10---------|-5-4-----4-5-4---4-5-7--| +-0--0--------------|-0-------------|-----5-5-------5--------| +-------------------|---------------|------------------------| + + +--------------------|--------------------|--------------------| +--------------------|--------------------|--------------------| +-2-4-4-2-4-0-2---0--|-2-4-4-2-4-0-2---0--|-2-4-4-2-4-0-2---0--| +-2-2-2---------4---2|-3-3-3---------4---2|-4-4-4---------4---2| +-0-0-0--------------|-0-0-0--------------|-0-0-0--------------| +--------------------|--------------------|--------------------| + / \ triplet +------2-----------|--------4-5-4------|-2---4----2-4-2-----------| <== this +------------2-----|---4-----------4---|-2-2-----------2-4-2------| measure +--4-----------4---|---4-------------4-|-2------------------2-4-2-| can be +5---5-----------5-|---4---------------|-2-----------------------2| played an +------------------|---5--5------------|-4------------------------| alternate +------------------|-------------------|--------------------------| way || + || + || + <=='' + |-2--4------4-------4---------| + |-2-------2---2---2---2-------| + |-2---------------------------| + |-2-----0---------------------| + |-4-------------4-------------| + |-----------------------------| + / \triplet / \ +-0--2---0-2-0--------|-0-2--0-2-0------------| +-0-------------0-----|-0----------0---2--4-4-| +-0---------------0---|-0------------0-2--2-2-| +-0-----------------0-|-0--------------0--0-0-| +-2-------------------|-2---------------------| +---------------------|-----------------------| + + back to begining +---------0---0--------------------------------------- +---------7---6--------------------------------------- +---------0---0--------------------------------------- +---------7---6--------------------------------------- +---------0---0------etc.----------------------------- +----------------------------------------------------- + + +_____________ +BRIDGE?? PART +_____________ +I felt the coldness of my winter I never thought you would ever go... +--------------------------------|----------------------------------------- +--------------------------------|----------------------------------------- +--------------------------------|------------------7-9-7------------------ +-------------------------5--7---|-----7------7---7-------7-9-7------------ +--7-7-7----5-5-----5-5---3--5---|--7/9---7-9-------------------7-9-7------ +--5-5-5-0--2-3---0-2-3----------|------------------------------------7-9-7 + ^^^^^^^^^^^^^^^^ + This part goes SOMETHING like this. etc. + + __________ + OUTRO PART + __________ triplet + / \ +-(7)/9--9-9-7---|-7-5---5-7|-5-----5---5--4-5-4--|-4--------4--5-| +-(5)/7--7-7----7|-5--------|-4--4-4-4-4---------4|-2--2---2----4-| +-(5)/7--7-7-----|-5---5----|-4---4---4-----------|-2----2------4-| +-(5)/7--7-7-----|-5--------|-4-------------------|-2-----------4-| +----------------|----------|---------------------|---------------| +----------------|----------|---------------------|---------------| + + +-7-----7---7-8-|-10-----10-----10--12\---|--------0------|---------0-------| +-5--5-5-5-5--7-|-8--8-8----8-8--------\--|-------5--5---5|-------5---5---5-| +-5---5---5---7-|-8---8------8----------\-|-----6------6--|-----6-------6---| +-5-----------7-|-8----------------------\|---7-----------|---7-------------| +---------------|-------------------------|-0-------------|-0---------------| +---------------|-------------------------|---------------|-----------------| + + +-7-5-----5--2-0-----0-|-5-3-------3------------0-------0-|-----0---0----0--- +-----6----------0-----|-----4---4---4--------5-------4---|----2-2-2-----2--- +-------7----------0---|-------5-------5----0-------0-----|---0---0------0--- +-0----------0---------|-0--------------------------------|--------------2--- +----------------------|------------------5-------4-------|-2------------0--- +----------------------|----------------------------------|------------------ + fade + out +tab by Jonathan Lewis lewijc0@clem.mscd.edu diff --git a/guitar/tabs/Led Zeppelin/bringitonhome.prj b/guitar/tabs/Led Zeppelin/bringitonhome.prj new file mode 100644 index 0000000..01226db --- /dev/null +++ b/guitar/tabs/Led Zeppelin/bringitonhome.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\bringitonhome_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4) +RANGE=0;13;RANGE_0_13 diff --git a/guitar/tabs/Led Zeppelin/bringitonhome.tab b/guitar/tabs/Led Zeppelin/bringitonhome.tab new file mode 100644 index 0000000..9e04cf9 --- /dev/null +++ b/guitar/tabs/Led Zeppelin/bringitonhome.tab @@ -0,0 +1,109 @@ + + + + +Archive Browser + +/main / l / led_zeppelin / bring_it_on_home.tab / [Click Here For A Printer Friendly Copy] + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Sun, 5 Nov 2000 14:22:55 -0500 +From: "Alkis Milidis" +Subject: l/led_zeppelin/bring_it_on_home.tab + +#-- File created with Instab - http://www.pconline.com/~smcarey/instab.html + +Author/Artist: Led Zeppelin +Title: Bring it on home +Album: Led Zeppelin II +Transcribed by: m_funker_alk +Email: m_funker_alk@hotmail.com + +Ok. This is my first effort to Tab a song. It is not totally correct but I +think +it's gonna help you. +As you'll see part #5 is surely not correct but not sounding awful... +Well......... I can say I'm proud of my work !?!?!?!?!?!?!? + +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|-2---2-4---4-2---2---0-2-----2-4---4-2---2---0-2---------------------------- +-|-0---0-0---0-0---0-3-----0---0-0---0-0---0-3-----0-------------------------- + part #1 play this sometimes + +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|-7---7-9---9-7---7-9---9-7---7-9---9-7---7-9---7---------------------------- +-|-5---5-5---5-5---5-5---5-5---5-5---5-5---5-5---5---------------------------- + part #2 and then again to #1 + +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|-2---2-4---4-2---2---0-2-----2-4---4-2---2---0-2---------------------------- +-|-0---0-0---0-0---0-3-----0---0-0---0-0---0-3-----0-------------------------- + only once played ( #1 ) + +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|-9---9-11--11-9---9-11--9---7---7-9---9-7---7-9---7-2----------------------- +-|-7---7-7---7--7---7-7---7---5---5-5---5-5---5-5---5-0----------------------- + part #3 after this there's a small break and then + +-|-----------------------------------|---------------------------------------- +-|-----------------10b12-10-8-10-8---|---------------10b12-10-8-10------------ +-|---------7-9---------------------9-|--------7-9----------------------------- +-|-----7-9---------------------------|----7-9--------------------------------- +-|-------------7---------------------|------------7--------------------------- +-|-----------------------------------|---------------------------------------- + part #4 getting louder huh ? + +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|----9---9-9--11---11-9-9-9-9------------------------------------------------ +-|----9---9-9--11---11-9-9-9-9------------------------------------------------ +-|----7---7-7--9----9--7-7-7-7------------------------------------------------ +-|---------------------------------------------------------------------------- + part #5 this ain't the correct one but it doesn't sound so awful.... + +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + parts #4 and #5 are played sometimes (4-5,4-5,4-5...) and... + +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|---------------------------------------------------------------------------- +-|-9---9-11--11-9---9--11--9-7---7-9---9-7---7-9---7-2------------------------ +-|-7---7-7---7--7---7--7---7-5---5-5---5-5---5-5---5-0------------------------ + then it "brings it on home" to part #3 and... + +-|-----4-----5-----6--------0------------------------------------------------- +-|-------0------------------7------------------------------------------------- +-|-2\4-----5---5-6---6------7------------------------------------------------- +-|--------------------------6------------------------------------------------- +-|---------------------2----7------------------------------------------------- +-|---------------------0------------------------------------------------------ +finishes like this (slowing down) + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Led Zeppelin/bringitonhome_imp.tab b/guitar/tabs/Led Zeppelin/bringitonhome_imp.tab new file mode 100644 index 0000000..f11482e --- /dev/null +++ b/guitar/tabs/Led Zeppelin/bringitonhome_imp.tab @@ -0,0 +1,46 @@ +%TabMaster v1.01a% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|-2-2-4-4-2-2---0-2---2-4-4-2-2---0-2---7-7-9-9-7-7-9-9-7-7-9-9- +E|-0-0-0-0-0-0-3-----0-0-0-0-0-0-3-----0-5-5-5-5-5-5-5-5-5-5-5-5- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|------------------------------------------------------------------ +D|------------------------------------------------------------------ +A|-7-7-9-7-2-2-4-4-2-2---0-2---2-4-4-2-2---0-2---9-9-11-11-9-9-11-9- +E|-5-5-5-5-0-0-0-0-0-0-3-----0-0-0-0-0-0-3-----0-7-7-7--7--7-7-7--7- + + + +E|------------------------------------------------------------------------- +B|-----------------------------10-b12-10-8-10-8-------------10-b12-10-8-10- +G|-----------------------7-9--------------------9-----7-9------------------ +D|-------------------7-9--------------------------7-9---------------------- +A|-7-7-9-9-7-7-9-7-2---------7----------------------------7---------------- +E|-5-5-5-5-5-5-5-5-0------------------------------------------------------- + + + +E|---------------------------------------------------------------4----- +B|-----------------------------------------------------------------0--- +G|-9-9-9-11-11-9-9-9-9--------------------------------------2-s4-----5- +D|-9-9-9-11-11-9-9-9-9------------------------------------------------- +A|-7-7-7-9--9--7-7-7-7-9-9-11-11-9-9-11-9-7-7-9-9-7-7-9-7-2------------ +E|---------------------7-7-7--7--7-7-7--7-5-5-5-5-5-5-5-5-0------------ + + + +E|-5-----6-----0- +B|-------------7- +G|---5-6---6---7- +D|-------------6- +A|-----------2-7- +E|-----------0--- + diff --git a/guitar/tabs/Led Zeppelin/out_on_the_tiles.tab b/guitar/tabs/Led Zeppelin/out_on_the_tiles.tab new file mode 100644 index 0000000..33a9d0a --- /dev/null +++ b/guitar/tabs/Led Zeppelin/out_on_the_tiles.tab @@ -0,0 +1,246 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / l / led_zeppelin / out_on_the_tiles.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Explanation: +~~~~~~~~~~~~ +/ x Slide to x +(x ^ y) Bend up, from x to y +(x v y) Bend down, from x to y if notes are in parenthesises +([x] ^ y) Play y bent, [don't play x] they are hit once. +(x - y) Pull off from y to x +(x h y) Hammer-on from x to y +~~x,y Trill x and y + + + +:Intro +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +----------------------------------------7-------7------7------------------- +----------------------------------------7-------7------7------------------- +--3-3-3-3-3-3-3-3--2-2-2-2-2-2-2-2----5-5-----5-5----5-5------------------- + +=========================================================================== + +:Verse (Repeat this line 2x) ---Play the whole Verse two times--- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------4------------------------------------------------------------------ +------4-------------6-7-6-7-6-7-6------------------------------------------ +--2-5-----------------------------9-4--7-5-7-5--(7 ^ 8)-(8 v 7)-5-7-------- + + ============================== + +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------4------------------------------------------------------------------ +------4-------------6-7-6-7-6-7-6----|---------------|--------------------- +--2-5-----------------------------9-7-9-7-9-7-9-7-5-4-5-4-5-4-5-4-5-------- + + +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--4-------4-------4-------------------------------------------------------- +--4-------4-------4-------------------------------------------------------- +--2---0---2---0---2-------------------------------------------------------- + (NOTE: Remember, Verse is in 15/8, so it comes back + a beat short! Chorus is in 4/4) + +=========================================================================== + +:Chorus (Repeat two times) +---------0-------------------5----------------5---------------------------- +---------0-------------------5----------------5-----------------9---------- +---------1-------------------6----------------6-----------------9---------- +---------2-------------------7----------------7-----------------9---------- +---------2-------------------7----------------7----------7-7-7--7--7-7----- +--0-0-0--0--0-0--------5-5-5-5-5-5------5-5-5-5--5-5----------------------- + + +-----------------------------5----------------5-----------------0---------- +---------9-------------------5----------------5-----------------0---------- +---------9-------------------6----------------6-----------------1---------- +---------9-------------------7----------------7-----------------2---------- +---7-7-7-7--7-7--------------7----------------7-----------------2---------- +-----------------------5-5-5-5-5-5------5-5-5-5--5-5-----0-0-0--0---------- + + +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +-----7--------7--------7--------7------------------------------------------ +-----7--------7--------7--------7------------------------------------------ +--5--5-----5--5-----5--5-----5--5------------------------------------------ + =================================== + + Repeat the whole -Intro,Verse,Chorus- a second time. Then... +=========================================================================== + +:Outro +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--9--12------9--9--12------9--12------9--14--12---------------------------- +--9--12------9--9--12------9--12------9--14--12---------------------------- +--7--10------7--7--10------7--10------7--12--10---------------------------- +--------------------------------------------------------------------------- + + Repeat over and over untill fade. Sometimes he plays it short + + and choppy. Sometimes he slides into the chords while playing + + continuous eighth notes. + + + +From: bobz@crl.com (Robert Zawalski) +Subject: TAB: Out on the Tiles (Zeppelin) + +Here is a tab of how I play it. (I think Jimmy tunes own a semitone +on album) + +E:------------------------------------------------------------- +B:------------------------------------------------------------- +G:------------------------------------------------------------- +D:--6-6-6-6-6-6-6-6--5-5-5-5-5-5-5-5--8-8---8-8---8-8---8-8---- +A:------------------------------------------------------------- +E:--4-4-4-4-4-4-4-4--3-3-3-3-3-3-3-3--6-5b6-6-5b6-6-5b6-6-5b6-- +(I kinda doubt Jimmy is playing anything on the D string, but it +thickens it up so..) + +E:----------------------------------------------- +B:----------------------------------------------- +G:--------0-------------------------------------- +D:------0-----3-2-3-2-3-2-3-2-------------------- +A:----2-------------------------3-1-3-1-3-4-3-1-- +E:--3-------------------------------------------- + +I sometimes play this instead..(just for flavour >=-) + +E:----------------------------------------------- +B:----------------------------------------------- +G:--------0-------------------------------------- +D:------0---------------------------------------- +A:----2-------------------------3-1-3-1-3-4-3-1-- +E:--3--------1-0-1-0-1-0-1-0--------------------- + +He plays this as the little bridge.. (listen to the record..) +E:------------------------------------------------------------- +B:------------------------------------------------------------- +G:--------0---------------------------------------------------- +D:------0-----3-2-3-2-3-2-3-2---------------------------------- +A:----2------------------------3-1-3-1-3-1-3-1--0-1-0-1-0-1-0-- +E:--3---------------------------------------------------------- + +E:------------- +B:------------- +G:------------- +D:--5-3-5-3-5-- +A:--5-3-5-3-5-- +E:--3-1-3-1-3-- + +Chorus: + +F Bb Bb F x2 Then do intro again. + +Little ending thing: + +E:--------------------------------------------------------------------- +B:--10-10-10-10/13-13--10-10-10-10/13-13--10-10-10-10/13-13--10-15-13-- +G:--10-10-10-10/13-13--10-10-10-10/13-13--10-10-10-10/13-13--10-15-13-- +D:--10-10-10-10/13-13--10-10-10-10/13-13--10-10-10-10/13-13--10-15-13-- +A:--------------------------------------------------------------------- +E:--------------------------------------------------------------------- +I think Pagey plays this with a slide on reconrd, but eighther way is +fine.. + + +Dustin Zawalski (son of Robert..) + +From: Michael_Kobrin@brown.edu (The Inevitable Smikey K) +Subject: Re: REQ: Out on the Tiles, LZ + +In article <1995Feb6.095225.1@bcvms.bc.edu>, oneilwb@bcvms.bc.edu wrote: + +> Anyone have the TAB for Out on the Tiles...whats at NEvada doersn't seem +> right +> +> Thanks + +Out on the Tiles: main riff + +------------------------ +------------------------ +------------------------ +-----------------4------ +-------------4---------- +--2--s--5--------------- + + +-------------------------------------------------------- +-------------------------------------------------------- +-------------------------------------------------------- +--1--2--1--2--1--2--1----------------------------------- +------------------------4---0---2--0--2--0--2--3--2--0-- +-------------------------------------------------------- + +back to first riff. + +learn that, and I'll send the rest soon (I'm doing it by hand, so it'll +take me a couple of minutes.) If that's what nevada has, they're right. if +not, do me a favor and send me what they did have (if you've still got it) +so I can laugh. + +-- +- Mike Kobrin. + +"This life is a test. Had this been +an actual life, you would have received +instructions on where to go and what to do." - Angela Chase + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Led Zeppelin/tangerine.tab b/guitar/tabs/Led Zeppelin/tangerine.tab new file mode 100644 index 0000000..369edbb --- /dev/null +++ b/guitar/tabs/Led Zeppelin/tangerine.tab @@ -0,0 +1,510 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive +Dec 02: 20919 files + Guitar Tab + Everything + Rock + Pop + Jazz + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / l / led_zeppelin / tangerine.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## + +[multiple versioins] + +Actually, there was an addition to this, from another list member (Dan +someone from very hazy memory) which was the first chords (Am Am7 Am ..) +should be Am Am7 Am Asus2 or something like that. + +Anyway, I play it like I've said (with the Asus2 chord) and it sounds +correct (If you listen to the song you should be able to hear 4 chords +before the G). So here's my revision: + + "'Measuring a summer's day...." (Just *HAD* to fix that!). + + Am Am7 Am Asus2 G G D + --0----0----0----0----3----3----2-- + --1----3----1----0----3----3----3-- + --2----2----2----2----0----0----2-- + --2----2----2----2----0----0----0-- + --0----0----0----0----2----2------- + ----------------------3----3------- + +Oh, yeah. There's two G chords after the A sequence, then you strum the +D for the appropriate number of beats (I think 4). When you repeat the +sequence, it's *two* D chords then *two* C chords (You should be able to +find a C major fingering picture somewhere). + +When I remember to bring in the damn book, I will hopefully be able to +give you the tab for the tinkly bit after 'grey'. You know - "Measuring +a summer's day, only find it slips away to grey The hours +they bring me pain". + +Rod. +rodney@qpsx.oz.au + +From: tzz@bu.edu (Teodor Zlatanov) + +I got this off ftp.maths.tcd.ie +enjoy. +"Here's most of Tangerine by Led Zeppelin. There is already one of these +floating round, but there's only a couple of chords. So I thought I would +attempt to get it down the way I play it - this is my first attempt +ever, so excuse any major cock-ups please. + +I've ignored the "botched" intro on the album (Led Zeppelin III). + +There are a couple of chord shapes which I need to explain: + +Three chords based around Amin. which I'll call: + + Am Am sus2 Am sus4 + (Am2) (Am4) +N ++++++ ++++++ ++++++ + ||||1| |||||| ||||1| +1 ++++++ ++++++ ++++++ + ||23|| ||23|| ||23|| +2 ++++++ ++++++ ++++++ + |||||| |||||| ||||4| + +And three chords based around Dmaj. which I'll call: + + D D sus2 D sus4 + (D2) (D4) +N ++++++ ++++++ ++++++ + |||||| |||||| |||||| +1 ++++++ ++++++ ++++++ + |||1|2 |||1|| |||1|2 +2 ++++++ ++++++ ++++++ + ||||3| ||||3| ||||34 + +The opening sequence to the song. I've left in timing counts (the song +is in 4:4 as far as I can tell).. + + + 1 2 3 4 1 2 3 4 + Am Am4 Am Am2 G G D D +E-0---0---0---0---3-------3---2---|-2-------2-------2---2---2-2-----| +B-1---3---1---0---0-------0---3---|-3-------3---3---3---3---3-3-----| +G-2---2---2---2---0-------0---2---|-2-------2-------2---2---2-2-----| +D-2---2---2---2---0-------0---0---|-0-------0-------0---0---0-0-----| +A-0---0---0---0---2-------2---0---|-#-------#-------#---------------| +E-#---#---#---#---3-------3---#---|-#-------#-------#---------------| + + 1 2 3 4 1 2 3 4 + Am Am4 Am Am2 G G D D C C +E-0---0---0---0---3-------3---2---|-2-------2---0---0-------0---0---| +B-1---3---1---0---0-------0---3---|-3-------3---1---1-------1---1---| +G-2---2---2---2---0-------0---2---|-2-------2---0---0-------0---0---| +D-2---2---2---2---0-------0---0---|-0-------0-------2-------2-------| +A-0---0---0---0---2-------2---0---|-#-------#-------3-------3-------| +E-#---#---#---#---3-------3---#---|-#-------#-------#-------#-------| + + 1 2 3 4 1 2 3 4 + [picking] Am Am Am G G D D D +E-------------------------0-----0-|-0-----3-3-----2-2-------2--2--2-| +B-------------------------1-----1-|-1-----0-0-----3-3-------3--3--3-| +G-----0-------0-----------2-----2-|-2-----0-0-----2-2-------2--2--2-| +D---2-------0-------------2-----2-|-2-----0-0-----0-0-------0--0--0-| +A-3-----3-2-----2-0-------0-----0-|-0-----2-2-----#-#-------0--0--0-| +E-------------------------#-----#-|-#-----3-3-----#-#-------#--#--#-| + + 1 2 3 4 + D4 D D2 D +E-3---2-------0---2---------------| +B-3---3-------3---3---------------| +G-2---2-------2---2---------------| +D-0---0-------0---0---------------| +A-#---#-------#---#---------------| +E-#---#-------#---#---------------| + + +Repeated thru Verse 1: +--------------------- +Am Am4 Am Am2 G G D D D .. D .. D +Mea - sur - ing a ... + +Am Am4 Am Am2 G G D D C C .. C +On - ly find it slips ... + +[picking] Am Am Am G G D D D D4 D D2 D +.............. The hours... + + +Chorus: +------ +C D G G C + Tangerine, tan... + + D G G C + Living reflection ... + D G G C + I was her love, she ... + + D G G G G D + And now a thousand ... + + +Verse 2: +------- +Am Am4 Am Am2 G G D D D .. D .. D +Think-ing how it ... + +Am Am4 Am Am2 G G D D C C .. C +Does she still re - mem - ... + +[picking] Am Am Am G G D D D D4 D D2 D +.............. To think of... + + +And I do.. + + + +Solo: +---- +Played w/ a very fuzzy guitar! I've left in chords to assist with +accompanying guitar. + +Notes: 1/3 1 played, bent up to 3 + 3/1 3 played while bent, and returned to 1 + 1/3\1 1 played, bent up to 3 and then returned to 1 + 1h3 1 played then hammer-on 3 + 3p1 3 played then pull-off to 1 + 1s3 1 played then slide to 3 + + + Am C +E---------------------------------|-8---------------10---10/12\10---| +B-10------------------------------|---------------------------------| +G---------------------------------|---------------------------------| +D---------------------------------|---------------------------------| +A---------------------------------|---------------------------------| +E---------------------------------|---------------------------------| + + D F +E-10-------------------------8p7--|-8------------------------10-----| +B---------------------------------|---------------------------------| +G---------------------------------|---------------------------------| +D---------------------------------|---------------------------------| +A---------------------------------|---------------------------------| +E---------------------------------|---------------------------------| + + E F E E E F +E-7---------7-7---8--10-----6/7s5-|-7----------7-7--8----10---------| +B---------------------------------|---------------------------------| +G---------------------------------|---------------------------------| +D---------------------------------|---------------------------------| +A---------------------------------|---------------------------------| +E---------------------------------|---------------------------------| + + C G D +E-15/17--15------------18/19-18/19|-18/19\s17-17-18/19--19/20--19/20| +B---------------------------------|---------------------------------| +G---------------------------------|---------------------------------| +D---------------------------------|---------------------------------| +A---------------------------------|---------------------------------| +E---------------------------------|---------------------------------| + +E-21/22---------------------------| +B---------------------------------| +G---------------------------------| +D---------------------------------| +A---------------------------------| +E---------------------------------| + +[this was worked out using a twenty-fret acoustic, so it _may_ be incorrect. + feel free to modify to taste.] + +Chorus repeated +------ + +Outtro: +------ + +strum.. + +D.... D.... D.... D.... D D4 D D2 D .. D D4 D D2 D ad nauseum whatever - I +didn't count them + +plus a couple of chords to finish.. + +Am Am G G F F G + +[some picking is done around these chord shapes, but I can't be bothered working +it out - should be easy though - lots of twiddly work with pinkys etc.] + +From: stinky10@aol.com (Stinky10) +Subject: TAB:Tangerine + +Here is another slightly different version of "Tangerine", by Led +Zeppelin. Jimmy uses a 12 string so it's sounds slightly different if +you're using a 6. +Key: + +^ bend |o--------o| +r release |o--------o| repeat +[ ] harmonics x / y slide + +Tune down 1/4 step. + +Verse: + +|----------------------------------------3----3-----------2---2-- +|------1------3------1-----0----------0----0-----0----3---3-- +|o----2------2------2-----2----------0----0-----0----2---2-- +|o----2------2------2-----2----------0----0-----0----0---0-- +|------0------0------0-----0----------2----2------------------- +|----------------------------------------3----3------------------- + + +___1st ending +|-------2-----2-----| +|-------3-----3-----| +|-------2-----2----o| +|--0---0-----0----o| +|---------------------| +|---------------------| + + +___2nd ending +|--0---0------0---0------------------------------------------ +|--1---1------1---1--------------------1----------------3--- +|--0---0------0---0---------------0-----------------0------- +|--2---2------2---2----------2-----------------0------------ +|--3---3------3---3-----3------------------2---------------- +---------------------------------------------------------------- + +|---0------0---0-----------------------------2---2--- +|---1------1--1-------5--5-----3--3-------3---3---- +|---2------2--2-------5--5-----4--4-------2---2---- +|---2------2--2-------5--5-----5--5-------0---0---- +|---0------0--0----------------------------------------- +|--------------------------------------------------------- + + +|---------2-------2--2----3----2---------2- +|---------3-------3--3----3----3----0---3- +|---------2-------2--2----2----2----0---2- +|---------0-------0--0----0----0----0---0- +|---------------------------------------------- +|---------------------------------------------- + + +Refrain: + _____1, 2, 3 endings +|----0--0---0----2--2--2-----|------3-----3-------3---3----2--2--2-- +|----1--1---1----3--3--3-----|------3-----3-------3---3----3--3--3-- +|----0--0---0----2--2--2-----|o----0-----0-------0---0----2--2--2-- +|----2--2---2----0--0--0-----|o----0-----0-------0---0----0--0--0-- +|----3--3---3------------------|------2-----2-------2---2--------------- +|--------------------------------|------3-----3-------3---3--------------- + + +|---0---------0----------0---0---0----2---2---2------| +|---1---------1----------1---1---1----3---3---3------| +|---0---------0----------0---0---0----2---2---2----o| +|---2---------2----------2---2---2----0---0---0----o| +|---3---------3----------3---3---3---------------------| +|---3---------3------------------------------------------| + +_______4th ending +|--3--3-----3--3-----3---3-----2---------2-------2-- +|--0--0-----0--0-----0---0-----3---------3-------3-- +|--0--0-----0--0-----0---0-----2---------2-------2-- +|--0--0-----0--0-----0---0-----0-----3--0----3--0- +|--2--2-----2--2-----2---2---------------------------- +|--3--3-----3--3-----3---3---------------------------- + + +Solo Rhythm: (Listen to CD) + +|Am |G |D |F |E F |E F | + +then: + +|---0------0-------0---0------3---3---3-------3---- +|---1------1-------1---1------0---0---0-------0---- +|---0------0-------0---0------0---0---0-------0---- +|---2------2-------2---2------0---0---0-------0---- +|---3------3-------3---3------2---2---2-------2---- +|--------------------------------3---3---3-------3---- + + +|------2------------------------ +|------3-----------3--------3-- +|------2-----------2--------2-- +|------0-------3--0----3---0-- +|--------------------------------- +|--------------------------------- + + + +Refrain + +Outro: +___________7 times ______4 times +|-----2---2---2-----------------|----2---2---2-----2---2----3----2------| +|-----3---3---3-----------------|----3---3---3-----3---3----3----3------| +|o---2---2---2---------------o|o---2---2---2-----2---2----2----2----o| +|o---0---0---0---------------o|o---0---0---0-----0---0----0----0----o| +|---------------------------------|--------------------------------------- +-----| +|---------------------------------|--------------------------------------- +-----| + + + + +|-------------3----------------------------------------------- +|----0-------1--------------1------------------------------- +|----0-------2--------------0-------------------1----3----- +|----0-------2--------------2-------------------0---------- +|-------------0------------------------------0--------------- +|----------------------------------------3-------------------- + + +|------------------------------------------------------------- +|---------------------------------------------------0----1--- +|---0--0--0---------------------0---0------2-------------- +|---0--0--0--0-----------------0---0------3-------------- +|--------------------------2--------------------------------- +|------------------------------------------------------------- + + +|-------3--3---3---3-----------------3---3---3---3--- +|-------1---1---1---1----------------1---1---1---1--- +|-------2---2---2---2----------------2---2---2---2--- +|-------3---3---3---3-----3---------3---3---3---3--- +|---------------------------------------------------------- +|---------------------------------------------------------- + + +|--------------------------------------------------------------- +|----1----------0------------------------------------[12]---- +|----0----------0-----0----------------------0-----[12]----- +|----0----------0----------------------0------------[12]----- +|----2----------2---------------------------------------------- +|----3----------3----------------3--------------------------- + + + +Solo (over Solo Rhythm): + + full full full +|-------------------------------------------------- +|-----10--------13-----------15---^----15---- +|-----12^-------15^----------------------------- +|-------------------------------------------------- +|------------------------------------------------- +|------------------------------------------------- + + 1/2 1/2 full +|------------------------------------------------------------------- +|-----r12^---------r13----12-------12---12------13 / 15- +|------------------------------------------------------------------- +|------------------------------------------------------------------- +|------------------------------------------------------------------- +|------------------------------------------------------------------- + + + full full full +full +|-----------------------------------------------------15^---15----17^- +|-------------------12--12-----13 / 15------------------------------ +|-------r14^------------------------------------------------------------- +|------------------------------------------------------------------------- +|------------------------------------------------------------------------- +|------------------------------------------------------------------------- + + + full full 1/2 full +|-17^---17^----17---17-------19-^-------20--20^------ +|--------------------------------------------------------------- +|--------------------------------------------------------------- +|--------------------------------------------------------------- +|--------------------------------------------------------------- +|--------------------------------------------------------------- + + +Date: Thu, 23 Nov 1995 03:23:54 -0500 +From: jmarks@ramlink.net (John Marks) + + +Tangerine - Led Zep III + +--------------3--3--2--2--2-----2-------------3--3--2--2--(2)-- +--1--3--1--0--0--0--3--3--3--3--3--1--3--1--0-0--0--3--3--(3)-- +--2--2--2--2--0--0--2--2--2-----2--2--2--2--2-0--0--2--2--(2)-- +--2--2--2--2--0--0-----------------2--2--2--2-0--0------------- +--0-----------2--2-----------------0----------2--2------------- +--------------3--3----------------------------3--3------------- + + + +--------------------------------------------------3--3--2--2--- +--1--1-----1---------------------------1----1--1--0--0--3--3--- +--0--0-----0-----------0-----------0---2----2--2--0--0--2--2--- +--2--2--2--------2--2--------0--0------2----2--2--0--0--------- +--3--3--3-----3------------2-----------0----0--0--2--2--------- +--------------------------------------------------3--3--------- + + +---2--2--2----3--2---0-----2----- +---3--3--3----3--3---3-----3----- +---2--2--2----2--2---2-----2----- +--------------------------------- +--------------------------------- +--------------------------------- + + +Repeat then strum Am,Am,Am,...D,D,D,...G,G ("tangerine...") + + +John Marks - Huntington, WV + +jmarks@ramlink,net + + + +If this comes out messed up, check post on alt.guitar or alt.music.ledzep + +I posted it there 11-22-95 + + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Led Zeppelin/ten_years_gone.tab b/guitar/tabs/Led Zeppelin/ten_years_gone.tab new file mode 100644 index 0000000..5675d89 --- /dev/null +++ b/guitar/tabs/Led Zeppelin/ten_years_gone.tab @@ -0,0 +1,390 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / l / led_zeppelin / ten_years_gone.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: ebd@gtech.com (Edward DaCosta) + +Heres the words and tab for Led Zep's Ten Years Gone... + + + Ten Years Gone from Physical Graffitti + Words and Music by Jimmy Page and Robert Plant + + Transcribed by Ted DaCosta + + +Page uses Drop D tuning for this song (low E tuned down from E to D) +You don't have to but Ive tabbed everything for this tuning. + +First I'll provide the basic parts to the song and then provide instruction +on how to string them together. Sorry about the unorthodox approach but +this song is a tough one to type in. I read an article about how this +song was painfully pieced together by the band from a number of ideas +that Page had developed. With all the changes its evident there are mini +songs within the song. Check out the great rhythym guitar behind the +solos. + +I strongly recommend listening to the recording to get the right timing for +all the parts. I really didn't double check the tab, so if it +doesn't sound right it probably isn't. By the way Page sure wrote some +great songs. I'll try to post more Zeppelin if people are interested. + +Part 1: (played 2 times) + + let ring + >>>>>>>> >>>>> +e------------------|-------------------|----------0--------|----------------- +B-----2--0---0--3--|---3---------3-----|-------2-------0-3-|-3-3-3----------- +G-----2----2----2--|---2-------2---2---|-2-----2-----2---2-|-2----2---------- +D-----2---------3--|---3-----3-------3-|-2-----2---------3-|-3-----3--------- +A--0--0---------0--|---0--0------------|-0--0--0---------0-|-0--------------- +E------------------|-------------------|-------------------|----------------- + +Part 2: + x = mute strings +e----------------------------------|-7-7-7-7-x-x----------------------------- +B--2--2--x(2)--x(2)--1-1-x(1)-x(1)-|-8-8-8-8-x-x-7-7-7-7-7-5----------------- +G--2--2--x(2)--x(2)--2-2-x(2)-x(1)-|-9-9-9-9-x-x-6-6-6-6-6-4----------------- +D--2--2--x(2)--x(2)--1-1-x(2)-x(1)-|-9-9-9-9-x-x-7-7-7-7-7-5----------------- +A--0--0----------------------------|----------------------------------------- +E----------------------------------|----------------------------------------- + +Part 3: heavy guitar sound with distortion (remember drop D tuning) +Page overdubs to get that wall of sound here. I think a sitar was also +overdubbed. + + lead in riff +e------------------------------|--------------------|----------------------- +B------------------------------|---0----------------|---------2------------- +G-----------------------2--4-2-|-4-4-4--6-2---2-4-2-|-2-2-2-4-2--2-4-2------ +D-----------2-3-2-------2--2-2-|-5-5-5--5-4---4-4-4-|-3-3-3-3-2--2-2-2------ +A------0-3----------0----------|------------0-------|-----------0----------- +E--2-3-------------------------|--------------------|----------------------- + + + +e--------------------|----------------------- +B---0----------------|---------2------------- +G-4-4-4--6-2---2-4-2-|-2-2-2-4-2--2-4-2------ +D-5-5-5--5-4---4-4-4-|-3-3-3-3-2--2-2-2------ +A------------0-------|-----------0----------- +E--------------------|----------------------- + + +e--------------------|----------------------- +B---0----------------|---------2------------- +G-4-4-4--6-2---2-4-2-|-2-2-2-4-2--2-4-2------ +D-5-5-5--5-4---4-4-4-|-3-3-3-3-2--2-2-2------ +A------------0-------|-----------0----------- +E--------------------|----------------------- + + * heavy part ends leads into Part 1 +e--------------------|----------------------|------------------------------- +B---0----------------|-------0-2---0---0-3--|--------3---------------------- +G-4-4-4--6-2---2-4-2-|-2-2-2---2-----2---2--|------2---2-------------------- +D-5-5-5--5-4---4-4-4-|-3-3-3---2---------3--|----3-------3------------------ +A------------0-------|-------------------0--|--0---------------------------- +E--------------------|----------------------|------------------------------- + +Part 4: + + Dmaj7 C/G G +e----------------------|----------------------------------------------------- +B--5--7-7-7-7--7-7--5--|--5--3--5--3--3-3--3-3-3-3--------------------------- +G--4--6-6-6-6--6-6--4--|--5--4--5--4--4-4--4-4-4-4--------------------------- +D--5--7-7-7-7--7-7--5--|--5--5--5--5--5-5--5-5-5-5--------------------------- +A----------------------|----------------------------------------------------- +E----------------------|----------------------------------------------------- + + Em7 >>>>> Dmaj7 +e-0--0-0-0-0-0-0-0-0-|-0-2--2--2--|------------------------------------------ +B-5--5-5-5-5-5-5-5-3-|-3-2--2--2--|--5-7-7-7-7--7-7-7-7---------------------- +G-4--4-4-4-4-4-4-4-4-|-4-2--2--2--|--4-6-6-6-6--6-6-6-6---------------------- +D-5--5-5-5-5-5-5-5-5-|-5-4--0--0--|--5-7-7-7-7--7-7-7-7---------------------- +A--------------------|------------|------------------------------------------ +E--------------------|------------|------------------------------------------ + + >>>>> + C/G G Em9 Dmaj7 +e--------------------|-----------0-0-------------|----2---------------------- +B--5--5--5--3--------|--0-0-3-3--3-3--3-3--3--0--|-0--2---------------------- +G--5--5--5--4--4--4--|--0-0-0-0--0-0--0-0--0--0--|-0--2---------------------- +D--5--5--5--5--5--5--|--4-4-4-4-------4-4--4-----|-------2--2---------------- +A--------------------|---------------------------|-------0--0---------------- +E--------------------|---------------------------|--------------------------- + +e-0--2--2--0--|----------------|------------------------0-|0----------------- +B-0--2--2--0--|-5--5-5-3--3--3-|-0-0--0-0--0-0--0-0-0-0-3-|3---7--7----------- +G-0--2--2--0--|-5--5-5-4--4--4-|-0-0--0-0--0-0--0-0-0-0-4-|4---6--6----------- +D-------------|-5--5-5-5--5--5-|-4-4--4-4--4-4--4-4-4-4-5-|5---7--7----------- +A-------------|----------------|--------------------------|------------------ +E---------------------------------------------------------|------------------ + + + Dmaj7 +e----------------------| +B--5--7-7-7-7--7-7--7--| +G--4--6-6-6-6--6-6--6--| +D--5--7-7-7-7--7-7--7--| +A----------------------| +E----------------------| + distorted + C/G G Em9 (remember drop d) +e--------------------|-----------0-0-------------|--------------------------- +B--5--5--5--3--------|--0-0-3-3--3-3--3-3--3--5--|-5--7--7-7----------------- +G--5--5--5--4--4--4--|--0-0-0-0--0-0--0-0--0--4--|-4--6--6-6----------------- +D--5--5--5--5--5--5--|--4-4-4-4-------4-4--4--5--|-5--7--7-7----------------- +A--------------------|---------------------------|------------5-7-7-9-9-7---- +E--------------------|---------------------------|------------5-7-7-9-9-7---- + + +Part 5: +e-------------------|-0---------------| +B-------------------|-0---------------| +G-------------------|-2---------------| Repeat 2 more times and then +D-------------5-5---|-4---------------| +A-7-5-5-5-5-5-5-5-0-|----0-0-5-7-9-9-7| +E-7-5-5-5-5-5-5-5-0-|----0-0-5-7-9-9-7| + +e---------------------| +B---------------------| +G---------------------| +D---------------------| +A-7-5-5-5-5-5-5-5-5-7-| +E-7-5-5-5-5-5-5-5-5-7-| + +Part 6: + +e----------0-|-0--5-5-5-5-5-5-5-0-|-0-0-0-0-0-0-0-0-0-0|-0------------------- +B-----9-9--7-|-7--7-7-7-7-7-7-7-7-|-7-7-7-7-7-7-7-7-7-0|-0------------------- +G-----9-9--6-|-6--6-6-6-6-6-6-6-7-|-7-7-7-7-7-7-7-7-7-0|-0--0--0--0---------- +D-----7-7--7-|-7--7-7-7-7-7-7-7-5-|-5-5-5-5-5-5-5-5-5-2|-2------------------- +A-7----------|------------------5-|-5-5-5-5-5-5-5-5-5-3|-3------------------- +E-7----------|------------------5-|-5-5-5-5-5-5-5-5-5--|--------------------- + + +e-4-0-0-0-0-0-0-0--|-0--0--0--0--0--9--7-|-7-7-7-7-7-7-7-0------------------- +B-5-5-5-5-5-5-5-10-|-10-10-10-10-10-10-7-|-7-7-7-7-7-7-7-0------------------- +G-6-6-6-6-6-6-6-11-|-11-11-11-11-11-11-7-|-7-7-7-7-7-7-7-0------------------- +D-6-6-6-6-6-6-6-12-|-12-12-12-12-12-12-5-|-5-5-5-5-5-5-5--------------------- +A------------------|-------------------5-|-5-5-5-5-5-5-5--------------------- +E------------------|-------------------5---5-5-5-5-5-5-5--------------------- + + +Intro: +[ Guitar : Part 1 ] +[ Guitar : Part 2 ] +[ Guitar : Part 3 ] + +Verse: +[ Guitar : Part 1 ] + +Think as it was, then ... + +Though the course may change ... + +[ Guitar : Part 2 (no vocals) ] + +[ Guitar : Part 3 (vocals start in second measure) ] + +Blind spies of fortune... + +on the wings of .... + +Kind of makes me feel ... + +For as a eagle leaves ... + + +[ Guitar : Part 1 ] + +Changes fill my time... + +in the midst I think of ... + +[ Guitar : Part 2 ] + +[ Guitar : Part 4 ] played behind solo 1, leads into Part 5 with vocals + +[ Guitar : Part 5 ] + +Did you ever really need ... + +Did You ever really ... + +Will you ever remember me ... + +Cause it was just the ... + +[ Guitar : Part 6] played behind solo 2. + +[ Guitar : Part 3] + +Do the eyes not sparkle... + +tasting love along the way... + +Gonna make you a meal .... + +We are eagles all one loves, .... + +[ Guitar : Part 1 ] + +Fixin in my dreams with ....me + +I never thought I'd see your .... + +[ Guitar : Part 2 ] + +Oh darling, Oh darlin. + +[ Guitar : Part 3 ] Repeat and fade etc. + +Note on the outro Page overdubs a riff similar to Part 3 but played +with only single notes (no double stops) in the 10th position. Listen +to the recording. + + + + + +Well, here's the solo to Ten Years Gone. I did not tab it out, I'm +merely posting +it. Please make any corrections you feel are necessary. + + + Ten Years Gone solo by Led Zeppelin + Posted bt Craig Knowles + + +1--------5-/-7---5----------2-\-0----------------------------------------------------2--------5-/-7---5----------2-\-0----------------------------------------------- +3----------------------------------------------9(11)-9(11)-----9(11)--9--7------ +4------------------------------------------------------------------------------- +5------------------------------------------------------------------------------- +6------------------------------------------------------------------------------- + +1©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +2©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +3------------9(11)--9--7------7~9--7-----©©©©©©© +4-------9--------------------------------9------ +5------------10--------------------------------- +6©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© + +1---7---7~8~7-------------------------7~10~7---5~7~5-------7~10~7---5~7~5------- +2---7---7~8~7-------------------------7~10~7---5~7~5-------7~10~7---5~7~5------- +3------------------------------------------------------------------6------------ +4----------------------7-----7--5--4-------------------------------------------- +5------------------------------------------------------------------------------- +6------------------------------------------------------------------------------- + +1©7~10~7--5-------------5--------©©©©©©©©©©©©©©©©©©©©©©©© +2©7~10~7--5----5-/-7------------©©©©©©©©©©©©©©©©©©©©©©©©© +3©----------6-------------------------------6-------©©©©© +4©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +5©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +6©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© + +1-----------7------------------------------------------------------------------- +2--7-/-8--------/-12-----------------15--17(19)--17(19)--17(19)-17-15---17------ +3---------------------------------/-16------------------------------------------ +4------------------------------------------------------------------------------- +5------------------------------------------------------------------------------- +6------------------------------------------------------------------------------- + +1------------------------------------------14-15-17- +2--15--17(19)----------------©©©©©©©©©©©©©©©©©©©©©©© +3------------------16------------------------------- +4©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +5©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +6©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© + +1--17(19)(17)----------------------17(19)(17)-15--17--15--17~15----------------- +2-----------------------15--17(19)---------------------------------------------- +3------------------------------------------------------------------------------- +4------------------------------------------------------------------------------- +5------------------------------------------------------------------------------- +6------------------------------------------------------------------------------- + +Ôh)0*0*0*°°ÔŒ1©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +2----------15--17--15--17(19)(17)~15--©©©©©©©©©©©©©©©©© +3--------16-------------------------------------------- +4©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +5©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +6©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© + +1©©-17--17---------------------------8-/-10-\-8----7~10~7--5------7~10~7--©©©©©© +2--17----------------17(19)(17)-15---8-/-10-\-8----7~10~7--5------7~10~7-©©©©©©- +3------------------------------------------------------------------------------- +4------------------------------------------------------------------------------- +5------------------------------------------------------------------------------- +6------------------------------------------------------------------------------- + +1©5~7~5------7~10~7--5~7~5----©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +2©5~7~5©©©©--7~10~7--5~7~5----©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +3©©©©©©©--6-----------------------6--------------------------6© +4©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +5©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +6©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© + +1--7~10~7--5~7~5-----5--5-5-5-----------------------------------------------15-1 +2--7~10~7--5~7~5-----7--7-7-7---/12------------------15-17-17(19)--------------- +3--------------------7--7-7-7--------------------/16--------------------©©©©©©©© +4------------5-----------------------------------------------------------------------6------------------------------------------------------------------------------- + +115©16-17-17(19)-------17----------------1 +2----©--------15-------17(19)(17)©©©©©©©©© +3©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +4©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +5©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© +6©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©© + +1----------17------------------------------------------------------------------- +2--15----------17(19)(17)-15--17(19)(17)---15----------------------------------- +3------------------------------------------------------------------------------- +4-------------------------------------------------------------------do you ever +really need etc...----------------------- +5------------------------------------------------------------------------------- +6------------------------------------------------------------------------------- + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Lesson/All About Tapping.prj b/guitar/tabs/Lesson/All About Tapping.prj new file mode 100644 index 0000000..cd34615 --- /dev/null +++ b/guitar/tabs/Lesson/All About Tapping.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=All About Tapping.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500) diff --git a/guitar/tabs/Lesson/All About Tapping.tab b/guitar/tabs/Lesson/All About Tapping.tab new file mode 100644 index 0000000..1a77790 --- /dev/null +++ b/guitar/tabs/Lesson/All About Tapping.tab @@ -0,0 +1,39 @@ + + +All About Tapping 19: Multifinger Pull-Offs (I) + + + + + + + + +I'd probably suggest learning this one slowly at first to a metronome +and gradually speeding it up. It's actually easier to play this type of +thing fast rather than slow, but you're going to need a good solid +foundation to begin with to build your playing on. +Once you get your mind and fingers wrapped around the hammer ons and +pull offs at a slow speed, you'll find going fast is just a matter of +rocking your hands a bit. Your fingers will sorta be used to doing their +own thing. + + + + + +Key = + + + + + p h h H H H P P p p +|--7--8--10--12--14--15--14--12--10--8--| +|---------------------------------------| +|---------------------------------------| +|---------------------------------------| +|---------------------------------------| +|---------------------------------------| + 1 2 4 [1] [2] [3] [2] [1] 4 2 + + diff --git a/guitar/tabs/Lesson/BADASS 6 string shredder run.prj b/guitar/tabs/Lesson/BADASS 6 string shredder run.prj new file mode 100644 index 0000000..97ad05b --- /dev/null +++ b/guitar/tabs/Lesson/BADASS 6 string shredder run.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=BADASS 6 string shredder run.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16) diff --git a/guitar/tabs/Lesson/BADASS 6 string shredder run.tab b/guitar/tabs/Lesson/BADASS 6 string shredder run.tab new file mode 100644 index 0000000..830e097 --- /dev/null +++ b/guitar/tabs/Lesson/BADASS 6 string shredder run.tab @@ -0,0 +1,23 @@ +BADASS 6 string shredder run!!!!! + + +OK, heres a cool terror death lick, this is something along the lines of what Paul Gilbert or Steve Vai would do, sounds really wicked when played fast. This is in 4/4 time, 16th note feel, its very nice for building at the end of a solo. I like to post these climax type licks cause I think one of the hardest things to do is end a solo... so I like to post some ideas for shredders on things they can do when its time for the feel of the solo to end and death licks to take place. Of course there has to be an end to it, so this lick fits that kinda feel nice, plus, this lick is cool to phrase with cause it works with the 16th note feel. I had a hard time makin this work in this tab field so I removed some of the bars, but you will see the pattern of how this works between the modes it uses, and you will also have no problem with the timing. Thanks for checking it out!!!!! + + +Key = Em + + + E |------------------------------------------------------------------| + B |------------------------------------------------------------------| + G |------------------------------------------------------------------| + D |----------------------------------9--10--12-/-14-12-10-12-14------| + A |-------------7-9-10/12-10-9-10-12---------------------------------| + E |-10-8-7-8-10------------------------------------------------------| + + E |----------------------------------------------------------15-17-19-20^-| + B |-----------------------------------13-15-17/19-17-15-17-19-------------| + G |------------11-12-14/16-14-12-14-16------------------------------------| + D |-12-10-12-14-----------------------------------------------------------| + A |-----------------------------------------------------------------------| + E |-----------------------------------------------------------------------| + diff --git a/guitar/tabs/Lesson/Chord Tapping.prj b/guitar/tabs/Lesson/Chord Tapping.prj new file mode 100644 index 0000000..d954422 --- /dev/null +++ b/guitar/tabs/Lesson/Chord Tapping.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Chord Tapping.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500)(32,500)(33,500)(34,500)(35,500)(36,500)(37,500)(38,500)(39,500)(40,500)(41,500)(42,500)(43,500)(44,500)(45,500)(46,500)(47,500)(48,500)(49,500)(50,500)(51,500)(52,500)(53,500)(54,500)(55,500)(56,500)(57,500)(58,500)(59,500)(60,500)(61,500)(62,500)(63,500)(64,500)(65,500)(66,500)(67,500)(68,500)(69,500)(70,500)(71,500)(72,500)(73,500)(74,500)(75,500)(76,500)(77,500)(78,500)(79,500)(80,500)(81,500)(82,500)(83,500)(84,500)(85,500)(86,500)(87,500)(88,500)(89,500)(90,500)(91,500)(92,500)(93,500)(94,500)(95,500)(96,500)(97,500)(98,500)(99,500)(100,500)(101,500)(102,500)(103,500)(104,500)(105,500)(106,500)(107,500)(108,500)(109,500) diff --git a/guitar/tabs/Lesson/Chord Tapping.tab b/guitar/tabs/Lesson/Chord Tapping.tab new file mode 100644 index 0000000..b3335e0 --- /dev/null +++ b/guitar/tabs/Lesson/Chord Tapping.tab @@ -0,0 +1,220 @@ +All About Tapping 57: Chord Tapping + + +In order to pull this one off, it's going to require some explanation during +the tabs or it's not going to make much sense. +It's also going to require some big time practicing on your part. +(Figure on spending numerous hours figuring it out and practicing it, getting all +the palm muting and damping down and developing the tapping technique) + +I'm going to seperate each individual part into separate bars or sections so +you can tackle each section one at a time. + +Another thing to keep in mind is that the GuitarTricks website template I'm using +here won't allow apostrophes or other unusual characters within the tab text +itself. So if you see me using unusually formal language below, like "it is" +instead of "it's"... or "do not" instead of "don't", it's not just cause I'm British...or Canadian or whatever ... +I have to do it that way or I end up with stuff like %$?$% + + +Key = Em + + Title: Chord Tapping + Schmange ©2001 + Music by K. Briggs + --------------------------------------------------------------- + Legend: + ------- + x mute * harmonic + b bend >< pinch string + r release + + h hammer on left hand H hammer on right hand + p pull off left hand P pull off right hand + t tap left hand T tap right hand + + ~ vibrato v pick downward + / slide up ^ pick upward + \ slide down + + ^^ tremolo {} bar or section + >> let note ring on r/r repeat + + ---------------------------------------------------------------- + + 1 index finger, left hand [1] index finger, right hand + 2 middle finger, left hand [2] middle finger, right hand + 3 ring finger, left hand [3] ring finger, right hand + 4 pinky, left hand [4] pinky, right hand + + + + + + ---------------------------------------------------------------- + + Em + t t t T T P +E|-------------------------------|1 +B|---------------13>>>8>>>>>>>>>>|2 +G|--------9>>12>>>>>>>8>>>>>>>>>>|3 +D|-----9>>>>>>>>>>>>>>>>>>>>>>>>>|4 +A|--7>>>>>>>>>>>>>>>>>>>>>>>>>>>>|5 +E|-------------------------------|6 + 1 2 3 [1] [2] ... hold the Em chord + +The begining of this one is almost the same as the last 3 tricks we just did. +(Harmony Tap 1, 2 and 3) +You still start with holding an Em chord, but have to tap the first three +notes first. +In order to get the leverage you need to tap the first three notes, lift your hand enough to sharply tap them with your left hand and then continue on with your left hand getting into place, forming a barred Em chord with your left, while your right hand taps the next two notes, then release those two notes by pulling upwards (or downwards*) with those two fingers to play the full Em chord. + + ---------------------------------------------------------------- + + .... still holding the Em chord + T P T P T P T +E|--15/17\15>>>7--------------------------|1 +B|--15/17\15>>>8--12/13\12--8-------------|2 +G|----------------12>>>>>>--9-------------|3 +D|-----------------------------12--9------|4 +A|------------------------------------12--|5 +E|----------------------------------------|6 + [2] [2] + [1] [1] [1] [1] + +Regarding the above stuff... (ie the [2] over top of the +[1]). All that is showing is you are using your first and +second fingers to tap the notes at the same time. + + + Cadd9 Dadd9 + t t T t ^ v T T P T +E|---------------x--x---x-------------------|-------------|1 +B|---------------8--8--10--15--15>>10-------|-------------|2 +G|-----7>>11/12>>7--7---9--14--14>>-9-------|-------------|3 +D|------------------0---0--------------14>>-|-------------|4 +A|------------------x---x-------------------|--------5/7--|5 +E|--8>>>>>>>>>>>>>-----10-------------------|--5--7-------|6 + 2 1 [1] [1] [2] [2] [1] 1 3 1 + [1] [1] + +------------------------------------------------------------------- + +... and here you are just starting from the beginning and repeating the +same thing... except instead of tapping the first note, you +slide up (5/7) + + Em + s t t T T P +E|-------------------------------|1 +B|---------------13>>>8>>>>>>>>>>|2 +G|--------9>>12>>>>>>>8>>>>>>>>>>|3 +D|-----9>>>>>>>>>>>>>>>>>>>>>>>>>|4 +A|--->>>>>>>>>>>>>>>>>>>>>>>>>>>>|5 +E|-------------------------------|6 + 1 2 3 [1] [2] ... hold the Em chord + + + .... still holding the Em chord + T P T P T P T +E|--15/17\15>>>7--------------------------|1 +B|--15/17\15>>>8--12/13\12--8-------------|2 +G|----------------12>>>>>>--9-------------|3 +D|-----------------------------12--9------|4 +A|------------------------------------12--|5 +E|----------------------------------------|6 + [2] [2] + [1] [1] [1] [1] + +----------------------------------------------------------------------- + +... changing chords + + Cadd9 Dadd9 + t t T t ^ v T T P T +E|---------------x--x---x-------------------|-------------|1 +B|---------------8--8--10--15--15>>10-------|-------------|2 +G|-----7>>11/12>>7--7---9--14--14>>-9-------|-------------|3 +D|------------------0---0--------------14>>-|-------------|4 +A|------------------x---x-------------------|--------5----|5 +E|--8>>>>>>>>>>>>>-----10-------------------|--5--7-------|6 + 2 1 [1] [1] [2] [2] [1] 1 3 1 + [1] [1] + + +...ok, this next part is gonna require a bit of explanation... + + Esus2 + t t t T P T T P t h T +E|----------------------------------------------|1 +B|--------6>>13--6---13--13/15\13--6------------|2 +G|-----5>>>>>12--5---12--12/14\12--5--------10--|3 +D|------------------------------------------10--|4 +A|----------------------------------------------|5 +E|--6>>>>>>>>>>>>>----6---6-----------5--6------|6 + 2 1 3 [2] [2] 1 2 [2] + [1] [1] [1] + 1 1 + +...what the heck is that part in the middle?? +Pretty simple really... when you tap the upper part with +your right hand, simultaneously tap the bass note twice on the +6th string, 6th fret, with the second finger of your left hand. + +Also... just before you play the last 3 notes, +quickly mute all the strings with your right hand palm or +you end up with open notes ringing on all over the place. + +---------------------------------------------------- + + Am C + t t t T ^ ^ t T t T t T t T t T t T +E|----------------5---8----------------------------------------8--12--|1 +B|------------10--5---8---------------------------------8--12---------|2 +G|-------------9--5---9--------------------------9--12----------------|3 +D|---------7---------10------------------10--12-----------------------|4 +A|------7------------10----------10--12-------------------------------|5 +E|---5----------------8---8--12---------------------------------------|6 + 1 3 4 [2] + [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] + +ok...this part starts by tapping the first three notes....then as you continue +tapping with the right hand, your left hand is moving into place to form +an Am chord... +Pull off downward with your first finger, then strum a barred C chord with +your thumb (or first finger). +The next set of tapping that moves through strings 6 to 1 is basically just +tapping out that same C chord shape with your left hand, and tapping on +the 12th fret with your right. On the very last note of this bar, hold the tapped +12th fret note and let it ring on while you move your left hand into position to +repeat the Esus2 riff again... + +------------------------------------------------------ + + + Esus2 + t t t T P T T P t h T +E|----------------------------------------------|1 +B|--------6>>13--6---13--13/15\13--6------------|2 +G|-----5>>>>>12--5---12--12/14\12--5--------10--|3 +D|------------------------------------------10--|4 +A|----------------------------------------------|5 +E|--6>>>>>>>>>>>>>----6---6-----------5--6------|6 + 2 1 3 [2] [2] 1 2 [2] + [1] [1] [1] + 1 1 +... and finally, strum an open G chord and tap this last part while the +chord rings on. + + Am G + t t t T ^ T P T P T P T P T P T P p p +E|----------------------------------------------------------------------|1 +B|-----------10/13------------------------------------------------------|2 +G|------------9/12--0---------------------------------------------------|3 +D|--------7---------0--12/14\12--0--9--0--7--0--5--0--------------------|4 +A|-----7------------0---------------------------------5--0--------------|5 +E|--5-------------------------------------------------------7--3--2--0--|6 + 1 3 4 [2] + [1] [1] [1] [1] [1] [1] [1] 2 1 + + diff --git a/guitar/tabs/Lesson/Fluid Phrasing.prj b/guitar/tabs/Lesson/Fluid Phrasing.prj new file mode 100644 index 0000000..c7d82ae --- /dev/null +++ b/guitar/tabs/Lesson/Fluid Phrasing.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Fluid Phrasing.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16) diff --git a/guitar/tabs/Lesson/Fluid Phrasing.tab b/guitar/tabs/Lesson/Fluid Phrasing.tab new file mode 100644 index 0000000..e7df976 --- /dev/null +++ b/guitar/tabs/Lesson/Fluid Phrasing.tab @@ -0,0 +1,42 @@ +Fluid Phrasing + + +Its the little things that count, really. I mean, when you hear Hendrix or Satriani or Hammett, you know who it is. Partly its the tone or maybe their phrasing techniques, but what really makes the big picture in any guitarists signature sound are the little details of their style. These details are heard often in their music, and you can recognize it. With Satch, its the legato fluidity time and time again. With Hendrix, its the way he bends or the how he hits the notes. + +So its important to find you own little things that define your style. It may sound like your influences, and thats okay, but some originality needs to thrown into the mix. + +Anyway, this is an example of a nuance I use quite often that I adapted from Vai. Its a quick little sucession of a pull-off and a slide to a higher note. To do it, fret a note with any finger but your index finger. Now place the index finger a fret or two behind that note. Sound the higher note, and, as fast as possible, pull-off to the lower note and slide back up to the first note (or higher). + + +Key = C + + + + + It starts sort of in Am, then ends on the second degree of C major + (which could be a V chord, if you want). It stops there, but sounds like it should resolve on C (I). + + + + p=pull off + h=hammer on + br=bend and release a full step + P.H.=pinch harmonic + + P.M.----- ----- + P.H. P.H. + E|-------------------------------------------------------| + B|-------------------------------------------------------| + G|------5-7--7br(p)5---5-7-7br(p)5-------5h7p5/75h7p5/7-| + D|--5-7--------------7-------------7p5h7-----------------| + A|-------------------------------------------------------| + E|-------------------------------------------------------| + + E|-------------------------------------------------------| + B|-------------------------------------------------------| + G|--5h7p5/75h7p5/75h7p5/9---5--/7--/97--------------| + D|-------------------------------------------------------| + A|-------------------------------------------------------| + E|-------------------------------------------------------| + + diff --git a/guitar/tabs/Lesson/Ionian.prj b/guitar/tabs/Lesson/Ionian.prj new file mode 100644 index 0000000..6284d7c --- /dev/null +++ b/guitar/tabs/Lesson/Ionian.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Ionian.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16) diff --git a/guitar/tabs/Lesson/Ionian.tab b/guitar/tabs/Lesson/Ionian.tab new file mode 100644 index 0000000..cccafcd --- /dev/null +++ b/guitar/tabs/Lesson/Ionian.tab @@ -0,0 +1,46 @@ +Ionian + + +This is the Ionian mode, the parent scale, the king of all modes, the holy one, etc., etc. Whether or not you like a major, happy sound, this is the scale that starts it all. It is the most dominant in classical music and many other forms, as well. Technically, all the modes can be derived from one another, but we call this the first mode because it was used so much in early music of the medieval ages through the renaissance and classical periods. + +This is the chordal structure for ionian: + +I ii iii IV V vi vii° + +Capitals mean that the chord built off that degree is major, and lower case means minor. ° means diminished. The example is 'Friends' off Satch's album The Extremist. He uses major scales quite well, as does Vai, though he tends not to be so straight forward with it. + + +Key = D major + + + + + + E |---------------------------/17-17-17-19-17------------------------| + B |-3---------------3----------------------------/15-15h17-17-19-17--| + G |-2---------------2------------------------------------------------| + D |-0---------------0------------------------------------------------| + A |-0------5--5--5--0------------------------------------------------| + E |--------2--3--5---------------------------------------------------| + + E |----------------17-17-17-19-22-17---------------------------------| + B |-1715-----------------------------15h17-17-19-17---------15------| + G |-------1614----------------------------------------14-16----16---| + D |------------------------------------------------------------------| + A |------------------------------------------------------------------| + E |------------------------------------------------------------------| + + E |------------------------------------------------------------------| + B |-------15-17b(19)---17b(19)-17-17/19-17----1715----15--17-15-----| + G |-14-16-------------------------------------------16---------------| + D |------------------------------------------------------------------| + A |------------------------------------------------------------------| + E |------------------------------------------------------------------| + + E |----------------| + B |----------------| + G |-14/16--14------| + D |------------12--| + A |----------------| + E |----------------| + diff --git a/guitar/tabs/Lesson/Lydian.prj b/guitar/tabs/Lesson/Lydian.prj new file mode 100644 index 0000000..3b8b953 --- /dev/null +++ b/guitar/tabs/Lesson/Lydian.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Lydian.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32) diff --git a/guitar/tabs/Lesson/Lydian.tab b/guitar/tabs/Lesson/Lydian.tab new file mode 100644 index 0000000..c060b19 --- /dev/null +++ b/guitar/tabs/Lesson/Lydian.tab @@ -0,0 +1,31 @@ +Lydian + + +Lydian can seem like a strange mode if you're not familiar with it. It does not have a natural perfect fourth; instead, it's augmented, which makes for a unique sound. Vai and Satch are the masters of this mode. It most closely identifies with ionian, yet it has a much different sound. + + + +Key = E Lydian + + + + + It opens with a E5-F5 (I-II) rhythmic movement + + Br=bend whole step and release + + E |------------------------------------------------------------------| + B |-5h7--9-12-14-12-14-14(Br)p12-11--12-9----------9p7--5-7---------| + G |------------------------------------------------------------------| + D |------------------------------------------------------------------| + A |------------------------------------------------------------------| + E |------------------------------------------------------------------| + + E |------------------------------------------------------------------| + B |-4h5p42-4--2h4p2p0-----------------------------------------------| + G |----------------------3-/-4--1-----------------------------------| + D |------------------------------------------------------------------| + A |------------------------------------------------------------------| + E |------------------------------------------------------------------| + + diff --git a/guitar/tabs/Lesson/Mixolydian.prj b/guitar/tabs/Lesson/Mixolydian.prj new file mode 100644 index 0000000..99870fe --- /dev/null +++ b/guitar/tabs/Lesson/Mixolydian.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Mixolydian.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32) diff --git a/guitar/tabs/Lesson/Mixolydian.tab b/guitar/tabs/Lesson/Mixolydian.tab new file mode 100644 index 0000000..41e511a --- /dev/null +++ b/guitar/tabs/Lesson/Mixolydian.tab @@ -0,0 +1,49 @@ +Mixolydian + + +This is the Mixolydian mode, which is the fifth degree of ionian. It sounds very similar to ionian except that it's seventh degree is lowered in comparison. I'm not sure how to describe the sound. Listen to 'Summer Song' by Satriani off of The Extremist. It's pure mixolydian in A which is derived from D Ionian. + +Here is the chordal structure for Mixolydian: + +I ii iii° IV v vi VII + +The example is in A Mixolydian. It opens with some chords to establish a tonality. The progression is A-G-A-G-A-G-D5-E5-A. + + +Key = A Mixolydian + + + + + The last part isn't that accurate, sorry. + * = bend is still held + + + E |-------17----17-19b(21)--------21b(22)-21-19-17-----------------| + B |-17h19----19----------------17-------------------19b(20)-19*-19-| + G |----------------------------------------------------------------| + D |----------------------------------------------------------------| + A |----------------------------------------------------------------| + E |----------------------------------------------------------------| + + E |----------------------------------------------------------------| + B |-19-17----17-------------17-------------------------------------| + G |-------------19-19-18-19----------------------------------------| + D |----------------------------19-19-17-17-19----------------------| + A |----------------------------------------------------------------| + E |----------------------------------------------------------------| + + E |-------17----17-19b(21)--------21b(22)-21-19-17-----------------| + B |-17h19----19----------------17-------------------19b(20)-19-17--| + G |----------------------------------------------------------------| + D |----------------------------------------------------------------| + A |----------------------------------------------------------------| + E |----------------------------------------------------------------| + + E |----------------------------------------------------| + B |----------17----------------------------------------| + G |-19-18-19----19-18-19-18----------------------------| + D |-------------------------21-19-19-17-17-19-21-17-19-| + A |----------------------------------------------------| + E |----------------------------------------------------| + diff --git a/guitar/tabs/Lesson/Phrygian Dominant Scale.tab b/guitar/tabs/Lesson/Phrygian Dominant Scale.tab new file mode 100644 index 0000000..ae23620 --- /dev/null +++ b/guitar/tabs/Lesson/Phrygian Dominant Scale.tab @@ -0,0 +1,31 @@ +Phrygian Dominant Scale + + +Phrygian Dominant is the V (5) of harmonic minor. In other words, its the same notes as harmonic minor, but you start on the fifth degree of it. This scale produces a much different sound than harmonic minor even though they are the same notes. The seventh degree of harmonic minor is not used that often, except for cadences (section endings). In phrygian dominant, the sixth and seventh degrees are used much more (in rock and metal anyway). It gives a very middle-easternEgyptian sound that really sounds nice. If I get started on this scale in a jam, I stick with it for a while because its so fun to play. + +For a prime example of this scale in action, all you fellow Metallica fans can refer to "Wherever I May Roam". Kirk uses it extensively in the solos. Satriani and Vai have also used it a few times. + + +Key = Am + + + + + This is in A phrygian dominant, the V of D harmonic minor, which now + gives you [1 b2 3 4 5 b6 b7] with A as the root. + + ~~~~~~~~~~~~~ + E |-9--6--5----------------------------------------------------------| + B |----------8--6--5-------------------------------------------------| + G |-------------------7--6-------------------------------------------| + D |-------------------------8--7--5----------------------------------| + A |----------------------------------8--7--5--4----------------------| + E |----------------------------------------------6--5----------------| + + E |-----------------------------5-6-9-6h9p65------------------------| + B |-----------------------5-6-8--------------------------------------| + G |-------------------6-7--------------------------------------------| + D |-------------5-7-8------------------------------------------------| + A |-----4-5-7-8------------------------------------------------------| + E |-5-6--------------------------------------------------------------| + diff --git a/guitar/tabs/Lesson/Pitch Axis Theory.prj b/guitar/tabs/Lesson/Pitch Axis Theory.prj new file mode 100644 index 0000000..6edb584 --- /dev/null +++ b/guitar/tabs/Lesson/Pitch Axis Theory.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Pitch Axis Theory.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4) diff --git a/guitar/tabs/Lesson/Pitch Axis Theory.tab b/guitar/tabs/Lesson/Pitch Axis Theory.tab new file mode 100644 index 0000000..c6db6d8 --- /dev/null +++ b/guitar/tabs/Lesson/Pitch Axis Theory.tab @@ -0,0 +1,37 @@ +Pitch Axis Theory + + +I first heard of this through Vai and Satriani. Basically, you play all the modes over a constant root used as a pedal tone. In this example, I use E as the root, and cycle through Ionian, Dorian, Phrygian, Lydian, Mixolydian, Aeolian, Locrian, and back to Ionian, all over E. Of course, this can be applied to any key. Have fun! (For the mp3 file: sorry about the static! Just lower the preamp a little, thanks.) + + + +Key = (Pedal Tone=E) + + + + + + (x8) (x8) (x8) (x8) + E |-------------------------------|----------------------------------| + B |-(t)12p5h9-----(t)10p5h7-------|-(t)10p5h6-----(t)11p5h7----------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + (x8) (x8) (x8) (x8) + E |-------------------------------|----------------------------------| + B |-(t)15p5h9-----(t)12p5h8-------|-(t)11p5h6-----(t)12p5h9----------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + ~~~~~~~~~~~~~~~~~~~ + E |-------------------------------| + B |-(t)12p5-----------------------| + G |-------------------------------| + D |-------------------------------| + A |-------------------------------| + E |-------------------------------| + diff --git a/guitar/tabs/Lesson/Sweep da' arpegios.prj b/guitar/tabs/Lesson/Sweep da' arpegios.prj new file mode 100644 index 0000000..cd28cdf --- /dev/null +++ b/guitar/tabs/Lesson/Sweep da' arpegios.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Sweep da' arpegios.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16) diff --git a/guitar/tabs/Lesson/Sweep da' arpegios.tab b/guitar/tabs/Lesson/Sweep da' arpegios.tab new file mode 100644 index 0000000..6e9c55f --- /dev/null +++ b/guitar/tabs/Lesson/Sweep da' arpegios.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------------7-10-7-------------- +B|----------8--------8------------ +G|--------7------------7---------- +D|------9----------------9-------- +A|-7-10--------------------10-7-7- +E|-------------------------------- + diff --git a/guitar/tabs/Lesson/Sweeping-Tapping exercise.prj b/guitar/tabs/Lesson/Sweeping-Tapping exercise.prj new file mode 100644 index 0000000..77be98a --- /dev/null +++ b/guitar/tabs/Lesson/Sweeping-Tapping exercise.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=E:\work\guitar\technique\Sweeping-Tapping exercise.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500)(32,500)(33,500)(34,500)(35,500)(36,500)(37,500)(38,500)(39,500)(40,500)(41,500)(42,500)(43,500)(44,500)(45,500)(46,500)(47,500)(48,500)(49,500)(50,500)(51,500)(52,500)(53,500)(54,500)(55,500)(56,500)(57,500)(58,500)(59,500)(60,500)(61,500)(62,500)(63,500)(64,500)(65,500)(66,500) diff --git a/guitar/tabs/Lesson/Sweeping-Tapping exercise.tab b/guitar/tabs/Lesson/Sweeping-Tapping exercise.tab new file mode 100644 index 0000000..446a4d3 --- /dev/null +++ b/guitar/tabs/Lesson/Sweeping-Tapping exercise.tab @@ -0,0 +1,27 @@ +Sweeping/Tapping exercise + + +The following excercise uses some very familiar and easy shapes to allow some +scarily fast shredding. I actually think that the first three bars could be very instructional to a begginer since they cover a lot of fretboard in familar shapes (mainly root position triads on the lower 3 strings and 2md inversion triads on the higher strings). The upstroken bits are easiest and can be played up to 16 notes a second or so but to play the whole thing smoothly is much more difficult and requires much slower practice. Don't worry if this takes some learning, it took me a while to learn and now it's easier. The final bar is a mother, I can't get all the notes cleanly yet but it's got the potential for some horrific speed - the tapping necesitates that you put your plectrum down and use your right hand thumb nail for the sweep "picking" - I use the back of my thumb nail at a pretty shallow angle to do this. All the "1 string" work is played with tapping/hammering on/pulling off. If anyone gets it cracked and can record sound files I'd be interested to hear it so send it to u10ajf@abdn.ac.uk and I'll we'll see if we can get it posted! + + +Key = C major + + + E |-1---------------------3-5---------|--------7-8-----------------10--------| + B |---3-----------------5-----6-------|-------8---10-------------12-----------| + G |-----2-------------4---------5-----|-----7-------9----------10------------| + D |-------0---------2-------------3---|----5---------7--------8-------------| + A |---------2-----3----------------5--|--7------------8-----10----------------| + E |-----------3-5--------------------7|8---------------10-12------------------| + + + E + E |-12----------7----------------|7-8-9t12t13t15t13t12-9-8-7---------------| + B |---14-------------8-----------|--------------------------8--------------| + G |-----13-------------9---------|---------------------------9-------------| + D |-------12-------------7-------|----------------------------7------------| + A |---------14-------------8-----|-----------------------------8-----------| + E|-----------15-------------10---|------------------------------10-7-rt3-0-| + + diff --git a/guitar/tabs/Lesson/ThisIsSomething.prj b/guitar/tabs/Lesson/ThisIsSomething.prj new file mode 100644 index 0000000..615c3f7 --- /dev/null +++ b/guitar/tabs/Lesson/ThisIsSomething.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=ThisIsSomething.tab +TYPES=(0,8)(1,8)(2,16)(3,8)(4,8)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16) diff --git a/guitar/tabs/Lesson/ThisIsSomething.tab b/guitar/tabs/Lesson/ThisIsSomething.tab new file mode 100644 index 0000000..93dba68 --- /dev/null +++ b/guitar/tabs/Lesson/ThisIsSomething.tab @@ -0,0 +1,27 @@ +This is something... + + +Just play 'till it bleeds... +You can play it in any fret. It will still sounds great! + + + + +Key = + + + E |--------------------------------|-----------------------------------| + B |---3----3--3------3----3--3-----|---5----5--5-----5------5--5-------| + G |---3----3--3------3----3--3-----|---5----5--5-----5------5--5-------| + D |---3----3--3------2----2--2-----|---5----5--5-----4------4--4-------| + A |---------------3-----3----------|---------------5------5------------| + E |-3----3-------------------------|-5----5----------------------------| + + E |--------------------------------|-----------------------------------| + B |----2-----2--2-----2------2-2---|----2------------------------------| + G |----2-----2--2-----2------2-2---|----2------------------------------| + D |----2-----2--2-----1------1-1---|----1------------------------------| + A |-----------------2-----2--------|----2------------------------------| + E |-2-----2------------------------|-----------------------------------| + + diff --git a/guitar/tabs/Lesson/allchords.tab b/guitar/tabs/Lesson/allchords.tab new file mode 100644 index 0000000..e8f8235 --- /dev/null +++ b/guitar/tabs/Lesson/allchords.tab @@ -0,0 +1,903 @@ +A or Amaj [0 0 2 2 2 0] (Db E A) : major triad +A or Amaj [0 4 x 2 5 0] (Db E A) : major triad +A or Amaj [5 7 7 6 5 5] (Db E A) : major triad +A or Amaj [x 0 2 2 2 0] (Db E A) : major triad +A or Amaj [x 4 7 x x 5] (Db E A) : major triad +A #5 or Aaug [x 0 3 2 2 1] (Db F A) : augmented triad +A #5 or Aaug [x 0 x 2 2 1] (Db F A) : augmented triad +A/Ab [x 0 2 1 2 0] (Db E Ab A) : major triad (altered bass) +A/B [0 0 2 4 2 0] (Db E A B) : major triad (altered bass) +A/B [x 0 7 6 0 0] (Db E A B) : major triad (altered bass) +A/D [x 0 0 2 2 0] (Db D E A) : major triad (altered bass) +A/D [x x 0 2 2 0] (Db D E A) : major triad (altered bass) +A/D [x x 0 6 5 5] (Db D E A) : major triad (altered bass) +A/D [x x 0 9 10 9] (Db D E A) : major triad (altered bass) +A/G [3 x 2 2 2 0] (Db E G A) : major triad (altered bass) +A/G [x 0 2 0 2 0] (Db E G A) : major triad (altered bass) +A/G [x 0 2 2 2 3] (Db E G A) : major triad (altered bass) +A/Gb [0 0 2 2 2 2] (Db E Gb A) : major triad (altered bass) +A/Gb [0 x 4 2 2 0] (Db E Gb A) : major triad (altered bass) +A/Gb [2 x 2 2 2 0] (Db E Gb A) : major triad (altered bass) +A/Gb [x 0 4 2 2 0] (Db E Gb A) : major triad (altered bass) +A/Gb [x x 2 2 2 2] (Db E Gb A) : major triad (altered bass) +A5 or A(no 3rd) [5 7 7 x x 5] (E A): root and 5th (power chord) +A5 or A(no 3rd) [x 0 2 2 x 0] (E A) : root and 5th (power chord) +A5 or A(no 3rd) [5 7 7 x x 0] (E A) : root and 5th (power chord) +A6 [0 0 2 2 2 2] (Db E Gb A) : major triad plus 6th +A6 [0 x 4 2 2 0] (Db E Gb A) : major triad plus 6th +A6 [2 x 2 2 2 0] (Db E Gb A) : major triad plus 6th +A6 [x 0 4 2 2 0] (Db E Gb A) : major triad plus 6th +A6 [x x 2 2 2 2] (Db E Gb A) : major triad plus 6th +A6/7 [0 0 2 0 2 2] (Db E Gb G A) : major triad plus 6th, minor 7th +A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) : sus4 triad plus 6th, minor 7th +A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) : sus4 triad plus 6th, minor 7th +A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) : major triad, minor 7th +A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) : major triad, minor 7th +A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) : major triad, minor 7th +A7(#5) [1 0 3 0 2 1] (Db F G A) : minor 7th, sharp 5th +A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) : major triad, minor 7th, plus 11th +A7sus4 [x 0 2 0 3 0] (D E G A) : sus4 triad, minor 7th +A7sus4 [x 0 2 0 3 3] (D E G A) : sus4 triad, minor 7th +A7sus4 [x 0 2 2 3 3] (D E G A) : sus4 triad, minor 7th +A7sus4 [5 x 0 0 3 0] (D E G A) : sus4 triad, minor 7th +A7sus4 [x 0 0 0 x 0] (D E G A) : sus4 triad, minor 7th +Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) : major triad plus 9th +Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) : major triad plus 9th +Aaug/D [x x 0 2 2 1] (Db D F A) : augmented triad (altered bass) +Aaug/G [1 0 3 0 2 1] (Db F G A) : augmented triad (altered bass) +Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) : major triad +Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) : augmented triad +Ab/A [x x 1 2 1 4] (C Eb Ab A) : major triad (altered bass) +Ab/F [x 8 10 8 9 8] (C Eb F Ab) : major triad (altered bass) +Ab/F [x x 1 1 1 1] (C Eb F Ab) : major triad (altered bass) +Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) : major triad (altered bass) +Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) : major triad (altered bass) +Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab): root and 5th (power chord) +Ab6 [x 8 10 8 9 8] (C Eb F Ab) : major triad plus 6th +Ab6 [x x 1 1 1 1] (C Eb F Ab) : major triad plus 6th +Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) : major triad, minor 7th +Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) : major triad, minor 7th +Abdim/E [0 2 0 1 0 0] (D E Ab B) : diminished triad (altered bass) +Abdim/E [0 2 2 1 3 0] (D E Ab B) : diminished triad (altered bass) +Abdim/E [x 2 0 1 3 0] (D E Ab B) : diminished triad (altered bass) +Abdim/E [x x 0 1 0 0] (D E Ab B) : diminished triad (altered bass) +Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) : diminished triad (altered bass) +Abdim/F [x 2 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Abdim/F [x x 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Abdim/F [x x 3 4 3 4] (D F Ab B) : diminished triad (altered bass) +Abdim7 [x 2 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Abdim7 [x x 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Abdim7 [x x 3 4 3 4] (D F Ab B) : diminished triad, diminished 7th +Abm [x x 6 4 4 4] (Eb Ab B) : minor triad +Abm/D [x x 0 4 4 4] (D Eb Ab B) : minor triad (altered bass) +Abm/E [0 2 1 1 0 0] (Eb E Ab B) : minor triad (altered bass) +Abm/E [0 x 6 4 4 0] (Eb E Ab B) : minor triad (altered bass) +Abm/E [x x 1 1 0 0] (Eb E Ab B) : minor triad (altered bass) +Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) : minor triad (altered bass) +Abm7 [x x 4 4 4 4] (Eb Gb Ab B) : minor triad, minor 7th +Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) : no 3rd but a 4th from a major triad +Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) : sus2 triad (altered bass) +Adim/Ab [x x 1 2 1 4] (C Eb Ab A) : diminished triad (altered bass) +Adim/E [0 3 x 2 4 0] (C Eb E A) : diminished triad (altered bass) +Adim/F [x x 1 2 1 1] (C Eb F A) : diminished triad (altered bass) +Adim/F [x x 3 5 4 5] (C Eb F A) : diminished triad (altered bass) +Adim/G [x x 1 2 1 3] (C Eb G A) : diminished triad (altered bass) +Adim/Gb [x x 1 2 1 2] (C Eb Gb A) : diminished triad (altered bass) +Adim7 [x x 1 2 1 2] (C Eb Gb A) : diminished triad, diminished 7th +Am [x 0 2 2 1 0] (C E A) : minor triad +Am [x 0 7 5 5 5] (C E A) : minor triad +Am [x 3 2 2 1 0] (C E A) : minor triad +Am [8 12 x x x 0] (C E A) : minor triad +Am/B [0 0 7 5 0 0] (C E A B) : minor triad (altered bass) +Am/B [x 3 2 2 0 0] (C E A B) : minor triad (altered bass) +Am/D [x x 0 2 1 0] (C D E A) : minor triad (altered bass) +Am/D [x x 0 5 5 5] (C D E A) : minor triad (altered bass) +Am/Eb [0 3 x 2 4 0] (C Eb E A) : minor triad (altered bass) +Am/F [0 0 3 2 1 0] (C E F A) : minor triad (altered bass) +Am/F [1 3 3 2 1 0] (C E F A) : minor triad (altered bass) +Am/F [1 x 2 2 1 0] (C E F A) : minor triad (altered bass) +Am/F [x x 2 2 1 1] (C E F A) : minor triad (altered bass) +Am/F [x x 3 2 1 0] (C E F A) : minor triad (altered bass) +Am/G [0 0 2 0 1 3] (C E G A) : minor triad (altered bass) +Am/G [x 0 2 0 1 0] (C E G A) : minor triad (altered bass) +Am/G [x 0 2 2 1 3] (C E G A) : minor triad (altered bass) +Am/G [x 0 5 5 5 8] (C E G A) : minor triad (altered bass) +Am/Gb [x 0 2 2 1 2] (C E Gb A) : minor triad (altered bass) +Am/Gb [x x 2 2 1 2] (C E Gb A) : minor triad (altered bass) +Am6 [x 0 2 2 1 2] (C E Gb A) : minor triad plus 6th +Am6 [x x 2 2 1 2] (C E Gb A) : minor triad plus 6th +Am7 [0 0 2 0 1 3] (C E G A) : minor triad, minor 7th +Am7 [x 0 2 0 1 0] (C E G A) : minor triad, minor 7th +Am7 [x 0 2 2 1 3] (C E G A) : minor triad, minor 7th +Am7 [x 0 5 5 5 8] (C E G A) : minor triad, minor 7th +Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) : diminished triad, minor 7th : half-diminished 7th +Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) : minor triad, minor 7th, plus 11th +Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) : major triad, major 7th +Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) : minor triad, major 7th plus 9th +Asus or Asus4 [0 0 2 2 3 0] (D E A) : no 3rd but a 4th from a major triad +Asus or Asus4 [x 0 2 2 3 0] (D E A) : no 3rd but a 4th from a major triad +Asus or Asus4 [5 5 7 7 x 0] (D E A) : no 3rd but a 4th from a major triad +Asus or Asus4 [x 0 0 2 3 0] (D E A) : no 3rd but a 4th from a major triad +Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) : no 3rd but a 2nd from a major triad +Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) : no 3rd but a 2nd from a major triad +Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) : no 3rd but a 2nd from a major triad +Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) : no 3rd but a 2nd from a major triad +Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) : no 3rd but a 2nd from a major triad +Asus2/Ab [x 0 2 1 0 0] (E Ab A B) : sus2 triad (altered bass) +Asus2/C [0 0 7 5 0 0] (C E A B) : sus2 triad (altered bass) +Asus2/C [x 3 2 2 0 0] (C E A B) : sus2 triad (altered bass) +Asus2/D [0 2 0 2 0 0] (D E A B) : sus2 triad (altered bass) +Asus2/D [x 2 0 2 3 0] (D E A B) : sus2 triad (altered bass) +Asus2/Db [0 0 2 4 2 0] (Db E A B) : sus2 triad (altered bass) +Asus2/Db [x 0 7 6 0 0] (Db E A B) : sus2 triad (altered bass) +Asus2/Eb [x 2 1 2 0 0] (Eb E A B) : sus2 triad (altered bass) +Asus2/F [0 0 3 2 0 0] (E F A B) : sus2 triad (altered bass) +Asus2/G [3 x 2 2 0 0] (E G A B) : sus2 triad (altered bass) +Asus2/G [x 0 2 0 0 0] (E G A B) : sus2 triad (altered bass) +Asus2/G [x 0 5 4 5 0] (E G A B) : sus2 triad (altered bass) +Asus2/Gb [x 0 4 4 0 0] (E Gb A B) : sus2 triad (altered bass) +Asus2/Gb [x 2 4 2 5 2] (E Gb A B) : sus2 triad (altered bass) +Asus4/Ab [4 x 0 2 3 0] (D E Ab A) : sus4 triad (altered bass) +Asus4/B [0 2 0 2 0 0] (D E A B) : sus4 triad (altered bass) +Asus4/Bb [0 1 x 2 3 0] (D E A Bb) : sus4 triad (altered bass) +Asus4/C [x x 0 2 1 0] (C D E A) : sus4 triad (altered bass) +Asus4/C [x x 0 5 5 5] (C D E A) : sus4 triad (altered bass) +Asus4/Db [x 0 0 2 2 0] (Db D E A) : sus4 triad (altered bass) +Asus4/Db [x x 0 2 2 0] (Db D E A) : sus4 triad (altered bass) +Asus4/Db [x x 0 6 5 5] (Db D E A) : sus4 triad (altered bass) +Asus4/Db [x x 0 9 10 9] (Db D E A) : sus4 triad (altered bass) +Asus4/F [x x 7 7 6 0] (D E F A) : sus4 triad (altered bass) +Asus4/G [x 0 2 0 3 0] (D E G A) : sus4 triad (altered bass) +Asus4/G [x 0 2 0 3 3] (D E G A) : sus4 triad (altered bass) +Asus4/G [x 0 2 2 3 3] (D E G A) : sus4 triad (altered bass) +Asus4/G [x 0 0 0 x 0] (D E G A) : sus4 triad (altered bass) +Asus4/Gb [0 0 0 2 3 2] (D E Gb A) : sus4 triad (altered bass) +Asus4/Gb [0 0 4 2 3 0] (D E Gb A) : sus4 triad (altered bass) +Asus4/Gb [2 x 0 2 3 0] (D E Gb A) : sus4 triad (altered bass) +Asus4/Gb [x 0 2 2 3 2] (D E Gb A) : sus4 triad (altered bass) +Asus4/Gb [x x 2 2 3 2] (D E Gb A) : sus4 triad (altered bass) +Asus4/Gb [x 5 4 2 3 0] (D E Gb A) : sus4 triad (altered bass) +Asus4/Gb [x 9 7 7 x 0] (D E Gb A) : sus4 triad (altered bass) +B or Bmaj [x 2 4 4 4 2] (Eb Gb B) : major triad +B #5 or Baug [3 2 1 0 0 3] (Eb G B) : augmented triad +B #5 or Baug [3 x 1 0 0 3] (Eb G B) : augmented triad +B/A [2 x 1 2 0 2] (Eb Gb A B) : major triad (altered bass) +B/A [x 0 1 2 0 2] (Eb Gb A B) : major triad (altered bass) +B/A [x 2 1 2 0 2] (Eb Gb A B) : major triad (altered bass) +B/A [x 2 4 2 4 2] (Eb Gb A B) : major triad (altered bass) +B/Ab [x x 4 4 4 4] (Eb Gb Ab B) : major triad (altered bass) +B/E [x 2 2 4 4 2] (Eb E Gb B) : major triad (altered bass) +B/E [x x 4 4 4 0] (Eb E Gb B) : major triad (altered bass) +B5 or B(no 3rd) [7 9 9 x x 2] (Gb B): root and 5th (power chord) +B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B): root and 5th (power chord) +B6 [x x 4 4 4 4] (Eb Gb Ab B) : major triad plus 6th +B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) : major triad, minor 7th +B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) : major triad, minor 7th +B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) : major triad, minor 7th +B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) : major triad, minor 7th +B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) : major triad, minor 7th, plus 11th +B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) : major triad, minor 7th, plus 11th +B7sus4 [x 0 4 4 0 0] (E Gb A B) : sus4 triad, minor 7th +B7sus4 [x 2 4 2 5 2] (E Gb A B) : sus4 triad, minor 7th +Baug/E [3 x 1 0 0 0] (Eb E G B) : augmented triad (altered bass) +Baug/E [x x 1 0 0 0] (Eb E G B) : augmented triad (altered bass) +Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) : major triad +Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) : major triad +Bb or Bbmaj [x x 0 3 3 1] (D F Bb) : major triad +Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) : augmented triad +Bb b5 [x x 0 3 x 0] (D E Bb) : flat 5th +Bb/A [1 1 3 2 3 1] (D F A Bb) : major triad (altered bass) +Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) : major triad (altered bass) +Bb/Ab [x x 3 3 3 4] (D F Ab Bb) : major triad (altered bass) +Bb/Db [x x 0 6 6 6] (Db D F Bb) : major triad (altered bass) +Bb/E [x 1 3 3 3 0] (D E F Bb) : major triad (altered bass) +Bb/G [3 5 3 3 3 3] (D F G Bb) : major triad (altered bass) +Bb/G [x x 3 3 3 3] (D F G Bb) : major triad (altered bass) +Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb): root and 5th (power chord) +Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb): root and 5th (power chord) +Bb6 [3 5 3 3 3 3] (D F G Bb) : major triad plus 6th +Bb6 [x x 3 3 3 3] (D F G Bb) : major triad plus 6th +Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) : major triad plus 6th and 9th +Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) : major triad, minor 7th +Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) : major triad, minor 7th +Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) : sus4 triad, minor 7th +Bbadd#11 [x 1 3 3 3 0] (D E F Bb) : major triad, augmented 11th +Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) : augmented triad (altered bass) +Bbdim/C [x 3 x 3 2 0] (C Db E Bb) : diminished triad (altered bass) +Bbdim/D [x x 0 3 2 0] (Db D E Bb) : diminished triad (altered bass) +Bbdim/G [x 1 2 0 2 0] (Db E G Bb) : diminished triad (altered bass) +Bbdim/G [x x 2 3 2 3] (Db E G Bb) : diminished triad (altered bass) +Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) : diminished triad (altered bass) +Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) : diminished triad (altered bass) +Bbdim7 [x 1 2 0 2 0] (Db E G Bb) : diminished triad, diminished 7th +Bbdim7 [x x 2 3 2 3] (Db E G Bb) : diminished triad, diminished 7th +Bbm [1 1 3 3 2 1] (Db F Bb) : minor triad +Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) : minor triad (altered bass) +Bbm/D [x x 0 6 6 6] (Db D F Bb) : minor triad (altered bass) +Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) : minor triad (altered bass) +Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) : minor triad, minor 7th +Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) : major triad, major 7th +Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) : major triad, major 7th plus 9th +Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) : no 3rd but a 2nd from a major triad +Bbsus2/G [x 3 5 3 6 3] (C F G Bb) : sus2 triad (altered bass) +Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) : sus4 triad (altered bass) +Bdim/A [1 2 3 2 3 1] (D F A B) : diminished triad (altered bass) +Bdim/A [x 2 0 2 0 1] (D F A B) : diminished triad (altered bass) +Bdim/A [x x 0 2 0 1] (D F A B) : diminished triad (altered bass) +Bdim/Ab [x 2 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Bdim/Ab [x x 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Bdim/Ab [x x 3 4 3 4] (D F Ab B) : diminished triad (altered bass) +Bdim/G [1 x 0 0 0 3] (D F G B) : diminished triad (altered bass) +Bdim/G [3 2 0 0 0 1] (D F G B) : diminished triad (altered bass) +Bdim/G [x x 0 0 0 1] (D F G B) : diminished triad (altered bass) +Bdim7 [x 2 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Bdim7 [x x 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Bdim7 [x x 3 4 3 4] (D F Ab B) : diminished triad, diminished 7th +Bm [2 2 4 4 3 2] (D Gb B) : minor triad +Bm [x 2 4 4 3 2] (D Gb B) : minor triad +Bm [x x 0 4 3 2] (D Gb B) : minor triad +Bm/A [x 0 4 4 3 2] (D Gb A B) : minor triad (altered bass) +Bm/A [x 2 0 2 0 2] (D Gb A B) : minor triad (altered bass) +Bm/A [x 2 0 2 3 2] (D Gb A B) : minor triad (altered bass) +Bm/A [x 2 4 2 3 2] (D Gb A B) : minor triad (altered bass) +Bm/A [x x 0 2 0 2] (D Gb A B) : minor triad (altered bass) +Bm/G [2 2 0 0 0 3] (D Gb G B) : minor triad (altered bass) +Bm/G [2 2 0 0 3 3] (D Gb G B) : minor triad (altered bass) +Bm/G [3 2 0 0 0 2] (D Gb G B) : minor triad (altered bass) +Bm/G [x x 4 4 3 3] (D Gb G B) : minor triad (altered bass) +Bm7 [x 0 4 4 3 2] (D Gb A B) : minor triad, minor 7th +Bm7 [x 2 0 2 0 2] (D Gb A B) : minor triad, minor 7th +Bm7 [x 2 0 2 3 2] (D Gb A B) : minor triad, minor 7th +Bm7 [x 2 4 2 3 2] (D Gb A B) : minor triad, minor 7th +Bm7 [x x 0 2 0 2] (D Gb A B) : minor triad, minor 7th +Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) : diminished triad, minor 7th : half-diminished 7th +Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) : diminished triad, minor 7th : half-diminished 7th +Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) : diminished triad, minor 7th : half-diminished 7th +Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) : minor triad, minor 7th, plus 11th +Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) : minor triad, minor 7th, plus 11th +Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) : major triad, major 7th, augmented 11th +Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) : no 3rd but a 4th from a major triad +Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) : no 3rd but a 4th from a major triad +Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B): no 3rd but a 2nd from a major triad +Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) : no 3rd but a 2nd from a major triad +Bsus2/E [x 4 4 4 x 0] (Db E Gb B) : sus2 triad (altered bass) +Bsus4/A [x 0 4 4 0 0] (E Gb A B) : sus4 triad (altered bass) +Bsus4/A [x 2 4 2 5 2] (E Gb A B) : sus4 triad (altered bass) +Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) : sus4 triad (altered bass) +Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) : sus4 triad (altered bass) +Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) : sus4 triad (altered bass) +Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) : sus4 triad (altered bass) +Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) : sus4 triad (altered bass) +Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) : sus4 triad (altered bass) +Bsus4/G [0 2 2 0 0 2] (E Gb G B) : sus4 triad (altered bass) +Bsus4/G [0 2 4 0 0 0] (E Gb G B) : sus4 triad (altered bass) +Bsus4/G [0 x 4 0 0 0] (E Gb G B) : sus4 triad (altered bass) +Bsus4/G [2 2 2 0 0 0] (E Gb G B) : sus4 triad (altered bass) +C or Cmaj [0 3 2 0 1 0] (C E G) : major triad +C or Cmaj [0 3 5 5 5 3] (C E G) : major triad +C or Cmaj [3 3 2 0 1 0] (C E G) : major triad +C or Cmaj [3 x 2 0 1 0] (C E G) : major triad +C or Cmaj [x 3 2 0 1 0] (C E G) : major triad +C or Cmaj [x 3 5 5 5 0] (C E G) : major triad +C #5 or Caug [x 3 2 1 1 0] (C E Ab) : augmented triad +C b5 [x x 4 5 x 0] (C E Gb) : flat 5th +C/A [0 0 2 0 1 3] (C E G A) : major triad (altered bass) +C/A [x 0 2 0 1 0] (C E G A) : major triad (altered bass) +C/A [x 0 2 2 1 3] (C E G A) : major triad (altered bass) +C/A [x 0 5 5 5 8] (C E G A) : major triad (altered bass) +C/B [0 3 2 0 0 0] (C E G B) : major triad (altered bass) +C/B [x 2 2 0 1 0] (C E G B) : major triad (altered bass) +C/B [x 3 5 4 5 3] (C E G B) : major triad (altered bass) +C/Bb [x 3 5 3 5 3] (C E G Bb) : major triad (altered bass) +C/D [3 x 0 0 1 0] (C D E G) : major triad (altered bass) +C/D [x 3 0 0 1 0] (C D E G) : major triad (altered bass) +C/D [x 3 2 0 3 0] (C D E G) : major triad (altered bass) +C/D [x 3 2 0 3 3] (C D E G) : major triad (altered bass) +C/D [x x 0 0 1 0] (C D E G) : major triad (altered bass) +C/D [x x 0 5 5 3] (C D E G) : major triad (altered bass) +C/D [x 10 12 12 13 0] (C D E G) : major triad (altered bass) +C/D [x 5 5 5 x 0] (C D E G) : major triad (altered bass) +C/F [x 3 3 0 1 0] (C E F G) : major triad (altered bass) +C/F [x x 3 0 1 0] (C E F G) : major triad (altered bass) +C5 or C(no 3rd) [x 3 5 5 x 3] (C G): root and 5th (power chord) +C6 [0 0 2 0 1 3] (C E G A) : major triad plus 6th +C6 [x 0 2 0 1 0] (C E G A) : major triad plus 6th +C6 [x 0 2 2 1 3] (C E G A) : major triad plus 6th +C6 [x 0 5 5 5 8] (C E G A) : major triad plus 6th +C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) : major triad plus 6th and 9th +C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) : major triad, minor 7th +C7sus4 [x 3 5 3 6 3] (C F G Bb) : sus4 triad, minor 7th +C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) : diminished 5th, minor 7th, plus 9th +Cadd9 or C2 [3 x 0 0 1 0] (C D E G) : major triad plus 9th +Cadd9 or C2 [x 3 0 0 1 0] (C D E G) : major triad plus 9th +Cadd9 or C2 [x 3 2 0 3 0] (C D E G) : major triad plus 9th +Cadd9 or C2 [x 3 2 0 3 3] (C D E G) : major triad plus 9th +Cadd9 or C2 [x x 0 0 1 0] (C D E G) : major triad plus 9th +Cadd9 or C2 [x x 0 5 5 3] (C D E G) : major triad plus 9th +Cadd9 or C2 [x 10 12 12 13 0] (C D E G) : major triad plus 9th +Cadd9 or C2 [x 3 2 0 3 0] (C D E G) : major triad plus 9th +Cadd9 or C2 [x 5 5 5 x 0] (C D E G) : major triad plus 9th +Cdim/A [x x 1 2 1 2] (C Eb Gb A) : diminished triad (altered bass) +Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) : diminished triad (altered bass) +Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) : diminished triad (altered bass) +Cdim/D [x 5 4 5 4 2] (C D Eb Gb): diminished triad (altered bass) +Cdim7 [x x 1 2 1 2] (C Eb Gb A) : diminished triad, diminished 7th +Cm [x 3 5 5 4 3] (C Eb G) : minor triad +Cm [x x 5 5 4 3] (C Eb G) : minor triad +Cm/A [x x 1 2 1 3] (C Eb G A) : minor triad (altered bass) +Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) : minor triad (altered bass) +Cm6 [x x 1 2 1 3] (C Eb G A) : minor triad plus 6th +Cm7 [x 3 5 3 4 3] (C Eb G Bb) : minor triad, minor 7th +Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) : major triad, major 7th +Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) : major triad, major 7th +Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) : major triad, major 7th +Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) : major triad, major 7th plus 9th +Csus or Csus4 [x 3 3 0 1 1] (C F G) : no 3rd but a 4th from a major triad +Csus or Csus4 [x x 3 0 1 1] (C F G) : no 3rd but a 4th from a major triad +Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G): no 3rd but a 2nd from a major triad +Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G): no 3rd but a 2nd from a major triad +Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) : no 3rd but a 2nd from a major triad +Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) : no 3rd but a 2nd from a major triad +Csus2/A [x 5 7 5 8 3] (C D G A): sus2 triad (altered bass) +Csus2/A [x x 0 2 1 3] (C D G A) : sus2 triad (altered bass) +Csus2/B [3 3 0 0 0 3] (C D G B) : sus2 triad (altered bass) +Csus2/B [x 3 0 0 0 3] (C D G B) : sus2 triad (altered bass) +Csus2/E [3 x 0 0 1 0] (C D E G) : sus2 triad (altered bass) +Csus2/E [x 3 0 0 1 0] (C D E G) : sus2 triad (altered bass) +Csus2/E [x 3 2 0 3 0] (C D E G) : sus2 triad (altered bass) +Csus2/E [x 3 2 0 3 3] (C D E G) : sus2 triad (altered bass) +Csus2/E [x x 0 0 1 0] (C D E G) : sus2 triad (altered bass) +Csus2/E [x x 0 5 5 3] (C D E G) : sus2 triad (altered bass) +Csus2/E [x 10 12 12 13 0] (C D E G) : sus2 triad (altered bass) +Csus2/E [x 5 5 5 x 0] (C D E G) : sus2 triad (altered bass) +Csus2/F [3 3 0 0 1 1] (C D F G) : sus2 triad (altered bass) +Csus4/A [3 x 3 2 1 1] (C F G A) : sus4 triad (altered bass) +Csus4/A [x x 3 2 1 3] (C F G A) : sus4 triad (altered bass) +Csus4/B [x 3 3 0 0 3] (C F G B) : sus4 triad (altered bass) +Csus4/Bb [x 3 5 3 6 3] (C F G Bb) : sus4 triad (altered bass) +Csus4/D [3 3 0 0 1 1] (C D F G) : sus4 triad (altered bass) +Csus4/E [x 3 3 0 1 0] (C E F G) : sus4 triad (altered bass) +Csus4/E [x x 3 0 1 0] (C E F G) : sus4 triad (altered bass) +D or Dmaj [x 5 4 2 3 2] (D Gb A): major triad +D or Dmaj [x 9 7 7 x 2] (D Gb A): major triad +D or Dmaj [2 0 0 2 3 2] (D Gb A) : major triad +D or Dmaj [x 0 0 2 3 2] (D Gb A) : major triad +D or Dmaj [x 0 4 2 3 2] (D Gb A) : major triad +D or Dmaj [x x 0 2 3 2] (D Gb A) : major triad +D or Dmaj [x x 0 7 7 5] (D Gb A) : major triad +D #5 or Daug [x x 0 3 3 2] (D Gb Bb) : augmented triad +D/B [x 0 4 4 3 2] (D Gb A B) : major triad (altered bass) +D/B [x 2 0 2 0 2] (D Gb A B) : major triad (altered bass) +D/B [x 2 0 2 3 2] (D Gb A B) : major triad (altered bass) +D/B [x 2 4 2 3 2] (D Gb A B) : major triad (altered bass) +D/B [x x 0 2 0 2] (D Gb A B) : major triad (altered bass) +D/C [x 5 7 5 7 2] (C D Gb A): major triad (altered bass) +D/C [x 0 0 2 1 2] (C D Gb A) : major triad (altered bass) +D/C [x 3 x 2 3 2] (C D Gb A) : major triad (altered bass) +D/C [x 5 7 5 7 5] (C D Gb A) : major triad (altered bass) +D/Db [x x 0 14 14 14] (Db D Gb A) : major triad (altered bass) +D/Db [x x 0 2 2 2] (Db D Gb A) : major triad (altered bass) +D/E [0 0 0 2 3 2] (D E Gb A) : major triad (altered bass) +D/E [0 0 4 2 3 0] (D E Gb A) : major triad (altered bass) +D/E [2 x 0 2 3 0] (D E Gb A) : major triad (altered bass) +D/E [x 0 2 2 3 2] (D E Gb A) : major triad (altered bass) +D/E [x x 2 2 3 2] (D E Gb A) : major triad (altered bass) +D/E [x 5 4 2 3 0] (D E Gb A) : major triad (altered bass) +D/E [x 9 7 7 x 0] (D E Gb A) : major triad (altered bass) +D/G [5 x 4 0 3 5] (D Gb G A): major triad (altered bass) +D/G [3 x 0 2 3 2] (D Gb G A) : major triad (altered bass) +D5 or D(no 3rd) [5 5 7 7 x 5] (D A): root and 5th (power chord) +D5 or D(no 3rd) [x 0 0 2 3 5] (D A): root and 5th (power chord) +D6 [x 0 4 4 3 2] (D Gb A B) : major triad plus 6th +D6 [x 2 0 2 0 2] (D Gb A B) : major triad plus 6th +D6 [x 2 0 2 3 2] (D Gb A B) : major triad plus 6th +D6 [x 2 4 2 3 2] (D Gb A B) : major triad plus 6th +D6 [x x 0 2 0 2] (D Gb A B) : major triad plus 6th +D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) : major triad plus 6th and 9th +D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) : major triad plus 6th and 9th +D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A): major triad, minor 7th +D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) : major triad, minor 7th +D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) : major triad, minor 7th +D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) : major triad, minor 7th +D7sus4 [x 5 7 5 8 3] (C D G A): sus4 triad, minor 7th +D7sus4 [x x 0 2 1 3] (C D G A) : sus4 triad, minor 7th +D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) : major triad, minor 7th plus 9th +D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) : major triad, minor 7th plus 9th +D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) : major triad, minor 7th plus 9th +D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) : augmented 5th, minor 7th plus 9th +Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) : major triad plus 9th +Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) : major triad plus 9th +Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) : major triad plus 9th +Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) : major triad plus 9th +Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) : major triad plus 9th +Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) : major triad plus 9th +Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) : major triad plus 9th +Daug/E [2 x 4 3 3 0] (D E Gb Bb) : augmented triad (altered bass) +Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) : major triad +Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) : major triad +Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) : major triad +Db or Dbmaj [x x 3 1 2 1] (Db F Ab) : major triad +Db or Dbmaj [x x 6 6 6 4] (Db F Ab) : major triad +Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) : augmented triad +Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) : augmented triad +Db b5 [x x 3 0 2 1] (Db F G) : flat 5th +Db/B [x 4 3 4 0 4] (Db F Ab B) : major triad (altered bass) +Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) : major triad (altered bass) +Db/C [x 3 3 1 2 1] (C Db F Ab) : major triad (altered bass) +Db/C [x 4 6 5 6 4] (C Db F Ab) : major triad (altered bass) +Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab): root and 5th (power chord) +Db6 [x 1 3 1 2 1] (Db F Ab Bb) : major triad plus 6th +Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) : major triad, minor 7th +Dbaug/D [x x 0 2 2 1] (Db D F A) : augmented triad (altered bass) +Dbaug/G [1 0 3 0 2 1] (Db F G A) : augmented triad (altered bass) +Dbdim/A [3 x 2 2 2 0] (Db E G A) : diminished triad (altered bass) +Dbdim/A [x 0 2 0 2 0] (Db E G A) : diminished triad (altered bass) +Dbdim/A [x 0 2 2 2 3] (Db E G A) : diminished triad (altered bass) +Dbdim/B [0 2 2 0 2 0] (Db E G B) : diminished triad (altered bass) +Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) : diminished triad (altered bass) +Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) : diminished triad (altered bass) +Dbdim/D [3 x 0 0 2 0] (Db D E G) : diminished triad (altered bass) +Dbdim/D [x x 0 0 2 0] (Db D E G) : diminished triad (altered bass) +Dbdim7 [x 1 2 0 2 0] (Db E G Bb) : diminished triad, diminished 7th +Dbdim7 [x x 2 3 2 3] (Db E G Bb) : diminished triad, diminished 7th +Dbm [x 4 6 6 5 4] (Db E Ab) : minor triad +Dbm [x x 2 1 2 0] (Db E Ab) : minor triad +Dbm [x 4 6 6 x 0] (Db E Ab) : minor triad +Dbm/A [x 0 2 1 2 0] (Db E Ab A) : minor triad (altered bass) +Dbm/B [0 2 2 1 2 0] (Db E Ab B) : minor triad (altered bass) +Dbm/B [x 4 6 4 5 4] (Db E Ab B) : minor triad (altered bass) +Dbm7 [0 2 2 1 2 0] (Db E Ab B) : minor triad, minor 7th +Dbm7 [x 4 6 4 5 4] (Db E Ab B) : minor triad, minor 7th +Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) : diminished triad, minor 7th : half-diminished 7th +Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) : major triad, major 7th +Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) : major triad, major 7th +Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) : no 3rd but a 2nd from a major triad +Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) : sus4 triad (altered bass) +Ddim/B [x 2 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Ddim/B [x x 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Ddim/B [x x 3 4 3 4] (D F Ab B) : diminished triad (altered bass) +Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) : diminished triad (altered bass) +Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) : diminished triad (altered bass) +Ddim/C [x x 0 1 1 1] (C D F Ab) : diminished triad (altered bass) +Ddim7 [x 2 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Ddim7 [x x 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Ddim7 [x x 3 4 3 4] (D F Ab B) : diminished triad, diminished 7th +Dm [x 0 0 2 3 1] (D F A) : minor triad +Dm/B [1 2 3 2 3 1] (D F A B) : minor triad (altered bass) +Dm/B [x 2 0 2 0 1] (D F A B) : minor triad (altered bass) +Dm/B [x x 0 2 0 1] (D F A B) : minor triad (altered bass) +Dm/Bb [1 1 3 2 3 1] (D F A Bb) : minor triad (altered bass) +Dm/C [x 5 7 5 6 5] (C D F A) : minor triad (altered bass) +Dm/C [x x 0 2 1 1] (C D F A) : minor triad (altered bass) +Dm/C [x x 0 5 6 5] (C D F A) : minor triad (altered bass) +Dm/Db [x x 0 2 2 1] (Db D F A) : minor triad (altered bass) +Dm/E [x x 7 7 6 0] (D E F A) : minor triad (altered bass) +Dm6 [1 2 3 2 3 1] (D F A B) : minor triad plus 6th +Dm6 [x 2 0 2 0 1] (D F A B) : minor triad plus 6th +Dm6 [x x 0 2 0 1] (D F A B) : minor triad plus 6th +Dm7 [x 5 7 5 6 5] (C D F A) : minor triad, minor 7th +Dm7 [x x 0 2 1 1] (C D F A) : minor triad, minor 7th +Dm7 [x x 0 5 6 5] (C D F A) : minor triad, minor 7th +Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) : diminished triad, minor 7th : half-diminished 7th +Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) : minor triad, minor 7th, plus 11th +Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) : major triad, major 7th +Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) : major triad, major 7th +Dmin/maj7 [x x 0 2 2 1] (Db D F A) : minor triad, major 7th +Dsus or Dsus4 [5 x 0 0 3 5] (D G A): no 3rd but a 4th from a major triad +Dsus or Dsus4 [3 0 0 0 3 3] (D G A) : no 3rd but a 4th from a major triad +Dsus or Dsus4 [x 0 0 0 3 3] (D G A) : no 3rd but a 4th from a major triad +Dsus or Dsus4 [x x 0 2 3 3] (D G A) : no 3rd but a 4th from a major triad +Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A): no 3rd but a 2nd from a major triad +Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A): no 3rd but a 2nd from a major triad +Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) : no 3rd but a 2nd from a major triad +Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) : no 3rd but a 2nd from a major triad +Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) : no 3rd but a 2nd from a major triad +Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) : sus2 triad (altered bass) +Dsus2/B [0 2 0 2 0 0] (D E A B) : sus2 triad (altered bass) +Dsus2/B [x 2 0 2 3 0] (D E A B) : sus2 triad (altered bass) +Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) : sus2 triad (altered bass) +Dsus2/C [x x 0 2 1 0] (C D E A) : sus2 triad (altered bass) +Dsus2/C [x x 0 5 5 5] (C D E A) : sus2 triad (altered bass) +Dsus2/Db [x 0 0 2 2 0] (Db D E A) : sus2 triad (altered bass) +Dsus2/Db [x x 0 2 2 0] (Db D E A) : sus2 triad (altered bass) +Dsus2/Db [x x 0 6 5 5] (Db D E A) : sus2 triad (altered bass) +Dsus2/Db [x x 0 9 10 9] (Db D E A) : sus2 triad (altered bass) +Dsus2/F [x x 7 7 6 0] (D E F A) : sus2 triad (altered bass) +Dsus2/G [x 0 2 0 3 0] (D E G A) : sus2 triad (altered bass) +Dsus2/G [x 0 2 0 3 3] (D E G A) : sus2 triad (altered bass) +Dsus2/G [x 0 2 2 3 3] (D E G A) : sus2 triad (altered bass) +Dsus2/G [5 x 0 0 3 0] (D E G A) : sus2 triad (altered bass) +Dsus2/G [x 0 0 0 x 0] (D E G A) : sus2 triad (altered bass) +Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) : sus2 triad (altered bass) +Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) : sus2 triad (altered bass) +Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) : sus2 triad (altered bass) +Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) : sus2 triad (altered bass) +Dsus2/Gb [x x 2 2 3 2] (D E Gb A) : sus2 triad (altered bass) +Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) : sus2 triad (altered bass) +Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) : sus2 triad (altered bass) +Dsus4/B [3 0 0 0 0 3] (D G A B) : sus4 triad (altered bass) +Dsus4/B [3 2 0 2 0 3] (D G A B) : sus4 triad (altered bass) +Dsus4/C [x 5 7 5 8 3] (C D G A): sus4 triad (altered bass) +Dsus4/C [x x 0 2 1 3] (C D G A) : sus4 triad (altered bass) +Dsus4/E [x 0 2 0 3 0] (D E G A) : sus4 triad (altered bass) +Dsus4/E [x 0 2 0 3 3] (D E G A) : sus4 triad (altered bass) +Dsus4/E [x 0 2 2 3 3] (D E G A) : sus4 triad (altered bass) +Dsus4/E [5 x 0 0 3 0] (D E G A) : sus4 triad (altered bass) +Dsus4/E [x 0 0 0 x 0] (D E G A) : sus4 triad (altered bass) +Dsus4/Gb [5 x 4 0 3 5] (D Gb G A): sus4 triad (altered bass) +Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) : sus4 triad (altered bass) +E or Emaj [0 2 2 1 0 0] (E Ab B) : major triad +E or Emaj [x 7 6 4 5 0] (E Ab B) : major triad +E #5 or Eaug [x 3 2 1 1 0] (C E Ab) : augmented triad +E/A [x 0 2 1 0 0] (E Ab A B) : major triad (altered bass) +E/D [0 2 0 1 0 0] (D E Ab B) : major triad (altered bass) +E/D [0 2 2 1 3 0] (D E Ab B) : major triad (altered bass) +E/D [x 2 0 1 3 0] (D E Ab B) : major triad (altered bass) +E/D [x x 0 1 0 0] (D E Ab B) : major triad (altered bass) +E/Db [0 2 2 1 2 0] (Db E Ab B) : major triad (altered bass) +E/Db [x 4 6 4 5 4] (Db E Ab B) : major triad (altered bass) +E/Eb [0 2 1 1 0 0] (Eb E Ab B) : major triad (altered bass) +E/Eb [0 x 6 4 4 0] (Eb E Ab B) : major triad (altered bass) +E/Eb [x x 1 1 0 0] (Eb E Ab B) : major triad (altered bass) +E/Gb [0 2 2 1 0 2] (E Gb Ab B) : major triad (altered bass) +E/Gb [0 x 4 1 0 0] (E Gb Ab B) : major triad (altered bass) +E/Gb [2 2 2 1 0 0] (E Gb Ab B) : major triad (altered bass) +E11/b9 [0 0 3 4 3 4] (D E F Ab A B) : major triad, minor 7th, flat 9th, plus 11th +E5 or E(no 3rd) [0 2 x x x 0] (E B) : root and 5th (power chord) +E5 or E(no 3rd) [x 7 9 9 x 0] (E B) : root and 5th (power chord) +E6 [0 2 2 1 2 0] (Db E Ab B) : major triad plus 6th +E6 [x 4 6 4 5 4] (Db E Ab B) : major triad plus 6th +E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) : major triad, minor 7th +E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) : major triad, minor 7th +E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) : major triad, minor 7th +E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) : major triad, minor 7th +E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) : major triad, minor 7th, plus 11th +E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) : diminished 5th, minor 7th, flat 9th +E7sus4 [0 2 0 2 0 0] (D E A B) : sus4 triad, minor 7th +E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) : major triad, minor 7th plus 9th +E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) : major triad, minor 7th plus 9th +Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) : major triad plus 9th +Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) : major triad plus 9th +Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) : major triad plus 9th +Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) : major triad +Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) : major triad +Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) : major triad +Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) : augmented triad +Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) : augmented triad +Eb/C [x 3 5 3 4 3] (C Eb G Bb) : major triad (altered bass) +Eb/D [x 6 8 7 8 6] (D Eb G Bb) : major triad (altered bass) +Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) : major triad (altered bass) +Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) : major triad (altered bass) +Eb/Db [x x 1 3 2 3] (Db Eb G Bb) : major triad (altered bass) +Eb/E [x x 5 3 4 0] (Eb E G Bb) : major triad (altered bass) +Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb): root and 5th (power chord) +Eb6 [x 3 5 3 4 3] (C Eb G Bb) : major triad plus 6th +Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) : major triad, minor 7th +Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) : major triad, minor 7th +Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) : major triad, minor 7th +Ebaug/E [3 x 1 0 0 0] (Eb E G B) : augmented triad (altered bass) +Ebaug/E [x x 1 0 0 0] (Eb E G B) : augmented triad (altered bass) +Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) : diminished triad (altered bass) +Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) : diminished triad (altered bass) +Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) : diminished triad (altered bass) +Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) : diminished triad (altered bass) +Ebdim/C [x x 1 2 1 2] (C Eb Gb A) : diminished triad (altered bass) +Ebdim7 [x x 1 2 1 2] (C Eb Gb A) : diminished triad, diminished 7th +Ebm [x x 4 3 4 2] (Eb Gb Bb) : minor triad +Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) : minor triad (altered bass) +Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) : minor triad, minor 7th +Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) : major triad, major 7th +Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) : sus2 triad (altered bass) +Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) : sus4 triad (altered bass) +Edim/C [x 3 5 3 5 3] (C E G Bb) : diminished triad (altered bass) +Edim/D [3 x 0 3 3 0] (D E G Bb) : diminished triad (altered bass) +Edim/Db [x 1 2 0 2 0] (Db E G Bb) : diminished triad (altered bass) +Edim/Db [x x 2 3 2 3] (Db E G Bb) : diminished triad (altered bass) +Edim/Eb [x x 5 3 4 0] (Eb E G Bb) : diminished triad (altered bass) +Edim7 [x 1 2 0 2 0] (Db E G Bb) : diminished triad, diminished 7th +Edim7 [x x 2 3 2 3] (Db E G Bb) : diminished triad, diminished 7th +Em [0 2 2 0 0 0] (E G B) : minor triad +Em [3 x 2 0 0 0] (E G B) : minor triad +Em [x 2 5 x x 0] (E G B) : minor triad +Em/A [3 x 2 2 0 0] (E G A B) : minor triad (altered bass) +Em/A [x 0 2 0 0 0] (E G A B) : minor triad (altered bass) +Em/A [x 0 5 4 5 0] (E G A B) : minor triad (altered bass) +Em/C [0 3 2 0 0 0] (C E G B) : minor triad (altered bass) +Em/C [x 2 2 0 1 0] (C E G B) : minor triad (altered bass) +Em/C [x 3 5 4 5 3] (C E G B) : minor triad (altered bass) +Em/D [0 2 0 0 0 0] (D E G B) : minor triad (altered bass) +Em/D [0 2 0 0 3 0] (D E G B) : minor triad (altered bass) +Em/D [0 2 2 0 3 0] (D E G B) : minor triad (altered bass) +Em/D [0 2 2 0 3 3] (D E G B) : minor triad (altered bass) +Em/D [x x 0 12 12 12] (D E G B) : minor triad (altered bass) +Em/D [x x 0 9 8 7] (D E G B) : minor triad (altered bass) +Em/D [x x 2 4 3 3] (D E G B) : minor triad (altered bass) +Em/D [0 x 0 0 0 0] (D E G B) : minor triad (altered bass) +Em/D [x 10 12 12 12 0] (D E G B) : minor triad (altered bass) +Em/Db [0 2 2 0 2 0] (Db E G B) : minor triad (altered bass) +Em/Eb [3 x 1 0 0 0] (Eb E G B) : minor triad (altered bass) +Em/Eb [x x 1 0 0 0] (Eb E G B) : minor triad (altered bass) +Em/Gb [0 2 2 0 0 2] (E Gb G B) : minor triad (altered bass) +Em/Gb [0 2 4 0 0 0] (E Gb G B) : minor triad (altered bass) +Em/Gb [0 x 4 0 0 0] (E Gb G B) : minor triad (altered bass) +Em/Gb [2 2 2 0 0 0] (E Gb G B) : minor triad (altered bass) +Em6 [0 2 2 0 2 0] (Db E G B) : minor triad plus 6th +Em7 [0 2 0 0 0 0] (D E G B) : minor triad, minor 7th +Em7 [0 2 0 0 3 0] (D E G B) : minor triad, minor 7th +Em7 [0 2 2 0 3 0] (D E G B) : minor triad, minor 7th +Em7 [0 2 2 0 3 3] (D E G B) : minor triad, minor 7th +Em7 [x x 0 0 0 0] (D E G B) : minor triad, minor 7th +Em7 [x x 0 12 12 12] (D E G B) : minor triad, minor 7th +Em7 [x x 0 9 8 7] (D E G B) : minor triad, minor 7th +Em7 [x x 2 4 3 3] (D E G B) : minor triad, minor 7th +Em7 [0 x 0 0 0 0] (D E G B) : minor triad, minor 7th +Em7 [x 10 12 12 12 0] (D E G B) : minor triad, minor 7th +Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) : diminished triad, minor 7th : half-diminished 7th +Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) : minor triad, minor 7th, plus 11th +Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) : minor triad, minor 7th, plus 11th +Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) : minor triad, minor 7th, plus 11th +Em9 [0 2 0 0 0 2] (D E Gb G B) : minor triad, minor 7th plus 9th +Em9 [0 2 0 0 3 2] (D E Gb G B) : minor triad, minor 7th plus 9th +Em9 [2 2 0 0 0 0] (D E Gb G B) : minor triad, minor 7th plus 9th +Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) : major triad, major 7th +Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) : major triad, major 7th +Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) : major triad, major 7th +Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) : major triad, major 7th plus 9th +Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) : major triad, major 7th plus 9th +Emin/maj7 [3 x 1 0 0 0] (Eb E G B) : minor triad, major 7th +Emin/maj7 [x x 1 0 0 0] (Eb E G B) : minor triad, major 7th +Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) : minor triad, major 7th plus 9th +Esus or Esus4 [0 0 2 2 0 0] (E A B) : no 3rd but a 4th from a major triad +Esus or Esus4 [0 0 2 4 0 0] (E A B) : no 3rd but a 4th from a major triad +Esus or Esus4 [0 2 2 2 0 0] (E A B) : no 3rd but a 4th from a major triad +Esus or Esus4 [x 0 2 2 0 0] (E A B) : no 3rd but a 4th from a major triad +Esus or Esus4 [x x 2 2 0 0] (E A B) : no 3rd but a 4th from a major triad +Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B): no 3rd but a 2nd from a major triad +Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B): no 3rd but a 2nd from a major triad +Esus2/A [x 0 4 4 0 0] (E Gb A B) : sus2 triad (altered bass) +Esus2/A [x 2 4 2 5 2] (E Gb A B) : sus2 triad (altered bass) +Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) : sus2 triad (altered bass) +Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) : sus2 triad (altered bass) +Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) : sus2 triad (altered bass) +Esus2/Db [x 4 4 4 x 0] (Db E Gb B) : sus2 triad (altered bass) +Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) : sus2 triad (altered bass) +Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) : sus2 triad (altered bass) +Esus2/G [0 2 2 0 0 2] (E Gb G B) : sus2 triad (altered bass) +Esus2/G [0 2 4 0 0 0] (E Gb G B) : sus2 triad (altered bass) +Esus2/G [0 x 4 0 0 0] (E Gb G B) : sus2 triad (altered bass) +Esus2/G [2 2 2 0 0 0] (E Gb G B) : sus2 triad (altered bass) +Esus4/Ab [x 0 2 1 0 0] (E Ab A B) : sus4 triad (altered bass) +Esus4/C [0 0 7 5 0 0] (C E A B) : sus4 triad (altered bass) +Esus4/C [x 3 2 2 0 0] (C E A B) : sus4 triad (altered bass) +Esus4/D [0 2 0 2 0 0] (D E A B) : sus4 triad (altered bass) +Esus4/D [x 2 0 2 3 0] (D E A B) : sus4 triad (altered bass) +Esus4/Db [0 0 2 4 2 0] (Db E A B) : sus4 triad (altered bass) +Esus4/Db [x 0 7 6 0 0] (Db E A B) : sus4 triad (altered bass) +Esus4/Eb [x 2 1 2 0 0] (Eb E A B) : sus4 triad (altered bass) +Esus4/F [0 0 3 2 0 0] (E F A B) : sus4 triad (altered bass) Esus4/G [3 x 2 2 0 0] (E G A B) : sus4 triad (altered bass) +Esus4/G [x 0 2 0 0 0] (E G A B) : sus4 triad (altered bass) +Esus4/G [x 0 5 4 5 0] (E G A B) : sus4 triad (altered bass) +Esus4/Gb [x 0 4 4 0 0] (E Gb A B) : sus4 triad (altered bass) +Esus4/Gb [x 2 4 2 5 2] (E Gb A B) : sus4 triad (altered bass) +F or Fmaj [1 3 3 2 1 1] (C F A) : major triad +F or Fmaj [x 0 3 2 1 1] (C F A) : major triad +F or Fmaj [x 3 3 2 1 1] (C F A) : major triad +F or Fmaj [x x 3 2 1 1] (C F A) : major triad +F #5 or Faug [x 0 3 2 2 1] (Db F A) : augmented triad +F #5 or Faug [x 0 x 2 2 1] (Db F A) : augmented triad +F/D [x 5 7 5 6 5] (C D F A) : major triad (altered bass) +F/D [x x 0 2 1 1] (C D F A) : major triad (altered bass) +F/D [x x 0 5 6 5] (C D F A) : major triad (altered bass) +F/E [0 0 3 2 1 0] (C E F A) : major triad (altered bass) +F/E [1 3 3 2 1 0] (C E F A) : major triad (altered bass) +F/E [1 x 2 2 1 0] (C E F A) : major triad (altered bass) +F/E [x x 2 2 1 1] (C E F A) : major triad (altered bass) +F/E [x x 3 2 1 0] (C E F A) : major triad (altered bass) +F/Eb [x x 1 2 1 1] (C Eb F A) : major triad (altered bass) +F/Eb [x x 3 5 4 5] (C Eb F A) : major triad (altered bass) +F/G [3 x 3 2 1 1] (C F G A) : major triad (altered bass) +F/G [x x 3 2 1 3] (C F G A) : major triad (altered bass) +F5 or F(no 3rd) [1 3 3 x x 1] (C F): root and 5th (power chord) +F5 or F(no 3rd) [x 8 10 x x 1] (C F): root and 5th (power chord) +F6 [x 5 7 5 6 5] (C D F A) : major triad plus 6th +F6 [x x 0 2 1 1] (C D F A) : major triad plus 6th +F6 [x x 0 5 6 5] (C D F A) : major triad plus 6th +F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) : major triad plus 6th and 9th +F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) : major triad, minor 7th +F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) : major triad, minor 7th +Fadd9 or F2 [3 x 3 2 1 1] (C F G A) : major triad plus 9th +Fadd9 or F2 [x x 3 2 1 3] (C F G A) : major triad plus 9th +Faug/D [x x 0 2 2 1] (Db D F A) : augmented triad (altered bass) +Faug/G [1 0 3 0 2 1] (Db F G A) : augmented triad (altered bass) +Fdim/D [x 2 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Fdim/D [x x 0 1 0 1] (D F Ab B) : diminished triad (altered bass) +Fdim/D [x x 3 4 3 4] (D F Ab B) : diminished triad (altered bass) +Fdim/Db [x 4 3 4 0 4] (Db F Ab B) : diminished triad (altered bass) +Fdim7 [x 2 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Fdim7 [x x 0 1 0 1] (D F Ab B) : diminished triad, diminished 7th +Fdim7 [x x 3 4 3 4] (D F Ab B) : diminished triad, diminished 7th +Fm [x 3 3 1 1 1] (C F Ab) : minor triad +Fm [x x 3 1 1 1] (C F Ab) : minor triad +Fm/D [x x 0 1 1 1] (C D F Ab) : minor triad (altered bass) +Fm/Db [x 3 3 1 2 1] (C Db F Ab) : minor triad (altered bass) +Fm/Db [x 4 6 5 6 4] (C Db F Ab) : minor triad (altered bass) +Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) : minor triad (altered bass) +Fm/Eb [x x 1 1 1 1] (C Eb F Ab) : minor triad (altered bass) +Fm6 [x x 0 1 1 1] (C D F Ab) : minor triad plus 6th +Fm7 [x 8 10 8 9 8] (C Eb F Ab) : minor triad, minor 7th +Fm7 [x x 1 1 1 1] (C Eb F Ab) : minor triad, minor 7th +Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) : major triad, major 7th +Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) : major triad, major 7th +Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) : major triad, major 7th +Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) : major triad, major 7th +Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) : major triad, major 7th +Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) : major triad, major 7th, augmented 11th +Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) : major triad, major 7th, augmented 11th +Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) : major triad, major 7th plus 9th +Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) : no 3rd but a 4th from a major triad +Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) : no 3rd but a 2nd from a major triad +Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) : no 3rd but a 2nd from a major triad +Fsus2/A [3 x 3 2 1 1] (C F G A) : sus2 triad (altered bass) +Fsus2/A [x x 3 2 1 3] (C F G A) : sus2 triad (altered bass) +Fsus2/B [x 3 3 0 0 3] (C F G B) : sus2 triad (altered bass) +Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) : sus2 triad (altered bass) +Fsus2/D [3 3 0 0 1 1] (C D F G) : sus2 triad (altered bass) +Fsus2/E [x 3 3 0 1 0] (C E F G) : sus2 triad (altered bass) +Fsus2/E [x x 3 0 1 0] (C E F G) : sus2 triad (altered bass) +Fsus4/G [x 3 5 3 6 3] (C F G Bb) : sus4 triad (altered bass) +G or Gmaj [x 10 12 12 12 10] (D G B): major triad +G or Gmaj [3 2 0 0 0 3] (D G B) : major triad +G or Gmaj [3 2 0 0 3 3] (D G B) : major triad +G or Gmaj [3 5 5 4 3 3] (D G B) : major triad +G or Gmaj [3 x 0 0 0 3] (D G B) : major triad +G or Gmaj [x 5 5 4 3 3] (D G B) : major triad +G or Gmaj [x x 0 4 3 3] (D G B) : major triad +G or Gmaj [x x 0 7 8 7] (D G B) : major triad +G #5 or Gaug [3 2 1 0 0 3] (Eb G B) : augmented triad +G #5 or Gaug [3 x 1 0 0 3] (Eb G B) : augmented triad +G/A [3 0 0 0 0 3] (D G A B) : major triad (altered bass) +G/A [3 2 0 2 0 3] (D G A B) : major triad (altered bass) +G/C [3 3 0 0 0 3] (C D G B) : major triad (altered bass) +G/C [x 3 0 0 0 3] (C D G B) : major triad (altered bass) +G/E [0 2 0 0 0 0] (D E G B) : major triad (altered bass) +G/E [0 2 0 0 3 0] (D E G B) : major triad (altered bass) +G/E [0 2 2 0 3 0] (D E G B) : major triad (altered bass) +G/E [0 2 2 0 3 3] (D E G B) : major triad (altered bass) +G/E [x x 0 12 12 12] (D E G B) : major triad (altered bass) +G/E [x x 0 9 8 7] (D E G B) : major triad (altered bass) +G/E [x x 2 4 3 3] (D E G B) : major triad (altered bass) +G/E [0 x 0 0 0 0] (D E G B) : major triad (altered bass) +G/E [x 10 12 12 12 0] (D E G B) : major triad (altered bass) +G/F [1 x 0 0 0 3] (D F G B) : major triad (altered bass) +G/F [3 2 0 0 0 1] (D F G B) : major triad (altered bass) +G/F [x x 0 0 0 1] (D F G B) : major triad (altered bass) +G/Gb [2 2 0 0 0 3] (D Gb G B) : major triad (altered bass) +G/Gb [2 2 0 0 3 3] (D Gb G B) : major triad (altered bass) +G/Gb [3 2 0 0 0 2] (D Gb G B) : major triad (altered bass) +G/Gb [x x 4 4 3 3] (D Gb G B) : major triad (altered bass) +G5 or G(no 3rd) [3 5 5 x x 3] (D G): root and 5th (power chord) +G5 or G(no 3rd) [3 x 0 0 3 3] (D G) : root and 5th (power chord) +G6 [0 2 0 0 0 0] (D E G B) : major triad plus 6th +G6 [0 2 0 0 3 0] (D E G B) : major triad plus 6th +G6 [0 2 2 0 3 0] (D E G B) : major triad plus 6th +G6 [0 2 2 0 3 3] (D E G B) : major triad plus 6th +G6 [x x 0 12 12 12] (D E G B) : major triad plus 6th +G6 [x x 0 9 8 7] (D E G B) : major triad plus 6th +G6 [x x 2 4 3 3] (D E G B) : major triad plus 6th +G6 [0 x 0 0 0 0] (D E G B) : major triad plus 6th +G6 [x 10 12 12 12 0] (D E G B) : major triad plus 6th +G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) : major triad plus 6th and 9th +G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) : major triad plus 6th and 9th +G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) : major triad plus 6th and 9th +G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) : major triad, minor 7th +G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) : major triad, minor 7th +G7 or Gdom 7 [x x 0 0 0 1] (D F G B) : major triad, minor 7th +G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) : major triad, minor 7th, plus 11th +G7sus4 [3 3 0 0 1 1] (C D F G) : sus4 triad, minor 7th +G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) : major triad, minor 7th plus 9th +G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) : major triad, minor 7th plus 9th +Gadd9 or G2 [3 0 0 0 0 3] (D G A B) : major triad plus 9th +Gadd9 or G2 [3 2 0 2 0 3] (D G A B) : major triad plus 9th +Gaug/E [3 x 1 0 0 0] (Eb E G B) : augmented triad (altered bass) +Gaug/E [x x 1 0 0 0] (Eb E G B) : augmented triad (altered bass) +Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) : major triad +Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) : major triad +Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) : major triad +Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) : augmented triad +Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) : major triad (altered bass) +Gb/E [2 4 2 3 2 2] (Db E Gb Bb) : major triad (altered bass) +Gb/E [x x 4 3 2 0] (Db E Gb Bb) : major triad (altered bass) +Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) : major triad (altered bass) +Gb/F [x x 3 3 2 2] (Db F Gb Bb) : major triad (altered bass) +Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) : major triad plus 6th +Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) : major triad, minor 7th +Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) : major triad, minor 7th +Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) : minor 7th, sharp 5th +Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) : major triad, minor 7th augmented 9th +Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) : sus4 triad, minor 7th +Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) : major triad plus 9th +Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) : augmented triad (altered bass) +Gbdim/D [x 5 7 5 7 2] (C D Gb A): diminished triad (altered bass) +Gbdim/D [x 0 0 2 1 2] (C D Gb A) : diminished triad (altered bass) +Gbdim/D [x 3 x 2 3 2] (C D Gb A) : diminished triad (altered bass) +Gbdim/D [x 5 7 5 7 5] (C D Gb A) : diminished triad (altered bass) +Gbdim/E [x 0 2 2 1 2] (C E Gb A) : diminished triad (altered bass) +Gbdim/E [x x 2 2 1 2] (C E Gb A) : diminished triad (altered bass) +Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) : diminished triad (altered bass) +Gbdim7 [x x 1 2 1 2] (C Eb Gb A) : diminished triad, diminished 7th +Gbm [2 4 4 2 2 2] (Db Gb A) : minor triad +Gbm [x 4 4 2 2 2] (Db Gb A) : minor triad +Gbm [x x 4 2 2 2] (Db Gb A) : minor triad +Gbm/D [x x 0 14 14 14] (Db D Gb A) : minor triad (altered bass) +Gbm/D [x x 0 2 2 2] (Db D Gb A) : minor triad (altered bass) +Gbm/E [0 0 2 2 2 2] (Db E Gb A) : minor triad (altered bass) +Gbm/E [0 x 4 2 2 0] (Db E Gb A) : minor triad (altered bass) +Gbm/E [2 x 2 2 2 0] (Db E Gb A) : minor triad (altered bass) +Gbm/E [x 0 4 2 2 0] (Db E Gb A) : minor triad (altered bass) +Gbm/E [x x 2 2 2 2] (Db E Gb A) : minor triad (altered bass) +Gbm7 [0 0 2 2 2 2] (Db E Gb A) : minor triad, minor 7th +Gbm7 [0 x 4 2 2 0] (Db E Gb A) : minor triad, minor 7th +Gbm7 [2 x 2 2 2 0] (Db E Gb A) : minor triad, minor 7th +Gbm7 [x 0 4 2 2 0] (Db E Gb A) : minor triad, minor 7th +Gbm7 [x x 2 2 2 2] (Db E Gb A) : minor triad, minor 7th +Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) : diminished triad, minor 7th : half-diminished 7th +Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) : diminished triad, minor 7th : half-diminished 7th +Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) : minor triad, minor 7th flat 9th +Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) : major triad, major 7th +Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) : no 3rd but a 4th from a major triad +Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) : sus2 triad (altered bass) +Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) : sus4 triad (altered bass) +Gdim/E [x 1 2 0 2 0] (Db E G Bb) : diminished triad (altered bass) +Gdim/E [x x 2 3 2 3] (Db E G Bb) : diminished triad (altered bass) +Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) : diminished triad (altered bass) +Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) : diminished triad (altered bass) +Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) : diminished triad (altered bass) +Gdim7 [x 1 2 0 2 0] (Db E G Bb) : diminished triad, diminished 7th +Gdim7 [x x 2 3 2 3] (Db E G Bb) : diminished triad, diminished 7th +Gm [3 5 5 3 3 3] (D G Bb) : minor triad +Gm [x x 0 3 3 3] (D G Bb) : minor triad +Gm/E [3 x 0 3 3 0] (D E G Bb) : minor triad (altered bass) +Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) : minor triad (altered bass) +Gm/F [3 5 3 3 3 3] (D F G Bb) : minor triad (altered bass) +Gm/F [x x 3 3 3 3] (D F G Bb) : minor triad (altered bass) +Gm13 [0 0 3 3 3 3] (D E F G A Bb) : minor triad, minor 7th, plus 9th and 13th +Gm6 [3 x 0 3 3 0] (D E G Bb) : minor triad plus 6th +Gm7 [3 5 3 3 3 3] (D F G Bb) : minor triad, minor 7th +Gm7 [x x 3 3 3 3] (D F G Bb) : minor triad, minor 7th +Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) : minor triad, minor 7th, plus 11th +Gm9 [3 5 3 3 3 5] (D F G A Bb) : minor triad, minor 7th plus 9th +Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) : major triad, major 7th +Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) : major triad, major 7th +Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) : major triad, major 7th +Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) : major triad, major 7th +Gsus or Gsus4 [x 10 12 12 13 3] (C D G): no 3rd but a 4th from a major triad +Gsus or Gsus4 [x 3 0 0 3 3] (C D G) : no 3rd but a 4th from a major triad +Gsus or Gsus4 [x 3 5 5 3 3] (C D G) : no 3rd but a 4th from a major triad +Gsus or Gsus4 [x 5 5 5 3 3] (C D G) : no 3rd but a 4th from a major triad +Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A): no 3rd but a 2nd from a major triad +Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) : no 3rd but a 2nd from a major triad +Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) : no 3rd but a 2nd from a major triad +Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) : no 3rd but a 2nd from a major triad +Gsus2/B [3 0 0 0 0 3] (D G A B) : sus2 triad (altered bass) +Gsus2/B [3 2 0 2 0 3] (D G A B) : sus2 triad (altered bass) +Gsus2/C [x 5 7 5 8 3] (C D G A): sus2 triad (altered bass) +Gsus2/C [x x 0 2 1 3] (C D G A) : sus2 triad (altered bass) +Gsus2/E [x 0 2 0 3 0] (D E G A) : sus2 triad (altered bass) +Gsus2/E [x 0 2 0 3 3] (D E G A) : sus2 triad (altered bass) +Gsus2/E [x 0 2 2 3 3] (D E G A) : sus2 triad (altered bass) +Gsus2/E [5 0 0 0 3 0] (D E G A) : sus2 triad (altered bass) +Gsus2/Gb [5 x 4 0 3 5] (D Gb G A): sus2 triad (altered bass) +Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) : sus2 triad (altered bass) +Gsus4/A [x 5 7 5 8 3] (C D G A): sus4 triad (altered bass) +Gsus4/A [x x 0 2 1 3] (C D G A) : sus4 triad (altered bass) +Gsus4/B [3 3 0 0 0 3] (C D G B) : sus4 triad (altered bass) +Gsus4/B [x 3 0 0 0 3] (C D G B) : sus4 triad (altered bass) +Gsus4/E [3 x 0 0 1 0] (C D E G) : sus4 triad (altered bass) +Gsus4/E [x 3 0 0 1 0] (C D E G) : sus4 triad (altered bass) +Gsus4/E [x 3 2 0 3 0] (C D E G) : sus4 triad (altered bass) +Gsus4/E [x 3 2 0 3 3] (C D E G) : sus4 triad (altered bass) +Gsus4/E [x x 0 0 1 0] (C D E G) : sus4 triad (altered bass) +Gsus4/E [x x 0 5 5 3] (C D E G) : sus4 triad (altered bass) +Gsus4/E [x 10 12 12 13 0] (C D E G) : sus4 triad (altered bass) +Gsus4/E [x 5 5 5 x 0] (C D E G) : sus4 triad (altered bass) +Gsus4/F [3 3 0 0 1 1] (C D F G) : sus4 triad (altered bass) diff --git a/guitar/tabs/Lesson/cminorpentatonic.prj b/guitar/tabs/Lesson/cminorpentatonic.prj new file mode 100644 index 0000000..2220e3b --- /dev/null +++ b/guitar/tabs/Lesson/cminorpentatonic.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=cminorpentatonic.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16) diff --git a/guitar/tabs/Lesson/cminorpentatonic.tab b/guitar/tabs/Lesson/cminorpentatonic.tab new file mode 100644 index 0000000..eba5af2 --- /dev/null +++ b/guitar/tabs/Lesson/cminorpentatonic.tab @@ -0,0 +1,11 @@ +Key = C minor Penatonic + + + E |-----------------------3-3--------------------------| + B |-------------------3-6-----6-3----------------------| + G |---------------3-5-------------5-3------------------| + D |-----------3-5---------------------5-3--------------| + A |-----1-3-5-----------------------------5-3-1--------| + E |-1-3-----------------------------------------3-1-3--| + + diff --git a/guitar/tabs/Lesson/fluid legato pulloffs.prj b/guitar/tabs/Lesson/fluid legato pulloffs.prj new file mode 100644 index 0000000..e3374b3 --- /dev/null +++ b/guitar/tabs/Lesson/fluid legato pulloffs.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=fluid legato pulloffs.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16) +TEMPO=450000 diff --git a/guitar/tabs/Lesson/fluid legato pulloffs.tab b/guitar/tabs/Lesson/fluid legato pulloffs.tab new file mode 100644 index 0000000..062982a --- /dev/null +++ b/guitar/tabs/Lesson/fluid legato pulloffs.tab @@ -0,0 +1,31 @@ +jeb + + + + +fluid legato pulloffs + + +this lick is all left hand ala satch and Holdsworth. the trick is to pick the first note 8 fret B string ,hammer the next two notes,pick the 8 fret E string,and hammer the next two notes then pick the 13 fret E string. It is critical that you use your pinky on the 13 fret because you must pull off the next three notes ending up back on the 8 fret E string. Finally pick the 12 fret B string pulling off the last two notes. Try to keep this pattern repeating and move it over to the G and D strings. If your insanely ambitious try starting this pattern on the 3 fret Low E string and moving it up two octave postions...have mercy. + + + +Key = A, G , or C + + + E |----------8--10---12---13------ --12---10---8----------------------| + B |-8--10-12---------------------- ---------------12----10-----8-----| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + + diff --git a/guitar/tabs/Lesson/naturalharmonic.prj b/guitar/tabs/Lesson/naturalharmonic.prj new file mode 100644 index 0000000..9ccfd6b --- /dev/null +++ b/guitar/tabs/Lesson/naturalharmonic.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=naturalharmonic.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8) +TEMPO=651578 diff --git a/guitar/tabs/Lesson/naturalharmonic.tab b/guitar/tabs/Lesson/naturalharmonic.tab new file mode 100644 index 0000000..831e971 --- /dev/null +++ b/guitar/tabs/Lesson/naturalharmonic.tab @@ -0,0 +1,25 @@ +Here's the Natural Harmonic part of the intro to Satch's"Summer Song" + + + + +Key = + +N.H------------------------------------------------------------- + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-----------5-------------------|----------------------------------| + D |---------5---5-----------------|--------5-------------------------| + A |----5-4-------4-5--------------|--5-4--- 4-4-5---------------------| + E |-------------------------------|----------------------------------| +Repeat Once + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + + + diff --git a/guitar/tabs/Lesson/open string trick 3.prj b/guitar/tabs/Lesson/open string trick 3.prj new file mode 100644 index 0000000..931e856 --- /dev/null +++ b/guitar/tabs/Lesson/open string trick 3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=open string trick 3.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16) diff --git a/guitar/tabs/Lesson/open string trick 3.tab b/guitar/tabs/Lesson/open string trick 3.tab new file mode 100644 index 0000000..f40fac0 --- /dev/null +++ b/guitar/tabs/Lesson/open string trick 3.tab @@ -0,0 +1,28 @@ + + + +open string trick 3 + + +This little trick is usefull for ascending runs. Players like Satriani use this kind of licks quite often. + + + +Key = E + +E|-0-2-3-0-3-5-0-5-7-0-7-8-0-8-10-0-10-12-0-12-14-| +B|------------------------------------------------| +G|------------------------------------------------| +D|------------------------------------------------| +A|------------------------------------------------| +E|------------------------------------------------| + +E|-0-14-15-0 15 17-17^(1)r-p15----15--------------| +B|-----------------------------17----17~----------| +G|------------------------------------------------| +D|------------------------------------------------| +A|------------------------------------------------| +E|------------------------------------------------| + + + diff --git a/guitar/tabs/Lesson/pinch harmonics exercise.prj b/guitar/tabs/Lesson/pinch harmonics exercise.prj new file mode 100644 index 0000000..9da832d --- /dev/null +++ b/guitar/tabs/Lesson/pinch harmonics exercise.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=pinch harmonics exercise.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16) +TEMPO=651578 diff --git a/guitar/tabs/Lesson/pinch harmonics exercise.tab b/guitar/tabs/Lesson/pinch harmonics exercise.tab new file mode 100644 index 0000000..3abf471 --- /dev/null +++ b/guitar/tabs/Lesson/pinch harmonics exercise.tab @@ -0,0 +1,30 @@ +Michel de Jong + + + + +pinch harmonics exercise 1 + + +I've had a lot of questions about pinch harmonics lately and decided to post a few PH exercises, this is the first one. In a nut shell, the basics of playing pinch harmonics are: + +1) Find a convenient way for you to touch the string lightly with your picking hand at the same time that you pick the note. How this is done best depends on the way you hold the pick. Most players hold the pick between the thumb and the side of the index finger (like f.e. Satriani does), then pinch harmonics are probably played most easily by touching the string with the side of the thumb on a downstroke. I have a rather unconventional way to hold the pick, using a three-finger grip with the thumb, index and second finger (like Steve Morse does). Moreover, I prefer playing upstrokes rather than downstrokes and use the nail of my second finger or the nail of the third finger (which is close to the strings with my way of playing anyway) to produce the pinch harmonics. + +2) Touch the string in the right spot. I've talked plenty about that in "the secrets of..." + +In this "trick", I play a little melody line in E harmonic minor and I "pinch" each note such that it rings with the fourth harmonic (i.e. 2 octaves higher). To do this, find the spot where you get the 4th harmonic of the first note (somewhere near the middle pick-up on a strat-type guitar) and move your right hand towards the neck and back while picking the notes, the distances you have to move the right hand are small and it takes some experimenting to do it, but it's not hard. + + +Key = + +E|---------------------------------| +B|-------7-8-7-8-10-10^(1)r-10-8---| +G|-9-8-9-------------------------9-| +D|---------------------------------| +A|---------------------------------| +E|---------------------------------| + + + + + diff --git a/guitar/tabs/Lesson/strunz style.prj b/guitar/tabs/Lesson/strunz style.prj new file mode 100644 index 0000000..20fb102 --- /dev/null +++ b/guitar/tabs/Lesson/strunz style.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\technique\strunz style.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500) diff --git a/guitar/tabs/Lesson/strunz style.tab b/guitar/tabs/Lesson/strunz style.tab new file mode 100644 index 0000000..58896b2 --- /dev/null +++ b/guitar/tabs/Lesson/strunz style.tab @@ -0,0 +1,27 @@ +strunz style + + + +This is a simple little pattern that you'/ll hear Jorge Strunz use regularly, as well as Al Dimeola from the older days of "Friday Night in San Francisco." Play it as fast as you want, in groups of six, and keep it even. + + + +Key = Em + + + E |---------7-------7-------7------|7----------------------------------| + B |78107810-1087810-1087810-1087810|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + + diff --git a/guitar/tabs/Lesson/trick.prj b/guitar/tabs/Lesson/trick.prj new file mode 100644 index 0000000..79fe9fa --- /dev/null +++ b/guitar/tabs/Lesson/trick.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=trick.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500) diff --git a/guitar/tabs/Lesson/trick.tab b/guitar/tabs/Lesson/trick.tab new file mode 100644 index 0000000..0a7b2e8 --- /dev/null +++ b/guitar/tabs/Lesson/trick.tab @@ -0,0 +1,32 @@ +very good trick for blues players + + +this trick is very easy and very nice to play and will +make you look good to your parents and friends i am only 13 +and i love playing jimi hendrix joe satriani and many more +i suggest you try my other tricks if you think you are advanced +remember i am 13 and please try my other work!!!!!!!!!!!!!! + + + +Key = ? + + +v:1(guitar 1) ect................ + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |-------------------------------|----------------------------------| + D |---------------------2-2-4-2---|-2-2-4-2--------ect...------------| + A |-2-2-4-2----2-2-4-2------------|-----------2-2-4-2----------------| + E |-------------------------------|----------------------------------| + sounds great with other guitar playing v:1 + + v:2(guitar 2) + E |-------------------------------|----------------------------------| + B |-------------------------------|----------------------------------| + G |----------------------5--7b7b7b-----------------------------------| + D |--------5-7-5~~~--5-7----------|----------------------------------| + A |-5-5-7-------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + diff --git a/guitar/tabs/Malmsteen/anguish_and_fear.tab b/guitar/tabs/Malmsteen/anguish_and_fear.tab new file mode 100644 index 0000000..7478db4 --- /dev/null +++ b/guitar/tabs/Malmsteen/anguish_and_fear.tab @@ -0,0 +1,376 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Anguish and Fear" +from Marching Out tune down 1/2 step +letostak@netcom.com + +* artificial harmonic + + +fig1 +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|----------------2-----3-| +|-------0--3--2--0-------|----2--5--2--3-----2----|----3--2--5--3-----5----| +|-0--1--------------1--0-|-4--------------5-----4-|-5----------------------| + + +|------------------------|---------------------|---------------------------|| +|------------------------|---------------------|---------------------------|| +|----2-------------------|------2--5--4p2------|----4--7--4--5--4h5p4-----5|| +|-2-----5--3--2----------|-2h3-------------3p2-|-6---------------------7---|| +|----------------5--3--2-|---------------------|---------------------------|| +|------------------------|---------------------|---------------------------|| + +fig2 +|----------------------------------|---------------------------------------| +|--10~--------8~-------6~----------|-------5~------------------------------| +|----------------------------------|-------------------7-----------5\------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +| | | +| | | +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|--10~--------9~-------7~----------|--------5~---------4-------------------| +|----------------------------------|--------------------------------7\-----| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| + + +|------------------------|-----------------------------|-------------------- +|------------------------|-----------------------------|-------------------- +|------------------------|-----------------------------|-------------------- +|-------7--10--9p7-------|-----9--12--9--10------9-----|-----10--9--12--10-- +|-7--8--------------8--7-|-11----------------12-----11-|-12----------------- +|------------------------|-----------------------------|-------------------- + + +-----------|---------------------------|------------------------|----------- +-----------|----10--8------------------|------------------------|----------- +-9------10-|-9---------10--9--7--------|------------------------|----------- +----12-----|---------------------10--9-|-------7--10--9p7-------|----9--12-- +-----------|---------------------------|-7--8--------------8--7-|-11-------- +-----------|---------------------------|------------------------|----------- + + +------------------| +------------------| +------------------| +--9--10p9------10-| +-----------12-----| +------------------| + +Repeat fig2 + + + +|-----8--12------8--12------8-|-12--8--10------8------------|-12h13p12p10--- +|-10---------10---------10----|------------12-----10--12--8-|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- + + +-------------------------------|-------------------------------------------| +-13p12p10s9--------------------|-(9)s10p9----------------------------------| +------------12p10--9-----------|----------12--10p9------10p9---------------| +----------------------12p10--9-|--------------------12--------12--10p9-----| +-------------------------------|----------------------------------------11-| +-------------------------------|-------------------------------------------| + + +1. No .. +2. soul .. +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|-0--0--0--0--0--0--0--0-|-0--0--0--0--0--0--0--0-|-0--0--0--0--0--0--0--0--| +|------------------------|------------------------|-------------------------| + +done I'll .. + eyes .. + +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|-------------2----------|-------------2----------| +|------------------------|-------------2----------|-------------2----------| +|----------0--3--2--0----|-0--0--0--0--0-----0--0-|-0--0--0--0--0-----0--0-| +|-0--1--3--------------3-|------------------------|------------------------| + +moon .. +told .. +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|-------------2----------| +|------------------------|------------------------|-------------2----------| +|-0--0--0--0--0--0--0--0-|----------0--3--2--0----|-0--0--0--0--0----------| +|------------------------|-0--1--3--------------3-|------------------------| + +stranger .. +fortune .. + +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|-0--0--0--0--0--0--0--0-|-0--0--0--0--0--0--0--0-|----------0--3--2--0-----| +|------------------------|------------------------|-0--1--3--------------3--| + +warned .. +find .. + +|---------|--------------|------------------------|------------------------| +|---------|--------------|------------------------|------------------------| +|-2-------|-2---2--------|------------------------|------------------------| +|-2-------|-2---2--------|------------------------|------------------------| +|-0-------|-0---0---0--0-|-0--0--0--0----0--0--0--|----------0--3--2--0----| +|---------|--------------|------------------------|-0--1--3--------------3-| + + +|horus + +|------------------|------------------------|------------------------------| +|------------------|------------------------|------------------------------| +|-------2----------|------------------------|----------4-------------------| +|-------2----------|------------------------|----------5-------------------| +|--0----0-----0--0-|-0--0--0--0--0--0--0--0-|--0----------------0--0-------| +|------------------|------------------------|------------------------------| +| Anguish ..| | +| | | | +|------------------|------------------------|------------------------------| +|-------13~--------|-(13)~------------------|----------12~-----------------| +|-------14~--------|-(14)~------------------|----------12~-----------------| +|------------------|------------------------|------------------------------| +|------------------|------------------------|------------------------------| +|------------------|------------------------|------------------------------| + + +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----2-----------|-------------------------------| +|------------------------|-----3-----------|-------------------------------| +|-0--0--0--0--0--0--0--0-|-0---------0--0--|-0--0--0--0--0--0--0--0--------| +|------------------------|-----------------|-------------------------------| +| | | | +| is ..| | +|------------------------|-----------------|-------------------------------| +|-(12)~------------------|-----10~---------|--(10)~------------------------| +|-(12)~------------------|-----10~---------|--(10)~------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| + + +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------2-----------------| +|------4--------------|-------------------------|--------2-----------------| +|------5-----0--0-----|-0--0--0--0--0--0--0--0--|--0--------------0--0-----| +|-0-------------------|-------------------------|--------------------------| +| | | | +| | | Shed ..| +|---------------------|-------------------------|--------------------------| +|------12~------------|------(12)~--------------|--------13~---------------| +|------12~------------|------(12)~--------------|--------14~---------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| + + +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----4-----------|-------------------------------| +|------------------------|-----5-----------|-------------------------------| +|-0--0--0--0--0--0--0--0-|-0---------0--0--|-0--0--0--0--0--0--0--0--------| +|------------------------|-----------------|-------------------------------| +| | | | +| tear | | I'm | +|------------------------|-----------------|-------------------------------| +|-(13)~------------------|-----12~---------|--(12)~------------------------| +|-(14)~------------------|-----12~---------|--(12)~------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| + + +|----------------|---------------------|----------------|------------------| +|----------------|---------------------|----------------|------------------| +|-------2--------|---------------------|----4-----------|------------------| +|-------3--------|---------------------|----5-----------|------------------| +|--0-------0--0--|-0--0--0--0--0--0--0-|-0---------0--0-|-0-0-0-0-0-0-0-0--| +|----------------|---------------------|----------------|------------------| +| | | | | +| | | | | +|----------------|---------------------|----------------|------------------| +|-------10~------|---------------------|----12~---------|------------------| +|-------10~------|---------------------|----12~---------|------------------| +|----------------|---------------------|----------------|------------------| +|----------------|---------------------|----------------|------------------| +|----------------|---------------------|----------------|------------------| + + +|-----8--12------8--12------8-|-12--8--10------8------------|-12h13p12p10--- +|-10---------10---------10----|------------12-----10--12--8-|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- + + +-------------------------------|-------------------------------------------| +-13p12p10s9--------------------|-(9)s10p9----------------------------------| +------------12p10--9-----------|----------12--10p9------10p9---------------| +----------------------12p10--9-|--------------------12--------12--10p9-----| +-------------------------------|----------------------------------------11-| +-------------------------------|-------------------------------------------| + + + 2. His + +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|---12~--------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| + +play fig 1 + + +Solo + +|-----------------------13p12p10----------|-----------------20bf~----------| +|-----------------10-12----------13p12p10-|-s12p10p9-----------------------| +|---------9-10-12-------------------------|----------10p9------------------| +|-9-10-12---------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| + + +|-20-17-19-20-19-17-19-16-17-|-19-17-16--------------------12h13p12p10-----| +|----------------------------|----------18-15-17-18-17-15\-----------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| + + +|----------------------------------|-------------------------|-------------| +|-13p12p10-12p10p9-----------------|-------------------------|-------------| +|------------------10p9-9\---------|-------------------------|-------------| +|--------------------------7h9-7p6-|-------9p7p6-------------|-------------| +|----------------------------------|-8p7p5-------8p7p5-8p7p5-|-------------| +|----------------------------------|-------------------------|-8p7p5s6p0---| + + +Keyboard solo +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| + + +|--------------------------------------------|------------------------------ +|-----------------10h12p10p9-----------------|-12p10p9------------10p9------ +|---------9-10-12------------12p10p9---------|---------12p10p9---------12p10 +|-9-10-12----------------------------12p10p9-|-----------------12----------- +|--------------------------------------------|------------------------------ +|--------------------------------------------|------------------------------ + + +----------|-12h13p12p10----------16p13----16\19-16----|-16p13----16\19p16--- +----------|-------------13p12p10-------15----------18-|-------15------------ +-p9-------|-------------------------------------------|--------------------- +----12-10-|-------------------------------------------|--------------------- +----------|-------------------------------------------|--------------------- +----------|-------------------------------------------|--------------------- + + 1 1/2 1 1/2 Keyboard solo +----19\21b---|-21bf-------21b-----|---------------|------------------------| +-18----------|----------x---------|---------------|------------------------| +-------------|--------x-----------|---------------|------------------------| +-------------|--------------------|---------------|------------------------| +-------------|--------------------|---------------|------------------------| +-------------|--------------------|---------------|------------------------| + + 1 1/2 +|--21b~-----|--21p19*~------|--------------------|------------|------------| +|-----------|---------------|------15--------15--|-----15dive-|-15bfdive---| +|-----------|---------------|-14bf------14bf-----|-14b--------|------------| +|-----------|---------------|--------------------|------------|------------| +|-----------|---------------|--------------------|------------|------------| +|-----------|---------------|--------------------|------------|------------| + + +Keyboard Solo +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| + + +w/keyboards + +|-------------------|-----------------|----------------------13--12--------| +|-------------------|-10~---------9~--|-------10--9--13--12----------------| +|-(9)s10~------9----|-----------------|10--9-------------------------------| +|-------------------|-----------------|------------------------------------| +|-------------------|-----------------|------------------------------------| +|-------------------|-----------------|------------------------------------| + + 1 1/2 +|-17--16--20--19--21b~\----|-20-19-17-16-17-19-20-19-17-16-17-19-|-20-19---- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- + + 1/2 +-17\16---------------------------|-----------------------------------------| +--------18-17----15--------------|-----------------------------------------| +---------------------17-16-14-13-|--\10~------------9b---------------------| +---------------------------------|-----------12----------------------------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| + + +Repeat chorus + + +|-----8--12------8--12------8-|-12--8--10------8------------|-12h13p12p10--- +|-10---------10---------10----|------------12-----10--12--8-|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- + + +-------------------------------|-------------------------------------------| +-13p12p10s9--------------------|-(9)s10p9----------------------------------| +------------12p10--9-----------|----------12--10p9------10p9---------------| +----------------------12p10--9-|--------------------12--------12--10p9-----| +-------------------------------|----------------------------------------11-| +-------------------------------|-------------------------------------------| + + +|------------------------------| +|------------------------------| +|------------------------------| +|------------------------------| +|---12~------------------------| +|------------------------------| + diff --git a/guitar/tabs/Malmsteen/anguish_and_fear.tab.txt b/guitar/tabs/Malmsteen/anguish_and_fear.tab.txt new file mode 100644 index 0000000..7478db4 --- /dev/null +++ b/guitar/tabs/Malmsteen/anguish_and_fear.tab.txt @@ -0,0 +1,376 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Anguish and Fear" +from Marching Out tune down 1/2 step +letostak@netcom.com + +* artificial harmonic + + +fig1 +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|----------------2-----3-| +|-------0--3--2--0-------|----2--5--2--3-----2----|----3--2--5--3-----5----| +|-0--1--------------1--0-|-4--------------5-----4-|-5----------------------| + + +|------------------------|---------------------|---------------------------|| +|------------------------|---------------------|---------------------------|| +|----2-------------------|------2--5--4p2------|----4--7--4--5--4h5p4-----5|| +|-2-----5--3--2----------|-2h3-------------3p2-|-6---------------------7---|| +|----------------5--3--2-|---------------------|---------------------------|| +|------------------------|---------------------|---------------------------|| + +fig2 +|----------------------------------|---------------------------------------| +|--10~--------8~-------6~----------|-------5~------------------------------| +|----------------------------------|-------------------7-----------5\------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +| | | +| | | +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|--10~--------9~-------7~----------|--------5~---------4-------------------| +|----------------------------------|--------------------------------7\-----| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| + + +|------------------------|-----------------------------|-------------------- +|------------------------|-----------------------------|-------------------- +|------------------------|-----------------------------|-------------------- +|-------7--10--9p7-------|-----9--12--9--10------9-----|-----10--9--12--10-- +|-7--8--------------8--7-|-11----------------12-----11-|-12----------------- +|------------------------|-----------------------------|-------------------- + + +-----------|---------------------------|------------------------|----------- +-----------|----10--8------------------|------------------------|----------- +-9------10-|-9---------10--9--7--------|------------------------|----------- +----12-----|---------------------10--9-|-------7--10--9p7-------|----9--12-- +-----------|---------------------------|-7--8--------------8--7-|-11-------- +-----------|---------------------------|------------------------|----------- + + +------------------| +------------------| +------------------| +--9--10p9------10-| +-----------12-----| +------------------| + +Repeat fig2 + + + +|-----8--12------8--12------8-|-12--8--10------8------------|-12h13p12p10--- +|-10---------10---------10----|------------12-----10--12--8-|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- + + +-------------------------------|-------------------------------------------| +-13p12p10s9--------------------|-(9)s10p9----------------------------------| +------------12p10--9-----------|----------12--10p9------10p9---------------| +----------------------12p10--9-|--------------------12--------12--10p9-----| +-------------------------------|----------------------------------------11-| +-------------------------------|-------------------------------------------| + + +1. No .. +2. soul .. +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|-0--0--0--0--0--0--0--0-|-0--0--0--0--0--0--0--0-|-0--0--0--0--0--0--0--0--| +|------------------------|------------------------|-------------------------| + +done I'll .. + eyes .. + +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|-------------2----------|-------------2----------| +|------------------------|-------------2----------|-------------2----------| +|----------0--3--2--0----|-0--0--0--0--0-----0--0-|-0--0--0--0--0-----0--0-| +|-0--1--3--------------3-|------------------------|------------------------| + +moon .. +told .. +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|-------------2----------| +|------------------------|------------------------|-------------2----------| +|-0--0--0--0--0--0--0--0-|----------0--3--2--0----|-0--0--0--0--0----------| +|------------------------|-0--1--3--------------3-|------------------------| + +stranger .. +fortune .. + +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|------------------------|------------------------|-------------------------| +|-0--0--0--0--0--0--0--0-|-0--0--0--0--0--0--0--0-|----------0--3--2--0-----| +|------------------------|------------------------|-0--1--3--------------3--| + +warned .. +find .. + +|---------|--------------|------------------------|------------------------| +|---------|--------------|------------------------|------------------------| +|-2-------|-2---2--------|------------------------|------------------------| +|-2-------|-2---2--------|------------------------|------------------------| +|-0-------|-0---0---0--0-|-0--0--0--0----0--0--0--|----------0--3--2--0----| +|---------|--------------|------------------------|-0--1--3--------------3-| + + +|horus + +|------------------|------------------------|------------------------------| +|------------------|------------------------|------------------------------| +|-------2----------|------------------------|----------4-------------------| +|-------2----------|------------------------|----------5-------------------| +|--0----0-----0--0-|-0--0--0--0--0--0--0--0-|--0----------------0--0-------| +|------------------|------------------------|------------------------------| +| Anguish ..| | +| | | | +|------------------|------------------------|------------------------------| +|-------13~--------|-(13)~------------------|----------12~-----------------| +|-------14~--------|-(14)~------------------|----------12~-----------------| +|------------------|------------------------|------------------------------| +|------------------|------------------------|------------------------------| +|------------------|------------------------|------------------------------| + + +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----2-----------|-------------------------------| +|------------------------|-----3-----------|-------------------------------| +|-0--0--0--0--0--0--0--0-|-0---------0--0--|-0--0--0--0--0--0--0--0--------| +|------------------------|-----------------|-------------------------------| +| | | | +| is ..| | +|------------------------|-----------------|-------------------------------| +|-(12)~------------------|-----10~---------|--(10)~------------------------| +|-(12)~------------------|-----10~---------|--(10)~------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| + + +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------2-----------------| +|------4--------------|-------------------------|--------2-----------------| +|------5-----0--0-----|-0--0--0--0--0--0--0--0--|--0--------------0--0-----| +|-0-------------------|-------------------------|--------------------------| +| | | | +| | | Shed ..| +|---------------------|-------------------------|--------------------------| +|------12~------------|------(12)~--------------|--------13~---------------| +|------12~------------|------(12)~--------------|--------14~---------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| + + +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----4-----------|-------------------------------| +|------------------------|-----5-----------|-------------------------------| +|-0--0--0--0--0--0--0--0-|-0---------0--0--|-0--0--0--0--0--0--0--0--------| +|------------------------|-----------------|-------------------------------| +| | | | +| tear | | I'm | +|------------------------|-----------------|-------------------------------| +|-(13)~------------------|-----12~---------|--(12)~------------------------| +|-(14)~------------------|-----12~---------|--(12)~------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| +|------------------------|-----------------|-------------------------------| + + +|----------------|---------------------|----------------|------------------| +|----------------|---------------------|----------------|------------------| +|-------2--------|---------------------|----4-----------|------------------| +|-------3--------|---------------------|----5-----------|------------------| +|--0-------0--0--|-0--0--0--0--0--0--0-|-0---------0--0-|-0-0-0-0-0-0-0-0--| +|----------------|---------------------|----------------|------------------| +| | | | | +| | | | | +|----------------|---------------------|----------------|------------------| +|-------10~------|---------------------|----12~---------|------------------| +|-------10~------|---------------------|----12~---------|------------------| +|----------------|---------------------|----------------|------------------| +|----------------|---------------------|----------------|------------------| +|----------------|---------------------|----------------|------------------| + + +|-----8--12------8--12------8-|-12--8--10------8------------|-12h13p12p10--- +|-10---------10---------10----|------------12-----10--12--8-|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- + + +-------------------------------|-------------------------------------------| +-13p12p10s9--------------------|-(9)s10p9----------------------------------| +------------12p10--9-----------|----------12--10p9------10p9---------------| +----------------------12p10--9-|--------------------12--------12--10p9-----| +-------------------------------|----------------------------------------11-| +-------------------------------|-------------------------------------------| + + + 2. His + +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|---12~--------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| + +play fig 1 + + +Solo + +|-----------------------13p12p10----------|-----------------20bf~----------| +|-----------------10-12----------13p12p10-|-s12p10p9-----------------------| +|---------9-10-12-------------------------|----------10p9------------------| +|-9-10-12---------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| + + +|-20-17-19-20-19-17-19-16-17-|-19-17-16--------------------12h13p12p10-----| +|----------------------------|----------18-15-17-18-17-15\-----------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| + + +|----------------------------------|-------------------------|-------------| +|-13p12p10-12p10p9-----------------|-------------------------|-------------| +|------------------10p9-9\---------|-------------------------|-------------| +|--------------------------7h9-7p6-|-------9p7p6-------------|-------------| +|----------------------------------|-8p7p5-------8p7p5-8p7p5-|-------------| +|----------------------------------|-------------------------|-8p7p5s6p0---| + + +Keyboard solo +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| +|----------------------|----------------|---------------|------------------| + + +|--------------------------------------------|------------------------------ +|-----------------10h12p10p9-----------------|-12p10p9------------10p9------ +|---------9-10-12------------12p10p9---------|---------12p10p9---------12p10 +|-9-10-12----------------------------12p10p9-|-----------------12----------- +|--------------------------------------------|------------------------------ +|--------------------------------------------|------------------------------ + + +----------|-12h13p12p10----------16p13----16\19-16----|-16p13----16\19p16--- +----------|-------------13p12p10-------15----------18-|-------15------------ +-p9-------|-------------------------------------------|--------------------- +----12-10-|-------------------------------------------|--------------------- +----------|-------------------------------------------|--------------------- +----------|-------------------------------------------|--------------------- + + 1 1/2 1 1/2 Keyboard solo +----19\21b---|-21bf-------21b-----|---------------|------------------------| +-18----------|----------x---------|---------------|------------------------| +-------------|--------x-----------|---------------|------------------------| +-------------|--------------------|---------------|------------------------| +-------------|--------------------|---------------|------------------------| +-------------|--------------------|---------------|------------------------| + + 1 1/2 +|--21b~-----|--21p19*~------|--------------------|------------|------------| +|-----------|---------------|------15--------15--|-----15dive-|-15bfdive---| +|-----------|---------------|-14bf------14bf-----|-14b--------|------------| +|-----------|---------------|--------------------|------------|------------| +|-----------|---------------|--------------------|------------|------------| +|-----------|---------------|--------------------|------------|------------| + + +Keyboard Solo +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| +|--------------------|-----------------|-----------------|-----------------| + + +w/keyboards + +|-------------------|-----------------|----------------------13--12--------| +|-------------------|-10~---------9~--|-------10--9--13--12----------------| +|-(9)s10~------9----|-----------------|10--9-------------------------------| +|-------------------|-----------------|------------------------------------| +|-------------------|-----------------|------------------------------------| +|-------------------|-----------------|------------------------------------| + + 1 1/2 +|-17--16--20--19--21b~\----|-20-19-17-16-17-19-20-19-17-16-17-19-|-20-19---- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- +|--------------------------|-------------------------------------|---------- + + 1/2 +-17\16---------------------------|-----------------------------------------| +--------18-17----15--------------|-----------------------------------------| +---------------------17-16-14-13-|--\10~------------9b---------------------| +---------------------------------|-----------12----------------------------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| + + +Repeat chorus + + +|-----8--12------8--12------8-|-12--8--10------8------------|-12h13p12p10--- +|-10---------10---------10----|------------12-----10--12--8-|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- +|-----------------------------|-----------------------------|--------------- + + +-------------------------------|-------------------------------------------| +-13p12p10s9--------------------|-(9)s10p9----------------------------------| +------------12p10--9-----------|----------12--10p9------10p9---------------| +----------------------12p10--9-|--------------------12--------12--10p9-----| +-------------------------------|----------------------------------------11-| +-------------------------------|-------------------------------------------| + + +|------------------------------| +|------------------------------| +|------------------------------| +|------------------------------| +|---12~------------------------| +|------------------------------| + diff --git a/guitar/tabs/Malmsteen/bad_blood.tab b/guitar/tabs/Malmsteen/bad_blood.tab new file mode 100644 index 0000000..2b3ca5e --- /dev/null +++ b/guitar/tabs/Malmsteen/bad_blood.tab @@ -0,0 +1,71 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Fri, 07 Mar 2003 15:46:59 -0500 +From: "DEGRANDPRE, YANICK" +Subject: m/malmsteen_yngwie/bad_blood.tab + + +Artist: Yngwie Malmsteen +Song Title: "Bad Blood" +Album: The Seventh Sign +Transcribed by: Upnorth + + +Tune down ½ step + +Intro (2x) +|------------------------------------------------------------------------| +|-----------------------------5-8-------8-7~-----6p5---------------------| +|-----2--2--------2--2------5---------5--------------5-------------------| +|-----2--2--------2--2---/7---------7-----------------(7)----------------| +|-7\--0--0--0--0--0--0---------------------------------------------------| +|------------------------------------------------------------------------| + +|------------------------------------------------------------------------| +|-----------------------------5-8-------7fb--6h8p6p5---------------------| +|-----2--2--------2--2------5---------5--------------5-------------------| +|-----2--2--------2--2---/7---------7-----------------(7)----------------| +|-----0--0--0--0--0--0---------------------------------------------------| +|------------------------------------------------------------------------| + + +These chords are a bit unusual in Yngwie's "repertoire" so I am not sure +they are 100% OK. Anyway it sounds close enough. + +Verses +|-1-1--------------------------------------------------------------------| +|-1-1---------3---3-----10----10-----12----12----------------------------| +|-2-2---------4---4-----10----10-----12----12----------------------------| +|-3-3-------3---3--------------------------------------------------------| +|-3-3----------------12~---12-----14----14-------------------------------| +|-1-1-1-1-1--------------------------------------------------------------| + +|-1------------3-----3-------(9)-----------------------------------------| +|-1------------3-----3-------10--------------9---------------------------| +|-2------------4-----4--------9--------------9---------------------------| +|-3---3--3--3-----3----------12--0-0-0-0-0---7---------------------------| +|-3------------------------------------------0---------------------------| +|-1----------------------------------------------------------------------| + +Repeat intro with slight variations + +Build-up to the solo +|------------------------------------------------------------------------| +|---------------------------------------------------------------------5--| +|---------------------------------------------2-----2-4---2-4-5-2-4-5----| +|---------------------2-----2-3---2-3-5-2-3-5---3-5-----5----------------| +|---2-3---2-3-5-2-3-5---3-5-----5----------------------------------------| +|-5-----5----------------------------------------------------------------| + +|------------------------------------------------------------------------| +|------------------------------------------------------------------------| +|-7-5-4------------------------------------------------------------------| +|-------7-5---------------8----------------------------------------------| +|-----------8-7-5---------8----------------------------------------------| +|-----------------8-7-5~--6----------------------------------------------| + diff --git a/guitar/tabs/Malmsteen/bad_blood.tab.txt b/guitar/tabs/Malmsteen/bad_blood.tab.txt new file mode 100644 index 0000000..2b3ca5e --- /dev/null +++ b/guitar/tabs/Malmsteen/bad_blood.tab.txt @@ -0,0 +1,71 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Fri, 07 Mar 2003 15:46:59 -0500 +From: "DEGRANDPRE, YANICK" +Subject: m/malmsteen_yngwie/bad_blood.tab + + +Artist: Yngwie Malmsteen +Song Title: "Bad Blood" +Album: The Seventh Sign +Transcribed by: Upnorth + + +Tune down ½ step + +Intro (2x) +|------------------------------------------------------------------------| +|-----------------------------5-8-------8-7~-----6p5---------------------| +|-----2--2--------2--2------5---------5--------------5-------------------| +|-----2--2--------2--2---/7---------7-----------------(7)----------------| +|-7\--0--0--0--0--0--0---------------------------------------------------| +|------------------------------------------------------------------------| + +|------------------------------------------------------------------------| +|-----------------------------5-8-------7fb--6h8p6p5---------------------| +|-----2--2--------2--2------5---------5--------------5-------------------| +|-----2--2--------2--2---/7---------7-----------------(7)----------------| +|-----0--0--0--0--0--0---------------------------------------------------| +|------------------------------------------------------------------------| + + +These chords are a bit unusual in Yngwie's "repertoire" so I am not sure +they are 100% OK. Anyway it sounds close enough. + +Verses +|-1-1--------------------------------------------------------------------| +|-1-1---------3---3-----10----10-----12----12----------------------------| +|-2-2---------4---4-----10----10-----12----12----------------------------| +|-3-3-------3---3--------------------------------------------------------| +|-3-3----------------12~---12-----14----14-------------------------------| +|-1-1-1-1-1--------------------------------------------------------------| + +|-1------------3-----3-------(9)-----------------------------------------| +|-1------------3-----3-------10--------------9---------------------------| +|-2------------4-----4--------9--------------9---------------------------| +|-3---3--3--3-----3----------12--0-0-0-0-0---7---------------------------| +|-3------------------------------------------0---------------------------| +|-1----------------------------------------------------------------------| + +Repeat intro with slight variations + +Build-up to the solo +|------------------------------------------------------------------------| +|---------------------------------------------------------------------5--| +|---------------------------------------------2-----2-4---2-4-5-2-4-5----| +|---------------------2-----2-3---2-3-5-2-3-5---3-5-----5----------------| +|---2-3---2-3-5-2-3-5---3-5-----5----------------------------------------| +|-5-----5----------------------------------------------------------------| + +|------------------------------------------------------------------------| +|------------------------------------------------------------------------| +|-7-5-4------------------------------------------------------------------| +|-------7-5---------------8----------------------------------------------| +|-----------8-7-5---------8----------------------------------------------| +|-----------------8-7-5~--6----------------------------------------------| + diff --git a/guitar/tabs/Malmsteen/bedroom_eyes.tab b/guitar/tabs/Malmsteen/bedroom_eyes.tab new file mode 100644 index 0000000..5fdd3a7 --- /dev/null +++ b/guitar/tabs/Malmsteen/bedroom_eyes.tab @@ -0,0 +1,333 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen "Bedroom Eyes" +from Eclipse +letostak@netcom.com Judy Letostak + + + +||-----------|---------------------------|---------------------------------| +||-----------|---------------------------|---------------------------------| +||-----------|---------------------------|---------------------------------| +||-----------|---------------------------|---------------------------------| +||--5tr7~----|-5h7------------5--5--5h7--|-5h7------------5--5-------------| +||-----------|-----0-0--0-5h7------------|-----0-0--0-5-7-------3~---------| + + +|----------------------------|-----------------------------|| +|----------------------------|-----------------------------|| repeat 2x +|----------------------------|-----------------------------|| +|----------------------------|-----------------5-----------|| +|-5h7-------------5--5-5h7~--|-5h7---------------7-5-------|| +|------0-0--0-5h7------------|------0-0--0-5-7-------7-3~--|| + + +last time +|----------------| +|----------------| +|----------------| +|----2-----------| +|----2-----------| +|----0-----12\---| + + +1. Come .. +2. Over .. + +Verse +||----------------------------|-------------------------|------------------- +||----------------------------|-------------------------|------------------- +||----------------------------|-------------------------|------------------- +||-5--------------------------|-------------------------|------------------- +||-5h7--------------5-5-5h7~--|-5h7------------5-5p0----|-5h7-----------5--- +||------0--0--0-5-7-----------|-----0-0--0-5-7-------3~-|-----0-0-0-5-7----- + + +like .. +since .. + +---------|------------------------------|----------------------------------| +---------|------------------------------|----------------------------------| +---------|------------------------------|----------------------------------| +---------|-----------------5------------|----------------------------------| +-5-5h7~--|-5h7---------------7-5--------|-5h7------------5-5-5h7~----------| +---------|------0-0--0-5-7--------7-3~--|-----0-0--0-5-7-------------------| + + +this .. +Is .. + +|----------------------------|------------------------|--------------------- +|----------------------------|------------------------|--------------------- +|----------------------------|------------------------|--------------------- +|----------------------------|------------------------|--------------5------ +|-5h7-------------5--5p0-----|5h7------------5-5-5h7~-|5h7-------------7-5-- +|-----0-0--0-5-7---------3~--|----0-0--0-5-7----------|----0-0-0-5-7-------- + + +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-7-3~--|-------------------------------------------------------------------- + + +By my .. + +Bridge +|------------------|-------------|--------------------------|--------------- +|------------------|-------------|--------------------------|--------------- +|-5--------7--7~---|-5--------7--|--------------------------|--------------- +|-5--------7--7~---|-5--------7--|--------------------------|--------------- +|-0--0--0--0-------|-0--0--0-----|5h7------------5-5-5tr7-5-|-5h7----------- +|------------------|-------------|----0-0--0-5h7------------|-----0-0--0-5-7 + + Through .. + +-------------|------------------|-------------|----------------------------| +-------------|------------------|-------------|----------------------------| +-------------|-5--------7--7~---|-5--------7--|-5------------0-------------| +-------------|-5--------7--7~---|-5--------7--|-5-----3--4---0-------------| +--5--5p0-----|-0--0--0--0-------|-0--0--0-----|-3--------------------------| +---------3~--|------------------|-------------|----0--1--2---3-------------| + +your .. + +|------------------|-----------------------------|-------------------------| +|------------------|-----------------------------|-------------------------| +|----5*--w/bar-----|-------0---------------------|------0----------------2-| +|------------------|--0h2--0-----0h2-----2-------|-0h2--0-----0h2--------2-| +|------------------|--0h2--------0h2-----0-------|-0h2--------0h2----3-----| +|------------------|----------0-------0------3~--|---------0-------0-------| + + +in .. + +|--------------|---------------------------|---------------------------| +|--------------|---------------------------|---------------------------| +|--------------|-------0-------------------|-------0----------------2--| +|--5---7---7---|-0h2---2-----0h2-----2-----|-0h2---2-----0h2-----2--0--| +|--3---4---5---|-0h2---------0h2-----0-----|-0h2---------0h2-----3-----| +|--------------|----------0-------0-----3--|----------0-------0--------| + + +|---------------------------| +|---------------------------| +|-------0-------------------| +|-0h2---2-----0h2-----2-----| +|-0h2---------0h2-----0-----| +|----------0-------0-----3--| + + + end 1 +|--------------|------------------------------|| +|--------------|------------------------------|| +|--------------|------------------------------|| +|--5---7---7---|-2----------------------------|| +|--3---4---5---|-0----------------------------|| +|--------------|------------------------------|| + + + + for .. + +end 2 +|---------------------|-----------------------------------------------------| +|---------------------|-----------------------------------------------------| +|---------------2-----|-----------------------------------------------------| +|--5-----7------0-----|-----------------------------------------------------| +|--3-----4------0-----|-----------------------------------------------------| +|---------------------|---0-dive-w/bar--------------------------------------| + + +guitar solo +w/wah +|------------------------------|------------------------|------------------- +|------------------------------|------------------------|------------------- +|------------------------------|------------------------|------------------- +|------------------------------|------------------------|------------------- +|--------0h2-----0h2--2-0------|-----0h2----0h2-2p0-----|-----0h2-----0h2-2p0 +|--2--2-------2------------2p0-|-2-2-----2----------2p0-|-2-2------2-------- + + +-----|--------------x--x------x--x-------|---------------------------------| +-----|--------------x--x------x--x-------|---------------------------------| +-----|--------------------x-x------x--x--|-14-----14--------14-------14~---| +-----|-----------------------------------|-14-x-x-14-x-x-14-14-14-x--------| +-----|-----0h2---------------------------|---------------------------------| +-2p0-|-2-2------2------------------------|---------------------------------| + + 1/4 +|----------------------------------------|---------------------------------| +|-----------------17bf-rb17-14----14~----|---------------------------------| +|-14-----16-14b----------------16--------|-14-x-x---14---------14------14~-| +|----x-x------------------------------16-|--------x----x-x-x-x----14-x-----| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| + + 1/2 1 1/2 +|--------------------------------|-21b~--21-20-19-17-19h20p19p17-|-19\-7h8p7 +|---------------17---------------|-------------------------------|---------- +|-14-----14--------16b--rb14-----|-------------------------------|---------- +|----x-x----x-x--------------x-x-|-------------------------------|---------- +|--------------------------------|-------------------------------|---------- +|--------------------------------|-------------------------------|---------- + + +-p5------------2-----------|--------------------------------|--------------- +----7p5----------5p2-------|-------2---2----2---2---2-2-----|--------------- +--------0-4bf--------4-2~--|---4h5---5----5---5---5-----5-4-|-2-4p2---2h4p2- +---------------------------|-4------------------------------|-------4------- +---------------------------|--------------------------------|--------------- +---------------------------|--------------------------------|--------------- + + +----------------------|---------------------------|------------------------- +----------------------|---------------------------|----------------14------- +-h4-4bf--2~w/bar--p0--|-14bf---14bf--rb14-11-14~--|-------14-16h17----16h17- +----------------------|---------------------------|-14/16------------------- +----------------------|---------------------------|------------------------- +----------------------|---------------------------|------------------------- + + +----------------------------------------------|----14-16h17p16p14-16p14----- +-14-14-17----14-17----14-17----14-17----14-16-|-17----------------------17-- +----------17-------17-------17-------17-------|----------------------------- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- + + +-14----14----------14-------------14-18p14-19p14|h20p14-21p14-20p14-19p14--- +----17----17p14-------14-17----14---------------|-------------------------17 +----------------17----------17------------------|--------------------------- +------------------------------------------------|--------------------------- +------------------------------------------------|--------------------------- +------------------------------------------------|--------------------------- + + +--14-14---------------|-----------------------------|----------------------| +-----------14---------|-----------------------------|15bf------------------| +--------17-----0-16~--|-14bf--14bf--14-12~-----14-12|-----14bf-14-12~------| +----------------------|---------------------12------|-----------------14\--| +----------------------|-----------------------------|----------------------| +----------------------|-----------------------------|----------------------| + + +|-------------------------15-|-17bf-18-17bf-17-15~-\-0-|-------15-15-------- +|-------------------15/17----|-----------------------0-|-15h17-------12h15-- +|-------12----14-12----------|-------------------------|-------------------- +|-12h14----14----------------|-------------------------|-------------------- +|----------------------------|-------------------------|-------------------- +|----------------------------|-------------------------|-------------------- + + +-------|----------------15p12--------------------------12----|-15p12-------- +-------|-------12-15p12-------15p12----12-15p12----12--15p12-|-------15p12-- +-14bf--|-rb14-----------------------15----------15-----------|-------------- +-------|-----------------------------------------------------|-------------- +-------|-----------------------------------------------------|-------------- +-------|-----------------------------------------------------|-------------- + + +-----12----------15p12---------------------------|-------/17-14------------| +--------15p12h15-------15p12---------------------|--------------15---------| +--14-------------------------15-14p12----12-14bf-|-12~\------------14p0----| +--------------------------------------14---------|-------------------------| +-------------------------------------------------|-------------------------| +-------------------------------------------------|-------------------------| + + +Ooh, .. + +|-------------------------|-------------|----------------|-----------------| +|--15bf---15b-15-15-15-15-|-15bf--rb15--|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| + +Guess .. (verse riff) + +Guitar solo + +|-/14---/14--|-14-14-15-12--12-10-10-10-10-\7-7-7--|------0----------------- +|------------|-------------------------------------|--------3-0------------- +|-/11---/11--|-11-11-12--9---9--7--7--7--7-\4-4-4--|-2bf--------2bf-rb2p0--- +|------------|-------------------------------------|------------------------ +|------------|-------------------------------------|------------------------ +|------------|-------------------------------------|------------------------ + + +-------|------------12-----------------------------------|-15bf------------- +-------|---------12-12------12-12-15-12------------------|------15bf-rb15--- +-------|-12-14bf-------14bf-------------15p14-12----14p0-|------------------ +--2/14-|-----------------------------------------14------|------------------ +-------|-------------------------------------------------|------------------ +-------|-------------------------------------------------|------------------ + + +------------------------------------|--------------------------14-15p|14---- +----------15----12------------------|-----------------14-15-17-------|------ +-14-14-12----14----12-14-12~-w/bar--|-\--/12-14h15-16----------------|------ +------------------------------------|--------------------------------|------ +------------------------------------|--------------------------------|------ +------------------------------------|--------------------------------|------ + + +---------------------------------------------------------------------------| +-17bf-rb17p15-15p12-12h15-12----12----12-----------------------------------| +-----------------------------15----15----15-14-15-14p12----14-12-11--------| +--------------------------------------------------------14----------14-----| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + 1 1/2 1/4 +|---------------------------------------------|-19b--19b--rb19--18-17-15b--| +|---------------------------------------------|----------------------------| +|-12p11----11---------------------------------|----------------------------| +|-------14----14p12----14---------------------|----------------------------| +|-------------------14----12\11-12bf--0--12\--|----------------------------| +|-------------------------------------0--12\--|----------------------------| + + 1/4 +|----17----15bp17-17-15-----------|-------12---------12------12------------| +|-17----17--------------17p15bf~--|----12---------12----15~--12-12---------| +|---------------------------------|-14-------14bf-------------------14~----| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| + + +|-------------------12h15p12-14-12----0------------------------------------| +|----------12h14-15----------------15-12h14--------------------------------| +|-12-14-15----------------------------------15-12h15-12-14-12----12p11-----| +|-------------------------------------------------------------14-------14--| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|----------------------------------------------------|---------------------- +|----------------------------------------------------|---------------------- +|----------------------------------------------12-12-|-fade out------------- +|-12-12-14-12p11-12p11----11-11----------12h14-------|---------------------- +|----------------------14-------14-12p11-------------|---------------------- +|----------------------------------------------------|---------------------- + + +h hammeron +p pulloff +tr trill +b bend +bf bend full +rb release bend +* natural harmonic +/ slide up +\ slide down +w/bar with bar vibrato or dive +~ vibrato +x no note mute the string + diff --git a/guitar/tabs/Malmsteen/bedroom_eyes.tab.txt b/guitar/tabs/Malmsteen/bedroom_eyes.tab.txt new file mode 100644 index 0000000..5fdd3a7 --- /dev/null +++ b/guitar/tabs/Malmsteen/bedroom_eyes.tab.txt @@ -0,0 +1,333 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen "Bedroom Eyes" +from Eclipse +letostak@netcom.com Judy Letostak + + + +||-----------|---------------------------|---------------------------------| +||-----------|---------------------------|---------------------------------| +||-----------|---------------------------|---------------------------------| +||-----------|---------------------------|---------------------------------| +||--5tr7~----|-5h7------------5--5--5h7--|-5h7------------5--5-------------| +||-----------|-----0-0--0-5h7------------|-----0-0--0-5-7-------3~---------| + + +|----------------------------|-----------------------------|| +|----------------------------|-----------------------------|| repeat 2x +|----------------------------|-----------------------------|| +|----------------------------|-----------------5-----------|| +|-5h7-------------5--5-5h7~--|-5h7---------------7-5-------|| +|------0-0--0-5h7------------|------0-0--0-5-7-------7-3~--|| + + +last time +|----------------| +|----------------| +|----------------| +|----2-----------| +|----2-----------| +|----0-----12\---| + + +1. Come .. +2. Over .. + +Verse +||----------------------------|-------------------------|------------------- +||----------------------------|-------------------------|------------------- +||----------------------------|-------------------------|------------------- +||-5--------------------------|-------------------------|------------------- +||-5h7--------------5-5-5h7~--|-5h7------------5-5p0----|-5h7-----------5--- +||------0--0--0-5-7-----------|-----0-0--0-5-7-------3~-|-----0-0-0-5-7----- + + +like .. +since .. + +---------|------------------------------|----------------------------------| +---------|------------------------------|----------------------------------| +---------|------------------------------|----------------------------------| +---------|-----------------5------------|----------------------------------| +-5-5h7~--|-5h7---------------7-5--------|-5h7------------5-5-5h7~----------| +---------|------0-0--0-5-7--------7-3~--|-----0-0--0-5-7-------------------| + + +this .. +Is .. + +|----------------------------|------------------------|--------------------- +|----------------------------|------------------------|--------------------- +|----------------------------|------------------------|--------------------- +|----------------------------|------------------------|--------------5------ +|-5h7-------------5--5p0-----|5h7------------5-5-5h7~-|5h7-------------7-5-- +|-----0-0--0-5-7---------3~--|----0-0--0-5-7----------|----0-0-0-5-7-------- + + +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-7-3~--|-------------------------------------------------------------------- + + +By my .. + +Bridge +|------------------|-------------|--------------------------|--------------- +|------------------|-------------|--------------------------|--------------- +|-5--------7--7~---|-5--------7--|--------------------------|--------------- +|-5--------7--7~---|-5--------7--|--------------------------|--------------- +|-0--0--0--0-------|-0--0--0-----|5h7------------5-5-5tr7-5-|-5h7----------- +|------------------|-------------|----0-0--0-5h7------------|-----0-0--0-5-7 + + Through .. + +-------------|------------------|-------------|----------------------------| +-------------|------------------|-------------|----------------------------| +-------------|-5--------7--7~---|-5--------7--|-5------------0-------------| +-------------|-5--------7--7~---|-5--------7--|-5-----3--4---0-------------| +--5--5p0-----|-0--0--0--0-------|-0--0--0-----|-3--------------------------| +---------3~--|------------------|-------------|----0--1--2---3-------------| + +your .. + +|------------------|-----------------------------|-------------------------| +|------------------|-----------------------------|-------------------------| +|----5*--w/bar-----|-------0---------------------|------0----------------2-| +|------------------|--0h2--0-----0h2-----2-------|-0h2--0-----0h2--------2-| +|------------------|--0h2--------0h2-----0-------|-0h2--------0h2----3-----| +|------------------|----------0-------0------3~--|---------0-------0-------| + + +in .. + +|--------------|---------------------------|---------------------------| +|--------------|---------------------------|---------------------------| +|--------------|-------0-------------------|-------0----------------2--| +|--5---7---7---|-0h2---2-----0h2-----2-----|-0h2---2-----0h2-----2--0--| +|--3---4---5---|-0h2---------0h2-----0-----|-0h2---------0h2-----3-----| +|--------------|----------0-------0-----3--|----------0-------0--------| + + +|---------------------------| +|---------------------------| +|-------0-------------------| +|-0h2---2-----0h2-----2-----| +|-0h2---------0h2-----0-----| +|----------0-------0-----3--| + + + end 1 +|--------------|------------------------------|| +|--------------|------------------------------|| +|--------------|------------------------------|| +|--5---7---7---|-2----------------------------|| +|--3---4---5---|-0----------------------------|| +|--------------|------------------------------|| + + + + for .. + +end 2 +|---------------------|-----------------------------------------------------| +|---------------------|-----------------------------------------------------| +|---------------2-----|-----------------------------------------------------| +|--5-----7------0-----|-----------------------------------------------------| +|--3-----4------0-----|-----------------------------------------------------| +|---------------------|---0-dive-w/bar--------------------------------------| + + +guitar solo +w/wah +|------------------------------|------------------------|------------------- +|------------------------------|------------------------|------------------- +|------------------------------|------------------------|------------------- +|------------------------------|------------------------|------------------- +|--------0h2-----0h2--2-0------|-----0h2----0h2-2p0-----|-----0h2-----0h2-2p0 +|--2--2-------2------------2p0-|-2-2-----2----------2p0-|-2-2------2-------- + + +-----|--------------x--x------x--x-------|---------------------------------| +-----|--------------x--x------x--x-------|---------------------------------| +-----|--------------------x-x------x--x--|-14-----14--------14-------14~---| +-----|-----------------------------------|-14-x-x-14-x-x-14-14-14-x--------| +-----|-----0h2---------------------------|---------------------------------| +-2p0-|-2-2------2------------------------|---------------------------------| + + 1/4 +|----------------------------------------|---------------------------------| +|-----------------17bf-rb17-14----14~----|---------------------------------| +|-14-----16-14b----------------16--------|-14-x-x---14---------14------14~-| +|----x-x------------------------------16-|--------x----x-x-x-x----14-x-----| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| + + 1/2 1 1/2 +|--------------------------------|-21b~--21-20-19-17-19h20p19p17-|-19\-7h8p7 +|---------------17---------------|-------------------------------|---------- +|-14-----14--------16b--rb14-----|-------------------------------|---------- +|----x-x----x-x--------------x-x-|-------------------------------|---------- +|--------------------------------|-------------------------------|---------- +|--------------------------------|-------------------------------|---------- + + +-p5------------2-----------|--------------------------------|--------------- +----7p5----------5p2-------|-------2---2----2---2---2-2-----|--------------- +--------0-4bf--------4-2~--|---4h5---5----5---5---5-----5-4-|-2-4p2---2h4p2- +---------------------------|-4------------------------------|-------4------- +---------------------------|--------------------------------|--------------- +---------------------------|--------------------------------|--------------- + + +----------------------|---------------------------|------------------------- +----------------------|---------------------------|----------------14------- +-h4-4bf--2~w/bar--p0--|-14bf---14bf--rb14-11-14~--|-------14-16h17----16h17- +----------------------|---------------------------|-14/16------------------- +----------------------|---------------------------|------------------------- +----------------------|---------------------------|------------------------- + + +----------------------------------------------|----14-16h17p16p14-16p14----- +-14-14-17----14-17----14-17----14-17----14-16-|-17----------------------17-- +----------17-------17-------17-------17-------|----------------------------- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- + + +-14----14----------14-------------14-18p14-19p14|h20p14-21p14-20p14-19p14--- +----17----17p14-------14-17----14---------------|-------------------------17 +----------------17----------17------------------|--------------------------- +------------------------------------------------|--------------------------- +------------------------------------------------|--------------------------- +------------------------------------------------|--------------------------- + + +--14-14---------------|-----------------------------|----------------------| +-----------14---------|-----------------------------|15bf------------------| +--------17-----0-16~--|-14bf--14bf--14-12~-----14-12|-----14bf-14-12~------| +----------------------|---------------------12------|-----------------14\--| +----------------------|-----------------------------|----------------------| +----------------------|-----------------------------|----------------------| + + +|-------------------------15-|-17bf-18-17bf-17-15~-\-0-|-------15-15-------- +|-------------------15/17----|-----------------------0-|-15h17-------12h15-- +|-------12----14-12----------|-------------------------|-------------------- +|-12h14----14----------------|-------------------------|-------------------- +|----------------------------|-------------------------|-------------------- +|----------------------------|-------------------------|-------------------- + + +-------|----------------15p12--------------------------12----|-15p12-------- +-------|-------12-15p12-------15p12----12-15p12----12--15p12-|-------15p12-- +-14bf--|-rb14-----------------------15----------15-----------|-------------- +-------|-----------------------------------------------------|-------------- +-------|-----------------------------------------------------|-------------- +-------|-----------------------------------------------------|-------------- + + +-----12----------15p12---------------------------|-------/17-14------------| +--------15p12h15-------15p12---------------------|--------------15---------| +--14-------------------------15-14p12----12-14bf-|-12~\------------14p0----| +--------------------------------------14---------|-------------------------| +-------------------------------------------------|-------------------------| +-------------------------------------------------|-------------------------| + + +Ooh, .. + +|-------------------------|-------------|----------------|-----------------| +|--15bf---15b-15-15-15-15-|-15bf--rb15--|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| +|-------------------------|-------------|----------------|-----------------| + +Guess .. (verse riff) + +Guitar solo + +|-/14---/14--|-14-14-15-12--12-10-10-10-10-\7-7-7--|------0----------------- +|------------|-------------------------------------|--------3-0------------- +|-/11---/11--|-11-11-12--9---9--7--7--7--7-\4-4-4--|-2bf--------2bf-rb2p0--- +|------------|-------------------------------------|------------------------ +|------------|-------------------------------------|------------------------ +|------------|-------------------------------------|------------------------ + + +-------|------------12-----------------------------------|-15bf------------- +-------|---------12-12------12-12-15-12------------------|------15bf-rb15--- +-------|-12-14bf-------14bf-------------15p14-12----14p0-|------------------ +--2/14-|-----------------------------------------14------|------------------ +-------|-------------------------------------------------|------------------ +-------|-------------------------------------------------|------------------ + + +------------------------------------|--------------------------14-15p|14---- +----------15----12------------------|-----------------14-15-17-------|------ +-14-14-12----14----12-14-12~-w/bar--|-\--/12-14h15-16----------------|------ +------------------------------------|--------------------------------|------ +------------------------------------|--------------------------------|------ +------------------------------------|--------------------------------|------ + + +---------------------------------------------------------------------------| +-17bf-rb17p15-15p12-12h15-12----12----12-----------------------------------| +-----------------------------15----15----15-14-15-14p12----14-12-11--------| +--------------------------------------------------------14----------14-----| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + 1 1/2 1/4 +|---------------------------------------------|-19b--19b--rb19--18-17-15b--| +|---------------------------------------------|----------------------------| +|-12p11----11---------------------------------|----------------------------| +|-------14----14p12----14---------------------|----------------------------| +|-------------------14----12\11-12bf--0--12\--|----------------------------| +|-------------------------------------0--12\--|----------------------------| + + 1/4 +|----17----15bp17-17-15-----------|-------12---------12------12------------| +|-17----17--------------17p15bf~--|----12---------12----15~--12-12---------| +|---------------------------------|-14-------14bf-------------------14~----| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| + + +|-------------------12h15p12-14-12----0------------------------------------| +|----------12h14-15----------------15-12h14--------------------------------| +|-12-14-15----------------------------------15-12h15-12-14-12----12p11-----| +|-------------------------------------------------------------14-------14--| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|----------------------------------------------------|---------------------- +|----------------------------------------------------|---------------------- +|----------------------------------------------12-12-|-fade out------------- +|-12-12-14-12p11-12p11----11-11----------12h14-------|---------------------- +|----------------------14-------14-12p11-------------|---------------------- +|----------------------------------------------------|---------------------- + + +h hammeron +p pulloff +tr trill +b bend +bf bend full +rb release bend +* natural harmonic +/ slide up +\ slide down +w/bar with bar vibrato or dive +~ vibrato +x no note mute the string + diff --git a/guitar/tabs/Malmsteen/bite_the_bullet.tab b/guitar/tabs/Malmsteen/bite_the_bullet.tab new file mode 100644 index 0000000..7929e4b --- /dev/null +++ b/guitar/tabs/Malmsteen/bite_the_bullet.tab @@ -0,0 +1,230 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) +Subject: TAB: Yngwie Malmsteen "Bite the Bullet" + +Yngwie Malmsteen "Bite the Bullet" +from Odyssey +letostak@netcom.com +tune down 1/2 step + + +|---------|----------------------------|-----------------------------------| +|---------|----------------------------|-----------------------------------| +|---------|----------------------------|-----------------------------------| +|---------|----------------------------|-----------------------------------| +|---------|---------------------5h7h9--|----------------------5h7h9--------| +|-12s19s--|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------| + + +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|---------------------5h7h9--|----------------------5h7h9--------|---------- +|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------|---------- + + +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|---------------------5h7h9--|----------------------5h7h9--------|---------- +|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------|---------- + + +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|---------------------5h7h9--|----------------------5h7h9--------|---------- +|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------|---------- + + + +|---------------------------|------------------------|-----------------------| +|---------------------------|------------------------|-----------------------| +|---------------------------|------------------------|-----------------------| +|---------------------------|7p4-5p4-----7p4-5p4-----|7p4-5p4-----7p4-5p4--- | +|---------------------6h7h9-|--------7p6---------7p6-|--------7p6---------7p6| +|-7-7-7-7-7-7-7-5-7-8-------|------------------------|-----------------------| + + +|----------------------|--------------------------|------------------------| +|----------------------|--------------------------|-------------10p7-8p7---| +|----------------------|--------------------------|9----8---------------9p8| +|7p4-5p4---7p4-5p4-----|7p4-5p4-----10p7-9p7------|--10---10p9p7-----------| +|------7p6---------7p6-|--------7p6----------10p9-|------------------------| +|----------------------|--------------------------|------------------------| + + 1 1/2 +|-------------|-------------|----------------|21b---0-----21b------0-------| +|10p7-8p7-----|-12~---------|----------------|------0--------------0-------| +|---------9p8-|-------------|----------------|------0--------------0-------| +|-------------|-------------|----------------|-----------------------------| +|-------------|-------------|----------------|-----------------------------| +|-------------|-------------|----------------|-----------------------------| + + +|-s17-------------19h20-19-17-19-17-------|17------------------------------- +|-----20-20-19h20-------------------20-19-|---20-19-17-20-19-17-16-17p16---- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- + + +----------|---------------------------------------------------|------------- +----------|19-17p16----------------------15h17p15-------------|------------- +17p16-----|---------17-16----------16h17----------17-16-17-14-|17p16p14----- +------19--|---------------19-17h19----------------------------|------------- +----------|---------------------------------------------------|------------- +----------|---------------------------------------------------|------------- + + +---------------------------12-15p12-19p15-|---19p15----20p15----15h19p15---- +------------------12----12----------------|17-------17-------17----------17- +---------12-16p12----12-------------------|--------------------------------- +17p16p14----------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- + + +15-19p15-----|15h20p15----15h19p15----15h19p15-17p15h17p15-|---15h17p15h17p- +---------17--|---------17----------17----------------------|19-------------- +-------------|---------------------------------------------|---------------- +-------------|---------------------------------------------|---------------- +-------------|---------------------------------------------|---------------- +-------------|---------------------------------------------|---------------- + + 1/2 +15----15-17-15----15-------|-----------------17-----------15-|20p19p17------ +---19----------19----19br--|17~--(0)--20bf-------0-----17----|-------------- +---------------------------|-----(0)----------------16-------|-------------- +---------------------------|---------------------------------|-------------- +---------------------------|---------------------------------|-------------- +---------------------------|---------------------------------|-------------- + + +19p17-19p17-------17---------------------|-------------12h15p12h14h15p14p12-| +------------20p19----20-19-17-20-19-17s--|---16bfr-bf-----------------------| +-----------------------------------------|----------------------------------| +-----------------------------------------|0---------------------------------| +-----------------------------------------|----------------------------------| +-----------------------------------------|----------------------------------| + + +|t19p12h14h15p14p12-t21p12h14h15p14p12-t17p12h14p15p14p12-t19p12h14h15p14p12| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + + +|t17p15p14p12h15p12h14-----------------------------------------|------------ +|----------------------h15t17p13h15p13-15p13p12----13p12-------|------------ +|-----------------------------------------------14-------14-12-|-14-12p11--- +|--------------------------------------------------------------|------------ +|--------------------------------------------------------------|------------ +|--------------------------------------------------------------|------------ + + +-----------------------|---------|------------|----------------------------- +-----------------------|---------|------------|----------------------------- +---9-11-9----9---------|---------|------------|------------------16-14-16--- +14--------12-----s14~--|---------|------------|17-14-16-17-16-14------------ +-----------------------|-19~-----|--19dive----|----------------------------- +-----------------------|---------|------------|----------------------------- + + +---------|-----------------------------------|17p16p15h17p15p14-17bf-| +---------|19-16-17-19-17-16-20-17-19-20-19-17|-----------------------| +17-16-14-|-----------------------------------|-----------------------| +---------|-----------------------------------|-----------------------| +---------|-----------------------------------|-----------------------| +---------|-----------------------------------|-----------------------| + +trill +|15tr19--12tr15--7tr12--3tr7-|-0tr3--------0dive--|-------------12bfr--12bf| +|----------------------------|------0tr5----------|------------------------| +|----------------------------|--------------------|-9h12~--12--------------| +|----------------------------|--------------------|------------------------| +|----------------------------|--------------------|------------------------| +|----------------------------|--------------------|------------------------| + + +|-14-11-12-14-14-12-13-15h17|14-15-17s19-17-15----17-15-------15-----------| +|---------------------------|------------------19-------19-17----19-17-16--| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| + + +|-------------------------------------------------|------------------------| +|-19p17p16----------------------------------------|------------------------| +|----------17-16p14-------------------------------|------------------------| +|-------------------17-16-14-13-------------------|------------------------| +|-------------------------------15-14-12----------|------------------------| +|----------------------------------------15-14-12-|-11---------------------| + + +|20--19-17-19-20-19|h20p19p17h19p17----------------17-20-17----|------------ +|------------------|----------------20p19p17----19----------19-|------------ +|------------------|-------------------------20----------------|-20~-------- +|------------------|-------------------------------------------|------------ +|------------------|-------------------------------------------|------------ +|------------------|-------------------------------------------|------------ + + +|-------14-17p14-------------11-14p11-|14~---|12-14-15p14-15s17p16p15h16---| +|----16----------16-------13----------|------|-----------------------------| +|-17----------------17s14-------------|------|-----------------------------| +|-------------------------------------|------|-----------------------------| +|-------------------------------------|------|-----------------------------| +|-------------------------------------|------|-----------------------------| + + +|-------14-17----14h17-20p19p17-20----------|------------------------------| +|-17-16-------16-------------------19p17-16-|------------------------------| +|-------------------------------------------|19-17p16----------------------| +|-------------------------------------------|---------19p17p16-------------| +|-------------------------------------------|------------------19-18-------| +|-------------------------------------------|------------------------------| + +w/echo +|16tr19---18tr21--|---------------------------------|----------------------| +|-----------------|17tr18--15tr17---13h15-t17-15p13-|-12h13p12----12-------| +|-----------------|---------------------------------|----------14----13----| +|-----------------|---------------------------------|----------------------| +|-----------------|---------------------------------|----------------------| +|-----------------|---------------------------------|----------------------| + +echo off +|-------------------------------------------12-|17p12----12-17-12-20p17----- +|----------------------17p13-------------13----|------13----------------17-- +|-17p14-------------14-------14-------14-------|---------------------------- +|-------14-------14-------------14-14----------|---------------------------- +|----------15-15-------------------------------|---------------------------- +|----------------------------------------------|---------------------------- + + 1/2 +------17-20p17-|22bf-rb-b--20-19-17-16-------------|------------------------ +---17----------|-----------------------18-17-15----|------------------------ +17-------------|--------------------------------17-|-16-14-13--------------- +---------------|-----------------------------------|----------15-14-12------ +---------------|-----------------------------------|------------------------ +---------------|-----------------------------------|------------------------ + + +-------------------| +-------------------| +--------------14s--| +-------------------| +15-14-12--12-------| +-------------------| + + diff --git a/guitar/tabs/Malmsteen/bite_the_bullet.tab.txt b/guitar/tabs/Malmsteen/bite_the_bullet.tab.txt new file mode 100644 index 0000000..7929e4b --- /dev/null +++ b/guitar/tabs/Malmsteen/bite_the_bullet.tab.txt @@ -0,0 +1,230 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) +Subject: TAB: Yngwie Malmsteen "Bite the Bullet" + +Yngwie Malmsteen "Bite the Bullet" +from Odyssey +letostak@netcom.com +tune down 1/2 step + + +|---------|----------------------------|-----------------------------------| +|---------|----------------------------|-----------------------------------| +|---------|----------------------------|-----------------------------------| +|---------|----------------------------|-----------------------------------| +|---------|---------------------5h7h9--|----------------------5h7h9--------| +|-12s19s--|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------| + + +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|---------------------5h7h9--|----------------------5h7h9--------|---------- +|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------|---------- + + +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|---------------------5h7h9--|----------------------5h7h9--------|---------- +|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------|---------- + + +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|----------------------------|-----------------------------------|---------- +|---------------------5h7h9--|----------------------5h7h9--------|---------- +|0--0--3p0--5--0-6h7---------|0--0--3p0--5--0--6h7---------------|---------- + + + +|---------------------------|------------------------|-----------------------| +|---------------------------|------------------------|-----------------------| +|---------------------------|------------------------|-----------------------| +|---------------------------|7p4-5p4-----7p4-5p4-----|7p4-5p4-----7p4-5p4--- | +|---------------------6h7h9-|--------7p6---------7p6-|--------7p6---------7p6| +|-7-7-7-7-7-7-7-5-7-8-------|------------------------|-----------------------| + + +|----------------------|--------------------------|------------------------| +|----------------------|--------------------------|-------------10p7-8p7---| +|----------------------|--------------------------|9----8---------------9p8| +|7p4-5p4---7p4-5p4-----|7p4-5p4-----10p7-9p7------|--10---10p9p7-----------| +|------7p6---------7p6-|--------7p6----------10p9-|------------------------| +|----------------------|--------------------------|------------------------| + + 1 1/2 +|-------------|-------------|----------------|21b---0-----21b------0-------| +|10p7-8p7-----|-12~---------|----------------|------0--------------0-------| +|---------9p8-|-------------|----------------|------0--------------0-------| +|-------------|-------------|----------------|-----------------------------| +|-------------|-------------|----------------|-----------------------------| +|-------------|-------------|----------------|-----------------------------| + + +|-s17-------------19h20-19-17-19-17-------|17------------------------------- +|-----20-20-19h20-------------------20-19-|---20-19-17-20-19-17-16-17p16---- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- +|-----------------------------------------|--------------------------------- + + +----------|---------------------------------------------------|------------- +----------|19-17p16----------------------15h17p15-------------|------------- +17p16-----|---------17-16----------16h17----------17-16-17-14-|17p16p14----- +------19--|---------------19-17h19----------------------------|------------- +----------|---------------------------------------------------|------------- +----------|---------------------------------------------------|------------- + + +---------------------------12-15p12-19p15-|---19p15----20p15----15h19p15---- +------------------12----12----------------|17-------17-------17----------17- +---------12-16p12----12-------------------|--------------------------------- +17p16p14----------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- + + +15-19p15-----|15h20p15----15h19p15----15h19p15-17p15h17p15-|---15h17p15h17p- +---------17--|---------17----------17----------------------|19-------------- +-------------|---------------------------------------------|---------------- +-------------|---------------------------------------------|---------------- +-------------|---------------------------------------------|---------------- +-------------|---------------------------------------------|---------------- + + 1/2 +15----15-17-15----15-------|-----------------17-----------15-|20p19p17------ +---19----------19----19br--|17~--(0)--20bf-------0-----17----|-------------- +---------------------------|-----(0)----------------16-------|-------------- +---------------------------|---------------------------------|-------------- +---------------------------|---------------------------------|-------------- +---------------------------|---------------------------------|-------------- + + +19p17-19p17-------17---------------------|-------------12h15p12h14h15p14p12-| +------------20p19----20-19-17-20-19-17s--|---16bfr-bf-----------------------| +-----------------------------------------|----------------------------------| +-----------------------------------------|0---------------------------------| +-----------------------------------------|----------------------------------| +-----------------------------------------|----------------------------------| + + +|t19p12h14h15p14p12-t21p12h14h15p14p12-t17p12h14p15p14p12-t19p12h14h15p14p12| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + + +|t17p15p14p12h15p12h14-----------------------------------------|------------ +|----------------------h15t17p13h15p13-15p13p12----13p12-------|------------ +|-----------------------------------------------14-------14-12-|-14-12p11--- +|--------------------------------------------------------------|------------ +|--------------------------------------------------------------|------------ +|--------------------------------------------------------------|------------ + + +-----------------------|---------|------------|----------------------------- +-----------------------|---------|------------|----------------------------- +---9-11-9----9---------|---------|------------|------------------16-14-16--- +14--------12-----s14~--|---------|------------|17-14-16-17-16-14------------ +-----------------------|-19~-----|--19dive----|----------------------------- +-----------------------|---------|------------|----------------------------- + + +---------|-----------------------------------|17p16p15h17p15p14-17bf-| +---------|19-16-17-19-17-16-20-17-19-20-19-17|-----------------------| +17-16-14-|-----------------------------------|-----------------------| +---------|-----------------------------------|-----------------------| +---------|-----------------------------------|-----------------------| +---------|-----------------------------------|-----------------------| + +trill +|15tr19--12tr15--7tr12--3tr7-|-0tr3--------0dive--|-------------12bfr--12bf| +|----------------------------|------0tr5----------|------------------------| +|----------------------------|--------------------|-9h12~--12--------------| +|----------------------------|--------------------|------------------------| +|----------------------------|--------------------|------------------------| +|----------------------------|--------------------|------------------------| + + +|-14-11-12-14-14-12-13-15h17|14-15-17s19-17-15----17-15-------15-----------| +|---------------------------|------------------19-------19-17----19-17-16--| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| + + +|-------------------------------------------------|------------------------| +|-19p17p16----------------------------------------|------------------------| +|----------17-16p14-------------------------------|------------------------| +|-------------------17-16-14-13-------------------|------------------------| +|-------------------------------15-14-12----------|------------------------| +|----------------------------------------15-14-12-|-11---------------------| + + +|20--19-17-19-20-19|h20p19p17h19p17----------------17-20-17----|------------ +|------------------|----------------20p19p17----19----------19-|------------ +|------------------|-------------------------20----------------|-20~-------- +|------------------|-------------------------------------------|------------ +|------------------|-------------------------------------------|------------ +|------------------|-------------------------------------------|------------ + + +|-------14-17p14-------------11-14p11-|14~---|12-14-15p14-15s17p16p15h16---| +|----16----------16-------13----------|------|-----------------------------| +|-17----------------17s14-------------|------|-----------------------------| +|-------------------------------------|------|-----------------------------| +|-------------------------------------|------|-----------------------------| +|-------------------------------------|------|-----------------------------| + + +|-------14-17----14h17-20p19p17-20----------|------------------------------| +|-17-16-------16-------------------19p17-16-|------------------------------| +|-------------------------------------------|19-17p16----------------------| +|-------------------------------------------|---------19p17p16-------------| +|-------------------------------------------|------------------19-18-------| +|-------------------------------------------|------------------------------| + +w/echo +|16tr19---18tr21--|---------------------------------|----------------------| +|-----------------|17tr18--15tr17---13h15-t17-15p13-|-12h13p12----12-------| +|-----------------|---------------------------------|----------14----13----| +|-----------------|---------------------------------|----------------------| +|-----------------|---------------------------------|----------------------| +|-----------------|---------------------------------|----------------------| + +echo off +|-------------------------------------------12-|17p12----12-17-12-20p17----- +|----------------------17p13-------------13----|------13----------------17-- +|-17p14-------------14-------14-------14-------|---------------------------- +|-------14-------14-------------14-14----------|---------------------------- +|----------15-15-------------------------------|---------------------------- +|----------------------------------------------|---------------------------- + + 1/2 +------17-20p17-|22bf-rb-b--20-19-17-16-------------|------------------------ +---17----------|-----------------------18-17-15----|------------------------ +17-------------|--------------------------------17-|-16-14-13--------------- +---------------|-----------------------------------|----------15-14-12------ +---------------|-----------------------------------|------------------------ +---------------|-----------------------------------|------------------------ + + +-------------------| +-------------------| +--------------14s--| +-------------------| +15-14-12--12-------| +-------------------| + + diff --git a/guitar/tabs/Malmsteen/black_star.tab b/guitar/tabs/Malmsteen/black_star.tab new file mode 100644 index 0000000..37f7480 --- /dev/null +++ b/guitar/tabs/Malmsteen/black_star.tab @@ -0,0 +1,82 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Received: from animal-farm.nevada.edu by redrock.nevada.edu (5.65c/M1.4) + with SMTP id ; Thu, 5 Aug 1993 07:41:53 -0700 +Received: from uicvm.uic.edu by animal-farm.nevada.edu id ; Thu, 5 Aug 1993 07:41:50 -0700 +Received: from brfapesp.bitnet by UICVM.UIC.EDU (IBM VM SMTP V2R1) + with BSMTP id 4780; Thu, 05 Aug 93 09:41:24 CDT +Received: from vortex.ufrgs.br by brfapesp.bitnet with PMDF#10108; Thu, 5 Aug + 1993 11:26 BSC (-0300 C) +Received: from inf.ufrgs.br (143.54.2.99) by vortex.ufrgs.br (PMDF V4.2-11 + #4493) id <01H1DUSAHPIO000NC9@vortex.ufrgs.br>; Thu, 5 Aug 1993 11:21:57 -0300 +Received: from jarau.inf.ufrgs.br by inf.ufrgs.br (4.1/SMI-4.1) id AA11275; + Thu, 5 Aug 93 11:23:40 EST +Received: from ituim.inf.ufrgs.br by jarau.inf.ufrgs.br (4.1/SMI-4.1) id + AA09285; Thu, 5 Aug 93 11:25:37 EST +Date: Thu, 05 Aug 1993 11:25:37 -0500 (EST) +From: miller%inf.ufrgs.br@UICVM.UIC.EDU (James Arthur Miller) +Subject: BlackStar.tab +To: jamesb@animal-farm.nevada.edu +Message-Id: <9308051425.AA09285@jarau.inf.ufrgs.br> +X-Envelope-To: jamesb@animal-farm.nevada.edu +Content-Transfer-Encoding: 7BIT + + + Black Star (Intro) - YNGWIE MALMSTEEN + + +Acoustic guitar +Timing 3/4 + + ^^^^^^ +E-----7-----|----------------|-----------------|--0-------2--3--| +B----7------|--8-------7--5--|--4tr5-----2--4--|----------------| +G---8-------|----------------|-----------------|----------------| +D-----------|----------------|--4--------------|----------------| +A--9--------|--7-------------|-----------0-----|----------------| +E-----------|----------------|-----------------|--3-------------| + + ^^ +E-----4-----|-----5--------------|-----6---------|-----7---------| +B----5------|----5---------------|----7----------|----8----7--5--| +G---4-------|---7-----5h7p5\4-5--|---6-----------|---9-----8--6--| +D-----------|--------------------|---------------|---------------| +A-----------|--0-----------------|---------------|---------------| +E--4--------|--------------------|--6----6--7--9-|--7------------| + + + Harm..............................................| +E-------- 7-|-----12--------|--------------|-------12-----|- +B--7--------|-----------12--|-------7------|--12----------|- +G--8--------|---------------|--5--------7--|--------------|- +D-----------|---------------|--------------|--------------|- +A-----------|---------------|--------------|--------------|- +E------7----|-12------------|--------------|--------------|- + + +vibrato: ^^^^^ +pull-off: p +hammer: h +slide: \ +trill: tr +Harmonics: Harm + +--------------------------------------------------------------------- +"When I open my eyes, I can only sigh, for what I see is contrary to +my creed: and I must despise the world for not perceiving that music +is a higher revelation than any wisdom or philosophy. It is the wine +that inspires new creations, and I am the Bacchus, who presses out +this wine for men, and makes them spiritually drunk; when they are +sober they bring to shore all kinds of things which they have caught. +God is nearer to me than to others. I approach him without fear, I +have always known him. Neither am I anxious about my music, which no +adverse fate can overtake, and which will free him who understands it +from the misery which afflicts others." + LUDWIG VON BEETHOVEN +-------------------------------------------------------------------- +James A. Miller - miller@inf.ufrgs.br +Federal University of Rio Grande do Sul - UFRGS +Porto Alegre - Brazil +-------------------------------------------------------------------- diff --git a/guitar/tabs/Malmsteen/black_star.tab.txt b/guitar/tabs/Malmsteen/black_star.tab.txt new file mode 100644 index 0000000..37f7480 --- /dev/null +++ b/guitar/tabs/Malmsteen/black_star.tab.txt @@ -0,0 +1,82 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Received: from animal-farm.nevada.edu by redrock.nevada.edu (5.65c/M1.4) + with SMTP id ; Thu, 5 Aug 1993 07:41:53 -0700 +Received: from uicvm.uic.edu by animal-farm.nevada.edu id ; Thu, 5 Aug 1993 07:41:50 -0700 +Received: from brfapesp.bitnet by UICVM.UIC.EDU (IBM VM SMTP V2R1) + with BSMTP id 4780; Thu, 05 Aug 93 09:41:24 CDT +Received: from vortex.ufrgs.br by brfapesp.bitnet with PMDF#10108; Thu, 5 Aug + 1993 11:26 BSC (-0300 C) +Received: from inf.ufrgs.br (143.54.2.99) by vortex.ufrgs.br (PMDF V4.2-11 + #4493) id <01H1DUSAHPIO000NC9@vortex.ufrgs.br>; Thu, 5 Aug 1993 11:21:57 -0300 +Received: from jarau.inf.ufrgs.br by inf.ufrgs.br (4.1/SMI-4.1) id AA11275; + Thu, 5 Aug 93 11:23:40 EST +Received: from ituim.inf.ufrgs.br by jarau.inf.ufrgs.br (4.1/SMI-4.1) id + AA09285; Thu, 5 Aug 93 11:25:37 EST +Date: Thu, 05 Aug 1993 11:25:37 -0500 (EST) +From: miller%inf.ufrgs.br@UICVM.UIC.EDU (James Arthur Miller) +Subject: BlackStar.tab +To: jamesb@animal-farm.nevada.edu +Message-Id: <9308051425.AA09285@jarau.inf.ufrgs.br> +X-Envelope-To: jamesb@animal-farm.nevada.edu +Content-Transfer-Encoding: 7BIT + + + Black Star (Intro) - YNGWIE MALMSTEEN + + +Acoustic guitar +Timing 3/4 + + ^^^^^^ +E-----7-----|----------------|-----------------|--0-------2--3--| +B----7------|--8-------7--5--|--4tr5-----2--4--|----------------| +G---8-------|----------------|-----------------|----------------| +D-----------|----------------|--4--------------|----------------| +A--9--------|--7-------------|-----------0-----|----------------| +E-----------|----------------|-----------------|--3-------------| + + ^^ +E-----4-----|-----5--------------|-----6---------|-----7---------| +B----5------|----5---------------|----7----------|----8----7--5--| +G---4-------|---7-----5h7p5\4-5--|---6-----------|---9-----8--6--| +D-----------|--------------------|---------------|---------------| +A-----------|--0-----------------|---------------|---------------| +E--4--------|--------------------|--6----6--7--9-|--7------------| + + + Harm..............................................| +E-------- 7-|-----12--------|--------------|-------12-----|- +B--7--------|-----------12--|-------7------|--12----------|- +G--8--------|---------------|--5--------7--|--------------|- +D-----------|---------------|--------------|--------------|- +A-----------|---------------|--------------|--------------|- +E------7----|-12------------|--------------|--------------|- + + +vibrato: ^^^^^ +pull-off: p +hammer: h +slide: \ +trill: tr +Harmonics: Harm + +--------------------------------------------------------------------- +"When I open my eyes, I can only sigh, for what I see is contrary to +my creed: and I must despise the world for not perceiving that music +is a higher revelation than any wisdom or philosophy. It is the wine +that inspires new creations, and I am the Bacchus, who presses out +this wine for men, and makes them spiritually drunk; when they are +sober they bring to shore all kinds of things which they have caught. +God is nearer to me than to others. I approach him without fear, I +have always known him. Neither am I anxious about my music, which no +adverse fate can overtake, and which will free him who understands it +from the misery which afflicts others." + LUDWIG VON BEETHOVEN +-------------------------------------------------------------------- +James A. Miller - miller@inf.ufrgs.br +Federal University of Rio Grande do Sul - UFRGS +Porto Alegre - Brazil +-------------------------------------------------------------------- diff --git a/guitar/tabs/Malmsteen/braveheart.tab b/guitar/tabs/Malmsteen/braveheart.tab new file mode 100644 index 0000000..09d3e83 --- /dev/null +++ b/guitar/tabs/Malmsteen/braveheart.tab @@ -0,0 +1,344 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Wed, 29 Jan 2003 21:31:47 -0500 +From: Anthony D'Anna +Subject: m/malmsteen_yngwie/braveheart.tab + +Artist: Yngwie Malmsteen +Song Title: "Bravehart" +Album: Facing the Animal +Transcribed by: Anthony D. +Anthony127@comcast.net or P42GDell@hotmail.com +  + +Here is a version I tabbed out in regular tuning: +E A D G B E for those of us who are lazy and don't +feel like retuning and just want to jam along. I +know some people may point out errors or play a part +differently. THIS IS MY TRANSCRIPTION OF THE SONG. +NOT ALL PARTS WILL BE EXACT TO THE ALBUM so if you +would like to offer any suggestions, comments, or +questions please let me know. Use this for self +practice and entertainment only. Enjoy! +  +__________________________________________________ +h - hammer on +p - pull off +~~ - vibrato +pm - muted string +9\7 - slide down(only the 9 is striked) +4/6 - slide up(only the 4 is striked) +9--(9) - play the note and let it ring +trill - hammer on and pull off as fast as possible +__________________________________________________ +  +(Tempo=160) +  + Intro (play twice)      +|----------------------------------------------------------- +|----------------------------------------------------------- +|------------------------------------------6---6-8-6-8-9-8-6 +|-----------------------6----6-8-6-8-9-8-9---9-------------- +|-------6-7-6-7-10-7-10---10-------------------------------- +|----------------------------------------------------------- +  +-------------------------------------------------------| +-------------------------------------------------------| +-9-8-6-8-6---6-----------------------------------------| +-----------9---9-8-9-8-6-8-6----6-----------------6--8-| +-----------------------------10---10-7-66666666---4--6-| +-------------------------------------------------------| +  + +(Play 4 times) + pm................|     pm........| +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| +|-8-----------------6/8--------------9---(9)---\-| +|-6-6--6-6-6-6--6-6-4/6--6--6--6--6--7---(7)---\-| +|-----------------------------------------7----\-| + 1.  Closing  my  mouth     before I scream^Å +  + +(Play twice) +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4----| +  + +    pm.............................|     +|----------------------------------------- +|----------------------------------------- +|----------------------------------------- +|------------------------------------6-8-- +|-6-666666-6666666666--666666-666666-4-6-- +|----------------------------------------- +  +  pm....................| +-----------------------------------| +-----------------------------------| +-----------------------------------| +---------------------------6---9---| +--6-666666-66666-66666666--4---7---| +-----------------------------------| +  + + (play twice)      +|----------------------------------------------------- +|----------------------------------------------------- +|------------------------------------6---6-8-6-8-9-8-6 +|-----------------6----6-8-6-8-9-8-9---9-------------- +|-6-7-6-7-10-7-10---10-------------------------------- +|----------------------------------------------------- +  +-------------------------------------------------------| +-------------------------------------------------------| +-9-8-6-8-6---6-----------------------------------------| +-----------9---9-8-9-8-6-8-6----6-----------------6--8-| +-----------------------------10---10-7-66666666---4--6-| +-------------------------------------------------------| +  + +1:33 (Play twice) + pm................|     pm........| +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| +|-8-----------------6/8--------------9---(9)---\-| +|-6-6--6-6-6-6--6-6-4/6--6--6--6--6--7---(7)---\-| +|-----------------------------------------7----\-| + 2. Go on and sleep the sleep of the...    +  + +(Play twice) +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4----| +  +  +(Play twice) +    pm.............................|     +|----------------------------------------- +|----------------------------------------- +|----------------------------------------- +|------------------------------------6-8-- +|-6-666666-6666666666--666666-666666-4-6-- +|----------------------------------------- +  +  pm....................| +------------------------------------| +------------------------------------| +------------------------------------| +---------------------------6---9--\-| +--6-666666-66666-66666666--4---7--\-| +------------------------------------| +  + +(Play twice) +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4----| +  + +                 trill        ~~   +|----------------------------------------- +|---------7-9-10-9(10)------4-5-7-5-4-5--- +|---6-8-9-----------------6--------------- +|----------------------------------------- +|4---------------------------------------- +|----------------------------------------- +  +       hpp +---------------------------------------| +------7-9-10-91097-7-------------------| +6-8-9---------------9-8-6--------------| +--------------------------7-6----------| +------------------------------9-7-6-4--| +---------------------------------------| +  + +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4---\| +  +  +  +2:46 +(Play twice)                 (1stending)  (2nd ending)  +|-------------------------------------|-------------|-----------| +|--------4-----6-----7-6-4-6----------|-------------|-----------| +|--4-3-3---3-3---3-3---------3-3-3-3-3|---3-4-6-4-3-|-5/6-4-3---| +|-------------------------------------|-6-----------|--------6--| +|-------------------------------------|-------------|-----------| +|-------------------------------------|-------------|-----------| +  + +(Play twice)                 (1stending)  (2nd ending)       +|--------4-----6-----7-6-4-6----------|-------------|----------| +|--5-4-4---4-4---4-4---------4-4-4-4-4|---4-5-7-5-4-|-6/7-6-4--| +|-------------------------------------|-6-----------|--------3-| +|-------------------------------------|-------------|----------| +|-------------------------------------|-------------|----------| +|-------------------------------------|-------------|----------| +  + +(Play twice)                 (1stending)  (2nd ending)  +|-------------------------------------|-------------|-----------| +|--------4-----6-----7-6-4-6----------|-------------|-----------| +|--4-3-3---3-3---3-3---------3-3-3-3-3|---3-4-6-4-3-|-5/6-4-3---| +|-------------------------------------|-6-----------|--------6--| +|-------------------------------------|-------------|-----------| +|-------------------------------------|-------------|-----------| +  + +Guitar solo..... +  +(maybe if i get a lot of time down the road I will tab out the solo. +Just way to much right now. Some of it I can't play yet so I just +improvise while jamming along...hehe) + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Sun, 03 Mar 2002 11:00:19 -0500 +From: "DEGRANDPRE, YANICK" +Subject: m/malmsteen_yngwie/braveheart.tab + +Yngwie Malmsteen "Bravehart" +from Facing the Animal +yanick.degrandpre@bell.ca + + + + + +Closing my mouth ... + +Whisper my name... + + + + 0:55 +|-----------------------|------------------------------ +|-----------------------|------------------------------ +|-----------9-12-11tr---|----6-7-9-7-6-7~-------------- +|---9-11-12-------------|--9--------------------------- +|-----------------------|------------------------------ +|-----------------------|------------------------------ + 1.This (this) Game (Game) You + 2.Who (who) is (is) Free + + +|------------------------------------------------------ +|------------------------------------------------------ +|-----------9-12-11tr---9------------------------------ +|---9-11-12---------------12-11-9-8-------------------- +|-----------------------------------10-9-(?)----------- +|------------------------------------------------------ + Can't win. + from sin. + + + +I won't be afraid +My soul will remain + +Go on and sleep... + +One day you will know... + + + + 2:47 (2x) +|----------------------------------|----------------------- +|-0-0-0-3-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-0---0-2-5-3-2-3-- +|----------------------------------|--------3-------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- + + +--------------------------|-------------------------------- +-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-5-3-2--------------------- +--------------------------|------------3------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- + + + 2:59 (2x) +|-0-0-0-3-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-0---0-2-5-3-2-3-- +|----------------------------------|--------4-------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- + + +-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-5-3-2--------------------- +--------------------------|------------4------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- + +Judy Letostak. Where are you ? I owe you all my guitar knowledge +We're missing your tabs ... diff --git a/guitar/tabs/Malmsteen/braveheart.tab.txt b/guitar/tabs/Malmsteen/braveheart.tab.txt new file mode 100644 index 0000000..09d3e83 --- /dev/null +++ b/guitar/tabs/Malmsteen/braveheart.tab.txt @@ -0,0 +1,344 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Wed, 29 Jan 2003 21:31:47 -0500 +From: Anthony D'Anna +Subject: m/malmsteen_yngwie/braveheart.tab + +Artist: Yngwie Malmsteen +Song Title: "Bravehart" +Album: Facing the Animal +Transcribed by: Anthony D. +Anthony127@comcast.net or P42GDell@hotmail.com +  + +Here is a version I tabbed out in regular tuning: +E A D G B E for those of us who are lazy and don't +feel like retuning and just want to jam along. I +know some people may point out errors or play a part +differently. THIS IS MY TRANSCRIPTION OF THE SONG. +NOT ALL PARTS WILL BE EXACT TO THE ALBUM so if you +would like to offer any suggestions, comments, or +questions please let me know. Use this for self +practice and entertainment only. Enjoy! +  +__________________________________________________ +h - hammer on +p - pull off +~~ - vibrato +pm - muted string +9\7 - slide down(only the 9 is striked) +4/6 - slide up(only the 4 is striked) +9--(9) - play the note and let it ring +trill - hammer on and pull off as fast as possible +__________________________________________________ +  +(Tempo=160) +  + Intro (play twice)      +|----------------------------------------------------------- +|----------------------------------------------------------- +|------------------------------------------6---6-8-6-8-9-8-6 +|-----------------------6----6-8-6-8-9-8-9---9-------------- +|-------6-7-6-7-10-7-10---10-------------------------------- +|----------------------------------------------------------- +  +-------------------------------------------------------| +-------------------------------------------------------| +-9-8-6-8-6---6-----------------------------------------| +-----------9---9-8-9-8-6-8-6----6-----------------6--8-| +-----------------------------10---10-7-66666666---4--6-| +-------------------------------------------------------| +  + +(Play 4 times) + pm................|     pm........| +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| +|-8-----------------6/8--------------9---(9)---\-| +|-6-6--6-6-6-6--6-6-4/6--6--6--6--6--7---(7)---\-| +|-----------------------------------------7----\-| + 1.  Closing  my  mouth     before I scream^Å +  + +(Play twice) +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4----| +  + +    pm.............................|     +|----------------------------------------- +|----------------------------------------- +|----------------------------------------- +|------------------------------------6-8-- +|-6-666666-6666666666--666666-666666-4-6-- +|----------------------------------------- +  +  pm....................| +-----------------------------------| +-----------------------------------| +-----------------------------------| +---------------------------6---9---| +--6-666666-66666-66666666--4---7---| +-----------------------------------| +  + + (play twice)      +|----------------------------------------------------- +|----------------------------------------------------- +|------------------------------------6---6-8-6-8-9-8-6 +|-----------------6----6-8-6-8-9-8-9---9-------------- +|-6-7-6-7-10-7-10---10-------------------------------- +|----------------------------------------------------- +  +-------------------------------------------------------| +-------------------------------------------------------| +-9-8-6-8-6---6-----------------------------------------| +-----------9---9-8-9-8-6-8-6----6-----------------6--8-| +-----------------------------10---10-7-66666666---4--6-| +-------------------------------------------------------| +  + +1:33 (Play twice) + pm................|     pm........| +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| +|-8-----------------6/8--------------9---(9)---\-| +|-6-6--6-6-6-6--6-6-4/6--6--6--6--6--7---(7)---\-| +|-----------------------------------------7----\-| + 2. Go on and sleep the sleep of the...    +  + +(Play twice) +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4----| +  +  +(Play twice) +    pm.............................|     +|----------------------------------------- +|----------------------------------------- +|----------------------------------------- +|------------------------------------6-8-- +|-6-666666-6666666666--666666-666666-4-6-- +|----------------------------------------- +  +  pm....................| +------------------------------------| +------------------------------------| +------------------------------------| +---------------------------6---9--\-| +--6-666666-66666-66666666--4---7--\-| +------------------------------------| +  + +(Play twice) +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4----| +  + +                 trill        ~~   +|----------------------------------------- +|---------7-9-10-9(10)------4-5-7-5-4-5--- +|---6-8-9-----------------6--------------- +|----------------------------------------- +|4---------------------------------------- +|----------------------------------------- +  +       hpp +---------------------------------------| +------7-9-10-91097-7-------------------| +6-8-9---------------9-8-6--------------| +--------------------------7-6----------| +------------------------------9-7-6-4--| +---------------------------------------| +  + +              trill    ~~    +|------------------------------------- +|------------------------------------- +|-------6-8-9-8(9)-----3-4-6-4-3-4---- +|-6-8-9--------------6---------------- +|------------------------------------- +|------------------------------------- +  +     hpp +---------------------------------------| +---------------------------------------| +------6-8-9-8987-7---------------------| +6-8-9-------------9-8-6----------------| +------------------------7-6------------| +----------------------------9-7-6-4---\| +  +  +  +2:46 +(Play twice)                 (1stending)  (2nd ending)  +|-------------------------------------|-------------|-----------| +|--------4-----6-----7-6-4-6----------|-------------|-----------| +|--4-3-3---3-3---3-3---------3-3-3-3-3|---3-4-6-4-3-|-5/6-4-3---| +|-------------------------------------|-6-----------|--------6--| +|-------------------------------------|-------------|-----------| +|-------------------------------------|-------------|-----------| +  + +(Play twice)                 (1stending)  (2nd ending)       +|--------4-----6-----7-6-4-6----------|-------------|----------| +|--5-4-4---4-4---4-4---------4-4-4-4-4|---4-5-7-5-4-|-6/7-6-4--| +|-------------------------------------|-6-----------|--------3-| +|-------------------------------------|-------------|----------| +|-------------------------------------|-------------|----------| +|-------------------------------------|-------------|----------| +  + +(Play twice)                 (1stending)  (2nd ending)  +|-------------------------------------|-------------|-----------| +|--------4-----6-----7-6-4-6----------|-------------|-----------| +|--4-3-3---3-3---3-3---------3-3-3-3-3|---3-4-6-4-3-|-5/6-4-3---| +|-------------------------------------|-6-----------|--------6--| +|-------------------------------------|-------------|-----------| +|-------------------------------------|-------------|-----------| +  + +Guitar solo..... +  +(maybe if i get a lot of time down the road I will tab out the solo. +Just way to much right now. Some of it I can't play yet so I just +improvise while jamming along...hehe) + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Sun, 03 Mar 2002 11:00:19 -0500 +From: "DEGRANDPRE, YANICK" +Subject: m/malmsteen_yngwie/braveheart.tab + +Yngwie Malmsteen "Bravehart" +from Facing the Animal +yanick.degrandpre@bell.ca + + + + + +Closing my mouth ... + +Whisper my name... + + + + 0:55 +|-----------------------|------------------------------ +|-----------------------|------------------------------ +|-----------9-12-11tr---|----6-7-9-7-6-7~-------------- +|---9-11-12-------------|--9--------------------------- +|-----------------------|------------------------------ +|-----------------------|------------------------------ + 1.This (this) Game (Game) You + 2.Who (who) is (is) Free + + +|------------------------------------------------------ +|------------------------------------------------------ +|-----------9-12-11tr---9------------------------------ +|---9-11-12---------------12-11-9-8-------------------- +|-----------------------------------10-9-(?)----------- +|------------------------------------------------------ + Can't win. + from sin. + + + +I won't be afraid +My soul will remain + +Go on and sleep... + +One day you will know... + + + + 2:47 (2x) +|----------------------------------|----------------------- +|-0-0-0-3-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-0---0-2-5-3-2-3-- +|----------------------------------|--------3-------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- + + +--------------------------|-------------------------------- +-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-5-3-2--------------------- +--------------------------|------------3------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- + + + 2:59 (2x) +|-0-0-0-3-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-0---0-2-5-3-2-3-- +|----------------------------------|--------4-------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- +|----------------------------------|----------------------- + + +-0-0-5-0-0-7-0-0-8-7-5-7~-|0-0-0-5-3-2--------------------- +--------------------------|------------4------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- +--------------------------|-------------------------------- + +Judy Letostak. Where are you ? I owe you all my guitar knowledge +We're missing your tabs ... diff --git a/guitar/tabs/Malmsteen/carry_on_wayward_son.tab b/guitar/tabs/Malmsteen/carry_on_wayward_son.tab new file mode 100644 index 0000000..aa385c6 --- /dev/null +++ b/guitar/tabs/Malmsteen/carry_on_wayward_son.tab @@ -0,0 +1,449 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +# + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + +Yngwie Malmsteen - Carry on Wayward Son +from Inspirations (originally done by Kansas) +letostak@ix.netcom.com (Judy Letostak) +The Music Shop BBS (619)423-4970 + + +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +--------------------------------------5-------------------------------------- +------------3--3-----------5--5--5/7-----7--5-----5--------------------3--3-- +---5--3--5--------5--3--5----------------------8-----3--2--2--5--3--5-------- +` + +----------------------------------------------------------------------------- +-------------------------------------------------------------8--8------------ +-------------------------------------------------------------7--7------------ +------------------------5---------------------------------------------------5 +-------------5--5--5/7-----7--5-----5--------5---------------------------5--- +--5--3----5----------------------8-----3--3-----2--2--0--0----------5h7------ + + +----------------------------------------------------------------------------- +------------------10---8--------------------------8---8---------------------- +-------------------9---7--------------------------7---7---------------------- +-------------------------------------------------------------------5--------- +--5h7-----------------------------------------------------------5-----5h7---- +--------0--0--------------------x--x-----0--0--------------5h7--------------- + + +----------------------------------------------------------------------------- +----------10--8-------------------------------------------------------------- +-----------9--7-------------------------------------------------------------- +--------------------x\ps----------------------------------------------------- +--------------------x\ps----------------------------------------------------- +--0--0----------------------------------------------------------------------- + +Play Main Riff with lead below + + +-12-11-10-----10------------------------------------8--8-8--5-----------5---- +----------13-----13-13--13-13-13--13-13--13--13--13-----------8-5----5-----10 +------------------------------------------------------------------8---------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +--------------------------5----------5--------------------------------------- +-8~-----------------5-7-8---8-7-5------7h8--8-7-5---7-5---------------------- +------7--7-7p5--7-8---------------7---------------7-----7--7-7-7p5-5~-------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +--------------------------------------15h17p15-----------12-12-12------------ +-15h17-17-15-17-17-15-17-17-17-15h17-----------17-15--------------15p12------ +-----------------------------------------------------16-----------------14--- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +--------------------------------------------------------------12-14-15------- +-14p12-14p12-14--12---12---12--16-16-14-16-12--12-14-15-14-15----------14---- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-12-------------------------------------------------------------------------- +----15-14-12----14-14-12----14-----------------------2--2--2~~~~------------- +-------------14----------14-----12------------------------------------------- +-----------------------------------14-13-12-10-10---------------------------- +----------------------------------------------------------------------------- + + +--------------------------19-19-19----19-19-19----17--17--------------------- +-5--5--5--5---5--5-5---5-----------------------15---------------------------- +----------------------------------------------------------12~---------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +---15--15-------------------------------------------------------------------- +-----------15--15p13\12--13~~~~~~~~~~~~~~~----------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +Once I rose above the noise and confusion... + +-------5--------0-------------0----------------3------------5-------0-------- +-----5------------1--------------1----------3------------5-------------1----- +---2----------0------------2-------------0------------2----------0----------- +----------------------------------------------------------------------------- +-0-------------------------------------------------0------------------------- +-----------3------------1-------------3------------------------3------------- + + +------0----------------3--------------------------------------0-------------- +---------1----------3----------------6-------------3---------3--3------------ +---2-------------0----------------7-------------5----------3-------3--------- +-------------------------------7-------------5------------------------------- +----------------------------5-------------3-------------1-------------3------ +1------------3--------------------------------------------------------------- + + +------------------------------------------------5---------0------------0----- +--------6--------3--------0-1--0---0----------5--------------1-----------1--- +------7--------5-------0---------0---0------2----------0------------2-------- +----7--------5--------------------------------------------------------------- +--5--------3------------------------------0---------------------------------- +---------------------3-------------------------------3-----------1----------- + + +-----------3---------------5---------0------------0--------------3----------- +--------3---------------5---------------1------------1--------3----------5--- +-----0---------------2------------0------------2-----------0-----------7----- +---------------------------------------------------------------------7------- +-----------------0-------------------------------------------------5--------- +--3----------------------------3------------1------------3------------------- + + +----------------------------------------------------------------------------- +-------3---------0----------------6---------3---------0-1--0---0------------- +-----5---------3---3------------7---------5--------0---------0---0----------- +---5---------3-------3--------7---------5------------------------------------ +-3---------1------------3---5---------3-------------------------------------- +------------------------------------------------3---------------------------- + + +Carry On my wayward son... +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +-----------0---------------0---0--------------5------0---------------0---0--- +---------5-0------7-----5--0---0--------------5----5-0------7-----5--0---0--- +-------3--------7-----3------------3--------7----3--------7-----3------------ +-5--57--------5-----3--------------1------5-------------5-----3-------------- + + +----------------------------------------------------------------------------- +-12----12-------------------------------------------------------------------- +-12----12---------------5-------0----------------0------0-------------------- +-12----12---------------5----5--0------7------5--0------0-------------------- +-----------------5--5-7----3---------7------5-------------------3------------ +-----------------------------------5------3---------------------1------------ + + +----------------------------------------------------------------------------- +---10------------------------------------------------------------------------ +---10------------------------------------------------------------------------ +---10-----2-------------------------------------5---------------------------- +-------------3------------3-3---------5-5--5/7-----7-5----5-------5---------- +-------------------5-3-5-------5-3--5------------------8----3--3-----2--2---- + + +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +-----------------------------5----------------------------------------------- +--------3-3---------5-5-5/7-----7-5----5--------5---------3------------------ +-5-3-5-------5-3-5------------------8-----3--3-----2--2---1------------------ + + +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +-----7--5----------------------------7----5/5-------------------------------- +-----------7--5-------3-5--5----7----5----3/3-------------------------------- +--5--------------8--5------3----5-------------------------------------------- + +Lead + +----------------------------------------------------------------------------- +--------7-7--7~--7--7p5---------8-8--8-8-8~--8\--8-8-5-------------5--------- +-5\------------------------5~--------------------------8---7-8-7h8---8-7-5--5 +-------------------------7--------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------12-13-12-10-------------------------------------------------- +---5------------------------13-12-10-9---------10-9------10-9---------------- +-7----7~~------------------------------10-9-10------10-9------10-9-7--------- +---------------------------------------------------------------------10-9-7-- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +-9-10-9--9-7-9-10-9-7-----7-------------------------------------------------- +-----------------------10---10-9-7-10-9-7-6-9-7-6---6-7-6-------------------- +--------------------------------------------------8-------7-8-8p7p5---------- +--------------------------------------------------------------------7p5p4--0- + + +---------------21~~~~~~~~-16h19p16----13h16p13----10h13p10----13p12p10------- +--15~w/bar-------------------------18----------15----------12---------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +-----------------13-16-------10-13------------------------------------------- +-13p12p10----15-----------12--------12-12p10p9-9-10-12---------------9-12---- +----------16-----------13------------------------------10-9--------9--------- +------------------------------------------------------------12-9-9----------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-12-12p10p9--12p10p9-10-9----9----------------------------------------------- +--------------------------10---10-9-7h9p7------------------------------------ +------------------------------------------10p9h10p9p7p6h7h9p7p6-------------- +----------------------------------------------------------------8p7-7-7-7---- +----------------------------------------------------------------------------- + + +-12~----12-11-10-------------------------------------------------17~--------- +-----------------13-12-10----10-12----10-12-10~w/bar--------10--------------- +--------------------------11-------11---------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +-------5-----------5--------------------------------------------------------- +---8~----8-5-----5---8-5--7-5--------------------------------------5--------- +--------------7---------------8p7--8-7-5---7---5-------------5-7-8---8-7-5-7- +-----------------------------------------7---7----7p5-7p5-7~----------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +---------------16-19----16-19----19-16-19-19-16-19-----19-16-20-19-20-------- +--5-8-8~~------------18-------18--------------------18----------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +--19-17p16------19p17-19-17-19p17-19-20-19h20p19p17\16----------------------- +----------18-17----------------------------------------18-17-17h18p17p15----- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +--/17-17h18p17\15-15h17p15\13h15p13-12\10--12p10p9---------------9h10h12p10p9 +-------------------------------------------------------9h10p9---------------- +---------------------------------------------------12---------12------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +-----------------10--------10-------13-13--12h13p12p10----------------------- +-9-9-9----12-9----------12----12-12--------------------13p12p10p9------------ +-------9-------9-----13-------------------------------------------10--------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-12p10p9-------------------------------------------------------------13~----- +---------10p9p7--------9h10p9p7---------------------------------------------- +----------------10p9p7----------10p9p7p6h7h9p7p6----------------------------- +-------------------------------------------------8p7p5----------------------- +-------------------------------------------------------7p5p4-----0----------- + + +---------10-----------------10----------------10----------------10-12-13----- +-~13-13-----13-12-10-12-13-----13-12-10-12-13----13-12-10-12-13-------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +-12-10----------------------------------------------------------------------- +-------13-12-10-9------12-10-9----------------------------------------------- +------------------10-9---------10-9-7-9--9h10p9p7----------7~w/bar----------- +--------------------------------------------------10p9p7p6------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +---------------------------5------5----------5------------------------------- +---7--5---5--------------5----8~----5-8----5---8-5-7-----5-5----------------- +-7------7---5-7---5h7--7----------------7------------7-8-----8-7-5-7-5---5--- +----------------7------------------------------------------------------7----- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +--7-5~--8~------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +You will always remember nothing equals the splender... + +----------------------------------------------0------------------------------ +---------------------------6-------3--------3---3------------6--------3------ +-------------------------7-------5--------3-------3--------7--------5-------- +-----------------------7-------5-------------------------7--------5---------- +---------------------5-------3----------1-----------3--5--------3------------ +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-------0-1-0---0------------------------------------------------------------- +----0--------0---0----------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +--3-------------------------------------------------------------------------- + + =======5x===== +----------16--16---\--13--12h13p12----------10-------------------10-12-13-12- +-----------------------------------15-15~------13-12-10-12-13---------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +--0--0----------------------------------------------------------------------- + + +-10-12-10----10-12h13p12-10--12-10-------10-12-13-12-10---------------------- +----------13-----------------------13-12----------------13-12-10-9-------9h10 +-----------------------------------------------------------------------9----- +--------------------------------------------------------------------12------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +h12p10p9--------------------------------------------------------------------- +---------10p9p7h9h10p9p7--------9h10--9p7------------------------------------ +-------------------------10p9p7-----------10p9p7\6-----6h7h9p7p6------------- +---------------------------------------------------8p7-----------8p7--------- +----------------------------------------------------------------------------- + + +-------------------------------------------------------------------19~~~~---- +----------------------------------------------------------------------------- +-------------------7-9-10-9-7------------------------------------------------ +----9-9-9-9-7-9-10------------10-9-7-6-------6-7-9-7-6----------------------- +--7------------------------------------8-7-8-----------8-7------------------- +-----------------------------------------------------------0--0-------------- + + +21-21-21-21-21-21-21-21-19-20-17-20-16-20-19-20-17-20-16-20-19-20-13-17-16--- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +-17-13-17-16-17-10-13-12-13-------------------------------------------------- +----------------------------9-12-10-12--------------------------------------- +---------------------------------------7-10-9p7----9-7--------7-------------- +------------------------------------------------10-----10-9-7---10-9-7-9-10-- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +---------------------------------------------------------------17-17~~~~----- +----------------------------------------------------------------------------- +-7-9-10-9-7-9-7----7--------------------------------------------------------- +----------------10---10-9-7-6-9-7-6-7-6-------------------------------------- +----------------------------------------8-7-7-7-7-7-7-7---------------------- +--------------------------------------------------------0-------------------- + + +-13-12-10-------10----------------10-12-13-12-10-12-10----10----------------- +----------13-12----13-12-10-12-13----------------------13----13-12-10-------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +-------10-12-13-12-10-12-10-------------------------------------------------- +-12-13----------------------13-12-13-13-12-10-13-12-10\9-12-9-10-12-13-12-10-9 +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +-10-9-12-10-9----9-----------9-10-12-10-9------------------------------------ +--------------10---10-9-9-10--------------10-9\7-9-10-9-7----7-9-7----------- +----------------------------------------------------------10-------10-9-7-9-10 +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + + +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- +--7-7-9-10-9-7--------------------------------------------------------------- +---------------10-9-7-6-9-7-6-7---------------------------------------------- +----------------------------------------------------------------------------- +----------------------------------------------------------------------------- + +The Music Shop BBS (619)423-4970 (San Diego, CA USA) +Over 6,000 Guitar Tabs, pictures, construction docs, lessons, interviews, +Over 700 Bass Tabs, sound files, lyrics, programs. If you have any new tab +I'm trying to be another archive for OLGA that's not on the Internet. Always +looking for new tab, or music related ansi screens for the BBS. If you have +them, please send them my way. +Also supporting unsigned/indie bands, will take bio's pictures, lyrics +sound files, gig dates etc., just email your info. +============================================================================== +h = hammeron w/bar = tremolo with bar +p = pulloff ps = pick scrape x\ps +~ = vibrato letostak@ix.netcom.com +b = bend +/\ = Slide +* = Artificial Harmonic +x = ghost note +tr = trill +============================================================================== diff --git a/guitar/tabs/Malmsteen/cry_no_more.tab b/guitar/tabs/Malmsteen/cry_no_more.tab new file mode 100644 index 0000000..8b0f24a --- /dev/null +++ b/guitar/tabs/Malmsteen/cry_no_more.tab @@ -0,0 +1,352 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen - Cry No More +from Fire and Ice +Judy Letostak (letostak@ix.netcom.com) +tune down 1/2 step + + + + + +|----------13--10h13p10--------------|------------------------------------| +|------10---------------10--------10-|-13/15-15~--------------------------| +|------------------------------10----|-------------12bf---12~-----10------| +|--12-----------------------12-------|------------------------------------| +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| + + 1/4 +|------------------------------------------12-13-15/|17-----20bf--20bf----| +|-------10---------------------10-11-13/15----------|----15---------------| +|--12b------10bf----x9/10p9-10----------------------|---------------------| +|---------------------------------------------------|---------------------| +|---------------------------------------------------|---------------------| +|---------------------------------------------------|---------------------| + + +|-20bf--20bf--\17/18p17------------------------------|--------------------- +|-----------------------20p18p17\15-14---------------|-------------15----17 +|--------------------------------------17-15p14------|----------14----14--- +|-----------------------------------------------15p14|p12-14/15------------ +|----------------------------------------------------|--------------------- +|----------------------------------------------------|--------------------- + + +----------------|-------------15-------15---------------------------------- +----18----18bf--|-18bf--18bf-----18bf------18bf-p15--18p15-18------15h18p15 +-14----14-------|---------------------------------------------17bf--------- +----------------|---------------------------------------------------------- +----------------|---------------------------------------------------------- +----------------|---------------------------------------------------------- + + +-----17-18~-17----18-17--------17\15-|-------15-------------------18----18- +--18-----------20-------18\20--------|-18-17----18p17p15-18-17-15----22---- +-------------------------------------|------------------------------------- +-------------------------------------|------------------------------------- +-------------------------------------|------------------------------------- +-------------------------------------|------------------------------------- + + Riff A +-----18----18-----18------|--20bf---20bf-----|-----------------------------| +--20----18----------------|------------------|-----------------------------| +--------------21------19--|------------------|-------------5---------------| +--------------------------|------------------|------3-2---------3-2-----5--| +--------------------------|------------------|-3/5------5-------------4----| +--------------------------|------------------|-----------------------------| + + +|------------------------------|------------------------------------------| +|----------------------2-------|------------------------------------------| +|-------------------7-----7*---|-----------5*-----------------------------| +|--3-2-----5/8---7-------------|--3--2---------3--2---------5*------------| +|-------5----------------------|--------5---------------4-----------------| +|------------------------------|------------------------------------------| + + +|--------------------------|-10/17-15-13\12----------------12-10-9-12-8---- +|--------------------------|----------------15-14-13-11\10----------------- +|-----------------7h9p7p6--|----------------------------------------------- +|-3--2-----5/8--7----------|----------------------------------------------- +|-------5------------------|----------------------------------------------- +|--------------------------|----------------------------------------------- + + +---------------------------------|----------------------------------------| +--11p10-----------------10-------|--------------------------------11------| +--------10p9----9h10h12----12bf--|--rb12------------9-10-14-10h14---------| +-------------12------------------|----------12\--12-----------------------| +---------------------------------|----------12\---------------------------| +---------------------------------|----------------------------------------| + + +|--12----13----15-15--17---------17--------17--20bf------17---------17----| +|-----15----15----15------20bf-------20bf--------------------20bf---------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|---------17----------------------------------17--------------------------| +|--20bf-----------18----20-19-----------17-18----18-20p18-17--------------| +|-------------/19----19-------19-\17/19------------------------17--19-----| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +Verse +There's .. + +time .. + +|-----------------|-------------------|----------------|------------------| +|-----------------|-------------------|----------------|------------------| +|----17bf---------|-----(17)~---------|----(17)~-------|-----rb17---------| +|-----------------|-------------------|----------------|------------------| +|-----------------|-------------------|----------------|------------------| +|-----------------|-------------------|----------------|------------------| + + +time .. + +time .. + + p.s. +|----------------|------------------|-----------------|------x\-----------| +|----------------|------------------|-----------------|------x\-----------| +|----------------|------------------|-----------------|-------------------| +|----------------|------------------|-----------------|-------------------| +|----------------|------------------|-----------------|-------------------| +|----------------|------------------|-----------------|-------------------| + + +Pre-Chorus +learn .. + +any .. + +|-----------------------|-------------------------|-----------------------| +|-----------------------|-------------------------|-----------------------| +|---------5------5------|--------5----5-5-5----5--|-----------------------| +|--3------5------5------|---3----5----5-5-5----5--|-----------------------| +|--1--------------------|---1---------------------|----8------------------| +|-----------------------|-------------------------|----6------------5-----| + + +and we .. + + 2.3, and we ..... + +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--3--4--5-----|----------------------------------------------------------- + + +Chorus play Riff A + + +Interlude with violins +||-----------------------------------------|-------------------------------| +||-----------7-8-10-7----------8-7-8---8-6\|5-8---8-------8---8-6-5-6------| +||o----7--9-----------7------7-------7-----|----7---5-----------------5-7-6| +||o---------------------10-8---------------|-----------8----7--------------| +||-----------------------------------------|-------------------------------| +||-----------------------------------------|-------------------------------| + + +|-----------------------------4\3--|----------------------3--------------|| +|---6---6----6----6---6-5---------6|5-3-2-------2---3-5-3---6-5-6-5h6p5--|| +|-7---5-------------------7-4------|------4-2-4---2---------------------o|| +|----------8---7----6--------------|------------------------------------o|| +|----------------------------------|-------------------------------------|| +|----------------------------------|-------------------------------------|| + + +Guitar Solo + +|------------17-------------------------------------------|---------------- +|--20--20p18----20-18p17-20p18p17----18-20-22~--18bf--rb18|-18bf--rb18-18bf +|---------------------------------19----------------------|---------------- +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- + + 1/2 +|-----------------------------17--20bf---------17b-|-rb17---15bf---p13----- +|--18bf-p15-18------15-----18----------------------|----------------------- +|--------------17bf-----19-------------------------|----------------------- +|-----------------------------------------20-------|----------------------- +|--------------------------------------------------|----------------------- +|--------------------------------------------------|----------------------- + + 1/2 +--17-15-13----15--13\12--13p12---12-10-------|-10-------------------------- +-----------17--------------------------13bf--|----13-------10-------------- +---------------------------------------------|-------12bf-----12b-p10------ +---------------------------------------------|------------------------12--- +---------------------------------------------|----------------------------- +---------------------------------------------|----------------------------- + + 1/4 +-------------------------------------------|-------12h13h15/17~-------17--- +-------------------9------------------10h11|h13/15----------------/18------ +--12-10-12-10b--12---10-------9h10h12------|------------------------------- +------------------------12~----------------|------------------------------- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- + + 1 1/2 1 1/2 1/2 +---20b---------22b---rb22--|--19~-------------15h17b-----17b--rb17p15-----| +---------------------------|---------15-17-18-----------------------------| +---------------------------|----------------------------------------------| +----------20---------------|----------------------------------------------| +---------------------------|----------------------------------------------| +---------------------------|----------------------------------------------| + + +|----------------------------------------------------|--------------------- +|-18-17-15\14----------------------------------------|-18p17p15----17p15--- +|-------------17p16p15p14-------------------14-------|----------17--------- +|-------------------------17p16p15----15h17----17/19-|--------------------- +|----------------------------------15----------------|--------------------- +|----------------------------------------------------|--------------------- + + 1/2 +|-----------------------------------------------------------------9b------- +|-------15p13-------13----------------------------10----------------------- +|-17p16-------16p14----16p15\14p13-16p14p13-12b-------12b---12-10-----12b-- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- + + Our .. +---------------------|-------10~-------|--------12~-----|-------13~-------- +---------------------|-13bf------------|---15bf---------|-10bf------------- +--10----12-10--------|-----------------|----------------|------------------ +-----12-------12-10--|-----------------|----------------|------------------ +---------------------|-----------------|----------------|------------------ +---------------------|-----------------|----------------|------------------ + + ality ..(riff A) +|---------------------|-------------------------------------|----------13-- +|-----------------15--|-13~---------------------------------|-----13bf----- +|--------14-15-17-----|-------12bf--12--10h12--10bf~--rb10--|-------------- +|--15-17--------------|-------------------------------------|--12---------- +|---------------------|-------------------------------------|-------------- +|---------------------|-------------------------------------|-------------- + + 1/4 +----------------------------10------|-------------------------------------- +--13bf---13bf--13-10------------13--|--------------13-----------10b-------- +----------------------12bf----------|-12bf---12bf------12bf--12------10---- +------------------------------------|-------------------------------------- +------------------------------------|-------------------------------------- +------------------------------------|-------------------------------------- + + +--------10-12-13-------| +---9-11-----------11~--| +-----------------------| +-----------------------| +-----------------------| +-----------------------| + + +Outro Solo + 1/2 +|----------|-----------------------------------------17----20bf~----------| +|--3/17b---|--rb17~---17b-rb17-17b-rb17-17b--rb17p15----15----------------| +|----------|--------------------------------------------------------------| +|----------|--------------------------------------------------------------| +|----------|--------------------------------------------------------------| +|----------|--------------------------------------------------------------| + + 1/2 +|---/13--15p13-15/17-17--|-17b--rb17-15-17b-rb17--17----17-20bf--|--rb20--- +|------------------------|---------------------------18----------|--------- +|------------------------|---------------------------------------|--------- +|------------------------|---------------------------------------|--------- +|------------------------|---------------------------------------|--------- +|------------------------|---------------------------------------|--------- + + +---19~---17-20--18~---15--18p17---19p17p15h17p15-|-15p13-12-12h13p12p10\9/10 +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- + + +--h12p10----------------------------------------------10------------------| +----------13p11-13p11p10-13p10-13p10\8-10p8--------10----10---------------| +--------------------------------------------10p9p7----------7\5---5/7\5/--| +----------------------------------------------------------------7---------| +--------------------------------------------------------------------------| +--------------------------------------------------------------------------| + + 1/2 +-----------------------10------------------------------------|------------- +-----------10-13-13bf-----13-10------------------------------|------12-13-- +--7-----------------------------12b---12p10----12-10bf--rb10-|12-14-------- +-----7/10-----------------------------------12---------------|------------- +-------------------------------------------------------------|------------- +-------------------------------------------------------------|------------- + + 1/2 +--------13-15-17-15-13----15-13\12-13-12-------12p10-------10-------------- +--15/16----------------17----------------15-13-------13p10----------------- +--------------------------------------------------------------12b--12-10--- +-------------------------------------------------------------------------12 +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + + 1/2 +---------|--------13bf*--10--------------10-------------------------------| +---------|------x------------13-10----------13-10------10-----------------| +--12~----|----x--------------------12bf-----------12bf----12b-----12------| +---------|--x-------------------------------------------------------------| +---------|----------------------------------------------------------------| +---------|----------------------------------------------------------------| + + +|------------------------------------------------|-------------13bf---rb13-| +|------------------------------------------------|-13------10--------------| +|-10----12-10---------------------10~--------10--|----12bf-----------------| +|----12-------12-------------12~-------10/12-----|-------------------------| +|----------------12p10---------------------------|-------------------------| +|----------------------13p10---------------------|-------------------------| + + 1/2 +|-10h13p12p10\9-12p10p9h10------10-12-13/17----13-15-15bf-----15-17-17b---| +|--------------------------8-10-------------13-------------15-------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + +======================================================================= +h = hammeron Judy Letostak +p = pulloff Internet letostak@ix.netcom.com +/\ = slide Fidonet 1:202/762 +x = ghost note MetalNet 666:666/2 +t = tap (right hand) The Music Shop BBS (619)423-4970 24hrs +~ = vibrato * = picked harmonic +bf = bend full tr = trill +rb = release bend p.s. = pick scrape +dive = dive with bar b = bend / step written over note +======================================================================== +The Music Shop BBS (619)423-4970 24hrs +Guitar Tab, Bass Tab, Lyrics, Sound Files, Pictures, BRE...LORD...FidoNet... +MetalNet...In a band? Want some exposure? I have a file area for bands +will take anything that can be put on a computer...Lyrics, pictures, sound +files, gig ads...email me or call my bbs. It's free, and access is free. + \ No newline at end of file diff --git a/guitar/tabs/Malmsteen/cry_no_more.tab.txt b/guitar/tabs/Malmsteen/cry_no_more.tab.txt new file mode 100644 index 0000000..8b0f24a --- /dev/null +++ b/guitar/tabs/Malmsteen/cry_no_more.tab.txt @@ -0,0 +1,352 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen - Cry No More +from Fire and Ice +Judy Letostak (letostak@ix.netcom.com) +tune down 1/2 step + + + + + +|----------13--10h13p10--------------|------------------------------------| +|------10---------------10--------10-|-13/15-15~--------------------------| +|------------------------------10----|-------------12bf---12~-----10------| +|--12-----------------------12-------|------------------------------------| +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| + + 1/4 +|------------------------------------------12-13-15/|17-----20bf--20bf----| +|-------10---------------------10-11-13/15----------|----15---------------| +|--12b------10bf----x9/10p9-10----------------------|---------------------| +|---------------------------------------------------|---------------------| +|---------------------------------------------------|---------------------| +|---------------------------------------------------|---------------------| + + +|-20bf--20bf--\17/18p17------------------------------|--------------------- +|-----------------------20p18p17\15-14---------------|-------------15----17 +|--------------------------------------17-15p14------|----------14----14--- +|-----------------------------------------------15p14|p12-14/15------------ +|----------------------------------------------------|--------------------- +|----------------------------------------------------|--------------------- + + +----------------|-------------15-------15---------------------------------- +----18----18bf--|-18bf--18bf-----18bf------18bf-p15--18p15-18------15h18p15 +-14----14-------|---------------------------------------------17bf--------- +----------------|---------------------------------------------------------- +----------------|---------------------------------------------------------- +----------------|---------------------------------------------------------- + + +-----17-18~-17----18-17--------17\15-|-------15-------------------18----18- +--18-----------20-------18\20--------|-18-17----18p17p15-18-17-15----22---- +-------------------------------------|------------------------------------- +-------------------------------------|------------------------------------- +-------------------------------------|------------------------------------- +-------------------------------------|------------------------------------- + + Riff A +-----18----18-----18------|--20bf---20bf-----|-----------------------------| +--20----18----------------|------------------|-----------------------------| +--------------21------19--|------------------|-------------5---------------| +--------------------------|------------------|------3-2---------3-2-----5--| +--------------------------|------------------|-3/5------5-------------4----| +--------------------------|------------------|-----------------------------| + + +|------------------------------|------------------------------------------| +|----------------------2-------|------------------------------------------| +|-------------------7-----7*---|-----------5*-----------------------------| +|--3-2-----5/8---7-------------|--3--2---------3--2---------5*------------| +|-------5----------------------|--------5---------------4-----------------| +|------------------------------|------------------------------------------| + + +|--------------------------|-10/17-15-13\12----------------12-10-9-12-8---- +|--------------------------|----------------15-14-13-11\10----------------- +|-----------------7h9p7p6--|----------------------------------------------- +|-3--2-----5/8--7----------|----------------------------------------------- +|-------5------------------|----------------------------------------------- +|--------------------------|----------------------------------------------- + + +---------------------------------|----------------------------------------| +--11p10-----------------10-------|--------------------------------11------| +--------10p9----9h10h12----12bf--|--rb12------------9-10-14-10h14---------| +-------------12------------------|----------12\--12-----------------------| +---------------------------------|----------12\---------------------------| +---------------------------------|----------------------------------------| + + +|--12----13----15-15--17---------17--------17--20bf------17---------17----| +|-----15----15----15------20bf-------20bf--------------------20bf---------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|---------17----------------------------------17--------------------------| +|--20bf-----------18----20-19-----------17-18----18-20p18-17--------------| +|-------------/19----19-------19-\17/19------------------------17--19-----| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +Verse +There's .. + +time .. + +|-----------------|-------------------|----------------|------------------| +|-----------------|-------------------|----------------|------------------| +|----17bf---------|-----(17)~---------|----(17)~-------|-----rb17---------| +|-----------------|-------------------|----------------|------------------| +|-----------------|-------------------|----------------|------------------| +|-----------------|-------------------|----------------|------------------| + + +time .. + +time .. + + p.s. +|----------------|------------------|-----------------|------x\-----------| +|----------------|------------------|-----------------|------x\-----------| +|----------------|------------------|-----------------|-------------------| +|----------------|------------------|-----------------|-------------------| +|----------------|------------------|-----------------|-------------------| +|----------------|------------------|-----------------|-------------------| + + +Pre-Chorus +learn .. + +any .. + +|-----------------------|-------------------------|-----------------------| +|-----------------------|-------------------------|-----------------------| +|---------5------5------|--------5----5-5-5----5--|-----------------------| +|--3------5------5------|---3----5----5-5-5----5--|-----------------------| +|--1--------------------|---1---------------------|----8------------------| +|-----------------------|-------------------------|----6------------5-----| + + +and we .. + + 2.3, and we ..... + +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--------------|----------------------------------------------------------- +|--3--4--5-----|----------------------------------------------------------- + + +Chorus play Riff A + + +Interlude with violins +||-----------------------------------------|-------------------------------| +||-----------7-8-10-7----------8-7-8---8-6\|5-8---8-------8---8-6-5-6------| +||o----7--9-----------7------7-------7-----|----7---5-----------------5-7-6| +||o---------------------10-8---------------|-----------8----7--------------| +||-----------------------------------------|-------------------------------| +||-----------------------------------------|-------------------------------| + + +|-----------------------------4\3--|----------------------3--------------|| +|---6---6----6----6---6-5---------6|5-3-2-------2---3-5-3---6-5-6-5h6p5--|| +|-7---5-------------------7-4------|------4-2-4---2---------------------o|| +|----------8---7----6--------------|------------------------------------o|| +|----------------------------------|-------------------------------------|| +|----------------------------------|-------------------------------------|| + + +Guitar Solo + +|------------17-------------------------------------------|---------------- +|--20--20p18----20-18p17-20p18p17----18-20-22~--18bf--rb18|-18bf--rb18-18bf +|---------------------------------19----------------------|---------------- +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- + + 1/2 +|-----------------------------17--20bf---------17b-|-rb17---15bf---p13----- +|--18bf-p15-18------15-----18----------------------|----------------------- +|--------------17bf-----19-------------------------|----------------------- +|-----------------------------------------20-------|----------------------- +|--------------------------------------------------|----------------------- +|--------------------------------------------------|----------------------- + + 1/2 +--17-15-13----15--13\12--13p12---12-10-------|-10-------------------------- +-----------17--------------------------13bf--|----13-------10-------------- +---------------------------------------------|-------12bf-----12b-p10------ +---------------------------------------------|------------------------12--- +---------------------------------------------|----------------------------- +---------------------------------------------|----------------------------- + + 1/4 +-------------------------------------------|-------12h13h15/17~-------17--- +-------------------9------------------10h11|h13/15----------------/18------ +--12-10-12-10b--12---10-------9h10h12------|------------------------------- +------------------------12~----------------|------------------------------- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- + + 1 1/2 1 1/2 1/2 +---20b---------22b---rb22--|--19~-------------15h17b-----17b--rb17p15-----| +---------------------------|---------15-17-18-----------------------------| +---------------------------|----------------------------------------------| +----------20---------------|----------------------------------------------| +---------------------------|----------------------------------------------| +---------------------------|----------------------------------------------| + + +|----------------------------------------------------|--------------------- +|-18-17-15\14----------------------------------------|-18p17p15----17p15--- +|-------------17p16p15p14-------------------14-------|----------17--------- +|-------------------------17p16p15----15h17----17/19-|--------------------- +|----------------------------------15----------------|--------------------- +|----------------------------------------------------|--------------------- + + 1/2 +|-----------------------------------------------------------------9b------- +|-------15p13-------13----------------------------10----------------------- +|-17p16-------16p14----16p15\14p13-16p14p13-12b-------12b---12-10-----12b-- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- + + Our .. +---------------------|-------10~-------|--------12~-----|-------13~-------- +---------------------|-13bf------------|---15bf---------|-10bf------------- +--10----12-10--------|-----------------|----------------|------------------ +-----12-------12-10--|-----------------|----------------|------------------ +---------------------|-----------------|----------------|------------------ +---------------------|-----------------|----------------|------------------ + + ality ..(riff A) +|---------------------|-------------------------------------|----------13-- +|-----------------15--|-13~---------------------------------|-----13bf----- +|--------14-15-17-----|-------12bf--12--10h12--10bf~--rb10--|-------------- +|--15-17--------------|-------------------------------------|--12---------- +|---------------------|-------------------------------------|-------------- +|---------------------|-------------------------------------|-------------- + + 1/4 +----------------------------10------|-------------------------------------- +--13bf---13bf--13-10------------13--|--------------13-----------10b-------- +----------------------12bf----------|-12bf---12bf------12bf--12------10---- +------------------------------------|-------------------------------------- +------------------------------------|-------------------------------------- +------------------------------------|-------------------------------------- + + +--------10-12-13-------| +---9-11-----------11~--| +-----------------------| +-----------------------| +-----------------------| +-----------------------| + + +Outro Solo + 1/2 +|----------|-----------------------------------------17----20bf~----------| +|--3/17b---|--rb17~---17b-rb17-17b-rb17-17b--rb17p15----15----------------| +|----------|--------------------------------------------------------------| +|----------|--------------------------------------------------------------| +|----------|--------------------------------------------------------------| +|----------|--------------------------------------------------------------| + + 1/2 +|---/13--15p13-15/17-17--|-17b--rb17-15-17b-rb17--17----17-20bf--|--rb20--- +|------------------------|---------------------------18----------|--------- +|------------------------|---------------------------------------|--------- +|------------------------|---------------------------------------|--------- +|------------------------|---------------------------------------|--------- +|------------------------|---------------------------------------|--------- + + +---19~---17-20--18~---15--18p17---19p17p15h17p15-|-15p13-12-12h13p12p10\9/10 +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- + + +--h12p10----------------------------------------------10------------------| +----------13p11-13p11p10-13p10-13p10\8-10p8--------10----10---------------| +--------------------------------------------10p9p7----------7\5---5/7\5/--| +----------------------------------------------------------------7---------| +--------------------------------------------------------------------------| +--------------------------------------------------------------------------| + + 1/2 +-----------------------10------------------------------------|------------- +-----------10-13-13bf-----13-10------------------------------|------12-13-- +--7-----------------------------12b---12p10----12-10bf--rb10-|12-14-------- +-----7/10-----------------------------------12---------------|------------- +-------------------------------------------------------------|------------- +-------------------------------------------------------------|------------- + + 1/2 +--------13-15-17-15-13----15-13\12-13-12-------12p10-------10-------------- +--15/16----------------17----------------15-13-------13p10----------------- +--------------------------------------------------------------12b--12-10--- +-------------------------------------------------------------------------12 +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + + 1/2 +---------|--------13bf*--10--------------10-------------------------------| +---------|------x------------13-10----------13-10------10-----------------| +--12~----|----x--------------------12bf-----------12bf----12b-----12------| +---------|--x-------------------------------------------------------------| +---------|----------------------------------------------------------------| +---------|----------------------------------------------------------------| + + +|------------------------------------------------|-------------13bf---rb13-| +|------------------------------------------------|-13------10--------------| +|-10----12-10---------------------10~--------10--|----12bf-----------------| +|----12-------12-------------12~-------10/12-----|-------------------------| +|----------------12p10---------------------------|-------------------------| +|----------------------13p10---------------------|-------------------------| + + 1/2 +|-10h13p12p10\9-12p10p9h10------10-12-13/17----13-15-15bf-----15-17-17b---| +|--------------------------8-10-------------13-------------15-------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + +======================================================================= +h = hammeron Judy Letostak +p = pulloff Internet letostak@ix.netcom.com +/\ = slide Fidonet 1:202/762 +x = ghost note MetalNet 666:666/2 +t = tap (right hand) The Music Shop BBS (619)423-4970 24hrs +~ = vibrato * = picked harmonic +bf = bend full tr = trill +rb = release bend p.s. = pick scrape +dive = dive with bar b = bend / step written over note +======================================================================== +The Music Shop BBS (619)423-4970 24hrs +Guitar Tab, Bass Tab, Lyrics, Sound Files, Pictures, BRE...LORD...FidoNet... +MetalNet...In a band? Want some exposure? I have a file area for bands +will take anything that can be put on a computer...Lyrics, pictures, sound +files, gig ads...email me or call my bbs. It's free, and access is free. + \ No newline at end of file diff --git a/guitar/tabs/Malmsteen/crystal_ball.tab b/guitar/tabs/Malmsteen/crystal_ball.tab new file mode 100644 index 0000000..6c9e21c --- /dev/null +++ b/guitar/tabs/Malmsteen/crystal_ball.tab @@ -0,0 +1,435 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Crystal Ball" +from Odyssey +letostak@netcom.com + + + 1/2 +|--------------|--------------------------|------------------7--9----------| +|--------------|--------------------------|---------------7----------------| +|-----4--6-----|-6b----rb6~---------------|------------7-------------------| +|--4-----------|--------------------------|---------9----------------------| +|--------------|--------------------------|--------------------------------| +|--------------|--------------------------|--------------------------------| + + 1/2 +|--9b---rb9s12----------12p10p9-----|----------------------------10h12-----| +|-----------------------------------|-------------------11h12h14-10--------| +|-----------------------------------|----------11h12h14--------------------| +|-----------------------------------|-11h12h14-----------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| + + +|-h14----15bf----|------------|--19~----|14h15----------15----15----15----14 +|----------------|------------|---------|------17p15-15----14--------------- +|----------------|------------|---------|------------------------16----14--- +|----------------|------------|---------|----------------------------------- +|----------------|------------|---------|----------------------------------- +|----------------|------------|---------|----------------------------------- + + 1/2 1/2 +--------|------------------|-----------------14p10--------|----------------| +----12--|------------------|--------------12-------12-----|-12-14b-rb14p10-| +-12-----|------------------|-----11----11-------------11--|----------------| +--------|-16b-rb16p14--14s-|--12----12--------------------|----------------| +--------|------------------|------------------------------|----------------| +--------|------------------|------------------------------|----------------| + + +|--------------|---------------|---------------|------|-------|------|-----| +|-h12----------|---------------|---------------|------|-------|------|-----| +|-------11h14--|-------14------|---7s6-----6---|------|-------|------|-----| +|--------------|-14s16----16s--|-9-----7-7-----|-9----|--(9)--|--(9)-|-9-7-| +|--------------|---------------|---------------|------|-------|------|-----| +|--------------|---------------|---------------|------|-------|------|-----| + + +|-----------------------|------------|-------------------|-----------------| +|-------10--------------|------------|----10-------------|-----------------| +|--9h11----11-9----7p6--|-7--9--9s---|-11----11s9---7s6--|-6---------------| +|-----------------------|------------|-------------------|---7-9~---s------| +|-----------------------|------------|-------------------|-----------------| +|-----------------------|------------|-------------------|-----------------| + + +|---------------------------------|--7-------------------------------------| +|-------10------------------10bf--|----10p7------------7-------------------| +|--9s11-----11s9---7h9------------|---------10p9p7-----7-------------------| +|------------------------9--------|----------------9-------9p7-------------| +|---------------------------------|-------------------------------9--------| +|---------------------------------|----------------------------------------| + + +|-----------------|-----------------|-------------14--t19p14--|--(14)------| +|-----------------|-----------------|----------12-------------|------------| +|-----------------|----------11-----|-11----11----------------|------------| +|-9h11-7s9--4s7---|--9-11-12----12--|----12-------------------|------------| +|-----------------|-----------------|-------------------------|------------| +|-----------------|-----------------|-------------------------|------------| + + +|-------------------------|---------------------|--------------------------- +|-------------------------|---------------------|--------------------------- +|-------------------------|---------------------|--------------------------- +|-------5-----4--------7--|-5--4--5----4-----0--|-------------5--------4---- +|-------7-----5--------4--|-4--4--3----3--3-----|-------------7--------5---- +|-0--0-----0-----0--0-----|---------------------|-0--0--0--0-----0--0------- + + +------------|-------------|-------------------------|----------------------| +------------|-------------|-------------------------|----------------------| +------------|--------5~---|-------------------------|----------------------| +--------7---|-5--4---5~---|-------5-----4--------7--|-5--4--5----4--2--0---| +--------4---|-4--4---3~---|-------7-----5--------4--|-4--4--3----3--3------| +--0--0------|-------------|-0--0-----0-----0--0-----|----------------------| + + +|--------------------------|---------------| +|--------------------------|---------------| +|--------------------------|------------5--| +|--------------------------|------------5--| +|--------------------------|------------3--| +|-0-0-0-0-0-0-0-0-0-0-0-0--|-0-0-0-0-0-----| + + + + +|-------------------------|--------------------------| +|-------------------------|--------------------------| +|-------------------------|--------------------------| +|-------5-----4-----------|----5--4--5--5--4---------| +|-------7-----5--------4--|-4-----------------7--5---| +|-0--0-----0-----0--0-----|--------------------------| + + + We .. + fill 1 +|-------------------------|--------------------------------10|h12----------- +|-------------------------|------------------------10h12h13--|-------------- +|-------------------------|----------------9h11h12-----------|-------------- +|-------------------------|--------9h10h12-------------------|-------------- +|-------------------------|9h10h12---------------------------|-------------- +|-------------------------|----------------------------------|-------------- +| | | +| | | +|-------------------------|----------------------------------|-------------- +|-------------------------|----------------------------------|-------------- +|-------------------------|----------------------------------|-------------- +|-------5--------------7--|-5-4-5----------------------------|----5---4----- +|-------7-----4--------4--|-4-4-3-3----3---3---3-------------|----7---5----- +|-0--0-----0--5--0--0-----|----------------------------------|0-0--0----0-0- + + +wrapped ... + +|------|-------------------------|------------------------|----------------| +|------|-------------------------|------------------------|--------5-------| +|------|-------------------------|------------------------|----------5-----| +|-7----|-------------------------|-------5-----4----------|------5-----5---| +|-4----|-4--4--4--3--3--3--3--5--|-------7-----5--------4-|7-5-4-----------| +|------|-------------------------|-0--0-----0-----0--0----|----------------| + + +We ... + +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------5-----4-----------|-----------------------|-----5----4--------7----| +|-------7-----5--------4--|-4--4--4--3--3--3--3---|-----7----5--------4----| +|-0--0-----0-----0--0-----|-----------------------|0--0---0-----0--0-------| + + + Through .. +play fill 1 +|-----------------------|-------------------------|------------------------| +|-----------------------|-------------------------|------------------------| +|-----------------------|-------------------------|------------------------| +|-7---------------------|-------5-----4-----------|----5--4--5--5--4--2--0-| +|-4--3--3----3---3---3--|-------7-----5--------4--|-4----------------------| +|-----------------------|-0--0-----0-----0--0-----|------------------------| + + +step ... +Chorus +|-------------------------|-----------|----------------|-------------------| +|-------------------------|-----------|----------------|-------------------| +|-------------------------|-----------|----------------|-------------------| +|-------5-----4--------7--|-5-4-5-----|-5---5--5----7--|-2-----------------| +|-------7-----5--------4--|-4-4-3-----|-2---2--3----5--|-0---0--0--0-------| +|-0--0-----0-----0--0-----|-----------|----------------|-------------------| + + +see .. + +|----------------|----------------|----------------|-----------------------| +|----------------|----------------|----------------|-----------------------| +|----------------|----------------|----------------|-----------------------| +|-5---5-----7----|--5-------------|-5---5----------|-----7-----------------| +|-2---2-----5----|--3----2--0-----|-2---3------4---|-----5------6----------| +|----------------|-------------3--|----------------|-----------------------| + + + with .. + +|-------------------------|------------------|-----------------------------| +|-------------------------|------------------|-----------------------------| +|-------------------------|------------------|-----------------------------| +|-------7-----7--------7--|-5-4-5---4--2--0--|-------5-------7--------7----| +|-------5-----9--------4--|-4-4-3------------|-------7-------5--------4----| +|-0--0-----0-----0--0-----|------------------|-0--0-----0--0----0--0-------| + + +|------------| +|------------| +|-------5~---| +|-5--4--5~---| +|-4--4--3~---| +|------------| + + + You .. + +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|-------5-----4--------7-|-7--7--7--5--5--5--5--5-|-------5-----4--------7-| +|-------7-----5--------4-|-4--4--4--3--3--3--3--3-|-------7-----5--------4-| +|-0--0-----0-----0--0----|------------------------|-0--0-----0-----0--0----| + + + Let's .. + +|-------------------------|------------------------|-----------------------| +|-------------------------|------------------------|-----------------------| +|-------------------------|------------------------|-----------------------| +|-7--7--7--------5--4-----|-------5-----4--------7-|7--5--4-----5--4-------| +|-4--4--4--3--7--------7--|-------7-----5----------|---------3--------7--5-| +|-------------------------|-0--0-----0-----0--0----|-----------------------| + + +distant .. + +|------------------------|----------------------| +|------------------------|----------------------| +|------------------------|----------------------| +|-------5-----4--------7-|-5--4--5----4---------| +|-------7-----5--------4-|-------3-------7--5---| +|-0--0-----0-----0--0----|----------------------| + + +Gaze .. + +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|-5---5------7---|-2------------|-5---5------7--|----5---------------------| +|-2---3------2---|-0---0--0--0--|-2---3------5--|----3--------2---0--------| +|----------------|--------------|---------------|---------------------3----| + + +Can't .. + +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|-5---5----------|-----7-----------------|-------7-----7--------7--| +|-2---3------4---|-----5------6----------|-------5-----9--------4--| +|----------------|-----------------------|-0--0-----0-----0--0-----| + + In .. +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|-------5~---| +|5-4-5---4--2--0--|-------5-------7--------7----|-5--4--5~---| +|4-4-3------------|-------7-------5--------4----|-4--4--3~---| +|-----------------|-0--0-----0--0----0--0-------|------------| + + + Come ... + +|----------------|-----------------------|------------------|--------------| +|----------------|-----------------------|------------------|-------3------| +|----------------|-----------------------|------------------|-------2------| +|----------------|-----------------------|------------------|-------0------| +|--5---------5---|------------------5----|--3------------3--|-2-----0------| +|--3---------3---|----2-------------2----|--1------------1--|-0------------| + + +I .. + +|-------------------|---------------|----------------|---------------------| +|-------------------|---------------|----------------|-----------3---------| +|-------------------|---------------|----------------|-----------2---------| +|-------------------|---------------|----------------|-----------0---------| +|-5-------------5---|-----------5---|---3---------3--|-2---------0---------| +|-3-------------3---|---2-------2---|---1---------1--|-0-------------------| + + +Solo + +|---------|-21p18------------------18p15----12h15----15--|-----------------| +|--17~----|-------20--17-20p17-----------17-------14-----|---17-19---------| +|---------|--------------------18------------------------|-0-----------0---| +|---------|----------------------------------------------|-----------------| +|---------|----------------------------------------------|-----------------| +|---------|----------------------------------------------|-----------------| + + 1 1/2 +|-17p16p14-16--17bf--|-17-16-14---|-16p14----14-17-14----14-19-14-21-21b---| +|--------------------|------------|-------18----------18-------------------| +|--------------------|------------|----------------------------------------| +|--------------------|------------|----------------------------------------| +|--------------------|------------|----------------------------------------| +|--------------------|------------|----------------------------------------| + + +|-rb21~--------13-16-17-14------|--------------------|--------9h13p9-------- +|--------21s14-------------14---|--------------------|---------------14p12-- +|-----------------------------14|s13-----------------|---------------------- +|-------------------------------|----16-14~----14bf--|-----11--------------- +|-------------------------------|--------------------|--9------------------- +|-------------------------------|--------------------|---------------------- + + +---------------------------------------|-----------------------------------| +----12h14p12----12-14p12---------------|-----------------------------------| +-14----------14-----------14p13-14p13--|-----------------------------------| +---------------------------------------|-16-14-16-14bf~--------------------| +---------------------------------------|-----------------------------------| +---------------------------------------|-----------------------------------| + + +|----------------------------------12-------12-14----12-14-16-12-14-16-|-17- +|-12-------12-14-12-14-15-12-14-15----14-15-------15-------------------|---- +|----13-14-------------------------------------------------------------|---- +|----------------------------------------------------------------------|---- +|----------------------------------------------------------------------|---- +|----------------------------------------------------------------------|---- + + +-14-16-17-19-16-17-12-21p19-17-16-19-17-15-16-14-13-16-14-13-|-------------- +-------------------------------------------------------------|-15p14p12----- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- + + 1/2 1/2 +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-14p13p11p10------------------------11bf-|--11bf--11b--11b---11bf-rbp10h11-- +-------------12p11p9---------------------|---------------------------------- +---------------------12p11p9p8--11-------|---------------------------------- +-----------------------------------------|---------------------------------- + + +--------|------------------------------------------------------------------| +--------|------------------------------------------------------------------| +-10-----|---------10-------------------------------------------------------| +----12--|-12p11p9----12p11p9--12p11p9--------------------------------------| +--------|-----------------------------12p11p9-12-11-9-8h9p8-11h12p11h12----| +--------|------------------------------------------------------------------| + + 1 1/2 +|--------------------------9h10p9--13h14p13--16-|-16~------16b-------------| +|-------------------9h10p9----------------------|--------------------------| +|----------10h11p10-----------------------------|--------------------------| +|-11h12p11--------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| + + 1/2 +|-rb16--17---16b--rb16-14-|-17-16-14-13-14-16-16-17-16-14-13-14-16-17-14-16- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- + + 1/2 +-17-16-14-19-16-17-19-17-16-|-21b-----|-rb21~--21p17----19p16--|----17p14--- +----------------------------|---------|--------------19--------|-17-------14 +----------------------------|---------|------------------------|------------ +----------------------------|---------|------------------------|------------ +----------------------------|---------|------------------------|------------ +----------------------------|---------|------------------------|------------ + + +-16-12----16p14-10----12h14p12----12----------------------|----------------| +-------12----------10----------15----15p14-15p14p12----12-|----------------| +----------------------------------------------------14----|-14p13----------| +----------------------------------------------------------|-------16~------| +----------------------------------------------------------|----------------| +----------------------------------------------------------|----------------| + + +|----------13-16-17-14--------------|-----------------|--------------------| +|-------14-------------14-----------|-----------------|------------------9-| +|----14-------------------17s16p14--|-13s14bf-rb14p13-|-14p13---------11---| +|-16--------------------------------|-----------------|-------16--s11------| +|-----------------------------------|-----------------|--------------------| +|-----------------------------------|-----------------|--------------------| + + +|--------------------------|------------------|-17h19p17s16----------------| +|-10----9---------------9--|-10-12-9h10p9-----|--------------19~-----------| +|----11------------s11-----|--------------11--|----------------------------| +|--------------------------|------------------|----------------------------| +|-----------0---x----------|------------------|----------------------------| +|--------------------------|------------------|----------------------------| + + pedal F#5 +|-17bf-----------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| + + + This is .. + +|-----------------|--------------------|---------------|-------------------| +|--5~-------------|-------8------------|---5-----------|---4---------------| +|--5~-------------|-----6------6-------|---4-----------|---4---------------| +|--5~-------------|---8----------8-----|---4-----------|---4---------------| +|--3~-------------|-7--------------7---|---2-----------|---2---------------| +|--3~-------------|--------------------|---------------|-------------------| + + +Gaze .. + +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|-5---5------7---|-2------------|-5---5------7--|----5---------------------| +|-2---3------5---|-0---0--0--0--|-2---3------5--|----3--------2---0--------| +|----------------|--------------|---------------|---------------------3----| + + +Can't .. + +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|-5---5----------|-----7-----------------|-------7-----7--------7--| +|-2---3------4---|-----5------6----------|-------5-----9--------4--| +|----------------|-----------------------|-0--0-----0-----0--0-----| + + In .. +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|-------5~---| +|5-4-5---4--2--0--|-------5-------7--------7----|-5--4--5~---| +|4-4-3------------|-------7-------5--------4----|-4--4--3~---| +|-----------------|-0--0-----0--0----0--0-------|------------| + + + diff --git a/guitar/tabs/Malmsteen/crystal_ball.tab.txt b/guitar/tabs/Malmsteen/crystal_ball.tab.txt new file mode 100644 index 0000000..6c9e21c --- /dev/null +++ b/guitar/tabs/Malmsteen/crystal_ball.tab.txt @@ -0,0 +1,435 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Crystal Ball" +from Odyssey +letostak@netcom.com + + + 1/2 +|--------------|--------------------------|------------------7--9----------| +|--------------|--------------------------|---------------7----------------| +|-----4--6-----|-6b----rb6~---------------|------------7-------------------| +|--4-----------|--------------------------|---------9----------------------| +|--------------|--------------------------|--------------------------------| +|--------------|--------------------------|--------------------------------| + + 1/2 +|--9b---rb9s12----------12p10p9-----|----------------------------10h12-----| +|-----------------------------------|-------------------11h12h14-10--------| +|-----------------------------------|----------11h12h14--------------------| +|-----------------------------------|-11h12h14-----------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| + + +|-h14----15bf----|------------|--19~----|14h15----------15----15----15----14 +|----------------|------------|---------|------17p15-15----14--------------- +|----------------|------------|---------|------------------------16----14--- +|----------------|------------|---------|----------------------------------- +|----------------|------------|---------|----------------------------------- +|----------------|------------|---------|----------------------------------- + + 1/2 1/2 +--------|------------------|-----------------14p10--------|----------------| +----12--|------------------|--------------12-------12-----|-12-14b-rb14p10-| +-12-----|------------------|-----11----11-------------11--|----------------| +--------|-16b-rb16p14--14s-|--12----12--------------------|----------------| +--------|------------------|------------------------------|----------------| +--------|------------------|------------------------------|----------------| + + +|--------------|---------------|---------------|------|-------|------|-----| +|-h12----------|---------------|---------------|------|-------|------|-----| +|-------11h14--|-------14------|---7s6-----6---|------|-------|------|-----| +|--------------|-14s16----16s--|-9-----7-7-----|-9----|--(9)--|--(9)-|-9-7-| +|--------------|---------------|---------------|------|-------|------|-----| +|--------------|---------------|---------------|------|-------|------|-----| + + +|-----------------------|------------|-------------------|-----------------| +|-------10--------------|------------|----10-------------|-----------------| +|--9h11----11-9----7p6--|-7--9--9s---|-11----11s9---7s6--|-6---------------| +|-----------------------|------------|-------------------|---7-9~---s------| +|-----------------------|------------|-------------------|-----------------| +|-----------------------|------------|-------------------|-----------------| + + +|---------------------------------|--7-------------------------------------| +|-------10------------------10bf--|----10p7------------7-------------------| +|--9s11-----11s9---7h9------------|---------10p9p7-----7-------------------| +|------------------------9--------|----------------9-------9p7-------------| +|---------------------------------|-------------------------------9--------| +|---------------------------------|----------------------------------------| + + +|-----------------|-----------------|-------------14--t19p14--|--(14)------| +|-----------------|-----------------|----------12-------------|------------| +|-----------------|----------11-----|-11----11----------------|------------| +|-9h11-7s9--4s7---|--9-11-12----12--|----12-------------------|------------| +|-----------------|-----------------|-------------------------|------------| +|-----------------|-----------------|-------------------------|------------| + + +|-------------------------|---------------------|--------------------------- +|-------------------------|---------------------|--------------------------- +|-------------------------|---------------------|--------------------------- +|-------5-----4--------7--|-5--4--5----4-----0--|-------------5--------4---- +|-------7-----5--------4--|-4--4--3----3--3-----|-------------7--------5---- +|-0--0-----0-----0--0-----|---------------------|-0--0--0--0-----0--0------- + + +------------|-------------|-------------------------|----------------------| +------------|-------------|-------------------------|----------------------| +------------|--------5~---|-------------------------|----------------------| +--------7---|-5--4---5~---|-------5-----4--------7--|-5--4--5----4--2--0---| +--------4---|-4--4---3~---|-------7-----5--------4--|-4--4--3----3--3------| +--0--0------|-------------|-0--0-----0-----0--0-----|----------------------| + + +|--------------------------|---------------| +|--------------------------|---------------| +|--------------------------|------------5--| +|--------------------------|------------5--| +|--------------------------|------------3--| +|-0-0-0-0-0-0-0-0-0-0-0-0--|-0-0-0-0-0-----| + + + + +|-------------------------|--------------------------| +|-------------------------|--------------------------| +|-------------------------|--------------------------| +|-------5-----4-----------|----5--4--5--5--4---------| +|-------7-----5--------4--|-4-----------------7--5---| +|-0--0-----0-----0--0-----|--------------------------| + + + We .. + fill 1 +|-------------------------|--------------------------------10|h12----------- +|-------------------------|------------------------10h12h13--|-------------- +|-------------------------|----------------9h11h12-----------|-------------- +|-------------------------|--------9h10h12-------------------|-------------- +|-------------------------|9h10h12---------------------------|-------------- +|-------------------------|----------------------------------|-------------- +| | | +| | | +|-------------------------|----------------------------------|-------------- +|-------------------------|----------------------------------|-------------- +|-------------------------|----------------------------------|-------------- +|-------5--------------7--|-5-4-5----------------------------|----5---4----- +|-------7-----4--------4--|-4-4-3-3----3---3---3-------------|----7---5----- +|-0--0-----0--5--0--0-----|----------------------------------|0-0--0----0-0- + + +wrapped ... + +|------|-------------------------|------------------------|----------------| +|------|-------------------------|------------------------|--------5-------| +|------|-------------------------|------------------------|----------5-----| +|-7----|-------------------------|-------5-----4----------|------5-----5---| +|-4----|-4--4--4--3--3--3--3--5--|-------7-----5--------4-|7-5-4-----------| +|------|-------------------------|-0--0-----0-----0--0----|----------------| + + +We ... + +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------5-----4-----------|-----------------------|-----5----4--------7----| +|-------7-----5--------4--|-4--4--4--3--3--3--3---|-----7----5--------4----| +|-0--0-----0-----0--0-----|-----------------------|0--0---0-----0--0-------| + + + Through .. +play fill 1 +|-----------------------|-------------------------|------------------------| +|-----------------------|-------------------------|------------------------| +|-----------------------|-------------------------|------------------------| +|-7---------------------|-------5-----4-----------|----5--4--5--5--4--2--0-| +|-4--3--3----3---3---3--|-------7-----5--------4--|-4----------------------| +|-----------------------|-0--0-----0-----0--0-----|------------------------| + + +step ... +Chorus +|-------------------------|-----------|----------------|-------------------| +|-------------------------|-----------|----------------|-------------------| +|-------------------------|-----------|----------------|-------------------| +|-------5-----4--------7--|-5-4-5-----|-5---5--5----7--|-2-----------------| +|-------7-----5--------4--|-4-4-3-----|-2---2--3----5--|-0---0--0--0-------| +|-0--0-----0-----0--0-----|-----------|----------------|-------------------| + + +see .. + +|----------------|----------------|----------------|-----------------------| +|----------------|----------------|----------------|-----------------------| +|----------------|----------------|----------------|-----------------------| +|-5---5-----7----|--5-------------|-5---5----------|-----7-----------------| +|-2---2-----5----|--3----2--0-----|-2---3------4---|-----5------6----------| +|----------------|-------------3--|----------------|-----------------------| + + + with .. + +|-------------------------|------------------|-----------------------------| +|-------------------------|------------------|-----------------------------| +|-------------------------|------------------|-----------------------------| +|-------7-----7--------7--|-5-4-5---4--2--0--|-------5-------7--------7----| +|-------5-----9--------4--|-4-4-3------------|-------7-------5--------4----| +|-0--0-----0-----0--0-----|------------------|-0--0-----0--0----0--0-------| + + +|------------| +|------------| +|-------5~---| +|-5--4--5~---| +|-4--4--3~---| +|------------| + + + You .. + +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|-------5-----4--------7-|-7--7--7--5--5--5--5--5-|-------5-----4--------7-| +|-------7-----5--------4-|-4--4--4--3--3--3--3--3-|-------7-----5--------4-| +|-0--0-----0-----0--0----|------------------------|-0--0-----0-----0--0----| + + + Let's .. + +|-------------------------|------------------------|-----------------------| +|-------------------------|------------------------|-----------------------| +|-------------------------|------------------------|-----------------------| +|-7--7--7--------5--4-----|-------5-----4--------7-|7--5--4-----5--4-------| +|-4--4--4--3--7--------7--|-------7-----5----------|---------3--------7--5-| +|-------------------------|-0--0-----0-----0--0----|-----------------------| + + +distant .. + +|------------------------|----------------------| +|------------------------|----------------------| +|------------------------|----------------------| +|-------5-----4--------7-|-5--4--5----4---------| +|-------7-----5--------4-|-------3-------7--5---| +|-0--0-----0-----0--0----|----------------------| + + +Gaze .. + +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|-5---5------7---|-2------------|-5---5------7--|----5---------------------| +|-2---3------2---|-0---0--0--0--|-2---3------5--|----3--------2---0--------| +|----------------|--------------|---------------|---------------------3----| + + +Can't .. + +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|-5---5----------|-----7-----------------|-------7-----7--------7--| +|-2---3------4---|-----5------6----------|-------5-----9--------4--| +|----------------|-----------------------|-0--0-----0-----0--0-----| + + In .. +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|-------5~---| +|5-4-5---4--2--0--|-------5-------7--------7----|-5--4--5~---| +|4-4-3------------|-------7-------5--------4----|-4--4--3~---| +|-----------------|-0--0-----0--0----0--0-------|------------| + + + Come ... + +|----------------|-----------------------|------------------|--------------| +|----------------|-----------------------|------------------|-------3------| +|----------------|-----------------------|------------------|-------2------| +|----------------|-----------------------|------------------|-------0------| +|--5---------5---|------------------5----|--3------------3--|-2-----0------| +|--3---------3---|----2-------------2----|--1------------1--|-0------------| + + +I .. + +|-------------------|---------------|----------------|---------------------| +|-------------------|---------------|----------------|-----------3---------| +|-------------------|---------------|----------------|-----------2---------| +|-------------------|---------------|----------------|-----------0---------| +|-5-------------5---|-----------5---|---3---------3--|-2---------0---------| +|-3-------------3---|---2-------2---|---1---------1--|-0-------------------| + + +Solo + +|---------|-21p18------------------18p15----12h15----15--|-----------------| +|--17~----|-------20--17-20p17-----------17-------14-----|---17-19---------| +|---------|--------------------18------------------------|-0-----------0---| +|---------|----------------------------------------------|-----------------| +|---------|----------------------------------------------|-----------------| +|---------|----------------------------------------------|-----------------| + + 1 1/2 +|-17p16p14-16--17bf--|-17-16-14---|-16p14----14-17-14----14-19-14-21-21b---| +|--------------------|------------|-------18----------18-------------------| +|--------------------|------------|----------------------------------------| +|--------------------|------------|----------------------------------------| +|--------------------|------------|----------------------------------------| +|--------------------|------------|----------------------------------------| + + +|-rb21~--------13-16-17-14------|--------------------|--------9h13p9-------- +|--------21s14-------------14---|--------------------|---------------14p12-- +|-----------------------------14|s13-----------------|---------------------- +|-------------------------------|----16-14~----14bf--|-----11--------------- +|-------------------------------|--------------------|--9------------------- +|-------------------------------|--------------------|---------------------- + + +---------------------------------------|-----------------------------------| +----12h14p12----12-14p12---------------|-----------------------------------| +-14----------14-----------14p13-14p13--|-----------------------------------| +---------------------------------------|-16-14-16-14bf~--------------------| +---------------------------------------|-----------------------------------| +---------------------------------------|-----------------------------------| + + +|----------------------------------12-------12-14----12-14-16-12-14-16-|-17- +|-12-------12-14-12-14-15-12-14-15----14-15-------15-------------------|---- +|----13-14-------------------------------------------------------------|---- +|----------------------------------------------------------------------|---- +|----------------------------------------------------------------------|---- +|----------------------------------------------------------------------|---- + + +-14-16-17-19-16-17-12-21p19-17-16-19-17-15-16-14-13-16-14-13-|-------------- +-------------------------------------------------------------|-15p14p12----- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- + + 1/2 1/2 +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-14p13p11p10------------------------11bf-|--11bf--11b--11b---11bf-rbp10h11-- +-------------12p11p9---------------------|---------------------------------- +---------------------12p11p9p8--11-------|---------------------------------- +-----------------------------------------|---------------------------------- + + +--------|------------------------------------------------------------------| +--------|------------------------------------------------------------------| +-10-----|---------10-------------------------------------------------------| +----12--|-12p11p9----12p11p9--12p11p9--------------------------------------| +--------|-----------------------------12p11p9-12-11-9-8h9p8-11h12p11h12----| +--------|------------------------------------------------------------------| + + 1 1/2 +|--------------------------9h10p9--13h14p13--16-|-16~------16b-------------| +|-------------------9h10p9----------------------|--------------------------| +|----------10h11p10-----------------------------|--------------------------| +|-11h12p11--------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| + + 1/2 +|-rb16--17---16b--rb16-14-|-17-16-14-13-14-16-16-17-16-14-13-14-16-17-14-16- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- + + 1/2 +-17-16-14-19-16-17-19-17-16-|-21b-----|-rb21~--21p17----19p16--|----17p14--- +----------------------------|---------|--------------19--------|-17-------14 +----------------------------|---------|------------------------|------------ +----------------------------|---------|------------------------|------------ +----------------------------|---------|------------------------|------------ +----------------------------|---------|------------------------|------------ + + +-16-12----16p14-10----12h14p12----12----------------------|----------------| +-------12----------10----------15----15p14-15p14p12----12-|----------------| +----------------------------------------------------14----|-14p13----------| +----------------------------------------------------------|-------16~------| +----------------------------------------------------------|----------------| +----------------------------------------------------------|----------------| + + +|----------13-16-17-14--------------|-----------------|--------------------| +|-------14-------------14-----------|-----------------|------------------9-| +|----14-------------------17s16p14--|-13s14bf-rb14p13-|-14p13---------11---| +|-16--------------------------------|-----------------|-------16--s11------| +|-----------------------------------|-----------------|--------------------| +|-----------------------------------|-----------------|--------------------| + + +|--------------------------|------------------|-17h19p17s16----------------| +|-10----9---------------9--|-10-12-9h10p9-----|--------------19~-----------| +|----11------------s11-----|--------------11--|----------------------------| +|--------------------------|------------------|----------------------------| +|-----------0---x----------|------------------|----------------------------| +|--------------------------|------------------|----------------------------| + + pedal F#5 +|-17bf-----------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| + + + This is .. + +|-----------------|--------------------|---------------|-------------------| +|--5~-------------|-------8------------|---5-----------|---4---------------| +|--5~-------------|-----6------6-------|---4-----------|---4---------------| +|--5~-------------|---8----------8-----|---4-----------|---4---------------| +|--3~-------------|-7--------------7---|---2-----------|---2---------------| +|--3~-------------|--------------------|---------------|-------------------| + + +Gaze .. + +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|----------------|--------------|---------------|--------------------------| +|-5---5------7---|-2------------|-5---5------7--|----5---------------------| +|-2---3------5---|-0---0--0--0--|-2---3------5--|----3--------2---0--------| +|----------------|--------------|---------------|---------------------3----| + + +Can't .. + +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|----------------|-----------------------|-------------------------| +|-5---5----------|-----7-----------------|-------7-----7--------7--| +|-2---3------4---|-----5------6----------|-------5-----9--------4--| +|----------------|-----------------------|-0--0-----0-----0--0-----| + + In .. +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|------------| +|-----------------|-----------------------------|-------5~---| +|5-4-5---4--2--0--|-------5-------7--------7----|-5--4--5~---| +|4-4-3------------|-------7-------5--------4----|-4--4--3~---| +|-----------------|-0--0-----0--0----0--0-------|------------| + + + diff --git a/guitar/tabs/Malmsteen/dark_star.tab b/guitar/tabs/Malmsteen/dark_star.tab new file mode 100644 index 0000000..9408b43 --- /dev/null +++ b/guitar/tabs/Malmsteen/dark_star.tab @@ -0,0 +1,412 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Dark Star" from Rising Force + +* = natural harmonics +h = hammer on +p = pull off +~ = vibrato +\/ = dip note with bar +t = tap note with right hand +b=f(ull) = bend full +b 1 1/4 = bend one and one half steps i.e. E to F# +w/bar = dip or vibrato with tremolo bar + + + +-7~---------------------------------------2--3---4~-------------------- +-7~-----8~----7--5---4~----2~---4---5~-----------5~-------------------- +-8~----------------------------------------------4~-------------------- +---------------------4~------------------------------------------------ +-9~-----7~-----------------0~------------------------------------------ +------------------------------------3~-----------4~-------------------- + + +5~----------------6~---------------------7----------------7*----------- +5~----------------7~-------------------8----7--5--7-------------------- +7~--5h7p5s4--5~---6~-----------------9------8--6--8-------------------- +----------------------------------------------------------------------- +0~--------------------------------------------------------------------- +------------------6~----6--7--9----7------------------7*--------------- + + +-----12*------------------------12*-----------------7-12p8s7----------- +----------12*------7*------12*-------------------8--------------------- +---------------5*------7*----------------------9----------------------- +---------------------------------------------9------------------------- +----------------------------------------------------------------------- +12*-------------------------------------------------------------------- + + w/bar b 1/2 w/bar +---------12-14-~-----------------19-19p17p15s14h15p14b----------------- +------12----------------------17--------------------------17s15~------- +---12----------------------16------------------------------------------ +14----------------------17--------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +--------------------------------------------------12*------------------ +------12-16-15-13-12-15-13-12-----------------12*---------0h1p0-------- +---12-------------------------14-12-------12*----------7*-------------- +14----------------------------------16-14------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + w/bar do not pick notes all hammer ons +-----------------14-12------------------------------------------------- +-------12s15~----------15-14-12----------------------------------12-13- +-----9--------------------------12-11-------------------------12------- +---9----------------------------------14-------------------14---------- +10---------------------------------------14-12-10----10-14------------- +--------------------------------------------------14------------------- + + +---------15-14-17-15-19-20-19-20-17-20-15-20-14-15-------------15-19--- +12-17-16-------------------------------------------16-17----17--------- +---------------------------------------------------------16------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 1/2 vibrato w/bar +---21b~---------------------------------------------------------------- +17--------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +---------0\/----------------------------------------------------------- + + b 1/2 w/bar +----------------------------------------------------------------------- +----------------------------------------------------------------------- +-----------4--------4~----9~------------------------------------------- +-2~------x------------------------------------------------------------- +-------x------------------------x\/------------------------------------ +----------------------------------------------------------------------- + + +Theme + +--------------------14-15-14--------------19b--19~-14-17-15-14----15--- +----17b--17~--16-17----------16-17~-----x----------------------17------ +--------------------------------------x-------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +14----------14--------------------------------------------------------- +---17-16-17----16-17~-------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +--------------------14-15-14--------------19b--19~-14-17-15-14----15--- +----17b--17~--16-17----------16-17~-----x----------------------17------ +--x-----------------------------------x-------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +14----------14--------------------------------------------------------- +---17-16-17----16-17~-------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 2 +17s19-20~--17--20~--15--20~-------20--19~--20--17--19--20b----19~------ +-----------------------------19~--------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +--------------------14-15-14--------------19b--19~-14-17-15-14----15--- +----17b--17~--16-17----------16-17~-----x----------------------17------ +--x-----------------------------------x-------------------------------- +x---------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +14----------14--------------------------------------------------------- +---17-16-17----16-17~-------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f b=f +7h8p7--5-----------------------------------------------------11-12-14-- +---------8-7-5------------------------7-------10----10-12-13----------- +---------------8-7-5-4-------------9b---8-12b----11-------------------- +-----------------------7-5-4------------------------------------------- +-----------------------------7-6p0------------------------------------- +----------------------------------------------------------------------- + + +12-11-----------------------------------------20p17----20-17p14-------- +------13--12p10---------------------------5*--------19----------16----- +----------------12-11-9-8---------------------------------------------- +--------------------------10-9-7--------------------------------------- +---------------------------------10-9-7-6------------------------------ +----------------------------------------------------------------------- + + +17-14p11----------11-11h14p11s20p17----17p14----14p11----11p8---------- +---------13-10-13-------------------19-------16-------13------10p7s---- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f b=f +7h8p7--5--------------------------------------------------------------- +---------8-7-5------------------------7-------10----------------------- +---------------8-7-5-4-------------9b---8-12b----11~------------------- +-----------------------7-5-4------------------------------------------- +-----------------------------7-6--x------------------------------------ +----------------------------------------------------------------------- + + b=f b=2 +------------------------14-17b~-------14-17-14----14-17-19-20b~-------- +------13-16-13----13-16---------13-16----------16---------------------- +---14----------14------------------------------------------------------ +16--------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b= 1 1/2 +20-19-17-15-19-17-15------------14-15-17-15h17p15p14----14-15-17s19p15- +---------------------19-17~-17b----------------------17---------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +-------------------19p15----20p19p17-15-19p17-15-14h15-17p15p14----20b- +17----17-----------------17-------------------------------------17----- +---16----16----16------------------------------------------------------ +------------17--------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +19-20-17-20-15-20-14-20-19-20-17-20-15-20-14-20-19-20-17-20-15-20-14-20 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---20----------15-17-19-17-15----17-15-------15------------------------ +17----16-17-19----------------19-------19-17----19-17-16-19p17-16-13s12 +x---------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f +15-14-12s11----------14p12p11-----------------------------------7-12p8- +------------13p12p10----------13-12p11-12p11------------------8-------- +---------------------------------------------12-11s12b-12s8--9--------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + wide vib 1 1/2 +s16p12-------19s20p15--------20b~---------20b----19--20--19h20p19p17-15 +----------------------17----------------------------------------------- +-------16-12-------------16-------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +19s17p15s14h15-17-15--14----15-14-------14-12-------------------------- +-------------------------17-------17-16-------16-12-17-15-13s12----13-- +----------------------------------------------------------------14----- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=full b=full b=1/2 +----------------------------------------------------------------------- +12--------------------------------------------------------------------- +---14b-------15t-p14--19t--19tb---s15t-p14--p12s11b--11p9s8-5-9p5-4~--- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---------------------------12-17p12-----------------------12-17p20----- +------------------------13----------12-----------------13-------------- +5p4----------------9-14----------------9----------9-14----------------- +----7-5-4-------10-----------------------10----10---------------------- +-----------0s12-----------------------------12------------------------- +----------------------------------------------------------------------- + + b=1/2 b=2steps +12h17p12-12b----------------20b~-------20b~--20-19-17--16-------------- +----------------15~---------------------------------------18-17-15----- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=1/2 +------------------------------------------------------15-17-19-17-15-14 +----------------------------------19b---19~--16-17-19------------------ +17-16-14-12------------------------------------------------------------ +------------15-14-12--------------------------------------------------- +---------------------15-14-12-11--------------------------------------- +----------------------------------------------------------------------- + + +17-15-14----15-14-------14--------------------------------------------- +---------17-------17-15----17-15-13-17-15-13-12-15-13-12----13-12------ +---------------------------------------------------------14-------14-12 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=full +-----------------------------------------------------------14~--------- +12-------------------------------------------17~------17b-------------- +---14-12-11-14-12-11-9-12-11-9s8-9-s-21-------------x------------------ +--------------------------------------------------x-------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=full b=full full +14-15-17-17b---18t-p17~---14-15-17b----t18-s-20t-p-17b------15p14-18t-- +------------------------x---------------------------------x------------ +---------------------------------------------------------x------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 1 1/2 +14~---12--13t-p12--12--------p10h12p10--15tp10h12h14p12p10--t15p12h14p- +----x------------------------------------------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +12p10--t15p12h14p12p10--t15p12h14p12p10--t15p12h14p12p10--t15p12h14p12p +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +10h14s19p15-------15p12------------------------------------------------ +------------17-12-------------15s17p12---------12p8------13p12p10--8--- +------------------------16-12----------13------------------------------ +------------------------------------------14p9------12-9--------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---------------------------7-12p7-15p12-------------------------------- +12p10p8--7--10p8p7-------8--------------------------------------------- +-------------------9-8h9----------------21s11~------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---------------------------10-12-10-------10--------------------------- +10s12-13p12p10----10-12-13----------13-12----13-12-10-13-12-10s8-10h12- +---------------12------------------------------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b full b 1/2 b full +----------------------------------------------------------------------- +p10-8s7---8-7---------------------------------------------------------- +--------9-----9b------t10--9b----10b----------------------------------- +-------------------------------------------7s5~------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +palm mute +----------------------------------------------------------------------- +-----------------------5-----5-7-x-----7-8---7-8-10-7-8-10-12-8-10-12-- +---------4-5---4-5-7-8---7-8-------8-9-----9--------------------------- +7-4--5-7-----7--------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b full b 1 1/2 +8-------8-10----8-10-12-8-10-12-14-10-12-14-15b~----------21b---------- +--10-12------12-----------------------------------------x-------------- +------------------------------------------------------x---------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +full 1 1/2,1/2,2,1/2,1 1/2 2 1/2 +21b--------------------------21b~----------14-15-14h15p14----14-15h19-- +----------------------------------------17----------------17----------- +-----------------------------------s-16-------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 1/2 1/2 bar +p15----------s10s12--10-h14h15p14p12p10h12\/--12p10~-------13---------- +----19b~-------------------------------------------------x------------- +-------------------------------------------------------x--------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + fade out +----------------------------------------------------------------------- +13h15p13-12~----------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +Albums: +With Alcatrazz: +No Parole from Rock and Roll +Live Sentence + +With Steeler: +Steeler + +Solo (Rising Force): +Rising Force +Marching Out +Trilogy +Eclipse +Odyssey +Trial by Fire - Live in Lenningrad +Fire and Ice +The Seventh Sign (just out) + +Videos: + +Live '85 (Japan) +Trial By Fire (Russia) + diff --git a/guitar/tabs/Malmsteen/dark_star.tab.txt b/guitar/tabs/Malmsteen/dark_star.tab.txt new file mode 100644 index 0000000..9408b43 --- /dev/null +++ b/guitar/tabs/Malmsteen/dark_star.tab.txt @@ -0,0 +1,412 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Dark Star" from Rising Force + +* = natural harmonics +h = hammer on +p = pull off +~ = vibrato +\/ = dip note with bar +t = tap note with right hand +b=f(ull) = bend full +b 1 1/4 = bend one and one half steps i.e. E to F# +w/bar = dip or vibrato with tremolo bar + + + +-7~---------------------------------------2--3---4~-------------------- +-7~-----8~----7--5---4~----2~---4---5~-----------5~-------------------- +-8~----------------------------------------------4~-------------------- +---------------------4~------------------------------------------------ +-9~-----7~-----------------0~------------------------------------------ +------------------------------------3~-----------4~-------------------- + + +5~----------------6~---------------------7----------------7*----------- +5~----------------7~-------------------8----7--5--7-------------------- +7~--5h7p5s4--5~---6~-----------------9------8--6--8-------------------- +----------------------------------------------------------------------- +0~--------------------------------------------------------------------- +------------------6~----6--7--9----7------------------7*--------------- + + +-----12*------------------------12*-----------------7-12p8s7----------- +----------12*------7*------12*-------------------8--------------------- +---------------5*------7*----------------------9----------------------- +---------------------------------------------9------------------------- +----------------------------------------------------------------------- +12*-------------------------------------------------------------------- + + w/bar b 1/2 w/bar +---------12-14-~-----------------19-19p17p15s14h15p14b----------------- +------12----------------------17--------------------------17s15~------- +---12----------------------16------------------------------------------ +14----------------------17--------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +--------------------------------------------------12*------------------ +------12-16-15-13-12-15-13-12-----------------12*---------0h1p0-------- +---12-------------------------14-12-------12*----------7*-------------- +14----------------------------------16-14------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + w/bar do not pick notes all hammer ons +-----------------14-12------------------------------------------------- +-------12s15~----------15-14-12----------------------------------12-13- +-----9--------------------------12-11-------------------------12------- +---9----------------------------------14-------------------14---------- +10---------------------------------------14-12-10----10-14------------- +--------------------------------------------------14------------------- + + +---------15-14-17-15-19-20-19-20-17-20-15-20-14-15-------------15-19--- +12-17-16-------------------------------------------16-17----17--------- +---------------------------------------------------------16------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 1/2 vibrato w/bar +---21b~---------------------------------------------------------------- +17--------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +---------0\/----------------------------------------------------------- + + b 1/2 w/bar +----------------------------------------------------------------------- +----------------------------------------------------------------------- +-----------4--------4~----9~------------------------------------------- +-2~------x------------------------------------------------------------- +-------x------------------------x\/------------------------------------ +----------------------------------------------------------------------- + + +Theme + +--------------------14-15-14--------------19b--19~-14-17-15-14----15--- +----17b--17~--16-17----------16-17~-----x----------------------17------ +--------------------------------------x-------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +14----------14--------------------------------------------------------- +---17-16-17----16-17~-------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +--------------------14-15-14--------------19b--19~-14-17-15-14----15--- +----17b--17~--16-17----------16-17~-----x----------------------17------ +--x-----------------------------------x-------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +14----------14--------------------------------------------------------- +---17-16-17----16-17~-------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 2 +17s19-20~--17--20~--15--20~-------20--19~--20--17--19--20b----19~------ +-----------------------------19~--------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +--------------------14-15-14--------------19b--19~-14-17-15-14----15--- +----17b--17~--16-17----------16-17~-----x----------------------17------ +--x-----------------------------------x-------------------------------- +x---------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +14----------14--------------------------------------------------------- +---17-16-17----16-17~-------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f b=f +7h8p7--5-----------------------------------------------------11-12-14-- +---------8-7-5------------------------7-------10----10-12-13----------- +---------------8-7-5-4-------------9b---8-12b----11-------------------- +-----------------------7-5-4------------------------------------------- +-----------------------------7-6p0------------------------------------- +----------------------------------------------------------------------- + + +12-11-----------------------------------------20p17----20-17p14-------- +------13--12p10---------------------------5*--------19----------16----- +----------------12-11-9-8---------------------------------------------- +--------------------------10-9-7--------------------------------------- +---------------------------------10-9-7-6------------------------------ +----------------------------------------------------------------------- + + +17-14p11----------11-11h14p11s20p17----17p14----14p11----11p8---------- +---------13-10-13-------------------19-------16-------13------10p7s---- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f b=f +7h8p7--5--------------------------------------------------------------- +---------8-7-5------------------------7-------10----------------------- +---------------8-7-5-4-------------9b---8-12b----11~------------------- +-----------------------7-5-4------------------------------------------- +-----------------------------7-6--x------------------------------------ +----------------------------------------------------------------------- + + b=f b=2 +------------------------14-17b~-------14-17-14----14-17-19-20b~-------- +------13-16-13----13-16---------13-16----------16---------------------- +---14----------14------------------------------------------------------ +16--------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b= 1 1/2 +20-19-17-15-19-17-15------------14-15-17-15h17p15p14----14-15-17s19p15- +---------------------19-17~-17b----------------------17---------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +-------------------19p15----20p19p17-15-19p17-15-14h15-17p15p14----20b- +17----17-----------------17-------------------------------------17----- +---16----16----16------------------------------------------------------ +------------17--------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +19-20-17-20-15-20-14-20-19-20-17-20-15-20-14-20-19-20-17-20-15-20-14-20 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---20----------15-17-19-17-15----17-15-------15------------------------ +17----16-17-19----------------19-------19-17----19-17-16-19p17-16-13s12 +x---------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f +15-14-12s11----------14p12p11-----------------------------------7-12p8- +------------13p12p10----------13-12p11-12p11------------------8-------- +---------------------------------------------12-11s12b-12s8--9--------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + wide vib 1 1/2 +s16p12-------19s20p15--------20b~---------20b----19--20--19h20p19p17-15 +----------------------17----------------------------------------------- +-------16-12-------------16-------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +19s17p15s14h15-17-15--14----15-14-------14-12-------------------------- +-------------------------17-------17-16-------16-12-17-15-13s12----13-- +----------------------------------------------------------------14----- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=full b=full b=1/2 +----------------------------------------------------------------------- +12--------------------------------------------------------------------- +---14b-------15t-p14--19t--19tb---s15t-p14--p12s11b--11p9s8-5-9p5-4~--- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---------------------------12-17p12-----------------------12-17p20----- +------------------------13----------12-----------------13-------------- +5p4----------------9-14----------------9----------9-14----------------- +----7-5-4-------10-----------------------10----10---------------------- +-----------0s12-----------------------------12------------------------- +----------------------------------------------------------------------- + + b=1/2 b=2steps +12h17p12-12b----------------20b~-------20b~--20-19-17--16-------------- +----------------15~---------------------------------------18-17-15----- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=1/2 +------------------------------------------------------15-17-19-17-15-14 +----------------------------------19b---19~--16-17-19------------------ +17-16-14-12------------------------------------------------------------ +------------15-14-12--------------------------------------------------- +---------------------15-14-12-11--------------------------------------- +----------------------------------------------------------------------- + + +17-15-14----15-14-------14--------------------------------------------- +---------17-------17-15----17-15-13-17-15-13-12-15-13-12----13-12------ +---------------------------------------------------------14-------14-12 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=full +-----------------------------------------------------------14~--------- +12-------------------------------------------17~------17b-------------- +---14-12-11-14-12-11-9-12-11-9s8-9-s-21-------------x------------------ +--------------------------------------------------x-------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=full b=full full +14-15-17-17b---18t-p17~---14-15-17b----t18-s-20t-p-17b------15p14-18t-- +------------------------x---------------------------------x------------ +---------------------------------------------------------x------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 1 1/2 +14~---12--13t-p12--12--------p10h12p10--15tp10h12h14p12p10--t15p12h14p- +----x------------------------------------------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +12p10--t15p12h14p12p10--t15p12h14p12p10--t15p12h14p12p10--t15p12h14p12p +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +10h14s19p15-------15p12------------------------------------------------ +------------17-12-------------15s17p12---------12p8------13p12p10--8--- +------------------------16-12----------13------------------------------ +------------------------------------------14p9------12-9--------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---------------------------7-12p7-15p12-------------------------------- +12p10p8--7--10p8p7-------8--------------------------------------------- +-------------------9-8h9----------------21s11~------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---------------------------10-12-10-------10--------------------------- +10s12-13p12p10----10-12-13----------13-12----13-12-10-13-12-10s8-10h12- +---------------12------------------------------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b full b 1/2 b full +----------------------------------------------------------------------- +p10-8s7---8-7---------------------------------------------------------- +--------9-----9b------t10--9b----10b----------------------------------- +-------------------------------------------7s5~------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +palm mute +----------------------------------------------------------------------- +-----------------------5-----5-7-x-----7-8---7-8-10-7-8-10-12-8-10-12-- +---------4-5---4-5-7-8---7-8-------8-9-----9--------------------------- +7-4--5-7-----7--------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b full b 1 1/2 +8-------8-10----8-10-12-8-10-12-14-10-12-14-15b~----------21b---------- +--10-12------12-----------------------------------------x-------------- +------------------------------------------------------x---------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +full 1 1/2,1/2,2,1/2,1 1/2 2 1/2 +21b--------------------------21b~----------14-15-14h15p14----14-15h19-- +----------------------------------------17----------------17----------- +-----------------------------------s-16-------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b 1/2 1/2 bar +p15----------s10s12--10-h14h15p14p12p10h12\/--12p10~-------13---------- +----19b~-------------------------------------------------x------------- +-------------------------------------------------------x--------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + fade out +----------------------------------------------------------------------- +13h15p13-12~----------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +Albums: +With Alcatrazz: +No Parole from Rock and Roll +Live Sentence + +With Steeler: +Steeler + +Solo (Rising Force): +Rising Force +Marching Out +Trilogy +Eclipse +Odyssey +Trial by Fire - Live in Lenningrad +Fire and Ice +The Seventh Sign (just out) + +Videos: + +Live '85 (Japan) +Trial By Fire (Russia) + diff --git a/guitar/tabs/Malmsteen/deja_vu.tab b/guitar/tabs/Malmsteen/deja_vu.tab new file mode 100644 index 0000000..6aafaba --- /dev/null +++ b/guitar/tabs/Malmsteen/deja_vu.tab @@ -0,0 +1,297 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Deja Vu" +from Odyssey +letostak@netcom.com + + +Fig 1 play 4x +|---------------------------------|---------------------------------------|| +|---------------------------------|---------------------------------------|| +|---------------------------------|---------------------------------------|| +|---------------------------------|---------------------------------------|| +|-------------2-----2-4---2-4-5-2-|-4-5-2-5---5---5---4---4---4-----------|| +|-2-4-5-2-4-5---4-5-----5---------|---------5---4---2---1---2---4-1-------|| + + +last time ending +|----------------------------9--5------------------------------------------| +|-------------------------7--------7---------------------------------------| +|----------------------6--------------6------------------------------------| +|-------------4--6--7--------------------7--p--6---------------------------| +|----------4--------------------------------------8------------------------| +|-2--4--5------------------------------------------------------------------| + + + I .. +Fig 2 +||---------------|-----------------|-----------------|---------------------| +||---------------|-----------------|--4--------------|--3~-----------------| +||---------------|--9--------------|--4--------------|--2~-----------------| +||---------------|--9----------9---|--4--------------|--4~-----------------| +||---9~----------|--7--------------|--2--------------|---------------------| +||---------------|-----------------|-----------------|---------------------| + + +Don't .. +|----------------|-----------x-----|-----------------|---------------------| +|-2--------------|-----------x-----|--4--------------|--7------------------| +|-2--------------|--9--------x-----|--4--------------|--7------------------| +|-4--------------|--9--------------|--4--------------|--7------------------| +|-4--------------|--7--------------|-----------------|--5------------------| +|-2--------------|-----------------|-----------------|------------x----0---| + + + Do .. +|-----------------------------|-------------------|-------------------------| +|-----------------------------|-------------------|-------------------------| +|---6----------7-----6-----4--|-----6-----6-----4-|-6---------7-----6-----4-| +|---6----------7-----6-----4--|-----6-----6-----4-|-6---------7-----6-----4-| +|-----4-4-4-4----4-4---4-4----|-4-4---4-4---------|---4-4-4-4---4-4---4-4---| +|-----------------------------|-------------------|-------------------------| + + + Do .. + +|----------------------|----------------------|----------------------------| +|----------------------|----------------------|----------------------------| +|-----6-----7--6-------|----------------------|----------------------------| +|-----6-----7--6-------|----------------------|----------------------------| +|-4-4---4-4--------4---|-2-2-2-2--------------|----------------------------| +|----------------------|------------5-5-5-5-5-|-4-4-4-4-4---3-3-3-3-3------| + + + Deja vu .. + +|------------------|----------|------------|-------------------------------| +|-2----------------|----------|------------|-------------------------------| +|-2----------------|----------|------------|-s7----------------------------| +|-4----------------|--7-------|---9--------|-s7----------------------------| +|-4-------0----4---|--5-------|---6--------|-s5---5p4-5p4-----4------------| +|-2----------------|----------|------------|--------------7-5---7-5p4------| + + +Deja vu .. + +|------------------|----------|------------|-------------------------------| +|-2----------------|--7-------|------------|--0----------------------------| +|-2----------------|--7-------|------------|--9----------------------------| +|-4----------------|--7-------|---9--------|--9----------------------------| +|-4-------0----4---|--5-------|---6--------|--7----------------8-----------| +|-2----------------|----------|------------|-------------------------------| + + +play fig 1 with ending last time through + +Cross .. +play fig2 +|-----------------|-----------|--------xs-----------|----------------------| +|-----------------|-----------|--------xs-----------|----------------------| +|-----------------|-----------|--------xs-----------|----------------------| +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|----------------xs---|----------------------| + +crystal .. +cont fig 2 +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|------------7--------|----------------------| +|-----------------|-----------|----------7----------|----------------------| +|-----------------|-----------|--------7------------|----------------------| +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|---------------------|----------------------| + + +cont fig 2 +Do you .. + +chorus +Deja .. +Deja .. + + +|---------|12h14p12p10-----------------------------------------------------| +|-19~-----|------------14p12-10p9---------------------------------0--------| +|---------|-----------------------11-10-----------------11-----------------| +|---------|-----------------------------12p11p9----------------------------| +|---------|-------------------------------------12p11p9--------------------| +|---------|----------------------------------------------------------------| + + +|-14p10-------10-14p10----------10-10p7-----10-14p10----------14-|-19p14---- +|----------12----------12----12-----------7----------12----12----|---------- +|-------11----------------11------------7---------------11-------|-------16- +|----------------------------------------------------------------|---------- +|----------------------------------------------------------------|---------- +|----------------------------------------------------------------|---------- + + +----14-14p10----------10-10p7-----10-14p10-12-------14-|-15p12----------12p9 +-15----------12----12-----------7-------------11-12----|-------14----14----- +----------------11------------7------------------------|----------15-------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- + + +-------9-9p6-----6-12-9-------9-|-15p12----------12p9-------9-15p12--------- +----11---------8-----------11---|-------14----14---------11---------14----14 +-12----------9----------12------|----------15---------12---------------15--- +--------------------------------|------------------------------------------- +--------------------------------|------------------------------------------- +--------------------------------|------------------------------------------- + + +-12-18-15-------15--|-19p14---------14p10-------14-10-7-----10-14p10-------- +-------------17-----|------15----15----------11-----------7-------------11-- +----------18--------|---------16----------11------------7------------11----- +--------------------|------------------------------------------------------- +--------------------|------------------------------------------------------- +--------------------|------------------------------------------------------- + + +-14-|-19p14----------14p10-------14--|-19p14----------14p10-------14-10-7--- +----|-------15----15----------11-----|-------15----15----------11----------- +----|----------16----------11--------|----------16----------11-------------- +----|--------------------------------|-------------------------------------- +----|--------------------------------|-------------------------------------- +----|--------------------------------|-------------------------------------- + + +-----10-19------|-------10-14p10----------10-14-11----------11-14p11-|15p12- +---7-------19---|----10----------10----10----------12----12----------|------ +-7------------0-|-11----------------11----------------11-------------|------ +----------------|----------------------------------------------------|------ +----------------|----------------------------------------------------|------ +----------------|----------------------------------------------------|------ + + +----------12-15p12-------13-16p13----16-|-14tr15-14~----18tr19---18~-------| +-12----12-------------15----------14----|----------------------------------| +----12-------------16-------------------|----------------------------------| +----------------------------------------|----------------------------------| +----------------------------------------|----------------------------------| +----------------------------------------|----------------------------------| + + 1/2 +|-21b--rb21--21b--rb21--21b--rb21~--|-19-21-17-21----21-|----21------------- +|-----------------------------------|-------------21----|-19----18~--18s-15- +|-----------------------------------|-------------------|------------------- +|-----------------------------------|-------------------|------------------- +|-----------------------------------|-------------------|------------------- +|-----------------------------------|-------------------|------------------- + + +-------|--------------------------------------------------------------|----- +-14-12-|-15p12h14h15p14p12-15p14p12----14p12--------------------------|----- +-------|----------------------------14-------14p13p11-14p13p11-10--10p|-0--- +-------|--------------------------------------------------------------|----- +-------|--------------------------------------------------------------|----- +-------|--------------------------------------------------------------|----- + + +------7-10p7---7---13p10-10-------13-16p13-13-------16-|-19p16--22--21-22-0-| +----9--------9---9-------------15----------------18----|--------------------| +-10-------------------------16----------------19-------|--------------------| +-------------------------------------------------------|--------------------| +-------------------------------------------------------|--------------------| +-------------------------------------------------------|--------------------| + + +|-17-14-16-17-16-14-19-14-17p16-14-21---17-16-17-16-14-19-17-16-17-16-14---| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + 2 +|-21s---s21s---21---21-|--21---21b-rbs9h10----10p9-------9------------------ +|----------------------|-------------------12------12p10---12-10-9----10p9-- +|----------------------|-------------------------------------------10------- +|----------------------|---------------------------------------------------- +|----------------------|---------------------------------------------------- +|----------------------|---------------------------------------------------- + + +---------|-9---7h10---7h9h10-9-10----10------------------|------------------ +---------|---9------9-------------10----9tr10-9-7tr9-7~--|-s6p0-6h7p6------- +-11-10~--|-----------------------------------------------|------------9p7p6- +---------|-----------------------------------------------|------------------ +---------|-----------------------------------------------|------------------ +---------|-----------------------------------------------|------------------ + + +-------------------------|--------------------------------------------|----- +-------------------------|----------------------6h9p6-7h9h10p7-8h10h12|10bf- +---9p6-------6-----------|----------6h9-6h7h7-7-----------------------|----- +-9-----9p7p6---9p7p6---7p|6---6h7h9-----------------------------------|----- +---------------------9---|--7-----------------------------------------|----- +-------------------------|--------------------------------------------|----- + + +---------------------------------|------------------------| +-rb10--10p7-9-10p9p7-9p6-7-9p7p6-|---7-10p7---------------| +---------------------------------|-7----------7p6---6-----| +---------------------------------|----------9-----9---9-7-| +---------------------------------|------------------------| +---------------------------------|------------------------| + + +w/wah +|-------------------------|------------------------------x--x--x--x--------| +|-------------------------|------------------------------x--x--x--x---0----| +|-------------------------|-0----------------------------------------------| +|----2--------------0-----|----2--0-----2--0-------------------------------| +|-------------0--2-----2--|----------2--------2--0-------------------------| +|-0-----0--3--------------|-------------------------3----------------------| + + +|-------------------------|------------------------------------------------| +|-------------------------|---------------------------------------8s-------| +|-------------------------|-0-------------------------------------7s-------| +|----2--------------0-----|----2--0-----2--0-------------------------------| +|-------------0--2-----2--|----------2--------2--0-------------------------| +|-0-----0--3--------------|-------------------------3--0--0----------------| + + +|-------------------------|------------------------------------------------| +|-------------------------|------------------------------------------------| +|-------------------------|-0----------------------------------------------| +|----2--------------0-----|----2--0-----2--0-------------------------------| +|-------------0--2-----2--|----------2--------2--0-------------------------| +|-0-----0--3--------------|-------------------------3bf--------------------| + + +Deja .. + +|-------------------|-----------|------------|-----------------------------| +|-2-----------------|-----------|------------|-----------------------------| +|-2-----------------|-----------|------------|-----------------------------| +|-4-----------------|--2--------|--9---------|-7---------------------------| +|-4---------0---4---|--3--------|--6---------|-5--5p4-----4----------------| +|-2-----------------|-----------|------------|--------7-5----7-5p4---------| + + +Deja vu .. +Deja .. +Deja .. + + +play fig1 with ending + + + +|----------------|------------------|| +|----------------|------------------|| +|---5------------|---4----------4---|| +|---5------------|---4----------4---|| +|---2------------|---2----------2---|| +|----------------|------------------|| + + + diff --git a/guitar/tabs/Malmsteen/deja_vu.tab.txt b/guitar/tabs/Malmsteen/deja_vu.tab.txt new file mode 100644 index 0000000..6aafaba --- /dev/null +++ b/guitar/tabs/Malmsteen/deja_vu.tab.txt @@ -0,0 +1,297 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Deja Vu" +from Odyssey +letostak@netcom.com + + +Fig 1 play 4x +|---------------------------------|---------------------------------------|| +|---------------------------------|---------------------------------------|| +|---------------------------------|---------------------------------------|| +|---------------------------------|---------------------------------------|| +|-------------2-----2-4---2-4-5-2-|-4-5-2-5---5---5---4---4---4-----------|| +|-2-4-5-2-4-5---4-5-----5---------|---------5---4---2---1---2---4-1-------|| + + +last time ending +|----------------------------9--5------------------------------------------| +|-------------------------7--------7---------------------------------------| +|----------------------6--------------6------------------------------------| +|-------------4--6--7--------------------7--p--6---------------------------| +|----------4--------------------------------------8------------------------| +|-2--4--5------------------------------------------------------------------| + + + I .. +Fig 2 +||---------------|-----------------|-----------------|---------------------| +||---------------|-----------------|--4--------------|--3~-----------------| +||---------------|--9--------------|--4--------------|--2~-----------------| +||---------------|--9----------9---|--4--------------|--4~-----------------| +||---9~----------|--7--------------|--2--------------|---------------------| +||---------------|-----------------|-----------------|---------------------| + + +Don't .. +|----------------|-----------x-----|-----------------|---------------------| +|-2--------------|-----------x-----|--4--------------|--7------------------| +|-2--------------|--9--------x-----|--4--------------|--7------------------| +|-4--------------|--9--------------|--4--------------|--7------------------| +|-4--------------|--7--------------|-----------------|--5------------------| +|-2--------------|-----------------|-----------------|------------x----0---| + + + Do .. +|-----------------------------|-------------------|-------------------------| +|-----------------------------|-------------------|-------------------------| +|---6----------7-----6-----4--|-----6-----6-----4-|-6---------7-----6-----4-| +|---6----------7-----6-----4--|-----6-----6-----4-|-6---------7-----6-----4-| +|-----4-4-4-4----4-4---4-4----|-4-4---4-4---------|---4-4-4-4---4-4---4-4---| +|-----------------------------|-------------------|-------------------------| + + + Do .. + +|----------------------|----------------------|----------------------------| +|----------------------|----------------------|----------------------------| +|-----6-----7--6-------|----------------------|----------------------------| +|-----6-----7--6-------|----------------------|----------------------------| +|-4-4---4-4--------4---|-2-2-2-2--------------|----------------------------| +|----------------------|------------5-5-5-5-5-|-4-4-4-4-4---3-3-3-3-3------| + + + Deja vu .. + +|------------------|----------|------------|-------------------------------| +|-2----------------|----------|------------|-------------------------------| +|-2----------------|----------|------------|-s7----------------------------| +|-4----------------|--7-------|---9--------|-s7----------------------------| +|-4-------0----4---|--5-------|---6--------|-s5---5p4-5p4-----4------------| +|-2----------------|----------|------------|--------------7-5---7-5p4------| + + +Deja vu .. + +|------------------|----------|------------|-------------------------------| +|-2----------------|--7-------|------------|--0----------------------------| +|-2----------------|--7-------|------------|--9----------------------------| +|-4----------------|--7-------|---9--------|--9----------------------------| +|-4-------0----4---|--5-------|---6--------|--7----------------8-----------| +|-2----------------|----------|------------|-------------------------------| + + +play fig 1 with ending last time through + +Cross .. +play fig2 +|-----------------|-----------|--------xs-----------|----------------------| +|-----------------|-----------|--------xs-----------|----------------------| +|-----------------|-----------|--------xs-----------|----------------------| +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|----------------xs---|----------------------| + +crystal .. +cont fig 2 +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|------------7--------|----------------------| +|-----------------|-----------|----------7----------|----------------------| +|-----------------|-----------|--------7------------|----------------------| +|-----------------|-----------|---------------------|----------------------| +|-----------------|-----------|---------------------|----------------------| + + +cont fig 2 +Do you .. + +chorus +Deja .. +Deja .. + + +|---------|12h14p12p10-----------------------------------------------------| +|-19~-----|------------14p12-10p9---------------------------------0--------| +|---------|-----------------------11-10-----------------11-----------------| +|---------|-----------------------------12p11p9----------------------------| +|---------|-------------------------------------12p11p9--------------------| +|---------|----------------------------------------------------------------| + + +|-14p10-------10-14p10----------10-10p7-----10-14p10----------14-|-19p14---- +|----------12----------12----12-----------7----------12----12----|---------- +|-------11----------------11------------7---------------11-------|-------16- +|----------------------------------------------------------------|---------- +|----------------------------------------------------------------|---------- +|----------------------------------------------------------------|---------- + + +----14-14p10----------10-10p7-----10-14p10-12-------14-|-15p12----------12p9 +-15----------12----12-----------7-------------11-12----|-------14----14----- +----------------11------------7------------------------|----------15-------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- + + +-------9-9p6-----6-12-9-------9-|-15p12----------12p9-------9-15p12--------- +----11---------8-----------11---|-------14----14---------11---------14----14 +-12----------9----------12------|----------15---------12---------------15--- +--------------------------------|------------------------------------------- +--------------------------------|------------------------------------------- +--------------------------------|------------------------------------------- + + +-12-18-15-------15--|-19p14---------14p10-------14-10-7-----10-14p10-------- +-------------17-----|------15----15----------11-----------7-------------11-- +----------18--------|---------16----------11------------7------------11----- +--------------------|------------------------------------------------------- +--------------------|------------------------------------------------------- +--------------------|------------------------------------------------------- + + +-14-|-19p14----------14p10-------14--|-19p14----------14p10-------14-10-7--- +----|-------15----15----------11-----|-------15----15----------11----------- +----|----------16----------11--------|----------16----------11-------------- +----|--------------------------------|-------------------------------------- +----|--------------------------------|-------------------------------------- +----|--------------------------------|-------------------------------------- + + +-----10-19------|-------10-14p10----------10-14-11----------11-14p11-|15p12- +---7-------19---|----10----------10----10----------12----12----------|------ +-7------------0-|-11----------------11----------------11-------------|------ +----------------|----------------------------------------------------|------ +----------------|----------------------------------------------------|------ +----------------|----------------------------------------------------|------ + + +----------12-15p12-------13-16p13----16-|-14tr15-14~----18tr19---18~-------| +-12----12-------------15----------14----|----------------------------------| +----12-------------16-------------------|----------------------------------| +----------------------------------------|----------------------------------| +----------------------------------------|----------------------------------| +----------------------------------------|----------------------------------| + + 1/2 +|-21b--rb21--21b--rb21--21b--rb21~--|-19-21-17-21----21-|----21------------- +|-----------------------------------|-------------21----|-19----18~--18s-15- +|-----------------------------------|-------------------|------------------- +|-----------------------------------|-------------------|------------------- +|-----------------------------------|-------------------|------------------- +|-----------------------------------|-------------------|------------------- + + +-------|--------------------------------------------------------------|----- +-14-12-|-15p12h14h15p14p12-15p14p12----14p12--------------------------|----- +-------|----------------------------14-------14p13p11-14p13p11-10--10p|-0--- +-------|--------------------------------------------------------------|----- +-------|--------------------------------------------------------------|----- +-------|--------------------------------------------------------------|----- + + +------7-10p7---7---13p10-10-------13-16p13-13-------16-|-19p16--22--21-22-0-| +----9--------9---9-------------15----------------18----|--------------------| +-10-------------------------16----------------19-------|--------------------| +-------------------------------------------------------|--------------------| +-------------------------------------------------------|--------------------| +-------------------------------------------------------|--------------------| + + +|-17-14-16-17-16-14-19-14-17p16-14-21---17-16-17-16-14-19-17-16-17-16-14---| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + 2 +|-21s---s21s---21---21-|--21---21b-rbs9h10----10p9-------9------------------ +|----------------------|-------------------12------12p10---12-10-9----10p9-- +|----------------------|-------------------------------------------10------- +|----------------------|---------------------------------------------------- +|----------------------|---------------------------------------------------- +|----------------------|---------------------------------------------------- + + +---------|-9---7h10---7h9h10-9-10----10------------------|------------------ +---------|---9------9-------------10----9tr10-9-7tr9-7~--|-s6p0-6h7p6------- +-11-10~--|-----------------------------------------------|------------9p7p6- +---------|-----------------------------------------------|------------------ +---------|-----------------------------------------------|------------------ +---------|-----------------------------------------------|------------------ + + +-------------------------|--------------------------------------------|----- +-------------------------|----------------------6h9p6-7h9h10p7-8h10h12|10bf- +---9p6-------6-----------|----------6h9-6h7h7-7-----------------------|----- +-9-----9p7p6---9p7p6---7p|6---6h7h9-----------------------------------|----- +---------------------9---|--7-----------------------------------------|----- +-------------------------|--------------------------------------------|----- + + +---------------------------------|------------------------| +-rb10--10p7-9-10p9p7-9p6-7-9p7p6-|---7-10p7---------------| +---------------------------------|-7----------7p6---6-----| +---------------------------------|----------9-----9---9-7-| +---------------------------------|------------------------| +---------------------------------|------------------------| + + +w/wah +|-------------------------|------------------------------x--x--x--x--------| +|-------------------------|------------------------------x--x--x--x---0----| +|-------------------------|-0----------------------------------------------| +|----2--------------0-----|----2--0-----2--0-------------------------------| +|-------------0--2-----2--|----------2--------2--0-------------------------| +|-0-----0--3--------------|-------------------------3----------------------| + + +|-------------------------|------------------------------------------------| +|-------------------------|---------------------------------------8s-------| +|-------------------------|-0-------------------------------------7s-------| +|----2--------------0-----|----2--0-----2--0-------------------------------| +|-------------0--2-----2--|----------2--------2--0-------------------------| +|-0-----0--3--------------|-------------------------3--0--0----------------| + + +|-------------------------|------------------------------------------------| +|-------------------------|------------------------------------------------| +|-------------------------|-0----------------------------------------------| +|----2--------------0-----|----2--0-----2--0-------------------------------| +|-------------0--2-----2--|----------2--------2--0-------------------------| +|-0-----0--3--------------|-------------------------3bf--------------------| + + +Deja .. + +|-------------------|-----------|------------|-----------------------------| +|-2-----------------|-----------|------------|-----------------------------| +|-2-----------------|-----------|------------|-----------------------------| +|-4-----------------|--2--------|--9---------|-7---------------------------| +|-4---------0---4---|--3--------|--6---------|-5--5p4-----4----------------| +|-2-----------------|-----------|------------|--------7-5----7-5p4---------| + + +Deja vu .. +Deja .. +Deja .. + + +play fig1 with ending + + + +|----------------|------------------|| +|----------------|------------------|| +|---5------------|---4----------4---|| +|---5------------|---4----------4---|| +|---2------------|---2----------2---|| +|----------------|------------------|| + + + diff --git a/guitar/tabs/Malmsteen/devil_in_disguise.tab b/guitar/tabs/Malmsteen/devil_in_disguise.tab new file mode 100644 index 0000000..d4ff627 --- /dev/null +++ b/guitar/tabs/Malmsteen/devil_in_disguise.tab @@ -0,0 +1,384 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Devil in Disguise" +from Eclipse +letostak@netcom.com Judy Letostak +rhythm guitar tune (6) to D +Intro Nylon string acoustic + +|---------1--------------------------|-------1------------------------0----| +|-------3-----3---3---3---3-5---2----|-----3-----3---3---3---3------2------| +|-----2-----3---0---2---------0----0-|---2-----3---0---2----------0--------| +|---0-------------------3---5---2----|-0-------------------3----2----------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-------1----------------------------|-------1--------------------0--------| +|-----3-----3---3---3---3--5----2----|-----3-----3---3---3---3------2------| +|---2-----3---0---2----------0-----0-|---2-----3---0---2--------------0----| +|-0-------------------3----5----2----|-0-------------------3---2-----------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-------1----------------------------|-------1-----------------------0-----| +|-----3-----3---3---3---3--5----2----|-----3-----3---3---3---3-----2-------| +|---2-----3---0---2----------0-----0-|---2-----3---0---2---------0---------| +|-0-------------------3----5----2----|-0-------------------3---2-----------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-------1---------------------------|-------1-------------------0----------| +|-----3-----3---3---3---3-5----2----|-----3-----3---3---3---3-----2--------| +|---2-----3---0---2---------0----0--|---2-----3---0---2-------------0------| +|-0-------------------3---5----2----|-0-------------------3---2------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| + + +|--------------------------------|-----------------------------------------| +|---------3-------2--------------|---------3--------2----------------------| +|-----2-------3-------2---3-0----|-----2--------3-------2---0-2-3----------| +|---2---2---2---2---2---2-----2--|---2---2----2---2---2---2----------------| +|-0------------------------------|-0---------------------------------------| +|--------------------------------|-----------------------------------------| + + +|-----------------------------|--3--5--3------------------------------------| +|---------3-------2-----------|--3--3--3------------------------------------| +|-----2-------3-------2---3-2-|--3--3--3------------------------------------| +|---2---2---2---2---2---2-----|--5-----5------/8---8--7---------------------| +|-0---------------------------|---------------/6---5--4---------------------| +|-----------------------------|---------------------------------------------| + *(6) tuned to D + + +Chorus + +Don't .. + +|--------------------|-------------------|---------------------------------| +|--3---3-------------|---3----3----------|-3----3--------------------------| +|--2---2-------------|---2----2----------|-2----2--------------------------| +|--0---0-------------|---0----0----------|-0----0---------------x\---------| +|--0---0-------------|---0----0----------|-0----0---------------x\---------| +|--------------------|-------------------|---------------------------------| + + +Devil .. +|-3----3-----------------|---------------------------|----------------------| +|-3----3-----------------|---------------------------|----------------------| +|------------------------|---------------------6-----|-----------------6----| +|-5----5----/8-----7-----|------7--8--5--7--3-----7--|-----7--8------7------| +|-----------/6--5--4-----|------5--5--5--5--5--7--5--|-----5--5-5/10-8-7-5~-| +|------------------------|-0--0----------------------|-0-0------------------| + + Hold .. + Never .. + +|---------------------------|-3----3----------------||-------0-------0-----| +|---------------------------|-3----3----------------||-----3---3---3---3---| +|---------------------6-----|-----------------------||o--2-------3---------| +|------7--8--5--7--3-----7--|-5----5----/8-----7----||o--0-----------------| +|------5--5--5--5--5--7--5--|-----------/6--5--4----||---------------------| +|-0--0----------------------|-----------------------||---------------------| + + +Wound .. +Vengeance .. + +|---0-1p0---------0-------|---0-1h3---------0-----|-------0----------------- +|-3-------3-----3------3--|-3-------3-----3-----3-|---------1-------------5- +|-----------2-3------3----|-----------2-3-----3---|-----0-----0-2p0-----2--- +|-------------------------|-----------------------|---2---------------2----- +|-------------------------|-----------------------|-3---------------4------- +|-------------------------|-----------------------|------------------------- + + Though .. + Time .. + +-----------|------0-------0----|---0--1p0---------0-----|---0-1p0---------0- +-----------|----3---3---3---3--|-3--------3-----3-----3-|-3-------3-----3--- +--2h3-2p0--|--2-------3--------|------------2-3-----3---|-----------2-3----- +-----------|--0----------------|------------------------|------------------- +-----------|-------------------|------------------------|------------------- +-----------|-------------------|------------------------|------------------- + + + +soul .. +blind .. + +-------|--3----3---------------|-------------------------|------------------ +----3--|--3----3---------------|-------------------------|------------------ +--3----|--3----3---------------|-----6-----7-----6-----3-|-----6-----7------ +-------|--5----5----/8-----7~--|-----7-----8-----7-----5-|-----7-----8------ +-------|------------/6--5--4~--|-0-0---0-0---0-0---0-0---|-0-0---0-0---0-0-- +-------|-----------------------|-------------------------|------------------ + + +-------------| +-------------| +--10------9--| +--12-----11--| +-----0-0-----| +-------------| + +You ... + +|--------------------------|--3----3---------------------------------------| +|--------------------------|--3----3---------------------------------------| +|-----6-----7-----6-----3--|--3----3---------------------------------------| +|-----7-----8-----7-----5--|--5----5-----/8-----7~-------------------------| +|-0-0---0-0---0-0---0-0----|-------------/6--5--4~-------------------------| +|--------------------------|-----------------------------------------------| + + +Chorus +Don't .. +|---------------------------|----------------------|---------------------------| +|---------------------------|----------------------|---------------------------| +|---------------------6-----|-----------------6----|---------------------6-----| +|------7--8--5--7--3-----7--|-----7--8------7------|------7--8--5--7--3-----7--| +|------5--5--5--5--5--7--5--|-----5--5-5/10-8-7-5~-|------5--5--5--5--5--7--5--| +|-0--0----------------------|-0-0------------------|-0--0----------------------| + + +You .. + +|-3----3----------------|--------------------------------------------------| +|-3----3----------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-5----5----/8-----7----|--------------------------------------------------| +|-----------/6--5--4----|--------------------------------------------------| +|-----------------------|--------------------------------------------------| + + +and I .. + +|---------------------------|-3----3----------------|------------12/19b----| +|---------------------------|-3----3----------------|----------------------| +|---------------------6-----|-----------------------|----------------------| +|------7--8--5--7--3-----7--|-5----5----/8-----7----|--/8-----7------------| +|------5--5--5--5--5--7--5--|-----------/6--5--4----|--/6--5--4------------| +|-0--0----------------------|-----------------------|----------------------| + + +Guitar solo + +|--rb19--17h19p17--------17---------22bf-|-19p16-------16p13----16p13------- +|-----------------20bf~-----20-19~-------|-------18\15-------15-------15-12- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- + + +-13p10------10/13p12-10----12p10-------10----------------------------------| +-------12\9-------------13-------13-12----13p12p10-9-12-10p9-10p9----10p9--| +------------------------------------------------------------------12-------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +|--------------------------------------------------------------10h12h13p12p10 +|-10p9-10p9-----------------------------------------9-10h12h13-------------- +|-----------12-10p9----10p9--------------10p9-10-12------------------------- +|-------------------12------10p9-12p10p9------------------------------------ +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +------------------------------------|--------------------------12tr13/16---- +-13p12p10-9-------------------------|-------------9tr10-12tr13-------------- +------------12p10p9-----------------|-------9tr10--------------------------- +--------------------12-10p9---------|-9tr10--------------------------------- +----------------------------12-11~--|--------------------------------------- +------------------------------------|--------------------------------------- + + +--12-12h13p12-|-10-12-10-------10------------------------------------------- +--------------|----------13p12----13p12p10-13-12p10-9h10-12-13-12p10-10----- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- + + +---------------------------------------------------------|------10-13p10---- +--12-13-10-11-13/15-12-13-15/17-15-15-13p12-10-12-10-9~--|-9h12----------12- +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ + + +----------------------------|----------------------------------------------- +--9----9-12p9---------------|-------13bf--rb13-t15p10h13p10h13p10----------- +----10--------10p7----------|-------------------------------------t16p9h13-- +-------------------9~-------|----------------------------------------------- +-----------------------12bf-|-rb12------------------------------------------ +----------------------------|----------------------------------------------- + + +---------------------------|-----------------------------------10-12-13----- +---------------------------|------------------9-10-12h13-10-12----------10h- +--t16p13p9h13-t14p13p12p10-|-9h10p9---9~----9------------------------------- +---------------------------|--------9-----9--------------------------------- +---------------------------|------------------------------------------------ +---------------------------|------------------------------------------------ + + +-------12h13p12p10----------/22bf-|-\13p12p10----------/22bf-\13p12p10------ +-12h13-------------13p12p10-------|-----------13p12p10-----------------13p12 +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +-----/22bf--|-0------------10----------------10-12h13p12p10-12p10-------10-- +-p10--------|---13bf--rb13----13-12-10-12-13----------------------13p12----- +------------|--------------------------------------------------------------- +------------|--------------------------------------------------------------- +------------|--------------------------------------------------------------- +------------|--------------------------------------------------------------- + + +--------------------10-12h13-12p10-12p10-|---------------------------------- +--13p12-10-10h12h13----------------------|-13-12-10-13-12-10--9-12-10-9-12-- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- + + +------------------------------------------------------|----------12h13p12-10 +--10-9------------------------------------------------|-10h12h13------------ +-------13-12-10-13-12-10-9----10p9----9~---------9h10-|--------------------- +---------------------------12------12----9h10h12------|--------------------- +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- + + 1/2 +----------12h13h16--10h|12b--------------------8-12p10p8-------------------- +-13p12-10--------------|---------------9h10h12-----------12p10p9------------ +-----------------------|----------9h10---------------------------12p10------ +-----------------------|-----9h10--------------------------------------9---- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- + + +---------------------------------------|-----------------------------------| +---------------------------------------|-----------------------------------| +--9h10p9------------9------------------|-----------------------------------| +---------12----9h10---12p9-------------|-----------------------------------| +------------12-------------12-11-------|-----------------------------------| +---------------------------------12-10-|--0dive-w/bar----------------------| + + +Repeat intro + + +You .. +My .. +Don't .. +|---------------------------|----------------------|---------------------------| +|---------------------------|----------------------|---------------------------| +|---------------------6-----|-----------------6----|---------------------6-----| +|------7--8--5--7--3-----7--|-----7--8------7------|------7--8--5--7--3-----7--| +|------5--5--5--5--5--7--5--|-----5--5-5/10-8-7-5~-|------5--5--5--5--5--7--5--| +|-0--0----------------------|-0-0------------------|-0--0----------------------| + + +You .. + +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-5-4--2-----2------------|--------------------------| +|---------------------|---------5-----5--4------|--------------------------| +|---------------------|---------------------2---|--------------------------| +|---------------------|-------------------------|--------------------------| +| | | | +| | | | +|---3----3------------|-----5--5----------------|--------------------------| +|---3----3------------|-5-5-5--5----------------|--------------------------| +|---------------------|-5---5-------------------|-----------------------3--| +|---5----5--/8-----7--|-7--------/10----8-------|-----------------------3--| +|-----------/6--5--4--|----------/8--7--6-------|-2-0-2-3-2-0-2---2-0-2-1--| +|---------------------|-------------------------|-2-0-2-3-2-0-2---2-0-2----| + + +|-------------------------|--------------------------| +|-------------------------|--------------------------| +|-------------------------|-----------------------3--| +|----------------------0--|-----------------------3--| +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2-1--| +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2----| + + +|-------------------------|--------------------------|---------------------- +|-------------------------|--------------------------|---------------------- +|-------------------------|-----------------------3--|---------------------- +|----------------------0--|-----------------------3--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2-1--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2----|---------------------- + + + +|-------------------------|--------------------------|---------------------- +|-------------------------|--------------------------|---------------------- +|-------------------------|-----------------------3--|---------------------- +|----------------------0--|-----------------------3--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2-1--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2----|---------------------- + + +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|-------------------------x\-pick-scrape-----------------------------------| +|----------------------0--x\-----------------------------------------------| +|-2-0-2-3-2-0-2--2-0-2-0---------------------------------------------------| +|-2-0-2-3-2-0-2--2-0-2-0---------------------------------------------------| + + +|---------------------------------|-----------------------------------------| +|---------------------------------|-----------------------------------------| +|---------------------------------|-----------------------------------------| +|---------------------------------|---------------2---3---2-1~-3------------| +|---------2---1---0-----1---0-----|-------2---1-2---3-3-2------3-2----------| +|-2-0-2-3---3---3---2-3---2---1-2-|-0-2-3---3-------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-------2---1-------------2---1---|-------2---1-------------2---0----------| +|-0-2-3---3---2-1-0-2-2-3---3---3-|-0-2-3---3---3-2-0-2-2-3---0-3----------| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-------------------------------3~--|--------------------------------------| +|-----2---1---------1---0-----------|-0-----2----0-------------------------| +|-0-2---3---2-0-1-2---2---3-2-0-----|-0-2-3---3----2-3-0-2-1~--------------| + + +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|-----------2-----------------2----|-0-2---------------2---3---------------| +|-------2---2---------1---2--------|-----2-----------2---3---3-2-0-2-------| +|-0-2-3---3---0-2-2-3---3---3---0--|-------0-3-2-0-0-----------------------| + +fade out + diff --git a/guitar/tabs/Malmsteen/devil_in_disguise.tab.txt b/guitar/tabs/Malmsteen/devil_in_disguise.tab.txt new file mode 100644 index 0000000..d4ff627 --- /dev/null +++ b/guitar/tabs/Malmsteen/devil_in_disguise.tab.txt @@ -0,0 +1,384 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Devil in Disguise" +from Eclipse +letostak@netcom.com Judy Letostak +rhythm guitar tune (6) to D +Intro Nylon string acoustic + +|---------1--------------------------|-------1------------------------0----| +|-------3-----3---3---3---3-5---2----|-----3-----3---3---3---3------2------| +|-----2-----3---0---2---------0----0-|---2-----3---0---2----------0--------| +|---0-------------------3---5---2----|-0-------------------3----2----------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-------1----------------------------|-------1--------------------0--------| +|-----3-----3---3---3---3--5----2----|-----3-----3---3---3---3------2------| +|---2-----3---0---2----------0-----0-|---2-----3---0---2--------------0----| +|-0-------------------3----5----2----|-0-------------------3---2-----------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-------1----------------------------|-------1-----------------------0-----| +|-----3-----3---3---3---3--5----2----|-----3-----3---3---3---3-----2-------| +|---2-----3---0---2----------0-----0-|---2-----3---0---2---------0---------| +|-0-------------------3----5----2----|-0-------------------3---2-----------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-------1---------------------------|-------1-------------------0----------| +|-----3-----3---3---3---3-5----2----|-----3-----3---3---3---3-----2--------| +|---2-----3---0---2---------0----0--|---2-----3---0---2-------------0------| +|-0-------------------3---5----2----|-0-------------------3---2------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| + + +|--------------------------------|-----------------------------------------| +|---------3-------2--------------|---------3--------2----------------------| +|-----2-------3-------2---3-0----|-----2--------3-------2---0-2-3----------| +|---2---2---2---2---2---2-----2--|---2---2----2---2---2---2----------------| +|-0------------------------------|-0---------------------------------------| +|--------------------------------|-----------------------------------------| + + +|-----------------------------|--3--5--3------------------------------------| +|---------3-------2-----------|--3--3--3------------------------------------| +|-----2-------3-------2---3-2-|--3--3--3------------------------------------| +|---2---2---2---2---2---2-----|--5-----5------/8---8--7---------------------| +|-0---------------------------|---------------/6---5--4---------------------| +|-----------------------------|---------------------------------------------| + *(6) tuned to D + + +Chorus + +Don't .. + +|--------------------|-------------------|---------------------------------| +|--3---3-------------|---3----3----------|-3----3--------------------------| +|--2---2-------------|---2----2----------|-2----2--------------------------| +|--0---0-------------|---0----0----------|-0----0---------------x\---------| +|--0---0-------------|---0----0----------|-0----0---------------x\---------| +|--------------------|-------------------|---------------------------------| + + +Devil .. +|-3----3-----------------|---------------------------|----------------------| +|-3----3-----------------|---------------------------|----------------------| +|------------------------|---------------------6-----|-----------------6----| +|-5----5----/8-----7-----|------7--8--5--7--3-----7--|-----7--8------7------| +|-----------/6--5--4-----|------5--5--5--5--5--7--5--|-----5--5-5/10-8-7-5~-| +|------------------------|-0--0----------------------|-0-0------------------| + + Hold .. + Never .. + +|---------------------------|-3----3----------------||-------0-------0-----| +|---------------------------|-3----3----------------||-----3---3---3---3---| +|---------------------6-----|-----------------------||o--2-------3---------| +|------7--8--5--7--3-----7--|-5----5----/8-----7----||o--0-----------------| +|------5--5--5--5--5--7--5--|-----------/6--5--4----||---------------------| +|-0--0----------------------|-----------------------||---------------------| + + +Wound .. +Vengeance .. + +|---0-1p0---------0-------|---0-1h3---------0-----|-------0----------------- +|-3-------3-----3------3--|-3-------3-----3-----3-|---------1-------------5- +|-----------2-3------3----|-----------2-3-----3---|-----0-----0-2p0-----2--- +|-------------------------|-----------------------|---2---------------2----- +|-------------------------|-----------------------|-3---------------4------- +|-------------------------|-----------------------|------------------------- + + Though .. + Time .. + +-----------|------0-------0----|---0--1p0---------0-----|---0-1p0---------0- +-----------|----3---3---3---3--|-3--------3-----3-----3-|-3-------3-----3--- +--2h3-2p0--|--2-------3--------|------------2-3-----3---|-----------2-3----- +-----------|--0----------------|------------------------|------------------- +-----------|-------------------|------------------------|------------------- +-----------|-------------------|------------------------|------------------- + + + +soul .. +blind .. + +-------|--3----3---------------|-------------------------|------------------ +----3--|--3----3---------------|-------------------------|------------------ +--3----|--3----3---------------|-----6-----7-----6-----3-|-----6-----7------ +-------|--5----5----/8-----7~--|-----7-----8-----7-----5-|-----7-----8------ +-------|------------/6--5--4~--|-0-0---0-0---0-0---0-0---|-0-0---0-0---0-0-- +-------|-----------------------|-------------------------|------------------ + + +-------------| +-------------| +--10------9--| +--12-----11--| +-----0-0-----| +-------------| + +You ... + +|--------------------------|--3----3---------------------------------------| +|--------------------------|--3----3---------------------------------------| +|-----6-----7-----6-----3--|--3----3---------------------------------------| +|-----7-----8-----7-----5--|--5----5-----/8-----7~-------------------------| +|-0-0---0-0---0-0---0-0----|-------------/6--5--4~-------------------------| +|--------------------------|-----------------------------------------------| + + +Chorus +Don't .. +|---------------------------|----------------------|---------------------------| +|---------------------------|----------------------|---------------------------| +|---------------------6-----|-----------------6----|---------------------6-----| +|------7--8--5--7--3-----7--|-----7--8------7------|------7--8--5--7--3-----7--| +|------5--5--5--5--5--7--5--|-----5--5-5/10-8-7-5~-|------5--5--5--5--5--7--5--| +|-0--0----------------------|-0-0------------------|-0--0----------------------| + + +You .. + +|-3----3----------------|--------------------------------------------------| +|-3----3----------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-5----5----/8-----7----|--------------------------------------------------| +|-----------/6--5--4----|--------------------------------------------------| +|-----------------------|--------------------------------------------------| + + +and I .. + +|---------------------------|-3----3----------------|------------12/19b----| +|---------------------------|-3----3----------------|----------------------| +|---------------------6-----|-----------------------|----------------------| +|------7--8--5--7--3-----7--|-5----5----/8-----7----|--/8-----7------------| +|------5--5--5--5--5--7--5--|-----------/6--5--4----|--/6--5--4------------| +|-0--0----------------------|-----------------------|----------------------| + + +Guitar solo + +|--rb19--17h19p17--------17---------22bf-|-19p16-------16p13----16p13------- +|-----------------20bf~-----20-19~-------|-------18\15-------15-------15-12- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- + + +-13p10------10/13p12-10----12p10-------10----------------------------------| +-------12\9-------------13-------13-12----13p12p10-9-12-10p9-10p9----10p9--| +------------------------------------------------------------------12-------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +|--------------------------------------------------------------10h12h13p12p10 +|-10p9-10p9-----------------------------------------9-10h12h13-------------- +|-----------12-10p9----10p9--------------10p9-10-12------------------------- +|-------------------12------10p9-12p10p9------------------------------------ +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +------------------------------------|--------------------------12tr13/16---- +-13p12p10-9-------------------------|-------------9tr10-12tr13-------------- +------------12p10p9-----------------|-------9tr10--------------------------- +--------------------12-10p9---------|-9tr10--------------------------------- +----------------------------12-11~--|--------------------------------------- +------------------------------------|--------------------------------------- + + +--12-12h13p12-|-10-12-10-------10------------------------------------------- +--------------|----------13p12----13p12p10-13-12p10-9h10-12-13-12p10-10----- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- + + +---------------------------------------------------------|------10-13p10---- +--12-13-10-11-13/15-12-13-15/17-15-15-13p12-10-12-10-9~--|-9h12----------12- +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ + + +----------------------------|----------------------------------------------- +--9----9-12p9---------------|-------13bf--rb13-t15p10h13p10h13p10----------- +----10--------10p7----------|-------------------------------------t16p9h13-- +-------------------9~-------|----------------------------------------------- +-----------------------12bf-|-rb12------------------------------------------ +----------------------------|----------------------------------------------- + + +---------------------------|-----------------------------------10-12-13----- +---------------------------|------------------9-10-12h13-10-12----------10h- +--t16p13p9h13-t14p13p12p10-|-9h10p9---9~----9------------------------------- +---------------------------|--------9-----9--------------------------------- +---------------------------|------------------------------------------------ +---------------------------|------------------------------------------------ + + +-------12h13p12p10----------/22bf-|-\13p12p10----------/22bf-\13p12p10------ +-12h13-------------13p12p10-------|-----------13p12p10-----------------13p12 +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +-----/22bf--|-0------------10----------------10-12h13p12p10-12p10-------10-- +-p10--------|---13bf--rb13----13-12-10-12-13----------------------13p12----- +------------|--------------------------------------------------------------- +------------|--------------------------------------------------------------- +------------|--------------------------------------------------------------- +------------|--------------------------------------------------------------- + + +--------------------10-12h13-12p10-12p10-|---------------------------------- +--13p12-10-10h12h13----------------------|-13-12-10-13-12-10--9-12-10-9-12-- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- + + +------------------------------------------------------|----------12h13p12-10 +--10-9------------------------------------------------|-10h12h13------------ +-------13-12-10-13-12-10-9----10p9----9~---------9h10-|--------------------- +---------------------------12------12----9h10h12------|--------------------- +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- + + 1/2 +----------12h13h16--10h|12b--------------------8-12p10p8-------------------- +-13p12-10--------------|---------------9h10h12-----------12p10p9------------ +-----------------------|----------9h10---------------------------12p10------ +-----------------------|-----9h10--------------------------------------9---- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- + + +---------------------------------------|-----------------------------------| +---------------------------------------|-----------------------------------| +--9h10p9------------9------------------|-----------------------------------| +---------12----9h10---12p9-------------|-----------------------------------| +------------12-------------12-11-------|-----------------------------------| +---------------------------------12-10-|--0dive-w/bar----------------------| + + +Repeat intro + + +You .. +My .. +Don't .. +|---------------------------|----------------------|---------------------------| +|---------------------------|----------------------|---------------------------| +|---------------------6-----|-----------------6----|---------------------6-----| +|------7--8--5--7--3-----7--|-----7--8------7------|------7--8--5--7--3-----7--| +|------5--5--5--5--5--7--5--|-----5--5-5/10-8-7-5~-|------5--5--5--5--5--7--5--| +|-0--0----------------------|-0-0------------------|-0--0----------------------| + + +You .. + +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| +|---------------------|-5-4--2-----2------------|--------------------------| +|---------------------|---------5-----5--4------|--------------------------| +|---------------------|---------------------2---|--------------------------| +|---------------------|-------------------------|--------------------------| +| | | | +| | | | +|---3----3------------|-----5--5----------------|--------------------------| +|---3----3------------|-5-5-5--5----------------|--------------------------| +|---------------------|-5---5-------------------|-----------------------3--| +|---5----5--/8-----7--|-7--------/10----8-------|-----------------------3--| +|-----------/6--5--4--|----------/8--7--6-------|-2-0-2-3-2-0-2---2-0-2-1--| +|---------------------|-------------------------|-2-0-2-3-2-0-2---2-0-2----| + + +|-------------------------|--------------------------| +|-------------------------|--------------------------| +|-------------------------|-----------------------3--| +|----------------------0--|-----------------------3--| +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2-1--| +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2----| + + +|-------------------------|--------------------------|---------------------- +|-------------------------|--------------------------|---------------------- +|-------------------------|-----------------------3--|---------------------- +|----------------------0--|-----------------------3--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2-1--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2----|---------------------- + + + +|-------------------------|--------------------------|---------------------- +|-------------------------|--------------------------|---------------------- +|-------------------------|-----------------------3--|---------------------- +|----------------------0--|-----------------------3--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2-1--|---------------------- +|-2-0-2-3-2-0-2--2-0-2-0--|-2-0-2-3-2-0-2---2-0-2----|---------------------- + + +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|-------------------------x\-pick-scrape-----------------------------------| +|----------------------0--x\-----------------------------------------------| +|-2-0-2-3-2-0-2--2-0-2-0---------------------------------------------------| +|-2-0-2-3-2-0-2--2-0-2-0---------------------------------------------------| + + +|---------------------------------|-----------------------------------------| +|---------------------------------|-----------------------------------------| +|---------------------------------|-----------------------------------------| +|---------------------------------|---------------2---3---2-1~-3------------| +|---------2---1---0-----1---0-----|-------2---1-2---3-3-2------3-2----------| +|-2-0-2-3---3---3---2-3---2---1-2-|-0-2-3---3-------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-------2---1-------------2---1---|-------2---1-------------2---0----------| +|-0-2-3---3---2-1-0-2-2-3---3---3-|-0-2-3---3---3-2-0-2-2-3---0-3----------| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-------------------------------3~--|--------------------------------------| +|-----2---1---------1---0-----------|-0-----2----0-------------------------| +|-0-2---3---2-0-1-2---2---3-2-0-----|-0-2-3---3----2-3-0-2-1~--------------| + + +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|-----------2-----------------2----|-0-2---------------2---3---------------| +|-------2---2---------1---2--------|-----2-----------2---3---3-2-0-2-------| +|-0-2-3---3---0-2-2-3---3---3---0--|-------0-3-2-0-0-----------------------| + +fade out + diff --git a/guitar/tabs/Malmsteen/disciples_of_hell.tab b/guitar/tabs/Malmsteen/disciples_of_hell.tab new file mode 100644 index 0000000..9496bcf --- /dev/null +++ b/guitar/tabs/Malmsteen/disciples_of_hell.tab @@ -0,0 +1,753 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Disciples of Hell" +from Marching Out +letostak@netcom.com +tune down 1/2 step + +acoustic guitar +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|------9---------9---------9---------9---------9---------9---------9-------| +|---10---10---10---10---10---10---10---10---10---10---10---10---10---10----| +|-0---------0---------0---------0---------0---------0---------0---------0--| + + +|-------------------------------------------------------------| +|-------------------------------------------------------------| +|-------------------------------------------------------------| +|-----7-------7-------7-------7-------7-------10-------10-----| +|---7---7---7---7---7---7---7---7---7---7---7----7---7----7---| +|-0-------0-------0-------0-------0-------0--------0--------0-| + + +|--------------------------------|-----------------|------------------------ +|--------------------------------|-----------------|------------------------ +|--------------------------------|-----------------|------------------------ +|------9---------9---------9-----|-----4-------4---|-----5-------5-------5-- +|---10---10---10---10---10---10s-|---6---6---6---6s|---7---7---7---7---7---7 +|-0---------0---------0----------|-0-------0-------|-0-------0-------0------ + + +---------|---------------------------------------------------------|-------- +---------|---------------------------------------------------------|-------- +---------|---------------------------------------------------------|-------- +-----5---|-----5-------5-------5-------5-------5-------4-------4---|----5--- +---7---7-|---7---7---7---7---7---7---7---7---7---7---7---7---7---7-|--7---7- +-0-------|-8-------8-------8-------8-------8-------8-------8-------|7------- + + +-------------------------|---------------------------------|---------------- +-------------------------|---------------------------------|---------------- +-------------------------|---------------------------------|---------------- +-----5-------5-------5---|-----5-------5-------5-------5---|-----4-------4-- +---7---7---7---7---7---7-|---7---7---7---7---7---7---7---7-|---7---7---7---7 +-7-------7-------7-------|-7-------7-------7-------7-------|-6-------6------ + + +------------------------------------------|-------------------------|------- +------------------------------------------|-------------------------|------- +------------------------------------------|-------------------------|------- +-----4-------4-------4-------4-------4----|-----4-------4-------4---|-----5- +---7---7---7---7---7---7---7---7---7----7-|---7---7---7---7---7---7-|---7--- +-6-------6-------6-------6-------6--------|-7-------7-------7-------|-7----- + + +-------------------|-------------------------|-----------------------------| +-------------------|-------------------------|-----------------------------| +-------------------|-------------------------|-----------------------------| +-------5-------5---|-----5-------5-------5---|------7--------7---------7---| +-7---7---7---7---7-|---7---7---7---7---7---7-|----9---9----9---9-----9---9-| +---7-------7-------|-8-------8-------8-------|-11-------11-------11s-------| + + nat harm---- +|------------------|-12------------|---------------|-----------------------| +|---------------12-|-----12--------|---------------|-----------------------| +|----------9-12----|----------12---|--11---8---9---|-------5s--------------| +|--------9---------|---------------|---------------|-9s4-------------------| +|-----10-----------|---------------|---------------|-----------------------| +|-s12--------------|---------------|---------------|-----------------------| + + +|-------0------|-------------------|----------------|-------7---5---3------| +|-----0---0----|-------------------|----------------|-----5----------------| +|---2-------2--|-------------------|-------------4--|---4------------------| +|-1------------|-2-----------------|-----2--4h5-----|-5--------------------| +|--------------|-------2-----------|---2------------|----------------------| +|--------------|------------2h3p2--|-0--------------|----------------------| + + +|-2---------------|----------------|------------|-----------------7--------| +|-----5--4--4~----|-5----4-----5~--|------------|--------0------8----------| +|-----------------|----------------|------------|------0------9------------| +|-----------------|----------------|------------|----2---------------------| +|-----------------|----------------|------------|--------------------------| +|-----------------|----------------|-0----------|-0------------------------| + + +|-12--7----------------------|------------------------------|--------------7| +|--------8-------------------|------------------------------|-------0----8--| +|-----------9-------8h9h11p8-|------------------------------|-----0----9----| +|--------------10------------|-7h9h10-7---------------------|---2-----------| +|----------------------------|-----------6h7h9-6------------|---------------| +|----------------------------|--------------------5h7h9--5--|-0-------------| + + +|-12p7--------15p12----------11-12-14-11-|---------------------------------| +|-------8--0---------12------------------|-10-12-13-10---------------------| +|------------------------14--------------|-------------8-9-11-8--2-4-5s2---| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| + + +|--------4s7p4----------|---------8s12----------------|------------10-14p10- +|------5-------5--------|------10------14-10----------|---------10---------- +|-1--4-----------4------|----9---------------9--------|s11---12------------- +|------------------7-6--|-10-------------------12-10~-|----12--------------- +|-----------------------|-----------------------------|--------------------- +|-----------------------|-----------------------------|--------------------- + + harm 12 fret +--------|-----------------|-10-7h10p7-------|----------------------|--------| +-10-----|-----------3-----|-----------8-----|-------0-------0------|--------| +----11--|-----------------|-----------0--7--|-5--4-----------------|-<12>---| +--------|<12-12>--4-------|-----------------|----------<5>-----<12>|--------| +--------|--------------5--|-----------------|----------------------|--------| +--------|-----------------|-----------------|----------------------|--------| + + +|-----------8-12p8-------|-----1--5s8p5------|-7p3------3p0------3p0-------| +|---------8--------8-----|---1----------6----|-----5--------0--------1-----| +|-------9------------9~--|-2--------------5~-|-------4--------0--------0---| +|----10------------------|-------------------|-----------------------------| +|-10---------------------|-------------------|-----------------------------| +|------------------------|-------------------|-----------------------------| + + +|-5p2------3p0-----7p3------|-<12>-----------------------------------|------ +|-----4--------0-------5----|------<12>-----<12>---8-----------------|------ +|-------5----------------x--|-----------<12>-----9-------9----4------|------ +|---------------------------|-------------------------9s----5--------|------ +|---------------------------|------------------------------------7---|-7---- +|---------------------------|--------------------------------------7-|---3-3 + + elec in +-----|--0---------------|-------------------------------------|------------- +-----|--0---------------|-------------------------------------|------------- +-----|--0---------------|----------------------------5--------|------------- +-----|--2---------------|----------------------------5--------|------------- +-----|--2---------------|----------------------------3--------|------------- +-7---|--0------xsxsx----|-0--0--0--0--0--0--3--2--0-----------|-0--0--0--0-- + + +-----------------------|----------------------------------|----------------| +-----------------------|----------------------------------|----------------| +----------------9------|----------------------------5-----|-4---4--9~s-----| +----------------9------|----------------------------5-----|-4---4--9~s-----| +----------------7------|----------------------------3-----|-2---6--7~s-----| +-0--0--3--2--0---------|-0--0--0--0--0--0--3--2--0--------|----------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|----------------------------5----|-----------------------------9----------| +|----------------------------5----|-----------------------------9----------| +|----------------------------3----|-----------------------------7----------| +|-0--0--0--0--0--0--3--2--0-------|-0--0--0--0--0--0--3--2--0--------------| + + +|---------------------------------|-----------<7>---------<5>--------------| +|---------------------------------|---------------<7>---------<7>----------| +|----------------------------5----|--4----4-----------<5>---------0--------| +|----------------------------5----|--4----4--------------------------------| +|----------------------------3----|--2----6--------------------------------| +|-0--0--0--0--0--0--3--2--0-------|----------------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|----------------------------5----|-----------------------------9----------| +|----------------------------5----|-----------------------------9----------| +|----------------------------3----|-----------------------------7----------| +|-0--0--0--0--0--0--3--2--0-------|-0--0--0--0--0--0--3--2--0--------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|----------------------------5----|---4-----------4----------9~s-----------| +|----------------------------5----|---4-----------4----------9~s-----------| +|----------------------------3----|---2-----------6----------7~s-----------| +|-0--0--0--0--0--0--3--2--0-------|----------------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|----------------------------5----|-----------------------------9----------| +|----------------------------5----|-----------------------------9----------| +|----------------------------3----|-----------------------------7----------| +|-0--0--0--0--0--0--3--2--0-------|-0--0--0--0--0--0--3--2--0--------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|----------------5----------------|---4-----------4----------9~s-----------| +|----------------5----------------|---4-----------4----------9~s-----------| +|----------------3----------------|---2-----------6----------7~s-----------| +|--0----3--2--0-------------------|----------------------------------------| + + + In .. + +|--------------------------------|---------------------|-------------------| +|--------------------------------|---------------------|-------------------| +|--------------------------------|---------------------|-7-----------7-----| +|--------------------------------|---------------------|-7-----------7-----| +|--------------------------------|---------------------|-5-----------5-----| +|-0---0--0--0--0--0---0--0--0--0-|-0----0---0--0--0--0-|-------------------| + + + Burning .. + +|--------------------------------|------------------|----------------------| +|--------------------------------|------------------|----------------------| +|--------------------------------|-9----------------|9---------------------| +|--------------------------------|-9----------------|9---------------------| +|-3--2--0--3--2--0-----2--3--5~--|-7----------------|7---------------------| +|-------------------x------------|-0----0--0--0--0--|-----0--0--0--0--0--0-| + + + human .. + +|------------------------|--------------------------------|----------------- +|------------------------|--------------------------------|----------------- +|--7--x-x-x-x-x-x---7----|--------------------------------|----------------- +|--7--x-x-x-x-x-x---7----|--------------------------------|----------------- +|--5--x-x-x-x-x-x---5----|-3--2--0--3--2--0-----2--3--5~--|----------------- +|------------------------|-------------------3------------|-0--0--0--0--0--0 + + +from .. + +--------------|----<7>--------------------------|--------------------------| +--------------|--------<7>-----<7>---------<7>--|--------------------------| +-9------------|-9----------<5>-----<5>-<7>------|-7--------------------7---| +-9------------|-9-------------------------------|-7--x--x--x--x--x--x--7---| +-7------------|-7-------------------------------|-5--5--5--5--5--5--5--5---| +-0------------|---------------------------------|--------------------------| + + + Out ..- + +|--------------------------------|-----------------0------|----------------- +|--------------------------------|-----------------0------|----------------- +|--------------------------------|-9---------------9------|----------------- +|--------------------------------|-9---------------9------|----------------- +|-3--2--0--3--2--0-----2--3--5~--|-7---------------7------|----------------- +|-------------------3------------|-0------0--0--0--0------|-0---0--0--0--0-- + + +stone .. + +|----------|--------------------------|------------------------------------| +|----------|--------------------------|------------------------------------| +|----------|-7--------------------7---|------------------------------------| +|----------|-7--x--x--x--x--x--x--7---|------------------------------------| +|----------|-5--5--5--5--5--5--5--5---|-3--2--0--3--2--0--3--2--0--5~------| +|0--0------|--------------------------|------------------------------------| + + +Pre-chorus + +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|-5p4p2------------------------------| +|----------------------------2--1-----|-------5--4--2--1--2--4-------------| +|-2--2--2--2--2--2--0--2--3--------3--|-------------------------0--2--3----| + + + Rise... + +|-------------------------------------|-------------------------------------| +|-------------------------------------|-------------------------------------| +|-------------------------------------|-3h4p3-------------------------------| +|-------------------------------------|--------5--4--2--------------2--4--5-| +|----------------------------2--1-----|-----------------5--2--4--5----------| +|-2--2--2--2--2--2--0--2--3--------3--|-------------------------------------| + + +Burn... + +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|-5p4p2------------------------------| +|----------------------------2--1-----|-------5--4--2--1--2--4-------------| +|-2--2--2--2--2--2--0--2--3--------3--|-------------------------0--2--3----| + + +|-------------------------------------|-------------------------------------| +|-------------------------------------|-------------------------------------| +|-------------------------------------|-3h4p3-------------------------------| +|-------------------------------------|--------5--4--2--------------2--4--5-| +|----------------------------2--1-----|-----------------5--2--4--5----------| +|-2--2--2--2--2--2--0--2--3--------3--|-------------------------------------| + + + No .. + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-0---0--0--0--0--0--0--0--0--0--0--|-2--2--2--2--2--2--2--2--2--2--2--2---| + + + of hell +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-3--3--3--3--3--3--3--3--3--3--3--3--|-5--5--5--5--5--5--5--5--5--5--5--5-| + + Father's .. + +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-7--7--7--7--7--7--7--7--7--7--7--7--|-8--8--8--8--8--8--8--8--8--8--8--8-| + + Casting .. + +|-------------------------------------------------|-11h12p11p8-------------- +|-------------------------------------------------|------------12p10p8------ +|-------------------------------------------------|--------------------11p9- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-10--10--10--10--10--10--10--10--10--10--10--10--|------------------------- + + No .. +------------------|-------------------------------------------------------| +------------------|-------------------------------------------------------| +-p8--9p8----------|-------------------------------------------------------| +----------10--9~--|------2------------------------------------------------| +------------------|------2------------------------------------------------| +------------------|------0------------------------------------------------| + +bstop .. + +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|-2--2--2--2--2--2--2--2--2--2--2--2---|-3--3--3--3--3--3--3--3--3--3--3--3--| + + Worshipping + +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|-5--5--5--5--5--5--5--5--5--5--5--5-|-7--7--7--7--7--7--7--7--7--7--7--7--| + + +Darkness and + +|------------------------------------| +|------------------------------------| +|------------------------------------| +|------------------------------------| +|------------------------------------| +|-8--8--8--8--8--8--8--8--8--8--8--8-| + + Lucifer's .. +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|--------------------------| +|-10--10--10--10--10--10--10--10--10--10--10--10--|11-11-11-11-11-11-11-11-11| + + +|-----------------------------|--------------------------------------------| +|-----------------------------|--------------------------------------------| +|-----------------------------|----------------------------9---------------| +|-2-----------------------5---|----------------------------9---------------| +|-2-----------------------5---|----------------------------7---------------| +|-0--0--0--0--0--3--2--0--3---|-0--0--0--0--0--0--3--2--0------------------| + + +|-------------------------------|------------------<7>---------------------| +|-------------------------------|---------------<7>------------------------| +|----------------------------5--|-4----------9---------<5>-----------------| +|----------------------------5--|-4----------9-----------------------------| +|----------------------------3--|-2----6~----7-----------------------------| +|-0--0--0--0--0--0--3--2--0-----|------------------------------------------| + + +|-------------------------------|----------------------------0-------------| +|-------------------------------|----------------------------0-------------| +|----------------------------5--|----------------------------9-------------| +|-2--------------------------5--|----------------------------9-------------| +|-2--------------------------3--|----------------------------7-------------| +|-0-----0--0--0--0--3--2--0-----|-0--0--0--0--0--0--3--2--0----------------| + + +|------------------------------|---------<5>-----------<7>-----------------| +|------------------------------|-------------<5>-----------<7>-------------| +|--------------------------5---|-4---------------<5>------------<5>--------| +|---2----------------------5---|-4---9-------------------------------------| +|---2----------------------3---|-2---6-------------------------------------| +|---0--0--0--0--0--3p2--0------|-------------------------------------------| + + +Victims .. + +|-------------------------|---------------------------|---------------------| +|-------------------------|---------------------------|---------------------| +|-------------------------|---------------------------|-7------------------7| +|-2-----------------------|---------------------------|-7--x--x--x--x--x-x-7| +|-2-------------------7~--|------------------------7--|-5--5--5--5--5--5-5-5| +|-0--0--0--0--0--0--0-----|-0--0--0--0--0--0--0--0----|---------------------| + + Fools .. + +|--------------------------------|----0-----------|----------0-------------| +|--------------------------------|----0-----------|----------0-------------| +|--------------------------------|---------9------|------------------------| +|--------------------------------|---------9------|------------------------| +|-3--2--0--3--2--0-----2--3--5~--|----------------|------------------------| +|-------------------3------------|-0-----------0--|0-0-0-0-0---0-0-0-0-0-0-| + +Searching .. + +x pick scrape +|--------------|-------------------------------| +|--------------|-------------------------------| +|-7----x--x----|-------------------------------| +|-7----x--x----|-------------------------------| +|-5----x--x----|-3--2--0--3--2--0-----2--3--5~-| +|--------------|-------------------3-----------| + + +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|-5p4p2------------------------------| +|----------------------------2--1-----|-------5--4--2--1--2--4-------------| +|-2--2--2--2--2--2--0--2--3--------3--|-------------------------0--2--3----| + + +|-------------------------------------|-------------------------------------| +|-------------------------------------|-------------------------------------| +|-------------------------------------|-3h4p3-------------------------------| +|-------------------------------------|--------5--4--2--------------2--4--5-| +|----------------------------2--1-----|-----------------5--2--4--5----------| +|-2--2--2--2--2--2--0--2--3--------3--|-------------------------------------| + + + No .. + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-0---0--0--0--0--0--0--0--0--0--0--|-2--2--2--2--2--2--2--2--2--2--2--2---| + + + of hell +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-3--3--3--3--3--3--3--3--3--3--3--3--|-5--5--5--5--5--5--5--5--5--5--5--5-| + + Father's .. + +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|-------9~---------------9~----------| +|-7--7--7--7--7--7--7--7--7--7--7--7--|-8----------------------------------| + + Casting .. + +|-------------------------------------------------|------------------------| +|-------------------------------------------------|-------4-7-5-4----------| +|-------------------------------------------------|---4-6---------5-4------| +|-------------------------------------------------|-------------------7-5--| +|-------------12------------------------------12--|------------------------| +|-10--10--10----------------------10--10--10------|11----------------------| + +No .. + +|------------------------------| +|------------------------------| +|------------------------------| +|--2---------------------------| +|--2---------------------------| +|--0---------0--0--0--0--0--0--| + + + +stop .. + +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|--------------------------------------|-------------------------------------| +|-2--2--2--2--2--2--2--2--2--2--2--2---|-3--3--3--3--3--3--3--3--3--3--3--3--| + + Worshipping + +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|-5--5--5--5--5--5--5--5--5--5--5--5-|-7--7--7--7--7--7--7--7--7--7--7--7--| + + +Darkness and + +|------------------------------------| +|------------------------------------| +|------------------------------------| +|------------------------------------| +|------------------------------------| +|-8--8--8--8--8--8--8--8--8--8--8--8-| + + Lucifer's .. +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|--------------------------| +|-------------------------------------------------|---13----13----13----13-~-| +|-10--10--10--10--10--10--10--10--10--10--10--10--|11----11----11----11------| + + +|-----------------------------|--------------------------------------------| +|-----------------------------|--------------------------------------------| +|-----------------------------|----------------------------9---------------| +|-2-----------------------5---|----------------------------9---------------| +|-2-----------------------5---|----------------------------7---------------| +|-0--0--0--0--0--3--2--0--3---|-0--0--0--0--0--0--3--2--0------------------| + + +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|----------------------------5--|-4----------------------------------------| +|----------------------------5--|-4----------------------------------------| +|----------------------------3--|-2----6~----7~s---------------------------| +|-0--0--0--0--0--0--3--2--0-----|------------------------------------------| + + +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|----------------------------5--|----------------------------9-------------| +|-2--------------------------5--|----------------------------9-------------| +|-2--------------------------3--|----------------------------7-------------| +|-0-----0--0--0--0--3--2--0-----|-0--0--0--0--0--0--3--2--0----------------| + + +|------------------------------|---------<5>-----------<7>-----------------| +|------------------------------|-------------<5>-----------<7>-------------| +|--------------------------5---|-4---------------<5>------------<5>--------| +|---2----------------------5---|-4---9-------------------------------------| +|---2----------------------3---|-2---6-------------------------------------| +|---0--0--0--0--0--3p2--0------|-------------------------------------------| + + +Guitar solo + +|----------7--12p7--------------|------------------------------------------| +|--------8---------8--12p7------|------------------------------------------| +|------9---------------------9--|-8-9-11-8---------------------------------| +|--5-9---------------------9----|----------7-9-10-7------------------------| +|7------------------------------|-------------------6-7-9-6----------------| +|-------------------------------|---------------------------5-7-8-5--------| + + +|-----------7--12p7------15p12--------|-11-12-14-11------------------------- +|---------8---------8----------12-----|-------------10-12-13-10------------- +|-------9-------------9-----------12--|-------------------------8-9-11-8---- +|---5-9-------------------------------|------------------------------------- +|-7-----------------------------------|------------------------------------- +|-------------------------------------|------------------------------------- + + +-----------|-------12-16p12--16s19--16---------|-20p17--------17p12--------- +-----------|----12---------------------17------|-------17-----------13------ +-----------|-14---------------------------16~--|----------17-----------14--- +-7-9-10-7--|-----------------------------------|---------------------------- +-----------|-----------------------------------|---------------------------- +-----------|-----------------------------------|---------------------------- + + +-12p8-------------------|-------10-14-10-14s17-14--------------------------| +------10----13p10-------|----10-------------------15-----------------------| +---------9--------9-----|-11-------------------------14~-------------------| +--------------------10--|--------------------------------------------------| +------------------------|--------------------------------------------------| +------------------------|--------------------------------------------------| + + +|-7h10p7-------------------|-----8-12-8-12s15-12---------|-------13-17-13--- +|--------8---8-------------|---8-----------------13------|----13------------ +|----------7---7s4-7-4-----|-9----------------------12~--|-14--------------- +|----------------------5~--|-----------------------------|------------------ +|--------------------------|-----------------------------|------------------ +|--------------------------|-----------------------------|------------------ + + +-17s20-17---------|-19p15--------15p12--------15p12----15-14p11----14------| +----------18------|-------17-----------12-----------13----------12---------| +-------------17~--|----------18-----------12-------------------------------| +------------------|--------------------------------------------------------| +------------------|--------------------------------------------------------| +------------------|--------------------------------------------------------| + + 1 1/2 +|-15p12--------19p15--------21b~--|--21b---21b---21b----21b--|-21rb---21b~-| +|-------12-----------17-----------|--------------------------|-------------| +|----------12-----------16--------|--------------------------|-------------| +|---------------------------------|--------------------------|-------------| +|---------------------------------|--------------------------|-------------| +|---------------------------------|--------------------------|-------------| + + +|-------17----------------17-20-19-17----19-17----|-------17---------------- +|-20bf-----20-19-17-19-20-------------20-------20-|-19h20----20-19p17h19-20- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +-17-20-19-17----19-17----------17----|-------------------------------------- +-------------20-------20-20bf-----20-|-19p17-20-19-17----19-17s16----17-16-- +-------------------------------------|----------------20----------17-------- +-------------------------------------|-------------------------------------- +-------------------------------------|-------------------------------------- +-------------------------------------|-------------------------------------- + + +---------|-------------19p15-----------------------------|------19-18h19-14- +---------|----------17-------17--------------------------|---17------------- +-17-16~--|-16----16-------------16---16-16-16------------|16---------------- +---------|----17------------------------------17-16-14~--|------------------ +---------|-----------------------------------------------|------------------ +---------|-----------------------------------------------|------------------ + + +-19----19-17-19-15-19-14-19-|----19-19s20-17-20-15-20----20------------------| +----17----------------------|-17----------------------19----16h17h20p17p16-17| +----------------------------|------------------------------------------------| +----------------------------|------------------------------------------------| +----------------------------|------------------------------------------------| +----------------------------|------------------------------------------------| + + +|---------------0--14-14h18t21p14h18p14-|-14h18t21p15h18p15p12h14h18t21-14-- +|-----17bf------0-----------------------|----------------------------------- +|---x-----------------------------------|----------------------------------- +|-x-------------------------------------|----------------------------------- +|---------------------------------------|----------------------------------- +|---------------------------------------|----------------------------------- + + +--14--------|-------12----------------12h14h15p14p12----12h14|p12p10-10h12p10 +------17~---|-15bf-----15-14-12-14h15----------------15------|-------------- +------------|------------------------------------------------|-------------- +------------|------------------------------------------------|-------------- +------------|------------------------------------------------|-------------- +------------|------------------------------------------------|-------------- + + +-7h10p9p7-6h9p7p6-9h12p10p9-7h10p9p7-14p12|p10-9h10h12p10p9-s12h15p14p12---- +------------------------------------------|------------------------------15- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- + + +-----------------------------------|---------------------------------------- +-14-12s10-------15-14-12-----------|-----------------12p11------------------ +----------12p11----------15-14-12s-|-s11-------------------14-12p11----12p11 +-----------------------------------|-----14-12p11-------------------14------ +-----------------------------------|--------------14------------------------ +-----------------------------------|---------------------------------------- + + 1 1/2 +-----------------|--------21brb----p18-----|-------------------------------| +-----------------|---------------------19--|--------------15bf~------------| +-----------------|-------------------------|-18-16-15~---------------------| +-14-12p11--------|-------------------------|-------------------------------| +----------14-12--|-14bf--------------------|-------------------------------| +-----------------|-------------------------|-------------------------------| + + +|-12----------------12-14h15p14p12-14p12p10-12p10s9-|7-9-7s5---------------- +|----15-14-12h14h15---------------------------------|--------8p5-7h8p7p5---- +|---------------------------------------------------|----------------------- +|---------------------------------------------------|----------------------- +|---------------------------------------------------|----------------------- +|---------------------------------------------------|----------------------- + +* a.h. 1/2 +----------------| +-------7b*-dive-| +-7p6p4----------| +----------------| +----------------| +----------------| + + +Raise .. +See .. +And .. +The .. + +repeat 9x +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|-0----0--0--0--0--3--2--0--3--2--0--|-0----0--0--0--0--3--2--0--3--2--0---| + + +|----------------------------|----------------------------0----------------| +|----------------------------|----------------------------0----------------| +|-------------------------5--|----------------------------9----------------| +|-2-----------------------5--|----------------------------9----------------| +|-2-----------------------3--|----------------------------7----------------| +|-0--0--0--0--0--3--2--0-----|-0--0--0--0--0--0--3--2--0-------------------| + + +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|-----------------------5---|--4---------------9s--------------------------| +|-2---------------------5---|--4-------9-------9s--------------------------| +|-2---------------------3---|--2-------6-------7s--------------------------| +|-0---0--0--0--3--2--0------|----------------------------------------------| + + + diff --git a/guitar/tabs/Malmsteen/dragonfly.tab b/guitar/tabs/Malmsteen/dragonfly.tab new file mode 100644 index 0000000..234d879 --- /dev/null +++ b/guitar/tabs/Malmsteen/dragonfly.tab @@ -0,0 +1,447 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen "Dragonfly" +from Fire and Ice +letostak@netcom.com +Judy Letostak + +all bends in opening riff are 1/4 unless otherwise notated + +|-------------|------------------------------|-----------------------------| +|-------------|------------------------------|-----------------------------| +|-------------|------------------------------|-----------------------------| +|-------------|---------5~------------5b-----|----------5------------------| +|---x\--------|------------7--5---7------5-7-|------------7~------5--------| +|---x\---10\--|-0-3bp0----------0---0--------|--0--3bp0-------6h7---0-3----| + 1/4 + +|-----------------------------|----------------------------|---------------- +|-----------------------------|----------------------------|---------------- +|-----------------------------|----------------------------|---------------- +|--------5-------------5b-----|-----------5----------------|--------5------- +|----------7~--5---7------5-7-|-------------7~--2-1-0------|----------7~---- +|-0-3bp0---------0---0--------|-0--0-3bp0-------------0-3~-|-0-3bp0--------- + + +----------------|-------------------------|---------------------------------| +----------------|-------------------------|---------------------------------| +----------------|-------------------------|---------------------------------| +---------5b-----|-------5-----------------|--------5----------------5b------| +-5---7------5-7-|---------7~-----5--------|----------7~--5-----7--------5-7-| +---0---0--------|0-3bp0------6h7---0--3~--|-0--3-5----------0-----0---------| + + +|------------------------------|--------|----------------------------------| +|------------------------------|--------|-5/15-----------------------------| +|------------------------------|--------|----------------------------------| +|------------------/9-8-7---5~-|--------|----------------------------------| +|------------7~-\---------7----|--------|------------------------2---------| +|-0--5--3bp0-------------------|--0~----|------------------------0----3----| + + + + I'd .. + I .. + +Verse +|----------------------|-------------------|-------------------------------| +|----------------------|-------------------|-------------------------------| +|----------------------|-------------------|-------------------------------| +|--2-------------------|-------------------|---2---------------------------| +|--0----------2--------|-------------------|---0------------2--------------| +|-------3~----0--------|-------------0--3--|---------3------0--------------| + + +away .. +from my .. + +|-------2------------|-----------------------------|------------------------| +|-------3------------|-----------------------------|------------------------| +|-------2------2-----|---2-------------------------|------------------------| +|-------0------2-----|---2--------------2----------|------------------------| +|--------------0-----|---0--------------2----------|-----------------0------| +|--------------------|-----------3~-----0----------|-----------------0--3---| + + Pre-chorus + with .. + is .. + +|----------------|---------------------|-----------------------------------| +|----------------|---------------------|-----------------------------------| +|--2-------------|---2----2------------|-----------------------------------| +|--2--------2----|---0----2------------|------------------2----------------| +|--0--------2----|---0----0------------|-4p2-4~-------2-4---4-2-4~-----2---| +|------3~---0----|---------------------|--------0-2/4----------------------| + + +from .. +evening .. + +|------------------------------|-------------------------------| +|------------------------------|-------------------------------| +|------------------------------|-------------------------------| +|------------------2-----------|------------------2------------| +|-4p2-4~-------2-4---4-2-------|-4p2-4~-------2-4---4-2-4~----2| +|--------0-2/4-----------3\2-0-|--------0-2/4------------------| + + +Someone's .. +Bring .. + + +|------------------------------|------------------------------||------------ +|------------------------------|------------------------------||------------ +|------------------------------|------------------------------||------------ +|------------------2-----------|------------------2-----------||------------ +|-4p2-4~-------2-4---4-2-------|-4p2-4~-------2-4---4-2-------||------------ +|--------0-2/4-----------3\2-0-|--------0-2/4-----------3\2-0-||------------ + +Takin .. +Take .. + +|-------------------------------|------------------------------|------------ +|-------------------------------|------------------------------|------------ +|-------------------------------|------------------------------|------------ +|------------------2------------|------------------2-----------|------------ +|-4p2-4~-------2-4---4-2-4~----2|-4p2-4~-------2-4---4-2-------|------------ +|--------0-2/4------------------|--------0-2/4-----------3\2-0-|------------ + + +If I .. + +Chorus +|------------------------------|-----------------------------|-------------- +|------------------------------|-----------------------------|-------------- +|------------------------------|-----------------------------|-------------- +|---------5~------------5b-----|----------5------------------|-------------- +|------------7--5---7------5-7-|------------7~------5--------|-------------- +|-0-3bp0----------0---0--------|--0--3bp0-------6h7---0-3----|-------------- + + + fly + +|------------------------------|-----------------------------|-------------- +|------------------------------|-----------------------------|-------------- +|------------------------------|-----------------------------|-------------- +|---------5~------------5b-----|-------------/9-8-7-----5~---|-------------- +|------------7--5---7------5-7-|----------7~--------7--------|-------------- +|-0-3bp0----------0---0--------|--0--3bp0--------------------|-------------- + + +In my .. + +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|---------5~------------5b-----|--------5----------------------------------| +|------------7--5---7------5-7-|----------7~-----5-------------------------| +|-0-3bp0----------0---0--------|-0-3bp0------6h7---0-3~--------------------| + + +|------------------------------|| +|------------------------------|| +|------------------------------|| +|---------5~------------5b-----|| +|------------7--5---7------5-7-|| +|-0-3bp0----------0---0--------|| + + +ending 1 1/2 +|-----------------------------|------------------------------------| +|-----------------------------|----------15bf----------------------| +|-----------------------------|----------------14b---14-12-14-12---| +|-------------/9-8-7-----5~---|------------------------------------| +|----------7~--------7--------|--2---------------------------------| +|--0--3bp0--------------------|--0--0------------------------------| + + +ending 2 + +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|--------5--------------------------| +|-----------7~--\2-1-0--------------| +|-0-3bp0----------------0-3-2-1-0---| + + +Guitar solo + + +|-12h14~-------------4h5h7|p5p4---------------------------------------------| +|----------------x--------|-----7p5p3p2h3h5p3p2p0---------------------------| +|-------------------------|-----------------------1h2h4p2p1-----------------| +|-------------------------|---------------------------------4p2p0-----------| +|-------------------------|---------------------------------------4p2p0-----| +|-------------------------|---------------------------------------------x-x-| + + 1 1/2 +|------------------------14-16-17--12---21-|-21b~--------------------------| +|---------------------14-------------------|-------------0-----------------| +|------------11-13-14----------------------|-------------0-----------------| +|---------11-------------------------------|-----------------------16-16---| +|-9-11-12----------------------------------|-------9/16--------------------| +|------------------------------------------|----------------12\------------| + + + 1/2 +|-------------------------17h19-21~-----14h16-16b--rb16-16b-rb16-16-17------ +|----------------18-19-21------------14--------------------------------17--- +|----16-18-19-21------------------------------------------------------------ +|-19------------------------------------------------------------------------ +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +--------16----------14-----------12----------------------|------------------ +-----------14----------12-----------12-------15p14p12----|-14p12-------12--- +-18\16--------16\14-------14\13--------14p12----------14-|-------14p13------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ + + +---------------------------------------------|--------------------7h9h10p9p7 +-----------------12--------------------------|-------------7-9h10----------- +--14p13p11h13h14----14bf------11-----11-11~--|-------6-8-9------------------ +---------------------------------14----------|-6-7-9------------------------ +---------------------------------------------|------------------------------ +---------------------------------------------|------------------------------ + + +----9p7---------------------------------------|--15----~----15h17---17b1/2--| +-10-----10p9p7\6-------9p7p6---------------0--|--16bf-----------------------| +-----------------9p7p6-------7p6-----6/11--0--|-----------------------------| +---------------------------------9p6----------|-----------------------------| +----------------------------------------------|-----------------------------| +----------------------------------------------|-----------------------------| + + +|-15----18p15~--18p15----17----17p13----13-15p13p11-------------|-11h13p11p10 +|----15---------------15----13-------11-13----------15p13p11\10-|----------- +|---------------------------------------------------------------|----------- +|---------------------------------------------------------------|----------- +|---------------------------------------------------------------|----------- +|---------------------------------------------------------------|----------- + + 2 +------------------10h11p10p8---------------8------------------10/11--------| +-13p11p10\8-10h11------------11p10p8h10h11---11-8-11b~--11-13--------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +|-h13h15p13p11-13p11-------------------------------------------------------| +|--------------------15p13-15p13p11-13p11-11\10----------------------------| +|-----------------------------------------------12p11h14-12p11-12~---------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|------------------------9--11/12-12h14-11/12h14h16-t21p16/21~-------------| +|------9h10p9----9h10h12---------------------------------------------------| +|-9h11--------11-----------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + 1 1/2 1/2 +|--21b--------------|-21b--9--------------------------|---------------------| +|-------------------|--------9------------------------|-----------------7/9-| +|-------------------|----------11bf--rb11-11bf--rb11--|-9-11-11bf~-11bf~----| +|-------------------|---------------------------------|---------------------| +|-------------------|---------------------------------|---------------------| +|-------------------|---------------------------------|---------------------| + + +|-9-11-12-14-14/16p14p12\11h12-14p12p11----------11------------------------| +|---------------------------------------14p12p10----14p12p10h12h14p12p10\9-| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + 1/4 +|---------------------------------------------------------------------------| +|-9--------9------8/9-12p11----11p9----------9------------------------------| +|---11bp9----11p9-----------12------12-11h12---12p11p9-8h9h11p9p8-----------| +|-----------------------------------------------------------------11-6------| +|----------------------------------------------------------------------9p7p6| +|---------------------------------------------------------------------------| + + +|---------------------------------------------------|---8bf~-----10bf~-----| +|---------------------------------------------------|--11--------13--------| +|---------------------6/8------8-9p8----8-----------|---7bf~------9bf~-----| +|---------------6h7-9-----9h11-------11---11p9-9bf--|----------------------| +|---7p6---6-7h9-------------------------------------|----------------------| +|-9-----9-------------------------------------------|----------------------| + + +|--12bf~-----14bf~------| +|--15--------17---------| +|--10bf~-----12bf~------| +|-----------------------| +|-----------------------| +|-----------------------| + +w/delay single repeats + +|-/21-17-19-16-17-14-16-12-14-10-12-9-10-----9----|------------------------- +|-----------------------------------------12---10-|-12-9-10-12-14-10-12-14-- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + 1 1/2 delay off +-------------------------|-------------16----16-16-17-19-21b---------------| +-15-12-14-15-17-14-17-17-|-19-15-19-19----17-------------------------------| +-------------------------|-------------------------------------------------| +-------------------------|-------------------------------------------------| +-------------------------|-------------------------------------------------| +-------------------------|-------------------------------------------------| + + 1 1/2 1/2 +|-21rb--17-16-17-12-21b----rb21~--17-16-19b--rb19p17-19bf-|-/21p17----19p16- +|---------------------------------------------------------|--------19------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- + + +----17p14----x-16p12----16-14p10----14-12p9----12-10p7---10-|-9p5---9p7-4--- +-19-------15---------12----------10---------10---------9----|-----7-------5- +------------------------------------------------------------|--------------- +------------------------------------------------------------|--------------- +------------------------------------------------------------|--------------- +------------------------------------------------------------|--------------- + + 1/2 +-7-5p2-4b--rb4-b4-rb4-2---2--------------|----------------------7-9-10h12--- +------------------------5-2-5------------|-------------6/7-9-10------------- +------------------------------5p4p2---4~-|-------6-7-9---------------------- +------------------------------------4----|-6-7-9---------------------------- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- + + +---------9-10----9-10-12-9h10-12-14-10-12h14-16-13-14-18p17-|-14----16p14--- +-9-10-12------12--------------------------------------------|----17--------- +------------------------------------------------------------|--------------- +------------------------------------------------------------|--------------- +------------------------------------------------------------|--------------- +------------------------------------------------------------|--------------- + + +-------14-------------14---------------------------------------------------| +-17p14----17p14----14-------------------------------------------------14---| +----------------16-------17p16p14----16p14--16bf~----------------14--------| +----------------------------------16---------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + 1/2 +|-14-17p14----17/21-17----21\17p14----16b-rb16-16b~------14--------14-------| +|----------14----------19----------14-----------------------17bf-------17bf-| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + + +|-14------------14-------------------------------------------|-------------- +|----14------14----14----------------------------------------|-----0-------- +|-------16bf----------17-16p14----16p14------------------0---|-0---0--13---- +|------------------------------16-------16p14----------------|/16----------- +|---------------------------------------------16p14bf~-------|-------------- +|------------------------------------------------------------|-------------- + + +-------------------17---------|--14h17-16--14h17-16~--14h17-16~--14h17-16~-- +--------14-19bf--------19bf~--|--------------------------------------------- +--14h16-----------------------|--------------------------------------------- +------------------------------|--------------------------------------------- +------------------------------|--------------------------------------------- +------------------------------|--------------------------------------------- + + +-14-16-16|h17p16p14----16p14-------14--------------------------------------| +---------|----------17-------17p14-----------------------------------------| +---------|-----------------------------17p16p14----16~\-----------6-7-9----| +---------|--------------------------------------16----------6-7-9----------| +---------|------------------------------------------------9----------------| +---------|-----------------------------------------------------------------| + + +|-----------7-9-10p9p7------------------------------|----------------------- +|--6-7-9-10------------10-9p7\6---------------------|----------------------- +|-------------------------------9p7p6---7-----------|----------------------- +|-------------------------------------9---6-7-9-6---|-----6----------------- +|-------------------------------------------------9-|-8-9---5-4~----4-5-7--- +|---------------------------------------------------|----------------------- + + +--------------------|------------------------------------------------------| +--------------------|------------------------------------------------------| +--------------------|---------9p7----7~---6---9--------------16\-----------| +--4h6---4-6h8-6-----|--6-7-9------6---------9---9/11---------16\-----------| +------8----------7--|------------------------------------------------------| +--------------------|------------------------------------------------------| + + +|---------------------------------------------------------------|-5h9------- +|---------------------------------------------------------------|-----7----- +|---------------------------------------------------7-6-9p7p6h7-|----------- +|---------------6p4---6h7h9-------6h7h9p7p6---6h7h9-------------|----------- +|-------4h5-5h7-----7-------6h7-9-----------9-------------------|----------- +|-4-5-7---------------------------------------------------------|----------- + + +-9h10p9p7----9p7------7-----------------------9-14p9--------------9h10h12p10| +----------10-----10p9---10-9p7---9p7-------10--------10-7-9h10-12-----------| +-------------------------------9-----10-11----------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| + + +|-p9h10----9h10p9-------9-------------------------|------------------------| +|-------12--------12p10---12p10p9h12p10p9----10bf-|-rb10-------------------| +|-----------------------------------------11------|-------11p9-------------| +|-------------------------------------------------|------------11~-9/7-4/11| +|-------------------------------------------------|------------------------| +|-------------------------------------------------|------------------------| + + 1/2 +|---------------------|--------------------|-------------------------------- +|---------------------|--------------------|-------------------------------- +|---------------------|--------------------|-6-7-9p7p6---------------6-7-9-- +|-11b--9----7bf--rb7--|-------7p6----6-7-9-|-----------9-7p6---6h7-9-------- +|---------------------|-5-7-9-----9--------|-----------------9-------------- +|---------------------|--------------------|-------------------------------- + + +----------7-9-10--------7-9-10/12-|---------9-10-12/14p12h14-10h14-9h14----- +-6-7-9-10--------7h9-10-----------|-9-10-12-----------------------------12-- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +-14------------9h10h12p10p9---------------9-14p9-------| +----10p9h10h12--------------12\10p9----10--------10----| +------------------------------------11--------------11-| +-------------------------------------------------------| +-------------------------------------------------------| +-------------------------------------------------------| + + + diff --git a/guitar/tabs/Malmsteen/dreamin.tab b/guitar/tabs/Malmsteen/dreamin.tab new file mode 100644 index 0000000..4d9d50a --- /dev/null +++ b/guitar/tabs/Malmsteen/dreamin.tab @@ -0,0 +1,393 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen Dreaming (Tell Me) +from Odyssey +letostak@netcom.com + + + +|-------------------10-12----10------------------------------------10-13p10- +|----------------10-------13----10-8-10-8----8------------------10---------- +|-----------9-10--------------------------10---10h12p10-9----10------------- +|------<12>-----------------------------------------------12---------------- +|-<12>---------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +------------|-------------|--------------------------|---------------------- +-10---------|-------------|--------------------------|---------------10h11p10 +----10p9----|-------------|-------7-9-10-s12-12-10-9-|-10-10-10-9----------- +---------12-|-7-----------|-----7--------------------|------------12-------- +------------|---8-7-8-----|-7h8----------------------|---------------------- +------------|---------10--|--------------------------|---------------------- + + +--------|----------------10--|-s12-------------------|---------------------| +--------|-------10-11-13-----|-----13-10----10-10-11-|-13-11-10------------| +-12-10--|-10-12--------------|-----------12----------|---------------------| +--------|--------------------|-----------------------|---------------------| +--------|--------------------|-----------------------|---------------------| +--------|--------------------|-----------------------|---------------------| + + +|-5-6-8p6p5-----5----------------------------|------------5-6-8h10-8-6-5---| +|-----------8-8---8-6-5-8p6-5-8-6p5-5-5------|----5-5-6-8----------------8-| +|---------------------------------------6-7--|-7---------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| + + + + Shades .... +|------------------|---------------------|----------------|----------------| +|-6-5--------------|---------------------|----------------|----------------| +|-----7-9-9--------|---------------------|----------------|----------------| +|------------------|---------------------|----------------|----------------| +|------------------|---------------------|----------------|----------------| +|------------------|---------------------|----------------|----------------| + +rhythm fig 1 + +|--------0-1-0------|-------0---|-------0-1-0-------|-----0----------0-----| +|------3-------3----|-----3-----|-----3-------3-----|-------3-----------3--| +|----2-----------2--|---3-------|---2---------------|---0---------0--------| +|--0----------------|-0---------|-0-----------------|----------------------| +|-------------------|-----------|----------------3--|-1--------3-----------| +|-------------------|-----------|-------------------|----------------------| + +Lonely .. +Misty .. +Lonely .. + + + + In .. +|-------------------|--------6-5-3-----|-----------------------------------| +|-------3-2---------|--------------6-5-|--3-2-3----3-2-3----3-2-3----3-2-3-| +|-----2-----2-------|-----2------------|---------------------------0-------| +|---2---------------|---2--------------|0--------2--------3----------------| +|-0------------0--2-|-4----------------|-----------------------------------| +|-------------------|------------------|-----------------------------------| + + +fig 2 + through .. +|-----------------|--------6-5-3------|-----------5-9---|------------------| +|-------3-2-------|--------------6-5--|-3-6-5-3-------8-|---3-2------------| +|-----2-----2-----|-----2-------------|---------6-------|-------3-2-0------| +|---2-------------|---2---------------|-----------------|-0-----------3-2--| +|-0-----------0-2-|-4-----------------|-----------------|------------------| +|-----------------|-------------------|-----------------|------------------| + + Dreaming .. +|-------3---------|-------3---------|-------3----------|-------------------| +|-----3-----3-----|-----3-----3-----|-----3-----3------|-------3-2---------| +|---3-----3---3---|---3-----3---3---|---3-----3---3----|-----2-----2-------| +|-5-------------5-|-3-------------3-|-2-------------2--|---2---------2-----| +|-----------------|-----------------|------------------|-0-----------------| +|-----------------|-----------------|------------------|-------------------| + + + + Feelin .. +|-------3---------|-------3---------|-------3---------|--------|-----------| +|-----3-----3-----|-----3-----3-----|-----3-----3-----|-3------|-2---------| +|---3-----3---3---|---3-----3---3---|---3-----3---3---|-2------|-2---------| +|-5-------------5-|-3-------------3-|-2---------------|-2------|-2---------| +|-----------------|-----------------|-----------------|-0------|-0---------| +|-----------------|-----------------|-----------------|--------|-----------| + +fig1 +Here .. +shining .. +fig2 +walk .. + + + + love's .. + +|------------------|----------|---5-------6-5---|--3---------3-------------- +|-------3-2--------|----------|-3---5-3-------8-|6---5--6--3---------------- +|-2---2-----2------|----------|---------6-------|7---6-----7-6-------------- +|---2--------------|----------|-----------------|-------8------------------- +|-------------0--2-|----------|-----------------|--------------------------- +|------------------|----------|-----------------|--------------------------- + + +fig 1 +Dreaming .. + + + feelin .. +|------------|------------|-------------3-------5--3--|---------|-----6----| +|------------|------------|-----3-----3------3--------|---------|----------| +|------------|------------|---3-----3------3----------|---------|----------| +|------------|------------|-2-----2-------------------|---------|----------| +|------------|------------|---------------------------|---------|----------| +|------------|------------|---------------------------|---------|----------| + + + + Oh .. + trem picking +|-5------|-----------------6-8-|10-8-6--------------5---|----5--6--8-------| +|----5-6-|-8-6-5----6-8-10-----|-------10-8-6-5-8-6---8-|-8----------------| +|--------|-------7-------------|------------------------|------------------| +|--------|---------------------|------------------------|------------------| +|--------|---------------------|------------------------|------------------| +|--------|---------------------|------------------------|------------------| + + +|-10-10-12-13-12-10-|-12-15-12~----|9h10-6p5-------------------------------- +|-------------------|-----------15-|---------8-6p5-------------------------- +|-------------------|--------------|---------------7-6---------------------- +|-------------------|--------------|-------------------8p7-----------5-7-8-- +|-------------------|--------------|-----------------------8p7-5h7-8-------- +|-------------------|--------------|---------------------------------------- + + +-------|-------------5-6---|--------|--------------------------------------- +-----5-|---6----8----------|--------|-t16-15-t16-13-t16-11-t16-10-t16-8-t16- +-5-7---|-----------------7-|--12bf~-|--------------------------------------- +-------|-7----7----7-------|--------|--------------------------------------- +-------|-------------------|--------|--------------------------------------- +-------|-------------------|--------|--------------------------------------- + + 1/2 +----------|-----------------|-------10s13----------------13-16p13----------| +7-t16-8-10|10b----10p8------|----12-------15----------15----------15-------| +----------|-----------------|-13-------------16-13h16----------------16----| +----------|-----------------|----------------------------------------------| +----------|-----------------|----------------------------------------------| +----------|-----------------|----------------------------------------------| + + 1/2 +|----17b--rb17p15--17~--|-18p17p15-17p15p13----15p13p12----13-12-------12--- +|-----------------------|-------------------17----------15-------15-16------ +|-0---------------------|--------------------------------------------------- +|-----------------------|--------------------------------------------------- +|-----------------------|--------------------------------------------------- +|-----------------------|--------------------------------------------------- + + +---------------|------------------------------------------------------------ +15-14----15----|------------------------------------------------------------ +------15----12-|-14h15p14-12----14-12-------12------------------------------ +---------------|-------------15-------15-14----15-14-12-14-15p14-12-11s12--- +---------------|------------------------------------------------------------ +---------------|------------------------------------------------------------ + + +--------------|---------------------9s10-| +--------------|-------------------7------| +--------------|-----------------7--------| +-14h15p14-12--|-16~----14s0--s9----------| +--------------|--------------------------| +--------------|--------------------------| + + + Until ... + +|-7------------------|--------------------|-------7----------|------7-------| +|--------------------|--------------------|-----7------7-----|----7-----7---| +|---7p6--------------|--------------------|---7------7---7---|--7-----7---7-| +|-------9------------|--------------------|-7--------------7-|6------------6| +|--------------------|--------------------|------------------|--------------| +|--------------------|--------------------|------------------|--------------| +| | | | | +| | | | | +|-------7------------|-------7------------|------------------|--------------| +|-----7------7-------|-----7------7-------|------------------|--------------| +|---7------7---7-----|---7------7---7-----|------------------|--------------| +|-7--------------7---|-8--------------8---|------------------|--------------| +|--------------------|--------------------|------------------|--------------| +|--------------------|--------------------|------------------|--------------| + + + I .. + +|-------7--------7--|-------7--------7--|-------4-7-------|-------2--------| +|-----7--------7----|-----7--------7----|-----3-----6-----|-----2---2-----2| +|---7--------7------|---7--------7------|---4---------7---|---4-------3----| +|-5--------5--------|-4--------4--------|-3-------------6-|-4-----------4--| +|-------------------|-------------------|-----------------|----------------| +|-------------------|-------------------|-----------------|----------------| + + + Some ... + +|-------9-10-9-7-|-------7----------|-------7---------|-------7------------| +|-----7----------|-----7-----7------|-----7-----7-----|-----7-----7--------| +|---7------------|---7-----7---7----|---7-----7---7---|---7-----7---7------| +|-7--------------|-8--------------8-|-7-------------7-|-6--------------6---| +|----------------|------------------|-----------------|--------------------| +|----------------|------------------|-----------------|--------------------| + + + To ... + +|-------7--------7--|-------7--------7--|-------4--------7-|-------2-------| +|-----7--------7----|-----7--------7----|-----3--------6---|-----2-----2---| +|---7--------7------|---7--------7------|---4--------7-----|---4-----4---4-| +|-5--------5--------|-4--------4--------|-3--------6-------|-4-------------| +|-------------------|-------------------|------------------|---------------| +|-------------------|-------------------|------------------|---------------| + + +Solo + +|-2-------------|----------|-------12---------------12---------------------- +|-2-------------|-15bf-----|-15bf-----15-12------12----15p12---------------- +|-3----3--4--3--|----------|----------------14bf-------------15-14p12------- +|-4-------------|----------|------------------------------------------14---- +|---------------|----------|------------------------------------------------ +|---------------|----------|------------------------------------------------ + + +--------------|------------------|------------------------|-------------12-| +--------------|------------------|------------------------|----------12----| +-14p12--------|------------------|---------------------12-|-12b---12-------| +-------14-12--|-14--14p12--16p12s|10--10h12p10-9-10-12----|----------------| +--------------|------------------|------------------------|----------------| +--------------|------------------|------------------------|----------------| + + 1/2 +|-14b--14~--12--15-12-14-15-17-14-|-15-12s19-15-17-19-20-17-19-20-20-22bf~-| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| + + +|s19h20p19p17-19-17----17--19h20p19p17----7h8p7p5------|---8h12-7t12-5t12--- +|-------------------20-----------------19---------7p5--|-5----------------8- +|------------------------------------------------------|-------------------- +|------------------------------------------------------|-------------------- +|------------------------------------------------------|-------------------- +|------------------------------------------------------|-------------------- + + +-----------|---------------------------------------------------------------| +-7h8p7-----|-------10-13-12-10-13-12-10----12-10-------10------------------| +-------9~--|-11-12----------------------12-------12-11----12-11-12-11-9----| +-----------|---------------------------------------------------------------| +-----------|---------------------------------------------------------------| +-----------|---------------------------------------------------------------| + + +|-----------------------10----12----14p12-15p14-|-15p14--------------15----| +|-----------10h12-13p12----12----14-------------|-------15--13-13-12-------| +|-8s9h11s12-------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| + + +|-----------------12-------------------|------------------------------------ +|-12-----------------15-12-------------|--------------------------------17-- +|-----14bf--rb14-----------15-14-12----|-14-12-----------------16-17-19----- +|-----------------------------------14-|--------14~--s16-17-19-------------- +|--------------------------------------|------------------------------------ +|--------------------------------------|------------------------------------ + + +-------17-19----|-14h15p14-------14----------12----------------------------| +-19-20-------20-|----------17-15----17p15s13----15-13s12-15p13p12----------| +----------------|-------------------------------------------------14---14~-| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| + + +|-----14------------14------10-----|------------------------------|--------- +|----------------------------------|----5p4p3-------------------3-|--------- +|-11------11s9--11s-----s7------7s-|-4--------4p2-4p2-------2h4---|-4p2p0--- +|----------------------------------|------------------4p2h4-------|--------- +|----------------------------------|------------------------------|--------- +|----------------------------------|------------------------------|--------- + + 1/2 +-------------------|----------------|----15--------------------------------| +-------------------|-15bf--rb15~----|-13----13p12b-------------------------| +-------------------|----------------|---------------14-12-16-16-16p14p12---| +-4p2p0-------------|----------------|--------------------------------------| +-------3p2p0-------|----------------|--------------------------------------| +-------------3p2p0-|----------------|--------------------------------------| + + +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|-14-12-------12-----------------------------------------------------------| +|-------16p14----16-14p12-16-14-12----14p12-------12----------------12-14--| +|----------------------------------15-------15-14----15-14-12-14h15--------| +|--------------------------------------------------------------------------| + + 1/2 +|-----------------------------19-20-|-22bf-rb22~--|-19b~--19-17-|19-17~-----| +|--------------------19h20-22-------|-------------|-------------|------20p19| +|--------------19-21----------------|-------------|-------------|-----------| +|-14--19-21-22----------------------|-------------|-------------|-----------| +|-----------------------------------|-------------|-------------|-----------| +|-----------------------------------|-------------|-------------|-----------| + + +|-----------------------19h20p19-------7h8p7------------------------------7-| +|h20--22p20p19----19h20----------22p19-------10p8p7-----------------8---10--| +|--------------21-----------------------------------9p8------8h9h11---------| +|-------------------------------------------------------10p9----------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + + +|-8p7p5-----------------------------------|--------------------------------| +|-------8p7p5-----------------------------|--------------------------------| +|-------------7p5p4-----------------------|--------------------------------| +|-------------------7p5p4-----------------|--------------------------------| +|-------------------------7p5p3p2---------|--------------------------------| +|---------------------------------5p3p2p0-|----(0)~------------------------| + + +|------------------|---------8-|7------7----------|------------------------| +|------------------|-----------|--10-8---8-7------|------------------------| +|------------------|-----------|-------------9----|------------------------| +|------------------|-----------|------------------|---------4-5-7-5-4------| +|------------------|-----------|------------------|------------------------| +|------------------|-----------|------------------|------------------------| +| | | | | +| | | | | +|-------2-3-2------|-------2---|-------2-3-2------|------2-----------2-----| +|-----5-------5----|-----5-----|-----5-------5----|---------5-----------5--| +|---4-----------4--|---5-------|---4--------------|----2----------2--------| +|-2----------------|-2---------|-2----------------|------------------------| +|------------------|-----------|---------------5--|--3----------5----------| +|------------------|-----------|------------------|------------------------| + + + + Dreamin' only +||-----------------|----------------|---------------|---------<12>---------| +||-----------------|----------------|---------------|----------------------| +||-----------------|----------------|---------------|----------------------| +||-----------------|----------------|---------------|----------------------| +||-7---------------|----------------|---------------|----------------------| +||-----------------|----------------|---------------|----------------<7>---| + + + Dreamin' +|---------<12>--------|------------------------10-12--------------|--------|| +|----<12>-------------|---------------10-12-13--------12-10-------|--------|| +|-0--------------<7>--|-(7)--9--11-12-----------------------12-11-|--9-----|| +|---------------------|-------------------------------------------|--------|| +|---------------------|-------------------------------------------|--------|| +|---------------------|-------------------------------------------|--------|| + + +Repeat last 2 bbars and fade + diff --git a/guitar/tabs/Malmsteen/eclipse.tab b/guitar/tabs/Malmsteen/eclipse.tab new file mode 100644 index 0000000..74712aa --- /dev/null +++ b/guitar/tabs/Malmsteen/eclipse.tab @@ -0,0 +1,609 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) +Date: Mon, 19 Jun 1995 21:26:26 -0700 (PDT) + +Yngwie Malmsteen - Eclipse +from Eclipse +letostak@netcom.com Judy Letostak +tune down 1/2 step + + + +|----------------------------------------------|--------------------------- +|--17p13-------17-18-17p13--------17p13----12--|-15p12--------15-17-15p12-- +|--------14----------------14-----------14-----|-------12------------------ +|-----------14----------------14---------------|----------12--------------- +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +| | +| | +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +|--2-------------------------------------------|--------------------------- +|--0-------------------------------------------|--2------------------------ +|----------------------------------------------|--0------------------------ + + +|---------------------|---------------------------------------------------| +|--------15p12--------|-13p10--------13-15-13p10--------13p10----12-------| +|-12-----------12-----|-------10-----------------10-----------10----------| +|----12-----------12--|----------10-----------------10--------------------| +|---------------------|---------------------------------------------------| +|---------------------|---------------------------------------------------| +| | | +| | | +|---------------------|---------------------------------------------------| +|---------------------|---------------------------------------------------| +|---------------------|---------------------------------------------------| +|---------------------|---------------------------------------------------| +|---------------------|--3------------------------------------------------| +|---------------------|--1------------------------------------------------| + + +|------------------------------------------|------------------------------- +|-15p12--------15-12-15p12-----15p12----15-|-17p13-------17-18-17p13------- +|-------12-----------------12--------12----|-------14----------------14---- +|----------12------------------------------|----------14----------------14- +|------------------------------------------|------------------------------- +|------------------------------------------|------------------------------- +| | +| | +|------------------------------------------|------------------------------- +|------------------------------------------|------------------------------- +|------------------------------------------|------------------------------- +|------------------------------------------|------------------------------- +|--2---------------------------------------|--3---------------------------- +|------------------------------------------|------------------------------- + + +|-------------|-----------------------------------------------------------| +|-17p13----12-|-15p12-------15-17-15p12--------15p12----------------------| +|-------14----|-------12----------------12-----------12-------------------| +|-------------|----------12----------------12-----------12----------------| +|-------------|-----------------------------------------------------------| +|-------------|-----------------------------------------------------------| +| | | +| | | +|-------------|-----------------------------------------------------------| +|-------------|-----------------------------------------------------------| +|-------------|-----------------------------------------------------------| +|-------------|-----------------------------------------------------------| +|-5-----------|--7--------------------------------------------------------| +|-------------|---------------------0-------------------------------------| + + +|-----------------------------------------------|-17p12--------17p12------- +|-13p10--------13-15--13p10--------13p10----12--|-------12-----------12---- +|-------10------------------10-----------10-----|----------14-----------14- +|----------10------------------10---------------|-------------------------- +|-----------------------------------------------|-------------------------- +|-----------------------------------------------|-------------------------- +| | +| | +|-----------------------------------------------|-------------------------- +|-----------------------------------------------|-------------------------- +|-----------------------------------------------|-------------------------- +|-10-------------------10----------10-----------|--9----------------------- +|--8--------------------8-----------8-----------|--7----------------------- +|-----------------------------------------------|-------------------------- + + +|--16p12--------16p12----------| +|--------12-----------12-------| +|-----------13-----------13----| +|------------------------------| +|------------------------------| +|------------------------------| +| | +| | +|------------------------------| +|------------------------------| +|------------------------------| +|----9-------------------------| +|----7-------------------------| +|------------------------------| + +e-15bf~- +b-15bf~- + +|-------------5--------------4--|-------------5---------------5-----------| +|-------------5--------------5--|-------------6---------------6-----------| +|-------------5--------------4--|-------------7---------------5-----------| +|-------------------------------|-----------------------------------------| +|-0--0--0--0-----0--0--0--0-----|-0--0--0--0------0--0--0--0--------------| +|-------------------------------|-----------------------------------------| + + +|-------------5~--------------4\--|---------------------------------------| +|-------------5~--------------5\--|-------------6-------------------------| +|-------------5~--------------4\--|-------------7--------------9----------| +|---------------------------------|-------------8--------------9----------| +|-0--0--0--0------0--0--0--0------|---------------------------------------| +|---------------------------------|-6--6--6--6-----4--4--4--4-------------| + + +|-------------5--------------4--|-------------5--------------5------------| +|-------------5--------------5--|-------------6--------------6------------| +|-------------5--------------4--|-------------7--------------5------------| +|-------------------------------|-----------------------------------------| +|-0--0--0--0-----0--0--0--0-----|-0--0--0--0-----0--0--0--0---------------| +|-------------------------------|-----------------------------------------| + + +|-------------5~--------------4\--|---------------------------------------| +|-------------5~--------------5\--|-------------6\------------------------| +|-------------5~--------------4\--|-------------7\--------------4/9-------| +|---------------------------------|-----------------------------6/9-------| +|-0--0--0--0------0--0--0--0------|---------------------------------------| +|---------------------------------|-6--6--6--6------4--4--4--4------------| + +guitar 1 +|-------------------|--------------------|--------------------------------| +|-------------9-----|---------------9----|--12~-----------9---------------| +|-9~----11----------|-9~-----11----------|----------------------11--------| +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| +| | | | +|guitars 2(3) | | | +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| +|--------8----9-----|---------------8h9--|-(11)~-----------9-----8--------| +|-6(11)~------------|-7(11)~-------------|--9~----------------9-----------| +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| + + +|-------------|---------------------|------------------|(12)--(12bf)------- +|-------------|-----------------9---|---------------9--|--9---------9------ +|-9~-----9\---|-6/9~-----11---------|-9~-----11--------|------------------- +|-------------|---------------------|------------------|------------------- +|-------------|---------------------|------------------|------------------- +|-------------|---------------------|------------------|------------------- +| | | |guitar 4 () on top +| | | | staff +|-------------|---------------------|------------------|------------------- +|-------------|---------------------|------------------|--9~--------------- +|-------------|------------8-----9--|-7(11)~------8h9--|-----------11bf---- +|-6(11)~------|-6-(9/11)------6-----|---------11-7-----|-(9)~--------(9)--- +|-------------|---------------------|------------------|------------------- +|-------------|---------------------|------------------|------------------- + + +|-11~-------\----| +|(10)~------\----| +|----------------| +|----------------| +|----------------| +|----------------| +| | +| | +|----------------| +|----------------| +|(11)~---11\-----| +|--9-------------| +|----------------| +|----------------| + + +|-------------------|--------------------|--------------------------------| +|-------------9-----|---------------9----|--12~-----------9---------------| +|-9~----11----------|-9~-----11----------|----------------------11--------| +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| +| | | | +|guitars 2(3) | | | +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| +|--------8----9-----|-9-------------8h9--|-(11)~-----------9h11p9-8-------| +|-6(11)~---6--------|(7)---------7-------|--9~------------(9)-------------| +|-------------------|--------------------|--------------------------------| +|-------------------|--------------------|--------------------------------| + + +|-------------|---------------------|------------------|-------------------| +|-------------|-----------------9---|---------------9--|-------------------| +|-9~-----9\---|-6/9~-----11---------|-9~-----11--------|-9~---9bf----9-----| +|-------------|---------------------|------------------|-------------------| +|-------------|---------------------|------------------|-------------------| +|-------------|---------------------|------------------|-------------------| +| | | | | +| | | | | +|-------------|---------------------|------------------|-------------------| +|-------------|---------------------|------------------|--------10------9--| +|-------------|------------8-----9--|-7(11)~------9-11-|-11bf--------------| +|-6(11)~------|-6-(9/11)------6-----|------------------|--(9)-------9------| +|-------------|---------------------|------------------|-------------------| +|-------------|---------------------|------------------|-------------------| + + +|----------------| +|----------------| +|--8~------8\----| +|----------------| +|----------------| +|----------------| +| | +| | +|----------------| +|----------------| +|-11----11\-0----| +|-(9)------------| +|----------------| +|----------------| + + +|--8--------|-10----------|--12---------|--------12\--------|--8----------| +|-11bf------|-13bf--------|--15bf-------|-------------------|-11bf--------| +|-----------|-------------|-------------|--------------0----|-------------| +|-----------|-------------|-------------|-------------------|-------------| +|-----------|-------------|-------------|-------------------|-------------| +|-----------|-------------|-------------|-------------------|-------------| +| | | | | | +| | | | | | +|-----------|-------------|-------------|-------------------|-------------| +|-----------|--7----------|---8---------|----------8\-------|---10--------| +|--9--------|--9bf--------|--10bf-------|---------10\-------|---12bf------| +|--5--------|--7----------|---8---------|-------------------|---10--------| +|-----------|-------------|-------------|-------------------|-------------| +|-----------|-------------|-------------|-------------------|-------------| + + +|-10----------|---12-------|------12\-------------------------------------| +|-13bf--------|---15bf-----|----------------------------------------------| +|-------------|------------|----------------------------------------------| +|-------------|------------|----------------------------------------------| +|-------------|------------|----------------------------------------------| +|-------------|------------|----------------------------------------------| +| | | | +| | | | +|-------------|----12------|----------------------------------------------| +|-12----------|----15bf----|----------------------------------------------| +|-14bf--------|------------|----------------------------------------------| +|-12----------|----14------|-----------------------0----------------------| +|-------------|------------|----------------------------------------------| +|-------------|------------|----------------------------------------------| + + +||-----------12-16-17-12-13----12----------------------|-------12-16-17-12- +||--------13----------------15----13-15-12-13----12----|----13------------- +||o----14-------------------------------------14----13-|-14---------------- +||o----------------------------------------------------|------------------- +||-----------------------------------------------------|------------------- +||-----------------------------------------------------|------------------- + + +--13----12----------------------|-------12-16-13-16-12-16----16----16------ +-----15----13-15-12-13----12----|----12-------------------15----13----12--- +-----------------------14----14-|-13--------------------------------------- +--------------------------------|------------------------------------------ +--------------------------------|------------------------------------------ +--------------------------------|------------------------------------------ + + +------------|-------12-16-17-12-13----12-----------------|-13p10----10----- +--13-15-12--|----13----------------15----15-13-12--------|-------10-------- +------------|-14----------------------------------14~-13-|----------------- +------------|--------------------------------------------|----------------- +------------|--------------------------------------------|----------------- +------------|--------------------------------------------|----------------- + + +--13p10----13-10p6---6-10p6---6-|-4h7p4---4-7p4---7-8p5---5-12p8----12----| +--------10---------6--------6---|-------5-------5-------5--------10-------| +--------------------------------|-----------------------------------------| +--------------------------------|-----------------------------------------| +--------------------------------|-----------------------------------------| +--------------------------------|-----------------------------------------| + + +|-13p10----10-13p10----13-10p6---6-10p6---6-|--4h7p4---4-7p4---4-5tr7--5/-|| +|-------10----------10---------6--------6---|--------5-------7------------|| +|-------------------------------------------|----------------------------o|| +|-------------------------------------------|----------------------------o|| +|-------------------------------------------|-----------------------------|| +|-------------------------------------------|-----------------------------|| + +top note is guitar 1 bottom is guitar 2 + ~~~~~~~ +|-------------------------------------------|------------22bf-----rb22----| +|--17---------17h18p17----------------------|--17~-------15bf-----rb15----| +|--13---------13h14p13----19----------------|--13~------------------------| +|-------------------------15----------------|-----------------------------| +|-------------------------------------------|-----------------------------| +|-------------------------------------------|-----------------------------| +| | | +|top note is guitar 3 bottom is guitar 4 | 1/2 | +|-------------------------------------------|-----------------------------| +|-------------------------------------------|------------12b------rb12----| +|---9---------9h10p9------------------------|----9-----------------rb9----| +|-------------------------12----------------|-------------9b--------------| +|---7---------7h8-p7------------------------|----7------------------------| +|-------------------------10----------------|-----------------------------| + + +|------------------------|--16----17----16h17p16--------------------------| +|----------17-----18-----|--12----13----12h13p12----18----17~-------------| +|----------13-----14-----|--------------------------14----13~-------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +| | | +| | | +|------------------------|------------------------------------------------| +|------------------------|---9-----10----9h10p9---------------------------| +|----------9-------10----|---------------------------10----9--------------| +|------------------------|---6-----7-----6h7-p6---------------------------| +|----------7-------8-----|----------------------------8----7--------------| +|------------------------|------------------------------------------------| + + 1/2 +|----------------|-----------|------------------------|-16h17p16----------| +|-12b------------|--12~------|-----/17----18----------|-12h13p12--18--17--| +|----------------|-----------|------------------------|-----------14--13--| +|-----14---------|--12~------|------------------------|-------------------| +|----------------|-----------|-------6----7-----------|-------------------| +|----------------|-----------|------------------------|-------------------| +| | | | | +| | | | | +|----------------|-----------|------------------------|-------------------| +|----------------|-----------|------------------------|--9h10p9-----------| +|--7bf-----------|---7~------|-------9---10-----------|---------10--9-----| +|--9b1/2---------|---9~------|9dive--0----------------|--6----------------| +|----------------|-----------|-----------7h8----------|----------8---7----| +|----------------|-----------|------------------------|-------------------| + + +|-------------------------------|-----------------------------------------| +|--17h18p17------17h18p17-------|-17---15bf-13--(12)~---------------------| +|-----------19---13-------19----|-13--------------------------------------| +|-------------------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| +| | | +| | 1/2 | +|-------------------------------|-----------------------------------------| +|-------------------------------|------12b---rb12-------------------------| +|------------------9h10p9-------|--9--------------------------------------| +|--------------------------12---|-------9b---rb9--------------------------| +|------------------7h8-p7-------|--7--------------------------------------| +|--0-----------------------10---|-----------------------------------------| + + +|---------------|-16--17---16h17p16----------|-------------|---------------| +|----17--18-----|-12--13---12h13p12--18--17--|--12b1/2-----|--12~----------| +|----13--14-----|--------------------14--13--|-------------|---------------| +|---------------|----------------------------|--------14---|--12~----------| +|---------------|----------------------------|-------------|---------------| +|---------------|----------------------------|-------------|---------------| +| | | | | +| | | | | +|---------------|----------------------------|-------------|---------------| +|---------------|--9---10---9h10p9-----------|-------------|---------------| +|-----9--10-----|--------------------10--9---|---7bf-------|---7~----------| +|---------------|--6---7----6h7p6------------|---9b1/2-----|---9~----------| +|-----7---8-----|---------------------8--7---|-------------|---------------| +|---------------|----------------------------|-------------|---------------| + + +|-------12-16-17-12-13----12----------------------|-------12-16-17-12-13--- +|----13----------------15----13-15-12-13----12----|----13------------------ +|-14-------------------------------------14----13-|-14--------------------- +|-------------------------------------------------|------------------------ +|-------------------------------------------------|------------------------ +|-------------------------------------------------|------------------------ + + +-----12----------------------|-------12-16-13-16-12-16----16----16--------- +--15----13-15-12-13----12----|----12-------------------15----13----12-13--- +--------------------14----14-|-13------------------------------------------ +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- + + +--------|-------12-16-17-12-13----12-----------------|-13p10----10-13p10--- +--15-12-|----13----------------15----15-13-12--------|-------10----------10 +--------|-14----------------------------------14~-13-|--------------------- +--------|--------------------------------------------|--------------------- +--------|--------------------------------------------|--------------------- +--------|--------------------------------------------|--------------------- + + +--13-10p6---6-|-4h7p4---4-7p4----7-8p5---5-12p8----12-|-13p10----10-13p10-- +----------6---|-------5-------5--------5--------10----|-------10----------- +--------------|---------------------------------------|-------------------- +--------------|---------------------------------------|-------------------- +--------------|---------------------------------------|-------------------- +--------------|---------------------------------------|-------------------- + + +----13-10p6---6-10p6---6-|-4h7p4---4-7p4---4-|----------------------------| +-10---------6--------6---|-------5-------4---|----------------------------| +-------------------------|-------------------|---2------------------------| +-------------------------|-------------------|---2----2----4--------------|gtr1 +-------------------------|-------------------|---0------------------------| +-------------------------|-------------------|--------3----2--------------|gtr2 + +guitar 1 top string +guitar 2 bottom string 1/2 1/2 +|----------------------|------------------------|--------------------------| +|----------------------|------------------------|--------------------------| +|----------------------|----------6b-rb6--4-----|--------------------------| +|--2--4--2--4----2--4--|-2--4--2-------------4--|-2--4--2---4b-rb4---2--4--| +|----------------------|----------4b-rb4--2-----|--------------------------| +|--0--2--0--2----0--2--|-0--2--0-------------2--|-0--2--0---2b-rb2---0--2--| + + +|--------------|----------------------|-----------------------------------| +|--------------|----------------------|-----------------------------------| +|--------------|----------------------|----------4b---6--4----------------| +|-----------4--|-2--4--2--5--4--2--4--|-2--4--2--------------4------------| +|-1--2--4------|----------------------|----------4b---4--2----------------| +|-----------2--|-0--2--0--3--2--0--2--|-0--2--0--------------2------------| + + +guitar solo + +|----------15/17--|-15~----/15-----|-15-----15----15----15----15----------- +|-----------------|--------/17-----|-17p15--17p15-17p15-17p15-17p15-17p15-- +|-----------------|----------------|--------------------------------------- +|-----------------|----------------|--------------------------------------- +|-1--2--4---------|----------------|--------------------------------------- +|-----------------|----------------|--------------------------------------- + + +------------|-----------------|-------------------------------------------- +---15/17----|--(17)~~~~-------|--17--------------17--------17--17---------- +------------|-----------------|--15p14-15p14h15--15p14h15------15-14h15---- +------------|-----------------|-------------------------------------------- +------------|-----------------|-------------------------------------------- +------------|-----------------|-------------------------------------------- + + +----------|-----------------|------------------------|--------------------- +--17------|-----------------|------------------------|-----------------14-- +------15--|--(14)~----------|---12h14p12---w/bar-----|-----------14h15----- +----------|-----------------|------------------------|-14~----------------- +----------|-----------------|------------------------|--------------------- +----------|-----------------|------------------------|--------------------- + + w/wah wah +-----------------|-15~-----------------------------------|------9h10p9p7--- +-------14-15h17--|------17p15-14-----------14h15---------|-9h10------------ +-14h15-----------|----------------15-14h15-------15-14~--|----------------- +-----------------|---------------------------------------|----------------- +-----------------|---------------------------------------|----------------- +-----------------|---------------------------------------|----------------- + + +--9p7----7---------7----------|------9h10p9-7-9p7----7-------------9-10-9-| +------10---10p9h10---10p9h10--|-9h10--------------10---10p9-7-9h10--------| +------------------------------|-------------------------------------------| +------------------------------|-------------------------------------------| +------------------------------|-------------------------------------------| +------------------------------|-------------------------------------------| + + +|-9p7------------------9-10-9-9p7------|----------------------------------- +|-----10p9-10p9-7-9-10------------10p9-|-10p9p7-10p9p7-6-9p7-6-7p6-----6--- +|--------------------------------------|---------------------------9p7----- +|--------------------------------------|----------------------------------- +|--------------------------------------|----------------------------------- +|--------------------------------------|----------------------------------- + + +--------|-----------------------------------------|------------------------ +--------|---------------------------6-6h7h9-6h7h9-|-10-7-9-10-12-9-10-12--- +--9p7p6-|-9-7p6-6h7p6---------6h7-9---------------|------------------------ +--------|-------------9-7-6h7---------------------|------------------------ +--------|-----------------------------------------|------------------------ +--------|-----------------------------------------|------------------------ + + +--------------------------|-13---------------------------------------------| +--14p10-12-14-15-12-14-15-|----15-13-14-16-13-14-16-17-14-16-17/19-16-17-19| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + +|--19bf--~-------14~----|---------15--14h15-12-15----16----15-|----14------ +|------------14---------|-------------------------15----14----|-12--------- +|-----------------------|---x--x------------------------------|------------ +|-----------------------|-------------------------------------|------------ +|-----------------------|-------------------------------------|------------ +|-----------------------|-------------------------------------|------------ + + +--14h15p14-12-14p12-------12-------------|--------------------------------| +--------------------15p14----14p12-11-14-|-12-11-12p11--------------------| +-----------------------------------------|-------------14-12-14bf~--------| +-----------------------------------------|--------------------------------| +-----------------------------------------|--------------------------------| +-----------------------------------------|--------------------------------| + + 1/2 +|------------/21--21b~~~~~~---|--21\--------------------------------------| +|-----------------------------|-------------------------------------------| +|--14~---0--------------------|-------11p9-11-12p11-9-12-9-11-12-11-9-----| +|-----------------------------|-------------------------------------------| +|-----------------------------|-------------------------------------------| +|-----------------------------|-------------------------------------------| + + +|----------------------------------------------|--------------------------| +|----------------------------------------------|--------------------------| +|-12p9-11-12-11-9-12-9--11-12-11-9--12-9-11-12-|-11-9-11-9----------------| +|----------------------------------------------|------------12----12bf----| +|----------------------------------------------|--------------------------| +|----------------------------------------------|--------------------------| + + +|--------------------|---------------------------|------------------------| +|--------------------|---------------------------|------------------------| +|---x\---------------|---------------------------|------------------------| +|---x\ps-------------|---------------------------|------------------------| +|------------/16\----|---------------------------|------------------------| +|--------------------|---------------------------|------------------------| + + w/echo and bass octaver + +|-----------------------|--/19-17-19-15-19----19----15----15----15----15--| +|-----------------------|------------------19----17----19----17----15-----| +|-----------------------|-------------------------------------------------| +|-----------------------|-------------------------------------------------| +|-----------------------|-------------------------------------------------| +|-----------------------|-------------------------------------------------| + + +|-----12----12----12----12----8----8----8---8-|---5---5---5---5-----------| +|--13----15----13----12----10---12---10---8---|-7---8---7---5---4---0-5p0-| +|---------------------------------------------|---------------------------| +|---------------------------------------------|---------------------------| +|---------------------------------------------|---------------------------| +|---------------------------------------------|---------------------------| + + +|---------------------------------------------------------|------19p15----- +|-7p0-8p0-10p0-12p0-13p12-10-8-12-10-8-7-10-8-7-5-8-7-5-4-|-5/17-------17\12 +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- + + +--12----------------------------------------------------------------------- +------12------------------------------------------------------------------- +---------12-11-12-11\9-11-12p11p9\8h9~---------fade out-------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + + + +Repeat chorus 4x then fade + +========================================================================== +Legend: +....... + The Music Shop BBS +\slide down /slide up (619)423-4970 +h = hammeron +p = pulloff +* = artifical harmonic +t = tap with right hand +b = bend (steps are indicated over note) +bf = bend full (one step) +rb = release bend +~ = vibrato +x = ghost note +ps = pick scrape +tr = trill +=========================================================================== diff --git a/guitar/tabs/Malmsteen/far_beyond_the_sun.tab b/guitar/tabs/Malmsteen/far_beyond_the_sun.tab new file mode 100644 index 0000000..36ec625 --- /dev/null +++ b/guitar/tabs/Malmsteen/far_beyond_the_sun.tab @@ -0,0 +1,684 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Far Beyond the Sun" +from Rising Force +letostak@netcom.com +b=bend +r=release +tr=trill +h=hammer on +p=pull off +s=slide +~=vibrato +||=repeat +|=end of bar +%=repeat last bar + +|----------|----------------|----------------|-----------------------------| +|----------|----------------|----------------|-----------------------------| +|----------|----------------|----------------|----------------------6------| +|----4-4-4-|--3~------6-6-6-|-4~-------7-7-7-|-6~---9-9-9-8~----8-9--------| +|----------|----------------|----------------|-----------------------------| +|----------|----------------|----------------|-----------------------------| +| | | | | +| | | | | +|----------|----------------|----------------|-----------------------------| +|----------|----------------|----------------|-----------------------------| +|----------|----------------|----------------|-----------------------------| +|----------|----------3-3-3-|-4~-------4-4-4-|-3~---6-6-6-4~----4-6-7------| +|----5-5-5-|--4~------------|----------------|-----------------------------| +|----------|----------------|----------------|-----------------------------| + + +|-------------|--------------------|---------------------|-----------------| +|-------------|--------------------|---------------------|-----------------| +|-7~----------|----------6~--------|-----------4~--------|-----------------| +|-------7-7-7-|-6--6-7-9-----6-6-6-|-4~--4-6-7-----4-4-4-|-6-3-------------| +|-------------|--------------------|---------------------|-----5-2---------| +|-------------|--------------------|---------------------|---------4-1-----| +| | | | | +| | | | | +|-------------|--------------------|---------------------|-----------------| +|-------------|--------------------|---------------------|-----------------| +|-4~----------|----------2~--------|---------------------|-----------------| +|-------------|-2--2-4-6-----------|---------4-6~--4-4-4-|-6-3-------------| +|-------------|--------------------|-5~--5-7-------------|-----5-2---------| +|-------------|--------------------|---------------------|---------4-1-----| + + +------------------------|---------------------|----------------------------| +------------------------|---------------------|----------------------------| +------------------------|---------------------|----------------6-----------| +------------------------|-4-------------------|----------------6-----------| +------2-4-5-4-2---------|-4-------------------|----------------4-----------| +2-4-5-----------5-4-2-1-|-2-------------------|----------------------------| + + +13h14p13p10-------------------------|-------------------|------------------| +------------14-12-10----------------|-------------------|------------------| +---------------------13-11-10-------|-------------------|-------%----------| +------------------------------12-11-|-9-----------------|------------------| +------------------------------------|---12-11-9-8~------|------------------| +------------------------------------|-------------------|------------------| + + +-----------10-13p10-------------13-16p13-------|--------16--19s21~---------| +--------12----------12-------15----------15----|-----18--------------------| +--10s13----------------13s16----------------16-|-s19-----------------------| +-----------------------------------------------|---------------------------| +-----------------------------------------------|---------------------------| +-----------------------------------------------|---------------------------| + +13h14p13p10-------------------------|--------------------------------------| +------------14-12-10----------------|--------------------------------------| +---------------------13-11-10-------|--------------------------------------| +------------------------------12-11-|-9------------------------------------| +------------------------------------|---12-11-9-8~-------------------------| +------------------------------------|--------------------------------------| + + +------------------|-----------|---------------------|----------------------| +------------------|-----------|---7-6-7~---10-9-10~-|10-14-13-14~-s--------| +------------------|---6-5-6~--|-6-------------------|----------------------| +4-3-4~---4-7-6-7~-|-7---------|---------------------|----------------------| +------------------|-----------|---------------------|----------------------| +------------------|-----------|---------------------|----------------------| + + +----------s17-16-17~--|-s21-20-21~--|-21-19-17-16-19-17-16-14-17-16-14-13--- +19-18-19~-------------|-------------|--------------------------------------- +----------------------|-------------|--------------------------------------- +----------------------|-------------|--------------------------------------- +----------------------|-------------|--------------------------------------- +----------------------|-------------|--------------------------------------- + + +16-14p13-------|----------------------------------|------------------------- +---------15p14-|-12-------------------------------|------------------------- +---------------|----13-11-10----------------------|------------------------- +---------------|-------------12-11-9--------------|------------------------- +---------------|---------------------12-11-9-8~---|------------------------- +---------------|----------------------------------|------------------------- + + +||-------------------|-------------------------|---------------------------| +||-------------------|-------------------------|---------------------------| +||-7-7-7-7-7-7-6-----|-------------------------|-----------6---------6-7---| +||---------------9-7-|-6-6-6-6-6-6-6-6-6-6-7-9-|-7-7-7-7-9---9-9-9-9-------| +||-------------------|-------------------------|---------------------------| +||-------------------|-------------------------|---------------------------| + + +---------9h10p9h10-----------9h10p9h10--|----------------------------------| +----------------------------------------|----------------------------------| +6h7p6h7-------------6h7p6h7-------------|-7-7-7-7-7-7-7-7-7-6--------------| +----------------------------------------|---------------------9-7----------| +----------------------------------------|----------------------------------| +----------------------------------------|----------------------------------| + + +---------------------9h|10p9p7---------------------------------------------| +-----------------------|-------10p9p7-------10p9---------------------------| +-----------------------|--------------9p7s6------11p9---------11p9---------| +-6-6-6-6-6-6-6-6-6-6---|------------------------------12p11-9------12------| +-----------------------|---------------------------------------------------| +-----------------------|---------------------------------------------------| + + +---------------------------|| repeat all in double bars again +---------------------------|| +-----------------------9bf-|| +11p9----12p11-9------------|| +-----12---------12p11------|| +---------------------------|| + + +-------9-14p9----------9-14p9s17p14----------14-17p14----|14-17p14----14s21- +---10---------10----10--------------14----14----------14-|---------14------- +11---------------11--------------------14----------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ + + +p17-21p17---------||------------------------|-------------------|----------- +----------19------||------------------------|-------------------|------14--- +-------------18~--||---------13--13h14------|-13-14-16h18p16-13-|-16bf------ +------------------||-14h16~-------------16~-|-------------------|----------- +------------------||------------------------|-------------------|----------- +------------------||------------------------|-------------------|----------- + + +-----------------------|---------------|-----------------------------------| +h15p14-----------------|---------------|-----------------------------------| +-------16--14h16p14p13-|-14~-----------|-13h14-----13----------------------| +-----------------------|---------------|-----------------14----------------| +-----------------------|---------------|-----------------------------------| +-----------------------|---------------|-----------------------------------| + + +---------14-17p14----14h21p14----14-17p14----14----|| +------14----------14----------14----------14----14-||play part between double +---14----------------------------------------------||bars again +16-------------------------------------------------|| +---------------------------------------------------|| +---------------------------------------------------|| + + b 1 1/2 b r b r b~ +--------------------------|------------------------------------------------| +-----------------------14-|-19-17-15--14h15p14----14-----------------------| +13h14---13----------14----|--------------------16----16s18b----------------| +--------------14-16-------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + +---------------|-------------------------|----------------|----------------| +---------------|-------------------------|----------------|----------------| +13-13-13-14-16-|-14h16--14h16p14s13-14~--|-16-16-16-18-19-|-18-19bf--------| +---------------|-------------------------|----------------|----------------| +---------------|-------------------------|----------------|----------------| +---------------|-------------------------|----------------|----------------| + + w/bar +----------|------------------|--------------|------------------------------| +----------|------------------|--------------|------------------------------| +19~-s16~--|-18h19-18-18s14~--|-14---13--11--|-10---h--11---11bf------------| +----------|------------------|--------------|---------------------4-4-4----| +----------|------------------|--------------|------------------------------| +----------|------------------|--------------|------------------------------| + + +|-----------------------------|----------------------------| +|-----------------------------|----------------------------| +|---------6-7-6h7p6-----------|---------6-7-6--------------| +|---6-7-9-----------9-7-6-----|---6-7-9-------9-7-6--------| +|-9-----------------------9-8-|-9-------------------9-8----| +|-----------------------------|----------------------------| +| | | +| | | +|-----------------------------|----------------------------| +|-----------------------------|----------------------------| +|-----------------------------|-------------%--------------| +|-----------------------------|----------------------------| +|-------2-4-5-----4-2---------|----------------------------| +|-2-4-5---------------5-4-2-1-|----------------------------| + + +----------------------------|----------------------7-9h-|-10--s--7~--------| +----------------------------|-------------6h7-9s10------|------------------| +--------6-7-6h7p6-----------|---------6-7---------------|------------------| +--6-7-9-----------9-7-6-----|---6-7-9-------------------|------------------| +9-----------------------9-8-|-9-------------------------|------------------| +----------------------------|---------------------------|------------------| + + +9--10--9------|------------------|----------13s16p13--------|17-16-14-13---- +----------10~-|9h10~---9h10p9----|-------12----------15-----|--------------- +--------------|---------------11-|-10h13----------------16~-|--------------- +--------------|------------------|--------------------------|--------------- +--------------|------------------|--------------------------|--------------- +--------------|------------------|--------------------------|--------------- + + +---14-13-------17p16-14-13----14p13-16s21-|-21~--20-21-20-21-16-17-16-17-13- +15-------15-14-------------15-------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- + + +14-13-14----------------------------------------------------|--------------- +---------13-14-13-14----------------------------------------|-----------9s10 +---------------------13-14-13-14-10-11-10-11----------------|-----6---6----- +---------------------------------------------10-11-10-11----|-6h7---7------- +---------------------------------------------------------12-|--------------- +------------------------------------------------------------|--------------- + + palm mute +----||-------------------|---------------------|---------------------------- +9~--||------------9-10~--|------------9-10-9~--|------------9-11~--10-12-14- +----||-------6-11--------|-------6-11----------|-------6-11----------------- +----||---6-7-------------|---6-7---------------|---6-7---------------------- +----||-9-----------------|-9-------------------|-9-------------------------- +----||-------------------|---------------------|---------------------------- + + +10-13h-|-14p13-10-------------------------------------|--------------------| +-------|----------14-12-10----------------------------|------------9-10~---| +-------|-------------------13-11-10-------------------|-------6-11---------| +-------|----------------------------12-11-9-----------|---6-7--------------| +-------|------------------------------------12-11-9s7-|-9------------------| +-------|----------------------------------------------|--------------------| + + w/bar scoop +---------------------------|-19bf~----||-----------------------------------| +-----------9-10--9---------|----------||10--9h10p9--7h9p7------7-9---------| +------6-11-----------------|----------||-------------------10~-------------| +--6-7----------------------|----------||-----------------------------------| +9--------------------------|----------||-----------------------------------| +---------------------------|----------||-----------------------------------| + + +-----------------------|---------------------------------------------------- +10-9h10p9--------------|-------------------------------------15-12-14-15-14- +----------11-10~-11-13-|-14-11-13-14-13-11-14-11-13-14-13-11---------------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- + + +---16-13-|-14-16-14-13-17-14-16-17-16-14-19-16-17-19-17-16-19bf-|--19bf~---- +12-------|------------------------------------------------------|----------- +---------|------------------------------------------------------|----------- +---------|------------------------------------------------------|----------- +---------|------------------------------------------------------|----------- +---------|------------------------------------------------------|----------- + + 1 1/2 2 +19bf-19bf-|-19b-----19bf--19bf--21b--|-21~---17-19-21p19-17s16h17-|-19p17p16 +----------|--------------------------|----------------------------|--------- +----------|--------------------------|----------------------------|--------- +----------|--------------------------|----------------------------|--------- +----------|--------------------------|----------------------------|--------- +----------|--------------------------|----------------------------|--------- + + +---16-17p16----------------------------------------|-17-16-14-13-------16p14 +19----------19p18h19p18----------------------------|-------------15-14------ +------------------------18p16p14-18p16p14-16p14s13-|------------------------ +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ + + +s13-------17p16-14-|-13-------16p14-13-------17-16-14-13-16-14-13----|-14--- +----15-14----------|----15-14----------15-14----------------------15-|------ +-------------------|-------------------------------------------------|------ +-------------------|-------------------------------------------------|------ +-------------------|-------------------------------------------------|------ +-------------------|-------------------------------------------------|------ + + +13----------13-----------------------------------------|-------------------- +---15-14h15----15p14-15-14-12-10-14-12-10-9-12-10-9----|-10-9----9-10p9----- +----------------------------------------------------11-|------11--------11-- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- + + +-------|-19-16-17----16-------------------------------|--------------------- +9------|----------19----18-19-15-18-14-15----14-------|--------------------- +--11~--|----------------------------------16----14-16-|-13-14----13--------- +-------|----------------------------------------------|-------16----14-16-12 +-------|----------------------------------------------|--------------------- +-------|----------------------------------------------|--------------------- + + +--------------|---------------------------------------------------|--------- +----------12s-|-14p12p10------------------------------------------|--------- +--------------|----------13-11p9---------13p11p10------------11-9-|--------- +14-11~--------|------------------12-11-9----------12-11-9---------|-12-11-9- +--------------|-------------------------------------------12------|--------- +--------------|---------------------------------------------------|--------- + + +----------------------------------|---------7--------|-10p9p7----9p7-------- +----------------------------------|-10bf~-----10p9p7-|--------10------------ +----------------------------------|------------------|---------------------- +---11-9-------9-------------------|------------------|---------------------- +12------12-11---12-11p9-12-11-9s8-|------------------|---------------------- +----------------------------------|------------------|---------------------- + + +--------------------------|-------------------|--------|-------------------| +10p9sx--12p10p9----9------|-------------------|--------|-------------------| +----------------11---11bf-|-11bf--11bf--11bf--|-11p10--|-keyboard-solo-----| +--------------------------|-------------------|--------|-------------------| +--------------------------|-------------------|--------|-------------------| +--------------------------|-------------------|--------|-------------------| + + +16~--16-16h17p16---------16------16------16--------16-|-t21p16h17p16h17----- +-----------------19-19bf----19bf----19bf----19bf~-----|--------------------- +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- + + +t21p16h17p16h17--t21p16h17p16h17--t21p16h17p16h17--t21p16h17p16-----16------ +-----------------------------------------------------------------19----19bf- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------18~ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + +--------|----------14-16-17-16-14-16-14----------14|---------------14-16-17- +--------|-14-16-17----------------------17-16-17---|17-16-14-16-17---------- +keys----|------------------------------------------|------------------------ +--------|------------------------------------------|------------------------ +--------|------------------------------------------|------------------------ +--------|------------------------------------------|------------------------ + + +16-14|16-14----------14-------16h17p16p14----------------------------------- +-----|------17-16-17----17-16-------------17-16-15-14-------------14p13----- +-----|------------------------------------------------16-14-13-------------- +-----|---------------------------------------------------------16----------- +-----|---------------------------------------------------------------------- +-----|---------------------------------------------------------------------- + + +-----|---------------------------------------------------------------------| +-----|------------------------------------------------------------------14-| +16-14|13----14p13----------------------------------------------13-14-16----| +-----|---16-------16-14-13----13-14-13----13----------13-14-16-------------| +-----|---------------------16----------16----16-15-16----------------------| +-----|---------------------------------------------------------------------| + + +------17-16-14-16-14-------17s19bf~---|------------------------------------| +16-17----------------17-16------------|------------------------------------| +--------------------------------------|---------keys-----------------------| +--------------------------------------|------------------------------------| +--------------------------------------|------------------------------------| +--------------------------------------|------------------------------------| + + +---------16-12-16s21~--|16-------------16-19------------|------------------| +------14---------------|----19bf--19bf-------19bf-19p17-|-s16---------9h12-| +---13------------------|--------------------------------|-----18-16~-------| +14---------------------|--------------------------------|------------------| +-----------------------|--------------------------------|------------------| +-----------------------|--------------------------------|------------------| + + 1/2 1/2 1/2 +9-12p11p9-12-16-12-9----12------9------|-------------9---------------------| +---------------------12----12bf---12p9-|------9--------12------------------| +---------------------------------------|-11b-----11b------11b-rb-p9-11~-p9~| +---------------------------------------|-----------------------------------| +---------------------------------------|-----------------------------------| +---------------------------------------|-----------------------------------| + + +|-------9-------------------------------|----------------------------------| +|----------12p9------9------------------|----------------------------------| +|-11bf----------11bf---12p11p9----11p9--|----------------------------------| +|------------------------------11-------|-11-9-----------------------------| +|---------------------------------------|------11-10-9h10-11p10p9----------| +|---------------------------------------|-------------------------12~------| + + +|----------------------|-----14---12p11--------|---14bf------rb14p12-------| +|----------------------|---x-------------14~---|---------------------------| +|---------11-9~--------|-x---------------------|---------------------------| +|-------x--------------|-----------------------|---------------------------| +|--9s11----------------|-----------------------|---------------------------| +|----------------------|-----------------------|---------------------------| + + +|-s21-----21bf~----17-16-17-|-19-21-19-17-16-19-17-16----17-16-------16----- +|---------------------------|-------------------------19-------19-17----19-- +|---------------------------|----------------------------------------------- +|---------------------------|----------------------------------------------- +|---------------------------|----------------------------------------------- +|---------------------------|----------------------------------------------- + + +-------|------------------------------------------------------------|------- +-17-16-|-19-17-16-14-17-16-14-12--16-14-12-10-14-12-10-9-12-10-9----|-9----- +-------|---------------------------------------------------------11-|---11bf +-------|------------------------------------------------------------|------- +-------|------------------------------------------------------------|------- +-------|------------------------------------------------------------|------- + + +-9---------------------9--|------------------------------------------------| +---x----------------------|------------------------------------------------| +-----11bf--rb11p9-11bf----|-11bf--rb11p9--11p9s8--9h11p9----8~-------------| +--------------------------|------------------------------11----------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + +|--11~--11~--11~--12--14--|-12h14--12h14p12p11-12~----|-14~--14~--14~--16-17| +|-------------------------|---------------------------|---------------------| +|-------------------------|---------------------------|---------------------| +|-------------------------|---------------------------|---------------------| +|-------------------------|---------------------------|---------------------| +|-------------------------|---------------------------|---------------------| + + +|-16--17bf-------|-rb17~---14~------|--16-17-16-s12~---|-11h12---11--------| +|----------------|------------------|------------------|--------------14---| +|----------------|------------------|------------------|-------------------| +|----------------|------------------|------------------|-------------------| +|----------------|------------------|------------------|-------------------| +|----------------|------------------|------------------|-------------------| + + +|----------14-17p14-------------17h20p17----21bf~--|-s21-21-21-21-21-21-21-- +|-------16----------16-------19----------19--------|------------------------ +|-14s17----------------17s20-----------------------|------------------------ +|--------------------------------------------------|------------------------ +|--------------------------------------------------|------------------------ +|--------------------------------------------------|------------------------ + + +-21--19h21p19p17-19p17-16-------------------|------------------------------- +--------------------------19h21p19p17-19p17-|-16-17-19p17p16----19-17-16s14- +--------------------------------------------|----------------18------------- +--------------------------------------------|------------------------------- +--------------------------------------------|------------------------------- +--------------------------------------------|------------------------------- + + +--------------------------|-----------------------------------------|------- +-17-16-14-12-16-14-12-10--|-14-12-10-9h10p9-------------------------|------- +--------------------------|------------------11bf--11bf--11bf-rb11p9|h11~p9- +--------------------------|-----------------------------------------|------- +--------------------------|-----------------------------------------|------- +--------------------------|-----------------------------------------|------- + + +--------------------|-----------------------------12-14s16s17s16p14p12-16p14 +--------------------|--------------------13-14-16--------------------------- +-h11p9s8h9~---------|--------------13-14------------------------------------ +--------------------|-----13-14-16------------------------------------------ +--------------------|-s16--------------------------------------------------- +--------------------|------------------------------------------------------- + + +-p12-|----12-14p12-------12-----------------------------|------------------- +-----|-16----------16-14----16-14h16p14-13-14-13--------|----------------14- +-----|-------------------------------------------14p13~-|-------13-14-16---- +-----|--------------------------------------------------|-14-16------------- +-----|--------------------------------------------------|------------------- +-----|--------------------------------------------------|------------------- + + +----12-16p12----17p14----17s20-|p17----------17-20p17----21bf~-------------| +-16----------14-------16-------|----19p16h19----------19-------------------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| + + +|-21-18----21s18-15----18s15-12----15s12-9----12s9-------9-|-12p9----------- +|-------20----------17----------14---------11------11------|------11-------- +|-----------------------------------------------------12---|---------12-9-12 +|----------------------------------------------------------|---------------- +|----------------------------------------------------------|---------------- +|----------------------------------------------------------|---------------- + + +------------------------|--------------------------------------------------| +------------------------|--------------------------------------------------| +----9-------------------|---11bf---rb11p9s8h11p9p8--9p8-------8------------| +-11---11-8-11----8------|-------------------------------11-10---11-10------| +--------------10---10~--|---------------------------------------------11~--| +------------------------|--------------------------------------------------| + + +|--------------------------------------------|------------------------------ +|--------------------------------------------|-------------------------10-12 +|--------------------------------------------|-----------------9-11-13------ +|--------------10----------------------------|---------9-11-13-------------- +|---------9-11----12-11-9---------------9-11-|-9-11-12---------------------- +|-9-11-12-----------------12-11-9-11-12------|------------------------------ + + +----11-12-------12-14-11-12-14-16-|-12-14-16-17-16-14-21-14-16-17-16-14-21-- +-14-------14-11-------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +-14-16-17-|-16-14-21-14-16-17-16-14-17-s21-|--21bf-rb-bf-rb-bf---|--(21)---| +----------|--------------------------------|---------------------|---------| +----------|--------------------------------|---------------------|---------| +----------|--------------------------------|---------------------|---------| +----------|--------------------------------|---------------------|---------| +----------|--------------------------------|---------------------|---------| + + +|-----------------------------------------------|--------------------------| +|-----------------------------------------------|--------------------------| +|-11bf-rb11p9s8h11p9p8----9p8------8------------|--------------------------| +|----------------------11-----11-9----11p9p7----|-9-7s6---6----------------| +|--------------------------------------------11-|-------9---9s11~----------| +|-----------------------------------------------|--------------------------| + + +|--------9h12p9-------------12h15p12-------------15h18p15----|----------18h- +|-----11--------11-------14----------14-------17----------17-|-------20----- +|-s12--------------12s15----------------15s18----------------|-18s21-------- +|------------------------------------------------------------|-------------- +|------------------------------------------------------------|-------------- +|------------------------------------------------------------|-------------- + + +21~--------|--17p16p14--16p14----14-----------17p16p14---------------------| +-----------|------------------17----17-16-14s----------17p16p14------------| +-----------|----------------------------------------------------16p14s13---| +-----------|---------------------------------------------------------------| +-----------|---------------------------------------------------------------| +-----------|---------------------------------------------------------------| + + +|-----------------------------------|-21-18------s18p15--------------------| +|-17p16p14----14--------------------|-------20~---------17-----------------| +|----------16----16p14s13----13~----|----------------------18~-------------| +|-------------------------16--------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| + + +|-15-12-----------12-9-----------|-s12-12-12-11h12p11p9-11h12p11p9--9-11-x-- +|-------14-------------11--------|------------------------------------------ +|----------15~------------12~----|------------------------------------------ +|--------------------------------|------------------------------------------ +|--------------------------------|------------------------------------------ +|--------------------------------|------------------------------------------ + + +-11-9--|-9h11h12p11p9-11p9s8------8------------------|---------------------- +-------|---------------------10-9---10p9------9------|---------------------- +-------|---------------------------------11-9---11p9s|8h9p8h9p8-------8----- +-------|---------------------------------------------|----------11-10---11-- +-------|---------------------------------------------|---------------------- +-------|---------------------------------------------|---------------------- + + +------------------------|----------------------------|---------------------| +------------------------|----------------------------|---------------------| +------------------------|----------------------------|------------8-9~-----| +-10---------------------|----------------------------|-------6-11----------| +-----12-11-x-12-11-9----|-------9--------------------|---6-7---------------| +---------------------12-|-11-12---12-11--9s7h9~------|-9-------------------| + + +|------------------------|-------------------|-11p9p8----9p8------8--------- +|------------------------|-------------------|--------10-----10p9---10p9---- +|------------8-9dive-8---|------------8--9~--|------------------------------ +|-------6-11-------------|-------6-11--------|------------------------------ +|---6-7------------------|---6-7-------------|------------------------------ +|-9----------------------|-9-----------------|------------------------------ + + +------------|----------------------|---------------------|-----------------| +------------|----------------------|---------------------|-----------------| +-11p9s8~----|------------8-9dive---|------------8-9--8~--|---------8-9~----| +------------|-------6-11-----------|-------6-11----------|-------6---------| +------------|---6-7----------------|---6-7---------------|---6-7-----------| +------------|-9--------------------|-9-------------------|-9---------------| + + +|-s18p16p14------------------------------------|---------------------------| +|-----------17-16-14---------------------------|---------------------------| +|--------------------17-14-13------------------|------------8-9~-----------| +|-----------------------------16-14-13---------|-------6-11----------------| +|--------------------------------------16-15~--|---6-7---------------------| +|----------------------------------------------|-9-------------------------| + + +|---------------------------|-------------------|--14bf----rb1 1/2--14bf---| +|---------------------------|-------------------|--------------------------| +|------------8-9~--8tr9-8~--|------------8-9~---|--------------------------| +|-------6-11----------------|-------6-11--------|--------------------------| +|---6-7---------------------|---6-7-------------|--------------------------| +|-9-------------------------|-9-----------------|--------------------------| + +* a.h. +|-----------------------|----------------------|---------------------------| +|-----------------------|----------------------|---------------------------| +|------------8--9*-9*---|------------8-9--8~---|------------8-9~-----------| +|-------6-11------------|-------6-11-----------|-------6-11----------------| +|---6-7-----------------|---6-7----------------|---6-7---------------------| +|-9---------------------|-9--------------------|-9-------------------------| + + +|-12-11-9-8-9-11-|-12-11h12p11-9-8-9-11-|-12-9-11-12-14-11-12-14-16-12-14-16 +|----------------|----------------------|----------------------------------- +|----------------|----------------------|----------------------------------- +|----------------|----------------------|----------------------------------- +|----------------|----------------------|----------------------------------- +|----------------|----------------------|----------------------------------- + + +17-14-16-17|16-14-17-14-16-17-16-14-21-16----------16-20-17-|---------17-21- +-----------|------------------------------17----17----------|19----19------- +-----------|---------------------------------18-------------|---20---------- +-----------|------------------------------------------------|--------------- +-----------|------------------------------------------------|--------------- +-----------|------------------------------------------------|--------------- + + +-16----------16-20-17----------17-|-21-16-------------|----------------16--- +----17----17----------19----19----|-------17----------|-------------17------ +-------18----------------20-------|----------18-13----|-------13-18--------- +----------------------------------|----------------14-|----14--------------- +----------------------------------|-------------------|-16------------------ +----------------------------------|-------------------|--------------------- + + +-21-16-------------|-----------------|---------------|| +-------17----------|-----------------|---------------|| +----------18-13----|-----------------|---9-----------|| +----------------14-|-----------------|---9-----------|| +-------------------|-16~-------6-----|---7-----------|| +-------------------|-----------7-----|---------------|| + + + diff --git a/guitar/tabs/Malmsteen/farewell.tab b/guitar/tabs/Malmsteen/farewell.tab new file mode 100644 index 0000000..5a4b6d9 --- /dev/null +++ b/guitar/tabs/Malmsteen/farewell.tab @@ -0,0 +1,47 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen +Farewell +from Rising Force + +tune to F: +6=F +5=Bb +4=Eb +3=Ab +2=C +1=F + +or capo at 1st fret and play up 1/2 step + + + +-------------------|------------------|---------2---3--|---4---------------| +--8---------7---5--|---4------2----4--|---5------------|---5---------------| +-------------------|------------------|----------------|---4---------------| +-------------------|---4--------------|----------------|-------------------| +--7----------------|----------0-------|----------------|-------------------| +-------------------|------------------|---3------------|---4---------------| + + trill harmonics------------------------ +--5------------------|-----------0-------|--12---------12-|---------12------ +--5-----5--4-------5-|---------0---------|-------7---7----|-7---7--------7-- +--7------------------|-------0-----------|-----5---7------|---5---7--------- +---------------------|-----4-------------|----------------|----------------- +--0------------------|---2---------------|----------------|----------------- +---------------------|-0--------------0--|----------------|----------------- + + +harmonics +---------12--------|------7------12-------|-12--------12-------------------| +7---7---------7----|-7------7--------7----|-----7---------12---------------| +--5---7---------5--|---7------5---------5-|--------5------------12---------| +-------------------|----------------------|--------------------------------| +-------------------|----------------------|--------------------------------| +-------------------|----------------------|----------------------------12--| + + diff --git a/guitar/tabs/Malmsteen/faster_than_the_speed_of_light.tab b/guitar/tabs/Malmsteen/faster_than_the_speed_of_light.tab new file mode 100644 index 0000000..cc54313 --- /dev/null +++ b/guitar/tabs/Malmsteen/faster_than_the_speed_of_light.tab @@ -0,0 +1,551 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Faster than the Speed of Light" +from Odyssey +letostak@netcom.com +tune down 1/2 step + + +|--2---|----------------|---------------|---------------|------------------| +|------|-5-4------------|-4-------------|---------------|------------------| +|------|-----5-4-2---5--|---5-4-2-----5-|-4-2---------2-|------------------| +|------|-----------5----|---------5-4---|-----5-4-2-1---|-5-4-2-1----------| +|------|----------------|---------------|---------------|---------3-2-0----| +|------|----------------|---------------|---------------|------------------| +| | | | | | +| | | | | | +|------|----------------|---------------|---------------|------------------| +|--4---|----------------|---------------|---------------|------------------| +|------|-5-4-2-------5--|-4-2---------2-|---------------|------------------| +|------|-------5-4-2----|-----5-4-2-1---|-5-4-2-1-----4-|-2-1--------------| +|------|----------------|---------------|---------3-2---|-----3-2-0--------| +|------|----------------|---------------|---------------|-----------3-2----| + + +|----------------------|----------------|------------|---------------------| +|----------------------|----------------|------------|---------------------| +|-------------------4--|-4---4---4--5---|------------|---------------------| +|-2-----------------1--|-2---4---5--7---|----7s9~----|----------s9---9-----| +|-2--------------------|----------------|------------|---------------7-----| +|-0--0--0--0--0--0-----|----------------|------------|---------------0-----| + + +|-------------------|----------------|---------------|---------------------| +|-------------------|----------------|-------11------|---12----------------| +|----------------4--|-4--4--4--4--5--|---------------|---------------------| +|----------------1--|-2--4--4--5--7--|--------8------|----9-----------9----| +|-------------------|----------------|---------------|----------------7----| +|-0--0--0--0--0-----|----------------|---------------|----------------0----| + + +|-------------------|----------------|----------|--------------------------| +|-------------------|----------------|----------|--------------------------| +|----------------4--|-4--4--4--4-----|----------|--------------------------| +|----------------1--|-2--4--4--5--h7-|---------5|h9p7p5-9p7p5-9p7-9p7p5----| +|-------------------|----------------|----------|-----------------------9-7| +|-0--0--0--0--0-----|----------------|----------|--------------------------| + + +|-------------------|----------------|----------------|--------------------| +|-------------------|----------------|----------------|--------------------| +|----------------4--|-4--4--4--4-----|----------------|--------------------| +|----------------1--|-2--4--4--5--7~-|----------------|------4-------------| +|-------------------|----------------|-----------4----|------2-------------| +|-0--0--0--0--0-----|----------------|-----------2----|--------------------| + + +|-15-12s14-15-17-14-15-17s19-17-15-14-17-|-15-14-12-15-14-12s10-14-12-10s8-- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- + + Step inside the... +-12-|-10-8--10-8-7-5----8p|7p5-----7h8p7p5--------------------|-----|------| +----|----------------8----|----8p6---------8p7p5--------------|-----|------| +----|---------------------|----------------------8p7p5-4------|-----|------| +----|---------------------|------------------------------7p5p4|-----|------| +----|---------------------|-----------------------------------|7----|------| +----|---------------------|-----------------------------------|-----|------| + + feel the passion of the beast... +|--------|---------|-0------------------------|----------------------------| +|--------|-----0---|-0------------------------|----------------------------| +|--------|---------|-0------------------------|----------------------------| +|--------|---------|-2------------------------|----------------------------| +|--------|---------|-2------------------------|----------------------------| +|--------|---------|-0------------------------|----------------------------| + + +|-----------------|----------------|--------------|------------------------| +|--3--------------|----------------|--------------|------------------------| +|--0--------------|----------------|--------------|------------------------| +|--2--------------|---------4------|--------5-----|-----------------4------| +|--2--------------|---------6------|--------7-----|-----------------6------| +|--0--------------|----------------|--------------|--0--0--0--0--0---------| + + +|-----------------|--------------------|---------------|-------------------| +|-----------------|--------------------|---------------|-------------------| +|-----------------|----------------7---|------------5--|----------------6--| +|-4--------5------|----------------6---|------------7--|----------------8--| +|-6--------7------|----------------7---|---------------|-0--0--0--0--0-----| +|----------0------|-0--0--0--0--0------|---------------|-------------------| + + +|-----------------|---------------------------|----------------------------| +|-----------------|--10p8p7-------------------|----------------------------| +|--6----------8---|---------9p8---------------|----------------------------| +|--8----------9---|--------------10p9p7-------|----------------------------| +|-----------------|---------------------10p9p7|s6--------------------------| +|-----------------|---------------------------|----------------------------| + + Faster than the speed of light... +|----------------------|-------------------------|------------|---------------| +|----------------------|----------------------5--|------------|---------------| +|----------------------|----------------------5--|------------|---------------| +|-5--------------------|----------------------5--|------------|---------------| +|-7--------------------|-------------------------|------------|---------------| +|----0--0--0--0--0--0--|-0--0--0--0--0--0--0-----|0-0-0-0-0-0-|0-0-0-0-0-0-0-0| + + +|----------------------|----------------------|------------------|---------| +|-1--------------------|-------------------5--|----------------4-|---------| +|-2--------------------|-------------------4--|----------------4-|--------5| +|-2--------------------|-------------------4--|----------------4-|--------7| +|-0--0--0--0--0--0--0--|-0--0--0--0--0--0--2--|-2--2--2--2--2----|2-2-2-2--| +|----------------------|----------------------|------------------|---------| + + +|--------------------|----------------|-------------|----------------------| +|--------------------|-------------5--|-------------|-5--------5-----------| +|--------------------|-------------5--|-------------|-5--------5-----------| +|-5------------------|---5----5----5--|-------------|-5--------5-----------| +|-7------------------|---7----7-------|-------------|----------------------| +|---0--0--0--0--0--0-|-0----0----0----|-------------|----------------------| + + +|-------------------------------|-----------------------|------------------| +|-------------------------------|--------------------5--|------------------| +|-------------------------------|--------------------4--|------------------| +|-------------------------------|--------------------4--|------------------| +|-0h3h7--12p7p3--0h3h7--12p7p3--|-0h3h7--12p7p3--0---2--|2--2--2--2--2--2--| +|-------------------------------|-----------------------|------------------| + + +|------------------------|----------------|--------------------------------| +|---------------------4--|----------------|--------------------------------| +|------------------------|-5-4-2-------5--|-4-2----------4-----------------| +|------------------------|-------5-4-2----|-----5-4-2-1--2-----------------| +|2--2--2--2--2--2--2-----|----------------|--------------------------------| +|------------------------|----------------|--------------------------------| +| | | | +| | | | +|---------------------2--|----------------|--------------------------------| +|------------------------|-5-4---------5--|-4------------------------------| +|------------------------|-----5-4-2------|---5-4-2------------------------| +|------------------------|-----------5----|---------5-4-2------------------| +|------------------------|----------------|--------------------------------| +|------------------------|----------------|--------------------------------| + + + Your hands up-on the wheel the pedal to the floor... +|--------------|-----------------|-----------------|-----------------------| +|--------------|-----------------|-----------------|----------------0------| +|--------------|-----------------|-----------------|-----------------------| +|--------------|-----------------|-----------------|-----------------------| +|-7------------|-----------------|-----------------|-----------------------| +|--------------|-----------------|-----------------|-----------------------| + + +|-0------------|-----------------|-----------------|-----------------------| +|-0------------|-----------------|---3-------------|-----------------------| +|-0------------|-----------------|---0-------------|-----------------------| +|-2------------|-----------------|---2-------------|------------------4----| +|-2------------|-----------------|---2-------------|------------------6----| +|-0------------|-----------------|---0-------------|-----------------------| + + +|--------------|-----------------|-----------------|-----------------------| +|--------------|-----------------|-----------------|-----------------------| +|--------------|-----------------|-----------------|----------------7------| +|---------5----|----------------4|-------------5---|----------------6------| +|---------7----|----------------6|-------------7---|----------------7------| +|--------------|-0--0--0--0--0---|-------------0---|-0--0--0--0--0---------| + + +|----------|------------------|-----------|20p19p17------------------------- +|----------|------------------|-----------|---------20p19p17p16------------- +|------5---|---------------6--|--------8--|---------------------17p16------- +|------7---|---------------8--|--------9--|---------------------------19p17p +|----------|0--0--0--0--0-----|-----------|--------------------------------- +|----------|------------------|-----------|--------------------------------- + + +----------|--------------------|----------------------|--------------------| +----------|--------------------|--------------------5-|--------------------| +----------|--------------------|--------------------5-|--------------------| +16--------|-5------------------|--------------------5-|--------------------| +---19p18--|-7------------------|----------------------|--------------------| +----------|---0--0--0--0--0--0-|0--0--0--0--0--0--0---|0--0--0--0--0--0----| + + +|---------------------|-------------|-----------|--------------|-----------| +|---------------------|-------------|-----------|5-----------4-|-----------| +|------------5-----2--|-2------s14--|-----------|4-----------4-|-----------| +|------------5-----2--|-2-----------|-----------|4-----------4-|--------5--| +|------------3-----0--|-0-----------|-----------|2-2-2-2-2-2---|2-2-2-2-7--| +|0--0--0--0-----------|-------------|-----------|--------------|-----------| + + +|--------------|------------------|--------------|-------------------------| +|--------------|----------5-------|--------------|-----5---------5---------| +|--------------|----------5-------|--------------|-----5---------5---------| +|5-------------|--5---5---5-------|--------------|-----5---------5---------| +|7-------------|--7---7-----------|--------------|-------------------------| +|--0-0-0-0-0-0-|0---0---0---------|--------------|-------------------------| + + +|----------------------------|--------------------|-------------|-----------| +|----------------------------|------------------5-|-------------|-----------| +|----------------------------|------------------4-|-------------|-----------| +|----------------------------|------------------4-|-------------|-----------| +|0-3-7-t12-7-3-0-3-7-t12-7-3-|-0-3-7-t12-7-3-0--2-|-2-2-2-2-2-2-|2-2-2-2-2-2| +|----------------------------|--------------------|-------------|-----------| + + +|-----------------|---------------|------------------|---------------------| +|4----------------|---------------|------------------|---------------------| +|--5-4-2-------5--|-4-2---------4-|---------------4--|-4--4-4-4--5---------| +|--------5-4-2----|-----5-4-2-1-2-|-2-------------1--|-2--4-4-5--7---------| +|-----------------|---------------|-2----------------|---------------------| +|-----------------|---------------|-0--0-0-0-0-0-----|---------------------| + + +|-----------|-------------|------------------|-----------------------------| +|-----------|-------------|------------------|-----------------------------| +|-----------|-------------|----------------4-|---4--4--4--4------5---------| +|---7s9~----|-------9-----|----------------1-|---2--4--4--5------7---------| +|-----------|-------7-----|------------------|-----------------------------| +|-----------|-------0-----|-0--0--0--0--0----|-----------------------------| + + +|-----------|------------------|--------------------|----------------------| +|--------11-|--12---12s--------|--------------------|----------------------| +|--------11-|--11---11s--------|------------------4-|--4--4---4------------| +|--------11-|--13---13s-----5--|-9----------------1-|--2--4---5----5s7~----| +|-----------|---------------7--|-7------------------|----------------------| +|-----------|------------------|-0--0--0--0--0--0---|----------------------| + + +|-----------|-------------------|--------------------|---------------------| +|-----------|-------------------|--------------------|---------------------| +|-----------|-------------------|------------------4-|--4--4--4------------| +|---------5h|7p5-4-5-7p5p4------|------------------1-|--2--4--5-----7------| +|-----------|---------------7p6h|7s------------------|---------------------| +|-----------|-------------------|----0--0--0--0--0---|---------------------| + + +|-----------|-------------0-----|----------------x---|---------------------| +|-----------|-------------0-----|----------------x---|---------------------| +|-----------|-------------0-----|----------------x---|---------------------| +|-----------|-----4-------2-----|--------------------|---------------------| +|-------4---|-----2-------2-----|--------------------|---------------------| +|-------2---|-------------0-----|--------------------|-----------15s-------| + + +|----------------15p12-12-15p12p0-|-12p0h7-12p7p0-15----12-15p12p0-|-19p0h15 +|19p0h15-18p15p0------------------|------------------12------------|-------- +|---------------------------------|--------------------------------|-------- +|---------------------------------|--------------------------------|-------- +|---------------------------------|--------------------------------|-------- +|---------------------------------|--------------------------------|-------- + + +18p15p12p0-|-12p0h7-12p7p0-7p0h3-7p3p0-|-----------------15p12-12-15p12p0--| +-----------|---------------------------|-19p0h15-19p15p0-------------------| +-----------|---------------------------|-----------------------------------| +-----------|---------------------------|-----------------------------------| +-----------|---------------------------|-----------------------------------| +-----------|---------------------------|-----------------------------------| + + +-12p0h7-12p7p0-15----12h15p12p0-|-19p0h15-18p15p0-15----12-15p12p0-|12p0h7-- +------------------12------------|--------------------12------------|-------- +--------------------------------|----------------------------------|-------- +--------------------------------|----------------------------------|-------- +--------------------------------|----------------------------------|-------- +--------------------------------|----------------------------------|-------- + + +12p7p0-7p0h3-7p3p0-|-5p2-------11p8----------8-|-8p5-----------14p11-------- +-------------------|-----4----------10----10---|-----7------10-------13----- +-------------------|-------5-----------11------|-------8-11-------------14-- +-------------------|---------------------------|---------------------------- +-------------------|---------------------------|---------------------------- +-------------------|---------------------------|---------------------------- + + +----11-|-11p8----------8-17p14--------|-14p11--------s20~--|---------------- +-13----|------10----10---------16-----|-------13-----------|8p0h5-8p5p0----- +-------|---------11---------------17--|----------14--------|---------------- +-------|------------------------------|--------------------|---------------- +-------|------------------------------|--------------------|---------------- +-------|------------------------------|--------------------|---------------- + + +-7h10-3-7p3p0-|-12p0h7-12p7p0-15----12-15p12p0-|-17p0-0-18p15p0-12-15p15p0-| +--------------|------------------12------------|---------------------------| +--------------|--------------------------------|---------------------------| +--------------|--------------------------------|---------------------------| +--------------|--------------------------------|---------------------------| +--------------|--------------------------------|---------------------------| + + +|-12p7p0-12p0-------11h12-14p12p11----|-------------------------------------| +|-------------12h13----------------13p|12p10-12p10--------------------------| +|-------------------------------------|------------12p11-9p8----------------| +|-------------------------------------|----------------------10p9p7---------| +|-------------------------------------|-----------------------------10p9p7p6| +|-------------------------------------|-------------------------------------| + + +|------19----|-19h20-17-20----20-|----20----20-----|-21p18----18p15--------- +|------------|-------------20----|-19----17----17~-|-------20-------17------ +|------------|-------------------|-----------------|------------------------ +|------------|-------------------|-----------------|------------------------ +|------------|-------------------|-----------------|------------------------ +|------------|-------------------|-----------------|------------------------ + + +15p12----18p15----|-15p12----15---14-12-|-15p14----------14-14-------------- +------14-------17-|-------14------------|-------17-16h17-------17p16h17----- +------------------|---------------------|----------------------------------- +------------------|---------------------|----------------------------------- +------------------|---------------------|----------------------------------- +------------------|---------------------|----------------------------------- + + +14h15----|-14-15-17-15-17-19-19~-|---20-19-20-17-20----20-|---20----20------ +------17-|-----------------------|------------------20----|19----17----16--- +---------|-----------------------|------------------------|----------------- +---------|-----------------------|------------------------|----------------- +---------|-----------------------|------------------------|----------------- +---------|-----------------------|------------------------|----------------- + + +------15h17|h19-17-19p17-19---15h17-|-17-15---15~--|-15-15-18-15----15-15-15| +17h19------|------------------------|--------------|-------------17---------| +-----------|------------------------|--------------|------------------------| +-----------|------------------------|--------------|------------------------| +-----------|------------------------|--------------|------------------------| +-----------|------------------------|--------------|------------------------| + + +|12-12-12-------12-12----12-|14h15p14----------14-------------|14-15-14----- +|---------14-14-------14----|---------17p16h17----17-16-16-17-|---------17-- +|---------------------------|---------------------------------|------------- +|---------------------------|---------------------------------|------------- +|---------------------------|---------------------------------|------------- +|---------------------------|---------------------------------|------------- + + 1/2 +------14----14-15----14-15-|---14-15-14----17-17s---5-7-|-19-19b-----------| +16-17----17-------17-------|17----------17--------------|------------------| +---------------------------|----------------------------|------------------| +---------------------------|----------------------------|------------------| +---------------------------|----------------------------|------------------| +---------------------------|----------------------------|------------------| + + +|rb(19)-18-19-|-19--20bf--|-------17----------17----|----19~p0--------|----- +|-------------|-----------|-20bf-----20bf-rb-----20-|-17-------22bf-rb|-22bf +|-------------|-----------|-------------------------|-----------------|----- +|-------------|-----------|-------------------------|-----------------|----- +|-------------|-----------|-------------------------|-----------------|----- +|-------------|-----------|-------------------------|-----------------|----- + + +15-17-19-17-15-|-17-15-14-15-14-------14----------------------|------------- +---------------|----------------17-15----17-15-13-17-15-13-12-|-15-13-12---- +---------------|----------------------------------------------|----------14- +---------------|----------------------------------------------|------------- +---------------|----------------------------------------------|------------- +---------------|----------------------------------------------|------------- + + +------------------------|----------------------------------|------15p12----- +13-12-------12----------|-------------------------12-17p12-|---12----------- +------14-12----14-12-11-|-14-12-11----12-11----12----------|12-------------- +------------------------|----------14-------14-------------|---------------- +------------------------|----------------------------------|---------------- +------------------------|----------------------------------|---------------- + + +19p15-------|-12-------|-(15)-14-15p14p12-14--|------------|-15-14-12------- +------17----|----15bf--|----------------------|------------|----------15bf-- +---------16-|----------|----------------------|------------|---------------- +------------|----------|----------------------|------------|---------------- +------------|----------|----------------------|------------|---------------- +------------|----------|----------------------|------------|---------------- + + 1/2 +12-----------------------|-----14s-12-------|------------------|------------ +---12-15-----------------|------------------|------------------|------------ +---------14b--rb14-p12~--|-s11-----s9--9-11s|12-9-11-----------|----------13 +-------------------------|------------------|---------------13-|-------13--- +-------------------------|------------------|---------11h14----|-11h14------ +-------------------------|------------------|------------------|------------ + + Keyboard solo pick slide +---11-14bf--|--14----|----------|--------------|---------------|------------ +12----------|--------|----------|--------------|---------------|------------ +------------|--------|----------|--------------|---------------|--x--------- +------------|--------|----------|--------------|---------------|--x--------- +------------|--------|----------|--------------|---------------|------------ +------------|--------|----------|--------------|---------------|------------ + + +----------|----------------------------15h19-|-20p19-19p14----14p11--------| +----------|-------------------16h17h19-------|-------------16-------13-----| +----------|----------16h17h19----------------|-----------------------------| +16h17h19--|-16h17h19-------------------------|-----------------------------| +----------|----------------------------------|-----------------------------| +----------|----------------------------------|-----------------------------| + + 1/2 +|14p13-12-11-12-|-12-12b-14-12-11-|-12-11-------11----------|--------------- +|---------------|-----------------|-------13p12----13p12----|13p12---------- +|---------------|-----------------|----------------------14-|------14p12-16- +|---------------|-----------------|-------------------------|--------------- +|---------------|-----------------|-------------------------|--------------- +|---------------|-----------------|-------------------------|--------------- + + +--------------------|------------|---------------------|--------------------| +--------------------|------------|---------------------|--------------------| +---16----16---------|---14dive---|p11~-----------------|--------------------| +16----14----13------|------------|---------12~---------|--11~-----9h10------| +--------------------|------------|---------------------|--------------------| +--------------------|------------|---------------------|--------------------| + + +|------------|------------------------------|--------------12-8-11-12-11-8-| +|------------|------------------------------|10-7-8-10-8-7-----------------| +|------------|---------------11-8-9-11-9-8--|------------------------------| +|p9--7h9--9--|-10-7-9-10-9-7----------------|------------------------------| +|------------|------------------------------|------------------------------| +|------------|------------------------------|------------------------------| + + +|14-11-12-14-12-11-15-12-14-15-14-12-|17-12-14-15-14-12-17-12-14-15-14-12--| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|17-12-14-15-14-12s19-|--(19)------------------|--------------(19)---------| +|---------------------|------------------------|---------------------------| +|---------------------|------------------------|---------------------------| +|---------------------|------------------------|---------------------------| +|---------------------|------------------------|---------------------------| +|---------------------|------------------------|---------------------------| + + +Rev it to the red line... + +|---22bf----------|-------------------|-------------------|----------------| +|-----------------|-------------------|-------------------|----------------| +|-----------------|-------------------|-------------------|----------------| +|-----------------|-------------------|-------------------|-------------9--| +|-----------------|-------------------|-------------------|-------------7--| +|-----------------|-------------------|-------------------|-------------0--| + + +|-----------------|-------------------|-------------------|----------------| +|-----------------|-------------------|-------------------|----------------| +|-----------------|-------------------|-------------------|----------------| +|-9---------------|-------------------|-------------------|----------------| +|-7---------------|-------------------|-------------------|----------------| +|-0---------------|-------------------|-------------------|----------------| + + +Continue with verse rhythm + +Chorus + +Play intro + + +|---15~------|-15-17-19--(19)~--|15tr19-15----------|----------------------| +|------------|------------------|----------19tr20-17|12tr17-12--8tr12-8~---| +|------------|------------------|-------------------|----------------------| +|------------|------------------|-------------------|----------------------| +|------------|------------------|-------------------|----------------------| +|------------|------------------|-------------------|----------------------| +| | | | | +| | | | | +|------------|------------------|-------------------|----------------------| +|------------|------------------|-------------------|----------------------| +|------------|------------------|-------------9-----|----------------------| +|---2--------|------------------|-------------9-----|-9-------9------------| +|---2--------|------------------|-------------7-----|-7-------7------------| +|---0--------|------------------|-------------------|-0--------------------| + + +|-8p7---------------------|-7tr12-7~---------12tr15-12~-|------15tr19-15~--| +|-----10p8p7--10p8p7---8--|---------------12------------|---17-------------| +|--------------------9----|------------12---------------|16----------------| +|-------------------------|-----------------------------|------------------| +|-------------------------|-----------------------------|------------------| +|-------------------------|-----------------------------|------------------| +| | | | +| | | | +|-------------------------|-----------------------------|------------------| +|-------------------------|-5---------------------------|------------------| +|-5-----------------------|-5---------------------------|-5----------------| +|-5-----------------------|-5---------------------------|-5----------------| +|-------------------------|-----------------------------|------------------| +|------------0------0-----|-----------------------------|------------------| + + +|19h20p19p17----------22bf-|-rb(22)~------|-14-15-17-15h17p15p14p15p14p12--| +|------------20-19-17------|--------------|--------------------------------| +|--------------------------|--------------|--------------------------------| +|--------------------------|--------------|--------------------------------| +|--------------------------|--------------|--------------------------------| +|--------------------------|--------------|--------------------------------| +| | | | +| | | | +|--------------------------|--------------|--------------------------------| +|--------------------------|-7------------|--------------------------------| +|--5-------------------5---|-7------------|--------------------------------| +|--5-------------------5---|-7------------|--------------------------------| +|--------------------------|--------------|--------------------------------| +|--------------------------|--------------|-0----------0-------------------| + + +|-14p12p10-8-12p10p8-7-10p8p7----8p7------|7--------------|----------------- +|-----------------------------10-----10p8-|--10p8p7-------|----------------- +|-----------------------------------------|----------9~---|---9~------------ +|-----------------------------------------|---------------|----------------- +|-----------------------------------------|---------------|----------------- +|-----------------------------------------|---------------|----------------- +| | | +| | | +|-----------------------------------------|---------------|----------------- +|-----------------------------------------|---------------|----------------- +|-----------------------------------------|---------------|----------------- +|-----------------------------------------|9--------------|--9-------------- +|-----------------------------------------|7--------------|--7-------------- +|-0----------------------0----------------|0--------------|--0-------------- + + + diff --git a/guitar/tabs/Malmsteen/faultline.tab b/guitar/tabs/Malmsteen/faultline.tab new file mode 100644 index 0000000..7d6688e --- /dev/null +++ b/guitar/tabs/Malmsteen/faultline.tab @@ -0,0 +1,306 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen - Faultline +from Eclipse +Judy Letostak (letostak@ix.netcom.com) +tune down 1/2 step +On the chorus, the top staff, the notes are harmony guitars, the top notes +are one guitar and the bottom ones are the second. The bottom staff is +the rhythm guitar. Anything with a = like 7=8 seven is one guitar and the +8 is the other, a harmony guitar. + + + +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|---7/9--9----7/9--9-----|--7\5---5----5/9---7~---------------------------| +|---5/7--7----5/7--7-----|--5\3---3----3/7---5~---------------------------| +|------------------------|------------------------------------------------| + + +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------5--7--------| +|---7/9--9----7/9--9-----|--7\5---5----5/9-----------5--7--9--------------| +|---5/7--7----5/7--7-----|--5\3---3----3/7--5--7--9-----------------------| +|------------------------|------------------------------------------------| + + +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|---7/9--9----7/9--9-----|--7\5---5----5/9---7~---------------------------| +|---5/7--7----5/7--7-----|--5\3---3----3/7---5~---------------------------| +|------------------------|------------------------------------------------| + + p.s. +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|---7/9--9----7/9--9-----|--7\5---5----5/9---x\---------------------------| +|---5/7--7----5/7--7-----|--5\3---3----3/7---x\---------------------------| +|------------------------|-------------------------14\--------------------| + + +Verse +Something ... + +2. We ... + +|-----------------------|--------------------------|-----------------------| +|-----------------------|--------------------------|-----------------------| +|-----------------------|--------------------------|-----------------------| +|--9--------------------|---------------4-5-4h5p4--|------------------4h5h7| +|--7----5h7--7-----7----|--5h7--x-x-5~-------------|-5h7-7---5h7-7---7-----| +|------------0----------|--------------------------|-----0-------0--7------| + + +We ... + +science ... + +|-----------------------------------5p0-|---------------------------------| +|---------------------------4h5h7/8-----|---------------------------------| +|---------------------4h5h7-------------|------------------x---x----------| +|---------------4h5h7-------------------|----------------x---x-x----------| +|-7p5-c-c-c-7-5-------------------------|-5h7-7---5h7-7-------------------| +|---------------------------------------|-----0-------0-------------------| + + +Some .. + +Just .. +living ...(to chorus) + +|--------------------------|---------7h10-10/12----|-12--12/15-14-12-10-10h| +|--------------------------|--------12p10-21p11----|--------12-10----------| +|--------------------------|-----------------------|-12--12-------12-11-11h| +|--------------------------|-----------------------|-----------------------| +|--------------------------|-----------------------|-----------------------| +|--------------------------|-----------------------|-----------------------| +| | | | +| | | | +|--------------------------|-----------------------|-----------------------| +|-------------------8------|-----------------------|-----------------------| +|---------------------9~---|-----5-----------------|-----------------------| +|-----------------9--------|-----5-----------------|-----------------------| +|-5h7-7--5h7-7--x----------|-5p3-3--3-7-5--2h5-5/7-|-7-7-10-9-7-5-5h7--7---| +|-----0------0-------------|-----------------------|-----------------------| + + + +living ... + +|-12--12-7--10-10-12--|-12-12/15-14-12-10-8--7h10-10/12----| +|--------12-10--------|-------12-10------------------------| +|-12--12-------12p11--|-12-12-------12-11-9-12-10-21p11----| +|---------------------|------------------------------------| +|---------------------|------------------------------------| +|---------------------|------------------------------------| +| | | +| | | +|---------------------|------------------------------------| +|---------------------|------------------------------------| +|---------------------|------------------------------------| +|---------------------|------------------------------------| +|-2h5--5/7------------|--7--7/10-9--7-5-3~--2h5--5/7-------| +|---------------------|------------------------------------| + + +|-12-12/15-14--12-10-10h12-12--7h10-10/12--|-12-12/15-14--12-10-8~--------| +|-------12-10-----------------12-10--------|-------12-10------------------| +|-12-12--------12-11-11h12-12-------12p11--|-12-12--------12-11-12--------| +|------------------------------------------|------------------------------| +|------------------------------------------|------------------------------| +|------------------------------------------|------------------------------| +| | | +| | | +|------------------------------------------|------------------------------| +|------------------------------------------|------------------------------| +|------------------------------------------|------------------------------| +|------------------------------------------|------------------------------| +|-7~-7/10-9-----7--5-5h7--7-------2h5-5/7--|--7--7/10-9----7--5--3~-------| +|------------------------------------------|------------------------------| + + +Chorus +Cry .. + +|-----------------------------------|-------------------------------------| +|-----------------------------------|--7--------------7----8----7---------| +|---9----7------------7---9---------|--8-----9---8----8----9----7---------| +|--10----9----7=10----9--10--7=10---|-------10---9------------------------| +|-----------------------------------|-------------------------------------| +|-----------------------------------|-------------------------------------| +|harmony guitars | | +| | | +|-----------------------------------|-------------------------------------| +|-----------------------------------|-------------------------------------| +|-----------------------------------|-------------------------------------| +|-----------------------------------|--4--------------4----5----4---------| +|--7-----5----3-------5---7---3-----|--6----7----6----6----7----5---------| +|--8-----7----5-------7---8---5-----|-------8----7------------------------| + + +love ... +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +|--9----7------------7----9----------|------------------8-----------------| +|-10----9----7=10----9---10----7=10--|--8=11------------9-----------------| +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +| | | +| | | +|------------------------------------|------------------------------------| +|------------------------------------|----------------8-tr7---------------| +|------------------------------------|------------6-9-----------9--8~-----| +|------------------------------------|--------5-8-------------------------| +|-7-----5----3-------5----7----3-----|----4-7-----------------------------| +|-8-----7----5-------7----8----5-----|--6-----------------7---------------| + + +|-----14---15---17bf---17---15---14--------------|------------------------| +|--17--7----8---10bf---10----8----7---16=8--17=7h|8-----------------------| +|---9--------------------------------------------|------------------------| +|------------------------------------------------|------x\----------------| +|------------------------------------------------|------------------------| +|------------------------------------------------|------------------------| +| | | +| | | +|------------------------------------------------|------------------------| +|------------------------------------------------|------------------------| +|--5---------------------------------------------|------------------------| +|---------------7--------7-------------4---------|------------------------| +|--3------------4--------5-------------6---------|---7--------------------| +|------------------------------------------------|------------------------| + + +Don't .... + +|------14---15--17bf--17---15---14--/14------|----14~---------------------| +|--17---7----8--10bf--10----8----7---16--17--|----17~---------------------| +|---9----------------------------------------|----------------------------| +|--------------------------------------------|----------------------------| +|--------------------------------------------|----------------------------| +|--------------------------------------------|----------------------------| +| | | +| | | +|--------------------------------------------|----------------------------| +|--------------------------------------------|----------------------------| +|--5-----------------------------------------|----------------------------| +|---------------7----------7---------4-------|----------------------------| +|--3------------4----------5---------6-------|---7/19~--------------------| +|--------------------------------------------|----------------------------| + +Guitar Solo + +|--15/19--15--------19--17-15p14-17p15-14~--15p14-------|-------15h17h19p17 +|------------17-----------------------------------17-15-|-17-19------------ +|---------------16--------------------------------------|------------------ +|-------------------------------------------------------|------------------ +|-------------------------------------------------------|------------------ +|-------------------------------------------------------|------------------ + + +-p15----15h17p15-19p17p15-------22bf--rb22--22-22-22-17-|-20-19-17-15-19-17 +-----19-------------------19p17-------------------------|------------------ +--------------------------------------------------------|------------------ +--------------------------------------------------------|------------------ +--------------------------------------------------------|------------------ +--------------------------------------------------------|------------------ + + +-15-14-17-15p14-12-15-14-12-10-14-12-10-8h10p8----------------------------| +-----------------------------------------------12h13-12-12~--10h12--------| +--------------------------------------------------------------------------| +--------------------------------------------------------------------------| +--------------------------------------------------------------------------| +--------------------------------------------------------------------------| + + +|----------------------8--------------------------------------------------| +|--p10p8h10~--/12p8h10---10-12p10p8-7h8-10p8-7-8p7------------------------| +|--------------------------------------------------9p7--------------------| +|------------------------------------------------------10p9p7-------------| +|-------------------------------------------------------------10p9p7---7--| +|--------------------------------------------------------------------0----| + + 1/2 +|-----------------------8-11-12\7/12----14----15----17----|-17h19b-----22bf +|---------------8-10-12--------------12----12----12----12-|----------0----- +|--------7h9-11-------------------------------------------|----------0----- +|-7-9-10--------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- +|---------------------------------------------------------|---------------- + + +--rb22--22-/20-|-19h20-17h20----20----20----20----20-19-20-17-20----20----- +---------------|-------------20----19----17----16----------------20----19-- +---------------|----------------------------------------------------------- +---------------|----------------------------------------------------------- +---------------|----------------------------------------------------------- +---------------|----------------------------------------------------------- + + +-20----20----20~-------|-------12-------------12----------/17p14----------- +----17----16-----17\15-|-15bf-----15p12----12--------------------15-------- +-----------------------|----------------14-------15p14p12-----------12h14p- +-----------------------|--------------------------------------------------- +-----------------------|--------------------------------------------------- +-----------------------|--------------------------------------------------- + + +-----------------|-/12-15p12----------12h15-18p15----15-22bf\-12----------- +-----------------|-----------12----12-------------17-------------15p12----- +-12p11-----------|--------------12-------------------------------------14bf +-------14--------|--------------------------------------------------------- +----------14-----|--------------------------------------------------------- +-------------12--|--------------------------------------------------------- + + +-----12--------------------------------|----------------------------12----- +--12----15p12--------------------------|----------------12----15p12----12-- +--------------15-14p12----14-12--------|----12----14-12----14-------------- +-----------------------14-------14p12--|-14----14-------------------------- +---------------------------------------|----------------------------------- +---------------------------------------|----------------------------------- + + 1/2 +--14b--12--------------------------------------|--------------------------- +----------15p12--------------------------------|----------------------12--- +----------------15-14p12-11----12p11-------11--|--------------------------- +----------------------------14-------14-12-----|-14p12-10-14-12p10-9------- +-----------------------------------------------|--------------------------- +-----------------------------------------------|--------------------------- + + +--------------------------------------------------------------------------| +--------------------------------------------------------------------------| +--------------------------------------------------------------------------| +-10p9-------9-------------------------------------------------------------| +------12p10---10p9----10p9------------------------------------------------| +-------------------12-------12-10bf---10----------------------------------| + + +Chorus then fade out. + +======================================================================= +h = hammeron Judy Letostak +p = pulloff Internet letostak@ix.netcom.com +/\ = slide Fidonet 1:202/762 +x = ghost note MetalNet 666:666/2 +t = tap (right hand) The Music Shop BBS (619)423-4970 24hrs +~ = vibrato * = picked harmonic +bf = bend full tr = trill +rb = release bend p.s. = pick scrape +dive = dive with bar b = bend / step written over note +======================================================================== +The Music Shop BBS (619)423-4970 24hrs +Guitar Tab, Bass Tab, Lyrics, Sound Files, Pictures, BRE...LORD...FidoNet... +MetalNet...In a band? Want some exposure? I have a file area for bands +will take anything that can be put on a computer...Lyrics, pictures, sound +files, gig ads...email me or call my bbs. It's free, and access is free. + \ No newline at end of file diff --git a/guitar/tabs/Malmsteen/fire.tab b/guitar/tabs/Malmsteen/fire.tab new file mode 100644 index 0000000..eda880f --- /dev/null +++ b/guitar/tabs/Malmsteen/fire.tab @@ -0,0 +1,296 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Fire" +from Trilogy +letostak@netcom.com + + w/bar scoop +|----------------------|-----------------|---------------------------------| +|10--9~----------------|--6------5~------|---8--------7~-------------------| +|-9--9~----------------|--5------5~------|---7--------7~-------------------| +|11--9~----------------|--7------5~------|---9--------7~-------------------| +|----------------------|-----------------|---------------------------------| +|-----------------0----|-----------------|-----------------------0---------| + +scoop scoop scoop w/bar pull sharp +|--------------------|-------------------------|---------------------------| +|---10------9~-------|-10-----9~---------------|-6-----5~------------------| +|----9------9~-------|--9-----9~---------------|-5-----5~------------------| +|---11------9~-------|-11-----9~---------------|-7-----5~------------------| +|--------------------|-------------------------|---------------------------| +|0-------------------|-----------------0----0--|---------------------------| + +open harm dive w/bar +|---------------------------|------------------------|---------------------| +|---------------------------|--10-------9------------|-10------9~----------| +|-5----------7--5--4~---3~--|---9-------9------------|--9------9~----------| +|---------7-----------------|--11-------9------------|-11------9~----------| +|---------------------------|------------------------|---------------------| +|---------------------------|----------------0--0--0-|-------------0--0----| + + tap on harmonics + w/right hand + t t +|---------------------------|---------------------|------------------------| +|------6~----6--6--5--------|-8---x--x--7~--------|10--10--9--21-----------| +|------5~----5--5--5--------|-7---x--x--7~--------|-9---9--9--21-----------| +|------7~----7--7--5--------|-9---x--x--7~--------|11--11--9------21-------| +|---------------------------|---------------------|------------------------| +|-0-------------------0--0--|---------------0--0--|------------------------| + + scoop +|----------------------|---------------------------------------------------| +|-10-----9----9--------|------5~---5---x--x---5~---------------------------| +|--9-----9----9--------|------6~---6---x--x---5~---------------------------| +|-11-----9----9--------|------7~---7---x--x---5~---------------------------| +|----------------------|---------------------------------------------------| +|----------------0--0--|-0-----------------------------0----0----0----0----| + + pick scrape +|----------------------|---------------------------------------------------| +|-8-----7~-------------|------10---10--9-----------------------------------| +|-7-----7~-------------|-------9----9--9----x------------------------------| +|-9-----7~-------------|------11---11--9---------x-------------------------| +|----------------------|---------------------------------------------------| +|--------------0----0--|-0-------------------------------------------------| + + +Verse +Born with the fire in my blood... + +|----------------------|-------------------|-------------------------------| +|----------------------|-------------------|-------------------------------| +|----------------------|-------------------|-------------------------------| +|-6--------------6-----|-6--------------6--|-6------------6-----------6----| +|-4--------------4-----|-3--------------3--|-4------------4-----------4----| +|----------------------|-------------------|-------------------------------| + + +|----------------------|--------------------|------------------------------| +|----------------------|--------------------|------------------------------| +|----------------------|--------------------|------------------------------| +|----------------------|--------------------|------------------------------| +|-4--------------7-----|-7----------7-----7-|------------------------------| +|-2--------------4-----|-5----------5-----4-|-3~------------3-------3------| + + + It doesn't matter... +|----------------------|---------------------|-----------------------------| +|-------5--------------|---------------------|-----------------------------| +|-------6------------6h|8~------6h8p6s5------|-----------------------------| +|-------6--------------|---------------------|6----------------------6-----| +|----------------------|------------------11s|4----------------------4-----| +|-4--------------------|---------------------|-----------------------------| + + +|----------------------|---------------------|-----------------------------| +|----------------------|---------------------|-----------------------------| +|----------------------|---------------------|-----------------------------| +|-6~--------------6----|-6----------6-----6--|-----------------------------| +|-3~--------------3----|-4----------4-----4--|-4---------------------7-----| +|----------------------|---------------------|-2---------------------4-----| + + +|----------------------|---------------------|-----------------------------| +|----------------------|---------------------|-----------------------------| +|----------------------|---------------------|---------------------6h8~----| +|----------------------|---------------------|---------------------6-------| +|-7-------7----7-------|---------------------|-----------------------------| +|-5-------5----4-------|-3~---------3----3---|-4---4---4---4---4-----------| + + + pick scrape Feel the fire... +|----------------------|--------------------|------------------------------| +|----------------------|--------------------|------------------------------| +|-8~-------x-----------|11--------------11--|-9-------------9---9--x-------| +|----------x-----------|11--------------11--|-9-------------9---9--9-------| +|----------------------|-9--9--9--9--9---9--|-7----7--7--7--7---7--7-------| +|----------------------|--------------------|------------------------------| + + +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|----------------5~-----|------------------------| +|-------------------------|-6--6--6--6--6--6~--x--|-x----------------------| +|-7--7--7--7--7--7--7--7--|-3--3--3--3--3------3--|-4--4--4--4--4--4--4--4-| +|-5--5--5--5--5--5--5--5--|-----------------------|------------------------| + + a.h. Fire I'm burining up with fire... +|----------------|------------------|--------------------------------------| +|----------------|-10------9--------|----5--5--5--5--5~--------------------| +|----------4bf---|--9------9--------|----6--6--6--6--5~--------------------| +|----------------|-11------9--------|----7--7--7--7--5~--------------------| +|-4--4--4--------|------------------|--------------------------------------| +|----------------|------------0--0--|-0--0------------------0-----0--------| + + +|---------------------|--------------------------|-------------------------| +|--8----7~------------|-----10--10--x--x--9~-----|-10----9-----------------| +|--7----7~------------|------9---9--x--x--9~-----|--9----9-----------------| +|--9----7~------------|-----11--11--x--x--9~-----|-11----9-----------------| +|---------------------|-----------------------x--|-------------------------| +|-------------0----0--|-0--------------------12s-|------------0-----0------| + + nat harm pick slide +|----------------------------|------------------|--------------------------| +|------6--6--x--x--5~--------|-8---------7------|-10---10---9~-------------| +|------5--5--x--x--5~--------|-7------7-----7~--|--9----9---9~----x--------| +|------7--7--x--x--5~--------|-9---7------------|-11---11---9~-------------| +|----------------------------|------------------|--------------------------| +|--0-------------------0--0--|------------------|--------------------------| + + +Solo +|---------------------9s--------|----21-------------------14---------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| + + +|-16h17p16-----------------------------------------------------------------| +|-----------17p14--16p14---------------------------------------------------| +|-------------------------16p14--16--14p13---------------------------------| +|-------------------------------------------16p14p13-----------------------| +|-----------------------------------------------------16p15~---------------| +|--------------------------------------------------------------------------| + + Rake 1/2 hold bend +|----------------------------------14----------16---------|-16b---t20p16~--- +|----x--16--14p13h14--17--14p13h14----14p13h14----14p13h14|----------------- +|-x-------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- + + +----------16p12-|------------------------------------14h17p14----17s21-----| +-------14-------|14----14-16-14p13-14~--14--14h16h17----------16-----------| +----13----------|---13-----------------------------------------------------| +-14-------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| + + +|21p18----21s18p15----18s15p12----15s18p15----18s15p12-----15~~~~~~s-------| +|------20----------17----------14----------17----------14------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|17p16p14---------------------------------------------------|--------------- +|---------17-16s14-13-14-16-14-13s--------------------------|--------------- +|----------------------------------13-14p13p11--------------|--------------- +|----------------------------------------------14p13p11-10~-|-13h14p13h14--- +|-----------------------------------------------------------|--------------- +|-----------------------------------------------------------|--------------- + + +-----------------------------------16h17p16h17p16----------16-|21-16-------- +-------------13s14-17--16h17p16h17----------------18----17----|------17-19-- +-13h14p13h14-----------------------------------------18-------|------------- +--------------------------------------------------------------|------------- +--------------------------------------------------------------|------------- +--------------------------------------------------------------|------------- + + 1 1/2 +----------16h---17--19--21b----|-21bf~--rb20~-------21bf~------------------| +16-17-19-----------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| + + 1/2 +|21~----17p16p14----16-14------------------|-------------------------------| +|----x-----------17-------17-16-14---------|-------------------------------| +|----0-----------------------------16-15-13|-13br--------------------------| +|------------------------------------------|----------16~-------16~--------| +|------------------------------------------|-------------------------------| +|------------------------------------------|-------------------------------| + + 1/2 +|-17-21p20h21-16-21-20-21----21-20-21----21-20h21-21|---20-18-20b~-18-------| +|-------------------------19----------17------------|16--------------20p17--| +|---------------------------------------------------|---------------------18| +|---------------------------------------------------|-----------------------| +|---------------------------------------------------|-----------------------| +|---------------------------------------------------|-----------------------| + + +|s17-16h17p14h16-12-14-11h12p11-------------------|------------------------- +|-------------------------------14-13h14p13p10-13p|10s9h10p9---------------- +|-------------------------------------------------|----------11p9-11p9s8---- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + 1/2 +--------------------------|-16b--16-15-14-12-11----------------------|------ +--------------------------|---------------------15s14-13-12-11-10----|------ +--------------------------|---------------------------------------13s|12---- +-11p10--------------------|------------------------------------------|------ +-------12p11p9-11p9-------|------------------------------------------|------ +--------------------12-11~|------------------------------------------|------ + + 1/2 1/2 +-----------------------9--11-12p9--11b-|rb11--11p9-11b~--11-8-9-11-9-8s14--- +-----------------------x---------------|------------------------------------ +-11p9----11-9-11bf--9------------------|------------------------------------ +------11-------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ + + +11-12|14-12p11s17-16--------------------------------------------17---------- +-----|---------------19-17-16----17-16-19-17p16----17h19--19s21----19h21---- +-----|------------------------18----------------18-------------------------- +-----|---------------------------------------------------------------------- +-----|---------------------------------------------------------------------- +-----|---------------------------------------------------------------------- + + 1 1/2 1 1/2 +17-19-|---17-19-21~-------21p16----------16s12-16----12-16s21b--|21---21~---| +------|21---------------x-------17----17----------14------------|-----------| +------|---------------x------------18---------------------------|-----------| +------|---------------------------------------------------------|-----------| +------|---------------------------------------------------------|-----------| +------|---------------------------------------------------------|-----------| + + 1 1/2 1/2 +|--16br------14~-----16b---|-16--14h16p14------16--|14h16p14h16p14-------14-| +|--------------------------|--------------17~------|---------------17-15----| +|--------------------------|-----------------------|------------------------| +|--------------------------|-----------------------|------------------------| +|--------------------------|-----------------------|------------------------| +|--------------------------|-----------------------|------------------------| + + 1/2 +|-14h16p14h16p14h16--14h16-t21p17p16p14p13~--|-16br--14~---16h17-----------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| + + 1/2 +|-16brbr--14h16p14----16-16-17-14-16-17|-19~--------|-19s21bf--------------| +|------------------17------------------|------------|----------------------| +|--------------------------------------|------------|----------------------| +|--------------------------------------|------------|----------------------| +|--------------------------------------|------------|----------------------| +|--------------------------------------|------------|----------------------| + + +Repeat chorus for outro + +lyrics... + + diff --git a/guitar/tabs/Malmsteen/fire_and_ice.tab b/guitar/tabs/Malmsteen/fire_and_ice.tab new file mode 100644 index 0000000..e7ebc49 --- /dev/null +++ b/guitar/tabs/Malmsteen/fire_and_ice.tab @@ -0,0 +1,371 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen - Fire and Ice +from Fire and Ice +Judy Letostak (letostak@ix.netcom.com) + + + +|--------12---|-17p12-------------12--------------------------------------- +|-----13------|-------13----12-13----13----------17-18p15----------15-15--- +|--14---------|----------14-------------14----13----------16----16--------- +|-------------|----------------------------14----------------18------------ +|-------------|------------------------------------------------------------ +|-------------|------------------------------------------------------------ + + +-----------------|-12------------------------------------------------------ +--------------12-|----13----/15-13--------13/17-17------------------------- +--16-------13----|-------14--------14--14----------19p17p16---------------- +-----18-15-------|------------------------------------------19p18p17------- +-----------------|---------------------------------------------------20p19- +-----------------|--------------------------------------------------------- + + +-------------|------------------------------------------------------------- +-------------|-----------13-17p13----------17-15----------------18p15------ +-------------|--------14----------14----14-------16----------16-------16--- +-------------|-----14----------------14-------------18-15-18--------------- +--p17--------|------------------------------------------------------------- +------20p19--|-17---------------------------------------------------------- + + +------------|----------------12-17p12--------------------12h13p12---------- +--------15--|-17p13-------13----------13-----------12-15----------15p13p12- +-----16-----|-------14-14-----------------14-13-14------------------------- +--18--------|-------------------------------------------------------------- +------------|-------------------------------------------------------------- +------------|-------------------------------------------------------------- + + +------------------|----------------------------------13-10h12-13-12-10-13-- +------------------|-13-12-13-12p10-13p10h12h13p12p10----------------------- +--14p13-----------|-------------------------------------------------------- +--------15-14-12--|-------------------------------------------------------- +------------------|-------------------------------------------------------- +------------------|-------------------------------------------------------- + + +-10h12-13-12-10-|---------------------------------12-8h10-12-10-8-12-8h10-- +----------------|-12-8h10-12-10-8-12-8h10-12-10-8-------------------------- +----------------|---------------------------------------------------------- +----------------|---------------------------------------------------------- +----------------|---------------------------------------------------------- +----------------|---------------------------------------------------------- + + +-12-10----|-----------------------------10-6h8-10-8-6-10-6h8-10-8-6-|------ +-------11-|-10-6h8-10-8-6-10-6h8-10-8-6-----------------------------|-9-5h7 +----------|---------------------------------------------------------|------ +----------|---------------------------------------------------------|------ +----------|---------------------------------------------------------|------ +----------|---------------------------------------------------------|------ + + +--------------------------------------------------------|------------------ +--9-7-5-10-7-9-10-9-7-12-9h10-12-10-9-13-10-12-13-12-10-|-14-10-12-14-12-10 +--------------------------------------------------------|------------------ +--------------------------------------------------------|------------------ +--------------------------------------------------------|------------------ +--------------------------------------------------------|------------------ + + +--------------------12-9-10-12-10-9-13-10-12-13-12-10-|-14-10-12-14-12-10-- +--15-12-14-15-14-12-----------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- + + 1/2 +-16-12-14-16-14-12-17-14-16-17-16-14-1-16-17-19-17-16-|-19b---rb19~--17-19- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- + + +-20-17-19-20-19-17-20-|-17-19-20-19-22bf--rb22--22bf--22bf--22bf----------| +----------------------|---------------------------------------------------| +----------------------|---------------------------------------------------| +----------------------|---------------------------------------------------| +----------------------|---------------------------------------------------| +----------------------|---------------------------------------------------| + + + +Rhythm Fig.1 + +|--------------------------------|----------------------------------------| +|--------------------------------|----------------------------------------| +|--5-----5---4~-------4-------2--|-----5-------7-------7-------2----------| +|--5-----5---5~-------5-------2--|-----5-------5-------5-------3----------| +|-----0-----------0-------0------|-0-------0-------0-------0--------------| +|--------------------------------|----------------------------------------| + + Rhythm Fig.2 +|-----------------------|---------------------------------|---------------- +|-----------------------|--------3-----3-----3------------|---------------- +|--/5-----4~------------|-----2---------------------------|--2-------5----- +|--/5-----5~------------|--0--------0-----0---------------|--2-------5----- +|----------------/5\----|-----------------------2p0-------|--0---0--------- +|-----------------------|------------------------------3--|---------------- + + +---------------------------------|----------------------------------------- +---------------------------------|----------------------------------------- +---4----7----7-------7-------2---|--------------5------7----7---7-------7-- +---5----5----5-------5-------2---|--------------5------5----5---5-------5-- +-----------------0-------0-------|--0---0---0------0----------------0------ +---------------------------------|----------------------------------------- + + +------------|----------------------------|---------------------------------| +------------|------------------------0---|----------3-----3----------------| +---2--------|----------4~--------2-------|------2---------------2----------| +---3--------|---3/5----5~----3-----------|--0----------0-----0-------------| +------------|----------------------------|-------------------------2p0-----| +------------|----------------------------|------------------------------3--| + + +|--------------------------------------------|---------------------------- +|--------------------------------------------|---------------------------- +|--2-------5---4----7----7-------7-------2---|--------------5------7----7- +|--2-------5---5----5----5-------5-------2---|--------------5------5----5- +|--0---0---------------------0-------0-------|--0---0---0------0---------- +|--------------------------------------------|---------------------------- + + +--------------|----------------------------|---------------------------------| +--------------|------------------------0---|----------3-----3----------------| +--7-----7--2--|----------4~--------2-------|------2---------------2----------| +--5-----5--3--|---3/5----5~----3-----------|--0----------0-----0----------0--| +-----0--------|----------------------------|-------------------------2p0-----| +--------------|----------------------------|---------------------------------| + + +Verse repeat Rhythm Fig.2 + +1. Every .. +2. Tomorrow .. + +To be .. +I ... + +A ... +There's .. + +Between .. +Between .. + +It's .. + +Don't .. + + +Interlude + +|-20p17~--------|-----------5-8p5-------8-7-4-------4-10p7--------7-------| +|---------------|-5-------5-------5---5-------6---6--------9----9---------| +|---------------|---5---5-----------5-----------7------------10-----------| +|---------12\---|-----7---------------------------------------------------| +|---------------|---------------------------------------------------------| +|---------------|---------------------------------------------------------| + + +|-8------------8-12p8---------12-13-12-10-----------------------------17---| +|---10----------------10---10-------------13-12-10----12-----------------17| +|------9----9------------9-------------------------13----10\9--------------| +|--------10---------------------------------------------------12p10p9------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|--------------------------------------------------13---------------------| +|-----------13-17p13----------17-15-------------------15----------15------| +|-14-----14----------14----14-------16-13----13-16-------16-13-16---------| +|-----14----------------14----------------15------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|-12--------------12--17p12-------------13p12------------------------------ +|----13---------------------13----13-15-------15p13p12--------------------- +|-------14----14---------------14----------------------14p13--------------- +|----------14------------------------------------------------15p14p12------ +|---------------------------------------------------------------------15p14 +|-------------------------------------------------------------------------- + + +------| +------| +------| +------| +--p12-| +------| + + +Guitar Solo + 1/2 1 1/2 +|--19b---rb19--19b--rb19--17----17-|-------17------17------------17-21b----| +|----------------------------20----|-20bf-----20bf----17h20----------------| +|----------------------------------|------------------------17bf-----------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| + + +|--rb21--17h19-------20~--22bf--|-rb22--20-19-17----18/19-17-------17------ +|--------------17-18------------|----------------20----------20-18----20--- +|-------------------------------|------------------------------------------ +|-------------------------------|------------------------------------------ +|-------------------------------|------------------------------------------ +|-------------------------------|------------------------------------------ + + +--------|----------------------------------------------------17---|-------- +-18p17--|-20-18-17----18-17-------------------------------17----17|h18p17-- +--------|----------19-------19-17-19-17-17-16----------17---------|-------- +--------|-------------------------------------19~---19------------|-------- +--------|---------------------------------------------------------|-------- +--------|---------------------------------------------------------|-------- + + +--------------------------|------------------------------------------------ +---------------17~----18--|-18~--------17--------------------------------20 +--19p17p16----------------|------17h19-----19p17p16h17h19p17p16-------19--- +-----------19-------------|-------------------------------------19-17------ +--------------------------|------------------------------------------------ +--------------------------|------------------------------------------------ + + +-----------|--------------------------------------------------------------- +-----------|--------------------------------------------------------------- +-----------|-17h19p17p16--------------------------------------------------- +--15h17h19-|-------------19----------------------------17------------------ +-----------|----------------20p19p17----------17h19h20-----20p19p17-------- +-----------|-------------------------20p19p17-----------------------20p19h20 + + +----------------|-----------17------------------17h20~--------------------| +----------------|--------17----17------------17---------------------------| +----------------|-----17----------17------17------------------------------| +------------0---|--19------------------19---------------------------------| +--17------------|---------------------------------------------------------| +-----20p19------|---------------------------------------------------------| + + 1/2 1/2 +|-19b----rb19--19b--17-19-19h20p19p17--|-20-19-17----19-17-------17-------- +|--------------------------------------|----------20-------20-18----20-18-- +|--------------------------------------|----------------------------------- +|--------------------------------------|----------------------------------- +|--------------------------------------|----------------------------------- +|--------------------------------------|----------------------------------- + + +----------------------------------------17-|------------------------------- +-17-20-18-17----18-17----------17-18-20----|-20p17-20-18-17----18-17------- +-------------19-------19-17-19-------------|----------------19-------19-17- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- + + +-----------------------------17p12---------|----12------------------------| +--17----------15----------13---------------|-15-----15bf~--------15bf~----| +-----19-17-16----17-16-14-----------14/17--|------------------------------| +-------------------------------------------|------------------------------| +-------------------------------------------|------------------------------| +-------------------------------------------|------------------------------| + + +|--------------------------------------------|----------------------------- +|--15bfp13----15bf-13h15p13----15-13-15-15bf-|-13----15-13-15-13bf--13bf--- +|----------14---------------14---------------|----14----------------------- +|--------------------------------------------|----------------------------- +|--------------------------------------------|----------------------------- +|--------------------------------------------|----------------------------- + + 1/2 +------------------------|--------------------------------------|----------- +--13-13bf--13-13bf--13--|-13bf-13-13bf-13bf--13b--13bf--13-13bf|-rb13------ +------------------------|--------------------------------------|-------14-- +------------------------|--------------------------------------|----------- +------------------------|--------------------------------------|----------- +------------------------|--------------------------------------|----------- + + +----------|----------------------|----------------------------------------| +----------|-15bf--13~------13bf--|-13bf--13bf--13--13bf------8-8----------| +--14--12--|-----------14~--------|-----------------------14------7-9------| +----------|----------------------|----------------------------------------| +----------|----------------------|----------------------------------------| +----------|----------------------|----------------------------------------| + + 1/2 +|-------------------------------------|------------7-----8-----10---------| +|-------------------------------------|------8-10~-----------------9------| +|-7--9-7b--------7--------------------|--7/9----------9-----9-------------| +|-----------10p7---10p7---------------|-----------------------------------| +|-----------------------10p7----------|-----------------------------------| +|----------------------------10-8-5~--|-----------------------------------| + + +|--10---10bf-------rb10----|---15bf~----rb15\---|-------------------------- +|--------------------------|--------------------|-------------------------- +|--------------------------|--------------------|-------------------------- +|--------------------------|--------------------|---0/--------------------- +|--------------------------|--------------------|---0/--------------------- +|--------------------------|--------------------|-------------------------- + + + +Outro Chorus play Rhy Fig 2 with solo fadeout + + + + 1/2 +|-------17-----17--19--19b----|-------------------------------|------------ +|-20bf------------------------|--17~--17~---------------------|------------ +|-----------------------------|--------------17h19--19bf---19p|h21--21w/bar +|-----------------------------|-------------------------------|------------ +|-----------------------------|-------------------------------|------------ +|-----------------------------|-------------------------------|------------ + + +|---------------------------------|---------------------------------------- +|---------------------------------|---------------------------------------- +|--19p17p16h17h19p17p16-----------|---------------------------------------- +|-----------------------19-19-17--|-19p17-19p17-------17------------------- +|---------------------------------|-------------20p19----20p19p17h19p17h19p +|---------------------------------|---------------------------------------- + + +------------------------|-------------------------------------------------- +------------------------|-------------------------------------------------- +------------------------|--fade out---------------------------------------- +----17------------------|-------------------------------------------------- +-17----20p19p17---------|-------------------------------------------------- +-----------------20p19--|-------------------------------------------------- + + +======================================================================= +h = hammeron Judy Letostak +p = pulloff Internet letostak@ix.netcom.com +/\ = slide Fidonet 1:202/762 +x = ghost note MetalNet 666:666/2 +t = tap (right hand) The Music Shop BBS (619)423-4970 24hrs +~ = vibrato +bf = bend full tr = trill +rb = release bend p.s. = pick scrape +dive = dive with bar b = bend / step written over note +======================================================================== +The Music Shop BBS (619)423-4970 24hrs +Guitar Tab, Bass Tab, Lyrics, Sound Files, Pictures, BRE...LORD...FidoNet... +MetalNet...In a band? Want some exposure? I have a file area for bands +will take anything that can be put on a computer...Lyrics, pictures, sound +files, gig ads...email me or call my bbs. It's free, and access is free. + diff --git a/guitar/tabs/Malmsteen/fury.tab b/guitar/tabs/Malmsteen/fury.tab new file mode 100644 index 0000000..7215ea3 --- /dev/null +++ b/guitar/tabs/Malmsteen/fury.tab @@ -0,0 +1,409 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Fury" +from Trilogy +letostak@netcom.com + + +Jet sounds Drums only +|-------------------------|---------------------|--------------------------| +|-------------------------|---------------------|--------------------------| +|-------------------------|---------------------|--------------------------| +|-------------------------|---------------------|--------------------------| +|-------------------------|---------------------|----3--2--------2---------| +|-------------------------|---------------------|----------5--3-----3--2--0| + + +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|----------------2-----3--|-2--5--3--2--------------|----------------2----3| +|-0--3--2--5--3-----5-----|-------------5--3--2--0--|-0--3--2--5--3-----5--| + + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-2--5--3--2--------------|----------------2-----3--|-2--5--3--2------------| +|-------------5--3--2--0--|-0--3--2--5--3-----5-----|-------------5--3--2--0| + + +|-------------------------|------------------------| +|-------------------------|------------------------| +|-------------------------|------------------------| +|-------------------------|------------------------| +|----------------2-----3--|-2--5--3--2-------------| +|-0--3--2--5--3-----5-----|-------------5--3--2--0-| + + +Verse +I now will tell you... + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-0--0--0--0--0--0--0--0--|-0--0--0--0--0--0--0--0--|-0--0--0--0--0--0--0--0| + + +|-------------------------|-------------------|----------------------------| +|-------------------------|-------------------|----------------------------| +|----------------------7--|-------------------|----------------------------| +|----------------------7--|-7-----------------|----------------------------| +|-3--2--------2--------5--|-5--5--5--5--5--5--|-5--5--5--5--5--7--9--------| +|-------5--3-----5--3-----|-------------------|----------------------3-----| + + +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-------------------9---|------------------------| +|----------------------6~-|-6--6--6--6--7--9--7---|------------------------| +|-3--3--3--3--3--3--3-----|-------------------0---|-0--0--0--0--0--0--0--0-| +| | | | +| 1/2 | | | +|------------14br~--------|----12~----------------|(12~)-------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| + + +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|---------------------7| +|-------------------------|-------------------------|---------------------7| +|-------------------------|-------------------------|-3--2--------2-------5| +|-0--0--0--0--0--0--0--0--|-0--0--0--0--0--0--0--0--|-------5--3-----5--3--| +| | | | +| | 1 1/2 | | +|-------------------------|-------------------21b~--|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|----------------------| + + +|-------------------|------------------|-------------------|---------------| +|-------------------|------------------|-------------------|---------------| +|----------------5--|------------------|-------------------|---------------| +|----------------5--|------------------|-------------------|---------------| +|-5--5--5--5--5--3--|-3--3--2----------|-------------------|---------------| +|-------------------|----------3p2--0--|0--0--0--0--0--0--0|0-0-0-0-0-0-0--| +| | | | | +|1 1/2 | | | | +|21b----------------|------------------|-------------------|---------------| +|-------------------|------------------|-------------------|---------------| +|-------------------|------------------|-------------------|-----------7-9-| +|-------------------|------------------|-------------------|---------9-----| +|-------------------|------------------|-------------------|7-9-10-7-2-5-7-| +|-------------------|------------------|-------------------|0-2-3--5-------| + + +Pre-Chorus +repeat 12 times 4x 4x +|t19p12h15p12-||-t19p11h14p11-||-t19p12h15p12--t20p12h15p12|| +|-------------||--------------||---------------------------|| +|-------------||--------------||---------------------------|| +|-------------||--------------||---------------------------|| +|-------------||--------------||---------------------------|| +|-------------||--------------||---------------------------|| + +4x +|-t19p12h14p12-||-t19p11h14p11--t19p11h14p11--t19p11h14p11-14s19-| +|--------------||------------------------------------------------| +|--------------||------------------------------------------------| +|--------------||------------------------------------------------| +|--------------||------------------------------------------------| +|--------------||------------------------------------------------| + + +Chorus + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-2--2--2--2--6--6--6--6| +|-4--4--4--4--4--4--4--4--|-5--5--5--5--3--3--3--3--|-----------------------| + + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-7--7--7--7--5--5--5--5--|-4--4--4--4--4--4--4--4--|-6--6--6--6--4--4--4--4| +|-------------------------|-------------------------|-----------------------| + + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-4--4--4--4--2--2--2--2--|-4--4--4--4--6--6--6--6--|-4--4--4--4--4--4--4--4| +|-------------------------|-------------------------|-----------------------| + + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-2--2--2--2--6--6--6--6--|-7--7--7--7--5--5--5--5| +|-5--5--5--5--3--3--3--3--|-------------------------|-----------------------| + + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-4--4--4--4--6--6--6--6--|-7--7--7--7--6--6--6--6--|-7--7--7--7--9--9--9--9| +|-------------------------|-------------------------|-----------------------| + + +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|-15bf~----------------| +|-------------------------|-------------------------|----------------------| +|-2-----------------------|----------------------2--|----------------------| +|-2-----------------------|-3--2--------2--------2--|----------------------| +|-0-----------------------|-------5--3-----3--2--0--|----------------------| + + +|-15-12-14-15-14-12-19-12-14-15-14-12|17-12-14-15-14-12-19-12-14-15-14-12--| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|-17bf-rb17--|----------17-20-19-17----19-17-----17-17-------|------------- +|------------|-17h19-20-------------20-------20--------20p19p|17-20-19-17p- +|------------|-----------------------------------------------|------------- +|------------|-----------------------------------------------|------------- +|------------|-----------------------------------------------|------------- +|------------|-----------------------------------------------|------------- + + +--------------------------------------------|------------------------------ +16--19p17p16--16h17p16--------16h17p16------|------------------------------ +-----------------------17p16-----------17p16|17-16------------------------- +--------------------------------------------|------19p17-16----17-16s14h16h +--------------------------------------------|---------------19------------- +--------------------------------------------|------------------------------ + + 1 1/2 +----------------------15h17h19p17-19p17-15----15-19br-br--br---------------| +-------------16h17h19----------------------19------------------------------| +----15s16h17---------------------------------------------------------------| +-17------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + echo on +|20p17--------17-------17s14-|---------------------------------------------- +|------19h20-----19p16-------|17p14s16h17-19-17p16-------------------------- +|----------------------------|---------------------17p16s14----------------- +|----------------------------|------------------------------17-16-14s13h14-- +|----------------------------|---------------------------------------------- +|----------------------------|---------------------------------------------- + + Dive Eb with bar 1 1/2 +----------------------------------|----------------------------------------| +----------------------------------|----------------------------------------| +----------------------------------|----------------------------------------| +16-14p13--------------------------|----------------------------------------| +---------15p14p12-----------------|----------------------------------------| +------------------15p14--12p11~---|----------------------------------------| + + +|---------------------|------------------------|---------------------------| +|---------------------|------------------------|---------------------------| +|4--------------------|----------------5----4--|---------------------------| +|4--------------------|----------------5----4--|---------------------------| +|2--2--2--2--2--2--2--|-2--2--2--2--2--3----2--|--2--2--2--2--2--2---------| +|---------------------|------------------------|---------------------------| + + +|-------------------------|----------------------|-------------------------| +|-------------------------|----------------------|-------------------------| +|-------------------------|----------------------|-------------------------| +|-7--6--4-----6-----------|----------------------|-------------------------| +|----------7-----7--6--4~-|--4--4--4--4--4--4--4-|-4--4--4--4--4--4--4--4--| +|-------------------------|----------------------|-------------------------| +| | | | +| | | | +|-------------9s----------|-21-------------------|---------12-------12-14--| +|-------------------------|------------14~-------|---14-16----14-16--------| +|-------------------------|----------------------|-x-----------------------| +|-------------------------|----------------------|x------------------------| +|-------------------------|----------------------|-------------------------| +|-------------------------|----------------------|-------------------------| + + +Solo + +|-16p14p12-16s17p16p14-16-14-------14-|------------------------------------| +|----------------------------17-16----|-17-16-14-17p16p14s13-16-14-13-14~--| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| + + 1/2 1/2 +|---------16-21----------18----------------------|-------------------------| +|17----17-------17-21p17----17-21-19p17----17----|---------------------14--| +|---18----------------------------------20----20b|--20b-------------13-----| +|------------------------------------------------|---------------14--------| +|------------------------------------------------|------------16-----------| +|------------------------------------------------|-------------------------| + + +|16p12----16~--12----------|--------------|---16-21-16----------------17-19- +|------14---------14-12bfr-|--9-----------|------------17----17-19-21------- +|--------------------------|-----11bf~----|18-------------18---------------- +|--------------------------|--------------|--------------------------------- +|--------------------------|--------------|--------------------------------- +|--------------------------|--------------|--------------------------------- + + 1 1/2 1/2 +21-----|-------17-19-21b~--|-(21b~)---|-21bf----21bf~--|--------------------| +---17--|-19-21-------------|----------|----------------|16br~--14-17-16-14--| +-------|-------------------|----------|----------------|--------------------| +-------|-------------------|----------|----------------|------------------16| +-------|-------------------|----------|----------------|--------------------| +-------|-------------------|----------|----------------|--------------------| + + +|------------12--|17p16p14s13------------------------------|---------------- +|16-14-----------|------------16-14-13---------------------|---------------- +|------16bfr-----|---------------------16-14-13------------|---------------- +|----------------|------------------------------16-14-13-16|------------13h- +|----------------|-----------------------------------------|15h16p15h16----- +|----------------|-----------------------------------------|---------------- + + +----------------------------------|----------|-12-14-15-12-14-15s17-14-15--| +---------------------13h14p13h14--|-15bf~----|-----------------------------| +---------13h14p13h14--------------|----------|-----------------------------| +14p13h14--------------------------|----------|-----------------------------| +----------------------------------|----------|-----------------------------| +----------------------------------|----------|-----------------------------| + + 1 1/2 bend up 2 wide vibrato +|17s19-15-17-19s20-17-19-20-20b---|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| + + +Out Chorus +No, it's burning like a flame... + +|19~-------|20--19--17------|-----17--|-19--17--15------|------------15~---| +|----------|------------20--|-19------|-------------19--|-17~--------------| +|----------|----------------|---------|-----------------|------------------| +|----------|----------------|---------|-----------------|------------------| +|----------|----------------|---------|-----------------|------------------| +|----------|----------------|---------|-----------------|------------------| + + dive w/bar +|17--15h17p15s14------|---------------|---------------|---------------19~--| +|----------------17---|-17~----16~----|-17~----19~----|-17-----------------| +|---------------------|---------------|---------------|--------------------| +|---------------------|---------------|---------------|--------------------| +|---------------------|---------------|---------------|--------------------| +|---------------------|---------------|---------------|--------------------| + + +|20--19--17------|---------17~----|-19--17--15------|------------15~-------| +|------------20--|19~-------------|-------------19--|-17~------------------| +|----------------|----------------|-----------------|----------------------| +|----------------|----------------|-----------------|----------------------| +|----------------|----------------|-----------------|----------------------| +|----------------|----------------|-----------------|----------------------| + + dive w/bar +|-17--15h17p15s14-------|----------------|---------------------------------| +|-------------------17--|-17~----p16~----|-h17~---17bf----17---------------| +|-----------------------|----------------|---------------------------------| +|-----------------------|----------------|---------------------------------| +|-----------------------|----------------|---------------------------------| +|-----------------------|----------------|---------------------------------| + + by the fu - ry... +|-----------------|--------------------|-----------------|--------(12)s17~-| +|17~-------16~----|-17~--------s19~----|-20~------19~----|--20~------------| +|-----------------|--------------------|-----------------|-----------------| +|-----------------|--------------------|-----------------|-----------------| +|-----------------|--------------------|-----------------|-----------------| +|-----------------|--------------------|-----------------|-----------------| + + +|17bf--17bfr--15-17h19p17p15----15h17-19h20p19|p17-------17----------------- +|----------------------------19---------------|----20-20----20-19-17-15-19p- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- + + 1/2 1/2 +-------------14br--|p12-10------------------------------|------------------- +17p15-17bf~--------|-------12-11-10s8---8-7-------------|------------5------ +-------------------|------------------9-----9--7--5--4--|-4b~--4s5h7----7--- +-------------------|------------------------------------|------------------- +-------------------|------------------------------------|------------------- +-------------------|------------------------------------|------------------- + + +------5-----7h8p7p5--------8s10p8-7--------10s12p10p8---------12s14p12p10--- +5h7h8---7-8---------7--8p5----------10p8p7------------12p10p8--------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + 1/2 +---------10-|-14br--12--------------------------|------11h14-17p14p11------- +13p12h13----|----------15-13-12-14-12-11-12bf~--|12s13-----------------13--- +------------|-----------------------------------|--------------------------- +------------|-----------------------------------|--------------------------- +------------|-----------------------------------|--------------------------- +------------|-----------------------------------|--------------------------- + + +17p11h14p11----17p11h14p11----17p14p11-----|-14s20bfr--19-20-17-20-15-20---- +------------13-------------13----------13--|-----------------------------19- +-------------------------------------------|-------------------------------- +-------------------------------------------|-------------------------------- +-------------------------------------------|-------------------------------- +-------------------------------------------|-------------------------------- + + +20-----20------------15--19h20p19p17-----------21bf~--| +---17--------------------------------20-19-17---------| +-----------16h17h19-----------------------------------| +------------------------------------------------------| +------------------------------------------------------| +------------------------------------------------------| + + +|--------------------------| +|----------------------5---| +|----------------------4---| +|----------------------2---| +|-3--2--------2--------2---| +|-------5--3-----3--2--0---| + + + diff --git a/guitar/tabs/Malmsteen/golden_dawn.tab b/guitar/tabs/Malmsteen/golden_dawn.tab new file mode 100644 index 0000000..8665d84 --- /dev/null +++ b/guitar/tabs/Malmsteen/golden_dawn.tab @@ -0,0 +1,265 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen - Golden Dawn +from Fire and Ice +Judy Letostak (letostak@ix.netcom.com) +tune down 1/2 step + + + + +|----------7-------|------------------|--------------|--------------------| +|--8---10----------|--10-----8--7-----|--------------|--------------------| +|--9---------------|------------------|--9-----------|----7---------------| +|--9---------------|------------------|--------------|--------------------| +|--7---------------|------------------|--------------|--------------------| +|------------------|------------------|--------------|--------------------| +| | | | | +| | | | | +|--0----2---3------|---2-----0--------|------0-------|--------------------| +|--0---------------|---3--------3-----|---------0----|-----3--------------| +|--0---------------|---2-----------0--|----0---------|-----0--------------| +|--2---------------|---0--------------|--2-----------|-----0--------------| +|--2---------------|------------------|3-------------|-----2--------------| +|--0---------------|------------------|--------------|--------------------| + + +|---------------|-----------------------|-------------------|--------------| +|-1-----0-------|--0h1---0--------------|-------------------|--------------| +|----------2----|------------2----------|--2----------------|--------------| +|---------------|-----------------------|-------------------|--------------| +|---------------|-----------------------|-------------------|--------------| +|---------------|-----------------------|-------------------|--------------| +| | | | | +| | | | | +|---------------|-----------------------|----------2--------|----------0---| +|-1-----0-------|-----1p0---------------|-------------3-----|-------1-----1| +|----------2----|----------2------------|-------2--------2--|----2---------| +|-0-----------2-|-------------2---------|----0--------------|-3------------| +|---------------|-----------------------|-------------------|--------------| +|---------------|--3--------------3-----|-2-----------------|--------------| + + +|-----------7---|------------------|-----------------|--------------------| +|--8----10------|--10-----8--7-----|-----------------|--------------------| +|---------------|------------------|---9-------------|--7-----------------| +|---------------|------------------|-----------------|--------------------| +|---------------|------------------|-----------------|--------------------| +|---------------|------------------|-----------------|--------------------| +| | | | | +| | | | | +|--0-----2--3---|---2-----0--------|---------0-------|--------------------| +|--0------------|---3--------3-----|------------0----|---3----------------| +|--0------------|---2-----------0--|-------0---------|---0----------------| +|--2------------|---0--------------|----2------------|---0----------------| +|--2------------|------------------|-3---------------|---2----------------| +|--0------------|------------------|-----------------|--------------------| + + +|-------------------|----------6---------|-7---------------|--------------| +|-------------------|----5--8-----8--5---|------7--5h7p5---|--4-----------| +|--5p4---5----------|-6------------------|-----------------|--------------| +|-------------------|--------------------|-----------------|--------------| +|-------------------|--------------------|-----------------|--------------| +|-------------------|--------------------|-----------------|--------------| +| | | | | +| | | | | +|-------------------|--------------------|-----------------|---7----------| +|-1------0----------|-------5--8---------|----------7------|---7----------| +|-----------2-------|----6--------6------|-------9---------|---8----------| +|-0------------2----|-8--------------8---|----9------------|---9----------| +|-------------------|--------------------|-----------------|---9----------| +|-------------------|--------------------|-7---------------|---7----------| + + +|--------------------|--------------------|-------5--8--------------------| +|--------------------|--------------------|-------------------------------| +|--------------------|-------4--------4---|-5-----------------------------| +|--------------------|-3--6-----3--6------|----7--------------------------| +|-------5-----2--5---|--------------------|-------------------------------| +|----------4---------|--------------------|-------------------------------| +| | | | +| | | | +|-------------7------|-------------7------|-------------5-----------------| +|----------------6---|----------6-----6---|----------5-----5--------------| +|-------7------------|-------7------------|-------5-----------------------| +|----6-----6---------|--------------------|----7--------------------------| +|--------------------|--------------------|-0-----------------------------| +|-0------------------|--------------------|-------------------------------| + + +|-12--13--12---------|---------8--11--8------|----------------------------| +|--------------------|-----10----------------|-10-------------------------| +|--------------------|-11----------------11--|-----11--8--11------8-------| +|--------------------|-----------------------|----------------10----------| +|--------------------|-----------------------|----------------------------| +|--------------------|-----------------------|----------------------------| +| | | | +| | | | +|-------------5------|------------------8----|-----------------4----------| +|---------5-------5--|--------------7------7-|-------------4-------4------| +|--------------------|----------8------------|---------5------------------| +|-----7--------------|------7----------------|-----7----------------------| +|-0------------------|--0--------------------|-0--------------------------| +|--------------------|-----------------------|----------------------------| + + +|--------------------|-------------------|---12--13------10--13-----------| +|--------------------|-------------------|--------------------------------| +|--------------------|-------------------|--------------------------------| +|-7-----9--------7---|-6--7--9-----------|--------------------------------| +|--------------------|-------------------|--------------------------------| +|--------------------|-------------------|--------------------------------| +| | | | +| | | | +|-------------0------|-------------0-----|------------------7-------------| +|----------0-----0---|----------0-----0--|---------------------6----------| +|-------2------------|-------1-----------|-------7------------------------| +|----2---------------|----2--------------|----6---------------------------| +|--------------------|-------------------|--------------------------------| +|-0------------------|-0-----------------|-0------------------------------| + + +|-----13------13------13--|-12--------------------|-----------------------| +|-13------12------10------|---------13----12------|-13-----10-------------| +|-------------------------|-----13------------13--|-----------------------| +|-------------------------|-----------------------|-----------------------| +|-------------------------|-----------------------|-----------------------| +|-------------------------|-----------------------|-----------------------| +| | | | +| | | | +|------------------4------|-------------5---------|-------------5---------| +|-------------------------|----------5-----5------|----------5-----5------| +|----------7--------------|-------5---------------|-------5---------------| +|------6------------------|----7------------------|----7------------------| +|-------------------------|-0---------------------|-0---------------------| +|--0----------------------|-----------------------|-----------------------| + + +|------------8--8----|------------------|-----------------|----------------| +|---------7----------|-10p7-------------|-----------------|-----8--8--5----| +|------8-------------|-------8p5--------|-----------------|---6---------6--| +|--------------------|------------7-----|-9---------------|-8--------------| +|--------------------|------------------|-----------------|----------------| +|--------------------|------------------|-----------------|----------------| +| | | | | +| | | | | +|-------------8------|-------------4----|-------------0---|-----3----------| +|----------7-----7---|----------4-----4-|----------0-----0|----------5-----| +|-------8------------|-------5----------|-------2---------|---3------------| +|----7---------------|----7-------------|----2------------|-5------5----5--| +|-0------------------|-0----------------|-----------------|----------------| +|--------------------|------------------|-0---------------|----------------| + + +Ending 1 + +|-------------------------------|----7------------------------------------| +|---10/12-----------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| +| | | +| | | +|-------------7-----------------|-----7-----------------------------------| +|----------7-----7--------------|-----7-----------------------------------| +|-------9-----------------------|-----8-----------------------------------| +|----9--------------------------|-----9-----------------------------------| +|-------------------------------|-----9-----------------------------------| +|-7-----------------------------|-----7-----------------------------------| + + +Ending 2 + +|-------------------| +|--1------0---------| +|------------2------| +|-------------------| +|-------------------| +|-------------------| +| | +| | +|-------------------| +|--1------0---------| +|--2---------2------| +|--2----------------| +|--0----------------| +|-------------------| + + +|------------------|---------------------|--------------------------------| +|-1----0-----------|--1------0-----------|--------------------------------| +|-----------2------|-------------2-------|--2-----------------------------| +|------------------|---------------------|--------------------------------| +|------------------|---------------------|--------------------------------| +|------------------|---------------------|--------------------------------| +| | | | +| | | | +|------------------|---------------------|--------------------------------| +|----1p0-----------|-----1p0-------------|--------------------------------| +|-----------2------|--------------2------|--------------------------------| +|---------------0--|-----------------0---|--------------------------------| +|------------------|---------------------|--------------------------------| +|-3----------------|-2-------------------|--1----3-----3/5----------------| + + +Free Time + +|---------------------------------------------10------8-------------------- +|-----------------10-10-12-12---------------------------------------------- +|---------9-11-12-------------11-11-12-12---------------------------------- +|------9-----------------------------------12----/10----9-10-10-7-7-9------ +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- +| +| +|-------------------------------------------------------------------------- +|----------------------------0-----------0-----------0-----------------0--- +|----------------0--------0--------0-----------0-----------0-----0--------- +|-------4-----4-----4--4--------4-----0-----4-----4-----4-----4-----4------ +|----2-----2--------------------------------------------------------------- +|-0------------------------------------------------------------------------ + + +----3-5p3-5-3p0-2h3p2-0-----|| +--5-------------------------|| +4---------------------------|| +----------------------------|| +----------------------------|| +----------------------------|| + || + || +--0-------------------------|| +----------------------------|| +----------------------------|| +----------------------------|| +----------------------------|| +------3---------------------|| + +======================================================================= +h = hammeron Judy Letostak +p = pulloff Internet letostak@ix.netcom.com +/\ = slide Fidonet 1:202/762 +x = ghost note MetalNet 666:666/2 +t = tap (right hand) The Music Shop BBS (619)423-4970 24hrs +~ = vibrato +bf = bend full +rb = release bend +dive = dive with bar + +======================================================================== +The Music Shop BBS (619)423-4970 +Guitar Tab, Bass Tab, Sound files, Guitar Lessons, Lyrics, Music programs +Sound players, pictures, graphic viewers... +...LORD...BRE...Fidonet...MetalNet... +In a band? I have a file area for bands, send me your lyrics, pictures, +biographies...Anything, all styles of music welcome, any location. I have +access to a color scanner, send sase to get the picture back. Email me +for my snail mail address. Can be sent via email or FidoNet pictures can +be decoded, please use pkzip (2.04g) for sound files, these can be encoded +also. + + diff --git a/guitar/tabs/Malmsteen/how_many_miles_to_babylon.tab b/guitar/tabs/Malmsteen/how_many_miles_to_babylon.tab new file mode 100644 index 0000000..3124f6c --- /dev/null +++ b/guitar/tabs/Malmsteen/how_many_miles_to_babylon.tab @@ -0,0 +1,478 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) +Subject: TAB Yngwie Malmsteen "How Many Miles To Babylon" + +Yngwie Malmsteen "How Many Miles to Babylon" +from Fire and Ice +letostak@netcom.com Judy Letostak +tune down 1/2 step + +fig 1 +|-----------0----------------------------------|---------------------------| +|--------0-----0-----------0-------------------|---------------------------| +|-----0-----------2----------------------------|-------------%-------------| +|--------------------4--2-----1----------------|---------------------------| +|--------------------------------3--2--0-------|---------------------------| +|--0--------------------------------------2--0-|---------------------------| + + 1/2 +|------------------------------------------------|-------------------------| +|------------------------------------------------|-------------------------| +|--16~---------------14---12~--------------------|-------------------------| +|----------------16------------13--16------------|--16b--rb16-14~----------| +|------------------------------------------------|-------------------------| +|------------------------------------------------|-------------------------| +| | | +| | | +|-----------0------------------------------------|-------------------------| +|--------0-----0-----------0---------------------|-------------------------| +|----0------------2------------------------------|-----------%-------------| +|--------------------4--2-----1------------------|-------------------------| +|--------------------------------3--2--0---------|-------------------------| +|-0---------------------------------------2--0---|-------------------------| + + + 1/2 +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|-14/16---------14---12~-------------|-------------------------------------| +|----------16----------------13-16---|--16b---rb16--14~--------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +| | | +| | | +|------------------------------------|-------------------------------------| +|------------------------------------|-----------------------0--------0----| +|--------------%---------------------|-------0-------0-----0--------0------| +|------------------------------------|-----2-------2-----2--------2--------| +|------------------------------------|---2-------2--------------2----------| +|------------------------------------|-0-------2-------3-------------------| + + +|-----------------------------------|--------------------------------------| +|-10h13-----12--10~-----------10----|--10h12~-----15-----/17~--------------| +|-----------------------12----------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +| | | +| | | +|-----------0-----------------------|-----------------2------------0-------| +|-------0-1---1----------3----------|--------0-------------------0---------| +|-----2----------------2-----2------|------0--------2----------0-----0-----| +|---2----------------0-----0---0----|----0--------0----------4---------2p0-| +|-0---------------------------------|----------------------2---------------| +|----------------3-2-------------2--|--3--------2--------0-----------------| + + +|----------------------------------------------|--------------------------- +|---13~------------13h15------------14---------|--17/19----17h19p17-16-17-- +|---------------------------14-----------------|--------------------------- +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +| | +| | +|----------0---------------------0----------3--|-------3-2----------------- +|-------------1--------------------------2-----|-----5-------5---4---4---4- +|-------0--------0-------------2-------3-------|---4-------4-------4---4--- +|----2-----------------------2------2----------|-4-------------4----------- +|-3-----------------3--2--0--------------------|--------------------------- +|----------------------------------------------|--------------------------- + + +-----------------------|---------------------------------------------------| +--16-------------------|-17~-----------15----------------------------------| +------17-16p14-12h14---|------------------------17--16--14~----------------| +-----------------------|-----------------------------------------16--------| +-----------------------|---------------------------------------------------| +-----------------------|---------------------------------------------------| + | | + | | +-----------------------|----------0-----------------------0----------------| +-----4-----------------|-------------1--------------------------0----------| +--------4--------------|-------0--------0--------------2--------------4----| +--4--------------------|----2-----------------------2--------------4-------| +-----------------------|-3-----------------3--2--0-----------2-------------| +-----------------------|---------------------------------------------------| + + +|------------------------------------------------------| +|------------12---12h13-----12tr13~--------------------| +|--12--14----------------------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| +| | +| | +|------------------0-----------------------------------| +|----------0----------0--------0-----------0-----------| +|------------------------0--------0-----0-----0--------| +|-------4----------------------------2-----------------| +|----2-------------------------------------------2-----| +|-0------------2------------3--------------------------| + + +|--------------------------------------------------|-----------------------| +|--15/17-----------14------------------------------|-----------------------| +|-----------------------17--16---14~---------------|-12-14-12--------------| +|-----------------------------------------16-------|----------16p14~--\9---| +|--------------------------------------------------|-----------------------| +|--------------------------------------------------|-----------------------| +| | | +| | | +|-----------0-----------------------0--------------|-----------------------| +|--------------1-----------------------------------|--0--------------------| +|--------0--------0--------------2------------4----|--0--------------------| +|-----2-----------------------2------------4----4--|--2--------------------| +|--3-----------------3--2--0------------2----------|--2--------------------| +|--------------------------------------------------|--0--------------------| + + 1/2 +|----------------------------|------------------------------|--------------- +|----------------------------|------------------------------|--------------- +|-16~------------------------|------------------------12-14-|-14/16--------- +|------16-16h19-17~--13--16--|-16b--rb16p14~-------14-------|-------16------ +|----------------------------|------------------------------|--------------- +|----------------------------|------------------------------|--------------- + + 1/2 +---------------------|------------------------------------------------------ +---------------------|---------------------12----12-------------12---------- +---------------------|------------------12----12----12-11h12h14----14bf----- +--16h19-17~--13--16--|-16b--rb16p14--14------------------------------------- +---------------------|------------------------------------------------------ +---------------------|------------------------------------------------------ + + +---------------|------------------|-------------------|---------------------| +---------------|------------------|----------15---h17-|-15\13--13h15--------| +--rb14--14bf~--|-17p16p14\12--14--|--14h16~-----------|--------------14~-12-| +---------------|------------------|-------------------|---------------------| +---------------|------------------|-------------------|---------------------| +---------------|------------------|-------------------|---------------------| + + +|-14h15p14----14-----------------------------------|------------------------| +|----------17------17-16-17--p16-------------------|-15bf--15-13-12---------| +|--------------------------------17-16-14--14h16~--|----------------14~-----| +|--------------------------------------------------|--------------------16--| +|--------------------------------------------------|------------------------| +|--------------------------------------------------|------------------------| + + 1/2 +|-----------------|---------------------------------|-15h17p15p14----------| +|-----------------|-15bf~--rb15-13h15p13\12---------|--------------17~-----| +|-12-14-16b--16~--|-------------------------14------|----------------------| +|-----------------|-----------------------------16--|----------------------| +|-----------------|---------------------------------|----------------------| +|-----------------|---------------------------------|----------------------| + + +|--3h5p3p2--3~--|------2--3~----------------------7h20p7p5-----------------| +|---------------|---5------------------------------------------------------| +|---------------|----------------------------------------------------------| +|---------------|----------------------------------------------------------| +|---------------|----------------------------------------------------------| +|---------------|----------------------------------------------------------| + + +|-19~--19--17h19p17\15h17p15\14h13p14\12h14p12\11h12p11\8h11p8\7h8p7|\5h7~--| +|-------------------------------------------------------------------|-------| +|-------------------------------------------------------------------|-------| +|-------------------------------------------------------------------|-------| +|-------------------------------------------------------------------|-------| +|-------------------------------------------------------------------|-------| + + fig 2 +|---------------|----------------|-----------------------------------------| +|---------------|----------------|-----------------------------------------| +|---------------|----------------|----9--9--------9--9----------9~---------| +|---------------|----------------|-----------------------------------------| +|--2------------|----------------|-----------------------0--0--------------| +|--0---0--------|----------------|-0--------0--0---------------------------| + + +|-------------------|-----------------------|------------------------------| +|-------------------|-----------------------|------------------------------| +|------------9--9~--|-----------------------|------------------------------| +|--11---------------|-----------------------|---------------------7--9-----| +|-------------------|-----------------------|---------------------5--7-----| +|------0--0---------|-----------------------|------------------------------| + + +||-----------------------------|-------------------|-----------------------| +||-----------------------------|-------------------|-----------------------| +||-------9--9-----9--9-----9~--|------------9--9~--|-----------------------| +||--(9)------------------------|--11---------------|-----------------------| +||--(7)------------------------|-------------------|-----------------------| +||-------------0--------0------|------0--0---------|-----------------------| + + +end 1 end 2 end 3 + +|---------------|-------------------|---------------------|----------------| +|---------------|-------------------|---------------------|----------------| +|---------------|-------------------|---------------------|----------------| +|----7--9-------|----------7----9---|---------------------|------9---------| +|----5--7-------|----------5----7---|---------------------|------7---------| +|---------------|-------------------|---------------------|------0---------| + + +|---------------|-------------|----------------| +|---------------|-------------|----------------| +|---------------|-------------|----------------| +|---------------|------9--9---|----------7-----| +|---------------|------7--7---|----------7-----| +|---------------|--0----------|----------------| + + +Verse +1. In .. +2. In .. + +|-------------------|-------------------|------------------|-----------------| +|-------------------|-------------------|------------------|-----------------| +|-------------------|-------------------|------------------|-----------------| +|-9--10--7--10--9---|-------10--7--10---|-9--10--10~---9~--|10-7-10----10---7| +|-7--7---7--7---7---|-------7---7--7----|-7--7---7---------|--------10----9-7| +|-------------------|-0--0--------------|------------------|-----------------| + +there .. +there .. +|-------------------|---------------------|--------------------------------| +|-------------------|---------------------|--------------------------------| +|-------------------|---------------------|--------------------------------| +|-9--10--7--10--9---|------10--7--10~-----|--9--10--10----------2----------| +|-7--7---7--7---7---|------7---7--7~------|--7--7---7-----5-----3----------| +|-------------------|-0--0----------------|--------------------------------| + +There .. +Ships .. + +|----------------------|------------------|--------------------------------| +|----------------------|------------------|--------------------------------| +|----------------------|------------------|--------------------------------| +|-4--5--7--5h7p5\4-----|-9--10--7--10--9--|--------10--7--10---------------| +|-------5-----------5--|-7--7---7--7---7--|---------7--7--7----------------| +|----------------------|------------------|--0--0--------------------------| + +Day ... +without .. + +|------------------|-----------------|------------------|---------------------| +|------------------|-----------------|------------------|---------------------| +|------------------|-----------------|------------------|---------------------| +|-9--10--10~---9~--|10-7-10----10---7|-9--10--7--10--9--|------10--7--10~-----| +|-7--7---7---------|--------10----9-7|-7--7---7--7---7--|------7---7--7~------| +|------------------|-----------------|------------------|-0--0----------------| + +antidotes +from ... + +|---------------------------|----------------------| +|---------------------------|----------------------| +|---------------------------|----------------------| +|--9--10--10----------2-----|-4--5--7--5h7p5\4-----| +|--7--7---7-----5-----3-----|-------5-----------5--| +|---------------------------|----------------------| + + +Pre-chorus +Eternal .. + +|-------------------------|---------------------|--------------------------| +|-------------------------|---------------------|--------------------------| +|------2---2----2--2------|--------0--0--0--0---|--2--2--------0--0--------| +|------0---0----2--2------|--3--3--2--2--0--0---|--0--0--2--2--0--0--------| +|--0------------0--0------|--3--3--3--3---------|--------0--0--------3-----| +|------1---1--------------|--1--1--------3--3---|--1--1--------3--3--1-----| + + +man's ... + +|-----------------|----------------------------|---------------------------| +|------------0----|----------------------------|---------------------------| +|--0----0----0----|---2--2---------------------|-------0--0----0--0--------| +|--2----0----0----|---0--0---2-----------------|-3--3--2--2----0--0--------| +|--3--------------|----------0---0-dive-w/bar--|-3--3--3--3----------------| +|-------3----3----|---1--1---------------------|-1--1----------3--3--------| + +For .. + +|--------------------------|-----------------------|-----------------------| +|--------------------------|-----------------------|-----------------------| +|--2--2--------0--0--------|-----0---0---0----4----|------4~---------------| +|--0--0--2--2--0--0--------|-----2---0---0---------|-----------------------| +|--------0--0--------3-----|-----3-----------------|------6~---------------| +|--1--1--------3--3--1-----|---------3---3---------|-----------------------| + +dance .. + +|------------------|-------------------|-----------------------| +|------------------|-------------------|-----------------------| +|-----0----0---4---|-------------------|------4~---------------| +|-----2----0-------|-------------------|-----------------------| +|--3--3------------|-------------------|------6~---------------| +|--1-------3-------|-------------------|-----------------------| + +Chorus play fig 2 +How .. +How ... + +Solo + +|------------------------------------------------|-------------------------- +|-10-13-12-13-10-13-12-13-9-12-10-12-9-12-10-12--|-8-12-10-12-8-12-10-12-7-10 +|------------------------------------------------|-------------------------- +|------------------------------------------------|-------------------------- +|------------------------------------------------|-------------------------- +|------------------------------------------------|-------------------------- + + ---8x---- +-----------------|---------------------|-8h12p8--t17p8h12p8--t16p7h10p7/22-| +--8-10-7-10-8-10-|-6-10-8-10-6-10-8-10-|-----------------------------------| +-----------------|---------------------|-----------------------------------| +-----------------|---------------------|-----------------------------------| +-----------------|---------------------|-----------------------------------| +-----------------|---------------------|-----------------------------------| + + +|-12~--13p12p10----------12h13p12----------------------------|-------------- +|---------------13p12p10----------13p12p10\9-----------------|-------------- +|--------------------------------------------12p10p9---------|-------------- +|----------------------------------------------------12p10p9/|15-14h15h17--- +|------------------------------------------------------------|-------------- +|------------------------------------------------------------|-------------- + + +-------------------13-15-17bf--t18bfp15-|-20bf~--15/17--|-17-18-15-18----18- +----------14h15-17----------------------|---------------|-------------18---- +-14h15h17-------------------------------|---------------|------------------- +----------------------------------------|---------------|------------------- +----------------------------------------|---------------|------------------- +----------------------------------------|---------------|------------------- + + +----18----18--------------|-13h17p13------13p10----------------------------| +-17----15----14h17p14h15--|----------15------------------------------------| +--------------------------|-------------x-------10----9h10h12p10p9---------| +--------------------------|------------------------12--------------12bf----| +--------------------------|---------------------------------------------12-| +--------------------------|------------------------------------------------| + + 1/2 +|----------------12-17~--------12b-----rb12-|-10---------------------------| +|-------------13-------------------x--------|-----13p12--10\9--------------| +|----------14-------------------------------|-------------------12---------| +|----10-14----------------------------------|------------------------------| +|-12----------------------------------------|------------------------------| +|-------------------------------------------|------------------------------| + + +|------------------------------------------8h10h12--p10p9\7h10-------------| +|----------------------------------9h10h12---------------------------------| +|-10p9---------------------9h10h12-----------------------------------------| +|-------12p10p9----9h10h12-------------------------------------------------| +|---------------12---------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|-p8p7--h8p7--------|-12p17------17p14-------14p11------11\8-------13------- +|------------10~\9--|-------19-x-------16----------13--------10-------13p12- +|-------------------|---------------------17----------13--------10---------- +|-------------------|------------------------------------------------------- +|-------------------|------------------------------------------------------- +|-------------------|------------------------------------------------------- + + +-------|------------19-19-17-19\---------22-19-17-19\-|--------------------- +--p10--|-12~--10-12/------------12-10-12/-------------|12h13p12p0----5------ +-------|----------------------------------------------|--------------------- +-------|----------------------------------------------|--------------------- +-------|----------------------------------------------|--------------------- +-------|----------------------------------------------|--------------------- + + +--2h3p2------|------2h3p2----------2h3p2---------2h|3p2--------2h3p2-------- +----------0h1|p0-----------4p1p0----------4p1p0----|----4p1p0--------4p1p0-- +-------------|-------------------------------------|------------------------ +-------------|-------------------------------------|------------------------ +-------------|-------------------------------------|------------------------ +-------------|-------------------------------------|------------------------ + + +-2h3p2--------2h3p2---------2h3p2p0--7~--|-----5-8/11p8----11-/14p11-------- +-------4p1p0---------4p1p0---------------|-5-7----------10------------13---- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- +-----------------------------------------|---------------------------------- + + +-11h14p11--15p12-12\10-|-t15p12h14p12p11-t15p12-t15p14p12p11-t15p14p12p11--- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- + + +-t17p14p12-12/19--19~---|------19~-------|--17p13h17p13h17-t20p13h17p13----- +------------------------|----------------|---------------------------------- +------------------------|----------------|---------------------------------- +------------------------|----------------|---------------------------------- +------------------------|----------------|---------------------------------- +------------------------|----------------|---------------------------------- + + +-t20p13h17p13-t20p13h17p13-t20p17p13h17p13-t20p17p13\10-|-t17p14-t17p14p10-- +--------------------------------------------------------|------------------- +--------------------------------------------------------|------------------- +--------------------------------------------------------|------------------- +--------------------------------------------------------|------------------- +--------------------------------------------------------|------------------- + + +-----------10h14/17p14---------|-----12h13-10h12p10------------------------- +--------10-------------15------|9/10---------------------------------------- +--14/11-------------------14~--|--------------------14p12h14p12\10h12p10-9-- +-------------------------------|-------------------------------------------- +-------------------------------|-------------------------------------------- +-------------------------------|-------------------------------------------- + + +-------------10---------|----------------------------|---------------------| +----------10-----13bf---|----------------------------|---------------------| +--10--------------------|-12-12-12-12-12-12-12-12~---|-12------12-12-12----| +------12----------------|-14-14-14-14-14-14-14-11~---|-11--11--11-11-11----| +------------------------|----------------------------|---------------------| +------------------------|----------------------------|---------------------| + + +|--8--10--12--10--8h10p8-7------|----------------| +|---------------------------10--|-----12~-w/bar--| +|-------------------------------|----------------| +|-------------------------------|-5--------------| +|-------------------------------|----------------| +|-------------------------------|----------------| + + +chorus +end on E5 + + +========================================================================== +h = hammeron x = ghost note +p = pulloff % = repeat last bar +/\ = slide up/down p.s. = pickscrape +~ = vibrato dive = dive with bar +t = tap +=========================================================================== +/---------------------------------\ +|The Music Shop BBS (619)423-4970 | +\---------------------------------/ + diff --git a/guitar/tabs/Malmsteen/i_am_a_viking.tab b/guitar/tabs/Malmsteen/i_am_a_viking.tab new file mode 100644 index 0000000..46a770e --- /dev/null +++ b/guitar/tabs/Malmsteen/i_am_a_viking.tab @@ -0,0 +1,541 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## + +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "I am a Viking" +from Marching Out +Tune down one half step (for all Yngwie songs that I have posted also) +Feel free to e-mail me if you have any questions or comments or requests +...Have a blast +letostak@netcom.com + +Intro +|--------------------------------------------------| +|--------------------------------------------------| +|--------------------------------------------------| +|-----------------5--4h5p4-----4--7--5h7p5--4------| +|----7--6--7~---------------7------------------5---| +|-0------------0-----------------------------------| +| | +| | +|--------------------------------------------------| +|--------------------------------------------------| +|-----------------4--2h4p2-----2--5--4------2------| +|----5--4--5~---------------5------------------4---| +|--------------------------------------------------| +|-0------------0-----------------------------------| + + +|--------------------------------------------------------| +|--------------------------------------------------------| +|-----------------5--4h5p4--------4----------------------| +|---------------------------7--5-----7--5--4--7--5--4----| +|----7--6--7~------------------------------------------5-| +|-0------------0-----------------------------------------| +| | +| | +|--------------------------------------------------------| +|-----------------5--3h5p3--------3----------------------| +|---------------------------5--4-----5--4--2--5--4--2----| +|----5--4--5~------------------------------------------4-| +|--------------------------------------------------------| +|-0------------0-----------------------------------------| + + +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| +|-----------------5--4h5p4-----4--7--5h7p5--4----| +|----7--6--7~---------------7------------------5-| +|-0------------0---------------------------------| +| | +| | +|------------------------------------------------| +|------------------------------------------------| +|-----------------4--2-4-2-----2--5--4------2----| +|----5--4--5~---------------5------------------4-| +|------------------------------------------------| +|-0------------0---------------------------------| + + +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|-------------------------------------------------------4--------4--5-----4- +|-------------------4--------4--5-----4--5--7--4--5--7-----5--7--------7---- +|-3--5--7--3--5--7-----5--7--------7---------------------------------------- +|--------------------------------------------------------------------------- +| +| +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|-------------------------------------------------------3--------3--5-----3- +|-------------------2--------2--4-----2--4--5--2--4--5-----4--5--------5---- +|-2--4--5--2--4--5-----4--5--------5---------------------------------------- +|--------------------------------------------------------------------------- + + +|----------------------|---------------------------------------------------| +|----------------------|---------------------------------------------------| +|----------------------|---------------------------------------------------| +|-5--7--4--5-----4-----|-----------------5--4h5p4-----4--7--5h7p5--4-------| +|-------------7-----5--|----7--6--7~---------------7------------------5----| +|----------------------|-0------------0------------------------------------| +| | | +| | | +|----------------------|---------------------------------------------------| +|----------------------|---------------------------------------------------| +|----------------------|-----------------4--2h4p2-----2--5--4h5p4--2-------| +|-4--5--2--4-----2-----|----5--4--5~---------------5------------------4----| +|-------------5-----4--|---------------------------------------------------| +|----------------------|-0------------0------------------------------------| + + +|---------------------------------------------------------| +|---------------------------------------------------------| +|-----------------5--4h5p4--------4-----------------------| +|---------------------------7--5-----7--5--4--7--5--4-----| +|----7--6--7~------------------------------------------5--| +|-0------------0------------------------------------------| +| | +| | +|---------------------------------------------------------| +|-----------------5--3h5p3--------3-----------------------| +|---------------------------5--4-----5--4--3--5--4--3-----| +|----5--4--5~------------------------------------------4--| +|---------------------------------------------------------| +|-0------------0------------------------------------------| + + +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| +|-----------------5--4h5p4-----4--7--5h7p5--4-----| +|----7--6--7~---------------7------------------5--| +|-0------------0----------------------------------| +| | +| | +|-------------------------------------------------| +|-------------------------------------------------| +|-----------------4--2h4p2-----2--5--4h5p4--2-----| +|----5--4--5~---------------5------------------4--| +|-------------------------------------------------| +|-0------------0----------------------------------| + + +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|-------------------------------------------------------4--------4--5-----4- +|-------------------4--------4--5-----4--5--7--4--5--7-----5--7--------7---- +|-3--5--7--3--5--7-----5--7--------7---------------------------------------- +|--------------------------------------------------------------------------- +| +| +|--------------------------------------------------------------------------- +|-------------------------------------------------------3--------3--5-----3- +|-------------------2--------2--4-----2--4--5--2--4--5-----4--5--------5---- +|-2--4--5--2--4--5-----4--5--------5---------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +|----------------------|---------------------------------------------------| +|----------------------|---------------------------------------------------| +|----------------------|---------------------------------7-----------------| +|-5--7--4--5-----4-----|---------------------5-----------7-----------------| +|-------------7-----5--|--3------------------5-----------5-----------------| +|----------------------|---------------------3-----------------------------| +| | | +| | | +|----------------------|---------------------------------------------------| +|----------------------|---------------------------------------------------| +|-4--5--2--4-----2-----|----------------------------------7----------------| +|-------------5-----4--|--2------------------5------------7----------------| +|----------------------|---------------------5------------5----------------| +|----------------------|---------------------3-----------------------------| + + +Verse + I am a Viking... +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|-----------9~---------------9----7--|-------------9---------5~---------7~-| +|-----------9~---------------9----7--|-------------9---------5~---------7~-| +|-----------7~---------------7----5--|-------------7---3--3-------5--5-----| +|-0---0--0-------0--0--0--0----------|-0--0--0--0--------------------------| + + +|------------------------------|--------------------------------|----------- +|------------------------------|--------------------------------|----------- +|----------9-----------------7-|-5---4-2-----2------------------|-------9--- +|----------9-----------------7-|-5-------5-4---5-4-2-1----------|-------9--- +|----------7-----5--x--5--x----|-3---------------------3-2-0----|-------7--- +|-0--0--0----------------------|-----------------------------3-2|-0--0------ + + Oh yesterday... +-------------------|--------------------------------|----------------------| +-------------------|--------------------------------|----------------------| +-------------9--7--|-----9~-----------5~---------7~-|-----9~-------------7~| +-------------9--7--|-----9~-----------5~---------7~-|-----9~-------------7~| +-------------7--5--|-----7~-----3--3-------5--5-----|-----7~--5--5--5--5---| +-0--0--0--0--------|-0------------------------------|-0--------------------| + + +|-----------------------| +|-----------------------| +|-5~--------------------| +|-5~----2--1h2p1--------| +|-3~--------------3--2--| +|-----------------------| + + +As the shores of my home disappear... +|------------------|---------------|---------------------------------------| +|------------------|---------------|---------------------------------------| +|-2----------------|---------------|---------------------------------------| +|-2----------------|---------------|---------------------------------------| +|-0------0--2--3s6-|-6~------6s7s9-|-s7~---7s9s10s9~------9s10s12----------| +|------------------|---------------|---------------------------------------| + + +|-------------------------|----------------------------------0-------------| +|--------------9~---------|------------------------0----1---------4----1---| +|-------------------------|-2-----------------2----------------------------| +|-------------------------|-2----------------------------------------------| +|-s10~---------11~--------|-0----------------------------------------------| +|-------------------------|------------------------------------------------| + + 2nd time +|------------------------|-----------------------|---------|---------------| +|------------------------|-5--8p5----------------|---------|5h8p5----------| +|------------------3--6~-|---------6--3--6--3----|-----%---|------6p3h6p3--| +|------------2--5--------|---------------------5-|---------|--------------5| +|-1----1--4--------------|-----------------------|---------|---------------| +|------------------------|-----------------------|---------|---------------| + + +|-----------------------------------|--------------------------------------- +|-----------------------------------|--------------------------------------- +|-4-----4---------------------------|--------------------------------------- +|-4-----4---------------------------|--------------------------------------- +|-2-----2---2--2--2--2--2--2--2--2--|-2--3--2--3--2--3--2--3--2--3--2----2-- +|-----------------------------------|----------------------------------5---- + + +----------|----------------------------------------------------------------| +----------|----------------------------------------------------------------| +----------|-Repeat intro---------------------------------------------------| +----------|----------------------------------------------------------------| +----------|----------------------------------------------------------------| +-5--3--2--|----------------------------------------------------------------| + + +|---------------------------------10-12-14-12-10-8-12-10-8-7-10-8-7----8-7-- +|------------------------10-12-13-----------------------------------10------ +|----------------9-11-12---------------------------------------------------- +|--------9-10-12------------------------------------------------------------ +|9-10-12-------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + Solo 1/2 +---------------------------------------|-----------------------------------| +10-8-7s5-------------------------------|-----------------------------------| +---------8-7-5s4-----------------------|--------9--11-11b------------11~---| +------------------7-5-4s2--------------|----s9-----------------------------| +--------------------------5-3-2--------|-----------------------------------| +---------------------------------5-3-2-|-0---------------------------------| + + 1/2 +|--------------------------------------|------------------------------------ +|-----------------------12-------------|------------------------------------ +|------9~---11br-----9------11--9s8h9~-|-9h12p11p9-8h11p9p8-11h14p12p11-s12- +|-s9-----------------------------------|------------------------------------ +|--------------------------------------|------------------------------------ +|--------------------------------------|------------------------------------ + + +------------------------------------------------14-15p14p12-s11------------- +-----------------------------13--17p15p13h15h17-----------------13-12-10---- +h16p14p12-s11h14p12p11-12h16------------------------------------------------ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + +----------------|------------------19p15---------19h20-17-20-15-20-14-20---- +----------------|------------------------17------------------------------17- +-12p11p9-11p9s8-|-11p8h9~-----s16-----------16~----------------------------- +----------------|----------------------------------------------------------- +----------------|----------------------------------------------------------- +----------------|----------------------------------------------------------- + + +-20----19-17-19-15-19-|-14-19---------------------------19s20-15------------ +----15----------------|-------16h17h19p16-17~--------17----------17----17--- +----------------------|---------------------------16----------------16------ +----------------------|------------------------17--------------------------- +----------------------|----------------------------------------------------- +----------------------|----------------------------------------------------- + + 1/2 +---------------------------------|------------------------------------------ +---------------------------------|-----------------------------------17bf--- +-16----16------------------------|--------------16-17-16-14s12-------------- +----17----17-14-17----14---------|----14-16-17-----------------16-14-------- +-------------------14-------14b--|-14--------------------------------------- +-------------------------15------|------------------------------------------ + + 1/2 1/2 1/2 +-----------------|-------12b-(14)-12------12-----------------12------------| +-(17b-18)--17bf--|----12-------------15bf----15-12-----12h15---------------| +-----------------|-12------------------------------15b----------14br-12-14~| +-----------------|---------------------------------------------------------| +-----------------|---------------------------------------------------------| +-----------------|---------------------------------------------------------| + + +|----------10h12t14p12-t14p12p10h12-t14p12-t14p12p10-t15p12p10-t15s12-19---- +|----10h12------------------------------------------------------------------ +|-12------------------------------------------------------------------------ +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + 1/2 +-17-15s14~--|---------------12-17p12----------12-17p12--20p17-------21b----- +------------|------------13----------13----13-----------------17------------ +------------|-------9-14----------------14-----------------------17--------- +------------|----10--------------------------------------------------------- +------------|-12------------------------------------------------------------ +------------|--------------------------------------------------------------- + + +Release +bend to 1/2 1/2 +-------21---21~--|-19br-br--19h20p19p17----------19h20p19p17---------------- +-----------------|----------------------20p19p17-------------20p19p17s16---- +-----------------|---------------------------------------------------------- +-----------------|---------------------------------------------------------- +-----------------|---------------------------------------------------------- +-----------------|---------------------------------------------------------- + + +------------------|--------------------------------------------------------- +------------------|--------------------------------------------------------- +19-17p16----------|----------------------------16-------16-17----16-17-19--- +---------19p17p16-|----------16-17-19-16-17-19----17-19-------19------------ +------------------|-19p18s19------------------------------------------------ +------------------|--------------------------------------------------------- + + +------------------------------|---------19-16-------16s13------13s10-------- +------------------------------|---------------18----------x----------12----- +17-16----------------16-16p17-|-16~--16----------19---------16----------13-- +------19-17p16h17-19----------|--------------------------------------------- +------------------------------|--------------------------------------------- +------------------------------|--------------------------------------------- + + +-10----------|--------12-17p12-17-20p17-12---------------------------------| +----12----12-|-----13----------------------13------------------------------| +-------13----|-s14----------------------------14-9-------------------------| +-------------|-------------------------------------10----------------------| +-------------|----------------------------------------12-7-12------0dive---| +-------------|------------------------------------------------8-12---------| + + +|-18-------------18s15---------------------------------|------15-14--------- +|----20-------20-------17----------------17s20--19-17--|-19~--------17-16--- +|-------21-18-------------18-15----15-18---------------|-------------------- +|-------------------------------17---------------------|-------------------- +|------------------------------------------------------|-------------------- +|------------------------------------------------------|-------------------- + + +---14-15-14----------14-15----14-15-14----17-14-15-17-15-14-17bf-bf-bf-19bf-| +17----------17-16-17-------17----------17-----------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| + + 1/2 +|19br--br--19h20p19p17------------------------------------------------------ +|----------------------20p19p17s16--20p19p17----------------16-------------- +|--------------------------------------------20p19p17-16-17----17p16----17-- +|--------------------------------------------------------------------19----- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + 1 1/2 +--------------| +--------------| +-------20b~---| +-19-16--------| +--------------| +--------------| + + + +|------------------------------|-------------------------------------------| +|------------------------------|-----------------------10---------8--------| +|--5~----------------------7---|-------------------------------------------| +|--5~------------5---------7---|--9----------------------------------------| +|--3~------------5---------5---|--7----------------------------------------| +|----------------3-------------|--0----------------------------------------| + + +|---------------------|--------------------|------------|------------------| +|--7~--------10---7---|-8~-----------8---7-|-5~---------|-----8s10----8----| +|---------------------|--------------------|---------4--|-6h8--------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +| | | | | +| | | | | +|---------------------|--------------------|------------|------------------| +|-------------7-------|--------------------|------------|---------7--------| +|--8~-------------8---|--9~----------9---7-|-5~---------|-3h4----------9---| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +| | | | | +| | | | | +|-------5--7---8~-----|-----8p5-----7~-----|-5--7--8~---|--9~-----9h11~----| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +| | | | | +| | | | | +|---------------------|--------------------|------------|------------------| +|-------7--8--10~-----|-----10p7----8~-----|-7h8--10~---|---8~---8s12~-----| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| +|---------------------|--------------------|------------|------------------| + + +|-----------------|--------------|-------------|----------|----------|-----| +|--7~------10--7--|-8~-----8--7--|-5~----------|----------|----------|-----| +|-----------------|--------------|----------4--|-6----8~--|-9--9s11~-|--9~-| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +| | | | | | | +| | | | | | | +|-----------------|--------------|-------------|----------|----------|-----| +|----------7------|--------------|-------------|----------|----------|-----| +|--8~----------8--|-9~-----9--7--|-5~----------|-3-----4--|-5--5s8~--|--9~-| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +| | | | | | | +| | | | | | | +|-----5--7--8~----|----8p5--7~---|--5--7--8~---|--9~--11~-|12~--12s14|--21b| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +| | | | | | | +| | | | | | | +|-----------------|--------------|-------------|----------|----------|-----| +|------5--7--8~---|----10p7--8~--|--7--8--10~--|---8~---7~|-8~---10~-|-12~-| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| +|-----------------|--------------|-------------|----------|----------|-----| + + + + +From: Stefan Nilsson + + + YNGWIE MALMSTEEN - 'I AM A VIKING' + + Transcribed by Stefan Nilsson + + +This is a transcription of the intro riff. + +Y.M usually tunes down a half tone : e -> eb B -> Bb + G -> Gb D -> Db + A -> Ab E -> Eb + + +e|------------------------------------------------------------------| +B|------------------------------------------------------------------| +G|------------------------------------------------------------------| +D|----------------------------------5-454-------4---7-575---4-------| +A|----------7---6---7-----------------------7-------------------5---| +E|--0-----------------------0---0-----------------------------------| + + 1 2 3 4 + + + + +e|------------------------------------------------------------------| +B|------------------------------------------------------------------| +G|----------------------------------5-454-----------4---------------| +D|------------------------------------------7---5-----7-5-4-7-5-4---| +A|----------7---6---7---------------------------------------------5-| +E|--0-----------------------0---0-----------------------------------| + + 1 2 3 4 + + + + +e|------------------------------------------------------------------| +B|------------------------------------------------------------------| +G|------------------------------------------------------------------| +D|----------------------------------5-454-------4---7-575---4-------| +A|----------7---6---7-----------------------7-------------------5---| +E|--0-----------------------0---0-----------------------------------| + + 1 2 3 4 + + + + +e|------------------------------------------------------------------| +B|------------------------------------------------------------------| +G|--------------------------------------4-----4-5---4---------------| +D|--------------4-----4-5---4-5-7-4-5-7---5-7-----7---5-7-4-5---4---| +A|--3-5-7-3-5-7---5-7-----7-----------------------------------7---5-| +E|------------------------------------------------------------------| + + 1 2 3 4 + + + +e|------------------------------------------------------------------| +B|------------------------------------------------------------------| +G|--5-------------------------------------------------------7-------| +D|--5-----------------------------------------------5-------7-------| +A|--3-----------------------------------------------5-------5-------| +E|--------------------------------------------------3---------------| + + 1 2 3 4 + + + +e|------------------------------------------------------------------| +B|------------------------------------------------------------------| +G|--9---------------------------------------------------------------| +D|--9---------------------------------------------------------------| +A|--7---------------------------------------------------------------| +E|--0---------------------------------------------------------------| + + 1 2 3 4 + + + + + diff --git a/guitar/tabs/Malmsteen/icarus_dream_suite.tab b/guitar/tabs/Malmsteen/icarus_dream_suite.tab new file mode 100644 index 0000000..4246844 --- /dev/null +++ b/guitar/tabs/Malmsteen/icarus_dream_suite.tab @@ -0,0 +1,746 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Icarus Dream Suite - Opus 4" +from Rising Force +letostak@netcom.com +tune down 1/2 step +<> natural harmonic + + + +|-------------------|------------|------------|-----------|--------|-------| +|-------------------|------------|------------|-----------|--------|-------| +|----------7--------|-9----------|-------7----|-5---------|------7-|---9---| +|--5-------7--------|-9----------|-5-----7----|-5---------|-5----7-|---9---| +|--5-------5---xs---|-7------7s--|-5-----5----|-3---------|-5----5-|---7---| +|--3-----------xs---|-0----------|-3----------|-------8s--|-3------|---0---| + + +|------------------------h15t17t19--t19p17p15p12---------------------------| +|--5h8t12-t17-t20p17p12-----------------------------------t12--------------| +|-------------------------------------------------------------t12---t9-----| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|-------------------------|---------------|--------------------------------| +|--12~--------------------|---------------|------13~---12------------------| +|----------14p12s11-------|---------------|----x-----------14-12-14p12s11--| +|---------------------14--|-14p13~--------|--x-----------------------------| +|-------------------------|---------------|--------------------------------| +|-------------------------|---------------|--------------------------------| + + 1/2 +|----------------------------------------|---------------------------------| +|--------------------t11p9-t11p9-t11p9~--|-15s17--17~---15-17-13-15-12-----| +|-11~-----11b----9~----------------------|---------------------------------| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| + + +|-------------------------------8-10-|-10~--------8-10p7s8-----------------| +|-13~----13~---------11-8-10-12------|--------------------------10~--------| +|--------------9-8-9-----------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| +|------------------------------------|-------------------------------------| + + +|--------------------------------------------|---------------------|-------| +|-s12~--12--12--------------------------10-12|13~---12-13-10-12-8~-|-s10~--| +|-------------------------------9-11-12------|---------------------|-------| +|-----------------------9-10-12--------------|---------------------|-------| +|---------------9-10-12----------------------|---------------------|-------| +|--------------------------------------------|---------------------|-------| + + +|----------------------------|------------------14-14s17s20~-|12-14-15-14h15 +|-12~------------------------|------------12s16--------------|-------------- +|------14~--12h14p12s11------|---------11--------------------|-------------- +|------------------------14--|-14~--13-----------------------|-------------- +|----------------------------|-------------------------------|-------------- +|----------------------------|-------------------------------|-------------- + + +-p14p12-11-12-|-10~--10-13-13--12-10--|--------------12-|------------12----| +--------------|-----------------------|-13~----10-13----|-12~--s8-12-------| +--------------|-----------------------|-----------------|------------------| +--------------|-----------------------|-----------------|------------------| +--------------|-----------------------|-----------------|------------------| +--------------|-----------------------|-----------------|------------------| + + +|----------------------|-------------------|-------------------------------| +|-10~--10-12-13~-12-10-|-8~--8-10h12--10-8-|-8h10p8s7~--7-8-8h10p8s7~------| +|----------------------|-------------------|-------------------------------| +|----------------------|-------------------|-------------------------------| +|----------------------|-------------------|-------------------------------| +|----------------------|-------------------|-------------------------------| + + 1/2 1 1/2 +|--------------------------12-11-12-14-15s17s19~--------21b~---------------| +|-----------------------12------------------------17-----------------------| +|--9~-------------11-12----------------------------------------------------| +|------9b------14----------------------------------------------------------| +|-----------14-------------------------------------------------------------| +|--------------------------------------------------------------------------| + +acoustic guitar +=========================Repeat 7 times=================================== + +|-------0--3-----2~-------------|----------2-----0-----------2h3p2p0-------| +|----0--------0-------3~--------|-------3-----------1------0-----------3---| +|---------------------------2---|----2--------0---------0------------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|-0-----------------------------|-0----------------------------------------| + + +Volume swells + +|---------------15---12---19---|-(19)~-------------------------------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +| | | +| acoustic guitar | | +|--------0--3-----2~-----------|-------------2-----0--------------2h3p2p0--| +|----0---------0------3~-------|----------3-------------1------0----------3| +|--------------------------2---|-------2--------0-----------0--------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|-0----------------------------|--0----------------------------------------| + + +|-----------------------------------|--------------------------------------| +|-------16------14------12----------|-12------------12~--------------------| +|-----------------------------------|---------13---------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +| | | +| | | +|-----------------------------------|-----0---5p4-0-------------0----------| +|-------2-4----------------4--------|---0---0-------0-----0---0---0--------| +|-----4-----4----------4-----4------|-------------------1---1--------------| +|---4---------4------4---------4----|--------------------------------------| +|-2-------------2--0-----0-------0--|--------------------------------------| +|-----------------------------------|-4---------------0--------------------| + + +|---------------------------------|-10-------------------------------------| +|--13-----12-----10---------------|----------------10~---------------------| +|---------------------------------|---------11-----------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +| | | +| | | +|-----------0--------------0------|----------2h3p2-------------------------| +|-------0-1---1--------0-1---1----|----------------3------<7>--------------| +|-----2--------------2------------|------2------------<7>-----<7>----------| +|---2--------------2--------------|----0---0-----------------------0--2----| +|-0-------------------------------|----------------------------------------| +|----------------3-------------3--|--2-------------------------------------| + + +|-----------------------------------|--------------------------------------| +|-----10--------8---------6---------|--5--------6h8------6~----------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +| | | +| | | +|---------5-----------------5-------|--------------0--------1---------1----| +|-----6-----6-----------5h6---6-----|----2-------2--------3---------3------| +|---5---5-----5-------7-------------|----------2--------2---------2--------| +|-3-------------3---7-----------7---|-----------------0--------------------| +|-----------------5-----------------|-0-----4------------------3-----------| +|-----------------------------------|--------------------------------------| + + +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|---------10-----9--------7------|--7-------6------9-------8---------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +| | | +| | | +|------------------------4-----0-|-----5-------5-------7-------7-----------| +|----------3-----------5-----3---|---5-------5-------7---7---7---7---------| +|-----3------3-------4-----1-----|-7-----7-6-----6-9-------8---------------| +|---3---3------3-----------------|-----------------------------------------| +|-1--------------0---------------|-----------------------------------------| +|------------------4-------------|-----------------------------------------| + + +|-----------------------------| +|--8--------------------------| +|--9--------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| +| | +| | +|------0-3----2~--------------| +|----0-----0-------3~---------| +|-----------------------2-----| +|-----------------------------| +|-----------------------------| +|-0---------------------------| + + electric +|------------------------------|-------------------------------| +|------------------------------|-------------------------------| +|------------------------------|-------------------------------| +|------------------------------|x-x-x-x-x-x-x-x-x-x-x-x-x-x-x--| +|------------------------------|7-7-7-7-7-7-7-7-7-7-7-7-7-7-7--| +|------------------------------|-------------------------------| +| | | +| | | +|-------3---0-------2h3p2p0----|-----0-3---2~------------------| +|-----3-------1---0---------3--|---0-----0------3~-------------| +|---2-----0-----0--------------|--------------------2----------| +|------------------------------|-------------------------------| +|------------------------------|-------------------------------| +|-0----------------------------|-0-----------------------------| + +* feedback +|----------------------------------|---------------------------------------| +|----------------------------------|-17*-----------------------------------| +|----------------------------------|---------------------------------------| +|x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x---|---------------------------------------| +|7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7---|---------------------------------------| +|0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0---|---------------------------------------| +| | | +| |electric | +|-------2----0---------2h3p2p0-----|---------------------------------------| +|-----3----------1---0---------3---|---------------------------------------| +|---2------0-------0---------------|--------9--7---------------------------| +|----------------------------------|--------9--7------4-5-4h5p4------------| +|----------------------------------|--------7--5----7-----------7-5--------| +|-0--------------------------------|-0--0-0-------0------------------------| + + +|------------------------------|---------------------|---------------------| +|--(17)------------------------|---------(17)--------|------(17)-----------| +|------------------------------|---------------------|---------------------| +|------------------------------|---------------------|---------------------| +|------------------------------|---------------------|---------------------| +|------------------------------|---------------------|---------------------| +| | | | +| |repeat last 2 bars | | +|------------------------------|---------------------|---------------------| +|------------------------------|---------------------|---------------------| +|----------7--5----------------|-----------%---------|-----------%---------| +|----------7--5----------------|---------------------|---------------------| +|----------5--3----------------|---------------------|---------------------| +|-0---0-0--------0-2-3-5-3-2---|---------------------|---------------------| + + +|----------------------------------|---------------------------------------- +|-----(17)-------------------------|-----(17)------------------------------- +|----------------------------------|---------------------------------------- +|----------------------------------|---------------------------------------- +|----------------------------------|---------------------------------------- +|----------------------------------|---------------------------------------- +| | +| | +|----------------------------------|-15-14-12s11---------------------------- +|----------------------------------|-------------13-12-10------------------- +|--------9--7----------------------|----------------------12-11-9-8--------- +|--------9--7------4-5-4h5p4-------|--------------------------------10-9-7-- +|--------7--5----7-----------7-5---|---------------------------------------- +|-0--0-0-------0-------------------|---------------------------------------- + + +|-------|--------------|------------|--------------------------------------- +|-------|--------------|--17bf------|--------------------------------------- +|-------|--------------|------------|--------------------------------------- +|-------|--------------|------------|--------------------------------------- +|-------|--------------|------------|--------------------------------------- +|-------|--------------|------------|--------------------------------------- +| | | | +| | | | +|-------|--------------|------------|--------------------------------------- +|-------|--------------|------------|--------------------------------------- +|-------|--------------|------------|--------------------------------------- +|-------|----s14~------|---14~------|--------------------------------------- +|-10-9--|-7------------|------------|--------------------------------------- +|-------|--------------|------------|--------------------------------------- + + +|-------------------|---------------------------|--------------------------| +|---16---14---12----|--17~----------------------|-13---12h13p12---10-------| +|-------------------|--------------13---16~-----|--------------------------| +|-------------------|---------------------------|--------------------------| +|-------------------|---------------------------|--------------------------| +|-------------------|---------------------------|--------------------------| + + +|---------------------------------|----------------------------------------| +|15~------------------------------|----------------------------------------| +|---------11-----14~--------------|------12h14--------12--------10---------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| + + +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|-9-----------10-12-10~------------|--------9h10--------9~---------7~------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +|----------------------------------|---------------------------------------| +| | | +| | | +|----------------------------------|---------------------------------------| +|----------------------------------|-------------------------------5-------| +|-------3-2------------------------|----------3--------------------4-------| +|-----2-----5-3-2---3-2-----2------|----------3--------------------2-------| +|-0-4-------------5-----5-3---5-3--|-1--1-1-1-1----------------------------| +|----------------------------------|--------------------4-4-4-4------------| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-7~-------6~-------9~---------8~---|---9~---------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|----------------------4~-----------|--------9--7--------------------------| +|----------7--7--7--7---------------|--------9--7-------4-5-4h5p4----------| +|-0--0--0---------------------------|--------7--5-----7-----------7-5------| +|-------------------------------7s--|0--0-0---------0----------------------| + + +|-15-14-12-11---------------------------------|--------------|-------------| +|-------------13-12-10------------------------|--------------|-------------| +|----------------------12-11-9-8--------------|--------------|-------------| +|--------------------------------10-9-7-------|--------------|-------------| +|---------------------------------------10-9--|--7~----------|-------------| +|---------------------------------------------|--------------|-------------| +| | | | +| | repeat last | two bars | +|---------------------------------------------|--------------|-------------| +|---------------------------------------------|--------------|-------------| +|----------7--5-------------------------------|-------%------|------%------| +|----------7--5-------------------------------|--------------|-------------| +|----------5--3-------------------------------|--------------|-------------| +|-0---0-0------------0--2--3--5--3--2---------|--------------|-------------| + +Interlude + +|-8-12-11-12-8-12-11-12-8-12-11-12-|-7-12-11-12-7-12-11-12-7-12-11-12-|---12 +|----------------------------------|----------------------------------|10--- +|----------------------------------|----------------------------------|----- +|----------------------------------|----------------------------------|----- +|----------------------------------|----------------------------------|----- +|----------------------------------|----------------------------------|----- + + +-11-12----12-11-12----12-11-12-|--12-11-12---12-11-12---12-11-12-|--11-9-11- +-------10----------10----------|8----------8----------8----------|7--------- +-------------------------------|---------------------------------|---------- +-------------------------------|---------------------------------|---------- +-------------------------------|---------------------------------|---------- +-------------------------------|---------------------------------|---------- + + +---11-9-11---11-9-11-|--12-11-12---12-11-12---12-11-12-|-14-12-11----12-11-- +-7---------7---------|8----------8----------8----------|----------13-------- +---------------------|---------------------------------|-------------------- +---------------------|---------------------------------|-------------------- +---------------------|---------------------------------|-------------------- +---------------------|---------------------------------|-------------------- + + +-------11----------|-------------------------------------| +-13-12----13-12-10-|-13-12-10----12-10-------10----------| +-------------------|----------12-------12-11----12-11-8s-| +-------------------|-------------------------------------| +-------------------|-------------------------------------| +-------------------|-------------------------------------| + +Solo + 1/2 +|------------------------------------15h17----15---15h17p15-----15---------| +|---------------------------16-17-19-------19---------------19-----19b-----| +|-s9------------16-17-16-17------------------------------------------------| +|------16-17-19------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + 1/2 +|----------15-19-----15------------------|----------------------7-11p10h11p10| +|-19b---19-------19b----19b--19-17-19-19-|-19b--rb19p17~------8--------------| +|----------------------------------------|------------------9----------------| +|----------------------------------------|-----------------------------------| +|----------------------------------------|-----------------------------------| +|----------------------------------------|-----------------------------------| + + +|-8p7h8h10p8p7----7---------------------|----------------------------------| +|--------------10---10bf--t11p10-t15p10-|-t17p10-t18p10--t20-bf--10br~-----| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| + + +|------------------------------------|-------7-11p10p8s7-10p8p7------------- +|-10s12-12-11-11-12-12-8-8-10-10-7-7-|-8---8--------------------12p11h12p11- +|------------------------------------|---9---------------------------------- +|------------------------------------|-------------------------------------- +|------------------------------------|-------------------------------------- +|------------------------------------|-------------------------------------- + + +--------------------------|------------------------------------------------- +-p8-8s7-------------------|-7-----7-8---7-8s10-7-8-10s12-8-10-12s13-10-12--- +--------9p7h8p7---9---7-9-|---8-9-----9------------------------------------- +----------------9---9-----|------------------------------------------------- +--------------------------|------------------------------------------------- +--------------------------|------------------------------------------------- + + 1/2 +-------------------------------15------|-------15-----15-----15-17-19h20p19- +-13s15-12-13-15s17-13-15-17s19----19b--|-rb19-----19b----19b---------------- +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ + + 1 1/2 +-p17----19-17----------21b----|-(21)~--19-20-17-20-15-20----20----20-------| +-----20-------20-19-17--------|--------------------------19----17----------| +------------------------------|--------------------------------------------| +------------------------------|--------------------------------------------| +------------------------------|--------------------------------------------| +------------------------------|--------------------------------------------| + + 1/2 +|----------15-19p18p15----18-15-----15-----15-----15-17--------------------| +|-16-17-19-------------19-------19b----19b----19b-------20~----------12----| +|-----------------------------------------------------------------12-------| +|--------------------------------------------------------------14----------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|--------------------------------------------------------------------------- +|-16p15p13s12-15p13p12----12-13p12-------------------------------------12h13 +|----------------------15----------------------------11-12----11s12h14------ +|----------------------------------14p12h14p13-12-14-------14--------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + 1 1/2 +---------------s21b---| +-p12------------------| +-----14p12s11---------| +----------------------| +----------------------| +----------------------| + + top note harmony guitar + 1/2 +|--21rb--------------------|----------5-------------7----------------------| +|--------------------------|-8--------7-------------8------------8---------| +|--------------------------|-9-----------------------------------9---------| +|--------------------------|-----------------------------------------------| +|--------------------------|-----------------------------------------------| +|--------------------------|-----------------------------------------------| +| | | +| | acoustic guitar | +|--------------------------|---0-------------------------------------------| +|--------------------------|---0-------------------------------------------| +|--4--4------5--5-----4----|---0-------------------------------------------| +|--4--4------5--5-----4----|---2-------------------------------------------| +|--2--2------3--3-----2----|---2-------------------------------------------| +|--------------------------|---0-------------------------------------------| + + +|------------------11-14p11--------|------------------|---------------------| +|8---7--5-7-----12----------13-----|-10---12--13--10--|-12-10-12-16-17-12h13| +|9---8--6-8--11----------------14--|-11---12--14--11--|-12-11---------------| +|----------------------------------|------------------|---------------------| +|----------------------------------|------------------|---------------------| +|----------------------------------|------------------|---------------------| +| | | | +| | | | +|--7-------7-----------------------|------------------|--7------------------| +|--8-------7-----------------------|--7---------------|--7------------------| +|--9-------8-----------------------|--8---------------|--8------------------| +|--9-------9-----------------------|--9---------------|--9---5-4-5----------| +|----------9-----------------------|--9---------------|--9---7-6-7----------| +|----------------------------------|--7---------------|--7------------7-5---| + + +|-----------------| +|-p12-----10------| +|-----------------| +|-----------------| +|-----------------| +|-----------------| +| | +| | +|-----------------| +|-----------------| +|-----------------| +|-----------------| +|-----------------| +|------3--2-------| + +()harmony else note on top +|----------10---12(16)--|-12---10----------12-10---------------|------------ +|-12--13---12-----------|-13---12--10(13)--13-12--10(13)-8(12)-|7(10)--8(12) +|-13--14----------------|--------------------------------------|------------ +|-----------------------|--------------------------------------|------------ +|-----------------------|--------------------------------------|------------ +|-----------------------|--------------------------------------|------------ + + +---------10(14)-|-7(10)------------------7(10)------------------------------ +-10(13)---------|----------10(13)--8(12)-------10(13)8(12)7(10)10(13)8(12)-- +----------------|----------------------------------------------------------- +----------------|----------------------------------------------------------- +----------------|----------------------------------------------------------- +----------------|----------------------------------------------------------- + + +--------|----------------------------------| +-7(10)--|---------7(10)-----8(12)----------| +--------|-9(12)---------------------9(12)--| +--------|----------------------------------| +--------|----------------------------------| +--------|----------------------------------| + + +|-------9-12--15---15~----14p12-|-14-14---12-11----------------------12-11-- +|----11-------------------------|---------------13-12-10----10-12-13-------- +|-12----------------------------|------------------------12----------------- +|-------------------------------|------------------------------------------- +|-------------------------------|------------------------------------------- +|-------------------------------|------------------------------------------- +| | +| | +|--6-----------------9----------|------------------------------------------- +|--5-----------------8----------|-4--------4--------------------4----------- +|--6-----------------9----------|-4--------4-------------------------------- +|--5-----------------8----------|-------4------4----------4----------------- +|-------------------------------|-2------------------0---------------------- +|-------------------------------|------------------------------------------- + + +|----11-------------| +|-13----13-12-------| +|-------------------| +|-------------------| +|-------------------| +|-------------------| +| | +| | +|-------------------| +|-------------------| +|----4--------------| +|-------------------| +|-------------------| +|-------------------| + + +|---------------------------------------|----------------------------------| +|-10-12-8-10-7-8---7--------------------|---------7------8-----------------| +|----------------9---8------------------|-9-------------------------9------| +|----------------------10-9-7-----------|----------------------------------| +|-----------------------------10-9-7-6--|----------------------------------| +|---------------------------------------|----------------------------------| + + +|------------------------11-14-11-------|----------------------------------| +|---------------------12----------13----|----------------------------------| +|--9------8---6---8------------------14-|-11-------12-------14------11-----| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| + + +|-----------------------|--------------------------------------------------| +|-----------------------|-----------------------------------------15bfrb---| +|-11------12--11--12----|-13~-------------14~-----------16~----------------| +|-----------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +| | | +| | | +|-7---------------------|-----------------------------------------14bfrb---| +|-7--------5--4--5------|-12~-------------13~-----------15~----------------| +|-8--------7--6--7------|--------------------------------------------------| +|-9---------------------|--------------------------------------------------| +|-9---------------------|--------------------------------------------------| +|-7---------------------|--------------------------------------------------| + + +|---------------------------------------|----------------------------------| +|-13---12----13-12h13p12----------------|-------------------13bfrb---------| +|---------14-------------14-12-16-14-12-|-11~---12~---14~------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +| | | +| | | +|-12---10----12-10h12p10----------------|-------------------12bfrb---------| +|---------13-------------13-12-15-13-12-|-10~---12~---13~------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| + + +|----------------------------------------| +|-12~---10----12-10h12p10-------10-------| +|----------12-------------12-11----12-11-| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| +| | +| | +|-10~---8-----10-8h10p8----------8-------| +|---------12---------------12-10---12-10-| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| +|----------------------------------------| + +harmony guitars on top +|------------------------------|12p9----------9s12-15p12----------12-15s18-- +|--8-------10-------12------8--|-----11----11------------14----14----------- +|--9-------11-------12------9--|--------12------------------15-------------- +|------------------------------|-------------------------------------------- +|------------------------------|-------------------------------------------- +|------------------------------|-------------------------------------------- + + +-p15----------15-18s21~--|--------------|---------------|------------------| +-----17----17------------|-16~--14--12--|-17~-----------|-13--12tr13--10---| +--------18---------------|--------------|------13--16~--|------------------| +-------------------------|--------------|---------------|------------------| +-------------------------|--------------|---------------|------------------| +-------------------------|--------------|---------------|------------------| + + +|----------------|------------------|------------------|-------------------| +|-15~------------|------------------|------------------|-------------------| +|-------11--14~--|-14~---12~---10~--|--9~---10-12-10~--|-9h10~--9~--7~-----| +|----------------|------------------|------------------|-------------------| +|----------------|------------------|------------------|-------------------| +|----------------|------------------|------------------|-------------------| + + +|-13bf--------| +|-------------| +|--7bf---6----| +|-------------| +|-------------| +|-------------| + + +acoustic guitar +repeat 3x +|----1----0------3----1----0----------|----1------0-------------------------| +|-----------3-------------------1---3-|-------------3----1------------------| +|------2------2----2----2----2----2---|--------2------2-------3---2---0---2-| +|-0-----------------------------------|-0------------------0----0---0---0---| +|-------------------------------------|-------------------------------------| +|-------------------------------------|-------------------------------------| + +add acoustic gtr2 part + +|----13----12-------15----13----12-------------|---13----12----------------- +|-15----------15----------------------13----15-|15----------15----13-------- +|-------14-------14----14----14----14----14----|------14-------14------15--- +|----------------------------------------------|---------------------12---12 +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- + + +-----------------| +-----------------| +-14----12----14--| +----12----12-----| +-----------------| +-----------------| + + +|-13h15h17-13h15-13------------13-15--13h15p13-------|----15s17--15-13------ +|-------------------17-15~--17-----------------17-13-|-15--------------17-15~ +|----------------------------------------------------|---------------------- +|----------------------------------------------------|---------------------- +|----------------------------------------------------|---------------------- +|----------------------------------------------------|---------------------- +| | +| | +|-----1-------0--------------------0-----------0-----|---------------------- +|-----------------3-----------3-----------3----------|---------------------- +|--------2-------------------------------------------|---------%------------ +|--0-------------------------------------------------|---------------------- +|---------------------3----1-----------3-------------|---------------------- +|----------------------------------------------------|---------------------- + + +|----------17p13--------------| +|-------15-------15-----------| +|----14-------------14----14~-| +|-15-------------------15-----| +|-----------------------------| +|-----------------------------| +| | +| | +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| +|-----------------------------| + + +|-17--15-13------------13-15--13h15p13-------|---15s17--15-------20bf~-----| +|-----------17-15~--17-----------------17-13-|15-----------18-17-----------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| + + +Outro +electric repeat to fade out +|------------------------------------|--------------------------------------| +|------------------------------------|--------------------------------------| +|------------------------------------|-------------------%------------------| +|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7----|--------------------------------------| +|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5----|--------------------------------------| +|------------------------------------|--------------------------------------| +| | | +|acoustic | | +|---1---0-----3----1----0------------|---1----0-----------------------------| +|---------3-----------------1----3---|----------3---1-----------------------| +|-----2-----2---2----2----2---2------|-----2------2------3---2---0---2------| +|-0----------------------------------|-0---------------0---0---0---0--------| +|------------------------------------|--------------------------------------| +|------------------------------------|--------------------------------------| + + diff --git a/guitar/tabs/Malmsteen/ill_see_the_light_tonight.tab b/guitar/tabs/Malmsteen/ill_see_the_light_tonight.tab new file mode 100644 index 0000000..01611b0 --- /dev/null +++ b/guitar/tabs/Malmsteen/ill_see_the_light_tonight.tab @@ -0,0 +1,389 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## + +From: letostak@netcom.com (Judy Letostak) + +Yngwie J. Malmsteen's Rising Force +"I'll See the Light Tonight" +from "Marching Out" + +bf=bend full +s = slide +h = hammeron +p = pull off +~ = vibrato + + +Main Riff +----------------------------------------------------------------|----------- +----------------------------------------------------------------|----------- +------------------------10----------9-----------10-----------9~-|---%------- +-----------5--3p2p0------7----------7------------7-----------7~-|----------- +0-5-3p2p0------------------0-0-0-0-----0-0-0-0------0-0-0-0-----|----------- +----------------------------------------------------------------|----------- + + +|------------|----------|------------------------------------------------| +|------------|----------|------------------------------------------------| +|-----%------|----%-----|------------------------------------------------| +|------------|----------|------------------------------------------------| +|------------|----------|--2-------5-------8-------11------11\14---------| +|------------|----------|-----1~------4~------7--------10---------13\----| +repeat main riff + + +verse +~ with bar +---------------------------------------------------------------------------- +------------------------------------------------------8--------------------- +7~--------------9~-------------------7~---------------7--------------------- +7~--------------9~-------------------7~---------------9--------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + +harm--------- +-------7-------------------------------------------------------------------- +--7---------7----------------------------------------2---------------------- +----------------------7------------9~----------------2---------------------- +----------------------7------------9~----------------2-------2-------------- +-------------------------------------------------------------2-------------- +-------------------------7--7-7-7----------------------------0-------------- + + +---------------------------------------------------------------------------- +------------------------------------------------------------2--------------- +-7----------9------------7-------------8---------7-----9----2--------------- +-7----------9------------7-------------7---------7-----9----2----2---------- +---------------------------------------9-------------------------2---------- +-----------------------------------------------------------------0---------- + +Main riff for chorus + + + +Interlude + +10-13-12-13-10-13-12-13-8-12-10-12-8-12-10-12|-7-10-8-10-7-10-8-10--5-8-7-8--| +---------------------------------------------|-------------------------------| +---------------------------------------------|-------------------------------| +---------------------------------------------|-------------------------------| +---------------------------------------------|-------------------------------| +---------------------------------------------|-------------------------------| + + +5-8-7-8|-10-13-12-13-7-10-8-10-8-12-10-12-5-8-7-8|-7-10-8-10-4-7-5-7-5-8-7-8-- +-------|-----------------------------------------|---------------------------- +-------|-----------------------------------------|---------------------------- +-------|-----------------------------------------|---------------------------- +-------|-----------------------------------------|---------------------------- +-------|-----------------------------------------|---------------------------- + + +5-8-7-8|-4-7-5-7-7-10-8-10-5-8-7-8-5-8-7-8|-7-10-8-10-10-13-12-13-8-12-10-12-- +-------|----------------------------------|----------------------------------- +-------|----------------------------------|----------------------------------- +-------|----------------------------------|----------------------------------- +-------|----------------------------------|----------------------------------- +-------|----------------------------------|----------------------------------- + + +8-12-10-12|-10-13-12-13-----------------------------|------------------------- +----------|-------------9-12-10-12------------------|------------------------- +----------|------------------------7-10-9-10--------|------------------------- +----------|----------------------------------6-9-7-9|------------------------- +----------|-----------------------------------------|5-8-7-5----------5-7-8-5- +----------|-----------------------------------------|--------4-5-7-4---------- + + +-------|--------------12-17p12----------------12h13p12----12-13-15-12-13-15- +-------|-----------13----------13----12-13-15----------15------------------- +-------|--------14----------------14---------------------------------------- +6-7-9-6|-------------------------------------------------------------------- +-------|-7~----------------------------------------------------------------- +-------|-------------------------------------------------------------------- + + full +17|13-15-17-19-16-17-19-20-17-19-20s22-19-20-22-22b-||--------------------19 +--|-------------------------------------------------||-22bf---22bf---22bf--- +--|-------------------------------------------------||---------------------- +--|-------------------------------------------------||---------------------- +--|-------------------------------------------------||---------------------- +--|-------------------------------------------------||---------------------- + + +14--15p14p12s10-12-10s9----9h10p9-------9--------|-------------------------- +------------------------12--------12-10---12-10-8|-12-8-10-12-10-8s7-10p8p7- +-------------------------------------------------|-------------------------- +-------------------------------------------------|-------------------------- +-------------------------------------------------|-------------------------- +-------------------------------------------------|-------------------------- + + +-------------|----------14p10h14t19p14p10h12t17p14p12p10h12t17p9h14p9~|----- +10-8p7-------|-------12-----------------------------------------------|----- +-------9bf~--|----11--------------------------------------------------|----- +-------------|-12-----------------------------------------------------|----- +-------------|--------------------------------------------------------|----- +-------------|--------------------------------------------------------|----- + + +------14-19p14----14------------|----------------------|-------------------- +---15----------15-------15------|----------------------|-------------------- +16-------------------16----11-16|----------------------|-------------------- +--------------------------------|----11-----12---------|-------------------- +--------------------------------|-12-----14----9-14----|--------9-------9-10 +--------------------------------|-------------------9~-|9-10-12---10-12----- + + +--------------------------------------9-10-------9----|-9-12p11p9-8-11p9p8-- +------------------------------9-10-12------12bf----12~|--------------------- +-------------------9-10-11-12-------------------------|--------------------- +---9-11----9-11-12------------------------------------|--------------------- +12------12--------------------------------------------|--------------------- +------------------------------------------------------|--------------------- + + +11-14p12p11p9-12-16p14p12-11-12-14-16-16s21|-21~~~~~21~~~~~~|------16-20p16- +-------------------------------------------|----------------|---17---------- +-------------------------------------------|----------------|18------------- +-------------------------------------------|----------------|--------------- +-------------------------------------------|----------------|--------------- +-------------------------------------------|----------------|--------------- + + +-------------------------|-------------------------------------------------- +17-21p17----16-----------|-------------------------------13-16-14-13-------- +---------18--------------|----------13-16-14-13-13-14-16-------------16----- +---------------18~--16p13|-13-14-16----------------------------------------- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- + + +-----------------------|---------------------------14h16p14p12-------------- +-----------------------|------------------13-14-16-------------16p14p12----- +14p13----14p13---------|---------13-14-16----------------------------------- +------16-------16-14p13|13-14-16-------------------------------------------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- + +----------------------------------------------------------------------------| +---14p13-------14p13--------------------------------------------------------| +14-------14p13-------16-14p13----14p13----------13--------------------------| +------------------------------16-------16-14h16----16p14p13----14p13--------| +------------------------------------------------------------16-------16~----| +----------------------------------------------------------------------------| + + 1-1/2 +17bf--16b-----13---t17p13-t16p13t17p13t16p13t17p13t16p13--16p10h13-t16p10h13 +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + +p10-t13p7h10p7-10bf-|-12----12h16-t19p12h16p12-|t19p16p12-t22p16p12-12-15s21 +--------------------|----15--------------------|---------------------------- +--------------------|--------------------------|---------------------------- +--------------------|--------------------------|---------------------------- +--------------------|--------------------------|---------------------------- +--------------------|--------------------------|---------------------------- + +1-1/2 +---------20-17-19|20-19-17-22-17-19-20-19-17-19-16-17-19-17-16---------| +21b--------------|---------------------------------------------18-15-17| +-----------------|-----------------------------------------------------| +-----------------|-----------------------------------------------------| +-----------------|-----------------------------------------------------| +-----------------|-----------------------------------------------------| + + +---------------------------------------------------12h-|13p12p10------------ +18-17-15s17-13-15-17-15-13s15-12-13-15-13-12s13-10-----|---------13p12p10--- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- + + +-----------------------------------------------------|---------------------- +-----------12h13p12p10------------------------10p9---|---------------------- +13p12p10s9--------------13p12p10s9---------12------12|-10p9----10p9--------- +-----------------------------------12-10p9-----------|------12------12-10p9- +-----------------------------------------------------|---------------------- +-----------------------------------------------------|---------------------- + + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +12bf------------------------------------------------------------------------ +---------------------------------------------------------------------------- + +Chorus +verse +Chorus +end + + + + +Discography: + +Rising Force +Marching Out +Trilogy +Odyssey +Trial By Fire Live in Leningrad +Eclipse +Collection +Fire and Ice +Seventh Sign + +Alcatrazz: +No Parole from Rock and Roll +Live Sentence + +Steeler: + + +From: blake@aud2.aud.auc.dk + + +I have not at all tried to do an accurate transcribtion - this is +just the basic riffs. I have not transcribed the solopart, but have +included the interlude. + +The first notes are played with the "pinky" on the volumen knob and about +500ms delay. +The interludepart should do a great picking exercise. Sweep-pick, that's +how Yngwie plays. + +By the way, this is my first tab-post, so don't be too surprised to see +some errors. Comments are welcome... + +Tab: +b1 play previous note and bend one fret +r rebend +' pull-offs, hammer-ons +/ slide up +\ slide down +~ vibrato +~~ wide vibrato +/\/ vibrato with whammybar + + + + Yngwie J. Malmsteen + I'll see the light tonight + ********************************* + tabbed by Blake 1993 + _________________________________ + + + with volumen knob and delay + ---14-b1--r------------------------------------------------------- + ------------------------------------------------------------------ + -----------------------------16~~---------------10-b1--r---------- + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + + 3x <-------------Riff A------------------ + ||--------------------------------------------------------------|| + ||--------------------------------------------------------------|| + ||------------------------10---------9--------10---------9~-----|| + ||------------5-3-'2-'0----7---------7---------7---------7~-----|| + ||--5-3-'2-'0----------------0-0-0-0---0-0-0-0---0-0-0-0------0-|| + ||--------------------------------------------------------------|| + + + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------5-3-'2-'0--------------------------------------------- + --5-3-'2-'0-------------2------------5----------8-----11-----14--- + --------------------------1~~----------4~~---------7-----10-----13 + + 2x + ------||--------------------------------------------------------- + ------||---7----------------------------9~----------------------- + -2/\/-||---7----------------------------9~----------------------- + -2/\/-||---7----------------------------9~----------------------- + -0/\/-||--------------------------------------------------------- + ------||--------7-7-7-7-7-7-7-7-7-7-7-------7-7-7-7-7-7-7-7-7-7-7 + with tumb + + ----------------------------------------------------------------- + ---7~-----------------------8/\/-------------------------7~------ + ---7~-----------------------7/\/-------------------------7~------ + ---7~-----------------------9/\/-------------------------7~------ + ------------------------------------------------------------------ + -----7-7-7-7-7-7-7-7-7-7-7--------7-7-7-7-7-7-7-7-7-7-7----------- + + + ----------------------------------------------------------------|| + --------------------------9~-------------------------5----------|| + --------------------------9~-------------------------6------9---|| + --------------------------9~-------------------------7------9---|| + -----------------------------------------------------0------7---|| + --7-7-7-7-7-7-7-7-7-7-7-------7-7-7-7-7-7-7-7-7-7-7---------0---|| + + Riff A + -------|----------------------- + -------|-------------------------- + -------|--10------------------- + -------|--7----------------------- and so on..... + --0-0--|-----0-0-0-0----------- + -------|-------------------------- + + + Interlude + + 10-13-12-13-10-13-12-13-8-12-10-12-8-12-10-12-7-10-8-10-7-10-8-10- + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + + + 5-8-7-8-5-8-7-8-10-13-12-13-7-10-8-10-8-12-10-12-5-8-7-8-7-10-8-10 + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + + + 4-7-5-7-5-8-7-8-5-8-7-8-4-7-5-7-7-10-8-10-5-8-7-8-5-8-7-8-7-10-8- + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + + + 10-10-13-12-13-8-12-10-12-8-12-10-12-10-13-12-13---------------- + -------------------------------------------------9-12-10-12------- + ------------------------------------------------------------7-10-9 + ------------------------------------------------------------------ + ------------------------------------------------------------------ + ------------------------------------------------------------------ + + Guitar solo----> + ---------------------------------------------12-17'12--- + --------------------------------------------13------13--- + 10----------------------------------------14*-------14- + ---6-9-7-9-------------------------6-7-9-6-7------------- + -----------5-8-7-5---------5-7-8-5---------------------- + -------------------4-5-7-4------------------------------- + *dub + + + + + diff --git a/guitar/tabs/Malmsteen/judas.tab b/guitar/tabs/Malmsteen/judas.tab new file mode 100644 index 0000000..4510385 --- /dev/null +++ b/guitar/tabs/Malmsteen/judas.tab @@ -0,0 +1,408 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Judas" +from Eclipse +letostak@netcom.com Judy Letostak + + +|----------------------------|----------------------------|----------------- +|----------------------------|----------------------------|----------------- +|----------------------------|----------------------------|----------------- +|------9--9-----10--10----7--|-7--------9--9--------------|----9--9-----10-- +|---7--7--7-----7---7-----7--|-7--------7--7--7--7--7--7--|-7--7--7-----7--- +|---0--------0---------0-----|----0--0--------0--0--0--0--|-0--------0------ + + +------------|--------------|----------------------------| +------------|-3--3---------|----------------------------| +------------|-2--2-----4~--|----------------------------| +--10--------|-0--------4~--|------9--9-----10--10----7--| +--7---------|-0------------|---7--7--7-----7---7-----7--| +------0--0--|-------0------|---0--------0---------0-----| + + +|-----------------------------|--------------------------------------------| +|-----------------------------|--3-----------------------------------------| +|-----------------------------|--2------4~---------------------------------| +|----9--9-----10--10----------|--0------4~---------------------------------| +|-7--7--7-----7---7-----------|--0-----------------------------------------| +|-0--------0---------0--0--0--|--------------------------------------------| + + +|----------------------------|----------------------------|----------------- +|----------------------------|----------------------------|----------------- +|----------------------------|----------------------------|----------------- +|------9--9-----10--10----7--|-7--------9--9--------------|----9--9-----10-- +|---7--7--7-----7---7-----7--|-7--------7--7--7--7--7--7--|-7--7--7-----7--- +|---0--------0---------0-----|----0--0--------0--0--0--0--|-0--------0------ + + +------------------|--------------------------------------------------------| +------------------|--3-----------------------------------------------------| +------------------|--2------4~---------------------------------------------| +---10-------------|--0------4~---------------------------------------------| +---7--------------|--0-----------------------------------------------------| +------0--0--0-----|--------------------------------------------------------| + + +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|----------------------------|---------------------------------------------| +|------9--9-----10--10----7--|-7--------9--9-------------------------------| +|---7--7--7-----7---7-----7--|-7--------7--7-------------------------------| +|---0--------0---------0-----|----0--0--------0--12\10-8-7-5-3-------------| + + +|----------------------------------|-----------------|---------------------| +|----------------------------------|-3---------------|---------------------| +|----------------------------------|-2---4-----------|---------------------| +|-------9--9-----10--10------------|-0---4---xp.s----|---------------------| +|-------7--7-----7---7---7\--------|-0---------------|---7-----------------| +|-0--0--0-----0--------------0--0--|-----------------|---0dive-w/bar-------| + + +Verse + +I .. + +|-----------------5-----|-------2--4--------|-----5---------------5---5----| +|------5----------5-----|-----3------5------|-----5---------------6---6----| +|----5---------5--------|---2----------4----|---------------5--------------| +|--7-----5--3--------3--|-4--------------6--|-7------5-5\3-----------------| +|-----------------------|-------------------|------------------------------| +|-----------------------|-------------------|------------------------------| + +Then ... + +|------------------------|----------------------|-------2--4-------|-------- +|-----3------3--0--0-----|-------5---------5----|-----3------5-----|-----5-- +|--5-----4~-----2--1-----|-----5---------5------|---2----------4---|-----5-- +|--5-----5~-----------2--|-5/7------5--3------3-|-4--------------6-|-7~----- +|------------------------|----------------------|------------------|-------- +|------------------------|----------------------|------------------|-------- + +though .. + +--------7--------|--------8-9--------|-------------------------------------| +--------8--------|------8-----10-----|-------10---------10--10-------------| +-----------7-----|----9----------9~--|----10------------10--10-------------| +--7--9--------9--|-10----------------|-12-------12\10-8---------8----------| +-----------------|-------------------|-------------------------------------| +-----------------|-------------------|-------------------------------------| + +so ... + +|--------------------12~-|------------------------|----------7-------------| +|--------8---------------|-------10---------10----|------------------------| +|-----9--9--------9------|----10---------10-------|-7--6--9-----8----------| +|-10--------10-11--------|-12-------10-8-------8--|-7--7--9-----9---9\-----| +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| + + +Chorus + +You ... + +|--------------------------|--------------------|--------------------------| +|--------------------------|--------------------|--------------------------| +|--------------------------|--------------------|--------------------------| +|----9--9-----10--10----7--|-7-----9--9---------|----9--9----10--10--------| +|----7--7-----7---7-----7--|-7-----7--7---------|----7--7-----7---7--------| +|-0--------0---------0-----|----0-------0-0-0-0-|-0--------0----------12\0-| + + +Judas... + +|---------------|-------------------------|--------------------------------| +|---------------|-------------------------|--------------------------------| +|--7------4~----|-------------------------|--------------------------------| +|--7------4~----|----9--9----10--10-----7-|-7-----9--9---------------------| +|--5---0--------|----7--7-----7---7-----7-|-7-----7--7---------------------| +|---------------|-0--------0---------0----|----0--------0-12\10-8-7-5-3----| + + +Judas, Judas + +|-----------------------------|----------|------0--| +|-----------------------------|----------|---------| +|-----------------------------|--7--4----|---------| +|-------9--9-----10--10-------|--7--4----|---------| +|-------7--7-----7---7--------|----------|-2-------| +|-0--0--------0----------7\0--|----------|-0-------| + + +Verse + +Sightseeing ... + +|----------------5--|------------------4--|--------------------------------| +|-----5--------5----|-----3----------5----|-----5------------5-------------| +|---5--------5------|--------2-----4------|---5------------5-----5---------| +|-7------5-3--------|--4-------4-6--------|-7------5-7p5-3-------3---------| +|-------------------|---------------------|--------------------------------| +|-------------------|---------------------|--------------------------------| + + +collonades... + +|-----------------0-----0--|-----------------5--|-------2-4----------------| +|--------3--3--0-----0-----|-----5---------5----|-----3-----5--------------| +|-----4--4-----2-----1-----|---5---------5------|---2---------4------------| +|--5-----------------------|-7------5--3--------|-4-------------6----------| +|--------------------------|--------------------|--------------------------| +|--------------------------|--------------------|--------------------------| + + +beauty .. + +|-------5--5--------7--|-8---------9----------|--------10-------------------| +|----------5------8----|---8---------10-------|--------10-----------10------| +|----5----------7------|-----9----------9-----|----10-----------10----------| +|-7-----------9--------|-------10---------11--|-12---------10-8-8-------10--| +|----------------------|----------------------|-----------------------------| +|----------------------|----------------------|-----------------------------| + +the .... + +|------------------------|---------------------------10------|--------------7| +|--------8-----------10--|--------10-----------------10------|-5-----5--7--7-| +|-9--10--9--------9--9---|----10--10-------------10-------7--|-7--6-----9--8-| +|-----------10-11--------|-12---------10h12p10p8-------------|-7--7-----9--9-| +|------------------------|-----------------------------------|---------------| +|------------------------|-----------------------------------|---------------| + + +Chorus + + + +Guitar solo + +|-21p18----18p15----15p12----12p9----15-15-15p12-----12-12p9----9\6---|-9~\- +|-------20-------17-------14------11-------------14\---------11-----8-|----- +|---------------------------------------------------------------------|----- +|---------------------------------------------------------------------|----- +|---------------------------------------------------------------------|----- +|---------------------------------------------------------------------|----- + + 1/2 +--3p2p0-------14p13p12-|-------------------------------------------|-------- +--------3p2p0/---------|-15p14p12-11-12bf-rb12-11-12-11-12-12-11b--|-rb11--- +-----------------------|-------------------------------------------|------11 +-----------------------|-------------------------------------------|-------- +-----------------------|-------------------------------------------|-------- +-----------------------|-------------------------------------------|-------- + + +--------------12h14-15p14p12----------------|---------------------------14-- +-----------15----------------15p14p12-11----|---------------------17bf~----- +--9-12-11~-------------------------------14-|-12p11p9----------------------- +--------------------------------------------|---------12p11p9-8~------------ +--------------------------------------------|------------------------------- +--------------------------------------------|------------------------------- + + +-14-|-14-18------14-19------14-21----14-18p14----14-18------14-|---14-18p14- +----|-------17bf-------17bf-------17----------18-------17bf----|-7---------- +----|----------------------------------------------------------|------------ +----|----------------------------------------------------------|------------ +----|----------------------------------------------------------|------------ +----|----------------------------------------------------------|------------ + + +-----14------------------------------------------|-------------------------| +--17----17-14------------------------------------|-------------------------| +--------------16p15----16p15---------------------|-------------------------| +--------------------16-------16p14-16------------|----------14/17-14~------| +--------------------------------------16-16-13~--|-------------------------| +-------------------------------------------------|-14~---12----------------| + + 1/2 +|--------------------------------------------------------------------------| +|-------------------11h12-14-11-12-14-15------14-17-16-15-14-15p14---------| +|----------11h12h14----------------------16b-----------------------16-15~\-| +|-11h12h14-----------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + 1/2 +|---------------------------------|----------------------------------------- +|--17/19b--rb19-17-19-20-17-19-20-|-19-17-20-17-19-20-19-17-19-20-19-17-20-- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- + + +-------------------------------|-------------------------------------------- +-19-17-15-19-17-15-14-17-15-12-|-15-14-12-11-14-12-11\----12-10------------- +-------------------------------|-----------------------12-------12-11-11\0-- +-------------------------------|-------------------------------------------- +-------------------------------|-------------------------------------------- +-------------------------------|-------------------------------------------- + + hold bend------ +----------------------------------------|----------------------------------| +----------------------------------------|----------------------------------| +--4bf--4--4--4--4--4--4---3--4----3--4--|--3--4--3~----0--3----------------| +----------------------------------------|---------------------2bf~---------| +----------------------------------------|----------------------------------| +----------------------------------------|----------------------------------| + + +|-3p0-------6p3-------3-8p6-------6-12p9----------9-|-15p12----18~--21-----| +|-----2---2-----5---5-------8---8--------11----11---|-------16/------------| +|-------3---------6-----------9-------------12------|----------------------| +|---------------------------------------------------|----------------------| +|---------------------------------------------------|----------------------| +|---------------------------------------------------|----------------------| + + +|--22bf---~~~---| +|---------------| +|---------------| +|---------------| +|---------------| +|---------------| + + +Verse + +To .... + +|-----5-----------5--|--------2-4--------|------5--------------------------| +|---------------5----|------3-----5------|------5--------------------------| +|---5---------5------|----2---------4----|-----------------5--2------------| +|-7------5--3--------|--4-------------6--|-7~------7--5--3------3----------| +|--------------------|-------------------|---------------------------------| +|--------------------|-------------------|---------------------------------| + + +You ... + +|-------------------------|----------------------|------2-----------4h7p4--- +|----3--3-----0-----0-----|-----5----------------|--------3-------5-------5- +|-5--5--4--4--2-----1-----|---5---------5--2-----|----2-----4--4------------ +|----5-----5-----2-----2--|-7------5-3--3-----3--|-4--------6--------------- +|-------------------------|----------------------|-------------------------- +|-------------------------|----------------------|-------------------------- + + +got .. + +-----|--------5--5--7-----------|-------8-----9----------|-5----------------| +-----|--------5--------8--8-----|-------8-------10-------|-6--------------3-| +--4--|-----5--------------7-----|-----9-------------9~---|-------7------0---| +-----|--7--------------------9--|-10--------10-----------|----7--7----------| +-----|--------------------------|------------------------|----------3-1-----| +-----|--------------------------|------------------------|------------------| + + +some ... + +|---------------5-----|-----------------0--|--------------------------------| +|-----5------5--------|--------------3-----|-5--5--7--7---------------------| +|---5---5----6-----6--|-----7--------0-----|-7--6--9--8---------------------| +|-5-------7--------7--|---7----------------|-7--7--9--9--9------------------| +|---------------------|-5------3--1--------|--------------------------------| +|---------------------|--------------------|--------------------------------| + + + +Chorus + + + + +Solo + + +|-3p0---0-7-------7--12~--|-----------14h15-14-12-----------|-3p2p0--------- +|-----0-----8---8---------|-17bf~-----------------15p14p12--|-------3p2p0--- +|-------------9-----------|---------------------------------|-------------3~ +|-------------------------|---------------------------------|--------------- +|-------------------------|---------------------------------|--------------- +|-------------------------|---------------------------------|--------------- + + +-----------|------------------|----------------|---------------------------- +-----------|------------------|----------------|---------------------------- +--6p4p3h4--|-4bf--4bf-rb4--3--|-4p3~-----------|------------3h4h6p3-4-6-7-4- +-----------|------------------|----------2bf---|--4~----4h5----------------- +-----------|------------------|----------------|---------------------------- +-----------|------------------|----------------|---------------------------- + + +-------|-----------------------------------|-------------------------------- +-------|--------------------------------0--|-------------------------------- +--6-7--|-9-6-7-9/11-7-9-11-12p11~-------0--|----------11h12p11-------------- +-------|---------------------------/17-----|-11h12h14----------14-12p11-12-- +-------|-----------------------------------|-------------------------------- +-------|-----------------------------------|-------------------------------- + + 1/2 +--------------------------------------12h14-|-15p14p12-----------21b--rb21~-| +--------------11-12-14-12p11-11-12-14-------|----------15p14p12-------------| +-----11-12-14-------------------------------|-------------------------------| +--14----------------------------------------|-------------------------------| +--------------------------------------------|-------------------------------| +--------------------------------------------|-------------------------------| + + +|--/14-15-14p12-------------14p12--|-------12----------------------------12- +|---------------15-14p12-11--------|-15p14----15-14-12-15-14-12-12h14h15---- +|----------------------------------|---------------------------------------- +|----------------------------------|---------------------------------------- +|----------------------------------|---------------------------------------- +|----------------------------------|---------------------------------------- + + +----------------------------|---------------------14h15--14p12-------------- +--15p14p12-12h14h15-14-17bf-|-rb17p15p14-------14--------------15-12h14h15-- +----------------------------|------------15h16------------------------------ +----------------------------|----------------------------------------------- +----------------------------|----------------------------------------------- +----------------------------|----------------------------------------------- + + +--12h14h15--t18p15p14p12h14h15p14p12t18p14|-h15p14h19p14h15p14-t19p14/21~--- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- + + 1/2 +--19~--------|-14------------14-----------------14-------14----|------------ +-------17bf--|----17p14-17b------17p14-17-17bf-----17p14----17-|-p14-------- +-------------|-------------------------------------------------|-----16p15-- +-------------|-------------------------------------------------|------------ +-------------|-------------------------------------------------|------------ +-------------|-------------------------------------------------|------------ + + 1/2 1/2 +-----------------------------|------------------------------|--------------- +-----------------------------|------------------------------|--------------- +-----------------------------|-4bf--rb4--17b---rb17---4~----|-0h3p0--------- +--16p14-------14-16b--rb16\--|------------------------------|-------4p2p0--- +--------14h16----------------|------------------------------|--------------- +-----------------------------|------------------------------|--------------- + + +---------------|---------6--7-----9--/--10--|-12-/--14--14--12-------------| +---------------|----------------------------|------------------------------| +---------------|---------3--4-----6--/---7--|--9-/--11--11---9-------------| +---------------|-4--------------------------|------------------------------| +--4p2-1---2----|----------------------------|------------------------------| +------------2--|-2---2----------------------|------------------------------| + + +fade out + + +The Music Shop (619)423-4970 diff --git a/guitar/tabs/Malmsteen/krakatau.tab b/guitar/tabs/Malmsteen/krakatau.tab new file mode 100644 index 0000000..252ea70 --- /dev/null +++ b/guitar/tabs/Malmsteen/krakatau.tab @@ -0,0 +1,632 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Malmsteen +"Krakatau" from Odyssey + +h = hammer on +p = pull off +~ = vibrato +\/ = dip note with bar +t = tap note with right hand +b=f(ull) = bend full +b 1 1/4 = bend one and one half steps i.e. E to F# +w/bar = dip or vibrato with tremolo bar +tr = trill +\ = slide down +/ = slide up + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +---------------------------------5p4p2--------------------------------- +---------------2p1---------------------5--5p4p2-2p1-------------------- +-2--2--0-h-2-3-----3p2p0---2--2---------------------3------------------ + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +-----------------------------------------------------------------4p3--- +-----------------------------5p4p2---------5p4p2---------5p4p3h4------- +------------2p1--------------------5p4p2p1-------5p4p2p1--------------- +2--2--0h2-3-----3p2p0--2--2-------------------------------------------- + + +----------------------------------------------------------------------- +-----3p2--------------------------------------------------------------- +---------4p3----------------------------------------------------------- +5p4----------5p4p2-----------------------------------5p4p2------------- +------------------------------------2p1--------------------5p4p2p1----- +------------------------2--2--0h2-3-----3p2p0--2--2-----------------3-- + + +----------------------------------------------------------------------- +---------------------------------3p2----------------------------------- +------------------------4p3----------5p3------------------------------- +5p4p2-----------5p4p3h4-----5p4----------5p4p2---------------3h4p3----- +-------5p4p2p1---------------------------------4--5p4--2-4-4-------5~-- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +3------------------3h4p3-----3-------------------3h4p3---3------------- +--5p4-2-5p4-2-4-4---------5-----5p4-2--5p4-2-4-4-------5---5p4-2------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +--------------------------------------------6h7p6-----6---------------- +------------------------------8p7--5--7-7~---------8-----8p7--5--8p7-5- +-----------3h4p3-----3-----9------------------------------------------- +5p4-2-4-4---------5-----5---------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +------0--3p0---------3-6h9-6-----------9-12-15p12-------------15-18-21~ +7-7~--0------2-----5---------8------11------------14-------17---------- +---------------3-6-------------9h12------------------15-18------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +0---------------------------------------------------------------------- +0-------2--------2-----------1---------1--------0-----0---------------- +--------4--------3-----------2---------2--------2-----1---------------- +--------4--------4-----------3---------3--------2-----2---------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +3-0-0-0--3-0-0-0--3-0-0-5--0-0-3-0--0-0-0-0--5-0-3-0--3-0-0-2--0-0-3-0- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +0-0-0-0--0-0-0-0--3-0-0-5--0-0-7-0--0-0-0-0--0-0-0-0--3-0-0-2--0-0----- +-------------------------------------------------------------------0-0- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +0-0-0-0--0-0-0-0--4-0-0-5--0-0-7p0--0-0-0-0--0-0-0-0--4-0-0-5--0-0-4-0- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +------------------------------------------------------5-----8p-7---3p0- +0-0-0-0--0-0-0-0--4-0-0-5--0-0-7-0--0-0-0-0--0-0-0-0----0-0------0----- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +0-0-0-0--2-0-0-0--3-0-0-5--0-0-7-0--0-0-0-0--5-0-0-0--3-0-0-0--2-0-3-0- +----------------------------------------------------------------------- +:repeat this measure : + + +gtr1 +-------------------------------------0--------------------------------- +10---8--6----8--6--5-----6--5--3-----0--------------------------------- +10---9--7----9--7--5-----7--5--4-----1--------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +gtr2 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +--------------------------------------2-------------------------------- +8----7--5~----s7-5-3~----5--3--2~-----2-------------------------------- +--------------------------------------0-------------------------------- + + + +2---------------------------------------------------------------------- +2---------------------------------------------------------------------- +3---------------------------------------------------------------------- +--------------------------------------5p4p2---------------------------- +-------------------2p1-----------------------5p4p2p1------------------- +---2--2~----0h2-3-------3p2p0---2--2-------------------3--------------- +:repeat this measure : + + + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +-------------------------------------5p4p2----------------------------- +------------------2p1-----------------------5p4p2p1-------------------- +2-p-0--2~--0h2--3------3p2p0--2--2~------------------3----------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +---------------------------------5p4p2p0------------------------------- +-------------2p1--------------------------5p4p1------------------------ +2--2~--0h2-3-----3p2p0----2--2-------------------3--------------------- + + +----------------------15p14p12----------------------------------------- +-------------------------------15-14p12p11----------------------------- +12-11-9------------------------------------12p11p9--------------------- +--------12-11-9-8----------------------------------12p11p9p8----------- +------------------10-----------------------------------------10p9------ +----------------------------------------------------------------------- + + b=1/2 +----------------------------------------------------------------------- +-----17-17b--15-13h15p13-12-------10h13p10s9--------------------------- +----------------------------14-13------------12p10-9h10p9-------------- +-----------------------------------------------------------12---------- +---------------------------------------------------------------11~----- +0\/-----------------------------------------------------------------13s\ +w/bar + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +-------10\9------------------7\9------------------10\9--------5\7------ +2------10\9------------------7\9------------------10\9--------5\7------ +2------8-\9------------------5\7------------------8-\7--------3\5------ +0-0-0-------0-0-0-0--0-0-0-0-----0-0-0-0--0-0-0-0------0-0-0------0-0-0 +:repeat measure 3 times + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +10-5------------------------------------------------------------------- +10-5-3----------------------------------------------------------------- +8--3-3----------------------------------------------------------------- +-----1----------------------------------------------------------------- +cont repeat : + + +-------------------0----------------0-------------0-------------------- +-------------------0----------------0-------------0-------------------- +10----5------------1----------------1-------------2-------------------- +10----5----3-------2----------------2-------------3-------------------- +8-----3----3-------2----------------2-------------3-------------------- +-----------1-------0----------------0-------------0-------------------- + + +0-------------0-------------0-----0------------0-----0----------------- +0-------------0-------------0-----0------------0-----0----------------- +2-------------2-------------4-----4------------4-----4----------------- +3-------------3-------------5-----5------------5-----5----------------- +3-------------3-------------5-----5------------5-----5----------------- +0-------------0-------------0-----0------------0-----0----------------- + + +gtr 1 +-------------0-----------0--------------------------------------------- +-------------12--12--10--9--------------------------------------------- +----------------------------10--9------9~------------------------------ +-----------------------------------12---------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + +gtr 2 + +0-------0--------------------------------------0------0-----------0---- +0-------0--------------------------------------0------0-----------0---- +2-------2--------------------------------------2------2-----------4---- +3-------3--------------------------------------3------3-----------5---- +3-------3--------------------------------------3------3-----------5---- +0-------0--------------------------------------0------0-----------0---- + + +0----------------0------0------------0----0-----------------0---------- +0----------------0------0------------0----0-----------------0---------- +2----------------1------1------------4----4-----------------4---------- +3----------------2------2------------5----5-----------------5---------- +3----------------2------2------------5----5-----------------5---------- +0----------------0------0------------0----0-----------------0---------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +-------------------------------------------------------5-----5--4------ +4-----4--4--4--2--4--5------5--4-----4-----4--4--4--2--5-----5--4------ +0--2--2--2--2--0--2--3------3--2-----0--2--2--2--2--0--3-----3--2------ +rhythm for solo + +solo b=f +-------24b--------------------------------------------------------10-12 +---------------------------------------------------------11-12-14------ +-------------------------------------------------9-11h12--------------- +----------------------------------------------12----------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +14p12p10-------------------------------------11-14---15-12-14-15-14-12- +----------14p12p11----------------------------------------------------- +--------------------14p12p11------------------------------------------- +------------------------------14p12p11--------------------------------- +---------------------------------------14p13--------------------------- +----------------------------------------------------------------------- + + +18-12-14-15-14-12-15-12-14-15-14-12-18-12-14-15-14-12--18-15-18-15-14-19 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +15-17-18-17-15-21-18-19-18-15-21-------21\--------21\------------------ +----------------------------------0-0/-----0-0-0/-----0-0----21\------- +----------------------------------------------------------0/----------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +21---21p18----18p15----15p12----15-12----13-15-15-15-13-15-13p12-15-12- +-----------20-------17-------14-------14------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +------12-14-15-14-12-14-12----12--------------------------------------- +15-15----------------------15----15-14-12-15-14-12-11-14p12p11p0------- +-----------------------------------------------------------------9/11~- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + + +----------------------------------------------------------------------- +----------------------21p11-----------14p12-11----------15p14-12------- +-------------11h12h14--------14-12p11----------14-12p11----------15-14- +12--11-12-14----------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + w/bar +----12-----------------14~-14~--12h14-14p12-12h14p12-15-14-15-12-15---- +-------15-14-12-------------------------------------------------------- +12--------------15p14-------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f +---15----15----15--------------------14-------------14----------------- +15----14----12----(11-tr-12)--/14h15----17b--17b-------14-------------- +----------------------------------------------------------16-15-------- +----------------------------------------------------------------16----- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + b=f +-----------------------------------------15----15-18----15-18/-21--21-- +---------------------------------17b--------17-------17---------------- +16-15------------------------------------------------------------------ +------16-14--16-14----------------------------------------------------- +-------------------16-14-13-------------------------------------------- +----------------------------14\---------------------------------------- + + b=1/2 b=1 1/2 b=1/2 +21-21b---21--21b-----21---21b-----21---21~--21----15p14p12------------- +-----------------------------------------------------------15p14p12---- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +------------15p14p12p11--12p11p10-------12p11p10----------------------- +15p14p12p11-----------------------12p11----------12p11p9-15p11p9------- +-----------------------------------------------------------------12p11- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +------------------------------------------------------------11-12-14-11 +-------9--12p11p9----------------------------------11-12-14------------ +p9--12-------------12p11p9-12----11----------12-14--------------------- +------------------------------12----14-13h14--------------------------- +----------------------------------------------------------------------- + + b 1/2 1 1 1/2 +---------12--14--12-14h15-12-14-15-18-14h15-17-19-15-17-19-21b----21b~- +12-14-15--------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + full palm mute + |--- +----------9h10p9p7\6--------------------------------------------------- +17b--17--------------8p7p5--------------------------------------------- +---------------------------7p6p4-3-------------------/6~---4-6-4---6-4- +-----------------------------------5-4-2-------------------------4----- +-----------------------------------------5-4-2-1----------------------- +-------------------------------------------------3-2------------------- + +------------------------------| b=1/2 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +--6-4---6-3-6-4-3h4-3---3---5p3--------------------4---3-4-6-3-4-6-7--- +4-----4---------------4---4-----4b---4---2-2-2-4-2---4----------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + w/bar full +--------------------------------------------x----------------14-14-14-- +---------------------------11----------12~--x--------17b--17----------14 +4-6-7-9-6-7-9-11-7h9h11h13----11h13h15------x-------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + bend up and down +---14-18----14-18-21-21b-----------------x\---------------------------- +17-------17------------------------------x\---------------------------- +-----------------------------------------x\---------------------------- +----------------------------------------------------------------------- +----------------------------------------------x------------------------ +----------------------------------------------------------------------- + +keyboard solo repeat 4x +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----0-------0-------0-----0-------------------------------------------- +--4-------4-------4-----4----2--0-------------------------------------- +2-------3-------2-----3------------3--2-------------------------------- +----------------------------------------------------------------------- + +full +------17----------------17h19h20p19p17-19\--7h8----7------------------- +20b------20p19p17h19h20-------------------------10---8h10p8p7---------- +--------------------------------------------------------------9-8------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +8p5-------5-11p8----------8-14p11-------17p14---19-20-19-20-17h20-15h20 +----7---9--------10----10---------------------x------------------------ +------8-------------11------------14-14-------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + full +14-12--11h12p11h12-14-15-17h19h20p19p17----------21b---21-10p8--------- +----------------------------------------20-19-17---------------10p8p7-- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +9p8--------------------keyboard solo--> play rhythm-------------------- +----10p9p7------------------------------------------------------------- +-----------10p9p7p6---------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +16b--14-16-14\13------------------------------------------------------- +-----------------15p14-12-15-14-12----14-12-------12------------------- +-----------------------------------15-------15p14----15p14h12h15p12---- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +------------------------------------------------------------12h13p12--- +------------------------------------------14p13-------12h14------------ +---------------14-12-------------12h14h15-------14h15------------------ +14p15-12h14h15-------15-14-12h15--------------------------------------- +----------------------------------------------------------------------- + + full hold bend +------------------------------------------22b-----22-22-22-22-22-22-22- +------17p15p13----------18p17p15--------------------------------------- +14p12----------16p14p12----------17p16p14------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + full +22-22--/20b--20--19-19-20p19-22p21-19-22-------17p16------------------- +-----------------------------------------21p18-------18p17h20p18p17---- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +18p17--------------------------------------18p17p15-------------------- +------19p17h21p19p17h19p17p16-16p19--16-14----------17p16-------16p14p13 +----------------------------------------------------------14h15-------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + keyboard solo +----------------------------------------------------------------------- +----------------------------------------------------------------------- +13p12p10-13p12p10p7h10p9p7--------------------------------------------- +---------------------------10------------------------------------------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +17p13-17p13p12p10-17p13p12-10-16-13-16p12p10-17p13-17p13p12p10-16p13--- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +16p13p12p10-17p13-17p13p12p10-16p13-16p13p12p10-17p13-17p13p12p10------ +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +19p13-19p13p12p10-19p13-17p13p12p10-16p13-16p13p12p10-16p13-16p13p12p10 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +13p10h12h13p12p10h13p12p10-12p8h10h12p10p8-10p7h8h10p8p7-8p7-8p7p5\4--- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +8p7p5p4-6p5h7p5-9p7p5-7p5p4-------------------------------------------- +--------------------------------------3-----3-----3-6---6~------------- +----------------------------5p4-----4-----4-----4---------------------- +--------------------------------7p6-----6-----6-------9---------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +------------7-10p7---7-10-13-10----------10-16~--13p12-13p12----13p12-- +----------9--------9------------12----12---------------------15-------- +-----8-10--------------------------13---------------------------------- +7-10------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +---12----------------12-16p12h16p12h16p12-17p12h17p12h17p12-19p12h19--- +15----15p13p12----13--------------------------------------------------- +---------------14----------------------------------------------------x- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +7---9------------9b--------9~-------------9p7--10p9p7------9p7--------- +-------------------------------------------------------10------10p9---- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------8h9p8------------12p10----------13p12p10--- +7--------------------7h9h10-------10p9-------------13p12p10----------10 +--10p9p7-10p9p7h9h10-------------------12p10--------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + full +---------------------------------12h13--12--13h16----17-17-20b--------- +15p13p12-------17p15p13------------------------------------------------ +---------14p13----------16p14p13--------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +20--20-19h20p19----------20p19----------19h20p19--------19h20p19------- +----------------22-22-19-------22p21h22--------22p21h22----------22p21- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----19h20p----------19h20--19p17p16h17--17--17p16---------------------- +h22--------22p21h22-------------------------------18p17p15------------- +------------------------------------------------------------17p16p14p13 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +-----------------------------------------13-16-10h13p10-------10-10---- +--------------------------------------------------------12----------12- +-----------------------13-16-16-13-16-13-------------------13---------- +15---14p12-------12-15------------------------------------------------- +-----------11h14------------------------------------------------------- +----------------------------------------------------------------------- + + + +-------7--7---------7h8p7-5-0-7p5p4-0h8p7p0-7p5p4p0-8p7p5p0-7p5p4p0---- +------------9---------------------------------------------------------- +13-10---------10-7----------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +8p7p5p0-10p8p7p0-10--7--13-10-------12--------------------------------- +------------------------------12-10-----15-12----------12-------------- +----------------------------------------------14-13-14----13p10-9h10--7 +----------------------------------------------------------------------- +----------------------------------------------------------------------- +----------------------------------------------------------------------- + + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +--10p9p7--------------------------------------------------------------- +9--------10p9p7h9-6---------------------------------------------------- +--------------------8p7p5---------------------------------------------- +--------------------------8p7p5p4--1h4-0\--------------------0h4------- + dive slow w/bar + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +-------10\9------------------7\9------------------10\9--------5\7------ +2------10\9------------------7\9------------------10\9--------5\7------ +2------8-\9------------------5\7------------------8-\7--------3\5------ +0-0-0-------0-0-0-0--0-0-0-0-----0-0-0-0--0-0-0-0------0-0-0------0-0-0 +:repeat and fade + +----------------------------------------------------------------------- +----------------------------------------------------------------------- +10-5------------------------------------------------------------------- +10-5-3----------------------------------------------------------------- +8--3-3----------------------------------------------------------------- + diff --git a/guitar/tabs/Malmsteen/leonardo.tab b/guitar/tabs/Malmsteen/leonardo.tab new file mode 100644 index 0000000..dbe2521 --- /dev/null +++ b/guitar/tabs/Malmsteen/leonardo.tab @@ -0,0 +1,39 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +From: CTC32498@aol.com +Date: Tue, 7 Aug 2001 10:45:16 EDT +Subject: m/malmsteen_yngwie/leonardo.tab + +LEONARDO +Written By Yngwie J. Malmsteen +>From The "Alchemy" Album +(Just an attempt--corrections and additions requested) +ctc32498@aol.com + + +e||--------------------------------|------------------------------| +B||--------------------------------|------------------------------| +G||-o------------------------------|------------------------------| +D||-o------------------------------|------------------------------| +A||------2------7------5------4----|------2------7---5---5---4----| +E||------0------5------3------2----|------0------5---3---7---2----| + +e----------------------------------|------------------------------| +B----------------------------------|------------------------------| +G----------------------------------|------------------------------| +D----------------------------------|------------------------------| +A--------2------7------5------4----|------2------7---5---5---4----| +E--------0------5------3------2----|------0------5---3---7---2----| + +e---------------------------------|| +B---------------------------------|| +G-------------------------------o-|| +D-------------------------------o-|| +A----------7------5------4--------|| +E----------5------3------2--------|| + diff --git a/guitar/tabs/Malmsteen/leviathan.tab b/guitar/tabs/Malmsteen/leviathan.tab new file mode 100644 index 0000000..acb2f19 --- /dev/null +++ b/guitar/tabs/Malmsteen/leviathan.tab @@ -0,0 +1,504 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen - Leviathan +from Fire and Ice +Judy Letostak (letostak@ix.netcom.com) +Tune down 1/2 step + +Listen to the recording for the right structure of the parts. He goes +back and forth and repeats some sections. It's just repeating a theme +then playing ending 1 then repeating the theme then to ending 2 or +something like that. + + + + +|--------15-20-15----------x-15--------------|--x-11p10-------------------| +|-----16----------16----16------18bf~--------|-----------11---------------| +|--17----------------17----------------------|---------------12~----------| +|--------------------------------------------|----------------------------| +|--------------------------------------------|----------------------------| +|--------------------------------------------|----------------------------| + + +|----------------------------------------------------13h15p13p11-13p11----- +|----------------------------------------------13-14----------------------- +|----------13h15p13-12----------------12h13h15----------------------------- +|-12-13-15-------------15-13-12h13h15-------------------------------------- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- + + +-----------------------------------------|-----------------------------|--- +--15p13----------------------------------|-15-11-----------------------|--- +-------------12h13p12p10----------10h12--|-------10~--8-10/12\10p8\7---|--- +-------------------------13p12h13--------|---------------------------8/|10- +---------11------------------------------|-----------------------------|--- +-----------------------------------------|-----------------------------|--- + + +---------|------------|------10h11p10h11p8h10-10h11p8-------|-------------| +---------|------------|---x---------------------------8\6---|-------------| +---------|------------|-----------------------------------8\|12-10-10~----| +---------|------------|-------------------------------------|-------------| +---/10---|------------|-------------------------------------|-------------| +---------|---8~~~-----|-------------------------------------|-------------| + + +|----------13h15h16p15p13-11-10-8\-6-4-3-1--------------------------------| +|-13h15h16---------------------------------4-3-1--------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------13/15/17----------------| +|-------------------------------------------------------------------------| + + + +slapback from digital delay +|---------------------------|----------------|----------------------------| +|---------------------------|----------------|----------------------------| +|---------------------------|----------------|----------------------------| +|---------------------------|----------------|----------------------------| +|----x\------x\------x\-----|--x\------x\----|-----x\---------------------| +|---------------------------|----------------|----------------------------| + + + +|---------------|------------------------------------|--------------------- +|---------------|------------------------------------|--------------------- +|---------------|------------------------------------|--------------------- +|---------------|------------------------------------|--------------------- +|---------------|----------3-----2-----------------3-|----2---------------- +|--3--8\6\4\3\--|-1--3--4-----4-----3--4--1--3--4----|-4-----3--4--1--3--4- + + +----------------|------------------------------------|--------------------- +----------------|------------------------------------|--------------------- +----------------|------------------------------------|--------------------- +----------------|------------------------------------|--------------------- +--3-----2-------|----------3-----2-----------------3-|----2---------------- +-----4-----3~---|-1--3--4-----4-----3--4--1--3--4----|-4-----3--4--1--3--4- + + +----------------|------------------------------------|--------------------- +----------------|------------------------------------|--------------------- +----------------|----------5-----4-----------------5-|-4-----------------5- +----------------|-3--5--6-----6-----5--6--3--5--6----|----5--6--3--5--6---- +--3-----2-------|------------------------------------|--------------------- +-----4-----3~---|------------------------------------|--------------------- + + +-------------|-------------------------------------|----------------------- +-------------|-------------------------------------|----------------------- +-----4-------|----------5-----4-----------------5--|----4-----------------5 +--6-----5~---|-3--5--6-----6-----5--6--3--5--6-----|-6-----5--6--3--5--6--- +-------------|-------------------------------------|----------------------- +-------------|-------------------------------------|----------------------- + + + +--------------|-----------------|-------------------------------|---------- +--------------|-----------------|-------------------------------|---------- +-----4--------|-----------------|-------------------------------|---------- +--6-----5-----|-----------------|-------------------------------|---------- +-----------5--|---5-------------|-------------------------------|---------- +-----------3--|---3-------------|-3--3--3--3--3--3--3--3--3--3--|-4--4--4-- + + +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- +--4--4--4--4--4--4--4--4--4--|-4--4--4--4--4--4--4--4--4--4--4--4--4--4--4- + + +-----|-------------------------------------------------|------------------- +-----|-------------------------------------------------|------------------- +-----|-------------------------------------------------|------------------- +-----|-------------------------------------------------|------------------- +-----|-------------------------------------------------|----4-------------- +--4--|-1--1--1--1--1--1--1--1--1--1--1--1--1--1--1--1--|-1-----1--1--1--1-- + + +--------------------|-----------------------------------------------------| +--------------------|-----------------------------------------------------| +--------------------|-----------------------------------------------------| +--------------------|-----------------------------------------------------| +-----4--------------|-----------------------------------------------------| +--1-----1--1--1--1--|-3--3--3--3--3--3--3--3--3--3--3--3--3--3--3--3------| + + +|----------------------------------| +|----------------------------------| +|----------------------------------| +|----------------------------------| +|--/10----10~----3--2-----2--------| +|----------------------4-----4--3--| + + + |---------------|-15-19-15-19-15-15--------|-23bf--rb23bf~---| + |-18bf~---rb18--|-------------------18bf~--|-----------------| + |---------------|--------------------------|-----------------| + |---------------|--------------------------|-----------------| + |---------------|--------------------------|-----------------| + |---------------|--------------------------|-----------------| + + +|--23bf---rb23----|----------------------|----------8~--------------------| +|-----------------|--16bf~---------------|--11bf--------------------------| +|-----------------|--------------1-------|--------------------------------| +|-----------------|--------------0-------|--------------------------------| +|-----------------|----------------------|--------------------------------| +|-----------------|----------------------|--------------------------------| + + +|-15---15-15-15-15-15-15-15-15-15-15-15-15-15-15-15-15--15-15-15-15-15-15-| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|--15-15-16p15p13---------------------------------------------------------| +|-----------------16-15--13-----------------------------------------------| +|----------------------------12-12-x--15~---------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +|----------3-----2-----------------3-|----2-----------------3-----2-------| +|-1--3--4-----4-----3--4--1--3--4----|-4-----3--4--1--3--4-----4-----3~~--| + + +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +|------------------------------------|------------------------------------| +|----------3-----2-----------------3-|----2-----------------3-----2-------| +|-1--3--4-----4-----3--4--1--3--4----|-4-----3--4--1--3--4-----4-----3----| + + 1/2 +|-16-20-19-20-15-20-19-20----20-19-20-----19-20--|----18-18-18------------- +|-------------------------18----------16---------|-15----------13-15b------ +|------------------------------------------------|------------------------- +|------------------------------------------------|------------------------- +|------------------------------------------------|------------------------- +|------------------------------------------------|------------------------- + + 1/2 1/2 +-----------------------------|-------------------|------------13----------| +--13\11~----13~----15~-------|--15b------rb15----|--15b~------------------| +--------------------------0--|-------------------|--------------15-15-----| +-----------------------------|-------------------|------------------------| +-----------------------------|-------------------|------------------------| +-----------------------------|-------------------|------------------------| + + +|-13-15-16-15-13-15-13----13-------------------------------|--------------- +|----------------------16----16-13\12----------13p12-13p12-|--------------- +|-------------------------------------16-13p12-------------|-15-13-12-13-12 +|----------------------------------------------------------|--------------- +|----------------------------------------------------------|--------------- +|----------------------------------------------------------|--------------- + + 1/2 +----------------------15b----|--rb15p13h15~w/bar--|----x--16bf------------| +-----------------------------|--------------------|-----------------------| +----------------13-15--------|--------------------|-----------------------| +-15-13-12-13-15--------------|--------------------|-----------------------| +-----------------------------|--------------------|-----------------------| +-----------------------------|--------------------|-----------------------| + + +|---16bfp15--16~---|-20-18-------18-16------------------------|---15-19-15- +|------------16~---|-------20-20-------20-18-20-18-16-18p16---|16---------- +|------------------|----------------------------------------17|------------ +|------------------|------------------------------------------|------------ +|------------------|------------------------------------------|------------ +|------------------|------------------------------------------|------------ + + +----------------------|-----------------------------|---------------------| +----------------------|-------8-9p8--------8--------|---------------------| +----------------------|-----8--------10p8-----10p8\7|10p8p7----8p7--------| +--/15p13h15p13p12~~---|--10-------------------------|-------10------10~---| +----------------------|-----------------------------|---------------------| +----------------------|-----------------------------|---------------------| + + 1/2 +|------------------|----------------|-------------------------------------- +|------------------|----------------|-------------------------------------- +|----8-------------|----------------|----------------------------10h12h13-- +|----8h10/12b------|--rb12p10-------|-----------------8/10-12-13----------- +|------------------|----------10~---|---------8-10-11---------------------- +|------------------|----------------|-8-10-11------------------------------ + + +--11-13-11-13-15-11--|-13-15/16-13-14-16/18-15-16-18bf~---|-rb18--13------| +---------------------|------------------------------------|-------13------| +---------------------|------------------------------------|-------10------| +---------------------|------------------------------------|-------10------| +---------------------|------------------------------------|---------------| +---------------------|------------------------------------|---------------| + + +|-15p11-----11-15--------15-11----------11-|-16p13-------------13---------- +|-------13------------13-------13----13----|-------15-------15----15----12- +|------------------12-------------12-------|----------16-13----------12---- +|------------------------------------------|------------------------------- +|------------------------------------------|------------------------------- +|------------------------------------------|------------------------------- + + +---------------------------|-11----------11-13/16-15h16p15-13----16----16-| +--15----12-15--------------|----13----13----------------------16----15----| +-----12--------13p10h13p10-|-------12-------------------------------------| +---------------------------|----------------------------------------------| +---------------------------|----------------------------------------------| +---------------------------|----------------------------------------------| + + +|----16---------------8--|-11p8-----8-11/16------15/20bf----rb20----------| +|-13-----12~--------8----|------------------------------------------------| +|-----------------8------|-------8-----------13---------------------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| +|------------------------|------------------------------------------------| + + +|--15-16----16----16----16------16--------15--|--------------------15-19--- +|--------18----16----15----------------15-----|-16h18p16-15-----16--------- +|---------------------------17------16--------|--------------17------------ +|---------------------------------------------|---------------------------- +|---------------------------------------------|---------------------------- +|---------------------------------------------|---------------------------- + + 1 1/2 +------20bf---|-rb20\-15-14-13-11----------------------|-------------------- +--18---------|-------------------15-13-12-11----------|-------------------- +-------------|-------------------------------13-12-10-|-------------------- +-------------|----------------------------------------|-13-12-10b----rb10-- +-------------|----------------------------------------|-------------------- +-------------|----------------------------------------|-------------------- + + +----------|--------------------|------|-----------------------------|------ +-------8--|--13bf----16-----16\|9-----|-----8-9p8------8------------|------ +---7-8----|--------------------|------|--10-------10p8---10p8p7-10p8|p7---- +----------|----------13--------|------|-----------------------------|---10- +----------|--------------------|------|-----------------------------|------ +----------|--------------------|------|-----------------------------|------ + + +----------------|----------------------------------|----------------------- +----------------|----------------------------------|-11-11-11-11-13-13-13-- +--8-7-----------|--7-7-7-7-8-8-8-10-10-10/12-12-12-|----------------------- +------10-8-10~--|----------------------------------|----------------------- +----------------|----------------------------------|----------------------- +----------------|----------------------------------|----------------------- + + 1/2 +--------------------------------|------------20~------|-21~------------12b-| +--13--15-15-15/16-16-16/18-18-18|20-20-20-20----------|----------12h14-----| +--------------------------------|---------------------|-------13-----------| +--------------------------------|---------------------|--------------------| +--------------------------------|---------------------|--------------------| +--------------------------------|---------------------|--------------------| + + 1/2 1/2 +|--h13b---12b---------|-------------------------|--------------------------| +|---------------15~---|-------------------------|--------------------------| +|---------------------|---9bf~---8bf--p6---6~---|--8bf---8--6--8------6----| +|---------------------|------------------8------|-----------6--8--6h8---8--| +|---------------------|-------------------------|--------------------------| +|---------------------|-------------------------|--------------------------| + + +|-----12p9----------9-12p9-14p9-|-12p9----------9-12p9-10-11bf-rb11bf-----| +|----------10----10-------------|------10----10---------------------------| +|--6----------10----------------|---------10------------------------------| +|-------------------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| +|-------------------------------|-----------------------------------------| + + +|--rb11---9--11p9~/--21--21--21---|-21~~~~21~~~~~~~~~~~~~~~~~~21----------| +|--------------------19--19--19---|---------------------------------------| +|---------------------------------|---------------------------------------| +|---------------------------------|---------------------------------------| +|---------------------------------|---------------------------------------| +|---------------------------------|---------------------------------------| + + +|-23bf---23bf---21~---|--------18h21p18-------18--------|-------18--------- +|---------------------|--18h21----------21p18----21p18--|----------21-18--- +|---------------------|---------------------------------|-20bf------------- +|---------------------|---------------------------------|------------------ +|---------------------|---------------------------------|------------------ +|---------------------|---------------------------------|------------------ + + 1/2 1/2 +-------------------------------|------------------------------------------| +-------------------------------|--21p18-----------------------------------| +--20bf---20b---20-19----19h20--|---------20b--20-19----19~~~----\---------| +---------------------20--------|--------------------20--------------------| +-------------------------------|------------------------------------------| +-------------------------------|------------------------------------------| + + +|--12--12p9-----------------|---12--12p9----------------|--------------16-- +|------------10-------------|-------------10------------|--18p14h18p14----- +|----------------9~~~-------|-----------------9~---9----|------------------ +|---------------------------|---------------------------|------------------ +|---------------------------|---------------------------|------------------ +|---------------------------|---------------------------|------------------ + + +--------16--------16------------16|/21~~----------------|-----------------| +--18p14-----14h18-----18p14p10----|---------------------|-----------------| +----------------------------------|---------------------|-----------------| +----------------------------------|---------------------|-----------------| +----------------------------------|----------------5----|--5--------5-----| +----------------------------------|----------------3----|--3--------3-----| + + +|--/17p15p13------------------------------------------|----------|---x----| +|-------------16p15p13p12-----------------------------|----------|--------| +|--------------------------15-13-12-------------------|----------|--------| +|------------------------------------15-12------------|----------|--------| +|-------------------------------------------15-14~----|---14/17--|--------| +|-----------------------------------------------------|----------|--------| + + p.s. +|---------13~~~-----------------13~~~~~----|-----x\-----------------------| +|--16bf-----------------16bf---------------|-----x\-----------------------| +|------------------------------------------|----------------------------4h| +|------------------------------------------|------------------------------| +|------------------------------------------|------------------------------| +|------------------------------------------|------------------------------| + + +|--------------------------------|-------------------/15-15---------------| +|------------------------------6-|----------------------------------------| +|-5p4---4-7p5p4----p7p5p4----4---|--4-----/12-10--------------------------| +|-----6----------6---------6-----|-----6----------------------------------| +|--------------------------------|----------------------------------------| +|--------------------------------|----------------------------------------| + + +|--16p15p13---15p13----------/22-19----22-19-------|--19-----------16------ +|-------------------16p15p13--------21-------21----|-----21-----------18--- +|-----------------------------------------------22-|--------22-19---------- +|--------------------------------------------------|----------------------- +|--------------------------------------------------|----------------------- +|--------------------------------------------------|----------------------- + + +---------------------------------------------|----------------------------- +--------18-16--------16----------16-18/21-21-|-21-21-21-21-21-21-21-21-21-- +--19p16--------19-17----19-17-19-------------|----------------------------- +---------------------------------------------|----------------------------- +---------------------------------------------|----------------------------- +---------------------------------------------|----------------------------- + + 1/2 1/2 +-------------------|--------------------------|-20b~~~~-------------------| +-21-21-21~~~~~~~---|----------20b----rb20p18--|---------------------------| +-------------------|----x---------------------|---------------------------| +-------------------|----x---------------------|---------------------------| +-------------------|--------------------------|---------------------------| +-------------------|--------------------------|---------------------------| + + 1/2 +|--21b---rb20--23bf---rb23---|--22~-----------22----------------|---------- +|----------------------------|-------24p21-24----21-21-24-------|-21------- +|----------------------------|----------------------------22-22-|----19---- +|----------------------------|----------------------------------|---------- +|----------------------------|----------------------------------|---------- +|----------------------------|----------------------------------|---------- + + +----------------------------------------------------| +--18h20h21p20p18------------------------------------| +-----------------20-19-17-16------------------------| +-----------------------------20-18-17---------------| +--------------------------------------20-18-17------| +-----------------------------------------------18~--| + + + +Repeat 3x +||------------------------------------|------------------------------------|| +||------------------------------------|------------------------------------|| +||------------------------------------|------------------------------------|| +||------------------------------------|------------------------------------|| +||---------3-----2-----------------3--|----2-----------------3-----2-------|| +||1--3--4-----4-----3--4--1--3--4-----|-4-----3--4--1--3--4-----4-----3--3-|| + + +|-------------------------------------|------------------------------------ +|-------------------------------------|------------------------------------ +|-------------------------------------|------------------------------------ +|-------------------------------------|------------------------------------ +|----------3-----2-----------------3--|----2-----------------3-----2------- +|-1--3--4-----4-----3--4--1--3--4-----|-4-----3--4--1--3--4-----4-----3---- + + +-----------|------------------|-------------------------------------------| +-----------|------------------|-------------------------------------------| +-----------|------------------|-------------------------------------------| +-----------|------------------|-------------------------------------------| +---5---5---|-------5----------|-------------------------------------------| +---3---3---|-------3----------|-------------------------------------------| + + 1/2 +||-----13bf---rb13~----|-----------------|--------------------------------| +||---------------------|----15b----------|---rb15~------------------------| +||o--------------------|-----------------|--------------------------------| +||o--------------------|-----------------|--------------------------------| +||---------------------|-----------------|--------------------------------| +||---------------------|-----------------|--------------------------------| + + +|---------------------|---------------------------------------------------| +|---13bf-----rb13-----|--11tr13~---------------------13h15~---------------| +|---------------------|---------------------------------------------------| +|---------------------|---------------------------------------------------| +|---------------------|---------------------------------------------------| +|---------------------|---------------------------------------------------| + + +|------------|--15h16p15p13-15-15~-----|-13-11-----------------------------|| +|--p13-------|-------------------------|-------15-13-12--------------------|| +|------------|-------------------------|----------------13----13-12-13-13~-|| +|------------|-------------------------|-------------------15--------------|| +|------------|-------------------------|-----------------------------------|| +|------------|-------------------------|-----------------------------------|| + + +======================================================================= +h = hammeron Judy Letostak +p = pulloff Internet letostak@ix.netcom.com +/\ = slide Fidonet 1:202/762 +x = ghost note MetalNet 666:666/2 +t = tap (right hand) The Music Shop BBS (619)423-4970 24hrs +~ = vibrato +bf = bend full tr = trill +rb = release bend p.s. = pick scrape +dive = dive with bar b = bend / step written over note +======================================================================== +The Music Shop BBS (619)423-4970 24hrs +Guitar Tab, Bass Tab, Lyrics, Sound Files, Pictures, BRE...LORD...FidoNet... +MetalNet...In a band? Want some exposure? I have a file area for bands +will take anything that can be put on a computer...Lyrics, pictures, sound +files, gig ads...email me or call my bbs. It's free, and access is free. + diff --git a/guitar/tabs/Malmsteen/liar.tab b/guitar/tabs/Malmsteen/liar.tab new file mode 100644 index 0000000..9513b73 --- /dev/null +++ b/guitar/tabs/Malmsteen/liar.tab @@ -0,0 +1,337 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Liar" +from Trilogy +letostak@netcom.com + +fig 1 +|--------------------|--------------------|--------------------------------| +|--------------------|--------------------|--------------------------------| +|--9~--7--5~--7--9~--|--10~--9~--7--9--7--|------9~---7---5~---7-------9---| +|--------------------|--------------------|--------------------------------| +|--------------------|--------------------|--------------------------------| +|--------------------|--------------------|--------------------------------| +| | | | +| | | | +|--------------------|--------------------|--------------------------------| +|--------------------|--------------------|--------------------------------| +|--5~--4--2~--4--5~--|---7---5---4--5--4--|-------5~---4---2~---4-------5--| +|--------------------|--------------------|--------------------------------| +|--------------------|--------------------|--------------------------------| +|--------------------|--------------------|--------------------------------| + + +|-----------------|------------------------------|-------------------------| +|-----------------|------------------------------|-------------------------| +|-10~---11---13~--|----9~-----7~----5----7---9~--|-10~--9~--7---9----7~----| +|-----------------|------------------------------|-------------------------| +|-----------------|------------------------------|-------------------------| +|-----------------|------------------------------|-------------------------| +| | | | +| | | | +|-----------------|------------------------------|-------------------------| +|-----------------|------------------------------|-------------------------| +|--7~----8----9~--|----5~-----4~----2----4---5~--|--7---5---4---5----7~----| +|-----------------|------------------------------|-------------------------| +|-----------------|------------------------------|-------------------------| +|-----------------|------------------------------|-------------------------| + + +|------------------------|------------------|------------------------------| +|------------------------|------------------|------------------------------| +|--9~--7~---5---7----9---|-10~---11----13---|------17~---------(17~)-------| +|------------------------|------------------|------------------------------| +|------------------------|------------------|------------------------------| +|------------------------|------------------|------------------------------| +| | | | +| | | | +|------------------------|------------------|------------------------------| +|------------------------|------------------|------------------------------| +|--5~--4~---2---4----5---|---7~---8-----9---|------14~---------(14~)-------| +|------------------------|------------------|------------------------------| +|------------------------|------------------|------------------------------| +|------------------------|------------------|------------------------------| + + +Verse + You came to me... +|-------------------------------|----------------------------------| +|-------------------------------|----------------------------------| +|-------------------------------|----------------------------------| +|-9-----------------------------|----------------------------------| +|-7-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2--| +|-x-0-0-0-0-0-0-0-0-0-0-0-0-0-0-|-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0--| + + +|---------------------------------|13-10-12-13-12-10------------------------ +|---------------------------------|------------------12-9-10-12-10-9-------- +|---------------------------------|----------------------------------10-7-9- +|---------------------------------|----------------------------------------- +|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-|----------------------------------------- +|-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-|----------------------------------------- + + +--------------------|-----------------------------|------------------------- +--------------------|-----------------------------|------------------------- +10-9-7--------------|-----------------------------|------------------------- +-------9-6-7-9-7-6--|-----------------------------|------------------------- +--------------------|-7~--7-7-7-7-7-7-7-7-7-7-7-7-|2-2-2-2-2-2-2-2-2-2-2-2-2 +--------------------|-----0-0-0-0-0-0-0-0-0-0-0-0-|0-0-0-0-0-0-0-0-0-0-0-0-0 + + +---------|13-10-12-13-12-10------------------------------------------------| +---------|------------------12-9-10-12-10-9--------------------------------| +---------|----------------------------------10-7-9-------------------------| +---------|-----------------------------------------10-9-7------------------| +2-2-2-2--|------------------------------------------------9-6-7-9-7-6------| +0-0-0-0--|-----------------------------------------------------------------| + + +Chorus + You can't fight... +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|7--7-7-7-7-7-7-7-7-7-7-7-7-7-7--|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-------| +|5--5-5-5-5-5-5-5-5-5-5-5-5-5-5--|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-------| +|--------------------------------|-----------------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-------------------------------5-|------5---5-----------------------------| +|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-3-|------3---3--3--2--0--5-------------5---| +|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5---|----------------------3-------5--5--5---| +|---------------------------------|----------------------------------------| + + +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|--------------------------------|-----------------------------------------| +|7--7-7-7-7-7-7-7-7-7-7-7-7-7-7--|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-------| +|5--5-5-5-5-5-5-5-5-5-5-5-5-5-5--|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-------| +|--------------------------------|-----------------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-------------------------------5-|------5---5--x--------------------------| +|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-3-|------3---3--3--2--0--5-----------------| +|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5---|----------------------3-----3--5--7--3--| +|---------------------------------|----------------------------------------| + +Repeat fig 1 (Intro) + + +Interlude + +|7p4-------4-10p7--------7-12p8---------8s17p12----------12s|7p4-------4---- +|----6---6--------9----9--------10---10---------13----13----|----6---6------ +|------7------------10-------------9---------------14-------|------7-------- +|-----------------------------------------------------------|--------------- +|-----------------------------------------------------------|--------------- +|-----------------------------------------------------------|--------------- + + +10p7--------7-12p8---------8s17p12----------12|12p9----------9-13p10-------- +-----9----9--------10---10---------13----13---|-----10----10---------10----- +-------10-------------9---------------14------|--------12---------------10-- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- + + +---10s7-10p7-------7-12p8-------8|10p6-------6-8p5-------5s4h7p4-----4s5---| +10-----------8---8--------8---8--|-----6---6-------5---5---------5---------| +---------------7------------9----|-------7-----------5-------------7-------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| + + +|7p4-------4-10p7--------7-12p8---------8s17p12-----------12|s7p4-------4--- +|----6---6--------9----9--------10---10---------13----13----|-----6---6----- +|------7------------10-------------9---------------14-------|-------7------- +|-----------------------------------------------------------|--------------- +|-----------------------------------------------------------|--------------- +|-----------------------------------------------------------|--------------- + + +10p7--------7-12p8---------8s17p12----------12|12p9----------9-13p10-------- +-----9----9--------10---10---------13----13---|-----10----10---------10----- +-------10-------------9---------------14------|--------12---------------10-- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- +----------------------------------------------|----------------------------- + + +---10s7-10p7-------7-12p8-------8|10p6-------6-8p5-------5s4h7p4-----4s5---| +10-----------8---8--------8---8--|-----6---6-------5---5---------5-------10| +---------------7------------9----|-------7-----------5-------------7-------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| + + +|-------16p14p12----------17p16p14---------|19p16----------19s21~----------- +|-17~------------16-14-12----------17-16-14|------19-17-16--------------17-- +|------------------------------------------|----------------------18-18----- +|------------------------------------------|-------------------------------- +|------------------------------------------|-------------------------------- +|------------------------------------------|-------------------------------- + + +16-21p16----------19p17p16-|---------16h17p16p14---------------------------- +---------17----16----------|19p17p16-------------17p16p14----------16h17p16- +------------18-------------|------------------------------17p16p14---------- +---------------------------|------------------------------------------------ +---------------------------|------------------------------------------------ +---------------------------|------------------------------------------------ + + +-------------------------------------------------------|-------------------- +p14s13----------12-14p13p12----------------------------|-------------------- +-------14p13h14-------------14p13-11-14p13p11----11h13p|11-------11--------- +----------------------------------------------14-------|---14-13----14-13--- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- + + 1 1/2 +-------------------------------------14-16-17p16-14------------21b---------| +----------------------------14-16-17----------------17-16-14-0-------------| +----------------11-13-14s16------------------------------------------------| +-11----11-13-14------------------------------------------------------------| +----14---------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +|-(21)~------21bfr-----|19-21-17-21-16-21----21----------17-21-19-17----19-- +|----------------------|------------------19----17-19-21-------------21----- +|----------------------|---------------------------------------------------- +|----------------------|---------------------------------------------------- +|----------------------|---------------------------------------------------- +|----------------------|---------------------------------------------------- + + +17----------17----16----|--------------------------------------------------| +---21-19-------19----17-|-19p17p16-17p16-17-17~----5s7bfr------------7-5---| +------------------------|--------------------------------------------------| +------------------------|--------------------------------------------------| +------------------------|--------------------------------------------------| +------------------------|--------------------------------------------------| + + +|--------------------------------------------------------------------------| +|9-10-7-9-5-10p7-9p5-10p7-9p5-10p7-9s5-7p5p7---5---4-----------------------| +|--------------------------------------------6---6---4-6bf~r---------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +Keyboard solo + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-7--7-7-7-7-7-7-7-7-7-7-7-7-7-7--|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7--------| +|-5--5-5-5-5-5-5-5-5-5-5-5-5-5-5--|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5--------| +|---------------------------------|----------------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-------------------------------5-|-5-5-5-5-5-5----------------------------| +|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-3-|-3-3-3-3-3-3-5----5-5-5-5-5-5--7--------| +|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5---|-------------3----3-3-3-3-3-3--5--------| +|---------------------------------|----------------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7--------| +|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5--------| +|---------------------------------|----------------------------------------| + + +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +|-------------------------------5-|-5-5-5-5-5-5----------------------------| +|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-3-|-3-3-3-3-3-3-5----5-5-5-5-5-5--5--------| +|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5---|-------------3----3-3-3-3-3-3--3--------| +|---------------------------------|----------------------------------------| + + +Play fig 1 (intro) throughout chorus + + + +|-----------------------13-------13-15----13-15-17-13-15-17s18p17-15s13----| +|-15~----13-15p13-15-17----15-17-------17----------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|17-15-13s12-15-13-12-13p12-------|21p18----21s18p15----18s15p12----15p12p9- +|---------------------------15----|------20----------17----------14--------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- + + 1/2 Liar... +|---12br--|-----------|----10h13p10-t17p10h13p10-t18p10h13p10-t17p10h13p10-- +|11-------|-10~-------|s13-------------------------------------------------- +|---------|-----------|----------------------------------------------------- +|---------|-----------|----------------------------------------------------- +|---------|-----------|----------------------------------------------------- +|---------|-----------|----------------------------------------------------- + + +-t18p10h13p10-t17p10h13p10-t15p10h13p10|t15p10h13p10st15p9h12p9-t17p10h13p10 +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ + + +-t15p9h12p9-t17p10h13p10-t15p12p9h12p9h12h13p10h12p10-------------12-------| +------------------------------------------------------13p10h13s15----------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +|-13----12-13-15-12-13-15s17-13-15s17h18p15-17-18p17p15-21p15-17-18-17-15--- +|----15--------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + 1/4 1/2 1/2 1/2 1/2 1/2 +21p15-17-18-17-15|-21p15--17-18b--17p15-18s21b-|-21b----21b---21b~---21b~--- +-----------------|-----------------------------|---------------------------- +-----------------|-----------------------------|---------------------------- +-----------------|-----------------------------|---------------------------- +-----------------|-----------------------------|---------------------------- +-----------------|-----------------------------|---------------------------- + + +|13-12-10s9-------------------------------| +|-----------11-10-8-----------------------| +|-------------------10-9-7s6--------------| +|----------------------------8-7-5--------| +|----------------------------------8-7-5--| +|-----------------------------------------| + + diff --git a/guitar/tabs/Malmsteen/like_an_angel.tab b/guitar/tabs/Malmsteen/like_an_angel.tab new file mode 100644 index 0000000..04c1e04 --- /dev/null +++ b/guitar/tabs/Malmsteen/like_an_angel.tab @@ -0,0 +1,163 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Sat, 01 Feb 2003 01:59:23 -0500 +From: Anthony D'Anna +Subject: m/malmsteen_yngwie/like_an_angel.tab + +Artist: Yngwie Malmsteen +Song Title: "Like An Angel" +Album: Facing the Animal +Transcribed by: Anthony D. +Anthony127@comcast.net or P42GDell@hotmail.com +  + +Here is a version I tabbed out in regular tuning: +E A D G B E for those of us who are lazy and don't +feel like retuning and just want to jam along. I +know some people may point out errors or play a part +differently. THIS IS MY TRANSCRIPTION OF THE SONG. +NOT ALL PARTS WILL BE EXACT TO THE ALBUM so if you +would like to offer any suggestions, comments, or +questions please let me know. Use this for self +practice and entertainment only. Enjoy! +  +__________________________________________________ +h - hammer on +p - pull off +~ - vibrato +pm - muted string +9\7 - slide down(only the 9 is striked) +4/6 - slide up(only the 4 is striked) +(9) - sustain note +trill - hammer on and pull off as fast as possible +13b - play note then bend string +b13 - bend string then play note +(NOTE: I will not indicate the step to bend the string to. +Listen to the song or play it however you feel) +__________________________________________________ +  +  +  +0:29   ~        ~ +||---------------------------------------------------------- +||---------------------------------------------------------- +||-13---13\11--11/13--13b-----b13-11---\9--9/11---11\9--9/11 +||---------------------------------------------------------- +||---------------------------------------------------------- +||---------------------------------------------------------- +       ~  +------------------------------------------------------------ +-----------------------------------12/14----16--17--17/19--- +--13b--b13----------------------13-------------------------- +------------14--13b-(13)b--1114----------------------------- +------------------------------------------------------------ +------------------------------------------------------------ +  ~  ~    ~ +------------1617-------------1718----20--21--(21)b21-------- +------161719-----------171820------------------------------- +--1718-------------1819------------------------------------- +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +       ~ +--16b--b16-14---------------------------------------------|| +--------------17-16-14------------------------------------|| +----------------------------------------------------------|| +----------------------------------------------------------|| +----------------------------------------------------------|| +----------------------------------------------------------|| +  + +||---------------------------------------------------------- +||--------4-------------4----------------------------------- +||o-----5----5--------4----4----------6-------------4------- +||o---5----5---5----4----4---4------6----6--------4----4---- +||--4------------(4)-------------4-----4---4---4-----4---4-- +||---------------------------------------------------------- +  1. I've been searching for you for so long... +  +         (1st ending)     +----------------------------||------------------------------| +----------------------------||----------5-4-5-7p5-4-5-------| +------2-------------2------o||----4------------------6------| +----2----2--------4----4---o||--6---6-----------------6-----| +-4-----4---4---4-----4---4--||4-------4----------------7-6-4| +----------------------------||------------------------------| +  +(2nd ending) +|---------------------------| +|-\-------------------------| +|---\-----(pick slide)------| +|-\---\---------------------| +|---\---\-------------------| +|-----\---------------------| +  +     pm    pm  pm.. +|------------------------------------------------------------| +|------------------------------------------------------------| +|------------------------------------------------------------| +|---------2-----4-----4-----4-----4-----------2----4--------6| +|--2------2-----4---4-4---4-4-4-4-4------6----2----4---6----6| +|--2------0-----2---2-2---2-2-2-2-2------6----0----2---6----4| +|--0-------------------------------------4-------------4-----| + Like and angel you came to me... +  + +    ~       ~ +|--16----16\14--14/16--16b------16b--b16--14----14--------14-- +|--------------------------------------------17------\17------ +|------------------------------------------------------------- +|------------------------------------------------------------- +|------------------------------------------------------------- +|------------------------------------------------------------- +       ~ +-16b--b16------------------------------16-17-19/21------21b--- +-----------17--19p17-16-17----16-17-19------------------------ +---------------------------18--------------------------------- +-------------------------------------------------------------- +-------------------------------------------------------------- +-------------------------------------------------------------- +  +-16-17-19-17-16----17-16-17p16-17-------------16-------------- +----------------19--------------------16-17-19--19-17-16------ +--------------------------------------------------------18-16- +-------------------------------------------------------------- +-------------------------------------------------------------- +-------------------------------------------------------------- +          ~     ~ +---------------------------------------------15-16/18----20--- +------------------------16-17-19-----16-17-19----------------- +-------------------16-18--------17-18------------------------- +-19-18-16--16-18-19------------------------------------------- +---------19--------------------------------------------------- +-------------------------------------------------------------- +  +    ~          ~ +-20/21---21b-------------------------------------------------| +------------------19h21b-19-21-17-21--21--21--21--21---------| +------------------------------------20--18--17--18--18-------| +-------------------------------------------------------------| +-------------------------------------------------------------| +-------------------------------------------------------------| +  + +Verse ( for the second ending you can just the play the + 4 6 4 6 4 twice instead of the pick slide) +  +Chorus +  +Solo +  +(4:17) Chorus x2 +  +outro (The outro is pretty much the same as the intro with some +       variations...listen and you hear) +  + +WOW! What a great song! It took me awhile to tab everything +out and get it on the computer. Hope you enjoy! diff --git a/guitar/tabs/Malmsteen/little_savage.tab b/guitar/tabs/Malmsteen/little_savage.tab new file mode 100644 index 0000000..398331d --- /dev/null +++ b/guitar/tabs/Malmsteen/little_savage.tab @@ -0,0 +1,501 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Subject: Yngwie Malmsteen "Little Savage" + +j.letostak@giffy.com if you have any suggestions or comments. + +s=slide +b=bend (f=full) 1/2 1 1/2 steps I wrote the steps above the notes +p=pull off +h=hammer on +x=ghost note + +Yngwie Malmsteen +Little Savage +from Rising Force + + Main Riff F# Phrygian +---------|-------------|-----------------------|--------------------------| +---------|-------------|-----------------------|--------------------------| +---------|-------------|-----------------------|--------------------------| +Drums----|-------------|------4---5-----2-4----|----4---2-----------------| +---------|-------------|----4---4---4-4--------|--4---4---5-4-2-----------| +---------|--0-2-3-2----|--2-----------------2--|2----------------5-3-2----| + + Main Riff Transposed G +---------------------|---------------------|------------------------| +---------------------|---------------------|------------------------| +---------------------|---------------------|------------------------| +-----4---5-----2-4---|----4--4-2-----------|-----5---6-----3-5------| +---4---4---4-4-------|--4--4-----5-4-2-----|---5---5---5-5----------| +-2-----------------2-|2----------------5-3-|-3-----------------3----| + + +---------------------- -----------------------|----------------------------| +---------------------- -----------------------|----------------------------| +---------------------- -----------------------|----------------------------| +----5---3------------- -----5---6-----3-5-----|-----5----------------------| +--5---5---6-5-3------- ---5---5---5-5---------|---5---5-0-2-3-2------------| +3---------------6-4-3- -3-----------------3---|-3--------------------------| + +Main riff transposed B +---------------------|-----------------------|--------------|--------------| +---------------------|-----------------------|--------------|--------------| +----4---5-----2-4----|-----4---2-------------|-------%------|------%-------| +--4---4---4-4--------|---4---4---5-4-2-------|--------------|--------------| +2-----------------2--|-2---------------5-3-2-|--------------|--------------| +---------------------|-----------------------|--------------|--------------| + + +7h8p7p5-----------------------------------------5--|-7---------------------| +--------8-7-5-----------------------------5-7-8----|-----------------------| +--------------7-5-4-----------------4-5-7----------|-----------------------| +--------------------7p5p4-----4-5-7----------------|-----------------------| +--------------------------7-7----------------------|-----------------------| +---------------------------------------------------|--------0-2-3-2--------| + +Play main riff F# 2x + +Break + +10-9-7-6-7-9-10-9-7-6-7-9-10-9-7-|6----------------------------------------| +---------------------------------|--8-7-5----------------------------------| +---------------------------------|--------7-5-4-3--------------------------| +---------------------------------|----------------5-4----------------------| +---------------------------------|--------------------7-5-4----------------| +---------------------------------|--------------------------7-6-5-3-2------| + +Main Riff F# 3x + + +----------------------|-----------------------|----------------------------- +----------------------|-----------------------|----------------------------- +----------------------|-----------------------|----------------------------- +----4---5-----2-4-----|-----4---4-2-----------|----------------------------- +--4---4---4-4---------|---4---4-----5-4-2-----|----------------------------- +2------------------2--|-2-----------------5-3-|----------------------------- + + +solo Continue riffs + +---------------------------------------|-------|-16p15~-p13p11s10----------| +-------------------------------13-12~--|12~----|---------------------------| +---------10-13p12-10-------------------|-------|---------------------------| +10-12-13-------------13-12-10----------|-------|---------------------------| +---------------------------------------|-------|---------------------------| +---------------------------------------|-------|---------------------------| + + +10h11----------|----------17-19-20p19-17------------------------------------| +-------13~~----|-17-19-20----------------20p19-17-16------------------------| +---------------|-------------------------------------19-17-16---------------| +---------------|----------------------------------------------19-17-16------| +---------------|-------------------------------------------------------19-18| +---------------|------------------------------------------------------------| + + Main Riff B +-----------------|---------------------|-----------------------------------| +-----------------|---------------------|-----------------------------------| +11h14p11--t17p11-|-----4---5-----2-4---|-----4---2-------------------------| +-----------------|---4---4---4-4-------|---4---4---5-4-2-------------------| +-----------------|-2-----------------2-|-2---------------5-3-2-------------| +-----------------|---------------------|-----------------------------------| + + F# +--------------------|------------------|-----------------------------------| +--------------------|------------------|-----------------------------------| +----4---5-----2-4---|-----4------------|-----------------------------------| +--4---4---4-4-------|---4---4----------|-----4---5-----2-4-----------------| +2-----------------2-|-2----------------|---4---4---4-4---------------------| +--------------------|---------0-2-3-2--|-2-----------------2---------------| + + +----------------------|---------------------|------------------------------| +----------------------|---------------------|------------------------------| +----------------------|---------------------|------------------------------| +----4---2-------------|-----4---5-----2-4---|-----4---2--------------------| +--4---4---5-4-2-------|---4---4---4-4-------|---4---4---5-4-2--------------| +2---------------5-3-2-|-2-----------------2-|-2---------------5-3-2--------| + + +Unaccompanied Solo break + * trill +6h7p6-----6---------------------|10-9-7-6-9-7p6---7-6----------------------| +------8-7---8-7-5-8-7-5---------|---------------8-----8-7-5~---------------| +------------------------7-*6----|------------------------------------------| +--------------------------------|------------------------------------------| +--------------------------------|------------------------------------------| +--------------------------------|------------------------------------------| + + +12p10p9----10-9-------9-10p9-12p9-14p12-|-15p14p12-------------------------- +--------12------12-11-------------------|----------15-14-12-11-------------- +----------------------------------------|----------------------14-12-11----- +----------------------------------------|----------------------------------- +----------------------------------------|----------------------------------- +----------------------------------------|----------------------------------- + + +------------------------------|---------------12-14------------------------- +------------------------------|------12-14-15--------------------------12--- +---------------------------11-|12-14--------------------------11-12-14------ +14-12-11----------11-12-14----|----------------------11-12-14--------------- +---------14-13-14-------------|--------------------------------------------- +------------------------------|--------------------------------------------- + + +------12-14~-|-------------------------------------------------------------- +14-15--------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- + + +guitar solo + b 1/2 +---------14p10------------------------------------|------------------------| +------12-------12---------------------------------|------------------------| +---11-------------11----11-9----------------------|--6b--p4--s2~-----------| +12-------------------12------12p11-12p9-12-9s11p9-|------------------------| +--------------------------------------------------|------------------------| +--------------------------------------------------|------------------------| + +w/bar w/bar keyboards interlude nat harm +--------------------|----------------------|--7----------------------------- +7h8-h10-p7----------|----------------------|----7--------------------------- +-------------9-p-7--|----------------------|------7------------------------- +--------------------|----------------------|-------------------------------- +--------------------|----------------------|-------------------------------- +--------------------|----------------------|-------------------------------- + + +----------------------------| +----------------------------| +----------------------------| +---2------4-----5--2--------| +2--2--4---4--5--5--2--------| +0--x--2---x--3--x--0------2-| + + +Main Riff F# under solo guitar + +---------------|------------------------------12-14-|15p14p12--------------| +11h12p11---11~-|---------------------12-14-15-------|---------15p14h15-15bf| +---------------|------------11-12-14----------------|----------------------| +---------------|---11-12-14-------------------------|----------------------| +---------------|14----------------------------------|----------------------| +---------------|------------------------------------|----------------------| + + +------------|--------------------------------------------------------------| +p14~--12s11-|-----15--p14p12h15p14p12-14-12--------------------------------| +------------|---x---------------------------15-12-11----11-----------------| +------------|-x--------------------------------------14----14-12h14p12s----| +------------|--------------------------------------------------------------| +------------|--------------------------------------------------------------| + + w/bar palm mute +-------------------------------------------|-----------|-------------------| +-------------------------------------------|-----------|-------------------| +-------------------------------------------|-4bf--p3h4-|-------------------| +11--11h12p11s9-9h11p9s8h9p8----------------|-----------|--------------11-12| +----------------------------10p9p7---------|-----------|-------------------| +-----------------------------------10p9p7s-|-----------|-------------------| + + +------------------10-12-14-10-12-14-15-12-15-14-12-18-12-14-15-14-|12-19-12- +---------11-12-14-------------------------------------------------|--------- +---11-12----------------------------------------------------------|--------- +14----------------------------------------------------------------|--------- +------------------------------------------------------------------|--------- +------------------------------------------------------------------|--------- + + +14-15-14-12-18-12-14-15-14-12-19-12-14-15-14-12-15s|21~-----21-18-------18-- +---------------------------------------------------|--------------20p17----- +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ + + +15-------15p11-------12p9------15p12----------12-15p12---|15--12h15s18p15--- +---17p14-------14-11------11-8-------14----14----------14|----------------17 +----------------------------------------15---------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ +---------------------------------------------------------|------------------ + + +15------------12-15-18p12-15p12----12-15|t21p18p12-t21p18p12-t18p15p12---12- +---17p14---14-------------------14------|-----------------------------14---- +---------x------------------------------|----------------------------------- +----------------------------------------|----------------------------------- +----------------------------------------|----------------------------------- +----------------------------------------|----------------------------------- + + +15-17s18--17--15--|-14------------------------14-------------|--------------| +------------------|----17---15h17p15s14h15h17----17p15p14----|15-14---------| +------------------|---------------------------------------16-|------16bf-p15| +------------------|------------------------------------------|--------------| +------------------|------------------------------------------|--------------| +------------------|------------------------------------------|--------------| + + +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- +0h4h7-t12p4h7-t12p4h7-t12p4h7-t12p5h8-t12p5h8-t12p5s7-|-p0h7h10-t12p7h10---- +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- +------------------------------------------------------|--------------------- + + w/bar +--------------------------------|------------------------------------------| +--------------------------------|------------------------------------------| +t12p7h10-t12p5h8-t12p4h7-t12p7~-|-xs----x------s13--p12p10-12~-------------| +--------------------------------|-xs---------------------------------------| +--------------------------------|------------------------------------------| +--------------------------------|------------------------------------------| + + +s15s16-p15p13----------------------------------------------------|---------- +--------------16-15-13-12-13-15-13-12-----8h9p8------------------|---------- +--------------------------------------13s-------10-8-7---------7-|---------- +-------------------------------------------------------10-9-10---|-10-9-6--- +-----------------------------------------------------------------|---------- +-----------------------------------------------------------------|---------- + + palm mute +------------------------------|---------------|--------------------|-------- +------------------------------|---------------|--------------------|-------- +------------------------------|--5bf-p4--5~---|-4-5-4-7-5-8-7-10-8-|-12h13-- +5h6p5-------------------------|---------------|--------------------|-------- +------8-6-5-------5-----------|---------------|--------------------|-------- +------------8-7-8---8-7-4s3~--|---------------|--------------------|-------- + + + b 1/2 +--------------------------|------------------------------------------------| +-------------------12b----|--p10-13-12-10s8-12-10-8-7-10-8-7---------------| +p12p10--------------------|----------------------------------9-8h9p8h9-----| +-------12-10s9------------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + +--------11--p8---------8s14p11----------11s-17p14---------14s|20--19--17---- +-----12--------10p7h10---------13p10h13-----------16p13-16---|-------------- +8h11---------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- + + b 2 1/2 b 2 b1/2 +19--20b--20b---|-20b---20b~-|----------------------------------------------- +---------------|------------|----------------------------------------------- +---------------|------------|----------16-17-16-17-16----------------16-17-- +---------------|------------|-16-17-19----------------19-17-16-17-19-------- +---------------|------------|----------------------------------------------- +---------------|------------|----------------------------------------------- + + +------------|---------------------------------19h20p19p17-19p17-19p17------| +16-17-19-17-|-16-17-16---------------16-17-19-------------------------20---| +------------|----------17-16---16-17---------------------------------------| +------------|----------------x---------------------------------------------| +------------|--------------------------------------------------------------| +------------|--------------------------------------------------------------| + + +17h19h20p19p17-------------------------------------------------------------| +---------------20-17h19h20p19p17-------12h13p12----------------------------| +---------------------------------20s14----------14p12s11----11-------------| +---------------------------------------------------------14----14p13-------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +------------------------0----|---------------------------------------------- +------------------------x----|12h13p12-10-13-12-110-------10---------------- +-----------------------------|----------------------12-11----12-11-9-12-11-- +9h10p9-----------------------|---------------------------------------------- +-------12-10-9---------------|---------------------------------------------- +---------------12-12~--------|---------------------------------------------- + + harm harm +----|---7---------7--11p8s7h8p7-------------7---|------------7---|----------| +----|------7h8h10---------------10-8-7-8-10-----|7s8-12-10-7---8-|--7-------| +9-8-|-------------------------------------------|----------------|9---9-8-9bf +----|-------------------------------------------|----------------|----------| +----|-------------------------------------------|----------------|----------| +----|-------------------------------------------|----------------|----------| + +palm mute +--------------------------------------------|------------------------------- +--------------------------------------------|--------------------------10--- +12-11-9-8-9-11-12-11-9-8-9-11-12-11-9-8-9-11|12-11-9-8-9-11-12-9-11-12------ +--------------------------------------------|------------------------------- +--------------------------------------------|------------------------------- +--------------------------------------------|------------------------------- + + 1/2 w/bar +--------------|------------------------------------------------------------| +------10-12~--|-12b---t16p12-t17p12-t19p12-t16p12-t17p12-t19p12---12-------| +11-12---------|------------------------------------------------------------| +--------------|------------------------------------------------------------| +--------------|------------------------------------------------------------| +--------------|------------------------------------------------------------| + +palm mute +-----------------------------------------| +-----------------------------------------| +-----------------------------------------| +--------9-12-10-9-7-10-9-7----9-7----9---| +9-10-12--------------------10-----10-----| +-----------------------------------------| + + +----------|---------------|------------------|--------------------| +----------|---------------|------------------|--------------------| +----------|---------------|------------------|--------------------| +----------|---------------|------------------|--------------------| +7---------|-7-------------|--7---------------|-7------------------| +0---------|-0-------------|--0---------------|-0------------------| + + +-------|--------|----------|--------------------------------| +-------|--------|----------|--------------------------------| +-------|--------|----------|--------------------------------| +2------|-2------|-2--------|--------------------------------| +2------|-2------|-2--------|-------2-5-3-2---3-2-----2------| +0------|-0------|-0--------|-2-3-5---------5-----5-3---5-3-2| + + +----------------|--------------------|----------------|--------------------| +----------------|--------------------|----------------|--------------------| +----------------|---------%----------|--------%-------|--------------------| +----------------|--------------------|----------------|--------------------| +----------------|--------------------|----------------|--------------------| +0-0-0-0-0-0-0-0-|--------------------|----------------|0-0-0-0-0-2-3-2-----| + + +----------------|--------------|---------|---------------------------------| +----------------|--------------|---------|---------------------------------| +----------------|-----%--------|-----%---|---------------------------------| +----------------|--------------|---------|---------------------------------| +----------------|--------------|---------|-------2-5-3-2---3-2-----2-------| +0-0-0-0-0-0-0-0-|--------------|---------|-2-3-5---------5-----5-3---5-3-2-| + + +Outro solo + + +15p14p12----------15p14p12----15-15p14p12----|15p14p12----15p12-17p12-19p12- +---------12-17-12----------12-------------12-|---------12------------------- +---------------------------------------------|------------------------------ +---------------------------------------------|------------------------------ +---------------------------------------------|------------------------------ +---------------------------------------------|------------------------------ + + 1 1/2 +---17p15-12----|--15-12-------------12-------|------12---------------------- +12----------17-|--------17b~-----------15-12-|---------12-------------15-12- +---------------|-----------------------------|-14bf-------14bf--14-12------- +---------------|-----------------------------|------------------------------ +---------------|-----------------------------|------------------------------ +---------------|-----------------------------|------------------------------ + + +---------------|--------------------------|--------------------------------| +---------------|--------------------------|--------------------------------| +12----14-12----|--------------------------|------------------12bf----------| +---14-------14-|-12---------------9-7-----|---10-7s9-12-10-9---------------| +---------------|-----14~------s10-----10--|-9------------------------------| +---------------|--------------------------|--------------------------------| + + 1/2 1 1/2 +---------------------------------|---5-5------------s21b---|--21bf~--------| +---10----------------------s8bf--|-8-----8-5---8~----------|---------------| +12----12b----p10----12s----------|-----------7-------------|---------------| +-----------------12--------------|-------------------------|---------------| +---------------------------------|-------------------------|---------------| +---------------------------------|-------------------------|---------------| + +1/2 +21b---21-19-21|-17-21-16-21-19-21-17-21-16-21-19-21-17-21-16-17|21-19-17---- +--------------|------------------------------------------------|---------21- +--------------|------------------------------------------------|------------ +--------------|------------------------------------------------|------------ +--------------|------------------------------------------------|------------ +--------------|------------------------------------------------|------------ + trem + picking +19-17-------17-------------------------s16-----|-16p14-13------------------- +------21-19----21-19-17-17-17-17---------------|----------15-14------------- +---------------------------------19-18---------|----------------16-14-13---- +-----------------------------------------------|---------------------------- +-----------------------------------------------|---------------------------- +-----------------------------------------------|---------------------------- + + +---------------|-----------------------------------------------------------| +---------------|-----------------------------------------------------------| +------13-------|---------------------------------------------------------8-| +16-15----16-x--|----16-15-------15------------------------------------11---| +---------------|-17-------17-16----17-16-14-----16-14----------------------| +---------------|-----------------------------17-------17-16-14~------------| + + +---------------------9-14p9h14p9--t17p14p9h14p9-t16-|p14p9h14p9-t19p14p9h14p +------------------10--------------------------------|----------------------- +10-11-10-8-10--11-----------------------------------|----------------------- +----------------------------------------------------|----------------------- +----------------------------------------------------|----------------------- +----------------------------------------------------|----------------------- + + +9h14--s21~--|-21~--19-17-21-17--19-17-------17----------19-21p19p17-| +------------|-------------------------21-19----21-19-17-------------| +------------|-------------------------------------------------------| +------------|-------------------------------------------------------| +------------|-------------------------------------------------------| +------------|-------------------------------------------------------| + + +19-17----17-19-21-p17-19p17----------17------------|---17-19-21-19-17-19-17- +------21--------------------21p19-21----21-19-17-19|21---------------------- +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ + + +---------17----------17-19-21-19-17|-19-17-------17-----------------21-17-19 +21-19-21----21-17-19---------------|-------19-21----21-19-17-19--17--------- +-----------------------------------|---------------------------------------- +-----------------------------------|---------------------------------------- +-----------------------------------|---------------------------------------- +-----------------------------------|---------------------------------------- + + 1 1/2 +21-19-17----|------------------21b-----s17--16-14-19-14-|16----14-------14-- +---------21-|-19-19-19-19--17---------------------------|---17----17bf------ +------------|-------------------------------------------|------------------- +------------|-------------------------------------------|------------------- +------------|-------------------------------------------|------------------- +------------|-------------------------------------------|------------------- + + 1/2 to full fade out +----------14---------------------|------------------------------------------ +17p14--------17-14------14-------|----17b----------------------------------- +------16-----------16bf----17-16-|-14--------------------------------------- +---------------------------------|------------------------------------------ +---------------------------------|------------------------------------------ +---------------------------------|------------------------------------------ + + + diff --git a/guitar/tabs/Malmsteen/magic_mirror.tab b/guitar/tabs/Malmsteen/magic_mirror.tab new file mode 100644 index 0000000..75e3780 --- /dev/null +++ b/guitar/tabs/Malmsteen/magic_mirror.tab @@ -0,0 +1,475 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Magic Mirror" +from Trilogy +letostak@netcom.com +tune down 1/2 step + + +|-----------------------------|--------------------------------------------| +|---6------8-------5----------|------5~------------------------------------| +|---7------9-------6----------|------6~------------------------------------| +|-----------------------------|--------------------------------------------| +|-----------------------------|--------------------------------------------| +|-----------------------------|--------------------------------------------| + + +|---------------------------|-------------|--------------------------------| +|---6------8-------5--------|--6~---------|----6--------8----------5-------| +|---7------9-------6--------|--7~---------|----7--------9----------6-------| +|---------------------------|-------------|--------------------------------| +|---------------------------|-------------|--------------------------------| +|---------------------------|-------------|--------------------------------| + + +|--------------------|-------------------------|---------------------------| +|----6---------------|---6------8------5-------|----6~---------------------| +|----7---------------|---7------9------6-------|----7~---------------------| +|--------------------|-------------------------|---------------------------| +|--------------------|-------------------------|---------------------------| +|--------------------|-------------------------|-------------------13s-----| + + +|---------------------------------|--------9-12p9---------------------------| +|---------------------------------|8h10-11----------------------------------| +|-------------------------6h7-9-6-|---------------12p9-12p10-9----10p9------| +|-----------------5h7-8-5---------|----------------------------12------12-11| +|---------4h5-7-4-----------------|-----------------------------------------| +|-3h5-6-3-------------------------|-----------------------------------------| + + +1. Everyone .. +2. Now .. + +|----------------------------|--------------------------|------------------| +|----------------------------|---8------5-------6~------|---6s-------------| +|----------------------------|---9------6-------7~------|---7s-------------| +|----------------------------|--------------------------|------------------| +|----------------------------|--------------------------|------------------| +|----------------------------|--------------------------|------------------| + + +Reading .. +You .. + +|-------------------------------|--------------|---------------------------| +|-----------8-----5------6~-----|--6s----------|---8--------5-----6~-------| +|-----------9-----6------7~-----|--7s----------|---9--------6-----7~-------| +|-------------------------------|--------------|---------------------------| +|-------------------------------|--------------|---------------------------| +|-------------------------------|--------------|---------------------------| + + +believing .. +never .. + +|--------------|----------------------------|------------------------------| +|---6s---------|-----------8------5---------|----6-------------------------| +|---7s---------|-----------9------6---------|----7-------------------------| +|--------------|----------------------------|------------------------------| +|--------------|----------------------------|------------------------------| +|--------------|----------------------------|------------------------------| + + +self .. +say, .. + +|--------------|-------------|----------------------|----------------------| +|-5------------|-------------|------3---------------|----3-----------------| +|-5------------|---2---------|------2---------------|----3-----------------| +|-5------------|---3---------|------4---------------|----5-----------------| +|--------------|-------------|----------------------|----------------------| +|--------------|-------------|----------------------|----------------------| + + +power .. +high .. + +|-------------------------|-------------------------|-----------------------| +|-------------------------|-------------------------|-----------------------| +|-9--9--9--9--9--9--9--9--|-9--9--9--9--9--9--9--9--|10-10-10-10-10-10-10-10| +|-9--9--9--9--9--9--9--9--|-9--9--9--9--9--9--9--9--|-7--7--7--7--7--7--7--7| +|-7--7--7--7--7--7--7--7--|-7--7--7--7--7--7--7--7--|-----------------------| +|-------------------------|-------------------------|-----------------------| + + Can't .. + +|-------------------------|------------------------|------------------------| +|-------------------------|------------------------|------------------------| +|-9--9--9--9---9--9--9--9-|------------------------|---------------3--3--3--| +|s7--7--7--7---7--7--7--7-|-3--3--3--3--3--3--3--3-|3--3--3--3--3--3--3--3--| +|-------------------------|-1--1--1--1--1--1--1--1-|1--1--1--1--1--1--1--1--| +|-------------------------|------------------------|------------------------| + + + It's .. + It's .. + +|-------3-------3--|---------------------|---------------------------------| +|------------3-----|---------------------|---------------------------------| +|-0----------------|-5--5--5--5----------|-------------------------6h7-9-6-| +|-0----------------|-5--5--5--5----------|-----------------5h7-8-5---------| +|-2----------------|-3--3--3--3--4----4--|---------4h5-7-4-----------------| +|------------------|---------------------|-3h5-6-3-------------------------| + + + Magic .. + +|---------9-12p9----------------------------|----------------|-------------| +|-8h10-11-----------------------------------|-----6----8---5-|-6-----------| +|----------------12p9-12p10-9----10p9-------|-----7----9---6-|-7-----------| +|-----------------------------12------12-11-|12--------------|-------------| +|-------------------------------------------|----------------|---1-0-1-4---| +|-------------------------------------------|----------------|-------------| + + Magic .. + +|------------------|-------------------------|-----------------------------| +|-----8-------5----|---6---------------------|----------8-------5----------| +|-----9-------6----|---7---------------------|----------9-------6----------| +|------------------|-------3--3--3-----------|-----------------------------| +|------------------|-------1--0--1--4--------|-----------------------------| +|------------------|-------------------------|-----------------------------| + + +|-------------------|----------------------|-------------------||----------| +|---6~--------------|--------8-------5-----|---6~--------------||-8----5---| +|---7~--------------|--------9-------6-----|---7~--------------||-9----6---| +|-------------------|----------------------|--------3--3--3----||----------| +|------1--0--1--4---|----------------------|--------1--0--1--4-||----------| +|-------------------|----------------------|-------------------||----------| + +Interlude + +|-19-22p20-18s15-18-17-15-17-20p18p17s13-17-15-13-|15-18p17p15-12-15p13p12-- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +| | +| | +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-5-----------------------------------------------|------------------------- +|-------------7------------8----------5-----------|-7----------4------------ +|-------------------------------------------------|------------------------- + + +|---13----------15----------|-17----------18-------------|17h18-15h18-13h18- +|15----15-14h15----15-14h15-|----15-14h15----15-14h15p14-|------------------ +|---------------------------|----------------------------|------------------ +|---------------------------|----------------------------|------------------ +|---------------------------|----------------------------|------------------ +|---------------------------|----------------------------|------------------ +| | | +| | | +|---------------------------|----------------------------|------------------ +|---------------------------|----------------------------|------------------ +|---------------------------|----------------------------|------------------ +|---------------------------|----------------------------|------------------ +|-5----------------7--------|--8--------------10---------|10s12------------- +|---------------------------|----------------------------|------------------ + + +|----18----18-------------15-17-|-18-15-17----15---------------------------- +|-17----15----14-15-17-18-------|----------18----17-18-15-17----15---------- +|-------------------------------|----------------------------18----15-18-14- +|-------------------------------|------------------------------------------- +|-------------------------------|------------------------------------------- +|-------------------------------|------------------------------------------- +| | +| | +|-------------------------------|--6--3--5----3----------------------------- +|-------------------------------|----------6------5--6--3--5-----3---------- +|-------------------------------|-----------------------------6-----3--6--2- +|-------------------------------|------------------------------------------- +|-------0-----------------------|------------------------------------------- +|-------------------------------|------------------------------------------- + + +|--------|------------------------------| +|--------|------------------------------| +|-15-----|-14---------------------------| +|----17--|----15-17-14-15----14---------| +|--------|----------------17----16-17~--| +|--------|------------------------------| +| | | +| | | +|--------|------------------------------| +|--------|------------------------------| +|--3-----|--2---------------------------| +|-----5--|-----3--5--2--3-----2---------| +|--------|-----------------5-----4--5~--| +|--------|------------------------------| + + +Guitar solo + +|-13h15p13p11----------------11h13-15-11-13-15s16-13-15-16s18-18p15--------| +|-------------15-13p11-13-15----------------------------------------16-----| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|-------18p15-20p15-18p15----------18p15-18~-|----------------15p11-15s20--- +|----16-------------------16----16-----------|-------------13--------------- +|-15-------------------------15--------------|----------12------------------ +|--------------------------------------------|s13p12-13--------------------- +|--------------------------------------------|------------------------------ +|--------------------------------------------|------------------------------ + + +-19--20~---|-10h11p10----10------------|-11p8------11p8----13p8-11p8-------- +-----------|----------13----13~---13~--|------11p8------11-----------11-8--- +-----------|---------------------------|------------------------------------ +-----------|---------------------------|------------------------------------ +-----------|---------------------------|------------------------------------ +-----------|---------------------------|------------------------------------ + + +-11----8|h11p8----8---------------8---------------------------|------------- +----11--|------11---11p8h11p8-------11-8----------------------|-0-15-13-12h- +--------|---------------------10---------11-10-8----8bf-rb8~--|------------- +--------|----------------------------------------10-----------|------------- +--------|-----------------------------------------------------|------------- +--------|-----------------------------------------------------|------------- + + +----11----------13----15----16p13-|-15p11-13-11----------------------------- +-13----13-12-13----13----13-------|-------------15-13-12s11-13-12-11-------- +----------------------------------|----------------------------------13p12-- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +-------------|-------------------13-15------13----13h|16----13-16s19~------- +-------------|-------------13s16---------------15----|---15----------------- +-p10---------|-------10h12---------------------------|---------------------- +-----13-12~--|-12h13---------------------------------|---------------------- +-------------|---------------------------------------|---------------------- +-------------|---------------------------------------|---------------------- + + +-16----16-20bf--rb--|-19tr20--s15h16-|---15--------------------------------| +----18--------------|----------------|18----16-18-15-16----15--------------| +--------------------|----------------|------------------17----16brb-brb----| +--------------------|----------------|-------------------------------------| +--------------------|----------------|-------------------------------------| +--------------------|----------------|-------------------------------------| + + +|----------12p9-12s15p12----15s18p15----s21p17----17-21-|21b--21s--s18p17p15 +|-11p8-------------------14----------17--------20-------|------------------- +|-------------------------------------------------------|------------------- +|-------11----------------------------------------------|------------------- +|-------------------------------------------------------|------------------- +|-------------------------------------------------------|------------------- + + +----------------|----------------------------------------------------------| +-18-17-15-14-15-|-17-15-14-------------------------------------------------| +----------------|----------15p14-----14p12--------------------10-12-12bf---| +----------------|----------------s15-------14p12s11--12-11h12--------------| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| + + +|---------------| +|---------------| +|---(12)~-------| +|---------------| +|---------------| +|---------------| + + +Magic mirror + +|--------------------|-----------------------|-----------|-----------------| +|--6-----8-----5-----|---6~------------------|--8-----5--|-6---------------| +|--7-----9-----6-----|---7~------------------|--9-----6--|-7---------------| +|--------------------|-----------3-----------|-----------|-----3-----------| +|--------------------|-----------1--0--1--4--|-----------|-----1--0--1--4--| +|--------------------|-----------------------|-----------|-----------------| + + +|--------------|-------------------|-------------|-------------------------| +|---8-----5----|---6---------------|---8---5-----|--6----------------------| +|---9-----6----|---7---------------|---9---6-----|--7----------------------| +|--------------|-------3-----------|-------------|-------3--3--3-----------| +|--------------|-------1--0--1--4--|-------------|-------1--0--1--4--------| +|--------------|-------------------|-------------|-------------------------| + + +Out chorus + +|---------9-12p9----------------------------|-10~----|---------------------| +|-8h10-11-----------------------------------|--------|6s8-10~----6h8-------| +|----------------12p9-12p10p9----10p9-------|--------|---------------------| +|-----------------------------12------12-11-|--------|---------------------| +|-------------------------------------------|--------|---------------------| +|-------------------------------------------|--------|---------------------| + + slow release + 1/2 +|-----------------|-------------|-------------13----------15----17----18p13- +|-6---------------|-------------|-17-15p14-15----15p14-15----15----15------- +|---9--9b---------|----7~-------|------------------------------------------- +|-----------------|-------------|------------------------------------------- +|-----------------|-------------|------------------------------------------- +|-----------------|-------------|------------------------------------------- + + +-15-----|-13----------------------------------------------------------------| +----17--|----15-17-14-15-13-14-13-------15-14-13----------------------------| +--------|-------------------------15-14----------15p14-12-15p14p12s10-12p10-| +--------|-------------------------------------------------------------------| +--------|-------------------------------------------------------------------| +--------|-------------------------------------------------------------------| + + +|----------------------17----20p17h18p17-----------------|--------s20bf~---| +|-------------------18----18-------------20p18p17-18p17b-|rb17p15----------| +|-12p10-14p10-15p10--------------------------------------|-----------------| +|--------------------------------------------------------|-----------------| +|--------------------------------------------------------|-----------------| +|--------------------------------------------------------|-----------------| + + +|-16h17p16-15----------16h17p16-15----------16h17p16-15----|------16h17p16-15 +|-------------18-17-15-------------18-17-15-------------18-|17p15----------- +|----------------------------------------------------------|---------------- +|----------------------------------------------------------|---------------- +|----------------------------------------------------------|---------------- +|----------------------------------------------------------|---------------- + + +---------16h17p16-15-18-17-16p15-16-15-|-16h17p16-15----------16h17p16-15--- +18-17p15-------------------------------|-------------18-17-15-------------18 +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ + + +-------16h17p16-15----|-------16h17p16-15----------17p16-15-18-17p16-15-16-15| +-17p15-------------18-|-17p15-------------18-17p15---------------------------| +----------------------|------------------------------------------------------| +----------------------|------------------------------------------------------| +----------------------|------------------------------------------------------| +----------------------|------------------------------------------------------| + + +|-16h17p16-15-------------15-17-18p17p15----------15-20bf-|-rb20-18p17-15--- +|-------------18-17-15h17----------------18-17-15---------|----------------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- +|---------------------------------------------------------|----------------- + + +----------------------------------------|----------------------------------- +-18-17-15-14----------15p14-15p14----14-|-15p14----------------------------- +-------------17p14-17-------------17----|-------17-15p14----15p14----------- +----------------------------------------|----------------17-------17-15p14-- +----------------------------------------|----------------------------------- +----------------------------------------|----------------------------------- + + +-------------------------------------|-17--17-p13-p12-|-13-s10~-----10-----| +----------------------------------17-|-----17---------|-----------x----13bf| +-------------15p14-------------14----|----------------|---------x----------| +----14-15-17-------17-15p14-15-------|----------------|--------------------| +-17----------------------------------|----------------|--------------------| +-------------------------------------|----------------|--------------------| + + 1/2 +|12p10-------10------------10------------|-10----12b~--10----13p10-13p12p10- +|------13bf-----13-10---------13-10------|----10----------13---------------- +|---------------------12bf----------13b--|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- +|----------------------------------------|---------------------------------- + + +-12p10-|-13s17p15p13-15p13-------13----------17h18p17p15----17p15----------| +-------|-------------------17-15----17-15p13-------------18-------18-17----| +-------|-------------------------------------------------------------------| +-------|-------------------------------------------------------------------| +-------|-------------------------------------------------------------------| +-------|-------------------------------------------------------------------| + + +|-15----------20p18p17----18p17----17--17----------20bf-|-20~-------22bf---| +|----18p17p15----------20-------20--------20p18p17------|------------------| +|-------------------------------------------------------|------------------| +|-------------------------------------------------------|------------------| +|-------------------------------------------------------|------------------| +|-------------------------------------------------------|------------------| + + +|-22~-----22s--|18-22-20-18-15-18s17-15-17-20-18-17s13-17p15h17|15-18-17-15- +|--------------|-----------------------------------------------|------------ +|--------------|-----------------------------------------------|------------ +|--------------|-----------------------------------------------|------------ +|--------------|-----------------------------------------------|------------ +|--------------|-----------------------------------------------|------------ + + +-s12--15p13p12-13----------15----------|-17----------18-------------|17h18-- +------------------15-14h15----15-14h15-|----15-14h15----15p14h15p14-|------- +---------------------------------------|----------------------------|------- +---------------------------------------|----------------------------|------- +---------------------------------------|----------------------------|------- +---------------------------------------|----------------------------|------- + + +-15h18-13-18----18----18-------------15-17-| +-------------17----15----14s15-17-18-------| +-------------------------------------------| +-------------------------------------------| +-------------------------------------------| +-------------------------------------------| + + +|-18-15-17----15----------------------------------|------------------------| +|----------18----17-18-15-17----15----------------|------------------------| +|----------------------------18----15-18-14-15----|14----------------------| +|----------------------------------------------17-|---15-17-14-15----14----| +|-------------------------------------------------|---------------17----16-| +|-------------------------------------------------|------------------------| +| | | +| | | +|--6--3--5-----3----------------------------------|------------------------| +|-----------6-----5--6--3--5-----3----------------|------------------------| +|-----------------------------6-----3--6--2--3----|--2---------------------| +|-----------------------------------------------5-|-----3--5--2--3-----2---| +|-------------------------------------------------|-----------------5----4-| +|-------------------------------------------------|------------------------| + + +|--------------| +|--------------| +|-3~-----------| +|--------------| +|--------------| +|--------------| +| | +| | +|--------------| +|--------------| +|--------------| +|--------------| +|-5~-----------| +|--------------| + + + diff --git a/guitar/tabs/Malmsteen/making_love.tab b/guitar/tabs/Malmsteen/making_love.tab new file mode 100644 index 0000000..9a403c5 --- /dev/null +++ b/guitar/tabs/Malmsteen/making_love.tab @@ -0,0 +1,437 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) +Subject: Yngwie Malmsteen "Making Love" TAB + +Yngwie Malmsteen "Making Love" +from Eclipse +letostak@netcom.com +Judy Letostak + + + + p.s. +|---------------|--------------0---------|----------------------2----------| +|---------------|--0-----------0----5----|------------5---------3----------| +|---x\----------|--0-----------0----5----|------------5---------2----------| +|---------------|--2----------------5----|------------5---------0----------| +|---------------|--2----------------3----|------------3--------------------| +|---------14\---|--0--0--0--0------------|--0--0--0------------------------| + + +|------------2------------|-----------------------|-------------0----------| +|------------3------------|------------5----------|-0-----------0-----5----| +|------------2------------|---2---2----5------5\--|-0-----------4-----5----| +|------------0------------|---2--------5------5\--|-2-----------2-----5----| +|------------0-------4~---|------------3------3\--|-2-----------------3----| +|-0--0--0-----------------|-----------------------|-0--0--0--0-------------| + + +|--------------2----|---------------------|--------------------------------| +|--------------3----|-----------3---------|--------5-----------------------| +|----------5---2----|-----------2---------|--2--2--5-----------------------| +|----------5---0----|-----------0---------|--2-----5-----5-----------------| +|----------3---0----|-----------0-----4~--|--------------3---0-------------| +|-0--0--0-----------|--0--0--0------------|-----------------------3--------| + + +|--------------0----------|---------------2----|---------------------------| +|--0-----------0-----5----|---------------3----|------------3--------------| +|--0-----------4-----5----|----------5----2----|------------2--------------| +|--2-----------2-----5----|----------5----0----|------------0--------------| +|--2-----------------3----|----------3----0----|------------0-----4~-------| +|--0--0--0--0-------------|-0--0--0------------|---0--0--0-----------------| + + +|-----------------| +|------------5----| +|---2---2----5----| +|---2--------5----| +|-----------------| +|-----------------| + + +Verse + To be lonely is my + Every subway every + +|-------------------------|----------------------0--|-----------------------| +|--------------0----------|-------------------0-----|-0---------------------| +|-----------0-----0-------|----0-----------0--------|----0-------0----------| +|--------4-----------4----|-------4-----4-----------|-------4-------4-------| +|-----2-------------------|-3--------3--------------|----------5-------5--4-| +|--0----------------------|-------------------------|-----------------------| + + +only .. +crowded .. + +|--------------------0-----|-------------------------|----------------------| +|-----------------------0--|-------------0-----------|-0-----------------0--| +|----0--------0------------|----------0-----0--------|----0--------0--------| +|-2-----2--------2---------|-------4-----------4--0--|-------4--------4-----| +|----------4---------------|----2--------------------|----------3----------3| +|--------------------------|-0-----------------------|----------------------| + + +I .. +we .. + +|-------------------------|--0-----------0--0------------------------------| +|-0-----------------------|--------0-----------0---------------------------| +|----0--------0-----------|-----0-----0-----------0------------------------| +|-------4--------4--------|------------------------------------------------| +|----------5--------5--4--|------------------------------------------------| +|-------------------------|------------------------------------------------| + +Taking.. +My .. + +|--------------------------|----------------------7--|---------------------- +|--4--4--4--4--4--4--4--4--|-5--5--5--5--5--5--5--7--|---------------------- +|--4--4--4--4--4--4--4--4--|-4--4--4--4--4--4--4--6--|---------------------- +|--6--6--6--6--6--6--6--6--|-6--6--6--6--6--6--6-----|---------------------- +|--------------------------|-------------------------|---------------------- +|--------------------------|-------------------------|---------------------- + +do .. +close ..- + +|--7-----6-----------------|----------------9----|-------------------------| +|--7-----7-----7--7--7--6--|-6--6--6--6--6--6--6-|----------------4-----5--| +|--6--6--6--6--6--6--6--6--|-6--6--6--6--6-----6-|-4--4--4--4--4--4-----4--| +|-----6-----6--6--6--6--6--|-6--6--6--6--6-------|-6--6--6--6--6-----6-----| +|--------------------------|---------------------|-------------------------| +|--------------------------|---------------------|-------------------------| + +fantasies .. +visable, .. + p.s. +|-------------------------|-------------------------|-------x\--x\---------| +|-------5--------5--------|----------------2--------|----------------------| +|-4--4--4-----4--4-----4--|-4--3--3-----3--------6~-|--6~------------------| +|-6--6--6--6--6--6-----4--|-4--4--4--4--------4--6~-|----------------------| +|-------------------------|-------------------------|----------------------| +|-------------------------|-------------------------|-----------------12\--| + + +Still .. + +Pre-chorus +|----------------------|-----------------|---------------------------------| +|----------------------|-----------------|---------------------------------| +|---2-----5-----4---7--|--9--8--7--5--4--|-5--4--2--5---------4--------7---| +|---2-----3-----3---5--|--7--7--7--7--5--|-7--5--2--3---------3--------5---| +|---0--------0--0---0--|-----------------|--------------0--0-----0--0------| +|----------------------|-----------------|---------------------------------| + +and to .. + +|----------0--------|--------------------|----------------|----------------- +|-------------------|--------------------|----------------|----------------- +|------7------------|--2---5-----4----7--|-9--8--7--5--4--|----------------- +|------5------------|--2---3-----3----5--|-7--7--7--7--5--|----------------- +|-------------7\----|--0------0--0----0--|----------------|----------------- +|-------------------|--------------------|----------------|----------------- + +And .. + + +|---------------------------------|----------------------------------------| +|---------------------------------|-------0----7----0----0-----------------| +|-5--4--2--5---------4--------7---|---7---0----5----0----0-----------------| +|-7--5--2--3---------3--------5---|---5------------------0-----------------| +|--------------0--0-----0--0------|----------------------0-----------------| +|---------------------------------|----------------------------------------| + + +Making .. + +Chorus +|-----------------------|------------------|----------------|--------------| +|---------------0-------|--------------3---|--------3-------|--------------| +|---------------0----5--|----------5---2---|--------2-------|---2--5~------| +|--2------------2----5--|----------5---0---|--------0-------|-2----5~------| +|--2------------2----3--|----------3-------|--------0----4~-|--------------| +|--0---0--0--0----------|-0--0--0----------|-0-0--0---------|--------------| + + +Making .. + +|-----------------------|------------------|----------------|--------------| +|---------------0-------|--------------3---|--------3-------|--------------| +|---------------0----5--|----------5---2---|--------2-------|---2--5~------| +|--2------------2----5--|----------5---0---|--------0-------|-2----5~------| +|--2------------2----3--|----------3-------|--------0----4~-|--------------| +|--0---0--0--0----------|-0--0--0----------|-0-0--0---------|--------------| + + +Solo +w/echo +|-/21-18h21p18\15h18p15h18p15h18p15\12-15p12\9h12p9h12p9\|6h7-9~--/15~-----| +|--------------------------------------------------------|-----------------| +|--------------------------------------------------------|-----------------| +|--------------------------------------------------------|-----------------| +|--------------------------------------------------------|-----------------| +|--------------------------------------------------------|-----------------| + + +|-14-15-12-15----15----15----15--------|-15-14p12----14p12-------12-------12 +|-------------15----14----12----11tr12-|----------15-------15p14----14h15--- +|--------------------------------------|------------------------------------ +|--------------------------------------|------------------------------------ +|--------------------------------------|------------------------------------ +|--------------------------------------|------------------------------------ + + +------------------------|-10p9----9h10----12p9h10h12/14p10-12-14h15p14p12-14 +-15p14p12----14p12------|------12------12----------------------------------- +----------14-------15~--|--------------------------------------------------- +------------------------|--------------------------------------------------- +------------------------|--------------------------------------------------- +------------------------|--------------------------------------------------- + + +-12---------------------|--------------------------------------------------- +----15p14p12-14p12p11---|----14p12p11----------0---------------------------- +----------------------12|p11----------11h12p11---12p11p9-------------------- +------------------------|--------------------------------12p11p9-9h11p9\8--- +------------------------|-------------------------------------------------10 +------------------------|--------------------------------------------------- + + +--------|------------------|--------------15\------------------------------| +--------|---------------2--|-----------------------------------------------| +--------|--6\4--4bf-~------|--0h3~-----------------------------------------| +--------|------------------|-----------------------------------------------| +--------|------------------|--------/10---------/13------------------------| +-7-12\--|------------------|----------------------------12\----------------| + + +|-3p0-------0-3-6p3-------3-6/9p6-------6-9/12p9----------9-12-|/15--14-14-- +|-----2---2---------5---5---------8---8----------11----11------|------------ +|-------3-------------6-------------9---------------12---------|------------ +|--------------------------------------------------------------|------------ +|--------------------------------------------------------------|------------ +|--------------------------------------------------------------|------------ + + 1/2 +-12-12-14-14/21-21\13-|-13b--12----14-12-------12--------------------------- +----------------------|---------15-------15p14----15p14p12-15p14p12--------- +----------------------|---------------------------------------------15------ +----------------------|----------------------------------------------------- +----------------------|----------------------------------------------------- +----------------------|----------------------------------------------------- + + +-------------|-------------------------------------------------------------| +-15p14p12----|-11h12p11----11----------12----11----------------------------| +-------------|----------14----14p12p11----14----14p12p11-11~---------------| +----------0--|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| + + 1/2 +|--------------------------------------------------------------------------- +|-14/17p15p14\12-14h15p14p12----14b-rb14p12-14b-rb14-12-15-14-12-11-15-14-12 +|----------------------------15--------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-------|-------------------------------------------------------------------- +-11-15-|-14-12-11-15-14-12-11-15-14-12-11-15-14-12-11-15-14-12-11/17-15-14p- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- + + +----------|-------------------------------------------------/14-14-14-15p14- +-12-15-14-|-12-11-12-13-14-11-------------11h12h14p12p11-12----------------- +----------|-------------------12p11----12----------------------------------- +----------|-------------------------14-------------------------------------- +----------|----------------------------------------------------------------- +----------|----------------------------------------------------------------- + + +-p12----|---------------------------------| +-----15-|-14-12-11-12---------------------| +--------|-------------12p11p9-------------| +--------|---------------------12p11p9-8~--| +--------|---------------------------------| +--------|---------------------------------| + + +|-------4--4-------4--4-------4--|--4--------------------|-4---------------- +|-------4--4-------4--4-------4--|--4------------------4-|-4---------------- +|--6bf--------6bf--------6bf-----|-----6-4/6~----4h6h7---|----7p6p4---6~---- +|--------------------------------|-------------6---------|----------6------- +|--------------------------------|-----------------------|------------------ +|--------------------------------|-----------------------|------------------ + + +--------4-----------|-------------16--------------------------21bf---------| +------4-------------|---/16----16----19-16---------------------------------| +--6bf------7p6p4----|-4-----19-------------19-18p16----18~-----------------| +-----------------6--|-------------------------------18---------------------| +--------------------|------------------------------------------------------| +--------------------|------------------------------------------------------| + +hold bend 1/2 +|------21-21-21-21-21-21b---21-21-21-|-16-18-19p18p16-18p16----16----------- +|------------------------------------|----------------------19----19p16----- +|------------------------------------|----------------------------------18bf +|------------------------------------|-------------------------------------- +|------------------------------------|-------------------------------------- +|------------------------------------|-------------------------------------- + + +----16-------------------------------|-------------------------------------- +-16----19p16-------------------------|------------------------------16-19--- +-------------19p18p16----18p16----18-|p16~-----18p16-----18p16-18bf--------- +----------------------18-------18----|-----18~-------18~-------------------- +-------------------------------------|-------------------------------------- +-------------------------------------|-------------------------------------- + + +----16----------|---------------------|-15/17p15-13-17-15p13-12-15p13p12-10- +-16-----19bf~---|-------19bf---rb19---|------------------------------------- +----------------|---------------------|------------------------------------- +----------------|---------------------|------------------------------------- +----------------|---------------------|------------------------------------- +----------------|---------------------|------------------------------------- + + +-13p12p10-8-12p10p8-----12|p10p8-7-10p8p7-5-8--------------------|----------| +--------------------12----|-------------------8p5-6p5-8bf--rb8---|----------| +--------------------------|------------------------------------9-|-7p5h7p5h7| +--------------------------|--------------------------------------|----------| +--------------------------|--------------------------------------|----------| +--------------------------|--------------------------------------|----------| + + 1/2 +|----------------7h8h10/12-|-12h13----12~-----------7b-|-rb7~--5-----------| +|-------5h6h8/10-----------|-------15-----15-13p12-----|---------8bf~------| +|-4h5h7--------------------|---------------------------|----------------5--| +|--------------------------|---------------------------|--------------7----| +|--------------------------|---------------------------|-------------------| +|--------------------------|---------------------------|-------------------| + + +|------------------------------|--------------|------12----12--------------| +|-5-6-5-8-6-5------------------|--------------|-15bf----------15bf--/15----| +|-------------7bf--7p5--7p5bf--|----------3*--|----------------------------| +|------------------------------|--------------|----------------------------| +|------------------------------|--------------|----------------------------| +|------------------------------|--7/12\-------|----------------------------| + + +|-----------------/22-/22--|-----------/20-/20------------------------------| +|-/17-/17-/17\-------------|-12\--12\----------------12-12-12h13-12-12h13-12| +|--------------------------|--------------------14bf------------------------| +|--------------------------|------------------------------------------------| +|--------------------------|------------------------------------------------| +|--------------------------|------------------------------------------------| + + +|--------| +|-13p12--| +|--------| +|--------| +|--------| +|--------| + + + +Chorus +You're .. +Making .. + + + + +apart + +|-------------------17h19h20~\--|-14----14--14----14-14----14-14-14--------- +|----------17h19h20-------------|-17bf------17bf-----17bf-----------17bf---- +|-16h17h19----------------------|------------------------------------------- +|-------------------------------|------------------------------------------- +|-------------------------------|------------------------------------------- +|-------------------------------|------------------------------------------- + + +--------------|-------14---------------------------------------------------| +-17bf--17bf~--|-14-------17p14-------14----14------------------------------| +--------------|-16bf-----------16bf-----16----17p16p14----16~--------------| +--------------|----------------------------------------16------------------| +--------------|------------------------------------------------------------| +--------------|------------------------------------------------------------| + + +|---------------------------------------------------------------14---------| +|-/9-12-9-10h12-14-10-12-14-15-12-14-15-17-14-15-17/19-15-17-19------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|------14----------------------|---------14------------14------------------- +|-17bf------15bf~--------------|------14----17p14---------17-14------14----- +|-----------14bf~--17p16-14h16-|-16bf-------------16bf----------16bf----16bf +|------------------------------|-------------------------------------------- +|------------------------------|-------------------------------------------- +|------------------------------|-------------------------------------------- + + 1/2 1 1/2 +---------------------|------17-19-21-21b---21b----|-21b~--------17bf-------| +-14------------------|--/21-----------------------|------------------------| +----17p16p14----16~--|----------------------------|------------------------| +-------------16------|----------------------------|------------------------| +---------------------|----------------------------|------------------------| +---------------------|----------------------------|------------------------| + + +-p16p14------------|-------------------------------------------------------| +--------17-16-15~--|-0-----------------------------------------------------| +-------------------|---6-7p6---6---6-9p7p6-6---6-7p6---6---6-7p6-----------| +-------------------|---------9---9-----------9-------9---9-------9---------| +-------------------|-------------------------------------------------------| +-------------------|-------------------------------------------------------| + + +|-----------------------------------------9----10p9-|----9------------------ +|-------------9---7-9p7---10-7-9-10-10-12---12------|-12---12-10-9----9----- +|-6---6-7p6-----9-------9---------------------------|--------------11---11-- +|---9-------9---------------------------------------|----------------------- +|---------------------------------------------------|----------------------- +|---------------------------------------------------|----------------------- + + +------------------------9-12-10-9------11-12|p11----11-12p11----10-12p10---- +--------------9-9-10-12-----------9---------|----14----------14----------14- +--10h11-10h11-----------------------11------|------------------------------- +--------------------------------------------|------------------------------- +--------------------------------------------|------------------------------- +--------------------------------------------|------------------------------- + + +-10h12p10-----10-------------| +----------114----12-14p12-10-| +-----------------------------| fade out +-----------------------------| +-----------------------------| +-----------------------------| + +* natural harmonic +\/slide +h hammeron +p pulloff +p.s. pick scrape +bf bend full +rb release bend + diff --git a/guitar/tabs/Malmsteen/marching_out.tab b/guitar/tabs/Malmsteen/marching_out.tab new file mode 100644 index 0000000..a0ff5ac --- /dev/null +++ b/guitar/tabs/Malmsteen/marching_out.tab @@ -0,0 +1,183 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen +Marching Out + + +-------14-----12------10-----9-----12------10----------|---------14--------- +12--------12------12-----12----12------12------14-12-11|-12----------12----- +---11--------------------------------------------------|-----11------------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- +-------------------------------------------------------|-------------------- + + +12------10----9--15--14--12----------------|------14----12----10----9----12-- +----12-----12---------------15--14--12--11-|12-------12----12----12---12----- +-------------------------------------------|---11---------------------------- +-------------------------------------------|--------------------------------- +-------------------------------------------|--------------------------------- +-------------------------------------------|--------------------------------- + + +---10----------|------14-----12----10----9-15-14-12------------|------------ +12----14-12-11-|12--------12----12----12------------15-14-12-11|-12--------- +---------------|---11------------------------------------------|-----12-11-9 +---------------|-----------------------------------------------|------------ +---------------|-----------------------------------------------|------------ +---------------|-----------------------------------------------|------------ + + +---------------------------|----------------------------------|------------- +---------------------------|----------------------------------|------------- +---------------------------|------------4---------4-----------|------------- +12-11-9-8-9----------------|-9------4---4----4----4-----------|------------- +------------10-9-7---------|-9------4---2----4----2-----------|------------- +-------------------10-9-7-6|-7------2--------2-------------1~-|------------- + + +--2------------14t---------------------------------------------------------- +--2--------14t-----14t-14t-------------------------------------------------- +--4------------------------16t---------------------------------------------- +--4------------------------------------------------------------------------- +--2------------------------------------------------------------------------- +---------------------------------------------------------------------------- +tap harmonics while holding chord + + +rhythm fig 1 +---2--------2------------| +---------2-----2---------| +4-----4-----------4------| +---------------------4---| +-------------------------| +-------------------------| +continue fig 1 as rhythm under solo + + + + 1/2 +14-12-10-------|-9b--7-7--7-9-|-9h10p9--7~------------|--------------------| +---------------|--------------|-----------------------|--------------------| +---------------|--------------|------------------11s9-|-----9p---7--s--6---| +---------------|--------------|-----------------------|--------------------| +---------------|--------------|-----------------------|--------------------| +---------------|--------------|-----------------------|--------------------| + Scoop into note w/bar while sliding + w/bar +----------10-14-21---17---|-12s14--14-----12---10--------------------------- +------12------------------|------------------------------------------------- +---11---------------------|------------------------------------------------- +12------------------------|------------------------------------------------- +--------------------------|------------------------------------------------- +--------------------------|------------------------------------------------- + + w/bar +--------|------------|---------------|----------|--------------------------- +--------|------------|---------------|----------|--------------------------- +--------|------------|------6-----7--|--7bf-----|-6--7-p6p4h6~-------------- +--------|-11~--------|---------------|----------|--------------------------- +5-s-9---|------------|-9-------------|----------|--------------------------- +--------|------------|---------------|----------|--------------------------- + + +---------14---16-14-12s10--12-|-10s9-----10--|-12p9h10---12p9---10--7~| +------12----------------------|--------------|------------------------| +---11-------------------------|--------------|------------------------| +12----------------------------|--------------|------------------------| +------------------------------|--------------|------------------------| +------------------------------|--------------|------------------------| + + +--------------------|-----------------|------------------------------------- +--------------------|-----------------|------------------------------------- +7-s-11~------9---7--|-7bf----t12--p7~-|--7s6----7--4--6--4s6--4p2h4~-------- +--------------------|-----------------|------------------------------------- +--------------------|-----------------|------------------------------------- +--------------------|-----------------|------------------------------------- + + +--------|---------------------------7-9s10--9p7-9-|9-s-10-10s14-14s19-19s21- +--------|-----------------------7h9---------------|------------------------- +------6-|-7-9-7h9p7p6h7---6h7h9-------------------|------------------------- +6-7-9---|---------------9-------------------------|------------------------- +--------|-----------------------------------------|------------------------- +--------|-----------------------------------------|------------------------- + + +21~----|-----------14~-----14---12--10--12~--11-10s9~|---------------------- +-------|-------12------------------------------------|---------------------- +-------|----11---------------------------------------|---------------------- +-------|-12------------------------------------------|---------------------- +-------|---------------------------------------------|---------------------- +-------|---------------------------------------------|---------------------- + + +9h10h12--10--9-|-10p9--7--9--7~----------|---------------------------------- +---------------|------------------10--12-|-7--10---------------------------- +---------------|-------------------------|--------9--11--7bf---------------- +---------------|-------------------------|---------------------9~----------- +---------------|-------------------------|---------------------------------- +---------------|-------------------------|---------------------------------- + + +------------------14--p12-p10--9--10------9-------|------------------------- +--------------------------------------12-----12bf-|12--10--12--12~---------- +----11------11------------------------------------|------------------------- +12------12----------------------------------------|------------------------- +--------------------------------------------------|------------------------- +--------------------------------------------------|------------------------- + + +-------------------------------7------7-9-----------7-9-10-7-----|---------- +----------------------6s7h9-10---9h10-----10-7-9h10----------9h10|---------- +--------7-------6s7h9--------------------------------------------|---------- +------7---6h7h9--------------------------------------------------|---------- +6h7h9------------------------------------------------------------|---------- +-----------------------------------------------------------------|---------- + + +7h9-10-7-9-10-12-9-10-12s14-10-12-14s16-12-14-16s17-14-16-17-19-16-17------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + +19s21-19-17s16-19-17-16----17-16-------16----------------------------------- +------------------------19-------19-17----19-17p15-19-17-15s14-17-15-------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + +---------------------------------------------------------------------------- +14s12-15-14-12s11-14p12p10-------------------------------------------------- +---------------------------12p11s9s7p6-------------------------------------- +---------------------------------------9p7p6-------------------------------- +---------------------------------------------9p7p5p0------------------------ +---------------------------------------------------------------------------- + +w/bar listen for nuances +------|--------------------------|------------------------------------------ +------|--------------------------|------------------------------------------ +------|--------------------------|------11---------------------------------- +9s11--|-11----9---11----9---11---|-9-11-----9--9--9h11p9-----16------------- +------|--------------------------|------------------------17---------------- +------|--------------------------|------------------------------------------ + + +-------14--19p14----21------------------------------------------------------ +-----------------15----15-19-15h17------------------------------------------ +---16----------------------------------------------------------------------- +17-------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + diff --git a/guitar/tabs/Malmsteen/memories.tab b/guitar/tabs/Malmsteen/memories.tab new file mode 100644 index 0000000..eaae8d6 --- /dev/null +++ b/guitar/tabs/Malmsteen/memories.tab @@ -0,0 +1,77 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Memories" +from Odyssey +letostak@netcom.com +use capo at 5th fret + + +|-6-------6--------|-6-------6--------|-6-------0--------|6-------6--------| +|---6---6---6---6--|---6---6---6---6--|---6---6---6---6--|--6---6---6---6--| +|-----0-------0----|-----0-------0----|-----0-------0----|----0-------0----| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| +| | | | | +| | | | | +|-3-------3--------|-3-------3-3------|-3-------3--------|-3-------3-------| +|---3---3---3---3--|---3---3-------3--|---3---3---3---3--|---3---3---3---3-| +|-----0-------0----|-----0-------0----|-----0-------0----|-----0-------0---| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| + + +|-6-------6--------|-6-------6--------|-6-------6--------|-5-------5-------| +|---8---8---8---8--|---6---6---6---6--|---8---8---8---8--|---4---4---4---4-| +|-----0-------0----|-----0-------0----|-----0-------0----|-----0-------0---| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| +| | | | | +| | | | | +|-3-------3--------|-5-------5--------|-3-------3--------|-3-------3-------| +|---3---3---3---3--|---3---3---3---3--|---4---4---4---4--|---1---1---1-----| +|-----0-------0----|-----0-------0----|-----0-------0----|-----0-------0---| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| +|------------------|------------------|------------------|-----------------| + + +|15---------11----------|-11-13------13-|-8---------8-10-11-10-8-|6-------6| +|---11---11----11---11--|-------11------|---10---10--------------|--8---8--| +|------0----------0-----|---------------|------------------------|---------| +|-----------------------|----------5----|------5-----------------|----5----| +|-----------------------|---------------|------------------------|---------| +|-----------------------|---------------|------------------------|---------| +| | | | | +| | | | | +|11---------11----------|-8-10------10--|------------------------|---------| +|---8----8------8----8--|------8--------|10--------10-11-13-11-10|8---8----| +|-----------------------|---------------|----10--10--------------|-7-7-7---| +|------5----------5-----|--------5------|-------5----------------|--5---5--| +|-----------------------|---------------|------------------------|---------| +|-----------------------|---------------|------------------------|---------| + + +|8---------8-10-11-10-8-|6-------8h10p8-6---|5-5h6p5---5-|-6--8--10--8--6----| +|--10---10--------------|--8---8------------|7-------8---|-------------------| +|-----------------------|-------------------|7-----------|-------------------| +|-----5-----------------|----5--------------|0-----------|-------------------| +|-----------------------|-------------------|------------|-------------------| +|-----------------------|-------------------|------------|-------------------| +| | | | | +| | | | | +|-----------------------|-------------------|2-2h3p2---2-|-3--5--6--5--3-----| +|10-------10-11-13-11-10|8-------10h11p10-8-|3-------5---|12-15-12-15-20*----| +|---10-10---------------|--8---8------------|2-----------|-------------------| +|-----5-----------------|----5--------------|0-----------|-------------------| +|-----------------------|-------------------|------------|-------------------| +|-----------------------|-------------------|------------|-------------------| +* guitar 3 only at end + + diff --git a/guitar/tabs/Malmsteen/motherless_child.tab b/guitar/tabs/Malmsteen/motherless_child.tab new file mode 100644 index 0000000..eb76583 --- /dev/null +++ b/guitar/tabs/Malmsteen/motherless_child.tab @@ -0,0 +1,425 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Motherless Child" +from Eclipse +letostak@netcom.com Judy Letostak + + +Intro +|-------------------||-----------------------------|-----------------------| +|-------------------||-----------------------------|-----------------------| +|--x\p.s------------||o----------------------------|-----------------------| +|--x\---------------||o---5--------7--------9------|----7~-----------------| +|-------------------||----7--------9--------10-----|--------10--9--7--6----| +|----------15\13p0--||-------0--0-----0--0------0--|-0---------------------| + + +|--------------------------|---------------------------|-------------------- +|--------------------------|---------------------------|-------------------- +|--------------------------|--------------------7--9~--|-------------------- +|----------7---------------|----------7--9--10---------|-5--------7--------- +|-7--------9--------10--9--|-7--9--10------------------|-7--------9--------- +|-0--0--0-----0--0---------|---------------------------|----0--0-----0--0--- + + +---------|----------------------|-----------------------|-8-7-5------------- +---------|----------------------|-----------------------|-------8-7-5\4----- +---------|----------------------|-----------------------|---------------7-5- +---9-----|-----7~---------------|----------7---------9--|------------------- +--10-----|---------10--9--7--6--|-7--------9--------10--|------------------- +------0--|--0-------------------|-0--0--0-----0--0------|------------------- + + +-------------|| +-------------|| +--4---------o|| +----7-5p4---o|| +-------------|| +-------------|| + + +Verse + +With .. + +|------------|-----------|-------------------|-----------------------------| +|------------|-----------|-------------------|-----------------------------| +|------------|-----------|-------------------|-----------------------------| +|------------|-----------|-------------------|-----------------------------| +|--7---------|---7-------|----5--------------|-----------------------------| +|--0---0-----|-----------|---------2p0--0----|--3p0---2---0---0---0---0----| + + +knowing .. + +|---------------|--------------|-----------------|-------------------------| +|---------------|--------------|-----------------|-------------------------| +|---5~----------|--------------|--2--------------|-------------------------| +|---5~-w/bar----|--------------|--0--------------|-------------------------| +|---3~----------|--------------|-----------------|-------------------------| +|---------------|--------------|------2p0--0--0--|-3p0--2p0--0--0--0--0----| + + +Set me .. + +|-------------|-------------------|-----------------|-----------------------| +|-------------|-------------------|-----------------|-----------------------| +|-------------|-------------------|--2--------------|-----------------------| +|--2----------|--x\----x\x-p.s.---|--0--------------|-----------------------| +|--2----------|-------------------|-----------------|-----------------------| +|--------0----|-------------------|------0--2p0--0--|-3p0--2--0--0--0--0--0-| + + +inspired .. + +|---------------|--------------|----------------|--------------------------| +|---------------|--------------|----------------|--------------------------| +|---------------|--------------|----------------|--------------------------| +|---5-----------|--------------|--4-------------|--------------------------| +|---3----2------|--0-----------|--2------0------|--------------------------| +|---------------|---------3----|----------------|---3-----2----------------| + + +You .. +As .. + +||--------------|------------|---------------|-----------------------------| +||--------------|------------|---------------|-----------------------------| +||o-------------|------------|--2------------|-----------------------------| +||o---2---------|------------|--0------------|-----------------------------| +||----2---------|------------|---------------|-----------------------------| +||----0---------|------------|-------2p0--0--|-3p0--2p0--0-0-0-0-----------| + + +But .. +you .. + +|--------------|-----------------|-----------------|-----------------------| +|--------------|-----------------|-----------------|-----------------------| +|--5-----------|-----------------|--2--------------|-----------------------| +|--5-----------|-----------------|--0--------------|-----------------------| +|--3-----------|-----------------|-----------------|-----------------------| +|--------0-----|-0--0---0--0--0--|------0--2p0--0--|-3p0--2p0--0--0--0--0--| + + +I .. +You .. + +|-------------|---------------|------------------|-------------------------| +|-------------|---------------|------------------|-------------------------| +|-------------|---------------|---2--------------|-------------------------| +|--2----------|---------------|---0--------------|-------------------------| +|--2----------|---------------|------------------|-------------------------| +|--0----------|---------------|------0--2p0--0---|-3p0--2p0--0--0--0--0----| + + +Taught .. +Though ... + +|--------------|----------------|-------------|----------------------------| +|--------------|----------------|-------------|----------------------------| +|--5-----------|----------------|--4----------|----------------------------| +|--5-----------|----------------|--4----------|----------------------------| +|--3------2----|-0--------------|--2-----0----|----------------------------| +|--------------|---------3------|-------------|----3-------2---------------| + + +Chorus + +Sometimes .. + +|---------------|----------------|----------------------|------------------| +|-------0-------|----------------|---------0------------|------------------| +|-------0-------|---5------------|---------0------------|---------4~-------| +|-------2-------|---5------------|---------0------------|----4-------------| +|---------------|---3-------3\---|----------------7--6--|------------------| +|--0------------|----------------|---3------------------|------------------| + + +Left ... + +|-------------------|------------------|----------|------------------------| +|---------0---------|-------3~---------|----------|--5---------4-----------| +|---------0---------|-------2~---------|--0-------|--4---------4-----------| +|---------2---------|------------------|--0-------|--4---------4-----------| +|--2----------------|-------------0----|----------|--2---------2-----------| +|--0-----------3----|--2---------------|--3-------|------------------------| + + +Nowhere ... + +|---------------|-------------------|---------------------|----------------| +|---------0-----|-------------------|---------------------|----------------| +|--0------0-----|---5---------------|-------0-------------|---------4~-----| +|--2------2-----|---5---------------|-------0-------------|---4------------| +|---------------|---3--------3\-----|--2----------7---6---|----------------| +|---------------|-------------------|--3------------------|----------------| + + +Stumbling... + +|-------------|---------------|-------------|------------------------------| +|-------------|---------------|-------------|------------------------------| +|-------------|---------------|-------------|------------------------------| +|--5----------|---------------|--4----------|------------------------------| +|--3----2-----|---0-----------|--2-----0----|------------------------------| +|-------------|---------3-----|-------------|---3------2-------------------| + + +Ending 1 +You. + 1/2 +|------------------------|------------------|--------------------|----------| +|------------------------|------------------|--------------------|----------| +|------------------------|------------------|--------------------|11b-rbp9~-| +|-------7---------9------|----7~------------|----------7---------|----------| +|-------9--------10------|--------10-9-7-6--|-7--------9---------|----------| +|-0--0-----0--0------0---|-0----------------|-0--0--0----0--0--0-|----------| + + +|-------------------------|----------------|-------------------------------| +|-------------------------|----------------|-------------------------------| +|-------------------------|----------------|-------------------------------| +|----------7---------9----|----7~----------|----------7--------9-----------| +|----------9--------10----|-------10-9-7-6-|-7--------9-------10-----------| +|-0--0--0-----0--0-----0--|-0--------------|-0--0--0----0--0---------------| + + +|-8p7p5-------------------------|| +|-------8-7-5-------------------|| +|-------------8-7-5\4----------o|| +|---------------------7-5-4----o|| +|-------------------------------|| +|-------------------------------|| + + +Ending 2 +you. +|----------------------|------------------|--------------------------------| +|----------------------|------------------|--------------------------------| +|----------------------|------------------|--------------------------------| +|-------7--------9-----|----7~------------|--------------------------------| +|-------9-------10-----|--------10-9-7-6--|----------9--------10p0---------| +|-0--0----0--0------0--|-0----------------|-0--0--0-----0--0---------------| + + +|-20p19p17--------------------------------| +|----------20-19p17-----------------------| +|-------------------20-19-17\16-----------| +|-------------------------------19p17p16--| +|-----------------------------------------| +|-----------------------------------------| + + +Instrumental Interlude Guitar Solo + +||-----8-8h12p8-----10-12p10-8\-|-----5-5h8p5-----5h8-7-5-|------7h10p7----- +||8--8----------8-8-------------|-7-7---------7-7---------|8-8-8--------8--- +||------------------------------|-------------------------|----------------- +||------------------------------|-------------------------|----------------- +||------------------------------|-------------------------|----------------- +||------------------------------|-------------------------|----------------- + + +-7h10-8----|-0---3h7p3---3-7p5p3--|-------5h8p5-----5h8-7-5-|-------2h5p2--- +--------10-|---5-------5----------|-7-7-7-------7-7---------|-4-4-4-------4- +-----------|----------------------|-------------------------|--------------- +-----------|----------------------|-------------------------|--------------- +-----------|----------------------|-------------------------|--------------- +-----------|----------------------|-------------------------|--------------- + + ending 1 + +--2-5p2----|--7p3---7p3-----5h8p5----|-10p7---7-10p7-12-12p8---0----------|| +--------4--|------5-----5-5-------7--|------8----------------8------------|| +-----------|-------------------------|------------------------------------|| +-----------|-------------------------|------------------------------------|| +-----------|-------------------------|------------------------------------|| +-----------|-------------------------|------------------------------------|| + +ending 2 + +||-7p3---7p3---3-8p5---5-8p5---5-|-10p7---7-10p7---8-12p8---12\-|-15p0------ +||-----5-----5-------7-------7---|------8--------8--------8-----|------13--- +||-------------------------------|------------------------------|----------- +||-------------------------------|------------------------------|----------- +||-------------------------------|------------------------------|----------- +||-------------------------------|------------------------------|----------- + + +--------12-15p12----------12-|-15p12----------12-19p15----------18-| +-----13----------13----13----|-------12----12----------17----17----| +--12----------------12-------|----------12----------------16-------| +-----------------------------|-------------------------------------| +-----------------------------|-------------------------------------| +-----------------------------|-------------------------------------| + + +|-18p15-------12-15p12-15p12--------12-15p14p12-|15-14-12-11-12-14-15-14-12- +|-------17-14----------------14-----------------|--------------------------- +|-------------------------------15--------------|--------------------------- +|-----------------------------------------------|--------------------------- +|-----------------------------------------------|--------------------------- +|-----------------------------------------------|--------------------------- + + +--12h14-15-12-14-15-|-17-14-15-17-19-17-15-14-15----14h15p14----|----------- +--------------------|----------------------------17----------17-|-16-------- +--------------------|-------------------------------------------|----17p14-- +--------------------|-------------------------------------------|----------- +--------------------|-------------------------------------------|----------- +--------------------|-------------------------------------------|----------- + + +-----------14------------------|----------------0----------|---17bf--------| +-----16h17----17p16------------|----------------0----------|---------------| +--17----------------17p14------|--9bf--rb9-8~---0----------|---------------| +--------------------------16\--|---------------------------|---------------| +-------------------------------|---------------------------|---------------| +-------------------------------|--------------------12/15\-|---------------| + + 1/2 1/2 +|--rb17~-----17~---|---15-------------14-15-19p17p15----17p15-|-----15------ +|------------------|17----19-17-15h17----------------19-------|19b-----19b-- +|------------------|------------------------------------------|------------- +|------------------|------------------------------------------|------------- +|------------------|------------------------------------------|------------- +|------------------|------------------------------------------|------------- + + +------------|-15-19p17p15-19-19p17p15-14-19-15-14-12-15-14-|-12-10-14-12-10- +--15h17h19--|----------------------------------------------|---------------- +------------|----------------------------------------------|---------------- +------------|----------------------------------------------|---------------- +------------|----------------------------------------------|---------------- +------------|----------------------------------------------|---------------- + + +--8-12p8-10-12-10--8-----|-8-7------------|---------------|--------8-7------ +---------------------10--|------10bf~-----|-rb10--10bf----|-7-8h10-----10p8- +-------------------------|----------------|---------------|----------------- +-------------------------|----------------|---------------|----------------- +-------------------------|----------------|---------------|----------------- +-------------------------|----------------|---------------|----------------- + + +----------------|---14/19-19-19\--14-14-14-|-15p14p12-11-11-11-------------- +--p7------------|--------------------------|-------------------13-12p11\---- +-----9p7----9p7p|0-------------------------|-------------------------------- +---------10-----|--------------------------|-------------------------------- +----------------|--------------------------|-------------------------------- +----------------|--------------------------|-------------------------------- + + +---------------|-------------------------------------|---------------------- +---------------|-------------------------------------|---------------------- +--9-11-12-11p9-|-8-9h11-9-8h9p8----------------------|---------------------- +---------------|----------------10--8-10p9---7-------|---------------------- +---------------|---------------------------9---10p9--|--------6h7h9-9-10-12- +---------------|-------------------------------------|-10p8p7--------------- + + +--------------|----------------------------8--7--|-8h10p8p7---------19-----| +--------------|----------------------------------|----------10p8p7/--------| +---------11p9-|-11p9-8----9p8------8-------------|-------------------------| +--8-9-11------|--------10-----10-9---10-9--------|-------------------------| +--------------|----------------------------------|-------------------------| +--------------|----------------------------------|-------------------------| + + 1/2 +|-22b---22b---22bf-||------8-12p8-12p8-----8-12-10-8-|-------5h8p5-----5---- +|------------------||-8--8-------------8-8-----------|-7-7-7-------7-7------ +|------------------||o-------------------------------|---------------------- +|------------------||o-------------------------------|---------------------- +|------------------||--------------------------------|---------------------- +|------------------||--------------------------------|---------------------- + + +--8p7--5--|-----7h10-7-----7-10-8-7\-|-0---3-7p3---3-7-5-3-|-----5h8p5------ +----------|-8-8--------8-8-----------|---5-------5---------|-7-7-------7---- +----------|--------------------------|---------------------|---------------- +----------|--------------------------|---------------------|---------------- +----------|--------------------------|---------------------|---------------- +----------|--------------------------|---------------------|---------------- + + +--5-8-7-5-|-----2h5p2---2-5p2----|-7p3---3-7p3---5h8p5---5h8p5---|-10p7---7- +----------|-4-4-------4-------4--|-----5-------5-------7-------7-|------8--- +----------|----------------------|-------------------------------|---------- +----------|----------------------|-------------------------------|---------- +----------|----------------------|-------------------------------|---------- +----------|----------------------|-------------------------------|---------- + + +--10p7----12p8--12-|| +--------8----------|| +------------------o|| +------------------o|| +-------------------|| +-------------------|| + +2nd guitar play a diatonic third below + + +|-------------------------|-------------------------|------------------------| +|-13-17-16-17-13-17-16-17-|-12-17-16-17-12-17-16-17-|-11-11-14-11-11-11-14-11| +|-------------------------|-------------------------|------------------------| +|-------------------------|-------------------------|------------------------| +|-------------------------|-------------------------|------------------------| +|-------------------------|-------------------------|------------------------| + + +|-11tr12--|---7tr8------|----------|---------------------------------------| +|---------|-------------|--7tr8----|---------------------------------------| +|---------|-------------|----------|---------------------------------------| +|---------|-------------|----------|---------------------------------------| +|---------|-------------|----------|---------------------------------------| +|---------|-------------|----------|---------------------------------------| + + + +Chorus + + +Outro solo + +|-----------------------------------14-11-12-15-12-15-17-14-17-|-19~-------- +|--------------------------13-11h12----------------------------|------------ +|--------12-11-12----------------------------------------------|-----12----- +|-14~-14----------14-14-14-------------------------------------|--------14-- +|--------------------------------------------------------------|------------ +|--------------------------------------------------------------|------------ + + +---------------------------------------------------------------------------- +-----------------------------------------------------------------------15-17 +--12/14-16h17p16p14----------17/19p17p16-------19h20p19p17-19-17-17-16------ +--------------------17p16p14-------------19p17------------------------------ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + +-----------------|---------------------------------------------------------- +-15-15-----------|---------------------------------------------------------- +-------17-17-17--|-16-14-14-16p14-------17p16p14----------------------14-16- +-----------------|----------------17-16----------17-16-17-16-14-16-17------- +-----------------|---------------------------------------------------------- +-----------------|---------------------------------------------------------- + + tremolo picking--- +------------------|--12---14----15---17----19~-\15-14---------|------------| +------------------|------------------------------------17-15\-|------------| +--14-12----12-----|-------------------------------------------|------------| +--------14----14--|-------------------------------------------|----2-------| +------------------|-------------------------------------------|----2-------| +------------------|-------------------------------------------|----0-------| + + + +The Music Shop BBS +(619)423-4970 + diff --git a/guitar/tabs/Malmsteen/never_die.tab b/guitar/tabs/Malmsteen/never_die.tab new file mode 100644 index 0000000..bfe20cb --- /dev/null +++ b/guitar/tabs/Malmsteen/never_die.tab @@ -0,0 +1,158 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +From: "Daniele" +Subject: m/malmsteen_yngwie/never_die.tab +Date: Mon, 28 Jan 2002 12:21:38 +0100 + +Yngwie Malmsteen +Never Die + +from The Seventh Sign + Music: Yngwie = Malmsteen + Words: Yngwie = Malmsteen + Transcribed by Daniele = Nasini + +tune down 1/2 step + + repeat 3 times +||-----------|-----------------|-----------------|------------|| +||-----------|-----------------|-----------------|------------|| +||:----------|-----------------|-----------------|-----2-2.--:|| +||:----------|-------3---------|---3-------------|-----2-2.--:|| +||---3-5-3-2-|-3-2-0---0-0-3-0-|-0---0-0-3-5-3-2-|-3-2-0-0.---|| +||-----------|-----------------|-----------------|------------|| + + + repeat 3 times +||------------------|-----------------|-----------------|------------|| +||------------------|-----------------|-----------------|------------|| +||:-----------------|-----------------|-----------------|-----2-2.--:|| +||:-----------------|-------3---------|---3-------------|-----2-2.--:|| +||--0-0-0-0-3-5-3-2-|-3-2-0---0-0-3-0-|-0---0-0-3-5-3-2-|-3-2-0-0.---|| +||------------------|-----------------|-----------------|------------|| + + +||------------|-----------|-----------|-----------|-----------|----------= -| +||------------|-----------|-----------|-----------|-----------|----------= -| +||:-----------|-----------|-----------|-----------|-----------|--------= ---| +||:-----------|-----------|-----------|-----------|-----------|--------= ---| +||------------|-----------|-----------|-----------|-----------|----------= -| +||--0000-0000-|-0000-0000-|-0000-0000-|-0000-0000-|-0000-0000-|-0000-0000= -| + +1. Forever and ever ... +2. you mortal fools ... + + +3. don't come and tell m.... +4. no walls in this world ... + + +|-----------------|-------------------|| +|-----------------|-------------------|| +|-----------------|--------7-9-10-9--:|| +|---------------6-|-7-9-10-----------:|| +|---------5-7-8---|-------------------|| +|-4-5-7-8---------|-------------------|| + + end) + win) + -ing) + want) + + +Chorus + +E =3D 13321x +B =3D x355xx +F# =3D 35543x +G# =3D x022xx + + E B B F# F# G# =20 +||---------------|-----------------|-------------------------------| +||-----------1---|-----------------|-------------------------------| +||:----------2---|-----------------|-------------------------------| +||:----------3---|-----------2-----|---------------------3---------| +||-----------3---|--------3-----3--|----------2----3-0-0---0-0-0-0-| +||-----------1---|-----------------|--3-----5----------------------| + + like the sky I'm perpetual I'll ... + +|-----------------|-----------|------------------|-----------------| +|-----------------|-----------|------------------|-----------------| +|-----------------|-------2.--|------------------|-----------------| +|-----------------|-------2.--|------------------|-------3---------| +|-0-0-0-0-3-5-3-2-|-3-2-0-0.--|-0-0-0-0--0-0-0-0-|-3-0-0---0-0-0-0-| +|-----------------|-----------|------------------|-----------------| +|-----------------|------------|| +|-----------------|------------|| +|-----------------|-------2.--:|| +|-----------------|-------2.--:|| +|-0-0-0-0-3-5-3-2-|-3-2-0-0.---|| +|-----------------|------------|| + + + +Spoken + + +|---------------6---------------3-----------------| +|-5-------------4---------------------------------| +|-------------------------------5--------10-------| +|-7---------------------------------------8-------| +|-------------------------------------------------| +|-------------------------------------------------| + "your gods may come and go eons ... + + +|--------------------6------3---------------------------------------| +|-5------------------4----------------------------------------------| +|---------------------------5-------------------10------------------| +|-7----------------------------------------------8------------------| +|-------------------------------------------------------------------| +|-------------------------------------------------------------------| + + but in the end i know I shall ...... + + + +Interlude + + +|-12-8---------8--12-8--------8-|-10-7--------7--10-7--------7-| +|------10---10---------10--10---|------9----9---------9----9---| +|---------9---------------9-----|--------10-------------10-----| +|-------------------------------|------------------------------| +|-------------------------------|------------------------------| +|-------------------------------|------------------------------| + + +|-8-5-------5--8-5-------5-|-7-4-------4--7-4-------4-| +|-----5---5--------5---5---|-----6---6--------6---6---| +|-------5------------5-----|-------7------------7-----| +|--------------------------|--------------------------| +|--------------------------|--------------------------| +|--------------------------|--------------------------| + + +|-10-7--------7--10-7--------7-|-12-8---------8--12-8---------8-| +|------9----9---------9----9---|------10---10---------10---10---| +|--------10-------------10-----|---------9---------------9------| +|------------------------------|--------------------------------| +|------------------------------|--------------------------------| +|------------------------------|--------------------------------| + + +|-14-11----------11--14-11----------11---16-| +|-------13----13-----------13----13---------| +|----------14-----------------14------------| +|-------------------------------------------| +|-------------------------------------------| +|-------------------------------------------| + +Transcribed by Mikko Kosonen +mkosonen@hotmail.com diff --git a/guitar/tabs/Malmsteen/now_your_ships_are_burned.tab b/guitar/tabs/Malmsteen/now_your_ships_are_burned.tab new file mode 100644 index 0000000..c0212e6 --- /dev/null +++ b/guitar/tabs/Malmsteen/now_your_ships_are_burned.tab @@ -0,0 +1,606 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen - Now Your Ships are Burned +from Rising Force +letostak@ix.netcom.com +FidoNet 1:202/762 +MetalNet 666:666/2 + + +|----x--x----------|--------------------------------|---------------------| +|----x--x----------|--------------------------------|---------------------| +|------------------|-----4--5~--4p2-----------------|----------%----------| +|------------------|-----------------5--4--2--1-----|---------------------| +|------------------|--2--------------------------3--|---------------------| +|------------x\----|--------------------------------|---------------------| + +Repeat riff +|-----------------|--------------------|---------------|------------------| +|-----------------|--------------------|---------------|------------------| +|-----------------|--------------------|---------------|------------------| +|-----------------|--------------------|---------------|------------------| +|-----------------|--------------------|---------------|------------------| +|-----------------|--------------------|---------------|------------------| + + +|-----------|---------------|-----------------------7h8p7p5----------------| +|-----------|---------------|----------------4h5h7-----------8p7--5h7p5\4~-| +|-----------|---------------|---------4h5h7--------------------------------| +|--4--------|--4------5-----|--4h5h7---------------------------------------| +|--2--------|--2------3-----|----------------------------------------------| +|-----------|---------------|----------------------------------------------| + + +||-----------------------------------------------|------------------------- +||-----------------------------------------------|------------------------- +||*----------------------------------------------|------------------------- +||*------------1h2p1-----------1-----------5--4--|----------1h2p1---------- +||----0--2--3---------3--2--0-----3--2--0--3--2--|-0--2--3---------3--2--0- +||-----------------------------------------------|------------------------- + + +--------------------------|-----------------------------------------------| +--------------------------|-----------------------------------------------| +--------------------------|-----------------------------------------------| +--1-----------------------|----------1h2p1-----------1-----------5--4-----| +-----3--2--0--------------|-0--2--3---------3--2--0-----3--2--0--3--2-----| +--------------3--2--0--2--|-----------------------------------------------| + + +|--------------------------------------------------|----------------------- +|--------------------------------------------------|----------------------- +|--------------------------------------------------|----------------------- +|----------1h2p1-----------1-----------------------|----------------------- +|-0--2--3---------3--2--0-----3--2--0--------------|----------1h2p1-------- +|--------------------------------------3--2--0--2--|-0--2--3---------3--2-- + + Solo fill 1 +------------------------|---8p7p5-----------------------------------------| +------------------------|----------8p7p5----------------------------------| +------------------------|-----------------8--4h5p4------------------------| +------------------------|---------------------------7p5p4~----------------| +-----1------------------|-------------------------------------------------| +--0-----3--2--0--3--2~--|-------------------------------------------------| + + +Fill 2 +|-----8p5----------5p2--------| +|----------7------------4-----| +|-------------8------------5--| +|-----------------------------| +|-----------------------------| +|-----------------------------| + + Now your + +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|-----------1h2p1-----------1----------------|----------1h2p1--------------| +|--0--2--3---------3--2--0-----3--2--0--3--2-|-0--2--3---------3--2--0--2--| + + Ships ... + +|----------------------------------|--------------------------------------| +|----------------------------------|--------------------------------------| +|----------------------------------|--------------------------------------| +|--4----4----5----------5----------|-4----4----2--------------------------| +|--2----2----3----0--0--3----0--0--|-2----2----0-----3p2------------------| +|----------------------------------|----------------------5p3p2p0---------| + +creep ... + +|---------------------------------|---------------------------------------| +|---------------------------------|---------------------------------------| +|---------------------------------|---------------------------------------| +|--4----4----5----------5---------|--4----4----2--------------------------| +|--2----2----3----0--0--3---0--0--|--2----2----0--------------------------| +|---------------------------------|---------------------------0--2--------| + +rip ... + +|------------------------|--------------------------|----------------------| +|------------------------|--------------------------|----------------------| +|------------------------|--------------------------|----------------------| +|------------------------|-1------------------------|----------------------| +|-------------------2--3-|----3--2----3--2~---------|-----------------2--3-| +|-3--2--0--3--2~---------|---------------------0--2-|-3--2--0--3--2~-------| + + 1. Within .. +death .. + 2/3. When .. + +|-------------------------|-----------------------------------------------| +|-------------------------|-----------------------------------------------| +|-------------------------|-----------------------------------------------| +|--1-----------4----------|-4----4----5----------5------------------------| +|-----3--2--3--2----------|-2----2----3----0--0--3----0--0----------------| +|-------------------------|-----------------------------------------------| + +center .. +you .. + +|------------------------------|------------------------------------------| +|------------------------------|------------------------------------------| +|------------------------------|------------------------------------------| +|-4----4----2------------------|-4----4----5----------5-------------------| +|-2----2----0----3p2-----------|-2----2----3----0--0--3-------------------| +|---------------------5p3p2p0--|----------------------------0--0----------| + +driving .. +making.. + +|-----------------------|-------------------------------------------------| +|-----------------------|-------------------------------------------------| +|-----------------------|-------------------------------------------------| +|--4--4----5------------|-------------------------------------------------| +|--2--2----3------------|-------------------------------------2--3--------| +|-----------------0--2--|--3--2--0--3--2~---------------------------------| + +death .. +hear ... + +|-----------------------|------------------------|-----------------------|| +|-----------------------|------------------------|-----------------------|| +|-----------------------|------------------------|----------------------*|| +|-1---------------------|------------------------|-1--------------------*|| +|----3--2--3--2~--------|------------------2--3--|----3--2---3--2--------|| +|------------------0--2-|-3--2--0---3--2~--------|-----------------------|| + + + +|-19h20p19-17-------------------------------------8p7p5-------------------| +|-------------20\-12h13p12-10---------------------------8p7p5/------------| +|------------------------------12\----------------------------------------| +|-----------------------------------9h10p9-7------------------------------| +|--------------------------------------------xpx--------------------------| +|-------------------------------------------------------------------------| + + 1/2 +|-15-14-12-11------------------------------------------|------------------- +|-------------13-12-10---------------------------------|------------------- +|----------------------12-11-9-8-----------------------|--4b~----rb4------- +|--------------------------------10-9-7----------------|------------------- +|---------------------------------------10-9p7-7h9p7\6-|------------------- +|------------------------------------------------------|------------------- + + +-------------------|------------------12p11-14p12-15p14-12------12--14----| +-------------------|---------13p12p10-----------------------15------------| +---------9p8-11p9--|-12p11p9----------------------------------------------| +--7-9-10-----------|------------------------------------------------------| +-------------------|------------------------------------------------------| +-------------------|------------------------------------------------------| + + +|-15/20p19p17-19------17----------------------------|---------------------- +|-----------------20-----19-20-17-19----17----------|---------------------- +|------------------------------------20----19-20-19-|-17\16----16-17------- +|---------------------------------------------------|-------19-------19---- +|---------------------------------------------------|---------------------- +|---------------------------------------------------|---------------------- + + 2 +----------------------20b--|--rb20--19h20--17--19----17----|------------17- +---------------------------|----------------------20----19-|20-17-19-20---- +---------------------------|-------------------------------|--------------- +--17p16--17-17~--p0--------|-------------------------------|--------------- +---------------------------|-------------------------------|--------------- +---------------------------|-------------------------------|--------------- + + +--20-19-17----19-17-------17-17----------------------|--------------------- +-----------20-------20-19-------20-19-17-20-19-17-16-|-19-17-16----17p16--- +-----------------------------------------------------|----------19--------- +-----------------------------------------------------|--------------------- +-----------------------------------------------------|--------------------- +-----------------------------------------------------|--------------------- + + +---------------------------------------------|----------------------------- +----------17h18------------------------------|----------------------------- +--x-16-16-------18-17-16-14-17-16-14------16-|-14-------14----------------- +-------------------------------------17-x----|----17-16----17-16-14-17-16-- +---------------------------------------------|----------------------------- +---------------------------------------------|----------------------------- + + 1/2 +------------|--20-17-----17-14h17p14--------11h14p11--------11------------| +------------|------------------------16--------------13--------x----------| +------------|--------20-----------------17--------------14--------14--x---| +--14-13b~---|-------------------------------------------------------------| +------------|-------------------------------------------------------------| +------------|-------------------------------------------------------------| + + 1/2 1/2 +|-14-11-------11-8--------8-5------11-8-------|--11b----rb11----11b~~~~---- +|-------13-10------10p7\------7-4--------10-7-|---------------------------- +|---------------------------------------------|---------------------------- +|---------------------------------------------|---------------------------- +|---------------------------------------------|---------------------------- +|---------------------------------------------|---------------------------- + + +--12-14-15p14p12\11-|-14p12p11-----12p11----------------------------------| +--------------------|----------13--------13-12-10-------------------------| +--------------------|------------------------------12p11p9--12~----\------| +--------------------|-----------------------------------------------------| +--------------------|-----------------------------------------------------| +--------------------|-----------------------------------------------------| + + 1 1/2 +|-12p7------15p12-------19p15---------21bf--|-rb21--21bf----21b~----------| +|------8----------12----------17------------|-----------------------------| +|--------9-----------12----------16---------|-----------------------------| +|-------------------------------------------|-----------------------------| +|-------------------------------------------|-----------------------------| +|-------------------------------------------|-----------------------------| + + +|--15h19p15-t20p15~-----t19p15--|-t17p15p14-t17p15p14-t15p14p12-t15p14p12\- +|-------------------------------|------------------------------------------ +|-------------------------------|------------------------------------------ +|-------------------------------|------------------------------------------ +|-------------------------------|------------------------------------------ +|-------------------------------|------------------------------------------ + + +--10h12h14p12p10\8h10h12p10p8---------7h8p7p5------------------------------ +------------------------------12p10p8---------8p7p5---------8p7p5---------- +----------------------------------------------------8p7p5\4-------8p7p5\4-- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + + 1/2 release with bar +------------|-------------------------------------------------------------| +--5p4-------|----------------------4b-------------------------------------| +--------7---|--5p4p2---5p4p2----------------------------------------------| +------------|-----------------x-4-----------------------------------------| +------------|-------------------------------------------------------------| +------------|-------------------------------------------------------------| + + +Interlude + +|---------------------|----------------|----------------------------------| +|---------------------|----------------|----------------------------------| +|---2-----------------|----------------|----------------------------------| +|---2-----------------|----------------|-----------3--2-------------------| +|---0-----3--2--------|----------------|--------2--------5--3--2----------| +|---------------5--3--|--1~------------|--0--4----------------------------| + + +|------------------------------|------------------|------------------------| +|------------------------------|------------------|------------------------| +|------------------------------|-2~------4h5p4-2--|-1-2-1---1--------------| +|------------------------3--5--|------------------|-------3---3-2-3-2-0-2-0| +|------------------------------|------------------|------------------------| +|--5--4--5--7--5--7--8~--------|------------------|------------------------| +| | | | +| | | | +|------------------------------|------------------|------------------------| +|------------------------------|------------------|------------------------| +|------------------------------|---------1h2p1----|------------------------| +|------------------------------|-3~------------3--|-2-3-2---2--------------| +|------------------------5--7--|------------------|-------5---5-3-5-3-2-3-2| +|--5--4--5--7--5--7--8~--------|------------------|------------------------| + + +|-------------------------------------------------|------------------------ +|-------------------------------------------------|------------------------ +|-------------------------------------------------|------------------------ +|-------------------------------------------------|------------------------ +|-2h3h5p3p2p0-2h3h5p3p2p0-2h3h5p3p2p0-2h3h5p3p2p0-|-2h3h5p3p2p0-7-x-3p2p0-- +|-------------------------------------------------|------------------------ +| | +| | +|-------------------------------------------------|------------------------ +|-------------------------------------------------|-0dive-w/bar--r0-------- +|-------------------------------------------------|------------------------ +|-------------------------------------------------|------------------------ +|-------------------------------------------------|------------------------ +|--5----------------------------------------------|------------------------ + + +|----------------------| +|----------------------| +|----------------------| +|----------x--x--x--x--| +|----------x--x--x--x--| +|-5p3p1p0--------------| +| | +| | +|----------------------| +|----------------------| +|----------------------| +|----------------------| +|----------------------| +|----------------------| + +Guitar Solo + 2 +|---------------------------17h20-20p17-------|-20b--17----19----20p19--20-| +|---------------------17p13-------------17----|----------------------------| +|--------9-14p9-17p14----------------------17-|----------------------------| +|-----10--------------------------------------|----------------------------| +|-12------------------------------------------|----------------------------| +|---------------------------------------------|----------------------------| + + 1/2 +|-----19--17----|--19b---rb19~----|-12h15-t17/19p15p12-----|--------------- +|---------------|-----------------|--------------------15--|--(15)dive-w/bar +|---------------|-----------------|------------------------|--------------- +|---------------|-----------------|------------------------|--------------- +|---------------|-----------------|------------------------|--------------- +|---------------|-----------------|------------------------|--------------- + + +----------------------------12--16p15p13|h15p13\12-12h13p12p10------------- +--return(15)-13\12~------13-------------|----------------------13p12p10---- +----------------------14----------------|---------------------------------- +----------------------------------------|---------------------------------- +----------------------------------------|---------------------------------- +----------------------------------------|---------------------------------- + + +--12h13p12p10------------------------------------------|------------------- +--------------13p12p10------------13p12p10-------------|--10p9------------- +-----------------------13p12p10px----------13p12p11p10\|9------12-10p9----- +-------------------------------------------------------|---------------12-- +-------------------------------------------------------|------------------- +-------------------------------------------------------|------------------- + + +-------------------------------|------------------------------------------| +-------------------------------|------------------------------------------| +--10p9-------------------------|------------------------------------------| +-------12-10p9h10p9------------|------------------------------------------| +--------------------12p11h12~--|------(12)~-------------------------------| +-------------------------------|------------------------------------------| + + +|---------|----------|------------|--0tr1-----------|---0tr1--------------| +|---------|----------|------------|-----------------|---------------------| +|------4/7|/9~-------|------------|-----------------|---------------------| +|----x----|----------|------------|-----------------|---------------------| +|--x------|----------|------------|-----------------|---------------------| +|---------|----------|------------|-----------------|---------------------| + + +|---0tr1------|---0tr1----|--------------------------|--------------------| +|-------------|-----------|--------------------------|--------------------| +|-------------|-----------|--4--4-4b-4b-4b-4b--%--%--|-4------------------| +|-------------|-----------|--------------------------|----7--6--3--2--0---| +|-------------|-----------|--------------------------|--------------------| +|-------------|-----------|--------------------------|--------------------| +| | | | | +| | | | | +|-------------|-----------|--------------------------|--------------------| +|-------------|-----------|--------------------------|--------------------| +|-------------|-----------|--------------------------|--------------------| +|-------------|-----------|--7-x-x-x-x-7-x-x-x-x-7-xx|-6--3--2------------| +|-------------|-----------|--------------------------|----------5--3--2---| +|-------------|-----------|--------------------------|--------------------| + +(a)============================ +|-------------------------------|----------------|------------------------| +|-------------------------------|----------------|------------------------| +|-4--4-4b-4b-4b-4b-4b-4b--%--%--|--4~--2--1--2~--|-repeat (a)-------------| +|-------------------------------|----------------|------------------------| +|-------------------------------|----------------|------------------------| +|-------------------------------|----------------|------------------------| +| | | | +|(b)=========================== | | | +|-------------------------------|----------------|------------------------| +|-------------------------------|----------------|------------------------| +|-------------------------------|----------------|------------------------| +|-7--x-x-x-x-7--x-x-x-x-7--x-x--|---6~--3--6--7~-|----repeat (b)----------| +|-------------------------------|----------------|------------------------| +|-------------------------------|----------------|------------------------| + + +|--------------------|--------------|-------------------------------------| +|--------------------|--------------|-------------------------------------| +|--4-----------------|--repeat (a)--|--4~--2--1--2~-----------------------| +|-----7--6--3--2--0--|--------------|-------------------------------------| +|--------------------|--------------|-------------------------------------| +|--------------------|--------------|-------------------------------------| +| | | | +| | | | +|--------------------|--------------|-------------------------------------| +|--------------------|--------------|-------------------------------------| +|--------------------|--------------|-------------------------------------| +|--6--3--2-----------|--repeat (b)--|--6~--3--6--7~-----------------------| +|-----------5--3--2--|--------------|-------------------------------------| +|--------------------|--------------|-------------------------------------| + + + +|-------------------------------------------------------------------------- +|-12p10-t12p10p7-t13p10-t13p10p7-t16p10-t16p10p7-t13p10-t13p10p7-t12p10---- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- + + +--------------------------|------------------------------------------------ +-t12p10p7-t13p10-t13p10p7-|-t16p10-t16p10p7-t17p10p7-t16p10-t16p10p7-t17p10 +--------------------------|------------------------------------------------ +--------------------------|------------------------------------------------ +--------------------------|------------------------------------------------ +--------------------------|------------------------------------------------ + + 1/2 +---------------------------------------|----------------------------------| +--t17p10p7-t19p10-t19p10p7-t10bf--t20--|-t20p10bf~~---\x/19b--------------| +---------------------------------------|----------------------------------| +---------------------------------------|----------------------------------| +---------------------------------------|----------------------------------| +---------------------------------------|----------------------------------| + + 1/2 +|--------------------17-19-20p19p17----19-|-17-------17-------------------- +|-19b---19--17-19-20----------------20----|----20-19----120-19-17-20-19-17- +|-----------------------------------------|-------------------------------- +|-----------------------------------------|-------------------------------- +|-----------------------------------------|-------------------------------- +|-----------------------------------------|-------------------------------- + + +--------------------------------------------|------------------------------ +--16-19-17-16-------19-17-16----------------|------------------------------ +--------------17p16----------17p16----------|-16--------------------------- +-----------------------------------19p17p16-|----19-17-16\14-16-14--------- +--------------------------------------------|----------------------17p15-14~ +--------------------------------------------|------------------------------ + + 1 1/2 +--x/21b-----|-17-19-20-19-17------------------------------------------------| +------------|----------------20-19-17---------------------------------------| +------------|-------------------------20-19-17-16---------------------------| +------------|-------------------------------------19p17p16------------------| +------------|----------------------------------------------19-18-18h19p18h19| +------------|---------------------------------------------------------------| + + +|------------------------------------------------15-19h20p19p17-|--19~~---- +|---------------------------------------16h17h19----------------|---------- +|---------------------16h17p16-16h17h19-------------------------|---------- +|------16h17p16h17h19-------------------------------------------|---------- +|-p18-----------------------------------------------------------|---------- +|---------------------------------------------------------------|---------- + + +-------------------x/20---|-19p17h19----17---------------------------------| +----20p19p17\16-----------|----------20----20p19p17--16h17h19p17p16--------| +--------------------------|-----------------------------------------17p16~-| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + +|----------17-19-20-19-17----19-17-------17----------------|--------------- +|-17-19-20----------------20-------20-19----20-19-17-20-19-|-17\16-19-17-16 +|----------------------------------------------------------|--------------- +|----------------------------------------------------------|--------------- +|----------------------------------------------------------|--------------- +|----------------------------------------------------------|--------------- + + +-------------------------------------------------|------------------------- +----17-16----------16----------------------------|------------------------- +-17-------17p16h17----17p16----17-16-------16----|------------------------- +----------------------------19-------19-17----19-|-17p16--19-17p16\14-17p16 +-------------------------------------------------|------------------------- +-------------------------------------------------|------------------------- + + +-----------------------15p12--------19p15--------20p|19p17----19p17-------- +---------------17p12---------12-----------17--------|------20-------20p19h- +---------------------x----------x------------16-----|---------------------- +--p14-17p16px---------------------------------------|---------------------- +----------------------------------------------------|---------------------- +----------------------------------------------------|---------------------- + + 1 1/2 1 1/2 1 1/2 +-----17-----------21b----21b----21b---|-20bf---21bf~-----------20bf-------| +--20----20p19p17----------------------|-----------------------------------| +--------------------------------------|-----------------------------------| +--------------------------------------|-----------------------------------| +--------------------------------------|-----------------------------------| +--------------------------------------|-----------------------------------| + + +|--20bf--rb20---19h20--17h20-15h20-14h20-12h20-|----------17-19p15--------- +|----------------------------------------------|-16-17-19----------19-17--- +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- + + +---------------|---------------------------------------5h7h8p7p5----------| +---------------|----------------------------------------------------------| +-16-14bf~--14--|--14p12\11---------11h12p11----11~------------------------| +---------------|-----------14p12px----------14----------------------------| +---------------|----------------------------------------------------------| +---------------|----------------------------------------------------------| + + +----------------------------------------| +--8-7-5-4-------------------------------| +----------7-5-4-------------------------| +----------------7-5-4-------------------| +----------------------7-6--3p2p0--------| +---------------------------------3p2p0--| + + +|----------------------|----------------------------|---------------------| +|----------------------|----------------------------|---------------------| +|--2-------------------|----------------------------|---------------------| +|--2-------------------|----------------------------|-------3-2-----------| +|--0-------3--2--------|-------------------------x\-|-----2-----5-3-2-----| +|----------------5--3--|-1-1-1-1-1-1-1-1-1-1-1-1/---|-0-4-----------------| + + +|------------------------------|------------------|------------------------| +|------------------------------|------------------|------------------------| +|------------------------------|-2~------4h5p4-2--|-1-2-1---1------4h5p4-2-| +|------------------------3--5--|------------------|-------3---3-2----------| +|------------------------------|------------------|------------------------| +|--5--4--5--7--5--7--8~--------|------------------|------------------------| +| | | | +| | | | +|------------------------------|------------------|------------------------| +|------------------------------|------------------|------------------------| +|------------------------------|---------1h2p1----|----------------1h2p1---| +|------------------------------|-3~------------3--|-2-3-2---2------------3-| +|------------------------5--7--|------------------|-------5---5-3----------| +|--5--4--5--7--5--7--8~--------|------------------|------------------------| + + +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|-1-2-1---1------4h5p4-2-|-1-2-1---1--------------|------------------------| +|-------3---3-2----------|-------3---3-2-3-2---2--|------------------------| +|------------------------|-------------------5---5|-3----------------------| +|------------------------|------------------------|------------------------| +| | | | +| | | | +|------------------------|------------------------|------------------------| +|------------------------|------------------------|------------------------| +|----------------1h2p1---|------------------------|------------------------| +|-2-3-2---2------------3-|-2-3-2---2--------------|------------------------| +|-------5---5-3----------|-------5---5-3-5-3-2-3-2|------------------------| +|------------------------|------------------------|-5----------------------| + + +======================================================================= +h = hammeron Judy Letostak +p = pulloff Internet letostak@idx.netcom.com +/\ = slide Fidonet 1:202/762 +x = ghost note MetalNet 666:666/2 +t = tap (right hand) The Music Shop BBS (619)423-4970 24hrs +~ = vibrato +bf = bend full +rb = release bend +dive = dive with bar + +======================================================================== +The Music Shop BBS (619)423-4970 +Guitar Tab, Bass Tab, Sound files, Guitar Lessons, Lyrics, Music programs +Sound players, pictures, graphic viewers... +...LORD...BRE...Fidonet...MetalNet...TradeWars...IronOx +In a band? I have a file area for bands, send me your lyrics, pictures, +biographies...Anything, all styles of music welcome, any location. I have +access to a color scanner, send sase to get the picture back. Email me +for my snail mail address. Can be sent via email or FidoNet pictures can +be decoded, please use pkzip (2.04g) for sound files, these can be encoded +also. + + \ No newline at end of file diff --git a/guitar/tabs/Malmsteen/on_the_run_again.tab b/guitar/tabs/Malmsteen/on_the_run_again.tab new file mode 100644 index 0000000..6f7cd35 --- /dev/null +++ b/guitar/tabs/Malmsteen/on_the_run_again.tab @@ -0,0 +1,470 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "On the Run Again" +from Marching Out +letostak@netcom.com +tune down 1/2 step + +Fig 1 +Main Riff + +|-------------------------|--------------------------------| +|-------------------------|--------------------------------| +|-------2--------1-----2--|-------2-----4---2---1----------| +|-------2--------2-----2--|-------2-----4---2---2----------| +|-------------------------|-------------------------4------| +|-2--2-----2--2-----2-----|-2--2-----2--------------2------| + + +Intro solo +continue to play fig 1 + + +|----------19bf--|-19bf~-----------------|---------------------------------| +|--19~-----------|-----------------14-14-|-17bf~------17p14h17--17bf~------| +|----------------|-----------------------|---------------------------------| +|----------------|-----------------------|---------------------------------| +|----------------|-----------------------|---------------------------------| +|----------------|-----------------------|---------------------------------| + + +|-------------17p14-19p14----14-20p14-19-14-|----14-19-17-14----17-14------- +|--/14--18p14-------------17----------------|-17-------------17-------17bf-- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- + + 1/2 +-14-------------------|--14---------------------------|-------------14------ +----17-14----14-------|-----17-14---------------------|----------15----15-17 +----------18----17b~--|-----------17-16-14----16-14~--|-13/14h16------------ +----------------------|--------------------16---------|--------------------- +----------------------|-------------------------------|--------------------- +----------------------|-------------------------------|--------------------- + + +----------------------|----------------------------------------------------| +-14-15-14----------14-|-15-19-17-15-14-17-15-14----15-14-------14----------| +----------16-14-16----|-------------------------16-------16-14----16-14----| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| + + 1/2 1 1/2 +|----------------------------17p14----/21p16-------|-21b~---rb21--21b------| +|-------------------14-19p14-------14--------19----|-----------------------| +|-13-16-14-13----14-----------------------------18-|-----------------------| +|-------------16-----------------------------------|-----------------------| +|--------------------------------------------------|-----------------------| +|--------------------------------------------------|-----------------------| + + +Verse +1. Outcast .. +2. Renegade .. + +|--------------------|----------------------------|------------------------| +|--------------------|----------------------------|------------------------| +|------------7-------|--------2-------------------|------------------------| +|-4----------7-------|--------2------2---------4--|-(4)--------------4-----| +|-4----------5-------|--------0------2---------4--|-(4)--------------4-----| +|-2------------------|---------------0---------2--|-(2)--------------2-----| + + +Surrounded .. +vigilatnes ... + +|--------------------|-------------------------|---------------------------| +|-------0------------|-------------------------|---------------------------| +|--------------------|--------------7----------|----------2----------------| +|----------4-----4---|--(4)---------7----------|----------2---2------4-----| +|----------------4---|--(4)---------5----------|----------0---2------4-----| +|----------------2---|--(2)--------------------|--------------0------2-----| + + + Never .. + For .. + + nat harm ------- pick slide palm mute +|-----------7-----------|--------------------|-----------------------------| +|-----------7----7------|--------------------|-----------------------------| +|----------------7------|--------------------|-----------------------------| +|--(4)---------------4--|-----x\-------------|-----------------------------| +|--(4)---------------4--|-----x\-------------|-----------------------------| +|--(2)---------------2--|--------------------|-2--2--2--2--2--2--2--2------| + +on .. +a .. + +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|------------%----------|-----------%------------| +|-------------------------|-----------------------|------------------------| +|-------------------------|-----------------------|------------------------| +|-2--2--2--2--2--2--2--2--|-----------------------|------------------------| + + +of .. +He's ... + + -------------------------|-----------------------|------------------------| + -------------------------|-----------------------|------------------------| + -------------------------|------------%----------|-----------%------------| + -------------------------|-----------------------|------------------------| + -------------------------|-----------------------|------------------------| + -2--2--2--2--2--2--2--2--|-----------------------|------------------------| + + + Now .. + Where .. + + -------------------------|-------------------|----------------------------| + -------------------------|-------------------|----------------------------| + ----------------------7--|--(7)--------------|-------7--------------------| + ----------------------7--|--(7)--------------|-------7--------------------| + ----------------0--3--5--|--(5)--------------|-5--5--5--5--5--5--4--2-----| + -2--2--2--2--2-----------|-------------------|----------------------------| + + + ---------------------|-----------------------|----------------------------| + ---------------------|-----------------------|----------------------------| + -----------------9---|-(9)------10-----------|-----2------1-------2-------| + -----------------9---|-(9)------11-----------|-----2------2-------2-------| + --(2~)-----------7---|-(7)-------8---------x-|----------------------------| + ---------------------|---------------------2-|--2-----2-------2------2----| + + ontinue with main riff (fig 1) throughout solo + + + + olo + + ---------9-10-12-13----------10-11-13\14----------11-12-14/|15----------12- + -9h10h12------------10-11-13-------------11-12-14----------|---12-13-15---- + -----------------------------------------------------------|--------------- + -----------------------------------------------------------|--------------- + -----------------------------------------------------------|--------------- + -----------------------------------------------------------|--------------- + + hold bend------------- + -13-15-16----------13-14-16/17-14-15-17-19-|------------------------------- + ----------13-14-16-------------------------|19bf--19-19-19-19-19-19-19-19-- + -------------------------------------------|------------------------------- + -------------------------------------------|------------------------------- + -------------------------------------------|------------------------------- + -------------------------------------------|------------------------------- + + -------- + -------------|--------------------|-14-16-12-16-11-16----16-14-16-12-16-11- + 19-19-19~----|--19bf~-----19bf~---|-------------------14------------------- + -------------|--------------------|---------------------------------------- + -------------|--------------------|---------------------------------------- + -------------|--------------------|---------------------------------------- + -------------|--------------------|---------------------------------------- + + + 16-|----16----16-14-16-12-16-11-16----16-------------|--------------------- + ---|-14----12----------------------14----12-16p12----|-/17h19p14\16-16h17-- + ---|----------------------------------------------14-|--------------------- + ---|-------------------------------------------------|--------------------- + ---|-------------------------------------------------|--------------------- + ---|-------------------------------------------------|--------------------- + + + ----------------------------------11-16p11----------------|-12h14p12\11---- + p16\14----14-------------------12----------12----11h12h14-|---------------- + -------16----16p15p13-15p13-13----------------13----------|---------------- + ----------------------------------------------------------|---------------- + ----------------------------------------------------------|---------------- + ----------------------------------------------------------|---------------- + + + 11h12p11\9---------------------------------------|------------------------- + -----------12p11p9----11p9\7h9p7---7-------------|--------------9-12------- + -------------------11------------9---9p8p6-------|-11bf-rb-11bf------11bf-- + -------------------------------------------9p8p6-|------------------------- + -------------------------------------------------|------------------------- + -------------------------------------------------|------------------------- + + + --------9-11-12-|-14p11-------11-12----11-14p12p11----12p11---------------| + 9-11-12---------|-------12-14-------14-------------14-------14bf~---------| + ----------------|---------------------------------------------------------| + ----------------|---------------------------------------------------------| + ----------------|---------------------------------------------------------| + ----------------|---------------------------------------------------------| + + + ------------------------|-11----12-11-14-11-16-11/18p16-19-18-16----18-16-| + ------11----12p11-14-12-|----14----------------------------------19-------| + --/13----13-------------|-------------------------------------------------| + ------------------------|-------------------------------------------------| + ------------------------|-------------------------------------------------| + ------------------------|-------------------------------------------------| + + + ----------16-18-19-20-21bf---21--20--19--|-18--17--16---------------------- + -19bf------------------------------------|---------------19bf--19-16-19---- + -----------------------------------------|--------------------------------- + -----------------------------------------|--------------------------------- + -----------------------------------------|--------------------------------- + -----------------------------------------|--------------------------------- + + + ------------|--13h16---t19p16p14-t18p16p14p12h14-t19|p16p14-t18p16p14p12h14 + ------------|---------------------------------------|---------------------- + -18bf--18~--|---------------------------------------|---------------------- + ------------|---------------------------------------|---------------------- + ------------|---------------------------------------|---------------------- + ------------|---------------------------------------|---------------------- + + scoop w/bar--------- + t20p16p14h16-t18p16p14p12h16\-|-15---12---15---15--15--11--12--11--|----11- + ------------------------------|------------------------------------|-14---- + ------------------------------|------------------------------------|------- + ------------------------------|------------------------------------|------- + ------------------------------|------------------------------------|------- + ------------------------------|------------------------------------|------- + + + --------------------------------|-------11-14bf--14bf---------------------| + 12-14p12p11-12p11---------------|----12-----------------------------------| + ------------------13~-----------|-13--------------------------------------| + -----------------------------13-|-----------------------------------------| + -----------------------11-14----|-----------------------------------------| + --------------------------------|-----------------------------------------| + + + -12p11p9-----------------------------------------------|------------------- + ---------12p11p9----11---------------------------------|------------------- + -----------------11-----13p11p9-11p9\8-----------------|------------------- + ---------------------------------------11p9h11--8h9p8--|----8-9----8h9h11-- + -------------------------------------------------------|-11-----11--------- + -------------------------------------------------------|------------------- + + + ---------------------------------------|-11p9p7---------------------------- + -------------------------------9h11h12-|--------11-9p7--------------------- + ---------------8h9p8----8\9h11---------|---------------11p9p9h9p9\6-------- + p9p8----8h9h11-------11----------------|----------------------------8-6\5-- + -----11--------------------------------|----------------------------------- + ---------------------------------------|----------------------------------- + + + --------------| + --------------| + ---------6bf--| + 6---5---------| + --------------| + --------------| + +Interlude + + +|---------------|-------------------------------------|------------|-------| +|---------------|-------------------------------------|------------|-------| +|----6b---------|--6b---6b----6b---6b--6b--6b---------|-rb----4bf--|-(4~)--| +|---------------|-------------------------------------|------------|-------| +|---------------|-------------------------------------|------------|-------| +|---------------|-------------------------------------|------------|-------| +| | | | | +| | | | | +|---------------|-------------------------------------|------------|-------| +|---------------|-------------------------------------|11\12--9~---|-------| +|---------------|-------------------------------------|------------|-------| +|---------------|----------------------------8--9-----|------------|-------| +|----------6----|---------------------6--11-----------|------------|-------| +|-4--6--7-------|------------4--6--7------------------|------------|-------| + + + +|------------|----11--9--7--6--7----------|--------------------------------| +|------------|--------------------9/11----|--------12----------------------| +|------------|----------------------------|-------------9~-----------------| +|------------|----------------------------|--------------------------------| +|------------|----------------------------|--------------------------------| +|------------|----------------------------|--------------------------------| +| | | | +| | | | +|------------|--------------------11--9---|-7--12--11--12--11--9--9~-------| +|------------|-----------------9----------|--------------------------------| +|------------|--------------8-------------|--------------------------------| +|------------|--------8--9----------------|--------------------------------| +|---------4--|-6--11----------------------|--------------------------------| +|---6--7-----|----------------------------|--------------------------------| + + +|---------------------------| +|---------------------------| +|--(9~)---------------------| +|---------------------------| +|---------------------------| +|---------------------------| +| | +| w/bar--- | +|-(9~)----------------------| +|-------12--11--9/11/12-----| +|---------------------------| +|---------------------------| +|---------------------------| +|---------------------------| + + +|-------------|------------------------------|------------------------------| +|-------------|----9--11-12--11-9--7---------|-9--7--9~---------------------| +|-------------|-----------------------9------|------------------------------| +|-------------|------------------------------|------------------------------| +|-------------|------------------------------|------------------------------| +|-------------|------------------------------|------------------------------| +| | | | +|He's ...| +|-------------|------------------------------|------------------------------| +|-------------|---------------------11--12---|14-12-11----12p11-------11----| +|-------------|--------------8--13-----------|---------13-------13-11----13-| +|-------------|--------8--9------------------|------------------------------| +|-------------|-6--11------------------------|------------------------------| +|-4--6--7--9--|------------------------------|------------------------------| + + +|-------------------|-----------------------|------------------------------| +|-(9~)--------------|-----------------------|------------------------------| +|-------------------|-----------------------|------------------------------| +|-------------------|-11--8--9--11--8--9----|------------------------------| +|-------------------|-----------------------|------------------------------| +|-------------------|-----------------------|------------------------------| +| | | | +| head | |..| +|-------------------|-----------------------|------------------------------| +|-------------------|-x---------------------|------------------------------| +|-11-x-13-11-9-8----|----x------------------|------------------------------| +|-------------------|--------9--8--9--8~----|--------------------8--9------| +|-------------------|-----------------------|-----------6--11--------------| +|-------------------|-----------------------|-4-h-6--7---------------------| + + pick scrape +|-----------------------------|-----------------|---------------|-----------| +|-----------------------------|-----------------|---------------|-----------| +|-----------------------------|----------8------|---------------|-----------| +|-----------------------------|----------8------|--x\-----------|-----------| +|-----------------------------|----------6------|--x\-----------|-----------| +|-----------------------------|-----------------|---------------|-----------| +| | | | | +|notion ..| | +|-----------------------------|------15---------|-15--------15--|----15~----| +|----9--12--14--12-11---------|-18bf------------|-18b--18b------|-18b-------| +|-8--------------------13--13~|-----------------|---------------|-----------| +|-----------------------------|-----------------|---------------|-----------| +|-----------------------------|-----------------|---------------|-----------| +|-----------------------------|-----------------|---------------|-----------| + + +|------------------|------------------|------------------------------------| +|------------------|------------------|------------------------------------| +|--------------4~--|---3--------------|-3--4--6--6bf-----------------------| +|-6~--5--6--4------|------6--5--6~----|------------------------------------| +|------------------|------------------|------------------------------------| +|------------------|------------------|------------------------------------| +| | | | +| |He's ...| +|------------------|------------------|------------------------------------| +|------------------|------------------|----4--5--5bf-----------------------| +|-4~--3--4---6bf---|---6--4--3--4~----|-6----------------------------------| +|------------------|------------------|------------------------------------| +|------------------|------------------|------------------------------------| +|------------------|------------------|------------------------------------| + + +|-------------------------|--------------|---------------------------------| +|-------------------------|--------------|---------------------------------| +|--rb6---p4--6~--4--------|-----------4~-|-----3---------------------------| +|-------------------4--6~-|--5--6--4-----|-----------6-------5---6~--------| +|-------------------------|--------------|---------------------------------| +|-------------------------|--------------|---------------------------------| +| | | | +| on ...| +|-------------------------|--------------|---------------------------------| +|--rb5---p4--5~--4--------|--------------|---------------------------------| +|-------------------6--4~-|--3--4--6--6bf|------6----4-------3---4~--------| +|-------------------------|--------------|---------------------------------| +|-------------------------|--------------|---------------------------------| +|-------------------------|--------------|---------------------------------| + + +|---------------|-----------------------------|----------------------------| +|---------------|-----------------------------|----------------------------| +|-3--4--6--6bf--|-rb6----4---6~----4----------|---------------3----4~------| +|---------------|---------------------4--6~---|-----5---6------------------| +|---------------|-----------------------------|----------------------------| +|---------------|-----------------------------|----------------------------| +| | | | +| | | | +|---------------|-----------------------------|----------------------------| +|----4--5--5bf--|-rb5----4---5~----4----------|----------------------------| +|-6-------------|---------------------6--4~---|-----3---4-----6----6bf-----| +|---------------|-----------------------------|----------------------------| +|---------------|-----------------------------|----------------------------| +|---------------|-----------------------------|----------------------------| + + +|-------------------|-------------------|----------------------------------| +|-------------------|-------------------|---------------------x------------| +|--3----------------|---3--4---6bf------|--rb6--p4---6~-------4---3--------| +|-------6----5--6~--|-------------------|------------------------------6~--| +|-------------------|-------------------|----------------------------------| +|-------------------|-------------------|----------------------------------| +| | | | +|He's ...| +|-------------------|-------------------|----------------------------------| +|-------------------|------4---5bf------|--rb5---p4--5~-------4------------| +|--6----4----3--4~--|---6---------------|-------------------------6----4~--| +|-------------------|-------------------|----------------------------------| +|-------------------|-------------------|----------------------------------| +|-------------------|-------------------|----------------------------------| + + +|---------------|------------------|-----------------|----------------------| +|---------------|------------------|-----------------|-------------------9~-| +|--------3--4~--|--3---------------|-3---4-----6bf---|--rb6-p4--6~--4--3----| +|--5--6---------|------6----5--6---|-----------------|----------------------| +|---------------|------------------|-----------------|----------------------| +|---------------|------------------|-----------------|----------------------| +| | | | | +| | | | | +|---------------|------------------|-----------------|--------------------7~| +|---------------|------------------|-----4-----5bf---|--rb5--p4--5~--4------| +|--3--4--6bf----|--6---4----3--4---|-6---------------|------------------6---| +|---------------|------------------|-----------------|----------------------| +|---------------|------------------|-----------------|----------------------| +|---------------|------------------|-----------------|----------------------| + + +|---(7~)--------------------|---------------------|-----------|-------------| +|---(9~)--------------------|---------------------|-----------|-------------| +|---------------------------|---------------------|-----------|-------------| +|---------------------------|---------------------|-----------|-------------| +|---------------------------|---------------------|-----------|-------------| +|---------------------------|---------------------|-----------|-------------| +| | | | | +| | | | | +|---------------------------|---------------------|-----------|-------------| +|---------------------------|---------------------|-----------|-------------| +|-4----3------4-------------|---4-----6\4--3------|-4--3--4---|---4---6-4-3-| +|-4----4------4-------------|---4-----6\4--4------|-4--3--4---|---4---6-4-4-| +|-----------------6---------|------------------6--|---------6-|------------6| +|---4-----4-------4---------|-4----4-----------4--|---------4-|-4---4------4| + + +|---------------------------|-------------------------|---------------------| +|---------------------------|-------------------------|---------------------| +|-----4-----3-------4-------|----4----*10--8----------|10--8----------------| +|-----4-----4-------4-------|----4------------11--9~--|-------11--9~--------| +|-6---------------------6---|----------4--------------|-4-------------------| +|-4------4------4-------4---|-4-----4------7---6--4~--|----7---6--4~--------| + +* top notes are harmony guitars + diff --git a/guitar/tabs/Malmsteen/overture_1383.tab b/guitar/tabs/Malmsteen/overture_1383.tab new file mode 100644 index 0000000..d13cea6 --- /dev/null +++ b/guitar/tabs/Malmsteen/overture_1383.tab @@ -0,0 +1,520 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Overture 1383" +from Marching Out +letostak@netcom.com + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------------------------3--2----|---------------------------5--3--2----| +|1--1--1--1--1--1--1--1--1--------5-|4--4--4--4--4--4--4--4--4-------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------------------------3--2--0-|---------------------------5--3--2----| +|1--1--1--1--1--1--1--1--1----------|4--4--4--4--4--4--4--4--4-------------| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------------------------7--5--3-|---------------------------8--7--5----| +|5--5--5--5--5--5--5--5--5----------|7--7--7--7--7--7--7--7--7-------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|2----------------------------------|--------------------------------------| +|2----------------------------------|---------------------------7----------| +|0--------0--0--0--0--0--0--7--5--3-|5~----------------------------10--8---| +|-----------------------------------|--------------------------------------| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------7--5--------------5-------|-----------------------8--7--5--------| +|8--8--8--------8--7--7--7-----8--7-|5--5--5--8--7--5--4-------------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|-----------------------7--------------| +|7--7--7-10--7------------8--7------|---------7---------------10--8--------| +|---------------10-10-10--------10--|8--8--8----10--8--7-------------------| + + +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|---------------------------3--2----| +|5--5--5--8--7--5--4--4--4--------5-| +| | +| | +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|---------7-------------------------| +|8--8--8----10--8--7--------8--7--5-| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------------------------3--2----|---------------------------5--3--2----| +|1--1--1--1--1--1--1--1--1--------5-|4--4--4--4--4--4--4--4--4-------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------------------------3--2--0-|---------------------------5--3--2----| +|1--1--1--1--1--1--1--1--1----------|4--4--4--4--4--4--4--4--4-------------| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------------------------7--5--3-|---------------------------8--7--5----| +|5--5--5--5--5--5--5--5--5----------|7--7--7--7--7--7--7--7--7-------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|---------------------------7----------| +|0--0--0--0--0--0--0--0--0--0--2--3-|5~----------------------------10--8---| +|-----------------------------------|--------------------------------------| + + +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------7--5--------------5-------|-----------------------8--7--5--------| +|8--8--8--------8--7--7--7-----8--7-|5--5--5--8--7--5--4-------------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|-----------------------7--------------| +|7--7--7-10--7------------8--7------|---------7---------------10--8--------| +|---------------10-10-10--------10--|8--8--8----10--8--7-------------------| + + +|-----------------------------------|---------------------13p12p10---------| +|-----------------------------------|------------------------------13p12p9-| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|---------7--5--------------5-------|--------------------------------------| +|8--8--8--------8--7--7--7-----8--7-|5--5--5--8--7--5--4-------------------| +| | | +| | | +|-----------------------------------|---------------------13p12p10---------| +|-----------------------------------|------------------------------13p12p9-| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|7--7--7-10--8--7-----------8--7----|---------7----------------------------| +|-----------------10-10-10-------10-|8--8--8----10--8--7-------------------| + + +|-----17p15p13---------------13p12p10---------|----17p15p13----------------- +|s10-----------17p15-12-13~-----------13p12p9-|10-----------17-15-12-13~---- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +| | +| | +|-----13p12p10---------------13p12p10---------|----13p12p10----------------- +|-10-----------13p12p9--10~-----------13p12p9-|10-----------13p12p9--10~---- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- + + +|17p15p13----------| +|---------17p15-12-| +|------------------| +|------------------| +|------------------| +|------------------| +| | +| | +|------------------| +|13p12p10----------| +|---------13p12p9--| +|------------------| +|------------------| +|------------------| + + +|-----13--12--10--|-----13--12--10--|---------------|----------|-----------| +|-13--------------|-13--------------|-13-------12~--|----------|--10~------| +|-----------------|-----------------|---------------|--2~------|-----------| +|-----------------|-----------------|---------------|--2~------|-----------| +|-----------------|-----------------|---------------|--0~------|-----------| +|-----------------|-----------------|---------------|----------|-----------| +| | | | | | +| | | | | | +|-----------------|-----------------|---------------|----------|-----------| +|-10---9--10---9--|-10---9--10---9--|-10---------9~-|----------|---13~-----| +|-----------------|-----------------|---------------|--2~------|-----------| +|-----------------|-----------------|---------------|--2~------|-----------| +|-----------------|-----------------|---------------|--0~------|-----------| +|-----------------|-----------------|---------------|----------|-----------| + + +Rhythm fig 1 repeat under melody + +|-------------0-----|-------------0-----|------------------|---------------0| +|----------1-----1--|----------1-----1--|----------0h1p0---|-------------0--| +|-------2-----------|-------0-----------|-------0--------0-|----------0-----| +|----2--------------|----2--------------|----0-------------|-------2--------| +|-0-----------------|-3-----------------|------------------|----2-----------| +|-------------------|-------------------|-3----------------|-0--------------| + + +|-------------------|-------------2-----| +|----------0--1-----|----------3-----3--| +|-------2--------2--|-------2-----------| +|----2--------------|----0--------------| +|-0-----------------|-------------------| +|-------------------|-2-----------------| + + +|------------|---------------|--------------|---------|--------------|-----| +|-10~--------|-15s17~----17--|-15~------13--|-12~-----|-12h13~---12--|-10~-| +|------------|---------------|--------------|---------|--------------|-----| +|------------|---------------|--------------|---------|--------------|-----| +|------------|---------------|--------------|---------|--------------|-----| +|------------|---------------|--------------|---------|--------------|-----| +| | | | | | | +| | | | | | | +|------------|---------------|--------------|---------|--------------|-----| +|-13~--------|-13~-----------|-12~----------|--8~-----|-10~----------|-7~--| +|------------|---------------|--------------|---------|--------------|-----| +|------------|---------------|--------------|---------|--------------|-----| +|------------|---------------|--------------|---------|--------------|-----| +|------------|---------------|--------------|---------|--------------|-----| + + trill +|------------|---------------|--------|-------|--------|-----|-------------| +|-12----9~---|---------------|10~-----|--17~--|-15h17--|12~--|13-12h13p12-10 +|------------|--9~-----------|--------|-------|--------|-----|-------------| +|------------|---------------|--------|-------|--------|-----|-------------| +|------------|---------------|--------|-------|--------|-----|-------------| +|------------|---------------|--------|-------|--------|-----|-------------| +| | | | | | | | +| | | | | | | | +|------------|---------------|--------|-------|--------|-----|-------------| +|-9~---------|---------------|--------|13~----|--12~---|-8~--|6~-----------| +|------------|--9~--9s13--16-|14~-----|-------|--------|-----|-------------| +|------------|---------------|--------|-------|--------|-----|-------------| +|------------|---------------|--------|-------|--------|-----|-------------| +|------------|---------------|--------|-------|--------|-----|-------------| + + +|------------|--------|-----|--------|--------|------------|------|--------| +|-12p10---9--|-10~----|-----|-10~----|-17~----|-15tr17--13-|-12~--|-13---12| +|------------|--------|--%--|--------|--------|------------|------|--------| +|------------|--------|-----|--------|--------|------------|------|--------| +|------------|--------|-----|--------|--------|------------|------|--------| +|------------|--------|-----|--------|--------|------------|------|--------| +| | | | | | | | | +| | | | | | | | | +|------------|--------|-----|--------|--------|------------|------|--------| +|--9~--------|-10~----|-----|-13~----|-13~----|-12~-----10-|10p8--|-8h10---| +|---------9~-|--------|--%--|--------|--------|------------|------|--------| +|------------|--------|-----|--------|--------|------------|------|--------| +|------------|--------|-----|--------|--------|------------|------|--------| +|------------|--------|-----|--------|--------|------------|------|--------| + + +|--------|------------|--------|-------|---------|------------|------------| +|-10~----|10bfr---p9--|-s5~----|-10~---|-17~-----|-15tr17--13-|-12~--------| +|--------|------------|--------|-------|---------|------------|------------| +|--------|------------|--------|-------|---------|------------|------------| +|--------|------------|--------|-------|---------|------------|------------| +|--------|------------|--------|-------|---------|------------|------------| +| | | | | | | | +| | | | | | | | +|--------|------------|--------|-------|---------|------------|------------| +|-7~-----|-9~---------|--5~----|8s10~--|-13~-----|-12tr13~-10-|--8~--------| +|--------|------------|--------|-------|---------|------------|------------| +|--------|------------|--------|-------|---------|------------|------------| +|--------|------------|--------|-------|---------|------------|------------| +|--------|------------|--------|-------|---------|------------|------------| + + +|-------------------|------------------------------|-----------------------| +|-13---12h13p12p10--|-9h10h12p9--------------------|-----------10-12s13--12| +|-------------------|-----------7h9h10p7-----------|--------9--------------| +|-------------------|---------------------6h7h9p6--|-7--10-----------------| +|-------------------|------------------------------|-----------------------| +|-------------------|------------------------------|-----------------------| +| | | | +| | | | +|-------------------|------------------------------|-----------------------| +|-8h10~-------------|-9~---------------------------|-10~-------------------| +|-------------------|------------------------------|-----------------------| +|-------------------|------------------------------|-----------------------| +|-------------------|------------------------------|-----------------------| +|-------------------|------------------------------|-----------------------| + + +|------------|----------------|-----------------------|--------------------| +|(10)~-------|-15bf~----------|-(15)-----15----13-----|--12~---------------| +|------------|----------------|-----------------------|--------------------| +|------------|----------------|-----------------------|--------------------| +|------------|----------------|-----------------------|--------------------| +|------------|----------------|-----------------------|--------------------| +| | | | | +| | | | | +|------------|----------------|-----------------------|--------------------| +|(10)~-------|-12h13~---------|-(13)----12h13p12--10--|--8~----------------| +|------------|----------------|-----------------------|--------------------| +|------------|----------------|-----------------------|--------------------| +|------------|----------------|-----------------------|--------------------| +|------------|----------------|-----------------------|--------------------| + +* a.h tap with right hand +|------------|------------|-----------------------|------------------------| +|-(12)~------|-8~---------|-(8)-20*---10bf--22*---|---8~-------------------| +|------------|------------|-----------------------|------------------------| +|------------|------------|-----------------------|------------------------| +|------------|------------|-----------------------|------------------------| +|------------|------------|-----------------------|------------------------| +| | | | | +| | | | | +|------------|------------|-----------------------|------------------------| +|-(8)~-------|-5~---------|--(5)~-----------------|----6~------------------| +|------------|------------|-----------------------|------------------------| +|------------|------------|-----------------------|------------------------| +|------------|------------|-----------------------|------------------------| +|------------|------------|-----------------------|------------------------| + + +|-----------|-----14--17s20--20~--|-(20)~-----------------19bf-------------| +|-(10)~-----|-13------------------|----------------------------------------| +|-----------|---------------------|----------------------------------------| +|-----------|---------------------|----------------------------------------| +|-----------|---------------------|----------------------------------------| +|-----------|---------------------|----------------------------------------| +| | | | +| | | | +|-----------|---------------------|----------------------------------------| +|-(6)~------|-4~------------------|--(4)~----------------------------------| +|-----------|---------------------|----------------------------------------| +|-----------|---------------------|----------------------------------------| +|-----------|---------------------|----------------------------------------| +|-----------|---------------------|----------------------------------------| + + 1/2 +|(19)----19~----|-19~---19~------|-------13h16h19p16p13--------------------| +|---------------|----------------|----15----------------15-----------------| +|---------------|----------------|-16-----------------------16b------16----| +|---------------|----------------|-----------------------------------------| +|---------------|----------------|-----------------------------------------| +|---------------|----------------|-----------------------------------------| +| | | | +| | | | +|---------------|----------------|-----------------------------------------| +|-5~------------|--(5)~----------|-9~--------------------------------------| +|---------------|----------------|-----------------------------------------| +|---------------|----------------|-----------------------------------------| +|---------------|----------------|-----------------------------------------| +|---------------|----------------|-----------------------------------------| + + 1/2 +|-------------------------------|---------------------------|--------------| +|-------------------------------|----------------12-13-12b--|12~------10---| +|10-13----10--------------------|-----------9-14------------|--------------| +|------12----9-12----9--------9-|7~--7h9h10-----------------|--------------| +|-----------------11---8-11-7---|---------------------------|--------------| +|-------------------------------|---------------------------|--------------| +| | | | +| | | | +|-------------------------------|---------------------------|--------------| +|-(9)~----10bfr-----------------|10~------------------------|8~------------| +|-------------------------------|---------------------------|--------------| +|-------------------------------|---------------------------|--------------| +|-------------------------------|---------------------------|--------------| +|-------------------------------|---------------------------|--------------| + + +|-----------|-----------------------12---|-15bf~-----------|--15bf~--------| +|10~--------|-(10)~--------------13------|-----------------|---------------| +|-----------|---------------9-14---------|-----------------|---------------| +|-----------|------------10--------------|-----------------|---------------| +|-----------|---------12-----------------|-----------------|---------------| +|-----------|----------------------------|-----------------|---------------| +| | | | | +| | | | | +|-----------|----------------------------|-----------------|---------------| +|7~---------|-(7)~-----------------------|-6~--------------|-(6)~----------| +|-----------|----------------------------|-----------------|---------------| +|-----------|----------------------------|-----------------|---------------| +|-----------|----------------------------|-----------------|---------------| +|-----------|----------------------------|-----------------|---------------| + + +|-17bfr--14-------------11-14~------|--------------------------------------| +|-----------16-13s10-13---------13--|-10----------10-13------------12p10---| +|-----------------------------------|----11----11--------------------------| +|-----------------------------------|-------13-----------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|--4-----4~-------------------------|-(4)~---------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| + + +|-----------------|-----------------------|--------------------------------| +|12~-----------12h|17p12------------------|-10~---------9~--------6--------| +|-------9--13-----|-----------------13p9--|--------------------------------| +|-----------------|-----------------------|--------------------------------| +|-----------------|-----------------------|--------------------------------| +|-----------------|-----------------------|--------------------------------| +| | | | +| | | | +|-----------------|-----------------------|--------------------------------| +|5~---------------|(5)~-------------------|-6~----------5~--------3--------| +|-----------------|-----------------------|--------------------------------| +|-----------------|-----------------------|--------------------------------| +|-----------------|-----------------------|--------------------------------| +|-----------------|-----------------------|--------------------------------| + + +|-------------|----------------|---------------|---------------|-----------| +|-5~----------|-9~---6----5~---|---------------|5s6~---5-------|-----------| +|------7--5---|----------------|--7---5---4----|-----------7s--|5---4~---2-| +|-------------|----------------|---------------|---------------|-----------| +|-------------|----------------|---------------|---------------|-----------| +|-------------|----------------|---------------|---------------|-----------| +| | | | | | +| | | | | | +|-------------|----------------|---------------|---------------|-----------| +|-------------|----------------|---------------|3~-------------|-----------| +|-5~---4--2---|-5~--3----------|---------------|--------5---4~-|2~--1------| +|-------------|-----------5----|--4~--2---1----|---------------|---------3-| +|-------------|----------------|---------------|---------------|-----------| +|-------------|----------------|---------------|---------------|-----------| + + tap harm +|--------------|--------------|-------|---------------|--------------------| +|-3s5~----3----|--------------|-------|---------------|--------------------| +|------------5-|-4h5p4p2---1s-|2------|-2-t14---------|--2dive-------------| +|--------------|--------------|-------|---------------|--------------------| +|--------------|--------------|-------|---------------|--------------------| +|--------------|--------------|-------|---------------|--------------------| +| | | | | | +| | | | | | +|--------------|--------------|-------|---------------|--------------------| +|--------------|--------------|-------|---------------|--------------------| +|-5~---4~---2--|-1~-----------|-------|---------------|--------------------| +|--------------|--------3---2-|3~-----|--3~-----------|-(3)~---------------| +|--------------|--------------|-------|---------------|--------------------| +|--------------|--------------|-------|---------------|--------------------| + + +Outro solo + +|----------------12-----|15bf------------------------------------15--------| +|-------------13--------|--------------------------------------------------| +|-12bf-----14-----------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| + + 1/2 1/2 +|-15~------13s12----15-------------19~br--|-------17-19br----br---17p15----| +|-------------------------------17--------|----17--------------------------| +|----------------------------17-----------|-17-----------------------------| +|-------------------------19--------------|--------------------------------| +|-----------------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| + + 1/2 1/2 +|-17~---19-----19br----p17---21br-|20-19-17-16-17-19-20-19-17-16-17-19-20-19 +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- +|---------------------------------|----------------------------------------- + + +17----19-17-|---------------------------13h15-|15p13s12-13h15h17p15p13s12--- +---20-------|20bf~----18p17p15s13h15h17-------|----------------------------- +------------|---------------------------------|----------------------------- +------------|---------------------------------|----------------------------- +------------|---------------------------------|----------------------------- +------------|---------------------------------|----------------------------- + + +------15p13p12s10-12p10----------12h13p12p10------------|------------------- +15h17-------------------13p12p10-------------13-12-10s8-|-12-10-8----------- +--------------------------------------------------------|---------10p9h10--- +--------------------------------------------------------|------------------- +--------------------------------------------------------|------------------- +--------------------------------------------------------|------------------- + + +---------10h12p10p8-------------------------------------------| +-8h10h12-------------12p10p9--12------------------------------| +---------------------------------10p9s7-7h10-9p7--------------| +-------------------------------------------------10p9-7s6-7p6-| +--------------------------------------------------------------| +--------------------------------------------------------------| + + +|--------------------------------------------------------------------| +|--------------------------------------------------------------------| +|--------------------------------------------------------------------| +|-----------------------------------------------7-9----7-9-10-7-9-10-| +|-8p7p5---------------------------7-8----7-8-10-----10---------------| +|-------8p7p5-7-5-4--5s8~--7-8-10-----10-----------------------------| + + +|--------7-8-7----7-8-10-7-8-10-12-8-10-12-13-10-12-13-15-12-13-15-17-13-15- +|-7-8-10-------10----------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-17-19-15-17-19-|-20~--| +----------------|------| +----------------|------| +----------------|------| +----------------|------| +----------------|------| + + + diff --git a/guitar/tabs/Malmsteen/perpetual.tab b/guitar/tabs/Malmsteen/perpetual.tab new file mode 100644 index 0000000..1d6caa7 --- /dev/null +++ b/guitar/tabs/Malmsteen/perpetual.tab @@ -0,0 +1,568 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Perpetual" +from Fire and Ice +letostak@netcom.com +Judy Letostak + + +|----------|-------------------------------------------------|-------------| +|----------|-------------------------------------------------|-------------| +|----------|-------------------------------------6~-----6--9-|-5-------4---| +|----------|-------------------------5-----5--8------8-------|-5-------5---| +|----------|----------4--7-----4--7-----7--------------------|-3-------5---| +|---3/15\--|-0--3--6--------6--------------------------------|-0-------3---| + + w/delay + 1/2 1 1/2 +|-------|--14b--rb14-----19-|-18tr19-----------|----------14p12bf---14-----| +|-------|-------------------|-----------14b~---|--rb14---------------------| +|-------|-------------------|------------------|---------------------------| +|-4-----|-------------------|------------------|---------------------------| +|-4-----|-------------------|------------------|---------------------------| +|-2-----|-------------------|------------------|---------------------------| + +~ w/bar +|------------------|---12bf--rb12---|----------|---------------------------| +|------------------|----------------|----------|---------------------------| +|------------------|----------------|----------|-5~----------------4-------| +|--5~----------5---|----------------|----------|-5~----------------5-------| +|--3~----------5---|-4--------------|----------|-3~----------------5-------| +|--0~----------3---|-2--------------|--15\-----|-0~----------------3-------| + + +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------4--5--4-----------------4--------5--|-------4--5--4----------------- +|----------------4--------------4--------5--|----------------4-------------- +|-0--2--------------3--0--2--2-----2--2-----|-0--2--------------3--0--2--2-- + + +--------------|-------------------------------------------|----------------- +--------------|-------------------------------------------|----------------- +--------------|-------------------------------------------|----------------- +--4--------2--|-------4--5--4-----------------4--------5--|----------------- +--4--------2--|----------------4--------------4--------5--|----------4--7--- +-----2--2-----|-0--2--------------3--0--2--2-----2--2-----|-0--3--6--------- + + +----------------------------------| +----------------------------------| +-----------------------6-----6----| +-----------5-----5--8-----8-----8-| +-----4--7-----7-------------------| +--6-------------------------------| + + 1/2 1/2 +|---18b--rb18~--\14-14p12----------------|---------------------------------| +|-------------------------15-14-15-14----|---------------------------------| +|-------------------------------------16-|-15b--rb15~--12-12-15-15-/-------| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| +| | | +| | | +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| +|--4--5---2--4---------------------------|--4--5---2--4------14\-----------| +|--2--3---0--2------------------x--x-----|--2--3---0--2--------------------| + + 1/2 1/2 +|-18b--rb18~--\14-14p12-----------------|----------------------------------| +|-----------------------15-14-15-14-----|----------------------------------| +|-----------------------------------16--|-15b--15----12-12-15-15-/---------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +| | | +| | | +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|---------------------------------------|----------------------------------| +|-4--5---2--4----------------14\--------|--4--5---2--4---------------------| +|-2--3---0--2---------------------------|--2--3---0--2--------14\----------| + + +|-19-18-19-12-19----19----15----19------------------------------------------| +|----------------19----17----15----14tr15~--14-15-17-19-19p17-15-14---------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +| | +| | +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|-4------------5------------2----------4------------------------------------| +|-2------------3------------0----------2---------------14\------------------| + + 1 1/2 1/2 1 1/2 +|-19-18-19-15-19----19----15----19---------21b----rb21---21b-------21\-----| +|----------------19----17----15----14tr15----------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +| | +| | +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------9-----------------| +|--4-------------5-------2------------4-----------------10----10\----------| +|--2-------------3-------0------------2------------------------------------| + + +|-/19-18-19-15-19----19----15----19----------------------------------------| +|-----------------19----17----15----14tr15--14-15-17-19-19p17-15-14--------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +| | +| pick scrapes | +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|---------------------------------------------------x\---------------------| +|---------------------------------------------------x\---------------------| +|--4---------------5-----------2-------4-----------------------------------| +|--2---------------3-----------0-------2-----------------------------------| + + 1/2 +|------------------------12-14-15p14p12----------|-------------------------- +|--14b------14--12-14-15----------------15p14p12-|-------------------------- +|--15b------15-----------------------------------|-14-12p11----------------- +|------------------------------------------------|----------14-12p11-------- +|------------------------------------------------|-------------------14----- +|------------------------------------------------|-------------------------- +| | +| | +|------------------------------------------------|-------------------------- +|------------------------------------------------|-------------------------- +|-------------------------6--------6------9------|-------------------------- +|-----------------5---5-8---8--------------------|-------------------------- +|-------4-7---4-7---7----------------------------|--9----------------------- +|-0-3-6-----6------------------------------------|--7----------------------- + + +-----------10---------------| +----12bf--------12bf~---12--| +----------------------------| +----------------------------| +-0--------------------------| +----------------------------| + | + | +----------------------------| +----------------------------| +-----11~-------11~----------| +----------------------------| +----------------------------| +----------------------------| + + +Guitar solo + +|----------/15--14-15-12-15----15----15-15-15--------------------14|19p14--- +|-12~-12\-------------------15----14----12-----12tr11~--------15---|-------- +|----------------------------------------------------------16------|-------- +|------------------------------------------------------------------|-------- +|------------------------------------------------------------------|-------- +|------------------------------------------------------------------|-------- + + +----------12-14p10----10p7-------------------------------------------------| +-15----15----------12------10bf--rb10p9p7----------------------------------| +----16------------------------------------10p9p7----9~------7-9-11---------| +-------------------------------------------------9------/9-----------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + 1/2 +|--------------6tr7---9/15p14-12-------------------------------|------------ +|--------------------------------15p14p12-11-------------------|------------ +|-11b--p9-11~--------------------------------14p12p11----------|------------ +|-----------------------------------------------------14p12p11-|----------16 +|--------------------------------------------------------------|-14-16-17--- +|--------------------------------------------------------------|------------ + + +-------------------------14bf-rb14p17~|-17p15p14----15p14------------------- +--------------------------------------|----------17-------17p15p14----15p14- +--16bf--rb16---------11---------------|----------------------------16------- +--------------16\14-------------------|------------------------------------- +--------------------------------------|------------------------------------- +--------------------------------------|------------------------------------- + + +----------14-18p14-------------------|------------------------------14h15p14 +-------14----------14----------------|------------------------14-15--------- +-16-15----------------15-------------|---------------11-14h15--------------- +-------------------------16-14\11-14-|-12~--11-12h14------------------------ +-------------------------------------|-------------------------------------- +-------------------------------------|-------------------------------------- + + +-p12----------12---------------|-------------------------------------------| +-----15p14p12-12--15bf---12-15-|-------12----------------------------------| +-------------------------------|--14bf-----14bf~--------------------0------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| +-------------------------------|-------------------------------------------| + + 1 1/2 +|-20~---21b------rb21--|---------------------------------------------------| +|----------------------|---------------------------------------------------| +|----------------------|---------------------------------------------------| +|----------------------|-------4--5--4-----------------4--------5----------| +|----------------------|----------------4--------------4--------5----------| +|----------------------|-0--2--------------3--0--2--2-----2--2-------------| + + +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------4--5--4-----------------4--------2--|-------4--5--4----------------- +|----------------4--------------4--------2--|----------------4-------------- +|-0--2--------------3--0--2--2-----2--2-----|-0--2--------------3--0--2--2-- + + +--------------------|------------------------------------------------------| +--------------------|------------------------------------------------------| +--------------------|-------------------------------------6~----6--9-------| +--4--------------5--|-------------------------5-----5--8-----8-------------| +--4--------------5--|----------4--7-----4--7-----7-------------------------| +-----2--2--2--2-----|-0--3--6--------6-------------------------------------| + + 1/2 1/2 +|-18b--rb18-18~-\14-14p12----------------|---------------------------------| +|-------------------------15-14-15-14----|---------------------------------| +|-------------------------------------16-|-15b--rb15-15~--12-12-15-15------| +|----------------------------------------|----------------------------16/--| +|----------------------------------------|---------------------------------| +|----------------------------------------|---------------------------------| + + 1/2 1/2 +|-18b--rb18-18~--\14-14p12----------------|--------------------------------| +|--------------------------15-14-15-14----|--------------------------------| +|--------------------------------------16-|-15b---rb15-15~--12-12-15-15~---| +|-----------------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| + + +|-19-18-19-15-19----19----15----19-----------------------------------------| +|----------------19----17----15----14tr15--14-15-17-19-19p17-15-14---------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + 1 1/2 1/2 1 1/2 +|-19-18-19-15-19----19----15----19----------21b----rb21---b21--\-----------| +|----------------19----17----15----14tr15----------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|-19-18-19-15-19----19\---------------14-15p14p12--------------------------- +|----------------19------/14-12-14-15-------------15p14-12------------------ +|----------------------------------------------------------15p14p12--------- +|-------------------------------------------------------------------16p14p12 +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-----------| +-----------| +-----------| +-----------| +-16p14p12--| +-----------| + + +|--------------------------------------------------|----------6--9-----6--9- +|--------------------------------------------------|-8-----8--------8------- +|-------------------------------------6~-----6--9--|----9------------------- +|-------------------------5-----5--8------8--------|------------------------ +|----------4--7-----4--7-----7---------------------|------------------------ +|-0--3--6--------6---------------------------------|------------------------ + + 1 1/2 +--9/12------9--12--15------12--15\-|-21b----rb21--20~\---------------------| +--------11-------------14----------|---------------------------------------| +-----------------------------------|---------------------------------------| +-----------------------------------|---------------------------------------| +-----------------------------------|---------------------------------------| +-----------------------------------|---------------------------------------| + + 1 1/2 +|-----------14tr15~----(14)\---------------|-------------------------------- +|------------------------------------------|-----14b------rb14---12p11------ +|------------------------------------------|-------------------------------- +|------------------------------------------|-------------------------------- +|------------------------------------------|-------------------------------- +|------------------------------------------|-------------------------------- +| | +| | +|------------------------------------------|-------------------------------- +|------------------------------------------|-------------------------------- +|------11-12-11-------------11-12-11-------|------11-12-11-------------11-12 +|---11----------11--------7----------5-12--|---11----------11--------7------ +|-9----------------10-7-9------------5-----|-9----------------10-9-7-------- +|------------------------------------3-----|-------------------------------- + + +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| + | | + | | +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-11----------|-------11-12-11-------------11-12-11-------------------------| +-----2--9----|----11----------11--------7----------2--9--------------------| +-----2--7----|--9----------------10-7-9------------2--7--------------------| +-----0-------|-------------------------------------0-----------------------| + + 1 1/2 +|-21b----21\----------12h14h15p14|p12--------------------------------------- +|------------12-14h15------------|----15p14-12------------------------------ +|--------------------------------|-------------15p14p12--------------------- +|--------------------------------|----------------------16p14----------12--- +|--------------------------------|----------------------------16-14h16------ +|--------------------------------|------------------------------------------ +| | +|w/bar | +|--------------------------------|------------------------------------------ +|--------------------------------|------------------------------------------ +|--------------------4-----------|------------------------------------------ +|-5~-----------------5-----------|----------------------4----------5----4--- +|-3~-----------------5-----------|------------------------------------------ +|-0~-----------------3-----------|-0-----------2---------------------------- + + +----------------------12h14-15p14p12---------------------------------------- +-------------12h14h15----------------15p14p12------------------------------- +-------12h15----------------------------------15p14-12p11------------------- +-14h16----------------------------------------------------14-12p11----11---- +-------------------------------------------------------------------14------- +---------------------------------------------------------------------------- + + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +--------4------------------------------------------------------------------- +--------------------3-----------0----------2-----------------2------2------- + + 1 1/2 +------------------|---------------------------------14h15p14p12----------21b- +------------------|-11~--12-14p11-12-14-15p12h14h15-------------15p14p12----- +-----------12-----|---------------------------------------------------------- +--11-12-14--------|---------------------------------------------------------- +------------------|---------------------------------------------------------- +------------------|---------------------------------------------------------- + | + | +------------------|---------------------------------------------------------- +------------------|---------------------------------------------------------- +------------------|---------------------------------------------------------- +------------------|--------4--5--4------------------------------------------- +------5-----------|----------------------4----------------------------------- +--2---3-----------|--0--2--------------------3----0------2----------------2-- + + 1 1/2 +--rb21--21b-----rb21p17-|-21p18----21\18p15----18-15p12----14h15p14p12-14p12- +------------------------|-------20----------17----------14------------------- +------------------------|---------------------------------------------------- +------------------------|---------------------------------------------------- +------------------------|---------------------------------------------------- +------------------------|---------------------------------------------------- + | + | +------------------------|---------------------------------------------------- +------------------------|---------------------------------------------------- +------------------------|----continue similar rhythm pattern----------------- +------------------------|---------------------------------------------------- +--------------------2---|---------------------------------------------------- +----2-----------2---0---|---------------------------------------------------- + + +----------------------------14h15p14p12----------------14h15p14p12-12-------| +-15p14-15p14p12----12h14h15-------------15p14p12-14h15---------------14-15bf| +----------------15----------------------------------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| + + +|-----12--------------------------------------------------------------------- +|-15~----15p14p12-15p14p12-11h12h14-15p14-12-11-15\14-12p11----12p11----11--- +|-----------------------------------------------------------12-------12------ +|---------------------------------------------------------------------------- +|---------------------------------------------------------------------------- +|---------------------------------------------------------------------------- + + w/delay +-------------------------------|------------------------------12-14-15------| +-------------------------------|-------------12---11-12-14-15---------------| +-12p11----12p11-------11-------|----------11--------------------------------| +-------14-------14p12----14bf~-|--\4/14-0-----------------------------------| +-------------------------------|--------------------------------------------| +-------------------------------|--------------------------------------------| + + 1/2 1/2-1 1/2 1/2 1/2 +|-18-15h18-19-21-18-19-21-18-------15---------------|-21b--21b-------rb21-21b| +|----------------------------20p19----17--17bf~--\--|------------------------| +|---------------------------------------------------|------------------------| +|---------------------------------------------------|------------------------| +|---------------------------------------------------|------------------------| +|---------------------------------------------------|------------------------| + + +|-12/14-12---------|-------------------------------------------------------- +|----------14p12-x-|-------------------------------------------------------- +|------------------|-16p15----16p15----------------------------------------- +|------------------|-------16-------16-14h16-16-16--17p16-16-16--11--------- +|------------------|-------------------------------------------------13--9-- +|------------------|-------------------------------------------------------- + + +--------------|-18tr21--15tr18-12tr15-9tr12-6tr9-3tr6--0-------------------| +--------------|----------------------------------------0-------------------| +--------------|------------------------------------------------------------| +--------------|------------------------------------------------------------| +-----------7--|------------------------------------------------------------| +--9--6--2--0--|------------------------------------------------------------| + + +|-18tr21-15tr18-12tr15-9tr12-6tr9--0--3p0--3--0-|-0h2p0----------14p12------ +|----------------------------------0--3p0-----0-|-------2p0--/14-------14p12 +|-----------------------------------------------|--------------------------- +|-----------------------------------------------|--------------------------- +|-----------------------------------------------|--------------------------- +|-----------------------------------------------|--------------------------- + + 1/2 +----12-15-19p18-15-14-------15-19-19bf--rb19-|-18b-rb18-b18-rb18-b18-18~---- +-14-------------------15-15------------------|------------------------------ +---------------------------------------------|------------------------------ +---------------------------------------------|------------------------------ +---------------------------------------------|------------------------------ +---------------------------------------------|------------------------------ + + +-------12-|-14-12-----12---------------------------------------------------- +-19\14----|-------/14----15-14-12-15-14-12----15p14-12----15p14-12-15-14-12- +----------|--------------------------------15----------15------------------- +----------|----------------------------------------------------------------- +----------|----------------------------------------------------------------- +----------|----------------------------------------------------------------- + + +----------------------------------------------------------|-12h14p12----12-- +----15p14-12----15p14-12----15p14-12----15-14-12----14-15-|----------15----- +-15----------15----------15----------15----------15-------|----------------- +----------------------------------------------------------|----------------- +----------------------------------------------------------|----------------- +----------------------------------------------------------|----------------- + + +---------------------------------------------------------------------------- +-15-14-12p11-14p12-11-12p11----11------------------------------------------- +----------------------------12----12-11-12-11-------------------12-11h12p11- +----------------------------------------------14-12p11-11\12-14------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + +-------|-------------------------------------------------------------------- +-------|---------------11-14-11-12p10-12p11--------------------------------- +----11-|-12~--11h12-14----------------------14-12-14p12-11----11------------ +-14----|---------------------------------------------------14----14-12p11--- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- + + +----------|--------------14-14-15------------------------------------------- +----------|----/15-15-15----------15-14-12p11------------------------------- +----------|-11--------------------------------14-12p11-------------11------- +-11h12h14-|--------------------------------------------14-11h12h14----14bf-- +----------|----------------------------------------------------------------- +----------|----------------------------------------------------------------- + + +-----------------|-------------------------------------------12p9----9------ +-----------------|-------------------------14p11----11----11------11---11--- +-----------------|-------------15p12-------------12----12------------------- +-rb14-14bf-------|-14p11----11-------14-11---------------------------------- +-------------14--|-------13------------------------------------------------- +-----------------|---------------------------------------------------------- + + +-9-14/15p12-12----12-18p15-15-15-15-21p18-|-19-----18p15----15----15p12----- +---------------14-------------------------|----20\-------17----17-------14-- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- +------------------------------------------|--------------------------------- + + 1/2 +-12-14-15-15-15-15~----14h15-12-15-----15----15----15----------|--------14b- +--------------------------------15--15----14----12----11-12-14-|-15bf~------ +---------------------------------------------------------------|------------ +---------------------------------------------------------------|------------ +---------------------------------------------------------------|------------ +---------------------------------------------------------------|------------ + + +--rb14--12----------------------|------------------------------------------- +-----------15-14-12p11----------|-------------------------------12h14-15---- +-----------------------14-12p11-|----------------------11h12-14------------- +--------------------------------|-14p12p11----11h12-14---------------------- +--------------------------------|----------14------------------------------- +--------------------------------|------------------------------------------- + + 1 1/2 +-12h14~----21b----rb21f---21--21~--|-21p18----19p15----18p15--------15~----- +-----------------------------------|-------20-------17-------17-14---------- +-----------------------------------|---------------------------------------- +-----------------------------------|---------------------------------------- +-----------------------------------|---------------------------------------- +-----------------------------------|---------------------------------------- + + +-14h15-12-15----15----15----15-------------12--|-14-12-14-12h14p12-10-9-9--- +-------------15----14----12----11/12-14-15-----|---------------------------- +-----------------------------------------------|---------------------------- +-----------------------------------------------|---------------------------- +-----------------------------------------------|---------------------------- +-----------------------------------------------|---------------------------- + + +-10\-7-6-7-3-6-2-3-0------|-0-2--------------------------------------------| +-------------------0--2-3-|-----3bf----rb3---------------------------------| +--------------------------|------------------3*~---------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + + diff --git a/guitar/tabs/Malmsteen/queen_is_in_love.tab b/guitar/tabs/Malmsteen/queen_is_in_love.tab new file mode 100644 index 0000000..414eb5c --- /dev/null +++ b/guitar/tabs/Malmsteen/queen_is_in_love.tab @@ -0,0 +1,295 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen +"Queen is in Love" +From Trilogy +letostak@netcom.com + +||---------------------------|-----------------------|----------------------| +||---------5-----------------|-----------------------|------4---------------| +||---------4-----------------|-----------------------|------4---------------| +||2--------2--------2--------|-4--------7~-------7~--|------2-------2--X--2-| +||2-----------------3--------|-5--------7~-------7~--|--------------3--X--3-| +||0--0--0-----0--0-----0--0--|----0--0--------0------|-0-0-----0--0---------| + +sustain notes Main Riff +|----------------------||-----------------------|--------------------------| +|----------------------||------5----------------|--------------------------| +|---0------------0-----||------4----------------|--------------------------| +|------4-------2-------||------2-------2--------|4--------7~-----7~--------| +|s5-------5s3-------2--||--------------3--------|5--------7~-----7~--------| +|----------------------||0--0-----0--0----0--0--|---0--0------0------------| + + +|--------------------------|-------------------------|---------------------- +|------5-------------------|-------------------------|------------5--------- +|------4-------------------|---0----------0----------|------------4--------- +|------2--------2--x--x--2-|------4----------2-------|------------2--------- +|---------------3--x--x--3s|5--------5s3--------2p0--|---------------------- +|0--0-----0--0-------------|-------------------------|3--2--0--0-----0--0--- + + +---------|--------------------|--------------------------|------------------| +---------|--------------------|------5-------------------|------------------| +---------|--------------------|------4-------------------|---0-------0------| +2--------|4--------7~-----7~--|------2--------2--x--x----|-----4-------2----| +3--------|5--------7~-----7~--|x--------------3--x--x--3s|5------5s3-----2p0| +---0--0--|---0--0------0------|0--0-----0--0-------------|------------------| + + +|------------------------------|--------------------|----------------------| +|------------5-----------------|--------------------|------5---------------| +|------------4-----------------|--------------------|------4---------------| +|------------2--------2--------|4--------7~-----7~--|------2--------2-x-x-2| +|---------------------3--------|5--------7~-----7~--|---------------3-x-x-3| +|3--2--0--0-----0--0-----0--0--|---0--0------0------|0--0-----0--0---------| + + Vocals in (Verse) + + They all were there... + open harm harm +|------------------------||------------5------------|-------5-----0--------| +|------------------------||------------5------------|----------5-----------| +|----0----------0--------||-4-----------------------|5---4-----------5-----| +|-------4----------2-----||-4-----------------------|5---------------------| +|s5--------5s3--------3--||-2-----------------------|3---------------------| +|------------------------||-------------------------|----------------------| + + sustain notes +|----------------------|-0-------------------|--------------0--------------| +|----------------------|-0-------------------|-----------------0-----------| +|4~--------------------|-4-------------------|4-------------------4--------| +|4~--------------------|-2-------------------|4----------------------------| +|2~--------------------|-2-------------------|2----------------------------| +|-----------3--2--0----|-0-------------------|-----------------------------| +| | | | +| | | | +|----------------------|----------------5~---|-----------------------------| +|----------------------|----------7---5------|-----------------------------| +|----------------------|--------7---5--------|4-----------------0----------| +|----------------------|-2----7--------------|4--------------------4--4----| +|----------------------|-2--7----------------|2--------------------2--2----| +|----------------------|-0-------------------|-----------------------------| + + +|-------------------------|---------------------x---|----------------------| +|-------------------------|---------------------0~--|----------------------| +|5--5--5--5--------4------|------2--------------0~--|----------------------| +|5--5--5--5--5--5--5------|2--2--2--------------0~--|4--4--4--4--4--4--4--4| +|3--3--3--3--2--2------2--|0--0----------5--5-------|2--2--2--2--2--2--2--2| +|-------------------------|--------------3--3-------|----------------------| + +Chorus + The Queen is in love +|-------------------------|------------------------|-----------------------| +|-------------------------|------5-----------------|-----------------------| +|---------------------4~--|------4-----------------|-----------------------| +|4--------2s-1--5--4------|------2--------2--------|4--------7~-----7~-----| +|2--3--2------------------|---------------3--------|5--------7~-----7~-----| +|-------------------------|0--0-----0--0-----0--0--|---0--0------0---------| + + +--------------------------|-------------------------|--------------------------| +------5-------------------|-------------------------|------------5-------------| +------4-------------------|---0--------------0------|------------4-------------| +------2--------2--x--x----|------4--------2---------|------------2------2------| +---------------3--3--x--3s|5--------5s-3--------2p0-|-------------------3------| +0--0-----0--0-------------|-------------------------|3--2--0--0----0--0----0--0| + + +|--------------------|--------------------------|-------------------------|| +|--------------------|------5-------------------|-------------------------|| +|--------------------|------4-------------------|---0----------0----------|| +|4--------7~-----7~--|------2--------2--x--x----|------4----------2-------|| +|5--------7~-----7~--|---------------3--x--x--3s|5--------5s3--------3----|| +|---0--0------0------|0--0-----0--0-------------|-------------------------|| + + +Interlude 1/2 +|------------------------|-------------|-----------|-----------|-----------| +|------------------------|15bf~--15rb--|-----------|12~--------|12b--------| +|------------------------|-------------|14~--------|-----------|-----------| +|------------------------|-------------|-------14--|--------14-|-----------| +|------------------------|-------------|-----------|-----------|-----------| +|------------------------|-------------|-----------|-----------|-----------| +| | | | | | +| | | | | | +|------------------------|-------------|-----------|-----------|-----------| +|------------------------|-------------|-----------|-----------|-----------| +|----0----------0--------|-------------|-----------|-----------|-----------| +|-------4----------2-----|2--2---------|----7~-----|-6~--------|--------5~-| +|s5--------5s3--------3--|2--2---------|-----------|-----------|-----------| +|------------------------|0--0---------|5----------|------4~---|-3bd-------| + dive w/bar 1/2 + + + 2 +|----------------------17--19-|20-19-17--------17-19-20-|20b---20-19-17~---| +|------13bf~--------17--------|---------20bf~-----------|------------------| +|----x--------14s19-----------|-------------------------|------------------| +|--x--------------------------|-------------------------|------------------| +|x----------------------------|-------------------------|------------------| +|-----------------------------|-------------------------|------------------| +| | | | +| | | | +|-----------------------------|-------------------------|------------------| +|-----------------------------|-------------------------|------------------| +|-----------------------------|-------------------------|------------------| +|--4~-------------------------|-------------3-----------|3s7---------------| +|-----------------------------|-------------------------|------------------| +|---------------2-------------|-1~----------------------|---------5~-------| + + +|5--2-----------2s8--5-----------5s11--8--------------8s14--11------------11| +|------4-----4----------7-----7-----------10------10------------13-----13---| +|---------5----------------8------------------11--------------------14------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + + +Solo +20p19p17-------------------------------------------------------------------- +----------20--19--17-------------------------------------------------------- +----------------------20--19--17s16----------------------------------------- +-------------------------------------19-17-16----17p16----------16h17-19---- +----------------------------------------------19-------19-18-19------------- +---------------------------------------------------------------------------- + + slow rel +------------19s22bf~---------20bf---20rb-------------20--19--18---17-------| +---------16----------------x-----------------------------------------------| +16-17-19-----------------x-------------------------------------------------| +-----------------------x---------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +|-----------17----------------17-20-19-17---|19-17-------17----------------- +|20bf--20~-----20-19-17-19-20-------------20|------20-19----20-19-17-20-19-- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- +|-------------------------------------------|------------------------------- + + +--------------------------------------|------------------------------------- +17-16-20--19--17--16--19--17--16--17~-|~17---------------------------------- +--------------------------------------|------11----------11-14p12p11-12----- +--------------------------------------|---------14p13h14-------------------- +--------------------------------------|------------------------------------- +--------------------------------------|------------------------------------- + + +----------------11-14p12p11s12-14|14bf-rb14--12----14----15----17----17bf--| +11-12-13p11h12-------------------|--------------12----12----12----12-------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| +---------------------------------|-----------------------------------------| + + +rb17p15-17bf~--------------------15-19p17-15----17-15----15----------------| +-----------------15s19--15-17-19-------------19-------19----19-17-15-------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +19s20s19-17----19-17-------17----------22bf---------------------------22---| +------------20-------20-19----20-19-17-------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + +|t17p8h11h14t17p14p11p8h11t17p14p11p8h11t17p14-t17p14p11p8h11-t17p14p11p8h11 +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +t17p14-t17p14p11p8h11-t17p14-17p14p11p8s7-----------------7----------------| +------------------------------------------10bf-rb10p7--------10p7----------| +-------------------------------------------------------9----------9bf-rb9p8| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + +Trem pick 1/2 +-----------------------------------------------|------------19b--------rb19| +-----------------------------------------------|---------16----------------| +8--8--9--9--11--11s12--12s14--14--16~----------|16h17h19-------------------| +---------------------------------------16h17h19|---------------------------| +-----------------------------------------------|---------------------------| +-----------------------------------------------|---------------------------| + +* dive with bar 1 1/2 scoop dive +|---------------------------------------------|--------------7p5-8-11p8h11p8 +|10-7*---------------------10---10------7-----|------10bf~------------------ +|---------------------------------------------|----x------------------------ +|---------------------------------------------|--x-------------------------- +|---------------------------------------------|x---------------------------- +|---------------------------------------------|----------------------------- + + +----14p11h14p11---------14-|-17p14h17p14---------17-20p17----17------22bf--- +s13--------------13s16-----|--------------16s19-----------19-------x-------- +---------------------------|-------------------------------------x---------- +---------------------------|------------------------------------------------ +---------------------------|------------------------------------------------ +---------------------------|------------------------------------------------ + + 1/2 +rb22--22b~------------17-20-19-17s15-|19-17p15----19p17-------17------------ +-------------16-17-19----------------|---------19-------19p17----19-17p16--- +-------------------------------------|-------------------------------------- +-------------------------------------|-------------------------------------- +-------------------------------------|-------------------------------------- +-------------------------------------|-------------------------------------- + + + +The Queen is in Love... +------------------------------------------------|--------------------------| +19-17p16----17----------------------------------|----15bf------------------| +---------17-----17-17-20p17------16h17p16----16-|--------------------------| +-----------------------------19-----------19----|--------------------------| +------------------------------------------------|--------------------------| +------------------------------------------------|--------------------------| + +hold bend +|17bf-------|-t22~-t22~----|-t22~------------------------------------------| +|-----------|--------------|--------xs-------------------------------------| +|-----------|--------------|--------xs-------xs----------------------------| +|-----------|--------------|-----------------xs----------------------------| +|-----------|--------------|-----------------------------------------------| +|-----------|--------------|-----------------------------------------------| + + +|------------------------|---------------------|---------------------------| +|------5-----------------|---------------------|------5--------------------| +|------4-----------------|---------------------|------4--------------------| +|------2--------2--------|4--------7~------7~--|------2---------2----------| +|---------------3--------|5--------7~------7~--|----------------3--------3s| +|0--0-----0--0-----0--0--|---0--0-------0------|0--0-----0-0-0-------------| + + +|-----------------------| +|-----------------------| +|---0----------0--------| +|------4----------2-----| +|5--------5s3--------3--| +|-----------------------| + +repeat til fade + + diff --git a/guitar/tabs/Malmsteen/resurrection.tab b/guitar/tabs/Malmsteen/resurrection.tab new file mode 100644 index 0000000..c2b4c01 --- /dev/null +++ b/guitar/tabs/Malmsteen/resurrection.tab @@ -0,0 +1,145 @@ +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +From: "Avinash Acharya" +Subject: m/malmsteen_yngwie/resurrection.tab +Date: Mon, 27 Aug 2001 10:57:19 +0000 + +************Guitar Tablature************* +* Resurrection by Yngwie Malmsteen * +* Tabbed by Avinash Acharya * +* * +* Usual disclaimers apply, hehe * +***************************************** + +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ +9--------8--------7--------10-------9--8-------------------------------- +7--7--7--7--7--7--7--7--7--7--7--7--7--7-------repeat------------------- +------------------------------------------------------------------------ + . . . . . . . . + + +------------------------------------------------------------------------ +-----------------------------------------------------(This is repeated)- +-------------------------7h9p7-----------------------(a-few-times-----)- +--9--5--7---------7h9h10-------10p9p7----------------------------------- +--7--3--5--7h9h10---------------------10p9p7---------------------------- +---------------------------------------------10p8p7~ ------------------- + + + +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ +--8-9-----------------8-9-------------8-9--4-5-6-7-8-9------------------ +--6-7-7-7-7-7-7-7-7..-6-7-7-7-7-7-...-6-7--2-3-4-5-6-7---3~~ ----------- +-------------------------------------------------------0---------------- + . . . . . . . . . . + + +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ +---------------------4------5-----2------------------------------------- +-3-2-0-3-2-0-----2---5--5-2-3-2~--0------------------------------------- +-------------3-2-0------3------------6~~---/\/14-15-17-15-14-15-17------ + + + +--------------------------------------------------15-17-19-17p15h17-19^f +-----------------------------------------15-17-19----------------------- +-------------------------------(14-16-17)X-2---------------------------- +-----------14-16-17-16-14-16-17----------------------------------------- +-14-15-17--------------------------------------------------------------- +------------------------------------------------------------------------ + +That basically makes up all the verses and interludes +make your own interludes..all on E minor scale. Keep it smooth and cool! + +The Solo + + +-12p7-----11p7------14p9------16p13----------13-s-19p16----------16-19^f +------8--------7---------9----------14----14------------18----18-------- +--------9--------8---------10----------13------------------18----------- +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ + + This switch from Emin to F#min is really cool, I think + +14p9----------9-14p9-14p9----------9-13-14-9-10----9------------------------ +-----10----10-------------10----10--------------12---10-12-9-10----9-------- +--------11-------------------11---------------------------------11---10-11~~ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + + +10p7-------7-10p7-10p7-------7-12p9----9-14p9----------9-14p9-14p9----- +-----7---7-------------7---7--------10--------10----10-------------10--- +-------7-----------------7-----------------------11-------------------11 +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ + + + +---9-13p9----9-14p9----------9-14p9-14p9----------9-13-14-9-10----9---- +10--------10--------10----10-------------10----10--------------12------- +-----------------------11-------------------11-------------------------- +------------------------------------------------------------------------ +------------------------------------------------------------------------ +------------------------------------------------------------------------ + + +---------------------------------------------------------------14-16-16p14-- +10-12-9-10----9---------------------------------------------14------------14 +-----------11---10-11-7-10-6-7-4-6---4-------------------14----------------- +-----------------------------------7---6-7-4-6-3-4~~-/16-------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + +19^-19p17h19-17p16^h-16----16-------------17-19-21-22~-21-19---------------- +------------------------19----19-18-19-21--------------------12^~-12~-10-9-- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + +---------------------------------------------------------------------------- +10-10-10-12-10-9-7-10-9-7-6-9-7-6---7-6-----6------------------------------- +----------------------------------7-----7-6---7-6-4-7-6-4---6-4------------- +----------------------------------------------------------7-----7-6h7p6p4--- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + +--------------------------------------------(7p4---4)(10p7---7)(13p10----10)- +-------------------------------------------------6----------9----------12---- +-13--13/14--14\6---------------4^-4p2h4p2p0---------------------------------- +----------------------------------------------------------------------------- +-11--11/12--12\4-4-2h4p2p0h2~------------------------------------------------ +----------------------------------------------------------------------------- + +(16p13----13)(19p16----16)-19^~~~~~~----|----------------------------------- +-------15------------18-----------------|----------------------------------- +----------------------------------------|----------------------------------- +----------------------------------------|--------6-6------------------------ +----------------------------------------|---4----4-4--2--------------------- +----------------------------------------|---2---------0--/12^~~~----------- + +And then return to chorus + +I haven't tabbed the last solo. Jam it out over E minor. Should be fun while +ending the song. I figured it out just by ear, so I am sorry if there are +any +mistakes. This is just the way I like playing it. + +You may e-mail me with suggestions or comments at : avi_ach@rediffmail.com diff --git a/guitar/tabs/Malmsteen/rising_force.tab b/guitar/tabs/Malmsteen/rising_force.tab new file mode 100644 index 0000000..0e23584 --- /dev/null +++ b/guitar/tabs/Malmsteen/rising_force.tab @@ -0,0 +1,447 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: cs922185@ariel.cs.yorku.ca (ALEX SAVIC) + + RISING FORCE + ------------ + + Words and Music by + YNGWIE MALMSTEEN/JOE LYNN TURNER + + Transcription by + Dave Whitehill + + Converted to ASCII text by + Aleksandar Savic + + + +E ||---6------------|-----------------|-8---------------|----------------|| +B ||---7------------|-----------------|-8---------------|----------------|| +G ||o--6------------|-----------------|-9---------------|---------------o|| +D ||o---------------|-----------------|-----------------|---------------o|| +A ||----------------|-----------------|-----------------|----------------|| +E ||----------------|-----------------|-----------------|----------------|| + + 3 times +E ||----------------|-----------------|-----------------|----------------|| +B ||----------------|-----------------|-----------------|----------------|| +G ||o---------------|-----------------|-----------------|---------------o|| +D ||o---------------|-----------------|-----------------|---------------o|| +A ||----------------|-----------------|-----------------|----------------|| +E ||-0-0-0-0---0--0-|---0---0-0-0-0-0-|-0-0-0-0---0---0-|---0---0-0-0-0--|| + + +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |-4---------------|-----------7-----|-----------------|-----------------| +D |-5---------------|-----------7-----|-----------------|-----------------| +A |-5h7---------5h7-|-----5h7---5-----|-5h7-----------7-|---5-------------| +E |-------0-0-0-----|-0-0-------------|-----0-0-0-0-0---|-----7-6-5-3-----| + +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |-----------------|-----------7-----|-----------------|-----------------| +D |-----------------|-----------7-----|-----------------|-----------------| +A |-5h7---------5h7-|-----5h7---5-----|-5h7-----------7-|---5-------------| +E |-------0-0-0-----|-0-0-------------|-----0-0-0-0-0---|-----7-6-5-3-----| + +E ||----------------|-----------------|-----------------|----------------|| +B ||----------------|-----------------|-----------------|----------------|| +G ||o---------------|-----------------|-----------------|---------------o|| +D ||o---------------|-----------------|-----------------|---------------o|| +A ||--5h7-------5h7-|-----5h7---5-----|-5h7-----------7-|-5--------------|| +E ||------0-0-0-----|-0-0-------------|-----0-0-0-0-0---|---7-6-5-0-3h0--|| + +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |--5----7----9----|-----------------|---4----5----7---|-----------------| +D |--7----9----10---|-----------------|---5----7----9---|-----------------| +A |-----------------|-----------------|-----------------|-----------------| +E |-----------------|-----------------|-----------------|-----------------| + +E |-----------------|-----------------|-----------------|----harm.--------| +B |-----------------|-----------------|-----------------|-----------------| +G |---2----4----5---|-----------------|-----------------|-----------------| +D |---4----5----7---|-----------------|--5\2--7\4--9\5--|-----------------| +A |-----------------|-----------------|--3----5----7----|-----------------| +E |-----------------|-----------------|-----------------|------7----------| + + + + Repeat 4 times for each verse +E ||-----------------|-----------------|-----------------|---------------|| +B ||-----------------|-----------------|-----------------|---------------|| +G ||o----------------|-----------------|-----------------|--------------o|| +D ||o----------------|-----------------|-----------------|--------------o|| +A ||--5h7------------|-----------------|---------------7-|-5-------------|| +E ||-----0-0-0-0-0-0-|-0-0-0-0-0-0-0-0-|-0-0-0-0-0-0-0---|---7-6-5-0-3h0-|| + + + Out .. + Riding .. + The .. + I .. + + + Searching .. + I .. + Through .. + Power .. + + + + The .. +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |-----------------|-----------------|-----------------|-----------------| +D |-----------------|-----------------|-------------5---|-----------------| +A |--------------5--|--5-5-5-5-5--5---|-------------3---|--3-3-3-3-3-3----| +E |-5--5-5-5-5-5----|-------------3---|--3-3-3-3-3------|-----------------| + + It .. +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |-----------------|-----------------|-----------------|--4-----5--------| +D |-----------------|-----------------|---5-----7-------|--5-----7--------| +A |--5--5-5-5-5-5-6-|--6-6-6-6-6-6----|---7-----9-------|-----------------| +E |-----------------|-----------------|-----------------|-----------------| + + Thunder ... +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |--------------7--|--------7--------|---------------5-|-(5)-------------| +D |-7------------7--|--------7--------|--5------------5-|-(5)-------------| +A |-7------------5--|--5-5-5-5-5--5---|--5------------3-|-(3)-------------| +E |-5--5-5-5-5-5----|-----------------|--3--3-3-3-3-3---|-----------------| + + I .. + I .. +E |-----------------|-----------------| +B |-----------------|-----------------| +G |--7--------------|-----------------| +D |--7--------------|-----------------| +A |--5--5-5-5-5-5-6-|---6-----6-------| +E |-----------------|-----------------| + + _____________________________________________________________ + | 1. + Force +E |------------------------------------11-12--|-----------------| +B |------------------------------12h13--------|-----------------| +G |---------------------11-13-14--------------|-----------------| +D |------------10-12-14-----------------------|-----------------| +A |-9h10-12-14--------------------------------|-----------------| +E |-------------------------------------------|------12---------| + + ___________________________________________ + | 2. + Force +E |-8h7h5-------------------|-----------------| +B |-------8-7-5h4-----------|-----------------| +G |---------------5h4-------|-----------------| +D |-------------------7h5h4-|--------9--------| +A |-------------------------|-7------7--------| +E |-------------------------|-----------------| + + + +E ||----------------|-----------------|-----------------|----------------|| +B ||----------------|-----------------|-----------------|----------------|| +G ||o---------------|-----------------|-----------------|---------------o|| +D ||o---------------|-----------------|-----------------|---------------o|| +A ||--5h7-------5h7-|-----5h7---5-----|-5h7-----------7-|-5--------------|| +E ||------0-0-0-----|-0-0-------------|-----0-0-0-0-0---|---7-6-5-0-3h0--|| + +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |--5----7----9----|-----------------|---4----5----7---|-----------------| +D |--7----9----10---|-----------------|---5----7----9---|-----------------| +A |-----------------|-----------------|-----------------|-----------------| +E |-----------------|-----------------|-----------------|-----------------| + +E |-----------------|-----------------|-----------------|----harm.--------| +B |-----------------|-----------------|-----------------|-----------------| +G |---2----4----5---|-----------------|-----------------|-----------------| +D |---4----5----7---|-----------------|--5\2--7\4--9\5--|-----------------| +A |-----------------|-----------------|--3----5----7----|-----------------| +E |-----------------|-----------------|-----------------|------7----------| + + + + + +E ||--15h12-------15h12-------15h12-------14h12-------| +B ||--------12-12-------12-12-------12-12-------12-12-| +G ||o-------------------------------------------------| +D ||o-------------------------------------------------| +A ||--------------------------------------------------| +E ||--------------------------------------------------| + +E |-15h12-------17h12-------15h12-------14h12---------| +B |-------12-12-------12-12-------12-12-------12-12---| +G |---------------------------------------------------| +D |---------------------------------------------------| +A |---------------------------------------------------| +E |---------------------------------------------------| + +E |-15h12-------15h12-------15h12-------14h12---------| +B |-------13-13-------13-13-------13-13-------13-13---| +G |---------------------------------------------------| +D |---------------------------------------------------| +A |---------------------------------------------------| +E |---------------------------------------------------| + +E |-15h12-------17h12-------15h12-------14h12---------| +B |-------13-13-------13-13-------13-13-------13-13---| +G |---------------------------------------------------| +D |---------------------------------------------------| +A |---------------------------------------------------| +E |---------------------------------------------------| + +E |-17h14----14h17h14----14h17h14----14h15h14---------| +B |-------15----------15----------15----------15------| +G |---------------------------------------------------| +D |---------------------------------------------------| +A |---------------------------------------------------| +E |---------------------------------------------------| + +E |-17h14----19h14----14h17h14-14--17h14--------------| +B |-------15-------15--------------------15-----------| +G |---------------------------------------------------| +D |---------------------------------------------------| +A |---------------------------------------------------| +E |---------------------------------------------------| + +E |-19h15----15-19------7h3---3-7--|-19h15----15-19------7-3---3-7---|| +B |-------17----------------5------|-------17----------------5-------|| +G |--------------------------------|--------------------------------o|| +D |--------------------------------|--------------------------------o|| +A |--------------------------------|---------------------------------|| +E |--------------------------------|---------------------------------|| + + +E |-20h17----17-20-----8h5---5-8--|-20h17----17-20-----8h5---5-8-| +B |-------17---------------5------|-------17---------------5-----| +G |-------------------------------|------------------------------| +D |-------------------------------|------------------------------| +A |-------------------------------|------------------------------| +E |-------------------------------|------------------------------| + +E |-17h14----14-17-----5h2---2-5--|-17h14----14-17-----5h2---2-5-| +B |-------15---------------3------|-------15---------------3-----| +G |-------------------------------|------------------------------| +D |-------------------------------|------------------------------| +A |-------------------------------|------------------------------| +E |-------------------------------|------------------------------| + +E |-15h12----12-15-----3h0---0-3--|-15h12----12-15-----3h0---0-3-| +B |-------13---------------1------|-------13---------------1-----| +G |-------------------------------|------------------------------| +D |-------------------------------|------------------------------| +A |-------------------------------|------------------------------| +E |-------------------------------|------------------------------| + +E |-5h2---2-5h2---5-8h5---5-8h5---|-11h8---8-11h8---11-14h11---11-14h11--14-| +B |-----4-------4-------7-------7-|-----10-------10---------13---------13---| +G |-------------------------------|-----------------------------------------| +D |-------------------------------|-----------------------------------------| +A |-------------------------------|-----------------------------------------| +E |-------------------------------|-----------------------------------------| + +E |-17-14h17-20h19h17-------------------|-----------------------------------| +B |-------------------20h19h17-16-------|-----------------------------------| +G |-------------------------------17h16-|-----------------------------------| +D |-------------------------------------|-19h17h16--------------------------| +A |-------------------------------------|----------19-18---19^--------------| +E |-------------------------------------|-----------------------------------| + + + +E |-----------------|---------------------|-------------------------------| +B |-----------------|----------8-10/11-10-|-8-11-10-8-7h8h7---7-----------| +G |-----------------|--------7------------|-----------------9-------------| +D |-----------------|------8--------------|-------------------------------| +A |-----------------|-9-10----------------|-------------------------------| +E |-----------------|---------------------|-------------------------------| + +E |-----------------------|----------------------------| +B |----------7--5/7--5----|--------------5h7h8--5h7----| +G |--7--9--------------7--|--6----6--7h9-------------7-| +D |-----------------------|----------------------------| +A |-----------------------|----------------------------| +E |-----------------------|----------------------------| + +E |-------6h7h9/10h9h7\6-------|-----------------------| +B |-5h7h8----------------8-7h10|h8------7--------------| +G |----------------------------|----------9h7h6--------| +D |----------------------------|-----------------9h7---| +A |----------------------------|-----------------------| +E |----------------------------|-----------------------| + + + +E |-16~~~~-|-----------------17-16------16------|-------------------------| +B |-17^----|-19-17-16--16-19-------19-17--19-17-|-19-17-16---17-16-----16-| +G |--------|---------18-------------------------|---------18------18-17---| +D |--------|------------------------------------|-------------------------| +A |--------|------------------------------------|-------------------------| +E |--------|------------------------------------|-------------------------| + +E |----------------------------------|------------------------------------| +B |-14h13--14--------14--14h13-------|--13--------------------------------| +G |------16--16h14h13--16-----16h14--|----16-14-13--14h13-----13----------| +D |----------------------------------|------------16-----16-14--16-14-13--| +A |----------------------------------|------------------------------------| +E |----------------------------------|------------------------------------| + +E |-----------------------------|-------------------------------------|-----| +B |---------------------------13|14-16--14h16h17h14-16h17h19-16h17h19-|-19^-| +G |-------------------13h14h16--|-------------------------------------|-----| +D |-16-14h13--13-14h16----------|-------------------------------------|-----| +A |---------16------------------|-------------------------------------|-----| +E |-----------------------------|-------------------------------------|-----| + + + + w/ bar +E |-------------------|------------------|----------|---------------------| +B |-7h9h7-------------|------------------|----------|---------------------| +G |-------9-8-6-------|------------------|----------|---------------------| +D |-------------9-8-6-|-8h9h8------------|----------|-v-------------------| +A |-------------------|-------11-9-8-7-8-|-h9-8-8h6-|-5---v---------------| +E |-------------------|------------------|----------|-----7---------------| + + + + tr ~~~~ +E |---19h20h19--------|-20h17-19-17----17-------17----------| +B |-------------------|-------------20----19h20----20h19-17-| +G |-------------------|-------------------------------------| +D |-------------------|-------------------------------------| +A |-------------------|-------------------------------------| +E |-------------------|-------------------------------------| + +E |-17----17----------------------------|----------------------------| +B |----20----20h19-17-20h19-20h19h17-16-|h17h16----------------------| +G |-------------------------------------|-------17h16----------16~~--| +D |-------------------------------------|-------------19-17-16-------| +A |-------------------------------------|----------------------------| +E |-------------------------------------|----------------------------| + +E |-19--19~~-|-7-8h5-7---|-5-----------------|-----------------------| +B |----------|---------8-|---8h7h5-8h7h5-----|-----4h5h4-------------| +G |----------|-----------|---------------8-4-|h5h7-------7h5h4-------| +D |----------|-----------|-------------------|-----------------7h5h4-| +A |----------|-----------|-------------------|-----------------------| +E |----------|-----------|-------------------|-----------------------| + + + + + Burned .. + The .. + A .. + Heaving .. + + + The .. +E ||-----------------|-----------------|-----------------|----------------| +B ||-----------------|-----------------|-----------------|----------------| +G ||o----------------|-----------------|-----------------|----------------| +D ||o----------------|-----------------|-------------5---|----------------| +A ||--------------5--|--5-5-5-5-5--5---|-------------3---|--3-3-3-3-3-3---| +E ||-5--5-5-5-5-5----|-------------3---|--3-3-3-3-3------|----------------| + + 1.It .. + 2.I'm ... +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |-----------------|-----------------|-----------------|--4-----5--------| +D |-----------------|-----------------|---5-----7-------|--5-----7--------| +A |--5--5-5-5-5-5-6-|--6-6-6-6-6-6----|---7-----9-------|-----------------| +E |-----------------|-----------------|-----------------|-----------------| + + Thunder .. +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |--------------7--|--------7--------|---------------5-|-(5)-------------| +D |-7------------7--|--------7--------|--5------------5-|-(5)-------------| +A |-7------------5--|--5-5-5-5-5--5---|--5------------3-|-(3)-------------| +E |-5--5-5-5-5-5----|-----------------|--3--3-3-3-3-3---|-----------------| + + + I .. +E |-----------------|-----------------| +B |-----------------|-----------------| +G |--7--------------|-----------------| +D |--7--------------|-----------------| +A |--5--5-5-5-5-5-6-|---6-----6-------| +E |-----------------|-----------------| + + _____________________________________________________________ + | 1. + Force +E |------------------------------------11-12--|-----------------|| +B |------------------------------12h13--------|-----------------|| +G |---------------------11-13-14--------------|----------------o|| +D |------------10-12-14-----------------------|----------------o|| +A |-9h10-12-14--------------------------------|-----------------|| +E |-------------------------------------------|------12---------|| + + _____________________________________ + | 2. + Force +E |-8h7h5---------------------|---------| +B |-------8h7h5---------------|---------| +G |-------------8h7h5h4-------|---------| +D |---------------------7h5h4-|---------| +A |---------------------------|-7-9-7---| +E |---------------------------|---------| + + + + +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |-----------------|-----------------|-----------------|-----------------| +D |-----------------|-----------------|-7---------------|-----------------| +A |-5h7---------5h7-|-----5h7---------|-5/7---------5/7-|-----5/7---------| +E |-0---0-0-0-0-----|-0-0-----0-0-0-0-|-----0-0-0-0-----|-0-0-----0-0-0-0-| + +E |-----------------|-----------------|-----------------|-----------------| +B |-----------------|-----------------|-----------------|-----------------| +G |-----------------|-----------------|-7/9-------------|-----------------| +D |-7/9---------7/9-|-----7/9---------|-7/9---------7/9-|-----7/9---------| +A |-5/7---------5/7-|-----5/7---------|-------------5/7-|-----5/7---------| +E |-0---0-0-0-0-----|-0-0-----0-0-0-0-|-----0-0-0-0-----|-0-0-----0-0-0-0-| + +E |----------------------------------10-12-14-| +B |-------------------------10-12-13----------| +G |-9~~-------------9-11-12-------------------| +D |---------9-10-12---------------------------| +A |-------------------------------------------| +E |-------------------------------------------| + +E |h12-10----------------8-10-12-10h8---------| +B |------13-12-10-8-10-12------------12-10-8--| +G |-------------------------------------------| +D |-------------------------------------------| +A |-------------------------------------------| +E |-------------------------------------------| + harm. +E |-------7-8-10-8h7------------5-7-|-8-7-5--------------------|------------| +B |-7-8-10----------10-8-7-5-7-8----|------8-7-5-5h7h5-4-------|------------| +G |---------------------------------|-----------8-------7-5-4--|------------| +D |---------------------------------|------------------------7-|------------| +A |---------------------------------|--------------------------|-5h4--------| +E |---------------------------------|--------------------------|----7-6---7-| + +E |-6---------------|-7---------------|-7---------------|-7----------------|| +B |-7---------------|-7---------------|-8---------------|-8----------------|| +G |-6---------------|-8---------------|-9---------------|-9----------------|| +D |-----------------|-9---------------|-9---------------|-9----------------|| +A |-----------------|-9---------------|-7---------------|-7----------------|| +E |-6---------------|-7---------------|-----------------|------------------|| diff --git a/guitar/tabs/Malmsteen/save_our_love.tab b/guitar/tabs/Malmsteen/save_our_love.tab new file mode 100644 index 0000000..83c7b73 --- /dev/null +++ b/guitar/tabs/Malmsteen/save_our_love.tab @@ -0,0 +1,250 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Yngwie Malmsteen "Save Our Love" +from Eclipse +letostak@netcom.com Judy Letostak + + + guitar synth +|-----------------5-7-8-------7-8-----8-10---|-8-7----------7-8~-----------| +|---------------5----------------------------|-----10-8-10-----------------| +|-------------5------------------------------|-----------------------------| +|-----------7--------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +|--------------------------------------------|-----------------------------| +| | | +| acoustic | | +|--------------------------------------------|-----------------------------| +|-----------0--1--------------0--1p0---------|-------0-1---------0h1p0-----| +|--------2-----------------2----------2------|-----2-----------2-------2---| +|-----2-----------------2----------------2---|---3-----------3-----------3-| +|--0-----------------0-----------------------|-----------------------------| +|--------------------------------------------|-1-----------1---------------| + + +|12-13-10-13----13----13------------8-12p10p8---------------------17-------| +|------------13----12----10-9-10-12-----------12-10-9-10-------------------| +|--------------------------------------------------------9----14-----------| +|--------------------------------------------------------------------------| +|-------------------------------------------------------------12--14-------| +|--------------------------------------------------------------------------| +| | +| | +|--------------------------------------------------------------------------| +|-----------0--1-----------------------------------------0--1p0------------| +|--------2--------------------------------------------2----------2---------| +|-----2--------------------------------------------2----------------2------| +|--0--------------------------------------------0--------------------------| +|--------------------------------------------------------------------------| + + +|-17~----15--13----12--10----8----|-12-10p8--------------------------------| +|---------------------------------|---------10---------10-8----------------| +|--------16--14----12--10----9----|-12----------------------9--------------| +|---------------------------------|---------------10----------10-----------| +|---------------------------------|----------------------------------------| +|---------------------------------|----------------------------------------| +| |Verse | +| |Once ...| +|---------------------------------|----------------------------------------| +|-------0-1---------0h1p0---------|-------0---1----------0--1p0------------| +|-----2-----------2--------2------|-----2--------------2--------2----------| +|---3-----------3-------------3---|---2--------------2------------2--------| +|---------------------------------|-0--------------0-----------------------| +|-1-----------1-------------------|----------------------------------------| + + worlds ... + +|------------------------------|-------------------------------------------| +|-------0-1---------0-1-0------|-------------------3---5h6-5--3--3---------| +|-----2-----------2-------2----|------1--2--4---5--------------------------| +|---3-----------3-----------3--|---2--2--0--0------------------------------| +|------------------------------|-------------------------------------------| +|-1-----------1----------------|-0-----------------4-----------------------| + + other heart 1. My .. + 2. You .. + +|---------------0------||------------------------------|-------------------- +|-3h5-5------0---------||-------0--1---------0-1-0-----|------0-1-------0-1- +|------------------4~--||-----2------------2-------2---|----2---------2----- +|----------------------||---2------------2-----------2-|--3---------3------- +|-0--------------------||-0------------0---------------|-------------------- +|------------0--2--4~--||------------------------------|1---------1--------- + + Can't .. + Eternal .. + +---------|----------------------------|--------------0---------------------| +--0------|-----------------3--5h6-5-3-|-h5--5~----0------------------------| +----2----|-----1--2--4--5-------------|-----------------4~-----------------| +------3--|---2----0-------------------|------------------------------------| +---------|----------------------------|--0---------------------------------| +---------|-0---------------4----------|-----------0--2--4~-----------------| + + +All .. +My .. + +|-------5----5-----------5----------|------------5-------------------------| +|-----6--------6-------6-------6----|-------6------6---------6-------------| +|---5------------5---5-------5---5--|-----7----------7-----7---------------| +|-----------------------------------|---7----------------7------------5----| +|-8--------8-------8-------7--------|-5--------5-------5--------5--7-------| +|-----------------------------------|--------------------------------------| + +and .. +and .. + +|---------5------5------5-----------|----------------0---------------------| +|------6------------------6-----6---|------6---------0---------------------| +|----5---------5--------------------|--------------------------------------| +|---------------------7-------7-----|----7---------------------------------| +|-8----------7------5---------------|----------------------------------10\-| +|---------------------------8-----8-|--7-------5-----4---------------------| + + +There's .. + for .. +Chorus +|-------------------|----------------------|-------------------------------| +|-------------------|----------------------|-------------------------------| +|-------------------|----------------------|-------------------------------| +|--5----------------|-----------2----------|--3-------------0--------------| +|--3------2---------|-----------0----------|--3-------------0--------------| +|----------------5--|--4-------------3-----|--1-------------2--------------| + + +We've .. + reason to +|-----------------------|----------------------|---------------------------| +|-----------------------|----------------------|---------------------------| +|-----------------------|----------------------|---------------------------| +|--0----------5--3--2---|--5-------------------|-----------2---------------| +|---------------------5-|--3-------2-----------|-----------0---------------| +|--3--------------------|----------------5-----|--4---------------3--------| + + +ending 1 + +pretend ... + +|----------------------|------------------|--------------------------------| +|----------------------|------------------|--------0-1--------2-0h1p0------| +|----------------------|------------------|------2----------2---------2----| +|---------0------------|--0----------2----|2---2----------2-------------2--| +|--3------0------------|-------------2----|--0----------0------------------| +|--1-------------------|--3----------4----|--------------------------------| + + +|------------------------------|----------------------------|--------------- +|--------0-1--------0-1p0------|-------0-1--------0-1-0-----|-------0-1----- +|------2----------2-------2----|-----2----------2-------2---|-----2--------- +|----3----------3-----------3--|---2----------2-----------2-|---3----------- +|------------------------------|-0----------0---------------|--------------- +|--1----------1----------------|----------------------------|-1------------- + + +-------------------|| +--------0h1p0------|| +------2-------2----|| +----3-----------3--|| +-------------------|| +--1----------------|| + + +ending 2 (same lyrics as ending 1) + Guitar solo +|----------------|-------------------------------|-------------------------| +|----------------|-------------------------------|-------------------------| +|----------------|-------------------------------|----7-9-10-12-10-9-------| +|----------0-----|---0--------------0----------5/|10~----------------12-10-| +|-3--------0-----|-------------------------------|-------------------------| +|-1--------------|---3--------------3------------|-------------------------| + + +|-----------------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| +|----------------10-9tr10-9~--7~----------|--------------------------------| +|-12~----9-10-12------------------10--9~--|-7~--7-9-10-/12---12bf----------| +|-----------------------------------------|--------------------------------| +|-----------------------------------------|--------------------------------| + + +|---------------------------------------12h13p12-10------------------------- +|----------------------------9-10h12h13-------------13p12p10-9-------------- +|-----------------------9h10-----------------------------------10p9--------- +|-rb12p10-12~---9h10h12---------------------------------------------12p10p9- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + 1/2 1/2 +---------|-----------------|-------10-10h12b-rb12-10----------17p12--------- +---------|------12b--rb12--|-10h12-------------------13p12p10-------13----13 +---------|-14--------------|-------------------------------------------14--- +---------|-----------------|------------------------------------------------ +--12-11--|-12--------------|------------------------------------------------ +---------|-----------------|------------------------------------------------ + + +-12/19--20bf~--|-20bf--rb20--19-20p19-17----19----------17----------15------ +---------------|-------------------------17----17----------15--------------- +---------------|----------------------------------19\17-------17\16---16\14- +---------------|------------------------------------------------------------ +---------------|------------------------------------------------------------ +---------------|------------------------------------------------------------ + + 1/2 +-13----------12----------10--------|------------------------5-7/8--7--8----- +----12----------10-----------------|----------------------5----------------- +-------14\12-------12\10----10\9b--|-rb9--5~-------------------------------- +-----------------------------------|-----------10p7------------------------- +-----------------------------------|----------------8p7\5------------------- +-----------------------------------|---------------------------------------- + + +-10-8h10p8p7-8p7-------------------------------|----------10-13p10-13/17-13- +-----------------10p8p6\5h6p5------------------|-------10------------------- +-------------------------------7p5\4-----------|----10---------------------- +-------------------------------------7p5-------|-12------------------------- +-----------------------------------------8p7-5-|---------------------------- +-----------------------------------------------|---------------------------- + + +--------------13---------------------/17--16-18-15-18----18----18----------- +-15--------------15-----------------------------------18----17----15-14tr15- +----14--------------14------------------------------------------------------ +-------15p14-----------15\14---12~------------------------------------------ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + 1/2 1/2 +------17p13--|----------13-17/20bf--21b--rb21--21b--rb21--18-21-------18---- +-14~---------|-15----15-----------------------------------------20-20----17- +-------------|----14-------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- + + +-15----------------12\17-|-18--18bf--rb18--17h18p17-15-17-17~\--17/19------- +----14-14h17----14-------|--------------------------------------------12---- +-------------15----------|-----------------------------------------------14- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- + + +-----12-12h17p12------------12-12h17p12------------12-12h17p12----/22bf----| +--12-------------12------12-------------12------12-------------12----------| +----------------------14---------------------14----------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + +chorus + +end + diff --git a/guitar/tabs/Malmsteen/save_out_love.tab b/guitar/tabs/Malmsteen/save_out_love.tab new file mode 100644 index 0000000..99d4fe6 --- /dev/null +++ b/guitar/tabs/Malmsteen/save_out_love.tab @@ -0,0 +1,61 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: Kevin Calmes + + + Save Our Love - Yngwie J. Malmsteen (c) 1990 (From "Eclipse") + +Key: Am Tempo: Slow 4/4 + +Intro. |: Am | Am | Fma7 | Fma7 :| + + Am Fma7 +1. Once .. + E Am E + Deep .. + Am Fma7 + My .. + E Am E + Can't ..... + + F F/E Dm +PC. All .. + F F/E Dm Dm/C + Still .. + G/B F/A E/G# + Let's .. + + C C/B E/G# +C. |: There's .. + Am Am/G F D/F# G + There .. + F G C + We've ..:| + + + + Am Fma7 +2. You .. + E Am E + Eternal .. + F F/E Dm + My .. + F F/E Dm Dm/C + So .. + G/B F/A E/G# + Let's ... + + + + | C | C/B Am | E/G# | Am Am/G | F | D/F# | G | E/G# | + + |: Am | Am | Fma7 | Fma7 :| + + | Dm | A/C# | Dm | A/C# | Gm | Gm/F | Esus4 | E | + + + + 2x FADE END + diff --git a/guitar/tabs/Malmsteen/soldier_without_faith.tab b/guitar/tabs/Malmsteen/soldier_without_faith.tab new file mode 100644 index 0000000..900a05e --- /dev/null +++ b/guitar/tabs/Malmsteen/soldier_without_faith.tab @@ -0,0 +1,611 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "Soldier Without Faith" +from Marching Out +letostak@netcom.com +tune down 1/2 step + + +|-----------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-----------------------|----9--x--x--10--x--x--9--x--x--7--x--x--4\5------| +|-----------------------|----7--x--x---6--x--x--7--x--x--6--x--x--6\7------| +|-----------3--2--0-----|-0------------------------------------------------| +|--0--1--3-----------4--|--------------------------------------------------| + + +|-------------------------------------------------| +|-------------------------------------------------| +|-x--x--9--x--x--10--x--x--9--x--7--x--5--x-------| +|-x--x--7--x--x---6--x--x--7--x--6--x--7--x--6~---| +|-------------------------------------------------| +|-------------------------------------------------| + + +|--------------------------------------------------|-----------------------| +|--------------------------------------------------|-----------------------| +|----9--x--x--10--x--x--9--x--x--7--x--x--4\5------|-----------------------| +|----7--x--x---6--x--x--7--x--x--6--x--x--6\7------|-----------------------| +|-0------------------------------------------------|-----------3--2--0-----| +|--------------------------------------------------|--0--1--3-----------4--| + + +|--------------------------------------------------| +|--------------------------------------------------| +|----9--x--x--10--x--x--9--x--x--7--x--x--4\5------| +|----7--x--x---6--x--x--7--x--x--6--x--x--6\7------| +|-0------------------------------------------------| +|--------------------------------------------------| + + +|-------------------------------------------------| +|-------------------------------------------------| +|-x--x--9--x--x--10--x--x--9--x--7--x--5--x-------| +|-x--x--7--x--x---6--x--x--7--x--6--x--7--x--6~---| +|-------------------------------------------------| +|-------------------------------------------------| + + +|--------------------------------------------------| +|--------------------------------------------------| +|----9--x--x--10--x--x--9--x--x--7--x--x--4\5------| +|----7--x--x---6--x--x--7--x--x--6--x--x--6\7------| +|-0------------------------------------------------| +|--------------------------------------------------| +Continue rhythm through solo + + +|-----------------------12h13p12p10----------------------------------------- +|-----------------10-12-------------13p12p10---------10h12p10p8------------- +|---------9-10-12----------------------------12p10p9------------10h12p10p9-- +|-9-10-12------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-----------------|----------------------------------------------12h13p12p10- +-----------------|---------------------------8-7-9-8-10-9-12p10------------- +-10p9------------|------5---5-4-7-5-9-7-10p9-------------------------------- +------12p10-9~---|-x/7----7------------------------------------------------- +-----------------|---------------------------------------------------------- +-----------------|---------------------------------------------------------- + + +-------------------|---------------------------------------------12h13p12p10 +-13p12p10----------|-10h12p10p8---------------13p12p10\9-------------------- +----------12p10\9--|------------10p9p7-------------------12p10p9------------ +-------------------|-------------------10p9p7------------------------------- +-------------------|-------------------------------------------------------- +-------------------|-------------------------------------------------------- + + +----------15bf~--12h13p12|p10----------19p16----19--19\16p13----16\13p10---- +-13p12p10----------------|----13p12p10-------18--------------15----------12- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- + + 1 1/2 1/2 1/2 +-13/16p13----------13-16p13----19p16-------|-16-21b-rb21--b21~-------------| +----------15p12-15----------15-------18----|-------------------------------| +----------------------------------------19-|-------------------------------| +-------------------------------------------|-------------------------------| +-------------------------------------------|-------------------------------| +-------------------------------------------|-------------------------------| + + +|-20-19-17-16-17-19-20-19-17-16-17-19-20-19-17-16-19-17-16----17-16--------- +|----------------------------------------------------------18-------18p17h18 +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-16----------|-------------------------------------------------------------- +----17h18p15-|-18-15-17h18p17-15-21-15-17h18p17-15-18p17p15\13-17p15p13\12-- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- + + +------------------------|-20bf--20bf--19-17-16------------------------------ +-15p13p12h13p12---------|----------------------18-17-15--------------------- +----------------14-13~--|-------------------------------17-16-14-13--------- +------------------------|-------------------------------------------15-14-12 +------------------------|--------------------------------------------------- +------------------------|--------------------------------------------------- + + +----|------------------------------| +----|------------------------------| +----|------------------------------| +----|------------------------------| +-15-|-14-12-11-14-12-11----11------| +----|-------------------13----12~\-| + + +Verse +1. Now .. +2. Fighting .. +3. Lost ... + + +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|------5-----4-----2-----------2-----------4~--|------5-----4-----2--------- +|-2-------2-----2-----x--5--2-----x--5--4------|-0h2-----2-----2-----4--5--- + + +-----------------------| +-----------------------| +-----------------------| +-----------------------| +--2-----2--------------| +-----4-----5--4--2--1--| + + + +dead .. +they .. +just ..His + + +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|-------5-----4-----2-----------------------4~-|------5-----4-----2--------- +|-2--2-----2-----2-----2--5--2--4--2--5--4-----|-0h2-----2-----2-----2--5--- + + +-----------------------| +-----------------------| +-----------------------| +-----------------------| +----------4--2---------| +-2--4--2--------5--4---| + + +Marched ..no +Slaying ... +mother ... + +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|----------------------------------------------|---------------------------- +|-------5-----4-----2-----------2-----------4~-|------5-----4-----2--------- +|-2~-------2-----2-----2--5--2-----2--5--4-----|-0h2-----2-----2-----4--5--- + + +--------------------------| +--------------------------| +--------------------------| +--------------------------| +--2-----2-----------------| +-----4-----5--4--2--1-----| + + + +glory .. +keep .. +twisted .. + + +|-------------------------------------------------|-------------------------| +|-------------------------------------------------|-------------------------| +|-------------------------------------------------|-------------------------| +|-------------------------------------------------|-------------------------| +|-------5-----4-----2-----------------------5-----|-4-----2-----------------| +|-2--2-----2-----2-----2--5--2--4--2--5--2-----2--|----2-----2--5--2--4--2-2| + + +Gotta .. +|---------------------------|-------------------------|--------------------| +|--2~-----------------------|---3~--------------------|---3---------3------| +|--2~-----------------------|---2~--------------------|---4---------4------| +|--4~-----------------------|---4~--------------------|---6---------4------| +|---------------------------|-------------------------|--------------------| +|---------------------------|-------------------------|--------------------| + + +Gotta ... +|---------------------------|-------------------------|--------------------| +|--2~-----------------------|---3~--------------------|---3----------5bf---| +|--2~-----------------------|---2~--------------------|---4--------x-------| +|--4~-----------------------|---4~--------------------|---6------x---------| +|---------------------------|-------------------------|--------------------| +|---------------------------|-------------------------|--------------------| + + +|---------------------------------------------|----------------------------- +|---------------------------------------------|----------------------------- +|---------------------------------------------|-----------------------6-6--- +|---------------------------------------------|-----------------------6-6--- +|------5-----4-----2-----------2-----------4~-|------5-----4-----2----4-4--- +|-0h2-----2-----2-----2--5--2-----2--5--4-----|-0h2-----2-----2----2-------- + + +----------|----------------------------------------|------------------------ +----------|----------------------------------------|------------------------ +-6--6-----|-------------------------6--6-----6--6--|------------------------ +-6--6-----|----------4--3-----------6--6-----6--6--|-4--3h4p3--------3------ +-4--4-----|-2--4--5--------5--4--2--4--4-----4--4--|-----------5--4-----5--4 +----------|----------------------------------------|------------------------ + + +-----------------------------|---------------------------------------------| +-----------------------------|---------------------------------------------| +-----------------------------|---------------------------------------------| +-----------------------------|--4----4--------------4---4------------------| +--2--5--4--2-----4--2--------|--4----4--------------4---4------------------| +--------------5--------5--4--|--2----2--------------2---2------------------| + + +Solo + 1/2 1/2 +|-10bf-rb-9p7--------7bf-rb-p5p4--------------------------------------------| +|-------------10p9p7-------------7p6p3-9b---rb-p6---------------------------| +|-------------------------------------------------7p6----10b--rb-p6---------| +|-----------------------------------------------------9-------------9p7p6---| +|-------------------------------------------------------------------------8-| +|---------------------------------------------------------------------------| + + +|-----------------------9h13p12h13p12p10\9h10p9----|-------9---------------- +|--------------------10-------------------------12-|-10-12---12-10-9----10p- +|-----------------11-------------------------------|-----------------10----- +|--------------11----------------------------------|------------------------ +|-\9~----11-12-------------------------------------|------------------------ +|--------------------------------------------------|------------------------ + + +----------------------|--------------9-12-13p12p10\9h10p9h10----|-10p9------ +-9--------------------|------9-10-12-------------------------12-|------12--- +---11bf---12-11-12-11-|-11~-------------------------------------|----------- +----------------------|-----------------------------------------|----------- +----------------------|-----------------------------------------|----------- +----------------------|-----------------------------------------|----------- + + +-------9----9h10p9\7--------------------------9h10p9p7-----|---------------- +-10-12---12----------10p9p7h9-6---------6h7h9----------10p9|p7-------------- +--------------------------------7p6-7h9--------------------|---10p9p7\6----- +-----------------------------------------------------------|---------------- +-----------------------------------------------------------|---------------- +-----------------------------------------------------------|---------------- + + +--------------------------9-14/17p14--------17/21~-------------------------| +-10p9p7----------------10------------14------------------------------------| +--------10p9p7------11------------------14---------------------------------| +---------------9/11--------------------------------------------------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + 1/2 1/2 1/2 +|-19h21-17-21-16-21-------------|------16-17-19----------------------------| +|-------------------19-21b--21b-|--rb------------21b-----------------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| +|-------------------------------|------------------------------------------| + + 1/2 +|----------14-16b--p14-16-12-14-10h12p10-----------------------------------| +|-------14-------------------------------12-9h10h12p10---------------------| +|----14-------------------------------------------------10--11bf~----------| +|-16-----------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + +|-------------------------------------------|------------------------------- +|-9-10-----9--------------------------------|-----------------------------10 +|------11~---10-11----10--------------------|--------------------10-11-13--- +|------------------12----11h12p11p9-11p9----|------------9-11-12------------ +|----------------------------------------12-|-11-9-11-12-------------------- +|-------------------------------------------|------------------------------- + + +-------12-10-------10\9-------9\7---------7--------|------------------------ +-12-14-------14-12------12-10-----10p9h10---10p9p7-|-10-9-7\5-9-7-5---7-5--- +---------------------------------------------------|----------------7-----7- +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ +---------------------------------------------------|------------------------ + + +-----------------------|---------------------------------------------------- +---5-------------------|--------------------------------------------10-11--- +-6---7-6-7-6-4bf--t12~-|-4b-t12--b4--t12-----7-t11p7\6b-\4p2~---/11--------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- +-----------------------|---------------------------------------------------- + + 1 1/2 +-10\9-|-13p10p9\8h10p8-9--------------------|-------------|-9-10-12-12h13p12 +------|------------------12bf--rb12--12bf~--|--12bf~------|----------------- +------|-------------------------------------|-------------|----------------- +------|-------------------------------------|-------------|----------------- +------|-------------------------------------|-------------|----------------- +------|-------------------------------------|-------------|----------------- + + +-p10-13-12-10-9-10-12h13p12p10-9-10-12-13p12p10-12h13p12p10-12h13p12p10|12h- +-----------------------------------------------------------------------|---- +-----------------------------------------------------------------------|---- +-----------------------------------------------------------------------|---- +-----------------------------------------------------------------------|---- +-----------------------------------------------------------------------|---- + + +-13p12p10-12h13p12p10-9-10-12-13-10-12-14\16-16~-16\19-19-|19/21-21-21~----- +----------------------------------------------------------|----------------- +----------------------------------------------------------|----------------- +----------------------------------------------------------|----------------- +----------------------------------------------------------|----------------- +----------------------------------------------------------|----------------- + + +-21-17h21-17----0-17p13-------|-21p17-------17-14-16-17-16-14-21-14-16-17-16 +-------------19---------14----|-------18------------------------------------ +---------------------------14-|----------18--------------------------------- +------------------------------|--------------------------------------------- +------------------------------|--------------------------------------------- +------------------------------|--------------------------------------------- + + 1 1/2 1 1/2 1/2 1/2 +-14-19-16-17-19-17-16-19/21b----|--21b--rb21--21b---19-21-17-21-16-21------| +--------------------------------|---------------------------------------19-| +--------------------------------|------------------------------------------| +--------------------------------|------------------------------------------| +--------------------------------|------------------------------------------| +--------------------------------|------------------------------------------| + + +|-21------------------------------------------------------------------------ +|-----19bf~--18h19p18p17-19----19-18-17-19-17-16----16-17-18h19p18-17-16-17- +|---------------------------18-------------------19------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-------|-17-16-21p17-------17px----------------9--12h14p12p10--------------- +-18-19-|-------------19---------x---------9h10----------------14p12p10------ +-------|----------------x---------14\13~-------------------------------14p12 +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- +-------|-------------------------------------------------------------------- + + +------------------|-12p10\9-h10p9p7----------------------------------------| +-------------9h10-|-----------------10p9p7---9-7\5-------9p6---------------| +-p10/9\10h12------|------------------------9-------7p6h7-----7p6~----------| +------------------|--------------------------------------------------------| +------------------|--------------------------------------------------------| +------------------|--------------------------------------------------------| + + scoop w/bar---- 1/2 +|-----------12/16--12~--|-16----12--16/19--16b-------12-------12h14h16-----| +|-------10--------------|--------------------------------------------------| +|-x/11------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| +|-----------------------|--------------------------------------------------| + + +|-t17p16-t17p16p14p12-t17p16-t17p16p14p12-x-t17p12-t17p16p14p12-t17\xp14p12- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-h16/19bf----17p14-------|---------------14p12p10\9----12p10p9-9h10p9\7----- +-------------------------|------10h12h14------------10------------------10p9 +-------------------14~---|--p13--------------------------------------------- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- +-------------------------|-------------------------------------------------- + + +----------------|----------------------------------------------------------| +-p7h9p7---------|-7p6------------------------------------------------------| +--------9p7\6h7-|-----9-7p6---9p6------6bf*--rb4~--------------------------| +----------------|-----------x-----9-7--------------------------------------| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| + + +|----------------------------------------------------------------|---------- +|---------7-9-10p9-10p9p7\5/7h9-10-x-10-10p9p7\5-12p9-12p9p7p5h7-|-t12p9h10- +|-------6--------------------------------------------------------|---------- +|-4h6h7----------------------------------------------------------|---------- +|----------------------------------------------------------------|---------- +|----------------------------------------------------------------|---------- + + +|--------------------------------------------------------------------------- +|-t12p10p9p7\5-t12p9h10-t12p10p9p7\5-t12p10p9-t12p10p9p7\5-t12p10p9-t12p10p9 +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +---------------------------------------|----------9---------------9-12-9-10- +-p7\5-t12p10p9-t12p10p9p7\5-t12p10p9p7-|-t12p10\x---10----9-10-12----------- +---------------------------------------|---------------11------------------- +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ +---------------------------------------|------------------------------------ + + +----9-------------------|--------------------------------------------------| +-12---12-10-9-10-9------|-12bf----12bf-rb-p10--12/15~----------------------| +-------------------11~--|--------------------------------------------------| +------------------------|--------------------------------------------------| +------------------------|--------------------------------------------------| +------------------------|--------------------------------------------------| + + +|-11-8----------8-14-11-------11-14/16h17p16p14\12-------------------------- +|------10----10---------13-------------------------15-14p12\10-------------- +|---------11---------------14----------------------------------13p11p10----- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-----------------|---------------------------------------------------------| +-----------------|---------------------------------------------------------| +-----------------|---------------------------6----6---------6-----6--------| +-12p11p9---------|----------4--4p3-----------6----6---------6-----6--------| +---------12p11p9-|-2--4--5----------5--4--2--4----4---------4-----4--------| +-----------------|---------------------------------------------------------| + + +|------------------------------------------------|-------------------------| +|------------------------------------------------|-------------------------| +|------------------------------------------------|-------------------------| +|-3h4p3-------3----------------------------------|----4----4-------4---4---| +|-------5--4-----5--4--2--5--4--2-----4--2-------|----4----4-------4---4---| +|----------------------------------5--------5--4-|----2----2-------2---2---| + + +|----------|-----------| +|---5~-----|-----------| +|---4~-----|-----/x\---| +|---6~-----|-----/x\---| +|----------|-----/x\---| +|----------|-----------| + + +||-------------------------------------------------| +||-------------------------------------------------| +||---9--x--x--10--x--x--9--x--x--7--x--x--4\5------| +||---7--x--x---6--x--x--7--x--x--6--x--x--6\7------| +||0------------------------------------------------| +||-------------------------------------------------| + + +|-------------------------------------------------|| +|-------------------------------------------------|| +|-x--x--9--x--x--10--x--x--9--x--7--x--5--x-------|| +|-x--x--7--x--x---6--x--x--7--x--6--x--7--x--6~---|| +|-------------------------------------------------|| +|-------------------------------------------------|| + + +|--------------------------------|-------------------------------------------------| +|--------------------------------|-------------------------------------------------| +|--5-----------------------------|---9--x--x--10--x--x--9--x--x--7--x--x--4\5------| +|--7-----------------------------|---7--x--x---6--x--x--7--x--x--6--x--x--6\7------| +|--0-----------------3--2--0-----|0------------------------------------------------| +|-----------0--1--3-----------4--|-------------------------------------------------| + + +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|-x--x--9--x--x--10--x--x--9--x--7--x--5--x-------|------------------------- +|-x--x--7--x--x---6--x--x--7--x--6--x--7--x--6~---|------------------------- +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +|-------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- +|---9--x--x--10--x--x--9--x--x--7--x--x--4\5------|------------------------- +|---7--x--x---6--x--x--7--x--x--6--x--x--6\7------|------------------------- +|0------------------------------------------------|------------------------- +|-------------------------------------------------|------------------------- + + +|-------------------------------------------------|-------------------------| +|-------------------------------------------------|-------------------------| +|-x--x--9--x--x--10--x--x--9--x--7--x--5--x-------|-------------------------| +|-x--x--7--x--x---6--x--x--7--x--6--x--7--x--6~---|-------------------------| +|-------------------------------------------------|-------------------------| +|-------------------------------------------------|-------------------------| +| | +| | +|-------------------------12h13p12p10h12p10----10h12h13~----12--10--12------| +|----------------10h12h13-------------------13------------------------------| +|--------9h10h12------------------------------------------------------------| +|9h10h12--------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + + +Continue riff + +|-p13-t16p13-t16p13p10-t16p13-t16p13p10-t19p16p10h16p13p10h16p13p10-t20p16p10 +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-t17p13-t17p13|t16p13p10-tx-p13p12p10-13p12p10-12h13p12p10-------12h13p12p10 +--------------|--------------------------------------------13p10------------ +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- + + +----------------------------------------------|-----------------------------| +-13p12p10---------12p10p9---------------------|-----------------------------| +----------12p10p9---------12p10p9-x-10p9------|--------------------------4*~| +-----------------------------------------12\--|--\7--6h7p6------------------| +----------------------------------------------|------------8p7p5------------| +----------------------------------------------|------------------7\0dive----| + + +Play 2x +Gotta ... +||--------------------|----------------------------------------------------| +||-2------------------|---3------------------------------------------------| +||-2------------------|---2------------------------------------------------| +||-4------------------|---4------------------------------------------------| +||-4------------------|----------------------------------------------------| +||-2------------------|----------------------------------------------------| + + +Tryin' ... +|----------------------------|--------------------------------------------|| +|--5---------/3--------------|--------------------------------------------|| +|--4---------/4--------------|--------------------------------------------|| +|--6---------/4--------------|--------------------------------------------|| +|----------------------------|----5---4---2---2h4---2---------------------|| +|----------------------------|0h2---2---2---2-----5---5-4-2-0-------------|| + + +|-----------------------------------------------|--------------------------- +|-----------------------------------------------|--------------------------- +|-------------------------6----6--------6----6--|--------------------------- +|----------4--3-----------6----6--------6----6--|-4--3--------3------------- +|-2--4--5--------5--4--2--4----4--------4----4--|-------5--4-----5--4--2--5- +|-----------------------------------------------|--------------------------- + + +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| +----------------------|----------------------------------------------------| +----------------------|---4------4-----------------4-------4---------------| +-4--2-----4--2--------|---4------4-----------------4-------4---------------| +-------5--------5--4--|---2------2-----------------2-------2---------------| + diff --git a/guitar/tabs/Malmsteen/teaser.tab b/guitar/tabs/Malmsteen/teaser.tab new file mode 100644 index 0000000..4f7b293 --- /dev/null +++ b/guitar/tabs/Malmsteen/teaser.tab @@ -0,0 +1,408 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen +Teaser from "Fire and Ice" +* = natural harmonic +h = hammeron p = pulloff +s = slide x = ghost note +~ = vibrato t = tapping + + +-----------|----------------------------|--------------5-------------------| +12---10----|--12---10--------10---------|--------------5-------------------| +12---11----|--12---11--------11---------|--7--6--------6-------------------| +12---12----|--12---12--------12---------|--7--7--------7-------------------| +-----------|-----------0--0-------0--0--|--0--0--0--0--0-------------------| +-----------|----------------------------|----------------------------------| + + +-----------------|---------------------------|-------------5---------------| +12--10-----------|----12--10--------10-------|-------------5---------------| +12--11-----------|----12--11--------11-------|-7--6--------6----13h14h16---| +12--12-----------|----12--12--------12-------|-7--7--------7---------------| +--------0--0--0--|-0----------0--0------0--0-|-0--0--0--0--0---------------| +-----------------|---------------------------|-----------------------------| + + +---------------------------------------------------------|-----------------| +15h17h15p14----------14p12p10----------------------------|-12--10----------| +------------16p14p13----------13p11p9-11p9-13p11---------|-12--11----------| +-------------------------------------------------12p11p9-|-12--12----------| +---------------------------------------------------------|---------0--0--0-| +---------------------------------------------------------|-----------------| + + +------------------------------|---------------------------14-|-------------- +---12-----10--------10--------|------------------------------|-------------- +---12-----11--------11--------|--7--6--------6~--------14----|-16p14-16bf--- +---12-----12--------12--------|--7--7--------7~--14s16-------|-------------- +0------0------0--0------0--0--|--0--0--0--0--0---------------|-------------- +------------------------------|------------------------------|-------------- + + +14-17p14-17--------------------|-----------------------|-------------------- +---------17-14-----------------|-12--10----------------|-------------------- +---------------17-16p14----14~-|-12--11----------------|-------12--10------- +------------------------16-----|-12--12----------------|-------12--11------- +-------------------------------|---------0--0--0--0--0-|-0--0--12--12--0--0- +-------------------------------|-----------------------|-------------------- + + +----------|------------t14p9h12p9t17p9h12p9h12t17p12|t17p12p9h12p9t17p12p9-- +----------|--------5--------------------------------|----------------------- +10--------|-7--6---6--------------------------------|----------------------- +11--------|-7--7---7--------------------------------|----------------------- +12--0--0--|-0--0---0--------------------------------|----------------------- +----------|-----------------------------------------|----------------------- + +* dive with bar +-------------------| +-------------------| +-------------------| +-------------------| +-------------------| +0--0--0*-----------| + + +1st Verse + +----------------|-----------|-------------------|--------------------------| +----------------|-----------|-----------------7-|--------------------------| +----------2-----|-----------|----4---2--------7-|--------------------------| +----------2-----|-----------|-4--4--------7---7-|--------------------------| +4--4------------|---0-2-4-0-|-2------4----5---5-|--2-----------2-----------| +2--2--4~--------|-4---------|-------------------|--0-----------0-----------| + + w/bar +-----------------------|--------------------|------------------|-----------| +-----------------------|--------------------|--------------7---|-----9-----| +---------------2~------|--------------------|----4--2------7---|--9--9-----| +---------------2~------|--------------------|----4--2------7---|--9--9--2-2| +4--4-------------------|---0h2h4p0-2h4h5p4--|-2-----4---5--5---|--7--7--2-2| +2--2--4~--2h4----------|-4------------------|------------------|----------0| + + +---------------------|-------------------|---------------------------------| +---------------------|-------------------|-------3-----------7-------------| +---------------2-----|-------------------|-------4--2--------7--7----------| +4--4-----------2--2--|----------------2--|-4--4-----2--------7--7----------| +4--4-----------0--0--|-0-----0--2--4--0--|-2--2-----4--5--5-----5----------| +------4~--2h4--------|----4--------------|---------------------------------| + + + ~w/bar +-------------|-----------------|-------------------|-----------------------| +-------------|-----------------|-------------------|----------------------7| +-------------|-----------------|-------------------|-------4-----2-----7--7| +2--2---------|-4------------2--|-------------------|-4--4--4-----2-----7--7| +2--2---------|-4------------0--|-0-----0--2--4--0--|-2--2-----4--4--5--5--5| +0--0--0~-----|----4~--2--4-----|----4--------------|-----------------------| + + 1st chorus +-----------------|------------------|----------------------------|---------- +---9-------------|-12--10-----------|----------------------------|---------- +9--9-------------|-12--11-----------|----12--10--------10--------|-7--6----- +9--9-------2-----|-12--12-----------|----12--11--------11--------|-7--7----- +7--7---7s--2--2--|---------0--0--0--|-0--12--12--0--0--12--0--0--|-0--0----- +-----------0--0--|------------------|----------------------------|---------- + + natural harmonics +------5------------|----------------------------------|--------------------| +------5------------|----------------------------------|-12-----------------| +------6------------|----------------------------------|-12-----------------| +------7------------|----------------------------------|-12--12-------------| +0--0--0---0--0--0--|-0--5-7-0--0-5-7-7-7-0-0-0-0-0-0--|---------0--0-------| +-------------------|----------------------------------|--------------------| + + +---------------------|-------5---s16-16-15-14------|------------------------ +---12--10--------10--|-------5----------------17-16|15---------------------- +---12--11--------11--|-7--6------------------------|---17p16p14----16p14---- +---12--12--------12--|-7--7------------------------|------------16---------- +0----------0--0------|-0--0------------------------|------------------------ +---------------------|-----------------------------|------------------------ + + +-------------| +-------------| +-------------| +16p14--------| +------16-14~-| +-------------| + +2nd verse + +---------------|-------------|-------------|---------|---------------------| +---------------|-------------|-------------|---------|---------------------| +------------2--|-------------|-4--------7--|--1------|---------------------| +------------2--|-------------|-4--------7--|--2------|-4------------------2| +------------0--|-0--2--4--0--|-2---4~---5--|--2------|-4--4--4------------0| +2--4~--2h4-----|-------------|-------------|------0--|-2--2--2--4--4--2h4--| + + +----------------------|----------------------|-----------------| +----------------------|-------------------7--|-9--9------------| +----------------------|----4--------------7--|-9--9------------| +----------------------|----4--------------7--|-9--9--2---------| +0-----0h2h4p0-2h4h5p4-|-2-----2--4--5--5--5--|-7--7--2---------| +---4------------------|----------------------|----------0------| + + +2nd Chorus + +-----------------|---------------------------|-----------------|-----------| +12--10-----------|----12--10--------10-------|-----------------|-----------| +12--11-----------|----12--11--------11-------|-7--6--6---------|-----------| +12--12-----------|----12--12--------12-------|-7--7--7---------|-----------| +--------0--0--0--|-0----------0--0------0--0-|-0--0--0--0--0--0|0--0--0----| +-----------------|---------------------------|-----------------|-----------| + + +17----------------|-------------------|---------------------------| +17----------------|-------------------|----12--10--------10-------| +16bf--14----------|-------------------|----12--11--------11-------| +------------------|-12-----12---------|----12--12--------12-------| +-----------0--0---|-10-----------0--0-|-0----------0--0------0--0-| +------------------|-------------------|---------------------------| + + + tap fret 17 using hammerons and pullofs for rest +-------------5---17-10-12--|-17-10-12-10-17-10-12-17-10-12-17-10-12-17-10-17 +-------------5-------------|------------------------------------------------ +-7--6--------6-------------|------------------------------------------------ +-7--7--------7-------------|------------------------------------------------ +-0--0--0--0--0-------------|------------------------------------------------ +---------------------------|------------------------------------------------ + + +10-17-10-17-10-17-9-17-9-12-17-9-12-9-17-9--0--|---------------------------| +--------------------------------------------0--|---------------------------| +-----------------------------------------------|-12--11--------------------| +-----------------------------------------------|-12--12--------------------| +-----------------------------------------------|---------------------------| +-----------------------------------------------|---------17bf--19----------| + + +-----------------------|----------s17-16-15-14------|----------------------- +12-----10-----10-------|-----------------------17-16|14--------------------- +12--0--11-----11-------|-7--6--6--------------------|---17p16p14----16p14--- +12--0--12-----12-------|-7--7--7--------------------|------------16--------- +-----------0------0--0-|-0--0--0--------------------|----------------------- +-----------------------|----------------------------|----------------------- + + +-----------------------|-----------------|---------10----------------------| +-----------------------|-12--------------|-----12--10-----10---------------| +------14---------------|-12--------------|-----12--11-----11---------------| +16p14----16p14---------|-12---12---------|-----12---------12---------------| +---------------16p14~--|-----------0--0--|--0----------0------0------------| +-----------------------|-----------------|---------------------------------| + + +-------5-----------|-------- +-------5-----------|-------- +7---6--6-----------|-------- +7---7--7-------7*--|-------- +0---0--0-----------|-------- +-----------5*------|---5*--- + + +bridge let ring + +--------------12------------|----------10--------------|---------10--------| +----------10------10--------|-8------------8--------8--|-7-----------7----7| +-------9--------------9-----|----7------------7--------|----7----------7---| +---11--------------------11-|-------9------------9-----|-------7---------7-| +0---------------------------|--------------------------|-------------------| +----------------------------|--------------------------|-------------------| + + +------------0---------|------------0----------|-------------0--------------| +6--------6-----6------|---------5-----5-------|----------3-----3-----------| +------7-----------7---|------6-----------6----|-------4-----------4--------| +---7-----------------7|---7-----------------7-|----5-----------------5-----| +----------------------|-0---------------------|-0--------------------------| +----------------------|-----------------------|----------------------------| + + +------------0-----------| +3--------3-----3--------| +2-----2-----------2-----| +4--4-----------------4--| +0-----------------------| +------------------------| + + +19p17-15-19-17-15s13-17-15p13-12-15p13-12----13p12-------------15h17p5------| +------------------------------------------15-------15-13s15-17---------18p17| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| +----------------------------------------------------------------------------| + + +-------------------------------------------------| +15-17-15p13-12-15-13p12----13p12---------s20-s15-| +------------------------14-------14-12~----------| +-------------------------------------------------| +-------------------------------------------------| +-------------------------------------------------| + +guitar solo + +---------14----------------17p14----------17s21~-|--17-16-19-17p16---------| +------14----14----------14-------14----14--------|-----------------19s17-14| +---14----------14----14-------------14-----------|-------------------------| +16----------------16-----------------------------|-------------------------| +-------------------------------------------------|-------------------------| +-------------------------------------------------|-------------------------| + + +14--------------------------------------------------------------|----------- +---17p14--------------------------------------------------------|-14h17--17~ +---------17-16p14----16-14--13h14p13----13-------------13h14h16-|----------- +------------------16-----------------16----16-14h15h16----------|----------- +----------------------------------------------------------------|----------- +----------------------------------------------------------------|----------- + + +----------------|----------------------------------------14-17p14---------14| +15-14-15----14--|-------------------14-19p14----------14----------14----14--| +---------16-----|-14-16-13-14----14----------14----14----------------14-----| +----------------|-------------16----------------16--------------------------| +----------------|-----------------------------------------------------------| +----------------|-----------------------------------------------------------| + + +p17~----14-16-17-14----17----------16----------14--------------------------- +--------------------15----15-14s12----14-12-------12-------------14-15-17p15 +--------------------------------------------14-------14-13h14h16------------ +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- + + 1/2 1/2 1/2 1/2 1/2 +----|-----------------------------|-16b--16b--16b--16b--16-14----14-16-16b-| +14--|-------------------------14--|---------------------------14-----------| +----|-16-14p13--------------------|----------------------------------------| +----|----------16-14~-------------|----------------------------------------| +----|-----------------------------|----------------------------------------| +----|-------------------19s-------|----------------------------------------| + + 1/2 1/2 +16--16b--14-16-17-14-16-17-19-16-117-19-21-|-21b---21--19h21p19p17------| +-------------------------------------------|----------------------------| +-------------------------------------------|----------------------------| +-------------------------------------------|----------------------------| +-------------------------------------------|----------------------------| +-------------------------------------------|----------------------------| + + +19~--19p17-19-21-|-17h21-17s16h17p16s13-14h15p14p13-14s9h10p9p8-9s5-7-5-4-5| +-----------------|---------------------------------------------------------| +-----------------|---------------------------------------------------------| +-----------------|---------------------------------------------------------| +-----------------|---------------------------------------------------------| +-----------------|---------------------------------------------------------| + + 1/2 +2--------------2-----|------------------------------------|----------------| +---2--5----------2---|------------5p2---2-----------------|-7bf------------| +---------5b--------5-|-4--4p2h4-4-----5---5p4p2---2h4-2s4-|----------------| +---------------------|--------------------------4---------|-----------17---| +---------------------|------------------------------------|-----------17---| +---------------------|------------------------------------|----------------| + + +-----------------------------------------------------|---------------------- +---------12--10--------------12-10----------10-------|-10------------------- +----12----------11--------12-------11----11----11----|----11------9--------- +12--12--------------12-12-------------12----------12-|------------11--11~--- +12--12-----------------------------------------------|--------12------------ +-----------------------------------------------------|---------------------- + + Let ring +-------|---------------------------------------|---------------------------| +---14--|h15---14s------------------------5-----|-------0--10---------------| +---14--|h14---14s---------7-----6--------6-----|----12--------11------12---| +---14--|h16---14s---7--7--7-----7--------7--0--|-12---------------12-------| +0------|---------------------0-----0--0--------|---------------------------| +-------|---------------------------------------|---------------------------| + + dive w bar gradually +-------------------------------|-------------------------------------------| +12--10----------10-------------|-7--5--------------------------------------| +--------11----------11--11s----|-7--6--------------------------------------| +------------12----------12s--7-|-7--7--------------------------------------| +-------------------------------|----------0----0---------------------------| +-------------------------------|-------0-----------------------------------| + +out-chorus + +----------------------|--------------s17-16-15-14-|------------------------- +12---10-----10--------|---------------------------|17p16p15p14-------------- +12---11-----11--------|-7--6-----6----------------|------------17p16p14----- +12---12-----12--------|-7--7-----7----------------|---------------------16-- +---------0------0---0-|-0-----0-------------------|------------------------- +----------------------|---------------------------|------------------------- + + +------------------------|------------------|-------------------------------| +------------------------|------------------|------------10-------10--------| +16p14-------------------|------------------|--------12--11-------11--------| +------16p14-------------|-9----12----------|--------12--12-------12--------| +------------16p14s12----|-10-------0--0--0-|--0--0---------0--0--0--0--0--0| +---------------------14-|------------------|-------------------------------| + + 1 1/2 +------------9h12t17p9--t17p12p9--t17|p9p12p9h12p9h12s21b-----------21~-----| +7-----------------------------------|--------------------------------------| +7--6---s11--------------------------|--------------------------------------| +7--7--------------------------------|--------------------------------------| +------------------------------------|--------------------------------------| +------------------------------------|--------------------------------------| + + +---------------------|--------------------|--------------------------------| +---------------------|-12---10--------10--|----------5---------------------| +-----------------14~-|-12---11--------11--|-7--6-----6---------------------| +12--12--s0--s16------|-12---12--------12--|-7--7-----7-----14--------------| +---------------------|----------0--0--0---|-0-----0-----0------16----------| +---------------------|--------------------|--------------------------------| + + +-----------------------|----------------------|----------------------------| +-----------------------|--12--10--------------|----------------------------| +-------16bf---16--14~--|--12--11--------------|----------------------------| +16p14------------------|--12--12---12s--------|-----------------xslide-----| +-----------------------|----------------0--0--|-----------------xslide-----| +-----------------------|----------------------|----------------------------| + +dive w/bar +--------------------|-17------------17------------17-------17--------------- +-------------20bf~--|----20p17-20bf----20p17-20bf----20p17----20p17h20-17--- +--------------------|------------------------------------------------------- +0-------------------|------------------------------------------------------- +--------------------|------------------------------------------------------- +--------------------|------------------------------------------------------- + + 2 +------------------|------------20b--------|--20p17----20p17-------17-------- +17h20p17-20-20p17-|17h20-17-17--------20~-|--------19-------19p17----19p17-- +------------------|-----------------------|--------------------------------- +------------------|-----------------------|--------------------------------- +------------------|-----------------------|--------------------------------- +------------------|-----------------------|--------------------------------- + + +---------------|-17----17-19p17------------------|-------------------------- +---------17h19-|----17---------------------------|-------------------------- +19-17p19-------|-----------------------17--18s16-|-------------------------- +---------------|-----------------19~-------------|-14----------------------- +---------------|---------------------------------|--------16*--------------- +---------------|---------------------------------|-------------------------- + diff --git a/guitar/tabs/Malmsteen/trilogy_suite.tab b/guitar/tabs/Malmsteen/trilogy_suite.tab new file mode 100644 index 0000000..0841488 --- /dev/null +++ b/guitar/tabs/Malmsteen/trilogy_suite.tab @@ -0,0 +1,733 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) +Date: Tue, 23 May 1995 15:55:50 -0700 (PDT) + +Yngwie Malmsteen - Trilogy Suite Op:5 +from 'Trilogy' +Judy Letostak letostak@netcom.com +tune down 1/2 step + + +|--------------------------------------11-13-15-13p11---------------------- +|-----------------------------12-13-15----------------16p15p13\12---------- +|--------------------12-13-15-------------------------------------15-13p12- +|-----------12-13-15------------------------------------------------------- +|--15-14-15---------------------------------------------------------------- +|-------------------------------------------------------------------------- + + On Cue +---------|----3-------|-------------------------------------13-15-16-15-13- +---------|----3-------|----------------------------13h15h16---------------- +---------|----4-------|-------------------12h14h16------------------------- +---------|----5-------|----------12-13h15---------------------------------- +--15-14--|----5-------|-15-14-15------------------------------------------- +---------|----3-------|---------------------------------------------------- + + +-----------------------------------|--4------------------------------------ +-16p15-13p12-----------------------|--4------------------------------------ +-------------15-13p12--------------|--5------------------------------------ +----------------------15-13-12-----|--6-----------------X-----------15h17-- +-------------------------------15--|--6----15p14/15h17h18--15h17h18-------- +-----------------------------------|--4------------------------------------ + + +--------------------15/16h19h20\16p15-------------------------------------- +-----------15h16h18-------------------18-16-15----------------------------- +-----16h17-------------------------------------17-16p15-------------------- +-h18----------------------------------------------------18p17-15----------- +-----------------------------------------------------------------18-17----- +--------------------------------------------------------------------------- + + w/bar~~~~~ +------------|--1------------|| +------------|--1------------|| +------------|--2------------|| drums in +------------|--3------------|| hold Fmaj chord continue vibrato w/bar +--15\14~----|--3------------|| +------------|--1------------|| + + +|-15h16p15-------------------------------|--------------------------------- +|----------18-16-15----------15----------|--------------------------------- +|-------------------17-16-17----17-16----|--------------------------------- +|-------------------------------------17-|-18-17-15------------------------ +|----------------------------------------|----------18-17-15\14-15-17-15--- +|----------------------------------------|--------------------------------- + + First Theme (B) +---------||--------------------------------|------------------------------| +---------||--------------------------------|------------------------------| +---------||o---0-0-0-10-12-13-0-0-0-7-8-10-|-0-0-0-8-10-12-0-0-0-5-7-8----| +---------||o-------------------------------|------------------------------| +-14------||--------------------------------|------------------------------| +----16---||--------------------------------|------------------------------| + + +|-------------------------|--15h16p15-------------------------------|------ +|-------------------------|-----------18-16-15----------15----------|------ +|--0-0-0-7-8-10-0-0-4p0-0-|--------------------17-16-17----17-16----|------ +|-------------------------|--------------------------------------17-|-18--- +|-------------------------|-----------------------------------------|------ +|-------------------------|-----------------------------------------|------ + + +----------------------------------|-----------------------------|---------- +----------------------------------|-----------------------------|---------- +----------------------------------|-0-0-0-10-12-13-0-0-0-7-8-10-|-0-0-0-8-- +-17-15----------------------------|-----------------------------|---------- +-------18-17-15\14-15-17-15-14----|-----------------------------|---------- +-------------------------------16-|-----------------------------|---------- + + Ending 1 +--------------------------------------------|-15h16p15--------------------- +--------------------------------------------|----------18-16-15----------15 +-10-12-0-0-0-5-7-8-0-0-0-7-8-10-0-0-0-4-0-0-|-------------------17-16-17--- +--------------------------------------------|------------------------------ +--------------------------------------------|------------------------------ +--------------------------------------------|------------------------------ + + Ending 2 +----------|----------------------------------------||-15h16p15------------- +----------|----------------------------------------||----------18-16-15---- +-17-16----|---------------------------------------o||-------------------17- +-------17-|-18-17-15------------------------------o||---------------------- +----------|----------18-17-15-14-15-17-15-14-------||---------------------- +----------|----------------------------------16----||---------------------- + + +--------------------------------------------| +-------15-----------------------------------| +-16h17----17p16-----------------------------| +----------------17---18-17-15---------------| +------------------------------18-17-15-14~--| +--------------------------------------------| + + +Second Theme (C) + + Am Bdim E7 Am +||--------12--------12--------13--------13-|-------10--------10--------12---- +||o----13--------13--------15--------15----|----12--------12--------13------- +||--14--------14--------16--------16-------|-13--------13--------14---------- +||o----------------------------------------|--------------------------------- +||-----------------------------------------|--------------------------------- +||-----------------------------------------|--------------------------------- + + F F#dim +--------12--|--------8--------8--------8--------8--|-/13p12p10------------- +-----13-----|-----10-------10-------10-------10----|-----------13-12-10/12- +--14--------|--10-------10-------11-------11-------|----------------------- +------------|--------------------------------------|----------------------- +------------|--------------------------------------|----------------------- +------------|--------------------------------------|----------------------- + + Am Bdim E7 +--------12-13-16--|-------12--------12--------13--------13--|-------10----- +--13-15-----------|----13--------13--------15--------15-----|----12-------- +------------------|-14--------14--------16--------16--------|-13----------- +------------------|-----------------------------------------|-------------- +------------------|-----------------------------------------|-------------- +------------------|-----------------------------------------|-------------- + + Am F Am/E B7/D# +--------10--------12--------12--|--------8--------8-------8-------8-------7 +-----12--------13--------13-----|-----10-------10------10------10------10-- +--13--------14--------14--------|--10-------10-------9-------9-------8----- +--------------------------------|------------------------------------------ +--------------------------------|------------------------------------------ +--------------------------------|------------------------------------------ + + F#dim Adim F#dim +-------7-------------------------------------------------------------------| +----10----7h10p7--------7--13p10----------10-13/16p13----------13----------| +--8--------------8----8----------11----11-------------14----14-------------| +-------------------10---------------13-------------------16----------------| +---------------------------------------------------------------------------| +---------------------------------------------------------------------------| + + E7 E7/G# +|-------------------------------------16-|-17p15----------------------16-17 +|-17h18p17p15----------------15-17-18----|-------18-17-15----15-17-18------ +|-------------17-16-14-16-17-------------|----------------17--------------- +|----------------------------------------|--------------------------------- +|----------------------------------------|--------------------------------- +|----------------------------------------|--------------------------------- + + Ending 1 Ending 2 Keyboard solo + Am +--19--|--20~----------|--20~---------||-----------------------------------| +------|---------------|-------------o||-----------------------------------| +------|---------------|--------------||-----------------------------------| +------|---------------|-------------o||-----------------------------------| +------|---------------|--------------||-----------------------------------| +------|---------------|--------------||-----------------------------------| + + +Guitar Solo + +|-----------9-|-14p9-14p9---------------9-12p10-|-9----10p9---------------- +|--------10---|-----------10----9-10-12---------|---12------12-10p9----10p9 +|--10-11------|--------------11-----------------|-------------------11----- +|-------------|---------------------------------|-------------------------- +|-------------|---------------------------------|-------------------------- +|-------------|---------------------------------|-------------------------- + + +-------|---------9----10-9h12--9h14-9-14/16--|-17---17---17bf---\---------| +-------|-9-12-11---12------------------------|----------------------------| +--11---|-------------------------------------|----------------------------| +-------|-------------------------------------|----------------------------| +-------|-------------------------------------|----------------------------| +-------|-------------------------------------|----------------------------| + + +|-0-5-4-2\1--------9-7p5-------|-10-9-7--7\6-------10/12p10p9---------14p12| +|------------3-2-0-------9-7-5-|-------------8-7-6------------12p10p9------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| +|------------------------------|-------------------------------------------| + + +|-p10----------/17-16-14\13----------------------------|-----------13-14h16 +|-----14p12p10--------------15p14p12-------------------|-14-h15h17--------- +|------------------------------------14p13----13-15-16-|------------------- +|------------------------------------------16----------|------------------- +|------------------------------------------------------|------------------- +|------------------------------------------------------|------------------- + + +--h17---14----------------|-----------|-----------------------------------| +-----------14-------------|-----------|-----------------------------------| +--------------16bf--------|--rb16~----|-----keyboard-solo-----------------| +--------------------------|-----------|-----------------------------------| +--------------------------|-----------|-----------------------------------| +--------------------------|-----------|-----------------------------------| + + +|--16tr17-----------------|--13p12p10-------------------------------------| +|-------------------------|-----------13-12-10----------------------------| +|-------------------------|--------------------13-12-10\9-----------------| +|-------------------------|-------------------------------12-10p9---------| +|-------------------------|---------------------------------------12-11~--| +|-------------------------|-----------------------------------------------| + + +|--------------------------------|--------------------------12h13p12h13p12- +|----------------------9h10p9h10-|--------------12h13p12h13---------------- +|--9h10p9h10---------------------|-9h10p9h10/13---------------------------- +|------------9h10p9h10-----------|----------------------------------------- +|--------------------------------|----------------------------------------- +|--------------------------------|----------------------------------------- + + +--h13p12--xp0--|-/20-19-17\16--------------------------------------| +---------------|--------------18-17-15-----------------------------| +---------------|-----------------------17-16-14\13-----------------| +---------------|-----------------------------------15p14p12--------| +---------------|--------------------------------------------15-14--| +---------------|---------------------------------------------------| + + +|-------------------------------------------------|------------------------| +|-------------------------------------------------|------------------------| +|-------------------13-14----13-14-16-13-14-16/17-|-14-16-17/19-16-18-19bf-| +|----------13-14-15-------15----------------------|------------------------| +|-12-14/15----------------------------------------|------------------------| +|-------------------------------------------------|------------------------| + + +|----------|-----------------|---------------|--20~-----------------------| +|----------|-----------------|---------------|----------------------------| +|---rb19---|--p17-scoop------|----16scoop~---|----------------------------| +|----------|------w/bar------|---------------|----------------------------| +|----------|-----------------|---------------|----------------------------| +|----------|-----------------|---------------|----------------------------| + + +|------------------------------|------------------------------------------| +|------------------------------|------------------------------------------| +|---2--------2---------2-------|----------sustain-------------------------| +|---2--------2---------2-------|------------------------------------------| +|---0--------0---------0-------|------------------------------------------| +|------------------------------|------------------------------------------| +| | | +| | | +|----------------5~-/-7-\-4-/-5|------------------------------------------| +|----------------5~------------|------------------------------------------| +|----------------5~-/-7-\-4-/-5|-----------2----------x\------------------| +|------------------------------|-----------2----------x\pick-scrape-------| +|------------------------------|-----------0------------------------------| +|------------------------------|------------------------------------------| + + +Part 2 - Free Tempo +Acoustic Guitar + +|---------------------------4-5-7/8p5-|-----5-8-8/11-11~--10-8\7--8-10p8p7- +|---------------------5p4-5-----------|---6-------------------------------- +|---------------2-4/5-----------------|-7---------------------------------- +|---2h3p2-0---2-----------------------|------------------------------------ +|-0---------0-------------------------|------------------------------------ +|-------------------------------------|------------------------------------ + + +-------------|-------------5-8/12p8---------------------------------------- +--10---10~\--|-----------5----------10------------------------------------- +-----9-------|---------5---------------9-10----10--5-4-2\1----------------- +-------------|-----2-7----------------------12-------------3-2------------- +-------------|-0h3---------------------------------------------5-3-2-0----- +-------------|------------------------------------------------------------- + + +--------------------------|----------------5-8-5------------8-11-12~------- +--------------------------|--------------5-------7-------10---------------- +------------1---------2---|----------4-5------------8/11------------------- +----------0---------------|----7-6-7--------------------------------------- +--2--3--2-----------------|--8--------------------------------------------- +--------------------------|------------------------------------------------ + + +--12p10p8--------------------| +----------10h12p10p9--10-----| +--------------------------9--| +-----------------------------| +-----------------------------| +-----------------------------| + + Am Fmaj Dm +|----------0----------|----------0-------------|----------0-----1---------| +|-------1-----1p0-----|-------1-----0h1--------|-------3-----------3------| +|----2----------------|----2-------------------|----2--------2--------2---| +|------------------2--|-3----------------3--2--|-0------------------------| +|-0-------------------|------------------------|--------------------------| +|---------------------|------------------------|--------------------------| + + E7 E/G# Am Fmaj +|---------------------4--|----------0----------|----------0---------------| +|-------3----------3-----|-------1-----1--0h1--|-------1-----0h1----------| +|----2----------4--------|----2----------------|----2---------------------| +|------------------------|---------------------|-3----------------3--2----| +|------------------------|-0-------------------|--------------------------| +|-0----------4-----------|---------------------|--------------------------| + + Dm E7 E7/G# +|----------0-------1--------|----------5-------------4-| +|-------3-------------3-----|-------3-------------3----| +|----2-------------------2--|----4-------------4-------| +|-0-------------0-----------|--------------------------| +|---------------------------|--------------------------| +|---------------------------|-0-------------4----------| + + A/C# Dm Dm/CG/B +|-------------5--3h5p3-1-0-|-----------0--1p0-------|-------------3-1h3p1-- +|----------2---------------|--------3----------3----|----------3----------- +|-------2------------------|-----2------------------|-------0-------------- +|----2---------------------|--0---------------------|----0----------------- +|-4------------------------|----------------------3-|-2-------------------- +|--------------------------|------------------------|---------------------- + + C Bb #4 G# dim +--3-----|----------0--------------|----------0-------------|----------7---- +-----0--|-------------1-----------|-------3-----3----------|-------6-----6- +--------|-------0--------0--------|----3-----------3-------|----7---------- +--------|----2--------------------|------------------------|-6------------- +--------|-3-----------------3--2--|-1-----------------1--0-|--------------- +--------|-------------------------|------------------------|--------------- + + Am A/C# +--------|----------0-------------|---------------|-------------5-3h5p3-1-0-| +--------|-------1-----0h1--------|---------------|----------2--------------| +--7-----|----2-------------2--1--|-2-------------|-------2-----------------| +-----6--|------------------------|----2----------|----2--------------------| +--------|-0----------------------|-------3\2--0--|-4-----------------------| +--------|------------------------|---------------|-------------------------| + + Dm G/B C +|----------0-1p0--------|-------------3--1h3p1-0---|----------0------------| +|-------3---------3-----|----------3-------------3-|-------------1---------| +|----2------------------|-------0------------------|-------0--------0------| +|-0---------------------|----0---------------------|----2------------------| +|--------------------3--|-2------------------------|-3-----------------3--2| +|-----------------------|--------------------------|-----------------------| + + Bb Bb/A E/G# Em/G +|----------0-------------|----------5--4-----------|----------3------------| +|-------3-----3----------|-------5--------5--------|-------5-----5-----5---| +|----3-----------3-------|----4--------------4-----|----4-----------4-----4| +|------------------------|-------------------------|-----------------------| +|-1-----------------1--0-|-------------------------|-----------------------| +|------------------------|-4--------------------4--|-3---------------------| + + F# dim D#dim Em +|--------2-----------2-----|---------------------0-----|-3----------------| +|-----------4-----------1--|---------------0--------4--|-5----------------| +|-----2-----------2--------|------------------0--------|-4----------------| +|--------------1-----------|--------5-\-4--------------|------------------| +|--------------------------|-----2---------------------|------------------| +|--2-----------------------|--0------------------------|------------------| + + +Electric Guitars/Distortion + +|---------------------------------------||--------------------------------| +|---------------------------------------||--------------------------------| +|-------5-7-9-7-5-----------------------||o----------------------------5~-| +|-5-7-9-----------9-7-5-----------5-7-9-||o-------------5p4-2----------5~-| +|-----------------------9-6-6-7-9-------||------------2-------2-----------| +|---------------------------------------||------0-2-3-----------0-0-0-----| + + +|--------------------------|---------------------------|------------------- +|--------------------------|---------------------------|------------------- +|-----------------------9--|------------------------5--|-------5-7-9-7-5--- +|---------5p4-2---------9--|---------5p4-2----------5--|-5-7-9------------- +|-------2-------2----------|-------2-------2-----------|------------------- +|-0-2-3-----------0-0-0----|-0-2-3-----------0-0-0-----|------------------- + + +---------------------------|| +---------------------------|| +--------------------------o|| +--9-7-5---------4/5-7-9---o|| +--------9-6-7-9------------|| +---------------------------|| + + +||------------------|-------------------|------0--2--3---|----0-----0-----| +||------------------|-------------------|------0--0--0---|-3--3--3--3-----| +||o-----------------|-------------------|------4--4--4---|-2--2--2--2-----| +||o-----------------|-----------4~------|----------------|----------------| +||----0----2--2--3--|--3/6~--7------7\--|----------------|----------------| +||------------------|-------------------|-0--------------|----------------| + + +|---------------|-----------------------|---------------------------------| +|---------------|-----------------------|---------------------------------| +|---------------|-----------------------|------------------------5~-------| +|---------------|-----------------------|---------5-4-2----------5~-------| +|-0----0--2--3--|-3/6~---7----7/9~---9\-|-------2-------2-----------------| +|---------------|-----------------------|-0-2-3-----------0-0-0-----------| + + +|--------------------------------|| +|--------------------------------|| +|------------------------9~-----o|| +|---------5-4-2----------9~-----o|| +|-------2-------2----------------|| +|-0-2-3-----------0-0-0----------|| + + +Ending 2------------------------------------------------------------------ + +|--------------|--------|---------------------------------|---------------| +|--2-----------|--------|---------------------------------|---------------| +|--2-----------|--5-----|---------------------------------|---------------| +|--2-----------|--5-----|-------2-------------------------|---------------| +|--4----5---4--|--3-----|-0-2-3---3-6-2-3---2-----------3-|---2-----------| +|--------------|--------|-----------------5---3-5-2-3-5---|-5---3-5-2-3-0-| + + +|--------------------------------------------|----------------------------- +|--------------------------------------------|----------------------------- +|--------------------------------------------|----------------------------- +|--------------------------------------------|----------------------------- +|-0--0--0--0--0--0--0--0--0--0--0--0--0---0--|-0--0--0--0--0--0--0--0--3--2 +|--------------------------------------------|----------------------------- + + +--------------------|------------------------------------------------|-----| +--------------------|------------------------------------------------|-----| +--------------------|------------------------------------------------|-2~--| +--------2-----------|------------------------------------------------|---x\| +--3--5-----3--2-----|-0--0--0--0--0--0--0--0--0--0--0--0--0--0--0--0-|---x\| +-----------------3--|------------------------------------------------|---x\| + + +|----------------------------------------------|--------------------------- +|----------------------------------------------|--------------------------- +|-----------------------------------------0h2--|--------------------------- +|--------------------------------0--2--3-------|--------------------------- +|--0--0--0--0--0--0--0--0--2--3----------------|-0--0--0--0--0--0--0--0--2- +|----------------------------------------------|--------------------------- + + repeat 6x------------------------------------------ +-------------------|------------------------------------------------------| +-------------------|------------------------------------------------------| +--------------0h2--|-----------------------------------------0h2----------| +-----0--2--3-------|--------------------------------0--2--3---------------| +--3----------------|--0--0--0--0--0--0--0--0--2--3------------------------| +-------------------|------------------------------------------------------| + + +|------------------------------------------------|------------------------- +|------------------------------------------------|------------------------- +|-------------------------------------------4h6--|------------------------- +|----------------------------------4--6--7-------|------------------------- +|-4--4--4--4--4--4--4--4--4--6--7----------------|-4--4--4--4--4--4--4--4-- +|------------------------------------------------|------------------------- + + +------------------------|-------------------------------------------------| +------------------------|-------------------------------------------------| +------------------------|-------------------------------------------------| +------------------------|-------------------------------------2p1---------| +--4--2---------------2--|-4--4--4--4--4--4--4--4--4--4--4--4-------4--2---| +--------4--2--0h2h4-----|-------------------------------------------------| + + +|------------------------------------------------|------------------------- +|------------------------------------------------|------------------------- +|------------------------------------------------|----------------------6~- +|------------------------------------------------|------------------------- +|-4--4--4--4--4--4--4--4--------------------4p2--|-4--4--4--4--4--4---4---- +|-------------------------0--0--2--2--4--4-------|------------------------- + + +-------------------|------------------------------------------------------| +-------------------|------------------------------------------------------| +-------------------|------------------------------------------------------| +--------2p1--------|------------------------------------------------------| +--4--4-------4--2--|-4--4--4--4--4--4--4--4--4--4--4--4--4--4--4--4-------| +-------------------|------------------------------------------------------| + + +|-20-19-17\16-20-19-17-16-20-19-17\16-------------------------------------- +|-------------------------------------18-17p15----------------------------- +|----------------------------------------------17-16-14\13----17-16-14\13-- +|----------------------------------------------------------15-------------- +|-------------------------------------------------------------------------- +|-------------------------------------------------------------------------- + + +---------------------------------------------------| +---------------------------------------------------| +--17-16-17\13-17-16-14\13--------------------------| +--------------------------15-14p12-----------------| +-----------------------------------15p14p12\11-----| +-----------------------------------------------13--| + + +Guitar Solo + +|-----10bf---rb10--7h10--10|/13--12p10p8--------------|---------8h10/12---- +|---x----------------------|-------------10p9~---/15--|-9h10h12------------ +|-x------------------------|--------------------------|-------------------- +|--------------------------|--------------------------|-------------------- +|--------------------------|--------------------------|-------------------- +|--------------------------|--------------------------|-------------------- + + +--h13p12p10------------------------------------------------|--------------- +------------13-12p10\9/10-12-13p12-10\9p0---9-10p9---------|--------------- +---------------------------------------------------10p9\7--|-10-9-7-------- +-----------------------------------------------------------|--------10-9-7- +-----------------------------------------------------------|--------------- +-----------------------------------------------------------|--------------- + + 1 1/2 +---------------------------|-16b------19\16----18p16p13----16\13-|p10------ +---------------------------|----------------18----------15-------|----12--- +---------------------------|-------------------------------------|--------- +-\6-7-9-7-6----------------|-------------------------------------|--------- +------------8-7-5----------|-------------------------------------|--------- +------------------8-7-5\4--|-------------------------------------|--------- + + +--13/16p13----16\13p10----13\10bf--|-13-10-12-13-12-10-16-10-12-13-12p10--- +-----------15----------12----------|--------------------------------------- +-----------------------------------|--------------------------------------- +-----------------------------------|--------------------------------------- +-----------------------------------|--------------------------------------- +-----------------------------------|--------------------------------------- + + +--13p12-10----------13/22bf--|-rb22--19h20p19p17-20-16h17p16----------16--- +-----------13p12p10----------|-------------------------------18-17h18------ +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- +-----------------------------|--------------------------------------------- + + +-------------|------------------------------------------------------------- +-18p17p15--18|p17p15\13-17-13-15-17-15p13p12-15-12-13-15-13p12----13------- +-------------|-------------------------------------------------14----14---- +-------------|------------------------------------------------------------- +-------------|------------------------------------------------------------- +-------------|------------------------------------------------------------- + + +-----------13p12-------|-12------------------------------------------------ +--12-13-15-------15-13-|----15-13-12-15-13p12------------------------------ +-----------------------|----------------------14p13b-1-1/2---------9h10h12- +-----------------------|-------------------------------------10-12--------- +-----------------------|--------------------------------------------------- +-----------------------|--------------------------------------------------- + + +-----------|-------------------------------------------------12h13p12p10--- +--10p9-----|--------------9-12p10p9---------13p12-10\9/10h12-------------13 +--------12-|-10p9-------9-----------12-10p9-------------------------------- +-----------|------12-10---------------------------------------------------- +-----------|--------------------------------------------------------------- +-----------|--------------------------------------------------------------- + + +--12|p10-------10------------------------------------------|--------------- +----|----13p12----13-12-10-12h13p12p10-10------------------|--------------- +----|------------------------------------------------------|--9~----------- +----|---------------------------------------5*-dive-w/bar--|--------------- +----|---------------------------------------x--------------|--------------- +----|---------------------------------------x--------------|--------------- + + +-----------------------------------------------------|-------10-------10-12 +---------------------------------9h10----9h10----9/10|h12-13----12-13------ +----------10-9----9-9----9-10-12------12------12-----|--------------------- +--9-10-12------12-----12-----------------------------|--------------------- +-----------------------------------------------------|--------------------- +-----------------------------------------------------|--------------------- + + +----10-12-13-10-12-13/16-12-13-16/17-13-16-17/19-16-|-17-19/20-17-17-19/20- +-13-------------------------------------------------|---------------------- +----------------------------------------------------|---------------------- +----------------------------------------------------|---------------------- +----------------------------------------------------|---------------------- +----------------------------------------------------|---------------------- + + +--22bf~~~~~--|-20-19-17\16-20-19-17\16-20-19-17\16------------------------- +-------------|-------------------------------------18-17p15---------------- +-------------|----------------------------------------------17p16-14\13-17- +-------------|------------------------------------------------------------- +-------------|------------------------------------------------------------- +-------------|------------------------------------------------------------- + + +------------------------------------------------------------| +------------------------------------------------------------| +--16-14\13-17-16-14\13-17-16-14\13--------------------------| +-----------------------------------15-14-12-----------------| +--------------------------------------------15p14p12p11-----| +--------------------------------------------------------13--| + + 16bars +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|---Keyboard-solo-----Guitar-pedal-Eminor---------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +Interlude + +|--13-10-12-13-12-10------------------------------------------------------| +|--------------------12-9-10-12-10-9--------------------------------------| +|------------------------------------10-7-9-10-9-7------------------------| +|--------------------------------------------------9-6-7-9-7-6------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +| | +| | +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| +|-------------------------------------6--------------9--------------------| +|----5---------------8----------------------------------------------------| +|-------------------------------------------------------------------------| + + +|-------------------------------------------| +|-------------------------------------------| +|-------------------------------------------| +|---------------------------------------9~--| +|-8-5-7-8-7-5--------------8-5-7-8-7-5------| +|--------------7-4-5-7-5-4------------------| +| | +| | +|-------------------------------------------| +|--------------------------9------------12--| +|-7------------10---------------------------| +|-------------------------------------------| +|-------------------------------------------| +|-------------------------------------------| + + +|-13p12p10----------------------------------------------------------------| +|----------13-12p10\9-10-12-10p9\6----------------------------------------| +|----------------------------------9h10p9p7-----------------7-9-----------| +|-------------------------------------------10p9p7\6h7-9/10---------------| +|-------------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + +|-------------------------------------------|------------|-----------------| +|-------------------------------------------|------------|-----------------| +|-10p9p7------------------------------------|---2--------|---/x-pick-scrape| +|---------10p9p7\6h7h9p7p6------------------|---2--------|---/x------------| +|--------------------------7h8p7p5----------|---0--------|-----------------| +|----------------------------------8p7p5\4--|------------|-----------------| + + +Guitar 2 in () + +--------(7)--~---|----1-----------|---------------7~----------------------| +--(8)----7-------|-------1--------|----------7----7-----------------------| +---9-------------|-2--------2~----|---/8----------8-----------------------| +-----------------|----------------|---/9----------9-----------------------| +-----------------|----------------|---------------------------------------| +-----------------|----------------|---------------------------------------| + + +|-----------1---------|--------7---t14-11-(7)--|--------1-----------------| +|--------1-----1------|--1/7---7---------------|-----1--1-----------------| +|-----2-----------2~--|--2/8-------------------|--2-----2-----------------| +|--3------------------|------------------------|--3-----3-----------------| +|---------------------|------------------------|--------------------------| +|---------------------|------------------------|--------------------------| + + +|--------------------------------|----------------------------------------| +|--------------------------------|----------------------------------------| +|--2---------x\-----pick-scrape--|----------2-----------------------------| +|--2--------------x\-------------|-------2--------------------------------| +|--0-----------------------------|-0--3-------------/x\-------------------| +|--------------------------------|------------------/x\-------------------| + + +|-------------------------|-----------------------|-----------------------| +|---2---------------------|-----------------------|-----------------------| +|---2---------------------|---5-------------------|-----------------------| +|---2---------------------|---5-------------------|-----------------------| +|---4----------5-----4----|---3-------------------|-----------------------| +|-------------------------|-----------------------|-----------------------| + + +|------------------------------------------------|------------------------| +|------------------------------------------------|------------------------| +|------------------------------------------------|------------------------| +|----------2-------------------------------------|------------------------| +|-0--2--3-----3--6--2--3-----2-----------------3-|----2--------------2----| +|-------------------------5-----3--5--2--3--5----|-5-----3--5--2--3--0----| + + +Questions comments - letostak@netcom.com +legend: +============================================================================ +\/ - slide up or down +h - hammer on +p - pull off The Music Shop BBS +t - tap with right hand finger (619)423-4970 +x - ghost note or pick scrape +~ - vibrato +b - bend +bf - bend full (one step) +============================================================================ + diff --git a/guitar/tabs/Malmsteen/trilogy_suite_o_p5.tab b/guitar/tabs/Malmsteen/trilogy_suite_o_p5.tab new file mode 100644 index 0000000..c014da3 --- /dev/null +++ b/guitar/tabs/Malmsteen/trilogy_suite_o_p5.tab @@ -0,0 +1,91 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: s892011@minyos.xx.rmit.OZ.AU (Mr.Scary) + + + +This is the part of the classical guitar break in Trilogy Suite Op:5 +from Malmsteen's Trilogy album. + +^ = hammer/pull + + +Trilogy Suite +------------- + + +E----------0-------------0---------------0---1-------------------4- +B--------------1-------1---0^1---------3-------3-------3-------3--- +G--------2---2-------2---------------2-----------2---4-------4----- +D------2---------2-3-----------3-2-0-------0----------------------- +A--0--------------------------------------------------------------- +E--------------------------------------------------0-------4------- + + | | | | | | | | + + +E--------0---------------0---------------0---1-----------5-------4- +B------------1^2-------1---0^1---------3-------3-------3-------3--- +G------2---2---------2---------------2-----------2---4-------4----- +D----2-----------2-3-----------3-2-0-------0----------------------- +A--0--------------------------------------------------------------- +E--------------------------------------------------0-------4------- + + | | | | | | | | + + +E----------5-3^5^3^1-0-------0-1^0-------------3-1^3^1^0---------0--------- +B--------2-----------------3-------3---------0-----------3---------1------- +G------2-----------------2-----------------0-------------------0-----0----- +D----2-----------------0-----------------0-------------------2------------- +A--4---------------------------------3-2-------------------3-----------3-2- +E-------------------------------------------------------------------------- + + | | | | | | | | + + +E--------0---------------7---------------0------------------------- +B----------3-----------6---6---------------0-1--------------------- +G------3-----3-------7-------7---------2-------2-1-2--------------- +D----0-------------6-----------6-----2---------------2------------- +A--1-----------1-0-----------------0-------------------3-2-0------- +E------------------------------------------------------------------ + + | | | | | | | | + + +E----------5-3^5^3^1-0-------0-1-0-------------3-1^3^1^0---------0--------- +B--------2-----------------3-------3---------0-----------3---------1------- +G------2-----------------2-----------------0-------------------0-----0----- +D----2-----------------0-----------------0-------------------2------------- +A--4---------------------------------3-2-------------------3-----------3-2- +E-------------------------------------------------------------------------- + + | | | | | | | | + + +E--------0---------------5-4-------------3-------------2-------2----------- +B----------3-----------5-----5---------5---5---5---------4-------1--------- +G------3-----3-------4---------4-----4-------4---4---2-------2------------- +D----0-----------------------------------------------------1--------------- +A--1-----------1-0--------------------------------------------------------- +E------------------4-------------4-3---------------2----------------------- + + | | | | | | | | | + + +E--------------0---3------- +B----------0-----4-5------- +G------0-----0------------- +D--------4----------------- +A----2--------------------- +E--0----------------------- + + | | | + + +Mr.Scary (Gary Chapman) +---------------------------- +s892011@minyos.xx.rmit.oz.au diff --git a/guitar/tabs/Malmsteen/what_do_you_want.tab b/guitar/tabs/Malmsteen/what_do_you_want.tab new file mode 100644 index 0000000..7d54ff4 --- /dev/null +++ b/guitar/tabs/Malmsteen/what_do_you_want.tab @@ -0,0 +1,277 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) +Subject: Yngwie Malmsteen - What Do You Want TAB +Date: Mon, 19 Jun 1995 21:25:51 -0700 (PDT) + +Yngwie Malmsteen - What Do You Want? +from Eclipse +letostak@netcom.com Judy Letostak (comments, corrections, suggestions +welcome) +tune down 1/2 step + + + 1/2 +|--------------------5--7b---|--rb7---5------|----------------------------| +|-----------------5----------|---------------|----------------------------| +|--------------5-------------|---------------|----------------------------| +|-----------7----------------|---------------|----------------------------| +|--------7-------------------|---------------|----------------------------| +|---5h8----------------------|---------------|----------------------------| + + +|--------------|-----------------|------------------|---------------------| +|--------------|-----------------|------------------|---------------------| +|--------------|-----------------|------------------|-5-------------------| +|--------------|-----------------|------------------|-5-------------------| +|--------------|-----------------|-------------12\--|-3--5--7--3----------| +|--5p3--5------|-----------0--3--|--5p3--5\---------|------------7-5-3-0--| + + +|---------------------|------------------------|--------------------------| +|---------------------|------------------------|--------------------------| +|---------------------|--------%---------------|--------------%-----------| +|---------------------|------------------------|--------------------------| +|---------------------|------------------------|--------------------------| +|-5p3--5-5-5-5-5-5--3-|------------------------|--------------------------| + + +|-------------------------|------------------------------|----------------- +|-------------------------|------------------------------|----------------- +|-------------------------|------------------------------|----------------- +|----------5--------------|------------------------------|----------------- +|-3--5--7--3--------------|------------------------------|----------------- +|-------------7--5--3--0--|-5p3--5--5--5--5--5--5--5--3--|-5--3--5p3--5--5- + + + p.s. +---------------|------------------------|---------------------------------| +---------------|------------------------|-------------x\------------------| +---------------|------------------------|-------------x\------------------| +---------------|------------------------|---------------------------------| +----3p2--------|------------------------|-3--5--7--3-------------2--------| +-5-------5--3--|-5p3--5--5--5--5--5--5--|-------------7--5--3----0--------| + + +Verse +1. I .. +2. I'm .. +|-----------------------------------|---------------------------|---------- +|-----------------------------------|---------------------------|---------- +|-----------------------------------|---------------------------|---------- +|-----------------------------------|---------------------------|---------- +|------------------------3p2--------|---------------------------|---------- +|-5--3--5p3--5--5--5--5-------5--3--|-5p3--5--5--5--5--5--5--5--|-5p3--5--- + + + though .. + or .., +----------------|------------------------|--------------------------------| +----------------|------------------------|--------------------------------| +----------------|------------------------|--------------------------------| +----------------|------------------------|--------------------------------| +----------------|-3--5--7--3-------------|--------------------------------| +-5--5--5--5--5--|-------------7--5--3p0--|-5p3--5--5--5--5--5--5--5--3----| + + +in ... +been .. +|-----------------------------------|------------------------|------------- +|-----------------------------------|------------------------|------------- +|-----------------------------------|------------------------|------------- +|-----------------------------------|------------------------|------------- +|------------------------3p2--------|------------------------|-3--5--7--3-- +|-5--3--5p3--5--5--5--5-------5--3--|-5p3--5--5--5--5--5--5--|------------- + + + Pre-Chorus + I .. + Today .. +-------------|------------------------------|-----------------------------| +-------------|---6--------5----5---6--------|--6~----------6----6---------| +-------------|---7-------------7---7--------|--7~----------7----7---------| +-------------|---7-------------7---7--------|--8~----------8----8---------| +-------------|---5----5------------------5--|--------5--------------------| +-7--5--3p0---|------------------------------|-----------------------------| + + +real. ... +meant. .. +|------------5-------|----6--------------------------|--------------------| +|--6----6----6-------|----6--------------------------|-6---6------6-------| +|--7----7----7----7--|----7-----x\ps-----------------|-7---7---7--7-------| +|--7----7---------7--|----------x\------x\ps---------|-7---7---7----------| +|--------------------|------------------x\--------5--|-5-------5-------5--| +|--------------------|-------------------------------|-5------------------| + + + Don't .. +feel. This ... +|-------------------10---|--5-----------------|--5------------------------| +|--6~----------11---11---|--6--------5-----6--|--6--6--6--6--6--6--6--6---| +|--7~-w/bar----10--------|--7--------------7--|--7--7--7--7--7--7--7--7---| +|--7~----------12--------|--7-----------------|--8--8--8--8--8--8--8--8---| +|--5~--------------------|------5-------------|---------------------------| +|------------------------|--------------------|---------------------------| + +Chorus + +I cry... +I cry.. +||------------------|----------------------|----------------|-------------- +||------------------|----------------------|----------------|-------------- +||o-----------------|----------------------|----------------|-------------- +||o-----------------|----------------------|----------------|-------------- +||------------------|------------3p2-------|-----------12\--|-3--5--7--3--- +||5p3--5-------5p3--|-5p3--5----------5p3--|-5p3--5---------|-------------- + + +-------------|| +-------------|| +------------o|| +------------o|| +-------------|| +--7--5--3p0--|| + + Guitar solo +Time ... +|-/13-12p10-------------------------------|-17h18p17----17---------17h20--- +|-----------13-12-10----------------------|----------20------20bf---------- +|--------------------13-10-9--------------|-------------------------------- +|----------------------------12-10-9------|-------------------------------- +|------------------------------------11~--|-------------------------------- +|-----------------------------------------|-------------------------------- + + +--p17-20p17--|--17h18p17----18p17-----/18-17-18-15-18----18----18---------| +-------------|-----------20-------20~-----------------18----17----15------| +-------------|------------------------------------------------------------| +-------------|------------------------------------------------------------| +-------------|------------------------------------------------------------| +-------------|------------------------------------------------------------| + + +|-17p13--------13p10------------------------------------------------------| +|-------15----------------------------------------------------------------| +|----------14---------10h12p10p9p7----------------------------------------| +|----------------------------------7h8--10p8p7-------------0--------------| +|----------------------------------------------8h10p8p7----0--------------| +|-------------------------------------------------------10----------------| + + +|-------------------------------------------------------------------------| +|-----------------------------------------------------15-17-18-18bf~~~----| +|-----------------------------------------12-14-15-17---------------------| +|--------------------------------12-14-15---------------------------------| +|-x--x---------------10-12-13-15------------------------------------------| +|-------10--10-12-13------------------------------------------------------| + + +|--15-15------15--------15-------------------17--20bf~--|-20bf~~---20bf---- +|--------18bf----18bf~-----18-15h18p15----18------------|------------------ +|--------------------------------------19---------------|------------------ +|-------------------------------------------------------|------------------ +|-------------------------------------------------------|------------------ +|-------------------------------------------------------|------------------ + + +-15h18-17-15-13-15-17p13-12-13-15-12-10-12-13-10-10h12|h13p12p10-12p10----- +------------------------------------------------------|----------------13bf +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- +------------------------------------------------------|-------------------- + + +--10-------10-------------10-----------------------------------|----------- +-----13p10----13p10----------13p10-----------------------------|----------- +--------------------12bf-----------13p12p10-12~--10h12p10\9-12/|14---15-17- +---------------------------------------------------------------|---0------- +---------------------------------------------------------------|----------- +---------------------------------------------------------------|----------- + + 1/2 +-----17h18p17p15-------------------------22bf--|--------------17p16-17\13-- +--15-------------18p17-18p17b--rb17-15\--------|--------------------------- +-----------------------------------------------|--------------------------- +-----------------------------------------------|--------------------------- +-----------------------------------------------|--------------------------- +-----------------------------------------------|--------------------------- + + +-13-17-15-13-12----15-13-12---------20p16--|---------17p14-------/15-12---- +----------------15----------15bf~----------|-18---------------------------- +-------------------------------------------|----19~--------17-16-------14-- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- +-------------------------------------------|------------------------------- + + +--------------------|---------------------------10-12h13p12p10------------- +-------15p12--------|------------------10-12-13----------------13p12p10-12- +--13~---------------|----------9-10-12------------------------------------- +--------------15\---|--9-10-12--------------------------------------------- +--------------------|------------------------------------------------------ +--------------------|------------------------------------------------------ + + +-------------------|--------------------------------10-12-12h13-12h13p12--- +--12p10p9----------|-----------------------10-12-13------------------------ +------------9-9-9--|--10~----------9-10-12--------------------------------- +-------------------|-------9-10-12----------------------------------------- +-------------------|------------------------------------------------------- +-------------------|------------------------------------------------------- + + +--10------------|---------------------------|------------------------------| +------13p12-10--|--9-10-12------------------|------------------------------| +----------------|-----------7--7~---7-9-10--|------------------------------| +----------------|---------------------------|--7-----6~--------------------| +----------------|---------------------------|--------------7-8p7----7h8p7--| +----------------|---------------------------|--------------------10--------| + + +|----------------------12p10-------------13p12p10--------22bf~~~----------| +|----------------------------13p12p10-------------13p10/------------------| +|-------------9-10h13-----------------13----------------------------------| +|-----9-10-12-------------------------------------------------------------| +|--12---------------------------------------------------------------------| +|-------------------------------------------------------------------------| + + 1/2 +|---19---19b---rb19----|--19p17-17~---17----------|------------------------ +|----------------------|-----------------17-------|-----------------13-15-- +|----------------------|--------------------17\---|--/16h17p16------------- +|----------------------|--------------------------|------------19~--------- +|----------------------|--------------------------|------------------------ +|----------------------|--------------------------|------------------------ + + +-----13-15h17p15p13-----------------------------|-------------------------| +--17----------------17p15p13--------------------|-------------------------| +-----------------------------16p14p12-----------|-------------------------| +--------------------------------------15p14p12--|-------------------------| +------------------------------------------------|--13\--------------------| +------------------------------------------------|-------------------------| + + +Repeat chorus 4x then fade + +========================================================================== +Legend: +....... + The Music Shop BBS +\slide down /slide up (619)423-4970 +h = hammeron +p = pulloff +* = artifical harmonic +t = tap with right hand +b = bend (steps are indicated over note) +bf = bend full (one step) +rb = release bend +~ = vibrato +x = ghost note +ps = pick scrape +========================================================================== diff --git a/guitar/tabs/Malmsteen/you_dont_remember.tab b/guitar/tabs/Malmsteen/you_dont_remember.tab new file mode 100644 index 0000000..0e1f620 --- /dev/null +++ b/guitar/tabs/Malmsteen/you_dont_remember.tab @@ -0,0 +1,446 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: letostak@netcom.com (Judy Letostak) + +Yngwie Malmsteen "You Don't Remember, I'll Never Forget" +from Trilogy +letostak@netcom.com + + + +|--------------------|---------------------|---------------|---------------| +|--------------------|---------------------|---------------|---------------| +|--------2--2--------|-------2--2----------|-------2--2----|---------------| +|--------2--2--------|-------2--2----------|-------2--2---5|----------7~---| +|--3--2--0--0--------|-3--2--0--0----------|-3--2--0--0---5|-0--2-----7~---| +|--------------------|---------------------|--------------3|----0-----5~---| + + +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------2--2--2--2--2--2--------------|-------x--2--2--2--2----------------| +|-3--2--0--0--0--0--0--0--0--0--3--2--|-------0--0--0--0--0--0--0--3--2----| +|-------------------------------------|-5--3-------------------------------| + + pick scrape +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|---------------------------|--------------x-------------------------------| +|-2--2--2--2--2--2--2---5---|---------7--------x---------------------------| +|-0--0--0--0--0--0--0---5---|-----2---7--------x----------------3--2-------| +|-----------------------3---|--0--0---5------------------------------------| + + +1. It .. +2. Turn ... + +|----------------------------------|--------------------------------------| +|----------------------------------|--------------------------------------| +|----------------------------------|--------------------------------------| +|-2--2--2--2--2--2-----------------|-2--2--2--2--2--2---------------------| +|-0--0--0--0--0--0--0--0--3--2-----|-0--0--0--0--0--0--0--0--3--2---------| +|----------------------------------|--------------------------------------| + + any .. + You .. + +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|-2--2--2--2--2--2--2---5---|------------------7~--------------------------| +|-0--0--0--0--0--0--0---5---|------2-----------7~------------------s3--2---| +|-----------------------3---|------0-----------5~--------------------------| + +could .. +me .. + +|----------------------------------|--------------------------------------| +|----------------------------------|--------------------------------------| +|----------------------------------|--------------------------------------| +|-2--2--2--2--2--2-----------------|-2--2--2--2--2--2---------------------| +|-0--0--0--0--0--0--0--0--3--2-----|-0--0--0--0--0--0--0--0--3--2---------| +|----------------------------------|--------------------------------------| + + Without .. +Pre-chorus when .. + +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|---------------------------|----------------------------------------------| +|-2--2--2--2--2--2--2---5---|------------------7~-------------7s-----------| +|-0--0--0--0--0--0--0---5---|------2-----------7~-------------7s-3--2--0--3| +|-----------------------3---|------0-----------5~--------------------------| + + +there .. +you .. + +|------------------------|-----------------|-------------------------------| +|--------------3---------|-----------------|-------------------------------| +|--------------0---------|-----------------|-------------------------------| +|-3---------3--0---------|-----------------|-3----------------3-----2------| +|-3---------3------------|-----------------|-3----------------3-----2------| +|-1---------1--1---------|-----------------|-1----------------1-----0------| + + +me .. +there .. + +|----------------|--------------------------|------------------------------| +|----------------|--------------------------|------------------------------| +|----------------|--------------------------|------------------------------| +|-------2~-------|------------3~------------|------------5-----------------| +|----------------|------------3~------------|------------5-----------------| +|--0-------------|-1-------1--1~------------|-1-s-3------3-----------------| + + + + +|---------------------------7s10-12s13-12-10--------------------------------| +|------------------------9------------------13-12-10s9----------------------| +|-----------------7--10--------------------------------10-9-----------------| +|-----------6--9--------------------------------------------12-10-9---------| +|-----5--8----------------------------------------------------------12-11-12| +|4--7-----------------------------------------------------------------------| + + + You .. +Chorus +|----------------------------|-------------------------------|-------------- +|----------------------------|-------------------------------|-------------- +|----------------------------|-------------------------------|-------------- +|-2--2--2--2--2--2--2--------|-------2--2--2--2--2--2--------|-2--2--2--2--2 +|-0--0--0--0--0--0--0--------|-------0--0--0--0--0--0--3--2--|-0--0--0--0--0 +|----------------------3--2--|-5--3--------------------------|-------------- + + You ... +* a.h. +------------|------------------|---------------------------|---------------- +------------|------------------|---------------------------|---------------- +------------|-------------2*---|---------------------------|---------------- +-2--2--5----|--------7---------|-2--2--2--2--2--2--2-------|-2--2--2--2--2-- +-0--0--5----|--2-----7---------|-0--0--0--0--0--0--0--3--2-|-0--0--0--0--0-- +-------3----|--0--0--5---------|---------------------------|---------------- + + +I'll ... + +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-------------|-------------------------------------------------------------| +-2-----------|-2--2--2--2--2--2--2--5-----------7--------------------------| +-0--0---3--2-|-0--0--0--0--0--0--0--5----2------7-------------3---2--------| +-------------|----------------------3----0--0---5--------------------------| + + +vibrato on all chords w/bar +Interlude +|-----------------|------------|-----------------------|-------------------| +|---6-------------|--3---------|--3s5----------5-------|---6---------------| +|---7-------------|--4---------|----5----------4-------|---5---------------| +|---7-------------|--5---------|----5----------5-------|---7---------------| +|---5-------------|--2---------|----3----------2-------|-------------------| +|-----------------|---------3--|-----------------------|---5---------------| + + +|-----------------|-----------------|--------------------------------------| +|--3---------1----|-----------------|--------------------------------------| +|--4---------2----|--4--------------|--7----------9--7--9--7s--------------| +|--3---------2----|--6--------------|--7-------7---------------------------| +|--2--------------|--7--------------|--7-----------------------------------| +|------------5----|--4--------------|--5-----------------------------------| + + +|----10h12p10s9---10--12-|-13~----s12--|12p10--10s8--8s7----7h10-----------| +|------------------------|-------------|-----------------------------------| +|-6----------------------|-------------|-----------------------------------| +|------------------------|-------------|-----------------------------------| +|------------------------|-------------|-----------------------------------| +|------------------------|-------------|-----------------------------------| +| | | | +| | | | +|------------------------|-------------|-----------------------------------| +|-3-------10~------------|--6----------|--3--------------------------------| +|----6-------------------|--7----------|--4--------------------------------| +|----7-------------------|--7----------|--5--------------------------------| +|------------------------|--5----------|--2--------------------------------| +|----5-------------------|-------------|-----------------3-----------------| + + 1/2 +|-10h12p10-10-----------------------|--------------------------------------| +|-------------13-13p12-12b--rb12-10-|10h12p10h12p10s8-8h10p8s6-6h8p6s5-5---| +|-----------------------------------|------------------------------------7-| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +|-----------------------------------|--------------------------------------| +| | | +| | | +|-----------------------------------|--------------------------------------| +|-3s5---------------------------5---|--6-----------------------------------| +|---5---------------------------4---|--5-----------------------------------| +|---5---------------------------5---|--7-----------------------------------| +|---3---------------------------2---|--------------------------------------| +|-----------------------------------|--5-----------------------------------| + + +|-------------------------------|--------------------------16h19p16--------- +|-10s15~----13h15p13s12---------|---15bf-15s17-18-15-17-18----------18p17p15 +|---------------------------14--|13----------------------------------------- +|-------------------------x-----|------------------------------------------- +|-----------------------x-------|------------------------------------------- +|-------------------------------|------------------------------------------- +| | +| | +|-------------------------------|------------------------------------------- +|-3---------------------1-------|------------------------------------------- +|-4---------------------2-------|4------------------------------------------ +|-3---------------------2-------|6------------------------------------------ +|-2-----------------------------|7------------------------------------------ +|-----------------------5-------|4------------------------------------------ + + +|----------------------------------| +|----15-17p15----------------------| +|-17----------17p15p14s13-14-16p13-| +|----------------------------------| +|----------------------------------| +|----------------------------------| +| | +| | +|----------------------------------| +|----------------------------------| +|----------------------------------| +|----------------------------------| +|----------------------------------| +|----------------------------------| + + +Solo + +|-15bf~-------12h13p12----|----12-16-12-17-12-13----12----------------12---- +|---------s15----------15-|-13-------------------15----13h15p13s12-15------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- +|-------------------------|------------------------------------------------- + + +-------|------------------------------------------|------------------------- +-13-12-|-------------------------17-16-17-19-20~--|-19-17-19-20-19-17-16-19- +-------|----------13-12-15-13-17------------------|------------------------- +-------|-14p13-14---------------------------------|------------------------- +-------|------------------------------------------|------------------------- +-------|------------------------------------------|------------------------- + + +--------------------------------------------------|------------------------- +-16-17-19p16----17-15s13-15p13--------13----------|-17p15-13-13s15-13-12-12- +-------------18----------------17-15-----17p15-13-|------------------------- +--------------------------------------------------|------------------------- +--------------------------------------------------|------------------------- +--------------------------------------------------|------------------------- + + +--------------------------|------------------------------------------------| +-13~--5s10-12-13-15~------|-13-12-13-13h15-13p12----12---------------------| +--------------------------|----------------------14----13-14~--------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| +--------------------------|------------------------------------------------| + + 1/2 +|-----------------------------------12h15p12h13p12-------------------------- +|--------------------12h13h15-12-13----------------15p13p12h13-12b--rb12s10- +|---------9h10h12s14-------------------------------------------------------- +|-9h10h12------------------------------------------------------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +-12h13|p12p10----------12h13p12p10-------------------13h15p13-17-13-15--17-- +------|-------13p12p10-------------13p12p0--13h15h17------------------------ +------|--------------------------------------------------------------------- +------|--------------------------------------------------------------------- +------|--------------------------------------------------------------------- +------|--------------------------------------------------------------------- + + 2 1 1/2 2 +-13-15-17s19-15-17-19s20-17-19-20-|-20b---rb20-----20bf------20b-~---x------ +----------------------------------|-------------------------------------x--- +----------------------------------|-----------------------------------x----- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- +----------------------------------|----------------------------------------- + + +-8h10p8s7-10-|-7------7-8----7-8-10s12---10s8~--|----18bf--rb18------------- +-------------|---9-10-----10--------------------|----------------18-17-18--- +-------------|----------------------------------|--x------------------------ +-------------|----------------------------------|x-------------------------- +-------------|----------------------------------|--------------------------- +-------------|----------------------------------|--------------------------- + + +-------------|----------------10h12h13p12p10h12p10-------10----------------- +-15h18-13h18-|-12h18-10h12h13----------------------13-12----13-12-10-13p12-- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- +-------------|-------------------------------------------------------------- + + +--------------------------------------|------------------------------------- +-10s9-13p12-10s9-13p12-10s9-13p12-10s9|-12-10p9----10p9-------9------------- +--------------------------------------|---------12------12p10---12p10p9-10-- +--------------------------------------|------------------------------------- +--------------------------------------|------------------------------------- +--------------------------------------|------------------------------------- + + +-----------------------------------------12p8h12s|17p12----14p8p0-12p10p8s7- +-9-10p9-------------------------------10---------|------13------------------ +--------12p10p9----10p9-------------9------------|-------------------------- +----------------12------12p10p9--10--------------|-------------------------- +-------------------------------------------------|-------------------------- +-------------------------------------------------|-------------------------- + + 1/2 +---------------------|------------------------12-13-14s17-13-15----|-13----- +-10dive--------------|---------------12-13h15-------------------17-|----15-- +----------------7b---|-p5h7-t12--s14-------------------------------|-------- +-------------x-------|---------------------------------------------|-------- +-----------x---------|---------------------------------------------|-------- +---------------------|---------------------------------------------|-------- + + You ... + +-----------------------------------|---------------------|------------------ +-17-13-15p12-13p12-13~--p12--------|---------------------|------------------ +----------------------------14p12--|--12h14~-------------|--14s9~----------- +-----------------------------------|---------------------|------------------ +-----------------------------------|---------------------|------------------ +-----------------------------------|---------------------|------------------ + + +I'll ..You .. +|-----------------------|---------------|---------12---------10~-----------| +|-----------------------|---------------|------10--------------------------| +|-----------------------|---------------|----9-----------------------------| +|------p7---------------|---------------|-10-------------------------------| +|-----------------------|---------------|----------------------------------| +|-----------------------|---------------|----------------------------------| + + 1/2 +|-12s17------15------|-p13p12----12b-rb~----------------17bf~--------------| +|--------------------|--------15-------------------20----------------------| +|--------------------|-----------------------------------------------------| +|--------------------|-----------------------------------------------------| +|--------------------|-----------------------------------------------------| +|--------------------|-----------------------------------------------------| + + + You .. + 1/2 +|-17s16s17-19-20-17---19-20s22-22bf---|------------------------------------| +|-------------------------------------|------13-15-17-17b------------------| +|-------------------------------------|-14~--------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| +|-------------------------------------|------------------------------------| + + + I'll .. + 1/2 +|----------------|-----s12p10p8h10-------|--10b--rb--8~---------------12-15- +|----rb17~-------|-----------------------|-------------------12-13-15------- +|----------------|-----------------------|--------------9s14---------------- +|----------------|-----------------------|---------------------------------- +|----------------|-----------------------|---------------------------------- +|----------------|-----------------------|---------------------------------- + + 1/2 1/2 3/4 1/2 +-13-12-----------|-----------------------|---------------|--16b--16s19b----- +-------15-13-12--|--------13-15-17-17b---|--t21p17b~-----|------------------ +-----------------|-14~-------------------|---------------|------------------ +-----------------|-----------------------|---------------|------------------ +-----------------|-----------------------|---------------|------------------ +-----------------|-----------------------|---------------|------------------ + + +-20-22-20bf-----|--20p19-20~---20p19-17s16-20-19-17s15-20-19-17s16-20-19---| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| +----------------|----------------------------------------------------------| + + +|17s16-20-19-17s16-20-19-17s16-20-19-17s16---------------------------------- +|------------------------------------------18-17-15------------------------- +|---------------------------------------------------17-16-14s13------------- +|---------------------------------------------------------------15s14-12---- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +--------------|------------------------------------------------------------- +--------------|------------------------------------------------------------- +--------------|----------------------------------------------------12h14---- +-15-14p12-----|-15p14-12-15-14p12----14p12----------------12-14h15---------- +----------15--|-------------------15-------15p14-12-14h15------------------- +--------------|------------------------------------------------------------- + + +----------12-12-14p13p12--------------|--------------------------------12*--| +-12h13-15----------------15-13p12-----|-13p12-------12----------------------| +----------------------------------14--|-------14-13-----13-14~--7s9-7-------| +--------------------------------------|-------------------------------------| +--------------------------------------|-------------------------------------| +--------------------------------------|-------------------------------------| + + 1/2 +|--------------|---------------------12b---|--------12~--------------------| +|--------------|------------------10-------|-------------------------------| +|-5p4h5p4-5-7--|-p5-4-----------9----------|-------------------------------| +|--------------|------7~--7-h10------------|-------------------------------| +|--------------|---------------------------|-------------------------------| +|--------------|---------------------------|-------------------------------| + + +|-12p11p10s8h12p10p8s7-10-7-8----7---------------------|-------------------- +|-----------------------------10---9-10-8h9-6h8-5-6-3--|-5p4p3-------------- +|------------------------------------------------------|-------5p4---------- +|------------------------------------------------------|-----------6-7s----- +|------------------------------------------------------|-------------------- +|------------------------------------------------------|-------------------- + + +----------12s17h20p17-----------13p12----------------|---------------------- +-------13-------------17--------------13p12----------|-------------13h15h17- +----14-------------------17s----------------14~------|-14p13-14-16---------- +-14--------------------------------------------------|---------------------- +-----------------------------------------------------|---------------------- +-----------------------------------------------------|---------------------- + + +-13h15h17----------13-17-15-13-15-13----15-13-------13-------|-------------- +----------13h15h17-------------------17-------17-15----15-13-|-17-15-13-13-- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- +-------------------------------------------------------------|-------------- + + +-------------------|-------------------|-----------------------------------| +-15-13-12-13bf~----|-13s21-------------|-----------------------------------| +-------------------|-------------------|---s7-5--7~------------------------| +-------------------|-------------------|-----------------------------------| +-------------------|-------------------|-----------------------------------| +-------------------|-------------------|-----------------------------------| + + +fade out + diff --git a/guitar/tabs/MelBay/Chords/A13b9.prj b/guitar/tabs/MelBay/Chords/A13b9.prj new file mode 100644 index 0000000..244ccc2 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/A13b9.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=A13b9.tab +TYPES=(0,4)(1,4) +SEPARATOR=(0,1) diff --git a/guitar/tabs/MelBay/Chords/A13b9.tab b/guitar/tabs/MelBay/Chords/A13b9.tab new file mode 100644 index 0000000..5283605 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/A13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-6-14- +B|-7-11- +G|-6-12- +D|-5-11- +A|---12- +E|-5---- + diff --git a/guitar/tabs/MelBay/Chords/A7b9.prj b/guitar/tabs/MelBay/Chords/A7b9.prj new file mode 100644 index 0000000..bd1b80b --- /dev/null +++ b/guitar/tabs/MelBay/Chords/A7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=A7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/A7b9.tab b/guitar/tabs/MelBay/Chords/A7b9.tab new file mode 100644 index 0000000..5529658 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/A7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-6-12- +B|-5-11- +G|-6-12- +D|-5-11- +A|---12- +E|-5---- + diff --git a/guitar/tabs/MelBay/Chords/Ab7#5.prj b/guitar/tabs/MelBay/Chords/Ab7#5.prj new file mode 100644 index 0000000..0fd10b7 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Ab7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Ab7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Ab7#5.tab b/guitar/tabs/MelBay/Chords/Ab7#5.tab new file mode 100644 index 0000000..a813c69 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Ab7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-5-13- +G|-5-11- +D|-4-14- +A|---11- +E|-4---- + diff --git a/guitar/tabs/MelBay/Chords/Ab9#5.prj b/guitar/tabs/MelBay/Chords/Ab9#5.prj new file mode 100644 index 0000000..ef2bb4d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Ab9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Ab9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Ab9#5.tab b/guitar/tabs/MelBay/Chords/Ab9#5.tab new file mode 100644 index 0000000..848d5c4 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Ab9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---12- +B|-5-11- +G|-3-11- +D|-4-10- +A|-3-11- +E|-4---- + diff --git a/guitar/tabs/MelBay/Chords/Adim7.prj b/guitar/tabs/MelBay/Chords/Adim7.prj new file mode 100644 index 0000000..0ce9351 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Adim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Adim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Adim7.tab b/guitar/tabs/MelBay/Chords/Adim7.tab new file mode 100644 index 0000000..6f0faab --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Adim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-4-13- +G|-5-11- +D|-4-13- +A|---12- +E|-5---- + diff --git a/guitar/tabs/MelBay/Chords/B-C.prj b/guitar/tabs/MelBay/Chords/B-C.prj new file mode 100644 index 0000000..8124641 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/B-C.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=B-C.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/B-C.tab b/guitar/tabs/MelBay/Chords/B-C.tab new file mode 100644 index 0000000..db1d4ee --- /dev/null +++ b/guitar/tabs/MelBay/Chords/B-C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-4- +D|-9-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Bb7#5.PRJ.prj b/guitar/tabs/MelBay/Chords/Bb7#5.PRJ.prj new file mode 100644 index 0000000..3a707f3 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Bb7#5.PRJ.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Bb7#5.PRJ.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Bb7#5.PRJ.tab b/guitar/tabs/MelBay/Chords/Bb7#5.PRJ.tab new file mode 100644 index 0000000..bfeb408 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Bb7#5.PRJ.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-3- +G|-7-1- +D|-6-4- +A|---1- +E|-6--- + diff --git a/guitar/tabs/MelBay/Chords/Bb9#5.prj b/guitar/tabs/MelBay/Chords/Bb9#5.prj new file mode 100644 index 0000000..f2a4458 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Bb9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Bb9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Bb9#5.tab b/guitar/tabs/MelBay/Chords/Bb9#5.tab new file mode 100644 index 0000000..83b7f2b --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Bb9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---14- +B|-7-13- +G|-5-13- +D|-6-12- +A|-5-13- +E|-6---- + diff --git a/guitar/tabs/MelBay/Chords/C13.prj b/guitar/tabs/MelBay/Chords/C13.prj new file mode 100644 index 0000000..0081e13 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C13.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C13.tab b/guitar/tabs/MelBay/Chords/C13.tab new file mode 100644 index 0000000..138a523 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----5- +B|-10-3- +G|-9--3- +D|-8--2- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/C13b9.prj b/guitar/tabs/MelBay/Chords/C13b9.prj new file mode 100644 index 0000000..b70f91e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C13b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C13b9.tab b/guitar/tabs/MelBay/Chords/C13b9.tab new file mode 100644 index 0000000..e77bae1 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9--5- +B|-10-2- +G|-9--3- +D|-8--2- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/C13sus4.prj b/guitar/tabs/MelBay/Chords/C13sus4.prj new file mode 100644 index 0000000..6a1cd1e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13sus4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C13sus4.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C13sus4.tab b/guitar/tabs/MelBay/Chords/C13sus4.tab new file mode 100644 index 0000000..3b385c1 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13sus4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----5- +B|-10-3- +G|-10-3- +D|-8--3- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/C13sus4[b9].prj b/guitar/tabs/MelBay/Chords/C13sus4[b9].prj new file mode 100644 index 0000000..bedb2b8 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13sus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C13sus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C13sus4[b9].tab b/guitar/tabs/MelBay/Chords/C13sus4[b9].tab new file mode 100644 index 0000000..bedfa09 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C13sus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---1- +B|-6-2- +G|-6-2- +D|-7--- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C6.prj b/guitar/tabs/MelBay/Chords/C6.prj new file mode 100644 index 0000000..e94f352 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C6.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C6.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C6.tab b/guitar/tabs/MelBay/Chords/C6.tab new file mode 100644 index 0000000..24abf5a --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C6.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-5- +G|-9-2- +D|-7-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7#5.prj b/guitar/tabs/MelBay/Chords/C7#5.prj new file mode 100644 index 0000000..91ded27 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7#5.tab b/guitar/tabs/MelBay/Chords/C7#5.tab new file mode 100644 index 0000000..2682b12 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-9-5- +G|-9-3- +D|-8-6- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7.prj b/guitar/tabs/MelBay/Chords/C7.prj new file mode 100644 index 0000000..9d03f5f --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7.tab b/guitar/tabs/MelBay/Chords/C7.tab new file mode 100644 index 0000000..b52d27a --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-5- +G|-9-3- +D|-8-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7[#9#5].prj b/guitar/tabs/MelBay/Chords/C7[#9#5].prj new file mode 100644 index 0000000..c5b6a2a --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[#9#5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7[#9#5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7[#9#5].tab b/guitar/tabs/MelBay/Chords/C7[#9#5].tab new file mode 100644 index 0000000..5c19f81 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[#9#5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-11-4- +B|-9--4- +G|-9--3- +D|-8--2- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/C7[#9b5].prj b/guitar/tabs/MelBay/Chords/C7[#9b5].prj new file mode 100644 index 0000000..4923706 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[#9b5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7[#9b5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7[#9b5].tab b/guitar/tabs/MelBay/Chords/C7[#9b5].tab new file mode 100644 index 0000000..0c61cea --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[#9b5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---2- +B|-7-4- +G|-8-3- +D|-8-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7[b9#5].prj b/guitar/tabs/MelBay/Chords/C7[b9#5].prj new file mode 100644 index 0000000..7c8271e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[b9#5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7[b9#5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7[b9#5].tab b/guitar/tabs/MelBay/Chords/C7[b9#5].tab new file mode 100644 index 0000000..1d840c5 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[b9#5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9-4- +B|-9-2- +G|-9-3- +D|-8-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7[b9b5].prj b/guitar/tabs/MelBay/Chords/C7[b9b5].prj new file mode 100644 index 0000000..8e483be --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[b9b5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7[b9b5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7[b9b5].tab b/guitar/tabs/MelBay/Chords/C7[b9b5].tab new file mode 100644 index 0000000..0c420a8 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7[b9b5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9-2- +B|-7-2- +G|-9-3- +D|-8-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7b9.prj b/guitar/tabs/MelBay/Chords/C7b9.prj new file mode 100644 index 0000000..1cd0f0d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7b9.tab b/guitar/tabs/MelBay/Chords/C7b9.tab new file mode 100644 index 0000000..b49d737 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9-3- +B|-8-2- +G|-9-3- +D|-8-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7sus4.prj b/guitar/tabs/MelBay/Chords/C7sus4.prj new file mode 100644 index 0000000..d4b4011 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7sus4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7sus4.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7sus4.tab b/guitar/tabs/MelBay/Chords/C7sus4.tab new file mode 100644 index 0000000..807a949 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7sus4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-8--6- +G|-10-3- +D|-8--5- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/C7sus4[b9].prj b/guitar/tabs/MelBay/Chords/C7sus4[b9].prj new file mode 100644 index 0000000..dbe6613 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7sus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7sus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C7sus4[b9].tab b/guitar/tabs/MelBay/Chords/C7sus4[b9].tab new file mode 100644 index 0000000..e97700c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7sus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---1- +B|-6-2- +G|-6-3- +D|-8--- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C7sus4b9.prj b/guitar/tabs/MelBay/Chords/C7sus4b9.prj new file mode 100644 index 0000000..b8e90db --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7sus4b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7sus4b9.tab +TYPES=(0,4) diff --git a/guitar/tabs/MelBay/Chords/C7sus4b9.tab b/guitar/tabs/MelBay/Chords/C7sus4b9.tab new file mode 100644 index 0000000..8bf567a --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C7sus4b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-6- +B|-6- +G|-6- +D|-5- +A|-3- +E|--- + diff --git a/guitar/tabs/MelBay/Chords/C9#5.prj b/guitar/tabs/MelBay/Chords/C9#5.prj new file mode 100644 index 0000000..b51f86c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C9#5.tab b/guitar/tabs/MelBay/Chords/C9#5.tab new file mode 100644 index 0000000..cbdc3da --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---4- +B|-9-3- +G|-7-3- +D|-8-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C9.prj b/guitar/tabs/MelBay/Chords/C9.prj new file mode 100644 index 0000000..684f592 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C9.tab b/guitar/tabs/MelBay/Chords/C9.tab new file mode 100644 index 0000000..8ebe66d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-3- +G|-7-3- +D|-8-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C9sus4.prj b/guitar/tabs/MelBay/Chords/C9sus4.prj new file mode 100644 index 0000000..17a5c53 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9sus4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C9sus4.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C9sus4.tab b/guitar/tabs/MelBay/Chords/C9sus4.tab new file mode 100644 index 0000000..dc1733d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9sus4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-6-3- +G|-7-3- +D|-8-3- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C9sus4[b13].prj b/guitar/tabs/MelBay/Chords/C9sus4[b13].prj new file mode 100644 index 0000000..7b16fd1 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9sus4[b13].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C9sus4[b13].tab +TYPES=(0,4)(1,4)(2,4)(3,4) diff --git a/guitar/tabs/MelBay/Chords/C9sus4[b13].tab b/guitar/tabs/MelBay/Chords/C9sus4[b13].tab new file mode 100644 index 0000000..8e52e95 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C9sus4[b13].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|--------4- +B|-6-3----3- +G|-7-1-10-5- +D|-6-3-12-3- +A|---3-11-3- +E|-8---8---- + diff --git a/guitar/tabs/MelBay/Chords/CDim7.prj b/guitar/tabs/MelBay/Chords/CDim7.prj new file mode 100644 index 0000000..5fef6da --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CDim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CDim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/CDim7.tab b/guitar/tabs/MelBay/Chords/CDim7.tab new file mode 100644 index 0000000..7070e6d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CDim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-2- +D|-7-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/CM7[#11].prj b/guitar/tabs/MelBay/Chords/CM7[#11].prj new file mode 100644 index 0000000..c49d84c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CM7[#11].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CM7[#11].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/CM7[#11].tab b/guitar/tabs/MelBay/Chords/CM7[#11].tab new file mode 100644 index 0000000..684f9bd --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CM7[#11].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-5- +G|-9-4- +D|-9-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/CMaj7#5.prj b/guitar/tabs/MelBay/Chords/CMaj7#5.prj new file mode 100644 index 0000000..3980ad4 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CMaj7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CMaj7#5.tab +TYPES=(0,4)(1,4)(2,4)(3,4) diff --git a/guitar/tabs/MelBay/Chords/CMaj7#5.tab b/guitar/tabs/MelBay/Chords/CMaj7#5.tab new file mode 100644 index 0000000..c908c2f --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CMaj7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---7---4- +B|-9-9-5-5- +G|-9-9-4-4- +D|-9---6--- +A|-----3-3- +E|-8-8----- + diff --git a/guitar/tabs/MelBay/Chords/C[6-9 #11].prj b/guitar/tabs/MelBay/Chords/C[6-9 #11].prj new file mode 100644 index 0000000..b00cf41 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C[6-9 #11].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C[6-9 #11].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C[6-9 #11].tab b/guitar/tabs/MelBay/Chords/C[6-9 #11].tab new file mode 100644 index 0000000..d912c81 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C[6-9 #11].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---2- +B|-7-3- +G|-7-2- +D|-7-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/C[6-9].prj b/guitar/tabs/MelBay/Chords/C[6-9].prj new file mode 100644 index 0000000..7f8e572 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C[6-9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C[6-9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/C[6-9].tab b/guitar/tabs/MelBay/Chords/C[6-9].tab new file mode 100644 index 0000000..8bfad5d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/C[6-9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-3- +B|-8-3- +G|-7-2- +D|-7-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Cm(Maj7).prj b/guitar/tabs/MelBay/Chords/Cm(Maj7).prj new file mode 100644 index 0000000..dc27bf3 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm(Maj7).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm(Maj7).tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm(Maj7).tab b/guitar/tabs/MelBay/Chords/Cm(Maj7).tab new file mode 100644 index 0000000..af609a6 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm(Maj7).tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--3- +B|-8--4- +G|-8--4- +D|-9--5- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/Cm11.prj b/guitar/tabs/MelBay/Chords/Cm11.prj new file mode 100644 index 0000000..84cd679 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm11.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm11.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm11.tab b/guitar/tabs/MelBay/Chords/Cm11.tab new file mode 100644 index 0000000..732d9b3 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm11.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-6-4- +G|-8-3- +D|-8-3- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Cm6.prj b/guitar/tabs/MelBay/Chords/Cm6.prj new file mode 100644 index 0000000..9cf493d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm6.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm6.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm6.tab b/guitar/tabs/MelBay/Chords/Cm6.tab new file mode 100644 index 0000000..8b8b72e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm6.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-4- +G|-8-2- +D|-7-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Cm7#5.prj b/guitar/tabs/MelBay/Chords/Cm7#5.prj new file mode 100644 index 0000000..fff10bc --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm7#5.tab b/guitar/tabs/MelBay/Chords/Cm7#5.tab new file mode 100644 index 0000000..b8917bf --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-9-4- +G|-8-3- +D|-8-6- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Cm7.prj b/guitar/tabs/MelBay/Chords/Cm7.prj new file mode 100644 index 0000000..c45c98b --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm7.tab b/guitar/tabs/MelBay/Chords/Cm7.tab new file mode 100644 index 0000000..66ba9b2 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-5- +G|-9-4- +D|-9-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Cm7b5.prj b/guitar/tabs/MelBay/Chords/Cm7b5.prj new file mode 100644 index 0000000..9c4b0ee --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm7b5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm7b5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm7b5.tab b/guitar/tabs/MelBay/Chords/Cm7b5.tab new file mode 100644 index 0000000..1da1702 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm7b5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Cm9(Maj7).prj b/guitar/tabs/MelBay/Chords/Cm9(Maj7).prj new file mode 100644 index 0000000..32e3fbd --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm9(Maj7).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm9(Maj7).tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm9(Maj7).tab b/guitar/tabs/MelBay/Chords/Cm9(Maj7).tab new file mode 100644 index 0000000..22b669f --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm9(Maj7).tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-8--3- +G|-8--4- +D|-9--1- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/Cm9.prj b/guitar/tabs/MelBay/Chords/Cm9.prj new file mode 100644 index 0000000..7a594e9 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm9.tab b/guitar/tabs/MelBay/Chords/Cm9.tab new file mode 100644 index 0000000..6ef3cb2 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-3- +G|-7-4- +D|-9-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Cm9Maj7.prj b/guitar/tabs/MelBay/Chords/Cm9Maj7.prj new file mode 100644 index 0000000..c0a5594 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm9Maj7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm9Maj7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm9Maj7.tab b/guitar/tabs/MelBay/Chords/Cm9Maj7.tab new file mode 100644 index 0000000..22b669f --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm9Maj7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-8--3- +G|-8--4- +D|-9--1- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/CmMaj7.prj b/guitar/tabs/MelBay/Chords/CmMaj7.prj new file mode 100644 index 0000000..fe6c844 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CmMaj7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CmMaj7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/CmMaj7.tab b/guitar/tabs/MelBay/Chords/CmMaj7.tab new file mode 100644 index 0000000..af609a6 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/CmMaj7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--3- +B|-8--4- +G|-8--4- +D|-9--5- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/Cm[6-9].prj b/guitar/tabs/MelBay/Chords/Cm[6-9].prj new file mode 100644 index 0000000..32154d1 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm[6-9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm[6-9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Cm[6-9].tab b/guitar/tabs/MelBay/Chords/Cm[6-9].tab new file mode 100644 index 0000000..a8bcb7c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Cm[6-9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-10-3- +G|-8--2- +D|-10-1- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/Csus4[b9,b13].prj b/guitar/tabs/MelBay/Chords/Csus4[b9,b13].prj new file mode 100644 index 0000000..1be1f39 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Csus4[b9,b13].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Csus4[b9,b13].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Csus4[b9,b13].tab b/guitar/tabs/MelBay/Chords/Csus4[b9,b13].tab new file mode 100644 index 0000000..573095a --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Csus4[b9,b13].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---1- +B|-6-2- +G|-6-1- +D|-6--- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Csus4[b9].prj b/guitar/tabs/MelBay/Chords/Csus4[b9].prj new file mode 100644 index 0000000..1e1b27c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Csus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Csus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Csus4[b9].tab b/guitar/tabs/MelBay/Chords/Csus4[b9].tab new file mode 100644 index 0000000..a3fefdd --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Csus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8---- +B|-8--6- +G|-10-6- +D|-11-5- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Chords/Csus4b9.prj b/guitar/tabs/MelBay/Chords/Csus4b9.prj new file mode 100644 index 0000000..64ba68a --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Csus4b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Csus4b9.tab +TYPES=(0,4) diff --git a/guitar/tabs/MelBay/Chords/Csus4b9.tab b/guitar/tabs/MelBay/Chords/Csus4b9.tab new file mode 100644 index 0000000..7bae482 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Csus4b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-- +B|-8-- +G|-10- +D|-11- +A|-10- +E|-8-- + diff --git a/guitar/tabs/MelBay/Chords/D7#5.prj b/guitar/tabs/MelBay/Chords/D7#5.prj new file mode 100644 index 0000000..d4b282f --- /dev/null +++ b/guitar/tabs/MelBay/Chords/D7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/D7#5.tab b/guitar/tabs/MelBay/Chords/D7#5.tab new file mode 100644 index 0000000..73ab50d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/D7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-11-7- +G|-11-5- +D|-10-8- +A|----5- +E|-10--- + diff --git a/guitar/tabs/MelBay/Chords/D9#5.prj b/guitar/tabs/MelBay/Chords/D9#5.prj new file mode 100644 index 0000000..5df625e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/D9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/D9#5.tab b/guitar/tabs/MelBay/Chords/D9#5.tab new file mode 100644 index 0000000..0c3e0e3 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/D9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----6- +B|-11-5- +G|-9--5- +D|-10-4- +A|-9--5- +E|-10--- + diff --git a/guitar/tabs/MelBay/Chords/E7#5.prj b/guitar/tabs/MelBay/Chords/E7#5.prj new file mode 100644 index 0000000..1f1a2e1 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/E7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=E7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/E7#5.tab b/guitar/tabs/MelBay/Chords/E7#5.tab new file mode 100644 index 0000000..007685e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/E7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------- +B|-13-9-- +G|-13-7-- +D|-12-10- +A|----7-- +E|-12---- + diff --git a/guitar/tabs/MelBay/Chords/E9#5.prj b/guitar/tabs/MelBay/Chords/E9#5.prj new file mode 100644 index 0000000..d300c5e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/E9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=E9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/E9#5.tab b/guitar/tabs/MelBay/Chords/E9#5.tab new file mode 100644 index 0000000..8505898 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/E9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----8- +B|-13-7- +G|-11-7- +D|-12-6- +A|-11-7- +E|-12--- + diff --git a/guitar/tabs/MelBay/Chords/Eb13b9.prj b/guitar/tabs/MelBay/Chords/Eb13b9.prj new file mode 100644 index 0000000..50e6d7c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Eb13b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Eb13b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Eb13b9.tab b/guitar/tabs/MelBay/Chords/Eb13b9.tab new file mode 100644 index 0000000..853ea17 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Eb13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-12-8- +B|-13-5- +G|-12-6- +D|-11-5- +A|----6- +E|-11--- + diff --git a/guitar/tabs/MelBay/Chords/Eb7b9.prj b/guitar/tabs/MelBay/Chords/Eb7b9.prj new file mode 100644 index 0000000..8003034 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Eb7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Eb7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Eb7b9.tab b/guitar/tabs/MelBay/Chords/Eb7b9.tab new file mode 100644 index 0000000..a878c11 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Eb7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-12-6- +B|-11-5- +G|-12-6- +D|-11-5- +A|----6- +E|-11--- + diff --git a/guitar/tabs/MelBay/Chords/EbDim7.prj b/guitar/tabs/MelBay/Chords/EbDim7.prj new file mode 100644 index 0000000..7fdbb02 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/EbDim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=EbDim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/EbDim7.tab b/guitar/tabs/MelBay/Chords/EbDim7.tab new file mode 100644 index 0000000..094ccbd --- /dev/null +++ b/guitar/tabs/MelBay/Chords/EbDim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-10-7- +G|-11-5- +D|-10-7- +A|----6- +E|-11--- + diff --git a/guitar/tabs/MelBay/Chords/F#13b9.prj b/guitar/tabs/MelBay/Chords/F#13b9.prj new file mode 100644 index 0000000..99ec15d --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#13b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=F#13b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/F#13b9.tab b/guitar/tabs/MelBay/Chords/F#13b9.tab new file mode 100644 index 0000000..2500dd0 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3-11- +B|-4-8-- +G|-3-9-- +D|-2-8-- +A|---9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Chords/F#7#5.prj b/guitar/tabs/MelBay/Chords/F#7#5.prj new file mode 100644 index 0000000..99fc256 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=F#7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/F#7#5.tab b/guitar/tabs/MelBay/Chords/F#7#5.tab new file mode 100644 index 0000000..7e9bd7c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-3-11- +G|-3-9-- +D|-2-12- +A|---9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Chords/F#7b9.prj b/guitar/tabs/MelBay/Chords/F#7b9.prj new file mode 100644 index 0000000..3c1e394 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=F#7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/F#7b9.tab b/guitar/tabs/MelBay/Chords/F#7b9.tab new file mode 100644 index 0000000..dcee5bf --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3-9- +B|-2-8- +G|-3-9- +D|-2-8- +A|---9- +E|-2--- + diff --git a/guitar/tabs/MelBay/Chords/F#9#5.prj b/guitar/tabs/MelBay/Chords/F#9#5.prj new file mode 100644 index 0000000..b84c58b --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=F#9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/F#9#5.tab b/guitar/tabs/MelBay/Chords/F#9#5.tab new file mode 100644 index 0000000..d7e5635 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---10- +B|-3-9-- +G|-1-9-- +D|-2-8-- +A|-1-9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Chords/F#Dim7.prj b/guitar/tabs/MelBay/Chords/F#Dim7.prj new file mode 100644 index 0000000..dc7c1f3 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#Dim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=F#Dim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/F#Dim7.tab b/guitar/tabs/MelBay/Chords/F#Dim7.tab new file mode 100644 index 0000000..aaded7e --- /dev/null +++ b/guitar/tabs/MelBay/Chords/F#Dim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-1-10- +G|-2-8-- +D|-1-10- +A|---9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Chords/Gb-C.prj b/guitar/tabs/MelBay/Chords/Gb-C.prj new file mode 100644 index 0000000..9f25c37 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Gb-C.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Gb-C.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/Gb-C.tab b/guitar/tabs/MelBay/Chords/Gb-C.tab new file mode 100644 index 0000000..b955db7 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Gb-C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-2- +G|-6-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/GbAug-C.prj b/guitar/tabs/MelBay/Chords/GbAug-C.prj new file mode 100644 index 0000000..0d9bf8c --- /dev/null +++ b/guitar/tabs/MelBay/Chords/GbAug-C.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=GbAug-C.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Chords/GbAug-C.tab b/guitar/tabs/MelBay/Chords/GbAug-C.tab new file mode 100644 index 0000000..acc38f8 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/GbAug-C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-3- +G|-7-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Chords/Josie.tab b/guitar/tabs/MelBay/Chords/Josie.tab new file mode 100644 index 0000000..8836d65 --- /dev/null +++ b/guitar/tabs/MelBay/Chords/Josie.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------7-7-7----------- +B|-------------------------------------10-7-8---7-7-7----------- +G|---7-6-------7-6-------------------9----------7-7-7----------- +D|-------7-9-------7---7---7-6-5---9------------6-6-6-------2--- +A|-7---------7-------7---7-------9--------------7-7-7---0-2----- +E|--------------------------------------------0-------0-------0- + diff --git a/guitar/tabs/MelBay/Chords/MajorMinor.tab b/guitar/tabs/MelBay/Chords/MajorMinor.tab new file mode 100644 index 0000000..757f62b --- /dev/null +++ b/guitar/tabs/MelBay/Chords/MajorMinor.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-1---------------------------0-1-3-4-1-8-------------------8--3-3-3- +B|-1-----------------------1-3-----------9-----------------9-9--3-5-2- +G|-1-----------------0-1-3---------------10---------7-9-10---9--3-6-3- +D|-2-----------0-2-3---------------------10----8-10----------10-3-5-2- +A|-3-------1-3---------------------------8--10---------------8--5-3-3- +E|-1-1-3-4------------------------------------------------------3----- + + + +E|-8-- +B|-9-- +G|-10- +D|-10- +A|-8-- +E|---- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A13b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A13b9.prj new file mode 100644 index 0000000..6b31fbb --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A13b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\A13b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A13b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A13b9.tab new file mode 100644 index 0000000..5283605 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-6-14- +B|-7-11- +G|-6-12- +D|-5-11- +A|---12- +E|-5---- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A7b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A7b9.prj new file mode 100644 index 0000000..6b8ad43 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\A7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A7b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A7b9.tab new file mode 100644 index 0000000..5529658 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/A7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-6-12- +B|-5-11- +G|-6-12- +D|-5-11- +A|---12- +E|-5---- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C13b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C13b9.prj new file mode 100644 index 0000000..c2800b0 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C13b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\C13b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C13b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C13b9.tab new file mode 100644 index 0000000..e77bae1 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9--5- +B|-10-2- +G|-9--3- +D|-8--2- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C7b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C7b9.prj new file mode 100644 index 0000000..dd2ec4a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\C7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C7b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C7b9.tab new file mode 100644 index 0000000..b49d737 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/C7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9-3- +B|-8-2- +G|-9-3- +D|-8-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb13b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb13b9.prj new file mode 100644 index 0000000..6db468a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb13b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\Eb13b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb13b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb13b9.tab new file mode 100644 index 0000000..853ea17 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-12-8- +B|-13-5- +G|-12-6- +D|-11-5- +A|----6- +E|-11--- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb7b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb7b9.prj new file mode 100644 index 0000000..64da90a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\Eb7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb7b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb7b9.tab new file mode 100644 index 0000000..a878c11 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/Eb7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-12-6- +B|-11-5- +G|-12-6- +D|-11-5- +A|----6- +E|-11--- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#13b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#13b9.prj new file mode 100644 index 0000000..fd0f803 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#13b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\F#13b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#13b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#13b9.tab new file mode 100644 index 0000000..2500dd0 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#13b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3-11- +B|-4-8-- +G|-3-9-- +D|-2-8-- +A|---9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#7b9.prj b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#7b9.prj new file mode 100644 index 0000000..6292675 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\HalfWholeDiminished\F#7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#7b9.tab b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#7b9.tab new file mode 100644 index 0000000..dcee5bf --- /dev/null +++ b/guitar/tabs/MelBay/Modes/HalfWholeDiminished/F#7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3-9- +B|-2-8- +G|-3-9- +D|-2-8- +A|---9- +E|-2--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/Adim7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/Adim7.prj new file mode 100644 index 0000000..d46bc72 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/Adim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Altered bb7\Adim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/Adim7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/Adim7.tab new file mode 100644 index 0000000..6f0faab --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/Adim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-4-13- +G|-5-11- +D|-4-13- +A|---12- +E|-5---- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/CDim7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/CDim7.prj new file mode 100644 index 0000000..3fb4736 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/CDim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Altered bb7\CDim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/CDim7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/CDim7.tab new file mode 100644 index 0000000..7070e6d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/CDim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-2- +D|-7-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/EbDim7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/EbDim7.prj new file mode 100644 index 0000000..219536a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/EbDim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Altered bb7\EbDim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/EbDim7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/EbDim7.tab new file mode 100644 index 0000000..094ccbd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/EbDim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-10-7- +G|-11-5- +D|-10-7- +A|----6- +E|-11--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/F#Dim7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/F#Dim7.prj new file mode 100644 index 0000000..c74514e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/F#Dim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Altered bb7\F#Dim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/F#Dim7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/F#Dim7.tab new file mode 100644 index 0000000..aaded7e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Altered bb7/F#Dim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-1-10- +G|-2-8-- +D|-1-10- +A|---9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm7.prj new file mode 100644 index 0000000..ed1a847 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Dorian #4\Cm7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm7.tab new file mode 100644 index 0000000..d08724e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-4- +G|-8-3- +D|-8-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm9.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm9.prj new file mode 100644 index 0000000..b203925 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Dorian #4\Cm9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm9.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm9.tab new file mode 100644 index 0000000..17e98fd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Dorian #4/Cm9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-8--3- +G|-8--3- +D|-8--1- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/Cm9Maj7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/Cm9Maj7.prj new file mode 100644 index 0000000..794e79c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/Cm9Maj7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Harmonic Minor\Cm9Maj7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/Cm9Maj7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/Cm9Maj7.tab new file mode 100644 index 0000000..22b669f --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/Cm9Maj7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-8--3- +G|-8--4- +D|-9--1- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/CmMaj7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/CmMaj7.prj new file mode 100644 index 0000000..8344999 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/CmMaj7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Harmonic Minor\CmMaj7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/CmMaj7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/CmMaj7.tab new file mode 100644 index 0000000..af609a6 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Harmonic Minor/CmMaj7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--3- +B|-8--4- +G|-8--4- +D|-9--5- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Ionian #5/CMaj7#5.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Ionian #5/CMaj7#5.prj new file mode 100644 index 0000000..63d4483 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Ionian #5/CMaj7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Ionian #5\CMaj7#5.tab +TYPES=(0,4)(1,4)(2,4)(3,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Ionian #5/CMaj7#5.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Ionian #5/CMaj7#5.tab new file mode 100644 index 0000000..8eda2d3 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Ionian #5/CMaj7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-----7-4- +B|-9-5-9-5- +G|-9-4-9-4- +D|-9-6----- +A|---3---3- +E|-8---8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Cm7b5.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Cm7b5.prj new file mode 100644 index 0000000..4da4a4a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Cm7b5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Locrian Natural 6\Cm7b5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Cm7b5.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Cm7b5.tab new file mode 100644 index 0000000..1da1702 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Cm7b5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Gb-C.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Gb-C.prj new file mode 100644 index 0000000..6326bda --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Gb-C.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Locrian Natural 6\Gb-C.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Gb-C.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Gb-C.tab new file mode 100644 index 0000000..b955db7 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Locrian Natural 6/Gb-C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-2- +G|-6-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/B-C.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/B-C.prj new file mode 100644 index 0000000..b6c8391 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/B-C.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Lydian #2\B-C.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/B-C.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/B-C.tab new file mode 100644 index 0000000..db1d4ee --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/B-C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-4- +D|-9-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/CM7.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/CM7.prj new file mode 100644 index 0000000..70239ce --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/CM7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Lydian #2\CM7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/CM7.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/CM7.tab new file mode 100644 index 0000000..66ba9b2 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Lydian #2/CM7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-5- +G|-9-4- +D|-9-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7b9.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7b9.prj new file mode 100644 index 0000000..8437346 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Phrygian Natural 3\C7b9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7b9.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7b9.tab new file mode 100644 index 0000000..b49d737 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9-3- +B|-8-2- +G|-9-3- +D|-8-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7sus4b9.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7sus4b9.prj new file mode 100644 index 0000000..50be213 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7sus4b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Phrygian Natural 3\C7sus4b9.tab +TYPES=(0,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7sus4b9.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7sus4b9.tab new file mode 100644 index 0000000..8bf567a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/C7sus4b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-6- +B|-6- +G|-6- +D|-5- +A|-3- +E|--- + diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/Csus4b9.prj b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/Csus4b9.prj new file mode 100644 index 0000000..ac90a87 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/Csus4b9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Harmonic Minor\Phrygian Natural 3\Csus4b9.tab +TYPES=(0,4) diff --git a/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/Csus4b9.tab b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/Csus4b9.tab new file mode 100644 index 0000000..7bae482 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Harmonic Minor/Phrygian Natural 3/Csus4b9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-- +B|-8-- +G|-10- +D|-11- +A|-10- +E|-8-- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm11.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm11.prj new file mode 100644 index 0000000..9fcda79 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm11.prj @@ -0,0 +1,5 @@ +WINTABV1.00 +TABLATURE=Cm11.tab +TYPES=(0,4)(1,4) +COMMENT=(0,"Cm11 chord with root on 6th.") +COMMENT=(1,"Cm11 chord with root on 5th.") diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm11.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm11.tab new file mode 100644 index 0000000..732d9b3 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm11.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-6-4- +G|-8-3- +D|-8-3- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7#5.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7#5.prj new file mode 100644 index 0000000..fff10bc --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7#5.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7#5.tab new file mode 100644 index 0000000..b8917bf --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-9-4- +G|-8-3- +D|-8-6- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7.prj new file mode 100644 index 0000000..66d79c9 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7.prj @@ -0,0 +1,6 @@ +WINTABV1.00 +TABLATURE=Cm7.tab +TYPES=(0,4)(1,4)(2,4) +COMMENT=(0,"Cm7 build on 5th string.") +COMMENT=(1,"This is Cm7 with added 5th and root.") +COMMENT=(2,"This is Cm7 as found in Mel Bay fusion book.") diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7.tab new file mode 100644 index 0000000..90ccb70 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3-8---- +B|-4-8--8- +G|-3-8--8- +D|-5-8--8- +A|-3-10--- +E|---8--8- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm9.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm9.prj new file mode 100644 index 0000000..7a594e9 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm9.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm9.tab new file mode 100644 index 0000000..17e98fd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Aeolian/Cm9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-8--3- +G|-8--3- +D|-8--1- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm6.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm6.prj new file mode 100644 index 0000000..9cf493d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm6.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm6.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm6.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm6.tab new file mode 100644 index 0000000..8b8b72e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm6.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-4- +G|-8-2- +D|-7-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm7.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm7.prj new file mode 100644 index 0000000..c45c98b --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm7.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm7.tab new file mode 100644 index 0000000..d08724e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-4- +G|-8-3- +D|-8-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm9.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm9.prj new file mode 100644 index 0000000..7a594e9 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm9.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm9.tab new file mode 100644 index 0000000..17e98fd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-8--3- +G|-8--3- +D|-8--1- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm[6-9].prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm[6-9].prj new file mode 100644 index 0000000..32154d1 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm[6-9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm[6-9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm[6-9].tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm[6-9].tab new file mode 100644 index 0000000..a8bcb7c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Dorian/Cm[6-9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-10-3- +G|-8--2- +D|-10-1- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C6.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C6.prj new file mode 100644 index 0000000..e94f352 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C6.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C6.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C6.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C6.tab new file mode 100644 index 0000000..24abf5a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C6.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-5- +G|-9-2- +D|-7-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM7.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM7.prj new file mode 100644 index 0000000..b9c0933 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CM7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM7.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM7.tab new file mode 100644 index 0000000..66ba9b2 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-5- +G|-9-4- +D|-9-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM9.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM9.prj new file mode 100644 index 0000000..ccdfc93 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CM9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM9.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM9.tab new file mode 100644 index 0000000..6ef3cb2 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/CM9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-3- +G|-7-4- +D|-9-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C[6-9].prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C[6-9].prj new file mode 100644 index 0000000..7f8e572 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C[6-9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C[6-9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C[6-9].tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C[6-9].tab new file mode 100644 index 0000000..8bfad5d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Ionian/C[6-9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-3- +B|-8-3- +G|-7-2- +D|-7-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Cm7b5.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Cm7b5.prj new file mode 100644 index 0000000..9c4b0ee --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Cm7b5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Cm7b5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Cm7b5.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Cm7b5.tab new file mode 100644 index 0000000..1da1702 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Cm7b5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Gb-C.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Gb-C.prj new file mode 100644 index 0000000..9f25c37 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Gb-C.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Gb-C.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Gb-C.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Gb-C.tab new file mode 100644 index 0000000..b955db7 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Locrian/Gb-C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-2- +G|-6-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7.prj new file mode 100644 index 0000000..b9c0933 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CM7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7.tab new file mode 100644 index 0000000..66ba9b2 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-5- +G|-9-4- +D|-9-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7[#11].prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7[#11].prj new file mode 100644 index 0000000..c49d84c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7[#11].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CM7[#11].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7[#11].tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7[#11].tab new file mode 100644 index 0000000..684f9bd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM7[#11].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-5- +G|-9-4- +D|-9-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM9.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM9.prj new file mode 100644 index 0000000..ccdfc93 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=CM9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM9.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM9.tab new file mode 100644 index 0000000..6ef3cb2 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/CM9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-3- +G|-7-4- +D|-9-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/C[6-9 #11].prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/C[6-9 #11].prj new file mode 100644 index 0000000..b00cf41 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/C[6-9 #11].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C[6-9 #11].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/C[6-9 #11].tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/C[6-9 #11].tab new file mode 100644 index 0000000..d912c81 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Lydian/C[6-9 #11].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---2- +B|-7-3- +G|-7-2- +D|-7-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13.prj new file mode 100644 index 0000000..0081e13 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C13.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13.tab new file mode 100644 index 0000000..138a523 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----5- +B|-10-3- +G|-9--3- +D|-8--2- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13sus4.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13sus4.prj new file mode 100644 index 0000000..6a1cd1e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13sus4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C13sus4.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13sus4.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13sus4.tab new file mode 100644 index 0000000..3b385c1 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C13sus4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----5- +B|-10-3- +G|-10-3- +D|-8--3- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7.prj new file mode 100644 index 0000000..9d03f5f --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7.tab new file mode 100644 index 0000000..b52d27a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-5- +G|-9-3- +D|-8-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7sus4.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7sus4.prj new file mode 100644 index 0000000..d4b4011 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7sus4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7sus4.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7sus4.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7sus4.tab new file mode 100644 index 0000000..807a949 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C7sus4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-8--6- +G|-10-3- +D|-8--5- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9.prj new file mode 100644 index 0000000..684f592 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C9.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9.tab new file mode 100644 index 0000000..8ebe66d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-8-3- +G|-7-3- +D|-8-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9sus4.prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9sus4.prj new file mode 100644 index 0000000..17a5c53 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9sus4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C9sus4.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9sus4.tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9sus4.tab new file mode 100644 index 0000000..dc1733d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Mixolydian/C9sus4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-6-3- +G|-7-3- +D|-8-3- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/C7sus4[b9].prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/C7sus4[b9].prj new file mode 100644 index 0000000..dbe6613 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/C7sus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=C7sus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/C7sus4[b9].tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/C7sus4[b9].tab new file mode 100644 index 0000000..e97700c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/C7sus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---1- +B|-6-2- +G|-6-3- +D|-8--- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9,b13].prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9,b13].prj new file mode 100644 index 0000000..1be1f39 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9,b13].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Csus4[b9,b13].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9,b13].tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9,b13].tab new file mode 100644 index 0000000..573095a --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9,b13].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---1- +B|-6-2- +G|-6-1- +D|-6--- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9].prj b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9].prj new file mode 100644 index 0000000..1e1b27c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Csus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9].tab b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9].tab new file mode 100644 index 0000000..a3fefdd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Major Scale Harmony/Phrygian/Csus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8---- +B|-8--6- +G|-10-6- +D|-11-5- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9#5].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9#5].prj new file mode 100644 index 0000000..f7e6647 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9#5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Altered\C7[#9#5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9#5].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9#5].tab new file mode 100644 index 0000000..5c19f81 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9#5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-11-4- +B|-9--4- +G|-9--3- +D|-8--2- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9b5].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9b5].prj new file mode 100644 index 0000000..4141b8e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9b5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Altered\C7[#9b5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9b5].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9b5].tab new file mode 100644 index 0000000..0c61cea --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[#9b5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---2- +B|-7-4- +G|-8-3- +D|-8-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9#5].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9#5].prj new file mode 100644 index 0000000..8ea689e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9#5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Altered\C7[b9#5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9#5].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9#5].tab new file mode 100644 index 0000000..1d840c5 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9#5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9-4- +B|-9-2- +G|-9-3- +D|-8-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9b5].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9b5].prj new file mode 100644 index 0000000..883bbea --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9b5].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Altered\C7[b9b5].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9b5].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9b5].tab new file mode 100644 index 0000000..0c420a8 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Altered/C7[b9b5].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-9-2- +B|-7-2- +G|-9-3- +D|-8-2- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/Cm7b5.prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/Cm7b5.prj new file mode 100644 index 0000000..44f18ab --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/Cm7b5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Locrian Natural 2\Cm7b5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/Cm7b5.tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/Cm7b5.tab new file mode 100644 index 0000000..1da1702 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/Cm7b5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/GbAug-C.prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/GbAug-C.prj new file mode 100644 index 0000000..87d98bf --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/GbAug-C.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Locrian Natural 2\GbAug-C.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/GbAug-C.tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/GbAug-C.tab new file mode 100644 index 0000000..acc38f8 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Locrian Natural 2/GbAug-C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-3- +G|-7-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Augmented/CMaj7#5.prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Augmented/CMaj7#5.prj new file mode 100644 index 0000000..c1b20e6 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Augmented/CMaj7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Lydian Augmented\CMaj7#5.tab +TYPES=(0,4)(1,4)(2,4)(3,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Augmented/CMaj7#5.tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Augmented/CMaj7#5.tab new file mode 100644 index 0000000..c908c2f --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Augmented/CMaj7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---7---4- +B|-9-9-5-5- +G|-9-9-4-4- +D|-9---6--- +A|-----3-3- +E|-8-8----- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C7#11.prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C7#11.prj new file mode 100644 index 0000000..6830459 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C7#11.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Lydian Dominant\C7#11.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C7#11.tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C7#11.tab new file mode 100644 index 0000000..ec99f86 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C7#11.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3- +B|-7-5- +G|-9-3- +D|-8-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C9#11.prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C9#11.prj new file mode 100644 index 0000000..9f7eb48 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C9#11.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Lydian Dominant\C9#11.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C9#11.tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C9#11.tab new file mode 100644 index 0000000..3c219be --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Lydian Dominant/C9#11.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---2- +B|-7-3- +G|-7-3- +D|-8-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm(Maj7).prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm(Maj7).prj new file mode 100644 index 0000000..01987e7 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm(Maj7).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Melodic Minor\Cm(Maj7).tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm(Maj7).tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm(Maj7).tab new file mode 100644 index 0000000..af609a6 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm(Maj7).tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--3- +B|-8--4- +G|-8--4- +D|-9--5- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm6.prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm6.prj new file mode 100644 index 0000000..fa2d2dc --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm6.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Melodic Minor\Cm6.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm6.tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm6.tab new file mode 100644 index 0000000..8b8b72e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm6.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-8-4- +G|-8-2- +D|-7-5- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm9(Maj7).prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm9(Maj7).prj new file mode 100644 index 0000000..2b05af3 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm9(Maj7).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Melodic Minor\Cm9(Maj7).tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm9(Maj7).tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm9(Maj7).tab new file mode 100644 index 0000000..22b669f --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm9(Maj7).tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-8--3- +G|-8--4- +D|-9--1- +A|-10-3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm[6-9].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm[6-9].prj new file mode 100644 index 0000000..f07b722 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm[6-9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Melodic Minor\Cm[6-9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm[6-9].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm[6-9].tab new file mode 100644 index 0000000..a8bcb7c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Melodic Minor/Cm[6-9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10--- +B|-10-3- +G|-8--2- +D|-10-1- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/MixoLydian [b6]/C9sus4[b13].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/MixoLydian [b6]/C9sus4[b13].prj new file mode 100644 index 0000000..7b6b286 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/MixoLydian [b6]/C9sus4[b13].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\MixoLydian [b6]\C9sus4[b13].tab +TYPES=(0,4)(1,4)(2,4)(3,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/MixoLydian [b6]/C9sus4[b13].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/MixoLydian [b6]/C9sus4[b13].tab new file mode 100644 index 0000000..8e52e95 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/MixoLydian [b6]/C9sus4[b13].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|--------4- +B|-6-3----3- +G|-7-1-10-5- +D|-6-3-12-3- +A|---3-11-3- +E|-8---8---- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C13sus4[b9].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C13sus4[b9].prj new file mode 100644 index 0000000..ce009b4 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C13sus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Phrygian[Natural 6]\C13sus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C13sus4[b9].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C13sus4[b9].tab new file mode 100644 index 0000000..bedfa09 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C13sus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---1- +B|-6-2- +G|-6-2- +D|-7--- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C7sus4[b9].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C7sus4[b9].prj new file mode 100644 index 0000000..d83ed40 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C7sus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Phrygian[Natural 6]\C7sus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C7sus4[b9].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C7sus4[b9].tab new file mode 100644 index 0000000..e97700c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/C7sus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---1- +B|-6-2- +G|-6-3- +D|-8--- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/Csus4[b9].prj b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/Csus4[b9].prj new file mode 100644 index 0000000..d5d43d9 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/Csus4[b9].prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\Melodic Minor\Phrygian[Natural 6]\Csus4[b9].tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/Csus4[b9].tab b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/Csus4[b9].tab new file mode 100644 index 0000000..a3fefdd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/Melodic Minor/Phrygian[Natural 6]/Csus4[b9].tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8---- +B|-8--6- +G|-10-6- +D|-11-5- +A|----3- +E|-8---- + diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/ADim7.prj b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/ADim7.prj new file mode 100644 index 0000000..1c091f4 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/ADim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeHalfDiminished\ADim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/ADim7.tab b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/ADim7.tab new file mode 100644 index 0000000..6f0faab --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/ADim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-4-13- +G|-5-11- +D|-4-13- +A|---12- +E|-5---- + diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/CDim7.prj b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/CDim7.prj new file mode 100644 index 0000000..074ec29 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/CDim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeHalfDiminished\CDim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/CDim7.tab b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/CDim7.tab new file mode 100644 index 0000000..7070e6d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/CDim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-4- +G|-8-2- +D|-7-4- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/EbDim7.prj b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/EbDim7.prj new file mode 100644 index 0000000..e281583 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/EbDim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeHalfDiminished\EbDim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/EbDim7.tab b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/EbDim7.tab new file mode 100644 index 0000000..094ccbd --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/EbDim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-10-7- +G|-11-5- +D|-10-7- +A|----6- +E|-11--- + diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/F#Dim7.prj b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/F#Dim7.prj new file mode 100644 index 0000000..901a681 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/F#Dim7.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeHalfDiminished\F#Dim7.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeHalfDiminished/F#Dim7.tab b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/F#Dim7.tab new file mode 100644 index 0000000..aaded7e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeHalfDiminished/F#Dim7.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-1-10- +G|-2-8-- +D|-1-10- +A|---9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Ab7#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/Ab7#5.prj new file mode 100644 index 0000000..f61eea6 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Ab7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\Ab7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Ab7#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/Ab7#5.tab new file mode 100644 index 0000000..a813c69 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Ab7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-5-13- +G|-5-11- +D|-4-14- +A|---11- +E|-4---- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Ab9#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/Ab9#5.prj new file mode 100644 index 0000000..c1810b3 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Ab9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\Ab9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Ab9#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/Ab9#5.tab new file mode 100644 index 0000000..848d5c4 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Ab9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---12- +B|-5-11- +G|-3-11- +D|-4-10- +A|-3-11- +E|-4---- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Bb7#5.PRJ.prj b/guitar/tabs/MelBay/Modes/WholeTone/Bb7#5.PRJ.prj new file mode 100644 index 0000000..ae16e4d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Bb7#5.PRJ.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\Bb7#5.PRJ.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Bb7#5.PRJ.tab b/guitar/tabs/MelBay/Modes/WholeTone/Bb7#5.PRJ.tab new file mode 100644 index 0000000..bfeb408 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Bb7#5.PRJ.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-7-3- +G|-7-1- +D|-6-4- +A|---1- +E|-6--- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Bb9#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/Bb9#5.prj new file mode 100644 index 0000000..04d0806 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Bb9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\Bb9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/Bb9#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/Bb9#5.tab new file mode 100644 index 0000000..83b7f2b --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/Bb9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---14- +B|-7-13- +G|-5-13- +D|-6-12- +A|-5-13- +E|-6---- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/C7#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/C7#5.prj new file mode 100644 index 0000000..a2a25b9 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/C7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\C7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/C7#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/C7#5.tab new file mode 100644 index 0000000..2682b12 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/C7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----- +B|-9-5- +G|-9-3- +D|-8-6- +A|---3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/C9#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/C9#5.prj new file mode 100644 index 0000000..428c884 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/C9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\C9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/C9#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/C9#5.tab new file mode 100644 index 0000000..cbdc3da --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/C9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---4- +B|-9-3- +G|-7-3- +D|-8-2- +A|-7-3- +E|-8--- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/D7#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/D7#5.prj new file mode 100644 index 0000000..d0f4711 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/D7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\D7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/D7#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/D7#5.tab new file mode 100644 index 0000000..73ab50d --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/D7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-11-7- +G|-11-5- +D|-10-8- +A|----5- +E|-10--- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/D9#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/D9#5.prj new file mode 100644 index 0000000..bf0e5fc --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/D9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\D9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/D9#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/D9#5.tab new file mode 100644 index 0000000..0c3e0e3 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/D9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----6- +B|-11-5- +G|-9--5- +D|-10-4- +A|-9--5- +E|-10--- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/E7#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/E7#5.prj new file mode 100644 index 0000000..ed06923 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/E7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\E7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/E7#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/E7#5.tab new file mode 100644 index 0000000..007685e --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/E7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------- +B|-13-9-- +G|-13-7-- +D|-12-10- +A|----7-- +E|-12---- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/E9#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/E9#5.prj new file mode 100644 index 0000000..a9b48ab --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/E9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\E9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/E9#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/E9#5.tab new file mode 100644 index 0000000..8505898 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/E9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----8- +B|-13-7- +G|-11-7- +D|-12-6- +A|-11-7- +E|-12--- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/F#7#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/F#7#5.prj new file mode 100644 index 0000000..55dbee8 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/F#7#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\F#7#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/F#7#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/F#7#5.tab new file mode 100644 index 0000000..7e9bd7c --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/F#7#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|------ +B|-3-11- +G|-3-9-- +D|-2-12- +A|---9-- +E|-2---- + diff --git a/guitar/tabs/MelBay/Modes/WholeTone/F#9#5.prj b/guitar/tabs/MelBay/Modes/WholeTone/F#9#5.prj new file mode 100644 index 0000000..2c26c02 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/F#9#5.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\MelBay\Modes\WholeTone\F#9#5.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/MelBay/Modes/WholeTone/F#9#5.tab b/guitar/tabs/MelBay/Modes/WholeTone/F#9#5.tab new file mode 100644 index 0000000..d7e5635 --- /dev/null +++ b/guitar/tabs/MelBay/Modes/WholeTone/F#9#5.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---10- +B|-3-9-- +G|-1-9-- +D|-2-8-- +A|-1-9-- +E|-2---- + diff --git a/guitar/tabs/Misc/CliffsOfDover.prj b/guitar/tabs/Misc/CliffsOfDover.prj new file mode 100644 index 0000000..31a021d --- /dev/null +++ b/guitar/tabs/Misc/CliffsOfDover.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=e:\work\guitar\ericj.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500)(32,500)(33,500)(34,500)(35,500)(36,500)(37,500)(38,500)(39,500)(40,500)(41,500)(42,500)(43,500)(44,500)(45,500)(46,500)(47,500)(48,500)(49,500)(50,500)(51,500)(52,500)(53,500)(54,500)(55,500)(56,500)(57,500)(58,500)(59,500)(60,500)(61,500)(62,500)(63,500)(64,500)(65,500)(66,500)(67,500)(68,500)(69,500)(70,500)(71,500)(72,500)(73,500)(74,500)(75,500)(76,500)(77,500)(78,500)(79,500)(80,500)(81,500)(82,500)(83,500)(84,500)(85,500)(86,500)(87,500)(88,500)(89,500)(90,500)(91,500)(92,500)(93,500)(94,500)(95,500)(96,500)(97,500)(98,500)(99,500)(100,500)(101,500)(102,500)(103,500)(104,500)(105,500)(106,500)(107,500)(108,500)(109,500)(110,500)(111,500)(112,500)(113,500)(114,500)(115,500)(116,500)(117,500)(118,500)(119,500)(120,500)(121,500)(122,500)(123,500)(124,500)(125,500)(126,500)(127,500)(128,500)(129,500)(130,500)(131,500)(132,500)(133,500)(134,500)(135,500)(136,500)(137,500)(138,500)(139,500)(140,500)(141,500)(142,500)(143,500)(144,500)(145,500)(146,500)(147,500)(148,500)(149,500)(150,500)(151,500)(152,500)(153,500)(154,500)(155,500)(156,500)(157,500)(158,500)(159,500)(160,500)(161,500)(162,500)(163,500)(164,500)(165,500)(166,500)(167,500)(168,500)(169,500)(170,500) diff --git a/guitar/tabs/Misc/Even Flow (Pearl Jam).prj b/guitar/tabs/Misc/Even Flow (Pearl Jam).prj new file mode 100644 index 0000000..f7b1338 --- /dev/null +++ b/guitar/tabs/Misc/Even Flow (Pearl Jam).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Even Flow (Pearl Jam).tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16) diff --git a/guitar/tabs/Misc/Even Flow (Pearl Jam).tab b/guitar/tabs/Misc/Even Flow (Pearl Jam).tab new file mode 100644 index 0000000..fabba29 --- /dev/null +++ b/guitar/tabs/Misc/Even Flow (Pearl Jam).tab @@ -0,0 +1,142 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / p / pearl_jam / even_flow.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# +#[two versions] +Date: Sat, 26 Sep 1992 12:01:08 -0500 +From: RichNut +Subject: Even Flow by Pearl Jam + + + + Even Flow (Pearl Jam) + +riff 1 +---------------------------------------------------------------------- +---------------------------------------------------------------------- +----------7-7-7-7-7-7------7-7-7-7-7-7-7------7-7-7-7-7-7-7----------- +----------7-5-5-5-5-5------7-7-7-7-7-7-7------7-7-7-7-7-7-7----------- +--------5-5-5-5-5-5-5------5-5-5-5-5-5-5------5-5-5-5-5-5-5----------- +----5-8----------------5-8----------------5-8------------------------- + +riff 2 +---------------------------- +---------------------------- +----------------7----------- +----------------7----------- +----5-3-0-3---5-5----------- +------------3--------------- + +riff 1 gets repeated through the verse until right before the chorus where you p +lay riff 2. + +for the chorus there are two choices, you can play the lead, or the rhythm + +rhythm + +----------------------------------------------- +----------------------------------------------- +-7----3--------------------------7-----5------- +-7----3-(let ring)---------------7-----5------- +-5----1--------------------------5-----3------- +----------------------------------------------- +even flow, thoughts arrive .... +(and so on, repeated for each line in the chorus) + +lead +---------------------------------------------------------------------- +---------------------------------------------------------------------- +--12-11---------------------------12-11------------------------------- +--------12-8-(whammy)---------------------12-10-(whammy)-------------- +---------------------------------------------------------------------- +---------------------------------------------------------------------- + even flow thoughts arrive ... +(again repeated until the end part of the chorus) + +either way you have to play this riif in between phrases of the chorus +---------------------------------------------------------------------- +---------------------------------------------------------------------- +---------------------------------------------------------------------- +---------------------------------------------------------------------- +--3-3-3-3-3-3-3-3-3-3-3-3/5-5----------------------------------------- +---------------------------------------------------------------------- +and this riff at the end. +---------------------------------------------------------------------- +---------------------------------------------------------------------- +--7----5-------5----7-------7----5------------------------------------ +--7----5-------5----7-------7----5------------------------------------ +--5----3-------7----5-------5----3-----3-3-3-3-3/5-5-5-5-5-5-5\3-0---- +---------------------------------------------------------------------- +life again life ....(when appropriate, repeat a few +(or whatever the lyrics are) times) + +then the imfamous interlude where everything quiets down +---------------------------------------------------------------------- +---------------5------------------------------------------------------ +-------5-----5---7p5-------------------------------------------------- +--/5-7---5-7---------------------------------------------------------- +---------------------------------------------------------------------- +---------------------------------------------------------------------- + repeated when necessary + p=pulloff + / slide up +\ slide down + +the solo is based on this scale +---------------------------------10-13------------------------------------ +----------------------------10-13----------------------------------------- +----------------------10-12----------------------------------------------- +----------------10-12----------------------------------------------------- +----------10-12----------------------------------------------------------- +----10-13----------------------------------------------------------------- + +I dont know what key that is + +any quetions or complaints? + + RichNut@uiuc.edu + +...enjoy + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Misc/LaVilla.prj b/guitar/tabs/Misc/LaVilla.prj new file mode 100644 index 0000000..f08761c --- /dev/null +++ b/guitar/tabs/Misc/LaVilla.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=d:\work\guitar\LaVilla2.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500)(32,500)(33,500)(34,500)(35,500)(36,500)(37,500)(38,500)(39,500)(40,500)(41,500)(42,500)(43,500)(44,500)(45,500)(46,500)(47,500)(48,500)(49,500)(50,500)(51,500)(52,500)(53,500)(54,500)(55,500)(56,500)(57,500)(58,500)(59,500)(60,500)(61,500)(62,500)(63,500)(64,500) diff --git a/guitar/tabs/Misc/LaVilla.tab b/guitar/tabs/Misc/LaVilla.tab new file mode 100644 index 0000000..41190fe --- /dev/null +++ b/guitar/tabs/Misc/LaVilla.tab @@ -0,0 +1,32 @@ + + + +e:-----2--|-5------|-2------|-5~------|-2------|-5------|-2--0---| +B:--------|-----4--|----5---|------4--|----5---|-5---4--|-4--5---| +G:--------|--------|----4---|---------|----4---|-----4--|----4---| +D:--------|--------|----2---|---------|----2---|--------|----2---| +A:--------|--------|----2---|---------|----2---|--------|----2---| +E:--------|--------|--------|---------|--------|--------|----0---| + + (faster) +e:-0---0-1p0---0-3p1p0-0-------------------------------------| +B:---3-------3---------0-3-1p0-0h1-3p1p0---------------------| +G:---------------------------------------2-[0]h2-2-2-1-2-4p2-| +D:-----------------------------------------------------------| +A:-----------------------------------------------------------| +E:-----------------------------------------------------------| + +e:-----------------------------------------------| +B:-----------------------------------------------| +G:-----------------------------------------------| +D:-3-3-0-0-3-3-5-5-------------------0-----------| +A:-----------------0-0-3-3-2-0-2-3-3---3p2-2-----| +E:-------------------------------------------3-3-| + + F +e:-1~~------------------|--------| +B:-1~~------------------|--------| +G:-2~~------------------|--------| +D:-3~~------------------|--------| +A:-3~~------------------|--------| +E:-1~~------------------|--------| diff --git a/guitar/tabs/Misc/LaVilla2.tab b/guitar/tabs/Misc/LaVilla2.tab new file mode 100644 index 0000000..d55ccf5 --- /dev/null +++ b/guitar/tabs/Misc/LaVilla2.tab @@ -0,0 +1,41 @@ + + + +e:-----2--|-5------|-2------|-5~------|-2------|-5------|-2--0---| +B:--------|-----4--|----5---|------4--|----5---|-5---4--|-4--5---| +G:--------|--------|----4---|---------|----4---|-----4--|----4---| +D:--------|--------|----2---|---------|----2---|--------|----2---| +A:--------|--------|----2---|---------|----2---|--------|----2---| +E:--------|--------|--------|---------|--------|--------|----0---| + + (faster) +e:-0---0-1p0---0-3p1p0-0-------------------------------------| +B:---3-------3---------0-3-1p0-0h1-3p1p0---------------------| +G:---------------------------------------2-[0]h2-2-2-1-2-4p2-| +D:-----------------------------------------------------------| +A:-----------------------------------------------------------| +E:-----------------------------------------------------------| + +e:-----------------------------------------------| +B:-----------------------------------------------| +G:-----------------------------------------------| +D:-3-3-0-0-3-3-5-5-------------------0-----------| +A:-----------------0-0-3-3-2-0-2-3-3---3p2-2-----| +E:-------------------------------------------3-3-| + + F +e:-1~~------------------|-(1)----| +B:-1~~------------------|-(1)----| +G:-2~~------------------|-(2)----| +D:-3~~------------------|-(3)----| +A:-3~~------------------|-(3)----| +E:-1~~------------------|-(1)----| + | | | + | | | + | C9 | | +e:----------8~----------|--------| +B:-------------8~-------|--------| +G:-------------------0--|---%----| +D:-------0--------0-----|--------| +A:----7-----------------|--------| +E:-8--------------------|--------| diff --git a/guitar/tabs/Misc/LaVilla3.prj b/guitar/tabs/Misc/LaVilla3.prj new file mode 100644 index 0000000..afbdbf4 --- /dev/null +++ b/guitar/tabs/Misc/LaVilla3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=e:\work\guitar\LaVilla.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,1000)(5,750)(6,500)(7,500)(8,1000)(9,750)(10,750)(11,750)(12,750)(13,100)(14,100)(15,100)(16,100)(17,100)(18,100)(19,100)(20,100)(21,100)(22,100)(23,100)(24,100)(25,100)(26,100)(27,100)(28,100)(29,100)(30,100)(31,100)(32,100)(33,100)(34,100)(35,100)(36,100)(37,100)(38,100)(39,100)(40,100)(41,100)(42,100)(43,100)(44,100)(45,100)(46,100)(47,100)(48,100)(49,100)(50,100)(51,100)(52,100)(53,100)(54,100)(55,100)(56,100)(57,100)(58,100)(59,100)(60,100)(61,100)(62,100)(63,100)(64,1500) diff --git a/guitar/tabs/Misc/LaVillaSolo1.tab b/guitar/tabs/Misc/LaVillaSolo1.tab new file mode 100644 index 0000000..4db03f3 --- /dev/null +++ b/guitar/tabs/Misc/LaVillaSolo1.tab @@ -0,0 +1,149 @@ + (F) (Am) +e:--------|----------|---------|----------| +B:--------|----------|-12r10~~-|-(10)-----| +G:-9r7~~--|-(7)------|---------|----------| +D:--------|----------|---------|----------| +A:--------|----------|---------|----------| +E:--------|----------|---------|----------| + +(All of these are volume swells) + (F) (Am) +e:------------------|-----------|--------------10-8-7-|----8-7----------| +B:-6-8-5-----5------|-----------|---------10-8--------|-10-----10-8-10~-| +G:-------7-5---7-4~-|-(4)---7-5-|---------------------|-----------------| +D:------------------|-----------|-7-(7)~--------------|-----------------| +A:------------------|-----------|---------------------|-----------------| +E:------------------|-----------|---------------------|-----------------| + + (F) +e:-----------------------------------|----------| +B:-----------------------------------|----------| +G:---5-7-7b9r7p5-7p5---5-7-7b9-7-5s9-|-(9)~-----| +D:-7-----------------7---------------|----------| +A:-----------------------------------|----------| +E:-----------------------------------|----------| + + (Am) +e:-8r7-7-5---5---------------|---------------------| +B:---------8---8-5-----8-5---|---8-5---------------| +G:-----------------7-5-----7-|-5-----7-5-4-5-4-----| +D:---------------------------|-----------------7~--| +A:---------------------------|---------------------| +E:---------------------------|---------------------| + + (F) +e:---------7-7-7-7-7-------------|-------13-13-12-15-13-12----12-| +B:---10-10-----------8-8-10------|-------------------------15----| +G:-9------------------------9-9~-|-(9)~--------------------------| +D:-------------------------------|-------------------------------| +A:-------------------------------|-------------------------------| +E:-------------------------------|-------------------------------| + + (Am) +e:------------------12-12-12-12----|--------------------| +B:-15-13-12-15-13~--------------15-|-12-13--------------| +G:---------------------------------|-------12~~h14~-----| +D:---------------------------------|--------------------| +A:---------------------------------|--------------------| +E:---------------------------------|--------------------| + + (F) +e:---------------------------------------|--------17b19~-| +B:-15b17~~-15b17r15-15-13-12-13p12----12-|---------------| +G:---------------------------------14----|-14~-----------| +D:---------------------------------------|---------------| +A:---------------------------------------|---------------| +E:---------------------------------------|---------------| + + (Am) +e:-----17b19~-12-13-15-12h13p12----|-12--------------------------------------| +B:------------------------------15-|----15b17~~~-15b17r15-[15]-12-13-12----12| +G:---------------------------------|------------------------------------14---| +D:---------------------------------|-----------------------------------------| +A:---------------------------------|-----------------------------------------| +E:---------------------------------|-----------------------------------------| + + (F) +e:-------------------------------|--------------------| +B:-------------------------------|--------------------| +G:-14-12-14b16-14b16-14~-14b16~~-|----------5-7-7b9r7-| +D:-------------------------------|--------7-----------| +A:-------------------------------|--------------------| +E:-------------------------------|--------------------| + + (Am) +e:-------------------------|-----------------------------------| +B:-------------------------|-----------------------------------| +G:-7-5-4-5-4~--0-4-5-4-2-4-|-2h4p2p0-2---0-0-0------x-12b14~---| +D:-------------------------|-----------------------------------| +A:-------------------------|-----------X\------X\--------------| +E:-------------------------|-----------X\------X\--------------| + + (F) +e:-------------------------------------------| +B:-------------------------------------------| +G:-12b14-12b14-12b14-12b14-12b14-12b13-12b14-| +D:-------------------------------------------| +A:-------------------------------------------| +E:-------------------------------------------| + + (faster) +e:-------------------------------------------------------------| +B:---------------------------------------8-8-8-8-8-8-10-10p8---| +G:-12-10-9h10p9----9------------7s9-9-9----------------------9-| +D:--------------12---12~--(12)---------------------------------| +A:-------------------------------------------------------------| +E:-------------------------------------------------------------| + + (Am) +e:-------------------------------------------------------------| +B:----------------------------------------------10-11p10-12p10-| +G:-12p9-10p9----9----------------9h10p9-10-9-11----------------| +D:-----------12---12p10----10-12-------------------------------| +A:----------------------12-------------------------------------| +E:-------------------------------------------------------------| + +e:----------------------------------------------| +B:-13-13-12-10----13------------10-12-12-13-12--| +G:-------------12----12-9--9s11-----------------| +D:----------------------------------------------| +A:----------------------------------------------| +E:----------------------------------------------| + +e:----------------------12-12-12----12-13-13-13-12-13-15-15-15--| +B:-12-13-13-15-15-13-15----------15-----------------------------| +G:--------------------------------------------------------------| +D:--------------------------------------------------------------| +A:--------------------------------------------------------------| +E:--------------------------------------------------------------| + + (F) +e:-13-15-17-17-17b19-17b19~-|-17b19-17b19~-17-12h13p12----13----------| +B:--------------------------|--------------------------15----15-13p12-| +G:--------------------------|-----------------------------------------| +D:--------------------------|-----------------------------------------| +A:--------------------------|-----------------------------------------| +E:--------------------------|-----------------------------------------| + +e:-------------------------------------------------| +B:----12------------5-5-5-5-6-8-6p5---5------------| +G:-14----14---(14)\-----------------7---7-5-4-5~-4-| +D:-------------------------------------------------| +A:-------------------------------------------------| +E:-------------------------------------------------| + + (Am) (faster) +e:---------------------5-7p5-7-8-8p7p5---5---------------------------------| +B:-----5-6p5---5-7-8-8-----------------8---8-8-5-6p5---5-5-5-6-8-5---------| +G:-6-7-------7---------------------------------------7-------------7p0-7-5-| +D:-------------------------------------------------------------------------| +A:-------------------------------------------------------------------------| +E:-------------------------------------------------------------------------| + +e:--------------------------------------------------------------------| +B:--------------------------------------------------------------------| +G:-4h5p4---7-------------------------------0--------------------------| +D:-------7---7-7-5-3-3-3-3p2-----------------0h3p2---3-3p2-3-2--------| +A:---------------------------3-3-2-2-0-2-3---------3-----------3------| +E:---------------------------------------------------------------0s8--| + diff --git a/guitar/tabs/Misc/Midnight.tab b/guitar/tabs/Misc/Midnight.tab new file mode 100644 index 0000000..29af7ab --- /dev/null +++ b/guitar/tabs/Misc/Midnight.tab @@ -0,0 +1,579 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# +# +From: Dennis Hussey +Subject: TAB:by + + Transcribed by Dennis Hussey. Feel free to leave any comments, +corrections, or complaints at + hussey@ceatlabs.okstate.edu + This is the final track of Joe Satriani's 'Surfing with an Alien' +entitled Midnight. It would definitely help to have a copy of the song to +play along with, as the Satch changes his tempo and intensity throughout the +song. + Satriani played this song by fretboard tapping with both hands. +Some people suggest using a damper or handkerchief to prevent accidental +pull-off noise, but I've found with careful muting this problem can be +avoided. I like the sound best with a fairly strong reverb, and setting the +chorus rate rather slow, and adding high depth. I don't have any other +effects, but a delay could add an interesting flavor to the song. The +notation is standard tablature, with the numbers above the tab indicating +which fingers to tap the strings. The intro is a series of +quadruplets in group in standard 4/4 time. Satch varies the tempo a bit, so +allow a little flexibility. Make sure to hold the note down until the next +note is struck, where the initial note is then released. This will take +some practice. + The body of the song taps chords in an odd time. I've found it is +best to listen to the song, and try to isolate the beat of the taps. Again +remember to hold the tapped notes until the next chord is ready to be +struck. You can practice the rhythm by drumming your hands in your spare +time. I am not familiar with drummer notation but the rhythm could be written as + + 1/16 1/16 1/8 1/16 1/16 1/8 1/16 1/16 1/8 1/16 1/16 1/8 1/16 +1/16 1/8 1/16 1/16 1/8 + +where the fractions are eighth notes and sixteenth notes. I've also tried +to help by spacing the chords appropriately. + + The outro is similar to the intro, but becomes more difficult with a +wicked ascending tempo towards the the exiting measures. + + Have fun and eat your Wheaties before starting. You'll need 'em. + + + +All notes are tapped with fingers. +Fingering notation: L1 = left index R1 = right index + L4 = left pinky R4 = right pinky + + + + L1 L3 R2 R1 Repeat three times L1 L2 R2 R1 Repeat +three times + +[------------------------------------------------------------------------------] +[------------12---------------------------------------------14-----------------] +[------------------------------------------------------------------------------] +[------------------12------------------------------10------------14------------] +[-------9-------------------------------------9--------------------------------] +[--7---------------------------------------------------------------------------] + + + L1 L3 R2 R1 Repeat three times L1 L2 R2 R1 + Repeat ONE time + +[------------------------------------------------------------------------------] +[------------12-------------------------------------------14-------------------] +[------------------------------------------------------------------------------] +[------------------12------------------------------10------------14------------] +[-------9-------------------------------------9--------------------------------] +[--7---------------------------------------------------------------------------] + + + + L1 L2 R2 R1 Repeat ONE time L1 L3 R2 R1 + Repeat three times + +[---------------14-------------------------------------------------------------] +[---------------------------------------------------------12-------------------] +[---------------------14-------------------------------------------------------] +[--------10------------------------------------------------------12------------] +[---9-----------------------------------------------9--------------------------] +[----------------------------------------------7-------------------------------] + + + L1 L3 R2 R1 Repeat three times L1 L2 R2 R1 + Repeat three times + +[---------------12-------------------------------------------------------------] +[---------------------------------------------------------12-------------------] +[---------------------12-----------------------------9-------------------------] +[--------9------------------------------------------------------12-------------] +[---7-------------------------------------------9------------------------------] +[------------------------------------------------------------------------------] + + L1 L3 R2 R1 Repeat once L1 + +[------------------------------------------------------------------------------] +[---------------11-------------------------------------------------------------] +[--------9---------------------------------------------------------------------] +[---------------------11-------------------------------------------------------] +[---9-------------------------------------------9------------------------------] +[------------------------------------------------------------------------------] + + + L1 L3 R2 R1 Repeat three times L1 L2 R2 R1 + Repeat three times + +[------------------------------------------------------------------------------] +[------------12---------------------------------------------14-----------------] +[------------------------------------------------------------------------------] +[------------------12------------------------------10------------14------------] +[-------9-------------------------------------9--------------------------------] +[--7---------------------------------------------------------------------------] + + + + L1 L3 R2 R1 Repeat three times L1 L2 R2 R1 + Repeat ONE time + +[---------------------------------------------------------14-------------------] +[------------12----------------------------------------------------------------] +[------------------------------------------------------------------14----------] +[------------------12------------------------------10--------------------------] +[-------9-------------------------------------9--------------------------------] +[--7---------------------------------------------------------------------------] + + + + L1 L3 R2 R1 Repeat once L1 L2 R2 R1 + Repeat three time + +[------------12----------------------------------------------------------------] +[---------------------------------------------------12-------------------------] +[------------------12----------------------------------------------------------] +[------10--------------------------------------------------12------------------] +[--9----------------------------------------9----------------------------------] +[---------------------------------------7--------------------------------------] + + + + L1 L3 R2 R1 Repeat three times L1 L2 R2 R1 + Repeat three times + +[---------------12-------------------------------------------------------------] +[---------------------------------------------------------12-------------------] +[---------------------12-----------------------------9-------------------------] +[--------9-------------------------------------------------------12------------] +[---7-------------------------------------------9------------------------------] +[------------------------------------------------------------------------------] + + + + L1 L3 R2 R1 Repeat once L1 + +[------------------------------------------------------------------------------] +[---------------11-------------------------------------------------------------] +[--------9---------------------------------------------------------------------] +[---------------------11-------------------------------------------------------] +[---9-------------------------------------------9------------------------------] +[------------------------------------------------------------------------------] + + + +End intro, +Begin body. Start guitar and background clap simultaneously + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------17----------------17---------17---------------------------------------] +[--4------------4----------------4---------------------------------------------] +[--------17----------------17---------17---------------------------------------] +[--2------------2----------------2---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------16----------------16---------16---------------------------------------] +[--4------------4----------------4---------------------------------------------] +[--------16----------------16---------16---------------------------------------] +[--2------------2----------------2---------------------------------------------] +[------------------------------------------------------------------------------] + + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------17----------------17---------17---------------------------------------] +[--4------------4----------------4---------------------------------------------] +[--------17----------------17---------17---------------------------------------] +[--2------------2----------------2---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------16----------------16---------16---------------------------------------] +[--4------------4----------------4---------------------------------------------] +[--------16----------------16---------16---------------------------------------] +[--2------------2----------------2---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------20----------------20---------20---------------------------------------] +[--7------------7----------------7---------------------------------------------] +[--------20----------------20---------20---------------------------------------] +[--5------------5----------------5---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------19----------------19---------19---------------------------------------] +[--7------------7----------------7---------------------------------------------] +[--------19----------------19---------19---------------------------------------] +[--5------------5----------------5---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------20----------------20---------20---------------------------------------] +[--7------------7----------------7---------------------------------------------] +[--------20----------------20---------20---------------------------------------] +[--5------------5----------------5---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------19----------------19---------19---------------------------------------] +[--7------------7----------------7---------------------------------------------] +[--------19----------------19---------19---------------------------------------] +[--5------------5----------------5---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[--------17----------------17---------17---------------------------------------] +[------------------------------------------------------------------------------] +[--9-----17-----9----------17----9----17---------------------------------------] +[------------------------------------------------------------------------------] +[--7------------7----------------7---------------------------------------------] +[------------------------------------------------------------------------------] + + +***Tricky part + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[--------15----------------15---------15---------------------------------------] +[------------------------------------------------------------------------------] +[--9-----16-----9----------16----9----16---------------------------------------] +[------------------------------------------------------------------------------] +[--7------------7----------------7---------------------------------------------] +[------------------------------------------------------------------------------] + + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[--------17----------------17---------17---------------------------------------] +[------------------------------------------------------------------------------] +[--9-----17-----9----------17----9----17---------------------------------------] +[------------------------------------------------------------------------------] +[--7------------7----------------7---------------------------------------------] +[------------------------------------------------------------------------------] + + +***Tricky part + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[--------15----------------15---------15---------------------------------------] +[------------------------------------------------------------------------------] +[--9-----16-----9----------16----9----16---------------------------------------] +[------------------------------------------------------------------------------] +[--7------------7----------------7---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[--------20----------------20---------20---------------------------------------] +[------------------------------------------------------------------------------] +[--11----20-----11---------20----11---20---------------------------------------] +[------------------------------------------------------------------------------] +[--9------------9----------------9---------------------------------------------] +[------------------------------------------------------------------------------] + + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[--------22----------------22---------22---------------------------------------] +[------------------------------------------------------------------------------] +[--11----22-----11---------22----11---22---------------------------------------] +[------------------------------------------------------------------------------] +[--9------------9----------------9---------------------------------------------] +[------------------------------------------------------------------------------] + + + + + L3 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat THREE times +[--------19----------------19---------19---------------------------------------] +[------------------------------------------------------------------------------] +[--11----19-----11---------19----11---19---------------------------------------] +[------------------------------------------------------------------------------] +[--9------------9----------------9---------------------------------------------] +[------------------------------------------------------------------------------] + + +End clapping rhythm + + L2 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--11-----------11--------------11---------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--10-----------10--------------10---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------14----------------14---------14---------------------------------------] +[--11-----------11--------------11---------------------------------------------] +[--------14----------------14---------14---------------------------------------] +[--10-----------10--------------10---------------------------------------------] +[------------------------------------------------------------------------------] + + +***Tricky part + + L2 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------15----------------15---------15---------------------------------------] +[--11-----------11--------------11---------------------------------------------] +[--------16----------------16---------16---------------------------------------] +[--10-----------10--------------10---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------17----------------17---------17---------------------------------------] +[--11-----------11--------------11---------------------------------------------] +[--------17----------------17---------17---------------------------------------] +[--10-----------10--------------10---------------------------------------------] +[------------------------------------------------------------------------------] + + + + + + L2 R2 L2 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L2 R2 L2 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[------------------------------------------------------------------------------] +[--8------------8---------------8----------------------------------------------] + + + + + L2 R2 L2 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L2 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--7------------7---------------7----------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--7------------7---------------7----------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L2 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L3 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--11-----------11--------------11---------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--10-----------10--------------10---------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L2 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat one time +[------------------------------------------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[--------12----------------12---------12---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[------------------------------------------------------------------------------] + + + + L2 R2 L2 R2 L3 R2 + L1 R1 L1 R1 L1 R1 Repeat three times while +slowing the tempo gradually +[------------------------------------------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[--------11----------------11---------11---------------------------------------] +[--9------------9---------------9----------------------------------------------] +[------------------------------------------------------------------------------] + + + + + +Outro, return to single note tapping. + + +[----------------------------------------------------------12------------------] +[-------------12----------------------14---------------------------------------] +[---------------------------------------------------------------12---------9---] +[------------------12-----------9----------14-----------9----------------------] +[-------9------------------8----------------------7--------------------9-------] +[--7---------------------------------------------------------------------------] + + + + +[------------------------------------------------------------------------------] +[-----------11-------------------12---------------------14------------------12-] +[-------9----------------------------------------------------------------------] +[----------------11---------7---------12----------9----------14----------------] +[---9------------------7---------------------8-------------------------9-------] +[------------------------------------------------------------------7-----------] + + + Repeat previous two measures four times, increasing tempo with each repeat. + + +Cadenza + + Repeat three times +[------------12-------------------12-------------------------------------------] +[------------------------------------------------------------------------------] +[-----------------12-------------------12--------------------------------------] +[------------------------------------------------------------------------------] +[-------8--------------------8-------------------------------------------------] +[---7-------------------7------------------------------------------------------] + + + + + Repeat three times +[------------11-------------------11-------------------------------------------] +[------------------------------------------------------------------------------] +[-----------------11-------------------11--------------------------------------] +[------------------------------------------------------------------------------] +[-------9--------------------9-------------------------------------------------] +[---7-------------------7------------------------------------------------------] + + + + + + Repeat one time +[------------12-------------------12-------------------------------------------] +[------------------------------------------------------------------------------] +[-----------------12-------------------12--------------------------------------] +[------------------------------------------------------------------------------] +[-------8--------------------8-------------------------------------------------] +[---7-------------------7------------------------------------------------------] + + + DO NOT REPEAT +[------------15-------------------15-------------------------------------------] +[------------------------------------------------------------------------------] +[-----------------15-------------------15--------------------------------------] +[------------------------------------------------------------------------------] +[-------8--------------------8-------------------------------------------------] +[---7-------------------7------------------------------------------------------] + + + + DO NOT REPEAT +[------------12-------------------12-------------------------------------------] +[------------------------------------------------------------------------------] +[-----------------12-------------------12--------------------------------------] +[------------------------------------------------------------------------------] +[-------8--------------------8-------------------------------------------------] +[---7-------------------7------------------------------------------------------] + + + + + + Repeat 2 1/2 times +[------------11-------------------11-------------------------------------------] +[------------------------------------------------------------------------------] +[-----------------11-------------------11--------------------------------------] +[------------------------------------------------------------------------------] +[-------9--------------------9-------------------------------------------------] +[---7-------------------7------------------------------------------------------] + + + +Merry Christmas + +Dennis Hussey +21 Dec 1995 + +Revised February 1, 1996 by Dennis Hussey +........................................................................... +You don't have to fear defeat if you believe it may reveal powers that you +didn't know you possessed. -Napoleon Hill + + + diff --git a/guitar/tabs/Misc/Pink Floyd - comfortably numb.tab b/guitar/tabs/Misc/Pink Floyd - comfortably numb.tab new file mode 100644 index 0000000..57a3433 --- /dev/null +++ b/guitar/tabs/Misc/Pink Floyd - comfortably numb.tab @@ -0,0 +1,235 @@ +COMFORTABLY NUMB +Pink Floyd + + +Bm A + Hello, Is there any body in there? + G D/F# Em Bm +Just nod if you can hear me, is there anyone at home? +A +Come on, now, I hear your feeling down, + G D/F# Em Bm +well, I can ease your pain, get you on your feet again. + A G D/F# Em +relax, I need soem information, first, just the basic facts, + Bm +Can you show me where it hurts + +D A +There is no pain you are receding, +D A G/B +A distant ships smoke, on the horizon, +C G +You are only coming through in waves, +C G +Your lips move, but I can't hear what your saying, + D A +When I was a child, I had a fever, + D A G/B +my hands felt just like, two ballons, +C G +Now I've got that feeling once again, +G C +I can't explain, you would not understand, + G +This is not how I am, +A G/B C G D +I______________________ have become, comforatbly numb. + + +SOLO 1: +e-|---14vvvvvv-----12-14>15>14------------------------------------------------| +B-|------------------------------15>17vvvvvvvvvv>15--15-14--------------------| +G-|---------------------------------------------------------14----------------| +D-|-------------------------------------------------------------14\12vvvvvv---| +A-|---------------------------------------------------------------------------| +E-|---------------------------------------------------------------------------| + +e-|--14>12--14>(15)>14--------------------------------------------------------| +B-|-----------------------15>17---------15--14--------------------------------| +G-|---------------------------------------------14------------------/12vvvvvv-| +D-|-------------------------------------------------14\12--11--9--7-----------| +A-|---------------------------------------------------------------------------| +E-|---------------------------------------------------------------------------| + +e-|---------------------------------------------------------------| +B-|---------------------------------------------------------------| +G-|---11--------------11\9---9\7vvvvv----9>7------7---9---11>12---| +D-|----------14--12----------------------------9------------------| +A-|---------------------------------------------------------------| +E-|---------------------------------------------------------------| + +e-|---15-14-12---------------------------------------------------| +B-|------------15-12---------------------------------------------| +G-|------------------12------------------------------------------| +D-|---------------------12vvvvvvvv--10\9vvvvvvv---10\9\7vvvvv----| +A-|--------------------------------------------------------------| +E-|--------------------------------------------------------------| + + v-- strike note +e-|-----------------------------------------------------------| +B-|-----------------------------------------------------------| +G-|-11>(12)vvvvvvvv--9>(11)===(11)==>9>7----------------------| +D-|---------------------------------------7/9\7vvvvvvvvvvv\---| +A-|-----------------------------------------------------------| +E-|-----------------------------------------------------------| + + +Bm A G D/F# Em +O.K., just a little pin prick, there'll be no more (scream), + Bm +But you may feel a little sick. Can you stand up? + A G D/F# Em +I do believe it's working, good. That'll keep you going throught the show, +Bm +C'mon it's time to go + +D A +There is no pain you are receding, +D A G/B +A distant ships smoke on the horizon, +C G +You are only coming through in waves, + C G +Your lips move, but I can't hear what your saying, + D A +When I was a child, I caught a fleeting glimpse, +D A G/B +Out of the corner of my eye, +C G +I turned to look, but it was gone, + C +I can not put my finger on it now, + G +The child is grown, the dream is gone, +A G/B C G D +and I___________________, have become comfortably numb. + + +OUTRO SOLO: +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|--7--9--9>(11)vvvvvv--9>(11)>9>7---7--9--9--7-------7vvvvvvv---| +|---------------------------------9-------------9--9------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| + +|-------------------------------------------10------------------------------| +|--------10------10--12--12>(15)>12>10--12----------------------------------| +|---/11------11---------------------------------------7--9--9>(10)>9>7------| +|----------------------------------------------------------------------9vvvv| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + +|--------------------------------------------------------------------------| +|----10>7-------7----------------------------------------------------------| +|-----------9-------9---7-------------------------------7------------------| +|--------------------------9vvvvvvvvvv--------7---7--9-----9>7---9vvvvvv---| +|-----------------------------------------/9-------------------------------| +|--------------------------------------------------------------------------| + +|--9--9>(10)----7-------7---------------------------| +|-------------------10-----10>(12)vvv----10>7-------| +|-----------------------------------------------9---| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| + +|-------7--------------------------------------------------------| +|--7--7---10>7---------------------------------------------------| +|--------------9>(11)>9>7---9-7----------------------------------| +|-------------------------9-----9-7------------------------------| +|-----------------------------------9-8-7-5---5vvvvvvvvvvvvvv----| +|-------------------------------------------7--------------------| + +|--------------------------7-------------------------------------------------| +|------------------------7---10>7--------------------------------------------| +|--7-7-7vvvvvvv---9>(11)----------9>(11)>9>7---9-7---------------------------| +|--------------------------------------------9-----9>7-----------------------| +|------------------------------------------------------9\7-5-7>5---5--7-7/9--| +|----------------------------------------------------------------7-----------| + +|----------------------------7----------------------------7-----------------| +|--------------------------7---10--------7--------------7---10>7------------| +|-------------7---7-9>(11)--------9>(11)---7--9--9>(11)----------9>(11)>9>7-| +|--7-7-7--9>7---9-----------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + +|----------------------------------------------------------------------------| +|---------------------------7--------------7-7-7------------------7-7-7------| +|----9-7--------------------7--------------7-7-7------------------7-7-7------| +|--9-----9-7----------------7--9vvvvvvv----7-7-7--"9"vvvvvvvvvv---7-7-7--9vvv| +|------------9-8-7-5---5>0---------------------------------------------------| +|--------------------7-------------------------------------------------------| + +|---------------------------------------------7------------------------| +|--7---------------------------------------------10>7--10>(12)====>10--| +|--7----9>(11)>9>7-----7--9--9>(11)vvvvvvvv----------------------------| +|-----7-------------9--------------------------------------------------| +|----------------------------------------------------------------------| +|----------------------------------------------------------------------| + +|----------7-------------------------------------------------------| +|--------7---10>7--------------------------------------------------| +|-9>(11)----------9>(11)>9>7-9>7---7---------------------------7---| +|--------------------------------9---9>7-9>7---7------------9--7---| +|--------------------------------------------9---9-8-7-------------| +|------------------------------------------------------10-7--------| + +|-----------------------------------------------------------------------| +|----------7-----7>(8)>7--------------------------7-----------------7---| +|--------7-7-----7>(8)>7-----------------7>9>7----7-----------------7---| +|--9-7-9---7-----7>(8)>7-7vvvvvv-7>9------------9---9>7-----7-9>7>9-----| +|--------------------------------------------------------9--------------| +|-----------------------------------------------------------------------| + +|-----------------------------------7-----17-17-17>(19)vvv--17-19-21-21>(22)vv| +|-------7---7---7--7------7---7--7--7-----------------------------------------| +|-9>7---7---7---7--7----7-7---7--7--7-----------------------------------------| +|-----9-----7-----------------------7-----------------------------------------| +|-----------------------------------------------------------------------------| +|-----------------------------------------------------------------------------| + +|--21>(22)vvv-21-21>(22)>21--21>(22)-21>(22)-21>(22)>21--19>21>19-19-19\---| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + +|-----------------------------------------------------------------------------| +|-17-17-17--17>(19)>17>15----17-17-17vvvvvv---15--17-17>(18)>17>15vvv---------| +|-------------------------16-----------------------------------------16-16-16-| +|-----------------------------------------------------------------------------| +|-----------------------------------------------------------------------------| +|-----------------------------------------------------------------------------| + +|----------------------------10---------10----12-12>(13)-10-12-------12--| +|--------------------10>(12)----10>(12)----10------------------12-12-----| +|--14-16vvv--------------------------------------------------------------| +|-----------14-12--------------------------------------------------------| +|-----------------14-----------------------------------------------------| +|------------------------------------------------------------------------| + +|-------------------------------------------------------------| +|-12>(15)>12--12-10---------------------------------------7---| +|-------------------9>(11)>9>0--9>7---7-9>7---------------7---| +|-----------------------------------9-------9-7---------------| +|-----------------------------------------------9-8-7-5-------| +|-------------------------------------------------------------| + +|-----------------------------------7--7--7--7---7---7---7--7-7--7---7--7--| +|---7--7--7--7--7-----7---7---7--7--7--7--7--7---7---7---7--7-7--7---7--7--| +|---7--7--7--7--7-----7---7---7--7-----------------------------------------| +|-------------------9---9---9----------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + +|---7-----------------------------------------------|| +|------10-------------------------------------------|| +|----------9>(11)-9--7------------------------------|| +|----------------------9-9-9-7----7-7>9-9>7-9vvvvv--|| +|---------------------------------------------------|| +|---------------------------------------------------|| + diff --git a/guitar/tabs/Misc/Stray Cats - Rock This Town.tab b/guitar/tabs/Misc/Stray Cats - Rock This Town.tab new file mode 100644 index 0000000..af66b91 --- /dev/null +++ b/guitar/tabs/Misc/Stray Cats - Rock This Town.tab @@ -0,0 +1,78 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + +Stray Cats + +Rock This Town + +by Brian S. + +Intro : +e--2~~--2-2-2-2--2--2--2-2-2-2-2-2-2-2---------------| +b--3~~--3-3-3-3--3--3--3-3-3-3-3-3-3-3---------------| +g--2~~--2-2-2-2--2--2--2-2-2-2-2-2-2-2---------------| +d--0~~--0---0-0--0-------0---0---0-0-0---------------| +a--0~~----0---------0--0-0---0---0-------------------| +e----------------------------------------------------| + +Repeated Throughout song +Bassline/Guitar part : +e------------------------------------| +b------------------------------------| +g------------------------------------| +d------4-4-5-5-6-6-7-7-6-6-5-5-4-4---| +a--5-5-------------------------------| +e------------------------------------| + + +e-----------------------------------------------------| +b-----------------------------------------------------| +g--7--7-------7--7-----7--7-------7--7-------7--7-----| +d--7--7---9---7--7--9--7--7---9---7--7---9---7--7-----| +a--5--5---5---5--5--5--5--5---5---5--5---5---5--5-----| +e-----------------------------------------------------| + Well my baby and me went out late saturday night... + +e-----------------------------------------------------| +b-----------------------------------------------------| +g--7--7-------7--7-----7--7-------7--7-------7--7-----| +d--7--7---9---7--7--9--7--7---9---7--7---9---7--7-----| +a--5--5---5---5--5--5--5--5---5---5--5---5---5--5-----| +e-----------------------------------------------------| + I had my hair... + + +e------------------------------8------10--12\---------| +b-----------------------------------------------------| +g-7--7-------7-------------/7------/9-----12\---------| +d-7--7---9---7--7-------------------------------------| +a-5--5---5---5--5-------------------------------------| +e-----------------------------------------------------| + baby she looked so right + + +Solo : +e--/10---10-10--10-13~~-15b~~-r15-13------------------| +b--/10---10-10--10-------------------15---------------| +g---------------------------------------13-12-10-8~~--| +d-----------------------------------------------------| +a-----------------------------------------------------| +e-----------------------------------------------------| + + +e-10-13p10----13--------------------------13-----13---| +b----------12----12-10----10-----11---13b----13b------| +g----------------------12-----------------------------| +d-----------------------------10----------------------| +a-----------------------------------------------------| +e-----------------------------------------------------| + + +e---13b-13p10---------------------------------------------------| +b-------------13p12p10------------------------------------------| +g----------------------12/--------------------------------------| +d-----------------------------------4-4-5-5-6-6-7-7-6-6-5-5-4-4-| +a-----------------------------5-5-5-----------------------------| +e---------------------------------------------------------------| diff --git a/guitar/tabs/Misc/Stray Cats - Stray Cat Strut.prj b/guitar/tabs/Misc/Stray Cats - Stray Cat Strut.prj new file mode 100644 index 0000000..cdf7dad --- /dev/null +++ b/guitar/tabs/Misc/Stray Cats - Stray Cat Strut.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Stray Cats - Stray Cat Strut.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500)(32,500)(33,500)(34,500) diff --git a/guitar/tabs/Misc/Stray Cats - Stray Cat Strut.tab b/guitar/tabs/Misc/Stray Cats - Stray Cat Strut.tab new file mode 100644 index 0000000..b93a798 --- /dev/null +++ b/guitar/tabs/Misc/Stray Cats - Stray Cat Strut.tab @@ -0,0 +1,448 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: Andre van de Water +Subject: Re: REQ: STRAY CATS (tab & wanted) + +This is what I've collected on Internet, I didn't wrote it! +I'm sure this helps a bit. A guitar magazine made a description of Rock +this town once, if you want to know exactly which magazine let me know. +If you got other song's by the Stray Cats please send them to me. +Here it is: + +Stray Cat Strut version I: + +This isn't exact, but it impresses the hell out of people once you get + it down just the same. I'm not very proficient at doing tab, and I don't +know exactly how to indicate 8th and 16th notes and the like. Just play +it slowly, note by note, and listen for how it goes together. Where I've +indicated a bent note (e.g., 10-b-12), that means bend the note on the +10th fret until you get the note on the 12th. Don't actually slide up to +or play the note on the 12th fret. Sorry if these instructions are too +simplistic, but I'm not sure what level you're at. Lyrics are probably +off somewhat. The distortion is set pretty high, and the second lead part +uses some heavy-duty flange. Hope this helps you out. + +STRAY CAT STRUT + +Intro lick: + +Cm// Bb// G#// G + +E--7/8--8--------------------------------------- +B--7/8------------------------8--------------- +G---------10-8---------------8---------10-----8 +D---------------10-8-------9--------11-----9--- +A-----------------------10--------------------- +E---------------------------------------------- + +Cm Bb G# G +Ooh ooh ooh ooh +Cm Bb G# G +Ooh ooh ooh ooh + +Cm Bb G# G Cm Bb G# G +Black and orange stray cat sittin' on a fence +Cm Bb G# G Cm Bb G# G +Ain't got enough dough to pay the rent +Cm Bb G# G +I'm flat broke but I don't care + Cm(stop) +I strut right by with my tail in the air + +Fm Eb C# C +Stray Cat Strut I'm a ladies guy + Fm Eb C# C +A feline casanova hey man that's why + Fm Eb C# C +Get a shoe thrown at me from a mean old man + Fm(stop) +I get my dinner from a garbage can + + +FIRST LEAD PART: + +Cm Bb G# G + Meow +Cm Bb G# G + Hey don't cross my path + + +E-----------8------------------------------------------------------------ +B------------------------------------------------------------------------- +G--10-b-12-----10-8-------------------------------0----------------8-11-10 +D-------------------10-8--6-8-6-8-5---------0-1-3---1-0-----8-10-11------- +A------------------------------------2-s-3--------------3----------------- +E------------------------------------------------------------------------- + + +Then do the verse progression: Cm Bb G# G + +E-----------------------------8-------8-10-8 +B-------------------------------------8----- +G------------------8-10-b-12----8-10--8----- +D---------------10-------------------------- +A----------9-10----------------------------- +E--8-10-11---------------------------------- + + +Fm Cm Cm(add D)** Cm Cm(add D) Cm +I don't bother chasin' mice around +Fm (**On Cm add D, play a Cm cho= +rd +I slink down the alley lookin' for a fight and add the D not on the +D G first string, 10th fret) +Howlin' to the moon on a hot summer night + +Cm Bb G# G +Singin' the blues while the lady cats cry +Cm Bb G# G +I'm a stray cat and you're a real gone guy + Cm Bb G# G +I wish I could be as carefree and wild + Cm(stop) +But I got cat class and I got cat style + + +SECOND LEAD PART: + +E--8--11--10--8---4-3---8--11--10--8-11-10-8-------------------------8---- +B--8--11--10--8---4-3---8--11--10------------11-10-8---------------------- +G--8--11--10--8---5-4---8--11--10--------------------11-10-8-10-b-12--8--- +D-10---------10---6-5---10----------------------------------------------10 +A------------------------------------------------------------------------- +E------------------------------------------------------------------------- + +Back into "I don't bother..." part as before. + + +Outro: + +Cm Bb G# G + +E--7/8-8-------------------------10 Play the last chord furiously +B--7/8----------------------------8 to abrupt end of song. +G---------10-8--------------------8 +D--------------10-8-----7-9-10---10 +A--------------------10------------ +E---------------------------------- + + +Stray Cat Strut version II: + +This is the basic progression: Cm Bb Ab G7 + + +=09=09=09 Stray Cat Strut +=09=09=09=09 by +=09=09=09 The Stray Cats + +Shuffle +|Cm Bb |Ab G7 | cont. | | + Oooh Oooh + +Cm Bb Ab G7 +Black and orange stray cat sittin' on a fence. + +Cm Bb Ab G7 +Ain't got enough dough to pay the rent. + +Cm Bb Ab G7 G7 (tacet) +I'm flat broke but I don't care, I strut right by with my tail in the air= +. + +Fm Eb Db C7 Fm Eb Db C7 +Stray cat strut I'm a ladies cat, I'm a feline Casanova hey man that's that= +. + + Fm Eb Db C7 Fm (tacet) +Get a shoe thrown at me from a mean old man. Get my dinner from a garbage = +can. + + +(instrumental) +Cm Bb | Ab G7|Cm(tacet)| | + +Verse 2 +Fm Fm7 Cm Fm +I don't bother chasing mice around. I slink down the alley looking for a f= +ight + + D7 G7 Cm Bb +howlin' to the moonlight on a hot summer night. Singin' the blues while th= +e + +Ab G7 Cm Bb Ab G7 Cm Bb +lady cats cry. Wild stray cat you're a real gone guy. I wish I could be a= +s + +Ab G7 Cm(tacet) +care-free and wild, but I got cat class and I got cat style. + +solo +|Cm Bb |Ab G7 | etc. + +repeat verse 2 + +|Cm Bb |Ab G7 |Cm (tacet) Cm +=09=09 |-8-------------------|------------------| +=09=09 |---------------------|------------------| +=09=09 |---11-10-8-10-8------|------------------| +=09=09 |----------------10-8-|---7-9-10---------| +=09=09 |---------------------|10----------------| +=09=09 |---------------------|------------------| + + +Please don't touch: + + Stray Cats : Please Don't Touch + =F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9= +=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9=F9 +I Heard this song and tabbed it, i hope somebody gets something from it. +It's not original Stray Cat's song, i do not just remember who was the +original writer. Enjoy :) + +Begin: + Loop 4 times +E ||-3-3-3-3-3-3-3--0-------------------------- ------------ +B ||-------------------3-0--------------------- ------------ +G ||-----------------------2-0----------------- ------------ +D ||---------------------------2-0----2-------- ------------ +A ||----------------------------------2-------- -2--2--2--2- +E ||------------------------------------------- ----3-----3- + """"""""""""""""""""""""""""""" + This part is also main riff, it + will be played at end of every + chorus. + +Chords are : +Em A D A Em +Chorus : +A Em +Please don't touch, +A Em +I'll shake so much +A Em +Please don't touch, +D +I'll shake so much {riff} + + + +Good luck.............. + Two Beers Or Not Two Beers -- Shakebeers -- +Andre van de Water email:water@fys.ruu.nl + + Stray Cat Strut - Stray Cats + --------------- + +Here is Brian Setzer's masterpiece (lyrically and musically)... tabbed! +There are some missing bits, but I think it's about 95% correct. I'm also +pretty sure I've added stuff in that shouldn't be in as well, the bass intro +is obvious one... Threw in the rock chords instead! +Another good idea is to listen to the CD for the timming, especially the +vibrato bits. + + +/ slide up; +\ slide down; +* between asterisks play as fast as you can! +~ vibrato; +p pull off; +h hammer; +v strum downwards; +^ strum upwards; + + +Basically the main guitar solos are as follows... + +INTRO LICK: +----------- + v ^ v v ^ v v ^ v v ^ v +e|------------------------------8~---8--------------------------------| +B|------------------------------8~---8---------------------8----6-----| +G|------------------------------8~-----11\10p8-10-8------8----6-----8-| +D|-----------------------------------------------------9----------7---| +A|-10-10-10-8-8-8-6-6-6-5---5-5---------------------10----------------| +E|-8--8--8--6-6-6-4-4-4-3---3-3---------------------------------------| + + + +FIRST SOLO: +----------- + +e|-8----------------------------------------------------------------- +B|-8-----------------------------------------------------------4-7-6- +G|---10/11\10p8-10-8--------------0h3p-----------0-----------5------- +D|-------------------10-8\6-8-6-8----------0-1-3---1-0---5\6--------- +A|-------------------------------------2\3-------------3------------- +E|------------------------------------------------------------------- + + v v v v v ^ v v ^v + -3-3-6-6-4-4-4-3---33------------------8------| + -4-4-8-8-6-6-6-6---66-----------4-7~-----7-5~-| + -5-5-7-7-5-5-5-4---44---------5---------------| + -5-5-8-8-6-6-6-3---33-----4-7-----------------| + ----------------------3-6---------------------| + ----------------------------------------------| + + + +SECOND SOLO: +------------ + v ^ v v ^ v v ^ v v ^ v^ +e|---3--------------3--------------3--------------3-------4----7/8--- +B|---4---------4----4---------4----4---------4----4-------4----7/8--- +G|---5------5--4----5------5--4----5------5--4----5------55----7/8--- +D|-3--------4-3---3--------4-3---3--------4-3---3--------4--3-------- +A|-3--------6-----3--------6-----3--------6-----3--------6----------- +E|------3/4-4-3--------3/4-4-3--------3/4-4-3--------3/4-4--3-------- + + * + -11--10--8---------------8~---11--10-8-11-10-8-------------8- + -10--9---8-9/-8\---4---3-8~---10--9------------11-10-8------- + -11--10--8-8/-8\--5---4--8~---11--10-------------------10/--- + -10--9-----------6---5--------10--9-------------------------- + ------------------------------------------------------------- + ------------------------------------------------------------- + + * + --------------------------------| + --------------------------------| + -10/11/10-10-8-------8~---------| + ---------------10-------10-8----| + ------------------10---------10-| + --------------------------------| + + +OUTRO LICK: +----------- +e|-------------------------------8---------------------------- +B|------------------------------------------------------------ +G|---------------------------------10/-8-10-8----------------- +D|--------------------------------------------10-8----7-8-11~- +A|-10-10-10-8-8-8-6-6-6-5---5-5--------------------10--------- +E|-8--8--8--6-6-6-4-4-4-3---3-3------------------------------- + + + vv^v^v^v^v^v^ + --8888888888888~------8\--| + --8888888888888~------8\--| + --8888888888888~------9\--| + ----------------------10\-| + ----------------------10\-| + ----------------------8\--| + + + +Here is the structure of the song: + + +INTRO LICK + + +Cm Bb G#7 G7 + +Cm Bb G#7 G7 + +Cm Bb G#7 G7 +Oooh Oooh Oooh Oooh + +Cm Bb G#7 G7 +Oooh Oooh Oooh Oooh + +Cm Bb G#7 G7 +Oooh Oooh Oooh Oooh + +Cm Bb G#7 G7 Cm Bb G#7 G7 +Black and orange stray cat sitting on a fence + +Cm Bb G#7 G7 Cm Bb G#7 G7 +Ain't got enough dough to pay the rent + +Cm Bb G#7 G7 +I'm flat broke but I don't care + +Am (TACET) +I strut right by with my tail in the air + +Fm D# C#7 C7 +Stray cat strut I'm a lady's cat + + Fm D#m C# C7 +I'm a feline casanova yeah man that's that + + Fm D#m C# C7 +Get a shoe thrown at me by a mean old man + +Fm (TACET) +Get my dinner from a garbage can + + + +Cm Bb G#7 G7 + (meow) + +Cm Bb G#7 G7 + + (Yeah don't cross my path) + + +FIRST SOLO + + + +Fm Fm7 Cm +I don't bother chasing mice around + +Fm +I slink down the alley looking for a fight + +D7 G7 +Howling to the moonlight on a hot summer's night + +Cm Bb G#7 G7 +Singing the blues while the ladies cat cry + +Cm Bb G#7 G7 +Wild stray cat you're real gone guy + +Cm Bb G#7 G7 +I wish I could be as carefree and wild + +Cm (TACET) +But I got cat class and I got cat style + + + +Cm Bb G#7 G7 + +Cm Bb G#7 G7 + +SECOND SOLO + +(Repeat verse after FIRST SOLO once) + + +OUTRO LICK + +--------------------------------- +--------------------------------- + +Cm Bb G#7 G7 Fm Fm7 D7 + +-3- -1- -4- -3- -8- -8- -5- +-4- -3- -4- -3- -9- -9- -7- +-5- -3- -5- -4- -10- -8- -5- +-5- -3- -4- -3- -10- -10- -7- +-3- -1- -6- -5- -8- -8- -5- +-3- -1- -4- -3- -8- -8- -5- + +Impress some people with this! +Adrian. + +----- + + + diff --git a/guitar/tabs/Misc/Tab.prj b/guitar/tabs/Misc/Tab.prj new file mode 100644 index 0000000..24611f1 --- /dev/null +++ b/guitar/tabs/Misc/Tab.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=tab.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,1000)(5,750)(6,500)(7,500)(8,1000)(9,750)(10,750)(11,750)(12,750)(13,100)(14,100)(15,100)(16,100)(17,100)(18,100)(19,100)(20,100)(21,100)(22,100)(23,100)(24,100)(25,100)(26,100)(27,100)(28,100)(29,100)(30,100)(31,100)(32,100)(33,100)(34,100)(35,100)(36,100)(37,100)(38,100)(39,100)(40,100)(41,100)(42,100)(43,100)(44,100)(45,100)(46,100)(47,100)(48,100)(49,100)(50,100)(51,100)(52,100)(53,100)(54,100)(55,100)(56,100)(57,100)(58,100)(59,100)(60,100)(61,100)(62,100)(63,100)(64,1500) diff --git a/guitar/tabs/Misc/The Prince Solo.prj b/guitar/tabs/Misc/The Prince Solo.prj new file mode 100644 index 0000000..8a24dff --- /dev/null +++ b/guitar/tabs/Misc/The Prince Solo.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=The Prince Solo.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500)(25,500)(26,500)(27,500)(28,500)(29,500)(30,500)(31,500)(32,500)(33,500)(34,500)(35,500)(36,500)(37,500)(38,500)(39,500)(40,500)(41,500)(42,500)(43,500)(44,500)(45,500)(46,500)(47,500)(48,500)(49,500)(50,500)(51,500)(52,500)(53,500)(54,500)(55,500)(56,500)(57,500)(58,500)(59,500)(60,500)(61,500)(62,500)(63,500)(64,500)(65,500)(66,500)(67,500)(68,500)(69,500)(70,500)(71,500)(72,500)(73,500)(74,500)(75,500)(76,500)(77,500)(78,500)(79,500)(80,500)(81,500)(82,500)(83,500)(84,500)(85,500)(86,500)(87,500)(88,500)(89,500)(90,500)(91,500)(92,500)(93,500)(94,500)(95,500)(96,500)(97,500)(98,500)(99,500)(100,500)(101,500)(102,500)(103,500)(104,500)(105,500)(106,500)(107,500)(108,500)(109,500)(110,500)(111,500)(112,500)(113,500)(114,500)(115,500)(116,500)(117,500)(118,500)(119,500)(120,500)(121,500)(122,500)(123,500)(124,500)(125,500)(126,500)(127,500)(128,500)(129,500)(130,500)(131,500)(132,500)(133,500)(134,500)(135,500)(136,500)(137,500)(138,500)(139,500)(140,500)(141,500) diff --git a/guitar/tabs/Misc/The Prince Solo.tab b/guitar/tabs/Misc/The Prince Solo.tab new file mode 100644 index 0000000..63d5d8d --- /dev/null +++ b/guitar/tabs/Misc/The Prince Solo.tab @@ -0,0 +1,45 @@ +The Prince Solo: Part 2 + + +This is a continuation of the 1st part of the solo. This ends it. Some of the legato phrases sound like Satch. That just goes to show Kirk can play really good if he wants to. X5 means to repeat the lick 5 times. Just listen to the cd..and U'll get it. Enjoy! + + + +Key = A minor + + + E |-----5h7h9-----5h7h9p5---------|5h7h9-----5h9p5 9p7p5-9p7p5-------| + B |5h7h9-----5h7h9-------7h9------|-----5h7h9-----------------9p7p5--| + G |-------------------------------|----------------------------------| + D |-------------------------------|----------------------------------| + A |-------------------------------|----------------------------------| + E |-------------------------------|----------------------------------| + + E |--------------3p1p0------------|----------------------------------| + B |9p5 10p5-5--5------3p1p0-------|----------------------------------| + G |--------7-7-------------2p0----|---------------0h2p0--------------| + D |-------------------------------|-3p2p0--------------2-1-0---------| + A |-------------------------------|------3p2p0--------------3-3p0-3--| + E |-------------------------------|------------4p3-------------------| + + E |---|-----|---------------------------|12-15p12--17p12--15p12------| + B |---|-----|---------------------------|--------12-----12-----12----| + G |---|8^8X5|9h12p9-9h12p9--9-12p9-17-14|----------------------------| + D |5--|-----|-------------10-------17-14|----------------------------| + A |-7-|-----|---------------------------|----------------------------| + E |---|-----|---------------------------|----------------------------| + + E |17p12--15p12---------------------------------------------15p12----| + B |-----12-----15-13p10----10h13p10------10h13p10--10h11h12------12--| + G |--------------------12p9---------12p9---------12------------------| + D |------------------------------------------------------------------| + A |------------------------------------------------------------------| + E |------------------------------------------------------------------| + + E |-15p12--17p12--15p12--17p12--15p12--17-22p20p17X5--17-------------| + B |------12-----12-----12-----12-----12-------------20--20b----------| + G |------------------------------------------------------------------| + D |------------------------------------------------------------------| + A |------------------------------------------------------------------| + E |------------------------------------------------------------------| + diff --git a/guitar/tabs/Misc/Toccata de Bach en E mineur pour Orgue.tab b/guitar/tabs/Misc/Toccata de Bach en E mineur pour Orgue.tab new file mode 100644 index 0000000..11895a8 --- /dev/null +++ b/guitar/tabs/Misc/Toccata de Bach en E mineur pour Orgue.tab @@ -0,0 +1,271 @@ +Toccata de Bach en E mineur pour Orgue. +www.multimania.com/guitarweb + +Transcritpion pour Guitar Web par Francois LEMASSON. + +un conseil: achetez la verion originale et ecoutez, ecoutez, ecoutez, ecoutez.... + +* = natural harmonic x= ghost note s= slide h= hammer on p= pulloff +b = bend bf = bend full br bfr bend then release +~ = vibrato + +|-17-15-17----15---------------------------------------| +|---------------18-17-15-14-15----10-8-10--------------| +|--------------------------------------------9-10-6-7--| +|------------------------------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| + +|------------------------------------------------------| +|---------------------------------------------------5--| +|-----------------------------7------------------6-----| +|-7---7-----------------------7------------5--8--------| +|--10-----10-9-7--------------5------4--7--------------| +|----------------10-9-10-------------------------------| + +|------------------------------------------------------| +|-5----------------------------------------------------| +|-6----------------------------------------------------| +|-8---------------5------------------------------------| +|-7---------------------7----/9~-----------------------| +|----------------------------------------------------9-| + + +|----------------------------------------------------| +|----------------------------------------------------| +|----------------------------------------------------| +|---------------------------3-5p---3-5p---3-5p---3-5-| +|-5-7p---5-7p---5-7p---5-7------7------7------7------| +|------9------9------9-------------------------------| + + +|------------------------------------------------| +|------------------------------------------------| +|-2-3p---2-3p---2-3p---2~------------------------| +|------5------5------5------------------------11-| +|------------------------------------------------| +|------------------------------------------------| + + +|------------------------------------------------------| +|-----------------------------6-8p---6-8p---6-8p---6-8-| +|-7-9p----7-9p----7-9p----7-9------9------9------9-----| +|-----11------11------11-------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| + + +|-5-6p---5-6p---5-6p---5~------------------------------| +|------8------8------8---------------------------------| +|---------------------------------------------------14-| +|------------------------------------------------------| +|------------------------------------------------------| +|------------------------------------------------------| + + +|-------------------------------------------------------| +|-------------------------------------------------------| +|---15-----15-----14-----14-----12-----12-----10----10--| +|-17--14-17--14-15--12-15--12-14--10-14--10-12--8-12--8-| +|-------------------------------------------------------| +|-------------------------------------------------------| + + +|------------------------------------| +|------------------------------------| +|---9----9---7---7---5---5---3---3---| +|-10-7-10-7-8-5-8-5-7-3-7-3-5-2-5-2--| +|------------------------------------| +|------------------------------------| + + +|------------------------------------------------------| +|------------------------------------------------------| +|--2----2----------------------7-----------------------| +|-3--0-3-0-2-5---5-------------7-----------------------| +|-------------4-7-4~-----------5-----------------------| +|------------------------------------------------------| + + +|-------------------------------------------------------| +|-------------------------------------------------------| +|---0-3--3-2--------------------------------------------| +|--2--------5-3-2-------------2-5-3-2-3p-2h-3p---2~-----| +|-4---------------5-4-2--4-0-4--------------------------| +|-------------------------------------------------------| + + +|-----------5-10p-5h-12p-5h-13p-5h-10p-5h-12p-5h-13p-5h-15p-5h-12p-5h-| +|-2-------------------------------------------------------------------| +|-3-------------------------------------------------------------------| +|-0-------------------------------------------------------------------| +|---------------------------------------------------------------------| +|---------------------------------------------------------------------| + + +|-13p-5-15p-5-17p-5-13p-5-15p-5-17p-5-18p-5-15p-5-17p-5-13p-5-15p-5-12p-5-13p-5-10p-5-12p-5-9p-5| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------------| + + +|-10p-5------------------------------------------------------------------| +|------------------------------------------------------------------------| +|------------------------------------------------------------------------| +|------19p-7-20p-7-17p-7-19p-7-15p-7-17p-7-14p-7-15p-7-12p-7-14p-7-11p-7-| +|------------------------------------------------------------------------| +|------------------------------------------------------------------------| + + + +|-----------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------| +|-----------------------------------------------------------------------------------------| +|-13-7------------------------------------------------------------------------------------| +|------12p-0-13p-0-10p-0-12p-0-8p-0-10p-0-7p-0-8p-0-5p-0-10p-0-7p-0-8p-0-5p-0-7p-0-4p-0---| +|-----------------------------------------------------------------------------------------| + + + +|------------------------------------------------------| +|------------------------------------------------------| +|----------3-------2-------0----------2----3----2----0-| +|--------3---3---2---2---0---0------2------3----2----0-| +|-5p---5-------3-------1-------0--4------5----0----1---| +|------------------------------------------------------| + + + +|------------------------------------------------------| +|------------------------------------------------------| +|-2--------3-------2-------0----------2----3----2----0-| +|-2------3---3---2---2---0---0------2------3----2----0-| +|-0----5-------3-------1-------0--4------5----0----1---| +|------------------------------------------------------| + + + +|--------------------------------------------------------| +|-10-----------------------------------------------------| +|-9----------------------------------------------------6-| +|-7------7-5-------------------------5-7-5-----------7---| +|------------9-7-5-------------5-7-8-------8-7-8-5-8-----| +|------------------8-7-8-5-7-8---------------------------| + + + +|-----------------------------------------------------------------| +|---------------------10-11~------11----10---8---10---------11----| +|-7-----------9-10-12-------------10----9----7---9-------10---10--| +|-----9-10-12------------------12-----7----8-----7----12----------| +|--12--------------------------------------------0----------------| +|-----------------------------------------------------------------| + + + +|-------------------------5---------------------------------------| +|------10-------8-------5---------11----10---8---10---------------| +|----9----9---7---7---6-----------10----9----7---9------4---------| +|-10--------8-------7----------12-----7----8-----7------3---------| +|------------------------------------------------0------5---------| +|-----------------------------------------------------------------| + + + +|--------------------------5---------------------------------| +|------------------11~--------8-6-5-6-5----------------------| +|-6----------6-9-12---------------------7-6-7-5--------------| +|-5------7-9------------------------------------8-7-5-3-2-0--| +|-7----------------------------------------------------------| +|-5----------------------------------------------------------| + + + +|------------------------------------------------------| +|------------------------------------------------------| +|-3------------------------9--------------9------------| +|-2---------------------10---10-9-11-9-10---10-9-11-9--| +|-4----------------------------------------------------| +|------------------------------------------------------| + + + +|--------------------------------------------------------------| +|--------------------------------------------------------------| +|----9--------------9------------------------------------------| +|-11---11-8-11-8-11---11-8-11-8----8---------------8-----------| +|-------------------------------10---10-7-10-7-10----10-7-10-7-| +|--------------------------------------------------------------| + + + +|--------------------------------------------------------| +|--------------------------------------------------------| +|--------------------------------------------------------| +|----8---------------8-----------------------------------| +|-10---10-7-10-7-10----10-7-10-7---7-----------7---------| +|--------------------------------9---9-6-9-6-9---9-6-9-6-| + + + +|--------------------------------------------------------| +|--------------------------------------------------------| +|--------------------------------------------------------| +|--------------------------------------------------------| +|---7----------7------------10--------------10-----------| +|-9--9-6-9-6-9---9-6-9-6-12----12-9-12-9-12----12-9-12-9-| + + + +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|------------------------------------8----8----8----8----8----8-| +|----10--------------10-----------10---10---10---10---10---10---| +|-12----12-9-12-9-12----12-9-12-9-------------------------------| + + + +|---------------------------------------------------------------| +|------------------------------------2--------------------------| +|---------9----9----9----9----9------2--------------------------| +|-11-8-11---11---11---11---11--------2------------3-------------| +|------------------------------------0------------3-------------| +|-------------------------------------------------1-------------| + + +|---------------------------------------------------------| +|------------------2--------------------------------------| +|-3----------------2--------------------------------------| +|-3--------2--0----2------------------------2--3--0--2----| +|-1----------------0------------------------------------4-| +|---------------------------------------------------------| + + +|--------------------------------------------------------| +|-----------------------------------------------2--------| +|---------------------------------------------------0----| +|--0------------------5~----3----0-----------------------| +|----2--4--0--1-----0-------------------0----------------| +|----------------4---------------------------------------| + + +|--------------------------------------------------| +|-3------------------------------------------------| +|-2------------------------------------------------| +|-0------------------------------------------------| +|--------------------------------------------------| +|----------------0---1---0-------------------------| + + +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| + + + diff --git a/guitar/tabs/Misc/Vinnie Moore - Last Chance.tab b/guitar/tabs/Misc/Vinnie Moore - Last Chance.tab new file mode 100644 index 0000000..a3b5243 --- /dev/null +++ b/guitar/tabs/Misc/Vinnie Moore - Last Chance.tab @@ -0,0 +1,555 @@ +Transcribed and tabbed by Jere Haakana. +This is my favourite Vinnie Moore song at the moment. It has a cool +melody, beautiful interlude and of course, screaming solo. This was +easy to tab, because there isn't any lightning fast guitar pyrotechnics +in this song. Enjoy!! +In the Meltdown album Vinnie used: Heartfield and Fender guitars, DiMarzio +pickups and strings. + + LAST CHANCE by Vinnie Moore + +E---------------------------------------------------||------------------ +B---------------------------------------------------||------------------ +G---2-----------2-----------2--------2--------2-----||------------------ +D---2-----------2-----------2--------2--------2-----||------------------ +A---0--0--0--0--0--0--0--0--0--0--0--0--0--0--0--0--||------------------ +E---------------------------------------------------||------------------ + + + the other guitar plays octave above +E-----------------------------------------------||---------------------- +B----------------------------8^--8--8~~~--------||---------------------- +G---------6--7--6h7p6---------------------7--9--||--9^--9--9^--9^p7----- +D------9---------------9--7---------------------||---------------------- +A---9-------------------------------------------||---------------------- +E-----------------------------------------------||---------------------- + + + +E---------------||-----------------------------------------||----------- +B---------------||-----------------------------------------||----------- +G---9-----------||--------6--7--6h7p6----------------------||----------- +D------7--7~~~--||-----9---------------9--7--7\5--5--------||----------- +A---------------||--9--------------------------------5--7--||--5--7----- +E---------------||-----------------------------------------||----------- + + + +E-----------------------||------------------------------------15^------- +B-----------------------||----------14--15--14h15p14-------------------- +G-----------------------||------16--------------------16--14------------ +D-----------7--9--7~~~--||--16------------------------------------------ +A---7/9~~~--------------||---------------------------------------------- +E-----------------------||---------------------------------------------- + + + +E---15--15~~~-----------------------||--14h17p14------14---------------- +B--------------15h17--17^--17--17^--||------------15------15------14---- +G-----------------------------------||------------------------16-------- +D-----------------------------------||---------------------------------- +A-----------------------------------||---------------------------------- +E-----------------------------------||---------------------------------- + + + +E------------------------------------------------------||--------------- +B---h15p14----------------------14---------------------||--------------- +G-----------16--14----------16------16^p14------14~~~--||------16------- +D-------------------16--14------------------16---------||--16----------- +A------------------------------------------------------||--------------- +E------------------------------------------------------||--------------- + + + pinch harmonic +E---------------------------------------------||------------------------ +B---14--14^--14-------------------------------||------------------------ +G----------------16--14--12^--12--12----------||-------------14--14----- +D-------------------------------------14--12--||---------14------------- +A---------------------------------------------||--12~~~----------------- +E---------------------------------------------||------------------------ + + + +E--------||------------------------------------------------------------- +B--------||--14^--14---------------------------------------------------- +G---~~~--||-----------14--------------14-------------------------------- +D--------||---------------14--16--17------17~~~--14--14^--14--12--11---- +A--------||------------------------------------------------------------- +E--------||------------------------------------------------------------- + + + pre-bend +E-----------------------17^--17--------------||------------------------- +B--------------------------------15^--17~~~--||--15--14h15p14----------- +G--------------------------------------------||----------------14------- +D---11^--11----------------------------------||------------------------- +A------------12--12~~~-----------------------||------------------------- +E--------------------------------------------||------------------------- + + + +E----------------------------------------------------------------------- +B-----------------------0h5p0h7p0h8p0h7p0h8p0h10p0h12p0----------------- +G---------------14------------------------------------------------------ +D---14--16--17------17-------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + with whammy bar harmonics. Dive with bar +E---------------------------------------21--||-------------------------- +B---\---10\------------5------19------------||-------------------------- +G----------------------5--19----------------||/16p14---/14p12---/12----- +D-------------------------------------------||-------------------------- +A-------------------------------------------||-------------------------- +E-------------------------------------------||-------------------------- + + + Sweep! +E------------------------------------12--16--12------------------------- +B--------------------------------14--------------14--------------------- +G---p11---/11p9--------------14----------------------14----------------- +D------------------------14------------------------------14------------- +A----------------12--16--------------------------------------16--12----- +E----------------------------------------------------------------------- + + + +E-------------------12--19~~~--||---------------------------------21---- +B---------------14-------------||/19p17---/17p15---/15p14--14h15-------- +G-----------14-----------------||--------------------------------------- +D-------14---------------------||--------------------------------------- +A---16-------------------------||--------------------------------------- +E------------------------------||--------------------------------------- + + + Sweep! +E---p19p17----------------------------------17--19--21--22--22^~~~------ +B---------------------------------------17------------------------------ +G-----------18----------------------18---------------------------------- +D---------------19--------------19-------------------------------------- +A-------------------19------19------------------------------------------ +E-----------------------17---------------------------------------------- + + + the other guitar plays octave above +E---||----------------------------------------------||------------------ +B---||---------------------------8^--8--8~~~--------||------------------ +G---||--------6--7--6h7p6---------------------7--9--||--9^--9--9^--9---- +D---||-----9---------------9--7---------------------||------------------ +A---||--9-------------------------------------------||------------------ +E---||----------------------------------------------||------------------ + + + +E--------------------||-----------------------------------------||------ +B--------------------||-----------------------------------------||------ +G---^p7--9-----------||--------6--7--6h7p6----------------------||------ +D-----------7--7~~~--||-----9---------------9--7--7\5--5--------||------ +A--------------------||--9--------------------------------5--7--||------ +E--------------------||-----------------------------------------||------ + + + +E-----------------------------||---------------------------------------- +B-----------------------------||----------14--15--14h15p14-------------- +G-----------------------------||------16--------------------16--14------ +D-----------------7--9--7~~~--||--16------------------------------------ +A---5--7--7/9~~~--------------||---------------------------------------- +E-----------------------------||---------------------------------------- + + + +E---15^--15--15~~~---------||-------14--17------14---------------------- +B-------------------15h17--||--17^----------15------15------14h15p14---- +G--------------------------||---------------------------16-------------- +D--------------------------||------------------------------------------- +A--------------------------||------------------------------------------- +E--------------------------||------------------------------------------- + + + +E----------------------------------------------------------------||----- +B------------------------14--17-------14-------------------------||----- +G---16--14----------16^----------16^------16^--16p14------14~~~--||----- +D-----------16--14------------------------------------16---------||----- +A----------------------------------------------------------------||----- +E----------------------------------------------------------------||----- + + + pinch harmonic +E----------------------------------------------------------------------- +B-----------14--14^--14------------------------------------------------- +G-------16---------------16--14--12^--12--12---------------------14----- +D---16----------------------------------------14--12---------14--------- +A-----------------------------------------------------12~~~------------- +E----------------------------------------------------------------------- + + + +E----------||----------------------------------------------------------- +B----------||--14^--14-------------------------------------------------- +G---14~~~--||-----------14--------------14------------------------------ +D----------||---------------14--16--17------17~~~--14--14^--14--12------ +A----------||----------------------------------------------------------- +E----------||----------------------------------------------------------- + + + pre-bend +E---------------------------17^--17--------------||--------------------- +B------------------------------------15^--17~~~--||--15--14h15p14------- +G------------------------------------------------||--------------------- +D---11--11^--11----------------------------------||--------------------- +A----------------12--12~~~-----------------------||--------------------- +E------------------------------------------------||--------------------- + + + +E----------------------------------------------------------------------- +B---------------------------0h5p0h7p0h8p0h7p0h8p0h10p0h12p0------------- +G---14--------------14-------------------------------------------------- +D-------14--16--17------17---------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + with whammy bar trill Harmonics. +E-----------------------------------------21--||------------------------ +B---\---10\------12p0\----------------19------||------------------------ +G---------------------------------19----------||/16p14---/14p12--------- +D---------------------------------------------||------------------------ +A---------------------------------------------||------------------------ +E---------------------------------------------||------------------------ + + + Sweep! +E---------------------------------------12--16--12---------------------- +B-----------------------------------14--------------14------------------ +G---/12p11---/11p9--------------14----------------------14-------------- +D---------------------------14------------------------------14---------- +A-------------------12--16--------------------------------------16------ +E----------------------------------------------------------------------- + + + +E-----------------------12--19~~~--||----------------------------------- +B-------------------14-------------||/19p17---/17p15---/15p14--14h15---- +G---------------14-----------------||----------------------------------- +D-----------14---------------------||----------------------------------- +A---12--16-------------------------||----------------------------------- +E----------------------------------||----------------------------------- + + + Sweep! +E---21p19p17----------------------------------17--19--21--22--22^------- +B-----------------------------------------17---------------------------- +G-------------18----------------------18-------------------------------- +D-----------------19--------------19------------------------------------ +A---------------------19------19---------------------------------------- +E-------------------------17-------------------------------------------- + + + the other guitar plays octave above +E---~~~--||----------------------------------------------||------------- +B--------||---------------------------8^--8--8~~~--------||------------- +G--------||--------6--7--6h7p6---------------------7--9--||--9^--9------ +D--------||-----9---------------9--7---------------------||------------- +A--------||--9-------------------------------------------||------------- +E--------||----------------------------------------------||------------- + + + +E-------------------------||-------------------------------------------- +B-------------------------||-------------------------------------------- +G---9^--9^p7--9-----------||--------6--7--6h7p6------------------------- +D----------------7--7~~~--||-----9---------------9--7--7\5--5----------- +A-------------------------||--9--------------------------------5--7----- +E-------------------------||-------------------------------------------- + + + +E---||----------------------------||------------------------------------ +B---||----------------------------||----------14--15--14h15p14---------- +G---||----------------------------||------16--------------------16------ +D---||----------------7--9--7~~~--||--16-------------------------------- +A---||--5--7--7/9~~~--------------||------------------------------------ +E---||----------------------------||------------------------------------ + + + +E-------15^--15--15~~~---------||-------14--17------14------------------ +B-----------------------15h17--||--17^----------15------14------14------ +G---14-------------------------||---------------------------16---------- +D------------------------------||--------------------------------------- +A------------------------------||--------------------------------------- +E------------------------------||--------------------------------------- + + + +E----------------------------------------------------------------------- +B---h15p14-----------------------14--17-------14------------------------ +G-----------16--14----------16^----------16^------16^--16p14------14---- +D-------------------16--14------------------------------------16-------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + pinch harmonic +E--------||------------------------------------------------------------- +B--------||----------14--14^--14---------------------------------------- +G---~~~--||------16---------------16--14--12^--12--12------------------- +D--------||--16----------------------------------------12h14--14^------- +A--------||------------------------------------------------------------- +E--------||------------------------------------------------------------- + + + +E-----------------------------||---------------------------------------- +B-----------------------------||---------------------------------------- +G-----------------------------||--12~~~--12h14p12~~~------12--14--16---- +D---14--14^~~~--14p12---------||----------------------12---------------- +A----------------------12~~~--||---------------------------------------- +E-----------------------------||---------------------------------------- + + + pre-bend +E----------------------------17p15p14---------------------||------------ +B---------------17^--17----------------17p15h17h19p15~~~--||------------ +G---/19--19~~~-----------14-------------------------------||--17p16----- +D---------------------------------------------------------||------------ +A---------------------------------------------------------||------------ +E---------------------------------------------------------||------------ + + + +E--------------------------------------------------------||------------- +B--------------------------------------------------------||------------- +G---h17~~~p16p14-------------14--------------------------||------------- +D-----------------17--16h17------------------------------||------------- +A--------------------------------17p15p14--15~~~---------||------------- +E-------------------------------------------------17p15--||--14h15------ + + + +E----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G----------------------------------------------------------------------- +D------------------14h17--16~~~--14--16p12h14--14\12--12~~~------------- +A--------14h15h17--------------------------------------------16p14------ +E---h17----------------------------------------------------------------- + + + +E---||-------------------------------------------------14~~~--15p14----- +B---||---------------------------------------------14------------------- +G---||--------------------------------------14h16----------------------- +D---||----------------------14------16---------------------------------- +A---||--16p14--14~~~---\14------14------14------------------------------ +E---||------------------------------------------------------------------ + + + +E---||-----------------------------14--15--17--17^--17--15--14--15------ +B---||-----------------14--15--17--------------------------------------- +G---||--13-----14--16--------------------------------------------------- +D---||------------------------------------------------------------------ +A---||------------------------------------------------------------------ +E---||------------------------------------------------------------------ + + + pre-bend +E------------------------------------------||--------------------------- +B---17^--17^--15--17-------17----------14--||--15^--17--15--14---------- +G---------------------16^------14--16------||-------------------16------ +D------------------------------------------||--------------------------- +A------------------------------------------||--------------------------- +E------------------------------------------||--------------------------- + + + pre-bend +E-------------------------------------------------------------||-------- +B---14^--14------15--14^--14------15--14^--14------15--14~~~--||-------- +G------------16---------------16---------------16-------------||-------- +D-------------------------------------------------------------||-------- +A-------------------------------------------------------------||-------- +E-------------------------------------------------------------||-------- + + + Guitar solo! +E-----------------7--------10^--10p7--10p7------7------------7---------- +B---10^--10--10^-----10p7-------------------10-----10p7---------10------ +G--------------------------------------------------------9^------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + Tremolo picking +E-------------------||-------------------------------------------||----- +B---p7--------------||------------------------14--15--17--17~~~--||----- +G-------9p7--9^--7--||--7--9--11--12--14--16---------------------||----- +D-------------------||-------------------------------------------||----- +A-------------------||-------------------------------------------||----- +E-------------------||-------------------------------------------||----- + + + +E-------14------------------------------17------------------------------ +B-----------15--14--15------15--14--15------15--14--15------15--14------ +G---16------------------16------------------------------16-------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + +E-------19--------------17--------------------------------------||------ +B---15------15--14--15------15--14--15--14h15p14----------------||------ +G-------------------------------------------------16p14--16~~~--||------ +D---------------------------------------------------------------||------ +A---------------------------------------------------------------||------ +E---------------------------------------------------------------||------ + + + +E----------------------------------------------------------------------- +B-----------------------------------------17---------15--15h17h19------- +G----------14h16p14-------------14h16h18------16h18--------------------- +D---16h17------------17--16h17------------------------------------------ +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + +E-------------15p14h17--||--15h19p17p15--------------------15h17h19----- +B---15h17h19------------||---------------19--17--15h17h19--------------- +G-----------------------||---------------------------------------------- +D-----------------------||---------------------------------------------- +A-----------------------||---------------------------------------------- +E-----------------------||---------------------------------------------- + + + +E---21--21^--21--19--21~~~--||------------------------------------------ +B---------------------------||------------------------------10^--10----- +G---------------------------||----------8--9--8h9p8--------------------- +D---------------------------||------11---------------11--9-------------- +A---------------------------||--11-------------------------------------- +E---------------------------||------------------------------------------ + + + +E----------------||-----------------------------------9----------------- +B---10~~~--------||------------------------------12^-----12p9------9---- +G----------9h11--||--11^--11--11^-----11^--11p9----------------11------- +D----------------||----------------------------------------------------- +A----------------||----------------------------------------------------- +E----------------||----------------------------------------------------- + + + +E-------------------------------------------------||-------------------- +B---h12-------9h12--9--------------9--------------||-------------------- +G--------11^-----------11p9-----------11p9--------||----------8--9------ +D----------------------------11p9-----------9~~~--||------11------------ +A-------------------------------------------------||--11---------------- +E-------------------------------------------------||-------------------- + + + Tremolo picking +E-----------------------------------------------------------||---------- +B-----------------------------------------------------------||---------- +G---8h9p8---------------------------------------------------||---------- +D----------11--9--9\7--7~~~--------6--7--9--11--13--14--16--||--18------ +A----------------------------7--9---------------------------||---------- +E-----------------------------------------------------------||---------- + + + +E---------------------------------17^--17--17--------------16--19------- +B-------16--17--16h17p16-----------------------17h19--19^--------------- +G---18--------------------18--16---------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + +E-------19------19---------16---------14--------12-------11-------9----- +B---17------16---------------------------------------------------------- +G-------------------16\13------13\11------11\9------9\8------8\6-------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + +E--------||--------------------------------------------------||--------- +B--------||----------16--17--16h17p16------------------------||--------- +G---6\4--||------18--------------------18--16--16\14--14~~~--||--13----- +D--------||--18----------------------------------------------||--------- +A--------||--------------------------------------------------||--------- +E--------||--------------------------------------------------||--------- + + + +E----------------------------------------------------------------------- +B-----------------------------17p16--17h19p17p16---------16p14--17------ +G---p11--14p13--16p14--18p16----------------------18p16----------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + + +E----------------------17p16--17h19p17p16------------21^--||------------ +B---p16--19p17--21p19----------------------19p17----------||------------ +G---------------------------------------------------------||------------ +D---------------------------------------------------------||------------ +A---------------------------------------------------------||------------ +E---------------------------------------------------------||------------ + + + + +======================================================================== +== TABLATURE EXPLANATION == +======================================================================== + +---------- ---------- ----t--- +----5h8--- Hammeron ----(8)--- Ghost ----6--- Tap +---------- ---------- Note -------- +----5p8--- Pulloff ---------- -------- + +---------- ---------- -----p-- +----5/8--- Slide Up -----x---- Dead -----7-- Pop +---------- ---------- Note --s----- +----5\8--- Slide Down ---------- --5----- Slap + +---------- ||------|| Repeat -------- +----5~~~-- Vibrato ||*----*|| ---5^--- Bend +---------- ||*----*|| -------- +---------- ||------|| -------- + +---------- ---------- -------- +-4:------- Time ---------- -------- +-4:------- Signature ---------- -------- +---------- ---------- -------- + +Rhythm: + w = whole note W = dotted whole + h = half note H = dotted half + q = quarter note Q = dotted quarter + e = eighth note E = dotted eighth + s = sixteenth note S = dotted sixteenth + t = 32nd note T = dotted 32nd + x = 64th note X = dotted 64th + ^ = triplet + +======================================================================== +== Created with a demo version of BUCKET O' TAB == +== tablature creation software for Windows == +== For more info email gse@his.com == +======================================================================== + diff --git a/guitar/tabs/Misc/Violin Things to Guitar.tab b/guitar/tabs/Misc/Violin Things to Guitar.tab new file mode 100644 index 0000000..c7739eb --- /dev/null +++ b/guitar/tabs/Misc/Violin Things to Guitar.tab @@ -0,0 +1,134 @@ + + Johann Sebastian Bach + Violin Things to Guitar + Interpreted By : VVV + + Practice your Solo playing with these classical things + and maybe you might start to use these for your own solos. + + if you have any questions about these or if you are thirsty for more + mail me in my personal hotmail. + vokkolainen@hotmail.com + + (i could give you more of these but i must to know how good you are.) + + + Part 1 : Fast Picking (you could easily use this with Hard' rock and Heavy) + don't use pull off or hammer on's + + I-------------7-5---------------------5-------------I + I---6-5---5-6-----8-6-5-------5-----5---8-6-5-3-1---I + I-------7---------------7-5-7---7-5-----------------I + I-0-------------------------------------------------I + I---------------------------------------------------I + I---------------------------------------------------I + + Part 2 : Practice your touch with sweeps + + sweep sweep sweep sweep + I--------------------------------3h8p3---I--------6-------6---6----0-1-5-------5---5--I + I-------------------------------3-----3--I----5-8-----------------1------1---1---1----I + I------------------------------3-------3-I---5------5p3h5---5----2---------3----------I + I-------8---------------------5---------5I--5-------------------3---------------------I + I-5-6-8---8p5-----5h8p5------5-----------I-7------------------------------------------I + I-------------6h8-------6h3p6------------I--------------------------------------------I + + CIOLLANA + + Part 3 : Harder Sweeps (this part is really good for snack) + (check timings of these sweeps) + + sweep sw... sw.... sw.. sw. sw..... sw....... sw..... + I-----------------------------------------I------------------------I + I-----6-------6------5------4-5-----5-5---I---4-5-----5------------I + I---3--3----3--3---3--3-------------------I------------------------I + I--5----5--5----5-5----5---3---3---3---3--I--3---3---3-------------I + I-------------------------------0h0-----0-I-1-----1h1--------------I + I-3------3-------3------3-5---------------I------------------------I + + Part 4 : Fast Up running, Picking by Johann Sebastian Bach + (This in quite easy and normal but SO ?) + + I-------------------------I + I-------------676---------I + I----------579---975------I + I-------579---------975---I + I----578---------------87-I + I-568---------------------I + + Part 5 : Play Rythm for Violin + + I-----0-----0-----1-I-0-----0-----0----I-0-----1-0-----1-0-----3-I + I-3-----3-----3-----I---3-1---3-1--3-0-I---1-------1-------1-----I +3I---0-----0-----0---I-0-----0-----0----I-----0-------0-------0---I +-I-------------------I------------------I-------------------------I +4I-2-----2-----2-----I---3-----3----3---I-1-------2-------2-------I + I-------------------I------------------I-------------------------I + + SONATA 3 : FUGA + 3 + Part 6 : Nice - Picking thing (if you could play Part 4, Learn this) + 4 + + I------------------------I-------------10----10----I-------------12----12---I + I------10-12-13-10-13----I----10-12-13----12----10-I----12-13-15----13----11I + I-9-12----------------12-I-10----------------------I-12---------------------I + I------------------------I-------------------------I------------------------I + I------------------------I-------------------------I------------------------I + I------------------------I-------------------------I------------------------I + (cresc) + LARGO + + Part 7 : This thing is quite typical for rock but there is still some + classic stuff in it. (this is really cool) + + I--------------------------------------------------------------------------I + I--------------------8---------------------12-10-12-15-13------------------I +3I-------------7-9-10---9----------10-12-14---------------------------------I +-I------7-8-10------------10-12-14---------------------------9h10p9---------I +4I-7-10----------------------------------------------------8--------12p10---I + I--------------------------------------------------------------------------I + + Part 8 : Pull off practice (easy one) + + I-----------------3------------------I +3I---2p0h1h3p1p0h1---1p0h1------------I +-I------------------------------------I +4I-0----------------------------------I + I------------------------------------I + I------------------------------------I + + Part 9 : Pull off practice 2 (maybe a little harder) + + I----------------------------I-------------------------------I + I--------------------4p3p1p0-I---------------------7p3p5H6---I +3I-7p5p3-----7p4--------------I-----------5-------------------I +-I-------7-------7p5----------I-7p3---------3p2p0-------------I +4I----------------------------I-----7p5-----------------------I + I----------------------------I-------------------------------I + + SONATA 1 + + Part 10 : Practice your fast technique with classical touch + + I-----------7--------------------------------------------------------------I + I----------------8---------------------------------------------------------I +3I-----8-7-7---11-7-7h8p7---------------------------------------------------I +-I-8-7--------------------10p8h10-------------------12----------------------I +4I--------------------------------12h14----------------15p13h15---15p13h15--I + I--------------------------------------14h15p10h11-------------------------I + + IF YOU WANT MORE OF THESE CLASSIC, JAZZ, BLUES OR LATIN techniques + mail me. + + BUT IF YOU WANT SOME ROCK STUFF OR SOME TABLATURES mail us in + Ultimate Tablature Page (tabisivu@hotmail.com) + + YOU MIGHT AS WELL VOTE YOUR FAVOURITE GUITAR SLINGER IN US + JUST MAIL OUR CONTEST utp_contest@hotmail.com + + WE SEE YOU IN ADRESS come/to tabs + + SEE YOU..... + + diff --git a/guitar/tabs/Misc/Zakk Wylde Exercises 4.prj b/guitar/tabs/Misc/Zakk Wylde Exercises 4.prj new file mode 100644 index 0000000..c3c1109 --- /dev/null +++ b/guitar/tabs/Misc/Zakk Wylde Exercises 4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Zakk Wylde Exercises 4.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16) diff --git a/guitar/tabs/Misc/Zakk Wylde Exercises 4.tab b/guitar/tabs/Misc/Zakk Wylde Exercises 4.tab new file mode 100644 index 0000000..847ef19 --- /dev/null +++ b/guitar/tabs/Misc/Zakk Wylde Exercises 4.tab @@ -0,0 +1,20 @@ +Zakk Wylde Exercises 4 + + +Hey Dudes whats up, ive got another Wylde lick here due to popular demand. Next one is another lick zakk did in Total Guitar. Its a G minor Penatonic lick and you should make the effort to get this one down. Just remember next time your sittin there watchin tv, just think, man i could be getting better if i went and played guitar. You know how vai, wylde, malmsteen, satch, morse, dimebag etc got like gods? Because they practised a f@ck of alot. And thats the only way, so get shredding on this one! + +Dont hesitate to ask me to tab anything, chances are if its good metal, i'l have it. Cheers, bennett +crunch_metal@hotmail.com + + + +Key = C minor Penatonic + + + E |-----------------------3-3--------------------------| + B |-------------------3-6-----6-3----------------------| + G |---------------3-5-------------5-3------------------| + D |-----------3-5---------------------5-3--------------| + A |-----1-3-5-----------------------------5-3-1--------| + E |-1-3-----------------------------------------3-1-3--| + diff --git a/guitar/tabs/Misc/blackdream.prj b/guitar/tabs/Misc/blackdream.prj new file mode 100644 index 0000000..28dd99b --- /dev/null +++ b/guitar/tabs/Misc/blackdream.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=blackdream.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16) +TEMPO=651578 diff --git a/guitar/tabs/Misc/blackdream.tab b/guitar/tabs/Misc/blackdream.tab new file mode 100644 index 0000000..dea5cce --- /dev/null +++ b/guitar/tabs/Misc/blackdream.tab @@ -0,0 +1,54 @@ +Blackdream + + + + +A lick in Em7 + + + +A lick in Em7 + + + +Key = + + Em7 +|-------------------------------------------------| +|-------------------------------------------------| +|-------------------------------------------------| +|----------------------------------12-14----------| +|----------12-14----------12-13-14-------12-13-14-| +|-12-14-15-------12-14-15-------------------------| + +|-------------------------------15-19-------------| +|----------------------------15-------17----19----| +|----------12-15----------16-------------14----16-| +|-12-14-16-------12S14-17-------------------------| +|-------------------------------------------------| +|-------------------------------------------------| + +|-------------------------------------------------| +|-------------------------------------------------| +|----19-------------------------------------------| +|-14----17----------------16-------16-17-------17-| +|----------14-17-------17-------17-------15-19----| +|----------------15-19-------19-------------------| + + |------6-------| |------6-------| |------6-------| +|-------------------------------------------------------------------| +|-------------------------------------------------------------------| +|-16-------16-21p19p17h19p17p16-17-16-15-16-15-14-15-14-12----------| +|-------17-------------------------------------------------14-------| +|----19-------------------------------------------------------14----| +|----------------------------------------------------------------15-| + + ~~~~~ +|--------------|| +|--------------|| +|--------------|| +|--------------|| +|-12-----------|| +|--------------|| + + diff --git a/guitar/tabs/Misc/boc.prj b/guitar/tabs/Misc/boc.prj new file mode 100644 index 0000000..682947b --- /dev/null +++ b/guitar/tabs/Misc/boc.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=boc.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,8)(210,8)(211,8)(212,8)(213,8)(214,8)(215,8)(216,8)(217,8)(218,8)(219,8)(220,8)(221,8)(222,8)(223,8)(224,8)(225,8)(226,8)(227,8)(228,8)(229,8)(230,8)(231,8)(232,8)(233,8)(234,8)(235,8)(236,8)(237,8)(238,8)(239,8)(240,8)(241,8)(242,8)(243,8)(244,8)(245,8)(246,8)(247,8)(248,8)(249,8)(250,8)(251,8)(252,8)(253,8)(254,8)(255,8)(256,8)(257,8)(258,8)(259,8)(260,8)(261,8)(262,8)(263,8)(264,8)(265,8)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16) +TEMPO=651578 diff --git a/guitar/tabs/Misc/boc.tab b/guitar/tabs/Misc/boc.tab new file mode 100644 index 0000000..90289ab --- /dev/null +++ b/guitar/tabs/Misc/boc.tab @@ -0,0 +1,423 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: tgannon@charlie.usd.edu (spideir) + + **"BOC's GREATEST RIFFS" (Blue Oyster Cult)** + ====================== + For all those BOC fans out there--BOTH of yu' >:-} --or for those + just curious about "vintage metal": hey, Sabbath wasn't the only + band that Metallica, et al. cut their teeth on. . . . + + --transcr./tabbed tcg, 197?[yeh, I'm old]-1994 + --fuzz box: all . . . [hell, I use TWO fuzz boxes] + --regarding "key" names: major-minor distinction often meaningless, + since rhythm guitar usually playing "chords" with no third + ("power chords"), and the leads in the "major" keys are often + Mixolydian mode or pentatonic minor. . . (In "straight" minor-key + tunes, Buck Dharma shows a preference for the Aeolian mode + [=minor pentatonic, plus "tasty" major 2nd and minor 6th steps].) + --Disclaimer: these are hacker's versions, admittedly--above all, + trust your ear . . . + + + ==================== + **"TRANSMANIACON MC" (_Blue_Oyster_Cult_) --key: Am + + Intro riff + D5 [chord tacit] [repeat] + |------------------|------------------|------------------|------------------| + |------------------|------------------|------------------|------------------| + |o------7------7---|-------7------7---|------------------|-----------------o| + |o--x-x-7--x-x-7---|---x-x-7--x-x-7---|----7-6---5-4-----|-----------------o| + |---x-x-5--x-x-5---|---x-x-5--x-x-5---|--0-----7-----5-4-|-8-7-----7-6------| + |------------------|------------------|------------------|-----8-7-----7-6--| + 1 & 2& 3 & 4& 1 & 2& 3 & 4& 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + + + neat chromatic, "haunting" lead fill (end of Verse) + [Am] [C] + ---|-------------------------|----- + ---|----8--7--6--5-----------|----- + ---|----------------8--7--6--|-5=== + ---|-------------------------|----- + ---|-------------------------|----- + ---|-------------------------|----- + 1 & 2 & 3 & 4 & 1... + + + ====================================== + **"CITIES ON FLAME WITH ROCK AND ROLL" (_Blue_Oyster_Cult_) --key: F#m + + Intro/lead tacit riff + |------------------|------------------|------------------|------------------| + |------------------|------------------|------------------|------------------| + |o-----------------|------------------|------------------|-----------------o| + |o-----------------|------------------|-----------4------|2-----2----------o| + |----------0=======|------------------|-----0-3h4---3h4--|--3h4---3\2\0-----| + |--2=======--------|-2===-------------|---2--------------|--------------2-0-| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + + + =========== + **"SCREAMS" (_Blue_Oyster_Cult_) --key: Em + + Intro/Verse riff [right-hand muffle] + [Em] [G] [F#m] [Am] + |----------------------|----------------------| + |----------------------|----------------------| + |o---------------------|---------------------o| + |o--------2------------|---------------------o| + |------2---------------|-----0--4--3=====x----| + |---0--------3=====x---|--2-------------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + + + ========================== + **"THE RED AND THE BLACK" (_Tyranny_and_Mutation_) --key: Am + + Intro/Verse riff [very fast] + [A5] v^* + |--------------------------------| + |--------------------------------| *: quick up-then-down pick + |o------------------------------o| + |o------------------------------o| + |-----------3~----3--------------| + |-----5--5---------5--5--3--4----| + 1 & 2 & 3 & 4 & + + + ======================= + **"OD'd ON LIFE ITSELF" (_Tyranny_and_Mutation_) --key: E + + Intro/Verse riff + [E5] + ----|-----------------|-----------------|-----------------|-----------------| + ----|-----------------|-----------------|-lead gu.:---8b9-|-------------8b9-| + ----|o----------------|----------------o|o----------------|----------------o| + ----|o------.--.--.---|-------.--.--.--o|o------.--.--.---|-------.--.--.--o| + --2=|==2-2--4--5--4-2=|==2-2--4--5--4-2=|==2-2--4--5--4-2=|==2-2--4--5--4-2=| + --0=|==0-0--0--0--0-0=|==0-0--0--0--0-0=|==0-0--0--0--0-0=|==0-0--0--0--0-0=| + 4 & 1 & 2 3 4 & 4 & + + + ===================== + **"HOT RAILS TO HELL" (_Tyranny_and_Mutation_) --key: E + + Intro/Verse riff + E5 G5 F#5 + |-------------------------|---------------------------| + |-------------------------|---------------------------| + |o------------------------|--------------------------o| + |o------2--x--------2--x--|--------------------------o| + |-------2--x--------2--x--|-----5--x--5--5--5--4--4---| + |-0--0--------0--0--------|--0--3--x--3--3--3--2--2---| + ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . + + + "bridge" lead riff [--actually an amalgam of 1st & 2nd versions] + --"neat" mixolydian . . . choke pick for "ragged" sound + [A7] + -|-----------------|------------------|------------------|-----------------|- + -|-----------------|------------------|------------------|-----------.-----|- + -|--.---.---.------|---.-----------.--|--.--.-----.---.--|---.-------2-----|- + -|--5---4---2--4-5-|---4--------2--4--|--5--4-----2---5--|---4-------------|- + -|-----------------|-------3-4--------|-------3h4--------|-------3h4-------|- + -|-----------------|------------------|------------------|-----------------|- + 1 2 3 4 & 1 & 2 & 3 & 4 1 2 & 3 & 4 & 1 & 2 & 3 & 4 & + + + "bridge" lead riff--"neat" dorian + [though string choices may be way off?!] [gliss-slide up for + [E5] octave-higher riff |] + -|--0-------------------------|-----------------------/---| | + -|--5\3--2--0--(2b)3r2--0-----|----------------------/----| | + -|-------------------------2--|--(4b)6r4---x-0------/-----| v + -|----------------------------|----------------2===/------| + -|----------------------------|---------------------------| + -|----------------------------|---------------------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 + + |--12---------------------------------|---------------------------------|- + |------15\14--12--(14b)15r14--12--10--|-(12b)14r12----------------------|- + |-------------------------------------|--------------x-12--------12b13--|- + |-------------------------------------|------------------14--14---------|- + |-------------------------------------|---------------------------------|- + |-------------------------------------|---------------------------------|- + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + + + ================== + **"CAREER OF EVIL" (_Secret_Treaties_) --key: Am + + Intro/Verse riff + A5 C5 D5 + |-----------------------|-------------------------| + |-----------------------|-------------------------| + |o----------------------|------------------------o| + |o-------------5---x--5/|7--7--6-----5--4--------o| + |---7---x--7---3---x--3/|5--------7--------5--3---| + |---5---x--5------------|-------------------------| + ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . + + + ============================ + **"DOMINANCE AND SUBMISSION" (_Secret_Treaties_) --key: F#m + + Intro/Verse riff + F#5 A5 F#5 B5 F#5 C5 F#5 G#5 C#7#9 + ----|-----------------|-----------------|-----------------|-----------------| + ----|-----------------|-----------------|-----------------|---------5---x---| + ----|o----------------|-----------------|-----------------|---------4---x--o| + ----|o--------2---x---|---------4---x---|---------5---x---|---------3---x--o| + --4=|=4-4-x-x-0---x-4=|=4-4-x-x-2---x-4=|=4-4-x-x-3---x-4-/-6-6-x-x-4---x-4=| + --0-h-2-2-x-x-------0-h-2-2-x-x-------0-h-2-2-x-x-------2-/-4-4-x-x-------0-h + . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . + + + ===================== + **"HARVESTER OF EYES" (_Secret_Treaties_) --key: E + + Intro/Verse riff [hold all "chords" (over e pedal point)] + E5 F#5 G#5 F#5 E5 F#5 G5 F#5 E5 + ---|--------------------------|--------------------------| + ---|--------------------------|--------------------------| + ---|o-------------------------|-------------------------o| + -2=|o=====--4--5======--4--2==|======--4--5======--4--2=o| + -2=|======--4--5======--4--2==|======--4--5======--4--2==| + ---|--0--0======--0--0======--|--0--0======--0--0======--| + . ^ . ^ . ^ . ^ . ^ . ^ . ^ . ^ . + + + ============= + **"ASTRONOMY" (_Secret_Treaties_) --key: Em + + Lead tacit (before final Chorus)--slowly + [Em] + ||--15==hold=thru==|------------------|--12==============|------------------| + ||-----------------|--13=========--15-|------------------|------------------| + ||-----------------|------------------|------------------|--12=========--14-| + ||-----------------|------------------|------------------|------------------| + ||-----------------|------------------|------------------|------------------| + ||-----------------|------------------|------------------|------------------| + 1 2 3 4 1 2 3 4 & 1 2 3 4 1 2 3 4 & + + [ quarter - note triplets ] + |----------------|----------------|-----------------14-|--15-17-14-15-12-14-| + |--12============|----------------|--------12----15----|--------------------| + |----------------|-------------11-|--12-14----14-------|--------------------| + |----------------|--14=======-----|--------------------|--------------------| + |----------------|----------------|--------------------|--------------------| + |----------------|----------------|--------------------|--------------------| + 1 2 3 4 1 2 3 4 & |---3---||---3---| |---3---||---3---| + + [ 16th notes ] [ 16th notes ] + |--12==========-------12--------------|----------------------------12h14---|| + |----------------12-------15--12------|----------------------12h15---------|| + |---------------------------------14--|--12==========--12h14---------------|| + |-------------------------------------|------------------------------------|| + |-------------------------------------|------------------------------------|| + |-------------------------------------|------------------------------------|| + 1 2 3 & 4 & & & 1 2 3 & & & 4 & & & + + [ 16th notes ] [16th notes] . + |--12===========--14----14----14-15===|==15==========--15-/-17-17----17----|| + |--------------------15----15---------|------------------------------------|| + |-------------------------------------|------------------------------------|| + |-------------------------------------|------------------------------------|| + |-------------------------------------|------------------------------------|| + |-------------------------------------|------------------------------------|| + 1 2 3 & & & 4 & & & 1 2 3 & & & 4 + + + ================================== + **"THEN CAME THE LAST DAYS OF MAY"(_On_Your_Feet_or_On_Your_Knees_)--key:Bm + + Lead Solo--slowly; heavy reverb, left-h. vibrato on "held" notes + [--IMHO, Buck's most "transcendental" solo--] + h=half note; h.=dotted half + q=quarter note; q.=dotted quarter; q..=quarter+eighth+sixteenth + e=eighth note; e.=dotted eighth; e3 e3 e3=eighth-note triplets + s=sixteenth note; s.=dotted sixteenth + t=thirty-second note + [s],[e]...=sixteenth-note rest, eighth-note rest, etc. + + [Bm] [A] [G] [F#7] [chords sim. . . . . . . . . . . . .] + ||-----------------|------------------|------------------|------------------| + ||-7======---------|-7==========------|------------------|------------------| + ||---------9=======|---------------9--|-7======--6=======|-4======--6=======| + ||-----------------|------------------|------------------|------------------| + ||-----------------|------------------|------------------|------------------| + ||-----------------|------------------|------------------|------------------| + h h h. [e] e h h h h + + [slide up + |-------------------------------------|----------------------------9/10\----| + |------------------------------8\7====|===7==========------11-12------------| + |--7p6==========----/9----------------|-------------------------------------| + |----------------------9----9---------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + s q.. [e] s s e3 e3 e3-------h [e3] e3 e3 e e + + and back] + |-(\)9======---------9/10======-------|-----------------------------------9-| + |-------------------------------------|-------------------------------11----| + |------------11-11--------------11-11-|--9-11================------11-------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + q. s s e q s s s s--h [s] s e e + + |-(9/)10--9--10/12--------------------|-------------------13/14-------------| + |------------------12=========-----12=|==12--12-----------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + e e s s h [s] s------e q. s q.. + + [???????] [??????] + |---15b16r15~~~------12-14-10-12-9-10-|--10b12r10----7------9---------------| + |---------------------x---------------|------------------------11====-------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + [s] s q e [e] s s s s s s e e e q s s--q + + |-------10--9--7----------------------|---10--9--7-------------------10--9--| + |-----------------7==================-|-------------------------------------| + |-------------------------------------|-------------9================-------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + [q] s s s s---h [e] s s s s-h s s + + |---7---------------------------------|-------------------------------------| + |--------------------------------/12==|===12========================------7h| + |------7--9/11=============--9-7------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + e e e e--q s s e-------h. [e.] s + + [ho/po trill] (no pick) + |-------------------------------------|-------------------------------------| + |10p7h10p7===========================-|-----2--3--2h3p2==============-(/7)==| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + t t t t-e-h. [q.] s s t3t3t3-q. e + + |-----------------------------------------|---------------------------------| + |=7-7h10p7h10p7h10p7h10p7==========-------|------------------2=====(/7)---7h| + |---------------------------------------7-|--9\4===========-----------------| + |-----------------------------------------|---------------------------------| + |-----------------------------------------|---------------------------------| + |-----------------------------------------|---------------------------------| + s. t t t t t t t t t-h [s] s e e-q q e. s + + (no pick) + |-------------------------------------|-------------------------------------| + |10p7h10p7h10p7h10p7=7==========------|-----------------------------2h3p2h3p| + |-----------------------------------9-|---9b10r9---(\6)===========----------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + t t t t t t t t-q [s] s e q e q. t t t t + + sl + |-------------------------------------|-------------------------------------| + |2h3p2h3p2===-3-----------------------|-------------------------------------| + |-----------------4=============---6--/--7=========================---------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + |-------------------------------------|-------------------------------------| + t t t t q e q. e h. [q] + + + =========================== + **"(Don't Fear) THE REAPER" (_Agents_of_Fortune_) --key: Am + + Intro/Verse riff--legato + A5 G F G + |--------------------------|---------------------------| + |--------------------------|---------------------------| + |o-------2--0=========--0==|=========--0=========--0==o| + |o----2--------------0-----|--------0-----------0-----o| + |--0--------------2--------|-----0-----------2---------| + |--------------3-----------|--1-----------3------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + + + ========================================== + **"E.T.I. (ExtraTerrestrial Intelligence)" (_Agents_of_Fortune_) --key: E + + Intro/Verse riff + E5 A [ 16th notes ] [16th's] + |--------------------------|-----------------------------------| + |--------------------------|-----------------------------------| + |o-------------------------|----------------------------------o| + |o--2=====------2=====-----|----------------------------------o| + |---2=====------4=====-----|--------------2-4-5-5-4---2--------| + |---0=====------0=====-----|--x-0-2-0-3-4-----------------3\2--| + 1 & 2 & 3 & 4 & 1 & & & 2 & & & 3 & & & 4 & & & + + + ============ + **"GODZILLA" (_Spectres_) --key: F#m + + Intro/Verse riff + F#5 B5 C#5 G#5 A5 D#5 E5 B5 + |-----------------------------|----------------------------| + |-----------------------------|----------------------------| + |o----------------------------|---------------3---4-------o| + |o-----------------4---6------|---------------1---2---4---o| + |---4============--2---4---6--|--7==========----------2----| + |---2============----------4--|--5==========---------------| + 1 2 3 & 4 & 1 2 3 & 4 & + + + =================== + **"BURNING FOR YOU" (_Fire_of_Unknown_Origin_) --key: Am + + Lead Intro [*: rhythm gu.: hold chord full two measures] + [F5] [3 times] + ||------------------------------|--------------------------------|| + ||--------------------------8===|====8---------------------------|| + ||o--*---/9-----7-h9p7---5------|----------/9-----7-h9p7---5----o|| + ||o-[3]-------------------------|-------------------------------o|| + ||--[3]-------------------------|--------------------------------|| + ||--[1]-------------------------|--------------------------------|| + 1 2 3& & & 4 & 1 2 3& & & 4 + + [G] [Am] [F] [G] |---3---| + |------------------|---8-7---8--------|------------------|---------------7--| + |---8==============|----------------8=|==8===------------|-----------10-----| + |------------------|-----------9-10---|-------10-9==-----|------------------| + |------------------|------------------|------------------|------------------| + |------------------|------------------|--------------10==|==10=====10-------| + |------------------|------------------|------------------|------------------| + 1 2 3 4 1 & 2 & 3 & 4 & 1 2 3 & 4 & 1 2 3 4 + + [Em] [F] |--3--| [Dm] [G] + |------------------|----------------------|-------8-12-------|----15=======|| + |--8========----8--|(8)/10----------------|----10------15----|-------------|| + |-------------9----|----------------7--9--|-10------------12=|=12----------|| + |------------------|-------10====10-------|------------------|-------------|| + |------------------|----------------------|------------------|-------------|| + |------------------|----------------------|------------------|-------------|| + 1 2 3 4 & 1 & 2 & 3 & 4 & |--3---||---3---| 1 & 2 3 4 + + *===*===*===*===*===*===*===*===*===*===*===*===*===*===*===*===*===*===* + | Thomas C. Gannon | tgannon@charlie.usd.edu | U of SoDak (Vermillion) | + * ------------------------------- _-^-_ ------------------------------- * + | "--If I decide to practice a / o )=\ slight movement from right | + * to left . . . or from left { /===} to right . . . it's * + | nobody's business but my \ (=o=/ own." (_A_Day_for_Eeyore_) | + *===*===*===*===*===*===*===*===* ^-_=^ *===*===*===*===*===*===*===*===* + + diff --git a/guitar/tabs/Misc/boys_are_back_in_town.prj b/guitar/tabs/Misc/boys_are_back_in_town.prj new file mode 100644 index 0000000..6d1a0df --- /dev/null +++ b/guitar/tabs/Misc/boys_are_back_in_town.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=boys_are_back_in_town.tab +TYPES=(0,4)(1,4)(2,8)(3,8)(4,8)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4) diff --git a/guitar/tabs/Misc/boys_are_back_in_town.tab b/guitar/tabs/Misc/boys_are_back_in_town.tab new file mode 100644 index 0000000..1afca1c --- /dev/null +++ b/guitar/tabs/Misc/boys_are_back_in_town.tab @@ -0,0 +1,125 @@ +This is a very simplified version of some published tab. It's not quite +complete yet, as it's missing the bridge and solo bits, but here are the +intro, verse and chorus patterns to get you started. I'll post the updated +version later ... + + +INTRO PATTERN (also used elsewhere) +[play 4 times for intro] + +e:---------------------------------------------| +B:---------------------------------------------| +G:---------------------------------------------| +D:----------------------------------------7----| +A:---7-----7--9--9--9--7----7--9----9-----5----| +E:---5--------------------9---------7----------| + + + +VERSE PATTERN (repeat as necessary) + + + A5 C#m/G# D + Guess who just got back today them wild - eyed boys + You know that chick that used to dance alot every night she'd be on +e:------------------------------------4-----4--4-----------------------------| +B:------------------------------------5-----5--5------------7------7---7-----| +G:---2-----------2---2----------------6-----6--6------------7------7---7-----| +D:---2-----------2---2----------------6-----6--6------------7------7---7-----| +A:---0-----------0---0----------------4-----4--4------------5------5---5-----| +E:---------------------------------------------------------------------------| + + + F#sus4 C#m7 F#sus4 + hat had been away haven't changed, hadn't much to say + the floor shakin' what she'd got man when I tell you she was cool, she +e:----------------------------------4----------4----4------------------------| +B:----------2-----2-----------------5----------5----5----------2-------2-----| +G:----------4-----4-----------------4----------4----4----------4-------4-----| +D:----------4-----4-----------------6----------6----6----------4-------4-----| +A:----------4-----4--------------------------------------------4-------4-----| +E:----------2-----2--------------------------------------------2-------2-----| + + + + D E11 + but man, I still think them cats are crazy (etc. repeat) + was red hot I mean, she was steaming (etc. repeat) +e:-------------------------------------------------2-------------------------| +B:-------------------7---------7-----7-------------3-------------------------| +G:-------------------7---------7-----7-------------2-------------------------| +D:-------------------7---------7-----7-------------2-------------------------| +A:-------------------5---------5-----5-------------2-------------------------| +E:---------------------------------------------------------------------------| + + + +CHORUS PATTERN (repeat as necessary) + + + A B5 D + The boys are back in town + The boys are back in town +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:------2-----------------------------------------------4------------7-------| +D:------2-----------------------------------------------4------------7-------| +A:------0-----------------------------------------------2------------5-------| +E:---------------------------------------------------------------------------| + + + A B + I said, the boys are back in town + The boys are back in town (etc. +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:----------------2----------------------------------------------4-----------| +D:----------------2----------------------------------------------4-----------| +A:----------------0----------------------------------------------2-----------| +E:---------------------------------------------------------------------------| + + + D + + repeat as necessary) +e:----------------------| +B:----------------------| +G:--7-------------------| +D:--7-------------------| +A:--5-------------------| +E:----------------------| + + + + CHORUS RIFF + A A/B Aadd9/C# +e:-----------------------------------|----------------------| +B:-----------------------------------|----------------------| +G:----6----------------------6-------|--------------9-------| +D:---------7----7--9--7-----------7--|--7--9--7----------7--| +A:-----------------------------------|----------------------| +E:-----------------------------------|----------------------| + + + + + E7 A A/B +e:------------------------------------------|---------------------| +B:------------------------------------------|---------------------| +G:--------------7--7--7--7--6-------6-------|-------------6-------| +D:--7--9--7--------------------9---------7--|--7--9--7---------7--| +A:------------------------------------------|---------------------| +E:------------------------------------------|---------------------| + + + + + Aadd9/C# E7 +e:----------------------------------------------------------| +B:----------------------------------------------------------| +G:-------------9--------------------9--7--7--6--------------| +D:--7--9--7---------7----7--9--7----------------7-----------| +A:--------------------------------------------------4--4--2~| +E:----------------------------------------------------------| + + diff --git a/guitar/tabs/Misc/californiadreaming.prj b/guitar/tabs/Misc/californiadreaming.prj new file mode 100644 index 0000000..ce8b3a4 --- /dev/null +++ b/guitar/tabs/Misc/californiadreaming.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=californiadreaming.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4) +TEMPO=651578 diff --git a/guitar/tabs/Misc/californiadreaming.tab b/guitar/tabs/Misc/californiadreaming.tab new file mode 100644 index 0000000..3a296ef --- /dev/null +++ b/guitar/tabs/Misc/californiadreaming.tab @@ -0,0 +1,103 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive +Dec 02: 20919 files + Guitar Tab + Everything + Rock + Pop + Jazz + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / m / mommas_and_the_poppas / california_dreaming_solo.tab / [Click Here For A Printer Friendly Copy] + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +Date: Wed, 1 Nov 2000 19:37:36 -0500 +From: "LaMont Feske" +Subject: m/mommas_and_the_poppas/california_dreaming_solo.tab + +California Dreamin' (flute solo) +Performed by The Mommas and The Poppas +TABed by LaMont Feske + +*KEY* +++ let ring +/ slide +5^ bend +v vibrato +h p hammer, pulloff +() short note + +E |--------------------------------------------------------------------| +B |--------------------------------------------------------------------| +G |10-10++-10h9p10(10)++--9-10/12v—10h9p10(10)++--9-10++-9-10/12^-10h9-| +D |--------------------------------------------------------------------| +A |--------------------------------------------------------------------| +E |--------------------------------------------------------------------| + +E |-----------------------------------10—12/13h10p12v---| +B |--------------11-11-11^10-10++--12-------------------| +G |5++-6++-7++------------------------------------------| +D |-----------------------------------------------------| +A |-----------------------------------------------------| +E |-----------------------------------------------------| + +E |10-12/13h10p12v-10-11-13-14^14^14^12h10p14/16^16^16^18h16p17-| +B |-------------------------------------------------------------| +G |-------------------------------------------------------------| +D |-------------------------------------------------------------| +A |-------------------------------------------------------------| +E |-------------------------------------------------------------| + +E |12-14/15h12p14v-12-14/16h12p14v-| +B |--------------------------------| +G |--------------------------------| +D |--------------------------------| +A |--------------------------------| +E |--------------------------------| + +E |-12-14—16^16^16/15^15^15/12^12^12/9^9/6^6/5^5+++----------| +B |----------------------------------------------------------| +G |----------------------------------------------------------| +D |----------------------------------------------------------| +A |----------------------------------------------------------| +E |----------------------------------------------------------| + +This is my first TAB, so let me know if you have any corrections. +LaMont Feske + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Misc/ericj.tab b/guitar/tabs/Misc/ericj.tab new file mode 100644 index 0000000..9256bdd --- /dev/null +++ b/guitar/tabs/Misc/ericj.tab @@ -0,0 +1,59 @@ +Guitar Solo Introduction: + +|---15'-15-12-14----12-------|-12-----------------12-15-14-12----14-12------| +|----------------15----12-15'|----15-12-----12-15-------------15-------15-12| +|----------------------------|----------14'---------------------------------| +|----------------------------|----------------------------------------------| +|----------------------------|----------------------------------------------| +|-O--------------------------|----------------------------------------------| + + +|-1O-12-1O-------1O--------1O-------------|-------5-7-6-5----------------------| +|----------12-1O----12-1O'----12-1O'1Op8--|---5-8---------8-5---5-7---5--------| +|----------------------------------------9|-7-----------------7-----4---7-4----| +|-----------------------------------------|---------------------------------7-5| +|-----------------------------------------|------------------------------------| +|-----------------------------------------|------------------------------------| + + +|---------------------------------------|--------------------7----8h10-8---| +|---------------------------------------|---------------8-1O---1O--------12| +|-4-----------------------------12'-(12)|-----9------11--------------------| +|---7-5-----5-2-----2-------------------|---7------9-----------------------| +|-------7-5-----5-2---5-2---------------|----------------------------------| +|-------------------------5-3-O---------|-8-----1O-------------------------| + + +|---------------------------------------------15-15----15|----15----15----15----15----15---| +|------12-------13-------15-------17-------19-------19---|-------------------------17----19| +|----9---------------------------------------------------|-19----------------17------------| +|------------14-------17-------17-------19---------------|-------19----17------------------| +|-1O------12-------14-------15-------17------------------|---------------------------------| +|--------------------------------------------------------|---------------------------------| + + +|-15----15----15----15----15----15----15|----15----15----15----15----15----15----15----17| +|----------------------------17----19---|-------------17----19----------------17----19---| +|----19----------------17---------------|-19----17----------------17----17---------------| +|----------19----17---------------------|------------------------------------------------| +|---------------------------------------|------------------------------------------------| +|---------------------------------------|------------------------------------------------| + + +|-15----15-19-17-15----17-15------------------------|------------------------------------ +|----19-------------19-------19-15-13-17-15-13------|------------------------------------ +|----------------------------------------------14-12|-16-14-12-------16-14-12-------16-14 +|---------------------------------------------------|----------14-12----------14-12------ +|---------------------------------------------------|------------------------------------ +|---------------------------------------------------|------------------------------------ + + +|--------------------| +|--------------------| +|-14-12-------------O| +|-------14-12----17--| +|--------------------| +|-------------15-----| + + + diff --git a/guitar/tabs/Misc/frankenstein.tab b/guitar/tabs/Misc/frankenstein.tab new file mode 100644 index 0000000..604fd0f --- /dev/null +++ b/guitar/tabs/Misc/frankenstein.tab @@ -0,0 +1,60 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +Date: Thu, 19 Oct 1995 14:53:12 -0500 +From: davies@ils.nwu.edu (Brian Davies) +Subject: TAB (partial): Edgar Winter's "Frankenstein" + +I've seen about 20 requests for this the last month or two, and no one +more knowledgeable than I has stepped forth. So, given that I know +exactly two of the riffs, I will do my best at filling this void... + + + FRANKENSTEIN by the Edgar Winter Group + +Partial tab by Brian Davies +Comments, corrections, and hopefully additions, to davies@ils.nwu.edu + + +(e) |--------------------|--------------------| +(B) |--------------------|--------------------| +(G) |-----------------3--|--------------------| +(D) |--5-5-5-5--3-5-5-3--|--5-5-5-3-5---------| +(A) |--5-5-5-5--3-5-5----|--5-5-5-3-5---------| +(E) |--------------------|--------------------| + 1 2 3 4 1 2 3 4 + +This is the main riff. The syncopation is pretty funky, so the time +markings below the staff are intentionally vague. + + + |--3--| |--3--| +(e) |---------------------------------|---------------------------------| +(B) |---------------------------------|-3-------------------------------| +(G) |-------------3---5--3----3---5-3-|-----5-3-----3-------------------| +(D) |-------3-5-----5-------5---------|---------5-----------5---3-5-----| +(A) |-3--5----------------------------|---------------------------------| +(E) |---------------------------------|---------------------------------| + 1 & 2 & 3 & 4 & 1 & 2 & 3 & 4 & + +I think I've got all the notes right here -- this is from memory, though, +so there could be a few errors. + +Most of the main riffs are done on the keyboard (in both the Edgar Winter +and TMBG versions, I think -- I've only had the pleasure of seeing the +latter up close), so these guitar arrangements aren't what the bands are +playing. + +This post contains the complete lyrics to the song. Can you find them? + + - Brian + +*************************************************************************** +* Brian Davies (davies@ils.nwu.edu) * There are three kinds of lies: * +* http://www.ils.nwu.edu/~davies/ * Lies, damned lies, and release * +* Institute For The Learning Sciences * dates. * +* 1890 Maple Ave, Evanston, IL, 60201 * - guess who * +*************************************************************************** + + diff --git a/guitar/tabs/Misc/holdmyhand.prj b/guitar/tabs/Misc/holdmyhand.prj new file mode 100644 index 0000000..fa7e54a --- /dev/null +++ b/guitar/tabs/Misc/holdmyhand.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=holdmyhand.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4) +TEMPO=651578 diff --git a/guitar/tabs/Misc/holdmyhand.tab b/guitar/tabs/Misc/holdmyhand.tab new file mode 100644 index 0000000..d433377 --- /dev/null +++ b/guitar/tabs/Misc/holdmyhand.tab @@ -0,0 +1,121 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +@SONG: * HOLD MY HAND +(tabbed by Paul Hutchinson ) + +Intro: +|Bsus2 E | x4 + + Bsus2 E Bsus2 E +With a little love and some tenderness + Bsus2 E Bsus2 E etc +We'll walk upon the water, we'll rise above the mist +With a little peace, and some harmony +We'll take the world together, we'll take them by the hand + +F# E* B + Cause, I got a hand for you, oh +F# E* B + Cause, I wanna run with you + +Yesterday, I saw you standing there +Your head was heavy, your eyes were red, no comb had touched your hair +I said "Get up, and let me see you smile +We'll take a walk together, walk the road a while" + + Cause, I got a hand for you - I got a hand for you + I wanna run with you - won't you let me run with you + + B E* F# + Hold my hand - want you to hold my hand + B E* F# + Hold my hand - I'll take you to a place where you can be + B E* F# + Hold my hand - anything you wanna be, because + E* + I wanna love you the best that, the best that I can + +See I was wasted, and I was wasting time +Till I thought about your problems, I thought about your crimes +Then I stood up, and then I screamed aloud +"Don't wanna be part of your problems, don't wanna be part of your crowd, no" + + Cause, I gotta hand for you - I got a hand for you + I wanna run with you - won't you let me run with you + + Hold my hand - want you to hold my hand + Hold my hand - I will take you to the promised land + Hold my hand - Maybe we can't change the world but, + I wanna love you, the best that, the best that I can + +Solo: |Bsus2 E | x4 + |F# E* |B | x2 + + Hold my hand - want you to hold my hand + Hold my hand - I'll take you to a place where you can be + Hold my hand - anything you wanna be cause + I, no lo lo, oh ho (!?) + + Hold my hand - want you to hold my hand + Hold my hand - I will take you to the promised land + Hold my hand - Maybe we can't change the world but, + I wanna love you, the best that, the best that I can + +Chords: Acoustic guitar: Bsus2-x24422 E-022100 F#-x 9 11 11 11 x + E*-x7999x B-799877 + + Electric guitar (mostly): F#-x 9 11 11 x x E*-x799xx B-x998xx +............... + +The riff played by the electric comes in on the line "With a little +peace..", is played throughout the verses, and consists of the following: +(the notes in brackets aren't played all the time) + + + + + + + + + + +|---------------------------------|----------------------------------| +|-------7-----9-------------------|-------7--------------------------| +|/8--------(8)9-------------------|/8--------(8)9--------------------| +|---------------------------------|-------------9--------------------| +|---------------------------------|----------------------------------| +|---------------------------------|----------------------------------| + +During the bridge ("Cause I got..") and chorus ("Hold my hand..") you +just strum the chords as shown above. +The solo consists of: + + + + + + + + + + +|---------------------------------|----------------------------------| +|/7-----9-----7-------------------|-7h9---9--------------------------| +|--------------------/8---7h8-----|---------7h8----------------------| +|---------------------------------|-------------9~~~~~~~~~~~~~\\\\---| +|---------------------------------|----------------------------------| +|---------------------------------|----------------------------------| + + + + + + + + + + +|---------------------------------|----------------------------------| +|---------------------------------|-7h9---9--------------------------| +|---------7-8-9-------9---7h8---8-|---------7h8----------------------| +|/9-----9-------------------------|-------------9~~~~~~~~~~~~~-------| +|---------------------------------|----------------------------------| +|---------------------------------|----------------------------------| + + (Hold bend) + + + + + + + + + +|---------------------------------|----------------------------------| +|---------------7-----------------|----------------------------------| +|-----4---4-6b8---8r6-4-------4~~~|~~~~~~~~~~------------------------| +|-4/6---6---------------6-4h6-----|-----------6----6-4---4-----------| +|---------------------------------|------------------------6---6-4---| +|---------------------------------|----------------------------------| + + + + + + + + + + +|---------------------------------|------------------------------------| +|-------------------------4---4h5-|p4-5b7r5p4--------------------------| +|-----------------4---4h6---6-----|-----------6b8------r6-4--------4---| +|---------4---4h6---6-------------|------------------------6-4-4h6-----| +|-----4h6---6---------------------|------------------------------------| +|---------------------------------|------------------------------------| +................. + diff --git a/guitar/tabs/Misc/sultans_of_swing.prj b/guitar/tabs/Misc/sultans_of_swing.prj new file mode 100644 index 0000000..0841965 --- /dev/null +++ b/guitar/tabs/Misc/sultans_of_swing.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=sultans_of_swing.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16) diff --git a/guitar/tabs/Misc/sultans_of_swing.tab b/guitar/tabs/Misc/sultans_of_swing.tab new file mode 100644 index 0000000..b378e4c --- /dev/null +++ b/guitar/tabs/Misc/sultans_of_swing.tab @@ -0,0 +1,411 @@ + + +About OLGA +Shop +FAQs +Community +Find Tab + + +Browse The Archive + Guitar Tab + Xmas Songs! + Everything + Rock + Pop + Classical + Resources + Lessons + Dictionaries + Software + Construction +Don't know the chords? Check out ... + +The LARGE Chord Dictionary + +or use the new chord generator, +thanks to Jim Cranwell. + +For tab files, read the... +Guide To Reading Tablature + + + +Archive Browser + +/main / d / dire_straits / sultans_of_swing.tab / [Click Here For A Printer Friendly Copy] + +#-----------------------------PLEASE NOTE-------------------------------------# +#This OLGA file is the author's own work and represents their interpretation # +#of the song. You may only use this file for private study, scholarship, or # +#research. Remember to view this file in Courier, or some other monospaced # +#font. See http://www.olga.net/faq/ for more information. # +#-----------------------------------------------------------------------------# + +From: "Phil Laing" +Subject: d/dire_straits/sultans_of_swing.tab +Date: Mon, 26 Nov 2001 21:30:26 +1100 + +Title: Sultans of Swing +Artist: Dire Straits +Album: Sultans of Swing + +Transcribed by Phil Laing (jimmi_pgl@hotmail.com). +If you find any mistakes be sure to tell me. + +[---xX---] means repeat that part X times. + +I suggest referring to the music, particularly for the solos. + +e---------|-------|-------|-5-8-5---|---------| +b---------|-------|---6---|-------6-|-5h6p5---| +g-5-5-5h7-|---5-7-|-----7-|---------|-------7-| +D---------|-7-----|-7-----|---------|---------| +A---------|-------|-------|---------|---------| +E---------|-------|-------|---------|---------| + +e-----| +b-----| +g-4b~-| +D-----| +A-----| +E-----| + +e-----------------| +b-/10-10-10h11-10-| +g-----------------| +D-----------------| +A-----------------| +E-----------------| + +e-------------| +b-5-5-6-6p5---| +g-----------7-| +D-------------| +A-------------| +E-------------| + +e-------------|-------------|----------| +b---------6---|-------------|----------| +g-----7-----7-|-3-3-3-3h5-5-|--------5-| +D-5h7---7-----|-------------|----5-7---| +A-------------|-------------|-/7-------| +E-------------|-------------|----------| + +e--------------------| +b-/10-10-11-11-10-10-| +g--------------------| +D--------------------| +A--------------------| +E--------------------| + +e-10p9--------------| +b------10---------5-| +g---------9-7p6-----| +D---------------7---| +A-------------------| +E-------------------| + +e-------------| +b-5-5-6-6p5---| +g-----------7-| +D-------------| +A-------------| +E-------------| + +(1:06) + +e-10p9----|-------------| +b------10-|-------------| +g---------|-3-3-3-3h5-5-| +D---------|-------------| +A---------|-------------| +E---------|-------------| + +e-------------| +b-------------| +g-3-3-3-3h5-5-| +D-------------| +A-------------| +E-------------| + +e---------------5---|------------------------| +b-6p5---6-6p5-5---8-|-6p5---6-6p5-5----------| +g-----7-------------|-----7----------------5-| +D-------------------|------------------5-7---| +A-------------------|---------------/7-------| +E-------------------|------------------------| + +(1:33) + +e-9-8-9-|-------| +b-------|----10-| +g-------|-10----| +D-------|-------| +A-------|-------| +E-------|-------| + +e---------------9--------------| +b-------10---10---10p8-12-8BrB-| +g-(8)/9----9-------------------| +D------------------------------| +A------------------------------| +E------------------------------| + +e---------------| +b-----8---------| +g-7/9---9-7-7-7-| +D---------------| +A---------------| +E---------------| + +e-----10-8----|-------------|------------| +b----------10-|-------------|------------| +g-/10---------|-3-3-3-3h5-5-|---5---5-/7-| +D-------------|-------------|-7---7------| +A-------------|-------------|------------| +E-------------|-------------|------------| + +(2:02) + +e-----| +b-----| +g-7b~-| +D-----| +A-----| +E-----| + +e-/9-9--------------------| +b------10--------------10-| +g---------9-9-------------| +D-------------12p11-11----| +A-------------------------| +E-------------------------| + +e-------------| +b-5-5-6-6p5---| +g-----------7-| +D-------------| +A-------------| +E-------------| + +(2:20) + +e-----------------|-------------| +b-----7---6-5-----|-------------| +g-5h7---7-----6h7-|-3-3-3-3h5-5-| +D-----------------|-------------| +A-----------------|-------------| +E-----------------|-------------| + +e-------------| +b-------------| +g-3-3-3-3h5-5-| +D-------------| +A-------------| +E-------------| + +e---------------5---|------------------------| +b-6p5---6-6p5-5---8-|-6p5---6-6p5-5----------| +g-----7-------------|-----7----------------5-| +D-------------------|------------------5-7---| +A-------------------|---------------/7-------| +E-------------------|------------------------| + +(2:46) + +e-----12---------13-| +b-12B----12b--10----| +g-------------------| +D-------------------| +A-------------------| +E-------------------| + +e-12p9--------------|------| +b------10---------5-|-9brb-| +g---------9-7p6-----|------| +D---------------7---|------| +A-------------------|------| +E-------------------|------| + +e---------------| +b-----8---------| +g-7/9---9-7-7-7-| +D---------------| +A---------------| +E---------------| + +e-----------|-------------| +b-------6---|-------------| +g-----7---7-|-3-3-3-3h5-5-| +D-5h7-------|-------------| +A-----------|-------------| +E-----------|-------------| + +e-------------| +b-------------| +g-3-3-3-3h5-5-| +D-------------| +A-------------| +E-------------| + +e---------------5---|------------------------| +b-6p5---6-6p5-5---8-|-6p5---6-6p5-5----------| +g-----7-------------|-----7----------------5-| +D-------------------|------------------5-7---| +A-------------------|---------------/7-------| +E-------------------|------------------------| + + +[1st Solo](3:28) + +e---------------------------------|----------------12B-| +b---------------------------------|-------------15-----| +g-12B-12b-12b-12b-10h12p10-9h10p9-|----------14--------| +D---------------------------------|-11-12-14-----------| +A---------------------------------|--------------------| +E---------------------------------|--------------------| + +e-10-----------------------------------------| +b----10-------10-13-11h13p11-10-11-9h10-(10)-| +g-------10-----------------------------------| +D----------12--------------------------------| +A--------------------------------------------| +E--------------------------------------------| + +e-------13-------------13-12--------------------| +b-9b-10----13----------------13-8h10-8-13-13-13-| +g-------------12-10-10--------------------------| +D-----------------------------------------------| +A-----------------------------------------------| +E-----------------------------------------------| + +e-----10---------------13p10-----------------------| +b-13B----11-13B-13B-10-------10h13-13B-10-10-------| +g--------------------------------------------12p10-| +D--------------------------------------------------| +A--------------------------------------------------| +E--------------------------------------------------| + +e-----------------------------------| +b-----------------------------------| +g--------10------9-10h12-10-9h10h12-| +D-8-8-12----8-10--------------------| +A-8---------------------------------| +E-----------------------------------| + +e--------------------------------------------------------| +b--------------------------------------------------------| +g--------10-------------------------12-------------------| +D---8-12----12-12h14-10-12-10-12/14----14\12-10-12-12-12-| +A-8------------------------------------------------------| +E--------------------------------------------------------| + +e---------------5---|------------------------| +b-6p5---6-6p5-5---8-|-6p5---6-6p5-5----------| +g-----7-------------|-----7----------------5-| +D-------------------|------------------5-7---| +A-------------------|---------------/7-------| +E-------------------|------------------------| + +e---------| +b-------7-| +g--5h7----| +D---------| +A---------| +E---------| + +(4:17) + +e-----------------------------------| +b------------12/14-14-/17-17--14-15-| +g-6/14-14---------------------------| +D---------11------------------------| +A-----------------------------------| +E-----------------------------------| + + d u d +e---9-9--| +b-6-6-6--| +g-5---5--| +D--------| +A--------| +E--------| + +That's a bit of a stretch so you might want to +use this chord, though it doesn't sound as good: + +[e-9--] +[b-x--] +[g-9--] +[D-11-] +[A----] +[E----] + +e---------|-------| +b-----8---|----11-| +g-7/9---9-|-------| +D---------|-12----| +A---------|-------| +E---------|-------| + +(4:38) + +e---------------|-------------| +b---------------|-------------| +g-7---10---10-7-|-3-3-3-3h5-5-| +D---7----7------|-------------| +A---------------|-------------| +E---------------|-------------| + +e-------------| +b-------------| +g-3-3-3-3h5-5-| +D-------------| +A-------------| +E-------------| + +e---------------5---|------------------------| +b-6p5---6-6p5-5---8-|-6p5---6-6p5-5----------| +g-----7-------------|-----7----------------5-| +D-------------------|------------------5-7---| +A-------------------|---------------/7-------| +E-------------------|------------------------| + + +[2nd Solo](4:59) + +e-------------------|-----------------------------------|-------------------- +b-------------------|-----------------------------------|(10\8)-10p8-------- +g-12B-12-10-12-10p7-|-12b-12-7h9p7-5h7p5----------------|-----------10h12p10--12 +D-------------------|-------------------5h7p5-----------|-------------------12-- +A-------------------|------------------------5h7p5------|----------------------- +E-------------------|-----------------------------8-5-3-|----------------------- + +e------------8--------|-8--------8------|------10---------------------------| +b---8h10p8-----10-8---|---8-10-----8-10-|---10----10-8-8------8--------10-8-| +g-9--------9--------9-|--------9--------|----------------10p7---5h7-10------| +D---------------------|-----------------|-7---------------------------------| +A---------------------|-----------------|-----------------------------------| +E---------------------|-----------------|-----------------------------------| + +e---------------------12-------| +b------------------13----13-15-| +g------10~------11-------------| +D-9h12-----9h12----------------| +A------------------------------| +E------------------------------| + +(5:20) Repeat this while fading: + +e[-13p10----10-]-13-[-15p12----12-]-15-| +b[-------10----]----[-------13----]----| +g[-------------]----[-------------]----| +D[-----x8------]----[-----x8------]----| +A[-------------]----[-------------]----| +E[-------------]----[-------------]----| + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Misc/sultansofswing.tab b/guitar/tabs/Misc/sultansofswing.tab new file mode 100644 index 0000000..349b5bf --- /dev/null +++ b/guitar/tabs/Misc/sultansofswing.tab @@ -0,0 +1,330 @@ +INTRO +----- + + Dm | Dm . . ARP +e|--5--|--5--------|-----------|------------|----------|-------5--8--5--| +B|--6--|--6--------|-----------|------------|-------6--|------6---------| +G|--7--|--7--5--5--|--5^h7--7^^^^^-------7^--------|--7--7----------| +D|--7--|--7--------|-----------|----5/7-----|-----7----|----------------| +A|--5--|--5--------|-----------|------------|----------|----------------| +E|--5--|--5--------|-----------|------------|----------|----------------| + + Dm C Bb A +e|-----------------| +B|--6--------------| +G|-----5^h6^p5-----| +D|--------------7^^^ +A|-----------------| +E|-----------------| + + + +VERSE +----- + Dm C Bb A +e|----|--5--|--3--1--|--5--|----------------------------| +B|----|--6--|--5--3--|--5--|----------------------------| +G|----|--7--|--5--3--|--6--|-------------------------9~~~ +D|^^--|--7--|--5--3--|--7--|--9b(11)--9b(11)b(9)--7-----| +A|----|--5--|--3--1--|--7--|----------------------------| +E|----|--5--|--3--1--|--5--|----------------------------| + + C Bb F F +e|---|--3--1--|------------------------|------------|--1--|--1--| +B|---|--5--3--|----10------10------10^^^^^------10--|--1--|--1--| +G|~~-|--5--3--|------------------------|------------|--2--|--2--| +D|---|--5--3--/11------11------11------|----11------|--3--|--3--| +A|---|--3--1--|------------------------|------------|--3--|--3--| +E|---|--3--1--|------------------------|------------|--1--|--1--| + + . +e|--------------------|-----|--|---------------------|--------------| +B|--5--5--6^p5^h6^p5--|--3^^^^^^^^---------------6---|--3--6--l(3)--| +G|--5--5--5--5--5--5--|--3^^^^^^^^---------7--------7\--3^^^--l(3)--| +D|--5--5--7--5--7--5--|--3^^^^^^^^---5^h7-----7------|--3^^^--l(3)--| +A|--------------------|-----|--|---------------------|--------------| +E|--------------------|-----|--|---------------------|--------------| + + Dm C Bb A +e|-----------|--------------|--5--|--3--1--|--5--5--------| +B|--3/5--5---|--------------|--6--|--5--3--|--5-----------| +G|--3/5--5---|-----------5--|--7--|--5--3--|--6-----6--6^^^ +D|--3/5--5---|-----5^h7-----|--7--|--5--3--|--7-----------| +A|----------6b(7)-----------|--5--|--3--1--|--7-----------| +E|-----------|--------------|--5--|--3--1--|--5-----------| + + +e|--5^h6-----5-----3-----|--1^^^^^^^^^^^--10^p9-------|----------------| +B|-----------------------|-----|-----|-----------h10--|----------------| +G|^^^^^^--6-----4-----2--|-----|-----|----------------|--9\7--6--------| +D|-----------------------|-----|-----|----------------|----------7--5--| +A|-----------------------|-----|-----|----------------|----------------| +E|-----------------------|-----|-----|----------------|----------------| + + F F . . . +e|--1--|--1--|--------------------|-----|--|----10---9--|--5--------| +B|--1--|--1--|--5--5--6^p5^h6^p5--|--3^^^^^^^^--10--10--|--6--3--3--| +G|--2--|--2--|--5--5--5--5--5--5--|--3^^^^^^^^----------|-----3--3--| +D|--3--|--3--|--5--5--7--5--7--5--|--3^^^^^^^^----------|-----3--3--| +A|--3--|--3--|--------------------|-----|--|------------|-----------| +E|--1--|--1--|--------------------|-----|--|------------|-----------| + + . +e|----------|----------|----------|----|--------|--------|-----------------| +B|--3/5--5^^^^^--3--6--|--3/5--5^^^^^--|--6--5--|--3--6--|--6^p5--5--5/10--| +G|--3/5--5^^^^^--3-----|--3/5--5^^^^^--|--7--5--|--3--7--|--5^^^--5--5/10--| +D|--3/5--5^^^^^--3-----|--3/5--5^^^^^--|--7--5--|--3--7--|--7^p5--5--5/10--| +A|----------|----------|----------|----|--------|--------|-----------------| +E|----------|----------|----------|----|--------|--------|-----------------| + + . +e|----------|----|-----------|-------|------------|-------------| +B|--10--8^^^^^^--|--6--5--3^^^^^--6--|--6^p5--5---|-------------| +G|--10--9^^^^^^--|--7--5--3^^^^^--7--|--5^^^--5---|-----------5-| +D|--10--10^^^^^--|--7--5--3^^^^^--7--|--7^p5--5---|-----5^h7----| +A|----------|----|-----------|-------|-----------6b(7)----------| +E|----------|----|-----------|-------|------------|-------------| + + + +--------------------------------------------------------------------------- +This joins to Martijn's version here: (NB Martijn includes FILLS ONLY) +--------------------------------------------------------------------------- + + +Transcribed by: Martijn van Welie (mwelie@cs.vu.nl) + + + B B R B R B R B +E-9-8-9----10-|--------5---------9-------7------------------ +B-8-8-8-10----|------5---5-8(10)---(10)8---8-8(10)8(10)8(10) +G----------10-|-7(9)---------------------------------------- +D-------------|--------------------------------------------- +A-------------|--------------------------------------------- +E-------------|--------------------------------------------- + + S S S S H +E-------------------|-----10-8----|------------|------------------- +B------8-8\6--6-6-6-|----------10-|-6-6-6-6/8--|------------------- +G--7/9-9-9\7--7-7-7-|-/10------10-|-7-7-7-7/9--|-----5---5---5^7--- +D----------8--8-8-8-|-------------|-8-8-8-8/10-|-5-7---7---7------- +A-------------------|-------------|------------|------------------- +E-------------------|-------------|------------|------------------- + + B R B R B R S +E-3---------------|-/9-9----------------|-----------------|---------------- +B-4(5)4(5)4(5)4-3-|-------10---------10-|-5-5--6-5-6-5--3-|---------6-5---- +G-----------------|----------9----------|-5-5--7-5-7-5--3-|-----7-5-----8-7 +D-----------------|------------12-11----|-----------------|-5/7------------ +A-----------------|---------------------|-----------------|---------------- +E-----------------|---------------------|-----------------|---------------- + + S P S P S +E---------------|--------------------------------------------------------- +B-6-6-6-6/8-----|-6-5-3--6-6^5-5--/10-8--6-5-3--6-6^5--------------------- +G-7-7-7-7/9--2x-|-7-5-3--7-7^5-5--/10-9--7-5-3--7-7^5----------5---------- +D-8-8-8-8/10----|-------------------------------------3/5-7-8------------- +A---------------|--------------------------------------------------------- +E---------------|--------------------------------------------------------- + + B R P R B +E---------12--------------13-|-12^9------------------------------- +B--12(14)----(14)12----------|------10----------10---------------- +G-------------------11/14----|---------9-----------(14)12(14)----- +D----------------------------|------------12-11------------------- +A----------------------------|------------------------------------ +E----------------------------|------------------------------------ + + S S S S S 2x P S +E-------------------|-------------|------------|----------------------- +B------8-8\6--6-6-6-|---------6---|--6-6-6-6/8-|-6-5-3--6-6^5-5--/10-8- +G--7/9-9-9\7--7-7-7-|-----7-5---7\|--7-7-7-7/9-|-7-5-3--7-7^5-5--/10-9- +D----------8--8-8-8-|-5/7---------|--8-8-8-8/10|----------------------- +A-------------------|-------------|------------|----------------------- +E-------------------|-------------|------------|----------------------- + + P S +E-------------------------|--------------------|------------------------- +B-6-5-3--6-6^5-5----------|--------------------|------------------------- +G-7-5-3--7-7^5-5--------5-|--First-Guitar-Solo-|-repeat-last-lick-------- +D----------------3/5-7-8--|--------------------|------------------------- +A-------------------------|--------------------|------------------------- +E-------------------------|--------------------|------------------------- + + S S S S S Arp S +E-------7/9-9-(9)/12-12-12\10-|-9-|------------------6-|---------------- +B-----------------------------|-5-|-----8-(8)\6-----6--|-------6---6---- +G--6--7-7/9---(9)/12----12\10-|-0-|-7/9---(9)\7----7---|-----7---7---7-- +D---7-------------------------|---|-------------8------|-5/7------------ +A-----------------------------|---|--------------------|---------------- +E-----------------------------|---|--------------------|---------------- + + S 2x P S P S +E-----------|-------------------------------------------------|------------ +B-6-6-6-6/8-|-6-5-3--6-6^5-5--/10-8--6-5-3--6-6^5-5-----------|------------ +G-7-7-7-7/9-|-7-5-3--7-7^5-5--/10-9--7-5-3--7-7^5-5---------5-|Second-Solo- +D-8-8-8-8/10|---------------------------------------3/5-7-8---|------------ +A-----------|-------------------------------------------------|------------ +E-----------|-------------------------------------------------|------------ + +First Guitar Solo: + B B B B H P H P +E--------------------------------------------------------------------- +B-----------------------------------------------------------10-------- +G--12(14)---12(14)-12(14)-12(14)--10^12^10--9^10^9--------9----------- +D------------------------------------------------------11------------- +A---------------------------------------------------12---------------- +E--------------------------------------------------------------------- + B R H P +E--12(13)12--10------------------------------------------------------- +B---------------10--------10-13--11^13^11--10---11--9-10-------------- +G------------------10------------------------------------------------- +D---------------------12---------------------------------------------- +A--------------------------------------------------------------------- +E--------------------------------------------------------------------- + B B R S +E----------------13-------------/13-12-------------------------------- +B--------13--------13------------------13----10----13-13-------------- +G--12(14)--12(14)----(14)12-10------------12----12-------------------- +D--------------------------------------------------------------------- +A--------------------------------------------------------------------- +E--------------------------------------------------------------------- + B R B B H +E--------------------------------------13^10----10--------10---------- +B--13(15)--(15)13-11-13(15)-13(15)--10-------10----13(15)----10------- +G---------------------------------------------------------------12-10\ +D--------------------------------------------------------------------- +A--------------------------------------------------------------------- +E--------------------------------------------------------------------- + S H S +E--------------------------------------------------------------------- +B--------6---------------------------------------6-------------------- +G------7---7-------9-10/12-10--9^10/12---------7---7---0-5--7-5------- +D----8-----------10--------------------------8------------------------ +A--8-----------10--------------------------8-------------------------- +E--------------------------------------------------------------------- + B R +E--------------------------------------------------------------------- +B-------8------------------------------------------------------------- +G--7(9)---(9)7-5-7-7-------------------------------------------------- +D--------------------------------------------------------------------- +A--------------------------------------------------------------------- +E--------------------------------------------------------------------- + +Second Guitar Solo: + B B R H P H P H P H P H P +E----------------------------------------------------------------------- +B----------------------------------------------------------------------- +G-12(14)-12--10-12-10-----12(14)12--9^12^9--7^9^7--5^7^5---------------- +D---------------------12---------------------------------5^7^5---------- +A--------------------------------------------------------------5^7^5---- +E----------------------------------------------------------------------- + + P P H P H P H P H P H P H P +E---------------------------8---------8---------8---------8------------- +B-10^8^6^8^6---8----8^10^8-----8^10^8----8^10^8----8^10^8----8^10^8----- +G------------7----9--------9----------9---------9---------9---------9--- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + H P B P P P H +E-8----------------------10--------------------------------------------- +B---8^10^8------------10----13^10--------------------------10----------- +G----------9---12(14)-------------12^10-12^10-----------10----12-------- +D---------------------------------------------12--10^12----------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + B R P P +E-----------------------12--------10-|--13^10----10--13^10----10-------- +B-----10-----11--11(13)----(13)11----|--------10-----------10----------- +G---X------X-------------------------|---------------------------------- +D-X------X---------------------------|---------------------------------- +A------------------------------------|---------------------------------- +E------------------------------------|---------------------------------- + + P P P P P +E--13^10----10--13^10----10--13^10----10--13^10----10--13^10----10------ +B--------10-----------10-----------11-----------11-----------11--------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + P P P P P +E--13^10----10--15^12----12--15^12----12--15^12----12--15^12----12------ +B--------11-----------13-----------13-----------13-----------13--------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + Fade out. + P P P P B B R +E--15^12----12--15^12----12--15^12----12--15^12----12|-15(17)--15(17)15- +B--------13-----------13-----------13-----------13---|------------------ +G---------------------------------------------------.|------------------ +D---------------------------------------------------.|------------------ +A----------------------------------------------------|------------------ +E----------------------------------------------------|------------------ + + B R H P H P H P +E--13------13--15(17)15--13^15^13--------------------------------------- +B-----14--------------------------13^15^13--10^13^10-------------------- +G----------------------------------------------------------------------- +D----------------------------------------------------------------------- +A----------------------------------------------------------------------- +E----------------------------------------------------------------------- + + +--------------------------------------------------------------------------- +You get a shiver in the dark, it's raining in the park, but meantime +South of the river you stop and you hold everything +A band is blowing Dixie, double four time +You feel alright when you hear that music ring + +You step inside, but you don't see too many faces +Coming in out of the rain to hear the jazz go down +Too much competition, from other places +But not too many horns can make that sound + +Way on downsouth, way on downsouth London town + +You check out Guitar George; he knows all the chords +Mind he's strictly rhythm he doesn't want to make it cry or sing +And an old guitar is all he can afford +When he gets up under the lights to play his thing + +And Harry doesn't mind if he doesn't make the scene +He's got a daytime job he's doing alright +He can play the honkytonk just like anything +Saving it up for friday night + +With the Sultans, with the Sultans of Swing + +And a crowd of young boys they're fooling around in the corner +Drunk and dressed in their best brown baggies and their platform soles +They don't give a damn about any trumpet playing band +It aint what they call Rock and Roll + +And the Sultans played Creole + +And then the man he steps right up to the microphone +And says at last just as the time bell rings +'Thankyou, goodnight; now it's time to go home' +And he makes it fast with one more thing... + +We are the Sultans, We are the Sultans of Swing +-- + ,----_ ,_ |\ |\ | Peter Hawkins, + / // \ / / |/ __ _|/ . | Lecturer, Computer Centre +/ // -__/ / /| / | | | | | _______ | Monash University, Australia +\// . /_/ |/\_/ \/\/\/ \__/ / | peter@ccs1.cc.monash.edu.au + + +-- + ,----_ ,_ |\ |\ | Peter Hawkins, + / // \ / / |/ __ _|/ . | Lecturer, Computer Centre +/ // -__/ / /| / | | | | | _______ | Monash University, Australia +\// . /_/ |/\_/ \/\/\/ \__/ / | peter@ccs1.cc.monash.edu.au + diff --git a/guitar/tabs/Misc/tab.tab b/guitar/tabs/Misc/tab.tab new file mode 100644 index 0000000..32fce00 --- /dev/null +++ b/guitar/tabs/Misc/tab.tab @@ -0,0 +1,6 @@ +e:----------------------------------------------------------- +b:----9-----9-10--9--7-7__5-5----9-----9-10--5---5_7--------- +g:----9-----9--9--9--8-8__6-6----9-----9--9--6-6--_8--------- +d:----9--9--9--9--9--9-9__7-7----9--9--9--9--7----_9--------- +a:-7--------------------------------------------------------- +e:----------------------------------------------------------- diff --git a/guitar/tabs/Misc/test.prj b/guitar/tabs/Misc/test.prj new file mode 100644 index 0000000..469510e --- /dev/null +++ b/guitar/tabs/Misc/test.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=test.tab +DELAYS diff --git a/guitar/tabs/Misc/test.tab b/guitar/tabs/Misc/test.tab new file mode 100644 index 0000000..f68ee18 --- /dev/null +++ b/guitar/tabs/Misc/test.tab @@ -0,0 +1,17 @@ + +e:-----------------|-----------------|-----------------|---------------- +B:-----------------|-----------------|-----------------|---------------- +G:---9-9-7-7-7-----|---9-9-8-8-8-----|---9-9-7-7-7-----|---9-9-8-8-8---- +D:---7-7-7-7-7-----|---9-9-9-9-9-----|---7-7-7-7-7-----|---9-9-9-9-9---- +A:-----------------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + -ture of p.... + +e:-------0---------|-----------------|-----------------|---------------- +B:-------2---------|-----------------|-----------------|---------------- +G:-2-2-2-2---------|---9-9-8-8-8-----|---9-9-7-7-7-----|---9-9-8-8-8---- +D:-2-2-2-2---------|---9-9-9-9-9-----|---7-7-7-7-7-----|---9-9-9-9-9---- +A:-0-0-0-0---------|-----------------|-----------------|---------------- +E:-----------------|-----------------|-----------------|---------------- + touch I see .... + diff --git a/guitar/tabs/Misc/zebra - whos_behind_the_door.tab b/guitar/tabs/Misc/zebra - whos_behind_the_door.tab new file mode 100644 index 0000000..7cf9f62 --- /dev/null +++ b/guitar/tabs/Misc/zebra - whos_behind_the_door.tab @@ -0,0 +1,134 @@ + + + + +/main / z / zebra / whos_behind_the_door.tab / [Click Here For A Printer Friendly Copy] + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From: e77-tc@dv349-5d.berkeley.edu (David John Lovell) +Subject: Who's Behind the Door - Zebra + + + Who's Behind the Door - Zebra + + 12-String Guitar Intro + + Tabbed by David J. Lovell + davidl@uclink.berkeley.edu + + + +---10-----10--------------10--||------10-----10-----------10---||--10\8--8------ +------------------------------||-------------------------------||--0-----0------ +0-----------------------------||*--0-------------0-----0------*||--0-----9------ +-------0------0--------0------||*---------0-------------------*||--0-----0------ +------------------------------||-------------------------------||--------------- +------------------------------||-------------------------------||--------------- + + + +8--8----7--7--|-----75--5--5--3--3--|--2--0--0--0--|---------------------------- +0--0----0--0--|-----0---0--0--0--0--|--0--0--3--1--|---------------------------- +9--9\7--7--7--|-----\5--5--5--4--4--|--2--0--0--0--|----------5----------9------ +0--0----0--0--|-----0---0--0--0--0--|--0--0--4--2--|---------------------------- +--------------|---------------------|--------5--3--|-------0----------0--------- +--------------|---------------------|--------------|--3/5--------5/8------------ + + + +|---------------------------------------|-----10-----10--------------10--||----- +|----------7----------8----------10-----|--------------------------------||----- +|---------------------------------------|--0-----------------------------||*---- +|-------0----------0----------0------0--|---------0------0--------0------||*---- +|--3/5--------5/7--------7/9------------|--------------------------------||----- +|---------------------------------------|--------------------------------||----- + + + +---10-----10-----------10---||--10\8--8--8--8----7--7--|---7-\5--5--5--3--3----- +----------------------------||--0-----0--0--0----0--0--|---0-----0--0--0--0----- +0-------------0-----0------*||--0-----9--9--9\7--7--7--|---7-\5--5--5--4--4----- +-------0-------------------*||--0-----0--0--0----0--0--|---0-----0--0--0--0----- +----------------------------||-------------------------|------------------------ +----------------------------||-------------------------|------------------------ + + + +|--2--0--0--0--|------------------------|--------------------------------------- +|--0--0--3--1--|------------------------|----------7----------8----------10----- +|--2--0--0--0--|----------5----------9--|--------------------------------------- +|--0--0--4--2--|------------------------|-------0----------0----------0--------- +|--------5--3--|-------0----------0-----|--3/5--------5/7--------7/9------------ +|--------------|--3/5--------5/8--------|--------------------------------------- + + + +---||------10-----10-----------10---||--3--3--3--3--|--------------|------------ +---||-------------------------------||--0--0--0--1--|--5--3--7--5--|--8--7------ +---||*--0-------------0-----0------*||--0--0--0--0--|--0--0--0--0--|--0--0------ +0--||*---------0-------------------*||--0--0--0--2--|--0--0--0--0--|--0--0------ +---||-------------------------------||--2--2--2--3--|--3--2--5--3--|--7--5------ +---||-------------------------------||--3--3--3-----|--------------|------------ + + + strum over measure strum over measure strum over measure +-------------||----5---------------||---3--------------|---3-------------------- +10--8--7--8--||----6---------------||---3--------------|---3-------------------- +0---0--0--0--||*---5--------------*||---3--------------|---3-------------------- +0---0--0--0--||*---0--------------*||---0--------------|---0-------------------- +9---7--5--7--||----8---------------||---0--------------|---0-------------------- +-------------||--------------------||------------------|------------------3----- + + + +---|--7--7--7--5--7--|--7--7-----7-----7-----7--|------------------------------- +0--|--0--0--0--------|--------7-----5-----------|-----3--3-----3--3-----3--3---- +0--|--0--0--0--------|--------------------7-----|--5--------4------------------- +0--|--0--0--0--------|--------------------------|--------------------7---------- +---|-----------------|--------------------------|------------------------------- +---|-----------------|--------------------------|------------------------------- + + + strum over measure strum over measure +---------------------||----2---------------||---0--------------|---------------- +---3--3-----0-----0--||----0---------------||---0--------------|---------------- +0--------------------||*---0--------------*||---0--------------|---------------- +---------4-----2-----||*---4--------------*||---2--------------|---------------- +---------------------||--------------------||------------------|---------------- +---------------------||--------------------||------------------|---------------- + + +strum over measure strum over measure strum over measure +-0---------3-/5--||----2---------------||---0--------------|-------------------- +-0---------0--0--||----0---------------||---0--------------|-------------------- +-0---------0--0--||*---0--------------*||---0--------------|-------------------- +-2---------5-/7--||*---4--------------*||---2--------------|-------------------- +-----------------||--------------------||------------------|-------------------- +-----------------||--------------------||------------------|-------------------- + + +strum over measure +-0---------3-/5--|-------------------------------------------------------------- +-0---------0--0--|-------------------------------------------------------------- +-0---------0--0--|-------------------------------------------------------------- +-2---------5-/7--|-------------------------------------------------------------- +-----------------|-------------------------------------------------------------- +-----------------|-------------------------------------------------------------- + +================================================================================ +== Created with a shareware version of the BUCKET 'O TAB == +== tablature creation software for Windows == +== For more information: == +== email: gse@ocsystems.com == +== US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124 == +================================================================================ + + + + + + +Copyright (c) 2001 by OLGA, Inc. \ No newline at end of file diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD1A.prj b/guitar/tabs/Munro/Major Scale Riffs/CD1A.prj new file mode 100644 index 0000000..464b58a --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD1A.prj @@ -0,0 +1,30 @@ +WINTABV1.00 +TABLATURE=cd1a.tab +TYPES=(0,4)(1,4)(2,8)(3,8)(4,8)(5,8)(6,4)(7,4)(8,8)(9,8)(10,8)(11,4)(12,8)(13,8)(14,8)(15,4)(16,8)(17,8)(18,4)(19,4)(20,4)(21,4) +RANGE=1;11;RANGE_0_11 +COMMENT=(0,"1st of C Major") +COMMENT=(1,"1st of C Major") +COMMENT=(2,"5th of C Major.") +COMMENT=(3,"5th of C Major.") +COMMENT=(4,"1st of C Major") +COMMENT=(5,"1st of C Major") +COMMENT=(6,"7th of C Major") +COMMENT=(7,"6th of C Major") +COMMENT=(8,"5th of C Major") +COMMENT=(9,"7th of C Major.") +COMMENT=(10,"3rd of E Major") +COMMENT=(11,"5th of C Major") +COMMENT=(12,"2nd of C Major") +COMMENT=(13,"2nd of C Major") +COMMENT=(14,"1st of C Major") +COMMENT=(15,"minor 6th, passing note?, in C Major") +COMMENT=(16,"6th in C Major") +COMMENT=(17,"1st in C Major") +COMMENT=(18,"3rd in C Major") +COMMENT=(19,"4th in C Major") +COMMENT=(20,"minor 5th (passing note?) in C Major") +COMMENT=(21,"5th in C Major") +SEPARATOR=(3,1) +SEPARATOR=(9,1) +SEPARATOR=(15,1) +SEPARATOR=(21,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD1B.prj b/guitar/tabs/Munro/Major Scale Riffs/CD1B.prj new file mode 100644 index 0000000..8f44dc0 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD1B.prj @@ -0,0 +1,40 @@ +WINTABV1.00 +TABLATURE=cd1b.tab +TYPES=(0,4)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,4)(18,4)(19,4)(20,4)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,4)(31,4)(32,4) +COMMENT=(0,"CM7") +COMMENT=(1,"5th in C Major") +COMMENT=(2,"6th in C Major") +COMMENT=(3,"1st in C Major") +COMMENT=(4,"5th in C Major") +COMMENT=(5,"6th in C Major") +COMMENT=(6,"2nd in C Major") +COMMENT=(7,"5th in C Major") +COMMENT=(8,"6th in C Major") +COMMENT=(9,"1sth in C Major") +COMMENT=(10,"5th in C Major") +COMMENT=(11,"6th in C Major") +COMMENT=(12,"2nd in C Major") +COMMENT=(13,"5th in C Major") +COMMENT=(14,"6th in C Major") +COMMENT=(15,"1st in C Major") +COMMENT=(16,"6th in C Major") +COMMENT=(17,"1st in C Major") +COMMENT=(18,"1st in C Major") +COMMENT=(19,"1st in C Major") +COMMENT=(20,"1st in C Major") +COMMENT=(21,"7th in C Major") +COMMENT=(22,"6th in C Major") +COMMENT=(23,"5th in C Major") +COMMENT=(24,"4th in C Major") +COMMENT=(25,"3rd in C Major") +COMMENT=(26,"2nd in C Major") +COMMENT=(27,"1st in C Major") +COMMENT=(28,"6th on C Major") +COMMENT=(29,"5th in C Major") +COMMENT=(30,"1sth in C Major") +COMMENT=(31,"1sth in C Major") +COMMENT=(32,"1sth in C Major") +SEPARATOR=(8,1) +SEPARATOR=(16,1) +SEPARATOR=(19,1) +SEPARATOR=(29,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD1C.prj b/guitar/tabs/Munro/Major Scale Riffs/CD1C.prj new file mode 100644 index 0000000..00e34be --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD1C.prj @@ -0,0 +1,36 @@ +WINTABV1.00 +TABLATURE=CD1C.tab +TYPES=(0,4)(1,4)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,4)(15,4)(16,4)(17,4)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,4)(27,4) +COMMENT=(0,"CM7") +COMMENT=(1,"7th in C Major.") +COMMENT=(2,"6th in C Major") +COMMENT=(3,"minor 6 in C Major (passing note?)") +COMMENT=(4,"5th in C Major") +COMMENT=(5,"6th in C Major") +COMMENT=(6,"1st in C Major") +COMMENT=(7,"3rd in C Major") +COMMENT=(8,"4th in C Major") +COMMENT=(9,"5th in C Major") +COMMENT=(10,"7th in C Major") +COMMENT=(11,"2nd in C Major") +COMMENT=(12,"1st in C Major") +COMMENT=(13,"1st in C Major") +COMMENT=(14,"1st in C Major") +COMMENT=(15,"1st in C Major") +COMMENT=(16,"1st in C Major") +COMMENT=(17,"minor 5th in C Major (passing note?)") +COMMENT=(18,"5th in C Major") +COMMENT=(19,"minor 5th in C Major (passing note?)") +COMMENT=(20,"5th in C Major") +COMMENT=(21,"minor third in C Major (passing note?)") +COMMENT=(22,"3rd in C Major") +COMMENT=(23,"minor 3rd in C Major (passingt note?)") +COMMENT=(24,"3rd in C Major") +COMMENT=(25,"5th in C Major") +COMMENT=(26,"6th in C Major") +COMMENT=(27,"1st in C Major") +SEPARATOR=(3,1) +SEPARATOR=(11,1) +SEPARATOR=(14,1) +SEPARATOR=(19,1) +SEPARATOR=(26,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD1C.tab b/guitar/tabs/Munro/Major Scale Riffs/CD1C.tab new file mode 100644 index 0000000..c99b5f9 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD1C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-----------------8-12------7-10-8-8-8-8-8----------------------8- +B|-8--12-10-------10---------8----------------7-8-7-8---------8-10--- +G|-9--------13-12---------10--------------------------8-9-8-9-------- +D|-9----------------------------------------------------------------- +A|-10---------------------------------------------------------------- +E|-8----------------------------------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD2A.prj b/guitar/tabs/Munro/Major Scale Riffs/CD2A.prj new file mode 100644 index 0000000..fa7ad41 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD2A.prj @@ -0,0 +1,23 @@ +WINTABV1.00 +TABLATURE=CD2A.tab +TYPES=(0,8)(1,8)(2,4)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,4)(15,8)(16,8) +COMMENT=(0,"5,7,3 (2nd inversion) of BMaj7 (root omitted) as a chromatic approach to C Major triad") +COMMENT=(1,"5,7,3 (2nd inversion of CMajor triad) root omitted.") +COMMENT=(2,"5,7,3 (2nd inversion) of BMaj7 as a chromatic approach to CMajor triad, root omitted") +COMMENT=(3,"5,7,3 (2nd inversion of C Major triad) (root omitted)") +COMMENT=(4,"5th of C Major") +COMMENT=(5,"CMaj 7 in 2nd inversion (5th -G- in bass)") +COMMENT=(6,"1st of C major") +COMMENT=(7,"C Maj7 in third inversion (7,3,5,9) root omitted, with an added 9th (D)") +COMMENT=(8,"1st of C major") +COMMENT=(9,"CMaj 7 in 2nd inversion (5th -G- in bass)") +COMMENT=(10,"5th of C major") +COMMENT=(11,"5,7,3 (2nd inversion) of BMaj7 (root omitted) as a chromatic approach to C Major triad") +COMMENT=(12,"5,7,3 (2nd inversion of CMajor triad) root omitted.") +COMMENT=(13,"5,7,3 (2nd inversion of CMajor triad) root omitted.") +COMMENT=(14,"5,7,3 (2nd inversion of CMajor triad) root omitted.") +COMMENT=(15,"5,7,3 (2nd inversion) of BMaj7 (root omitted) as a chromatic approach to C Major triad") +COMMENT=(16,"5,7,3 (2nd inversion of CMajor triad) root omitted.") +SEPARATOR=(2,1) +SEPARATOR=(10,1) +SEPARATOR=(13,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD2A.tab b/guitar/tabs/Munro/Major Scale Riffs/CD2A.tab new file mode 100644 index 0000000..7e6f441 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD2A.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---------3-7-8-10-8-7-3------------- +B|-4-5-4-5---5---8----5---4-5-5-5-4-5- +G|-3-4-3-4---5---9----5---3-4-4-4-3-4- +D|-4-5-4-5---5---9----5---4-5-5-5-4-5- +A|------------------------------------ +E|------------------------------------ + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD2B.prj b/guitar/tabs/Munro/Major Scale Riffs/CD2B.prj new file mode 100644 index 0000000..741802d --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD2B.prj @@ -0,0 +1,25 @@ +WINTABV1.00 +TABLATURE=CD2B.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,8)(8,8)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,8)(17,8)(18,4) +COMMENT=(0,"C Maj7 root position on 5th string") +COMMENT=(1,"C Maj 7 (5,7,3,5), 2nd inversion, root omitted.") +COMMENT=(2,"C Maj7 (5,1,3,7) 2nd inversion.") +COMMENT=(3,"C Maj 7 (5,7,3,5), 2nd inversion, root omitted.") +COMMENT=(4,"1st of C major") +COMMENT=(5,"5,7,3 of C Maj7, so it's a C Maj7 2nd inversion with root omitted.") +COMMENT=(6,"5th of C major") +COMMENT=(7,"C Maj7 (5,1,3,7) 2nd inversion.") +COMMENT=(8,"C Maj7 (5,1,3,7) 2nd inversion.") +COMMENT=(9,"C Maj 7 (5,7,3,5), 2nd inversion, root omitted.") +COMMENT=(10,"C Maj7 root position on 5th string") +COMMENT=(11,"C Maj 7 (5,7,3,5), 2nd inversion, root omitted.") +COMMENT=(12,"C Maj7 (5,1,3,7) 2nd inversion.") +COMMENT=(13,"C Maj 7 (5,7,3,5), 2nd inversion, root omitted.") +COMMENT=(14,"C Maj7 (1,5,7,3)") +COMMENT=(15,"(7,3,5,9) of CMaj 7. So this is CMaj 7, third inversion, root omitted, with an added 9th.") +COMMENT=(16,"C Maj7 (5,1,3,7)") +COMMENT=(17,"6th of C major") +COMMENT=(18,"(5,7,3,5) of CMaj 7. So it's a CMaj7, 2nd inversion, root omitted.") +SEPARATOR=(3,1) +SEPARATOR=(9,1) +SEPARATOR=(13,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD2B.tab b/guitar/tabs/Munro/Major Scale Riffs/CD2B.tab new file mode 100644 index 0000000..dac2593 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD2B.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---3-7-3-----3-7-7-3---3-7-3-12-10-7-5-3- +B|-5-5-5-5---5---5-5-5-5-5-5-5-12-8--5---5- +G|-4-4-5-4---4---5-5-4-4-4-5-4-12-9--5---4- +D|-5-5-5-5---5---5-5-5-5-5-5-5-10-9--5---5- +A|-3-------3-----------3------------------- +E|----------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD3A.prj b/guitar/tabs/Munro/Major Scale Riffs/CD3A.prj new file mode 100644 index 0000000..5e56cee --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD3A.prj @@ -0,0 +1,13 @@ +WINTABV1.00 +TABLATURE=CD3A.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4) +COMMENT=(0,"(1,3,6,9) C 6/9 chord with upper extensions.") +COMMENT=(1,"(1,3,6,9) C 6/9 chord") +COMMENT=(2,"(1,3,6,9) C 6/9 chord, with upper extension 12th/5th G.") +COMMENT=(3,"(3,6,9,5) C 6/9, root omitted.") +COMMENT=(4,"(6,9,5,7) C 6/9, root omitted.") +COMMENT=(5,"(6,9,5,7) C 6/9, root omitted.") +COMMENT=(6,"(7,3,6,9) C 6/9, root omitted.") +SEPARATOR=(1,1) +SEPARATOR=(3,1) +SEPARATOR=(5,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD3A.tab b/guitar/tabs/Munro/Major Scale Riffs/CD3A.tab new file mode 100644 index 0000000..3174b46 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD3A.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-7---3-3-7-7-10- +B|-8-3-3-3-8-8-10- +G|-7-2-2-2-7-7-9-- +D|-7-2-2-2-7-7-9-- +A|-7-3-3---------- +E|-8-------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD3B.prj b/guitar/tabs/Munro/Major Scale Riffs/CD3B.prj new file mode 100644 index 0000000..4f6b5ce --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD3B.prj @@ -0,0 +1,7 @@ +WINTABV1.00 +TABLATURE=CD3B.tab +TYPES=(0,4)(1,8)(2,8)(3,8)(4,8)(5,4)(6,4)(7,4)(8,4)(9,8)(10,8)(11,4)(12,8)(13,8)(14,4)(15,4)(16,4)(17,4)(18,8)(19,8)(20,4) +SEPARATOR=(2,1) +SEPARATOR=(8,1) +SEPARATOR=(14,1) +SEPARATOR=(19,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD3B.tab b/guitar/tabs/Munro/Major Scale Riffs/CD3B.tab new file mode 100644 index 0000000..84716c6 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD3B.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-10-12-15-15-12-10-8-12-12-12-10-8-8-10-10-8-7-5-3-3- +B|-8-10-10-15-15-10-10-8-10-10-10-10-8-8-8--8--8-8-5-3-3- +G|-7-9--12-14-14-12-9--7-12-12-12-9--7-7-9--9--9-9-5-2-2- +D|-7-9--10-14-14-10-9--7-10-10-10-9--7-7-9--9--9-9-5-2-2- +A|------------------------------------------------------- +E|------------------------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD4A.prj b/guitar/tabs/Munro/Major Scale Riffs/CD4A.prj new file mode 100644 index 0000000..fcc1182 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD4A.prj @@ -0,0 +1,14 @@ +WINTABV1.00 +TABLATURE=CD4A.tab +TYPES=(0,4)(1,4)(2,8)(3,4)(4,4)(5,4)(6,8)(7,4) +COMMENT=(0,"(1,4,5,1) Csus4.") +COMMENT=(1,"(1,5,1,4) Csus4.") +COMMENT=(2,"(1,5,1,2) Csus2.") +COMMENT=(3,"(1,5,1,2) Csus2.") +COMMENT=(4,"(1,4,5,1) Csus4.") +COMMENT=(5,"4th in C major.") +COMMENT=(6,"(1,2,5) Csus2.") +COMMENT=(7,"(1,2,5) Csus2.") +SEPARATOR=(1,1) +SEPARATOR=(3,1) +SEPARATOR=(5,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD4A.tab b/guitar/tabs/Munro/Major Scale Riffs/CD4A.tab new file mode 100644 index 0000000..9ad308f --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD4A.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---------8----------- +B|-1-6-3-3-8-----8--8-- +G|-0-5-5-5-10-10-7--7-- +D|-3-5-5-5-10----10-10- +A|-3-3-3-3------------- +E|--------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD4B.prj b/guitar/tabs/Munro/Major Scale Riffs/CD4B.prj new file mode 100644 index 0000000..819f3b9 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD4B.prj @@ -0,0 +1,19 @@ +WINTABV1.00 +TABLATURE=CD4B.tab +TYPES=(0,8)(1,8)(2,4)(3,4)(4,4)(5,4)(6,8)(7,8)(8,8)(9,8)(10,4)(11,4)(12,4) +COMMENT=(0,"(1,4,5,1) Csus4.") +COMMENT=(1,"(1,4,5,1) Csus4.") +COMMENT=(2,"(1,5,4,1) Bsus4.") +COMMENT=(3,"(1,4,5,1) Csus4.") +COMMENT=(4,"(1,4,5,1) Csus4.") +COMMENT=(5,"(1,4,5,1) Csus4.") +COMMENT=(6,"(7,3,4) of C Major (?)") +COMMENT=(7,"(1,+4,5) of C major. (Augmented 4th ?)") +COMMENT=(8,"(1,4,5) of CMajor (Csus4)") +COMMENT=(9,"(1,4,5) of CMajor (Csus4)") +COMMENT=(10,"(1,5,1,4) of C major (Csus4)") +COMMENT=(11,"(1,4,5) of CMajor (Csus4)") +COMMENT=(12,"(1,4,5) of CMajor (Csus4)") +SEPARATOR=(3,1) +SEPARATOR=(7,1) +SEPARATOR=(11,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD4B.tab b/guitar/tabs/Munro/Major Scale Riffs/CD4B.tab new file mode 100644 index 0000000..40df0cf --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD4B.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--8--7-8--8--8--7-8--8--8--13-8--8-- +B|-8--8--7-8--8--8--6-8--8--8--13-8--8-- +G|-10-10-9-10-10-10-9-11-10-10-12-10-10- +D|-10-10-9-10-10-10-9-10-10-10-10-10-10- +A|-------------------------------------- +E|-------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD5A.prj b/guitar/tabs/Munro/Major Scale Riffs/CD5A.prj new file mode 100644 index 0000000..72bab94 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD5A.prj @@ -0,0 +1,40 @@ +WINTABV1.00 +TABLATURE=CD5A.tab +TYPES=(0,4)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,4) +COMMENT=(0,"1st in C major") +COMMENT=(1,"3rd in C major") +COMMENT=(2,"5th in C major") +COMMENT=(3,"1st in C major") +COMMENT=(4,"3rd in C major") +COMMENT=(5,"5th in C major") +COMMENT=(6,"1st in C major") +COMMENT=(7,"3rd in C major") +COMMENT=(8,"5th in C major") +COMMENT=(9,"1st in C major") +COMMENT=(10,"3rd in C major") +COMMENT=(11,"5th in C major") +COMMENT=(12,"1st in C major") +COMMENT=(13,"3rd in C major") +COMMENT=(14,"5th in C major") +COMMENT=(15,"1st in C major") +COMMENT=(16,"3rd in C major") +COMMENT=(17,"5th in C major") +COMMENT=(18,"1st in C major") +COMMENT=(19,"3rd in C major") +COMMENT=(20,"5th in C major") +COMMENT=(21,"3rd in C major") +COMMENT=(22,"1st in C major") +COMMENT=(23,"5th in C major") +COMMENT=(24,"3rd in C major") +COMMENT=(25,"1st in C major") +COMMENT=(26,"3rd in C major") +COMMENT=(27,"3rd in C major") +COMMENT=(28,"1st in C major") +COMMENT=(29,"5th in C major") +COMMENT=(30,"3rd in C major") +COMMENT=(31,"1st in C major") +COMMENT=(32,"5th in C major") +SEPARATOR=(3,1) +SEPARATOR=(11,1) +SEPARATOR=(19,1) +SEPARATOR=(27,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD5A.tab b/guitar/tabs/Munro/Major Scale Riffs/CD5A.tab new file mode 100644 index 0000000..9153401 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD5A.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-------------12-15----12------------------------------------------------------------12- +B|----------13-------13-------13------------------------------------------------13------- +G|-------12----------------12----9-12----9----------------------------9----12-9----12---- +D|----14------------------------------10------10----------------10------10--------------- +A|-15--------------------------------------10----7-10---7-10-------10-------------------- +E|----------------------------------------------------8------12-------------------------- + + + +E|----15- +B|-13---- +G|------- +D|------- +A|------- +E|------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD5B.prj b/guitar/tabs/Munro/Major Scale Riffs/CD5B.prj new file mode 100644 index 0000000..91fac35 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD5B.prj @@ -0,0 +1,67 @@ +WINTABV1.00 +TABLATURE=CD5B.tab +TYPES=(0,4)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,4)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,4)(21,8)(22,8)(23,8)(24,8)(25,8)(26,4)(27,4)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,4)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8) +COMMENT=(0,"7th of C major") +COMMENT=(1,"1st of C major") +COMMENT=(2,"7th of c major") +COMMENT=(3,"1st of C major") +COMMENT=(4,"Augmented 4th (chromatic approach to the 5th which follows)") +COMMENT=(5,"5th of C major") +COMMENT=(6,"Augmented 4th (chromatic approach to the 5th which follows)") +COMMENT=(7,"5th of C major") +COMMENT=(8,"3rd od C major") +COMMENT=(9,"Augmented 2nd (chromatic approach sequence)") +COMMENT=(10,"3rd of C major") +COMMENT=(11,"Augmented 2nd (chromatic approach sequence)") +COMMENT=(12,"3rd of C major") +COMMENT=(13,"5th of C major") +COMMENT=(14,"(7,+2) of C major (chromatic approach)") +COMMENT=(15,"(1,3) of C major") +COMMENT=(16,"(7,+2) of C major (chromatic approach)") +COMMENT=(17,"(1,3) of C major") +COMMENT=(18,"(7,+2) of C major (chromatic approach)") +COMMENT=(19,"(1,3) of C major") +COMMENT=(20,"5th of C major") +COMMENT=(21,"(7,+2) of C major (chromatic approach)") +COMMENT=(22,"(1,3) of C major") +COMMENT=(23,"(7,+2) of C major (chromatic approach)") +COMMENT=(24,"(1,3) of C major") +COMMENT=(25,"5th of C major") +COMMENT=(26,"5th of C major") +COMMENT=(27,"7th of C major") +COMMENT=(28,"1st of C major") +COMMENT=(29,"7th of C major") +COMMENT=(30,"1st of C major") +COMMENT=(31,"Augmented 4th of C major (chromatic approach note)") +COMMENT=(32,"5th of C major") +COMMENT=(33,"Augmented 4th of C major (chromatic approach note)") +COMMENT=(34,"5th of C major") +COMMENT=(35,"Augmented 2nd (chromatic approach note)") +COMMENT=(36,"3rd of C major") +COMMENT=(37,"Augmented 2nd of C major") +COMMENT=(38,"3rd of C major") +COMMENT=(39,"Augmented 2nd of C major") +COMMENT=(40,"3rd of C major") +COMMENT=(41,"5th of C major") +COMMENT=(42,"(7,+2) of C major.") +COMMENT=(43,"(1,3) of C major") +COMMENT=(44,"(+4,7) of C major") +COMMENT=(45,"(5,1) of C major") +COMMENT=(46,"(+2,+4) of C major") +COMMENT=(47,"(3,5) of C major") +COMMENT=(48,"(7,+2) of C major") +COMMENT=(49,"(1,3) of C major") +COMMENT=(50,"(+4,7) of C major") +COMMENT=(51,"(5,1) of C major") +COMMENT=(52,"3rd of C major") +COMMENT=(53,"5th of C major") +COMMENT=(54,"1st of C major") +SEPARATOR=(0,1) +SEPARATOR=(7,1) +SEPARATOR=(14,1) +SEPARATOR=(21,1) +SEPARATOR=(27,1) +SEPARATOR=(35,1) +SEPARATOR=(42,1) +SEPARATOR=(50,1) +SEPARATOR=(54,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD5B.tab b/guitar/tabs/Munro/Major Scale Riffs/CD5B.tab new file mode 100644 index 0000000..c8b8b7e --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD5B.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-7-8-7-8-----------------------------------------------7-8-7-8- +B|---------7-8-7-8-----------8-4-5-4-5-4-5-8-4-5-4-5-8-8--------- +G|-----------------9-8-9-8-9---4-5-4-5-4-5---4-5-4-5------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-----------------------11-12-------------------------8- +B|-7-8-7-8-------------8-12-13-12-13-7-8-------------8--- +G|---------8-9-8-9-8-9---------11-12-8-9-8-9-------9----- +D|---------------------------------------9-10-9-10------- +A|--------------------------------------------9-10------- +E|------------------------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD6A.prj b/guitar/tabs/Munro/Major Scale Riffs/CD6A.prj new file mode 100644 index 0000000..d0d2994 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD6A.prj @@ -0,0 +1,38 @@ +WINTABV1.00 +TABLATURE=CD6A.tab +TYPES=(0,4)(1,8)(2,8)(3,8)(4,8)(5,8)(6,4)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,4)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,4) +COMMENT=(0,"7th in C major") +COMMENT=(1,"1st in C major") +COMMENT=(2,"3rd in C major") +COMMENT=(3,"5th in C major") +COMMENT=(4,"6th in C major") +COMMENT=(5,"7th in C major") +COMMENT=(6,"7th in C major, (octave down from previous note)") +COMMENT=(7,"1st in C major") +COMMENT=(8,"3rd in C major") +COMMENT=(9,"5th in C major") +COMMENT=(10,"6th in C major") +COMMENT=(11,"7th in C major") +COMMENT=(12,"5th in C major") +COMMENT=(13,"3rth in C major") +COMMENT=(14,"7th in C major") +COMMENT=(15,"1st on C major") +COMMENT=(16,"3rd in C major") +COMMENT=(17,"5th in C major") +COMMENT=(18,"6th in C major") +COMMENT=(19,"7th in C major") +COMMENT=(20,"5th in C major") +COMMENT=(21,"6th in C major") +COMMENT=(22,"3rd in C major") +COMMENT=(23,"5th in C major") +COMMENT=(24,"1st in C major") +COMMENT=(25,"3rd in C major") +COMMENT=(26,"7th in C major") +COMMENT=(27,"1st in C major") +COMMENT=(28,"5th in C major") +COMMENT=(29,"3rd in C major") +COMMENT=(30,"3rd in C major") +SEPARATOR=(3,1) +SEPARATOR=(9,1) +SEPARATOR=(17,1) +SEPARATOR=(25,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD6A.tab b/guitar/tabs/Munro/Major Scale Riffs/CD6A.tab new file mode 100644 index 0000000..3e24b6b --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD6A.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---------5-7---------5-7-------------5-7---5------------------- +B|-----5-8---------5-8-----8-5-----5-8-----8---5-8---5----------- +G|-4-5---------4-5-------------4-5-----------------5---4-5------- +D|---------------------------------------------------------5----- +A|-----------------------------------------------------------7-7- +E|--------------------------------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD6B.prj b/guitar/tabs/Munro/Major Scale Riffs/CD6B.prj new file mode 100644 index 0000000..42a4b47 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD6B.prj @@ -0,0 +1,42 @@ +WINTABV1.00 +TABLATURE=CD6B.tab +TYPES=(0,8)(1,8)(2,4)(3,8)(4,8)(5,4)(6,8)(7,8)(8,4)(9,8)(10,8)(11,4)(12,8)(13,8)(14,8)(15,4)(16,8)(17,8)(18,8)(19,4)(20,8)(21,8)(22,8)(23,4)(24,8)(25,8)(26,8)(27,4)(28,8)(29,8)(30,8)(31,4)(32,8)(33,8)(34,8)(35,8) +COMMENT=(0,"1st in C major") +COMMENT=(1,"7th in C major") +COMMENT=(2,"3rd in C major") +COMMENT=(3,"1st in C major") +COMMENT=(4,"5th in C major") +COMMENT=(5,"3rd in C major") +COMMENT=(6,"7th in C major") +COMMENT=(7,"5th in C major") +COMMENT=(8,"1st in C major") +COMMENT=(9,"6th in C major") +COMMENT=(10,"3rd in C major") +COMMENT=(11,"1st in C major") +COMMENT=(12,"7th in C major") +COMMENT=(13,"1st in C major") +COMMENT=(14,"7th in C major") +COMMENT=(15,"5th in C major") +COMMENT=(16,"5th in C major") +COMMENT=(17,"7th in C major") +COMMENT=(18,"5th in C major") +COMMENT=(19,"3rd in C major") +COMMENT=(20,"3rd in C major") +COMMENT=(21,"5th in C major") +COMMENT=(22,"3rd in C major") +COMMENT=(23,"1st in C major") +COMMENT=(24,"1st in C major") +COMMENT=(25,"3rd in C major") +COMMENT=(26,"1st in C major") +COMMENT=(27,"7th in C major") +COMMENT=(28,"7th in C major") +COMMENT=(29,"1st in C major") +COMMENT=(30,"7th in C major") +COMMENT=(31,"5th in C major") +COMMENT=(32,"5th in C major") +COMMENT=(33,"7th in C major") +COMMENT=(34,"5th in C major") +COMMENT=(35,"3rd in C major") +SEPARATOR=(11,1) +SEPARATOR=(19,1) +SEPARATOR=(27,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD6B.tab b/guitar/tabs/Munro/Major Scale Riffs/CD6B.tab new file mode 100644 index 0000000..4a4c411 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD6B.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|---------------3---5---8-7-8-7-----7--------------------------- +B|-----------5---------5---------8-8---8-5-5-8-5-----5----------- +G|---4---5-----4---5-----------------------------5-5---5-4-4-5-4- +D|-----2---5----------------------------------------------------- +A|-3------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|----------- +B|----------- +G|-----4----- +D|-5-5---5-2- +A|----------- +E|----------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD6C.prj b/guitar/tabs/Munro/Major Scale Riffs/CD6C.prj new file mode 100644 index 0000000..12c86bb --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD6C.prj @@ -0,0 +1,33 @@ +WINTABV1.00 +TABLATURE=CD6C.tab +TYPES=(0,4)(1,8)(2,8)(3,8)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,8)(20,8)(21,8)(22,4)(23,4)(24,4)(25,8)(26,8)(27,4) +COMMENT=(0,"7th in C major") +COMMENT=(1,"1st in C major") +COMMENT=(2,"3rd in C major") +COMMENT=(3,"5th in C major") +COMMENT=(4,"7th in Cmajor") +COMMENT=(5,"1st in Cmajor") +COMMENT=(6,"3rd in C major") +COMMENT=(7,"5th in C major") +COMMENT=(8,"3rd in C major") +COMMENT=(9,"1st in C major") +COMMENT=(10,"7th in C major") +COMMENT=(11,"3rd in C major") +COMMENT=(12,"1st in C major") +COMMENT=(13,"6th in C major") +COMMENT=(14,"5th in C major") +COMMENT=(15,"7th in C major") +COMMENT=(16,"6th in C major") +COMMENT=(17,"5th in C major") +COMMENT=(18,"3rd in C major") +COMMENT=(19,"5th in C major") +COMMENT=(20,"3rd in C major") +COMMENT=(21,"1st in C major") +COMMENT=(22,"7th in C major") +COMMENT=(23,"1st in C major") +COMMENT=(24,"1st in C major") +COMMENT=(25,"1st in C major") +COMMENT=(26,"5th in C major") +COMMENT=(27,"5th in C major") +SEPARATOR=(10,1) +SEPARATOR=(23,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD6C.tab b/guitar/tabs/Munro/Major Scale Riffs/CD6C.tab new file mode 100644 index 0000000..bb0ba64 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD6C.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---------7-8-12-15-12-------12-8------7-5----------------------------- +B|-----5-8--------------13-12------10-8-----8-5-8----------------------- +G|-4-5--------------------------------------------9--------------------- +D|--------------------------------------------------10-9-10-10-10------- +A|----------------------------------------------------------------10-10- +E|---------------------------------------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD7.prj b/guitar/tabs/Munro/Major Scale Riffs/CD7.prj new file mode 100644 index 0000000..23cd511 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD7.prj @@ -0,0 +1,13 @@ +WINTABV1.00 +TABLATURE=CD7.tab +TYPES=(0,4)(1,8)(2,8)(3,8)(4,8)(5,4)(6,8)(7,4)(8,4)(9,8)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,8)(17,4)(18,8)(19,8)(20,4)(21,8)(22,8)(23,4)(24,4)(25,8)(26,8)(27,8)(28,4)(29,8)(30,8)(31,8)(32,4)(33,4)(34,4)(35,8)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,8)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,8)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,8)(64,8)(65,4) +RANGE=0;6;RANGE_0_6 +SEPARATOR=(6,1) +SEPARATOR=(13,1) +SEPARATOR=(23,1) +SEPARATOR=(32,1) +SEPARATOR=(39,1) +SEPARATOR=(46,1) +SEPARATOR=(54,1) +SEPARATOR=(59,1) +SEPARATOR=(65,1) diff --git a/guitar/tabs/Munro/Major Scale Riffs/CD7.tab b/guitar/tabs/Munro/Major Scale Riffs/CD7.tab new file mode 100644 index 0000000..6df16b1 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/CD7.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-5-------------10-------------8------------------7-5-10----8---7--- +B|-5-6-5-----8---12---------6---8--------------5-8---5----10---8---6- +G|-6-----7-5---7-10-7-5-4-----5-9--5-4-----4-5-------5--------------- +D|-7-------------12-------7-----9------7-5-----------5--------------- +A|-5-------------10-------------10-------------------7--------------- +E|------------------------------8--------------------5--------------- + + + +E|-5---5-------------10-------------8----------------2-3-7-8-14-5---- +B|---5-5-6-5-----8---12---------6---8----------------4-5-7-8----5---- +G|-----6-----7-5---7-10-7-5-4-----5-9--5-4-------4-5-3-4-6-7----6-14- +D|-----7-------------12-------7-----9------7-5-7-----4-5-6-7----7---- +A|-----5-------------10-------------10--------------------------5---- +E|----------------------------------8-------------------------------- + + + +E|----12-12---- +B|------------- +G|-12-------12- +D|------------- +A|------------- +E|------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/cd1a.tab b/guitar/tabs/Munro/Major Scale Riffs/cd1a.tab new file mode 100644 index 0000000..17c7a94 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/cd1a.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-8-----8-8-7-5---7------------------------- +B|-----8-8---------8---5-8-------------5-6-7-8- +G|-------------------------7-7-5-----5--------- +D|-------------------------------6-7----------- +A|--------------------------------------------- +E|--------------------------------------------- + diff --git a/guitar/tabs/Munro/Major Scale Riffs/cd1b.tab b/guitar/tabs/Munro/Major Scale Riffs/cd1b.tab new file mode 100644 index 0000000..5232404 --- /dev/null +++ b/guitar/tabs/Munro/Major Scale Riffs/cd1b.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-8-------8------10------8------10------8----8-8-8-8-7-5----------------- +B|-8--8-10---8-10----8-10---8-10----8-10---10-------------8-6-5----------- +G|-9------------------------------------------------------------7-5-----5- +D|-9----------------------------------------------------------------7-5--- +A|-10--------------------------------------------------------------------- +E|-8---------------------------------------------------------------------- + + + +E|----- +B|----- +G|-5-5- +D|----- +A|----- +E|----- + diff --git a/guitar/tabs/Phrygian/Phrygian(D-Miles Davis).prj b/guitar/tabs/Phrygian/Phrygian(D-Miles Davis).prj new file mode 100644 index 0000000..fcc66fe --- /dev/null +++ b/guitar/tabs/Phrygian/Phrygian(D-Miles Davis).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Phrygian\Phrygian(D-Miles Davis).tab +TYPES=(0,2)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16) diff --git a/guitar/tabs/Phrygian/Phrygian(D-Miles Davis).tab b/guitar/tabs/Phrygian/Phrygian(D-Miles Davis).tab new file mode 100644 index 0000000..54a7a6f --- /dev/null +++ b/guitar/tabs/Phrygian/Phrygian(D-Miles Davis).tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|-4------------------------------------------------------------- +G|-5------------------------------------------------------------- +D|-4------------------------------------------------------------- +A|-5-5-5-5-5-6-8-8-8-6-5-5-5-------5-5-6-8-8-8-7-5-6-5-5-5-5----- +E|---------------------------5-8-8---------------------------5-8- + + + +E|----------------------------------------- +B|----------------------------------------- +G|----------------------------------------- +D|-----------5-8--------------------------- +A|-5-5-6-8-8-----5-6-5-5-8----------------- +E|-------------------------6-5-5-5-8-5-6-6- + diff --git a/guitar/tabs/Phrygian/PhrygianChord.prj b/guitar/tabs/Phrygian/PhrygianChord.prj new file mode 100644 index 0000000..f2daa2e --- /dev/null +++ b/guitar/tabs/Phrygian/PhrygianChord.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Phrygian\PhrygianChord.tab +TYPES=(0,4)(1,4)(2,4)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,4)(15,4)(16,8)(17,8)(18,8)(19,8)(20,8)(21,4)(22,8) diff --git a/guitar/tabs/Phrygian/PhrygianChord.tab b/guitar/tabs/Phrygian/PhrygianChord.tab new file mode 100644 index 0000000..f372aa7 --- /dev/null +++ b/guitar/tabs/Phrygian/PhrygianChord.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-7-7-7--------------------7-----7---------7-7-5- +B|-6-6-6------------------6---6---6-------6---6-5- +G|-7-7-7----------------7---------7-----7-----7-6- +D|-7-6-7------------7-------------7---7-------7-6- +A|-7-7-8-8-7-8-10-7---8---------7-8-8---------8-7- +E|----------------------------------------------5- + diff --git a/guitar/tabs/Phrygian/PhrygianChords.prj b/guitar/tabs/Phrygian/PhrygianChords.prj new file mode 100644 index 0000000..5bcda4c --- /dev/null +++ b/guitar/tabs/Phrygian/PhrygianChords.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Phrygian\PhrygianChords.tab +TYPES=(0,4) diff --git a/guitar/tabs/Phrygian/PhrygianChords.tab b/guitar/tabs/Phrygian/PhrygianChords.tab new file mode 100644 index 0000000..577e238 --- /dev/null +++ b/guitar/tabs/Phrygian/PhrygianChords.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-7- +B|-6- +G|-7- +D|-6- +A|-7- +E|--- + diff --git a/guitar/tabs/Progression/simple.prj b/guitar/tabs/Progression/simple.prj new file mode 100644 index 0000000..682c25f --- /dev/null +++ b/guitar/tabs/Progression/simple.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=simple.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8) +RANGE=0;25;LOOP_1 diff --git a/guitar/tabs/Progression/simple.tab b/guitar/tabs/Progression/simple.tab new file mode 100644 index 0000000..54d86a6 --- /dev/null +++ b/guitar/tabs/Progression/simple.tab @@ -0,0 +1,8 @@ +e:-5-------------3--------------5-----------------5-7-8-------3-5-5-3-3-3-----------------------------5------------------------| +B:-6-------------5-6-5----------6-----5---6-5-8-6-------------5-6-6-5-5-5-----------------------5-6-8-6------------------------| +G:-5-------------4--------------5---5---7---------------------4-5-5-4-4-4-------------------5-7-------5------------------------| +D:-7---------5-7-5-----5-5-7-5--7-7---------------------------5-7-7-5-5-5---------5-7-5-7-7-----------7------------------------| +A:-5-3-5-7-8-----3--------------5-----------------------------3-5-5-3-3-3-3-5-7-8---------------------5------------------------| +E:-----------------------------------------------------------------------------------------------------------------------------| + + diff --git a/guitar/tabs/Progression/simple2.prj b/guitar/tabs/Progression/simple2.prj new file mode 100644 index 0000000..f751385 --- /dev/null +++ b/guitar/tabs/Progression/simple2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=simple2.tab +TYPES=(0,16)(1,16)(2,16)(3,16) diff --git a/guitar/tabs/Progression/simple2.tab b/guitar/tabs/Progression/simple2.tab new file mode 100644 index 0000000..da2fd1b --- /dev/null +++ b/guitar/tabs/Progression/simple2.tab @@ -0,0 +1,9 @@ + +e:-5---------------------------------------------------------------------------------------------------------------------------| +B:-6---------------------------------------------------------------------------------------------------------------------------| +G:-5---------------------------------------------------------------------------------------------------------------------------| +D:-7---------------------------------------------------------------------------------------------------------------------------| +A:-5-3-5-7-8-------------------------------------------------------------------------------------------------------------------| +E:-----------------------------------------------------------------------------------------------------------------------------| + + diff --git a/guitar/tabs/Project/Cliffs (Main Theme).prj b/guitar/tabs/Project/Cliffs (Main Theme).prj new file mode 100644 index 0000000..0966552 --- /dev/null +++ b/guitar/tabs/Project/Cliffs (Main Theme).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\prjtest\Cliffs (Main Theme).tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4) diff --git a/guitar/tabs/Project/Cliffs (Main Theme).tab b/guitar/tabs/Project/Cliffs (Main Theme).tab new file mode 100644 index 0000000..c01b89c --- /dev/null +++ b/guitar/tabs/Project/Cliffs (Main Theme).tab @@ -0,0 +1,10 @@ +%TabMaster v1.03a% + + +E|-----7-10--------7-10-8--8------------- +B|---8---8-------8------8----10-b12-10-8- +G|-7--------5-s7------------------------- +D|----------------------10--------------- +A|-------10------------------------------ +E|--------------------------------------- + diff --git a/guitar/tabs/Project/Cliffs(Intro Phrase3).prj b/guitar/tabs/Project/Cliffs(Intro Phrase3).prj new file mode 100644 index 0000000..ce650e1 --- /dev/null +++ b/guitar/tabs/Project/Cliffs(Intro Phrase3).prj @@ -0,0 +1,5 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\prjtest\Cliffs(Intro Phrase3).tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,32)(77,8) +RANGE=42;77;Intermediate +RANGE=0;46;Intro diff --git a/guitar/tabs/Project/Cliffs(Intro Phrase3).tab b/guitar/tabs/Project/Cliffs(Intro Phrase3).tab new file mode 100644 index 0000000..06f0718 --- /dev/null +++ b/guitar/tabs/Project/Cliffs(Intro Phrase3).tab @@ -0,0 +1,28 @@ +%TabMaster v1.03a% + + +E|-15----15----15----15----15----15----15----15----15----15----15----15----15----15----15----15- +B|----19----------------------------17----19----------------------------17----19---------------- +G|----------19----------------17----------------19----------------17----------------19----17---- +D|----------------19----17----------------------------19----17---------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|----15----15----15----15----15----17-15----15-19-17-15----17-15------------------------------- +B|-17----19----------------17----19-------19-------------19-------19-15----17-15---------------- +G|-------------19----17-------------------------------------------------17-------17-14----16-14- +D|-------------------------------------------------------------------------------------17------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------- +B|-------------------------------------------18-b20- +G|----------16-14----------16-14-------------------- +D|-17-14----------17-14----------17-14-------------- +A|-------17-------------17-------------17----------- +E|----------------------------------------15-------- + diff --git a/guitar/tabs/Project/The Wizard -Excerpts(Al DiMeola).prj b/guitar/tabs/Project/The Wizard -Excerpts(Al DiMeola).prj new file mode 100644 index 0000000..91480cd --- /dev/null +++ b/guitar/tabs/Project/The Wizard -Excerpts(Al DiMeola).prj @@ -0,0 +1,12 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\Tabs\Project\al dimeola.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,8)(5,16)(6,16)(7,16)(8,16)(9,16)(10,8)(11,16)(12,16)(13,16)(14,16)(15,8)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,8)(23,16)(24,16)(25,16)(26,16)(27,8)(28,16)(29,16)(30,16)(31,16)(32,16)(33,8)(34,16)(35,16)(36,16)(37,8)(38,16)(39,16)(40,16)(41,16)(42,16)(43,8)(44,4)(45,4)(46,4)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,8)(56,4)(57,8)(58,4)(59,16)(60,16)(61,16)(62,16)(63,8)(64,16)(65,16)(66,16)(67,4)(68,4)(69,8)(70,8)(71,4)(72,4)(73,4)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,8)(84,16)(85,16)(86,8)(87,16)(88,16)(89,16)(90,4)(91,4)(92,16)(93,16)(94,16)(95,16)(96,8)(97,32)(98,32)(99,32)(100,16)(101,16)(102,16)(103,16)(104,8)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,8)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,4)(127,4)(128,4)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,8)(152,16)(153,16)(154,16)(155,8)(156,16)(157,16)(158,8)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,8)(168,16)(169,16)(170,16)(171,8)(172,16)(173,16)(174,8)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,8)(182,4)(183,16)(184,16)(185,16)(186,8)(187,16)(188,16)(189,8)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,8)(203,8)(204,8)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16) +RANGE=0;44;RANGE_0_44 +RANGE=47;71;RANGE_47_71 +RANGE=74;89;RANGE_74_89 +RANGE=92;126;RANGE_92_126 +RANGE=129;150;RANGE_129_150 +RANGE=153;165;RANGE_153_165 +RANGE=169;181;RANGE_169_181 +RANGE=184;202;RANGE_184_202 +RANGE=205;213;RANGE_205_213 diff --git a/guitar/tabs/Project/al dimeola.tab b/guitar/tabs/Project/al dimeola.tab new file mode 100644 index 0000000..ca1b5a9 --- /dev/null +++ b/guitar/tabs/Project/al dimeola.tab @@ -0,0 +1,64 @@ +%TabMaster v1.04a% + + +E|-------------------12-------------------------------12-------------14-------------------12---- +B|----------------12----12-14-12-------------------12----12-14-12----------------------12----12- +G|----11-14-13-------------------14----11-14-13-------------------14-------11-14-13------------- +D|-14----------14-------------------14----------14----------------------14----------14---------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------- +B|-14-12-----------------------------------------------------14------------------------------- +G|-------14-13-14-13----------------13-----------14-13----------16-14-13-------------14-13---- +D|-------------------16-14-14-14-16----18-16-----------14-16-------------16-14-18-16-------14- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------0-0---------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------- +B|----14-------------------------------------------------------------------------------------- +G|-------14-13-------------------------------------------------------------------------------- +D|-16----------16-14--------------------11-12-11----14----11--------11------------------------ +A|-------------------17-17-17-16-----14----------14----14----p14-12----p14-12-11-------------- +E|-------------------------------0-0---------------------------------------------14-12-0-0-12- + + + +E|----------------------------------------------------------------------12-12-12-12----12-s14-12- +B|-----------------------------------------------------14-------9-10-12-------------14----------- +G|--------------------------------------------13-14-16----16-16---------------------------------- +D|----------------------11----12-11-11-14-s16---------------------------------------------------- +A|----11-12-14-11-12-14----14-------------------------------------------------------------------- +E|-14-------------------------------------------------------------------------------------------- + + + +E|----------------------9-10-12-10-9----10-9---------------------------------------- +B|-14-----------9-10-12--------------12------12-10-9-12-10-9------------------------ +G|----14-----------------------------------------------------11-9-------------11-13- +D|-------14-------------------------------------------------------12-11-9----------- +A|---------------------------------------------------------------------------------- +E|----------0-0-----------------------------------------------------------0-0------- + + + +E|----------------------------------------------------------------------------------------- +B|----------------------------------------------------------------------------14----------- +G|-13-11-13-13-11-13-11-13-14-13-11-------11-13-13-11-13-13-11-13-14-13-11-14--------13-11- +D|----------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------- +E|----------------------------------0-0-0----------------------------------------0-0------- + + + +E|--------------------------------------------------------------9-12-9-12-s14-12------- +B|-------------------------------------------12--------------10------------------------ +G|-13-11-13-11-13-11-14-13-11-14-13-11-14-11----14-13-----11---------------------14---- +D|----------------------------------------------------------------------------------14- +A|------------------------------------------------------------------------------------- +E|----------------------------------------------------0-0------------------------------ + diff --git a/guitar/tabs/Project/al.prj b/guitar/tabs/Project/al.prj new file mode 100644 index 0000000..76d5aaa --- /dev/null +++ b/guitar/tabs/Project/al.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\prjtest\al.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16) diff --git a/guitar/tabs/Project/al.tab b/guitar/tabs/Project/al.tab new file mode 100644 index 0000000..da2d458 --- /dev/null +++ b/guitar/tabs/Project/al.tab @@ -0,0 +1,10 @@ +%TabMaster v1.03a% + + +E|-------9-12-9-12-14-12------- +B|----10----------------------- +G|-11--------------------14---- +D|--------------------------14- +A|----------------------------- +E|----------------------------- + diff --git a/guitar/tabs/Project/satriani.prj b/guitar/tabs/Project/satriani.prj new file mode 100644 index 0000000..627f557 --- /dev/null +++ b/guitar/tabs/Project/satriani.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\prjtest\satriani.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,8)(5,8)(6,8)(7,32)(8,8)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16) diff --git a/guitar/tabs/Project/satriani.tab b/guitar/tabs/Project/satriani.tab new file mode 100644 index 0000000..e6d46a8 --- /dev/null +++ b/guitar/tabs/Project/satriani.tab @@ -0,0 +1,10 @@ +%TabMaster v1.04a% + + +E|-------21-23-------23-23-21---------------------------------------------------------------- +B|----21-------24-24----------24-22-21-24-22-21-24-22-21------------------------------------- +G|-23----------------------------------------------------23-21-20-23-21-20-23-21-20-23-21-20- +D|------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + diff --git a/guitar/tabs/Project/test.prj b/guitar/tabs/Project/test.prj new file mode 100644 index 0000000..0b811ce --- /dev/null +++ b/guitar/tabs/Project/test.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=test.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4) diff --git a/guitar/tabs/Project/test.tab b/guitar/tabs/Project/test.tab new file mode 100644 index 0000000..ab79763 --- /dev/null +++ b/guitar/tabs/Project/test.tab @@ -0,0 +1,64 @@ +%TabMaster v1.04a% + + +E|-------------------12-------------------------------12-------------14-------------------12---- +B|----------------12----12-14-12-------------------12----12-14-12----------------------12----12- +G|----11-14-13-------------------14----11-14-13-------------------14-------11-14-13------------- +D|-14----------14-------------------14----------14----------------------14----------14---------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------- +B|-14-12-----------------------------------------------------14------------------------------- +G|-------14-13-14-13----------------13-----------14-13----------16-14-13-------------14-13---- +D|-------------------16-14-14-14-16----18-16-----------14-16-------------16-14-18-16-------14- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------0-0---------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------- +B|----14-------------------------------------------------------------------------------------- +G|-------14-13-------------------------------------------------------------------------------- +D|-16----------16-14--------------------11-12-11----14----11--------11------------------------ +A|-------------------17-17-17-16-----14----------14----14----p14-12----p14-12-11-------------- +E|-------------------------------0-0---------------------------------------------14-12-0-0-12- + + + +E|----------------------------------------------------------------------12-12-12-12----12-s14-12- +B|-----------------------------------------------------14-------9-10-12-------------14----------- +G|--------------------------------------------13-14-16----16-16---------------------------------- +D|----------------------11----12-11-11-14-s16---------------------------------------------------- +A|----11-12-14-11-12-14----14-------------------------------------------------------------------- +E|-14-------------------------------------------------------------------------------------------- + + + +E|----------------------9-10-12-10-9----10-9---------------------------------------- +B|-14-----------9-10-12--------------12------12-10-9-12-10-9------------------------ +G|----14-----------------------------------------------------11-9-------------11-13- +D|-------14-------------------------------------------------------12-11-9----------- +A|---------------------------------------------------------------------------------- +E|----------0-0-----------------------------------------------------------0-0------- + + + +E|----------------------------------------------------------------------------------------- +B|----------------------------------------------------------------------------14----------- +G|-13-11-13-13-11-13-11-13-14-13-11-------11-13-13-11-13-13-11-13-14-13-11-14--------13-11- +D|----------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------- +E|----------------------------------0-0-0----------------------------------------0-0------- + + + +E|--------------------------------------------------------------9-12-9-12-s14-12---- +B|-------------------------------------------12--------------10--------------------- +G|-13-11-13-11-13-11-14-13-11-14-13-11-14-13----14-13-----11---------------------14- +D|---------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------- +E|----------------------------------------------------0-0--------------------------- + diff --git a/guitar/tabs/Randy Rhodes/rhodes.prj b/guitar/tabs/Randy Rhodes/rhodes.prj new file mode 100644 index 0000000..f964f59 --- /dev/null +++ b/guitar/tabs/Randy Rhodes/rhodes.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=rhodes.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16) diff --git a/guitar/tabs/Randy Rhodes/rhodes.tab b/guitar/tabs/Randy Rhodes/rhodes.tab new file mode 100644 index 0000000..67a3912 --- /dev/null +++ b/guitar/tabs/Randy Rhodes/rhodes.tab @@ -0,0 +1,28 @@ + +take halen and shove'm up your ass. + + + +Eddie has had all this time to prove himself and the truth is he only put out 6 out of 11 good albums. but Rhoads had like 2 years of fame and he recorded 2 out of 2 good albums. So don't try to say that Halen even compares to Rhoads. Here's some more guitarists that are better than Halen. Hendrix, Page, Beck, and Satch. So suck it. Eddie sucked so bad that he couldn't even get into Kiss and every time a Van Halen singer begins to up-stage him he kicks them out because he's an arrogant little baby. +Here's a Rhoads lick. + + +Key = + + + E |-14----------14-----------14------------14---------------| + B |----17p14-------17p14--------17b14---------17b14---------| + G |----------16b---------16b----------16b-----------16------| + D |---------------------------------------------------------| + A |---------------------------------------------------------| + E |---------------------------------------------------------| + + E |-17-16-14------------------------------------------------| + B |-----------17-15p14--------------------------------------| + G |---------------------17-16-14----------------------------| + D |------------------------------16-14----------------------| + A |-------------------------------------16-15-14p12s14------| + E |---------------------------------------------------------| + + + diff --git a/guitar/tabs/Rush/2112_discovery.prj b/guitar/tabs/Rush/2112_discovery.prj new file mode 100644 index 0000000..ff65e91 --- /dev/null +++ b/guitar/tabs/Rush/2112_discovery.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=2112_discovery.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4) diff --git a/guitar/tabs/Rush/2112_discovery.tab b/guitar/tabs/Rush/2112_discovery.tab new file mode 100644 index 0000000..bdd47a0 --- /dev/null +++ b/guitar/tabs/Rush/2112_discovery.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|-7---7---7-2---2---2---0-0---0---0-------7-8-8-9--9--10-12-2-0---2- +B|-8-----8-8-3-----3-3-3-3-5-3-2-----2-2-2-8-8-8-10-10-10-13-3-1-3-3- +G|-7-7-----7-2-2-----2-0-0-0---0-0-----0-0-7-9-9-9--9--11-12-2-0-5-2- +D|-0-------0---------0-0---0---2-------2-2-0-0-0-0--0--0--0------5--- +A|---------------------2---3-2-0-------0-0--------------------------- +E|------------------------------------------------------------------- + + + +E|-0-5-7-5-2-7-0-2---7-5-2-7-0-2---0-0------------------------------ +B|-3-8-8-8-3-8-3-3-3-8-8-3-8-3-3-3-3-3---2---2-h3-2---3-p3---7-7-h8- +G|-2-7-7-7-2-7-2-2-5-7-7-2-7-2-2-5-2-2-------2--------2------7-7---- +D|-----------------5-------------5---------2-2-h4---2-4-p2---7-7-h9- +A|-------------------------------------0--------------0----0-------- +E|------------------------------------------------------------------ + + + +E|---------------------------0------------------------------------- +B|-7-9-9-9-h10-9-----------0--------------------------------------- +G|-7-9-9-9-----9---------0-------0-------------2---2--------------- +D|-7-9-9-9-h11-9-------0-------------0---0---0---------0---7------- +A|---0-----------0---0---------0---0---0---0-----0---0---7-----0--- +E|-----------------0-----------------------------------------0---0- + + + +E|----------------------------------0-3-5-2----------------------- +B|-----------------------3------3-----------3---3---3-3-5-7-3-3-7- +G|-----------------2---2---0-h2---2-----------2---2-2-4-5-7-0-2--- +D|-0---------0---0---0------------------------------0-0-0-0-0-0--- +A|-----7---0---0-------------------------------------------------- +E|---5---0-------------------------------------------------------- + + + +E|----------------------7---7-----2---------------------------------------- +B|------------3-5-3---8---8-------3-5-s3-3-------5-s3-3-2------------------ +G|-7-------12-2-5-2-5---------7---2-0----0-0-0-0-0----0-0-0--0--0--0-----0- +D|---12-------0-0-0-------------0-0-0----0-0-0-0-0----0-2-12-12-12-12-s9-9- +A|------12--------------------------3-s2-2-2-2-2-3-s2-2-0-0--0--0--0-----0- +E|------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------- +B|-------------------------------------------------------------------- +G|-0-0----0--0--0-----0-0-0---0-0-0-0-0-0-0---0-0-0---0-0-0---0-0-0--- +D|-9-9-11-11-11-11-s7-7-7-7-9-9-9-9-5-5-5-5-7-7-7-7-4-4-4-4-5-5-5-5-2- +A|-0-0----0--0--0-----0-0-0---0-0-0-0-0-0-0---0-0-0---0-0-0---0-0-0--- +E|-------------------------------------------------------------------- + + + +E|--------------------------------------- +B|--------------------------------------- +G|-0-0-0-0-0-0-0---0-0-0---0-0-0-0-0-0-0- +D|-2-2-2-7-7-7-7-4-4-4-4-5-5-5-5-0-0-0-0- +A|-0-0-0-0-0-0-0---0-0-0---0-0-0-0-0-0-0- +E|--------------------------------------- + diff --git a/guitar/tabs/Rush/2112_grand_finale.prj b/guitar/tabs/Rush/2112_grand_finale.prj new file mode 100644 index 0000000..dd172b0 --- /dev/null +++ b/guitar/tabs/Rush/2112_grand_finale.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=2112_grand_finale.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4) diff --git a/guitar/tabs/Rush/2112_grand_finale.tab b/guitar/tabs/Rush/2112_grand_finale.tab new file mode 100644 index 0000000..af6f861 --- /dev/null +++ b/guitar/tabs/Rush/2112_grand_finale.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|-----------------------0-0-0-0-0-0-0-0-----------------7-5-3--- +B|---------------8-7-----0-0-0-0-0-0-0-0-7-7-7-7-7-7-7-7-7-5-3--- +G|-9-9-9-9-9-9-9-7-7---7-9-9-9-9-9-9-9-9-7-7-7-7-7-7-7-7-9-7-5-0- +D|-9-9-9-9-9-9-9-7-7-7-7-9-9-9-9-9-9-9-9-7-7-7-7-7-7-7-7-9-7-5-0- +A|-7-7-7-7-7-7-7-5-5-7-5-7-7-7-7-7-7-7-7-5-5-5-5-5-5-5-5-7-5-3--- +E|-0-0-0-0-0-0-0-----5---0-0-0-0-0-0-0-0------------------------- + + + +E|-----------------7-7-7-7-5-5-5-5-3-3-3-3-3-3------------------- +B|-----------------7-7-7-7-5-5-5-5-3-3-3-3-3-3------------------- +G|---------------0-9-9-9-9-7-7-7-7-5-5-5-5-5-5------------------- +D|-4---4---4---4-0-9-9-9-9-7-7-7-7-5-5-5-5-5-5-4---4---4---4-4--- +A|-2-0-2-0-2-0-2---7-7-7-7-5-5-5-5-3-3-3-3-3-3-2-0-2-0-2-0-2-2-0- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|---------------------------------5-7-9-12---------------4-5-7--- +D|-4---4---4-4---4---4---4-4-5-7-9-5-7-9-12-4-5-7-9-4-5-7-4-5-7-4- +A|-2-0-2-0-2-2-0-2-0-2-0-2-4-5-7-9-3-5-7-10-4-5-7-9-4-5-7-2-3-5-4- +E|-------------------------2-3-5-7------------3-5-7-2-3-5-------2- + + + +E|-------------2-2-2-2--- +B|-------------2-2-2-2--- +G|-----4-5-7-0-2-2-2-2-0- +D|-5-7-4-5-7-0-4-4-4-4-0- +A|-5-7-2-3-5---4-4-4-4--- +E|-3-5---------2-2-2-2--- + diff --git a/guitar/tabs/Rush/2112_oracle_the_dream.prj b/guitar/tabs/Rush/2112_oracle_the_dream.prj new file mode 100644 index 0000000..1adb663 --- /dev/null +++ b/guitar/tabs/Rush/2112_oracle_the_dream.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=2112_oracle_the_dream.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4) diff --git a/guitar/tabs/Rush/2112_oracle_the_dream.tab b/guitar/tabs/Rush/2112_oracle_the_dream.tab new file mode 100644 index 0000000..990aee4 --- /dev/null +++ b/guitar/tabs/Rush/2112_oracle_the_dream.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-------5-5-----3-3-2-2-----3-3-5-5-----3-3-0-0-----7-7-5-5----- +B|-----7-----7---5---3---3---5---6---6---5---2---2---8---7---7--- +G|---7---------7-5---2-----2-5---5-----5-5---2-----2-7---7-----7- +D|-7-----------------------------------------2------------------- +A|-------------------------------------------0------------------- +E|--------------------------------------------------------------- + + + +E|-3-3-2-2-----3-3-5-5-----3-3-0-0-----3-2-0-3-2-3-2-0-1-0-2----- +B|-5---3---3---5---6---6---5---2---2---3-3-1-3-3-3-3-1-1-1-3-2-3- +G|-5---2-----2-5---5-----5-5---2-----2-0-2-0-0-2-2-2-0-2-0-2-2-2- +D|-----------------------------2-------0-0-2-0-0-0-0-2-3-2-0-2-4- +A|-----------------------------0-------2---3-2-------3-3-3---0-0- +E|-------------------------------------3-----3---------1--------- + + + +E|---2-3-----------0-2---2-3-0-0- +B|-2-3-3-2-3-3-----1-3-2-3-3-0-0- +G|-2-4-0-2-2-2-2-4-0-2-2-4-0----- +D|-2-4-0-2-0---2-4-2-0-2-4-0-0-2- +A|-0-2-2-0---4-0-2-3---0-2-2---2- +E|-----3-------------------3---0- + diff --git a/guitar/tabs/Rush/2112_overture.prj b/guitar/tabs/Rush/2112_overture.prj new file mode 100644 index 0000000..a908791 --- /dev/null +++ b/guitar/tabs/Rush/2112_overture.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=2112_overture.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4) diff --git a/guitar/tabs/Rush/2112_overture.tab b/guitar/tabs/Rush/2112_overture.tab new file mode 100644 index 0000000..429cf69 --- /dev/null +++ b/guitar/tabs/Rush/2112_overture.tab @@ -0,0 +1,118 @@ +%TabMaster v2.00r% + + +E|-----3-3-2-3-------------------3---2-3---2-----3-------3-3-2--- +B|---1-3-3-3-3-1-1-1---1-3-3---1-3-3-3-3-3-3---1-3-3---1-3-3-3--- +G|-1-2---0-2-0-2-2-2-1-2---0-1-2---0-2---0-2-1-2---0-1-2---0-2-1- +D|-2-2-2-0-0-2-2-2-2-2-2-2-0-2-2-2-0-0-2-0-0-2-2-2-0-2-2-2-0-0-2- +A|-2-0-3-2---3-0-0-0-2-0-3-2-2-0-3-2---3-2---2-0-3-2-2-0-3-2---2- +E|-0-----3-----------0-----3-0-----3-----3---0-----3-0-----3---0- + + + +E|---3-------3-2-3---2-3---2---15-14-12-15------------------------------------- +B|-1-3-3---1-3-3-3-3-3-3-3-3---------------15-------13----13-15---------------- +G|-2---0-1-2-0-2---0-2---0-2------------------14-------12-------14------------- +D|-2-2-0-2-2-0-0-2-0-0-2-0-0-0-------------------12----------------14--------4- +A|-0-3-2-2-0-2---3-2---3-2--------------------------------------------12-7-2-2- +E|-----3-0---3-----3-----3-----------------------------------------------5----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------------------------------------2---------------4-4-4-2--- +D|-4-4-4-4-4-4-4-4---5-5-5-5-5-5-5-5-5-0---2-2-2-2-2-2-2-2-2-0--- +A|-2-2-2-2-2-2-2-2-0-5-5-5-5-5-5-5-5-5---4-0-0-0-0-0-0---------4- +E|-------------------3-3-3-3-3-3-3-3-3--------------------------- + + + +E|--------------------------------------------------------------- +B|-----------------------------2-3-3-7-5-5-2-3-3-7-7------------- +G|---------------7-------------2-4-4-7-6-6-2-4-4-7-7------------- +D|-4-4-4-4-4-4-4-7-------------2-4-4-7-6-6-2-4-4-7-7------------- +A|-2-2-2-2-2-2-2-5-------0-----0-0-0---0-0---0-0-----------0----- +E|-----------------0-2-3---3-0-----------------------0-2-3---3-0- + + + +E|-----------2-3-------------------------2----------------------- +B|-7-7-7-7-7-3-3---3-3---3---------------3----------------------- +G|-8-8-8-8-8-4-4---2-2-2-4-0-------------4-0-------------7---9-4- +D|-9-9-9-9-9-4-5-7-0---2-4-0-------------4-0-------------7-7-9-4- +A|-9-9-9-9-9-2-5-7---4-0-2---------0-----2---------0-----5-7-7-2- +E|-7-7-7-7-7---3-5-----------0-2-3---3-0-2---0-2-3---3-2-5-5-7--- + + + +E|--------------------------------------------------------------- +B|---------------------------------------------------3-3-3------- +G|-2-2-2-2-2-2-2-------------------2-2-2-2-2-2-2-2-2---0---2-2-2- +D|-2-2-2-2-2-2-2-------------------3-3-3-3-3-3-3-3-3-2-0-2-3-3-3- +A|-0-0-0-0-0-0-0---0-0-0-0-0-0-0---3-3-3-3-3-3-3-3-3-3-2-3-3-3-3- +E|---------------0-3-3-3-3-3-3-3-0-1-1-1-1-1-1-1-1-1---3---1-1-1- + + + +E|-------------------------------------------------------7-7-7-7- +B|---------------------5-3-3-3-3-3-3-3---3-3-3-3-3-3-3---7-7-7-7- +G|-2-2-2-2-2-2-2-2-2-2-5-4-4-4-4-4-4-4-7-4-4-4-4-4-4-4---9-9-9-9- +D|-3-3-3-3-3-3-3-3-3-3-5-4-4-4-4-4-4-4-7-4-4-4-4-4-4-4-5-9-9-9-9- +A|-3-3-3-3-3-3-3-3-3-3-3-2-2-2-2-2-2-2-5-2-2-2-2-2-2-2-5-7-7-7-7- +E|-1-1-1-1-1-1-1-1-1-1---------------------------------3--------- + + + +E|-7-7-5-5-5-5-5-5-3-3-3-3-3-3-3------------------------------------- +B|-7-7-5-5-5-5-5-5-3-3-3-3-3-3-3-8----------0------------------------ +G|-9-9-7-7-7-7-7-7-5-5-5-5-5-5-5-7-b9-r7-b9---0-0-r2---------------5- +D|-9-9-7-7-7-7-7-7-5-5-5-5-5-5-5---------------------3-------5-6-7--- +A|-7-7-5-5-5-5-5-5-3-3-3-3-3-3-3-----------------------5-6-7--------- +E|------------------------------------------------------------------- + + + +E|---------------------5-7-8-b10-10-10-r8-5-h8-p5------------------------------------------- +B|-----5-7-8-b10-8-b10----------------------------8-8-b10-10-b12-12-10-b12-10-b13-10-b12-12- +G|-6-7-------------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|------------------------------------------------------------------------------- +B|-10-b13-10-b13-r10-8-h10-p8---------------------------------------------------- +G|----------------------------9-5-h7-p5---7-b9-5-----5---7-5--------------------- +D|--------------------------------------7--------5-7---7-----7-7-p5---7-5-s3-2-2- +A|------------------------------------------------------------------7--------0--- +E|------------------------------------------------------------------------------- + + + +E|---0-----------0---------1------------7-7-7-7-7-5----7-7-7-7-7-3- +B|-----1-----------1---------1----------7-7-7-7-7-7----7-7-7-7-7-3- +G|-0-----0-----0---------2-----5---5----7-7-7-7-7-7----7-7-7-7-7-4- +D|-----------2---------3-------5-5-5-s9-----------7-s9-----------5- +A|-------------------3---------3-5-3-s9-----------5-s9-----------5- +E|---------3---------1-----------3---s7-------------s7-----------3- + + + +E|--------------------------------------------------------------- +B|---------4-------4-------------4-------4-----------4-------4--- +G|-0---4-6---6-4-6---4-4-0---4-6---6-4-6---4-4---4-6---6-4-6---4- +D|-0-4-------------------0-4-------------------4----------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------2-----2-----------------------3-----------------------0- +B|---3-3-3-3-3-3-3-----------------------1---1-----3-----------1- +G|-4---0-2---0-2-0-1-1-1-1-1---------0---------------0---0---0-2- +D|---2-0-0-2-0-0-0-2-2-2-2-2-------2-------2-----4-------------2- +A|---3-2---3-2---2-2-2-2-2-2-0-2-3-------------5-------3---2---0- +E|-----3-----3---3-0-0-0-0-0------------------------------------- + diff --git a/guitar/tabs/Rush/2112_presentation.prj b/guitar/tabs/Rush/2112_presentation.prj new file mode 100644 index 0000000..fa48500 --- /dev/null +++ b/guitar/tabs/Rush/2112_presentation.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=2112_presentation.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4) diff --git a/guitar/tabs/Rush/2112_presentation.tab b/guitar/tabs/Rush/2112_presentation.tab new file mode 100644 index 0000000..3b5feee --- /dev/null +++ b/guitar/tabs/Rush/2112_presentation.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-------5-5-5-5------------------------------------------------- +B|-------5-5-5-5-7-7-8-7-7-7-8---7-7-2-3-3-7-5-5-2-3-3-9-3-2-2-3- +G|---6-6-6-6-6-6-7-7-7-7-7-7-7---7-7-2-4-4-7-6-6-2-4-4-9-4-2-2-4- +D|-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-7-2-4-4-7-6-6-2-4-4-9-4-2-2-4- +A|-7-7-7-7-7-7-7-5-5-5-5-5-5-5-5-5-5-0-0-0---0-0---0-0-----0-0-0- +E|-5-5-5-5-5-5-5---------------5--------------------------------- + + + +E|--------------------------------------------------------------------- +B|-3-7-5-5-2-3-3-9-14-14-2-2---2-2-3-p2---7-7-h8-7-9-9-9-h10-9--------- +G|-4-7-6-6-2-4-4-9-14-14-2--------------2-7-7----7-9-9-9-----9--------- +D|-4-7-6-6-2-4-4-9-14-14-2---2------------7-7-h9-7-9-9-9-h11-9--------- +A|-0---0-0---0-0---------0-------------------------------------------0- +E|-------------------------------------------------------------0-2-3--- + + + +E|-------2-2---3-3---5-5----------------- +B|-------3-3---3-3---5-5---------------3- +G|-----4-4-4---4-4---6-6---------------2- +D|-----4-----5-----7-------------------0- +A|-----2-----5-----7-------------0------- +E|-3-0-------3-----5-----7-0-2-3---3-0--- + diff --git a/guitar/tabs/Rush/2112_soliloquy.prj b/guitar/tabs/Rush/2112_soliloquy.prj new file mode 100644 index 0000000..9918869 --- /dev/null +++ b/guitar/tabs/Rush/2112_soliloquy.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=2112_soliloquy.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4) diff --git a/guitar/tabs/Rush/2112_soliloquy.tab b/guitar/tabs/Rush/2112_soliloquy.tab new file mode 100644 index 0000000..e1f8575 --- /dev/null +++ b/guitar/tabs/Rush/2112_soliloquy.tab @@ -0,0 +1,73 @@ +%TabMaster v2.00r% + + +E|-----2---------------------------------------2-2----------------- +B|-------3-----------------------3-------------3---3-------3------- +G|---2-----2-0-----0-----0-----2-----0---------2-----2---2---0----- +D|-0-------------2-----0---0-3-----2---0-h3-p0-0-------0---------2- +A|-------------3-----2-----------------------------------------3--- +E|----------------------------------------------------------------- + + + +E|-----------------------------2-------0-----------0---------1----- +B|---------------3-------------3---------1-----------1---------1--- +G|-0-----0-----2-----0---------2-----0-----0-----0---------2-----2- +D|-----0---0-3-----2---0-h3-p0-0-2-2-----------2---------3--------- +A|---2---------------------------0---------------------3----------- +E|-------------------------------------------3---------1----------- + + + +E|---------------0-----------0----------------------------------- +B|-1---------------1-----------1--------------------------------- +G|-----5-------0-----0-----0-----2-2-2-2-2-2-2-2-2-2-2-2-2-2-2--- +D|---3-5-5-2-2-----------2-------3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-2- +A|-----3-5-0---------------------3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-2- +E|-------3-------------3---------1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-0- + + + +E|--------------------------------------------------------------------- +B|--------------------------------------------------------------------- +G|--------------------------------------------------5---5-7-b9-r7-p5--- +D|------------------------3-5-5-5-h7-5-h7-7-5-7-7-5---7--------------7- +A|--------------------3-5---------------------------------------------- +E|-3-3-3-3-3-3-3-h5-5-------------------------------------------------- + + + +E|------------------------------------------------------------------------------- +B|------------------------------------------------------------------13-15-15-b17- +G|-5-7-b9-r7-7-b9-7-b9-r7-7-7-7-7-b9-r7-5-5-5-7-7-b9-r7-5-------s14-------------- +D|--------------------------------------------------------7-5-7------------------ +A|------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------- + + + +E|----------------------12-15-15-b17-r15-b17-15-b17-15-b17-17-b19-17-b19-17-17-b19-17-18-b20-18-b20-18-b20-18- +B|-r15-p13----13-15-b17--------------------------------------------------------------------------------------- +G|---------14------------------------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------------------ + + + +E|-b20------------------------------------------------------------------- +B|-----8---8------------------------------------------------------------- +G|-----7-9---7-b9-7-5-7------5-7-b9-7-p5-5------------5-5-5-5------5-5-5- +D|----------------------5-h7---------------7-5-7-5-h7---------5-h7------- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|------------------------------------------------------------ +B|------------------------------------------------------------ +G|------5-7-b9-r7-p5---5-7-b9-r7-7-p5---5-7-b9-r7-p5---5-7-b9- +D|-5-h7--------------7----------------7--------------7-------- +A|------------------------------------------------------------ +E|------------------------------------------------------------ + diff --git a/guitar/tabs/Rush/2112_temples_of_syrinx.prj b/guitar/tabs/Rush/2112_temples_of_syrinx.prj new file mode 100644 index 0000000..f4e257f --- /dev/null +++ b/guitar/tabs/Rush/2112_temples_of_syrinx.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=2112_temples_of_syrinx.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4) diff --git a/guitar/tabs/Rush/2112_temples_of_syrinx.tab b/guitar/tabs/Rush/2112_temples_of_syrinx.tab new file mode 100644 index 0000000..dac19ef --- /dev/null +++ b/guitar/tabs/Rush/2112_temples_of_syrinx.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|---1-1-1---1-1-1-----------------1-1-1---1-1-1----------------- +G|-1-2-2-2-1-2-2-2-5-------5---7-1-2-2-2-1-2-2-2-5--------------- +D|-2-2-2-2-2-2-2-2-5-5-5-5-5-5-7-2-2-2-2-2-2-2-2-5-5------------- +A|-2-0-0-0-2-0-0-0-3-5-5-5-3-5-5-2-0-0-0-2-0-0-0-3-5-------0----- +E|-0-------0---------3-3-3---3-----------0---------3-0-2-3---3-0- + + + +E|---2-2---3-3---5-5--------------------------------------------- +B|---3-3---3-3---5-5-------------3------------------------------- +G|-4-4-4---4-4---6-6-------------2-0-4-4-4-4-4-4-4-7-4-4-4-4-4-4- +D|-4-----5-----7-----------------0-0-4-4-4-4-4-4-4-7-4-4-4-4-4-4- +A|-2-----5-----7-------------0-------2-2-2-2-2-2-2-5-2-2-2-2-2-2- +E|-2-----3-----5-----7-0-2-3---3--------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-4-4-0-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-7-4-4-4-4-4-4-4-4-4-4-4-4- +D|-4-5-0-5-5-5-5-5-5-5-5-4-4-4-4-4-4-4-7-4-4-4-4-4-4-4-5-4-4-4-4- +A|-2-5---5-5-5-5-5-5-5-5-2-2-2-2-2-2-2-5-2-2-2-2-2-2-2-5-2-2-2-2- +E|---3---3-3-3-3-3-3-3-3-------------------------------3--------- + + + +E|-----------------------3-3-------2--------- +B|-----------------------3---3---3---2---2-3- +G|-4-4-4-7-4-4-4-4-4-4-4-4-----4-------3---4- +D|-4-4-4-7-4-4-4-4-4-4-4-5-----------------4- +A|-2-2-2-5-2-2-2-2-2-2-2-5-----------------2- +E|-----------------------3-3-------2--------- + diff --git a/guitar/tabs/Rush/LaVilla.prj b/guitar/tabs/Rush/LaVilla.prj new file mode 100644 index 0000000..d3c4e64 --- /dev/null +++ b/guitar/tabs/Rush/LaVilla.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=LaVilla.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4) diff --git a/guitar/tabs/Rush/LaVilla.tab b/guitar/tabs/Rush/LaVilla.tab new file mode 100644 index 0000000..57ad609 --- /dev/null +++ b/guitar/tabs/Rush/LaVilla.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-2-5---2---5---2---5---2-0-0---0-1-p0---0-3-p1-p0-0------------------ +B|-----4---5---4---5-5-4-4-5---3--------3-----------0-3-1-p0-0-h1-3-p1- +G|---------4-------4---4---4------------------------------------------- +D|---------2-------2-------2------------------------------------------- +A|---------2-------2-------2------------------------------------------- +E|-------------------------0------------------------------------------- + + + +E|------------------------------------------------------------------- +B|-p0---------------------------------------------------------------- +G|----2-0-h2-2-2-1-2-4-p2-------------------------------------------- +D|------------------------3-3-0-0-3-3-5-5-------------------0-------- +A|----------------------------------------0-0-3-3-2-0-2-3-3---3-p2-2- +E|------------------------------------------------------------------- + + + +E|-----1-1--- +B|-----1-1--- +G|-----2-2-9- +D|-----3-3--- +A|-----3-3--- +E|-3-3-1-1--- + diff --git a/guitar/tabs/Rush/LaVilla2.prj b/guitar/tabs/Rush/LaVilla2.prj new file mode 100644 index 0000000..fb9d036 --- /dev/null +++ b/guitar/tabs/Rush/LaVilla2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=LaVilla2.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4) diff --git a/guitar/tabs/Rush/LaVilla2.tab b/guitar/tabs/Rush/LaVilla2.tab new file mode 100644 index 0000000..57ad609 --- /dev/null +++ b/guitar/tabs/Rush/LaVilla2.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-2-5---2---5---2---5---2-0-0---0-1-p0---0-3-p1-p0-0------------------ +B|-----4---5---4---5-5-4-4-5---3--------3-----------0-3-1-p0-0-h1-3-p1- +G|---------4-------4---4---4------------------------------------------- +D|---------2-------2-------2------------------------------------------- +A|---------2-------2-------2------------------------------------------- +E|-------------------------0------------------------------------------- + + + +E|------------------------------------------------------------------- +B|-p0---------------------------------------------------------------- +G|----2-0-h2-2-2-1-2-4-p2-------------------------------------------- +D|------------------------3-3-0-0-3-3-5-5-------------------0-------- +A|----------------------------------------0-0-3-3-2-0-2-3-3---3-p2-2- +E|------------------------------------------------------------------- + + + +E|-----1-1--- +B|-----1-1--- +G|-----2-2-9- +D|-----3-3--- +A|-----3-3--- +E|-3-3-1-1--- + diff --git a/guitar/tabs/Rush/LaVilla3.prj b/guitar/tabs/Rush/LaVilla3.prj new file mode 100644 index 0000000..03283ee --- /dev/null +++ b/guitar/tabs/Rush/LaVilla3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=LaVilla.tab +DELAYS=(0,234)(1,234)(2,234)(3,234)(4,234)(5,234)(6,234)(7,234)(8,234)(9,234)(10,234)(11,234)(12,234)(13,234)(14,234)(15,234)(16,234)(17,234)(18,234)(19,234)(20,234)(21,234)(22,234)(23,234)(24,234)(25,234)(26,234)(27,234)(28,234)(29,234)(30,234)(31,234)(32,234)(33,234)(34,234)(35,234)(36,234)(37,234)(38,234)(39,234)(40,234)(41,234)(42,234)(43,234)(44,234)(45,234)(46,234)(47,234)(48,234)(49,234)(50,234)(51,234)(52,234)(53,234)(54,234)(55,234)(56,234)(57,234)(58,234)(59,234)(60,234)(61,234)(62,234)(63,234)(64,705)(65,234)(66,234) diff --git a/guitar/tabs/Rush/LaVillaSolo1.prj b/guitar/tabs/Rush/LaVillaSolo1.prj new file mode 100644 index 0000000..691e8c0 --- /dev/null +++ b/guitar/tabs/Rush/LaVillaSolo1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=LaVillaSolo1.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4) diff --git a/guitar/tabs/Rush/LaVillaSolo1.tab b/guitar/tabs/Rush/LaVillaSolo1.tab new file mode 100644 index 0000000..881a357 --- /dev/null +++ b/guitar/tabs/Rush/LaVillaSolo1.tab @@ -0,0 +1,118 @@ +%TabMaster v2.00r% + + +E|-------------------------------------------------10-8-7----8-7----------- +B|--------12-r10-10-6-8-5-----5---------------10-8--------10-----10-8-10--- +G|-9-r7-7-----------------7-5---7-4-4-7-5---------------------------------- +D|----------------------------------------7-7----------------------------7- +A|------------------------------------------------------------------------- +E|------------------------------------------------------------------------- + + + +E|-----------------------------------------8-r7-7-5---5----------------- +B|--------------------------------------------------8---8-5-----8-5----- +G|-5-7-7-b9-r7-p5-7-p5---5-7-7-b9-7-5-s9-9------------------7-5-----7-5- +D|---------------------7------------------------------------------------ +A|---------------------------------------------------------------------- +E|---------------------------------------------------------------------- + + + +E|-------------------------7-7-7-7-7--------------13-13-12-15-13-12----12---- +B|-8-5---------------10-10-----------8-8-10-------------------------15----15- +G|-----7-5-4-5-4---9------------------------9-9-9---------------------------- +D|---------------7----------------------------------------------------------- +A|--------------------------------------------------------------------------- +E|--------------------------------------------------------------------------- + + + +E|-------------12-12-12-12------------------------------------------------------------17-b19-17-b19-12- +B|-13-12-15-13-------------15-12-13--------15-b17-15-b17-r15-15-13-12-13-p12----12--------------------- +G|----------------------------------12-h14-----------------------------------14----14------------------ +D|----------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------- + + + +E|-13-15-12-h13-p12----12--------------------------------------------------------------------------- +B|------------------15----15-b17-15-b17-r15-15-12-13-12----12--------------------------------------- +G|------------------------------------------------------14----14-12-14-b16-14-b16-14-14-b16---5-7-7- +D|------------------------------------------------------------------------------------------7------- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------- +B|----------------------------------------------------------------------------------- +G|-b9-r7-7-5-4-5-4-0-4-5-4-2-4-2-h4-p2-p0-2-0-0-0-12-b14-12-b14-12-b14-12-b14-12-b14- +D|----------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------- +B|---------------------------------------------------------8-8-8-8-8-8-10-10-p8--------- +G|-12-b14-12-b13-12-b14-12-10-9-h10-p9----9-------7-s9-9-9----------------------9-12-p9- +D|-------------------------------------12---12-12--------------------------------------- +A|-------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------------------------------- +B|---------------------------------------------10-11-p10-12-p10-13-13-12-10----13------------10- +G|-10-p9----9-----------------9-h10-p9-10-9-11------------------------------12----12-9-9-s11---- +D|-------12---12-p10----10-12------------------------------------------------------------------- +A|-------------------12------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|----------------------------------12-12-12----12-13-13-13-12-13-15-15-15-13-15-17-17-17-b19-17- +B|-12-12-13-12-12-13-13-15-15-13-15----------15-------------------------------------------------- +G|----------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|-b19-17-b19-17-b19-17-12-h13-p12----13-------------------------------------------------- +B|---------------------------------15----15-13-p12----12-------5-5-5-5-6-8-6-p5---5------- +G|-------------------------------------------------14----14-14------------------7---7-5-4- +D|---------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|--------------------------5-7-p5-7-8-8-p7-p5---5-------------------- +B|---------5-6-p5---5-7-8-8--------------------8---8-8-5-6-p5---5-5-5- +G|-5-4-6-7--------7-------------------------------------------7------- +D|-------------------------------------------------------------------- +A|-------------------------------------------------------------------- +E|-------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------- +B|-6-8-5--------------------------------------------------------------- +G|-------7-p0-7-5-4-h5-p4---7--------------------------------0--------- +D|------------------------7---7-7-5-3-3-3-3-p2-----------------0-h3-p2- +A|---------------------------------------------3-3-2-2-0-2-3----------- +E|--------------------------------------------------------------------- + + + +E|--------------------- +B|--------------------- +G|--------------------- +D|---3-3-p2-3-2-------- +A|-3------------3------ +E|----------------0-s8- + diff --git a/guitar/tabs/Rush/a_farewell_to_kings.prj b/guitar/tabs/Rush/a_farewell_to_kings.prj new file mode 100644 index 0000000..942f98d --- /dev/null +++ b/guitar/tabs/Rush/a_farewell_to_kings.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=a_farewell_to_kings.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4) diff --git a/guitar/tabs/Rush/a_farewell_to_kings.tab b/guitar/tabs/Rush/a_farewell_to_kings.tab new file mode 100644 index 0000000..e1bac44 --- /dev/null +++ b/guitar/tabs/Rush/a_farewell_to_kings.tab @@ -0,0 +1,136 @@ +%TabMaster v2.00r% + + +E|---------------------------------0-----0---3-----3-2----------- +B|-3---------7-------------------------------3---------2-----3-3- +G|-----4---2-7-----------------4-4---4---------4-----------3----- +D|---4-----2-7-----------------------------------5-------4---4-4- +A|-2-----4-0-5-4-5-4-7-5-------------------------------------2-2- +E|-----------------------7-0-4---------0---0-3-------2----------- + + + +E|-------------------------0-----0---3-----3-2------------------- +B|-----7-7---------------0-----------3---------2-----3-3-----7-7- +G|---2-7-7-------------4-----4---------4-----------3-------2-7-7- +D|---2-7-7-------------------------------5-------4---4-4---2-7-7- +A|-4-0-5-5-4-7-5-------------------------------------2-2-4-0----- +E|---------------7-0-4---------0---0-3-------2------------------- + + + +E|-----------------0-----0-------------------5-------5-------0--- +B|---------------0-----------3---3-5---5-7-7-5-----5---0-------0- +G|-------------4-----4---------2---4-4---7-6-6---6---------0----- +D|-------------------------------------------7-7---------2------- +A|-4-7-5-------------------------------------7---------2--------- +E|-------7-0-4---------0---0-2-----3-----5-5--------------------- + + + +E|-------------2---------------0-----3---3---3---2-------0-----0- +B|---0---3-------3---3---1-------1-----------------2------------- +G|-0---------4-----4-----0---0-----0---0---4---4-------3-----0--- +D|-----2-4-4-----------4---2-------------------------4-----2----- +A|-----2-2-------------2-3-------------3-----------------2------- +E|---------------------------------------3-------2--------------- + + + +E|-0-------------2---------------0---------3-----3-2------------- +B|-----0---3-------3---3---1-------1---1-------------3-3-----7--- +G|---0---------4-----4-----0---0-----0-------4-------------2-7--- +D|-------2-4-4-----------4---2-----------2-----5-----4-4---2-7--- +A|---------2---------------3-------------------------2-2-4-0---5- +E|-----------------------------------------3-------2------------- + + + +E|-----------------0---------3-----3-2--------------------------- +B|---------------0---------------------2-----3-3-----7----------- +G|-------------4-----4---4-----4-----------3-------2-7----------- +D|-------------------------------5-------4---4-4---2-7----------- +A|-4-7-5-------------------------------------2-2-4-0---5-4-7-5--- +E|-------7-0-4---------0---0-3-------2-------------------------7- + + + +E|---------0----------------------------------------------------- +B|-------0-----------3---3-5---5-7-7-3---3-5---5-7-7-3---3-5---5- +G|-----4-----4---4---2-2---4-4---7-6-2-2---4-4---7-6-2-2---4-4--- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|-0-4---------0---0-2-----3-----5-5-2-----3-----5-5-2-----3----- + + + +E|-----5-0-0-0-0-----------2-0-0-3-3---------0-0-0-0---------2-0- +B|-7-7-5-3-2-2-0-----------3-3-3-3-3---------3-2-2-0---------3-3- +G|-7-6-6-0-0-0-0-----------2-2-2-0-0---------0-0-0-0---------2-2- +D|-----7-2-2-2-2-----------0-0-0-0-0---0-2-4-2-2-2-2---------0-0- +A|-----7-0-0-0-------------------2-2-4-------0-0-0--------------- +E|-5-5---------3-0-2-3-2-0---2-2-3-3---------------3-0-2-3-2---2- + + + +E|-0-3-3---------0-0-0-0---------2-0-0-3-3----------------------- +B|-3-3-3---------3-2-2-0---------3-3-3-3-3----------------------- +G|-2-0-0---------0-0-0-0---------2-2-2-0-0---------------2------- +D|-0-0-0---0-2-4-2-2-2-2---------0-0-0-0-0---0-2-4-----2--------- +A|---2-2-4-------0-0-0-----------------2-2-4-------2-0----------- +E|-2-3-3---------------3-0-2-3-2---2-2-3-3-----------------3-2-0- + + + +E|-------------5-5-5-------3-3-3-----0---0-0-0-0-0-2-3-2-3------- +B|-------------5-5-5-------3-3-3-----0---0-0-0-0-0-2-3-2-3------- +G|-----7-------6-6-6-2-2-2-4-4-4-----1---1-1-1-1-1-2-4-2-4------- +D|---7---7-9-9-7-7-7-3-3-3-5-5-5-2-2-2-2-2-2-2-2-2-4-5-4-5-7-7-7- +A|-5-----4-7-9-7-7-7-3-3-3-5-5-5-2-2-2-2-2-2-2-2-2-4-5-4-5-7-7-7- +E|-----------7-5-5-5-1-1-1-3-3-3-0-0-0-0-0-0-0-0-0-2-3-2-3-5-5-5- + + + +E|-5---5-15-15-15-15-15-15-14-15-14-------16-b17-3-------3-------5-5-5-5-5-5-5-5- +B|-5---5-15-15-15-15-15-15----------17-14--------3-3-2-4-3-------5-5-5-5-5-5-5-5- +G|-6---6-12-12-12-12-12-12-----------------------0-2-2-4-0-15----2-2-2-2-2-2-2-2- +D|-7-7-7-12-12-12-12-12-12-----------------------0-0-2-4-0----14-2-2-2-2-2-2-2-2- +A|-7-7-7-----------------------------------------2---0-2-2-------0-0-0-0-0-0-0-0- +E|-5-5-5-----------------------------------------3-2-----3----------------------- + + + +E|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-3-------------5-3- +B|-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-3-------------5-3- +G|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-0--------2-p0-2-0- +D|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-0------0------2-0- +A|-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-2-------------0-2- +E|-----------------------------------------------3-0-h3----------3- + + + +E|---------------------------------------------------------------------------------------------------- +B|-------------10------------------------------------------------------------------------------------- +G|--------2-p0-12-b14---16-b18-r16-16-b18-r16-16-16--------14-16-14-16-16-b18-r16-p14-16-16-14-12-b14- +D|------0-------------------------------------------14-h16-------------------------------------------- +A|--------------------0------------------------------------------------------------------------------- +E|-0-h3----------------------------------------------------------------------------------------------- + + + +E|------------------------------------2-0-0-3-3-----------0-0-0-0--------- +B|------------------------------------3-3-3-3-3-----------3-2-2-0--------- +G|-12-11-12-11----12-p11--------------2-2-2-0-0-----------0-0-0-0--------- +D|-------------14--------12-----------0-0-0-0-0---0-2-4---2-2-2-2--------- +A|------------------------------------------2-2-4-------2-0-0-0----------- +E|--------------------------0-2-3-2-0---2-2-3-3-----------------3-0-2-3-2- + + + +E|-2-0-0-3-3---------0-0-0-0---------2-0-0-3-3------------------2- +B|-3-3-3-3-3---------3-2-2-0---------3-3-3-3-3------------------3- +G|-2-2-2-0-0---------0-0-0-0---------2-2-2-0-0------------------4- +D|-0-0-0-0-0---0-2-4-2-2-2-2---------0-0-0-0-0------------------4- +A|-------2-2-4-------0-0-0-----------------2-2-4-5-5-s7-5-4-0---2- +E|---2-2-3-3---------------3-0-2-3-2---2-2-3-3----------------0--- + diff --git a/guitar/tabs/Rush/afterimage.prj b/guitar/tabs/Rush/afterimage.prj new file mode 100644 index 0000000..a4c93ce --- /dev/null +++ b/guitar/tabs/Rush/afterimage.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=afterimage.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4) diff --git a/guitar/tabs/Rush/afterimage.tab b/guitar/tabs/Rush/afterimage.tab new file mode 100644 index 0000000..b8b0fdc --- /dev/null +++ b/guitar/tabs/Rush/afterimage.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|-0-0---------------------------0---------------------------3--- +B|-1-1-------------------------0-0-------------------------3-3--- +G|-2-2-------------------------0-0-------------------------0-0--- +D|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-------------------------0-0-0- +A|-0-0-0-0-0-0-0-0-0-0-0-0-0-0-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2- +E|-----------------------------0-0-0-0-0-0-0-0-0-0-0-0-0-0-3-3-3- + + + +E|-----------------------1-1------------------------------------- +B|-----------------------1-1------------------------------------- +G|-----------------------2-2-------------------------0----------- +D|-0-0-0-0-0-0-0-0-0-0-0-3-3-------------------------0----------- +A|-2-2-2-2-2-2-2-2-2-2-2-3-3-3-3-3-3-3-3-3-3-3-3-3-3-------5-5-7- +E|-3-3-3-3-3-3-3-3-3-3-3-1-1-1-1-1-1-1-1-1-1-1-1-1-1---3-5-3-3-5- + + + +E|-5---5-5-5-5-5---1-1-1-1-1----13-12-10-12----------13-12-10-12-------13-12-10-12- +B|-5---6-6-6-6-6-5-1-1-1-1-1-10-------------13-10-10-------------10-10------------- +G|-5-0-7-7-7-7-7-5-3-3-3-3-3------------------------------------------------------- +D|---0-7-7-7-7-7-5-3-3-3-3-3------------------------------------------------------- +A|-----5-5-5-5-5-3-1-1-1-1--------------------------------------------------------- +E|-------------------------3------------------------------------------------------- + + + +E|-15----13-12----12-17-5-5-5-5-5-5-5-5-5-5-5-5------------------------- +B|-------------15-------6-6-6-6-6-6-6-6-6-6-6-6------------------------- +G|----14----------------7-7-7-7-7-7-7-7-7-7-7-7-0-4-4-5-5-7-7-5-5-0-0--- +D|----------------------7-7-7-7-7-7-7-7-7-7-7-7-0-----------------0-0-5- +A|----------------------5-5-5-5-5-5-5-5-5-5-5-5------------------------- +E|---------------------------------------------------------------------- + + + +E|---------------------------------------------------------13-13-13- +B|---------------------------------------------------------15-15-15- +G|---4-4---------0-0-----7-7-5-5-4-4-0-0-----5-5-4-4-2-2-0-14-14-14- +D|-5-----7-7-5-5-0-0-5-5-------------0-0-3-3-------------0---------- +A|------------------------------------------------------------------ +E|------------------------------------------------------------------ + + + +E|-13-13-13-12-12-12-15-15-15-1-1-1-1-1-1-3-3-3-3-3-3-3-3-3-13-13-13-13-13-13-15- +B|-15-15-15-13-13-13-17-17-17-1-1-1-1-1-1-3-3-3-3-3-3-5-5-6-15-15-15-15-15-15-15- +G|-14-14-14-12-12-12-17-17-17-3-3-3-3-3-3-5-5-5-5-5-5-5-5-5-14-14-14-14-14-14-12- +D|----------------------------3-3-3-3-3-3-3-3-3-3-3-3-----0---------------------- +A|----------------------------1-1-1-1-1-1-5-5-5-5-5-5---------------------------- +E|----------------------------------------3-3-3-3-3-3---------------------------- + + + +E|-15-15-17-17-17---5---------------------------------------------------- +B|-15-15-15-15-15-6-6---6-6---6-p5-6------------6-5-5-5---5---8-8-8-8-s6- +G|-12-12-14-14-14-7-7-7-7-7-7-7-p5-7-----7-7-p5---5-5-5---5---9-9-9-9-s7- +D|----------------7-7-7-7-7-7-7-p5-7---7----------5-5-5-5-5-5------------ +A|----------------5-5-5-5-5-5-5----5-5------------3-3-3---3-------------- +E|----------------------------------------------------------------------- + + + +E|-----5-5-3-3---------5-10-10-10-10----13-13-13-13-13----13-------------12---------- +B|-6-6-6-6-5-5-6-----6-6-10-10-10-10-15-15-15-15-15-15-15-15-15-13-13----13----13---- +G|-7-----------7-----7-7-12-12-12-12-14----------------14----14-12-12-12-12-12-12-12- +D|-------------7-7---7-7----------------------------------------14-14-14----14-14-14- +A|-------------5---5---5------------------------------------------------------------- +E|----------------------------------------------------------------------------------- + + + +E|-12-13-12-15-12-15-13-12----13-12----13---5-5-8-8-8-5----------------------------s5- +B|-13-13-13-13-13-13-13-13-13-13-13-13-13---6-6-6-6-----6-6-s8---------------------s6- +G|-12-12-12-12-12-12-12-12-12-12-12-12-12-7-7-7-9-9------------7-------------------s5- +D|----------------------------------------7-7-7-7-7-----------------10-10-10-10-10---- +A|----------------------------------------5-5-5------------------10-10-10-10-10------- +E|------------------------------------------------------------------------------------ + + + +E|-5-5-5-5-5-5-5-5-5-5-3-----------------20-20----10----10-20-b22-1-1-1-3-3-3-3- +B|-6-6-6-6-6-6-6-6-6-6-5-17-17-15-18-p17-17-17----10----10--------1-1-1-3-3-3-6- +G|-5-5-5-5-5-5-5-5-5-5-5-17-17-16-17-----17-17-12----12-----------3-3-3-5-5-5-5- +D|-----------------------17-17-17-17-----17-17-12----12-----------3-3-3-3-3-3-3- +A|----------------------------------------------------------------1-1-1-5-5-5-5- +E|----------------------------------------------------------------------3-3-3--- + diff --git a/guitar/tabs/Rush/analog_kid.prj b/guitar/tabs/Rush/analog_kid.prj new file mode 100644 index 0000000..fc9cfc6 --- /dev/null +++ b/guitar/tabs/Rush/analog_kid.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=analog_kid.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4) diff --git a/guitar/tabs/Rush/analog_kid.tab b/guitar/tabs/Rush/analog_kid.tab new file mode 100644 index 0000000..1497769 --- /dev/null +++ b/guitar/tabs/Rush/analog_kid.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----------------------------- +B|-2-2------------------------- +G|-2-2-------2-0---4-2-0------- +D|-2-2-0-2-4-----4-------4-2-0- +A|-0-0------------------------- +E|----------------------------- + diff --git a/guitar/tabs/Rush/animate.prj b/guitar/tabs/Rush/animate.prj new file mode 100644 index 0000000..ac429b0 --- /dev/null +++ b/guitar/tabs/Rush/animate.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=animate.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4) diff --git a/guitar/tabs/Rush/animate.tab b/guitar/tabs/Rush/animate.tab new file mode 100644 index 0000000..0bf76ea --- /dev/null +++ b/guitar/tabs/Rush/animate.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|-------1---------1---------1---------1---------1---------1----- +G|---2-0---2---2-0---2-0-2-0---2-0-2-0---2---2-0---2---2-0---2--- +D|-0---------0--------------------------------------------------- +A|-----------------------------------------1---------3---------3- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------------------------- +B|-----1---------1------------------------------------------------ +G|-2-0---2---2-0---2---------------------------------------------- +D|---------0-------------------------------5-5-b7-5-5-5-5-5-5-5-5- +A|-------------------0-0-0-0-0-0-0-0-0-5-7------------------------ +E|---------------------------------------------------------------- + + + +E|-------------------------------------------------0-7-5-5-5-5-5- +B|-------------------------------------------------0-8-6-6-6-6-6- +G|-------------------------------------------------0-7-7-7-7-7-7- +D|-5-5-5-5-5-5-5-5-0-0-0-0-0-0-0-0-0-0-0---0---0-0-2-0-7-7-7-7-7- +A|---------------------------------------3---3-----2---5-5-5-5-5- +E|-------------------------------------------------0---5-5-5-5-5- + + + +E|-5-8--8--8--8--8--6-6-6-6-8--8--8--8--8--8-- +B|-6-8--8--8--8--8--6-6-6-6-8--8--8--8--8--8-- +G|-7-10-10-10-10-10-7-7-7-7-9--9--9--9--9--9-- +D|-7-10-10-10-10-10-8-8-8-8-10-10-10-10-10-10- +A|-5-8--8--8--8--8--8-8-8-8-10-10-10-10-10-10- +E|-5-8--8--8--8--8--6-6-6-6-8--8--8--8--8--8-- + diff --git a/guitar/tabs/Rush/anthem.prj b/guitar/tabs/Rush/anthem.prj new file mode 100644 index 0000000..e010a89 --- /dev/null +++ b/guitar/tabs/Rush/anthem.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=anthem.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4) diff --git a/guitar/tabs/Rush/anthem.tab b/guitar/tabs/Rush/anthem.tab new file mode 100644 index 0000000..3a6a6d4 --- /dev/null +++ b/guitar/tabs/Rush/anthem.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|-------------------------------------------------------9-9-9-9- +G|-----5-7-----------------------------------------------9-9-9-9- +D|-5-7-5-7---2-0-2-0---------2-0-2-0---------2-0-2-0-----9-9-9-9- +A|-5-7-3-5-----------2-0-------------2-0-------------2-0--------- +E|-3-5-----0-------------3-0-------------3-0--------------------- + + + +E|--------------------------------------------------------------- +B|---------------9-9-9-9---------------9-9-9-9---------------0-2- +G|---------------9-9-9-9---------------9-9-9-9---------------0-2- +D|---------------9-9-9-9---------------9-9-9-9---------------0-2- +A|--------------------------------------------------------------- +E|-0-0-0-0-0-0-0---------0-0-0-0-0-0-0---------0-0-0-0-0-0-0----- + + + +E|---------------------------7-------------------------3--------- +B|-5-7-----------------------------0---3---5-----2-----3---2---3- +G|-5-7-0-----1-----3-------------0---1---1---3-----3---0--------- +D|-5-7---1-----0-----2---------1---------------------1-0-2---2--- +A|---------2-----4-----2-2-0-------------------4-----2----------- +E|-----------------------------------------------------3--------- + + + +E|-------------------3------------------------------------------- +B|-2-2-0---1-3-------3---2---3-2-2-0-5-5-5-5-5-7-7-5-5-5-5-5-7-7- +G|-------2-0-2-------0---------------5-5-5-5-5-7-7-5-5-5-5-5-7-7- +D|---------2-4-2-2-0-0-2---2---------5-5-5-5-5-7-7-5-5-5-5-5-7-7- +A|-----------------------------------3-3-3-3-3-5-5-3-3-3-3-3-5-5- +E|-------------------3------------------------------------------- + + + +E|---------------------------3-2- +B|-5-5-5-5-5-7-7-9-9-9-9-9-9-3-3- +G|-5-5-5-5-5-7-7-9-9-9-9-9-9-0-3- +D|-5-5-5-5-5-7-7-9-9-9-9-9-9-0-0- +A|-3-3-3-3-3-5-5-7-7-7-7-7-7---0- +E|---------------0-0-0-0-0-0-3--- + diff --git a/guitar/tabs/Rush/bastille_day.prj b/guitar/tabs/Rush/bastille_day.prj new file mode 100644 index 0000000..6262826 --- /dev/null +++ b/guitar/tabs/Rush/bastille_day.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=bastille_day.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4) diff --git a/guitar/tabs/Rush/bastille_day.tab b/guitar/tabs/Rush/bastille_day.tab new file mode 100644 index 0000000..6fb02f8 --- /dev/null +++ b/guitar/tabs/Rush/bastille_day.tab @@ -0,0 +1,154 @@ +%TabMaster v2.00r% + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|-0----------------------------------------------------------0-0--- +D|-0----------------------------------------------------------0-0--- +A|------------------------------------------------------------------ +E|---3-h5-5-5-5-5-5-3-h5-5-5-5-5-5-3-h5-5-5-5-5-5-3-3-3-2-2-0-----5- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|--------------------------------------------------------0-------5- +D|--------------------------------------------------------0-2-2-5-5- +A|----------------------------------------------------------2-2-5-3- +E|-h7-7-7-7-7-7-5-h7-7-7-7-7-7-5-h7-7-7-7-7-7-5-5-5-4-4-2---0-0-3-3- + + + +E|-------------------------------3-------0----------------------- +B|-------------------------------3-------1---------------7-7-7-7- +G|-5-7-7---7---------5-5-7-7-----0-------0---------------7-7-7-7- +D|-5-7-7-7-7-2-2-2-5-5-5-7-7-7---0-------2-------5-5-7-7-7-7-7-7- +A|-3-5-5-7-5-2-2-2-5-3-3-5-5-7-5-2-------3-3-2-0-5-5-7-7-5-5-5-5- +E|-3-5-5-5-5-0-0-0-3-3-3-5-5-5---3-3-2-3---------3-3-5-5--------- + + + +E|-------------3------------------------------------------------- +B|-7-7-7-7-7---3-3-3-3------------------------------------------- +G|-7-7-7-7-7-0-0-2-0-0-----7-7-7-7-------0-0-7-7-7-------7-7-7--- +D|-7-7-7-7-7-0-0-0-2-0-5-7-7-7-7-7-5-7-2-0-0-7-7-7-7-7-7-7-7-7-7- +A|-5-5-5-5-5---2---3-2-5-7-5-5-5-5-5-7-2-----5-5-5-7-7-7-5-5-5-7- +E|-------------3-2-----3-5---------3-5-0-----------5-5-5-------5- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----7-7-7---------------------0-0-9-9-9-------9-9-9-------9-9- +D|-7-7-7-7-7-7-7-7---------------0-0-9-9-9-9-9-9-9-9-9-9-9-9-9-9- +A|-7-7-5-5-5-7-7-7---5-5---5-5-------7-7-7-9-9-9-7-7-7-9-9-9-7-7- +E|-5-5-------5-5-5-3-----2-----0-----------7-7-7-------7-7-7----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-9-----------------------0-0-7-7-7-------0-7-7-7-------0-9-9-9- +D|-9-9-9-9-----------------0-0-7-7-7-7-7-7-0-7-7-7-7-7-7-0-9-9-9- +A|-7-9-9-9---7-7---7-7---------5-5-5-7-7-7---5-5-5-7-7-7---7-7-7- +E|---7-7-7-5-----4-----2-2-----------5-5-5---------5-5-5--------- + + + +E|------------------------------------------------------------------------ +B|-------------------------------------------------8------7-----8------8-- +G|-------0-9-9-9-------0-5-5-5-------0-5-5-5-------10-b12-9-b11-10-b12-10- +D|-9-9-9-0-9-9-9-9-9-9-0-5-5-5-5-5-5-0-5-5-5-5-5-5------------------------ +A|-9-9-9---7-7-7-9-9-9---3-3-3-5-5-5---3-3-3-5-5-5------------------------ +E|-7-7-7---------7-7-7---------3-3-3---------3-3-3------------------------ + + + +E|------------------------------------------------------------------------------------------- +B|-----5----7-----5----1----3----5----8------7-----8------8------5----7-----10-----1----3---- +G|-b12-7-b9-9-b11-7-b9-3-b4-5-b7-7-b9-10-b12-9-b11-10-b12-10-b12-7-b9-9-b11-12-b14-3-b4-5-b7- +D|------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------- +B|-5------------------------------------------------------------------------------------------ +G|-7-b9-12-p11-p9-12-p11-p9-12-p11-p9-12-b14-12-12-12-12-12-p11-p9----9-------------------8-9- +D|-----------------------------------------------------------------12---12-11-9-11-7-s9-9----- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------------------------- +G|-11-9-11-11-b12-11-11-b12-11-b12-r11-9-14-b16-14-b16-14-b16-14-b16-14-14-14-p12-p11-9-11-9----9-9- +D|-------------------------------------------------------------------------------------------12----- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------------------- +G|-9-9-8--------------------9-11-12-p11-p9-11-9-----------------9-11-12-p11-p9-11-9----------- +D|-------12-p11-p9----11-12---------------------12-p11----11-12---------------------12-p11-p9- +A|-----------------12----------------------------------12------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------- +B|--------------------------------------------------------------------------------- +G|-------9-9-9-9-8-9-9-8-9-p8-8-8-------8-9-11-13-14-14-p13-p11-h14-p13-p11-9-11-9- +D|-11-12--------------------------9-9-9-------------------------------------------- +A|--------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------- +B|------------------------------------------------------------------------------- +G|-8------------------------------------------7-r0-7-16-12-h14-p12-----5-7-7---7- +D|---9-9----------------12-9-9-9-9-9-------------------------------2-5-5-7-7-7-7- +A|-------10-10-10-10-10--------------10-10-10----------------------2-5-3-5-5-7-5- +E|-----------------------------------------------------------------0-3-3-5-5-5-5- + + + +E|---------------5-5--------------------------------------------- +B|---------------7-7--------------------------------------------- +G|---------5-7---7-7--------------------------------------------- +D|-2-2-2-5-5-7---7-7--------------------------------------------- +A|-2-2-2-5-3-5---5-5-4-5---------4-5---------4-5---------6-7----- +E|-0-0-0-3-3-5-0---------0-4-5-5-----0-4-5-5-----0-4-5-5-----0-6- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|-----6-7---------6-7---------7-8---------7-8---------7-8------- +E|-7-7-----0-6-7-7-----0-6-7-7-----5-7-8-8-----5-7-8-8-----5-7-8- + + + +E|--------------------------------------------------------------------------------------- +B|--------------------------------------------------------------------------------------- +G|--------------------------------------------12-12-11-12-17-17-16-14-14-s16-16-14-14-12- +D|---9-9-7-9-10-10-9-7-7-h9-9-9-h11-11-11-h12-------------------------------------------- +A|--------------------------------------------------------------------------------------- +E|-8------------------------------------------------------------------------------------- + + + +E|-15--- +B|------ +G|------ +D|----5- +A|----5- +E|----3- + diff --git a/guitar/tabs/Rush/before_and_after.prj b/guitar/tabs/Rush/before_and_after.prj new file mode 100644 index 0000000..049d7f0 --- /dev/null +++ b/guitar/tabs/Rush/before_and_after.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=before_and_after.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4) diff --git a/guitar/tabs/Rush/before_and_after.tab b/guitar/tabs/Rush/before_and_after.tab new file mode 100644 index 0000000..20c5aca --- /dev/null +++ b/guitar/tabs/Rush/before_and_after.tab @@ -0,0 +1,136 @@ +%TabMaster v2.00r% + + +E|----12---12-----12------------0------0------0-----------------------0-0--- +B|-12----5----2-5----12---------0------0------0-----------------------0---0- +G|----------------------13------8------6------1----------------------------- +D|----------------------14-0-s0-9-0-s0-7-0-s0-2-0-s0------------------4----- +A|----------------------14------9------7------2------7---7---7---9----4----- +E|----------------------12------7------5------0--------7---7---7---12-2----- + + + +E|-0-0---0-----0-------0-------------0---------0-------------0--- +B|-0---0-0---2-0------------------------------------------------- +G|-------6---2-1---------8-------------8---------6-------------6- +D|-6-----7-6-4-2-----9-------9-----9---------7-------7-----7----- +A|-6-----7-6---2---9-------9-----9---------7-------7-----7------- +E|-4-----5-4---0-7-------------7---------5-------------5--------- + + + +E|-----------0-----------7-0-0-0-------0------------7-p0-0-0-0----- +B|---------------7-0-0-0-------------------5-p0-0-0----------0----- +G|-------------8-------------------------6------------------------- +D|---7-----9-------------------------7-----------------------4-4--- +A|-7-----9-------------------------7-------------------------4---4- +E|-----7-------------------------5---------------------------2----- + + + +E|---8---0-----------0------------------------------------------- +B|-------0-----------0------------------------------------------- +G|-------------------6-2-2-2-2-2---7----------------------------- +D|-----4-6-6-------6-7-2-2-2-2-2-5-7-2-2-2-2-2-----0---------2-2- +A|-4-----6---6---6---7-0-0-0-0-0-5-5-2-2-2-2-2-0-2---0-2-0---2-2- +E|-------4-----4-----5-----------3---0-0-0-0-0-------------3-0-0- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|------------------------5-5-5---------7-3---------------------5- +D|-2-2-2------0-----------5-5-5-2-3-4-5-7-3----------------------- +A|-2-2-2-0-h2---0-2-0-----3-3-3---------5-1-------1---------1----- +E|-0-0-0--------------3-3-------------------1-2-3---3-1-2-3---3--- + + + +E|--------------------------------------------------------------- +B|---4----------------------------------------------------------- +G|-5-------------3-5-5-5-5-5-5-3---5-3-5-3-------3-------3------- +D|-------------------------------5---------5-3-5---5-3-5---5-3--- +A|-----------1-------------------------------------------------5- +E|-----1-2-3---3------------------------------------------------- + + + +E|----------------------------------------------------------------- +B|-------------------------1---1-s2---1-s2------------------------- +G|---------------------------7------7---7--7-7-6-5-5-3---5-5-3----- +D|-----------------------------------------------------5-------5-5- +A|-4-3-1-3-1-----------1------------------------------------------- +E|-----------3-1-1-2-3---3----------------------------------------- + + + +E|--------------------------------------------------------------- +B|-------------3-6-3---3-6-3---3-6-3----------------------------- +G|---------5-5-------5-------5-------5-5-3-----5-5-3---5-5-3---5- +D|-3---3-5---------------------------------5-3-------5-------5--- +A|---5----------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------------------------- +B|-----------------------------------------------1-1-s2-2-2------- +G|---3-----------------------------------------9---9----9-9-9-9-9- +D|-5-------------------------------------------------------------- +A|-----------1---------1---------1---------1---------------------- +E|-----1-2-3---3-1-2-3---3-1-2-3---3-1-2-3---3-------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|-9-9-9-9-8-7-5-5--------5--------5--------5--------5-7-7-7--------- +D|-----------------7-p5-----7-p5-----7-p5-----7-p5-----------7-7-7-6- +A|----------------------7--------7--------7--------7----------------- +E|------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-5------------------------------------------------------------- +A|---7-6-5-----3-5-5-5-3-------3-5-5-5-3---3-5-5-5-3---3-5-5-3--- +E|---------3-5-----------5-3-5-----------5-----------5---------5- + + + +E|---------------------------------------------------------------------- +B|---------------------------------------------------------------------- +G|----------------------------------------------------------------5-7-7- +D|--------------------------------------------------5--------5-h7------- +A|-3-5-5-5-5-3---3-5-5-3---3------3-h5-p3---3-h5-s7---7-p5-7------------ +E|-------------5---------5---3-h5---------5----------------------------- + + + +E|-------------------------------------------------5-h8-p5---5-h8-p5---------- +B|---------5-h8-p5---5-h8-p5---5-h8-p5---5-h8-p5-----------8---------8-8-p5--- +G|-7-5---5---------7---------7---------7---------7--------------------------7- +D|-----7---------------------------------------------------------------------- +A|---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------- +B|-5-h8-p5---------------------------8-8-8-8-8-8-8---10-10-10-10---6-6- +G|---------7-7-7-5---5-7-7-5---5-7-7-7-7-7-7-7-7-7-9-------------5-5-5- +D|-----------------7---------7----------------------------------------- +A|--------------------------------------------------------------------- +E|--------------------------------------------------------------------- + + + +E|----- +B|-6-6- +G|-5-5- +D|----- +A|----- +E|----- + diff --git a/guitar/tabs/Rush/between_the_wheels.prj b/guitar/tabs/Rush/between_the_wheels.prj new file mode 100644 index 0000000..202ab0e --- /dev/null +++ b/guitar/tabs/Rush/between_the_wheels.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=between_the_wheels.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4) diff --git a/guitar/tabs/Rush/between_the_wheels.tab b/guitar/tabs/Rush/between_the_wheels.tab new file mode 100644 index 0000000..0e99e18 --- /dev/null +++ b/guitar/tabs/Rush/between_the_wheels.tab @@ -0,0 +1,127 @@ +%TabMaster v2.00r% + + +E|---7-7-5-5---------------------------------------------------------- +B|---6-6-5-5-----------------------5------6--------------------------- +G|-0-5-5-5-5-0----------4-b5-4-2------------7-4-b5-4-2---7-4-b5-4-2-0- +D|-0---------0---s7--------------5---5-s7--------------5-------------- +A|------------------0------------------------------------------------- +E|-------------0------0----------------------------------------------- + + + +E|--------20-19-19-b22----------10-10-10-10-10-10-10-10-10-10-10-10-----------5-5-5- +B|------------------------------12-12-12-12-12-12-10-10-10-10-10-10-----------6-5-5- +G|----------------------------0-10-10-10-10-10-10-------------------0---------5-5-5- +D|-0-h2----------------s7-----0-------------------------------------0---------7-5-5- +A|------------------------0--------------------------------------------------------- +E|------0-------------------0-----------------------------------------3-5-0-0------- + + + +E|-5-----5-5-5-5-----3-3-3-3----------10-10-10-10-10--------------------- +B|-6-----6-5-5-6-----3-3-3-3-5--------10-10-10-10-10-------3-----3-----5- +G|-5-----5-5-5-5-5-5-5-5-4-4-5--------10-10-10-10-10-------5-------5---7- +D|-7-----7-5-5-7-5-5---------5-s10-------------------------5-5-------5-7- +A|---------------3-3-----------s10-12----------------------3---3-------5- +E|---0-0---------3-3---------------------------------3-2-0-3------------- + + + +E|-------------------------------3---3---------------------------- +B|-------0-----0---0---0---0---3-----3---5-----5-----0----------3- +G|---5-7-0---0---0-2-2---2-----5---5---5-7-7---5-7---0----------5- +D|-7-----2-2-------3-----------5-------5-7---7-------2---s7-----5- +A|-------2---------------------3---------5-----------2------0---3- +E|-------2---------3---------0-3-------------------0-2-0------0-3- + + + +E|-------------------------------1-0----------------------------- +B|-----3-----5-------0-----0---0-----1-0---3-----3-----5-------0- +G|-------5---7---5-7-0---0---0-2---------0-5-------5---7---5-7-0- +D|-5-------5-7-7-----2-2-------3-----------5-5-------5-7-7-----2- +A|---3-------5-------2---------------------3---3-------5-------2- +E|-------------------2---------3-----------3-------------------2- + + + +E|-----------1-0------------------12-h15-p12-12-----------------------------15-b17-15-b17- +B|-----0---0-----3-1-0-------7-10---------------15-15-b17-r15-p13-h15-13-15--------------- +G|---0---0-2-----------0---7---10--------------------------------------------------------- +D|-2-------3-------------7---------------------------------------------------------------- +A|---------------------------------------------------------------------------------------- +E|---------3------------------------------------------------------------------------------ + + + +E|--------------------------------------------15-b17-15-b17-15-b17-r15-15-12--------15-b17-r15-12---- +B|-5-b17-r15-13-15---------------8-8-s10-7-s5--------------------------------15-p13---------------13- +G|-----------------15-b17------5--------------------------------------------------------------------- +D|------------------------5-s7----------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------5-8-5-8-5-8-5----- +B|-------------5-6------------5-6-8----------5-6-8---------------8--- +G|-12------5-7------------5-7------------5-7-----------------------5- +D|----5-s7---------5-s7-7-----------5-s7----------------------------- +A|------------------------------------------------------------------- +E|------------------------------------------------------------------- + + + +E|------------------------------------------8-8-7-5------------------- +B|-------------5-6-5-h6-p5-----6-s8-6-5-------------8-6-5------------- +G|-s7------5-7-------------7-5----------7-5---------------7-5-4------- +D|----5-s7------------------------------------------------------7-5-3- +A|-------------------------------------------------------------------- +E|-------------------------------------------------------------------- + + + +E|--------------------------7-7-7--------------12----------17----20----------- +B|--------------8---8---5-5---5-5-----------10-10-10-------15----18-3-----3--- +G|------------5-------7-----------10-s12-12----------12-17----17-19-5-------5- +D|-------5-s7-----7-------------------------------------------------5-5------- +A|-7-5-3------------------------------------------------------------3---3----- +E|------------------------------------------------------------------3--------- + + + +E|-----------------------1-0------------------------------------------ +B|---5-------0-----0---0-----1-0--------------------5------6---6------ +G|---7---5-7-0---0---0-2---------0-4-b5-4-b5-r4-2------------7---4-b5- +D|-5-7-7-----2-2-------3--------------------------5---5-s7------------ +A|---5-------2-------------------------------------------------------- +E|-----------2---------3---------------------------------------------- + + + +E|---------------------------20-19-20-b22------------------------------------ +B|----------------------------------------------------------------5------6--- +G|-4-2---7-4-b5-4-2------------------------------4-b5-4-b5-r4-2------------7- +D|-----5------------5-0-h2----------------s7--------------------5---5-s7----- +A|-------------------------------------------7------------------------------- +E|-------------------------0-------------------0----------------------------- + + + +E|-1----------------------------------------------------------20-19-20-b22----- +B|----------------------------------------------------------------------------- +G|---4-4-4-4-b5-b6-r5-r4-4-2-0-h2-p0---0---4-b5-4-2-p0-----------------------4- +D|-----------------------------------------------------0-h2-------------------- +A|-----------------------------------5---5------------------------------------- +E|----------------------------------------------------------0--------------0--- + + + +E|----------------------------------------------------------------12------ +B|----------5------6------12-12-12-12-----------------------------12-12--- +G|-b5-4-2------------7-10-12-12-12-12---------4---b5-4-2-0-----------12--- +D|--------5---5-s7--------------------9---9-----5------------0-h2-------9- +A|---------------------------------------------------------0-------------- +E|--------------------------------------5---0----------------------------- + diff --git a/guitar/tabs/Rush/big_money.prj b/guitar/tabs/Rush/big_money.prj new file mode 100644 index 0000000..7bc09c0 --- /dev/null +++ b/guitar/tabs/Rush/big_money.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=big_money.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4) diff --git a/guitar/tabs/Rush/big_money.tab b/guitar/tabs/Rush/big_money.tab new file mode 100644 index 0000000..a5f9097 --- /dev/null +++ b/guitar/tabs/Rush/big_money.tab @@ -0,0 +1,73 @@ +%TabMaster v2.00r% + + +E|-0-2-3-2---------0-----------2-3-2---------2-3-2---------0----2- +B|-2-3-3-3---------2-----------3-3-3---------3-3-3---------2-10-3- +G|-2-2-2-2---0-----2-----------2-2-2---0-----2-2-2---0-----2----2- +D|-2-0-0-0-2---2-0-2-----------0-0-0-2---2-0-0-0-0-2---2-0-2----0- +A|-0---------------0-----0-3-0-----------------------------0------ +E|-------------------0-3------------------------------------------ + + + +E|-3-2-0--------------------------------------------------------- +B|-3-3-1--------------------------------------------------------- +G|-2-2-0-----0-------0-----0-------0-------0-----0-------0-----0- +D|-0-0-2-0-0---0---------------0-0---0---------------0-0--------- +A|---------------3-3---------3---------3-3---------3-------3-3--- +E|---------------------3-3-------------------3-3----------------- + + + +E|--------------------------------------------------------------- +B|-------7-5-6-8-7-5-6-8-----5-8-7-----5-7----------------------- +G|-----0-7-5-5-7-7-5-5-7-6-4-5-7-7-6-4-5-7-----0-----0-----0----- +D|-------7-5-3-5-7-5-3-5-7-5-5-7-7-7-5-5-7-0-0---0-------------0- +A|-------5-3-----5-3-----7-5-3-5-5-7-5-3-5---------3---------3--- +E|-3-3-------------------5-3-------5-3-----------------3-3------- + + + +E|--------------------------------------------------------------- +B|---------------------1---1---1---1---1---1---1---1---1---1---1- +G|---0-----0-----0---0---0-------------------0---0---0---0------- +D|-0---0---------------------3---3---------------------------3--- +A|-------3---------3-----------------3---3----------------------- +E|-----------3-3------------------------------------------------- + + + +E|---------------------2-3----------------------------------------------- +B|---1---1---1---1---1-3-3----12------------7-------12-------7----------- +G|-------------0---0---2-2-------12----12-----7--------12------7-9-5-7-7- +D|-3-------------------0-0-12-------12----7-----7---------12------------- +A|-----3---3--------------------------------------7---------------------- +E|----------------------------------------------------------------------- + + + +E|-------------12----------------15-15-14-12----------------------15---------------------- +B|----------------12-13-12----12-------------15-12-13-15-15-13-12----15-15-15-13-15-13-12- +G|-5-7-5-5-7-5-------------14------------------------------------------------------------- +D|---------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|-------------15--------------------7---7---7---------------------------------- +B|----12-13-15---------------------7---7---7------12-------12---7-----7--------- +G|-14-------------14-12-11-12-11-9-------------------12----12-----7---7-5-5-5-9- +D|---------------------------------------------12-------12----7-----7----------- +A|------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------ + + + +E|----------------------------------------------------------- +B|-------9-9-9-7-7-7-6-6-6-7-7-7-9-9-9-7-7-7----------------- +G|-7-5-9-9-9-9-7-7-7-6-6-6-7-7-7-9-9-9-7-7-7----------------- +D|-------9-9-9-7-7-7-6-6-6-7-7-7-9-9-9-7-7-7-----------4-5-7- +A|-------7-7-7-5-5-5-4-4-4-5-5-5-7-7-7-5-5-5-----4-5-7------- +E|-------------------------------------------5-7------------- + diff --git a/guitar/tabs/Rush/broons_bane.prj b/guitar/tabs/Rush/broons_bane.prj new file mode 100644 index 0000000..db5eeec --- /dev/null +++ b/guitar/tabs/Rush/broons_bane.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=broons_bane.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4) diff --git a/guitar/tabs/Rush/broons_bane.tab b/guitar/tabs/Rush/broons_bane.tab new file mode 100644 index 0000000..81e04d8 --- /dev/null +++ b/guitar/tabs/Rush/broons_bane.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|-------0-----------0-----------0-----------0-----------0------- +B|-3-------3-----------3-----------3-----------3-----------3----- +G|-----3-----------3-----------2-----------2-----------3--------- +D|---0-----------0-----------0-------0---0-----------0----------- +A|-----------0-1---------1-------------0---------0-----------0-1- +E|-3-----------------------2-----------------------3------------- + + + +E|-----0-----------0-----------0-----------0-----------0--------- +B|-------3-----------2-----------3-----------3-----------3------- +G|---3-----------2-----------3-----------3-----------3----------- +D|-0-----------2-------2---3-----------0-----------0-----------0- +A|---------0-0---------------------0-----------0-1---------1----- +E|-----------------------0-----------3-----------------------2--- + + + +E|---0-----------0-----------0-----------0-----------0----------- +B|-----3-----------3-----------3-----------3---3-------3---3----- +G|-2-----------2-----------3-----------3-----------3-----------1- +D|-------0---0-------0---0-----------0-----------3-----------3--- +A|---------0---------------------0-1---------0-0---------0-1----- +E|---------------------3----------------------------------------- + + + +E|-1-------5---5-----------5-----8-----8-7-5-----5---5-----5----- +B|---3---2-6-6---6-------6---6-------5---------5---------4---4--- +G|-------2-7-----------7-----------5---------5---------3--------- +D|-------2-0-------0-----------0-7-------6-7-------0-----------5- +A|-----0-0-----------0-------------------------------3----------- +E|--------------------------------------------------------------- + + + +E|-3-----3-----2-----2-----------2-----------1-----------1------- +B|-----3---3-------3---3-----------3---3-------3-----------3---2- +G|---3-----------4-------------4-----------1-----------1--------- +D|-5---------5---------------4-----------3-----------3----------- +A|-------------2---------2-----------2-1---------1-----------1-0- +E|-------------------------2-----------------------1------------- + + + +E|-----0-----------0-----------1-----------1-----------0--------- +B|-------2---2-------2---3-------3-----------3---2-------2------- +G|---2-----------2-----------1-----------1-----------2----------- +D|-2-----------2-----------3-----------3-----------2-----------2- +A|---------0-----------0-1---------1-----------1-0---------0----- +E|-----------0-----------------------1-----------------------3--- + + + +E|---0-----------0-----------0--- +B|-----2-----------3-----------3- +G|-2-----------2-----------2----- +D|-----------0-----------0------- +A|------------------------------- +E|-------3-2---------2-1--------- + diff --git a/guitar/tabs/Rush/by-tor_and_the_snow_dog.prj b/guitar/tabs/Rush/by-tor_and_the_snow_dog.prj new file mode 100644 index 0000000..c3bfe72 --- /dev/null +++ b/guitar/tabs/Rush/by-tor_and_the_snow_dog.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=by-tor_and_the_snow_dog.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4) diff --git a/guitar/tabs/Rush/by-tor_and_the_snow_dog.tab b/guitar/tabs/Rush/by-tor_and_the_snow_dog.tab new file mode 100644 index 0000000..bf23e17 --- /dev/null +++ b/guitar/tabs/Rush/by-tor_and_the_snow_dog.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|-------8-9-----8-9-----8-9-8----------------------------------- +G|-0---7-------7-------7-------9-8-7-------0-0---5-6-7---5-6-7--- +D|-0-9-------9-------9---------------9-7-6-0-0-7-------7-------7- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-------------------------------------------------5-8-5--------- +G|-5-6-7-6-5-----------0-0---5-6-7---5-6-7---5-6-7-------7-6-5--- +D|-----------7-6-5-----0-0-7-------7-------7-------------------7- +A|-----------------7-6------------------------------------------- +E|--------------------------------------------------------------- + + + +E|------------------------------------------------------------------7- +B|-------------------------------------8-10-13-10---8-10---8-10---8--- +G|-0-0---9-9---9-9-----9-9---9-9---0-7------------7------7------7----- +D|-0-0---9-9---9-9-----9-9---9-9---0---------------------------------- +A|-------7-7---7-7-----7-7---7-7-------------------------------------- +E|-----0-----0-----0-0-----0-----0------------------------------------ + + + +E|-8----------------------------------------------------------10---------- +B|---8---7---7-8---12-10-7-----7-------8-7-----8-7-----10-b12----12-r10-8- +G|-----7---7-6-7---14------6-7-----0-9-9-7-7-9-9-7---0-------------------- +D|---------------------------------0-9-----9-9-------0-------------------- +A|------------------------------------------------------------------------ +E|---------------0---------------0-----------------0---------------------- + + + +E|----------------------------10-11-12-15-b17-r15-10-h12-p10-12-12-12-12-12-10-s17-15-12-p11-p10-12- +B|-10-8-5-8-b10-r8-5-10-11-12----------------------------------------------------------------------- +G|-------------------------------------------------------------------------------------------------- +D|-------------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|-12-12-10-------------------------------------------------------------------------------- +B|----------12-p11-p10-9-----------------------------8-9-10-10-10-8-----8-10-b12-r10-10-10- +G|-----------------------12-7-8-9-12-12-b14-r12-s9-9----------------7-9-------------------- +D|----------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------- +B|-10-10-b12-r10-8----------------------------------------------------------------------- +G|-----------------9-----------------------8-8-h9-9-9-h11-11-b12-11-b12-11-b12-11-b12-p9- +D|-------------------7-5---5-5-5-h7-7-7-s9----------------------------------------------- +A|-----------------------7--------------------------------------------------------------- +E|--------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------15-b16-13-10-h12-p10----------10---- +B|------------10-10-------------9-10-p9-9-h10-p9-9-h10-p9----------------------8-10-b12----12- +G|-9-11-11-11-------9-h11-9-7-7--------------------------------------------------------------- +D|-------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------- +B|-r10-10-b12-10-8-10-10-5---5-8----------------------------------------- +G|-------------------------8--------------------------------------------- +D|-------------------------------5-5-6-7-5-5-6-7-5-5-6-7-6-5---5-5-6-7-5- +A|-----------------------------------------------------------7----------- +E|----------------------------------------------------------------------- + + + +E|-------------------------------------2----- +B|-----------------------------1-----3-3----- +G|---------------------------2-----4---2-0-7- +D|-5-6-7-5-5-6-7-6-5-6-5---3-----5-----0----- +A|-----------------------7------------------- +E|------------------------------------------- + diff --git a/guitar/tabs/Rush/chemistry.prj b/guitar/tabs/Rush/chemistry.prj new file mode 100644 index 0000000..a9cc21e --- /dev/null +++ b/guitar/tabs/Rush/chemistry.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=chemistry.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4) diff --git a/guitar/tabs/Rush/chemistry.tab b/guitar/tabs/Rush/chemistry.tab new file mode 100644 index 0000000..91923e9 --- /dev/null +++ b/guitar/tabs/Rush/chemistry.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------------------------- +B|-7-7-7-7-5-5-5-5---------------5-5-5-5-7-7-7-7-5-5-5-5----------- +G|-7-7-7-7-5-5-5-5-9-7---------7-5-5-5-5-7-7-7-7-5-5-5-5----------- +D|-7-7-7-7-5-5-5-5-----10-9-10---5-5-5-5-7-7-7-7-5-5-5-5----------- +A|-5-5-5-5-3-3-3-3---------------3-3-3-3-5-5-5-5-3-3-3-3-7-5------- +E|-----------------------------------------------------------8-7-8- + + + +E|-----------13-12----------13-12----------13-12----13-12----------13-12-13----------- +B|---5-5-5-5-------15-13-12-------15-13-12-------15-------15-13-12----------7-7-7-7-5- +G|---5-5-5-5----------------------------------------------------------------7-7-7-7-5- +D|---5-5-5-5----------------------------------------------------------------7-7-7-7-5- +A|-7-3-3-3-3----------------------------------------------------------------5-5-5-5-3- +E|------------------------------------------------------------------------------------ + + + +E|----------------------------------------------15----13-12----------13-12-10----12---- +B|-5-5-5----------------------------------15-13----13-------15-13-------------13----15- +G|-5-5-5---------------------------s12-10-------------------------12------------------- +D|-5-5-5---------------------12-10----------------------------------------------------- +A|-3-3-3-7-5-------7---s10-8----------------------------------------------------------- +E|-----------8-7-8---8----------------------------------------------------------------- + + + +E|-------------------------------19-19-17-19-------19-19-------------------13-12-------13-12---- +B|-13-12-13-15-12-13-12-12-13----------------18-20----17----17-17-17-13-15-------13-15-------13- +G|----------------------14----14-------------------------17------------------------------------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|----13-12----------13-12-13-12------------------------------------------------------ +B|-15-------13-13-15-------------15-13-12--------------------------------------------- +G|-------------12-------------------------14-s12-11-12-11-s5-7-5-s4-5-4-------4-5-4--- +D|----------------------------------------------------------------------7-5---------7- +A|--------------------------------------------------------------------------7--------- +E|------------------------------------------------------------------------------------ + + + +E|-------------------------------------------------------------------------------- +B|---------------15-15-13-12-13-15-12-13-12-13-------------7-7-7-7-5-5-5-5-------- +G|---5-7-5-s2-s4-------------------14----------10-10-10-12-7-7-7-7-5-5-5-5-9-7---- +D|-5-------------------------------------------------------7-7-7-7-5-5-5-5-----10- +A|---------------------------------------------------------5-5-5-5-3-3-3-3-------- +E|-------------------------------------------------------------------------------- + + + +E|------------ +B|------------ +G|------7-5--- +D|-9-10------- +A|----------3- +E|------------ + diff --git a/guitar/tabs/Rush/cinderella_man.prj b/guitar/tabs/Rush/cinderella_man.prj new file mode 100644 index 0000000..ddc7617 --- /dev/null +++ b/guitar/tabs/Rush/cinderella_man.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=cinderella_man.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4) diff --git a/guitar/tabs/Rush/cinderella_man.tab b/guitar/tabs/Rush/cinderella_man.tab new file mode 100644 index 0000000..dfad1a9 --- /dev/null +++ b/guitar/tabs/Rush/cinderella_man.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|---------------------------------------2-2-3---2-----------3-3- +B|-------------------------------------2-3-3-3-2-3-----------3-3- +G|-------------------------------------2-2-2-2-2-2-----------0-0- +D|-------5-4---------------5-5-4-4-----2-0-0-0-2-0-----------0-0- +A|-2-4-5-----5-2-2-4-4-5-5---------5-5-0-0-0-0-0---4-5-4-----2-2- +E|-------------------------------------------------------5-3-3-3- + + + +E|-----------3-3---0-0-0-0-0-0-0-0-0-0-0---------------0-0-0----- +B|-----------3-3---2-2-2-2-2-2-2-2-3-3-3-3-3-3-3-3-3---3-3-3-3-3- +G|-----------0-0-0-2-2-2-2-2-2-2-2-0-0-0-2-2-2-2-2-2-0-0-0-0-2-2- +D|-----------0-0-0-2-2-2-2-2-2-2-2-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0- +A|-4-5-4-----2-2---0-0-0-0-0-0-0-0------------------------------- +E|-------5-3-3-3-------------------3-3-3-2-2-2-2-2-2---3-3-3-2-2- + + + +E|-0-0-0-----2-2-2-2-2-0-----0-2-----0--------------------------- +B|-3-3-3-3-3-3---------2-2-3---3-3-3---3-2---0---1-1-1-3-1-0----- +G|-0-0-0-2-2-2---------2-------4-----------4-1---2-----------2-0- +D|-0-0-0-0-0-0---------2-------4-------------2-2-2--------------- +A|---------------------0-------2-------------2-2-0--------------- +E|-3-3-3-2-2---------------------------------0-0----------------- + + + +E|---------3-3-3-3-3-3-3-3-3--------------------------------------- +B|-3-0-0-2-3-3-3-3-3-3-3-3-3-3---2---2-2-h3-3-3-2---7---7-7-h8-8-8- +G|-------2-0-0-0-0-0-0-0-0-0-2---------2----2-2-2---------7----7-7- +D|-------2-0-0-0-0-0-0-0-0-0-0-----2---2-h4-4-4-2-0---7---7-h9-9-9- +A|-------0-2-2-2-2-2-2-2-2-2---0----------------------------------- +E|---------3-3-3-3-3-3-3-3-3-2------------------------------------- + + + +E|-----------------------3-3---------------------------------3-3- +B|-7---2-2-2-------------3-3---------------2-2-2-------------3-3- +G|-7-0-2-2-2-------------0-0-------------0-2-2-2-------------0-0- +D|-7-0-2-2-2-------------0-0-------5-4---0-2-2-2-------------0-0- +A|-----0-0-0-4-4-5-4-----2-2-2-4-5-----5---0-0-0-4-4-5-4-----2-2- +E|-------------------5-3-3-3-----------------------------5-3-3-3- + + + +E|-------------3-3---7-2-0-2-7-2-2-0---3-2- +B|-------------3-3---8-3-1-3-8-3-3-1---3-3- +G|-------------0-0-0-7-2-0-2-7-2-2-0-0-2-2- +D|-------------0-0-0-0-0-0-0-0-0-0-0-0-2-0- +A|-4-4-5-4-----2-2---------------------0--- +E|---------5-3-3-3------------------------- + diff --git a/guitar/tabs/Rush/closer_to_the_heart.prj b/guitar/tabs/Rush/closer_to_the_heart.prj new file mode 100644 index 0000000..17b6d37 --- /dev/null +++ b/guitar/tabs/Rush/closer_to_the_heart.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=closer_to_the_heart.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4) diff --git a/guitar/tabs/Rush/closer_to_the_heart.tab b/guitar/tabs/Rush/closer_to_the_heart.tab new file mode 100644 index 0000000..766f8b5 --- /dev/null +++ b/guitar/tabs/Rush/closer_to_the_heart.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|-5-----7-----4-----5-5---4---------5-----7-----4-----5-----4--- +B|---0-----0-----0-----------7-5-------0-----0-----0-----0-----7- +G|-----6-----6-----6-----6-------6-0-----------6-----6-----6----- +D|---------------------------------0-----7----------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------------0--------------0--------------0--------------------0- +B|-5---------3---3----------3---3----------1---1---0-3-2-2---0-h2--- +G|---6-0---4--------------2--------------2-------2-2-2-2------------ +D|-----0-5---------5-s4-4---------4-s3-3---------3-2-2-2---2-------- +A|-------------------------------------------------0-0-0------------ +E|------------------------------------------------------------------ + + + +E|-------10-------------10------10-b12-10-8--------7-9-10-9-10-12-10-12-14-12-14-15- +B|-0-3-2----10-8-7-8-10----10-8-10-b12-10-8-7-8-10---7-8---------------------------- +G|-2-2-2-11-------------11----------------9-7-7-7----------------------------------- +D|-2-2-2----11-9-7-9-11----11-9----------------------------------------------------- +A|-0-0-0---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|-12-14-15-14-15-17-17-b19-17-b19-17-b19-17-b19-r17-12-14-15-15-b17-15-b16-15-b17------------------------- +B|---------------------------------------------------------------------------------15-b17-r15-15-15-17-b19- +G|--------------------------------------------------------------------------------------------------------- +D|--------------------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------- + + + +E|-----------15-14-15-14-15-14-15-14-15-b17-17-17--------10------------------------------------- +B|-r17-17-17-15-14-15-14-15-14-15-14-15-b17-17-17-10-b12-10-10-b12-r10-7-s8-s7------------------ +G|---------------------------------------------------b11-------b11-r9--6-s7-s6-9-7-9-b10-7-4-p0- +D|-----------------------------------------------------------------------------9-7-9-b10-7-4-p0- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-----------------------------------4-s5-------------------17-b19- +B|-------------------------3-3-3-3-2-4-s5-3-b5-7-b9--15-b17-20-b22- +G|-2-2-4-b5-4-b5-4-4-b5-r4-2-2-2-2-2-5-s6-5-b7-9-b11-17-b19-------- +D|-2-2-4-b5-4-b5-4-4-b5-r4----------------------------------------- +A|----------------------------------------------------------------- +E|----------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/cold_fire.prj b/guitar/tabs/Rush/cold_fire.prj new file mode 100644 index 0000000..7c15c13 --- /dev/null +++ b/guitar/tabs/Rush/cold_fire.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=cold_fire.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4) diff --git a/guitar/tabs/Rush/cold_fire.tab b/guitar/tabs/Rush/cold_fire.tab new file mode 100644 index 0000000..f722d88 --- /dev/null +++ b/guitar/tabs/Rush/cold_fire.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-3-3-3-2-0-3-3-------------------------5----------------------- +B|-3-3-3-3-3-3-3---------------------5--------------------------- +G|-2-2-2-2-2-2-2-5-7-5-------0-----5---5---------0-------0------- +D|-2-2-------2-2-5-7-5-----3-----7-------------3-------5-------7- +A|-0-0-------0-0---------3-------------------3-------5-------7--- +E|-0-0-------0-0-------1-------5-----------1-------3-------5----- + + + +E|--- +B|--- +G|-0- +D|--- +A|--- +E|--- + diff --git a/guitar/tabs/Rush/cut_to_the_chase.prj b/guitar/tabs/Rush/cut_to_the_chase.prj new file mode 100644 index 0000000..831658e --- /dev/null +++ b/guitar/tabs/Rush/cut_to_the_chase.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=cut_to_the_chase.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4) diff --git a/guitar/tabs/Rush/cut_to_the_chase.tab b/guitar/tabs/Rush/cut_to_the_chase.tab new file mode 100644 index 0000000..b751110 --- /dev/null +++ b/guitar/tabs/Rush/cut_to_the_chase.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|---0---0---0-----0---0---0---0-----0---0---0---0-----0---3---3- +G|--------------------------------------------------------------- +D|-2---2---2---2-2---2---2---2---2-2---2---2---2---2-2---5---5--- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|---3-----3---3---3---3-----3----------------------------------- +G|-------------------------------2---2---2-----2---2---2---2----- +D|-5---5-5---5---5---5---5-5------------------------------------- +A|-----------------------------0---0---0---0-0---0---0---0---0-0- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-----0---0---0-----0---0---0---0-----0---3---3---3-----3------- +G|-2---------------------------------------------------------2--- +D|---2---2---2---2-2---2---2---2---2-2---5---5---5---5-5--------- +A|---------------------------------------------------------0---0- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------------------------- +B|---------------0---0---0-----0---0---0---0-----0---------------- +G|-2---2-----2---------------------------------------------------- +D|-------------2---2---2---2-2---2---2---2---2-2---5-s7-7-7-7-5-5- +A|---0---0-0---------------------------------------5-s7-7-7-7-5-5- +E|-------------------------------------------------3-s5-5-5-5-3-3- + + + +E|-------------------------------------------------------------------- +B|-------------------------------------------------------------------- +G|--------------------------------------4-4-4-s6-6-6-6-4-4-s6-6-6-6-4- +D|-s7-7-7-7-5-5-5-s7-7-7-7-5-5-s7-7-7-7-4-4-4-s6-6-6-6-4-4-s6-6-6-6-4- +A|-s7-7-7-7-5-5-5-s7-7-7-7-5-5-s7-7-7-7-2-2-2-s4-4-4-4-2-2-s4-4-4-4-2- +E|-s5-5-5-5-3-3-3-s5-5-5-5-3-3-s5-5-5-5------------------------------- + + + +E|-------------------------------------------------------------------- +B|-------------------------------------------------------------------- +G|-4-4-s6-6-6-6-4-4-s6-6-6-6------------------------------------------ +D|-4-4-s6-6-6-6-4-4-s6-6-6-6-2-2-2-s4-4-4-4-2-2-s4-4-4-4-2-2-2-s4-4-4- +A|-2-2-s4-4-4-4-2-2-s4-4-4-4-2-2-2-s4-4-4-4-2-2-s4-4-4-4-2-2-2-s4-4-4- +E|---------------------------0-0-0-s2-2-2-2-0-0-s2-2-2-2-0-0-0-s2-2-2- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|----------------------5-7---------------5-----------------5----- +D|-4-2-2-s4-4-4-4-2-2-7-5-7-----7---7-5-7---7-----7---7-5-7---7-7- +A|-4-2-2-s4-4-4-4-2-2-7-3-5-------------------------------------7- +E|-2-0-0-s2-2-2-2-0-0-5-----5-5---5-----------5-5---5-----------5- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-5-7-7-7---------------5-----------------5--------------------- +D|-5-7-7-7-----7---7-5-7---7-----7---7-5-7---7-2-5-5-5-7-------2- +A|-3-5-5-5-------------------------------------2-5-5-5-7-7------- +E|---------5-5---5-----------5-5---5-----------0-3-3-3-5---0-0--- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|---2-0-2-5-2-----2---2-0-2-5-2-2-5-5-5-7-------2---2-0-2-5-2--- +A|-------------------------------2-5-5-5-7-7--------------------- +E|-0-----------0-0---0-----------0-3-3-3-5---0-0---0-----------0- + + + +E|------------------- +B|-----------------0- +G|------------------- +D|---2---2-0-2-5-2--- +A|------------------- +E|-0---0------------- + diff --git a/guitar/tabs/Rush/cygnus_x-1.prj b/guitar/tabs/Rush/cygnus_x-1.prj new file mode 100644 index 0000000..34bf58b --- /dev/null +++ b/guitar/tabs/Rush/cygnus_x-1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=cygnus_x-1.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4) diff --git a/guitar/tabs/Rush/cygnus_x-1.tab b/guitar/tabs/Rush/cygnus_x-1.tab new file mode 100644 index 0000000..ad01aa4 --- /dev/null +++ b/guitar/tabs/Rush/cygnus_x-1.tab @@ -0,0 +1,145 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----------------------------------------------2-2---2---2---2- +D|---------5---------5-5---------5---------5-5-5-2--------------- +A|---7-5-------7-5---------7-5-------7-5---------0---0---0---0--- +E|-0-----7---0-----7-----0-----7---0-----7----------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---2---2---2---2-5-5---5---5---5---5---5---5---5-5-5-5-5-5-5-5- +D|-----------------5-------------------------------5-5-5-5-5-5-5- +A|-0---0---0---0---3---3---3---3---3---3---3---3---3-3-3-3-3-3-3- +E|--------------------------------------------------------------- + + + +E|-------8--8--8--8--8--8------0-----0-----0---0----------------------- +B|-------8--8--8--8--8--8------0-----0-----0---0-5-5-5-8-8-8-4-4-4-4-3- +G|-5-5-5-9--9--9--9--9--9--7-6-4-5-4-3-7-6-4-5-2-6-6-6-9-9-9-5-5-5-5-4- +D|-5-5-5-10-10-10-10-10-10-7-6-4-5-4-4-7-6-4-5-2-6-6-6-9-9-9-6-6-6-6-5- +A|-3-3-3-10-10-10-10-10-10-5-4-2-3-2-4-5-4-2-3-0-4-4-4-7-7-7-6-6-6-6-5- +E|-------8--8--8--8--8--8------------2-----------------------4-4-4-4-3- + + + +E|-----4-4-4-3-3-3---------------------4-4-4-4-4-3-3-3-3-3------- +B|-4-3-4-4-4-3-3-3-5-5-5-5-5-8-8-8-8-8-4-4-4-4-4-3-3-3-3-3-4-4-4- +G|-5-4-5-5-5-4-4-4-6-6-6-6-6-9-9-9-9-9-5-5-5-5-5-4-4-4-4-4-5-5-5- +D|-6-5-6-6-6-5-5-5-6-6-6-6-6-9-9-9-9-9-6-6-6-6-6-5-5-5-5-5-5-5-5- +A|-6-5-6-6-6-5-5-5-4-4-4-4-4-7-7-7-7-7-6-6-6-6-6-5-5-5-5-5-3-3-3- +E|-4-3-4-4-4-3-3-3---------------------4-4-4-4-4-3-3-3-3-3------- + + + +E|--------------------------------------------------------------- +B|-4-4-4-4-3-2-2-2-2-2-2-2-2-7-7-7-7-7-7-7-6-4-4-4-4-4-4-4-3-2-2- +G|-5-5-5-5-4-3-3-3-3-3-3-3-3-8-8-8-8-8-8-8-7-5-5-5-5-5-5-5-4-3-3- +D|-5-5-5-5-4-4-4-4-4-4-4-4-4-8-8-8-8-8-8-8-7-5-5-5-5-5-5-5-4-4-4- +A|-3-3-3-3-2-4-4-4-4-4-4-4-4-6-6-6-6-6-6-6-5-3-3-3-3-3-3-3-2-4-4- +E|-----------2-2-2-2-2-2-2-2---------------------------------2-2- + + + +E|------------------------------------------------------0-------0--- +B|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2------------------------0-----0---0- +G|-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3--------------------7-6-4---4------- +D|-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4--------------------7-6-4-4--------- +A|-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-----2-3-s5-6-s9-10-5-4-2----------- +E|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-4-------------------------------- + + + +E|-----0-------0------------------------------------------------------- +B|-----0-----0---0---------0-------------------3-3-3-3-3-3-3-3-3-3-3-3- +G|-5-4-3---3-------7-6-4-5-2-9-10-7-12-b14-r12-4-4-4-4-4-4-4-4-4-4-4-4- +D|-5-4-4-4---------7-6-4-5-2-------------------5-5-5-5-5-5-5-5-5-5-5-5- +A|-3-2-4-----------5-4-2-3-0-------------------5-5-5-5-5-5-5-5-5-5-5-5- +E|-----2---------------------------------------3-3-3-3-3-3-3-3-3-3-3-3- + + + +E|---------20-20-20-18-17---------------------------------------------------------------20-18- +B|-3-3-3-3----------------20-18-18-20-18-17--------------------------------------------------- +G|-4-4-4-4----------------------------------12-12-13-13-14-14-15-15-16-16-17-17-b19-r17------- +D|-5-5-5-5------------------------------------------------------------------------------------ +A|-5-5-5-5------------------------------------------------------------------------------------ +E|-3-3-3-3------------------------------------------------------------------------------------ + + + +E|-17----17------------------------------------------------------------10-15-18------------------ +B|----20----20-18-------------------------------------------------------------------------------- +G|----------------------14-------12---------------------------------------------0---------------- +D|----------------12-12----12-10----10-15-p13-p12------------------s17----------0---10---10---10- +A|------------------------------------------------15-p13-p12------------------------------------- +E|-----------------------------------------------------------14-14----------------8----8----8---- + + + +E|----------------------------------------------------------------------------- +B|----------------------------------------------------------------------------- +G|-----------------------------------------------------------------------0-0--- +D|---10---10---10---10---10---10---10---10---10---10---10---10---10---10-0-0--- +A|----------------------------------------------------------------------------- +E|-8----8----8----8----8----8----8----8----8----8----8----8----8----8--------4- + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|-----------------------------------0-0------------------------------------ +D|-6---6---9---9---10---10---10---10-0-0---10---10---10---10---10---10---10- +A|-------------------------------------------------------------------------- +E|---4---7---7---8----8----8----8--------8----8----8----8----8----8----8---- + + + +E|------------------------------------------------------------------------- +B|------------------------------------------------------------------------- +G|--------------------------0-0-------------------------------------0------ +D|---10---10---10---10---10-0-0---6---6---9---9---10---10---10---10-0---10- +A|------------------------------------------------------------------------- +E|-8----8----8----8----8--------4---4---7---7---8----8----8----8------8---- + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|--------------------------------------------------------0----------------- +D|---10---10---10---10---10---10---10---10---10---10---10-0---6---6---9---9- +A|-------------------------------------------------------------------------- +E|-8----8----8----8----8----8----8----8----8----8----8------4---4---7---7--- + + + +E|----------------------------------------------------------------------------- +B|----------------------------------------------------------------------------- +G|---------------------0-0----------------------------------------------------- +D|---10---10---10---10-0-0---10---10---10---10---10---10---10---10---10---10--- +A|----------------------------------------------------------------------------- +E|-8----8----8----8--------8----8----8----8----8----8----8----8----8----8----8- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|---------0--------------------------------------------------------- +D|-10---10-0---10---10---9---9---9---9---8---8---7---7---6---5---4--- +A|------------------------------------------------------------------- +E|----8------8----8----7---7---7---7---6---6---5---5---4---3---2---1- + + + +E|-----------------------------------3-6-0-0- +B|-----------------------------------4-7-0-0- +G|-----------------------------------5-8-0-0- +D|-3---2---------2-----4---------4---5-8-4-2- +A|-----------------------------------3-6-2-2- +E|---0---0-0-0-0---0-2---2-2-2-2---2-----0-0- + diff --git a/guitar/tabs/Rush/different_strings.prj b/guitar/tabs/Rush/different_strings.prj new file mode 100644 index 0000000..997f2d5 --- /dev/null +++ b/guitar/tabs/Rush/different_strings.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=different_strings.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4) diff --git a/guitar/tabs/Rush/different_strings.tab b/guitar/tabs/Rush/different_strings.tab new file mode 100644 index 0000000..e4c47fe --- /dev/null +++ b/guitar/tabs/Rush/different_strings.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-----------------------0---------------0-----1-----1----------- +B|-------0-----------------0-------2-------2-----1-----1---2----- +G|-----0---------------5---------5-----2-----2-----------2-----2- +D|---0-------0---0---7---------7-----0-------------3---------0--- +A|-----------------5---------5-----2-----------3-----------2----- +E|-8-------7---8------------------------------------------------- + + + +E|-0-----1-----1-3-----3-5---------------------0---------3-0----- +B|---2-----1-------3-----5-5-------5-------------1-----4-----3-1- +G|-----2-----2-------4---6-----6-------6-----2------------------- +D|---------------------------7-------7-----2---------2----------- +A|-------3-------5-------7-------7-------0---------0---4--------- +E|--------------------------------------------------------------- + + + +E|-----------------1---4---6---6-2--- +B|---3-1-----1-----------5---5------- +G|-2-----2-----2-------5---7---7----- +D|---------3-----3-------5---5-----0- +A|---4-3-----3-------3-------------1- +E|-------------------4-------------2- + diff --git a/guitar/tabs/Rush/distant_early_warning.prj b/guitar/tabs/Rush/distant_early_warning.prj new file mode 100644 index 0000000..5cb0348 --- /dev/null +++ b/guitar/tabs/Rush/distant_early_warning.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=distant_early_warning.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4) diff --git a/guitar/tabs/Rush/distant_early_warning.tab b/guitar/tabs/Rush/distant_early_warning.tab new file mode 100644 index 0000000..09bc5a4 --- /dev/null +++ b/guitar/tabs/Rush/distant_early_warning.tab @@ -0,0 +1,136 @@ +%TabMaster v2.00r% + + +E|-3-3-10-3---------------3----------------------10---------------3------- +B|-3-3-10-3---------------3----------------------10---------------3---8--- +G|-5-5-12-5---------------5----------------------12---------------5-0-7--- +D|-5-5-12-5---------------5----------------------12---------------5-0-7-7- +A|-0-3-10-0-3-3-3-3-3-3-3-3-10-10-10-10-10-10-10-10-0-0-0-0-0-0-0-0------- +E|------------------------------------------------------------------------ + + + +E|---------------1-1-1-3-1-1-1-3-3---------------------5--------- +B|-7---5---------1-1-1-3-1-1-1-3-3---6-----6-5-6-----6---6------- +G|-7---5-----0-0-2-2-2-4-2-2-2-4-4-0---7-----------7-----7------- +D|-7-7-7-7-7-0-0-3-3-3-5-3-3-3-5-5-0-----7-------7-------------5- +A|---------------3-3-3-5-3-3-3-5-5-------------------------0-0--- +E|---------------1-1-1-3-1-1-1-3-3------------------------------- + + + +E|---------3-------------------------------3----------------------- +B|---------3-------------3-----------------3-3-3-3-3-----3--------- +G|---5-5-5-5-5-5-------5---5---------5-5---5---------5-5---5------- +D|-5-------5-----5-5-5-----------5-5-----5-5----------------------- +A|---------0-----------------3-3-----------------------------10-10- +E|----------------------------------------------------------------- + + + +E|----------------10------------------------------------3---------------3-3-10- +B|----------------10----------10------------------------3-3---------3---3-3-10- +G|-------12-12-12-12-12-12-------12----10---------5-5-5-5---5-5-------5-5-5-12- +D|-12-12----------12-------12-------12--------5-5-------5-------5-5-----5-5-12- +A|----------------10----------------------0-0-----------0---------------0-3-10- +E|----------------------------------------------------------------------------- + + + +E|---------------3-3-3-----------------------3-3--------------------- +B|-------------3-3-----3-3-------------------3---3------------------- +G|---------5-5---5---------5-5---------5-5-5-5-----5-5--------------- +D|-----5-5-------5-----------------5-5-------5---------5-------12-12- +A|-0-0-------------------------3-3-----------3-----------10-10------- +E|------------------------------------------------------------------- + + + +E|----------10------------------------------------3------------------------- +B|----------10-10-10-10-------10------------------3-----3-3---3-------8-8--- +G|-12-12----12----------12-12----12---------5-5---5---------5-------7-----7- +D|-------12-12--------------------------5-5-----5-5-5-5---------9-9--------- +A|----------------------------------0-0-----------0------------------------- +E|-------------------------------------------------------------------------- + + + +E|-----------------------------3-------3----------------------------- +B|-------8-----8-----------3-----5---------------3---3--------------- +G|-7---7-----7---------------5-------5-------5-5---5---5----12------- +D|---9-----9-----9-----5-5---------5-------5-------------12-------12- +A|-----------------0-0-------------------3---------------------10---- +E|------------------------------------------------------------------- + + + +E|------------------------------------------------------3-----3-----3----------- +B|----------------10----------10----10----------------------------3-----------6- +G|-------------12-------12----------------10--------5-----5-----5-----5---5-0-7- +D|----12-12-12-------12----12----12----12----12---5---5-----5-----------5---0-7- +A|-10-------------------------------------------0-----------------------------5- +E|------------------------------------------------------------------------------ + + + +E|---5---5-5-------------------------------1-1-3------------------------ +B|-6---6-----6-5---5---5---5-6---6---6---6-1-1-3------------------------ +G|-----------7-5-5---5---5---7-7---7---7---2-2-4-0-14-12----------14-12- +D|-----------7-5-------------7-------------3-3-5-0-------15-14-12------- +A|-----------5-3-------------5-------------3-3-5------------------------ +E|-----------------------------------------1-1-3------------------------ + + + +E|----------------------------------------13-12-12-12-------------------13-13-13-12------------- +B|----------------------------------------------------15-15-15-13-12----------------15-15-15-13- +G|----------14-12----------14-12-------------------------------------14------------------------- +D|-15-14-12-------15-14-12-------15-14-12------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|-------13-13-13-13-12-12----------------13-13-13-12------------------3-----3-3-----3- +B|-12----------------------15-15-13-12----------------15-15-15-13-12------------------- +G|----14-------------------------------14----------------------------5---5-5-----5-5--- +D|------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|-3-3-3-5-3-------3-------------3-------------------------10---------------- +B|-------------------3---------3---3--------------10-------------10----10---- +G|---------------------5---5-5-------5---------12----12-------------------12- +D|-----------5-5-5-------5-------------5----12----------12----12----12------- +A|-----------3-3-3-----------------------10---------------------------------- +E|--------------------------------------------------------------------------- + + + +E|---------------------------3-----3-3-3-3-3-5-5-5-5-5-5-5-5----------- +B|----12-13-------10-------3---3---3-3-3-3-3-6-6-6-6-6-6-6-6-5-5-5-5-5- +G|-------------12--------5-------5-5-5-5-5-5-7-7-7-7-7-7-7-7-5-5-5-5-5- +D|-12-------12---------5---------------------7-7-7-7-7-7-7-7-5-5-5-5-5- +A|-------------------0-----------------------5-5-5-5-5-5-5-5-3-3-3-3-3- +E|--------------------------------------------------------------------- + + + +E|-------5-5-5-5-5-5-5-5-1-1-1-3-3-3---5-5-5-5-5-5-5-5----------- +B|-5-5-5-6-6-6-6-6-6-6-6-1-1-1-3-3-3---6-6-6-6-6-6-6-6-5-5-5-5-5- +G|-5-5-5-7-7-7-7-7-7-7-7-2-2-2-4-4-4-0-7-7-7-7-7-7-7-7-5-5-5-5-5- +D|-5-5-5-7-7-7-7-7-7-7-7-3-3-3-5-5-5-0-7-7-7-7-7-7-7-7-5-5-5-5-5- +A|-3-3-3-5-5-5-5-5-5-5-5-3-3-3-5-5-5---5-5-5-5-5-5-5-5-3-3-3-3-3- +E|-----------------------1-1-1-3-3-3----------------------------- + + + +E|-------5-5-5-5-5-5-5-5---------------------------5-5- +B|-5-5-5-6-6-6-6-6-6-6-6-10-10-10-10-12-12-12-12---6-6- +G|-5-5-5-7-7-7-7-7-7-7-7-10-10-10-10-12-12-12-12-0-7-7- +D|-5-5-5-7-7-7-7-7-7-7-7-10-10-10-10-12-12-12-12-0-7-7- +A|-3-3-3-5-5-5-5-5-5-5-5-8--8--8--8--10-10-10-10---5-5- +E|----------------------------------------------------- + diff --git a/guitar/tabs/Rush/double_agent.prj b/guitar/tabs/Rush/double_agent.prj new file mode 100644 index 0000000..b7b45c2 --- /dev/null +++ b/guitar/tabs/Rush/double_agent.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=double_agent.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4) diff --git a/guitar/tabs/Rush/double_agent.tab b/guitar/tabs/Rush/double_agent.tab new file mode 100644 index 0000000..84f8005 --- /dev/null +++ b/guitar/tabs/Rush/double_agent.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|-------7-5-10-9-7-5----17-2-2-2-5-5-------7-5-10-9-7-5---4-2-2-2-5- +D|--------------------15----3-3-3-5-5----------------------5-3-3-3-5- +A|-5-3-5--------------------3-3-3-3-3-5-3-5----------------5-3-3-3-3- +E|--------------------------1-1-1------------------------3-3-1-1-1--- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|-5-----------------------------------------------s8-8-8-8-8----- +D|-5-----------------------------------------------s8-8-8-8-8----- +A|-3-----------------------------------------------s7-7-7-7-7----- +E|---0-0-0-0-0-3-5-3-0-0-0-0-0-3-5-3-0-0-0-0-0-3-5-s8-8-8-8-8-3-5- + + + +E|-------------------------------------------------5-------5----- +B|-------------------------------------------------5-------5----- +G|-------------------------------------------------6-6-2-6-6-6-4- +D|-------------1-0---------------------------------7-6-2-4-7-6-4- +A|-0-0---0---------3-------------------------------7-4-0-4-7-4-2- +E|-----3---3-0-------0-0-0-0-0-3-5-3-0-0-0-0-0-3-5-5-------5----- + + + +E|------------------------------------------------------------ +B|------------------------------------------------------------ +G|-5-4-2-7-7-7-7-7-5-9----------------------------------17-14- +D|-5-4-2---------------24-3-3-3-24-3-3-3-17-17-17-15-17------- +A|-3-2-0-5-5-5-5-5-3-7------3-3------3-3---------------------- +E|--------------------------1-1------1-1---------------------- + diff --git a/guitar/tabs/Rush/dreamline.prj b/guitar/tabs/Rush/dreamline.prj new file mode 100644 index 0000000..e0e9c6c --- /dev/null +++ b/guitar/tabs/Rush/dreamline.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=dreamline.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4) diff --git a/guitar/tabs/Rush/dreamline.tab b/guitar/tabs/Rush/dreamline.tab new file mode 100644 index 0000000..5151905 --- /dev/null +++ b/guitar/tabs/Rush/dreamline.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-----5-0-5-7-5-0-----5-0-5-7-5-9-----5-0-5-7-5-0-----5-0-------- +B|-0-7-------------0-7-------------0-7-------------0-7---------10- +G|---------------------------------------------------------7-7---- +D|---------------------------------------------------------------- +A|---------------------------------------------------------------- +E|---------------------------------------------------------------- + + + +E|------------------22-24-24-24-24---22-24-24-24-24-------------------12-14-15-12-14-15-17-14- +B|-8-12-15-17-17-17-15------------------------------17-15-12-15-17-15------------------------- +G|--------------------------------------------------------14---------------------------------- +D|-------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|---------------------------------0---------------------------------------------------------- + + + +E|-15-15-17-17-15-17-19---2-----4-2- +B|--------------------------3------- +G|----------------------7-----2----- +D|----------------------7----------- +A|----------------------5----------- +E|---------------------------------- + diff --git a/guitar/tabs/Rush/entre_nous.prj b/guitar/tabs/Rush/entre_nous.prj new file mode 100644 index 0000000..125ef6f --- /dev/null +++ b/guitar/tabs/Rush/entre_nous.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=entre_nous.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4) diff --git a/guitar/tabs/Rush/entre_nous.tab b/guitar/tabs/Rush/entre_nous.tab new file mode 100644 index 0000000..247c53b --- /dev/null +++ b/guitar/tabs/Rush/entre_nous.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-1---2---------------1-1--- +B|-2---2---------------1-0--- +G|-1---2-1---------------1-1- +D|-2---1-----------------2--- +A|-3---1---s0-0-0-20--------- +E|---1---------------1-3----- + diff --git a/guitar/tabs/Rush/finding_my_way.prj b/guitar/tabs/Rush/finding_my_way.prj new file mode 100644 index 0000000..376d514 --- /dev/null +++ b/guitar/tabs/Rush/finding_my_way.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=finding_my_way.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4) diff --git a/guitar/tabs/Rush/finding_my_way.tab b/guitar/tabs/Rush/finding_my_way.tab new file mode 100644 index 0000000..c834677 --- /dev/null +++ b/guitar/tabs/Rush/finding_my_way.tab @@ -0,0 +1,100 @@ +%TabMaster v2.00r% + + +E|-5---------------------------------------5--------------------- +B|-5---------------------------------------5--------------------- +G|-2---------------------------------------2--------------------- +D|-2-------------4-2---4-2---4-2---4-2-----2-------------4-2---4- +A|-0-0-0-0-0-0-0-----3-----3-----3-----3-0-0-0-0-0-0-0-0-----3--- +E|--------------------------------------------------------------- + + + +E|-------------------5---------------------------------------3--- +B|-------------------5---------------------------------------3-3- +G|-------------------2---------------------------------------0-2- +D|-2---4-2---4-2-----2-------------4-2---4-2---4-2---4-2-----0-0- +A|---3-----3-----3-0-0-0-0-0-0-0-0-----3-----3-----3-----3-0----- +E|--------------------------------------------------------------- + + + +E|-----------3-------------3-------------3-------------3--------- +B|---------3-3-3---------3-3-3---------3-3-3---------3-3-3------- +G|-2-2---2-2-0-2-2-2---2-2-0-2-2-2---2-2-0-2-2-2---2-2-0-2-5-5-3- +D|-2-2---2-0-0-0-2-2---2-0-0-0-2-2---2-0-0-0-2-2---2-0-0-0-5-5-3- +A|-0-0---0-------0-0---0-------0-0---0-------0-0---0-------3-3-1- +E|-----3-------------3-------------3-------------3--------------- + + + +E|---------------------------------3-------------3--------------- +B|-------------------------------3-3-3---------3-3-3------------- +G|-5-5-----5-5-3-5-5-----2-2---2-2-0-2-2-2---2-2-0-2------------- +D|-5-5-3-5-5-5-3-5-5-3-5-2-2---2-0-0-0-2-2---2-0-0-0-3-------5--- +A|-3-3-3-5-3-3-1-3-3-3-5-0-0---0-------0-0---0-------3---3---5--- +E|-----1-3-----------1-3-----3-------------3---------1-1-1-1-3-2- + + + +E|-----------------------------------15-15-------5---------------------------------- +B|-----------------------13-15-13-15-------17-15---15-17----15-13----------13-15-17- +G|---------------7-7-----14------------------------------14-------14-13-14---------- +D|-----7-7-------7-7-5-7------------------------------------------------------------ +A|-----7-7-4-5-7-5-5-5-7------------------------------------------------------------ +E|-3-4-5-5-----------3-5------------------------------------------------------------ + + + +E|-------------------------------------------------------------------- +B|-19----17---15---5-8---5-5-8---5------------------------------------ +G|----17----4----7-----7-------------5-7-10---7-5---5-5-5-7-5-5-7-7-5- +D|-----------------------------7---5--------7-----5-7---7-------7---7- +A|-------------------------------------------------------------------- +E|-------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---5-----------------------------------------5---8-----5------- +D|-6-5---------------------------------5---7-5-------5-7-----5--- +A|-----7-6-5-3-5-5---------3-5-3---3-5---7-------7---------5---7- +E|-----------------3-5-3-5-------5------------------------------- + + + +E|-------------------------------------------------5-8-5---5----- +B|-------5---8---5-------5-8-5---5-8-5---5-8-5-5-8-------7---8-7- +G|-----5---5---7-----7-5---5-5-7-------7-------7----------------- +D|-7-7-------------7--------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---------------------------------------------------------------- +B|-5-5-----5----------------------------5-7-8-----------5-7-8----- +G|-----7-------7---5---5-7-5-7---11-----5-7-8-5-7-5-----5-7-8-5-7- +D|-------7---7---5---7---------7----5-7-------------5-7----------- +A|---------------------------------------------------------------- +E|---------------------------------------------------------------- + + + +E|---------------------------------------------3-------------3--- +B|-----------------------5-7-8-5-7-5---------3-3-3---------3-3-3- +G|-5-----5-7-8-5-7-5-----5-7-8-5-7-5-2-2---2-2-0-2-2-2---2-2-0-2- +D|---5-7-------------5-7-------------2-2---2-0-0-0-2-2---2-0-0-0- +A|-----------------------------------0-0---0-------0-0---0------- +E|---------------------------------------3-------------3--------- + + + +E|-----------3----------- +B|---------3-3-3--------- +G|-2-2---2-2-0-2-2-2---2- +D|-2-2---2-0-0-0-2-2---2- +A|-0-0---0-------0-0---0- +E|-----3-------------3--- + diff --git a/guitar/tabs/Rush/fly_by_night.prj b/guitar/tabs/Rush/fly_by_night.prj new file mode 100644 index 0000000..dedcef5 --- /dev/null +++ b/guitar/tabs/Rush/fly_by_night.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=fly_by_night.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4) diff --git a/guitar/tabs/Rush/fly_by_night.tab b/guitar/tabs/Rush/fly_by_night.tab new file mode 100644 index 0000000..6ab318c --- /dev/null +++ b/guitar/tabs/Rush/fly_by_night.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|-2-2-3-3---------3-----3-------3-------3-2-2---------7-7-3-2-2- +B|-3-3-3-3---------3-----3-------3-2-0-2-3-3-3---------8-8-3-3-3- +G|-2-2-0-0---------0-----0-------0-2-0-2-0-2-2---------7-7-0-2-2- +D|-0-0-2-2-------2-----0-------0---2-0-2-0-0-0---------------0-0- +A|---------0-2-3-----2-----0-1-----0-0-0-2-----3-2-0------------- +E|---------------------------------------3-----------3----------- + + + +E|-2---------2-----2-----5-----5-----7-8-10----------------10-0-----0--- +B|-3-2-2-0-2---3-----3-----6-----6---8-8-10-10----10----10------1-----1- +G|-2-2-2-0-2-----2-----2-----5-----5-7-9-11----11----11-----------2----- +D|-0-2-2-0-2------------------------------------------------------------ +A|---0-0-0-0------------------------------------------------------------ +E|---------------------------------------------------------------------- + + + +E|---0-----0-----7-7-7-7-7-7----------------------------------------- +B|-----1-----1---8-8-8-8-8-8-6-b7-6-b7-6-p5---5-5-3-5-p3------------- +G|-2-----2-----2-7-7-7-7-7-7----------------7------------6-5-4-0-3--- +D|-----------------------------------------------------------------2- +A|------------------------------------------------------------------- +E|------------------------------------------------------------------- + + + +E|--------------------------------------------7-p6-p5-7-p5-7-h8-h9-13-b14-13-p11-p10-11-p10- +B|------------------------5-6-b7-6-b7-5-h6-h8----------------------------------------------- +G|----------------4-h5-h7------------------------------------------------------------------- +D|-h3-p2-h3-p2-h3--------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|-p8-5---5------------------------------------------------------ +B|------8---8-s11------3-3-3-3-3-3------3-3-5-p3-s2----------5-7- +G|----------------2-h4-------------2-h4-------------4-2-4-h6----- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/freewill.prj b/guitar/tabs/Rush/freewill.prj new file mode 100644 index 0000000..7a8dd56 --- /dev/null +++ b/guitar/tabs/Rush/freewill.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=freewill.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4) diff --git a/guitar/tabs/Rush/freewill.tab b/guitar/tabs/Rush/freewill.tab new file mode 100644 index 0000000..4f19b81 --- /dev/null +++ b/guitar/tabs/Rush/freewill.tab @@ -0,0 +1,145 @@ +%TabMaster v2.00r% + + +E|---------------------------------------------------------------- +B|-6-5-3-----------------------------------------------------1-s3- +G|-------5-4-2-----5-4-2-----------------------------------0-2-s4- +D|-------------5-3-------5-3-2-----------------------2-0---------- +A|-----------------------------5-3-----3-2-0-------3-----2-3------ +E|---------------------------------1-1-------3-1-1---------------- + + + +E|-3-3-8-8-7-5---3-3-5-5-5---8----------------------------------0- +B|-3-3-8-8-8-6-1-3-3-6-6---6-8-10--------------------------------- +G|-4-4-9-9-7-5-2-4-4-5-5---5-9-7------------------------------2--- +D|-----------------------------0--------------------2-0---0-2-0--- +A|------------------------------------3-2-0-------3-----3-----2--- +E|--------------------------------1-1-------3-1-1----------------- + + + +E|------------------3---------0-------2-2-3-2--------------------- +B|-3------------------6---------3-----3-3-3-3-3------------------- +G|---2-----2-s5---5-----5---------2---2-2-2-2-2-----7-----------4- +D|-------0------3-3-----------------0-0-0-0-0-----7-------2---4--- +A|-----1--------3---------3-0---2-------1-------5-----4-0---2----- +E|---------------------------------------------------------------- + + + +E|-------5------------------------------------------------------- +B|-------2-2-5-2---------------------3-3-2----------------------- +G|---4-2-2-2-2-2-----7-------4-----2-0-2-2-----7-----------4-4-2- +D|---2-0-2-2-2-2---7-------4-----2---0-0-2---7-------2---4---2-0- +A|-0-2-0-0-0-0-0-5-----4-2-----0---------0-5-----4-0---2-----2-0- +E|---0-2-----------------------------3-2---------------------0-2- + + + +E|-------------------------------3---2--------------------------- +B|-5-5-5-5-5---------------------3-2-3--------------------------- +G|-2-2-2-2-2-----7-------4-----2-0-2-2-------------------------3- +D|-2-2-2-2-2---7-------4-----2---0-2-0-----7-5-4-----5-3-2------- +A|-0-0-0-0-0-5-----4-2-----0-------0---5-5-------3-3-------5-5--- +E|-------------------------------3------------------------------- + + + +E|-------------------------------------------------------------------------- +B|---------3---------------------------15-----------------------------10-12- +G|-----------5-3-10-9-7-------------12----0-0-0-12-0-0-0-12-0----0-13------- +D|-5-3-5-5--------------10-9-7--------------------------------12------------ +A|-----------------------------10-8----------------------------------------- +E|-------------------------------------------------------------------------- + + + +E|-------0---------------------------------------------------5-13-15-13-12-13-15---13------- +B|-13-10------10-12---13-15-13-15-13-15-15-13-15-15-17-15-13---------------------3----12-13- +G|---------12-------0----------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|--------------------------16-15----13-13-17-15---13----13----13-------15-13-17-17-15-13---- +B|-12-----------------------------15-------------6----18----13----13-15-------------------17- +G|----12-13-12-14-12-13-0-4------------------------------------------------------------------ +D|------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + + + +E|-------------------13----17-15-------------10-13-10----10------------------------------ +B|-17-13-15-18-18-12----15-------12-17-10-13----------13----10-10----12------------------ +G|----------------------------------------------------------------12----0-9-s7-5---2-0-0- +D|------------------------------------------------------------------------7-s5-2-0---4--- +A|--------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----5-----2-0---0-2-0-4-2-2-0-0-4-2-0-2-4-5-7-7-5-7-7-9-9---9- +D|-0-2-2-0-2-3---3-------------------------------------------9--- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------13----13-14-10----12-------------------------------- +B|-----------------------------10-12-10----12----------13----13---13-------8-------13----13- +G|-7-9-10-10-9-10-s12-10-10-12----------------------------------5-s7-7-s12---12-12----12---- +D|--------------------------------------------------------------7-s9-9-s14---14-14----14---- +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|------------10-13-10-10------10-13-10--------10-13----10-13-15-13-------------------- +B|-0-8-8-s6-6-------------3-10----------3-10---------12-----------------8-----13-13-13- +G|---7-7-s5-5--------------------------------0----------------------5-7-7-s12-12-12-12- +D|-----8-s7-7-------------------------------------------------------7-9-9-s14-14-14-14- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|------------0-20-20-22-20-22-17-17-20-20-21-20---------------------------------------- +B|-0-12-s10-0-----------------------------------------8-----13-13-13-0-12---0-----13-15- +G|---12-s10--------------------------------------5-s7-7-s12-12-12-12---12-0---0-0------- +D|-----------------------------------------------7-s9-9-s14-14-14-14-------------------- +A|-------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------- + + + +E|-------------------10------------------------------------------------12---13-10----------10- +B|-13-15-13-10-13-14----12-10-12------10--------------3-13----13----10-12---------13-10------- +G|-------------------------------5-s7----s12-12-12-12------12-------10----0-------------13---- +D|-------------------------------7-s9----s14-14-14-14------------10--------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|----10-------------------------------------------------------------------- +B|-13----13-10-------------------------------------------------------------- +G|-------------10-12-10-9-7-9-6-6-7-4-5-4-s2-0-10-9--7---------------------- +D|------------------------------------------------10---9-7--------7-5-4----- +A|---------------------------------------------------------10-5-5-------3-3- +E|-------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|---------------------3--------------------------------------------- +G|-----------3-----------5-3-10-9-7---------------------------------- +D|-5-3-2-------5-3-5-5--------------10-9-7------10-9-7--------------- +A|-------5-5-------------------------------10-8--------10-8-7-------- +E|------------------------------------------------------------10-8-3- + diff --git a/guitar/tabs/Rush/ghost_of_a_chance.prj b/guitar/tabs/Rush/ghost_of_a_chance.prj new file mode 100644 index 0000000..af1606b --- /dev/null +++ b/guitar/tabs/Rush/ghost_of_a_chance.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=ghost_of_a_chance.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4) diff --git a/guitar/tabs/Rush/ghost_of_a_chance.tab b/guitar/tabs/Rush/ghost_of_a_chance.tab new file mode 100644 index 0000000..ad3f3ad --- /dev/null +++ b/guitar/tabs/Rush/ghost_of_a_chance.tab @@ -0,0 +1,100 @@ +%TabMaster v2.00r% + + +E|-------------------------------------------------------0------- +B|---------------------------------0-------0-----0---------0----- +G|-4-4-4-4-4-4-4-4---4---4-4-4---4---4---4-------------4-------4- +D|-0-2-0-2-3-2-0-2-0---4---0-3-2-------0-------4---4-4-------2--- +A|-----------------0-2-----------------------2------------------- +E|--------------------------------------------------------------- + + + +E|-----------------------0-----------------------------0---9------- +B|-0-------0-----0---------0-----0-------0-----0---------0-10-2-10- +G|---4---4-------------4-------4---4---4---------4---------11-2-11- +D|-----0-------4---4---------2-------0-------4-------4-----12-4-12- +A|-----------2-------2---------------------2-------2--------------- +E|----------------------------------------------------------------- + + + +E|-----------2-2----------------------------------7--------------------------- +B|-10-10-9-9-2-2-------------10----10----0----9-----9-2-2----10-s9--s11-2-2-5- +G|-11-11-9-9-3-3-----2-2-5------11----11---11---9-----3-3-11-11-s10-s11-3----- +D|-12-12-9-9-----2-4-------4--------------------------4-4-12-12-s11-s12-4----- +A|---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|--------9------9---7-------------------------------------------------2- +B|---2------9-10-9---------10-10-9------------9--------2-------2-----4--- +G|-2-4-s6----------9---9---------11-9----9-11---11---4---4---4-----4----- +D|-----------------------4------------11-----------4-------2------------- +A|-----------------------4---------------------------------------4------- +E|----------------------------------------------------------------------- + + + +E|-------2----------------9-------7-7-7---2--------------------7--------- +B|-4---4-------4-4-4-4-10---10-10-7-7---2-2-5-5-4-2-10-10-10-9-7--------- +G|---2-------2---0-3-0------------9-9---3---6-6-4-2------------9--------- +D|---------4-----------------------------------------------------------9- +A|---------------------------------------------------------------9-s11--- +E|----------------------------------------------------------------------- + + + +E|---------------------------7-------2----------------------7---2---2----------- +B|----------------------10-9---7-----2-------10-10-9----7---------2-2-9-10-9-12- +G|----------9-11-s13-11------9-------3-4-------------11-9-9---9----------------- +D|-11-9-s11----------------------s11-----4-2------------------------------------ +A|------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------ + + + +E|--------------------------------4----14---14----17-17-14----4----14-------4-14------------- +B|-10-12-s14-12-14-s17-------4-18---17----9----18----------17---17----17-14------17----14---- +G|---------------------14-16--------------------------------------------------------16----16- +D|------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------ +B|-14----17-14-17-14-------17---------------14----------------4-12-14------------------14--- +G|----18-------------16-14-------------3-14----16-16-14-13-14------------13-13-11---16----8- +D|----------------------------16-14-16--------------------------------11----------4--------- +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|--------------------14-17-16-12-14-------------------14----17-14-16-17-16-17-19-16-19-19-21- +B|-17--------14-15-17----------------4------------4-16----17---------------------------------- +G|----16-s18---------------------------------4-16--------------------------------------------- +D|-------------------------------------14-16-------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-19-21-19-16-17-19-19-21-19-21-19---------------------------------------4-------14------------- +B|--------------------------------------------------------------------------17-19----17-14-12-14- +G|----------------------------------11-s13-9----13-s14-13-13-11-s13-14-16------------------------ +D|-------------------------------------------11-------------------------------------------------- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|-17-14-14-14-12-14-12-14-16-12-14-14-15-14---12-12-14-15-14-14- +B|-------------------------------------------4------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/hemispheres.prj b/guitar/tabs/Rush/hemispheres.prj new file mode 100644 index 0000000..9a0ec87 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=hemispheres.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4) diff --git a/guitar/tabs/Rush/hemispheres.tab b/guitar/tabs/Rush/hemispheres.tab new file mode 100644 index 0000000..9f50c37 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres.tab @@ -0,0 +1,145 @@ +%TabMaster v2.00r% + + +E|-0-0-0-------0-3---3---3-----------------------------------0--- +B|-0-0-0-------0-3---3---3-------------------------------------0- +G|-3-3-3-0-0-0-2-5---0-2-0--------------------------------------- +D|-4-4-4-----0-2-5-3-0-2-0---------------0-------0--------------- +A|-4-4-4-------0-3-3-2-0-2-2-----5-2-------0-1-----0-1----------- +E|-2-2-2-------0-3-1-3---3---2-3-----2-3-------1-------1-2-2----- + + + +E|-------0---------0---------0----------------------------------- +B|---------4---------2---------7--------------------------------- +G|-3---------4---------4---------7---------------------4-2-0----- +D|-----------------------------------------7-5-4-------------4-2- +A|---2-2-------0-0-------5-5-------5-5-5-5-------7-5-4----------- +E|--------------------------------------------------------------- + + + +E|---3-3-3-3---2-------------------------------------------------- +B|---3-3-3-3---2--------------------------------------------2----- +G|---4-4-4-4---2--------0-----------2-----------0-------------2--- +D|-0-5-5-5-5-4-s2-----4---4-------2---2-------4---4-------2-----2- +A|---5-5-5-5---4----5-------5---4-------4---5-------5---4--------- +E|---3-3-3-3---2--3-----------2-----------3-----------2----------- + + + +E|----------------------------------------------------------------- +B|-------------------------0------------------------12------------- +G|-------------0---------0----------------------------------------- +D|-----------2---2-----2---------------12-------------------------- +A|---0-----3---------3-------5-------5------5---5------5---5---4--- +E|-3---3-1---------1-----------4-7-5------4---7---4------4---7---4- + + + +E|------------------------------------------------------------------ +B|------------------9-10-10-9-7-8-8-7-8-7--------------------------- +G|---2-4-2----------9-------9-7---7---7-7-------------2-2-4-2-2----- +D|---2-4-2----------9-11-11-9-7-9-9-7-9-7-------7-6---2-2-4-2-4-7-6- +A|-5-0-2-4-h5-4-2-----------------------------------7-4-0-2-4-5----- +E|----------------0-----------------------4-5-7--------------------- + + + +E|---------0-------------------------------------------------3-2- +B|-------9-0-----------------------3-------------------------3-3- +G|-------9-3-7-6-4-2-4-2---------2-------0-----1-------------0-4- +D|-------9-4-7-7-4-2-4-2-------0-------4-----2-----2---------0-4- +A|-7-----7-4-5-4-2-0-2-4-5-4---------0-----2-----------4-----2-2- +E|---0-0---2-----------------0-------------------4---0---0-2-3--- + + + +E|-----0-------0---3-1-3---3-----0---------0---------0---------0- +B|---0---0---0---0-3-1-3---3-------0---------4---------2--------- +G|-2-------2-------5-2-0-2-0---------3---------4---------4------- +D|-3-------2-------5-3-0-2-0------------------------------------- +A|-3-------0-------3-3-2-0-2-----------2-2-------0-0-------3-3--- +E|-1---------------3-1-3---3-2-2--------------------------------- + + + +E|-----3-2---------------------6-5------------------------------- +B|-0---3-2---------------------6-5------------------------------- +G|---0-4-2-------0---------2---7-5-------0-----------5---4-6-4--- +D|-----5-2-----4---4-----2---2-8-5-----7---7-------5---5-4-6-4--- +A|-----5-4---5---------4-------8-7---8-------8---7-------2-4-6-7- +E|-----3-2-3---------2---------6-5-6-----------5----------------- + + + +E|-----------------------2----------------------------------------------------- +B|-----5-5-5-5-5-----------5-2---17-17-15-14-15-14----14----------------------- +G|-----4-4-4-4-4-4-4-3-----------------------------16----15-15-16-18---18---18- +D|---------------------4-------4----------------------------------3--2-3--2-3-- +A|-6-4------------------------------------------------------------------------- +E|----------------------------------------------------------------------------- + + + +E|--------------------17-------------------------------------------------------------------------- +B|-----------------------14-15-17-17-17-15-h17-p15-14-h15-p14-14-15-17-17-17-17-17-15-17-15-14-15- +G|---15-16-15-16-15-9----------------------------------------------------------------------------- +D|-2---------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------ + + + +E|------------------------------------------------------------------ +B|-14---------7-----------------------------------------------4----- +G|----16-6------6-6-4-6-4-3-4-3-1-3-1-------3-4---3-4-6-3-4-6---4-6- +D|---------h0-------------------------4-4-6-----6------------------- +A|------------------------------------------------------------------ +E|------------------------------------------------------------------ + + + +E|-------------0-3---3---3--------------------------------------- +B|-4-5---4-5-5-0-3---3---3--------------------------------------- +G|-----6-------2-5---0-2-0-----4-----------------7-----4--------- +D|-------------2-5-3-0-2-0---4-------4-----5---7-----4-------4--- +A|-------------0-3-3-2-0-2-2-------4-----5---5-----2-------4----- +E|---------------3-1-3---3-------2-----3-----------------2-----3- + + + +E|--------------------------------------------------------------- +B|---------------3-----------------6----------------------------- +G|---------7---2-------2-----3---5---4-2-0-----------0-2-0---4-2- +D|---5---7---0-------2-----3---3-----------4-2-0-2-4-------4----- +A|-5---5-----------0-----1--------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-0------------------------------------------------------------- +D|---4-2-0-2-4-2-0-------------------3-2-0-------------------3-2- +A|---------------------0---1-0-3-1-0-----------0---1-0-3-1-0----- +E|-----------------1-3---3-----------------1-3---3--------------- + + + +E|---------------------3-6-0--------------------------------------- +B|---------------------4-7-0--------------------------------------- +G|-----------------7---5-8-0-----11---6-7-6-7-9-7-6-7-6------------ +D|-------------4-5-5-8-5-8-4---2----9-------------------9-7-------- +A|-----2-3-5-6-------6-3-6-2--------------------------------9-9-10- +E|-3-4---------------------0-0------------------------------------- + + + +E|--------------------------------------------------- +B|------------15-15---15-15-14------------------1--4- +G|-------9-11----1--2----------16-14-14-h16-p14-12--- +D|-----9---9----------------------------------------- +A|-9-7----------------------------------------------- +E|--------------------------------------------------- + diff --git a/guitar/tabs/Rush/hemispheres_apollo.prj b/guitar/tabs/Rush/hemispheres_apollo.prj new file mode 100644 index 0000000..589e7a8 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_apollo.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=hemispheres_apollo.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4) diff --git a/guitar/tabs/Rush/hemispheres_apollo.tab b/guitar/tabs/Rush/hemispheres_apollo.tab new file mode 100644 index 0000000..4f19b81 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_apollo.tab @@ -0,0 +1,145 @@ +%TabMaster v2.00r% + + +E|---------------------------------------------------------------- +B|-6-5-3-----------------------------------------------------1-s3- +G|-------5-4-2-----5-4-2-----------------------------------0-2-s4- +D|-------------5-3-------5-3-2-----------------------2-0---------- +A|-----------------------------5-3-----3-2-0-------3-----2-3------ +E|---------------------------------1-1-------3-1-1---------------- + + + +E|-3-3-8-8-7-5---3-3-5-5-5---8----------------------------------0- +B|-3-3-8-8-8-6-1-3-3-6-6---6-8-10--------------------------------- +G|-4-4-9-9-7-5-2-4-4-5-5---5-9-7------------------------------2--- +D|-----------------------------0--------------------2-0---0-2-0--- +A|------------------------------------3-2-0-------3-----3-----2--- +E|--------------------------------1-1-------3-1-1----------------- + + + +E|------------------3---------0-------2-2-3-2--------------------- +B|-3------------------6---------3-----3-3-3-3-3------------------- +G|---2-----2-s5---5-----5---------2---2-2-2-2-2-----7-----------4- +D|-------0------3-3-----------------0-0-0-0-0-----7-------2---4--- +A|-----1--------3---------3-0---2-------1-------5-----4-0---2----- +E|---------------------------------------------------------------- + + + +E|-------5------------------------------------------------------- +B|-------2-2-5-2---------------------3-3-2----------------------- +G|---4-2-2-2-2-2-----7-------4-----2-0-2-2-----7-----------4-4-2- +D|---2-0-2-2-2-2---7-------4-----2---0-0-2---7-------2---4---2-0- +A|-0-2-0-0-0-0-0-5-----4-2-----0---------0-5-----4-0---2-----2-0- +E|---0-2-----------------------------3-2---------------------0-2- + + + +E|-------------------------------3---2--------------------------- +B|-5-5-5-5-5---------------------3-2-3--------------------------- +G|-2-2-2-2-2-----7-------4-----2-0-2-2-------------------------3- +D|-2-2-2-2-2---7-------4-----2---0-2-0-----7-5-4-----5-3-2------- +A|-0-0-0-0-0-5-----4-2-----0-------0---5-5-------3-3-------5-5--- +E|-------------------------------3------------------------------- + + + +E|-------------------------------------------------------------------------- +B|---------3---------------------------15-----------------------------10-12- +G|-----------5-3-10-9-7-------------12----0-0-0-12-0-0-0-12-0----0-13------- +D|-5-3-5-5--------------10-9-7--------------------------------12------------ +A|-----------------------------10-8----------------------------------------- +E|-------------------------------------------------------------------------- + + + +E|-------0---------------------------------------------------5-13-15-13-12-13-15---13------- +B|-13-10------10-12---13-15-13-15-13-15-15-13-15-15-17-15-13---------------------3----12-13- +G|---------12-------0----------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|--------------------------16-15----13-13-17-15---13----13----13-------15-13-17-17-15-13---- +B|-12-----------------------------15-------------6----18----13----13-15-------------------17- +G|----12-13-12-14-12-13-0-4------------------------------------------------------------------ +D|------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + + + +E|-------------------13----17-15-------------10-13-10----10------------------------------ +B|-17-13-15-18-18-12----15-------12-17-10-13----------13----10-10----12------------------ +G|----------------------------------------------------------------12----0-9-s7-5---2-0-0- +D|------------------------------------------------------------------------7-s5-2-0---4--- +A|--------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----5-----2-0---0-2-0-4-2-2-0-0-4-2-0-2-4-5-7-7-5-7-7-9-9---9- +D|-0-2-2-0-2-3---3-------------------------------------------9--- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------13----13-14-10----12-------------------------------- +B|-----------------------------10-12-10----12----------13----13---13-------8-------13----13- +G|-7-9-10-10-9-10-s12-10-10-12----------------------------------5-s7-7-s12---12-12----12---- +D|--------------------------------------------------------------7-s9-9-s14---14-14----14---- +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|------------10-13-10-10------10-13-10--------10-13----10-13-15-13-------------------- +B|-0-8-8-s6-6-------------3-10----------3-10---------12-----------------8-----13-13-13- +G|---7-7-s5-5--------------------------------0----------------------5-7-7-s12-12-12-12- +D|-----8-s7-7-------------------------------------------------------7-9-9-s14-14-14-14- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|------------0-20-20-22-20-22-17-17-20-20-21-20---------------------------------------- +B|-0-12-s10-0-----------------------------------------8-----13-13-13-0-12---0-----13-15- +G|---12-s10--------------------------------------5-s7-7-s12-12-12-12---12-0---0-0------- +D|-----------------------------------------------7-s9-9-s14-14-14-14-------------------- +A|-------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------- + + + +E|-------------------10------------------------------------------------12---13-10----------10- +B|-13-15-13-10-13-14----12-10-12------10--------------3-13----13----10-12---------13-10------- +G|-------------------------------5-s7----s12-12-12-12------12-------10----0-------------13---- +D|-------------------------------7-s9----s14-14-14-14------------10--------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|----10-------------------------------------------------------------------- +B|-13----13-10-------------------------------------------------------------- +G|-------------10-12-10-9-7-9-6-6-7-4-5-4-s2-0-10-9--7---------------------- +D|------------------------------------------------10---9-7--------7-5-4----- +A|---------------------------------------------------------10-5-5-------3-3- +E|-------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|---------------------3--------------------------------------------- +G|-----------3-----------5-3-10-9-7---------------------------------- +D|-5-3-2-------5-3-5-5--------------10-9-7------10-9-7--------------- +A|-------5-5-------------------------------10-8--------10-8-7-------- +E|------------------------------------------------------------10-8-3- + diff --git a/guitar/tabs/Rush/hemispheres_armageddon.prj b/guitar/tabs/Rush/hemispheres_armageddon.prj new file mode 100644 index 0000000..7bf0a59 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_armageddon.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=hemispheres_armageddon.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4) diff --git a/guitar/tabs/Rush/hemispheres_armageddon.tab b/guitar/tabs/Rush/hemispheres_armageddon.tab new file mode 100644 index 0000000..db5acb6 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_armageddon.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-4-4-------7-4-4---------0-7-7---------0-4-4-------7-4-4------- +D|-4---4-4-5-7-4---4-4-4-5-0-7---7-7-8---0-4---4-4-5-7-4---4-4-5- +A|-------------------------------------8------------------------- +E|--------------------------------------------------------------- + + + +E|-------------------------------0-0---0-0-----------------0----- +B|-------------------------------0---0-0---0---1-1-1-----------0- +G|-7-4-4---------0-7-7---------0-6-----0-----2-0-2-0-0-------3--- +D|-7-4---4-4-4-5-0-7---7-7-8---0-7-----2-----3-2-2-2-0----------- +A|---------------------------8---7-----3-----3-3-0-3---4-4------- +E|-------------------------------5-----------1-3-1-3---2-2------- + + + +E|---------0-------------0-------------0-------------0----------- +B|-------------0-------------0-------------0-------------0------- +G|-0-0-------3---0-0-------8---0-0-------8---0-0-------6---0-0--- +D|-0-0-----------0-0-----------0-0-----------0-0-----------0-0--- +A|-----4-4-----------9-9-----------9-9-----------7-7-----------7- +E|-----2-2-----------7-7-----------7-7-----------5-5-----------5- + + + +E|---0-------------0-------------0------------------------------- +B|-------0-----------0-------------0----------------------------- +G|-----6---0-0-----------0-0-----------0-4-2-0-----------0-2-0--- +D|---------0-0-7-7-----7-0-0-7-7-----7-0-------4-2-0-2-4-------4- +A|-7-----------5-5-----------5-5--------------------------------- +E|-5------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-4-2-0--------------------------------------------------------- +D|-------4-2-0-2-4-2-0-------------------3-2-0------------------- +A|-------------------------0---1-0-3-1-0-----------0---1-0-3-1-0- +E|---------------------1-3---3-----------------1-3---3----------- + + + +E|-----------0-----------0--------------------------3-3- +B|---------------0-----------0-0--------------------4-4- +G|-----0-------8---0-------8------------------------3-5- +D|-3-2-0-----------0--------------------------------5-5- +A|-------9-9---------9-9-------------2-3-5-6-9-10-5---3- +E|-------7-7---------7-7---------3-4-------------------- + diff --git a/guitar/tabs/Rush/hemispheres_cygnus.prj b/guitar/tabs/Rush/hemispheres_cygnus.prj new file mode 100644 index 0000000..1d927a6 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_cygnus.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=hemispheres_cygnus.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4) diff --git a/guitar/tabs/Rush/hemispheres_cygnus.tab b/guitar/tabs/Rush/hemispheres_cygnus.tab new file mode 100644 index 0000000..8c3878b --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_cygnus.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|-6-0-0-----------------------4---------0----------------------- +B|-7-0-0---------------------5---5-------0-2-----------------3-2- +G|-8-0-0-0-----------------4---1---4---0-1-2-3-3-3-3-3-3-3-3-2-0- +D|-8-4-2-0-------7---2-------2---------0-2-2-4-4-4-4-4-4-4-4-0-2- +A|-6-2-2---4-5-7---0---4-5-2-------------2-0-4-4-4-4-4-4-4-4----- +E|---0-0-------------------------4---0---0---2-2-2-2-2-2-2-2----- + + + +E|---------------0------------------------------------------------ +B|-3-------------0-2-----------------3-2-3-----2-2---------------- +G|-4-2-2-2-2-----1-2-3-3-3-3-3-3-3-3-2-0-4-2-2-2-2-----11---6-7-6- +D|-4-2-2-2-2-----2-2-4-4-4-4-4-4-4-4-0-2-4-2-2-2-2---2----9------- +A|-2-4-4-0-0-----2-0-4-4-4-4-4-4-4-4-----2-4-4-0-0---------------- +E|-----------0-0-0---2-2-2-2-2-2-2-2---------------0-------------- + + + +E|---------------------------------------------------------------------------------------- +B|----------------------------------------------15-b17-15-15-15-14------------------------ +G|-7-9-7-6-h7-p6-----------------------------11--------------------16-14-14-h16-p14-12---- +D|---------------9-7--------------9-p7-9-b11-------------------------------------------14- +A|-------------------9-9-h10-p9-7--------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|-3---1---0-0-0---0-0-0---1-0-0-3-1-1-0-3---0-0---0-0---0-0---0- +B|-3-4-1---0-0-0---0-0-0---1-1-1-3-3-1-1-3---0---0-0---0-0---0-0- +G|-4-4-2-0-3-3-3-0-6-6-6-0-2-0-0-0-3-2-0-0-0-6-----6-----0-----0- +D|-5-4-3-0-4-4-4-0-7-7-7-0-3-2-2-0-3-3-2-0-0-7-----7-----2-----2- +A|-5-2-3---4-4-4---7-7-7---3-3-3-2-1-3-3-2---7-----7-----3-----3- +E|-3---1---2-2-2---5-5-5---1-0---3---1---3---5-----5------------- + + + +E|-0----------------- +B|---0---1-1-1-1-1-2- +G|-----2-0-2-0-0-0-2- +D|-----3-2-2-2-2-2-2- +A|-----3-3-0-3-3-3-0- +E|-----1-3-1-3-3-3--- + diff --git a/guitar/tabs/Rush/hemispheres_dionysus.prj b/guitar/tabs/Rush/hemispheres_dionysus.prj new file mode 100644 index 0000000..c951cd3 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_dionysus.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=hemispheres_dionysus.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4) diff --git a/guitar/tabs/Rush/hemispheres_dionysus.tab b/guitar/tabs/Rush/hemispheres_dionysus.tab new file mode 100644 index 0000000..1f5b9b4 --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_dionysus.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|-0-0-0---0-0-0---0-0-0---0-0-0-0-0-0--------------------------- +G|-0-0-0---4-4-4---0-0-0---4-0-0-0-0-4-------0---------2--------- +D|-4-4-4---2-2-2---4-4-4---2-4-4-4-4-2-----4---4-----2---2-----4- +A|-2-2-2---4-4-4---2-2-2---4-2-2-2-2-4---2---------4---------2--- +E|-3-3-3-2-2-2-2-3-3-3-3-2-2-3-3-3-3-2-3---------2---------3----- + + + +E|--------------------------------------------------------------- +B|-----------2---------------------------------------2----------- +G|-0-----------0-------0---------2---------0-----------7-7-7---7- +D|---4-----2---------4---4-----2---2-----4---4-----2---7-7-7---5- +A|-------4---------2---------4---------2---------4-----5-5-5---7- +E|-----2---------3---------2---------3---------2-------6-6-6-5-5- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-7-7---7-7-7---7-7-7-7-7-7-------0---------5---------0--------- +D|-5-5---7-7-7---5-7-7-7-7-5-----7---7-----5---5-----7---7-----5- +A|-7-7---5-5-5---7-5-5-5-5-7---5---------7---------5---------7--- +E|-5-5-6-6-6-6-5-5-6-6-6-6-5-6---------5---------6---------5----- + + + +E|--------------------------------------------------------------- +B|-5---------------------------------5---------------9-9-9---9-9- +G|-----------0---------5---------0---5---------------9-9-9---9-9- +D|---5-----7---7-----5---5-----7---7-5-7-6-----------9-9-9---9-9- +A|-------5---------7---------5-------7-----7--------------------- +E|-----6---------5---------6---------5-------4-5-7-0-------0----- + + + +E|------------------------------------------------------------------ +B|-9---8-8-8-7-8-7-----9-9-9---10-10-10-9---8-8-8-7-8-7---2-2-2-2-2- +G|-9---7-7-7-7-7-7-----9-9-9---9--9--9--9---7-7-7-7-7-7---2-2-2-2-2- +D|-9---7-7-7-7-7-7-----9-9-9---11-11-11-9---7-7-7-7-7-7---2-2-2-2-2- +A|---5-------------5----------------------5-------------5-0-0-0-0-0- +E|-------------------0-------0-------------------------------------- + + + +E|---------------------------------0-0-0---0-0-0-0-0-0-0-0-0-0-0- +B|---------------------------------0-0-0---0-0-0-0-0-0-0-0-0-0-0- +G|-2-2-2-2-4-4-4-4---------------0-3-3-3-0-6-6-6-6-6-6-6-3-3-3-3- +D|-2-2-2-2-4-4-4-4-2-2-2-2-2-2---0-4-4-4-0-7-7-7-7-7-7-7-4-4-4-4- +A|-0-0-0-0-2-2-2-2-4-2-4-5-4-2-----4-4-4---7-7-7-7-7-7-7-4-4-4-4- +E|-----------------------------0---2-2-2---5-5-5-5-5-5-5-2-2-2-2- + + + +E|-0---------------------------0-0-0-0-0-0-0-0--------- +B|-0---------------------------0-0-0-0-0-0-0-0---1-1-1- +G|-3-4-4-4---------------------6-6-6-6-0-0-0-0-2-0-2-0- +D|-4-4-4-4---------------------7-7-7-7-2-2-2-2-3-2-2-2- +A|-4-2-2-2-4-4-4-4-6-4-6-7-6-4-7-7-7-7-3-3-3-3-3-3-0-3- +E|-2---------------------------5-5-5-5---------1-3-1-3- + diff --git a/guitar/tabs/Rush/hemispheres_prelude.prj b/guitar/tabs/Rush/hemispheres_prelude.prj new file mode 100644 index 0000000..fedad7a --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_prelude.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=hemispheres_prelude.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4) diff --git a/guitar/tabs/Rush/hemispheres_prelude.tab b/guitar/tabs/Rush/hemispheres_prelude.tab new file mode 100644 index 0000000..1248e1f --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_prelude.tab @@ -0,0 +1,118 @@ +%TabMaster v2.00r% + + +E|---0-0-0---0---0-0---0-0-0---0-0------------------------------- +B|---0-0-0---0-0---0-0---0---0-0---0---1-1-1--------------------- +G|-0-3-3-3-0-6-----6-----0-----0-----2-0-2-0--------------------- +D|-0-4-4-4-0-7-----7-----2-----2-----3-2-2-2--------------------- +A|---4-4-4---7-----7-----3-----3-----3-3-0-3-2-----5-2-----5----- +E|---2-2-2---5-----5-----------------1-3-1-3---2-3-----2-3---5-6- + + + +E|------------------------0-------------0-------------0----------- +B|----------------------------0-------------0-------------0------- +G|------------------0-------3---0-0-------3---0-0-------8---0-0--- +D|------------------0-----------0-0-----------0-0-----------0-0--- +A|----5---------------4-4-----------4-4-----------9-9-----------9- +E|-s1---5-6-1-1-1-1---2-2-----------2-2-----------7-7-----------7- + + + +E|---0-------------0-------------0---------------0---------------------- +B|-------0-------------0-------------0----------------0----------------- +G|-----8---0-0-------6---0-0-------6---0-0---------11---0-------------0- +D|---------0-0-----------0-0-----------0-0--------------0--------------- +A|-9-----------7-7-----------7-7-----------12-12----------12-12-12-12--- +E|-7-----------5-5-----------5-5-----------10-10----------10-10-10-10--- + + + +E|--------------------------------------------------------------- +B|---------------------0-0-0-0-0-0------------------------------- +G|---------4-2-0-------0-0-0-4-4-4---------0---------2---------0- +D|-4-2-0---------4-2-0-4-4-4-2-2-2-------4---4-----2---2-----4--- +A|-------4-------------2-2-2-4-4-4-----2---------4---------2----- +E|---------------------3-3-3-2-2-2-3-3---------2---------3------- + + + +E|--------------------------------------------------------------- +B|---------2---------------------------------------2------------- +G|-----------0-------0---------2---------0----------------------- +D|-4---2-----------4---4-----2---2-----4---4---2---------------2- +A|---------------2---------4---------2-----------------------3--- +E|---2---2-----3---------2---------3---------2---2---3-5-3-1----- + + + +E|-----------------------------------0---------------------------- +B|-------------0-------------------0-0---------------------------- +G|-0---------0---------0---------0---0-0-----0--------------0----- +D|---2-----2---------2---2-----2-----2-0-----0-----12-------0----- +A|-------3---------3---------3-------2---5-------7----5-------5--- +E|-----1---------1---------1---------0-----9---7--------9-7-----9- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|-0--------------0-----0--------------0-----0--------------0-----0- +D|-0-----12-------0-----0-----12-------0-----0-----12-------0-----0- +A|-----7----5-------5-------7----5-------5-------7----5-------5----- +E|---7--------9-7-----9---7--------9-7-----9---7--------9-7-----9--- + + + +E|---------------------------------------------------------------- +B|--------------------------------------------------------------9- +G|------------------------------2-2-2-2-4-4-4-4-----------------9- +D|-------------12---------------2-2-2-2-4-4-4-4-2-2-2-2-2-2-----9- +A|---7-5-----7----5---5-9---5---0-0-0-0-2-2-2-2-4-2-4-5-4-2------- +E|-7-----9-7--------9-----9---7-----------------------------0-0--- + + + +E|-------------------------------------------------------------------- +B|-9-9-10-10-10-10-10-9-0-7-8-8-8-8-8-7-8-7---------2-2-2-2-2--------- +G|-9-9-9--9--9--9--9--9-0-7-7-7-7-7-7-7-7-7---------2-2-2-2-2-2-2-2-2- +D|-9-9-11-11-11-11-11-9-0-7-7-7-7-7-7-7-7-7---------2-2-2-2-2-2-2-2-2- +A|------------------------------------------5-4-----0-0-0-0-0-0-0-0-0- +E|----------------------------------------------5-7------------------- + + + +E|---------------------0-------------------------------------0--- +B|---------------------0-2-----------------3-2-3-------------0-2- +G|-4-4-4-4-------------1-2-3-3-3-3-3-3-3-3-2-0-4-2-2-2-2-----1-2- +D|-4-4-4-4-----7-6-----2-2-4-4-4-4-4-4-4-4-0-2-4-2-2-2-2-----2-2- +A|-2-2-2-2-4-5-----7---2-0-4-4-4-4-4-4-4-4-----2-4-4-0-0-----2-0- +E|-------------------0-0---2-2-2-2-2-2-2-2---------------0-0-0--- + + + +E|-----------------------------------------------------4--------- +B|-----------------3-2-3-----2-2---------------------5---5------- +G|-3-3-3-3-3-3-3-3-2-0-4-2-2-2-2-0-----------------4---1---4---0- +D|-4-4-4-4-4-4-4-4-0-2-4-2-2-2-2-0-------7---2-------2---------0- +A|-4-4-4-4-4-4-4-4-----2-4-4-0-0---4-5-7---0---4-5-2------------- +E|-2-2-2-2-2-2-2-2---------------------------------------4---0--- + + + +E|-3-3-----------1---1---0---0---3---3---------------1---1---0---0---0- +B|-3-3-7----7----1-----1-0-----0-3-----3-7--7--7--7--1-----1-0-----0-0- +G|-4-4-8---------2-------6-------4-------8--8--8--8--2-------6-------0- +D|-5-5-11-----11-3-3-----7-7-----5-5-----11-11-11-11-3-3-----7-7-----2- +A|-5-5-9--9------3-------7-------5-------9--9--9--9--3-------7-------3- +E|-3-3-7---------1-------5-------3-------7--7--7--7--1-------5--------- + + + +E|-0-----------0-0---0-0---0-0---0-0---------------0- +B|---0---1-1-1-0---0-0---0-0---0-0---0---1-1-1-1-1-0- +G|-----2-0-2-0-6-----6-----0-----0-----2-0-2-0-0-0-1- +D|-----3-2-2-2-7-----7-----2-----2-----3-2-2-2-2-2-2- +A|-----3-3-0-3-7-----7-----3-----3-----3-3-0-3-3-3-2- +E|-----1-3-1-3-5-----5-----------------1-3-1-3-3-3-0- + diff --git a/guitar/tabs/Rush/hemispheres_the_sphere.prj b/guitar/tabs/Rush/hemispheres_the_sphere.prj new file mode 100644 index 0000000..5f16ebb --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_the_sphere.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=hemispheres_the_sphere.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4) diff --git a/guitar/tabs/Rush/hemispheres_the_sphere.tab b/guitar/tabs/Rush/hemispheres_the_sphere.tab new file mode 100644 index 0000000..c3451ed --- /dev/null +++ b/guitar/tabs/Rush/hemispheres_the_sphere.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-2-7-2-2-0-0-0-0-0-4-3-0-0-0---2-2-2-3-2-0-0-4-3-2-0-0-0-1---1- +B|-3-8-3-3-3---3-2-2-5-3-0-0-0---2-2-3-3-3-2-0-5-3-3-2-0-0-1----- +G|-2-7-4-4-2---2-2-2-6-0-2-1-2-1-3-3-2-0-4-2-2-6-0-4-2-2-0-2----- +D|-0-0-4-4-2---2-2-2-6-0-2-2-2---4-4-0-0-4-2-2-6-0-4-2-2-2-3-3--- +A|-----2-2-0---0-0-0-4-2-2-2-2---4-4---2-2-0-0-4-2-2-0-0-3-3----- +E|---------------------3-0-0-0---2-2---3---------3---------1----- + + + +E|-------3---3-----3-2- +B|-1-----3-----3-----3- +G|-----2-0-----------2- +D|---3---0-0-----0---0- +A|-------2------------- +E|-------3------------- + diff --git a/guitar/tabs/Rush/here_again.prj b/guitar/tabs/Rush/here_again.prj new file mode 100644 index 0000000..d18d319 --- /dev/null +++ b/guitar/tabs/Rush/here_again.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=here_again.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4) diff --git a/guitar/tabs/Rush/here_again.tab b/guitar/tabs/Rush/here_again.tab new file mode 100644 index 0000000..5aa7b9e --- /dev/null +++ b/guitar/tabs/Rush/here_again.tab @@ -0,0 +1,127 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-4---4-------------------2-------------------4----------------- +D|-4---4-------2-0---------2-------------0-2---2----------------- +A|-2-2---2-2-2-----4-2-0-0---0-0-0-0-2-4-----2-------0-2-4-0-2-2- +E|-------------------------------------------0---0-0------------- + + + +E|--------------------------------------------------------------- +B|-----0-0---0-0------------------------------------------------- +G|-----2-2---2-2-----4-----------------2---------------------4--- +D|-2-----------------4-------2-0-------2-------------0-2-----2--- +A|---2-----2-----2-2-2-2-2-2-----4-2-0-0-0-0-0-0-2-4-------2----- +E|-------------------------------------------------------0-----0- + + + +E|-----------------------------------------------------2-----0--- +B|---------------0-0-0-0---------2-------------------3---3---0-2- +G|---------------2-2-2-2-4-4-2-2-2-4-----4-----4---4-------4-4-2- +D|-----------------------4-4-2-2-2-4-----4-----4-2-----------2-2- +A|---0-2-4-0-2-2---2-----2-2-2-2-0-2-0-0-2-0-0-2-------------2-0- +E|-0------------------------------------------------------------- + + + +E|---------------------5---15-15-15-15-15-15--------------------------- +B|-------------------2-5---15-15-15-15-15-15--------------------------- +G|-----------5---4---2-2----------------------------------------------- +D|---------5---5---4---2-2--------------------------------------------- +A|---2---3-----------0-0---------------------0-2-2---7-7-5-7-9-7-7-9-7- +E|-5---5-------------------------------------------0------------------- + + + +E|-----------------------------------------------------------6-6- +B|-----------------------------------6-3-5-5-3-5-3---3-5-3-5----- +G|-----------------------7-4-7---9-7---------4-----4------------- +D|-------5---4-0-------1-------6--------------------------------- +A|-7-9-7---5-----0-0-0------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-6-6-5-4-2-------------------------------5---7-9-9-5-7-10-12-12-10- +B|-----------5-3-5-3---5-3---3-5-3-----3-5---7----------------------- +G|-------------------4-----4-------2-4------------------------------- +D|------------------------------------------------------------------- +A|------------------------------------------------------------------- +E|------------------------------------------------------------------- + + + +E|----10-12-10----10----------------------------------------------------------- +B|-12----------12----12------10-12-10----12-10-----3-5-5-5-3---5-5-3-3-6---6-5- +G|----------------------9-11----------11-------2-4-----------4-----------4----- +D|----------------------------------------------------------------------------- +A|----------------------------------------------------------------------------- +E|----------------------------------------------------------------------------- + + + +E|-----------------------------------10-------------------17-17---17----17----17- +B|-3-------------------3-------10-12----12-12-15-17-15-17-17----7----17----17---- +G|---4-2---4-4-2---2-4---4-4-9-11------------------------------------------------ +D|-------4-------4--------------------------------------------------------------- +A|------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------- + + + +E|-------------------17-17-17-17-17-17-15-17-15----------15-15-15-15-15------------------------- +B|-17-15----17-15-------------------------------16-15-15----------------15-17-17-17-15----17-15- +G|-------16-------16-------------------------------------------------------------------16------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|---------------10-12-10-12-10-------------10----17----17-17---------------------------------- +B|---------10-12----------------12----10-12----17----17-------17-15-17-15-------------15-17---- +G|-16-9-11-------------------------11-------------------------------------16-16-14-16-------16- +D|--------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------------------------- +B|-17-15-17-15-15-12-14-15---14-15-14-14-15-14---14-15-14--------------------------------- +G|-------------------------6-------16----------6----------16-14-13-14-13-14-13-14-7-9-7-7- +D|----------------------------------------------------------------------------------9----- +A|---------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|-9-9-9-7---9-9-7---9-7--------------------------7---7-9-9-s9-7--- +D|---9-----9-------9-----9-7----------------7---9---9------------9- +A|---------------------------9-8-7------5-----9-------------------- +E|---------------------------------10-7---7------------------------ + + + +E|--------------------------------10-12-10-12-12-12-12-12-10------------------------ +B|-----------10-10-12-12-10-10-12----------------------------12--------3-5-3-5-7-10- +G|-9-7-----7-11-11----------11----------------------------------11-2-4-------------- +D|-----9-9-------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|----------3-13-13-13-12-12-10----10-------------------------------3- +B|-10-12-10---------------------12----12-10-----------3-5-5-3-----3--- +G|------------------------------------------11----2-4---------4-2-0--- +D|---------------------------------------------12-------------------0- +A|------------------------------------------------------------------2- +E|------------------------------------------------------------------3- + diff --git a/guitar/tabs/Rush/highwater.prj b/guitar/tabs/Rush/highwater.prj new file mode 100644 index 0000000..6d07673 --- /dev/null +++ b/guitar/tabs/Rush/highwater.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=highwater.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4) diff --git a/guitar/tabs/Rush/highwater.tab b/guitar/tabs/Rush/highwater.tab new file mode 100644 index 0000000..8eb7b79 --- /dev/null +++ b/guitar/tabs/Rush/highwater.tab @@ -0,0 +1,109 @@ +%TabMaster v2.00r% + + +E|---------------------------------------------3---------------3----------- +B|-----------------------------------------3-----3---------3-----3--------- +G|-------------12---12---------------0---5---5-----5-5---5---5-----5-5-0--- +D|-12----12-------7----7-12----12----0-5---------------5---------------0-2- +A|------------------------------------------------------------------------- +E|----12----12--------------12----12--------------------------------------- + + + +E|-------0---------------0---------------------0---------------0- +B|---0-----0---------0-----0---------------0-----0---------0----- +G|-2---2-----2-2---2---2-----2-2---------2---2-----2-2---2---2--- +D|---------------2---------------1-7-2-2---------------2--------- +A|---------------------------------7----------------------------- +E|---------------------------------5----------------------------- + + + +E|-------------------3---------------3-------------------3------- +B|-0-------------3-----3---------3-----3-------------3-----3----- +G|---2-2-------5---5-----5-5---5---5-----5-5-------5---5-----5-5- +D|-------1-7-5---------------5---------------1-2-5--------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|---------3-----------------------10----------------------10---------------------- +B|-----3-----3---------------10-------10-------------10-------10-----------------8- +G|---5---5-----5-5--------12----12-------12-12----12----12-------12-12--------10--- +D|-5---------------1-2-12----------------------12----------------------1-2-10------ +A|--------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------- + + + +E|----8--------------------8-------------------------------------------- +B|------8-------------8------8--------------------------3---3----------- +G|-10-----10-10----10---10-----10-----7-9-7-9---------0-2-1-2-1-4-6-4-5- +D|--------------10----------------1-2-7-9-7-9-5-7-5-7-0-0-2-0-2-5-7-5-7- +A|------------------------------------5-7-5-7-5-7-5-7-----2---2-5-7-5-7- +E|--------------------------------------------3-5-3-5-----0---0-3-5-3-5- + + + +E|---2-3----------------------0---------------0------------------- +B|---2-3-7-9-8-10---------0-----0---------0-----0----------------- +G|-0-2-4-7-9-7-9--2-2---2---2-----2-2---2---2-----2-2---2-2-----2- +D|-0-4-7----------2-2-2---------------2---------------1-2-2-2-2--- +A|---4-5----------0-0-----------------------------------0-0------- +E|---2-3---------------------------------------------------------- + + + +E|-----0---------------0---------------------------0------------- +B|-0-----0---------0-----0---------------------0-----0---------0- +G|---2-----2-2---2---2-----2-2---2-2-2-2-----2---2-----2-2---2--- +D|-------------2---------------1-2-2-2-2-2-2---------------2----- +A|-------------------------------0-0-0-0------------------------- +E|--------------------------------------------------------------- + + + +E|---0-----------------------0---------------0------------------- +B|-----0-----------------0-----0---------0-----0----------------- +G|-2-----2-2---2-2-----2---2-----2-2---2---2-----2-2---2-2-2-2--- +D|-----------1-2-2-2-2---------------2---------------1-2-2-2-2-2- +A|-------------0-0-------------------------------------0-0-0-0--- +E|--------------------------------------------------------------- + + + +E|---------0---------------0-----------------------0------------- +B|-----0-----0---------0-----0-----------------0-----0---------0- +G|---2---2-----2-2---2---2-----2-2---2-2-----2---2-----2-2---2--- +D|-2---------------2---------------1-2-2-2-2---------------2----- +A|-----------------------------------0-0------------------------- +E|--------------------------------------------------------------- + + + +E|---0---------------3-2---------------------2-3------------------ +B|-----0-------------3-2---3---3-------------2-3-7-9-8-10--------- +G|-2-----2-2---2-2---4-2-0-2-1-2-1-4-6-4-5-0-2-4-7-9-7-9--2-2-0-2- +D|-----------1-2-2-2-5-4-0-0-2-0-2-5-7-5-7-0-4-7----------2-2-0-2- +A|-------------0-0---5-4-----2---2-5-7-5-7---4-5----------0-0---0- +E|-------------------3-2-----0---0-3-5-3-5---2-3------------------ + + + +E|-----------------3-2---------------------2-3-----------3------- +B|-----------------3-2---3---3-------------2-3-------3-----3----- +G|-2---2-2-2-2-0---4-2-0-2-1-2-1-4-6-4-5-0-2-4-0---5---5-----5-5- +D|-2-2-2-2-2-2-0-2-5-4-0-0-2-0-2-5-7-5-7-0-4-7-0-5--------------- +A|-0---0-0-0-0-----5-4-----2---2-5-7-5-7---4-5------------------- +E|-----------------3-2-----0---0-3-5-3-5---2-3------------------- + + + +E|---------3---------1---0---3---1- +B|-----3-----3-------3---1---3---1- +G|---5---5-----5-5-0-3---2---4---2- +D|-5---------------0-3-2-2-2-5-2-3- +A|-------------------1---0---5---3- +E|---------------------------3---1- + diff --git a/guitar/tabs/Rush/in_the_end.prj b/guitar/tabs/Rush/in_the_end.prj new file mode 100644 index 0000000..6920a1f --- /dev/null +++ b/guitar/tabs/Rush/in_the_end.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=in_the_end.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4) diff --git a/guitar/tabs/Rush/in_the_end.tab b/guitar/tabs/Rush/in_the_end.tab new file mode 100644 index 0000000..8a9185e --- /dev/null +++ b/guitar/tabs/Rush/in_the_end.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|-0-0---1-1---1---------1-1---1-------0-0---1-1---1------------- +B|-1---1-1---1---1---4-4-3---3---3---3-1---1-1---1---1----------- +G|-0-----2-----------3-3-3---------3---0-----2------------------- +D|-2-----3---------3-5-5-3-------------2-----3---------3-----0-3- +A|-3-----3-----------6-6-1-------------3-----3-------------1----- +E|-------1-----------------------------------1-----------3------- + + + +E|-------------0-0------0-0------0-1-1---1-1--------0-0------0-0------ +B|-------------1-1------1-1------1-1---1-1---1------1-1------1-1------ +G|-------------2-2------2-2------2-2-----2----------2-2------2-2------ +D|-0-----3-----2-2-0-h2-2-2-0-h2-2-3-----3-----0-h3-2-2-0-h2-2-2-0-h2- +A|---0-3-----3-0-0------0-0------0-3-----3----------0-0------0-0------ +E|---------3---------------------------------------------------------- + + + +E|-1---2-2-3-----0-2-2-3-3--------------------------------------- +B|-1-3-3-3-3-1-1-1-3-3-3-3-----------------------1-1---1-1-3-3--- +G|-2-4-2-2-0-2-2-0-2-2-0-0-------0-----0-------0-2-2-6-2-2-4-4-0- +D|-3-5-0-0-0-3-3-2-0-0-0-0-----2-----0-----0---0-3-3-7-3-3-5-5-0- +A|-3-5-----2-3-3-3-----2-2-0-3-----2-----0-------3-3-7-3-3-5-5--- +E|---------3-1-1-------3-3-------------------0---1-1-5-1-1-3-3--- + + + +E|-----2-2-2-2---------2-2-2-2-------------------------------------------------- +B|-3-7-3-3-3-3-3-3-3-3-3-3-3-3-3-3-5-5-15-15-15-15-15-15-15--------------------- +G|-4-7-4-4-4-4-4-4-4-4-4-4-4-4-4-4-6-6----------------------14-b16-14-14-b16-14- +D|-5-7-4-4-4-4-5-5-5-5-4-4-4-4-5-5-7-7------------------------------------------ +A|-5-5-2-2-2-2-5-5-5-5-2-2-2-2-5-5-7-7------------------------------------------ +E|-3-----------3-3-3-3---------3-3-5-5------------------------------------------ + + + +E|--------------------------------------------------------------------------------------------- +B|--------------------------------------------------------------------------------------------- +G|-12-11-h12-p11-12-p11-h12-p11-14-p11------------------------------------7-------------------- +D|-------------------------------------12-10-12-10-p9-h10-p9-10-p9-7-9-10---10-9-7----7-------- +A|---------------------------------------------------------------------------------10---10-9-7- +E|--------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------ +B|------------------------------------------------------------------------------------ +G|--------------------------------------------------------------10-12-11-------------- +D|------7-------------------------------------------10----10-12----------12-11-12-7-9- +A|-9-10---10-9-7-9-7---------------8----10-8-10-s12----12----------------------------- +E|-------------------10-8-10-8-h10---10----------------------------------------------- + + + +E|----------------------------------10-12-b14-14-12-b14-12-b14-14-14-r12-12-10-------------------- +B|------------------------10-10-h12--------------------------------------------12-10-------------- +G|-7-9-b11-r9---7-7-9-s11------------------------------------------------------------------------- +D|------------9----------------------------------------------------------------------12--------12- +A|--------------------------------------------------------------------------------------12-h14---- +E|------------------------------------------------------------------------------------------------ + + + +E|--------------------------------------------------------------------------------------------------------- +B|--------------------------------------------------------------------------------------------------------- +G|----12-h14-14-14-12-14-12-14-14-b16-14-14-b16-14-14-b16-14-b17-14-b17-14-b17-14-b17-r14-14-p12-12-p11-11- +D|-12------------------------------------------------------------------------------------------------------ +A|--------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------------------- +B|--------------------------------------------------------------------15---------------------------------- +G|-h12-p11-14-p11-------------12-p11----12-p11----12-p11----12-p11-------------12-p11----12-p11----12-p11- +D|----------------12-12-12-12--------12--------12--------12--------12----12-12--------12--------12-------- +A|-------------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------------ +B|------------------------------------------------------------------------------------------------ +G|----12-p11-------------12-p11----12-p11----12-p11----12-p11----12-p11----12-p11----------------- +D|-12--------12-12-12-12--------12--------12--------12--------12--------12--------12-12-12-10-h12- +A|------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------ + diff --git a/guitar/tabs/Rush/in_the_mood.tab b/guitar/tabs/Rush/in_the_mood.tab new file mode 100644 index 0000000..59af141 --- /dev/null +++ b/guitar/tabs/Rush/in_the_mood.tab @@ -0,0 +1,257 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / r / rush / in_the_mood.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: by-tor@primenet.com (Mark Spritzler)
+Subject: "In The Mood" by Rush
+
+Here's the Tab for  "In The Mood" by RUSH
+
+This document uses Courier New at 10 Point, for those who use MS Word to
+print and edit.
+
+I am also assuming that you know the timing and feel for the song, and that
+Alex's chord are really power chords.
+
+The solo that Alex plays is in the A minor pentatonic from the fifth fret,
+it's pretty easy to come up with you own variations. I have mine, but I'm
+too lazy to fill it in.
+
+Even though the song is pretty easy to play, I suggest practicing each part
+seperately, and then combine them to speed.
+
+If you have any questions or suggestions, you can e-mail me at:
+by-tor@primenet.com
+
+Now to the Tab:
+
+
+Rhythm #1 - the Main Riff[1of4]
+
+...A..A
+[--0--0------------------------------]
+[--2--2------------------------------]
+[--2--2------------2--5->-4----------]
+[--2--2--4-----2-4----5->-4-2-4-2----]
+[--0--0----3-4--------------------3--]
+[------------------------------------]
+
+
+Rhythm #2 - After Main Riff[2of4]
+...C..C..C+ C  C..C..C+ C
+[--3--3--3--3--3--3--3--3------------------]
+[--5--5--5--5--5--5--5--5---8->-7----------]
+[--5--5--5--5--5--5--5--5---8->-7-5-7-5----]
+[--5--5--7--5--5--5--7--5---------------6--]
+[--3--3--3--3--3--3--3--3------------------]
+[------------------------------------------]
+
+
+Rhythm #3 - More Main Riff[3of4
+...D..D..D+.D..D..D..D+ D...A  A  A+ A  A  A  A+ A
+[--5--5--5--5--5--5--5--5---0--0--0--0--0--0--0--0]
+[--7--7--7--7--7--7--7--7---2--2--2--2--2--2--2--2]
+[--7--7--7--7--7--7--7--7---2--2--2--2--2--2--2--2]
+[--7--7--9--7--7--7--9--7---2--2--4--2--2--2--4--2]
+[--5--5--5--5--5--5--5--5---0--0--0--0--0--0--0--0]
+[-------------------------------------------------]
+
+
+Rhythm #4 - Ending of Main Riff[4of4](also in Chorus)
+.../G..G..G..G..F#.F..E.E.E.E
+[--/3--3--3--3--2--1--------0-]
+[--/3--3--3--3--2--1------0-0-]    *Note - The last E chord is played
+[--/4--4--4--4--3--2----1-1-1-]            4 times, but fanned.
+[--/5--5--5--5--4--3--2-2-2---]
+[--/5--5--5--5--4--3--2-2-----]
+[--/3--3--3--3--2--1--0-------]
+
+
+
+
+Chorus #1 - First Part[1of2]
+...D..D..A..A..G..G..G..A
+[--5--5--5--5--3--3--3--5--5--5--5]
+[--7--7--5--5--3--3--3--5--5--5--5]
+[--7--7--6--6--4--4--4--6--6--6--6]
+[--7--7--7--7--5--5--5--7--7--7--7]
+[--5--5--7--7--5--5--5--7--7--7--7]
+[--------5--5--3--3--3--5--5--5--5]
+
+
+Chorus #2 - Second Part[2of2]
+...D..D..A..A..E
+[--5--5--5--5--0-------------------]
+[--7--7--5--5--0-------------------]
+[--7--7--6--6--1-------------------]
+[--7--7--7--7--2--2-2-4-2----------]
+[--5--5--7--7--2----------4-2------]
+[--------5--5--0-------------------]
+
+
+Ending
+...A..A.............A..A.............A..A.............A....A
+[--0--0-------------0--0-------------0--0-------------0----0---]
+[--2--2-------------2--2-------------2--2-------------2----2---]
+[--2--2-------------2--2-------------2--2-------------2----2---]
+[--2--2--4-----2-4--2--2--4-----2-4--2--2--4-----2-4--2----2---]
+[--0--0----3-4------0--0----3-4------0--0----3-4------0----0---]
+[--------------------------------------------------------------]
+
+Those are the riffs for the song except for the solo. Now to where they go
+in the song.
+
+I don't have the lyrics but the riffs go like this:
+
+Rhythm#1 (Repeat 3 times)
+Rhythm#2
+Rhythm#3
+Rhythm#4
+
+Rhythm#1
+Rhythm#2
+Rhythm#3
+Rhythm#4
+
+Chorus#1
+Chorus#2
+Chorus#1
+Rhythm#4
+
+Rhythm#1
+Rhythm#2
+Rhythm#3
+Rhythm#4
+
+Rhythm#1
+Rhythm#2
+Rhythm#3
+Rhythm#4
+
+
+
+Chorus#1
+Chorus#2
+Chorus#1
+Rhythm#4
+
+************SOLO***************
+
+Chorus#1
+Chorus#2
+Chorus#1
+Rhythm#4
+
+Rhythm#1 (Repeat 3 times)
+Rhythm#2
+Rhythm#3
+Rhythm#4
+
+Rhythm#1
+Rhythm#2
+Rhythm#3
+Rhythm#4
+
+Chorus#1
+Chorus#2
+Chorus#1
+Rhythm#4
+
+Ending
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Rush/jacobs_ladder.prj b/guitar/tabs/Rush/jacobs_ladder.prj new file mode 100644 index 0000000..1a665c6 --- /dev/null +++ b/guitar/tabs/Rush/jacobs_ladder.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=jacobs_ladder.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4) diff --git a/guitar/tabs/Rush/jacobs_ladder.tab b/guitar/tabs/Rush/jacobs_ladder.tab new file mode 100644 index 0000000..36d19b4 --- /dev/null +++ b/guitar/tabs/Rush/jacobs_ladder.tab @@ -0,0 +1,118 @@ +%TabMaster v2.00r% + + +E|----------------------------4---------------1-------------3--------- +B|------------------------------4---------------1-------------3------- +G|----9-------9-------------5-----5---------2-----2-------4-----4----- +D|-10------10---10--------6---------6-----3-------------5---------5--- +A|------10---------10---6---------------3-------------5--------------- +E|--------------------4---------------1-------------3---------------4- + + + +E|-------4-------------0---------------8-------------4------------- +B|---------4-------------0---------------8-------------4----------- +G|-----5-----5-------1-----1---------9-----9-------5-----5-------2- +D|---6-------------2--------------10-------------6-------------3--- +A|-6-------------2-------------10--------------6-------------3----- +E|-------------0-------------8---------------4-------------1------- + + + +E|---------------3---------------4-------------0----------------- +B|-0---------------3---------------4-------------0--------------- +G|---2---------4-----4---------5-----5-------1-----1------------- +D|-----3-----5---------5-----6-------------2--------------------- +A|---------5---------------6-------------2-----------3-3-3-3-3-3- +E|-------3---------------4-------------0------------------------- + + + +E|---------------------1-3-4-----0-----0-----0-----0-2-2-3-2-2-3- +B|---------------------1-3-4-----0-----0-----0-----0-2-2-3-2-2-3- +G|---------------------2-4-5-4-4-4-5-5-5-----3-----4-4-4-5-3-3-4- +D|---------------------3-5-6-4-4-4-5-5-5-4-4-4-5-5-5-4-4-5-4-4-5- +A|-3-3-3-3-3-3-3-3-3-3-3-5-6-2-2-4-3-3-3-4-4-4-5-5-5-2-2-3-4-4-5- +E|---------------------1-3-4-------------2-2-4-3-3-3-------2-2-3- + + + +E|-3--------------------------------7-6----10----7----10-12-0---------------- +B|-3---------5-7---5-5---7-5-5-7------------------------------18-19-18-19-18- +G|-4-------7-----7-----7---------11-9-8-11-12-11-9-11-12-14-0---------------- +D|-5-----7------------------------------------------------------------------- +A|-5---5--------------------------------------------------------------------- +E|-3-7----------------------------------------------------------------------- + + + +E|-16----17-------17-19----------------------------------------------------------------------- +B|----19----17-19-------7-18-19-17-15-14----16-18-19-18-19-18-15-18-15-14-15-14-15-14-18-19--- +G|---------------------------------------16-------------------------------------------------9- +D|-------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|----------------------------------0-----0--------------------------- +B|----0-10-10-----------------------0-----0---------------2-2-2-2-2-3- +G|-11---------11-9-7-9---11---6-4-4-4-5-5-5-3-3-3-3-3-4-1-4-4-4-4-4-5- +D|---------------------7----9---4-4-4-5-5-5-4-4-4-4-4-5-2-4-4-4-4-4-5- +A|------------------------------2-2-2-3-3-3-4-4-4-4-4-5-2-2-2-2-2-2-3- +E|------------------------------------------2-2-2-2-2-3-0------------- + + + +E|--------------------------------------------------------------- +B|-3-0----------------------------------------------------------- +G|-5-2-4-7-7-7-7-7-7-7-7-7-7-7-7-----4-----7-------4-----7-----4- +D|-5-2-5-7-7-7-7-7-7-7-7-7-7-7-7---7---5-4---7---7---5-4-----7--- +A|-3-0-5-5-5-5-5-5-5-5-5-5-5-5-5-5-------------5-----------5----- +E|-----3--------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----7-----4-----7-----4-----7-------4-----7-----4-----7------- +D|-5-4-----7---5-4-----7---5-4---7---7---5-4-----7---5-4-------1- +A|-------5-----------5-------------5-----------5-------------4--- +E|---------------------------------------------------------2----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---------------------------------------------------4-----7-9--- +D|-----4-----1-----4-------1-----4-----1-----4-----7---5-4-----9- +A|-2-1-----4---2-1---4---4---2-1-----4---2-1---4-5--------------- +E|-------2-------------2-----------2----------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-6-----7-------------------------------4-----7-9---6-----9----- +D|---7-6-------1-----4-----1-----4-----7---5-4-----9---7-6---4-4- +A|-----------4---2-1-----4---2-1---4-5-----------------------4-4- +E|---------2-----------2-------------------------------------2-2- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4- +A|-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4- +E|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2- + + + +E|-------0-2--------------10-5- +B|-------0-2-----------10-10-5- +G|-------2-4--------------11-6- +D|-4-4-4-2-4-4-2-------11-12-7- +A|-4-4-4-0-2-4-2-4-2-0-12-12-7- +E|-2-2-2-----2-0----------10-5- + diff --git a/guitar/tabs/Rush/kid_gloves.prj b/guitar/tabs/Rush/kid_gloves.prj new file mode 100644 index 0000000..15da282 --- /dev/null +++ b/guitar/tabs/Rush/kid_gloves.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=kid_gloves.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4) diff --git a/guitar/tabs/Rush/kid_gloves.tab b/guitar/tabs/Rush/kid_gloves.tab new file mode 100644 index 0000000..ffdd6ae --- /dev/null +++ b/guitar/tabs/Rush/kid_gloves.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-----------------------------------------10-10--------------------- +B|-----------------------------------------10-10-10-10--------------- +G|---------------------------------------2--------------------------- +D|---0-4-0-2---0-2-0-----0-4-0-2---0-2-0-----------------0-4-2---0-2- +A|-----------0-------2-----------0-----------------------------2----- +E|-3-------------------3-------------------------------3------------- + + + +E|---------------0---0---0--------0---0---0------5-5-5-5-5-5-5-4---- +B|---------------0---0---0--------0---0---0------5-5-5-5-5-5-5-5-10- +G|-----------2-1---3---6---7-11-1---3---6---11-7-4-4-4-4-4-4-4-4---- +D|-4---0-2-0---2---4---7---7-11-2---4---7---11-7-------------------- +A|---0---------2---4---7---5----2---4---7------5-------------------- +E|-------------0---0---0--------0---0---0--------------------------- + + + +E|-7- +B|-7- +G|-7- +D|--- +A|--- +E|--- + diff --git a/guitar/tabs/Rush/la_villa_strangiato.prj b/guitar/tabs/Rush/la_villa_strangiato.prj new file mode 100644 index 0000000..eba6876 --- /dev/null +++ b/guitar/tabs/Rush/la_villa_strangiato.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=la_villa_strangiato.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4)(701,4)(702,4)(703,4)(704,4)(705,4)(706,4)(707,4)(708,4)(709,4)(710,4)(711,4)(712,4)(713,4)(714,4)(715,4)(716,4)(717,4)(718,4)(719,4)(720,4)(721,4)(722,4)(723,4)(724,4)(725,4)(726,4)(727,4)(728,4)(729,4)(730,4)(731,4)(732,4)(733,4)(734,4)(735,4)(736,4)(737,4)(738,4)(739,4)(740,4)(741,4)(742,4)(743,4)(744,4)(745,4)(746,4)(747,4)(748,4)(749,4)(750,4)(751,4)(752,4)(753,4)(754,4)(755,4)(756,4)(757,4)(758,4)(759,4)(760,4)(761,4)(762,4)(763,4)(764,4)(765,4)(766,4)(767,4)(768,4)(769,4)(770,4)(771,4)(772,4)(773,4)(774,4)(775,4)(776,4)(777,4)(778,4)(779,4)(780,4)(781,4)(782,4)(783,4)(784,4)(785,4)(786,4)(787,4)(788,4)(789,4)(790,4)(791,4)(792,4)(793,4)(794,4)(795,4)(796,4)(797,4)(798,4)(799,4)(800,4)(801,4)(802,4)(803,4)(804,4)(805,4)(806,4)(807,4)(808,4)(809,4)(810,4)(811,4)(812,4)(813,4)(814,4)(815,4)(816,4)(817,4)(818,4)(819,4)(820,4)(821,4)(822,4)(823,4)(824,4)(825,4)(826,4)(827,4)(828,4)(829,4)(830,4)(831,4)(832,4)(833,4)(834,4)(835,4)(836,4)(837,4)(838,4)(839,4)(840,4)(841,4)(842,4)(843,4)(844,4)(845,4)(846,4)(847,4)(848,4)(849,4)(850,4)(851,4)(852,4)(853,4)(854,4)(855,4)(856,4)(857,4)(858,4)(859,4)(860,4)(861,4)(862,4)(863,4)(864,4)(865,4)(866,4)(867,4)(868,4)(869,4)(870,4)(871,4)(872,4)(873,4)(874,4)(875,4)(876,4)(877,4)(878,4)(879,4)(880,4)(881,4)(882,4)(883,4)(884,4)(885,4)(886,4)(887,4)(888,4)(889,4)(890,4)(891,4)(892,4)(893,4)(894,4)(895,4)(896,4)(897,4)(898,4)(899,4)(900,4)(901,4)(902,4)(903,4)(904,4)(905,4)(906,4)(907,4)(908,4)(909,4)(910,4)(911,4)(912,4)(913,4)(914,4)(915,4)(916,4)(917,4)(918,4)(919,4)(920,4)(921,4)(922,4)(923,4)(924,4)(925,4)(926,4)(927,4)(928,4)(929,4)(930,4)(931,4)(932,4)(933,4)(934,4)(935,4)(936,4)(937,4)(938,4)(939,4)(940,4)(941,4)(942,4)(943,4)(944,4)(945,4)(946,4)(947,4)(948,4)(949,4)(950,4)(951,4)(952,4)(953,4)(954,4)(955,4)(956,4)(957,4)(958,4)(959,4)(960,4)(961,4)(962,4)(963,4)(964,4)(965,4)(966,4)(967,4)(968,4)(969,4)(970,4)(971,4)(972,4)(973,4)(974,4)(975,4)(976,4)(977,4)(978,4)(979,4)(980,4)(981,4)(982,4)(983,4)(984,4)(985,4)(986,4)(987,4)(988,4)(989,4)(990,4)(991,4)(992,4)(993,4)(994,4)(995,4)(996,4)(997,4)(998,4)(999,4)(1000,4)(1001,4)(1002,4)(1003,4)(1004,4)(1005,4)(1006,4)(1007,4)(1008,4)(1009,4)(1010,4)(1011,4)(1012,4)(1013,4)(1014,4)(1015,4)(1016,4)(1017,4)(1018,4)(1019,4)(1020,4)(1021,4)(1022,4)(1023,4)(1024,4)(1025,4)(1026,4)(1027,4)(1028,4)(1029,4)(1030,4)(1031,4)(1032,4)(1033,4)(1034,4)(1035,4)(1036,4)(1037,4)(1038,4)(1039,4)(1040,4)(1041,4)(1042,4)(1043,4)(1044,4)(1045,4)(1046,4)(1047,4)(1048,4)(1049,4)(1050,4)(1051,4)(1052,4)(1053,4)(1054,4)(1055,4)(1056,4)(1057,4)(1058,4)(1059,4)(1060,4)(1061,4)(1062,4)(1063,4)(1064,4)(1065,4)(1066,4)(1067,4)(1068,4)(1069,4)(1070,4)(1071,4)(1072,4)(1073,4)(1074,4)(1075,4)(1076,4)(1077,4)(1078,4)(1079,4)(1080,4)(1081,4)(1082,4)(1083,4)(1084,4)(1085,4)(1086,4)(1087,4)(1088,4)(1089,4)(1090,4)(1091,4)(1092,4)(1093,4)(1094,4)(1095,4)(1096,4)(1097,4)(1098,4)(1099,4)(1100,4)(1101,4)(1102,4)(1103,4)(1104,4)(1105,4)(1106,4)(1107,4)(1108,4)(1109,4)(1110,4)(1111,4)(1112,4)(1113,4)(1114,4)(1115,4)(1116,4)(1117,4)(1118,4)(1119,4)(1120,4)(1121,4)(1122,4)(1123,4)(1124,4)(1125,4)(1126,4)(1127,4)(1128,4)(1129,4)(1130,4)(1131,4)(1132,4)(1133,4)(1134,4)(1135,4)(1136,4)(1137,4)(1138,4)(1139,4)(1140,4)(1141,4)(1142,4)(1143,4)(1144,4)(1145,4)(1146,4)(1147,4)(1148,4)(1149,4)(1150,4)(1151,4)(1152,4)(1153,4)(1154,4)(1155,4)(1156,4)(1157,4)(1158,4)(1159,4)(1160,4)(1161,4)(1162,4)(1163,4)(1164,4)(1165,4)(1166,4)(1167,4)(1168,4)(1169,4)(1170,4)(1171,4)(1172,4)(1173,4)(1174,4)(1175,4)(1176,4)(1177,4)(1178,4)(1179,4)(1180,4)(1181,4)(1182,4)(1183,4)(1184,4)(1185,4)(1186,4)(1187,4)(1188,4)(1189,4)(1190,4)(1191,4)(1192,4)(1193,4)(1194,4)(1195,4)(1196,4)(1197,4)(1198,4)(1199,4)(1200,4)(1201,4)(1202,4)(1203,4)(1204,4)(1205,4)(1206,4)(1207,4)(1208,4)(1209,4)(1210,4)(1211,4)(1212,4)(1213,4)(1214,4)(1215,4)(1216,4)(1217,4)(1218,4)(1219,4)(1220,4)(1221,4)(1222,4)(1223,4)(1224,4)(1225,4)(1226,4)(1227,4)(1228,4)(1229,4)(1230,4)(1231,4)(1232,4)(1233,4)(1234,4)(1235,4)(1236,4)(1237,4)(1238,4)(1239,4)(1240,4)(1241,4)(1242,4)(1243,4)(1244,4)(1245,4)(1246,4)(1247,4)(1248,4)(1249,4)(1250,4)(1251,4)(1252,4)(1253,4)(1254,4)(1255,4)(1256,4)(1257,4)(1258,4)(1259,4)(1260,4)(1261,4)(1262,4)(1263,4)(1264,4)(1265,4)(1266,4)(1267,4)(1268,4)(1269,4)(1270,4)(1271,4)(1272,4)(1273,4)(1274,4)(1275,4)(1276,4)(1277,4)(1278,4)(1279,4)(1280,4)(1281,4)(1282,4)(1283,4)(1284,4)(1285,4)(1286,4)(1287,4)(1288,4)(1289,4)(1290,4)(1291,4)(1292,4)(1293,4)(1294,4)(1295,4)(1296,4)(1297,4)(1298,4)(1299,4)(1300,4)(1301,4)(1302,4)(1303,4)(1304,4)(1305,4)(1306,4)(1307,4)(1308,4)(1309,4)(1310,4)(1311,4)(1312,4)(1313,4)(1314,4)(1315,4)(1316,4)(1317,4)(1318,4)(1319,4)(1320,4)(1321,4)(1322,4)(1323,4)(1324,4)(1325,4)(1326,4)(1327,4)(1328,4)(1329,4)(1330,4)(1331,4)(1332,4)(1333,4)(1334,4)(1335,4)(1336,4)(1337,4)(1338,4)(1339,4)(1340,4)(1341,4)(1342,4)(1343,4)(1344,4)(1345,4)(1346,4)(1347,4)(1348,4)(1349,4)(1350,4)(1351,4)(1352,4)(1353,4)(1354,4)(1355,4)(1356,4)(1357,4)(1358,4)(1359,4)(1360,4)(1361,4)(1362,4)(1363,4)(1364,4)(1365,4)(1366,4)(1367,4)(1368,4)(1369,4)(1370,4)(1371,4)(1372,4)(1373,4)(1374,4)(1375,4)(1376,4)(1377,4)(1378,4)(1379,4)(1380,4)(1381,4)(1382,4)(1383,4)(1384,4)(1385,4)(1386,4)(1387,4)(1388,4)(1389,4)(1390,4)(1391,4)(1392,4)(1393,4)(1394,4)(1395,4)(1396,4)(1397,4)(1398,4)(1399,4)(1400,4)(1401,4)(1402,4)(1403,4)(1404,4)(1405,4)(1406,4)(1407,4)(1408,4)(1409,4)(1410,4)(1411,4)(1412,4)(1413,4)(1414,4)(1415,4)(1416,4)(1417,4)(1418,4)(1419,4)(1420,4)(1421,4)(1422,4)(1423,4)(1424,4)(1425,4)(1426,4)(1427,4)(1428,4)(1429,4)(1430,4)(1431,4)(1432,4)(1433,4)(1434,4)(1435,4)(1436,4)(1437,4)(1438,4)(1439,4)(1440,4)(1441,4)(1442,4)(1443,4)(1444,4)(1445,4)(1446,4)(1447,4)(1448,4)(1449,4)(1450,4)(1451,4)(1452,4)(1453,4)(1454,4)(1455,4)(1456,4)(1457,4)(1458,4)(1459,4)(1460,4)(1461,4)(1462,4)(1463,4)(1464,4)(1465,4)(1466,4)(1467,4)(1468,4)(1469,4)(1470,4)(1471,4)(1472,4)(1473,4)(1474,4)(1475,4)(1476,4)(1477,4)(1478,4)(1479,4)(1480,4) diff --git a/guitar/tabs/Rush/la_villa_strangiato.tab b/guitar/tabs/Rush/la_villa_strangiato.tab new file mode 100644 index 0000000..ec85d93 --- /dev/null +++ b/guitar/tabs/Rush/la_villa_strangiato.tab @@ -0,0 +1,433 @@ +%TabMaster v2.00r% + + +E|-2-5---2---5---2---5---2-0-0---0-1-p0---0-3-p1-p0-0------------------ +B|-----4---5---4---5-5-4-4-5---3--------3-----------0-3-1-p0-0-h1-3-p1- +G|---------4-------4---4---4------------------------------------------- +D|---------2-------2-------2------------------------------------------- +A|---------2-------2-------2------------------------------------------- +E|-------------------------0------------------------------------------- + + + +E|------------------------------------------------------------------- +B|-p0---------------------------------------------------------------- +G|----2-0-h2-2-2-1-2-4-p2-------------------------------------------- +D|------------------------3-3-0-0-3-3-5-5-------------------0-------- +A|----------------------------------------0-0-3-3-2-0-2-3-3---3-p2-2- +E|------------------------------------------------------------------- + + + +E|-----1-1-------22-20-20----------------------------------------------------------- +B|-----1-1----------------15-13-----13---------------------------------------------- +G|-----2-2-9------------------------------------------------------------------------ +D|-----3-3---7-5-------5------------------------------------------12---------------- +A|-----3-3----------------------5-3----5-------13-p12-13-------13----15-13---------- +E|-3-3-1-1-------------------------------3-5-5-----------12-12-------------12-12-12- + + + +E|------------------------------------------------------------------------- +B|----------------------5-5-5-5-5-5-5-5-5-5-5-5---2-2-2-2-p0--------------- +G|----------------------5-5-5-5-5-5-5-5-5-5-5-5-0-2-2-2------2-p0------0-0- +D|----12----------------5-5-5-5-5-5-5-5-5-5-5-5-0-2-2-2-----------2-p0-0-0- +A|-13----15-13-13-13-13-3-3-3-3-3-3-3-3-3-3-3-3---0-0-0-------------------- +E|------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------- +B|-2-2-2-2-p0-------------2-2-2-2-7-9-7---2-2-2-2-p0-------------2-2-2- +G|-2-2-2------2-p0------0-2-2-2-2-7-9-7-0-2-2-2------2-p0------0-2-2-2- +D|-2-2-2-----------2-p0-0-2-2-2-2-7-9-7-0-2-2-2-----------2-p0-0-2-2-2- +A|-0-0-0------------------0-0-0-0-5-7-5---0-0-0------------------0-0-0- +E|--------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------- +B|-2-7-9-7---2-2-2-2-p0-------------------------------------------------- +G|-2-7-9-7-0-2-2-2------2-p0------0------------------------7------------- +D|-2-7-9-7-0-2-2-2-----------2-p0-0-3-s5-3-5-s7-5-9-7-10-9---10-9-7---11- +A|-0-5-7-5---0-0-0--------------------------------------------------9---- +E|----------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------ +B|------------------------------------------------------------------2-2-2- +G|-11-------------11------------------------7---------------------0-2-2-2- +D|----11-------11----3-s5-3-5-s7-5-9-7-10-9---10-9-7--------------0-2-2-2- +A|-------9---9---------------------------------------9--------9-----0-0-0- +E|---------9-------------------------------------------9-s2-9---9--------- + + + +E|---------------------------------------------------------------------- +B|-2-p0---------------2-2-2-2-p0-------------2-2-2-2-7-9-7---2-2-2-2-p0- +G|------2-p0------0-0-2-2-2------2-p0------0-2-2-2-2-7-9-7-0-2-2-2------ +D|-----------2-p0-0-0-2-2-2-----------2-p0-0-2-2-2-2-7-9-7-0-2-2-2------ +A|--------------------0-0-0------------------0-0-0-0-5-7-5---0-0-0------ +E|---------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------- +B|-------------2-2-2-2-7-9-7---2-2-2-2-p0------------------------------- +G|-2-p0------0-2-2-2-2-7-9-7-0-2-2-2------2-p0------0------------------- +D|------2-p0-0-2-2-2-2-7-9-7-0-2-2-2-----------2-p0-0-3-s5-3-5-s7-5-9-7- +A|-------------0-0-0-0-5-7-5---0-0-0------------------------------------ +E|---------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|------7-------------11-------------11------------------------7------------ +D|-10-9---10-9-7---11----11-------11----3-s5-3-5-s7-5-9-7-10-9---10-9-7----- +A|---------------9----------9---9---------------------------------------9--- +E|----------------------------9-------------------------------------------9- + + + +E|------------------------------------------------------------1-1-5-5-1- +B|------------2-2-2-2-p0---------------2-2-2-2-p0-------------1-1-2-2-1- +G|----------0-2-2-2------2-p0------0-0-2-2-2------2-p0------0-2-2-2-2-2- +D|----------0-2-2-2-----------2-p0-0-0-2-2-2-----------2-p0-0-3-3-2-2-3- +A|------9-----0-0-0--------------------0-0-0------------------3-3-0-0-3- +E|-s2-9---9---------------------------------------------------1-1-----1- + + + +E|-1-5-------------------------------------------------10-8-7----8-7------ +B|-1-2--------12-r10-10-6-8-5-----5---------------10-8--------10-----10-8- +G|-2-2-9-r7-7-----------------7-5---7-4-4-7-5----------------------------- +D|-3-2----------------------------------------7-7------------------------- +A|-3-0-------------------------------------------------------------------- +E|-1---------------------------------------------------------------------- + + + +E|----------------------------------------------8-r7-7-5---5------------- +B|-10----------------------------------------------------8---8-5-----8-5- +G|------5-7-7-b9-r7-p5-7-p5---5-7-7-b9-7-5-s9-9------------------7-5----- +D|----7---------------------7-------------------------------------------- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|-----------------------------7-7-7-7-7--------------13-13-12-15-13-12---- +B|-----8-5---------------10-10-----------8-8-10-------------------------15- +G|-7-5-----7-5-4-5-4---9------------------------9-9-9---------------------- +D|-------------------7----------------------------------------------------- +A|------------------------------------------------------------------------- +E|------------------------------------------------------------------------- + + + +E|-12----------------12-12-12-12------------------------------------------------------------17-b19-17- +B|----15-13-12-15-13-------------15-12-13--------15-b17-15-b17-r15-15-13-12-13-p12----12-------------- +G|----------------------------------------12-h14-----------------------------------14----14----------- +D|---------------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------- + + + +E|-b19-12-13-15-12-h13-p12----12----------------------------------------------------------------------- +B|-------------------------15----15-b17-15-b17-r15-15-12-13-12----12----------------------------------- +G|-------------------------------------------------------------14----14-12-14-b16-14-b16-14-14-b16---5- +D|-------------------------------------------------------------------------------------------------7--- +A|----------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------- +G|-7-7-b9-r7-7-5-4-5-4-0-4-5-4-2-4-2-h4-p2-p0-2-0-0-0-12-b14-12-b14-12-b14-12-b14- +D|-------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------- +B|----------------------------------------------------------------8-8-8-8-8-8-10-10-p8--- +G|-12-b14-12-b14-12-b13-12-b14-12-10-9-h10-p9----9-------7-s9-9-9----------------------9- +D|--------------------------------------------12---12-12--------------------------------- +A|--------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------------- +B|---------------------------------------------------10-11-p10-12-p10-13-13-12-10----13-------- +G|-12-p9-10-p9----9-----------------9-h10-p9-10-9-11------------------------------12----12-9-9- +D|-------------12---12-p10----10-12------------------------------------------------------------ +A|-------------------------12------------------------------------------------------------------ +E|--------------------------------------------------------------------------------------------- + + + +E|-----------------------------------------12-12-12----12-13-13-13-12-13-15-15-15-13-15-17-17-17- +B|-----10-12-12-13-12-12-13-13-15-15-13-15----------15------------------------------------------- +G|-s11------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|-b19-17-b19-17-b19-17-b19-17-12-h13-p12----13---------------------------------------------- +B|----------------------------------------15----15-13-p12----12-------5-5-5-5-6-8-6-p5---5--- +G|--------------------------------------------------------14----14-14------------------7---7- +D|------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + + + +E|------------------------------5-7-p5-7-8-8-p7-p5---5---------------- +B|-------------5-6-p5---5-7-8-8--------------------8---8-8-5-6-p5---5- +G|-5-4-5-4-6-7--------7-------------------------------------------7--- +D|-------------------------------------------------------------------- +A|-------------------------------------------------------------------- +E|-------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|-5-5-6-8-5--------------------------------------------------------- +G|-----------7-p0-7-5-4-h5-p4---7--------------------------------0--- +D|----------------------------7---7-7-5-3-3-3-3-p2-----------------0- +A|-------------------------------------------------3-3-2-2-0-2-3----- +E|------------------------------------------------------------------- + + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|---------------------------0-----------------------------0-0------- +D|-h3-p2---3-3-p2-3-2--------0-----5-----5-------5-----5---0-0------- +A|-------3------------3----------7-----7---5---7-----7---5---------7- +E|----------------------0-s8---8-----8-------8-----8-----------5-8--- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----------------------0-0-----------------------------0-0----- +D|-----------------------0-0-----5-----5-------5-----5---0-0----- +A|-----7-5-----7-----7-5-------7-----7---5---7-----7---5--------- +E|-5-8-----5-8---5-8---------8-----8-------8-----8-----------5-8- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------------------------0-0-----------------------------0-0--- +D|-------------------------0-0-----5-----5-------5-----5---0-0--- +A|-7-----7-5-----7-----7-5-------7-----7---5---7-----7---5------- +E|---5-8-----5-8---5-8---------8-----8-------8-----8-----------5- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|---------------------------0-0----------------0-0---------------- +D|---------------------------0-0----------------0-0---------------- +A|---7-----7-5-----7-----7-5-------7-6-5-p3---3-------7-6-5-p3---3- +E|-8---5-8-----5-8---5-8---------5----------5-------5----------5--- + + + +E|--------------------------------------------------------------------- +B|--------------------------------------------------------------------- +G|-0-0------------------0----------------------------------------9-8-7- +D|-0-0------------------0--------------------------------------7------- +A|-------7-6-5-p3---3-2-----7-6-5-p3---3-2-6-h7-p6-p5-s3---3----------- +E|-----5----------5-------5----------5-------------------5---5--------- + + + +E|------------------------------------------------------------------------- +B|----------------------------------------------------------------------14- +G|-p5---5-7-b9---9-8-7-p5---5-4---9-8-7-p5---5-7-b9-8-b9-r8-s7-p5---5---14- +D|----7--------7----------7-----7----------7----------------------7---7-14- +A|----------------------------------------------------------------------12- +E|------------------------------------------------------------------------- + + + +E|-----------------------------3-3----------------------------------------- +B|-13-12-11-10-9-8-7-6-5-4-3-2-3-3-5-5-5-14-13-12-11-10-9-7---------------- +G|-13-12-11-10-9-8-7-6-5-4-3-2-4-4-5-5-5-14-13-12-11-10-9-7-4-s6-4--------- +D|-13-12-11-10-9-8-7-6-5-4-3-2-5-5-5-5-5-14-13-12-11-10-9-7-5-s7-5--------- +A|-11-10-9--8--7-6-5-4-3-2-1-0-5-5-3-3-3-12-11-10-9--8--7-5-5-s7-5-----3-5- +E|-----------------------------3-3-3-3-3--------------------3-s5-3-3-5----- + + + +E|---------------3-3-3-3---------------------------------------------- +B|-----------5-2-3-3-3-3-5-5-5-9-9-9-2-7-b8-r7-b9-b10---------------7- +G|-------5---5-2-4-4-4-4-5-5-5-9-9-9-2----------------8-8-8-8-8------- +D|---5-7---7-5-2-5-5-5-5-5-5-5-9-9-9-2--------------------------4-4--- +A|-7---------3-0-5-5-5-5-3-3-3-7-7-7-0-------------------------------- +E|-----------3---3-3-3-3---------------------------------------------- + + + +E|-------------------------------------------------------------------------------- +B|-7-7---------7-7---13-13-13-13-b14-13-b15-13-b16-13-b17-s10-------------------3- +G|-----6-----------6----------------------------------------------------3-3-3-3--- +D|-------4-4-4-------------------------------------------------------------------- +A|------------------------------------------------------------9-9-9--------------- +E|------------------------------------------------------------------2-2----------- + + + +E|------------------------------------------------------------------------------------- +B|-----------------------------8-h11-p8----8-11-11-b12-b13-b14-b15-11-5-5-5-b8-------7- +G|-3-3-7-7-8-h10-p8---8-h10-p8----------10--------------------------------------------- +D|------------------0----------------------------------------------------------4-4-4--- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------- +B|-------11-----------------11-10-8----8------------------------------------11-s18----- +G|----------11-b14-r11-8-b9---------10---10-8-8-8---11-11-11----11-11----11------------ +D|-4-4-4-----------------------------------------------------11-------11-----------4-5- +A|------------------------------------------------9------------------------------------ +E|------------------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------- +B|-----------------------------------------------11--------------------- +G|-------7--------7-7---------------11----9----9------------------------ +D|-3-7-5---9-10-9-----10-9-7-----11----11---11------5-5-3-7-6-7-5-7-9-9- +A|---------------------------9------------------------------------------ +E|-----------------------------0---------------------------------------- + + + +E|------------------------------------------------------------------ +B|------------------------------------------2----------------------- +G|-----------7----------------------------3---------------6-----0--- +D|-7-10-9-10---10-9-7---7-9-7---------4-------7-----5-------7---0-7- +A|--------------------9-------9---------4-------7-----5-------7----- +E|------------------------------9-2-2-------------5-----3----------- + + + +E|-----------------2-0---------------------2-0-----------0-0-0-0- +B|-----------------3-0-4-------------------3-0-0---0-0-0-2-2-2-2- +G|-----------6-----2-1-4-------------6-----2-1-0-0-0-0-0-2-2-2-2- +D|-----5-------7---0-2-4-7-----5-------7---0-2-0-0-0-0-0-2-2-2-2- +A|-7-----5-------7---2-2---7-----5-------7---2-2---2-2-2-0-0-0-0- +E|---5-----5---------0-------5-----5---------0-3---3-3-3--------- + + + +E|-0-0-0-0----------------------------------------------------------- +B|-2-2-2-2----------------------------------------------------------- +G|-2-2-2-2-0-----------------0-------------------------------------0- +D|-2-2-2-2-0-----------------0-------------------------------------0- +A|-0-0-0-0-----7-6---5-3-0-2-----7-6---5-3-0-2-6-h7-p6-p5-s3---3----- +E|-----------5-----5-----------5-----5-----------------------5---5--- + + + +E|---------------------------------------------------------------------- +B|---------------------------------------------------------------------- +G|------------------0----------------------------------------9-8-7-p5--- +D|------------------0--------------------------------------7----------7- +A|---7-6-5-p3---3-2-----7-6-5-p3---3-2-6-h7-p6-p5-s3---3---------------- +E|-5----------5-------5----------5-------------------5---5-------------- + + + +E|----------------------------------------------------------------------- +B|-------------------------------------------------------------------5-5- +G|-5-7-b9---9-8-7-p5---5-4---9-8-7-p5---5-7-b9-8-b9-r8-s7-p5---5---0-5-5- +D|--------7----------7-----7----------7----------------------7---7-0-5-5- +A|-------------------------------------------------------------------3-3- +E|----------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------- +B|-5-5-p3---------------2-2-2-2-p0-------------2-2-2-2-7-9-7---2-2-2-2- +G|-5------5-p3------0-0-2-2-2------2-p0------0-2-2-2-2-7-9-7-0-2-2-2--- +D|-5-----------5-p0-0-0-2-2-2-----------2-p0-0-2-2-2-2-7-9-7-0-2-2-2--- +A|-3--------------------0-0-0------------------0-0-0-0-5-7-5---0-0-0--- +E|--------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------- +B|-p0-------------2-2-2-2-7-9-7---2-2-2-2-p0----------------------------- +G|----2-p0------0-2-2-2-2-7-9-7-0-2-2-2------2-p0------0----------------- +D|---------2-p0-0-2-2-2-2-7-9-7-0-2-2-2-----------2-p0-0-3-s5-3-5-s7-5-9- +A|----------------0-0-0-0-5-7-5---0-0-0---------------------------------- +E|----------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|--------7-------------11-------------11------------------------7---------- +D|-7-10-9---10-9-7---11----11-------11----3-s5-3-5-s7-5-9-7-10-9---10-9-7--- +A|-----------------9----------9---9---------------------------------------9- +E|------------------------------9------------------------------------------- + + + +E|---------------------------------------------------------------------- +B|--------------2-2-2-2-p0---------------2-2-2-2-p0-------------2-2-2-2- +G|------------0-2-2-2------2-p0------0-0-2-2-2------2-p0------0-2-2-2-2- +D|------------0-2-2-2-----------2-p0-0-0-2-2-2-----------2-p0-0-2-2-2-2- +A|--------9-----0-0-0--------------------0-0-0------------------0-0-0-0- +E|-9-s2-9---9----------------------------------------------------------- + + + +E|--------------------------------------------------------------------- +B|-7-9-7---2-2-2-2-p0-------------2-2-2-2-7-9-7---2-2-2-2-p0----------- +G|-7-9-7-0-2-2-2------2-p0------0-2-2-2-2-7-9-7-0-2-2-2------2-p0------ +D|-7-9-7-0-2-2-2-----------2-p0-0-2-2-2-2-7-9-7-0-2-2-2-----------2-p0- +A|-5-7-5---0-0-0------------------0-0-0-0-5-7-5---0-0-0---------------- +E|--------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|-0------------------------7-------------11-------------11----------------- +D|-0-3-s5-3-5-s7-5-9-7-10-9---10-9-7---11----11-------11----3-s5-3-5-s7-5-9- +A|-----------------------------------9----------9---9----------------------- +E|------------------------------------------------9------------------------- + + + +E|--------------------------------------------------------------------- +B|-------------------2-2-2--------------------------------------------- +G|--------7--------0-3-3-3-4-p2-----------0-0----------------0--------- +D|-7-10-9---10-9-7-0-4-4-4------4-p2------0-0----------------0--------- +A|-------------------4-4-4-----------4-p0-------7-6-5-p3---3-----7-6-5- +E|-------------------2-2-2--------------------5----------5-----5------- + + + +E|-------------------------------------------------------- +B|-----------------------14-13-12-11-10-9-8-7-6-5-4-3-2-5- +G|-----------------------14-13-12-11-10-9-8-7-6-5-4-3-2-5- +D|-----------------------14-13-12-11-10-9-8-7-6-5-4-3-2-5- +A|-p3---3---7-6-5-p3---3-12-11-10-9--8--7-6-5-4-3-2-1-0-3- +E|----5---5----------5----------------------------------3- + diff --git a/guitar/tabs/Rush/lakeside_park.prj b/guitar/tabs/Rush/lakeside_park.prj new file mode 100644 index 0000000..d8d4950 --- /dev/null +++ b/guitar/tabs/Rush/lakeside_park.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=lakeside_park.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4) diff --git a/guitar/tabs/Rush/lakeside_park.tab b/guitar/tabs/Rush/lakeside_park.tab new file mode 100644 index 0000000..76df86b --- /dev/null +++ b/guitar/tabs/Rush/lakeside_park.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|-5-3-3-3-2-------5-3-3-3-2-7-8-----5-5-5-5-5-6-p5---3-3-3-0------ +B|-5---3-3-3-3-3-2-5---3-3-3-8-8-2---6---6----------6-3-3-3-1------ +G|-2---0---2-0-0-2-2---0---2-7-7-2-0-5---5------------0-0-0-0-0-h2- +D|-----0---0---0-2-----0---0-------0-0---0------------0-0-0-2------ +A|-----------3---0------------------------------------------3------ +E|-------------3--------------------------------------------------- + + + +E|------------------------------------------------5-5-5-5-7-3-3-3- +B|----------------------------------------------2-7---7---7-3---1- +G|-0-0-0-0-r7---2---2-2---0---0-0---2---2-2---0-2-7---7-----0---0- +D|-----0------3---3-----2---2-----3---3-----2---2-0---0-----2---2- +A|----------------------------------------------0----------------- +E|---------------------------------------------------------------- + + + +E|-3---------------------------2--------------------------------------- +B|---0-----3-----3-------------3---------------------7-8-10---12-14-15- +G|---0---5-----4---2-0---------2---------------6-7-9--------6---------- +D|---2-5-----5---------4---2---0-7-p5-s2---7-7------------------------- +A|-----------------------3---0-----------4----------------------------- +E|--------------------------------------------------------------------- + + + +E|-------12------------------------------------------------------------------------------------------- +B|-14-15-----------------------------------------------------------------12--------------12----------- +G|----------14-12-11-12-14-12-p11----11---------------------14-12-p11-------14-12-p11-------14-12-p11- +D|--------------------------------14----14-p12-11-12-12-s14-----------14--------------14-------------- +A|---------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------------12- +B|----------------------------------------13-15-15-b17-r15-p13----13-15-15-b17-r15-b17-15-b17---- +G|----9-s6-6-p4-p0-4-6-4-h6-p4-0-14-14-14----------------------14-------------------------------- +D|-14-------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------- + + + +E|-15-15-b17-15-15-b17-15-b17-------------------12----- +B|-------------------------------------------------7--- +G|----------------------------5-4-2-0----------------7- +D|------------------------------------4---2---0-------- +A|--------------------------------------3---0---------- +E|----------------------------------------------------- + diff --git a/guitar/tabs/Rush/lavilla4.prj b/guitar/tabs/Rush/lavilla4.prj new file mode 100644 index 0000000..47e2031 --- /dev/null +++ b/guitar/tabs/Rush/lavilla4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=lavilla4.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4) diff --git a/guitar/tabs/Rush/lavilla4.tab b/guitar/tabs/Rush/lavilla4.tab new file mode 100644 index 0000000..08d4eef --- /dev/null +++ b/guitar/tabs/Rush/lavilla4.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-0---0-1-p0---0-3-p1-p0-0----------------------------------------------- +B|---3--------3-----------0-3-1-p0-0-h1-3-p1-p0--------------------------- +G|----------------------------------------------2-0-h2-2-2-1-2-4-p2------- +D|------------------------------------------------------------------3-3-0- +A|------------------------------------------------------------------------ +E|------------------------------------------------------------------------ + + + +E|------------------------------------------1- +B|------------------------------------------1- +G|------------------------------------------2- +D|-0-3-3-5-5-------------------0------------3- +A|-----------0-0-3-3-2-0-2-3-3---3-p2-2-----3- +E|--------------------------------------3-3-1- + diff --git a/guitar/tabs/Rush/leave_that_thing_alone.prj b/guitar/tabs/Rush/leave_that_thing_alone.prj new file mode 100644 index 0000000..1f365b2 --- /dev/null +++ b/guitar/tabs/Rush/leave_that_thing_alone.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=leave_that_thing_alone.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4) diff --git a/guitar/tabs/Rush/leave_that_thing_alone.tab b/guitar/tabs/Rush/leave_that_thing_alone.tab new file mode 100644 index 0000000..6215784 --- /dev/null +++ b/guitar/tabs/Rush/leave_that_thing_alone.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|----------------------------12---------------------------12----------------------------- +B|-------------------------------10-12------------------------10-12----------------------- +G|-14-16-16-16-16-14-14-14-14----------12-10-9-9-10-----------------12-10-9--------------- +D|-14----14-14-14----14-14-14---------------------------10------------------12-10--------- +A|-0------------------------------------------------s12---------------------------0-0-3-3- +E|---------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|---------------------------------2-0---2-3-----------------7-9- +A|-5-5-5-7-7-7---------------0-2-3-----3-----------2-0---2-3----- +E|-------------2-2-2-3-3-4-5-----------------0-2-3-----3--------- + + + +E|--------------7--------7------------------------------------------ +B|-7-10-------------7-10-----7-7-10-7-----------------7-----------7- +G|--------7-9-7------------9----------7-------------------9-7---7--- +D|------9---------9---------------------9-9-7---7-7-9---9-----9----- +A|--------------------------------------------9--------------------- +E|------------------------------------------------------------------ + + + +E|----7------------------12----12----15----17-19-17-19-21-19-21-22-21-22-22-24-24-22-24-22-24- +B|-10---7-10-12-14-12-------15----15----17---------------------------------------------------- +G|--------------------14---------------------------------------------------------------------- +D|-------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-22-24-24-22-24-22-24- +B|---------------------- +G|---------------------- +D|---------------------- +A|---------------------- +E|---------------------- + diff --git a/guitar/tabs/Rush/lessons.prj b/guitar/tabs/Rush/lessons.prj new file mode 100644 index 0000000..f6dcafa --- /dev/null +++ b/guitar/tabs/Rush/lessons.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=lessons.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4) diff --git a/guitar/tabs/Rush/lessons.tab b/guitar/tabs/Rush/lessons.tab new file mode 100644 index 0000000..9f22eb5 --- /dev/null +++ b/guitar/tabs/Rush/lessons.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|-------2-2-0-0-0-3-3-3-7-5-2-------2-2-0-3-2-3-2--------------- +B|-2-2-2-3-3-3-3-3-3-3-3-8-7-3-2-2-2-3-3-3-3-3-3-3--------------- +G|-2-2-2-2-2-2-2-2-0-0-0-7-7-2-2-2-2-2-2-2-0-2-0-2-0------------- +D|-2-2-2-0-0-0-0-0-0-0-0-----0-2-2-2-0-0-0-0-0-0-0-0-2-2-2-2-2-2- +A|-0-0-0-----------2-2-2-------0-0-0-------2---2-----2-2-2-2-2-2- +E|-----------------3-3-3-------------------3---3-----0-0-0-0-0-0- + + + +E|--------------------------------------------------------------- +B|-2-4-9-7------------------------------------------------------- +G|-2-4-9-7---0--------------------------------------------------- +D|-2-4-9-7-7-0-7-5-5-5-7-7-5-5-2-7-----5-5-7-7-5-5-2-7-9-5-5-7-7- +A|-0-2-7-5-7---7-5-5-5-7-7-5-5-2-7-----5-5-7-7-5-5-2-7-9-5-5-7-7- +E|---------5---5-3-3-3-5-5-3-3-0-5-3-0-3-3-5-5-3-3-0-5-7-3-3-5-5- + + + +E|---------------------------------------------------15-------------------------------- +B|-----------------------------3-15-b17-17-15-15-b17----15-15-b17-r16-b17-15-p12----12- +G|---------------------------2-2-------------------------------------------------14---- +D|-5-5-2-7-----5-5-7-7-5-5-2-2-0------------------------------------------------------- +A|-5-5-2-7-----5-5-7-7-5-5-2-0--------------------------------------------------------- +E|-3-3-0-5-3-0-3-3-5-5-3-3-0----------------------------------------------------------- + + + +E|-----------------------------5-5-----10-p7-------------------12---------------------------------- +B|--------12--------8-p5---5-8-----8-5-------10-10-b12-r10-b12------------------------------------- +G|-14-b16----14-b16------7----------------------------------------14-b16-r14-b16-14-b16-16-r14-p12- +D|------------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------- + + + +E|------------------------------------------15-----------15------------------------------------------------ +B|----------------------15-b17-17-15-15-b17----15-15-b17----15-b17-15-p12----12--------15--------17-----17- +G|-14-14-b16-r14-p12------------------------------------------------------14----14-b16----16-b18----r16---- +D|-------------------14------------------------------------------------------------------------------------ +A|--------------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------------- +B|-----------------------13-b15-13-b15-13-b15-r13-10------------------------------------------------ +G|-16-b18-r16-p14-16-b18-----------------------------12-b14-r12-11-4-b6-r4-4-b6-r4-4-b6-r4-2-4-p2--- +D|------------------------------------------------------------------------------------------------4- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------- +B|----------------------------------------------------------------------- +G|-2------2---------------------------------------------2-h4-9-b11-9-9-9- +D|---2-h4---4-p2---2----------------------------------------------------- +A|---------------4---4-2------------------------------------------------- +E|-----------------------2-h3-p2-2-h3-p2-2-h3-p2-0-2-h3------------------ + diff --git a/guitar/tabs/Rush/limelight.prj b/guitar/tabs/Rush/limelight.prj new file mode 100644 index 0000000..c2f937e --- /dev/null +++ b/guitar/tabs/Rush/limelight.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=limelight.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4) diff --git a/guitar/tabs/Rush/limelight.tab b/guitar/tabs/Rush/limelight.tab new file mode 100644 index 0000000..cea308b --- /dev/null +++ b/guitar/tabs/Rush/limelight.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|---------------------------------------------------------------- +B|-----------------------------------4-------2--------3----------- +G|-----------4-4-2-2---------------4-----2-----2---h0------------- +D|---------2-4-4-2-2-2-----------2-----0-------2--------2-2-2-2-2- +A|-----0-4---2-2-0-0-2-----0-4-0---------------0-2------2-2-2-2-2- +E|-0-4---------------0-2-4-----------------0------------0-0-0-0-0- + + + +E|-------------------------------------------0-------0-------0--- +B|-------------------------------------------0-------0-------0--- +G|-------------------------------------------1-------1-------3--- +D|-2-2-2-4-4-4-4-4-4-4-4-6-6-6-6-6-6-6-6-2-2-2-2-2-2-2-2-4-4-4-4- +A|-2-2-2-4-4-4-4-4-4-4-4-6-6-6-6-6-6-6-6-2-2-2-2-2-2-2-2-4-4-4-4- +E|-0-0-0-2-2-2-2-2-2-2-2-4-4-4-4-4-4-4-4-0-0-0-0-0-0-0-0-2-2-2-2- + + + +E|-------0-------4-----4---2-0-12----12-14----14-------11----14----11----14------- +B|-------0-------4-----4----------12-------12-11-14----12-11-11-12-12-11----11-12- +G|-------3-------6-----6----------------11----------13---------------------------- +D|-4-4-4-4-4-6-6-6-6-6-6-6-------------------------------------------------------- +A|-4-4-4-4-4-6-6-6-6-6-6-6-------------------------------------------------------- +E|-2-2-2-2-2-4-4-4-4-4-4-4-------------------------------------------------------- + + + +E|-11---------------------------16-19-14-16-18-16-14-16-18-16-16-18-16-18-19-18-19-18-19-21-21- +B|----14----11--------------------------------------------------------------------------------- +G|-------13----11-11-13-11-13-1---------------------------------------------------------------- +D|--------------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------- + + + +E|-23- +B|---- +G|---- +D|---- +A|---- +E|---- + diff --git a/guitar/tabs/Rush/losing_it.prj b/guitar/tabs/Rush/losing_it.prj new file mode 100644 index 0000000..acf4890 --- /dev/null +++ b/guitar/tabs/Rush/losing_it.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=losing_it.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4) diff --git a/guitar/tabs/Rush/losing_it.tab b/guitar/tabs/Rush/losing_it.tab new file mode 100644 index 0000000..8e01019 --- /dev/null +++ b/guitar/tabs/Rush/losing_it.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----3---6-----3---6-----3---6-----3-----3-------3------------- +D|---4---6-----4---6-----4---6-----4---6-4-------4-----6---6---1- +A|-6---------6---------6---------6-----------6-4-----6---6---2--- +E|--------------------------------------------------------------- + + + +E|----------------- +B|----------------- +G|----------------- +D|-4---3---1-4---3- +A|---4---2-----4--- +E|----------------- + diff --git a/guitar/tabs/Rush/madrigal.prj b/guitar/tabs/Rush/madrigal.prj new file mode 100644 index 0000000..c0154e0 --- /dev/null +++ b/guitar/tabs/Rush/madrigal.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=madrigal.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4) diff --git a/guitar/tabs/Rush/madrigal.tab b/guitar/tabs/Rush/madrigal.tab new file mode 100644 index 0000000..ea0bd66 --- /dev/null +++ b/guitar/tabs/Rush/madrigal.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|-12----------------------------------0-2-0-2-12----------------------------0-2-0-2---- +B|----12-14----------------------------0-3-0-3----12-14----------------------0-3-0-3---- +G|----------14-11-13-------------------1-2-1-2----------14-11-13-------------1-2-1-2-11- +D|-------------------14-11-------------2-0-2-0-------------------14-11-------2-0-2-0---- +A|-------------------------14-12-------2---2---------------------------14-12-2---2------ +E|-------------------------------14-12-0---0---------------------------------0---0------ + + + +E|----------------22-2-0-------2-2-0-------0-0-0-0-4-----4-----3-3-2-0- +B|-------------------3---3-2-0-3-----3-2-0-2-2-0-2-5-------5---0------- +G|----14-11----14----2---------2-----------1-2-1-2-6---6-----6-0------- +D|-14-------14-------0---------0-----------2-2-2-2-6-6---------2------- +A|-----------------------------------------2-0-2-0-4-----------2------- +E|-----------------------------------------0-0-0-0-------------0------- + + + +E|---------2-0---------------------------2-----3-3-2-0---------2- +B|-3-----------3-2-0-------2---------------3-----------3--------- +G|-------2---------------3---3---------4-----4---------------2--- +D|---2-0---------------2-------2-----4-------------------2-0----- +A|-------------------4-----------4-2----------------------------- +E|--------------------------------------------------------------- + + + +E|-0-----------------------0-0- +B|---3-2-0-------2-----2-0-0-0- +G|-------------3---3-----2-1-1- +D|-----------2-------2---2-2-2- +A|---------4-------------2-2-2- +E|----------------------------- + diff --git a/guitar/tabs/Rush/making_memories.prj b/guitar/tabs/Rush/making_memories.prj new file mode 100644 index 0000000..2538dcf --- /dev/null +++ b/guitar/tabs/Rush/making_memories.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=making_memories.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4) diff --git a/guitar/tabs/Rush/making_memories.tab b/guitar/tabs/Rush/making_memories.tab new file mode 100644 index 0000000..45a7643 --- /dev/null +++ b/guitar/tabs/Rush/making_memories.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-2-----------7-------7----------------------------------------s15-15-14-15-14-15- +B|-3-----------8-------8------------12-12-10-12-10-12-10-10---7-------------------- +G|-2-5-0-2-5-0-7-2-7-2-7-2-5-12-----------------------------7-7-------------------- +D|-0-----------0-------0--------s12---------------------------7-------------------- +A|--------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------- + + + +E|-14----17------------------------------------------------------------------- +B|----15-------12-15-12-----------------10---------------5---13-12-5---------- +G|----------------------12-7---7-10-9-9----5-4-5-4-5-4-5---7---------10-7-7-5- +D|----------12---------------7------------------------------------------------ +A|---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|-------------------------------------------------------7-10----------10-12- +B|--------------------------------------------------7-10---------10-12------- +G|-7-5-10-10-9-10-10-7-----------------------7-9-10-----------11------------- +D|---------------------0-7-12------------7-9--------------------------------- +A|---------------------------------7-8-9------------------------------------- +E|----------------------------7-10------------------------------------------- + diff --git a/guitar/tabs/Rush/marathon.prj b/guitar/tabs/Rush/marathon.prj new file mode 100644 index 0000000..2cd573c --- /dev/null +++ b/guitar/tabs/Rush/marathon.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=marathon.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4) diff --git a/guitar/tabs/Rush/marathon.tab b/guitar/tabs/Rush/marathon.tab new file mode 100644 index 0000000..c17a89a --- /dev/null +++ b/guitar/tabs/Rush/marathon.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-----------------5-----------------5-2---2---2---2---2--------- +B|-----------5---4-------------5---4---4-2-4-2-4-2-4-2-4-2------- +G|-----4-----------------4-------------4-2-4-2-4-2-4-2-4-2-----4- +D|---4-----2---2-------4-----2---2-----4-2-4-2-4-2-4-2-4-2---4--- +A|-2-----0-----------2-----0-----------2-0-2-0-2-0-2-0-2-0-2----- +E|-------------------------------------2---2---2---2---2--------- + + + +E|-----5-2-7-7-2-0-4-2-7-7-2-0-0-0-0-0-2-2-2-----------------5-2- +B|---------7-9-2-0-4-2-7-9-2-0-0-0-0-0-2-3-3-2-2-2-2-2-2--------- +G|---4-----8-9-3-1-4-3-8-9-3-1-1-1-1-1-3-3-4-2-2-2-2-2-2---4----- +D|-2-------9-9-4-2-6-4-9-9-4-2-2-2-1-1-4-4-4-2-2-2-2-2-2-2------- +A|---------9-7-4-2-6-4-9-7-4-2-2-2-2-2-4-4-4-0-0-0-0-0-0--------- +E|---------7-7-2-0-4-2-7-7-2-0-0-0-0-0-2-2-2--------------------- + + + +E|----------12-17----------------------- +B|-------15----------------------------- +G|----14-------------------------------- +D|-12---------------------4---------4--- +A|----------------5-5-5-7---5-5-5-7----- +E|------------------------------------5- + diff --git a/guitar/tabs/Rush/middletown_dreams.prj b/guitar/tabs/Rush/middletown_dreams.prj new file mode 100644 index 0000000..73f81b2 --- /dev/null +++ b/guitar/tabs/Rush/middletown_dreams.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=middletown_dreams.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4) diff --git a/guitar/tabs/Rush/middletown_dreams.tab b/guitar/tabs/Rush/middletown_dreams.tab new file mode 100644 index 0000000..fb9199b --- /dev/null +++ b/guitar/tabs/Rush/middletown_dreams.tab @@ -0,0 +1,73 @@ +%TabMaster v2.00r% + + +E|--------------------------8--------------5-------5----------------- +B|-15---------------15--------10-------------3-----3-------1-----1--- +G|-12-----5---0-----12----9------2-----0-------2---2-----0-----0----- +D|-14-------5---0---14-12--------2---0-----------2-2---2-----2-----2- +A|-12-5-7---------0-12-----------0-2-----3---------0-0--------------- +E|------------------------------------------------------------------- + + + +E|--------------------------------------------------------------3- +B|---1-------------0-------------0-------15-------3--------------- +G|-0-------0-----5---5---5-----5---5---5-12-----5---5---5-----5--- +D|-------0-----5-------5-----5-------5---14---5-------5-----5----- +A|-----2-----3-------------3-------------12-3-------------3------- +E|---------------------------------------------------------------- + + + +E|--------------5-----3---3--------------------------------------------------------- +B|-----10----10-8-----3-------------------------------13----------------------12---- +G|--------------5---0-5-7-7---------------------14----------14----14----12---------- +D|-s10----10----7-----5---5----5-----5------5-7----14----14----14----14----12----12- +A|--------------5-2---3---3-s7---5-7---s7-5-4--------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------3- +B|-------------------10----------10----------12----------------10----------------12------------ +G|-12----14----10----------10----------12----------12----14-------12-10-12-12----------12------ +D|----12----10----12----12----12----12----14----14----14----14-10-------------12----------12--- +A|----------------------------------------------------------------------------------12--------- +E|--------------------------------------------------------------------------------------------- + + + +E|-------20-20-17-20-17----17--------------------------------------------------------17-15----15- +B|-13-------------------20----17-20-20-----13-15-------------------------------------------17---- +G|----12-------------------------------s14-------14-14-12-14-12-14-12-14-12-14-12-14------------- +D|----------------------------------------------------------------------------------------------- +A|-----------------------------------------------------------------------------------0----------- +E|----------------------------------------------------------------------------------------------- + + + +E|------------------12-15----12-13------------------------------------------------------------ +B|-17---15-13----13-------13-------13-15-12-13-12----12-13-15--------------------------------- +G|------------12----------------------------------14----------------10----10-------10----10--- +D|------------------------------------------------------------10-10----10----10-10----10------ +A|----0-------------------------------------------------------------------------------------1- +E|-------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------- +B|-----------------------6---6-----6-----------10----10-------10----10----- +G|---3---3-----5---5---------------------------------------------------2-3- +D|---------------------------------------10-10----10----10-10----10----2-3- +A|-1---1---3-3---3---5-5---5---5-5---7-7-------------------------------0-1- +E|------------------------------------------------------------------------- + + + +E|---3----------------------------------------1-3-5- +B|-----3-6----------------8-------8-----------1-3-8- +G|-5-----7-9---9-------10---10------10----2-2-3-5-5- +D|-5-----7---0-10---10---------10------10-2-2-3-5-7- +A|-3-----5-----7--8-----------------------0-0-1-3-5- +E|-------------------------------------------------- + diff --git a/guitar/tabs/Rush/natural_science.prj b/guitar/tabs/Rush/natural_science.prj new file mode 100644 index 0000000..be2dff8 --- /dev/null +++ b/guitar/tabs/Rush/natural_science.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=natural_science.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4)(563,4)(564,4)(565,4)(566,4)(567,4)(568,4)(569,4)(570,4)(571,4)(572,4)(573,4)(574,4)(575,4)(576,4)(577,4)(578,4)(579,4)(580,4)(581,4)(582,4)(583,4)(584,4)(585,4)(586,4)(587,4)(588,4)(589,4)(590,4)(591,4)(592,4)(593,4)(594,4)(595,4)(596,4)(597,4)(598,4)(599,4)(600,4)(601,4)(602,4)(603,4)(604,4)(605,4)(606,4)(607,4)(608,4)(609,4)(610,4)(611,4)(612,4)(613,4)(614,4)(615,4)(616,4)(617,4)(618,4)(619,4)(620,4)(621,4)(622,4)(623,4)(624,4)(625,4)(626,4)(627,4)(628,4)(629,4)(630,4)(631,4)(632,4)(633,4)(634,4)(635,4)(636,4)(637,4)(638,4)(639,4)(640,4)(641,4)(642,4)(643,4)(644,4)(645,4)(646,4)(647,4)(648,4)(649,4)(650,4)(651,4)(652,4)(653,4)(654,4)(655,4)(656,4)(657,4)(658,4)(659,4)(660,4)(661,4)(662,4)(663,4)(664,4)(665,4)(666,4)(667,4)(668,4)(669,4)(670,4)(671,4)(672,4)(673,4)(674,4)(675,4)(676,4)(677,4)(678,4)(679,4)(680,4)(681,4)(682,4)(683,4)(684,4)(685,4)(686,4)(687,4)(688,4)(689,4)(690,4)(691,4)(692,4)(693,4)(694,4)(695,4)(696,4)(697,4)(698,4)(699,4)(700,4) diff --git a/guitar/tabs/Rush/natural_science.tab b/guitar/tabs/Rush/natural_science.tab new file mode 100644 index 0000000..4efd17c --- /dev/null +++ b/guitar/tabs/Rush/natural_science.tab @@ -0,0 +1,208 @@ +%TabMaster v2.00r% + + +E|-2-2-2-0-0-0-0-0-3-3-3-5-5-5-5-5-4-4-4-2-4-2-2-2-4-4-4-4-4-4-2- +B|-2-2-2-0-0-0-0-0-3-3-3-5-5-5-5-5-4-4-4-5-7-2-2-2-4-4-4-4-4-4-2- +G|-4-4-4-2-2-2-2-2-5-5-5-7-7-7-7-7-6-6-6-4-6-4-4-4-6-6-6-6-6-6-4- +D|-4-4-4-2-2-2-2-2-5-5-5-7-7-7-7-7-6-6-6-2-4-4-4-4-6-6-6-6-6-6-4- +A|-2-2-2-0-0-0-0-0-3-3-3-5-5-5-5-5-4-4-4-2-4-2-2-2-4-4-4-4-4-4-2- +E|-------------------------------------------2-2-2-4-4-4-4-4-4-2- + + + +E|-2-2-0-0-0-0-0-0-2-2-2-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-2-2-2-0--- +B|-2-2-0-0-0-0-0-0-2-2-2-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-2-2-2-0--- +G|-4-4-2-2-2-2-2-2-4-4-4-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-4-4-4-2--- +D|-4-4-2-2-2-2-2-2-4-4-4-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-4-4-4-2-2- +A|-2-2-0-0-0-0-0-0-2-2-2-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-2-2-2-0--- +E|-2-2-0-0-0-0-0-0-2-2-2-------------------------------2-2-2-0--- + + + +E|--------------------------------------------------------------- +B|---0-----------3-------------------0-----------3--------------- +G|-4-------0---2-------0---0---0---4-------0---2----------------- +D|-------0---0-------0-----------2-------0---0-----4-2-4-2-4-2-0- +A|-----3-----------2-----3---5---------3------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------------2---------------------------2-4-2-4-2-4-2-0-4-2-4- +D|-4-2-4-2-4-5---4-2-4-2-4-2-0-4-2-4-2-4-5----------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-------3---------------------------3--------------------------- +G|-2-4-5---4-2-4-2-4-2-0-4-2-4-2-4-5---5-4-2--------------------- +D|-------------------------------------------5-4-2-4-2-4-2-0-4-2- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---------2---------------------------2-4-2-4-2-4-2-0-4-2-4-2-4- +D|-4-2-4-5---4-2-4-2-4-2-0-4-2-4-2-4-5--------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|---3---------------------------3------------------------------- +G|-5---4-2-4-2-4-2-0-4-2-4-2-4-5---5-4-2------------------------- +D|---------------------------------------5-4-2------------------- +A|---------------------------------------------5-4-2-4-2-4-2-0-4- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-----------2---------------------------2-4-2-4-2-4-2-0-4-2-4-2- +A|-2-4-2-4-5---4-2-4-2-4-2-0-4-2-4-2-4-5------------------------- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----2---------------------------2----------------------------- +D|-4-5---4-2-4-2-4-2-0-4-2-4-2-4-5---5-4-2-------5-4-2---------4- +A|-----------------------------------------5-4---------5-4---2-2- +E|---------------------------------------------5-----------5----- + + + +E|----------------------------------------------------------- +B|----------------------3-3------------------------3-3------- +G|-4-4---2-22-2---------2-2---4-4---2-22-2---------2-2---6-6- +D|-4-4-2-2-22-2---5-5---0-0-4-4-4-2-2-22-2---5-5---0-0-6-6-6- +A|-----0--------5-5-5-------2-----0--------5-5-5-------4----- +E|--------------3-----2--------------------3-----2----------- + + + +E|---------------------2-22-2---------------------------2-22-2------- +B|---2-22-2------------2-22-2---------2-22-2------------2-22-2-----0- +G|---1-11-1---2-22-2------------6-6---1-11-1---2-22-2------------4--- +D|----------2-2-22-2-4--------6-6-6----------2-2-22-2-4--------2----- +A|-2--------0-----------------4-----2--------0----------------------- +E|-------------------4--------------------------------4-------------- + + + +E|---------------------2-2-2-2-2-0-0-0-0-0-0-2-2-2-2-2-2-0-0-0-0- +B|-----------3-------3-3-4-4-4-4-2-2-4-4-0-0-2-2-4-4-4-4-2-2-4-4- +G|-----0---2-------0-0-2-4-4-4-4-2-2-2-2-1-1-2-2-4-4-4-4-2-2-2-2- +D|---0---0-------0---2-0-4-4-4-4-2-2-2-2-2-2-2-2-4-4-4-4-2-2-2-2- +A|-3-----------2-----3---2-2-2-2-0-0-0-0-2-2-----2-2-2-2-0-0-0-0- +E|--------------------------------------------------------------- + + + +E|-0-0-2-2-2-0-0-0-3-3-3-3-2-3-2-----------0-2-3-5-3-2-0-2-3-0--- +B|-0-0-2-2-3-2-2-2-0-0-0-0-0-0-0-3-3-3-3-2-0-3-3-2-3-3-2-3-0-0--- +G|-1-1-2-2-2-2-2-2-0-0-0-0-0-0-0-2-2-2-2-2-0-2-2-2-2-2-2-4-0-1--- +D|-2-2-2-2-4-0-0-0-0-0-0-0-0-0-0-2-2-2-2---0-0-0-2-0-4-2-4-0-2--- +A|-2-2-----5-0-0-0-2-2-2-2---2-----------2-2-----0-------2-2-2--- +E|-----------------3-3-3-3-2-3-2---------------------------3-0-0- + + + +E|-----------2-0-0-0-3-3-3-3-2-3-2-----------0-2-3-5-3-2-0-2-3-0- +B|-----------3-2-2-2-0-0-0-0-0-0-0-3-3-3-3-2-0-3-3-2-3-3-2-3-0-0- +G|-----------2-2-2-2-0-0-0-0-0-0-0-2-2-2-2-2-0-2-2-2-2-2-2-4-0-1- +D|-----------4-0-0-0-0-0-0-0-0-0-0-2-2-2-2---0-0-0-2-0-4-2-4-0-2- +A|-----0-2-4-5-0-0-0-2-2-2-2---2-----------2-2-----0-------2-2-2- +E|-2-3---------------3-3-3-3-2-3-2---------------------------3-0- + + + +E|-------------2-0-0-0-3-3-3-3-2-3-2-----------0-2-3-5-3-2-0-2-3- +B|-------------3-2-2-2-0-0-0-0-0-0-0-3-3-3-3-2-0-3-3-2-3-3-2-3-0- +G|-------------2-2-2-2-0-0-0-0-0-0-0-2-2-2-2-2-0-2-2-2-2-2-2-4-0- +D|-------------4-0-0-0-0-0-0-0-0-0-0-2-2-2-2---0-0-0-2-0-4-2-4-0- +A|-------0-2-4-5-0-0-0-2-2-2-2---2-----------2-2-----0-------2-2- +E|-0-2-3---------------3-3-3-3-2-3-2---------------------------3- + + + +E|-0-------------2-0-0-0-3-3-3-3-2-3-2-----------0-2-3-5-3-2-0-2- +B|-0-------------3-2-2-2-0-0-0-0-0-0-0-3-3-3-3-2-0-3-3-2-3-3-2-3- +G|-1-------------2-2-2-2-0-0-0-0-0-0-0-2-2-2-2-2-0-2-2-2-2-2-2-4- +D|-2-------------4-0-0-0-0-0-0-0-0-0-0-2-2-2-2---0-0-0-2-0-4-2-4- +A|-2-------0-2-4-5-0-0-0-2-2-2-2---2-----------2-2-----0-------2- +E|-0-0-2-3---------------3-3-3-3-2-3-2--------------------------- + + + +E|-3-0-3-2-3-3-2-2-2-2-2-0-0-0-0-3-3-3-3-5-5-5-5-2-2-2-2-0-0-0-0- +B|-0-0-3-3-3-3-3-2-2-2-2-0-0-0-0-3-3-3-3-5-5-5-5-2-2-2-2-0-0-0-0- +G|-0-1-0-2-0-0-2-4-4-4-4-2-2-2-2-5-5-5-5-7-7-7-7-4-4-4-4-2-2-2-2- +D|-0-2-2-0-----0-4-4-4-4-2-2-2-2-5-5-5-5-7-7-7-7-4-4-4-4-2-2-2-2- +A|-2-2-3---2-2---2-2-2-2-0-0-0-0-3-3-3-3-5-5-5-5-2-2-2-2-0-0-0-0- +E|-3-0----------------------------------------------------------- + + + +E|-3-3-3-3-5-5-5-5-4-4-4-4-2-2-2-2-7-7-7-7----------4-4-4-4-2-2-2-2- +B|-3-3-3-3-5-5-5-5-4-4-4-4-2-2-2-2-7-7-7-7----------4-4-4-4-2-2-2-2- +G|-5-5-5-5-7-7-7-7-6-6-6-6-4-4-4-4-9-9-9-9-11-11-11-6-6-6-6-4-4-4-4- +D|-5-5-5-5-7-7-7-7-6-6-6-6-4-4-4-4-9-9-9-9-11-11-11-6-6-6-6-4-4-4-4- +A|-3-3-3-3-5-5-5-5-4-4-4-4-2-2-2-2-7-7-7-7----------4-4-4-4-2-2-2-2- +E|------------------------------------------------------------------ + + + +E|-7-7-7-7----------2-2-2-2-0-0-0-0-3-3-3-3-5-5-5-5-2-2-2-2-0-0-0-0- +B|-7-7-7-7----------2-2-2-2-0-0-0-0-3-3-3-3-5-5-5-5-2-2-2-2-0-0-0-0- +G|-9-9-9-9-11-11-11-4-4-4-4-2-2-2-2-5-5-5-5-7-7-7-7-4-4-4-4-2-2-2-2- +D|-9-9-9-9-11-11-11-4-4-4-4-2-2-2-2-5-5-5-5-7-7-7-7-4-4-4-4-2-2-2-2- +A|-7-7-7-7----------2-2-2-2-0-0-0-0-3-3-3-3-5-5-5-5-2-2-2-2-0-0-0-0- +E|------------------------------------------------------------------ + + + +E|-3-3-3-3-5-5-5-5-4-4-4-4---2-2-2-2---7-7-7-7---------9-9----4-4-4- +B|-3-3-3-3-5-5-5-5-4-4-------2-2-------7-7--------------------4-4--- +G|-5-5-5-5-7-7-7-7-6-6-----6-4-4-----4-9-9-----9-11-11-----11-6-6--- +D|-5-5-5-5-7-7-7-7-6-6-------4-4-------9-9-------11-11--------6-6--- +A|-3-3-3-3-5-5-5-5-4-4-------2-2-------7-7--------------------4-4--- +E|------------------------------------------------------------------ + + + +E|-4---2-2-2-2---7-7-7-7---------9-9----2-2-2-4---4-4-------4-4----- +B|-----2-2-------7-7--------------------2-2-2-4--------------------- +G|---6-4-4-----4-9-9-----9-11-11-----11-4-4-4-6-6-----6---6-----6--- +D|-----4-4-------9-9-------11-11--------4-4-4-6---------6---------6- +A|-----2-2-------7-7--------------------2-2-2-4--------------------- +E|------------------------------------------------------------------ + + + +E|---4-4---2-2-2-0---0-0-------0-0-------0-0---2-2-2-4---4-4----- +B|---------2-2-2-0-----------------------------2-2-2-4----------- +G|-6-----6-4-4-4-2-2-----2---2-----2---2-----2-4-4-4-6-6-----6--- +D|---------4-4-4-2---------2---------2---------4-4-4-6---------6- +A|---------2-2-2-0-----------------------------2-2-2-4----------- +E|--------------------------------------------------------------- + + + +E|---4-4-------4-4---2-2-2-0-0-0-0-0-2-4- +B|-------------------2-2-2-0-0-0-0-0-2-4- +G|-6-----6---6-----6-4-4-4-2-2-2-2-2-4-6- +D|---------6---------4-4-4-2-2-2-2-2-4-6- +A|-------------------2-2-2-0-0-0-0-0-2-4- +E|--------------------------------------- + diff --git a/guitar/tabs/Rush/need_some_love.prj b/guitar/tabs/Rush/need_some_love.prj new file mode 100644 index 0000000..26e800e --- /dev/null +++ b/guitar/tabs/Rush/need_some_love.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=need_some_love.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4) diff --git a/guitar/tabs/Rush/need_some_love.tab b/guitar/tabs/Rush/need_some_love.tab new file mode 100644 index 0000000..829d894 --- /dev/null +++ b/guitar/tabs/Rush/need_some_love.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|-----------------------------------------------0-0-0-2-0------- +B|-4-5-4-4-5-4-2-2-2---5-5-5-3-3-3---------------0-0-0-----3-0--- +G|-4-4-4-4-4-4-2-2-2---4-4-4-2-2-2-2-2-2-------3---------------2- +D|-4-2-4-4-2-4-2-2-2---2-2-2-0-0-0-2-2-2-2-2-4------------------- +A|-2-2-2-2-2-2-0-0-0---2-2-2-------0-0-0-2----------------------- +E|-------------------0-------------------0----------------------- + + + +E|--------------------------------------------------------------- +B|---3-3-3-------------2-0---3-3-3------------------------------- +G|-0-2-2-2-2-2-2-----------2-2-2-2-2-2-2------------------------- +D|---0-0-0-2-2-2-2-2-0-------0-0-0-2-2-2-2-----0-0-2-2-----0-0--- +A|---------0-0-0-2-----------------0-0-0-2-0-2---------0-2------- +E|---------------0-----------------------0---------------------0- + + + +E|--------------------------------------------------------------- +B|---3-3-5-4-4-4-4-4-4-4-4-4-5-4--------------------------------- +G|---0-2-4-4-4-4-4-4-4-4-4-4-4-4--------------------------------- +D|---0-0-2-4-4-4-4-4-4-4-4-4-2-4-----------------------0-2-2-2-2- +A|-------2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2---0-2-0-2---0-0-0-0- +E|-3-----------------------------0-0-0-0-0-0-3------------------- + + + +E|--------------------------------------------------------------------------- +B|-------------9-9-9-9-9-9-9-9-9-9-15----5----5-------15----15------15----15- +G|-------------9-9-9-9-9-8-8-8-8-8-14-16---14---16-14----16----4-16----14-16- +D|-2-----0-----9-9-9-9-9-7-7-7-7-7------------------------------------------- +A|-0-0-2---0---7-7-7-7-7-7-7-7-7-7------------------------------------------- +E|-----------3--------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------------- +B|----15------------------------------------------------------------------------------15------- +G|-14----12----14----12----12-14-14-16-16-16-16-16-16-16-14-12-14-14-12---12-14-12-14----14-16- +D|----------14----14----12-14----------------------------12-14----------4-------14------------- +A|--------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------- +B|-------------------------------------------------------------9--- +G|-14-12-14-12-14-12---12-7-9---11-----7-----------------------9--- +D|----------14----14-7-9------9----7-9---9-8-7-5-7-5-7-5-----2----- +A|-------------------------------------------------7-5-7---2-----7- +E|-------------------------------------------------------0--------- + diff --git a/guitar/tabs/Rush/nobodys_hero.prj b/guitar/tabs/Rush/nobodys_hero.prj new file mode 100644 index 0000000..e868033 --- /dev/null +++ b/guitar/tabs/Rush/nobodys_hero.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=nobodys_hero.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4) diff --git a/guitar/tabs/Rush/nobodys_hero.tab b/guitar/tabs/Rush/nobodys_hero.tab new file mode 100644 index 0000000..467df2f --- /dev/null +++ b/guitar/tabs/Rush/nobodys_hero.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-3-1-3-6-6-6-8-6----6-10----15----15-13---------------------------------------------- +B|-3-4-3-----------10------15----15-------13-13-13-13-13-11----11----10-11-18-18-18-18- +G|-5-3-3----------------------------------------------------12----12-10-10------------- +D|-5-1-5----------------------------------------------------------12----8-------------- +A|-3-1-3------------------------------------------------------------------------------- +E|-----5------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------- +B|-16-15----------15----10-11-------15-15-------16-15-16-18-18- +G|-------17-15-17----12-10-10----15-15-15-17-15---------------- +D|-------------------12----8--15-15---------------------------- +A|----------------------------17------------------------------- +E|------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/panacea.prj b/guitar/tabs/Rush/panacea.prj new file mode 100644 index 0000000..39b6f1a --- /dev/null +++ b/guitar/tabs/Rush/panacea.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=panacea.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4) diff --git a/guitar/tabs/Rush/panacea.tab b/guitar/tabs/Rush/panacea.tab new file mode 100644 index 0000000..e3b597d --- /dev/null +++ b/guitar/tabs/Rush/panacea.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|-5-------------5---------5-3-------------3---------3-3--------- +B|---5-------5-----5-----------3-------3-----3-----------3------- +G|-----0---0---0-----0---0-------0---0---0-----0---0-------0---0- +D|-------4-------------4-----------2-------------2-----------0--- +A|-5-------------5---------5-3-------------3---------3----------- +E|-----------------------------------------------------3--------- + + + +E|-----3-------------3-----3-5-----5-7-5-----------0---0------- +B|-3-----3-------3-----3-------5-------5---2---2---2-----1----- +G|---0-----0---0---0-----0-------2-----6-2---2-------------0--- +D|-----------0-------------------------7----------------------- +A|-----2---------------------0-----0-----0---0---0---0-3-----3- +E|-------------------3-----3----------------------------------- + + + +E|-0-0---------0-3-------3-----------0---0-------0-0---------0-0- +B|-1---1-----1-----3---------2---2---2-----1-----1---1-----1---0- +G|-------2-----------0-----2---2-------------0---------2-------1- +D|---3-----3-----------0---------------------------3-----3-----2- +A|-------------------------0---0---0---0-3-----3---------------2- +E|---------------3-------3-------------------------------------0- + + + +E|-0-0-0-0-0-0-0-3-3-----3-2-----2-h3-p2-----0----------------3----- +B|-0-0-0-1-0-1-1-3---0-------3-----------3---0---0-0-h1---3-1---3--- +G|-2-1-6-0-6-0-2-0-----0-------2-----------2-1-2------------------0- +D|-2-2-7-2-7-2-3-0---------0-----0-----------2---------------------- +A|-2-2-7-3-7-3-0-2---------------------------2-0--------0----------- +E|-0-0-5---5-----3-3-----3-------------------0----------------3----- + + + +E|-----------------0---0- +B|-----0-1-3-1-0-----3-1- +G|---2-----------0-----2- +D|-0-------------------2- +A|---0---------2-------0- +E|----------------------- + diff --git a/guitar/tabs/Rush/passage_to_bangkok.prj b/guitar/tabs/Rush/passage_to_bangkok.prj new file mode 100644 index 0000000..76d2d01 --- /dev/null +++ b/guitar/tabs/Rush/passage_to_bangkok.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=passage_to_bangkok.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4) diff --git a/guitar/tabs/Rush/passage_to_bangkok.tab b/guitar/tabs/Rush/passage_to_bangkok.tab new file mode 100644 index 0000000..cda5d65 --- /dev/null +++ b/guitar/tabs/Rush/passage_to_bangkok.tab @@ -0,0 +1,73 @@ +%TabMaster v2.00r% + + +E|---------------------------------10-10-10-10-9-9-------9------------- +B|---------------------------------------------7-7-10-10-7-8-7-8-7----- +G|-----------------------------------------------------------------8-9- +D|--------------------------------------------------------------------- +A|-----7---5---7-2---2------------------------------------------------- +E|-0-0---0---0-----0---0-8-0-7-8-3------------------------------------- + + + +E|---------------------3-----2-3-7-5-2-3-2-3-0-2-2-3-7-8-7-2-3-0- +B|---------9-7-9-4-5-5---5-3-3-5-8-7-3-3-3-0-2-3-3-5-8-8-8-3-0-2- +G|-8-9-8---9-7-9-4-5-5---5-4-2-5-7-7-2-3-2-0-2-2-2-5-7-7-7-2-0-2- +D|-------9-9-7-9-4-5-5---5-5-0-0-0-0-0-0-0-0-2-0-0-0-0-0-0-0-0-2- +A|---------7-5-7-2-3-3---3-5---------------2-0---------------2-0- +E|---------------------3-------------------3-----------------3--- + + + +E|---------------------------------------10-12-10----10---------------------------- +B|-10------------------12-------------12----------12----12-15-12-14-12----12------- +G|----11-9-7-7---9-7-7----7-4-7-4-7-4----------------------------13----14----16-14- +D|-------------9------------------------------------------------------------------- +A|--------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------- +B|-12-10------------------------------------------------------------------- +G|-------11-9-11-9-11-9-11-9-11-9-9-11------------------------------------- +D|-------------------------------------9-8-7------------------------------- +A|-------------------------------------------9-8-7------------------------- +E|-------------------------------------------------11-10-9-7-7-7-7-7-9-9-9- + + + +E|----------------------------------------------------------------------------- +B|-------------------------------------------------------------10-10-12-10---7- +G|-------------------------------------7---7-9-11---9-7-9-9-11-------------9--- +D|---------------------------------7-9---9--------7---------------------------- +A|-----------------------------9-9--------------------------------------------- +E|-9-9-10-10-10-10-10-12-12-12------------------------------------------------- + + + +E|-7---9----0-10-12-10-7-7-10-7-------10----------------------------------------------- +B|---7---10---------------------10-12----12-15-12-12-12-12-10-12-12-12-12-10-10-10----- +G|---------------------------------------------------------------------11----------9-7- +D|------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------7---------------------- +B|----------0---10------10----10-10---------0-10------17----19---19-17-15-15---------- +G|---7-9-11---9----11-9----11-9-----11-9-11------9-11----16---------------16-14-14-16- +D|-9---------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------ + + + +E|----------------------------------------2------------------- +B|-5----15-------12-12---10-10-12----14---3------------------- +G|---14----16-14-------6----------11----9-2------------------- +D|----------------------------------------0---------0-0-1-1-2- +A|------------------------------------------0-0-4-4----------- +E|------------------------------------------------------------ + diff --git a/guitar/tabs/Rush/passagetobangkok.prj b/guitar/tabs/Rush/passagetobangkok.prj new file mode 100644 index 0000000..6c85d1b --- /dev/null +++ b/guitar/tabs/Rush/passagetobangkok.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=passagetobangkok.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4) diff --git a/guitar/tabs/Rush/passagetobangkok.tab b/guitar/tabs/Rush/passagetobangkok.tab new file mode 100644 index 0000000..9fc0560 --- /dev/null +++ b/guitar/tabs/Rush/passagetobangkok.tab @@ -0,0 +1,82 @@ +%TabMaster v2.00r% + + +E|---------------------------------10-10-10-10-9-9-------9------------- +B|---------------------------------------------7-7-10-10-7-8-7-8-7----- +G|-----------------------------------------------------------------8-9- +D|--------------------------------------------------------------------- +A|-----7---5---7-2-2--------------------------------------------------- +E|-0-0---0---0-------0-0-8-0-7-8-3------------------------------------- + + + +E|-----------------------3-2-3-7-5-2-3-2-3-0-2-2-3-7-8-7-2-3-0---- +B|---------9-7-9-4-5-5-5-3-3-5-8-7-3-3-3-0-2-3-3-5-8-8-8-3-0-2-10- +G|-8-9-8---9-7-9-4-5-5-5-4-2-5-7-7-2-3-2-0-2-2-2-5-7-7-7-2-0-2---- +D|-------9-9-7-9-4-5-5-5-5-0-0-0-0-0-0-0-0-2-0-0-0-0-0-0-0-0-2---- +A|---------7-5-7-2-3-3-3-5---------------2-0---------------2-0---- +E|-----------------------3---------------3-----------------3------ + + + +E|--------------------------------------10-12-10----10---------------------------- +B|--------------------------------12-12----------12----12-15-12-14-12----12------- +G|-11-9-7-7-9-7---7-4-7-4-7-4-7-4-------------------------------------13----14-16- +D|--------------9----------------------------------------------------------------- +A|-------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------- +B|----12-10----------------------------------------------------------------- +G|-14-------11-9-11-9-11-9-11-9-11-9-9-11-9-9-8-7--------------------------- +D|------------------------------------------------9-8-7--------------------- +A|------------------------------------------------------9-8-7--------------- +E|------------------------------------------------------------11-10-9-7-7-7- + + + +E|------------------------------------------------------------------------- +B|-----------------------------------------------------------------------7- +G|-----------------------------------------------7---7-9-11-9-7---9-9-11--- +D|-------------------------------------------7-9---9------------7---------- +A|---------------------------------------9-9------------------------------- +E|-7-7-9-9-9-9-9-10-10-10-10-10-12-12-12----------------------------------- + + + +E|----------------------7-9-10-10-12-10-7-7-10-7----7-------10------------------------- +B|-10-10-12-10-7---7-10--------------------------10---10-12----12-15-12-12-12-12-10-12- +G|---------------9--------------------------------------------------------------------- +D|------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------ +B|-12-12-12-10----10-10-7--------------10------10------10------10-10---------10-10---- +G|-------------11---------9-7---7-9-11----9-11----9-11----9-11-------11-9-11-------11- +D|----------------------------9------------------------------------------------------- +A|------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------ + + + +E|----------17------------------------------------------------------------------------------2- +B|----17-19----19-17-15----15-------15-------15-------15-------12-12-10----10-12-14-12-10---3- +G|-16-------------------16----14-16----14-16----14-16----14-16----------11----------------9-2- +D|------------------------------------------------------------------------------------------0- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|------------------- +B|------------------- +G|------------------- +D|---------0-0-1-1-2- +A|-0-0-4-4----------- +E|------------------- + diff --git a/guitar/tabs/Rush/presto.prj b/guitar/tabs/Rush/presto.prj new file mode 100644 index 0000000..cdbae2c --- /dev/null +++ b/guitar/tabs/Rush/presto.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=presto.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4) diff --git a/guitar/tabs/Rush/presto.tab b/guitar/tabs/Rush/presto.tab new file mode 100644 index 0000000..0f81051 --- /dev/null +++ b/guitar/tabs/Rush/presto.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-2-------------2-3-3-----3-0-3---------5--- +B|-3-3-----------3-3-3-3-3-3-2-3-0---0------- +G|-2-0-4-2-4-2-4-2-0-2-----0-2-0-2-4-2------- +D|-0-2-4-2-4-2-4-0-2-0-----0-2-0-2-4-2-6---4- +A|---3-2-2---------3-------2-0-2-2-4-2-6---4- +E|-------------------------3---3-0-2-0-4----- + diff --git a/guitar/tabs/Rush/prime_mover.prj b/guitar/tabs/Rush/prime_mover.prj new file mode 100644 index 0000000..31964a7 --- /dev/null +++ b/guitar/tabs/Rush/prime_mover.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=prime_mover.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4) diff --git a/guitar/tabs/Rush/prime_mover.tab b/guitar/tabs/Rush/prime_mover.tab new file mode 100644 index 0000000..42f223a --- /dev/null +++ b/guitar/tabs/Rush/prime_mover.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|---------------------------------2-2-2-2-2---3-3-2-0---3-2-0--- +B|---------------------------------3-3-3-3-3-2-3-3-----3-------3- +G|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-4-2-0-0--------------- +D|-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-4-2-0-0--------------- +A|-----------------------------------------2-0-2-2--------------- +E|---------------------------------------------3-3--------------- + + + +E|-2-0---3-2-0-------------------------------3---------0----------- +B|-----3-------3------------------s3-2-------3-------0---0-------0- +G|--------------------------2---2------2-----0-----6-----------4--- +D|------------------------2---2----------2---0---6-----------4----- +A|---------------2-0-0-s4------------------0-2-4-----------2------- +E|-------------------------------------------3--------------------- + + + +E|-0---2---3---3----- +B|---0-3---3-3-3----- +G|-----2-2-0-2-0----- +D|-----0-2-0-0-0-2-9- +A|-------0---0-2-2-9- +E|-----------2-3-0--- + diff --git a/guitar/tabs/Rush/red_barchetta.prj b/guitar/tabs/Rush/red_barchetta.prj new file mode 100644 index 0000000..788eb31 --- /dev/null +++ b/guitar/tabs/Rush/red_barchetta.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=red_barchetta.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4) diff --git a/guitar/tabs/Rush/red_barchetta.tab b/guitar/tabs/Rush/red_barchetta.tab new file mode 100644 index 0000000..c26ab3e --- /dev/null +++ b/guitar/tabs/Rush/red_barchetta.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|------------------------------------------------------------------ +B|------------------------------7-------3-2-----2-----3-2-------3-2- +G|-0-12--------12---0---7---5---------2-------2---2-----------2----- +D|-0------7-------7-0-----7---------2-------2-------2-------2------- +A|------7---12--------9-------9---0--------------------------------- +E|--------------------------------------------------------2--------- + + + +E|-----------------------------------------------------0--------- +B|-----2-----3-2-----------3-2-----2-----3-2---------3---3---2-2- +G|---2---2---------2-----2-------2---2---------2---2-------2----- +D|-2-------2-----2-----2-------2-------2-----2---0--------------- +A|--------------------------------------------------------------- +E|-------------------3------------------------------------------- + + + +E|--------0-------1-----1-----1-----1-----1-----1-----3-3--------- +B|-2-2-h3---------1-----1-----1-----1-----1-----1-----3-3--------- +G|----------------------------------------------------4-4-------2- +D|----------------------------------------------------5-5---2---0- +A|----------3-2-------------------------------------3-5-5---0----- +E|--------------1---0-0---0-1---0-0---0-1---0-0---0-1-3-3-3---3--- + + + +E|---------------------7-s9--10-9--1-1-----1-1-----1-1-----5-s7-7-7-7- +B|---------------------8-s10-10-10-1-1-1-1-1-1-1-1-1-1-1-1-6-s8-8-8-8- +G|-------2-2-------2---7-s9--9--9--2-2-0-0-2-2-0-0-2-2-0-0-5-s7-7-7-7- +D|---2---0-0---2---0---------------3-3-2-2-3-3-2-2-3-3-2-2----------0- +A|---0---------0-------------------3-3-3-3-3-3-3-3-3-3-3-3------------ +E|-3---3-----3---3---3------------------------------------------------ + + + +E|---------7-9------------9--7---------7-9--10-9--7-7-9--10-9------------ +B|---------8-10-----------10-8---------8-10-10-10-8-8-10-10-10-3-1-1-3-1- +G|---------7-9------------9--7---------7-9--9--9--7-7-9--9--9--3-2-2-3-2- +D|-0-0-0-0-0-0--0-0-0-0-0-0--0-0-0-0-0-0-0--0--0--0-0-0--0--0--3-3-3-3-3- +A|-------------------------------------------------------------1-3-3-1-3- +E|---------------------------------------------------------------1-1---1- + + + +E|--------------------------------------------------------------------9-7-5--- +B|-1-6-4-4-6-4-4-9-7-7-9-7-7-12-------------12-12-12-12-12-12-12-12---------7- +G|-2-6-5-5-6-5-5-9-8-8-9-8-8-12-11-11-11-11-12-12-12-12-12-12-12-12----------- +D|-3-6-6-6-6-6-6-9-9-9-9-9-9-12-12-12-12-12-12-12-12-12-12-12-12-12----------- +A|-3-4-6-6-4-6-6-7-9-9-7-9-9-10-12-12-12-12-10-10-10-10-10-10-10-10----------- +E|-1---4-4---4-4---7-7---7-7----10-10-10-10-------------------------5--------- + + + +E|-------------------------------------------------------------------- +B|-5--------------------------------------------------------7-------7- +G|---6-4-------------------------4-6-7-6-7-9-7-9-b11-r9-7-9---9-b11--- +D|-------7-4---------------4-6-7-------------------------------------- +A|-------------------4-5-7-------------------------------------------- +E|-----------5-5-5-7-------------------------------------------------- + + + +E|---------------------------------------------------------------------- +B|-h8-p7---5-----------------------------5-5--------5---7-7-7-7-7-7----- +G|-------7---7-6-7-b9-r7-b9-7-6--------6----------6---6-------------6-6- +D|------------------------------7---s7-------5-s7----------------------- +A|--------------------------------7------------------------------------- +E|---------------------------------------------------------------------- + + + +E|--------------------5--------5-----------5----------10-------10--------12----------- +B|--------7---------3--------3-----------3---------10-------10------------------------ +G|---4-s6---2-s3-s4-----3-s4-----2-s3-s4-----9-s11-------11-------11-s12----12-12-s14- +D|-7---------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------ + + + +E|-14----------------- +B|-------------------- +G|----0---2-------0--- +D|------2-------0---4- +A|----------0-4------- +E|-------------------- + diff --git a/guitar/tabs/Rush/red_lenses.prj b/guitar/tabs/Rush/red_lenses.prj new file mode 100644 index 0000000..22dc60c --- /dev/null +++ b/guitar/tabs/Rush/red_lenses.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=red_lenses.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4) diff --git a/guitar/tabs/Rush/red_lenses.tab b/guitar/tabs/Rush/red_lenses.tab new file mode 100644 index 0000000..3bceada --- /dev/null +++ b/guitar/tabs/Rush/red_lenses.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|-15-15-15-15-15-15-15-15-11-11-11-11-11-11-11-11-11-11-11-11---------------------------------- +B|-14-14-14-14-14-14-14-14-11-11-11-11-11-11-11-11-11-11-11-11---------------------------------- +G|-15-15-15-15-15-15-15-15-11-11-11-11-11-11-11-11-11-11-11-11---------------------------------- +D|-13-13-13-13-13-13-13-13-11-11-11-11-11-11-11-11-11-11-11-11-10-10-10-10-10-10-10-10-10-10-10- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|----------------------11-------11-14---------------------11-------11-14------------- +B|----5-9-10-11---13-14-11-13-14---------5-9-10-11---13-14-11-13-14---------5-9-10-11- +G|----4-9-10-11-0-------12-------------0-4-9-10-11-0-------12-------------0-4-9-10-11- +D|-10-2-8----10-0-------13-------------0-2-8----10-0-------13-------------0-2-8----10- +A|----2-9-10-11--------------------------2-9-10-11--------------------------2-9-10-11- +E|------------------------------------------------------------------------------------ + + + +E|---9-9-9------9-11-------------------------11-11-11-11-11-11-11-11-11------ +B|---------11-9------------------7-----------11-11-11-11-11-11-11-11-11---13- +G|-0-----------------0-----6-6-8-------6-6-8-11-11-11-11-11-11-11-11-11-0-13- +D|-0-----------------0-6-8---------6-8-------13-13-13-13-13-13-13-13-13-0-13- +A|------------------------------------------------------------------------11- +E|--------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------- +B|-13-13-13-13-13-13-13---------------------------12-12-12-12-12-12-11-11-11-11---- +G|-13-13-13-13-13-13-13-0-11-11-11-11-11-11-11-11---------------------------------- +D|-13-13-13-13-13-13-13-0-11-11-11-11-11-11-11-11---------------------------------- +A|-11-11-11-11-11-11-11---------------------------11-11-11-11-11-11-11-11-11-11-11- +E|--------------------------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/red_sector_a.prj b/guitar/tabs/Rush/red_sector_a.prj new file mode 100644 index 0000000..7300f8d --- /dev/null +++ b/guitar/tabs/Rush/red_sector_a.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=red_sector_a.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4) diff --git a/guitar/tabs/Rush/red_sector_a.tab b/guitar/tabs/Rush/red_sector_a.tab new file mode 100644 index 0000000..ee950e6 --- /dev/null +++ b/guitar/tabs/Rush/red_sector_a.tab @@ -0,0 +1,73 @@ +%TabMaster v2.00r% + + +E|-15-12-12-12-12-15-12-12----12----12-12----5-5-5-------5-5---5---8---5-5------ +B|-13-13-15-15-13-13-13-13-15-13-15-13-13-15-6-6-5-5-5-5-6-6-8-6-8-6-6-6-6-6---- +G|-14-14-14-14-14-14-14-14-14-14-14-14-14-14-5-5-5-7-7-7-5-5-5-5-5-5-5-5-5-5-10- +D|-12----12-12----12-12-12-12--------------------7-7-7-7-7-7-7-7-7-7-7-7-7-7-10- +A|-------------------------------------------------------------------------5---- +E|------------------------------------------------------------------------------ + + + +E|-12-15-15-12-12-12-15-12-12-5---0-0-5-0-0-5-0-0-5-0-0---5-5-0-0-5------- +B|-13-13-13-13-15-13-13-13-15-6-8-3-1-5-3-1-5-3-1-5-3-1-6-5-5-3-1-5------- +G|-14-14-14-14-14-14-14-14-14-5-5-2-2-5-2-2-5-2-2-5-2-2-5-2-2-2-2-5------- +D|-14-12-------------12-12-0--7-7-0-0-7-0-0-0-0-0-0-0-0-3-2-2-0-0-0-2-0-0- +A|-12-------------------------------------------------------0------------- +E|------------------------------------------------------------------------ + + + +E|---------5-5-5-5-5-------------------------------------------------- +B|---------5-5-5-5-5-----------0-----------0-----------------------12- +G|---------2-2-2-2-2-2-------2---2-------2---2---0------12------------ +D|-3-0-2-2-2-2-2-2-2-3-----3-----------3-------3---7-------12---7----- +A|---------0-0-0-0-0-3---3---------3-3-------------7----------7------- +E|-------------------1-1-------------1---------------12---------12---- + + + +E|---------------------------------------------------------------------12-12-12-12---- +B|----------7-----------7-12----12-13----15----13-13-13-13-15-13-12-13-13-13-13-13-15- +G|-12-----5---7-------5---12-------------------------------12-14-12-14-14-14-14-14---- +D|------5---------5-5-----12-12-------12----12-------------12------------------------- +A|----4---------4---------10---------------------------------------------------------- +E|------------------------------------------------------------------------------------ + + + +E|--------12-----------------------7-7-5---7-7-5----------12-12-------12-12---------- +B|-p13-15----15-13-15-13-13-5-s7-5-8-8-7-5-8-7-7-12-13-12-15-15-10-10-13-12---------- +G|-----------12-12-12----12-5-s7-5-7-7-7-5-7-7-7-12-12-12-12-12-10-10-12-12-----5-s9- +D|-----------------------14-5-s7-5-------5-------12-12-12-12-12-10-10---------7------ +A|--------------------------------------------------------------------------7-------- +E|----------------------------------------------------------------------------------- + + + +E|-----------------------------------------0-----3-3---3-3-------3-0---0-3--- +B|----12----1--------12-------10-13-13-p12---1---1---1---1-1-1-1-1-1-3-1-3--- +G|-12-----------2-s5----12----10-------------2---2---2---0-0-0-0-0-0-0-0-0-0- +D|-------15---2------------10--------------2---2-2-2---2-2-------2-2-3-3-0-0- +A|-----------------------------------------------------------------------2--- +E|-----------------------------------------------------------------------3--- + + + +E|-3-3-5-5-5-5-5-5-5-0-0-0-0-0-0-0-0---0-0-0---0-12-12-12-------15-12-12- +B|-3-3-3-3-3-3-3-3-3-1-3-1-1-3-1-1-3-0-1-1-3-0-1-13-13-15-13-13-13-13-13- +G|-0-0-0-0-0-0-0-0-0-2-2-2-2-2-2-2-2-2-2-2-2-2-2-14-14-14-14-14-14-14-14- +D|-0-0-0-0-0-0-0-0-0-2-2-2-2-2-2-2-2-2-2-2-2-2-2----------15-12-12-15-15- +A|-2-2-----------------0-0-0-0-0-0-0---0-0-0---0------------------------- +E|-3-3------------------------------------------------------------------- + + + +E|-12-12-12-15-12-12-12----5-5-0-0-0-5-5------12----- +B|-13-15-13-13-13-13-13-15-6-6-1-3-1-6-6-8-10-13---8- +G|-14-14-14-14-14-14-14-14-5-5-2-2-2-5-5-5-10-14---5- +D|-15-------12-15-15-15-12---------------7-10-14---7- +A|--------------------------------------------12-5-5- +E|--------------------------------------------------- + diff --git a/guitar/tabs/Rush/rivendell.tab b/guitar/tabs/Rush/rivendell.tab new file mode 100644 index 0000000..3a4efe2 --- /dev/null +++ b/guitar/tabs/Rush/rivendell.tab @@ -0,0 +1,201 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / r / rush / rivendell.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: fkam_ltd@uhura.cc.rochester.edu (Kevin McFadden)
+Subject: TAB: Rivendell by RUSH
+Date: 10 May 92 02:08:51 GMT
+
+Here is the tab to RIVENDELL by RUSH.  I don't have the tape anymore so you
+will have to check how many times and the order the segments are played. 
+
+It is a very easy, introductory type acoustic piece (i.e. FOR BEGINNERS, it
+is the first song I could play beginning to end, except for Living after
+Midnight:)
+
+Rivendell by RUSH: From the album Flight by Night
+
+Transcribed by Kevin McFadden
+
+
+
++-----------|-----------|-------_-_-------|--/-2---||--5--------|--5--------+
++--3-----3--|--2-----2--|--1---0-1-0------|--\-3---||------3----|--3---3----+
++*----0-----|----0------|----0-------2-0--|--/-2---||*---4---4--|----4---4--+
++*------0---|------0----|-----------------|--\-0---||*-0--------|-----------+
++--2-----2--|--1-----1--|--0--------------|--/-0---||-----------|-----------+
++-----------|-----------|-----------------|--------||-----------|-----------+
+
+
+
++--5--------|--5-----5--|--3--------|--3--------|--3--------|--3-----3--+
++------3----|--3---3----|----0---0--|----0---0--|----0---0--|----0------+
++----4---4--|----4------|------5----|--5---5----|------5----|--5---5----+
++--0--------|--------0--|--0--------|-----------|--0--------|--------0--+
++-----------|-----------|-----------|-----------|-----------|-----------+
++-----------|-----------|-----------|-----------|-----------|-----------+
+
+
+
++--3--------|--3--------|--0--------|--0-----0--|--0--------|-----------+
++----0---0--|----0------|----1---1--|----1------|----1------|--------1--+
++------0----|------0----|------0----|------0----|------0----|------0----+
++--2--------|--------2--|--3--------|--------2--|--------2--|----2------+
++-----------|-----------|-----------|-----------|--3--------|--3--------+
++-----------|-----------|-----------|-----------|-----------|-----------+
+
+                         X2    X2
+           _ _                  
++--2------2-3-2----|---/-2---|----||-------------||---------------------+
++----3----------3--|---\-3---|----||-------------||---------------------+
++------2-----------|---/-2--*|---*||------------*||---------------------+
++--0---------------|---\-0--*|---*||------------*||---------------------+
++------------------|---/-0---|----||-------------||---------------------+
++------------------|---------|----||-------------||---------------------+
+
+
+                                             X2
++--3---------|--3--------|--3--------|--\--0---|--1--------|--3-----3--+
++*----3---3--|----3------|----3------|--/--2--*|----1---1--|----3-0----+
++------0-----|------0----|------0----|--\--2---|------2----|-----------+
++*-----------|--------0--|--------0--|--/--2--*|--3--------|--0--------+
++--3---------|--2--------|-----------|--\--0---|-----------|-----------+
++------------|-----------|--3--------|---------|-----------|-----------+
+
+
+                                                                     
+        _ _
++--2---2-3-2----|--\--2--|--0--------|--0--------|--3--------|--\--0--+
++------------3--|--/--3--|----1---1--|----1------|----3------|--/--2--+
++---------------|--\--2--|------2----|------0----|------0----|--\--2--+
++--0-0----------|--/--0--|--3--------|--------2--|--------0--|--/--2--+
++---------------|--\--0--|-----------|--3--------|-----------|--\--0--+
++---------------|--------|-----------|-----------|--3--------|--------+
+
+                                                          _ _
++-----------|-----------|-------_-_-------|--/-2--|--2-2-2-3-2--------+
++--3-----3--|--2-----2--|--1---0-1-0------|--\-3--|------------3------+
++*----0-----|----0------|----0-------2-0--|--/-2--|--------------2----+
++*------0---|------0----|-----------------|--\-0--|----------------0--+
++--2-----2--|--1-----1--|--0--------------|--/-0--|-------------------+
++-----------|-----------|-----------------|-------|-------------------+
+
+
+
++---------------|------------3--|-----+
++---------------|------3---3----|-----+
++------------0--|----0---0------|--0--+
++------0---0----|--0------------|-----+
++----2---2------|---------------|-----+
++--3------------|---------------|--3--+
+   ===== =====     ===== =====
+     3     3         3     3
+
+KEY:
+     _ _
+    2 3 2   : Hammer on, Pull off
+    
+    =====   : Triplet
+      3
+
+      \
+      /
+      \     : Strum slowly
+      /
+      \
+      /
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Rush/roll_the_bones.prj b/guitar/tabs/Rush/roll_the_bones.prj new file mode 100644 index 0000000..24aebef --- /dev/null +++ b/guitar/tabs/Rush/roll_the_bones.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=roll_the_bones.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4) diff --git a/guitar/tabs/Rush/roll_the_bones.tab b/guitar/tabs/Rush/roll_the_bones.tab new file mode 100644 index 0000000..271f10b --- /dev/null +++ b/guitar/tabs/Rush/roll_the_bones.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|-2-2-2-2-2-0-0-0-2-2-2-2-2-0-0-0-2-2-2-2-2-0-0-0-3-3-2-2-2-2-2- +B|-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3- +G|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2- +D|-------------------------------------------------2-0----------- +A|-------------------------------------------------0-0----------- +E|--------------------------------------------------------------- + + + +E|-0-0-0-2-2-2-2-2-0-0-0-3-3-2-2-2-2-2-0-0-0-2-2-2-2-2-0-0-0-8-8- +B|-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-8-8- +G|-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2----- +D|-----------------------2-0------------------------------------- +A|-----------------------0-0------------------------------------- +E|--------------------------------------------------------------- + + + +E|-8-8-8-8-8-8-8-0-0-0-1-1-2-3-3-3-3-3-s8-8-8-8-8-8-8-8-8-8-5-5-5- +B|-8-8-7-7-5-5-7-3-3-3-3-3-3-3-3-3-3-3-s8-8-8-8-8-7-7-5-5-7-6-6-6- +G|----------------------------------------------------------5-5-5- +D|---------------------------------------------------------------- +A|---------------------------------------------------------------- +E|---------------------------------------------------------------- + + + +E|-5-5-5-5-5-5-5-5-s7-7------------------------------------------------------- +B|-6-6-6-6-6-6-6-6-s8-8-17-20-18-17-15-17-12-13---14----13---7-8-10-8-7-7----- +G|-5-5-5-5-5-5-5-5-s7-7-------------------------4----14----7-9--------9-9---7- +D|------------------------------------------------------------------------9--- +A|---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|---8---7-8-s8-7-7-8-12----12----12-----------------12----12-15-15-17-15-12-15-15-17-15- +B|-----7-----------------10----10----10-s12-12-13-15----15------------------------------- +G|-7---9--------------------------------------------------------------------------------- +D|--------------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------- + + + +E|-------------22-23-22-23-------12-------12----------------------------12----12-------15---- +B|-0-12-16-s12-------------0-5-0----15-12----15-0-15-12-15-12-s11-12-15----15----15-17----15- +G|------------------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------- + + + +E|-12------12----12-------12----------20-18--------------------- +B|----7-15----17----15-17----15-17-15-------------2-12---------- +G|------------------------------------------12-14------14-12-12- +D|-------------------------------------------------------------- +A|-------------------------------------------------------------- +E|-------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/show_dont_tell.prj b/guitar/tabs/Rush/show_dont_tell.prj new file mode 100644 index 0000000..f4b5d8d --- /dev/null +++ b/guitar/tabs/Rush/show_dont_tell.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=show_dont_tell.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4) diff --git a/guitar/tabs/Rush/show_dont_tell.tab b/guitar/tabs/Rush/show_dont_tell.tab new file mode 100644 index 0000000..c355df5 --- /dev/null +++ b/guitar/tabs/Rush/show_dont_tell.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|-3-----------------------------3---8-8-7------------------------- +B|-3----7-5-5--------------------3---8-8-7-5-5-7-5----------------- +G|-2-s8-7-5-5--------------------2-7-7-7-7-5-5-7-5-----2---0------- +D|-2-----------------------------2---7-7-7-----------2---2---2---2- +A|-0----------3-2-------0---3--0-------------------0-----------3--- +E|----------------3-2-3---1-s4------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----0-0-----0-------2-------0-------5-5-------------2---0----- +D|---4-------0---0---2---2-------3---5---------5-----2---2---2--- +A|-5---------------0---------3-----3---------5---5-0-----------3- +E|---------3---------------1---------------3--------------------- + + + +E|---------3--------5-3-5---------3-3-5-3------------------20-20-17-20-17---- +B|---------3-8-8-10-5-3-5---------3-3-8-3---20-19-17-19-17----------------20- +G|-------0-2--------7-5-7-----5---0-0-5-2-5---------------------------------- +D|-2---4------------7-5-5-7-3-5-5-2-2-7-------------------------------------- +A|---5--------------5-3-7-7-3-3-5-0-0-5-------------------------------------- +E|----------------------5-5-1---3-------------------------------------------- + + + +E|-17----------------------------------------------------- +B|----20-20-17-20-17-------------------------------------- +G|-------------------19-17-17-19-17-16-------------------- +D|-------------------------------------------------------- +A|-------------------------------------3-2-------0---3--0- +E|-----------------------------------------3-2-3---1-s4--- + diff --git a/guitar/tabs/Rush/spirit_of_radio.prj b/guitar/tabs/Rush/spirit_of_radio.prj new file mode 100644 index 0000000..77272a4 --- /dev/null +++ b/guitar/tabs/Rush/spirit_of_radio.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=spirit_of_radio.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4) diff --git a/guitar/tabs/Rush/spirit_of_radio.tab b/guitar/tabs/Rush/spirit_of_radio.tab new file mode 100644 index 0000000..4cccab0 --- /dev/null +++ b/guitar/tabs/Rush/spirit_of_radio.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------------------------- +B|-7-5-3-5-10-5-3-5-7-5-3-5-9-7-5-3-5-7-5-3-5-10-5-3-5-7-5-3-5-9-7- +G|----------------------------------------------------------------- +D|----------------------------------------------------------------- +A|----------------------------------------------------------------- +E|----------------------------------------------------------------- + + + +E|-------b5---5---------------5-------------b5-------b5---------5--- +B|-5-3-5---------------------------------------0----------0-------0- +G|---------------------------------------------0-0--------0-0------- +D|---------------------------------------------------4-------------- +A|-------9--6-6-6-6-6-6-6-6-7---7-7-7-7-7-7-9--------4--------6----- +E|-------9--6-6-6-6-6-6-6-6-7---7-7-7-7-7-7-9------0-2--2-----6----- + + + +E|-----5-----4-0-----2-2-----4-0-----------0---------0----------- +B|---------0-5-0---0-0-4-----4-0-----------0-0-------0-0--------- +G|-0-----1-------4---------------2-2-4-1---------4--------------- +D|---2---2-------4-------6-------2-2-4-2---------4-----------6-6- +A|---2---2-------2-------6-------0-0-2-2-------0-2-2---------6-6- +E|---0---0---------------4-4-----------0-0---------------4-0-4-4- + + + +E|-----------------------------------------b5-------5------------- +B|-------------------------7-5-3-9-7-5-0-0-2--2-2-4---4-4-0-0-0-0- +G|-------------------------------------1-1-4--4-4-4---4-4-2-2-0-0- +D|-6-6-6-6-6-6-7-7-7-7-7-9-------------1-1-4--4-4-5---5-5-2-2-1-1- +A|-6-6-6-6-6-6-7-7-7-7-7-9-------------2-2-4--4-4-6---6-6-2-2-2-2- +E|-4-4-4-4-4-4-5-5-5-5-5-7-------------2-2-2--2-2-6---6-6-0-0-2-2- + + + +E|-----------------4-4-5-7-0--- +B|-0-0-----------0-5-5-5-5-0--- +G|-0-0-3-3-3-3-3-0---------1-9- +D|-1-1-2-2-2-2-2-4---------2-9- +A|-2-2-0-0-0-0-0-2---------2-7- +E|-2-2---------------------0--- + diff --git a/guitar/tabs/Rush/subdivisions.prj b/guitar/tabs/Rush/subdivisions.prj new file mode 100644 index 0000000..0379bc9 --- /dev/null +++ b/guitar/tabs/Rush/subdivisions.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=subdivisions.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4) diff --git a/guitar/tabs/Rush/subdivisions.tab b/guitar/tabs/Rush/subdivisions.tab new file mode 100644 index 0000000..659058d --- /dev/null +++ b/guitar/tabs/Rush/subdivisions.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------------------------- +B|---------------------------------------------------------15-15-14-12------------- +G|-------4-4---2---4---4---------16-14-11-14---------------------------14-11----11- +D|-----0-----0---0---0---9-11-12-------------12-11-9-11-12-------------------14---- +A|---2----------------------------------------------------------------------------- +E|-3------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------------- +B|---------------------12--------------------------------------------15-15-14-12----------------12- +G|-14---------------14----11-14-11-h14-p11-s9------------------------------------14-11----11-14---- +D|----12-11-9-11-12---------------------------11-11-h12-p11-s9-11-12-------------------14---------- +A|------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------- +B|---------------------------------------------------------15-15-14-12------------- +G|-------4-4---2---4---4---------16-14-11-14---------------------------14-11----11- +D|-----0-----0---0---0---9-11-12-------------12-11-9-11-12-------------------14---- +A|---2----------------------------------------------------------------------------- +E|-3------------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------------------------------------- +B|---------------------12--------------------------------------------15-15-14-12----15-14-12-h14-p12- +G|-14---------------14----11-14-11-h14-p11-s9------------------------------------14------------------ +D|----12-11-9-11-12---------------------------11-11-h12-p11-s9-11-12--------------------------------- +A|--------------------------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------7-7-7-8-8-7- +B|-----------------------------------------14-15-5-------------8-8-8-8-8-8- +G|-14-7-9-11-9-7-9-4-6-2-12-14-16-14-12-14---------5---4-------7-7-7-7-7-7- +D|----0----------------------------------------------5---4---5------------- +A|---------------------------------------------------------5--------------- +E|------------------------------------------------------------------------- + + + +E|-7-8-8- +B|-8-8-8- +G|-7-7-7- +D|------- +A|------- +E|------- + diff --git a/guitar/tabs/Rush/superconductor.prj b/guitar/tabs/Rush/superconductor.prj new file mode 100644 index 0000000..b127ccb --- /dev/null +++ b/guitar/tabs/Rush/superconductor.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=superconductor.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4) diff --git a/guitar/tabs/Rush/superconductor.tab b/guitar/tabs/Rush/superconductor.tab new file mode 100644 index 0000000..68d0457 --- /dev/null +++ b/guitar/tabs/Rush/superconductor.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|-------------------------------------------------------6------- +G|-2-2---2---2-2-----2-2---2---2-2-------5-5-3-5-3-5-5-3-5-5-5-3- +D|-2-2---2---2-2---2-2-2---2---2-2-----2-5-5-3-5-3-5-5-3-3-5-5-3- +A|-0-0---0---0-0---2-0-0---0---0-0-----2-3-3---3---3-3---3-3-3--- +E|-----3---3-----3-0-----3---3-----3-2-0------------------------- + + + +E|----------------------------------------------------- +B|-------------------------------------------------6-6- +G|-5-3-5-5----------------8-s12-10---5-5-3-3-5-5---5-3- +D|-5-3-5-5-----------8-10----------5-5-5-3-3-5-5-3-3-3- +A|-3---3-3-------s10-----------------3-3-----3-3---3--- +E|---------6-5-3--------------------------------------- + diff --git a/guitar/tabs/Rush/take_a_friend.tab b/guitar/tabs/Rush/take_a_friend.tab new file mode 100644 index 0000000..c37e8ae --- /dev/null +++ b/guitar/tabs/Rush/take_a_friend.tab @@ -0,0 +1,206 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / r / rush / take_a_friend.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+
+
+From rodrigot@bigfoot.com Fri Mar 21 11:31:14 1997
+Date: Sat, 15 Mar 1997 03:22:09 -0300
+From: Rodrigo Teixeira <rodrigot@bigfoot.com>
+To: guitar@olga.net
+Subject: 'Take a Friend' by 'RUSH'
+
+                              Take a Friend - RUSH
+
+from "RUSH" album
+
+Tabbed by: Rodrigo Teixeira <rodrigot@bigfoot.com>
+
+
+
+Intro                                   Fade in... keep repeating (about 6
+times)            
+
+      D             A               C            G
+||-----------------------------------------------------------|
+||-----------------------------------------------------------|
+||-----------------------------------------------------------|
+||-------4--7---------------------------2--5-----------------|
+||----5-----------------4--7---------3--------------2--5-----|
+||-------------------5---------------------------3-----------|
+
+
+
+On the last repeating:
+||----------------------------------------------------------------|
+||----------------------------------------------------------------|
+||----------------------------------------------------------------|
+||-------4--7---------------------------2--5----------------------|
+||----5-----------------4--7---------3--------------2--5--5~~~~---|
+||-------------------5---------------------------3----------------|
+
+
+Breaking the intro,
+MAIN RIFF
+                       D   D
+||------------------------------------|
+||------------------------------------|
+||---------------------7---7----------|
+||---------------------7---7----------|
+||----------3-----3----5---5----------|
+||-----3h5-----5----------------------|
+
+
+Fill (may be lacking some notes but you can get the idea)
+||---------3------3------------------------|
+||-----5b-----5b-----5b---3------5-----3---|
+||----------------------------5-----5------|
+||-----------------------------------------|
+||-----------------------------------------|
+||-----------------------------------------|
+
+Alex does some cool hard-rock fills EVERYWHERE thru the music
+that are hard for me to get, but they are all variations
+of the first Fill, you can improvize and make your own
+Lifeson Fill :)
+
+
+Keep repeating the MAIN RIFF and adding some fills around :)
+
+until..
+"No one to stick with you till the eeeeeend..."
+
+
+G           F        D
+   Take yourself ...
+G           F        D
+   Keep'em till the ...
+G           F        D
+   Whether woman ...
+F             G        A
+   makes you feel so goo...
+
+
+
+ENDING
+repeat INTRO till Fade Out...
+
+
+
+-----------------TAB Explanation
+b = Bend (full)
+h = hammer-on
+~ = vibrato
+
+G          F         D                   A
+355433     133211    xx0232 or x57765    577655
+
+
+
+That's it,
+Any corrections, questions, remarks, suggestions or additions e-mail me
+
+			Rodrigo Teixeira <rodrigot@bigfoot.com>
+								A Brazilian Rush Fan
+
+            \|/
++----ooo---/. .\---ooo------+ "If The Future
+| Rodrigo    V     Teixeira |   Is Looking Dark
+|         JLENNON           |     We Are The Ones
++---------------------------+       Who Have To Shine" - N.P.
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Rush/tears.prj b/guitar/tabs/Rush/tears.prj new file mode 100644 index 0000000..221a5a7 --- /dev/null +++ b/guitar/tabs/Rush/tears.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=tears.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4) diff --git a/guitar/tabs/Rush/tears.tab b/guitar/tabs/Rush/tears.tab new file mode 100644 index 0000000..0ea357e --- /dev/null +++ b/guitar/tabs/Rush/tears.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|-0-----------0-------0-0---0-0---0-0---0-0---0-0---0-0---0-0--- +B|---6-----6-----6-----3---3-3---3-3---3-2---2-2---2-2---2-3---3- +G|-----0-----0-----0---0-----0-----0-----0-----0-----0-----0----- +D|-------7-----------7-2-----2-----2-----2-----2-----2-----2----- +A|-8-----------8-------0-----0-----0-----0-----0-----0-----0----- +E|--------------------------------------------------------------- + + + +E|-0-0---0-0---0-0---0-0---0-------------------------0----------- +B|-3---3-3---3-2---2-2---2-2-------3---------2---------3--------- +G|-0-----0-----0-----0-----0-----0---0-----0-------0-----0-----0- +D|-2-----2-----2-----2-----2---2---------2-------2-----------2--- +A|-0-----0-----0-----0-----0-0---------0-------0-----------0----- +E|--------------------------------------------------------------- + + + +E|--- +B|-2- +G|--- +D|--- +A|--- +E|--- + diff --git a/guitar/tabs/Rush/the_body_electric.prj b/guitar/tabs/Rush/the_body_electric.prj new file mode 100644 index 0000000..a2c02e9 --- /dev/null +++ b/guitar/tabs/Rush/the_body_electric.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_body_electric.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4) diff --git a/guitar/tabs/Rush/the_body_electric.tab b/guitar/tabs/Rush/the_body_electric.tab new file mode 100644 index 0000000..1f0534d --- /dev/null +++ b/guitar/tabs/Rush/the_body_electric.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|-5-12---------------5-5-5-5-----7-7-7-7----------------------------------5- +B|-8-10-14-15---------6-6-6-6-----8-8-8-8-----10-10-10-10-10-10-10-10-10-9-6- +G|-5-12-14-14---------5-5-5-5-----7-7-7-7-----10-10-10-10-10-10-10-10-10-9-5- +D|-7-10-14-14---------5-5-5-5-----7-7-7-7-----10-10-10-10-10-10-10-10-10-9-5- +A|-5----12-12-0-3-0-3-5-5-5-5-5-7-7-7-7-7-7-8----------------------------7-5- +E|--------------------------------------------------------------------------- + + + +E|-5-5-5-----7-7-7-7--------------------------------------------- +B|-6-6-6-----8-8-8-8-----------2---------3-----------3----------- +G|-5-5-5-----7-7-7-7-2-----4-----2-----0-----0-----0---0-------5- +D|-5-5-5-----7-7-7-7-2-2-2---2-------2-----2---0-4-----------5--- +A|-5-5-5-5-7-7-7-7-7-0-0-----------2---------------------5-3----- +E|---------------------------------0----------------------------- + + + +E|----------------------12-------------10-------------12------------- +B|-3-----14-------------13-------------10-------------12------------- +G|---5---14-------------12-------------11-------------13------------- +D|-----5-14-7-7-7-7-7-7----7-7-7-7-7-7-12-7-7-7-7-7-7-14-7-7-7-7-7-7- +A|-------12-7-7-7-7-7-7----7-7-7-7-7-7----7-7-7-7-7-7----7-7-7-7-7-7- +E|------------------------------------------------------------------- + + + +E|-----5-5-5-5-5-----------------------------0-0-0-0-0-0-0-5-7-7- +B|-----5-5-5-5-5-3-3-3-3-3-3-3-3-3-3-3-3-3-3-0-0-0-0-0-0-0-5-5-5- +G|-2-2-2-2-2-2-2-5-5-5-5-5-5-5-0-0-0-0-0-0-0-1-1-1-1-1-1-1-2----- +D|-2-2-2-2-2-2-2-5-5-5-5-5-5-5-4-4-4-4-4-4-4-2-2-2-2-2-2-2-2----- +A|-0-0-0-0-0-0-0-3-3-3-3-3-3-3-5-5-5-5-5-5-5-2-2-2-2-2-2-2------- +E|---------------3-3-3-3-3-3-3---------------0-0-0-0-0-0-0------- + + + +E|----10-10-10-10-10-8-8-8-5------8-8-5------------------------------------------ +B|-12----------------5-5-5-5-8-p5-5-5-5-8---------------------------------------- +G|-12----------------5-5-5-5------5-5-5-5---------2-p0-h4-2-p0---0-h2-p0--------- +D|----------------------------------------0-h2-h4--------------4---------4-p2-p0- +A|------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------- + + + +E|------------------15-------------12-15-12----12-----------12---------------------------20- +B|------------14-15-------12-13-15----------15----13-15-b17----15-b17-r15-13-15-13----20---- +G|---------12----------12----------------------------------------------------------19------- +D|-h5-5-b7---------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + diff --git a/guitar/tabs/Rush/the_camera_eye.prj b/guitar/tabs/Rush/the_camera_eye.prj new file mode 100644 index 0000000..bd4702f --- /dev/null +++ b/guitar/tabs/Rush/the_camera_eye.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_camera_eye.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4) diff --git a/guitar/tabs/Rush/the_camera_eye.tab b/guitar/tabs/Rush/the_camera_eye.tab new file mode 100644 index 0000000..d28351f --- /dev/null +++ b/guitar/tabs/Rush/the_camera_eye.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|-------1------------------------------------------------------- +B|-5-3-6-1------------------------------------------------------- +G|-5-4-5-3-----------------------------------------------------6- +D|-5-5-5-3-----------6-4-3-------6-4-3--------------------------- +A|-3-3-3-1-4-3-4---4-------4---4-------3-----3-----3-----3------- +E|---------------4-----------4-----------1-3---1-3---1-3---1-3--- + + + +E|--------------------------------------------------------------- +B|-----9-7-6-------9-7-6----------------------------------------- +G|---6-------6---6-------5-----5-----5-----5-----5-5-5-5-5-5-5-5- +D|-6-----------6-----------3-5---3-5---3-5---3-5-5-5-5-5-5-5-5-5- +A|-----------------------------------------------7-5-8-5-7-5-8-5- +E|--------------------------------------------------------------- + + + +E|-----------------0-1---------------------------1-----1---0----- +B|-6-6-6-6-6-6-6-6-1-1-----2-----2-----1-----1---2-----2---1----- +G|-5-5-5-5-5-5-5-5-0-2---1-----1-----0-----0-----1-----1---0----- +D|-7-5-8-5-7-5-8-5-2-3-3-----4-----2-----3-----3---4-4---2---3-3- +A|-----------------3-3------------------------------------------- +E|-------------------1------------------------------------------- + + + +E|-1------------------------------------------------------------------------------- +B|-1----------------------------14-16-18-19-18-17-15----15----17---------------6-7- +G|-0-------------11-11-11-11-11----------------------17----15----17----------6----- +D|---------6-4-3-11-11-11-11-11----------------17-------------------17---3-4------- +A|---4---4-------------------------------------------------------------4----------- +E|-----4--------------------------------------------------------------------------- + + + +E|-----------------5-6-5-6-13-13-13-16-13-13-13-13-13-16-13-13-13-16-13-16-13------- +B|-9-7-6-7-6-5-6-8------------------------------------------------------------16-18- +G|---------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------------------------------- +B|-16-14-16-18-13-15-17-17-17-17-15-17-15-17-15-17-15-17-15-17-15-13-14-18-14-13-14-17-13-11-13- +G|---------------------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------- +B|-17-15-13-15-17-13-15-17-13-15-17-13-15-17-13-15-13-17-13---- +G|------------------------------------------------------------- +D|----------------------------------------------------------14- +A|------------------------------------------------------------- +E|------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/the_enemy_within.prj b/guitar/tabs/Rush/the_enemy_within.prj new file mode 100644 index 0000000..c34d8b6 --- /dev/null +++ b/guitar/tabs/Rush/the_enemy_within.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_enemy_within.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4) diff --git a/guitar/tabs/Rush/the_enemy_within.tab b/guitar/tabs/Rush/the_enemy_within.tab new file mode 100644 index 0000000..94b13e1 --- /dev/null +++ b/guitar/tabs/Rush/the_enemy_within.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|---------------------0---------2-----------------------------7- +B|-------0-3-------0-3---------3---------------3-2-------------7- +G|-----4-----0---2-------0---4-----2---------2-----4-----------7- +D|---0---------0-----------2-----------2---0-------------------9- +A|-2---------------------------------0---0-----------9-9-9-9-9--- +E|---------------------------------------------------7-7-7-7-7--- + + + +E|-----------7-----------3-----------5-----7-------7-------7------ +B|-----------7-----------3-----------5-----7-------7-------7---10- +G|-----------7-----------4-----------6-----7-------7-------7---11- +D|-----------9-----------------------------9-------9-------9---12- +A|-9-9-9-9-9---5-5-5-5-5---7-7-7-7-7---9-9---9-9-9---9-9-9---9-12- +E|-7-7-7-7-7---3-3-3-3-3---5-5-5-5-5---7-7---7-7-7---7-7-7---7-10- + + + +E|------------------------------------------------------------------ +B|--------------------------------2---------------7----------------- +G|-11-----2-2-2-2-2-2-2---2-------2-------7-----7---------4-------6- +D|-12-----2-2-2-2-2-2-2---2-2-0---2---------9-9---------5-------7--- +A|-12-----0-0-0-0-0-0-4-4-4-4---0-0-0---9-------------5-------7----- +E|-10-s12-----------------------------7-------------3-------5------- + + + +E|---------------------------------7-7---7-7---7---7---3---3---5- +B|-------------7-------------------7-7---7-7---7---7---3---3---5- +G|-----7-----7---------------------7-7---7-7---7---7---4---4---6- +D|-------9-9-----5-5-5-5-7-7-7-7---9-9---9-9---9---9------------- +A|---9-----------5-5-5-5-7-7-7-7-9-----9-----9---9---5---5---7--- +E|-7-------------3-3-3-3-5-5-5-5-7-----7-----7---7---3---3---5--- + + + +E|-5---5- +B|-5---5- +G|-6---6- +D|------- +A|---7--- +E|---5--- + diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_bacchus_plateau.prj b/guitar/tabs/Rush/the_fountain_of_lamneth_bacchus_plateau.prj new file mode 100644 index 0000000..2fe3f20 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_bacchus_plateau.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_fountain_of_lamneth_bacchus_plateau.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4) diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_bacchus_plateau.tab b/guitar/tabs/Rush/the_fountain_of_lamneth_bacchus_plateau.tab new file mode 100644 index 0000000..6b5c909 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_bacchus_plateau.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|---------0-2-0-2-0-------------------------12-h14-p12-h14-p12-h14-p12-12-h14-h15- +B|-3-2-3-2-3-3-3-3-3-3------------------------------------------------------------- +G|-0-2-0-2-2-2-2-2-2-2-----------0-------0----------------------------------------- +D|-2-2-2-2-0-0-0-0-0-0---------0-------0------------------------------------------- +A|-2-0-2-0---------3---------2-------0--------------------------------------------- +E|---------------------0-2-3-------2-------0--------------------------------------- + + + +E|-12-h14-p12-h14-p12-h14-p12-14-p12-p10-10-12-12-b14-10-12-b14-12-12-b14-7-9-10-10-10-10-10-10-s7----- +B|-------------------------------------------------------------------------------------------------7-8- +G|----------------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------- +B|-10-8-p7-p5-7-b8-r7-p5---5-6-5-------- +G|-----------------------7-------7-7-s8- +D|-------------------------------------- +A|-------------------------------------- +E|-------------------------------------- + diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_didacts_and_narpets.prj b/guitar/tabs/Rush/the_fountain_of_lamneth_didacts_and_narpets.prj new file mode 100644 index 0000000..dd0d6a6 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_didacts_and_narpets.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_fountain_of_lamneth_didacts_and_narpets.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4) diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_didacts_and_narpets.tab b/guitar/tabs/Rush/the_fountain_of_lamneth_didacts_and_narpets.tab new file mode 100644 index 0000000..92819e3 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_didacts_and_narpets.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-------------------------------------------- +B|-------------------------------6---8---10-6- +G|-9-7-----9-9-7-----9-7-----9-7-5-5-7-7-9--5- +D|-9-7-5-3-9-9-7-5-3-9-7-5-3-9-7-3-5-5-7-7--3- +A|-7-5-5-3-7-7-5-5-3-7-5-5-3-7-5---3---5------ +E|-----3-1-------3-1-----3-1------------------ + diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_in_the_valley.prj b/guitar/tabs/Rush/the_fountain_of_lamneth_in_the_valley.prj new file mode 100644 index 0000000..f021713 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_in_the_valley.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_fountain_of_lamneth_in_the_valley.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4) diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_in_the_valley.tab b/guitar/tabs/Rush/the_fountain_of_lamneth_in_the_valley.tab new file mode 100644 index 0000000..86d8918 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_in_the_valley.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|---5---5---------------5-----5---------7-----7---------7-----7- +B|---------8-7-------5-----7---------7-----7---------7-----7----- +G|-7---7-------7---6---6-----6---6-4---7-----7---4-----7-----7--- +D|---------------7---------------------------------7------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-------3---3---------------3-----------0---0-----0------------- +B|---------0---3---------3-----3-------0-------0-----2----------- +G|-----0---------0-----0---------0---------1-----1---2---6-4-7-6- +D|-----------------0-------0-------0-2---------------2-7--------- +A|---------------------------------------------------0----------- +E|-0-3---------------2------------------------------------------- + + + +E|-----------------------3---------------------------5----------- +B|-5---7---8-7-----3-3-3-0-2-------2-------2-0-0-0-0-7----------- +G|---7---7-----7---2-2-2-2-2-------2-------2-8-6-8-6-7-0-5-5---5- +D|---------------7-0-2-0-0-2-2-2-2-2-2-2-2-2-9-7-9-7-7-0-5-5---5- +A|-------------------------0-0-0-0-0-0-0-0-0-0-0-0-0-5---3-3-0-3- +E|---------------------2-3--------------------------------------- + + + +E|---------------0-3-3- +B|---------------3-3-3- +G|-5-5-5-5-7-7-0-0-0-0- +D|-5-5-5-5-7-7-0-2-0-0- +A|-3-3-3-3-5-5---2-2--- +E|---------------0-3-2- + diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_no_one_at_the_bridge.prj b/guitar/tabs/Rush/the_fountain_of_lamneth_no_one_at_the_bridge.prj new file mode 100644 index 0000000..78b8855 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_no_one_at_the_bridge.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_fountain_of_lamneth_no_one_at_the_bridge.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4) diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_no_one_at_the_bridge.tab b/guitar/tabs/Rush/the_fountain_of_lamneth_no_one_at_the_bridge.tab new file mode 100644 index 0000000..238cfcd --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_no_one_at_the_bridge.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------0-----------0-----------0-----------0-------------0----- +D|-----4---4-------4---4-------4---4-------4---4---------7---7--- +A|---2-------2---2-------2---2-------2---2-------2-----5-------5- +E|-0-----------0-----------0-----------0-----------0-6----------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------0-----------0-----------0-----------0-----0-----0-----0- +D|-----7---7-------7---7-------7---7-------2-----0-----0-----0--- +A|---5-------5---5-------5---5-------5---3-----2----------------- +E|-6-----------6-----------6-----------6-------------3-----2----- + + + +E|-0-------3-3-3-3-0-0-0-0-1----------------------------------------- +B|-2-2-2-0-3-3-3-3-2-2-2-2-1-----------------------------8-----8-7--- +G|-2-------0-0-0-0-2-2-2-2-2-----------------------7-7-7---7-7-----7- +D|-2-------2-2-2-2-2-2-2-2-3--------------5-7-7-s9------------------- +A|-0-------3-3-3-3-0-0-0-0-3-10-s5-s7-7-7---------------------------- +E|-------------------------1----------------------------------------- + + + +E|------7-9-10-10-10-12-12-10-p9-9-p7----9-10-12----12-b14-12-10-12-b14-12-10----9-10-12---- +B|------------------------------------10---------10---------------------------10---------10- +G|-7-h9------------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------ + + + +E|----------------9-10-12----14-b15-14-12-14-b15-14-12----9-10-12------------------- +B|-8-7-5-------10---------10---------------------------10---------10-6-8-6-8-6-s5--- +G|-------7-6------------------------------------------------------------------------ +D|-----------7---------------------------------------------------------------------- +A|---------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------0- + + + +E|---------------------------------------------------------0- +B|-------------------------------------------------------0--- +G|-----0-----------0-----------0-----------0-----------0----- +D|---4---4-------4---4-------4---4-------4---4-------4------- +A|-2-------2---2-------2---2-------2---2-------2---2--------- +E|-----------0-----------0-----------0-----------0----------- + diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_panacea.prj b/guitar/tabs/Rush/the_fountain_of_lamneth_panacea.prj new file mode 100644 index 0000000..348779c --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_panacea.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_fountain_of_lamneth_panacea.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4) diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_panacea.tab b/guitar/tabs/Rush/the_fountain_of_lamneth_panacea.tab new file mode 100644 index 0000000..02fa408 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_panacea.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|-----------------------0-------------------3-5-------------3--- +B|-1-------1-------0-------1-1-------1-------3---5-------5-----3- +G|-------------0-------0-----2-----------0---0-----0---0---0----- +D|---2-------2-------0-------2-2-------2-----0-------4----------- +A|-0---0-2-3---------------0-0---0-2-3-------2-5-------------3--- +E|---------------2-3-----------------------2-3------------------- + + + +E|-----------3-------------3-----------------------------------0- +B|-------3-----3-------3-----3-------3---2---2-3-5-1------------- +G|-0---0---0-----0---0---0-----0---0---0-2-----------0-------0--- +D|---2-------------0-------------0-------2-2-----------2---2---3- +A|-------------------------2-------------0---------3-----3------- +E|-----------3--------------------------------------------------- + + + +E|-----------3-------------------------------0-----------0-0-0-0- +B|-1-------1---3-----3-2---2-3-5-1-------------1-------1-0-0-0-0- +G|---2---2-------0-----2-----------0-------0-----2---2---1-1-1-2- +D|-----3-----------0-0-2-2-----------2---2---------3-----2-2-2-2- +A|---------------------0---------3-----3-----3-----------2-2-2-2- +E|-------------------------------------------------------0-0-0-0- + + + +E|-0-0-0-0---0-0---0-0-0-0-0-0---5-0-----0-----3-----------3----- +B|-0-0-0---0-0---0-1-1-1-1-1-1-5---1---1---1---3-3-------3-3---3- +G|-2-1-6-----6-----0-----0---------2-2-------2-0---0---0---0-0--- +D|-2-2-7-----7-----2-----2---------3-----------0-----0-----0----- +A|-2-2-7-----7-----3-----3---------3-----------2-----------2----- +E|-0-0-5-----5---------------------------------3-----------3----- + + + +E|-3-2-------0-3-----3-5-----5-7-8-7-5-----------------------3--- +B|---3-3-----0---3-------5-----------7-1-----1-------1-3-------3- +G|---2---2---1-----4-------6---------7-----2---2---2-------0----- +D|---0-----0-2-----------------------7---2-------2-------0------- +A|-----------2-----------------------5-0------------------------- +E|-----------0-3-------5-------------------------------3--------- + + + +E|-------------------0---5- +B|-------1-----1-0-----3-5- +G|-0---0-----2-----------5- +D|---0-----2-------2-----7- +A|-------0----------------- +E|---------------0--------- + diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_the_fountain.prj b/guitar/tabs/Rush/the_fountain_of_lamneth_the_fountain.prj new file mode 100644 index 0000000..46658bf --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_the_fountain.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_fountain_of_lamneth_the_fountain.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4) diff --git a/guitar/tabs/Rush/the_fountain_of_lamneth_the_fountain.tab b/guitar/tabs/Rush/the_fountain_of_lamneth_the_fountain.tab new file mode 100644 index 0000000..3b113e2 --- /dev/null +++ b/guitar/tabs/Rush/the_fountain_of_lamneth_the_fountain.tab @@ -0,0 +1,55 @@ +%TabMaster v2.00r% + + +E|---------5-------------------------0-3-3---------7-7------------------ +B|-0-0-0-0-7-------------------------3-3-3-10-s5-5-----10-p8-8-h10-8-10- +G|-8-6-8-6-7-0-5-5---5-5-5-5-5-7-7-0-0-0-0------------------------------ +D|-9-7-9-7-7-0-5-5---5-5-5-5-5-7-7-0-2-0-0------------------------------ +A|-0-0-0-0-5---3-3-0-3-3-3-3-3-5-5---2-2-------------------------------- +E|-----------------------------------0-3-2------------------------------ + + + +E|-7-7-9-10-12-10-15-p14-p12-h15-15-p14-p12-h15-10-p9-p7-5---5------7-9-7-h9-p7----------- +B|---------------------------------------------------------7---7-s9-------------7-s5-9-10- +G|---------------------------------------------------------------------------------------- +D|---------------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------- + + + +E|----9-10-10-9---5---5---------10-p9-p7-h9-10-p9-p7-h9-10-p9-p7-h9-8-p7-p5-h7-5--- +B|-12-----------9---8---8-7-5----------------------------------------------------8- +G|----------------------------7---------------------------------------------------- +D|--------------------------------------------------------------------------------- +A|--------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------- + + + +E|----------------------------------5---5---------------5-----5------- +B|-7-5-------6-7-b8-r7-p6-4-h6-p4---------8-7-------5-----7---------7- +G|-----7-5------------------------7---7-------7---6---6-----6---6-4--- +D|---------7------------------------------------7--------------------- +A|-------------------------------------------------------------------- +E|-------------------------------------------------------------------- + + + +E|---7-----7---------7-----7-------3---3---------------3--------- +B|-----7---------7-----7-------------0---3---------3-----3------- +G|-7-----7---4-----7-----7-------0---------0-----0---------0----- +D|-------------7-----------------------------0-------0-------0-2- +A|--------------------------------------------------------------- +E|---------------------------0-3---------------2----------------- + + + +E|---0---0-----0-0--------------------------- +B|-0-------0-----2-----------5---7---8-7----- +G|-----1-----1---2---6-4-7-6---7---7-----7--- +D|---------------2-7-----------------------7- +A|---------------0--------------------------- +E|------------------------------------------- + diff --git a/guitar/tabs/Rush/the_necromancer_into_darkness.prj b/guitar/tabs/Rush/the_necromancer_into_darkness.prj new file mode 100644 index 0000000..6d09c26 --- /dev/null +++ b/guitar/tabs/Rush/the_necromancer_into_darkness.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_necromancer_into_darkness.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4) diff --git a/guitar/tabs/Rush/the_necromancer_into_darkness.tab b/guitar/tabs/Rush/the_necromancer_into_darkness.tab new file mode 100644 index 0000000..d729c9a --- /dev/null +++ b/guitar/tabs/Rush/the_necromancer_into_darkness.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|---3---3-2---3--------------------------------------------------------------- +B|---3---3-3---3---------------------3-s7-s3-s5-15-b17-8-s12-12-s8-8-s10------- +G|---0---2-2---0---------0-----------------------------------------------11-s7- +D|---2---2-2---2-------2-------0----------------------------------------------- +A|---2---------2-0-2-3-------2-----0------------------------------------------- +E|-0-0-0-----0-0-----------3-----2--------------------------------------------- + + + +E|----------3-s7-7-s10-14--------12-s7-s12------------------------------12----------------- +B|------------------------15-b17-----------12-s10-s12-7-s3-s5-----7-s12----7-s12----------- +G|-7-s9-4-----------------------------------------------------7-7----------------7-7-b9-r7- +D|--------5-------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------- + + + +E|-------------------------10-p7-10-b12-r10-----------------------------15-----15-b17-15-b17-17-b19-17- +B|---------8-10-b12-10-b12------------------12-8---15-b17-15-b17-15-b17----b17------------------------- +G|-7-b9-r7---------------------------------------9----------------------------------------------------- +D|----------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------- + + + +E|-b19-17-17-b19-17-b19-17-17-17-15----15-------------------------------------------------------------- +B|----------------------------------17----17-17-b19-17-b19-12-15--------------------------------------- +G|---------------------------------------------------------------14-12--------12-12----------12-b14-14- +D|---------------------------------------------------------------------12-h14----------12-14----------- +A|----------------------------------------------------------------------------------14----------------- +E|----------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------------- +G|-r12-12-p9-11-b12-r11-11-b12-r11-b12-r11-9-------------------------12-----------12---- +D|-------------------------------------------12-------------12-12-12----12-12-h14----14- +A|----------------------------------------------10-12-10-------------------------------- +E|-------------------------------------------------------12----------------------------- + diff --git a/guitar/tabs/Rush/the_necromancer_return_of_the_prince.prj b/guitar/tabs/Rush/the_necromancer_return_of_the_prince.prj new file mode 100644 index 0000000..6795d0e --- /dev/null +++ b/guitar/tabs/Rush/the_necromancer_return_of_the_prince.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_necromancer_return_of_the_prince.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4) diff --git a/guitar/tabs/Rush/the_necromancer_return_of_the_prince.tab b/guitar/tabs/Rush/the_necromancer_return_of_the_prince.tab new file mode 100644 index 0000000..4df4266 --- /dev/null +++ b/guitar/tabs/Rush/the_necromancer_return_of_the_prince.tab @@ -0,0 +1,100 @@ +%TabMaster v2.00r% + + +E|-------0-------0-------0-------0--------------------------0-0-0-2-2- +B|---------0-------0-------0-------0-12-12-12-7-7-5-5-5-7-7-0-0-0-4-4- +G|----13-------8-------6-------8-----13-13-13-8-8-6-6-6-8-8-1-1-1-4-4- +D|-14--------9-------7-------9-------14-14-14-9-9-7-7-7-9-9-2-2-2-4-4- +A|----------------------------------------------------------2-2-2-2-2- +E|----------------------------------------------------------0-0-0----- + + + +E|---2-2------------------------------------------------------------------------------------------------ +B|-2-4-4------------------------------------------------------------------------------------------------ +G|-2-4-4-14-b16-14-b16-14-b16-14-b16-r14----12-h13-p12----12-13-13-b14-13-b14-r13-p12----12------------- +D|-2-4-4---------------------------------14------------14-----------------------------14----14-12-14-14- +A|-0-2-2------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------------ + + + +E|--------------------------------------------------------------------------------------------------- +B|--------------------------------------------------------------------------------------------------- +G|-----------------------------------------------------9-9-9-11-b13-13-13-r11-11-b13-13-13-r11-p9-11- +D|-p12-----------------------------------------9-9-h11----------------------------------------------- +A|-----14-p12-------------------9-------10-h12------------------------------------------------------- +E|------------12-h14-p12-10-h12---12-12-------------------------------------------------------------- + + + +E|--------------------------------------14-b16-14-b16-15-b17-14-b16-14-12-14-12----12--------------------- +B|---------14-p12-12-14-12-12-14-p12-12-----------------------------------------14----14-p12----12-14-p12- +G|-b13-r11-----------------------------------------------------------------------------------14----------- +D|-------------------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------------- + + + +E|----12----14-p12----12-14-p12----12-14-p12----12-14-p12----12-14-p12----14-p12----12-14-p12----12-14- +B|-12----12--------12-----------12-----------12-----------12-----------12--------12-----------12------- +G|----------------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------- + + + +E|-p12----12-14-p12----12-14-p12----12-14-p12--------------------------------------------------------------- +B|-----12-----------12-----------12-----------12------------------------------------------------------------ +G|-----------------------------------------------14-14-----14---------14-----14----------------------14----- +D|--------------------------------------------------16-b18-16-b18-b18-16-b18-16-b18-r16-16-p14----14-16-b18- +A|---------------------------------------------------------------------------------------------16----------- +E|---------------------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------------ +B|------------------------------------------------------------------------------------------------ +G|-----14----------------------------------------------------------------------------------------- +D|-r16-16-b18-r16----14-14-11-9----------------------14----14-14----14----14----14-14----14----11- +A|----------------16------------11-9-------12-h14-14----14-------14----14----14-------14----14---- +E|-----------------------------------12-12-------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------------------------- +B|------------12-15-14-12-12-14-15-b17-15-b17-17-b19-15-b16-15-12-14-12---------------------------------- +G|----------------------------------------------------------------------14-b16-r14-p12----14-12-------12- +D|-h12-12-h14--------------------------------------------------------------------------14-------14-14---- +A|------------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------------- + + + +E|-----16-r15-p12------------------------------------------------------------------------------------------- +B|----------------15-15-b17-15-b17-15-b17-15-p12----12--------12--------12--------12--------12-------------- +G|-h14-------------------------------------------14----14-b16----14-b16----14-b16----14-b16----14-p12----14- +D|----------------------------------------------------------------------------------------------------14---- +A|---------------------------------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------------------ +B|------------------------------------------------------------------------------------ +G|------9-11-b13-r11-9------------------------------------------------------------7-8- +D|-9-11----------------11-p9---------6-9-11-9-------------------------------6-7-9----- +A|---------------------------11-7-h9----------11-9------------------------------------ +E|-------------------------------------------------12-9-h12-12-h14-p12-s9-0----------- + + + +E|--- +B|--- +G|-9- +D|--- +A|--- +E|--- + diff --git a/guitar/tabs/Rush/the_necromancer_under_the_shadow.prj b/guitar/tabs/Rush/the_necromancer_under_the_shadow.prj new file mode 100644 index 0000000..4da3b7b --- /dev/null +++ b/guitar/tabs/Rush/the_necromancer_under_the_shadow.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_necromancer_under_the_shadow.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4) diff --git a/guitar/tabs/Rush/the_necromancer_under_the_shadow.tab b/guitar/tabs/Rush/the_necromancer_under_the_shadow.tab new file mode 100644 index 0000000..525bd4b --- /dev/null +++ b/guitar/tabs/Rush/the_necromancer_under_the_shadow.tab @@ -0,0 +1,28 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|-----------------------------------------------12-12-0----------- +D|-----------------------------------------------12-12-0-5--------- +A|-7---7-7-7---7-5---------5-6-7-----7-7-----7-5-10-10-----7-5-6-7- +E|---0-------0-----3-5-6-7-------0-0-----0-0----------------------- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|---------------------------0---------------------------0-------- +D|-------------5-------------0-5-4-----5-4-----5-4-----2-0-------- +A|-----7-5-6-7---7-5-6-7-------------------------------2---------- +E|-0-0-------------------3-5-------0-0-----0-0-----0-0-0---3-h5-5- + + + +E|----------------------------------- +B|----------------------------------- +G|---------------------------------0- +D|---------------------------------0- +A|---------------------------3------- +E|-5-5-3-h5-5-5-5-3-h5-5-5-5---0-3--- + diff --git a/guitar/tabs/Rush/the_trees.prj b/guitar/tabs/Rush/the_trees.prj new file mode 100644 index 0000000..4bcc519 --- /dev/null +++ b/guitar/tabs/Rush/the_trees.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_trees.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4)(531,4)(532,4)(533,4)(534,4)(535,4)(536,4)(537,4)(538,4)(539,4)(540,4)(541,4)(542,4)(543,4)(544,4)(545,4)(546,4)(547,4)(548,4)(549,4)(550,4)(551,4)(552,4)(553,4)(554,4)(555,4)(556,4)(557,4)(558,4)(559,4)(560,4)(561,4)(562,4) diff --git a/guitar/tabs/Rush/the_trees.tab b/guitar/tabs/Rush/the_trees.tab new file mode 100644 index 0000000..f3d1319 --- /dev/null +++ b/guitar/tabs/Rush/the_trees.tab @@ -0,0 +1,172 @@ +%TabMaster v2.00r% + + +E|-2-----0-----2-----2---4-----4-----5-----5---------0-----3----- +B|---3-----3-----2-----2-----5---5-----5-----5-0---0---0-----3--- +G|-----2-------------------6-------------2-------1--------------- +D|-0---------0-----4-------------------------2-----------0------- +A|---------------------4-4---------4-0-------------------------2- +E|-------------2-------------------------------0-----------3----- + + + +E|----------------2---2-h3-p2-----2-----2-----2---------4-----5----- +B|-2-----3-3------3-3---------3-----3-----2-----2-5-------5-----5--- +G|-----2-4-4-4------4-----------2---------------------6-----------2- +D|---2----------------0---------------0-----4-------6--------------- +A|-0-----2-2-0-h2-2-2---------------------------4-4---------4-0----- +E|--------------------------------------2--------------------------- + + + +E|-5---0-----0---3-----------------2---2-----3-p2---2-----2------- +B|---5-0---0-------3---2-----3-3---3-3-----3----------2-----2-5--- +G|-------1-----------------2-4-4-4---4---2------------------------ +D|---2---------0---------2-------------0-----0----0-----4-------6- +A|-------------------2-0-----2-2-0-2-2----------------------4-4--- +E|-----0---------3----------------------------------2------------- + + + +E|---4-----5-----5---------0-----3--------------------2---2-2-h3-p2- +B|-----5-----5-----5-0---0---0-----3---2-----3-3-3----3-3-3--------- +G|-6-----------2-------1-------------------2-4-4-4------4-2--------- +D|-----------------2-----------0---------2----------------0--------- +A|-------4-0-------------------------2-0-----2-2-0-h2-2-2----------- +E|-------------------0-----------3---------------------------------- + + + +E|----------------------------------------------------------------- +B|-3-2-2-h3-p2---3------------------------------------------------- +G|---2---------2-4------------------------------------------------- +D|---2-----------4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4---5-5-5-5-5-5-5-5- +A|---0-----------2-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4---5-5-5-5-5-5-5-5- +E|-----------------2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-0-3-3-3-3-3-3-3-3- + + + +E|-----------------5-5-------5---------------------------------0- +B|-----------------5-5-------5-5-------2-------2-2---2-2---2-2-0- +G|-----------------2-2-2-2-2-2-2-2-2-2-2-------2-2---2-2---2-2-1- +D|-5-5-5-5-5-5-5---2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2- +A|-5-5-5-5-5-5-5---0-0-0-0-0-0-0-0-0-0-0-0-0-------------------2- +E|-3-3-3-3-3-3-3-0---------------------------3-----2-----0-----0- + + + +E|-0-0-0-0-0-3-3-3-----------------2----------------------------- +B|-0-0-0-0-0-3-3-3-------3-3-3-3-3-3-3-3-3-3-3-3-3--------------- +G|-1-1-1-1-1-0-0-0-2-2-2-4-4-4-4-4-4-4-4-4-4-4-4-4---4---4-----4- +D|-2-2-2-2-2-0-0-0-2-2-2-4-4-4-4-4-4-4-4-4-4-4-4-4-----4-----4--- +A|-2-2-2-2-2-2-2-2-0-0-0-2-2-2-2-0-2-2-2-2-2-2-2-2-2-------2----- +E|-0-0-0-0-0-3-3-3----------------------------------------------- + + + +E|--------------------------------------------------------------- +B|-------------------------2---2-----------2-----2-------0------- +G|-----4---4-----4-------2---2-----2-----2-----2-----------3----- +D|-4-----4-----4---4---2---------2-----2-----2---------4--------- +A|---2-------2-------0---------------0---------------4---------4- +E|-------------------------------------------------2---------2--- + + + +E|-------------0-----------0-----------0---2-----------0---2----- +B|---0-----------0-----------0-----------------0----------------- +G|-----3-----6-----6-----6-----6-----3---------------3----------- +D|-4-------------------7-----------------4---4-----------4-----0- +A|---------7---------7-------------4---------------4---------4--- +E|-------5-----------------------2---------------2--------------- + + + +E|-----0---10-----------0---10-----------1---------1---------0----- +B|---7----------7-----7----------7---------1---------1-0---0-----0- +G|-7----------------7------------------2---------2-----2-2-----2--- +D|-------0----0---0-------0----0-----------------------2----------- +A|-----------------------------------3---------3-------0----------- +E|---------------------------------1---------1--------------------- + + + +E|-----------0-------0-----0---------------0------------------------ +B|---------2-----0---0-0-------0---------------0----------0--------- +G|---2---------2-----1-------------1-----1---------0----0------0---- +D|-2-----2-----------2---2---2---2-----2-----2---2---12-----11---14- +A|-----0-----------0-2-------2---2---------------------------------- +E|-------------------0-----------0---0------------------------------ + + + +E|------------------------------------------------------------------------------ +B|---0-----------0-------------------------------------------------------------- +G|-0------0----0------0-------0----0-16-r14-----7-6-h7-p6-p0-0-2-4-4-2-h4-p2-p0- +D|-----11---12-----11---12-14---11---------------------------------------------- +A|------------------------------------------0-2--------------------------------- +E|------------------------------------------------------------------------------ + + + +E|------------------------------------------------------------------------------------------------ +B|---15-14-h15-p14-------------12--------------12------------------------------------------------- +G|-9---------------14-12-14-12----14-12-14-b16----14-b16-14-11-12-b14-12-11-h12-p11-s9-11-6-7-9-7- +D|------------------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------------------ + + + +E|---------------------------------------------------------------------------7-7-7- +B|---------------------------------------------------------------------------8-8-8- +G|-p6-h7-p6-4-6-7-6-h7-h9-6-h7-p6-4-h6-p4-2-h4-p2-p0-2-h4-p2-p0-2-h4-p2-p0-2-7-7-7- +D|---------------------------------------------------------------------------0---0- +A|--------------------------------------------------------------------------------- +E|--------------------------------------------------------------------------------- + + + +E|-7-7-7-7-7-2-2-2-2-2------------------7-7-7-7-7-7-7-7-2-2-2-2-2- +B|-8-8-8-8-8-3-3-3-3-3-2----------------8-8-8-8-8-8-8-8-3-3-3-3-3- +G|-7-7-7-7-7-2-2-2-2-2-2-2--------------7-7-7-7-7-7-7-7-2-2-2-2-2- +D|---0-----------0---0-2-2-----0-2-4-p0-0---0---0-----------0---0- +A|---------------------0-0-2-4------------------------------------ +E|---------------------------------------------------------------- + + + +E|-------------------7-7-7-7-7-7-7-7-2-2-2-2-2---------------7-7-7- +B|-2-----------------8-8-8-8-8-8-8-8-3-3-3-3-3-2---8-7-5-----8-8-8- +G|-2-2-4-2-0---------7-7-7-7-7-7-7-7-2-2-2-2-2-2-2-------7-6-7-7-7- +D|-2-2-------4-p2-p0-0---0---0-----------0---0-2-2-----------0---0- +A|-0-0-----------------------------------------0-0----------------- +E|----------------------------------------------------------------- + + + +E|-7-7-7-7-7-2-2-2-2-2------------------------------------------- +B|-8-8-8-8-8-3-3-3-3-3-2-------------3-3-----3-3----------------- +G|-7-7-7-7-7-2-2-2-2-2-2-2-----------4-4-4-4-2-2-2-2-4-4-4-3-3-3- +D|---0-----------0---0-2-2-----0-2---4-4-4-4-0-0-2-2-4-4-4-4-4-4- +A|---------------------0-0-2-4-----0-2-2-2-0-----0-0-2-2-2-4-4-4- +E|---------------------------------------------------------2-2-2- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-2-2----------------------------------------------------------- +D|-2-2-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-5-5-5-5-5-5-5-5-5-5-5-5-5- +A|-0-0-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-5-5-5-5-5-5-5-5-5-5-5-5-5- +E|-----2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-3-3-3-3-3-3-3-3-3-3-3- + + + +E|----------- +B|-----2-2-0- +G|-----2-2-2- +D|-5-5-2-2-2- +A|-5-5-0-0-0- +E|-3-3------- + diff --git a/guitar/tabs/Rush/the_weapon.prj b/guitar/tabs/Rush/the_weapon.prj new file mode 100644 index 0000000..b6ea73a --- /dev/null +++ b/guitar/tabs/Rush/the_weapon.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=the_weapon.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4) diff --git a/guitar/tabs/Rush/the_weapon.tab b/guitar/tabs/Rush/the_weapon.tab new file mode 100644 index 0000000..802950e --- /dev/null +++ b/guitar/tabs/Rush/the_weapon.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-------1-s0---3---1-s0-----------0-------0- +B|-----3------3---3------3-------1-------1--- +G|-0-0---------------------0---3-------2----- +D|-0-----------------------0-3-------3------- +A|------------------------------------------- +E|------------------------------------------- + diff --git a/guitar/tabs/Rush/time_stand_still.prj b/guitar/tabs/Rush/time_stand_still.prj new file mode 100644 index 0000000..5c9d969 --- /dev/null +++ b/guitar/tabs/Rush/time_stand_still.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=time_stand_still.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4) diff --git a/guitar/tabs/Rush/time_stand_still.tab b/guitar/tabs/Rush/time_stand_still.tab new file mode 100644 index 0000000..9ad9726 --- /dev/null +++ b/guitar/tabs/Rush/time_stand_still.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|---------------------0--------------------------------0----------- +B|-----------------2-2-0---------------4-5-b4-5-b4-5-b4-0----------- +G|-----4-----4-----2-2-2---------------4----------------2----------- +D|---4-----4-------2-2-2---------------4----------------2----------- +A|-------7-----4-0-0-0-1-------0-2-4-2------------------1-------0-2- +E|-7-------------------0-0-2-4--------------------------0-0-2-4----- + + + +E|----------------------------------------------------------------- +B|-----4-5-b4-5-b4-5-b4---2-4-2-4-s5-4-2-4-2-----------0----------- +G|-----4----------------4------------------------4---4---------2-2- +D|-----4---------------------------------------4---2-------2---2-2- +A|-4-2---------------------------------------2-----------4---0-0-0- +E|----------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/tom_sawyer.prj b/guitar/tabs/Rush/tom_sawyer.prj new file mode 100644 index 0000000..0eb378f --- /dev/null +++ b/guitar/tabs/Rush/tom_sawyer.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=tom_sawyer.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4) diff --git a/guitar/tabs/Rush/tom_sawyer.tab b/guitar/tabs/Rush/tom_sawyer.tab new file mode 100644 index 0000000..2c3fae6 --- /dev/null +++ b/guitar/tabs/Rush/tom_sawyer.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|-------0---------------3-------0-------0---0-0-0-------------2- +B|-------0-------3-------3-------3-------0---0-0-0-------3-3-3-3- +G|-------9-------2-------0-------0-------9-9-9-9-9-------2-2-2-2- +D|-------9-------0-------2---------------9-9-9-9-9-------0-0-0-0- +A|-------7---------------0-------3-------7-7-7-7-7--------------- +E|-0-0-0-0-0-0-0---0-0-0---0-0-0---0-0-0---0-------0-0-0--------- + + + +E|-2---------3-3-3-3--------------------------------------------- +B|-3-3-------3-3-3-3-3-3---0-----0-----0---0-----0---0---0---0-2- +G|-2-2-------0-0-0-0-0-0---4-----4-----4---4-----4---4---4---2-4- +D|-0-0-------2-2-2-2-2-2-------------2---2-----2-------------2-4- +A|-----------0-0-0-0-0-0-2-----2-------------3-----2---0-----0-2- +E|-----0-0-0-------------0---2-----3-----------------------3----- + + + +E|--------------------------------------------------------------- +B|-2-2-2-2-2-2-2-2-2---------------4-4-4-4-2-2-2-2--------------- +G|-4-4-4-4-4-4-4-4-4-2-2-2-2-2-2-2-4-4-4-4-2-2-2-2-2-2-2-2-2-2-2- +D|-4-4-4-4-4-4-4-4-4-2-2-2-2-2-2-2-4-4-4-4-2-2-2-2-2-2-2-2-2-2-2- +A|-2-2-2-2-2-2-2-2-2-0-0-0-0-------2-2-2-2-0-0-0-0---------0-0-0- +E|---------------------------3-3-3-----------------3-3-3-3------- + + + +E|-----0------------------------------------------------------------- +B|-----0---10-p7-9---7---10-p7-9---7-----------0-------0------------- +G|-2---4-0---------9---7---------9-----0-0-----4-------4-0-0--------- +D|-2-2---0---------------------------9-0-0-2---2-------4-0-0-7-4-6--- +A|-0-2-------------------------------------2-2-------4-------------7- +E|---0-------------------------------------0-----0-2----------------- + + + +E|------------------------------------------------------------------------ +B|---------------------10-p7-9---7---10-p7-9-------10-p7-9---7------------ +G|-----------------0-----------9---7---------9-7-----------9---7---------- +D|-4---7-4-6-------0-----------------------------9---------------5-s9-s12- +A|---5-------7-5---------------------------------------------------------- +E|---------------7---5---------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------- +B|------------------------------------10-p9-h10-s12-------5-3-p0-h2-3-3-b5-5-h7-p5-5---3-2- +G|-13-p11-h13-s14-13-11-h13-p11-s7-s9------------------------------------------------7----- +D|----------------------------------------------------------------------------------------- +A|------------------------------------------------------5---------------------------------- +E|--------------------------------------------------5-7------------------------------------ + + + +E|-----------------------12-------------------------------------12-16-16-17-19-17-16-17-19-17- +B|-p0-2-3-5-15-15-p12-14----14-12-15-12-12-14-14-15-12----12-15------------------------------- +G|-----------------------------------------------------14------------------------------------- +D|-------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-16-17-19-16-19-17-16-16-19-19-b21-21-19-b21-21-21-21-21-19-b21-19-b21-19-b21-r19-b21-r19-19-b21-21-21- +B|------------------------------------------------------------------------------------------------------- +G|------------------------------------------------------------------------------------------------------- +D|------------------------------------------------------------------------------------------------------- +A|------------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------- +B|-------------------------------------------0-------0---10-p7-9--- +G|-0-------------------------0---------0-----4-------4-0---------9- +D|-0-7-4-6---4---7-4-6-------0---------0-2---2-------4-0----------- +A|---------7---5-------7-5---------5-7---2-2-------4--------------- +E|-------------------------7---5-7-------0-----0-2----------------- + + + +E|---------------------------------17-p14-16----14------- +B|-7-----------10-p7-9---7-h9-p7-------------17----15-17- +G|---9------11---------9---------9----------------------- +D|-------11---------------------------------------------- +A|-----9------------------------------------------------- +E|------------------------------------------------------- + diff --git a/guitar/tabs/Rush/virtuality.prj b/guitar/tabs/Rush/virtuality.prj new file mode 100644 index 0000000..2f2371c --- /dev/null +++ b/guitar/tabs/Rush/virtuality.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=virtuality.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4) diff --git a/guitar/tabs/Rush/virtuality.tab b/guitar/tabs/Rush/virtuality.tab new file mode 100644 index 0000000..0b8c5d9 --- /dev/null +++ b/guitar/tabs/Rush/virtuality.tab @@ -0,0 +1,82 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|----------------------------------------------------------------- +A|-------3-0------5-0---7-------3-0-----------3-0------5-0---7----- +E|-0-3-4-----3-s5-----6---0-3-4-----5-3-0-3-4-----3-s5-----6---0-3- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|-------7--------------------------------------------------------- +D|-------6--------------------------------------------------------- +A|---3-0-7-------3-0------5-0---7-------3-0-----------3-0------5-0- +E|-4-------0-3-4-----3-s5-----6---0-3-4-----5-3-0-3-4-----3-s5----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---------------8-7-----------------------5---5----------------- +D|---------------7-6-----------5-----------5-5-5-----------5----- +A|---7-------3-0-8-7---------5-----------5---5-----------5------- +E|-6---0-3-4---------5-5-5-4-----5-5-5-4---------5-5-5-4-----5-5- + + + +E|-----------------------------2-3-2----------------------------- +B|-----------------------------3-3-3----------------------------- +G|-------5---5---5---------5---2-2-2----------------------------- +D|-------5-5-5-2-5-5-7-5-2-5-5-0-0-0----------------------------- +A|-----5---5---2-3-5-7-5-2-3-5----------------------------------- +E|-5-4---------0---3-5-3-0---3-------5-5-5-5-4-4-3-3-2-4-2-4-2-2- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|---------------------------------------------------------------- +D|-------------------------0----0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0- +A|-------------------------3-s5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-3-3-5- +E|-2-4-2-4-3-3-4-4-5-5-5-5---------------------------------------- + + + +E|----------------------------------------------10-------------------- +B|------------------------9---10-------9---10------------9---10------- +G|------------------9-9-9---9----9-9-9---9----9----9-9-9---9----9-9-9- +D|-0-0-0-0-0-0-0------------------------------------------------------ +A|-5-3-3-0-0-3-3-s5--------------------------------------------------- +E|-------------------------------------------------------------------- + + + +E|------------0-0-0------------------------------------------------ +B|-9---10---9-3-3-3------------------------------------------------ +G|---9----9---2-2-2----------------------------------8-8-7--------- +D|------------0-0-0----------------------------------7-7-6--------- +A|------------------------3-0------5-0---7-------3-0-8-8-7-------3- +E|------------------0-3-4-----3-s5-----6---0-3-4-----------0-3-4--- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|--------------------------7----------------------------------8-8- +D|--------------------------6----------------------------------7-7- +A|-0------5-0---7-------3-0-7-------3-0------5-0---7-------3-0-8-8- +E|---3-s5-----6---0-3-4-------0-3-4-----3-s5-----6---0-3-4--------- + + + +E|-------------------------------------------- +B|-------------------------------------------- +G|-7------------------------------------------ +D|-6------------------------------------------ +A|-7-------3-0------5-0---7-------3-0--------- +E|---0-3-4-----3-s5-----6---0-3-4-----5-3-5-3- + diff --git a/guitar/tabs/Rush/vital_signs.prj b/guitar/tabs/Rush/vital_signs.prj new file mode 100644 index 0000000..1a0447f --- /dev/null +++ b/guitar/tabs/Rush/vital_signs.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=vital_signs.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4) diff --git a/guitar/tabs/Rush/vital_signs.tab b/guitar/tabs/Rush/vital_signs.tab new file mode 100644 index 0000000..c2e2ca7 --- /dev/null +++ b/guitar/tabs/Rush/vital_signs.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|---8-8-8-8-8-6-3-4-4-1-8-4-8-8-8-4-8-8-8----------------------- +B|---8-8-8-8-8-6-3-4-4-1-8-4-8-8-8-4-8-8-8----------------------- +G|-4-8-8-8-8-8-7-3-5-5-1-8-5-8-8-8-5-8-8-8----------------------- +D|-4---------------------------------------8-8-8-8-8-8-8-8-8-8-8- +A|-----------------------------------------8-8-8-8-8-8-8-8-8-8-8- +E|-----------------------------------------6-6-6-6-6-6-6-6-6-6-6- + + + +E|-----------------------------------8-------------6------------6-4-4-6- +B|-----------------------------------8-------------6------------6-4-4-6- +G|-----------------------------------8-------------7------------7-5-5-7- +D|-8-------8-6-6-13-13-13-12-8-10-10---8-8-8-8-8-8---6-6-6-6-10-8-6-6-8- +A|-8---6---8-6-6-13-13-13-12-6-10-10---8-8-8-8-8-8---6-6-6-6-10-8-6-6-8- +E|-6-8---8-6-4-4-11-11-11-10-6---------6-6-6-6-6-6---4-4-4-4----6-4-4-6- + diff --git a/guitar/tabs/Rush/war_paint.prj b/guitar/tabs/Rush/war_paint.prj new file mode 100644 index 0000000..bf63836 --- /dev/null +++ b/guitar/tabs/Rush/war_paint.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=war_paint.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4) diff --git a/guitar/tabs/Rush/war_paint.tab b/guitar/tabs/Rush/war_paint.tab new file mode 100644 index 0000000..2be94d1 --- /dev/null +++ b/guitar/tabs/Rush/war_paint.tab @@ -0,0 +1,46 @@ +%TabMaster v2.00r% + + +E|-3-3-3-3-2-2-3------------------------------------------------- +B|-3-3-3-3-3-3-3-----------------------------------0------------- +G|-0-0-0-0-2-2-0-----0-2-0-------0-2-0---------5-------5-------0- +D|-0-0-2-2-0-0-2---4-------4---4-------4-----5---5---5---3---4--- +A|-2-2-3-3-----3-5-----------5-----------5-3-------------3-5----- +E|-3-3---------------------------------------------------1------- + + + +E|--------------------------------------------------------------- +B|-------0-----------------------0------------------------------- +G|-2-0---------0-2-0---------5-------5---------0-----------0----- +D|-----4-----4-------4-----5---5---5---3-----5---5-------3---3--- +A|---------5-----------5-3-------------3---5-------5---3-------3- +E|-------------------------------------1-3-----------1----------- + + + +E|-------------------------------------------3------------------- +B|-------------------------------0-----------3------------------- +G|---------0-------------0-------2-2-0-----0-0------------------- +D|-------3---3---------5---5-----------0-2---0-------0-2-0-3-0-2- +A|-----5-------5-----7-------7---------------2-0-2-3------------- +E|-1-6-----------6-8-----------8-------------3------------------- + + + +E|-----------3----------------------------------14-14-14-14-12---------------------------- +B|-----------3-12-12-12-13-15-13-12-13-15-15-15----------------15-12----------------15-12- +G|-----------0-12-12-------------------------------------------------14-------12-14------- +D|-0---------0----------------------------------------------------------12-14------------- +A|---3-0-2-0-2---------------------------------------------------------------------------- +E|-----------3---------------------------------------------------------------------------- + + + +E|----19-19-19-19----------------------19-19-19-19--------------------------------------------- +B|-------------------------------------------------------------18-15--------------------------- +G|-14----------------17-19-17----17----------------15-17-17-15-------17-----19-----17-----12-5- +D|----------------19----------------------------------------------------s17----s15----s10------ +A|----------------------------19----19--------------------------------------------------------- +E|--------------------------------------------------------------------------------------------- + diff --git a/guitar/tabs/Rush/what_youre_doing.prj b/guitar/tabs/Rush/what_youre_doing.prj new file mode 100644 index 0000000..602897c --- /dev/null +++ b/guitar/tabs/Rush/what_youre_doing.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=what_youre_doing.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4)(510,4)(511,4)(512,4)(513,4)(514,4)(515,4)(516,4)(517,4)(518,4)(519,4)(520,4)(521,4)(522,4)(523,4)(524,4)(525,4)(526,4)(527,4)(528,4)(529,4)(530,4) diff --git a/guitar/tabs/Rush/what_youre_doing.tab b/guitar/tabs/Rush/what_youre_doing.tab new file mode 100644 index 0000000..b305ad2 --- /dev/null +++ b/guitar/tabs/Rush/what_youre_doing.tab @@ -0,0 +1,163 @@ +%TabMaster v2.00r% + + +E|------------------------------------------------------------------- +B|------------------------------------------------------------------- +G|------------------------------------------------------------------- +D|-------------------------------5---------------------------------5- +A|--------------5-7----------------7--------------5-7---------------- +E|-7-0-3-4-5-h7-----0-0-3-4-5-h7-----7-0-3-4-5-h7-----0-0-3-4-5-h7--- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|-----7-7-7-7-7-7-7-7-5-----------------------------5-----7-7-7-7- +A|-7---7-7-7-7-7-7-7-7-5------------5-7----------------7---7-7-7-7- +E|---7-5-5-5-5-5-5-5-5-3-0-3-4-5-h7-----0-0-3-4-5-h7-----7-5-5-5-5- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|-7-7-7-7-5-----------------------------5-----9-9-9-9-7-5--------- +A|-7-7-7-7-5------------5-7----------------7---9-9-9-9-7-5--------- +E|-5-5-5-5-3-0-3-4-5-h7-----0-0-3-4-5-h7-----7-7-7-7-7-5-3-0-3-4-5- + + + +E|---------------------------5------------5---7---7------------------- +B|-----------------------------0-s0-r0-h0-0-0---0--------------------- +G|------------------------------------------5------------------------- +D|---------------------5----------------------------7-7-7-7-7-7-7-7-5- +A|----5-7----------------7--------------------------7-7-7-7-7-7-7-7-5- +E|-h7-----0-0-3-4-5-h7-----7------------------------5-5-5-5-5-5-5-5-3- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|------------------------------------------------------------------ +D|-----------------------------5-----7-7-7-7-7-7-7-7-5-------------- +A|------------5-7----------------7---7-7-7-7-7-7-7-7-5------------5- +E|-0-3-4-5-h7-----0-0-3-4-5-h7-----7-5-5-5-5-5-5-5-5-3-0-3-4-5-h7--- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|------------------------------------------------------------------ +D|----------------5-----9-9-9-9-7-5-----------------------------5--- +A|-7----------------7---9-9-9-9-7-5------------5-7----------------7- +E|---0-0-3-4-5-h7-----7-7-7-7-7-5-3-0-3-4-5-h7-----0-0-3-4-5-h7----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-----------------------------4-5-7---------------------------4- +A|---------4-4-4-5-5-5-6-6-6-7-------------4-4-4-5-5-5-6-6-6-7--- +E|-7-5-5-5---------------------------5-5-5----------------------- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|-5-7-----------------------------5------------------------------- +A|----------------5-7----------------7---------4-4-4-5-5-5-6-6-6-7- +E|-----0-3-4-5-h7-----0-0-3-4-5-h7-----7-5-5-5--------------------- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|---------------------------------------------------------------- +D|-4-5-7---------------------------4-5-7-------------------------- +A|-------------4-4-4-5-5-5-6-6-6-7------------------5-7----------- +E|-------5-5-5---------------------------0-3-4-5-h7-----0-0-3-4-5- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|----5-----------------------------7-9-7-------------------------- +A|------7---------6-6-6-7-7-7-8-8-9------------------5-7----------- +E|-h7-----7-7-7-7-------------------------0-3-4-5-h7-----0-0-3-4-5- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|----------9-8-7---------9-8-7---------9-8-7---7----------------- +D|----5-----------9-8-7-5-------9-8-7-5-------9---9-7-5-7-5---5--- +A|------7---------------------------------------------------7---7- +E|-h7-----7------------------------------------------------------- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|------------------------------------------9-8-7---------9-8-7----- +D|------------------------------------5-----------9-8-7-5-------9-8- +A|-5-----------------5-7----------------7--------------------------- +E|---7-s5-0-3-4-5-h7-----0-0-3-4-5-h7-----7------------------------- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|-----9-8-7---7---------------------------------------------------- +D|-7-5-------9---9-7-5-7-5---5-------------------------------------- +A|-------------------------7---7-5-----------------5-7-------------- +E|---------------------------------7-s5-0-3-4-5-h7-----0-0-3-4-5-h7- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|---------------------4-5-4-5-6-7-6------------------------------- +D|-5-----5-4-5-6-7-6-7---------------5----------------------------- +A|---7--------------------------------------------5-7-------------- +E|-----7-------------------------------0-3-4-5-h7-----0-0-3-4-5-h7- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|-5-----7-7-7-7-7-7-7-7-5-----------------------------5-----7-7-7- +A|---7---7-7-7-7-7-7-7-7-5------------5-7----------------7---7-7-7- +E|-----7-5-5-5-5-5-5-5-5-3-0-3-4-5-h7-----0-0-3-4-5-h7-----7-5-5-5- + + + +E|----------------------------------------------------------------- +B|----------------------------------------------------------------- +G|----------------------------------------------------------------- +D|-7-7-7-7-7-5-----------------------------5-----9-9-9-9-7-5------- +A|-7-7-7-7-7-5------------5-7----------------7---9-9-9-9-7-5------- +E|-5-5-5-5-5-3-0-3-4-5-h7-----0-0-3-4-5-h7-----7-7-7-7-7-5-3-0-3-4- + + + +E|-----------------------------------------------------------------3- +B|-----------------------------------------------------------------3- +G|-----------------------------------------------------------------4- +D|-----------------------5---------------------------------5-----5--- +A|------5-7----------------7--------------5-7----------------7---5--- +E|-5-h7-----0-0-3-4-5-h7-----7-0-3-4-5-h7-----0-0-3-4-5-h7-----7-3--- + + + +E|---5----- +B|---5----- +G|---6-9-9- +D|-7---9-9- +A|-7---7-7- +E|-5---0-0- + diff --git a/guitar/tabs/Rush/wheres_my_thing.prj b/guitar/tabs/Rush/wheres_my_thing.prj new file mode 100644 index 0000000..a1757d8 --- /dev/null +++ b/guitar/tabs/Rush/wheres_my_thing.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=wheres_my_thing.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4) diff --git a/guitar/tabs/Rush/wheres_my_thing.tab b/guitar/tabs/Rush/wheres_my_thing.tab new file mode 100644 index 0000000..146e914 --- /dev/null +++ b/guitar/tabs/Rush/wheres_my_thing.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|-------------------------------------------------------------------------12------- +B|-7-5-5-5-7-7-7-7-7-7-5-5-------15-12-------15-13-12----------15-12----------13-12- +G|-5-4-4-4-5-5-5-5-5-5-4-4----12----------12----------14----12----------12---------- +D|-7-5-5-5-7-7-7-7-7-7-5-5-12----------12----------------12----------12------------- +A|---------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|----15-15-15------------------------------------------------------- +B|----15-15-15------------------------------------------------------- +G|-14---------------------------------------------------------------- +D|------------------------------------------------------------------- +A|-----------------------7---------------5-----------7--------------- +E|-------------3-5-0-3-5---0-3-5-0-3-5-7---3-5-0-3-5---0-3-5-0-3-5-5- + + + +E|------------------------------------------------------------------------- +B|----------------------------------------------------------------12----15- +G|-----------------------------------2-1-2-2-12-14-12-12-------12----14---- +D|-------------------------------------------------------14-14------------- +A|---5-------------7---------------5--------------------------------------- +E|-7---0-3-5-0-3-5---0-3-5-0-3-5-7----------------------------------------- + + + +E|------------------------------------------------------------------ +B|-15-12------------------------------------------------------------ +G|-------14--------------------------------------------------------- +D|------------------------------------------------------------------ +A|----------5-5-3-5-5-3-3-5-----------------5-5-3-5-5-3---------5-5- +E|--------------------------5-3-3-5-5-3-3-5-------------0-1-2-3----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|-3-5-5-3-3-5-----------------5-5-3-5-3-3-5-5-5-3-5-5-3-3---5--- +E|-------------5-3-3-5-5-3-3-5-----------------------------5---3- + + + +E|------------------------------------------------------------------ +B|---------------------------------------------------------------17- +G|------------------------------------------------------------14---- +D|---------------------------------------------------------14------- +A|---------5-5-3-5-5-3-3-5---------5-5-3-5-5-3---------------------- +E|-3-5-5-3-----------------0-1-2-3-------------5-3-3-5-5-3---------- + + + +E|----------14---------- +B|-14----------15-14---- +G|-------14----------16- +D|----14---------------- +A|---------------------- +E|---------------------- + diff --git a/guitar/tabs/Rush/working_man.prj b/guitar/tabs/Rush/working_man.prj new file mode 100644 index 0000000..0269111 --- /dev/null +++ b/guitar/tabs/Rush/working_man.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=working_man.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4) diff --git a/guitar/tabs/Rush/working_man.tab b/guitar/tabs/Rush/working_man.tab new file mode 100644 index 0000000..2ce9f66 --- /dev/null +++ b/guitar/tabs/Rush/working_man.tab @@ -0,0 +1,82 @@ +%TabMaster v2.00r% + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|---------------------------------------------------------------- +D|-2-2-2-2---------2-2-2----------2---2---2---2---0---0---0---0--- +A|-2-2-2-2---5-----2-2-2---3-3-h5---2---2---2---2---0---0---0---0- +E|-0-0-0-0-0---5-0-0-0-0-0---------------------------------------- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------------------------- +G|----------------------1-1-1-1-----1-1-1-1----------------------- +D|----------------------2-2-2-2-----2-2-2-2----------------------- +A|---5---5---7---0-5-s7-2-2-2-2-5---2-2-2-2-3-3-5-7---7---7---7--- +E|-3---3---5---0--------0-0-0-0---5-0-0-0-0---------7---7---7---7- + + + +E|--------------------------------------------------------------- +B|---------------------------------1-5-5-5-7-7-7-8-8-7-8-7-5---7- +G|-----------------------------------------------------------7--- +D|--------------------------------------------------------------- +A|-5---5---5---5-----5---5---7---7------------------------------- +E|---5---5---5---5-3---3---5---0--------------------------------- + + + +E|--------------------------------------------------------------- +B|-5-----5------------------------------------------------------- +G|---7-6---7-6-4---------------------------------------------7-9- +D|---------------5-7-5-7-5---5-7-5-7-7-5---5-7-7-5-------5-7-9--- +A|-------------------------7-------------7---------7-5-7--------- +E|--------------------------------------------------------------- + + + +E|------------------10-10----10----------------------------------------------- +B|-------8-10-10-10-------10----10-8---8---8-10-8---8-12-10-10-8---10-8------- +G|-7-7-9-----------------------------9---9--------9--------------9------7-9--- +D|---9----------------------------------------------------------------------7- +A|---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---7-9-9-9-9-7---7-9-9-7-9-9-7-7------------------------------- +D|-9-------------9-------9-----9---9-8-7-5-7-5-7-5--------------- +A|---------------------------------------------7---7-5-7-7-7-5--- +E|-------------------------------------------------------------7- + + + +E|--------------------------------------------------------------- +B|-----------------------------------------------------5-5-5-3--- +G|-------------------------------------------------------------4- +D|--------------------------------------------------------------- +A|-7-7-7-5---7-5---5-7-5-7-7-7-5-7-7-7-5-7---5-5---7-5----------- +E|---------7-----7---------------7---------5-----7--------------- + + + +E|-----------------3-----------------------------0-3-5-5-5-5-3--- +B|-5-5-5-3---5-3-----5-3-5-5-5-3-5-5-5-3-5---3-----------------5- +G|---------4-----4---------------4---------4---4----------------- +D|--------------------------------------------------------------- +A|--------------------------------------------------------------- +E|--------------------------------------------------------------- + + + +E|-5-3-------3------------------------------------------- +B|-----5-3-5---5-3-0-3-5--------------------------------- +G|------------------------------------------------------- +D|------------------------------------------------------- +A|-----------------------7-7-7-7-5---5-5-5--------------- +E|---------------------------------7-------7-5-3-3-5-3-0- + diff --git a/guitar/tabs/Rush/xanadu.prj b/guitar/tabs/Rush/xanadu.prj new file mode 100644 index 0000000..4cb51ae --- /dev/null +++ b/guitar/tabs/Rush/xanadu.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=xanadu.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4) diff --git a/guitar/tabs/Rush/xanadu.tab b/guitar/tabs/Rush/xanadu.tab new file mode 100644 index 0000000..a33838b --- /dev/null +++ b/guitar/tabs/Rush/xanadu.tab @@ -0,0 +1,91 @@ +%TabMaster v2.00r% + + +E|---12-------11--------12-------11--------0------------------------------- +B|------10-12----9-10------10-12----9-10---0------------------------------- +G|-9------------------9--------------------4------------------------------- +D|-----------------------------------------2-0-------4-2-0---0------------- +A|-----------------------------------------2---4-2-0-------4---4-2-0-4-2-0- +E|---------------------------------------0--------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-0-------4-2-0---2-0-----0------------------------------------- +A|---4-2-0-------4-----4-2---4-2-0-4-2-0---2-0-----0------------- +E|---------------------------------------4-----4-2---4-2-0-4-2-0- + + + +E|---0---5-2-0-0---5-2-0-----0-----0-------0---0-----------0----- +B|---0-9-7-4-2-0-9-7-4-2---2-----0-------0-------0-----------0--- +G|---4-9-7-4-2-4-9-7-4-2-2-----4-------3-----1-----1-----------1- +D|---2-9-7-4-2-5-9-7-4-2-------5-----4-------2-----------2------- +A|-2-2-7-5-2-0-5-7-5-2-0-------5-----4-------2---------2--------- +E|---0---------3---------------3-----2-------0-------0----------- + + + +E|-0-0-0-------0-----------0-----0-0-0-0-0-------0---0-0-------0- +B|-0-0-0---------0-----------0---0-0-0-0-0-----0---0-0-0-----0--- +G|-4-3-6-----------1-----------1-4-3-8-1-3---3-------8-6---6----- +D|-5-3-7-----2-----------2-------5-4-9-2-4-4---------9-7-7------- +A|-5-2-7---2-----------2---------5-4-9-2-4-----------9-7--------- +E|-3-2-5-0-----------0-----------3-2-7-0-2-----------7-5--------- + + + +E|---2-0-3-1-0-------------------0-----------------------------0- +B|-0-3-1-3-1-0-----3-------3-------3-------------3-------3------- +G|---2-2-4-2-1---2---0---2---0-------0-------------0-------0----- +D|---0-2-5-3-2-0-------------------------------7-------7--------- +A|-----0-5-3-2---------1-------3-------------5---------------3--- +E|-------3-1-0-------------------------3-2-0---------6----------- + + + +E|-------------------------------------------------------------------------------- +B|-3---------------17---19-19-21-21-22-------------------------------------------- +G|---0--------------------------------------9-11-13-13---11-11-11-9-11-13-13----7- +D|-------------------------------------9-11------------9-11------------------11--- +A|-------------------------------------------------------------------------------- +E|-----3-2-0-0-2-0----2----------------------------------------------------------- + + + +E|------------------------------------------------------12---15-12----12-15- +B|-----------------------------------------------------------------15------- +G|-6-4-------------------------11-----12-11-9-9-11-9-11----9---------------- +D|-----7-5-4-5-4------------------------------------------------------------ +A|---------------7-5-4-0---------------------------------------------------- +E|-----------------------2-3-3----2-0--------------------------------------- + + + +E|-17-15-15-15-15-14-12-------------------------------------------------------------------12-15- +B|-------------------15-14-12----------------------------------------------------12-15---------- +G|----------------------------14-13-12----------------------------------12-14----------14------- +D|-------------------------------------14-13-12-------------------12-14-------14---------------- +A|----------------------------------------------14-13-12----12-14------------------------------- +E|-------------------------------------------------------15------------------------------------- + + + +E|----12-15----------------------17-19-19-17-17-15-----------2-------0-------3----- +B|-15-------15-17-19-17-19-17-17-19-17-------------17-15-------3-------1-------3--- +G|---------------------------------------------------------2----------------------- +D|-------------------------------------------------------0---------2--------------- +A|---------------------------------------------------------------0---------5------- +E|-----------------------------------------------------------------------3-------1- + + + +E|---1---------------------16-0- +B|-----1-17----------17-------0- +G|-------------16-------16----4- +D|----------14----------------2- +A|-3--------------14----------2- +E|----------------------------0- + diff --git a/guitar/tabs/Rush/yyz.prj b/guitar/tabs/Rush/yyz.prj new file mode 100644 index 0000000..c210165 --- /dev/null +++ b/guitar/tabs/Rush/yyz.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=yyz.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4)(200,4)(201,4)(202,4)(203,4)(204,4)(205,4)(206,4)(207,4)(208,4)(209,4)(210,4)(211,4)(212,4)(213,4)(214,4)(215,4)(216,4)(217,4)(218,4)(219,4)(220,4)(221,4)(222,4)(223,4)(224,4)(225,4)(226,4)(227,4)(228,4)(229,4)(230,4)(231,4)(232,4)(233,4)(234,4)(235,4)(236,4)(237,4)(238,4)(239,4)(240,4)(241,4)(242,4)(243,4)(244,4)(245,4)(246,4)(247,4)(248,4)(249,4)(250,4)(251,4)(252,4)(253,4)(254,4)(255,4)(256,4)(257,4)(258,4)(259,4)(260,4)(261,4)(262,4)(263,4)(264,4)(265,4)(266,4)(267,4)(268,4)(269,4)(270,4)(271,4)(272,4)(273,4)(274,4)(275,4)(276,4)(277,4)(278,4)(279,4)(280,4)(281,4)(282,4)(283,4)(284,4)(285,4)(286,4)(287,4)(288,4)(289,4)(290,4)(291,4)(292,4)(293,4)(294,4)(295,4)(296,4)(297,4)(298,4)(299,4)(300,4)(301,4)(302,4)(303,4)(304,4)(305,4)(306,4)(307,4)(308,4)(309,4)(310,4)(311,4)(312,4)(313,4)(314,4)(315,4)(316,4)(317,4)(318,4)(319,4)(320,4)(321,4)(322,4)(323,4)(324,4)(325,4)(326,4)(327,4)(328,4)(329,4)(330,4)(331,4)(332,4)(333,4)(334,4)(335,4)(336,4)(337,4)(338,4)(339,4)(340,4)(341,4)(342,4)(343,4)(344,4)(345,4)(346,4)(347,4)(348,4)(349,4)(350,4)(351,4)(352,4)(353,4)(354,4)(355,4)(356,4)(357,4)(358,4)(359,4)(360,4)(361,4)(362,4)(363,4)(364,4)(365,4)(366,4)(367,4)(368,4)(369,4)(370,4)(371,4)(372,4)(373,4)(374,4)(375,4)(376,4)(377,4)(378,4)(379,4)(380,4)(381,4)(382,4)(383,4)(384,4)(385,4)(386,4)(387,4)(388,4)(389,4)(390,4)(391,4)(392,4)(393,4)(394,4)(395,4)(396,4)(397,4)(398,4)(399,4)(400,4)(401,4)(402,4)(403,4)(404,4)(405,4)(406,4)(407,4)(408,4)(409,4)(410,4)(411,4)(412,4)(413,4)(414,4)(415,4)(416,4)(417,4)(418,4)(419,4)(420,4)(421,4)(422,4)(423,4)(424,4)(425,4)(426,4)(427,4)(428,4)(429,4)(430,4)(431,4)(432,4)(433,4)(434,4)(435,4)(436,4)(437,4)(438,4)(439,4)(440,4)(441,4)(442,4)(443,4)(444,4)(445,4)(446,4)(447,4)(448,4)(449,4)(450,4)(451,4)(452,4)(453,4)(454,4)(455,4)(456,4)(457,4)(458,4)(459,4)(460,4)(461,4)(462,4)(463,4)(464,4)(465,4)(466,4)(467,4)(468,4)(469,4)(470,4)(471,4)(472,4)(473,4)(474,4)(475,4)(476,4)(477,4)(478,4)(479,4)(480,4)(481,4)(482,4)(483,4)(484,4)(485,4)(486,4)(487,4)(488,4)(489,4)(490,4)(491,4)(492,4)(493,4)(494,4)(495,4)(496,4)(497,4)(498,4)(499,4)(500,4)(501,4)(502,4)(503,4)(504,4)(505,4)(506,4)(507,4)(508,4)(509,4) diff --git a/guitar/tabs/Rush/yyz.tab b/guitar/tabs/Rush/yyz.tab new file mode 100644 index 0000000..9dc42ea --- /dev/null +++ b/guitar/tabs/Rush/yyz.tab @@ -0,0 +1,154 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-0-------------------------0---------------------------------4- +D|-0-------------------------0---------------------------4-6-7--- +A|---3---3-3-3---3-3-3-3-------3-3-3-3-3-3-3-3-3-3-4-6-7--------- +E|-----2-------2---------2-2------------------------------------- + + + +E|---------------------------------------------------------------- +B|---4-5-4-------------------------------------------------------- +G|-6-------6-5-4-h5-4-----7-7-7-5-7-5-4---------2-2---2---------2- +D|--------------------5-4---------------7-5-4-4-----4---4-3-2----- +A|------------------------------------------------------------4--- +E|---------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-2---2---------------2-2---2---------2-2---2---------------5-5- +D|---4---4-2---------------4---4-3-2-------4---4-2--------------- +A|-----------4-3-2-4-----------------4-------------4-3-2-4------- +E|-------------------2-------------------------------------2----- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---5---------5-5---5---------------5-5---5---------5-5---5----- +D|-7---7-6-5-------7---7-5---------------7---7-6-5-------7---7-5- +A|-----------7-------------7-6-5-7-----------------7------------- +E|---------------------------------5----------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---------------2-2---2---------2-2---2---------------2-2---2--- +D|---5-5---5-5-------4---4-3-2-------4---4-2---------------4---4- +A|-7-----7-----7---------------4-------------4-3-2-4------------- +E|---------------------------------------------------2----------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------2-2---2---------------5-5---5---------5-5---5----------- +D|-3-2-------4---4-2---------------7---7-6-5-------7---7-5------- +A|-----4-------------4-3-2-4-----------------7-------------7-6-5- +E|---------------------------2----------------------------------- + + + +E|---------------------------------------------------------------- +B|---------------------------------------------4-5-7---4-5-7-7-b9- +G|-----5-5---5---------5-5---5---------------0-------2------------ +D|---------7---7-6-5-------7---7-5-----------0-------------------- +A|-7-----------------7-------------7-6-5-7------------------------ +E|---5-------------------------------------5---------------------- + + + +E|---------------------------------------------------------------------------- +B|-r7-4-5-7--------------4-5-7-7-b9-r7-1-3-s5-3-h5-p3-h5-s8-1-3-s5-3-h5-p3-s5- +G|----------2-2-2-2-2-h4------------------------------------------------------ +D|---------------------------------------------------------------------------- +A|---------------------------------------------------------------------------- +E|---------------------------------------------------------------------------- + + + +E|--------------------------------------------------------------------7-7-7-7-7--- +B|-h8-p5-h8-p5-1-3-s5-3-h5-p3-h5-s8-1-3-s5-3-h5-p3-s5-h8-p5-h8-p5-----7-7-7-7-7--- +G|----------------------------------------------------------------0-0-8-8-8-8-8-0- +D|----------------------------------------------------------------0-0-9-9-9-9-9-0- +A|-------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------- + + + +E|-8--8--8--8--8--8----7-7---------8--8---------8----7-7---8-8-8-----7---7- +B|-8--8--8--8--8--8----7-7---------8--8---------8----7-7---8-8-8-----7---7- +G|-9--9--9--9--9--9--0-8-8-------0-9--9---------9--0-8-8-0-9-9-9-0---8---8- +D|-10-10-10-10-10-10-0-9-9-----7-0-10-10------8-10-0-----0-------0---9---9- +A|---------------------------9-------------10------------------------------ +E|-------------------------7-------------8-------------------------7---7--- + + + +E|-----8----8--8----7-7-7---8--8--8--8--10-p8-p7--------------------------------------- +B|-----8----8--8----7-7-7---8--8--8--8-----------0-h7-h8-h10-10-p8-h10-p8-p7-h8-p7----- +G|-0---9----9--9--0-8-8-8-0-9--9--9--9---------------------------------------------9-8- +D|-0---10---10-10-0-9-9-9-0-10-10-10-10------------------------------------------------ +A|------------------------------------------------------------------------------------- +E|---8----8---------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------------------- +B|----7-8-10-7-s8-s7---7-----------7-b8----------0-1-h4-p1-p0-h4-h7-p4-p0-h12-12-12- +G|-h9----------------9---9-p8-8-h9------9-p8-9-9------------------------------------ +D|---------------------------------------------------------------------------------- +A|---------------------------------------------------------------------------------- +E|---------------------------------------------------------------------------------- + + + +E|-14-14-12-s11-h12-p11-8-7-8-11-8-11-11-11-8-17-12-h14-p12-h15-p14-p12-h14-p11-h12----------------------- +B|----------------------------------------------------------------------------------16-p13-s12-h13-h15-15- +G|-------------------------------------------------------------------------------------------------------- +D|-------------------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------------------------------------------- +B|-b17-r15-p13-s12-h13-12-13-b15-15-r13-p12-s10-h12-13-13-p12-s10-h12-12-p10-s8-h10-p8-p7-7-0-h1-h4-p1-p0-h1- +G|----------------------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------------------- +E|----------------------------------------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------------- +B|-p0-5-h7-p4-p0-h4-h5-5-5-4-h5-p4-p0-h10-h13-13-p10-h12-p10-s8-10-p7-h8-p7-h8-s10-10-0-h10-h12-p10- +G|-------------------------------------------------------------------------------------------------- +D|-------------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------------------------------5-5- +B|-p0-h10-h12-p10-p0-h8-h10-p8-p0-h8-h10-p8-p0-h7-h8-p7-p0-h5-h7-p5-p0-h4-h5-p4-p0-h1-h4-p1-p0-5-3- +G|---------------------------------------------------------------------------------------------5-4- +D|---------------------------------------------------------------------------------------------7-5- +A|------------------------------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------------------- + + + +E|-5-8-------------------------------- +B|-7-10------------------------------- +G|-7-10-10-0-12-s5-8-7-b8-r7---------- +D|-7-10----------------------8-------- +A|-----------------------------7------ +E|-------------------------------7-10- + diff --git a/guitar/tabs/SRV/SRV - MARY HAD A LITTLE LAMB.tab b/guitar/tabs/SRV/SRV - MARY HAD A LITTLE LAMB.tab new file mode 100644 index 0000000..da95765 --- /dev/null +++ b/guitar/tabs/SRV/SRV - MARY HAD A LITTLE LAMB.tab @@ -0,0 +1,74 @@ +MARY HAD A LITTLE LAMB (as recorded by Stevie Ray Vaugh) + +Original music by George "Buddy" Guy + +I haven't figured out the solo, but this is the intro and the +verses. + +~ = whammy bar tremelo +h = hammer on for next note +p = pull off for next note +s = slide up to next note +(n) = optional fingered note + + + + +Intro (Stevie throws in grace notes but this is the basic structure): + + E7 +|--------------------------------------------------------------------------- +|-----------------------3-3-3-3-2-----------------------------------3-3-3-3- +|-----------------------1-1-1-1-1-----------------------------------1-1-1-1- +|--------0--------------2-2-2-2-2--------------------------------2--2-2-2-2- +|--0--2-----0--2--0---------------------------0h-2--2--2--0----------------- +|--------------------3------------------0--0------------------3------------- + + A7 +|------------------------------------------3--3--3--3----------------------- +|-------------------------2h-3p-2p-0-------2--2--2--2----------------------- +|------------------------------------------2--2--2--2----------------------- +|--------------------------------------------------------------------------- +|-----2h-4--0h-2--2--2-0----------------0----------------------------------- +|--0--0--------------------------------------------------------------------- + + E7 B7 +|--------------------------------------------------------------------------- +|-----------------------3-3-3-3-2-------------------------------------1----- +|-----------------------1-1-1-1-1-----------------------------------2---2--- +|--------0--------------2-2-2-2-2------------------------------------------- +|--0--2-----0--2--0---------------------------0h-2--2--2--0------2--------0- +|--------------------3------------------0--0------------------3------------- + + E7 +|--3--0--------------0--0--------------3--3--3--3--------------------------- +|--------3--0--------3--3--2--0--------3--3--3--3--------------------------- +|--------------2s-4-----4--------2-----1--1--1--1--------------------------- +|--------------------------------------2--2--2--2--------------------------- +|-----------------------------------0--------------------------------------- +|--------------------3------------------0--0------------------3------------- + + +Verse: (4/4 - Each slash is a beat) + +E7 A7 +/ / / / / / / / +1. Mary had a little lamb +2. He followed her to school one day + + E7 +/ / / / / / / / +1. It's fleece as white as snow, yea +2. and broke the teacher's rule + + B7 +/ / / / / / / / +1. Everywhere the Child went +2. What a time they had + +A7 E7 +/ / / / / / / / +1. You know the lamb was sure to go, yea +2. That day at school + + diff --git a/guitar/tabs/SRV/SRV - Texas Flood.tab b/guitar/tabs/SRV/SRV - Texas Flood.tab new file mode 100644 index 0000000..8e9e5d6 --- /dev/null +++ b/guitar/tabs/SRV/SRV - Texas Flood.tab @@ -0,0 +1,333 @@ + Texas Flood by SRV + from the LP Texas Flood + +E|-----------3--5--3-----------------------------8---10--8--8---8---15-15-15| +B|-----------3--5--3--------5-5------------------8---10--8--8---8---15-15-15| +G|-----------4--5--4--------4-4----------7--10---9---10--9--9---9---15-15---| +D|-----2--5------------5----5-5----su10-------------------------------------| +A|--5-----------------------------------------------------------------------| +E|--------------------------------------------------------------------------| + G C Dmin C C9 + + +E|15-----------3--------5--3h5p3-----3--b6--6--3----------------------------| +B|15--------3-----6--3------------6---------------3-------------------------| +G|-------b5------------------------------------------b5--b3-----------------| +D|-----------------------------------------------------------5--5-----------| +A|--------------------------------------------------------------------------| +E|--------------------------------------------------------------------------| + G + +E|-------------------0-----------b8--6---------------6----------------------| +B|-------------------0------8--8--------8--8----8--8----8--6----------------| +G|--4-------------5-------------------------------------------b*5-3--3------| +D|-----5----------4-----------------------------------------------------5---| +A|---------3-4-5------------------------------------------------------------| +E|--------------------------------------------------------------------------| + D G + +E|------6-b8--8--6------------b8--b8-----b$8----6-----------------------b8--| +B|--8-8------------8--8--8-8--------------------------8---8-8-b10--b11------| +G|--------------------------------------------------------------------------| +D|--------------------------------------------------------------------------| +A|--------------------------------------------------------------------------| +E|--------------------------------------------------------------------------| + C7 G + + +E|--b6--6------------------------3---15sd---------6-b8-b8-b8-b8-6-----------| +B|--------8---6-3--------------------15sd-----8-8-----------------8--8----8-| +G|----------------b*5-3---3-b5----3-------------------------------------9---| +D|----------------------5---------------------------------------------------| +A|--------------------------------------------------------------------------| +E|--------------------------------------------------------------------------| + C7 + XXXXX +E|-b6-------6-6-6----b8---b7--bb7-----6------------------------3----------3-| +B|--------------------------------------8---6-3-------------------------3---| +G|-----------------------------------------------b*5-3---3-b5-----3--b5-----| +D|-----------------------------------------------------5--------------------| +A|--------------------------------------------------------------------------| +E|--------------------------------------------------------------------------| + G + + +E|-------3su5--3su5--3su5-5sd3--------3-------------------------------------| +B|-6--3-------------------------6-------6--3---------------3--3-3---b6------| +G|--------------------------------b5----------b5--5--3--b5------------------| +D|--------------------------------------------------------------------------| +A|--------------------------------------------------------------------------| +E|--------------------------------------------------------------------------| + D7 C + + +E|-----3------------------------3-------------------------------------------| +B|----------------------------3---6-3---------------------------------------| +G|--------b5--b5---5p3-----b5----------b5-5-3-------------------------------| +D|----------------------5---------------------5--3--------------------------| +A|--------------------------------------------------5-4-3h4p3---------------| +E|--------------------------------------------------------------6--3--------| + G C G + + +E|-------------------------------------|------------------------3-3---------| +B|-------------------------------------|------------------------5-5---------| +G|-----------------------------------5-|------------------------4-4---------| +D|--5p3h5p3h5p3h5p3h5--5p3h5-----------|------------------------------------| +A|----------------------------3-4-5----|------------------------------------| +E|-------------------------------------|----------------------3-----3-3-----| + Well [D7] its floodin' down in texas + + +E|-3-----------------------------------|------3-----6-3-b8-b6-6-------------| +B|-3-----------------------------------|----3---b6--------------8--6--------| +G|-3-----------------------------------|-b5--------------------------7-b5---| +D|-------------------------------------|------------------------------------| +A|-------------------------------------|------------------------------------| +E|-------------------------------------|------------------------------------| + all of the telephone lines are down + + +E|------3-----5-3h5p3-----3-------------------------------------------------| +B|----3---6-3---------6-3---6-3---------------------------------------------| +G|-b5---------------------------b*5-3---3-----------------------------------| +D|------------------------------------5---5-3-------------------------------| +A|--------------------------------------------5-3---------------------------| +E|------------------------------------------------3-------------------------| + Well its floodin' + + +E|------------------3---------|--3------------------------------------------| +B|----------------------------|--3------------------------------------------| +G|--------------b5---------3--|--3------------------------------------------| +D|----------------------------|--2------------------------------------------| +A|----------------------------|--3------------------------------------------| +E|----------------------3-----|---------------------------------------------| + down in Texas all of the telephone lines are down + + +E|------3-----6-3-b8--b6--6-----------|--6-----6----------------------------| +B|----3---b6----------------8--8--8-8-|-----8----8----6---------------------| +G|-b5---------------------------------|-------------7-----------------------| +D|------------------------------------|-------------------------------------| +A|------------------------------------|-------------------------------------| +E|------------------------------------|-------------------------------------| + Yeah I've been + + +E|------------------15sd---------|--3---------------------------------------| +B|------------------15sd---------|--3---------------------------------------| +G|------------------15sd------3--|------------------------------------------| +D|-------------------------------|------------------------------------------| +A|-------------------------------|------------------------------------------| +E|-------------------------3-----|------------------------------------------| + tryin to cal my baby lord and I can't get a single sound + + +E|-------3-----b6--3--b8--b6--b6--6------------------|----3----------3------- +B|-----3---b6-----------------------8--6-3-----------|---------------3------- +G|--b5-------------------------------------b*5-3---3-|-b5---3--------3------- +D|-----------------------------------------------5---|---------5p3----------- +A|---------------------------------------------------|-------------5---3-4-5- +E|---------------------------------------------------|----------------------- + + +E|----------|-----------------3--3-3---------|------------------------------| +B|----------|-----------------5--5-5------3--|------------------------------| +G|-5--5-5---|-----------------4--4-4----3----|------------------------------| +D|----------|-----------------5--5-5---------|------------------------------| +A|----------|--------------------------------|------------------------------| +E|----------|--------------3----------3------|------------------------------| + Well dark clouds are rollin' and I'm standin' out in the r + + +E|------3--------6-3-------------|------------------------------------------| +B|----3---b6---------3-----------|------------------------------------------| +G|-b5------------------b5-b*5--3-|--su5-----------------------3-------------| +D|-------------------------------|------5----5-3----------3h5---5p3---------| +A|-------------------------------|---------------5-4-3--------------5-------| +E|-------------------------------|---------------------6--------------------| + Well Dark + + +E|------------------3---3--------|------------------------------------------| +B|------------------3---3-5--3---|-3----------------------------------------| +G|------------------3---3-5--3---|-3----------------------------------------| +D|-----------------------------5-|------------------------------------------| +A|-------------------------------|------------------------------------------| +E|---------------3---------------|------------------------------------------| + clouds are rollin and Im standin out in the rain + + +E|-------3--------6-----6-b8--|-su8--6---3-----------------3----------------| +B|-----3---b6-------8---------|-------8----6--------------------------------| +G|-b5-------------------------|--------------b*5--3---3b5----3--------------| +D|----------------------------|---------------------5-----------5p3---------| +A|----------------------------|-------------------------------------5-4-3---| +E|----------------------------|-------------------------------------------6-| + yeah flood + + +E|-----------------15sd----|-3----------------------------------------------| +B|-----------------15sd----|-3----------------------------------------------| +G|-------------------------|-3----------------------------------------------| +D|-------------------------|------------------------------------------------| +A|-------------------------|------------------------------------------------| +E|-----------------------3-|------------------------------------------------| + water keep rollin its about to drive po stevie ray insane + +(THAT IS THE FIRST VERSE THE SECOND VERSE IS VERY SIMILAR SO HERE IS THE SOLO) + + +E|-------3-----6-3-b8--b6-6-----------|-6------6----------------6--b8-------| +B|-----3---b6---------------8--8--8-8-|--8--8----8----6-----8-8-------------| +G|--b5--------------------------------|------------7------------------------| +D|------------------------------------|-------------------------------------| +A|------------------------------------|-------------------------------------| +E|------------------------------------|-------------------------------------| + G G D7 + + +E|---6----------------------10sd------|------6-b8------6--------------------| +B|-----8---8----8-8---11----11sd------|--8-8-------------8--8--8-8----------| +G|------------------------------------|-------------------------------------| +D|------------------------------------|-------------------------------------| +A|------------------------------------|-------------------------------------| +E|------------------------------------|-------------------------------------| + G C9 + + +E|----b8--b8-------b8-b8----b*6-------|--------------------------b8---------| +B|------------------------------------|--8--8-8-b10---b11--b$11-------------| +G|------------------------------------|-------------------------------------| +D|------------------------------------|-------------------------------------| +A|------------------------------------|-------------------------------------| +E|------------------------------------|-------------------------------------| + G + + +E|-8--6-------------------------------------------------| +B|------8--8h11h8h11h8---8h11-8----8--------------------| +G|---------------------9--------10---10-7-b*5-3----3-b5-| +D|----------------------------------------------5-------| +A|------------------------------------------------------| +E|------------------------------------------------------| + C9 + + +E|-3---------3-------3---3---3---3--------|-----------3-----------su15---15-- +B|---------3---3-b6----3---3---3---3--6p3-|----------------------------15---- +G|---3-b5---------------------------------|-6h5h3--b5---3--------3----------- +D|----------------------------------------|----------------5p3--------------- +A|----------------------------------------|--------------------5------------- +E|----------------------------------------|---------------------------------- + G + + +E|------15-----------|---------------3-------3--b6--3-----3-------3--3------| +B|--b18-----18-------|-----------------3--6---------------------------------| +G|--------------5--3-|-----------b5-----------------------------------------| +D|-------------------|--5p3-5-----------------------------------------------| +A|-------------------|------------------------------------------------------| +E|-------------------|--------3---------------------------------------------| + +E|--b6-b6-b6-b6-b6-b8-|--b8-b8-b8-b8-b8-b8-|-b8--6-----------6--------------| +B|--------------------|--------------------|-------8-8---8-8---8----8---8-8-| +G|--------------------|--------------------|--------------------------------| +D|--------------------|--------------------|--------------------------------| +A|--------------------|--------------------|--------------------------------| +E|--------------------|--------------------|--------------------------------| + D7 C7 G C7 + + +E|-6------6----------3-3-6--b8---|---b8------b8---b8-|--b8--b8---b8--b8------ +B|---8--8---8----b6---------b8---|---b8------b8---b8-|--b8--b8---b8--b8------ +G|------------7------------------|-------------------|----------------------- +D|-------------------------------|-------------------|----------------------- +A|-------------------------------|-------------------|----------------------- +E|-------------------------------|-G-----------------|-C7-------------------- + G D7 bend these double stops up and down alot + +E|-10--8--6-------|--b6-----------3-------5--3h5p3-------b6--b6-3--------3--| +B|-----8-----8-8--|-------------3----6--3----------6--3-----------3----3----| +G|----------------|----------b5-------------------------------------b5------| +D|----------------|---------------------------------------------------------| +A|----------------|---------------------------------------------------------| +E|----------------|---------------------------------------------------------| + G7 + + +E|---------------------3---------------------------|--6-8--6b8-b8--6--------| +B|-6--3--------------3---3-6-3-----------b6--b6-b6-|-----------------8--8---| +G|------6p5p3---3-b5-----------6p5p3---3-----------|------------------------| +D|------------5----------------------5-------------|------------------------| +A|-------------------------------------------------|------------------------| +E|-------------------------------------------------|------------------------| + C7 + +E|-------b6---------|--6--b8--8-8-8-8-8-8-8-8-8-8-8-8--b7-b*7| +B|--8--8-----8--8---|----------------------------------------| +G|------------------|----------------------------------------| +D|------------------|----------------------------------------| +A|------------------|----------------------------------------| +E|------------------|----------------------------------------| + + +E|-8--6----------6-b8---6--18sd-|------3------5-3h5p3-----6-3----------3----- +B|------8-8--8-8-6------6--18sd-|----3---6--3---------6-3-----6-3----3---3--- +G|------------------------------|-b5------------------------------b5-------5- +D|------------------------------|-------------------------------------------- +A|------------------------------|-------------------------------------------- +E|------------------------------|-------------------------------------------- + G + + +E|----------------6----------|------------------------------------------3----- +B|---------------------------|-6-3---------------6---------6------------------ +G|-6p5p3---3-5su7-----5p3----|-----5p3---3su5-b5---6p5p3------b5-5-3-b5--3---- +D|-------5-----------------5-|---------5-----------------5-----------------5-- +A|---------------------------|-----------------------------------------------5 +E|---------------------------|------------------------------------------------ + D7 + + +E|-------------------------------------------|---------3--------------------- +B|-------------------------------------------|-------3---6-3----------------- +G|----------3-5-5----b3----------------------|-----b5-------b5-5p3---3------- +D|------5---------------5--3-----------------|-5-------------------5----5--3- +A|-su7----7-------------------5-6-3h4p3------|------------------------------- +E|---------------------------------------6--3|---3--------------------------- + C7 G C7 + + +E|-------|--------------------------|-I think that is the whole solo--------| +B|-------|--------------------------|--this is one of my most favorite------| +G|-------|---------3--------------5-|---SRV tunes. Take time and learn------| +D|-3h4p3-|-----3-5----5-3-----------|---the solo cause there is alot to ----| +A|-------|-----------------3-4-5----|---learn from it.----------------------| +E|-------|-6-3----------------------|---------------------------------------| + G D7 +Second Verse +[G] Well Im leaving you baby +[C9] And I'm going back home to stay +[G] Yeah I'm [C9]leaving you baby + and I'm going back home to stay +[G] Well back [D7] home there are no floods or tornadoes + (look below) +E|------------------------------|---6--6--6-----10-10--10--| +B|------------------------------|--b5-b5-b5----b11-11--11--| +G|------------------------------|--b6-b6-b6----------------| +D|------------------------------|------------0-------------| +A|------------------------------|--------------------------| +E|------------------------------|--------------------------| + baby and the sunshines every day + +E|--------------10---10su12--10-------------|----10-------------------------3| +B|--------------10--------------12-10-------|-------------------------------3| +G|--7-----------10--------------------12-11-|-10----10----------------------3| +D|--8----5-------9--------------------------|----------10sd8-----------------| +A|----------3---10--------------------------|----------------10-8------------| +E|------------------------------------------|----------------------10-9p8-7--| + + + diff --git a/guitar/tabs/SRV/srv.prj b/guitar/tabs/SRV/srv.prj new file mode 100644 index 0000000..dc05bae --- /dev/null +++ b/guitar/tabs/SRV/srv.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=srv.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,4)(18,4)(19,4)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8)(154,8)(155,8)(156,8)(157,8)(158,8)(159,8)(160,8)(161,8)(162,8)(163,8)(164,8)(165,8)(166,8)(167,8)(168,8)(169,8)(170,8)(171,8)(172,8)(173,8)(174,8)(175,8)(176,8)(177,8)(178,8)(179,8)(180,8)(181,8)(182,8)(183,8)(184,8)(185,8)(186,8)(187,8)(188,8)(189,8)(190,8)(191,8)(192,8)(193,8)(194,8)(195,8)(196,8)(197,8)(198,8)(199,8)(200,8)(201,8)(202,8)(203,8)(204,8)(205,8)(206,8)(207,8)(208,8)(209,8)(210,8)(211,8)(212,8)(213,8)(214,8)(215,8)(216,8)(217,8)(218,8)(219,8)(220,8)(221,8)(222,8)(223,8)(224,8)(225,8)(226,8)(227,8)(228,8)(229,8)(230,8)(231,8)(232,8)(233,8)(234,8)(235,8)(236,8)(237,8)(238,8)(239,8)(240,8)(241,8)(242,8)(243,8)(244,8)(245,8)(246,8)(247,8)(248,8)(249,8)(250,8)(251,8)(252,8)(253,8)(254,8)(255,8)(256,8)(257,8)(258,8)(259,8)(260,8)(261,8)(262,8)(263,8)(264,8)(265,8)(266,8)(267,8)(268,8)(269,8)(270,8)(271,8)(272,8)(273,8)(274,8)(275,8)(276,8)(277,8)(278,8)(279,8)(280,8)(281,8)(282,8)(283,8)(284,8)(285,8)(286,8)(287,8)(288,8)(289,8)(290,8)(291,8)(292,8)(293,8)(294,8)(295,8)(296,8)(297,8)(298,8)(299,8)(300,8)(301,8)(302,8)(303,8)(304,8)(305,8)(306,8)(307,8)(308,8)(309,8)(310,8)(311,8)(312,8)(313,8)(314,8)(315,8)(316,8)(317,8)(318,8)(319,8)(320,8)(321,8)(322,8)(323,8)(324,8)(325,8)(326,8)(327,8)(328,8)(329,8)(330,8)(331,8)(332,8)(333,8)(334,8)(335,8)(336,8)(337,8)(338,8)(339,8)(340,8)(341,8)(342,8)(343,8)(344,8)(345,8)(346,8)(347,8)(348,8)(349,8)(350,8)(351,8)(352,8)(353,8)(354,8)(355,8)(356,8)(357,8)(358,8)(359,8)(360,8)(361,8)(362,8)(363,8)(364,8)(365,8)(366,8)(367,8)(368,8)(369,8)(370,8)(371,8)(372,8)(373,8)(374,8)(375,8)(376,8)(377,8)(378,8)(379,8)(380,8)(381,8)(382,8)(383,8)(384,8)(385,8)(386,8)(387,8)(388,8)(389,8)(390,8)(391,8)(392,8)(393,8)(394,8)(395,8)(396,8)(397,8)(398,8)(399,8)(400,8)(401,8)(402,8)(403,8)(404,8)(405,8)(406,8)(407,8)(408,8)(409,8)(410,8)(411,8)(412,8)(413,8)(414,8)(415,8)(416,8)(417,8)(418,8)(419,8)(420,8)(421,8)(422,8)(423,8)(424,8)(425,8)(426,8)(427,8)(428,8)(429,8)(430,8)(431,8)(432,8)(433,8)(434,8)(435,8)(436,8)(437,8)(438,8)(439,8)(440,8)(441,8)(442,8)(443,8)(444,8)(445,8)(446,8)(447,8)(448,8)(449,8)(450,8)(451,8)(452,8)(453,8)(454,8)(455,8)(456,8)(457,8)(458,8)(459,8)(460,8)(461,8)(462,8)(463,8)(464,8)(465,8)(466,8)(467,8)(468,8)(469,8)(470,8)(471,8)(472,8)(473,8)(474,8)(475,8)(476,8)(477,8)(478,8)(479,8)(480,8)(481,8)(482,8)(483,8)(484,8)(485,8)(486,8)(487,8)(488,8)(489,8)(490,8)(491,8)(492,8)(493,8)(494,8)(495,8)(496,8)(497,8)(498,8)(499,8)(500,8)(501,8)(502,8)(503,8)(504,8)(505,8)(506,8)(507,8)(508,8)(509,8)(510,8)(511,8)(512,8)(513,8)(514,8)(515,8)(516,8)(517,8)(518,8)(519,8)(520,8)(521,8)(522,8)(523,8)(524,8)(525,8)(526,8)(527,8)(528,8)(529,8)(530,8)(531,8)(532,8)(533,8)(534,8)(535,8)(536,8)(537,8)(538,8)(539,8)(540,8)(541,8)(542,8)(543,8)(544,8)(545,8)(546,8)(547,8)(548,8)(549,8)(550,8)(551,8)(552,8)(553,8)(554,8)(555,8)(556,8)(557,8)(558,8)(559,8)(560,8)(561,8) +TEMPO=651578 diff --git a/guitar/tabs/SRV/srv.tab b/guitar/tabs/SRV/srv.tab new file mode 100644 index 0000000..1ffd3fb --- /dev/null +++ b/guitar/tabs/SRV/srv.tab @@ -0,0 +1,388 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# +# + +Date: Wed, 07 Jan 1998 21:51:42 -0400 +!From: Ken Temple +To: guitar@olga.net +Subject: Tab- 'S.R.V.' by Eric Johnson + +start on 2 beat. + +Chorus/ neck single coil twang/ generous reverb/delay +S.R.V. +Eric Johnson/ Venus Isle + + + +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +-------------------------------9---|------------------------------------ +-------------------9---11----------|---11---------10-------------------- +---------11---11-------------------|---------/11------/9----7----------- +---------------------------11------|------------------------------------ + +-----------------------------------|--0-------------0------------0------ +-----------------------------------|--0-------------0------------0------ +-----------------------------------|--4-------------4------------4------ +----------------2----4--2--h--4--/-|--6-------------7------------6------ +------2-----4----------------------|------------------------------------ +-----------------------------------|------------------------------------ + +-----------------------------------|------------------------------------ +-----------------------------------|-------------------------9---------- +-------------------------------9/--|---11----9---------------9---------- +-------------------9---11------9/--|---11----9---11---9------7---------- +---------11---11-------------------|-------------11---9------0----------- +---------------------------11------|------------------------------------ + +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +-----------------4-------4---4-----|---4------4------------------------- +-----------------4---6---4---4-----|---4-h-6--4------------------------- +---------4---7---------------7-----|--------------7----4---2------------ +-----------------------------------|---------------------------4--2--0-- + +-----------------------------------|------------------------------------ +-----------------------------------|---------------9h10----------------- +------------------------------/11--|---13------------------------------- +------------------9--11-------/11--|---11-------9----------------------- +--------11---11--------------------|------------------------------------ +---------------------------9-------|------------------------------------ + + + +-------------------------------7/--|---9---\--7------------------------- +-----------------10----12------7/--|---9---\--7-----9p7----------------- +-------------9---------------------|---------------------9------------9- +--------/11------------------------|------------------------------------ +-----------------------------------|-------------------------7--9/11---- +-----------------------------------|------------------------------------ + +-----------------------------------|------------------------------------ +-----------------------------------|-------------------------9---------- +-------------------------------9/--|---11--\-9---------------9---------- +-------------------9---11------9/--|---11--\-9---11---9------7---------- +---------11---11-------------------|-------------11---9------0---------- +---------------------------11------|------------------------------------ + +-----------------------------------|---------------------------------0-- +-----------------------------------|---5-------------------------------- +-----------------4---4---4---------|---4------4------------------------- +-----------------4---6---4---------|---4-h-6--4------------------------- +---------4---7---------------7-----|--------------7----4---2------------ +-----------------------------------|---------------------------4--2--0-- + + 00:30 +-----------------------------------|------------------------------------ +--------2-h-4---2-----0----2-------|---------------------------5-------- +--------4-------4-----4----4-------|---6-------6-----4--h-6----4-------- +--------4-------4-----4----4-------|---6-------6-----4--h-6------------- +--------------------------------4--|-------4---------------------------- +-----------------------------------|------------------------------------ + + ^1/2 +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +----------4---6--------------------|---------9-------------------------- +----------4---6--------------------|--7-h-9-----9---4----2----2--------- +--------4----------------------7---|----------------4----2----4----4---- +-----------------------------------|------------------------------------ + +-----------7-----------------------|----4----------4-------------------- +--------------7--------------------|----4----------4--------------0h2--- +-----------------------------------|----x----------4--------------2----- +-----------------------------------|----6----------4--------------2----- +--------6--------------------------|----4----------2--------------0----- +---0-------------------------------|------------------------------------ + + 00:40 +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +-----4-------------------------4---|--4------4-------------------------- +--------6--4-------------------4---|--h6----p4-------------------------- +---------------7---4---h7----------|--------------7---4---2------------- +-----------------------------------|---------------------------2----0-- + + + +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +-------------------------------9---|----4-------4----------------------- +-------------------9---11----------|----4--h6---4--------7-------------- +----------11--11-------------------|----------------7----4-------------- +---------------------------9-------|---------------------5-------------- + +-----------------------------------|------------------------------------ +-----------------------------------|---------------9-h10----10-----7h9-- +-----------------------------------|---------------9--------9------9---- +-----------------------------------|---------------9-h11----11-----9---- +-----------4---7---/9-----4--------|---7-------------------------------- +-----------------------------------|---------0-------------------------- + + 00:51 +-----------------------------------|------------------------------------ +-----------------------------------|-------------------------9---------- +-------------------------------9/--|---11----9---------------9---------- +-------------------9---11------9/--|---11----9---11---9------7---------- +---------11---11-------------------|-------------11---9------0---------- +---------------------------11------|------------------------------------ + +-----------------------------------|---------------------------------0-- +-----------------------------------|---5-------------------------------- +-----------------4---4---4---------|---4------4------------------------- +-----------------4---6---4---------|---4-h-6--4------------------------- +---------4---7---------------7-----|--------------7----4---2------------ +-----------------------------------|---------------------------4--2--0-- + +-----------------------------------|------------------------------------ +--------2-h-4---4-----2----0-------|---------------------------5-------- +--------4-------4-----4----4-------|---6-------6-----4--h-6----4-------- +--------4-------4-----4----4-------|---6-------6-----4--h-6------------- +--------------------------------4--|-------4---------------------------- +-----------------------------------|------------------------------------ + +-----------------------------------|------------------------------------ +-----------------------------------|---5/---7/---9-\----7-\---5--------- +--------6-------4----6-------------|---4/---6/---9-\----6-\---4--6--4--6 +--------6-------4----6-------------|-----------------------------6--4--6 +------------4----------------------|------------------------------------ +-----------------------------------|------------------------------------ + +-----------7-----------------------|----4----------4-------------------- +--------------7--------------------|----4----------4--------------0h2--- +-----------------8-----------------|----x----------4--------------2----- +-----------------------------------|----6----------4--------------2----- +--------6--------------------------|----4----------2--------------0----- +---0-------------------------------|------------------------------------ + + 01:10 w/ slide +-----------------------------------|--0--------0------------------------ +-----------------------------------|--0--------0------------//---------- +-----4-----------------------------|--4--------4----------6//----------- +--------6--4-----------------------|--6--------7----------6/------------ +---------------7---4---h7----------|------------------------------------ +-----------------------------------|----------------------------------- + + 1st solo + dist ^1 +-----------------------------------|---------------9-------------------- +-----------------------------------|-----9---12----------12------------- +---------------x---x---------------|------------------------------------ +---------------x---x---------------|------------------------------------ +---------------x---x---------------|------------------------------------ +------------------------12\--------|------------------------------------ + +-----9-----------------------------|------------------------------------ +-------------------------------9---|--12---9---------------------------- +-----------------------------------|------------11---9---/11--------9--- +-----------------------------------|----------------------------11------ +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------- + + ^1/2 +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +----11------9-h-11-p9--------------|------------------------------------ +-----------------------------------|-------------11---9----------------- +-----------------------------------|--------11-------------------------- +-----------------------------------|------------------------------------ + + ^1 ^1 +-----------------------------------|------------------------------------ +----10---9----------------------12-|----9------------------------------- +-------------11----9---------------|--------11--9----------------------- +-----------------------------------|-----------------11----------------- +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ + + ^1 1:28 +-----------------------------------|---------------------7-------------- +-----------------------------------|---8----8----10------------8--10-10- +-----7-------7------------------9--|------------------------------------ +------------------9---7------------|------------------------------------ +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ + + ^1 +-----7-----------------------------|------------------------------------ +----------8---10-------8-----------|------------------------------------ +-------------------9---------------|---9--7---9----7----7--------------- +-----------------------------------|------------------------9--7-------- +-----------------------------------|-------------------------------10--- +-----------------------------------|------------------------------------ + + ^1/2 +---10------------------------------- +--------10---10--8------------------ +---------------------9-------------- +--------------------------9---7----- +------------------------------------ +------------------------------------ + + 01:39 ^1 ^1/2 +-----------------------------------|--------------------10---7---------- +---------------8-------------------|----10-----8-----------------8------ +------9--9---------------------9---|----------------9---------------9--- +----------------------------/9-----|------------------------------------ +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ + +end solo +-----------------------------------|------------------------------------ +------------------------------5----|-------/7------/9------/12---------- +-------------------4----6-----4----|-------/6------/9------/11---------- +--------6----6---------------------|------------------------------------ +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ + + 01:45 +-----9---/12-----------------------|------------------------------------ +-----9---/12----12--/14--\12--\9---|---9h10p9-----7h9p7-----5h7p5---5--- +----------------11--/13--\11--\9---|------------------------------------ +---------------------------------11|------------9--------7--------7---6- +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ + + +-----------------------------------|----------------x------------------- +-----------------------------------|----------------x--------------9---- +-----------------------------9---/-|--11----\9------x--------------9---- +--------------9----11--------9---/-|--11----\9------x--------------7---- +-----11--11------------------------|----------------x--------------0---- +-----------------------------------|----------------------12\----------- + +-----------------------------------|---------------------------------0-- +-----------------------------------|---5-------------------------------- +-----------------4---4---4---------|---4------4------------------------- +-----------------4---6---4---------|---4-h-6--4------------------------- +---------4---7---------------7-----|--------------7----4---2------------ +-----------------------------------|---------------------------4--2--0-- + + + solo 2 01:55 +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +-----------------------4-------6---|-------4---------------------------- +------4-----6----4-----------------|-------------4-h--6----------------- +-----------------------------------|-----------------------4-----4------ +-----------------------------------|------------------------------------ + +-----------------------------------|----7-12-7-9------------------------ +------5-------------------------7--|--9----------9-7---7-9-------------- +-----------------------------------|-----------------9-----9-6---------- +-----------------------------9-----|---------------------------9-6------ +-----------------------------------|-------------------------------9-7-- +-----------------------------------|------------------------------------ + + 2:04 ^1 ^1 ^1/2 +-----------------------------------|------------------------------11---- +-----7-5-7-------------------------|------------------------------------ +-----------------------------------|----11-----9-----11----------------- +----------------------------6------|------------------------------------ +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ + + * * * +-----------------------------------|-------------------11---12------- +------12---------9-----------------|-------------12------------------ +-----------11----------------------|------11------------------------- +------------------------------7---/|--9------------------------------ +-----------------------------------|--------------------------------- +-----------------------------------|--------------------------------- + *mk harm w/ picking hand + up 1 octave + + *^1/2 02:11 ^1/2 ^1/2 ^1/2 ^1/2 +----14-----------------------------|----------------9--9--12--9--------9 +-----------------------------------|------9--9--12---------------9--12-- +-----------------------------------|---9-------------------------------- +------------------------------9-11-|------------------------------------ +--------------------------/11------|------------------------------------ +-----------------------------------|------------------------------------ + + * * * * * * * * +----9------------------------------|------14---11--12--11--12--14-14-17- +------12-9----12-9-----------------|--12-------------------------------- +-----------11------11-9---------9--|------------------------------------ +------------------------11-9-------|------------------------------------ +-----------------------------11----|------------------------------------ +-----------------------------------|------------------------------------ + + * 02:18 +----19--------------------------9--|--11-/12-\11----9-\7---9------------ +-------------------------9--12-----|--------------------------7/9-\7---- +-----------------------------------|----------------------------------9- +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ + +-----------------4-----------------|------------------------------------ +--------5----7-------7---5---------|------------------------------------ +-----6-----------------------------|---4/-6--\-4------------------------ +-----------------------------------|----------------6---4--------------- +-----------------------------------|-------------------------7--4-/7---- +-----------------------------------|----------------------------------0- + +end solo +-----------------------------------|------------------------------------ +-----------------------------------|------------------------------------ +-------------------------------9---|------------------------------------ +-------------------9---11----------|---11---------10-------------------- +---------11---11-------------------|---------/11------/9----7----------- +---------------------------11------|------------------------------------ + +-----------------------------------|--0-------------0------------0------ +-----------------------------------|--0-------------0------------0------ +-----------------------------------|--4-------------4------------4------ +----------------2----4--2--h--4--/-|--6-------------7------------6------ +------2-----4----------------------|------------------------------------ +-----------------------------------|------------------------------------ + +-----------------------------------|------------------------------------ +-----------------------------------|-------------------------9---------- +-------------------------------9/--|---11----9---------------9---------- +-------------------9---11------9/--|---11----9---11---9------7---------- +---------11---11-------------------|-------------11---9----------------- +---------------------------11------|------------------------------------ + +-----------------------------------|------------------------------------ +-----------------------------------|---5-------------------------------- +-----------------4-------4---------|---4------4------------------------- +-----------------4---6---4---4-----|---4-h-6--4------------------------- +---------4---7---------------7-----|--------------7----4---2------------ +-----------------------------------|---------------------------4--2--0-- + +-----------------------------------|------------------------------------ +-----------------------------------|---------------9h10----------------- +------------------------------/11--|---13------------------------------- +------------------9--11-------/11--|---11-------9----------------------- +--------11---11--------------------|------------------------------------ +--------------------------11-------|------------------------------------ + + + +-------------------------------7/--|---9---\--7------------------------- +-----------------10----12------7/--|---9---\--7-----9p7----------------- +-------------9---------------------|---------------------9-----------9-- +--------/11------------------------|---------------------------------9-- +-----------------------------------|-------------------------7--9/11-11-- +-----------------------------------|------------------------------------ + +02:45 +-----------------------------------|----------11-h12p11----------------- +-----------------------------------|--14------------------14--12-------- +-----------------------------------|------------------------------------ +------------------9---11------11---|------------------------------------ +--------11---11--------------------|------------------------------------ +-----------------------------------|------------------------------------ + +-----------------------------------|--4------5-------4------------------ +---/9-h10-p9-----------------------|--5------5-------4--5--------------- +--------------11-9-----------------|--4------6-------4------------------ +-----------------------------------|------------------------------------ +------------------------------7----|--7------7-------7------------------ +-----------------------------------|------------------------------------ + diff --git a/guitar/tabs/Santana/africa_bamba.tab b/guitar/tabs/Santana/africa_bamba.tab new file mode 100644 index 0000000..471dd16 --- /dev/null +++ b/guitar/tabs/Santana/africa_bamba.tab @@ -0,0 +1,424 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / africa_bamba.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 26 Jul 2000 17:22:00 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/africa_bamba.tab
+
+Artist: Santana
+Song: Africa Bamba
+Album: Supernatural 
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates picking
+\=slide down
+b=bend «
+^=bend full
+br, ^r=bend &release
+
+Intro
+Classical Guitar 
+|---------------------------------------------------------------------|
+|------------------------10----------------------------------------10-|
+|----------7h9-7-9-----9----9-9-7-9-7-----9p7---------7----------9----|
+|---7h9h10------------------------------------10-10-9---9-10----------|
+|-7-------------------------------------------------------------------|
+|---------------------------------------------------------------------|
+                                                                              
+
+
+|--------------------------------------------------------------------
+|---8-------------------8-------------------10-10-9-9----------------
+|-9---10-9-7----9-----9---10-9-7---/9-7---------------10-9-7-7-------
+|------------10------------------10----------------------------10-10-
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+                                                                              
+
+-------------|
+-------------|
+---7---------|
+-9---10-9-7--|
+-------------|
+-------------|
+
+                                                                              
+Electric Guitar
+-|-------------------------------------10-10--------------------
+-|-12br-10-10-----12br--10-12-13-12-13-------13----13-12-12-10--
+-|--------------------------------------------------------------
+-|--------------------------------------------------------------
+-|--------------------------------------------------------------
+-|--------------------------------------------------------------
+                                                                              
+
+
+--8---------------------|
+-----10-----------------|
+---------9p7----7h9-9---|
+-------------10---------|
+------------------------|
+------------------------|
+                                                                              
+
+
+-|----------------------------10--10--12--12br-13-12-13-15-13-12-13-
+-|--10-10-10--12--12--13--13----------------------------------------
+-|-9----------------------------------------------------------------
+-|------------------------------------------------------------------
+-|------------------------------------------------------------------
+-|------------------------------------------------------------------
+
+                                                                              
+
+-12h13p12---12------------------------------------------|
+---------15----15-15-13-12-13---------------------------|
+------------------------------14-14-14-14---------------|
+------------------------------------------14-12-14------|
+--------------------------------------------------------|
+--------------------------------------------------------|
+
+                                                                              
+Classical Guitar
+...portugueza 
+-|--7-8-7---------------|
+-|-10-----10-9----------|
+-|-9-----------10-9-7---|
+-|----------------------|
+-|----------------------|
+-|arp-------------------|
+                                                                              
+
+
+...portugueza 
+-|---------------------------------------|
+-|-10-12-13--10--13-10-12-13-10-12-13----|
+-|---------------------------------------|
+-|---------------------------------------|
+-|---------------------------------------|
+-|---------------------------------------|
+
+ 
+
+...portugueza 
+-|-12///////13-12----12----12-----------------------------------------|
+-|----------------15----15----15-13-15--13-13-12-15-13-12-13----------|
+-|-----------------------------------------------------------14-14----|
+-|--------------------------------------------------------------------|
+-|--------------------------------------------------------------------|
+-|--------------------------------------------------------------------|
+
+
+...
+...
+...                                                                              
+...feliz
+-|----8-8-7------------------|
+-|--10------10---------------|
+-|-9-----------9-7----9-7----|
+-|-----------------10--------|
+-|---------------------------|
+-|---------------------------|
+                                                                              
+
+...feliz
+-|-------------------------------------|
+-|-12br-10-10--------------------------|
+-|------------12-10-9------------------|
+-|--------------------12-10-12^r-------|
+-|-------------------------------------|
+-|-------------------------------------|
+                                                                              
+
+...feliz
+-|----------------------------------12h13-13p12---12------------------|
+-|-------------------------12h13h15------------15----15-15-13--15-----|
+-|----------------------14--------------------------------------------|
+-|-------------12h14h15-----------------------------------------------|
+-|----12h14h15--------------------------------------------------------|
+-|-12-----------------------------------------------------------------|
+                                                                              
+
+...feliz
+-|-------12--------12-------12-------12------|
+-|----13-------13--------13-------13---------|
+-|-14-----------------14-------14------------|
+-|-------------------------------------------|
+-|-------------------------------------------|
+-|-------------------------------------------|
+
+ 
+
+Classical Guitar                                                                     
+        
+...portugueza 
+-|---------------------------------|
+-|-10-12-12-12--12h13-13/15-15-----|
+-|---------------------------------|
+-|---------------------------------|
+-|---------------------------------|
+-|---------------------------------|
+                                                                              
+
+...portugueza 
+-|-12-12------------------|
+-|--------13--------------|
+-|-----------14-----------|
+-|--------------14--------|
+-|-----------------15-----|
+-|------------------------|
+                                                                              
+
+...portugueza 
+-|-------------------------------|
+-|-12-12-12-12-9-----------------|
+-|----------------10-9-----9-----|
+-|---------------------12--------|
+-|-------------------------------|
+-|-------------------------------|
+
+                                                                              
+
+...
+...
+...
+...esta danza (Electric)
+-|-----------------------|
+-|-10-8------------------|
+-|-----/9-7----7h9p7-----|
+-|----------10-----------|
+-|-----------------------|
+-|-----------------------|
+
+
+...cancion 
+-|----------------------------------12h13-------|
+-|-------------------------12h13h15-------------|
+-|----------------------14----------------------|
+-|-------------12h14h15-------------------------|
+-|----12h14h15----------------------------------|
+-|-12-------------------------------------------|
+                                                                              
+
+...tristeza
+-|-12-12-12-12-13-12----12----------12--------|
+-|-------------------15----15-13-15----15-----|
+-|--------------------------------------------|
+-|--------------------------------------------|
+-|--------------------------------------------|
+-|--------------------------------------------|
+                                                                              
+
+...encontrar 
+-|--------------------------|
+-|-12br-10-10----10---------|
+-|------------12----12^-----|
+-|--------------------------|
+-|--------------------------|
+-|--------------------------|
+                                                                              
+
+...feliz 
+-|----------------------------------|
+-|----------------------------------|
+-|----14-----14---------------------|
+-|-/14----/14----14--12----12^r-----|
+-|----------------------15----------|
+-|----------------------------------|
+                                                                              
+
+...feliz 
+-|-7h8-8-8--7--7-------------------------|
+-|----------------10--10-----------------|
+-|------------------------/9--/9--7------|
+-|---------------------------------------|
+-|---------------------------------------|
+-|---------------------------------------|
+                                                                              
+
+...feliz 
+-|-5---8-5h8p5-------------------|
+-|---5---------8-5---5-----------|
+-|----------------/7---7-5-7^r---|
+-|-------------------------------|
+-|-------------------------------|
+-|-------------------------------|
+                                                                              
+
+...feliz 
+-|-------12-12--------12-12-13-12-15-12-----|
+-|----13-----------13-----------------------|
+-|-14-----------14--------------------------|
+-|------------------------------------------|
+-|------------------------------------------|
+-|------------------------------------------|
+                                                                              
+
+Solo
+-|------7-8-7-------------------------------------------|
+-|---10--------10--8------------------------8-10--------|
+-|-9------------------10--9-7h9-------9-10-------9-7----|
+-|------------------------------------------------------|
+-|------------------------------------------------------|
+-|------------------------------------------------------|
+                                                                              
+
+-|--------------------------------------------------------------------|
+-|-------------------------------------------------------------10-----|
+-|----7--------------------------------------------7--7--9--9---------|
+-|-10---10-9-10--7-7-----------7-7-----7-9--7-9-10--------------------|
+-|-------------------7\5---5h7------10--------------------------------|
+-|-----------------------8--------------------------------------------|
+                                                                              
+
+-|--------------------------------------------------------------------------|
+-|---------------------------------------------------12-12-12-13-13-13-15---|
+-|----14---14-14-----14---14-14------14-14--14-14-14------------------------|
+-|-12^---^--------12^---^--------12^----------------------------------------|
+-|--------------------------------------------------------------------------|
+-|--------------------------------------------------------------------------|
+                                                                              
+
+-|-12-12----12----12-----12---12-
+-|-------15^---15^---15^---15^---
+-|-------------------------------
+-|-------------------------------
+-|-------------------------------
+-|-------------------------------                                                    
+
+
+----13-15-17-12h13p12--12---------------------------------------------
+-17------------------15--15--13-15--13-13-12-13-----------------------
+------------------------------------------------14-14--14-14-14-14-14-
+----------------------------------------------------------------------
+----------------------------------------------------------------------
+----------------------------------------------------------------------
+                                                                              
+
+-|-----12-12-12------12-12-12------12--12-12-------------------------
+-|---13------------13------------13-----------5////6////7////8////---
+-|-14------------14------------14------------------------------------
+-|-------------------------------------------------------------------
+-|-------------------------------------------------------------------
+-|-------------------------------------------------------------------
+                                                                              
+
+-|-------------------------17-20p19p17-20p19p17-20p19p17-20p19p17-20p19p17----
+-|-10wah10wah10wa10wa10wa-----------------------------------------------------
+-|----------------------------------------------------------------------------
+-|----------------------------------------------------------------------------
+-|----------------------------------------------------------------------------
+-|----------------------------------------------------------------------------
+                                                                              
+
+-20p19p17-20^--20^r-17h20p17--17----------------------------------|
+----------------------------20---20-17-20-20p17--17---------------|
+-----------------------------------------------19--19^r17---------|
+---------------------------------------------------------19-------|
+------------------------------------------------------------------|
+------------------------------------------------------------------|
+                                                                              
+
+ 
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/all_i_ever_wanted.tab b/guitar/tabs/Santana/all_i_ever_wanted.tab new file mode 100644 index 0000000..0527dfc --- /dev/null +++ b/guitar/tabs/Santana/all_i_ever_wanted.tab @@ -0,0 +1,312 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / all_i_ever_wanted.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Thu, 12 Oct 2000 12:53:24 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/all_i_ever_wanted.tab
+
+Song: All I ever wanted
+Artist: Santana
+Album: Best Of Santana
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up
+\=slide down
+b=bend half
+^=bend full
+br, ^r=bend & release
+///////= tremolo pick
+
+A lot of the riffs are repeated in the song so I only wrote them
+once. They are in order of appearance.
+
+Intro
+|-(0:12)---------------------------------------|
+|----------------------------------------------|
+|----------------------------------------------|
+|-------------0------------------------2-------|
+|-------0-1-2--------------------0-1-2---------|
+|-4---4---------2----------4---4---------0-----|
+                                                                              
+play along with lyrics:
+|----------------------------------------------------------------------------
+|-9--12----------------------------------------------------------------------
+|-------11^r-9-9-11^r~~~~~~~~\----11^--11-9-11-11-9~~~~~~~~~~\---------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|-0:30----------------------------0:35---------------------------------------
+                                                                              
+
+---------------------------------------12-12-12---12------12------14^-12-10|
+--/9---12-12-9-12-9-12^r~~~~~~~~~\---------------------14------14----------|
+---------------------------------------------------------------------------|
+---------------------------------------------------------------------------|
+---------------------------------------------------------------------------|
+-0:40----------------------------------0:43--------------------------------|
+                                                                              
+
+|-0:46------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-------2-5-2-4---------2-5-2-4-----|
+|-0-0-4---------0---0-4-------------|
+                                                                              
+
+|-------------------|
+|-------------------|
+|-4-4-4-4-4-4-4-4---|
+|-2-2-2-2-2-2-2-2---|
+|-------------------|
+|-1:04--------------|
+                                                                              
+
+|-----------------------------------------|
+|-----------------------------------------|
+|-2---------------------------------------|
+|-0----------2----------------------------|
+|------------0-----------2-----------2----|
+|-1:07-chorus------------0-----------0----|
+
+                                                                              
+|-------------------------------------|
+|-------------------------------------|
+|-------------7-----------------------|
+|-6---6-7-8-9-----6---6-7-8-9---------|
+|---------------9-------------7\------|
+|-1:16--------------------------------|
+                                                                              
+
+|---------------------------------------------------------------------|
+|---------------------------------------------------------------------|
+|-------------7---------------9---------------7---------------9-------|
+|-6---6-7-8-9-----6---6-7-8-9-----6---6-7-8-9-----6---6-7-8-9---------|
+|---------------9---------------7---------------9---------------7\----|
+|-1:45----------------------------------------------------------------|
+                                                                              
+
+|-1:51------------------------------------------------------------|
+|-----------------------------------------------------------------|
+|-----------------------------------------------------------------|
+|-2------------------------------2--------------------------------|
+|---5-4-2------------------2-4-2-----5-4-2-----------------2-4-2--|
+|---------3-2-0---2-3-4--------------------3-2-0---2-3-4----------|
+                                                                              
+
+There are two guitars playing here. The second guitar part is harder to hear
+but is better. There isn't all that much to guitar one's part.
+
+Guitar 1:
+|-1:57-----------------------------------10--------------------------10---|
+|------------------------------------/13-------------------------/13------|
+|-------------------------------------------------------------------------|
+|-----------------7-9-7---------------------------------------------------|
+|-5-------5-5-/9----------------------------------------------------------|
+|-------------------------------------------------------------------------|
+                                                                              
+Guitar 2:
+|----------------------------------------------------------------------------
+|-------------------------------------------10----10------12---12p10----10---
+|----------11-9-------------------------/11----11------11-----------11-------
+|-12///////-------11---9--------12/////--------------------------------------
+|--------------------------12------------------------------------------------
+|-1:57----------------------------------------------------------------------
+                                                                              
+
+---------------------------------------------------------------------------|
+--------------10-----------------------------------------------------------|
+----------/11----9h11-9----------------------------------------------------|
+-12//////-----------------11---9h11p9---------12~~~~~~~~~~~~~~~~~~~~~~-----|
+----------------------------------------12---------------------------------|
+---------------------------------------------------------------------------|
+                                                                              
+Solo:
+|----------------------------------------------------------------------------
+|-15^-15^---------------15^------r15--r15--r15-r15-r15-r15-r15r15-12h14-12---
+|----------------------------------------------------------------------------
+|--------------------------------pre bend and pick and release---------------
+|----------------------------------------------------------------------------
+|-2:27-----------------------------------------------------------------------
+                                                                              
+
+---------12-14-14br-12----12-15^-----15^-15^-15^r-17-17-15^-17-17r15----------
+---12h14---------------14-----------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+--2:37------------------------------------------------------------------------
+                                                                              
+
+---12----14br-12-----12-12-----12-12-----12---12---12--12--12--12-------------
+------12---------15^-------15^-------15^---15^--15^--15^-15^-15^-15^----------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+--2:42------------------------------------------------------------------------
+                                                                              
+
+---15p12------------------------------r10-------10-10-10-----10-----10-----10-
+--------15p12--------------------------------------------10^----10^----10^----
+-------------14p12------------------------------------------------------------
+------------------14p12h14----------------------------------------------------
+------------------------------------------------------------------------------
+--2:46------------------------------------------------------------------------
+                                                                              
+
+-----10-----10--10--10--10--10-10-10-10--------/10-10--------10-10-10-10-10---
+-10^----10^-12--12--12--12--12-12-12-12--------/12-12--------12-12-12-12-12---
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+-----------------------------------------------2:56---------------------------
+                                                                              
+
+-10--7------------------/10-10-------/10-10---------------------------|
+--------10^r-8-10-10-8---12-12-------/12----12-11-10-10^r-------------|
+----------------------------------------------------------12-9--------|
+----------------------------------------------------------------------|
+----------------------------------------------------------------------|
+-------------------------------------3:03-----------------------------|
+                                                                              
+
+|-/16////////-/16//////--16--14--12-----|
+|-/17////////-/17//////--17--14--12-----|
+|---------------------------------------|
+|---------------------------------------|
+|---------------------------------------|
+|-3:07----------------------------------|
+                                                                              
+along with lyrics:
+|----------------------------------------------------------------------------
+|------9---12----------------------------------------------------------------
+|-9-11--------11^r-9-9-11^r~~~~~~\-------11^--11-9-11-11-11^r-9~~~~~~~\------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|-3:17-----------------------------------------------------------------------
+                                                                              
+
+------------------------------9-12-12--9-12-12--9-12-12-12-9-12-9-12////-9\|
+-9---12-12-9-12-9-12^r-----------------------------------------------------|
+---------------------------------------------------------------------------|
+---------------------------------------------------------------------------|
+---------------------------------------------------------------------------|
+---------------------------------------------------------------------------|
+                                                                              
+
+|-16-\\\\\\\\\\\------|
+|-17-\\\\\\\\\\\------|
+|---------------------|
+|---------------------|
+|---------------------|
+|-3:48----------------|
+                                                                              
+
+|------------------------------------------------------------------|
+|-3h5p3-------------------3h5p3------------------------------------|
+|------------------------------4-------------------2-2--2-2--2-----|
+|--------5-2--0h2p0--------------5-2--0h2p0--------0-0--0-0--4-----|
+|------------------2-----------------------2-----------------------|
+|--------------------3-0---------------------3-0-------------------|
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/bella.tab b/guitar/tabs/Santana/bella.tab new file mode 100644 index 0000000..4aace57 --- /dev/null +++ b/guitar/tabs/Santana/bella.tab @@ -0,0 +1,284 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / bella.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Thu, 12 Oct 2000 19:51:37 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/bella.tab
+
+Author/Artist: Santana
+Title: bella
+Album: Best of Santana
+Transcribed by: jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up
+\=slide down
+b=bend half
+^=bend full
+br, ^r=bend & release
+///////= tremolo pick
+
+the numers at the bottom of each measure are the CD times.
+
+This song is just another example of how fresh sounding, and original
+santana can make the Major scale seem.
+
+|----------------------|---------------------|--------------------------|
+|----------------------|-----8---------------|--------------------------|
+|-------------7h9----7-|--7-----10--9--7^-7^-|--------------7/9----10-7-|
+|-10-9-7-9-10----------|---------------------|--10-9-7-9-10-------------|
+|----------------------|---------------------|--------------------------|
+|-0-02-----------------|--0-09---------------|-0-16---------------------|
+                                                                              
+
+|---------------------------|----------------------8-------10------|
+|----8----------------------|---------8----8h10--------------------|
+|-7-----10--9--7/9~~~7------|--7/9---------------------------------|
+|----------------------10-7-|--------------------------------------|
+|---------------------------|--------------------------------------|
+|-0-22----------------------|-0-28---------------------------------|
+                                                                              
+
+|-10-8-7-8|------------------------|-------------|-----8-10-----8p5----|
+|---------|------------------------|-------------|-/10----------------5|
+|---------|-------------7/9----10-7|-5h7----5p4h5|---------------------|
+|---------|-10-9-7-9-10------------|-------------|---------------------|
+|---------|------------------------|-------------|---------------------|
+|-0-35----|-0-42-------------------|-0-47--------|-0-58----------------|
+                                                                              
+
+|----------------------------------------------------------------------|
+|--------------8--10-8h10-10-------------------------------------------|
+|-7h9-------9-----------------7--7--7/9--9--9--------------------------|
+|----------------------------------------------10--10--10h12-----------|
+|---------------------------------------------------------------10h12--|
+|-1-03-----------------------------------------------------------------|
+                                                                              
+
+|-55---8---5---8---------|-8-p-7-----5---------8-p-7-----5-----------10^-|
+|-55---5---5---5---------|--------8-------------------8------------------|
+|------------------7---9-|-----------------------------------------------|
+|------------------------|-----------------------------------------------|
+|------------------------|-----------------------------------------------|
+|-1-13-------------------|-1-19------------------------------------------|
+                                                                              
+
+|-15-13-12-13-12-13-12h13p12---12------------------------------------------------------|
+|---------------------------15----15-15-13-15-13-13-12-15-12-12----12------12----------|
+|---------------------------------------------------------------14----14------14-14-14-|
+|--------------------------------------------------------------------------------------|
+|--------------------------------------------------------------------------------------|
+|-1-29---------------------------------------------------------------------------------|
+                                                                              
+
+|------------8-12-8-|-8h10--------8^--8-5----------------|
+|-10---10-12--------|---------------------8-5------------|
+|----9--------------|-------------------------7-5----7^--|
+|-------------------|-----------------------------7------|
+|-------------------|------------------------------------|
+|-1-36--------------|-1-41-------------------------------|
+                                                                              
+
+|--8^----------8--7--8--7-5---5-----8-5h8p5---5----------------------------
+|---------------------------8---8-5---------8---8-5-8-8p5--8p5---5---------
+|--------------------------------------------------------------7---7p5-----
+|----------------------------------------------------------------------7---
+|--------------------------------------------------------------------------
+|-1-46---------------------------------------------------------------------
+                                                                              
+
+--------------------------------5------8-10-|--10^------10p8--|
+--------------------------------5--/10------|-----------------|
+-7p5-----------------------5----------------|-----------------|
+-----7p5---------------5-7------------------|-----------------|
+---------7p6p5-------7----------------------|-----------------|
+---------------8p5--------------------------|-1-55------------|
+                                                                              
+
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-9p7-77--9p7-77--9p7-77--9p7-7-7--9p7-77--5h7-5h7-5h7--7p5---------------|
+|-----------------------------------------------------------7p5-----------|
+|---------------------------------------------------------------7p5---5---|
+|-1-58--------------------------------------------------------------8---8-|
+
+
+|----------------------------------------------8h10-8-7-8----------|
+|-------------------------------13-13^--------------------10-10-10-|
+|---------------5---------12-14------------------------------------|
+|-5----5h7---------------------------------------------------------|
+|------------------------------------------------------------------|
+|-2-25---------------------2-29------------------------------------|
+                                                                              
+
+|-----------8-12-8-|-8p7---5-------8p7---5-------10^----------10^~~~~r8--|
+|-9----9-12--------|-----8-------------8-------------------------------10|
+|---10-------------|-----------------------------------------------------|
+|------------------|-----------------------------------------------------|
+|------------------|-----------------------------------------------------|
+|-2-36-------------|-2-41------------------------------------------------|
+                                                                              
+
+|-15^r-12----15^r-12----17-19-20-19-17----17-19-20-19-17-19-20-20^-20^/////-
+|---------------------------------------------------------------------------
+|---------------------------------------------------------------------------
+|---------------------------------------------------------------------------
+|---------------------------------------------------------------------------
+|-2-57------------------------------------3-03------------------------------
+                                                                              
+
+-20^-20^-20^-20^--20p17--------------------------|
+-----------------------20p17---------------------|
+----------------------------19^r17---19^19p17-19-|
+----------------------------------19-------------|
+-------------------------------------------------|
+------------------3-07---------------------------|
+                                                                              
+
+|----12//----12///---12///---12---12---12---12-15-15p12--12-------------|
+|-15^-----15^-----15^-----15^--15^--15^--15^-----------15--15^r-13--15--|
+|-----------------------------------------------------------------------|
+|-----------------------------------------------------------------------|
+|-----------------------------------------------------------------------|
+|-3-11------------------------------------------------------------------|
+                                                                              
+
+|-------------------------------------------------------------|
+|----8--10-8h10-8h10------------------------------------------|
+|-9-------------------7--7--7--9--7h9p7--7--------------------|
+|-------------------------------------------10--10--10--------|
+|------------------------------------------------------(12)---|
+|-3-16--------------------------------------------------------|
+                                                                              
+
+|-55-----7-----5---------------------------10-9-
+|-55----5-----5---------------------------------
+|-------------------7----/9////////////-8--7--6-
+|-----------------------------------------------
+|-----------------------------------------------
+|-3-23------------------------------------------
+                                                                              
+
+--8---5-----5---8---5--------5---8---5-----8---8---5---------5-|
+----------8------------5---8-------------5-------------5---8---|
+---------------------------------------------------------------|
+---------------------------------------------------------------|
+---------------------------------------------------------------|
+-3-33----------------------------------------------------------|
+                                                                              
+
+|-10p8--10p8-8-8-10p8-8-8-8--------------------|
+|--------------------------------------8//////-|
+|-----------------------------7/9//////--------|
+|----------------------------------------------|
+|----------------------------------------------|
+|-3-41-----------------------------------------|
+                                                                              
+
+|-4-14---------------------------|
+|--------------------------------|
+|---------------------5----7h9---|
+|-----------5----7---------------|
+|-5----7-------------------------|
+|--------------------------------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/black_magic_woman-gypsy_queen.tab b/guitar/tabs/Santana/black_magic_woman-gypsy_queen.tab new file mode 100644 index 0000000..8d7edaa --- /dev/null +++ b/guitar/tabs/Santana/black_magic_woman-gypsy_queen.tab @@ -0,0 +1,382 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / black_magic_woman-gypsy_queen.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 13 Sep 2000 15:56:20 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/black_magic_woman-gypsy_queen.tab
+
+This file is an original transcription by me and represents my 
+interpretation of the song. You may only use this file for private 
+study, scholarship, or research.
+
+Song: Black Magic Woman/Gypsy Queen
+Artist: Santana
+Album:Best Of Santana
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates rapid picking
+\=slide down
+b=bend «
+^=bend full
+br, ^r=bend &release
+~ = hold note
+
+The CD time for this are from The Best of Santana CD.
+
+Intro riff: Played on a keyboard or something
+|-----------------------------------------------------------|
+|--13--15------13--15------12--15--13--15------13--15-------|
+|----------14----------14------------------14---------------|
+|-----------------------------------------------------------|
+|-----------------------------------------------------------|
+|-----------------------------------------------------------|
+
+
+Guitar
+|-----------------------------------------------------3---------------|
+|-8p6-----------3/5\3----------------6h8p6--------------3/5\3---------|
+|---------------------------------------------------------------------|
+|---------------------------------------------------------------------|
+|---------------------------------------------------------------------|
+|-(0:10)--------------------------------------------------------------|
+                                                                              
+
+
+|-5---3-----------3---------------5---3-----------3-----------------------10-|
+|--------6\5----------6--5\3-------------6\5----------6--5\3-----------10----|
+|-------------------------------------------------------------------10-------|
+|----------------------------------------------------------------12----------|
+|-------------------------------------------------------------12-------------|
+|-(0:26)---------------------------------------------------------------------|
+                                                                              
+
+
+|-10-----------------------------------10--------------------------------|
+|----13-15r13-10-13^~~~~~~r10-----13^-----13-10----10--------------------|
+|-----------------------------------------------12----12-10-9~~~~~~~~----|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|-(0:43)-----------------------------------------------------------------|
+                                                                              
+
+
+|-------12-13---12--13p12p10----------------------10----------------------|
+|-10-13----------------------13^~~~r10-------13^-----13-10----------------|
+|-------------------------------------------------------------12^~~~~~r10-|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-(0:53)------------------------------------------------------------------|
+                                                                              
+
+
+|-------10-12-13/15----15^~~~~~~~r-10--10-------18^------|
+|----11------------------------------13------------------|
+|-12-----------------------------------------------------|
+|--------------------------------------------------------|
+|--------------------------------------------------------|
+|-(0:58)-------------------------------------------------|
+                                                                              
+
+
+|-10---------------------------------------------------------------------10\-|
+|-------------------10---------------------------------------------------10\-|
+|-----12^-12p10h12------12--10h12p10-------------------------------------10\-|
+|------------------------------------12--10--12--10--------------------------|
+|----------------------------------------------------12--11--10--------------|
+|-(1:04)---------------------------------------------------------13--10------|
+                                                                              
+
+
+|-------------|
+|-------------|
+|-------------|
+|-8h10p8------|
+|-------------|
+|-(1:38)------|
+                                                                              
+
+
+|-10--10--10-------|
+|-10--10--10--10---|
+|-------------10---|
+|------------------|
+|------------------|
+|-(1:50)-----------|
+                                                                              
+
+
+|-------------|
+|-------------|
+|-------------|
+|-8h10p8------|
+|-------------|
+|-(2:01)------|
+                                                                              
+
+
+solo
+|--------10----------------------13p12p10--------------------------------|
+|-13^-------13^---13^r-10------------------13^r-10-----------------------|
+|-----------------------------------------------------14r12-10-9---------|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|-(2:11)-----------------------------------------------------------------|
+                                                                              
+
+
+|------------12----13p12p10-----------13^-------15^-----13-15^r-13-----18^---|
+|------10-13----------------13^----------------------------------------------|
+|-9/10-----------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|-(2:18)---------------------------------------------------------------------|
+                                                                              
+
+
+|-12-13--12p10--12-13--12p10-------10-----------------------
+|----------------------------13^------13-10-------------10--
+|-------------------------------------------12^--r10----10--
+|----------------------------------------------------12-----
+|-----------------------------------------------------------
+|-(2:27)----------------------------------------------------
+                                                                              
+
+
+-----------------------------|
+-----10-13-10----------------|
+--------------12^r---10------|
+--12--------------------12---|
+-----------------------------|
+-----------------------------|
+                                                                              
+
+
+|-8/10--10/12--8/10-------------------------10-------------------------|
+|-------------------------------------13^------13-10----10-------------|
+|----------------------12^r^-------------------------12----12-10-9-----|
+|----------------------------------------------------------------------|
+|----------------------------------------------------------------------|
+|-(2:33)---------------------------------------------------------------|
+                                                                              
+
+
+|-------------10---------------13------------------10-12-13-15-----15^---
+|---10-13--^-----13^-13^r-10---13^-10-----------11-----------------------
+|-9--------------------------------10-10-----12--------------------------
+|------------------------------------------------------------------------
+|------------------------------------------------------------------------
+|-(2:41)-----------------------------------------------------------------
+                                                                              
+
+
+--18^---20^----|
+---------------|
+---------------|
+---------------|
+---------------|
+---------------|
+                                                                              
+
+
+|-------------10--------10---------13-10-13-10-13-10---------------------------|
+|----------13-----10-13----10-13-----p--h--p--h--p---13-10-13-10---------------|
+|-12^r^------------------------------------------------p--h--p---12-10-12-10---|
+|------------------------------------------------------------------p--h--p--12-|
+|------------------------------------------------------------------------------|
+|-(2:51)-----------------------------------------------------------------------|
+                                                                              
+
+
+|-----------------------|
+|-----------------------|
+|-----------------9-10--|
+|-----------10-12-------|
+|--10-11-12-------------|
+|-(2:56)----------------|
+
+
+
+|------------|
+|------------|
+|------------|
+|-10p8-------|
+|------------|
+|-(3:10)-----|
+                                                                              
+
+Repeat part from the beginning at 3:19
+
+
+Transition to Gypsy Queen
+|--------------------------------|
+|---------------------------7----|
+|---------------------------7----|
+|--0---0---0---0---0---0----7----|
+|----0---0---0---0---0---0--5----|
+|-(3:36)-------------------------|
+                                                                              
+
+
+|-------------------------------------------------------------------------|
+|-7h8p7-----7----------7h8p7-----7-------------5-7/10-----------7h8p7---7-|
+|-------7---7----------------7-7-7-----------7------------------------7-7-|
+|-----------7--------------------7--------------------------------------7-|
+|-------------------------------------------------------------------------|
+|-(3:46)------------------------------------------------------------------|
+                                                                              
+
+
+|-------------------------------------------|
+|--------------------------------------7----|
+|---7---5----5-5-----------------------7----|
+|-7---7----7-----5h7-------5-5-4-4-----7----|
+|----------------------------------7-5------|
+|-(4:02)------------------------------------|
+                                                                              
+
+
+|-3/10-----10----10-------------10----10-------------10----10------------
+|-------------13----13^r-10--------13-------------------13----13^r-10----
+|----------------------------------------12^r-10-------------------------
+|------------------------------------------------------------------------
+|------------------------------------------------------------------------
+|-(4:09)-----------------------------------------------------------------
+                                                                              
+
+
+-10----10---------------------------------------------------------------|
+----13------------------------------------------------------------------|
+----------12^r-10---------------------9---------------------------------|
+------------------12-10-----------------10-10h12------------------------|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+                                                                              
+
+
+|-15^--------------15^--------------14p12------------22///////////////////|
+|-----------------------------------------15------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-(4:23)------------------------------------------------------------------|
+                                                                              
+
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|-7------7------7------5---4---2-7------5---4---2-7------7---3---2-7-----|
+|-7------7------7------5---4---2-7------5---4---2-7------5---3---2-7-----|
+|-5------5------5------3---2---0-5------3---2---0-5------3---2---0-5-----|
+|-(4:40)-----------------------------------------------------------------|
+                                                                              
+
+
+|---------------------|
+|---------------------|
+|-5---4---2-----------|
+|-5---4---2-----------|
+|-3---2---0-----------|
+|-(5:08)--------------|
+End 
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/black_magic_woman.tab b/guitar/tabs/Santana/black_magic_woman.tab new file mode 100644 index 0000000..cc0fdea --- /dev/null +++ b/guitar/tabs/Santana/black_magic_woman.tab @@ -0,0 +1,273 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / black_magic_woman.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+
+
+From: foucara8@cti.ecp.fr (FOUCART Adrien)
+Date: Sun, 3 Mar 1996 17:51:43 +0100 (MET)
+
+
+			BLACK MAGIC WOMAN 
+			BY SANTANA
+
+
+intro
+       
+E-------------------------------------------------------------------------------
+B---------------------------------------10-------------------------10-----------
+G--10~~-7-7/9\7~~-10h12p10~~-7-7/9\7~~------12-10p9~--12-10-9\7~-------12-10\9--
+							.....
+E----------------------10--------10----10---------------------------------------
+B-------------------10--------------13----13-10-13^(15)^13p10---13^(15)~~------ 
+G--12-10-9-------10------------------------------------------------------------
+D-------------12------------------------------
+D----------12---------------------------------
+E-------------------------------------------
+						          .....
+E-10-------------------------------12-13-12h13p12------------------------------
+B----13-10-------------------10-13----------------13^(15)^13p10----13^(15)----
+G----------12^(14)^12p10\9~~--------------------------------------------------
+		         .....	   rake	
+E--10----------------------------------------12-13-13/15~~-15^(17)^15p13------
+B-----13p10-------------------------------13------------------------------15--
+G-----------12^(14)^12p10h12~~---------14-------------------------------------
+D-----------------------------------14----------------------------------------
+
+
+E-13~~-19^(20)~~\--10-----------------------------------------------------------
+B-------------------------------------------------------------------------------
+G---------------------12^(14)^12p10----10h12------------------------------------
+D-----------------------------------12----------10h12p10----10------------------
+A--------------------------------------------12----------12----12p10\8-10-8-----
+E-----------------------------------------------------------------------------
+
+E-------10-\--------------------------------------------------
+B-------10-\--------------------------------------------------
+G-------10-\--------------------------------------------------
+D-------12-\----------------------------------------------------
+A-------12-\---------------------------------------------------
+E--10-8/10-\-------------------------------------------------------
+
+
+(organ solo)
+
+		    Dm	
+Got a black ...
+		    Am		
+Got a ...
+		Dm
+Yes i've got a ...
+		         Gm
+Got me so ...
+	      Dm		
+That she's a black ...
+Am		  Dm
+Got the devil ...
+
+
+Bass lines
+
+  Dm                 Am                  Dm      Gm              
+G| ------5-5-7-5-- | ---------------- | ------- | ---------------- |
+D|.----7----------.|.-------5-5-7-5--.|.-------.|.--------3-3-5-3-.| then   
+A|.-5-------------.|.-----7----------.|.-------.|.------5---------.| Dm Am Dm
+E| --------------- | --5------------- | ------- | ---3------------ |
+
+
+
+Solo
+
+
+E-------10--------------13h12-10-------------------------------------12~~p13h12-
+B---13^----13^(15)^h10-----------(15)^13h10---------------------10p13-----------
+G-------------------------------------------(14)^-12h10\9--9/10-----------------
+
+E---------13^(15)-15^(17)^15h13p15^(17)-13~~--19^(20)~~\--12p13h12---12p13h12--
+B-13^(15)---------------------------------------------------------13-----------
+G------------------------------------------------------------------------------
+
+E---------10-------------------------------------------------------------------
+B-13^(15)----13p10-----------------10--10-13p10--------------13^(15)-15^(17)---
+G-----------------12^(14)^12p10----10-----------(14)^12p10---------------------
+D-------------------------------12--------------------------------------------
+								slow bend
+E-----------------------------10------------------------------------------------
+B-13^(15)~~~---------------13^---13p10-------------------------13^(15)-13^(15)~~
+G-----------(14)^12^(14)~~-------------12^(14)^12p10\9~----14-------------------
+D--------------------------------------------------------14---------------------
+
+E------------10-------------------10-12-13^(15)~~-15^(17)-19^(20)-20^(22)\----
+B-(15)^13p10-13^(15)------------11--------------------------------------------
+G--------------------10-10~~--12----------------------------------------------
+
+E----------10-----10------10-13p10h13p10--------------------------------------
+B----10h13---10h13---10h13--------------13p10h13p10---------------------------
+G-12^-----------------------------------------------12p10h12p10---------------
+D---------------------------------------------------------------12p10-12------
+
+E----------------------------------------------------------
+B----------------------------------------------------------
+G---------------------9--10~~------------------------------
+D------------10--12----------------------------------------
+A-10-11-12-------------------------------------------------
+E----------------------------------------------------------
+  got your spell on me babe
+ 
+
+
+Date: Wed, 12 Mar 1997 15:32:52 -0800
+From: Ryan Izzo <izzo@4Link.Net>
+Subject: TAB: Black Magic Woman by Santana
+
+"Black Magic Woman"
+by Santana
+off of Santana's Greatest Hits
+
+as tabbed by Ryan Izzo <izzo@k-net.net>
+corrections made from tablature by foucara8@cti.ecp.fr (FOUCART Adrien)
+(CD time in parenthesis)
+
+I made a few changes to a few of the first phrase but it really makes a
+big difference to the entire quality of the piece...I hope i've made
+Carlos happy...
+
+h = hammer on    p = pull off
+b = bend         r = release bend
+\ = slide        ~ = let ring
+
+Intro:
+e|--------------------------------------------------------------------------------|
+B|--8p6~~~~-----------6h8p6~~~~-8----------10--8--6\5~~--8--6--5/3~~--10--8--6\5~~|
+G|----------7/9\7~~~~-------------7/9\7~~-----------------------------------------|
+D|--------------------------------------------------------------------------------|
+A|--------------------------------------------------------------------------------|
+E|--------------------------------------------------------------------------------|                                                      
+
+e|------------------10------|--------------------------------|----------10--------|
+B|--8--6-5--------10--------|--13b15-13-13b15-10-13b15~~~~~--|--13b15~~----13-10--|
+G|--------------10----------|--------------------------------|--------------------|
+D|------------12------------|--------------------------------|--------------------|
+A|----------12--------------|-(0:41)-------------------------|--------------------|
+E|--------10----------------|--------------------------------|--------------------|
+
+e|-----------------|-------12-13-12h13p12---------|--------10----------------------|
+B|-----------------|-10-13----------------13b15~~-|-13b15~~---13p10----------------|
+G|-12b14r12p10\9~~-|------------------------------|-----------------12b14r12p10h12-|
+D|-----------------|------------------------------|--------------------------------|
+A|-----------------|------------------------------|--------------------------------|
+E|-----------------|------------------------------|--------------------------------|
+
+e|--------12-13-13/15~~-15b17r15p13------13~~-19
+b20~~\\\\10----------------------|
+B|------13----------------------------15------------------------------------------|
+G|----14-----------------------------------------------------12b14r12p10----10h12-|
+D|--14-------------------------------------------------------------------12-------|
+A|--(rake)------------------------------------------------------------------------|
+E|--------------------------------------------------------------------------------|
+
+e|-------------------------------------10\--|
+B|-------------------------------------10\--|
+G|-------------------------------------10\--|
+D|----10h12p10----10-------------------12\--|
+A|-12----------12----12p10\8-10-8------12\--|
+E|--------------------------------10-8/10\--|
+
+Questions, suggestions, praises to:
+Ryan Izzo
+<izzo@k-net.net>
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/blackmagicwoman.prj b/guitar/tabs/Santana/blackmagicwoman.prj new file mode 100644 index 0000000..a7b6241 --- /dev/null +++ b/guitar/tabs/Santana/blackmagicwoman.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=blackmagicwoman.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4) +TEMPO=651578 diff --git a/guitar/tabs/Santana/blackmagicwoman.tab b/guitar/tabs/Santana/blackmagicwoman.tab new file mode 100644 index 0000000..719392b --- /dev/null +++ b/guitar/tabs/Santana/blackmagicwoman.tab @@ -0,0 +1,177 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + + +From: foucara8@cti.ecp.fr (FOUCART Adrien) +Date: Sun, 3 Mar 1996 17:51:43 +0100 (MET) + + + BLACK MAGIC WOMAN + BY SANTANA + + +intro + +E------------------------------------------------------------------------------- +B---------------------------------------10-------------------------10----------- +G--10~~-7-7/9\7~~-10h12p10~~-7-7/9\7~~------12-10p9~--12-10-9\7~-------12-10\9-- + ..... +E----------------------10--------10----10--------------------------------------- +B-------------------10--------------13----13-10-13^(15)^13p10---13^(15)~~------ +G--12-10-9-------10------------------------------------------------------------ +D-------------12------------------------------ +D----------12--------------------------------- +E------------------------------------------- + ..... +E-10-------------------------------12-13-12h13p12------------------------------ +B----13-10-------------------10-13----------------13^(15)^13p10----13^(15)---- +G----------12^(14)^12p10\9~~-------------------------------------------------- + ..... rake +E--10----------------------------------------12-13-13/15~~-15^(17)^15p13------ +B-----13p10-------------------------------13------------------------------15-- +G-----------12^(14)^12p10h12~~---------14------------------------------------- +D-----------------------------------14---------------------------------------- + + +E-13~~-19^(20)~~\--10----------------------------------------------------------- +B------------------------------------------------------------------------------- +G---------------------12^(14)^12p10----10h12------------------------------------ +D-----------------------------------12----------10h12p10----10------------------ +A--------------------------------------------12----------12----12p10\8-10-8----- +E----------------------------------------------------------------------------- + +E-------10-\-------------------------------------------------- +B-------10-\-------------------------------------------------- +G-------10-\-------------------------------------------------- +D-------12-\---------------------------------------------------- +A-------12-\--------------------------------------------------- +E--10-8/10-\------------------------------------------------------- + + +(organ solo) + + Dm +Got a black magic woman + Am +Got a black magic woman + Dm +Yes i've got a black magic woman + Gm +Got me so blind i can't see + Dm +That she's a black magic woman +Am Dm +Got the devil on me + + +Bass lines + + Dm Am Dm Gm +G| ------5-5-7-5-- | ---------------- | ------- | ---------------- | +D|.----7----------.|.-------5-5-7-5--.|.-------.|.--------3-3-5-3-.| then +A|.-5-------------.|.-----7----------.|.-------.|.------5---------.| Dm Am Dm +E| --------------- | --5------------- | ------- | ---3------------ | + + + +Solo + + +E-------10--------------13h12-10-------------------------------------12~~p13h12- +B---13^----13^(15)^h10-----------(15)^13h10---------------------10p13----------- +G-------------------------------------------(14)^-12h10\9--9/10----------------- + +E---------13^(15)-15^(17)^15h13p15^(17)-13~~--19^(20)~~\--12p13h12---12p13h12-- +B-13^(15)---------------------------------------------------------13----------- +G------------------------------------------------------------------------------ + +E---------10------------------------------------------------------------------- +B-13^(15)----13p10-----------------10--10-13p10--------------13^(15)-15^(17)--- +G-----------------12^(14)^12p10----10-----------(14)^12p10--------------------- +D-------------------------------12-------------------------------------------- + slow bend +E-----------------------------10------------------------------------------------ +B-13^(15)~~~---------------13^---13p10-------------------------13^(15)-13^(15)~~ +G-----------(14)^12^(14)~~-------------12^(14)^12p10\9~----14------------------- +D--------------------------------------------------------14--------------------- + +E------------10-------------------10-12-13^(15)~~-15^(17)-19^(20)-20^(22)\---- +B-(15)^13p10-13^(15)------------11-------------------------------------------- +G--------------------10-10~~--12---------------------------------------------- + +E----------10-----10------10-13p10h13p10-------------------------------------- +B----10h13---10h13---10h13--------------13p10h13p10--------------------------- +G-12^-----------------------------------------------12p10h12p10--------------- +D---------------------------------------------------------------12p10-12------ + +E---------------------------------------------------------- +B---------------------------------------------------------- +G---------------------9--10~~------------------------------ +D------------10--12---------------------------------------- +A-10-11-12------------------------------------------------- +E---------------------------------------------------------- + got your spell on me babe + + + +Date: Wed, 12 Mar 1997 15:32:52 -0800 +From: Ryan Izzo +Subject: TAB: Black Magic Woman by Santana + +"Black Magic Woman" +by Santana +off of Santana's Greatest Hits + +as tabbed by Ryan Izzo +corrections made from tablature by foucara8@cti.ecp.fr (FOUCART Adrien) +(CD time in parenthesis) + +I made a few changes to a few of the first phrase but it really makes a +big difference to the entire quality of the piece...I hope i've made +Carlos happy... + +h = hammer on p = pull off +b = bend r = release bend +\ = slide ~ = let ring + +Intro: +e|--------------------------------------------------------------------------------| +B|--8p6~~~~-----------6h8p6~~~~-8----------10--8--6\5~~--8--6--5/3~~--10--8--6\5~~| +G|----------7/9\7~~~~-------------7/9\7~~-----------------------------------------| +D|--------------------------------------------------------------------------------| +A|--------------------------------------------------------------------------------| +E|--------------------------------------------------------------------------------| + +e|------------------10------|--------------------------------|----------10--------| +B|--8--6-5--------10--------|--13b15-13-13b15-10-13b15~~~~~--|--13b15~~----13-10--| +G|--------------10----------|--------------------------------|--------------------| +D|------------12------------|--------------------------------|--------------------| +A|----------12--------------|-(0:41)-------------------------|--------------------| +E|--------10----------------|--------------------------------|--------------------| + +e|-----------------|-------12-13-12h13p12---------|--------10----------------------| +B|-----------------|-10-13----------------13b15~~-|-13b15~~---13p10----------------| +G|-12b14r12p10\9~~-|------------------------------|-----------------12b14r12p10h12-| +D|-----------------|------------------------------|--------------------------------| +A|-----------------|------------------------------|--------------------------------| +E|-----------------|------------------------------|--------------------------------| + +e|--------12-13-13/15~~-15b17r15p13------13~~-19 +b20~~\\\\10----------------------| +B|------13----------------------------15------------------------------------------| +G|----14-----------------------------------------------------12b14r12p10----10h12-| +D|--14-------------------------------------------------------------------12-------| +A|--(rake)------------------------------------------------------------------------| +E|--------------------------------------------------------------------------------| + +e|-------------------------------------10\--| +B|-------------------------------------10\--| +G|-------------------------------------10\--| +D|----10h12p10----10-------------------12\--| +A|-12----------12----12p10\8-10-8------12\--| +E|--------------------------------10-8/10\--| + +Questions, suggestions, praises to: +Ryan Izzo diff --git a/guitar/tabs/Santana/bonus_track.tab b/guitar/tabs/Santana/bonus_track.tab new file mode 100644 index 0000000..039c1f1 --- /dev/null +++ b/guitar/tabs/Santana/bonus_track.tab @@ -0,0 +1,549 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / bonus_track.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 26 Jul 2000 17:23:28 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/bonus_track.tab
+
+Artist: Santana
+Title: Bonus Track
+Album: Supernatural
+Transcribed by: jordanlockert@yahoo.com
+
+tablature explanation:
+h=hammer-on
+p=pull-off
+^=bend full
+r=release bend
+/////// indicates rapid picking
+
+
+Intro: classical guitar
+|------------------------------------------------------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+|---0-2-3---------2-2-2-----------2-3-2-2h3p2----------|
+|-0-----------0-------------0-4-5------------4h5-------|
+|---------------4--------------------------------------|
+                                                                              
+
+
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+|-0-2-3---2-3-2-3-5-2h3p2-2----0-2-3---2-3-2-3-5-2h3p2-2---|
+|------------------------5----------------------------5----|
+|----------------------------------------------------------|
+                                                                              
+
+
+|-----------------------------------0-3-0---3-3-1-1--1-------|
+|-------------------------------3-2-------2----------3-------|
+|-----------------2-3---2-3-2-3----------------------2-------|
+|-2-3-5---4-5-4-5--------------------------------------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+                                                                              
+
+
+|-----5-5-----5-5-----------|
+|---6-----6-------6---------|
+|-7---------7-------7-7-----|
+|---------------------------|
+|---------------------------|
+|---------------------------|
+                                                                              
+
+
+|----5-8-6--5-6--5h6p5-8-------------------------|
+|-6-8-----------------8--8-8-8-6-8-6-5-6-5-------|
+|------------------------------------------7-7---|
+|------------------------------------------------|
+|------------------------------------------------|
+|------------------------------------------------|
+                                                                              
+
+
+|-----------|
+|-----------|
+|---7-9-10--|
+|-7---------|
+|-----------|
+|-----------|
+                                                                              
+
+
+|--------------------------------|
+|--------------------------------|
+|----9-10-12-10-9-10-12--10-12---|
+|-12-----p--p--p-h--h------------|
+|-12-----------------------------|
+|--------------------------------|                                                                
+            
+
+
+|----------|
+|-10-8-10--|
+|----------|
+|----------|
+|----------|
+|----------|
+                                                                              
+
+
+|-----------------------10------------------------------------------|
+|-10-10-10-11-13-13--13----13-11-10-11-10h11p10--10-------10--------|
+|----------------------------------------------12---12-12----12-12--|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+                                                                             
+
+
+|------------------------10---
+|----8---------8-8-10-10------
+|-10---10-9-10----------------
+|-----------------------------
+|-----------------------------
+|-----------------------------
+
+ 
+
+-10///12///13//////15//////17/////////18///17////15//13//---|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+                                                                              
+
+
+Electric
+|------------------------------------------------------------10-----
+|*-10-10----10----------10-13-10-----10-10----10----------10---10---
+|--10-10----10-12-10-12-10-----------10-10----10-12-10-12-10--------
+|-------------------------------------------------------------------
+|*------------------------------------------------------------------
+|-------------------------------------------------------------------
+                                                                              
+
+
+-------------------------------10-------|
+-10-10----10----------10-11-13---10----*|
+-10-10----10-12-10-12-10-----------12---|
+----------------------------------------|
+---------------------------------------*|
+----------------------------------------|
+                                                                              
+
+im not sure if this is played on piano or guitar 
+or somethiing else, but here it is anyway
+|--------------------------------------5------|
+|---5-6----------6--------8-6--------8---6----|
+|-7-------------------------------------------|
+|--------------7------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+                                                                              
+
+
+|-----5--------6-5------------5------555-6-5-----5-----|
+|-6-8---------------------6-8----------------6----8----|
+|----------------------------------------------7-------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+                                                                              
+
+
+back to guitar
+|--------------------------------------|
+|--------8---10---8-8-6---8-8-8^r------|
+|-7-10-7---7----7-------7---7----10p7--|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+                                                                              
+
+
+|-----------13-------------------13--|
+|-/15-15-15-----/-15-15-15-15-15-----|
+|------------------------------------|
+|------------------------------------|
+|------------------------------------|
+|------------------------------------|
+                                                                              
+
+
+|-13^///////////13^-13^--13^r10---|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+                                                                              
+
+
+|-18p17-17-17--18p17-17-17-------------|
+|--------------------------18-18\------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+                                                                              
+
+
+|-----15--17-15-17-----------18-17---------------15--17-15-17---
+|-18-----------------------------------------18-----------------
+|---------------------------------------------------------------
+|---------------------------------------------------------------
+|---------------------------------------------------------------
+|---------------------------------------------------------------
+                                                                              
+
+
+-17-17-18-17-------17-15-------13-13-13-13-13----------|
+-------------18-15----------------------------15\------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+
+ 
+
+freedom
+freedom
+freedom
+|-10----------------------|
+|-10-13-10----------------|
+|---------/12-12-10-12----|
+|-------------------------|
+|-------------------------|
+|-------------------------|
+                                                                              
+
+
+...get up
+|---------|
+|---6-----|
+|-7---7---|
+|---------|
+|---------|
+|---------|
+                                                                              
+
+
+...stand up
+|-------------|
+|---8^r6------|
+|-7------7----|
+|-------------|
+|-------------|
+|-------------|
+                                                                              
+
+
+...celebrate
+|--------------------------------5------|
+|-6-------10---8---6---8^r6--6-8--6-----|
+|---7-7-7----7---7---7-----7-------7----|
+|---------------------------------------|
+|---------------------------------------|
+|---------------------------------------|
+                                                                              
+
+
+freedom
+|-------------13----|
+|-13h15-15-15-------|
+|-------------------|
+|-------------------|
+|-------------------|
+|-------------------|
+                                                                              
+
+
+...about freedom
+|-10--------------------------------------|
+|-10-13-10-------------10-----------------|
+|---------/12-12-10-12--------------------|
+|----------------------------12-12p10-----|
+|------------------------------------12---|
+|-----------------------------------------|
+                                                                              
+
+
+...redemption
+|----------------------------10p8-----------------|
+|--------8---10---8--------8-----10p8----8--------|
+|-7-10-7---7----7---7-10-7-----------10p7-10p7----|
+|-------------------------------------------------|
+|-------------------------------------------------|
+|-------------------------------------------------|
+                                                                              
+
+
+freedom
+|--------------13--|
+|-13^-------/15----|
+|------------------|
+|------------------|
+|------------------|
+|------------------|
+                                                                              
+
+
+...don't you 
+want freedom
+|-15^------13-15----13-13-h15---|
+|----------------15-------------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+                                                                              
+
+
+...liberation
+|-18-17-18-17-18-17-18-17-18-17-18-17---17---------------------|
+|---p--h--p--h--p--h--p--h--p--h--p-----18-18-18-18------------|
+|------------------------------------------17-17-17-19-19-19\--|
+|--------------------------------------------------------------|
+|--------------------------------------------------------------|
+|--------------------------------------------------------------|
+                                                                              
+
+
+freedom
+|--------|
+|-13^----|
+|--------|
+|--------|
+|--------|
+|--------|
+
+ 
+
+...don't you 
+want freedom
+|-13^--13^--13^-13^-13^r10--10101010-13---|
+|-------------------------13--------------|
+|-----------------------------------------|
+|-----------------------------------------|
+|-----------------------------------------|
+|-----------------------------------------|
+                                                                             
+
+
+...celebration
+|-10-------10-------------------------------|
+|-10-13-10----13-10-13-13p10----------------|
+|---------------------------12-12ph12-------|
+|------------------------------------/12----|
+|-------------------------------------------|
+|-------------------------------------------|
+                                                                              
+
+
+...lets celebrate
+|--------------------|
+|-------------6------|
+|---5-55-55-----7----|
+|-7---------7--------|
+|--------------------|
+|--------------------|
+                                                                              
+
+
+...lets celebrate
+|-10-------10---------------------------------|
+|-10-13-10----13-10h13p10---------------------|
+|------------------------12p10-12p10--10h12---|
+|-----------------------------------12--------|
+|---------------------------------------------|
+|---------------------------------------------|
+                                                                              
+
+
+...gonna celebrate
+|-10-----------------------|
+|----8^r^r^r^r---6h8-------|
+|-------------------7------|
+|--------------------------|
+|--------------------------|
+|--------------------------|
+                                                                              
+
+
+...celebrate
+|-------------------------------|
+|-8^r^r^r---8^r6-8^r6-----------|
+|---------------7----7-5-7------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+                                                                              
+
+
+Oh yeah
+|---5-------5-------------------|
+|-----8---6---8---6p5----6------|
+|-7------------------7-7--------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+                                                                              
+
+
+|-10-----------------------------|
+|---10------10-------------------|
+|-----12--10--12--10p9---10------|
+|----------------------12--12----|
+|--------------------------------|
+|--------------------------------|
+                                                                              
+
+
+|-10-------------------------------10h13p10---------|
+|---10------10----------------10h13--------13p10----|
+|-----12--10--12-----10--10h12----------------------|
+|------------------12--12---------------------------|
+|------------------------------not-sure-about-this--|
+|---------------------------------------------------|
+                                                                             
+
+
+|---------------------------------------10----------------------------
+|-----6---8---8^--8--6-8-8p6----6---8--------8p6-8-8p6----6---8---10--
+|-7-------------------------7-------------------7-----7---------------
+|---------------------------------------------------------------------
+|---------------------------------------------------------------------
+|---------------------------------------------------------------------
+                                                                              
+
+
+-------------------------------10/////----------------|
+--10h11p10h11p10-10/////11/////-----------------------|
+--------------------------------------9/////10////----|
+------------------------------------------------------|
+------------------------------------------------------|
+------------------------------------------------------|
+                                                                              
+
+
+|-17-----18-15h17-15----15-17-15-17-----18-15h17-15----15-17-15-17---
+|--------------------18-----------------------------18---------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+                                                                              
+
+
+--18-15h17-15---15-17--17------------20^--17-20^--17-20^--17-20^---
+--------------18---------18-18-18-18-------------------------------
+-------------------------19-19-19-19-------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+now there's some weird effects and noise that play as it fades out 
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/corazon_espinado.tab b/guitar/tabs/Santana/corazon_espinado.tab new file mode 100644 index 0000000..5ec3005 --- /dev/null +++ b/guitar/tabs/Santana/corazon_espinado.tab @@ -0,0 +1,389 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / corazon_espinado.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Thu, 6 Jul 2000 21:17:59 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/corazon_espinado.tab
+
+SONG: Corazon Espinado
+ARTIST: Santana & Mana
+ALBUM:Supernatural
+
+Tablature explanation:
+h = hammer on
+p = pull off
+^ = bend two semitones
+b = bend one semitone
+r = release bend
+/ = slide up
+\ = slide down
+//////// = turbo pick the preceding note
+(is there a proper name for this teqnique?)
+
+tab by jordanlockert@yahoo.com
+
+...one of my favorites from supernatural. Musically, this song is 
+very much like smooth. Its just two semitones higher. You can take 
+licks and fill from this song and put them in smooth by lowering
+them the 2 frets, or vice versa. Intro
+
+-|----------------------------7-6-----------------------------|
+-|--------------------------7------7--------------------------|
+-|-----4h7p4---4---------/7----------9--7-9^9^--------9-6-7-9-|
+-|-4h7-------7------------------------------------------------|
+-|------------------------------------------------------------|
+-|------------------------------------------------------------|
+
+                                                                              
+-|------7h10p7----7------------14-17^r--14-----------14------14----14--
+-|-7h10--------10----------/17-------------17--15-17^----17^----17^----
+-|---------------------------------------------------------------------
+-|---------------------------------------------------------------------
+-|---------------------------------------------------------------------
+-|---------------------------------------------------------------------
+                                                                              
+--------------------------------|
+--17-14-15-17---15-14-14--------|
+--------------------------16----|
+--------------------------------|
+--------------------------------|
+--------------------------------|...espinado el corazon 
+-|------------------------|
+-|-10----------7----------|
+-|-9^--9p7-9-7---7--------|
+-|-----------------9------|
+-|------------------------|
+-|------------------------|
+                                                                              
+...no da razon 
+-|-------------------|
+-|-------------------|
+-|-6-7-9---9p7p6-----|
+-|--------------9----|
+-|-------------------|
+-|-------------------|
+                                                                              
+...corazon aplastado 
+-|-5-------------------------|
+-|---8-7-5---5----7p5h7------|
+-|---------7-----------------|
+-|---------------------------|
+-|---------------------------|
+-|---------------------------|
+                                                                              
+...Aber aber
+-|--------------|
+-|--------------|
+-|---4-6-7------|
+-|-4------------|
+-|--------------|
+-|--------------|
+                                                                              
+Chorus:...como me duele el amor 
+-|-------------------------------------------------|
+-|-10^///////-10^///////-10^--10p7---7---7---------|
+-|---------------------------------9---9---9^------|
+-|-------------------------------------------------|
+-|-------------------------------------------------|
+-|-------------------------------------------------|
+                                                                              
+...nostiene entregados 
+-|--------------|
+-|--------------|
+-|-6-7-9--------|
+-|--------------|
+-|--------------|
+-|--------------|
+                                                                              Hay ya yay           como me duele el amor 
+-|------------------------------------------|
+-|------------------------------------------|
+-|---7-7-7------------7---7-----------------|
+-|-9^---------------9^--9^--7-9p7-----------|
+-|-------------------------------9----------|
+-|------------------------------------------|
+                                                                              
+Chorus:
+...como me duele el amor 
+-|--------------------------------7-----------------------|
+-|-10^-----10--7--10-7h10p7---7-----10p7-----7------------|
+-|--------------------------9---9^-------9p7---7----------|
+-|-----------------------------------------------9--------|
+-|----this is the best I could figure this one out...-----|
+-|--------------------------------------------------------| 
+
+-|------------------------------------------------------
+-|-----------------------17p15-17p15-17p15-17p15-17^----
+-|-----7---6----7-6-------------------------------------
+-|-9----------------9-9---------------------------------
+-|------------------------------------------------------
+-|------------------------------------------------------
+   ah  ah  ah...  
+-12----12-12------------------------------------------|
+----17^------15-17p15------15--14----15-14------------|
+-----------------------16------------------16-16----\-|
+------------------------------------------------------|
+------------------------------------------------------|
+------------------------------------------------------|
+                       ah  ah  ah...
+-|-------------------------------2////////*-------|
+-|-------------------------------3////////*-------|
+-|------------------------------------------------|
+-|------------------------------------------------|
+-|-/9-9-9-----------------------------------------|
+-|------------------------------------------------|
+ *slide up while rapid picking                                                                            
+-|----------------------------------------------------------
+-|-12----------------------------14br-12-----12//////-------
+-|---------14-11----11-11----------------14^----------14p11-
+-|---------------14^----------------------------------------
+-|----------------------------------------------------------
+-|----------------------------------------------------------
+  solo                                                                        
+---------------------|
+---------------------|
+---------------------|
+-14^-14---12h14------|
+---------------------|
+---------------------|
+                                                                              
+-|----------------------------------------------------------14///////-
+-|-12-15-15-12-15-12-15-15-12---14-17-17-14-17-14-17-17-14------------
+-|--------------------------------------------------------------------
+-|--------------------------------------------------------------------
+-|--------------------------------------------------------------------
+-|--------------------------------------------------------------------
+                                                                              
+-14t15*----14-15-14-15-14-15-14-15-17-15-14-17^-|
+------------------------------------------------|
+------------------------------------------------|
+------------------------------------------------|
+------------------------------------------------|
+------------------------------------------------|
+ *trill about maybe 8 times. Listen to song to hear it.                     
+-|-17^-----17-14----14-14----
+-|---------------17^---------
+-|---------------------------
+-|---------------------------
+-|---------------------------
+-|---------------------------
+
+-17^-17^-17^rp14--14-------------14---------------|    
+----------------17--17b-17p15h17---15-17--15p14---|  
+-----------------------------------------------16-|
+--------------------------------------------------|
+--------------------------------------------------|
+--------------------------------------------------|                                         
+-|----------------------------------------------------------------
+-|-15p14p12-15p14p12-15p14p12-15p14p12-15p14p12-15p14p12-15p14p12-
+-|----------------------------------------------------------------
+-|----------------------------------------------------------------
+-|----------------------------------------------------------------
+-|----------------------------------------------------------------
+                                                                              
+-------------------------------------------------------|
+-17p15p14-17p15p14-17p15p14-17p15p14-17p15p14-17p15p14-|
+-------------------------------------------------------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+                                                                              
+-|-2////////////*--------------------------------------------|
+-|-3////////////*--------------------------------------------|
+-|-----------------------------------------------------------|
+-|-----------------------------------------------------------|
+-|-----------------------------------------------------------|
+-|-----------------------------------------------------------|                   
+*turbo pick and slide all the way up the fretboard                                                  ...el olvido 
+-|----------------------------------------|
+-|----------------------------------------|
+-|----------------------------------------|
+-|-14-12-11-----------11-11---------------|
+-|-----------14-12-14---------------------|
+-|----------------------------------------|
+                                                                              
+...el corazon 
+-|---7-9---10-9-7----------------|
+-|-7----------------7------------|
+-|--------------------7----------|
+-|----------------------9-7------|
+-|-------------------------------|
+-|-------------------------------|...estar vivo 
+-|---------------------------------------------------|
+-|---------------------------------------------------|
+-|----------------------11-12-12-11h12p11------------|
+-|-----11-14-14-11---14-------------------14--12-----|
+-|-/12------------12---------------------------------|
+-|---------------------------------------------------|
+                                                                              
+...lado amor 
+-|-----------------------------|
+-|-----------------------------|
+-|-----------------------------|
+-|-----------------------------|
+-|-/9-9-9-/9-9-9-/9-9-9--------|
+-|-----------------------------|
+                                                                              
+Corazon espinado 
+-|---------------------------------------------------------7-------
+-|-------------7-----------------------------------7---------------
+-|-----7--9------7---------7--6----7-6--------/7-9---9---9^--9p7h9-
+-|-9---------------9-7-9---------------7---9-----------------------
+-|---------------------------------------9-------------------------
+-|-----------------------------------------------------------------
+                                                                              
+----------------7----7----7-7-7-7-7-|
+-7--------------7----7----7-7-7-7-7-|
+--7--------7-9^---9^---9^-----------|
+---9p7h9----------------------------|
+------------------------------------|
+------------------------------------|
+                                                                              
+-|---------------------12-----------------------------------------
+-|-17^------17-15-17^-----17^--12h15p12-12--15p12-12--15p12-12\---
+-|----------------------------------------------------------------
+-|----------------------------------------------------------------
+-|----------------------------------------------------------------
+-|----------------------------------------------------------------
+                                                                              
+---------------------------------14////////------------14-
+-14h17-17--14h17-17--14h17-17----15////////15-14-15-17----
+----------------------------------------------------------
+----------------------------------------------------------
+----------------------------------------------------------
+----------------------------------------------------------
+                                                                              
+-17p14-17p14-17p14-17^--17^-17^-17^-rp14--14----------------|
+----------------------------------------17--17^-17p15-------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+                                                                              
+-|----------------------------------------------------------------------
+-|---------15--15-15-14----17-15-14-------------15--14-----15-14--------
+-|-16/////--------------------------14----h16--------------------16-16--
+-|-16/////-----------------------------16-------------------------------
+-|----------------------------------------------------------------------
+-|----------------------------------------------------------------------
+                                                                              
+--------------------------------------------------------------------|
+----------------------12--------------------------------------------|
+----------11----------------------11-----------------11-------------|
+----12-14----14----14^---14p12h14---12---------12-12----14----12h14-|
+-14-----------------------------------14----14----------------------|
+--------------------------------------------------------------------|
+                                                                              
+-|----7/////----9/////----10/////----12//-14-14----14----14----14-----
+-|-10^-------12^-------13^--------15^-----------17^---17^---17^---17^-
+-|--------------------------------------------------------------------
+-|--------------------------------------------------------------------
+-|--------------------------------------------------------------------
+-|--------------------------------------------------------------------
+                                                                              
+-14-15^-----------14---------------------------------------------|
+--------17-15-17^---15------15-------15-------14h17-17-14h17-17--|
+----------------------16-16----16-16----16-16--------------------|
+-----------------------------------------------------------------|
+-----------------------------------------------------------------|
+-----------------------------------------------------------------|
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/dance_sister_dance.tab b/guitar/tabs/Santana/dance_sister_dance.tab new file mode 100644 index 0000000..9327020 --- /dev/null +++ b/guitar/tabs/Santana/dance_sister_dance.tab @@ -0,0 +1,287 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / dance_sister_dance.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Fri, 5 Jan 2001 10:38:06 -0500
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/dance_sister_dance.tab
+
+Artist: Santana
+Song: Dance Sister Dance
+Album: Best of Santana
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates picking
+\=slide down
+b=bend half
+^=bend full
+br, ^r=bend &release
+
+The CD times are at the bottom left of each measure.
+
+Main Chords:
+-|---F---------Eb---|
+-|---10--------8----|
+-|---10--------8----|
+-|---10--------8----|
+-|---8---------6----|
+-|------------------|
+                                                                              
+Fill:
+-|----------------------13------------|
+-|-------------------13----16-13------|
+-|----------------14-------------14---|
+-|--15-16-17---15---------------------|
+-|------------------------------------|
+-|-0-13-------------------------------|
+                                                                              
+intro riff: 
+on a xylaphone or something
+-|----------------------------------------------------------------|
+-|-*------------------------------------------------------------*-|
+-|-------------10------8------------------------------------------|
+-|------7-10--------10-----8-10-----------------------------------|
+-|-*--8---------------------------8-8-------6-6-------(8)(8)----*-|
+-|-0-17-----------------------------------------------------------|
+
+Next 4 measures are the                                                                           
+
+main guitar riff.
+Reapeat throughout song
+with slight variations:
+
+-|------------------------------------13-----------|
+-|------------13----------16----13----------16-----|
+-|---------14-------14-------------13--------------|
+-|---15-15-------------15--------------------------|
+-|-------------------------------------------------|
+-|-1-15--------------------------------------------|
+                                                                              
+
+-|-------------------------------------------------|
+-|--------13----------16----13---------------------|
+-|-----14-------14----------------15vvvvv^r13------|
+-|--15-------------15------------------------15----|
+-|-------------------------------------------------|
+-|-------------------------------------------------|
+                                                                              
+
+-|--------------------------------13---------------|
+-|--------16----------16----13----------16---------|
+-|-----14-------14-------------13------------------|
+-|--15-------------15------------------------------|
+-|-------------------------------------------------|
+-|-------------------------------------------------|
+                                                                              
+
+-|-------------------------------------------------|
+-|-13-16-13-------13-------------------------------|
+-|----------15-------15-13----15-13----------------|
+-|----------------------------------15----15p13----|
+-|---------------------------------------------15--|
+-|-------------------------------------------------|
+                                                                              
+
+-|------------------------------------------------------------------------|
+-|------------------------------------------------------------------------|
+-|-15----13--------------13h15----13---------------13h15----13h15p13------|
+-|------------------------------------------------------------------------|
+-|------------------------------------------------------------------------|
+-|-1-55-------------------------------------------------------------------|
+                                                                              
+
+-|----------------------------------------------------------------------------
+-|----------------------------------------------------------------------------
+-|---------------------13-----------------------13^---------------------------
+-|-13-15-13-15---15-15------------13-15-13-15---------15----------------------
+-|---------------------------------------------------------15p13--------------
+-|-3-03---------------------------------------------------------16------------
+                                                                              
+
+-----------------------------13----------13-----------------------------|
+--------------------------------------------16-13-----------------------|
+-----------------13--13--15^-------15^------------15^r-13-15p13---------|
+---13-15-13-15--------------------------------------------------15------|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+                                                                              
+
+-|-13--13-----13-13---15^------------13------------13----13----16^------------
+-|---------16---------------------16------------16----16----------------------
+-|----------------------------------------------------------------------------
+-|----------------------------------------------------------------------------
+-|----------------------------------------------------------------------------
+-|-3-17-----------------------------------------------------------------------
+                                                                              
+
+-18r16-13----13------13-13-16-13----13-----------------|
+----------16------16-------------16-----16p13----------|
+---------------------------------------------15p13--13-|
+--------------------------------------------------15---|
+-------------------------------------------------------|
+-------------------------------------------------------|
+                                                                              
+
+-|-------------------------------------------------------------------
+-|----1313---1313---1313---1313---1313---1313---1313-----------------
+-|-15^----15^----15^----15^----15^----15^----15^----15^r13----13-13--
+-|---------------------------------------------------------15--------
+-|-------------------------------------------------------------------
+-|-3-26--------------------------------------------------------------
+                                                                              
+
+---------------------------------------|
+---------------------------------------|
+---------------------------------------|
+--15p13-------------------13--15-15----|
+-------15p13\11----11-/15--------------|
+----------------13---------------------|
+                                                                              
+
+-|-18^---16----------------------------------------------------------------
+-|---------18--18--18--18--18--18--18--17--18--17--18--18--18--17--18--18--
+-|-------------------------------------------------------------------------
+-|-------------------------------------------------------------------------
+-|-------------------------------------------------------------------------
+-|-3-33--------------------------------------------------------------------
+                                                                              
+
+--16---13------------|
+---------16p13-------|
+--------------15\----|
+---------------------|
+---------------------|
+---------------------|
+                                                                              
+
+-|-16p13-------16p13-------16p13-------16-16p13-------16-16p13----------|
+-|-------16p13-------16p13-------16p13----------16p13----------16p13----|
+-|----------------------------------------------------------------------|
+-|----------------------------------------------------------------------|
+-|----------------------------------------------------------------------|
+-|-3-44----------------------*listen to CD for duration and pattern*----|
+                                                                              
+
+-|-16^----16^-----16-15--15-------13------------------------------|
+-|--------------------------16-16----13--13h16p13-----------------|
+-|-----------------------------------------------15p13------------|
+-|----------------------------------------------------15p13*****--|
+-|----------------------------------------------------------------|
+-|-3-52-----------------------------------------------------------|
+                                                                              
+
+-|-3-57---------------------------------13-13-------------------------------
+-|---------------------------------------13-13---------------------13-13----
+-|---------------------------------------13-13---------------------13-13----
+-|-----------13-13----13-15-13-15-----------------13-15-13-15-15------------
+-|----11-/15-------15-------------------------------------------------------
+-|-13-----------------------------------------------------------------------
+                                                                              
+
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+--15-15p13----------13-----13-----13-----13-----13-----13---|
+----------15---13h15--13h15--13h15--13h15--13h15--13h15-----|
+------------------------------------------------------------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/dancesisterdance.prj b/guitar/tabs/Santana/dancesisterdance.prj new file mode 100644 index 0000000..68af93c --- /dev/null +++ b/guitar/tabs/Santana/dancesisterdance.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=dancesisterdance.tab +DELAYS= diff --git a/guitar/tabs/Santana/dancesisterdance.tab b/guitar/tabs/Santana/dancesisterdance.tab new file mode 100644 index 0000000..0551099 --- /dev/null +++ b/guitar/tabs/Santana/dancesisterdance.tab @@ -0,0 +1,183 @@ +This file is the author's own work and represents their interpretation of the +song. You may only use this file for private study, scholarship, or research. + +Artist: Santana +Song: Dance Sister Dance +Album: Best of Santana +Transcribed by jordanlockert@yahoo.com + +Tablature Explanation: +h=hammer-on +p=pull-off +/=slide up or indicates picking +\=slide down +b=bend half +^=bend full +br, ^r=bend &release + +The CD times are at the bottom left of each measure. + +Main Chords: +|---F---------Eb--| +|---10--------8---| +|---10--------8---| +|---10--------8---| +|---8---------6---| +|-----------------| + +Fill: +|----------------------13-----------| +|-------------------13----16-13-----| +|----------------14-------------14--| +|--15-16-17---15--------------------| +|-----------------------------------| +|-0-13------------------------------| + +intro riff: +on a xylaphone or something +|---------------------------------------------------------------| +|-*------------------------------------------------------------*| +|-------------10------8-----------------------------------------| +|------7-10--------10-----8-10----------------------------------| +|-*--8---------------------------8-8-------6-6-------(8)(8)----*| +|-0-17----------------------------------------------------------| + +Next 4 measures are the +main guitar riff. +Reapeat throughout song +with slight variations: + +|------------------------------------13----------| +|------------13----------16----13----------16----| +|---------14-------14-------------13-------------| +|---15-15-------------15-------------------------| +|------------------------------------------------| +|-1-15-------------------------------------------| + + +|------------------------------------------------| +|--------13----------16----13--------------------| +|-----14-------14----------------15vvvvv^r13-----| +|--15-------------15------------------------15---| +|------------------------------------------------| +|------------------------------------------------| + + +|--------------------------------13--------------| +|--------16----------16----13----------16--------| +|-----14-------14-------------13-----------------| +|--15-------------15-----------------------------| +|------------------------------------------------| +|------------------------------------------------| + + +|------------------------------------------------| +|-13-16-13-------13------------------------------| +|----------15-------15-13----15-13---------------| +|----------------------------------15----15p13---| +|---------------------------------------------15-| +|------------------------------------------------| + + +|-----------------------------------------------------------------------| +|-----------------------------------------------------------------------| +|-15----13--------------13h15----13---------------13h15----13h15p13-----| +|-----------------------------------------------------------------------| +|-----------------------------------------------------------------------| +|-1-5-5-----------------------------------------------------------------| + + +|---------------------------------------------------------------------------- +|---------------------------------------------------------------------------- +|---------------------13-----------------------13^--------------------------- +|-13-15-13-15---15-15------------13-15-13-15---------15---------------------- +|---------------------------------------------------------15p13-------------- +|-3-03---------------------------------------------------------16------------ + + +-----------------------------13----------13----------------------------| +--------------------------------------------16-13----------------------| +-----------------13--13--15^-------15^------------15^r-13-15p13--------| +---13-15-13-15--------------------------------------------------15-----| +-----------------------------------------------------------------------| +-----------------------------------------------------------------------| + + +|-13--13-----13-13---15^------------13------------13----13----16^------------ +|---------16---------------------16------------16----16---------------------- +|---------------------------------------------------------------------------- +|---------------------------------------------------------------------------- +|---------------------------------------------------------------------------- +|-3-17----------------------------------------------------------------------- + + +-18r16-13----13------13-13-16-13----13----------------| +----------16------16-------------16-----16p13---------| +---------------------------------------------15p13--13| +--------------------------------------------------15--| +------------------------------------------------------| +------------------------------------------------------| + + +|------------------------------------------------------------------- +|----1313---1313---1313---1313---1313---1313---1313----------------- +|-15^----15^----15^----15^----15^----15^----15^----15^r13----13-13-- +|---------------------------------------------------------15-------- +|------------------------------------------------------------------- +|-3-26-------------------------------------------------------------- + + +--------------------------------------| +--------------------------------------| +--------------------------------------| +--15p13-------------------13--15-15---| +-------15p13\11----11-/15-------------| +----------------13--------------------| + + +|-18^---16---------------------------------------------------------------- +|---------18--18--18--18--18--18--18--17--18--17--18--18--18--17--18--18-- +|------------------------------------------------------------------------- +|------------------------------------------------------------------------- +|------------------------------------------------------------------------- +|-3-33-------------------------------------------------------------------- + + +--16---13-----------| +---------16p13------| +--------------15\---| +--------------------| +--------------------| +--------------------| + + +|-16p13-------16p13-------16p13-------16-16p13-------16-16p13---------| +|-------16p13-------16p13-------16p13----------16p13----------16p13---| +|---------------------------------------------------------------------| +|---------------------------------------------------------------------| +|---------------------------------------------------------------------| +|-3-44----------------------*listen to CD for duration and pattern*---| + + +|-16^----16^-----16-15--15-------13-----------------------------| +|--------------------------16-16----13--13h16p13----------------| +|-----------------------------------------------15p13-----------| +|----------------------------------------------------15p13*****-| +|---------------------------------------------------------------| +|-3-52----------------------------------------------------------| + + +|-3-57---------------------------------13-13------------------------------- +|---------------------------------------13-13---------------------13-13---- +|---------------------------------------13-13---------------------13-13---- +|-----------13-13----13-15-13-15-----------------13-15-13-15-15------------ +|----11-/15-------15------------------------------------------------------- +|-13----------------------------------------------------------------------- + + +-----------------------------------------------------------| +-----------------------------------------------------------| +-----------------------------------------------------------| +--15-15p13----------13-----13-----13-----13-----13-----13--| +----------15---13h15--13h15--13h15--13h15--13h15--13h15----| +-----------------------------------------------------------| diff --git a/guitar/tabs/Santana/do_you_like_the_way.tab b/guitar/tabs/Santana/do_you_like_the_way.tab new file mode 100644 index 0000000..bddc4ce --- /dev/null +++ b/guitar/tabs/Santana/do_you_like_the_way.tab @@ -0,0 +1,356 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / do_you_like_the_way.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Sun, 6 Aug 2000 18:38:24 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/do_you_like_the_way.tab
+
+Song: Do you like the Way
+Artist: Santana featuring some other people
+Album:Supernatural
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates rapid picking
+\=slide down
+b=bend «
+^=bend full
+br, ^r=bend &release
+
+There's a bunch of lyrics between the intro and the solo that I 
+didn't put in, and then a bunch more betwwen the solo and the outro,
+but the weren't neccesary
+
+
+Intro
+|-------------------------------------------------
+|------------------10-10-12-10h12-----------------
+|------9-9---9-9-9-----------------------/11-9----
+|-9h11--------------------------------------------
+|-------------------------------------------------
+|-------------------------------------------------
+                                                                              
+
+
+-------------------------------------------------------------------|
+-/7------------------------------------------------------7---------|
+----9-7-9-7h9p7-6------------------------6-6-6-7-7-7-7h9---7-------|
+---------------------7-------------7-7-7---------------------9-----|
+-------------------9---------9-9-9---------------------------------|
+-------------------------------------------------------------------|
+  
+                                                                            
+Solo
+|-------------------------------------------------------
+|---------12------12-12-----12-12----12-12--12-15-------
+|-11--14------14^-------14^-------14^-------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+     
+                                                                         
+
+-----------------------------------------14--17--14h17p14----14---------------
+-----15-15-----15-15--15-15-15--17-15-17------------------17----17------------
+-17^-------17^----------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+     
+                                                                         
+
+-----19----19-19-19-21-22-22^-22^-22^r--19-19--19--------------------------
+--------19-----------------------------------22--22-19-22-19h22p19--19-----
+-20^--------------------------------------------------------------21--21^r-
+---------------------------------------------------------------------------
+---------------------------------------------------------------------------
+---------------------------------------------------------------------------
+ 
+                                                                             
+
+-------------------------------17------------------------------|
+-------------19--------------19--19-17^r----17----17-----------|           
+-19----19-21----21^r-19------19----------19----19--------------|
+----21-------------------------------------------------16-19---|
+---------------------------------------------------------------|      
+---------------------------------------------------------------|
+  
+                                                                            
+
+|-7--5--7--5--7--5-7--------------------
+|-7--5--7--5--7--5-7------15-15-17------
+|----------------------/16--------------
+|---------------------------------------
+|---------------------------------------
+|---------------------------------------
+  
+                                                                            
+
+|-7--------------------------------------------------------------------------
+|----8--7--10-8-7------------------------------------------------------------
+|-----------------9-7-9-7h9p7p6------------------9-9-11-12-12-12-------------
+|----------------------------------7---------/12-----------------------------
+|--------------------------------9-------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+|-------------------------------------------------
+|-------15-15-15----15-15----15-15----15-15-15----
+|-14h16----------16-------16-------16-------------
+|-------------------------------------------------
+|-------------------------------------------------
+|-------------------------------------------------
+ 
+                                                                             
+
+-------------------------------------------------------------------------
+------15-15----15-15----15--15----15--15-15----14-17-17-14-17-17-14-17---
+-14h16------16-------16--------16----------------------------------------
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+                                                                              
+
+
+------------------------------19-21-22--22^-22^-22^-22^---------|
+-19//////////20///22///--22^------------------------------------|
+----------------------------------------------------------------|
+----------------------------------------------------------------|
+----------------------------------------------------------------|
+-------------------------------------------------------end-solo-|
+                                                                              
+
+
+|-7--5--7--5--7--5-7---------------------------------------------------------
+|-7--5--7--5--7--5-7----/12-12-----------------------------------------------
+|--------------------------------------11--9------9--------------------------
+|---------------------------------------------------12-11-12-11--------------
+|-----------------------------------------------------------------9-12-------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+-------------------------------------------------------|
+-------------------------------------------------------|
+-----9--9------9--9---9-9----9-9-9-11--9----9----------|
+-/11-------/11------11----11-------------12---12-------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+  
+                                                                           
+...
+...
+...
+...can't we?
+|-7--5--7--5--7--5/7-7------------------14-----------------------------------
+|-7--5--7--5--7--5/7-7------15-------15-------17^-17p15-17-15-15---17--------
+|------------------------16----16--------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+       
+                                                                       
+...goin' down baby
+---------------------------------------------------
+-14-15-17--15h17p14-15-14--------------------------
+--------------------------14-14-16-/16-14----16----
+---------------------------------------------------
+---------------------------------------------------
+---------------------------------------------------
+     
+                                                                         
+...Oh, Lord
+|---------------------------------------------------------------
+|-12-----------12-----------------------------------------------
+|---/11--9--------11-9-11-/11-----------------------------------
+|------------------------------14-12----14-12-14-11-------------
+|-------------------------------------------------------12------
+|----------------------------------------------------14---------
+       
+                                                                       
+
+|-------------------------------------------
+|--------------------------------------15---
+|-----------------------------14-14-16------
+|-----14-14-14-14-14-14-14-14---------------
+|-/14---------------------------------------
+|-------------------------------------------
+      
+                                                                        
+...a minute 
+|-------14--------------14------14-------14-------14-15-14-15-14-15-14-15-
+|----15--------------15------15-------15-------15-------------------------
+|-16--------------16---------------16-------16----------------------------
+|-------------------------------------------------------------------------
+|-------------------------------------------------------------------------
+|-------------------------------------------------------------------------
+      
+                                                                        
+
+-14-15-17-17---14h17--14-17-14-17-14-17-14-17^-------17^-17^-17^-17^-17^-17^r-
+------------------------h--p--h--p--h--p--h-----------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+-14-17-17p14--14------------------------17-17p14--14-----------------------|
+------------17--17^-17-15-17-15-15--------------17--17^-17-15-17-14--------|
+------------------------------------------------------------------------14-|
+---------------------------------------------------------------------16----|
+---------------------------------------------------------------------------|
+---------------------------------------------------------------------------|
+       
+                                                                       
+
+-9-10-9----------9-10-9--------------------------------9-10---------12^-12----
+--------10----10--------10----10-10h12-12--12---------------------------------
+-----------11--------------11-------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+      
+                                                                        
+
+----------------------------14-17----17h19-19--22-19-22-19-22-19-22-19-22^----
+-------------------14-15-17----------------------p--h--p--h--p--h--p--h-------
+---14h16-14--14-16------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+       
+                                                                       
+
+-22--^22^-22^-22^-22^---22-19----19-------------------------------------------
+------------------------------22----22-19-22-22p19---19--------------------19-
+--------------------------------------------------21----21^-21-19----19-21----
+------------------------------------------------------------------21----------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+     
+                                                                         
+
+-------------------------------|
+-22-22p19---19-----------------|
+---------21----21^-21-19-21----|
+-------------------------------|
+-------------------------------|
+-------------------------------|
+                                                                              
+
+
+|-19--------------------------19-----------------------------------------------
+|----19-17h19-17-----------------19-17h19-17------17-----17-15-14-15-14--------
+|------------------19------------------------19----------------------------14--
+|-----------------------------------------------------------------------16-----
+|------------------------------------------------------------------------------
+|----------------------------------------------------------------inaudible-----
+
+
+ 
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/el_farol.tab b/guitar/tabs/Santana/el_farol.tab new file mode 100644 index 0000000..e1a8ae4 --- /dev/null +++ b/guitar/tabs/Santana/el_farol.tab @@ -0,0 +1,550 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / el_farol.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Fri, 11 Aug 2000 22:19:15 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/el_farol.tab
+
+Artist: Santana
+Title: El Farol
+Album: Supernatural
+Transcribed by: jordanlockert@yahoo.com
+
+I worked out the fast part now, and it wasn't as difficult as I thought 
+it would be. Its not that its super fast or anything, its just because 
+there's so many notes in a row, it gets sort of mind numbing. For clarity,
+I've really spaced it apart more than usual. My advice for learning it would 
+be to study and memorize it, and then try to play along with the song.
+For the most part, all of it follows the C major scale played at the 12 position
+and dont forget to use one finger per fret.
+
+Intro: Classical guitar
+|------------------------|
+|------------------------|
+|------13h14p13----------|
+|-14h15--------15p14-----|
+|------------------------|
+|------------------------|
+                                                                              
+
+
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|------13h14-13h14-13h14p13----------------------------------|
+|-14h15---------------------14h15-14h15p14--12h14p12---------|
+|----------------------------------------------------15------|
+|------------------------------------------------------------|
+                                                                              
+
+
+Electric
+|------------------------------------------------------------|
+|-13-----------------------13-12-----------------------------|
+|------------------------------------------------------------|
+|------------14-15-----------------------12-14---------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+                                                                              
+
+
+|--------------------------------------------------------------------------|
+|--------------------------------------------------------------------------|
+|-14------------------------------14-13------------------------------------|
+|---------------12----------12-15--------15-14--12-----12-14-12-14---------|
+|------------15----------14-------------------------15---------------------|
+|--------------------------------------------------------------------------|
+                                                                              
+
+
+|----------------------------------------------------------------------|
+|-13-----------------------13-12---------------------------------------|
+|--------------------------------------------12------------------------|
+|------------14-15------15----------------12----12-14-14-14------------|
+|----------------------------------------------------------------------|
+|----------------------------------------------------------------------|
+                                                                              
+
+
+|--------------------------------------------------------------------------|
+|--------------------------------------------------------------------------|
+|-14------------------------------14-13h14p13------------------------------|
+|---------------12----------12-15--------------15-14--12-----12-14-12-14---|
+|------------15----------14-------------------------------15---------------|
+|--------------------------------------------------------------------------|
+                                                                              
+
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|-------------------------12---------------------------------------------|
+|----14----14-12--12--15--------14--------------12-14-12--12------12-----|
+|-15----15--------------------------------12-15---------------14-----15--|
+|------------------------------------------------------------------------|
+                                                                              
+
+
+|---------------------------------------------------------------------------|
+|---------------------------------------------------------------------------|
+|-------------------------12------------------------------------------------|
+|----14----14-12--14--15------14p12h14-----------12-14-12-------------------|
+|-15----15---------------------------------12-15-----------14--11-----14-12-|
+|------------------------------------------------------------------12-------|
+                                                                              
+
+
+|--------------------------------------------------------------------|
+|--------------------------------------------------------------------|
+|--------------------------------------------12----------------------|
+|---------------------------12-----12-14--------15-14----------------|
+|-11-12-14--12-14-15--14-15-----15-----------------------------------|
+|--------------------------------------------------------------------|
+                                                                              
+
+
+|------------------------------------------------------------|
+|-13-----------------------13-12-----------------------------|
+|------------------------------------------------------------|
+|------------14-15-----------------------12-14-14------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+                                                                              
+
+
+|--------------------------------------------------------------------------|
+|--------------------------------------------------------------------------|
+|-14------------------------------14-13------------------------------------|
+|---------------12----------12-15--------15-14--12-----12-14-12-14---------|
+|------------15----------14-------------------------15---------------------|
+|--------------------------------------------------------------------------|
+                                                                              
+
+
+|----------------------------------------------------------------------|
+|-13-----------------------13-12---------------------------------------|
+|--------------------------------------------12------------------------|
+|------------14-15------------------------12----12-14-14-14------------|
+|----------------------------------------------------------------------|
+|----------------------------------------------------------------------|
+                                                                              
+
+
+|-----------------------------------------------------------------------|
+|-----------------------------------------------------------------------|
+|-14------------------------------14-13---------------------------------|
+|---------------12----------12-15--------15-12h14--12-----12-14-12-14---|
+|------------15----------14----------------------------15---------------|
+|-----------------------------------------------------------------------|
+
+ 
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|-------------------------12---------------------------------------------|
+|----14----14-12--12--15--------14--------------12-14-12-----------------|
+|-15----15--------------------------------12-15-----------14------14-12--|
+|-------------------------------------------------------------15---------|
+
+ 
+
+|---------------------------------------------------------------------------|
+|---------------------------------------------------------------------------|
+|-------------------------12------------------------------------------------|
+|----14----14-12--14--15------14p12h14-----------12-14-12-------------------|
+|-15----15---------------------------------12-15-----------14--11-----14-12-|
+|------------------------------------------------------------------12-------|
+
+ 
+
+|---------------------------------------------------------------
+|---------------------------------------------------------------
+|----------------------------12----------14---------------------
+|-------12-14-12-------12-14----15-14-15----15-14h15p14p12h14---
+|-12-15-------------15------------------------------------------
+|---------------------------------------------------------------
+                                                                              
+
+-------------------------------|
+-------------------------------|
+-------------------------------|
+-------12-14-12----------------|
+-12-15-----------14--11-----14-|
+-------------------------12----|                                                     
+         
+
+
+|-------------------------------------------------------------------|
+|----------------------------------------------------------------12-|
+|--------------------------------------------12--------------14-----|
+|---------------------------12-----12-14--------15-14-----14--------|
+|-11-12-14--12-14-15--14-15-----15----------------------------------|
+|-------------------------------------------------------------------|
+
+ 
+
+|------------------------------------------------------------|
+|-13-----------------------13-12-----------------------------|
+|------------------------------------------------------------|
+|------------14-15-----------------------12-14-14------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+                                                                              
+
+
+|---------------------------------------------------------------------------|
+|---------------------------------------------------------------------------|
+|-14------------------------------14-13h14p13-------------------------------|
+|---------------12----------12-15--------------15-12h14--12-----12-14-12-14-|
+|------------15----------14----------------------------------15-------------|
+|---------------------------------------------------------------------------|
+                                                                              
+
+faster part
+|-------------12--13--12--13--15--13--12--13--12--13--12--13------12------12-
+|-12--13--15--------------------------------------------------15------15-----
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+---------------------------------------------------------------------------
+-13--15--13p12--13--12--13--15--13--12--13--13p12--------------------------
+---------------------------------------------------14--12------------------
+-----------------------------------------------------------12--------------
+---------------------------------------------------------------15--12--15--
+---------------------------------------------------------------------------
+                                                                              
+
+
+-------------------------------------------|
+-------------------------------------------|
+--------12--12--12h14--14--12h14p12--------|
+-12h14-------------------------------------|
+-------------------------------------------|
+-------------------------------------------|
+                                                                              
+
+
+|-15^--15---15------13---12-----13---12-------13--12----------12-------------
+|-----------------------------------------15----------15--13------15--13--12-
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+
+                                                                              
+
+--------------------------------------------------------12----------|
+-15--13--12--15--13--12--13p12--------------12--13--15--------------|
+--------------------------------14--13--14--------------------------|
+--------------------------------------------------------------------|
+--------------------------------------------------------------------|
+--------------------------------------------------------------------|
+
+                                                                              
+
+|-12--17--12--17--12--17--12--19--12--19--12--19--12--20------
+|-------------------------------------------------------------
+|-------------------------------------------------------------
+|-if you cant stretch your fingers far enough-----------------
+|-play the 12th fret E note on the B string-------------------
+|-------------------------------------------------------------
+
+                                                                              
+
+-20^---20^--20^--20^--20^-r--17------17h20p17------17-----------------------
+---------------------------------20------------20------20--17---------------
+---------------------------------------------------------------19^---19--17-
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+                                                                              
+
+
+-----------------17----------------------------------------------------
+-------------17------20--17--------------------------------------------
+-----17--19^-----------------19^-19--17------17--19--19--17---17-17----
+-19--------------------------------------19----------------------------
+-----------------------------------------------------------------------
+-----------------------------------------------------------------------
+ 
+                                                                             
+
+----------------------------------------|
+----------------------------------------|
+----------------------------------------|
+-19--17-------------------------17------|
+---------17--------------17h19----------|
+-------------20--17--20-----------------|
+                                                                              
+
+
+|-15^--15--15-----13--12------13---12--12----------------12--13--12----------
+|--------------------------------------------15--13--15--------------15--13--
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+-12-------------------------------------------------------------------------
+-----15--13--12--15--13--12--13--12--13--12--13--12--13---13---12--13--15---
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+                                                                              
+
+
+---------12--------12--13----12--13--12--
+-13--15--------15------------------------
+-----------------------------------------
+-----------------------------------------
+-----------------------------------------
+-----------------------------------------
+
+ 
+
+|-------------------------------------------------------------------|
+|-13--13--13----------------------13-12-----------------------------|
+|-------------------------------------------------------------------|
+|-----------------14-15-----------------------12-14-----------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+                                                                              
+
+
+|-----------------------------------------------------------------------
+|-----------------------------------------------------------------------
+|-14------------------------------14-13---------------------------------
+|---------------12----------12-15--------15-14--12-----12-14-----12-14--
+|------------15----------14-------------------------15--------15--------
+|-----------------------------------------------------------------------
+                                                                              
+
+
+-----------------------------|
+-----------------------------|
+-----------------------------|
+----12-14-----12-14----12----|  
+-15--------15-------15-------| 
+-----------------------------|                                             
+
+ 
+
+|-----------------------------------------------------------------------
+|-----------------------------------------------------------------------
+|-------------------12--------------------------------------------------
+|-14--------12--14------15--14--12------12--14-------12--14--14--15--15-
+|-------15--------------------------15-----------15---------------------
+|-----------------------------------------------------------------------
+                                                                              
+
+
+---------------------------------12--15--13--12--13--12--13------12---------
+-----------------12--12--13--15------------------------------15------15--13-
+-12--12--14--14-------------------------------------------------------------
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+----------------------------------------------------------------------------
+                                                                              
+
+
+-------------12------|
+-12--13--15----------|
+---------------------|
+---------------------|
+---------------------|
+---------------------|
+                                                                              
+
+
+|-12--17--17---17---19---20--19h20-------20^--20^---20^---20^----20^----20^--
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+-20^----20^--20^-r---20--17---------------------------------------------
+-----------------------------20--17-----------------------------17--17--
+-------------------------------------19^---19--17------17--19^----------
+---------------------------------------------------19-------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                              
+
+
+--------------------------------------------------------|
+----17-17-17----17-17-17----17-17-17----17-17-17b*------|
+-19^---------19^---------19^---------19^----------------|
+--------------------------------------------------------|
+--------------------------------------------------------|
+--------------------------------------------------------|
+* bend three semitones (to 20)                                                                              
+
+
+|-------------------------15--13--12--13--13p12------12--------------12------
+|-15--13--15--13--15--13-------------------------15------15--13--15------15--
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+--------------------|
+-13--12h13p12-------|
+--------------------|
+--------------------|
+--------------------|
+--------------------|
+                                                                              
+
+
+|------------------------------------------------------------------------|
+|--15--13--12--13--12----------------------------------------------------|
+|----------------------14--12------------------------12--12--12-12--12---|
+|------------------------------12--------------12h14---------------------|
+|----------------------------------15--12--15----------------------------|
+|------------------------------------------------------------------------|
+                                                                              
+
+
+|-15h17--15--15-----------------13--12--12---------------------12----------
+|-----------------18--17---------------------15--15----13--15------15--13--
+|--------------------------------------------------------------------------
+|--------------------------------------------------------------------------
+|--------------------------------------------------------------------------
+|--------------------------------------------------------------------------
+                                                                              
+
+
+-----12--15--13--12--------------12-------------------------------------------
+-15------------------15--13--15------15--13--12--13--12--13----12---12--------
+-------------------------------------------------------------------------14---
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------15-------12--12--12--12-
+---------------12--13----------13h15-------15-----15------15------------------
+--14-------14-----------------------------------------------------------------
+-------14---------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+|-17--12------12--------------------------------
+|---------15------15----20--15------15----------
+|-------------------------------17------17------
+|-----------------------------------------------
+|-----------------------------------------------
+|-----------------------------------------------faded out
+                                                                              
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/europa.prj b/guitar/tabs/Santana/europa.prj new file mode 100644 index 0000000..d85ca5a --- /dev/null +++ b/guitar/tabs/Santana/europa.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=europa.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)(29,8)(30,8)(31,8)(32,8)(33,8)(34,8)(35,8)(36,8)(37,8)(38,8)(39,8)(40,8)(41,8)(42,8)(43,8)(44,8)(45,8)(46,8)(47,8)(48,8)(49,8)(50,8)(51,8)(52,8)(53,8)(54,8)(55,8)(56,8)(57,8)(58,8)(59,8)(60,8)(61,8)(62,8)(63,8)(64,8)(65,8)(66,8)(67,8)(68,8)(69,8)(70,8)(71,8)(72,8)(73,8)(74,8)(75,8)(76,8)(77,8)(78,8)(79,8)(80,8)(81,8)(82,8)(83,8)(84,8)(85,8)(86,8)(87,8)(88,8)(89,8)(90,8)(91,8)(92,8)(93,8)(94,8)(95,8)(96,8)(97,8)(98,8)(99,8)(100,8)(101,8)(102,8)(103,8)(104,8)(105,8)(106,8)(107,8)(108,8)(109,8)(110,8)(111,8)(112,8)(113,8)(114,8)(115,8)(116,8)(117,8)(118,8)(119,8)(120,8)(121,8)(122,8)(123,8)(124,8)(125,8)(126,8)(127,8)(128,8)(129,8)(130,8)(131,8)(132,8)(133,8)(134,8)(135,8)(136,8)(137,8)(138,8)(139,8)(140,8)(141,8)(142,8)(143,8)(144,8)(145,8)(146,8)(147,8)(148,8)(149,8)(150,8)(151,8)(152,8)(153,8)(154,8)(155,8)(156,8)(157,8)(158,8)(159,8)(160,8)(161,8)(162,8)(163,8)(164,8)(165,8)(166,8)(167,8)(168,8)(169,8)(170,8)(171,8)(172,8)(173,8)(174,8)(175,8)(176,8)(177,8)(178,8)(179,8)(180,8)(181,8)(182,8)(183,8)(184,8)(185,8)(186,8)(187,8)(188,8)(189,8)(190,8)(191,8)(192,8)(193,8)(194,8)(195,8)(196,8)(197,8)(198,8)(199,8)(200,8)(201,8)(202,8)(203,8)(204,8)(205,8)(206,8)(207,8)(208,8)(209,8)(210,8)(211,8)(212,8)(213,8)(214,8)(215,8)(216,8)(217,8)(218,8)(219,8)(220,8)(221,8)(222,8)(223,8)(224,8)(225,8)(226,8)(227,8)(228,8)(229,8)(230,8)(231,8)(232,8)(233,8)(234,8)(235,8)(236,8)(237,8)(238,8)(239,8)(240,8)(241,8)(242,8)(243,8)(244,8)(245,8)(246,8)(247,8)(248,8)(249,8)(250,8)(251,8)(252,8)(253,8)(254,8)(255,8)(256,8)(257,8)(258,8)(259,8)(260,8)(261,8)(262,8)(263,8)(264,8)(265,8)(266,8)(267,8)(268,8)(269,8)(270,8)(271,8)(272,8)(273,8)(274,8)(275,8)(276,8)(277,8)(278,8)(279,8)(280,8)(281,8)(282,8)(283,8)(284,8)(285,8)(286,8)(287,8)(288,8)(289,8)(290,8)(291,8)(292,8)(293,8)(294,8)(295,8)(296,8)(297,8)(298,8)(299,8)(300,8)(301,8)(302,8)(303,8)(304,8)(305,8)(306,8)(307,8)(308,8)(309,8)(310,8)(311,8)(312,8)(313,8)(314,8)(315,8)(316,8)(317,8)(318,8)(319,8)(320,8)(321,8)(322,8)(323,8)(324,8)(325,8)(326,8)(327,8)(328,8)(329,8)(330,8)(331,8)(332,8)(333,8)(334,8)(335,8)(336,8)(337,8)(338,8)(339,8)(340,8)(341,8)(342,8)(343,8)(344,8)(345,8)(346,8)(347,8)(348,8)(349,8)(350,8)(351,8)(352,8)(353,8)(354,8)(355,8)(356,8)(357,8)(358,8)(359,8)(360,8)(361,8)(362,8)(363,8)(364,8)(365,8)(366,8)(367,8)(368,8)(369,8)(370,8)(371,8)(372,8)(373,8)(374,8)(375,8)(376,8)(377,8)(378,8)(379,8)(380,8)(381,8)(382,8)(383,8)(384,8)(385,8)(386,8)(387,8)(388,8)(389,8)(390,8)(391,8)(392,8)(393,8)(394,8)(395,8)(396,8)(397,8)(398,8)(399,8)(400,8)(401,8)(402,8)(403,8)(404,8)(405,8)(406,8)(407,8)(408,8)(409,8)(410,8)(411,8)(412,8)(413,8)(414,8)(415,8)(416,8)(417,8)(418,8)(419,8)(420,8)(421,8)(422,8)(423,8)(424,8)(425,8)(426,8)(427,8)(428,8)(429,8)(430,8)(431,8)(432,8)(433,8)(434,8)(435,8)(436,8)(437,8)(438,8)(439,8)(440,8)(441,8)(442,8)(443,8)(444,8)(445,8)(446,8)(447,8)(448,8)(449,8)(450,8)(451,8)(452,8)(453,8)(454,8)(455,8)(456,8)(457,8)(458,8)(459,8)(460,8)(461,8)(462,8)(463,8)(464,8)(465,8)(466,8)(467,8)(468,8)(469,8)(470,8)(471,8)(472,8)(473,8)(474,8)(475,8)(476,8)(477,8)(478,8)(479,8)(480,8)(481,8)(482,8)(483,8)(484,8)(485,8)(486,8)(487,8)(488,8)(489,8)(490,8)(491,8)(492,8)(493,8)(494,8)(495,8)(496,8)(497,8)(498,8)(499,8)(500,8)(501,8)(502,8)(503,8)(504,8)(505,8)(506,8)(507,8)(508,8)(509,8)(510,8)(511,8)(512,8)(513,8)(514,8)(515,8)(516,8)(517,8)(518,8)(519,8)(520,8)(521,8)(522,8)(523,8)(524,8)(525,8)(526,8)(527,8)(528,8)(529,8)(530,8)(531,8)(532,8)(533,8)(534,8)(535,8)(536,8)(537,8)(538,8)(539,8)(540,8)(541,8)(542,8)(543,8)(544,8)(545,8)(546,8)(547,8)(548,8)(549,8)(550,8)(551,8)(552,8)(553,8)(554,8)(555,8)(556,8)(557,8)(558,8)(559,8)(560,8)(561,8)(562,8)(563,8)(564,8)(565,8)(566,8)(567,8)(568,8)(569,8)(570,8)(571,8)(572,8)(573,8)(574,8)(575,8)(576,8)(577,8)(578,8)(579,8)(580,8)(581,8)(582,8)(583,8)(584,8)(585,8)(586,8)(587,8)(588,8)(589,8)(590,8)(591,8)(592,8)(593,8)(594,8)(595,8)(596,8)(597,8)(598,8)(599,8)(600,8)(601,8)(602,8)(603,8)(604,8)(605,8)(606,8)(607,8)(608,8)(609,8)(610,8)(611,8)(612,8)(613,8)(614,8)(615,8)(616,8)(617,8)(618,8)(619,8)(620,8)(621,8)(622,8)(623,8)(624,8)(625,8)(626,8)(627,8)(628,8)(629,8)(630,8)(631,8)(632,8)(633,8)(634,8)(635,8)(636,8)(637,8)(638,8)(639,8)(640,8)(641,8)(642,8)(643,8)(644,8)(645,8)(646,8)(647,8)(648,8)(649,8)(650,8)(651,8)(652,8)(653,8)(654,8)(655,8)(656,8)(657,8)(658,8)(659,8)(660,8)(661,8)(662,8)(663,8)(664,8)(665,8)(666,8)(667,8)(668,8)(669,8)(670,8)(671,8)(672,8)(673,8)(674,8)(675,8)(676,8)(677,8)(678,8)(679,8)(680,8)(681,8)(682,8)(683,8)(684,8)(685,8)(686,8)(687,8)(688,8)(689,8)(690,8)(691,8)(692,8)(693,8)(694,8)(695,8)(696,8)(697,8)(698,8)(699,8)(700,8)(701,8)(702,8)(703,8)(704,8)(705,8)(706,8)(707,8)(708,8)(709,8)(710,8)(711,8)(712,8)(713,8)(714,8)(715,8)(716,8)(717,8)(718,8)(719,8)(720,8)(721,8)(722,8)(723,8)(724,8)(725,8) +TEMPO=651578 diff --git a/guitar/tabs/Santana/europa.tab b/guitar/tabs/Santana/europa.tab new file mode 100644 index 0000000..e012812 --- /dev/null +++ b/guitar/tabs/Santana/europa.tab @@ -0,0 +1,306 @@ +#----------------------------------PLEASE NOTE--------------------------------# +#This file is the author's own work and represents their interpretation of the# +#song. You may only use this file for private study, scholarship, or research.# +#-----------------------------------------------------------------------------# +#-- File created with Instab - http://www.pconline.com/~smcarey/instab.html --# +#-----------------------------------------------------------------------------# + +Author/Artist: Santana +Title: Europe +Album: amigos +Transcribed by: Lucas +Email: asc@dma.be + +music by carlos santana and +Tom Coster + +----8-10-10*11-10--8----|---------------|------8-8*10-8---------|---------- +-8--------------------11|--*9hv---------|-9-11-----------11-----|---------- +------------------------|---------------|--------------------10*|-12------- +------------------------|---------------|-----------------------|---------- +------------------------|---------------|-----------------------|---------- +------------------------|---------------|-----------------------|---------- + Bb7sus4 bb7 Ebmaj7 + +----------------------------|----------------|----------------------|------ +-----8--9-11*13-11----9-8---|---------9------|----8--9-9*11-9-8-----|------ +--------------------------8*|-10--------8v-10|-10---------------10-8|-8---- +----------------------------|----------------|----------------------|------ +----------------------------|----------------|----------------------|------ +----------------------------|----------------|----------------------|------ + Abmaj7 G7 Cm + +--------------------------|------------------------------------------------ +--------------------------|------------------------------------------------ +-10*8--------v------------|------------------------------------------------ +------10*8----------------|------------------------------------------------ +----------10*8*6*0*10-6---|------------------------------------------------ +-------------------------6|------------------------------------------------ + Cm + +-8----8--10-10*11-10---8---|--------|------8-8*10-8-------------|---------- +-8--8--------------------11|-8*9v---|-9-11------------11-v------|---------- +-8-------------------------|--------|----------------------10*12|---------- +---------------------------|--------|---------------------------|---------- +---------------------------|--------|---------------------------|---------- +---------------------------|--------|---------------------------|---------- + B7sus4 Bb7 Ebmaj7 + +------------------------------|---------------|--------------------------|- +-8--9--11-11*13--11--9--8-----|---------------|-------8-9-9*11--9-8*9*8--|- +--------------------------8*10|--10---8*10---v|-10-10--------------------|- +------------------------------|---------------|--------------------------|- +------------------------------|---------------|--------------------------|- +------------------------------|---------------|--------------------------|- + abmaj7 Bb7 Ebmaj7 + +--------|------------13b|-13b---13---10--11--13*-16---------|-10-13-13*11-- +--------|---------13----|---------------------------------11|-------------- +-10*12--|-----13--------|------------------------------12---|-------------- +--------|-12------------|-----------------------------------|-------------- +--------|---------------|-----------------------------------|-------------- +--------|---------------|-----------------------------------|-------------- + Fm7 bb7 + +-13------1311-13*11|------------------------------------------------------- +-------------------|------------------------------------------------------- +-------------------|------------------------------------------------------- +-------------------|------------------------------------------------------- +-------------------|------------------------------------------------------- +-------------------|------------------------------------------------------- + Ebmaj7 + +-11*13---13b--13b---11----|--13-11-10*11-10-----------|--11b--11*8--------- +------------------------13|------------------12*10-8-7|------------11--8--- +--------------------------|---------------------------|------------------1- +--------------------------|---------------------------|-------------------- +--------------------------|---------------------------|-------------------- +--------------------------|---------------------------|-------------------- + Abmaj7 G7sus4 G7 + +---------|---------------------------|--8-------------|-------------------- +---------|-8-------------------------|--8-------------|------8----------8-- +-10--8---|---8-----------------------|--8--------7---8|-0*10-------0*10---- +-------10|-----10------8-------------|------10--------|-----------8-------- +---------|----------------10*8-6-----|----------------|-------------------- +---------|-----------------------8--6|----------------|-------------------- + Cm Bb7 + +---------------|------------------------|--------------8------8------------ +---------------|--7*8--11----7*8--11----|-8-11-11-8*11----11b----11-------- +---10----8-10-8|------------------------|----------------------------10-8-- +-8-------------|-----------8-----------8|---------------------------------- +---------------|------------------------|---------------------------------- +---------------|------------------------|---------------------------------- + Ebmaj7 Abmaj7 + +---|------------------------|--------8--------------------------|---------- +---|--------8---------8-----|------8---11*8----------------8----|---------- +---|--8*10---------10-------|--10/-----------10/---8----10----8v|---------- +-10|------------10--------10|------------------------10---------|---------- +---|------------------------|-----------------------------------|---------- +---|------------------------|-----------------------------------|---------- + G7sus4 G7 + +--------------------------|---------------------|------------------------|- +--------------------------|---------------------|------8-----------8-----|- +-8---10*8-----------------|-----------7---8-----|0*10---------0*10-------|- +----------10-8------------|------10-----------10|-----------8-----------8|- +---------------10-8-6-10-6|---------------------|------------------------|- +--------------------------|--8------------------|------------------------|- + Cm B7sus4 + +-------------------------------|------------------------------|------------ +--------8----------------------|--7/8--11-------7/8---11------|8-11-11-8--- +-0*10-------------10---0*10--8-|------------------------------|------------ +--------------8----------------|-------------8---------------8|------------ +-------------------------------|------------------------------|------------ +-------------------------------|------------------------------|------------ + Bb7 Ebmaj7 + +-----8-----------|-------8-----------------------------|-----------8------- +-11-----11-8-----|----8----11-8------------------------|---------8----11-8- +--------------10/|-10-----------10/---8-----8------8---|-10/--10----------- +-----------------|----------------------10----8*10---10|------------------- +-----------------|-------------------------------------|------------------- +-----------------|-------------------------------------|------------------- + Abmaj7 G7sus4 + +-----------------|-------|----------------------------|-------------------- +-----------------|-------|----------------------------|------------13------ +-10--8----8-10*12|-------|--------12-12-14-12--12*14--|-12----12----------- +-------10--------|-------|0-12*14---------------------|-------------------- +-----------------|-10*12-|----------------------------|-------------------- +-----------------|-------|----------------------------|-------------------- + G7 Cmaj7 G7sus4 + +-13/--13/|-13-11-13--11--13/|---13--11-13-11*13--13/---13-|10--11----|----- +---------|------------------|-----------------------------|----------|----- +---------|------------------|-----------------------------|----------|----- +---------|------------------|-----------------------------|----------|----- +---------|------------------|-----------------------------|----------|----- +---------|------------------|-----------------------------|----------|----- + Bb7 Ebmaj7 Abmaj7 + +-1310*1311-13-11-10-11-10-|--11/--11---8------------------|--------------|- +--------------------------|---------------11-8------------|-8------------|- +--------------------------|---------------------10/---8---|---8----------|- +--------------------------|-----------------------------10|-----10------8|- +--------------------------|-------------------------------|--------------|- +--------------------------|-------------------------------|--------------|- + G7sus4 G7 Cm7 + +-----------------------|-----------------------------------------|--------- +----8-8-------8--11--9v|-9---8-11-9---8--------------------------|--------- +-----------------------|----------------10*12*10-8-----10*8------|--------- +-10--------------------|---------------------------10--------10*8|--------- +-----------------------|-----------------------------------------|--------- +-----------------------|-----------------------------------------|--------- + Fm7 Cm7 Fm7 + +------------------------------11|----8-11-10*11*10-8|-11*10*11*10*8-11-10/- +-----8-8--------8*11*13-13-13---|--8----------------|---------------------- +--------------------------------|-------------------|---------------------- +--10----------------------------|-------------------|---------------------- +--------------------------------|-------------------|---------------------- +--------------------------------|-------------------|---------------------- + Cm7 Fm7 Fm7 + +-10*8-11-10*8-11-10-8-11*10*8-11/|-11--11*10*8*11*10*8----------------11-13 +---------------------------------|---------------------9*8---------13------ +---------------------------------|-------------------------10*8------------ +---------------------------------|------------------------------10--------- +---------------------------------|----------------------------------------- +---------------------------------|----------------------------------------- + Cm7 Fm7 + +|-13/---13----13---13v---13/---13---13--13--13-11--11-11-11-11-11-11|------ +|-------------------------------------------------------------------|------ +|-------------------------------------------------------------------|------ +|-------------------------------------------------------------------|------ +|-------------------------------------------------------------------|------ +|-------------------------------------------------------------------|------ + Cm7 Fm7 Cm7 + +-11-8-8------8------------------|------------------------------------------ +--------11/----11-8-------------|------8----------------------------------- +--------------------10-10-8----8|-8-10---8----------------------------7--8- +----------------------------10--|-----------10-8-------------8-10--10------ +--------------------------------|----------------10*8*6*8/10--------------- +--------------------------------|------------------------------------------ + Fm7 Cm7 + +---|--------------------------|-----------------------------|-------------- +---|-8----8-------11-9-8--9-8v|--8--9-8--------8------------|-------------- +-10|---10----10---------------|---------10-8-10-------7-8-10|-------------- +---|--------------------------|--------------------10-------|-------------- +---|--------------------------|-----------------------------|-------------- +---|--------------------------|-----------------------------|-------------- + Cm7 Cm7 + +-------------------------------|----------------------------------|-------- +--8------8------11--9---8---9*8|-8--9*8-----------8---------------|-8------ +------10----10-----------------|---------10-8-10------------7*8-10|-----10- +-------------------------------|------------------------10--------|-------- +-------------------------------|---------------------10-----------|-------- +-------------------------------|----------------------------------|-------- + fm7 Cm7 + +-------------------------|------------------------------|------------------ +--8-------11---9---8--9*8|--8--8---------8--------------|8------8------11-- +-----10------------------|-------10-8-10----------7-8-10|----10----10------ +-------------------------|---------------------10-------|------------------ +-------------------------|------------------------------|------------------ +-------------------------|------------------------------|------------------ + Fm7 Cm7 + +-----------------|-------------------|-----11-11v------11----11-13|-------- +-9----8*9--------|---------8-11-13-13|-13-----------------10------|--13---- +-----------10*12-|-12----------------|----------------------------|-------- +-----------------|-------------------|----------------------------|-------- +-----------------|-------------------|----------------------------|-------- +-----------------|-------------------|----------------------------|-------- + Fm7 Cm7 Fm9/Bb + +-11v-11---11----11--13/|-13---13/---13/---13/-13|-10--11-11-11-11--13/-13-- +-------------13--------|------------------------|-------------------------- +-----------------------|------------------------|-------------------------- +-----------------------|------------------------|-------------------------- +-----------------------|------------------------|-------------------------- +-----------------------|------------------------|-------------------------- + Cm7 Fm9Bb + +-11-13-11/|-15-18-18-15-18/-18/-18--15|----15-15-18*15-----15-15-18*15----- +----------|---------------------------|-18-------------18/-------------18/- +----------|---------------------------|------------------------------------ +----------|---------------------------|------------------------------------ +----------|---------------------------|------------------------------------ +----------|---------------------------|------------------------------------ + Fm9Bb + +-15-15-18*15-----15-15-18*15-------15-18/15---15-18|--18-18/--18/--18--15-- +-------------18/-------------18/-----------18------|----------------------- +---------------------------------------------------|----------------------- +---------------------------------------------------|----------------------- +---------------------------------------------------|----------------------- +---------------------------------------------------|----------------------- + Cm7 Fm9Bb + +----18-18-18|----18-18----18-18-----18-18----18/-18-18-18-18-18|----18----- +-18---------|-18-------18--------18-------18-------------------|-18-----18- +------------|--------------------------------------------------|----------- +------------|--------------------------------------------------|----------- +------------|--------------------------------------------------|----------- +------------|--------------------------------------------------|----------- + Cm7 + +--18------18-----18|---11/--11-8------------------------------------------- +------18------18---|-------------11--8------------------------------------- +-------------------|-------------------10--8-----10--8------------------10- +-------------------|--------------------------10-------10-8---------------- +-------------------|----------------------------------------10-8-6--------- +-------------------|------------------------------------------------8------ + Fm9Bb + +-8---------|--------------------------------------------------------|------ +-----------|-----8--11*8-----8-----8--11*8----8-11------11-8--------|------ +-----10*8--|-10----------10----10/---------10----------------10-8---|------ +-----------|-------------------------------------------------------9|------ +-----------|--------------------------------------------------------|------ +-----------|--------------------------------------------------------|------ + Cm7 + +-11-8------------------------------------|--------------------------------- +------11-8-------------------------------|--------------------------------- +-----------10/--8-8----------------------|----------------------8--10/-10*- +--------------------10-8----------------8|-8-8-8-8-8-8-8-8-8-10------------ +-------------------------10-8---------8--|--------------------------------- +------------------------------11-8-11----|--------------------------------- + Fm9Bb Cm7 + +-----|-----------------------------18--18-|-20---20---20---20---20-|-20-20- +-----|----16---16-16--18*20-20--20--------|------------------------|------- +-8---|-17---------------------------------|------------------------|------- +---10|------------------------------------|------------------------|------- +-----|------------------------------------|------------------------|------- +-----|------------------------------------|------------------------|------- + Fm9Bb Cm7 + +---20--20--20--20--20-20----11/|-11-11/----11---11*8----------------------- +-------------------------------|---------------------11*8------------------ +-------------------------------|--------------------------10/--8-----10-8-- +-------------------------------|---------------------------------10-------- +-------------------------------|------------------------------------------- +-------------------------------|------------------------------------------- + Cm7 Fm9Bb + +--------------|------------------------------------------------------------ +--------------|------------------------------------------------------------ +--------7-8-10|------------------------------------------------------------ +-10-10--------|------------------------------------------------------------ +--------------|------------------------------------------------------------ +--------------|------------------------------------------------------------ + Cm7 + + + diff --git a/guitar/tabs/Santana/evil_ways.tab b/guitar/tabs/Santana/evil_ways.tab new file mode 100644 index 0000000..d79eac0 --- /dev/null +++ b/guitar/tabs/Santana/evil_ways.tab @@ -0,0 +1,275 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / evil_ways.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 30 Aug 2000 15:26:49 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/evil_ways.tab
+
+Artist: Santana
+Song: Evil Ways
+Album: Best of Santana
+Transcribed by jordanlockert@yahoo.com
+
+I was surprised to find that no one had already figured this 
+song out yet.  This is from the Best of Santana and I don't know 
+if there is another version of this song. I say this because
+I saw a Chord file that said the chords are Am, D, E, whereas
+on my CD they are Gm, C, D (2 frets down)
+
+Tablature explanation:
+h - hammer on
+p - pull off
+^ - bend
+
+
+Intro riff - also used later in song:
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|-8--10^--10^--10p8-----8---------|
+|-------------------10-----10-----|
+|---------------------------------|
+                                                                              
+
+
+|---------------|
+|---------------|
+|---------3-----|
+|------3--------|
+|-3h5-----------|
+|-------(2:28)--|
+                                                                              
+
+
+|---------------------------------------|
+| (2:51)--------------------------------|
+|---------------------------------------|
+|---------------------------------------|
+|-5--5---3--3---1--1--1-1--1-1--1-------|
+|---------------------------------3-1---|
+
+
+
+Solo
+|-3h6-------6--6-6--6--6-----6--6p5p3--5----3----------|
+|-----------------------------------------6----5h6p3---|
+|------------------------------------------------------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+|-(3:00)-----------------------------------------------|
+                                                                              
+
+
+|--------------------------------------------------------|
+|-----10--11---13--13---11--13--13----11--13--13------11-|
+|-12----------------------------------------------12-----|
+|--------------------------------------------------------|
+|--------------------------------------------------------|
+|-(3:05)-------------------------------------------------|
+                                                                              
+
+
+|----------------------------------
+|--13h15----13h15---15--11---------
+|---------------------------12-----
+|----------------------------------
+|----------------------------------
+|-(3:09)---------------------------
+                                                                              
+
+
+-----------12h13---13--13--13---12--12------------------------------------|
+-13h15-----------------------------------15--15---13--13------------------|
+-----------------------------------------------------------15--15---12----|
+--------------------------------------------------------------------------|
+--------------------------------------------------------------------------|
+--------------------------------------------------------------------------|
+                                                                              
+
+
+|-3--5--6--3--5-----3---------------------3-----------------------------|
+|----------------6-----5--6--3---------3-----6--3-----------------------|
+|-----------------------------------5^-------------5^r--3--5p3----------|
+|--------------------------------------------------------------5--------|
+|-----------------------------------------------------------------------|
+|-(3:14)----------------------------------------------------------------|
+                                                                              
+
+
+|-3h6-5-----3--6--5-----3--6--5-----3--6--5----3--5h6p5--3------|
+|--------6-----------6-----------6-----------6------------------|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+|-(3:18)--------------------------------------------------------|
+                                                                              
+
+
+|------------------------------------------------------------|
+|-11h13-----13--11--13--11--13--11--13--11--13--11--13--11---|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|-(3:23)-----------------------------------------------------|
+
+                                                                              
+
+|-------15----------15----|
+|-/15-------15h17---------|
+|-------------------------|
+|-------------------------|
+|-------------------------|
+|-(3:26)------------------|
+
+                                                                              
+
+|-18--17--15--17------15h18p15------|
+|-----------------18----------15----|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-(3:28)----------------------------|
+                                                                              
+
+
+|-18-p-17-p-15----18-p-17-p-15----18-p-17-p-15----18-p-17-p-15----
+|-----------------------------------------------------------------
+|-----------------------------------------------------------------
+|-----------------------------------------------------------------
+|-----------------------------------------------------------------
+|-(3:30)----------------------------------------------------------
+
+                                                                              
+
+-18-17-15--18-17-15--18-17-15--18-17-15--18-17-15--18-17-15--18-17-15---|
+---p--p------p--p------p--p------p--p------p--p------p--p------p--p-----|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+
+                                                                              
+
+|--18^-------18-^r-------20^-------20^------18-20-----18-----------------|
+|--------------------------------------------------20-----18-20----------|
+|----------------------------------------------------------------17-19---|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|-(3:34)-----------------------------------------------------------------|
+                                                                              
+
+
+|---------15-15----------15------15---------------15--------------15------------|
+|-----15---------15--18^-----18^--------------15------18--15--18^---------------|
+|-17^-------------------------------------17^-------------------------17^r -15 -|
+|-------------------------------------------------------------------------------|
+|-------------------------------------------------------------------------------|
+|-(3:40)------------------------------------------------------------------------|
+                                                                              
+
+
+|-----15------15------15-15--15----------------------------------------------|
+|-18^-----18^-----18^--------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|-------------------------------keep playing on these notes and fade out-----|
+|-(3:43)---------------------------------------------------------------------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/game_of_love.tab b/guitar/tabs/Santana/game_of_love.tab new file mode 100644 index 0000000..36123b4 --- /dev/null +++ b/guitar/tabs/Santana/game_of_love.tab @@ -0,0 +1,164 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / game_of_love.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 29 Oct 2002 22:24:47 -0500
+From: Alejandro Areiza <areiza22@hotmail.com>
+Subject: s/santana/game_of_love.tab
+
+Santana (featuring Michelle Branch)
+Game of Love
+Shaman
+Transcribed by AreizA: areiza22@hotmail.com
+This is the intro for this song
+-is all my own work-
+
+h=  hammer on
+^=  bend (full)
+^r= released bend
+p=  pull off
+/=  shift slide
+1. cd version
+ 
+|---------------------10-10-10-10-10-10h12---------------------
+|----------10---10-12-----------------------10h12-10h12-10h12--
+|---9/11-------------------------------------------------------
+|--------------------------------------------------------------
+|--------------------------------------------------------------
+|--------------------------------------------------------------
+ 
+|-------------------------------
+|-----------------10-12----10---
+|-----11--9/11----------11------
+|--12---------------------------
+|-------------------------------
+|-------------------------------
+
+|-------10-10-10-10-10-12-12^-12^-12^rp10-12p10-10h12---
+|-10/12-------------------------------------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+ 
+2 VMALA's live performance version
+
+|--------------------------10-10-10-10-10-10h12---------------------
+|--------10----10----10-12-----------------------10h12-10h12-10h12--
+|---9/11----11------------------------------------------------------
+|-------------------------------------------------------------------
+|-------------------------------------------------------------------
+|-------------------------------------------------------------------
+ 
+|-------------------------------
+|----------------12-10----10----
+|------9/11-9/11-------11-------
+|-9-12--------------------------
+|-------------------------------
+|-------------------------------
+
+|-------10-10-10-10-10-12-12^-12^-12^rp10-12p10---------
+|-10h12-------------------------------------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+|-------------------------------------------------------
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/gypsy_queen.tab b/guitar/tabs/Santana/gypsy_queen.tab new file mode 100644 index 0000000..a16961d --- /dev/null +++ b/guitar/tabs/Santana/gypsy_queen.tab @@ -0,0 +1,322 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / gypsy_queen.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 17 Oct 2000 16:43:50 -0400
+From: fabian.piller@gmx.net
+Subject: s/santana/gypsy_queen.tab
+
+Santana
+
+                             Gypsy Queen
+
+
+
+>From the album "Abraxas"   1970
+
+Written by Peter Green and Gabor Szabo
+
+Arranged by Santana
+
+
+Tabbed and transcribed by Fabian Piller
+
+E-mail: fabian.piller@gmx.net
+
+
+
+OK, here is the great "second part" of Santana's "Black Magic Woman". This
+
+is my first Tab ever but I think it's pretty accurate.
+
+
+"Black Magic Woman" ends on a D (from the repeated intro) which goes into 
+
+feedback. Then "Gypsy Queen" starts.  
+
+
+Legend:
+
+
+h="hammer-on"
+
+p="pull-off"
+
+/=slide up
+
+\=slide down
+
+P.M.=palm mute
+
+b=bend
+
+r=release bend
+
+
+Electric Guitar w/ distortion
+
+
+
+E :----------------|--------2-------|2-h3-p2----2--------|
+
+B :----------------|--------3-------|--------3--3--------|
+
+G :----------------|--------2-------|-----------2--------|
+
+D :0---0---0---0---|0---0---0-------|-----------0--------|
+
+A :--0---0---0---0-|--0---0---------|--------------------|
+
+E :----------------|----------------|--------------------|
+
+
+
+
+E :2-h3-p2-----2-------|0--2-3/-5--------|2-h3-p2----2--------|
+
+B :--------3---3-------|-----------------|--------3--3--------|
+
+G :----------2-2-------|-----------------|-----------2--------|
+
+D :------------0-------|-----------------|-----------0--------|
+
+A :--------------------|-----------------|--------------------|
+
+E :--------------------|-----------------|--------------------|
+
+
+
+
+E :--------------------|------------2-----2-/10-|
+
+B :------1-1-1-1-------|------------3-----------|
+
+G :--2-----------0-h2--|0-0---------2-----------|
+
+D :0---0---------------|----4-4-2-0-0-----------|
+
+A :--------------------|------------------------|
+
+E :--------------------|------------------------|
+
+
+
+
+E :10-8-10--8-b10-r8--------|10-8-10-----------------|
+
+B :------------------10-----|---------8-b10-r8-------|
+
+G :-------------------------|------------------7-----|
+
+D :-------------------------|------------------------|
+
+A :-------------------------|------------------------|
+
+E :-------------------------|------------------------|
+
+
+
+
+E :10-8-10--8-b10-r8--------|10-8-10------------------|
+
+B :------------------10-----|--------8-b10-r8---------|
+
+G :-------------------------|-----------------7-\5----|
+
+D :-------------------------|-------------------------|
+
+A :-------------------------|-------------------------|
+
+E :-------------------------|-------------------------|
+
+
+                              bend slowly and hold
+
+
+E :-------------------|15-b17--------------|15-b17--------------|
+
+B :-------------------|--------------------|--------------------|
+
+G :9-5-5-/7-----------|--------------------|--------------------|
+
+D :-------------------|--------------------|--------------------|
+
+A :-------------------|--------------------|--------------------|
+
+E :-------------------|--------------------|--------------------|
+
+
+
+
+E :15-p14----------------|
+
+B :-------15-------------|
+
+G :----------------------|
+
+D :----------------------|
+
+A :----------------------|
+
+E :----------------------|
+
+
+  tremolo picking (very quickly)
+
+  with P.M. occasionally                       
+
+
+E :22---------------|(22)-----------|2-------2-------|2------0-------0|
+
+B :-----------------|---------------|3-------3-------|3------1---0---1|
+
+G :-----------------|---------------|2-------2-------|2------0---0---0|
+
+D :-----------------|---------------|0-------0-------|0------2---0---2|
+
+A :-----------------|---------------|----------------|-------3---2---3|
+
+E :-----------------|---------------|----------------|-----------3----|
+
+
+
+
+E :2------0-------0|2------0-------0|2--------------|----------------|
+
+B :3------1---0---1|3------1---0---1|3--------------|----------------|
+
+G :2------0---0---0|2------0---0---0|2--------------|----------------|
+
+D :0------2---0---2|0------2---0---2|0-------0-----0|---2-0-----0---2|
+
+A :-------3---2---3|-------3---2---3|----------0-3--|-0-----0-3---0--|
+
+E :-----------3----|-----------3----|---------------|----------------|
+
+
+
+
+E :----------------|----------------|----------------|----------------|
+
+B :----------------|----------------|----------------|----------------|
+
+G :----------------|----------------|----------------|----------------|
+
+D :-0-----0---2-0--|---0---2-0-----0|---2-0-----0---2|-0-----0---2-0--|
+
+A :---0-3---0-----0|-3---0-----0-3--|-0-----0-3---0--|---0-3---0-----0|
+
+E :----------------|----------------|----------------|----------------|
+
+
+
+
+E :----------2--0--|0---------------|
+
+B :----------3--1--|2---------------|
+
+G :----------2--0--|2---------------|
+
+D :---0---2--0--2--|2---------------|
+
+A :-3---0-------3--|0---------------|
+
+E :----------------|----------------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/hold_on.tab b/guitar/tabs/Santana/hold_on.tab new file mode 100644 index 0000000..8dca110 --- /dev/null +++ b/guitar/tabs/Santana/hold_on.tab @@ -0,0 +1,278 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / hold_on.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 20 Sep 2000 13:07:12 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/hold_on.tab
+
+artist: Santana
+song: Hold On
+album: Best of Santana
+
+tablature explanation:
+h=hammer on
+p=pull-off
+/=slide up(or indicates tremolo picking)
+\=slide down
+^=bend full
+b=bend half
+br=bend 3 semitones 
+^r or br=bend and release  
+key=G minor
+transcribed by jordanlockert@yahoo.com
+
+
+Solo 1:
+...broken through
+|--------------------------------------------6--8--^--10p8---6--10--6h8---|
+|----------------------------------------/8-------------------------------|
+|-5^-------3--3--5--------------------------------------------------------|
+|------------------/5---3p0-----------------------------------------------|
+|-------------------------------------------------------------------------|
+|-1:39--------------------------------------------------------------------|
+
+                                                                              
+
+|-17b---------17--15--17--17br--15h17p15----15--15------|
+|---------------------------------------18--------------|
+|-------------------------------------------------------|
+|-------------------------------------------------------|
+|-------------------------------------------------------|
+|-1:47--------------------------------------------------|
+
+                                                                              
+
+|-18^---------18^---18-15------------------------------------|
+|-------------------------18-15------------------------------|
+|-------------------------------18-17-15----15-17--17^r^-----|
+|----------------------------------------17------------------|
+|------------------------------------------------------------|
+|-1:51-------------------------------------------------------|
+
+
+Solo 2:                                                                              
+...broken through
+|-----------------------------------------6--6---6------6---8--8^---8^r-6----|
+|-------------------------------------/8-------------8--------------------8--|
+|-/7-------3----5------------------------------------------------------------|
+|-----------------/5---3p0---------------------------------------------------|
+|----------------------------------------------------------------------------|
+|-2:52--------------------------------2:55-----------------------------------|
+
+                                                                              
+
+|---5-6--8--6^---6------------------|
+|-8---------------8p6--8--6^r-------|
+|-----------------------------7-----|
+|-----------------------------------|
+|-----------------------------------|
+|-3:02------------------------------|
+
+                                                                              
+
+|-5b--5--3-----3---5p3----3-----3-------------|
+|-----------6----------6-----6-----6^r\3------|
+|---------------------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+|-3:07----------------------------------------|
+                                                                              
+
+
+|------------------15------------------|
+|--------------18------18^--18^r-15----|
+|-17^r-17--15--------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|-3:13---------------------------------|
+ 
+
+
+|-15---17---18---18^--18^----18-----17---15--17p15------------------------------|
+|-------------------------------------------------18p15------------------15-----|
+|------------------------------------------------------17^-17p15---15-17----17^-|
+|---------------------------------------------------------------17--------------|
+|-------------------------------------------------------------------------------|
+|-3:16--------------------------------------------------------------------------|
+
+                                                                              
+...the same               ...this way
+|-13p10-------------------------------20^---18-----------------|
+|-------13^-13-10-----------------------------20---------------|
+|--------------------------------------------------------------|
+|--------------------------------------------------------------|
+|--------------------------------------------------------------|
+|-3:24--------------------------------3:28---------------------|
+
+                                                                              
+...without you
+|-----------------------------------------------------------|
+|-15---16---17---18--17-16-15--------------------15---------|
+|-----------------------------17^-17-15----15h17----15------|
+|---------------------------------------17------------------|
+|-----------------------------------------------------------|
+|-3:33------------------------------------------------------|
+                                                                              
+
+
+|---------------------------------------15-17-17^--17p15------|
+|----------------------------------15-------------------------|
+|-17^-17--15h17------------17/18------------------------------|
+|-------------------------------------------------------------|
+|-------------------------------------------------------------|
+|-3:38---------------------3:40-------------------------------|
+                                                                             
+
+...like you do
+|-22b^-------22-21-20----20----20----20--22--20^------18-----|
+|---------------------23----23----23---------------20--------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|-3:49-------------------------------------------------------|
+                                                                             
+
+...the same
+|----17--------------18--------|
+|-15--------------15-----------|
+|------------------------------|
+|------------------------------|
+|------------------------------|
+|-3:54-------------------------|
+                                                                             
+
+...feel this way
+|-18^-------18^----15----------------------------------------------|
+|----------------18--18p15-----------------18p15-------------------|
+|-------------------------17p15--15h17/19--------17p15--17p15------|
+|------------------------------17---------------------17-----17----|
+|------------------------------------------------------------------|
+|-3:58-------------------------------------------------------------|
+
+                                                                             
+...without you
+|------------------------------------------------------------|
+|-15//---15////////---15////////---15-18p15---------15-------|
+|-----17^----------17^----------17^--------17p15h17^--15-----|
+|-------------------------------------------------------17---|
+|------------------------------------------------------------|
+|-4:03-------------------------------------------------------|
+                                                                             
+
+
+|-13------11--10----------------------------------10----------|
+|-----------------13--11--10----------10--13---------11-------|
+|-----------------------------12--11--------------------12----|
+|-------------------------------------------------------------|
+|-------------------------------------------------------------|
+|-4:07--------------------------------------------------------|
+                                                                             
+
+...like I do
+|-----------------------------------------15--------------------|
+|-18p15-15--18p15-15--18p15-15--18p15h18^---18p15-------15------|
+|------------------------------------------------17p15----15----|
+|-----------------------------------------------------17--------|
+|-----------------------------------------******************----|
+|-4:18------------------------------------(barely audible)------|
+
+__________________________________________________
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/jingo.tab b/guitar/tabs/Santana/jingo.tab new file mode 100644 index 0000000..bef2cf4 --- /dev/null +++ b/guitar/tabs/Santana/jingo.tab @@ -0,0 +1,241 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / jingo.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 13 Sep 2000 15:53:52 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/jingo.tab
+
+Song: Jingo
+Artist: Santana
+Album:Best of Santana
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up
+\=slide down
+^=bend
+br, ^r=bend &release
+14r12 = pre bend from twelve to 14 then pick and release
+
+You will have to tune your guitar up a bit for this song, but not quite
+a full fret higher. I hate it when songs are like this because it's a pain.
+It may take a while to get it just right.
+
+
+|----12^------14r12--10-12-10------------------12^-12^----14r12--10-12-10-|
+|-12--------------------------10h12---------12----------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-(0:40)------------------------------------------------------------------|
+                                                                              
+
+
+|-12-12--7-10--7--7----10--7--7----10--7--7----10--7--10^10--7--10--|
+|--------------------10----------10----------10---------------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-(0:55)------------------------------------------------------------|
+                                                                              
+
+
+|-7--7----10--7--7----10--7--7----10--7----------------------
+|-------10----------10----------10-----10-7------------------
+|------------------------------------------9^r-6--9^---------
+|-----------------------------------------------9------------
+|------------------------------------------------------------
+|-(1:00)-----------------------------------------------------
+                                                                              
+
+
+--------------------------------------|
+-----------------------------7\-------|
+-11r9--7-9---7---------------7\-------|
+----------------7h9--------9----------|
+--------------------------------------|
+--------------------------------------|
+                                                                              
+
+
+|--7-----|
+|--7-----|
+|--7-----|
+|--------|
+|--------|
+|--------|
+Play on this chord during the singing
+
+                                                                              
+
+solo:
+|----12^-12^---------14r12--10-12-10-----------------|
+|-12----------------------------------10h12----------|
+|----------------------------------------------------|
+|----------------------------------------------------|
+|----------------------------------------------------|
+|-(2:42)---------------------------------------------|
+                                                                              
+
+
+|----15^-------------14r12--10----------------------------------------------
+|-12----------------------------10-12--------12h14---12h14--12h14-14-14-----
+|---------------------------------------------------------------------------
+|---------------------------------------------------------------------------
+|---------------------------------------------------------------------------
+|-(2:50)--------------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------------------------------
+-15p14p12-15p14p12-15p14p12-15p14p12-15p14p12-15-15p14p12-15p14p12-15p14p12---
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+-(2:58)-----------------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------------------------
+-15p14p12-15p14p12------/12-10-/12-10-/12-10-/12-10-/12-10---12-12-10---
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                              
+
+
+----7---------------|
+-10---10-7----------|
+-----------9^r-7----|
+-----------------9--|
+--------------------|
+--------------------|
+                                                                              
+
+
+|-10p9p7---10p9p7---10p9p7----7----7---------7-------------------
+|-------10-------10-------10----10---10p7------10----------------
+|-----------------------------------------9^-------9^r-7---7---7-
+|--------------------------------------------------------9---9---
+|----------------------------------------------------------------
+|-(3:05)---------------------------------------------------------
+                                                                              
+
+
+----------------------------------7-----7-----7--------------------------
+-----7----7----7----7----7-7--10^---10^---10^----10-7--------------------
+--9^---9^---9^---9^---9^------------------------------9^r-7---9^---------
+------------------------------------------------------------9------------
+-------------------------------------------------------------------------
+-(3:09)------------------------------------------------------------------
+                                                                              
+
+
+--------------------------------------|
+--------------------------7\----------|
+-11r9--7-9--7-------------7\----------|
+---------------7-9--------------------|
+--------------------------------------|
+--------------------------------------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/love_of_my_life.tab b/guitar/tabs/Santana/love_of_my_life.tab new file mode 100644 index 0000000..4432980 --- /dev/null +++ b/guitar/tabs/Santana/love_of_my_life.tab @@ -0,0 +1,484 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / love_of_my_life.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Sun, 16 Jul 2000 20:11:41 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/love_of_my_life.tab
+
+artist: Santana & Dave Matthews
+song: love of my life
+album: supernatural
+
+h=hammer on
+p=pull-off
+/=slide up(or fast pick)
+\=slide down
+^=bend full
+b=bend half(rarely used)
+^r or br=bend and release  
+transcribed by jordanlockert@yahoo.com
+
+here it is the whole song right to the end.  I can say that 
+it is quite accurate all the way through. The only problem 
+you may have is during the last 2 minutes, where there are no 
+lyrics for reference points. Its divided into sections fairly 
+clearly, but if you get lost, try listening for the really 
+high bends to get back on track.
+
+
+Intro
+-|------------------------------------------------------------------
+-|-----------------------------6------------------------------------
+-|-------------------------------8----------5-/5----8-7------5^r----
+-|-5-7-8----10^r-7----5-7-8--------7----7-8-------------8--------5--
+-|------------------------------------------------------------------
+-|------------------------------------------------------------------
+                                                                              
+------------------|
+------------------|
+------------------|
+--5-5-5-4-5-7-/7--|
+------------------|
+------------------|
+                                                                              
+...wanna be 
+-|-----------------------|
+-|-10-11^--11^r----------|
+-|--------------12-12----|
+-|-----------------------|
+-|-----------------------|
+-|-----------------------|
+                                                                              
+...wanna see
+-|-------10-13-11-10-------------|
+-|-11-13-------------13-13^r^----|
+-|-------------------------------|
+-|-------------------------------|
+-|-------------------------------|
+-|-------------------------------|
+                                                                              
+...my dream 
+-|---------------10-----------|
+-|-13^-13-11-13^----11--------|
+-|---------------------12-12--|
+-|----------------------------|
+-|----------------------------|
+-|----------------------------|
+                                                                              
+...to me 
+-|---------------------------------------------------|
+-|---------------------------------------------------|
+-|-----5-/5----8-7------5^r--------------------------|
+-|-7-8-------------8--------5----5-5-5-4-5-7-/7------|
+-|---------------------------------------------------|
+-|---------------------------------------------------|
+                                                                              
+
+-|------------------------------------------------------------
+-|---------------------------------------------------6--------
+-|-----------------------------------------------------8------
+-|-5-7-8----------------------------5-7-8----------------7----
+-|-------------------10^r-7-----------------------------------
+-|------you're-the...-------of-my...------and the...----------
+                                             
+
+---------------------------------------------------------------
+---------------------------------------------------------------
+--------------5-/5------------8--7--8-7-------7-8-7-----7-5----
+----------7-8---------------------------8-5-8-------8-------5--
+---------------------------------------------------------------
+-in my...----------take my...----------------------------------
+                                                          
+
+---------------------------15---|
+-------------------------15^----|
+--------------------------------|
+--5-5-5-4-5-7-/7----------------|
+--------------------------------|
+--------------------------------|
+                                                                              
+...your mouth 
+-|---------------10--------------|
+-|-13^-13-11-13^----11-----------|
+-|---------------------12-12-----|
+-|-------------------------------|
+-|-------------------------------|
+-|-------------------------------|
+                                                                              
+...pour out 
+-|----15----15-------------|
+-|-18----18----18-^--------|
+-|-------------------------|
+-|-------------------------|
+-|-------------------------|
+-|-------------------------|
+                                                                              
+...are one
+-|-13------------10------------|
+-|-13^-13-11-13^----11---------|
+-|---------------------12-12---|
+-|-----------------------------|
+-|-----------------------------|
+-|-----------------------------|
+
+
+-|---------------------------------------------------------|
+-|---------------------------------------------------------|
+-|-----5-/5----8-7------5^r--------------------------4---5-|
+-|-7-8-------------8--------5----5-5-5-4-5-7-----8---------|
+-|---------------------------------------------------------|
+-|-----------------------------------------------eve-ry-day|
+                                                                  
+
+-|---------------------------------------------------------|
+-|-6-------------------------------------------------------|
+-|-----8----------7---5------------------------------------|
+-|---------7--------------5----5-5-8--7--5-/5--------------|
+-|---------------------------------------------------------|
+-|eve-ry--night--you--a--lone...---------------------------|
+                                               
+
+interlude
+-|------------------------(8^r-5)--------------------------|
+-|-------(8-10-11)----------------------(8-10-11)---6------|
+-|----------------------------------------------------8----|
+-|-5-7-8--------------------------5-7-8-----------------7--|
+-|-----------------10^r-7----------------------------------|
+-|---------------------------------------------------------|
+                                                                              
+
+-|---------------------------------------------------------|
+-|---------------------------------------------------------|
+-|-----5-/5----8-7------5^r--------------------------------|
+-|-7-8-------------8--------5----5-5-5-4-5-7-/7------------|
+-|---------------------------------------------------------|
+-|---------------------------------------------------------|
+
+
+-|------------------------(8^r-5)---------------------------|
+-|-------(8-10-11)----------------------(8-10-11)---6-------|
+-|----------------------------------------------------8-----|
+-|-5-7-8-----------10^r-7---------5-7-8-----------------7---|
+-|----------------------------------------------------------|
+-|----------------------------------------------------------|
+                                                                              
+
+-|----------------------------------------------------------|
+-|----------------------------------------------------------|
+-|-----5-/5----7h8--7--8-7-----8-7----5^r-------------------|
+-|-7-8---------------------8-5-----8------5---5-5-5-4-5-7---|
+-|----------------------------------------------------------|
+-|----------------------------------------------------------|
+                                                                              
+
+-|---------------13--11----------------------------------------|
+-|-11--12--13------------10---13^-13---------------------------|
+-|------------------------------------12---12-12-15-14-12-/12--|
+-|-------------------------------------------------------------|
+-|-------------------------------------------------------------|
+-|eve--ry--day--eve--ry-nite--you-a--lone...-------------------|
+                              
+
+We go dancing...
+....dance, dance ,dance 
+
+Outro
+-|-------------------------------------------------------------
+-|-------------------------------------------------------------
+-|-------------------------5--------5-7-8-7-8-7----------------
+-|---7----5-4-5-8----7-6-7------7-8-------------8-5-8-----7----
+-|-5----------------------------------------------------5------
+-|-------------------------------------------------------------
+                                                                              
+
+-|-------------------------------------------------------------
+-|-------------------------------------------8--10^r10-8-8-----
+-|---------------------5--^r--5/7-7-7-8-8-10-------------------
+-|5h7p5-4-5-8----7-6-7-----------------------------------------
+-|-------------------------------------------------------------
+-|-------------------------------------------------------------
+                                                                              
+
+-|------------------------------------------------------------
+-|--------------------10-11-10-13-10-11-10h11-10--------------
+-|------------------12--------------------------12------------
+-|-10-8-10^r------12------------------------------10--12--10--
+-|--------------------------------------------------13--13----
+-|------------------------------------------------------------
+                                                                              
+
+-|---------------------------------------------
+-|-------------10h11-10----13----10-13-11^r----
+-|----10h12-------------12-----------------12--
+-|-12------------------------------------------
+-|---------------------------------------------
+-|---------------------------------------------
+                                                                              
+
+
+-|----------------10--------
+-|----10-11-10-------13-13--
+-|-12----------12-----------
+-|--------------------------
+-|--------------------------
+-|--------------------------
+                                                                              
+
+-|-------13-10-----------------------------------------------
+-|-10-13-------------10-11-10h11p10----13----10-13^r---------
+-|----------------12----------------12---------------12------
+-|-----------------------------------------------------------
+-|-----------------------------------------------------------
+-|-----------------------------------------------------------
+                                                                              
+
+-|-------------------------10-10-10--10h11-10h11-10h11p10h11*-
+-|----10-11-10----11-13-13------------------------------------
+-|-12----------12---------------------------------------------
+-|------------------------------------------------------------
+-|---------------------------------*-repeat-and speed-up------
+-|------------------------------------------------------------
+
+
+-|-10//11//12//12b--11p10-------------------------------------
+-|-----------------------11p10--------------------------------
+-|----------------------------12p10------------10-------------
+-|---------------------------------12p10--10h12--10--10---10--
+-|--------------------------------------13---------13--13-----
+-|------------------------------------------------------------
+
+
+-|----15-17-18--17p15-18--17p15--18p17p15-18p17p15-18p17p15-18p17p15-
+-|-15----------------------------------------------------------------
+-|-------------------------------------------------------------------
+-|-------------------------------------------------------------------
+-|-------------------------------------------------------------------
+-|-------------------------------------------------------------------
+                                                                              
+
+-18p17p15-18p17p15-18p17p15-18p17p15-18^--18^--18^r--
+-----------------------------------------------------
+-----------------------------------------------------
+-----------------------------------------------------
+-----------------------------------------------------
+-----------------------------------------------------
+                                                                              
+
+-15--15--------------------15-----------------------|
+---18--18p15-----------------------------------15\--|
+-------------17^r15--15h17^--17^r15-17-17-15-17-----|
+-------------------17-------------------------------|
+----------------------------------------------------|
+----------------------------------------------------|
+                                                                              
+
+-|----18-20^-20^-------18-20^-20^-------18-20^--20^--20^--20^--20^--20^-
+-|-20---------------20---------------20---------------------------------
+-|----------------------------------------------------------------------
+-|----------------------------------------------------------------------
+-|----------------------------------------------------------------------
+-|----------------------------------------------------------------------
+                                                                              
+
+--20-20-18-20\--|
+----------------|
+----------------|
+----------------|
+----------------|
+----------------|
+
+
+-|-8-----------6---------------8-----10p8--8---------------------------|
+-|--8--/8--8--8-------/10-10-10----10----11-8--8--8------------6-------|
+-|--------------------------------------------------7-6-5---/7---5--5--|
+-|-------------------------------------------------------8---------8---|
+-|---------------------------------------------------------------------|
+-|---------------------------------------------------------------------|
+                                                                              
+
+-|----------------------------------8--10--10--11//12//13//-15--15--
+-|-10----8----8-11----10h11p10-9-10---------------------------------
+-|---------11-------------------------------------------------------
+-|------------------------------------------------------------------
+-|------------------------------------------------------------------
+-|------------------------------------------------------------------         
+
+
+-|----20-20^////////////r^-20^--18--------------15-------15--
+-|-18-----------------------------20--20-20-20-----15-16-----
+-|-----------------------------------------------------------
+-|-----------------------------------------------------------
+-|-----------------------------------------------------------
+-|-----------------------------------------------------------
+
+
+---18^r15----15-------15------18p15---------15---15---
+----------18-------18^--15h18^-----18p15-18^--18^-----
+------------------------------------------------------
+------------------------------------------------------
+------------------------------------------------------
+------------------------------------------------------
+                                                                              
+
+-20^--18p15-15-----15---------------------------------------------------|
+-----------------18--18p17p16p15----------------------------------------|
+--------------------------------17p15--17p15----------------------------|
+-------------------------------------17-----17-----------15-------------|
+----------------------------------------------15--15--/17--15--15--15\--|
+------------------------------------------------18--18-------18--18-----|                                          
+                            
+
+-|---------------10----------8-----------------------------
+-|-8--11--10--8------11--10-----11--10--8------------------
+-|--------------------------------------------------10-12--
+-|-----------------------------------------10-8-/12--------
+-|---------------------------------------------------------
+-|---------------------------------------------------------
+                                                                              
+
+-|-10--10-10--10-10--10-10-10--------------------------------------
+-|-11--11-11--11-11--11-11-11-13-------10br-8----------------------
+-|-------------------------------12--------------------------------
+-|--------------------------------------------10^r-10-8-10-8-10^r--
+-|-----------------------------------------------------------------
+-|-----------------------------------------------------------------
+
+
+---------------------------------------------------
+-----11----11----11---11--11----11----11-13-13-13--
+-/12----12----12----12--12---12----12--------------
+---------------------------------------------------
+---------------------------------------------------
+---------------------------------------------------
+                                                                              
+
+------------------------------------18-20^////////////r^-18p15--
+-3////4//5////6///7//8////10//11//------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+                                                                              
+
+----18p15--15---18p15--15-----------------------------------------------
+-18^-----18--18^-----18--18^--18^--18^--18^--18^r15---18^r15---18^r15---
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                              
+
+-----------------------------------------------------------------------
+-18^r15---------15b18--r--r--r--r--r--17-------------------------------
+--------17p15----------------------------19--r--r--r--17--15p14--------
+-------------17------------------------------------------------17p15---
+--------------------------------------------------------------------17-
+-----------------------------------------------------------------------
+                                                                              
+
+----15-----15-----15-----15-----15 faded-out-
+-13^---13^----13^----13^----13^--------------
+---------------------------------------------
+---------------------------------------------
+---------------------------------------------
+---------------------------------------------
+                                                                              
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/maria_maria.tab b/guitar/tabs/Santana/maria_maria.tab new file mode 100644 index 0000000..97276ae --- /dev/null +++ b/guitar/tabs/Santana/maria_maria.tab @@ -0,0 +1,448 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / maria_maria.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 25 Jul 2000 23:17:56 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/maria_maria.tab
+
+
+Artist: Santana
+Title: Maria maria
+Album: supernatural
+Transcribed by: jordanlockert@yahoo.com
+
+tablature explanation:
+h=hammer on
+p=pull off
+^=bend full
+r=release bend
+//////=indicates rapid picking
+
+I finally got around to doing this one after having finished 
+some others from Supernatural. I didnt want to do it at first 
+because some of the classical guitar parts are hard to hear, 
+but I solved that problem by using headphones.
+
+
+Intro and verse: classical guitar
+|------7-8-7-7---|
+|---10-----------|
+|-9--------------|
+|----------------|
+|----------------|
+|----------------|
+                                                                              
+
+
+|---------8-7-10-8-7-8-7-8-7--------|
+|---10-10--------------------10-----|
+|-9---------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+                                                                              
+
+
+|-------------|
+|-------------|
+|----7-9------|
+|-10----------|
+|-------------|
+|-------------|
+                                                                              
+
+
+|---------------------------|
+|--------8------------------|
+|----7-9---10-9-7----7-9----|
+|-10--------------10--------|
+|---------------------------|
+|---------------------------|
+                                                                              
+
+...maria maria
+|--------------------------------|
+|-------------12-----------------|
+|----------14----14--------------|
+|-12-14-15----------15-14-15-----|
+|--------------------------------|
+|--------------------------------|
+                                                                             
+
+...story
+|-----------------------------------|
+|-----------------------------------|
+|-------------12--------------------|
+|-------12-14----15-14-15--14-12----|
+|-12-15-----------------------------|
+|-----------------------------------|
+ 
+
+...harlem                                                                               
+|-------------------------|
+|-------------------------|
+|---7---------------------|
+|-9---10-9-10-10p9--------|
+|-------------------------|
+|-------------------------|
+                                                                              
+
+...star
+|---------------------------------------12-12-12-12-13-----
+|-----------------12-----13-----15-------------------------
+|----------14----------------------------------------------
+|----12-14-----14-----14-----------------------------------
+|-15-------------------------------------------------------
+|----------------------------------------------------------
+                                                                              
+
+...maria maria 
+---12-13-12-15-13-12-13p12------|
+--------------------------15----|
+--------------------------------|
+--------------------------------|
+--------------------------------|
+--------------------------------|
+                                                                              
+
+...East L.A.  
+|-----------------------------------------------------------
+|-------12-13-12-15-12-13-13--12--12------------------------
+|----14-------------------------------14--------------------
+|-14------------------------------------------14-15-14------
+|-----------------------------------------------------------
+|-----------------------------------------------------------
+                                                                              
+
+...guitar, yeah
+-------------------------------------|
+-------------------------------------|
+--------------12---------------------|
+--------12-14----15-14-15-14-12------|
+--14-15------------------------------|
+-------------------------------------|
+                                                                              
+
+...Santana (Chorus - Electric)
+|-12-----12-13-12-------------12-----12-17-12-------------12--12-----
+|------------------13------13------------------13------13 --15-------
+|-----------------------14--------------------------14---------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+                                                                              
+
+
+--12-13-12-------------12--12-12--12-12-12 -12-12-12-------|
+------------13------13-----13-13--13-13-13 -13-13-13-15----|
+-----------------14-------------------------------------14-|
+-----------------------------------------------------------|
+-----------------------------------------------------------|
+-----------------------------------------------------------|
+
+
+...maria maria (classical)
+|----------------------------------------|
+|-------------8--8-----------------------|
+|----7-9-10-9-------10--10--9--9---------|
+|-10-------------------------------10\---|
+|----------------------------------------|
+|----------------------------------------|
+                                                                              
+
+...story
+|------7-7-8-8-8-7-10-8-7---------|
+|---10--------------------10------|
+|-9-------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+                                                                              
+
+...harlem
+|-----------------------------|
+|--------8--------------------|
+|-9-10-9---10-9---------------|
+|----------------10h12p10-----|
+|-----------------------------|
+|-----------------------------|
+                                                                              
+
+...star, oh
+|-------------------------|
+|----------12-12-13-13----|
+|-14-13-14----------------|
+|-------------------------|
+|-------------------------|
+|-------------------------|
+                                                                              
+
+maria maria
+|------------------------------------------------|
+|-15-15-15--------------------------------15-----|
+|----------14--14----------------------14--------|
+|------------------15--12-----12-14-15-----------|
+|--------------------------12--------------------|
+|------------------------------------------------|
+                                                                              
+
+...East L.A.
+|-12-15-15--13-12----------12-12-------------|
+|-----------------15-13-15-------------------|
+|----------------------------------14-14-----|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+                                                                              
+
+...guitar
+|---7-10-8-7-8-7-8-7----7---------|
+|-8------------------10-----------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+                                                                              
+
+...Santana (electric)
+|-12-----12-13-12-------------12--12-----12-13-12-------------12--12------
+|------------------13------13---13-----------------13------13---15--------
+|-----------------------14------------------------------14----------------
+|-------------------------------------------------------------------------
+|-------------------------------------------------------------------------
+|-------------------------------------------------------------------------
+                                                                              
+
+
+-12-17-12-------------12-12-12-12-12-12----------|
+-----------13------13-------13-13-13-13-15-------|
+----------------14-------------------------14----|
+-------------------------------------------------|
+-------------------------------------------------|
+-------------------------------------------------|
+                                                                              
+
+...esperanza
+|--------------------------|
+|--------------------------|
+|----------14----14-14-----|
+|-14-14-14----14-----------|
+|--------------------------|
+|--------------------------|
+                                                                              
+
+Bridge: (classical)
+|--------------------------------------------------------------
+|--------------------------------------------------------------
+|----------------9-10-9-7----7-9----7----9-9------9------------
+|---7-9-10----------------10---------10-----10-7----10--10-7---
+|-7------------------------------------------------------------
+|--------------------------------------------------------------
+                                                                              
+
+
+------------7-8-7----------------------------------------------------
+------------------10-------------------------------------------------
+----------9-----------9--9--9--7----12--12--10-10-9h10p9----9--------
+---7-9-10------------------------------------------------12---12-----
+-7-------------------------------------------------------------------
+---------------------------------------------------------------------
+                                                                              
+
+
+---------------------------7-7-8-8-10-10--12/////-----10-12-10----10----
+-----------------10-10--10-------------------------------------13-------
+----7-9-7--7---7--------------------------------------------------------
+-10---------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                              
+
+...story
+-----12----12----12-12-12-12------------------------------|
+---13----13----13------------13--13-----------------------|
+-14----14----14----------------------14-------------------|
+-----------------------------------------12----12-12------|
+--------------------------------------------15------------|
+----------------------------------------------------------|
+                                                                              
+
+...harlem
+|-7-8-7-------------------------|
+|-------8-----------------------|
+|---------9-7h9-7----7-9-7------|
+|-----------------10------------|
+|-------------------------------|
+|-------------------------------|
+                                                                              
+
+...movie star (electric)
+|-------12-12-------12-12-----12-12--12-12-12-12-12----------|
+|----13----------13--------13----13--13-13-13-13-13-15-------|
+|-14----------14---------14----------------------------14----|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+
+
+Maria maria
+|-15^--15^-15^-15^-15^r-12-15-15p12---12--------------|
+|----------------------------------15---15-13----15---|
+|-----------------------------------------------------|
+|-----------------------------------------------------|
+|-----------------------------------------------------|
+|-----------------------------------------------------|
+                                                                              
+
+...East L.A.
+|----12-12------12-12-----12-12----12-------------|
+|-15^------15^--------15^-------15-13-13-15-------|
+|-------------------------------------------14----|
+|-------------------------------------------------|
+|-------------------------------------------------|
+|-------------------------------------------------|
+                                                                              
+
+...guitar
+|----------------------12-------------------------------------------|
+|-------------12-13-12----15-13-12--13-12--12h13p12-----------------|
+|----------14---------------------------------------14-12-----14----|
+|-12-14-15----------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+                                                                              
+
+...Santana
+|-12-----13-12-------------12-----12-13-12-------------12--12----
+|---------------13------13------------------13------13---13------
+|--------------------14--------------------------14--------------
+|----------------------------------------------------------------
+|----------------------------------------------------------------
+|----------------------------------------------------------------
+                                                                              
+
+
+-12-13-12-------------12--12-----12-17-12---------------|
+-----------13------13---15-----------------13------13---|
+----------------14------------------------------14------|
+--------------------------------------------------------|
+--------------------------------------------------------|
+--------------------------------------------------------|
+
+ 
+
+|-------12-12-------12-12--12-----------------------------------|
+|----13-------13--------------13------------------------13------|
+|-14-------------14--------------14--14--14-14-14--14-----------|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+                                                                              
+
+
+|---12-----12-13-12-------------12--12-----12-17-12----------------|
+|-*------------------13------13---15-----------------13------13--*-|
+|-------------------------14------------------------------14-------|
+|------------------------------------------------------------------|
+|-*--------------------------------------------------------------*-|
+|------------------------------------------------------------------|
+                                                                              
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/moonflower.tab b/guitar/tabs/Santana/moonflower.tab new file mode 100644 index 0000000..0c0be66 --- /dev/null +++ b/guitar/tabs/Santana/moonflower.tab @@ -0,0 +1,397 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / moonflower.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+From: =?iso-8859-1?Q?Christopher_Ure=F1a?= <christopher@reygil.com>
+Subject: s/santana/moonflower.tab
+Date: Tue, 2 Oct 2001 11:57:27 -0800
+
+Flor De Luna (Moonflower)
+Carlos Santana
+
+       h - hammer on
+       p - pull off
+       b - bend hacia arriba
+       r - soltar bend
+       / - deslizar hacia arriba
+       \ - deslizar hacia abajo
+       v - vibratto
+       VV - M=E1s vibratto
+
+Intro
+0:00 Cd time=20
+                               (0:05)
+e----------10-----------------10-----------------------------|
+B-------10-----13-11---10vv-----------13--11--10b11r10-------|
+G--------------------------------------------------------12\-|
+D-12---------------------------------------------------------|
+A------------------------------------------------------------|
+E------------------------------------------------------------|
+
+
+  (0:08)                       (0:12)
+e--------------------------------------------------10v-|
+B--------------------10\--------10--11--13--11-10------|
+G-9--10--12----10-9------------------------------------|
+D------------------------------------------------------|
+A------------------------------------------------------|
+E------------------------------------------------------|
+
+(0:16)                                                               =20
+e------------------------|
+B-----10-10/11-10---9/10-|
+G-12-------------12------|
+D------------------------|
+A------------------------|
+E------------------------|=20
+=20
+ (0:17)                                   (0:22)
+e-------------------------------------------------|
+B-------------------------------------------------|0
+G--10-12-12/14-12---10--12---9--10---12--10-------|}Bis
+D-------------------------------------------10-12-|0
+A-------------------------------------------------|
+E-------------------------------------------------|
+
+                                =20
+         (0:47)=20
+e-----------------------10vv\-----13--12-11-12b13r12-|
+B--------10--11--13----------------------------------|
+G----------------------------------------------------|
+D----------------------------------------------------|
+A----------------------------------------------------|
+E----------------------------------------------------|                   =
+      =20
+
+e----------------------------------------------------|
+B----13h15-13---10b(11)r10---------8-10-10h11-10vv---|
+G-14----------------------12--9-10-------------------|
+D----------------------------------------------------|
+A----------------------------------------------------|
+E----------------------------------------------------|
+
+         (1:02)                   (1:06)
+e-----------------------10vv------15-13-12-13--15-12b13r12-|
+B--------10--11--13----------------------------------------|
+G----------------------------------------------------------|
+D----------------------------------------------------------|
+A----------------------------------------------------------|
+E----------------------------------------------------------|
+
+e---------------------------|----------------------------|
+b-131313-10-13h15-13h15-13--|----------------------------|
+G---------------------------|-12-10-9v--9-10-12-10-------|
+D---------------------------|----------------------10-12-|
+A---------------------------|----------------------------|
+E---------------------------|----------------------------|
+
+
+  (1:18)
+e----------10--------------------10------------------------------|
+B-------10-----13p11---10vv--------------13--11--10b11r10--------|
+G------------------------------------------------------------12\-|
+D-12-------------------------------------------------------------|
+A----------------------------------------------------------------|
+E----------------------------------------------------------------|
+
+
+                                                  (1:31)
+e--------------------------------------------------10v--------------------------
+B--------------------10\--------10--11--13--11-10-----------10-10/11-10----9/10-
+G-9--10--12----10-9--------------------------------------12-------------12------
+D-------------------------------------------------------------------------------
+A-------------------------------------------------------------------------------
+E-------------------------------------------------------------------------------
+
+e-------------------------------------------|
+B-------------------------------------------|
+G-10-12-12/14-12h14p12-10-12-9-10-12-9--10--|
+D-------------------------------------------|
+A-------------------------------------------|
+E-------------------------------------------|
+
+  (1:39) |Piano ->
+e--------------------------------------------------------|
+B-----------10------8-11-8-9-10-------10------8-11-8-8-9-|
+G--------10----10-9----------------10----10-9------------|
+D-10--12------------------------12-----------------------|
+A--------------------------------------------------------|
+E--------------------------------------------------------|
+
+
+ (1:47)               (1:50)
+e-------------------------------10---------|
+B-10v-----11--10-------10-11-10-----10-----|
+G-----------------12-------------------12v-|
+D------------------------------------------|
+A------------------------------------------|
+E------------------------------------------|
+
+                   (1:56)                (1:59)
+e------------------------------------------10-----------------|
+B-11----11-10v----11-10---------11---11-10------9/10----------|
+G----12-----------------12--------12------------------12------|
+D-----------------------------13------------------------------|
+A-------------------------------------------------------------|
+E-------------------------------------------------------------|
+
+ (2:02)                        (2:04)
+e---------------------------------------|
+B---------------------------------------|
+G-1212121212h14-10----10----------------|
+D------------------12----12-------------|
+A------------------------------10----10-|
+E---------------------------------12----|
+
+ (2:05)
+e--------------------10-----------12--------------12-----|
+B------------10---10----10-----10----10--10--10-------10-|
+G------9-10----------------------------------------------|
+D----12--------------------------------------------------|
+A--12----------------------------------------------------|
+E--------------------------------------------------------|
+
+e----12b13-12b13-12b13-12b13-12b(13)r12-10-8h10--------------------|
+B-10-------------------------------------------1310----------------|
+G--------------------------------------------------1210---10-12p10-|
+D------------------------------------------------------12----------|
+A------------------------------------------------------------------|
+E------------------------------------------------------------------|
+
+  (2:16)
+e----------------------------------------------|
+B----------------------------------------------|
+G-10-1212--10-1212--10-10h1212--10h12--10-1212-|
+D----------------------------------------------|
+A----------------------------------------------|
+E----------------------------------------------|
+
+e---------------10-----------------------------|
+B---------------------13p10--------------------|
+G--10-12b(13)---------------12p10-----10-12p10-|
+D----------------------------------12----------|
+A----------------------------------------------|
+E----------------------------------------------|
+
+  (2:21)
+e--14b(15)-14b(15)-14b(15)-14b(15)-14b(15)-14b(15)-14b(15)-15b(15.5)--|
+B---------------------------------------------------------------------|
+G---------------------------------------------------------------------|
+D---------------------------------------------------------------------|
+A---------------------------------------------------------------------|
+E---------------------------------------------------------------------|
+
+                                                 |-Repetir R=E1pido-|
+e-10b-10b------------------------13----13p12------->13p12p1013<-|
+B---------13p10--------------------10--------10-----------------|
+G---------------12p10----10-12b13-------------------------------|
+D---------------------12----------------------------------------|
+A---------------------------------------------------------------|
+E---------------------------------------------------------------|
+
+ |-Varias Veces-|
+    |-R=E1pido-|   _-Bajar Velocidad-_
+e--->13p12p10<------13-p-12-p-10-----13p12p10-12-13-10-|
+B------------------------------------------------------|
+G------------------------------------------------------|
+D------------------------------------------------------|
+A------------------------------------------------------|
+E------------------------------------------------------|
+
+  (2:36)
+e|-13/17---17h18-17--15--20--18--17v-17v-18-17\---|
+B|--------------------------------------------|
+G|--------------------------------------------|
+D|--------------------------------------------|
+A|--------------------------------------------|
+E|--------------------------------------------|
+
+       |-Varias Veces-|
+          |-R=E1pido-|
+e-10/12-1212---15-10--13----12----10-->13p12p10<-|
+B------------------------13----12-------------------|
+G---------------------------------------------------|
+D---------------------------------------------------|
+A---------------------------------------------------|
+E---------------------------------------------------|
+
+ (2:49)
+e|------------------------------------|
+B|------------------------------------|
+G|------------------------7-6---7h9-7-|
+D|---------5---7--5--8-7--------------|
+A|-5--8--7---8------------------------|
+E|------------------------------------|
+
+
+
+e--------------10---13--12--(10)h12--------------10------------|
+B--10--11--13------------------------13p10---13------13--------|
+G--------------------------------------------------------------|
+D--------------------------------------------------------------|
+A--------------------------------------------------------------|
+E--------------------------------------------------------------|
+
+
+e----------------------10------------|
+B---12b13r12\-9--10--12-----10h11p10-|
+G------------------------------------|
+D------------------------------------|
+A------------------------------------|
+E------------------------------------|
+
+                                                                         =
+       =20
+e-----------10------15---13--12--15 13h15--------------|
+B-10-11-13---------------------------------15bv17------|
+G------------------------------------------------------|
+D------------------------------------------------------|
+A------------------------------------------------------|
+E------------------------------------------------------|
+
+
+e|-----------------------------------|
+B|----13--13--13--10--13/15\13-------|
+G|-----------------------------------|
+D|-----------------------------------|
+A|-----------------------------------|
+E|-----------------------------------|
+
+
+e------------------------------------|
+B------------------------------------|
+G-12--10--9--910--12-----------------|
+D---------------------10--12---------|
+A------------------------------------|
+E------------------------------------|
+
+
+e-----------10------------------------------------------------10|
+B--------10----11---10b11r10-3times-10b11r10\--13--11--10b11p8--|
+G---------------------------------------------------------------|
+D---12----------------------------------------------------------|
+A---------------------------------------------------------------|
+E---------------------------------------------------------------|
+
+
+e--------------------------------------------------10vv--|
+B--------------------10/-------10--11--13--11--10--------|
+G---9--10--12\10--9--------------------------------------|
+D--------------------------------------------------------|
+A--------------------------------------------------------|
+E--------------------------------------------------------|
+
+
+e---------------------------------------------------------------|
+B-----10-10/11--10----------------------------------------------|
+G-12----------12---(10)--10/12--(14)14\12--10--12---9--10-12--9-|
+D---------------------------------------------------------------|=20
+A---------------------------------------------------------------|
+E---------------------------------------------------------------|
+
+
+Transcrito Por: CHDUCH (TOPER)
+Comentarios a: chduch@hotmail.com
+               christopher@reygil.com
+              =20
+    12:14 AM 4/17/2001
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/nobody_to_depend_on.tab b/guitar/tabs/Santana/nobody_to_depend_on.tab new file mode 100644 index 0000000..a6ab1b1 --- /dev/null +++ b/guitar/tabs/Santana/nobody_to_depend_on.tab @@ -0,0 +1,309 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / nobody_to_depend_on.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Mon, 9 Oct 2000 15:17:20 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/nobody_to_depend_on.tab
+
+Song: Nobody to depend on
+Artist: Santana
+Album: Best Of Santana
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up
+\=slide down
+b=bend half
+^=bend full
+br, ^r=bend & release
+///////= tremolo pick
+
+There's two guitars playing for most of this, which are separated by 
+the left and right channels, as I've indicated.
+
+Intro: slowly
+|-5------------------------------------------5---------------6---5--------|
+|-------------5-----3------------3--5--6--3--------------------------3----|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-0-09--------------------------------------------------------------------|
+                                                                              
+
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-5^--------0--5^-5-----------3--0--5^----------0--5^-5--------------3--0-|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-0-32-left---------------------------------------------------------------|
+                                                                              
+
+|--------------5--3-----------------5--------5--3--5--3-------------------|
+|-6---------3-----------------6--5-----------------------------------6--5-|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-0-41-left---------------------------------------------------------------|
+                                                                              
+
+|------------------------------------------------------------------------|---|
+|-6---------3--6--5------3h5p3--3---6---------3-6-3-6-5------1h3p1--3----|---|
+|-----------------------------3---3-------------------------------3----3-|---|
+|------------------------------------------------------------------------|-0-|
+|------------------------------------------------------------------------|---|
+|-0-49-left--------------------------------------------------------------|---|
+                                                                              
+
+|-------------------------------------------------------------------------|
+|-5b-----------5b-5-----------3-----5b-------------5h6-5\-----------------|
+|-----------------------------3--0-----------------------------------3--0-|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-0-32-right--------------------------------------------------------------|
+                                                                              
+
+|-------------------------------3-----------------------------------5-6-8-|
+|-5h6-------5--6--5h6p5------------3------6-----------5--6--5---6-8-------|
+|-----------------------------------5p3p0---------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-0-41-right--------------------------------------------------------------|
+                                                                              
+
+|-/10-------13-/10-8-------8-----------------13-13----13-------------15------|
+|---------------------------11p10p8--11-8-13^------13^--13^r---------15------|
+|-----------------------------------------------------------------------15---|
+|--------------------------------------------------------------------------17|
+|----------------------------------------------------------------------------|
+|-0-49-right-----------------------------------------------------------------|
+                                                                              
+
+|--------------------------------------|
+|-*------3---3-5---------5---5-3---3--*|
+|--------3---3-5---------5---5-3---3---|
+|----5---------------------------5-----|
+|-*------------------3----------------*|
+|-0-58---------------------------------|
+                                                                              
+
+|-3--3-3--3--33-3--3-3---------|
+|-3--3-3--3--33-3--3-3---------|
+|-3--3-3--3--33-3--3-3--etc----|
+|------------------------------|
+|------------------------------|
+|-1-16-------------------------|
+                                                                              
+
+|-18////////////////////-20\------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|-1-20-right----------------------|
+                                                                              
+
+|---------------|
+|-5---5---3-5---|
+|-5---5---3-5---|
+|---------------|
+|---------------|
+|-1-27----------|
+                                                                              
+
+|-----------------------------------------------------------------------|
+|-5h6--5--3------3--5h6-5h6--5--3-----------3--5b-5--3------3--5b-5b----|
+|----------------------------------3------------------------------------|
+|-----------------------------------------------------------------------|
+|-----------------------------------------------------------------------|
+|-1-42-right------------------------------------------------------------|
+                                                                              
+
+|----------------------------------------------------|
+|*-------------------------------------------------*-|
+|----------------------------------------------------|
+|----------------------------------------------------|
+|*------3-3-----3---3------------------------------*-|
+|---3h6-------6---6---------------3h6-6-6---3-6---3--|
+
+The solo is kind of a mess of distortion and noise so I didn't do it.
+But its Gm pentatonic.
+                                                                              
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-0--5^----------0--5^-5------------3\-5^----------0--5^-5-------------3\-|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-4-33-left---------------------------------------------------------------|
+                                                                              
+
+|-5-----------------5--3----------------5----------3--5--3----------------|
+|---------------------------------6--5--------------------------------6--5|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-4-42-left---------------------------------------------------------------|
+                                                                              
+
+|----------------------------------------------------------------------------|---|
+|-6-------------3--6--3-----3h5p3--3---6-----3--6--3--6--5---------1h3p1--1--|---|
+|--------------------------------5---5----------------------------------3 --3|---|
+|----------------------------------------------------------------------------|-0-|
+|----------------------------------------------------------------------------|---|
+|-4-51-left------------------------------------------------------------------|---|
+                                                                              
+
+|-------------------------3--------------------------5-----------------------|
+|-5h6-----------5--6--5-------3-------------5h6---------6--5---------3-------|
+|------------------------------5p3p0--3--0----------------------------5p3p0 -|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|-4-33-right-----------------------------------------------------------------|
+                                                                              
+
+|------------------------------3-----------------------------------3---5--6--|
+|-6-------------5--6--5-------------3-------6--------5--6--5---6-------------|
+|------------------------------------5p3p0-----------------------------------|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|-4-42-right-----------------------------------------------------------------|
+                                                                              
+
+|-/10-------13--8h10--8-------
+|-----------------------------
+|-----------------------------
+|-----------------------------
+|-----------------------------
+|-4-51-right------------------
+                                                                              
+
+-----------------------------15---------15-------------15-15-15------------|
+--------------------------15----18^-18^----15p13-------15-15-15--15--------|
+--------17p15----15----17^------------------------15---------------17p15---|
+--------------17----17-----------------------------------------------------|
+---------------------------------------------------------------------------|
+---------------------------------------------------------------------------|
+                                                                              
+
+|-----------------------|
+|-----------------------|
+|-5^r-3-5p3-------------|
+|-----------5p3---------|
+|--------------5p4p3----|
+|-5-06-left---------6---|
+                                                                              
+
+|----------15----15-15--15----15-15---------------|
+|----------15----15-15--15-15-15-15---15----------|
+|----15-17----17------------------------17p15-----|
+|-17-----------------------------------------17---|
+|-------------------------------------------------|
+|-5-09-right--------------------------------------|
+                                                                              
+
+|-3-------------|
+|-3-------------|
+|-3-------------|
+|---------------|
+|---------------|
+|-end-----------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/oye_como_va.tab b/guitar/tabs/Santana/oye_como_va.tab new file mode 100644 index 0000000..183c971 --- /dev/null +++ b/guitar/tabs/Santana/oye_como_va.tab @@ -0,0 +1,302 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / oye_como_va.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 13 Sep 2000 15:53:03 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/oye_como_va.tab
+
+Artist: Santana
+Song: Oye Como Va
+Album: Best of Santana 
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up
+\=slide down
+b=bend slight
+^=bend full
+9r7=pre bend from fret 7 to 9, pick and release
+
+|--------7-8-10--7----------------------7-8-10--7----------------|
+|-10--10------------8h10---------10--10------------8-10----------|
+|-------------------------------------------------------9r7------|
+|-----------------------------------------------------------10---|
+|----------------------------------------------------------------|
+|-(0:15)---------------------------------------------------------|
+                                                                              
+
+|--------7-8-10--7----------------------7-8-10--7---------------|
+|-10--10------------8h10---------10--10------------8-10---------|
+|-------------------------------------------------------9r7-----|
+|-----------------------------------------------------------10--|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+                                                                              
+
+|-5---5-5---5-5-5-----------------5---5---5-5-----------------5-|
+|-5---5-5---5-5-5---5-5-5-7---5---5---5---5-5---7-----5-------5-|
+|-5---5-5---5-5-5---5-5-5-7---5---5---5---5-5---7-----5-------5-|
+|---------------------------7-----------------------7-----------|
+|---------------------------------------------------------------|
+|-(0:30)--------------------------------------------------------|
+
+
+|-5---5-5---5-5-5-----------------|
+|-5---5-5---5-5-5---5-5-5-7---5---|
+|-5---5-5---5-5-5---5-5-5-7---5---|
+|---------------------------7-----|
+|---------------------------------|
+|-(0:53)--------------------------|
+
+
+|----------------------------------------------------5---5------|
+|-----5-8-5-8-5h7-----------------------5-8-5-8-5h7-------5-----|
+|------------------7----5h7-7p5-------5-------------------5-----|
+|-7----------------------------7p5h7----------------------------|
+|---------------------------------------------------------------|
+|-(0:56)--------------------------------------------------------|
+                                                                              
+
+|-------------------------------------------5----------5--/6/7--|
+|------5-8-5-8-5h7----------------------5-8---5-8-5h7-----------|
+|----5--------------7----5h7-7p5------5-------------------------|
+|-7-----------------------------7p5h7---------------------------|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+                                                                              
+
+|-8-8-5-5-8-5---8---5----5---------------8-8---------8------------------|
+|---------------------/7---------------------8h10-10---10-------10------|
+|-----------------------------5h7-7p5-----------------------/11----9----|
+|--------------------------------------------------------------------10-|
+|-----------------------------------------------------------------------|
+|-(1:11)----------------------------------------------------------------|
+                                                                              
+
+|-8-8-5-5-8-5---8---5----5---------------8-8---------8-------------------|
+|---------------------/7---------------------8h10-10---10--------10--/17-|
+|-----------------------------5h7-7p5-----------------------/11----------|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+                                                                              
+
+|-8-5---8-5---8-5---8-5---8-5---88-5---8-5---8-5------------------|
+|-----------------------------------------------------------------|
+|------------------------------------------------5h7^---5--7p5----|
+|-----------------------------------------------------------------|
+|-----------------------------------------------------------------|
+|-(1:26)----------------------------------------------------------|
+                                                                              
+
+|----------------------------------------|
+|----------5---5-7-----------------------|
+|-5555-5-5---5---------------------(3x)--|
+|--------------------4-5---6---7---------|
+|----------------------------------------|
+|-(1:34)---------------------------------|
+                                                                              
+
+|-5---5-----5---5------|
+|-5---5-----5---5------|
+|-5---5-----5---5------|
+|----------------------|
+|----------------------|
+|-(1:45)-fill----------|
+                                                                              
+
+|--------------------------------------------------------------
+|-------5-----5-------5-----5------------5-----5-------5-----5-
+|-----5-----5-------5-------5----------5-----5---------5-----5-
+|-5-7-----6-----5-------4------4-/-7-------6-----5---4---4-----
+|--------------------------------------------------------------
+|-(1:52)-(quiet pat)-------------------------------------------
+                                                                              
+
+-----------------------------------------------------------------|
+--------5-----5-------5-----5-----------5-----5-------5-----5----|
+------5-----5-------5-------5---------5-----5-------5-------5----|
+--7-------6-----5-------4-----4-/-7-------6-----5-------4--------|
+-----------------------------------------------------------------|
+------------------------------(....this part hard to hear....)---|
+
+
+|-5---5-5---5-5-5----------------|
+|-5---5-5---5-5-5---5-5-5-7---5--|
+|-5---5-5---5-5-5---5-5-5-7---5--|
+|---------------------------7----|
+|--------------------------------|
+|-(2:55)-------------------------|
+                                                                              
+
+|---5/12--|
+|---------|
+|---------|
+|-pre-solo|
+|---------|
+|-(3:19)--|
+                                                                              
+solo:
+|-8---5-5-8-5---8---5----5-------------8-8-5-5-8-5----5---------------|
+|---------------------/7---------------------------/7-----------5-----|
+|----------------------------5h7-7p5--------------------5h7^---5-5----|
+|---------------------------------------------------------------------|
+|---------------------------------------------------------------------|
+|-(3:21)--------------------------------------------------------------|
+                                                                              
+
+|-8-8-5-5-8-5---8---5----5-------------8-8---------8------------------|
+|---------------------/7-------------------8h10-10---10-------10-/17--|
+|----------------------------5h7-7p5---------------------/11----------|
+|---------------------------------------------------------------------|
+|---------------------------------------------------------------------|
+|---------------------------------------------------------------------|
+                                                                              
+
+|-15^-15^-15^r--12-12h14--17-----------------5------5------5------5---5-
+|----------------------------13\--------8^-----8^-----8^-----8^-----8^--
+|-----------------------------------------------------------------------
+|-----------------------------------------------------------------------
+|-----------------------------------------------------------------------
+|-(3:36)----------------------------------------------------------------
+                                                                              
+
+-------------------------------------------------------------------------|
+----5---------5-----------------5------5-5-----5-5-----------------------|
+-7^---7-5---5-5-5---8p7b--7^----5-7^-----5-5---5-5-----------------------|
+----------7-------7--------------------------7-----7--/7--5h7p5----------|
+----------------------------------------------------------------7p5---5--|
+--------------------------------------------------------------------8---8|
+                                                                              
+
+|---------5------------------------|
+|-5-------5-5---5-7---7-5---5-5----|
+|-5-----5---5---5-7---7-5---5-5----|
+|-----7-------7--------------------|
+|----------------------------------|
+|-(3:51)---------------------------|
+                                                                              
+
+|-8-5---8-5---8-5---12\5---8-5---10\5---8-5---88-5---8-5---8-5---8-5-5-8-5---
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|-(3:55)---------------------------------------------------------------------
+                                                                              
+
+-8-5-8-8---8-5---8-5----|
+------------------------|
+------------------------|
+------------------------|
+------------------------|
+------------------------|
+
+
+|-5---5-5---5-5-5-----------------5---5---5-5-----------------5\-|
+|-5---5-5---5-5-5---5-5-5-7---5---5---5---5-5---7-----5-------5\-|
+|-5---5-5---5-5-5---5-5-5-7---5---5---5---5-5---7-----5--huh!-5\-|
+|---------------------------7-----------------------7------------|
+|----------------------------------------------------------------|
+|-(4:04)---------------------------------------------------------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/primavera.tab b/guitar/tabs/Santana/primavera.tab new file mode 100644 index 0000000..0c6dc47 --- /dev/null +++ b/guitar/tabs/Santana/primavera.tab @@ -0,0 +1,699 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / primavera.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Sun, 6 Aug 2000 18:39:38 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/primavera.tab
+
+Song: Primavera
+Artist: Santana
+Album:Supernatural
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates rapid picking
+\=slide down
+b=bend «
+^=bend full
+br, ^r=bend &release
+
+Whew! Well this one took a while. I think its the most 
+tab for any song ive ever done.
+
+
+Intro
+|-----------------------------------------------|
+|-8-------------------8-------------------------|
+|-----7-------------7---7-7h8p7-----------------|
+|---------10---8-10-------------10-8-10^r^r-----|
+|-----------------------------------------------|
+|-----------------------------------------------|
+                                                                              
+
+
+|---------------------------------------8--------|
+|-8----------------------8--10-10-11-11---10-----|
+|-----7---8p7----------7-------------------------|
+|------------10---8-10---------------------------|
+|------------------------------------------------|
+|------------------------------------------------|
+                                                                              
+
+...la semilla
+|-6----------|
+|---8-8-8----|
+|------------|
+|------------|
+|------------|
+|------------|
+ 
+                                                                             
+...esta primavera
+|-10--------------|
+|----8-8-8---11---|
+|-----------------|
+|-----------------|
+|-----------------|
+|-----------------|
+
+                                                                              
+...nueva era
+|-------------------------10-----------------------------
+|-13^-13^-------13-11-13^----11-------11-----------------
+|-------------------------------12-12--------7-6-5-------
+|-------------------------------------------------8p5----
+|--------------------------------------------------------
+|--------------------------------------------------------
+                                                                              
+
+
+--------------------------------------------------------------------
+-------11---------11-----------11^--11h13-13--11h13-13--11h13-13----
+--10h12--12-12-12---------10-12-------------------------------------
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+                                                                              
+
+
+-10//////-13^-13^----|
+---------------------|
+---------------------|
+---------------------|
+---------------------|
+---------------------|
+                                                                              
+...
+...
+...
+...
+...tierra negra
+|-----------------------|
+|-----------------------|
+|-----------------------|
+|-10p8---8-8------------|
+|-----10-----10p8h10----|
+|-----------------------|
+    
+                                                                          
+...vuelve verde
+|-15-15-15-15-15-15-15-15------|
+|------------------------------|
+|------------------------------|
+|------------------------------|
+|------------------------------|
+|-fade-in----------------------|
+          
+                                                                    
+...montanas y el de...
+|---------15-----15----15---15----15-15-15-15-15-15-15\----|
+|-18^-18^----18^----18^--18^--18^-15-15-15-15-15-15-15\----|
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+         
+                                                                     
+...la semilla
+|-------------------|
+|-11h13-11----------|
+|----------12-12----|
+|-------------------|
+|-------------------|
+|-------------------|
+       
+                                                                       
+...esta primavera
+|-10----------------------------|
+|----13-13--11-13p11------11----|
+|-------------------12-12-------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+     
+                                                                         
+...nueva era
+|-13-11-10b-10------------|
+|--------------11---------|
+|-----------------12-12---|
+|-------------------------|
+|-------------------------|
+|-------------------------|
+     
+                                                                         
+...la semilla
+|-10------------------------|
+|----13-13-11-10-------11---|
+|----------------12-12------|
+|---------------------------|
+|---------------------------|
+|---------------------------|
+        
+                                                                      
+...esta primavera
+|----------------------|
+|----11-10-------11----|
+|----------12-12-------|
+|-/12------------------|
+|----------------------|
+|----------------------|
+      
+                                                                        
+...nueva era
+|-15-15-15-15-15-------------------|
+|-15-15-15-15-15-15p13-------------|
+|---------------------15-12-12-12--|
+|----------------------------------|
+|----------------------------------|
+|----------------------------------|
+
+
+...aire de
+|----------|
+|----------|
+|-8-7-5-5--|
+|----------|
+|----------|
+         
+                                                                     
+...nuevo universo
+|-------------------|
+|-------------------|
+|-------------------|
+|---5-7-8-7-7-5-5---|
+|-5-----------------|
+|-------------------|
+     
+                                                                         
+...tierra negra
+|-10--------10-----------|
+|-11--11-13----11--------|
+|-----------------12-12--|
+|------------------------|
+|------------------------|
+|------------------------|
+     
+                                                                         
+...vuelve verde
+|-10-11-10-11-10-11-10-11-10----|
+|---h--p--h--p--h--p--h--p------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+    
+                                                                          
+...montanas
+|-10-10-------10------------15-15----15-15-------15-15-15------------|
+|-11-11-------11------------15-15----15-15----15-15-15-15------------|
+|-------12-------12------17^------17^------17^------------17^r15-----|
+|---------------------------------------------------------------17---|
+|--------------------------------------------------------------------|
+|--------------------------------------------------------------------|
+     
+                                                                         
+...la semilla
+|-13-12-11-10--------------|
+|------------11-------11---|
+|--------------12-12-------|
+|--------------------------|
+|--------------------------|
+|--------------------------|
+   
+                                                                           
+...esta primavera
+|---------------------------------|
+|-13^r-11-13-13-11h13-11--13------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+       
+                                                                       
+...nueva era
+|-15---15---15-------------|
+|-15---15---15---15--------|
+|---17^-------17^--15------|
+|--------------------17----|
+|--------------------------|
+|--------------------------|
+     
+                                                                         
+...la semilla
+|-15--------------|
+|-15--------------|
+|----12-12-12-----|
+|-----------------|
+|-----------------|
+|-----------------|
+      
+                                                                        
+...Lleva nueva vida
+|-13p11p10----10----10--------------|
+|----------13^---13^--11----11------|
+|-----------------------12----------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+          
+                                                                    
+...esta primavera
+|-11-10-13-11-10----10-----------------|
+|----------------13----13^-13^-13^-----|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+         
+                                                                     
+
+|-----------------------15----15-18-17-15-15---
+|-18^18^-----18^----18^----18^-----------------
+|----------------------------------------------
+|----------------------------------------------
+|----------------------------------------------
+|----------------------------------------------
+                                                                              
+
+
+-18p15--15-------------------------------------------|
+------18---------------------------------------------|
+----------17^-17p15---15-17-17^-15-17^--17p15--------|
+-------------------17------------------------17------|
+-----------------------------------------------------|
+-----------------------------------------------------|
+                                                                              
+
+|-20^-18-20-----18-------------18p17p15-18p17p15-18p17p15-18p17p15-
+|------------20-----17-20\-----------------------------------------
+|------------------------------------------------------------------
+|------------------------------------------------------------------
+|------------------------------------------------------------------
+|------------------------------------------------------------------
+       
+                                                                       
+
+-18p17p15-18p17p15-18p17p15-18^///////18^r-15h18p15----15-----15---------
+----------------------------------------------------18^-----15--18p15----
+---------------------------------------------------------------------17^-
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+                                                                              
+
+
+-----------------------------------------|
+-----------------15-------------15-------|
+-17-15----15-17^----17^r-15-------15-----|
+-------17-------------------17-------17--|
+-----------------------------------------|
+-----------------------------------------|
+                                                                              
+
+
+|----------------------------------15---15---------------------------
+|-15-15-17--15-15-17-15-15-17------15---15-----15/////17/////18/////-
+|-15-15-17--15-15-17-15-15-17-17^----17^---17^-15/////17/////--------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+                                                                              
+
+
+-------------------|
+-------------------|
+-12//14//15//17----|
+-------------------|
+-------------------|
+-------------------|
+                                                                              
+
+
+|-----------------------------------------------10-13p10--10-----------|
+|-13^----13^-13^-13^-13^-13^-13^--13-13-13-11-13^-------13--13^13p11---|
+|-------------------------------------------------------------------12-|
+|----------------------------------------------------------------------|
+|----------------------------------------------------------------------|
+|----------------------------------------------------------------------|
+                                                                              
+
+
+|---18-20-18-20-20-18-20-20-18-20-20-18-20-20-18-20-18----20^//////////-
+|-20--------------------------------------------------------------------
+|-----------------------------------------------------------------------
+|-----------------------------------------------------------------------
+|-----------------------------------------------------------------------
+|-----------------------------------------------------------------------
+    
+                                                                          
+
+-/--/--/------3///-----------|
+-----------11\3///-----------|
+-----------------------------|
+-----------------------------|
+-----------------------------|
+-----------------------------|
+    
+                                                                          
+...tierra negra
+|----------------------------|
+|----------------------------|
+|----------------------------|
+|-10--8-10-10--10-8----------|
+|-------------------10-10----|
+|----------------------------|
+          
+                                                                    
+...vuelve verde
+|-------------------------------------------------|
+|-------------------------------------------------|
+|-15--14--12-------12-----------------------------|
+|------------15-12----15-12h15p12--12-------------|
+|--------------------------------15---15p13-------|
+|-------------------------------------------15----|
+       
+                                                                       
+...montanas
+|--------------------|
+|-11-10h11p10--------|
+|-------------12-12--|
+|--------------------|
+|--------------------|
+|--------------------|
+     
+                                                                         
+...bello jardin
+|-13^-13^-13^-13^----------|
+|-----------------11---\---|
+|--------------------------|
+|--------------------------|
+|--------------------------|
+|--------------------------|
+          
+                                                                    
+...la semilla
+|----------------|
+|----------------|
+|----------------|
+|-10^r8-----8----|
+|-------10-------|
+|----------------|
+        
+                                                                      
+...Lleva nueva vida
+|-------------------------|
+|-------------------------|
+|-7-6-5-7p5---7p5---------|
+|----------8p5---8p5-5-5--|
+|-------------------------|
+|-------------------------|
+      
+                                                                        
+...esta primavera
+|-15----------------------------|
+|-15-15-------------------------|
+|-------17-15-17p15-------15----|
+|-------------------17-17-------|
+|-------------------------------|
+|-------------------------------|
+       
+                                                                       
+...nueva era
+|--------------------------------|
+|----------------13-11-----------|
+|----------10-12-------12-12-----|
+|-10-11-12-----------------------|
+|--------------------------------|
+|--------------------------------|
+      
+                                                                        
+...la semilla
+|-----15-15-18----|
+|-/17-------------|
+|-----------------|
+|-----------------|
+|-----------------|
+|-----------------|
+        
+                                                                      
+...Lleva nueva vida
+|-18^--------------18^--18^--18-15h18p15--18-------15-15---
+|---------------------------------------15-------17--------
+|----------------------------------------------------------
+|----------------------------------------------------------
+|----------------------------------------------------------
+|----------------------------------------------------------
+                                                                              
+
+
+---18---15--------15-----------------------------------------------
+-17---17--------18--------------15////////---15/////////---15/////-
+--------------------17^r15---17^----------17^-----------17^--------
+--------------------------17---------------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+                                                                              
+
+
+-------17-18-17-15-----15-15-------15-----18^r-15-15--------------------------
+-15-15-----------------------15h17--------------------------------------------
+----------------------------------------------------------17^17-15-17--15-----
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+       
+                                                                       
+
+----17-18-17-15-------15-------15-----18^////18^/////18^r-
+-15----------------------15-17----------------------------
+----------------------------------------------------------
+----------------------------------------------------------
+----------------------------------------------------------
+----------------------------------------------------------
+      
+                                                                        
+
+---15--15------15--------------|
+-18--18------15--18p15---------|
+---------17^----------15-------|
+------------------------17-----|
+-------------------------------|
+-------------------------------|
+                                                                              
+
+
+--17-18-17-15-15------------15-----18^r-15------------------------------------
+----------------------15-17------------------18p15----15------15--------------
+--------------------------------------------------17^---15------18p17p15------
+----------------------------------------------------------17------------17----
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+      
+                                                                        
+
+|----15-17-18-17-15------------------------18^r-15-15-----
+|-----------------------18-18-15h17-15--------------------
+|-17^-----------------------------------------------------
+|---------------------------------------------------------
+|---------------------------------------------------------
+|---------------------------------------------------------
+                                                                              
+
+-15-----------------------17-18-17-15-----------------------------------------
+----15-----------15-15-15-----------------18ph20p18--17h18p17--15h17p15----15-
+-------17-15-17^--------------------------------------------------------17----
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+--------------------------------------------------------15----15-15-----15----
+------------------------18p15---15///---15///////////------18^------18^-------
+-18p17p15---17p15------------17^-----17^-------------17^----------------------
+---------17------17\----------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+         
+                                                                     
+
+------18p15---------------------------------------------------------------|
+-18^--------18p15--15----------15-----------------------------------------|
+-----------------17--17p15-----15--------15-14----------------------------|
+--------------------------17------17-17--------17p15----------------------|
+----------------------------------------------------17p15-----15^----15---|
+---------------------------------------------------------15h18----18------|
+        
+                                                                      
+
+|------------------------10--------17-18-17-15---20^20^--20^20^--20^20^--20^-
+|-/10-11-10--------11-13----13-----------------------------------------------
+|-----------12---------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+         
+                                                                     
+
+|-20^-20^-20^-20^---20^----18p15-15-15-------------------------------
+|-----------------------------------------17-17-16-16-15-15-14-14-14-
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+                                                                              
+
+
+-17-18-17-15-----15-------15-----18^r-15-15------------------------------
+--------------------15-17-----------------------13brbr--13brbr-11-13brbr-
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+     
+                                                                         
+
+----------------------------------------------------------------
+-11-13-11h13p11--13p11p10--11p10-------------6----8-8-11---8-11-
+--------------------------------12p10-----/7---/9---------------
+-------------------------------------12\------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+     
+                                                                         
+
+-------------------|
+-10/////11/////13\-|
+-------------------|
+-------------------|
+-------------------|
+-------------------|
+                                                                              
+
+
+|--------------------------------------------------------------------
+|-15-15---15-15---15-15--15////////////////17//////////////18\-------
+|----------------------------------------------------------19\-------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+         
+                                                                     
+
+|-17br-15-----15-------------------------------------------------------------
+|----------18----17-15-15h17p15----15---------------------15//-15//----------
+|-------------------------------17----17-15----17p15---------------17p15-----
+|-------------------------------------------17------17\-----------------17---
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+        
+                                                                      
+
+------------------15---15---15---------------|
+-15//----------13^--13^--13^------15^--------|
+-----17p15-----------------------------------|
+----------17---------------------------------|
+---------------------------------------------|
+---------------------------------------------|inaudible
+                                                                              
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/put_your_lights_on.tab b/guitar/tabs/Santana/put_your_lights_on.tab new file mode 100644 index 0000000..6e61b42 --- /dev/null +++ b/guitar/tabs/Santana/put_your_lights_on.tab @@ -0,0 +1,525 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / put_your_lights_on.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Sat, 22 Apr 2000 16:50:20 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/put_your_lights_on.tab
+
+song: put your lights on
+
+artist: santana and everlast
+
+album: supernatural
+
+transcribed by jordan lockert jordanlockert@yahoo.com
+
+Acoustic Guitar 
+Intro
+  Am              C                G              F        E
+|-0---0-0--0-0----0---0-0-0-0-0--------3-0---0----1-1-1-1--0--
+|-1---1-1--0-1----1---3-3-1-0-1--------0-0-3-3----1-1-1-1--0--
+|-2---2-2--2-2----0---0-0-0-0-0----0---0-0-0------2-2-2-2--1--
+|-2---2-2--2-2----2---2-2-2-2-2----0--------------3-3-3-3--2--
+|-0---0-0--0-0----3---3-3-3-3-3----2--------------3-3-3-3--2--
+|----------------------------------3--------------1-1-1-1--0-- 
+
+Ok, you don't have to play the "G" part exactly as shown. I'm 
+just trying to emphasize which strings to play.
+
+Lead Guitar
+Intro
+-|--------------------------------------------------------|
+-|-13p12-10-------------8--------8------------------------|
+-|----------------9-7-9------------/9-7--------7h9--------|
+-|-------------------------------------------------10-10--|
+-|--------------------------------------------------------|
+-|--------------------------------------------------------|
+                                                                              
+Hey now...
+put your lights on
+-|--------------|
+-|-8------------|
+-|---9-7---7h9--|
+-|-------9------|
+-|--------------|
+-|--------------|
+                                                                              
+Hey now
+-|-----------|
+-|-------8-8-|
+-|-9-7-9-----|
+-|-----------|
+-|-----------|
+-|-----------|
+                                                                              
+...
+-|-8p7-----------|
+-|-----8---8h10--|
+-|-------9-------|
+-|---------------|
+-|---------------|
+-|---------------|
+                                                                              
+put ...
+-|---------------------------------------|
+-|---------------------------------------|
+-|-/7---5-7---5-7---5----------------5---|
+-|--------------------7(5)-------5-7---7-|
+-|-----------------------(7)(5)----------|
+-|----------------------------(8)--------|
+
+put ..
+Hey now 
+all ...
+-|-----------------|
+-|-8-6---6---------|
+-|-----9---/9-/9-7-|
+-|-----------------|
+-|-----------------|
+-|-----------------|
+
+
+put your lights on    
+-|-------------------------------------------|
+-|-------------------------------------------|
+-|-9-----------------------------------12h14-|
+-|---10------------9-----10-----12-----------|
+-|------12-/12-------------------------------|
+-|-------------------------------------------|
+
+put your lights on
+Hey now
+-|-----------|
+-|-------8-8-|
+-|-9-7-9-----|
+-|-----------|
+-|-----------|
+-|-----------|
+                                                                              
+all ...
+-|-8p7-----------|
+-|-----8---8h10--|
+-|-------9-------|
+-|---------------|
+-|---------------|
+-|---------------|
+                                                                              
+leave your lights on
+-|-------------------|
+-|-------------------|
+-|-----12-12-12--h14-|
+-|-/14---------------|
+-|-------------------|
+-|-------------------|
+                                                                              
+Better ..
+Cause ..
+-|------------------------|
+-|------------------------|
+-|-14--------------12-----|
+-|--------------------14--|
+-|------------------------|
+-|------------------------|
+                                                                              
+livin ..
+-|--------------------------------|
+-|-10-----------------------------|
+-|----12-9----------------9-------|
+-|---------12-12-10-12b14---10----|
+-|-----------------------------12-|
+-|--------------------------------|
+                                                                              
+Whispering ..
+-|------------------------|
+-|------------------------|
+-|------------------------|
+-|---------------7-10-7-7-|
+-|-/7-7-7-7-7-10----------|
+-|------------------------|
+                                                                              
+Theres ..
+-|-----------------------------------------------------|
+-|-10--------------------------------------------------|
+-|----12-9---------------------------------------------|
+-|---------12-10-12-12p10---10-14p10------10h12p10-----|
+-|-----------------------12---------12------------12---|
+-|--------------------------------------------------12-|
+                                                                              
+She say ...
+-|-------------------------------------|
+-|-------------------------------------|
+-|-/7---/7---/7-5-7---7-5-------5h7p5--|
+-|------------------------7----------7-|
+-|-------------------------------------|
+-|-------------------------------------|
+                                                                              
+Theres ...
+-|------8---------------|
+-|-8-10---10-10---10p8--|
+-|--------------------9-|
+-|----------------------|
+-|----------------------|
+-|----------------------|
+                                                                              
+living ...
+-|-----------------------|
+-|-----------------------|
+-|-7b9-----9-r-r-r-r-7*--|
+-|-----------------------|
+-|-----------------------|
+-|-----------------------|
+*gradually release while picking
+
+Still ...
+-|-------------------------------|
+-|-------------------------------|
+-|-------------------------5-----|
+-|---------------------5-7---7-7-|
+-|-/7--/7--/7--7-7-7-7-----------|
+-|-------------------------------|
+                                                                              
+So let ...
+-|-------15-|
+-|-15b17----|
+-|----------|
+-|----------|
+-|----------|
+-|----------|
+                                                                              
+deep ...
+-|----------------12---------------|
+-|-17r15-13-15b17----13------------|
+-|----------------------14----12---|
+-|------------------------------14-|
+-|---------------------------------|
+-|---------------------------------|
+                                                                              
+God ...
+-|-------------------15b17-15b17-15b17-|
+-|-15-15-15-17-17-17-------------------|
+-|-------------------------------------|
+-|-------------------------------------|
+-|-------------------------------------|
+-|-------------------------------------|
+                                                                              
+Don't ..
+-|-C-------C#------G-------F--------E---|
+-|--------------------------------------|
+-|-5-5-----6-6--------------------------|
+-|-5-5-----6-6-----5-5-----3-3-3-3--2-2-|
+-|-3-3-----4-4-----5-5-----3-3-3-3--2-2-|
+-|(rythem guitar)--3-3-----1-1-1-1--0-0-|
+                                                                              
+solo
+-|-------------------------------------------------|
+-|----13 -----14-----------------------------------|
+-|-----------------------9h10h12-9h10p9--9h10p9--9-|
+-|---------------------------------------------12--|
+-|-------------------------------------------------|
+-|-------------------------------------------------|
+                                                                              
+
+-|------------------------------------------------------
+-|----13wawa--14wawawa-----5-6-8-6--5----5--------------
+-|-----------------------7------------7-----7p5-7b9r7-5-
+-|------------------------------------------------------
+-|------------------------------------------------------
+-|------------------------------------------------------
+                                                                              
+
+----------------------------------------------------
+---------------------------------------------5---5b-
+-7-5-7-5-------------------------5-7-7-5-7b9---7----
+---------7p5-----------------5-7--------------------
+------------7p5---------7-10------------------------
+---------------8---8-10-----------------------------
+
+
+----------------------------------17p15-----17p15---------
+-10wah---10wah---10wah---10wa10wa------17p15-----17p15----
+----------------------------------********************----
+----------------------------------------------------------
+----------------------------------------------------------
+----------------------------------------------------------
+***** mess around with these notes. It's that part that's               
+played really scratchy, with distortion and wah*****
+
+------12-----12-12-13-15-13--12----------|
+-15b17--15b17-------------------15b17~~~-|
+-----------------------------------------|
+-----------------------------------------|
+-----------------------------------------|
+-----------------------------------------|end solo
+                                                                              
+Hey now Hey now Hey now Hey now Hey now
+-|--------------------------------------|
+-|-8-6---6------------------------------|
+-|-----9---/9-/9-7------/9-7------12h14-|
+-|---------------------------10---------|
+-|--------------------------------------|
+-|--------------------------------------|
+                                                                              
+
+-|-----------|
+-|-------8-8-|
+-|-9-7-9-----|
+-|-----------|
+-|-----------|
+-|-----------|
+                                                                              
+Woh oh 
+Hey Now
+-|---------------------------------
+-|-13-------13-12---13-12----------
+-|-------12---------------12-12h14-
+-|---------------------------------
+-|---------------------------------
+-|---------------------------------
+                                                                              
+
+Hey now Hey now Hey now Hey now 
+---------------------------------|
+---------------------------------|
+-------------------12------------|
+-12----12--12h14--------12----12-|
+----15---------------------15----|
+---------------------------------|
+
+Hey now
+-|------8---------------|
+-|-8-10---10-8h10----8--|
+-|--------------------9-|
+-|----------------------|
+-|----------------------|
+-|----------------------|
+                                                                              
+all ...
+-|---------------------|
+-|-8-------------------|
+-|---7h9p7----7h9p7--7-|
+-|---------10------10--|
+-|---------------------|
+-|---------------------|
+                                                                              
+put your lights on
+-|-----------|
+-|-----------|
+-|-----------|
+-|-----10----|
+-|-/12----12-|
+-|-----------|
+                                                                              
+put your lights on
+-|--------------------------|
+-|-10-----------------------|
+-|----9-------------9-------|
+-|------12-10-12b14---10----|
+-|-----------------------12-|
+-|--------------------------|
+                                                                              
+Hey now
+-|------|
+-|-8-10-|
+-|------|
+-|------|
+-|------|
+-|------|
+                                                                              
+all ...
+-|--/8-8-8-8p7-----|
+-|-------------8---|
+-|---------------9-|
+-|-----------------|
+-|-----------------|
+-|-----------------|
+                                                                              
+....
+-|--------------------------|
+-|----8-10-/10-10-/10-10-10-|
+-|-/9-----------------------|
+-|--------------------------|
+-|--------------------------|
+-|--------------------------|
+
+ 
+
+Better ....
+-|-10-12-----12-12-/12-12-/12-12-10-
+-|----------------------------------
+-|----------------------------------
+-|----------------------------------
+-|----------------------------------
+-|----------------------------------
+                                                                              
+livin ...
+--12-10-------------------------------------|
+--------12-9--------------------------------|
+-------------9---------------------------12-|
+---------------12p10p9-------------12-14----|
+-----------------------12p10---/14----------|
+----------------------------12--------------|
+                                                                              
+Whispering ....
+-|------------------------------------------------
+-|-15-12-15-12-15-12-15-12-15-12-15-12--15b17-----
+-|---p--h--p--h--p--h--p--h--p -h--p--------------
+-|------------------------------------------------
+-|------------------------------------------------
+-|------------------------------------------------
+                                                                              
+
+-15-12-15-12-15-12-15-12-15b17--15b17----------12---|
+---p--h--p--h--p--h--p---------------------------15-|
+----------------------------------------------------|
+----------------------------------------------------|
+----------------------------------------------------|
+----------------------------------------------------|
+                                                                              
+There an angel ...
+-|-12--10---------------------------|
+-|---------13-12-13-12-13-10--------|
+-|-----------------------------12p9-|
+-|----------------------------------|
+-|----------------------------------|
+-|----------------------------------|
+                                                                              
+She ...
+-|---------------------------------------------|
+-|---------------------------------------------|
+-|-----12-12-----12-12----14-12----------------|
+-|-/14-------/14-------14-------14----12-------|
+-|---------------------------------15----15-12-|
+-|---------------------------------------------|
+                                                                              
+  la       la la ha    hey la la             ya gotta
+-|------------------------------------------
+-|---------------8--8-----------------------
+-|-/9-------7-9-------------------/9-7------
+-|-------------------------------------10---
+-|------------------------------------------
+-|------------------------------------------
+                                                                              
+shine like a star
+-------------------------------------------|
+-----------------------------8-8---8-10-10-|
+----9-7----7--9-----------/9-----9---------|
+--------10-----10p7---10-------------------|
+-------------------------------------------|
+-------------------------------------------|
+                                                                              
+   la             la la  ha          hey la la          ya gotta
+-|-12-------------10-12--15 ----12----------------------------
+-|--------------------------------15-------15b17--15b17-15b17-
+-|------------------------------------------------------------
+-|------------------------------------------------------------
+-|------------------------------------------------------------
+-|------------------------------------------------------------
+
+ shine like a star                      then fade away
+-12-15-15p12--12---12-------------------------------------|
+------------15--------13------13-15-17--------------------|
+-------------------------14-------------12-12-12-12h14-14-|
+----------------------------------------------------------|
+----------------------------------------------------------|
+----------------------------------------------------------|
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/samba_pa_ti.tab b/guitar/tabs/Santana/samba_pa_ti.tab new file mode 100644 index 0000000..0c19af8 --- /dev/null +++ b/guitar/tabs/Santana/samba_pa_ti.tab @@ -0,0 +1,474 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / samba_pa_ti.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+ _   _  __  ___ ___ __ __   _   _  _      Michael J. Hoffman
+| |_| |/ .\|  =|  =|  V  | / \ | \| |     Encore Computer Corporation
+|_| |_|\__/|_| |_| |_|V|_|/_^_\|_|\_|     mhoffman@encore.com
+"I am logged in, therefore I am."
+
+-------------------------------------------------------------------------
+
+
+
+
+                              Samba Pa Ti
+
+           Music by Carlos Santana from the album "Abraxas"
+
+
+                  Legend of symbols used in this tab:
+
+              5/7               Slide up from fret 5 to 7
+              7\5               Slide down from fret 7 to 5
+              /5                Slide up "from nowhere"
+              5\                Slide down "to nowhere"
+              5b7               Pick fret 5, then bend two frets
+              [5]b7             Bend two frets before picking
+              5b7r5             Pick, bend two frets, release bend
+              5h7               Pick fret 5, hammer on fret 7
+              7p5               Pick fret 7, pull of to fret 5
+              (7)               The note is still ringing from a previous hit
+              ~~~               Left hand vibrato
+              X                 Fret string loosely to mute the sound
+
+
+
+
+
+                     G             Bm             Em
+|-----------------||-------------|---------------|----------------|
+|---------------8-||-------------|-6/7---7h8p7---|----------------|
+|---------7-8h9---||-5h7-----4h7-|---------------|----------------|
+|--7-9-10---------||--------5----|-------------9-|----------------|
+|-----------------||-------------|---------------|----------------|
+|-----------------||-------------|---------------|----------------|
+
+  Am7                G             Bm             Em
+|------------------|-------------|---------------|----------------|
+|----------------8-|-------------|-6/7-7--7h8p7--|----------------|
+|----------7-8h9---|-5h7-----4h7-|---------------|----------------|
+|---7-9-10---------|--------5----|-------------9-|----------------|
+|------------------|-------------|---------------|----------------|
+|------------------|-------------|---------------|----------------|
+
+  Am7                      D             Am7
+|--5h7-5h7p5---------5----|-----7------|--5h7p5h7p5---------------|
+|------------8-(8)p5-8b10-|-----10b12--|------------8----(8)p5----|
+|-------------------------|------------|--------------------------|
+|-------------------------|------------|--------------------------|
+|-------------------------|------------|--------------------------|
+|-------------------------|------------|--------------------------|
+
+  D                [hold]                  Am        Bm
+|-----------------|----------------------|---------|-----------------|
+|-8b10r8p5-5h7p5--|---------5---------5--|---------|------4/5h7------|
+|---------------7-|-(7)------7-5\4/5h7---|---------|-4--7-------4--7-|
+|-----------------|--------------------7-|-(7)-----|-----------------|
+|-----------------|----------------------|---------|-----------------|
+|-----------------|----------------------|---------|-----------------|
+
+  Am                         D         (D)              G
+|-5h7-5h7p5-5---------5----|-(5)----|-----------------|--------------|
+|-------------8-8p5-8-8b10-|-(8b10)-|---------------8-|--------------|
+|--------------------------|--------|---------7-8h9---|-5h7------4-7-|
+|--------------------------|--------|--7-9-10---------|--------------|
+|--------------------------|--------|-----------------|--------------|
+|--------------------------|--------|-----------------|--------------|
+
+  Bm              Em        Am7                G
+|----------------|--------|------------------|--------------|
+|-6/7-7--7h8p7---|--------|----------------8-|--------------|
+|-------------7--|-9------|----------7-8h9---|-5h7-----4-7--|
+|--------------9-|--------|---7-9-10---------|--------------|
+|----------------|--------|------------------|--------------|
+|----------------|--------|------------------|--------------|
+
+  Bm             Em           ~~~~                    Am7
+|---------------|------12---------12-----------------|-5h7-5h7p5-----5----|
+|-6/7-7--7h8p7--|----12---15b17-----14-14b16r14p12---|----------8p5--8b10-|
+|---------------|--12-----------------------------14-|--------------------|
+|-------------9-|------------------------------------|--------------------|
+|---------------|------------------------------------|--------------------|
+|---------------|------------------------------------|--------------------|
+
+ D   ~~~~~~         Am7            D            [hold]                Am
+|-(5)-------7-----|-5h7p5h7p5----|-3/5----------|-------------------|--------|
+|-(8b10)----10b12-|----------8p5-|-----5-5h7p5--|------5----------5-|--------|
+|-----------------|--------------|------------7-|-(7)---7-5\4/5h7---|--------|
+|-----------------|--------------|--------------|-------------------|-7--7/8-|
+|-----------------|--------------|--------------|-------------------|--------|
+|-----------------|--------------|--------------|-------------------|--------|
+
+ Bm                Am                       D                 (D)
+|---------------5h7-5h7p5-5---------5-----|--(5)------5/7-|---(7)-----------|
+|----------------|---------8-8p5-8-[8]b10-|-([8]b10)------|-----------------|
+|--7-7--8/9-7-7--|------------------------|---------------|-----------------|
+|-9---9------9---|------------------------|---------------|-----------------|
+|----------------|------------------------|---------------|-----------------|
+|----------------|------------------------|---------------|-----------------|
+
+                      (w/Fill 1 these 2 measures.........)
+  G                   Bm          Bbm Am                    D
+|------------7-7-----|-(7)----------|--------5h7-5h7p5----|----------5------|
+|---8-8-8-10---10b12-|(10b12)--7----|-(7)-------------8-7-|-(7)-7-8---------|
+|--------------------|---------9b11-|-(9b11)--------------|-----------------|
+|--------------------|--------------|---------------------|-----------------|
+|--------------------|--------------|---------------------|-----------------|
+|--------------------|--------------|---------------------|-----------------|
+
+                Fill 1:
+                                ~~~~~~~~~~~~~~~~~~
+               |----10-------12--------|------------12------|
+               |----13b15----15b17-----|--------------------|
+               |-----------------------|--------------------|
+               |-----------------------|--------------------|
+               |-----------------------|--------------------|
+               |-----------------------|--------------------|
+
+                      (w/Fill 2 these three measures...............)
+  G                   Bm           Bbm Am
+|-----------7-7-----|-(7)-----------|--------------5h7-5h7p5-----|---------5-|
+|--8-8-8-10---10b12-|-(10b12)--7----|------------------------8-7-|-(7)-7-8---|
+|-------------------|----------9b11..(hold)....r9----------------|-----------|
+|-------------------|---------------|----------------------------|-----------|
+|-------------------|---------------|----------------------------|-----------|
+|-------------------|---------------|----------------------------|-----------|
+
+               Fill 2:                             (....doubles 1st gtr....)
+                    |-------10------|--------------5h7-5h7p5-----|---------5-|
+                    |-------13b15....(hold)...r13------------8-7-|-(7)-7-8---|
+                    |---------------|----------------------------|-----------|
+                    |---------------|----------------------------|-----------|
+                    |---------------|----------------------------|-----------|
+                    |---------------|----------------------------|-----------|
+
+ Gtr. Solo: double time
+ G               Am             G                    Am    ~~~~~~~~~~~~
+|-----------3-5-|-(5)/7--------|--------------3-5--|------------------------|
+|---3-3-3h5-----|--------------|------3-3-3h5------|--3h5p3----------(3)h5--|
+|---------------|--------------|-------------------|------------------------|
+|---------------|--------------|-------------------|------------------------|
+|---------------|--------------|-------------------|------------------------|
+|---------------|--------------|-------------------|------------------------|
+
+ G               Am             G                    Am
+|-----------3-5-|-(5)/7--(7)\3-|--------------3-5--|--------------------|
+|---3-3-3h5-----|--------------|------3-3-3h5------|--3h5p3-----------3-|
+|---------------|--------------|-------------------|--------------------|
+|---------------|--------------|-------------------|--------------------|
+|---------------|--------------|-------------------|--------------------|
+|---------------|--------------|-------------------|--------------------|
+
+ G                                     Am
+      ~~~~  ~~~~  ~~~~  ~~~~  ~~~~
+|-8h10----10----10----10----10----10-|-(10)-8-7-7p5---------5--7-----|
+|------------------------------------|--------------8-7--8-----------|
+|------------------------------------|----------------------------7--|
+|------------------------------------|-------------------------------|
+|------------------------------------|-------------------------------|
+|------------------------------------|-------------------------------|
+
+  G                       Am                       G
+                                                    ~~~ ~~~ ~~~        ~~~ ~~~
+|-3--------------------|-------0------------7/10-|-10--10--10--7-10-7-10--10-|
+|---3/5\3-5-3b5r3p0----|------0-3p0--------------|---------------------------|
+|------------------2b4-|-(2b4)-----2b4r2p0-------|---------------------------|
+|----------------------|------------------2------|---------------------------|
+|----------------------|-------------------------|---------------------------|
+|----------------------|-------------------------|---------------------------|
+
+  Am                      G                Am
+                                                  ~~~~ ~~~~ ~~~~ ~~~~ ~~~~
+|-(10)-8-7-7p5------5-7-|-3--------12-----|---------------------------------|
+|-------------8-7-8-----|---3/5\3-----15b17r15---15---15---15---15---15-----|
+|-----------------------|-----------------|---------------------------------|
+|-----------------------|-----------------|---------------------------------|
+|-----------------------|-----------------|---------------------------------|
+|-----------------------|-----------------|---------------------------------|
+
+  G                              Am
+~~~~  ~~ ~~                          ~~~~  ~~~~~~~
+|------------------------------|----------------------|
+|(15)-15-15-15p12--------------|----------15--(15)p12-|
+|----------------14b16r14p12---|-12-14b16-------------|
+|---------------------------14-|----------------------|
+|------------------------------|----------------------|
+|------------------------------|----------------------|
+
+  G                                  Am
+|-------------------12-------------|-------------------------------|
+|-15-15b17r15p12-15----15b17r15p12-|-15-15-15----------------------|
+|----------------------------------|----------14b16-14b16r14p12----|
+|----------------------------------|----------------------------14-|
+|----------------------------------|-------------------------------|
+|----------------------------------|-------------------------------|
+
+  G                       Am
+   ~~~~~~  ~~~~~~
+|-----------------------|--------------------12----------------------|
+|-----------------------|------------------12--15p12-----------15b17-|
+|-12----14b16----14b16.....r14--14p12-14b16---------14b16r14p12------|
+|-----------------------|--------------------------------------------|
+|-----------------------|--------------------------------------------|
+|-----------------------|--------------------------------------------|
+
+ G                                         Am
+                                      ~~~
+|-(15b17)r15p12--------------------------|-12-14-14--15-15--17-17--15-15--14-|
+|--------------15b17r15p12---------------|-----------------------------------|
+|-------------------------14b16r14p12----|-----------------------------------|
+|------------------------------------14--|-----------------------------------|
+|----------------------------------------|-----------------------------------|
+|----------------------------------------|-----------------------------------|
+
+ G                           Am
+|-14--12-12\10-12\---------|--------------------------|
+|------------------12h13p12\10h12p10\8-10p8\7-5-----5-|
+|--------------------------|--------------------7b9---|
+|--------------------------|--------------------------|
+|--------------------------|--------------------------|
+|--------------------------|--------------------------|
+
+ G                            Am                      ~~~
+|------5---------------12---|------------12----------------------------|
+|----5-----------15b17------|--12--15b17----14b16r14p12--14b16r14p12---|
+|-7b9---7b9r7p5/----------14b16-------------------------------------14-|
+|---------------------------|------------------------------------------|
+|---------------------------|------------------------------------------|
+|---------------------------|------------------------------------------|
+
+ G        ~~~         Am
+|-------------17b19-|-[17]b19r17p15-17-17------12h14-|
+|-------------------|---------------------17\--------|
+|-12-14b16----------|--------------------------------|
+|-------------------|--------------------------------|
+|-------------------|--------------------------------|
+|-------------------|--------------------------------|
+
+ G                                    Am
+|-15p14p12-14p12\10-12p10-8-7-5-3-5-|-5-------5h7p5-------------5--/11/12---|
+|---------------------------------5-|---5-7/8-------8-8\7p5---5-------------|
+|-----------------------------------|----------------------7b9--------------|
+|-----------------------------------|---------------------------------------|
+|-----------------------------------|---------------------------------------|
+|-----------------------------------|---------------------------------------|
+
+ G                         Am              ~~~  G
+|-12\10-10\8-8\7-7\5-5\3-3\2-2p0--------------|---3-5-7-/10\6/7-5-7-|
+|-------------------------|-----3p1-1p0-0-----|---------------------|
+|-------------------------|---------------2---|-0-------------------|
+|-------------------------|-------------------|---------------------|
+|-------------------------|-------------------|---------------------|
+|-------------------------|-------------------|---------------------|
+
+ Am  ~~             G
+|-----------------|-------------------------------------------------------|
+|-------5\3-3h5p3-|-5p3-0h3h5p3p0h3h5p3p0h3h5p3p0h3h5p3p0-3h5p3p0-3h5p3p0-|
+|-7b9r7-----------|-------------------------------------------------------|
+|-----------------|-------------------------------------------------------|
+|-----------------|-------------------------------------------------------|
+|-----------------|-------------------------------------------------------|
+
+  Am                                    G
+|---------------------------------/12-|-22--22-21--21-20--20--19--19\-----|
+|-3h5p3p0-3h5p3p0-3h5p3p0-3h5p3p0-----|-----------------------------------|
+|-------------------------------------|-----------------------------------|
+|-------------------------------------|-----------------------------------|
+|-------------------------------------|-----------------------------------|
+|-------------------------------------|-----------------------------------|
+
+  Am
+|-17-17-15-14-12-----------------|
+|---------------15b17r15p12------|
+|--------------------------14b16-|
+|--------------------------------|
+|--------------------------------|
+|--------------------------------|
+
+ G
+|---12------------12-------------------------12----------------15b17-|
+|-12--15p12-----12--15p12-----12-15p12-----12--15p12-----------------|
+|----------14b16---------14b16--------14b16---------14b16r14p12------|
+|--------------------------------------------------------------------|
+|--------------------------------------------------------------------|
+|--------------------------------------------------------------------|
+
+  Am                                G                  Am   ~~~~
+|-(15b17)r15p12----------------15-|-14-12----------12-|---------------------|
+|--------------12-15--------------|------15p12-15\3---|------------------10-|
+|-------------------14b16r14-12---|-------------------|-14b16r14-12--12\1---|
+|---------------------------------|-------------------|------------14-------|
+|---------------------------------|-------------------|---------------------|
+|---------------------------------|-------------------|---------------------|
+
+ G                       Am               G          Am
+                                               ~~~~    ~~~
+|-7h8----7------7------|-5---0---------0-|-12-10----|-12--12h14-12h14p12----|
+|--h8-10---8-10---8-10-|---5---5-5b7r5---|----------|-----------------------|
+|----------------------|-----------------|----------|-----------------------|
+|----------------------|-----------------|----------|-----------------------|
+|----------------------|-----------------|----------|-----------------------|
+|----------------------|-----------------|----------|-----------------------|
+
+ G                        Am                       G
+   ~~~                ~~~~~~~~~~~                   ~~~
+|-----------------------|---------12h14-12h14p12-|-------------------|
+|-15--12-15-15b16r15b17-|-(15b17)----------------|-15--12-15p12------|
+|-----------------------|------------------------|-------------14b16-|
+|-----------------------|------------------------|-------------------|
+|-----------------------|------------------------|-------------------|
+|-----------------------|------------------------|-------------------|
+
+ Am
+|-------------------------------------------------------------|
+|-------------------------------------------------------------|
+|-(14b16)r14p12-14b16r14p12-14-[14]b16r14p12-14-[14]b16r14p12-|
+|-------------------------------------------------------------|
+|-------------------------------------------------------------|
+|-------------------------------------------------------------|
+
+ G (Begin to fade)
+|-------------------------------------------|
+|------12-----12-----12-----12-----12-15b17-|
+|-14b16--14b16--14b16--14b16--14b16---------|
+|-------------------------------------------|
+|-------------------------------------------|
+|-------------------------------------------|
+
+ Am
+|-12-------12----------------------12-12\---------------------|
+|--------12--15p12---------------12---12\---------------------|
+|---14b16---------14b16r14p12--12-----12\-X\-------/X-X\------|
+|----------------------------14-------------\X\---/-----\-----|
+|----------------------------------------------\X/------------|
+|-------------------------------------------------------------|
+
+ G                   Am              G
+|-3p2-0-------------|--------------|---3-5---5-3---2/-|
+|-------3-0---------|--------------|-------5-----3----|
+|-----------0-------|--------------|------------------|
+|-------------4-0-2-|--------------|------------------|
+|-------------------|-0-2--2p0-----|------------------|
+|-------------------|----------3-0-|-3----------------|
+
+  Am                            G               Am
+|-12-----------------------12\10-10\7-7\5-5\3-3h5p3---------------------0--X/|
+|----------------------------|-----------------|---5-3b5r3p0---------0-0-0-X/|
+|--14b16r14p12-14b16r14p12---|-----------------|------------2b4r2p0-0-2------|
+|-------------------------14-|-----------------|-------------------2---------|
+|----------------------------|-----------------|-----------------------------|
+|----------------------------|-----------------|-----------------------------|
+
+  G                                                 Am
+|-12------------------------12--------12---X\-12-15b17-17b19-19b22\-22b23-|
+|---15-12-----------------12--15p12-X---15-X\------|----------------------|
+|--------14b16r14p12-14b16-------------------------|----------------------|
+|--------------------------------------------------|----------------------|
+|--------------------------------------------------|----------------------|
+|--------------------------------------------------|----------------------|
+
+ G
+|-7p5-3p2----------------|
+|---------5-3/5b7r5p3--3-|
+|------------------------|       Fade to black.........Whew!!!!!!!!!
+|------------------------|
+|------------------------|
+|------------------------|
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/shes_not_there.tab b/guitar/tabs/Santana/shes_not_there.tab new file mode 100644 index 0000000..2a21c2f --- /dev/null +++ b/guitar/tabs/Santana/shes_not_there.tab @@ -0,0 +1,283 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / shes_not_there.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 13 Sep 2000 15:55:26 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/shes_not_there.tab
+
+Song: She's Not There
+Artist: Santana
+Album: Best of Santana
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates rapid picking
+\=slide down
+b=bend «
+^=bend full
+br, ^r=bend &release
+
+Intro. not sure what instrument this is
+|----------------------------------------------------|
+|-----3----------------------------3--------3--------|
+|---3---5------------------------3---5---------------|
+|-5----------------3-5---------5----------------3-5--|
+|----------------5----------------------------5------|
+|----------------------------------------------------|
+                                                                              
+
+Guitar
+|--------------------------------|
+|--------------------------------|
+|--------------------------------|
+|--8-10^-r-^-r-^--10^-10^--8-----|
+|--------------------------------|
+|-(0:58)-------------------------|
+                                                                              
+
+
+|--------------|
+|--------------|
+|--------3-----|
+|------3---5---|
+|--3h5---------|
+|-(1:03)-------|
+                                                                              
+
+
+|------------------------|
+|-13^-----11-13^-11\-----|
+|------------------------|
+|------------------------|
+|------------------------|
+|-(1:06)-----------------|
+                                                                              
+
+
+|---------------------|
+|-------------11------|
+|-------10h12----12---|
+|-10h12---------------|
+|---------------------|
+|-(1:10)--------------|
+                                                                              
+
+
+|-13--------13------------------|
+|-13^-------13--11--13^-11h13---|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+|-(1:13)------------------------|
+
+
+
+|--------------------|
+|--------------------|
+|----------3h5-3-----|
+|-3h5-55-------------|
+|--------------------|
+|-(1:13)-------------|
+                                                                              
+
+
+|--13----13----13------------|
+|--13^---13^---13^---11------|
+|----------------------12----|
+|----------------------------|
+|----------------------------|
+|-(1:21)---------------------|
+                                                                              
+
+
+|--------------------------------------------15^---|
+|-13^----13^----13^----13^----13^----13^-----------|
+|--------------------------------------------------|
+|--------------------------------------------------|
+|--------------------------------------------------|
+|-(1:25)-------------------------------------------|
+                                                                              
+
+
+|------------|
+|------------|
+|------------|
+|-555-3-5----|
+|------------|
+|-(1:30)-----|
+                                                                              
+
+solo:
+|-----------------------------------------------------------|
+|-18-------18--18--18---------------------------------------|
+|-17^------17^-17^-17^-----15---------15-17-17^-15--17\-----|
+|----------------------------17-----------------------------|
+|-----------------------------------------------------------|
+|-(1:41)----------------------------------------------------|
+                                                                              
+
+
+|-18^-----18^--18^--18^--18^-18^r--15----15-----15-------------------------
+|-------------------------------------18----18^----18p15-------------------
+|--------------------------------------------------------17p15----15h17^---
+|--------------------------------------------------------------17----------
+|--------------------------------------------------------------------------
+|-(1:47)-------------------------------------------------------------------
+                                                                              
+
+
+-----------------------------------13-------13-------13-------13-----13----13-
+-15---18p15------------------------15-------15-------15-------15-----15----15-
+------------17^---17p15----15h17^------17^------17^------17^------17^---17^---
+------------------------17----------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+----13----13----13----13-----------------------------|
+----15----15----15----15-18--18--18------------------|
+-17^---17^---17^---17^---17^-17^-17^--17-15h17-15----|
+-----------------------------------------------------|
+-----------------------------------------------------|
+-----------------------------------------------------|
+
+                                                                              
+
+|-18p15----15-18p15----15-18p15----15-18^-----18^--18-15-----|
+|-------18----------18----------18---------------------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+|-(1:59)-----------------------------------------------------|
+
+                                                                              
+
+|-15p13--------13------------------------------------------------------------
+|------15-13h15---13--13-15--------------------------------------------------
+|-------------------15-----15-15-17^--17^--17^--17^--17^--17^--17^--17^--17^-
+|-------------------------------------**************************************-
+|-------------------------------------gradually make bends higher then lower-
+|-(2:02)-----------------------------------listen to the song to get it------
+                                                                              
+
+
+------------------------------------------------15----------------------
+---------------------------------------------------18p15----------------
+--15-17-17--15-17-17--15-17-17--15-17-17-15-17^----------17--15-15-17---
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+-(2:08)-----------------------------------------------------------------
+
+                                                                              
+
+-----------------------|
+-----------------------|
+-15--15h17-15h17-15----|
+-----------------------|
+-----------------------|
+-----------------------|
+
+I didn't really like the way the song changes after this
+so i didnt do it but it's Gm pentatonic
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/smooth.tab b/guitar/tabs/Santana/smooth.tab new file mode 100644 index 0000000..de5bb8e --- /dev/null +++ b/guitar/tabs/Santana/smooth.tab @@ -0,0 +1,514 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / smooth.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Wed, 26 Jul 2000 17:26:39 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/smooth.tab
+
+artist: Santana & Rob Thomas
+song: Smooth
+album: supernatural
+
+tablature explanation:
+h=hammer on
+p=pull-off
+/=slide up(or fast pick)
+\=slide down
+^=bend full
+b=bend half
+^r or br=bend and release  
+transcribed by jordanlockert@yahoo.com
+
+This is the long version of this song. If you are listening to 
+the shorter version,omit the bars that are labeled "skip"
+
+intro
+|-----------------------------
+|-----------------------------
+|-------12----12h14-----------
+|-12h14----14-----------------
+|-----------------------------
+|-----------------------------
+                                                                              
+
+
+------------------------------------
+-------12-12br-----12-13------------
+-13-14----------14-------14---------
+------------------------------------
+------------------------------------
+------------------------------------
+                                                                              
+
+
+------------------------------
+------------------------------
+--------------12--------------
+-12^-12^-12^-----12p10--------
+------------------------------
+-SKIP-------------------------
+                                                                              
+
+
+-----------------------------|
+-----------------------------|
+-----------------------------|
+-12p10p9---------------------|
+---------12-11-12-/14-12-----|
+-SKIP------------------------|
+                                                                              
+
+Man...
+Like...
+I...
+...cool 
+|----------------------------------------------------|
+|-------------------12h13p12-15-13-12-------12-------|
+|-------------------------------------14-13----13-14-|
+|--------------12h14---------------------------------|
+|---------12h15--------------------------------------|
+|-12--15---------------------------------------------|
+                                                                              
+
+
+...Mona Lisa 
+|----------------|
+|-15^-15^-15--17-|
+|----------------|
+|----------------|
+|----------------|
+|----------------|
+                                                                              
+
+
+...groove 
+|----12--15p12--12----------12------|
+|-15^---------15--15--13-15----15^--|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+                                                                              
+
+And...
+I would...
+...mood
+|-----------------------------|
+|-----------------12-13p12----|
+|--------------14----------14-|
+|-12////-14-15----------------|
+|-----------------------------|
+|-----------------------------|
+   
+
+
+...so smooth                                                                         
+|----12----12-15p12--12--------------------------------|
+|-15^---15^--------15 -13--15p13-15p13-15p13-15p13-----|
+|---------------------------------------------------14-|
+|------------------------------------------------------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+                                                                              
+
+And...
+Well...
+You... 
+Gimme...
+...about it 
+|----------------------------------------------------
+|-----------------12-12br----12-13--------------15^--
+|-/14-------13-14----------14-----14-----------------
+|----------------------------------------------------
+|----------------------------------------------------
+|----------------------------------------------------
+                                                                             
+
+
+-------------------|
+------15^r13-------|
+-------------14----|
+-------------------|
+-------------------|
+-------------------|
+  
+
+
+...shame                                                                             
+|--------|
+|--------|
+|--------|
+|-/14-12-|
+|--------|
+|--------|
+                                                                              
+
+
+In...
+...me out
+|------------------------------------------------------|
+|-------------------12-13-12--13p12--------------------|
+|-------------12-14-----------------14-14-13-14-13-14--|
+|-12h14-12h14------------------------------------------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+                                                                              
+
+
+Out...
+You...
+...and round
+|----12--15p12--12----------12------|
+|-15^---------15--15--13-15----15^--|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+ 
+
+And if...
+I would...
+...your mood                                                                         
+|-------------------------------------|
+|--------------12-13---15-13-15-13-15-|
+|-----------14------------------------|
+|-12-14-15----------------------------|
+|-------------------------------------|
+|-------------------------------------|
+
+ 
+
+...so smooth                                                                         
+|----12----12-15p12--12----------------------------|
+|-15^---15^--------15--15--15p13-15p13-15p13-15p13-|
+|--------------------------------------------------|
+|--------------------------------------------------|
+|--------------------------------------------------|
+|--------------------------------------------------|
+                                                                              
+
+
+|-----------------------------------------------------------
+|-------------------------------12------------------12--13--
+|----------14-----------------------------------14----------
+|-----------------------------------------------------------
+|-----------------------------------------------------------
+|-----------------------------------------------------------
+..........just.................under............well........
+                    
+
+
+-----------------------------------------------
+----------------------15-----------------------
+-----------------------------------------------
+-----------------------------------------------
+-----------------------------------------------
+-----------------------------------------------
+.....................get.......................
+                               
+
+
+---12h13p12------12-----------------------5\-------------
+-----------15p13----13-15-13-15-15-13-----6\-------------
+------------------------------------------5\-------------
+------------------------------------------7\-------------
+------------------------------------------5\-------------
+---------------------------------------------------------
+..kinda.lovin.............................gimme...........                       
+
+ 
+
+-5---------7\--------------------------|
+-6---------9\--------------------------|
+-5---------7\--------------------------|
+-7---------9\--------------------------|
+-5---------7\--------------------------|
+---------------------------------------|
+make......real.......................                                        
+
+ 
+
+Solo!
+|---------------------------------------------------------
+|-----------------12br---------------------------12-13-12-
+|-14-------13--14------14-------16p14p13------13----------
+|------------------------------------------14-------------
+|---------------------------------------------------------
+|-SKIP----------------------------------------------------
+                                                                              
+
+
+-----------------------------------------------------------|
+----------12------12-12h13-12----13p12---------------------|
+-14----------13---------------13-------14------------------|
+--------------------------------------------/14-/14-12-14--|
+-----------------------------------------------------------|
+-SKIP------------------------------------------------------|
+                                                                              
+
+
+|-15^-15^-15^r-12----12----19br-17---12h15p12------
+|-----------------15-------------------------15-17-
+|--------------------------------------------------
+|--------------------------------------------------
+|--------------------------------------------------
+|--------------------------------------------------
+                                                                              
+
+
+------------------17-19-20-19-20-19-20-19-20-19-20-19-20-19-
+-13-15h17p15----17------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+                                                                              
+
+
+-20-19-20^--////20p17---17------------17--------------
+---------------------20^------20^-20^----20p17--17----
+----------------------------------------------19--19^-
+------------------------------------------------------
+------------------------------------------------------
+------------------------------------------------------
+                                                                              
+
+
+---17-------------------------------------------------
+-17--20p17-------------------------5-5-5555-6666-7777-
+----------19^r17--17-19\-------------------------------
+----------------19------------------------------------
+------------------------------------------------------
+------------------------------------------------------
+                                                                              
+
+
+--------------------------------|
+-8888-9999-10101010-11111111-12-|
+--------------------------------|
+--------------------------------|
+--------------------------------|
+--------------------------------|
+                                                                              
+
+REPEAT CHORUS
+
+
+outro
+|------------------------------------------------------------
+|-----------------12-12br----12-13----------15^--------------
+|-/14-------13-14----------14------14----------------/14-----
+|------------------------------------------------------------
+|------------------------------------------------------------
+|------------------------------------------------------------
+                                                                              
+
+
+------------------------12-------------------------------|
+-------12-12br----12-13---13-12h13p12--------------------|
+-13-14----------14--------------------14p12h14-----------|
+---------------------------------------------------------|
+---------------------------------------------------------|
+---------------------------------------------------------|
+                                                                              
+
+
+|------------------------------------------------------------
+|-17-17-17-17-17-17----15------17-17-17-17-17-17----17-------
+|-17-17-17-17-17-17-16---------17-17-17-17-17-17-16----------
+|------------------------------------------------------------
+|------------------------------------------------------------
+|------------------------------------------------------------
+                                                                              
+
+
+-12----12-15--12h15p12--12-------------17---17---17-
+----15^---------------15--15^-------15^--15^--15^---
+----------------------------------------------------
+----------------------------------------------------
+----------------------------------------------------
+----------------------------------------------------
+                                                                              
+
+
+----17----17----17----17--19-19-19-19^r--17-17-|
+-15^---17----17----17--------------------------|
+-----------------------------------------------|
+-----------------------------------------------|
+-----------------------------------------------|
+-----------------------------------------------|
+                                                                             
+
+
+-----17----17---17-----19-19-20^20^--19p17-----
+--20^---20^ 20^--------------------------------
+-----------------------------------------------
+-----------------------------------------------
+-----------------------------------------------
+-----------------------------------------------
+                                                                              
+
+
+-15-12h15p12--12--------------------------------------------
+------------15---17p13--13-15^15-13--15-13-15-13-15-13-15\--
+----------------------14------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------------
+-13-----------------------12-13-12-15-12--------------------
+---14-14---------------14-----------------14----------------
+-------------14-12--14-------------------------15-14-12h14--
+------------------------------------------------------------
+------------------------------------------------------------
+                                                                              
+
+
+|----------------------------------12-12------------20p19p17-
+|-------------------------12-13-15---------------17----------
+|--------------------12-14--h--h-----------------------------
+|------12-14-15-14-15--h-------------------------------------
+|-12-15--h--h--p--h------------------------------------------
+|---h---------(all solid sixteenths)-------------------------
+                                                                              
+
+
+-20p19p17-20p19p17-20p19p17-20p19p17-20p19p17-20p19p17-20p19p17-
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+
+ 
+
+-20p19p17-20p19p17-20p19p17-20p19p17-20p19p17-22--22p20p19-22p20p19-
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+
+ 
+
+-22p20p19-22p20p19-22^////////////////r^////--20h22-------------
+---------------------------------------------------22--20h20-20-
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+
+ 
+
+-----------------------------------------|-17----------------17-19---
+-20h22-22--20h22p20----------------------|---------18-17---17--------
+-------------------21p19h21p19-----------|---------------------------
+------------------------------22p19------|---------------------------
+-----------------------------------------|---------------------------
+-----------------------------------------|---------------------------
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/soul_sacrifice.tab b/guitar/tabs/Santana/soul_sacrifice.tab new file mode 100644 index 0000000..b46f14d --- /dev/null +++ b/guitar/tabs/Santana/soul_sacrifice.tab @@ -0,0 +1,319 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / soul_sacrifice.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Fri, 13 Oct 2000 15:23:43 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/soul_sacrifice.tab
+
+Author/Artist: Santana
+Title: Soul Sacrifice
+Album: Best of Santana
+Transcribed by: jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up
+\=slide down
+b=bend half
+^=bend full
+br, ^r=bend & release
+
+CD times are at the bottom of each line.
+
+Intro:
+|----------------5------------5-------------|---5--555------------|-------------------------------
+
+|----------------5------------5-------------|---5--555--7--5------|-5-------5--5--7-------5--5--5-|
+|-5------------0-5----------0-5--------5----|---5--555--7--5--5\--|-5-------5--5--7-------5--5--5-|
+|-7------------------------------------7----|---7--777--7--5--7\--|-7-------7--7--7-------5--5--7-|
+|-------------------------------------------|-----------------7\--|-7-------7--7----------------7-|
+|-0-17---------0-21---------0-24-------0-28-|--0-31---------------|-(0-39)------------------------|
+
+
+|---------7--------------------------------------------------------------|
+|-5-5-8p5-7----------5-5-----------------5-5-8p5-7-----------5-5---------|
+|------------------------5----5----------------------------------5----5--|
+|---------------------------7---------------------------------------7----|
+|------------------------------------------------------------------------|
+|-0-45-------------------------------------------------------------------|
+                                                                              
+
+|---8--8-8-8p5-------8-8-5-----------------8--8-8--8-5------------5--5h8p5-|
+|-5--------------------------------------5--------------------5h8----------|
+|--------------------------7^r-5-------------------------------------------|
+|--------------------------------------------------------------------------|
+|--------------------------------------------------------------------------|
+|-0-52---------------------------------------------------------------------|
+                                                                              
+
+|-8--12--8-----------5h8--5-----------10h12---10h12-----------------5h8p5-|
+|------------------5-----------------x-------x-------13---------5h8-------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|------------------------------------arp----------------------------------|
+|-0-59--------------------------------------------------------------------|
+                                                                              
+
+|-12--15--12----------5---5h8p5---------------------|
+|-----------------5h8--(8)-------------5-5-8p5-7----|
+|---------------------------------------------------|
+|---------------------------------------------------|
+|---------------------------------------------------|
+|-1-06----------------------------------------------|
+                                                                              
+
+|-----------------------------------------------12-12h17--|
+|---------------10-12-12-12-13-13h15--15-15/17------------|
+|--------9h11h12------------------------------------------|
+|-9h10h12-------------------------------------------------|
+|---------------------------------------------------------|
+|-1-11----------------------------------------------------|
+                                                                              
+
+|-17p12-17p12-17p12-17p12-17p12-17-17-17p12-17p12p-17p12--1717--1717-etc-17\-|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|-1-14-----------------------------------------------------------------------|
+                                                                              
+
+|-5---5---5---5-5-x-x--5---5---5---7p5\--------|
+|-5---5---5---5-5-x-x--5---5---5---7p5\--------|
+|-5---5---5---5-5-x-x--5---5---5---7p5\ -(2)---|
+|----------------------------------------(2)---|
+|----------------------------------------(0)---|
+|-1-24-----------------------------------------|
+                                                                              
+
+At 2:38 repeat intro Chords (start at 0:31)
+
+
+|-5---5---5---5---|
+|-5---7---5---5---|
+|-5---7---5---5---|
+|-----------------|
+|-----------------|
+|-2-52------------|
+                                                                              
+
+|---------------------------------------------|
+|-5h8---5-7-----5------------8---5-7-----5----|
+|-------------7------------------------7------|
+|---------------------------------------------|
+|---------------------------------------------|
+|-2-58----------------------------------------|
+                                                                              
+
+|-5h7---5---7p5--------------7---5---7p5------|
+|---------------8----------5-------------8----|
+|---------------------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+|-3-06----------------------------------------|
+                                                                              
+
+|-----12---10---12p10----------------12---10---12p10-----|
+|---------------------13-----------------------------13--|
+|-9-9------------------------------9---------------------|
+|--------------------------------------------------------|
+|--------------------------------------------------------|
+|-3-12---------------------------------------------------|
+                                                                              
+
+|-/12--12-17-12-17-12-17-12-17-12-17--14--1717--1717--1717--1717p12-1717p12 -|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|----------------------------------------------------------------------------|
+|-3-19-----------------------------------------------------------------------|
+                                                                              
+
+|-17-19-19-17-17-17--15-15--14-14--12-12------------------------|
+|------------------------------------------15-15--13-13--12-12--|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+|-3-23----------------------------------------------------------|
+                                                                              
+
+|----------------------------------------------------|
+|-13p12------------13p12------------13p12------------|
+|-------14p12h14---------14p12h14---------14p12h14---|
+|----------------------------------------------------|
+|----------------------------------------------------|
+|-3-26-----------------------------------------------|
+                                                                              
+
+|-7h8p7p5h7---5-------------|
+|-----------8---8-7-6-5-----|
+|----------------------7p5--|
+|---------------------------|
+|---------------------------|
+|-3-29----------------------|
+                                                                              
+
+|-------------------7-7-8-8-8/10-10/12-12---12-12-12--|
+|------------7-8-10-----------------------------------|
+|--------7-9------------------------------------------|
+|-7-9-10----------------------------------------------|
+|-----------------------------------------------------|
+|-3-31------------------------------------------------|
+
+
+|-12-0-0-12-0-0-12-0-12-12-0-0-0-12-0-0-0-10-0-0-0-8-0-0-0-7-0-0-0--|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-3-34---------------play with a slight palm mute-------------------|
+                                                                              
+
+|-5--7-------------------|-----5---7-------------------|-------5--7------------------|
+|-------8p5-7--8--5---5--|---5--------8p5-7--8--5---5--|---5-5-------8p5-7--8--7---7-|
+|-------------------7----|------------------------7----|-------------------------5 --|
+|------------------------|-----------------------------|-----------------------------|
+|------------------------|-----------------------------|-----------------------------|
+|-3-37-------------------|---3-40----------------------|---3-44----------------------|
+                                                                              
+
+Pay with these chords for the next minute or so:
+|-5---x-x-5---x-x----------|
+|-5---x-x-4---x-x-5---7-5--|
+|-5---x-x-5---x-x-5---7-5--|
+|-----------------7--------|
+|--------------------------|
+|-3-48---------------------|
+                                                                              
+
+|-----------------------------5-5-7-7-8-8-10-10/12---17p12t17p12t17-etc--|
+|-----------------------5-7-8------------------------******************--|
+|(7^r-5--)-------4--5-7--------------------------------------------------|
+|(------7)----7-------------------------------------*tap real fast with--|
+|(-------)-------------------------------------------your pick maybe a --|
+|(quietly)----5-39-----------------------------------dozen times or so.--|
+                                                                              
+
+|--------------------------------------|
+|----5--5--5-5-5-5-5-5-5-5-5-5-5-5-5-5-|
+|-5--5--5--5-5-5-5-5-5-5-5-5-5-5-5-5-5-|
+|----------7-7-7-7-7-7-7-7-7-7-7-7-7-7-|
+|------------7-7-7-7-7-7-7-7-7-7-7-7-7-|
+|-5-40---------------------------------|
+
+Repeat intro part at 5:48
+                                                                              
+|------------------------|
+|-----5---5-7-7---5-7-5--|
+|-5---5---5-7-7---5-7-5--|
+|-7---5---5-7-7---5-7-5--|
+|-7----------------------|
+|-(6:00)-----------------|
+                                                                              
+
+|-5------------|
+|-5--end with--|
+|-5------------|
+|--------------|
+|--------------|
+|-6-07---------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/supernatural_bonus_track.tab b/guitar/tabs/Santana/supernatural_bonus_track.tab new file mode 100644 index 0000000..d46cff7 --- /dev/null +++ b/guitar/tabs/Santana/supernatural_bonus_track.tab @@ -0,0 +1,512 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / supernatural_bonus_track.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Thu, 20 Jul 2000 18:26:16 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/supernatural_bonus_track.tab
+
+Artist: Santana
+Title: Bonus Track
+Album: Supernatural
+Transcribed by: jordanlockert@yahoo.com
+
+tablature explanation:
+h=hammer-on
+p=pull-off
+^=bend full
+r=release bend
+/////// indicates rapid picking
+
+the tab is divided into sections by breaks in the music, 
+not by time measurements, although they often start at 
+the beginning of the count. I like the melody of the 
+introduction. 
+
+Intro: classical guitar
+|------------------------------------------------------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+|---0-2-3---------2-2-2-----------2-3-2-2h3p2----------|
+|-0-----------0-------------0-4-5------------4h5-------|
+|---------------4--------------------------------------|
+                                                                              
+
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+|-0-2-3---2-3-2-3-5-2h3p2-2----0-2-3---2-3-2-3-5-2h3p2-2---|
+|------------------------5----------------------------5----|
+|----------------------------------------------------------|
+                                                                              
+
+|-----------------------------------0-3-0---3-3-1-1--1-------|
+|-------------------------------3-2-------2----------3-------|
+|-----------------2-3---2-3-2-3----------------------2-------|
+|-2-3-5---4-5-4-5--------------------------------------------|
+|------------------------------------------------------------|
+|------------------------------------------------------------|
+                                                                              
+
+|-----5-5-----5-5-----------|
+|---6-----6-------6---------|
+|-7---------7-------7-7-----|
+|---------------------------|
+|---------------------------|
+|---------------------------|
+                                                                              
+
+|----5-8-6--5-6--5h6p5-8-------------------------|
+|-6-8-----------------8--8-8-8-6-8-6-5-6-5-------|
+|------------------------------------------7-7---|
+|------------------------------------------------|
+|------------------------------------------------|
+|------------------------------------------------|
+                                                                              
+
+|-----------|
+|-----------|
+|---7-9-10--|
+|-7---------|
+|-----------|
+|-----------|
+                                                                              
+
+|--------------------------------|
+|--------------------------------|
+|----9-10-12-10-9-10-12--10-12---|
+|-12-----p--p--p-h--h------------|
+|-12-----------------------------|
+|--------------------------------|                                                                
+            
+
+|----------|
+|-10-8-10--|
+|----------|
+|----------|
+|----------|
+|----------|
+                                                                              
+
+|-----------------------10------------------------------------------|
+|-10-10-10-11-13-13--13----13-11-10-11-10h11p10--10-------10--------|
+|----------------------------------------------12---12-12----12-12--|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+                                                                             
+
+|------------------------10---
+|----8---------8-8-10-10------
+|-10---10-9-10----------------
+|-----------------------------
+|-----------------------------
+|-----------------------------
+
+
+-10///12///13//////15//////17/////////18///17////15//13//---|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+                                                                              
+
+Electric
+|------------------------------------------------------------10-----
+|*-10-10----10----------10-13-10-----10-10----10----------10---10---
+|--10-10----10-12-10-12-10-----------10-10----10-12-10-12-10--------
+|-------------------------------------------------------------------
+|*------------------------------------------------------------------
+|-------------------------------------------------------------------
+                                                                              
+
+-------------------------------10-------|
+-10-10----10----------10-11-13---10----*|
+-10-10----10-12-10-12-10-----------12---|
+----------------------------------------|
+---------------------------------------*|
+----------------------------------------|
+                                                                              
+
+im not sure if this is played on piano or guitar 
+or somethiing else, but here it is anyway
+|--------------------------------------5------|
+|---5-6----------6--------8-6--------8---6----|
+|-7-------------------------------------------|
+|--------------7------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+                                                                              
+
+|-----5--------6-5------------5------555-6-5-----5-----|
+|-6-8---------------------6-8----------------6----8----|
+|----------------------------------------------7-------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+|------------------------------------------------------|
+                                                                              
+
+back to guitar
+|--------------------------------------|
+|--------8---10---8-8-6---8-8-8^r------|
+|-7-10-7---7----7-------7---7----10p7--|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+                                                                              
+
+|-----------13-------------------13--|
+|-/15-15-15-----/-15-15-15-15-15-----|
+|------------------------------------|
+|------------------------------------|
+|------------------------------------|
+|------------------------------------|
+                                                                              
+
+|-13^///////////13^-13^--13^r10---|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+|---------------------------------|
+                                                                              
+
+|-18p17-17-17--18p17-17-17-------------|
+|--------------------------18-18\------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+                                                                              
+
+|-----15--17-15-17-----------18-17---------------15--17-15-17---
+|-18-----------------------------------------18-----------------
+|---------------------------------------------------------------
+|---------------------------------------------------------------
+|---------------------------------------------------------------
+|---------------------------------------------------------------
+                                                                              
+
+-17-17-18-17-------17-15-------13-13-13-13-13----------|
+-------------18-15----------------------------15\------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+-------------------------------------------------------|
+
+
+freedom
+freedom
+freedom
+|-10----------------------|
+|-10-13-10----------------|
+|---------/12-12-10-12----|
+|-------------------------|
+|-------------------------|
+|-------------------------|
+                                                                              
+
+...get up
+|---------|
+|---6-----|
+|-7---7---|
+|---------|
+|---------|
+|---------|
+                                                                              
+
+...stand up
+|-------------|
+|---8^r6------|
+|-7------7----|
+|-------------|
+|-------------|
+|-------------|
+                                                                              
+
+...lets celebrate
+|--------------------------------5------|
+|-6-------10---8---6---8^r6--6-8--6-----|
+|---7-7-7----7---7---7-----7-------7----|
+|---------------------------------------|
+|---------------------------------------|
+|---------------------------------------|
+                                                                              
+
+freedom
+|-------------13----|
+|-13h15-15-15-------|
+|-------------------|
+|-------------------|
+|-------------------|
+|-------------------|
+                                                                              
+
+...talkin' bout freedom
+|-10--------------------------------------|
+|-10-13-10-------------10-----------------|
+|---------/12-12-10-12--------------------|
+|----------------------------12-12p10-----|
+|------------------------------------12---|
+|-----------------------------------------|
+                                                                              
+
+...redemption
+|----------------------------10p8-----------------|
+|--------8---10---8--------8-----10p8----8--------|
+|-7-10-7---7----7---7-10-7-----------10p7-10p7----|
+|-------------------------------------------------|
+|-------------------------------------------------|
+|-------------------------------------------------|
+                                                                              
+
+freedom
+|--------------13--|
+|-13^-------/15----|
+|------------------|
+|------------------|
+|------------------|
+|------------------|
+                                                                              
+
+...don't you 
+want freedom
+|-15^------13-15----13-13-h15---|
+|----------------15-------------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+                                                                              
+
+...liberation
+|-18-17-18-17-18-17-18-17-18-17-18-17---17---------------------|
+|---p--h--p--h--p--h--p--h--p--h--p-----18-18-18-18------------|
+|------------------------------------------17-17-17-19-19-19\--|
+|--------------------------------------------------------------|
+|--------------------------------------------------------------|
+|--------------------------------------------------------------|
+                                                                              
+
+freedom
+|--------|
+|-13^----|
+|--------|
+|--------|
+|--------|
+|--------|
+
+
+...don't you 
+want freedom
+|-13^--13^--13^-13^-13^r10--10101010-13---|
+|-------------------------13--------------|
+|-----------------------------------------|
+|-----------------------------------------|
+|-----------------------------------------|
+|-----------------------------------------|
+                                                                             
+
+...celebration
+|-10-------10-------------------------------|
+|-10-13-10----13-10-13-13p10----------------|
+|---------------------------12-12ph12-------|
+|------------------------------------/12----|
+|-------------------------------------------|
+|-------------------------------------------|
+                                                                              
+
+...lets celebrate
+|--------------------|
+|-------------6------|
+|---5-55-55-----7----|
+|-7---------7--------|
+|--------------------|
+|--------------------|
+                                                                              
+
+...lets celebrate
+|-10-------10---------------------------------|
+|-10-13-10----13-10h13p10---------------------|
+|------------------------12p10-12p10--10h12---|
+|-----------------------------------12--------|
+|---------------------------------------------|
+|---------------------------------------------|
+                                                                              
+
+...gonna celebrate
+|-10-----------------------|
+|----8^r^r^r^r---6h8-------|
+|-------------------7------|
+|--------------------------|
+|--------------------------|
+|--------------------------|
+                                                                              
+
+...celebrate
+|-------------------------------|
+|-8^r^r^r---8^r6-8^r6-----------|
+|---------------7----7-5-7------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+                                                                              
+
+Oh yeah
+|---5-------5-------------------|
+|-----8---6---8---6p5----6------|
+|-7------------------7-7--------|
+|-------------------------------|
+|-------------------------------|
+|-------------------------------|
+                                                                              
+
+|-10-----------------------------|
+|---10------10-------------------|
+|-----12--10--12--10p9---10------|
+|----------------------12--12----|
+|--------------------------------|
+|--------------------------------|
+                                                                              
+
+|-10-------------------------------10h13p10---------|
+|---10------10----------------10h13--------13p10----|
+|-----12--10--12-----10--10h12----------------------|
+|------------------12--12---------------------------|
+|------------------------------not-sure-about-this--|
+|---------------------------------------------------|
+                                                                             
+
+|---------------------------------------10----------------------------
+|-----6---8---8^--8--6-8-8p6----6---8--------8p6-8-8p6----6---8---10--
+|-7-------------------------7-------------------7-----7---------------
+|---------------------------------------------------------------------
+|---------------------------------------------------------------------
+|---------------------------------------------------------------------
+                                                                              
+
+-------------------------------10/////----------------|
+--10h11p10h11p10-10/////11/////-----------------------|
+--------------------------------------9/////10////----|
+------------------------------------------------------|
+------------------------------------------------------|
+------------------------------------------------------|
+                                                                              
+
+|-17-----18-15h17-15----15-17-15-17-----18-15h17-15----15-17-15-17---
+|--------------------18-----------------------------18---------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+|--------------------------------------------------------------------
+                                                                              
+
+--18-15h17-15---15-17--17------------20^--17-20^--17-20^--17-20^---
+--------------18---------18-18-18-18-------------------------------
+-------------------------19-19-19-19-------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+now there's some weird effects and noise that play as it fades out 
+
+
+ 
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/victory_is_won.tab b/guitar/tabs/Santana/victory_is_won.tab new file mode 100644 index 0000000..28368af --- /dev/null +++ b/guitar/tabs/Santana/victory_is_won.tab @@ -0,0 +1,310 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / victory_is_won.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Fri, 24 Jan 2003 11:40:47 -0600
+From: Bill Kohut <BKOHUT@cejka.com>
+Subject: s/santana/victory_is_won.tab      
+
+
+Artist: Santana
+Song: Victory is Won
+Album: Shaman
+Transcribed by: bkohut@cejka.com
+
+
+      h - hammer on
+      p - pull off
+      
+      / - slide up
+      \ - slide down
+      ~ - vibrato 
+      
+
+Melody C major Pentatonic or A minor Pentatonic
+
+
+
+		   Fmaj7  /     /     /     /     /    /      /
+
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G------------12-12-|-14-12-14-~~~~~~~-----|-----12-h-14-12-------|
+D------14-14-------|----------------------|-----------------12---|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+ Cmaj7 /    /    /   /     /    /     /	   Fmaj7  /    /   /   /
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G------------------|----------------12-12-|-14-12-14~~~~~~~~-----|
+D-14-14~~~~~~~~~~~-|-------14-14-14-------|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+Fmaj7     /   /   /  Cmaj7 /    /    /      /     /    /     /	 
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G-----12-14-12-----|----------------------|---------12h14-12---9-|
+D---------------12-|--14-14~~~~~~~~~~~~---|------------------5---|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+Dm   /    /     /   /     /    /      /	   Am  /    /    /    /
+
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G-7----------------|-------7/9-9\7--5-----|-5--5-----------------|
+D------------------|--------------------7-|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+ /     /   /   /   Fmaj7  /     /     /     /     /    /      /
+
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G------------12-12-|-14-12-14~~~~~~~~~~~~~|-----12-14-12---------|
+D------14-14-------|----------------------|-----------------12---|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+ Cmaj7 /    /    /   /     /    /     /	   Fmaj7  /    /   /   /
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G------------------|-------------------12-|-14-12-14-------------|
+D-14-14~~~~~~~~~~~-|----------14-14-14----|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+Fmaj7     /   /   /  Cmaj7 /    /    /      /     /    /     /	 
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G-----14-14-12-----|----------------------|---------12h14--12--9-|
+D---------------12-|--14-14---------------|------------------5---|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+Dm   /    /     /   /     /    /      /	   Am  /    /    /    /
+
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G-7---7/9-9\7--5---|----------7/9-9\7--5--|-5--5-----------------|
+D|---------------7-|---------------------7|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+/     /   /    /   Fmaj7  /     /     /     /     /    /      /
+
+E------------------|----------------------|----------------------|
+B--------12-h-3-12-|----------------------|----------------------|
+G-----12-----------|-14-12-14-------------|-----12-h-14-12-------|
+D------------------|----------------------|-----------------12---|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+ Cmaj7 /    /    /   /     /    /     /	   Fmaj7  /    /   /   /
+E------------------|----------------------|----------------------|
+B------------------|-----------12-h-13-12-|----------------------|
+G------------------|---------12-----------|-14-12-14-------------|
+D-14~~~~~~~~~~~~~~-|----------------------|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+Fmaj7     /   /   /  Cmaj7 /    /    /      /     /    /     /	 
+E------------------|12-12~~~~~~~~~~\------|----------------------|
+B--------------13--|----------------------|----------------------|
+G-----14-14-14-----|----------------------|---------12h14--12--9-|
+D------------------|----------------------|------------------5---|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+Dm   /    /     /   /     /    /      /	   Am  /    /    /    /
+
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G-7----7/9-9\7--5--|-------7/9-9\7--5-----|--5--5----------------|
+D----------------7-|--------------------7-|----------------------|
+A---------------- -|-------------------- -|----------------------|
+E------------------|----------------------|----------------------|
+
+/   /    /     /    Fmaj7  /     /     /     /     /    /      /
+		    Organ Solo
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G------------------|----------------------|----------------------|
+D------------------|----------------------|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+Cmaj7 /    /    /      /     /    /     /  Repeat Chords 7 x  
+					   Through Solo
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G------------------|----------------------|----------------------|
+D------------------|----------------------|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+/     /   /    /   Fmaj7  /     /     /     /     /    /      /
+
+E------------------|----------------------|----------------------|
+B-------12-h-13-12-|----------------------|----------------------|
+G-----12-----------|-14-12-14-------------|-----12-h-14-12-------|
+D------------------|----------------------|-----------------12---|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+ Cmaj7 /    /    /   /     /    /     /	   Fmaj7  /    /   /   /
+E------------------|----------------------|----------------------|
+B------------------|-----------12-h-13-12-|----------------------|
+G------------------|---------12-----------|-14-12-14-------------|
+D-14~~~~~~~~~~~~~~-|----------------------|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+Fmaj7     /   /   /  Cmaj7 /    /    /       Solo Not Transcribed 
+E------------------|12~12~~~~~~~~~~\------|----------------------|
+B--------------13--|----------------------|----------------------|
+G-----14-14-14-----|----------------------|----------------------|
+D------------------|----------------------|----------------------|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+
+
+
+Am  /    /    /     Dm   /    /     /   /     /    /      /	 
+
+E------------------|----------------------|----------------------|
+B------------------|----------------------|----------------------|
+G----12h14--12---9-|-7----7/9-9\7--5------|------7/9-9\7--5------|
+D--------------5---|----------------------|--------------------7-|
+A------------------|----------------------|----------------------|
+E------------------|----------------------|----------------------|
+
+Am
+
+E------------------|    Repeat 3X, Slow fade on last repeat
+B------------------|
+G-5--5-------------|
+D------------------|
+A------------------|
+E------------------|
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/whatever_happens.tab b/guitar/tabs/Santana/whatever_happens.tab new file mode 100644 index 0000000..40764a7 --- /dev/null +++ b/guitar/tabs/Santana/whatever_happens.tab @@ -0,0 +1,204 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / whatever_happens.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 20 Aug 2002 14:25:14 +0100
+From: Richard <richard.walledge@stud.umist.ac.uk>
+Subject: s/santana/whatever_happens.tab
+
+"Whatever Happens" (Jackson/Riley/Williams)
+Performed by Carlos Santana and Michael Jackson
+>From "Invincible" album (2001)
+Transcribed by Richard
+
+
+This took me ages to figure out - quite an ambitious project
+for me, but I think I have about 90% of it nailed. I don't
+usually go for latin stuff, so there are some really high notes
+on here that I don't often play... Anyway, here we go.
+
+
+RAKED INTRO:
+E:-----0------4-------------------
+b:-----0------4-------------------
+g:-----0------5-------------------
+d:-----2------6-------------------
+a:-----2------6-------------------
+e:-----0------4-------------------
+
+
+VERSE 1: "He gives another smile..."   VERSE 2: "Everything..."
+E:--------------------------------     --------------
+b:--------------------------------     --------------
+g:--------------------------------     --------8-----
+d:--------------------------------     ----7-9---9---
+a:--------------------------------     --9---------9-
+e:--------------------------------     --------------
+
+
+CHORUS: "Whatever happens..."          POST-CHORUS
+E:--1----1-2-4-6-6-6--------------     --------------
+b:--3-----------------------------     --------------
+g:--3-----------------------------     --11-11-11s8--
+d:--3-----------------------------     --------------
+a:--1-----------------------------     --------------
+e:--------------------------------     --------------
+
+
+PICKED FILL
+E:---------11--14-----------------
+b:-----11-------------------------
+g:--------------------------------
+d:--------------------------------
+a:--------------------------------
+e:--------------------------------
+
+
+SOLO 1 (sort of)
+E:-11~--12-11-9----------11-11--14--11--11--11-----14-16-18-18--------
+b:--------------7-9-7-------------------------x--?------------?--?--9-
+g:--------------------8-----------------------------------------------
+d:--------------------------------------------------------------------
+a:--------------------------------------------------------------------
+e:--------------------------------------------------------------------
+
+ >Whistle<
+
+SOLO 2
+E:--14p13p11- s t  -14-13-11-13-14x-14s16-14--9-11-14--16-14--18-
+b:----------- e i  ----------------------------------------------
+g:----------- v m  ----------------------------------------------
+d:----------- e e  ----------------------------------------------
+a:----------- n s  ----------------------------------------------
+e:----------- )    ----------------------------------------------
+
+ E:--16-14-11-11--18-19-18-16--16-14-11-11--16-14-11-16--
+ b:------------------------------------------------------
+ g:------------------------------------------------------
+ d:------------------------------------------------------
+ a:------------------------------------------------------
+ e:------------------------------------------------------
+
+
+ECHO BIT
+E:-------14---18---16-------------
+b:--16----------------------------
+g:--------------------------------
+d:--------------------------------
+a:--------------------------------
+e:--------------------------------
+
+
+The OUTRO JAM is a bit fast, and I think it
+goes up to fret 21 on the high E string
+
+
+That's it! If you need them, lyrics can be found on any good MJ page.
+
+The Original Supernaturals Fan-page:
+http://www.geocities.com/kesmaster.geo
+
+Let me know if you disagree with any of this, or if you have figured out
+any other songs... (email address changes, so check to site above for
+current contact details).
+
+Hope you enjoy the song!
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/why_dont_you_and_i.tab b/guitar/tabs/Santana/why_dont_you_and_i.tab new file mode 100644 index 0000000..7759e16 --- /dev/null +++ b/guitar/tabs/Santana/why_dont_you_and_i.tab @@ -0,0 +1,163 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / why_dont_you_and_i.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Mon, 13 Jan 2003 17:32:59 -0600
+From: Aubuchon <aubuchon@sbcglobal.net>
+Subject: s/santana/why_dont_you_and_i.tab
+
+Artist: Carlos Santana feat. Chad Kroeger
+Song: Why Don't You and I
+Album: Shaman
+Transcribed by: Greg Aubuchon (extremeX75@hotmail.com)
+ 
+			**DROPPED D**
+
+|-# of strums
+ 
+This is the part played by Chad Kroeger. It is Dropped-D tuned and distorted.
+The rythm just repeats at every chorus part and during Carlos's Awesome solo.
+
+	||	||	||	
+E-----------------------------------------------------------
+B-----------------------------------------------------------
+G-----------------------------------------------------------
+D-------8-------3-------1-------5---------------------------
+A-------8-------3-------1-------3---------------------------
+E-------8-------3-------1-----------------------------------
+
+
+Steven Williams <steven_w96@hotmail.com> Has already written the folowing:
+This is the intro to the song. I have provided a part of the chorus and 
+rythm, as played by Chad Kroeger.
+
+h - hammer on
+p - pull off
+b - bend string up
+r - release bend
+/ - slide up
+\ - slide down
+ 
+
+E-----------------------------------------------------------
+B-----------------------------------------------------------
+G-7--5---5h7-3---3-2---2-3-2-0-3p2p0---0-0h3---10/12-12-----
+D-----------------------------------------------------------
+A-----------------------------------------------------------
+E-----------------------------------------------------------
+ 
+E-----------------------------------------------------------
+B------------------------------------15-16-15---------------
+G-12-14---14-15---15-17---17-19-17--------------------------
+D-----------------------------------------------------------
+A-----------------------------------------------------------
+E-----------------------------------------------------------
+ 
+E-----------------------------------------------------------
+B-15-16-15-18-16-15-13-15-13-15-16-15-15b16r15--------------
+G-----------------------------------------------------------
+D-----------------------------------------------------------
+A-----------------------------------------------------------
+E-----------------------------------------------------------
+
+
+Thats all I have for now. 
+This is my first tab so please feel free to make corrections.
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/winning.tab b/guitar/tabs/Santana/winning.tab new file mode 100644 index 0000000..ed12150 --- /dev/null +++ b/guitar/tabs/Santana/winning.tab @@ -0,0 +1,209 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / winning.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Thu, 12 Oct 2000 12:54:21 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/winning.tab
+
+Author/Artist: santana
+Title: winning
+Album: Best of Santana
+Transcribed by: jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up
+\=slide down
+b=bend half
+^=bend full
+br, ^r=bend & release
+
+Santana's part in this has a real country flavour to it.
+
+|--------------------------|
+|-10^-------7--------------|
+|-------------9^-9-7-------|
+|--------------------------|
+|--------------------------|
+|-0:06---------------------|
+                                                                              
+
+|-7-10-------------7------------------------------------------------------|
+|------10^-10^-------10-7-------------------------------------------------|
+|-------------------------9^r7---7-9-9^r7-9-7-9^r7-9--------7-9^r7-9-7-9^-|
+|------------------------------9---------------------7-7--9---------------|
+|-------------------------------------------------------------------------|
+|-0:10--------------------------------------------------------------------|
+All of the 9^r7 in the above measure are done real fast
+                                                                              
+
+|-10-13b-13b-10----10--------------------------------------------|
+|---------------13----13-10---------13^---13-10----10------------|
+|---------------------------12^r-10-------------12----10slowbend-|
+|----------------------------------------------------------------|
+|----------------------------------------------------------------|
+|-0:16-----------------------------------------------------------|
+                                                                              
+solo: changes key
+|----------9---------------------------------9--------------------|
+|----12^-----12-9---------------------12^------12-11--------------|
+|-----------------11-9----11^------------------------11^r-9-------|
+|----------------------11-----------------------------------------|
+|-----------------------------------------------------------------|
+|-2:44------------------------------------------------------------|
+                                                                              
+
+|-----12-------9----------------12^---12^-12-10---------------|
+|-12^----12^----12p9-12^--------------------------------------|
+|-----------------------------------------------11^-11-9------|
+|-------------------------------------------------------------|
+|-------------------------------------------------------------|
+|-2:50--------------------------------------------------------|
+                                                                              
+
+|-14^r-12----14--------------14-------------------------------------------|
+|---------14----12-12--------------12^-12----12^--12^-12--12^----12-9-12^-|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-2:55--------------------------------------------------------------------|
+                                                                              
+
+|------------------12-9-----------------------|
+|-12^------14r12-9------12^--12-9-------------|
+|---------------------------------11^-11-9----|
+|---------------------------------------------|
+|---------------------------------------------|
+|-3:03----------------------------------------|
+                                                                              
+
+|--------9------------------------------------|
+|------9---12-9-------------------------------|
+|-11^-----------11^---11-9----9-11^-11^-------|
+|--------------------------11-----------------|
+|---------------------------------------------|
+|-3:07----------------------------------------|
+                                                                              
+
+|-----16--------------------16------------------|
+|-19^----19-17-19-------19^----19-17-19--12-----|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-3:11------------------------------------------|
+                                                                              
+
+|-------9--------9-------9-------9-------9-------9-12-9-------------------|
+|-12^-----9-12^----12^-----12^-----12^-----12^----------12^-12^---14r12-9-|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-------------------------------------------------------------------------|
+|-3:15--------------------------------------------------------------------|
+                                                                              
+
+|-----------------------------------------------|
+|-12^----12-9-12-9------------------------------|
+|------------------11^-11^-11^-11-9-11^r-9------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-3:22-----------------------------faded out----|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/wishing_it_was.tab b/guitar/tabs/Santana/wishing_it_was.tab new file mode 100644 index 0000000..63baead --- /dev/null +++ b/guitar/tabs/Santana/wishing_it_was.tab @@ -0,0 +1,448 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / wishing_it_was.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Sun, 6 Aug 2000 18:41:04 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/wishing_it_was.tab
+
+Song: Wishing It Was
+Artist: Santana & Eagle Eye Cherry
+Album:Supernatural
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates rapid picking
+\=slide down
+b=bend «
+^=bend full
+br, ^r=bend &release
+
+Intro
+|-------------10----------------------------------------------
+|-------10-11----11-10--13-11-10--11-10--10h11-10-------------
+|----12--------------------------------------------12-12------
+|-12----------------------------------------------------------
+|-------------------------------------------------------------
+|-------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+-12-12-12--14-12--14-12----------8-8-10^--10-8-10^--8-------|
+------------------------15----------------------------10----|
+------------------------------------------------------------|
+             
+                                                                 
+...come near
+|-----10------------------|
+|-13---------------11-----|
+|--------12-12--12--------|
+|-------------------------|
+|-------------------------|
+|-------------------------|
+         
+                                                                     
+...death bell rings
+|--------------|
+|-8------------|
+|---7----------|
+|-----10-8-----|
+|----------10--|
+|--------------|
+     
+
+                                                                         
+...tears in me 
+|--------6-----|
+|----8-----8---|
+|-/7---7-------|
+|--------------|
+|--------------|
+|--------------|
+      
+                                                                        
+...life walk by...
+|-----------------------------|
+|-8---------------------------|
+|---7----------------7--------|
+|-----10-8-10-8-10^----8------|
+|------------------------10---|
+|-----------------------------|
+     
+                                                                         
+...wishing it was 
+|---------------------|
+|-8-------------------|
+|---------------------|
+|---10^-10^-10-8------|
+|----------------10---|
+|---------------------|
+      
+                                                                        
+...wishing it was 
+|------------------|
+|-8-6--------------|
+|-7---7-5-7--------|
+|-----------8-5----|
+|------------------|
+|------------------|
+   
+                                                                           
+...here before
+|---------------------|
+|-8-------------------|
+|---------------------|
+|---10^-10^-10-8------|
+|----------------10---|
+|---------------------|
+   
+                                                                           
+...death bell rings
+|---------------|
+|-----11-10-----|
+|-----------12--|
+|-/12-----------|
+|---------------|
+|---------------|
+    
+                                                                          
+...tears in me
+|------------------------------------------------|
+|-11^---11^---11^r-------------------------------|
+|------------------12----------------------------|
+|---------------------12\10----------12----------|
+|---------------------------13-10-13----13-10----|
+|------------------------------------------------|
+          
+                                                                    
+...everyday surprises me
+|-----13-----13-----13-13----13-13--13--13^-------13^---13^-13^-13^-13^r-----
+|-13^----13^----13^-------15-------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+-10----10-------10---------------------------17br-15------15--15---
+----13----11-13----13-----------11--------15------------15--18--18-
+----------------------12-12--12------------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+                                                                              
+
+
+---------------------------------------------------------------
+-15h18p15--15--------------------------------------------------
+---------17---17^r-15---15-17-15h17-15h17-17-17-17-15h17-15h17-
+----------------------17---------------------------------------
+---------------------------------------------------------------
+---------------------------------------------------------------
+                                                                              
+
+
+-----------------------|
+-----------------------|
+-15--------------------|
+----17-15--------------|
+---------17p15---------|
+--------------18p15\---|
+    
+                                                                          
+interlude
+|----------10---------------------------------------------------|
+|----10-11----11--11--10--13--11--10-10--10------11-------------|
+|-12-----------------------------------------12-----12--10-12---|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+|---------------------------------------------------------------|
+  
+                                                                            
+
+|------------------------------------------------------------------
+|-----18------------18-----18-----18----18^---15h17--17p15---15-15-
+|-17^-----------17^----17^----17^----19-------------------17-------
+|------------------------------------------------------------------
+|------------------------------------------------------------------
+|------------------------------------------------------------------
+                                                                              
+
+
+-----------------------------------------------------10h13 -|
+-15-15-15-15----------------------8-----11--8-11--11--------|
+-15-15-15-15-17----------------------10---------------------|
+----------------17-17-17-17---------------------------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+   
+                                                                           
+solo
+|----------------------18^-18^--18^r-15-------15-15--18p15-------
+|---------------------------------------15-18--------------------
+|-5^r3-----3-----------------------------------------------------
+|-----5--5-------------------------------------------------------
+|----------------------------------------------------------------
+|----------------------------------------------------------------
+                                                                              
+
+
+--12b--------12br-12p10--10--------------------10///---10///--10///-
+-----------------------13---13^r-11----11-13^-------13^-----13^-----
+------------------------------------12------------------------------
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+   
+                                                                           
+
+------10-13-10----10--------------------------------------15-18^--------18^---
+--13^----------13----13^-13-11-13-----13p11--11\-------15---------------------
+-------------------------------------------12---------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+   
+                                                                           
+
+--15-18^--15-18^--15-18^--15-18^18^r--15h18p15------------
+-----------------------------------------------18p15------
+----------------------------------------------------17p15-
+----------------------------------------------------------
+----------------------------------------------------------
+----------------------------------------------------------
+   
+                                                                           
+
+--------------------------------------------------------15--15----15-18-17\---
+----15////---15///---15/////-/-/-----15----15-18-15h17---------17-------------
+-17^------17^-----17^-------------------15------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+---18-20-18-20-18-20-18-20-18-20-18-20-18-20^---///////////r--
+-20-----p--h--p--h--p--h--p--h--p--h--p--h--------------------
+--------------------------------------------------------------
+--------------------------------------------------------------
+--------------------------------------------------------------
+--------------------------------------------------------------
+     
+                                                                         
+
+-20-18-20^--22-18---------15------------------------------|
+------------------20--------18p15--------------15---------|
+----------------------------------18-17-15--------15------|
+-------------------------------------------17--------17---|
+----------------------------------------------------------|
+----------------------------------------------------------|
+      
+                                                                        
+...out the tears...
+|-------------------------------|
+|-11--10------------------------|
+|---------12-----10-12-10h12-12-|
+|-------------12----------------|
+|-------------------------------|
+|-------------------------------|
+     
+                                                                         
+...wishing it was 
+|-----------------------------------------10---------------------------------
+|-13^-------r-r-13--13--13--13--13-11-13^----11-13--13---------10h11p10------
+|------------------------------------------------------12--------------12----
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------------------------------
+--11p10p8-11p10p8-11p10p8-8---8-----------------------------------------------
+-------------------------------10p7--------7---------------------------3-5----
+-----------------------------------10p8------10-8--------------------5--------
+---------------------------------------10---------10----8h10------/5----------
+------------------------------***********------------10-----------------------
+   
+
+
+----------6--------------------------------------------------------------
+-8--6--8--6--8/11-11/13-13-15--15-18p15h18-18-18-15-18-18-18-15h17-17-17-
+-7--7--7-----------------------------------------------------------------
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+     
+                                                                         
+
+-------15--18-15-18-15-18-15-18^-------15-18^r-----------15----
+-18-18-------p--h--p--h--p--h------------------20-20--18----18-
+---------------------------------------------------------------
+---------------------------------------------------------------
+---------------------------------------------------------------
+---------------------------------------------------------------
+       
+                                                                       
+
+----------------------------------------|
+-15h18p15--15----------------------18---|
+---------17--17^r-15-17--17-15-17^------|
+----------------------------------------|
+----------------------------------------|
+----------------------------------------|
+                                                                              
+
+
+|-------------------13-12-----12---------------------------------------------
+|-13^r-11-----13h15--------13----15-13-15--10-13-10h11-10--------------------
+|---------------------------------------------------------12-10--------------
+|---------------------------------------------------------------12p10--------
+|--------------------------------------------------------------------13p10---
+|----------------------------------------------------------------------------
+        
+                                                                      
+
+--------------------------|
+--------------------------|
+-------------12//////////-|
+-------12h15--------------|
+-13h15--------------------|
+--------------------------|
+        
+                                                                      
+
+------------------------------------------------------------------
+-15////---15////---15////---15////--16----------------------------
+-------17^------17^------17^---------------------------14///15\---
+---------------------------------------14///15///17///------------
+------------------------------------------------------------------
+------------------------------------------------------------------
+       
+                                                                       
+
+-18^18^--18^--18^--18^--15-18^18^r-15h18p15--15-15-15-------------------------
+-------------------------------------------18----------18p15---15-------------
+------------------------------------------------------------17^--17^-17p15----
+--------------------------------------------------------------------------17--
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+-----------------|
+-15-15-15-15\----|
+-15-15-15-15\----|
+-----------------|
+-----------------|
+-----------------|
+                                                                              
+
+ 
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Santana/yaleo.tab b/guitar/tabs/Santana/yaleo.tab new file mode 100644 index 0000000..6f01b77 --- /dev/null +++ b/guitar/tabs/Santana/yaleo.tab @@ -0,0 +1,487 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / santana / yaleo.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 8 Aug 2000 23:07:41 -0400
+From: jordan L <jordanlockert@yahoo.com>
+Subject: s/santana/yaleo.tab
+
+Song: Yaleo
+Artist: Santana 
+Album:Supernatural
+Transcribed by jordanlockert@yahoo.com
+
+Tablature Explanation:
+h=hammer-on
+p=pull-off
+/=slide up or indicates rapid picking
+\=slide down
+b=bend 1 semitone
+^=bend 2 semitones
+^^=bend 4 semitones (used once)
+br, ^r=bend &release
+Jam key= E minor
+
+There's a few seconds missing from the introduction because my tape got 
+dubbed wrong, but just use the notes shown to figure it out. its just a 
+bit missing. The licks wouldve been easier to figure out without the wah                                         pedal but oh well, I know i got the solo just perfect
+
+
+Intro
+|-----------------------------10----------------10-------10-12p10h12-----|
+|-----------------------10h12----10-------10h12----10-12-----------------|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+
+ 
+
+...en Paris
+|-------------|
+|-------------|
+|------7h9----|
+|-7h9---------|
+|-------------|
+|-------------|
+
+
+                                                                              
+..de mi
+|---------------|
+|-----8-7-------|
+|---9-----7-9---|
+|-9-------------|
+|---------------|
+|---------------|
+
+
+                                                                              
+Yaleo
+|-----------------7--------------|
+|---------------8---8---10-8-----|
+|-----------7-9-------9------9---|
+|-------7-9----------------------|
+|-7--10--------------------------|
+|--------------------------------|
+
+
+                                                                              
+...el isc
+|---------------|
+|-10^-10-8------|
+|----------7-7--|
+|---------------|
+|---------------|
+|---------------|
+
+
+                                                                              
+...partiendo pan
+|--------------------------|
+|---------8-10^-10^--8h10--|
+|-----7-9------------------|
+|-7h9----------------------|
+|--------------------------|
+|--------------------------|
+
+
+                                                                              
+...dame ya
+|-------10------|
+|-10h12----10---|
+|---------------|
+|---------------|
+|---------------|
+|---------------|
+
+
+                                                                              
+Yaleo
+|-7-10-7-10-7-10-7-10-7-10-7-10-7\-----|
+|--h--p-h--p-h--p-h--p-h--p-h--p-------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+
+
+                                                                              
+Yaleo, Yaleo
+|----------------------------------------------------------------------------
+|-----------------------------10^-10p8---------------------------------------
+|-12wah12wah12wah12wah12wah-----------9----12wah12wah12wah12wah12wah---------
+|----------------------------------------------------------------------------
+|--************************-----------------***********************----------
+|----------------------------------------------------------------------------
+*I stop putting this filler with the wah pedal in and just write the licks now                                                                           
+
+
+--------------------------------------------15^---r-12///-15p12---------------
+-15^----15p12-----------------------------------------------------------------
+-------------14^r12--14p12--------------------------------------14^-14p12-----
+-------------------14-----14---------------------------------------------14---
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+------------15p12------------|
+--15^//15^//-----15^//-------|
+-----------------------------|
+-----------------------------|
+-----------------------------|
+-----------------------------|
+                                                                              
+
+
+...wa yo
+|----------------------------------------------------------------------------
+|------------12--------------------------10^--8h10--8h10p8-------------------
+|--------------14p12--14p12-------------------------------9------------------
+|-------------------14-----14------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+--12-12--12-12-----------------------------------------------------|
+--12-12--12-12------------------15^--15p12-------------------------|
+--12-12--12-12----------------------------14^r12--14p12------------|
+------------------------------------------------14-----14-----12---|
+---------------------------------------------------------12h14-----|
+-------------------------------------------------------------------|
+
+                                                                              
+
+|------------------------------------|
+|------------------------------------|
+|---------------------7h9p7h9p7h9p7--|
+|-----------------7h9----------------|
+|----------7---10--------------------|
+|-7---10-----------------------------|
+this is during the quiet part                                                                              
+
+
+Yaleo Yaleo
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|-12wah12wah12wah12wah12wah-----14^r12--12-----------------------------------
+|-------------------------------------14--14---------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+--------------------------------------------
+-------15^----15p12-------------------------
+-------------------14^r12--14p12------------
+-------------------------14-----14----------
+--------------------------------------------
+--------------------------------------------
+                                                                              
+
+
+-15^^-r-12h15p12-12-12-12-12-12-12-12-12-12-15p12-12------12------------------
+-----------------------------------------------------15^----15p12-------------
+-----------------------------------------------------------------14^r12\------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+
+
+                                                                              
+...wa yo
+|-------------------------------------------------9b--9----7-----------------
+|-------------------------------------------------------10-------------------
+|----------------14^-14p12--14p12--------------------------------------------
+|-------------------------14-----14------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------------------------------
+-------12------------------------15^////--------------------------------------
+---------14p12--14p12--------------------12-12wah-----------------------------
+--------------14-----14-------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+Ive got about a third of the piano solo worked out, ill post it later.
+
+guitar solo
+|----------------------------------------------------------------------------
+|-12-----------------------------------------15-12h15p12---------------------
+|----------------12-----------------------14---------------------------------
+|-------------------14-12-14-12--------15------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+------------------------------------------------------------------------------
+-13-12-------------------------------12----12--------13-12--------------------
+-------12-------------------------------14-----------------12-----------------
+----------14-12h14p12--12---------14--------------------------14-12-----------
+---------------------15-------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+-------------------------------12--------15////////////14p12-15///14p12-------
+-------------12-12-13///-15///------------------------------------------------
+-------12-14------------------------------------------------------------------
+-14-15------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+
+                                                                              
+
+-15p14p12-15p14p12-15p14p12---------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------12^12^---/////12-10-12^r10-12p10--14------------
+--------------------------------------------------------------12--------------
+                                                                              
+
+
+-20^-------/-15-20^20^--15-20^20^--15-20^20^--15-20^20^--15-20^20^--15-20^20^-
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+-15-20^20^--15-20^-15-20^-20^-20^///----|
+----------------------------------------|
+----------------------------------------|
+----------------------------------------|
+----------------------------------------|
+----------------------------------------|
+                                                                              
+
+
+|-22^22^22^22^------22^22^22^22^------22^22^22^22^------22^22^22^22^---------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+-22^22^22^-22-^22^22^-22-^22^22^-repeat---------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+|-24^*////////////////////////-------------|
+|------------------------------------------|
+|------------------------------------------|
+|------------------------------------------|
+|------------------------------------------|
+|-*=3semitones-----------------------------|
+
+
+                                                                              
+Yaleo
+Yaleo
+Yaleo
+Yaleo
+|--------------------------------------------------------12------------------
+|-15^---15p12---------------------------------------12h15--------------------
+|------------14^-14p12-------------12----14p12--------------14p12------------
+|---------------------14---x-x-x-x----14------14-----------------14----------
+|----------------------------------------------------------------------------
+|----------------------------------------------------------------------------
+                                                                              
+
+
+---------------------17^r--15-17^--15---------------------------15------------
+-------------------------------------17-17-17-17-17-17-17-17-17---------------
+-x-x-x-x-12-------------------------------------------------------------------
+------------14----------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+------12------------------------------------12-----12-------------------------
+--------15p12--------------------------12h15--12h15--15p12--------------------
+-------------14p12--14p12-------12------------------------14p12\--------------
+------------------14-----14-------14------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+|----------------------------------------------------17-----17------20^--------
+|-10b15------r10-r10-r10-r10-r10----------------17h19--20p17--20p17------------
+|------------------------------------------------------------------------------
+|------------------------------------------------------------------------------
+|------------------------------------------------------------------------------
+|------------------------------------------------------------------------------
+                                                                              
+
+
+--------------------------------------------------------22-19-22-19-22-19-22--
+-14br-12-----------------------17///19///20///------22^---p--h--p--h--p--h----
+---------14p12h14^-14p12------------------------------------------------------
+------------------------14--------------------19///---------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+-22^-22^-22^-22^-22^-----------12///---12///----------------------------------
+----------------------------15^-----15^-----------14br-12---------------------
+----------------------------------------------------------14p12---------------
+---------------------------------------------------------------14-------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+-12-----------------------------------------------------------------------12--
+------15p12---------------------------------------------------------------12--
+-----------14^r12--14p12----------------------------12///14^-14p12--12h14^----
+-----------------14-----14----------------------------------------14----------
+--------------------------------12-9-12-9-12-9-12-9---------------------------
+----------------------------------p-h--p-h--p-h--p----------------------------
+                                                                              
+
+
+------------------------------------------22-19-22-19-22-19-22-19-22-
+-15^//////15^//////-------------------22^---p--h--p--h--p--h--p--h---
+---------------------------------------------------------------------
+--------------------14///16///17///19--------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+                                                                              
+
+
+-19////--------------------12----12-------------------------------------------
+--------20--------15^--------15^---15p12--------------------------------------
+----------------------------------------14p12--14p12--12h14^--/-/-/r-r-14^----
+---------------------------------------------14-----14------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                              
+
+
+-------------------|
+-------------------|
+-r-r-r14p12--------|
+-----------14------|
+-------------------|
+-------------------|
+                                                                              
+
+ 
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Sher/Scales/Figure4-2.prj b/guitar/tabs/Sher/Scales/Figure4-2.prj new file mode 100644 index 0000000..ce1b9a4 --- /dev/null +++ b/guitar/tabs/Sher/Scales/Figure4-2.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=Figure4-2.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16) +COMMENT=(0,"This excercise which runs in C Major starting on each subsequent note.. running through all scales from Ionian to Locrian") diff --git a/guitar/tabs/Sher/Scales/Figure4-2.tab b/guitar/tabs/Sher/Scales/Figure4-2.tab new file mode 100644 index 0000000..8bdc65f --- /dev/null +++ b/guitar/tabs/Sher/Scales/Figure4-2.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|--------------------------------------------------------------------------- +B|--------------------------------------------------------------------------- +G|--------------------7---------------------------------7-9-10-9-7----------- +D|-------------7-9-10---10-9---------------------7-9-10------------10-9-7---- +A|------7-8-10---------------12-10-8-7----7-8-10--------------------------10- +E|-8-10--------------------------------10------------------------------------ + + + +E|----------------------- +B|----------------------- +G|-------------7-9-10-12- +D|------7-9-10----------- +A|-8-10------------------ +E|----------------------- + diff --git a/guitar/tabs/Sher/Sequences/Sequence_1.prj b/guitar/tabs/Sher/Sequences/Sequence_1.prj new file mode 100644 index 0000000..2ea9748 --- /dev/null +++ b/guitar/tabs/Sher/Sequences/Sequence_1.prj @@ -0,0 +1,39 @@ +WINTABV1.00 +TABLATURE=Sequence_1.tab +TYPES=(0,4)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,4)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,4)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,4)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16) +RANGE=27;34;Aeolian +COMMENT=(0,"Eb M7 ( I Chord ?)") +COMMENT=(1,"7th of Eb Lydian") +COMMENT=(2,"1st of Eb Lydian") +COMMENT=(3,"3rd of Eb Lydian") +COMMENT=(4,"5th of Eb Lydian") +COMMENT=(5,"7th of Eb Lydian") +COMMENT=(6,"5th of Eb Lydian") +COMMENT=(7,"7th of Eb Lydian") +COMMENT=(8,"5th of Eb Lydian") +COMMENT=(9,"Eb m7 (Minor Tonic I Chord?)") +COMMENT=(10,"2nd in Eb Dorian") +COMMENT=(11,"3rd in Eb Dorian") +COMMENT=(12,"5th in Eb Dorian") +COMMENT=(13,"6th in Eb Dorian") +COMMENT=(14,"2nd in Eb Dorian") +COMMENT=(15,"7th in Eb Dorian") +COMMENT=(16,"2nd in Eb Dorian") +COMMENT=(17,"7th in Eb Dorian") +COMMENT=(18,"Fm7 ( II Chord)") +COMMENT=(19,"1st in F Dorian") +COMMENT=(20,"3rd in F Dorian") +COMMENT=(21,"5th in F Dorian") +COMMENT=(22,"7th in F Dorian") +COMMENT=(23,"2nd in F Dorian") +COMMENT=(24,"7th in F Dorian") +COMMENT=(25,"2nd in F Dorian") +COMMENT=(26,"7th in F Dorian") +COMMENT=(27,"G# minor ( Chord ?)") +COMMENT=(28,"2nd in Ab Aeolian.") +COMMENT=(29,"3rd in Ab Aeolian.") +COMMENT=(30,"5th in Ab Aeolian.") +COMMENT=(31,"7th in Ab Aeolian.") +COMMENT=(32,"4th in Ab Aeolian") +COMMENT=(33,"2nd in Ab Aeolian") +COMMENT=(34,"4th in Ab Aeolian.") diff --git a/guitar/tabs/Sher/Sequences/Sequence_1.tab b/guitar/tabs/Sher/Sequences/Sequence_1.tab new file mode 100644 index 0000000..6153157 --- /dev/null +++ b/guitar/tabs/Sher/Sequences/Sequence_1.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-11-------------------------11-----6-8---9---9-13------8-11---11---11-11-------11- +B|-11----------11----11----11-11-6-7-----6---6---13----9------8----8----12-11-12---- +G|-12-------12----------------11-----------------13-10------------------13---------- +D|-12-12-13-------12----12----11-----------------13---------------------13---------- +A|-13-------------------------13-----------------15---------------------11---------- +E|-11-------------------------11-----------------13--------------------------------- + + + +E|-14---------- +B|----14-11-14- +G|------------- +D|------------- +A|------------- +E|------------- + diff --git a/guitar/tabs/Sher/Sequences/Sequence_2.prj b/guitar/tabs/Sher/Sequences/Sequence_2.prj new file mode 100644 index 0000000..f67bd43 --- /dev/null +++ b/guitar/tabs/Sher/Sequences/Sequence_2.prj @@ -0,0 +1,31 @@ +WINTABV1.00 +TABLATURE=Sequence_2.tab +TYPES=(0,4)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,4)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,4)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16) +COMMENT=(0,"EM7") +COMMENT=(1,"Using E Lydian scale this is a flatted 7th.") +COMMENT=(2,"Using E Lydian scale this is a flatted 7th.") +COMMENT=(3,"Using E Lydian scale this is a flatted 7th.") +COMMENT=(4,"Using E Lydian scale this is a flatted 7th.") +COMMENT=(5,"Using E Lydian scale this is a flatted 7th.") +COMMENT=(6,"4th in E Lydian") +COMMENT=(7,"Using E Lydian scale this is a flatted 7th.") +COMMENT=(8,"4th in E Lydian") +COMMENT=(9,"Ebm7") +COMMENT=(10,"7th in Eb Dorian.") +COMMENT=(11,"7th in Eb Dorian.") +COMMENT=(12,"7th in Eb Dorian.") +COMMENT=(13,"7th in Eb Dorian.") +COMMENT=(14,"7th in Eb Dorian.") +COMMENT=(15,"5th in Eb Dorian.") +COMMENT=(16,"3rd in Eb Dorian.") +COMMENT=(17,"5th in Eb Dorian.") +COMMENT=(18,"Fm7") +COMMENT=(19,"7th in F Dorian") +COMMENT=(20,"7th in F Dorian") +COMMENT=(21,"7th in F Dorian") +COMMENT=(22,"7th in F Dorian") +COMMENT=(23,"7th in F Dorian") +COMMENT=(24,"5th in F Dorian") +COMMENT=(25,"5th in F Dorian") +COMMENT=(26,"3rd in F Dorian") +COMMENT=(27,"7th in F Dorian") diff --git a/guitar/tabs/Sher/Sequences/Sequence_2.tab b/guitar/tabs/Sher/Sequences/Sequence_2.tab new file mode 100644 index 0000000..04e88ca --- /dev/null +++ b/guitar/tabs/Sher/Sequences/Sequence_2.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-7-------------------------11-------------------------13---------------------------- +B|-9----------------11----11-11----------------------11-13---------------------------- +G|-8-------------------12----11-------------------11----13----------------------13---- +D|-9-12-12-12-12-12----------11-11-11-11-11-11----------13-13-13-13-13-13----------13- +A|-7-------------------------13----------------13-------15----------------15-15------- +E|---------------------------11-------------------------13---------------------------- + diff --git a/guitar/tabs/Sher/VoiceLeading/7Alt.prj b/guitar/tabs/Sher/VoiceLeading/7Alt.prj new file mode 100644 index 0000000..6b9af96 --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/7Alt.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Sher\VoiceLeading\7Alt.tab +TYPES=(0,4)(1,4) diff --git a/guitar/tabs/Sher/VoiceLeading/7Alt.tab b/guitar/tabs/Sher/VoiceLeading/7Alt.tab new file mode 100644 index 0000000..0c32498 --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/7Alt.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-5--- +B|-8--- +G|-5-8- +D|-5-7- +A|-6-8- +E|-5-7- + diff --git a/guitar/tabs/Sher/VoiceLeading/C_Diminished.prj b/guitar/tabs/Sher/VoiceLeading/C_Diminished.prj new file mode 100644 index 0000000..4cfda18 --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/C_Diminished.prj @@ -0,0 +1,26 @@ +WINTABV1.00 +TABLATURE=E_Diminished.tab +TYPES=(0,4)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,8)(22,4) +COMMENT=(0,"C diminished chord with a two octave C dimished scale sequence .") +COMMENT=(1,"1st in C Diminished") +COMMENT=(2,"2nd in C Diminished") +COMMENT=(3,"3rd in C Diminished") +COMMENT=(4,"4th in C Diminished") +COMMENT=(5,"5th in C Diminished") +COMMENT=(6,"6th in C Diminished") +COMMENT=(7,"7th in C Diminished") +COMMENT=(8,"8th in C Diminished (It's an eight note scale)") +COMMENT=(9,"1st in C Diminished (2nd octave)") +COMMENT=(10,"2nd in C Diminished") +COMMENT=(11,"3rd in C Diminished") +COMMENT=(12,"4th in C Diminished") +COMMENT=(13,"5th in C Diminished") +COMMENT=(14,"6th in C Diminished") +COMMENT=(15,"7th in C Diminished") +COMMENT=(16,"8th in C Diminished") +COMMENT=(17,"1st in C Diminished (3rd octave)") +COMMENT=(18,"2nd in C Diminished") +COMMENT=(19,"3rd in C Diminished") +COMMENT=(20,"2nd in C Diminished") +COMMENT=(21,"1st in C Diminished.") +COMMENT=(22,"C diminished chord.") diff --git a/guitar/tabs/Sher/VoiceLeading/E_Diminished.prj b/guitar/tabs/Sher/VoiceLeading/E_Diminished.prj new file mode 100644 index 0000000..af2e71d --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/E_Diminished.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Sher\VoiceLeading\E_Diminished.tab +TYPES=(0,4) diff --git a/guitar/tabs/Sher/VoiceLeading/E_Diminished.tab b/guitar/tabs/Sher/VoiceLeading/E_Diminished.tab new file mode 100644 index 0000000..51ea6fa --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/E_Diminished.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-2------------------------------------------------------------2- +B|-1------------------------------------------12-13-15-16-15-13-1- +G|-2------------------------------10-11-13-14-------------------2- +D|-1-------------------9-10-12-13-------------------------------1- +A|-----------8-9-11-12-------------------------------------------- +E|---8-10-11------------------------------------------------------ + diff --git a/guitar/tabs/Sher/VoiceLeading/HalfDiminished.prj b/guitar/tabs/Sher/VoiceLeading/HalfDiminished.prj new file mode 100644 index 0000000..7468100 --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/HalfDiminished.prj @@ -0,0 +1,26 @@ +WINTABV1.00 +TABLATURE=HalfDiminished.tab +TYPES=(0,4)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,8)(22,16) +COMMENT=(0,"A half diminished chord (root position on 6th string).") +COMMENT=(1,"1st in A Half Diminished.") +COMMENT=(2,"2nd in A Half Diminished.") +COMMENT=(3,"3rd in A Half Diminished.") +COMMENT=(4,"4th in A Half Diminished.") +COMMENT=(5,"5th in A Half Diminished.") +COMMENT=(6,"6th in A Half Diminished.") +COMMENT=(7,"7th in A Half Diminished") +COMMENT=(8,"8th in A Half Diminished.") +COMMENT=(9,"1st in A Half Diminished (2nd octave)") +COMMENT=(10,"2nd in A Half Diminished.") +COMMENT=(11,"3rd in A Half Diminished.") +COMMENT=(12,"4th in A Half Diminished.") +COMMENT=(13,"5th in A Half Diminished.") +COMMENT=(14,"6th in A Half Diminished.") +COMMENT=(15,"7th in A Half Diminished.") +COMMENT=(16,"8th in A Half Diminished") +COMMENT=(17,"1st in A Half Diminished(3rd Octave)") +COMMENT=(18,"2nd in A Half Diminished.") +COMMENT=(19,"3rd in A Half Diminished.") +COMMENT=(20,"2nd in A Half Diminished.") +COMMENT=(21,"1st in A Half Diminished.") +COMMENT=(22,"A Half Diminished (Root position on 5th string).") diff --git a/guitar/tabs/Sher/VoiceLeading/HalfDiminished.tab b/guitar/tabs/Sher/VoiceLeading/HalfDiminished.tab new file mode 100644 index 0000000..6026e45 --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/HalfDiminished.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-5---------------------------------5-7-8-7-5---- +B|-8---------------------------6-7-9-----------13- +G|-5---------------------5-7-8-----------------12- +D|-5---------------6-7-9-----------------------13- +A|-6-------5-6-8-9-----------------------------12- +E|-5-5-7-8---------------------------------------- + diff --git a/guitar/tabs/Sher/VoiceLeading/MajorMinor.prj b/guitar/tabs/Sher/VoiceLeading/MajorMinor.prj new file mode 100644 index 0000000..619921b --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/MajorMinor.prj @@ -0,0 +1,35 @@ +WINTABV1.00 +TABLATURE=MajorMinor.tab +TYPES=(0,4)(1,16)(2,4)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,8)(19,2)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4) +COMMENT=(0,"F Minor Major 7 (1st mode of melodic minor scale) root position 6th string.") +COMMENT=(1,"1st in F melodic minor scale.") +COMMENT=(2,"2nd in F melodic minor scale.") +COMMENT=(3,"3rd in F melodic minor scale.") +COMMENT=(4,"4th in F melodic minor scale.") +COMMENT=(5,"5th in F melodic minor scale.") +COMMENT=(6,"6th in F melodic minor scale.") +COMMENT=(7,"7th in F melodic minor scale.") +COMMENT=(8,"1st in F melodic minor scale (2nd octave)") +COMMENT=(9,"2nd in F melodic minor scale.") +COMMENT=(10,"3rd in F melodic minor scale.") +COMMENT=(11,"4th in F melodic minor scale.") +COMMENT=(12,"5th in F melodic minor scale.") +COMMENT=(13,"6th in F melodic minor scale.") +COMMENT=(14,"7th in F melodic minor scale.") +COMMENT=(15,"1st in F melodic minor scale (3rd octave)") +COMMENT=(16,"2nd in F melodic minor scale.") +COMMENT=(17,"3rd in F melodic minor scale.") +COMMENT=(18,"1st in F melodic minor scale.") +COMMENT=(19,"F minor chord.") +COMMENT=(20,"2nd in F melodic minor.") +COMMENT=(21,"4th in F melodic minor.") +COMMENT=(22,"5th in F melodic minor.") +COMMENT=(23,"6th in F melodic minor.") +COMMENT=(24,"7th in F melodic minor.") +COMMENT=(25,"1st in F melodic minor.") +COMMENT=(26,"3rd in F melodic minor") +COMMENT=(27,"F minor major 7 (root position 5th string)") +COMMENT=(28,"Gm7") +COMMENT=(29,"This looks like C7b9 (following chord) but has no 7.") +COMMENT=(30,"C7b9 chord.") +COMMENT=(31,"F minor chord.") diff --git a/guitar/tabs/Sher/VoiceLeading/MajorMinor.tab b/guitar/tabs/Sher/VoiceLeading/MajorMinor.tab new file mode 100644 index 0000000..89a7ce6 --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/MajorMinor.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-1---------------------------0-1-3-4-1-8-------------------8--3-3-8-- +B|-1-----------------------1-3-----------9-----------------9-9--3-5-9-- +G|-1-----------------0-1-3---------------10---------7-9-10---9--3-6-10- +D|-2-----------0-2-3---------------------10----8-10----------10-3-5-10- +A|-3-------1-3---------------------------8--10---------------8--5-3-8-- +E|-1-1-3-4------------------------------------------------------3------ + diff --git a/guitar/tabs/Sher/VoiceLeading/MajorMinor_2.prj b/guitar/tabs/Sher/VoiceLeading/MajorMinor_2.prj new file mode 100644 index 0000000..7766434 --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/MajorMinor_2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Sher\VoiceLeading\MajorMinor_2.tab +TYPES=(0,4)(1,4)(2,4) diff --git a/guitar/tabs/Sher/VoiceLeading/MajorMinor_2.tab b/guitar/tabs/Sher/VoiceLeading/MajorMinor_2.tab new file mode 100644 index 0000000..6dc04aa --- /dev/null +++ b/guitar/tabs/Sher/VoiceLeading/MajorMinor_2.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-10-9--8-- +B|-11-11-10- +G|-11-9--9-- +D|-12-11-10- +A|-10-9--8-- +E|---------- + diff --git a/guitar/tabs/Steely Dan/Josie.prj b/guitar/tabs/Steely Dan/Josie.prj new file mode 100644 index 0000000..041191f --- /dev/null +++ b/guitar/tabs/Steely Dan/Josie.prj @@ -0,0 +1,36 @@ +WINTABV1.00 +TABLATURE=Josie.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4) +COMMENT=(0,"intro sequence") +COMMENT=(5,"entry sequence cont.") +COMMENT=(11,"entry sequence cont.,") +COMMENT=(21,"main melody") +COMMENT=(22,"E9") +COMMENT=(23,"bass line") +COMMENT=(28,"Break beat") +COMMENT=(33,"Break beat part 2") +COMMENT=(40,"solo part 1") +COMMENT=(49,"solo part 2") +COMMENT=(56,"solo part") +COMMENT=(92,"Pull to A") +COMMENT=(93,"Pull to B") +COMMENT=(94,"Pull to B and back to A, pull off to next note") +SEPARATOR=(4,1) +SEPARATOR=(10,1) +SEPARATOR=(20,1) +SEPARATOR=(22,1) +SEPARATOR=(27,1) +SEPARATOR=(32,1) +SEPARATOR=(39,1) +SEPARATOR=(48,1) +SEPARATOR=(55,1) +SEPARATOR=(58,1) +SEPARATOR=(61,1) +SEPARATOR=(67,1) +SEPARATOR=(74,1) +SEPARATOR=(81,1) +SEPARATOR=(84,1) +SEPARATOR=(88,1) +SEPARATOR=(92,1) +SEPARATOR=(96,1) +SEPARATOR=(103,1) diff --git a/guitar/tabs/Steely Dan/any_major_dude.tab b/guitar/tabs/Steely Dan/any_major_dude.tab new file mode 100644 index 0000000..85a0591 --- /dev/null +++ b/guitar/tabs/Steely Dan/any_major_dude.tab @@ -0,0 +1,190 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / any_major_dude.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: Howard Wright (Hman) <spxhaw@thor.cf.ac.uk>
+
+
+      ANY MAJOR DUDE  - STEELY DAN
+     ------------------------------
+
+                  Tabbed and chorded by Howard Wright
+
+     As heard on the "Pretzel Logic" Album   (and a damn fine album it is)
+
+
+INTRO:
+
+E------------------------------------------------------------------------
+B--7--7-7-7--7-8--8-7--8-7---0--0-0-0--0-2--2-0--2-0---7--7-7-7--7-8--8-7-8-7-
+G--7--7-7-7--7-9--9-7--9-7---0--0-0-0--0-2--2-0--2-0---7--7-7-7--7-9--9-7-9-7-
+D--0-------------------------0-------------------------0---------------------
+A------------------------------------------------------------------------
+E----------------------------3--------------------------------------------
+
+Verse:
+
+    A                      Asus2/C#               D
+     I ..
+
+  A                    Asus2/C#               G          A/G  G  A/G  G
+ You ..
+
+  Bm7                F#m7                        G#m7
+Any ..
+
+   Bm7                          F#m7                    G#m7
+Any ...
+
+         Bm7           D/E          Amaj7           Gmaj7       
+When ..
+
+  F#m7     B7    A7         G7              F#m7
+there   ..
+
+ D         G               A5 G5 A5 G5 A5 G5 A5 G5 A5
+  Any    ..
+
+
+(These last chords go over the riff-the last change from G5 to A5 should be
+slid)
+
+The other verses and choruses go as above, and the solo is played over the same
+chords as the verse
+
+There is a middle bit which comes after the third (I think!) chorus
+
+It goes:
+
+ F#m7            G#m7                  Amaj7                C#m7
+I can ..
+
+ F#m7            G#m7               Bm7                   D/E
+You ..
+
+(The solo comes next)
+
+That's all!
+
+
+Howard
+
+Chord Shapes:
+
+ EADGBE     EADGBE     EADGBE    EADGBE    EADGBE    EADGBE
+ x02220     x4220x     xx0232    3x000x    3x222x    x24232
+
+   A        Asus2/C#     D         G         A/G       Bm7
+
+ EADGBE    EADGBE     EADGBE     EADGBE     EADGBE
+ 242222    464444     x7777x     5x665x     3x443x
+
+  F#m7       G#m7       D/E       Amaj7      Gmaj7
+
+
+ EADGBE     EADGBE     EADGBE     EADGBE    EADGBE
+ 7x78xx     5x56xx     3x34xx     57xxxx    35xxxx
+
+   B7         A7         G7        A5        G5 
+
+ EADGBE
+ x46454
+
+   C#m7
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/bad_sneakers.tab b/guitar/tabs/Steely Dan/bad_sneakers.tab new file mode 100644 index 0000000..613c433 --- /dev/null +++ b/guitar/tabs/Steely Dan/bad_sneakers.tab @@ -0,0 +1,246 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / bad_sneakers.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+From: "derek speredelozzi" <deekoist@hotmail.com>
+Subject: s/steely_dan/bad_sneakers.tab
+Date: Sun, 29 Jul 2001 03:02:55 +0000
+
+Date: Sat Jul 28 Jan 2001
+From: deekoist@hotmail.com
+Subject: Bad Sneakers  Steely Dan
+
+
+BAD SNEAKERS
+Becker & Fagen
+
+INTRO CHORDS:
+
+E6           Dmaj7   D6     E6     Dmaj7       C#m7            F#m7
+-0-------------2-----2-------0-------2-----------4---------------
+-2-------------2-----0-------2-------2-----------5--------------2-
+-1-------------2-----2-------1-------2-----------4--------------2-
+-2-------------0-----0-------2-------0-----------6--------------2--
+-2---------------------------2-------------------4--------------x--
+-0---------------------------0----------------------------------2---
+
+            E6       D6    E6   D6
+-------------0--------2-----0----2----------------------------------
+-------------2--------0-----2----0--------------------------------
+-------------1--------2-----1----2--------------------------------------
+-------------2--------0-----2----0--------------------------------------
+-------------2--------------2---------------------------------------
+-------------0--------------0---------------------------------------
+
+
+INTRO TAB:
+
+E6           Dmaj7  D6     E6     Dmaj7       C#m7              F#m7
+------------------------------------------------------------------
+---------------------------------5--------7>9----7------5-h-7-p-5
+-5>6------5>6---5>6---4-----5>6-----6----------------------------
+------------------------------------------------------------------
+------------------------------------------------------------------
+------------------------------------------------------------------
+
+            E6       D6    E6              D6
+------------------------------------------------------------------
+--------------------------------5---------------------------
+-6-4--------5>6------4-----5>6------7-p-6-p-4--------
+-----7--------------------------------------------------------------
+-------------------------------------------------------------------
+-------------------------------------------------------------------
+
+
+
+
+
+
+
+
+VERSE:
+        Names          Hear          Mine                Here
+         A            Bm7(no5)        Bm7                  A
+---------0-------------------------------------------------0------
+---------2--------------3--------------3-------------------2-----
+---------2--------------2--------------2-------------------2-------
+---------2--------------x--------------4-------------------2-------
+---------0--------------2-----------0--2-p-0------2-p-0----0----------
+--0-h-2----------0-h-2--------0-h-2----------2----------2---------------------
+
+
+
+       A                           Bm7(no5)
+Five names that I can hardly stand to hear
+                     Bm7                                A
+Including yours and m....
+....
+....
+
+
+BRIDGE:
+       Go    in'    Insane
+  Dmaj7(2)  C#m7      F#m7       E6
+---5---------4---------2---------0---------------------------------
+---7---------5---------2---------2-----------------------------------
+---6---------4---------2---------1----------------------------------
+---7---------6---------2---------2-----------------------------------
+---5---------4---------4---------2-------------------------------------
+-----------------------2---------0-------------------------------------
+
+  When      Take      Home
+  Dmaj7(2)  C#m7      Bm7       D/E
+---5---------4-----------------------------------------------------
+---7---------5---------7---------7-----------------------------------
+---6---------4---------7---------7----------------------------------
+---7---------6---------7---------7-----------------------------------
+---5---------4---------x---------7-------------------------------------
+-----------------------7-----------------------------------------------
+
+
+    Dmaj7 C#m7   F#m7  E6
+Yes I'm going insane
+        Dmaj7          C#m7           F#m7     E6
+And I'm laugh-in at the f...
+  Dmaj7 C#m7  F#m7   E6
+And I'm so a...
+    Dmaj7             C#m7    Bm7    D/E
+Honey when they gonna t...
+
+CHORUS:
+  Bad       Pi-na      Stompin'      Radio    City
+  C         Am         F              F/G      G11
+--3---------0----------1--------------1------------------------
+--1---------1----------1--------------1---------3-----------------
+--0---------2----------2--------------2---------5---------------
+--2---------2----------3--------------3---------3------------------
+--3---------0----------3--------------x---------x---------------------
+-----------------------1--------------3---------3---------------------
+
+C                   Am
+Bad sneakers and a ...
+Am                        F/G   G11
+Stompin' on the avenue by Radio C....
+C                  Am
+Transistor and a l...
+
+
+    E6      D6   E6             D6
+B--------------------------5------------------------------------
+G--5>6------4----5>6------6-6--4---------------------------
+
+
+OUTTRO:
+         A            Bm7(no5)        Bm7            A/C#       Bm7
+---------0---------------------------------------------------------------
+---------2--------------3--------------3--------------2----------3-------
+---------2--------------2--------------2--------------2----------2--------
+---------2--------------x--------------4--------------2----------4-------
+---------0--------------2-----------0--2-p-0------2-h-4-p-2--0---2-p-0-----
+--0-h-2----------0-h-2--------0-h-2----------2--------------------------2
+
+       Bm7(no5)        Bm7      A
+--------------------------------0----------------------------------------
+----------3----------3----------2--------------------------------------
+----------2----------2----------2----------------------------------------
+----------x----------4----------2-------------------------------------
+--------0-2-p-0------2-p-0------0-----------------------------------------
+-0-h-2----------2----------2-------------------------------------------------
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/bodhisattva.tab b/guitar/tabs/Steely Dan/bodhisattva.tab new file mode 100644 index 0000000..ad87ef6 --- /dev/null +++ b/guitar/tabs/Steely Dan/bodhisattva.tab @@ -0,0 +1,249 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / bodhisattva.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Sun, 22 Dec 2002 16:47:36 +0800
+From: Ian Harris <ijharris@webace.com.au>
+Subject: s/steely_dan/bodhisattva.tab
+
+Artist: Steely Dan
+Song: Bodishattva
+Album: Countdown to Ecstacy
+Tabbed by: Mark Harris (ijharris@webace.com.au)
+Date: 22/12/02
+
+I decided to tab this out as no one had even touched it. i'm not sure
+about the rhythms, but u can pick that up by listening to the song.
+Have fun
+
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D-5--3~~-----------------------------|-5--3~~----------------------------|
+A-5--3~~-----------------------------|-5--3~~----------------------------|
+E-3--1~~-----------------------------|-3--1~~----------------------------|
+
+Intro Piano Chords -
+1st Bar - F   G   F   G G F
+2nd Bar - F   G   F   G G F
+3rd Bar - F   G   F   G G F
+4th Bar - G   F   G   F   G
+
+Intro Bass -
+G F G F G F G F (repeat)
+__________________________________________________________________________
+Guitar melody
+Part one -
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------4--5--|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+
+ (1)   (1)
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G-5b----5b-r----4----5----4----------|-----------------------------------|
+D------------------------------7-----|-5-/-3~~---------------------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+
+Part two -
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------3--5--|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+
+ (1/2) (1/2)
+e------------------------------------|-----------------------------------|
+B-5b----5b-r----3----5----3----------|-----------------------------------|
+G------------------------------5-----|-4-/-2~~---------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+
+Part three (comes in for last two times) -
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------7--8--|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+
+ (1)   (1)
+e------------------------------------|-----------------------------------|
+B-8b----8b-r----7----8----7----------|-----------------------------------|
+G------------------------------9-----|-7-/-5~~---------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+__________________________________________________________________________
+Guitar melody #2
+(All three harmonies shown)
+e------------------------------------|-----------------------------2--3--|
+B------------------------------------|-----------------------------3--5--|
+G------------------------------------|-----------------------------4--5--|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+
+
+e-5---3---5---7---8----7---8----10---|-12---10/8-------------------------|
+B-6---5---6---8---10---8---10---12---|-13---12/10---10~~-----------------|
+G-7---5---7---9---10---9---10---12---|-14---12/10---10~~-----------------|
+D------------------------------------|--------------12~~-----------------|
+A------------------------------------|-----------------------------------|
+E------------------------------------|-----------------------------------|
+
+e-/10---8-/7-------------------------|
+B-/12---10/8---10~~----Stop----------|
+G-/12---10/9---10~~----Stop----------|
+D--------------12~~----Stop----------|
+A------------------------------------|
+E------------------------------------|
+____________________________________________________________________________
+______
+Fill -
+e------------------------------------|
+B------------------------------------|
+G------------------------------------|
+D------0-----------------0-----------|
+A-0h2---------------0h2------7/------|
+E---------7/--3~~----------------3~~-|
+
+____________________________________________________________________________
+______
+Verse -
+   G            x6                       C            x2
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|------------------5-------7--------|
+A-------------------5--------7-------|--3---x---/7-----------------------|
+E--3---x---/7------------------------|-----------------------------------|
+
+   G            x2                      D#
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|----------5-------8----------------|
+A-------------------5--------7-------|--6---x-------------------6--------|
+E--3---x---/7------------------------|-----------------------------------|
+
+   E#                                   Dm            x2
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D-----------7-------8----------------|------------------7----------------|
+A----------------------------8-------|--5---x---8---------------5--------|
+E--5---x-----------------------------|-----------------------------------|
+
+   D#                                   E#
+e------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D-----------5-------8----------------|----------7-------10---------------|
+A--6---x--------------------6--------|--8---x--------------------8-------|
+E------------------------------------|-----------------------------------|
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/chain_lightning.tab b/guitar/tabs/Steely Dan/chain_lightning.tab new file mode 100644 index 0000000..fd02108 --- /dev/null +++ b/guitar/tabs/Steely Dan/chain_lightning.tab @@ -0,0 +1,264 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / chain_lightning.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 14 Nov 2000 08:13:07 -0500
+From: Howard Wright <h.wright@2020speech.com>
+Subject: s/steely_dan/chain_lightning.tab
+
+
+	Chain Lightning - Steely Dan
+	----------------------------
+
+		From the album Katy Lied
+
+		Transcribed by Howard Wright
+		Howard@jmdl.com
+
+
+
+This is yet another Steely Dan "blues with a twist" type of song.
+Pretty simple - just one chord sequence that keeps repeating. The 
+nice thing about the chords is that the triads that are used are very
+similar throughout - it's the use of different bass notes with the same 
+triads that defines the changes in harmony.
+
+The rhythm guitar part basically follows what the vocals do. The only
+difference is that the vocals use different inversions of the same
+triads,
+
+e.g when the guitar plays: [A C# F#]  (xx767x)
+the vocals have:           [C# F# A]  (xxx675)
+
+If you want to play the vocal harmony part on the guitar, just invert
+the triads I've written out (i.e move the bottom note of the triad up
+and octave so it's at the top).
+
+There are short riffs that come between the triad patterns that sound
+like they are played on the same guitar. For clarity, I've written these 
+riffs out as a separate guitar part, though it's not too hard to play 
+both parts together. The tablature above the lyrics is the main triad
+ryhthm guitar part, the tablature underneath the lyrics has the connecting 
+riffs.
+
+Just so it's clear what the bass part is doing, I've written out the main
+bass notes in brackets in the rhythm guitar part.
+
+You need to use short slides before a lot of the triads to get the
+right phrasing - just follow what the vocals do. I've written out
+the most obvious slides, but listen to the guitar and vocals on 
+the original to hear how this works.  
+
+Intro:
+------
+
+12th fret harmonic (top E string) on the first beat of the first full bar, 
+then guitar enters after 4 bars (keyboard vamps on A6 and A9).
+
+
+E---12/-----------5--8--5-----8b9--------5---5---5---------------------
+B---12/-------3/5--------------------3/5-------------------------------
+G---12/------------------------------------8---7---4/6-----------------
+D---11/----------------------------------------------------------------
+A--------------------------------------------------------7-6-5-4-------
+E----------------------------------------------------------------------
+
+
+Verse 1:
+--------
+
+I've put the first two xx978x triad in brackets - they're cut short, and 
+you might want to leave them out all together.
+
+      A6  A9  A6              A9            A6 A9 A6                A9
+
+E-----------------------------------------------------------------------
+B-----/7---5--7---(8)--7--/7---5------------/7--5--7---(8)--7---/7---5--
+G-----/6---4--6---(7)--6--/6---4------------/6--4--6---(7)--6---/6---4--
+D-----/7---5--7---(9)--7--/7---5------------/7--5--7---(9)--7---/7---5--
+A-(0)-----------------------------------(0)-----------------------------
+E-----------------------------------------------------------------------
+
+    Some turn out, a hundred grand.       Get with it, we'll sh...
+
+E-------------------------------------------------------------------------------
+B-------------------------------------------------------------------------------
+G---------------------------------------2-------------------------------------2-
+D-------------------------------------2--------------------------------------2--
+A-------------------------------0-2/4-----0----------------------------0-2/4----
+E-------------------------------------------------------------------------------
+
+
+
+
+     D/C   C D/C G/C  D/C   C/D       D/G  C/G D/G   G  D/G    C/G
+
+E--------------------------------------------------------------------------
+B-----/7---5--7---8---7-/7---5---------/7----5--7----8---7-/7---5----------
+G-----/7---5--7---7---7-/7---5---------/7----5--7----7---7-/7---5----------
+D-----/7---5--7---9---7-/7---5---------/7----5--7----9---7-/7---5----------
+A---3-----------------------(5)--------------------------------------------
+E------------------------------------3-------------------------------------
+
+     Don't bother to understand,     don't question the little man
+
+E--------------------------------------------------------------------------
+B--------------------------------------------------------------------------
+G--------------------------------2-----------------------------------------
+D------------------------------4---4-5------------------------------5------
+A---3------------------------------------------------------------/7---7-5--
+E--------------------------------------------------------------------------
+
+
+
+
+      D   C/D D  G/D  D/E   E6   E9 E6
+
+E-------------------------------------------------------------------
+B-----/7---5--7---8---7-/7---5----3/5-------------------------------
+G-----/7---5--7---7---7-/7---6----4/6-------------------------------
+D-----/7---5--7---9---7-/7---6----4/6-------------------------------
+A---5---------------------------------------------------------------
+E---------------------0---------------------------------------------
+
+      Be part of the brotherhood yes it's 
+
+
+
+       A6  A9  A6       A6        A9
+
+E---------------------------------------------------------
+B------/7---5--7---(8)--/7--/7----5-----------------------
+G------/6---4--6---(7)--/6--/6----4-----------------------
+D------/7---5--7---(9)--/7--/7----5-----------------------
+A---0-----------------------------------------------------
+E---------------------------------------------------------
+
+     chain lightning it feels so good
+
+E-------------------------------------------------------------
+B-------------------------------------------------------------
+G--------------------------------------------2----------------
+D------------------------------------------2------------------
+A------------------------------------0-2/4-----0--------------
+E-------------------------------------------------------------
+
+
+Guitar Solo
+-----------
+
+Repeat the above sequence twice.
+Brief pause on A after solo and before 2nd verses starts.
+
+Verse 2:
+--------
+
+Same sequence again (once).
+
+
+Keyboard Solo/Outro
+-------------------
+
+Same again ...
+
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/chained_lightening.tab b/guitar/tabs/Steely Dan/chained_lightening.tab new file mode 100644 index 0000000..5d51a91 --- /dev/null +++ b/guitar/tabs/Steely Dan/chained_lightening.tab @@ -0,0 +1,155 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / chained_lightening.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From uunet!infonode!xanth.b11.ingr.com!richard Mon Jun  1 11:48:25 PDT 1992
+Article: 4389 of alt.guitar
+Newsgroups: alt.guitar
+Path: nevada.edu!uunet!infonode!xanth.b11.ingr.com!richard
+From: richard@xanth.b11.ingr.com (Richard Griffiths)
+Subject: Tab: Chained Lightning
+Message-ID: <1992Jun1.172840.16134@infonode.ingr.com>
+Sender: usenet@infonode.ingr.com (Usenet Administrator)
+Reply-To: richard@xanth.b11.ingr.com
+Organization: Intergraph Corporation, Huntsville, AL
+Date: Mon, 1 Jun 1992 17:28:40 GMT
+Lines: 41
+
+This tune has a nice groove that's fun to solo over.  It's off Steely Dan's
+Katy Lied album, and can also be heard on the New York Rock and Soul Review.
+The bass licks aren't verbatim, just an idea of what you can do.
+
+		  Chained Lightning - Steely Dan
+
+e-----------------------------------------------------------------------|
+B-----------7--5/-7----7-7\-5-------------7-5/-7----7-7\-5--------------|
+G-----------6--4/-6----6-6\-4-------------6-4/-6----6-6\-4--------------| 
+D-----7-----7--5/-7----7-7\-5--7-----7----7-5/-7----7-7\-5--7------7----|
+A-7h9---0-----------0------------7h9---0----------0-----------7h9-------|
+E--------------------------------------------------------------------8--|
+     
+
+
+e---------------------------------------------------------------------------
+B--7--5/-7--8p7-7\-5-------------7--5/-7--8p7-7\-5-------------7--5/-7-8p7--
+G--7--5/-7--9p7-7\-5-------------7--5/-7--9p7-7\-5-------------7--5/-7-9p7-- 
+D--7--5/-7--9p7-7\-5--7-----7----7--5/-7--9p7-7\-5--7-----7----7--5/-7-9p7--
+A-----------------------7h9---------------------------7h9-------------------
+E------------------------------8-----------------------------8--------------
+              
+e----------|
+B-7\-5-----|
+G-7\-5-----| repeat until nirvana
+D-7\-5--7--|
+A----------|
+E----------|
+              
+/ = slide up
+\ = slide down
+h = hammer on
+p = pulloff
+
+The 3 note pulloff is simply if you use your index finger to bar the DGB
+strings at the 5th and 7th frets.  Then your middle, ring and index fingers
+are free to do the pulloff.
+-- 
+Richard A. Griffiths              ...uunet!ingr!b11!xanth!richard   (UUCP)
+Intergraph Corp.                  richard@b11.ingr.com          (Internet)
+"Something's happening here but you don't know what it is. Do you, Mr. Jones."
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/dr_wu.tab b/guitar/tabs/Steely Dan/dr_wu.tab new file mode 100644 index 0000000..b825317 --- /dev/null +++ b/guitar/tabs/Steely Dan/dr_wu.tab @@ -0,0 +1,435 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / dr_wu.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Thu, 10 Jun 1999 18:19:09 +0100 (BST)
+From: Howard Wright <haw@ph.ed.ac.uk>
+Subject: s/steely_dan/dr_wu.tab
+
+
+		Dr Wu - Steely Dan
+		------------------
+
+
+		From the album "Katy Lied"
+
+		Transcribed/arranged by Howard Wright
+		Howard.Wright@ed.ac.uk
+
+
+It's difficult to find a way to make all the chord changes of the original piano part work
+smoothly on the guitar. I've written out the basic changes, with the chord names
+above the tablature. In places where it's not too hard for the guitar to play some
+of the piano fills and variations I've written in suggested changes. If you want
+to keep things simple, you can just play the first chord written out for each chord
+name and ignore the "extras".
+
+On the original, for each chord there are often a lot of different chord voicings
+used. Sometimes different voicings are used in succession to build parts of the song
+up (e.g near the end of the first verse: "... the last piaster I could borrow" - 
+different C/D voicings are used that slowly rise in pitch). At other times, different
+voicings are used to create more varied changes between chords.
+
+The chord voicings I've written below aim for an authentic sound, and reasonably 
+smooth changes between shapes. You could try different voicings if you prefer a 
+slightly different sound, or if you find a way to play it that suits you better. 
+
+For the verses and choruses, I've just written out the chord shape once in the 
+tablature. Listen to the original for ideas for strumming patterns.
+
+
+Intro:
+------
+
+    D/E                   C/F   G/C  C/F      
+
+E-----------10-------------3-----3----3------8------------
+B---7--7----10h12----------5-----3----5------8------------
+G---7--7------------7------5-----4----5------9------------
+D---7--7------------7h9----3-----5----3-------------------
+A---7--7-------------------------3-----------8------------
+E---------------------------------------------------------
+
+
+
+     Em11                           D6/E
+
+E------------------------------------7------------------
+B-----8---8---8---------8---8---8-------7---------------
+G-----7---7---7---------7---7---7----7------------------
+D-----7---7---7---------7---7---7-----------------------
+A-----7---7---7---------7---7---7-----------------------
+E--0-----------------0----------------------------------
+
+
+
+Verse 1:
+--------
+
+    Em         D/E         C          D/E          C
+
+E-------------------------------------------------------------
+B---5-----------7----------5-----------7------------5---------
+G---4-----------7----------5-----------7------------5---------
+D---5-----------7----------5-----------7------------5---------
+A---------------7----------3-----------7------------3---------
+E---0---------------------------------------------------------
+
+
+
+
+          Em7        Am11        Bm7  Am7
+
+E----------7-----------0------------------------------------------
+B----------8-----------8----------7----5--------------------------
+G----------7-----------7----------7----5--------------------------
+D----------9-----------10---------7----5--------------------------
+A----------7-----------0------------------------------------------
+E---------------------------------7----5--------------------------
+
+        
+(you could also play Am7:  x 0 10 9 8 0  instead of Am11)
+
+
+
+
+    G          Am7         Cmaj7       Bm7
+
+E---3---------------------------------------------------
+B---3-----------5-----------8-----------7---7--8--7-----
+G---4-----------5-----------9-----------7---7--------7--
+D---5-----------5-----------9-----------7---------------
+A---5---------------------------------------------------
+E---3-----------5-----------8-----------7---------------
+
+
+(Gadd9: 357433 sounds better than G above - it's what the piano actually
+plays (that mu-major chord again), but it's harder to play on the guitar!) 
+
+
+
+    Am7               Em7           
+
+E---------8------------7--------------------
+B---5-----8------------8--------------------
+G---5-----9------------7--------------------
+D---5------------------9--------------------
+A---------0------------7--------------------
+E---5---------------------------------------
+
+
+
+
+            C/D
+
+E------------------------8----8--------
+B------------5------8----8--------8----
+G------------5------9----9----9--------
+D------------5------10---10-------10---
+A------------5-------------------------
+E-------------------10---10------------
+
+
+
+
+   Gmaj7          Dm7         Cmaj7             Bm7
+
+E-------------------------------------------------------
+B---12------------10------------8----------------7------
+G---11------------10------------9----------------7------
+D---12------------10------------9----------------7------
+A---10--------------------------------------------------
+E-----------------10------------8----------------7------
+
+
+
+
+   Am11            Em7                  C      Bm7    C/D
+
+E-------------------7----------------------------------3-----------
+B---3---------------8-------------------5-------7------5-----------
+G---5---------------7-------------------5-------7------5-----------
+D---5---------------9-------------------5-------7------0-----------
+A-------------------7-------------------3--------------------------
+E---5-------------------------------------------7------------------
+
+
+
+
+Chorus:
+-------
+
+Here, the piano plays a different triad for each note in the melody implying
+lots of subtle changes of hamony. There's really no way to do this on the 
+guitar, so I've just written out the basic chords. 
+
+If you're playing with a bass player or another guitarist, you could try the 
+more complete version: get them to play the bass notes as you try out the 
+pattern of triads that follows the melody. Here's the first line:
+
+Two-guitar version:
+-------------------
+
+First guitar or bass plays bass notes: G, Bb etc. 2nd guitar plays:
+
+
+Bass note:  G                       Bb                           Eb
+
+E-------------------------------------------------------------------
+B---3---5---7--7--7--8--7----3---5---6--6---6---8--10--6--6--10---6-
+G---4---5---7--7--7--9--7----4---5---7--7---7---8--10--7--7--10---7-
+D---4---5---7--7--7--9--7----4---5---7--7---7---8--10--7--7--10---8-
+A-------------------------------------------------------------------
+E-------------------------------------------------------------------
+
+
+
+The "one guitar" version is:
+
+
+        D/G                   Bbmaj7
+
+E--------2------------------------------------------------
+B--------3----------------------6-------------------------
+G--------2----------------------7-------------------------
+D-------------------------------7-------------------------
+A---------------------------------------------------------
+E--------3----------------------6-------------------------
+
+
+
+
+   Bb/Eb          Gm7            Cm7          F/C
+
+E--------------------------------------------------------
+B--6---------------3--------------8------------8---------
+G--7---------------3--------------8------------8---------
+D--8---------------3--------------8------------8---------
+A--6-------------------------------------------8---------
+E------------------3--------------8----------------------
+
+
+
+
+             D/G    Bm7            G/C           Gmaj7
+
+E-------------2---------------------------------------------
+B-------------3------7--------------8--------------3--------
+G-------------2------7--------------7--------------4--------
+D--------------------7--------------9--------------4--------
+A-----------------------------------------------------------
+E-------------3------7--------------8--------------3--------
+
+
+
+
+         C/F       D/E       C/F      G/C      C/F
+
+E-----------------------------3--------3--------3--------
+B---------5---------7---7-----5--------3--------5--------
+G---------5---------7---7-----5--------4--------5--------
+D---------5---------7---7-----3--------5--------3--------
+A---------8---------7---7--------------3-----------------
+E--------------------------------------------------------
+
+
+
+
+Sax Solo:
+---------
+
+   Gmaj7   Fmaj7   Em7   D/G   Cmaj7   Bm7
+
+E--------------------------------------------------
+B---12------10------8-----7-----8------7-----------
+G---11------9-------7-----7-----9------7-----------
+D---12------10------9-----7-----9------7-----------
+A---10------8-------7-----10-----------------------
+E-------------------------------8------7-----------
+
+
+
+   Am7   Bm7  Cmaj7    Am7   D/G   C/F
+
+E-----------------------------5-----3---------------
+B---5-----7----8--------5-----7-----5---------------
+G---5-----7----9--------5-----7-----5---------------
+D---5-----7----9--------5-----5-----3---------------
+A---------------------------------------------------
+E---5-----7----8--------5---------------------------
+
+
+
+    D/E          C/F  G/C  C/F      
+
+E----------------3----3----3------------------
+B---7--7---------5----3----5------------------
+G---7--7---------5----4----5------------------
+D---7--7---------3----5----3------------------
+A---7--7--------------3-----------------------
+E---------------------------------------------
+
+
+
+    Em11                           D6/E
+
+E------------------------------------7--------
+B-----8---8---8---------8---8---8-------7-----
+G-----7---7---7---------7---7---7----7--------
+D-----7---7---7---------7---7---7-------------
+A-----7---7---7---------7---7---7-------------
+E--0-----------------0------------------------
+
+
+
+Verse 2:
+--------
+
+(Same chords as Verse 1)
+
+Chorus
+------
+
+        D/G                    Bbmaj7
+
+E---------2-------------------------------------------
+B---------3-----------------------6-------------------
+G---------2-----------------------7-------------------
+D---------------------------------7-------------------
+A-----------------------------------------------------
+E---------3-----------------------6-------------------
+
+
+
+
+   Bb/Eb          Gm7           Cm7            F/C
+
+E------------------------------------------------------
+B--6---------------3-------------8--------------8------
+G--7---------------3-------------8--------------8------
+D--8---------------3-------------8--------------8------
+A--6--------------------------------------------8------
+E------------------3-------------8---------------------
+
+
+
+               D/G    Bm7           G/C          Gmaj7
+ 
+E---------------2------------------------------------------
+B---------------3------7-------------8-------------3-------
+G---------------2------7-------------7-------------4-------
+D----------------------7-------------9-------------4-------
+A----------------------------------------------------------
+E---------------3------7-------------8-------------3-------
+
+
+
+         C/F         D/E           C/F         D/E       
+
+E---------------------------------------------------------
+B---------5-----------7---7---------5-----------7---7-----
+G---------5-----------7---7---------5-----------7---7-----
+D---------5-----------7---7---------5-----------7---7-----
+A---------8-----------7---7---------8-----------7---7-----
+E---------------------------------------------------------
+
+
+Repeat above line to fade
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/fire_in_the_hole.tab b/guitar/tabs/Steely Dan/fire_in_the_hole.tab new file mode 100644 index 0000000..57326da --- /dev/null +++ b/guitar/tabs/Steely Dan/fire_in_the_hole.tab @@ -0,0 +1,160 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / fire_in_the_hole.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE--------------------------------#
+#This file is the author's own work and represents their interpretation of the#
+#song. You may only use this file for private study, scholarship, or research.#
+#-----------------------------------------------------------------------------#
+
+From: "scott c. bravin" <beartunes@email.msn.com>
+Subject: s/steely_dan/fire_in_the_hole.tab
+Date: Sun, 17 May 1998 15:47:48 -0700
+
+                            Fire In The Hole
+                    by Steely Dan from "Can't Buy A Thrill
+                        Transcribed by Scott Bravin
+
+
+
+INTRO       Dm7      E7,  Gm7*    Dm7,   2X
+
+Dm7               E7                        Bbmaj7           Dm7
+I ..
+Dm7                  E7                 Bb          Dm7
+WORLDY ..
+
+Ab        Eb/G bass       Bb         Ab/C bass      Bb/C bass      Cm7
+A ..
+Abmaj7         Ebmaj7/G bass    Ab          Ab/F# bass
+AM I .....
+
+CHORUS
+
+Bb/Ab bass   Gsus- G        Cm7            Ab
+FIRE ..
+    Bb       F      Eb           Eb      Ab      Bb
+I'D ..
+
+SOLO
+
+Dm7             E7              Bbmaj7          Dm7
+WITH A ..
+Dm7              E7              Bbmaj7          Dm7
+SHOULD ..
+
+
+    Ab     Eb/G bass      Bb        Ab/C bass   Bb/C bass   Cm7
+MY ..
+Abmaj7               Ebmaj7/G bass        Ab      Ab/F# bass
+I WISH ..
+THERE'S.....
+
+REPEAT CHORUS
+
+
+
+Dm7-----xx0211            E7-----xx2434       Bbmaj7------x13131
+
+Ebmaj7/G bass---311xxx   Ab/C bass---x3111x   Bb/C bass---x3333x
+
+Cm7---x3534x   Abmaj7----4x554x   Ab/F# bass----2111xx   Bb/Ab
+bass----43333x
+
+
+
+
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/fm.prj b/guitar/tabs/Steely Dan/fm.prj new file mode 100644 index 0000000..de73791 --- /dev/null +++ b/guitar/tabs/Steely Dan/fm.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\steely dan\fm_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4) diff --git a/guitar/tabs/Steely Dan/fm.tab b/guitar/tabs/Steely Dan/fm.tab new file mode 100644 index 0000000..d0f8fa6 --- /dev/null +++ b/guitar/tabs/Steely Dan/fm.tab @@ -0,0 +1,88 @@ + + +E---------------------------------9-9-9-9-----9--9--9-- +B---------------------------------8-8-8-8-----8--8--8--- +G---------------------------------9-9-9-9-----9--9--9--- +D------2--------4-4-------2--------------------------------2---------4-4-------2-- +A---4--0--------2-2--4--2-0-----------------------------4--0---------2-2--4--2-0-- +E---2----------------2--0-------------------------------2-----------------2--0---- + + +E-----9--- +B-----10-- (let ring...) +G-----9--- +D-----9--- +A +E + + + + +VERSE 1: +-------- + +It's impossible to get both the piano stuff and the guitar stuff into one guitar +part - and both are important to get the feel of the song, so I've tabbed them +separately. + +It's only for the first few lines of each verse that it causes a problem - anyway +for these lines I'll do the piano bit on one line of tab (above the words), and +the guitar riff that goes with it below the words. + + / = slide up + + +E-7/9-----7/9---7-------------------------7/9---7/9---7-------------7/9---7/9- +B-8/10----8/10--8-------------------------8/10--8/10--8-------------8/10--8/10 +G-7/9-----7/9---7-------------------------7/9---7/9---7-------------7/9---7/9- +D----------------------------------------------------------------------------- +A---------------7-------------------------------------7----------------------- +E----------------------------------------------------------------------------- + + Bury .. + +E--------------- +B--------------- +G---------------- +D---------------- +A---------------2------4--5-----2-----4----5----------2---4-5---2--4-5--- +E---------------0------2--3-----0-----2----3----------0---2-3---0--2-3--- + + + + + +E--7---------------------------------------7/9----7/9---7--------------- +B--8---------------------------------------8/10---8/10--8--------------- +G--7---------------------------------------7/9----7/9---7------- +D----------------------------------------------------------------------- +A--7----------------------------------------------------7--------------- +E----------------------------------------------------------------------- + + Kick .. + +E--------------- +B--------------- +G---------------- +D---------------- +A--2-------------4--5--------2--------4----5-------------2------4--5-- +E--0-------------2--3--------0--------2----3-------------0------2--3-- + + + + +E--7---------------------------------------7/9----7/9---7---------------- +B--8---------------------------------------8/10---8/10--8---------------- +G--7---------------------------------------7/9----7/9---7------- +D------------------------------------------------------------------------- +A--7----------------------------------------------------7--------------- +E------------------------------------------------------------------------- + +E--------------- +B--------------- +G---------------- +D---------------- +A--2-------------4--5--------2--------4----5-------------2------4--5-- +E--0-------------2--3--------0--------2----3-------------0------2--3-- + + diff --git a/guitar/tabs/Steely Dan/fm_imp.tab b/guitar/tabs/Steely Dan/fm_imp.tab new file mode 100644 index 0000000..0e8a522 --- /dev/null +++ b/guitar/tabs/Steely Dan/fm_imp.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|---------------9-9-9-9-9-9-9-7-s9--7-s9--7-7-s9--7-s9--7-7-s9--7-s9--7-7-s9-- +B|---------------8-8-8-8-8-8-8-8-s10-8-s10-8-8-s10-8-s10-8-8-s10-8-s10-8-8-s10- +G|---------------9-9-9-9-9-9-9-7-s9--7-s9--7-7-s9--7-s9--7-7-s9--7-s9--7-7-s9-- +D|---2-4-4-----2--------------------------------------------------------------- +A|-4-0-2-2-4-2-0---------------------------7-------------7-------------7------- +E|-2-------2-0----------------------------------------------------------------- + + + +E|-7-s9--7---7-7-s9--7-s9--7--- +B|-8-s10-8---8-8-s10-8-s10-8--- +G|-7-s9--7---7-7-s9--7-s9--7--- +D|----------------------------- +A|-------7-2-7-------------7-2- +E|---------0-----------------0- + diff --git a/guitar/tabs/Steely Dan/green_earring.tab b/guitar/tabs/Steely Dan/green_earring.tab new file mode 100644 index 0000000..6909c33 --- /dev/null +++ b/guitar/tabs/Steely Dan/green_earring.tab @@ -0,0 +1,409 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / green_earring.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From Howard Wright                                  Jun 15 '94 at 9:51 am wet
+
+Subject: Steely.Dan/GreenEarring.tab
+To: guitar@nevada.edu
+Date: Wed, 15 Jun 94 9:51:47 WET DST
+
+
+
+                    GREEN EARRING    -   Steely Dan
+                   ---------------      
+
+                                      From the album - Royal Scam
+
+
+                                      Tabbed by Howard Wright
+                                      (spxhaw@uk.ac.cf.thor)
+
+It's a little awkward this one because some bits are easier to write
+as TAB, some as chords so if mixed the two. Hope it's OK to follow.
+
+On the verses the guitar only plays the same shape on the top 3 strings
+for quite a bit. If you want to put in a little bass in the gaps I've 
+indicated the main bass note. The actual bass jumps around a lot, so 
+it's impossible to get the feel of both guitar and bass in one TAB part, 
+but just sticking in the root note between strums on the top strings 
+helps fill it out.
+
+I have tabbed the solos, but I'll post them separately. If I havn't 
+posted them in the next few days then hassle me for them!
+
+
+Intro
+------
+
+Riff: (played over Dsus4/A)
+
+E---
+B---
+G---
+D---------------------------7----5-----
+A---7-9-10---9-7-9---7-5--7----5----3-5-
+E---
+
+
+
+then
+
+  B/E  A/D      A/D  G/C       B/E  A/D    A/D  G/C
+
+
+VERSE 1:
+--------
+
+
+E---8-7-8------8-7-8--
+B---8-7-8------8-7-8-- keep repeating...
+G---7-6-7------7-6-7--
+
+(Bass is A...)
+
+
+(Carry on as above)
+
+Cold      ..
+
+
+(...keep repeating)
+
+Sorry   ..
+
+
+
+E------------6-5-6----------8-7-8-
+B------------6-5-6----------8-7-8-
+G------------5-4-5----------7-6-7-
+
+      (G bass ..........A bass)
+Green ...
+
+ 
+                                  E----10-9-10--
+                                  B----10-9-10--
+                                  G----9--8-9---
+
+    Gm7   Am7  Dbsus4/Bb     /  Bm7  (B Bass...)  
+The ..
+
+
+E--------11-10-11--
+B--------11-10-11--
+G--------10-9--10--
+
+    (C Bass)            A/B          G/A
+I ...
+
+
+
+        E---8-7-8-----------8-7-8-----8-7-8-----
+        B---8-7-8-----------8-7-8-----8-7-8-----
+        G---7-6-7-----------7-6-7-----7-6-7-----
+        
+        (A Bass...)
+
+I don't ..
+
+
+B/E  A/D      A/D  G/C       B/E  A/D    A/D  G/C
+
+
+
+VERSE 2:
+--------
+As above - The words are:
+
+
+Greek ..
+Sorry ..
+Green ..
+The ..
+I...
+I ..
+
+At the end of verse 2, after the A/D,G/C type chords it carries on
+to do four more of the riff things over an A bass.
+
+Then comes the first instrumental break :
+
+INSTRUMENTAL:
+--------------
+
+Bm7    F#m7    Bm7    E/A    Am7     Gm7     Bbmaj7 Ebmaj7
+
+A6/9
+
+(short drum break for a bar or so)
+
+Guitar Solo:
+------------
+(see below for TAB) 
+
+Fm7(ix)    Ebmaj7   Ebm7   Dbmaj7
+
+E/F#       F/G       (First solo ends here)
+
+
+B/E  A/D      A/D  G/C       B/E  A/D    A/D  G/C
+
+Back to the main riff over A bass. (Another solo - see below)
+
+Then it goes back to the verse at the point where they sing 'Green 
+Earring , I remember ...' etc. At the end of the verse it carries on 
+with the riff over A bass and fades.
+
+
+Chord Shapes :
+
+Just to make typing easier, a=10, b=11
+
+
+EADGBE    EADGBE    EADGBE    EADGBE    EADGBE    EADGBE     EADGBE
+x0778x    X79877    X57655    X35433    3XX331    5XX553     7xX775
+ 
+Dsus4/A     B/E       A/D       G/C      Gm7       Am7         Bm7
+
+
+If you find the m7 shapes here a bit awkward, you can always just play 
+the top 3 strings, and play the Dbsus4 without the Bb bass.
+You could try a simpler m7 shape, but the change to the Dbsus4/Bb 
+doesn't work as well.
+
+For the instrumental bit, simpler m7 shapes work fine. Try these:
+
+EADGBE     EADGBE     EADGBE     EADGBE
+7X7777     2X2222     5X5555     3X3333
+
+  Bm7      F#m7        Am7        Gm7
+
+
+EADGBE    EADGBE     EADGBE    EADGBE    EADGBE    EADGBE    EADGBE
+6xX674    X0X454     6x776x    x6878x    5x445x    x9b9a9    x68786
+
+Dbsus4/Bb  E/A       Bbmaj7     Ebmaj7    A6/9      Fm7      Ebmaj7
+
+
+
+EADGBE    EADGBE     EADGBE    EADGBE   
+x68676    x46564     2x2100    3x321x    
+
+ Ebm7     Dbmaj7      E/F#      F/G      
+
+
+
+
+                   Green Earring - Solos
+                   ------------------------
+
+s=slide
+h=hammer on
+p=pull off
+vib=vibrato
+b=bend
+r=release bend
+
+e.g 4b5r4  means strike note at 4th fret - bend up one semitone, then 
+release bend (back to normal pitch)
+
+
+First solo comes after the second verse, over these chords :
+
+Bm7    F#m7    Bm7    E/A    Am7    Gm7    Bbmaj7  Ebmaj7  A6/9
+
+
+The tab is :
+
+E------5------------5---------------------------------------------
+B--7-----6-5-----7----6-5----5--------8-6----4-3---4--3-------4b5--
+G-----------------------------------5------------5----------3------
+D---------------------------------7---------------------------------
+A----------------
+E----------------
+
+
+Bend that last note slowly !
+
+After a little drum fill comes the main solo :
+
+
+E---12s11---8-10----8-----------------------------------------------------
+B----------------11---9-11-11-11s13s11--8h11p8---------------------------
+G-----------------------------------------------10-10s12--10p7------7h8-10
+D--------------------------------------------------------------8-10-------
+A---
+E----
+
+
+
+E------------------------10-------------------------------------------------
+B---------11-13-12-11-------13-11--------------------------------------11s13
+G---11-12-------------12----------10-12--12-11-10--10---------10-13p10------
+D-----------------------------------------------------11-------------------
+A--------------------------------------------------------13---------------
+E
+
+
+
+E------------------------------------------------------------------------
+B---11--11s9-------9----------------------------------9-9s11-------------
+G-------------8h10---8-------------------------8-9-11--------11-13-13s15-
+D----------------------11-10-------8-9-11--11----------------------------
+A----------------------------11-------------------------------------------
+E---
+
+
+
+E--
+B------12--12-12s14--14-12--12-14----14s15--13-15---13p12-------10
+G---15-------------------------------------------14-------12-------10
+D------------------------------------------------------------14-------12
+A--
+E--
+
+
+E--
+B--8-----6----8---10
+G---9-----7-----9---
+D----10----8--------
+A--
+E--
+
+
+
+Next is the short break with the chords -same as the break between verses
+
+(Chords are B/E  A/D    A/D G/C     B/E  A/D   A/D  G/C)
+
+Then another little solo (with a harsher sound):
+
+E--
+B------------------5-----------------------------------------------------8
+G------------------5---7b8r7p5-------5--------------5----------------7s9--
+D-------5-5--5--7--------------7-7-7---7-7-7--5--7---------7-7-7-7-7------
+A---5h7-------------------------------------------------------------------
+E--                                                          
+                                                           ^^^^^^^^^     
+                                            There are actually a lot more
+                                            notes here than I've written
+                                            Just repeat the note very fast
+E--
+B------------------8-8-8-----------------8-8-8-8--7-5-7p5-----------------
+G---------------7s9-------------------7s9------------------7-5-7p5--------
+D---7-7-7-7-7-7-------------7-7-7-7-7-------------------------------7-7-7p5
+A--
+E--
+
+
+E-----5--5vib---------------------------------------5-----3------
+B----x--------8-8vib---5-5vib------------------------------------
+G---x-------------------------7-5vib---------5-------------------
+D--x---------------------------------7--5--7---7------7-----5------
+A----------------------------------------------------------------
+E-------------------------------------------------------------3---
+
+
+Then you're back into  "Green Earring, I remember..."
+
+Get practising!
+
+Howard
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/here_at_the_western_world.tab b/guitar/tabs/Steely Dan/here_at_the_western_world.tab new file mode 100644 index 0000000..138199f --- /dev/null +++ b/guitar/tabs/Steely Dan/here_at_the_western_world.tab @@ -0,0 +1,309 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / here_at_the_western_world.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+From: spxhaw@astronomy.cardiff.ac.uk (Howard Wright)
+Subject: s/steely_dan/here_at_the_western_world.tab
+Date: Wed, 10 Jan 1996 11:25:19 +0000 (GMT)
+
+
+
+                    Here At The Western World  -  Steely Dan
+                -----------------------------------------------
+
+
+                                not released on any of their studio albums
+                                - crops up on Steely Dan compilations etc
+
+                                tabbed by Howard Wright
+                                H.Wright@astro.cf.ac.uk
+
+
+
+Intro :
+---------
+
+   A          C#m7               A                D
+
+E--0-----2----4---2--0---2---4------5---5/7---4---3---2------
+B--2-----4----5---4--2---4---5------7---7/9---5---5---3------
+G------------------------------------------------------------
+D-----------------------------------------------------------
+A-----------------------------------------------------------
+E-----------------------------------------------------------
+
+
+    F#m   F#m11     A/D     E/A   Bm7
+
+E----2----0---------9--------------------------------------
+B----2----0------------10----9-----7----------------------------
+G----2----2------------------9-----7------------------------
+D----4----4---------0--------9-----7-------------------------
+A----4----4------------------0----------------------------
+E----2----2------------------------7----------------------
+
+     ^    ^
+     ^    ^
+Use your thumb for the lowest note
+
+
+
+Verse 1:
+---------
+
+
+C#m11       Bm11      Gmaj7     F#m11
+Down ...
+
+     G           Bm7
+with ...
+
+C#m11        Bm11      Gmaj7        F#m11
+Klaus ...
+
+    Bm7        D/G             E/A
+But ...
+
+
+little riff :
+
+E---9--------7------------------------
+B-----10-------9-----------------------
+G--------11------9-------------------
+D-------------------------------------
+A--------------------------------------
+E------------------------------------
+
+
+
+D
+Hanging...
+
+           A      B/A   E/A*   B/A    A
+and ...
+
+D
+As ..
+
+                    A   E/A**    A   E/A**    A
+blacked ...
+
+
+
+
+Chorus :
+---------
+
+
+C#m7         F#m
+Knock ...
+
+C#m7               F#m
+Feels ...
+
+E            D           E/D   Dmaj7  
+We've ..
+
+G           Bm7      A
+here ...
+
+
+
+(Repeat Intro)
+
+
+Verse 2:
+---------
+
+Chorus :
+---------
+
+Knock twice, rap with your cane.
+Feels nice, you're out of the rain.
+We've got your skinny girl,
+here at the Western World.
+
+
+Solo :
+------
+
+F#m7   B   F#m7   B   F#m7   B   F#m7   B
+
+G   A/G   G   A/G   A   B/A   A
+
+Then play the little riff - and back into a repeat of an earlier
+bit :
+
+
+
+In the ..
+you're ...
+But ..
+eventually.
+
+
+Then play another chorus, followed by :
+
+
+
+   A          C#m7               A                D
+
+E--0-----2----4---2--0---2---4------5---5/7---4---3---2------
+B--2-----4----5---4--2---4---5------7---7/9---5---5---3------
+G------------------------------------------------------------
+D-----------------------------------------------------------
+A-----------------------------------------------------------
+E-----------------------------------------------------------
+
+
+    F#m   F#m11     
+
+E----2----0-----------------------------------------------
+B----2----0-----------------------------------------------
+G----2----2-----------------------------------------------
+D----4----4-----------------------------------------------
+A----4----4----------------------------------------------
+E----2----2----------------------------------------------
+
+	
+	
+
+
+Chord Shapes :
+---------------
+
+
+I don't think I missed any chords - but if I did, let me know !
+
+
+EADGBE     EADGBE     EADGBE     EADGBE     EADGBE  
+9x997x     7x7750     3x445x     244200     320003
+
+ C#m11       Bm11      Gmaj7      F#m11       G
+
+
+
+EADGBE     EADGBE     EADGBE     EADGBE     EADGBE  
+x24232     3xx232     5xx454     xx0232     x02220
+
+ Bm7        D/G         E/A        D          A
+
+
+
+EADGBE     EADGBE     EADGBE     EADGBE     EADGBE  
+x0444x     x0645x     x02100     x46454     244222
+
+  B/A        E/A*       E/A**      C#m7      F#m
+
+
+
+EADGBE     EADGBE     EADGBE     EADGBE     EADGBE  
+022100     xx0454     xx0675     242222     x24442
+
+  E          E/D       Dmaj7      F#m7        B
+
+
+
+EADGBE    
+3x222x
+
+ A/G
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/jack_of_speed.tab b/guitar/tabs/Steely Dan/jack_of_speed.tab new file mode 100644 index 0000000..0f259c4 --- /dev/null +++ b/guitar/tabs/Steely Dan/jack_of_speed.tab @@ -0,0 +1,448 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / jack_of_speed.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 14 Nov 2000 08:09:38 -0500
+From: Howard Wright <h.wright@2020speech.com>
+Subject: s/steely_dan/jack_of_speed.tab
+
+
+    
+	Jack of Speed - Steely Dan
+	--------------------------
+
+		From the album "Two Against Nature"
+
+		Transcribed by Howard Wright
+		Howard@jmdl.com
+
+
+Another classic from the new album, this one works well on the guitar.
+
+Many thanks to Bruce MacKinnon and Eltjo Cleton who both sent me their own 
+transcriptions of this song. While I was working out the song for myself 
+it was a big help having two good versions to refer to when I wasn't exactly 
+sure what chord to go for. The version I ended up with here is a little 
+different to both of theirs - it was mostly in the bridge section where we
+used different chords - but I think this one comes pretty close to capturing
+the essence of the song.
+
+I used Bruce's excellent idea of using a capo at the 2nd fret which makes it
+much easier to capture the right chord voicings. The song is in F# minor, but
+the capo at the 2nd fret means you can play Em type shapes and use the open
+low strings much more which really helps.
+
+NB the chord names reflect the actual pitch, so keyboard players etc can read
+them as they are without having to transpose down. 
+
+If you're not bothered about playing along with the CD, you can use the same
+chord shapes and just forget about the capo so you end up playing a tone lower 
+in Em.
+
+The only exception to this is the intro riff - I've written this out in 
+tablature
+for a guitar *without* capo. Hope this isn't confusing! The reason is, the riff 
+doesn't work quite as nicely with the capo.
+
+I find using the thumb for the bass notes and 3 fingers for picking out the top
+notes of the chord works very well throughout. 
+
+All chord shapes given a the end. An asterisk (*) labels alternative voicings 
+(e.g C#7 and C#7* are two different voicings for C#7)
+
+
+INTRO:  
+------
+
+F#m7   E/F#   F#m7   E/F# 
+  
+F#m7   E/F#   F#m7   E/F#
+
+F#m7   E/F#   D6/9   F#m7
+
+F#m7   Bm7    D6/9   F#m7 
+
+
+Above sequence repeats with tune/riff as below (chords written above
+tablature).
+
+N.B tablature written for guitar *without* capo!
+   
+Tune/riff:
+----------
+
+N.B a little vibrato on some of the sustained notes can really help!
+
+p = pull off
+
+  F#m7      E/F#      F#m7    E/F# 
+
+E---2-----2--------2-------2----------------------
+B-----5-------2-5-------5-----5---2--5p2----------
+G-----------------------------------------2-------
+D-------------------------------------------------
+A-------------------------------------------------
+E-------------------------------------------------
+
+
+  F#m7       E/F#      F#m7         E/F# 
+
+E--------------------------------2----------------
+B----------5p2---------2-2--2-5-----5--2--5p2-----
+G------2---------2-----------------------------2--
+D--4----------------4-----------------------------
+A-------------------------------------------------
+E-------------------------------------------------
+
+
+   F#m7       E/F#     D6/9     F#m7
+
+E-----2-----2--------5-------2--------------------
+B-------5-------2-5-----2-5-----5---2--5p2--------
+G------------------------------------------2------
+D--4----------------------------------------------
+A-------------------------------------------------
+E-------------------------------------------------
+
+
+   F#m7      Bm7       D6/9         F#m7 
+
+E--------------------------------2----------------
+B----------5p2---------2-2--2-5-----5--2--5p2-----
+G------2---------2-----------------------------2--
+D--4----------------4-----------------------------
+A-------------------------------------------------
+E-------------------------------------------------
+
+
+
+VERSE 1:
+--------
+
+Note: on the first E/F# chord ("rolling"), the bass plays an A. Instead of
+playing E/F# at this point you could play the same E triad with an A bass 
+(i.e E/A 3x423x). It just depends on whether you hear the A or the F# as the 
+root of the chord. Somehow, despite the A bass, I still hear the root as F# 
+so prefer the E/F# sound.
+
+
+  F#m7       E/F#        D6/9   F#m7
+Teddy's rolling now most every night 
+
+F#m7     Bm7             D6/9    F#m7
+Skatin' backwards at the speed of light 
+
+         Em9     A13       Dm9             G13 
+He's changed -       in a thousand little ways 
+
+        F#m7  E/F#     F#m7    E/F#
+He's changed -         yes indeed 
+
+
+CHORUS 1:
+---------
+
+             C#    Dmaj7  D#7
+You know he's movin' on metal, yes he's 
+
+Bm7                    C#7     F#m  F#m7  E/F#
+Hanging tight with the Jack of Speed 
+
+F#m7  C#7*  C#7+9  C#7-9
+
+
+Note 1: for the V-I (C#7 F#m) change on "Jack of Speed" I've used a straight
+F#m before going back to F#m7.  This change is basically the backing vocal 
+part. 
+
+Note 2: the final C#7+9 C#7-9 change is played very quickly on the keyboard.
+Try to use a pull off on the B string to go from the C#7+9 (x2123x) to the
+C#7-9 (x2121x) - bar across the 1st fret with your first finger and use your
+4th finger for the pull off from the 3rd fret. For an easier option, just
+play the C#7-9 chord.
+  
+
+VERSE 2:  
+--------
+
+(Same chords as before)
+
+CHORUS 2:
+---------
+
+          C#   Dmaj7  D#7
+He may be    sittin' in ...
+
+Bm7                    C#7     F#m  F#m7  E/F#   F#m7  E/F# 
+Steppin' out with the Jack of S...
+
+F#m7  E/F#   F#m7  E/F#  
+
+                 
+BRIDGE:
+-------  
+
+    Dmaj7     C#m11       Bmaj7    F#m7*
+You maybe got lucky for a few good y...
+              
+            C#m7   F#m7      C#m7     F#m7
+But there's no way back from there to h...
+            
+       Dmaj7   C#m11        Bm9          G#7+9  G#7-9
+He's a one way rider on the shriek express 
+             
+        C#m7     Bm9              Amaj7            C#7+9 C#7-9
+And his new best friend is at the throttle more or l...
+
+
+F#m7  E/F#  F#m7  E/F#  
+
+
+Note: the G#7+9 and G#7-9 chords should really have a #5 but this makes 
+it tricky to find guitar-friendly shapes. See chord shapes at the bottom 
+of this file for possibilities.
+
+You could also try a spicier chord for the last Bm9. The keyboard plays 
+something with a G# at the top, so you could maybe try x0x502 or even 
+x 0 10 11 0 0 ?  If you use that last shape, play 7x777x for the C#m7 to 
+make the change easier.
+
+
+VERSE 3:  
+--------
+
+CHORUS 3:
+---------
+
+               C#  Dmaj7  D#7
+You better move   now little d...
+
+Bm7                    C#7     F#m  
+Trading fours with the Jack of S...
+  
+
+Repeat second half of INTRO (part with the riff).
+
+
+SOLO:
+-----
+
+Solo section equivalent to one verse + one chorus.
+N.B Bass only for first two lines - full chords re-enter on Em9.
+
+F#m7   E/F#    D6/9   F#m7
+
+F#m7   Bm7     D6/9   F#m7
+
+Em9    A13      Dm9    G13 
+
+F#m7   E/F#    F#m7   E/F#
+
+C#     Dmaj7   D#7
+
+Bm7    C#7     F#m7   E/F#
+
+F#m7   E/F#    F#m7   E/F#
+
+F#m7   E/F#  
+
+
+Repeat BRIDGE
+
+last line of bridge becomes:
+
+F#m7  E/F#  F#m7  C#7*  C#7+9  C#7-9
+
+
+Repeat VERSE 3
+
+Repeat CHORUS 3
+
+
+OUTRO:
+------
+
+Almost same as intro except after 1st D6/9 (here we have E/F#,
+before it was F#m7)
+
+
+F#m7   E/F#   F#m7   E/F# 
+  
+F#m7   E/F#   F#m7   E/F#
+
+F#m7   E/F#   D6/9   E/F#
+
+F#m7   Bm7    D6/9   F#m7 
+
+
+Repeat 2nd half of intro sequence to fade, with intro riff + solo ad lib.
+
+
+
+Chord Shapes
+------------
+
+N.B: all shapes relative to capo at 2nd fret (e.g 1 means 1 fret above 
+capo i.e fret 3).
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+0x543x    0x423x    x3223x    x0555x
+
+F#m7       E/F#      D6/9      Bm7
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+3x423x    x5355x    3x345x    x3133x
+
+ E/A       Em9       A13        Dm9        
+
+
+You could also try m11 shapes as alternatives for the Em9 and Dm9 (x53553 
+and x31331). Or you could play D/E (x5x553) and C/D (x3x331). All three 
+possibilities are very similar. I think the m9 gives the best combination 
+of "sound and playability" but use another shape if you prefer.
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+1x123x    x214xx    x324xx    x434xx
+
+  G13        C#      Dmaj7      D#7
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+x24242    0x5453    x2120x    x2123x
+
+ C#7       F#m       C#7*     C#7+9
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+x2121x    x3545x    x2x230    x0622x
+
+C#7-9     Dmaj7     C#m11     Bmaj7
+
+
+That Bmaj7 voicing is a little bit of a stretch, though
+it is classic Steely Dan clustered voicing. For a simpler
+Bmaj7 try x0212x
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+0x5430    x24232    x05500    xx4355
+
+F#m7*     C#m7       Bm9      G#7+9  
+
+
+EADGBE    EADGBE 
+xx4353    3x443x
+
+G#7-9      Amaj7
+
+
+Note: the G#7+9 and G#7-9 chords in the bridge sound like they 
+should also have a #5 in them. The shapes 2x2335 and 2x2333 sound 
+good but are difficult to fret!
+
+
+
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/josie.tab b/guitar/tabs/Steely Dan/josie.tab new file mode 100644 index 0000000..e5607ea --- /dev/null +++ b/guitar/tabs/Steely Dan/josie.tab @@ -0,0 +1,37 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------7----------------- +B|-------------------------------------10-7-8---7----------------- +G|---7-6-------7-6-------------------9----------7----------------- +D|-------7-9-------7---7---7-6-5---9------------6-------2---5-7--- +A|-7---------7-------7---7-------9--------------7---0-2---------5- +E|--------------------------------------------0---0-------0------- + + + +E|----------------------12-14-15-14-12----12----10---7----------12----10-12-10---- +B|-------------------12----------------15----12----------8---10----12----------12- +G|-------------------------------------------------7---8---9---------------------- +D|---5-5-7-----5------------------------------------------------------------------ +A|-7-------5-7-------------------------------------------------------------------- +E|---------------5-7-------------------------------------------------------------- + + + +E|-9-12----9-7-------7-7-7-9-10-15-12----12----10-------10-12----17----12----14-12-15- +B|------10---------8---7--------------12----12----12-12-------14----------15---------- +G|-------------9-9-----7--------------------------------------------14---------------- +D|------------------------------------------------------------------------------------ +A|------------------------------------------------------------------------------------ +E|------------------------------------------------------------------------------------ + + + +E|-17-17-15----15-15----12----12-12---------- +B|----------17-------15----15----------12---- +G|----------------------------------12----12- +D|------------------------------------------- +A|------------------------------------------- +E|------------------------------------------- + diff --git a/guitar/tabs/Steely Dan/kid_charlemagne.tab b/guitar/tabs/Steely Dan/kid_charlemagne.tab new file mode 100644 index 0000000..f319e68 --- /dev/null +++ b/guitar/tabs/Steely Dan/kid_charlemagne.tab @@ -0,0 +1,212 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / kid_charlemagne.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: Howard Wright (Hman) <spxhaw@thor.cf.ac.uk>
+Subject: s/steely_dan/kid_charlemagne_solo.tab
+Date: Mon, 9 Oct 1995 12:21:35 +0100 (BST)
+
+
+                               KID CHARLEMAGNE - GUITAR SOLO   
+                        -----------------------------------------
+
+                            
+                                 From the Album Royal Scam
+
+                                 Tabbed by Howard Wright
+                                 H.Wright@astro.cf.ac.uk
+
+
+b=bend up
+r=release bend
+
+so 7b9    means play note fretted at 7th, bend up two semitones 
+   7b9r7  means play note at 7th fret, bend up 2 semitones, then
+            release the bend. Only strike the string once with the 
+            right hand
+   9r7    means bend 7th fret note up two semitones (without playing
+          it first), strike the bent note and release it 
+
+
+h=hammer on
+p=pull off
+/=slide
+
+
+E-----------------------------------------8--10b12--10p8-10p8----
+B------------------------------------8-10---------------------10-
+G----7b9--r7p5---7b9r7b9-r7------7/9-----------------------------
+D--------------7-------------------------------------------------
+A----------------------------------------------------------------
+E----------------------------------------------------------------
+
+
+
+E--8/10/8---------------------------14----14-14b15--14--------12-
+B--------------------------13-15/16----16---------------10/12----
+G-----------------------14---------------------------------------
+D-----------------14/15------------------------------------------
+A----------------------------------------------------------------
+E----------------------------------------------------------------
+
+
+
+E-14b15r14-12-------------------------17-----19r17p15-17--15---15-
+B-------------------15-17----15----15------------------------15---
+G-------------12/14-------14----14--------------------------------
+D-----------------------------------------------------------------
+A-----------------------------------------------------------------
+E-----------------------------------------------------------------
+
+
+
+E-------------------15-19-15-17-19-14------------------15-17b19-17
+B-17-----------15-17------------------15---------15-17------------
+G----16---14/16--------------------------16-14-16-----------------
+D-----------------------------------------------------------------
+A-----------------------------------------------------------------
+E-----------------------------------------------------------------
+
+
+
+E-----5-7b8--7--5--7--5/7-------10----------------8--10--10/12--
+B---5---------------------8--------8-------8--10----------------
+G---------------------------9-7----------/9--9---9--9---9-------
+D---------------------------------------------------------------
+A---------------------------------------------------------------
+E---------------------------------------------------------------
+
+
+
+E----------10----8---8-------------------------------------------
+B-10-13-------11---9---8--------------------5--------------------
+G------------------------9----------------5---5h7p5--------8---8-
+D--------------------------10-9-8-----6/7----------------7---7---
+A----------------------------------------------------7/9---------
+E----------------------------------------------------------------
+
+
+
+E-8-------------------------------------------------------------
+B---10b12--10---------------------------------------------------
+G-------------9--7-7/9------7--9-----7--9-----------------7-----
+D--------------------------7--7-----7--7------------7-8-9---9-10
+A----------------------------------------------7-10-------------
+E---------------------------------------------------------------
+
+
+
+E-----------8-10--11r10p8---------------------------------------
+B----8-9-10---------------11---11r10p8--------7b8h14p8r7--5h7p5-
+G--9-----------------------------------8bp----------------------
+D---------------------------------------------------------------
+A---------------------------------------------------------------
+E---------------------------------------------------------------
+
+                                           ^^^^^^^^^^^
+
+  In case your worried about this last bit, after bending the note you
+hammer on the 14th fret with your right hand, then pull off and release
+the bend.
+
+A bit tricky otherwise.....
+
+Enjoy!
+
+Howard 
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/peg.tab b/guitar/tabs/Steely Dan/peg.tab new file mode 100644 index 0000000..add2393 --- /dev/null +++ b/guitar/tabs/Steely Dan/peg.tab @@ -0,0 +1,234 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / peg.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+                                      PEG  -  Steely Dan
+                                -------------------------------
+
+
+ 
+                                           from the album 'AJA'
+
+
+                                           tabbed by Howard Wright
+                                           H.Wright@astro.cf.ac.uk
+
+
+
+The chords for the verse are a bit awkward - It's the usual
+type of Steely Dan chord - a triad with a different bass note.
+It's pretty hard to play the verse chords at the right speed - so
+you might have to forget about the bass note and just play the top
+strings. I think this is what the guitar on the record does anyway,
+but if you want to get the proper sound of the chord you really 
+need the bass as well.
+
+
+
+
+INTRO:
+------
+
+
+G6/9  F#7#9   F6/9  E7#9   Eb6/9  D7#9
+
+
+VERSE 1:
+--------
+
+Cmaj7   Gsus2/B  Cmaj7  Gsus2
+                          I've ..
+
+Cmaj7     Gsus2  Cmaj7  Gsus2
+picture                ..
+
+
+ Cmaj7    Gsus2  Cmaj7  Gsus2
+above ..
+
+
+Fmaj7     Csus2  Fmaj7  Csus2
+big    ..
+
+
+Cmaj7      Gsus2  Cmaj7  Gsus2
+dream ..
+
+
+Gmaj7     Dsus2        Fmaj7  Csus2
+smile ..
+
+
+Cmaj7    Gsus2  Cmaj7  Gsus2
+love it
+
+
+
+VERSE 2:
+--------
+
+CHORUS:
+-------
+
+Cmaj7  Gsus2/B       Am11    E7sus4
+Peg     ..
+
+
+Cmaj7  Gsus2/B       Am11    E7sus4
+Peg     ...
+
+
+Asus2/C#  C6/9            G     F#7
+Then          ..
+
+
+           Bm7 E7#9 Am7          C/D               Cmaj7  Gsus2
+You ..
+
+
+Cmaj7  Gsus2   F#m7  Bm7  Em7  Bm7  C6/9
+
+
+
+
+Then it repeats the intro sequence of descending chords and
+goes into the solo.
+
+Chords for the solo are the same as for the verses.
+
+
+The rest is just repeats.
+
+
+
+Chord Shapes :
+---------------
+
+for convenience  : a=10,b=11,c=12 etc
+
+(So an E shape bar chord at the 9th fret would be 9bba99  )
+
+
+
+  EADGBE    EADGBE    EADGBE    EADGBE    EADGBE    EADGBE
+  xa99ax    x989ax    x8778x    x7678x    x6556x    x5456x
+
+   G6/9      F#7#9     F6/9      E7#9     Eb6/9      D7#9
+    
+
+
+  EADGBE    EADGBE    EADGBE    EADGBE    EADGBE    EADGBE
+  x3x453    x2x233    3xx233    x8x9a8    9xx899    xaxbca
+
+   Cmaj7    Gsus2/B    Gsus2     Fmaj7    Csus2     Gmaj7
+
+
+
+  EADGBE    EADGBE    EADGBE    EADGBE    EADGBE    EADGBE
+  axx9aa    x0xcda    0xxefc    9x99ax    8x778x    355433
+
+  Dsus2      Am11     E7sus4    Asus2/C#   C6/9       G
+
+
+
+  EADGBE    EADGBE    EADGBE    EADGBE    EADGBE    EADGBE
+  242322    7x7777    5x5555    xx0553    2x2222    079787
+
+    F#7      Bm7       Am7        C/D      F#m7      Em7
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steely Dan/reelin_in_the_years.tab b/guitar/tabs/Steely Dan/reelin_in_the_years.tab new file mode 100644 index 0000000..7d03fb8 --- /dev/null +++ b/guitar/tabs/Steely Dan/reelin_in_the_years.tab @@ -0,0 +1,607 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / s / steely_dan / reelin_in_the_years.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE--------------------------------#
+#This file is the author's own work and represents their interpretation of the#
+#song. You may only use this file for private study, scholarship, or research.#
+#-----------------------------------------------------------------------------#
+
+Date: Mon, 02 Feb 1998 23:49:06 +0100
+From: Roger Olofsson <raggen@hem1.passagen.se>
+Subject: TAB: Reelin' in the years by Steely Dan (fwd)
+
+                     REELIN' IN THE YEARS  -  Steely Dan
+                   ---------------------------------------
+
+Chords by Howard Wright <Howard.Wright@ed.ac.uk>
+and
+macon@gallifry.Berkeley.EDU (Glen Macon)
+
+Guitar tablature added by Roger Olofsson <raggen@hem1.passagen.se>
+
+     				     ***************************
+                                     *please notice that tab is*
+     				     *from original recording  *
+                                     *while chords are from    *
+                                     *live version             *
+                                     ***************************
+
+This is based on the live version of the song, from the 'Alive ...'
+release. There are quite a few differences with the original recording -
+the chords for the verse have been spiced up a bit, and there are a couple
+of new changes thrown in as well. In the chorus, the new version uses
+nearly all Gmaj7 and F#m7 chords - the original used Aadd2 chords as
+well. But - if you play these chords along with the original track,
+most of them should work OK.
+
+
+For the chorus sequence (which is repeated several times for the solos)
+there are only two basic chords - Gmaj7, and F#m7. I've listed the chord
+shapes at the end, and I've written out some alternatives for these two
+chords. For example, you could play D/G and F#m11 and it will work fine.
+Choose the shapes you prefer for these two chords, or mix and match all
+the different possible shapes.
+
+
+/ indicates another beat on the same chord. This does not indicate the
+strumming pattern
+it just shows roughly how long you stick with each chord. Listen to the
+track to get the strumming patterns - as a rough guide, for the verses you
+change
+to each chord just before the beat. For the choruses you play more on the
+beat, with a triplet feel.
+
+INTRO :
+--------
+Aadd2
+Gmaj7 / / / / / F#m7 / / /
+Gmaj7 / / / / / F#m7 / / /
+Gmaj7 / / / / / F#m7 / / /
+Gmaj7 /
+
+Rest of the band come in here
+
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / Asus2/C#
+
+Tablature intro (original recording)
+                            staccato
+E-------------5-5--6/7~-5--12-12-12--|---5--5-5--------------------------|
+B-7r6r5-5-6/7----5-------------------|-7--------7~-5~--5-7---------------|
+G------------------------------------|---------------------5b6-----------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-------------------------7~--------|
+e------------------------------------|-----------------------------------|
+
+E------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D-----7-9-9~-9b10r8-9-9b10r8-9-------|-9b10r8-9--------------------------|
+A-7/9--------------------------------|---------7/9-7~-5-4-0--------------|
+e------------------------------------|----------------------0------------|
+
+E------------------------------------|-14/15-15-15-15r14-14-14-14r12-----|
+B-----------------8----12~-----15-15-|-----------------------------------|
+G---------------7--------------------|-----------------------------------|
+D-----------7-9----9/12---12/16------|-----------------------------------|
+A-----2-4-7--------------------------|-----------------------------------|
+e-2-5--------------------------------|-----------------------------------|
+
+E-12-12-12r10-10-10-10r9-9-9-9r7-----|-7-7-7r5-5-5-5r3-3-3-3r0-0-3-3-----|
+B------------------------------------|-------------------------------3b~~|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E------------------------------------|-----------------------------------|
+B------3-----------------------------|-----------------------------------|
+G-3/4b--------------------------6----|-----------------------------------|
+D-------5~---5--------------6/7------|-----2~----------------------------|
+A----------5----2-3-4-5-7--------7-7-|-5-4-0~----------------------------|
+e-------------------------5----------|-----------------------------------|
+
+VERSE 1:
+--------
+
+The way I've written the words under the chords here is only an approximation
+of the way it actually sounds on the live version. Donald really rushes
+through some of the lines - so I've put the chord changes to correspond
+more closely with the changes in the original version.
+
+D                  Asus2/C#       Bm11          F#m11
+You're ..
+
+       D               Asus2/C#           A/B           E/F#
+So ..
+1
+         Em7             Bsus2/D#       Dm7             Asus2/C#
+Well ..
+
+    D                    Asus2/C#           E/D
+The ..
+
+CHORUS 1:
+-----------
+A        /             Gmaj7 / / /               F#m7 / /  /
+Are ..
+Gmaj7 / / /                     F#m7 / / Asus2/C#
+tears    ..
+
+Chorus (original recording)repeats and guitar plays tab as below
+
+Are ..
+E-----------------------------19-19--|-15-15-----------------------------|
+B------------------------------------|-------12~-------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+stowin' ..
+E-----------------------13/14-14---12~-----------------------------------|
+B-----------------------11/12---12-12~-----------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+are ..
+A-------------------------------11/12|----------10-----------------------|
+B-------------------------------11/12|-10h12r10-10-----------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+         have ..
+A------------------------------------|12-14--12--------------------------|
+B------------------------------------|-----14--12-14-10-12---10----------|
+G------------------------------------|---------------------11-----9------|
+D------------------------------------|-------------------------11--9-11-7~
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+VERSE 2:
+---------
+
+(Chords are the same as verse 1)
+
+CHORUS 2:
+-----------
+A        /             Gmaj7 / / /               F#m7 / /  /
+Are you ...
+the
+
+Gmaj7 / / /                     F#m7 / / Asus2/C#
+tears    ...
+
+Chorus (original recording) repeats once and guitar plays tab as below
+
+Are ..
+E------------------------------3-3---|-----7~----------------------------|
+B------------------------------------|-----------------------------------|
+G--------------------------2/4-------|-4/7-------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+stowin' ...
+E---------------------------5-----9~-|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G-----------------------4/6---6/9----|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+are ..
+A---------------------------------3--|----3------3~----------------------|
+B------------------------------3/4---|-3/4---3/4-------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+         have ...
+
+SOLO 1 (Guitar - Walter)
+-------------------------
+
+Gmaj7 / / / B/A / / /
+
+Gmaj7 / / / B/A / / /
+
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+
+Solo (original recording)
+A------------------------------------|-----------------------------------|
+B------------------------------------|------------------------3-2---5----|
+G-----0-0-----0-0-----0-2-4-2-0------|-0-2-0--2-2-2---2-2---2-----4---4-2|
+D-2-4-----2-4-----2-4-----------4-2-4|------4-----2h4-----4--------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E------------------------------------|-----------------------------------|
+B--3-2---5---------------------------|-----------------------------------|
+G------4---4-2-0-0-----0-0-----0-2-4-|-2-0-------0-2-0---2-2-2---2-2---2-|
+D------------------2-4-----2-4-------|-----4-2-4-------4-----2h4-----4---|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E------------------------------------|-----------------------------------|
+B-3-2-----5r3r2---3-2-----5r3r2------|-----------------------2-3-2-------|
+G-----4-2-------4-----4-2-------4----|-0-2-4-4-0-2-4-4-0-2-4------4-2----|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E-----------------------------2------|-5-2---2-----5-2-------------------|
+B-------2-----2-2-----2-2-------5-2--|-----2---5-2-----------------------|
+G-0-2-4---4-2-----2-4-----2-4--------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E------------------------------------|-----------------------------2-----|
+B-----------------------2-3-2--------|-------2-----2-2-----2-2-------5-2-|
+G-----4-4-0-2-4-4-0-2-4------4-2-----|-0-2-4---4-2-----2-4-----2-4-------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E-5-2---2-----5-2--------------------|-----------------------------------|
+B-----2---5-2------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+SOLO 2 (this is a sax solo on live version but a glorious guitar solo on
+original recording)
+-------------
+
+Gmaj7 / / / B/A / / /
+Gmaj7 / / / B/A / / /
+
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / Dsus2/C#
+
+Solo (original recording)
+A--14b15~----------------------------|-----------------------------------|
+B--------12/14-12h14-----------------|-----------------------------------|
+G-------------------14---------------|-----------------------------------|
+D---------------------14/16-14h16----|-----------------------------------|
+A------------------------------------|-14b16---------12-12---12-14r12h14-|
+e------------------------------------|------12-12h14---------------------|
+
+E------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A-14r12h14-14-13-12-13-14-13-12-13-14-13-12-13-14-13-12-13-14-13-14-15-16|
+e------------------------------------|-----------------------------------|
+
+A------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G-------------------14r12-14r12-12h14r12-12h14r12-12h14r12-12h14r12------|
+D----------12-13-14------------------|-----------------------------------|
+A-16r14h16---------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E------------------------------------|-----------------------------------|
+B------------------------------------|-----------------------------------|
+G-12-12h14r12-12-12h14r12-12-12h14r12-12-12h14r12-11h12r11-9h11r9-7h9r7--|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+A------------------------------------|-----------------------------------|
+B------------------------------------|------10~--------------------------|
+G-5-5b6----5b6-----7-----8-----9-9---|-9-12------------------------------|
+D------7-7----7-7----7-7---7-7-------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+VERSE 3:
+---------
+
+CHORUS
+-------
+
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+
+Chorus (original recording)
+Are ..
+E------------------------------------|-----------------------------------|
+B------------------------------2-2h4r2~----------------------------------|
+G--------------------------2/4-------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+stowin' ..
+E------------------------------------|-----------------------------------|
+B------------------------4/5-5-5h7r5~|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+are ..
+A------------------------------------|-----------------------------------|
+B----------------------------7/8-8-8h10r8~-------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+         have ..
+A------------------------------------|-11-10-9-7-5-----------------------|
+B------------------------------------|-----------------------------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+Are ..
+E----------------------------7-5-3-0-|---------------5-5-----------5-5---|
+B------------------------------------|-3-2-----2/3/5-------6/7-5-7-------|
+G------------------------------------|-----4-2---------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+            are ..
+A---------5-5---------------5-5~-----|-------------5-5----5--------------|
+B-6/7-5-7-----------6/7-5-7----------|-----6/7-5-7----6/7---6/7-5--------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+          have ..
+A-----5-5---7r6r5--5-----------------|-----------------------------------|
+B-6/7-----7------7-------------------|-----------------------------------|
+G--------------------4b5-2-----------|-----------------------------------|
+D--------------------------2h4r2-----|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+(RIFF is not played on original recording)
+(-----)
+
+(Gmaj7 / / / B/A / / /)
+(Gmaj7 / / / B/A / / /)
+
+SOLO 3 (Guitar - Wadenius)
+---------------------------
+
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+Gmaj7 / / / F#m7 / / /
+
+Solo (original recording)
+A------------------------------------|------------------------------------|
+B------------------------------------|------------------------3-2---5-2---|
+G-----0-0-----0-0-----0-2-4-2-0------|-0-2-0--2-2-2---2-2---2----4-2---4-2|
+D-2-4-----2-4-----2-4-----------4-2-4|------4-----2h4-----4---------------|
+A------------------------------------|------------------------------------|
+e------------------------------------|------------------------------------|
+
+E--------5-2--------------------------|-----------------------------------|
+B--3-2--------------------------------|-----------------------------------|
+G-----4-2---4-2-0-0-----0-0-----0-2-4-|-2-0-------0-2-0---2-2-2---2-2---2-|
+D-------------------2-4-----2-4-------|-----4-2-4-------4-----2h4-----4---|
+A-------------------------------------|-----------------------------------|
+e-------------------------------------|-----------------------------------|
+
+E-------------------------5-2--------|-----------------------------------|
+B-3-2-----5-2-----3-2----------------|-----------------------------------|
+G-----4-2-----4-2-----4-2-------4-2--|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+fuzz guitar (original recording)
+A------------------------------------|-------------------------7---------|
+B--5-5/7-10-10-7-5-5/7-10-10-7--7-10-10-7-7-10-10-7-7-10-10-7------------|
+G------------------------------------|-----------------------------------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E-7h8r7r5-7h8r7r5-7h8r7r5-7h8r7r5-7h8r7r5-7h8r7r5-7h8r7r5----------------|
+B------------------------------------|-------------------7h8r7r5---------|
+G------------------------------------|---------------------------7h8r7r5-|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+E-7h8r7r5---------------7h8r7r5------|-----------------------------------|
+B--------7h8r7r5---------------7h8r7r5-----------------------------------|
+G---------------7h8r7r5--------------|-7h8r7r5--------------6r5h6-6r5h6--|
+D------------------------------------|--------7-7r5h7-7r5h7--------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+                                          Original recording fades here
+E------------------------------------|-----------------------------------|
+B-----------------10-----10---10-----10-------10----10-10------10--------|
+G-6r5h6-6r5h6-7/9----7/9---7/9---7/9-|--7/9-9---7/9------7/9-9-----------|
+D------------------------------------|-----------------------------------|
+A------------------------------------|-----------------------------------|
+e------------------------------------|-----------------------------------|
+
+(Live version continues)
+(CHORUS (with guitar solo continuing))
+(-------------------------------------)
+
+(Gmaj7 / / / F#m7 / / /)
+(Gmaj7 / / / F#m7 / / /)
+(Gmaj7 / / / F#m7 / / /)
+(Gmaj7 / / / F#m7 / / /)
+
+(OUTTRO:)
+(--------)
+
+(Gmaj7 / / / B/A / / /)
+(Gmaj7 / / / B/A / / /)
+(B/A / / / B/A /)
+
+Chord Shapes :
+---------------
+
+Try out any of these G-type and F#m-type chords for the chorus/solo sequences.
+
+EADGBE    EADGBE    EADGBE    EADGBE    E  A  D  G  B  E     E  A  D  G  B  E
+x07600    3x443x    3xx232    3x5432    x  10 12 11 12 10    x  10 9  11 10 0
+
+Aadd2     Gmaj7      D/G       Gmaj7         Gmaj7                Gmaj9add6
+
+EADGBE    E  A  D  G  B  E
+355400    x  10 9  7  0  0
+
+ G6               G6
+
+EADGBE    EADGBE    EADGBE    EADGBE    E  A  D  G  B  E    EADGBE
+242222    242252    244200    2x2200    x  9  11 9  10 9    x97500
+
+ F#m7      F#m7      F#m11     F#m11         F#m7            F#m7
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+x02220    x5777x    x4x455    x2x230
+
+  A         D       Asus2/C#   Bm11
+
+
+E  A  D  G  B  E    EADGBE    EADGBE    EADGBE
+x  x  9  9  10 9    x9x997    x79787    x6x677
+
+     A/B             E/F#       Em7     Bsus2/C#
+
+
+EADGBE    EADGBE    EADGBE    EADGBE
+x57565    x7777x    5x444x    x0444x
+
+ Dm7        D/E      B/A        B/A
+
+Final notes:
+The tab of the original recording was done with my ears and an
+Amiga computer using the Audiomaster IV sampler software. Sample,
+ouble pitch and double frequency enables Aidiomaster to playback
+he original sample at half the speed but with original pitch.
+
+"Let freedom ring"
+
+"Oh Rock of ages do not crumble, love is breathing still"
+"Oh Lady Moon shine down a little people magic if you will"
+
+
+-- 
+
+raggen@hem1.passagen.se, Roger Olofsson
+-- 
+
+raggen@hem1.passagen.se, Roger Olofsson
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Steve Morse/Tumeni Notes by Steve Morse.prj b/guitar/tabs/Steve Morse/Tumeni Notes by Steve Morse.prj new file mode 100644 index 0000000..2bbc784 --- /dev/null +++ b/guitar/tabs/Steve Morse/Tumeni Notes by Steve Morse.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Tumeni Notes by Steve Morse.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32)(104,32)(105,32)(106,32)(107,32)(108,32)(109,32)(110,32)(111,32)(112,32)(113,32)(114,32)(115,32)(116,32)(117,32)(118,32)(119,32)(120,32)(121,32)(122,32)(123,32)(124,32)(125,32)(126,32)(127,32)(128,32)(129,32)(130,32)(131,32)(132,32)(133,32)(134,32)(135,32)(136,32)(137,32)(138,32)(139,32)(140,32)(141,32)(142,32)(143,32)(144,32)(145,32)(146,32)(147,32)(148,32)(149,32)(150,32)(151,32)(152,32)(153,32)(154,32)(155,32)(156,32)(157,32)(158,32)(159,32)(160,32)(161,32)(162,32)(163,32)(164,32)(165,32)(166,32)(167,32)(168,32)(169,32)(170,32)(171,32)(172,32)(173,32)(174,32)(175,32)(176,32)(177,32)(178,32)(179,32)(180,32)(181,32)(182,32)(183,32)(184,32)(185,32)(186,32)(187,32)(188,32)(189,32)(190,32)(191,32)(192,32)(193,32)(194,32)(195,32)(196,32)(197,32)(198,32)(199,32)(200,32)(201,32)(202,32)(203,32)(204,32)(205,32)(206,32)(207,32)(208,32)(209,32)(210,32)(211,32)(212,32)(213,32)(214,32)(215,32)(216,32)(217,32)(218,32)(219,32)(220,32)(221,32)(222,32)(223,32)(224,32)(225,32)(226,32)(227,32)(228,32)(229,32)(230,32)(231,32)(232,32)(233,32)(234,32)(235,32)(236,32)(237,32)(238,32)(239,32)(240,32)(241,32)(242,32)(243,32)(244,32)(245,32)(246,32)(247,32)(248,32)(249,32)(250,32)(251,32)(252,32)(253,32)(254,32)(255,32)(256,32)(257,32)(258,32)(259,32)(260,32)(261,32)(262,32)(263,32)(264,32)(265,32)(266,32)(267,32)(268,32)(269,32)(270,32)(271,32)(272,32)(273,32)(274,32)(275,32)(276,32)(277,32)(278,32)(279,32)(280,32)(281,32)(282,32)(283,32)(284,32)(285,32)(286,32)(287,32)(288,32)(289,32)(290,32)(291,32)(292,32)(293,32)(294,32)(295,32)(296,32)(297,32)(298,32)(299,32)(300,32)(301,32)(302,32)(303,32)(304,32)(305,32)(306,32)(307,32)(308,32)(309,32)(310,32)(311,32)(312,32)(313,32)(314,32)(315,32)(316,32)(317,32)(318,32)(319,32)(320,32)(321,32)(322,32)(323,32)(324,32)(325,32)(326,32)(327,32)(328,32)(329,32)(330,32)(331,32)(332,32)(333,32)(334,32)(335,32)(336,32)(337,32)(338,32)(339,32)(340,32)(341,32)(342,32)(343,32)(344,32)(345,32)(346,32)(347,32)(348,32)(349,32)(350,32)(351,32)(352,32)(353,32)(354,32)(355,32)(356,32)(357,32)(358,32)(359,32)(360,32)(361,32)(362,32)(363,32)(364,32)(365,32)(366,32)(367,32)(368,32)(369,32)(370,32)(371,32)(372,32)(373,32)(374,32)(375,32)(376,32)(377,32)(378,32)(379,32)(380,32)(381,32)(382,32)(383,32)(384,32)(385,32)(386,32)(387,32)(388,32)(389,32)(390,32)(391,32)(392,32)(393,32)(394,32)(395,32)(396,32)(397,32)(398,32)(399,32)(400,32)(401,32)(402,32)(403,32)(404,32)(405,32)(406,32)(407,32)(408,32)(409,32)(410,32)(411,32)(412,32)(413,32)(414,32)(415,32)(416,32)(417,32)(418,32)(419,32)(420,32)(421,32)(422,32)(423,32)(424,32)(425,32)(426,32)(427,32)(428,32)(429,32)(430,32)(431,32)(432,32)(433,32)(434,32)(435,32)(436,32)(437,32)(438,32)(439,32)(440,32)(441,32)(442,32)(443,32)(444,32)(445,32)(446,32)(447,32)(448,32)(449,32)(450,32)(451,32)(452,32)(453,32)(454,32)(455,32)(456,32)(457,32)(458,32)(459,32)(460,32)(461,32)(462,32)(463,32)(464,32)(465,32)(466,32)(467,32)(468,32)(469,32)(470,32)(471,32)(472,32)(473,32)(474,32)(475,32)(476,32)(477,32)(478,32)(479,32)(480,32)(481,32)(482,32)(483,32)(484,32)(485,32)(486,32)(487,32)(488,32)(489,32)(490,32)(491,32)(492,32)(493,32)(494,32)(495,32)(496,32)(497,32)(498,32)(499,32)(500,32)(501,32)(502,32)(503,32)(504,32)(505,32)(506,32)(507,32)(508,32)(509,32)(510,32)(511,32)(512,32)(513,32)(514,32)(515,32)(516,32)(517,32)(518,32)(519,32)(520,32)(521,32)(522,32)(523,32)(524,32)(525,32)(526,32)(527,32)(528,32)(529,32)(530,32)(531,32)(532,32)(533,32)(534,32)(535,32)(536,32)(537,32)(538,32)(539,32)(540,32)(541,32)(542,32)(543,32)(544,32)(545,32)(546,32)(547,32)(548,32)(549,32)(550,32)(551,32)(552,32)(553,32)(554,32)(555,32)(556,32)(557,32)(558,32)(559,32)(560,32)(561,32)(562,32)(563,32)(564,32)(565,32)(566,32)(567,32)(568,32)(569,32)(570,32)(571,32)(572,32)(573,32)(574,32)(575,32)(576,32)(577,32)(578,32)(579,32)(580,32)(581,32)(582,32)(583,32)(584,32)(585,32)(586,32)(587,32)(588,32)(589,32)(590,32)(591,32)(592,32)(593,32)(594,32)(595,32)(596,32)(597,32)(598,32)(599,32)(600,32)(601,32)(602,32)(603,32)(604,32)(605,32)(606,32)(607,32)(608,32)(609,32)(610,32)(611,32)(612,32)(613,32)(614,32)(615,32)(616,32)(617,32)(618,32)(619,32)(620,32)(621,32)(622,32)(623,32)(624,32)(625,32)(626,32)(627,32)(628,32)(629,32)(630,32)(631,32)(632,32)(633,32)(634,32)(635,32)(636,32)(637,32)(638,32)(639,32)(640,32)(641,32)(642,32)(643,32)(644,32)(645,32)(646,32)(647,32)(648,32)(649,32)(650,32)(651,32)(652,32)(653,32)(654,32)(655,32)(656,32)(657,32)(658,32)(659,32)(660,32)(661,32)(662,32)(663,32)(664,32)(665,32)(666,32)(667,32)(668,32)(669,32)(670,32)(671,32)(672,32)(673,32)(674,32)(675,32)(676,32)(677,32)(678,32)(679,32)(680,32)(681,32)(682,32)(683,32)(684,32)(685,32)(686,32)(687,32)(688,32)(689,32)(690,32)(691,32)(692,32)(693,32)(694,32)(695,32)(696,32)(697,32)(698,32)(699,32)(700,32)(701,32)(702,32)(703,32)(704,32)(705,32)(706,32)(707,32)(708,32)(709,32)(710,32)(711,32)(712,32)(713,32)(714,32)(715,32)(716,32)(717,32)(718,32)(719,32)(720,32)(721,32)(722,32)(723,32)(724,32)(725,32)(726,32)(727,32) diff --git a/guitar/tabs/Steve Morse/Tumeni Notes by Steve Morse.tab b/guitar/tabs/Steve Morse/Tumeni Notes by Steve Morse.tab new file mode 100644 index 0000000..d9bc247 --- /dev/null +++ b/guitar/tabs/Steve Morse/Tumeni Notes by Steve Morse.tab @@ -0,0 +1,217 @@ +%TabMaster v2.00r% + + +E|----8-10-11-12-8---------7-10-7--------7-8-5-------5-7-3-------3-5-1--- +B|-10--------------10---10--------9----9-------5---5-------3---3-------1- +G|--------------------9-------------10-----------5-----------4----------- +D|----------------------------------------------------------------------- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|---3-1-----5-1-----8-5-------5------7-8-10-11-12-8---------7-10-7------ +B|-1-----1-1-----1-1-----7---7---8-10----------------10---10--------9---- +G|-------------------------8----------------------------9-------------10- +D|----------------------------------------------------------------------- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|---7-8-5-------5-13-8----------8-12-8-----10-8-----12-8-----13-10-------15- +B|-9-------6---6--------10----10--------8-8------8-8------8-8-------10-10---- +G|-----------5-------------10------------------------------------------------ +D|--------------------------------------------------------------------------- +A|--------------------------------------------------------------------------- +E|--------------------------------------------------------------------------- + + + +E|-10-------13-10-------12-8---------7-10-7--------7-8-5-------5-7-3-------3- +B|----10-10-------10-10------10---10--------9----9-------5---5-------3---3--- +G|------------------------------9-------------10-----------5-----------4----- +D|--------------------------------------------------------------------------- +A|--------------------------------------------------------------------------- +E|--------------------------------------------------------------------------- + + + +E|-5-1-----3-1-----5-1-----8-5-------5-------7-8-10-10-10-8---------7-10- +B|-----1-1-----1-1-----1-1-----7---7---s8-10----------------10---10------ +G|-------------------------------8-----------------------------9--------- +D|----------------------------------------------------------------------- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|-7--------7-8-5-------5-13-8----------8-12-8-----10-8-----12-8-----13-10- +B|---9----9-------6---6--------10----10--------8-8------8-8------8-8------- +G|-----10-----------5-------------10--------------------------------------- +D|------------------------------------------------------------------------- +A|------------------------------------------------------------------------- +E|------------------------------------------------------------------------- + + + +E|-------12-10-------16-12-------16-s3-16----------------------------------------------- +B|-10-10-------10-10-------12-12-------------------------------------------------------- +G|------------------------------------------------10--------------7--------------9------ +D|---------------------------------------------10----10---------9---9---------10-------- +A|------------------------------------------10----------10---10-------10---10--------10- +E|----------------------------------------8----------------8-------------8---------8---- + + + +E|------------------------------------------------------5-1-----3- +B|----------------------------------------------------1-----1-1--- +G|---7--------7-------5------------------------------------------- +D|-9---9----9-------7--------------------------------------------- +A|-------10-------7---------4-----7-----0-----2---2---4----------- +E|--------------5-------7-5---5-7---7-2---2-3---4---5------------- + + + +E|-1-----5-1-----8-5-------5-------7-8-10-10-10-8---------7-10-7--------7- +B|---1-1-----1-1-----7---7---s8-10----------------10---10--------9----9--- +G|---------------------8-----------------------------9-------------10----- +D|------------------------------------------------------------------------ +A|------------------------------------------------------------------------ +E|------------------------------------------------------------------------ + + + +E|-8-5-------5-13-8----------8-12-8-----10-8-----12-8-----13-10-------12-10---- +B|-----6---6--------10----10--------8-8------8-8------8-8-------10-10-------10- +G|-------5-------------10------------------------------------------------------ +D|----------------------------------------------------------------------------- +A|----------------------------------------------------------------------------- +E|----------------------------------------------------------------------------- + + + +E|----16-12-------16--------------------------------------------------- +B|-10-------12-12------------------------------------------------------ +G|-------------------------------------0------------------------------- +D|-------------------------------0-1-2---2-1-0-----0------------------- +A|-------------------0-----0-2-3---------------2-3---3-2-0-----0------- +E|---------------------3-4---------------------------------3-4---4-3-1- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|-----------6-3-----7-3-----6-3-----5-3-2-------------------0-1- +A|-----3-4-5-----5-3-----5-3-----5-3-------5-3-2-0-----0-2-3----- +E|-3-5---------------------------------------------3-4----------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---0-----------------------------------2-------2--------------- +D|-2---2-1-0-----0---------------------5-------4----------------- +A|-----------2-3---3-2-0-----0-------3-------5-------5-7---0----- +E|-----------------------3-4---4-3-1-------2-------3-----4---3-4- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-------------0------------------------------------------------- +D|-------0-1-2---2-1-0-----0-----------------------------6-3-7-3- +A|-0-2-3---------------2-3---3-2-0-----0---------0-3-4-5--------- +E|---------------------------------3-4---4-3-1-3----------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|-----------------5-2-4-2-----------------------0-----------2--- +D|-----6-3-5-3-------------5-2-------------0-1-2---2-1-0-1-2---2- +A|-5-3---------4-3-------------0-----0-2-3----------------------- +E|-------------------------------3-4----------------------------- + + + +E|-----------------------------------2-3-4----------------------- +B|---------------4-3-----------3-4-5-------5--------------------- +G|---4-2-5-2---------5-4-2-4-5---------------4-3-2-----0-1------- +D|-2---------2-2-----------------------------------3-4-----2----- +A|-----------------------------------------------------------2-1- +E|--------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|---------------------------4----------------------------------- +G|-----------------------------3-2---2-2------------------------- +D|---4-----------4-----------------4-----4-2--------------------- +A|-0-----------------------------------------4-3-2-2-0-2-----4-5- +E|-----2-2-2-2-2---2-2-2-2-2-----------------------------5-5----- + + + +E|---------------------5-6-7-7----------1-2----1-2-------------------------- +B|---------------5-6-7---------7-7-7----------------------------16-14----14- +G|---------4-5-6---------------------14-----14---14-13-12-------------17---- +D|---4-5-6------------------------------------------------14-13------------- +A|-6------------------------------------------------------------------------ +E|-------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------------------- +B|-------14-16-------14----------------------------------------------------------------------- +G|-17-17-------16-17-------------------------------------------------1-2---------------------- +D|-------------------------------------------------------------------------------------------- +A|----------------------16-17-18-17-16-14-14----------14-16-17-18-19-----19-19-17-------17---- +E|-------------------------------------------17-16-17-----------------------------19-17----19- + + + +E|-------------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------------- +G|---------------------------------------------------------------1-2-------------------- +D|-1-2-----1-2-1-s2--------------------------------------------------------------------- +A|---------------------14----------------------16-17-19-19-19-21-----21-17----21-s19-16- +E|-----0-0----------17----17-16-15-14-14-17-19-----------------------------17----------- + + + +E|----16-19-16-19----------------------------------5-2-------2-7-2-------2------- +B|-17-------------18-16--------------------------------3---3-------3---3---2----- +G|----------------------18-16----------------------------2-----------4----------- +D|----------------------------18-16-14---------------------------------------5--- +A|-------------------------------------16-14------------------------------------- +E|-------------------------------------------16-16-----------------------------7- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|---------------------------------------------3-2---------3-2--- +D|---------------------------------5----------------------------- +A|---------7-----------8---------------------------5---6-5-----5- +E|-6-5-6-7---7-6-5-6-7---7-6-5-6-7---7-6-5-6-7-------6----------- + + + +E|------------------------------------------------------------------------------------- +B|------------------------------------------------------------------------------------- +G|---------3-2-------------3---------2-------------3----2-------3---------------------- +D|------------------------------------------------------------------------------------- +A|-9-12-17-----------15-20-------------19---------------------------------------------- +E|-------------13-17---------8-13-17------14-15-17---17---17-15---12-15-12-17-13-15-13- + + + +E|--------------8-8-8-8-5---------------15- +B|----------------------------------------- +G|----------------------------------------- +D|------------------------1-15-18-15-18---- +A|-------20-s17---------------------------- +E|-19-16----------------------------------- + diff --git a/guitar/tabs/Steve Vai/Steve Vai - Angel Food.tab b/guitar/tabs/Steve Vai/Steve Vai - Angel Food.tab new file mode 100644 index 0000000..b714423 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - Angel Food.tab @@ -0,0 +1,154 @@ +#----------------------------------PLEASENOTE---------------------------------# + #This file is the author's own work +and represents their interpretation of the # #song. You may only use this +file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## + +Fire Garden Suite - Angel Food by Steve Vai Tabbed & transcibed by +A.Budynek Main theme Guitar 1 (acoustic) + +E|------------------------------------------------------------] +B|*-----------------------------------------------------------] +G|----------------------------------------------2-------------] +D|*---------------------------4---------------4---------------] +A|----------------------2-4-5-----------2-4-5-------------2-4-] +E|0-0-0-0-0-0-0-0-0-0-0---------0-0-0-0-----------0-0-0-0-----] + + +E---------0-0-0-0-0----------|-7--7-7-9------7--7-7-9---------] +B---------5-5-5/7-7---------*|-7--7-7-7------7--7-7-7---------] +G-----2----------------------|--------------------------------] +D---4------------------------|--------------------------------] +A-5-------------------------*|--------------------------------] +E-------------------0-0-0-0--|----------0-0-0--------0-0-0----] + + +E--7-7-7-7-9---------9-9-9-9-7---------9-9-9-9-7--------------] +B--7-7-7-7-7---------7-7-7-7-5---------7-7-7-7-5--------------] +G-------------------------------------------------------------] +D-------------------------------------------------------------] +A-------------------------------------------------------------] +E------------0-0-0-0-----------0-0-0-0-----------0-0-0-0------] + + +E--7--7-7--5--------5-5-7-5--4--------------------------------] +B--5--5-5--5--------5-5-5-5--5--------------------------------] +G-------------------------------------------------------------] +D-------------------------------------------------------------] +A-------------------------------------------------------------] +E------------0-0-0-0-----------0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0] + + +E-------------------------------------------------------------] +B-7--------------------------------4h7p4----------------------] +G-----------6-8----------------4-6-------4-4/6----------------] +D------------------------6-5h6--------------------------6-5h6-] +A-------------------------------------------------------------] +E---0-0-0-0-----0-0-0-0-------------------------0-0-0-0-------] + + +E--------4/7\4------------------------------------------------] +B-4---7--4/7\4-----------------7/9-7/9--4\2--7-7--4-2/4---7/9-] +G-4---6---------4-4/6----------6/8-6/8--3\1--6-6--3-1/3---6/8-] +D---------------4-4/6-----------------------------------------] +A-------------------------------------------------------------] +E---------------------0-0-0-0---------------------------------] + + +E-------------|---------------0--------------------------/7-8-] +B-7/9--4--2/4-|---12-10-8-7---0------------5-7/8-10-8-7-------] +G-6/8--3--1/3-|-0-12-11-9---7/9----2/4-5-7--------------------] +D-------------|-0---------------------------------------------] +A-------------|-3---------------------------------------------] +E-------------|-2---------------------------------------------] + + +E---5--------------7-7/10-10----------7-------10----------13--] +B-----8-7-5-8-7----8-8/11-11-----9-10---12-13------15-16------] +G---------------7--7-7/10-10-1---9------12---------15---------] +D----------------------------2---9------12---------15---------] +A----------------------------2--------------------------------] +E----------------------------0--------------------------------] + + +E-14-13----13---------------------------------------10--------] +B-------16----16-15-16-15--12h16p12\11-9-11-12-11-9----12-11--] +G-------------------------------------------------------------] +D-------------------------------------------------------------] +A-------------------------------------------------------------] +E-------------------------------------------------------------] + + +E------------------|-0----0---0------0----0----0---0-------0--|] +B--12-11-9-11-12-11|*--12---9---12-9---11---12---7---12-11-11*|] +G------------------|------------------------------------------|] +D------------------|------------------------------------------|] +A------------------|*----------------------------------------*|] +E------------------|------------------------------------------|] + + +E---0---0---0-2---0---0---------|---0--------------------|re--] +B-9---7---5---4-2---0-----------|*--0-------------------*|peat] +G-------------0---------3-1---1-|---1-1h3p1---1-----1----|-4--] +D---------------------------4---|---4-------4---4-4------|----] +A-------------------------------|*--2-------------------*|time] +E-------------------------------|---0-----------------0--|-s--] + + +E-------------------------------------------------------------] +B-------------------------------------------------------------] +G--------------------------------------------2h4--------------] +D----------2h4---------------4h7-----4p2---------4p2/6--------] +A--4p2---------4p2---7p4---------7p5-----2h4------------------] +E------4-5---------------5h7-----------------------------0----] + + +E--3-|---------|----------------------------------------------] +B--3-|-piano---|-8p7p5---7------------------------------------] +G--0-|---------|-------7---7-9-6------------------------------] +D--0-|-section-|-----------------7h9p5\4---5-2----------------] +A--2-|---------|-------------------------5-----4h5------------] +E--3-|---------|-----------------------------------5h7-4h5-2h3] + + +E------|--------|-10-10-10-10--14--17--10-14---10/12\10----17\] +B------|-piano--|------------------------------7-/9-\7--------] +G------|--------|-7--7--7--7---11--14--7--11---7-/9-\7--------] +D------|section-|---------------------------------------------] +A------|--------|---------------------------------------------] +E-0--3-|--------|---------------------------------------------] G#7M A E + + +E-14-14--/14-14-|-0-0-0--2-4--2-4-2-2--0-0-0-0--|-0-0-0-0-----] +B---------------|*2-4-2--2-2--2-2-2-4--2-4-2-2-*|-0-0-0-0-----] +G-11-11--/11-11-|-2-2-2--2-2--2-2-2-2--1-1-1-1--|-1-1-1-1-----] +D---------------|-2-2-2--2-2--2-2-2-2--2-2-2-2--|-4-4-4-2-----] +A---------------|*0-0-0--0-0--0-0-0-0--2-2-2-2-*|-2-2-2-2-----] +E---------------|----------------------0-0-0-0--|-0-0-0-0-----] Eadd9 + + +E---------------------|---2-----------------------------------] B--back to +main theme-|---0-----------------------------------] +G---------------------|---1-----------------------------------] +D---------------------|---2-----------------------------------] +A---------------------|---2-----------------------------------] +E---------------------|---0-----------------------------------] + + + +======================================================================= +TABLATURE EXPLANATION +======================================================================= +---------- ---------- ----5h8--- Hammeron ----(8)--- Ghost Note ---------- +---------- ----5p8--- Pulloff ---------- ---------- ---------- ----5/8--- +Slide Up -----x---- Dead Note ---------- ---------- ----5\8--- Slide Down +---------- ---------- ||------|| Repeat Start & End ----5~~~-- Vibrato +||*----*|| ---------- ||*----*|| ---------- ||------|| ---------- +---------- --12b(14)- bend 1 step --12b(13)- bend 1/2 step ---------- +---------- ---------- ---------- -------------- -12b(14)r12--- bend 1 step +-------------- and release -------------- +======================================================================= +That's all ! "Remember, life is good" Steve Vai Any comments, questions, +corrections, contact-me at daniel.budynek@hol.fr + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - Bad Horsie Solo.tab b/guitar/tabs/Steve Vai/Steve Vai - Bad Horsie Solo.tab new file mode 100644 index 0000000..b95419d --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - Bad Horsie Solo.tab @@ -0,0 +1,186 @@ +Song: Bad Horsie Solo +Artist: Steve Vai +Album: Alien Love Secrets +--------------------------------------------------------------- +Well, here it is...The big, Bad Horsie Solo. I've seen a lot of +requests for this song +and I decided that I might as well tab it, since summer's here and +there's really nothing +else to do. So, good luck with this solo...You're gonna need it. + +Legend: +------- +x mute b bend +r release h hammer on +p pull off ~ vibrato +/ slide up \ slide down +T tap P.H. pinch harmonic +! harmonic + +Tuning: CBCFAD + +W/Wah Pedal + Hold Bend Hold Bend +Again +|--12b(13)---12~--12-------12----------12--|---(12~)----12-------- +|--12b(13)---12~--12b(13)-(13)--12p10--12b(13)-(13~)---r12--12p10- +|------------------------------------------|---------------------- +|------------------------------------------|---------------------- +|------------------------------------------|---------------------- +|------------------------------------------|---------------------- + + W/bar P.H + -1/2 -2 1/2 -2 1/2 -3 1/2 + cont. ---------------------------------------| + ---------------------------------------| + from -12-----0\-------10-----------10b(12)--| + last ---------------------------------------| + ---------------------12--10------------| + meas. -----------------------------0---------| + + + Hold bend yet +again +|--------15b(16)b(17)--15--13--15b(16)r15p13----------------| +|--0------------------------------------------15--15b(18~)--| +|--0--------------------------------------------------------| +|--0--0-----------------------------------------------------| +|-----0-----------------------------------------------------| +|-----------------------------------------------------------| + + + P.H_ _ _ +_| +|------------------------10----------------------------------------------------| +|---(18)p13-----15-13\10-10-----------------------------------------------/13--| +|------------14-------------12b(13)r12p10h12p10\5------------------------------| +|--------------------------------------------------7p5---------3b(4)-----------| +|------------------------------------------------------6\5--3---------5--5-----| +|------------------------------------------------------------------------------| + + + +|--10h14p10---------------10-------10--------------------------------------- +|-----------13p10-13b(15)----13p10-----10--------------------------10h13p10- +|----------------------------------------12b(13)r12p10----10-12-13---------- +|------------------------------------------------------12------------------- +|--------------------------------------------------------------------------- +|--------------------------------------------------------------------------- + + +cont. ----------------------------------------| + ------12b(13)r12p10--------------10/13--| +from 12p10---------------12p10----10~--------| +last --------------------------12------------| + ----------------------------------------| +meas. ----------------------------------------| + + + +|--10h14p10----------10h13p10----10---------------------- +|-----------13p10h13----------13----13-13p10h13----10---- +|-----------------------------------------------13----13- +|-------------------------------------------------------- +|-------------------------------------------------------- +|-------------------------------------------------------- + + +cont. +---------------------------------15-20p15----------------20b(22~)------| + +---------------15h18p15-15h18-18----------18-18p15---------------------| +from +10h13p10-13/17-------------------------------------19p17---------------| +last +------------------------------------------------------------------!16--| + +-----------------------------------------------------------------------| +meas. +-----------------------------------------------------------------------| + + w/bar + +1 +P.H. +|---------17----20-------17---------------------------17------------------10-----------------| +|------------18----17\15----17b(18)r17p15----------------12b(13)r12p10----10--15b(17~)-------| +|-----------------------------------------17-16b(17)-------------------12---------------12\--| +|----(0)-------------------------------------------------------------------------------------| +|--------------------------------------------------------------------------------------------| +|--------------------------------------------------------------------------------------------| + w/bar + P.H P.H P.H P.H P.H + -1 -1 -1 -1 -1 +|-------------------------------------------------------------| +|--8--8--8--8--8--8--8--8--8--8--8--8b(11~)---8p6-------------| +|--------------------------------------------------7p5--7~~\--| +|-------------------------------------------------------------| +|-------------------------------------------------------------| +|-------------------------------------------------------------| + + +|--10h13h15p13h15p13h15p13h15p13h15p13h15p13h15p13h15p13h15p13h15p13h15p13h15p13h15p13h15p13 +|------------------------------------------------------------------------------------------- +|------------------------------------------------------------------------------------------- +|------------------------------------------------------------------------------------------- +|------------------------------------------------------------------------------------------- +|------------------------------------------------------------------------------------------- + + +-h15p13h15p13h15p13\10h13--15p13--15p13p10--15p13--15p13p10--15p13p10\9h12--15p12--15p12p9--- +-----------------------------------------------------------------------------|--------------- +-----------------------------------------------------------------------------|--------------- +-----------------------------------------------------------------------------|--------------- +-----------------------------------------------------------------------------|--------------- +-----------------------------------------------------------------------------|--------------- + + +-15p12p9---------------h12-15p12p9------------9h12-17p12p9----------------h9h12-17p12p9----- +---------15p12p9-------------------15p10p9h10--------------h12-17p12p9h10---------------h12- +-----------------14p11---------------------------------------------------------------------- +-------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------- + + +--------------12/14---------------------------------------h12--17p12p10-----------------| +-17p12p10p9h1012/13p12p10----------------------17p12p10h13-------------h12--17p12p10\8--| +-------------------------h13p11--17p11p9h11h13------------------------------------------| +----------------------------------------------------------------------------------------| +----------------------------------------------------------------------------------------| +----------------------------------------------------------------------------------------| + + +|--h8h11--17p11p8---------h8h11-17p11p8--------------------------19p10p8--------------19p9p8- +|-----------------17p9p8h9-------------h11-17p8-18p9-18p9p8--------------19p10p8------------- +|-----------------------------------------------------------19p9-----------------19p9-------- +|-------------------------------------------------------------------------------------------- +|-------------------------------------------------------------------------------------------- +|-------------------------------------------------------------------------------------------- + + +--------------19p9p7--------------------------------------10-p5h7p5-17p7p5--------------- +--19p9p8-------------19p8p7/8h12-15p12-15p12p10-19p10\7h8h10-------------|h7-17p7p5------ +---------18p9------------------------------------------------------------|----------17p7- +-------------------------------------------------------------------------|--------------- +-------------------------------------------------------------------------|--------------- +-------------------------------------------------------------------------|--------------- + + +-------------17p7p5--------------------------------------------------17p7p5--------------- +-17p7p5-------------17p7p5-15p5h7-17p7p5-----------------17p7p5-------------17p7p5-------- +--------17p7-----------------------------17p7h9-17p7p6----------17p7---------------17p7p5- +------------------------------------------------------h7---------------------------------- +------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------ + fdbk. + w/flanger w/bar /\/\/\/\/\/\ +--------------------|--0~---------0-------------------0----------| +--------------------|--1~---------1-------------------1---1------| +--------------------|--0~---------0-----------------------0------| +-17p7p5-------------|--3~---------3-----------------------3------| +--------17p7p5\3p0--|--3~---------3-----------------------3---0--| +--------------------|--3~-----3-------------------------------0--| + +Any questions/comments/problems, email Anthony at Ant02AV@aol.com + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - Blowfish.tab b/guitar/tabs/Steve Vai/Steve Vai - Blowfish.tab new file mode 100644 index 0000000..a1a1174 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - Blowfish.tab @@ -0,0 +1,159 @@ + <-BLOWFISH by STEVE VAI-> + <-from the album FIRE GARDEN-> + +This song is played with a double pitchshifter, one pitch is one octave +below and the other is one octave above. I think it is played straight +through a Digitech 2101 with loads of compression. + +Iwrote this from out of my head without a guitar so errors are +bound to be in there somewhere....hope it's useful anyway. + + <- TAB-ed by ANDREAS JONSSON -> + <- md6aj@mdstud.chalmers.se -> + <- www.geocities.com/SunsetStrip/5850 -> + + + pickslides riff A---> b1 +|-----------|-----------------------|--------------------------|-------------- +|-----------|-----------------------|--------------------------|-------------- +|-----------|-----------------------|--------------------------|-------------- +|-----------|-----------------------|--------------------------|-------------- +|-----------|---3-4-5-3---3-4-5-3---|---3-4-5-3---3-5----------|---3-4-5-3---- +|-x\--x\--x\|-5---------5---------5-|-5---------5------3-(5)-5-|-5------------ + + + b2 b2 b1 +-------------------|---------------------------|-------------------------|---- +-------------------|---------------------------|-------------------------|---- +-------------------|---------------------------|-------------------------|---- +-------------------|---------------------------|-----------------------9-|---- +--3-5----5-(7)-3---|---3-5-(7)-5-3---3-5-------|-----------------------7-|---- +5-----3----------5-|-5-------------5-----3-(5)-|-0-3-4-5-3-0-3-4-5-3-0---|---- + + + b2 b2 +--------------------|-----------------------------|--------------------------- +--------------------|-----------------------------|--------------------------- +--------------------|-----------------------------|--------------------------- +--------------------|---5-6-7-5---5-7---7-(9)-5---|--------------------------- +------------5-5-5-7-|-7---------7-----5---------7-|-----------------5-5-5-5--- +0-3-4-5-3-0-5-5-5-7\|-----------------------------|-0-3-5-(7)-5-3-0-5-5-5----- + + + b1 b2 +-------------------------------------------|------------------------------|--- +-------------------------------------------|------------------------------|--- +-------------------------------------------|------------------------------|--- +-------------------------------------------|------------------------------|--- +--3---3-4-5-3-------3-4-5-3---3-5----------|---3-4-5-3---3-5----5-(7)-3---|--- +----5---------5---5---------5------3-(5)-5-|-5---------5-----3----------5-|--- + + + b1 End RiffA b1 b1 b1 +------------------------------||---------------------------------------------- +------------------------------||---------------------------------------------- +------------------------------||*-2-2-------2-----2-2-------2-----2-2--------- +------------------------------||*-2-2-------2-----2-2-------2-----2-2--------- +--3-5-(7)-5-3---3-5-----------||--0-0-------0-x-x-0-0-------0-x-x-0-0--------- +5-------------5-----3-(4)-(5)-||------3-(5)-----------3-(5)-----------3-(5)--- + + Part1----> + b1 b1 rb +---------------||-------------------------------|----------------------------- +------3-3------||-10---10-10-8-10---------------|-12-(13)-12-10---------3-3--- +2-----2-2-0-0-*||-------------------2-2-------2-|---------------12-12---2-2--- +2-----0-0-0-0-*||-------------------2-2-------2-|-----------------------0-0--- +0-x-x-----2-2--||-------------------0-0-------0-|----------------------------- +----------3-3--||-----------------------3-(5)---|----------------------------- + + + b2 b1 b1 rb +----|-------------------------------------|-14-(15)-14p12--------------------- +----|-13-15-15-(17)-13-13-----------------|---------------13--------3-3------- +0-0-|-------------------------2-2-------2-|------------------12-----2-2-0-0--- +0-0-|-------------------------2-2-------2-|-------------------------0-0-0-0--- +2-2-|-------------------------0-0-------0-|-----------------------------2-2--- +3-3-|-----------------------------3-(5)---|-----------------------------3-3--- + + + +|----------------------------------------------------------------------------- +|----/14-14-12-14-15-14h15p14p12---------------------------------------------- +|----------------------------------12/14-------------------------------------- +|-4---------------------------------------/16-14h16p14-12-14/16-12-14\-------- +|-4-------------------------------------------------------------------14-12--- +|-2--------------------------------------------------------------------------- + + + b2 +|------------------------------------|---------------------------------------- +|/14-14-12-14-15/17-17-15-17-(19)~~~-|---------------------------------------- +|------------------------------------|----------------------12---------------- +|------------------------------------|-14----------12-14-------12-13-14------- +|------------------------------------|----12-13-14-------14------------------- +|------------------------------------|---------------------------------------- + + Play half Riff A and then + repeat Part1 with wha. + End Part1. Then there is a solo-bit + I won't Tab!After the solo + comes the following: +---16-17-18-19/22-22-22-22-22-22---|----------------------------|------------ +17---------------------------------|-----------------------------|------------ +-----------------------------------|-----------------------------|-2~~~-4-2--- +-----------------------------------|-----------------------------|------------ +-----------------------------------|-----------------------------|------------ +-----------------------------------|-----------------------------|------------ + + + +------------------------------------------------------------------------------ +------------10~~~-12-10-12/14---10/17~~~-17-(19)~~~-17------------------------ +4/6---2/9------------------------------------------------14/16--/16-14-14----- +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + + + NH:---------------------------------| + +--------19-----------------|-12----7---5-----7---5-----------------|---------- +17-(19)----17--------------|----12---7---5-----7---5-----5---------|---------- +----------------14/16--/16-|-------------------------5-----5-------|---------- +---------------------------|---------------------------5-----5-----|---------- +---------------------------|-----------------------------------5---|---------- +---------------------------|-------------------------------------5-|---------- + +After this comes slightly altered versions of RiffA and some other stuff +that I will leave up to you to figure out....... + + +============================================================================== +== TABLATURE EXPLANATION == +============================================================================== + +---------- ---b2----- +----5h8--- Hammeron --3-(5)--- full bend +---------- ---rb----- +----5p8--- Pulloff -(5)--3--- release bend + +---------- ---------- +----5/8--- Slide Up -----x---- Dead Note +---------- ---------- +----5\8--- Slide Down ---------- + +---------- ||------|| Repeat Start & End +----5~~~-- Vibrato ||*----*|| +---------- ||*----*|| +---------- ||------|| + + +============================================================================== +== Created with a shareware version of the BUCKET 'O TAB == +== tablature creation software for Windows == +== For more information: == +== email: gse@ocsystems.com == +== US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124 == +============================================================================== + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - Die To Live.tab b/guitar/tabs/Steve Vai/Steve Vai - Die To Live.tab new file mode 100644 index 0000000..1d7adbe --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - Die To Live.tab @@ -0,0 +1,401 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + +================================================================================ + Title : Die To Live + Artist : Steve Vai + Album : Alien Love Secrets +Transcribed by : Luiz Gustavo => lgmt@freemail.soteris.com.br +================================================================================ + +Legend +------ + + h = hammer-on + p = pull-off + b = bend + r = bend release + / = slide up/down +<5> = natural harmonic +[5] = artifical harmonic + ~ = vibrato + tr = trill + + + +Majestically TH12 + +E|------|----------0------------|-------------0----------|----------0--- +B|------|-------2----0------/---|-------2--2----0--------|-------2----0- +G|------|-------2------2---2-4--|-------2--2------2/4/4--|-------2------ +D|------|-----2-2--------2------|-----2-2--2-------------|-----2-2------ +A|-14\--|--0--------------------|--0---------------------|--0----------- +E|------|-----------------------|------------------------|-------------- + + + + TH12 semi-harm + +E|----------|-------------------------||----------0------------|------- +B|----------|------2--2--2h3-2--------||-------2----0----------|------- +G|-2---2/4--|------2--2--------4-2-2--||-------2------2---2/4--|------- +D|---2------|----2-2--2---------------||-----2-2--------2------|-----2- +A|----------|-0-----------------------||--0--------------------|--0---- +E|----------|-------------------------||-----------------------|------- + + + + TH12 semi-harm + +E|----------------------|------------0------------|--------------------- +B|-2--2---2h3-2-3/7\5---|---------2----0----------|-------2--2--2h3-2h3- +G|-2--2-----------------|---------2------2---2/4--|-------2--2---------- +D|-2--2-----------------|-------2-2--------2------|-----2-2--2---------- +A|----------------------|----0--------------------|--0------------------ +E|----------------------|-------------------------|--------------------- + + + + TH12 P.H. + +E|----------|--------0------------|------0-----------------|----------- +B|-2-0------|-----2----0----------|------2--2--------------|-------2-2h +G|-----2-2--|-----2------2---2/4--|----0----2-2/4\2-2/9-9--|-------2--- +D|----------|--0---------0-0------|--0---------------------|-----2-2--- +A|----------|---------------------|------------------------|--0-------- +E|----------|---------------------|------------------------|----------- + + + + TH12 + +E|--------------|--------------------------------|---------------0----- +B|-3-2----------|-------2--2--2/h5-2-5-2---------|--------3--------1--- +G|-----4-4-4/6--|-------2--2-------------4\2-2---|---(2)--0----------0- +D|--------------|-----2-2--2---------------------|-----------5\3------- +A|--------------|--0-----------------------------|----3---------------- +E|--------------|--------------------------------|--------------------- + + + + TH12 Harm...................................| + +E|-------|----------5-------------|-----0---------------------|-------- +B|-------|-------2----5-5---5-----|-----1---/12-10--10\-------|-------- +G|-------|-------2------------5---|-----0---/12-10--10\-9\7---|------9\ +D|-2p0---|-------2----------------|---------/12-10--10\-------|-------- +A|-------|--0--0----------3-------|--3------------------7\5---|------7\ +E|-------|------------------------|--1------------------------|-------- + + + + + +E|------------------------------------||----------|------------|------- +B|-----2------------------------------||-----3--2-|--4--2-4/-6-|-----2- +G|-----2------------------------------||----------|------------|------- +D|-----2---4b5---r-(4)b5--r(4)p2---0--||----------|------------|------- +A|--0----------------------------4----||----------|------------|------- +E|------------------------------------||--3-------|------------|--2---- + + + + + +E--0--|----------------------|-----------|---------3/5--3--|----------- +B-----|----0-----------------|-----------|--1------1-3--1--|---------9- +G-----|---------2--/4\2-2-2--|-----2--0--|---------0----0--|---------9- +D-----|----------------------|-----------|---------3/5--3--|---------9- +A-----|----------------------|-----------|-----------------|--2---/7--- +E-----|-------2--------------|--1--------|-----1-----------|--0-------- + + + + + +E|---------|---------------------------------|-----------------------|- +B|---7-9---|-------9b10--r--(9)--7---/9------|------------/12--10--9\|- +G|---7-9---|-------9b10--r--(9)--7---/9------|------------/11---9--9\|- +D|---7-9---|-------9b10--r--(9)--7---/9------|------------/13--11--9\|- +A|---------|---------------------------------|-----------------------|- +E|---------|-----------------------------7---|---0--0-0--------------|- + gliss. + + + midle finger tap A.H. + +E|-----------0--0----||------------------0-----------|----------------0- +B|-7---(7)\-/5--5----||--------/14-17p12---0---------|------/12-10/17--- +G|-7---(7)\----------||----------------------2---2/4-|------------------ +D|-7---(7)\----------||-----2------------------2-----|---2-------------- +A|-------------------||---0--------------------------|-0---------------- +E|-------------------||------------------------------|------------------ + + + + + +E|---------|----9-9-12-12/14-12-0----------|---------------------------- +B|-0-------|-------------------------------|-----/14b1--r-(14)p12------- +G|---2/4/4-|----6-6--9--9/11--9---6/9/11\9-|----------------------14/21- +D|---------|-2-----------------------------|---------------------------- +A|---------|-0--------------------4/7/-9\7-|--0------------------------- +E|---------|-------------------------------|---------------------------- + + + + + +E|-0-----------------|--------------------0---------|---12-(12)\10/14-- +B|---0---------------|----/14/(14)-17-12----0-------|---12-(12)\10/14-- +G|-------------------|------------------------6/9-4-|------------------ +D|-------------------|-0----------------------------|-0---------------- +A|-----4b5--r(4)p2-0-|------------------------------|------------------ +E|-------------------|------------------------------|------------------ + + + + + +E|-14-14/15\14\10/14\12-|-----------------------------0---------|------ +B|-14-14/15\14\10/14\12-|------/14-(14)-12-10-----------0-------|------ +G|----------------------|---------------------11/13\9-----------|----4- +D|----------------------|---2-----------------------------------|-2--4- +A|----------------------|-0-------------------------------------|-0---- +E|----------------------|---------------------------------4p2-0-|------ + + + + TH12 Harm...................................| + +E|----------------------------|-----------------0---------|---------5--- +B|----------14-14-12-14\12-10-|---12--(12)\-------1-------|------2----5- +G|-(4)p2/14-14-14-12-14\12-12-|---12--(12)\---------0-----|------2------ +D|-(4)p2/14-------------------|---12--(12)\-5\3-------2-0-|------2------ +A|----------------------------|---10--(10)\---------------|-0--0-------- +E|----------------------------|-8-------------------------|------------- + + + + + +E|----------|-----0-------------------|-------------|-----------0------ +B|-5---5----|-----1---/12-10--10\-----|----------3--|--(3)--3---------- +G|-------5--|-----0---/12-10--10\-9\7-|-9\--2----2--|--(2)----2---3---- +D|----------|---------/12-10--10\-----|-----2----2--|--(2)------------- +A|---3------|--3------------------7\5-|-7\0-0--0----|------------------ +E|----------|--1----------------------|-------------|----------------7\ + + + + Solo w/neck pick-up + +E|---|-----0------5-|-----||-----------------------|-15p-10-----------|- +B|---|-------0----3-|-----||--------------------13-|---------------13-|- +G|---|----------2-0-|-----||--------------12-12----|-------------x----|- +D|---|---2--------0-|-----||--------10-10----------|-----------x------|- +A|---|--------------|-----||----8-8----------------|------------------|- +E|---|-2------------|-----||--6--------------------|------------------|- + + + + + +E|------------------------|--------------------------|------------------ +B|-15-17--(17)\-15--13h15/|-17-13----------13--------|------16\15-13---- +G|------------------------|-------16-14h16----16p14--|----x----------15- +D|------------------------|--------------------------|--x--------------- +A|------------------------|--------------------------|------------------ +E|------------------------|--------------------------|------------------ + + + + + +E|-15----|-----------------------------------------|-------------------- +B|-------|-------13-----------/11p8----------------|-----------r-------- +G|----13\|-12-------------------------7\h5/7~------|------5b6-----(5)p3- +D|-------|----13----12\10--------------------------|-------------------- +A|-------|----------------11-----------------------|-------------------- +E|-------|-----------------------------------------|-------------------- + + + + + +E|----|---------------------|---------10-------------------|------------ +B|----|---0h9-12-9\12-------|------------------------------|------------ +G|----|----------------10~--|--(10)------10/h12\6----------|------------ +D|-5--|---------------------|----------------------5p0-----|-0--7h0-5-7- +A|----|---------------------|--------------------------0h4-|------------ +E|----|---------------------|------------------------------|------------ + + + + + +E|-------------|-----------------10/h12\10--10-|-11---------11-14h/17\14- +B|-------------|-10/h-12-0-10-12-10/-12\10--10-|-11------12-------------- +G|-7/h-9-0-7-9-|-------------------------------|------12----------------- +D|-------------|-------------------------------|------------------------- +A|-------------|-------------------------------|------------------------- +E|-------------|-------------------------------|------------------------- + + + + + +E|----14-|---------------------------||-17b19--r--(17)-16h17-16-14----- +B|-16----|-16b17--16--16-16----------||----------------------------17~- +G|-------|---------------------------||-------------------------------- +D|-------|-----------------------14\-||-------------------------------- +A|-------|-----------------------14\-||-------------------------------- +E|-------|---------------------------||-------------------------------- + + + + switch to bridge pick-up + +E-|----------12----------------------------|--------------------------- +B-|-15-12-15----12-14b15--r--(14)p12-------|-------12------------------ +G-|----------------------------------14-14-|-13-14----13--r-(13)------- +D-|----------------------------------------|---------------------16-14- +A-|----------------------------------------|--------------------------- +E-|----------------------------------------|--------------------------- + + + + P.H. P.H. + +E|-------|----------------------------------|-------------------------- +B|-------|----------------------------------|-9b10--r(9)-7------------- +G|-------|----------------------------------|--------------9p7-7-9\7~-- +D|-12-14-|-11b12--12-10b11--11-8b9---10-7-7-|-------------------------- +A|-------|----------------------------------|-------------------------- +E|-------|----------------------------------|-------------------------- + + + + Harm.............................................. Harm. + +E|-----|-10------------12-------------------|-12----------------|------ +B|--7/-|----10-12b14------12--r(12)--10h12--|----12-------------|------ +G|-----|------------------------------------|-------7-----------|------ +D|-----|------------------------------------|---------7-5-------|--4~-- +A|-----|------------------------------------|-------------4---3-|------ +E|-----|------------------------------------|---------------3---|------ + w/bar + + + gliss. TH12 TH12 semi-harm. + +E|-----||----------------0------------|-------------------------------|- +B|-----||-----2--2--(2)/---0----------|--------2--3/h12-10-10/17-17---|- +G|-----||-----2--2--(2)/-----2---2/4~-|--------2----------------------|- +D|-----||--0--2--2--(2)/-----0-0------|-----2--2----------------------|- +A|--14-||-----------------------------|--0----------------------------|- +E|-----||-----------------------------|-------------------------------|- + + + + TH12 Harm....................... w/bar + +E|--------------------------------|------------------------------------- +B|-----2--------14\12-12-10-12/14-|-------------------/12h10-12-10\7-10- +G|-----2--2-(2)/14\12-12-11-12/14-|--------5-(5)-(5)-------------------- +D|---2-2--2-(2)/14\12-12-12-12/14-|------------------------------------- +A|-0------------------------------|-0--4-3------------------------------ +E|--------------------------------|------------------------------------- + + + + TH12 TH12 + +E|-----|----0--------10\-9--9--7--9--9--|------------------------------ +B|-----|----2--2-(2)/12\10-10-10-10-10--|------2--2------12\h10-10/h17- +G|-9\--|-2-----2-(2)/-------------------|----2-2--2-------------------- +D|-----|-0------------------------------|--0----------/9--9\--7--7/-14- +A|---0-|--------------------------------|------------------------------ +E|-----|--------------------------------|------------------------------ + + + + TH12 w/bar graduation release + +E|-----|------------0------------|-----------------|-----------0------- +B|-17\-|------2--2----0----------|-----2--(2)/-----|----3--------1----- +G|-----|------2--2------2---2/4--|-----2--(2)/0----|----0----------0--- +D|-----|----2----2--------2------|---2--------0----|-------5\3-------2- +A|-----|--0----------------------|-0----------0----|-3--3-------------- +E|-----|-------------------------|-----------------|------------------- + + + + TH12 Harm...................................| + +E|---|---------------5-----------|-----0---------------------|--------- +B|---|---------2--2----5-5---5---|-----1---/12-12\10-10\-----|--------- +G|---|---------2--2------------5-|-----0---/12-12\10-10\-9\7-|-9/h10\9- +D|-0-|-2h3-2---2--2--------------|---------/12-12\10-10\-----|--------- +A|---|-------0-------------3-----|--3--------------------7\5-|-7/--8\7- +E|---|---------------------------|--1------------------------|--------- + + + + TH12 grad bend + +E|------------------------------|--0----------0---------|-----0--------- +B|---2--2-----------12-10/12\10-|-10------------1-------|-----0------15h +G|---2--2--9/14b11--------------|-12--x-----------0-----|-2------/14---- +D|---2--2-----------------------|--------7\3--------2h0-|-2-2----/14---- +A|-0----------------------------|-----------------------|-0------------- +E|------------------------------|-----------------------|--------------- + + + + let 5 ring + +E|----------------12----|--------------------0---------|---------0-|--- +B|-14----------------12-|-----12--(12)---------1-------|-2-----2-3-|--- +G|----14----16\14-------|-----14--(14)-----------0-----|-2-----2-2-|--- +D|-------14-------------|-----14--(14)--5\3--------2h0-|-2-x---2-2-|--- +A|----------------------|------------------------------|-----0---0-|--- +E|----------------------|-13---------------------------|-----------|--- + + + + dive w/bar + +E|-----0-----0-----|----0----------|------------------||-0-----------5- +B|--/5----/5-------|------0--------|------------------||-0------------- +G|-----------------|--------2----2-|---(2)------------||-2-----/7b2---- +D|-----------------|-------------0-|---(0)------------||-2------------- +A|-----------------|---------------|----------14------||-0------------- +E|--------------12-|--2--------2-3-|---(3)/10-----0\--||--------------- + + + + + +E|-------------------|------------------------------------|------------ +B|-5-7b8----r(7)h5---|------------------------------------|------------ +G|-----------------7/|---/11-9-9\h6-7-6-------------------|------------ +D|-------------------|------------------9-7---------------|------------ +A|-------------------|----------------------7-9\7-5-4-5/7\|-5-4/h-9\-4- +E|-------------------|------------------------------------|------------ + + + + string noise + +E|----------|----------0--|------ +B|----------|----12-------|------ +G|----------|-14----14----|------ +D|----------|-------------|--X-X- +A|---2/-12--|-------------|--X--- +E|----------|-------------|------ + + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - Genocide.tab b/guitar/tabs/Steve Vai/Steve Vai - Genocide.tab new file mode 100644 index 0000000..1ce5f76 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - Genocide.tab @@ -0,0 +1,163 @@ + + Genocide + by Steve Vai + + Tabbed & Transcribed by A.Budynek + + + NC (F#m) + Hey, Hi, We're racin' with time + To get some kick before we die + Hey, Ho, and if you don't know + We will stand together on the other side + + Hey, man, can I call you my friend ? + Here in the beginning of the end + This fight as already begun + And now it's time to take it to Euphoria + + Chorus + + Hey, Friend, I can feel your pain + Even heroes cry in the rain + Stand up so we can hear what you say + + B5 A5 E5 F#5 B5 A5 E5 F#5 + Said Genocide, Yeah + + E + Hey, Lord, Tears are burning my face + F#5 + I'm the one that's tryin' to fool face + E + Oh, God, I think I'm in shock + F#5 + Wathever it takes to get us through this Genocide + + Solo + + + +E----------------------------------------------14-------------] +B-17b(19)-17b(19)--17-b(19)--17-b(19)-17b(19)-----17b(19)rb17-] +G-------------------------------------------------------------] +D-------------------------------------------------------------] +A-------------------------------------------------------------] +E-------------------------------------------------------------] + + + + +E----------------14-------------------------------------------] +B-p14-17-16b(17)----17----------17----------------------------] +G----------------------16-14~~--16b(18)rb16p14----16-14/*-----] +D----------------------------------------------16-------------] +A-------------------------------------------------------------] +E-------------------------------------------------------------] + *slides note till fret out + + + +E-------------------------------------------------------------] +B----------------------------------------------------16b(17)--] +G--14---------------------------------------------------------] +D-----16-14---------------------------------------------------] +A-----------16-14\12p14b(15)rb14p12-14b(15)rb14p12------------] +E-------------------------------------------------------------] + + + + +E-------------------------------------------------------------] +B-16b(17)rb16-------------------------------------------------] +G-------------16-14-16-14-16--14-------11h14p11-14b(16)p11----] +D--------------------------------16p14------------------------] +A-------------------------------------------------------------] +E-------------------------------------------------------------] + + + +E--/14-19-14-14-14-19-14-14-19-19-14-14-14~~~~----------------] +B----------------------------------------------17~b(19)-------] +G-------------------------------------------------------------] +D-------------------------------------------------------------] +A-------------------------------------------------------------] +E-------------------------------------------------------------] + + + + +E--14----------14---------------------------------------------] +B-----17p14h17----17b(19)~~~~--17-14----------------14-16b(17)] +G------------------------------------17-16-14-16-17-----------] +D-------------------------------------------------------------] +A-------------------------------------------------------------] +E-------------------------------------------------------------] + + + +E-------------------------------------------------------------] +B-p14---------------------------------------------------------] +G-----17-16-14-16-17-18-17-16-14----14-16-17-16-14----14~~~~~~] +D--------------------------------16----------------16---------] +A-------------------------------------------------------------] +E-------------------------------------------------------------] + + + A + Ho, Lord, would you breath us in ? + B E5 F#5 + Wash your blood over our skin + A + Hold tight 'cause it's gonna be black + B E5 F#5 + Never let go, and get us through this Genocide + + + Chorus + + F#5 F5 E5 E5 F5 F#5 8 times + + Hey man, I know you're my friend + Here in the beginning of the end + +E----------------------------------------------] +B----------------------------------------------] +G-9----------9---------------------------------] +D---11-9-9-9---11--9-8-9-11-11-11-11-9-8-------] +A----------------------------------------9-----] +E----------------------------------------------] + +E---------------------------------------------------------------] +B---------------------------------------------------------------] +G-9----------9-11--11-11-11-11--11-11-11-11-11-11-11------------] +D---11-9-9-9----------------------------------------------------] +A---------------------------------------------------------------] +E---------------------------------------------------------------] + + + Hey, friend, we're all that we got + Hold my hand and jump into the Genocide + + + Chorus + + F#5 B5 C#5 + + +E|------------------------------------------------------------------------------------------|] +B|*----------------------------------------------------------------------------------------*|] +G|------------------------------------------------------------------------------------------|] +D|-14-14-14-14-14-14-14-14-13-13-13-13-13-13-13-13-11-11-11-11-11-11-11-11-9-9-9-9-9-9-9-9--|] +A|*----------------------------------------------------------------------------------------*|] +E|------------------------------------------------------------------------------------------|] + + +F#5 + + "Remember, life is good" + Steve Vai + +Any comments, corrections, contact me at daniel.budynek@hol.fr + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - STILL MY BLEEDING HEART.tab b/guitar/tabs/Steve Vai/Steve Vai - STILL MY BLEEDING HEART.tab new file mode 100644 index 0000000..14291f8 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - STILL MY BLEEDING HEART.tab @@ -0,0 +1,152 @@ +STILL MY BLEEDING HEART(By Steve Vai) +From Sex & Religon + +Transcribed by steven jellard. + + +INTRO!!! +|-----0---(0)-------------0--(0)--0-0-0------0------0----| +|-----0---(0)-------------0--(0)--0-0-0------0------0----| +|-----3---(3)-------------4--(4)--8-8-8--(8)\6--(6)\4----| +|---2---------4/6\4~----2--------------------------------| +|--------------------------------------------------------| +|-2-------------------2----------------------------------| + + + +|-----0---(0)---------------0--(0)--0-0-0------0------0----| +|-----0---(0)---------------0--(0)--0-0-0------0------0----| +|-----3---(3)---------------4--(4)--8-8-8--(8)\6--(6)\4----| +|---2---------------------2--------------------------------| +|----------------------------------------------------------| +|-2---------------------2----------------------------------| +| W\bar-------------------------------| | +| -1 | +|-19\-----------------------/19~~~~~~~---------------------| +|----\---------------------/-------------------------------| +|----------------------------------------------------------| +|----------------------------------------------------------| +|----------------------------------------------------------| +|----------------------------------------------------------| + + + verse!!! fill 1 2x 4x fill 1 +|-----0---(0)-------------0--(0)--0-0-0------0------0----|-------|do verse +|-----0---(0)-------------0--(0)--0-0-0------0------0----|-2-----|4x on the +|-----3---(3)-------------4--(4)--8-8-8--(8)\6--(6)\4----|---0---|4th time +|---2-------------------2--------------------------------|-----4-|do fill 1 +|--------------------------------------------------------|-------|where writen +|-2-------------------2----------------------------------|-------|2x. + + +Pre Chorus!!! +|------0-0-0------0-0-0-0--------| +|------0-0-0-0----0-0-0-0--------| +|------4---4-4----6---6-6--------| +|----2-2-----2----4-----4--------| +|-2-------------4----------------| +|-0-------------2----------------| + +_________________________2x_______________________________ +Chorus!!! 2x | +|--------0-0-0-0----------0-0---0-0---|------0-0---0-0--| +|--------0-0-0-0----------0-0---0-0---|------0-0---0-0--| +|--------8-8-8---8------4-4-4---4-4---|----6-6-6---6-6--| +|----9-9---9-9---9------2---2-2-----2-|----4---4-4------| +|----x-x-----x---x--------------------|-----------------| +|--9-9-9-----9---9----0---------------|--2--------------| + + + +INTERLUDE!!! 1/2 1/2 +|----16-------15-14---)-(---------------15-------15---------)-(-------------| +|-17----17-15-------11---(11)--------15----15-14----15-12-11---(11)---------| +|----13-------12-11---)-(-----11~~~-----12-------12---------)-(-----11~~~~~-| +|-14----14-12--------8---(8)---------12----12-11----12-9---8---(8)----------| +|----------------------------- 9~~~---------------------------------9~~~~~--| +|---------------------------------------------------------------------------| + + + +Guitar solo + +|---------------------------------------------------------------------| +|-12p9~~~------7h9h11--11p9p7---------/9------------------------------| +|------------x----------------9~~~~--------8---8/9---9\6---6/8---8\4--| +|----------x-----------------------------6----------------------------| +|--------------------------------------------6-----7-----4-----6------| +|---------------------------------------------------------------------| + + Grad bend-------| w/bar + -2 full P.M P.H -1 switch neck pickup +|--------------------------)------------------19--/--(19)p16-------------| +|-------------14----/--(14)--14-14--14~~~---x--|-/-----------17----------| +|----4/6----x--|---/----------------------x----|/---------------16\14----| +|---------x----|--/---------------------------------------------------18-| +|-2--2/4-------|-/-------------------------------------------------------| +|------------------------------------------------------------------------| + + + P.H +|--------------------------------------------------------------------------| +|----------------------------------------17-----------------17-------------| +|-------------------------------15-16-18----18-16-15--16-18----18-16-15~~~-| +|-14-----------------------------------------------------------------------| +|----14--------------------------------------------------------------------| +|-------17-16-12-9-7h9h12-9~~~---------------------------------------------| + + + P.H P.H +|--------------------------------------------------------------14h18p14----| +|-------14h17p14-----------------14h17p14----------------14h17-------------| +|-15-16----------16-15~~~--16-15----------16-15~~--15h16-------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| +|--------------------------------------------------------------------------| + + + +|----------14h18p14----------14h19p14----------14h19p14----------| +|-17p14h17----------17p14h17----------17p14h17----------17p14h17-| +|----------------------------------------------------------------| +|----------------------------------------------------------------| +|----------------------------------------------------------------| +|----------------------------------------------------------------| + + Grad bend + full full------------| +|-14h19p14h19p14h19p14h19------------)-----------------------)---------------| +|-------------------------21~~~~~--17---17-17-17-17-17-17--17-17-17-17-17-17-| +|----------------------------------------------------------------------------| +|----------------------------------------------------------------------------| +|----------------------------------------------------------------------------| +|----------------------------------------------------------------------------| + + full 1/2 1/2 1/2 +|----------|(--------------------------------------------------------)--| +|-(17)~~~-17-(17)-14----------------17\--14---)--14---)------------17---| +|--------------------15---------------------14------14------13~~~-------| +|-----------------------16------------------------------16--------------| +|--------------------------16-------------------------------------------| +|-----------------------------18-14-------------------------------------| + grad bend + full--------------| + ) +|-15-17-17--17-17-17-17-17----------| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| +|-----------------------------------| + +This was transcribed by steven jellard . + +yo!! send me an e-mail if you have any coments or any corrections. +But i think the solo is perfect i used a special machine to slow it down +so e-mail me on: + +jellard@xtra.co.nz + +p.s i am still working on the tab for the whole sex & religon album. +And will be probably getting the tab book so i can tab them out for you. + diff --git a/guitar/tabs/Steve Vai/Steve Vai - THE ATTIDUDE SONG.tab b/guitar/tabs/Steve Vai/Steve Vai - THE ATTIDUDE SONG.tab new file mode 100644 index 0000000..a31db51 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - THE ATTIDUDE SONG.tab @@ -0,0 +1,613 @@ +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------# + +================================================================================ + Title : THE ATTIDUDE SONG + Artist : STEVE VAI + Album : FLEX-ABLE +================================================================================ + +Legend +------ + + h = hammer-on + p = pull-off + b = bend + r = bend release + / = slide up/down +<5> = natural harmonic +[5] = artifical harmonic + ~ = vibrato + tr = trill + T = Tap + + + + P.M-------| A.H---------| P.M---------| A.H---------| +E|---||-----------|-----------|-------------|-------------|------------- +B|---||-----------|-----------|-------------|-------------|------------- +G|---||-----------|-----------|-------------|-------------|------------- +D|---||-----------|-----------|-------------|-------------|------------- +A|-x\||-----------|-----------|-------------|-------------|------------- +E|-x\||-5-4-3-(0)-|-5-4-3-(0)-|-{5}-{4}-{3}-|---5-4-3-(0)-|-{5}-{4}-{3}- + C# B# B B A# A + + + + P.M-------| A.H---------| P.M---------| A.H---------| P.M---------| +E|-----------|-------------|-------------|-------------|-------------| +B|-----------|-------------|-------------|-------------|-------------| +G|-----------|-------------|-------------|-------------|-------------| +D|-----------|-------------|-------------|-------------|-------------| +A|-----------|-------------|-------------|-------------|-------------| +E|-5-4-3-(0)-|-{5}-{4}-{3}-|---5-4-3-(0)-|-{5}-{4}-{3}-|---5-4-3-(0)-| + A G# G A G# G + + + + A.H---------| P.M---------| A.H---------| P.M---------| +E|-------------|-------------|-------------|------------| +B|-------------|-------------|-------------|------------| +G|-------------|-------------|-------------|------------| +D|-------------|-------------|-------------|------------| +A|-------------|-------------|-------------|------------| +E|-{5}-{4}-{3}-|---5-4-3-(0)-|-{5}-{4}-{3}-|--5-4-3-(0)-| + E D# D C# B# B + + + + A.H---------| P.M---------| A.H-----| T +E|-------------|-------------|---------|------------------------------ +B|-------------|-------------|---------|---5-5-5-5-5-5-6-7---*-------- +G|-------------|-------------|---------|---5-5-5-5-5-5-6-7---2b4--14-- +D|-------------|-------------|---------|---5-5-5-5-5-5-6-7------------ +A|-------------|-------------|---------|---3-3-3-3-3-3-4-5------------ +E|-{5}-{4}-{3}-|---5-4-3-(0)-|-{5}-{4}-|------------------------------ + A G# G E D# *= hold bend + while tapping + + W/bar------------------| + + + T N.H---------------------| +E-|---------------------|-------------------------------------/\---|----- +B-|---------13b15--15---|-5-5-5-5-5-5-6-7--------------------/--\--|-5-5- +G-|-r(14)p9-------------|-5-5-5-5-5-5-6-7-<5>\--/\--(5)--(5)/----\-|-5-5- +D-|---------------------|-5-5-5-5-5-5-6-7-----\/--\----------------|-5-5- +A-|---------------------|-3-3-3-3-3-3-4-5----------\---------------|-3-3- +E-|---------------------|------------------------------------------|----- + Bend stg. behind nut. + and pull up on bar. + + + +E|------------------14-------12-|-------10-------8-------10--10\-8--8-10- +B|-5-5-5-5-6-7--/15----15\13----|-13\12----12\10---12/10-12--12\10-10-12- +G|-5-5-5-5-6-7------------------|---------------------------------------- +D|-5-5-5-5-6-7------------------|---------------------------------------- +A|-3-3-3-3-4-5------------------|---------------------------------------- +E|------------------------------|---------------------------------------- + + + + + P.M---| A.H---------| +E|-----|-----------------7-5-4-5/7-4\2-|-------|-------|-------------|--- +B|-----|-----------------9-7-5-7/9-5\3-|-------|-------|-------------|--- +G|-----|-------------(9)-9-7-6-7/9-6\4-|-------|-------|-{x}\{x}\{x}\|--- +D|-----|-------------(9)-9-7-6-7/9-6\4-|-------|-------|-{x}\{x}\{x}\|--- +A|-5-5-|-6-7---7-7----7----------------|-------|-------|-------------|--- +E|-----|-----0-----0-------------------|-5-4-3-|-5-4-3-|-{5}-{4}-{3}-|--- + G F# F + + + + A.H----------| +E|------------|-24-23-22-----|----------------|-------------------|- +B|------------|--------------|----------------|-------------------|- +G|------------|--------------|---x\x----------|-------------------|- +D|------------|--------------|---x\x----------|-------------------|- +A|------------|--------------|----------------|-------------------|- +E|--5-4-3-(0)-|--5--4--3-(0)-|-5-----4-3-(0)--|-{5}-{4}-{3}-------|- + F# G# G + + + + +E|-----------|---------|------------------------13-------17-|--------15- +B|-----------|---------|---5-5-5-5-5-5-6-7--/15-13-15\13-17-|-15b17--15- +G|-----------|-{x}\{x}\|---5-5-5-5-5-5-6-7--/14----14\12----|-14b16----- +D|-----------|-{x}\{x}\|---5-5-5-5-5-5-6-7------------------|----------- +A|-----------|---------|---3-3-3-3-3-3-4-5------------------|----------- +E|-5-4-3-(0)-|-{5}-{4}-|------------------------------------|----------- + A G# + + + w/bar + 1/2 +E|-----------/\------------------------------------------|------------------- +B|-(15)b(17)//\\-5-5-5-5-5-5-6-7-------------------------|------------------- +G|-(14)b(16)/--\-5-5-5-5-5-5-6-7-------------9-9-9-7-7-7-|-12-12-12-11-11-11- +D|---------------5-5-5-5-5-5-6-7-------7-7-7-9-9-9-7-7-7-|--8--8--8--7--7--7- +A|---------------3-3-3-3-3-3-4-5-5-5-5-7-7-7-------------|------------------- +E|-------------------------------5-5-5-------------------|------------------- + + + + 2 + N.H------| +E|-----------------------------------------|-----------------------------/-- +B|----------10----10-10-10-----13b15--(13)\|-5-5-5-5-5-5-6-7-*----------/--- +G|-12-12-12-11-12-11-11-11-12--12b14--(12)\|-5-5-5-5-5-5-6-7-<5>|<7>\--/---- pull bar and bend +D|-12-12-12----12----------12--------------|-5-5-5-5-5-5-6-7---------\/----- behind string. +A|-----------------------------------------|-3-3-3-3-3-3-4-5---------------- +E|-----------------------------------------|-------------------------------- + *To the left of the + slash is guitar 1 To + the right is guitar 2. + +string flap \1 / \1 / \1 / + \/ \/ \/ +E|----|-------------------19p\17\p16-|-16h17\p16p\14-14h16p\14p\12h|-14p\ +B|----|-7-7-7-7-7-7-8-9---12-\10\p-9-|--9-10\--9-\-7--7--9-\-7-\-5h|--7-\ +G|----|-7-7-7-7-7-7-8-9--------------|-----------------------------|----- +D|----|-7-7-7-7-7-7-8-9----9p\-7\p-6-|--6h-7\p-6p\-4--4h-6p\-4p\-2h|--4p\ +A|--x-|-5-5-5-5-5-5-6-7--------------|-----------------------------|----- +E|--x-|-----------------0------------|-----------------------------|----- + + + + + +E|-12p\10-----------------------|-----------------------|----|------------- +B|--5-\-3-10-----9-----8--------|-10-----9-----8--------|----|-10-----9---- +G|--------12b14-11b13-10b12-----|-12b14-11b13-10b12-----|----|-12b14-11b13- +D|--2p\-0-----------------------|-----------------------|----|------------- +A|------------------------------|-----------------------|----|------------- +E|---------5-----4-----3----(0)-|--5-----4-----3----(0)-|----|--5-----4---- + + + + + +E|-----------|-----------------------|-----------------------|------------- +B|--8--------|-10-----9-----8--------|-10-----9-----8--------|-10-----9---- +G|-10b12-----|-12b14-11b13-10b12-----|-12b14-11b13-10b12-----|-12b14-11b13- +D|-----------|-----------------------|-----------------------|------------- +A|-----------|-----------------------|-----------------------|------------- +E|--3----(0)-|--5-----4-----3----(0)-|--5-----4-----3----(0)-|--5-----4---- + + + + + +E|-----------|-----------------------|-----------------------|---------- +B|--8--------|-10-----9-----8--------|-10-----9-----8--------|----10---- +G|-10b12-----|-12b14-11b13-10b12-----|-12b14-11b13-10b12-----|----12b14- +D|-----------|-----------------------|-----------------------|---------- +A|-----------|-----------------------|-----------------------|---------- +E|--3----(0)-|--5-----4-----3----(0)-|--5-----4-----3----(0)-|-----5---- + + + + + +E|-------|---------------21-----(21)--|-------------|------------------ +B|--9----|--------9-(9)\-20b24--(20)--|---7---------|-------9-(9)\----- +G|-11b13-|--------9-(9)\-18-----(18)--|-------7-7-6-|-------9-(9)\-0/-- +D|-------|--------9-(9)\--------------|-4-4-4-5-5-4-|-------9-(9)\-0/-- +A|-------|--------7-(7)\--------------|-------5-5-4-|-------7-(7)\----- +E|--4----|--0-0-0---------------------|-2-----3-3-2-|-0-0-0------------ + + + + + * * +E|------|----------------------------|-------------|-24-24-24-24--24-24- +B|------|---7----------------9---x-x-|---7---------|-24-24-24-24--24-24- +G|--8---|-------7-7-6--------9-------|-------7-7-6-|-------------------- +D|-12---|-4-4-4-5-5-4--------7-------|-4-4-4-5-5-4-|-------------------- +A|------|-------5-5-4--------7-------|-------5-5-4-|-------------------- +E|------|-2-----3-3-2--0-0-0---------|-2-----3-3-2-|-------------------- + *pull B stg. off + the side of the neck. + + -1 -1 -1 -1 -1 + \/ \/ \/ \/ \/ +E|-24-24-24-24-24--24-24-24-|---|-21\------------------------------------ +B|-24-24-24-24-24--24-24-24-|---|-19\--------------9-(9)-12-(12)-14-(14)- +G|--------------------------|-%-|-16\--------6-(6)-6-(6)-13-(13)-14-(14)- +D|--------------------------|---|------4-(4)-4-(4)-------14-(14)-16-(16)- +A|--------------------------|---|------2-(2)----------------------------- +E|--------------------------|---|---------------------------------------- + + + + -1 -1 + \/ \/ +E|-----------------------|---------------------------------------------- +B|-16-(16)-17-(17)-16-16-|-17-17-16-16---------------------------------- +G|-16-(16)-18-(18)-16-16-|-18-18-16-16-18-18-16-16-------------------16- +D|-18-(18)-19-(19)-18-18-|-19-19-18-18-19-19-18-18-19-19-16-16-19-19-16- +A|-----------------------|-------------21-21-18-18-21-21-18-18-21-21-18- +E|-----------------------|-------------------------21-21-19-19-21-21---- + + + + + +E|----|----------16----------------16--------19--r---||------------------- +B|----|-16-17-19-16-19-17-16-17-19-16-19b21--19---19-||-17----16----15---- +G|-16-|----16-18----18-18----16-18----18b20--19---18-||-19b21-18b20-17b19- +D|-16-|-19-18-19-21-19-18-19-18-19-21-19b21-------19-||------------------- +A|-18-|-21----------------21-------------------------||------------------- +E|----|----------------------------------------------||--5-----4-----3---- + + + + + +E-|-------------------|-------------------|-------------------|------------- +B-|-17----16----15----|-17----16----15----|-17----16----15----|-17----16---- +G-|-19b21-18b20-17b19-|-19b21-18b20-17b19-|-19b21-18b20-17b19-|-19b21-18b20- +D-|-------------------|-------------------|-------------------|------------- +A-|-------------------|-------------------|-------------------|------------- +E-|--5-----4-----3----|--5-----4-----3----|--5-----4-----3----|--5-----4---- + + + + + +E|-------|-------------------|-------------------|-------------|------- +B|-15----|-17----16----15----|-17----16----15----|-17----16----|-17---- +G|-17b19-|-19b21-18b20-17b19-|-19b21-18b20-17b19-|-19b21-18b20-|-19b21- +D|-------|-------------------|-------------------|-------------|------- +A|-------|-------------------|-------------------|-------------|------- +E|--3----|--5-----4-----3----|--5-----4-----3----|--5-----4----|------- + + + + + *--------| +E----|-----||-------12---------------|----------------------------------- +B----|-----||----------12-15-15-(15)-|-----17b21--r15----17-15\12-------- +G----|-----||-14b16------------------|---x------------16-----------14b16- +D----|-----||------------------------|-x--------------------------------- +A----|-----||------------------------|----------------------------------- +E----|-----||------------------------|----------------------------------- +*(Play all the avaliable E's +on the guitar in a chotic frenzy + + + A.H----| +E|-12----|----------------------------------------------------|--------- +B|----12-|-14\12p10----10-------------------------------------|---5p3p0h +G|-------|----------12----12b14-------------------------------|--------- +D|-------|----------------------------5-----------------------|--------- +A|-------|------------------------0-----7-6-5-----------------|--------- +E|-------|------------------------------------7-6-5-5-{3}-{0}-|--------- + B G# + + + + A.H-----------------| +E|--------------------------------|------------------------------------- +B|-5p3p0-5/7----------------------|------{3}---{5}---{7}--8p7-----10b12- +G|-----------6-(6)\p2b7--r(2)p0---|-{4}-----------------------9p7------- +D|------------------------------2-|------------------------------------- +A|--------------------------------|------------------------------------- +E|--------------------------------|------------------------------------- + D# A G# A# + + + + +E|--------------------------------------------------------|-12------------- +B|--r(10)/12b12--r(12)/15b14--r(15)/17b17--r(17)/20b19--\-|----15-12------- +G|--------------------------------------------------------|----------14b16- +D|--------------------------------------------------------|---------------- +A|--------------------------------------------------------|---------------- +E|--------------------------------------------------------|---------------- + + + + + +E|----------------------------------------------------19----19-18-17-16- +B|------------------------------12/14--14\11---------------------------- +G|--15~14b17--r(14)p12-----------------------------16----16------------- +D|---------------------14-11/12--9/11---9\-8---------------------------- +A|---------------------------------------------------------------------- +E|-------------------------9/10----------------------------------------- + + + + + +E|-------------------|-16----18-15-|-17-17------17-17------17-(17)h/18p +B|-19-18-17-16-15----|-------------|-------x----------x---------------- +G|----------------16-|----15-------|---------15---------15------------- +D|-------------------|-------------|----------------------------------- +A|-------------------|-------------|----------------------------------- +E|-------------------|-------------|----------------------------------- + + + + + +E|-14-|---------18----19\-|---------------------------------------------- +B|----|-------------------|---------------------------------------------- +G|----|-17p0h17----16-----|---------------------------------------------- +D|----|-------------------|-----{2}-----------------------11------------- +A|----|-------------------|----------------------10-12-14----14-12-10-12- +E|----|-------------------|-3-0---------10-12-14------------------------- + + + + + +E|----------------------------------------|---------------------------- +B|----------------------------------------|-------------------12h14p12- +G|----------------------11----------------|-11-------11-12-14---------- +D|----11-------11-12-14----14-12-11-12-14-|----12-14------------------- +A|-14----12-14----------------------------|---------------------------- +E|----------------------------------------|---------------------------- + + + + + +E|--------------------------------------------------------------------- +B|------12----------15----14-13-12-------------------------14-12------- +G|--h14----14-13-12----12----------15-14-13-12----------13-------13---- +D|---------------------------------------------14-13-12-------------14- +A|--------------------------------------------------------------------- +E|--------------------------------------------------------------------- + + + + + +E|-------------------------------------------------------|------------- +B|-------15-13-------------16-14-------------17-15-------|----------15- +G|----14-------14-------15-------15-------16-------16----|-14-16-18---- +D|-13-------------15-14-------------16-15-------------17-|------------- +A|-------------------------------------------------------|------------- +E|-------------------------------------------------------|------------- + + + + + +E|-------15-------15-17-19-17\--|-17----------------------------|--------- +B|-17-19----17-19-------------x\|----15----15-------------------|--------- +G|----------------------------x\|-------14----14----14----------|-9\8-(8)\ +D|----------------------------x\|----------------12----12----12-|--------- +A|------------------------------|-------------------------10----|--------- +E|------------------------------|-------------------------------|-0/3-(3)/ + + + + + +E|---------------------|---------------------|----21b23--(21)-|-16------- +B|---------------------|---------------------|----22b24--(22)-|-17-19b21- +G|-7-(7)\4-------------|---------7-7-7-8-8-8-|-9\-19b21--(19)-|-16-19b21- +D|---------7-7-7-5-5-5-|---5-7-9-------------|----------------|----19b21- +A|---------5-5-5-6-6-6-|-7-6-5---------------|----------------|---------- +E|-5-(5)/7-------------|-------7-5-5-5-3-3-3-|-0\-------------|---------- + + + + + +E--16--------16-------|-15~---15-11-14-(14)---10-11-|-12~11~10~11~-9~10- +B--17-19b21--17-19b21-|-16~---16-12-15--15----11-12-|-13~12~11~12~10~11- +G--16-19b21--16-19b21-|-15~---15-11-14--14----10-11-|-12~11~10~11~-9~10- +D-----19b21-----19b21-|-----------------------------|------------------- +A---------------------|-----------------------------|------------------- +E---------------------|-----------------------------|------------------- + + + + + +E-|-8~------------||------------------------|-----------------------|------- +B-|-9~------------||--12----12----12--------|-12----12----12--------|-12---- +G-|-8~------------||--14b16-14b16-14b16-----|-14b16-14b16-14b16-----|-14b16- +D-|---------------||------------------------|-----------------------|------- +A-|---------------||------------------------|-----------------------|------- +E-|---------------||---5-----4-----3----(0)-|--5-----4-----3----(0)-|--5---- + Depress & vibrate + simultaneously bar + + + +E|-----------------|-----------------------|-----------------------|------- +B|-12----12--------|-12----12----12--------|-12----14----14--------|-12---- +G|-14b16-14b16-----|-14b16-14b16-14b16-----|-14b16-16b18-16b18-----|-14b16- +D|-----------------|-----------------------|-----------------------|------- +A|-----------------|-----------------------|-----------------------|------- +E|--4-----3----(0)-|--5-----4-----3----(0)-|--5-----4-----3----(0)-|--5---- + + + + + +E|-----------------|-----------------------|-----------------------|------- +B|-14----14--------|-12----14----14--------|-17----14----14--------|-12---- +G|-16b18-16b18-----|-14b16-16b18-16b18-----|-19b21-16b18-16b18-----|-14b16- +D|-----------------|-----------------------|-----------------------|------- +A|-----------------|-----------------------|-----------------------|------- +E|--4-----3----(0)-|--5-----4-----3----(0)-|--5-----4-----3----(0)-|--5---- + + + + +E|-----------------|-----------------------|-----------------------|------- +B|-14----17--------|-14----14----14--------|-12----14----17--------|-17---- +G|-16b18-19b21-----|-16b18-16b18-16b18-----|-14b16-16b18-19b21-----|-19b21- +D|-----------------|-----------------------|-----------------------|------- +A|-----------------|-----------------------|-----------------------|------- +E|--4-----3----(0)-|--5-----4-----3----(0)-|--5-----4-----3----(0)-|--5---- + + + + + +E|-----------------|-----------------------|--|-----------------------|- +B|-17----17--------|-12----17----14--------|--|-12----17----14--------|- +G|-19b21-19b21-----|-14b16-19b21-16b18-----|--|-14b16-19b21-16b18-----|- +D|-----------------|-----------------------|--|-----------------------|- +A|-----------------|-----------------------|--|-----------------------|- +E|--4-----3----(0)-|--5-----4-----3----(0)-|--|--5-----4-----3----(0)-|- + + + + +E|-------------17--------|-17----17----17--------|------------------------- +B|-12----17----20b22-----|-20b22-20b22-20b22-----|-------12-------12------- +G|-14b16-19b21-----------|-----------------------|-14b16----14b16----14b16- +D|-----------------------|-----------------------|------------------------- +A|-----------------------|-----------------------|------------------------- +E|--5-----4-----3----(0)-|--5-----4-----3----(0)-|--5--------4--------3---- + + + + + +E--------|--------------------------------|---------------------------- +B-12--12-|-------14-14-------14--------14-|-------17-------17-------17- +G--------|-16b18-------16b18----16b18-----|-19b21----19b21----19b21---- +D--------|--------------------------------|---------------------------- +A--------|--------------------------------|---------------------------- +E----(0)-|--5--------4--------3-------(0)-|--5--------4--------3------- + + + + + +E|-----|-------17-17-------17-----------|-------17-17-------17-----------| +B|--17-|-20b22-------20b22----20b22-----|-20b22-------20b22----20b22-----| +G|-----|--------------------------------|--------------------------------| +D|-----|--------------------------------|--------------------------------| +A|-----|--------------------------------|--------------------------------| +E|-(0)-|--5--------4--------3-------(0)-|--5--------4--------3-------(0)-| + + + + * +E|-------17-------17----------8-------8-------8---9-10--|-\-/---------| +B|-20b22----20b22-----5|11b13---11b13---11b13-----6-7---|-------------| +G|--------------------5-----/-/-/-/-/-/-/---------6-7---|-------------| +D|--------------------5----/-/-/-/-/-/-/----------6-7---|-------------| +A|--------------------3---/-/-/-/-/-/-/-----------4-5---|-------------| +E|-5--------4-------------------------------------------|-0/13--(13)\-| + *depress bar as + far as possible + + ___________5x____________ +E|----------------------8-----------------9-10-|-17|22-15-------15-14|19-| +B|--------------5|11b13---11b13---11b13---6-7--|-------15-15-17-15-------| +G|--0\--/\------5------/-/-/-/-/-/-/------6-7--|----------14-16----------| +D|----\/--\-----5-----/-/-/-/-/-/-/-------6-7--|-------------------------| +A|---------\----3----/-/-/-/-/-/-/--------4-6--|-------------------------| +E|----------\----------------------------------|-------------------------| + guitar 1 to right + of slashes. + + +E|-17|22-15|20-14|19----------------------------8-------8-------8--9-10-| +B|-------------------17|22-15|20-13|19--5|11b13---11b13---11b13----6-7--| +G|--------------------------------------5------/-/-/-/-/-/---------6-7--| +D|--------------------------------------5-----/-/-/-/-/-/----------6-7--| +A|--------------------------------------3----/-/-/-/-/-/-----------4-5--| +E|----------------------------------------------------------------------| + + + +E|-------15|19-------15|19-------------------14|17--------------15|19---| +B|-------------------------------17b19|20b22-------15|19----------------| +G|-14|17-------14|17-------14|17----------------------------------------| +D|-------------------------------------------------------14|17----------| +A|----------------------------------------------------------------------| +E|----------------------------------------------------------------------| + + + +E|--------------------------------------15|19-------14|18-------------------| +B|--------------------------------------------------------------17b19|18b20-| +G|-16b18|19b21-(16)|(19)p14|17---14|17--------13|16-------12|15-------------| +D|--------------------------------------------------------------------------| +A|--------------------------------------------------------------------------| +E|--------------------------------------------------------------------------| + + + + +E|---------10-------10-------10--11-12-|----------12-16-12-------12----12-------| +B|-7|13b15----13b15----13b15-----6--9--|-------15----------15b17----15----15b17-| +G|-7-----/-/-/-/-/-/-/-/---------8--9--|-13-14----9--13-9--------9-----9--------| +D|-7----/-/-/-/-/-/-/-/----------8--9--|-------12----------12b14----12----12b14-| +A|-5---/-/-/-/-/-/-/-/-----------6--7--|-11-------------------------------------| +E|-------------------------------------|----------------------------------------| + + + + +E|-12--------|-----------12-16-12-------12----12--------12----------| +B|----15b17--|-------15----------15b17----15----15b17------15b17~~~-| +G|-9---------|-13-14-----9--13-9--------9-----9---------9-----------| +D|----12b14--|-------12----------12b14----12----12b14------12b14~~~-| +A|-----------|-11-12------------------------------------------------| +E|-----------|------------------------------------------------------| + + + + +E|-----------------------12-16|21-12|16-------------16|21p12|16---------12|16-| +B|----------------15|17--21-------------15b17|19b21--------------15|19--------| +G|-13|18---14|19---------9---13----9------------------13----9------12-----9---| +D|-----------------12----------------------12b14------------------------------| +A|--11------12----------------------------------------------------------------| +E|----------------------------------------------------------------------------| + + + + +E|--------------12|16--------------| +B|-15b17|19b21---------15b17|19b21-| +G|----------------9----------------| +D|--13-----9------------13-----9---| +A|---------------------------------| +E|---------------------------------| + + + + +E|-----------------------12-16|21-12|16-------12|16-16|21-12|16-------17b19|22b24-| +B|----------------15|17--21-------------15|19-------------------15|19-------------| +G|-13|18---14|19---------9---13----9------------9-----13----9-------------14------| +D|-----------------12--------------------12-----------------------9---------------| +A|--11------12--------------------------------------------------------------------| +E|--------------------------------------------------------------------------------| + + + +E|-----|-------|-| +B|-----|-------|-| +G|-----|-------|-| +D|-----|-------|-| +A|-----|-------|-| +E|-5-4-|-3-4-5-|-| + + + + + + + + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - THE AUDIENCE IS LISTENING.tab b/guitar/tabs/Steve Vai/Steve Vai - THE AUDIENCE IS LISTENING.tab new file mode 100644 index 0000000..85772f2 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - THE AUDIENCE IS LISTENING.tab @@ -0,0 +1,534 @@ +THE AUDIENCE IS LISTENING +BY STEVE VAI + +fast=133 + -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 +|----------------------------------------------------------- +|----------------------------------------------------------- +|--0/7\--/\--/\--/\--/\--/\--/\--/\--/\--/\--/-------------- +|------\/--\/--\/--\/--\/--\/--\/--\/--\/--\/--------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +slow slide up to 7 while pulling the whammy bar up and down. + +|-----------------------3----------------------------------- +|-----------------7-----3----------------------------------- +|------2----5-----7-------------2-------2-------2----5------ +|------2----5-------------------2-------2-------2----5------ +|--3^0---/7---6-5---5\3---2-0---------------3^0---/7---6-5-- +|-----------------------------3---3-2-1---0----------------- +|----------------------------------------------------------- + + +|------------------5-----8-------5----------------------3--- +|--7---------------5-----8-------5----------------7-----3--- +|--7-----------------------------------2----5-----7--------- +|--------------------------------------2----5--------------- +|----5\3--2-0--5/6---6/7---5^6^7---3^0---/7---6-5---5\3----- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|------------------------------------------- +|------------------------------------------- +|--------2----------------2----5-----7------ +|--------2-------2--------2----5-----7------ +|--2-0-----------2----3^0---/7---6-5---5\3-- +|------3---3-2-1---0------------------------ +|------------------------------------------- + + full + P.H---| A.H----| +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|--5-(5)------------------------------------)(---------5---- +|--------7---5^2-3--5^3------------3-(3)-5-7-(5)^3---x------ +|-----------------------x-5~~--(x)-----------------x-------- + + full full + P.H----| A.H P.M---------| A.H P.M +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|--)(~~~~~-------------------------------)(-------5-5/7----- +|-5--5------7---5-3^0-5^3------------3--5--5^3----5-5/7----- +|--------------------------5-5~~~--x-----------5--3-3/5-0-0- + + +w/wah +|----------------------------------------------------------- +|--7/1919191919191919191919--21-21\19191919/2121--21222121-- +|--7/1919191919191919191919--21-21\19191919/2121--21232323-- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|----------------------------------------------------------- +|--212121\19--19-19-19-17-17-17\15-15-15-15-14-14-14-14-12\- +|--212121\19--19-19-19-18-18-18\16-16-16-16-14-14-14-14-13\- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + A.H----| A.H P.M +|----------------------------------------------------------- +|-10-------------------------------------------------------- +|-11-------------------------------------------------------- +|--------------------------------------)-------------------- +|-----5---------------------)(--------5--------------------- +|-------7-5-3-5^3-------3--5--5-3-------7-5-3^0-5^3-0-0----- +|-----------------5-5~~~----------5-x----------------------- + + + T T T T T T +|--14^7^10-14^7^10------------------------------------------ +|------------------14p10^8^7^8^10-14^10^8^7----------------- +|-------------------------------------------9^14^9-14^9^7/9- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + P.M---------------------------| +|----------------------------------------------------------- +|------------------------------------------------8---------- +|--(9)~~~----------------------------------------7--9------- +|----------2-(2)-2-------2----------2--2---------5--9--2--2- +|----------2-(2)-2-------2----------2--2------------7--2--2- +|----------0-(0)-0---2---0--3--2----0--0----2----------0--0- +|------------------3-0-3-------0--3------3--0--3------------ + + P.M------| full +|------------3---------------------0----------0------------- +|------------3---------------)(-------)(---------)(--------- +|------------0--------------2--2^0---2--2^0-----2--2^0------ +|---------------0^2--2--2^0-----------------2----------2---- +|---------------0^2--2--2^0--------------------------------- +|----2------------------------------------------------------ +|--3-0--3-x------------------------------------------------- + +w/wah full +|-------)(------------------------------(x)----------------- +|-----15-(15)--12-12-------------------------------------12- +|--------------------14-12-14^12~~~--12-----12--12-12-14---- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|----------------------------------------------------------- +|----------x---15-12------------------------------10-10\8--- +|-12~~~------x-------14-12-14-12-12----------------9--9\7--- +|-------14--------------------------14^12-14-14~~~-7--7\5--- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full +|----)(----------------------------------------------------- +|--15--15-12------------------------------------------------ +|------------14-12-12^14~~~--12-----12--14-15-12-15-12------ +|-------------------------------(14)-------------------14--- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full +|----------)(----------------------------------------------- +|--------15--15-12-----------------------------------7/15--- +|------------------14-12-14--12-12-------------------------- +|--14-12---------------------------14-12-14-(14)~~~\-------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full +|----------------------------------------------)(----------- +|--(12)--15--12--12\10-10~~~~~~-10/12/15\12--15--15-(15)~~~- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|----------------------------------------------------------- +|----------------------------------------------------------- +|---------------------------------------14-15-12-15-12------ +|--12~~-14-12(x)(x)12~~~--14-12---12~~~----------------14~~- +|-------------------------------x--------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full +|----)(----------------------------------------------------- +|--15--15-12------------------------------------------------ +|------------14-12-14-12------------------------------------ +|------------------------14-12-14-(14)~~~--x~~~~~~/-----2--- +|---------------------------------------------------3^0----- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|-----------------3----------------------------------------- +|-----------7-----3-----------------------------------7----- +|-----5-----7------------------------------2----5-----7----- +|-----5--------------------2-------2-------2----5----------- +|--/7---6-5---5\3----2-0---2-------2---3^0---/7---6-5---5\3- +|------------------------3---3-2-1---0---------------------- +|----------------------------------------------------------- + + +|--3----------5-----8-------5-------------------------3----- +|--3----------5-----8-------5-------------------7-----3----- +|------------------------------------2----5-----7----------- +|-----------------------------7------2----5----------------- +|----2-0--5/6---6/7---5^6^7------3^0---/7---6-5---5\3---2-0- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|-------------------------------------3----------5-----8---- +|-------------------------------7-----3----------5-----8---- +|----2-------2-------2----5-----7--------------------------- +|----2-------2-------2----5--------------------------------- +|----------------3^0---/7---6-5---5\3---2-0--5/6---6/7------ +|--3---3-2-1---0-------------------------------------------- +|----------------------------------------------------------- + + full full +|--------5-------------------------------------------------- +|--------5-------------------------------------------------- +|----------------------------------------------------------- +|----------7----------------------------------------)(------ +|--5^6^7---------5---------------------)(-------5--5--5~~--- +|--------------x---7-5-3-5^3-------3--5-(5)^3-------------7- +|----------------------------5-5~~------------5------------- + + N.H +5 -5 +5 -5 +|-------------------------------------/15-(15)----12121212-- +|-------------------------------------/15-(15)-12-12121212-- +|----------------------------------------------------------- +|----------------------3/\/\/\/\/\/\------------------------ +|----------------------------------------------------------- +|-5--3^0-5^3--------3--------------------------------------- +|------------5~~~-x----------------------------------------- + + +|-1212121212121212121212121212\101010/12-12\10-10/12-12\10-- +|-1212121212121212121212121212\101010/12-12\10-10/12-12\10-- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full +|-10/12-12\10/12-(12)\----------0-0--/10-10-10-12-11\10--17- +|-10/12-12\10/12-(12)\--)(------3/5--/10-10-10-12-11\10--15- +|----------------------2--2-0----------------------------14- +|-----------------------------2----------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full +|----)(----------------------------------------------------- +|--15--15~~-12--------------------------------12------------ +|--------------14-12-12^14~~-12-x-12~~12~~-14----14-13-12--- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full N.H -5 +|----------------------------------------------------------- +|----------------------)------------------------------------ +|-----------------14-14--x--12------------------------------ +|--14-14-(x)(x)(x)-------------14--12---14~~~14\x---5\------ +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full + full ) ( full +|-------------------)----16-16----------------)(------------ +|--17\15-12-15-17-17--17-------19^17^15-15--17--17--15^17--- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|-----------------------14/17\14-14-14\12-12~~-10/14\10-/14- +|-(17)-15---------------12/15\12-12-12\10-10~~-12/15\12-/15- +|---------16\14--12-----11/14\11-11-11\9--9~~--11/14\11-/14- +|-------------------14-------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full + )( +|--14)(14~~~\----------------------------------------------- +|--15)(15~~~\----------------------------------------)------ +|--14--14~~~\12~~~-14-12-(x)-12~~14-12-(x)-12~~-14-14-12-14- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full tr~~~~~~~~~~~~~~~| +|------)(--------------------------------------------------- +|----15--15--12----------------------------------------12--- +|---------------14-12-14-12----------------------------12--- +|-14------------------------14^12-12^14^12------------------ +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + full full + ) ( )( full +|----------------16--16-16-16--16-(16)-------)(------------- +|-15-12-12-15-12---)(--------)(--------15--15--15--12------- +|-14-12-12-14-12-13--13-13-13--13-(13)----------------14-12- +|--------------------------------------12------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|----------------------------------------------------------- +|----------------------------------------------------------- +|-14-12----------------------------------------------------- +|-------14^12-14-(14)^12----------12-15^13---------13^16^14- +|------------------------14^12-14----------13^15^13--------- +|----------------------------------------------------------- +|----------------------------------------------------------- + + +|------------------------------13~~~-----14\----------------- +|----13------------------------13----0^3-14\-2^5^2^0-2^5^2^0- +|------15-13----------16-14---------------------------------- +|------------16-14----------16------------------------------- +|-15---------------16---------------------------------------- +|------------------------------------------------------------ +|------------------------------------------------------------ + + +|-------------------------------2^5^2^0---------------------- +|-2^5^2^0-0^2^5^0-0-2^5^2^0^2^5-------0-2-2^5^2^0-5-2^5^2^0-- +|------------------------------------------------------------ +|------------------------------------------------------------ +|------------------------------------------------------------ +|------------------------------------------------------------ +|------------------------------------------------------------ + + P.M-------- +|------------------------------------------------------------ +|------------------------------------------------------------ +|-2^4^2^0---0^4^2^4^2^0---0---------------------------------- +|---------4-------------4---4^2-2^4^2---2-------------------- +|-------------------------------------4---4^2^4^2^0-0-0-0-0-- +|------------------------------------------------------------ +|------------------------------------------------------------ + +----| +|------------------------------------------------------------ +|--------------------------2-2^5^2^0-2-5^2^0-0^2^5-2^5^2----- +|------------------------------------------------------------ +|------------------------------------------------------------ +|-0---2^4^2-0^2^0-------------------------------------------- +|-----------------0-5-2~~~----------------------------------- +|------------------------------------------------------------ + + +|-------------------2^5^2^0---------------------------------- +|-0^2^5-2^5^2-0^2^5---------5^2-5^2^0-0-0-0-0---------------- +|---------------------------------------------2-2^0-0-2-2-2-- +|------------------------------------------------------------ +|------------------------------------------------------------ +|------------------------------------------------------------ +|------------------------------------------------------------ + + +|-----5-5-5^7^5---------------------------------------------- +|---------------5^7-5^7^5\2-2-2-2^5^2\0-0-0-0---------------- +|-4/6-----------------------------------------4^2^0-----0---- +|---------------------------------------------------2^4------ +|------------------------------------------------------------ +|------------------------------------------------------------ +|------------------------------------------------------------ + + +|------------------------------------------------------------ +|------------------------------------------------------------ +|------------------------------------------------------------ +|--4^2^4^2---0----------------------------------------------- +|----------4---4^2-4^2^0-0----------------------------------- +|--------------------------0--2-2-2-2^0^2-2-2-2^0-0-2-2-2---- +|------------------------------------------------------------ + + P.M-------------------------------------------------------- +|-------------------------------------------------------2^0-- +|-----------------------------------------------2^5^2^0------ +|-------------------------------2-2/4\~~~~~~~~~-------------- +|------------------------------------------------------------ +|------3-3-3-3-3-3------------------------------------------- +|--0-0-------------0-0-0-2-2-2------------------------------- +|------------------------------------------------------------ + +---------------------------------| +|-----3^1-----5^7^5---6^4---8^6^4-9^7-5----10^8-11-12-7^11^9^7- +|---3-----4-5-------6-----8-----------5-10---------12---------- +|-------------------------------------------------------------- +|-4------------------------------------------------------------ +|-------------------------------------------------------------- +|-------------------------------------------------------------- +|-------------------------------------------------------------- + + +|-9^12^9-10^13^10-11^14^11-17\--/1717171717171717171717171717-- +|-------------------------------/1919191919191919191919191919-- +|-------------------------------------------------------------- +|-------------------------------------------------------------- +|-------------------------------------------------------------- +|-------------------------------------------------------------- +|-------------------------------------------------------------- + + +|-17-17\16161616-14/16--16~~\------19^16^0----17^14^0----16^12^0- +|-19-19\17171717-15/17--17~~\--/17---------15---------14--------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- + + P.H +|-----14^10^0----12^9^0----10^9^7-------------------------------- +|--12---------10--------10--------10^9^7------------------------- +|----------------------------------------9^7^6------------------- +|----------------------------------------------9^7^6-9\4-4~~~~--- +|---------------------------------------------------------------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- + w/bar + full full +1 +3 -2 -1 +|-------)(------------------------------------------------------- +|------9-(9)^7---------)--)(------------------------------------- +|--------------9-7\6--6--6--6~~--------2------------------------- +|-(x)/--------------------------18\6\4--------------------------- +|----------------------------------------4-5-4/\(4)/\(4)\/(4)\/-- +|---------------------------------------------------------------- +|---------------------------------------------------------------- + full + +1 -1 full full ) +|---------------------------------)(----------------17---17-15--- +|-----------------)(------------10--10-8-8^10-------------------- +|----------------4--2~~--2\7~~~---------------9~~~--------------- +|----------------4--2~~------------------------------------------ +|-(4)/\(4)\/---7------------------------------------------------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- + full full w/bar + ) )( slow dive w/bar -2 N.H +3 -13 +|--17/19-20----22--22-20-22--------22--------24\----------------- +|---------------------------22~~~~-22--------24\----------------- +|--------------------------------------------------5--/-----\---- +|---------------------------------------------------------------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- +|---------------------------------------------------------------- + w/bar + -2 1/2 +|-0-0-0-0-0-0--------------------------------0--------------/--- +|-0-0-0-0-0-0------------------------------0---0---x~~~\-0\/---- +|-0-0-0-0-0-0----------------------------0-------3-------------- +|--------------4------4--4--4----------4---------3-------------- +|--------------4------4--4--4--------------------1-------------- +|--------------2------2--2--2--0--2--3-------------------------- +|--------------------------------------------------------------- + + full full +|---)(---------------------------------------------------)(----- +|-15--15-12----------------------------12---)~~~-------15--15--- +|-----------14-12--14~~~-12--12-12--14----12-------------------- +|------------------------------------------------14^12---------- +|--------------------------------------------------------------- +|--------------------------------------------------------------- +|--------------------------------------------------------------- + + full +|-------------------------------------------)(-------------------- +|-12--------------------------------------15--15-12--------------- +|----14-12-14-14-12---------------------------------14-12-12^14~~- +|-------------------14-12-14----(14)\--14------------------------- +|----------------------------------------------------------------- +|----------------------------------------------------------------- +|----------------------------------------------------------------- + + full +|--------------------------------)(------------------------------- +|------------)-----12----------15--15-12-14-12-14----------------- +|-12-12-12-12---14----12--------------------------14^12-14~~------ +|------------------------14^12-------------------------------14~~- +|----------------------------------------------------------------- +|----------------------------------------------------------------- +|----------------------------------------------------------------- + + full full full +|----------------------------)----------------------)---)--------- +|---------)(---------------15---------------------15--15---------- +|-------14--14^12-------12-14-(14)^12-------------14--14--14^12--- +|-14~~~-----------14-14---------------14-14~~~~~~----------------- +|----------------------------------------------------------------- +|----------------------------------------------------------------- +|----------------------------------------------------------------- + + +|---------)---------------)-----------------------)-------------- +|-------15--------------15----------------------15--12----------- +|-------14--14^12-------14-(14)(14)^12----------14----14^12------ +|-14^12-----------14^12----------------14^12---------------14^12- +|--------------------------------------------14------------------ +|---------------------------------------------------------------- +|---------------------------------------------------------------- + + +|---------)---------------------------------------------------- +|-------15----)(----------------------------------------------- +|-------14--14-(14)^12----------------------------------------- +|---------------------14^12----------------12\----12----------- +|-14^12---------------------14^12\10-------12\----12-x\x/x\x/-- +|------------------------------------12^10--------10----------- +|-------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - THERE'S A FIRE IN THE HOUSE.tab b/guitar/tabs/Steve Vai/Steve Vai - THERE'S A FIRE IN THE HOUSE.tab new file mode 100644 index 0000000..a7dbb9d --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - THERE'S A FIRE IN THE HOUSE.tab @@ -0,0 +1,181 @@ +THERE'S A FIRE IN THE HOUSE +By Steve Vai + +(6)=C (3)=F +(5)=G (2)=A +(4)=C (1)=D + W/Keyboard + Siren noises Siren noises P.M-----| +|------------------|--------------------------------| +|------------------|--------------------------------| +|------------------|--------------------------------| +|------------------|Distorted-----------------------| +|------------------|------4-(4)-(4)-(4)-(4)-4-4-4-4-| +|------------------|-/18\-4-(4)-(4)-(4)-(4)-4-4-4-4-| + + W/Keyboard + siren noises +|------------------------------| +|------------------------------| +|------------------------------| +|------------------------------| +|------7-(7)-(7)-(7)-(7)-------| +|-/18\-7-(7)-(7)-(7)-(7)--/18\-| + + Distorted Guitar 1 +|-12-12-12-10-12-15-15-14-15-12-12-12-10-12-8-8-7-8-| +|-10-10-10--8-10-13-13-12-13-10-10-10--8-10-6-6-6-6-| +|--9--9--9--7--9-12-12-11-12--9--9--9--7--9-5-5-5-5-| +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| + Guitar 2 +|---------------------------------------------------| +|---------------------------------------------------| +|---------------------------------------------------| +|-0-(0)-(0)-(0)-(0)-(0)-(0)-0-(0)-(0)-(0)-3-(3)-(3)-| +|-0-(0)-(0)-(0)-(0)-(0)-(0)-0-(0)-(0)-(0)-3-(3)-(3)-| +|-0-(0)-(0)-(0)-(0)-(0)-(0)-0-(0)-(0)-(0)-3-(3)-(3)-| + + Guitar 1 +|-12-12-12-10-12-15-15-14-15-12-12-12-10-12-8-8-7-8-----| +|-10-10-10--8-10-13-13-12-13-10-10-10--8-10-6-6-6-6-----| +|--9--9--9--7--9-12-12-11-12--9--9--9--7--9-5-5-5-5-----| +|-------------------------------------------------------| +|-------------------------------------------------------| +|-------------------------------------------------------| + Guitar 2 2x 2nd ending +|-------------------------------------------|-----------| +|-------------------------------------------|-----------| +|-------------------------------------------|-----------| +|-0-0-0--0-0-0--0-0-0--0-0-0--0-0--3-3-3--3-|-3-(3)-(3)-| +|-0-0-0--0-0-0--0-0-0--0-0-0--0-0--3-3-3--3-|-3-(3)-(3)-| +|-0-0-0--0-0-0--0-0-0--0-0-0--0-0--3-3-3--3-|-3-(3)-(3)-| + + * /\ w/Bar flatter against pickups to make a thunder noise +|-x/--\(x)------------------|w/wah +|-x-/\-(x)------------------| +|-x/--\(x)------------------| +|-------------x\/\/\/\/\/---| +|-------------x\/\/\/\/\/---| +|-------------x\/\/\/\/\/---| + *=Whammy pedal + + p.m-| p.m-| p.m-----------| p.m-| +|-------------------------------------------------------------|Do fill in 1 +|-------------------------------------------------------------|fist.Then do +|-------------------------------------------------------------|fill in 2 +|-------------------------------------------------------------|the second +|----5---0-3--5~~--0-3--5~~--0-3-5-3-5-3-0-5---0-3--5~~--3-3--|time. +|-/18\---0-3--5~~--0-3--5~~--0-3-5---5-3-0-----0-3--5~~-------| + +fill in 1 fill in 2 + p.m 1/2 +|-----------------|--------------------| +|-----------------|--A.H---------------| +|-----------------|---)(---------------| +|-5^3^0-----A.H---|--5-(5)~~~-3-A.H----| +|--------5---5~~~-|-------------5~~~---| +|-----------------|--------------------| + +filtered with wah + o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o + 1/2 1/2 1/2 +|----------------------------------------------------------------| +|------------------)(-----------------)----------)(--------------| +|-/14~-14~-14-16-16-(16)-14-13-----/16---17-19-19-(19)-17-16~~---| +|------------------------------14--------------------------------| +|----------------------------------------------------------------| +|----------------------------------------------------------------| + treble wah + o o o o o o o o o o o o o o o o o o o o + + + + + + + + + + + + + full~~ + 1/2 1/2 ) 1/2 +|----------------------------------15---------------------------| +|----)~~~--------)(---------------------------------------)(----| +|-/19----19-21-21-(21)-19-17-15-14--------14~-14~-14-16-16-(16)-| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1/2 1/2 1/2 1/2 +|------------------------------------------------------------------| +|-------------)---------)(----------------)---------)(-------------| +|--14-13---/16--17-19-19-(19)-17-16~~--/19--19-21-21-(21)-19-17-15-| +|-------14---------------------------------------------------------| +|------------------------------------------------------------------| +|------------------------------------------------------------------| + + +|-----23----23----23----23-----------------------------------------| +|--22----22----22----22--------------------------------------------| +|--------------------------10-11-12-17~~-15-14^13^14--12-10~~-12~~-| +|------------------------------------------------------------------| +|------------------------------------------------------------------| +|------------------------------------------------------------------| + + full A.H +|------------------------------------------------| +|-------------------------------------)----(-----| +|-14~~\-12-13-14--21-19-18^19^18-16-14-----(14)--| +|------------------------------------------------| +|------------------------------------------------| +|------------------------------------------------| + + guitar 1 +|-----------20-18-17^18^17--------------------------------------| +|--18-19-20----------------20-18~~-20~~\18/20\18/20\18/20\18/20-| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| + guitar 2 +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|-----------17-15-14^15^14--------------------------------------| +|--15-16-17----------------17-15~~-17~~\15/17\15/17\15/17\15/17-| +|---------------------------------------------------------------| +|---------------------------------------------------------------| + full----------------------| + ) GTR 1 +|-15-16-17-24~~-22-21^22^21-17--24---24-24-24-24-24-24-24-------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| + full-------------------| GTR 2 +|---------------------------------------------------------------| +|---------------------------------)-----------------------------| +|-12-13-14-21~~-19-18^17^18-14--21-21-21-21-21-21-21-21---------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| +|---------------------------------------------------------------| + + guitar 1 + +|-12-12-12-10-12--15--15--14--15-12-12-12-10-12--8--8--7--8---| +|-10-10-10--8-10--13--13--12--13-10-10-10--8-10--6--6--6--6---| +|--9--9--9--7--9--12--12--11--12--9--9--9--7--9--5--5--5--5---| +|-------------------------------------------------------------| +|-------------------------------------------------------------| +|-------------------------------------------------------------| + guitar 2 +|-------------------------------------------------------------| +|-------------------------------------------------------------| +|-------------------------------------------------------------| +|-0-0-0--0-0-0--0-0-0--0-0-0--0-0-0--0-0-0--0-0--3-3-3--3-----| +|-0-0-0--0-0-0--0-0-0--0-0-0--0-0-0--0-0-0--0-0--3-3-3--3-----| +|-0-0-0--0-0-0--0-0-0--0-0-0--0-0-0--0-0-0--0-0--3-3-3--3-----| + + +|- +| +|-\/\/\/\/\/\/\/ +| +| +| + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - Taurus.tab b/guitar/tabs/Steve Vai/Steve Vai - Taurus.tab new file mode 100644 index 0000000..1635789 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - Taurus.tab @@ -0,0 +1,428 @@ + + 1/2 1/2 full +E-----------)-(----------------------)-(----------)-(-------------------| +B---------12-(12)---12~~~-12-10-12-12-(12)---10-10-(10)---9~~~-15-------| +G-------x---------------------------------------------------------------| +D-----x-----------------------------------------------------------------| +A---x-------------------------------------------------------------------| +E-----------------------------------------------------------------------| + + w/bar w/bar + scoop-----------------------| -5 shake bar +E-----------------------------------------------------------------------| +B-----------------------------------------------------------------------| +G---13\10\9~~~-----------9-10-13-(13)---10-9-(9)-10-7-(7)---9p7~~~~~~~--| +D-----------------------------------------------------------------------| +A-----------------------------------------------------------------------| +E-----------------------------------------------------------------------| + full + ) ( +E---------14-17-16-------17-(17)---16-16-17-16-14-16-14-----| +B--/15-15----------15---------------------------------------| +G---------------------16------------------------------------| +D-----------------------------------------------------------| +A-----------------------------------------------------------| +E-----------------------------------------------------------| + + full + ) 1/2 +E---12-14-12-10/12\10/12\10/12\10-10~~~--20-19-17-15---)-(---------------| +B----------------------------------------20-19-17-15-12-(12)---10--------| +G------------------------------------------------------------------12----| +D------------------------------------------------------------------------| +A------------------------------------------------------------------------| +E------------------------------------------------------------------------| + + + 1/2 full +E-------------------------------------)--12-14----15-14-12--------------| +B-----------------------------------13---------15----------15-13-12-----| +G---11-9----------------------------------------------------------------| +D--------12-10-9----------)-(-------------------------------------------| +A----------------12-10-9-9-(9)-9-9--------------------------------------| +E-----------------------------------------------------------------------| + + + t t t t t t t t t t +E-/10h13p10h13p10h13p10h13p10h13p10h13p10h13p10h13p10h13p10h13p10h12p10-| +B-----------------------------------------------------------------------| +G-----------------------------------------------------------------------| +D-----------------------------------------------------------------------| +A-----------------------------------------------------------------------| +E-----------------------------------------------------------------------| + + + t t t t t t +E-13p10h12p10h13p10h12p10h13p10h12p10h13p10h12p10h13p10h12p10h13p10h12p10-| +B-------------------------------------------------------------------------| +G-------------------------------------------------------------------------| +D-------------------------------------------------------------------------| +A-------------------------------------------------------------------------| +E-------------------------------------------------------------------------| + + + t t t t t t t t t +E-h13p10h12p10h13p10h13p10p7h13p10h13p10p7h13p10h13p10p7h13p10h13p10p7--| +B-----------------------------------------------------------------------| +G-----------------------------------------------------------------------| +D-----------------------------------------------------------------------| +A-----------------------------------------------------------------------| +E-----------------------------------------------------------------------| + + + + + t t t t t t t +E-h13p10h13p10p7h13p10h13p10p7-t----13p10p7-t----13p10p7-t----13p10p7-t----| +B------------------------------12p9---------12p9---------12p9---------12p9-| +G--------------------------------------------------------------------------| +D--------------------------------------------------------------------------| +A--------------------------------------------------------------------------| +E--------------------------------------------------------------------------| + + + t t t t t t t t t t +E-19p16h19p16p13p10h16p13h16p13p10h16p13h16p13p10h19p16p13p10h16p13h16-| +B----------------------------------------------------------------------| +G----------------------------------------------------------------------| +D----------------------------------------------------------------------| +A----------------------------------------------------------------------| +E----------------------------------------------------------------------| + + t t t t t +E-p13p10h16p13h16p13p10h19p16p13p10h13h16h19p16p13p10h13h16h19p16p13p-| +B---------------------------------------------------------------------| +G---------------------------------------------------------------------| +D---------------------------------------------------------------------| +A---------------------------------------------------------------------| +E---------------------------------------------------------------------| + full + t t )------( +E-10h22p19p16p13h16h19h22p19p16p13h16h19--22--(22)--22-22~~-21-0-21-0-| +B---------------------------------------------------------------------| +G---------------------------------------------------------------------| +D---------------------------------------------------------------------| +A---------------------------------------------------------------------| +E---------------------------------------------------------------------| + + +E-19-0-19-0-17-0-17-0-0-16-0-16-0-14-0-14-0-12-0-12-0--------------------| +B------------------------------------------------------------t-----------| +G-----------------------------------------------------/12h16h21p12\11/12-| +D------------------------------------------------------------------------| +A------------------------------------------------------------------------| +E------------------------------------------------------------------------| + + +E------------------------------------------------------| +B--t---------------------13-15-17-14-15-17-19-19~~~~---|Now use an +G-h21-----------12-14-16-------------------------------|octaver set +D-----4h5p4--------------------------------------------|one octave +A-----------7------------------------------------------|down and one +E------------------------------------------------------|octave up + + P.S mute +E----------------------------------------------------------------------| +B----------------------------------------------------------------------| +G-------------------/9~~~---------------7-9----------------------------| +D-----let ring---------------7/9-9--8-9-----9--------------------------| +A--x\--2-(2)----x---------x--5/7-7------------12-11~~~-7-8-11-8-7-8-11-| +E--x\--0-(0)----x---------x--------------------------------------------| + + +E---------------------------------------------------------------------|octaver +B---------------------------------------------------------------------|off +G-------7-9------8------7-----6-------/9~-----------------------------| +D-----9-----10-9---10-9---9-8---8-7------------12-12\10-10\9-10/12-9--| +A-8-7-------------------------------------7~~~-10-10\8--8\-7-8-/10-7--| +E---------------------------------------------------------------------| + + 1/2 1/2 1/2 P.S full full full full full +E---------------let ring---------------------------------let ring-|octaver +B--17-)-12-)-16-)-(16)-----------10-)-12-)-10-)--9-)--5-)-(5)-----|on +G---20---15----19-(19)------------12---14---12---11----7--(7)-----| +D-------------------------x\--------------------------------------| +A-------------------------x\--------------------------------------| +E-------------------------x\--------------------------------------| + + + +E---------------------------------------------------------------------| +B---------------------------------------------------------------------| +G---------------------------------------------------------------------| +D-7/9-9-9-9/10\9-9-10-13-13/14\13-13/14-16----------------------------| +A-5/7-7-7-7/8-\7-7-8--11-11/12\11-11/12-14-15-14-14-14-15-14-14-14-17-| +E---------------------------------------------------------------------| + + +E----------------------------------------------------------------------| +B----------------------------------------------------------------------| +G-----------------------------------------------------------------13---| +D--------------------------------------------------12--12-15-12-15--15-| +A-15-14-14-14-15-14-14-14-17~~~-----11--11-14-11-14--14----------------| +E------------------------------10-13--13-------------------------------| + + +E---------------------------16--16-19-16-19--19-17-16-16-20-17-16-16-| +B------------15--15-18-15-18--18-------------------------------------| +G-13-16-13-16--16----------------------------------------------------| +D--------------------------------------------------------------------| +A--------------------------------------------------------------------| +E--------------------------------------------------------------------| + 1/2 + ) +E-19-17-16-16-20-17-16-16-21~(21)~~-------------------------------------| +B-----------------------------------------------------------------------| +G-----------------------------------/9~~11~~12~~14~~13~~14~~14~~15~~14~~| +D-----------------------------------------------------------------------| +A-----------------------------------------------------------------------| +E-----------------------------------------------------------------------| + + +E-------------------------------------------------------------------------| +B-------------------------------------------------------------------------| +G-12~~12(12)\9-9~~-9-X-9-X-9-X-9-X-9-X-8-X-8-X-8-X-8-X-8-X-7-X-7-X-7-X-7--| +D-------------------------------------------------------------------------| +A-------------------------------------------------------------------------| +E-------------------------------------------------------------------------| + + +E-------------------------------------------------------------------------| +B-------------------------------------------------------------------------| +G-7-X-6-X-6-X-6-X-6-X-6-X-9-X-9-X-9-X-9-X-9-X-8-X-8-X-8-X-8-X-8-X-7-X-7-X-| +D-------------------------------------------------------------------------| +A-------------------------------------------------------------------------| +E-------------------------------------------------------------------------| + + p.m--| p.m-| p.m 4X +E---------------------------------|------------------------------| +B---------------------------------|------------------------------| +G-7-X-7-X-7-X-6-X-6-X-6-X-6-X-6-X-|------------------------------| +D---------------------------------|------------------------------| +A---------------------------------|--------3---------3-----5-(5)-| +E---------------------------------|-1-1-1--1--1-1-1--1--0--3-(3)-| + + +E----------12-12-12-13-12h13p12----12----12-15-13h15p13\12-13-12h13p12\10-| +B----14-15----------------------15----15----------------------------------| +G-14----------------------------------------------------------------------| +D-------------------------------------------------------------------------| +A-------------------------------------------------------------------------| +E-------------------------------------------------------------------------| + +E-12-10h12p10\9-10-9h10p9---------------9h12p9h10h12p10p9--------------------| +B-------------------------11-10h11-10~~-------------------h12p9h10h12p10p9\7-| +G----------------------------------------------------------------------------| +D----------------------------------------------------------------------------| +A----------------------------------------------------------------------------| +E----------------------------------------------------------------------------| + + + + + + +E----------------------------------------------------| +B----------------------------------------------------| +G-h9p7\6h7h9p7p6-------------------------------------| +D----------------h9p6h7h9p7p6\4----------------------| +A-------------------------------h7p4h5h7p5p4---------| +E--------------------------------------------5~~~~---| + + +E----------12-12-12-13-12h13p12----12----12-15-13h15p13\12-13-12h13p12\10-| +B----14-15----------------------15----15----------------------------------| +G-14----------------------------------------------------------------------| +D-------------------------------------------------------------------------| +A-------------------------------------------------------------------------| +E-------------------------------------------------------------------------| + + +E-15-13h15p13\12-13-12h13p12\10-15-13h15p13\12-13-12h13p12\10-12~~~~---| +B----------------------------------------------------------------------| +G----------------------------------------------------------------------| +D----------------------------------------------------------------------| +A----------------------------------------------------------------------| +E----------------------------------------------------------------------| + + +E-------------------------------------------------------14-10---------| +B------------------------10-9h10p9p7---/12-------------------12-------| +G-------7/9-9/11-7\6-7/9-------------9-----11-11\9-11\9--------11\9---| +D----7-9-----------------------------------------------------------12-| +A-7-9-----------------------------------------------------------------| +E---------------------------------------------------------------------| + + +E-------------------------------------------------------------------| +B--------------------------------------10/12-15-12------------------| +G-----------------------------9/11\7-9-------------13---------------| +D-9\7---------------------7-9---------------------------------------| +A-----9-7\5---5-7/9\5/7-9------------------------------7/19-19-14\7-| +E-------------------------------------------------------------------| + + +E--------------------------------------------------------16-19-16-19-| +B---------------------------------------------15-18-15-18------------| +G----------------------------------13-16-13-16-----------------------| +D-----------------------12-15-12-15----------------------------------| +A------------11-14-11-14---------------------------------------------| +E-10-13-10-13--------------------------------------------------------| + + +E-19-16---19-16------16------------------------------------------------| +B------18-------18-15--18-15--18-15-----15-----------------------------| +G---------------------------16-----16-13--16-13--16--13-----13---------| +D----------------------------------------------15------15-12--15-12----| +A-------------------------------------------------------------------14-| +E----------------------------------------------------------------------| + + +E-----------------------------------------------------------------------------| +B-----------------------------------------------------------------------------| +G-----------------------------------------------------------------------------| +D-15-12-----12----------------------------------------------------------------| +A------14-11--14-11---14-11---------------------------------------------------| +E-------------------13------13-10-13-10-13-10-13-10-13-10-13-10-13-10-13-10-13| + + + +E-----------------13-13-13-13-16-15------------------------------| +B-----13-16-16-16------------------16-----------16---------------| +G---14-------------------------------17-17-17-17--17-15-15-13-11-| +D-15-------------------------------------------------------------| +A----------------------------------------------------------------| +E----------------------------------------------------------------| + + + + + full full +E-------------------------------------------------------)-8--)-8-----------------| +B-----------------------------------------------------11---11---11p8-------------| +G-15-15-13-11-15-15-13-11-15-15-13-11-15-15-13-11-10~~--------------10p8----8-10~| +D-----------------------------------------------------------------------8-10-----| +A--------------------------------------------------------------------------------| +E--------------------------------------------------------------------------------| + + +E----------------13-16-16-16-18-20-18-16-16-16-14-13-14-14-13-11-13-13-11-10--| +B-----13-16-16-16-------------------------------------------------------------| +G---14------------------------------------------------------------------------| +D-15--------------------------------------------------------------------------| +A-----------------------------------------------------------------------------| +E-----------------------------------------------------------------------------| + 1/2 + )( +E-11-11-----11-11-----11-11----------------------18-(18)-16-14------------------| +B------12-11-----12-11-----12-11-12~~~~~~----------------------16~~~------16h18-| +G--------------------------------------------/16------------------------X-------| +D---------------------------------------------------------------------X---------| +A-------------------------------------------------------------------------------| +E-------------------------------------------------------------------------------| + + +E---------------------------------------------------------13----------13-18-13-| +B-----16h18-----16h18-14\12-18p14-14\12-16~~~\-16~~-12-16----16-12-16----------| +G---x---------x----------------------------------------------------------------| +D-x---------x------------------------------------------------------------------| +A------------------------------------------------------------------------------| +E------------------------------------------------------------------------------| + + full +E---------)(----13-18-13-----------13-18-13-----------13-18-13----------13-18-13-| +B-16-12-16--16-----------16-12-16------------16-12-16----------16-12-16----------| +G--------------------------------------------------------------------------------| +D--------------------------------------------------------------------------------| +A--------------------------------------------------------------------------------| +E--------------------------------------------------------------------------------| + + +E----------13-18-13----------13-18-13----------13-18-13---------13-18-13-| +B-16-12-16----------16-12-16----------16-12-16---------16-12-16----------| +G------------------------------------------------------------------------| +D------------------------------------------------------------------------| +A------------------------------------------------------------------------| +E------------------------------------------------------------------------| + + +E----------14-19-14----------14-18-14----------14-19-14----------14-21-14--| +B-16-12-16----------16-12-16----------16-12-16----------16-12-16-----------| +G--------------------------------------------------------------------------| +D--------------------------------------------------------------------------| +A--------------------------------------------------------------------------| +E--------------------------------------------------------------------------| + + +E----14-21-14----14-21-14----14-21-14----14-21-14----13-20-13----12-19-12----| +B-16----------16----------16----------16----------16----------15----------14-| +G----------------------------------------------------------------------------| +D----------------------------------------------------------------------------| +A----------------------------------------------------------------------------| +E----------------------------------------------------------------------------| + + +E-11-18-11----10-17-10----9-16-9----8-15-8----7-14-7----8-15-8----7-14-7--| +B----------13----------12--------11--------10--------9---------10---------| +G-------------------------------------------------------------------------| +D-------------------------------------------------------------------------| +A-------------------------------------------------------------------------| +E-------------------------------------------------------------------------| + + + + +E---8-15-8----9-16-9----10-17-10----11-18-11------18-16-14-16-14----14----| +B-9--------10--------11----------12----------13------------------18----18-| +G-------------------------------------------------------------------------| +D-------------------------------------------------------------------------| +A-------------------------------------------------------------------------| +E-------------------------------------------------------------------------| + + +E----------------------------------------------------------------------------| +B-16-18-16-14-16-14----14----------------------------------------------------| +G-------------------16----16-15-16-15-14-15-14----14-------------------------| +D----------------------------------------------17----17-16-17-16-15-16-15----| +A-------------------------------------------------------------------------17-| +E----------------------------------------------------------------------------| + + +E-------------------------------------------------------------------------------| +B-------------------------------------------------------------------------------| +G-------------------------------------------------------------------------------| +D-15----------------------------------------------------------------------------| +A----17-15-17-15-14-15-14----14-------------------------------14-15-17-14-15-17-| +E-------------------------17----17-15-17-15-14-15-17-14-15-17-------------------| + + p.m +E--------------------------------------------------------------------------| +B-------------------------------------15-17-19-15-17-19-20-19-17-15-17-----| +G-------------------14-16-17-14-16-17--------------------------------------| +D-14-16-17-14-16-17--------------------------------------------------------| +A----------------------------------------------------------------------0---| +E--------------------------------------------------------------------------| + W/BAR + +2 FULL + p.m p.m p.m p.m /\ )~~~~~~( +E----------------17-----19-----21-------21-------(21)-----| +B-19------20----------------------------------------------| +G---------------------------------------------------------| +D------------------------------------------------------8\-| +A-----0-------0------0------0------0-------------------8\-| +E------------------------------------------------------6\-| + + + + +THIS WAS PUBLISHED AND TRANSCRIBED BY: +STEVEN JELLARD & JAKE LYNNE. + +E-MAIL=jellard@xtra.co.nz +Fire Garden Suite (solo) + +1 + + + + diff --git a/guitar/tabs/Steve Vai/Steve Vai - The Cryng Machine.tab b/guitar/tabs/Steve Vai/Steve Vai - The Cryng Machine.tab new file mode 100644 index 0000000..1d1b46e --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve Vai - The Cryng Machine.tab @@ -0,0 +1,133 @@ + +The Cryng Machine-Steve "GOD" Vai +Fire Garden Albun. +By Leandro Augusto Arantes Lazzerini iron.maiden@limeira.com.br + +Hi, I`m Leandro and I transcript this music for you, I`m from brazil and +don`t speak english,Sorry for you no understand. + +TAB EXPLICATION: +______________________________ +b=Bend | +_____________________________| + b | +14/16=bend in 14 elevate 16 | +_____________________________| +12/16= slide | +_____________________________| +~=Legato | +_____________________________| +h=artificial harmonic | +_____________________________| +$=Vibrato | +_____________________________| + + +Intro + b b b b b b b +|12-12-12-12-12-12-12|--------------------------------------------------------------------------| +|15-15-15-15-15-15-15|---b------b-----------------------b-----------b------b---------slow-------| +|--------------------|-14/16--14/16----14--12--14----14/16--14---12/14--12/14----12-11-12-11-9--| +|--------------------|--------------------------------------------------------------------------| +|--------------------|--------------------------------------------------------------------------| +|--------------------|--------------------------------------------------------------------------| + + +00:11sec +|---------------------------------------------------------------------------| +|---b------b---------------------b-------------b--10-10-12-13-12---/16-16h--| +|-14/16--14/16---14--12--14----14/16--14-----12/14--------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| +|---------------------------------------------------------------------------| + + +00:20sec slides +|---------------------------------------------------------------------------------------------| +|---b------b----------------------b-----------b------b--------fast----------------------------| +|-14/16--14/16----14--12--14----14/16--14---12/14--12/14--12-11-12-11-9----9/11/9--7/9--------| +|-------------------------------------------------------------------------------------------9-| +|---------------------------------------------------------------------------------------------| +|---------------------------------------------------------------------------------------------| + + +00:28sec +|----------------------------------b---------------------------------------------| +|---b------b-----------------12-12/14/12--------b----10-10-12-13-13-----/16-16---| +|-14/16--14/16----14--12--14-------------14---12/14------------------------------| +|--------------------------------------------------------------------------------| +|--------------------------------------------------------------------------------| +|--------------------------------------------------------------------------------| + + + +00:37sec 00:50 sec. +|--------------------------------------------------------------------------------------------------------| +|-----------------------12---11~12~11~12~11~12----------------b------------------------------b-----------| +|-16-14-13-11-11/13--13------------------------11-----/16---18/20-18---15-13-15-11--11/18--20/22--20--16-| +|-------------------------------------------------11-----------------------------------------------------| +|--------------------------------------------------------------------------------------------------------| +|--------------------------------------------------------------------------------------------------------| + + + Oitave Part +00:51sec 00:56sec + b b b b b b +|-------b------13/15--13-|-17/19--17/19--17--15--17--17/19--17---15/17-15/17--15-14-15-14-12---14/12--10/12----| +|-----16/17--------------|----------------------------------------------------------------------------------12-| +|------------------------|-------------------------------------------------------------------------------------| +|-16---------------------|-------------------------------------------------------------------------------------| +|------------------------|-------------------------------------------------------------------------------------| +|------------------------|-------------------------------------------------------------------------------------| + + + +1:05sec + b b b b b +|-17/19--17/19--17--15--17---19-19/21-17---15/17--17-17-19-20-19--22/23------------------------------------------------------------------- +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ + + + +1:15 G G G G With wha wha G G +|--------------------------------------------------------------------------------------------------------| +|------8----------------8---------------8--------------8-------------------8------------------8----------| +|------7----------------7---------------7--------------7-------------------7------------------7----------| +|------5-------5--------5---------------5-------5------5-----7$-5---7$-----5---------5--------5----------| +|------------5---7-------------7--------------5---7-------5-------7---------------5---7------------------| +|---0----3-7----------0----5-7---3$---0---3-7--------0------------------0-----3-7---------0------3-2-5-1-| + + + +1:28sec 1:32sec + G Solo +|--------------------------------------------|---7-------9------10--|------------------------------- +|----8---------------------------------8-5---|-10/12---12/14---13/15|-------------------------------- +|----7-----------------------------7-9-------|---b-------b-------b--|------------------- +|----5-------5------------5-7--7-9-----------|----------------------|----------------------- +|----------5---7------5-7--------------------|-B String bending till|----------------- +|-0----3-7-----------------------------------|-note E string--------|---------------- + + + +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ + + + +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ +|------------------------------------------------------------------------------ + + diff --git a/guitar/tabs/Steve Vai/Steve vai monster sweep pattern.prj b/guitar/tabs/Steve Vai/Steve vai monster sweep pattern.prj new file mode 100644 index 0000000..a903c83 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve vai monster sweep pattern.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Steve vai monster sweep pattern.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32) diff --git a/guitar/tabs/Steve Vai/Steve vai monster sweep pattern.tab b/guitar/tabs/Steve Vai/Steve vai monster sweep pattern.tab new file mode 100644 index 0000000..6d47db2 --- /dev/null +++ b/guitar/tabs/Steve Vai/Steve vai monster sweep pattern.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|--------------------12-15-s20-17----------------5-s15-12----------------12-s20-17------------- +B|-----------------13--------------18-----------6----------13----------13-----------18---------- +G|--------------14--------------------19------7---------------14----14-----------------19----19- +D|-------10-s12--------------------------17-5--------------------12-----------------------17---- +A|----12---------------------------------------------------------------------------------------- +E|-13------------------------------------------------------------------------------------------- + diff --git a/guitar/tabs/Steve Vai/steve vai octave lick.prj b/guitar/tabs/Steve Vai/steve vai octave lick.prj new file mode 100644 index 0000000..867bb05 --- /dev/null +++ b/guitar/tabs/Steve Vai/steve vai octave lick.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=steve vai octave lick.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32) diff --git a/guitar/tabs/Steve Vai/steve vai octave lick.tab b/guitar/tabs/Steve Vai/steve vai octave lick.tab new file mode 100644 index 0000000..c2c43be --- /dev/null +++ b/guitar/tabs/Steve Vai/steve vai octave lick.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-12-p0-h12-p0-h12-p0-h12-p0-h12-p0-h12-p0-24-p12-h24-p12-p0--------------------------------------------------- +B|------------------------------------------------------------24-p12-h24-p12-p0--------------------------------- +G|------------------------------------------------------------------------------24-p12-24-p12-h24-p12-24-p12-p0- +D|-------------------------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------------------------- + + + +E|-------------------------------- +B|-------------------------------- +G|-24-p0-------------------------- +D|-------24-p12------------------- +A|--------------24-p12-24-p12-s14- +E|-------------------------------- + diff --git a/guitar/tabs/Studies/Dm7Notes.prj b/guitar/tabs/Studies/Dm7Notes.prj new file mode 100644 index 0000000..941359f --- /dev/null +++ b/guitar/tabs/Studies/Dm7Notes.prj @@ -0,0 +1,26 @@ +WINTABV1.00 +TABLATURE=Dm7Notes.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16) +RANGE=4;15;RANGE_4_15 +RANGE=17;28;RANGE_17_28 +RANGE=29;42;RANGE_29_42 +COMMENT=(0,"1 3 5 (Dm7)") +COMMENT=(1,"1 3 (Dm7)") +COMMENT=(2,"5 7 (Dm7)") +COMMENT=(3,"1 7 3 (Dm7)") +COMMENT=(17,"II/IV G7") +COMMENT=(18,"II/IV G7") +COMMENT=(19,"II/IV G7") +COMMENT=(20,"I/III (G7)") +COMMENT=(21,"I/III (G7)") +COMMENT=(22,"VII/II/IV (G7)") +COMMENT=(23,"VII/II/IV (G7)") +COMMENT=(24,"VII/II/IV (G7)") +COMMENT=(25,"V (G7)") +COMMENT=(26,"II (G7)") +COMMENT=(27,"II (G7)") +COMMENT=(28,"I (G7)") +SEPARATOR=(3,1) +SEPARATOR=(16,1) +SEPARATOR=(28,1) +SEPARATOR=(42,1) diff --git a/guitar/tabs/Studies/Dm7Notes.tab b/guitar/tabs/Studies/Dm7Notes.tab new file mode 100644 index 0000000..c6f98d8 --- /dev/null +++ b/guitar/tabs/Studies/Dm7Notes.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-5------13-------13----15-13-13----13------------------------------------------------------- +B|-6-6-13-13-15-13----12----13----13----15-13-12-15-13-13-13-12-12-15-15-15-15----------15---- +G|-7-7-14-------------------------14----------12-14-14-14-14-12-12-14-14-14----14-14-------14- +D|--------12-------------------------------------15----------------15-15-15----------15------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|-------------------------------------15-13-12-15-13-12-15-13-12-15-13-12-15-13-12-17- +B|-15---------------------------------------------------------------------------------- +G|------------------------------------------------------------------------------------- +D|----15-12----12-15-12-12-14-15-15-15------------------------------------------------- +A|----------15------------------------------------------------------------------------- +E|------------------------------------------------------------------------------------- + diff --git a/guitar/tabs/Studies/Dom7s.prj b/guitar/tabs/Studies/Dom7s.prj new file mode 100644 index 0000000..8c29563 --- /dev/null +++ b/guitar/tabs/Studies/Dom7s.prj @@ -0,0 +1,7 @@ +WINTABV1.00 +TABLATURE=Dom7s.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4) +COMMENT=(0,"C7sus4. V in F") +COMMENT=(1,"Tonic Major in F.") +COMMENT=(2,"Bb7. IV in F.") +COMMENT=(3,"Bb7sus4. IV in F.") diff --git a/guitar/tabs/Studies/Dom7s.tab b/guitar/tabs/Studies/Dom7s.tab new file mode 100644 index 0000000..473f086 --- /dev/null +++ b/guitar/tabs/Studies/Dom7s.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3-1-6-6-10- +B|-6-1-6-6-10- +G|-3-2-7-8-10- +D|-5-3-6-6-10- +A|-3-3-8-8-12- +E|---1-6-6-10- + diff --git a/guitar/tabs/Studies/Study1.prj b/guitar/tabs/Studies/Study1.prj new file mode 100644 index 0000000..d41f1a2 --- /dev/null +++ b/guitar/tabs/Studies/Study1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Studies\Study1.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,8)(32,4) diff --git a/guitar/tabs/Studies/Study1.tab b/guitar/tabs/Studies/Study1.tab new file mode 100644 index 0000000..e7559f2 --- /dev/null +++ b/guitar/tabs/Studies/Study1.tab @@ -0,0 +1,19 @@ +%TabMaster v2.00r% + + +E|-5-15-13-12----------7-------------------8--------------------10----------------------12-13- +B|-5----------15-13-12-7-15-13-12-13-12----8--------------------10-------------12-13-15------- +G|-5-------------------7----------------14-9--14-12----11-------11-------12-14---------------- +D|-5-------------------7-------------------10-------14----14-12-12-12-14---------------------- +A|-7-------------------9-------------------10-------------------12---------------------------- +E|-5-------------------7-------------------8--------------------10---------------------------- + + + +E|-15-0- +B|----0- +G|----0- +D|----0- +A|----2- +E|----0- + diff --git a/guitar/tabs/Studies/Study2.prj b/guitar/tabs/Studies/Study2.prj new file mode 100644 index 0000000..d41f1a2 --- /dev/null +++ b/guitar/tabs/Studies/Study2.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Studies\Study1.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,8)(32,4) diff --git a/guitar/tabs/Studies/Study3.prj b/guitar/tabs/Studies/Study3.prj new file mode 100644 index 0000000..b99a16f --- /dev/null +++ b/guitar/tabs/Studies/Study3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Studies\Study3.tab +TYPES=(0,2)(1,2)(2,2)(3,2) diff --git a/guitar/tabs/Studies/Study3.tab b/guitar/tabs/Studies/Study3.tab new file mode 100644 index 0000000..981db38 --- /dev/null +++ b/guitar/tabs/Studies/Study3.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--5-7-8-- +B|-8--6-8-10- +G|-9--5-7-9-- +D|-10-7-9-10- +A|-10-5-7-8-- +E|-8--------- + diff --git a/guitar/tabs/Studies/Study4.prj b/guitar/tabs/Studies/Study4.prj new file mode 100644 index 0000000..48ece2b --- /dev/null +++ b/guitar/tabs/Studies/Study4.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Studies\Study4.tab +TYPES=(0,2) diff --git a/guitar/tabs/Studies/Study4.tab b/guitar/tabs/Studies/Study4.tab new file mode 100644 index 0000000..10c4edb --- /dev/null +++ b/guitar/tabs/Studies/Study4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-3- +B|-3- +G|-4- +D|-3- +A|-5- +E|-3- + diff --git a/guitar/tabs/Studies/Study5(Hungarian).prj b/guitar/tabs/Studies/Study5(Hungarian).prj new file mode 100644 index 0000000..aaf38c0 --- /dev/null +++ b/guitar/tabs/Studies/Study5(Hungarian).prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Studies\Study5(Hungarian).tab +TYPES=(0,4)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16) diff --git a/guitar/tabs/Studies/Study5(Hungarian).tab b/guitar/tabs/Studies/Study5(Hungarian).tab new file mode 100644 index 0000000..f2ff1d5 --- /dev/null +++ b/guitar/tabs/Studies/Study5(Hungarian).tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|----------------- +B|----------------- +G|----------------- +D|-2---------4-5-7- +A|-4---3-4-6------- +E|-5-5------------- + diff --git a/guitar/tabs/Test/TEST2.prj b/guitar/tabs/Test/TEST2.prj new file mode 100644 index 0000000..5153663 --- /dev/null +++ b/guitar/tabs/Test/TEST2.prj @@ -0,0 +1,5 @@ +WINTABV1.00 +TABLATURE=TEST2.tab +TYPES=(0,4)(1,4) +COMMENT=(0,"A-") +COMMENT=(1,"A-b6") diff --git a/guitar/tabs/Test/TEST2.tab b/guitar/tabs/Test/TEST2.tab new file mode 100644 index 0000000..3dbcd67 --- /dev/null +++ b/guitar/tabs/Test/TEST2.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-0-1- +B|-1-1- +G|-2-2- +D|-2-3- +A|-0-0- +E|----- + diff --git a/guitar/tabs/Test/TEST4.prj b/guitar/tabs/Test/TEST4.prj new file mode 100644 index 0000000..286142f --- /dev/null +++ b/guitar/tabs/Test/TEST4.prj @@ -0,0 +1,5 @@ +WINTABV1.00 +TABLATURE=TEST4.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4) +SEPARATOR=(1,1) +SEPARATOR=(2,1) diff --git a/guitar/tabs/Test/TEST4.tab b/guitar/tabs/Test/TEST4.tab new file mode 100644 index 0000000..e692ade --- /dev/null +++ b/guitar/tabs/Test/TEST4.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-11-8--1-5-3- +B|-8--8--1-5-3- +G|-11-9--2-5-3- +D|-10-8--3-5-3- +A|----10---7-5- +E|-8--8----5-3- + diff --git a/guitar/tabs/Test/Test.prj b/guitar/tabs/Test/Test.prj new file mode 100644 index 0000000..692802c --- /dev/null +++ b/guitar/tabs/Test/Test.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Test\Test.tab +TYPES=(0,4)(1,4)(2,4) diff --git a/guitar/tabs/Test/Test.tab b/guitar/tabs/Test/Test.tab new file mode 100644 index 0000000..3815e1d --- /dev/null +++ b/guitar/tabs/Test/Test.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8--6-6- +B|-8--8-6- +G|-8--7-7- +D|-8--8-7- +A|-10-6-8- +E|-8----6- + diff --git a/guitar/tabs/Test/Test1.prj b/guitar/tabs/Test/Test1.prj new file mode 100644 index 0000000..19c79ad --- /dev/null +++ b/guitar/tabs/Test/Test1.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\tabs\Test\Test1.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4) diff --git a/guitar/tabs/Test/Test1.tab b/guitar/tabs/Test/Test1.tab new file mode 100644 index 0000000..df89485 --- /dev/null +++ b/guitar/tabs/Test/Test1.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---------7-------7-------7-7-5-5----- +B|-8-7-7-7---7-7-7---7-7---8-7-5-5-8-7- +G|-----8-8---8-8-8---8-8---7-7-5-6-9-8- +D|-7-7---------------------9-7-5-6----- +A|-------------------------7-9-7-7----- +E|-8-7-------------------0---7-5-5----- + diff --git a/guitar/tabs/Test/test3.prj b/guitar/tabs/Test/test3.prj new file mode 100644 index 0000000..54a9b3b --- /dev/null +++ b/guitar/tabs/Test/test3.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=test3.tab +TYPES=(0,4) diff --git a/guitar/tabs/Test/test3.tab b/guitar/tabs/Test/test3.tab new file mode 100644 index 0000000..2059ea8 --- /dev/null +++ b/guitar/tabs/Test/test3.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|-8-- +B|-8-- +G|-9-- +D|-8-- +A|-10- +E|-8-- + diff --git a/guitar/tabs/Van Halen/316_live.tab b/guitar/tabs/Van Halen/316_live.tab new file mode 100644 index 0000000..e99236f --- /dev/null +++ b/guitar/tabs/Van Halen/316_live.tab @@ -0,0 +1,1138 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / 316_live.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Fri, 1 Jun 2001 05:22:17 -0400
+From: Nickd5583@cs.com
+Subject: v/van_halen/316_live.tab
+
+"316 Live"
+Van Halen / Van Halen Live: Right Here Right Now / 1993
+This is an original work of the author.
+[approx. 20 pages]
+
+Well, this took me two years to learn and more than a month 
+to tab.  It's not right in all places and there are some 
+parts just impossible to tab (for me at least), but this is 
+as complete as you're going to find, I think.  I had some 
+major help from other people (friends, family, etc.) and 
+watching live performances in slow motion to get down 
+certain techniques sure helped.  This gets real 
+complicated, so look at the key below before you continue 
+on to the rest of the tab.  I hope this will be useful to 
+at least one person.  If so, it was worth the trouble.  
+Good Luck!!!!
+
+KEY
+<#> = Artificial harmonic - if preceded by a number, that 
+      number is fretted and the number inside the brackets 
+      is tapped with the pick hand, otherwise it is an 
+      artificial hrmonic played by picking the note and almost
+      simultaneously hitting it with some part of your thumb
+      (most people use the tip of their thumb, I use the 
+      knuckle).
+(#) = Number inside is tapped with pick hand
+^^^ = Vibrato
+/\  = Slide
+___ = underscore after a bend indicates approximate length 
+      of time to hold the bend
+bq  = bend up a quarter step
+bh  = bend up a half step
+bf  = bend up a full step
+bt  = bend up two steps
+bT  = bend up one and a half steps - Three half steps
+rb  = release bend
+pb  = pre bend - the bend has been applied prior to 
+      striking the note
+pm  = palm mute
+p   = pull-off
+h   = hammer-on
+p.h.= pick hand
+f.h.=fret hand
+
+General Notes
+You can figure out much of the tapping stuff by listening 
+to the record if you know what tapping sounds like to begin 
+with.  You can also watch the video to find out where his 
+hands are (beware the solo is slightly different in the 
+video as compared to the record [this is because the 
+recording for the concert was made on two separate nights 
+and the video and record are edited differently} but not 
+enough to make a huge difference).
+
+Sometimes the stretch for the tapping parts is pretty big.  
+You can get around this by transposing the notes to a lower 
+string, and, thus, frets that are closer together.
+
+He holds the pick two different ways (watch to see when).  
+The first is the classical index finger-thumb.  The other 
+is the middle finger-thumb leaving his index finger 
+sticking out to tap.
+
+He seems to switch from tapping to picking and back very 
+quickly.  Yes, it's because he's good, but what he does 
+quite often is move the pick into his hand, wedging it 
+between the second knuckle of the middle finger and the 
+place on the palm where the finger joins it.  This way, he 
+doesn't have to waste time going up to his mouth or even to 
+a mic stand if he doesn't want to.
+
+One other thing before we start.  This is just a rough 
+approximation.  He plays some parts so damned fast it's 
+hard to distinguish between notes sometimes.  I hope 
+nothing in here is too inconsistent.  Also, you must listen 
+to the actual recording to hear what I've written down.
+
+    x3
+|E|---------------------|-------------------------------|E|
+|B|-------2--3---3/5--2-|-------2--3--2--0-------0--0---|B|
+|G|-----2----2---2/4--2-|-----2----2--2--1------1---1---|G|
+|D|---2------4---4/6--2-|---2------4--2--2-----2----2---|D|
+|A|-0-------------------|-0--------------0----0---------|A|
+|E|---------------------|-------------------------------|E|
+                                    x2
+|E|--------------------------------|--------------------|E|
+|B|-2------------------------------|-------2--3---3/5---|B|
+|G|-1--2-------2----------0-------2|-----2----2---2/4---|G|
+|D|-2--0------0---------0---------2|---2------4---4/6---|D|
+|A|-------------------------------0|-0------------------|A|
+|E|----2---2------2-2/3------2p3---|--------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-2---------2--3---2--0--------0--0---2---------------|B|
+|G|-2-------2----2---2--1------2----1---1---2---------2-|G|
+|D|-2-----2------4---2--2----1------2---2---0-------0---|D|
+|A|-----0---------------0--0----------------------------|A|
+|E|-----------------------------------------2----2------|E|
+
+|E|-----------------------------------------------------|E|
+|B|----------------------------2--3---3/5--2---------2--|B|
+|G|----------0-------2-------2----2---2/4--2-------2----|G|
+|D|--------0---------2-----2------4---4/6--2-----2------|D|
+|A|------------------0---0---------------------0--------|A|
+|E|-2--2/3------2p0-------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-3---2h3p2h3p2--0--------0--0-----2------------------|B|
+|G|-2---2----------1------1----1-----1--2--------2------|G|
+|D|-4---2h4p2h4p2--2----2------2-----2--0------0--------|D|
+|A|----------------0--0-----------0---------------------|A|
+|E|-------------------------------------2----2-------2--|E|
+                x2
+|E|----------------|-------------------------------|----|E|
+|B|----------------|--------^^^^^^-----------^^^^^^|----|B|
+|G|-------0-------2|----5--5-------------5--5------|----|G|
+|D|-----0---------2|----4--4-------------3--3------|----|D|
+|A|---------------0|-0-------------0--0------------|----|A|
+|E|-2/3------2p0---|-------------------------------|----|E|
+
+Repeat the main riff again then go on to the tapped 
+harmonics
+|E|--------------|---------------------0<12>------------|E|
+|B|--------------|-------------0<12>--------------------|B|
+|G|--------------|-----2<14>--------2<14>---------------|G|
+|D|-------------2|---------2<14>------------------------|D|
+|A|-0-3bq----3--0|-0<12>--------------------------------|A|
+|E|--------------|--------------------------------------|E|
+
+For this part, you tap the two upper strings w/your pick 
+hand index finger and the lower string w/your pick hand 
+thumb, kind of like a bass guitar.  The muting is 
+accomplished with your fret hand.  Practice to the album 
+and you'll get the feel of it.
+    x6
+|E|-12--------12--------|-12--------12------------------|E|
+|B|-12--------12--------|-12--------12------------------|B|
+|G|---------------------|-------------------------------|G|
+|D|----x----x----x------|----x----x----x----------------|D|
+|A|----x----x----x------|----x----x----x----------------|A|
+|E|----x-12-x----x-12-12|----x-12-x----x-12p0-----------|E|
+                                    
+For the tapping part here, I think he frets the lowest fret 
+(ex 9) w/his index finger of fret hand, taps the highest 
+note (ex 18) w/his index finger of pick hand, and hammers 
+on middle note (ex 12) w/middle finger of fret hand.
+            X3              x3
+|E|---------|-12--------12---------|------|-------------|E|
+|B|---------|-12--------12---------|------|-------------|B|
+|G|---------|----------------------|------|-18p9--------|G|
+|D|---------|----x----x----x-------|------|-------------|D|
+|A|------^^^|----x----x----x-------|------|-----h12-----|A|
+|E|-/10\3---|----x-12-x----x-12-12-|-h3-3/|-------------|E|
+    x3  x3    x2        x6
+|E|---------|---------|---------|-|-12--------12------|E|
+|B|---------|---------|---------|0|-12--------12------|B|
+|G|-20p11---|-21p12---|-23p14---|-|-------------------|G|
+|D|---------|---------|---------|-|----x----x----x----|D|
+|A|------h14|------h15|------h17|-|----x----x----x----|A|
+|E|---------|---------|---------|-|----x-12-x----x1212|E|
+
+|E|-12--------12--------------------------|E|
+|B|-12--------12--------------------------|B|
+|G|---------------------------------------|G|
+|D|----x----x----x------------------------|D|
+|A|----x----x----x------------------------|A|
+|E|----x-12-x----x-0-0--------------------|E|
+
+For the following section, all tapped harmonics, <>, are 
+tapped on the indicated frets with the p.h. while the 
+previous note is fretted by the f.h.  Ex: after this riff 
+below, your f.h. is on the seventh frets of the E and A and 
+all tapped harmonics are relative to this seventh fret, 
+until the pull of to 0 and hammer on to 5, then all tapped 
+harmonics are relative to the fifth fret, and so on.  The 
+not in parenthesis symbolizes that the note is already 
+fretted and sounding.  (To save room, I've only included 
+the necessary strings.)
+
+|D|----------------------
+|A|-------h7-------------
+|E|-15\7p0h7-------------
+
+|G|-----------------------------------------------------|G|
+|D|-----------------------------------------------------|D|
+|A|-<14>--<12>(7)-p-0-h-5--<12>--<10>(5)-p-0-7---------|A|
+|E|-----------------------------------------------------|E|
+
+|G|-----------------------------------------------------|G|
+|D|--------------------------------------^^^^^^^^-------|D|
+|A|-<14>(7)p0-h-5--<12>(5)p0-h-7-<14>--<19>-<7>--p-0-h--|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-7--<14>--<12>(7)p-0-h-5--<12>--<10>(5)-p-0-h-3------|A|
+|E|-----------------------------------------------------|E|
+
+|G|-----------------------------------------------------|G|
+|D|---------------^^^^^^^^^-----------------------------|D|
+|A|-<10>--<8>--<7>----------h-3---0--7-<14>--<12>(7)-p--|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-0-5--<12>--<10>(5)-p-0---------------------^^^^^^^^-|A|
+|E|--------------------------h7--<14>--<12>--<10>-------|E|
+
+|D|-----------------------------------------------------|D|
+|A|----------------------------------^^^^^^^------------|A|
+|E|-<12>(7)-p-0-h-5--<12>--<10>--<9>-------<10>(5)-p-0--|E|
+
+|A|-----------------------------------------------------|A|
+|E|--h-3--<10>--<8>--<7>bf____rb-<8>(3)/5---<12>--<10>--|E|
+
+|D|-----------------------------------------------------|D|
+|A|---------------------------h-3--<10>--<8>--<7>--<7>bh|A|
+|E|-<9>bf____rb--<10>-(5)-p-0---------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-<8>--<10>-(3)/5--<12>--<10>--<9>bf-<10>-(5)\3---<10>|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-<8>--<7>--<7>bf--<8>--<10>-(3)/5--<12>--<10>--<9>---|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-<9>bh--<10>--<12>--<9>bh--<10>--<12>--<9>bh--<10>---|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|<12>-(5)/7--<14>--<12>--<11>--<10>--<11>--<12>--<14>-|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|<12>bh-<12>bf--<14>bf--<12>bf--<14>bf--<12>bf--<11>bh|A|
+|E|-----------------------------------------------------|E|
+
+|G|-----------------------------------------------------|G|
+|D|----------------------------------------------^^^^^^^|D|
+|A|-<12>bf--<14>bf--<19>bT--<19>bf--<19>bt__rb-(7)------|A|
+|E|-----------------------------------------------------|E|
+
+|G|---------------------------------|G|
+|D|^^^^^^^^^^^^^^^^^^^^^^^^---------|D|
+|A|-------------------------/10\ ---|A|
+|E|-------------------------/8 \ 3--|E|
+
+For the next part, this is all two handed tapping with some 
+slides and continues until more tapped harmonics that will 
+be noted.
+
+|B|-----------------------------------------------------|B|
+|G|------------------------------------------12-5-9--12-|G|
+|D|------------------------12-5-9--12-5--9--------------|D|
+|A|-3-5-9--12-5-9--12-5-9-------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|B|-----------------------------------------------------|B|
+|G|-5-9--12-5-9--12-5-9--12-5-9--12-5-9--12-5-9-12-5-9--|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-12-4-9--12-4-9--12-4-9--12-4-9--12-4-9--12-4-9----12|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-4-9--11-4-9--11-4-9--11-4-9--11-4-9--11-4-9--11-4-9-|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-11-4-9--11-4-8--11-4-8--11-4-8--11-4-8--11-4-8--11-4|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-8--11-4-8--11-4-8-----------------------------------|G|
+|D|------------------------------------11-3-7--11-3-7---|D|
+|A|--------------------10-3-7--10-3-7-------------------|A|
+|E|-----------------------------------------------------|E|
+
+|B|-----------------------------------------------------|B|
+|G|-11-3-7--11-3-7--11-3-7--11-3-7--10-3-7--10-3-7--10-3|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-7--10-3-7--9-3-7--10-3-7--12-3-7--10-3-7--10/12-3-7-|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-13-3-7--12-3-7--10-3-7--9-2-7--9-2-7--9-2-7--9-2-7--|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-9-2-7--9-2-7--9-2-7--9-2-6--9-2-6--9-2-6--9-2-6--9-2|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-6--9-2-6--9-2-6--9-2--------------------------------|G|
+|D|----------------------6/7----------------------------|D|
+|A|-----------------------------------------12-5-9--12-5|A|
+|E|--------------------------12-5-9--12-5-9-------------|E|
+
+|G|-----------------------------------------------------|G|
+|D|---12-5-9--12-5-9--12-5-9--12-5-9-5--11-5-9--12-5-9--|D|
+|A|-9---------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|G|-----------------------------------------------------|G|
+|D|-14-5-9--12-5-9--12/14-5-9--15-5-9--12/14-5-9--12-5-9|D|
+|A|-----------------------------------------------------|A|
+
+|G|-----------------------------------------------------|G|
+|D|-12-5-9--11-4-9--11-4-9--11-4-9--11-4-9--11-4-9--11-4|D|
+|A|-----------------------------------------------------|A|
+
+|G|-----------------------------------------------------|G|
+|D|-9--11-4-9--11-4-9--11-4-8--11-4-8--11-4-8--11-4-8---|D|
+|A|-----------------------------------------------------|A|
+
+|G|-----------------------------------------------------|G|
+|D|-11-4-8--11-4-8--------------------------------------|D|
+|A|-----------------12-5-9--12-5-9--12-5-9--12-5-9--12-5|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-9--12-5-9--12-4-9--12-4-9--12-4-9--12-4-9--12-4-9---|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-12-4-8--10-3-7--10-3-7--10-3-7--10-3-7--10-3-7--10-3|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-7--10-2-7--10-2-7--10-2-7--10-2-7--10-2-7--10-2-7---|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-9-2-7--9-2-7--9-2-7--9-2-7--9-2-7--9-2-7--9-2-7--9-2|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-7--9-2-7--9-2-7--9-2-7--9-2-7--9-2-6--9-2-6--9-2-6--|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-9-2-6--9-2-6--9-2-6--9-2-6--9-2-6--9-2-6--9-2-6--9-2|A|
+|E|-----------------------------------------------------|E|
+
+You play the first little riff below 26 times gradually 
+speeding up at first, then slowing down until the second 
+riff and then the tapped harmonics mentioned before.
+|D|-|-------------|-------------------------------------|D|
+|A|-|9-6-2-0-2-6-9|-9-6-2-0-----------------------------|A|
+|E|-|-------------|---------h-3-p-2----p-0--------------|E|
+
+|E|-----------------------------------------------0<12>-|E|
+|B|------------------------------------0<12>-0<12>------|B|
+|G|------------------------2<14>-2<14>------------------|G|
+|D|-------------2<14>-2<14>-----------------------------|D|
+|A|-2<14>-2<14>-----------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+Now break out the delay pedal and fool around with it until 
+you get the effect he has on the record (it's about half a 
+second).  You need a good trem system for this part, too.
+|E|-0-----------0----------0--------0-----0-------------|E|
+|B|-0-----------1----------0--------0-----0-------------|B|
+|G|-0-----------2----------0--------5-----4-------------|G|
+|D|-2-----------3----------2--------3-----4--------(4)--|D|
+|A|-3-----------3----------3--------3-----2--------(2)--|A|
+|E|-3----------------------3----------------------------|E|
+Now, dive down with the bar somewhere in the neighborhood 
+of three-three and a half steps, and while down there, grab 
+the bottom strings with your thumb and pull and release 
+them while muting with your p.h. palm.
+
+Now, while sliding up (see below) release the bar and when 
+you strike the c note on the G string, dive down again 
+about three steps go back to normal and up one step, then 
+down a lot more than three steps (I have no idea how many), 
+and back up.  Then play the chords following that C on the 
+G string.
+
+|E|--------|-0-----------0-----------0------------------|E|
+|B|--------|-0-----------1-----------0------------------|B|
+|G|------5-|-0-----------2-----------0---------5--------|G|
+|D|--------|-2-----------3-----------2---------5--------|D|
+|A|--------|-3-----------3-----------3---------3--------|A|
+|E|-5/8\---|-3-----------------------3------------------|E|
+
+|E|--------------------------------|E|
+|B|--------------------------------|B|
+|G|--(5)/9------(9)/5------4/5---4-|G|
+|D|--(5)/9------(9)/5------4/5---4-|D|
+|A|--(3)/7------(7)/3------2/3---2-|A|
+|E|--------------------------------|E|
+Now, the next part is some crazy shit with harmonics and 
+dives and general whackiness.  I wouldn't even bother to 
+learn it let alone try to tab it out.  Do something really 
+weird, run around and jump up and down and play with your 
+nose hairs or whatever.
+
+We've skipped over the craziness.  This is from Cathedral.  
+Your delay pedal should be already set up.  This part is 
+all hammer-ons and pull-offs with your f.h.  Use volume 
+swells continuously until this entire part is over.  Spin 
+the vol. Knob back and forth pretty fast.  Play to the
+record and you'll get it.
+|E|-----------------------------------------------------|E|
+|B|-------------4------------------------------8--------|B|
+|G|---------4-------4----------------------8-------8----|G|
+|D|-----4---------------4--------------8---------------8|D|
+|A|-2----------------------2---4---6--------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|------------------------12---------------------------|B|
+|G|-------------------12--------12----------------------|G|
+|D|--------------12------------------12-----------------|D|
+|A|-8---8---10----------------------------10---12---14--|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-----------16--------------------------------------12|B|
+|G|------16--------16----------------------------12-----|G|
+|D|-16------------------16------------------12----------|D|
+|A|--------------------------14---12---10---------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-----------------------7-------------------------10--|B|
+|G|-12----------------7-------7----------------10-------|G|
+|D|------12-------7---------------7-------10------------|D|
+|A|-----------5-----------------------8-----------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-----------------------5-----------------------8-----|B|
+|G|-10----------------5-------5---------------8-------8-|G|
+|D|------10-------5---------------5-------8-------------|D|
+|A|-----------3-----------------------6-----------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-----------------3-----------------------6-----------|B|
+|G|-------------3-------3---------------6-------6-------|G|
+|D|-8-------3---------------3-------6---------------6---|D|
+|A|-----1-----------------------4-----------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-------------8---------------------------12----------|B|
+|G|---------8-------8------------------12--------12-----|G|
+|D|-----8---------------8---------12------------------12|D|
+|A|-6------------------------10-------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-12-------------12----------------------------15-----|B|
+|G|------12-------------12------------------15--------15|G|
+|D|-----------12-------------12--------15---------------|D|
+|A|-------------------------------13--------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|---------------------18----------------------------12|B|
+|G|----------------18--------18------------------12-----|G|
+|D|-15--------18------------------18--------12----------|D|
+|A|------16----------------------------10---------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|--------------------------15-------------------------|B|
+|G|-12------------------15--------15----------------9---|G|
+|D|------12--------15------------------15-------9-------|D|
+|A|-----------13----------------------------7-----------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-9--------------------------12-----------------------|B|
+|G|-----9-----------------12--------12----------------6-|G|
+|D|---------9--------12------------------12-------6-----|D|
+|A|-------------10----------------------------4---------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-6-----------6-----------6-----------------------8---|B|
+|G|-----6-----------6-----------6---------------8-------|G|
+|D|---------6-----------6-----------6-------8-----------|D|
+|A|-------------------------------------6---------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|---------8-----------8-------------------------10----|B|
+|G|-8-----------8-----------8----------------10---------|G|
+|D|-----8-----------8-----------8-------10--------------|D|
+|A|---------------------------------8-------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|--------------------------12-------------------------|B|
+|G|-10------------------12--------12------------------14|G|
+|D|------10--------12------------------12--------14-----|D|
+|A|-----------10----------------------------12----------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-14----------------------------15--------------------|B|
+|G|------14------------------15--------15---------------|G|
+|D|-----------14--------15------------------15--------17|D|
+|A|----------------13----------------------------15-----|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|------17-------------17-------------17---------------|B|
+|G|-17--------17-------------17-------------17----------|G|
+|D|----------------17-------------17-------------17-----|D|
+|A|---------------------------------------------------17|A|
+
+|E|-----------------------------------------------------|E|
+|B|-----------19-------------19-------------19----------|B|
+|G|------19--------19-------------19-------------19-----|G|
+|D|-19------------------19-------------19-------------19|D|
+|A|-----------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-19-------------19-------------19-------------19-----|B|
+|G|------19-------------19----------------------------19|G|
+|D|-----------19-------------19--------19---19----------|D|
+|A|-----------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|------19-------------19-------------19-------------19|B|
+|G|-----------19-------------19-------------19----------|G|
+|D|-19-------------19-------------19-------------19-----|D|
+|A|-----------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-----------19----------------------------21----------|B|
+|G|-19-------------19------------------21--------21-----|G|
+|D|------19-------------19--------21------------------21|D|
+|A|--------------------------19-------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-21-------------21-------------21-------------21-----|B|
+|G|------21-------------21-------------21-------------21|G|
+|D|-----------21-------------21-------------21----------|D|
+|A|-----------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|------21---------------------------------------------|B|
+|G|-----------21--------21---21-------------------------|G|
+|D|-21-------------21-------------21--------------------|D|
+|A|------------------------------------19---21---17---19|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-15---17---14---15---17---14---15---12---14---10---12|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-14---10---12---9---10---7---9---5---7---3----5---2--|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-----------------------------------------------------|B|
+|G|-----------------------------7-----------------------|G|
+|D|---------------------------------7-------------------|D|
+|A|-3-------------------7---5-----------10---9---7---5--|A|
+|E|-----3---2---0---0-----------------------------------|E|
+
+
+|B|-----------------------------------------------------|B|
+|G|-----------------------------------------7-----------|G|
+|D|---------------------------------------------7-------|D|
+|A|-7---5---7---5-------------------7---5-----------10--|A|
+|E|-----------------3---2---0---0-----------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-9---7---5---7---9---10---9---7---5---7---5---7--5---|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-7---5---7---5---7---5---7---5---7---5---7---5---7---|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-5---7---5---7---5---7---5---7---5---7---5---7---5---|A|
+|E|-----------------------------------------------------|E|
+After the (7) below turn the delay pedal off!
+|E|-------------------------|E|
+|B|-------------------------|B|
+|G|-------------------------|G|
+|D|-------------------------|D|
+|A|-7---5---7-----------(7)-|A|
+|E|-------------------------|E|
+
+There's more nutty note dives and harmonics and stuff
+after you turn the delay pedal off.
+
+                                    Pm--------|
+|E|-----------------------------------------------------|E|
+|B|-----------------------------------------------------|B|
+|G|--------2----------------------5--7--<7>bh-p-5---5bf-|G|
+|D|--------2---------^^^^^--5--7------------------7-----|D|
+|A|--------0-------/7-----------------------------------|A|
+|E|-13\3------------------------------------------------|E|
+
+|G|-----------------------------------------------------|G|
+|D|-7--<7>p5--5--<7>p5--<5>-----------------------------|D|
+|A|-------------------------5\3-5bf-p-3---------<3>bq---|A|
+|E|---------------------------------------5-------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-<3>bq-------<3>bq--<3>bq------3--(3)bh--------------|A|
+|E|--------5p3----------------5p3----------------5------|E|
+
+|E|-----------------------------------------------------|E|
+|B|----------------17bT__rb-p14--------^^^^----------2/4|B|
+|G|-------------14-17bf-----------17-17pbh-bf-(17)\-----|G|
+|D|-/10\5--/16------------------------------------------|D|
+|A|-----------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+This next is two-handed tapping until noted.
+|E|------------10-5-8--------10-5-8--------10-5-8-------|E|
+|B|------8-8bh--------10-5-8--------10-5-8--------10-5-8|B|
+|G|-10-5------------------------------------------------|G|
+|D|-----------------------------------------------------|D|
+
+|E|10-5-8--------10-5-8--------10-5-8--------10-5-8-----|E|
+|B|-------10-5-8--------10-5-8--------10-5-8--------10-5|B|
+|G|-----------------------------------------------------|G|
+|D|-----------------------------------------------------|D|
+
+|E|-----------------------------------------------------|E|
+|B|-8--10-5-8--10-5--10-8bh--10-5-10-8bh--10-8-5--------|B|
+|G|-----------------------------------------------------|G|
+|D|-----------------------------------------------------|D|
+
+      |-Hold this bend until here-|
+|E|-----------------------------------------------------|E|
+|B|-----------------------------------------------------|B|
+|G|-7bf----10-7-12-7-10-7-(7)-(7)-p-5-h-7bf_rb-p-5-p-0--|G|
+|D|-----------------------------------------------------|D|
+|A|-----------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+End tapping after the vib.
+|G|-----------------------------------------------------|G|
+|D|------------------------------------------^^^^^^-----|D|
+|A|-12-7-12-6-12-5-12-3-12-5-12-3bf---12-5--3-------0---|A|
+|E|-----------------------------------------------------|E|
+
+|E|-----------------------------------------------<5>--5|E|
+|B|--------------------------------5-----------5--------|B|
+|G|--------------------4--4-----4-----4--4-/6-----------|G|
+|D|----------7--4-h-5--------7--------------------------|D|
+|A|-3/5--5----------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|-5-h-7--8-<8>-8--------10-7-8-10------12p8---8h10h12-|E|
+|B|-----------------5-5/7-----------8-10----------------|B|
+|G|-----------------------------------------------------|G|
+
+|E|------14--10-12-15---12--12h13h15p12----------12---13|E|
+|B|-10-12----------------------------------12-12--------|B|
+|G|--------------------------------------12---------0---|G|
+|D|-----------------------------------------------------|D|
+
+|E|-15p13p12h15------------------5----------------------|E|
+|B|-------------13\5--6-6-8p6h8----5--------------------|B|
+|G|----------------------------------8p7p5---7-7-5h7-4-4|G|
+|D|----------------------------------------7------------|D|
+|A|-----------------------------------------------------|A|
+
+|E|-----------------------------15-15-0--17-17-20-------|E|
+|B|-----------------------------15-15-------------17-17-|B|
+|G|-4p5h4---4-5-5-4-4h5h7p5-4-4/------------------------|G|
+|D|-------7---------------------------------------------|D|
+|A|-----------------------------------------------------|A|
+
+|E|-----------------------------20-(20)p17p14h20p17p14h-|E|
+|B|-20-------8/-----14h17h19-19-------------------------|B|
+|G|----19\----------------------------------------------|G|
+|D|-----------------------------------------------------|D|
+On the first three 20's here, bend down a half step using 
+the trem bar.
+|E|20p17p14h20p17h20p17p14----20------------------------|E|
+|B|------------------------10----17p14-18h20p17p14-18h20|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-14-20-16h17p16p14-14-14-14--------------------------|B|
+|G|----------------------------17-17-17bT-(17)\------14-|G|
+|D|---------------------------------------------8/16----|D|
+|A|-----------------------------------------------------|A|
+
+|E|-----------------------------------------------------|E|
+|B|----17bf-(17)bt___rb-(17)p14-14-----------------17bf-|B|
+|G|----------------------------------17bh-(17)p14-------|G|
+|D|-----------------------------------------------------|D|
+
+|E|---------------------------------------------17------|E|
+|B|-(17)bt____rb-(17)p14---------------------------17---|B|
+|G|-----------------------14-14-17-p-14\8h10/19---------|G|
+|D|-----------------------------------------------------|D|
+
+|E|---------------20------^^^^^^^^^^--------------------|E|
+|B|-20bt--------------20bf__________rb-p-17---20bf-20p17|B|
+|G|-----------------------------------------------------|G|
+|D|-----------------------------------------------------|D|
+
+|E|-----------------------------------------------------|E|
+|B|----20bT-(20)p17----20bf____rb--17-------------------|B|
+|G|-19--------------19----------------19h21-19\--5h7-7p5|G|
+|D|-----------------------------------------------------|D|
+
+|G|-----------------------------------------------------|G|
+|D|-5h7-7p5-------------------------^^^-----------------|D|
+|A|----------7-p-6\4-5-3-5-5bf-5-3-5------------^^^^^^--|A|
+|E|-------------------------------------5-5/10\5--------|E|
+
+|E|-------------|E|
+|B|-------------|B|
+|G|-7bh-(7)-p-5-|G|
+|D|-------------|D|
+|A|-------------|A|
+|E|-------------|E|
+Two-handed tapping returns here and continues until the A 
+chord is struck.
+Below, hold full bend of the 7 while tapping and releasing 
+the notes that follow with index finger of the p.h. until 
+noted (|---|).
+       |------------------------------------------|
+|B|-----------------------------------------------------|B|
+|G|-7bf--12--14--12--14--15--13/14--15--(7)-p-5-h-7-----|G|
+|D|-----------------------------------------------------|D|
+
+|E|---------10-5-8--------------------------------------|E|
+|B|-10-5-8----------10-5-8-10-8-6-----------------------|B|
+|G|--------------------------------11--7--5--0--7-------|G|
+|D|-----------------------------------------------------|D|
+
+|B|-----------------------------------------------------|B|
+|G|-12-7-5-0-7--12----7-5-0-----------------------------|G|
+|D|--------------------------12--7--5--0----------------|D|
+|A|---------------------------------------12-7--12-6----|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|-12-5--12-3--12-5--12-5\3/7--12-6--12-5--12-3--12-5--|A|
+|E|-----------------------------------------------------|E|
+
+|D|-----------------------------------------------------|D|
+|A|--12-6---5--12-3/7--12-6--12-5--12---3bf---12-6------|A|
+|E|-----------------------------------------------------|E|
+
+|G|-----------------------------------------------------|G|
+|D|---------------------^^^^^---^^^^^^^^^^^^^^^^^^^^^---|D|
+|A|-12-3bf__rb-p-0--h--3------12------------------------|A|
+|E|-----------------------------------------------------|E|
+Tapping ends here with the A chord.
+|E|-----------3------------2--2----2-----3--3--3--3--3--|E|
+|B|-----------3------------3--3----3-----3--3--3--3--3--|B|
+|G|-----2-----0------------2--2----2-----2--2--2--2--2--|G|
+|D|-----2-----0------------0--0----0-----0--0--0--0--0--|D|
+|A|-3bh-0-----------------------------------------------|A|
+|E|-----------3-----------------------------------------|E|
+
+|E|-3--2------------------------------------------------|E|
+|B|-3--3------------------------------------------------|B|
+|G|-2--2------------------------------------------------|G|
+|D|-0--0-----------------------^^^^^^^^^^^^^^^-5-<5>-<5>|D|
+|A|------------0-3p0h4p0h5--(5)-------------------------|A|
+|E|-----------------------------------------------------|E|
+Feedback starts with that last artificial harmonic and 
+continues for about 20 seconds.
+|E|-----------------|E|
+|B|-----------------|B|
+|G|-----------------|G|
+|D|-<5>-----<5>-----|D|
+|A|-----<5>-----<5>-|A|
+|E|-----------------|E|
+Depress the bar on this A note on the A string and try to 
+get it like the record.  At the D note on the B string 
+(fret 15), two-handed tapping begins once again.
+|E|-----------------------^^^^^^^---------17-12-15------|E|
+|B|---------------------15--------17-12-15---------17-12|B|
+|G|-----------------------------------------------------|G|
+|D|-----------------------------------------------------|D|
+|A|-0---------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|----17-12-15----------17-12-15----------17/18-12-15--|E|
+|B|-15----------17-12-15----------17-12-15--------------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-19-12-15----------17-12-15----------17/18-12-15-----|E|
+|B|----------17-12-15----------17-12-15-----------------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-17/19-12-15-----------12-15-17-12----19-12-15-------|E|
+|B|-----------------------------------15----------17-12-|B|
+|G|--------------16\15\14-------------------------------|G|
+|D|-----------------------------------------------------|D|
+
+|E|-------------------------15-10-13----------15-10-13--|E|
+|B|-15--17-11-13--15-10-10-----------15-10-13-----------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-17-10-------------15-10-13----------15-10-13--17-10-|E|
+|B|---------15-10-13-----------15-10-13-----------------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-13--------------------------15------------17-12-15--|E|
+|B|-----15--10---15/17p12-17/18---17/18-12-15-----------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-18-12-15---------17-12-15--------17-12-15--19-12-15-|E|
+|B|----------17-12-15--------17-12-15-------------------|B|
+|G|-----------------------------------------------------|G|
+
+|E|--------------------------15-10-13----------15-14----|E|
+|B|-17-12-15--15-10-13--15-13----------15-10-13---------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-15-14--15-14-12-10-14--15-14-15-14-12-10--15-14-----|E|
+|B|-----------------------------------------------------|B|
+For the next few parts, like some others prior, you are 
+tapping the 12's w/your p.h. index finger while fretting 
+the lower numbers w/your f.h.
+|E|-15-14-12-10---14------------------------------------|E|
+|B|-----------------------12\12-p-8---12\11\10----12-7--|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-12-8-12-10-12-8-12-10-12-8-7-5-12-4-12---5/6--12-7--|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-12--8-12-8/10-12-7-12-8-12-10-12-8-12-7-12-5-12-7-12|B|
+|G|-----------------------------------------------------|G|
+|E|------^^^^^^-----------------------------------------|E|
+|B|4-12-5-------(5)/12-7-8-12-8-10-12-10-12-4/8-10--12-7|B|
+|G|-----------------------------------------------------|G|
+
+|E|--------------------------------------------^^^^^^---|E|
+|B|-8-12-8-12-10-12-8-12-7-0-7-12-7-12-4-12--5----------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-12---5-12-7-8-12-8-12-8/10-12-7-12-8-12-10-12-8-12-7|E|
+|B|-----------------------------------------------------|B|
+|G|-----------------------------------------------------|G|
+
+|E|-12-5-12-7-12-4-12-5-12-7-12-7-12-7/10-12-7-8-12-8-10|E|
+|B|-----------------------------------------------------|B|
+
+|E|-12-10-8-12-8-12-7-12-5-12-7-12-4-12-5/7-0-----------|E|
+|B|-------------------------------------------10-12-7-8-|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-12-8-12-8/10-12-7-8-12-8-12-10-8-12-10-8-7-8-10-12--|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|10-8-7-8-10-12-10-8-7-8-10-12-10-8-7-8-10-12-10-8-7\6|B|
+|G|-----------------------------------------------------|G|
+
+|E|--------------------^^^^^^^^^------12---7--8--12--8--|E|
+|B|-12-6-12-7-12-4-12-5----------12-3-------------------|B|
+|G|-----------------------------------------------------|G|
+
+|E|12-8/10-7----12-10-8-7-8-10-12-10-8-7-8-10-12-10-8-7-|E|
+|B|------------9----------------------------------------|B|
+
+|E|-8-10-12-10-12-10-8-7-10-12-10---12-10-8-7-8-10-12-10|E|
+|B|-----------------------------------------------------|B|
+
+|E|--12-10-8-7-10-12-10-8-7-12-8-12-8-12-7-12-5-12-4-12-|E|
+|B|-----------------------------------------------------|B|
+     ^^^^^^^
+|E|-5---------------------------------------------------|E|
+|B|-----------12---5-7-12-7/8-12-7-12-8/10-12-7-12-8-12-|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-10-12-8-12-7-12-5-12-7-12-4-12-5--------------------|B|
+|G|----------------------------------9--4--9--5--9--2--9|G|
+|D|-----------------------------------------------------|D|
+
+After that final pull off to zero on the A string, the two 
+handed tapping ends and there is yet more crazy diving, 
+allowing him time to grab another pick.  Hang out around 
+the first four frets on the G string; use lots of 
+artificial harmonic stuff and vibrato with the bar as you 
+dive and climb.
+|E|----------------------------------------|E|
+|B|----------------------------------------|B|
+|G|-4--------------------------------------|G|
+|D|---9--2--9--4---------------------------|D|
+|A|---------------9--2--9p3/6/7\5/10\7-p-0-|A|
+|E|----------------------------------------|E|
+The classic trem. picking from Eruption begins below.  Just 
+pick the notes as fast as you can.  If you watch him, he is 
+holding the pick lightly and flicking his wrist, as if he 
+were ringing a bell, with his pinky partially extended.  I 
+think I once heard him refer to this style as "Humingbird 
+Picking" because it's so damn fast.
+
+        5x
+|E|-12--16--19--17--16--17--14--16-|E|
+|B|--------------------------------|B|
+
+Hold the 22 full bend and pick it like mad, add some
+vibrato if you like, for about six seconds.
+
+|E|-12--14--16--17--19--21--22--22bf--|E|
+|B|-----------------------------------------------------|B|
+
+This part below is all hammer-ons and pull-offs.  The 
+number in brackets is the original number picked.  If the 
+number following is higher than that preceding, it is a 
+hammer on and if it is lower, it is a pull off.  Tapping 
+is not used and will not resume until noted.
+
+|E|-----------------------------------------------------|E|
+|B|-{3}-5-3-0-5-3-0-5-3-0-5-3-{8}-7-{8}-7-3-0-{8}-7----3|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-0-7-{8}-7-3-{8}--7--3--0----------------------------|B|
+|G|-----------------------------------------------------|G|
+Hold this bend and tap the notes that follow while 
+indicated.
+      |----------------|
+|E|-----------------------------------------------------|E|
+|B|-------------------------------------{3}-5-3-0-5-3-0-|B|
+|G|-2bf--------7p2-5---2--p-0-h-2/4-p-2-----------------|G|
+|D|--------5p2------------------------------------------|D|
+|A|-----------------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|--------------------------------------------3-------3|E|
+|B|--------------------------------------------3-------3|B|
+|G|-<2>bf-p-0----------------------------------0-------0|G|
+|D|-----------2-----------------------------------------|D|
+|A|-------------<2>-<0>-------------------^^^^-2--------|A|
+|E|---------------------<3>--3p0-3bf-(3)bt-----0--------|E|
+
+|E|-----------------------------------------------------|E|
+|B|-----------------------------------------------------|B|
+|G|--------------------------5---------5-5-7-9-9-0-9-0--|G|
+|D|--------------5h7-7-7-7-7---7-7-7-7------------------|D|
+|A|-7/12-\-4/7------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+          |--trill--|
+|E|-----------------------------------------------------|E|
+|B|-----------------^^^^^^^-----------------------------|B|
+|G|-11-9-(11)------9------------------------------------|G|
+|D|--------------------------------------------------5--|D|
+|A|---------------------------7/12-\-----5h7-7-7-7-7----|A|
+|E|----------------------------------3/7----------------|E|
+                 |--trill--|
+|E|-----------------------------------------------------|E|
+|B|-----------------------------------------^^^^^^^^----|B|
+|G|-----------5-5p0h4-------7---4-(8)------4------------|G|
+|D|---------5---------7p4-4-----------------------------|D|
+|A|-7-7-7-7---------------------------------------------|A|
+|E|-----------------------------------------------------|E|
+
+|E|------------------------------------------|E|
+|B|------------------------------------6-6-7-|B|
+|G|----------------------5---------5p0-------|G|
+|D|----------5h7-7-7-7-7---7-7-7-7-----------|D|
+|A|-11-\-4/7---------------------------------|A|
+|E|------------------------------------------|E|
+
+For this part, you can see him throw his pick into the 
+crowd which tells us that he is now using just hammer-ons 
+and pull-offs in a trill-like style and continues until 
+noted.
+
+|E|-----------------------------------------------------|E|
+|B|-5-7-5-7-5-7-5-7-5-3-5-3-5-3-5-3-1-3-1-3-1-3-1-3-1-0-|B|
+|G|-----------------------------------------------------|G|
+
+|E|-------------------|E|
+|B|--2-0-2-0-2-0-2-0-2|B|
+|G|-------------------|G|
+|D|-------------------|D|
+|A|-------------------|A|
+|E|-------------------|E|
+
+This is where the finale begins.  This is the final few
+seconds of Eruption.  It is all two-handed tapping.
+
+     18x  |   8x  |  6x   |   2x  |  3x   | 7x |
+|E|-------|-------|-------|-------|-------|--------|----|E|
+|B|-9-2-5-|-10-2-5|-10-4-7|-12-4-7|-12-5-9|-15-7-10|----|B|
+|G|-------|-------|-------|-------|-------|--------|----|G|
+     2x   |  16x   |
+|E|--------|--------|-----------------------------------|E|
+|B|-17-7-10|-17-9-12|-17-12-15-17-12-15-17-11-14-17-11--|B|
+|G|--------|--------|-----------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-14-17-10-13-17-10-13-17-10-12-17-9-12-15-10-13-15-10|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-13-15-9-12-15-9-12-15-8-11-15-8-11-15-7-10-15-7-10--|B|
+|G|-----------------------------------------------------|G|
+
+|E|-----------------------------------------------------|E|
+|B|-13-8-11-13-8-11-13-7-10-13-7-10-13-6-9-13-6-9-13-5-8|B|
+|G|-----------------------------------------------------|G|
+             |  7x  | 9x      |   7x  |   12x          |
+|E|--------|------|-------|-------|---------------|-----|E|
+|B|-13-5-8-|12-4-7|-12-5-8|-12-4-7|-12-5-8-12-4-7-|--5\-|B|
+|G|--------|------|-------|-------|---------------|-----|G|
+|D|--------|------|-------|-------|---------------|--x\-|D|
+|A|--------|------|-------|-------|---------------|--x\-|A|
+|E|--------|------|-------|-------|---------------|--x\-|E|
+
+questions?  comments?
+nickd5583@cs.com
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/Van Halen Fill.prj b/guitar/tabs/Van Halen/Van Halen Fill.prj new file mode 100644 index 0000000..b9585f7 --- /dev/null +++ b/guitar/tabs/Van Halen/Van Halen Fill.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=Van Halen Fill.tab +DELAYS=(0,500)(1,500)(2,500)(3,500)(4,500)(5,500)(6,500)(7,500)(8,500)(9,500)(10,500)(11,500)(12,500)(13,500)(14,500)(15,500)(16,500)(17,500)(18,500)(19,500)(20,500)(21,500)(22,500)(23,500)(24,500) diff --git a/guitar/tabs/Van Halen/Van Halen Fill.tab b/guitar/tabs/Van Halen/Van Halen Fill.tab new file mode 100644 index 0000000..1e65374 --- /dev/null +++ b/guitar/tabs/Van Halen/Van Halen Fill.tab @@ -0,0 +1,31 @@ +Van Halen Fill + + +This is a little Van Halen trick I picked up. +I think it gives a good example of The way Eddie mixes +his fills in with chords. + + + + +Key = E + + + E |--------------------15--17--19--------------15--17--19--15h17p15----------| + B |--------15--17--19--------------15--17--19------------------------17------| + G |--5--7----------------------------------------------------------------16--| + D |--5--7--------------------------------------------------------------------| + A |--3--5--------------------------------------------------------------------| + E |--------------------------------------------------------------------------| + + E |-------------------------------|----------------------------------| + B |--19b20------------------------|----------------------------------| + G |---------5--7--5-----2---------|----------------------------------| + D |---------5--7--5-----2---------|----------------------------------| + A |---------3--5--3-----0---------|----------------------------------| + E |-------------------------------|----------------------------------| + + + + + diff --git a/guitar/tabs/Van Halen/aftershock.tab b/guitar/tabs/Van Halen/aftershock.tab new file mode 100644 index 0000000..172a6a5 --- /dev/null +++ b/guitar/tabs/Van Halen/aftershock.tab @@ -0,0 +1,461 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / aftershock.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Date: Thu, 13 Jul 1995 11:48:23 -0400 (EDT)
+From: "TOM K. HUBBARD" <an272@leo.nmc.edu>
+Subject: Aftershock (TAB) 
+
+
+Tabbed BY: James Norton <jnorton@u.washington.edu>
+
+Here is part one of my Aftershock tab, today's lesson is the intro 
+(tapped harmonics and the wicked flanger riff) the tab here goes up 
+untill the first vocals (you know "Oh Yeah!")
+   
+AFTERSHOCK
+By Van Halen
+>From the Album Balance
+
+****************************************************************************
+
+Intro (hold chord and tap fret indicated in parenthesis <sp?>)
+Let all notes ring in the first part of intro
+
+----------------------------------|-------------------------------|--0(12)-|
+----------------------------------|-------------------------------|--0(12)-|
+------------------0(12)-----------|----------------0(12)----------|--------|
+-------------2(14)-----2(14)------|-----------2(14)-----2(14)-----|--------|
+--------2(14)---------------1(13)-|------2(14)---------------1(13)|--------|
+--0(12)---------------------------|-0(12)-------------------------|--------|
+
+----------------------------------|-------------------------------|--0(12)-|
+----------------------------------|-------------------------------|--0(12)-|
+------------------0(12)-----------|----------------0(12)----------|--------|
+-------------2(14)-----2(14)------|-----------2(14)-----2(14)-----|--------|
+--------2(14)---------------1(13)-|------2(14)---------------1(13)|--------|
+--0(12)---------------------------|-0(12)-------------------------|--------| 
+
+****************************************************************************
+
+Intro (2)
+this goes down as one of my favorite Ed licks, it kicks ass, esp through 
+a flanger.
+-------------------------|--------------------|---------------------|
+-------------------------|--------------------|---------------------|
+-------------0--------0--|--------0-----------|-------0--------0----|
+-----------2--------2----|------2-----------0-|-----2--------2------|
+---------2------2-1------|--1-0-----------0---|---2------2-1--------|
+-------0-----------------|-----------3b(1/2)--|-0-------------------|
+pm------------------------------|               pm-----------------|
+
+
+
+---------------------------|----------------------|-----------------------|
+---------------------------|----------------------|-----------------------|
+--------0------------------|---------0---------0--|-------0---------------|
+------2--------------------|-------2---------2----|-----2---2----------0--|
+--1-0---------------0t(2)--|-----2-------2-1------|-1-0--------------0----|
+-------------3b(1/2)-------|---0------------------|-----------3b(1/2)-----|
+                    ^^^^^     pm-------------------------|
+                    trill
+
+-------------------------|----------------------------------------|
+-------------------------|----------------------------------------|
+--------0--------0-------|----------------------------------------|
+------2--------2------2--|----------------------------------0-----|
+----2------2-1------1-0--|------------------------0-------2-------|
+--0----------------------|---7\5\2b(1/2)-3--3b(F)---5b(F)---------|
+pm-----------|
+
+------------------0--------|--3--2---0-|-3--3--3--2----0---------|
+------------------0--------|--3--3---0-|-3--3--3--3----0---------|
+---------0-2b(F)-----2p0---|--0--2---2-|-0--0--0--2----2---------|
+-------2-----------------2-|--0--0---2-|-0--0--0--0----2---------|
+--5b(F)--------------------|---------0-|---------------0---------|
+---------------------------|-----------|-3--3--3-------------0---|
+                         (Flanger off)
+
+***************************************************************************
+Key to terms used
+
+3b(1/2)  Bend third fret up 1/2 tone
+5b(F)    Bend fifth fret up a whole tone
+0t(2)    Trill (hammer and pull of second fret quickly)
+7\5      slide down from seventh to fifth fret
+pm       Palm Mute
+2(14)    Fret second fret, tap on the fourteenth fret
+
+**************************************************************************
+Part two coming soon!
+
+
+
+			James 5149 1/2 (M-O-O-N, that spells James, laws yes)
+
+jnorton@u.washington.edu
+http://weber.u.washington.edu/~jnorton/james.html
+
+
+
+Subject:         TAB : Aftershock by Van Halen
+   Date:         Wed, 17 Sep 1997 19:20:23 +1000
+   From:         "IceMan" <s341802@student.uq.edu.au>
+
+
+TAB: :"Aftershock" by Van Halen
+Album: Balance
+
+Tabber: Stephen Yorke <s341802@student.uq.edu.au>
+
+This is the rest of the song after the intro part (when the drums
+come in) which has been submitted by another tabber.
+This is a great VH song that goes down as one of the best.
+
+TAB Notes:
+                                                                                                                                               
+----5h8--- Hammeron                                           
+----5p8--- Pulloff                        
+----5/8--- Slide Up                 
+----5\8--- Slide Down                     
+----5~---- Vibrato
+||------|| Repeat         
+||*----*||                
+||*----*||                
+||------||                    
+
+ 
+ (0:36) Fig.1                                                                
+0-----------------3--3--2--0---||--0-----------------3--3--2-----
+0-----------------3--3--3--3---||--0-----------------3--3--3-----
+0-----------------2--2--2--2--*||--2--------------2--2--2--2-----
+2-----------2--2--------------*||--2-----------2--2--------------
+2-----2--5~----2---------------||--0-----2--5~----0--------------
+0--------------0---------------||--------------------------------
+                                                                
+
+                       End Fig. 1                            
+0--0-----------------3--3--2--0--||--0-----------0---------------
+3--0-----------------3--3--3--3--||--0-----------0---------------
+2--0-----------------2--2--2--2--||--5-----------6---------------
+---2-----------2--2--------------||--5-----------7---------------
+---2-----2--5~----2--------------||--3-----------4---------------
+---0--------------0--------------||------------------------------
+                                                                 
+
+  P.M--------------                   Verse 1/ Fig. 2       
+0-----------------------3--3--2--0--||-----0---------------------
+0-----------------------3--3--3--3--||-----0---------------------
+7--7--7--7--7--7--7--7--2--2--2--2--||-----0---------------------
+7--7--7--7--7--7--7--7--------------||-----2---------------------
+5--5--5--5--5--5--5--5--------------||-----2---------------------
+------------------------------------||-----0---------------------
+                                                                 
+
+                                                                 
+------------------------3--3--2--0--0----------------------------
+------------------------3--3--3--3--0----------------------------
+------------------------2--2--2--2--0----------------------------
+---------------2--------------------2----------------------------
+2--5--5--2--------------------------2-----------2--5--5--2-------
+------------0-----0--0--------------0-----------------------0----
+                                                                 
+
+                                                                 
+---------3--3--2--0--0-----------------------------------3--3----
+---------3--3--3--3--0-----------------------------------3--3----
+---------2--2--2--2--2--------------------------2--2-----2--2----
+2--2-----------------2-----------2--5--5--2-----------2----------
+---------------------0-----------------------0-------------------
+------0----------------------------------------------------------
+                                                                 
+
+                                         End Fig 2           
+2--0--0-------------------------------3--3--2--0--||-------------
+3--3--0-------------------------------3--3--3--3--||-------------
+2--2--0-------------------------------2--2--2--2--||-------------
+------2--------------------------9\---------------||-------------
+------2-----------2--5--5--2-----7\---------------||-------------
+------0-----------------------0-------------------||-------------
+                                                                 
+
+(1:26) Interlude                                                        
+0-----------0-----------0-------------------------0--------------
+0-----------0--------------0----------------------0--------------
+5-----------7--------2--------2--2--2--4--4-------5--------------
+5-----------7--------2--------2--2--2--4--4-------5--------------
+3-----------5--------0--------0--0--0--2--2-------3--------------
+-----------------------------------------------------------------
+                                                                 
+
+   P.M. --              P.M. -----                                     
+-------------------------------------------------3--3--2--0------
+------------------------------------8p7----------3--3--3--3------
+7--7--7--7--7-----------9--9--9--9-------9--9\---2--2--2--2------
+7--7--7--7--7-----------9--9--9--9----------9\-------------------
+5--5--5--5--5-----------7--7--7--7----------7\-------------------
+-----------------------------------------------------------------
+                                                                 
+
+  (1:40)   Verse 2 Fig .2        (2:08) Bridge                     
+||-----------------------------||-----0-----------0--------------
+||-----------------------------||-----0-----------0--------------
+||-----------------------------||-----5-----------7--------------
+||-----------------------------||-----5-----------7--------------
+||-----------------------------||-----3-----------5--------------
+||-----------------------------||--------------------------------
+                                                                 
+
+P.M.------                         P.M.-                           
+------------0-----------------------------0----------------------
+---------------0--------------------------0----------------------
+---2--2--2--------2--2--2--4--4-----4--4--5--------8--7----------
+---2--2--2--------2--2--2--4--4-----4--4--5--------8--7-----8--7-
+---0--0--0--------0--0--0--2--2-----2--2--3--------6--5-----8--7-
+------------------------------------------------------------6--5-
+                                                                 
+
+                                   (2:22) Chorus / Fig. 1      
+---------------------3--3--2--0--||------------------------------
+---------------------3--3--3--3--||------------------------------
+------7-----------7--2--2--2--2--||------------------------------
+---5--7-----------7--------------||------------------------------
+---5--5-----------5--------------||------------------------------
+---3-----------------------------||------------------------------
+                                                                 
+
+        (2:37) Post Chorus       P.M.----        P.M.------          
+------||--0-----------0--------0-----------0---------------------
+------||--0-----------0--------0-----------0---------------------
+------||--5-----------6-----------6--6--6--7-----7--7--7--7------
+------||--5-----------7-----------7--7--7--7-----7--7--7--7------
+------||--3-----------4-----------4--4--4--5-----5--5--5--5------
+------||---------------------------------------------------------
+                                                                 
+
+                          (2:44) Solo                              
+-----0---------0--------||---------------------------------------
+-----0---------0--------||--------9--10-----9--9-----7--7--------
+-----8---------9--------||-----9---------------------------------
+-----9---------9--------||--9------------------------------------
+-----6---------7--------||---------------------------------------
+------------------------||---------------------------------------
+                                                                 
+
+ [A second guitar plays rythmn overtop]                          
+-------------------------------------------7---------------------
+---9p7-----------5--5---------------9--10-----9p7--7--7----------
+---------------------------------9-------------------------------
+------------------------------9----------------------------------
+-----------------------------------------------------------------
+-----------------------------------------------------------------
+                                                                 
+
+                          (2:58) Post Solo                         
+----------------------||--------------3--2-----------------------
+----------------------||--------------------3--0-----------------
+----------------------||-----------------------------------------
+----------------------||--5-----------------------2--------------
+----------------------||--5--------0--------------2-------0--3---
+----------------------||--3--------2--------------0--------------
+                                                                 
+
+                                                                 
+---------------------3------------3--2--------0------------------
+------------------------2/3\2-----------3--0--0------------------
+---0--------0---------------------------------0------------------
+2--------4--------5---------------------------2------------------
+------5-----------5------------2--------------2------------------
+------------------3------------0--------------0------------------
+                                                                 
+
+Harmonics ---------------------------------                  
+-----------------------------------------------------------------
+---------------------12--12--12--12--12--12----------------------
+--------------------------------------------------------7--------
+---------------7--7--------------------------7----------7--------
+---------7--7--------------------------------7----------5--------
+---7--7--------------------------------------5-------------------
+                                                                 
+
+----------------------                                      
+-----------------------------------------------------------------
+12--12--12--12--12--12-------------------------------------------
+-----------------------------------------------------------------
+------------------------7----------------------------------------
+------------------------7----------------------------------------
+------------------------5----------------------------------------
+                                                                 
+Whammy bar dive,sqeal,solo(Don't ask)                            
+              (Solo is over chorus and interlude figs.)
+||-------------------------------------------------------------||
+||-------------------------------------------------------------||
+||-------------------------------------------------------------||
+||-------------------------------------------------------------||
+||-------------------------------------------------------------||
+||-------------------------------------------------------------||
+
+
+  Fast alternate picking on each note 
+-----------------------------------------------------------------
+-----------------------------------------------------------------
+4--7--9--7--9--11--12--11--12--14--16--11--12--11--9--7--11------
+-----------------------------------------------------------------
+-----------------------------------------------------------------
+-----------------------------------------------------------------
+                                                                                                                                 
+---------------------------------------------------||------------
+---------------------------------------------------||------------
+7--9-----4--7--9--7--9--11--12--14--12--11--9--7---||------------
+---------------------------------------------------||------------
+---------------------------------------------------||------------
+---------------------------------------------------||------------
+                                                                                                                              
+
+(3:44) Post Solo                                                 
+-----------------------------------------------------------------
+-----------------------------------------------------------------
+9--9-----12--12/14--14/17--5--5/7--7--9--9-----12--12/17--17-----
+9--9-----12--12/14--14/17--5--5/7--7--9--9-----12--12/17--17-----
+7--7-----10--10/12--12/15--3--3/5--5--7--7-----10--10/15--15-----
+-----------------------------------------------------------------
+                                                                 
+
+                                                                 
+-------------------------||--------------------------------------
+-------------------------||--------------------------------------
+/16--12--12--12/11--11--*||-----4--------------------2-----2-----
+/16--12--12--12/11--11--*||-----4--------------------2-----2-----
+/14--10--10--10/9---9----||-----2--------------------0-----0-----
+-------------------------||--------------------------------------
+                                                                 
+
+        P.M.--                          (4:05) Chorus Fig. 1                         
+--------------------------3--3--2--0--||-------------------------
+--------------------------3--3--3--3--||-------------------------
+2--2h4--4--4--4--4--4--4--2--2--2--2--||-------------------------
+2--2h4--4--4--4--4--4--4--------------||-------------------------
+0--0h2--2--2--2--2--2--2--------------||-------------------------
+--------------------------------------||-------------------------
+                                                                 
+
+                       (4:20) Post Chorus                      
+---------------------||--0-----------0-----------------0---------
+---------------------||--0-----------0--------------0--------0---
+---------------------||--5-----------7-----------2--------2-----2
+---------------------||--5-----------7-----------2---------------
+---------------------||--3-----------5-----------0---------------
+---------------------||------------------------------------------
+                                                                 
+
+      P.M.                                                           
+----------------------0--------0--0--0-----0--------0--||--------
+----------------------0--------0--0--0-----0--------0--||--------
+-2--2-----4-----------5--------7--7--7-----8--------9--||--------
+-2--2-----4-----------5--------7--7--7-----9--------9--||--------
+-0--0--2--2-----------3--------5--5--5-----6--------7--||--------
+-------------------------------------------------------||--------
+                                                                 
+
+(4:32) Solo 3 (C,D,D#,E)          End with intro riff          
+------------------------------||-------------------------------||
+------------------------------||-------------------------------||
+------------------------------||-------------------------------||
+------------------------------||-------------------------------||
+------------------------------||-------------------------------||
+------------------------------||-------------------------------||
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/aint_talkin_about_love.tab b/guitar/tabs/Van Halen/aint_talkin_about_love.tab new file mode 100644 index 0000000..516d7f4 --- /dev/null +++ b/guitar/tabs/Van Halen/aint_talkin_about_love.tab @@ -0,0 +1,447 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / aint_talkin_about_love.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+
+From Gary Chapman                        Jul 22 '94 at 1:58 am 600
+
+
+Return-Path: <scary@zikzak.apana.org.au>
+Subject: TAB: Van Halen - Ain't talkin' 'bout love (upgrade)
+To: guitar@nevada.edu
+Date: Fri, 22 Jul 1994 01:58:02 +1000 (EST)
+
+Van Halen - Ain't talkin' 'bout love   - transcribed by Gary Chapman 
+====================================
+ 
+/  = slide 
+^  = hammer/pull
+w  = quickly hit the whammy bar
+b  = bend
+X  = noise 
+~  = vibrato
+< >= natural harmonic
+ 
+Intro:
+ 
+E ----------0-1-----3----------------
+B ------1-------1(1)--3--------------  Repeat 4 times.  On the second time 
+G --------2-------2------------------  through, play note in parentheses ()
+D ----2------------------------------
+A --0---------------------3~----2-3--
+E ----------------------3------------
+   |<--- palm muted ---->|
+ 
+ 
+ 
+  (with ~310ms slap-back delay)
+E -------------------------------------------------------w---w---w---
+B --1-----1-----0-------------------1-----1-----0-----1-1/3-3/5-5^8--
+G --2-----2-----0-------------------2-----2-----0--------------------
+D --2-----2-----0-------------------2-----2-----0--------------------
+A --0-----0---------------3~----2-3-0-----0--------------------------
+E ----------------------0--------------------------------------------
+ 
+E ----------------------------------0------------------------------
+B --1-----1-----0-------------------1-----1-----0------------w-w---
+G --2-2-2-2-----0-------------------2-----2-----0-----8(b)9--9-9\--
+D --2-2-2-2-----0-------------------2-----2-----0------------------
+A --0-0-0-0---------------3~----2-3-0-----0------------------------
+E ------------0---------0------------------------------------------
+ 
+Verse:
+ 
+E ----------1---3--------------------
+B ------1-------3--------------------
+G --------2-----0--------------------
+D ----2------------------------------
+A --0---------------------3~----2-3--
+E ----------------------3------------
+ 
+ 
+I heard the news baby, ....
+                       Yeah you may ...
+want, baby.  But I got ....
+ 
+(pick slide)
+Oh yeah !
+ 
+ 
+Chorus:
+ 
+E -------------------------------------------------------------------
+B --1-----1-----0-------------------1-----1-----0--------------------
+G --2-----2-----0-------------------2-----2-----0--------------------
+D --2-----2-----0-------------------2-----2-----0--------------------
+A --0-----0---------------3~----2-3-0-----0---------------3~----2-3--
+E ------------0---------0-------------------------------0------------
+ 
+Ain't talkin' 'bout love.....
+Ain't talkin' 'bout love.  ....
+ 
+ 
+Verse 2:
+ 
+You know you're semi-good ....
+You think you're really c....
+ 
+(pick slide)
+my friend.
+ 
+(chorus, incl. following lick)
+ 
+        E ----------w-w----w-w---
+        B --7(b)8---8-8-(b)9-10--
+        G -----------------------
+        D -----------------------
+        A -----------------------
+        E -----------------------
+ 
+Solo: 
+ 
+       let open E ring 
+                                        
+E -------0----0----------------------0---------------------------0--
+B ------10---10--10-12~-------------10---12-12-12-13-13-13-12\-8----
+G -9-12------------------------9-12---------------------------------
+D ------------------------------------------------------------------
+A ------------------------------------------------------------------
+E ------------------------------------------------------------------
+                                        |<-- very fast -->|
+ 
+E -------0----0--------0--------------------------------------------
+B ------10---12--13---15---13--15/17--17/20---17^20^17--17^20^17----
+G -9-12---------------------------------------------------------20--
+D ------------------------------------------------------------------
+A ------------------------------------------------------------------
+E ------------------------------------------------------------------
+ 
+ 
+E ----------------------------------------------------
+B --17^20^17--17^20^17--17----------------------------
+G ----------20--------20--19(b)21-19--0(whammy dive)--
+D ----------------------------------------------------
+A ----------------------------------------------------
+E ----------------------------------------------------
+ 
+(chorus)
+ 
+Bridge:
+ 
+  (clean sound)
+E -----------1---3---------------------
+B ------1------1---3-------------------
+G --------2----------0-----------------
+D ----2--------------------------------
+A --0------------------------3~----2-3-
+E -------------------------3-----------
+ 
+  I've been to the edge...
+  down.  You know I ....
+  friends there baby.  ....
+  around.  So if you ....
+ 
+E ---------------------------------------------------------------------
+B --X--X-------<5>------<12>--------X--X---<5>---------<7>-----<12>----
+G --X--X-----<5>----<7>-------------X--X-----<5>--------------------0--
+D --X--X---<5>----------------------X--X-------<5>--<7>----------------
+A --X--X----------------------------X--X-------------------------------
+E --X--X----------------------------X--X-------------------------------
+ 
+  bleed for it baby. gotta ....
+ 
+E --------------------------------------------------
+B --X--X-------<5>--<5>-------------X--X-------<5>--
+G --X--X-----<5>--------<5>---------X--X-----<5>----
+D --X--X---<5>----------------------X--X---<5>------
+A --X--X----------------------------X--X------------
+E --X--X----------------------------X--X------------
+ 
+  bleed baby  hey  ....
+ 
+E -------------------------------------------------------w---w---w---
+B --1-----1-----0-------------------1-----1-----0-----1-1/3-3/5-5^8--
+G --2-----2-----0-------------------2-----2-----0--------------------
+D --2-----2-----0-------------------2-----2-----0--------------------
+A --0-----0---------------3~----2-3-0-----0--------------------------
+E ----------------------0--------------------------------------------
+                                                         
+Ain't talkin' 'bout love.....
+ 
+E ----------------------------------0--------------------------------
+B --1-----1-----0-------------------1-----------0--------------------
+G --2-2-2-2-----0-------------------2-----2-----0--------------------
+D --2-2-2-2-----0-------------------2-0-2-------0--------------------
+A --0-0-0-0---------------3~----2-3-0---------------------3~----2-3--
+E ------------0---------0-------------------0-0--------0-------------
+ 
+Ain't talkin' 'bout love....
+ 
+Ain't talkin' 'bout love, .....
+ 
+ 
+E --17-17-17-17-17-17-17\-
+B ------------------------
+G ------------------------
+D ------------------------
+A ------------------------
+E ------------------------
+ 
+Don't make ...
+ 
+Ain't gonna ....
+ 
+ 
+(solo)
+ 
+E -------------------------------------------------------------------
+B --1-----1-----0-------------------1-----1-----0--------------------
+G --2-----2-----0-------------------2-----2-----0--------------------
+D --2-----2-----0-------------------2-----2-----0--------------------
+A --0-----0---------------3~----2-3-0-----0---------------3~----2-3--
+E ------------0---------0-------------------------------0------------
+ 
+                   Hey ! Hey ! Hey ....
+                  
+E -------------------------------------------------------------------
+B --1-----1-----0----w---w----w-----1-----1-----0--------------------
+G --2-----2-----0----5--/8--/10\----2-----2-----0--------------------
+D --2-----2-----0-------------------2-----2-----0--------------------
+A --0-----0-------------------------0-----0---------------3~----2-3--
+E ------------0-----------------------------------------0------------
+ 
+                   Hey ! Hey ! ....
+                  
+E --------------------------------
+B --1-----1-----0-----------------
+G --2-----2-----0------5---5---5--  (4 times)
+D --2-----2-----0------5---5---5--
+A --0-----0------------3---3---3--
+E ------------0-------------------
+                     Hey ! Hey ! Hey!
+E -------------------------------------------0----------------------------------
+B ----------5----------------1---------------1------------------------1-------8-
+G --2---4---5----------------2---4-----------2---4---5----------------2---4---7-
+D --2---4---5----------------2---4/----------2---4---5----------------2---4---9-
+A --0---2---3-----------3-2--0---2-----------0---2---3-----------3-2--0---2---7-
+E ------------/12\--0^3-------------0(dive)------------/12\--0^3----------------
+ 
+E ----------7\-
+B ----------7\-
+G ----------7\-
+D ----------6\-
+A ----------7\-
+E --0(dive)----
+ 
+---
+
+Mr.Scary (Gary Chapman)
+-------------------------
+scary@zikzak.apana.org.au
+
+
+
+
+Ain't_Talkin'_'Bout_Love 
+      by Van Halen		(what I remember anyway)
+
+Transcribed by Eric Larson (larsoe@rpi.edu)
+
+The main riff goes something like this:
+
+(Palm-Muted of course)
+
+Am		  G
+----------O-1-----3---------------|
+------1-------1-----3------------.|
+--------2-------O-----O-----------|
+----2----------------------------.|
+--O---------------------3^~~-2-3--| (the ^~~ means do afunkey bend/vibrato)
+----------------------------------|
+			AH		(Artificial Harmonic)
+
+Then he does something like this after that and for the chorus:
+
+----------------------------------------------------------
+---------3------------------------3-----------------------
+-2-X-2-X-O----------------2-X-2-X-O-------/5-5/7-7/9-9/12-  ('/' = slide)
+-2-X-2-X-O----------------2-X-2-X-O-----------------------
+-O-X-O-X-X------3^~~-2-3--O-X-O-X-X-----------------------
+---------3--3-3-------------------3--3-3------------------
+   F   F    P P AH          F   F    P P		    (F = Finger Mute
+							     P = Palm Mute)
+
+The verses I believe are like the main riff only not muted, just let the notes
+ring.
+
+I don't even have a tape of the song anymore so I can't figure out the solo...
+I forgot it, sorry. The solo is pretty simple though.... Well I'll write down
+what I THINK it sort of sounds like.... perhaps someone would like to mail me
+a tape?? (I'd be happy to figure out the rest of the songs if someone would :)
+
+------------------------------------------------------------------------------
+------10---10-10-12--------10---12-13-12--------------10---12-13-13/15--13-15-
+-9-12-----------------9-12---------------12\9---9-12--------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+
+--------|
+-15^~~~-|  I'm sure this last part isn't right but it fits......
+--------|   Man, I gotta get this CD as soon as I get some cash,
+--------|    this is such a kickin' tune!!!
+--------|   As a matter-o-fact, this was the first song I ever learned!!!
+--------|
+
+The sound Eddie gets is the result of a good flange sound and I assume a 
+Marshall cranked up to eleven!
+
+
+From: Bradley W Zimmerman <bz29+@andrew.cmu.edu>
+Subject: TAB: Ain't talkin' 'bout Love
+
+"Ain't Talkin' 'Bout Love" (Van Halen)
+intro:
+Am         F     G
+---------0-1-----3--------------
+-----1-------1-----3------------
+-------2-------0-----0----------
+---2----------------------------
+-0-------------------0-3b*-2-3--
+--------------------------------
+                          *pinch harmonic
+
+Chorus: Am (x0221x)
+        G  (3x000x)
+
+verse
+Am       F    G
+---------1----3----------------
+-----1-----1--3----------------
+-------2------0----------------
+---2---------------------------
+-0----------------0-3--2-3-----
+-------------------------------
+
+I'll try to post the solo later.....
+Check y'all
+
+                                        -Raphrat
+
+  
+
+
+
+From: caton@eniware.it (Stefano Picciolo)
+Subject: TAB: Ain't talkin' 'bout love (Van Halen)
+Date: 10 Dec 95 13:01:22 CET
+
+Another version of this famous riff:
+
+e---------------------------------------------------------------||
+B---------------------------------------------------------------||
+G--------------------10-----12(h)-------------------------------||
+D-----10------14-15-----12-------12(h)--------------------------||
+A---7------12---------------------------0--3-(a.h.)-2--3-(a.h.)-||
+E-5-------------------------------------------------------------||
+
+
+Stefano Picciolo
+(caton@eniware.it)
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/amsterdam.tab b/guitar/tabs/Van Halen/amsterdam.tab new file mode 100644 index 0000000..b4f7959 --- /dev/null +++ b/guitar/tabs/Van Halen/amsterdam.tab @@ -0,0 +1,220 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / amsterdam.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: "Mark D. Dittmer" <mdittmer@freenet.calgary.ab.ca>
+
+                                 AMSTERDAM
+                          As Recorded by Van Halen
+                (From the album BALANCE/Warner Bros. Records)
+
+Transcribed by Mark Dittmer                               Words and Music by
+           and Jeff Krinks                      Edward Van Halen, Sammy Hagar
+                                          Michael Anthony, and Alex Van Halen                                         
+
+  0:00
+e----------------------------------------------------------------------------
+B----------------------------------------------------------------------------
+G----------------------------------------------------------------------------
+D-------------------------------2~----------------------0----x-x---x-x-------
+A---------------------------2------------------------0-------x-x---x-x-------
+D---------------2--4--5--6---------------0--2--3--4----------x-x---x-x-------
+  Light 'em up                       Unh!                 |-muted strngs-|
+                    
+  0:06                                                               
+e--------------------------------------------------------------0-2h3p2p0-0---
+B--------------------------------------------------------------------------0-
+G----------------------------------------------------------------------------
+D--------------------2~----x-x---x-x----------------------0------------------
+A-----------------2--------x-x---x-x-------------------0---------------------
+D-----2--4--5--6-----------x-x---x-x-------0--2--3--4------------------------
+                                                                    Oh yeah
+                                                                    
+  0:12
+e--------------------------4--5---------------------------0-2h3p2p0-0--------
+B--------------------------5--5---------------------------------------0------
+G----------------------------------------------------------------------------
+D--------------------2~------------------------------0-----------------------
+A-----------------2-------------------------------0--------------------------
+D-----2--4--5--6----------------------0--2--3--4-----------------------------
+
+
+  0:17
+e--------------------------4--5---------------------------0-2h3p2p0-0--------
+B--------------------------5--5----------------------------------------------
+G----------------------------------------------------------------------2-----
+D--------------------2~------------------------------0-----------------2-----
+A-----------------2-------------------------------0--------------------0-----
+D-----2--4--5--6----------------------0--2--3--4-----------------------------
+                                                                       Yeah!
+                                                                       
+  0:23
+e----------------------------------------------------------------------------
+B-------------------------------/5--0---------------3-3----------------------
+G---------------------------------------------------2-2----------------------
+D--------------------------------------/6--2h6p2----0-0---0-0-0---0-0-0------
+A-----T12-T9-T7-T7-T5-T4----------------------------0-0---0-0-0---0-0-0------
+D---------------------------------------------------0-0---0-0-0---0-0-0------
+      |-tap harmonics--|                                 Looking ....
+                                                          
+  0:30
+e----------------------------------------------------------------------------
+B----------------------------0----------------3-3----------------------------
+G-----/4-4------------------------------------2-2--------------------/4-4----
+D-----/2-2-------2~-4-2--/6-----/6---2h6p2----0-0---0-0-0---0-0-0----/2-2----
+A-----/2-2---2-4------------------------------0-0---0-0-0---0-0-0----/2-2----
+D-----/2-2------------------------------------0-0---0-0-0---0-0-0----/2-2----
+  the window                                        Shinin'....
+  
+  0:36
+e----------------------------------------------------------------------------
+B---------------------0------------3-3---------------------------------------
+G----------------------------------2-2---------------------------------------
+D---------2~-4-2--/6-----/7--6-----0-0---0-0-0---0-0-0------------7-------7--
+A-----2-4--------------------------0-0---0-0-0---0-0-0---x\-------7-------7--
+D----------------------------------0-0---0-0-0---0-0-0---x\----5~-7----5~-7--
+  light    yeah                         A ....
+                                         in the b....          
+                                 
+  0:44
+e----------------------------------------------------------------------------
+B-----------3-------3------------------------/5--0---------------3-3---------
+G-----------2-------2--------------------------------------------2-2---------
+D-----------0---2---0---------------2~--------------/6--2h6p2----0-0---0-0-0-
+A-----x\--------2----------------2-------------------------------0-0---0-0-0-
+D-----x\--------2--------6-2-4-6---------------------------------0-0---0-0-0-
+  lookin'                                                             ....
+  alright, yeah
+  
+  0:52
+e----------------------------------------------------------------------------
+B-------------------------------------0----------------3-3-------------------
+G--------------/4-4------------------------------------2-2-------------------
+D-----0-0-0----/2-2-------2~-4-2--/6-----/6---2h6p2----0-0---0-0-0---0-0-0---
+A-----0-0-0----/2-2---2-4------------------------------0-0---0-0-0---0-0-0---
+D-----0-0-0----/2-2------------------------------------0-0---0-0-0---0-0-0---
+  pocket fulla .....
+                                                                       night
+  0:58                                                                 
+e----------------------------------------------------------------------------
+B----------------------------0------------3-3--------------------------------
+G-----/4-4--------------------------------2-2-------------------------2-2----
+D-----/2-2-------2~-4-2--/6-----/7--6-----0-0---0-0-0---0-0-0---------0-0----
+A-----/2-2---2-4--------------------------0-0---0-0-0---0-0-0---x\----0-0----
+D-----/2-2--------------------------------0-0---0-0-0---0-0-0---x\----0-0----
+    ahead                                       ....
+                                                    the ...
+  1:05                     
+e----------------------------------------------------------------------------
+B------------------3---------------------------------------------------------
+G-----2-2----------2-------2-------------------------------------------------
+D-----2-2----------0---5---2-------------------------------------------------
+A-----0-0---2--4-------5---0-------------------------------------------------
+D----------------------5-----------------------------------------------------
+  some             yeah          Whoooaaaa.....
+   panama red,     
+
+
+
+I realize this tab is far from complete, but it's a start.  I tried to make 
+this tab as accurate and as readable as I could.
+-Mark Dittmer  (March 5, 1995)
+
+mdittmer@freenet.calgary.ab.ca  (home)
+mddittme@acs.ucalgary.ca  (school)
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/and_the_cradle.tab b/guitar/tabs/Van Halen/and_the_cradle.tab new file mode 100644 index 0000000..26778e1 --- /dev/null +++ b/guitar/tabs/Van Halen/and_the_cradle.tab @@ -0,0 +1,246 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / and_the_cradle.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+AND THE CRADLE WILL ROCK...
+VAN HALEN: Women and Children First
+Tabbed by: dsale@jax.jaxnet.com
+           http://www.jaxnet.com/~dsale
+
+
+  Here's some tab for =VH='s and the cradle will rock.I know it was originally
+ played on a Wulitzer electric piano, but what the hell, it sounded like a
+ guitar and sounds great live.
+ If anyone happens to have any WACF or FW shows, please leave me some email,
+ we'll trade some stuff.
+ Latah.
+
+
+
+Ed's moving the pick along the low E string, sliding it up and down (something
+like: x\ x\ x\ x\ x\ x\ x/ x/ x/ x/ x/ x/ x/) with an MXR flanger pedal at
+the beginning.
+
+
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------2--2-----5-----5-----0--------------------------------2--2--------
+------2--2-----5-----5-----0--------------------------------2--2--------
+------0--0--0-----0-----0-----------0--0--0--0--0-----------0--0--0-----
+0--3--------------------------------------------------0--3--------------
+                                                                        
+
+                                                                        
+------------------------------------| This part is also played during
+------------3-----------------------| the chorus.It should be picked w/
+5-----5-----2-----------------------| fingers to reproduce the song.
+5-----0-----------------------------| The second time around you should add:
+---0-----0--------------------------|
+---------------3--3--3--3--3--3-----|
+                                                                        
+
+                                                                        
+-----------------------------------------|
+10-----------10p8-----8-----8\-/10------\| (trem.pick)
+-------------------9---------------------|
+-----------------------------------------| 
+-----------------------------------------|
+-----------------------------------------|
+                                                                        
+"Well they
+Say its kinda frightnin'.."                                                                        
+------------------------------------------------------1--1--------------
+------6--------5--------6-----------6--5--3-----------1--1--------3-----
+------5--------5--------5-----------5--------5--------3--3--------3-----
+------5--------5--------5-----------5-----------------------------3-----
+3--3-----3--3-----3--3-----------3--------------1--1--------1--1--------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+-----------------------------|
+---3--------3-----3p1-----3--|
+---3--------3----------------|
+---3--------3----------------|
+------1--1-----1-------1-----|
+-----------------------------|
+                                                                        
+
+that part is played again,under:
+                                                                        
+-----------------------------------------------------------|
+-----------------------------------------------------------|
+---------------------------------------3--2~~~-----3~~~----|
+-------/7-----5~~~-----5\3\---2-----3-----------3----------|
+3~~~-------------------------------------------------------|
+---------------------------------------------------------x\|
+
+second verse:
+
+"And when some
+local kid gets down.."                     "They say.."           "faked.."
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------2--------0-----0-----2--2--------------3--------------2-----3-----
+------3--------3-----3-----3--3-----------------------------------1-----
+------3--------3-----3-----3--3--------------3--------------3-----------
+1--1-----1--1-----1-----------------------------------------------------
+                                                                        
+
+                                     "and at an early.."                    
+------------------------------------------------------------------------
+------------------------------------------------------10--------8-------
+---0--------2-----2--3--3-----5-----3-----------------10--------10------
+1--1--1--1--1--1--1--1--1-----1-----1-----------------10--------10------
+------------------------------------------------8--8------8--8----------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------|
+---8---10--10--------11-----10--8-----10-----10-----11--11--------|
+---10--10--10--------10-----10--8-----8------8------8---8---------|
+---10--10--10--------10-----10--8-----8------8------8---8---------|
+8-----------------------------------------------------------------|
+------------------------------------------------------------0--3--|
+                                                                        
+
+                                                                        
+                                                                        
+the guitar solo..
+
+
+                                                                        
+------------------------------------------------------------------------
+t-----------t--------t--------t---------t---------t---------t-----------
+17p---9h12--17p9h12--17p9h12--17p10h13--17p10h13--17p11h14--17p11-------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+t-------------t------p------p-------------------------------------------
+17h11\10^-----13-----10-----10p9~~~---\------x--5^--5--5--5--5--5--5----
+------------------------------------------x-----------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+---------------------------------------------------------8--11p8--11----
+5--5--5-----5p3h5-----3^\--------------------5h9p5--5/9-----------------
+--------------------------------------5h7h9-----------------------------
+----------------------------x--3h5h7------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+---8--11^--11--10--9--8------------------------------------20~~~--|
+^---------------------------11^~~~/20----------20-----------------|
+------------------------------------------19^------19--17---------|
+------------------------------------------------------------------|
+------------------------------------------------------------------|
+------------------------------------------------------------------|
+                                                                        
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/atomic_punk.tab b/guitar/tabs/Van Halen/atomic_punk.tab new file mode 100644 index 0000000..45429a9 --- /dev/null +++ b/guitar/tabs/Van Halen/atomic_punk.tab @@ -0,0 +1,123 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / atomic_punk.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Subject: More V.H. licks Atomic Punk/Dancin in Streets
+From: edward@pluto.njcc.com (Edward Sulikoswki)
+Date: Sun, 28 May 1995 03:06:23 -0400
+
+Off of VH #1 and diver down for sure.
+
+Here is the beginning lick of Atomic Punk.Use a flanger,or combfilter,and 
+a tad o' slapback delay for the Sliding noise effect.The partial rhythm
+for Dancing in the Street's is a distorted heavily echo timing thing.
+Oh maybe if you want to try a different thing for the Atomic Punk you can
+add a wah into the signal and roll it back a little  and give it a try.
+This seem's to make it more fatter or give it just the right hint of 
+sustain when you need it.I think.Tune those babies down a 1/2 step too.
+  Atomic Punk by V.H. intro                                        _
+                           use vibrato    _= whammy a few times[re 7]
+e
+b                                                                           _
+g                                                        7   8              7 
+d                                          5   04        7Sl.8       5  04
+a   *       *      *    play twice       7               5   6     7
+e *   *   *   *  *   *                0                          0
+*=scratch srings with edge of palm in like a rhythm of three.You really need
+the flange for this and echo would add a cool effect if you time it rite.
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/beautiful_girls.tab b/guitar/tabs/Van Halen/beautiful_girls.tab new file mode 100644 index 0000000..1c788fc --- /dev/null +++ b/guitar/tabs/Van Halen/beautiful_girls.tab @@ -0,0 +1,166 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / beautiful_girls.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Received: from nevada.edu (animal-farm.nevada.edu) by redrock.nevada.edu (5.65c/M1.4)
+	with SMTP id <AA03323>; Sun, 6 Dec 1992 17:18:48 -0800
+Received: from rpi.edu by animal-farm.nevada.edu. id aa16513; 6 Dec 92 17:14 PST
+Received: from localhost (marcus.its.rpi.edu) by rpi.edu (4.1/SMHUB39);
+	id AA05527; Sun, 6 Dec 92 20:13:58 EST for jamesb@nevada.edu
+From: larsoe@rpi.edu
+Mmdf-Warning:  Parse error in original version of preceding line at animal-farm.nevada.edu.
+Received: by localhost (AIX 3.1/UCB 5.61/AIXV3-SUB16);
+	id AA63428; Sun, 6 Dec 92 20:13:32 -0500 for jamesb@nevada.edu
+Message-Id: <9212070113.AA63428@localhost>
+Subject: Beutiful Girls by Van Halen
+To: jamesb@nevada.edu
+Date: Sun, 6 Dec 92 20:12:45 EST
+X-Mailer: ELM [version 2.3 PL11]
+
+			Beautiful Girls  
+		 	 by Van Halen
+
+			transcribed by
+ 		  Eric Larson larsoe@rpi.edu
+
+	 		     ________________
+Main Riff (intro)		1,2,3| 4
+-------------------------------------|---------------------------
+-------------------------------------|---------------------------
+----2-H-H--2----2-2-----------------.|---------------------------
+--2-2--3-4-2----2-2-----P---X-5-5/6-.|-7-6\4---------------------
+--------------------4--5-2--X-5-6/7--|-5-4\2---------------------
+--------------2----------------------|---------------------------
+              T
+
+Verses (slightly muted)
+-------------------O-
+-------------------O-
+---------------------
+----------4---P------ Etc. He does simple variations on this throughout
+------2-4-5--4-O-4---      The verses.
+--O-O-O--------------
+
+Bridge (These are the chords, I'm not going to try to notate the rythmn)
+F#/A / / / / /	         B / / / / / / / / / /
+---------------------------|-------------------------|
+--2------------------------|-------------------------|
+--2-------------P-P-------.|------------------------.|
+--2------------4-2-O------.|-4--------4-2-O---4-----.|
+--O------------------2-----|-2--------------2-2------|
+--2------------------------|-------------------------|
+..What a sweet....
+whith a little ...
+
+E    F# G        A      B   C
+Here I am,  Your ma...
+E   F#  G        A      B  C
+All I need, Is a ....
+G     C      D       E
+Ahhhh yeah, ....
+
+(And in the outro chorus he does this:)
+D    A              E
+Ahhh yeah, ....
+								 ______
+      ___                                                (__)   /      \
+     (__   _   ` _        Eric Larson                    (oo)  (  Moo?  )
+     (____/ )_/ (__       1003 Caldwell Hall      /-------\/ --'\______/
+     ______________       (518)276-4672	         / |     ||
+    (______________)      larsoe@rpi.edu	*  ||----||
+                                                   ^^    ^^
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/best_of_both_worlds.tab b/guitar/tabs/Van Halen/best_of_both_worlds.tab new file mode 100644 index 0000000..f7e4da4 --- /dev/null +++ b/guitar/tabs/Van Halen/best_of_both_worlds.tab @@ -0,0 +1,600 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / best_of_both_worlds.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Best of Both Worlds -- Van Halen
+(transcription from Cherry Lane Music Company)
+
+
+Key:  H - hammer-on	P - pull-off
+      / - slide-up	\ - slide-down
+      ^ - half bend 	^^ - full bend
+      ~ - vibrato	T - thumb
+
+*** Recording sounds 1/2 step higher
+
+
+*** Intro ***
+     D/F#      G5         D/F#     G      D/F#   G      A
+--------------------------------|--------------------------------|
+-----3----3----3---3------3-----|--0------3------0------2---2----|
+-----2----2----0---0------2-----|--0------2------0------2---2----|
+-----0----0----0---0------0-----|--0------0------0------2---2----|
+-----0----0---------------0-----|---------0-------------0---0----|
+-----2----2----3---3------2-----|--3------2------3---------------|
+     T    T               T               T
+
+
+
+     D/F#    G5         D/F#       G      A
+--------------------------------|--------------------------------|
+-----3-------3---3------3-------|--0------2---2------------------|
+-----2-------0---0------2-------|--0------2---2------------------|
+-----0-------0---0------0-------|--0------2---2---2--------------|
+-----0------------------0-------|---------0---0---0--------------|
+-----2-------3---3------2-------|--3-----------------------------|
+     T                  T              
+
+
+
+(pick w/fingers)         G/A   D/A   G/A   D/A    G/A   D/A A          G/A
+------------------------|------------------------|------------------------|
+--------------------3---|-3----(3)----3-----3----|-3-----3--2-----------3-|
+------------2---2---4---|-4-----2-----4-----2----|-4-----2--2----2------4-|
+------------2---2---5---|-5-----4-----5-----4----|-5-----4--2----2------5-|
+------------------------|----0--0--0--0--0--0--0-|-0--0--0--0-------0-----|
+------------------------|------------------------|------------------------|
+
+
+
+
+      D/A   G/A A    A5    A7sus2        A        G/A   D/A   G/A   D/A
+------------------------|------------------------|------------------------|
+-3--3--3-----3--2-----5-|-----0----0-----2------3|-3-----3-----3-----3----|
+-4--4--2-----4--2-----2-|-----0----0-----2--2---4|-4-----2-----4-----2----|
+-5--5--4-----5--2-----2-|-----2----2-----2--2---5|-5-----4-----5-----4----|
+-0-----0--0--------0----|-0----------------------|----0--0--0--0--0--0--0-|
+------------------------|------------------------|------------------------|
+
+
+
+
+G/A   D/A A  Asus2   A9  G/A   D/A  G/A A  Asus2
+----------------------0-|------------------------|------------------------|
+-3-----3--2----0------0-|-3--3--3----3--2----0---|--(0)-------------------|
+-4-----2--2----2------0-|-4--4--2----4--2----2---|--(2)-------------------|
+-5-----4--2----2--------|-5--5--4----5--2----2---|--(2)-------------------|
+-0--0--0--0----0--0---0-|-0--0--0----0--0----0---|--(0)-------------------|
+------------------------|------------------------|----------sl-/14\-------|
+
+
+
+(w/pick)
+      D/F#     G         D/F#     G      D/F#   G      A
+--------------------------------|--------------------------------|
+---------------0---0------3-----|--0------3------0------2---2----|
+-------2-------0---0------2-----|--0------2------0------2---2----|
+-------0-------0---0------0-----|--0------0------0------2---2----|
+-------0------------------0-----|---------0-------------0---0----|
+-------2-------3---3------2-----|--3------2------3---------------|
+       T                  T               T
+
+
+
+     D/F#    G         N.C.              A(sus2)
+--------------------------------|--------------------------------|
+-----3-------0---0--------------|-------------0--------------0---|
+-----2-------0---0--------------|--------2----2--------------2---|
+-----0-------0---0--------------|--------2----2--------^^----2---|
+-----0------------------^P------|---^----0----0-----^^v------0---|
+-----2-------3---3-----2--0-----|--3---------------3-------------|
+     T           Let Ring_____|                    
+
+
+
+     D/F#      G          D/F#     G      D/F#   G      A
+--------------------------------|--------------------------------|
+-----3----3----0---0------3-----|--0------3------0------2---2----|
+-----2----2----0---0------2-----|--0------2------0------2---2----|
+-----0----0----0---0------0-----|--0------0------0------2---2----|
+-----0----0---------------0-----|---------0-------------0---0----|
+-----2----2----3---3------2-----|--3------2------3---------------|
+     T    T               T               T
+
+
+
+     D/F#    G      N.C.    D5                       Csus2    A5
+--------------------------------|--------------------------------||
+-----3-------0---0----------3---|--(3)------3---3------3---------||
+-----2-------0---0----------2---|--(2)------2---2------0------2--||
+-----0-------0---0----------0---|--(0)------0---0-------------2--||
+-----0--------------0---3-------|-------3--------------3--0---0--||
+-----2---2---3---3--------------|--------------------------------||
+     T           Let Ring_______________|                PM.
+
+
+*** 1st Verse ***
+        A/C#            G/A         D/F#    A
+--------------------------------|--------------------------------|
+---------------------2---3------|----3------2-------------2------|
+--------------2---2------4------|----2------2----------------2---|
+-------------------------5------|----4------2--------------------|
+--------//4---------------------|-----------------3//4-----------|
+--------------------------------|--------------------------------|
+         I don't know__what  I been__...
+
+
+
+                         D7sus4             D/A           A
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+---------2------------------5---|--5--5--------------------------|
+-------------2--------------5---|--5--5------4---4-------(2)-----|
+-----2/5---------4---O------5---|--5--5------5---5-------(0)-----|
+-------------------P------------|------------5---5---------------|
+    it's not enough     to ...
+
+
+
+        A/C#            G/A         D/F#    A
+--------------------------------|--------------------------------|
+---------------------2---3------|----3------2-------------2------|
+------------------2--2---4------|----2------2----------------2---|
+--------------2----------5------|----4------2--------------------|
+--------//4---------------------|----0------------3//4-----------|
+--------------------------------|--------------------------------|
+        I need more_  than just ...
+
+
+                         D7sus4             D/A
+--------------------------------|--------------------------------|
+--------------------------------|------------------------/6-O----|
+---------2------------------5---|--5--5--------------------------|
+-------------2--------------5---|--5--5------4-------------------|
+-----//4---------4---O------5---|--5--5------5-------------------|
+-------------------P------------|------------5-------------------|
+    I need ev'rything this ...
+
+
+
+      D/F#     G         D/F#     G      D/F#   G      A
+--------------------------------|--------------------------------|
+---------------0---0------3-----|--0------3------0------2---2----|
+-------2---2---0---0------2-----|--0------2------0------2---2----|
+-------0---0---0---0------0-----|--0------0------0------2---2----|
+-------0---0--------------0-----|---------0-------------0---0----|
+-------2---2---3---3------2-----|--3------2------3---------------|
+       T   T              T               T
+    __ yeah!                      'Cause ...
+
+
+     D/F#    G         D/F#              A(sus2)
+--------------------------------|--------------------------------||
+-----3-------0---0--------------|--------0----0------------------||
+-----2-------0---0-----2--------|--------2----2------------------||
+-----0-------0---0-----0--------|--------2----2------------------||
+-----0------------------^P------|---^^---0----0------------------||
+-----2-------3---3-----2--0-----|--3-----------------------------||
+     T
+						Ow!
+
+*** 2nd Verse ***
+        A/C#             G/A        D/F#    A     A/C#
+--------------------------------|--------------------------------|
+---------------------2---3------|----3------2-------------2------|
+------------------2------4------|----2------2----------------2---|
+--------------2----------5------|----4------2--------------------|
+--------//4---------------------|------------------//4-----------|
+--------------------------------|--------------------------------|
+        Come on,   ba-  by,   ....
+
+
+
+                         D7sus4             D/A             A
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+---------2------------------5---|--5--5--------------------------|
+-------------2--------------5---|--5--5------4--4----------------|
+-----//4---------4---O------5---|--5--5------5--5-----------0----|
+-------------------P------------|------------5--5----------------|
+       This can be      every....
+
+
+
+        A/C#            G/A         D/F#    A      A/C#
+--------------------------------|--------------------------------|
+---------------------2---3------|----3------2-------------2------|
+------------------2-(2)--4------|----2------2----------------2---|
+--------------2----------5------|----4------2--------------------|
+--------//4---------------------|------------------//4-----------|
+--------------------------------|--------------------------------|
+        It's not work      that makes ....
+
+
+
+                         D7sus4
+--------------------------------|--------------------------------||
+--------------------------------|---------------H----------------||
+---------2------------------5---|---5--4----5--4-5-----4---2-----||
+-------------2--------------5---|---5--5----5--5-------5---3-----||
+-----//4---------4---O------5---|--------------------------3-----||
+-------------------P------------|--------------------------------||
+     no, let the magic do ....
+
+
+*** Pre-chorus ***
+     Fsus2             C/E Esus4       E     Esus4 E
+--------------------------------|--------------------------------|
+-------1------------------------|------5---5-------5-------------|
+-------0---0-------0---0-----4--|--4---4---4---4---4-------------|
+-------3---3---3---3---2-----7--|--7---6---6---7---6---7/9-(9)\--|
+-------3-------3----------------|--------------------------------|
+--------------------------------|--------------------------------|
+      now,  some-  thing    ....
+
+
+
+    Bsus4          B  D                  Dsus2   F
+--------------------------------|----------------8--8--8--8---0--||
+-x-x--5--5---5--5--4//7---7-7---|-------7--5--x-10-10-10-10--10--||
+-x-x--4--4---4--6--4//7---7-7---|-------7--7--x-10-10-10-10--10--||
+-x-x----------------------7-7---|-------7--7--x------------------||
+--------------------------------|--------------------------------||
+--------------------------------|--------------------------------||
+    Now I  know           that         ....
+
+
+*** Chorus ***
+      D/F#     G         D/F#     G      D/F#   G      A5
+--------------------------------|--------------------------------|
+-------3---3---0---0------3-----|--0------3------0---------------|
+-------2---2---0---0------2-----|--0------2------0------2---2----|
+-------0---0---0---0------0-----|--0------0------0------2---2----|
+-------0---0--------------0-----|---------0-------------0---0----|
+-------2---2---3---3------2-----|--3------2------3---------------|
+       T   T              T               T
+ best             of             ...
+
+
+      D/F#     G           D/F#          A5
+--------------------------------|--------------------------------|
+-------3---3---0---0--------3---|--------------------------------|
+-------2---2---0---0--------2---|--------2----2--------------2---|
+-------0---0---0---0--------0---|--------2----2--------^^----2---|
+-------0---0----------------0---|-----^--0----0-----^^v------0---|
+-------2---2---3---3--------2---|----3-------------3-------------|
+       T   T                T
+ I__      know what it's worth.          ....
+
+
+      D/F#     G         D/F#     G      D/F#   G      A5
+--------------------------------|--------------------------------|
+-------3---3---0---0------3-----|--0------3------0---------------|
+-------2---2---0---0------2-----|--0------2------0------2---2----|
+-------0---0---0---0------0-----|--0------0------0------2---2----|
+-------0---0--------------0-----|---------0-------------0---0----|
+-------2---2---3---3------2-----|--3------2------3---------------|
+       T   T              T               T
+ best             ....
+						      \a little bit of
+
+     D/F#    G      N.C.    D5                       Csus2    A5
+----------------------------2---|--(2)------2---2----------------||
+-----3---3---0---0----------3---|--(3)------3---3------3---------||
+-----2---2---0---0----------2---|--(2)------2---2------0------2--||
+-----0---0---0---0----------0---|--(0)------0---0-------------2--||
+-----0---0----------0---3-------|-------3--------------3--0---0--||
+-----2---2---3---3--------------|--------------------------------||
+     T   T
+/heaven right  here on earth,_____          oo!        Woo!
+\   heaven ......*** 2nd time to Coda
+
+*** 3rd Verse ***
+        A/C#             G/A        D/F#    A     A/C#
+--------------------------------|--------------------------------|
+---------------------2---3------|----3------2-------------2------|
+------------------2------4------|----2------2----------------2---|
+--------------2----------5------|----4------2--------------------|
+--------//4---------------------|------------------//4-----------|
+--------------------------------|--------------------------------|
+      Well,there's a ....
+
+
+
+                         D7sus4             D/A             A5
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+---------2------------------5---|--5--5---------------------2----|
+-------------2--------------5---|--5--5----4--4---4---------2----|
+-----//4---------4---O------5---|--5--5----5--5---5---------0----|
+-------------------P------------|----------5--5---5--------------|
+        fallen angel, ....
+
+
+
+        A/C#             G/A        D/F#    A     A/C#
+--------------------------------|--------------------------------|
+--------------------2--3--------|----3------2-------------2------|
+------------------2----4--------|----2------2----------------2---|
+--------------2--------5--------|----4------2--------------------|
+--------//4---------------------|------------------//4-----------|
+--------------------------------|--------------------------------|
+         We  forget    where we      ....
+
+
+
+                         D7sus4                D/A
+--------------------------------|--------------------------------||
+--------------------------------|--------------------------------||
+---------2------------------5---|--5--5--------------------------||
+--------------2-------------5---|--5--5-------4---4--------------||
+-----//4----------4---O-----5---|--5--5-------5---5-----5/(10)---||
+--------------------P-----------|-------------5---5--------------||
+       I had a dream    it .....
+
+
+*** Pre-Chorus ***
+      Fsus2            C  Esus4        E       Esus4  E
+--------------------------------|--------------------------------|
+-------1--1----1----------------|------5---5---5------5----------|
+-------0--0----0---0---------4--|--4---4---4---4------4----------|
+-------3--3----3---3---2-----7--|--7---6---6---7------6--7/9~~~~~|
+-------3--3----3-----P----3-----|--------------------------------|
+--------------------------------|--------------------------------|
+       Something             reached  ....
+
+
+                                                       D.S. al Coda
+    Bsus4          B        D                     F(maj7)
+----------------------------5---|-(5)------------0--0--0---(-0)\\||
+------5--5---5--5--4-4//7---7---|-(7)-----------10-10-10---(10)\\||
+------4--4---4--6--4-4//7---7---|-(7)-----------10-10-10---(10)\\||
+----------------------------7---|-(7)-----------10-10-10---(10)\\||
+--------------------------------|--------------------------------||
+--------------------------------|--------------------------------||
+    Now I  know,            oh,   ....
+
+
+
+*** Coda ***        Csus2    A5
+--(2)------2---2----------------||
+--(3)------3---3------3---------||
+--(2)------2---2------0------2--||
+--(0)------0---0-------------2--||
+-------3--------------3--0---0--||
+--------------------------------||
+ ___________________ Yeah!
+
+
+
+*** Guitar Solo ***
+--------------------------------|------------------------------^^|
+-------^^-10--------12~~(12)\---|-----10------12~~~~----x--15^^--|
+----(9)-------9/11----------/9^^|-(9)----9/11--------------------|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+
+
+
+
+
+-----------------H--^|------P-H--P-P----P-P----P-----------------|
+-(15)--(15)~~~--7 10-|10(10)-7-10-7-0-10-7-0--7-0--^^-P----7---^^|
+---------------------|----------------------9-----9(9)-7---7--9--|
+---------------------|-----------------------------------9--7----|
+---------------------|-------------------------------------------|
+---------------------|-------------------------------------------|
+
+
+
+
+
+--------------------------------|--------------------------------|
+--------------P-----T-------T---|-----T-------T--P---------H-----|
+---(9)--12~~~---9--14(14)\\\12--|-(12)\\\9----12--9-------7-9----|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+
+
+
+
+      H   T     P  ^   P H
+-----7-10-12(12)-10(10)7----TP^^|P-H----T----P-^^--P-------------|
+----^^^-----------------10-20-10|-7-10-12(12)-10(10)7-^^----P-H^^|
+(9)-----------------------------|--------------------9---(9)-7-9-|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+
+
+
+
+
+--------------------------------|--------------------------------||
+---------H-^^----------T-P---T--|--------------------------------||
+-(9)~~--7-9------(9)---12-9--14-|-(14)~~~~~(14)\-----------------||
+--------------------------------|---------------\----------------||
+--------------------------------|----------------\---------------||
+--------------------------------|-----------------\--------------||
+
+
+
+
+(pick w/fingers)         G/A   D/A   G/A   D/A    G/A   D/A A          G/A
+------------------------|------------------------|------------------------|
+------------2---2---3---|-3-----3-----3-----3----|-3-----3--2----2------3-|
+------------2---2---4---|-4-----2-----4-----2----|-4-----2--2----2------4-|
+------------2---2---5---|-5-x-x-4--x--5-x-x-4-x/-|-5-x-x-4--2----2------5-|
+------------------------|------------------------|------------------------|
+------------------------|------------------------|------------------------|
+
+
+
+
+      D/A   G/A A  A7sus2                A        G/A   D/A   G/A   D/A
+------------------------|------------------------|------------------------|
+-3--3--3-----3--2-----0-|--(0)---------x-2--2--3-|-3-----3-----3-----3----|
+-4--4--2-----4--2-----0-|--(0)---------x-2--2--4-|-4-----2-----4-----2----|
+-5--5--4-----5--2-----2-|--(2)---------x-2--2--5-|-5-----4-----5-----4----|
+------------------------|----------------0--0--0-|-0--0--0--0--0--0--0--0-|
+------------------------|------------------------|------------------------|
+
+
+
+
+G/A   D/A A  Asus2   G/A  G/A   D/A  G/A A  A7sus2
+------------------------|------------------------|------------------------||
+-3-----3--2-----0-----3-|-3--3--3----3--2----0---|--(0)-------------------||
+-4-----2--2-----2-----4-|-4--4--2----4--2----0---|--(2)-------------------||
+-5-----4--2-----2-----5-|-5--5--4----5--2----2---|--(2)-------------------||
+-0--0--0--0--0--0--0--0-|-0-----0--0-------------|------------------------||
+------------------------|------------------------|------------------------||
+                                        Wo!_______________________
+
+
+*** 4th Verse *** (still pick with fingers)
+    A       G           D/F#      G     D/F#    G      D/F#  A
+--------------------------------|--------------------------------|
+----2---2---3---3--------3------|-3------3------3-------3----2---|
+----2---2---4---4--------2------|-4------2------4-------2----2---|
+--------2---5---5--------4------|-5------4------5-------4----2---|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+   Uh, you don't have       to   ....
+
+
+
+               G          D/F#         G   A          A7sus2
+--------------------------------|--------------------------------|
+-----2---------3---3---3---3----|------3---2------2-----0-----0--|
+-----2---------4---4---4---2----|------4---2------2-----0-----0--|
+-----2---------5---5---5---4----|------5---2------2-----2-----2--|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+    or hang around         ....
+
+
+
+
+    A       G           D/F#      G     D/F#    G      D/F#  A
+--------------------------------|--------------------------------|
+----2---2---3-3----------3------|-3---------3------3------3--2---|
+----2---2---4-4----------2------|-4---------2------4------2--2---|
+----2---2---5-5----------4------|-5---------4------5------4--2---|
+--------------------------------|--------------------------------|
+--------------------------------|--------------------------------|
+  Just tune in    to   what ....
+
+
+
+               G          D/F#         G   A    A7sus2
+--------------------------------|--------------------------------||
+-----2---------3---3---3---3----|------3---2------0--------------||
+-----2---------4---4---4---2----|------4---2------2--------------||
+-----2---------5---5---5---4----|------5---2------2--------------||
+--------------------------------|--------------------------------||
+--------------------------------|--------------------------------||
+     we   may  nev-er  be here ....
+
+
+*** Chorus *** (with pick)
+
+*** and finishes similar to intro ****
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/big_trouble.tab b/guitar/tabs/Van Halen/big_trouble.tab new file mode 100644 index 0000000..fd3c8c2 --- /dev/null +++ b/guitar/tabs/Van Halen/big_trouble.tab @@ -0,0 +1,181 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / big_trouble.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+BIG TROUBLE
+Van Halen,unreleased
+Studio Demo,1977
+tabbed by dsale@jax.jaxnet.com
+http://jax.jaxnet.com/~dsale
+
+
+
+Intro
+(fingerpicked,exept for last chord)
+                                                        "Ooh lala..."   
+-2h3-(0)-3h2p0----3------2h3p2p0----------------------------------------
+------------------3--------------------3h0------------------------------
+--------------------------------------------0---------------------------
+-2-------0---------------2-------------0----------4---------------------
+------------------3-------------------------------2---------------------
+------------------------------------------------------------------------
+                                                                        
+Riff 1
+(bass plays A during riff)                                       
+-3-3---2----------------------------------------------------------------
+-3-3---3--------------1h0-----------------------------------------------
+-2-2---2--------------------2--2----------------------------------------
+------------------------------------4--5h4------------------------------
+-------------0--0---------------------------5---2/3\2-------------------
+------------------------------------------------------------------------
+                                                                        
+
+Verses   "whos    at   the     ....
+-3----2-----------------------------------2-----------------------------
+-5-x--3--------------------------------5x-3-----------------------------
+-5-x--2--------------------------------5x-2-----------------------------
+-5----0---0---0---0-----------0-0-0-----------0-0-0------0-0-0-------0--
+-----------------------3(1/2)-------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+         your dead ....
+3-2-2-2------------------------3-2-2------------------------------------
+5-3-3-3------------------------3-3-3------------------------------------
+5-2-2-2------------------------2-2-2------------------------------------
+----------0---0---0----0---0--------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------2-2h3--3/5--------------------
+                                                                        
+
+"so dry your ...
+--------------------------------------3------3--------------------------
+--------------------------------------5------2--------------------------
+-----5--------------------------------5---x--3--------------------------
+-----5---x---7------------------------5---x-----------------------------
+-----3-------5-------5--5--5--5--5--------------------------------------
+--------------------------------------------------2222-3333-3/5-5-------
+                                                                        
+
+ One thousand times                      ....
+------------------------------------------------------------------------
+-----5--------3---------------------------------------------------------
+-----4--4-----4-------------------------------4------5------------------
+-----4--------4-------------------------------4------5----------------4-
+---------------------2-2-2-2-2--2-2-2--2---0--2--x---3-----3/5--3-2-3-2-
+------------------------------------------------------------------------
+                                                                        
+
+and now that funky fast riff that sounds like that whitesnake song.
+
+                                                                trem.
+                                                                dive
+------------------------------------------------------------------------
+--------------------------------------x\--------------------------------
+--------------------------------------x\--------------------------------
+--------2~~-----------2----x/---------x\-------------2~---5h0-----------
+---------------------------x/-----------------------------------5--\----
+-x--0-0-------x--0-0-------x/-----------------0-0-0---------------------
+                            *hit strings w/right
+                            hand,move left hand
+                            up
+
+                                                                        
+
+and thats it!
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/cabo_wabo.tab b/guitar/tabs/Van Halen/cabo_wabo.tab new file mode 100644 index 0000000..05911d1 --- /dev/null +++ b/guitar/tabs/Van Halen/cabo_wabo.tab @@ -0,0 +1,318 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / cabo_wabo.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+
+
+From Newhall@Juno.com Thu May 15 17:03:48 1997
+Date: Fri, 02 May 1997 12:10:43 -0500
+From: Jason Perez <Newhall@Juno.com>
+To: guitar@olga.net
+Subject: Cabo Wabo  Van Halen
+
+Van Halen
+CABO WABO from OU812
+Tabbed by Jason Perez
+
+With effects(reverb, chorus, flange, harmonizer, delay, distortion)
+INTRO
+:----------|--x-x-----------|----------------|--x-x-----------|
+:----------|--x-x-----------|2-2-3-----------|--x-x-----------|
+:----------|--x-x-----------|2-2-2-----------|--x-x-----------|
+:----------|2-x-x-----------|2-2-4-----------|2-x-x-----------|
+:------2H5-|2-x-x-------2H5-|0-0-0-------2H5-|2-x-x-------2H5-|
+:0-3H5-----|0-x-x-0-3H5-----|------0-3H5-----|0-x-x-0-3H5-----|
+
+                       repeat 3x       
+:-------------------|--x-x-----------||
+:2-2-3--------------|--x-x-----------||
+:2-2-2--------------|--x-x-----------||
+:2-2-4--------------|2-x-x-----------||
+:0-0-0---------10-7-|2-x-x-------2H5-||
+:------\7-10-7------|0-x-x-0-3H5-----||
+
+
+Last time
+:--x-x-----------|3-3-3-3-3-3-3-2------------||
+:--x-x-----------|3-3-3-3-3-3-3-3------------||
+:--x-x-----------|2-2-2-2-2-2-2-2------------||
+:2-x-x-------2-5-|0-0-0-0-0-0-0-0------------||
+:2-x-x-0-2-5-----|-----------------------2h5-||
+:0-x-x-----------|-----------------0-3h5-----||
+
+
+VERSE  Repeat 2.5x
+:--x-x-----------|----------------|--x-x-----------|-------------------||
+:--x-x-----------|2-2-3-----------|--x-x-----------|2-2-3--------------||
+:--x-x-----------|2-2-2-----------|--x-x-----------|2-2-2--------------||
+:2-x-x-----------|2-2-4-----------|2-x-x-----------|2-2-4--------------||
+:2-x-x-------2H5-|0-0-0-------2H5-|2-x-x-------2H5-|0-0-0---------10-7-||
+:0-x-x-0-3H5-----|------0-3H5-----|0-x-x-0-3H5-----|------\7-10-7------||
+
+
+
+
+:--x-x-----------|----------------|
+:--x-x-----------|----3---2-2---4-|
+:--x-x-----------|2---2---2-2---4-|
+:2-x-x-----------|2---0---2-2---4-|
+:2-x-x-------2h5-|0-------0-0---2-|
+:0-x-x-0-3h5-----|--3---3-----3---|
+
+
+PRE-CHORUS
+:---------------|---------------|---------------|----------------------|
+:4--------------|5--------------|5--------------|4-------------------4-|
+:4--------------|4--------------|4--------------|4-------------------4-|
+:4--------------|2--------------|2--------------|4-----1-----------2-4-|
+:2--2-2-2-2-2-2-|0--0-0-0-0-0-0-|---------------|2-0h2-------2-0h4---2-|
+:---------------|---------------|4--4-4-4-4-4-4-|--------0H4-----------|
+
+
+
+:---------------|---------------|---------------|------------------------||
+:4--------------|5--------------|5--------------|14H16-16-16-14H16-16-16-||
+:4--------------|4--------------|4--------------|14H16-16-16-14H16-16-16-||
+:4--------------|2--------------|2--------------|14H16-16-16-14H16-16-16-||
+:2--2-2-2-2-2-2-|0--0-0-0-0-0-0-|---------------|------------------------||
+:---------------|---------------|4--4-4-4-4-4-4-|------------------------||
+
+
+
+CHORUS
+:---------------|--------------|-------5-5--0|(0)---------------------|
+:9-9-9-9--7-7---|--------------|9-9-9--7-7--0|(0)---------------------|
+:9-9-9-9--7-7--6|-(6)--5-5-5-4-|9-9-9--7-7--2|(2)---------------------|
+:9-9-9-9--7-7--7|-(7)--5-5-5-5-|9-9-9--7-7--2|(2)---------------------|
+:7-7-7---------7|-(7)----------|7-7-7-------0|(0)---------------------|
+:---------------|--------------|-------------|----0-3-0-4-5-6-7-3-2-0-|
+
+						P.M............|
+
+:---------------|--------------|--------5-5--0|(0)--------------------|
+:9-9-9-9--7-7---|--------------|9-10-9--7-7--0|(0)--------------------|
+:9-9-9-9--7-7--6|-(6)--5-5-5-4-|9-9-9---7-7--2|(2)--------------------|
+:9-9-9-9--7-7--7|-(7)--5-5-5-5-|9-9-9---7-7--2|(2)--------------------|
+:7-7-7---------7|-(7)----------|7-7-7--------0|(0)----------------2H5-|
+:---------------|--------------|--------------|----0-3-0-4--0-3H5-----|
+
+SOLO
+:--------7-----7-|--------5-----5-|--------7-----7-|3-----5-----5-|
+:------7---7---7-|------5---5---5-|------7---7---7-|--3-----5---5-|
+:----9-------9-9-|----7-------7-7-|----9-------9-9-|----5-----7-7-|
+:--9-----------9-|--7-----------7-|--9-----------9-|------------7-|
+:7-------------7-|5-------------5-|7-------------7-|------------5-|
+:----------------|----------------|----------------|--------------|
+
+
+:--------7-----7-|--------5-----5-|10-------12-------12-|
+:------7---7---7-|------5---5---5-|---10-------12----12-|
+:----9-------9-9-|----7-------7-7-|------12-------14-14-|
+:--9-----------9-|--7-----------7-|------------------14-|
+:7-------------7-|5-------------5-|------------------12-|
+:----------------|----------------|---------------------|
+
+
+:--------7-----7-|--------5-----5-|--------7-----7-|3-----5-----5-|
+:------7---7---7-|------5---5---5-|------7---7---7-|--3-----5---5-|
+:----9-------9-9-|----7-------7-7-|----9-------9-9-|----5-----7-7-|
+:--9-----------9-|--7-----------7-|--9-----------9-|------------7-|
+:7-------------7-|5-------------5-|7-------------7-|------------5-|
+:----------------|----------------|----------------|--------------|
+
+
+:--------7-----7-|--------5-----5-|10---------12----------8---------10-|
+:------7---7---7-|------5---5---5-|---10---------12---------8----------|
+:----9-------9-9-|----7-------7-7-|------12---------14--------10-------|
+:--9-----------9-|--7-----------7-|---------12---------14--------10----|
+:7-------------7-|5-------------5-|------------------------------------|
+:----------------|----------------|------------------------------------|
+
+
+:---------5-------5-------7---|--8-----------------|
+:10---------5-------7-------7-|----5-1-----3-----3-|
+:---12--------5-------7-------|7-------2-----4-----|
+:------12-------5-------7-----|----------3-----5---|
+:-----------------------------|--------------------|
+:-----------------------------|--------------------|
+
+AFTER THE SOLO
+:3-3-3-3--3-3-3-3--3-3-3-3|(3)-3-3-3-3-2--|3-3-3-3--3-3-3-3--3-3-3-3|
+:3-3-3-3--3-3-3-3--3-3-3-3|(3)-3-3-3-3-3--|3-3-3-3--3-3-3-3--3-3-3-3|
+:0-0-0-0--0-0-0-0--0-0-0-0|(0)-0-0-0-0-2--|0-0-0-0--0-0-0-0--0-0-0-0|
+:-------------------------|------------0--|------0--------0--------0|
+:3-3-3-2--3-3-3-2--3-3-3-3|(3)-3-3-3-2----|3-3-3----3-3-3----3-3-3--|
+:-------------------------|---------------|------3--------3--------3|
+
+
+:(3)-3-----0--|3-3-3-3--3-3-3-3--3-3-3-3|(3)--2-2--2-2--2-|
+:(3)-3-3-3-0--|3-3-3-3--3-3-3-3--3-3-3-3|(3)--3-3--3-3--3-|
+:(0)-0-2-2-2--|0-0-0-0--0-0-0-0--0-0-0-0|(0)--2-2--2-2--2-|
+:(0)-0-0-0-2--|-------------------------|-----0-0--0-0--0-|
+:----------0--|3-3-3-2--3-3-3-2--3-3-3-2|(2)--------------|
+:(3)-3-3-3----|-------------------------|-----------------|
+
+
+:------------------------------------|--------------5|(5)--x-----------|
+:------------------------------------|---------8-12-7|(7)--x-----------|
+:------------------------------------|--7----9------7|(7)--x-----------|
+:----5------7-----5------7---7-10----|9---10--------7|(7)--x-----------|
+:--7------9-----7------9---9------10-|--------------5|(5)--x-------2H5-|
+:8-----10-----8-----10---------------|---------------|-----x-0-3H5-----|
+P.M..................................|
+
+
+
+THE SOLO
+                                                -1.5  -1    -1
+   FULL   W/BAR^^^^^^^^^  1.5   FULL   BAR DIPS   \/  \/    \/ FULL
+:--14/|(14)--(14)---|(14)-(14)/-----|----------------------------|
+:-----|-------------|---------------|----------------------slide-|
+:-----|-------------|------------11/|(11)--(11)\--7H9(9)P7H9-\-7/|
+:-----|-------------|---------------|----------------------------|
+:-----|-------------|---------------|----------------------------|
+:-----|-------------|---------------|----------------------------|
+
+
+                       H                   P.H.
+     W\BAR  -4   -3  -3.5                   FULL ^^^^^^
+:------------------|---------------------------|------------|
+:------------------|-----------------------10/-|--(10)\-X-X-|
+:(7)-(7)\-P0\----/-|----------------------X----|------------|
+:------------------|x-7/GRADUAL-ASCENT---X-RAKE|------------|
+:------------------|------W/BAR---------X------|------------|
+:------------------|---------------------------|------------|
+
+
+    -1
+    \/ 2         1.5       1.5 1.5 1.5     sl  sl     1.5 sl      FULL
+:------------15-----15----|------------15-----|-------19/--\12-12-15/|
+:17-20/--P17----17/----15-|17/-17/-17/----17\-|/17-17----------------|
+:-------------------------|-------------------|----------------------|
+:-------------------------|-------------------|----------------------|
+:-------------------------|-------------------|----------------------|
+:-------------------------|-------------------|----------------------|
+
+
+                       -1   -1     -1     P.H.  -1.5 -1.5
+                  FULL \/   \/     \/     1/2    \/   \/
+:(15)-12--------------|---------------------|------------------|
+:--------12-----------|-------------------7/|(7)-(7)--(7)-(7)\-|
+:-----------15-14-12/-|9-P7H-9-P7H-9-P7H9---|------------------|
+:---------------------|---------------------|------------------|
+:---------------------|---------------------|------------------|
+:---------------------|---------------------|------------------|
+
+          TREM.............................................
+sl FULL   PICK   sl FULL   sl         sl FULL sl        sl
+:-------12-12--12/22/-|-(22)\-12--(12)/22/-(22)\12--(12)/-|
+:/15/-----------------|-----------------------------------|
+:---------------------|-----------------------------------|
+:---------------------|-----------------------------------|
+:---------------------|-----------------------------------|
+:---------------------|-----------------------------------|
+
+.....................|
+ sl FULL sl              sl FULL
+:/22/-(22)\12-14-15-17-19/22/|
+:----------------------------|
+:----------------------------|
+:----------------------------|
+:----------------------------|
+:----------------------------|
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/cant_stop_loving_you.tab b/guitar/tabs/Van Halen/cant_stop_loving_you.tab new file mode 100644 index 0000000..f6fccdd --- /dev/null +++ b/guitar/tabs/Van Halen/cant_stop_loving_you.tab @@ -0,0 +1,319 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / cant_stop_loving_you.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+#
+
+From: BROCKMAN@udavxb.oca.udayton.edu
+
+Can't Stop Lovin' You
+Van Halen (Balance)
+
+Transcribed by: Bob Brockman (brockman@udavxb.oca.udayton.edu)
+
+------------------------------------------------------------------------
+Notes:
+
+   This song is actually in A, but I first scoped in out in G and it's
+   (I think) easier to play that way (for me, anyhow) with more open
+   strings.  Eddie obviously doesn't share my limitations...
+
+   There are several one-off sections in this song, most of which lead
+   into the chorus or solo sections; I've isolated them and labeled them
+   "pre-chorus" or whatever.
+------------------------------------------------------------------------
+
+Intro:          Gsus4   G   Gsus2   G  (all strummed)
+
+
+Reasonable facsimile of next intro part:
+(Palm muting on beats in between, I think)
+
+    Gsus4  G    Gsus2  G     Em+C   Em  Esus4   Em          ------ NOTE ------
+e|-------------------------|----------------------------|   This bit and many
+B|--h1-----0-----0-----0---|--1-----0-----0-----0-------|   variations of it
+G|---0-----0-----2-----0---|--0-----0-----2-----0---2/4-|   is used throughout
+D|---0-----0-----0-----0---|--2-----2-----2-----2-------|   the song, whenever
+A|-------------------------|--------2-----2-------------|   G-Em-C-D appears.
+E|---3--------3-----3------|--0-----------0-------------|
+
+
+     C        D  D6 D        Gsus4  (etc)
+e|-------------------------|---------
+B|---1--1--0--3--0--3------|---1-----
+G|---0--0-----2--2--2------|---0-----
+D|---2--2-----0--0--0------|---0-----
+A|---3--3------------------|---------
+E|-------------------------|---3-----
+
+
+Verse 1:
+               G                                  Em
+     there's a time and place ...
+            C                 D
+     we can push ...
+                  G                           Em
+     but nothin's gonna come, ...
+              C                D
+     and if i asked ...
+
+Pre-chorus 1:
+                         Em
+     oh could you ...
+             C                          Am
+     i wanna hold you and say...
+                 F                              D
+     tell me you won't go, ...
+
+Chorus:
+                  G                                Em
+     i can't stop lovin' you, ....
+                 C               D               G
+     you know my heart is true, oh....
+
+
+Fill between chorus and verse (well, sorta):
+
+     e|---3--5--2------------------|
+     B|---3--------3--1--0---------|
+     G|---2-----2-----2-----2--0---|
+     D|---0-----------0------------|
+     A|----------------------------|
+     E|----------------------------|
+
+
+Verse 2:
+             G                                                Em
+     you can change your friends, ...
+            C                    D          G
+     we can change the ...
+                  Em
+     oh no, but i ....
+                   C                D
+     that when you look ...
+
+Pre-chorus 2:
+                      Am
+     oh baby, i'll ...
+     Bb           Gm
+     hold on, i'm ....
+                Eb                                D
+     baby, just come on, ....
+
+Chorus (same as Chorus 1)
+
+     
+Bridge:
+                Am                    D       Bm    G
+     oh, i'm so twisted ....
+         Am                            D
+     was how hard we ....
+
+Interlude and Solo:
+
+        Bb  C
+        C - C - Bb  (3x)
+        C - C - G
+
+Pre-chorus 3:
+     G                     Em
+     and when it's over, ....
+              C               D            G
+     and true love will nev....
+
+Chorus 3:
+                      G                                Em
+     and i can't stop lovin' ...
+                 C              D                G
+     you know my heart is true, ....
+                       Em
+     and i know what ...
+                        C             D                G          Em C D
+     hey, ray, what you said ...
+                          Gsus4  G  Gsus2  G
+     oh, oh, i can...
+
+
+From: KMH001@snoopy.bridgewater.edu (KEVIN MICHAEL HILL)
+
+This is the first part of "Can't Stop Loving You" by Van Halen from 
+what I can figure out.  It isn't much but when it's repeated 
+with a little improvising it covers most of the song.  Enjoy.
+
+Van Halen
+"Can't Stop Loving You"
+off of the album: Balance
+Transcribed by Kevin Hill (kmh001@snoopy.bridgewater.edu)
+
+Intro...
+
+e|----------------------------------------|
+B|-3-3-3-----2----2--------0---------2----|
+G|-2-2-2-----2----2--------2---------2----|
+D|-2-2-2-----2----2--------2---------2----|
+A|-0-0-0-----0----0--------0---------0----|
+E|----------------------------------------|
+
+"Hey!"
+
+ A                    F#                   D
+e|--------------------|--------------------|--------------------|
+B|-3--2----0-0----2---|-3--2----0-0----2---|-3--------3--3--3---|
+G|-2--2----2-2----2---|-2--2----2-2----2---|-2--------2--2--2---|
+D|-2--2----2-2----2---|-2--2----2-2----2---|-0--0--0--0--0--0---|
+A|--------------------|--------------------|--------------------|
+E|--------------------|--------------------|--------------------|
+
+ E                    A
+e|--------------------|--------------------|                      
+B|--------------------|-3--2--0----2-2-2---|         
+G|-1---------1-1-1----|-2--2--2----2-2-2---| "There's a time..."
+D|-2---------2-2-2----|-2--2--2----2-2-2---|                      
+A|-2---------2-2-2----|-0--0--0----0-0-0---|                        
+E|-0---------0-0-0----|--------------------|                      
+
+
+Comments and suggestions are always welcome...
+
+
+
+Date: Thu, 30 Jan 1997 10:26:25 -0800 (PST)
+From: Gerald Brisson <geraldb@hotmail.com>
+Subject: Can't stop lovin' you-Van Halen-CD,Balance
+
+Here is a cool Van Halen song.  All I know is the main
+     riff and the solo which is surprisingly easy for an 
+     Eddie solo.  Anyways here is Cant stop loving you.
+     Verse:
+     ---0------------------|-----------------------|
+     ---3---3---2---0---2--|---10---10^---9--10--10|
+     ---2---2---2---2---2--|-----------------------|
+     ---2---2---2---2---2--|-----------------------|
+     ---0------------------|-----------------------|
+     ----------------------|-----------------------|
+     Also on the verse a second guitarist strums the second fret
+     on the top E string(thickest), or you can use your thumb
+     as Eddie does.
+
+     Solo:
+     ------------------------------------------|----------
+     ---8---7\5----5---5\8----8/10---10\8\7\5--|----------
+     ------------------------------------------|----------
+     ------------------------------------------|----------
+     ------------------------------------------|----------
+     ------------------------------------------|----------
+
+     ---------------------------|------------------------|
+     ---------------------------|------------------------|
+     -------------------5\7\9---|-----4------------------|
+     -----------5\7\9-----------|--4----5------2-------2-|
+     ---5\7\9-------------------|--5------5----2-----2---|
+     ---------------------------|--5-----------3---3-----|
+
+     --0----|---------------------------------|-----------
+     --0----|---------------------------------|-----------
+     --2----|---7/9----7---6------------------|-----------
+     --2----|------------------7--------------|-----------
+     --0----|----------------------7---5---4--|-----------
+     -------|---------------------------------|-----------
+
+     This is almost the whole solo.  I changed it to Eddie's
+     live version.  So it is a bit easier than the Cd.
+     It'll do anyways.  Good Luck
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/cathedral.tab b/guitar/tabs/Van Halen/cathedral.tab new file mode 100644 index 0000000..5a378f6 --- /dev/null +++ b/guitar/tabs/Van Halen/cathedral.tab @@ -0,0 +1,205 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / cathedral.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Received: from animal-farm.nevada.edu by redrock.nevada.edu (5.65c/M1.4)
+	with SMTP id <AA15440>; Thu, 18 Nov 1993 04:45:37 -0800
+Received: from mailgate.ericsson.se by animal-farm.nevada.edu id <AA13268@animal-farm.nevada.edu>; Thu, 18 Nov 1993 04:45:30 -0800
+Received: from etlxd20 (etlxd20.ericsson.se) by mailgate.ericsson.se (4.1/SMI-4.1-MAILGATE1.14)
+	id AA18336; Thu, 18 Nov 93 13:45:23 +0100
+Received: from etlxd42k (etlxd42k.ericsson.se) by etlxd20 (4.1/SMI-4.1-LME1.6)
+	id AA00406; Thu, 18 Nov 93 12:45:22 GMT
+From: etlnbb@etlxd20.ericsson.se ( neil bergin xd/gk)
+Received: by etlxd42k (4.1/client-1.3)
+	id AA02276; Thu, 18 Nov 93 12:45:22 GMT
+Date: Thu, 18 Nov 93 12:45:22 GMT
+Message-Id: <9311181245.AA02276@etlxd42k>
+To: jamesb@animal-farm.nevada.edu
+Subject: TAB: Cathedral - Van Halen
+
+Posted by: 	evh5150@camelot.bradley.edu (Andrew Eckhart)
+To:		alt.guitar.tab
+Date: 23 Oct 1993 18:20:57 -0500
+
+I pulled this off of here last year:
+
+
+
+  Here follows the tablature to Cathedral, from the Diver Down album.  The
+piece is played entirely using the left hand to hammer notes, with the right
+hand controlling the volume knob to make the notes fade in, giving them
+a cello-like sound.  Essential to the piece is the use of a digital-delay unit.
+
+Technique and Timing:
+---------------------
+
+Right-hand - turn the volume up after the left-hand has hammered the note,
+so there is no 'attack', and the note just 'swells' in volume. IT takes
+a fair amount of practice to get it right.
+
+Left-hand - apart from the chords at the beginning, which can be strummed
+with the RH before fading them in, every note in this piece is hammered-on.
+
+Delay unit - try around .42 - .44 seconds. Hopefully the following will 
+explain how get your timing right with the delay...
+
+If you play the following notes -        G   B   D   B   G   
+Have the delay repeat the notes like -         G   B   D   B   G  
+So the net result would be:              G   B G D B B D G B   G
+                timing  ----->           | | | | | | | | | | | |
+
+
+Actually, if you play the above with a fairly fast delay, you get a cool
+Albert Lee countryish-lick :-)
+
+BTW, it helps to tie a sock just over the nut, to help prevent un-wanted
+string-buzz :-)
+
+Please excuse any mistakes - I no longer have my ME-5, which means no delay :-(
+
+
+CATHEDRAL - Edward Van Halen
+----------------------------
+
+   C  F  Em C  B
+                                  [                    Part 1
+E -0--1--0--0------0--3--0--0-----------------------------------------------
+B -1--1--0--1------1--1--0--1---------4---------8----------12------------16-
+G -0--2--0--0--4---0--2--0--0--4-----4-4-------8-8--------12-12---------16--
+D -2--3--2--2--4---2--3--2--2--4----4---4-----8---8------12---12-------16---
+A -3-----2--3--2---3-----2--3--2---2-----2-4-6-----6-8-10-------10-12-14----
+E --------------------------------------------------------------------------
+
+   
+                    
+     ]                                      |<- I think this is wrong ->| 
+E ----------------------------------------------------------------------
+B ------------12-------7------10-------5--------------------------------
+G 16---------12-12----7-7----10-10----5-5----7--4-----------------------
+D -16-------12---12--7---7--10---10--5---5--------5-3-5-3---------------
+A --14-12-10--------5------8--------3-----3---------------5-3-2---------
+E ----------------------------------------------------------------------
+
+  Then, repeat Part 1 (the section within the []s) followed by...
+  
+
+E -----------------------------------------------------------------------
+B ----17-------19-------21--21--21--21-----------------------------------
+G ---17-17----19-19----21--21--21--21------------------------------------
+D --17---17--19---19--21--21--21--21-------------------------------------
+A -15------17-------19---------------19-21-17-19-15-17-14-15-12-14-10-12-
+E -----------------------------------------------------------------------
+
+                       [ Part 2 (repeat a few x)     ]
+E ---------------------+-----------------------------+----------------------
+B ---------------------|-----------------------------|----------------------
+G ---------------------|-------------7---------------|----------------------
+D ---------------------|---------------7-5-4---------|----------------------
+A 9-10-7-9-5-7-3-5-2-3-|-------5-7-5---------5-7-5-7-|-5-7-5-7-5-7-5-7-7~~--
+E ---------------------+-3-2-3-----------------------+----------------------
+
+
+
+
+-- 
+evh5150@camelot.bradley.edu 
+
+What is understood need not be discussed.  - Loren Adams
+                        
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/dance_the_night_away.tab b/guitar/tabs/Van Halen/dance_the_night_away.tab new file mode 100644 index 0000000..7ce9c03 --- /dev/null +++ b/guitar/tabs/Van Halen/dance_the_night_away.tab @@ -0,0 +1,170 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / dance_the_night_away.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Received: from animal-farm.nevada.edu by redrock.nevada.edu (5.65c/M1.4)
+	with SMTP id <AA28214>; Tue, 16 Mar 1993 10:03:29 -0800
+Received: from jaameri.gsfc.nasa.gov by animal-farm.nevada.edu id <AA18163@animal-farm.nevada.edu>; Tue, 16 Mar 1993 10:03:26 -0800
+Received: Tue, 16 Mar 93 13:03:23 EST by jaameri.gsfc.nasa.gov (4.1/1.5)
+From: patrick m. ryan <pat@jaameri.gsfc.nasa.gov>
+Message-Id: <9303161803.AA00559@jaameri.gsfc.nasa.gov>
+Subject: Dance the Night Away, VH
+To: jamesb@animal-farm.nevada.edu (James Bender)
+Date: Tue, 16 Mar 1993 13:03:22 -0500 (EST)
+Reply-To: pat@jaameri.gsfc.nasa.gov (patrick m. ryan)
+Organization: Oceans & Ice Branch, Code 971, NASA/GSFC/Hughes STX
+X-Mailer: ELM [version 2.4 PL21]
+Mime-Version: 1.0
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Length: 2175      
+
+
+Dance the Night Away
+	Van Halen, from _Van_Halen_II_
+
+transcribed by pat@jaameri.gsfc.nasa.gov (patrick m. ryan)
+
+	As with just about all VH songs, tune down 1/2 step to play the
+song in the original key.  The underscore '_' means "slide".
+
+[here's the signature riff for the song]
+
+-----------------------------------------------------------
+----9-----9-10--9--7-7__5-5----9-----9-10--5---5_7---------
+----9-----9--9--9--8-8__6-6----9-----9--9--6-6--_8---------
+----9--9--9--9--9--9-9__7-7----9--9--9--9--7----_9---------
+-7---------------------------------------------------------
+-----------------------------------------------------------
+
+[this riff is ad-libbed through most of the song.]
+
+
+Have you ....
+.
+
+    Ooh, baby....
+ C#m C#m  E     A
+--4---4------------------------
+--5---5---9-----5--------------
+--6---6---9-----6--------------
+--6---6---9-----7--------------
+--4---4---7-----7--------------
+----------------5--------------
+
+Won'tcha turn ....
+         F#
+--------------------------------0-------
+---------2------------------------4-----
+---------3--------------------------4---
+---------4----------------------------2-
+---------4------------------------------
+---------2------------------------------
+
+[solo]
+
+
+Dance the night ...
+Dance, dance....
+(repeat and fade)
+
+--
+"I have a cunning plan." -- Baldrick
+                                                             patrick m. ryan
+     nasa / goddard space flight center / oceans and ice branch / hughes stx
+                     pat@jaameri.gsfc.nasa.gov / zmpmr@charney.gsfc.nasa.gov
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/dancethenightaway.prj b/guitar/tabs/Van Halen/dancethenightaway.prj new file mode 100644 index 0000000..d92c505 --- /dev/null +++ b/guitar/tabs/Van Halen/dancethenightaway.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=dancethenightaway.tab +TYPES=(0,8)(1,8)(2,8)(3,8)(4,8)(5,8)(6,8)(7,8)(8,8)(9,8)(10,8)(11,8)(12,8)(13,8)(14,8)(15,8)(16,8)(17,8)(18,8)(19,8)(20,8)(21,8)(22,8)(23,8)(24,8)(25,8)(26,8) diff --git a/guitar/tabs/Van Halen/dancethenightaway.tab b/guitar/tabs/Van Halen/dancethenightaway.tab new file mode 100644 index 0000000..bb5e9e4 --- /dev/null +++ b/guitar/tabs/Van Halen/dancethenightaway.tab @@ -0,0 +1,10 @@ +%TabMaster v2.00r% + + +E|---------------------------------------4-4-------0------- +B|---9---9-10-9-7-7-5-5-9---9-10-5---5-7-5-5-9-5-2---4----- +G|---9---9----9-8-8-6-6-9---9----6-6---8-6-6-9-6-3-----4--- +D|---9-9-9----9-9-9-7-7-9-9-9----7-----9-6-6-9-7-4-------2- +A|-7-------------------------------------4-4-7-7-4--------- +E|---------------------------------------------5-2--------- + diff --git a/guitar/tabs/Van Halen/dancin_in_the_street.tab b/guitar/tabs/Van Halen/dancin_in_the_street.tab new file mode 100644 index 0000000..a61f24e --- /dev/null +++ b/guitar/tabs/Van Halen/dancin_in_the_street.tab @@ -0,0 +1,121 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / dancin_in_the_street.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Subject: More V.H. licks Atomic Punk/Dancin in Streets
+From: edward@pluto.njcc.com (Edward Sulikoswki)
+Date: Sun, 28 May 1995 03:06:23 -0400
+
+
+Dancin in the Street's[ partial] echo set for like  1/2 sec feedback on 1/2
+echo vol less than 3/4.       [also here  < bend the shit outta it]
+    slightly muted  < move a.h. towards neck from bridge      art.harm
+e------------------------------------------------------------------------                                                             ^
+b------------------------------------------------------------------------
+g              7                5            7          5   ^ -----------
+d            7                5            7          5     5  < < < <
+a          5                5            5          5 --------------------
+e 0sl.12-----------------------------------------------------------------
+
+e------------------------------------------------------------------------
+b-----------------------------------------------------------^------------
+g         5             3                5               3  3  < < < <
+d       5             3                5               3 ----------------
+a     3             3                3               3 ------------------
+e------------------------------------------------------------------------
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/dirty_movies.tab b/guitar/tabs/Van Halen/dirty_movies.tab new file mode 100644 index 0000000..59b6bce --- /dev/null +++ b/guitar/tabs/Van Halen/dirty_movies.tab @@ -0,0 +1,342 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / dirty_movies.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 11 Dec 2001 17:00:22 -0500 (EST)
+From: Aaron Lee Goldman <agoldman@wam.umd.edu>
+Subject: v/van_halen/dirty_movies.tab
+
+"Dirty Movies"
+By Van Halen (from Fair Warning)
+Tabbed by Aaron Goldman
+aaronlg@hotmail.com
+
+I noticed there was no tab to be found for this song, and since it's one
+of my favorite VH album tracks, I decided to figure it out. As always,
+this is by my own ears, so its not gonna be perfect. Note that the song is
+in drop D, and then on top of that it's tuned down half a step. There are
+two guitars in this song, referred to throughout as rhythm and lead.
+
+INTRO: its just bass and drums at first, and then Eddie start drumming a
+bunch of random notes up and down the fretboard (too hard to transcribe,
+and its just random noise anyway). This part is easier to simulate than
+you might think. After that subsides, the lead guitar plays this:
+
+E|---------------------------------------------------------
+B|-------------------------------------10---10---10b-10----
+G|-7\6~-/7-6-7-/9~-6-7-6----------7/9-----9----9--------9--
+D|-----------------------7-5-5br---------------------------
+A|---------------------------------------------------------
+D|---------------------------------------------------------
+The next two lines are played together. They aren't precisely aligned in
+the tab. The top guitar is rhythm, the bottom lead.
+E|--------------------------------------------
+B|--------------------------------------------
+G|--------------------------------------------
+D|--------------------------------------------
+A|------------------------------3-2-1-0-------
+D|--------------------------------------3-2-1-
+
+E|----------------------------------------19b-
+B|-14-14-14-15-15-16-16-17-17-18-18-19-19-----
+G|--------------------------------------------
+D|--------------------------------------------
+A|--------------------------------------------
+D|--------------------------------------------
+
+CHORUS RIFF:
+
+The following rhythm guitar part is reused several times later on.
+Occasionally, a few of the notes on the low D-string are replaced with
+a series of scraping noises, produced with the picking hand. I don't know
+how to explain it, but Eddie does the same thing on "Unchained" and the
+beginning of "And the Cradle Will Rock."
+
+Rhythm: (x2)
+E|-------------------------------------------------------------------
+B|-------------------------------------------------------------------
+G|-----------------------------------5------5-5/7--------------------
+D|---7------7---------5-----5--------3------3-3/5--------------------
+A|---5------5-0-2p0---3-----3--------------------------3-2-1-0-------
+D|-0----0-0---------3---0-3----0-2-3----0-3--------0-5---------3-2-1-
+
+Lead: (x2)
+E|-14~-------14~-------14h15-14-14p12-------12~-15-----12---------
+B|-----15--------15-------------------13-----------15-----13------
+G|--------14--------14-------------------12------------------12\--
+D|----------------------------------------------------------------
+A|----------------------------------------------------------------
+D|----------------------------------------------------------------
+
+E|-----------------------------------------------------------------/x-
+B|-13-------13~-------13-13/15~-------/15--17b-17b-17b-17b-17b-17b----
+G|----14-----------14-----------16------------------------------------
+D|-------15-----15-----------------17---------------------------------
+A|--------------------------------------------------------------------
+E|--------------------------------------------------------------------
+
+VERSE: (Rhythm Guitar only)
+
+E|-----------------------------------------------
+B|------------------------------------6-------8\-
+G|----------------------------------5-------7----
+D|----------------3------------x-/3-----3/5------
+A|-2br-0-3--2~-3----5--2br-0-3-------------------
+D|-----------------------------------------------
+
+E|---------------------------------------
+B|---------------------------------------
+G|---------------------------------------
+D|----------------3----------------------
+A|-2br-0-3--2~-3----5--2br-0-3--3-2-0----
+D|------------------------------------3~-
+
+PRECHORUS PART 1: ("her movies get down," etc.)
+
+Rhythm:
+E|-------------------------------------------------
+B|-------------------------------------------------
+G|-------------------------------------------------
+D|-x-10-10/12-x-8-x-8-x-8--x-10-10/12-x-8-x-8-x-8--
+A|-x-10-10/12-x-8-x-8-x-8--x-10-10/12-x-8-x-8-x-8--
+D|-x-10-10/12-x-8-x-8-x-8--x-10-10/12-x-8-x-8-x-8--
+
+Lead:
+E|-----------------------------------
+B|----------------10-----------------
+G|-----9-9-9/10------12-10-12-9br----
+D|-/12----------------------------12-
+A|-----------------------------------
+D|-----------------------------------
+
+PRECHORUS PART 2: ("they won't believe it," etc.)
+
+Rhythm:
+E|-------------------------------------------
+B|-------------------------------------------
+G|-------------------------------------------
+D|-x-7-7/8-x-7-x-8-x-5--x-7-7/8-x-7-x-8-x-5--
+A|-x-7-7/8-x-7-x-8-x-5--x-7-7/8-x-7-x-8-x-5--
+D|-x-7-7/8-x-7-x-8-x-5--x-7-7/8-x-7-x-8-x-5--
+
+Lead:
+E|------------------------------------
+B|------------------------------------
+G|-2-2/3--2-2-2/3----2-2/3--2-2-2/3---
+D|----------------5-----------------5-
+A|------------------------------------
+D|------------------------------------
+
+PRECHORUS PART 3: (Rhythm Guitar only; "come see baby now")
+
+E|----------------------------------------------
+B|----------------------------------------------
+G|-2-3-3--2-3-5--2-3-/5\4\2---------------------
+D|----------------------------------------------
+A|--------------------------------3-2-1-0-------
+D|----------------------------------------3-2-1-
+
+CHORUS #1: play the chorus rhythm guitar from earlier, plus the following
+lead guitar part twice (this part basically just  doubles the root notes
+of the chords an octave higher):
+
+E|-------------------------
+B|--------------/6~~--/8~~-
+G|--/7~~--/5~~-------------
+D|-------------------------
+A|-------------------------
+D|-------------------------
+
+VERSE #2: play the verse riff as before
+PRECHORUS #2: play the first two prechoruses and then:
+
+E|----------------------------
+B|----------------------------
+G|-2-3-3--2-3-5--2-3-/5\4\2---
+D|----------------------------
+A|----------------------------
+D|----------------------------
+
+INTERLUDE #1:
+
+E|----------------------------------------------------
+B|-----3-3-----5---------------------3-3----------3-3-
+G|-----2-2-----4---------------------2-2----------2-2-
+D|-x\--0-0-x---2-x-------------------0-0----------0-0-
+A|-x\--0-0-x---2-x-2-0--0-2-0--0-2-2-0-0--0-2-2-0-0-0-
+D|-----0-0---0-2-x-2-0--0-2-0--0-2-2-0-0--0-2-2-------
+
+E|------------------------------------------------10--9-------------
+B|---------------------------------------------10-------10----------
+G|----7---7------9-------7---------7---7----/9-------------9~-b--r--
+D|-/7---7---7-/9---9-------7----/7---7------------------------------
+A|-------------------9-7-----7~----------7~-------------------------
+D|------------------------------------------------------------------
+
+INTERLUDE #2: neither guitar plays anything for a while, and then the
+rhythm guitar leads into the second chorus with:
+
+E|---------------
+B|---------------
+G|---------------
+D|---------------
+A|-3-2-1-0-------
+D|---------3-2-1-
+
+CHORUS #2: play the chorus rhythm guitar (without lead)
+PRECHORUS #3: play the second and third prechorus segments
+CHORUS #3: 
+
+Rhythm:
+E|-------------------------------------------------------------------
+B|-------------------------------------------------------------------
+G|-----------------------------------5------5-5/7--------------------
+D|---7------7---------5-----5--------3------3-3/5--------------------
+A|---5------5-0-2p0---3-----3--------------------------3-2-1-0-------
+D|-0----0-0---------3---0-3----0-2-3----0-3--------0-5---------3-2-1-
+
+E|-------------------------------------------------------------------------
+B|-------------------------------------------------------------------------
+G|-----------------------------------5------5-5/7----x-4p2-----------------
+D|---7------7---------5-----5--------3------3-3/5----------3-x-7p5---------
+A|---5------5-0-2p0---3-----3--------------------------------------7-x-3p2-
+D|-0----0-0---------3---0-3----0-2-3----0-3--------0-----------------------
+
+Lead:  
+E|-14~-------14~-------14h15-14-14p12-------12~-15-----12---------
+B|-----15--------15-------------------13-----------15-----13------
+G|--------14--------14-------------------12------------------12\--   
+D|----------------------------------------------------------------   
+A|----------------------------------------------------------------   
+D|----------------------------------------------------------------   
+
+E|-----------------------------------------------------------------/x-
+B|-13-------13~-------13-13/15~-------/15--17b-17b-17b-17b-17b-17b----
+G|----14-----------14-----------16------------------------------------
+D|-------15-----15-----------------17---------------------------------
+A|--------------------------------------------------------------------
+E|--------------------------------------------------------------------
+
+E|-14~-------14~-------14h15-14-14p12-------12~-15-----12---------   
+B|-----15--------15-------------------13-----------15-----13------
+G|--------14--------14-------------------12------------------12\--
+D|----------------------------------------------------------------
+A|----------------------------------------------------------------
+D|----------------------------------------------------------------
+
+E|-----------------------------------------------------------
+B|-13-------13~-------13-13/15~-------/15--------------------
+G|----14-----------14-----------16---------------------------
+D|-------15-----15-----------------17------------------------
+A|-----------------------------------------------------------
+E|-----------------------------------------------------------
+
+OUTRO: play verse riff, substituting the final 4 notes with:
+
+E|--------------------------------------
+B|-1-0----------------------------------
+G|-----3-2-1-0--------------------------
+D|-------------3-2-1-0------------------
+A|---------------------3-2-1-0----------
+D|-----------------------------3-2-1----
+
+And that's the end of the song.
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/dont_tell_me.tab b/guitar/tabs/Van Halen/dont_tell_me.tab new file mode 100644 index 0000000..5283c69 --- /dev/null +++ b/guitar/tabs/Van Halen/dont_tell_me.tab @@ -0,0 +1,166 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / dont_tell_me.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: COOLEZ@aol.com
+
+				  
+
+				  Van Halen
+			Don't Tell Me What Love Can Do
+				From the album
+				   Balance
+     Drop the E string to a D. 
+     On Riff A as you pick, scrape the strings to get
+     the scratchy effect.
+
+  Riff A:    Pick scrape while playing notes. (Do not slide!)
+E|------------------------------------------------------------|
+B|------------------------------------------------------------|
+G|------------------------------------------------------------|
+D|------------------------------------------------------------|
+A|------------------------------------------------------------|
+D|-4\-4\-4\-4\-4\-4\-4\-4\-4\-0\-0\-0\-0\-0\-0\-0\-0\-0\-2\-2\|
+
+     Play riff A for the first half of the verse, then go 
+to riff B for the last half.
+
+  Riff B                                     
+|-2---2---2-2--2---2---2-2--|  Repeat this  |--0--|
+|-2---2---2-2--3---3---3-3--|  a few times  |--0--|
+|-2---2---2-2--2---2---2-2--|  then play an |--1--|
+|-4---4---4-4--4---4---4-4--|  E before the |--2--|
+|-4-4-4-4-4-4--4-4-4-4-4-4--|  chorus.      |--2--|
+|---------------------------|               |--2--|
+
+Chorus
+|-2-2-2-2-2-2-2-2-2--0-0-0-0-0-0-0-0----|  Repeat this
+|-3-3-3-3-3-3-3-3-3--2-2-2-2-2-2-2-2----|  for the rest
+|-2-2-2-2-2-2-2-2-2--2-2-2-2-2-2-2-2----|  of the chorus.
+|--------------------2-2-2-2-2-2-2-2----|
+|---------------------------------------|
+|---------------------------------------|
+
+
+|-------------------------4-4-4-4-4-4-4-------------|
+|-9-9-9-9-9-9-------------5-5-5-5-5-5-5-------------|
+|-9-9-9-9-9-9-------------6-6-6-6-6-6-6---5---------|
+|-9-9-9-9-9-9--7-7-7-7-7--6-6-6-6-6-6-6---5---------|
+|-7-7-7-7-7-7--7-7-7-7-7--4-4-4-4-4-4-4---3---------|
+|--------------5-5-5-5-5--4-4-4-4-4-4-4-------------|
+
+     I have not figured out the first solo yet, but I almost
+     have it.  So I will not write it.  I do know the first
+     part of the second solo, but not all of it.
+
+Solo 2:
+
+|--3-------------------|   This is only the begining 
+|-----2h3p2------------|   of the solo.  This repeats
+|------------4--2--4B--|   four times before it becomes
+|----------------------|   higher.
+|----------------------|
+|----------------------|
+
+     Repeat the rest of the riffs with the verses. 
+     This song is pretty easy to play.  It sounds
+     good with the CD.
+
+Questions, comments,
+
+Coolez@aol.com
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/drop_dead_legs.tab b/guitar/tabs/Van Halen/drop_dead_legs.tab new file mode 100644 index 0000000..763a72d --- /dev/null +++ b/guitar/tabs/Van Halen/drop_dead_legs.tab @@ -0,0 +1,189 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / drop_dead_legs.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Received: from animal-farm.nevada.edu by redrock.nevada.edu (5.65c/M1.4)
+	with SMTP id <AA10077>; Mon, 11 Oct 1993 17:41:56 -0700
+Received: from rpi.edu by animal-farm.nevada.edu id <AA01497@animal-farm.nevada.edu>; Mon, 11 Oct 1993 17:41:51 -0700
+Received: from client.its.rpi.edu (goya.its.rpi.edu) by rpi.edu (4.1/SMHUB41);
+	id AA09753; Mon, 11 Oct 93 20:41:47 EDT for jamesb@nevada.edu
+From: <larsoe@rpi.edu>
+Received: by client.its.rpi.edu (4.1/SUB16);
+	id AA20683; Mon, 11 Oct 93 20:41:44 EDT for jamesb@nevada.edu
+Message-Id: <9310120041.AA20683@client.its.rpi.edu>
+Subject: Drop Dead Legs by Van Halen
+To: jamesb@animal-farm.nevada.edu
+Date: Mon, 11 Oct 1993 20:41:43 -0400 (EDT)
+X-Mailer: ELM [version 2.4 PL21]
+Mime-Version: 1.0
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Length: 3023      
+
+                                Drop Dead Legs
+                                     by
+                                  Van Halen
+
+                                Transcribed by
+                                 Eric Larson
+                                larsoe@rpi.edu
+
+
+Here's basically the whole tune, I ommited a couple parts that were hard to
+notate, so just improv something. :)
+Any questions or comments, just email me.
+
+
+
+Intro & Verses                                         3x
+---|------------------|-----------O----------------------|-----------------|-
+---|--2-----2-------2-|-3-------5---------3--------------|-2-----2-------2-|-
+-2-|.---2-------2-----|-2-----------4-------2----2------.|---2-------2-----|-
+-2-|.-----2-------2---|-4---4/6-------6\4-----4--2--1/2-.|-----2-------2---|-
+-O-|------------------|-O------------------------O-------|-----------------|-
+---|------------------|----------------------------------|-----------------|-
+
+   < swell                               Funky Bend
+---|------------------|----------------------------|----------------------|-
+---|-1--------2-------|----------------------------|----------------------|-
+---|-2----------2-----|.-7-------------------------|-5-5------------------|-
+---|--------------2---|.-7-------------------------|-5-5----------O-5-4~--|-
+---|----------------4-|--5---------O-2--3^5^3^5^3--|-3-3----O-2-3---------|-
+---|------------------|----------------------------|----------------------|-
+
+
+---|------------------|
+---|------------------|
+---|-5-5-----------2-.|
+---|-5-5-----------2-.|
+---|-2-2---O-2-3~--O--|
+---|------------------|
+
+
+The Choruses are something like the into:
+
+  You know that you want it....                                  etc...
+----             -------           -------          -------      ----
+----             ---3---           ---5---          ---3---      ----
+-2--             ---2---           ---4---          ---2---      -2--
+-2--             ---4---           ---6---          ---4---      -2--
+-O--             ---O---           ---O---          ---O---      -O--
+----             -------           -------          -------      ----
+
+Then there's that break thing with this awesome run...
+
+B B B B   D D D D
+
+-------------------------------------------------------------------------
+-------------------------------------------------------------------------
+--------H-H-------------H-H-------------H-H----------H-H----3--5-5--7-7--
+--H-H--1-3-5------H-H--3-5-7------H-H--5-6-8--H-H---6-8-10--3--5-5--7-7--
+-1-3-5-------3---3-5-7-------5---5-6-8-------6-8-10---------1--3-3--5-5--
+-------------------------------------------------------------------------
+
+
+Then the outro rythmn goes something like this: (palm muted)
+
+---------------------------------------------|
+---------------------------------------------|
+--------------------------------------------.|
+----H-P--O----H----------H-P--------H-H-----.|
+---O-2-O-----O-2-3------O-2-O-3~---O-2-3-----|
+-2---------2-------2--2----------2-------2---|
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/eruption.prj b/guitar/tabs/Van Halen/eruption.prj new file mode 100644 index 0000000..c4277fa --- /dev/null +++ b/guitar/tabs/Van Halen/eruption.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=eruption.tab +TYPES=(0,32)(1,32)(2,32)(3,32)(4,32)(5,32)(6,32)(7,32)(8,32)(9,32)(10,32)(11,32)(12,32)(13,32)(14,32)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,32)(55,32)(56,32)(57,32)(58,32)(59,32)(60,32)(61,32)(62,32)(63,32)(64,32)(65,32)(66,32)(67,32)(68,32)(69,32)(70,32)(71,32)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32)(104,32)(105,32)(106,32)(107,32)(108,32)(109,32)(110,32)(111,32)(112,32)(113,32)(114,32)(115,32)(116,32)(117,32)(118,32)(119,32)(120,32)(121,32)(122,32)(123,32)(124,32)(125,32)(126,32)(127,32)(128,32)(129,32)(130,32)(131,32)(132,32)(133,32)(134,32)(135,32)(136,32)(137,32)(138,32)(139,32)(140,32)(141,32)(142,32)(143,32)(144,32)(145,32)(146,32)(147,32)(148,32)(149,32)(150,32)(151,32)(152,32)(153,32)(154,32)(155,32)(156,32)(157,32)(158,32)(159,32)(160,32)(161,32)(162,32)(163,32)(164,32)(165,32)(166,32)(167,32)(168,32)(169,32)(170,32)(171,32)(172,32)(173,32)(174,32)(175,32)(176,32)(177,32)(178,32)(179,32)(180,32)(181,32)(182,32)(183,32)(184,32)(185,32)(186,32)(187,32)(188,32)(189,32)(190,32)(191,32)(192,32)(193,32)(194,32)(195,32)(196,32)(197,32)(198,32)(199,32)(200,32)(201,32)(202,32)(203,32)(204,32)(205,32)(206,32)(207,32)(208,32)(209,32)(210,32)(211,32)(212,32)(213,32)(214,32)(215,32)(216,32)(217,32)(218,32)(219,32)(220,32)(221,32)(222,32)(223,32)(224,32)(225,32)(226,32)(227,32)(228,32)(229,32)(230,32)(231,32)(232,32)(233,32)(234,32)(235,32)(236,32)(237,32)(238,32)(239,32)(240,32)(241,32)(242,32)(243,32)(244,32)(245,32)(246,32)(247,32)(248,32)(249,32)(250,32)(251,32)(252,32)(253,32)(254,32)(255,32)(256,32)(257,32)(258,32)(259,32)(260,32)(261,32)(262,32)(263,32)(264,32)(265,32)(266,32)(267,32)(268,32)(269,32)(270,32)(271,32)(272,32)(273,32)(274,32)(275,32)(276,32)(277,32)(278,32)(279,32)(280,32)(281,32)(282,32)(283,32)(284,32)(285,32)(286,32)(287,32)(288,32)(289,32)(290,32)(291,32)(292,32)(293,32)(294,32)(295,32)(296,32)(297,32)(298,32)(299,32)(300,32)(301,32)(302,32)(303,32)(304,32)(305,32)(306,32)(307,32)(308,32)(309,32)(310,32)(311,32)(312,32)(313,32)(314,32)(315,32)(316,32)(317,32)(318,32)(319,32)(320,32)(321,32)(322,32)(323,32)(324,32)(325,32)(326,32)(327,32)(328,32)(329,32)(330,32)(331,32)(332,32)(333,32)(334,32)(335,32)(336,32)(337,32)(338,32)(339,32)(340,32)(341,32)(342,32)(343,32)(344,32)(345,32)(346,32)(347,32)(348,32)(349,32)(350,32)(351,32)(352,32)(353,32)(354,32)(355,32)(356,32)(357,32)(358,32)(359,32)(360,32)(361,32)(362,32)(363,32)(364,32)(365,32)(366,32)(367,32)(368,32)(369,32)(370,32)(371,32)(372,32)(373,32)(374,32)(375,32)(376,32)(377,32)(378,32)(379,32)(380,32)(381,32)(382,32)(383,32)(384,32)(385,32)(386,32)(387,32)(388,32)(389,32)(390,32)(391,32)(392,32)(393,32)(394,32)(395,32)(396,32)(397,32)(398,32)(399,32)(400,32)(401,32)(402,32)(403,32)(404,32)(405,32)(406,32)(407,32)(408,32)(409,32)(410,32)(411,32)(412,32)(413,32)(414,32)(415,32)(416,32)(417,32)(418,32)(419,32)(420,32)(421,32)(422,32)(423,32)(424,32)(425,32)(426,32)(427,32)(428,32)(429,32)(430,32)(431,32)(432,32)(433,32)(434,32)(435,32)(436,32)(437,32)(438,32)(439,32)(440,32)(441,32)(442,32)(443,32)(444,32)(445,32)(446,32)(447,32)(448,32)(449,32)(450,32)(451,32)(452,32)(453,32)(454,32)(455,32)(456,32)(457,32)(458,32)(459,32)(460,32)(461,32)(462,32)(463,32)(464,32)(465,32)(466,32)(467,32)(468,32)(469,32)(470,32)(471,32)(472,32)(473,32)(474,32)(475,32)(476,32)(477,32)(478,32)(479,32)(480,32)(481,32)(482,32)(483,32)(484,32)(485,32)(486,32)(487,32)(488,32)(489,32)(490,32)(491,32)(492,32)(493,32)(494,32)(495,32)(496,32)(497,32)(498,32)(499,32)(500,32)(501,32)(502,32)(503,32)(504,32)(505,32)(506,32)(507,32)(508,32)(509,32)(510,32)(511,32)(512,32)(513,32)(514,32)(515,32)(516,32)(517,32)(518,32)(519,32)(520,32)(521,32)(522,32)(523,32)(524,32)(525,32)(526,32)(527,32)(528,32)(529,32)(530,32)(531,32)(532,32)(533,32)(534,32)(535,32)(536,32)(537,32)(538,32)(539,32)(540,32)(541,32)(542,32)(543,32)(544,32)(545,32)(546,32)(547,32)(548,32)(549,32)(550,32)(551,32)(552,32)(553,32)(554,32)(555,32)(556,32)(557,32)(558,32)(559,32)(560,32)(561,32)(562,32)(563,32)(564,32)(565,32)(566,32)(567,32)(568,32)(569,32)(570,32)(571,32)(572,32)(573,32)(574,32)(575,32)(576,32)(577,32)(578,32)(579,32)(580,32)(581,32)(582,32)(583,32)(584,32)(585,32)(586,32)(587,32)(588,32)(589,32)(590,32)(591,32)(592,32)(593,32)(594,32)(595,32)(596,32)(597,32)(598,32)(599,32)(600,32)(601,32)(602,32)(603,32)(604,32)(605,32)(606,32)(607,32)(608,32)(609,32)(610,32)(611,32)(612,32)(613,32)(614,32)(615,32)(616,32)(617,32)(618,32)(619,32)(620,32)(621,32)(622,32)(623,32)(624,32)(625,32)(626,32)(627,32)(628,32)(629,32)(630,32)(631,32)(632,32)(633,32)(634,32)(635,32)(636,32)(637,32)(638,32)(639,32)(640,32)(641,32)(642,32)(643,32)(644,32)(645,32)(646,32)(647,32)(648,32)(649,32)(650,32)(651,32)(652,32)(653,32)(654,32)(655,32)(656,32)(657,32)(658,32)(659,32) diff --git a/guitar/tabs/Van Halen/eruption.tab b/guitar/tabs/Van Halen/eruption.tab new file mode 100644 index 0000000..95f0a75 --- /dev/null +++ b/guitar/tabs/Van Halen/eruption.tab @@ -0,0 +1,276 @@ + +Home New Tabs Guitar Forums Cool! Lessons ICQ Buddies Premier Sites + + + Mon Dec 3, 2001 TabCrawler.Com- Use It To Play Something... + + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## + +From: csb1@engr.uark.edu (/usr/spool/mail/csb1) + + + +"Eruption" by Van Halen +Taken from Guitar Player Magazine, Issue unknown + +Entered by: Chris Bray + + +----------------------------------------------------------5--------------- +--------------------------------------------------------5-5-8^5^0--------- +\--2------------------------------5--7^(8)^7--5--7^(9)-------------8------ +\--2------------------------5--7------------------------------------------ +\--0------------7^(9)^7^(9)----------------------------------------------- +-------------------------------------------------------------------------- + + gliss +------------------------------------------------5------------------------- +--5^8^5^0--5^8^5^0--5^8^5^0--5^8^5^0--------5---8-5-------5--------------- +--------------------------------------7^(8)------------7----7^(8)^7^5----- +------------------------------------------------------0^----------------6- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + slight ritard +-------------------------------------------------------------------------- +-----------------------------------------4-------------------------------- +---4---5---7---5-7^5^4----4^7^5^4----4^7^5--4--7--4^7^5^4-----4----------- +-----------------------7----------7------------------------7----7-6-5-4--- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + ritard +---------------------------------------------------------------------------- +---------------------------------------------------------------3---3-------- +-----------------------------0-----------------------------2---0---2---2/--- +-----------------------------------------------------------2---0---0-------- +---7-6-5-3----------------------3-----0^2^0^2^0^2^0^1^0----0---------------- +-------------5\16-0-^-5-^-3------------------------------------3------------ + +----------17---------17---------17---------17--------17-20-21----20-17---- +--20^(22)----20^(22)----20^(22)----20^(22)-----20-------------19---------- +--------------------------------------------------0----------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +----------------------17---------17---------17---------17----------------- +---19^(22)^19^20^(22)----20^(22)----20^(22)----20^(22)----20-------------- +-------------------------------------------------------------0------------ +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +---17-20-21----20-17-----------------17---------17-20^(21)^20^17^---17---- +------------19-------19^(22)^19^(20)----21^(22)------------------20------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +---20^(22)^20^17----20^(22)^20^17--20^(22)^20^17----20^(22)^20^(22)\------ +-----------------19------------------------------19----------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + gliss +---------------16^17^20--------------17-20-17^20^17^14-15^14^-------------- +------16^18^20-------------17^20---X^------------------------17^14--------- +--/18-------------------18--------X--------------------------------17^(18)- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- +--------------------------------------------------------------------------- + + +-------------------------------------------------------------------------- +--14-------------------------------------------------------17------------- +-----18^(19)^18^14-17^14^17^14^17^14\------19^(21)^19^(21)----19^(21)----- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +--------------------------------------0\---------------------------------- + + fast picking +------------16-16-16-16-19-19-19-17-17-17-16-16-16-17-17-17-17------------ +---17-17-17----------------------------------------------------19-19-19--- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +---16-16-16----------16-16-16-19-19-19-17-17-17-16-16-16-17-17-17--------- +------------17-17-17----------------------------------------------19-19-19 +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +---16-16-16---12-12-12-14-12\10-10-10-10-12-10\9-9-9-10-9\7-7-7-9-7\5-5-5- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + ritard +---7-5\3-3-3-5-3--1-1-1-1-1-1-1-1-1^3^1\0--------------------------------- +------------------------------------------5^3^1^0------------------------- +--------------------------------------------------2(4)^2\1---------------- +-------------------------------------------------------------------------- +------------------------------------------------------------2/------------ +-----------------------------------------------------------------0-13-0--- + ~ ~ + trill +-------------------------------------------------------------------------- +-------------------------------------6^0^5-------8^0^7--5^(7)------------- +--------------------5^0--------5-0-4^------7^0^5-------------------------- +-------5^7-7-7-7-7-------7-7-7-------------------------------------------- +---/7--------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +--------------------------------------------------4^0--------------------- +------------------------------------5^0^4--------------6--4^(6)----4^0---- +-----------------5^0----------5^0----------7-4-4-------------------------- +------5^7-7-7-7-------7-7-7-7-----7--------------------------------------- +---/7--------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------5^0----------5^0^---6-0-5-------8---------------------- +-------5^7-7-7-7-7------7-7-7-7-----8--------7-0/5----10------------------ +---/7--------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +---9^11^9^11^9^11^9\7^9^7^9^7\5^7^5^7^5\4^6^4^6^4^6----------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +---18^6^9-13^6^9-13^6^9-13^6^9-13^6^9-13^6^9-13^6^9-13^6^9---------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +---14^6^9-14^6^9-14^6^9-14^6^9-14^6^9-14^6^9-14^6^9-14^6^9^8-------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + repeat 3x repeat 4x +--|--------------------|-----------------|-------------------|------------ +--|--------------------|-----------------|-------------------|------------ +--|: -14^8^11-14^8^11 :|-16^8^11-16^8^11-|: 16^9^13-16^9^13 :|------------ +--|: ---------------- :|-----------------|: --------------- :|------------ +--|--------------------|-----------------|-------------------|------------ +--|--------------------|-----------------|-------------------|------------ + + repeat 3x repeat 3x +--|--------------------|--------------------|---------------------|------- +--|--------------------|--------------------|---------------------|------- +--|: -17^9^12-17^9^12 :|-19^9^13-19^9^13^11-|: 19^11^14-19^11^14 :|------- +--|: ---------------- :|--------------------|: ----------------- :|------- +--|--------------------|--------------------|---------------------|------- +--|--------------------|--------------------|---------------------|------- + + repeat 3x +--|-------------------|---------------------|----------------------------- +--|-------------------|---------------------|----------------------------- +--|-21^11^14-21^11^14-|: 21^16^13 21^16^13 :|----------------------------- +--|-------------------|: ----------------- :|----------------------------- +--|-------------------|---------------------|----------------------------- +--|-------------------|---------------------|----------------------------- + + change feel +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +--21^13--21^13--21^13^16--21^13^16--21^13^16--21^13^16--21^16------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +--21^16^19--21^15^18--21^15^18--21^14^17--21^13^16--21^13^16-------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +---19--21^16^19--21^16^19--21^15^18--21^15^18--21^14^17--21^14^17--------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +---21^13^16--21^13^16--21^14^17--19^14^17--19^13^16--19^13^16--19^12^15--- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +---19^12^15--19^11^14--19^11^14--16/17^15^17^12^15--17^11^14--17^11^14---- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + + repeat 8x +--------------------------------------------|---------------------|-------- +--------------------------------------------|---------------------|-------- +---17^10^13--17^10^13--17^9^12--17^9^12--16^|: ^8^11-16^8^11-16^ :|------- +--------------------------------------------|: ----------------- :|------- +--------------------------------------------|---------------------|-------- +--------------------------------------------|---------------------|-------- + + repeat 8x repeat 8x repeat 8x +---|---------------------|--------------------|---------------------|----- +---|---------------------|--------------------|---------------------|----- +---|: ^9^12-16^9^12-10^ :|: 8^11-16^8^11-16^ :|: ^9^12-16^8^11-16^ :|----- +---|: ----------------- :|: ---------------- :|: ----------------- :|----- +---|---------------------|--------------------|---------------------|----- +---|---------------------|--------------------|---------------------|----- + + slow * +----------------------------|| +----------------------------|| +---^9/----------------------|| +----------------------------|| +----------------------------|| +--------\0------0--^--12^---|| + + * Hit the low E string, 12th fret, with right-hand index finger, + causing harmonic. + + +Key: ^ Hammer on/off + \ Slide up + / Slide down + ^( ) Bend to the note in ( ) + + +-- +============================================================================== +csb1@engr.uark.edu | Chris Bray +cbray@uafhp.uark.edu | University of Arkansas, Fayetteville +============================================================================== +Dad always thought laughter was the best medicine, which I guess is +why several of us died of tuberculosis. +============================================================================== + +Back to Directory + + diff --git a/guitar/tabs/Van Halen/eyes_of_the_night.tab b/guitar/tabs/Van Halen/eyes_of_the_night.tab new file mode 100644 index 0000000..d70c891 --- /dev/null +++ b/guitar/tabs/Van Halen/eyes_of_the_night.tab @@ -0,0 +1,187 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / eyes_of_the_night.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+EYES OF THE NIGHT
+Van Halen, Unreleased Compilation Volume II
+Pasadena,Ca 1976
+INTRo tabbed by dsale@jax.jaxnet.com
+http://jax.jaxnet.com/~dsale
+
+Ok,i hope someone will complete this,the most important thing that stood
+out to me in this tune was the intro,so thats what im tabbing.I have NO
+clue as to why they never got this onto an album.its awesome.
+they should put it on the NEXT album,w/sammy singing (*hint- hint)
+ :)
+
+standard tuning, throw in a MXR - phase 90.
+
+
+
+             p    p   p  p                                                  
+-------------------------------------------------------------------|
+-------------------------------------------------------------------|
+-------------------------------------------------------------4--3--|
+---0h2--2/4--2--4--5--4--3--2/4\2--2--------------2--4--4/6--------|
+--------------------------------------------2--4-------------------|
+0-------------------------------------0--0-------------------------|
+                                                                        
+
+                                                                        
+--------------------------------|
+--------------------------------|
+3--2--2--1h2p1------------------|
+----------------2--1--1---------|
+-------------------------0h1--1/|
+--------------------------------|
+                                                                        
+
+             p                                                           
+----------------------------------------------7--|
+-------------------------------------0--7--8-----|
+----------------------------------5--------------|
+---0h2--2/4--2--4---/5h4h5-----7-----------------|
+-------------------------------------------------|
+0------------------------------------------------|
+                                                                        
+
+                                                                        
+---------------------10----------------------------------------|
+----------12--12\10------10-----9------------12----------15----|
+---12h11------11\9-----------9--------12h11----------14--------|
+-------------------------------------------------14------------|
+---------------------------------------------------------------|
+0----------------------------------0-----------------------\0--|
+                                                                        
+
+                                                                        
+-----------10------10--------------------------------------------|------
+------/10--10--10--10--------------------------------------------|------
+--------------------------------------2--2--2--2--2--2--2--2--2--|------
+-----------------------7--5--------------------------------------|------
+---9h7-----------------------7--5--------------------------------|------
+0----------------------------------0-----------------------------|------
+                                                                        
+
+                                                                        
+-------------------------------|----------------------------------------
+5h3p0--5h3p0--5h3p0--5h3p0-----|----------------------------------------
+----------------------------2--|----------------------------------------
+-------------------------------|----------------------------------------
+-------------------------------|----------------------------------------
+-------------------------------|----------------------------------------
+                                                                        
+
+                                                                        
+0-----0-----0--------0-------0-----0--------0-----0-----0-----0---------
+---3-----3-----3--3-----0h2-----2-----2--2-----2-----8-----8-----8------
+-----------------------------------------------------9-----9-----9------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+---0-----0------0------0----------0--0-/0---0---0---0-------------------
+8-----8-----10-----10-----10--10-----10-12--12--12--12------------------
+9-----9-----11-----11-----11--11-----11-13--13------13------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/feel_your_love.tab b/guitar/tabs/Van Halen/feel_your_love.tab new file mode 100644 index 0000000..d5dd57d --- /dev/null +++ b/guitar/tabs/Van Halen/feel_your_love.tab @@ -0,0 +1,177 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / feel_your_love.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Date: Mon, 5 Jun 1995 03:20:47 GMT
+
+FEEL YOUR LOVE 
+WRITEN AND PREFORMED BY VAN HALEN
+
+TRANSCRIBED BY GORBY @MAGI.COM
+
+This TAB transcription was created using TAB MASTER version 1.0
+
+--------------------------------------------------------------------
+
+
+
+        INTRO    (Part A)
+e:-------------------------------------------------------------|
+B:-------------------------------------------------------------|
+G:-------------------------------------------------------------|
+D:-----6------------------------------4------------------------|
+A:-----7~------5--------4-------------5~-------4--------2------|
+E:3-4-----r(0)----r(0)-----r(0)-r(0)------------r(0)-----r(0)-----3-4-|
+
+
+                                                   
+
+   Part B
+e:------------------------------------------------|
+B:-----------3-------------------------3----------|
+G:2----------2-------------2-----------2----------|
+D:2----------2-------------2-----------2----------|
+A:0----------0-------------0-----------0----------|
+E:---------------------3-4------------------------|
+   let ring----------->     let ring------------>
+
+
+
+       Part C
+e:-------------------------------------------------------------------|
+B:-------------------------------------------------------------------|
+G:-2-2-----2-------2-2-----2--------4--------------------4--16-------|
+D:-2-2--4--2-------2-2--4--2--------4--------------------4-/16-------|
+A:-0-0--0--0--r(0)--0-0--0--0--r(0)---2--------------------2--14-------|
+E:-------------------------------------------------------------------|
+           ^  ^                ^  ^            let ring----------->     let ring
+
+
+
+           Chorus (Part D)
+e:------|-----------------------------------------------|
+B:------|-----------------------------------------------|
+G:------|--------------------------------------------7-9|
+D:------|------6-------------------------4-----------7/9|
+A:------|------7~------5------4----------5~-----4----5-7|
+E:------|--3-4----r(0)---r(0)-----r(0)r(0)--  ----r(0)---r(0)---|
+  
+Somebody placed a post requesting this song and unfortunatly I accidentaly erased the persons
+note from my mailbox-whoever you were, I hope you see this.
+
+
+That is about the whole song.  The only part I left out was the solo section.  If you want that
+too, let me know and I'll transcribe it.  I'm not too sure on how many times you play each part
+and where but this is a start anyhow.  Enjoy!!
+
+
+
+                      Vibrato Sign:         ---6~----
+                    - Slide Up:             ---5/7---
+                    - Slide Down:           ---7\5---
+                    - Harmonic sign:        ---!12!--
+                    - Semi Harmonic sign:   ---'5'---
+                    - Left Hand Muting:     ---l(5)--
+                    - Right Hand Muting:    ---r(5)--
+                    - Tremolo:              ---{5}---
+                    - Pick Slide:           --p(5/7)-
+                    - Bend String:          --5b(7)--
+                    - Release from Bending: --(7)b5--
+                    - Wammy Bar Bend        --5w(7)--
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/feelin.tab b/guitar/tabs/Van Halen/feelin.tab new file mode 100644 index 0000000..0c84470 --- /dev/null +++ b/guitar/tabs/Van Halen/feelin.tab @@ -0,0 +1,333 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / feelin.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Feelin'
+Van Halen (Balance)
+
+Transcribed by: Mike Heasley (mheasley@hmc.edu)
+
+	I grabbed the tab for this off of ftp.nevada.edu and thought it was
+	close but not quite right.  So here's my rendition.  I basically
+	just edited the version that was transcribed by Bob Brockman
+	(brockman@udavxb.oca.udayton.edu).  Corrections, comments,
+	suggestions, flames, etc. welcome.
+
+Part 1:
+
+e|-------------------------------------------------0-2--|
+B|-----------------------------------------------3------|
+G|------4-------4-------4-------4----------4---2--------|
+D|----4-------2-------0-------0----------0---0----------|
+A|--2-----2-0-----0--------------------2----------------|
+E|------------------3-----3-2-----2~-0------------------|
+
+Part 2:
+
+e|-------------------------|
+B|--------2---------3-2----|
+G|------4-------2-------2--|
+D|----4-------2---2--------|
+A|--2-------0--------------|
+E|-------------------------|
+
+Part 3: (similar to Part 1):
+
+e|-------------------------------------------------2-0-0--|
+B|-----------------------------------------------3-----0--|
+G|------4-------4-------4-------4----------4---2-------2--|
+D|----4-------2-------0-------0----------0---0---------2--|
+A|--2-----2-0-----0--------------------2---------------0--|
+E|------------------3-----3-2-----2~-0--------------------|
+                                                       ^
+
+Part 4:  Same as Part 1
+
+     outta touch most ...
+
+Part 5:
+
+     it's the hardest thing  oh....
+
+e|--------------------0--------------|
+B|--------2-------2---0-----------3--|
+G|------4-------4-----------2---2----|
+D|----4-------2-----------2---0------|
+A|--2-------0-----------0------------|
+E|------------------0----------------|
+
+Part 6:  Same as Part 3
+
+     grow it long, ....
+
+Part 7:
+
+                    that's what's ....
+
+e|---------------------------------------------------7-------------12--|
+B|--------7-----7-8-------7---7-5------------7---7-8---8--12-10-10-10--|
+G|------9-----9---------7---------7--------9---9----------12-11-11-----|
+D|----9-----9---------7-----7-------7----9----------------0------------|
+A|--7---------------5------------------7-------------------------------|
+E|---------------------------------------------------------------------|
+
+Repeat parts 4 through 6:
+
+     pay attention, watch ...
+
+     
+Part 8:
+                                        (not exactly sure about this chord)
+e|--------------------------------------------------------------------|
+B|---3/7--5--8--7/10--8--12--12/14-14---15----------------------------|
+G|--------------------------------------0-----------------------------|
+D|--------------------------------------0-----------------------------|
+A|---2/5--3--7--5/8---7--10--10/12-12---12----------------------------|
+E|--------------------------------------------------------------------|
+
+
+Chorus:  I just play these as bar chords, though I'm sure Eddie does
+	 something fancier
+
+     Bm      A     G                 D/F#               Em       D
+     feelin'...no, i don't like ....
+     Bm     A     G                D/F#          Em     D   Asus2
+     feelin' what no one else .....
+
+
+Variation on Part 4:
+
+     now black is white and ....
+
+e|-------------------------------------------------------0-2--|
+B|-----------------------------------------------------3------|
+G|------4---------4---------4---------4----------4---2--------|
+D|----4---------2---------0---------0----------0---0----------|
+A|--2-----2-2-0-----0-0----------------------2----------------|
+E|----------------------3-----3-3-2-----2~-0------------------|
+
+Repeat Part 5:
+
+     it puts me ....
+
+Variation on Part 6:
+
+     i were you and....
+e|-------------------------------------------------------2-0-0--|
+B|-----------------------------------------------------3-----0--|
+G|------4---------4---------4---------4----------4---2-------2--|
+D|----4---------2---------0---------0----------0---0---------2--|
+A|--2-----2-2-0-----0-0----------------------2---------------0--|
+E|----------------------3-----3-3-2-----2~-0--------------------|
+                                                             ^
+
+Chorus:
+
+     Bm      A     G                  D/F#              Em       D
+     feelin'...oh, i don't like ...
+             Bm    A     G                D/F#          Em      D
+     and i'm seein' what no one ....
+             Bm     A      G            D/F#                   Em     D  Asus2
+     come on feelin', hey, i ....
+
+
+Part 9:  Lead-in to solo
+
+e|--------------------------------------------------------------|
+B|--------------------------------------------------------------|
+G|--------------------------------------------------------------|
+D|-----------5/7----------------------------5----7-----7/5------|
+A|---5/7-----0---0-0-0-0-0-----5--5/7---------5--5-5-5-5/3-3-3--|
+E|---0---0-0---------------5/7----0---0-0-0---------------------|
+
+e|--------------------------------------------------|
+B|--------------------------------------------------|
+G|--------------------------------------------------|
+D|-----------5/7----------------------------5-------|
+A|---5/7-----0---0-0-0-0-0-----5--5/7---------5-----|
+E|---0---0-0---------------5/7----0---0-0-0------5--|
+
+Pick scrape/whammy bar/something like that on the last note
+
+
+============
+Solo here... ( Em - D )
+============
+
+Variation on Part 9:
+
+e|--------------------------------------------------------------|
+B|--------------------------------------------------------------|
+G|--------------------------------------------------------------|
+D|-----------5/7----------------------------5----7-----7/5------|
+A|---5/7-----0---0-0-0-0-0-----5--5/7---------5--5-5-5-5/3-3-3--|
+E|---0---0-0---------------5/7----0---0-0-0---------------------|
+
+e|----------------------------------------------------------|
+B|----------------------------------------------------------|
+G|----------------------------------------------------------|
+D|-----------5/7----------------------------5----7-----7/5--|
+A|---5/7-----0---0-0-0-0-0-----5--5/7---------5--5-5-5-5/3--|
+E|---0---0-0---------------5/7----0---0-0-0-----------------|
+
+
+Variation on Part 3:
+
+e|-------------------------------------------------0-2-0--|
+B|-----------------------------------------------3-----0--|
+G|------4-------4-------4-------4----------4---2-------2--|
+D|----4-------2-------0-------0----------0---0---------2--|
+A|--2-----2-0-----0--------------------2---------------0--|
+E|------------------3-----3-2-----2~-0--------------------|
+                                                       ^
+
+Repeat Part 3 as written:
+
+     
+Chorus:
+
+     Bm      A     G                 D/F#               Em       D
+     feelin'...oh, i don't like ...
+         Bm       A      G                D/F#          Em       D  Asus2
+     i'm bleedin'...like ...
+     Bm     C#dim  D                  Em         F#
+     dealin'...i'm dealin' ...
+         Bm           C#dim         D                    Em               F#
+     i'm dreamin', im dreamin', ...
+     Bm    C#dim   D                 Em               F#
+     seein'...i'm seein' things ....
+               Bm           C#dim        D                   Em
+     i've been feelin', i'm ...
+             F#m
+     i don't know, i don't ...
+
+(Repeat: Bm - C#dim - D - Em - F#)
+
+     hey, i don't und...
+
+
+Variation on Part 3:
+
+e|-------------------------------------------------2-3-0--|
+B|-----------------------------------------------3-----0--|
+G|------4-------4-------4-------4----------4---2-------2--|
+D|----4-------2-------0-------0----------0---0---------2--|
+A|--2-----2-0-----0--------------------2---------------0--|
+E|------------------3-----3-2-----2~-0--------------------|
+                                                       ^
+
+Part 10 (the end):
+
+e|-----------------9--|
+B|--------------5--7--|
+G|------------7----7--|
+D|-------7-11------9--|
+A|---4/7-----------9--|
+E|-----------------7--|
+
+
+(From Bob Brockman's transcription):
+Just in case, the more esoteric chords used herein are:
+
+              Bm   Bm/A  Bm/G  Asus2 C#dim
+          e|--x-----x-----x-----0-----x-----
+          B|--3-----3-----3-----0-----5-----
+          G|--4-----4-----4-----2-----6-----
+          D|--4-----4-----4-----2-----5-----
+          A|--2-----0-----x-----0-----4-----
+          E|--x-----x-----3-----x-----x-----
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/finish what you start.tab b/guitar/tabs/Van Halen/finish what you start.tab new file mode 100644 index 0000000..5a0d1f8 --- /dev/null +++ b/guitar/tabs/Van Halen/finish what you start.tab @@ -0,0 +1,160 @@ +# +From: fscll@acad3.alaska.edu (Chris Lott) + + + + FINISH WHAT YA STARTED Van Halen + from: March 1992 Guitar World + +In this song ^=1/4 step bend + /= slide up + \=slide down + ~= vibrato + --20--30--- two notes together= pull offs + + I have not looked at enough of the tab on here to be sure I +used standard notation for the group, bot it is all pretty self-explanatory. +The only problem I had was notating hammer ons because a 1 to 3 hammer on +looked like a fretted note at 13!! oh well... hope someone out there gets some +use out of this... + + +------------------0-0-0-------------------------------0-0------------ +------------------0-3-3---------------------0-2^-2-^--3-3------------ +-------2-4----------4-4-----------2-4-------0-2^-2-^--4-4--------2-4- +-0-2-5-----5^-2-------------0-2-5-----5^-2-----------------0-2-5----- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + [all ^ are 1/4 step bends] + +------0--0-0--------------------------3^3^-0-3^3^-------------------- +------0--3-3------------------0-2^-2^-2^2^-0-2^2^-------------------- +---------4-4--------2-4-------0-2^-2^-------------------2-4---------- +5^-2----------0-2-5-----5^-2----------------------0-2-5-----5^-2----- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + + Come on baby Ow +0-0-------0-0------------------------0-0-0---0-----------------0-0-0- +0-0--3-3^-0-0-----------------0-2-2^-3-3-3---3-----------------0-3-3- +-----4-4^------------2-4------0-2-2^-4-4-4---4-------2-4---------4-4- +---------------0-2-5-----5^-2------------------0-2-5-----5^-2-------- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + Woah, Woah +0-0---0-0-------------------0---0--0-0----0--0--0-------------------- +3-3---3-3---------0-2---2---3---3--3-3^---0--3--3---------------0-2-2 +4-4---4-4--2-4-0--0-2---2---4---4--4-4^------4--4-------2-4-----0-2-2 +--------------------------------------------------0-2-5-----5^2------ +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +0--0---------0--0--0-0-0-------------------------0--3^-3^0-3^3^0-3^3^ +3--3---------3--0--3-3-3----------------0-2---2--3--2^-2^0-2^2^0-2^2^ +4--4-------2-4-----4-4-4-------2-4------0-2---2--4------------------- +-----0-2-5---------------0-2-5-----5^2------------------------------- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +Well if you wanna baby I could You wanna lover + See other guys let it slide You want a friend +0--0---0-----------------------0-----------------0--0--0------------- +0--3---3---------------0-2--2^-3-----------------0--3--0------------- +---4---4-------2-4---0-0-2--2^-4--------2-4---------4----------2-4--0 +---------0-2-5-----5^0----------------------5^0----------0-2-5----5^0 +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +mama I can be I got +both of them the tools to satisfy. Just +---------0----------------------------------------------------------- +0-2--2^--3-----2----------------4~-2--4~----2------------------2~---- +0-2--2^--4-----2-------2-4------4~-2--4~----2---------2-4---0--2~-0-- +-----------------0-2-5-----5^2--4~----4~-------0-2-5------5^0--2~-0-- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +walk + away If I fall shy at all +--------------------------------------------------------------------- +----2~--------------------5--5----5---5------------------3----------- +-0--2~---0-2--------------6--6----6---6------------------2----------- +-0--2~---0-2-----2--------6--6----6---6--------2---------0----------- +-------------3/4---4\2-0--4--4--4-4---4--2-3/4---4\2-0------3-2^-0--- +-------------------------------------------------------------------1^ + +ah... Come on + baby finish what I'm + ya started Incomplete +-----------------------0----0-----0-------------------------0-------- +3-------------3^-3^----0----3-----3----------------0-2--2^--3-------- +2---------2---2^-2^---------4-----4-------2-4------0-2--2^--4-------- +0---0-2-5---5-----------------------0-2-5-----5^2-------------------- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +0------------------ +3------------------ +4-------2-4-------- +--0-2-5-----5^2---- +------------------- +------------------- and so on using these riffs up to the solo: + + +SOLO +----14-----12-----11-----9-----7----5-----0-----0-----0--------14---12 +--------------------------------------------------------------------- +-/15----13-----11------9----07----07---04----09----07---0--/15----13- +--------------------------------------------------------------------- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +---11----9-----5-----7-----5-----7-----5------14----12---11---9----7- +--------------------------------------------------------------------- +11-----9----07----07----07----07----------/15----13----11---9---07--- +----------------------------------04/5------------------------------- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +---5----0---0---0----0-------14----12---11---9----5----7-----5------- +------------------------------------------------------------------7-- +07---04--09--09---07---0--15----13----11---9---07---07----07--------- +---------------------------------------------------------------07---- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +-----------7--------------------------------------------------------- +---5----3/--10-7-7----7------10-7----7------------------------------- +----------------9--10---10-9------10---10-9-7-----------------2-4---- +05---04---------------------------------------9--9------0-2-5-----5^2 +--------------------------------------------------------------------- +--------------------------------------------------------------------- +END SOLO + + +Here are a couple of licks he does over the A chord throughout the song after +the solo: + +LICK 1 LICK 2 +---9----7----4----2-------------------------------------------------- +-------------------------------------------5-----3-----5----7---8/9-- +09---07---04---02-----0-2---2-0-------------------------------------- +--------------------------------2/------06----04----06---07---08----- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + +LICK 3 END LICK +--------------------------------------------------------------------- +----5----3----2----3------2-0-------5----3-----5-----7-----8--9------ +--------------------------------------------------------------------- +-05---04---02---04----02---------06---04----06----07----08----------- +--------------------------------------------------------------------- +--------------------------------------------------------------------- + + +-- + Christopher L. Lott "And now what shall become of + fscll@acad3.alaska.edu us without any barbarians? + Those people were a kind of + solution." + diff --git a/guitar/tabs/Van Halen/finish_what_ya_started.tab b/guitar/tabs/Van Halen/finish_what_ya_started.tab new file mode 100644 index 0000000..ccbf296 --- /dev/null +++ b/guitar/tabs/Van Halen/finish_what_ya_started.tab @@ -0,0 +1,260 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / finish_what_ya_started.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: fscll@acad3.alaska.edu (Chris Lott)
+
+
+
+                               FINISH WHAT YA STARTED   Van Halen
+                              from: March 1992 Guitar World
+
+In this song ^=1/4 step bend
+            /= slide up
+            \=slide down
+            ~= vibrato
+        --20--30---  two notes together=  pull offs
+
+                I have not looked at enough of the tab on here to be sure I
+used standard notation for the group, bot it is all pretty self-explanatory.
+The only problem I had was notating hammer ons because a 1 to 3 hammer on
+looked like a fretted note at 13!! oh well... hope someone out there gets some
+use out of this...
+
+
+------------------0-0-0-------------------------------0-0------------
+------------------0-3-3---------------------0-2^-2-^--3-3------------
+-------2-4----------4-4-----------2-4-------0-2^-2-^--4-4--------2-4-
+-0-2-5-----5^-2-------------0-2-5-----5^-2-----------------0-2-5-----
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+           [all ^ are 1/4 step bends]
+
+------0--0-0--------------------------3^3^-0-3^3^--------------------
+------0--3-3------------------0-2^-2^-2^2^-0-2^2^--------------------
+---------4-4--------2-4-------0-2^-2^-------------------2-4----------
+5^-2----------0-2-5-----5^-2----------------------0-2-5-----5^-2-----
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+    Come on baby                                                Ow
+0-0-------0-0------------------------0-0-0---0-----------------0-0-0-
+0-0--3-3^-0-0-----------------0-2-2^-3-3-3---3-----------------0-3-3-
+-----4-4^------------2-4------0-2-2^-4-4-4---4-------2-4---------4-4-
+---------------0-2-5-----5^-2------------------0-2-5-----5^-2--------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+                             Woah, Woah
+0-0---0-0-------------------0---0--0-0----0--0--0--------------------
+3-3---3-3---------0-2---2---3---3--3-3^---0--3--3---------------0-2-2
+4-4---4-4--2-4-0--0-2---2---4---4--4-4^------4--4-------2-4-----0-2-2
+--------------------------------------------------0-2-5-----5^2------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+0--0---------0--0--0-0-0-------------------------0--3^-3^0-3^3^0-3^3^
+3--3---------3--0--3-3-3----------------0-2---2--3--2^-2^0-2^2^0-2^2^
+4--4-------2-4-----4-4-4-------2-4------0-2---2--4-------------------
+-----0-2-5---------------0-2-5-----5^2-------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+Well if you wanna         baby I ...
+        See other guys    let it ....
+0--0---0-----------------------0-----------------0--0--0-------------
+0--3---3---------------0-2--2^-3-----------------0--3--0-------------
+---4---4-------2-4---0-0-2--2^-4--------2-4---------4----------2-4--0
+---------0-2-5-----5^0----------------------5^0----------0-2-5----5^0
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+mama I can be                     ...
+both of them                       the ...
+---------0-----------------------------------------------------------
+0-2--2^--3-----2----------------4~-2--4~----2------------------2~----
+0-2--2^--4-----2-------2-4------4~-2--4~----2---------2-4---0--2~-0--
+-----------------0-2-5-----5^2--4~----4~-------0-2-5------5^0--2~-0--
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+walk 
+  away                   If I ...
+---------------------------------------------------------------------
+----2~--------------------5--5----5---5------------------3-----------
+-0--2~---0-2--------------6--6----6---6------------------2-----------
+-0--2~---0-2-----2--------6--6----6---6--------2---------0-----------
+-------------3/4---4\2-0--4--4--4-4---4--2-3/4---4\2-0------3-2^-0---
+-------------------------------------------------------------------1^
+
+ah...               Come on 
+                       baby ...
+                                      ya ...
+-----------------------0----0-----0-------------------------0--------
+3-------------3^-3^----0----3-----3----------------0-2--2^--3--------
+2---------2---2^-2^---------4-----4-------2-4------0-2--2^--4--------
+0---0-2-5---5-----------------------0-2-5-----5^2--------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+0------------------
+3------------------
+4-------2-4--------
+--0-2-5-----5^2----
+-------------------
+------------------- and so on using these riffs up to the solo:
+
+
+SOLO
+----14-----12-----11-----9-----7----5-----0-----0-----0--------14---12
+---------------------------------------------------------------------
+-/15----13-----11------9----07----07---04----09----07---0--/15----13-
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+---11----9-----5-----7-----5-----7-----5------14----12---11---9----7-
+---------------------------------------------------------------------
+11-----9----07----07----07----07----------/15----13----11---9---07---
+----------------------------------04/5-------------------------------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+---5----0---0---0----0-------14----12---11---9----5----7-----5-------
+------------------------------------------------------------------7--
+07---04--09--09---07---0--15----13----11---9---07---07----07---------
+---------------------------------------------------------------07----
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+-----------7---------------------------------------------------------
+---5----3/--10-7-7----7------10-7----7-------------------------------
+----------------9--10---10-9------10---10-9-7-----------------2-4----
+05---04---------------------------------------9--9------0-2-5-----5^2
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+END SOLO
+
+
+Here are a couple of licks he does over the A chord throughout the song after 
+the solo:
+
+LICK 1                                 LICK 2
+---9----7----4----2--------------------------------------------------
+-------------------------------------------5-----3-----5----7---8/9--
+09---07---04---02-----0-2---2-0--------------------------------------
+--------------------------------2/------06----04----06---07---08-----
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+LICK 3                           END LICK
+---------------------------------------------------------------------
+----5----3----2----3------2-0-------5----3-----5-----7-----8--9------
+---------------------------------------------------------------------
+-05---04---02---04----02---------06---04----06----07----08-----------
+---------------------------------------------------------------------
+---------------------------------------------------------------------
+
+
+-- 
+  Christopher L. Lott           "And now what shall become of 
+  fscll@acad3.alaska.edu        us without any barbarians?   
+                                Those people were a kind of 
+                                         solution."          
+                               
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/from_afar.tab b/guitar/tabs/Van Halen/from_afar.tab new file mode 100644 index 0000000..8be91f2 --- /dev/null +++ b/guitar/tabs/Van Halen/from_afar.tab @@ -0,0 +1,225 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / from_afar.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE--------------------------------#
+#This file is the author's own work and represents their interpretation of the#
+#song. You may only use this file for private study, scholarship, or research.#
+#-----------------------------------------------------------------------------#
+
+Date: Sun, 29 Mar 1998 16:08:09 -0500
+From: Gerry Leslie <webmaster@geo-dome.com>
+Subject: v/van_halen/from_afar.tab
+
+This is the Tab to From Afar...
+
+-Loren Noblitt
+  [Part 2, "from afar (Text Document)"  Application/OCTET-STREAM (Name: "from afar.txt")  6.9KB]
+  [Unable to print this part]
+
+
+
+	My name is Loren Noblitt and I bought the new V3 album recently 
+and thought I'd tab this song out because it sounded really cool...so I 
+did and here I am to share it with all of you.  I've never done this before so cross your fingers...
+                        
+  3\27\98 
+
+  (*Standard tuning*)
+
+   
+    Clean w\delay                                     H  H  H     Harm.
+ 
+  E---7------8-----7------7---5--------7-----8------10-7-10-7-10--(12)---
+  B-----8------8-----8----------7---7----8-----8------------------(12)---
+  G-------9------9-----9----------7--------9-----9----------------(12)---
+  D----------------------------------------------------------------------
+  A----------------------------------------------------------------------
+  E---------------------------------------------------------------------0
+
+                           G   Em                        G  Har. w\vol swell
+  
+  E---7------8-------------3--------7-----8--------------3---------------
+  B-----8------8-----------3----------8-----8------------3---------------
+  G-------9------9----------------------9-----9--------------------------
+  D----------------------------2-----------------------------(5)---------
+  A-----------------0-2-3--3---2-----------------0-2-3---3---------------
+  E----------------------------0-----------------------------------------
+
+
+  w\Distortion              G  Em     I-----Palm muted-----I  D
+                             
+  E---------7---8-----------3--------------------------------------------
+  B---------8---8-----------3---------12----13----\15---------3----------
+  G---------9---9-----------------------12----12-----16-------2----------
+  D------------10---------------2---------14----14------------0----------
+  A------------------0-2-3--3---2-----------------------0-2-3------------
+  E--0-0-0----------------------0----------------------------------------
+
+                           
+                            G   Em    I------Palm muted--------I     D
+  
+  
+  E---------7---8-----------3--------------------------------------------
+  B---------8---8-----------3---------\12----13----\15---------------3---
+  G---------9---9------------------------12----12-----16-------------2---
+  D------------10---------------2----------14----14-----17-----------0---
+  A------------------0-2-3--3---2---------------------------0-2-3--------
+  E--0-0-0----------------------0----------------------------------------
+
+   I----------With heavy delay----------I                         D
+    
+    Em         F        C       F      Bm
+   
+  E--------------------------------------------7---8-------------------
+  B--------------------------------------------8---8--------------3----
+  G--------------------------------------------9---9--------------2----
+  D------------6--------5-------6-------4---------10--------------0----
+  A--2---------4--------3-------4-------2---------------0-2-3----------
+  E--0---------------------------------------------------------3-------
+
+   
+   I----------With Heavy Delay-----------I
+   
+    Em         F        C       F      Bm        Bm       Em  Em
+  
+  E-----------------------------------------------7----8------------
+  B-----------------------------------------------8----8------------
+  G-----------------------------------------------9----9------------
+  D------------6--------5-------6-------4---------9---10------------
+  A--2---------4--------3-------4-------2---------7--------2---2----
+  E--0--------------------------------------------7--------0---0----
+
+                (bounce on all C chords for 5 or so)
+                 C                                C                 C
+
+  E---------------------------------------------------------------------
+  B---------------------------------------------------------8-7---------
+  G------------------------------------------------------7-----7--------
+  D--9--8--7--6--5--------------------9--8--7--6--5-----\7------7---5---
+  A--7--6--5--4--3-----------2-2-2----7--6--5--4--3-----\5----------3---
+  E--------------------------0-0-0--------------------------------------
+
+                  
+                   I----Let Ring----I                    I----Let Ring----I
+
+
+  E------------------------0--------0---------------------------0--------0-
+  B----------------------0--------0---------------------------0---------0--
+  G--------------------3--------2---------------------------3---------2----
+  D--\7--7--7--7-----------------------------\9--8--7--6------------0------
+  A--\5--5--5--5----/3--------2---------2----\7--6--5--4--3-------2--------
+  E-------------------------------------0----------------------------------
+
+
+
+
+         I hope that this works for you...drop me a line with any comments 
+  or if you wanna chat about VH or guitar in general.  My address is
+
+                        Lorenn@student.flint.umich.edu
+                                
+                               
+                                    ____ 
+                                   / __ \
+                            For   / /  \ \  Unlawful
+                                 / /    \ \ 
+                                 \ \ V3 / /
+                                  \ \  / /
+                                   \ \/ / 
+                            Carnal  \__/  Knowledge
+  
+
+
+*****************************************************************************
+  
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/girl_gone_bad.tab b/guitar/tabs/Van Halen/girl_gone_bad.tab new file mode 100644 index 0000000..b0f935c --- /dev/null +++ b/guitar/tabs/Van Halen/girl_gone_bad.tab @@ -0,0 +1,447 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / girl_gone_bad.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 18 Dec 2001 13:18:41 -0500 (EST)
+From: dsale@jax.jaxnet.com
+From: Aaron Lee Goldman <agoldman@wam.umd.edu>
+Subject: v/van_halen/girl_gone_bad.tab
+ 
+Girl Gone Bad
+
+Van Halen (from 1984)
+
+To avoid wasting vast amounts of space, entire sections are labeled as being tap
+harmonics 
+rather than notating the harmonics for each note. For every note in these 
+sections, hold down the tabbed fret, and then tap exactly 12 frets above
+to sound 
+the harmonic. It's a very tough song, so good luck, and send feedback to 
+aaronlg@hotmail.com
+ 
+ 
+*7* = artificial harmonic
+<7> = natural harmonic
+#   = note(s) beneath this symbol are tremelo picked
+T   = note beneath is tapped
+ 
+INTRO PART 1:
+ 
+**all tap harmonics**
+ 
+E|-------0-----------------0-------
+B|-----1---1-------------0---1-----
+G|---2-------2---------2-------2---
+D|-3-----------3-----2-------------
+A|-----------------0---------------
+E|---------------------------------
+ 
+E|-0-----------------------------------------------0-----
+B|-1--------------------------0------------------0---0---
+G|-2--------------------------2----------------2-------2-
+D|----------------------------2--------------2-----------
+A|----0--0--0--0-0-0--0--0--0-----0--0--0--0-------------
+E|-------------------------------------------------------
+ 
+E|---------0-----------------5--------------------------
+B|-------1----1-------1----4---4-----1------------------
+G|-----2--------2---2----6-------6---2------------------
+D|---3------------3----------------7-3------------------
+A|-0------------------------------------0--0--0--0-0-0--
+E|------------------------------------------------------
+ 
+E|----------------0--------
+B|--------------4---4------
+G|------------6-------6----
+D|----------7-----------7--
+A|-0--0--0-----------------
+E|-------------------------
+ 
+INTRO PART 2:
+ 
+**normal**
+ 
+E|-------------------------------------------------------------
+B|-7---------------------------7-7-8---------------------------
+G|-8---------------------------8-8-9---------------------------
+D|-9---------------------------9-9-10--------------------------
+A|----0--0--0--0-0-0--0--0--0----------0--0--0--0-0-0--0--0--0-
+E|-------------------------------------------------------------
+ 
+E|---------------------------------------------------------
+B|-8--8--8--10-10-12-12-10-10-10-13-12-8--10-10-12-12-10---
+G|-9--9--9--11-11-12-12-11-11-11-12-12-9--11-11-12-12-11---
+D|-10-10-10-12-12-12-12-12-12-12-12-12-10-12-12-12-12-12---
+A|---------------------------------------------------------
+E|---------------------------------------------------------
+ 
+E|----------------------------------------------------
+B|--------------------------------------------8-10----
+G|--------------------------------7-9--7-9-10---------
+D|------------------5-7----7-9-10---------------------
+A|-------5-7--5-7-8-----------------------------------
+E|-5-7-8----------------------------------------------
+ 
+E|--------------------------
+B|----------1p0---0---------
+G|-2--2--2------2---2p0-----
+D|----------------------3p2-
+A|--------------------------
+E|--------------------------
+ 
+E|----0----------0------------0----------0---------
+B|----0----------0------------0----------0---------
+G|-2--2---2-2-5--5-----5-5-2--2---2-2-5--5-----5-5-
+D|-2--2---2-2-3--3-----3-3-2--2---2-2-3--3-----3-3-
+A|-0--0---0-0-0--0---0-----0--0---0-0-0--0---0-----
+E|-------------------------------------------------
+ 
+E|-----------------------------------------------
+B|-----------------------------------------------
+G|-2---------------------------------------------
+D|-2---------------------------------------------
+A|-0------0-0--0-----0-0----0-----0-0----0--0----
+E|----4b---------4b------4b---4b------4b------4b-
+ 
+E|------------------------------------------------------------
+B|------------------------------------------------------------
+G|-5------------------------T-----T-----T-------T-----T-------
+D|-3------------------------9p7p5-9p7p5-9p7p5h7-7/17--9p7brp5-
+A|-0------0-0--0-----0-0--------------------------------------
+E|----4b---------4b------4b-----------------------------------
+ 
+E|-----------------------------------------------
+B|-----------------------------------------------
+G|-2---------------------------------------------
+D|-2---------------------------------------------
+A|-0------0-0--0-----0-0----0-----0-0----0--0----
+E|----4b---------4b------4b---4b------4b------4b-
+ 
+E|-------------------------------------------
+B|----------------------------hold-----------
+G|-5------------------------7b-*7r*-----*7b*-
+D|-3--------------------------------*7*------
+A|-0------0-0--0-----0-0---------------------
+E|----4b---------4b------4b------------------
+ 
+VERSE:
+ 
+E|---------------5---------------------------
+B|---------------5---------------------------
+G|-9--x-x-7---5-----5---5--x-5/7--/5--/7\3---
+D|-7--x-x-5---3-----3---3--x-3/5--/5--/7\3---
+A|-------------------------------------------
+E|-------------------------------------------
+ 
+E|---------------5---------------
+B|---------------5---------------
+G|-5--x-x-7---5-----7---1--1/3---
+D|-3--x-x-5---3-----5---1--1/3---
+A|-------------------------------
+E|-------------------------------
+ 
+E|---------------------------
+B|-15-14-13-12-11-10-9-8-7-6-
+G|-14-14-12-12-10-10-8-8-6-6-
+D|---------------------------
+A|---------------------------
+E|---------------------------
+ 
+CHORUS #1:
+ 
+E|-----------------------------------------------
+B|-----------------------------------------------
+G|-2---------------------------------------------
+D|-2---------------------------------------------
+A|-0------0-0--0-----0-0----0-----0-0----0--0----
+E|----4b---------4b------4b---4b------4b------4b-
+ 
+E|---------------------------------------------------
+B|---------------------------------------------------
+G|-5----------------------------<5>---------<7>-<12>-
+D|-3------------------------<5>-----<5>-<7>----------
+A|-0------0-0--0-----0-0-----------------------------
+E|----4b---------4b------4b--------------------------
+ 
+E|-----------------------------------------------
+B|-----------------------------------------------
+G|-2---------------------------------------------
+D|-2---------------------------------------------
+A|-0------0-0--0-----0-0----0-----0-0----0--0----
+E|----4b---------4b------4b---4b------4b------4b-
+ 
+E|--------------------------
+B|--------------------------
+G|-5------------------------
+D|-3------------------------
+A|-0------0-0--0-----0-0----
+E|----4b---------4b------4b-
+ 
+E|------------------------------------------------------
+B|-T-----T-----T-----T------T------T------T------T------
+G|-8p7p5-8p7p5-8p7p5-10p7p5-10p7p5-10p7p5-12p7p5-12/x-5-
+D|------------------------------------------------------
+A|------------------------------------------------------
+E|------------------------------------------------------
+ 
+Now repeat the verse (simile) before going on to:
+ 
+CHORUS #2:
+ 
+E|-----------------------------------------------
+B|-----------------------------------------------
+G|-2---------------------------------------------
+D|-2---------------------------------------------
+A|-0------0-0--0-----0-0----0-----0-0----0--0----
+E|----4b---------4b------4b---4b------4b------4b-
+ 
+E|-----------------------------------------------------
+B|-----------------------------------------------------
+G|-5---------------------------------------------------
+D|-3---------------------------------------------------
+A|-0------0-0--0-----0-0----0----0----0----0----0------
+E|----4b---------4b------4b---4b---3b---2b---1b---1b-0-
+ 
+INTERLUDE #1:
+ 
+E|----------------------------------<12>----
+B|---------1-3/5-3-5/6---6/8---8/10-<12>----
+G|---------------------5-----7------<12>----
+D|-----2---------------------------------x\-
+A|---2---3-------------------------------x\-
+E|-0-------------------------------------x\-
+ 
+E|-----------------------------3------------------------3-------
+B|-----------------------3-2---0------------------3-2---0-------
+G|-2------2------2-------2-2-2-0---2------2-------2-2-2-0-------
+D|-2------2------2-/x\-------2-0---2------2-/x\-------2-0-------
+A|-0-0----0-0----0-/x\-------0-2---0-0----0-/x\-------0-2-------
+E|-----4b-----4b---/x\---------3-------4b---/x\---------3---10\-
+ 
+E|----------------------------------------------------------
+B|------------------------------------#--#--#---------------
+G|-----------------------------7-6b-7-7-/9-/11-11/12--14~-\-
+D|-----4-3b-4--x-x-4-3b-4--4--------------------------------
+A|---------------------------5------------------------------
+E|-x-2------------------------------------------------------
+ 
+E|------------------------------------------------------------
+B|---------------------------------------7p3p0-6p3p0-5p3p0-3~-
+G|--------------------------------7-6b-7----------------------
+D|-----4-3b-4--x-4--x-3b-4------------------------------------
+A|--------------------------x-5-5-----------------------------
+E|-x-2--------------------------------------------------------
+ 
+GUITAR SOLO:
+ 
+E|-------------------------------------------13p10-12p10-
+B|------------#-#-#----------10-13p10-----10-------------
+G|-2--2--4--6-7-9-11-12b-12b----------12b----------------
+D|-2-----------------------------------------------------
+A|-0-----------------------------------------------------
+E|-------------------------------------------------------
+ 
+E|---------------------------------------------12brBRBR--
+B|-------------------------------------------------------
+G|----9-10p9----9------------------------#--#------------
+D|-12--------12---12p10----10---------#--10-12-----------
+A|----------------------12----12b-12--12-----------------
+E|------------------------------------------------------- 
+ 
+the big "B's" represent huge bends using the whammy bar
+
+E|------------------12\------17-20-19-17-19-17-------------
+B|-13brbrp10-13brbr------/20-------------------20-20-19-17-
+G|---------------------------------------------------------
+D|---------------------------------------------------------
+A|---------------------------------------------------------
+E|---------------------------------------------------------
+ 
+E|-------------------------------------------------------------------------
+B|----17-20p17----17-20p17-------------------------------------------------
+G|-19----------19----------19-19p17----19b-17b-19p17----17h19p17----17-----
+D|----------------------------------19---------------19----------19----19--
+A|-------------------------------------------------------------------------
+E|-------------------------------------------------------------------------
+ 
+E|----17br-17------17-17br-17------
+B|-20---------20b-------------20b--
+G|---------------------------------
+D|---------------------------------
+A|---------------------------------
+E|---------------------------------
+ 
+E|---------------------------------------------------
+B|------------12-12h13p12----------------------------
+G|-----14p12--------------14-12h14p12----------------
+D|---x--------------------------------14-13h14p13p12-
+A|-x-------------------------------------------------
+E|---------------------------------------------------
+
+E|---------------------------------#--#-#--#-#--------
+B|--------------------------#--#-#-5-/7-5-/8-7----11--
+G|--------------------------2-/5-4-5-/7-5-/8-7-11-11--
+D|-12--------*12*-----/17\----------------------------
+A|----15--15------15----------------------------------
+E|----------------------------------------------------
+ 
+INTERLUDE #2:
+ 
+**tap harmonics**
+ 
+E|-------------------------------------5----------0-----
+B|---1-----1-----0-----0-------------5---5----------1---
+G|-----2-----2-----2-----2-----------------5/---2-----2-
+D|-2-----2-----2-----2-----2\--4-5------------3---------
+A|------------------------------------------------------
+E|------------------------------------------------------
+ 
+E|---------------------------------------0---
+B|---1-----0-----0-1----------5------------1-
+G|-----2-----2-------2------5---5------2-----
+D|-2-----2-----2--------4-5-------5\-3-------
+A|-------------------------------------------
+E|-------------------------------------------
+ 
+E|----------------------------------0----------
+B|--------------------------------1----1-------
+G|-2----------------------------2--------2-----
+D|-2--------------------------3------------3---
+A|----0--0--0--0-0-0--0--0--0------------------
+E|---------------------------------------------
+ 
+E|-------0-----------------------------------
+B|-----4---4------1--------------------------
+G|---6-------6----2--------------------------
+D|-7-----------7--3--------------------------
+A|-------------------0--0--0--0-0-0--0--0--0-
+E|-------------------------------------------
+ 
+E|-------0-
+B|-----1---
+G|---2-----
+D|-3-------
+A|---------
+E|---------
+ 
+normal
+ 
+E|-------0--------
+B|-----4---4------
+G|---6-------6----
+D|-7-----------7--
+A|----------------
+E|----------------
+ 
+OUTRO:
+ 
+play INTRO PART 2 again, and repeat the last four lines of it (ie the riff
+used in the chorus) 4 times, improvising those little solo parts that come
+at the end of every 2nd line.
+ 
+finally, end with this, played twice:
+ 
+E|----------------------0------------0-0---
+B|----------------------0------------0-0---
+G|-2-2-2-2-2--2-2-2-2-2-5------------5-5-2-
+D|-2-2-2-2-2--2-2-2-2-2-3------------3-3-2-
+A|-0-0-0-0-0--0-0-0-0-0-0--0-0-0-0-0-0-0-0-
+E|-----------------------------------------
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/give_to_live.tab b/guitar/tabs/Van Halen/give_to_live.tab new file mode 100644 index 0000000..918844b --- /dev/null +++ b/guitar/tabs/Van Halen/give_to_live.tab @@ -0,0 +1,290 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / give_to_live.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Received: from animal-farm.nevada.edu (animal-farm.nevada.edu [131.216.1.11]) by redrock.nevada.edu (8.6.4/8.6.4) with ESMTP id WAA24623 for <jamesb@redrock.nevada.edu>; Mon, 6 Dec 1993 22:14:32 -0800
+From: trommer@igd.fhg.de
+Received: from iraun1.ira.uka.de (iraun1.ira.uka.de [129.13.10.90]) by animal-farm.nevada.edu (8.6.4/8.6.4) with SMTP id WAA24184 for <jamesb@nevada.EDU>; Mon, 6 Dec 1993 22:14:24 -0800
+Received: from DNS.FHG.DE by iraun1.ira.uka.de id <23714-0@iraun1.ira.uka.de>;
+          Tue, 7 Dec 1993 07:06:01 +0100
+Received: by fhg.de (DNS.fhg.de) with SMTP; Mon, 6 Dec 93 18:22:02 +0100 
+          from [153.96.1.1]
+Received: by fhg.de (mail-gw.fhg.de) with PRESMTP; Mon, 6 Dec 93 15:43:21 +0100 
+          from FHG-GATEWAY
+Received: by fhg.de (mail-gw.fhg.de) with SMTP; Mon, 6 Dec 93 15:42:58 +0100 
+          from igd.igd.fhg.de
+Received: by igd.fhg.de; Mon, 6 Dec 93 15:43:26 +0100
+X-Mailer-Igd: ## IGD.FHG.DE ## Mon, 6 Dec 93 15:43:26 +0100
+Received: by dakeeper.fhg.de (4.1/SMI-4.1) id AA23869;
+          Mon, 6 Dec 93 15:43:25 +0100
+Date: Mon, 6 Dec 93 15:43:25 +0100
+Message-Id: <9312061443.AA23869@dakeeper.fhg.de>
+To: jamesb@nevada.EDU
+Subject: /VanHalen/GiveToLive.tab
+
+                "Give to Live"
+                by Sammy Hagar
+
+        as played on the Van Halen Live CD
+
+Verse 1:
+
+Em     A                   D                G6  G  G6
+I can see that ...
+
+     A                 D        Dsus4 D Dsus4 D Dsus4 D
+and pain inside ...
+
+Em        A                   D                G6
+So many things have ...
+
+                            A          Fill 1
+So baby, baby,  ....
+
+
+Fill 1:
+e----------------------------------------------0------|
+B----------2-------------2-------------2-------2------|
+G--------2---2---------2---2---------2---2-----2------|
+D------2-------2-----2-------2-----2-------2---2------|
+A----0-----------------------------------------0------|
+E------------------3-------------2--------------------|
+
+
+Chorus:
+
+             D       G
+If you want ...
+
+                       A      Asus4 A Asus4 A
+You've got to ....
+
+             D       G
+If you want ....
+
+                          A         Fill 2
+You've got to ....
+
+D            Em
+If you want ...
+
+         A               Em
+Can you change ...
+
+D                   G
+You've got to give, ....
+
+A
+You've got to ....
+
+
+Fill 2:
+e--------------------|
+B--2-3-2-0-----------|
+G----------2-0-------|
+D--------------4-2-0-|
+A--------------------|
+E--------------------|
+
+
+Verse 2: (same pattern as Verse 1)
+
+
+Chorus
+
+Bridge:
+
+Em                                G6
+Each man's a country...
+
+Em
+Everybody nee....
+
+D                        G6
+One friend, one ...
+
+              A        Fill 1
+No man need ....
+
+
+
+Verse 3 (same pattern as Verses 1 & 2)
+
+
+                 D          G
+But if you ...
+
+                   A      Asus4 A Asus4 A
+You got to ....
+
+             D          G
+If you want ....
+
+                      A           Fill 2
+You got to ...
+
+D            Em
+If you want ...
+
+         A            Em
+Can you change ...
+
+D           G                  A Asus4 A Asus4 A
+If you want love ...
+
+D           G               A             Asus4 A Asus4 A
+If you want love, you want ...
+
+      D                             G                        A     Asus4 A
+You want to love somebody, ....
+
+D                  G
+Give a little bit, give ...
+
+A
+give a little bit, give a ....
+
+D                  G
+Give a little bit, ...
+
+A                                        D
+give a little bit, ...
+
+G        A Asus4 A Asus4 A
+Give to...
+
+       D             G
+You've got to ...
+
+A                                                            D  G  A
+Give a little bit, give a ...
+
+                       D       G       A
+You've got to give to live.
+
+D                   G                 A
+You've got to give, I've got to ...
+
+D     G     A     Fill2  D
+
+
+
+The chords are:
+
+        E A D G B e
+A       X 0 2 2 2 0
+Asus4   X X 2 2 3 0
+D       X X 0 2 3 2
+Dsus4   X X 0 2 3 3
+Em      0 2 2 0 0 0
+G       3 2 0 0 3 3
+G6      3 2 0 0 3 0
+
+This is a really cool song done acoustically.  IMHO, the version on the
+Van Halen Live CD is much better than the version on Sammy's solo album.
+I won't vouch for the accuracy of this transcription, as I am an engineer
+and not a music major...With that in mind, I am welcome to any corrections
+or questions :)
+
+
+/------------------------------------------------------------------------\
+| Matt Trommer              Dept. of Electrical and Computer Engineering |
+| mpt50472@uxa.cso.uiuc.edu University of Illinois at Urbana-Champaign   |
+| trommer@igd.fhg.de        Technische Hochschule Darmstadt              |
+\------------------------------------------------------------------------/
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/hear_about_it_later.tab b/guitar/tabs/Van Halen/hear_about_it_later.tab new file mode 100644 index 0000000..414a42d --- /dev/null +++ b/guitar/tabs/Van Halen/hear_about_it_later.tab @@ -0,0 +1,506 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / hear_about_it_later.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+Date: Tue, 18 Dec 2001 13:05:21 -0500 (EST)
+From: Aaron Lee Goldman <agoldman@wam.umd.edu>
+Subject: v/van_halen/hear_about_it_later.tab
+
+This is a complete tab for Van Halen's "Hear About it Later." Greg J. Musi 
+already did a great tab for the intro, so I just left his part as is, and
+then 
+took over where he left off.
+ 
+Van Halen - "Hear About it Later"
+from Fair Warning
+Transcribed by Greg J. Musi (musi+@pitt.edu)
+Here is the intro...
+                                           
+                                           let
+ring-------------------------}
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------------------------------0-----------|
+D-|-----2-----------2------------------5------------4-----------------4-------|
+A-|-0-----------0-----------0-----/5--------0---5--------------------------5--|
+E-|---------------------------------------------------------------------------|
+    *Clean tone w/flanger.      slide
+                                   
+                                   let ring---------------------}               
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------0---------------0-------------------|
+D-|-----2-----------2------------------4-----4-----------------4--------------|
+A-|-0-----------0-----------0------5------------------------------------------|
+E-|---------------------------------------------------------------------------|
+                                                                               
+                                                let
+ring--------------------}                               
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------------------------------0-----------|
+D-|-----2-----------2------------------5------------4-----------------4-------|
+A-|-0-----------0-----------0-----/5--------0---5--------------------------5--|
+E-|---------------------------------------------------------------------------|
+                                                                              
+                                   let ring---------------------}                                            
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------0---------------0-------------------|
+D-|-----2-----------2------------------4-----4-----------------4--------------|
+A-|-0-----------0-----------0------5------------------------------------------|
+E-|---------------------------------------------------------------------------|
+                                                                               
+           let ring-------------------}          let
+ring---------------------}                         &! nbsp;                                 
+E-|-------------0-------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|--------0----------------------------------------0--------------2---2-----3|
+D-|--------------------2--------3--(3)-----------3-----3--------1-------------|
+A-|----3--------------------------------2--3--------------3-------------------|
+E-|-3--------------------------------------------------------1----------------|
+                                                                             
+                let ring-----}              let
+ring--------------------------                                                 
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------0---------------0-------|
+G-|-2-----------3-------------------------------2---------2-------2------2----|
+D-|-----3---3-------1-----------------------5-----------------5-------------5-|
+A-|---------------------1---------------5-------------------------------------|
+E-|-------------------------1---3---5-----------------------------------------|
+                                                                              
+    -----------}       let ring-----}                                                                           
+E-|-0-------------------------------------------------------------------------|
+B-|-----0---------------------------------------------------------------------|
+G-|---------2^0--------------------0------------------------------------------|
+D-|----------------------------3----------------------------------------------|
+A-|------------------------3-------------2---3---x----------------------------|
+E-|--------------------3------------------------------------------------------|
+            pull off                                                           
+                                                                              
+
+This is where my version takes over:
+ 
+"Hear About it Later"
+tabbed by Aaron Goldman
+aaronlg@hotmail.com 
+ 
+v = wide vibrato with bar
+\\ = dive with bar
+. = palm muted
+# = tremelo picked
+ 
+after the clean-toned intro above, there are two guitars, both
+distorted. the 
+lead guitar plays:
+ 
+E|-5---5--5--5--5------5---------------------
+B|-8b--8b-8b-8b-8br\-5-8b-5-7-5-7-5----------
+G|------------------------5-7-5-7-5-5vv------
+D|----------------------------------7vv-5\\--
+A|-------------------------------------------
+E|-------------------------------------------
+ 
+E|-8----8----8-------------------------------------
+B|-11b--11b--11br-----10---7-----------------------
+G|-----------------/9----9---7---------------------
+D|-----------------------------10vv-7-5-4-5--4-----
+A|---------------------------------------------7-5-
+E|-------------------------------------------------
+ 
+while the rhythm plays:
+ 
+*Rhy. Fig 1*
+ 
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------------------------------0-----------|
+D-|-----2-----------2------------------5------------4-----------------4-------|
+A-|-0-----------0-----------0-----/5--------0---5--------------------------5--|
+E-|---------------------------------------------------------------------------|
+                                 slide                    
+                                   
+                                   let ring---------------------}               
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------0---------------0-------------------|
+D-|-----2-----------2------------------4-----4-----------------4--------------|
+A-|-0-----------0-----------0------5------------------------------------------|
+E-|---------------------------------------------------------------------------|
+
+*End Rhy. Fig 1*
+                                                                               
+                                                let
+ring--------------------}                      &n! bsp;        
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------------------------------0-----------|
+D-|-----2-----------2------------------5------------4-----------------4-------|
+A-|-0-----------0-----------0-----/5--------0---5--------------------------5--|
+E-|---------------------------------------------------------------------------|
+                                                                             
+                                   let ring---------------------}                                            
+E-|---------------------------------------------------------------------------|
+B-|---------------------------------------------------------------------------|
+G-|---------2-----------4-----------------0---------------0-------------------|
+D-|-----2-----------2------------------4-----4-----------------4--------------|
+A-|-0-----------0-----------0------5------------------------------------------|
+E-|---------------------------------------------------------------------------|
+ 
+VERSE:
+Lead guitar takes a break, while rhythm guitar plays:
+
+(note: I'm not sure if the tap harmonics are really what he's doing, only
+that 
+he does something of that nature to raise the octave of those
+notes. Personally,
+I just play the notes normally)
+ 
+*Rhy. Fig 2*
+                     tap harmonics
+E|--------0-2-0-2-2--3(15)-2(14)h3p2-0(12)--------------------------
+B|-3----3---------3-------------------------3(15)-------3(15)-------
+G|-2--2-----------2-------------------------------2(14)-------2(14)-
+D|-0----------------------------------------------------------------
+A|------------------------------------------------------------------
+E|------------------------------------------------------------------
+ 
+E|-0(12)-2(14)----------------------
+B|----------------------------------
+G|----------------------------------
+D|-------------------------5-5-7-5--
+A|---------------5---7-8-8----------
+E|-------------5---5----------------
+ 
+*End Rhy. Fig 2*
+ 
+followed by Rhy. Fig 1, and then this:
+ 
+                               Palm mute
+E|--------0-2-0-2-2--3-2h3p2-0-.---.---0-2-----------------------
+B|-3----3---------3------------3-.-3-.---------------------------
+G|-2--2-----------2--------------2---2---------------------------
+D|-0----------------------------------------------------5-5-7-5--
+A|--------------------------------------------5---7-8-8----------
+E|------------------------------------------5---5----------------
+ 
+and then Rhy. Fig 1 once more.
+ 
+PRECHORUS:
+ 
+Rhythm guitar:
+ 
+*Rhy. Fig 3*
+ 
+E|-----------------------------0------------------0---------------------
+B|---------------------------0------------------0-----------------0-----
+G|-----0-----0-----2---------------------------------------2-2-2----2-0-
+D|---2-----4-----4------------------2-3-3--2-------------1--------------
+A|-3-----5-----5-----5------------3----------3--------------------------
+E|----------------------3-1-------------------------1-3-----------------
+ 
+   all palm muted
+E|-----------------
+B|-----------------
+G|-----------------
+D|---------------.-
+A|-.-.-.-.-.-.-.-0-
+E|-0-0-1-1-2-2-3---
+ 
+*End Rhy Fig 3*
+ 
+CHORUS: play rhy. fig 1 twice
+VERSE: play rhy. fig 2, followed by rhy. fig 1
+PRECHORUS: play rhy. fig 3
+CHORUS: play rhy. fig 1 twice
+ 
+BRIDGE:
+ 
+Rhythm plays:
+   palm mute                    palm mute
+E|-------.-0-------------0------------------------------------------
+B|-----.-1---1---------1---3-1------.-0-1--1-0-------------------3--
+G|---.-0-------0------------------.-2----------2-----------------2--
+D|-.-2-----------2---2----------.-2--------------------------0-2-0--
+A|-3---------------3------------0----------------0-0-2-2-3-3--------
+E|------------------------------------------------------------------
+ 
+   palm mute         palm muting again
+E|-.-.-.-.-.-.------------------.-.-.-.-.-.-.----
+B|-3-3-3-3-3-3--3-3-----------3-3-3-3-3-3-3-3----
+G|-2-2-2-2-2-2--2-2-----------2-2-2-2-2-2-2-2----
+D|-0-0-0-0-0-0--0-0-.-.-.-.-.-0-0-0-0-0-0-0-0----
+A|------------------3-3-3-2-3-----------------7\-
+E|-----------------------------------------------
+ 
+And the lead guitar returns in this section, playing:
+ 
+                            trem picking
+E|---------------------------------------------
+B|--------------------------#---#--#--#--------
+G|-7b~~~~-7~~-5~~----5---7~~7-/19-19b-19B*-x\--
+D|----------------/7---7-------------------x\--
+A|-----------------------------------------x\--
+E|---------------------------------------------
+ 
+*: in case it's unclear, you hold that bend as you tremelo pick the 19, 
+and then you bend it even further while continuing to trem pick
+ 
+GUITAR SOLO:
+ 
+for a few bars, there is no guitar whatsoever as the drum and bass set 
+up the mood or whatever. then, the lead guitar comes in with:
+ 
+                     palm mute                               palm mute
+E|---------------------------------------------------------------------
+B|-------------------.-.-.--.-.-.--------------------------------------
+G|-------------------9-9-9--7-7-7---9-7----------------------.--.-.-.--
+D|--------------------------------------0-0------------------0--0-0-0--
+A|-5---7-7-5-7-7-5----------------------------7-7-5-7-7-5br------------
+E|---------------------------------------------------------------------
+ 
+    T       T       T       T        T       T      T       T
+E|-14p10p7-14p10p7-14p10p7-14p10p7---14p10p7-14*---14p10p7-15---
+B|--------------------------------------------------------------
+G|--------------------------------------------------------------
+D|--------------------------------------------------------------
+A|--------------------------------------------------------------
+E|--------------------------------------------------------------
+ 
+*: all these tapped notes with space after them are sustained notes, so 
+keep your tapping finger held down
+ 
+    T      T     T      T
+E|-14p10p7-14---14p10p7-12brp10*----------12-------------------------
+B|-------------------------------------12----------------------------
+G|---------------------------------14b-------14brp12----14-12-12br\--
+D|---------------------------------------------------14--------------
+A|-------------------------------------------------------------------
+E|-------------------------------------------------------------------
+ 
+*: do an rh tap the 12th fret as normal. then, while holding down the 12th
+fret with your right hand, bend the string with your left. then you
+release the bend and pull off the tapped note
+ 
+                         palm mute
+E|-----0-----------------------------------12---------------------------------
+B|-----------0---------------.---7b-7b--------12-15---------------------------
+G|--2b---12\---2brp0-2-----.-9-.-------9~-----------14-15-14-12----12brb^rbr*-
+D|-----------------------.-9---9--------------------------------14------------
+A|-----------------------7----------------------------------------------------
+E|----------------------------------------------------------------------------
+ 
+*: the second bend is made bigger with whammy bar
+ 
+                     AH
+E|-------------------------------
+B|---4-----3---------------------
+G|------3-----2brp0-<2brbrb>/----
+D|-------------------------------
+A|-------------------------------
+E|-------------------------------
+ 
+          T        T        T
+E|-12h15-19p15p12-19p15p12-19p15p12--T--------T-------
+B|----------------------------------19p15p12-19p15p12-
+G|----------------------------------------------------
+D|----------------------------------------------------
+A|----------------------------------------------------
+E|----------------------------------------------------
+ 
+     T        T        T                              hold bend
+E|--19p15p12-19p15p12-19p15p12--T--------T------------------------------
+B|-----------------------------19p15p12-19p15p12---------15-------------
+G|------------------------------------------------12h14b----14r-12-14---
+D|----------------------------------------------------------------------
+A|----------------------------------------------------------------------
+E|----------------------------------------------------------------------
+ 
+E|-12-14-15-15-17-15-17-17-19-17-19-19-20-19-20-20-22-20-22-22b-
+B|--------------------------------------------------------------
+G|--------------------------------------------------------------
+D|--------------------------------------------------------------
+A|--------------------------------------------------------------
+E|--------------------------------------------------------------
+ 
+BRIDGE: both guitars basically repeat what they did the previous bridge, 
+and then rhythm plays:
+ 
+   all palm muted
+E|-----------------
+B|-----------------
+G|-----------------
+D|---------------.-
+A|-.-.-.-.-.-.-.-0-
+E|-0-0-1-1-2-2-3---
+ 
+OUTRO CHORUS:
+ 
+Rhythm guitar does nothing for a while, and lead plays the following:
+ 
+E|-5---5--5--5--5------5---------------------
+B|-8b--8b-8b-8b-8br\-5-8b-5-7-5-7-5----------
+G|------------------------5-7-5-7-5-5vv------
+D|----------------------------------7vv-5\\--
+A|-------------------------------------------
+E|-------------------------------------------
+ 
+E|-8----8----8------------------------
+B|-11b--11b--11br-----10---7----------
+G|-----------------/9----9---7--------
+D|-----------------------------10vv---
+A|------------------------------------
+E|------------------------------------
+ 
+        AH
+E|---------------------------------
+B|-----<12>-13-15-12---------------
+G|---x---------------12----12-12b--
+D|-x--------------------14---------
+A|---------------------------------
+E|---------------------------------
+ 
+At this point, the rhythm guitar enters with Rhy. Fig 1 as the lead 
+continues. I think the rhythm guitar eventually goes up an octave, 
+but it's not that important.
+ 
+E|-----20-------------------------------------------
+B|-20b----20b~~~r-----------------------------------
+G|--------------------14----12----------------------
+D|----------------/14----12----12-12-10-10--12p10\\-
+A|--------------------------------------------------
+E|--------------------------------------------------
+ 
+E|-8--~~~-10---12---15b------------------------
+B|-11b~~~-13b--15b-----------------------------
+G|-----------------------7-7p5-5~~-------------
+D|-----------------------7-7---7~~-10tr0---/7\-
+A|---------------------------------------------
+E|---------------------------------------------
+ 
+                                  palm muted
+E|-5-~~~-8----10---12-----------------------------
+B|-8b~~~-11b--13b--15b------------------------.---
+G|----------------------7-7p5-5~~-.-.-.-.---.-5-.-
+D|----------------------7-7---7~~-7-5-7-5---7---7-
+A|------------------------------------------------
+E|------------------------------------------------
+ 
+now, the rhythm guitar plays:
+ 
+E|-------2-2-2-2-2--------2-2-2-2-2--------2-2-2-2-/17-----
+B|-------3-3-3-3-3--------3-3-3-3-3--------3-3-3-3-/17-----
+G|-x-x---2-2-2-2-2--x-x---2-2-2-2-2--x-x---2-2-2-2-/18---2-
+D|-x-x-0-0-0-0-0-0--x-x-0-0-0-0-0-0--x-x-0-0-0-0-0-/19---2-
+A|-------------------------------------------------/19---0-
+E|-------------------------------------------------/17-----
+ 
+while the lead plays:
+ 
+E|-------7--------------12--------------19------------------
+B|----8-----8--------13----13--------20----20----20/22------
+G|-7-----------7\-12----------12\-19----------19----------2-
+D|--------------------------------------------------------2-
+A|--------------------------------------------------------0-
+E|----------------------------------------------------------
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/hot_for_teacher.tab b/guitar/tabs/Van Halen/hot_for_teacher.tab new file mode 100644 index 0000000..e7c8ea6 --- /dev/null +++ b/guitar/tabs/Van Halen/hot_for_teacher.tab @@ -0,0 +1,460 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / hot_for_teacher.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Subject: TAB: Hot For Teacher - Van Halen
+
+Posted by: <RJS145@psuvm.psu.edu> ()
+
+It'd be hard to put it all, but ill put a few parts of it that are cool...
+
+Intro:
+
+A string: -0-3-7-12-7-3-  (four x)  -0-5-9-12-9-5-  (four x)
+
+   - play the indicated patterns tapping on the A string:  use the 1st
+     and 4th fingers for the notes on frets 3 & 7 and 5 & 9 and tap the
+     note on the 12th fret with the right hand finger....
+
+Play same exact pattern as before on the D string but end with the tapped note
+   (youll have to listen to it to get the jist...)
+
+G str: -0-3-7-12-7-3-0-3-7-12-7-3-0-5-9-12-9-5-0-5-9-12-9-5- (two times but
+   end with the last tapped note --------------------^
+   - again, tap the notes on the 12th fret..
+
+high E -12-7-12-8-7-12-5-
+                       B: -12-8-7-5-
+                                   G: -12-8-7-5-
+                                               D: -12-8-7-5-
+                                                           A: -12-8-7-5-
+this lick is a fretboard pattern that is the same on each string down the
+neck..  tap the notes on the 12th fret and pull off the rest..  work your way
+from the high E string down to the A string..
+
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+-2----5-4----5-4----2\1-2------10-7-4----1-2-1/2----5-4--5-4-2\1------------2-
+-2----5-4----5-4----2\1-2------10-7-4----1-2-1/2----5-4--5-4-2\1--2-2-2-2-2-2-
+------------------------------------------------------------------2-2-2-2-2-0-
+-2-----------------------2----------------------2-----------------0-0-0-0-0---
+
+listen to it for tempo... at each f# played on the low E string, play it in
+eighth notes until the next chord....  the \ denotes a slide.... this carries
+you into the main theme to the song which is based on the A chord .....dont
+have time to put it in but see if u can figure it out...  it uses pulloffs
+at the 5th fret of G str first time and pull offs from 3rd fret to open on the
+A str when it kicks in....   have fun..  Rob
+
+
+From: Gary Chapman <scary@zikzak.apana.org.au>
+
+Van Halen - Hot For Teacher    - transcribed by Gary Chapman
+===========================
+
+Key:
+
++   = tapped note
+X\  = pick slide
+x   = hit string for percussive noise
+^   = hammer/pull
+/   = slide
+~   = vibrato
+w~  = whammy vibrato
+<>  = natural harmonic
+/// = high-speed picking
+
+---
+
+Intro:
+
+(I've deliberately left out hammer/pull notation because they are too 
+obtrusive in such numbers.  I've given an example of what to do) 
+
+             +            +            +            +
+E ---------------------------------------------------------
+B ---------------------------------------------------------
+G ---------------------------------------------------------
+D ---------------------------------------------------------
+A -X\--0^3^7-12^7^3^0^3^7-12-7-3-0-3-7-12-7-3-0-3-7-12-7-3-
+E ---------------------------------------------------------
+
+         +            +            +            +
+E ---------------------------------------------------
+B ---------------------------------------------------
+G ---------------------------------------------------
+D ---------------------------------------------------
+A -0-5-9-12-9-5-0-5-9-12-9-5-0-5-9-12-9-5-0-5-9-12-9-
+E ---------------------------------------------------
+
+   +        +            +            +            +
+E --------------------------------------------------------
+B --------------------------------------------------------
+G --------------------------------------------------------
+D -12-0-3-7-12-7-3-0-3-7-12-7-3-0-3-7-12-7-3-0-3-7-12-7-3-
+A --------------------------------------------------------
+E --------------------------------------------------------
+
+        +            +            +
+E ---------------------------------------
+B ---------------------------------------
+G ---------------------------------------
+D -0-5-9-12-9-5-0-5-9-12-9-5-0-5-9-12-9~-
+A ---------------------------------------
+E ---------------------------------------
+   +      +            +            +            +            +            +
+E ----------------------------------------------------------------------------
+B ----------------------------------------------------------------------------
+G -12-3-7-12-7-3-0-3-7-12-7-3-0-5-9-12-9-5-0-5-9-12-9-5-0-3-7-12-7-3-0-3-7-12-
+D ----------------------------------------------------------------------------
+A ----------------------------------------------------------------------------
+E ----------------------------------------------------------------------------
+             +
+E -----------------
+B -----------------
+G -7-3-0-5-9-12-9~-
+D -----------------
+A -----------------
+E -----------------
+
+   +      +          +          +          +
+E -12-5-8-12-8-7-5---------------------------------------------------------
+B -----------------8-12-8-7-5----------------------------------------------
+G ----------------------------8-12-8-7-5---------------------2-------------
+D ---------------------------------------8-12-8-7-5----------2-------------
+A ---------------------------------------------------8-7-5-0-0-------------
+E -------------------------------------------------------------------------
+
+E ------------------------------------------------------------------------- 
+B ------------------------------------------------------------------------- 
+G ----------------5--4-------1--2--1-/2--1/2------------------------------- 
+D ----------------5--4-------1--2--1-/2--1/2------------------------------- 
+A ------------------------------------------------------------------------- 
+E -2-2--2-2--2-2-----------2-------------------2-2--2-2--2-2--2-2--2-2--2/-   
+
+E ---------------------------------------------------------------------------
+B ---------------------------------------------------------------------------
+G -10\--7--4---1--2--1/2----------------------------5--4-4-------1--2--1-/2--
+D -10\--7--4---1--2--1/2----------------------------5--4-4-------1--2--1-/2--
+A ---------------------------------------------------------------------------
+E -------------------------2--2-2--2-2--2-2--2-2--2-----------2--------------
+
+E ---------------
+B ---------------
+G -4--4---4----5-
+D -4--4---4----2-
+A -4--4---4----0-
+E -0--0---0------
+
+
+Main riff (clean):
+
+E -----------------------------------------------------
+B -----------------------------------------------------
+G -5---5^2---2---5---5^2-2---5^2-----------5--8\7---2--
+D -2---2-----2---2---2---2---2-------------5--8\7---2--
+A ---------------------------------0^5^6^7------------- 
+E ----------------------------------------------------- 
+  (repeat clean riff x 3) 
+  "Oh wow man... wait a second, man - .....
+  "My butt, man !"
+
+E ---------------------------------------
+B ---------------------------------------
+G -5---5^2---2---5---5^2-2---5---5^2---0-
+D -2---2-----2---2---2---2---2---2-----0-
+A ---------------------------------------
+E ---------------------------------------
+                                      "Ohhhh !"
+
+
+Main riff (distorted):
+
+E ------------------------------------------------
+B ------------------------------------------------
+G -2----------2----------2-----------------5--8\7-
+D -2----------2----------2-----------------5--8\7-
+A -0---3-3-0--0---3-3-0--0---3-0---0^5^6^7--------
+E ------------------------------------------------
+
+Verse 1:
+
+(with distorted riff)
+T-t-teacher stop that screamin'.....
+
+E ----------------------------------------------------------------------------- 
+B --------------------------------------------8--7--5--------------------------
+G -2----------2----------2-----------------5--8--7--5--7-----------------------
+D -2----------2----------2-----------------5--8--7--5--7-----------------------
+A -0---3-3-0--0---3-3-0--0---------0-5^6^7-------------------------------------
+E ---------------------------------------------------------------------------
+  
+   Teacher needs to see me ...
+
+
+E -------------------------------------------------------------------------10-
+B ----------------------------------------------------------12--10----12-x-10-
+G -------------------------13--12--10--12-------------------12--10----12-x-10-
+D -------------------------13--12--10--12-------------------12--10----12-x----
+A ---X\-----------------------------------------------------------------------
+E ----------------------------------------------------------------------------
+
+  education that I missed...
+
+
+E ----------------------------------------------------------------------
+B -12-x-12\-----------------------10------9-------8---7---6---5---4---5-
+G -12-x-12\---------------10------9-------8-------7---6---5---4---3---4-
+D -12-x-12\-----------8---8---7---7---6---6---5---5---4---3---2---1---2-
+A ----------------------------------------------------------------------
+E ----------------------------------------------------------------------
+
+  quite like this...
+
+
+Chorus:
+
+(with distorted riff)
+bad, got it bad, got ...
+(with clean riff)
+"Hey, I heard you missed ....
+
+Verse 2:
+
+(with distorted riff)
+I heard about your lessons....
+
+E --------------------------------------------------------------------------- 
+B ------------------------------------------8--7--5--------------------------
+G -2---------2---------2-----------------5--8--7--5--7----------<7><7>-------
+D -2---------2---------2-----------------5--8--7--5--7-----------------<7>---
+A -0---3-3-0-0---3-3-0-0---------0-5^6^7-------------------------------------
+E ---------------------------------------------------------------------------
+  
+   How did you know that golden ...
+
+E --------------------------------------------------------------------10------
+B ------<7>----------------13--12--10--12-----------------------------10---12-
+G --<7>---------<7>--------13--12--10--12-----------------------------10---12-
+D ----------<7>------------13--12--10--12----------------------------------12-
+A ------------------------------------------------------X\--------------------
+E ----------------------------------------------------------------------------
+
+  education that I missed...
+
+E ---10------------------------------------------------------------------
+B -x-10---12\--------------11------10------9-------8---7---6---5---4---5-
+G -x-10---12\--------------10------9-------8-------7---6---5---4---3---4-
+D -x------12\----------8---8---7---7---6---6---5---5---4---3---2---1---2-
+A -----------------------------------------------------------------------
+E -----------------------------------------------------------------------
+
+  quite like this...
+
+
+Chorus:
+
+(with distorted riff)
+bad, got it bad, got it ....
+
+   +      +          +          +          +
+E -12-5---12-8-7-5-------------------------------------------
+B ------8----------8-12-8-7-5--------------------------------
+G ----------------------------8-12-8-7-5---------------------
+D ---------------------------------------8-12-8-7-5----------
+A ---------------------------------------------------8-7-5-0-
+E -----------------------------------------------------------
+        ^ I think he hit a wrong note here
+
+Solo:
+
+E -----------------------------------------------------
+B -----------------------------------------------------
+G -4(b)6~----2^4///-6///-9///-11///-13///-14///--14w~\-
+D -----------------------------------------------------
+A -----------------------------------------------------
+E -----------------------------------------------------
+
+E /14---------14----------------------14--------------------------------------
+B ----17(b)19----14^17^14-14-14^17^14----14^17^14---------14------------------
+G ------------------------------------------------16(b)18----16(b)18-16-14-16-
+D ----------------------------------------------------------------------------
+A ----------------------------------------------------------------------------
+E ----------------------------------------------------------------------------
+
+              [pinched harmonics abound]
+E ------------------------------------------2------2-2-----------------------
+B -14-------------------------------------2---5^2------5^2--5-5^2^0--5-5^2^0-
+G ----16w~\----2--2--2(b)3--2----2-4--(b)6-----------------------------------
+D -----------------------------4---------------------------------------------
+A ---------------------------------------------------------------------------
+E ---------------------------------------------------------------------------
+
+E ---------------------------------2--------2----------------------
+B -5-5^2^0--5-5^2^0--5-5^2^0--5(7)---5^2----2---2------------------
+G ---------------------------------------5--------4-2--4-2---2w~/\-
+D ---------------------------------------------------------4-------
+A -----------------------------------------------------------------
+E -----------------------------------------------------------------
+
+E -------------------------------------------14--14-------14-----14--16^14-
+B ------------------------------14--17--17(b)19-----(b)19---(b)19----------
+G -2~-4--5--6~---9--11--13--14---------------------------------------------
+D -------------------------------------------------------------------------
+A -------------------------------------------------------------------------
+E -------------------------------------------------------------------------
+
+E -17^14--19^14----17^14----17--16--17--16^17^16-14----14-------------
+B --------------14------14--------------------------17----17--17(b)19-
+G --------------------------------------------------------------------
+D --------------------------------------------------------------------
+A --------------------------------------------------------------------
+E --------------------------------------------------------------------
+
+E--------------------14--------------------------------------------------------
+B -------------------14-17^14--------------------------------------------------
+G -14^17^14--16(b)18----------16(b)18---16(b)18-(b)18-16-16-14-16---16-16-14~\-
+D -----------------------------------------------------------------------------
+A -----------------------------------------------------------------------------
+E -----------------------------------------------------------------------------
+
+E -------2----------------------------------------------------------------
+B -------2---------2------------5--------7--------------------------------
+G -2(b)4---(b)4^2----2---4(b)6--7(b)9----9(b)11w~-----------------------5-
+D ---------------------------------------------------2---2----2---2-----2-
+A -------------------------------------------------\-2---2----2---2-----0-
+E -------------------------------------------------\-0---0----0---0-------
+
+(with clean riff)
+"Oh man, I think the....
+
+(with distorted riff)
+I've got it bad, got ...
+
+E -----------------
+B -11--12--13--14\-
+G -11--12--13--14\-
+D -11--12--13--14\-
+A -----------------
+E -----------------
+                      Ohhh !   
+   Oh  yes I'm ...
+
+E ----------------------------------------------------------------------------
+B -------------------3--------------------------------------------------------
+G -------------------0///--2///--4///-5///--7///-/12///-14///-16///-17///-19///
+D -14///-------------0--------------------------------------------------------
+A --------------X\------------------------------------------------------------
+E ----------------------------------------------------------------------------
+         Oh my ...
+
+                     [I suspect these are 
+                      done with fingers on 
+                      alternating hands]
+E ----------------------------------------------------------------------------
+B --------------------------------------------2///-----5///--7///-/14///------
+G -/21///(b)24///w~\--/18-/18-/18-/18-/18-----2///-----5///--7///-/14///----2-
+D --------------------------------------------2///-----5///--7///-/14///----2-
+A -----------------------------------------\--0///--------------------------0-
+E ----------------------------------------------------------------------------
+
+---
+
+Mr.Scary (Gary Chapman)
+-------------------------
+scary@zikzak.apana.org.au
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/house_of_pain.prj b/guitar/tabs/Van Halen/house_of_pain.prj new file mode 100644 index 0000000..fc7efac --- /dev/null +++ b/guitar/tabs/Van Halen/house_of_pain.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=D:\work\guitar\van halen\house_of_pain_imp.tab +TYPES=(0,4)(1,4)(2,4)(3,4)(4,4)(5,4)(6,4)(7,4)(8,4)(9,4)(10,4)(11,4)(12,4)(13,4)(14,4)(15,4)(16,4)(17,4)(18,4)(19,4)(20,4)(21,4)(22,4)(23,4)(24,4)(25,4)(26,4)(27,4)(28,4)(29,4)(30,4)(31,4)(32,4)(33,4)(34,4)(35,4)(36,4)(37,4)(38,4)(39,4)(40,4)(41,4)(42,4)(43,4)(44,4)(45,4)(46,4)(47,4)(48,4)(49,4)(50,4)(51,4)(52,4)(53,4)(54,4)(55,4)(56,4)(57,4)(58,4)(59,4)(60,4)(61,4)(62,4)(63,4)(64,4)(65,4)(66,4)(67,4)(68,4)(69,4)(70,4)(71,4)(72,4)(73,4)(74,4)(75,4)(76,4)(77,4)(78,4)(79,4)(80,4)(81,4)(82,4)(83,4)(84,4)(85,4)(86,4)(87,4)(88,4)(89,4)(90,4)(91,4)(92,4)(93,4)(94,4)(95,4)(96,4)(97,4)(98,4)(99,4)(100,4)(101,4)(102,4)(103,4)(104,4)(105,4)(106,4)(107,4)(108,4)(109,4)(110,4)(111,4)(112,4)(113,4)(114,4)(115,4)(116,4)(117,4)(118,4)(119,4)(120,4)(121,4)(122,4)(123,4)(124,4)(125,4)(126,4)(127,4)(128,4)(129,4)(130,4)(131,4)(132,4)(133,4)(134,4)(135,4)(136,4)(137,4)(138,4)(139,4)(140,4)(141,4)(142,4)(143,4)(144,4)(145,4)(146,4)(147,4)(148,4)(149,4)(150,4)(151,4)(152,4)(153,4)(154,4)(155,4)(156,4)(157,4)(158,4)(159,4)(160,4)(161,4)(162,4)(163,4)(164,4)(165,4)(166,4)(167,4)(168,4)(169,4)(170,4)(171,4)(172,4)(173,4)(174,4)(175,4)(176,4)(177,4)(178,4)(179,4)(180,4)(181,4)(182,4)(183,4)(184,4)(185,4)(186,4)(187,4)(188,4)(189,4)(190,4)(191,4)(192,4)(193,4)(194,4)(195,4)(196,4)(197,4)(198,4)(199,4) diff --git a/guitar/tabs/Van Halen/house_of_pain.tab b/guitar/tabs/Van Halen/house_of_pain.tab new file mode 100644 index 0000000..d921979 --- /dev/null +++ b/guitar/tabs/Van Halen/house_of_pain.tab @@ -0,0 +1,116 @@ +HOUSE OF PAIN +Van Halen,1984 +tab by dsale@jax.jaxnet.com + + +This is a great tune that is easy to play yet rocks HARD i thought i would +tab out.Most of its here,exept for part of the solo and the 'uh uhhhh..' +part.. +First the intro.. + +------------------------------------------------------| +-----5h4-------5h4--2----------------5h4-----------2--| +1h2--5h4--1h2--5h4--2-----------1h2--5h4-----------2--| +1h2--5h4--1h2--5h4--2--x--x--x--1h2--5h4--x--x--x--2--| +------------------------------------------------------| +------------------------------------------------------| + +This next part is also played during the chorus. + + +----------------------------------------------------------------------| +-------------------------------------------------------------------3--| +--------------------2----------------------------------------------0--| +--------------------2----------------------------------------------0--| +--------------------0--0--0--3--4-------------------------------------| +0h2--2--2--2--2--2-----------------0h2--2--2--2--2--2--2--2--2--2-----| + + + 1/2 +----------------------------------------t------t------t-------t------| +-----------------------------------/---------------------------------| +--------------------2--------------5--(10)h5--(8)h5--(13)h5--(12)h5--| +--------------------2------------------------------------------------| +--------------------0--0--0--3--4------------------------------------| +0h2--2--2--2--2--2---------------------------------------------------| + + +repeat that again,then end w/: the verses: + + + Say you.. Cause i always.. +---------------------------------------|---------------------------------| +---------------------------------------|---------------------------3--2--| +---------------------------------------|---------------------------2--2--| +---------------------------------------|--4------------------------------| +-----------------------------0--5h4h0--|--2-\----------------------------| +0h2--2--2--2--1--1--1--0--0------------|---------------------------------| + + + + + + i always.. Gonna pack.. +------------------5--|---------2--|-------------------------------| +3--3--5--5--6--6--6--|------4--3--|-------------------------------| +2--2--4--4--5--5--5--|------4--2--|--7h4-----9~~~------9h7-----7--| +---------------------|------4-----|--7-4--9--9---------9h7--------| +---------------------|------2-----|-------9-----------------9-----| +---------------------|------------|-------------------------------| + + + +----------------------|----------------------------| +----------------------|--4-------------------------| +9h7-----7-------------|--4--2-----2----------------| +-----9-----9-h--7~~~--|--4-----4-----4--3--2-------| +----------------------|----------------------------| +----------------------|-----------------------0h2--| + + then it goes back into the chorus,another verse,then the chorus and then: + + + 1/2 1/2 now the solo:(what i could make outta it.) +-/---------/-------------|-----------------------------| +/------------------------|--------4--5--9--10-*15--14--| *full +4h2--4h2--4h2--4h2--4h2--|-----------------------------| +-------------------------|-----6-----------------------| +-------------------------|--4--------------------------| +-------------------------|-----------------------------| + + + +---------------------------------------------------------| +9--10--12-----9--10--12-----9h10h12--12h14h12--12h14h10--| +-------14~~~---------14~~~-------------------------------| +---------------------------------------------------------| +---------------------------------------------------------| +---------------------------------------------------------| + + + +------------------------------|----------------------------------------| +------------------------------|----------------------------------------| +------------------------------|---------------------------------------\| +4--5--6--7--8--9--10--11--12--|----------------------------------------| +2--3--4--5--6--7--8---9---10--|----------------------------------------| +------------------------------|--0--0--0--0--0--0--0--0--0--0--0--0--0-| + + + harm. +-----------------------------|-------------------------------------| +15~~~--14h15-*17-*17--19~~~--|--5--7h8h12h13h14h15h16h17h18h19--8--| +-----------------------------|-------------------------------------| +-----------------------------|-------------------------------------| +-----------------------------|-------------------------------------| +-----------------------------|-------------------------------------| + + + +15h12--17h15h14h12------------------15h12--17h15h14h12--14/12------------------- +--------------------19h15h19h17h15---------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + diff --git a/guitar/tabs/Van Halen/house_of_pain_imp.tab b/guitar/tabs/Van Halen/house_of_pain_imp.tab new file mode 100644 index 0000000..76cb38a --- /dev/null +++ b/guitar/tabs/Van Halen/house_of_pain_imp.tab @@ -0,0 +1,64 @@ +%TabMaster v2.00r% + + +E|----------------------------------------------------------------------- +B|------5-h4------5-h4-2------5-h4-2------------------------------------- +G|-1-h2-5-h4-1-h2-5-h4-2-1-h2-5-h4-2----------------2-------------------- +D|-1-h2-5-h4-1-h2-5-h4-2-1-h2-5-h4-2----------------2-------------------- +A|--------------------------------------------------0-0-0-3-4------------ +E|-----------------------------------0-h2-2-2-2-2-2-----------0-h2-2-2-2- + + + +E|------------------------------------------------------------------------ +B|-------------3---------------------------------------------------------- +G|-------------0----------------2---------5-10-h5-8-h5-13-h5-12-h5-------- +D|-------------0----------------2----------------------------------------- +A|------------------------------0-0-0-3-4--------------------------------- +E|-2-2-2-2-2-2---0-h2-2-2-2-2-2------------------------------------0-h2-2- + + + +E|-------------------------------------------5---2------------------- +B|---------------------------3-2-3-3-5-5-6-6-6-4-3------------------- +G|---------------------------2-2-2-2-4-4-5-5-5-4-2-7-h4---9-9-h7---7- +D|-------------------------4-------------------4---7----9-9-9-h7----- +A|---------------0-5-h4-h0-2-------------------2--------9--------9--- +E|-2-2-1-1-1-0-0----------------------------------------------------- + + + +E|---------------------------------------------------------------------- +B|--------------4----------------------------------------------4-5-9-10- +G|-9-h7---7-----4-2---2------------4-2-4-h2-4-h2-4-h2-4-h2-------------- +D|------9---9-7-4---4---4-3-2--------------------------------6---------- +A|---------------------------------------------------------4------------ +E|----------------------------0-h2-------------------------------------- + + + +E|-------------------------------------------------------------------------------------- +B|-15-14-9-10-12-9-10-12-9-h10-h12-12-h14-h12-12-h14-h10-------------------------------- +G|------------14------14---------------------------------------------------------------- +D|-------------------------------------------------------4-5-6-7-8-9-10-11-12----------- +A|-------------------------------------------------------2-3-4-5-6-7-8--9--10----------- +E|----------------------------------------------------------------------------0-0-0-0-0- + + + +E|-----------------------------------------------------------------------------15-h12-17-h15-h14- +B|-----------------15-14-h15-17-17-19-5-7-h8-h12-h13-h14-h15-h16-h17-h18-h19-8------------------- +G|----------------------------------------------------------------------------------------------- +D|----------------------------------------------------------------------------------------------- +A|----------------------------------------------------------------------------------------------- +E|-0-0-0-0-0-0-0-0------------------------------------------------------------------------------- + + + +E|-h12--------------------15-h12-17-h15-h14-h12-14-s12- +B|-----19-h15-h19-h17-h15------------------------------ +G|----------------------------------------------------- +D|----------------------------------------------------- +A|----------------------------------------------------- +E|----------------------------------------------------- + diff --git a/guitar/tabs/Van Halen/humans_being.tab b/guitar/tabs/Van Halen/humans_being.tab new file mode 100644 index 0000000..48a8dba --- /dev/null +++ b/guitar/tabs/Van Halen/humans_being.tab @@ -0,0 +1,375 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / humans_being.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+
+
+From c9609436@alinga.newcastle.edu.au Fri May 16 08:13:10 1997
+Date: Fri, 16 May 1997 09:23:56 +1000 (EST)
+From: The Loan Arranger <c9609436@alinga.newcastle.edu.au>
+To: OLGA - Submissions <guitar@olga.net>
+Subject: TAB : Human's Being - Van Halen
+
+        Humans Being
+
+Van Halen
+"Twister Soundtrack"  "Best of, Vol 1"
+       
+Performance Notes: Tune down half step - semitone       
+
+(Starts at 1:56 on CD)       
+       3                            3                        w/bar
+    -------  Em                  -------  C                 /\/\/
+e-----------|---------|------------------|-----------------/-----|
+b-----------|---------|------------------|-----------------\-----|
+g---9/11/12-|-11/12---|----\-----9/12/16\|14\12--12--\--11-/11---|
+d-----------|---------|------------------|-----------------\-----|
+a---7/9-/10-|-9/-10---|----\-----7/10/14\|12\10--10--\--9--/9----|
+e-----------|---------|-------7----------|-----------------------|
+
+ D                -1           -1  Em
+ \/\/\/\/         \/           \/           dive w/bar -2 and a half
+e---------------------------------|----------------------|
+b---------------------------------|----------------------|
+g---------(11)-12\11---(11)\7///9-|-(9)---(9)\\----------|
+d---------------------------------|----------------------|
+a----------(9)-10\9-----(9)\5///7-|-(7)---(7)\\----------|
+e---------------------------------|----------------------|
+           3     Am
+        -------                  1/2    1/2
+e---------------|----------------)-|-(---)--(----------------------|
+b---------------|----------------)-|-(---)--(----------------------|
+g-------9/12/16-|-(16)/21--------)-|-(---)--(----------------------|
+d---------------|----------------)-|-(---)--(----------------------|
+a-------7/10/14-|-(14)/19------21--|--(21)---(21)p19-19-(19)\17/19-|
+e----7----------|------------------|-------------------------------|
+           3          3                                 3
+ Em    -------- --------------                       -------
+e-----------------------------|------------------------------|
+b-----------------------------|------------------------------|
+g-----------------------------|----------------------9/12/16-|
+d-----------------------------|------------------------------|
+a-(17)/19\14/17\12-(12)/14-/\/|\/\/\/\/\/\-(14)\-----7/10/14-|
+e-----------------------------|-------------------7----------|
+
+ C                            D
+e----------------------------|----------------------------|
+b----------------------------|----------------------------|
+g-14\12--12--(12)\11---11/\/\|/\/\/\-(11)/12\11--(11)\9\7\|
+d----------------------------|----------------------------|
+a-12\10--10--(10)\9----9-/\/\|/\/\/\-(9)-/10\9---(9)-\7\5\|
+e----------------------------|----------------------------|
+                                 3
+ Em                           -------    Am
+e------------(0)--|---------------------|------------------|
+b-----------------|---------------------|------------------|
+g\4---------------|----/9-----9/12/16---|-14\12--12---11---|
+d-----------------|---------------------|------------------|
+a\2---------------|----/7-----7/10/14---|-12\10--10---9----|
+e-----------------|--------7------------|------------------|
+
+
+e---------------------------|------------------------|
+b---------------------------|------------------------|
+g-(11)/12\11/12\11/12\11/12\|11/12\11/12\11/12\11/12\|
+d---------------------------|------------------------|
+a-(9)-/10\9-/10\9-/12\9-/10\|9-/10\9-/10\9-/10\9-/10\|
+e---------------------------|------------------------|
+
+                           C
+  /----------------------------  + half (pull bar up
+   w/fdbk ad lib.                /\ /\ /\ /\ /\ /\
+e-------------------------|------------------------|
+b-------------------------|------------------------|
+g-11/12\11/12\11/12\11/12\|11/12-11-12-11-12-11-12-|
+d-------------------------|------------------------|
+a-9-/10\9-/10\9-/12\9-/10\|9-/10-9--10-9--10-9--10-|
+e-------------------------|------------------------|
+
+ D                         Em
+  similie
+  /\ /\ /\ /\ /\ /\ /\ /\  /\ /\ /\ /\ /\ /\ /\ /\
+e-------------------------|------------------------|
+b-------------------------|------------------------|
+g-11-12-11-12-11-12-11-12-|11-12-11-12-11-12-11-12-|
+d-------------------------|------------------------|
+a-9--10-9--10-9--12-9--10-|9--10-9--10-9--10-9--10-|
+e-------------------------|------------------------|
+
+ F#5                       G
+  /\ /\ /\ /\
+e-------------------------|------------------------|
+b-------------------------|------------------------|
+g-11-12-11-12-11-12-11-12-|11-12-11-12-11-12-11-12-|
+d-------------------------|------------------------|
+a-9--10-9--10-9--12-9--10-|9--10-9--10-9--10-9--10-|
+e-------------------------|------------------------|
+
+                                              w/bar      H
+                                             \          NH  /    full
+ Am                       B5                  \------------/      ---
+e------------------------|-----------------|----(8-&-half)-------)--|
+b------------------------|-----------------|-------------------15---|
+g-14-12-14-12-14-12-14\--|-4-4-4-4-4-4-4-4-|------------------------|
+d------------------------|-4-4-4-4-4-4-4-4-|------------------------|
+a-12-10-12-10-12-10-12\--|-2-2-2-2-2-2-2-2-|------------------------|
+e------------------------|-2-2-2-2-2-2-2-2-|-0----------12----------|
+
+ Em                        grad. rel.(half)
+ --------------------------------------------------   completely release
+e----0--0--0--0--0--0--0--|-0--0--0--0--0--0--0--0--|           bend
+b-15-15-15-15-15-15-15-15-|-15-15-15-15-15-15-15-15-|
+g-------------------------|-------------------------|
+d-------------------------|-------------------------|
+a-------------------------|-------------------------|
+e-------------------------|-------------------------|
+                            C            D
+    grad bend(full)        (2)
+    -------------------------------------------------
+e-0-)--0--0--0--0--0--0--0-|-0--0--0--0--0--0--0--0--|
+b-15--15-15-15-15-15-15-15-|-15-15-15-15-15-15-15-15-|
+g--------------------------|-------------------------|
+d--------------------------|-------------------------|
+a--------------------------|-------------------------|
+e--------------------------|-------------------------|
+ 
+ Em 
+ grad. rel.(full)          (half)
+ -----------------------------------(             T
+e-0--0--0--0--0--0--0--0--|-0--0--0-(-------------12-0-3-|  
+b-15-15-15-15-15-15-15-15-|-15-15-15-/\/\-(15)\----------|
+g-------------------------|------------------------------|
+d-------------------------|------------------------------|
+a-------------------------|------------------------------|
+e-------------------------|------------------------------|
+
+  T       T       T       T       T
+e-----------------12-0-3--12-0-5--------------2/|
+b-12-0-3--12-0-5------------------12-3-5-3--0---|
+g-----------------------------------------------|
+d-----------------------------------------------|
+a-----------------------------------------------|
+e-----------------------------------------------|
+
+ C                     D
+               half        full
+e/10p0----------__----------__--------0-|
+b------10\5p0--)--(--------)--(-----0---|
+g-------------2----(2)p0--2----(2)------|
+d---------------------------------------|
+a---------------------------------------|
+e---------------------------------------|
+         
+ Em        
+         half    half      half    half     half (carry on to the next diad)
+   ----------  ------    ------   -----   ------
+e-0)--0-0-0-0-0)--0-0-|-0)--0-0-0)--0-0-0)--0---|
+b-5---5-5-5-5-6---6-6-|-7---7-7-8---8-8-9---9---|
+g---------------------|-------------------------|
+d---------------------|-------------------------|
+a---------------------|-------------------------|
+e---------------------|-------------------------|
+       
+       half     half   half     half   half       half
+ --   -------    ---    ---      ---    ---    ---------
+e-0-0-)-0--0--0-)-0--0-)-0--|-0-)-0--0-)-0--0-)-0--0--0--|
+b-9-10--10-10-11--11-12--12-|-13--13-14--14-15--15-15-15-|
+g---------------------------|----------------------------|
+d---------------------------|----------------------------|
+a---------------------------|----------------------------|
+e---------------------------|----------------------------|
+       
+ Am      
+       half      half   half         half     half   half (carry on bend)
+     ---------    ---    ---      ---------    ---    ----
+e-0-)-0--0--0--0-)-0--0-)-0--|-0-)-0--0--0--0-)-0--0-)-0--|
+b-16--16-16-16-17--17-18--18-|-19--19-19-19-20--20-21--21-| 
+g----------------------------|----------------------------|
+d----------------------------|----------------------------|
+a----------------------------|----------------------------|
+e----------------------------|----------------------------|
+
+half     half               Bend '2' only
+ ---    -----------------------------------------------------
+e-0--0-)-0--0--0--0--0--0--|-22-22-22-22/\/\/\/\/\/\/\----(22)\-|
+b-21-22--22-22-22-22-22-22-|-22-22-22-22/\/\/\/\/\/\/\----(22)\-|
+g--------------------------|------------------------------------|
+d--------------------------|------------------------------------|
+a--------------------------|------------------------------------|
+e--------------------------|------------------------------------|
+                                                           (3:17)
+
+Written out by The Loan Arranger  c9609436@alinga.newcastle.edu.au
+ 3/5/97
+
+
+				Hi Ho Silver, Away
+					The Loan Arranger
+
+P.S. My rates start from 7.5%pa on $1000, capped for 7 years
+
+#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+
+Date: Tue, 28 Oct 1997 13:27:42 +0100
+From: Esteban Quiroga Garza <al639920@sun1.ur.mx>
+Subject: Tab: "Humans Being" by Van Halen
+
+                             Humans Being
+                              Van halen
+             Written by: Eddie, Sammy, Alex and Michelantony
+
+This song is taken out from the album "The best of Van Halen Vol I" and
+from the Original Motion Picture Soundtrack "Twister".....so here it
+is... avery good song...i will only tab the intro which is used in most
+of the song....the other part has olready been tabbed so..no need for
+tabbing that....so here we go...oh before i forget......dont even think
+I will tab the master solos...no way.....
+
+Use distortion...........delay....but just a little
+e----------------------------------------------------
+b-0-----------------0-----------------0-------------
+g-0-----------------0-----------------0------------
+d-2----5---7--------2----5---7--------2----5---7---
+a-2----5---7--------2----5---7--------2----5---7---
+e------3---5---X-X--0----3---5---X-X--0----3---5---
+
+e-------------------------
+b-----------3p2----------
+g---------0------2--------
+d------2-----------2/4---
+a----2--------------------
+e--0----------------------
+
+e-----------------------------------------------------
+b-0---------------0-------------------0-------------
+g-0---------------0-------------------0--------------
+d-2----5---7------2------5---7--------2------5---7--
+a-2----5---7------2------5---7--------2------5---7---
+e------3---5-X-X--0---X--3---5--X-X--0--X---3---5---
+
+e-------------------------
+b-----------3p2----------
+g---------0------2--------
+d------2-----------2/4---
+a----2--------------------
+e--0----------------------
+
+e----------------------------------------------------0--0---0--
+b-0---------------0-------------------0--------------0--0---0--
+g-0---------------0-------------------0--------------0--0---0--
+d-2----5---7------2------5---7--------2------5---7-------------
+a-2----5---7------2------5---7--------2------5---7-------------
+e------3---5-X-X--0---X--3---5--X-X--0--X---3---5-------------
+
+Repeat several times with verse 1.....then comes the solos......then
+again the above part with verse 2 and a bunch of bendings on the
+back......chorus........solos again......then the interlude which
+already has been tabbed......above part again with verse
+3.......chorus.......solos.........above part as the ending part, again
+with lots of bendings on the back
+
+
+
+
+al639920@mail.ur.mx.....
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/i'm the one.prj b/guitar/tabs/Van Halen/i'm the one.prj new file mode 100644 index 0000000..e4d39bb --- /dev/null +++ b/guitar/tabs/Van Halen/i'm the one.prj @@ -0,0 +1,4 @@ +WINTABV1.00 +TABLATURE=i'm the one.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,16)(13,16)(14,16)(15,16)(16,16)(17,16)(18,16)(19,16)(20,16)(21,16)(22,16)(23,16)(24,16)(25,16)(26,16)(27,16)(28,16)(29,16)(30,16)(31,16)(32,16)(33,16)(34,16)(35,16)(36,16)(37,16)(38,16)(39,16)(40,16)(41,16)(42,16)(43,16)(44,16)(45,16)(46,16)(47,16)(48,16)(49,16)(50,16)(51,16)(52,16)(53,16)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,16)(66,16)(67,16)(68,16)(69,16)(70,16)(71,16)(72,16)(73,16)(74,16)(75,16)(76,16)(77,16)(78,16)(79,16)(80,16)(81,16)(82,16)(83,16)(84,16)(85,16)(86,16)(87,16)(88,16)(89,16)(90,16)(91,16)(92,16)(93,16)(94,16)(95,16)(96,16)(97,16)(98,16)(99,16)(100,16)(101,16)(102,16)(103,16)(104,16)(105,16)(106,16)(107,16)(108,16)(109,16)(110,16)(111,16)(112,16)(113,16)(114,16)(115,16)(116,16)(117,16)(118,16)(119,16)(120,16)(121,16)(122,16)(123,16)(124,16)(125,16)(126,16)(127,16)(128,16)(129,16)(130,16)(131,16)(132,16)(133,16)(134,16)(135,16)(136,16)(137,16)(138,16)(139,16)(140,16)(141,16)(142,16)(143,16)(144,16)(145,16)(146,16)(147,16)(148,16)(149,16)(150,16)(151,16)(152,16)(153,16)(154,16)(155,16)(156,16)(157,16)(158,16)(159,16)(160,16)(161,16)(162,16)(163,16)(164,16)(165,16)(166,16)(167,16)(168,16)(169,16)(170,16)(171,16)(172,16)(173,16)(174,16)(175,16)(176,16)(177,16)(178,16)(179,16)(180,16)(181,16)(182,16)(183,16)(184,16)(185,16)(186,16)(187,16)(188,16)(189,16)(190,16)(191,16)(192,16)(193,16)(194,16)(195,16)(196,16)(197,16)(198,16)(199,16)(200,16)(201,16)(202,16)(203,16)(204,16)(205,16)(206,16)(207,16)(208,16)(209,16)(210,16)(211,16)(212,16)(213,16)(214,16)(215,16)(216,16)(217,16)(218,16)(219,16)(220,16)(221,16)(222,16)(223,16)(224,16)(225,16)(226,16)(227,16)(228,16)(229,16)(230,16)(231,16)(232,16)(233,16)(234,16)(235,16)(236,16)(237,16)(238,16)(239,16)(240,16)(241,16)(242,16)(243,16)(244,16)(245,16)(246,16)(247,16)(248,16)(249,16)(250,16)(251,16)(252,16)(253,16)(254,16)(255,16)(256,16)(257,16)(258,16)(259,16)(260,16)(261,16)(262,16)(263,16)(264,16)(265,16)(266,16)(267,16)(268,16)(269,16)(270,16)(271,16)(272,16)(273,16)(274,16)(275,16)(276,16)(277,16)(278,16)(279,16)(280,16)(281,16)(282,16)(283,16)(284,16)(285,16)(286,16)(287,16)(288,16)(289,16)(290,16)(291,16)(292,16)(293,16)(294,16)(295,16)(296,16)(297,16)(298,16)(299,16)(300,16)(301,16)(302,16)(303,16)(304,16)(305,16)(306,16)(307,16)(308,16)(309,16)(310,16)(311,16)(312,16)(313,16)(314,16)(315,16)(316,16)(317,16)(318,16)(319,16)(320,16)(321,16)(322,16)(323,16)(324,16)(325,16)(326,16)(327,16)(328,16)(329,16)(330,16)(331,16)(332,16)(333,16)(334,16)(335,16)(336,16)(337,16)(338,16)(339,16)(340,16)(341,16)(342,16)(343,16)(344,16)(345,16)(346,16)(347,16)(348,16)(349,16)(350,16)(351,16)(352,16)(353,16)(354,16)(355,16)(356,16)(357,16)(358,16)(359,16)(360,16)(361,16)(362,16)(363,16)(364,16)(365,16)(366,16)(367,16)(368,16)(369,16)(370,16)(371,16)(372,16)(373,16)(374,16)(375,16)(376,16)(377,16)(378,16)(379,16)(380,16)(381,16)(382,16)(383,16)(384,16)(385,16)(386,16)(387,16)(388,16)(389,16)(390,16)(391,16)(392,16)(393,16)(394,16)(395,16)(396,16)(397,16)(398,16)(399,16)(400,16)(401,16)(402,16)(403,16)(404,16)(405,16)(406,16)(407,16)(408,16)(409,16)(410,16)(411,16)(412,16)(413,16)(414,16)(415,16)(416,16)(417,16)(418,16)(419,16)(420,16)(421,16)(422,16)(423,16)(424,16)(425,16)(426,16)(427,16)(428,16)(429,16)(430,16)(431,16)(432,16)(433,16)(434,16)(435,16)(436,16)(437,16)(438,16)(439,16)(440,16)(441,16)(442,16)(443,16)(444,16)(445,16)(446,16)(447,16)(448,16)(449,16)(450,16)(451,16)(452,16)(453,16)(454,16)(455,16)(456,16)(457,16)(458,16)(459,16)(460,16)(461,16)(462,16)(463,16)(464,16)(465,16)(466,16)(467,16)(468,16)(469,16)(470,16)(471,16)(472,16)(473,16)(474,16)(475,16)(476,16)(477,16)(478,16)(479,16)(480,16)(481,16)(482,16)(483,16)(484,16)(485,16)(486,16)(487,16)(488,16)(489,16)(490,16)(491,16)(492,16)(493,16)(494,16)(495,16)(496,16)(497,16)(498,16)(499,16)(500,16)(501,16)(502,16)(503,16)(504,16)(505,16)(506,16)(507,16)(508,16)(509,16)(510,16)(511,16)(512,16)(513,16)(514,16)(515,16)(516,16)(517,16)(518,16)(519,16)(520,16)(521,16)(522,16)(523,16)(524,16)(525,16)(526,16)(527,16)(528,16)(529,16)(530,16)(531,16)(532,16)(533,16)(534,16)(535,16)(536,16)(537,16)(538,16)(539,16)(540,16)(541,16)(542,16)(543,16)(544,16)(545,16)(546,16)(547,16)(548,16)(549,16)(550,16)(551,16)(552,16)(553,16)(554,16)(555,16)(556,16)(557,16)(558,16)(559,16)(560,16)(561,16)(562,16)(563,16)(564,16)(565,16)(566,16)(567,16)(568,16)(569,16)(570,16)(571,16)(572,16)(573,16)(574,16)(575,16)(576,16)(577,16)(578,16)(579,16)(580,16)(581,16)(582,16)(583,16)(584,16)(585,16)(586,16)(587,16)(588,16)(589,16)(590,16)(591,16)(592,16)(593,16)(594,16)(595,16)(596,16)(597,16)(598,16)(599,16)(600,16)(601,16)(602,16)(603,16)(604,16)(605,16)(606,16)(607,16)(608,16)(609,16)(610,16)(611,16)(612,16)(613,16)(614,16)(615,16)(616,16)(617,16)(618,16)(619,16)(620,16)(621,16)(622,16)(623,16)(624,16)(625,16)(626,16)(627,16)(628,16)(629,16)(630,16)(631,16)(632,16)(633,16)(634,16)(635,16)(636,16)(637,16)(638,16)(639,16)(640,16)(641,16)(642,16)(643,16)(644,16)(645,16)(646,16)(647,16)(648,16)(649,16)(650,16)(651,16)(652,16)(653,16)(654,16)(655,16)(656,16)(657,16)(658,16)(659,16)(660,16)(661,16)(662,16)(663,16)(664,16)(665,16)(666,16)(667,16)(668,16)(669,16)(670,16)(671,16)(672,16)(673,16)(674,16)(675,16)(676,16)(677,16)(678,16)(679,16)(680,16)(681,16)(682,16)(683,16)(684,16)(685,16)(686,16)(687,16)(688,16)(689,16)(690,16)(691,16)(692,16)(693,16)(694,16)(695,16)(696,16)(697,16)(698,16)(699,16)(700,16)(701,16)(702,16)(703,16)(704,16)(705,16)(706,16)(707,16)(708,16)(709,16)(710,16)(711,16)(712,16)(713,16)(714,16)(715,16)(716,16)(717,16)(718,16)(719,16)(720,16)(721,16)(722,16)(723,16)(724,16)(725,16)(726,16)(727,16)(728,16)(729,16)(730,16)(731,16)(732,16)(733,16)(734,16)(735,16)(736,16)(737,16)(738,16)(739,16)(740,16)(741,16)(742,16)(743,16)(744,16)(745,16)(746,16)(747,16)(748,16)(749,16)(750,16)(751,16)(752,16)(753,16)(754,16)(755,16)(756,16)(757,16)(758,16)(759,16)(760,16)(761,16)(762,16)(763,16)(764,16)(765,16)(766,16)(767,16)(768,16)(769,16)(770,16)(771,16)(772,16)(773,16)(774,16)(775,16)(776,16)(777,16)(778,16)(779,16)(780,16)(781,16)(782,16)(783,16)(784,16)(785,16)(786,16)(787,16)(788,16)(789,16)(790,16)(791,16)(792,16)(793,16)(794,16)(795,16)(796,16)(797,16)(798,16)(799,16)(800,16)(801,16)(802,16)(803,16)(804,16)(805,16)(806,16)(807,16)(808,16)(809,16)(810,16)(811,16)(812,16)(813,16)(814,16)(815,16)(816,16)(817,16)(818,16)(819,16)(820,16)(821,16)(822,16)(823,16)(824,16)(825,16)(826,16)(827,16)(828,16)(829,16)(830,16)(831,16)(832,16)(833,16)(834,16)(835,16)(836,16)(837,16)(838,16)(839,16)(840,16)(841,16)(842,16)(843,16)(844,16)(845,16)(846,16)(847,16)(848,16)(849,16)(850,16)(851,16)(852,16)(853,16)(854,16)(855,16)(856,16)(857,16)(858,16)(859,16)(860,16)(861,16)(862,16)(863,16)(864,16)(865,16)(866,16)(867,16)(868,16)(869,16)(870,16)(871,16)(872,16)(873,16)(874,16)(875,16)(876,16)(877,16)(878,16)(879,16)(880,16)(881,16)(882,16)(883,16)(884,16)(885,16)(886,16)(887,16)(888,16)(889,16)(890,16)(891,16)(892,16)(893,16)(894,16)(895,16)(896,16)(897,16)(898,16)(899,16)(900,16)(901,16)(902,16)(903,16)(904,16)(905,16)(906,16)(907,16)(908,16)(909,16)(910,16)(911,16)(912,16)(913,16)(914,16)(915,16)(916,16)(917,16)(918,16)(919,16)(920,16)(921,16)(922,16)(923,16)(924,16)(925,16)(926,16)(927,16)(928,16)(929,16)(930,16)(931,16)(932,16)(933,16)(934,16)(935,16)(936,16)(937,16)(938,16)(939,16)(940,16)(941,16)(942,16)(943,16)(944,16)(945,16)(946,16)(947,16)(948,16)(949,16)(950,16)(951,16)(952,16)(953,16)(954,16)(955,16)(956,16)(957,16)(958,16)(959,16)(960,16)(961,16)(962,16)(963,16)(964,16)(965,16)(966,16)(967,16)(968,16)(969,16)(970,16)(971,16)(972,16)(973,16)(974,16)(975,16)(976,16)(977,16)(978,16)(979,16)(980,16)(981,16)(982,16)(983,16)(984,16)(985,16)(986,16)(987,16)(988,16)(989,16)(990,16)(991,16)(992,16)(993,16)(994,16)(995,16)(996,16)(997,16)(998,16)(999,16)(1000,16)(1001,16)(1002,16)(1003,16)(1004,16)(1005,16)(1006,16)(1007,16)(1008,16)(1009,16)(1010,16)(1011,16)(1012,16)(1013,16) +TEMPO=651578 diff --git a/guitar/tabs/Van Halen/i'm the one.tab b/guitar/tabs/Van Halen/i'm the one.tab new file mode 100644 index 0000000..c550040 --- /dev/null +++ b/guitar/tabs/Van Halen/i'm the one.tab @@ -0,0 +1,471 @@ + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +----------------------------------------------------------------------------- +TABLATURE: +Van Halen - I'm the one +from the album Van Halen +----------------------------------------------------------------------------- +h = hammer on w\ =dive whammy bar (wb) +p = pull off w\/ =dive wb and pull up +/ = slide up 7b(9) = bend full step +\ = slide down 7b(9)r(7) = bend full step and release +~ = vibrato T = tab with right hand +{harm.} = play natural harmonics +{A.H.} = play artificial harmonics (with thumb and pick) + +general advise for playing Ed's songs: pick, hammer on and pull off as hard +as you can! + +effects used: MXR Phase 90 + +If you think there's something to improve feel free to do so, I'll be happy +to learn about it! + +Harald Boers +h-boers@dds.dds.nl + +BTW, what is this song about!? was Dave drunk when he wrote the lyrics? :) + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:--------------------------5------------------------------------------------| +D:------7-------5-------7---5---------7-------5-------7--------------7-------| +A:0-0-0---0-0-0---0-0-0---0-----0-0-0---0-0-0---0-0-0---0-3~---0-0-0---0-0-0-| +E:---------------------------------------------------------------------------| + + + + + +e:---------------------------------------------------------------------------| +B:--------------------5p0---------5p0----------------------------------------| +G:------------0-5p0-------7-5p0-------7-5p0---5p0----------------------------| +D:5-------7---------7-----------7-----------7-----7-5p0---7-5-0----------7---| +A:--0-0-0---0-------------------------------------------7----------0-0-0---0-| +E:---------------------------------------------------------------------------| + + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:----------------5----------------------------------------------------------| +D:----5-------7---5--------7-------5-------7-------------7-------5-------7---| +A:0-0---0-0-0---0----0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0-| +E:---------------------------------------------------------------------------| + A-ha! + + + + { Harm. } +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:-5/-----7-------5w\/\/---8p7p5-------------0-8p7p5---------------2---0-8p7p| +D:-5/-----------5----------------7-7-5-5h7~----------7-7-5-5-0---------------| +A:----0-7-----5------------------------------------------------3-4-----------| +E:----------5----------------------------------------------------------------| + + + + + {A.H } +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:5-------------7b(9)-5-----------------0-8p7p5------------0-8p7p5-----------| +D:--7-7-5-5h7~----------7-6-5-------------------7-7-5-5h7~---------7-7-5-5-0-| +A:----------------------------7p6\5\3----------------------------------------| +E:---------------------------------------------------------------------------| + Whoo! A-ha + + + + +e:---------------------------------------------------------------------------| +B:-----------------------------------------------------------------16h17h19--| +G:----2--0-8p7p5---------------------------------16h17h19-16h17h19-----------| +D:---------------7-7-5-5h7~-------------16h17h19-----------------------------| +A:3-4-----------------------3/--16h17h19-------------------------------------| +E:---------------------------------------------------------------------------| + ha ha ha ha! + + + + +e:15h19-17-------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:--------------------------------------5------------------------------------| +D:------------------7-------5-------7---5--------7-------5-------7-----------| +A:------------0-0-0---0-0-0---0-0-0---0----0-0-0---0-0-0---0-0-0---0-3~--0-0-| +E:---------------------------------------------------------------------------| + We came here to entertain you leaving here we aggravate you don + + + + {Harm. } +e:---------------------------------------------------------------------------| +B:--------------------------------------5------------------------------------| +G:----------------------5-----7-------5-----------------------------------5--| +D:--7-------5-------7---5-----------5-----------------7-------5-------7---5--| +A:0---0-0-0---0-0-0---0---0-7-----5-------------0-0-0---0-0-0---0-0-0---0----| +E:------------------------------5--------------------------------------------| + 't you know it means the same to me Honey! I'm the one the one you love c + + + + {dip wb 3x} +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:--------------------------------------------------------5----/9p0w\/\/\/---| +D:------7-------5-------7-------------7-------5-------7---5------------------| +A:0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0--------------------| +E:---------------------------------------------------------------------------| + ome on baby show your love Hey! give it to me + + + + {harm. } +e:---------------------------------------------------------------------------| +B:---------------------------------7-----------------------------------------| +G:14--13--12--11--10--9--8--7----7---7w~--14--13--12--11--10--9--8--7--------| +D:14--13--12--11--10--9--8--7--7----------14--13--12--11--10--9--8--7--------| +A:12--11--10---9---8--7--6--5-------------12--11--10---9---8--7--6--5-picksc.| +E:--------------------------------------------------------------------picksc.| + I see a glow that fills this room I see it rolling out of you + + + + dive wb & +e:-------------------------------bring-up------------------------------------| +B:---------------------------------------------------------------------------| +G:--16--15--14--13--12--11--10--9-----------------16--16--15--14--13--12--11-| +D:--16--15--14--13--12--11--10--9-----------------16--16--15--14--13--12--11-| +A:--14--13--12--11--10---9---8--7-----------------14--14--13--12--11--10---9-| +E:--------------------------------w/0\---------------------------------------| + Feed her your message from above I'm telling you Ow! + + + + +e:---------------------------------------------------------10-14-12\---------| +B:------------------------------------------------11-12-14-------------------| +G:--5----7---------------------11-12-----11-12-14----------------------5----7| +D:--5----7------------11-12-14-------14--------------------------------5----7| +A:--3----5--5/11-12-14-------------------------------------------------3----5| +E:---------------------------------------------------------------------------| + Show come on and show your love Ah yeah! Show your + + + + {dive wb between chords} +e:----slide-chords-up--------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:-----9w\/11w\/12w\/14w\/---5-----7--9\---7\---6\----4---------------5----7-| +D:-----x----x----x----x------5-----7--------------------8-7-6---------5----7-| +A:-----7----9---10---12------3-----5----/7---/6----/5---------7-------3----5-| +E:---------------------------------------------------------------------------| + love Ow! Woo! Oh! Show (Show) Show your love babe Ah Yeah (Show you + + + + phase shifter on (till *) +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:--------------------6h7---6-7-9-6h7---6-7-9-6h7---6-7-9-6h7---6------------| +D:--------------6-7-9-----9-----------9-----------9-----------9---7-9-6h7---6| +A:-------/7h8h9-----------------------------------------------------------9--| +E:---------------------------------------------------------------------------| + r) Show it Ow! + + + + T T T T T T T +e:---------------------------------------------------------------------------| +B:--------------10b(12)-7h10-12-7h10-12-7h10-12--6h9-12-6h9-12-6h9-12--5h8-12| +G:---------------------------------------------------------------------------| +D:---------------------------------------------------------------------------| +A:-7b(9)r(7)-----------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + T T T +e:--------------------------------------------10------12------13------15-----| +B:-5h8-12-5h8-12-4----------------------------13b(15)-15b(17)-16b(19)-18b(20)| +G:-----------------h6b(8)r(6)b(8)-9-6p4-----0--------------------------------| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + +e:-17-------------------------10---------------------------------------------| +B:-20b(22)-22b(24)r(22)----------13-13b(15)-10----10-------------------------| +G:------------------------/12------------------12----12-12b(14)r(12)--p11h12-| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + dive wb, bring up, +e:bend-one-step-and-release---------------------------10---------------------| +B:and-pull-off-to-11th-fret------------------------10----13-13b(15)----------| +G:w\/b(14)r(12)-p11h12w\/b(14)r(12)-p11h12w\/b(14)-----------------12b(14)r--| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + {A.H. }* M M +e:---------------------------------------------------------------------------| +B:--------13b(15)------------------------------------------------------------| +G:(12)p10---------13-12-11-10-----------6p5p3-----------0-6p5p3--------------| +D:----------------------------12-12~\---------5-5-3-3h5---------5-5-3-3-0----| +A:---------------------------------------------------------------------------| +E:------------------------------------------------------------------------6-7| + Oooww! + + + + {A.H. } +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:----0-8p7p5------------7b(9)-5---------------------------------------------| +D:-5----------7-7-5-5h7~---------7-6-5--------------------7-------5-------7--| +A:-------------------------------------7-6-5-3~-----0-0-0---0-0-0---0-0-0---0| +E:---------------------------------------------------------------------------| + Boo bo do woop! Lookin at these little kids + + + + +e:---------------------------------------------------------------------------| +B:-----------------------------------------------------------20b(22)r(20)p17-| +G:-5-------------------------------------------------------------------------| +D:-5-------7-------5-------7-------------7-------5-------7-------------------| +A:---0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0-----------------| +E:---------------------------------------------------------------------------| + Taking care of the music biz Don't their business take good care of me + + + hammer 20,dive wb,bring + up and bend. then release +e:and-pull-off-to-17th-------------------------------------------------------| +B:--h20w\/b(22)r(20)-p17h20w\/b(22)w\/b(23)r(20)-----------------------------| +G:---------------------------------------------------------------------------| +D:-------------------------------------------------------7-------5-------7---| +A:-------------------------------------------------0-0-0---0-0-0---0-0-0---0-| +E:---------------------------------------------------------------------------| + Honey! I'm the one the one you lov + + + + {heavy wb vibr.} +e:---------------------------------------------------------------------------| +B:----------------------------------------------------------20------w\/\/\---| +G:5---------------------------------------------------------19b(21)-w\/\/\---| +D:5-------7-------5-------7-------------7-------5-------7--------------------| +A:--0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0------------------| +E:---------------------------------------------------------------------------| + e come on baby show your love Hey! give it to me I + + + + {harm. } +e:---------------------------------------------------------------------------| +B:---------------------------------7-----------------------------------------| +G:14--13--12--11--10--9--8--7----7---7---14--13--12--11--10--9--8--7---------| +D:14--13--12--11--10--9--8--7--7---------14--13--12--11--10--9--8--7---------| +A:12--11--10---9---8--7--6--5------------12--11--10---9---8--7--6--5-picksc.-| +E:-------------------------------------------------------------------picksc.-| + see a glow that fills this room I see it rolling out of you + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:-16--15--14--13--12--11--10--9--9b(11)r(9)b(11)----16--15--14--13--12--11--| +D:-16--15--14--13--12--11--10--9---------------------16--15--14--13--12--11--| +A:-14--13--12--11--10---9---8--7---------------------14--13--12--11--10---9--| +E:---------------------------------------------------------------------------| + Feed her your message from above I'm telling you Ow! + + + + +e:-------------------15-17-19-----------15-17-19-15h17p15--------------------| +B:----------15-17-19-----------15-17-19-------------------17----19b(20)\-----| +G:--5----7---------------------------------------------------16------------5-| +D:--5----7-----------------------------------------------------------------5-| +A:--3----5-----------------------------------------------------------------3-| +E:---------------------------------------------------------------------------| + Show! Show your love babe Ah yeah! Show + + + + +e:-----5h9p7p5---5h9p7p5---5h9p7p5----------------------19b(22)-19-18-17-15--| +B:-------------9---------9---------9p5h9p5\----------17----------------------| +G:---7----------------------------------------5----7-------------------------| +D:---7----------------------------------------5----7-------------------------| +A:---5----------------------------------------3----5-------------------------| +E:---------------------------------------------------------------------------| + your love Ow! whoo! woo! Show (show) show your love babe + + + hit open E + and dive wb phase shifter on (till *) +e:17b(19)--------------------------------7-----------------------------------| +B:------------------------------10b(12)---10p7h10p7p0------10p7p0------10p7p0| +G:------------------5----7----------------------------10-9--------10-9-------| +D:------------------5----7---------------------------------------------------| +A:------------------3----5---------------------------------------------------| +E:--------0w\----------------------------------------------------------------| + Ah Yeah! (Show your) Show me + + + + +e:---------------------------------------------------------------------------| +B:------10p7p0------10p7p0------10p7p0-------10p7p0----7---------------------| +G:-10-9--------10-9--------10-9---------10-9--------10---9b(11)r(9)p7h9b(11)~| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + pick fast +e:----------7-9-10-12--9-10-12-9-10-12-9-10-12-9-10-12--10-12-14-10-12-14-10-| +B:-0-10b(12)-----------------------------------------------------------------| +G:---------------------------------------------------------------------------| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + +e:12-12b(14)~~------12--------------------------12-15-12-15p12----14p12----12| +B:--------------------15b(17)r(15)b(17)--15b(17)---------------15-------15---| +G:--------------/13----------------------------------------------------------| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + +e:---------------------------------------------------------------------------| +B:-15-14p12----14p12----12---------------------------------------------------| +G:----------15-------15----15p14p12-----14----12-14b(16)r(14)p12-14b(17)r(14)| +D:----------------------------------14-----14--------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + +e:-----------------------------15-17-19----------15-17-19----------17b(19)---| +B:--------------------15-17-19----------15-17-19----------15-17-19-----------| +G:b(17)r(14)b(17)--3/-----------------------------------------------------15\| +D:---------------------------------------------------------------------------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + Hurry! + + + + * +e:---------------------------------------------------------------------------| +B:-12-15(17)-----------------------------------------------------------------| +G:-----------15-14-12b(14)r(12)----------------------------------------------| +D:------------------------------2-4-5-6-7------------------------------------| +A:--------------------------------------0------------------------------------| +E:---------------------------------------------------------------------------| + Whoo bop bada, shoobe doo wah etc. + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:8p7p5---6-9p8p6---7-10p9p7---8-11p10p8----9-12p11p9----10-13p12p10----11-14| +D:------7---------8----------9-----------10-----------11-------------12------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + Oooww! + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:p13p11----------5----7----9------------------------5----7----9\---9\---9\--| +D:-------13-------5----7----9------------------------5----7----9\---9\---9\--| +A:----------------3----5----7------------------------3----5----7\---7\---7\--| +E:----------12\---------------0w\---------------------------------0----0----0| + (Show your love) Ow! Ow! Come on and show me Baby show! Bab + + + + dip wb after pick fast and +e:--------------------each-chord-then---------------slide-up-without-------12| +B:--------------------slide-up----------------------pressing-string-so-------| +G:-9\----5----7-------9w\/11w\/12w\/14w\/--5----7---you-get-A.H.--------13---| +D:-9\----5----7-------x----x----x----x-----5----7----------------------------| +A:-7\----3----5-------7----9---10---12-----3----5----------------------------| +E:----0------------------------------------3----5---0-1-2-3-etc.-------------| + y show your love now Aah Yeah! Wow! Oooww! + + + + +e:---------12-----------------------------12---------------------------------| +B:-15b(17)----15b(17)r(15)p12----12h15p12----12h15p12----12------------------| +G:----------------------------14----------------------14----15p14p12----14-11| +D:-------------------------------------------------------------------14------| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + Yeah! + + + + +e:---------------------------------------------------------------------------| +B:---------------------------------------------------------------------------| +G:h12p11-----11-12h14p12p11----11-12h14p12p11----11-12h14p12p11----11--------| +D:-------14----------------14----------------14----------------14----12h14-11| +A:---------------------------------------------------------------------------| +E:---------------------------------------------------------------------------| + + + + + +e:------------------------------------------7| +B:------------------------------------------7| +G:---------------------------------9b(12)~~-x| +D:----12p11----11---------------------------x| +A:-12-------14----12\11\9\7/10--------------7| +E:-----------------------------0w\-----------| + + + + diff --git a/guitar/tabs/Van Halen/ice_cream_man.tab b/guitar/tabs/Van Halen/ice_cream_man.tab new file mode 100644 index 0000000..993dc04 --- /dev/null +++ b/guitar/tabs/Van Halen/ice_cream_man.tab @@ -0,0 +1,713 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / ice_cream_man.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From nermal.cs.uoguelph.ca!torn!howland.reston.ans.net!wupost!news.miami.edu!usenet.ufl.edu!mailer.cc.fsu.edu!grep!walters Thu Jul  8 13:24:15 EDT 1993
+Article: 10608 of alt.guitar.tab
+Newsgroups: alt.guitar.tab
+Path: nermal.cs.uoguelph.ca!torn!howland.reston.ans.net!wupost!news.miami.edu!usenet.ufl.edu!mailer.cc.fsu.edu!grep!walters
+From: walters@grep.cs.fsu.edu (Glen Walters)
+Subject: Re: REQ: Ice Cream Man
+Sender: usenet@mailer.cc.fsu.edu
+Organization: Florida State University Computer Science Department
+Date: Thu, 8 Jul 1993 02:01:04 GMT
+Message-ID: <C9tpLs.Lpn@mailer.cc.fsu.edu>
+Lines: 32
+
+
+     Ice Cream Man is almost like an old blues standard that Dave wanted to
+do.  Then the band took the tune and rocked it out.  Dave actually plays the
+acoustic guitar in the intro.  The guitar is tuned down a half-step and to
+an open E chord.  That is E B G# E B E from high to low.  It's a basic
+12-bar pattern (excluding the first two bars of intro) going E A E E A A E E
+B A E E (one bar for each chord).  Here is the intro in tab with the guitar
+tuned properly.  I use my thumb and middle finger to pick the notes, use
+what-ever is easiest for you.
+
+|----------------------|----------------------|------------------------------|
+|----O----O----O----O--|----O----O----O----O--|------------------------------|
+|----------------------|----------------------|------------------------------|
+|----------------------|----------------------|----repeat both bars----------|
+|------------O----2----|--3----2----O----2^0--|------------------------------|
+|--O----4--------------|----------------------|------------------------------|
+
+
+     Another riff thrown in before the A sometimes starts on the low E
+string and ascends E F# G G#.  This riff is also right before the heavy
+guitars come in.  The distorted guitars also play the basic blues but in
+positions at the 7th and 5th fret.  I actually have the entire transcription
+including a very acurate solo.  If you want more, be specific.(It's very
+hard to get the tab right on a computer like this.  I also know  just about
+everything there is to know about Eddie Van Halen.  If you want any more
+information I'll try to oblige.  I'm using a friends account, and I will
+return E-mail through him.
+
+                                       Keep on riffin',
+
+                                          Josh "Slosh" Hollis
+                                          C/O walters@cs.fsu.edu
+
+
+From nermal.cs.uoguelph.ca!torn!howland.reston.ans.net!spool.mu.edu!caen!usenet.cis.ufl.edu!usenet.ufl.edu!mailer.cc.fsu.edu!grep!walters Fri Jul  9 13:35:30 EDT 1993
+Article: 10640 of alt.guitar.tab
+Newsgroups: alt.guitar.tab
+Path: nermal.cs.uoguelph.ca!torn!howland.reston.ans.net!spool.mu.edu!caen!usenet.cis.ufl.edu!usenet.ufl.edu!mailer.cc.fsu.edu!grep!walters
+From: walters@grep.cs.fsu.edu (Glen Walters)
+Subject: Tab: Ice Cream Man
+Sender: usenet@mailer.cc.fsu.edu
+Organization: Florida State University Computer Science Department
+Date: Thu, 8 Jul 1993 23:05:05 GMT
+Message-ID: <C9vC4I.Iz5@mailer.cc.fsu.edu>
+Lines: 559
+Status: OR
+
+Since its so hard to tune the guitar to an open E chord this tab will be in
+regular tuning.
+
+~ is a slide
+12>14  means bend at 12th fret up to the pitch of the 14th fret
+12>14>12  means to bend back down after
+(12)>14  means that the note is already bent to before picking
+p                 h
+^  is a pull off  ^  is a hammer on
+t  means a tap with the right hand
+
+I hope the rest is self explanitory.  Good luck.
+
+
+        'Dedicate one to ...
+|----------------------|----------------------|   ||
+|------O---O---O---O---|------O---O---O---O---| . ||
+|----------------------|----------------------|   ||
+|----------------------|----------------------|   ||
+|------------2---4-----|----5---4---2---4-----| . ||
+|----O---4-------------|----------------------|   ||
+
+   summertimes here babe   need ...
+   ice cream man           stop me ...
+||----------------------|----------------------|
+||.---------------------|----------------------|
+||----------------------|----------------------|
+||----------------------|----------------------|
+||.---2-2-4-2-2-2-4-2---|----7-7-9-7-7-7-9-7---|
+||----O-O-O-O-O-O-O-O---|----5-5-5-5-5-5-5-5---|
+
+    cool                               Ah...
+                              Oh....
+|----------------------|----------------------|
+|------O---O---O---O---|------O---O---O---O---|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----2---4---5---4-----|----2---4---2---4-----|
+|----O---O---O---O-----|----O---O---O---O-----|
+
+  summertimes here babe    ....
+  I'm your ice cream man ....
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----7-7-9-7-7-7-9-7---|----7-7-9-7-7-7-9-7---|
+|----5-5-5-5-5-5-5-5---|----5-5-5-5-5-5-5-5---|
+
+   cool                             Better look
+                                    ...
+|----------------------|----------------------|
+|------O---O---O---O---|------O---O---O---O---|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----2---4---5---4-----|----2---4---2---4-----|
+|----O---O---O---O-----|----O---O---O---O-----|
+
+   out now though            ....
+   all my      flavors are   ...
+|-------------------------|----------------------|
+|-------------------------|----------------------|
+|-------------------------|----------------------|
+|-------------------------|----------------------|
+|----9-9-11-9-9-9-11-9----|----7-7-9-7-7-7-9-9---|
+|----7-7--7-7-7-7--7-7----|----5-5-5-5-5-5-5-5---|
+
+     Tell ya what it ...
+     fy  Hols a ....
+|----------------------|--------7--7---7------|  ||
+|------O---O---O---O---|--------7--7---7------| .||
+|----------------------|--------8--8---8------|  ||
+|----------------------|--------9--9---9------|  ||
+|----2---4---5---4-----|----2---9--9---9------| .||
+|----O---O---O---O-----|----O---7--7---7------|  ||
+
+I got good lemonade ah,   ...
+|-----O----------------|--O---------O---------|
+|-----O----------------|--O---------O---------|
+|-----1----------------|--1---------1---------|
+|-----2----------------|--2---------2---------|
+|-----2----------------|--2---------2---------|
+|-----O----------------|--O---------O---------|
+
+          all flavors and push ....
+|-----O----------------|----------------------|
+|-----O----------------|----------------------|
+|-----1----------------|----------------------|
+|-----2----------------|----------------------|
+|-----2----------------|----------------------|
+|-----O----------------|--O---2---3---4-------|
+
+    ice cream man baby     stop me ....
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----7-7-9-7-7-7-9-7---|----7-7-9-7-7-7-9-7---|
+|----5-5-5-5-5-5-5-5---|----5-5-5-5-5-5-5-5---|
+
+                                      ....
+|----------------------|----------------------|
+|------O---O---O---O---|------O---O---O---O---|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----2---4---5---4-----|----2---4---2---4-----|
+|----O---O---O---O-----|----O---O---O---O-----|
+
+  all my flavors are ....
+|------------------------|----------------------|
+|------------------------|----------------------|
+|------------------------|----------------------|
+|------------------------|----------------------|
+|----9-9-11-9-9-9-11-9---|----7-7-9-7-7-7-9-7---|
+|----7-7--7-7-7-7--7-7---|----5-5-5-5-5-5-5-5---|
+
+fy       hold on one ...
+|----------------------|----7---7---7---7-----|
+|----------------------|----7---7---7---7-----|
+|----------------------|----8---8---8---8-----|
+|----------------------|----9---9---9---9-----|
+|----2-2-4-2-2-2-4-2---|----9---9---9---9-----|
+|----O-O-O-O-O-O-O-O---|----7---7---7---7-----|
+
+usually passin by just a....(this is over the verse part above)
+
+I got good lemonade, .....(etc.   this is where the distorted guitar comes in,
+again playing basically the same thing-look at section
+after solo for a hint)
+
+(Now to the solo)
+
+                     Ah,      one      time
+      (let ring . . . . . . . . . . . . .)
+           sl.         sl.
+|----9----------------------|---------------12----12---|
+|---(9)--------14-----------|--16-------16-------------|
+|---(9)-9-9~14----14--------|-----16-------------------|
+|---(7)---9~14-------14~16--|--------16----------------|
+|---------------------------|--------------------------|
+|---------------------------|--------------------------|
+
+             h  p  h              h p
+|----16-19-12^16^12^14-12-16-19-12^16^12-14-12--|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+
+             h  p                    p     p
+|----16-19-12^16^12-14-12-16-19-12-16^12-14^12--|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+
+             h  p                 h  p
+|-----------------------------------------------|
+|----16-19-12^16^12-15--------------------------|
+|----------------------12-16-19-12^16^12-14-----|
+|-------------------------------------------12--|
+|-----------------------------------------------|
+|-----------------------------------------------|
+
+             h  p
+|-----------------------------------------------|
+|-------------------------------------15>17-----|
+|-----------------------------------------------|
+|----16-19-12^16^12-14--------------------------|
+|----------------------12-16-19-O---------------|
+|-----------------------------------------------|
+
+                h  p  h  p  h   t-sl.  t-sl.      (Here Eddie taps with
+|-----------------------------------------------|  his right index finger
+|----15>18>15-12^15^12^15^12^15-17~-15-17~-15---|  and slides up toward the
+|-----------------------------------------------|  pick-ups and the string
+|-----------------------------------------------|  pulls off onto the note.
+|-----------------------------------------------|  The slide goes to no
+|-----------------------------------------------|  exact note but the
+                                                   pull-off does.)
+     t-sl.  t-sl.  t-sl. p           p
+|-----------------------------------------------|
+|----17~-15-17~-15-17~-15^12--------------------|
+|----------------------------14->-15->-14^12----|(slow bend)
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+
+        ! ! !  p  p  !!!!!!dive down 1 1/2 step!!!!
+|-----------------------------------------------|
+|-----------------------------------------------|
+|----14->->-15-^12^O----------------------------|(Gradual bend while
+|-----------------------------------------------| whanging w/ bar)
+|-----------------------------------------------|
+|-----------------------------------------------|
+
+  !!!!then back up!!
+|--------------------------------------------|
+|------------------15>17>15>17---------------|
+|---(O)--------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+
+
+|----------------------12-15-16-16-----------|
+|---(15)-15------------------------15>17-----|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+
+               h  p                p
+|--------12------------------------------------|
+|---(15)-----12^15^12------------15^12---------|
+|---------------------14-*-15-14-------14>16---|
+|----------------------------------------------|
+|----------------------------------------------|
+|----------------------------------------------|
+
+                p                        p
+|--------------------------------------------|
+|----12-------15^12-------12-----------------|
+|-------15-14-------14>16----15-14-12>14^O---|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+
+      !!!!dive bomb 3 steps!!!Then back up!!
+|-----------------------------------------------|
+|-----------------------------------------------|
+|----(O)--------------------------------*-12->--|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------O-----------------|
+
+     slow bend      t p
+|----------------------------------|
+|----------------------------------|(Tapping is done while bend is still
+|----(12)->-15------15^12----------| being held-and into next measure)
+|----------------------------------|
+|----------------------------------|
+|----------------------------------|
+
+     t p    release bend           p
+|--------------------------------------------|
+|-----------------p--------------------------|
+|----15^12----(12)^9--11--11>12>11-^-9-------|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+
+     [semi harm.     ]  sl. p
+|--------------------------------|
+|--------------------------------|
+|----11---9----------------------|
+|-------------11---9-------------|
+|----------------------11~10^9---|
+|--------------------------------|
+
+                 sl.       sl.
+|---------------------------------|
+|---------------------O-----------|
+|--------------------------*~16---|
+|---------------------------------|
+|----10>12----(10)~2--------------|
+|---------------------------------|
+
+                                sl.   sl.
+|----16----16----16----16----16-~---------|
+|-----------------------------------------|
+|-------16----16----16----16----16~(9)~---|
+|-----------------------------------------|
+|-----------------------------------------|
+|-----------------------------------------|
+
+    sl.                                    sl.
+|--------15----15----15----15----15-------------|
+|-----------------------------14----14-14-------|
+|----~15----15----15----15----15---(15)---15~---|
+|-----------------------------------------------|
+|-----------------------------------------------|
+|-----------------------------------------------|
+
+    sl.                 sl.      sl.
+|-------------16----16-------19-------21---|
+|-------15---------------------------------|
+|---~16----16----16----16~19----19~21------|
+|------------------------------------------|
+|------------------------------------------|
+|------------------------------------------|
+
+       sl.                  hold bend into next measure
+|---(21)~(19)-19-------------------|
+|----------------------O---15>19---|
+|----21-~-19-------O-------15>19---|
+|----------------------------------|
+|----------------------------------|
+|----------------------------------|
+
+
+|---------------------12-----------12---------|
+|----(15)---(15>17)------15>19--------15>19---|
+|----(15)---(15>17)---------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+
+
+|-----------12---------12------14>15---|
+|----(15)------15>17------12-----------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+
+                           p
+|----(14)>16-12-------------------------------|
+|---------------12----------------------------|
+|------------------14>15>14^12--14>15-14>15---|
+|---------------------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+
+                   1/4 bend      p
+|--------------------------------------------|
+|------------------------------------15>17---|
+|----12>14--14>15--14>---12>14>12^0----------|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+
+               p                 p
+|---------12------------------------------|
+|----(15)----15^12----12-------15^12------|
+|------------------15----15-14-------15---|
+|-----------------------------------------|
+|-----------------------------------------|
+|-----------------------------------------|
+
+                p
+|-------------------------------|
+|----12-------15^12----12---O---|
+|-------15-14-------O---*---O---|
+|-------------------O-------O---|
+|-------------------------------|
+|-------------------------------|
+
+       p        p        p           h
+|------------------------------------------|
+|----12^11---------------------------------|
+|----------14-12^11----12^11----11---------|
+|-------------------14-------14----12^14---|
+|------------------------------------------|
+|------------------------------------------|
+
+                            I'm your
+       h                        sl.
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|----11^12----11-----------------------|
+|----------14----12-14-----------------|
+|-------------------------------*~-----|
+
+    ice cream man            stop ....
+
+|------------------------|----------------------|
+|------------------------|----------------------|
+|------------------------|----------------------|
+|----9-9-11-9-9-9-11-9---|----------------------|
+|----7-7--7-7-7-7--7-7---|----7-7-9-7-7-7-9-7---|
+|------------------------|----5-5-5-5-5-5-5-5---|
+
+                                          Im' y...
+|------------------------|------------------------|
+|------------------------|------------------------|
+|------------------------|------------------------|
+|----9-9-11-9-9-9-11-9---|----9-9-11-9-9-9-11-9---|
+|----7-7--7-7-7-7--7-7---|----7-7--7-7-7-7--7-7---|
+|------------------------|------------------------|
+
+  ice cream man,      stop me ....
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----------------------|----------------------|
+|----7-7-9-7-7-7-9-7---|----7-7-9-7-7-7-9-7---|
+|----5-5-5-5-5-5-5-5---|----5-5-5-5-5-5-5-5---|
+
+                                        They sa...
+|-------------------------|------------------------|
+|-------------------------|------------------------|
+|-------------------------|------------------------|
+|----9-9-11-9-12-9-11-9---|----9-9-11-9-9-9-11-9---|
+|----7-7--7-7--7-7--7-7---|----7-7--7-7-7-7--7-7---|
+|-------------------------|------------------------|
+
+    all my ....
+|-------------------------|
+|-------------------------|
+|-------------------------|
+|-------------------------|
+|----9-9-11-9-9-9-11-9----|
+|----7-7--7-7-7-7--7-7----|
+
+   anteed to ...
+|---------------------------|
+|---------------------------|
+|--------------------sl.----|
+|----2-------4-2-2---4~9----|
+|----O-------O-O-O----------|
+|---------------------------|
+
+             sl.           O...
+|--------------------------------|
+|-----9------------14------------|
+|--------9-(9)~14-----14--sl.----|
+|----(9)----9-~14--------14~16---|
+|--------------------------------|
+|--------------------------------|
+
+    time         boys!
+|---------------------------------|
+|----16----------16---------------|
+|-------16--------------*---------|
+|----------16-----------*---------|
+|----------------------------sl.--|
+|----------------------------*~---|
+
+                          I'm your
+|-----------------------------------|
+|----------------------------sl.----|
+|----11>13----11>13---9----(9)~-----|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+  ice cream ...
+|-----------------------------------|
+|------------------15>17------------|
+|------------------------15---------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+                        -I'm your
+                   ....
+|-----------------------------------|
+|-----------------------------------|
+|----12>14-----14--12>14---(12)~----|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+   ice     cream  man!___
+|--------------------------19>21----|
+|-----------------------------------|
+|-----------------------------------|
+|-------*---------------------------|
+|---------*-------------------------|
+|-----------O-----------------------|
+
+                           B-b-b-b-
+|----(19)>19---->19-----------------|(bent before picking)
+|------------------------17---------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+   b - b - b - ba - by!
+|-----------------------------------|
+|----(17)~---------------12>14>12---|(slow release)
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+                       Ah,   my,
+                         !!dive  3 !!
+|-----------------------------------|
+|-----------------------------------|
+|---(12)-----9---11>12-^-9----------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+    my,     my
+ !!up!!dive 3!!up!!dive 2 1/2!!!!
+|-----------------------------------|
+|-----------------------------------|
+|----(9)----------------------------|
+|-----------------------------------|
+|-----------------------------------|
+|-----------------------------------|
+
+     All my flavors are       Guarante-e-e-e-e-e-e-e-e-e-e-e-ed
+|---------------------|----------------|
+|----4----------------|----2-----------|
+|----4----------------|----2-----------|(free-time)
+|----4----------------|----2-----------|
+|----2----------------|----O-----------|
+|---------------------|----------------|
+
+    to satis-uh-fy  yeah!
+
+                               trill
+|-----------------------------------------|
+|-----------------------------------------| (trill of hammering on and
+|-----------------------------------------|  pulling off)
+|------------------------------------sl.--|
+|----7----7--5------5--4----4--3-^-(5)~---|
+|-----------------------------------------|
+
+      Ow!__
+|--------------8----7--------------------|
+|----*---------8----7--------------10----|
+|-----*--------8----7-------------*------|
+|------*-------7----6------------*-------|
+|-------*------8----7-----------*--------|
+|----------------------------------------|
+
+             p  h sl-sl.        sl-sl.   p h  sl-sl.   p  p
+|-------------------------------------------------------------------|
+|----14-12-14^12^10~9~10-14-12-10~9~10-14^12^10~9~10----------------|
+|----------------------------------------------------13^11^9----9---|
+|------------------------------------------------------------14-----|
+|-------------------------------------------------------------------|
+|-------------------------------------------------------------------|
+
+       p  p sl.   p    p sl.     all slides                      sl.                    sl.
+|----------------------------------------------------------------7~---||
+|----------------------------------------------------------------7~---||
+|----------------------------------------------------------------7~---||
+|----14^12^10~9-10^9---------10----------------------------------6~---||
+|--------------------12^10~9----9~7~~5~~~4~~2~~12~11~~7~~5>7-----7~---||
+|---------------------------------------------------------------------||
+
+That last section is the conversation type part between Ed and Dave.
+Have fun.
+
+                                  My Eruption is bigger than yours,
+
+                                     Josh "Slosh" Hollis
+
+"He said eruption.  Hu, hu, huh, hu, huh"-Beavis
+
+
+
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/im_the_one.tab b/guitar/tabs/Van Halen/im_the_one.tab new file mode 100644 index 0000000..55d0359 --- /dev/null +++ b/guitar/tabs/Van Halen/im_the_one.tab @@ -0,0 +1,564 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / im_the_one.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+-----------------------------------------------------------------------------
+TABLATURE:  
+Van Halen - I'm the one
+from the album Van Halen  
+-----------------------------------------------------------------------------
+h = hammer on          w\  =dive whammy bar (wb)
+p = pull off           w\/ =dive wb and pull up 
+/ = slide up           7b(9) = bend full step
+\ = slide down         7b(9)r(7) = bend full step and release 
+~ = vibrato            T = tab with right hand
+{harm.} = play natural harmonics 
+{A.H.}  = play artificial harmonics (with thumb and pick)
+
+general advise for playing Ed's songs: pick, hammer on and pull off as hard
+as you can!
+
+effects used: MXR Phase 90
+
+If you think there's something to improve feel free to do so, I'll be happy
+to learn about it!
+
+Harald Boers
+h-boers@dds.dds.nl
+
+BTW, what is this song about!? was Dave drunk when he wrote the lyrics? :)
+
+
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:--------------------------5------------------------------------------------|
+D:------7-------5-------7---5---------7-------5-------7--------------7-------|
+A:0-0-0---0-0-0---0-0-0---0-----0-0-0---0-0-0---0-0-0---0-3~---0-0-0---0-0-0-|
+E:---------------------------------------------------------------------------|
+
+
+
+
+
+e:---------------------------------------------------------------------------|
+B:--------------------5p0---------5p0----------------------------------------|
+G:------------0-5p0-------7-5p0-------7-5p0---5p0----------------------------|
+D:5-------7---------7-----------7-----------7-----7-5p0---7-5-0----------7---|
+A:--0-0-0---0-------------------------------------------7----------0-0-0---0-|
+E:---------------------------------------------------------------------------|
+
+
+
+
+
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:----------------5----------------------------------------------------------|
+D:----5-------7---5--------7-------5-------7-------------7-------5-------7---|
+A:0-0---0-0-0---0----0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0-|
+E:---------------------------------------------------------------------------|
+                                            A-ha!
+
+
+
+       { Harm.          }
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:-5/-----7-------5w\/\/---8p7p5-------------0-8p7p5---------------2---0-8p7p|
+D:-5/-----------5----------------7-7-5-5h7~----------7-7-5-5-0---------------|
+A:----0-7-----5------------------------------------------------3-4-----------|
+E:----------5----------------------------------------------------------------|
+
+
+
+
+               {A.H          }
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:5-------------7b(9)-5-----------------0-8p7p5------------0-8p7p5-----------|
+D:--7-7-5-5h7~----------7-6-5-------------------7-7-5-5h7~---------7-7-5-5-0-|
+A:----------------------------7p6\5\3----------------------------------------|
+E:---------------------------------------------------------------------------|
+               Whoo!                                                     A-ha
+
+ 
+
+
+e:---------------------------------------------------------------------------|
+B:-----------------------------------------------------------------16h17h19--|
+G:----2--0-8p7p5---------------------------------16h17h19-16h17h19-----------|
+D:---------------7-7-5-5h7~-------------16h17h19-----------------------------|
+A:3-4-----------------------3/--16h17h19-------------------------------------|
+E:---------------------------------------------------------------------------|
+    ha  ha  ha  ha!
+
+
+
+
+e:15h19-17-------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:--------------------------------------5------------------------------------|
+D:------------------7-------5-------7---5--------7-------5-------7-----------|
+A:------------0-0-0---0-0-0---0-0-0---0----0-0-0---0-0-0---0-0-0---0-3~--0-0-|
+E:---------------------------------------------------------------------------|
+              We came here to entertain ...
+
+
+
+                           {Harm.        }
+e:---------------------------------------------------------------------------|
+B:--------------------------------------5------------------------------------|
+G:----------------------5-----7-------5-----------------------------------5--|
+D:--7-------5-------7---5-----------5-----------------7-------5-------7---5--|
+A:0---0-0-0---0-0-0---0---0-7-----5-------------0-0-0---0-0-0---0-0-0---0----|
+E:------------------------------5--------------------------------------------|
+  't you know it means the same ...
+
+
+
+                                                               {dip wb 3x}
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:--------------------------------------------------------5----/9p0w\/\/\/---|
+D:------7-------5-------7-------------7-------5-------7---5------------------|
+A:0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0--------------------|
+E:---------------------------------------------------------------------------|
+  ome on baby show your ....
+
+
+
+                              {harm.    }
+e:---------------------------------------------------------------------------|
+B:---------------------------------7-----------------------------------------|
+G:14--13--12--11--10--9--8--7----7---7w~--14--13--12--11--10--9--8--7--------|
+D:14--13--12--11--10--9--8--7--7----------14--13--12--11--10--9--8--7--------|
+A:12--11--10---9---8--7--6--5-------------12--11--10---9---8--7--6--5-picksc.|
+E:--------------------------------------------------------------------picksc.|
+  I see a glow that fills ...
+
+ 
+
+                                 dive wb &
+e:-------------------------------bring-up------------------------------------|
+B:---------------------------------------------------------------------------|
+G:--16--15--14--13--12--11--10--9-----------------16--16--15--14--13--12--11-|
+D:--16--15--14--13--12--11--10--9-----------------16--16--15--14--13--12--11-|
+A:--14--13--12--11--10---9---8--7-----------------14--14--13--12--11--10---9-|
+E:--------------------------------w/0\---------------------------------------|
+   Feed her your message from ...
+
+
+
+
+e:---------------------------------------------------------10-14-12\---------|
+B:------------------------------------------------11-12-14-------------------|
+G:--5----7---------------------11-12-----11-12-14----------------------5----7|
+D:--5----7------------11-12-14-------14--------------------------------5----7|
+A:--3----5--5/11-12-14-------------------------------------------------3----5|
+E:---------------------------------------------------------------------------|
+  Show    come on  and show ...
+
+
+
+     {dive wb between chords}
+e:----slide-chords-up--------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:-----9w\/11w\/12w\/14w\/---5-----7--9\---7\---6\----4---------------5----7-|
+D:-----x----x----x----x------5-----7--------------------8-7-6---------5----7-|
+A:-----7----9---10---12------3-----5----/7---/6----/5---------7-------3----5-|
+E:---------------------------------------------------------------------------|
+   love  Ow!  Woo!  Oh!     ...
+
+
+
+        phase shifter on (till *)
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:--------------------6h7---6-7-9-6h7---6-7-9-6h7---6-7-9-6h7---6------------|
+D:--------------6-7-9-----9-----------9-----------9-----------9---7-9-6h7---6|
+A:-------/7h8h9-----------------------------------------------------------9--|
+E:---------------------------------------------------------------------------|
+  r)    Show ...
+
+
+
+                             T       T       T       T      T      T       T
+e:---------------------------------------------------------------------------|
+B:--------------10b(12)-7h10-12-7h10-12-7h10-12--6h9-12-6h9-12-6h9-12--5h8-12|
+G:---------------------------------------------------------------------------|
+D:---------------------------------------------------------------------------|
+A:-7b(9)r(7)-----------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+ 
+
+       T      T                   T      
+e:--------------------------------------------10------12------13------15-----|
+B:-5h8-12-5h8-12-4----------------------------13b(15)-15b(17)-16b(19)-18b(20)|
+G:-----------------h6b(8)r(6)b(8)-9-6p4-----0--------------------------------|
+D:---------------------------------------------------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+
+
+
+e:-17-------------------------10---------------------------------------------|
+B:-20b(22)-22b(24)r(22)----------13-13b(15)-10----10-------------------------|
+G:------------------------/12------------------12----12-12b(14)r(12)--p11h12-|
+D:---------------------------------------------------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+
+
+  dive wb, bring up,
+e:bend-one-step-and-release---------------------------10---------------------|
+B:and-pull-off-to-11th-fret------------------------10----13-13b(15)----------|
+G:w\/b(14)r(12)-p11h12w\/b(14)r(12)-p11h12w\/b(14)-----------------12b(14)r--|
+D:---------------------------------------------------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+
+
+                {A.H.                }*                                   M M
+e:---------------------------------------------------------------------------|
+B:--------13b(15)------------------------------------------------------------|
+G:(12)p10---------13-12-11-10-----------6p5p3-----------0-6p5p3--------------|
+D:----------------------------12-12~\---------5-5-3-3h5---------5-5-3-3-0----|
+A:---------------------------------------------------------------------------|
+E:------------------------------------------------------------------------6-7|
+                                         Oooww!
+
+
+
+                        {A.H.         }
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:----0-8p7p5------------7b(9)-5---------------------------------------------|
+D:-5----------7-7-5-5h7~---------7-6-5--------------------7-------5-------7--|
+A:-------------------------------------7-6-5-3~-----0-0-0---0-0-0---0-0-0---0|
+E:---------------------------------------------------------------------------|
+   Boo bo do woop!                               ...
+
+ 
+
+
+e:---------------------------------------------------------------------------|
+B:-----------------------------------------------------------20b(22)r(20)p17-|
+G:-5-------------------------------------------------------------------------|
+D:-5-------7-------5-------7-------------7-------5-------7-------------------|
+A:---0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0-----------------|
+E:---------------------------------------------------------------------------|
+   Taking care of the music biz  ....
+
+
+  hammer 20,dive wb,bring
+  up and bend. then release
+e:and-pull-off-to-17th-------------------------------------------------------|
+B:--h20w\/b(22)r(20)-p17h20w\/b(22)w\/b(23)r(20)-----------------------------|
+G:---------------------------------------------------------------------------|
+D:-------------------------------------------------------7-------5-------7---|
+A:-------------------------------------------------0-0-0---0-0-0---0-0-0---0-|
+E:---------------------------------------------------------------------------|
+                                   Honey!         I'm ....
+
+
+
+                                                           {heavy wb vibr.}
+e:---------------------------------------------------------------------------|
+B:----------------------------------------------------------20------w\/\/\---|
+G:5---------------------------------------------------------19b(21)-w\/\/\---|
+D:5-------7-------5-------7-------------7-------5-------7--------------------|
+A:--0-0-0---0-0-0---0-0-0---0-3~--0-0-0---0-0-0---0-0-0---0------------------|
+E:---------------------------------------------------------------------------|
+  e come on baby show your ......I
+
+
+
+                              {harm.  }
+e:---------------------------------------------------------------------------|
+B:---------------------------------7-----------------------------------------|
+G:14--13--12--11--10--9--8--7----7---7---14--13--12--11--10--9--8--7---------|
+D:14--13--12--11--10--9--8--7--7---------14--13--12--11--10--9--8--7---------|
+A:12--11--10---9---8--7--6--5------------12--11--10---9---8--7--6--5-picksc.-|
+E:-------------------------------------------------------------------picksc.-|
+   see a glow that fill....
+
+
+
+
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:-16--15--14--13--12--11--10--9--9b(11)r(9)b(11)----16--15--14--13--12--11--|
+D:-16--15--14--13--12--11--10--9---------------------16--15--14--13--12--11--|
+A:-14--13--12--11--10---9---8--7---------------------14--13--12--11--10---9--|
+E:---------------------------------------------------------------------------|
+  Feed her your message ....
+
+ 
+
+
+e:-------------------15-17-19-----------15-17-19-15h17p15--------------------|
+B:----------15-17-19-----------15-17-19-------------------17----19b(20)\-----|
+G:--5----7---------------------------------------------------16------------5-|
+D:--5----7-----------------------------------------------------------------5-|
+A:--3----5-----------------------------------------------------------------3-|
+E:---------------------------------------------------------------------------|
+   Show!  Show your love ....
+
+
+
+
+e:-----5h9p7p5---5h9p7p5---5h9p7p5----------------------19b(22)-19-18-17-15--|
+B:-------------9---------9---------9p5h9p5\----------17----------------------|
+G:---7----------------------------------------5----7-------------------------|
+D:---7----------------------------------------5----7-------------------------|
+A:---5----------------------------------------3----5-------------------------|
+E:---------------------------------------------------------------------------|
+    your love  Ow! whoo! woo!                ....
+
+
+         hit open E
+         and dive wb       phase shifter on (till *)
+e:17b(19)--------------------------------7-----------------------------------|
+B:------------------------------10b(12)---10p7h10p7p0------10p7p0------10p7p0|
+G:------------------5----7----------------------------10-9--------10-9-------|
+D:------------------5----7---------------------------------------------------|
+A:------------------3----5---------------------------------------------------|
+E:--------0w\----------------------------------------------------------------|
+         Ah Yeah! (Show ....
+
+
+
+
+e:---------------------------------------------------------------------------|
+B:------10p7p0------10p7p0------10p7p0-------10p7p0----7---------------------|
+G:-10-9--------10-9--------10-9---------10-9--------10---9b(11)r(9)p7h9b(11)~|
+D:---------------------------------------------------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+
+
+            pick fast
+e:----------7-9-10-12--9-10-12-9-10-12-9-10-12-9-10-12--10-12-14-10-12-14-10-|
+B:-0-10b(12)-----------------------------------------------------------------|
+G:---------------------------------------------------------------------------|
+D:---------------------------------------------------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+ 
+
+
+e:12-12b(14)~~------12--------------------------12-15-12-15p12----14p12----12|
+B:--------------------15b(17)r(15)b(17)--15b(17)---------------15-------15---|
+G:--------------/13----------------------------------------------------------|
+D:---------------------------------------------------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+
+
+
+e:---------------------------------------------------------------------------|
+B:-15-14p12----14p12----12---------------------------------------------------|
+G:----------15-------15----15p14p12-----14----12-14b(16)r(14)p12-14b(17)r(14)|
+D:----------------------------------14-----14--------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+
+
+
+e:-----------------------------15-17-19----------15-17-19----------17b(19)---|
+B:--------------------15-17-19----------15-17-19----------15-17-19-----------|
+G:b(17)r(14)b(17)--3/-----------------------------------------------------15\|
+D:---------------------------------------------------------------------------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+                      Hurry!
+
+
+
+                                        *
+e:---------------------------------------------------------------------------|
+B:-12-15(17)-----------------------------------------------------------------|
+G:-----------15-14-12b(14)r(12)----------------------------------------------|
+D:------------------------------2-4-5-6-7------------------------------------|
+A:--------------------------------------0------------------------------------|
+E:---------------------------------------------------------------------------|
+                                           Whoo bop bada, ...
+
+
+
+
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:8p7p5---6-9p8p6---7-10p9p7---8-11p10p8----9-12p11p9----10-13p12p10----11-14|
+D:------7---------8----------9-----------10-----------11-------------12------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+                                                                       Oooww!
+
+ 
+
+
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:p13p11----------5----7----9------------------------5----7----9\---9\---9\--|
+D:-------13-------5----7----9------------------------5----7----9\---9\---9\--|
+A:----------------3----5----7------------------------3----5----7\---7\---7\--|
+E:----------12\---------------0w\---------------------------------0----0----0|
+                (Show your love) Ow! .....
+
+
+
+                      dip wb after                  pick fast and
+e:--------------------each-chord-then---------------slide-up-without-------12|
+B:--------------------slide-up----------------------pressing-string-so-------|
+G:-9\----5----7-------9w\/11w\/12w\/14w\/--5----7---you-get-A.H.--------13---|
+D:-9\----5----7-------x----x----x----x-----5----7----------------------------|
+A:-7\----3----5-------7----9---10---12-----3----5----------------------------|
+E:----0------------------------------------3----5---0-1-2-3-etc.-------------|
+  y show your love now   ....
+
+
+
+
+e:---------12-----------------------------12---------------------------------|
+B:-15b(17)----15b(17)r(15)p12----12h15p12----12h15p12----12------------------|
+G:----------------------------14----------------------14----15p14p12----14-11|
+D:-------------------------------------------------------------------14------|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+                                                                        Yeah!
+
+
+
+
+e:---------------------------------------------------------------------------|
+B:---------------------------------------------------------------------------|
+G:h12p11-----11-12h14p12p11----11-12h14p12p11----11-12h14p12p11----11--------|
+D:-------14----------------14----------------14----------------14----12h14-11|
+A:---------------------------------------------------------------------------|
+E:---------------------------------------------------------------------------|
+
+
+                                             
+
+
+e:------------------------------------------7|
+B:------------------------------------------7|
+G:---------------------------------9b(12)~~-x|
+D:----12p11----11---------------------------x|
+A:-12-------14----12\11\9\7/10--------------7|
+E:-----------------------------0w\-----------|
+
+
+ 
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/judgment_day.tab b/guitar/tabs/Van Halen/judgment_day.tab new file mode 100644 index 0000000..adeec4a --- /dev/null +++ b/guitar/tabs/Van Halen/judgment_day.tab @@ -0,0 +1,543 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / judgment_day.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: MStra5150@aol.com
+Date: Fri, 18 Aug 1995 19:08:20 -0400
+
+"Judgment Day" by Van Halen
+
+Transcribed by Matt Strayer
+
+This song is pretty fast, around 190 bpm.  Although, it's not to hard to play
+once you
+have it memorized and master the bar dive trick.
+
+key:
+^=hammer on
++=thumb
+AH=artificial harmonic
+^f=full bend
+^h=half bend
+/ or \ = slide
+T=right hand tapping
+(T)=left hand tapping
+2(14) = fret the number on the left and play the harmonic on the right by
+tapped harm.
+technique.
+X\ = pick slide
+X = muffled strings
+~~~~ = vibrato
+
+Intro: 
+
+         Dadd4             A7              Dadd4
+
+--------|---------|------|------0--|--(0)-|----------|-----------|
+--------|------3--|--(3)-|---------|------|-------3--|-(3)-------|
+--------|----0----|--(0)-|-0--2----|--(2)-|----0-----|-(0)-------|
+--------|--4------|------|---------|------|--4-------|-----------|
+--------|---------|------|---------|------|----------|-----------|
+---^2---|---------|------|---------|------|----------|-----0**---|
+    +
+A
+
+---------|---------|------|---------|
+---------|---------|------|---------|
+-2--2--2-|-(2)-----|-(2)--|-(2)-----|
+-0--0--0-|-(0)-----|-(0)--|-(0)-----|
+-0--0--0-|-(0)-----|-(0)--|-(0)-----|
+---3--3--|---------|------|---------|
+
+** Depress whammy bar as far as it will go (about an octave) then
+strike note and shake bar up and down 7 times (eighth notes -&2&3 etc.)
+This goes real fast so have fun!! 
+
+Repeat Intro except on the Dadd4 the second time play 2 eighth notes
+instead of quarter then eighth note:
+
+
+         Dadd4             A7              Dadd4
+
+--------|---------|------|------0--|--(0)-|----------|-----------|
+--------|------3--|--(3)-|---------|------|-------3--|-(3)-------|
+--------|----0----|--(0)-|-0--2----|--(2)-|----0-----|-(0)-------|
+--------|--4------|------|---------|------|--4-------|-----------|
+--------|---------|------|---------|------|----------|-----------|
+--------|---------|------|---------|------|----------|-----0**---|
+
+A
+
+------------|-------------|
+------------|-------------|
+-2--2--2^F*-|--(2)~~~~ w/bar
+-0--0-------|-------------|
+-0--0-------|-------------|
+---3--3-----|-------------|
+
+        *AH (G) Bend up and hold bend while dipping bar one step, then
+release both
+bend and bar simultaneously.
+
+  
+
+       Dadd4             A7              Dsus4              D
+
+--------|---------|------|------0--|--(0)-|-----3----|-(3)------------|
+--------|------3--|--(3)-|---------|------|---3------|-(3)-------3(15)|
+--------|----0----|--(0)-|-0--2----|--(2)-|-2--------|------2(14)-----|
+--------|--4------|------|---------|------|----------|----------------|
+--------|---------|------|---------|------|----------|----------------|
+--------|---------|------|---------|------|----------|----------------|
+                                                           let ring---
+                                                            
+
+
+Here just punch out a D chord: (palm mute open d's)
+
+---------2-------3---|----2---|
+---3-----3-------3---|----3---|
+---2-----2-------2---|----2---|
+-----0-0---0--0----0-|-0--0---|
+
+Now do the bar dive trick, except shake the bar 9 times, (i.e. 1&2&3&4&1)
+
+Continue with this on the "&" of first beat:
+
+--------------------------|
+--------------------------|
+--2--4^2--4--5/6----------|
+--2--4^2--4--5/6----------|
+--------------------------|
+--------------------------|
+
+
+Here's the riff played before the first verse:
+
+Palm mute all f#'s on six string: (the technique I recommend for this is
+rocking your
+first finger back and forth and using the third finger to barre the two notes
+at the fourth
+fret:
+
+------------------------|-------------------------------|---------------------
+-------|
+------------------------|-------------------------------|---------------------
+---3---|
+------------------------|---------2--------4------------|--2------------------
+---2---|
+-2----------------------|---------2--------4------------|--2------------------
+---0---|
+-0----------------------|-------------------------------|---------------------
+-------|
+---2--2--2--2--2--2--2--|-2--2--2--------2--------------|----2--2--2--2--2--2-
+-------|
+
+---------------------|
+-(3)-----------------|
+-(2)-----------------|   "A" yeah, here's "A"
+-(0)-----------------|  
+-----4^0--2----3--4--|
+---------------------|
+
+------------------------|-------------------------------|---------------------
+---|
+------------------------|-------------------------------|---------------------
+---|
+------------------------|---------2--------4------------|--2------------------
+---|
+-2----------------------|---------2--------4------------|--2------------------
+---|
+-0----------------------|-------------------------------|---------------------
+---|
+---2--2--2--2--2--2--2--|-2--2--2--------2--------------|----2--2--2--2--2--2-
+*2-|
+
+                                                               * last note
+not P.M.
+
+Ok, do that again for the verse up to "A" and then again up to "A" with the
+following
+variation on the last two bars:
+
+"...problem."
+-----------------------|-----------------------|
+-----------------------|---3-------------------|
+-2---------------------|---2-------------------|
+-2---------------------|---0-------------------|  
+-----------------------|-------4^0--2----3--4--|
+---2--2--2--2--2--2--2-|-2---------------------|
+
+He continues using the riff throughout the verse with some variations that
+you should be able to fiqure out were they go if you here the song:
+
+"Kickin' back.."
+-----------------------|
+-----------------------|
+-----------------------|
+-2---------------------|
+-0---------------------|
+---2--2--2--2--2--2--2-|
+
+"...kickin' you."
+-----------------------|
+-----------------------|
+-----------------------|
+-----------------------|
+---------*2~~~-3--4----|
+-2--2--2---------------|
+
+         * AH 
+ "Ah.."
+-----------------------|
+-----------------------|
+-----------------------|
+-2---------------------|
+-0---------------------|
+---2--2--2--2--2--2--2-|
+
+ "No.."
+-----------------------|
+-----------------------|
+-----------------------|
+-----------------------|
+---0--2~~~-------3--4--|
+-2---------------------|
+
+
+Then do this:
+
+"Anyway, if I make 'em...."
+
+------------------------|-------------------------------|---------------------
+---|
+------------------------|-------------------------------|---------------------
+---|
+------------------------|---------2--------4------------|--2------------------
+---|
+-2----------------------|---------2--------4------------|--2------------------
+---|
+-0----------------------|-------------------------------|---------------------
+---|
+---2--2--2--2--2--2--2--|-2--2--2--------2--------------|----2--2--2--2--2--2-
+-2-|
+
+------------------------|-----------------------|--------------------------|
+------------------------|-2/4--4--4--4--4--4--2-|--------------------------|
+-----2------------------|-2/4--4--4--4--4--4--2-|--------------------------|
+-----0-----2------------|-2/4--4--4--4--4--4--2-|--------------------------|
+-----0-----2------------|-----------------------|--0--0--0--0--0--0--0--0--|
+--2--------0------------|-----------------------|--------------------------|
+
+------------------------|----------------------------------5(17)|
+--2/4--4--4--4--4--4--5-|-(5)-5(17)------------------5(17)------|
+--2/4--4--4--4--4--4--6-|-(6)------------------7(19)------------|
+--2/4--4--4--4--4--4--7-|-(7)------7(19)-7(19)------------------|
+------------------------|---------------------------------------|
+------------------------|---------------------------------------|
+
+------------------------|-------------------------|
+--2/4--4--4--4--4--4--2-|-------------------------|
+--2/4--4--4--4--4--4--2-|--------------2----------|
+--2/4--4--4--4--4--4--2-|--------------2----------|
+------------------------|--0--0--0--0----0--0--0--|
+------------------------|-------------------------|
+
+------------------------|-------------------------|
+--2/4--4--4--4--4--4--5-|-(5)---------------------|
+--2/4--4--4--4--4--4--6-|-(6)----6----(6)/9---9---|
+--2/4--4--4--4--4--4--7-|-(7)----6----(6)/9---9---|
+------------------------|--------4----(4)/7---7---|
+------------------------|-------------------------|
+
+"Makin' wave's a waste..."
+
+------------------------|-------------------------------|---------------------
+-------|
+------------------------|-------------------------------|---------------------
+---3---|
+------------------------|---------2--------4------------|--2------------------
+---2---|
+-2----------------------|---------2--------4------------|--2------------------
+---0---|
+-0----------------------|-------------------------------|---------------------
+-------|
+---2--2--2--2--2--2--2--|-2--2--2--------2--------------|----2--2--2--2--2--2-
+-------|
+
+---------------------|
+-(3)-----------------|
+-(2)-----------------|
+-(0)-----------------|  
+-----4^0--2----3--4--|
+---------------------|
+
+         "Got no faith..."
+
+
+------------------------|-------------------------------|---------------------
+---|
+------------------------|-------------------------------|---------------------
+---|
+------------------------|---------2--------4------------|--2------------------
+---|
+-2----------------------|---------2--------4------------|--2------------------
+---|
+-0----------------------|-------------------------------|---------------------
+---|
+---2--2--2--2--2--2--2--|-2--2--2--------2--------------|----2--2--2--2--2--2-
+-2-|
+
+------------------------|
+------------------------|
+-----2------------------|
+-----0-----2------------|
+-----0-----2------------|
+--2--------0------------|
+
+Bridge:
+
+"why..."
+
+1&.....................&|...................4.&|1.&...........4..&|1.&........
+....|
+A(2nd pos)------------D5|-(D5
+etc.)----------E5|---------------F#m|---------------|
+
+"carry you?"
+
+------------------------|---------------------|-----------------------------|
+------------------------|---------------------|-----------------------------|
+------------------------|---------------------|-------9(21)-----------------|
+------------------------|---------------------|--9(21)---------7(19)--------|
+-0--0--0--0--4----0--0--|-5-----------4----0--|-----------7(19)--------7(19)|
+------------------------|--------------------0|-----------------------------|
+
+Punch an E5 chord (7th pos) here:
+
+       "I just.."
+
+Then:
+
+"slide..."
+
+1&.....................&|...................4.&|1.&...........4..&|1.&........
+....|
+A(2nd pos)------------D5|-(D5
+etc.)----------E5|---------------F#m|---------------|
+
+Play A5 for a bar then this on the A string:
+
+--0--0-------2--0--4--|-(4)--4(7)--4(8)--4(8)--4(9)--4(11)~~~|--(4(11))~~~~~~~
+|
+
+OK, now:
+
+Now do the bar dive trick, except shake the bar 9 times, (i.e. 1&2&3&4&1)
+
+Continue with this on the "&" of first beat:
+
+--------------------------|
+--------------------------|
+--2--4^2--4--5/6----------|
+--2--4^2--4--5/6----------|
+--------------------------|
+--------------------------|
+
+For the Chorus play:
+
+------------------------|-------------------------------|---------------------
+-------|
+------------------------|-------------------------------|---------------------
+---3---|
+------------------------|---------2--------4------------|--2------------------
+---2---|
+-2----------------------|---------2--------4------------|--2------------------
+---0---|
+-0----------------------|-------------------------------|---------------------
+-------|
+---2--2--2--2--2--2--2--|-2--2--2--------2--------------|----2--2--2--2--2--2-
+-------|
+
+---------------------|
+-(3)-----------------|
+-(2)-----------------|   
+-(0)-----------------|  
+-----4^0--2----3--4--|
+---------------------|
+
+------------------------|-------------------------------|---------------------
+---|
+------------------------|-------------------------------|---------------------
+---|
+------------------------|---------2--------4------------|--2------------------
+---|
+-2----------------------|---------2--------4------------|--2------------------
+---|
+-0----------------------|-------------------------------|---------------------
+---|
+---2--2--2--2--2--2--2--|-2--2--2--------2--------------|----2--2--2--2--2--2-
+*2-|
+
+
+Now, for verse two and the chorus, you already know, just repeat the stuff.
+
+
+E-(2)~~~~~-------|
+
+Now for my favorite, the solo, pretty hard to fiqure out, I read this one
+riff in a guitar
+mag, you know the over the top tapping:
+
+The tapped riff is really 7th chords arppegiated. (16th notes) I show the
+technique for one chord
+and where the next chords are:
+
+A7(12th)
+
+
+
+
+
+
+                      A7(12th)--|--B7(14)---|--B7(14)--|--C7(15)--|-D7(17)--|
+
+------------------------------------| 
+-14------14--------14------14-------|
+-----12-------12-------12------12---|
+---14------14--------14------14-----|
+-------12--------12------12-------12|
+------------------------------------|
+* 1 2 1 2 1 2  1 2  1 2 1 2 1 2 1  2
+
+ Play the 14's with right hand and 12's with left over the top of the neck
+with the
+left hand pinky lying across and muting all the strings to cut out noise.
+
+* fingering
+
+Then he changes it with the same ideas:
+
+E7 (play three times)
+
+--------------------17-------------|
+-21--17--21--17--21----19--21--17--|
+-------19------19----------------19|
+---21------21------21--------21----|
+-----------------------------------|
+-----------------------------------|
+
+The solo I'll post later after I figure it out!!!  
+
+
+
+
+
+After the solo, play the intro again with some difference that's not worth
+tabbing, so
+you should be able to figure out the order of the stuff. There's one more
+verse, and there
+is some more variation in the last chorus that you could fiqure out easily,
+he just plays 
+F#'s instead of doing the D chord thing. He also plays the tapped riff again
+at the end. 
+Of course, you can improvise, so listen to the song
+and play along. It's a lot easier to memorize that way and helps with timing.
+
+Questions or comments, don't be shy: e-mail to MStra5150@aol.com
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/jump.tab b/guitar/tabs/Van Halen/jump.tab new file mode 100644 index 0000000..30de575 --- /dev/null +++ b/guitar/tabs/Van Halen/jump.tab @@ -0,0 +1,161 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / jump.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+#
+
+From: PMWOOLDRIDGE@VAX1.RAIN.GEN.MO.US
+Date: Wed, 3 Apr 1996 16:00:19 -0600 (CST)
+
+
+
+		"Jump" by Van Halen
+
+	Here's "Jump"  arranged for guitar. 
+	I've seen this done in many differnt tunings, 
+	but this is how it goes in standard tuning.
+
+e---------------------------------------------------------------------------
+B-------15----17----13-----13----15---15---17--------------------
+G-------16----17----14-----14----16---16---17--------------------
+D-------17----17----15-----15----17---17---17--------------------
+A--------------------------------------------------------------------------
+E--------------------------------------------------------------------------
+
+e------------------------------------------------|
+B----13----13------------8---8---8---------|
+G----14----14------------7---7---7---------|	repeat this for awhile during
+D----15----15------------9---9---9---------|the verses untill you get to here
+A------------------------------------------------|
+E------------------------------------------------|
+
+
+e---------------------------------------------------------------------------
+B---------------------------------------------------------------------------
+G--------------------------------------------------------------------------		~~~~
+ = vibrato
+D--------------------------------------------------------------------------
+A--------------------------------------------------------------------------
+E--------7----5--5----7----5--5-----7-----5~~~~~------------------
+
+	This part is behind the "Cant' you see me standing here, I got my back against t
+he wrecking machine..." part.
+	Then you play........
+
+	(Palm Muted)
+e------------------------------------------------------------
+B--------------1-------------------1---------5\3----------
+G--------2--------------------0-----------------------------
+D---3---------------3----2---------------------------------
+A------------------------------------------------------------
+E------------------------------------------------------------
+
+e------------------------------------------------------------
+B--------------1-------------------1---------10\8-------		
+G--------2--------------------0-----------------------------		
+D---3---------------3----2---------------------------------
+A------------------------------------------------------------
+E------------------------------------------------------------
+
+then you play the same chords you did in the begining for the chorus.
+
+
+Well, there's more, but I'm done tabbing for tonight, so........
+
+Questions, Comments, etc.
+E-Mail: pmwooldridge@vax1.rain.gen.mo.us
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/little_guitars.tab b/guitar/tabs/Van Halen/little_guitars.tab new file mode 100644 index 0000000..7e6ae10 --- /dev/null +++ b/guitar/tabs/Van Halen/little_guitars.tab @@ -0,0 +1,293 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / little_guitars.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+LITTLE GUITARS
+Van Halen,Diver Down
+tab by dsale@jax.jaxnet.com
+tuning: regular,exept AFTER intro, low E = D (dropped D tuning)
+
+INTRO.
+                                                        harm.
+                                                                                
+---0------0-------------0-----------------0---0---------12----------------0-----
+---0---------0-------------0--------------0------0----------0-------------0-----
+---11-----------11------------11--11--13--13--------13--------------------9-----
+---12---------------12------------12--14--14-----------------------7--10--10----
+---12-----------------------------12--14--14-----------------------7--10--10----
+---0--------------------------------------0--------------------12---------0-----
+                                                                                
+
+                                                                                
+0------------0-----------0--------0--------|
+---0------------0-----0-----0-----0--------|
+------9------------9--7--------7--9--7--6--|
+---------10-----------9-----------9--7--7--|
+----------------------9-----------0-----0--|
+----------------------------------------0--|
+                                                                                
+
+* - pick as fast as possible,while fretting the lower notes.                                                                                
+0-------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+----h0-----4-----7-----8/12-----12-----10-----8-----7-----------0-----4---------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+---------------------------9----------------------------------------------------
+-----------------------10-------------------------------------------------------
+7-----8-----10-----12------------0-----4--7-----8/12--------12-----10-----8-----
+                                                                                
+
+                                                                                
+------------------------------------------------------------|
+----------------------------*0------------------------------|
+----------------------------------------------*0------------|
+------------------------------------------------------------|
+------------------------------------------------------------|
+---12-----10-----8-----7-----7--------7--8--7--8--8--10--8--|
+                                                                                
+
+                                                                                
+0---0---------0---0----------------------------0-----------0--------------------
+0------0------0------0---------0------------0-----0-----------0-----------------
+11--------11--9---------9---------9---------0--------0-----------0--------------
+0-------------10-----------10--------10-----3-----------3-----------3-----------
+--------------------------------------------3-----------------------------------
+10------------8-----------------------------1-----------------------------------
+                                                                                
+
+                                                                                
+---------0-----------------------------0-----------0-----------------------0----
+------------0--------0--------------0-----0-----------0-------------------------
+------0--------0--------0-----------0--------0-----------0--------------0-------
+---4--------------4--------4--------3-----------3-----------3--------4----------
+2-----------------------------------3-----------------------------2-------------
+------------------------------------1-------------------------------------------
+                                                                                
+
+                                                         harm..       
+------------------------0-----------0-----------0-----0--------5--|
+0--------0-----------------0-----------------0-----0--0--5--7-----|
+---0--------0--------5--------5--------5-----7--------6-----------|
+------4--------4-----3-----------3--------3--5--------5-----------|
+---------------------0-----------------------0--------0-----------|
+------------------------------------------------------------------|
+                                                                                
+THE SONG.
+w/flanger / distortion
+drop d tuning begins here.                                                 
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+3/2/3--3/5--5--2p0--3--3/2--------3-----0--3/2/3--3/5--5--2p0--3--3/2~~~--3-----
+----------------------------0--x--0--x--0---------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+3--3/2/3--3/5--5--2p0--3--3/2-----3-----------3/2/3--3/5--5--2p0--3--3--2-------
+-------------------------------0-----x--0--0------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------|
+--------------------------------|
+--------------------------------|
+--------------------------------|
+~~~--3/2/3--3/2/3--3/5--5--2p0--|
+--------------------------------|
+                                                                                
+
+                                                                                
+5--5--------5-----------5--------5-----5-----3--3--3--------3-------------------
+8--7--------5-----------5--------5--5--5-----6--6--5--------3--------5--5--3----
+7--7--------6-----------6--------6--7--6-----5--5--5--------4--------3--3--3----
+------0--0-----0--0--0-----0--0-----------0-----------0--0-----0--0--3--3-------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+(repeat twice)                                                                  
+
+
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+---------0--------0--------------0----------------------------------------------
+------0--------0--------------------0--------------0--------0--------------0----
+2--3--------2--------2--3--2--1-----------------0--------0----------------------
+---------------------------------------0--2--3--------2--------2--3--2--1-------
+                                                                                
+
+                                                                                
+---------------0--------------------------0-------------------------------------
+---------0--0-----0--------------0--0--0-----0----------------------------------
+---------0--0--------0--------0--4--4--4--------4-----------4-----5-------------
+---------3--3-----------3--3--3--4--4--4-----------4--------4-----3-------------
+0--------3--3--------------3--3--2--2--2-----------------------0--0-------------
+---------3--3--------------3--3-------------------------------------------------
+                                                                                
+
+                                                                                
+------------------|-----2--------0--------0--2--------0--3--2-----|-this is the
+------------------|--3--3--3-----3--3-----3--3--3-----3--3--3--3--|fingerpicked
+------7--6--------|--2-----2--2-----2--2--------2--2-----------2--|part you hear
+------5--5--------|--0--------0--------0-----------0--------------|quite often
+0--0--0--0--0--0--|-----------------------------------------------|during the 
+------------------|-----------------------------------------------|song.Its used
+                                                                   many times in
+                                                             the song,including
+                                                             at the end.    
+---3--------3--2--0-----------|-------------------------------------------------
+3--3--3-----3--3--3--3--------|-------------------------------------------------
+0-----0--0-----------0--------|-------------------------------------------------
+------------------------------|-------------------------------------------------
+3-----------------------0--0--|-------------------------------------------------
+------------------------0--0--|-------------------------------------------------
+                                                                                
+
+"Cant grow before im.."                                                    
+--------------------------------------------------------------------------------
+------0--0--0--1--------0--0--0--0--1-----------0--0-----1--1-----0--0--0--0----
+------0--0--0--2--2-----0--0--2--0--2-----------0--0-----2--2-----0--0--0--0----
+3-----------------3--------------------3-----3-----------------3----------------
+3--3-----------------3--------------------3--3--------3-------------------------
+3--------------------------------------------3----------------------------------
+      fingerpicked.                                                             
+
+
+
+
+
+            "Senorita do you.."
+---------|-----0-----------------------------------------0-----------------|----
+0--1-----|--3-----3--------3--2-----0-----------------3-----3--3--2--------|----
+0--2-----|--0--------0-----------0-----0-----------0-----------------0-----|----
+------0--|--2-----------2-----------------------2-----------------------2--|----
+------0--|--0--------------------------------0--------------------------0--|----
+---------|-----------------------------------------------------------------|----
+                                                                                
+
+catch as  catch        catch as catch can, anybody in there right mind could 
+--------------------------------------------------------------------------------
+0-----2-----3-----------0-----2--3--------0-----2-----3-----------0-----2-------
+0-----0-----0-----------0-----0--0--------0-----0-----0-----------0-----0-------
+0-----0-----0-----------0-----0--0--------0-----0-----0-----------0-----0-------
+--------------------------------------------------------------------------------
+5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5--5----
+                                                                                
+
+see...                                                                          
+------------|
+3--2--0-----|       OK,thats a good portion of the song.All of it is there
+0--0--0-----|       but just used in different parts.I didnt do the
+0--------0--|       solo.Ok any questions/suggestions,whatever,send em to
+------------|       dsale@jax.jaxnet.com
+5-----------|       [http://www.jaxnet.com/~dsale]
+                                                                                
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/mean_streets.tab b/guitar/tabs/Van Halen/mean_streets.tab new file mode 100644 index 0000000..ad56b01 --- /dev/null +++ b/guitar/tabs/Van Halen/mean_streets.tab @@ -0,0 +1,240 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / mean_streets.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+This is an attempt at transcribing Mean Streets off Van Halen's Fair Warning.
+I've gotten the gyst of it (I think), but the intro isn't exactly correct. 
+Call this a cry for help.  If you know of a better way to do it, please e-mail
+me! (brian_t@ix.netcom.com)   Here goes....
+
+The fade-in riff is a percussive guitar version of a 'paradiddle' (that's what
+my drummer says, anyway).  This is pretty close to what he is doing. All
+notes are tapped harmonics, produced by momentarily ramming your finger onto
+the string right at the fret and releasing.  The 12th fret harmonics are
+produced by tapping with your pick hand (I'm told Eddie does it with his thumb).
+
+
+5------------12-----------12----12---------------
+6--12--5--7-----5--12--5------5-----5--12-5-7----
+    t  i  r  t  i  t   i  t   i  t  i  t  i r
+
+Try to get this as smooth and rhythmic as possible.  It's important to slap the 
+string pretty hard to get the harmonics
+
+Then comes the flurry of harmonics and tapped arpeggios.  These are far from
+correct, but they give a general idea of what is going on.  Notes in parentheses  
+are hammered harmonics. nn/nn designates a fretted note that is made harmonic  
+by hammering over the second postion.  5/12 says to fret at the fifth, and
+tap-hammer over the 12th fret.
+                             1-------------------|2----------|
+   t p  h  h    p h   t  h    t    t    t    t   |   t    t  |
+4-------------------------------------------------------5/12---
+5-------------10-0-5-5/12-7------------------------5/12--------
+6--12-0--5--7----------------(12)-(12)-(12)-(12)---------------
+
+
+Any improvements would be greatly appreciated.
+
+The final riff is correct:
+
+1---------------------------------------------------------------
+2-------------7/19-----------------5/17-------------------------
+3-------7/19-------7/19----------------6/18---------------------
+4-7/19------------------7/19---------------7/19-7/19------------
+5----------------------------5/17--------------------7/19-------
+6---------------------------------------------------------------
+
+D     C   D   C   D   C   D   C D C  B
+/ / / / / / / / / / / / / / / / / /  / (wham bar, feedback)
+
+The song! Artificial harmomics, squeals produced by trailing the pick with
+the edge of your thumb, are notated by !.
+               1,3-------|2---------------|4------------------|
+1------------------------|----------------|-------------------|
+2------------------------|----------------|-----5-------------|
+3------------------------|----------------|---5---5----7----3-|
+4---------------2--------|----------------|-5--------7----3---|
+5-3-0--0---3-0--0--------|----------------|-------------------|
+6--------3---------0-3!--|-5-5-4-4-3-3-2-0|-------------------|
+   p        p             {muted          }{ harmonics        }
+
+Section 4 is replaced the second time around with a pick slide down strings 6 
+& 5; the rhythm is provided by toggling the guitar pickup on and off.  This
+can be pretty tricky to do, as you have to come right back out of it into a
+C on the 3rd fret to go into the verse.
+
+The verse copies the intro, you can figure that out by listening to the 
+tape.
+
+Chorus:
+                                                  1------------------------
+1--------------------------------------------------------------------------
+2------------------------------------7----------------------10----12--14---
+3------------------------------------7----------------------10----12--14---
+4------2---2--------------------2----7-----------------2----10----12--14---
+5-3-0--0-0-0----3-0----5!--3-0--0-0-0---3-0---5!--3-0--0-0-0---------------  
+6-------------------3-----------------------3------------------------------
+   p             p          p            p         p
+
+-------------|2--------------------------------------
+1------------|---------------------------------------
+2----------14|-2------------7---7--------------------
+3----------14|-2------------7---7--------------------
+4----------14|-2------------7---7--------------------
+5-3-0-0-0-0--|-0---0-0-0-0--------------------------2
+6------------|----------------------5-5-4-4-3-3-2-2-0
+   p                               {muted         }
+
+
+Eddie adds a lot of little harmonics, pick scrapes, etc. To give the song more
+spontaneity.  The best way to pick these up is liten to the tape, they tend  
+to defy notation  ( Fender mediums do tend to make the best scraping sounds
+however!)
+
+Eddie's solo is very freeform.  I'll notate a few of the more signature licks.
+When you're trying to play a Van Halen solo, its usually best to nail those
+and glue them together with licks of your own in the same mode. 2^---\ means
+bend up two steps, hold, then release.
+    
+ {   2X     }                         { 2X     }
+1-----------------------------------------------   
+2-----------------------------------------------
+3-14--14--x------------------14--14-x--11-12-x-x
+4-14--14--x---12--10---------14--14-x--12----x-x
+5-14--14--x----------12--10--14--14-x-----------
+6-----------------------------------------------
+  { with wah pedal                             }
+
+
+   2^---------------\0 1^ 0       p                                   p h
+1---------------------------------------------5--8-7-5--------------------
+2----------------------------5---7--5-------6--------- A-Minor Riff  8-7-8
+3--7!-7!-7!-7!-7!-7!-----------7------7---7----------- 5th pos       -----
+4-----------------------------------------------------               -----
+5-------------------------------------------------------------------------
+6-------------------------------------------------------------------------
+
+       p  p     p  s     p  s                            1^\0 p   1^
+1-15-19-17-15-17-15-14-15-14-12----------------------------------------
+2-------------------------------                        -15----12 15---
+3------------------------------- wang bar notes & trills---------------
+4-------------------------------    12th pos A minor    ---------------
+5-------------------------------                        ---------------
+6-----------------------------------------------------------------------
+
+    p      p           p            p
+1-----------------------------------------15
+2---------------------------13----13--15--15 <- bend up 1 step
+3--------------12----12--14----14-----------
+4-------12--14----14------------------------ 
+5-12-15-------------------------------------
+6-------------------------------------------
+
+
+There's plenty of goof ups in here, but when I play Van Halen covers I try
+to for replicating the feel of the solo.  You're never going to sound exactly
+like Eddie, and his style is do freeform that it'll sound better if you're
+shooting from the hip anyway.
+
+The song ends out with the guitar fading from C to D, and a slow solo played,
+once again, in A minor.
+
+Good luck!
+
+Brian Smith
+brian_t@ix.netcom.com
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/on_fire.tab b/guitar/tabs/Van Halen/on_fire.tab new file mode 100644 index 0000000..2c9a6b1 --- /dev/null +++ b/guitar/tabs/Van Halen/on_fire.tab @@ -0,0 +1,313 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / on_fire.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE--------------------------------#
+#This file is the author's own work and represents their interpretation of the#
+#song. You may only use this file for private study, scholarship, or research.#
+#-----------------------------------------------------------------------------#
+
+From: "Nils Dücker" <nisse_guramaster@hotmail.com>
+Subject: v/van_halen/on_fire.tab
+Date: Fri, 05 Jun 1998 10:26:00 PDT
+
+
+                                    On fire
+                                      By
+                                   Van Halen
+                                
+                               Tabbed by Nisse D.
+                         
+
+Ok i´ve been all over the web trying to find this, but haven´t 
+seen anything but the solo, so i thought i´d do it by myself.
+This is a rather tricky song to figure out, because of all small 
+licks, so everything might not be correct...                                             
+
+Use a delay,set at about 250 ms or so,plus a flanger to give 
+that ominous distorted sound that Eddie gets.
+There´s bits of lyric to help you keep up.
+Anyway, here goes:
+
+
+Key:
+
+b  : bend
+bf : bend full
+x  : noise
+w  : whammy
+pm : palmmute
+(5): natural harmonic
+\  : slide downwards
+/  : slide upwards
+T  : tap note (i never tap using the pick,
+               finger-tapping gives a greater sound)
+
+Intro:
+                       
+|----------------------------------------------------------|
+|----------------------------------------------------------|
+|-9-7-5-7-4-------9-7-5-7--2*b------17b19wbw---------------|
+|-9-7-5-7-4-------9-7-5-7----------------------------------|
+|-7-5-3-5-2-------7-5-3-5----------------------------------|
+|-----------3bxxx------------------------------------------|
+
+*:bend 2nd and start picking fast while sliding up to 17th fret without 
+  actually fretting,thus causing harmonics.
+
+Then do this:
+
+|-0-(5)-(5)-(5)-(5)---|     Strike harmonic at 5th then make noise on muted 
+|------x---x---x---x--|     strings g and b.The rythm may feel a bit awkward
+|-----x-x-x-x-x-x-x-x-|     at first,but you`ll soon get the hang of it.
+|---------------------|
+|---------------------|
+|---------------------|
+
+Pre verse:
+                                                      harm........
+|-----------------------------------------------------------|-0----------|
+|-----------------------------------------------------------|--(5)-(7)---|
+|---------------------------------------------------------7-|----(5)-(7)-|
+|---2--2-5b--2--2-5-----2--2-5b--2--2-7-----2--2-5b--2--2-7-|------------|
+|-----------------5-------------------5-------------------5-|------------|
+|-0---------------3---0---------------5---0-----------------|------------|
+
+verse 1:
+  bf Pm.................
+|--------------------------------------------------5---|
+|--------------------------------------------------5---|
+|-5---------------------------7----7----7------5-------|
+|-5----5555555\--5555555/-----7----7----7--5-7---7-----|
+|-3----5555555\--5555555/--0--5-0--5-0--5--------------|
+|------3333333\--3333333/------------------------------|
+      "turn your radio`...
+ 
+(note: < and > means slide >:up or <:down, by the way the whole chord is slided)
+
+|-----------------------|-------------------|
+|-----------------------|-------------------|
+|-----------------------|-2bf-x-x-x-x-x-x-x-|
+|---2--2-5b--2--2-5-----|-------------------|
+|-----------------5-----|-------------------|
+|-0---------------3-----|-------------------|
+                     "yes i ....
+
+  bf Pm.................
+|--------------------------------------------------5---|
+|--------------------------------------------------5---|
+|-5---------------------------7----7----7----------7---|
+|-5----5555555\--5555555/-----7----7----7----------7---|
+|-3----5555555\--5555555/--0--5-0--5-0--5-0--5-----5---|
+|------3333333\--3333333/------------------------------|                    
+       "turn me up real ....
+
+                            T    T    T    T    T    T    T
+
+|-----------------------|-----------5^12^7^12^9^12^7^12^5^12^9-|
+|-----------------------|-5^12^7^12----------------------------|
+|-----------------------|--------------------------------------|
+|---2--2-5b--2--2-5-----|--------------------------------------|
+|-----------------5-----|--------------------------------------|
+|-0---------------3-----|--------------------------------------|
+  eeeeaaaarrrrss!"       This tapped riff is played really fast!
+
+For the prechorus play:
+
+Pm         ............... Pm      ...............      
+|--------------------------|-----------------------|
+|--------------------------|-----------------------|
+|-4------------------------|-2---------------------|
+|-4--5--4--4-4-4-4-4-4-4-4-|-5--4--4-4-4-4-4-4-4-4-|
+|-2--5--4--4-4-4-4-4-4-4-4-|-5--4--4-4-4-4-4-4-4-4-|
+|----3--2--2-2-2-2-2-2-2-2-|-3--2--2-2-2-2-2-2-2-2-|
+  B5 G5 F#5                  G5 F#5
+        ´n´ i´m hangin´ ...
+
+Pm      ............... Pm      ...............
+|-----------------------|-----------------------|
+|-5---------------------|-5---------------------|
+|-5--4--4-4-4-4-4-4-4-4-|-5--4--4-4-4-4-4-4-4-4-|
+|-5--4--4-4-4-4-4-4-4-4-|-5--4--4-4-4-4-4-4-4-4-|
+|-3--2--2-2-2-2-2-2-2-2-|-3--2--2-2-2-2-2-2-2-2-|
+|-----------------------|-----------------------|
+  C5 B5                   C5 B5
+        as i ride your ....
+
+Palm-mute all F#s and B`s 
+These chords should be strummed pretty hard...
+
+Chorus:
+
+  G#  G# G   G  A#  A#
+|-----------------------|
+|-----------------------|
+|-15--15-14--14-17--17--|
+|-15--15-14--14-17--17--|
+|-13--13-12--12-15--15--|
+|-----------------------|
+                    "On fireeeeeeee"
+
+play the chorus 4 times
+then do this:   (4 times)
+
+|------2--------0--------3--------2----|
+|------2--------0--------3--------2----|
+|---------------------5--------4-------|
+|---4--------5--------5--------4-------|
+|---4--------5-----0--3-----0--2-------|
+|0--2-----0--3-----------------------7\|
+
+After that play this while shouting "Fireeeee"
+
+PM..................
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|--------------------------------------|
+|---------------------3-----0--2-------|
+|0--2--2--0--3--3--0-----------------7\|
+
+Solo:
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|----------------------4h5p4-------------------------------5h7p5---------|
+|---------------4h5h7---------7--6h7h9------------5--7--9-------h9-5h7h9-|
+|4/7-----4h5h7-----------------------------5h7h9-------------------------|
+|------------------------------------------------------------------------|
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|------------------------6h7p6-----6--------------------------8----------|
+|---------------6--7--9---------9-----7h9-------------8h9h11-------------|
+|--------6h7h9--------------------------------7h9h11---------------------|
+|------------------------------------------------------------------------|
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|---------------------------------------9h10p9---------------------------|
+|----------------------------9--10--12----------12--9--11--13------------|
+|-------------------9h10h12----------------------------------------------|
+|------11/15-------------------------------------------------------------|
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|---------------------10h12p10------10-----------------------------------|
+|----------10--12--14------------14------12h14---------------12--14--16--|
+|-10h12h14---------------------------------------12h14h16----------------|
+|------------------------------------------------------------------------|
+
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|12h14p12------12--14--16--12h16p12h16p12h16p12--------12\---------------|
+|----------16------------------------------------------------------------|
+|------------------------------------------------------------------------|
+|------------------------------------------------------------------------|
+
+
+
+Verse 2:
+
+
+After the solo, play the pre-verse part again (the harmonics all being on
+the 5th fret,you´ll get the point if you listen.)then do the "beep" part 
+again, a little bit longer(for the drums to fill in)then its verse again with 
+some minor changes not worth tabbing,then play the chorus until end.
+Since the recorded version fades out at the end, i haven´t been able to figure 
+out a fitting end yet.
+Once again, this might not be totally correct, but it does sound pretty good. 
+If you´ve got any comments or so just let me know.
+
+Nisse D. (nisse_guramaster@hotmail.com)--====================987654321_0==_
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/on_fire_.tab b/guitar/tabs/Van Halen/on_fire_.tab new file mode 100644 index 0000000..7a19f8e --- /dev/null +++ b/guitar/tabs/Van Halen/on_fire_.tab @@ -0,0 +1,171 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / on_fire_.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+ON FIRE (solo)
+Van Halen
+tabbed by dsale@jax.jaxnet.com
+http://jax.jaxnet.com/~dsale
+
+   Ok somebody requested the harder parts to On Fire, so here they are.
+
+                                                                        
+------2--------0--------3--------2----| 
+------2--------0--------3--------2----|
+---------------------5--------4-------| <- Crunch upon this four times.
+---4--------5--------5--------4-------| 
+---4--------5-----0--3-----0--2-------|
+0--2-----0--3-----------------------7\|
+                                                                        
+     
+                                                                        
+--------------------------------------|
+--------------------------------------| <- This is also done four times, with
+--------------------------------------|    slight variations.
+--------------------------------------|
+---------------------3-----0--2-------|
+0--2--2--0--3--3--0-----------------7\|
+                                                                        
+The next part is the solo.Get this down pat so that you can howl it into the
+night as Ed does.
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+----------------------4h5p4-------------------------------5h7p5---------
+---------------4h5h7---------7--6h7h9------------5--7--9-------h9-5h7h9-
+4/7-----4h5h7-----------------------------5h7h9-------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+-------------------------6h7p6-----6--------------------------8---------
+----------------6--7--9---------9-----7h9-------------8h9h11------------
+---------6h7h9--------------------------------7h9h11--------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+---------------------------------------9h10p9---------------------------
+----------------------------9--10--12----------12--9--11--13------------
+-------------------9h10h12----------------------------------------------
+------11/15-------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+--------------------10h12p10------10------------------------------------
+---------10--12--14------------14------12h14---------------12--14--16----
+10h12h14---------------------------------------12h14h16-----------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+12h14p12------12--14--16--12h16p12h16p12h16p12--------12\---------------
+----------16------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/panama.tab b/guitar/tabs/Van Halen/panama.tab new file mode 100644 index 0000000..f11bf2c --- /dev/null +++ b/guitar/tabs/Van Halen/panama.tab @@ -0,0 +1,246 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / panama.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+Here's Panama by Van Halen... THE WHOLE THING (Well most of it anyway)
+
+Transcribed by Eric Larson (larsoe@rpi.edu)
+
+I figured this out with my own two ears, so I'm sure it's not perfect, but
+I tried to come as close as I could. This is a great song to learn. The chord
+progressions are classic. The solo I found hard to notate, I give the basics,
+fill in the rest with your own improvisation. I should be posting Drop Dead
+Legs soon, another awesome tune!  Perhaps someone could post some stuff off 
+their latest album???
+
+
+Intro:
+
+ E    Esu4   B	    E	   E  B   D	Dsu4  A
+--------------------------------|-------------------------|-
+-9----10-----7------9------10-7-|-7-----8-----7-----------|-
+-9-----9-----8------9-------9-8-|-7-----7-----8-----------|-
+-9-----9-----9------9-------9-9-|-7-----7-----9-----7\\\--|-
+-7-----7------------7-------7---|-5-----5-----------O\\\--|-
+---O-O---O-O---O-O----O-O-------|---O-O---O-O-------------|-
+   PM (all open E's)				    DB	     (Dive Bomb -
+							 Hit the Twang Stick)
+ E    Esu4   B	    E      E  B   D     Dsus4 A
+--------------------------------|-------------------------|
+-9----10-----7------9------10-7-|-7-----8-----7-----------|
+-9-----9-----8------9-------9-8-|-7-----7-----8-----------|
+-9-----9-----9------9-------9-9-|-7-----7-----9-----####--|
+-7-----7------------7-------7---|-5-----5-----------####--|
+---O-O---O-O---O-O----O-O-------|---O-O---O-O-------------|
+						    PS	     (Pick-Slide)
+Pre-Verse:
+  C#min		     B/Bsu4   A
+|-0---------------------------------------------|-
+|-5------------------4-5-4--4\2--2-2------------|-
+|-6------------------4-4-4--4\2--2-2------------|-
+|-6------------------4-4-4--4\2--2-2--4^h^4~~~~-|-
+|-4------4-4-4-4-4-4----------------------------|-
+|-----------------------------------------------|-
+  $				      AH    	    ($ = strum & let ring)
+ 
+ C#min		   B/Bsu4   A  	    B   [---------Riff #1------------]
+-4---------------------------------------------O-----O-----5----5-----5-----|
+-5--4---4-5--------4-5-4--4\2--2-2---------------4-----4-----4----4-----4---|
+-6----6------------4-4-4--4\2--2-2---------4-------4-----4-----4----4-----4-|
+-6-----------------4-4-4--4\2--2-2---------4--------------------------------|
+-4-----------------------------------O-O-O-2--------------------------------|
+----------------------------------------------------------------------------|
+						           [---Harmonics----]
+
+Chorus:
+  E   A  D  A  D A G        E   A  D  A  D A G        E   A  D  A  D A G
+|-------------------------|------------------------|------------------------|
+|--------3-X---3----------|--------3-X---3---------|--------3-X---3---------|
+|-----2--2-X-2-2-2--------|-----2--2-X-2-2-2-------|-----2--2-X-2-2-2-------|
+|-2---2--O-X-2-O-2--------|-2---2--O-X-2-O-2-------|-2---2--O-X-2-O-2-------|
+|-2---O----X-O---O--------|-2---O----X-O---O-------|-2---O----X-O---O-------|
+|-O-O--------------3/5\3~~|-O-O--------------3/5\3~|-O-O--------------3/5\3~|
+ (Uh!)		   (Hey yeah!....)		   (Uh Huh!)
+
+
+-------------------------|
+--------3-X---3----------|
+-----2--2-X-2-2-2--------|
+-2---2--O-X-2-O-2--------|
+-2---O----X-O---O--------|
+-O-O--------------3/5\3~~|
+
+
+
+Verse1:
+  D  E                          E A D                   D   E		   Asu2
+|-------------------------------------------------------------------------O---|
+|-3-------------------------------5---------------------------------------O---|
+|-2-----------------------------9-6-7------------------7-7-9----------O-O-2-\/|
+|-O---2-------------------------9-7-7------------------7-7-9----------O-O-2-\/|
+|-----2-------------------------7---5------------------5-5-7--------------O---|
+|-----O------O-O-O-O-O--------------------(O)-(O)-(O)--------(O)-(O)----------|
+ Jump Back    What's that ....$ PS
+
+
+Bridge:
+  F#			   C#min (arpegiate chord)
+|-O----------------------|-O---------------|---------------------------|------|
+|-O----O-----O-----O-----|-5---------------|---------------------------|------|
+|-3------3-----3-----3---|-6---------------|-\-------------------------|-riff-|
+|-4--------4-----4-----4-|-6---------------|-\-------------------------|--#1--|
+|-4----------------------|-4---------------|----5-------3------------2-|------|
+|-2----------------------|-----------------|------6-5~----4-5~--2~-O---|------|
+  $(Dont you know she...)  $(You lose a....)
+
+
+Chorus
+
+Verse 2 (basically the same as the first)
+
+Solo:
+
+---------------|-------7-----7-7--------------|-----------------|-------------|
+---------------|-----7-------7-7--------------|---H-T-P--H------|-------------|
+---------------|-9^F-----9^F------9^F^9^F\~/--|-6-9-11-6-9- %5x-|-9^F^9^F~~~~~|
+---------------|------------------------------|-----------------|hold this----|
+-3~-O----O-----|------------------------------|-----------------|bend for next|
+------3~---3~~-|------------------------------|-----------------|-part -------|
+..ah oh)				WB = Whammey Bar     % = repeat
+					^F = Bend Full Step  H = Hamer-On
+					T = Tap		     P = Pull-Off
+
+
+------------------------------------------------------------------------------|
+---------T----P----T----P----T----P----T----P----T----P-----------------------|
+-(9^F~)--14-(9^F)--12-(9^F)--14-(9^F)--16-(9^F)--14-(9^f^9~~)--7-7^WB--7-9-7~~|
+------------------------------------------------------------------------------|
+------------------------------------------------------------------------------|
+------------------------------------------------------------------------------|
+				(release 9th bend here) ^  (bend up ^
+							    with whammey bar)
+
+-------------------------------|
+-------------------------------|
+-7^F-7-----7^F~----------------|
+-------9-7------9-8-7----------|
+----------------------9-8-7----|
+----------------------------10-|
+
+Break? (I dunno what ya' call this part!) 'The Reach down 
+					  between my legs part' :)
+
+|------------------------------------------------------------------|--
+|------------------------------------------------------------------|--
+|------------------------------------------------------------------|--
+|---H--P-----------------H--P------------------H--P----------------|--
+|-/9-10-9----7^F^7-----/9-10-9----9~--(9~)---/9-10-9---9~----------|--
+|---------10--------7~---------10-----10-------------10---10-10/12-|--
+
+
+--------------O-------|
+--------------O-------|
+--------------2-------|		The rest of this is basically the same,
+---H--P-------3-------|		He throws some chords in there that you
+-/9-10-9------3-------|		should be able to figure out.
+---------10---1-------|
+	      $ (Arpegiate Chord)
+
+That's about it, It's 2:30 am, I'm beat. :O *yawn* I don't feel like double
+checking this any mistakes should be obvious; If it sounds wrong, It's a
+mistake!
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/pleasure_dome.tab b/guitar/tabs/Van Halen/pleasure_dome.tab new file mode 100644 index 0000000..8a0bb26 --- /dev/null +++ b/guitar/tabs/Van Halen/pleasure_dome.tab @@ -0,0 +1,460 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / pleasure_dome.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+PLEASURE DOME
+Van Halen,For Unlawful Carnal Knowledge
+tabbed by dsale@jax.jaxnet.com
+http://www.jaxnet.com/~dsale
+ok,ed played this w/a steinberger guitar.its basically the same thing,but
+the trans-trem makes it sound like he's using a slide when he depresses it.
+it also moves a few keys up and is able to be locked there,as well.
+H=Harmonics
+P=Palming (only used on parts i deemed necessary:)
+
+ok the intro:
+notes - A & B sound like they are played together.i dunno.i never play the
+        high part,just the low part,sounds as good.on the high part he
+        vibratoed that entire last chord,i just vibrato the 3rd fret on
+        the G string.
+
+play twice:
+A.H--->       B.               H------------------>
+                                  
+----12------|------12--------|--------------12----------|
+----12--0---|------12--0-----|------------------12--0---|
+--------15--|----------3~~~--|----------------------15--|
+--------16--|----------4-----|----------------------16--|
+--------16--|----------4-----|----------19----------16--|
+12----------|--12------------|--12--19------------------|
+                                                                                
+
+             H     H                   H              H     H                     
+-------------5-------------------0--------------------5-------------------------
+\------------------5-------------------7--------------------5-------------------
+----------6-----------6/8--------------------------6-----------6/8--------8-----
+-------7--------7-----7/9-----9-----------------7--------7-----7/9-----9--------
+----0----------------------0-----------------0----------------------0-----------
+--------------------------------------------------------------------------------
+                                                                                
+
+H   H               H     H             H  H                                    
+12------------------5-------------------7-----------------0---------------------
+----12--------------------5----------------7--------------------0---------------
+-----------------6-----------6/8-----8-----------------6-----------6/8-----8----
+--------7-----7--------7-----7/9-----9--------------7-------------------9-------
+-----------0----------------------0--------------0-----------0------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+---0---------0--------0-------------------------------------0-----0-------------
+7---------8--------------0-----0-----------0----------------------0-----0--0----
+-------------------1--------3-----3-----3-----3----------1-----1--3~~~--4--4----
+------10--------------------4--------4-----------4\2--2-----------4-----4--4----
+----------------------------4-------------------------------------4-------------
+----------------0----------------------------------0----------------------------
+                                                                                
+
+                                                                                
+-----------------------0-------------------------------------0-----0-----|
+0--0--0-------------------0-----0-----------0----------------------0-----|
+4--4--3-------------1--------3-----3-----3-----3----------1-----1--3~~~--|
+4--4--4--4\2-----2-----------4--------4-----------4\2--2-----------4-----|
+---------4\2--2--------------4-------------------------------------4-----|
+-----------0----------------------------------------0--------------------|
+                                                                                
+trem.bar
+A.H.  \                                                                    
+--------------0-----0--0--0--------------0-------------0-----0--0--0-----0------
+--------------0-----0--0--0--------0--0--0-------0--0--0-----0--0--0-----0------
+2----\(2)~~~-\4-----2--2--2--------1--1--1---\---4--4--4-----6--6--6-----3------
+--------------5-----3--3--3--------2--2--2-------5--5--5-----7--7--7-----4------
+--------------5-----3--3--3--------2--2--2-------5--5--5-----7--7--7-----4------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+0-----0--0--0--------0--0--0-----0--------------0--------------0-----------0----
+0--0--0--0--0--------0--0--0-----0--------0--0--0--------0--0--0-----0--0--0----
+3--3--4--4--3--------4--4--4-----2--------1--1--1--------4--4--4-----2--2--2----
+4--4--4--4--4--------5--5--5-----3--------2--2--2--------5--5--5-----3--3--3----
+4--4--------4--------5--5--5-----3--------2--2--2--------5--5--5-----3--3--3----
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+---------0----------------0--------------0-----0--0--0-----0--0--0--0--0--0-----
+---0--0--0----------0--0--0--------0--0--0-----0--0--0-----0--0--0--0--0--0-----
+---1--1--1------\---4--4--4--------6--6--6-----9--9--9-----9--9--8--8--8--8-----
+---2--2--2----------5--5--5--------7--7--7-----9--9--9-----9--9--9--9--9--9-----
+---2--2--2----------5--5--5--------7--7--7-----9--9--9-----9--9--9--9--9--9-----
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+0--0--0--0--0--0--|
+0--0--0--0--0--0--|
+8--9--9--9--9--8--|
+9--9--9--9--9--9--|
+9--9--9--9--9--9--|
+------------------|
+                                                                                
+
+P - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+4-----4--4-----4-----4--4-----4--4-----4-----4-----4-----4--4-----4-----4--4----
+--------------------------------------------------------------------------------
+                                                                                
+
+               P - - - - - - - - - - - - - - - - - - - - - - -    
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+---2--2~~~-----4-----4--4-----4-----4--4-----4--4-----4-----4-----4-----2-------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------|
+--------------------|
+--------------------|
+--------------------|
+4~--4--2~~~--4~~~---|
+--------------------|
+
+
+"Well now,none of ...
+                                                                                
+0-----------0--0--0-----------------------------------------------4\|
+9-----------7--7--7--------------6--4--6-----------------6--6-----5-|
+9~~~--------7--7--7-----------6--6--4--6-----------4--4--6--6--4--4-|
+9-----------7--7--7~~~--------6--6--4--6-----------4--4--6--6--4----|
+------------------------------4--4--4--4--4--4-----4--4--4--4-------|
+--------------------------------------------------------------------|
+played as many times as it is,(sorry) then:
+                                                                                
+---------------------------------|
+6--6--4--6--6--4--4--6--6--4--6--|
+6--6--4--6--6--4--4--6--6--4--6--|
+6--6--4--6--6--4--4--6--6--4--6--|
+4--4--4--4--4--2--2--4--4--2--4--|
+---------------------------------|
+                                                                                
+
+"Into a world..                             ....home..                                                   
+0-------------------------------------------------------------------------------
+0--------------------------------------------------------------0----------------
+2-----------------------------------------------1--1--1--2--2--1----------------
+4-----------------------------------------------2--2--2--2--2--2----------------
+--------------------------------------------------------------------------------
+---2--2-----2--2-----2--2-----2--2--2--2--2--2--------------------------2--2----
+                                                                                
+
+                        Miles and Mile....
+--------------------------------------------------------------------------------
+------0--0--0-----------------------------------------------------3--3--3-------
+------1--1--1--1--2--4--4-----------------------------------------2--2--2-------
+------2--2--2--2--2--4--4-----------------------------------------0--0--0-------
+------------------------6-------------------------------------------------------
+2--2--------------------4--------4-----4--4-----4-----4--4-----4----------------
+                                                                                
+where..
+                                                                                
+0-----------------------------------------------------------------0--|
+0-----------------------------------------------------------------0--|
+2-----------------------------------------------------------------2--|
+4----------------------------------------------------------2h3h4--4--|
+--------------------------------------0-----2-----0h2h3h4------------|
+------2-----2--2-----2-----2-----2p0-----2-----2---------------------|
+                                                                                
+
+Thats the verses,which lead into:
+               "Ah,------- Ah....
+
+---------------------5--5--4-----------------------------------4--4-----4-------
+-----10--9-----7-----5--5--5-------9--10--9-----7--8--7--5-----5--5-----5-------
+------------9--7-----6--6--4--------------------7--------6-----4--4-----4-------
+/11------------7-----7--7--6---/9---------------7--------7-----6--6-----6-------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+              Ah,-------------  Ah.                                          
+--------------------5--------------4--------------------------------------------
+----12--9-----7-----5-----5--5--5-----5----10--9--------10--12/14--14-----------
+-----------9--7-----6-----4--4--4-----------------9--------------------14-------
+/9------------7-----7-----6--6--6------/9----------/12------12/14---------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+                            Chorus.
+                                          Lost...
+--------------------------------------------------------------------------------
+----17--17--17-----17--17--17---------------------------------------------------
+----16--16--16-----16--16--16-----18--18--18--16--16--16-----11--11--11\9--9----
+14--16--19--19-----16--16--16-----16--16--16--14--14--14~~~--9---9---9-\7--7----
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+       pleasuredome.             A.H.w/tremelo bar                             
+------------------0--0--0------------------|-----------------------------|
+------------------0--0--0------------------|-----------------------------|
+9--9-----6--6--6--1--1--1--------2---\---2\|-----------------------------|
+7--7-----4--4--4--2--2--2------------------|-----------------------------|
+-----------------------------------------0-|--0--0--2--2-----3--3-----3--|
+-------------------------------------------|-----------------------------|
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------2--------4--------2--------4--2--4--4/5--2--------2--------4--5\4--2----
+--------2--------4--------2--------4--2--4--4/5--2--------2--------4--5\4--2----
+--------2--------4--------2--------4--2--4--4/5--2--------2--------4--5\4--2----
+--------0-----------------0-------------------------------0----------------0----
+7\---2-----2--2-----2--2-----2--2----------------------2-----2--2---------------
+                                                                                
+
+                                                                                
+---------------------------------------------------|
+---------------------------------------------------|
+2---p4p2---p0--4p2p0-------------------------------|
+----------------------5p4p2--5p4p2-----------------|
+------------------------------------5p4p2--5p4--4--|
+---------------------------------------------------|
+                                                                                
+Guitar Solo
+* = full
++ = 1/2
+[ & ] = two hand tap
+
+ H - - - - - - -        *             +      +
+--------------------------------9-----------------------------------------[14----
+---9------~~~-----9~~~------9-----12------9---------9---------[14--9--12]-------
+------------------------11------------11-----11\-9-----9~~~/7-------------------
+------------------------------------------------\-------------------------------
+8-------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                       +        
+9--12]---[16--9--12]---[14/15]---[9--12]---[16--9--12]---[16/21p12~~~]----------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-----------------------------------------------------------------------11-------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+         /2 1/2   /2 1/2                       *        1/4               
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------9--11------9------------
+9~~~--11--9~~~--11--9--11--9--11~~~--11--9-----11p9~~~---------11-----11--------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+-----------------------------------------------9h12p10--9h12p10p9------9--10-------
+---------------------------------------8h9h11----------------------11--------------
+---------------------2/---------8h9h11----------------------------------------------
+10-9--7--9--7~~~--7/---------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+----------------------------13h14h16/17------------14h16h17--16h17p16p14--------
+12--10------------13h14h16---------------14h16h17-------------------------17----
+--------13h14h16----------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+14------17--------17------------14----------------------------------------------
+----17----------------17---p14------14------14--14\-----------------------------
+----------------------------------------16---------4--2--4-----4--4--4-----2----
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+                                  /2 1/2     \     \1/
+                                                                         
+--------------------------14--17------p14------17--17-----16p14--14\------------
+---4*--------------------------------------17--------------------14\10/14-------
+4--4*-4--2~~~-------------------------------------------------------------------
+---------------4-----4/---------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                        *                       
+14--16--16--16--17--17--17--17--18--18-----19/21/23/24--24---\|
+--------------------------------------------------------------|
+--------------------------------------------------------------|
+--------------------------------------------------------------|
+--------------------------------------------------------------|
+--------------------------------------------------------------|
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+5--4~~~--4--2--2--2--2--2--2--2--2--5--4~~~--4--2--2--------2-------2--2--------
+4*-4-----4--2-----------------------4--4-----4--2--2--------2-------2--2--------
+------------------------------------------------------4--2-----4p2--------4-----
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                A.H.            +                               
+--------------------------------------------------------------------------------
+----2--2-------2----------------*5~~~--4--------------5p2--7p2h5p2--7p2--9------
+----2--2-------2----------------*4-----4-----2--4-------------------------------
+p2--------4p2-----4--------------------------2----------------------------------
+---------------------------------------------0----------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                            /*\                                                 
+-------------------------------------|
+p2--7p2--9p2--10p2--7p2--9-----------|
+----------------------------4--4--2--|
+-------------------------------------|
+-------------------------------------|
+-------------------------------------|
+
+Ok,and,thats the song,except for the cool little outro at the end.
+this is done w/the fingers rather the pick.
+
+                                                                                
+--------------------------------------------------------------------------------
+----------------------------------17--------------------------------------------
+----18--------16--------18----14------------18--------16--------18--------16----
+16----p0--14----p0--16----p0--------p0--16----p0--14----p0--16----p0--14--------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------18------------18--------16-------11--------16-------11-------9----------
+p0--16------------16----p0--14----p0--9----p0--14----p0--9----p0--7---p0--9-----
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+------------0-------------------------------------------------------------------
+11-------9--------6-------------------------------------------------------------
+--p0--7--------4----------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/poundcake.tab b/guitar/tabs/Van Halen/poundcake.tab new file mode 100644 index 0000000..8bc2c12 --- /dev/null +++ b/guitar/tabs/Van Halen/poundcake.tab @@ -0,0 +1,315 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / poundcake.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: Paul D <S3BZ@MUSIC.TRANSY.EDU>
+
+Van Halen's "Poundcake" - tab by Paul D.
+
+First things first, unless you have a guitar with really good natural
+harmonic response, don't bother playing this song.  The little "call and
+response" parts for the verses (one line of Sammy's vocals followed by
+natural harmonics from Eddie) are impossible to play (audibly) without it.
+On the recorded version Eddie fattens up the main riff by overdubbing two
+or three tracks of electric 12-strings.  Please excuse the mess and breakup.
+It's supposed to be relatively flowing, but the visual-ASCII conversion on
+the tab program I used hasn't quite been perfected.  There's bits of lyric
+here and there to help you keep up.
+
+                                    Poundcake
+                                  by Van Halen
+                                  tab by Paul D.
+                               s3bz@music.transy.edu
+
+
+
+|-0-0-0-0-0---0-0-|-0---0-0-0---0-0-|-0---0-0-0---------------|-----------------
+|-0-0-0-0-0---0-0-|-0---0-0-0---0-0-|-0---0-0-0---------------|-----------------
+|-9-9-9-9-9---9-9-|-9\7-7-7-7---7-7-|-7p6-6-6-6---------------|-----------------
+|-9-9-9-9-9---9-9-|-9\7-7-7-7---7-7-|-7---7-7-7---------------|-----------------
+|-7-7-7-7-7---7-7-|-7\5-5-5-5---5-5-|-5p4-4-4-4-----0-0-0-0-0-|-----------------
+|-----------------|-----------------|-------------------------|-----------------
+
+
+Harmonics..............]
+-5-----------0----5---0-|-0-0-0-0-0---0-0-|-0---0-0-0---0-0-|-0---0-0-0---0-|---
+-5-5-5-7-7-7-5-5----5-0-|-0-0-0-0-0---0-0-|-0---0-0-0---0-0-|-0---0-0-0---0-|---
+------------------------|-9-9-9-9-9---9-9-|-9\7-7-7-7---7-7-|-7p6-6-6-6---6-|---
+------------------------|-9-9-9-9-9---9-9-|-9\7-7-7-7---7-7-|-7---7-7-7---7-|---
+------------------------|-7-7-7-7-7---7-7-|-7\5-5-5-5---5-5-|-5p4-4-4-4---4-|---
+------------------------|-----------------|-----------------|---------------|---
+
+
+    Harmonics.....]
+--0--5-------5-5-5-x-x-|-0-0-0-0-0-----0--0--|-0--0--0--0------0--0--|----------
+--0----5-5-5-------x-x-|-0-0-0-0-0-----15-15-|-15\13-13-13-----13-13-|----------
+6------------------x-x-|-9-9-9-9-9-----14-14-|-14\12-12-12-----12-12-|----------
+-----------------------|-9-9-9-9-9-----12-12-|-12\10-10-10-----10-10-|----------
+4----------------------|-7-7-7-7-7-----12-12-|-12\10-10-10-----10-10-|----------
+-----------------------|---------------------|-----------------------|----------
+
+
+               bend   bend
+0--0-0-0-|-----------------------||
+13\0-0-0-|----------2------2-----||
+12\6-6-6-|----------2------2-----||
+10\7-7-7-|----------2------2-----||
+10\------|----------0------0-----||
+---------|-5\3--3------3-----5\0-||
+                          She's
+
+P.M.....          Harm.......]  PM.....          Harm.......]
+--------------------|---------|--------------------|---------|------------------
+--------------------|---------|--------------------|---------|------------------
+--------------------|---------|--------------------|---------|------------------
+---------9----------|---5-----|---------9----------|-5-------|------------------
+---------7----------|-5-------|---------7----------|---5-4---|------------------
+-0-0-0-0---0-0----4-|-----4-3-|-0-0-0-0---0-0----4-|-------3-|------------------
+Gotta have soul...              ...
+
+P.M.....          Harmonics..]
+--------------------|---------|
+--------------------|---------|
+--------------------|---------|
+---------9----------|---5-----|
+---------7----------|-5---5---|
+-0-0-0-0---0-0----4-|-------4-|
+Well just plain...
+
+                Harmonics.....]     (play main riff until end of prechorus)
+-------------------|-----12----||-0-0-0-0-0---0-0-|-0---0-0-0-----0-0-|---------
+-------------------|---7----12-||-0-0-0-0-0---0-0-|-0---0-0-0-----0-0-|---------
+-------------------|-5---------||-9-9-9-9-9---9-9-|-9\7-7-7-7-----7-7-|---------
+--------9--------5-|-----------||-9-9-9-9-9---9-9-|-9\7-7-7-7-----7-7-|---------
+--------7----------|-----------||-7-7-7-7-7---7-7-|-7\5-5-5-5-----5-5-|---------
+0-0-0-0---0-0------|-----------||-----------------|-------------------|---------
+Wrapped up...                     ...
+
+                   Depress bar slowly.....
+0---0-0-0--------||---------------------||
+0---0-0-0--------||---------------------||
+7p6-6-6-6--/14p0-||---------------------||
+7---7-7-7--------||---------------------||
+5p4-4-4-4--------||---h4p0h4p0h4p0h4/10-||
+-----------------||---------------------||
+                                Gettin'
+
+P.M.....          Harm.......]   P.M....          Harm.......]
+--------------------|---------|---------------------|---------|-----------------
+--------------------|---------|---------------------|---------|-----------------
+--------------------|---------|---------------------|---------|-----------------
+---------9----------|-5-------|----------9----------|---5-----|-----------------
+---------7----------|---5-----|----------7----------|-5---4---|-----------------
+-0-0-0-0---0-0----4-|-----4-3-|--0-0-0-0---0-0----4-|-------3-|-----------------
+hard to find...        Guess it ...
+
+P.M.....          Harmonics..]
+--------------------|---------|-------------------------------------------------
+--------------------|---------|-------------------------------------------------
+--------------------|-5-------|-------------------------------------------------
+---------7----------|---5-4---|-------------------------------------------------
+-0-0-0-0---0-0----4-|-------3-|-------------------------------------------------
+--------------------|---------|-------------------------------------------------
+You take an average...
+
+                Harmonics.......]
+-------------------|-------------|----------------------------------------------
+-------------------|-------------|----------------------------------------------
+-------------------|---5---------|----------------------------------------------
+--------7----------|-5---5-------|----------------------------------------------
+0-0-0-0---0-0----4-|-------4-3-3-|----------------------------------------------
+-------------------|-------------|----------------------------------------------
+He can't identify...
+
+                Harmonics.....]   P.M....         Harm........
+---------------------|---------|--------------------|---------||----------------
+---------------------|---------|--------------------|---------||----------------
+---------------------|---------|--------------------|---------||----------------
+--------9------------|-5-------|----------9-9-------|-5-------||----------------
+--------7----------4-|---5-----|----------7-7-------|---5-----||----------------
+0-0-0-0---0-0----4---|-----4-3-|--0-0-0-0-----0---4-|-----4-3-||----------------
+And there's a...                Of the fine...
+
+                                      PM......
+--------------------------|--------------------|---------------------------|----
+4-4-4-4-4-4-4-4-4-4-4-----|--------------------|-4-4-4-4-4-4-4-4-4-4-4-----|----
+4-4-4-4-4-4-4-4-4-4-4-----|-5---7--------------|-4-4-4-4-4-4-4-4-4-4-4-----|----
+4-4-4-4-4-4-4-4-4-4-4-----|-5---7--------------|-4-4-4-4-4-4-4-4-4-4-4-----|----
+2-2-2-2-2-2-2-2-2-2-2-0-2-|-3---5-7------------|-2-2-2-2-2-2-2-2-2-2-2-0-2-|----
+--------------------------|---3---5----0-2-3-5-|---------------------------|----
+Let me get on, let me get on...
+
+            PM......
+--------------------|---------------------------|-------------------------------
+----8-8-7-7---------|-4-4-4-4-4-4-4-4-4-4-4-----|-------------------------------
+5---7-7-7-7---------|-4-4-4-4-4-4-4-4-4-4-4-----|-------------------------------
+5---7-7-7-7---------|-4-4-4-4-4-4-4-4-4-4-4-----|-------------------------------
+3-5-5-5-5-5---------|-2-2-2-2-2-2-2-2-2-2-2-0-2-|-------------------------------
+--3---------0-2-3-5-|---------------------------|-------------------------------
+                     Let me get on, let ...
+
+          PM......
+-------------------|-------------|-3-3-----3-3-----3-3-----3-3-||---------------
+-------------------|-4-----------|-5-5-----5-5-----5-5-----5-5-||---------------
+5---7--------------|-4-----------|-5-5-----5-5-----5-5-----5-5-||---------------
+5---7--------------|-4-----------|-5-5-----5-5-----5-5-----5-5-||---------------
+3-5-5-7------------|-2-------2/3-|-3-3-----3-3-----3-3-----3-3-||---------------
+--3---5----0-2-3-5-|-------------|-----------------------------||---------------
+               My baby's ....
+
+
+Then you do the main riff again for the pre-chorus.  And for the "Uh-a...
+A-huh-HUH!" part, do this:
+
+|------------------------|--------------|------------------------|--------------
+|-14-16-----12-12---14-9-|-7/9-7/9--/12-|-14-16-----12-12---14\9-|--------------
+|-14-16-----12-12---14-9-|-7/9-7/9--/12-|-14-16-----12-12---14\9-|--------------
+|-14-16---x-12-12---14\9-|-7/9-7/9--/12-|-14-16---x-12-12---14\9-|--------------
+|------------------------|--------------|------------------------|--------------
+|------------------------|--------------|------------------------|--------------
+
+
+
+--------------------|------------------------|--------------|-----------------
+9-9p7---7-7p5---5-5-|-14-16-----12-12---14\9-|-7/9-7/9--/12-|-----------------
+9-9p7---7-7p5---5-5-|-14-16-----12-12---14\9-|-7/9-7/9--/12-|-----------------
+9-9p7---7-7p5---5-5-|-14-16---x-12-12---14\9-|-7/9-7/9--/12-|-----------------
+--------------------|------------------------|--------------|-----------------
+--------------------|------------------------|--------------|-----------------
+
+
+
+--------------------------|-------------------------||
+14-16-----12-12---14---16-|-17-17-17-17-17-17-17-17-||
+14-16-----12-12---14---16-|-16-16-16-16-16-16-16-16-||  (to the solo;
+14-16---x-12-12---14---16-|-16-16-16-16-16-16-16-16-||   DON'T EVEN ASK!)
+--------------------------|-------------------------||
+--------------------------|-------------------------||
+
+Then, after the solo, there's that part that goes "I've been out there,
+tried a bit of everything.  It's all sex without love, I've found the
+real thing is Poundcake!" then play this: (and then go to the main riff)
+
+|-5-----------|-----------0-|
+|-5-4-----4---|-5-4h5p4---2/|
+|-4---4-----4-|---------4-2/|
+|-4-----4-----|-----------2/|
+|-2-----------|-----------0-|
+|-------------|-------------|
+
+
+WELL!! Tabbing out almost a whole Van Halen tune certainly has been an
+experience.  Look elsewhere for the solo.  There's NO WAY I'm gonna try
+that one.  There's harmonic tapping, pinch harmonics, regular tapping,
+bends, trem-bar vibrato, and all the other shit I can't really do.
+Basically, you're just gonna have to piece together what I've tabbed here
+and you'll get the basic idea.  If you can't figure it out from this, you
+probably shouldn't be trying to play this song just yet.  It ain't easy!
+Questions/Comments/Augmentations are MOST welcome (by email).
+Good Luck!
+Paul D.  S3BZ@MUSIC.TRANSY.EDU
+
+For the most part, this tab was created with the following:
+================================================================================
+==                   Shareware version of the BUCKET 'O TAB                   ==
+==                  tablature creation software for Windows                   ==
+==                           For more information:                            ==
+==                          email: gse@ocsystems.com                          ==
+==      US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124      ==
+================================================================================
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/put_out_the_lights.tab b/guitar/tabs/Van Halen/put_out_the_lights.tab new file mode 100644 index 0000000..0247e13 --- /dev/null +++ b/guitar/tabs/Van Halen/put_out_the_lights.tab @@ -0,0 +1,215 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / put_out_the_lights.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+PUT OUT THE LIGHTS
+Van Halen,Unreleased
+Studio Demo,1977
+tabbed by dsale@jax.jaxnet.com
+http://jax.jaxnet.com/~dsale
+
+
+intro,chorus                                                                        
+------------------------------------------------------------------------
+-------7-----------------------------------------7--------3h5p3p5p3p5p3----------------
+9------7---------------9---------2---------9-----7----------------------------
+9------7--7--7---------9---------2--2--4---9-----7----4/6----------------------------
+7--9-------------9-11------3--4------------7--9--5--------------------------------
+---7---------------------------------------0--7----------------------------
+                                                                        
+
+verses         "fast eddie     's getin ...got.."                                                
+-3-3----------------------------------------------------------------------
+-3-2----------------------------------------------------------------------
+---------2-------------------2----------------------2----------------------
+---------2-------------------2----------------------2----------------------
+---------0-------------------0----------------------0----------------------
+------------2-----------0-2--------3--2--0----10\------2-------------0-------------
+                                                                        
+
+          /1                      hes ....crazy                                        
+-------------------------|---2-2---------------------3-------\---------------
+-------------------------|---3-3---------------------3-------\---------------
+----2--4-4----2h4p2h4----|---2-2---------------------2-------\-------------------------
+----2--------------------|------------------------------------------------
+----0--------------------|------------------------------------------------
+-2-----------------------|------------------------------------------------
+                                                                        
+
+  when it comes to a  ....
+------------------------------------------------------------------------
+--------0--------0----------0-------------------------------------------
+------------------------------------------------------------------------
+-----4--------4----------4----------------------------------------------
+-2---------0-------------------4----------------------------------------
+----------------------4--------2----------------------------------------
+                                                                        
+
+solo
+          /1/2
+------------------------------------------------------------------------
+--------2------p0-------3--2-----3-2--------------8---h7p5----8---------
+---0----------------0---------2------2--0h2-0--------------5--7--7------
+---0----------------------------------------------------------7---------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                trem.pickin,up 1/2 step          *full               
+------------------------------------------------------------------------
+-------------------------------------------------13------13-13-14--15---
+-7h9-7~------9----9--7---9--------5------2-5----*15~~----15-15-16--17---
+----------------------------------------------3-------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/respect_the_wind.tab b/guitar/tabs/Van Halen/respect_the_wind.tab new file mode 100644 index 0000000..1ed8b5e --- /dev/null +++ b/guitar/tabs/Van Halen/respect_the_wind.tab @@ -0,0 +1,363 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / respect_the_wind.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+
+Date: Mon, 17 Nov 1997 14:17:15 +0100
+From: Esteban Quiroga Garza <al639920@sun1.ur.mx>
+Subject: Tab: "Respect The Wind" by Van Halen 
+
+Respect The Wind
+                   Written by Eddie and Alex Van Halen
+                  Performed By Eddie and Alex Van Halen
+
+This song is an instrumental one and my favorite together with 316....it
+comes in the "Twister" soundtrack  ...this song has too much
+feeling....it took me quite a while to get it tabbed.......I might of
+missed a few notes....or a few squeals.....but I tried to tab it as
+accurate as possible........just listen to the song and get the feeling
+with which Eddie plays the song...........I hope this is of some help
+for someone........ok then.....here goes the tablature explanation......
+
+h  Hammer On           p Pull Off
+b  Bend 1/2 step       B Bend whole step
+/  Slide Up            \ Slide Down
+XXX String Noise      (8) Ghost Note
+T Tap noted fret     ~~~~~~~  Wiggle finger that´s fretting the note
+Note: On the next Bendings strike only the first note
+BW Bend note whole step then pull whammy bar upwards 
+BW/\/\ Bend note whole step then pull whammy bar up and down several
+times
+18(1/4)(1/2)(1)W Strike note, bend 1/4 step, then 1/2 step, then whole
+step then pull whammy bar as much as posible to get a very high pitch. 
+
+Guitar "Dirty" (distortion)
+e-------------------------------------------------------------------
+b-4--6-6/7-6--4-6--6h7--6h7p6---------------------------------------
+g----------------------------XXXX--8B///////16p15-------------------
+d----------------------------------^bend the note return to normal--
+a------------------pitch then bend again and return to normal pitch-
+e-----------------------then slide gradually up to th 16th fret-----
+
+e-XX-16h17p16h17---19b--21b--21-21--19b-21p19p18--16h17h19p17p16\14\-
+b--------------------------------------------------------------------
+g--------------------------------------------------------------------
+d--------------------------------------------------------------------
+a--------------------------------------------------------------------
+e--------------------------------------------------------------------
+
+
+e--------------------------------------------------------------------
+b--14-14-16-16--18-18--19-19--21b-21b--21-19--14-16-16/17-16-14------
+g--------------------------------------------------------------------
+d--------------------------------------------------------------------
+a--------------------------------------------------------------------
+e--------------------------------------------------------------------
+                                                                                       
+e--------------------------------------------------------------------
+b--------------------------------------------------------------------
+g-13h14--11h13p11-------------------15h17-15-------------------------
+d-----------------11-13-14-13-11-13----------------------------------
+a--------------------------------------------------------------------
+e--------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-------------------------------------------------------------------
+g--14-16--17p16p14--------------------------------------------------
+d-----------------16-14-16-18-20-21p20-18------16-------------------
+a----------------------------------------21-19----------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b------------------------14BW/\/\/\--16-17/18-17--21-21--19-18-19-18
+g--------------------21BW-------------------------------------------
+d-18h20h21p20p18--16------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-14-14-16-16-18-18--19-19--21b-21b--21-19--14-16-16/17-16-14-------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+                                                                                       
+e-------------------------------------------------------------------
+b-------------------------------------------------------------------
+g-13h14--11h13p11-----------------15h17-15--13-11-13----------------
+d----------------11-13-14-13-11-13------------------11-13-14-13-11--
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-------------------------------------------------------------------
+g----15h17-15---16B-16-15--16B--16B-16--16B-(16)-15-----------------
+d-13------------------------------------------------15B--14-15------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+
+e-------------------------------------------------------------------
+b--------------------------------14-14--16-16--18-18--19-19--21b-21b
+g-13-14--16/17-16-14-16BW/\/\/\/\-----------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+
+e-------------------------------------------------------------------
+b-21-19-14-16-16/17-16-14-------------------------------------------
+g------------------------13h14--11h13p11------------------15h17-15--
+d----------------------------------------11-13-14-13-11-13----------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+          Other bendings on the back-------]
+e-------------------------------------------------------------------
+b-----------19BW/\/\/\/\/\------------------------------------------
+g-----16BW-------------------XXXX-------------------15-15-17-17-----
+d-------------------------------------17-17-19-19-------------------
+a---------------------------------15B-------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-19-19-21-21-14-14-16-16-18-18-19-19-21b-21b-----------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-------------------------------19-19-21-21-14-14-16-16-------------
+g-------------------15-15-17-17-------------------------------------
+d-------17-17-19-19-------------------------------------------------
+a---15B-------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-18-18-19-19-21b-21b-21-19-14-16-16/17-16-14-----------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-------------------------------------------------------------------
+g-13h14--11h13p11-----------------15h17-15--16B-16B-15~~~~~~--XXXX--
+d----------------11-13-14-13-11-13----------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b---------------------------16-16--18-18--19-19--21BW/\/\/\/\/\-----
+g-15-15-17-17---15-15--17-17----------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------------------------------------------
+b-14-14--16-16--18-18--19-19--21b-21b--21-19--14-16-16/17-16-14-----
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+                                                                                       
+e-------------------------------------------------------------------
+b-------------------------------------------------------------------
+g-13h14--11h13p11------------------15h17-15-------------------------
+d-----------------11-13-14-13-11-13---------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e--18BW/\/\/\/\---------------------16-17-16-17-16-17--19-21B-------
+b--------------16-18-18/19-21B-(21)---------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-(18)-T21h19p18T21h19p18T21h19p18T21h19p18-------------------------
+b------------------------------------------18-19--21p19p18----------
+g----------------------------------------------------------19B------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e(18)-T21h19p18T21h19p18T21h19p18T21h19p18-(16)-T19h18p16T19h18p16T19
+b-------------------------------------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+                           [Played really fast....................]
+e-h18p16T19h18-------------18-18-18-18-19-19-19-19-21-21-21-21-21B--
+b--------------21B-21\19\18-----------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-(18)-T21h19p18T21h19p18T21h19--(16)-T19h18p16T19h18p16T19h18p16---
+b-------------------------------------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e------------------------------------------------------------------- 
+                                        [Hold first bend, then
+pick                                                                                                                                            			                                                                                                            
+                             
+                                         2X bent note]
+e-(14)T18h16p14----------------18-18-19--21b21b21b------------------
+b---------------17B-(17)--17-16-------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-(18)-T21h19p18T21h19p18T21h19--(16)-T19h18p16T19h18p16T19h18p16---
+b-------------------------------------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e21B-21B-21B-(21)-19-18-16-------------16b-16h18h19p18p16h18-18BW/\/\
+b-------------------------13h14p13-11-13----------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-------------------------------19/21BW-----------------------------
+b--14-16-18-16-14--18-19-18-16--------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e---------------------------19/21-19B-21BW---19---------------------
+b--14-16-18-16-14--18-19--------------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e----------------------18(1/4)(1/2)(1)W-19(1/4)(1/2)(1)W------------
+b14-16-18-16-14-18-19-----------------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+e-21(1/4)(1/2)(1)W-22(1/4)(1/2)(1)W/\/\/\/\/\----Fade Out
+b-------------------------------------------------------------------
+g-------------------------------------------------------------------
+d-------------------------------------------------------------------
+a-------------------------------------------------------------------
+e-------------------------------------------------------------------
+
+Hope you have enjoyed this song as much as I did....... it will sound
+better (in my case) if an equalizer is used and a guitar with relly good
+pick-ups to get those really high pitches......that´s it for todays Van
+Halen lesson......
+
+If the notes aren´t correct....at least they will give you a pretty good
+idea.......any comments suggestions, corrections,
+blah..blah.blah.....you can contact me at...... al639920@mail.ur.mx....z
+ya!
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/right_now.tab b/guitar/tabs/Van Halen/right_now.tab new file mode 100644 index 0000000..826d291 --- /dev/null +++ b/guitar/tabs/Van Halen/right_now.tab @@ -0,0 +1,229 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / right_now.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+[2 versions]
+
+Date: Sat, 23 Sep 95 14:56:11 -0700
+From: Kevin Hill <kmh001@bridgewater.edu>
+Subject: TAB: "Right Now" - Van Halen (piano arr. for guitar)
+
+
+Here are some parts of "Right Now" that have been arranged for guitar (basically the 
+first part of the song). 
+
+It is a good idea to put a capo on the fifth fret, but I tabbed then without a capo 
+(fifth fret means open string with the capo).
+
+Here is the intro.  When applied to piano, it sounds just like the CD:
+
+e--------5-----8-----10-----8---5----   Play this over and over again and 
+B--8---------------------------------   VERY fast...
+G----7-----7-----7------7-----7---7--
+D------5-----5-----5------5----------
+A------------------------------------
+E------------------------------------
+
+Then the cymbals kick in.  I don't know the exact name of some of the chords with 
+additions, so I just put the root chord above each measure.  
+
+ A                            G                           F          
+
+e--5-5---5---5---5---5------|---------------------------|---------------------------
+B--7-7---8---8---7---7---5--|--5-5---6---6---5---5------|----------------6---6------
+C--7-7---7---7---7---7---5--|--5-5---5---5---5---5---7--|--7-7---7---7---7----7-----
+D--7-7---7---7---7---7---5--|--5-5---5---5---5---5---8--|--8-8---8---8---7-----7----
+A--5-5---5---5---5---5------|--7-7---7---7---7---7---8--|--8-8---8---8---5----------
+E--5-5---5---5---5---5------|--8-8---8---8---8---8---6--|--6-6---6---6--------------
+
+Am
+
+e---------------------------|
+B--6---5--------------------|  With a little improvising, it covers most of the
+C--7---5--------------------|  song.  
+D--7---5--------------------|
+A--5---7--------------------|
+E------8--------------------|
+
+Send questions and comments to kmh001@bridgewater.edu (Kevin Hill)
+
+
+
+
+
+RIGHT NOW (solo)
+Van Halen
+tabbed by dsale@jax.jaxnet.com
+http://jax.jaxnet.com/~dsale
+
+Someone wanted this posted so i thought i'd do it.
+
+                                                                        
+------------------------|
+------------------------| <-These are Artificial Harmonics.
+2--2--2--2--2--2--2--2--|   pitches: B,G,E,C#,B,A,G,E
+------------------------|
+------------------------|
+------------------------|
+                                                                        
+
+                                                                        
+-----------------10-----------10-----10---10----------------------------
+/13^-----13^~~~------10--13^---------13^------10--13--------------------
+------------------------------------------------------12^--10-----12----
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+----------------------------------------------------------------20------
+----------------------------------------------------17--20^-------------
+12\5-----5--------------------------------------17----------------------
+------7---/6\-p5p3--5p3-------------------------------------------------
+-------------------------5\3-----3^~~~/10\3-----------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+----------------------10--10-------10--10-------10--10-------10--10-----
+20^--18--20^~~~-------10--10-------10--10-------10--10-------10--10-----
+-----------------12^----------12^----------12^----------12^-------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+-----10--10---------13--13------13--13-----------15--15------15--15-----
+-----10--10---------13--13------13--13-----------15--15------15--15-----
+12^----------12/14----------14----------14--16^----------16-------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+17--17^p15---------17^p15-----------------------------------------------
+------------17p15----------17p15--10^p8--------10^p8---------10h12------
+-----------------------------------------10p8---------10h13-------------
+                                                                        
+
+                                                                        
+-------------------10--13^---p10--13~~~---------10----------------------
+-------------------10-----------------------13--------------------------
+-------10h12--12^-----------------------------------12^p10--12~~~/19----
+10h12------------------------------------0------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+                                        
+                                                                        
+------------------------------------------------------------------------
+18--20---^p18-----20^--20^--20^~~~--------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                            (Right now!..)
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/runaround.tab b/guitar/tabs/Van Halen/runaround.tab new file mode 100644 index 0000000..1ffec06 --- /dev/null +++ b/guitar/tabs/Van Halen/runaround.tab @@ -0,0 +1,310 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / runaround.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: Paul D <S3BZ@MUSIC.TRANSY.EDU>
+
+TAB: "Runaround" by Van Halen
+
+Okay, here's my second posting of a rather difficult Van Halen tune (the
+first being that "Poundcake" monster).  The first thing you gotta do if you
+wanna sound like the record is tune down 1/2 step.  The signature riff
+(which is also the chorus part) is quite difficult to play.  Try to find
+as many actual chord-shapes as possible; that way you won't have to make a
+million changes in hand position.  There's some bits of lyric here and there
+to help you keep up...
+A few notes on my tab:  "p.m...." means palm-mute;
+                        "a.h...." means artificial harmonics
+                        "b" means bend
+                        "b&r" means bend the notes up to pitch and
+                                then release the bend to the original
+                                pitch.
+                        "bf" means bend full
+
+
+                                 Runaround
+                                by Van Halen
+                               tab by Paul D.
+                            s3bz@music.transy.edu
+
+
+
+|---||---------------0-|--------------|-----------------|------------------
+|---||-------------3---|-3------------|---------------3-|------------------
+|---||-----2-----2-----|---2----------|-----2-------0---|------------------
+|---||---2-----0-------|--------------|---2-------------|------------------
+|---||-0-----3---------|----------0-3-|-0-----3---------|------------------
+|-3-||-----------------|-----3~~~-----|---------3~------|------------------
+
+
+
+--------------|---------------0-|--------------|-------------3-|-----------
+1-0-----0-----|-------------3---|-3------------|-------------3-|-----------
+------2---2---|-----2-----2-----|---2----------|-----2-------0-|-----------
+----0---------|---2-----0-------|--------------|---2---------0-|-----------
+--------------|-0-----3---------|----------0-3-|-0-----3-------|-----------
+------------3-|-----------------|-----3~~~-----|---------3~----|-----------
+
+
+
+3-3-3-2---2-2-0-|------------|------------|------------|-------------------
+3-3-3-3---3-3-3-|-------15---|-------14---|-------13---|-------------------
+0-0-0-2---2-2-2-|----12------|----12------|----10------|-------------------
+0-0-0-0---0-0-0-|-14---------|-14---------|-12---------|-------------------
+----------------|------------|------------|------------|-------------------
+----------------|------------|------------|------------|-------------------
+
+
+
+-------------------|------------|------------|----------|------------------
+12-12-10h12-10-----|-------15---|-------14---|-------13-|------------------
+10-10-10----10-----|----12------|----12------|----10----|------------------
+10-10-10----10-----|-14---------|-14---------|-12-------|------------------
+-----------------0-|------------|------------|----------|------------------
+-------------------|------------|------------|----------|------------------
+
+
+                                             b
+--------------14---12\--||----------|--------------|----------|------------
+12-12-12-10---12---12\--||----------|--------------|----------|------------
+10-10-10-10---12--------||----------|--------------|----------|------------
+10-10-10-10-----------2-||-2--------|------------2-|-2--------|------------
+----------------------0-||-0--------|-----5------0-|-0--------|------------
+------------------------||-------12\|-2------2-----|-------12\|------------
+                              "She don't like it..."     "And don't like..."
+
+       b                          b
+--------------|----------|--------------|---------------|------------------
+--------------|----------|--------------|-----------5-7-|------------------
+--------------|----------|--------------|-------5---5-7-|------------------
+----7-------2-|-2--------|------------2-|-2-2/7---7-----|------------------
+4------4~~~-0-|-0--------|-----5------0-|-0-0-----------|------------------
+--------------|-------12\|-2------2-----|---------------|------------------
+                                             "She ain't about to give..."
+
+b&r
+---------------|------------|------------|----------|----------------------
+-7-------------|-------15---|-------14---|-------13-|----------------------
+-7------p5-----|----12------|----12------|----10----|----------------------
+-----------7-7-|-14---------|-14---------|-12-------|----------------------
+-------------0-|------------|------------|----------|----------------------
+---------------|------------|------------|----------|----------------------
+
+
+                              b                      b
+--------------14---12\--||----------------|----------------|----------|----
+12-12-12-10---12---12\--||----------------|----------------|----------|----
+10-10-10-10---12--------||--------2---x-x-|----------------|----------|----
+10-10-10-10-----------2-||-2------2---x-x-|--------------2-|-2--------|----
+----------------------0-||-0--3-------x-x-|-------5------0-|-0--------|----
+------------------------||----------------|-2--------2-----|-------12\|----
+                                 "She can take me..."
+
+     a.h.......                             b
+--------------------|-------------|--------------|---------------|---------
+--------------------|-------------|--------------|-----------5-7-|---------
+--------------------|-------2-----|--------------|-------5---5-7-|---------
+-----7------------2-|-2-----2-----|------------2-|-2-2/7---7-----|---------
+4------4---4-4~~~-0-|-0-3-----x-x-|-----5------0-|-0-0-----------|---------
+--------------------|-------------|-2------2-----|---------------|---------
+"...drives me home..."
+
+b&r                p.m...
+---------------||------------------|---------------------|-----------------
+-7-------------||--------5-----7---|-----10---9h10p9-----|-----------------
+-7------p5-----||------6-----------|-9---------------9---|-----------------
+-----------7-7-||----6-------7---9-|---9---------------9-|-----------------
+-------------0-||--4-------5-----7-|---------------------|-----------------
+---------------||----------------0-|---------------------|-----------------
+                  "I'd walk, but I want it..."
+
+
+--------------------|-------------------|-----------------|----------------
+--------10-----7/10-|-9-----------------|-----------------|----------------
+-----11-------------|---9---------------|-----6-----------|----------------
+--11---------7------|-----9---7h9p7\6---|---6-------------|----------------
+9----------5--------|-----------------7-|-4----/7-5-5/9-7-|----------------
+-----------------0--|-------------------|---------------0-|----------------
+"what fool believes.."                   "I've got her in my sight..."
+
+                      p.m...
+--------------------|------------------|-------------||--------------------
+-----------------10-|--------3-2-------|-0-----------||--------------------
+--9-----------11----|------2-----2---1-|-2---1-------||--------------------
+9----------11-------|----2-----------2-|-2---2-------||--------------------
+---/11-9------------|--0-------------2-|-----2-------||--------------------
+--------------------|----------------0-|-----------3-||--------------------
+"But just out of..."
+
+
+--------------0-|--------------|-----------------|---------------|---------
+------------3---|-3------------|---------------3-|-1-0-----0-----|---------
+----2-----2-----|---2----------|-----2-------0---|-------2---2---|---------
+--2-----0-------|--------------|---2-------------|-----0---------|---------
+0-----3---------|----------0-3-|-0-----3---------|---------------|---------
+----------------|-----3~~~-----|---------3-------|-------------3-|---------
+"Here we go around..."
+
+
+--------------0-|--------------|-----------------|-------------||
+------------3---|-3------------|---------------3-|-1-0-3---3---||
+----2-----2-----|---2----------|-----2-------0---|-----2---2---||
+--2-----0-------|--------------|---2-------------|-----0---0-2-||
+0-----3---------|----------0-3-|-0-----3---------|-----------0-||
+----------------|-----3~~~-----|---------3-------|-------------||
+
+Then it's back to the verse, pre-chorus, and chorus parts one more time
+through, then it's SOLO time.  (DON'T ASK!)  After that, there's a bit of
+a "bridge":
+
+||----------|---------|---------|-------------|----------|---------|-------
+||-----10---|-----9---|-----8---|-7-7-5h7-5---|-----10---|-----9---|-------
+||---7------|---7-----|---5-----|-5-5-5---5---|---7------|---7-----|-------
+||-9--------|-9-------|-7-------|-5-5-5---5---|-9--------|-9-------|-------
+||----------|---------|---------|-------------|----------|---------|-------
+||----------|---------|---------|-----------0-|----------|---------|-------
+                       "oo.   ah."             "It goes like this"
+
+                              b              bf     pm
+--------------|-----9-----||--------|-----------------|--------------------
+----8-----7-7-|-7-5-7-7---||--------|-----------------|--------------------
+--5-------5-5-|-5-5-7-7---||--------|-----------------|--------------------
+7---------5-5-|-5-5-7-7---||--------|-----2---------2-|--------------------
+--------------|---------2-||--------|---------------2-|--------------------
+--------------|---------0-||--3-----|-4------4------0-|--------------------
+                             "Oh man it's..."
+
+                                           b            bf     pm
+--------------------------|---9-9-9-7-|--------|-----------------|---------
+--0-3h5p3p0-5p3p0---------|---7-7-7-7-|--------|-----------------|---------
+------------------2h4p2p0-|---7-7-7-7-|--------|-----------------|---------
+--------------------------|-----------|--------|-----2---------2-|---------
+--------------------------|-----------|--------|---------------2-|---------
+--------------------------|-0---------|-0--3---|-4------4------0-|---------
+"And you make it harder..."               "Fill me up..."
+
+                   b
+------------|-------------------------||
+------------|-------------------------||
+------------|-------------------------||
+----------2-|-------------------------||
+----2-4---2-|-------------------------||
+3h4-------0-|-----------------------3-||
+Oh man she owns it."   "Here we go a-    round..."
+
+(go to the chorus and ad lib a fade-out)
+
+That's it.  That should be all you need to do an accurate version of
+"Runaround".  If you're REALLY hurtin' for the solo, email me and be nice
+and I'll give it a shot.  I might even do the outro part too.
+Questions/Comments welcome (by email).
+**Coming soon: "Crackerman" by STP**
+
+For the most part, this tab was created with:
+===========================================================================
+==                Shareware version of the BUCKET 'O TAB                 ==
+==                tablature creation software for Windows                ==
+==                         For more information:                         ==
+==                       email: gse@ocsystems.com                        ==
+==   US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124    ==
+===========================================================================
+
+Good luck!
+Paul D. s3bz@music.transy.edu
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/runnin_with_the_devil.tab b/guitar/tabs/Van Halen/runnin_with_the_devil.tab new file mode 100644 index 0000000..d1027b2 --- /dev/null +++ b/guitar/tabs/Van Halen/runnin_with_the_devil.tab @@ -0,0 +1,298 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / runnin_with_the_devil.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From uunet!mcsun!sunic!psinntp!psinntp!isc-newsserver!ritvax.isc.rit.edu!WHC2993 Tue Sep 15 08:04:20 PDT 1992
+Article: 2268 of alt.guitar.tab
+Newsgroups: alt.guitar.tab
+Path: nevada.edu!uunet!mcsun!sunic!psinntp!psinntp!isc-newsserver!ritvax.isc.rit.edu!WHC2993
+From: whc2993@ritvax.isc.rit.edu
+Subject: Runnin' with the devil
+Message-ID: <1992Sep14.165012.12120@ultb.isc.rit.edu>
+Sender: news@ultb.isc.rit.edu (USENET News System)
+Nntp-Posting-Host: vaxc.isc.rit.edu
+Reply-To: whc2993@ritvax.isc.rit.edu
+Organization: Rochester Institute of Technology
+Date: Mon, 14 Sep 1992 16:50:12 GMT
+Lines: 183
+
+
+Someone asked for this so here goes.
+The recording is tuned down 1/2 step.
+
+			Runnin' With The Devil
+				by
+			     Van Halen
+
+strum strings behind nut
+           |
+ intro     V           riff A                                        end riffA
+|----x----------------|-------------------|----------------------------|
+|-----x---------------|--5---7--------x-x-|---7-H-8---10---9-----------|
+|------x--------------|--5---7--------x-x-|---7-H-----9----9-----------|
+|-------x-------------|--5---7--------x-x-|---7-H-9---11---9-----------|
+|--------x------------|-------------------|----------------------------|
+|---------x------17\--|-------------------|------------------------19\-|
+
+
+repeat riff A 3 times.
+
+verse 1 
+I live my life like ...
+|------------------------|-------------------|
+|------------------------|-------------------|
+|--2------------------4--|----2---------0----|
+|--2-------2----------5--|----4---------2----|
+|--0-------0-------0-----|--0--------0-------|
+|------3-----------------|-------------------|
+
+
+And all I've got I ...
+                                   harm.........}
+|------------------------|-----------12----7-----|
+|------------------------|---------12-----7------|
+|--2------------------4--|----2----------------5-|
+|--2-------2----------5--|----4------------------|
+|--0-------0-------0-----|--0--------------------|
+|------3-----------------|-----------------------|
+
+
+Least I don't need to ...
+|------------------------|-------------------|
+|------------------------|-------------------|
+|--2------------------4--|----2---------0----|
+|--2-------2----------5--|----4---------2----|
+|--0-------0-------0-----|--0--------0-------|
+|------3-----------------|-------------------|
+
+
+Yes I'm living at a ...
+|------------------------|-------------0-----|
+|------------------------|-------------0-----|
+|--2------------------4--|----2--0-----0-----|
+|--2-------2----------5--|----4--2--0--2-----|
+|--0-------0-------0-----|-------------2-----|
+|------3-----------------|-------------0-----|
+
+Chorus
+repeat riff A 4 times
+Runnin' with the ...
+
+Verse 2
+
+I found the simple ...
+
+|------------------------|-------------------|
+|------------------------|-------------------|
+|--2------------------4--|----2---------0----|
+|--2-------2----------5--|----4---------2----|
+|--0-------0-------0-----|--0--------0-------|
+|------3-----------------|-------------------|
+
+When I jumped out ...
+                                        *trill
+|------------------------|---------------------|
+|------------------------|-------------7^9-----|
+|--2------------------4--|----2--0-----7^9-----|
+|--2-------2----------5--|----4--2-------------|
+|--0-------0-------0-----|--0------------------|
+|------3-----------------|---------------------|
+
+I got no love, no love ...
+
+|------------------------|-------------------|
+|------------------------|-------------------|
+|--2------------------4--|----2---------0----|
+|--2-------2----------5--|----4---------2----|
+|--0-------0-------0-----|--0--------0-------|
+|------3-----------------|-------------------|
+
+Ain't got nobody ....
+|------------------------|-------------0-----|
+|------------------------|-------------0-----|
+|--2------------------4--|----2--0-----0-----|
+|--2-------2----------5--|----4--2--0--2-----|
+|--0-------0-------0-----|-------------2-----|
+|------3-----------------|-------------0-----|
+                                            
+Chorus:
+repeat riff A 4 times
+
+Solo: starts on last beat of chorus.
+|---------|----------------------------------------|               
+|---------|14-15-17-15-15^14-------14--------------|
+|------14-|------------------14------14---------12-|
+|--7/14---|---------------------14-----14--5/12----|
+|---------|----------------------------------------|
+|---------|----------------------------------------|
+
+|----------------------------------------|
+|-12-13-15-13-13^12------12--------------|
+|------------------12------12---------14-|
+|--------------------12------12---7/14---|
+|----------------------------------------|
+|----------------------------------------|
+
+                       full......}
+|-------------------17B-----17-17---17--------|
+|-14-15-17-15-15^14------------------------12-|
+|---------------------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+|---------------------------------------------|
+
+
+|--------------14--15--16-------------\------|
+|-12/13-15^13--15--16--17-------------\------|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+|--------------------------------------------|
+
+repeat riff A 2 times
+You know I..
+
+3rd verse
+
+Found the simple ...
+|------------------------|-------------------|
+|------------------------|-------------------|
+|--2------------------4--|----2---------0----|
+|--2-------2----------5--|----4---------2----|
+|--0-------0-------0-----|--0--------0-------|
+|------3-----------------|-------------------|
+
+
+When I jumped out on ....
+|------------------------|-------------12----------5-|
+|------------------------|-------------------7---5---|
+|--2------------------4--|-----0----12-----7---5-----|
+|--2-------2----------5--|--5--2---------------------|
+|--0-------0-------0-----|---------------------------|
+|------3-----------------|---------------------------|
+
+Got no love, no love .....
+|------------------------|-------------------|
+|------------------------|-------------------|
+|--2------------------4--|----2---------0----|
+|--2-------2----------5--|----4---------2----|
+|--0-------0-------0-----|--0--------0-------|
+|------3-----------------|-------------------|
+
+Got nobody waitin' ....
+|------------------------|-------------0-----|
+|------------------------|-------------0-----|
+|--2------------------4--|----2--0-----0-----|
+|--2-------2----------5--|----4--2--0--2-----|
+|--0-------0-------0-----|-------------2-----|
+|------3-----------------|-------------0-----|
+
+repeat riff A 4 times 
+repeat solo.
+repeat riff A 5 times.
+
+								B.C.
+
+
+
+********************************************************************************
+"The blues is a low down achein' chill"  Robert Johnson
+********************************************************************************
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/runningwiththedevil.prj b/guitar/tabs/Van Halen/runningwiththedevil.prj new file mode 100644 index 0000000..95f670a --- /dev/null +++ b/guitar/tabs/Van Halen/runningwiththedevil.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=runningwiththedevil.tab +DELAYS= diff --git a/guitar/tabs/Van Halen/runningwiththedevil.tab b/guitar/tabs/Van Halen/runningwiththedevil.tab new file mode 100644 index 0000000..42e8405 --- /dev/null +++ b/guitar/tabs/Van Halen/runningwiththedevil.tab @@ -0,0 +1,214 @@ + +Home New Tabs Guitar Forums Cool! Lessons ICQ Buddies Premier Sites + + + Mon Dec 3, 2001 TabCrawler.Com- Use It To Play Something... + + +#----------------------------------PLEASE NOTE---------------------------------# +#This file is the author's own work and represents their interpretation of the # +#song. You may only use this file for private study, scholarship, or research. # +#------------------------------------------------------------------------------## +From uunet!mcsun!sunic!psinntp!psinntp!isc-newsserver!ritvax.isc.rit.edu!WHC2993 Tue Sep 15 08:04:20 PDT 1992 +Article: 2268 of alt.guitar.tab +Newsgroups: alt.guitar.tab +Path: nevada.edu!uunet!mcsun!sunic!psinntp!psinntp!isc-newsserver!ritvax.isc.rit.edu!WHC2993 +From: whc2993@ritvax.isc.rit.edu +Subject: Runnin' with the devil +Message-ID: <1992Sep14.165012.12120@ultb.isc.rit.edu> +Sender: news@ultb.isc.rit.edu (USENET News System) +Nntp-Posting-Host: vaxc.isc.rit.edu +Reply-To: whc2993@ritvax.isc.rit.edu +Organization: Rochester Institute of Technology +Date: Mon, 14 Sep 1992 16:50:12 GMT +Lines: 183 + + +Someone asked for this so here goes. +The recording is tuned down 1/2 step. + + Runnin' With The Devil + by + Van Halen + +strum strings behind nut + | + intro V riff A end riffA +|----x----------------|-------------------|----------------------------| +|-----x---------------|--5---7--------x-x-|---7-H-8---10---9-----------| +|------x--------------|--5---7--------x-x-|---7-H-----9----9-----------| +|-------x-------------|--5---7--------x-x-|---7-H-9---11---9-----------| +|--------x------------|-------------------|----------------------------| +|---------x------17\--|-------------------|------------------------19\-| + + +repeat riff A 3 times. + +verse 1 +I live my life like there's no tomorrow. +|------------------------|-------------------| +|------------------------|-------------------| +|--2------------------4--|----2---------0----| +|--2-------2----------5--|----4---------2----| +|--0-------0-------0-----|--0--------0-------| +|------3-----------------|-------------------| + + +And all I've got I had to steal. + harm.........} +|------------------------|-----------12----7-----| +|------------------------|---------12-----7------| +|--2------------------4--|----2----------------5-| +|--2-------2----------5--|----4------------------| +|--0-------0-------0-----|--0--------------------| +|------3-----------------|-----------------------| + + +Least I don't need to beg or borrow. +|------------------------|-------------------| +|------------------------|-------------------| +|--2------------------4--|----2---------0----| +|--2-------2----------5--|----4---------2----| +|--0-------0-------0-----|--0--------0-------| +|------3-----------------|-------------------| + + +Yes I'm living at a pace that kills. +|------------------------|-------------0-----| +|------------------------|-------------0-----| +|--2------------------4--|----2--0-----0-----| +|--2-------2----------5--|----4--2--0--2-----| +|--0-------0-------0-----|-------------2-----| +|------3-----------------|-------------0-----| + +Chorus +repeat riff A 4 times +Runnin' with the Devil. Runnin with the Devil. + +Verse 2 + +I found the simple life ain't so simple + +|------------------------|-------------------| +|------------------------|-------------------| +|--2------------------4--|----2---------0----| +|--2-------2----------5--|----4---------2----| +|--0-------0-------0-----|--0--------0-------| +|------3-----------------|-------------------| + +When I jumped out on that road + *trill +|------------------------|---------------------| +|------------------------|-------------7^9-----| +|--2------------------4--|----2--0-----7^9-----| +|--2-------2----------5--|----4--2-------------| +|--0-------0-------0-----|--0------------------| +|------3-----------------|---------------------| + +I got no love, no love you'd call real. + +|------------------------|-------------------| +|------------------------|-------------------| +|--2------------------4--|----2---------0----| +|--2-------2----------5--|----4---------2----| +|--0-------0-------0-----|--0--------0-------| +|------3-----------------|-------------------| + +Ain't got nobody waitin' at home. +|------------------------|-------------0-----| +|------------------------|-------------0-----| +|--2------------------4--|----2--0-----0-----| +|--2-------2----------5--|----4--2--0--2-----| +|--0-------0-------0-----|-------------2-----| +|------3-----------------|-------------0-----| + +Chorus: +repeat riff A 4 times + +Solo: starts on last beat of chorus. +|---------|----------------------------------------| +|---------|14-15-17-15-15^14-------14--------------| +|------14-|------------------14------14---------12-| +|--7/14---|---------------------14-----14--5/12----| +|---------|----------------------------------------| +|---------|----------------------------------------| + +|----------------------------------------| +|-12-13-15-13-13^12------12--------------| +|------------------12------12---------14-| +|--------------------12------12---7/14---| +|----------------------------------------| +|----------------------------------------| + + full......} +|-------------------17B-----17-17---17--------| +|-14-15-17-15-15^14------------------------12-| +|---------------------------------------------| +|---------------------------------------------| +|---------------------------------------------| +|---------------------------------------------| + + +|--------------14--15--16-------------\------| +|-12/13-15^13--15--16--17-------------\------| +|--------------------------------------------| +|--------------------------------------------| +|--------------------------------------------| +|--------------------------------------------| + +repeat riff A 2 times +You know I.. + +3rd verse + +Found the simple life, weren't so simple +|------------------------|-------------------| +|------------------------|-------------------| +|--2------------------4--|----2---------0----| +|--2-------2----------5--|----4---------2----| +|--0-------0-------0-----|--0--------0-------| +|------3-----------------|-------------------| + + +When I jumped out on that road. harm............} +|------------------------|-------------12----------5-| +|------------------------|-------------------7---5---| +|--2------------------4--|-----0----12-----7---5-----| +|--2-------2----------5--|--5--2---------------------| +|--0-------0-------0-----|---------------------------| +|------3-----------------|---------------------------| + +Got no love, no love you'd call real. +|------------------------|-------------------| +|------------------------|-------------------| +|--2------------------4--|----2---------0----| +|--2-------2----------5--|----4---------2----| +|--0-------0-------0-----|--0--------0-------| +|------3-----------------|-------------------| + +Got nobody waitin' at home. +|------------------------|-------------0-----| +|------------------------|-------------0-----| +|--2------------------4--|----2--0-----0-----| +|--2-------2----------5--|----4--2--0--2-----| +|--0-------0-------0-----|-------------2-----| +|------3-----------------|-------------0-----| + +repeat riff A 4 times +repeat solo. +repeat riff A 5 times. + + B.C. + + + +******************************************************************************** +"The blues is a low down achein' chill" Robert Johnson +******************************************************************************** + + + + +Back to Directory + + diff --git a/guitar/tabs/Van Halen/show_your_love.tab b/guitar/tabs/Van Halen/show_your_love.tab new file mode 100644 index 0000000..e6c881b --- /dev/null +++ b/guitar/tabs/Van Halen/show_your_love.tab @@ -0,0 +1,195 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / show_your_love.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+Date: Mon, 7 Aug 1995 10:00:20 -0400
+From: kucera@nlm.nih.gov (Richard Kucera)
+
+Blues-Rock Lick At End Of "You Really Got Me" And "Show Your Love" 
+
+Source:  Eddie Van Halen and some previous blues source(?)
+
+Tabbed by Rich Kucera
+
+slur (sler) vt. 1. pass over lightly  2. run together
+
+Xb+1/4 == bend note X up a quarter-tone
+
+This is all done in an E-minor blues pattern,  perhaps
+wrong,  and maybe not everything is entirely accurate.
+
+The following lick appears on Van Halen's 1st album
+in the last chords of "You Really Got Me" and
+"Show Your Love":
+
+---------12-----------------------------12-----------------
+----/12------15b17b15p12------12h15p12------12h15p12-------
+--------------------------14--------------------------14---
+-----------------------------------------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+
+-------------12--------------------------------------------
+---12h15p12-----12h15p12------12---------------------------
+--------------------------14------15p14p12------14---------
+--------------------------------------------14------14-----
+-----------------------------------------------------------
+-----------------------------------------------------------
+
+-----------------------------------------------------------
+-----------------------------------------------------------
+----11h12p11--------11-------------------------------------
+---------------14-------12h14------------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+PAUSE.
+
+"You Really Got Me" proceeds as follows:
+-----------------------------------------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+----11h12p11------11---------------------------------------
+--------------14------12h14---11h12p11------11-------------
+----------------------------------------14------12h14\12---
+                     
+-----------------------------------------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+---------------------2-------------------------------------
+----\10---\7---/9----0-------------------------------------
+
+and,  from the PAUSE, "Show Your Love" proceeds 
+*something* like:
+------------------------12h14p12----12--------------------------
+--------------12h14h15-----------15----14h15p14p12h14p12----12--
+----11h12h14---------------------------------------------14-----
+----------------------------------------------------------------
+----------------------------------------------------------------
+----------------------------------------------------------------
+
+-----------------------------------------------------------
+-----------------------------------------------------------
+---14p12h14p12-\11h12p11-\9h11p9-\7h9p7-\5h7p5-\4h5p4p0~---
+-----------------------------------------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+
+EVH's lick can be added as a slur
+on another blues lick:
+-----------------------------------------------------------
+-----15p12------12-----------------------------------------
+-----------h14------12------------------12b+1/4------------
+-----------------------h14---14----------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+
+Here's the lick with the EVH lick incorporated:
+--------------12-------------------------------------------
+----12h15p12------12h15p12------12-------------------------
+---------------------------h14------12--------------12b+1/4
+----------------------------------------h14--14------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+
+Slur and stay relaxed.
+
+Enjoy!
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/somebody_get_me_a_doctor.tab b/guitar/tabs/Van Halen/somebody_get_me_a_doctor.tab new file mode 100644 index 0000000..71b5538 --- /dev/null +++ b/guitar/tabs/Van Halen/somebody_get_me_a_doctor.tab @@ -0,0 +1,264 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / somebody_get_me_a_doctor.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+SOMEBODY GET ME A DOCTOR
+Van Halen II
+tabbed by dsale@jax.jaxnet.com
+http://www.jaxnet.com/~dsale
+
+
+The other tab for this song on OLGA was too incomplete for me not to tab
+this one.I dont even think he did the right song.oh well.
+p=palm
+h=harm
+/&\=slide
+
+
+intro thingee
+                                                                                
+------------------------------------------|
+3-----3-----3--------3-----3--------------|
+0-----0-----2--------0-----0-----2--------|
+0-----------0--------0-----------0--------|
+------3--------------------3-----0-----2--|
+3--------------------3-----------------0--|
+                                                                                
+
+this next part is the main riff,also done during the chorus.
+
+
+            p  p  p              p     p                                         
+------------------------------------------3--2-----|
+------------------------------------1-----3--3-----|
+------------2--2--2-----0--2~~~-----0-----2--2-----|
+------------2--2--2-----0--2-----2--0--------------|
+3-----0--------------------------------0-----------|
+------------------------------------------------12\|
+
+
+now the verses.
+
+
+"You better.."
+
+            h  h  h  h                h  h  h  h             h  h  h  h        
+--------------------------------------------------------------------------------
+9-----9--9-----------------10-----10--------------9-----9--9--------------10----
+9-----9--9-----------------10-----10--------------9-----9--9--------------10----
+9-----9--9-----------------10-----10--------------7-----7--7--------------10----
+7-----7--7-----------------8------8---------------7-----7--7--------------8-----
+0-----0--0--7--7--7--7----------------7--7--7--7--------------7--7--7--7--------
+                                                                                
+
+                                                                                
+---------------|
+---10--10------|
+---10--10------|
+---10--10------|
+---8---8---x\--|
+-----------h13\|
+                                                                                
+and its pretty much the same throughout,until.
+
+"And im speedin.."
+                                                                                
+--------------------------------------------------------------|-----------------
+11-----11-----------------------12--x-----12------------------|-----------------
+11-----11-----------------------12--------12------------------|-----------------
+11-----11-----------------------12--------12------------------|-----------------
+9------9------------------------10--------10--------12--12--1\|-----------------
+-----------0-----0--0--0--0--0----------------------12--12--12|-----------------
+                                                                                
+
+now,that thing before the solo that ROCKS.
+
+                                   v (volume swell.)
+--------------------------------------|
+------5-----------7h5--------------5--|
+------5-----------7h5--------------5--|
+---------7--x--x-------7~~~--------5--|
+0--0-------------------------0--0-----|
+--------------------------------------|
+                                                                                
+
+and thats pretty much it,besides the solo,but i usually add my own solos,
+i usually have what ed did in my head and improvise on it.
+also,at the end,when ed is doing the main riff,he ends with:
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-----------[2--4--2--0--4--2--0--4--2--0--4--2--0--4--2--0--4]----x/--[2--4-----
+---------2----------------------------------------------------------------------
+3--0--0-------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+-------------------------------------------------|------------------------------
+-------------------------------------------------|------------------------------
+0--4--2--0--4--2--0--4--2-----0--4--2--0]--------|------------------------------
+-------------------------------------------/7----|------------------------------
+-------------------------------------------------|------------------------------
+---------------------------------------------/15\|------------------------------
+                                                                                
+
+which is done by gliding down the 6th string w/side of right hand (light-
+ly touching it) while hammering on/pulling off w/left hand,which sounds
+random harmonics and muted notes.
+
+
+From: edward@pluto.njcc.com (Edward Sulikoswki)
+Date: Thu, 20 Apr 1995 07:41:41 -0400
+Subject: Somebody Get Me a Doctor[Partial]
+
+
+think its off of VH. #1
+
+Set your guitar to 1/2 step down[Not sure,But it's the way its' done here]
+may not be note for note either.I make no claims to being a jam-master or 
+something.Have some distortion,turn the amp up and have a -go[dont get evic-
+-ted though].
+E
+B                        S
+G                      4 L   6         11   10
+D                      5 I   7         11   10
+A  3^    0             5 D   7   7  0   9    8
+E            3 3 3*    3 E   5
+ ^ Bend a little * muting above fret's[l.h.]
+
+                             *=vib
+e------------------------------------------------------------------------
+b   2------------------------------- 2 -------------
+g   2   4    5---------------------- 2  4-----------
+d   2   4 sl.5              *------- 2  4-----------
+a   0   2    3           3 2-------- 0  2-----------
+e----------------- 0 2 3-----------------------0[Dive Trem.]
+
+Off of Van Halen's First continuing..Like where I left off?
+1/2 step down   amp warmed up fingers warmed up gear[dist?]in tune?go...
+e                    &  &   @ @ @ @    &  &   @ @ @ @   & &
+b   *  *            10 10             11  11           12 12
+g   9  9            10 10   9 9 9 9   11  11  9 9 9 9  12 12
+d   9  9            10 10   9 9 9 9   11  11  9 9 9 9  12 12
+a   7  7             0  0   7 7 7 7    0   0  7 7 7 7   0  0
+e   0  0   0 0 0 0          0 0 0 0           0 0 0 0  [hold]
+*  mute the E a little but let ring open.             
+@  mute the whole thing both hands kinda.
+& little bit o'vibrato.
+
+
+e
+b           slide        5    6sl.5  0  2  22
+g [hold]   down to   2 2 5 0  6sl.5  0  2  22
+d  still    A        2 2 5 0  6sl.5  0  2  22
+a holding            0 0 0 0            0  00
+e                                       
+
+  use volume swell's and fast clean attack now.
+
+
+I think you  dont need my guidance to do what comes next.Go with the flow!
+Love that Eddie and I'll see ya.....open to suggestions or corrections.
+To all that bitch...just[if not at olga] post what you know Somebody will 
+enjoy it.
+Edward   edward@pluto.njcc.com
+            "Some People Risk To Employ Me"
+            "Some People Live To Destroy Me"  | >
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/spanish_fly.tab b/guitar/tabs/Van Halen/spanish_fly.tab new file mode 100644 index 0000000..d7315d1 --- /dev/null +++ b/guitar/tabs/Van Halen/spanish_fly.tab @@ -0,0 +1,353 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / spanish_fly.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+SPANISH FLY
+Van Halen II
+tab by dsale@jax.jaxnet.com
+http://www.jaxnet.com/~dsale
+stuff in parenthesis is two hand tap.
+
+
+
+ok,this first part is tapped 12 frets above its actual position.
+
+------------------------------------------------|
+---------------------0-----------------1--3--0--|
+------------------2-----2-----------2-----------|
+------------2--2-----------------2--------------|
+------2--2--------------------0-----------------|
+0--0--------------------------------------------|
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+(12-7-5-0-5)(12-7-5-0-5)(12-7-5-0-5)(12-7-5-0)-----------------------------------
+----------------------------------------------7-(12-7-5-0-5)(12-7-5-0-5)(12-----
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+-------------------------------------------------|
+-------------------------------------------------|
+-------------------------------------------------|
+-7-5-0-5)(12-7-5-0)------------------------------|
+-------------------(7--12-7)(12-6)(12-5)(12-3-0)-|
+-------------------------------------------------|
+                                                                                
+harm-------------------\
+                                                                                
+--------------------------|
+---5-----0------12--------|
+---5-----7------12--------|
+5-----7-----12---------7--|
+--------------------7--7--|
+--------------------------|
+                                                                                
+
+                                                                                
+---------------------------------------------------------------|
+---------------------------------------------------------------|
+------------------------------4h5-----4--5--7h5h4-----4h5h7/8--|
+---------------------4--5--7-------7---------------7-----------|
+3h4h5/6-----5--x--7--------------------------------------------|
+---------------------------------------------------------------|
+                                                                                
+
+                                                                                
+--------7--8--10----------7--8--10-----------8--10--12-----------8--10--12------
+7h8h10------------7h8h10------------8h10h12-------------8h10h12-----------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+----------x--12--14------------x--12--14------------x--13--15h13h12h----|
+10h12h14-------------10h12h14-------------12h13h15------------------15--|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+------------------------------------------------------------------------|
+                                                                                
+
+                                                                                
+12--------------0--|
+----13----------0--|
+--------14---------|
+------------15-----|
+-------------------|
+-------------------|
+                                                                                
+
+                                                                                
+---7h5--8--7--6--5--4--5--7--5h7h5h4h---4---------------------------------------
+---5---------------------------------7-----7h5h4h---5h4h---4-------5h4h---4-----
+-------------------------------------------------7------7-----7h5------7--------
+---7----------------------------------------------------------------------------
+---0----------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+7---h5h4-----7---------4--------4--5--7h5h4-----4-------4h5-----4--5--7h5h4-----
+----------7-----4h5h7-----5--7---------------7-----5h7-------7------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+-----------------------------------------------------------------|
+-----------------------------------------------------------------|
+---4-------4h5-----4--5--7--4--5-----5--7h5h4h---4---------------|
+7-----5h7-------7-----------------7-----------7-----7h5h4-----4--|
+-----------------------------------------------------------7-----|
+-----------------------------------------------------------------|
+                                                                               
+
+                                                                                
+---------------------------------|
+---------------------------------|
+---------------------------------|
+---------------------------------|
+5h7h3h0h5h7h3h0h5h7h3h0h5h7h3h0--|
+---------------------------------|
+                                                                                
+
+h-------------------------------------\                                         
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+7--9--5--0--7--9--5--0--7--9--5--0--7--9--------5h-9----(12--5--9)(12--5--9)----
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-------------------(12--5--9)---(12--5--9)---(12--5--9)---(12--5--9)---(12------
+(12--5--9)(12--5--9)-------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+4--9)---(12--4--9)---(12--4--9)---(11--4--8)---(11--4--8)---(11--4--8)---(11----
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+4--8)---(11--4--8)---(11--4--8)---(11--4--8)------------------------------------
+------------------------------------------------------------------------(10-----
+-----------------------------------------------(9--2--7)---(10--2--7)-----------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+---------------------(10--3--7)---(10--3--7)---(10--3--7)---(10--3--7)---(10----
+4--7)---(10--3--7)--------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+2--7)---(10--2--7)---(10--2--7)---(10--2--7)---(9--2--6)---(9--2--6)---(9--2----
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+6)---(9--2--6)---(9--2--6)---(9--2--6)---(9--5--7--9)---------------------------
+--------------------------------------------------------------------------------
+------------------------------------------------------5-----------(12--5--9)----
+--------------------------------------------------------(12--5--9)--------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-------------(12--5--9)---(12--5--9)---(12--5--9)---(12--5--9)---(12--4--9)-----
+--(12--5--10)-------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--(12--4--9)---(12--4--9)---(12--4--9)---(11--4--8)---(11--4--8)---(11--4--8)---
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--(11--4--8)---(11--4--8)---(11--4--8)---(11--4--8)---(11--4--8)----------------
+----------------------------------------------------------------(12--5--9)------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+(12--5--9)---(12--5--9)---(12--5--9)---(12--4--9)---(12--4--9)---(12--4--9)------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+(12--4--9)---(11--3--7)---(10--3--7)---(10--3--7)---(9--3--7)---(9--3--7)--------
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+(9--3--7)---(9--2--6)---(9--2--6)---(9--2--6)---(9--2--6)---(9--2--6)---(9--6----
+--------------------------------------------------------------------------------
+                                                                                
+
+                                                                                
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+2--0--2)----6----(9--6--2--0--2--6)---(9--6--2--0--2--6)---(9--6--2--0)---------
+-----------------------------------------------------------------------(3--2----
+                                                                                
+
+   *                                                                            
+---------------------------0----------------------------------------------------
+---------------------0--0-------------------------------------------------------
+---------------2--2-------------------------------------------------------------
+---------2--2-------------------------------------------------------------------
+---2--2-------------------------------------------------------------------------
+0)------------------------------------------------------------------------------
+    *tapped harmonics,as before.                                             
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/spanishfly.prj b/guitar/tabs/Van Halen/spanishfly.prj new file mode 100644 index 0000000..2844aa4 --- /dev/null +++ b/guitar/tabs/Van Halen/spanishfly.prj @@ -0,0 +1,3 @@ +WINTABV1.00 +TABLATURE=spanishfly.tab +TYPES=(0,16)(1,16)(2,16)(3,16)(4,16)(5,16)(6,16)(7,16)(8,16)(9,16)(10,16)(11,16)(12,8)(13,16)(14,2)(15,32)(16,32)(17,32)(18,32)(19,32)(20,32)(21,32)(22,32)(23,32)(24,32)(25,32)(26,32)(27,32)(28,32)(29,32)(30,32)(31,32)(32,32)(33,32)(34,32)(35,32)(36,32)(37,32)(38,32)(39,32)(40,32)(41,32)(42,32)(43,32)(44,32)(45,32)(46,32)(47,32)(48,32)(49,32)(50,32)(51,32)(52,32)(53,32)(54,16)(55,16)(56,16)(57,16)(58,16)(59,16)(60,16)(61,16)(62,16)(63,16)(64,16)(65,8)(66,8)(67,8)(68,8)(69,4)(70,8)(71,4)(72,32)(73,32)(74,32)(75,32)(76,32)(77,32)(78,32)(79,32)(80,32)(81,32)(82,32)(83,32)(84,32)(85,32)(86,32)(87,32)(88,32)(89,32)(90,32)(91,32)(92,32)(93,32)(94,32)(95,32)(96,32)(97,32)(98,32)(99,32)(100,32)(101,32)(102,32)(103,32)(104,32)(105,32)(106,32)(107,32)(108,32)(109,32)(110,32)(111,32)(112,32)(113,32)(114,32)(115,32)(116,32)(117,32)(118,32)(119,32)(120,32)(121,32)(122,32)(123,32)(124,32)(125,32)(126,32)(127,32)(128,32)(129,32)(130,32)(131,32)(132,32)(133,32)(134,32)(135,32)(136,32)(137,32)(138,32)(139,32)(140,4)(141,32)(142,32)(143,32)(144,32)(145,32)(146,32)(147,32)(148,32)(149,32)(150,32)(151,32)(152,32)(153,32)(154,32)(155,32)(156,32)(157,32)(158,32)(159,32)(160,32)(161,32)(162,32)(163,32)(164,32)(165,32)(166,32)(167,32)(168,32)(169,32)(170,32)(171,32)(172,32)(173,32)(174,32)(175,32)(176,32)(177,32)(178,32)(179,32)(180,32)(181,32)(182,32)(183,32)(184,32)(185,32)(186,32)(187,32)(188,32)(189,32)(190,32)(191,32)(192,32)(193,32)(194,32)(195,32)(196,32)(197,32)(198,32)(199,32)(200,32)(201,32)(202,32)(203,32)(204,32)(205,32)(206,32)(207,32)(208,32)(209,32)(210,32)(211,32)(212,32)(213,32)(214,32)(215,32)(216,32)(217,32)(218,32)(219,32)(220,32)(221,32)(222,32)(223,32)(224,32)(225,32)(226,32)(227,32)(228,32)(229,32)(230,32)(231,32)(232,32)(233,32)(234,32)(235,32)(236,32)(237,32)(238,32)(239,32)(240,32)(241,32)(242,32)(243,32)(244,32)(245,32)(246,32)(247,32)(248,32)(249,32)(250,32)(251,32)(252,32)(253,32)(254,32)(255,32)(256,32)(257,32)(258,32)(259,32)(260,32)(261,32)(262,32)(263,32)(264,32)(265,32)(266,32)(267,32)(268,32)(269,32)(270,32)(271,32)(272,32)(273,32)(274,32)(275,32)(276,32)(277,32)(278,32)(279,32)(280,32)(281,32)(282,32)(283,32)(284,32)(285,32)(286,32)(287,32)(288,32)(289,32)(290,32)(291,32)(292,32)(293,32)(294,32)(295,32)(296,32)(297,32)(298,32)(299,32)(300,32)(301,32)(302,32)(303,32)(304,32)(305,32)(306,32)(307,32)(308,32)(309,32)(310,32)(311,32)(312,32)(313,32)(314,32)(315,32)(316,32)(317,32)(318,32)(319,32)(320,32)(321,32)(322,32)(323,32)(324,32)(325,32)(326,32)(327,32)(328,32)(329,32)(330,32)(331,32)(332,32)(333,32)(334,32)(335,32)(336,32)(337,32)(338,32)(339,32)(340,32)(341,32)(342,32)(343,32)(344,32)(345,32)(346,32)(347,32)(348,32)(349,32)(350,32)(351,32)(352,32)(353,32)(354,32)(355,32)(356,32)(357,32)(358,32)(359,32)(360,32)(361,32)(362,32)(363,32)(364,32)(365,32)(366,32)(367,32)(368,32)(369,32)(370,32)(371,32)(372,32)(373,32)(374,32)(375,32)(376,32)(377,32)(378,32)(379,32)(380,32)(381,32)(382,32)(383,32)(384,32)(385,32)(386,32)(387,32)(388,32)(389,32)(390,32)(391,32)(392,32)(393,32)(394,32)(395,32)(396,32)(397,32)(398,32)(399,32)(400,32)(401,32)(402,32)(403,32)(404,32)(405,32)(406,32)(407,32)(408,32)(409,32)(410,32)(411,32)(412,32)(413,32)(414,32)(415,32)(416,32)(417,32)(418,32)(419,32)(420,32)(421,32)(422,32)(423,32)(424,32)(425,32)(426,32)(427,32)(428,32)(429,32)(430,32)(431,32)(432,32)(433,32)(434,32)(435,32)(436,32)(437,32)(438,32)(439,32)(440,32)(441,32)(442,32)(443,32)(444,32)(445,32)(446,32)(447,32)(448,32)(449,32)(450,32)(451,32)(452,32)(453,32)(454,32)(455,32)(456,32)(457,32)(458,32)(459,32)(460,32)(461,32)(462,32)(463,32)(464,32)(465,32)(466,32)(467,32)(468,32)(469,32)(470,32)(471,32)(472,32)(473,32)(474,32)(475,32)(476,32)(477,32)(478,32)(479,32)(480,32)(481,32)(482,32)(483,32)(484,32)(485,32)(486,32)(487,32)(488,32)(489,32)(490,32)(491,32)(492,32)(493,32)(494,32)(495,32)(496,32)(497,32)(498,32)(499,32)(500,32)(501,32)(502,32)(503,32)(504,32)(505,32)(506,32)(507,32)(508,32)(509,32)(510,32)(511,32)(512,32)(513,32)(514,4) diff --git a/guitar/tabs/Van Halen/spanishfly.tab b/guitar/tabs/Van Halen/spanishfly.tab new file mode 100644 index 0000000..e171b58 --- /dev/null +++ b/guitar/tabs/Van Halen/spanishfly.tab @@ -0,0 +1,154 @@ +%TabMaster v1.01a% + + +E|------------------------------------------------------------------- +B|---------------0---------1-3-0------------------------------------- +G|-------------2---2-----2-------12-7-5-0-5-12-7-5-0-5-12-7-5-0-5-12- +D|---------2-2---------2--------------------------------------------- +A|-----2-2-----------0----------------------------------------------- +E|-0-0--------------------------------------------------------------- + + + +E|----------------------------------------------------------------------- +B|----------------------------------------------------------------------- +G|-7-5-0----------------------------------------------------------------- +D|-------7-12-7-5-0-5-12-7-5-0-5-12-7-5-0-5-12-7-5-0--------------------- +A|---------------------------------------------------7-12-7-12-6-12-5-12- +E|----------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------- +B|-------5---0----12------------------------------------------------------- +G|-------5---7----12--------------------------4-h5---4-5-7-h5-h4---4-h5-h7- +D|-----5---7---12------7----------------4-5-7------7-------------7--------- +A|-3-0---------------7-7-3-h4-h5-s6-5-7------------------------------------ +E|------------------------------------------------------------------------- + + + +E|-------------7-8-10----------7-8-10-----------8-10-12-----------8-10-12------------12-14---- +B|----7-h8-h10--------7-h8-h10--------8-h10-h12---------8-h10-h12---------10-h12-h14-------10- +G|-s8----------------------------------------------------------------------------------------- +D|-------------------------------------------------------------------------------------------- +A|-------------------------------------------------------------------------------------------- +E|-------------------------------------------------------------------------------------------- + + + +E|---------12-14------------13-15-h13-h12----12----------0-7-h5-8-7-6-5-4-5-7-5-h7-h5-h4--- +B|-h12-h14-------12-h13-h15---------------15----13-------0-5-----------------------------7- +G|-------------------------------------------------14-------------------------------------- +D|----------------------------------------------------15---7------------------------------- +A|---------------------------------------------------------0------------------------------- +E|----------------------------------------------------------------------------------------- + + + +E|-4------------------------------------------------------------------------ +B|---7-h5-h4---5-h4---4------5-h4---4--------------------------------------- +G|-----------7------7---7-h5------7---7-h5-h4---7---------4-----4-5-7-h5-h4- +D|--------------------------------------------7---4-h5-h7---5-7------------- +A|-------------------------------------------------------------------------- +E|-------------------------------------------------------------------------- + + + +E|----------------------------------------------------------------------- +B|----------------------------------------------------------------------- +G|---4------4-h5---4-5-7-h5-h4---4------4-h5---4-5-7-4-5---5-7-h5-h4---4- +D|-7---5-h7------7-------------7---5-h7------7-----------7-----------7--- +A|----------------------------------------------------------------------- +E|----------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------------- +B|-------------------------------------------------------------------------------- +G|-------------------------------------------------------------------------------- +D|-7-h5-h4---4-------------------------------------------------------------------- +A|---------7---5-h7-h3-h0-h5-h7-h3-h0-h5-h7-h3-h0-h5-h7-h3-h0-7-9-5-0-7-9-5-0-7-9- +E|-------------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------------ +B|------------------------------------------------------------------------ +G|-----------------------------------------12-5-9-12-5-9-12-5-9-12-5-9-12- +D|---------------------------12-5-9-12-5-9-------------------------------- +A|-5-0-7-9-5-9-12-5-9-12-5-9---------------------------------------------- +E|------------------------------------------------------------------------ + + + +E|------------------------------------------------------------------------ +B|------------------------------------------------------------------------ +G|-4-9-12-4-9-12-4-9-11-4-8-11-4-8-11-4-8-11-4-8-11-4-8-11-4-8-11-4-8----- +D|------------------------------------------------------------------------ +A|--------------------------------------------------------------------9-2- +E|------------------------------------------------------------------------ + + + +E|------------------------------------------------------------------------- +B|------------------------------------------------------------------------- +G|------------------------10-3-7-10-3-7-10-3-7-10-3-7-10-2-7-10-2-7-10-2-7- +D|----------10-4-7-10-3-7-------------------------------------------------- +A|-7-10-2-7---------------------------------------------------------------- +E|------------------------------------------------------------------------- + + + +E|------------------------------------------------------------------ +B|------------------------------------------------------------------ +G|-10-2-7-9-2-6-9-2-6-9-2-6-9-2-6-9-2-6-9-2-6-9-5-7-9--------------- +D|------------------------------------------------------------------ +A|----------------------------------------------------5--------12-5- +E|------------------------------------------------------12-5-9------ + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|-------------------------------------------------------------------------- +D|-----------12-5-9-12-5-9-12-5-9-12-5-9-12-4-9-12-4-9-12-4-9-12-4-9-11-4-8- +A|-9-12-5-10---------------------------------------------------------------- +E|-------------------------------------------------------------------------- + + + +E|-------------------------------------------------------------------------- +B|-------------------------------------------------------------------------- +G|-------------------------------------------------------------------------- +D|-11-4-8-11-4-8-11-4-8-11-4-8-11-4-8-11-4-8-11-4-8------------------------- +A|--------------------------------------------------12-5-9-12-5-9-12-5-9-12- +E|-------------------------------------------------------------------------- + + + +E|---------------------------------------------------------------------- +B|---------------------------------------------------------------------- +G|---------------------------------------------------------------------- +D|---------------------------------------------------------------------- +A|-5-9-12-4-9-12-4-9-12-4-9-12-4-9-11-3-7-10-3-7-10-3-7-9-3-7-9-3-7-9-3- +E|---------------------------------------------------------------------- + + + +E|--------------------------------------------------------------- +B|--------------------------------------------------------------- +G|--------------------------------------------------------------- +D|--------------------------------------------------------------- +A|-7-9-2-6-9-2-6-9-2-6-9-2-6-9-2-6-9-6-2-0-2-6-9-6-2-0-2-6-9-6-2- +E|--------------------------------------------------------------- + + + +E|-------------------------------------0- +B|---------------------------------0-0--- +G|-----------------------------2-2------- +D|-------------------------2-2----------- +A|-0-2-6-9-6-2-0-------2-2--------------- +E|---------------3-2-0------------------- + diff --git a/guitar/tabs/Van Halen/spanked.tab b/guitar/tabs/Van Halen/spanked.tab new file mode 100644 index 0000000..620f961 --- /dev/null +++ b/guitar/tabs/Van Halen/spanked.tab @@ -0,0 +1,453 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / spanked.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: Paul D <S3BZ@MUSIC.TRANSY.EDU>
+Subject: TAB: "Spanked" by Van Halen
+
+Here's yet another addition to my collection of hard-as-hell Van Halen tabs.
+But this one is probably the easiest of the bunch.  The interesting thing
+about this song is that the main riff is played on a special six-string
+bass/guitar.  The bass/guitar is an instrument that Ernie Ball/Music Man
+makes (as far as I know, they're the only ones who make em') that is
+supposedly "the guitar for bassists, and the bass for guitarists".  It's
+BASS-ically (ha, ha) a guitar with open strings that are tuned an octave
+down from normal guitars.  The strings are the same (E-A-D-G-B-E), but
+they're an octave lower.  It's a pretty cool idea, I wish I had 1200 bucks
+to spend on one.  Anyway, apparently Van Halen's producer (whose name
+escapes me at the moment) brought this thing into the studio one day and
+Eddie decided to plug it into his 5150 stack and liked the sound it got so
+they decided to use it for the ominous verse and chorus riffs to "Spanked".
+For live performances, Eddie uses a hybrid double-neck with his signature
+guitar on top, and this bass/guitar on the bottom.  I'm not entirely sure
+how they arrange the parts between him and Michael Anthony when they play
+live, but here's the album version of "Spanked" from For Unlawful Carnal
+Knowledge:
+Some notes on my tab:  b = bend a little bit  :)
+                       bf = bend full
+                       br = bend and release back to pitch
+                       pm = palm mute until the end of the "..."
+                       h = hammer-on
+                       p = pull-off
+
+                                 "Spanked"
+                                by Van Halen
+                               tab by Paul D.
+                           s3bz@music.transy.edu
+
+First, there's this nifty intro utilizing the infamous "E-Bow" (nice little
+$70 electronic guitar gadget).  The E-Bow part is tabbed in between the
+brackets (>> to <<).  Then, it is repeated while the bass/guitar does the
+intro riff:
+
+   w/ E-Bow-->>
+||-------------|--------------|------------|--------------|------------|
+||-------------|--------------|------------|--------------|------------|
+||-------------|--------------|------------|--------------|------------|
+||--14--~~~~~~-|-(14)--~~~~~~-|-12--~~~~~~-|-(12)--~~~~~~-|-11--~~~~~~-|
+||-------------|--------------|------------|--------------|------------|
+||-------------|--------------|------------|--------------|------------|
+
+ b         <<           pm..                                         b
+------------||--------------|---------------------|--------------------|
+------------||--------------|---------------------|--------------------|
+------------||--------------|---------------------|--------------------|
+-12--~~~~~~-||--------------|-------2-2-0h2-------|--------------------|
+------------||------------5-|-------------2p0-----|--------------------|
+------------||-0-----0--7---|-0---------------3-2-|-0-----0-4-5-4/5--3-|
+
+
+------------------------|-------------|-------------------------|
+------------------------|-------------|-------------------------|
+--------------0---0-----|-------------|-------------------------|
+------2-0-0-2-4-4/5-x-x-|-------------|-------2-2-2-0-5-2---0h2-|
+--------------------x-x-|---------5---|-------------------2-----|
+0-----------------------|-0-----7---0-|-0-----------------------|
+
+         b
+-----------|-----------|
+-----------|-----------|
+-----------|-----------|
+-----------|-----------|
+---------5-|-------5---|
+0-----7----|-0-0-0---0-|
+
+
+Okay, at this point, the bass/guitar starts playing the following at a
+sorta "double-time" pace:
+                       pm.....................
+||-----------|---------------------------------|-----------|----------||
+||-----------|---------------------------------|-----------|----------||
+||-----------|---------------------------------|-----------|----------||
+||-----------|---------------------------------|-----------|----------||
+||-0---0-2---|-3---3---3-3-3-3-3-3-3-3-3-3-3-3-|-3-3-5---5\|2-2-2-2-2-||
+||-----------|---------------------------------|-----------|----------||
+
+
+
+While a lead electric guitar does something like this:
+remember...play it FAST  :)
+                                                       br
+||-----------0-------0-----0-----0-|-----0-----0-0-0----------|
+||-0-3-0-3/5---0-3/5---3/5---0-3---|-3/5---0-3---3---0----0h3-|
+||---------------------------------|-------------------2------|
+||---------------------------------|--------------------------|
+||---------------------------------|--------------------------|
+||---------------------------------|--------------------------|
+
+
+----0-------0-----0-----0-0----0----|-0----0-0----0-----||
+(3)---0-3/5---5/7---7/8-8-8/10---10-|---10---8-10/12-12\||
+------------------------------------|-------------------||
+------------------------------------|-------------------||
+------------------------------------|-------------------||
+------------------------------------|-------------------||
+
+
+Then, the bass/guitar begins its "verse" part; that really cool, crunchy,
+ominous-sounding bassline (while the electric guitar twangs out an Em7):
+                                 bf
+||------------------|------------------|-------------|--------------||
+||------------------|------------------|-------------|--------------||
+||*-----------------|------------------|-------------|-------------*||
+||*-----------4---5-|---------2--------|---------4-5-|-----------2-*||
+||----------2-------|-------2---5--5-5-|-------2-----|---------2----||
+||--0-0-2/3---------|-0-2/4------------|-0-2/4-------|-0-0-2/4------||
+
+You can adlib a bit on that bass part wherever you feel it's necessary.
+Listen to the CD to get the variations.  ;)
+
+Now, comes the "pre-chorus" ("Tell me, who ya gonna call when you need that
+affection...").  The basic chords are D A C G, but here's the tab:
+
+ (D)             (A)           (C)           (G)
+|---------------|-------------|-------------|-----------------|
+|---------------|-------------|-------------|-----------------|
+|-----------2---|-------------|-------------|-----------------|
+|-0-0-4-x-x-----|---------2--\|-------2---5-|-----5-----------|
+|---------------|-0---0-4-----|-3---3-------|---------2-3-4-5-|
+|---------------|-------------|-------------|-3-----3---------|
+
+(D)            (A)           (C)             (nc)
+--------------|-------------|---------------|----------|
+--------------|-------------|---------------|----------|
+----------2---|-------------|---------------|----------|
+0-0-4-x-x-----|---------2--\|-------2-x-x-5-|----------|
+--------------|-0---0-4-----|-3---3---------|---0-1-2--|
+--------------|-------------|---------------|-3--------|
+
+
+Then for the chorus ("All you bad, bad boys, call her up on the Spank
+Line"), there's this variation on the main verse riff:
+                                bf   bf
+||---------------|-----------------------|---------------|----------------|
+||---------------|-----------------------|---------------|----------------|
+||---------------|-----------------------|---------------|----------------|
+||-----------4-5-|-----------------------|-----2-5-4---5-|----2-5-4-------|
+||---------2-----|---------2----5-5--5-5-|-3-3-----------|3-3-------5-6-6-|
+||-0-0-2/4-------|-0-0-2/4---------------|---------------|----------------|
+
+                              bf   bf
+---------------|-----------------------|--------------|-------------||
+---------------|-----------------------|--------------|-------------||
+---------------|-----------------------|--------------|-------------||
+-----------4-5-|-----------------------|----2-5-4---5-|-----------2-||
+---------2-----|---------2----5-5--7-7-|3-3-----------|---------2---||
+-0-0-2/4-------|-0-0-2/4---------------|--------------|-0-0-2/4-----||
+
+After the SECOND chorus, there's a bit with percussive guitar noises and
+vocal and guitar echo effects, just adlib that.  Do a lot of divebomb stuff
+with a ton of delay and reverb.  :)
+
+For the most part, this tab was created with:
+===========================================================================
+==                            BUCKET 'O TAB                              ==
+==                tablature creation software for Windows                ==
+==                         For more information:                         ==
+==                       email: gse@ocsystems.com                        ==
+==   US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124    ==
+===========================================================================
+
+Well, there's "Spanked" without the solo or outro.  Here's a hint: the solo
+begins with that lead guitar bit from the before the first verse.  I'm not
+much of a lead guitarist so Eddie Van Halen solos are a bit out of my
+league.  But I think what I've tabbed here should provide a practical
+version of "Spanked".
+Questions/comments/(maybe even requests) welcome by email only.  ;)
+Good luck,
+Paul D.  s3bz@music.transy.edu
+
+From alt.guitar.tab Thu Dec  1 09:57:55 1994
+From: S3BZ@MUSIC.TRANSY.EDU (Paul D)
+Date: 30 Nov 1994 10:49:10 -0600
+Newsgroups: alt.guitar.tab,rec.music.makers.guitar.tablature
+Subject: TAB: "Spanked" by Van Halen
+
+Here's yet another addition to my collection of hard-as-hell Van Halen tabs.
+But this one is probably the easiest of the bunch.  The interesting thing
+about this song is that the main riff is played on a special six-string
+bass/guitar.  The bass/guitar is an instrument that Ernie Ball/Music Man
+makes (as far as I know, they're the only ones who make em') that is
+supposedly "the guitar for bassists, and the bass for guitarists".  It's
+BASS-ically (ha, ha) a guitar with open strings that are tuned an octave
+down from normal guitars.  The strings are the same (E-A-D-G-B-E), but
+they're an octave lower.  It's a pretty cool idea, I wish I had 1200 bucks
+to spend on one.  Anyway, apparently Van Halen's producer (whose name
+escapes me at the moment) brought this thing into the studio one day and
+Eddie decided to plug it into his 5150 stack and liked the sound it got so
+they decided to use it for the ominous verse and chorus riffs to "Spanked".
+For live performances, Eddie uses a hybrid double-neck with his signature
+guitar on top, and this bass/guitar on the bottom.  I'm not entirely sure
+how they arrange the parts between him and Michael Anthony when they play
+live, but here's the album version of "Spanked" from For Unlawful Carnal
+Knowledge:
+Some notes on my tab:  b = bend a little bit  :)
+                       bf = bend full
+                       br = bend and release back to pitch
+                       pm = palm mute until the end of the "..."
+                       h = hammer-on
+                       p = pull-off
+
+                                 "Spanked"
+                                by Van Halen
+                               tab by Paul D.
+                           s3bz@music.transy.edu
+
+First, there's this nifty intro utilizing the infamous "E-Bow" (nice little
+$70 electronic guitar gadget).  The E-Bow part is tabbed in between the
+brackets (>> to <<).  Then, it is repeated while the bass/guitar does the
+intro riff:
+
+   w/ E-Bow-->>
+||-------------|--------------|------------|--------------|------------|
+||-------------|--------------|------------|--------------|------------|
+||-------------|--------------|------------|--------------|------------|
+||--14--~~~~~~-|-(14)--~~~~~~-|-12--~~~~~~-|-(12)--~~~~~~-|-11--~~~~~~-|
+||-------------|--------------|------------|--------------|------------|
+||-------------|--------------|------------|--------------|------------|
+
+ b         <<           pm..                                         b
+------------||--------------|---------------------|--------------------|
+------------||--------------|---------------------|--------------------|
+------------||--------------|---------------------|--------------------|
+-12--~~~~~~-||--------------|-------2-2-0h2-------|--------------------|
+------------||------------5-|-------------2p0-----|--------------------|
+------------||-0-----0--7---|-0---------------3-2-|-0-----0-4-5-4/5--3-|
+
+
+------------------------|-------------|-------------------------|
+------------------------|-------------|-------------------------|
+--------------0---0-----|-------------|-------------------------|
+------2-0-0-2-4-4/5-x-x-|-------------|-------2-2-2-0-5-2---0h2-|
+--------------------x-x-|---------5---|-------------------2-----|
+0-----------------------|-0-----7---0-|-0-----------------------|
+
+         b
+-----------|-----------|
+-----------|-----------|
+-----------|-----------|
+-----------|-----------|
+---------5-|-------5---|
+0-----7----|-0-0-0---0-|
+
+
+Okay, at this point, the bass/guitar starts playing the following at a
+sorta "double-time" pace:
+                       pm.....................
+||-----------|---------------------------------|-----------|----------||
+||-----------|---------------------------------|-----------|----------||
+||-----------|---------------------------------|-----------|----------||
+||-----------|---------------------------------|-----------|----------||
+||-0---0-2---|-3---3---3-3-3-3-3-3-3-3-3-3-3-3-|-3-3-5---5\|2-2-2-2-2-||
+||-----------|---------------------------------|-----------|----------||
+
+
+
+While a lead electric guitar does something like this:
+remember...play it FAST  :)
+                                                       br
+||-----------0-------0-----0-----0-|-----0-----0-0-0----------|
+||-0-3-0-3/5---0-3/5---3/5---0-3---|-3/5---0-3---3---0----0h3-|
+||---------------------------------|-------------------2------|
+||---------------------------------|--------------------------|
+||---------------------------------|--------------------------|
+||---------------------------------|--------------------------|
+
+
+----0-------0-----0-----0-0----0----|-0----0-0----0-----||
+(3)---0-3/5---5/7---7/8-8-8/10---10-|---10---8-10/12-12\||
+------------------------------------|-------------------||
+------------------------------------|-------------------||
+------------------------------------|-------------------||
+------------------------------------|-------------------||
+
+
+Then, the bass/guitar begins its "verse" part; that really cool, crunchy,
+ominous-sounding bassline (while the electric guitar twangs out an Em7):
+                                 bf
+||------------------|------------------|-------------|--------------||
+||------------------|------------------|-------------|--------------||
+||*-----------------|------------------|-------------|-------------*||
+||*-----------4---5-|---------2--------|---------4-5-|-----------2-*||
+||----------2-------|-------2---5--5-5-|-------2-----|---------2----||
+||--0-0-2/3---------|-0-2/4------------|-0-2/4-------|-0-0-2/4------||
+
+You can adlib a bit on that bass part wherever you feel it's necessary.
+Listen to the CD to get the variations.  ;)
+
+Now, comes the "pre-chorus" ("Tell me, who ya gonna call when you need that
+affection...").  The basic chords are D A C G, but here's the tab:
+
+ (D)             (A)           (C)           (G)
+|---------------|-------------|-------------|-----------------|
+|---------------|-------------|-------------|-----------------|
+|-----------2---|-------------|-------------|-----------------|
+|-0-0-4-x-x-----|---------2--\|-------2---5-|-----5-----------|
+|---------------|-0---0-4-----|-3---3-------|---------2-3-4-5-|
+|---------------|-------------|-------------|-3-----3---------|
+
+(D)            (A)           (C)             (nc)
+--------------|-------------|---------------|----------|
+--------------|-------------|---------------|----------|
+----------2---|-------------|---------------|----------|
+0-0-4-x-x-----|---------2--\|-------2-x-x-5-|----------|
+--------------|-0---0-4-----|-3---3---------|---0-1-2--|
+--------------|-------------|---------------|-3--------|
+
+
+Then for the chorus ("All you bad, bad boys, call her up on the Spank
+Line"), there's this variation on the main verse riff:
+                                bf   bf
+||---------------|-----------------------|---------------|----------------|
+||---------------|-----------------------|---------------|----------------|
+||---------------|-----------------------|---------------|----------------|
+||-----------4-5-|-----------------------|-----2-5-4---5-|----2-5-4-------|
+||---------2-----|---------2----5-5--5-5-|-3-3-----------|3-3-------5-6-6-|
+||-0-0-2/4-------|-0-0-2/4---------------|---------------|----------------|
+
+                              bf   bf
+---------------|-----------------------|--------------|-------------||
+---------------|-----------------------|--------------|-------------||
+---------------|-----------------------|--------------|-------------||
+-----------4-5-|-----------------------|----2-5-4---5-|-----------2-||
+---------2-----|---------2----5-5--7-7-|3-3-----------|---------2---||
+-0-0-2/4-------|-0-0-2/4---------------|--------------|-0-0-2/4-----||
+
+After the SECOND chorus, there's a bit with percussive guitar noises and
+vocal and guitar echo effects, just adlib that.  Do a lot of divebomb stuff
+with a ton of delay and reverb.  :)
+
+
+For the most part, this tab was created with:
+===========================================================================
+==                            BUCKET 'O TAB                              ==
+==                tablature creation software for Windows                ==
+==                         For more information:                         ==
+==                       email: gse@ocsystems.com                        ==
+==   US Mail: The Bucket, 3176-B5 Summit Square Dr., Oakton, VA 22124    ==
+===========================================================================
+
+Well, there's "Spanked" without the solo or outro.  Here's a hint: the solo
+begins with that lead guitar bit from the before the first verse.  I'm not
+much of a lead guitarist so Eddie Van Halen solos are a bit out of my
+league.  But I think what I've tabbed here should provide a practical
+version of "Spanked".
+Questions/comments/(maybe even requests) welcome by email only.  ;)
+Good luck,
+Paul D.  s3bz@music.transy.edu
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/sucker_in_a_three-piece.tab b/guitar/tabs/Van Halen/sucker_in_a_three-piece.tab new file mode 100644 index 0000000..c8ca79a --- /dev/null +++ b/guitar/tabs/Van Halen/sucker_in_a_three-piece.tab @@ -0,0 +1,1155 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / sucker_in_a_three-piece.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+The following is the tablature for "Sucker in a Three-Piece" by Van Halen 
+off the album OU812.  Any questions/comments/suggestions may be sent to 
+stevem@imap1.asu.edu.  Thanks.
+
+
+
+                        Sucker In a Three-Piece
+                        -----------------------
+
+                                By Van Halen
+
+                              transcribed by:
+                               Steve Mueller
+                            stevem@imap1.asu.edu
+
+
+
+---------------------|------------------|------------------------------------
+---------------------|------3-----------|--3---------------------------------
+-------------------2-|------2-----2-----|--2-----2---------------------------
+-x-/-/-/-x-\-\-\---2-|------0-----2-----|--0-----2-------2------(2)----------
+-x-/-/-/-x-\-\-\---0-|------------0-----|--------0-------2------(2)----------
+---------------------|------------------|----------------0------(0)----------
+
+|--pick slides--|
+
+
+
+
+----------------|---------------------|-------3-------|-3------------|-------
+----------------|------------------3--|-(3)---3----3--|-3---3--------|-------
+----------------|------------------2--|-(2)---0----2--|-0---2----2-2-|-2-----
+-(2)------------|------------------0--|-(0)---0----0--|-0---0----2-2-|-2-----
+-(2)------------|---------------------|---------------|-----0----0-0-|-0-----
+-(0)------12--9-|-(9)-7-5--5-4--------|---------------|--------------|-------
+
+           T  T       T T  T T 
+
+        |---tapped harmonics---|
+
+
+
+
+
+----------------------------------|---------------|-----------------|-------
+----------------------------------|--------3------|--3--------------|-------
+-x/x\/x\--x\--x\--x\--x\--------2-|-(2)----2----2-|--2---2----------|-------
+-x/x\/x\x/x\x/x\x/x\x/x\x/x\x---2-|-(2)----0----2-|--0---2----2-2-2-|-(2)---
+--------x/--x/--x/--x/--x/--x\--0-|-(0)---------0-|------0----2-2-2-|-(2)---
+-----------------------------\----|---------------|---------------0-|-(0)---
+
+|--slide pick back and forth---|
+   across stgs. indicated 
+   while descending in a 
+   steady gliss
+
+
+
+
+
+    A.H.    |-v1-v1-v1-v1-v1-|release
+----------------------------------------|--------3------|---3----------|-----
+------^(1.5)--------------------------3-|---(3)--3----3-|---3---3------|-----
+-----6--------------------------------2-|---(2)--0----2-|---0---2------|-----
+---x----------------------------------0-|---(0)--0----0-|---0---0----2-|-(2)-
+--x-------------------------------------|---------------|------------2-|-(2)-
+-x--------------------------------------|---------------|-------2----0-|-(0)-
+
+
+      note: (v1 means dive with whammy bar 1 step lower)
+
+
+                                                                      semi
+                                                        |----P.M---|  harm.-|
+
+--------------------|--------------------|---------------------|-------------
+--------------3-----|-(2)----------------|---------------------|-------------
+-----2--2--2--2-----|-(3)----------------|----2--2--2--0-------|-------------
+-----2--2--2--0-----|--------------------|----2--2--2--0-------|-------------
+-----0--------------|--0-0-0---0-0-0-0---|--0------------0-0-0-|-0-0-0-0-0-0-
+--------------------|--------------------|---------------------|-------------
+
+
+
+
+                        P.M. 
+                      --2nd and 4th-- P.M.       |-P.M-|
+-----------------|-------------------|------------------|--------------------
+--------------3--|-(3)---------------|------------------|--------------------
+--------2-----2--|-(2)---------------|----2---2-0-------|--------------------
+--------2-----0--|-(0)---------------|----2---2-0-------|--------------------
+---(0)--0-0-0----|------0-0-0-0-0--0-|-0----------0-0-0-|-0------------------
+-----------------|-------------------|------------------|--------------------
+
+
+
+
+ |----semi. harmonic hammers and pulls------|
+                                                         |-----P.M----|
+------------------------------------------------------------------|----------
+-------------------------------------------------------3----------|----------
+---------------------------------------------2--2--2---2----------|----------
+---------------------------------------------2--2--2---0----------|----------
+-0h3p2p0h3p2p0h3p2p0h3p2p0h3p2p0h3p2p0h3p2p0-0--0--0------0--0--0-|-0-0--0-0-
+------------------------------------------------------------------|----------
+
+ note:  glide up and down A string w/ right
+        hand (lightly touching it) while
+        hammering on and pulling off with
+        the left hand, sounding random 
+        harmonics and palm-muted notes.
+
+
+
+
+
+                                  ~~~~                                   ~~~~
+-------------|-----------------------------------------|--------------|------
+-------------|------------3----(3)------3/5---3/5\3--3-|-(3)-------3--|-(3)--
+--2--2-2--0--|----2----2--2----(2)------2/4---2/4\2--2-|-(2)-2---2-2--|-(2)--
+--2--2-2--0--|----2----2--0----------------------------|-----2---2-0--|-(0)--
+--0----------|-0---------------------------------------|--------------|------
+-------------|-----------------------------------------|--------------|------
+
+
+
+
+
+
+                                 Vocals:  Ow!_______________________________
+
+
+
+-P.M.-                P.M.
+---------------------|-----------------------------------------||------------
+---------------------|-----------3---(3)3/5--5-5--3/5--5-5--5--||-(5)\-------
+-------------2---2-0-|----2---2--2---(2)2/4--4-4--2/4--4-4--4--||-(4)\-------
+-------------2---2-0-|----2---2--0---(0)-----------------------||------------
+-0--0--0--0--0-------|-0---------------------------------------||------------
+---------------------|-----------------------------------------||------------
+
+
+
+
+________________________________________________
+
+
+
+--P.M--               -P.M.-                       -P.M-
+                                                                 P.M.
+------------------|----------------------|-----------------------------------
+-----------5------|-5--------------------|----------------5------------------
+-----------4--4---|-4---------4--4--4--2-|-(2)---4--------4---4--------------
+-----------2--4---|-2---------4--4--4--2-|-(2)---4--------2---4--------------
+--2-2-2-------2-2-|----2-2-2-----------2-|-(2)------2-2-------2---2----------
+------------------|----------------------|-----------------------------------
+
+
+
+
+
+                  
+                   ~~~~~~~~    -P.M.-              --P.M--
+----------------7/10--|-(10)------------------|--------------------|---------
+-5-5-5--7/10----7/10--|-(10)----------5-------|--5-----------------|-(2)-----
+-4-4-4----------4/7---|-(7)-----------4---4---|--4---------4-4-4-2-|-(2)--4--
+-2-2-2--4/7-----------|------4--------2---4---|--2---------4-4-4-2-|-(2)--4--
+----------------------|------2--2-2-------2-2-|-----2-2-2--------2-|---------
+----------------------|-----------------------|--------------------|---------
+
+
+
+
+
+
+                                        Vocals:  She's so ...
+
+
+-P.M.-        P.M.                                                  P.M.
+-----------------------------|-----------------------||----------------------
+-------5---------------------|-----------------------||------------3---------
+-------4----4------4-2-------|-(2)-------------------||------2-----2---------
+-------2----4------2-2-------|-(2)-------------------||------2-----0---------
+--2-2-------2--2---2-0-------|-(0)--x\---------------||---0----0-0----0--0---
+-----------------------------|---------12\--0---0-0--||----------------------
+
+
+
+
+
+
+           How 'bout a nine on a ...
+                                         
+--P.M.---                                     -P.M.-
+
+--------------------------------------------|--------------------|-----------
+-----------------------------------3--------|---------4/5\3/4\3--|-----------
+------------2-2--2--0-(0)--2-------2--------|---------3/4\2/3\2--|----2------
+------------2-2--2--0-(0)--2-------0--------|--------------------|----2------
+-0-0-0--0--------------------0--0-----------|--0-0-0-------------|-0---------
+--------------------------------------------|--------------------|-----------
+
+
+
+
+
+                          straight on up___....
+                                        
+-P.M-
+             ~~~~~   -P.M.-
+------------------|------------------------------------------|---------------
+-------3---(3)----|-3--------------------------------3-------|-(3)-----------
+-------2---(2)----|-2--------2-----2---0--(0)-2----2-2-------|-(2)-----------
+-------0----------|-0--------2-----2---0--(0)-2----2-0-------|-(0)-0-0-------
+--0-0-------------|---0-0-0--------------------(0)-----------|---------------
+------------------|------------------------------------------|---------------
+
+
+
+
+
+
+ Whoo! Sweet lit--tle wishbone...
+
+                         -P.M.-                                       -P.M-
+
+-----------------|-----------------------|-----------------------------------
+-3/5--3/5\\\3--3-|-(3)-3-------3----3----|-----------5-5--5\3--(3)--3------3-
+-2/4--2/4\\\2--2-|-(2)-2-------4----4----|-----------6-6--6\2--(2)--2------4-
+---------------0-|-(0)----0-0---------0--|------------------0--(0)-----0-0---
+-----------------|-----------------------|--5-5-5-5--------------------------
+-----------------|-----------------------|-----------------------------------
+
+
+
+                    
+
+                    Lick up a-one    side and ...
+
+                                    
+                                                      --P.M.-------
+
+--------|------------------------|-----------------------|-------------------
+---3----|-x-5-5-5-5-3h5--3--3--3-|-(3)--3-------3---3----|-----------5-5-3-3-
+---4----|-x-5-5-5-5---5--5--5--2-|-(2)--2-------4---4----|-----------5-5-5-2-
+------0-|-x--------------------0-|-(0)-----0-0---------0-|-0--0-0-0--------0-
+--------|-x----------------------|-----------------------|-------------------
+--------|------------------------|-----------------------|-------------------
+
+
+
+
+
+
+always make her laugh Ha   ha....
+
+
+      -P.M.-       P.M.                                     ---P.M----------
+
+------------------------|-----------------------|------------------|---------
+-(3)-3--------3--3------|----5-5-5-3h5--3--3----|----------3-------|---------
+-(2)-2--------4--4------|-x--5-5-5---5--5--5----|-----2--2-2-------|---------
+-(0)----0-0----------0--|-x-------------------x\|-----2--2-0-------|---------
+------------------------|---------------------0-|-(0)-0------0-0-0-|-0-0-0-0-
+------------------------|-----------------------|------------------|---------
+
+
+
+
+
+                                               I got ev - ry t...
+                                
+
+                  -P.M-    --P.M---------                     -P.M-
+                                                   ~~~~~~~
+----------------------------------|-----------------------||-----------------
+-------------------------3--------|--------4/5---4/5----5-||-5----------6----
+-2-2--2--0--(0)--2-------2--------|--------3/4---3/4----4-||-4----------5--5-
+-2-2--2--0--(0)--2-------0--------|-----------------------||---------5--3--5-
+------0-------------0-0-----0-0-0-|-0-0-0-----------------||----3--3-3-----3-
+----------------------------------|-----------------------||-----------------
+
+
+
+
+
+
+         give you ev - ry thing you ...
+
+
+   -P.M.-                                                            
+                            -P.M.-             -P.M-                 -P.M.-
+---------------------|--------------------|-------------------|--------------
+--6------------------|--------------8-8---|--8----------------|--------------
+--5------------------|--------------7-7-7-|--7----------------|--------------
+--3--------5-----5-7-|-(7)----------5-5-7-|--5-----7-7\5/7--5-|-(5)-5--------
+----3-3-3--3-----3-5-|-(5)---5-5-5------5-|----5-5-5-5\3/5--3-|-(3)-3-3-3----
+---------------------|--------------------|-------------------|--------------
+
+
+
+
+
+
+
+ daddy              over ....
+
+
+        P.M                           --v.5-------                bend/release
+               -P.M.-                                                    |--|
+-----------------------------------|----------------------|------------------
+--6-6--------6---------------------|----------------------|------------------
+--5-5-5------5--------5-5-7---(7)\-|------------------2p0-|-5p2--7p5^(.5)-13-
+--3-3-5------3--3-3---3-3-5---(5)\-|--------2-2-2-2-------|------------------
+------3--3-------------------------|-2/7------------------|------------------
+-----------------------------------|----------------------|------------------
+                                                                           T
+
+
+
+
+
+
+
+ sucker,                 sucker in a ....
+         
+           (sucker____            ...three - piece)
+
+                    -P.M-                     P.M.           -P.M.-
+                           ~~~~~                         
+----------------|--------------------|--------------------|------------------
+--------3-------|-3------------------|-------------3------|-3-------3/5------
+-2------2----2--|-2--------2-------0-|--(0)-2------2---2--|-2-------2/4------
+-2------0----2--|-0--------2-------0-|--(0)-2------0---2--|-0----------------
+-0-0-0-------0--|----0-0-0-----------|----------0------0--|----0-0-----------
+----------------|--------------------|--------------------|------------------
+
+
+
+
+
+
+                        Sucker   all dressed up ....
+
+(sucker)_______________
+
+
+               --P.M.---     P.M.
+                                                             -P.M.-
+---------------------------------|--------------------|----------------------
+-3/5\3--3---(3)----------3-------|-3------------------|------------3---------
+-2/4\2--2---(2)----------2---2---|-2---------2-2-2--0-|-(0)-2------2---2-----
+--------0---(0)----------0---2---|-0---------2-2-2--0-|-(0)-2------0---2-----
+----------------0-0-0--0-----0-0-|---(0)-0-0----------|-------0-0------0-----
+---------------------------------|--------------------|----------------------
+
+
+
+
+
+
+                                         I'm on ...
+
+
+                             -P.M-                           --P.M.--------
+      ~~~~~~~~~~~~~~~~~                    ~~
+------------------------|---------------------||-----------------|-----------
+------------------------|---------------------||---------3-------|-----------
+-2----------------------|---------------------||--2------2-------|-----------
+-2--(2)-----------------|---------------------||--2------0-0-----|-----------
+-0----------------------|-----------------3---||--0-0-0------0-0-|-0-0-0-0---
+-----3------------------|--(3)-5-5-4-4-3------||-----------------|-----------
+
+
+
+
+
+
+whoo, with just one   look                    .....
+
+
+                                   -P.M.-                     -P.M-
+ ~~~~~~                     ~~~~~~                                      ~~~~
+----------|-----------------------|--------------------|---------------------
+----------|------------3---(3)----|-------3/5--3/5\3-3-|-(3)--------3--(3)---
+-2---2-0--|-(0)-2---x--2---(2)----|-------2/4--2/4\2-2-|-(2)-2------2--(2)---
+-2---2-0--|-(0)-2---x--0----------|------------------0-|-(0)-2------0--------
+----------|---------x-------------|-0-0-0--------------|-----0-0-0-----------
+----------|-----------------------|--------------------|---------------------
+
+
+
+
+
+          in my little black___ ....
+
+
+---P.M---                   P.M.            -P.M.-
+                                      ~~~~
+-------------------|-----------------------|-----------------------|---------
+-------------------|------------3----(3)---|-------3/5--3/5\\3---3-|-(3)-3---
+----------2-2-2--0-|-(0)-2------2----(2)---|-------2/4--2/4\\2---2-|-(2)-2---
+----------2-2-2--0-|-(0)-2------0----------|---------------------0-|-(0)-----
+-0-0-0-0-----------|-------0-0-------------|-0-0-0-----------------|---------
+-------------------|-----------------------|-----------------------|---------
+
+
+
+
+
+
+ the way I dress,     she don't like ....
+
+
+-P.M-       --P.M------                   -P.M.-       -P.M.-
+
+--------------|--------------------|-----------------------------------------
+-------3--3---|----------5-5-5\--3-|-(3)-3-------3----3-----5-5-5-5-3----3---
+-------4--4---|----------6-6-6\--2-|-(2)-2-------4----4-----5-5-5-5-5----2---
+------------0-|-0-0-0-0----------0-|-(0)----0-0-----0---0-0--------------0---
+--0-0---------|--------------------|-----------------------------------------
+--------------|--------------------|-----------------------------------------
+
+
+
+
+
+
+   but when I roll you over baby...
+
+
+        -P.M-       ---P.M.--------                    -P.M-       -P.M--
+
+-----------------------|------------------------|--------------------|-------
+-(3)--3-------3---3----|-------------5-5--5\--3-|-(3)-3------3---3---|-------
+-(2)--2-------4---4----|-------------6-6--6\--2-|-(2)-2------4---4---|-------
+-(0)-----0--0--------0-|-0--0--0--0-----------0-|-(0)---0-0--------0-|-------
+-----------------------|------------------------|--------------------|-3-----
+-----------------------|------------------------|--------------------|-------
+
+
+
+
+
+
+     Just take me down,    down,   ....
+
+
+                                ----P.M.-------                        -P.M.-
+
+---------------------|----------------|--------------------------------------
+-5-5-5-3hp5-3--3-----|--------3-------|-------------------------------3------
+-5-5-5----5-5--5-----|--2---2-2-------|----------2-2--2-0--(0)-2-2-2--2------
+-------------------x\|--2---2-0-------|----------2-2--2-0--(0)-2-2-2--0-0-0-0
+---------------------|--0-------0-0-0-|-0-0-0-0------------------------------
+---------------------|----------------|--------------------------------------
+
+
+
+
+
+
+
+
+                Give me ev   -    ry-thing ....
+
+
+P.M.                                     -P.M.-            -P.M.-
+                         ~~~~~
+------------------------------||----------------------|----------------------
+----------4/5---4/5------5----||-(5)------------6-----|--6-------------------
+----------3/4---3/4------4----||-(4)------------5---5-|--5-------------------
+------------------------------||-------5--------3---5-|--3--------5-5-5//7---
+-0--0--0----------------------||-------3--3--3------3-|-----3-3-3-3-3-3//5---
+------------------------------||----------------------|----------------------
+
+
+
+
+
+
+ ev - rything I need.____         you don't ....
+
+
+      -P.M.-         P.M.     P.M-                     -P.M.
+
+--------------------------|---------------------|----------------------------
+--------------8--8--------|-8-------------------|-----------6-6--------------
+--------------7--7--7-----|-7-------------------|-----------5-5--5-----------
+-(7)----------5--5--7-----|-5-------7--7\5/7--5-|--(5)------3-3--5-----------
+--5----5-5-5--------5-----|----5-5--5--5\3/5--3-|--(3)--3-3------3-----------
+--------------------------|---------------------|----------------------------
+
+
+
+
+
+
+
+        not  over  me....
+
+
+   -P.M.-                   -v.5----------                     |---------|
+                                                                   ~~~~
+------------------------|----------------------|-----------------------------
+-6----------------------|------------------2p0-|-----------------------------
+-5----------------------|----------------------|--5p2--7p5^(1/2)--13---------
+-3--------5-5--7----(7)\|-------2--2--2--2-----|-----------------------------
+----3--3--3-3--5----(5)\|-2/7------------------|-----------------------------
+------------------------|----------------------|-----------------------------
+                                                                   T
+                                                                   
+                          Note:  the v.5 indicates           Note: bend the     
+                                 Eddie's use of the                note and
+                                 whammy bar as he                  hold, then 
+                                 dips 1/2 step lower               tap the 
+                                 with the bar on each              13th fret,
+                                 note indicated.                   use vibr.,
+                                                                   and release
+                                                                   the bend.
+
+
+
+
+
+
+
+sucker,               whoo!  Sucker in ...
+        (sucker______                      (three - piece)
+                                           
+
+                      -P.M.-                                        -P.M.-
+
+-----------------|-----------------------|----------------------|------------
+--------3--------|--3--------------------|---------------3------|-3----------
+-2------2----2---|--2---------2--2--2--0-|--(0)-2--------2---2--|-2----------
+-2------0----2---|--0---------2--2--2--0-|--(0)-2--------0---2--|-0----------
+-0-0-0-------0---|-----0-0-0-------------|-----------0-------0--|----0-0-----
+-----------------|-----------------------|----------------------|------------
+
+
+
+
+
+
+
+                                   Sucker,     all ...
+               (Sucker)_____________                              
+
+
+                        ---P.M.---        P.M.   --P.M.--
+
+------------------|---------------------------|------------------------------
+--3/5---3/5\3---3-|-(3)-------------3---------|-3----------------------------
+--2/4---2/4\2---2-|-(2)-------------2---2-----|-2---------2--2--2--0---------
+----------------0-|-(0)-------------0---2-----|-0---------2--2--2--0---------
+------------------|------0-0-0---0------0---0-|---0--0--0--------------------
+------------------|---------------------------|------------------------------
+
+
+
+
+three - piece suit.
+
+       --P.M--
+                            ~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~
+----------------------|-----------------------|------------------------------
+---------------3------|-----------------------|------------------------------
+-(0)-2---------2---2--|-2---------------------|------------------------------
+-(0)-2---------0---2--|-2---------------------|------------------------------
+--------0--0-------0--|-0---------------------|---------------------7--------
+----------------------|----3------------------|--5-2-----------(2)/-0--------
+
+
+
+
+
+Oh,______      uh,  now say it ...
+
+
+   P.M.  P.M.         P.M.  P.M.         P.M.   P.M.        P.M.
+                                                                ~~~~~
+--------------------------------|----------------------|---------------------
+--------------------------------|----------------------|---------------------
+-9-----9------------------------|------7-----7---------|---------------------
+-9-----9-----------5-----5------|------7-----7---------|-5-5---5------9-9----
+-7-----7------3h5--5-----5------|-3/5----5-5---5-5-5h7-|-5-5-7-5------7-7----
+---0-0---0-0---------3-3---3-3--|----------------------|---------------------
+
+
+
+
+
+
+sucker,__________    Nah....
+
+
+   P.M.  P.M.       ----P.M.----         P.M.   P.M.       
+                                                          ~~~ ~~~ ~~~
+--------------------------------|----------------------|---------------------
+--------------------------------|----------------------|---------------------
+-9-----9------------------------|------7-----7---------|---------------------
+-9-----9-----------5-----5---5--|-5-7--7-----7---------|-5----5---5----------
+-7-----7------3h5--5-----5---5--|-3/5----5-5---5-5-5h7-|-5----5---5----------
+---0-0---0-0---------3-3---3----|----------------------|---------------------
+
+
+
+
+sucker.          He just a sucker.     ...
+
+
+         P.M.     P.M.          P.M.   P.M.            -P.M.-
+
+----------------------------|------------------------------------------------
+----------------------------|------------------------------------------------
+-7/9--9--------9------------|-------------------------7-------7--7--7--------
+-7/9--7--------9------------|-5-------5-----5--5-/-7--7-------7--7--7--------
+-5/7-----------7--------3h5-|-5-------5-----5--3-/-7-----5-5--5--5--5--------
+---------0--0-----0--0------|----3-3-----3-----------------------------------
+
+
+
+
+               your a sugar daddy.                    ....
+                
+
+      P.M.    P.M.             ------------------P.M.------------------
+
+----------------------|--------------------------|---------------------------
+----------------------|--------------------------|---------------------------
+----------------------|--------------------------|---------------------------
+-5--5-----5--5----7/9-|-(9)--9-------------------|----------------------5/7--
+-5--5--7--5--5-7--5/7-|-(7)--7-----------------3-|-5--------------------3/5--
+----------------------|---------0--0--0--0--0----|----3--3--3--3--3--3-------
+
+
+
+
+
+         Hey!                You're both a bunch....
+
+
+--------------light P.M.-------------------
+
+------------------------|-------------------||-------------0-----------------
+------------------------|-------------------||-------------0-----------------
+------------------------|-------------------||----------------------0--------
+-7--7--7--7--7--7--5----|-5--5-----5--------||----------------------0--------
+-5--5--5--5--5--5--5h7--|-5--5--7--5--7--7--||-------------------------------
+------------------------|----------------0--||---0---------------------------
+
+
+
+
+---------let ring---------
+                                                                   A.H.
+                                                                       v.15--
+-------0-0-0------0-0-0--0---7/15--0------0-0------------------|-------------
+-------0-0-0------0-0-0--0-----------10\x-----5/x-0------------|-------------
+--2/4---------2/4-----------------------------------16\x-0-----|----3^(1)----
+-----------------------------------------------------------5/x-|---x---------
+---------------------------------------------------------------|--x----------
+---------------------------------------------------------------|-x-----------
+
+                                                      Note: Dip 3 times with
+                                                            bar at 1.5 steps
+
+
+
+
+                ~~~~~~                      ~~~~~~~~
+----------------------------|------------------------|-----------------------
+----------------------------|------------------------|-----------------------
+----------------------------|---9-9-9----9-9----(9)\-|-----------------------
+----2-2-2----2-2-------(2)/-|------------------------|-----------------------
+----------------------------|-7-------7--------------|-----------------------
+-0--------0-----------------|---------0--------------|-----------------------
+
+
+
+
+
+
+
+ T      T    T        T    T        T    T        T      T      T
+
+--------------------------------------------------5/xp0----------------------
+-8p3h7--8p7--8p7p5p3--8p7--8p7p5p3--8p7--8p7p5p3---------5/xp0---------0--0--
+----------------------------------------------------------------4/xp0--------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+
+
+       -----\
+-----------------------------------------------------------------------------
+--15^(1)---------12-12-15-12-12----12-15p12-12-15p12----12----12------12-----
+--------------14----------------14-------------------14----15----0h14--------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+
+
+
+-----------------------------------------------------------------------------
+-12-15p12-17p12-15p12------12-15p12-17p12-15p12------12-15p12-17p12-15p12----
+----------------------0h14----------------------0h14-------------------------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+
+
+
+
+ T         T            T            T                              *see note
+                                                         ---\         v------
+-----------------------------------------------------------------------------
+-17/19p12--17/19p12h15--17/19p12h15--17/19p12h15-----------------------------
+--------------------------------------------------14^(1/2)---(14)p12p0-------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
+
+*Note:  Eddie here will be diving around on his whammy bar after hitting the 
+        open note on the G string.  The v---- indicates the start of his 
+        whammy bar antics.                                                                
+
+
+
+
+
+Note:  Again, the below notes are all whammy-bar induced.  The v1.5 and v2.5
+       indicates that the whammy bar is being dropped to those specific steps.
+       The /\/\/ indicate up and down jagged movements of the bar.  The 
+       harmonic and rake notes refer to the notes played (all while being
+       warped by the whammy bar).  Finally, the vibrato notes indicate the
+       shaking of the bar.
+      
+
+---(v1.5)-~~~--------(v2.5)---/Harm.--/-\/\/rake\semi-harm.~~~~
+
+-----------------------------------------------------------------------------
+--------------------------------------------------------------5--5p3--5/7----
+--(0)----------(0)-------------5------------------7--(7)---------------------
+------------------------------------------------x-x--(x)---------------------
+-----------------------------------------------x--x--(x)---------------------
+----------------------------------------------x------------------------------
+
+
+
+-------0-----0------0------------|-(0)---------------------------------------
+-7/8---8/10--10/12--12/15--15/17-|--20--19---17--17--------------------------
+---------------------------------|-------------------------------------------
+---------------------------------|-------------------------------------------
+---------------------------------|-------------------x-----------------------
+---------------------------------|-------------------19\---------------------
+
+
+
+
+         P.M.     P.M.          P.M.               -P.M.-
+
+----------------------------|------------------------------------------------
+----------------------------|------------------------------------------------
+------9--------9------------|---------------------7-------7--7--7------------
+------9--------9------------|-5-------5----5-/-7--7-------7--7--7------------
+------7--------7--------3h5-|-5-------5----3-/-7-----5-5--5--5--5---5h7------
+---------0--0-----0--0------|----3-3-----------------------------------------
+
+
+
+
+
+
+                           -P.M-                                   -P.M-
+            ~~~~~          
+--------------------------------------------|--------------------------------
+--------------------------------------------|--------------------------------
+----------------------------------9---------|---------------5/7--7-----------
+--5--5-----5--------7/9--9--------9---9\----|-5-------5-----5/7--7-----------
+--5--5--7--------7--5/7--7--------7---7\3h5-|-5-------5-----3/5--5--5--5-----
+----------------------------0--0------------|----3--3------------------------
+
+
+
+                                               -P.M-     ----P.M----
+                                 ~~~~~~~~
+--------------------|--------------------------------------------------------
+--------------------|--------------------------------------------------------
+--------------------|--------------------------------2-----------------------
+-------5----5-----5-|-(5)------(5)--------(5)\-------2---------------2---2-0-
+--5h7--5--7-5---7-5-|-(5)------(5)--------(5)\-2-----0---------------2---2-0-
+--------------------|--------------------------0-0-0------0-0-0-0-0----------
+
+
+
+
+
+ P.M. -P.M.-   -----P.M-----        v1-\--/~~~      P.M.  P.M.   -----P.M.---
+
+---------------------|-------------------------|-----------------------------
+---------------------|-------3/5---/5----------|-(5)-------------------------
+------------2--------|-------2/4---/4----------|-(4)----------2--------------
+-----2------2--------|-------------------------|--------2-----2--------------
+-----2------0--------|-------------------------|--------2-----0--------------
+--0----0-0------0--0-|-0-0-0-------------------|-----0-----0--------0--0--0--
+
+
+
+
+
+
+--P.M.---              P.M.     P.M.    --P.M--                        tr.~~~
+
+----------------------|--------------------------|----------------------0--0-
+----------------------|--------------------------|----------------------0--0-
+----------------------|--------------2-----------|---------------------------
+----------2-----2--0--|-----2--------2-----------|--2p0h2p0h2p0h2p0h2p0h2(0)-
+----------2-----2--0--|-----2--------0-----------|---------------------------
+-0--0--0--------------|--0--------0-------0--0---|---------------------------
+
+
+
+
+
+     --P.M.--     -----P.M-----                -P.M.-    -P.M-
+
+---------------------|-------------------|---------------------|-------------
+---------------------|-------------------|---------------------|-------------
+--------------4------|-------------------|------------4--------|-------------
+--2p0---------4------|---------4---4--2--|----4-------4--------|-------------
+-------4-4-4---------|---------4---4--2--|----4-----------2--2-|-------------
+-------2-2-2-------2-|-2-2-2-2-2---------|-2--2--2-2-----------|--2--2--2----
+
+
+
+
+
+                        --P.M.--   -------P.M.------- 
+
+-1/2--2--2-1/2--2---2--------------------------------------------------------
+-1/2--2--2-1/2--2---2-----------3--------------------------------------------
+-----------------------2--------2---------------------2------2--0---(0)------
+-----------------------2--------0---------2-----------2------2--0---(0)------
+-----------------------0--0--0------0--0--0--0--0--0-------------------------
+-----------------------------------------------------------------------------
+
+
+
+
+                     Oh!___________________________________________He got a 
+
+
+    -P.M.-                                      -P.M-               --P.M.--
+
+----------------------------------------||---------------------|-------------
+------------3---(3)---3/5--5--5-3/5--5--||-5-----------5-------|--5----------
+--2---------2---(2)---2/4--4--4-2/4--4--||-4--4--------4---0---|--4----------
+--2---------0---(0)---------------------||----4--------2---4---|--2----------
+-----0--0-------------------------------||----2--2--2------2-2-|----2--2--2--
+----------------------------------------||---------------------|-------------
+
+
+
+
+
+ big   old  belly.________                  A stone bald    head__
+
+                                                                   (Sucker!)
+                   -P.M.-
+
+-------------|---------------------------------------7/10----10-|-(10)\------
+-------------|------------5-5--------5--5--5--7/10---7/10----10-|-(10)\------
+--4--4--4--2-|---4--------4-4--4-----4--4--4---------4/7-----7--|--(7)\------
+--4--4--4--2-|---4--------2-2--4-----2--2--2--4/7---------------|------------
+-----------2-|------2--2-------2-2------------------------------|------------
+-------------|--------------------------------------------------|------------
+
+
+
+
+           Now listen here, honey, ....
+
+
+    -P.M.-         P.M.       --P.M.--                     -P.M.-        P.M.
+
+-----------------------|-----------------------------------------------------
+-----------5--5--------|-5----------------------------------------5--5-------
+--4--------4--4--4-----|-4--------------4--4--4--2--(2)--4--------4--4-------
+--4--------2--2--4-----|-2--------------4--4--4--2--(2)--4--------2--2--4----
+--2--2--2--------2--2--|-------2--2--2-----------2--(2)-----2--2--------2--2-
+-----------------------|-----------------------------------------------------
+
+
+
+                He's just a ....
+                                              (Sucker!)
+
+                                     --P.M.--          P.M.   --P.M.--
+
+-----------------7/10----10--|-(10)\-----------------------------------------
+-5--5--5--7/10---7/10----10--|-(10)\-----------5--5---------5----------------
+-4--4--4---------4/7------7--|--(7)\-----------4--4--4--4---4----------------
+-2--2--2--4/7----------------|-----------------2--2--4--4---2----------------
+-----------------------------|--------2--2--2--------2--2------2--2--2-------
+-----------------------------|-----------------------------------------------
+
+
+
+
+   in   a   three - ...
+
+                       -P.M.-
+
+--------------|------------------------|-----------5/10----9/10----9/10------
+--------------|---------------5--------|--5--5--5--5/10----9/10----9/10------
+--4--4--4--2--|-(2)--4--------4--4--4--|--4--4--4--2/7-----6/7-----6/7-------
+--4--4--4--2--|-(2)--4--------2--4--4--|--2--2--2----------------------------
+-----------2--|-(2)-----2--2-----2--2--|-------------------------------------
+--------------|------------------------|-------------------------------------
+
+
+
+
+Sucker,__________      yeah,__          in   ...
+             
+            (Sucker!)    
+             
+  ---P.M.---                   --P.M.---                      -P.M-
+
+--------------------------|--------------------------|-----------------------
+--------------5--5--------|--5-----------------------|---------------5--5--5-
+--------------4--4--4--4--|--4-----------4--4--4--2--|-(2)--4--------4--4--4-
+--------------2--2--4--4--|--2-----------4--4--4--2--|-(2)--4--------2--2--2-
+---2-2-2---2--------2--2--|-----2--2--2-----------2--|-(2)-----2--2----------
+--------------------------|--------------------------|-----------------------
+
+
+
+
+                   S - s - s - sucker...
+                                                                        
+
+                                     ---P.M.---       P.M.     --P.M.--
+
+-8/10--10--10--10/12---11/12--||-(12)---------------------|------------------
+-8/10--10--10--10/12---11/12--||-(12)-----------8---------|--8---------------
+-5/7----7---7---7/-9----8/-9--||--(9)-----------7---7-----|--7---------------
+------------------------------||-----7----------5---7-----|--5---------------
+------------------------------||-----5--5--5--5-----5--5--|-----5--5--5------
+------------------------------||--------------------------|------------------
+
+
+
+
+
+ sugar  daddy...
+
+                        (Whoo                whoo     whoo)
+
+                       -P.M.-                    -P.M.-
+
+-------------------------------------------|-------------------------|-------
+------------------------------10--10-------|--10---------------------|-------
+-------------------------------9---9--9--9-|---9---------------------|-----7-
+---7--7--7-/-9--(9)--9---------7---7--9--9-|---7--------9--9\7/9--7--|-(7)-7-
+---5--5--5-/-7--(7)--7--7--7----------7--7-|------7--7--7--7\5/7--5--|-(5)-5-
+-------------------------------------------|-------------------------|-------
+
+
+
+
+               's' all      dressed    ....
+
+     (Sucker!)
+
+ -P.M.-           P.M.      --P.M.--
+                  
+------------------------------------------------------|----------------------
+--------8--8-------------8----------------------------|----------------------
+--------7--7---7---------7----------------------------|----------------------
+--------5--5---7---------5--------------7--9--(9)\----|----------------------
+--5--5---------5---5---------5--5--5----5--7--(7)\----|----------------------
+------------------------------------------------------|----------------------
+
+
+
+
+            suit.                                                ...
+
+                                                                 ~~~~~~~~~~~~
+------------|-------------------------------||--------------|----------------
+------------|-------------------------------||--------------|----------------
+------------|-------------------------------||-----2--------|--(2)-----------
+------------|-----------2------2------------||-----2--------|--(2)-----------
+------------|-----------2------2------------||-----0--------|--(0)-----------
+------------|-----------0------0------------||--------------|----------------
+
+
+
+ 
+
+Spoken:  That's alright go a .....
+
+
+
+              x  23 TIMES
+---------------------------------------------------------------|-------------
+---------------------------------------------------------------|-------------
+---------------------------------------------------------------|--2----------
+---------------------------------------------------------x/-x\-|--2----------
+---5h7p3p0h5------------------------------------------------x\-|--0----------
+---------------------------------------------------------------|-------------
+
+   Note:  For clarity of reading, continue this hammer-pull-pull pattern 
+          approximately 23 times in free time mode.  As well, glide gently
+          up the A string with the side of your right hand (lightly touching
+          it) while hammering and pulling, thus sounding random harmonics
+          and palm-muted notes.
+
+
+
+
+
+
+
+---------------
+Legend Notation
+---------------
+
+
+
+ h - hammer on
+
+ p - pull off
+
+ / - slide up
+
+ \ - slide down
+
+ v - indicates whammy bar dive (the step of the dive will be indicated in 
+     the tab itself
+
+ ^ - bend (followed by the degree of the bend - i.e.  ^(1) means bend up 
+     one full step)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/summer_nights.tab b/guitar/tabs/Van Halen/summer_nights.tab new file mode 100644 index 0000000..7b32757 --- /dev/null +++ b/guitar/tabs/Van Halen/summer_nights.tab @@ -0,0 +1,279 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / summer_nights.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+From: Paul D <PDMYTREWYCZ@MUSIC.TRANSY.EDU>
+
+        I saw a request for this song a while ago.  I wasn't gonna do it
+'cause I thought it was a completely impractical song to wanna know how to
+play (kinda like NIN's "Closer" or something like that) for the simple fact
+that without a very SPECIFIC kind of guitar, the song is unplayable!
+Eddie uses a Steinberger on this one.  For those of you that don't know,
+Steinbergers are those $1900 suckers that look like little boxes with a
+guitar neck comin' out of them.  Steinberger also is the only company
+(that I know of) that has what's called a Trans-Trem vibrato system.  This
+allows the guitarist to pull up or push down on the trem bar and lock it
+into place so that the pitch of the strings remain in tune, but are
+TRANSposed to a different tuning.  A wonderful invention if you ask me.
+No more tuning down 1/2 step or anything like that.  This system ALSO
+does other cool stuff:  By magic, it keeps all of the strings IN TUNE when
+you pull up or push down on the bar.  Like, you could strum an A chord
+and pull up on the bar and make it sound like a C chord.  For an example
+of this gadget at work, try listening to "Get Up" from Van Halen 5150.
+Eddie isn't sliding his fingers, he's pulling up on the fuckin' bar!  And
+then for the solo, he locks it into place a few half-steps up!
+Anyway, the only reason I decided to tab this song is 'cause I figured if
+you had a capo that was easily and quickly removed, you COULD concievably
+play this song accurately.  So whip out them capos kiddies, and put 'em
+across the 3rd fret...
+           ~~~~~~~~
+
+Tab explanation:
+everything's basically straight-forward except for a few things...
+"t" above the tab means tap that note with your picking hand
+"sl" above the tab means slide to that fret with your tapping finger
+"nh" means it's natural harmonics until the end of the "..."
+
+                               Summer Nights
+                                by Van Halen
+                               tab by Paul D.
+                         pdmytrewycz@music.transy.edu
+
+(For the sake of accuracy, I have tabbed this song as it would ACTUALLY be
+played.  With the capo on the 3rd fret, your open notes are technically
+all gonna be 3's in tab.  So until I indicate that you are to remove
+the capo, all 3's mean that you leave the string open and let the capo do
+the rest.  :)  For example, the first chord here is SUPPOSED to look like
+a standard "G" shape, but the tab looks funny because the 3rd fret is
+really your "open".  Is that confusing enough?...)
+
+w/fingers:
+||---------5-------3---|---------------------|---------5-------3---|-------
+||-6-------6-----6---6-|-6-------6p5---3-----|-6-------6-----6---6-|-------
+||-3-----3-5---5-------|-3-----3-5-------5---|-3-----3-5---5-------|-------
+||-3---3-----3---------|-3---3---5---5-----5-|-3---3-----3---------|-------
+||---------------------|-5-5-----3-----------|---------------------|-------
+||-6-6-----------------|---------------------|-6-6-----------------|-------
+
+
+----------------------|---------5-------3---|---------------||
+6-------6p5---3-------|-6-------6-----6---6-|-6---------5---||
+3-----3-5---------5---|-3-----3-5---5-------|-3-------3-5---||
+3---3---5---5---5---5-|-3---3-----3---------|-3-----3---5---||
+5-5-----3-------------|---------------------|-5---5-----3---||
+----------------------|-6-6-----------------|-6-6-----------||
+
+w/pick:
+----------------|-----------------------------|-------------------|--------
+6-6-6-6-6-6-----|-6-6-6---5-5-----------------|---6-6-6---6-6-----|--------
+3-3-3-3-5-5-----|-3-3-3---5-5-----------------|---3-3-3---5-5-----|--------
+3-3-3-3-3-3---x\|-3-3-3---5-5---3-7p5p3-------|---3-3-3---3-3---x\|--------
+----------3---x\|-5-5-5---3-3-----------7p5p3-|-----------------x\|--------
+6-6-6-6-------x\|-----------------------------|-6-6-6-6---------x\|--------
+
+
+--------------------------------|---------------------|
+6-6-6---5-5---------------------|---6-6-6-6-6-6-------|
+3-3-3---5-5---------------------|---3-3-3-3-5-5-------|
+3-3-3---5-5-----------8---------|---3-3-3-3-3-3---x\x\|
+5-5-5---3-3---3h5h6h7---7p6p5p3-|-------------3---x\x\|
+--------------------------------|-6-6-6-6-6-------x\x\|
+
+                *         [nh w/bar]
+-------------------2~~~-|-----------||
+6-6-6---5-5--------3----|-----------||
+3-3-3---5-5------2-2----|--5--/---7-||  at * return to standard
+3-3-3---5-5------2-0----|--5--/---7-||  position (remove capo)
+5-5-5---3-3------0------|-----------||
+------------------------|-----------||
+
+When you're back in standard, you're ready to begin the main part of the
+song, which has the following chord progression with a few variations:
+G D G/B A
+And it's played like so...
+  G     D       G/B   A
+|-3-3-3-------|-3-3-3---------------------|---3-3-3-----|
+|-3-3-3-3-3---|-3-3-3-2-2-----------------|---3-3-3-3-3-|
+|-0-0-0-2-2---|-0-0-0-2-2-----------------|---0-0-0-2-2-|
+|-0-0-0-0-0---|-0-0-0-2-2---0-4p2p0-------|---0-0-0-0-0-|
+|-------0-0---|-2-2-2-0-0-----------4p2p0-|---------0-0-|
+|-3-3-3-------|---------------------------|-3-3-3-3-----|
+
+                                                             w/bar
+3-3-3-------------------------|---3-3-3-----------|-3-3-3------------------
+3-3-3-2-2---------------------|---3-3-3-3-3-------|-3-3-3-2--2~~~----------
+0-0-0-2-2---------------------|---0-0-0-2-2-------|-0-0-0-2--2~~~----------
+0-0-0-2-2-----------5---------|---0-0-0-0-0-------|-0-0-0-2--2~~~----------
+2-2-2-0-0---0h2h3h4---4p3p2p0-|---------0-0-------|-2-2-2-0--0~~~----------
+------------------------------|-3-3-3-3-------x\--|------------------------
+
+
+||----------------------|-----------------------------|
+||----------------------|-----------------------------|
+||*-2-------------------|-2---------------------------|
+||*-0-4---x-2-4---------|-0-4-------------------------|
+||----2-----0-2---0h2p0-|---2-----------------x-4p2p0-|
+||----------------------|-------0h2p0-3p0-4-5---------|
+
+                                   <---[2x]
+--------------------|--------------------||--------------------------|
+--------------------|--------------------||-7/9\7/9\7---9---10---7/9-|
+2-------------------|-2-----------------*||-------------9---9----7/9-|
+0-4---x-2-4---------|-0-4---------------*||-7/9\7/9\7---9---9----7/9-|
+--2-----0-2---0h2p0-|---2----------------||-------------7---7----5/7-|
+--------------------|-------0h2p0-3/4p0--||--------------------------|
+
+
+-----------------------|------------------------------|
+7/9\7/9\7---10---9---7-|-7/9\7/9\7---9---10---7---9\--|
+------------9----9---7-|-------------9---9----7---9\--|
+7/9\7/9\7---9----9---7-|-7/9\7/9\7---9---9----7---9\--|
+------------7----7---5-|-------------7---7----5---7\--|
+-----------------------|------------------------------|
+
+
+---------------------------------|---------------------|
+-----12\11------10-----7-----6\5-|---------------------|
+---------------------------------|-2-------------------|
+0h12----11-0h10----0h7---0h6--(5)|-0-4---x-2-4---------|
+---------------------------------|---2-----0-2---0h2p0-|
+---------------------------------|---------------------|
+
+
+------------------|---------------|
+------------------|-3-----3-3-----|
+2-----------------|-2-----2-2-----|
+0-4---------------|-0-----0-0-----|
+--2---------------|---------------|
+------0h2p0-3/4p0-|---0~------2~--|
+
+                     t      t      t      t sl  t
+----------------------------------------------------||
+3-3-----3-3-3---------------------------------------||
+2-2-----2-2-2---------------------------------------||
+0-0-----0-0-----------------------------------------||
+------------2~--0h4-12p0h4-12p0h4-12p0h4-12/14\12p7-||
+----3~----------------------------------------------||
+
+Then it's back to the G D G/B A progression again for the chorus.
+Then comes the solo for which Eddie locks his Trans-Trem 1 step DOWN!
+(i.e. DON'T ASK! I'm not gonna tune my guitar 1 step down just to figure it
+out.)  Then, after the solo, Eddie brings the Trans-Trem back up to the
+FIRST position (1 1/2 steps up) and plays the little beginning part again.
+And then again back to standard for another chorus bit ("Ahhhh, summer
+nights...").
+
+For the outro, I think it's just that main chord progression with something
+like this over it...
+(let ring)
+   nh.................   nh......
+||---------------------|------------------|-------------||
+||-------12----------7-|-----7------5-----|----12-----7-||
+||----12-----------7---|---7----------6---|-12------7---||
+||-12---------12-7-----|-7-------7------7-|/12-----/7---||
+||---------------------|------------------|-------------||
+||---------------------|------------------|-------------||
+
+After that, I'm not sure, it starts to fade out and it's tough to hear.
+I guess you could just flub it from there...
+
+Good luck!
+Questions/Comments/CONSTRUCTIVE criticism welcome (by email)...
+Flames intelligently rebuked if not ignored altogether...
+Until Later, Paul D.
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/take_me_back.tab b/guitar/tabs/Van Halen/take_me_back.tab new file mode 100644 index 0000000..5a8d270 --- /dev/null +++ b/guitar/tabs/Van Halen/take_me_back.tab @@ -0,0 +1,299 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / take_me_back.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------#
+#
+[2 versions]
+From: BROCKMAN@udavxb.oca.udayton.edu
+
+Take Me Back (Deja Vu)
+Van Halen (Balance)
+
+Transcribed by:  Bob Brockman (brockman@udavxb.oca.udayton.edu)
+
+------------------------------------------------------------------------
+
+Intro. Part 1 (Strum)
+~~~~~~~~~~~~~~~~~~~~~
+
+          D   A/D  Am/D  G     (2x)
+     e|---2----0----0--------|
+     B|---3----2----1----3---|
+     G|---2----2----2----0---|
+     D|---0----0----0----0---|
+     A|----------------------|
+     E|----------------------|
+
+Intro. Part 2
+~~~~~~~~~~~~~
+
+     e|------------------2---------------------------0-----|
+     B|------------------3-------------------------3---2---|
+     G|------------------2-------------------------2---2---|
+     D|---------------0--0--2~-0-0-----------------2---2---|
+     A|---------0--2----------------------0--2-p0--0---0---|
+     E|---0--2----------------------0--2-------------------|
+
+     e|------------------2---------------------------------|
+     B|------------------3-------------------------3-3-2---|
+     G|------------------2-------------------------2-2-2---|
+     D|---------------0--0--2~-0-0-----------------2-2-2---|
+     A|---------0--2----------------------0--2-p0--0-0-0---|
+     E|---0--2----------------------0--2-------------------|
+
+
+Verse 1
+~~~~~~~
+     D           G       A      D          A  G
+     i thought i saw you ...
+     D           G         A    Asus4  A
+     i swore i'd found ...
+     D               G       A      D        A  G
+     touched on that feeli....
+     D           G    A        Asus4  A
+     could not recall ...
+
+
+{Repeat Intro. Part 2}
+
+
+Verse 2
+~~~~~~~
+     D           G      A      D     A  G
+     some desert island ...
+     D        G       A       Asus4  A
+     we had a love ...
+     D             G        A        D     A  G
+     oh so full of life, ...
+     G       D/F#           Em    A
+     another place, ...
+
+Chorus
+~~~~~~
+     G       D                         G  D/F#  Asus4  A
+     take me ...
+             G             D           G  D/F#  Asus4  A
+     i wanna be there ...
+                 G         D           G  D/F#  Asus4  A
+     it happened just ...
+               G        D              G  D/F#  Asus4  A
+     slip in a ...
+              G    D  Asus4   A         F#m
+     come on, take me ....
+
+Bridge 1
+~~~~~~~~
+     F#m           Bm     (through in Bsus2 also)
+     one soul, ...
+     F#m            D
+     one light ...
+     F#m         G
+     one love ...
+                  D       A
+     oh, come on, ....
+
+Verse 3
+~~~~~~~
+     D            G          A    D       A  G
+     some call it fate, ...
+     D            G          A       Asus4  A
+     some call it luck...
+     D               G         A     D     A  G
+     just one of the ...
+     G             D/F#             Em    A
+     somethin' you ...
+
+Chorus
+~~~~~~
+         G       D                        G  D/F#  Asus4  A
+     oh, take ...
+             G             D              G  D/F#  Asus4  A
+     i wanna be ...
+                 G         D              G  D/F#  Asus4  A
+     it happened ....
+                  G      D                G  D/F#  Asus4  A
+     i've fallin' ...
+
+Bridge 2
+~~~~~~~~
+     C   G
+     oh girl, ...
+     C             D
+     i want you to ...
+     F          C                             D  A
+     oh, i know, i know, ...
+
+Chorus
+~~~~~~
+     G       D                         G  D/F#  Asus4  A
+     take me ...
+             G             D           G  D/F#  Asus4  A
+     i wanna be ...
+                 G         D           G  D/F#  Asus4  A
+     it happened just ....
+               G        D              G  D/F#  Asus4  A
+     slip in a ...
+              G    D  Asus4   A
+     come on, take me ...
+                                        ~~ Outro starts right here...
+
+Outro
+~~~~~
+  First repeat strummed section of intro (Part 1 above).
+  Then:
+
+     e|----------|----------|--------------|---------------|
+     B|--5^--3-3-|--5^--3-3-|--5^--3-3-<3>-|--5^--3-3-<3>--|
+     G|--3^--3-3-|--2^--2-2-|--3^--3-3-----|--3^--2-2------|
+     D|----------|----------|--------------|---------------|
+     A|----------|----------|--------------|---------------|
+     E|----------|----------|--------------|---------------|
+
+     e|--------------|---------------|-----------|------------------10--|
+     B|--5^--3-3-<3>-|--5^--3-3-<3>--|--5^--3-3--|--3--5--5^6-5--3--10--|
+     G|--3^--3-3-----|--2^--2-2------|--3^--3-3--|--2--3--3^4-3--2---9--|
+     D|--------------|---------------|-----------|-------------------0--|
+     A|--------------|---------------|-----------|----------------------|
+     E|--------------|---------------|-----------|----------------------|
+
+
+TAKE ME BACK
+Van Halen
+tabbed by dsale@jax.jaxnet.com
+http://jax.jaxnet.com/~dsale
+
+Ok,i tabbed this as best as i could, from my live jacksonville disc.I figure
+why try to reproduce the studio version, just get Ed doing it live and play
+it like that.The whole thing isn't here, just everything before the verses
+start.The verses are just D,G and A anywayz, but ill finish it someday.
+
+
+
+[strum]
+
+
+                                                                        
+----5-5-5---5-----5--5---3-3---3-3--------------------------------------
+-7--7-7-5-5-6---6-6--6---5-5-5-3-3--------------------------------------
+-7--7-7-7-6-5---5-5--5---5---5-5-4--------------------------------------
+-0----0---0-0---0-0--0---0----------0-0-0-0-0-0------------------------
+------------------------------------------------------------------------
+------------------------------------------------------------------------
+                                                                        
+
+                                                                        
+                                                                        
+
+                                                                        
+------------------------------------------------------------0-----------
+------------------3-----3--3-------3---------------------3-----2--------
+------------------2-----0--0-------2---------------------2-----2--------
+------------------0-----0--2~~~p0--0---------------------2-----2--------
+-----------0h2p0---------------------------0-----2p0-----0-----0--------
+0h2--3--------------------------------0h2-------------------------3-----
+                                                                        
+
+                                                                        
+--------------------------------------------------------0---------------
+-----------------------3----3--3------3--------------3----3--2----------
+---2-------------------2----0--0------2--------------2-------2----------
+---2-------------------0----0--2~~~p0-0--------------2-------2----------
+---0------------0h2p0------------------------0-2p0---0-------0----------
+^---------0h2-3---------------------------0h2---------------------------
+                                                                        
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/top_of_the_world.tab b/guitar/tabs/Van Halen/top_of_the_world.tab new file mode 100644 index 0000000..a2e8483 --- /dev/null +++ b/guitar/tabs/Van Halen/top_of_the_world.tab @@ -0,0 +1,112 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / top_of_the_world.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+                  TOP OF THE WORLD (F.U.C.K) - VAN HALEN
+
+                         Tabbed by Rutger Tuller
+                       Rutger.Tuller@cs.utwente.nl
+
+This is the intro of the great song,  when I get some free time I'll might
+tab the rest. But this should give you a good start
+
+
+|--0--------0--------0---|-------0-----0--------0|-------0-----0-----0--0---|
+|--5--5--5--4--4--5--2---|-2--2--5--5--4--4--0--0|-0--0--5--5--4--4--5--5---|
+|------------------------|-----------------------|-------
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/unchained.tab b/guitar/tabs/Van Halen/unchained.tab new file mode 100644 index 0000000..033a815 --- /dev/null +++ b/guitar/tabs/Van Halen/unchained.tab @@ -0,0 +1,233 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / unchained.tab / [Click Here For A Printer Friendly Copy]
#-----------------------------PLEASE NOTE-------------------------------------#
+#This OLGA file is the author's own work and represents their interpretation  #
+#of the song. You may only use this file for private study, scholarship, or   #
+#research. Remember to view this file in Courier, or some other monospaced    #
+#font. See http://www.olga.net/faq/ for more information.                     #
+#-----------------------------------------------------------------------------#
+
+From: "Dan Scheraga" <danscheraga@hotmail.com>
+Subject: v/van_halen/unchained.tab
+Date: Sat, 13 Oct 2001 20:22:19 -0400
+
+- File created with Instab - http://www.pconline.com/~smcarey/instab.html -
+
+Author/Artist: Van Halen
+Title: Unchained
+Album: Fair Warning
+Transcribed by: Dan Scheraga & Nowhere Man
+Email: danscheraga@hotmail.com, v201lrxa@ubvmsb.cc.buffalo.edu
+
+Okay. Here's another kick ass 80's classic for you to enjoy.
+
+First, some notes: This is not the first submission of Unchained to OLGA.
+In 1992, there was a submission by v201lrxa@ubvmsb.cc.buffalo.edu but it
+contained only the main riff. The tab is pretty close, but not 100%
+accurate, so I made some corrections. The original submission is attached
+in its entirety at the end of this file.
+
+Now on to the fun stuff. First of all, you've got to tune your guitar down
+a half step. I haven't managed to duplicate Eddie's effects, but I know
+there's some phaser on the main chorus riff.
+
+Okay. Here's the main chorus riff that starts the song. Incidentally, it
+happens to be one of the baddest guitar riffs ever written, so pay
+attention:
+
+-2--3------------------------------------
+-3--3----------------3--4-3----5--6-5----
+-2--2----------------3--3-3----5--5-5----
+-0--0----------------3--3-3----5--5-5----
+-----------------------------------------
+------0x-0x-0x-0x-0x--------0x--------0x-
+
+-2--3----------------5--6-5-------------
+-3--3----------------6--6-6---6-5-------
+-2--2----------------5--5-5---5-5-------
+-0--0-----------------------0-5-5-------
+----------------------------------------
+------0x-0x-0x-0x-0x--------------0x-0x-
+
+
+Now for the verse. Repeat this twice.....
+
+------------------------------------------------------------------
+-----------------------------------------------------10-10---8----
+----------------------3------5--------------------/7-------9---7--
+--------------------3----------5----------------------------------
+-3-5----3-------3/5-----5-/7-------3-5----3-----------------------
+-----0x---0x-0x------------------------0x---0x-0x-----------------
+
+..and then go onto this for the "blue-eyed murder in a sapphire dress"
+part.....
+
+--------------------------------------------------------------------
+--------------------------------------------------------------------
+-7-7----7\5/7------7-7---7\5/7-------9-9---9\7/9-----9-9------------
+-5-5----5\3/5------5-5---5\3/5-------7-7---7\5/7-----7-7------------
+--------------------------------------------------------------------
+-----3--------3-1------3-------3-/5------5-------5-3-----3/5-4-3-1--
+
+
+Now for the solo. Whammied notes are signified with w's, tapped
+notes with t's. The 5^ note is an artificial harmonic created with the
+thumb of your picking hand. Gaze skyward, whisper a quick prayer to
+the gods of rock and roll, and attempt this. :
+
+-------22w20-----------------------------------------------
+-20w18-----------------------------------------------------
+-----------------t12p5h7t12p5h7t12p5h7t125b7r5p3p0-5^-p3p0-
+-------------3/5-------------------------------------------
+-----------------------------------------------------------
+-----------------------------------------------------------
+
+13p10-13p10-13p10--13p10-13w12b15-12-13-14-15p14p12----------12-------
+----------------------------------------------------15-13b14----13----
+-------------------------------------------------------------------14-
+----------------------------------------------------------------------
+----------------------------------------------------------------------
+----------------------------------------------------------------------
+
+
+-17-15-b17r15b17r15----19-17-20-19-20b22r20b22--
+--------------------17--------------------------
+------------------------------------------------
+------------------------------------------------
+------------------------------------------------
+------------------------------------------------
+
+Don’t worry, I can’t play it like Eddie does, either.
+All that's really left of the song is the interlude near the end (C'mon,
+Dave, give us a break!) I didn't bother tabbing out the whole thing
+because there isn't much to it, but basically it starts with Eddie
+sliding up to a G#...
+
+------
+-/10--
+------
+------
+------
+------
+
+...then playing a smooth descending thing, then playing around with
+these two shapes (pluck 'em with your fingers)....
+
+-3- -2-
+-3- -3-
+--- ---
+--- ---
+--- ---
+--- ---
+
+...then he moves down to these shapes:
+
+--- ---
+--- ---
+--- ---
+-5- -7-
+-5- -5-
+--- ---
+
+
+A lot of this song is in the attitude, so play with truckloads of it. Play
+it hard, and pay attention to the notes that Eddie cuts short for a nice
+staccato effect. Not much else to it, except to rock your ass off.
+
+Enjoy!
+Dan Scheraga
+Brooklyn, NY
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/you_really_got_me.tab b/guitar/tabs/Van Halen/you_really_got_me.tab new file mode 100644 index 0000000..a531e88 --- /dev/null +++ b/guitar/tabs/Van Halen/you_really_got_me.tab @@ -0,0 +1,337 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / you_really_got_me.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE--------------------------------#
+#This file is the author's own work and represents their interpretation of the#
+#song. You may only use this file for private study, scholarship, or research.#
+#-----------------------------------------------------------------------------#
+
+Date: Thu, 30 Apr 1998 15:36:21 EDT
+From: Aneminas <Aneminas@aol.com>
+Subject: v/van_halen/you_really_got_me.tab
+
+Author/Artist: Van Halen
+Title: You Really Got Me
+Album: Van Halen
+Transcribed by: Sean
+Email: Aneminas
+
+Tune Guitar half step down, Enjoy!
+
+----|-------------------------|-----------------------------------------------
+----|-------------------------|-----------------------------------------------
+----|-2--2-----2------2/------|-2--2-----2---x--x--x--------------------------
+----|-2--2-----2------2/------|-2--2-----2---x--x--x--------------------------
+----|-0--0-----0--------------|-0--0-----0------------------------------------
+-3--|-------3-------------3---|-------3----------------3----------------------
+                                                                         
+
+-|----------------------------|--------------------|--------------------------
+-|----------------------------|--------------------|--------------------------
+-|-2--2-----2----x--x--x------|-2--2-----2---x-x-x-|-2--2---------------------
+-|-2--2-----2----x--x--x------|-2--2-----2---x-x-x-|-2--2---------------------
+-|-0--0-----0-----------------|-0--0-----0---------|-0--0---------------------
+-|-------3-----------------3--|-------3------------|-------3^b--3--3^\15-15\--
+   Intro                                                                 
+
+----------------|-----------------|-----------------------|-------------------
+----------------|-----------------|-----------------------|-------------------
+-2--2-----2-----|-2--2-----2------|-2--2-----2------4^b^4-|-------------------
+-2--2-----2-----|-2--2-----2---x--|-2--2-----2---x--------|-------------------
+-0--0-----0-----|-0--0-----0---x--|-0--0-----0------------|-------------------
+-------3-------3|-------3--------3|-------3---------------|-------------------
+                                                                         
+
+-------------------------|-----------------|-----------------|----------------
+-------------------------|-----------------|-----------------|----------------
+-4^b-2-------------------|-2--2----2-------|-2--2----2-------|----------------
+-------3^b--3-2----------|-2--2----2----x--|-2--2----2---x---|----------------
+----------------3^b---3-2|-0--0----0----x--|-0--0----0---x---|----------------
+-------------------------|-------3--------3|-------3--------3|----------------
+                                                                         
+
+---------------------------------------------|--------------------------------
+---------------------------------------------|--------------------------------
+-2--2----2----7b--7^5--7b--------------------|--------------------------------
+-2--2----2------------------5b--7------------|--------------------------------
+-0--0----0-------------------------5b--7--3\5|--------------------------------
+-------3-------------------------------------|--------------------------------
+         verse                                                           
+
+-|-------------------|---------------|------------------------|---------------
+-|-------------------|---------------|------------------------|---------------
+-|-4--4-----4--------|-4--4-----4----|------------------------|---------------
+-|-4--4-----4---x----|-4--4--4--4---4|-4--4-4--4--4h\7-7--8--8|---------------
+-|-2--2--0--2---x--0-|-2--2--0--2---0|-2--2-0--2--2\-5-5--6--6|---------------
+-|-------------------|---------------|------------------------|---------------
+              pre chorus                                                 
+
+-|--------------------|---------------------|---------------------------------
+-|--------------------|---------------------|---------------------------------
+-|-9--9--7--9--9\----7|-9--9--7--9---9\----7|-9--9--7--9--9\--x---------------
+-|-9--9--7--9--9\----7|-9--9--7--9---9\----7|-9--9--7--9--9\--x---------------
+-|-7--7--5--7--7\----5|-7--7--5--7---7\----5|-7--7--5--7--7\--x-5-5-----------
+-|--------------------|---------------------|---------------------------------
+                                                                         
+
+-|-----------------------------|-------------------|--------------------------
+-|----------x-x-----------7--7-|-------------------|--------------------------
+-|-9--9--7--x-x-----------7--7-|-9--9--7---9b----9-|-9--9--7--9---9\--x-x-----
+-|-9--9--7--x-x--------2--7--7-|-9--9--7-----------|-9--9--7--9---9\--x-x-----
+-|-7--7--5----------------5--5-|-7--7--5-----------|-7--7--5--7---7\--x-x-----
+-|--------------0-3b-----------|-------------------|-----------------------0--
+                                                                         
+
+-------------|---------------------|-----------------|---------------|--------
+-7---------x-|-x/------------------|-----------------|---------------|--------
+-7---------x-|-x/---x\\-x\---------|-----------------|---------------|--------
+-7-----------|------x\\-x\---------|-2--2-----2------|-2--2----2-----|--------
+-5-----------|------x\\-x\-----^---|-0--0-----0------|-0--0----0-----|--------
+-------------|---------------12/15\|-------3--------3|-------3------3|--------
+  chorus                                 2nd verse                       
+
+-|------------------|---------------------------|-----------|-----------------
+-|------------------|-----^^^-------------------|-----------|-----------------
+-|--------------9b--|-9--7-9-7\6----------------|-----------|-----------------
+-|-2--2-----2-------|-------------7-------------|-2----2----|-2--2-----2------
+-|-0--0-----0-------|----------------7--------^-|-0----0----|-0--0-----0------
+-|-------3----------|-------------------9b---9\4|----3-----3|-------3------3--
+                                                                         
+
+-|-----------------^----|----^------^-^-----^-^-^----^------|-----------------
+-|---------------5-8-5--|-9\-8-5--9\--8-5--9-5-8-5--9-5--9\-|-----------------
+-|-------------x--------|-----------------------------------|-4--4-----4------
+-|-2--2----2------------|-----------------------------------|-4--4-----4------
+-|-0--0----0------------|-----------------------------------|-2--2--0--2---0--
+-|-------3--------------|-----------------------------------|-----------------
+                                                               pre chorus
+
+-|-------------------|------------------|---------------------|---------------
+-|-------------------|------------------|---------------------|---------------
+-|-------------------|------------------|-----------------7--8|---------------
+-|-4--4--4--4------4-|-4--4--4--4-------|-4--4--4--4---4/-7--8|---------------
+-|-2--2--0--2------0-|-2--2--0--2-----0-|-2--2--0--2---2/-5--6|---------------
+-|-------------------|------------------|---------------------|---------------
+                                                                         
+
+-|---------------------|----------------------|-----------------------|-------
+-|-9--9--7--9---9\---7-|-9--9--7--9---9\----7-|-9--9--7--9---9\-----7-|-------
+-|-9--9--7--9---9\---7-|-9--9--7--9---9\----7-|-9--9--7--9---9\-----7-|-------
+-|-9--9--7--9---9\---7-|-9--9--7--9---9\----7-|-9--9--7--9---9\-----7-|-------
+-|-7--7--5--7---7\---5-|-7--7--5--7---7\----5-|-7--7--5--7---7\-----5-|-------
+-|---------------------|----------------------|-----------------------|-------
+ Chorus                                                                  
+
+-|--------------------|----------------|--------------------------|-------|---
+-|-9--9--7--9---9\---7|-9\-------------|-9--9--7--9----9\---------|-7-----|---
+-|-9--9--7--9---9\---7|-9\-------------|-9--9--7--9----9\---x-----|-7-----|---
+-|-9--9--7--9---9\---7|-9\-------------|-9--9--7--9----9\---x-----|-7-----|---
+-|-7--7--5--7---7\---5|-7\-------------|-7--7--5--7----7\---x-----|-5-----|---
+-|--------------------|------x-x-3-5--2|-----------------------12\|-------|---
+                                                                         
+
+-|-----^---------|-5---5--5------5--5---5--------5--5--5|-----5---------------
+-|--x\---x----5b-|-5---5--5------5--5---5--------5--5--5|-----5---^--^--------
+-|--x\---x----7b-|-----------7b-------------7b----------|-7b----7b--7-5-7b----
+-|--x\---x-------|--------------------------------------|---------------------
+-|---------------|--------------------------------------|---------------------
+-|---------------|--------------------------------------|---------------------
+                   guitar solo                                           
+
+-----^------^-------^-------^-------^-------^--------^--------^-------^-------
+-x--5-8--10-5-8--10-5-8--10-5-8--10-5\4--10-7-4--10-7-4-3--10-6-3--10-6-3-----
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                         
+
+-------------|---------------------17----|-------------17--------17----^------
+-10^2--------|------------^----^------20b|-20b--20--20----20b-20-----20-17----
+-------4b---4|-9b--9^4---4-2--2/18-------|------------------------------------
+-------------|---------------------------|------------------------------------
+-------------|---------------------------|------------------------------------
+-------------|---------------------------|------------------------------------
+                                                                         
+
+-----------------------------------|------------------------------^-----------
+----17----------^---------------17b|-17--17b--17--17b-----17b---17-14---------
+-19----19b----19-17--19------14----|-----------------------------------17-----
+-------------------------/16-------|------------------------------------------
+-----------------------------------|------------------------------------------
+-----------------------------------|------------------------------------------
+                                                                         
+
+-----------------------|------|--------------------|------------------------|-
+-----------------------|------|--------------------|------------------------|-
+-17b--14--------14-----|-9b--9|-----------9---9-9-9|-9-9-9-9-9-9-9-9-9-9-9-9|-
+-----------------------|------|--------------------|------------------------|-
+---------15-16--------x|------|--------------------|------------------------|-
+----------------------x|------|--------------------|------------------------|-
+                                                                         
+
+------------|---------------------|------------------|------------------|-----
+------------|---------------------|------------------|------------------|-----
+-x\---------|---------------------|------------------|------------------|-----
+-x\---------|---------------------|------------------|------------------|-----
+-x\---------|---------------------|------------------|------------------|-----
+---------15\|---------------------|------------------|------------------|-----
+              breakdown                                                  
+
+---------|-------------|-----------|--------------|---------------------------
+---------|-------------|-----------|---^----------|---------------------------
+---5-----|-------------|-----------|-x/x\x\-------|---------------------------
+-----5--7|-------------|-----------|-x/x\x\-------|---------------------------
+---------|-------------|-----------|-x/x\x\----^--|---------------------------
+---------|-------------|-----------|---------12/14|---------------------------
+                                                                         
+
+-|------------------|-------------------|------------------|------------------
+-|------------------|-------------------|------------------|------------------
+-|------------------|-------------------|------------------|------------------
+-|-4--4--4--4------4|-4--4--4--4-------4|-4--4--4--4------4|------------------
+-|-2--2--0--2------0|-2--2--0--2-------0|-2--2--0--2------0|------------------
+-|------------------|-------------------|------------------|------------------
+   pre chorus                                                            
+
+-------------------|--------------------|----------------------|--------------
+----------------2-3|--------------------|-9--9--7--9---9\-----7|--------------
+----------------0-1|-------------------7|-9--9--7--9---9\-----7|--------------
+-4--4--4--4--------|-9--9--7--9--9\----7|-9--9--7--9---9\-----7|--------------
+-2--2--0--2--------|-7--7--5--7--7\----5|-7--7--5--7---7\-----5|--------------
+-------------------|--------------------|----------------------|--------------
+                       chorus                                            
+
+--------------------------|---------------------------|--------------------|--
+-9--9--7--9----9\--------7|-9---7---------------------|-9---9--7----------7|--
+-9--9--7--9----9\--x--x--7|-9---7-----------------7--7|-9---9--7----------7|--
+-9--9--7--9----9\--x--x--7|-9---7-------------2---7--7|-9---9--7----------7|--
+-7--7--5--7----7\--x--x--5|-7---5-----^-----------5--5|-7---7--5--7b------5|--
+--------------------------|---------12\0--3b----------|--------------------|--
+                                                                         
+
+-------------------|-------------|-12------12-----^-------------^----12-------
+-9--9--------------|-9--9--9---12|----15b-----12\15\12------12\15\12----------
+-9--9--x---9b------|-9--9--9---12|----------------------15--------------------
+-9--9--x-----------|-9--9--9---12|--------------------------------------------
+-7--7--x-----------|-7--7--7----x|--------------------------------------------
+------------------0|-0--0--0----0|--------------------------------------------
+                       outro                                             
+
+-----^------------------------------------------------------------------------
+-12\15\12----12------^-----------------^--------------------------------------
+----------16----15-14-12----14-----11\12\11----11-------------^---------------
+-------------------------14----14-----------14-----12-14--11\12\11----11------
+-------------------------------------------------------------------14---------
+------------------------------------------------------------------------------
+                                                                         
+
+-----------------|-----------------------|------------------------------------
+-----------------|-----------------------|------------------------------------
+-----------------|-----------------------|------------------------------------
+---^---^-^-^--^--|-----------------------|------------------------------------
+--12\11\9\7\5\\2b|-2---------------------|------------------------------------
+-----------------|-0---------------------|------------------------------------
+                                                                         
+
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+------------------------------------------------------------------------------
+                                                                         
+
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/tabs/Van Halen/youre_no_good.tab b/guitar/tabs/Van Halen/youre_no_good.tab new file mode 100644 index 0000000..a14fb12 --- /dev/null +++ b/guitar/tabs/Van Halen/youre_no_good.tab @@ -0,0 +1,236 @@ + + +Archive Browser + + + + + +
+ +
+
+ +About OLGA
+Shop
+FAQs
+Community
+ + + + +
Find Tab
+
+ + +
+ + + + +
Browse The Archive
+ + + + + + + + + +
Guitar Tab
Everything
Classical
All Resources
Lessons
Construction
+ +
+

Don't know the chords? Check out ... The LARGE Chord Dictionary

+

+ or use the chord +generator,
thanks to Jim Cranwell. +or here +if above doesn't work. +

+For tab files, read the...
+Guide To Reading +Tablature +

+ +
+
+ +
+ + + + + +
+ +
Archive Browser
+ + +
+ + +
/main / v / van_halen / youre_no_good.tab / [Click Here For A Printer Friendly Copy]
#----------------------------------PLEASE NOTE---------------------------------#
+#This file is the author's own work and represents their interpretation of the #
+#song. You may only use this file for private study, scholarship, or research. #
+#------------------------------------------------------------------------------##
+YOUR NO GOOD
+
+Van Halen II
+Tabbed by dsale@jax.jaxnet.com
+Aug 29/95
+
+OK i was looking through da' web pages and havent seen this anywhere on the
+net, so, what the heck, im real bored right now,its raining,im not leaving
+the house.
+
+*Any suggestions/compliments/questions lemme know.Any requests lemme know.
+any particular lick (like, 'how does ed do this in this song') lemme know.
+
+*Alot of the tap/hammer ons i have just thrown in parenthesis because i do
+not like typing t above every little one.Youll get the point.
+
+ok.
+
+
+first the intro.
+
+
+---------------------------------------|
+-13--------12----------7---------------|
+-14--------12----------7-----5---\-----|
+-14--------12----------7-----5---\-----|
+--0------------------------------------|
+---------------------------------------|
+  ^swell w/volume control
+
+now that thing that repeats during the verses.
+
+-------------------------------------------------|
+---------------------------------------^---------|
+---------5-----7---------------------7-8-7-5-----|
+---------5-----7------5-------5------7-8-7-5-----|
+--5--7---5--xx-5------5--7----5--x-x-------------|
+--5--5----------------5--5-----------------------|
+
+
+repeat,improvise on it,im sure ed didnt play it exactly the same way
+every time,you shouldnt either.anywayz.the pre-chorus
+
+-------------------------3-----------------------------------------------|
+-------------------------3----------------5-------------------------0----|
+10-------------7--------------------------5----------------------2-------|
+10-----^-----9----9-----------------------5-------------------2----------|
+-8----8-10----------8---------------------3------3--2--1---0-------------|
+-------------------------------------------------------------------------|
+ (i learned my lesson baby, And it left a scar.)             (But now i..
+
+---------0--------------------|
+-------3----------------------|
+-----2------------------------|
+---0----------2--2--2---------|
+--------------2--2--2---------|
+--------------0--0--0--\------|
+              (really are.)
+
+Chorus.
+
+      (full)                     (full)
+--/---/---/----------------------/--/-------------------------------------|
+--20--20--20--------------------20--20------------------------------------|
+----------------------5--7---------------5-7--5-(7-8-7-5)-------5--7------|
+----------------------5--7---------------5-7----(7-8-7-5)-------5--7------|
+-------------------0----------------------------------------0-------------|
+--------------------------------------------------------------------------|
+ YA  NO GOOD!
+
+                   t       p          full------------>
+---------full-\----------------------/----t-------------------------------|
+--------/-------/-------^------\---/---------------^----------------------|
+------7------------12------7-----\--------10---10-----7-------------------|
+---------------------------------------------------------\----------------|
+--------------------------------------------------------------------------|
+--------------------------------------------------------------------------|
+     Ooh,                yeah
+
+
+now the solo.
+
+ a.h.(full)------\                   reverse
+                                     rake   *
+------------------->---------------------------------------------------------|
+--7--------------------------------------------------------------------------|
+--7----------------------5---5------(0)----(--------------------------------)|
+----------------------7----------7----(0)--(4-2--0-4-2--0-4-2--0-4-2--0-2-0-)|
+----------------------------------------(0)(--------------------------------)|
+-----------------------------------------------------------------------------|
+                                           *Glide up and down D stg. w/side
+                                            of right hand (lightly touching
+                                            it) while hammering on and pull-
+                                            ing off with left hand,sound ran-
+                                            dom harmonics and muted notes.
+    (full,bring back down)
+-----------------------------------------------------------------------|
+-----------------------------------------------------------------------|
+--7-----------x--------5--5--------------------------------------------|
+--------------x--x--7--------7--(7-0-5)-(7-3-0)------------------------|
+-------------------------------------------------5--(7-3)--------------|
+-----------------------------------------------/---------(5-3)-0---7---|
+                                                        /     /    sl.
+
+----------------------------------------------------------------------------|
+----------------------------------------(13-8)-(13-8-5-8)-(15-8)-(15-8-5-8)-|
+---------------------(12-5-7)-(12-5-8)--------------------------------------|
+-----------(12-5-7)---------------------------------------------------------|
+--(12-5-7)------------------------------------------------------------------|
+----------------------------------------------------------------------------|
+
+
+
+----------------------------------------------------------------------------|
+-(13-8)-(13-8-5-8)-(12-8)-(12-8-5-8)-(13-8)-(13------8-5-8)-(12-8)-(12-8-5-8)
+----------------------------------------------------------------------------|
+----------------------------------------------------------------------------|
+----------------------------------------------------------------------------|
+----------------------------------------------------------------------------|
+                                     full         t
+-----/-full--------\---sl.--------------------/-----------------t----------|
+--12--------(12-8)---13------------/------\--/----------------------(full)-|
+---------------------------------7----------------12---(12-10)--15---------|
+---------------------------------------------------------------------------|
+-----------------------------0---------------------------------------------|
+---------------------------------------------------------------------------|
+
+
+Outro
+                                    *(full)
+-------------------------------------------------------------------------|
+--------------0------------12---13----15---------------------------------|
+--------------0----5-----[*14---15----17]--------------------------------|
+--2-(0-2-0)---0----5--2--------------------------------------------------|
+--0-------------------0--------------------------------------------------|
+--------------3----------------------------------------------------------|
+
+
+
+
+
Copyright (c) 2001 by OLGA, Inc.
+ + + diff --git a/guitar/temporary.lic b/guitar/temporary.lic new file mode 100644 index 0000000..2c59921 --- /dev/null +++ b/guitar/temporary.lic @@ -0,0 +1 @@ +6'`5Y>'T:>GAX>GA\>7!X>7MX>'LL+0`` diff --git a/guitar/uutool.cpp b/guitar/uutool.cpp new file mode 100644 index 0000000..18cd678 --- /dev/null +++ b/guitar/uutool.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +String UUTool::encode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + int byteCount; + + if(!stringLength)return String(); + String lineString; + char *ptrLine=lineString.str(); + *(ptrLine++)=chEncode(stringLength); + for(ptrBuff=strLine.str(),byteCount=stringLength;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + } + return lineString; +} + +String UUTool::decode(String strLine) +{ + int stringLength=strLine.length(); + char *ptrBuff; + char *ptrLine; + int byteCount; + int n; + char ch; + + if(!stringLength)return String(); + String lineString; + ptrLine=lineString.str(); + ptrBuff=strLine.str(); + n=chDecode(*(ptrBuff)); + if(n<=0)return String(); + for(++ptrBuff;n>0;ptrBuff+=4,n-=3) + { + if(n>=3) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + *(ptrLine++)=ch; + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + *(ptrLine++)=ch; + } + else + { + if(n>=1) + { + ch=chDecode(ptrBuff[0])<<2|chDecode(ptrBuff[1])>>4; + (*ptrLine++)=ch; + } + else if(n>=2) + { + ch=chDecode(ptrBuff[1])<<4|chDecode(ptrBuff[2])>>2; + (*ptrLine++)=ch; + } + else if(n>=3) + { + ch=chDecode(ptrBuff[2])<<6|chDecode(ptrBuff[3]); + (*ptrLine++)=ch; + } + } + } + return lineString; +} + diff --git a/guitar/uutool.hpp b/guitar/uutool.hpp new file mode 100644 index 0000000..55f5595 --- /dev/null +++ b/guitar/uutool.hpp @@ -0,0 +1,44 @@ +#ifndef _GUITAR_UUTOOL_HPP_ +#define _GUITAR_UUTOOL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#include + +class String; + +class UUTool +{ +public: + static String encode(String strLine); + static String decode(String strLine); +private: + UUTool(void); + virtual ~UUTool(); + static BYTE chEncode(int ch); + static BYTE chDecode(int ch); +}; + +inline +UUTool::UUTool(void) +{ +} + +inline +UUTool::~UUTool() +{ +} + +inline +BYTE UUTool::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} + +inline +BYTE UUTool::chDecode(int ch) +{ + return (ch-' ')&0x3F; +} +#endif diff --git a/guitar/viewwnd.cpp b/guitar/viewwnd.cpp new file mode 100644 index 0000000..8e41816 --- /dev/null +++ b/guitar/viewwnd.cpp @@ -0,0 +1,551 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ViewWindow::ViewWindow(void) +: mIsInRepeatPlay(false) +{ + mCreateHandler.setCallback(this,&ViewWindow::createHandler); + mSizeHandler.setCallback(this,&ViewWindow::sizeHandler); + mPaintHandler.setCallback(this,&ViewWindow::paintHandler); + mLeftButtonDoubleHandler.setCallback(this,&ViewWindow::leftButtonDoubleHandler); + mThreadHandler.setCallback(this,&ViewWindow::threadHandler); + mCloseHandler.setCallback(this,&ViewWindow::closeHandler); + mRightButtonDownHandler.setCallback(this,&ViewWindow::rightButtonDownHandler); + MDIWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + MessageThread::insertHandler(&mThreadHandler); + start(); +} + +ViewWindow::~ViewWindow() +{ + MDIWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + MDIWindow::removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); + MDIWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(VectorHandler::RightButtonDownHandler,&mRightButtonDownHandler); + stop(); +} + +CallbackData::ReturnType ViewWindow::createHandler(CallbackData &someCallbackData) +{ + mTabPage=::new TabPage(*this); + mTabPage.disposition(PointerDisposition::Delete); + setTitle(STRING_NOTITLE); + return false; +} + +CallbackData::ReturnType ViewWindow::closeHandler(CallbackData &someCallbackData) +{ + mTabPage->setCancelled(true); + if(mTabPage->isDirty()) + { + LRESULT result=MessageBox::messageBox(*this,"Project has changed.","Save changes?",MB_YESNOCANCEL); + if(IDCANCEL==result)return true; + else if(IDNO==result) + { + mTabPage->isDirty(false); + return false; + } + else + { + saveProject(); + mTabPage->isDirty(false); + return false; + } + } + return false; +} + +CallbackData::ReturnType ViewWindow::rightButtonDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("ViewWindow::rightButtonDownHandler"); + + PureMenu popupMenu(PureMenu::PopupMenu); + GDIPoint trackPoint; + trackPoint.x(someCallbackData.loWord()); + trackPoint.y(someCallbackData.hiWord()); + clientToScreen(trackPoint); + if(mTabPage->isInPlay()) + { + popupMenu.appendMenu(MENU_TABLATURE_STOP,"&Stop"); + } + else + { + popupMenu.appendMenu(MENU_TABLATURE_PLAY,"&Play"); + popupMenu.appendMenu(MENU_TABLATURE_PLAYREPEATED,"Play (&Repeated)"); + if(mTabPage->hasRange()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE,"Play R&ange..."); + popupMenu.appendMenu(MENU_TABLATURE_PLAYRANGE_REPEATED,"Play Rang&e (Repeated)..."); + } + if(mTabPage->isInOutline()) + { + popupMenu.appendMenu(MENU_TABLATURE_PLAYTOEND,"P&lay From Here"); + if(!mTabPage->isInSetRange()) + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETSTARTRANGE,"S&tart Range"); + } + else + { + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_SETENDRANGE,"&End Range"); + } + popupMenu.appendSeparator(); + popupMenu.appendMenu(MENU_TABLATURE_ENTRYPROPS,"&Properties..."); + } + } + popupMenu.trackPopupMenu(*(getFrame()),trackPoint); + ::SetCursorPos(trackPoint.x(),trackPoint.y()); + return false; +} + +CallbackData::ReturnType ViewWindow::sizeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::paintHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType ViewWindow::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + return false; +} + +// ************************************************************************************************ + +bool ViewWindow::insert(const TabEntry &entry) +{ + return mTabPage->insert(entry); +} + +bool ViewWindow::insert(const TabEntries &entries) +{ + if(!mTabPage->insert(entries))return false; + invalidate(); + mTabPage->isDirty(true); + return true; +} + +void ViewWindow::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String ViewWindow::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +void ViewWindow::play(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playFromCurrent(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayFromCurrent); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRepeated(void) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); + return; +} + +void ViewWindow::playRange(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::playRangeRepeated(int rangeIndex) +{ + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + enablePlaySelect(false); + isInRepeatPlay(true); + MessageThread::postMessage(thMessage); +} + +void ViewWindow::stopPlay(void) +{ + isInRepeatPlay(false); + mTabPage->setCancelled(true); +} + +void ViewWindow::modifyProperties(void) +{ + mTabPage->modifyProperties(); +} + +void ViewWindow::increaseTempo(void) +{ + mTabPage->increaseTempo(); +} + +void ViewWindow::decreaseTempo(void) +{ + mTabPage->decreaseTempo(); +} + +void ViewWindow::enablePlaySelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + if(enable) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYREPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } +} + +void ViewWindow::enableCut(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_CUT,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enableCopy(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_COPY,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +void ViewWindow::enablePaste(bool enable) +{ + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_EDIT_PASTE,PureMenu::ByCommand,enable?PureMenu::InsertFlags(PureMenu::ItemEnabled):PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::getEnableCut(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_CUT,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnableCopy(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_COPY,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +bool ViewWindow::getEnablePaste(void) +{ + UINT state; + PureMenu &pureMenu=getMenu(); + state=pureMenu.getMenuState(MENU_EDIT_PASTE,PureMenu::ByCommand); + return !((state&MF_GRAYED)||(state&MF_DISABLED)); +} + +void ViewWindow::enableStopSelect(bool enable) +{ + PureMenu &pureMenu=getMenu(); + + if(enable)pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + else pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); +} + +bool ViewWindow::createProject(const String &strPathTabFile) +{ + if(Profile::verifyPathFileName(Tablature::getPathFileProject(strPathTabFile))) + { + String strMessage=String("Project '")+Tablature::getPathFileProject(strPathTabFile)+String("' already exists, overwrite?"); + if(IDCANCEL==MessageBox::messageBox(*this,"Warning",strMessage,MB_OKCANCEL))return false; + } + if(!mTablature.import(strPathTabFile)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,"Load Tablature","Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,"Load Tablature","File contained no valid tablatures.",MB_OK); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,"Load Tablature","File contained tablatures, but none of them were parsed."); + return false; + default : + MessageBox::messageBox(*this,"Load Tablature","Error creating project."); + return false; + } + } + setTitle(mTablature.getPathFileProject()); + saveProject(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + return true; +} + +bool ViewWindow::createProject(void) +{ + show(SW_SHOW); + top(); + setTitle(STRING_NOTITLE); + PureMenu &pureMenu=getMenu(); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + invalidate(); + mTabPage->isDirty(true); + return true; +} + +bool ViewWindow::openProject(const String &pathFileName) +{ + if(!mTablature.openProject(pathFileName)) + { + switch(mTablature.getLastError()) + { + case Tablature::FileOpenError : + MessageBox::messageBox(*this,pathFileName,"Referenced tablature could not be opened."); + return false; + case Tablature::NoTabsParsedError : + MessageBox::messageBox(*this,pathFileName,"File contained no valid tablatures."); + return false; + case Tablature::NoFrettedNotesError : + MessageBox::messageBox(*this,pathFileName,"Warning, No tablatures were found in the file.\nYou can insert tablature by using the Insert key."); + } + } + PureMenu &pureMenu=getMenu(); + show(SW_SHOW); + top(); + mTabPage->insert(mTablature.getTabEntries(),false); // don't set the dirty flag when loading + if(mTabPage->insert(mTablature.getTabRanges(),false)) // don't set the dirty flag when loading + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + setTitle(mTablature.getPathFileProject()); + pureMenu.enableMenuItem(MENU_TABLATURE_STOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + return true; +} + +bool ViewWindow::getProjectName(String &strPathFileProject) +{ + OpenDialog openDialog; + + if(!openDialog.getSaveFileName(*this,"Project Files","Project Save",String(STRING_PRJALLEXTENSION),strPathFileProject))return false; + if(!strPathFileProject.strstr(String(STRING_PRJEXTENSION)))strPathFileProject+=String(STRING_PRJEXTENSION); + return true; +} + +bool ViewWindow::saveProject(const String &pathFileName) +{ + bool returnCode=false; + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(pathFileName); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +bool ViewWindow::saveProject(void) +{ + bool returnCode=false; + + if(getTitle()==String(STRING_NOTITLE)) + { + Registry registry; + String strPathFileProject; + if(!getProjectName(strPathFileProject))return false; + if(!saveProject(strPathFileProject))return false; + registry.insertHistory(strPathFileProject); + setTitle(mTablature.getPathFileProject()); + return true; + } + if(mTabPage->isDirty()) + { + mTablature.setTabEntries(mTabPage->getEntries()); + mTablature.setTabRanges(mTabPage->getRanges()); + mTabPage->isDirty(false); + } + returnCode=mTablature.saveProject(); + if(returnCode&&String(STRING_NOTITLE)==getTitle())setTitle(mTablature.getPathFileProject()); + return returnCode; +} + +void ViewWindow::cut(void) +{ + mTabPage->cut(); +} + +void ViewWindow::copy(void) +{ + mTabPage->copy(); +} + +void ViewWindow::paste(void) +{ + mTabPage->paste(); +} + +void ViewWindow::setStartRange(void) +{ + mTabPage->setStartRange(); +} + +void ViewWindow::setEndRange(void) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setEndRange(); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); +} + +bool ViewWindow::getTabRanges(TabRanges &ranges) +{ + ranges.remove(); + ranges=mTabPage->getRanges(); + return ranges.size()?true:false; +} + +void ViewWindow::setTabRanges(const TabRanges &ranges) +{ + PureMenu &pureMenu=getMenu(); + mTabPage->setRanges(ranges); + if(ranges.size()) + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemEnabled)); + } + else + { + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + pureMenu.enableMenuItem(MENU_TABLATURE_PLAYRANGE_REPEATED,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemGrayed|PureMenu::ItemDisabled)); + } +} + +// thread handler + +DWORD ViewWindow::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_USER : + if(THPlay==threadMessage.userDataOne())thPlay(); + else if(THPlayFromCurrent==threadMessage.userDataOne())thPlayFromCurrent(); + else if(THPlayRange==threadMessage.userDataOne())thPlayRange(threadMessage.userDataTwo()); + } + return 0; +} + +void ViewWindow::thPlayRange(int rangeIndex) +{ + ::OutputDebugString("[ViewWindow::thPlayRange] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playRange(rangeIndex); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlayRange,rangeIndex); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlayRange] LEAVE\n"); +} + +void ViewWindow::thPlay() +{ + ::OutputDebugString("[ViewWindow::thPlay] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->play(); + setThreadPriority(prevPriority); + if(mTabPage->getCancelled())isInRepeatPlay(false); + if(isInRepeatPlay()) + { + ::Sleep(RestBeforeRepeat); + ThreadMessage thMessage(ThreadMessage::TM_USER,THPlay); + MessageThread::postMessage(thMessage); + } + else + { + enablePlaySelect(true); + } + ::OutputDebugString("[ViewWindow::thPlay] LEAVE\n"); +} + +void ViewWindow::thPlayFromCurrent() +{ + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] ENTER\n"); + ThreadPriority prevPriority=setThreadPriority(PureThread::ThreadPriorityHighest); + mTabPage->playFromCurrent(); + setThreadPriority(prevPriority); + enablePlaySelect(true); + ::OutputDebugString("[ViewWindow::thPlayFromCurrent] LEAVE\n"); +} + +// *** virtuals + +void ViewWindow::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.hCursor=::LoadCursor(processInstance(),MAKEINTRESOURCE(HARROW)); +} + +void ViewWindow::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/guitar/viewwnd.hpp b/guitar/viewwnd.hpp new file mode 100644 index 0000000..f4b9e40 --- /dev/null +++ b/guitar/viewwnd.hpp @@ -0,0 +1,153 @@ +#ifndef _GUITAR_VIEWWINDOW_HPP_ +#define _GUITAR_VIEWWINDOW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _GUITAR_TABLATURE_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _GUITAR_TABPAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class GUIFretboard; +class StatusBarEx; + +class ViewWindow : public MDIWindow, public MessageThread +{ +public: + friend class TabPage; + enum{THPlay,THPlayFromCurrent,THPlayRange,THStop}; + ViewWindow(void); + virtual ~ViewWindow(); + void setFretboardHandler(CallbackPointer &callbackPointer); + bool createProject(const String &strPathTabFile); + bool createProject(void); + bool openProject(const String &pathFileName); + bool saveProject(const String &pathFileName); + bool saveProject(void); + void play(void); + void playFromCurrent(void); + void stopPlay(void); + void playRepeated(void); + void playRange(int rangeIndex); + void playRangeRepeated(int rangeIndex); + void cut(void); + void copy(void); + void paste(void); + void modifyProperties(void); + void setStartRange(void); + void setEndRange(void); + bool getTabRanges(TabRanges &ranges); + void setTabRanges(const TabRanges &ranges); + const TabEntries &getEntries(void)const; + bool insert(const TabEntry &entry); + bool insert(const TabEntries &entries); + int getNumTabEntries(void)const; + void increaseTempo(void); + void decreaseTempo(void); + String getTitle(void)const; + const String &getPathFileProject(void)const; + void setStatusControlRef(SmartPointer &statusBar); + bool isDirty(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {WindowWidth=565,WindowHeight=210,RestBeforeRepeat=500}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void setTitle(const String &strTitle); + void enablePlaySelect(bool enable); + void enableStopSelect(bool enable); + void enableCut(bool enable); + void enableCopy(bool enable); + void enablePaste(bool enable); + bool getEnableCut(void); + bool getEnableCopy(void); + bool getEnablePaste(void); + bool isInRepeatPlay(void)const; + void isInRepeatPlay(bool isInRepeatPlay); + bool getProjectName(String &strPathFileProject); + void thPlay(void); + void thPlayFromCurrent(void); + void thPlayRange(int rangeIndex); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mLeftButtonDoubleHandler; + Callback mPlayNoteHandler; + Callback mCloseHandler; + Callback mRightButtonDownHandler; + ThreadCallback mThreadHandler; + SmartPointer mTabPage; + SmartPointer mMIDIDevice; + Tablature mTablature; + bool mIsInRepeatPlay; +}; + +inline +const TabEntries &ViewWindow::getEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries(); +} + +inline +void ViewWindow::setFretboardHandler(CallbackPointer &callbackPointer) +{ + mTabPage->setPlayNoteHandler(callbackPointer); +} + +inline +bool ViewWindow::isDirty(void) +{ + return mTabPage->isDirty(); +} + +inline +bool ViewWindow::isInRepeatPlay(void)const +{ + return mIsInRepeatPlay; +} + +inline +void ViewWindow::isInRepeatPlay(bool isInRepeatPlay) +{ + mIsInRepeatPlay=isInRepeatPlay; +} + +inline +const String &ViewWindow::getPathFileProject(void)const +{ + return mTablature.getPathFileProject(); +} + +inline +int ViewWindow::getNumTabEntries(void)const +{ + return ((SmartPointer&)mTabPage)->getEntries().size(); +} + +inline +void ViewWindow::setStatusControlRef(SmartPointer &statusBar) +{ + mTabPage->setStatusControlRef(statusBar); +} +#endif + + diff --git a/guitar/wininfo.hpp b/guitar/wininfo.hpp new file mode 100644 index 0000000..373014d --- /dev/null +++ b/guitar/wininfo.hpp @@ -0,0 +1,85 @@ +#ifndef _GUITAR_WININFO_HPP_ +#define _GUITAR_WININFO_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WinInfo +{ +public: + WinInfo(void); + virtual ~WinInfo(); + void refresh(void); + const String &strProductName(void)const; + const String &strRegisteredOwner(void)const; + const String &strProductID(void)const; + const String &strVersion(void)const; +private: + String mStrProductName; + String mStrRegisteredOwner; + String mStrProductID; + String mStrVersion; +}; + +inline +WinInfo::WinInfo(void) +{ + refresh(); +} + +inline +WinInfo::~WinInfo() +{ +} + +inline +void WinInfo::refresh(void) +{ + RegKey regKey(RegKey::LocalMachine); + + if(!regKey.openKey("Software\\Microsoft\\Windows\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + if(!mStrProductName.isNull()) + { + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } + else + { + RegKey regKey(RegKey::LocalMachine); + if(!regKey.openKey("Software\\Microsoft\\Windows NT\\CurrentVersion"))return; + regKey.queryValue("ProductName",mStrProductName); + regKey.queryValue("RegisteredOwner",mStrRegisteredOwner); + regKey.queryValue("ProductId",mStrProductID); + regKey.queryValue("VersionNumber",mStrVersion); + } +} + +inline +const String &WinInfo::strProductName(void)const +{ + return mStrProductName; +} + +inline +const String &WinInfo::strRegisteredOwner(void)const +{ + return mStrRegisteredOwner; +} + +inline +const String &WinInfo::strProductID(void)const +{ + return mStrProductID; +} + +inline +const String &WinInfo::strVersion(void)const +{ + return mStrVersion; +} +#endif diff --git a/hookproc/APIENTRY.CPP b/hookproc/APIENTRY.CPP new file mode 100644 index 0000000..edf8406 --- /dev/null +++ b/hookproc/APIENTRY.CPP @@ -0,0 +1,55 @@ +#include + +#if defined(_MSC_VER) +void APIEntry::createThunk(DWORD stackLength) +{ + pushEBP(); + movEBPESP(); + jmp(0x0008); + encodeDD(); + encodeDD(); + movEAX(FirstArgument); + addEAX(stackLength); + subEAX(0x0004); + cmpEAX(0x0004); + je(0x0013); + pushEBPEAXPLUS(0); + subEAX(4); + cmpEAX(FirstArgument); + jnl(-19); + push(base()+tell()+0x0014); + movECXOFFSETCS(base()+IATInstance); + movEAXOFFSETCS(base()+IATOffset); + pushEAX(); + retn(); + popEBP(); + retn(); +} +#else +void APIEntry::createThunk(DWORD stackLength) +{ + pushEBP(); + movEBPESP(); + jmp(0x0008); + encodeDD(); + encodeDD(); + movEAX(FirstArgument); + addEAX(stackLength); + subEAX(0x0004); + cmpEAX(0x0004); + je(0x0013); + pushEBPEAXPLUS(0); + subEAX(4); + cmpEAX(FirstArgument); + jnl(-19); + movECXOFFSETCS(base()+IATInstance); + pushECX(); + push(base()+tell()+0x000D); + movEAXOFFSETCS(base()+IATOffset); + pushEAX(); + retn(); + addESP(stackLength+sizeof(void*)); + popEBP(); + retn(stackLength); +} +#endif diff --git a/hookproc/APIENTRY.HPP b/hookproc/APIENTRY.HPP new file mode 100644 index 0000000..841532c --- /dev/null +++ b/hookproc/APIENTRY.HPP @@ -0,0 +1,76 @@ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#define _HOOKPROC_APIENTRY_HPP_ +#ifndef _COMMON_CODEGEN_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class APIEntry : private CodeGen +{ +public: + APIEntry(DWORD stackLength,DWORD instanceAddress,DWORD hookAddress); + virtual ~APIEntry(); + DWORD codeBase(void)const; +protected: + void entryPoint(DWORD entryPoint); +private: + enum {CodeLength=1024,FirstArgument=8,IATOffset=5,IATInstance=9}; + APIEntry(const APIEntry &someAPIEntry); + APIEntry &operator=(const APIEntry &someAPIEntry); + void createThunk(DWORD stackLength); + void saveIATAddress(DWORD hookAddress); + void saveIATInstance(DWORD instanceAddress); +}; + +inline +APIEntry::APIEntry(DWORD stackLength,DWORD instanceAddress,DWORD hookAddress) +: CodeGen(CodeLength) +{ + createThunk(stackLength); + saveIATAddress(hookAddress); + saveIATInstance(instanceAddress); +} + +inline +APIEntry::APIEntry(const APIEntry &/*someAPIEntry*/) +{ // no implementation +} + +inline +APIEntry::~APIEntry() +{ +} + +inline +APIEntry &APIEntry::operator=(const APIEntry &/*someAPIEntry*/) +{ // no implementation + return *this; +} + +inline +DWORD APIEntry::codeBase(void)const +{ + return base(); +} + + +inline +void APIEntry::saveIATAddress(DWORD hookAddress) +{ + ((PureViewOfFile&)((CodeGen&)*this)).push(); + ((PureViewOfFile&)((CodeGen&)*this)).seek(IATOffset,PureViewOfFile::SeekSet); + ((PureViewOfFile&)((CodeGen&)*this)).write((int)hookAddress); + ((PureViewOfFile&)((CodeGen&)*this)).pop(); +} + +inline +void APIEntry::saveIATInstance(DWORD instanceAddress) +{ + ((PureViewOfFile&)((CodeGen&)*this)).push(); + ((PureViewOfFile&)((CodeGen&)*this)).seek(IATInstance,PureViewOfFile::SeekSet); + ((PureViewOfFile&)((CodeGen&)*this)).write((int)instanceAddress); + ((PureViewOfFile&)((CodeGen&)*this)).pop(); +} +#endif \ No newline at end of file diff --git a/hookproc/DesktopEnumerator.hpp b/hookproc/DesktopEnumerator.hpp new file mode 100644 index 0000000..fad3918 --- /dev/null +++ b/hookproc/DesktopEnumerator.hpp @@ -0,0 +1,59 @@ +#ifndef _HOOKPROC_DESKTOPENUMERATOR_HPP_ +#define _HOOKPROC_DESKTOPENUMERATOR_HPP_ +#ifndef _HOOKPROC_ENUMDESKTOPHOOK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWSTATION_HPP_ +#include +#endif + +class DesktopEnumerator : public EnumDesktopHook, public Block +{ +public: + DesktopEnumerator(void); + virtual ~DesktopEnumerator(); + bool enumerateDesktops(WindowStation &windowStation); + DWORD size(void)const; +protected: + virtual bool enumDesktopProc(const String &strDesktop); +private: +}; + +inline +DesktopEnumerator::DesktopEnumerator(void) +{ +} + +inline +DesktopEnumerator::~DesktopEnumerator() +{ +} + +inline +bool DesktopEnumerator::enumerateDesktops(WindowStation &windowStation) +{ + Block::remove(); + if(!windowStation.isOkay())return false; + ::EnumDesktops(windowStation.getHandle(),(LPFNENUMDESKTOPPROC)getHookAddress(),0); + return Block::size()?true:false; +} + +inline +bool DesktopEnumerator::enumDesktopProc(const String &strDesktop) +{ + Block::insert(&strDesktop); + return true; +} + +inline +DWORD DesktopEnumerator::size(void)const +{ + return Block::size(); +} +#endif diff --git a/hookproc/DesktopWindowEnumerator.hpp b/hookproc/DesktopWindowEnumerator.hpp new file mode 100644 index 0000000..fd14c0a --- /dev/null +++ b/hookproc/DesktopWindowEnumerator.hpp @@ -0,0 +1,59 @@ +#ifndef _HOOKPROC_DESKTOPWINDOWENUMERATOR_HPP_ +#define _HOOKPROC_DESKTOPWINDOWENUMERATOR_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_DESKTOP_HPP_ +#include +#endif +#ifndef _HOOKPROC_ENUMWINDOWSHOOK_HPP_ +#include +#endif + +class DesktopWindowEnumerator : public EnumWindowsHook, public Block +{ +public: + DesktopWindowEnumerator(); + virtual ~DesktopWindowEnumerator(); + bool enumerateDesktopWindows(Desktop &desktop); + DWORD size(void)const; +protected: + virtual bool enumWindowsProc(HWND hWnd,LPARAM lParam); +private: +}; + +inline +DesktopWindowEnumerator::DesktopWindowEnumerator() +{ +} + +inline +DesktopWindowEnumerator::~DesktopWindowEnumerator() +{ +} + +inline +bool DesktopWindowEnumerator::enumerateDesktopWindows(Desktop &desktop) +{ + Block::remove(); + if(!desktop.isOkay())return false; + ::EnumDesktopWindows(desktop.getHandle(),(LPFNENUMWINDOWPROC)getHookAddress(),0L); + return size()?true:false; +} + +inline +bool DesktopWindowEnumerator::enumWindowsProc(HWND hWnd,LPARAM lParam) +{ + Block::insert(&hWnd); + return true; +} + +inline +DWORD DesktopWindowEnumerator::size(void)const +{ + return Block::size(); +} +#endif diff --git a/hookproc/ENUMWIN.CPP b/hookproc/ENUMWIN.CPP new file mode 100644 index 0000000..d7ea071 --- /dev/null +++ b/hookproc/ENUMWIN.CPP @@ -0,0 +1,18 @@ +#include +#include + +EnumWindowsHook::~EnumWindowsHook() +{ +} + +bool EnumWindowsHook::entryProc(HWND hWnd,LPARAM lParam) +{ + return enumWindowsProc(hWnd,lParam); +} + +// *** virtuals + +bool EnumWindowsHook::enumWindowsProc(HWND hWnd,LPARAM lParam) +{ + return true; +} diff --git a/hookproc/ENUMWIN.HPP b/hookproc/ENUMWIN.HPP new file mode 100644 index 0000000..266815c --- /dev/null +++ b/hookproc/ENUMWIN.HPP @@ -0,0 +1,45 @@ +#ifndef _HOOKPROC_ENUMWINDOWSHOOK_HPP_ +#define _HOOKPROC_ENUMWINDOWSHOOK_HPP_ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#include +#endif +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#include +#endif + +class EnumWindowsHook; +typedef ProcAddress EnumWindowsHookProc; + +class EnumWindowsHook : protected APIEntry, private EnumWindowsHookProc +{ +public: + typedef int (__stdcall *LPFNENUMWINDOWPROC)(HWND hWnd,LPARAM lParam); + EnumWindowsHook(void); + virtual ~EnumWindowsHook(); + DWORD getHookAddress(void); +protected: + virtual bool enumWindowsProc(HWND hWnd,LPARAM lParam); +private: + enum {ParamLength=8}; + EnumWindowsHook &operator=(const EnumWindowsHook &someEnumWindowsHook); + bool entryProc(HWND hWnd,LPARAM lParam); +}; + +inline +EnumWindowsHook::EnumWindowsHook(void) +: APIEntry(ParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&EnumWindowsHook::entryProc)) +{ +} + +inline +EnumWindowsHook &EnumWindowsHook::operator=(const EnumWindowsHook &someEnumWindowsHook) +{ // no implementation + return *this; +} + +inline +DWORD EnumWindowsHook::getHookAddress(void) +{ + return codeBase(); +} +#endif diff --git a/hookproc/EXCPTDLG.CPP b/hookproc/EXCPTDLG.CPP new file mode 100644 index 0000000..1023701 --- /dev/null +++ b/hookproc/EXCPTDLG.CPP @@ -0,0 +1,897 @@ +#include +#include +#include + +WORD ExceptDlg::performDialog(const ExceptionRecord &exceptionRecord,const Context &exceptionContext) +{ + String staticControl("STATIC"); + String editControl("EDIT"); + DialogTemplate dlgTemplate; + DialogItemTemplate argEdit; + DialogItemTemplate argStatic; + DialogItemTemplate argButton; + DialogItemTemplate staticEAX; + DialogItemTemplate staticEBX; + DialogItemTemplate staticECX; + DialogItemTemplate staticEDX; + DialogItemTemplate staticESI; + DialogItemTemplate staticEDI; + DialogItemTemplate staticESP; + DialogItemTemplate staticEBP; + DialogItemTemplate staticDS; + DialogItemTemplate staticES; + DialogItemTemplate staticFS; + DialogItemTemplate staticGS; + DialogItemTemplate staticCS; + DialogItemTemplate staticSS; + DialogItemTemplate staticEIP; + DialogItemTemplate staticFlagsCarry; + DialogItemTemplate staticFlagsZero; + DialogItemTemplate staticFlagsOverflow; + DialogItemTemplate staticFlagsSign; + DialogItemTemplate staticFlagsAuxiliary; + DialogItemTemplate staticFlagsParity; + DialogItemTemplate staticFlagsDirection; + DialogItemTemplate staticFlagsInterrupt; + DialogItemTemplate registerEAX; + DialogItemTemplate registerEBX; + DialogItemTemplate registerECX; + DialogItemTemplate registerEDX; + DialogItemTemplate registerESI; + DialogItemTemplate registerEDI; + DialogItemTemplate registerESP; + DialogItemTemplate registerEBP; + DialogItemTemplate registerDS; + DialogItemTemplate registerES; + DialogItemTemplate registerFS; + DialogItemTemplate registerGS; + DialogItemTemplate registerCS; + DialogItemTemplate registerSS; + DialogItemTemplate registerEIP; + DialogItemTemplate registerFlagsSign; + DialogItemTemplate registerFlagsCarry; + DialogItemTemplate registerFlagsOverflow; + DialogItemTemplate registerFlagsZero; + DialogItemTemplate registerFlagsParity; + DialogItemTemplate registerFlagsAuxiliary; + DialogItemTemplate registerFlagsDirection; + DialogItemTemplate registerFlagsInterrupt; + DialogItemTemplate staticFlagsLabel; + + mExceptionRecord=exceptionRecord; + mExceptionContext=exceptionContext; + dlgTemplate.titleText(exceptionRecord.exceptionCodeString().isNull()?"Exception Handler":(LPSTR)(String&)exceptionRecord.exceptionCodeString()); + dlgTemplate.posRect(Rect(8,19,345,225)); + dlgTemplate.pointSize(6); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_TABSTOP|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|DS_SETFONT|WS_POPUP|WS_SYSMENU); + + argEdit.className(editControl); + argEdit.titleText(""); + argEdit.style(WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE|ES_WANTRETURN|ES_READONLY); + argEdit.posRect(Rect(2,60,340,140)); + argEdit.itemID(EditControlID); + + argButton.className("BUTTON"); + argButton.titleText("Ok"); + argButton.style(WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON); + argButton.posRect(Rect(145,205,50,14)); + argButton.itemID(IDOK); + + staticEAX.className(staticControl); + staticEAX.titleText("eax:"); + staticEAX.style(WS_CHILD|WS_VISIBLE); + staticEAX.posRect(Rect(2,9,19,8)); + staticEAX.itemID(-1); + + staticEBX.className(staticControl); + staticEBX.titleText("ebx:"); + staticEBX.style(WS_CHILD|WS_VISIBLE); + staticEBX.posRect(Rect(72,9,17,8)); + staticEBX.itemID(-1); + + staticECX.className(staticControl); + staticECX.titleText("ecx:"); + staticECX.style(WS_CHILD|WS_VISIBLE); + staticECX.posRect(Rect(143,9,16,8)); + staticECX.itemID(-1); + + staticEDX.className(staticControl); + staticEDX.titleText("edx:"); + staticEDX.style(WS_CHILD|WS_VISIBLE); + staticEDX.posRect(Rect(213,9,16,8)); + staticEDX.itemID(-1); + + staticESI.className(staticControl); + staticESI.titleText("esi:"); + staticESI.style(WS_CHILD|WS_VISIBLE); + staticESI.posRect(Rect(2,23,19,8)); + staticESI.itemID(-1); + + staticEDI.className(staticControl); + staticEDI.titleText("edi:"); + staticEDI.style(WS_CHILD|WS_VISIBLE); + staticEDI.posRect(Rect(72,23,14,8)); + staticEDI.itemID(-1); + + staticESP.className(staticControl); + staticESP.titleText("esp:"); + staticESP.style(WS_CHILD|WS_VISIBLE); + staticESP.posRect(Rect(143,23,16,8)); + staticESP.itemID(-1); + + staticEBP.className(staticControl); + staticEBP.titleText("ebp:"); + staticEBP.style(WS_CHILD|WS_VISIBLE); + staticEBP.posRect(Rect(213,23,17,8)); + staticEBP.itemID(-1); + + staticDS.className(staticControl); + staticDS.titleText("ds:"); + staticDS.style(WS_CHILD|WS_VISIBLE); + staticDS.posRect(Rect(2,37,13,8)); + staticDS.itemID(-1); + + registerDS.className(editControl); + registerDS.titleText(""); + registerDS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerDS.posRect(Rect(17,36,26,12)); + registerDS.itemID(DebugDS); + + staticES.className(staticControl); + staticES.titleText("es:"); + staticES.style(WS_CHILD|WS_VISIBLE); + staticES.posRect(Rect(45,37,13,8)); + staticES.itemID(-1); + + registerES.className(editControl); + registerES.titleText(""); + registerES.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerES.posRect(Rect(59,36,26,12)); + registerES.itemID(DebugES); + + staticFS.className(staticControl); + staticFS.titleText("fs:"); + staticFS.style(WS_CHILD|WS_VISIBLE); + staticFS.posRect(Rect(87,37,13,8)); + staticFS.itemID(-1); + + registerFS.className(editControl); + registerFS.titleText(""); + registerFS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFS.posRect(Rect(101,36,26,12)); + registerFS.itemID(DebugFS); + + staticGS.className(staticControl); + staticGS.titleText("gs:"); + staticGS.style(WS_CHILD|WS_VISIBLE); + staticGS.posRect(Rect(128,37,13,8)); + staticGS.itemID(-1); + + registerGS.className(editControl); + registerGS.titleText(""); + registerGS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerGS.posRect(Rect(142,36,26,12)); + registerGS.itemID(DebugGS); + + staticCS.className(staticControl); + staticCS.titleText("cs:"); + staticCS.style(WS_CHILD|WS_VISIBLE); + staticCS.posRect(Rect(169,37,13,8)); + staticCS.itemID(-1); + + registerCS.className(editControl); + registerCS.titleText(""); + registerCS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerCS.posRect(Rect(183,36,26,12)); + registerCS.itemID(DebugCS); + + staticSS.className(staticControl); + staticSS.titleText("ss:"); + staticSS.style(WS_CHILD|WS_VISIBLE); + staticSS.posRect(Rect(210,37,13,8)); + staticSS.itemID(-1); + + registerSS.className(editControl); + registerSS.titleText(""); + registerSS.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerSS.posRect(Rect(224,36,26,12)); + registerSS.itemID(DebugSS); + + staticEIP.className(staticControl); + staticEIP.titleText("eip:"); + staticEIP.style(WS_CHILD|WS_VISIBLE); + staticEIP.posRect(Rect(281,9,13,8)); + staticEIP.itemID(-1); + + registerEAX.className(editControl); + registerEAX.titleText(""); + registerEAX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerEAX.posRect(Rect(22,7,48,12)); + registerEAX.itemID(DebugEAX); + + registerEBX.className(editControl); + registerEBX.titleText(""); + registerEBX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerEBX.posRect(Rect(92,7,48,12)); + registerEBX.itemID(DebugEBX); + + registerECX.className(editControl); + registerECX.titleText(""); + registerECX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerECX.posRect(Rect(162,7,48,12)); + registerECX.itemID(DebugECX); + + registerEDX.className(editControl); + registerEDX.titleText(""); + registerEDX.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerEDX.posRect(Rect(231,7,48,12)); + registerEDX.itemID(DebugEDX); + + registerESI.className(editControl); + registerESI.titleText(""); + registerESI.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerESI.posRect(Rect(22,21,48,12)); + registerESI.itemID(DebugESI); + + registerEDI.className(editControl); + registerEDI.titleText(""); + registerEDI.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerEDI.posRect(Rect(92,21,48,12)); + registerEDI.itemID(DebugEDI); + + registerESP.className(editControl); + registerESP.titleText(""); + registerESP.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerESP.posRect(Rect(162,21,48,12)); + registerESP.itemID(DebugESP); + + registerEBP.className(editControl); + registerEBP.titleText(""); + registerEBP.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerEBP.posRect(Rect(231,21,48,12)); + registerEBP.itemID(DebugEBP); + + registerEIP.className(editControl); + registerEIP.titleText(""); + registerEIP.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerEIP.posRect(Rect(295,7,48,12)); + registerEIP.itemID(DebugEIP); + + registerFlagsCarry.className(editControl); + registerFlagsCarry.titleText(""); + registerFlagsCarry.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsCarry.posRect(Rect(257,36,10,12)); + registerFlagsCarry.itemID(DebugFlagsCarry); + + registerFlagsZero.className(editControl); + registerFlagsZero.titleText(""); + registerFlagsZero.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsZero.posRect(Rect(268,36,10,12)); + registerFlagsZero.itemID(DebugFlagsZero); + + registerFlagsSign.className(editControl); + registerFlagsSign.titleText(""); + registerFlagsSign.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsSign.posRect(Rect(279,36,10,12)); + registerFlagsSign.itemID(DebugFlagsSign); + + registerFlagsOverflow.className(editControl); + registerFlagsOverflow.titleText(""); + registerFlagsOverflow.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsOverflow.posRect(Rect(290,36,10,12)); + registerFlagsOverflow.itemID(DebugFlagsOverflow); + + registerFlagsParity.className(editControl); + registerFlagsParity.titleText(""); + registerFlagsParity.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsParity.posRect(Rect(301,36,10,12)); + registerFlagsParity.itemID(DebugFlagsParity); + + registerFlagsAuxiliary.className(editControl); + registerFlagsAuxiliary.titleText(""); + registerFlagsAuxiliary.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsAuxiliary.posRect(Rect(312,36,10,12)); + registerFlagsAuxiliary.itemID(DebugFlagsAuxiliary); + + registerFlagsDirection.className(editControl); + registerFlagsDirection.titleText(""); + registerFlagsDirection.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsDirection.posRect(Rect(323,36,10,12)); + registerFlagsDirection.itemID(DebugFlagsDirection); + + registerFlagsInterrupt.className(editControl); + registerFlagsInterrupt.titleText(""); + registerFlagsInterrupt.style(WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_BORDER|WS_TABSTOP|ES_READONLY); + registerFlagsInterrupt.posRect(Rect(334,36,10,12)); + registerFlagsInterrupt.itemID(DebugFlagsInterrupt); + + staticFlagsLabel.className(staticControl); + staticFlagsLabel.titleText("Flags"); + staticFlagsLabel.style(WS_CHILD|WS_VISIBLE); + staticFlagsLabel.posRect(Rect(293,25,24,8)); + staticFlagsLabel.itemID(-1); + + staticFlagsCarry.className(staticControl); + staticFlagsCarry.titleText("cf:"); + staticFlagsCarry.style(WS_CHILD|WS_VISIBLE); + staticFlagsCarry.posRect(Rect(259,50,8,8)); + staticFlagsCarry.itemID(-1); + + staticFlagsZero.className(staticControl); + staticFlagsZero.titleText("zf:"); + staticFlagsZero.style(WS_CHILD|WS_VISIBLE); + staticFlagsZero.posRect(Rect(270,50,8,8)); + staticFlagsZero.itemID(-1); + + staticFlagsSign.className(staticControl); + staticFlagsSign.titleText("sf:"); + staticFlagsSign.style(WS_CHILD|WS_VISIBLE); + staticFlagsSign.posRect(Rect(281,50,8,8)); + staticFlagsSign.itemID(-1); + + staticFlagsOverflow.className(staticControl); + staticFlagsOverflow.titleText("ov:"); + staticFlagsOverflow.style(WS_CHILD|WS_VISIBLE); + staticFlagsOverflow.posRect(Rect(292,50,8,8)); + staticFlagsOverflow.itemID(-1); + + staticFlagsParity.className(staticControl); + staticFlagsParity.titleText("pf:"); + staticFlagsParity.style(WS_CHILD|WS_VISIBLE); + staticFlagsParity.posRect(Rect(303,50,8,8)); + staticFlagsParity.itemID(-1); + + staticFlagsAuxiliary.className(staticControl); + staticFlagsAuxiliary.titleText("af:"); + staticFlagsAuxiliary.style(WS_CHILD|WS_VISIBLE); + staticFlagsAuxiliary.posRect(Rect(314,50,8,8)); + staticFlagsAuxiliary.itemID(-1); + + staticFlagsInterrupt.className(staticControl); + staticFlagsInterrupt.titleText("if:"); + staticFlagsInterrupt.style(WS_CHILD|WS_VISIBLE); + staticFlagsInterrupt.posRect(Rect(336,50,8,8)); + staticFlagsInterrupt.itemID(-1); + + staticFlagsDirection.className(staticControl); + staticFlagsDirection.titleText("df:"); + staticFlagsDirection.style(WS_CHILD|WS_VISIBLE); + staticFlagsDirection.posRect(Rect(325,50,8,8)); + staticFlagsDirection.itemID(-1); + + dlgTemplate+=argEdit; + dlgTemplate+=argButton; + dlgTemplate+=staticEAX; + dlgTemplate+=staticEBX; + dlgTemplate+=staticECX; + dlgTemplate+=staticEDX; + dlgTemplate+=staticESI; + dlgTemplate+=staticEDI; + dlgTemplate+=staticESP; + dlgTemplate+=staticEBP; + dlgTemplate+=staticDS; + dlgTemplate+=staticES; + dlgTemplate+=staticFS; + dlgTemplate+=staticGS; + dlgTemplate+=staticCS; + dlgTemplate+=staticSS; + dlgTemplate+=staticEIP; + dlgTemplate+=staticFlagsCarry; + dlgTemplate+=staticFlagsZero; + dlgTemplate+=staticFlagsOverflow; + dlgTemplate+=staticFlagsSign; + dlgTemplate+=staticFlagsAuxiliary; + dlgTemplate+=staticFlagsParity; + dlgTemplate+=staticFlagsDirection; + dlgTemplate+=staticFlagsInterrupt; + dlgTemplate+=registerEAX; + dlgTemplate+=registerEBX; + dlgTemplate+=registerECX; + dlgTemplate+=registerEDX; + dlgTemplate+=registerESI; + dlgTemplate+=registerEDI; + dlgTemplate+=registerESP; + dlgTemplate+=registerEBP; + dlgTemplate+=registerDS; + dlgTemplate+=registerES; + dlgTemplate+=registerFS; + dlgTemplate+=registerGS; + dlgTemplate+=registerCS; + dlgTemplate+=registerSS; + dlgTemplate+=registerEIP; + dlgTemplate+=registerFlagsSign; + dlgTemplate+=registerFlagsCarry; + dlgTemplate+=registerFlagsOverflow; + dlgTemplate+=registerFlagsZero; + dlgTemplate+=registerFlagsParity; + dlgTemplate+=registerFlagsAuxiliary; + dlgTemplate+=registerFlagsDirection; + dlgTemplate+=registerFlagsInterrupt; + dlgTemplate+=staticFlagsLabel; + + createDialog(dlgTemplate); + clear(); + return TRUE; +} + +DWORD ExceptDlg::eax(void)const +{ + String strString; + + sendMessage(DebugEAX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::eax(DWORD eax) +{ + String strString; + + ::sprintf(strString,"%08lx",eax); + strString.upper(); + sendMessage(DebugEAX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::ebx(void)const +{ + String strString; + + sendMessage(DebugEBX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::ebx(DWORD ebx) +{ + String strString; + + ::sprintf(strString,"%08lx",ebx); + strString.upper(); + sendMessage(DebugEBX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::ecx(void)const +{ + String strString; + + sendMessage(DebugECX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::ecx(DWORD ecx) +{ + String strString; + + ::sprintf(strString,"%08lx",ecx); + strString.upper(); + sendMessage(DebugECX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::edx(void)const +{ + String strString; + + sendMessage(DebugEDX,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::edx(DWORD edx) +{ + String strString; + + ::sprintf(strString,"%08lx",edx); + strString.upper(); + sendMessage(DebugEDX,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::esi(void)const +{ + String strString; + + sendMessage(DebugESI,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::esi(DWORD esi) +{ + String strString; + + ::sprintf(strString,"%08lx",esi); + strString.upper(); + sendMessage(DebugESI,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::edi(void)const +{ + String strString; + + sendMessage(DebugEDI,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::edi(DWORD edi) +{ + String strString; + + ::sprintf(strString,"%08lx",edi); + strString.upper(); + sendMessage(DebugEDI,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::esp(void)const +{ + String strString; + + sendMessage(DebugESP,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::esp(DWORD esp) +{ + String strString; + + ::sprintf(strString,"%08lx",esp); + strString.upper(); + sendMessage(DebugESP,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::ebp(void)const +{ + String strString; + + sendMessage(DebugEBP,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::ebp(DWORD ebp) +{ + String strString; + + ::sprintf(strString,"%08lx",ebp); + strString.upper(); + sendMessage(DebugEBP,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +DWORD ExceptDlg::eip(void)const +{ + String strString; + + sendMessage(DebugEIP,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::eip(DWORD eip) +{ + String strString; + + ::sprintf(strString,"%08lx",eip); + strString.upper(); + sendMessage(DebugEIP,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +WORD ExceptDlg::ds(void)const +{ + String strString; + + sendMessage(DebugDS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::ds(WORD ds) +{ + String strString; + + ::sprintf(strString,"%04lx",ds); + strString.upper(); + sendMessage(DebugDS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +WORD ExceptDlg::es(void)const +{ + String strString; + + sendMessage(DebugES,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::es(WORD es) +{ + String strString; + + ::sprintf(strString,"%04lx",es); + strString.upper(); + sendMessage(DebugES,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +WORD ExceptDlg::fs(void)const +{ + String strString; + + sendMessage(DebugFS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::fs(WORD fs) +{ + String strString; + + ::sprintf(strString,"%04lx",fs); + strString.upper(); + sendMessage(DebugFS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +WORD ExceptDlg::gs(void)const +{ + String strString; + + sendMessage(DebugGS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::gs(WORD gs) +{ + String strString; + + ::sprintf(strString,"%04lx",gs); + strString.upper(); + sendMessage(DebugGS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +WORD ExceptDlg::cs(void)const +{ + String strString; + + sendMessage(DebugCS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::cs(WORD cs) +{ + String strString; + + ::sprintf(strString,"%04lx",cs); + strString.upper(); + sendMessage(DebugCS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +WORD ExceptDlg::ss(void)const +{ + String strString; + + sendMessage(DebugSS,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::ss(WORD ss) +{ + String strString; + + ::sprintf(strString,"%04lx",ss); + strString.upper(); + sendMessage(DebugSS,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::signFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsSign,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::signFlag(BOOL signFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",signFlag); + strString.upper(); + sendMessage(DebugFlagsSign,WM_SETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::carryFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsCarry,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::carryFlag(BOOL carryFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",carryFlag); + strString.upper(); + sendMessage(DebugFlagsCarry,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::overflowFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsOverflow,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::overflowFlag(BOOL overflowFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",overflowFlag); + strString.upper(); + sendMessage(DebugFlagsOverflow,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::zeroFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsZero,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::zeroFlag(BOOL zeroFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",zeroFlag); + strString.upper(); + sendMessage(DebugFlagsZero,WM_SETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::parityFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsParity,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::parityFlag(BOOL parityFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",parityFlag); + strString.upper(); + sendMessage(DebugFlagsParity,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::auxiliaryFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsAuxiliary,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::auxiliaryFlag(BOOL auxiliaryFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",auxiliaryFlag); + strString.upper(); + sendMessage(DebugFlagsAuxiliary,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::directionFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsDirection,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::directionFlag(BOOL directionFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",directionFlag); + strString.upper(); + sendMessage(DebugFlagsDirection,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +BOOL ExceptDlg::interruptFlag(void)const +{ + String strString; + + sendMessage(DebugFlagsInterrupt,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strString); + return strString.hex(); +} + +void ExceptDlg::interruptFlag(BOOL interruptFlag) +{ + String strString; + + ::sprintf(strString,"%01lx",interruptFlag); + strString.upper(); + sendMessage(DebugFlagsInterrupt,WM_SETTEXT,0,(LPARAM)(LPSTR)strString); +} + +void ExceptDlg::clear(void) +{ + eax(0);ebx(0);ecx(0);edx(0);esi(0);edi(0);esp(0);ebp(0);eip(0);ds(0);es(0);fs(0);gs(0);cs(0);ss(0); + signFlag(FALSE); + carryFlag(FALSE); + overflowFlag(FALSE); + zeroFlag(FALSE); + parityFlag(FALSE); + auxiliaryFlag(FALSE); + directionFlag(FALSE); + interruptFlag(FALSE); +} + +void ExceptDlg::showException(DWORD exceptionAddress) +{ + Block codeLines; + PureViewOfFile codeView; + String codeLine; + + codeView.createView(MaxDecodeBytes,exceptionAddress); + mDisAssembler.setBaseAddress(exceptionAddress); + mDisAssembler.displayLines(FALSE); + mDisAssembler.disassemble(codeLines,codeView); + for(int lineIndex=0;lineIndex +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif +#ifndef _DECODE_DISASSEMBLER_HPP_ +#include +#endif +#ifndef _DEBUG_EXCEPTIONRECORD_HPP_ +#include +#endif +#ifndef _DEBUG_CONTEXT_HPP_ +#include +#endif + +class ExceptDlg : public DynamicDialog +{ +public: + ExceptDlg(void); + virtual ~ExceptDlg(); + WORD performDialog(const ExceptionRecord &exceptionRecord,const Context &exceptionContext); + DWORD eax(void)const; + void eax(DWORD eax); + DWORD ebx(void)const; + void ebx(DWORD ebx); + DWORD ecx(void)const; + void ecx(DWORD ecx); + DWORD edx(void)const; + void edx(DWORD edx); + DWORD esi(void)const; + void esi(DWORD esi); + DWORD edi(void)const; + void edi(DWORD edi); + DWORD esp(void)const; + void esp(DWORD esp); + DWORD ebp(void)const; + void ebp(DWORD ebp); + DWORD eip(void)const; + void eip(DWORD eip); + WORD ds(void)const; + void ds(WORD ds); + WORD es(void)const; + void es(WORD es); + WORD fs(void)const; + void fs(WORD fs); + WORD gs(void)const; + void gs(WORD gs); + WORD cs(void)const; + void cs(WORD cs); + WORD ss(void)const; + void ss(WORD ss); + BOOL signFlag(void)const; + void signFlag(BOOL signFlag); + BOOL carryFlag(void)const; + void carryFlag(BOOL carryFlag); + BOOL overflowFlag(void)const; + void overflowFlag(BOOL overflowFlag); + BOOL zeroFlag(void)const; + void zeroFlag(BOOL zeroFlag); + BOOL parityFlag(void)const; + void parityFlag(BOOL parityFlag); + BOOL auxiliaryFlag(void)const; + void auxiliaryFlag(BOOL auxiliaryFlag); + BOOL directionFlag(void)const; + void directionFlag(BOOL directionFlag); + BOOL interruptFlag(void)const; + void interruptFlag(BOOL interruptFlag); + void clear(void); +protected: + virtual WORD dlgCode(CallbackData &someCallbackData); + virtual WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + virtual BOOL dlgInitDialog(CallbackData &someCallbackData); + virtual void dlgDestroyDialog(CallbackData &someCallbackData); +private: + enum {EditControlID=200,MaxDecodeBytes=96}; + enum {DebugEAX=500,DebugEBX=501,DebugECX=502,DebugEDX=503,DebugESI=504,DebugEDI=505,DebugESP=506, + DebugEBP=507,DebugDS=508,DebugES=509,DebugFS=510,DebugGS=511,DebugCS=512,DebugSS=513, + DebugEIP=514,DebugFlagsSign=515,DebugFlagsCarry=516,DebugFlagsOverflow=517,DebugFlagsZero=518, + DebugFlagsParity=519,DebugFlagsAuxiliary=520,DebugFlagsDirection=521,DebugFlagsInterrupt=522}; + ExceptDlg(const ExceptDlg &loginDialog); + void showException(DWORD exceptionAddress); + void showContext(void); + + DisAssembler mDisAssembler; + ExceptionRecord mExceptionRecord; + Context mExceptionContext; + Font mEditFont; +}; + +inline +ExceptDlg::ExceptDlg(void) +: mEditFont("MS LineDraw",-8,Font::PitchFixed|Font::WeightBold) +{ +} + +inline +ExceptDlg::ExceptDlg(const ExceptDlg &/*argDialog*/) +{ +} + +inline +ExceptDlg::~ExceptDlg() +{ +} +#endif + diff --git a/hookproc/FRAME.ASM b/hookproc/FRAME.ASM new file mode 100644 index 0000000..f46e46f --- /dev/null +++ b/hookproc/FRAME.ASM @@ -0,0 +1,34 @@ +.386P +.MODEL FLAT +.DATA +.CODE +_getFS proc near ; PureExceptionRegistration *getFS(void) + push ebp ; save prior stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push es ; save extra segment register + push fs ; save fs register + pop es ; restor fs into es (Microsoft assembler quirk) + mov eax,es:[0] ; move value of fs:[0] into eax + pop es ; restore extra segment register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_getFS endp +_setFS proc near ; void setFS(PureExceptionRegistration *pPureExceptionRegistration) + push ebp ; save prior stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push es ; save extra segment register + push fs ; save fs register + pop es ; restor fs into es (Microsoft assembler quirk) + mov esi,[ebp+08h] ; get pointer to PureExceptionRegistration + mov es:[0],esi ; move it into FS register + pop es ; restore extra segment register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_setFS endp +public _getFS +public _setFS +END diff --git a/hookproc/FRAME.CRF b/hookproc/FRAME.CRF new file mode 100644 index 0000000..2d1a110 Binary files /dev/null and b/hookproc/FRAME.CRF differ diff --git a/hookproc/HOOKEXE.001 b/hookproc/HOOKEXE.001 new file mode 100644 index 0000000..ca139ae --- /dev/null +++ b/hookproc/HOOKEXE.001 @@ -0,0 +1,131 @@ +# Microsoft Developer Studio Project File - Name="hookproc" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=hookproc - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "hookexe.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "hookexe.mak" CFG="hookproc - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "hookproc - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "hookproc - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "hookproc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /W1 /GX /Od /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /I /work" /I /parts" " " /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "hookproc - Win32 Release" +# Name "hookproc - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\mshook.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Apientry.hpp +# End Source File +# Begin Source File + +SOURCE=.\excptdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Excpthk.hpp +# End Source File +# Begin Source File + +SOURCE=.\Procaddr.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/hookproc/HOOKEXE.DSW b/hookproc/HOOKEXE.DSW new file mode 100644 index 0000000..5f00e1e --- /dev/null +++ b/hookproc/HOOKEXE.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "hookproc"=.\hookexe.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/hookproc/HOOKEXE.PLG b/hookproc/HOOKEXE.PLG new file mode 100644 index 0000000..5b929e1 --- /dev/null +++ b/hookproc/HOOKEXE.PLG @@ -0,0 +1,35 @@ + + +
+

Build Log

+

+--------------------Configuration: hookproc - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\TEMP\RSP6BB3.tmp" with contents +[ +/nologo /Zp1 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/hookexe.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" " " /c +"C:\Cortex\hookproc\Main.cpp" +] +Creating command line "cl.exe @C:\TEMP\RSP6BB3.tmp" +Creating temporary file "C:\TEMP\RSP6BB4.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/hookexe.pdb" /debug /machine:I386 /out:".\msvcobj/hookexe.exe" +.\msvcobj\Main.obj +..\Exe\mscommon.lib +..\Exe\mshook.lib +.\msvcobj\enumstation.obj +] +Creating command line "link.exe @C:\TEMP\RSP6BB4.tmp" +

Output Window

+Compiling... +Main.cpp +Linking... + + + +

Results

+hookexe.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/hookproc/HOOKPROC.001 b/hookproc/HOOKPROC.001 new file mode 100644 index 0000000..7cecfc1 --- /dev/null +++ b/hookproc/HOOKPROC.001 @@ -0,0 +1,94 @@ +# Microsoft Developer Studio Project File - Name="hookproc" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=hookproc - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak" CFG="hookproc - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "hookproc - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "hookproc - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "hookproc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mshook.lib" + +!ENDIF + +# Begin Target + +# Name "hookproc - Win32 Release" +# Name "hookproc - Win32 Debug" +# Begin Source File + +SOURCE=.\Apientry.cpp +# End Source File +# Begin Source File + +SOURCE=.\Enumdesk.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msghook.cpp +# End Source File +# Begin Source File + +SOURCE=.\ofnhook.cpp +# End Source File +# End Target +# End Project diff --git a/hookproc/HOOKPROC.BAK b/hookproc/HOOKPROC.BAK new file mode 100644 index 0000000..29dd0a2 --- /dev/null +++ b/hookproc/HOOKPROC.BAK @@ -0,0 +1,581 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=hookproc - Win32 Debug +!MESSAGE No configuration specified. Defaulting to hookproc - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "hookproc - Win32 Release" && "$(CFG)" !=\ + "hookproc - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak" CFG="hookproc - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "hookproc - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "hookproc - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "hookproc - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "hookproc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\hookproc.exe" + +CLEAN : + -@erase "$(INTDIR)\Apientry.obj" + -@erase "$(INTDIR)\excptdlg.obj" + -@erase "$(INTDIR)\Excpthk.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(OUTDIR)\hookproc.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/hookproc.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/hookproc.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/hookproc.pdb" /machine:I386 /out:"$(OUTDIR)/hookproc.exe" +LINK32_OBJS= \ + "$(INTDIR)\Apientry.obj" \ + "$(INTDIR)\excptdlg.obj" \ + "$(INTDIR)\Excpthk.obj" \ + "$(INTDIR)\Main.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdebug.lib" \ + "..\Exe\msdecode.lib" \ + "..\Exe\msdialog.lib" + +"$(OUTDIR)\hookproc.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\hookproc.exe" + +CLEAN : + -@erase "$(INTDIR)\Apientry.obj" + -@erase "$(INTDIR)\excptdlg.obj" + -@erase "$(INTDIR)\Excpthk.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\hookproc.exe" + -@erase "$(OUTDIR)\hookproc.ilk" + -@erase "$(OUTDIR)\hookproc.pdb" + -@erase ".\frame.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/hookproc.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/hookproc.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/hookproc.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)/hookproc.exe" +LINK32_OBJS= \ + "$(INTDIR)\Apientry.obj" \ + "$(INTDIR)\excptdlg.obj" \ + "$(INTDIR)\Excpthk.obj" \ + "$(INTDIR)\Main.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdebug.lib" \ + "..\Exe\msdecode.lib" \ + "..\Exe\msdialog.lib" \ + ".\frame.obj" + +"$(OUTDIR)\hookproc.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "hookproc - Win32 Release" +# Name "hookproc - Win32 Debug" + +!IF "$(CFG)" == "hookproc - Win32 Release" + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Apientry.hpp"\ + {$(INCLUDE)}"\.\excptdlg.hpp"\ + {$(INCLUDE)}"\.\Excpthk.hpp"\ + {$(INCLUDE)}"\.\Procaddr.hpp"\ + {$(INCLUDE)}"\.\Procaddr.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Codegen.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Excpt.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Debug\Context.hpp"\ + {$(INCLUDE)}"\Debug\Except.hpp"\ + {$(INCLUDE)}"\Debug\Excptreg.hpp"\ + {$(INCLUDE)}"\Debug\Savearea.hpp"\ + {$(INCLUDE)}"\Decode\Base.hpp"\ + {$(INCLUDE)}"\Decode\Disasm.hpp"\ + {$(INCLUDE)}"\Decode\Extrinfo.hpp"\ + {$(INCLUDE)}"\Decode\Isize.hpp"\ + {$(INCLUDE)}"\Decode\Lines.hpp"\ + {$(INCLUDE)}"\Decode\Mathcode.hpp"\ + {$(INCLUDE)}"\Decode\Mathcode.tpp"\ + {$(INCLUDE)}"\Decode\Mathinfo.hpp"\ + {$(INCLUDE)}"\Decode\Opcode.hpp"\ + {$(INCLUDE)}"\Decode\Opcode.tpp"\ + {$(INCLUDE)}"\Decode\Opcodes.hpp"\ + {$(INCLUDE)}"\Decode\Popcode.hpp"\ + {$(INCLUDE)}"\Decode\Popcode.tpp"\ + {$(INCLUDE)}"\Decode\Prefix.hpp"\ + {$(INCLUDE)}"\Decode\Purepfx.hpp"\ + {$(INCLUDE)}"\Decode\Value.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\excptdlg.hpp"\ + {$(INCLUDE)}"\.\Excpthk.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Decode\Base.hpp"\ + {$(INCLUDE)}"\Decode\Disasm.hpp"\ + {$(INCLUDE)}"\Decode\Extrinfo.hpp"\ + {$(INCLUDE)}"\Decode\Isize.hpp"\ + {$(INCLUDE)}"\Decode\Lines.hpp"\ + {$(INCLUDE)}"\Decode\Mathcode.hpp"\ + {$(INCLUDE)}"\Decode\Mathcode.tpp"\ + {$(INCLUDE)}"\Decode\Mathinfo.hpp"\ + {$(INCLUDE)}"\Decode\Opcode.hpp"\ + {$(INCLUDE)}"\Decode\Opcode.tpp"\ + {$(INCLUDE)}"\Decode\Opcodes.hpp"\ + {$(INCLUDE)}"\Decode\Popcode.hpp"\ + {$(INCLUDE)}"\Decode\Popcode.tpp"\ + {$(INCLUDE)}"\Decode\Prefix.hpp"\ + {$(INCLUDE)}"\Decode\Purepfx.hpp"\ + {$(INCLUDE)}"\Decode\Value.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "hookproc - Win32 Release" + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Excpthk.cpp +DEP_CPP_EXCPT=\ + {$(INCLUDE)}"\.\Apientry.hpp"\ + {$(INCLUDE)}"\.\Excpthk.hpp"\ + {$(INCLUDE)}"\.\Procaddr.hpp"\ + {$(INCLUDE)}"\.\Procaddr.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Codegen.hpp"\ + {$(INCLUDE)}"\Common\Excpt.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Debug\Context.hpp"\ + {$(INCLUDE)}"\Debug\Except.hpp"\ + {$(INCLUDE)}"\Debug\Excptreg.hpp"\ + {$(INCLUDE)}"\Debug\Savearea.hpp"\ + + +"$(INTDIR)\Excpthk.obj" : $(SOURCE) $(DEP_CPP_EXCPT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Apientry.cpp +DEP_CPP_APIEN=\ + {$(INCLUDE)}"\.\Apientry.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Codegen.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Apientry.obj" : $(SOURCE) $(DEP_CPP_APIEN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msdebug.lib + +!IF "$(CFG)" == "hookproc - Win32 Release" + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msdecode.lib + +!IF "$(CFG)" == "hookproc - Win32 Release" + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\excptdlg.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_EXCPTD=\ + {$(INCLUDE)}"\.\Apientry.hpp"\ + {$(INCLUDE)}"\.\excptdlg.hpp"\ + {$(INCLUDE)}"\.\Excpthk.hpp"\ + {$(INCLUDE)}"\.\Procaddr.hpp"\ + {$(INCLUDE)}"\.\Procaddr.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Codegen.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Excpt.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Debug\Context.hpp"\ + {$(INCLUDE)}"\Debug\Except.hpp"\ + {$(INCLUDE)}"\Debug\Excptreg.hpp"\ + {$(INCLUDE)}"\Debug\Savearea.hpp"\ + {$(INCLUDE)}"\Decode\Base.hpp"\ + {$(INCLUDE)}"\Decode\Disasm.hpp"\ + {$(INCLUDE)}"\Decode\Extrinfo.hpp"\ + {$(INCLUDE)}"\Decode\Isize.hpp"\ + {$(INCLUDE)}"\Decode\Lines.hpp"\ + {$(INCLUDE)}"\Decode\Mathcode.hpp"\ + {$(INCLUDE)}"\Decode\Mathcode.tpp"\ + {$(INCLUDE)}"\Decode\Mathinfo.hpp"\ + {$(INCLUDE)}"\Decode\Opcode.hpp"\ + {$(INCLUDE)}"\Decode\Opcode.tpp"\ + {$(INCLUDE)}"\Decode\Opcodes.hpp"\ + {$(INCLUDE)}"\Decode\Popcode.hpp"\ + {$(INCLUDE)}"\Decode\Popcode.tpp"\ + {$(INCLUDE)}"\Decode\Prefix.hpp"\ + {$(INCLUDE)}"\Decode\Purepfx.hpp"\ + {$(INCLUDE)}"\Decode\Value.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\excptdlg.obj" : $(SOURCE) $(DEP_CPP_EXCPTD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_EXCPTD=\ + {$(INCLUDE)}"\.\excptdlg.hpp"\ + {$(INCLUDE)}"\.\Excpthk.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\excptdlg.obj" : $(SOURCE) $(DEP_CPP_EXCPTD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msdialog.lib + +!IF "$(CFG)" == "hookproc - Win32 Release" + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\frame.asm + +!IF "$(CFG)" == "hookproc - Win32 Release" + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +# Begin Custom Build +InputPath=.\frame.asm +InputName=frame + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/hookproc/HOOKPROC.MDP b/hookproc/HOOKPROC.MDP new file mode 100644 index 0000000..4ca1c17 Binary files /dev/null and b/hookproc/HOOKPROC.MDP differ diff --git a/hookproc/HOOKPROC.PLG b/hookproc/HOOKPROC.PLG new file mode 100644 index 0000000..7308384 --- /dev/null +++ b/hookproc/HOOKPROC.PLG @@ -0,0 +1,27 @@ + + +
+

Build Log

+

+--------------------Configuration: hookproc - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\TEMP\RSP45.tmp" with contents +[ +/nologo /Gz /MTd /GX /ZI /Od /I "\cortex" /I "\parts" /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/hookproc.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"D:\work\HOOKPROC\EXCPTHK.CPP" +] +Creating command line "cl.exe @C:\TEMP\RSP45.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mshook.lib" .\msvcobj\Apientry.obj .\msvcobj\enumdesk.obj .\msvcobj\enumstation.obj .\msvcobj\enumwin.obj .\msvcobj\Msghook.obj .\msvcobj\ofnhook.obj .\msvcobj\EXCPTHK.OBJ " +

Output Window

+Compiling... +EXCPTHK.CPP +Creating library... + + + +

Results

+mshook.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/hookproc/MAIN.CPP b/hookproc/MAIN.CPP new file mode 100644 index 0000000..6012f73 --- /dev/null +++ b/hookproc/MAIN.CPP @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Desktop mainDesktop("Default"); + if(!mainDesktop.isOkay())return false; + + WindowStationEnumerator windowStationEnumerator; + windowStationEnumerator.enumerateWindowStations(); + for(int index=0;index +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/hookproc/MAINWND.CPP b/hookproc/MAINWND.CPP new file mode 100644 index 0000000..d275aab --- /dev/null +++ b/hookproc/MAINWND.CPP @@ -0,0 +1,117 @@ +#include +#include +#include +#include + +char MainWindow::szClassName[]="PROTO"; +char MainWindow::szMenuName[]=""; + +MainWindow::MainWindow(void) +: mPaintHandler(this,&MainWindow::paintHandler), + mDestroyHandler(this,&MainWindow::destroyHandler), + mCommandHandler(this,&MainWindow::commandHandler), + mKeyDownHandler(this,&MainWindow::keyDownHandler), + mSizeHandler(this,&MainWindow::sizeHandler), + mCreateHandler(this,&MainWindow::createHandler) +{ + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + Window::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + Window::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + Window::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + Window::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + Window::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + Window::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); +} + +void MainWindow::removeHandlers(void) +{ + Window::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + Window::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + Window::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + Window::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + Window::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + Window::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); +} + +void MainWindow::registerClass(void)const +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + createControls(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + Rect frameRect(30,30,100,100); + ::DrawFocusRect((PureDevice&)paintInfo,&((RECT&)frameRect)); + return (CallbackData::ReturnType)FALSE; +} + +void MainWindow::createControls(void) +{ +} + diff --git a/hookproc/MAINWND.HPP b/hookproc/MAINWND.HPP new file mode 100644 index 0000000..546c5c9 --- /dev/null +++ b/hookproc/MAINWND.HPP @@ -0,0 +1,57 @@ +#ifndef _HOOKPROC_MAINWINDOW_HPP_ +#define _HOOKPROC_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _HOOKPROC_MESSAGEHOOK_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(void); + virtual ~MainWindow(); + int messageLoop(void)const; + static String className(void); +private: + enum{TimerID=0}; + void createControls(void); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + + static char szClassName[]; + static char szMenuName[]; + MsgHook mMsgHook; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} + +inline +int MainWindow::messageLoop(void)const +{ + return Window::messageLoop(); +} +#endif diff --git a/hookproc/MSGHOOK.CPP b/hookproc/MSGHOOK.CPP new file mode 100644 index 0000000..8a4682a --- /dev/null +++ b/hookproc/MSGHOOK.CPP @@ -0,0 +1,22 @@ +#include + +MsgHook::~MsgHook() +{ + if(!mhPrevHook)return; + ::UnhookWindowsHookEx(mhPrevHook); + mhPrevHook=0; +} + +int MsgHook::entryProc(int code,WPARAM wParam,LPARAM lParam) +{ + if(code<0)return ::CallNextHookEx(mhPrevHook,code,wParam,lParam); + if(!hookProc(code,wParam,lParam))::CallNextHookEx(mhPrevHook,code,wParam,lParam); + return FALSE; +} + +// *** virtuals + +int MsgHook::hookProc(int /*code*/,WPARAM /*wParam*/,LPARAM /*lParam*/) +{ + return FALSE; +} diff --git a/hookproc/MSGHOOK.HPP b/hookproc/MSGHOOK.HPP new file mode 100644 index 0000000..d668c05 --- /dev/null +++ b/hookproc/MSGHOOK.HPP @@ -0,0 +1,41 @@ +#ifndef _HOOKPROC_MESSAGEHOOK_HPP_ +#define _HOOKPROC_MESSAGEHOOK_HPP_ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#include +#endif +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#include +#endif + +class MsgHook; +typedef ProcAddress MessageHook; + +class MsgHook : protected APIEntry, private MessageHook +{ +public: + MsgHook(void); + virtual ~MsgHook(); +protected: + virtual int hookProc(int code,WPARAM wParam,LPARAM lParam); +private: + enum {ParamLength=12}; + MsgHook &operator=(const MsgHook &someMsgHook); + int entryProc(int code,WPARAM wParam,LPARAM lParam); + + HHOOK mhPrevHook; +}; + +inline +MsgHook::MsgHook(void) +: APIEntry(ParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&MsgHook::entryProc)), + mhPrevHook(0) +{ + mhPrevHook=::SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)codeBase(),(HINSTANCE)::GetModuleHandle(0),::GetCurrentThreadId()); +} + +inline +MsgHook &MsgHook::operator=(const MsgHook &someMsgHook) +{ // no implementation + return *this; +} +#endif diff --git a/hookproc/OFNHOOK.CPP b/hookproc/OFNHOOK.CPP new file mode 100644 index 0000000..90c7c88 --- /dev/null +++ b/hookproc/OFNHOOK.CPP @@ -0,0 +1,22 @@ +#include + +OFNHook::~OFNHook() +{ +} + +UINT OFNHook::entryProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam) +{ + if(!mhDlg) + { + mhDlg=hDlg; + mhParent=::GetParent(mhDlg); + } + return hookProc(hDlg,uiMsg,wParam,lParam); +} + +// *** virtuals + +UINT OFNHook::hookProc(HWND /*hDlg*/,UINT /*uiMsg*/,WPARAM /*wParam*/,LPARAM /*lParam*/) +{ + return FALSE; +} diff --git a/hookproc/OFNHOOK.HPP b/hookproc/OFNHOOK.HPP new file mode 100644 index 0000000..fa1cbf0 --- /dev/null +++ b/hookproc/OFNHOOK.HPP @@ -0,0 +1,61 @@ +#ifndef _HOOKPROC_OFNHOOK_HPP_ +#define _HOOKPROC_OFNHOOK_HPP_ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#include +#endif +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#include +#endif + +class OFNHook; +typedef ProcAddress OpenFileHook; + +class OFNHook : protected APIEntry, private OpenFileHook +{ +public: + OFNHook(void); + virtual ~OFNHook(); + DWORD getHookAddress(void); + HWND getHandle(void)const; + HWND getParent(void)const; +protected: + virtual UINT hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam); +private: + enum {ParamLength=16}; + OFNHook &operator=(const OFNHook &someOFNHook); + UINT entryProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam); + HWND mhDlg; + HWND mhParent; +}; + +inline +OFNHook::OFNHook(void) +: APIEntry(ParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&OFNHook::entryProc)), + mhDlg(0), mhParent(0) +{ +} + +inline +OFNHook &OFNHook::operator=(const OFNHook &someOFNHook) +{ // no implementation + return *this; +} + +inline +DWORD OFNHook::getHookAddress(void) +{ + return codeBase(); +} + +inline +HWND OFNHook::getHandle(void)const +{ + return mhDlg; +} + +inline +HWND OFNHook::getParent(void)const +{ + return mhParent; +} +#endif diff --git a/hookproc/PROCADDR.HPP b/hookproc/PROCADDR.HPP new file mode 100644 index 0000000..a8955ef --- /dev/null +++ b/hookproc/PROCADDR.HPP @@ -0,0 +1,20 @@ +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#define _HOOKPROC_PROCADDRESS_HPP_ +#if defined(_MSC_VER) +#pragma warning(disable:4700) +#endif + +template +class ProcAddress +{ +public: + typedef void (T::*LPFNMETHODVOID)(void); + ProcAddress(void); + virtual ~ProcAddress(); + int getProcAddress(LPFNMETHODVOID lpfnMethod); +private: +}; +#if defined(_MSC_VER) +#include +#endif +#endif diff --git a/hookproc/PROCADDR.TPP b/hookproc/PROCADDR.TPP new file mode 100644 index 0000000..8eed9eb --- /dev/null +++ b/hookproc/PROCADDR.TPP @@ -0,0 +1,34 @@ + +template +ProcAddress::ProcAddress(void) +{ +} + +template +ProcAddress::~ProcAddress() +{ +} + +#if defined(_MSC_VER) +template +int ProcAddress::getProcAddress(LPFNMETHODVOID lpfnMethod) +{ + typedef void (*LPFNPROCVOID)(void); + int methodAddress=*((int*)&lpfnMethod); + return methodAddress; +} +#else +template +int ProcAddress::getProcAddress(void (T::* /*lpfnMethod*/ )(void)) +{ + typedef void (*LPFNPROCVOID)(void); + int methodAddress; + char assign[]={0x8B,0x5D,0x0C,0xC3}; + char address[]={0x00,0x00,0x00,0x00}; + *((DWORD*)address)=(DWORD)((DWORD*)assign); + ((LPFNPROCVOID)address)(); + return methodAddress; +} +#endif + + diff --git a/hookproc/Release/hookexe.exe b/hookproc/Release/hookexe.exe new file mode 100644 index 0000000..9bcb4ed Binary files /dev/null and b/hookproc/Release/hookexe.exe differ diff --git a/hookproc/Release/hookproc.lib b/hookproc/Release/hookproc.lib new file mode 100644 index 0000000..9102532 Binary files /dev/null and b/hookproc/Release/hookproc.lib differ diff --git a/hookproc/Release/vc50.idb b/hookproc/Release/vc50.idb new file mode 100644 index 0000000..7c4c5f1 Binary files /dev/null and b/hookproc/Release/vc50.idb differ diff --git a/hookproc/Release/vc60.idb b/hookproc/Release/vc60.idb new file mode 100644 index 0000000..0f1ad7b Binary files /dev/null and b/hookproc/Release/vc60.idb differ diff --git a/hookproc/SCRAPS.TXT b/hookproc/SCRAPS.TXT new file mode 100644 index 0000000..df1bcd4 --- /dev/null +++ b/hookproc/SCRAPS.TXT @@ -0,0 +1,177 @@ +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + if(Main::previousProcessInstance()) + { + HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); + if(!hWnd) + { + ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); + return FALSE; + } + ::PostMessage(hWnd,WM_REACTIVATE,0,0L); + return FALSE; + } + MainWindow applicationWindow; + return applicationWindow.messageLoop(); +} + + + + +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + ExceptDlg exceptDlg; + exceptDlg.performDialog(0L); + return FALSE; +} + +#if 0 + + + + + staticDS.className(staticControl); + staticDS.titleText("ds:"); + staticDS.style(WS_CHILD|WS_VISIBLE); + staticDS.posRect(Rect(282,10,13,8)); + staticDS.itemID(-1); + + staticES.className(staticControl); + staticES.titleText("es:"); + staticES.style(WS_CHILD|WS_VISIBLE); + staticES.posRect(Rect(282,22,12,8)); + staticES.itemID(-1); + + staticFS.className(staticControl); + staticFS.titleText("fs:"); + staticFS.style(WS_CHILD|WS_VISIBLE); + staticFS.posRect(Rect(282,35,13,8)); + staticFS.itemID(-1); + + staticGS.className(staticControl); + staticGS.titleText("gs:"); + staticGS.style(WS_CHILD|WS_VISIBLE); + staticGS.posRect(Rect(282,48,13,8)); + staticGS.itemID(-1); + + +class ExceptionHandler +{ +public: + ExceptionHandler(void); + virtual ~ExceptionHandler(); +private: + static PureExceptionRegistration::ExceptionDisposition _cdecl exceptionHandler(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext); + + PureExceptionRegistration *mpCurrentExceptionFrame; + ExceptionRegistration mExceptionFrame; +}; + +ExceptionHandler::ExceptionHandler(void) +: mpCurrentExceptionFrame(0) +{ + installFrame(&mpCurrentExceptionFrame); + mExceptionFrame.prevRegistration(mpCurrentExceptionFrame); + mExceptionFrame.currHandler(ExceptionHandler::exceptionHandler); + mpCurrentExceptionFrame=&((PureExceptionRegistration&)mExceptionFrame); + PureExceptionRegistration *pCurrentExceptionFrame; + pCurrentExceptionFrame=mpCurrentExceptionFrame; + _asm mov eax,pCurrentExceptionFrame; + _asm mov fs:[0],eax +} + +ExceptionHandler::~ExceptionHandler() +{ +// PureExceptionRegistration *pCurrentExceptionFrame; +// pCurrentExceptionFrame=mpCurrentExceptionFrame; +// _asm mov eax,pCurrentExceptionFrame; +// _asm mov fs:[0],eax +} + +PureExceptionRegistration::ExceptionDisposition ExceptionHandler::exceptionHandler(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext) +{ + ExceptionRecord exceptionRecord(*pExceptionRecord); + + ExceptDlg exceptDlg; + exceptDlg.performDialog(exceptionRecord,*pContext); + return PureExceptionRegistration::ExceptionContinueSearch; +} + +// **************************************************************************************************** + + + + PureExceptionRegistration *pCurrentExceptionFrame; + ExceptionRegistration exceptionFrame; +// _asm mov eax,fs:[0]; +// _asm mov pCurrentExceptionFrame,eax + + pCurrentExceptionFrame=getFS(); + + exceptionFrame.prevRegistration(pCurrentExceptionFrame); + exceptionFrame.currHandler(exceptionHandler); + pCurrentExceptionFrame=&((PureExceptionRegistration&)exceptionFrame); + setFS(pCurrentExceptionFrame); +// _asm mov eax,pCurrentExceptionFrame; +// _asm mov fs:[0],eax +//#endif + + char *ptrData=0; + *ptrData=0; + return FALSE; + + + + + + + +#include +#include +#include + +extern "C" +{ +PureExceptionRegistration *getFS(void); +void setFS(PureExceptionRegistration *pPureExceptionRegistration); +} + +PureExceptionRegistration::ExceptionDisposition _cdecl exceptionHandler(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext); + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + PureExceptionRegistration *pCurrentExceptionFrame; + ExceptionRegistration exceptionFrame; + pCurrentExceptionFrame=getFS(); + exceptionFrame.prevRegistration(pCurrentExceptionFrame); + exceptionFrame.currHandler(exceptionHandler); + pCurrentExceptionFrame=&((PureExceptionRegistration&)exceptionFrame); + setFS(pCurrentExceptionFrame); + + char *ptrData=0; + *ptrData=0; + return FALSE; +} + +PureExceptionRegistration::ExceptionDisposition _cdecl exceptionHandler(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext) +{ + ExceptionRecord exceptionRecord(*pExceptionRecord); + + ExceptDlg exceptDlg; + exceptDlg.performDialog(exceptionRecord,*pContext); + return PureExceptionRegistration::ExceptionContinueSearch; +} diff --git a/hookproc/STDTMPL.CPP b/hookproc/STDTMPL.CPP new file mode 100644 index 0000000..8844c52 --- /dev/null +++ b/hookproc/STDTMPL.CPP @@ -0,0 +1,21 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MainWindow; + +typedef Callback a; +typedef ProcAddress b; +#endif diff --git a/hookproc/TEST.RC b/hookproc/TEST.RC new file mode 100644 index 0000000..7196ccb --- /dev/null +++ b/hookproc/TEST.RC @@ -0,0 +1,47 @@ +/**************************************************************************** + + +test.rc + +produced by Borland Resource Workshop + + +*****************************************************************************/ + +#define DIALOG_1 1 +#define IDC_EDIT1 101 +#define IDC_EDIT8 108 +#define IDC_EDIT7 107 +#define IDC_EDIT6 106 +#define IDC_EDIT5 105 +#define IDC_EDIT4 104 +#define IDC_EDIT3 103 +#define IDC_EDIT2 102 + +DIALOG_1 DIALOG 6, 15, 207, 111 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "DIALOG_1" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 148, 6, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 148, 24, 50, 14 + PUSHBUTTON "Help", IDHELP, 148, 42, 50, 14 + EDITTEXT IDC_EDIT1, 36, 31, 10, 12 + EDITTEXT IDC_EDIT2, 46, 31, 10, 12 + EDITTEXT IDC_EDIT3, 56, 31, 10, 12 + EDITTEXT IDC_EDIT4, 66, 31, 10, 12 + EDITTEXT IDC_EDIT5, 76, 31, 10, 12 + EDITTEXT IDC_EDIT6, 86, 31, 10, 12 + EDITTEXT IDC_EDIT7, 96, 31, 10, 12 + EDITTEXT IDC_EDIT8, 106, 31, 10, 12 + LTEXT "cf", -1, 38, 45, 6, 8 + CTEXT "Flags", -1, 47, 20, 60, 8 + LTEXT "zf", -1, 48, 45, 6, 8 + LTEXT "sf", -1, 57, 45, 6, 8 + LTEXT "ov", -1, 66, 45, 8, 8 + LTEXT "pf", -1, 77, 45, 6, 8 + LTEXT "af", -1, 87, 45, 6, 8 + LTEXT "df", -1, 97, 45, 6, 8 + LTEXT "if", -1, 109, 45, 6, 8 +} + diff --git a/hookproc/TEST.RWS b/hookproc/TEST.RWS new file mode 100644 index 0000000..c041bde Binary files /dev/null and b/hookproc/TEST.RWS differ diff --git a/hookproc/WindowStationEnumerator.hpp b/hookproc/WindowStationEnumerator.hpp new file mode 100644 index 0000000..b5a1f4e --- /dev/null +++ b/hookproc/WindowStationEnumerator.hpp @@ -0,0 +1,55 @@ +#ifndef _HOOKPROC_WINDOWSTATIONENUMERATOR_HPP_ +#define _HOOKPROC_WINDOWSTATIONENUMERATOR_HPP_ +#ifndef _HOOKPROC_ENUMWINDOWSTATIONHOOK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class WindowStationEnumerator : public EnumWindowStationHook, public Block +{ +public: + WindowStationEnumerator(); + virtual ~WindowStationEnumerator(); + bool enumerateWindowStations(void); + DWORD size(void)const; +protected: + virtual bool enumWindowStationProc(const String &strWindowStation); +private: +}; + +inline +WindowStationEnumerator::WindowStationEnumerator() +{ +} + +inline +WindowStationEnumerator::~WindowStationEnumerator() +{ +} + +inline +bool WindowStationEnumerator::enumerateWindowStations(void) +{ + remove(); + ::EnumWindowStations((LPFNENUMWINDOWSTATIONPROC)getHookAddress(),0L); + return Block::size()?true:false; +} + +inline +bool WindowStationEnumerator::enumWindowStationProc(const String &strWindowStation) +{ + insert(&strWindowStation); + return true; +} + +inline +DWORD WindowStationEnumerator::size(void)const +{ + return Block::size(); +} +#endif diff --git a/hookproc/enumdesk.cpp b/hookproc/enumdesk.cpp new file mode 100644 index 0000000..5a5b6d6 --- /dev/null +++ b/hookproc/enumdesk.cpp @@ -0,0 +1,19 @@ +#include +#include + +EnumDesktopHook::~EnumDesktopHook() +{ +} + +bool EnumDesktopHook::entryProc(LPSTR lpszDesktop,LPARAM lParam) +{ + return enumDesktopProc(String(lpszDesktop)); +} + +// *** virtuals + +bool EnumDesktopHook::enumDesktopProc(const String &strDesktop) +{ + ::OutputDebugString(strDesktop+String("\n")); + return true; +} diff --git a/hookproc/enumdesk.hpp b/hookproc/enumdesk.hpp new file mode 100644 index 0000000..3547500 --- /dev/null +++ b/hookproc/enumdesk.hpp @@ -0,0 +1,45 @@ +#ifndef _HOOKPROC_ENUMDESKTOPHOOK_HPP_ +#define _HOOKPROC_ENUMDESKTOPHOOK_HPP_ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#include +#endif +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#include +#endif + +class EnumDesktopHook; +typedef ProcAddress EnumDesktopHookProc; + +class EnumDesktopHook : protected APIEntry, private EnumDesktopHookProc +{ +public: + typedef int (__stdcall *LPFNENUMDESKTOPPROC)(LPTSTR lpszDesktop,LPARAM lParam); + EnumDesktopHook(void); + virtual ~EnumDesktopHook(); + DWORD getHookAddress(void); +protected: + virtual bool enumDesktopProc(const String &strDesktop); +private: + enum {ParamLength=8}; + EnumDesktopHook &operator=(const EnumDesktopHook &someEnumDesktopHook); + bool entryProc(LPTSTR lpszDesktop,LPARAM lParam); +}; + +inline +EnumDesktopHook::EnumDesktopHook(void) +: APIEntry(ParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&EnumDesktopHook::entryProc)) +{ +} + +inline +EnumDesktopHook &EnumDesktopHook::operator=(const EnumDesktopHook &someEnumDesktopHook) +{ // no implementation + return *this; +} + +inline +DWORD EnumDesktopHook::getHookAddress(void) +{ + return codeBase(); +} +#endif \ No newline at end of file diff --git a/hookproc/enumstation.cpp b/hookproc/enumstation.cpp new file mode 100644 index 0000000..62ca6d6 --- /dev/null +++ b/hookproc/enumstation.cpp @@ -0,0 +1,19 @@ +#include +#include + +EnumWindowStationHook::~EnumWindowStationHook() +{ +} + +bool EnumWindowStationHook::entryProc(LPSTR lpszWindowStation,LPARAM lParam) +{ + return enumWindowStationProc(String(lpszWindowStation)); +} + +// *** virtuals + +bool EnumWindowStationHook::enumWindowStationProc(const String &strWindowStation) +{ + ::OutputDebugString(String("'")+strWindowStation+String("'\n")); + return true; +} diff --git a/hookproc/enumstation.hpp b/hookproc/enumstation.hpp new file mode 100644 index 0000000..667a403 --- /dev/null +++ b/hookproc/enumstation.hpp @@ -0,0 +1,45 @@ +#ifndef _HOOKPROC_ENUMWINDOWSTATIONHOOK_HPP_ +#define _HOOKPROC_ENUMWINDOWSTATIONHOOK_HPP_ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#include +#endif +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#include +#endif + +class EnumWindowStationHook; +typedef ProcAddress EnumWindowStationHookProc; + +class EnumWindowStationHook : protected APIEntry, private EnumWindowStationHookProc +{ +public: + typedef int (__stdcall *LPFNENUMWINDOWSTATIONPROC)(LPTSTR lpszWindowStation,LPARAM lParam); + EnumWindowStationHook(void); + virtual ~EnumWindowStationHook(); + DWORD getHookAddress(void); +protected: + virtual bool enumWindowStationProc(const String &strWindowStation); +private: + enum {ParamLength=8}; + EnumWindowStationHook &operator=(const EnumWindowStationHook &someEnumWindowStationHook); + bool entryProc(LPTSTR lpszWIndowStation,LPARAM lParam); +}; + +inline +EnumWindowStationHook::EnumWindowStationHook(void) +: APIEntry(ParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&EnumWindowStationHook::entryProc)) +{ +} + +inline +EnumWindowStationHook &EnumWindowStationHook::operator=(const EnumWindowStationHook &someEnumWindowStationHook) +{ // no implementation + return *this; +} + +inline +DWORD EnumWindowStationHook::getHookAddress(void) +{ + return codeBase(); +} +#endif \ No newline at end of file diff --git a/hookproc/excpthk.cpp b/hookproc/excpthk.cpp new file mode 100644 index 0000000..37e6283 --- /dev/null +++ b/hookproc/excpthk.cpp @@ -0,0 +1,11 @@ +#include + +PureExceptionRegistration::ExceptionDisposition ExcptHook::entryProc(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext) +{ + return exceptionHandler(pExceptionRecord,pEstablisherFrame,pContext,pDispatcherContext); +} + +PureExceptionRegistration::ExceptionDisposition ExcptHook::exceptionHandler(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext) +{ + return PureExceptionRegistration::ExceptionContinueSearch; +} diff --git a/hookproc/excpthk.hpp b/hookproc/excpthk.hpp new file mode 100644 index 0000000..e096dce --- /dev/null +++ b/hookproc/excpthk.hpp @@ -0,0 +1,80 @@ +#ifndef _HOOKPROC_EXCEPTIONHOOK_HPP_ +#define _HOOKPROC_EXCEPTIONHOOK_HPP_ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#include +#endif +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#include +#endif +#ifndef _DEBUG_EXCEPTIONREGISTRATION_HPP_ +#include +#endif + +class ExcptHook; +typedef ProcAddress ExceptionHook; + +extern "C" +{ +void registerHandler(PureExceptionRegistration::ExceptionHandler pExceptionHandler); +void unregisterHandler(void); +} + +class ExcptHook : protected APIEntry, private ExceptionHook +{ +public: + ExcptHook(void); + virtual ~ExcptHook(); + void registerHandler(void); +protected: + virtual PureExceptionRegistration::ExceptionDisposition exceptionHandler(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext); +private: + enum {ParamLength=16}; + ExcptHook &operator=(const ExcptHook &someExcptHook); + PureExceptionRegistration::ExceptionDisposition entryProc(EXCEPTION_RECORD *pExceptionRecord,void *pEstablisherFrame,CONTEXT *pContext,void *pDispatcherContext); + WORD isRegistered(void)const; + void isRegistered(WORD isRegistered); + + WORD mIsRegistered; +}; + +inline +ExcptHook::ExcptHook(void) +: APIEntry(ParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&ExcptHook::entryProc)), + mIsRegistered(FALSE) +{ +} + +inline +ExcptHook::~ExcptHook() +{ + if(!isRegistered())return; + ::unregisterHandler(); +} + +inline +ExcptHook &ExcptHook::operator=(const ExcptHook &someExcptHook) +{ // no implementation + return *this; +} + +inline +void ExcptHook::registerHandler(void) +{ + if(isRegistered())return; + ::registerHandler((PureExceptionRegistration::ExceptionHandler)codeBase()); + isRegistered(TRUE); +} + +inline +WORD ExcptHook::isRegistered(void)const +{ + return mIsRegistered; +} + +inline +void ExcptHook::isRegistered(WORD isRegistered) +{ + mIsRegistered=isRegistered; +} +#endif + diff --git a/hookproc/hookexe.dsp b/hookproc/hookexe.dsp new file mode 100644 index 0000000..2a8081e --- /dev/null +++ b/hookproc/hookexe.dsp @@ -0,0 +1,135 @@ +# Microsoft Developer Studio Project File - Name="hookproc" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=hookproc - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "hookexe.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "hookexe.mak" CFG="hookproc - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "hookproc - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "hookproc - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "hookproc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /I /work" /I /parts" " " /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "hookproc - Win32 Release" +# Name "hookproc - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\enumstation.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\mshook.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Apientry.hpp +# End Source File +# Begin Source File + +SOURCE=.\excptdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Excpthk.hpp +# End Source File +# Begin Source File + +SOURCE=.\Procaddr.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/hookproc/hookproc.002 b/hookproc/hookproc.002 new file mode 100644 index 0000000..23ea787 --- /dev/null +++ b/hookproc/hookproc.002 @@ -0,0 +1,108 @@ +# Microsoft Developer Studio Project File - Name="hookproc" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=hookproc - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak" CFG="hookproc - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "hookproc - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "hookproc - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "hookproc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +RSC=rc.exe +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +RSC=rc.exe +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /I "\cortex" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mshook.lib" + +!ENDIF + +# Begin Target + +# Name "hookproc - Win32 Release" +# Name "hookproc - Win32 Debug" +# Begin Source File + +SOURCE=.\Apientry.cpp +# End Source File +# Begin Source File + +SOURCE=.\enumdesk.cpp +# End Source File +# Begin Source File + +SOURCE=.\enumstation.cpp +# End Source File +# Begin Source File + +SOURCE=.\enumwin.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msghook.cpp +# End Source File +# Begin Source File + +SOURCE=.\ofnhook.cpp +# End Source File +# End Target +# End Project diff --git a/hookproc/hookproc.dsp b/hookproc/hookproc.dsp new file mode 100644 index 0000000..aef384a --- /dev/null +++ b/hookproc/hookproc.dsp @@ -0,0 +1,108 @@ +# Microsoft Developer Studio Project File - Name="hookproc" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=hookproc - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak" CFG="hookproc - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "hookproc - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "hookproc - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "hookproc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Gz /MTd /GX /ZI /Od /I "\cortex" /I "\parts" /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mshook.lib" + +!ENDIF + +# Begin Target + +# Name "hookproc - Win32 Release" +# Name "hookproc - Win32 Debug" +# Begin Source File + +SOURCE=.\Apientry.cpp +# End Source File +# Begin Source File + +SOURCE=.\enumdesk.cpp +# End Source File +# Begin Source File + +SOURCE=.\enumstation.cpp +# End Source File +# Begin Source File + +SOURCE=.\enumwin.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msghook.cpp +# End Source File +# Begin Source File + +SOURCE=.\ofnhook.cpp +# End Source File +# End Target +# End Project diff --git a/hookproc/hookproc.dsw b/hookproc/hookproc.dsw new file mode 100644 index 0000000..70de63d --- /dev/null +++ b/hookproc/hookproc.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "hookproc"=.\hookproc.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/hookproc/hookproc.mak b/hookproc/hookproc.mak new file mode 100644 index 0000000..09fb514 --- /dev/null +++ b/hookproc/hookproc.mak @@ -0,0 +1,507 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on hookproc.dsp +!IF "$(CFG)" == "" +CFG=hookproc - Win32 Debug +!MESSAGE No configuration specified. Defaulting to hookproc - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "hookproc - Win32 Release" && "$(CFG)" !=\ + "hookproc - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "hookproc.mak" CFG="hookproc - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "hookproc - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "hookproc - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe + +!IF "$(CFG)" == "hookproc - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\hookproc.lib" + +!ELSE + +ALL : "$(OUTDIR)\hookproc.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Apientry.obj" + -@erase "$(INTDIR)\enumdesk.obj" + -@erase "$(INTDIR)\enumstation.obj" + -@erase "$(INTDIR)\enumwin.obj" + -@erase "$(INTDIR)\Msghook.obj" + -@erase "$(INTDIR)\ofnhook.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\hookproc.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +RSC=rc.exe +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\hookproc.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\hookproc.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\hookproc.lib" +LIB32_OBJS= \ + "$(INTDIR)\Apientry.obj" \ + "$(INTDIR)\enumdesk.obj" \ + "$(INTDIR)\enumstation.obj" \ + "$(INTDIR)\enumwin.obj" \ + "$(INTDIR)\Msghook.obj" \ + "$(INTDIR)\ofnhook.obj" + +"$(OUTDIR)\hookproc.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +!IF "$(RECURSE)" == "0" + +ALL : "..\exe\mshook.lib" + +!ELSE + +ALL : "..\exe\mshook.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Apientry.obj" + -@erase "$(INTDIR)\enumdesk.obj" + -@erase "$(INTDIR)\enumstation.obj" + -@erase "$(INTDIR)\enumwin.obj" + -@erase "$(INTDIR)\Msghook.obj" + -@erase "$(INTDIR)\ofnhook.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "..\exe\mshook.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +RSC=rc.exe +CPP_PROJ=/nologo /Zp1 /MTd /GX /Zi /Od /I "\cortex" /I "\parts" /D "WIN32" /D\ + "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)\hookproc.pch"\ + /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\hookproc.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"..\exe\mshook.lib" +LIB32_OBJS= \ + "$(INTDIR)\Apientry.obj" \ + "$(INTDIR)\enumdesk.obj" \ + "$(INTDIR)\enumstation.obj" \ + "$(INTDIR)\enumwin.obj" \ + "$(INTDIR)\Msghook.obj" \ + "$(INTDIR)\ofnhook.obj" + +"..\exe\mshook.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "hookproc - Win32 Release" || "$(CFG)" ==\ + "hookproc - Win32 Debug" +SOURCE=.\Apientry.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_APIEN=\ + ".\apientry.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Apientry.obj" : $(SOURCE) $(DEP_CPP_APIEN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_APIEN=\ + ".\apientry.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Apientry.obj" : $(SOURCE) $(DEP_CPP_APIEN) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\enumdesk.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_ENUMD=\ + ".\apientry.hpp"\ + ".\enumdesk.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\enumdesk.obj" : $(SOURCE) $(DEP_CPP_ENUMD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_ENUMD=\ + ".\apientry.hpp"\ + ".\enumdesk.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\enumdesk.obj" : $(SOURCE) $(DEP_CPP_ENUMD) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\enumstation.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_ENUMS=\ + ".\apientry.hpp"\ + ".\enumstation.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\enumstation.obj" : $(SOURCE) $(DEP_CPP_ENUMS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_ENUMS=\ + ".\apientry.hpp"\ + ".\enumstation.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\enumstation.obj" : $(SOURCE) $(DEP_CPP_ENUMS) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\enumwin.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_ENUMW=\ + ".\apientry.hpp"\ + ".\enumwin.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\enumwin.obj" : $(SOURCE) $(DEP_CPP_ENUMW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_ENUMW=\ + ".\apientry.hpp"\ + ".\enumwin.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\enumwin.obj" : $(SOURCE) $(DEP_CPP_ENUMW) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Msghook.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_MSGHO=\ + ".\apientry.hpp"\ + ".\msghook.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Msghook.obj" : $(SOURCE) $(DEP_CPP_MSGHO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_MSGHO=\ + ".\apientry.hpp"\ + ".\msghook.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Msghook.obj" : $(SOURCE) $(DEP_CPP_MSGHO) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\ofnhook.cpp + +!IF "$(CFG)" == "hookproc - Win32 Release" + +DEP_CPP_OFNHO=\ + ".\apientry.hpp"\ + ".\ofnhook.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\ofnhook.obj" : $(SOURCE) $(DEP_CPP_OFNHO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "hookproc - Win32 Debug" + +DEP_CPP_OFNHO=\ + ".\apientry.hpp"\ + ".\ofnhook.hpp"\ + ".\procaddr.hpp"\ + ".\procaddr.tpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\codegen.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\ofnhook.obj" : $(SOURCE) $(DEP_CPP_OFNHO) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/http/AF11.JPG b/http/AF11.JPG new file mode 100644 index 0000000..e69de29 diff --git a/http/AMEX.TXT b/http/AMEX.TXT new file mode 100644 index 0000000..4e0e669 --- /dev/null +++ b/http/AMEX.TXT @@ -0,0 +1,807 @@ +N1=Ackerley Commun Inc;AK +N2=Acme United Cp;ACU +N3=Action Ind Inc;ACZ +N4=Adam Resources & Energy Inc;AE +N5=Advanced Financial;AVF +N6=Advanced Magnetics Inc;AVM +N7=Advanced Medical Inc;AMA +N8=Advanced Photonix Inc Class A;API +N9=Advanced Therapeutic Systems;ATH +N10=Aerosonics Cp;AIM +N11=Aim Strategic Income Fund Inc;AST +N12=Air & Water Technology Cp Class A;AWT +N13=Air Methods Corp;AIRM +N14=Aircoa Hotel Partners;AHT +N15=Alamco Inc;AXO +N16=Alba Waldensian Inc;AWS +N17=Alcoa Pf;AA+ +N18=Alfin Inc;AFN +N19=Allied Digital Tech;ADT +N20=Allied Research Cp;ALR +N21=Allou Health & Beauty Cl A;ALU +N22=Alpha Ind;AHA +N23=Alpine Group Inc;AGI +N24=AMC Entertainment Inc;AEN +N25=Amdahl;AMH +N26=Ame Insured Mtg Inv 84;AIA +N27=Amer Bank Of Connecticut;BKC +N28=Amer Biltrite Inc;ABL +N29=Amer Body Armor & Equipment;ABE +N30=Amer Explor Co;AX +N31=Amer Insured Mtg Inv 85;AII +N32=Amer Insured Mtg Inv 86;AIJ +N33=Amer Insured Mtg Inv 88;AIK +N34=Amer Israeli Paper Mills;AIP +N35=Amer List Cp;AMZ +N36=Amer Paging Inc;APP +N37=Amer Real Estate Investment;REA +N38=Amer Restaurants Partners LP;RMC +N39=Amer Science Engineering;ASE +N40=Amer Shared Hospital Services;AMS +N41=Amer Technical Ceramics Cp;AMK +N42=America First Prep Fund 2 Lp;PF +N43=Ampal Amer Israel Cl A;AISA +N44=Amwest Ins Gr Inc;AMW +N45=Andrea Electronics Cp;AND +N46=Angeles Mortgage Inv Tr;ANM +N47=Angeles Partcp Mtge Tr;APT +N48=Anuhco Inc;ANU +N49=Aprogenex Inc;APG +N50=Arc Intl Inc;ATV +N51=Arizona Land Incm Cp Cl A;AZL +N52=Arrhythia Research Technology;HRT +N53=Arrow Automotive Ind Inc;AI +N54=ASR Investments Corp;ASR +N55=Assisted Living Concepts Inc;ALF +N56=Astrotech Intl Cp;AIX +N57=AT Plastics Inc;ATJ +N58=Atari Corp;ATC +N59=Atlantis Plastics Inc Cl A;AGH +N60=Audiovox Cp Cl A;VOX +N61=Audits & Surveys Inc;ASW +N62=Aurora Electronics Inc;AUR +N63=Aviva Petroleum;AVV +N64=Azco Mining;AZC +N65=B & H Maritime Carriers Ltd;BHM +N66=B & H Ocean Carriers Ltd;BHO +N67=B A T Industries ADR;BTI +N68=B Stearns CUBS;KBB +N69=Badger Meter Inc;BMI +N70=Baker (Michael) Cp;BKR +N71=Balchem Cp;BCP +N72=Baldwin Technology Co;BLD +N73=Bancroft Convertible Fund Inc;BCV +N74=Banister Foundation Inc;BAN +N75=Bank Of Southington;BSO +N76=Bankers Tr NY Conv;BND +N77=Bankers Trust Dep;BPR +N78=Bankers Trust Shrs Pf;BPB +N79=Banyan Hotel Inv Fd;VHT +N80=Barnwell Ind;BRN +N81=Barr Laboratories Inc;BRL +N82=Barrister Information Cp;BIS +N83=Bay Meadows Operating Co;CJ +N84=Bayou Steel Cp Cl A;BYX +N85=Bear Stearns MRK Chip;MCP +N86=Beard Oil Co;BOC +N87=Bema Gold Corp;BGO +N88=Benchmark Electronics Inc;BHE +N89=Bentley Pharmaceuticals Inc;BNT +N90=Bergstrom Capital Cp;BEM +N91=Besicorp Group Inc;BGI +N92=Bethlehem Cp;BET +N93=BHC Communications Inc Class A;BHC +N94=Binks Mfg Co;BIN +N95=Bio-Rad Laboratories Inc Class A;BIOA +N96=Bio-Rad Labs Cl B;BIOB +N97=Biscayne Apparel;BHA +N98=Blackrock Broad Inv Gr 09 Term;BCT +N99=Blackrock CA Inv Qual Muni Tr;RAA +N100=Blackrock FL Inv Qual Muni Tr;RFA +N101=Blackrock NJ Inv Qual Muni Tr;RNJ +N102=Blackrock NY Inv Qual Muni Tr;RNY +N103=Blair Cp;BL +N104=Blessings Cp;BCO +N105=Blonder Tongue Laboratories;BDR +N106=Boddie Noell Prop;BNP +N107=Bogen Comm Intl Inc;BGN +N108=Bostonfed Bancorp;BFD +N109=Bowl America Inc Cl A;BWLA +N110=Bowmar Instrument Cp;BOM +N111=Bowne & Co Inc;BNE +N112=Brandon Systems Corp;BRA +N113=Brandywine Realty Trust;BDN +N114=Brascan Ltd.;BRSA +N115=Buffton Cp;BFX +N116=Cabletel Communication;TTV +N117=Cablevision Sys Cp Cl A;CVC +N118=Cagles Inc Cl A;CGLA +N119=Calprop Cp;CPP +N120=Calton Inc;CN +N121=Cambrex Cp;CBM +N122=Cancer Treatment Hldgs Inc;CTH +N123=Capital Realty Tax Ex LP I;CRA +N124=Capital Realty Tax Ex LP II;CRB +N125=Capital Realty Tax Ex LP III;CRL +N126=Carmel Container Sys Ord;KML +N127=Castle A M & Co;CAS +N128=Castle Convertible Fund Inc;CVF +N129=Cavalier Homes Inc;CAV +N130=Cdn Marconi Co;CMW +N131=Cdn Occidental Pet;CXY +N132=CE Franklin Ltd;CFK +N133=CEC Resources;CGS +N134=Centennial Technologies;CTN +N135=Centerpoint Properties Corp;CNT +N136=Central Fund Of Can Class A;CEF +N137=Central Securities;CET +N138=CFX Corp;CFX +N139=Chad Therapeutics;CTU +N140=Champion Healthcare Cp;CHC +N141=Chase Corp;CCF +N142=Chesapeake Biological Laboratories;PHD +N143=Cheyenne Software Inc;CYE +N144=Chicago Rivet & Machine Co;CVR +N145=Chieftain Intl Inc;CID +N146=CIM High Yield Securities;CIM +N147=Citadel Holding Cp;CDL +N148=Citisave Financial Cp;CZF +N149=Coast Distrib System;CRV +N150=Coastal Caribbean Oils;CCO +N151=Cognitronics Cp;CGN +N152=Cohen & Steers Reality Income Fund;RIF +N153=Columbia Laboratories Inc;COB +N154=Columbus Energy Corp;EGY +N155=Comforce Corp;CFS +N156=Cominco Ltd;CLT +N157=Commercial Assets Inc;CAX +N158=Competitve Technologies;CTT +N159=Comptek Research;CTK +N160=Computrac Inc;LLB +N161=Comsouth Bancshares;CSB +N162=Concord Fabrics Inc Cl A;CIS +N163=Concord Fabrics Inc Cl B;CISB +N164=Consolidated Tomako Land;CTO +N165=Contl Materials Cp;CUO +N166=Convest Energy Cp;COV +N167=Copley Prop Inc;COP +N168=Cornerstone Bank;CBN +N169=Cornerstone Natural Gas Inc;CGA +N170=Corpus Christi Bancshares;CTZ +N171=Courtaulds Plc ADR;COU +N172=Creative Computer Application;CAP +N173=Cross (AT) Co Class A;ATXA +N174=Crowley Milner & Co;COM +N175=Crown Central Pet Cl A;CNPA +N176=Crown Central Pet Cl B;CNPB +N177=Crown Laboratories;CLL +N178=Cruise Amer Inc;RVR +N179=Crystal Oil Co;COR +N180=CST Entertainment Inc;CLR +N181=Cubic Corp;CUB +N182=Customedix Cp;CUS +N183=CVB Financial Cp;CVB +N184=Cycomm Intl;CYI +N185=Dakota Mining;DKT +N186=Dallas Gold & Silver;DLS +N187=Danielson Holding Cp;DHC +N188=Datametrics Cp;DC +N189=Dataram Cp;DTM +N190=Daxor Cp;DXR +N191=Dayton Mining Cp;DAY +N192=Decorator Ind Inc;DII +N193=Del Global Tech Corp;DEL +N194=Del Laboratories Inc;DLI +N195=Denamerica Corp;DEN +N196=Devon Energy Cp;DVN +N197=Dewolfe Co;DWL +N198=DI Industries;DRL +N199=Dia Met Minerals Ltd Cl A;DMMA +N200=Dia Met Minerals Ltd Cl B;DMMB +N201=Diagnostic/Retrieval Systems;DRS +N202=Digicon Inc;DGC +N203=Digital Communication;DCT +N204=Dimark Inc;DMK +N205=Diodes Inc;DIO +N206=Disc Graphics Inc;DGI +N207=Dixon Ticonderoga Co;DXT +N208=Donnelly Cp Cl A;DON +N209=DRCA Medical Cp;DRC +N210=Drew Ind Inc;DW +N211=Dreyfus Cal Muni Incm;DCM +N212=Dreyfus Muni Income Trust;DMF +N213=Dreyfus NY Muni Income Fund;DNM +N214=Driver Harris Co;DRH +N215=Ducommun Inc;DCO +N216=Duplex Products Inc;DPX +N217=Dycam Inc;DYC +N218=E-Z Serve Cp;EZS +N219=Eastern Co;EML +N220=Echo Bay Mines;ECO +N221=Ecology & Environment Inc Cl A;EEI +N222=Edisto Resources Cp;EDT +N223=Editek Inc;EDI +N224=Eldorado Bancorp;ELB +N225=Electrochemical Ind Frutarom;EIF +N226=Ellsworth Cv Growth & Income Fund;ECF +N227=Elsinore Cp;ELS +N228=Emeritus Corp;ESC +N229=Emerson Radio;MSN +N230=Empire Of Carolina Inc;EMP +N231=Encore Marketing International;EMI +N232=Engex Inc;EGX +N233=Environmental Tectonics Cp;ETC +N234=Enzo Biochem Inc;ENZ +N235=Epitope Inc;EPT +N236=Equity Income Fund;ATF +N237=Equus II;EQS +N238=Espey Mfg & Electronics;ESP +N239=Essex Bancorp Inc;ESX +N240=ETS International Inc;ETS +N241=ETZ Lavud Cl A;ETZA +N242=ETZ Lavud Ltd Ord;ETZ +N243=Everest & Jennings Intl Inc;EJ +N244=EXX Inc Cl B;EXXB +N245=EXX Inc Class A;EXXA +N246=Fab Ind Inc;FIT +N247=Falcon Cable Systems Co;FAL +N248=Falmouth Co - Operative Bank;FCB +N249=Female Health Co;FHC +N250=FFP Partners Lp;FFP +N251=Fibreboard Cp;FBD +N252=Fina Inc Cl A;FI +N253=Financial Federal Corp;FIF +N254=First Australia Fund;IAF +N255=First Australian Prime Inc.;FAX +N256=First Central Finan Cp;FCC +N257=First Empire State Cp;FES +N258=First Iberian Fund Inc;IBF +N259=First Natl Bankshares;FNH +N260=First Republic Bancorp;FRC +N261=First West Virg Bancorp;FWV +N262=Flanigans Enterprises;BDL +N263=Florida Public Utilities Co;FPU +N264=Florida Rock Ind;FRK +N265=Foodarama Supermarkets;FSM +N266=Forest City Enter Cl A;FCEA +N267=Forest City Enter Cl B;FCEB +N268=Forest Lab Inc.;FRX +N269=Fortune Petroleum Corp;FPX +N270=Forum Retirement Lp;FRL +N271=Fountain Powerboat Indus Inc;FPI +N272=FPA Cp;FPO +N273=Franklin Advantage Re;FAD +N274=Franklin Hldg Cp;FKL +N275=Franklin Real Estate;FIN +N276=Franklin Select RE Fd;FSN +N277=Frequency Electronics;FEI +N278=Fresenius USA Inc;FRN +N279=Friedman Ind;FRD +N280=Frischs Restaurants;FRS +N281=Frontiers Adjuster Of America;FAJ +N282=Fuqua Enterprise;FQE +N283=GA Financial Inc;GAF +N284=Gainsco Inc;GNA +N285=Galaxy Cablevision L P;GTV +N286=Gamma Biologicals;GBL +N287=Garan Inc;GAN +N288=Gaylord Container Cp;GCR +N289=Gelman Sciences Inc;GSC +N290=Gen Automation Inc;GA +N291=Gen Employment Enter;JOB +N292=Gen Microwave Cp;GMW +N293=General Kinetics;GKI +N294=Genovese Drug Stores Inc Cl A;GDXA +N295=Giant Food Class A;GFSA +N296=Glacier Water Services Inc;HOO +N297=Glatfelter P H Co;GLT +N298=Global Ocean Carriers Ltd;GLO +N299=Globalink Inc;GNK +N300=Go-Video Inc;VCR +N301=Golden Star Resources Ltd;GSR +N302=Goldfield Cp;GV +N303=Goldwyn (Samuel) Co;SG +N304=Gorman Rupp Co;GRC +N305=Graham Cp;GHM +N306=Graham Field Health Prod;GFI +N307=Granges Inc;GXL +N308=Greenbriar Corp;GBR +N309=Greenwich Street Cal Muni Fd;GCM +N310=Greyhound Lines Inc;BUS +N311=Griffin Gaming & Entertainment;GGE +N312=GST Telecommunication;GST +N313=Gull Laboratories Inc;GUL +N314=Gundle Slt Environ Sys Inc;GUN +N315=Haagen (Alexander) Properties Inc;ACH +N316=Halifax Cp;HX +N317=Hallmark Financial Sv;HAF +N318=Hallwood Energy Partners;HEP +N319=Hallwood Energy Partners class C;HEPC +N320=Hallwood Rlty Partners L P;HRY +N321=Halsey Drug Co Inc;HDG +N322=Hampton Ind Inc;HAI +N323=Hanger Orthopedic Group;HGR +N324=Hanover Direct;HNV +N325=Harken Energy Cp;HEC +N326=Harlyn Products Inc;HRN +N327=Harolds Stores Inc;HLD +N328=Hasbro;HAS +N329=Hastings Mfg;HMF +N330=Hawaiian Airlines;HA +N331=Health Chem Cp;HCH +N332=Health Professionals Inc;HPI +N333=Healthy Planet Products;HPP +N334=Heartland Partners L P;HTL +N335=Hearx Ltd;EAR +N336=Heico Cp;HEI +N337=Hein Werner Cp;HNW +N338=Heist (CH) Cp;HST +N339=Helionetics Inc;ZAPP +N340=Helm Resources Inc;HHH +N341=Helmstar Group;HLM +N342=Hemlo Gold Mines Inc;HEM +N343=Heritage Media Cp Cl A;HTG +N344=Hi Shear Tech Cp;HSR +N345=Highlander Income Fund;HLA +N346=HMG/Courtland Prop In;HMG +N347=Holco Mtg Accep Cp-i;HOLA +N348=Holly Cp;HOC +N349=Hondo Oil & Gas Co;HOG +N350=Hooper Holmes Inc;HH +N351=Horizon Mental Health Mngt;HMH +N352=Host Funding;HFD +N353=Houston Biotechnology;HBI +N354=Hovnanian Enterprises Inc;HOV +N355=Howell Ind;HOW +N356=Hudson General Cp;HGC +N357=Hungarian Telephone;HTC +N358=Identix Inc;IDX +N359=IGI Inc;IG +N360=Imperial Credit Mortgage;IMH +N361=Imperial Holly Group;IHK +N362=Imperial Oil Ltd.;IMO +N363=Income Opport Rea Inv;IOT +N364=Incstar Cp;ISR +N365=Independent Bankshares;IBK +N366=Inefficient-Market Fund Inc;IMF +N367=Instron Cp;ISN +N368=Int'l Lottery Inc;ILI +N369=Intelcom Group Inc;ICG +N370=Intelligent Controls;ITC +N371=Intelligent Systems;INS +N372=Inter-City Products Cp;IPR +N373=Interchange Finan Serv Cp;ISB +N374=Interdigital Communications Corp;IDC +N375=Interline Resources Corp;IRC +N376=Intermagnetics Gen Cp;IMG +N377=Interstate General Cl A Ut Lp;IGC +N378=Intersystems Inc;II +N379=Intertape Polymer Group Inc;ITP +N380=Intl Thoroughbred Brdrs;ITB +N381=Investors Insurance Group Inc;IIG +N382=Ion Laser Technology Inc;ILT +N383=Iriec;IRI +N384=IVAX Cp;IVX +N385=Jaclyn Inc.;JLN +N386=Jalate Ltd;JLT +N387=Jan Bell Marketing;JBM +N388=Jetronic Ind;JET +N389=Jones Intercable Inv Cl A;JTV +N390=Joule Inc;JOL +N391=Kankakee Bancorp Se;KNK +N392=Katz Media Group;KTZ +N393=KBK Capital Cp;KBK +N394=Keane Inc;KEA +N395=Kentucky First Bancorp;KYF +N396=Kenwin Shops Inc;KWN +N397=Key Energy Group Inc;KEG +N398=Keystone Heritage Group;KHG +N399=KFX Inc;KFX +N400=Killearn Properties Inc;KPI +N401=Kinark Cp;KIN +N402=Kirby Cp;KEX +N403=Kit Mfg;KIT +N404=Kleer Vu Ind;KVU +N405=Knogo N Amer Corp;KNA +N406=Koger Equity;KE +N407=KV Pharmaceutical Class B;KVB +N408=KV Pharmaceutical Class A;KVA +N409=Labarge Inc;LB +N410=Lancer Cp;LAN +N411=Landauer Inc;LDR +N412=Laser Indus Ltd;LAS +N413=Laser Tech;LSR +N414=Lazare Kaplan Intl Inc;LKI +N415=Leather Factory;TLF +N416=Lehman Bro Hld Amgen;AYN +N417=Lehman Bro Region Bk;BKG +N418=Lehman Bros Hld Glo Suns 2000;SXT +N419=Lehman Bros Hldngs MICN Elks;MUY +N420=Lillian Vernon Cp;LVC +N421=Littlefield Adams & Co;LFA +N422=Lumex Inc;LUM +N423=Luxtec Cp;LXU +N424=LXR Biotechnology Inc;LXR +N425=Lynch Cp;LGL +N426=M C Shipping Inc;MCX +N427=M Stanley GT PERQS 97;IGS +N428=M Stanley TMX PERQS;MXT +N429=MacNeal Schwendler Cp;MNS +N430=Magellan Health Services;MGL +N431=Magnum Petroleum Inc;MPM +N432=MAI Systems Inc;NOW +N433=Maine Public Serv;MAP +N434=Marlton Technologies Inc;MTY +N435=Massachusetts H&E Tru;MHE +N436=Matec Cp;MXC +N437=Maxxam Inc;MXM +N438=McRae Ind Cl A;MRIA +N439=McRae Ind Cl B;MRIB +N440=Mdc Corp;MDQ +N441=Measurement Specialties Inc;MSS +N442=Medco Research Inc;MRE +N443=Medeva Plc Ads;MDV +N444=Media General Cl A;MEGA +N445=Media Logic Inc;TST +N446=Medicore Inc;MDK +N447=Mediq Inc;MED +N448=Medquist Inc;MBS +N449=Mem Co;MEM +N450=Mental Health Management Inc;MHM +N451=Merchants Group Inc;MGP +N452=Mercury Air Group Inc;MAX +N453=Meridian Point Rlty 8;MPH +N454=Merrimac Ind Inc;MRM +N455=Met-Pro Cp;MPR +N456=Metromedia Intl Group;MMG +N457=Metropolitan Realty Cp;MET +N458=Michael Anthony Jewelers;MAJ +N459=Microtel Intl Inc;MOL +N460=Mid America Bancorp;MAB +N461=Mid Atlantic Realty Trust Sbi;MRR +N462=Middleby Cp;MIDD +N463=Midland Co;MLA +N464=Midsouth Bancorp Inc;MSL +N465=Milwaukee Land Inc;MWK +N466=Minnesota Mun Term Tr;MNB +N467=Minnesota Muni Inc Port;MXA +N468=Mission West Properties;MSW +N469=Moog Inc Cl B;MOGB +N470=Moog Inc Class A;MOGA +N471=Moore Medical Cp;MMD +N472=Morgan Group Class A;MG +N473=Morgan Stanley CSCO;XPC +N474=Morgans Foods Inc;MR +N475=Morrison Fresh Cooking Inc;MFC +N476=Movie Star Inc;MSI +N477=MSR Exploration Ltd;MSR +N478=Muniinsured Fund Inc;MIF +N479=Munivest Fund Inc;MVF +N480=Muniyield AZ Fd;MZA +N481=Muniyield Insured Fund;MYI +N482=Myers Ind Inc;MYE +N483=N Amer Vaccine Inc;NVX +N484=N Y Tax Exempt Incm Fd;XTX +N485=Nabors Industries Inc;NBR +N486=Nantucket Ind Inc;NAN +N487=National Bancshares Of Texas;NBT +N488=Natl Beverage Corp;FIZ +N489=Natl Gas & Oil Cp;NLG +N490=Natl Healthcare Lp;NHC +N491=Natl Patent Deve Cp;NPD +N492=Natl Realty Lp;NLP +N493=Natural Alternatives Intl;NAI +N494=New Iberian Bancorp;NIB +N495=New Mexico & Arizona Land;NZ +N496=New York Times Class A;NYTA +N497=NFC Plc;NFC +N498=Norex America Inc;NXA +N499=Northbay Financial Cp;NBF +N500=Northern Technologies Intl;NTI +N501=Novavax Inc;NOX +N502=NTN Communication;NTN +N503=Numac Energy Inc;NMC +N504=Nuveen CA Premium Ins Muni Fd;NCU +N505=Nuveen GA Premium Ins Muni Fd;NPG +N506=Nuveen MO Premium Ins Muni fd;NOM +N507=Nuveen WA Premium Ins Muni Fd;NPW +N508=NV Ryan Homes;NVR +N509=O Okiep Copper ADR;OKP +N510=O Sullivan Cp;OSL +N511=Ohio Art Co;OAR +N512=OMI Corp;OMM +N513=Omni Multimedia Group;OMG +N514=Oncor Inc;ONC +N515=Oncormed Inc;ONM +N516=One Liberty Prop;OLP +N517=Organogenesis Inc;ORG +N518=Oriole Homes Cp Cl A;OHCA +N519=Oriole Homes Cp Cl B;OHCB +N520=Oshman Sporting Goods;OSH +N521=Pacific Gateway Property Inc;PGP +N522=Pacific Gulf Properties;PAG +N523=Page America Group Inc;PGG +N524=Paine Webber Grp S&P 400;SIS +N525=Pamida Hldgs Cp;PAM +N526=Park Natl Corp;PRK +N527=Partners Preferred Yield;PYA +N528=Partners Preferred Yield II;PYB +N529=Partners Preferred Yield III;PYC +N530=Paxson Communication;PXN +N531=PC Quote;PQT +N532=Pegasus Gold Inc;PGU +N533=Penn Engineering & Mfg Cp;PNN +N534=Penn Real Estate Inv Tr Sbi;PEI +N535=Penobscot Shoe Co;PSO +N536=Perini Cp;PCR +N537=Peters (JM) Co;CPH +N538=Phoenix Network Inc;PHX +N539=Phoenix Resources Cos;PHN +N540=Pico Products Inc;PPI +N541=Piedmont Bancorp;PDB +N542=Pinnacle Bank;PLE +N543=Pitts & West Va R R Sbi;PW +N544=Pitts De Moines Inc;PDM +N545=Pittway Cl A;PRYA +N546=Pittway Cp;PRY +N547=Plains Resources Inc;PLX +N548=PLC Systems Inc;PLC +N549=PLM Intl Inc;PLM +N550=Plymouth Rubber Cl A;PLRA +N551=Plymouth Rubber Inc Cl A;PLRB +N552=PMC Capital Inc;PMC +N553=PMC Commercial Trust;PCC +N554=Poly Medical Industries;PM +N555=Polyphase Cp;PLY +N556=Polyvision;PLI +N557=Porta Systems Cp;PSI +N558=Portage Indus Cp;PTG +N559=Pratt Hotel Cp;PHC +N560=Pre-Paid Legal Serv Inc;PPD +N561=Presidential Realty Cl A;PDLA +N562=Presidential Realty Cl B;PDLB +N563=Price Communications;PR +N564=Pricellular Corp;PC +N565=Prism Entertainment Cp;PRZ +N566=Professional Bancorp;MDB +N567=Professional Dental Tech Inc;PRO +N568=Property Capital Tr Sbi;PCT +N569=Provena Foods Inc;PZA +N570=Providence Energy Cp;PVY +N571=Psychemedics Corp;PMD +N572=Public Storage Prop X Inc;PSL +N573=Public Storage Prop XI Inc;PSM +N574=Public Storage Prop XII Inc;PSN +N575=Public Storage Prop XIV Inc;PSP +N576=Public Storage Prop XV Inc;PSQ +N577=Public Storage Prop XVI Inc;PSU +N578=Public Storage Prop XVIII Inc;PSW +N579=Public Storage Prop XX Inc;PSZ +N580=Public Storage Props XVII Inc;PSV +N581=Public Storage Props XIX Inc;PSY +N582=Putnam CA Inv Grd Mun;PCA +N583=Putnam Inv Grd Mun Tr III;PML +N584=Putnam NY Inv Grd Mun;PMN +N585=Pyrocap Intl Corp;PYR +N586=Quebecor Inc Cl A;PQB +N587=R F Power Products;RFP +N588=Ragan (Brad) Inc;BRD +N589=Randers Group Inc;RGI +N590=Raven Industries Inc;RAVN +N591=Red Lion Inns Lp;RED +N592=Redlaw Industries;RDL +N593=Redwood Empire Bancorp;REB +N594=Refac Technology Deve;REF +N595=Regal Beloit Cp;RBC +N596=Regency Healthcare Systems Inc;RHS +N597=Reliv International Inc;RLV +N598=Resort Income Investors Inc;RII +N599=Richton Intl Cp;RHT +N600=Riegel Energy Corp;RJL +N601=Rio Algom Ltd;ROM +N602=Riser Inc;RSR +N603=Rogers Cp;ROG +N604=Rotonics Manufacturing Inc;RMI +N605=Royal Oak Mines Inc;RYO +N606=Rx Medical Service Corp;RXM +N607=Rymac Mortgage Inv Cp;RM +N608=S&P Midcap Dep Recpts;MDY +N609=Saba Petroleum Co;SAB +N610=Saga Communications Inc;SGA +N611=Sahara Gaming Corp;SGM +N612=Salem Cp;SBS +N613=Salomon AMGN Elk;AEK +N614=Salomon Brothers 2008 Worldwide Trust;SBG +N615=Salomon Inc DEC Elk;DLK +N616=Salomon Inc HWP Els;HLK +N617=Salomon Inc MSFT Com;MEK +N618=Salomon Inc ORCL Elks;OLK +N619=Salomon Inc SNPL Elks;SEK +N620=Santa Monica Bank;SMO +N621=SC Bancorp;SCK +N622=Scandinavia Co Inc;SCF +N623=Sceptre Resources Ltd;SRL +N624=Scheib (Earl) Inc;ESH +N625=Schult Homes Cp;SHC +N626=Scope Ind;SCP +N627=Scotland Bancorp;SSB +N628=Seaboard Cp;SEB +N629=Selas Cp Of Amer;SLS +N630=Serenpit Inc;SRI +N631=Servico Inc;SER +N632=Servotronics;SVT +N633=Sheffield Explorations;SHE +N634=Sheffield Medical Technology Inc;SHM +N635=Shelter Components Cp;SST +N636=Shopco Laurel Centre;LSC +N637=Sifco Ind;SIF +N638=Signal Technology Corp;STZ +N639=Silverado Foods Inc;SLV +N640=Simula Inc;SMU +N641=SJW Cp;SJW +N642=Sloans Supermarket Inc;SLO +N643=Smith A O Cl A;SMCA +N644=Smith Barney Interm Muni Fund Inc;SBI +N645=Smith Barney Municipal Fund;SBT +N646=Softnet Systems Inc;SOF +N647=SOI Industries;SOI +N648=Soligen Tech;SGT +N649=Southern Banc Inc;SRN +N650=Southern Calif Ed Qui;SCEQ +N651=Southfirst Bancshares;SZB +N652=SPDR;SPY +N653=SPDR Net Asset Value;SXN +N654=Specialty Chemical Resources Inc;CHM +N655=Spectravision Inc Cl;SVN +N656=Speed O Print Bus Mach;SBM +N657=Sports Club Inc;SCY +N658=Stage II Apparel Cp;SA +N659=Starrett Housing Cp;SHO +N660=Stepan Co;SCL +N661=Stephan Co;TSC +N662=Sterling Capital Cp;SPR +N663=Sterling Healthcare;STER +N664=Sterling House;SGH +N665=Stevens Intl Cl B;SVGB +N666=Stevens Intl Cp Cl A;SVGA +N667=Stone Street Bancorp;SSM +N668=Storage Computer Corp;SOS +N669=Storage Properties Inc;STG +N670=Struthers Industries Inc;SIR +N671=Sulcus Computer Cp;SUL +N672=Summit Tax Ex Bond Fund Lp;SUA +N673=Sun City Ind;SNI +N674=Sunair Electronics Inc;SNR +N675=Sunbelt Nursery Grp Inc;SBN +N676=Suncor Inc;SU +N677=Superior Surgical Mfg Co;SGC +N678=Supreme Industries;STS +N679=Surety Capital Corp;SRY +N680=Swing N Slide Corp;SWG +N681=Tab Products Co;TBP +N682=Tasty Baking Co;TBC +N683=Team Inc;TMI +N684=Tech/Ops Sevcon Inc;TO +N685=Teche Holdings;TSH +N686=Technitrol Inc;TNL +N687=Tejas Power Cp;TPC +N688=Tejon Ranch Co;TRC +N689=Telephone & Data Systems Inc;TDS +N690=Tenera Inc;TNR +N691=Texarkana First Financiall Corp;FTF +N692=Texas Biotechnology;TXB +N693=Texas Meridian Res Cp;TMR +N694=Thermedics Inc;TMD +N695=Thermo Cardiosystems Inc;TCA +N696=Thermo Ecotek;TCK +N697=Thermo Fibertek;TFT +N698=Thermo Instrument Systems Inc;THI +N699=Thermo Power Cp;THP +N700=Thermo Remediation Inc;THN +N701=Thermo Sentron Inc;TSR +N702=Thermo Terratech Inc;TTT +N703=Thermo Voltek Corp;TVL +N704=Thermolase Corp;TLZ +N705=Thermospectra Corp;THS +N706=Thermotrex Corp;TKN +N707=Thermwood Cp;THM +N708=Three D Dept Cl A;TDDA +N709=Three D Dept Cl B;TDDB +N710=Three River Fncl Corp;THR +N711=Tipperary Corp;TPY +N712=Tofutti Brands Inc;TOF +N713=Tolland Bank CT;TBK +N714=Top Source Technology;TPS +N715=Torotel Inc;TTL +N716=Total Petroleum N.amer;TPN +N717=Town & Country;TNC +N718=Trans World Airlines Inc;TWA +N719=Trans-Lux Cp;TLX +N720=Transcisco Ind;TNI +N721=Tranzonic Cos B;TNZB +N722=Tranzonic Cos Class A;TNZA +N723=Tridex Corp;TRDX +N724=Trinitech Systems;TSI +N725=Triple A & Govt 1997;TGB +N726=Triton Group Ltd;TGL +N727=TSF Communications Cp;TCM +N728=Tulos De Acero De Mexico Ltd;TAM +N729=Turner Broadcasting Sys Cl B;TBSB +N730=Turner Broadcasting Sys Cl A;TBSA +N731=Turner Cp;TUR +N732=Unapix Entertainment Inc;UPX +N733=Uni-Marts Inc;UNI +N734=Uniflex Inc;UFX +N735=Unimar Inc;UMR +N736=Unique Mobility Inc;UQM +N737=United Capital Cp;AFP +N738=United Foods Inc Cl B;UFDB +N739=United Foods Inc Cl A;UFDA +N740=United Guardian Inc;UG +N741=United Mobile Homes Inc;UMH +N742=Unitel Video Inc;UNV +N743=Unitil Cp;UTL +N744=Urohealth Systems Inc;URO +N745=US Alcohol Testing;AAA +N746=US Biosciences Inc;UBS +N747=US Cellular;USM +N748=USF&G Pacholder Fund Inc;PHF +N749=UTI Energy Corp;UTI +N750=Valley Forge Cp;VF +N751=Valley Resources Inc;VR +N752=Van Kamp Mer Cal Muni Tr;VKC +N753=Van Kampen Mer Adv Muni Inc II;VKI +N754=Van Kampen Mer FL Muni Opp;VOF +N755=Van Kampen Mer MA Val Muni Inco;VMV +N756=Van Kampen Mer NJ Val Muni Inc Tr;VJV +N757=Van Kampen Mer OH Val Muni Inco;VOV +N758=Van Kampen Mer Sel Muni Tr;VKL +N759=Vanguard Re Fund II;VRT +N760=Vanguard Real Est Fd I Com Fr;VRO +N761=Versar Inc;VSR +N762=Viacom Class B;VIAB +N763=Viacom Intl;VIA +N764=Vicon Ind Inc;VII +N765=Virco Mfg Cp;VIR +N766=Vitronics Cp;VTC +N767=Voyageur AZ Muni Inc;VAZ +N768=Voyageur Co Ins Muni;VCF +N769=Voyageur FL Ins Muni;VFL +N770=Voyageur Minnesota Muni Income Fund;VMN +N771=Voyageur MN Muni Income II;VMM +N772=Voyageur MN Muni Income III;VYM +N773=Vulcan Intl Cp;VUL +N774=Wash Real Estate Inv Tr Sbi;WRE +N775=Washington Savings Bk Fsb;WSB +N776=Watsco Inc Cl B;WSOB +N777=Webco Industries Inc;WEB +N778=WEBS Australia;EWA +N779=WEBS Austria Index;EWO +N780=WEBS Belgium Index;EWK +N781=WEBS Canada;EWC +N782=WEBS France;EWQ +N783=WEBS Germany;EWG +N784=WEBS Hong Kong;EWH +N785=WEBS Italy;EWI +N786=WEBS Japan Index;EWJ +N787=WEBS Malaysia Index;EWM +N788=WEBS Mexico;EWW +N789=WEBS Nethlands;EWN +N790=WEBS Singapore;EWS +N791=WEBS Spain;EWP +N792=WEBS Sweden;EWD +N793=WEBS Switzerland;EWL +N794=WEBS UK;EWU +N795=Weldotron Cp;WLD +N796=Wellco Enterprises;WLC +N797=Wells Gardner Electronics Cp;WGA +N798=Wendt Bristol Hlth Sv;WMD +N799=Wesco Financial Cp;WSC +N800=Western Investment Real Estate Trust;WIR +N801=Western Star Truck Holding;WSH +N802=Whitman Educational Group;WIX +N803=Wilshire Technology Inc;WIL +N804=Winston Resources Inc;WRS +N805=Wireless Telecom Group;WTT +N806=Wiz Technology;WIZ + diff --git a/http/DATA.DAT b/http/DATA.DAT new file mode 100644 index 0000000..036f5bb --- /dev/null +++ b/http/DATA.DAT @@ -0,0 +1,103 @@ +N18=Byron Preiss Multimedia Company, Inc. CDRM Graph No SEC Filings

Develops and publishes multi-media software for the consumer, small business, and educational markets. The Company also publishes books and is developing its first on-line service.

+N19=Camelot Corporation CAML Graph Press Releases (under "cool stuff") SEC Filings
+N20=Cardiotronics Systems, Inc. CDIO Graph No SEC Filings

Develops, manufactures, and markets disposable medical devices for the acute treatment of heart rate disorders under both the Cardiotronics and R2 brands.

+N21=Centurion Mines Corporation CTMC Graph Yes SEC Filings
+N22=Churchill Downs Incorporated CHDN Graph No SEC Filings
+N23=CinemaStar Luxury Theaters LUXY Graph Yes SEC Filings +N24=Circuit Research Labs, Inc. CRLI Graph No SEC Filings
+N25=Classics International Entertainment, Inc. CIEI Graph No +N26=Coda Music Technology COMT Graph Press Releases SEC Filings +N27=CompuMed, Inc. CMPD Graph No SEC Filings
+N28=Computer Marketplace, Inc. MKPL Graph No SEC Filings
+N29=Computone Corporation CMPT Graph Old Press Releases SEC Filings
+N30=Concord Energy, Inc. CODE Graph Yes SEC Filings +N31=CSI Computer Specialists, Inc. CSIS Graph No SEC Filings +N32=Cusac Gold Mines Ltd. CUSIFGraph Yes

Explores for and produces gold.

+N33=DeltaPoint, Inc. DTPT Graph Press Releases SEC Filings
+N34=Digital Sciences Inc. DISI No +N35=Dynamic Healthcare Technologies, Inc. DHTI Graph Press Releases SEC Filings
+N36=DynaMotive Technologies Corporation DYMTFGraph Press Releases +N37=Eckler Industries, Inc. ECKL Graph No +N38=Electronic Clearing House, Inc. ECHO Graph Press Releases SEC Filings
+N39=Enteractive, Inc. ENTR Graph No SEC Filings
+N40=Environment One Corporation EONE Graph Press Releases SEC Filings
+N41=Environmental Technologies USA, Inc. ENVR Graph Yes Market Guide +N42=Erox Corporation EROX Graph Yes Market Guide +N43=Esquire Communications Ltd. ESQS Graph No Market Guide +N44=Essex Corporation ESEX Graph Yes SEC Filings
+N45=Farmstead Telephone Group, Inc. FONE Graph Press Releases Yes +N46=FIND/SVP, Inc. FSVP Graph Press Releases Yes +N47=F1RSTMARK, Inc. FIRM Graph No Yes +N48=Focus Enhancements, Inc. FCSE Graph Yes Yes +N49=Gilman & Ciocia, Inc. GTAX Graph Yes Yes +N50=Graphix Zone, Inc. GZON Graph Press Releases Yes +N51=Great Pines Water Company, Inc. GPWC Graph Yes Yes +N52=Imex Medical Systems, Inc. IMEX Graph Yes No, as of June 19. +N53=Independence Federal Savings Bank IFSB Graph No Yes +N54=Infodata Systems, Inc. INFD Graph Press Releases Yes +N55=Informedics, Inc. IMED Graph Info request form Yes +N56=INOTEK Technologies Corp. INTK Graph No Yes +N57=Insignia Systems, Inc. ISIG Graph Press Releases No, as of June 19. +N58=Integral Systems, Inc. ISYS Graph Press Releases Yes +N59=IntelliCorp, Inc. INAI Graph No Yes

Involved in object-oriented design, development, and delivery +N60=International Microcomputer Software, Inc. IMSI Graph Yes Yes +N61=International Precious Metals Corporation IPMCF Graph Yes No, as of June 19. +N62=Internet Communications Corporation INCC Graph Press Releases Yes +N63=InVitro International INVI Graph Press Releases Yes +N64=Irvine Sensors Corporation IRSN Graph No Yes +N65=ITEX Corporation ITEX Graph No Yes +N66=Janex International, Inc. JANX Graph Yes Yes

Manufacturer of products for children.

+N67=Kansas City Life Insurance Company KCLI Graph No Yes +N68=Kinetiks.com, Inc. KNET Graph Yes Yes +N69=Laser Video Network LVNI Graph Press Releases No, as of May 22. +N70=LCA-Vision Inc. LCAV Graph No Yes

A provider of laser and minimally invasive surgery programs.

+N71=LifeCell Corporation LIFC Graph Yes Yes

Develops and commercializes universal tissue grafts and blood preservation products.

+N72=LifeRate Systems, Inc. LRSI Graph Yes Yes +N73=LightPath Technologies Inc. LPTHA Graph Press Releases No, as of May 22.

Develops and manufactures GRADIUM(TM) glass.

+N74=Lotto World, Inc. LTTO Graph Press Releases No, as of May 22.

Publishes LottoWorld, a magazine for lottery players.

+N75=Marine National Bank MNBK Graph Yes No, as of May 22. +N76=MaxServ, Inc. MXSV Graph Old Press Release Yes +N77=Medizone International, Inc. MZEI Press Releases Yes +N78=MetroBanCorp METB Graph Yes No, as of May 22. +N79=Mitek Systems, Inc. MITK Graph Yes Yes +N80=Network Connection, Inc. (The) TNCX Graph Press Releases Yes +N81=National Registry Inc. (The) NRID Graph Press Releases Yes +N82=Nona Morelli's II, Inc. NONA Yes Yes +N83=Norris Communications Corporation NORRFGraph Press Releases No, as of May 22. +N84=Online System Services, Inc. WEBB Graph Yes Yes +N85=Navigato International, Inc. NATO No No, as of May 22.

Develops, manufactures, and sells competitive fleet management systems. The product portfolio includes ruggedized on-board computers and terminals, GPS-systems and management software for the base.

+N86=Pacific Animated Imaging Corp. PAID Graph No No, as of May 22. +N87=Palomar Medical Technologies, Inc. PMTI Graph Yes Yes +N88=PerfectData Corporation PERF Graph Yes No, as of May 22. +N89=Perle Systems Inc. PERLF Graph Old press releases No, as of June 20. +N90=Precision Systems, Inc. PSYS Graph Yes Yes

Provides state-of-the-art network-based enhanced services communications solutions. The Company's product lines deploy interactive voice, data, and video technologies on a unified software platform.

+N91=ProtoSource Corporation PSCO Graph No No, as of May 22. +N92=PTI Holding, Inc. PTII Graph Yes No, as of May 22.

Manufactures and distributes bicycle helmets and accessories.

+N93=Pudgie's Chicken, Inc. PUDG Graph No Yes

Operates and franchises quick service Pudgie's restaurants featuring Pudgie's specially prepared, fresh, skinless fried chicken with an emphasis on home delivery.

+N94=QCS Corporation QCSC Press Releases Yes +N95=Quadrax Corporation QDRX Graph Yes Yes

A 21st Century Materials Company that makes and markets products made using its proprietary thermoplastic composite fabrication and manufacturing processes.

+N96=Rent-A-Wreck of America, Inc. RAWA Graph Phone number for investors Yes

Rents used cars. +N97=Rotary Power International, Inc. RPII Graph Yes Yes +N98=Sanctuary Woods Multimedia Corporation SWMFC Graph Press Releases Yes +N99=Scangraphics, Inc. SCNG Graph Press Releases Yes

A provider of Geographic Information Systems (GIS) database management software products. Develops scanning and image processing technology, large document scanners, backfile conversion services, and imaging software and systems.

+N100=Seiler Pollution Control Systems, Inc. SEPC Graph Yes Yes +N101=Silverado Mines, Ltd. GOLDFGraph Yes No, as of May 22.

Explores, develops and mines precious metal deposits.

+N102=Socket Communications, Inc. SCKT Graph Press Releases No, as of May 22. +N103=Spanlink Communications SPLK Graph Press Releases No, as of May 22. +N104=Sparta Pharmaceuticals, Inc. SPTA Graph Yes Yes

An early stage pharmaceutical company engaged in the business of acquiring rights to, and developing for commercialization, technologies and drugs for the treatment of cancer.

+N105=Spatializer Audio Laboratories, Inc. SPAZ Graph Press Releases and info request form Yes +N106=Sports International Ltd. SBET Press Releases No, as of May 22.

An international leisure and entertainment organization offering world-wide wagering on sporting events.

+N107=Sports Sciences, Inc. SSCI Graph No No, as of May 22. +N108=SunRiver Corporation SRVC Graph Yes Yes +N109=SwissRay International, Inc. SRMI Graph Yes No, as of May 22. +N110=SYSTEMS of Excellence, Inc. SEXI Yes No, as of June 21. +N111=Vasco Data Security, Inc. VASC Press Releases Yes +N112=Vector Aeromotive Corporation VCAR Graph Press Releases Yes +N113=VictorMaxx Technologies, Inc. VMAX Graph Press Releases Yes +N114=VideoLabs Inc. VLAB Graph Yes Yes

Supplier of desktop video cameras and video editing products to the Internet VideoConferencing market.

+N115=Visual Information Services Corp. VICP Press Releases No, as of May 22.

An interactive TV developer.

+N116=Voice Powered Technology International, Inc. VPTI Graph No Yes

Designs, develops and markets low-cost, portable voice recognition consumer electronics products.

+N117=VOXEL VOXL Graph Yes Yes +N118=VSI Enterprises, Inc. VSIN Graph Press Releases No, as of May 22.

Designs, manufactures and markets videoconference systems.

+N119=Wavetech, Inc. ITEL Graph Yes Yes

Provides global access to "information super highway" +N120=Zila, Inc. ZILA Graph Press Releases Yes

Provides healthcare products to dental and medical professionals and consumers.

diff --git a/http/DATA.TXT b/http/DATA.TXT new file mode 100644 index 0000000..4087121 --- /dev/null +++ b/http/DATA.TXT @@ -0,0 +1,715 @@ +N1=20th C Balance Investors Fund;TWBIX +N2=20th C Giftrust;TWGTX +N3=20th C Growth;TWCGX +N4=20th C Heritage Inv;TWHIX +N5=20th C Intl Stocks;TWIEX +N6=20th C Select;TWCIX +N7=20th C Ultra;TWCUX +N8=20th C US Govt;TWUSX +N9=20th C Vista;TWCVX +N10=20th Century Intl Emerging Growth;TWEGX +N11=AARP Capital Growth Fund;ACGFX +N12=AARP Global Growth;ARGGX +N13=AARP GNMA & US Treasury Fund;AGNMX +N14=AARP Growth & Income Fund;AGIFX +N15=Acorn Fund Inc;ACRNX +N16=Acorn Intl;ACINX +N17=AIM Aggressive Growth;AAGFX +N18=Aim Charter Fund;CHTRX +N19=Aim Constellation Growth Fund;CSTGX +N20=Aim Convertible Yld Security;AMBLX +N21=AIM Value Fund;AVLFX +N22=Aim Weingarten Equity Fund;WEINX +N23=Alliance Tech Fund;ALTFX +N24=Alliance World Income;AWITX +N25=Alliance Worldwide Privatization;AWPAX +N26=Amer Europacific Growth Funds;AEPGX +N27=Amer Fundamental Investors Fund;ANCFX +N28=Amer Growth Fund Of America;AGTHX +N29=Amer New Perspective;ANWPX +N30=Amer Washington Mutual;AWSHX +N31=American Heritage Fund;AHERX +N32=Artisen Small Cap Fund;ARTSX +N33=ASM Fund;ASMUX +N34=Babson Bond Tr;BBDSX +N35=Babson Enterprise Fund;BABEX +N36=Babson Growth Fund;BABSX +N37=Babson Shadow Stock Fund;SHSTX +N38=Babson Stewart Ivory Intl;BAINX +N39=Babson Value Fund;BVALX +N40=Baron Asset Fund;BARAX +N41=Baron Growth &income Fund;BGINX +N42=Benham Adj Rate Govt Security Fund;BARGX +N43=Benham Equity Growth;BEQGX +N44=Benham European Gov Bond Fund;BEGBX +N45=Benham Glb Natural Resources;BGRIX +N46=Benham GNMA Income Fund;BGNMX +N47=Benham Gold Equity Index Fund;BGEIX +N48=Benham Income & Growth;BIGRX +N49=Benham Target 2000 Fund;BTMTX +N50=Benham Target 2005 Fund;BTFIX +N51=Benham Target 2010 Fund;BTTNX +N52=Benham Target 2015 Fund;BTFTX +N53=Benham Target 2020 Fund;BTTTX +N54=Benham Treasury Note Fund;CPTNX +N55=Benham Util Inc Fund;BULIX +N56=Berger 100 Fund;BEONX +N57=Berger 101 Fund;BEOOX +N58=Berger Small Co Growth Fund;BESCX +N59=Bernstein International Value;SNIVX +N60=Blanchard Flex Tax Free Bond;BTFBX +N61=Blanchard Global Growth;BGGFX +N62=Bramwell Growth Fund;BRGRX +N63=Brandywine Fund;BRWIX +N64=Bull & Bear Global Income;BBGLX +N65=Bull & Bear Gold Investors Fund;BBGIX +N66=Bull & Bear Special Equity Fund;BBSEX +N67=Bull & Bear US & Overseas Fund;BBOSX +N68=California Tax Free Income;CFNTX +N69=Cappiello Rushmore TR Growth Fund;CRGRX +N70=Cappiello Rushmore Tr Emerging Growth;CREGX +N71=Century Shares Trust Fund;CENSX +N72=CGC Intl Equity;TIEUX +N73=CGC Large Cap Growth;TLGUX +N74=CGC Large Cap Value;TLVUX +N75=CGC Small Cap Growth;TSGUX +N76=CGM Capital Development;LOMCX +N77=CGM Mutual Fund;LOMMX +N78=Clipper Fund;CFIMX +N79=Cohen Steers Realty Shares;CSRSX +N80=Colonial Tax Exempt Fund;COLTX +N81=Columbia Growth Fund;CLMBX +N82=Columbia Special Fund Inc.;CLSPX +N83=Crabbe Huson Spec Fund;CHSPX +N84=DFA Continental Small Company;DFCSX +N85=DFA Japanese Small Company;DFJSX +N86=DFA United Kingdom Small Company;DFUKX +N87=Dodge & Cox Stock Fund;DODGX +N88=Drey A Bonds Plus;DRBDX +N89=Drey Asset Allocation Fund;DRAAX +N90=Drey Comstock Cap Value Cl A;DRCVX +N91=Drey Core Value Fund;DCVIX +N92=Drey Fund;DREVX +N93=Drey Global Inv Class B;DGLBX +N94=Drey Growth + Income;DGRIX +N95=Drey Intermediate Tax Exempt Bond;DITEX +N96=Drey Leverage Fund;DRLEX +N97=Drey New Leader Fund;DNLDX +N98=Drey Opportunity Fund;DREQX +N99=Drey Strategic Worldwide;DSWIX +N100=Drey Tax Ex Bond Fund;DRTAX +N101=Drey Third Century;DRTHX +N102=Dreyfus Appreciation;DGAGX +N103=DW American Value Fund;DWIVX +N104=DW Capital Growth Fund;DWCGX +N105=DW Developing Growth Fund;DWDGX +N106=DW Dividend Growth Fund;DWDVX +N107=DW European Growth Fund;DWEGX +N108=DW Pacific Growth Fund;DWPGX +N109=DW Strategist Fund;DWSTX +N110=DW Value Added Fund;DWVAX +N111=DW Worldwide Investor Fund;DWWWX +N112=Eaton Vance High Yield Muni Tr;EVHMX +N113=Evergreen Fund;EVGRX +N114=Evergreen Global R.E. Fund;EGLRX +N115=Evergreen Total Return Fund;EVTRX +N116=Fam Value Fund;FAMVX +N117=Federal Capital Appreciation Fund;FEDEX +N118=Federated Amer Leaders Fd;FALDX +N119=Federated High Income;FHIIX +N120=Federated High Yield Trust;FHYTX +N121=Federated Stock Trust;FSTKX +N122=Federated US Govt Sec;FUSGX +N123=Fid Adv Growth Opport Fund;FAGOX +N124=Fid Advisor High Income;FAHYX +N125=Fid Advisory Overseas Fund;FAERX +N126=Fid Asset Manager;FASMX +N127=Fid Asset Manager;FASIX +N128=Fid Asset Mng Growth;FASGX +N129=Fid Balanced Fund;FBALX +N130=Fid Blue Chip Growth Fund;FBGRX +N131=Fid Cal Tax Free High Yield;FCTFX +N132=Fid Cal Tax Free Insur Port;FCXIX +N133=Fid Canada Fund;FICDX +N134=Fid Capital Appreciation;FDCAX +N135=Fid Congress Street Fund;CNGRX +N136=Fid Contra Fund;FCNTX +N137=Fid Conv Security Fund;FCVSX +N138=Fid Destiny Fund;FDESX +N139=Fid Destiny II Port;FDETX +N140=Fid Disciplined Equity Fund;FDEQX +N141=Fid Diversified Intl;FDIVX +N142=Fid Dividend Growth Fund;FDGFX +N143=Fid Emerging Growth Fund;FDEGX +N144=Fid Emerging Markets;FEMKX +N145=Fid Equity Income;FEQIX +N146=Fid Equity Income II Fund;FEQTX +N147=Fid Euro Cap Appreciation;FECAX +N148=Fid Europe Fund;FIEUX +N149=Fid Exchange Fund;FDLEX +N150=Fid Export Fund;FEXPX +N151=Fid Fifty Fund;FFTYX +N152=Fid Freedom;FDFFX +N153=Fid Global Balance;FGBLX +N154=Fid Global Bond Fund;FGBDX +N155=Fid GNMA Portfolio;FGMNX +N156=Fid Government Security Fund;FGOVX +N157=Fid Growth & Income;FGRIX +N158=Fid Growth Co Fund;FDGRX +N159=Fid High Income Fund;FAGIX +N160=Fid High Yield Fund;FHIGX +N161=Fid Int'l Growth & Income Fund;FIGRX +N162=Fid Int'l Value Fund;FIVFX +N163=Fid Intermediate Bond Fund;FTHRX +N164=Fid Investment Grade Bond Fund;FBNDX +N165=Fid Japan Fund;FJAPX +N166=Fid Latin America Fund;FLATX +N167=Fid Low-Priced Stock Fund;FLPSX +N168=Fid Magellan;FMAGX +N169=Fid Midcap Stocks;FMCSX +N170=Fid Mortgage Security Fund;FMSFX +N171=Fid Muni Tr Ins Tax Free;FMUIX +N172=Fid Municipal Bond Fund;FMBDX +N173=Fid New Markets Income;FNMIX +N174=Fid New Millenium Fund;FMILX +N175=Fid NY Tax Free High Yield Fund;FNTIX +N176=Fid OTC;FOCPX +N177=Fid Overseas;FOSFX +N178=Fid Pacific-basin Fund;FPBFX +N179=Fid Puritan;FPURX +N180=Fid Real Estate Investment Fund;FRESX +N181=Fid Retired Mm Port;FRTXX +N182=Fid SE Asia Fumd;FSEAX +N183=Fid Sel Air Transport;FSAIX +N184=Fid Sel Amer Gold;FSAGX +N185=Fid Sel Automotive Prt;FSAVX +N186=Fid Sel Biotech Port;FBIOX +N187=Fid Sel Bkrge & Inv Mg;FSLBX +N188=Fid Sel Broadcast;FBMPX +N189=Fid Sel Capital Goods;FSCGX +N190=Fid Sel Chemical Port;FSCHX +N191=Fid Sel Computers;FDCPX +N192=Fid Sel Consumer Products;FSCPX +N193=Fid Sel Develop Community;FSDCX +N194=Fid Sel Electronics Port;FSELX +N195=Fid Sel Energy;FSENX +N196=Fid Sel Energy Service;FSESX +N197=Fid Sel Environmental Port;FSLEX +N198=Fid Sel Food & Agric;FDFAX +N199=Fid Sel Health Care;FSPHX +N200=Fid Sel Housing Port;FSHOX +N201=Fid Sel Industrial Prt;FSDPX +N202=Fid Sel Leisure & Ent;FDLSX +N203=Fid Sel Medic Delivery;FSHCX +N204=Fid Sel Natural Gas;FSNGX +N205=Fid Sel Paper & Forest;FSPFX +N206=Fid Sel Port Defense;FSDAX +N207=Fid Sel Port Financial Services;FIDSX +N208=Fid Sel Port Technolgy;FSPTX +N209=Fid Sel Port Utilities;FSUTX +N210=Fid Sel Prec Mtl & Minerals;FDPMX +N211=Fid Sel Prop & Casul Insur;FSPCX +N212=Fid Sel Regional Banks;FSRBX +N213=Fid Sel Retail;FSRPX +N214=Fid Sel S & L Port;FSVLX +N215=Fid Sel Software;FSCSX +N216=Fid Sel Telecommunicatns Port;FSTCX +N217=Fid Sel Transport Port;FSRFX +N218=Fid Short Term World Income;FSHWX +N219=Fid Short-Term Bond Port;FSHBX +N220=Fid Short-Term Gov't Bond Port;FSTGX +N221=Fid Small Cap Stock Fund;FDSCX +N222=Fid Spart Inv Grade;FSIBX +N223=Fid Spart Long Term Gov;SLTGX +N224=Fid Spart Muni Income;FSMIX +N225=Fid Spart Short Term Muni;FSTFX +N226=Fid Spartan Govt Income Fund;SPGVX +N227=Fid Specialty Situation;FSLSX +N228=Fid Stock Selector Fund;FDSSX +N229=Fid Trend Fund;FTRNX +N230=Fid Utility Income Fund;FIUIX +N231=Fid Worldwide Fund;FWWFX +N232=Fidelity Fund;FFIDX +N233=Fidelity Hong Kong China Fund;FHKCX +N234=Fidelity Japan Small Co;FJSCX +N235=Fidelity Limited Term Muni;FLTMX +N236=First Investors Tax Exempt Fund;FITAX +N237=Flex Fund Short Term Global Income;FLGIX +N238=Founder Discovery Mutual Fund;FDISX +N239=Founder Worldwide Growth;FWWGX +N240=Founders Frontier Fund Inc.;FOUNX +N241=Founders Growth Fund;FRGRX +N242=Founders Passport Fund;FPSSX +N243=Founders Special Fund;FRSPX +N244=Frank/Temp German Govt Bond;HGGBX +N245=Frank/Templ Global Curr;ICPGX +N246=Franklin Dynatech Fund;FKDNX +N247=Franklin Equity Fund;FKREX +N248=Franklin Federal Tax Free Income Fund;FKTIX +N249=Franklin Gold Fund;FKRCX +N250=Franklin US Govt Secs Fd;FKUSX +N251=Franklin Utility Fund;FKUTX +N252=Franklin Valuemark;AGEFX +N253=Franklin Valuemark Income Sec;FKINX +N254=Fremont Global Fund;FMAFX +N255=Gabelli Asset Fund;GABAX +N256=Gabelli Global Telecommunications;GABTX +N257=Gabelli Growth Fund;GABGX +N258=Gabelli Small Cap Growth Fund;GABSX +N259=Gabelli Value Fund;GABVX +N260=Gateway Index Plus Fund;GATEX +N261=GE Savings & Security Long Term;GESSX +N262=GE Savings Security Program;GESLX +N263=Gintel Erisa Fund;GINTX +N264=Gintel Fund;GINLX +N265=Goldman Sachs Smallcap Equity Fund;GSSMX +N266=Govett Smaller Cos Fund;GSCQX +N267=Gradison Established Growth Fund;GETGX +N268=Greenspring Fund;GRSPX +N269=GT Global America Growth Fund;GTAGX +N270=GT Global Bond Fund;GSIAX +N271=GT Global Emerging Mkt;GTEMX +N272=GT Global Europe Growth Fund;GTGEX +N273=GT Global Gov't Income Fund;GGINX +N274=GT Global Growth & Income Fund;GAGIX +N275=GT Global Health Care Fund;GGHCX +N276=GT Global Int'l Growth Fund;GINGX +N277=GT Global Japan Growth Fund;GJGRX +N278=GT Global Pacific Growth Fund;GTPAX +N279=GT Global Worldwide Growth Fund;GTWGX +N280=Guiness Flight China & HK;GFCHX +N281=Harbor Intl Fund;HAINX +N282=Hartwell Growth Fund;HRGRX +N283=Heartland Small Cap Cont Fund;HRSMX +N284=Heartland Value;HRTVX +N285=Hotchkis & Wiley Intl;HWINX +N286=Hotchkis & Wiley Low Duration;HWLDX +N287=Hotchkis & Wiley Total Return;HWTRX +N288=IAI Apollo Fund;IAAPX +N289=IAI Emerging Growth Fund;IAEGX +N290=IAI Growth & Income Fund;IASKX +N291=IAI Intl Fun;IAINX +N292=IAI Regional Fund;IARGX +N293=IDS Bond Fund;INBNX +N294=IDS Discovery Fund;INDYX +N295=IDS Equity Plus Fund;INVPX +N296=IDS Extra Income Fund;INEAX +N297=IDS Growth Fund;INIDX +N298=IDS Intl Fund;INIFX +N299=IDS Managed Retirement;IMRFX +N300=IDS Mutual Fund;INMUX +N301=IDS New Dimensions Fund;INNDX +N302=IDS Progressive Fund;INPRX +N303=IDS Selective Fund;INSEX +N304=IDS Stock Fund;INSTX +N305=IDS Strategy Aggressive;INAGX +N306=IDS Tax-Exempt Bond Fund;INTAX +N307=IDS Utilities Income Fund;INUTX +N308=Invesco Dynamics;FIDYX +N309=Invesco Emerging Growth Fund;FIEGX +N310=Invesco Financial Services;FSFSX +N311=Invesco Growth Fund;FLRFX +N312=Invesco Income Fund;FBDSX +N313=Invesco Income Hi Yield;FHYPX +N314=Invesco Income US Govt Security;FBDGX +N315=Invesco Industrial Income Fund;FIIIX +N316=Invesco International European;FEURX +N317=Invesco Intl Growth;FSIGX +N318=Invesco Intl Pacific Basin;FPBSX +N319=Invesco Strategic Energy;FSTEX +N320=Invesco Strategic Gold;FGLDX +N321=Invesco Strategic Health;FHLSX +N322=Invesco Strategic Leisure;FLISX +N323=Invesco Strategic Technology;FTCHX +N324=Invesco Strategic Utilities;FSTUX +N325=Invesco Tax Free Income;FTIFX +N326=Invesco Value Inter Bond Fund;FIGBX +N327=Invesco Value Total Return;FSFLX +N328=Invesco World Wide Communication;ISWCX +N329=Investco Environment;FSEVX +N330=Investco Multi Asset;IMABX +N331=Ivy Growth Fund;IVYFX +N332=Ivy Int'l Fund;IVINX +N333=Janus Enterprise;JAENX +N334=Janus Flex Income;JAFIX +N335=Janus Fund;JANSX +N336=Janus Growth & Income;JAGIX +N337=Janus Mercury Fund;JAMRX +N338=Janus Olympus Fund;JAOLX +N339=Janus Overseas;JAOSX +N340=Janus Twenty Fund;JAVLX +N341=Janus Venture Fund;JAVTX +N342=Janus Worldwide;JAWWX +N343=John Handcock World Fund;JHGRX +N344=Kaufman Fund;KAUFX +N345=Kemper Growth Fund];KGRAX +N346=Kemper Inv High Yield;KHYAX +N347=Keystone Balance Fund;KKONX +N348=Keystone Cust Fund Series S-4;KSFOX +N349=Keystone Diversified Bond;KBTWX +N350=Keystone Growth & Income;KSONX +N351=Keystone High Income;KBFOX +N352=Keystone Mid Cap Growth Fund;KSTHX +N353=Keystone Precious Metals Hldgs;KSPMX +N354=Keystone Quality Bond Fund;KBONX +N355=Keystone Strategic Growth Fund;KKTWX +N356=Keystone Tax Free Fund;KSTFX +N357=Legg Mason Special Investments;LMASX +N358=Legg Mason Value Trust;LMVTX +N359=Lexington Corp Lenders Tres;LEXCX +N360=Lexington Global Fund;LXGLX +N361=Lexington Gold Fund Inc;LEXMX +N362=Lexington Ramirez Global Incom;LEBDX +N363=Lexington Research Fund;LEXRX +N364=Lexington Strat Silver Fund;STSLX +N365=Lexington Strategic Investment;STIVX +N366=Lexington World Wide Emerging Markets;LEXGX +N367=Liberty Muni Security Fund;LMSFX +N368=Lindner Bulwark Inc;LDNBX +N369=Lindner Dividend Fund;LDDVX +N370=Lindner Fund;LDNRX +N371=Lord Ab Bond Deb;LBNDX +N372=Lord Ab Dev Growth Fund;LAGWX +N373=Lord Ab Govt Security Fd;LAGVX +N374=Lord Ab Value Appreciation;LAVLX +N375=Lord Abbett Affiliated Fund;LAFFX +N376=M Lynch Amer Inc Cl D;MDAMX +N377=M Lynch Americus;MBAMX +N378=M Lynch Asset Growth Cl B;MBAGX +N379=M Lynch Asset Income Cl B;MBASX +N380=M Lynch Basic Value Cl B;MBAZX +N381=M Lynch Basic Value;MBBAX +N382=M Lynch Bond Fund I& R Cl C;MCGOX +N383=M Lynch Cap Fund Cl B;MBCPX +N384=M Lynch Dev Cap Markets;MBDCX +N385=M Lynch E Africa Cl B;MBAFX +N386=M Lynch Euro Fund Cl B;MBEFX +N387=M Lynch Funds For Instit;MLTXX +N388=M Lynch Glb Cv Fund Cl B;MBGVX +N389=M Lynch Glob Util Cl B;MBGUX +N390=M Lynch Global Alloc Cl B;MBLOX +N391=M Lynch Global Bond I & R Cl B;MBGOX +N392=M Lynch Global Holdings Cl B;MBHDX +N393=M Lynch Global Res Tr Cl B;MBGRX +N394=M Lynch Global Small Cap Cl B;MBGCX +N395=M Lynch Growth Fd IRA Cl B;MBQRX +N396=M Lynch Growth Fund Cl B;MBFGX +N397=M Lynch Growth Inv & Retirement;MDQRX +N398=M Lynch Healthcare Cl B;MBHCX +N399=M Lynch Inst Interm Cl A;MLMEX +N400=M Lynch Intl Eq Fund Cl B;MBIEX +N401=M Lynch Latin Amer Cl B;MBLTX +N402=M Lynch Pacific Fd Cl B;MBPCX +N403=M Lynch Short Term Glb Cl B;MBSIX +N404=M Lynch Spec Value Cl B;MBSPX +N405=M Lynch Strat Div Cl B;MBDVX +N406=M Lynch Tech Fund Cl B;MBTCX +N407=M Lynch Tomorrow Fund Cl B;MBTWX +N408=M Lynch Util Income Cl B;MBUTX +N409=M Lynch Value Fund Cl B;MDSPX +N410=Managers Intermediate Mortgage;MGIGX +N411=Mas Pooled Intl Equity;MPIEX +N412=Mathers Fund;MATRX +N413=Merger Fund;MERFX +N414=Merrill Basic Value;MABAX +N415=Merrill Capital;MACPX +N416=Merrill Corp High Income;MAHIX +N417=Merrill Federal Securities;MBFSX +N418=Merrill Growth;MAQRX +N419=Merrill International Holdings;MAHDX +N420=Merrill Investment Grade;MBHQX +N421=Merrill L Phoenix Fund;MBPNX +N422=Merrill L Tech Fund;MATCX +N423=Merrill Lynch Dragon Fund;MBDRX +N424=Merrill Pacific;MAPCX +N425=Merrill Special Value;MASPX +N426=MFS Gov't Mortgage Fund;MGMTX +N427=MFS High Income Fund;MHITX +N428=Midas Fund Inc;EMGSX +N429=Monetta Fund Inc;MONTX +N430=Monitrend Gold Fund;MNTGX +N431=Montgomery Asset Allocation;MNAAX +N432=Montgomery Emerging Markets;MNEMX +N433=Montgomery Equity Income;MNEIX +N434=Montgomery Global Commun Fund;MNGCX +N435=Montgomery Global Opportunity;MNGOX +N436=Montgomery Growth;MNGFX +N437=Montgomery Intl Small Cap;MNISX +N438=Montgomery Micro Cap;MNMCX +N439=Montgomery Small Cap Fund;MNSCX +N440=Mutual Beacon Fund Inc;BEGRX +N441=Mutual Discovery Fund;MDISX +N442=Mutual Qualified Income Fund;MQIFX +N443=Mutual Shares Corp;MUTHX +N444=Navellier Aggressive Small Cap;NASCX +N445=Neub & Ber Partners;NPRTX +N446=Neub & Ber Select Sectors;NBSSX +N447=Neub Guardian;NGUAX +N448=Neub Ltd Maturity Bond;NLMBX +N449=Neub Manhattan;NMANX +N450=New USA Fund;NUSFX +N451=Newberger & Bermon Manttatn TR;NBMTX +N452=Nicholas Fund;NICSX +N453=Nicholas II Fund;NCTWX +N454=Nicholas Income Fund;NCINX +N455=Nomura Pacific Basin Fund;NPBFX +N456=Northeast Investors Growth Fund;NTHFX +N457=Northeast Investors Trust Fund;NTHEX +N458=Oakmark;OAKMX +N459=Oakmark Intl Fd;OAKIX +N460=Oberweis Emerging Grwth Fund;OBEGX +N461=Oppen Main St Income & Growth;MSIGX +N462=Oppenheimer Glabal A Fund;OPPAX +N463=Oppenheimer Gold & Spec Minerals;OPGSX +N464=Pacific Horizon Agressive Fund;PHAGX +N465=Pax World Fund;PAXWX +N466=Pbhg Emerging Growth;PBEGX +N467=Pbhg Fund;PBHGX +N468=PBHG Large Cap Growth;PBHLX +N469=PBHG Select Equity;PBHEX +N470=PBHG Tech & Communications Fund;PBTCX +N471=Penn Mutual Fund;PENNX +N472=Penn Square Fund;PESQX +N473=Pimco Adv Growth Fund;PGWCX +N474=Pimco Adv Intl Fund;PILCX +N475=Pimco Foreign;PFORX +N476=Piper Jaffray Institutional Gvt Income;PJIGX +N477=Pra Real Estate Fund;PRREX +N478=Primco Adv Oppt Cl C;POPCX +N479=Prud Global Utility Fund;GLUAX +N480=Prudential Interm Global Income Fund;PBIGX +N481=Put Convertible Fund;PCONX +N482=Put Diversified Income Trust;PDINX +N483=Put Growth & Income Fund;PGRWX +N484=Put Income Fund;PINCX +N485=Put Intl Equities;PEQUX +N486=Put Investors Fund;PINVX +N487=Put Natural Resources Fund;EBERX +N488=Put Option Income II Fund;PMITX +N489=Put OTC Emerging Growth Fund;POEGX +N490=Put Vista Basic Value Fund;PVISX +N491=Put Voyager Fund;PVOYX +N492=Putnam Cali Tax Ex Inc;PCTEX +N493=Putnam Health Sciences;PHSTX +N494=Putnam High Yield Tr B;PHBBX +N495=Putnam High Yield Tr A;PHIGX +N496=Putnam Tax Ex Income;PTAEX +N497=Quest For Value Fund;QFVFX +N498=Reich & Tang Equity Fund;RCHTX +N499=RIM Balanced PT;RIMBX +N500=RIM Small/Mid Cap Equity;RIMSX +N501=Rob St Contrarian Fund;RSCOX +N502=Rob St Dev Countries Fund;RSDCX +N503=Rob St Emerging Growth Fund;RSEGX +N504=Rob St Value Plus Fund;RSVPX +N505=Robertson Stephens Info Age;RSIFX +N506=Royce Mico Cap;RYOTX +N507=Royce Value Fund;RYVFX +N508=Rushmore Amer Gas Index;GASFX +N509=Ryder Juno Fund;RYJUX +N510=Rydex Nova Port;RYNVX +N511=Rydex OTC Fund;RYOCX +N512=Rydex Precious Metal Fund;RYPMX +N513=Rydex Ursa Fund;RYURX +N514=Rydex US Gov Bond;RYGBX +N515=Safeco Equity Fund;SAFQX +N516=Safeco Gov't Securities Fund;SFUSX +N517=Safeco Growth Fund;SAFGX +N518=Safeco Income Fund Inc;SAFIX +N519=Safeco Municipal Bond Fund;SFCOX +N520=SBS Strategic Investing;SESIX +N521=Schroder Capital Us Equity;SUSEX +N522=Schroder Intl Equity;SCIEX +N523=Schwab 1000 Fund;SNXFX +N524=Schwab Intl Index Fund;SWINX +N525=Scud CA Tax Free Fund;SCTFX +N526=Scud Capital Growth Fund;SCDUX +N527=Scud Development Fund;SCDVX +N528=Scud Emerg Mrkt Income;SCEMX +N529=Scud Global Bond Fund;SSTGX +N530=Scud Global Fund;SCOBX +N531=Scud Gnma Fund;SGMSX +N532=Scud Gold Fund;SCGDX +N533=Scud Growth & Income Fund;SCDGX +N534=Scud Hi Yield Tax Free;SHYTX +N535=Scud Income Fund Inc;SCSBX +N536=Scud Intl Bond Fund;SCIBX +N537=Scud Intl Fund;SCINX +N538=Scud Japan Fund;SJPNX +N539=Scud Med Term Tax Free;SCMTX +N540=Scud Mgt Municipal Fund;SCMBX +N541=Scud Quality Growth Fund;SCQGX +N542=Scud Short Term Bond Fund;SCSTX +N543=Scud US Tres Money Fund;SCGXX +N544=Scud Zero Coupon 2000 Target;SGZTX +N545=Scudder Global Discovery Fund;SGSCX +N546=Scudder Greater Europe Group;SCGEX +N547=Scudder Latin America Fund;SLAFX +N548=Scudder Pacific Opportunity;SCOPX +N549=Scudder Value Fund;SCVAX +N550=SEI Index S&P 500;TRQIX +N551=SEI Inst Managed Trust Small Cap Growth;SSCGX +N552=Select Special Shares;SLSSX +N553=Selected Amer Shares;SLASX +N554=Seligman Comm & Info Class D;SLMDX +N555=Seligman Frontier;SLFRX +N556=Sequoia Fund Inc;SEQUX +N557=Shearson SP High Income;SHIBX +N558=Sit Growth Fund Incorp;NBNGX +N559=Sit Small CAp Growth Fund;SSMGX +N560=Smith Barn Managed Growth Fund;SBMGX +N561=Sogen International;SGENX +N562=Spartan High Income Mutual Fund;SPHIX +N563=State Farm Growth Fund;STFGX +N564=State Street Research Govt Income Fund;SSGIX +N565=Stein Roe Capital Fund;SRFCX +N566=Stein Roe Growth Fund;SRFSX +N567=Stein Roe Hi Yield Muni;SRMFX +N568=Stein Roe Special Fund;SRSPX +N569=Stratton Growth Fund;STRGX +N570=Stratton Monthly Dividend;STMDX +N571=Strong Asia Pacific Fund;SASPX +N572=Strong Asset Allocation;STAAX +N573=Strong Common Stock Fund;STCSX +N574=Strong Corporate Bond Fund Inc;STCBX +N575=Strong Discovery Fund;STDIX +N576=Strong Government Securities;STVSX +N577=Strong Growth;SGROX +N578=Strong High Yield Fund;SHYLX +N579=Strong Intl Bond Fund;SIBUX +N580=Strong Intl Stock;STISX +N581=Strong Municipal Advantage Fund;SMUAX +N582=Strong Opportunity Fund;SOPFX +N583=Strong Short Term Bond;SSTBX +N584=Strong Short Term Glbl Bond;STGBX +N585=Strong Total Return Fund;STRFX +N586=T Price Rowe Capital Apprec Fund;PRWCX +N587=T Price Rowe Income Fund;PRCIX +N588=T Price Rowe Int'l Stock Fund;PRITX +N589=T Price Rowe New Era Fund;PRNEX +N590=T Price Rowe New Horizon Fund;PRNHX +N591=T Price Rowe Tax Free Hi Yield;PRFHX +N592=T Rowe Global Government Bond;RPGGX +N593=T Rowe Growth Fund;TRSGX +N594=T Rowe Income Fund;PRSIX +N595=T Rowe Japan;PRJPX +N596=T Rowe Latin Amer;PRLAX +N597=T Rowe Personal Strat;TRPBX +N598=T Rowe Price Equity Fund;PRFDX +N599=T Rowe Price Equity;PREIX +N600=T Rowe Price European Stock Fund;PRESX +N601=T Rowe Price High Yield Bond Fund;PRHYX +N602=T Rowe Price Int'l Bond Fund;RPIBX +N603=T Rowe Price Int'l Discovery Fund;PRIDX +N604=T Rowe Price New Amer Growth;PRWAX +N605=T Rowe Price NY Tax Free Bond Fund;PRNYX +N606=T Rowe Price OTC Fund;OTCFX +N607=T Rowe Price Science & Technology;PRSCX +N608=T Rowe Price Small Cap Value;PRSVX +N609=T Rowe Price Tax Free Short Interest;PRFSX +N610=T Rowe Price US Treasury Long Term;PRULX +N611=T Rowe Short Term Global Income;RPSGX +N612=Temp Foreign Equity Series;TFEQX +N613=Templeton Developing Market;TEDMX +N614=Templeton Foreign Fund;TEMFX +N615=Templeton Global Opport Tr;TEGOX +N616=Templeton Growth Fund;TEPLX +N617=Templeton Intl Stock Fund;FINEX +N618=Templeton Real Estate Securities;TEMRX +N619=Templeton World Fund;TEMWX +N620=TR Price Spec Growth Fund;PRSGX +N621=TR Price Spec Income Fund;RPSIX +N622=Trowe Price New Asia;PRASX +N623=Tweedy Browne Global Value;TBGVX +N624=United Bond Fund;UNBDX +N625=United Service Goldshares;USERX +N626=United Service Real Estate;UNREX +N627=United Service World Gold Fund;UNWPX +N628=USAA Agressive Growth Fund;USAUX +N629=USAA Capital Growth Fund;USAAX +N630=USAA Cornerstone Strat Fund;USCRX +N631=USAA Gold Fund;USAGX +N632=USAA Investment Intl;USIFX +N633=USAA Mutual Income Fund;USAIX +N634=USAA Tax Exempt Intermediate Term;USATX +N635=USAA Tax Exempt Short Term;USSTX +N636=Value Line Aggressive Income Fund;VAGIX +N637=Value Line Convertible Fd Inc;VALCX +N638=Value Line Fund;VLIFX +N639=Value Line High Yield Port;VLHYX +N640=Value Line Income Fund;VALIX +N641=Value Line Leveraged Growth;VALLX +N642=Value Line Special Fund;VALSX +N643=Value Line US Gov't Securities Fund;VALBX +N644=Van Eck Fund Intl Invest;INIVX +N645=Van Eck Gold Resources Fund;GRFRX +N646=Van Kampen Merriott US Govt Fund;VKMGX +N647=Vang Bond Market Fund;VBMFX +N648=Vang Converible Security Fund;VCVSX +N649=Vang Equity Income Port;VEIPX +N650=Vang Explorer Fund;VEXPX +N651=Vang GNMA Port;VFIIX +N652=Vang Gold & Precious Metal;VGPMX +N653=Vang High Yield Corp;VWEHX +N654=Vang Hor Capital Oppt;VHCOX +N655=Vang Horizon Aggressive Growth;VHAGX +N656=Vang Horz Glb Assets;VHAAX +N657=Vang Horz Glb Equity;VHGEX +N658=Vang Index 500 Trust;VFINX +N659=Vang Index Growth Fund;VIGRX +N660=Vang Index Trust Extended Market Fund;VEXMX +N661=Vang Index Value Fund;VIVAX +N662=Vang Intl Eq Emerging;VEIEX +N663=Vang Intl Index Europe;VEURX +N664=Vang Intl Index Pacific;VPACX +N665=Vang Life Cons Growth;VSCGX +N666=Vang Life Income;VASIX +N667=Vang Life Mod Pt;VSMGX +N668=Vang Morgan;VMRGX +N669=Vang Municipal Bond Fund;VWAHX +N670=Vang Preferred Stock Fund;VQIIX +N671=Vang Primecap;VPMCX +N672=Vang Quantitative;VQNPX +N673=Vang Short Term Corporate Fund;VFSTX +N674=Vang Short Term Gov't Bond Fund;VSGBX +N675=Vang Smallcap Stock Fund;NAESX +N676=Vang Special Energy Port;VGENX +N677=Vang Special Health Port;VGHCX +N678=Vang Star Fund;VGSTX +N679=Vang TCA Intl;VTRIX +N680=Vang TCF USA Fund;VTRSX +N681=Vang US Treasury Bond Port;VUSTX +N682=Vang Utility Income;VGSUX +N683=Vang Warwick Intermed Fund;VWITX +N684=Vang Warwick Short Fund;VWSTX +N685=Vang Wellesley;VWINX +N686=Vang Wellington Fund;VWELX +N687=Vang Westminster Fixed Income Fund;VWESX +N688=Vang Windsor Fund;VWNDX +N689=Vang Windsor II;VWNFX +N690=Vang World Fd Int'l Grwth;VWIGX +N691=Vang World Fund US Growth Port;VWUSX +N692=Vanguard Asset Allocation Strat;VAAPX +N693=Vanguard Life Growth;VASGX +N694=Vista Capital Growth Fund;VCAGX +N695=Von Wagoner Emerging Growth;VWEGX +N696=Von Wagoner Mid Cap Fund;VWMDX +N697=Vontobel Europacific;VNEPX +N698=Vontobel US Value;VUSVX +N699=Warburg Pin Gr & Income;RBEGX +N700=Warburg Pincus Emerging Growth;CUEGX +N701=Warburg Pincus Global Fixed Income;CGFIX +N702=Warburg Pincus Intl Equity;CUIEX +N703=Warburg Pincus Japan;WPJPX +N704=Wasatch Aggressive Equity Fund;WAAEX +N705=Wasatch Growth Fund;WGROX +N706=Wasatch Micro-Cap;WMICX +N707=Wasatch Mid-Cap Fund;WAMCX +N708=Wayne Hummer Income Fund;WHICX +N709=Weiss, Peck & Greer Tudor Fund;TUDRX +N710=World\Fds Vontobel US Value;VUSGX +N711=WPG Govt Securities;WPGVX +N712=WPG Growth & Income;WPGFX +N713=Wright Dutch Ntl Fund;WENLX +N714=Wright Equity Mex Ntl;WEMEX +N715=Wright Equity TR Hong Kong;WEHKX diff --git a/http/EMIT.CPP b/http/EMIT.CPP new file mode 100644 index 0000000..a59a18b --- /dev/null +++ b/http/EMIT.CPP @@ -0,0 +1,48 @@ +#include +#include + +Emit::Emit(PureViewOfFile &inputView,PureViewOfFile &outputView) +: mIsEmitting(TRUE), mInputView(inputView), mOutputView(outputView) +{ +} + +Emit::~Emit() +{ +} + +void Emit::emit(int code,int type,int identifier)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); + mOutputView.write(type); + mOutputView.write(identifier); +} + +void Emit::emit(int code,double value)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); + mOutputView.write(value); +} + +void Emit::emit(int code,int op)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); + mOutputView.write(op); +} + +void Emit::emit(const char *lpLiteralValue)const +{ + if(!mIsEmitting||!lpLiteralValue)return; + mOutputView.write(String(lpLiteralValue)); +} + +void Emit::emit(const String &literalValue)const +{ + if(!mIsEmitting||literalValue.isNull())return; + int stringLength(literalValue.length()); + mOutputView.write(stringLength); + mOutputView.write(literalValue); +} + diff --git a/http/EMIT.HPP b/http/EMIT.HPP new file mode 100644 index 0000000..deaa108 --- /dev/null +++ b/http/EMIT.HPP @@ -0,0 +1,67 @@ +#ifndef _HTTP_EMIT_HPP_ +#define _HTTP_EMIT_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class Emit +{ + friend class Scan; + friend class Parse; +public: + void emit(const char *lpLiteralValue)const; + void emit(const String &literalValue)const; + void emit(int code,int type,int identifier)const; + void emit(int code)const; + void emit(int code,double value)const; + void emit(int code,int op)const; + int read(void); + int read(void *variable,size_t size); + void emitting(int); + int emitting(void)const; +private: + Emit(PureViewOfFile &inputView,PureViewOfFile &outputView); + virtual ~Emit(); + + int mIsEmitting; + char mLastSymbol; + PureViewOfFile &mInputView; + PureViewOfFile &mOutputView; +}; + +inline +void Emit::emitting(int isEmitting) +{ + mIsEmitting=isEmitting; +} + +inline +int Emit::emitting(void)const +{ + return mIsEmitting; +} + +inline +void Emit::emit(int code)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); +} + +inline +int Emit::read(void) +{ + if(!mInputView.read((unsigned char&)mLastSymbol))return 0xFFFF; + return mLastSymbol; +} + +inline +int Emit::read(void *variable,size_t size) +{ + if(!mInputView.read((char*)variable,size))return 0xFFFF; + return 0; +} +#endif diff --git a/http/ENTRY.HPP b/http/ENTRY.HPP new file mode 100644 index 0000000..8e925ad --- /dev/null +++ b/http/ENTRY.HPP @@ -0,0 +1,99 @@ +#ifndef _HTTP_ENTRYITEM_HPP_ +#define _HTTP_ENTRYITEM_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class EntryItem +{ +public: + EntryItem(void); + EntryItem(const EntryItem &entryItem); + EntryItem(const String &hostName,const String &pageName,const String &saveAs); + EntryItem &operator=(const EntryItem &entryItem); + BOOL operator==(const EntryItem &entryItem)const; + const String &hostName(void)const; + void hostName(const String &hostName); + const String &pageName(void)const; + void pageName(const String &pageName); + const String &saveAs(void)const; + void saveAs(const String &saveAs); +private: + String mHostName; + String mPageName; + String mSaveAs; +}; + +inline +EntryItem::EntryItem(void) +{ +} + +inline +EntryItem::EntryItem(const EntryItem &entryItem) +: mHostName(entryItem.hostName()), mPageName(entryItem.pageName()), mSaveAs(entryItem.saveAs()) +{ +} + +inline +EntryItem::EntryItem(const String &hostName,const String &pageName,const String &saveAs) +: mHostName(hostName), mPageName(pageName), mSaveAs(saveAs) +{ +} + +inline +EntryItem &EntryItem::operator=(const EntryItem &entryItem) +{ + hostName(entryItem.hostName()); + pageName(entryItem.pageName()); + saveAs(entryItem.saveAs()); + return *this; +} + +inline +BOOL EntryItem::operator==(const EntryItem &entryItem)const +{ + return (hostName()==entryItem.hostName()&& + pageName()==entryItem.pageName()&& + saveAs()==entryItem.saveAs()); +} + +inline +const String &EntryItem::hostName(void)const +{ + return mHostName; +} + +inline +void EntryItem::hostName(const String &hostName) +{ + mHostName=hostName; +} + +inline +const String &EntryItem::pageName(void)const +{ + return mPageName; +} + +inline +void EntryItem::pageName(const String &pageName) +{ + mPageName=pageName; +} + +inline +const String &EntryItem::saveAs(void)const +{ + return mSaveAs; +} + +inline +void EntryItem::saveAs(const String &saveAs) +{ + mSaveAs=saveAs; +} +#endif diff --git a/http/HOLD.CPP b/http/HOLD.CPP new file mode 100644 index 0000000..79fdc12 --- /dev/null +++ b/http/HOLD.CPP @@ -0,0 +1,147 @@ + +#if 0 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +WORD open(const String &ticker); +void writeLines(Block &stringBlock); +void saveLines(Block &stringBlock,const String &saveName); +DWORD symbolLoad(String fundType,Block &symbolStrings); + +Console winConsole; + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + Block itemStrings; + String statusString; + int itemIndex; + + symbolLoad(String("NASDAQ"),itemStrings); + for(itemIndex=0;itemIndex receiveStrings; + getRequest+=tickerString; + winConsole.writeLine(getRequest); + getRequest+="\n"; + httpControl.send(getRequest); + httpControl.receivePage(receiveStrings); +// writeLines(receiveStrings); + saveLines(receiveStrings,tickerString+String(".HTM")); + return httpControl.isConnected(); +} + +void writeLines(Block &stringBlock) +{ + for(short itemIndex=0;itemIndex &stringBlock,const String &saveName) +{ + FileHandle saveFile(saveName,FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite); + + for(short itemIndex=0;itemIndex &symbolStrings) +{ + String lineString; + if(fundType.isNull())return FALSE; + fundType+=String(".txt"); + symbolStrings.remove(); + FileHandle readFile(fundType,FileHandle::Read,FileHandle::ShareRead,FileHandle::Open); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + while(readView.getLine(lineString))symbolStrings.insert(&lineString); + return symbolStrings.size(); +} +#endif \ No newline at end of file diff --git a/http/HOLD/EMIT.CPP b/http/HOLD/EMIT.CPP new file mode 100644 index 0000000..d74772a --- /dev/null +++ b/http/HOLD/EMIT.CPP @@ -0,0 +1,50 @@ +#if 0 +#include +#include + +Emit::Emit(PureViewOfFile &inputView,PureViewOfFile &outputView) +: mIsEmitting(TRUE), mInputView(inputView), mOutputView(outputView) +{ +} + +Emit::~Emit() +{ +} + +void Emit::emit(int code,int type,int identifier)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); + mOutputView.write(type); + mOutputView.write(identifier); +} + +void Emit::emit(int code,double value)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); + mOutputView.write(value); +} + +void Emit::emit(int code,int op)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); + mOutputView.write(op); +} + +void Emit::emit(const char *lpLiteralValue)const +{ + if(!mIsEmitting||!lpLiteralValue)return; + mOutputView.write(String(lpLiteralValue)); +} + +void Emit::emit(const String &literalValue)const +{ + if(!mIsEmitting||literalValue.isNull())return; + int stringLength(literalValue.length()); + mOutputView.write(stringLength); + mOutputView.write(literalValue); +} + +#endif \ No newline at end of file diff --git a/http/HOLD/EMIT.HPP b/http/HOLD/EMIT.HPP new file mode 100644 index 0000000..deaa108 --- /dev/null +++ b/http/HOLD/EMIT.HPP @@ -0,0 +1,67 @@ +#ifndef _HTTP_EMIT_HPP_ +#define _HTTP_EMIT_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class Emit +{ + friend class Scan; + friend class Parse; +public: + void emit(const char *lpLiteralValue)const; + void emit(const String &literalValue)const; + void emit(int code,int type,int identifier)const; + void emit(int code)const; + void emit(int code,double value)const; + void emit(int code,int op)const; + int read(void); + int read(void *variable,size_t size); + void emitting(int); + int emitting(void)const; +private: + Emit(PureViewOfFile &inputView,PureViewOfFile &outputView); + virtual ~Emit(); + + int mIsEmitting; + char mLastSymbol; + PureViewOfFile &mInputView; + PureViewOfFile &mOutputView; +}; + +inline +void Emit::emitting(int isEmitting) +{ + mIsEmitting=isEmitting; +} + +inline +int Emit::emitting(void)const +{ + return mIsEmitting; +} + +inline +void Emit::emit(int code)const +{ + if(!mIsEmitting)return; + mOutputView.write(code); +} + +inline +int Emit::read(void) +{ + if(!mInputView.read((unsigned char&)mLastSymbol))return 0xFFFF; + return mLastSymbol; +} + +inline +int Emit::read(void *variable,size_t size) +{ + if(!mInputView.read((char*)variable,size))return 0xFFFF; + return 0; +} +#endif diff --git a/http/HOLD/PRESCAN.CPP b/http/HOLD/PRESCAN.CPP new file mode 100644 index 0000000..5411bbf --- /dev/null +++ b/http/HOLD/PRESCAN.CPP @@ -0,0 +1,28 @@ +#include +#include +#include +#include +#include +#include + +void PreScan::preScan(const String &pathFileName) +{ + BTree mapToken; + String formatString; + BYTE readByte; + + FileHandle writeFile("tokens.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + FileHandle scanFile(pathFileName,FileHandle::Read,FileHandle::ShareRead,FileHandle::Open); + if(!scanFile.isOkay())return; + FileMap scanMap(scanFile); + PureViewOfFile scanView(scanMap); + + PureVector scanBytes; + while(scanView.read(readByte))mapToken.insert(PureBYTE(readByte)); + mapToken.treeItems(scanBytes); + for(int itemIndex=0;itemIndex +#endif + +class String; + +class PreScan +{ +public: + PreScan(void); + virtual ~PreScan(); + void preScan(const String &pathFileName); +private: +}; + +inline +PreScan::PreScan(void) +{ +} + +inline +PreScan::~PreScan() +{ +} +#endif \ No newline at end of file diff --git a/http/HOLD/READER.CPP b/http/HOLD/READER.CPP new file mode 100644 index 0000000..ff12349 --- /dev/null +++ b/http/HOLD/READER.CPP @@ -0,0 +1,197 @@ +#include +#include + +Reader::Reader(void) +{ +} + +Reader::~Reader() +{ +} + +void Reader::read(PureViewOfFile &inView) +{ + Scan::ScanSymbols scanSymbol; + String workString; + double workDouble; + int strLength; + + inView.rewind(); + while(TRUE) + { + if(!inView.read((int&)scanSymbol))break; + switch(scanSymbol) + { + case Scan::leftangle1 : + leftangle(); + break; + case Scan::rightangle1 : + rightangle(); + break; + case Scan::forwardslash1 : + forwardslash(); + break; + case Scan::ampersand1 : + ampersand(); + break; + case Scan::semicolon1 : + semicolon(); + break; + case Scan::space1 : + space(); + break; + case Scan::colon1 : + colon(); + break; + case Scan::leftparen1 : + leftparen(); + break; + case Scan::rightparen1 : + rightparen(); + break; + case Scan::exclamation1 : + exclamation(); + break; + case Scan::minus1 : + minus(); + break; + case Scan::pound1 : + pound(); + break; + case Scan::equal1 : + equal(); + break; + case Scan::newline1 : + newline(); + break; + case Scan::endtext1 : + endtext(); + break; + case Scan::unknown1 : + unknown(); + break; + case Scan::literal1 : + inView.read(strLength); + workString.reserve(strLength+1); + inView.read((LPSTR)workString,strLength); + literal(workString); + break; + case Scan::name1 : + inView.read(strLength); + workString.reserve(strLength+1); + inView.read((LPSTR)workString,strLength); + name(workString); + break; + case Scan::numeral1 : + inView.read(workDouble); + numeral(workDouble); + break; + case Scan::stop1 : + stop(); + break; + } + } +} + +// virtuals + +void Reader::leftangle(void) +{ + return; +} + +void Reader::rightangle(void) +{ + return; +} + +void Reader::forwardslash(void) +{ + return; +} + +void Reader::ampersand(void) +{ + return; +} + +void Reader::semicolon(void) +{ + return; +} + +void Reader::space(void) +{ + return; +} + +void Reader::colon(void) +{ + return; +} + +void Reader::leftparen(void) +{ + return; +} + +void Reader::rightparen(void) +{ + return; +} + +void Reader::exclamation(void) +{ + return; +} + +void Reader::minus(void) +{ + return; +} + +void Reader::pound(void) +{ + return; +} + +void Reader::equal(void) +{ + return; +} + +void Reader::newline(void) +{ + return; +} + +void Reader::endtext(void) +{ + return; +} + +void Reader::unknown(void) +{ + return; +} + +void Reader::numeral(double /*value*/) +{ + return; +} + +void Reader::literal(const String &/*literal*/) +{ + return; +} + +void Reader::name(const String &/*name*/) +{ + return; +} + +void Reader::stop(void) +{ + return; +} + diff --git a/http/HOLD/READER.HPP b/http/HOLD/READER.HPP new file mode 100644 index 0000000..3ff6caa --- /dev/null +++ b/http/HOLD/READER.HPP @@ -0,0 +1,38 @@ +#ifndef _HTTP_READER_HPP_ +#define _HTTP_READER_HPP_ +#ifndef _HTTP_SCAN_HPP_ +#include +#endif + +class String; + +class Reader +{ +public: + Reader(void); + virtual ~Reader(); + void read(PureViewOfFile &inView); +protected: + virtual void leftangle(void); + virtual void rightangle(void); + virtual void forwardslash(void); + virtual void ampersand(void); + virtual void semicolon(void); + virtual void space(void); + virtual void colon(void); + virtual void leftparen(void); + virtual void rightparen(void); + virtual void exclamation(void); + virtual void minus(void); + virtual void pound(void); + virtual void equal(void); + virtual void newline(void); + virtual void endtext(void); + virtual void unknown(void); + virtual void literal(const String &literal); + virtual void name(const String &name); + virtual void numeral(double value); + virtual void stop(void); +private: +}; +#endif \ No newline at end of file diff --git a/http/HOLD/SCAN.CPP b/http/HOLD/SCAN.CPP new file mode 100644 index 0000000..452d3f7 --- /dev/null +++ b/http/HOLD/SCAN.CPP @@ -0,0 +1,265 @@ +#if 0 +#include +#include + +Scan::Scan(PureViewOfFile &srcView,PureViewOfFile &dstView,Table &symbolTable,WORD allowUserSymbols) +: Emit(srcView,dstView), mSymbolTable(symbolTable), mUserSymbols(allowUserSymbols), + mLogFile("scan.log",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite) +{ +} + +Scan::~Scan(void) +{ +} + +void Scan::analyze(void) +{ + readch(); + while((int)mChar!=-1&&mChar!=0x001A) + { + skipSeparators(); + if(0xFFFF==mChar||0x001A==mChar)break; + if(isdigit(mChar))scanNumeral(); + else if(isalpha(mChar))scanWord(); + else if(mChar=='\r')scanNewLine(); + else if(mChar=='"')scanLiteral(); + else if(mChar=='<')scanLeftAngle(); + else if(mChar=='>')scanRightAngle(); + else if(mChar=='/')scanForwardSlash(); + else if(mChar=='&')scanAmpersand(); + else if(mChar==';')scanSemicolon(); + else if(mChar=='#')scanPound(); + else if(mChar=='!')scanExclamation(); + else if(mChar=='-')scanMinus(); + else if(mChar=='=')scanEqual(); + else if(mChar==':')scanColon(); + else if(mChar=='(')scanRightParen(); + else if(mChar==')')scanLeftParen(); + else if(mChar==' ')scanSpace(); + else scanUnknown(); + } + emit(endtext1); +} + +void Scan::scanNewLine(void) +{ + mLogFile.writeLine("Scan::scanNewLine"); + readch(); + if(mChar=='\n') + { + emit(newline1); + readch(); + } + else emit(unknown1); +} + +void Scan::skipSeparators(void) +{ + while(mChar==TabChar||mChar==LineFeed)readch(); // mChar==SpaceChar|| +} + +void Scan::scanWord(void) +{ + String wordString; + int tableIndex(0); + + if(mChar=='"')readch(); + while(0xFFFF!=mChar&&0x0D!=mChar&&mChar!='"'&&mChar!='>'&&mChar!='<'&&mChar!='='&&mChar!='"'&&mChar!='&'&&mChar!=';'&&mChar!=')'&&mChar!='#'&&!isspace(mChar)) // &&mChar!='/' + { + wordString+=String((char)mChar); + readch(); + } + if(mChar=='"')readch(); + if(wordString.isNull())return; + mLogFile.writeLine(String("Scan::scanWord")+String(" '")+wordString+String("'")); + if(mSymbolTable.locateSymbolString(wordString,tableIndex)) + { + if(Symbol::UserSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),tableIndex); + else if(Symbol::AssignedSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::ConstantSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::SystemSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::CommandSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else emit(unknown1); + } + else + { + emit(literal1); + emit(wordString.length()); + emit((char*)wordString); + } +} + +void Scan::scanLiteral(void) +{ + String wordString; + int tableIndex(0); + + readch(); + while(0xFFFF!=mChar&&'"'!=mChar) + { + wordString+=String((char)mChar); + readch(); + } + if(mChar=='"')readch(); + if(wordString.isNull())return; + mLogFile.writeLine(String("Scan::scanLiteral")+String(" '")+wordString+String("'")); + if(mSymbolTable.locateSymbolString(wordString,tableIndex)) + { + if(Symbol::UserSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),tableIndex); + else if(Symbol::AssignedSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::ConstantSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::SystemSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::CommandSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else emit(unknown1); + } + else + { + emit(literal1); + emit(wordString.length()); + emit((char*)wordString); + } +} + +void Scan::scanNumeral(void) +{ + int multiplier=10; + double value=0; + double digits; + + while(0xFFFF!=mChar&&isdigit(mChar)) + { + digits=atof((char *)&mChar); + value=multiplier*value+digits; + readch(); + } + + String numberString; + ::sprintf(numberString,"%lf",value); + mLogFile.writeLine(String("Scan::scanNumeral")+String(" '")+numberString+String("'")); + + if(mChar=='.') + { + readch(); + while(isdigit(mChar)) + { + digits=atof((char *)&mChar); + value=(digits/multiplier)+value; + multiplier*=10; + readch(); + } + } + emit(numeral1,value); +} + +// ***************************************************************************** + +void Scan::scanLeftAngle(void) +{ + mLogFile.writeLine("Scan::scanLeftAngle"); + emit(leftangle1); + readch(); +} + +void Scan::scanRightAngle(void) +{ + mLogFile.writeLine("Scan::scanRightAngle"); + emit(rightangle1); + readch(); +} + +void Scan::scanForwardSlash(void) +{ + mLogFile.writeLine("Scan::scanForwardSlash"); + emit(forwardslash1); + readch(); +} + +void Scan::scanAmpersand(void) +{ + mLogFile.writeLine("Scan::scanAmpersand"); + emit(ampersand1); + readch(); +} + +void Scan::scanSemicolon(void) +{ + mLogFile.writeLine("Scan::scanSemicolon"); + emit(semicolon1); + readch(); +} + +void Scan::scanPound(void) +{ + mLogFile.writeLine("Scan::scanPound"); + emit(pound1); + readch(); +} + +void Scan::scanExclamation(void) +{ + mLogFile.writeLine("Scan::scanExclamation"); + emit(exclamation1); + readch(); +} + +void Scan::scanMinus(void) +{ + mLogFile.writeLine("Scan::scanMinus"); + emit(minus1); + readch(); +} + +void Scan::scanEqual(void) +{ + mLogFile.writeLine("Scan::scanEqual"); + emit(equal1); + readch(); +} + +void Scan::scanColon(void) +{ + mLogFile.writeLine("Scan::scanColon"); + emit(colon1); + readch(); +} + +void Scan::scanRightParen(void) +{ + mLogFile.writeLine("Scan::scanRightParen"); + emit(rightparen1); + readch(); +} + +void Scan::scanLeftParen(void) +{ + mLogFile.writeLine("Scan::scanLeftParen"); + emit(leftparen1); + readch(); +} + +void Scan::scanSpace(void) +{ + mLogFile.writeLine("Scan::scanSpace"); + emit(space1); + readch(); +} + +void Scan::scanUnknown(void) +{ + String logString; + ::sprintf(logString,"Scan::unknown '0x%x' %d",(int)mChar,(int)mChar); + mLogFile.writeLine(logString); + emit(unknown1); + readch(); +} +#endif \ No newline at end of file diff --git a/http/HOLD/SCAN.HPP b/http/HOLD/SCAN.HPP new file mode 100644 index 0000000..661691a --- /dev/null +++ b/http/HOLD/SCAN.HPP @@ -0,0 +1,62 @@ +#ifndef _HTTP_SCAN_HPP_ +#define _HTTP_SCAN_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _HTTP_EMIT_HPP_ +#include +#endif +#ifndef _HTTP_SYMBOL_HPP_ +#include +#endif +#ifndef _HTTP_TABLE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif + +class Scan : public Emit +{ +public: + enum ScanSymbols{leftangle1,rightangle1,forwardslash1,ampersand1,semicolon1,space1, + colon1,leftparen1,rightparen1,exclamation1,minus1,pound1,literal1,name1, + equal1,newline1,numeral1,endtext1,unknown1,stop1}; + Scan(PureViewOfFile &srcView,PureViewOfFile &dstView,Table &symbolTable,WORD allowUserSymbols=TRUE); + virtual ~Scan(); + void analyze(void); +private: + enum {SpaceChar=32,TabChar=9,LineFeed=10}; + void readch(void); + void skipSeparators(void); + void scanNewLine(void); + void scanNumeral(void); + void scanWord(void); + void scanLiteral(void); + void scanLeftAngle(void); + void scanRightAngle(void); + void scanForwardSlash(void); + void scanAmpersand(void); + void scanSemicolon(void); + void scanPound(void); + void scanExclamation(void); + void scanMinus(void); + void scanEqual(void); + void scanColon(void); + void scanSpace(void); + void scanRightParen(void); + void scanLeftParen(void); + void scanUnknown(void); + + WORD mUserSymbols; + Table &mSymbolTable; + FileHandle mLogFile; + int mChar; +}; + +inline +void Scan::readch(void) +{ + mChar=read(); +} +#endif diff --git a/http/HOLD/SYMBOL.HPP b/http/HOLD/SYMBOL.HPP new file mode 100644 index 0000000..0212fe1 --- /dev/null +++ b/http/HOLD/SYMBOL.HPP @@ -0,0 +1,126 @@ +#ifndef _HTTP_SYMBOL_HPP_ +#define _HTTP_SYMBOL_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Symbol +{ +public: + enum SymbolType{AssignedSymbol,ConstantSymbol,SystemSymbol, + CommandSymbol,UserSymbol,UnknownSymbol}; + Symbol(void); + Symbol(const Symbol &someSymbol); + Symbol(const String &symbolString,int identifier,SymbolType symbolType); + virtual ~Symbol(); + Symbol &operator=(const Symbol &someSymbol); + int operator==(const Symbol &someSymbol)const; + int operator==(const String &symbolString)const; + String symbolName(void)const; + void symbolName(const String &symbolName); + int identifier(void)const; + void identifier(int identifier); + SymbolType symbolType(void)const; + void symbolType(SymbolType symbolType); + void symbolValue(double symbolValue); + double symbolValue(void)const; +private: + String mSymbolName; + int mIdentifier; + SymbolType mSymbolType; + double mSymbolValue; +}; + +inline +Symbol::Symbol(void) +: mIdentifier(0), mSymbolType(UnknownSymbol), mSymbolValue(0.00) +{ +} + +inline +Symbol::Symbol(const Symbol &someSymbol) +{ + *this=someSymbol; +} + +inline +Symbol::Symbol(const String &symbolString,int identifier,SymbolType symbolType) +: mSymbolName(symbolString), mSymbolType(symbolType), mIdentifier(identifier) +{ +} + +inline +Symbol::~Symbol() +{ +} + +inline +int Symbol::operator==(const Symbol &someSymbol)const +{ + return (mSymbolName==someSymbol.mSymbolName); +} + +inline +int Symbol::operator==(const String &symbolName)const +{ + return (mSymbolName==symbolName); +} + +inline +Symbol &Symbol::operator=(const Symbol &someSymbol) +{ + symbolName(someSymbol.symbolName()); + identifier(someSymbol.identifier()); + symbolType(someSymbol.symbolType()); + symbolValue(someSymbol.symbolValue()); + return *this; +} + +inline +String Symbol::symbolName(void)const +{ + return mSymbolName; +} + +inline +void Symbol::symbolName(const String &symbolName) +{ + mSymbolName=symbolName; +} + +inline +Symbol::SymbolType Symbol::symbolType(void)const +{ + return mSymbolType; +} + +inline +void Symbol::symbolType(SymbolType symbolType) +{ + mSymbolType=symbolType; +} + +inline +int Symbol::identifier(void)const +{ + return mIdentifier; +} + +inline +void Symbol::identifier(int identifier) +{ + mIdentifier=identifier; +} + +inline +void Symbol::symbolValue(double symbolValue) +{ + mSymbolValue=symbolValue; +} + +inline +double Symbol::symbolValue(void)const +{ + return mSymbolValue; +} +#endif \ No newline at end of file diff --git a/http/HOLD/TABLE.CPP b/http/HOLD/TABLE.CPP new file mode 100644 index 0000000..b5623ea --- /dev/null +++ b/http/HOLD/TABLE.CPP @@ -0,0 +1,32 @@ +#include + +WORD Table::locateSymbolString(String &symbolString,int &tableIndex) +{ + size_t numSymbols((size_t)size()); + + for(int index=0;index +#endif +#ifndef _HTTP_SYMBOL_HPP_ +#include +#endif + +class Table : public Block +{ +public: + Table(void); + virtual ~Table(); + WORD locateSymbolString(String &symbolString,int &tableIndex); + WORD locateSymbolIdentifier(int identifier,int &tableIndex); +private: +}; + +inline +Table::Table(void) +{ +} + +inline +Table::~Table() +{ +} +#endif \ No newline at end of file diff --git a/http/HTTP.BAK b/http/HTTP.BAK new file mode 100644 index 0000000..ce51d3b --- /dev/null +++ b/http/HTTP.BAK @@ -0,0 +1,4292 @@ +[HTTP] +HOSTNAME=qs.secapl.com +REQUEST="GET /cgi-bin/qs?tick=" + +[NASDAQ] +N1=Accent Software International Ltd.;ACNTF +N2=Actrade International Ltd.;ACRT +N3=Adaptive Solutions, Inc.;ADSO +N4=ALDEN Electronics, Inc.;ADNEA +N5=Allegro New Media, Inc.;ANMI +N6=Alternate Postal Delivery, Inc.;ALTD +N7=Amedisys, Inc.;AMED +N8=Ancor Communications, Inc.;ANCR +N9=Applied Biometrics, Inc.;ABIO +N10=Applied Cellular Technology, Inc.;ACTC +N11=Applied Research Corporation ;APLS +N12=ARC Capital (Formerly Applied Laser Systems);ARCCA +N13=ASA International Ltd. ;ASAA +N14=Atlantic Pharmaceuticals, Inc.;ATLC +N15=Automobile Protection Corporation;APCO +N16=Blue Dolphin Energy Company;BDCO +N17=Bureau of Electronic Publishing, Inc.;BEPI +N18=Byron Preiss Multimedia Company, Inc.;CDRM +N19=Camelot Corporation;CAML +N20=Cardiotronics Systems, Inc.;CDIO +N21=Centurion Mines Corporation;CTMC +N22=Churchill Downs Incorporated;CHDN +N23=CinemaStar Luxury Theaters;LUXY +N24=Circuit Research Labs, Inc.;CRLI +N25=Classics International Entertainment, Inc.;CIEI +N26=Coda Music Technology;COMT +N27=CompuMed, Inc.;CMPD +N28=Computer Marketplace, Inc.;MKPL +N29=Computone Corporation;CMPT +N30=Concord Energy, Inc.;CODE +N31=CSI Computer Specialists, Inc.;CSIS +N32=Cusac Gold Mines Ltd.;CUSIF +N33=DeltaPoint, Inc.;DTPT +N34=Digital Sciences Inc.;DISI +N35=Dynamic Healthcare Technologies, Inc.;DHTI +N36=DynaMotive Technologies Corporation;DYMTF +N37=Eckler Industries, Inc.;ECKL +N38=Electronic Clearing House, Inc.;ECHO +N39=Enteractive, Inc.;ENTR +N40=Environment One Corporation;EONE +N41=Environmental Technologies USA, Inc.;ENVR +N42=Erox Corporation;EROX +N43=Esquire Communications Ltd.;ESQS +N44=Essex Corporation;ESEX +N45=Farmstead Telephone Group, Inc.;FONE +N46=FIND/SVP, Inc.;FSVP +N47=F1RSTMARK, Inc.;FIRM +N48=Focus Enhancements, Inc.;FCSE +N49=Gilman & Ciocia, Inc.;GTAX +N50=Graphix Zone, Inc.;GZON +N51=Great Pines Water Company, Inc.;GPWC +N52=Imex Medical Systems, Inc.;IMEX +N53=Independence Federal Savings Bank;IFSB +N54=Infodata Systems, Inc.;INFD +N55=Informedics, Inc.;IMED +N56=INOTEK Technologies Corp.;INTK +N57=Insignia Systems, Inc.;ISIG +N58=Integral Systems, Inc.;ISYS +N59=IntelliCorp, Inc.;INAI +N60=International Microcomputer Software, Inc.;IMSI +N61=International Precious Metals Corporation;IPMCF +N62=Internet Communications Corporation;INCC +N63=InVitro International;INVI +N64=Irvine Sensors Corporation;IRSN +N65=ITEX Corporation;ITEX +N66=Janex International, Inc.;JANX +N67=Kansas City Life Insurance Company;KCLI +N68=Kinetiks.com, Inc.;KNET +N69=Laser Video Network;LVNI +N70=LCA-Vision Inc.;LCAV +N71=LifeCell Corporation;LIFC +N72=LifeRate Systems, Inc.;LRSI +N73=LightPath Technologies Inc.;LPTHA +N74=Lotto World, Inc.;LTTO +N75=Marine National Bank;MNBK +N76=MaxServ, Inc.;MXSV +N77=Medizone International, Inc.;MZEI +N78=MetroBanCorp;METB +N79=Mitek Systems, Inc.;MITK +N80=Network Connection, Inc. (The);TNCX +N81=National Registry Inc. (The);NRID +N82=Nona Morelli's II, Inc.;NONA +N83=Norris Communications Corporation;NORRF +N84=Online System Services, Inc.;WEBB +N85=Navigato International, Inc.;NATO +N86=Pacific Animated Imaging Corp.;PAID +N87=Palomar Medical Technologies, Inc.;PMTI +N88=PerfectData Corporation;PERF +N89=Perle Systems Inc.;PERLF +N90=Precision Systems, Inc.;PSYS +N91=ProtoSource Corporation;PSCO +N92=PTI Holding, Inc.;PTII +N93=Pudgie's Chicken, Inc.;PUDG +N94=QCS Corporation;QCSC +N95=Quadrax Corporation;QDRX +N96=Rent-A-Wreck of America, Inc.;RAWA +N97=Rotary Power International, Inc.;RPII +N98=Sanctuary Woods Multimedia Corporation ;SWMFC +N99=Scangraphics, Inc.;SCNG +N100=Seiler Pollution Control Systems, Inc.;SEPC +N101=Silverado Mines, Ltd.;GOLDF +N102=Socket Communications, Inc.;SCKT +N103=Spanlink Communications;SPLK +N104=Sparta Pharmaceuticals, Inc.;SPTA +N105=Spatializer Audio Laboratories, Inc.;SPAZ +N106=Sports International Ltd.;SBET +N107=Sports Sciences, Inc.;SSCI +N108=SunRiver Corporation;SRVC +N109=SwissRay International, Inc.;SRMI +N110=SYSTEMS of Excellence, Inc.;SEXI +N111=Vasco Data Security, Inc.;VASC +N112=Vector Aeromotive Corporation;VCAR +N113=VictorMaxx Technologies, Inc.;VMAX +N114=VideoLabs Inc.;VLAB +N115=Visual Information Services Corp.;VICP +N116=Voice Powered Technology International, Inc.;VPTI +N117=VOXEL;VOXL +N118=VSI Enterprises, Inc.;VSIN +N119=Wavetech, Inc.;ITEL +N120=Zila, Inc.;ZILA + +[NYSE] +N1=A G Edwards;AGE +N2=AAR Corporation;AIR +N3=Abbott Laboratories;ABT +N4=Abitibi Price Inc;ABY +N5=Acceptance Insurance Cos;AIF +N6=ACE Ltd;ACL +N7=ACM Gov't Income Fund;ACG +N8=ACM Gov't Income Opportunity;AOF +N9=ACM Gov't Securities Fund;GSF +N10=ACM Gov't Spectrum Fund Inc.;SI +N11=ACM Managed Dollar Income Fund;ADF +N12=ACM Managed Income Fund;AMF +N13=ACM Municipal Sec Income Fund;AMU +N14=Acme Cleveland Corp;AMT +N15=Acme Electric Corp;ACE +N16=Acordia Inc;ACO +N17=Acuson Corp;ACN +N18=ACX Technologies;ACX +N19=Adams Express Co;ADX +N20=Advanced Micro Devices;AMD +N21=Advest Group Inc;ADV +N22=Advo System Inc;AD +N23=Advocat Inc;AVC +N24=Aegon Nv;AEG +N25=Aeroflex Labs Inc;ARX +N26=Aetna Life & Casualty;AET +N27=AFLAC Inc;AFL +N28=Agco;AG +N29=AGL Resources Inc;ATG +N30=Agree Realty Corp;ADC +N31=Ahmanson(HF) & Co;AHM +N32=Ahold Nv ADR;AHO +N33=Air Products & Chem.;APD +N34=Airborne Freight Corp;ABF +N35=Airgas Inc;ARG +N36=Airlease Ltd;FLY +N37=Airtouch Communication Inc;ATI +N38=AJL Peps Trust;AJP +N39=AK Steel Holding Corp;AKS +N40=Alamo Group Inc;ALG +N41=Alaska Airlines Inc;ALK +N42=Albany Intl Corp Class A;AIN +N43=Albemarble Corp;ALB +N44=Alberta Energy Co;AOG +N45=Alberto Culver Class A;ACVA +N46=Alberto-Culver Co;ACV +N47=Albertsons Inc;ABS +N48=Alcan Aluminum;AL +N49=Alcatel Alsthom;ALA +N50=Alco Standard Corp.;ASN +N51=Alden Financial Corp;JA +N52=Alex Brown Inc;AB +N53=Alexander & Alex Svcs;AAL +N54=Alexanders Inc;ALX +N55=All American Target Term Trust;AAT +N56=Allegheny Corp;Y +N57=Allegheny Ludlim Corp;ALS +N58=Allegheny Power System;AYP +N59=Allen Group Inc;ALN +N60=Allen Interiors Inc;ETH +N61=Allergan;AGN +N62=Alliance All Market A;AMO +N63=Alliance Capital Management Lp;AC +N64=Alliance Entertainment Corp;CDS +N65=Alliance Global Environment Fund Inc.;AEF +N66=Alliance World Dol Govt Fund II;AWF +N67=Alliance World Dollar Govt;AWG +N68=Alliant Techsystems Inc;ATK +N69=Allied Irish Bancshares;AIB+ +N70=Allied Irish Banks Plc ADR;AIB +N71=Allied Products Corp;ADP +N72=Allied Signal Corp;ALD +N73=Allmerica Financial;AFC +N74=Allmerica Property And Casualty;APY +N75=Allmerica Security Trust;ALM +N76=Allstate Corp 98;PME +N77=Allstate Insurance;ALL +N78=Allstate Muni Income Tr III;TFC +N79=Allstate Muni Opp Fund;OIB +N80=Allstate Muni Premium Trust;PIA +N81=Allstate Municipal Fund;TFA +N82=Allstate Municipal Income Ii;TFB +N83=ALLTEL Corp;AT +N84=Allwaste Inc;ALW +N85=ALPharma Inc;ALO +N86=Alumax Inc;AMX +N87=Aluminum Co. Of Amer (ALCOA);AA +N88=ALZA Corp;AZA +N89=Amax Gold Inc;AU +N90=Ambac;ABK +N91=Amcast Industrial Corp;AIZ +N92=Amdin De Fondos De Pension;PVD +N93=Amer Banknote;ABN +N94=Amer Brands Inc;AMB +N95=Amer Building Maint;ABM +N96=Amer Business Prod;ABP +N97=Amer Elecric Power;AEP +N98=Amer Express;AXP +N99=Amer Financial Group;AFG +N100=Amer General Corp;AGC +N101=Amer Gov't Income Fund;AGF +N102=Amer Gov't Income Port;AAF +N103=Amer Health Properties;AHE +N104=Amer Heritage Lf Inv;AHL +N105=Amer Home Prod;AHP +N106=Amer Hotels & Realty Cp;AHR +N107=Amer Intl Group;AIG +N108=Amer Muni Term Trust Inc;AXT +N109=Amer Muni Term Trust II;BXT +N110=Amer Opportunity Income Fund;OIF +N111=Amer Precision Ind;APR +N112=Amer President Co Ltd;APS +N113=Amer Real Estate Lp;ACP +N114=Amer Realty Trust;ARB +N115=Amer Standard;ASD +N116=Amer Stores Co;ASC +N117=Amer Strategic Income Port II;BSP +N118=Amer Strategic Income Fund;ASP +N119=Amer Waste Services Inc;AW +N120=Amer Water Works;AWK +N121=Amer West Airlines;AWA +N122=Amerada Hess Corp.;AHC +N123=American Annuity Group;AAG +N124=American Eagle;FLI +N125=American Industrial Properties Reit Sbi;IND +N126=American Media Inc;ENQ +N127=American Medical Response Inc;EMT +N128=American Muni Inc Por;XAA +N129=American Muni Term Tr;CXT +N130=American Re Corp;ARN +N131=American Select Portfolio Inc;SLA +N132=American Strat Inc Port III;CSP +N133=Americas Income Trust;XUS +N134=Americredit;ACF +N135=Ameridata Technologies;ADA +N136=Amerigas Partners;APU +N137=Ameriquest Technologies;AQS +N138=Ameritech;AIT +N139=Ameron Intl Corp;AMN +N140=Ametek Inc;AME +N141=AMLI Residential Properties Trust;AML +N142=Amoco;AN +N143=AMP Inc;AMP +N144=Ampco Pittsburgh Corp;AP +N145=Ampex Corp;AXC +N146=Amphenol Cp;APH +N147=AMR Corp;AMR +N148=Amre Inc;AMM +N149=Amrep Corporation;AXR +N150=Amsco Intl Inc;ASZ +N151=Amsouth Bancorp;ASO +N152=Amvestors Finan Cp;AMV +N153=Amway Asia Pacific Ltd;AAP +N154=Amway Japan Limited;AJL +N155=Anadarko Petroleum;APC +N156=Analog Devices Inc;ADI +N157=Angelica Corporation;AGL +N158=Anheuser Busch Co.;BUD +N159=Anixter Intl;AXE +N160=Ann Taylor Inc;ANN +N161=Anthony Industries;ANT +N162=Aon Corp;AOC +N163=Apache Corp.;APA +N164=Apartment Int & Mngt;AIV +N165=Apex Municipal Fund;APX +N166=Applied Magnetics Corp;APM +N167=Applied Power Inc Class A;APW +N168=Aptargroup Inc;ATR +N169=Aquarion;WTR +N170=Aquila Gas Pipeline Corp;AQP +N171=Aracruz Celulose Sa ADR;ARA +N172=Arbor Property Trust;ABR +N173=Arcadian Corp;ACA +N174=Archer-Daniels Midland;ADM +N175=Arco Chemical;RCM +N176=Argentina Fund Inc;AF +N177=Arizona Publ Series Q;ARP+Q +N178=Armco Inc.;AS +N179=Armstrong World Ind Inc;ACK +N180=Arrow Electronics Inc;ARW +N181=Artra Group Inc;ATA +N182=Arvin Industries;ARV +N183=Asa Ltd.;ASA +N184=ASARCO Inc;AR +N185=Ashanti Goldfield Ltd;ASL +N186=Ashland Coal Inc;ACI +N187=Ashland Oil Inc.;ASH +N188=Asia Pacific;APB +N189=Asia Pacific Resources Intl;ARH +N190=Asia Pulp & Paper;PAP +N191=Asis Tigers Fund;GRR +N192=Asset Investors;AIC +N193=Associated Estates Realty Cp;AEC +N194=AT&T;T +N195=AT&T Capital Corp;TCC +N196=Atalanta Sosnoff Cap;ATL +N197=Atlantic Energy N.J.;ATE +N198=Atlantic Richfield Co.;ARC +N199=Atlantic Richfield Co;LYX +N200=Atlas Corporation;AZ +N201=Atmos Energy Corp;ATO +N202=Augat Incorporated;AUG +N203=Australia & New Zealand Bank Group;ANZ +N204=Austria Fund Inc;OST +N205=Austrialia New Zealand Bank pf;ANZ+ +N206=Austrian Stock Index Notes;SPJ +N207=Authentic Fitness Corp;ASM +N208=Automated Security Holdings;ASI +N209=Automatic Data Process;AUD +N210=Autozone Inc.;AZO +N211=Avalon Properties Inc;AVN +N212=AVEMCO Cp;AVE +N213=Avery Dennison Cp;AVY +N214=Aviall Inc;AVL +N215=Avnet Incorp.;AVT +N216=Avon Products Inc.;AVP +N217=AVX Corp;AVX +N218=Aydin Corporation;AYD +N219=Aztar Cp;AZR +N220=B J Services Co;BJS +N221=Bairnco Corp;BZ +N222=Baker Fentress & Co;BKF +N223=Baker Hughes;BHI +N224=Baldor Electric Co.;BEZ +N225=Ball Corp.;BLL +N226=Ballantyne of Omaha Inc;BTN +N227=Ballard Medical Products;BMP +N228=Bally Entertainment;BLY +N229=Baltimore Gas And Electric;BGE +N230=Banc One;ONE +N231=Banco Bilbao Vizcaya S A;BBV +N232=Banco Central Sa Dep Sh;BCH +N233=Banco Commercial Portugues ADR;BPC +N234=Banco De Edwards Adr;AED +N235=Banco De Santander Soc An;STD +N236=Banco France Del Rio De La Plata;BFR +N237=Banco Ganadero;BGA +N238=Banco Industrial Colombiano Sa;CIB +N239=Banco Latin Americano De Exportaciones;BLX +N240=Banco Ohiggins ADR;OHG +N241=Banco Osorno La Union;BOU +N242=Banco Wiese Limitado ADR;BWP +N243=Bancorp Hawaii Inc;BOH +N244=Banctech Inc;BTC +N245=Bandag Inc Cl A;BDGA +N246=Bandag Inc.;BDG +N247=Bangor Hydro El;BGR +N248=Bank Amer Pref M;BAC+M +N249=Bank America Corp;BAC +N250=Bank Of Boston Corp.;BKB +N251=Bank Of Montreal;BMO +N252=Bank Of New York Co;BK +N253=Bank of Tokyo Mitsubishi Ltd;MBK +N254=Banker Life Holdings Corp;BLH +N255=Bankers Note Inc;TBN +N256=Bankers Trust;BT +N257=Banner Aerospace Inc;BAR +N258=Barclay Banks;BCS +N259=Barclays Bank Plc Pf Series C;BCB+C +N260=Bard (C.R.) Inc;BCR +N261=Barnes & Noble Inc;BKS +N262=Barnes Group Inc;B +N263=Barnett Bank Of Florida;BBI +N264=Barrett Resource Cp;BRR +N265=Barrick Gold Corp;ABX +N266=Barry R G Cp;RGB +N267=Bass Plc Ads;BAS +N268=Battle Mountain Gold Class A;BMG +N269=Bausch & Lomb Inc.;BOL +N270=Baxter Intl;BAX +N271=Bay Apartment Community;BYA +N272=Bay State Gas Co;BGC +N273=BBN Corp;BBN +N274=BCE Inc;BCE +N275=Bea Income Fund;FBF +N276=Bea Strat Income Fund;FBI +N277=Beacon Properties;BCN +N278=Bear Stearns Co;BSC +N279=Bearings Inc;BER +N280=Beazer Homes USA Inc;BZH +N281=Beckman Instrument Inc.;BEC +N282=Becton Dickinson Co.;BDX +N283=Bedford Property Investors;BED +N284=Belden Inc;BWC +N285=Belding Hemingway;BHY +N286=Bell & Howell Co;BHW +N287=Bell Atlantic Cp.;BEL +N288=Bell Industries;BI +N289=Bell South Corp.;BLS +N290=Belo A H;BLC +N291=Bemis Co. Inc.;BMS +N292=Beneficial Corp.;BNL +N293=Benetton Group Spa;BNG +N294=Benguet Corp Class B;BE +N295=Benson Eyecare Corp;EYE +N296=Berg Electronics;BEI +N297=Bergen Brunswig Cp;BBC +N298=Berkshire Hathaway Inc;BRK +N299=Berkshire Reality Co;BRI +N300=Berlitz Intl Inc;BTZ +N301=Berry Petroleum Co Class A;BRY +N302=Best Buy Co. Inc;BBY +N303=Bet Holdings Class A;BTV +N304=Bet Public Ltd Co.;BEP +N305=Bethlehem Steel Corp.;BS +N306=Bethlehem Steel Cp Pf $5.00;BS+ +N307=Betz Laboratories Inc;BTL +N308=Beverly Enterprises;BEV +N309=Big Flower Press Holdings Inc;BGF +N310=Bindley Western Ind;BDY +N311=Bio Whittaker Inc;BWI +N312=Biocraft Labs Inc;BCL +N313=Biovail Corp;BVF +N314=Birmingham Steel Corp;BIR +N315=Black & Decker Mfg.;BDK +N316=Black Hills Corp;BKH +N317=Blackrock 1998 Term Trust Inc;BBT +N318=Blackrock 1999 Term Tr;BNN +N319=Blackrock 2001 Term Trust Inc;BLK +N320=Blackrock Advantage Term Trust;BAT +N321=Blackrock CA Ins Muni 2008;BFC +N322=Blackrock FL Ins Muni 2008;BRF +N323=Blackrock Income Trust;BKT +N324=Blackrock Ins Muni 2008;BRM +N325=Blackrock Insured Muni 2008;BMT +N326=Blackrock Inv Qual Muni;BKN +N327=Blackrock Target Trust Inc;BTT +N328=Blackstone Investment Quality Term Trust;BQT +N329=Blackstone Muni Target Term Trust Inc;BMN +N330=Blackstone N Amer Government Income Trus;BNA +N331=Blackstone Strategic Term Trust;BGT +N332=Blanch Holdings Inc;EWB +N333=Block (H & R);HRB +N334=Blount Inc Cl A;BLTA +N335=Blount Inc Cl B;BLTB +N336=Blue Chip Value Fund Inc.;BLU +N337=Bluegreen Corp;BXG +N338=Blyth Industries;BTH +N339=BMC Inc;BMC +N340=Boeing Co.;BA +N341=Boise Cascade Corp.;BCC +N342=Boise Cascade Office Products;BOP +N343=Bombay Co Inc;BBA +N344=Borden Chemical & Plastics Lp Uts;BCU +N345=Borders Group;BGP +N346=Borg Warner Automotive Inc;BWA +N347=Borg-warner Security Corp;BOR +N348=Boston Beer Co Cl A;SAM +N349=Boston Celtics Lp;BOS +N350=Boston Edison Co.;BSE +N351=Boston Scientific Corp;BSX +N352=Bowater Inc;BOW +N353=Boyd Gaming Inc;BYD +N354=Bradlees Inc;BLE +N355=Bradley Real Estate Tr Sbi;BTR +N356=Brazil Fund;BZF +N357=Brazilian Equity Fund;BZL +N358=BRE Properties Inc;BRE +N359=Breed Technology;BDT +N360=Briggs & Stratton Corp.;BGG +N361=Brilliance China Automotive Holding;CBA +N362=Brinker International Inc;EAT +N363=Bristol Hotel Co;BH +N364=Bristol Myers Squibb Co.;BMY +N365=Brit Pet Pru Bay Rlty Tr;BPT +N366=British Airways;BAB +N367=British Gas;BRG +N368=British Petroleum;BP +N369=British Petroleum ADR Pp;BP_P +N370=British Sky Broadcasting Group;BSY +N371=British Steel Pp ADR;BST +N372=British Telecom;BTY +N373=Broken Hill Propriety;BHP +N374=Brooke Group Ltd;BGL +N375=Brooklyn Union Gas Co;BU +N376=Brown & Sharpe Mfg. Co.;BNS +N377=Brown Group;BG +N378=Brown-Foreman Class B;BFB +N379=Brown-foreman Inc. Class A;BFA +N380=Browning-Ferris Ind;BFI +N381=Brt Realty Trust Sbi;BRT +N382=Brunswick Corp.;BC +N383=Brush Wellman Inc.;BW +N384=BT Office Products Int'l Inc;BTF +N385=Buckeye Cellulose Corp;BKI +N386=Buckeye Partners Lp;BPL +N387=Buenos Aires Enbotelladora ADR;BAE +N388=Bufete Industries;GBI +N389=Burlington Coat Factory Warehouse;BCF +N390=Burlington Industries Equity Inc;BUR +N391=Burlington Northern Santa Fe Corp;BNI +N392=Burlington Resource Coal Seam Gas Royalt;BRU +N393=Burlington Resources;BR +N394=Burnham Pacific Property Inc;BPP +N395=Bush Boake Allen Inc;BOA +N396=Bush Ind Inc Cl A;BSH +N397=Cable & Wireless Plc;CWP +N398=Cabletron Systems;CS +N399=Cabot Corporation;CBT +N400=Cabot Oil & Gas Cp;COG +N401=Cadence Design Sys Inc;CDN +N402=Cal Fed Bancorp Inc.;CAL +N403=Cal Reit Sbi;CT +N404=Caldor Corp;CLD +N405=Calgon Carbon Cp;CCC +N406=Cali Realty;CLI +N407=Caliber Systems;CBB +N408=Calienergy Co;CE +N409=Calif Water Serv Co;CWT +N410=Callaway Golf Cp;ELY +N411=Calmat Co.;CZM +N412=Camco International Inc;CAM +N413=Camden Property Trust Sbi;CPT +N414=Campbell Resources Inc;CCH +N415=Campbells Soup Co.;CPB +N416=Canadian Pacific Ltd.;CP +N417=Capital American Financial;CAF +N418=Capital One Financial;COF +N419=Capital Re Corp;KRE +N420=Capmac Holdings Inc;KAP +N421=Capstead Mortgage Corp;CMO +N422=Capstone Capital Cp;CCT +N423=Capsure Holdings Corp;CSH +N424=Cardinal Health Inc;CAH +N425=Career Horizons Inc;CHZ +N426=Caremark Interrnational Inc;CK +N427=Caribiner Intl Inc;CWC +N428=Carlisle Corp;CSL +N429=Carlisle Plastics Inc;CPA +N430=Carmike Cinemas Inc Class A;CKE +N431=Carnival Corp;CCL +N432=Carolina P & L 8.55%;CPD +N433=Carolina Power & Light;CPL +N434=Carpenter Technology;CRS +N435=Carr Gottstein Food;CGF +N436=Carr Realty;CRE +N437=Carson Pirie Scott & Co;CRP +N438=Carter Wallace Inc.;CAR +N439=Cascade Natural Gas;CGC +N440=Case Corp;CSE +N441=Cash Amer Investments;PWN +N442=Castech Aluminum Group;CTA +N443=Catalina Lighting Inc;LTG +N444=Catalina Marketing Cp;POS +N445=Catellus Development Cp;CDX +N446=Caterpillar Tractor;CAT +N447=CBL & Associates Properties;CBL +N448=CDI Corp;CDI +N449=Cedar Fair LP;FUN +N450=Centex Corp.;CTX +N451=Central & Southwest Cp;CSR +N452=Central European Equity Fund;CEE +N453=Central Hudson Gas & Electric;CNH +N454=Central Illinois Public Serv;CIP +N455=Central Louisiana Electric;CNL +N456=Central Maine Power;CTP +N457=Central Newspapers Inc;ECP +N458=Central Parking Corp;PK +N459=Central Transport Rental Group;TPH +N460=Central Vermont Pub Svc;CV +N461=Centura Banks Inc;CBC +N462=Centurior Energy;CX +N463=Century Telep Entpr;CTL +N464=Cenvill Invest Unpaired;CVI +N465=Ceridian Corp;CEN +N466=Champion Enterprises;CHB +N467=Champion Intl;CHA +N468=Chaparral Steel Co;CSM +N469=Chart House Enterprises Inc;CHT +N470=Chart Industries Inc;CTI +N471=Chase Brass Ind;CSI +N472=Chase Manhattan Bank Pf Series I;CMB+I +N473=Chase Manhatten 8.32;CMB+L +N474=Chase Manhatten 8.375;CMB+H +N475=Chase Manhatten 8.5;CMB+K +N476=Chase Manhatten 9.08;CMB+J +N477=Chase Manhatten pf C;CMB+C +N478=Chase manhatten pf D;CMB+D +N479=Chase Manhatten pf E;CMB+E +N480=Chase Manhatten pf F;CMB+F +N481=Chateau Properties;CPJ +N482=Chaus Bernard;CHS +N483=Check Point Systems;CKP +N484=Chelsea GCA Realty Inc;CCG +N485=Chemed Corp;CHE +N486=Chesapeake Corp;CSK +N487=Chesapeake Energy Corp;CHK +N488=Chesapeake Util Cp;CPK +N489=Chevron;CHV +N490=Chic By H I S;JNS +N491=Chile Fund;CH +N492=Chilgener ADR;CHR +N493=China Fund Inc;CHN +N494=China Tire Holding Ltd;TIR +N495=China Yuchai Intl;CYD +N496=Chiquita Brands Intl;CQB +N497=Chock Full O Nuts;CHF +N498=Chris Craft Ind.;CCN +N499=Christiana Companies;CST +N500=Chromecraft Revington Inc;CRC +N501=Chrysler;C +N502=Chubb Corp. (The);CB +N503=Church & Dwight Co Inc;CHD +N504=Chyron Corp;CHY +N505=CIGNA;CI +N506=Cigna Hi Income Shares;HIS +N507=Cilcorp Inc Hldg Co.;CER +N508=Cincinnati Bell Hldg Co.;CSN +N509=Cincinnati Milacrom;CMZ +N510=Cineplex Odeon Corp;CPX +N511=CINergy Corp;CIN +N512=Circle K Corp;CRK +N513=Circuit City Stores;CC +N514=Circus Circus Enterprises;CIR +N515=Citicorp;CCI +N516=Citicorp Pf E;CCI+E +N517=Citizens Corp;CZC +N518=Citizens Util Class A;CZNA +N519=Citizens Util Class B;CZNB +N520=City Natl Cp;CYN +N521=CKE Restaurants;CKR +N522=Claire's Stores Inc;CLE +N523=Clarcor Inc;CLC +N524=Clayton Homes Inc;CMH +N525=Clear Channel Inc;CCU +N526=Clemente Global Growth Fund;CLM +N527=Cleveland-Cliffs Inc Co.;CLF +N528=Clorox (The) Co;CLX +N529=CMAC Investments Corp;CMT +N530=CMI Corp;CMX +N531=CML Group Inc;CML +N532=CMS Energy;CMS +N533=CNA Financial;CNA +N534=CNA Income Shares Inc.;CNN +N535=Coachman Ind.;COA +N536=Coast Savings & Loan Asc;CSA +N537=Coastal Corp;CGP +N538=Coastal Physician Group;DR +N539=Coastcast Corp;PAR +N540=Coca Cola Co.;KO +N541=Coca Cola Enterprise;CCE +N542=Coca-Cola Femsa ADR;KOF +N543=Coeur D'alene Mines Cp;CDE +N544=Cohen & Steers Tot Ret;RFI +N545=Cold Metal Products Inc;CLQ +N546=Cole National;CNJ +N547=Cole Production;KCP +N548=Coleman;CLN +N549=Coles Myer Ltd ADR;CM +N550=Colgate Plus;CL+ +N551=Colgate-Palmolive Co.;CL +N552=Collins & Aikman Cp;CKC +N553=Colonial Bancgroup Class A;CNB +N554=Colonial High In Muni Tr;CXE +N555=Colonial Intermarket Income Trust I;CMK +N556=Colonial Intermediate Fund;CIF +N557=Colonial Inv Muni Tr;CXH +N558=Colonial Muni;CMU +N559=Colonial Properties Trust Sbi;CLP +N560=Coltec Industries Inc;COT +N561=Columbia Gas Systems;CG +N562=Columbia/HCA Healthcare Corp;COL +N563=Columbus Realty Trust Sbi;CLB +N564=Comdisco Inc;CDO +N565=Comerica Inc;CMA +N566=Commerce Group Inc;CGI +N567=Commercial Federal Cp;CFB +N568=Commercial Intertech Cp;TEC +N569=Commercial Metals Co;CMC +N570=Commercial Net Leasing Reality Inc;NNN +N571=Commonwealth Egy Sbi;CES +N572=Communication Satellite;CQ +N573=Community Health Systems Inc;CYH +N574=Community Psychiatric;CMY +N575=Compania De Telecomm De Chile As ADR;CTC +N576=Compaq Computer;CPQ +N577=Comprehensive Care Corp;CMP +N578=CompUSA Inc;CPU +N579=Computer Assoc Intl Inc;CA +N580=Computer Science Corp.;CSC +N581=Computer Task Group Inc;TSK +N582=Computervision Corp;CVN +N583=ConAgra Inc.;CAG +N584=Cone Mills Cp;COE +N585=Congoleum Corp;CGM +N586=Conn Energy Corp;CNE +N587=Connecticut Natural Gas;CTG +N588=Conrail Inc;CRR +N589=Cons Edison 4.65 Pf Series C;ED+C +N590=Cons Edison 5.00 Pf Series A;ED+A +N591=Conseco Inc;CNC +N592=Consl Papers Inc;CDP +N593=Consolidated Edison NY;ED +N594=Consolidated Freightway;CNF +N595=Consolidated Natural Gas;CNG +N596=Consolidated Stores Cp;CNS +N597=Consorci G Grupo Dina ADR;DIN +N598=Contifinancial Corp;CFN +N599=Continental Can Corp;CAN +N600=Continential Airlines Class A;CAIA +N601=Continential Airlines Class B;CAIB +N602=Continuum Company Inc;CNU +N603=Contl Homes Holding Cp;CON +N604=Convenience Holding Co;CNV +N605=Converse;CVE +N606=Cooker Restaurant Corp;CGR +N607=Cooper Cameron Corp;RON +N608=Cooper Industries Inc.;CBE +N609=Cooper Tire & Rubber;CTB +N610=Coopervision;COO +N611=Coram Healthcare Corp;CRH +N612=Cordiant ADR;CDA +N613=Core Business Services;CBS +N614=Core Ind. Inc;CRI +N615=Corestates Finan Cp;CFL +N616=Corimon Inc;CRM +N617=Corning Inc;GLW +N618=Corporacion Bancaria De Espana ADR;AGR +N619=Corporate High Yield Fund;COY +N620=Corporate High Yield Fd II;KYT +N621=Corrections Corp Of America;CXC +N622=Corrpro Cos;CO +N623=Counsellors Tandem Sec Fd;CTF +N624=Countrybasket France Index;GXF +N625=Countrybasket German;GXG +N626=Countrybasket Hong Kong Index;GXH +N627=Countrybasket Italy Index;GXI +N628=Countrybasket Japan;GXJ +N629=Countrybasket S Africa;GXR +N630=Countrybasket UK Index;GXK +N631=Countrybasket US Index;GXU +N632=Countrywide Credit Ind.;CCR +N633=Cousins Properties Inc;CUZ +N634=Cox Communications;COX +N635=CPC Intl;CPC +N636=CPI Corp;CPY +N637=Craig Corp;CRG +N638=Crane Co;CR +N639=Crawford & Co Class A;CRDA +N640=Crawford & Co Class B;CRDB +N641=Cray Research Inc.;CYR +N642=Credicorp Inc;BAP +N643=Crescent Real Estate Equities;CEI +N644=Crestar Financial Corp;CF +N645=CRI Liquid Reit Income Fund;CFR +N646=Criimi Mae Inc;CMM +N647=Cristalerias De Chile ADR;CGW +N648=Crompton & Knowles Cp;CNK +N649=Cross Timber Royalty Trust;CRT +N650=Cross Timbers Oil Co;XTO +N651=Crown American Realty Trust Sbi;CWN +N652=Crown Cork & Seal;CCK +N653=Crown Crafts Inc;CRW +N654=Crown Pacific Partners;CRO +N655=CSS Industries;CSS +N656=CSX Corp.;CSX +N657=CTS Corporation;CTS +N658=CUC Intl Inc;CU +N659=Culbro Corp;CUC +N660=Culligan Water Tech;CUL +N661=Cummins Engines;CUM +N662=Current Income Shares;CUR +N663=Curtiss Wright Corp;CW +N664=CWM Mortgage Holding;CWM +N665=Cycare Systems Inc;CYS +N666=Cypress Amax Minerals;CYM +N667=Cypress Semiconductor Corp;CY +N668=Cytec Industries;CYT +N669=Czech Republic Fund;CRF +N670=D R Horton Inc;DHI +N671=Daimler Benz Ag ADR;DAI +N672=Dallas Semiconductor Cp;DS +N673=Dames & Moore Inc;DM +N674=Dana Corp;DCN +N675=Danahr Corp;DHR +N676=Daniel Ind Inc;DAN +N677=Darden Restaurants;DRI +N678=Data General Corp.;DGN +N679=Data Water/waste;DWW +N680=Datapoint Corp.;DPT +N681=Dayton Hudson Corp.;DH +N682=DDL Electronics Inc;DDL +N683=De Rigo Spa Adr;DER +N684=Dean Foods Co.;DF +N685=Dean Witter Discover & Co;DWD +N686=Dean Witter Gov't Income Trust;GVT +N687=Debartolo Realty Corp;EJD +N688=Deere & Co;DE +N689=Delaware Group Div & Income Fd;DDF +N690=Deleware Group Global Dividend;DGF +N691=Delmarva Power;DEW +N692=Delta & Pine Land Co;DLP +N693=Delta Air Lines;DAL +N694=Delta Airlines P;DAL+C +N695=Delta Woodside Ind Inc;DLW +N696=Deluxe Check Printers;DLX +N697=Department 56 Inc;DFS +N698=Desc Sa De Service ADR;DES +N699=Desoto Inc;DSO +N700=Destec Energy Inc;ENG +N701=Detroit Diesel Corp;DDC +N702=Developers Diversified Reality Corp;DDR +N703=Dexter Corp;DEX +N704=Diagnostic Product Corp;DP +N705=Dial Corp (The);DL +N706=Diamond Offshore Drilling;DO +N707=Diamond Shamrock Refinery;DRM +N708=Diana Corp;DNA +N709=Diebold Inc.;DBD +N710=Digital Equipment Cp.;DEC +N711=Dillard Dept Stores;DDS +N712=Dime Bancorp Inc;DME +N713=Dimon Inc;DMN +N714=Disco Adr;DXO +N715=Discount Auto Parts Inc;DAP +N716=Disney (Walt) Prod.;DIS +N717=Dole Foods;DOL +N718=Dollar General Corp;DG +N719=Dominion Res Black Warrior Tr;DOM +N720=Dominion Resources Inc;D +N721=Domtar Inc;DTC +N722=Donaldson Co Inc;DCI +N723=Donaldson Lufkin & Jenrette Inc;DLJ +N724=Donnelley (RR) & Sons;DNY +N725=Dover Cp;DOV +N726=Dow Chemical Co.;DOW +N727=Dow Jones & Co. Inc.;DJ +N728=Downey Financial;DSL +N729=DPL Inc;DPL +N730=DQE Inc.;DQE +N731=Dravo Corp;DRV +N732=Dresser Ind.;DI +N733=Dreyfus (Louis) Natural Gas Cp;LD +N734=Dreyfus Strategic Gov't Fund;DSI +N735=Dreyfus Strategic Municipals Inc;LEO +N736=Dreyfus Strategic Muni Bond Fund Inc;DSM +N737=DST Systems Inc;DST +N738=DTE Energy Co;DTE +N739=Duff & Phelps Credit Rating;DCR +N740=Duff & Phelps Util & Cp Bond Tr;DUC +N741=Duff & Phelps Utilities;DNP +N742=Duff Phelps Utilities Tax Free Income;DTF +N743=Duke Power Co.;DUK +N744=Duke R Ca;DRE +N745=Dun & Bradstreet;DNB +N746=Dupont (EI) De Nemour;DD +N747=Dupont 3.50 Pf Series A;DD+A +N748=Dupont 4.50 Pf Series B;DD+B +N749=Duracell Intl;DUR +N750=Duty Free Intl Inc;DFI +N751=DVI Inc;DVI +N752=Dycom Industries Inc;DY +N753=Dyersburg Corp;DBG +N754=Dynamics Corp Amer;DYA +N755=E G & G;EGG +N756=E'Town Cp;ETW +N757=EA Industries Inc;EA +N758=Earthgrains Co;EGR +N759=Eastern Amer Nat Gas;NGT +N760=Eastern Enterprises;EFU +N761=Eastern Utilities Asc;EUA +N762=Eastgroup Properties Sbi;EGP +N763=Eastman Chemical Co;EMN +N764=Eastman Kodak Co.;EK +N765=Eaton Corp.;ETN +N766=ECC Group Plc ADR Spons;ENC +N767=Echlin Inc.;ECH +N768=Eckerd Corp;ECK +N769=Ecolab Inc;ECL +N770=Edison Brothers Store;EBS +N771=Edison Intl;EIX +N772=EDO Corp;EDO +N773=Educational Computer;ECC +N774=Ek Chor China Motorcycle;EKC +N775=Ekco Group;EKO +N776=El Paso Natural Gas;EPG +N777=Elan Cp Plc;ELN +N778=Elcor Corp;ELK +N779=Elf Aquitaine ADR;ELF +N780=Eljer Industrials;ELJ +N781=Elsag Bailey Process Automation;EBY +N782=Elscint Ltd.;ELT +N783=Elsevier ADR;ENL +N784=Embotelladora Andina;AKO +N785=EMC Corp;EMC +N786=Emerging Germany Fund Inc;FRG +N787=Emerging Markets Float Rate Fd;EFL +N788=Emerging Markets Income Fund;EMD +N789=Emerging Markets Income Fd II;EDF +N790=Emerging Markets Telecom Fund;ETF +N791=Emerging Mexico Fund Inc;MEF +N792=Emerging Tiger Fund;TGF +N793=Emerson Electric Co;EMR +N794=Empire District Electric;EDE +N795=Empresa Nacional De Electric;ELE +N796=Empresa Ntl De Electri;EOC +N797=Empresas Ica Sociedad Controladora Sa;ICA +N798=Empresas La Moderna;ELM +N799=Emrg Mrkt Infrastructure;EMG +N800=Energen;EGN +N801=Energy North Inc;EI +N802=Energy Ventures;EVI +N803=Enersis ADR;ENI +N804=Englehard Corp.;EC +N805=Enhance Financial Services Group;EFS +N806=ENI Adr;E +N807=Ennis Business Forms;EBF +N808=Enova Corp;ENA +N809=Enron Corp;ENE +N810=Enron Global Power & Pipeline;EPP +N811=Enron Liquids Pipeline Lp;ENP +N812=Enron Oil & Gas Co - Ny;EOG +N813=Ensco Intl;ESV +N814=ENSERCH Corp.;ENS +N815=Enserch Explor Part Ltd.;EEX +N816=Entergy Corp;ETR +N817=Enterprise Oil;ETP+ +N818=Enterprise Oil Plc ADR;ETP +N819=Environmental Elements;EEC +N820=Eott Energy Partners;EOT +N821=EQK Realty Investors;EKR +N822=Equifax Incorp.;EFX +N823=Equitable Companies Inc;EQ +N824=Equitable Of Iowa Class B;EIC +N825=Equitable Resources Co.;EQT +N826=Equity Resource Intl;EQR +N827=Esco Electronics Cp;ESE +N828=Espirito Santa Financial Holding ADR;ESF +N829=Essex Property Trust;ESS +N830=Esterline Corp;ESL +N831=Ethyl Cp;EY +N832=Europe Fund Inc;EF +N833=Evans Withycomb Residential Inc;EWR +N834=Excel Ind Inc;EXC +N835=Excel Reality Trust;XEL +N836=Excelsior Income Shrs;EIS +N837=Executive Risk Inc;ER +N838=Exel Ltd;XL +N839=Exide Corp;EX +N840=Exxon Corp.;XON +N841=F & M Natl Cp;FMN +N842=Fabri-Centers Of Amer Cl A;FCAA +N843=Factory Stores Of America Inc;FAC +N844=FAI Insurance Ltd ADR;FAI +N845=Fairchild Cp;FA +N846=Fairfield Communities;FFD +N847=Falcon Building Prod;FB +N848=Falcon Products;FCP +N849=Family Dollar Stores;FDO +N850=Fansteel Inc;FNL +N851=Farah Mfg Co.;FRA +N852=Fay's Drug Co. Inc;FAY +N853=Fedders Corp.;FJC +N854=Federal Express Corp.;FDX +N855=Federal Home Loan Cp;FRE +N856=Federal Home Loan Pref;FRE+ +N857=Federal Mogul Corp;FMO +N858=Federal Natl Mortgage;FNM +N859=Federal Rlty Inv Tr Sbi;FRT +N860=Federal Signal Corp;FSS +N861=Federated Department Stores;FD +N862=Ferrellgas Partners Lp;FGP +N863=Ferro Corp;FOE +N864=Fiat S P A Ads;FIA +N865=Fidelity Advisor Emerging Asia Fund;FAE +N866=Fidelity Advisory Korea Fund;FAK +N867=Fidelity Natl Financial Inc;FNF +N868=Fieldcrest Cannon Inc;FLD +N869=Fila Holdings Spa ADR;FLH +N870=Financial Security Assurance Holding;FSA +N871=Fingerhut Cos;FHT +N872=Finova Group;FNV +N873=First Amer Bank & Trust Class A;FOA +N874=First Amer Finan Cp;FAF +N875=First Bank Of America;FBA +N876=First Bank System Inc;FBS +N877=First Brands Cp;FBR +N878=First Chicago NBD Corp;FCN +N879=First Colony Corp;FCL +N880=First Commonwealth Financial Corp;FCF +N881=First Commonwealth Fund Inc;FCO +N882=First Data Corp;FDC +N883=First Federal Financial;FED +N884=First Fincl Fund;FF +N885=First Indust Rlty Tr;FR +N886=First Israel Fund;ISL +N887=First Mississippi Cp;FRM +N888=First Philippine Fund;FPF +N889=First Union Corp;FTU +N890=First Union Real Estate Equity;FUR +N891=First USA Inc;FUS +N892=First USA Paymentech;PTI +N893=First Va Banks Inc;FVB +N894=Firstar Corp;FSR +N895=Firstbank P Rico Commercial;FBP +N896=Fisher Scientific Intl;FSH +N897=Fleet Financial Group Inc;FLT +N898=Fleetwood Enterprises;FLE +N899=Fleming Co's Inc;FLM +N900=Fletcher Challenge Building;FLB +N901=Fletcher Challenge Energy;FEG +N902=Fletcher Challenge Ltd Forest Div;FFS +N903=Fletcher Challenge Paper;FLP +N904=Flightsafety Intl Inc;FSI +N905=Florida East Coast Ind Inc Hld;FLA +N906=Florida Progress Corp;FPC +N907=Flowers Ind.;FLO +N908=Fluke Cp;FLK +N909=Fluor Corp.;FLR +N910=FMC Cp;FMC +N911=FMC Gold Co.;FGL +N912=Food Maker;FM +N913=Foodbrands America;FDB +N914=Ford Motor Co Pf;F+ +N915=Ford Motor Co.;F +N916=Ford Pref B.8%;F+B +N917=Foreign & Colonial Emrg East;EME +N918=Fort Dearborn Income;FTD +N919=Fortis Securities Inc;FOR +N920=Foster Wheeler Corp.;FWC +N921=Foundation Health Corp;FH +N922=Foxmeyer Health Corp;FOX +N923=FPL Group;FPL +N924=France Growth Fund Inc;FRF +N925=Franchise Finance Corp Of Amer;FFA +N926=Franklin Electronic Publishers;FEP +N927=Franklin Multi Income Trust Sbi;FMI +N928=Franklin Principal Maturity Trust;FPT +N929=Franklin Quest Inc;FNQ +N930=Franklin Res Inc;BEN +N931=Franklin Universal Tr;FT +N932=Frederick Of Hollywood;FOHA +N933=Frederick's Hollywood;FOHB +N934=Freeport Mcmoran;FTX +N935=Freeport Mcmoran Copper Co;FCXA +N936=Freeport McMoran Copper & Gold Cl B;FCX +N937=Freeport McMoran Oil & Gas Tr Ubi;FMR +N938=Freeport Mcmoran Res Cp Dep;FRP +N939=Frontier Corp;FRO +N940=Frontier Insurance Grp Inc;FTR +N941=Fruehauf Trailer;FTC +N942=Fruit Of The Loom;FTL +N943=Fund Amer Enterprises Hlgs;FFC +N944=Furniture Brands Intl;FBN +N945=Furon Co;FCY +N946=Furr's/Bishop Inc;CHI +N947=G&L Realty Corp;GLR +N948=Gabelli Convtble Sec;GCV +N949=Gabelli Equity Trust Inc;GAB +N950=Gabelli Global Multimedia;GGT +N951=Gables Residential Tr;GBP +N952=Galey & Lord Inc;GNL +N953=Gallagher Arthur J & Co;AJG +N954=Galoob Lewis Toys;GAL +N955=Gannett Co. Inc.;GCI +N956=Gap Inc;GPS +N957=GATX Corp;GMT +N958=Gaylord Entertainment Co;GET +N959=GC Cos;GCX +N960=Gemini II;GMI+ +N961=Gemini II Inc Cap Shares;GMI +N962=Gen Cp;GY +N963=Gen Rad Inc.;GEN +N964=Genentech Callable Putable Common Secs;GNE +N965=General Amer Investment;GAM +N966=General Datacomm Ind.;GDC +N967=General Dynamics;GD +N968=General Electric Co.;GE +N969=General Growth Properties;GGP +N970=General Host;GH +N971=General Housewares;GHW +N972=General Instrument Cp;GIC +N973=General Mills;GIS +N974=General Motors;GM +N975=General Motors 7.92;GM+D +N976=General Motors Class E;GME +N977=General Motors Cp Cl H;GMH +N978=General Physics Corp;GPH +N979=General Public Utilities;GPU +N980=General Re Corp;GRN +N981=General Signal Corp.;GSX +N982=Genesco Inc;GCO +N983=Genesis Health Ventures;GHV +N984=Geneva Steel Cp;GNV +N985=Genuine Parts Co.;GPC +N986=Geon Inc;GON +N987=Georgia Gulf Corp;GGC +N988=Georgia Pacific Corp.;GP +N989=Georgia Power Pf L;GPE+L +N990=Gerber Scientific Inc.;GRB +N991=Germany Fund Inc;GER +N992=Gerrity Oil & Gas Cp;GOG +N993=Getty Petroleum Corp;GTY +N994=Giant Group Inc;GPO +N995=Giant Industries Inc;GI +N996=Gillette;G +N997=Glamis Gold Ltd;GLG +N998=Glaxo Plc ADR;GLX +N999=Gleason Corp;GLE +N1000=Glenborough Realty Trust Inc;GLB +N1001=Glenfed Inc Hldg Co.;GLN +N1002=Glimcher Realty Trust;GRT +N1003=Global Directmail;GML +N1004=Global Health Sciences Fund;GHS +N1005=Global High Income;GHI +N1006=Global Indust Tech Inc;GIX +N1007=Global Marine Inc;GLM +N1008=Global Natural Resources Inc;GNR +N1009=Global Partners Inc Fd;GDF +N1010=Global Small Cap Fund;GSG +N1011=GM Pref 9 1/8%;GM+Q +N1012=Goldcorp B;GGB +N1013=Goldcorp Inc;GGA +N1014=Golden West Financial;GDW +N1015=Goodrich (BF) Co.;GR +N1016=Goodrich Petroleum Corp;GDP +N1017=Goodyear Tire And Rubber;GT +N1018=Gottschalks Inc;GOT +N1019=Grace (WR) & Co.;GRA +N1020=Graco Inc;GGG +N1021=Grainger (WW);GWW +N1022=Grancare Inc;GC +N1023=Grand Casinos;GND +N1024=Grand Metropolitan Plc;GRM +N1025=Gray Communication System Inc;GCS +N1026=GRC Intl Inc;GRH +N1027=Great Atlantic/Pacific Tea;GAP +N1028=Great Lakes Chemical Corp;GLK +N1029=Great Nthrn Iron Ore;GNI +N1030=Great Western Financial;GWF +N1031=Greater China Fund;GCH +N1032=Green Mountain Power;GMP +N1033=Green Tree Acceptance;GNT +N1034=Greenbrier Cos;GBX +N1035=Greenwich Street Muni Fd;GSI +N1036=Griffon Corp;GFF +N1037=Growth Fund Of Spain Inc;GSP +N1038=Grubb & Ellis Co.;GBE +N1039=Grupo Casa Autrey ADR;ATY +N1040=Grupo Elektra SA;EKT +N1041=Grupo Embotellador De Mexico;GEM +N1042=Grupo Financiero Serfin ADR;SFN +N1043=Grupo Ind Durago;GID +N1044=Grupo Industrial Maseca;MSK +N1045=Grupo Iusacell SA class D;CELD +N1046=Grupo Iusacell Ser L;CEL +N1047=Grupo Mex Desarrollo;GMD +N1048=Grupo Radio Centro ADR;RC +N1049=Grupo Sideksa;SDK +N1050=Grupo Televisa Sa Gdr;TV +N1051=Grupo Tribasa Sa ADR;GTR +N1052=GT Global Dev Markets;GTD +N1053=Gt Great Europe Fund;GTF +N1054=GTE Corp;GTE +N1055=GTech Holdings Corp;GTK +N1056=Guaranty Natl Cp;GNC +N1057=Gucci Group NV;GUC +N1058=Guidant Corp;GDT +N1059=Guilford Mills Inc;GFD +N1060=Gulf Canada Ltd.;GOU +N1061=H&Q Healthcare Fund;HQH +N1062=H&Q Life Science Investors Inc;HQL +N1063=Haemonetics Corp;HAE +N1064=Hafslund Nycomed;HN +N1065=Halliburton Co.;HAL +N1066=Hallwood Group Inc;HWG +N1067=Hammon Hotels;JQH +N1068=Hancock Fabrics Inc;HKF +N1069=Hancock John B & Thrift Opp Fd;BTO +N1070=Hancock Patriot Dividend Fund II;PDT +N1071=Hancock Patriot Premium Div Fund Inc;PDF +N1072=Hancock Patriot Select Dividend Trust;DIV +N1073=Handleman Co.;HDL +N1074=Handy & Harman;HNH +N1075=Hanna M A Co.;MAH +N1076=Hannaford Bros Co.;HRD +N1077=Hanson Plc ADR;HAN +N1078=Harbourton Financial Services;HBT +N1079=Harcourt General Inc;H +N1080=Harland (John H) Co.;JH +N1081=Harley Davidson Inc;HDI +N1082=Harman Int'l Industries;HAR +N1083=Harnischfeger Ind. Inc.;HPH +N1084=Harrah Entertainment;HET +N1085=Harris Corp. (the);HRS +N1086=Harsco Corp;HSC +N1087=Harte Hanks Communication;HHS +N1088=Hartford Steam Boiler Ins;HSB +N1089=Hartmarx Cp;HMX +N1090=Harvey Casino Resorts;HVY +N1091=Hattaras Income Sec;HAT +N1092=Hawaiian Elect Co. Inc;HE +N1093=Hayes Wheels International;HAY +N1094=HCC Insurance Holding Inc;HCC +N1095=He Ro Group Ltd;HRG +N1096=Health Care Property Inv.;HCP +N1097=Health Care Reit;HCN +N1098=Health Care Retirement Corp;HCR +N1099=Health Images Inc;HII +N1100=Health Management Associates Inc;HMA +N1101=Health Systems Intl Inc;HQ +N1102=Health/Retirement Property Tr;HRP +N1103=Healthcare Realty Trust;HR +N1104=Healthplan Services;HPS +N1105=Healthsource Corp;HRC +N1106=Healthsource Inc;HS +N1107=Hecla Mining;HL +N1108=Heilig-Meyers Co.;HMY +N1109=Heinz H.J.;HNZ +N1110=Helmerich & Payne Inc;HP +N1111=Helvetia Fund Inc The;SWZ +N1112=Hercules Inc;HPC +N1113=Heritage U.S. Govt Income Fd;HGA +N1114=Hershey Foods Corp.;HSY +N1115=Hewlett-Packard Co.;HWP +N1116=Hexcel Corp/De;HXL +N1117=HGI Realty Inc;HGI +N1118=Hi Shear Ind.;HSI +N1119=Hi-Lo Automotive Inc;HLO +N1120=Hibernia Cp Class A;HIB +N1121=High Income Adv Tr II Sbi;YLT +N1122=High Income Adv Tr III Sbi;YLH +N1123=High Income Advantage Trust;YLD +N1124=High Income Oppor Fd;HIO +N1125=High Yield Income Fund Inc;HYI +N1126=High Yield Plus Fund Inc;HYP +N1127=Highlands Insurance Group;HIC +N1128=Highwoods Properties;HIW +N1129=Hilb, Rogal & Hamilton Co.;HRH +N1130=Hilenbrand Ind.;HB +N1131=Hilfiger Co;TOM +N1132=Hills Department Stores;HDS +N1133=Hilton Hotels Corp.;HLT +N1134=Hitachi;HIT +N1135=Hollinger Intl Inc;HLR +N1136=Home Depot;HD +N1137=Home Properties Of New York;HME +N1138=Home Shopping Network;HSN +N1139=Homeplex Mortgage Investments Cp;HPX +N1140=Homestake Mining Co.;HM +N1141=Honda Motor Co;HMC +N1142=Honeywell Inc.;HON +N1143=Hong Kong Telecom;HKT +N1144=Horace Mann Educators Cp;HMN +N1145=Horizon Healthcare Corp;HHC +N1146=Hormel Food Corp;HRL +N1147=Horsham Corp;HSM +N1148=Hospital Staffing Service Inc;HSS +N1149=Hospitality Franchise Systems Inc;HFS +N1150=Hospitality Properties Trust;HPT +N1151=Host Marriott Service;HMS +N1152=Houghton Mifflin Co.;HTN +N1153=House Of Fabrics Inc;HF +N1154=Household Int'l Inc Pf 9.5;HI+X +N1155=Household Intl.;HI +N1156=Houston Industries;HOU +N1157=Howell Corp;HWL +N1158=Hre Properties Ltd.;HRE +N1159=HS Resources;HSE +N1160=Huaneng Power Int;HNP +N1161=Hubbell Inc Cl A;HUBA +N1162=Hubbell Inc Cl B;HUBB +N1163=Hudson Foods Inc Class A;HFI +N1164=Huffy Corp;HUF +N1165=Hugh Supply Inc;HUG +N1166=Humana Inc.;HUM +N1167=Hunt Mfg Co.;HUN +N1168=Huntco Inc;HCO +N1169=Huntington Int'l Hldgs Plc ADR;HTD +N1170=Huntway Partners Lp;HWY +N1171=Hyperion 1997 Term Tr;HTA +N1172=Hyperion 1999 Term Trust Inc;HTT +N1173=Hyperion 2002 Term Tr;HTB +N1174=Hyperion 2005 Inv Grd Opp Tr;HTO +N1175=Hyperion Total Return & Income Fund;HTR +N1176=IBP Inc.;IBP +N1177=ICF Kaiser Intl Inc;ICF +N1178=ICN Pharmaceutical;ICN +N1179=Idaho Power Co.;IDA +N1180=Ideon Group;IQ +N1181=Idex Corp;IEX +N1182=IES Industries Inc;IES +N1183=Illinois Central Corp;IC +N1184=Illinois Tool Works;ITW +N1185=Illinova Corp;ILN +N1186=IMC Global Inc;IGL +N1187=Imco Recycling Inc;IMR +N1188=IMO Delaval Inc;IMD +N1189=Imperial Chemical Ind. Inc;ICI +N1190=Inco Ltd.;N +N1191=Income Opportun Fd 1999;IOF +N1192=Income Opportun Fd 2000;IFT +N1193=India Fund;IFN +N1194=India Growth Fund;IGF +N1195=Indiana Energy Inc;IEI +N1196=Indonesian Satellite Corp;IIT +N1197=Industrie Natuzzi ADR;NTZ +N1198=Infinity Broadcasting Corp;INF +N1199=Ingersoll-Rand Co.;IR +N1200=Inland Steel Co;IAD +N1201=Input-Output Inc;IO +N1202=Insignia Financial Group;IFS +N1203=Inst Nazion Dellwe Assicurazioni;INZ +N1204=Insteel Indus Inc;III +N1205=Int Technology Corp.;ITX +N1206=Int'l Game Technology;IGT +N1207=Int'l Specialty Products Inc.;ISP +N1208=Integon Corp;IN +N1209=Integra Financial Cp;ITG +N1210=Integrated Health Services Inc;IHS +N1211=Intellicall Inc;ICL +N1212=Inter Regional Financial;IFG +N1213=Intercapital Ca Ins Muni;IIC +N1214=Intercapital Ca Qual Muni Sec;IQC +N1215=Intercapital Income;ICB +N1216=Intercapital Ins Ca Muni;ICS +N1217=Intercapital Ins Muni Income Tr;IIM +N1218=Intercapital Ins Muni Sec;IMS +N1219=Intercapital Insured Municipal Bond;IMB +N1220=Intercapital Insured Municipal Trust;IMT +N1221=Intercapital NY Qual Muni Sec;IQN +N1222=Intercapital Qual Muni Inv Tr;IQI +N1223=Intercapital Qual Muni Sec;IQM +N1224=Intercapital Quality Municipal Investmen;IQT +N1225=Interlake Inc;IK +N1226=Interpool Inc;IPX +N1227=Interpublic Grp Of Co's;IPG +N1228=Interstate Bakeries;IBC +N1229=Interstate Johnson Lane Securities Inc;IJL +N1230=Interstate Power Co.;IPW +N1231=Intertan Int'l Inc;ITN +N1232=Intimate Brands Inc Cl A;IBI +N1233=Intl Aluminum;IAL +N1234=Intl Business Machines;IBM +N1235=Intl Colin Energy Cp;KCN +N1236=Intl De Ceramica ADR;ICM +N1237=Intl Family Entertainment Inc;FAM +N1238=Intl Flavor/Frag.;IFF +N1239=Intl Investment Securities;IIS +N1240=Intl Mutifoods;IMC +N1241=Intl Paper Co;IP +N1242=Intl Rectifier;IRF +N1243=Intl Shipholding Corp;ISH +N1244=Invesco Plc Adr;IVC +N1245=Ionics Inc;ION +N1246=IP Timberlands Ltd.;IPT +N1247=IPALCO Entprses Holding;IPL +N1248=Irish Investment Fund Inc;IRL +N1249=Irsa Inversiones Y Repres Grd;IRS +N1250=IRT Property/Ga;IRT +N1251=Irvine Apartment Communities;IAC +N1252=Isomedix Inc;ISO +N1253=ISS Intl Service;ISG +N1254=Istituto Mobiliare Italiano ADR;IMI +N1255=Italy Fund Inc.;ITA +N1256=ITT Corp;ITT +N1257=ITT Educational Service;ESI +N1258=ITT Hartford Group Inc;HIG +N1259=ITT Industries Inc;IIN +N1260=J&l Speciality Steel Inc;JL +N1261=Jackpot Enterprises;J +N1262=Jacobs Engineering Group;JEC +N1263=Jakarta Growth Fund Inc;JGF +N1264=James River Cp/Va;JR +N1265=Japan Equity Fund Inc;JEQ +N1266=Japan Otc Equity Fund Inc;JOF +N1267=Jardine Fleming China Region Fund;JFC +N1268=Jardine Fleming India Fund;JFI +N1269=JDN Realty Cp;JDN +N1270=Jefferies Group Inc;JEF +N1271=Jefferson Smurfit;JS +N1272=Jefferson-Pilot Corp.;JP +N1273=Jenny Craig Inc;JC +N1274=Jilin Chemical Indust;JCC +N1275=John Hancock Inc Sec;JHS +N1276=John Hancock Investment;JHI +N1277=John Hancock Pat Glob;PGD +N1278=John Hancock Patr Pf;PPF +N1279=Johnson & Johnson;JNJ +N1280=Johnson Controls;JCI +N1281=Johnstown Industries Inc;JII +N1282=Jones Apparel;JNY +N1283=Josten's Inc;JOS +N1284=JP Morgan Pref;JPM+A +N1285=JP Realty Inc;JPR +N1286=K III Communication;KCC+ +N1287=K Mart Cp;KM +N1288=K-III Communication;KCC +N1289=Kaiser Aluminum;KLU +N1290=Kaneb Pipeline Partners Lp;KPP +N1291=Kaneb Services;KAB +N1292=Kansas City Power & Light;KLT +N1293=Kansas City Sthrn Ind.;KSU +N1294=Katy Ind Inc;KT +N1295=Kaufman & Broad Home Cp;KBH +N1296=Kaydon Cp;KDN +N1297=KCS Energy Inc;KCS +N1298=Keithley Instru Inc;KEI +N1299=Kellog Co;K +N1300=Kellwood Co.;KWD +N1301=Kemper High Income Trust;KHI +N1302=Kemper Intermediate Gov't Tr;KGT +N1303=Kemper Multi Mkt Income Trust;KMM +N1304=Kemper Muni Inc Trust;KTF +N1305=Kemper Strategic Income Fd;KST +N1306=Kemper Strategic Muni Inc;KSM +N1307=Kennametal Inc;KMT +N1308=Kent Electronics Cp;KNT +N1309=Kerr Glass Mfg Co.;KGM +N1310=Kerr-McGee;KMG +N1311=Key Corp;KEY +N1312=Keystone Consol Ind.;KES +N1313=Keystone Intl.;KII +N1314=Kimberly Clark;KMB +N1315=Kimco Realty Corp;KIM +N1316=Kimmins Environmental Services Cp;KVN +N1317=King World Productions;KWP +N1318=Kinross Gold Corp;KGC +N1319=Kleinwort Benson Austral;KBA +N1320=KLM Royal Dutch Air;KLM +N1321=KN Energy Inc;KNE +N1322=Knight-Ridder Newspapers;KRI +N1323=Kohls Corp;KSS +N1324=Kollmorgen Corp;KOL +N1325=Koor Industries;KOR +N1326=Korea Electric;KEP +N1327=Korea Equity Fund;KEF +N1328=Korea Fund Inc;KF +N1329=Korean Investment Fund;KIF +N1330=Kranzco Reality Trust;KRT +N1331=Kroger Co.(the);KR +N1332=KU Energy;KU +N1333=Kubota Ltd;KUB +N1334=Kuhlman Corp;KUH +N1335=Kyocera Corp;KYO +N1336=Kysor Industrial Corp;KZ +N1337=L & N Housing Corp;LHC +N1338=L. L. & E Royalty Trust;LRT +N1339=LA Gear;LA +N1340=La Quinta Inns Inc;LQI +N1341=La-Z-Boy Chair;LZB +N1342=Laboratory Chile;LBC +N1343=Laboratory Corp Of Amer;LH +N1344=Laclede Gas Co.;LG +N1345=Lafarge Corp;LAF +N1346=Laidlaw Transportation Ltd Class B;LDWB +N1347=Laidlaw Transportation Class A;LDWA +N1348=Lakehead Pipeline Partners Lp;LHP +N1349=Lamson & Sessions Co.;LMS +N1350=Lands End Inc;LE +N1351=Lasmo Plc ADR;LSO +N1352=Latin Amer Discovery Fund;LDF +N1353=Latin Amer Equity Fund;LAQ +N1354=Latin America Dollar Income;LBF +N1355=Latin America Investment Fund Inc;LAM +N1356=Lauder (Estee) Cos Cl A;EL +N1357=Lawter Intl Inc;LAW +N1358=Lawyers Title;LTI +N1359=LCI International;LCI +N1360=Lear Seating;LEA +N1361=Learonal Inc;LRI +N1362=Lee Enterprises Inc;LEE +N1363=Legg Mason Inc;LM +N1364=Leggett & Platt Inc;LEG +N1365=Lehigh Group Inc;LEI +N1366=Lehman Brothers Holding;LEH +N1367=Lehman Latin Growth;LLF +N1368=Lennar Corporation;LEN +N1369=Leucadia Natl Corp;LUK +N1370=Leviathan Gas Pipeline;LEV +N1371=Levitz Furniture;LFI +N1372=Lexington Corporate Properties;LXP +N1373=Lexmark Intl Group;LXK +N1374=LG&E Energy Cp;LGE +N1375=Libbey Inc;LBY +N1376=Liberte Investors Sbi;LBI +N1377=Liberty All Star Equty Fund;USA +N1378=Liberty All-Star Growth Fund;ASG +N1379=Liberty Corp;LC +N1380=Liberty Financial Cos;L +N1381=Liberty Property Trus;LRY +N1382=Liberty Term Trust Inc;LTT +N1383=Life Partners Group;LPG +N1384=Life Re Corp;LRE +N1385=Lilly (Eli) & Co.;LLY +N1386=Limited Inc.;LTD +N1387=Lincoln Natl;LNC +N1388=Lincoln Natl Cv Sec Fund;LNV +N1389=Lincoln Natl Direct Plc;LND +N1390=Litton Ind. Inc.;LIT +N1391=Living Centers Of Amer Inc;LCA +N1392=Liz Claiborne;LIZ +N1393=Lockheed Martin Corp;LMT +N1394=Loctite Cp;LOC +N1395=Loews Corp;LTR +N1396=Logicon Inc;LGN +N1397=Lone Star Industries Inc.;LCE +N1398=Long Island Lighting;LIL +N1399=Longs Drug Stores Inc.;LDG +N1400=Longview Fibre Co.;LFB +N1401=Loral Corp.;LOR +N1402=Loral Space & Communicaton Ltd;LSPI +N1403=Louisiana Land/Expl.;LLX +N1404=Louisiana-Pacific;LPX +N1405=Lowe's Co Inc;LOW +N1406=LSB Ind Inc;LSB +N1407=LSI Logic Cp;LSI +N1408=LTC Properties Inc;LTC +N1409=LTV Corp;LTV +N1410=Lubrizol Corp (the);LZ +N1411=Luby's Cafeterias;LUB +N1412=Lucent Technology;LU +N1413=Lukens Inc;LUC +N1414=Luria & Sons Inc;LUR +N1415=Luxottica Group Spa;LUX +N1416=Lydall Inc;LDL +N1417=Lyondell Petrochemical;LYO +N1418=M/I Schottenstein Homes;MHO +N1419=Mac Frugal Bargain Close Out;MFI +N1420=Macerich Co;MAC +N1421=Madeco SA ADR;MAD +N1422=Maderas Sinteticos Soliedad Anonima Masi;MYS +N1423=Mafco Consl Group;MFO +N1424=Magna Intl Inc Class A;MGA +N1425=Magnetek Inc;MAG +N1426=Malan Realty Investors Inc;MAL +N1427=Malaysia Fund Inc;MF +N1428=Mallinckrodt Group;MKG +N1429=Managed High Income Port;MHY +N1430=Managed Mun Portfolio III;MTU +N1431=Managed Municipals Portfolio Inc;MMU +N1432=Manitowoc Inc;MTW +N1433=Manor Care Inc;MNR +N1434=Manpower Inc;MAN +N1435=Manufactured Homes Communities;MHC +N1436=Mapco Inc.;MDA +N1437=Marcus Cp;MCS +N1438=Maritrans Inc;TUG +N1439=Mark Center Trust Sbi;MCT +N1440=Mark IV Industries;IV +N1441=Marriott Corp;HMT +N1442=Marriott International;MAR +N1443=Marsh & Mclennan Co's;MMC +N1444=Marshall Industries;MI +N1445=Martin Lawrence Ltd Inc;MLE +N1446=Martin Marietta Materials Inc;MLM +N1447=Marvel Entertainment;MRV +N1448=Masco;MAS +N1449=Mascotech Inc;MSX +N1450=Mass Mutual Part Investors;MPV +N1451=Massmutual Corp.;MCI +N1452=Material Sciences Cp;MSC +N1453=Matlack Systems Inc;MLK +N1454=Matsushita Elec.;MC +N1455=Mattel Co.;MAT +N1456=Mauna Loa Macadamia Lp;NUT +N1457=Maxxim Medical;MAM +N1458=May Dept Stores;MA +N1459=Maytag Co. (The);MYG +N1460=MBIA Inc.;MBI +N1461=MBNA Cp;KRB +N1462=Mc Dermott J Ray Sa;JRM +N1463=Mc Kesson Corp;MCK +N1464=Mc Whorter Technology;MWT +N1465=McClatchy Newspapers Class A;MNI +N1466=McDermott Intl Inc.;MDR +N1467=McDonald & Co Inv.;MDD +N1468=McDonalds Corp.;MCD +N1469=McDonnell Douglas;MD +N1470=McGraw-Hill Cos;MHP +N1471=MCN Corp;MCN +N1472=MCN Corp Prides;MCE +N1473=MDC Holding Corp;MDC +N1474=MDU Resources Group;MDU +N1475=Mead Corp. (The);MEA +N1476=Meadowbrook Insurance Group;MIG +N1477=Measurex Corp;MX +N1478=Meditrust;MT +N1479=Medpartners/Mullikin Inc;MDM +N1480=Medtronic Inc;MDT +N1481=Medusa Corp;MSA +N1482=Mellon Bank Corp.;MEL +N1483=Mellon Bank Pfd J;MEL+J +N1484=Melville Cp;MES +N1485=MEMC Electronic Materials;WFR +N1486=Mentor Income Fund;MRF +N1487=Mercantile Bancorp;MTL +N1488=Mercantile Stores;MST +N1489=Merck & Co. Inc.;MRK +N1490=Mercury Financial;MFN +N1491=Meredith Corp.;MDP +N1492=Meridian Industrial Trust;MDN +N1493=Merrill Lynch & Co.;MER +N1494=Merrill Lynch Euro Mkt Tgt 1999;MEE +N1495=Merrill Lynch S+P 500 1998;MIE +N1496=Merry Land & Investment Co;MRY +N1497=Mesa Lp;MXP +N1498=Mesa Royalty Trust Ubi;MTR +N1499=Mesabi Trust Sbi;MSB +N1500=Mestek Inc;MCC +N1501=Metrogas;MGS +N1502=Mexico Equity & Income Fund Inc;MXE +N1503=Mexico Fund Inc;MXF +N1504=Meyer (Fred) Inc.;FMY +N1505=MFS Charter Income Trust;MCR +N1506=MFS Govt Market Income Trust;MGF +N1507=MFS Income Trust;MIN +N1508=MFS Multiple Income Trust;MFM +N1509=MFS Multiple Market Income Trust;MMT +N1510=MFS Special Value Trust;MFV +N1511=MGI Properties;MGI +N1512=MGIC Investments;MTG +N1513=MGM Grand Inc;MGG +N1514=Micron Technology;MU +N1515=Mid America Apartment Communities;MAA +N1516=Mid Atlantic Medical Serv;MME +N1517=Mid-Amer Realty Investment;MDI +N1518=Mid-Amer Waste Systems;MAW +N1519=Midamerican Energy Co;MEC +N1520=Midwest Express Holdings;MEH +N1521=Midwest Real Estate Shopping Center;EQM +N1522=Mikasa Inc;MKS +N1523=Milestone Properties Inc;MPI +N1524=Miller Industries;MLR +N1525=Millipore Corp;MIL +N1526=Mills Corp;MLS +N1527=Mineral Technologies Inc;MTX +N1528=Minnesota Mining & Manufacturing (3M);MMM +N1529=Minnesota Muni Term Trust;MNA +N1530=Minnesota Power & Light;MPL +N1531=Mirage Resorts Inc;MIR +N1532=Mitchell Energy & Dev;MNDB +N1533=Mitchell Energy/devel.;MNDA +N1534=Mitel Corp;MLT +N1535=MMI Co;MMI +N1536=Mobil Corp.;MOB +N1537=Molecular Bio Sys Inc;MB +N1538=Monarch Machine Tool;MMO +N1539=Monsanto Co.;MTC +N1540=Montana Power;MTP +N1541=Montedison S.P.A. Ord Ads;MNT +N1542=Montgomery St Income;MTS +N1543=Moore Corp Ltd;MCL +N1544=Morgan (J.P.) & Co;JPM +N1545=Morgan Grenfell Smallcup;MGC +N1546=Morgan Keegan Inc;MOR +N1547=Morgan Products Ltd;MGN +N1548=Morgan Stan Glob Opp Fd;MGB +N1549=Morgan Stanley Emer Mkt Debt Fd;MSD +N1550=Morgan Stanley Emerging Market Fund;MSF +N1551=Morgan Stanley Fin;MSV +N1552=Morgan Stanley Fin 7.82 Fd;MSU +N1553=Morgan Stanley Group;MS +N1554=Morgan Stanley High Yld Fd;MSY +N1555=Morrison Health Care Inc;MHI +N1556=Morrison-Knudsen Cp Hldg;MRN +N1557=Morton Intl Inc;MII +N1558=Morton-thiokol Inc;TKC +N1559=Mossimo Inc;MGX +N1560=Motorola Inc.;MOT +N1561=MS Africa Fund;AFF +N1562=MS Asia Fund;APF +N1563=MS India Fund;IIF +N1564=MSC Industrial Direct;MSM +N1565=Mueller Industries Inc;MLI +N1566=Multicare Cos;MUL +N1567=Muni Yield Califoria Fund;MYC +N1568=Muni Yield Florida Fund Inc;MYF +N1569=Muni Yield Michigan Fund Inc;MYM +N1570=Muni Yield New York Insured Fund;MYN +N1571=Muni-Enhanced Fund Inc.;MEN +N1572=Muniassets Fund Inc;MUA +N1573=Municipal Advantage Fd;MAF +N1574=Municipal High Income Fund;MHF +N1575=Municipal Income Opportunities Trust II;OIA +N1576=Municipal Income Opp Fd;OIC +N1577=Municipal Partners Fund;MNP +N1578=Municipal Partners Fd;MPT +N1579=Munivest CA Ins Fd;MVC +N1580=Munivest FL Fd;MVS +N1581=Munivest Fund II;MVT +N1582=Munivest MI Ins Fd;MVM +N1583=Munivest NJ Fund;MVJ +N1584=Munivest NY Ins Fd;MVY +N1585=Munivest PA Ins Fd;MVP +N1586=Muniyield CA Insured;MIC +N1587=Muniyield FL Insured Fd;MFT +N1588=Muniyield Fund;MYD +N1589=Muniyield Insured Fd II;MTI +N1590=Muniyield MI Insur Fd;MIY +N1591=Muniyield New Jersey Fund Inc;MYJ +N1592=Muniyield NJ Insur Fd;MJI +N1593=Muniyield NY Ins Fd II;MYT +N1594=Muniyield NY Ins Fd III;MYY +N1595=Muniyield PA Fd;MPA +N1596=Muniyield Quality Fd II;MQT +N1597=Muniyield Quality Fd;MQY +N1598=Munsingwear Inc;MUN +N1599=Murphy Oil Corp.;MUR +N1600=Music Land Stores;MLG +N1601=Mutual Risk Management;MM +N1602=Mylan Labs Inc;MYL +N1603=Myrs Group Inc;MYR +N1604=N.Y. Gas & Electric;NGE +N1605=Nabisco Holding;NA +N1606=Nac Re Cp;NRC +N1607=NACCO Industries;NC +N1608=Nalco Chemical Co;NLC +N1609=Nashua Corp;NSH +N1610=National Auto Credit;NAK +N1611=National Golf Properties;TEE +N1612=National Power ADR;NP +N1613=National Power Plc In;NPPP +N1614=National Steel class B;NS +N1615=Nations Balanced Targ;NBM +N1616=Nations Bank;NB +N1617=Nations Govt Inv Tr 2004;NGF +N1618=Nations Govt Inv Tr 2003;NGI +N1619=Nationwide Health Properties;NHP +N1620=Natl Australian Bank;NAB +N1621=Natl City Cp;NCC +N1622=Natl Data Cp;NDC +N1623=Natl Education Cp;NEC +N1624=Natl Fuel & Gas Co;NFG +N1625=Natl Health Investors Inc;NHI +N1626=Natl Media Cp;NM +N1627=Natl Presto Ind;NPK +N1628=Natl Re Holdings Cp;NRE +N1629=Natl Semiconductor;NSM +N1630=Natl Service Ind;NSI +N1631=Natl Standard Co;NSD +N1632=Natl Westminster Bank;NW +N1633=Navistar;NAV +N1634=NCH Corp.;NCH +N1635=Neiman Marcus;NMG +N1636=Nelson Thomas Cl B;TNMB +N1637=Network Equipment Tech;NWK +N1638=Nevada Power Co;NVP +N1639=New Age Media Fund;NAF +N1640=New Amer High Income Fund;HYB +N1641=New Eng Business Service Inc;NEB +N1642=New England Elec. System;NES +N1643=New England Investment Inc;NEW +N1644=New Germany Fund Inc;GF +N1645=New Jersey Resources;NJR +N1646=New Plan Rlty Tr Sbi;NPR +N1647=New South Africa Fund;NSA +N1648=New York Bancorp Inc;NYB +N1649=Newbridge Networkd Cp;NN +N1650=Newell Co.;NWL +N1651=Newfield Exploration Co;NFX +N1652=Newhall Land/Farming;NHL +N1653=Newmont Gold Co.;NGC +N1654=Newmont Mining Cp;NEM +N1655=Newpark Resources Inc;NR +N1656=News Corp Ltd ADR;NWS +N1657=NGL Corp;NGL +N1658=Niagara Mohawk Power;NMK +N1659=NICOR;GAS +N1660=Nike Inc Class B;NKE +N1661=Nine West Group;NIN +N1662=Nippon Telegraph & Telephone Corp ADR;NTT +N1663=Nipso Indust Inc;NI +N1664=NL Industries;NL +N1665=Noble Affiliates;NBL +N1666=Nokia Corp ADR;NOKA +N1667=NorAm Energy Corp;NAE +N1668=Nord Resources Corp;NRD +N1669=Norfolk Southern;NSC +N1670=Norrell Cp;NRL +N1671=Norsk Hydro Ads;NHY +N1672=Nortek Inc.;NTK +N1673=North American Mortgage Co;NAC +N1674=North Carolina Natural Gas;NCG +N1675=North European Oil Rlty;NET +N1676=North Fork Bancorp;NFB +N1677=Northeast Utilities;NU +N1678=Northern Border Partners Lp;NBP +N1679=Northern States Power;NSP +N1680=Northern Telecom;NT +N1681=Northgate Exploration;NGX +N1682=Northrop Grumman Corp.;NOC +N1683=Northwestern Public Serv;NPS +N1684=Norwest Corp;NOB +N1685=Nova Corp;NVA +N1686=Novacare;NOV +N1687=Novo Indust. A/S Ads;NVO +N1688=NS Group Inc;NSS +N1689=Nucor Corp;NUE +N1690=Nuevo Energy Co;NEV +N1691=NUI Corp;NUI +N1692=Nuveen (John) Co;JNC +N1693=Nuveen AZ Prem Inc Mu;NAZ +N1694=Nuveen CA Invest Qual Muni;NQC +N1695=Nuveen CA Muni Mkt Opportunity;NCO +N1696=Nuveen CA Municipal Value Fund;NCA +N1697=Nuveen CA Performance Plus Muni Fund;NCP +N1698=Nuveen CA Select Qual Muni;NVC +N1699=Nuveen California Quality Income Muni;NUC +N1700=Nuveen CT Premium Ins Mun Fd;NTC +N1701=Nuveen Florida IQ Muni Fund;NQF +N1702=Nuveen Florida Quality Income Muni Fund;NUF +N1703=Nuveen Ins CA Prem Im;NCL +N1704=Nuveen Ins CA Prem Ins Mun Fd;NPC +N1705=Nuveen Ins FL Prem Im;NFL +N1706=Nuveen Ins NY Prem Ins Mun Fd;NNF +N1707=Nuveen Ins Premium Ins Mun Fd;NPE +N1708=Nuveen Ins Premium Ins Mun Fd;NPX +N1709=Nuveen Insured CA Select Port;NXC +N1710=Nuveen Insured Muni Opportunity Fund Inc;NIO +N1711=Nuveen Insured NY Select Port;NXN +N1712=Nuveen Insured Quality Muni Fund;NQI +N1713=Nuveen Investment Quality Municipal Fund;NQM +N1714=Nuveen MA Premium Ins Mun Fd;NMT +N1715=Nuveen MD Premium Ins Mun Fd;NMY +N1716=Nuveen MI Premium Ins Mun Fd;NMP +N1717=Nuveen Michigan Quality Income Municipal;NUM +N1718=Nuveen Muni Market Opportunity Fund;NMO +N1719=Nuveen Municipal Advantage Fund;NMA +N1720=Nuveen Municipal Income;NMI +N1721=Nuveen Municipal Value Fund;NUV +N1722=Nuveen NC Premium Ins Mun Fd;NNC +N1723=Nuveen New Jersey IQ Muni Fund;NQJ +N1724=Nuveen NJ Premium Ins Mun Fd;NNJ +N1725=Nuveen Ny Investment Quality Muni Fund;NQN +N1726=Nuveen NY Municipal Value Fund;NNY +N1727=Nuveen NY Performance Plus Muni Fund;NNP +N1728=Nuveen NY Quality Ins Mun Fd;NUN +N1729=Nuveen NY Select Qual Muni;NVN +N1730=Nuveen Ohio Quality Income Municipal Fun;NUO +N1731=Nuveen PA Premium Ins Mun Fd;NPY +N1732=Nuveen Pennsylvania IQ Muni Fund;NQP +N1733=Nuveen Performance Plus Muni Fd;NPP +N1734=Nuveen Premier Insured Municipal;NIF +N1735=Nuveen Premier Municipal Fund;NPF +N1736=Nuveen Premium Income Muni Fd;NPI +N1737=Nuveen Premium Ins Mun Fd II;NPM +N1738=Nuveen Premium Ins Mun Fd IV;NPT +N1739=Nuveen Quality Investment Muni Fund;NQU +N1740=Nuveen Sel Mat Muni F;NIM +N1741=Nuveen Sel Tax-free 3;NXR +N1742=Nuveen Select Quality Muni Fund Inc;NQS +N1743=Nuveen Select Tax Free Income Portfolio;NXP +N1744=Nuveen Select Tax-Free Income Port;NXQ +N1745=Nuveen Texas Quality Income Municipal;NTX +N1746=Nuveen VA Premium Ins Mun Fd;NPV +N1747=Nymagic Inc;NYM +N1748=Nynex;NYN +N1749=Oak Industries;OAK +N1750=Oakley Inc;OO +N1751=Oakwood Homes Corp;OH +N1752=Oasis Residential Inc;OAS +N1753=Occidental Petrole;OXY +N1754=Oceaneering Intl Inc;OII +N1755=OEA Inc;OEA +N1756=OEC Medical Systems Inc;OXE +N1757=Office Depot Inc;ODP +N1758=OfficeMax Inc;OMX +N1759=Ogden Corp.;OG +N1760=Ohio Edison;OEC +N1761=Ohm Cp;OHM +N1762=Oil-Dri Cp;ODC +N1763=Oklahoma Gas & Electric;OGE +N1764=Old Republic Intl;ORI +N1765=Olin Corp;OLN +N1766=Olsten Corp;OLS +N1767=Omega Healthcare Investors Inc;OHI +N1768=Omnicare Inc;OCR +N1769=Omnicom Group Inc;OMC +N1770=Oneida Ltd;OCQ +N1771=Oneita Ind;ONA +N1772=ONEOK Inc.;OKE +N1773=Oppenheimer Capital Lp;OCC +N1774=Oppenheimer Multi Fund;OMS +N1775=Oppenheimer Multi Gov't Tr;OGT +N1776=Orange & Rockland Util;ORU +N1777=Orange Co;OJ +N1778=Orbital Engine Ltd;OE +N1779=Oregon Steel Mills Inc;OS +N1780=Oriental Bank & Trust;OBT +N1781=Orion Capital Corp;OC +N1782=Ornda Healthcorp;ORN +N1783=Oryx Energy;ORX +N1784=Osmonics Inc;OSM +N1785=Osullivans Industries Holding;OSU +N1786=Outboard Marine Corp.;OM +N1787=Overseas Shiphldg Grp;OSG +N1788=Owen Illinois;OI +N1789=Owens & Minor Inc;OMI +N1790=Owens-Corning;OCF +N1791=Oxford Ind Cl A;OXM +N1792=P P&L Resources;PPL +N1793=Pacific Amer Inc Shr;PAI +N1794=Pacific Corp;PPW +N1795=Pacific Enterprises;PET +N1796=Pacific Gas And Electric;PCG +N1797=Pacific Scientific Co.;PSX +N1798=Pacific Telesis Corp.;PAC +N1799=Pacificorp Quids;PCQ +N1800=Paine Webber Group;PWJ +N1801=Paine Webber Prem Hi Inc Tr;PHT +N1802=Paine Webber Prem Ins Muni Tr;PIF +N1803=Paine Webber Prem Tax Fr Income;PPM +N1804=Pakistan Investment Fund;PKF +N1805=Pall Cp;PLL +N1806=Panamerican Beverage Inc;PB +N1807=Panhandle Eastern Corp;PEL +N1808=Par Technology;PTC +N1809=Paragon Group;PAO +N1810=Paragon Trade Brands Inc;PTB +N1811=Park Electrochemical;PKE +N1812=Parker & Parsley Petroleum Co;PDP +N1813=Parker Drilling Co.;PKD +N1814=Parker Hannifin Corp.;PH +N1815=Patriot American Hospitality;PAH +N1816=Paxar Co;PXR +N1817=Payless Cashways Inc;PCS +N1818=Pec Israel Economic Cp;IEC +N1819=Pechiney Adr;PY +N1820=PECO Energy Co;PE +N1821=Penn Enterprises;PNT +N1822=Penn Traffic Co;PNF +N1823=Penncorp Financial Group;PFG +N1824=Penney (JC) Co. Inc.;JCP +N1825=Pennzoil Co.;PZL +N1826=Peoples Energy Corp;PGL +N1827=Pep Boys Manny, Moe, & Jack;PBY +N1828=Pepsi Co. Inc.;PEP +N1829=Pepsi-Cola Puerto Rico Bottling Cl B;PPO +N1830=Perkin Elmer Corp.;PKN +N1831=Perkins Farm Restaurants;PFR +N1832=Permian Basin Rlty Ubi;PBT +N1833=Personnel Group of Amer;PGA +N1834=Perusahaan Perseroan;TLK +N1835=Petro-Canada;PCZ +N1836=Petro-Canada 1st Installments;PCZPP +N1837=Petroleum & Resources;PEO +N1838=Pfizer Inc;PFE +N1839=Pharmaceutical Resources Inc;PRX +N1840=Pharmacia & Upjohn Inc;PNU +N1841=Phelps Dodge Corp.;PD +N1842=PHH Group Inc;PHH +N1843=Philadelphia Suburban;PSC +N1844=Philip Morris Inc;MO +N1845=Philippine Long Dist Tele;PHI +N1846=Phillips Electronics NV;PHG +N1847=Phillips Petroleum Co.;P +N1848=Phillips-Van Heusen Cp;PVH +N1849=Phoenix Duff & Phelps Corp;DUF +N1850=PHP Healthcare Cp;PPH +N1851=Physician Resource Group;PRG +N1852=Piccadilly Cafeteria;PIC +N1853=Piedmont Natural Gas;PNY +N1854=Pier 1;PIR +N1855=Pilgram America Prime Rate Trust;PPR +N1856=Pilgrim Amer Bank & Thrift Funds;PBS +N1857=Pilgrims Pride Corp;CHX +N1858=Pillowtex Corp;PTX +N1859=Pimco Advisory;PA +N1860=Pimco Commercial Mortgage Security Tru;PCM +N1861=Pinnacle West Capital Corp.;PNW +N1862=Pioneer Electronic ADR;PIO +N1863=Pioneer Finan Serv;PFS +N1864=Pioneer Financial Serv 225 Pr;PFS+ +N1865=Pioneer Hi Bred Intl;PHB +N1866=Pioneer Interest Shares;MUO +N1867=Piper Jaffray Inc;PJC +N1868=Pitney Bowes Inc.;PBI +N1869=Pittston Brinks Group;PZB +N1870=Pittston Burlington Group;PZX +N1871=Pittston Mineral Group;PZM +N1872=Placer Dome Inc.;PDG +N1873=Plantronics Inc;PLT +N1874=Playboy Enterprises;PLA +N1875=Playboy Enterprises A;PLAA +N1876=Playtex Products;PYX +N1877=Plum Creek;PCL +N1878=Ply Gem Ind;PGI +N1879=PMI Group;PMA +N1880=PNC Financial;PNC +N1881=Pogo Producing Co.;PPP +N1882=Pohang Iron & Steel Co;PKX +N1883=Polaris Indus Lp;PII +N1884=Polaroid Corp.;PRD +N1885=Policy Management Systems Cp;PMS +N1886=Polygram Nv;PLG +N1887=Poncebank Fsb;PBK +N1888=Pope & Talbot Inc;POP +N1889=Portec Inc;POR +N1890=Portland Gas & Elec.;PGN +N1891=Portugal Fund;PGF +N1892=Portugal Telecom;PT +N1893=Post Properties Inc;PPS +N1894=Potash Cp;POT +N1895=Potlatch Corp.;PCH +N1896=Potomac Utilities;POM +N1897=Power Control Tech;ATP +N1898=Powergen ADR;PWG +N1899=Powergen Plc Fst Inte;PWGPP +N1900=PPG Ind. Inc;PPG +N1901=Praxair Inc;PX +N1902=Precision Castparts Cp;PCP +N1903=Preferred Income Fund Inc;PFD +N1904=Preferred Income Mgmt;PFM +N1905=Preferred Income Opportunity Fund;PFO +N1906=Premark Intl Inc;PMI +N1907=Premdor Inc;PI +N1908=Premier Farnell Pld;PFP +N1909=Presley Cos;PDC +N1910=Pride Cos Lp;PRF +N1911=Primark Corp;PMK +N1912=Prime Hospitality Inns Inc;PDQ +N1913=Prime Motor Inns Lp;PMP +N1914=Proctor & Gamble Co.;PG +N1915=Progressive Corp (Ohio);PGR +N1916=Proler Intl;PS +N1917=Promus Hotel;PRH +N1918=Prospect Street Hi Income;PHY +N1919=Protective Life Cp;PL +N1920=Provident Life & Accident Insurance Cl A;PVT +N1921=Providian Corp;PVN +N1922=Prudential Reinsurance Holdings Inc;RE +N1923=PS Group Inc;PSG +N1924=Public Serv Co Of N C;PGS +N1925=Public Service Co Colo;PSR +N1926=Public Service Electric Gas;PEG +N1927=Public Service New Mexico;PNM +N1928=Public Storage Inc;PSA +N1929=Publicker Industries;PUL +N1930=Puerto Rican Cement;PRN +N1931=Puget Sound Power & Light;PSD +N1932=Pulitzer Publishing Co;PTZ +N1933=Pulte Corp;PHM +N1934=Putnam Dividend Income Fund;PDI +N1935=Putnam High Income Trust;PCF +N1936=Putnam High Muni;PYM +N1937=Putnam Intermediate Govt Trust;PGT +N1938=Putnam Inv Grd Mun Tr II;PMG +N1939=Putnam Investment Grade Muni Trust;PGM +N1940=Putnam Managed Hi Yield Tr;PTM +N1941=Putnam Management Muni Inc Tr;PMM +N1942=Putnam Master Income Trust;PMT +N1943=Putnam Master Interm Income Trust;PIM +N1944=Putnam Mun Opp Trust;PMO +N1945=Putnam Premier Income Trust;PPT +N1946=Putnam Tax-Free Health Care Fund;PMH +N1947=QMS Inc;AQM +N1948=Quaker Oats Co.;OAT +N1949=Quaker State Oil Ref;KSF +N1950=Quanex Corp;NX +N1951=Quantum Restaurants Group;KRG +N1952=Quebecor Printing;PRW +N1953=Quest For Value Cap Shares;KFV +N1954=Quest For Value Income Shares;KFV+ +N1955=Questar Corp Holding Co.;STR +N1956=Quick & Reilly Group Inc;BQR +N1957=Quilmes Indust Societe Anonyme;LQU +N1958=Ralcorp Holdings Inc;RAH +N1959=Ralston Purina Group;RAL +N1960=Ranger Oil Ltd;RGO +N1961=Rauma Oy ADR;RMA +N1962=Raychem Corp;RYC +N1963=Raymond James Financial;RJF +N1964=Rayonier Inc;RYN +N1965=Rayonier Timberlands Lp;LOG +N1966=Raytech Corp Hldg & Co Del;RAY +N1967=Raytheon Co.;RTN +N1968=RCM Strategic Global;RCS +N1969=Reader's Digest Assn cl B;RDB +N1970=Reader's Digest Association Inc Class A;RDA +N1971=Reading $ Bates Cp;RB +N1972=Realty Income Fund;O +N1973=Realty Refund Tr Sbi;RRF +N1974=Red Lion Hotels Inc;RL +N1975=Red Roof Inns;RRI +N1976=Reebok Intl Ltd;RBK +N1977=Reed Intl ADR;RUK +N1978=Regency Realty Corp;REG +N1979=Reinsurance Group Of America;RGA +N1980=Reliance Steel & Aluminum;RS +N1981=Reliastar Fncl;RLR +N1982=Relience Group Holding;REL +N1983=Renaissance Communications Corp;RRR +N1984=Renaissance Hotel Group;RHG +N1985=Renal Treatment Center;RXT +N1986=Repsol ADR;REP +N1987=Republic Group Inc;RGC +N1988=Republic NY Cp;RNB +N1989=Resource Mortgage Capital Inc;RMR +N1990=Retirement Care Associates;RCA +N1991=Revco D S Inc;RXR +N1992=Revere (Paul) Corp;PRL +N1993=Revlon Inc Cl A;REV +N1994=Rex Stores Corp;RSC +N1995=Rexel Inc;RXL +N1996=Rexene Corp;RXN +N1997=Reynolds & Reynolds Co Class A;REY +N1998=Reynolds Metals Co.;RLM +N1999=Rhoders Inc;RHD +N2000=Rhone Poulenc ADR;RP +N2001=Rhone-Polenc Rorer Inc;RPR +N2002=Rightchoice Managed Care;RIT +N2003=Rite Aid Corp;RAD +N2004=RJR Nabisco Hldg;RN +N2005=RJR Nabisco pf C;RN+C +N2006=RLI Corp;RLI +N2007=RMI Titanium Co;RTI +N2008=Roadmaster Ind Inc;RDM +N2009=Robert Half Intl Inc;RHI +N2010=Robertson (HH) Co.;RHH +N2011=Roc Communities Inc;RCI +N2012=ROC Taiwan Fund;ROC +N2013=Rochester Gas & Electric;RGS +N2014=Rockerfeller Center Prop;RCP +N2015=Rockwell Intl;ROK +N2016=Rodman & Renshaw Cap Grp;RR +N2017=Rogers Communication;RG +N2018=Rohm & Hass Co.;ROH +N2019=Rohr Ind Inc.;RHR +N2020=Rollins Environmental Svcs Inc;REN +N2021=Rollins Inc;ROL +N2022=Rollins Truck Leasing Corp;RLC +N2023=Rouge Steel Co;ROU +N2024=Rouse Co;RSE +N2025=Rowan Companies Inc.;RDC +N2026=Rowe Furniture Cp;ROW +N2027=Royal Appliance Mfg Co;RAM +N2028=Royal Bank of Canada;RY +N2029=Royal Bank Scotland 9.5;RBS+C +N2030=Royal Bank Scotland;RBS+ +N2031=Royal Carribean Cruise Ltd;RCL +N2032=Royal Dutch Petroleum ADR;RD +N2033=Royal Plastics Group Inc;RYG +N2034=Royal PTT Netherland Adr;KPN +N2035=Royce Value Trust Inc;RVT +N2036=RPC Inc;RES +N2037=RPS Realty Tr Sbi;RPS +N2038=RTZ Plc ADR;RTZ +N2039=Rubbermaid Inc;RBD +N2040=Ruby Tuesday Inc;RI +N2041=Ruddick Corp;RDK +N2042=Russ Berrie & Co;RUS +N2043=Russell Cp;RML +N2044=Ryder Systems Inc.;R +N2045=Rykoff Sexton;RYK +N2046=Ryland Group Inc;RYL +N2047=Rymer Co.;RYR +N2048=Sabine Royalty Tr;SBR +N2049=Safeguard Scientific;SFE +N2050=Safety-Kleen Corp;SK +N2051=Safeway Inc;SWY +N2052=Saga Petroleum ADR;SPMB +N2053=Salant Corp;SLT +N2054=Saloman Inc pf D;SB+D +N2055=Salomon Bros WW Inc Fd;SBW +N2056=Salomon Brothers Fund Inc;SBF +N2057=Salomon Brothers High Income Fund;HIF +N2058=Salomon Brothers Inc;SB +N2059=San Anita Rlty Entp;SAR +N2060=San Juan Basin Realty;SJT +N2061=Sanifill Inc;FIL +N2062=Santa Fe Energy Resources Inc;SFR +N2063=Santa Fe Energy Trust Spers;SFF +N2064=Santa Fe Pacific Gold Corp;GLD +N2065=Santa Fe Pacific Pipeline Lp;SFL +N2066=Santa Isabel Sa;ISA +N2067=Santander Overseas Bank Nc;OPR+ +N2068=Sara Lee;SLE +N2069=Saul Centers Inc;BFS +N2070=Savannah Foods & Ind;SFI +N2071=Sbarro Cp;SBA +N2072=SBC Communication;SBC +N2073=Scana Corp;SCG +N2074=Scania Ab Cl A Adr;SCVA +N2075=Scania AB cl B Adr;SCVB +N2076=Schawk Inc Cl A;SGK +N2077=Scheitzer-Mauduit Intl Inc;SWM +N2078=Scherer (R.P.) Cp;SHR +N2079=Schering-Plough Corp.;SGP +N2080=Schlumberger Ltd;SLB +N2081=Schroder Asian Fund;SHF +N2082=Schroeder Sth Africa;SOA +N2083=Schuller Corp;GLS +N2084=Schwab Charles;SCH +N2085=Scientific Atlanta Inc.;SFA +N2086=Scotsman Ind. Inc;SCT +N2087=Scott Liquid Gold;SGD +N2088=Scripps (E.W) Co. Class A;SSP +N2089=Scudder New Asia Fund Inc;SAF +N2090=Scudder New Europe Fund Inc;NEF +N2091=Scudder World Income;SWI +N2092=Sea Containers Cl A;SCRA +N2093=Sea Containers Ltd Class B;SCRB +N2094=Seagram Co. Ltd.;VO +N2095=Seagull Energy Corp;SGO +N2096=Sealed Air Corp;SEE +N2097=Sears Pf;S+A +N2098=Sears Roebuck & Co.;S +N2099=Security Capital Ind;SCN +N2100=Security Capital Pacific Trust;PTR +N2101=Seitel Inc.;SEI +N2102=Seligman Quality Municipal Fund;SQF +N2103=Seligman Select Muni Fund Inc;SEL +N2104=Sensormatic Electronics;SRM +N2105=Sequa Corp Class A;SQAA +N2106=Sequa Corp Class B;SQAB +N2107=Service Corp Intl;SRV +N2108=Service Merchandise;SME +N2109=Servicemaster Lp;SVM +N2110=SGS Thomson Microelectronics;STM +N2111=Shandong Huaneng Power Development ADR;SH +N2112=Shanghai Petrochemical ADR;SHI +N2113=Shaw Ind Inc;SHX +N2114=Shelby Williams Ind;SY +N2115=Shell Transport ADR;SC +N2116=Sherwin Williams Co.;SHW +N2117=Sherwood Group;SHD +N2118=Shoney's Restaurants;SHN +N2119=Shop Ko Stores;SKO +N2120=Showboat Inc;SBO +N2121=Shurgard Storage Centers;SHU +N2122=Sierra Health Services Inc;SIE +N2123=Sierra Pac Res Hldg;SRP +N2124=Sigcorp Inc;SIG +N2125=Signal Apparel Co.;SIA +N2126=Signet Banking Cp;SBK +N2127=Silicon Graphics Inc;SGI +N2128=Simon Property Group;SPG +N2129=Singapore Fund Inc;SGF +N2130=Singer Co;SEW +N2131=Sinter Metal Inc;SNM +N2132=Sizeler Property Invstrs;SIZ +N2133=Sizzler Intl;SZ +N2134=Skyline Corp.;SKY +N2135=SL Industries Inc;SL +N2136=Smart & Final Inc;SMF +N2137=Smith AO Class B;AOS +N2138=Smith Charles Realty Inc;SRW +N2139=Smith Corona;SCO +N2140=Smith Food & Drugs Cl B;SFD +N2141=Smith Intl Inc;SII +N2142=Smithkline Beecham Plc Ads;SBH +N2143=Smucker (JM) Co. Class A;SJMA +N2144=Smucker (JM) Co. Class B;SJMB +N2145=Snap-On Inc;SNA +N2146=Snyder Oil Cp;SNY +N2147=Sociedad Quinica Minera De Chile;SQM +N2148=Sofamor/Danek Group;SDG +N2149=Sola Intl Inc;SOL +N2150=Solectron Cp;SLR +N2151=Sonat Inc.;SNT +N2152=Sonat Offshore Drilling Inc;RIG +N2153=Sonoco Products Co;SON +N2154=Sony Cp ADR;SNE +N2155=Sotheby's Holdings Inc;BID +N2156=Source Capital Inc;SOR +N2157=South Jersey Ind.;SJI +N2158=Southdown Inc;SDW +N2159=Southern Calif Water;SCW +N2160=Southern Co.;SO +N2161=Southern Natl Cp;SNB +N2162=Southern New England Tech;SNG +N2163=Southern Pacific Rail Inc;RSP +N2164=Southern Peru Copper Cp;PCU +N2165=Southern Union Co;SUG +N2166=Southwest Airlines;LUV +N2167=Southwest Gas Corp;SWX +N2168=Southwestern Energy;SWN +N2169=Southwestern Property Trust;SWP +N2170=Southwestern Public Service;SPS +N2171=Sovran Self Storage;SSS +N2172=Spaghetti Warehouse;SWH +N2173=Spain Fund;SNF +N2174=Spartech Cp;SEH +N2175=Sparton Corp;SPA +N2176=Speedway Motorsport;TRK +N2177=Spelling Entertainment;SP +N2178=Sphere Drake Holding Ltd;SD +N2179=Spieker Properties Inc;SPK +N2180=Sport Supply Group Inc;GYM +N2181=Sports & Recreation Inc;WON +N2182=Sports Authority;TSA +N2183=Springs Industries;SMI +N2184=Sprint Corp;FON +N2185=Sprint Cp Exchangbl D;FXN +N2186=SPS Technologies;ST +N2187=SPS Transaction Services Inc;PAY +N2188=SPX Cp;SPW +N2189=St Joe Paper Co;SJP +N2190=St John Knits Inc;SJK +N2191=St Joseph Power & Light;SAJ +N2192=St Paul Companies;SPC +N2193=Standard Commercial Corp;STW +N2194=Standard Federal Bancorp;SFB +N2195=Standard Motor Prod Class A;SMP +N2196=Standard Products Co.;SPD +N2197=Standard-pacific Cp;SPF +N2198=Standex Intl;SXI +N2199=Stanhome Inc;STH +N2200=Stanley Works (the);SWK +N2201=Star Bancorp;STB +N2202=Starret (LS) Co. (The);SCX +N2203=Starter Corp;STA +N2204=Starwood Lodging;HOT +N2205=State Street Boston;STT +N2206=Sterile Concept Holdings;SYS +N2207=Sterling Bancorp;STL +N2208=Sterling Chemical;STX +N2209=Sterling Commerce Inc;SE +N2210=Sterling Electronics;SEC +N2211=Sterling Software Inc;SSW +N2212=Stet Societa Finanziaria Telefonica ADR;STE +N2213=Stewart Information Serv;STC +N2214=Stifel Financial Corp;SF +N2215=Stone & Webster Inc;SW +N2216=Stone Container Corp.;STO +N2217=Stone Energy Corp;SGY +N2218=Stop & Shop Cos;SHP +N2219=Storage Technology;STK +N2220=Storage Trust Realty;SEA +N2221=Storage USA;SUS +N2222=Strategic Global Income Fund Inc;SGL +N2223=Stratus Computer Inc;SRA +N2224=Stride Rite Corp;SRR +N2225=Student Loan Corp;STU +N2226=Student Loan Mtg Assoc;SLM +N2227=Sturm Ruger & Co Inc;RGR +N2228=Suburban Propane Partners;SPH +N2229=Summit Bancorp;SUB +N2230=Summit Properties Inc;SMT +N2231=Sun Co. Inc.;SUN +N2232=Sun Communities Inc;SUI +N2233=Sun Energy Pt Lp Dep;SLP +N2234=Sun Healthcare Group;SHG +N2235=Sun Intl Hotels Ltd;SIH +N2236=Sunamerica Inc;SAI +N2237=Sunbeam Co;SOC +N2238=Suncoast Industries Inc;SN +N2239=Sundstrand Corp;SNS +N2240=Sunrise Medical Inc;SMD +N2241=Sunshine Mining & Refining;SSC +N2242=Sunsource Lp Cl A;SDP +N2243=Sunsource Lp Cl B;SDPB +N2244=SunTrust Bank Inc;STI +N2245=Super Food Services Inc;SFS +N2246=Superior Industries Intl;SUP +N2247=Supervalu Inc;SVU +N2248=Swift Energy;SFY +N2249=Sybron International Corp;SYB +N2250=Symbol Technology;SBL +N2251=Syms Corp;SYM +N2252=Synovus Financial Cp;SNV +N2253=Syratech Corp;SYR +N2254=Sysco Corp;SYY +N2255=Tadiran Ltd;TAD +N2256=Taiwan Equity Fund;TYW +N2257=Taiwan Fund;TWN +N2258=Talbot Inc;TLB +N2259=Tally Industries Inc;TAL +N2260=Tambrands Inc;TMB +N2261=Tandem Computers;TDM +N2262=Tandy Corp.;TAN +N2263=Tandycrafts Inc;TAC +N2264=Tanger Factory Outlet Centers;SKT +N2265=Taubman Centers Inc;TCO +N2266=Taurus Muni CA Holdings Inc;MCF +N2267=Taurus Muni NY Holdings Inc;MNY +N2268=TB Woods Corp;TBW +N2269=TCBY Enterprises Inc;TBY +N2270=TCC Industries;TEL +N2271=TCF Financial;TCB +N2272=TCW Convertible Sec Fund;CVT +N2273=TCW/DW Emerging Mkt Opp Tr;EMO +N2274=TCW/DW Term Trust 2000;TDT +N2275=TCW/DW Term Trust 2003;TMT +N2276=TCW/DW Term Trust 2002;TRM +N2277=TDK Corp;TDK +N2278=Tech-Sym Corp;TSY +N2279=Teckson Associates Rl;RA +N2280=Teco Energy;TE +N2281=Teekay Shipping Cp;TK +N2282=Tejas Gas Cp;TEJ +N2283=Tektronix Inc.;TEK +N2284=Tele Danmark ADR;TLD +N2285=Telecom Argentina Stet-france;TEO +N2286=Telecom Of New Zealand;NZT +N2287=Telecomm Brasileiras Adr;TBR +N2288=Teledyne Inc.;TDY +N2289=Teleflex Inc.;TFX +N2290=Telefonica De Argentina ADR;TAR +N2291=Telefonica De Espana ADR;TEF +N2292=Telefonos De Mexico;TMX +N2293=Telex Chile;TL +N2294=Temple-Inland Inc;TIN +N2295=Templeton China World Fund;TCH +N2296=Templeton Emerg Mkt Appr Fd;TEA +N2297=Templeton Emerg Mkt Inc Fd;TEI +N2298=Templeton Emerging Market Fund;EMF +N2299=Templeton Global Gov't In Tr;TGG +N2300=Templeton Global Income Fund;GIM +N2301=Templeton Russia Fund Inc;TRF +N2302=Templeton Vietnam Oppt Fund;TVF +N2303=Templton Dragon;TDF +N2304=Tenet Healthcare Corp;THC +N2305=Tenneco Inc.;TEN +N2306=Tennessee Valley Auth;TVA +N2307=Teppco Partners Lp;TPP +N2308=Teradyne Inc.;TER +N2309=Terex Cp;TEX +N2310=Terra Industries;TRA +N2311=Terra Nitrogen;TNH +N2312=Terra Nova Holdings Ltd;TNA +N2313=Tesoro Petrolium Corp.;TSO +N2314=Texaco Inc.;TX +N2315=Texaco Pr B;TXC+B +N2316=Texas Industries Inc.;TXI +N2317=Texas Instruments;TXN +N2318=Texas Pacific Land Tr;TPL +N2319=Texas Utility;TXU +N2320=Texfi Ind. Inc;TXF +N2321=Textron Inc.;TXT +N2322=Thackeray Corp;THK +N2323=Thai Capital Fund Inc;TC +N2324=Thai Fund;TTF +N2325=The European Warrant Fund Inc;EWF +N2326=The Indonesia Fund Inc;IF +N2327=Thermo Electron Corp;TMO +N2328=Thomas & Betts Corp.;TNB +N2329=Thomas Ind. Inc;TII +N2330=Thomas Nelson Inc;TNM +N2331=Thor Industries Inc;THO +N2332=Thornburg Mortgage Asset Corp;TMA +N2333=Three 60 Communication;XO +N2334=Three Five Systems Inc;TFS +N2335=Thrifty Payless Holdings Cl B;TPD +N2336=Tidewater Inc;TDW +N2337=Tiffany & Co.;TIF +N2338=TIG Holdings Inc;TIG +N2339=Timberland;TBL +N2340=Time Warner Inc;TWX +N2341=Times Mirror Co;TMC +N2342=Timken Co.;TKR +N2343=TIS Mortgage Investment Co;TIS +N2344=Titan Corp;TTN +N2345=Titan Holdings Inc;TH +N2346=Titan Wheel International;TWI +N2347=TJX Companies Inc;TJX +N2348=Tnp Enterprises Inc;TNP +N2349=Toastmaster Inc;TM +N2350=Todd Shipyards Cp;TOD +N2351=Tokheim Corp;TOK +N2352=Toll Brothers Inc;TOL +N2353=Tomkins Plc ADR;TKS +N2354=Tootsie Roll Ind.;TR +N2355=Torch Energy Royalty;TRU +N2356=Torchmark Corp;TMK +N2357=Toro Co;TTC +N2358=Tosco Corp.;TOS +N2359=Total ADR;TOT +N2360=Total Renal Care Holdings Inc;TRL +N2361=Total System Service Inc;TSS +N2362=Town & Country Trust Sbi;TCT +N2363=Toy Biz;TBZ +N2364=Toys R Us;TOY +N2365=Trans Canada Pipeins Ltd.;TRP +N2366=Trans Technology Corp;TT +N2367=Transamerica Corp.;TA +N2368=Transamerican Income;TAI +N2369=Transatlantic Holdings Inc;TRH +N2370=Transcontinental Realty;TCI +N2371=Transmedia Network;TMN +N2372=Transportadora De Gas Del Sur ADR;TGS +N2373=Transportation Maritima Mexicana ADR;TMM +N2374=Transportation Maritima Mexicana ADR A;TMMA +N2375=Transpro Inc;TPR +N2376=Travelers Group Inc;TRV +N2377=Travelers/Aetna Property Casualty;TAP +N2378=TRC Inc;TRR +N2379=Tredegar Industries Inc;TG +N2380=Tremont Cp;TRE +N2381=Tri-Continental Corp.;TY +N2382=Triarc Cos;TRY +N2383=Tribune Co;TRB +N2384=Trigen Energy Cp;TGN +N2385=Trimas Cp;TMS +N2386=Trinet Corporate Realty Trust;TRI +N2387=Trinity Ind. Inc;TRN +N2388=Trinova;TNV +N2389=Triton Energy Corp.;OIL +N2390=Trizec Corp;TZC +N2391=True North Communication;TNO +N2392=Trump Hotel & Casino;DJT +N2393=TRW Inc.;TRW +N2394=Tucson Elec Pwr.;TEP +N2395=Tultex Corp;TTX +N2396=Turkey Fund;TKF +N2397=TVX Gold Inc;TVX +N2398=Twentieth Century Ind;TW +N2399=Twin Disc Inc;TDI +N2400=Tyco International Ltd;TYC +N2401=Tyco Toys Inc;TTI +N2402=Tyler Corp;TYL +N2403=U S Filter Corp;USF +N2404=U S Surgical Corp;USS +N2405=U.S. Home Corp;UH +N2406=UAL Corp;UAL +N2407=Ucar Intl;UCR +N2408=UGI Corp;UGI +N2409=Ultramar Corp;ULR +N2410=UNC Resources;UNC +N2411=Unicom Corp;UCM +N2412=Unifi Inc;UFI +N2413=Unifirst Corp;UNF +N2414=Unilever Ltd Amer Shr;UL +N2415=Unilever Ltd NV;UN +N2416=Union Camp;UCC +N2417=Union Carbide Corp.;UK +N2418=Union Corporation;UCO +N2419=Union Electric;UEP +N2420=Union Pacific;UNP +N2421=Union Pacific Resources Group;UPR +N2422=Union Planters Corp;UPC +N2423=Union Texas Petroleum;UTH +N2424=Unionamerica Holdings Adr;UA +N2425=Unisys Corp.;UIS +N2426=Unisys Cp Pf Series A;UIS+A +N2427=Unit Corp;UNT +N2428=United Amer Healthcare Cp;UAH +N2429=United Asset Management;UAM +N2430=United Dominion;UDI +N2431=United Dominion Realty Trust;UDR +N2432=United Healthcare;UNH +N2433=United Illuminating;UIL +N2434=United Ind Corp;UIC +N2435=United Kingdom Fund Inc;UKM +N2436=United Meridian Cp;UMC +N2437=United Park City Mines;UPK +N2438=United Technologies;UTX +N2439=United Transnet Inc;UT +N2440=United Water Res Inc;UWR +N2441=United Wisconsin Services Inc;UWZ +N2442=Unitrode Corp;UTR +N2443=Univar Corp;UVX +N2444=Universal Foods Cp;UFC +N2445=Universal Health Realty Trust;UHT +N2446=Universal Hlth Serv Inc Class B;UHS +N2447=Universal Leaf Tobacco;UVV +N2448=Uno Restaurants Corp;UNO +N2449=Unocal Co;UCL +N2450=UNUM (Union Mutual);UNM +N2451=Unum Cp 8.80pc Mids;UND +N2452=Urban Shopping Centers;URB +N2453=URS Cp;URS +N2454=US 1 Industries;USO +N2455=US Can Corp;USC +N2456=US Indust Inc;USN +N2457=US Restaurants;USV +N2458=US West;USW +N2459=US West Media Group;UMG +N2460=USA Waste Services Inc;UW +N2461=USAir Inc.;U +N2462=USF&G;FG +N2463=USG Cp;USG +N2464=USLife Corp.;USH +N2465=Uslife Income Fund;UIF +N2466=UST Inc;UST +N2467=USX Delhi Group;DGP +N2468=USX Marathon Oil Co;MRO +N2469=USX US Steel;X +N2470=Utilicorp United Inc;UCU +N2471=Valassis Communication Inc;VCI +N2472=Valero Energy Corp.;VLO +N2473=Valhi Corp.;VHI +N2474=Valley Natl Bancorp;VLY +N2475=Valspar Cp;VAL +N2476=Value City Department Stores;VCD +N2477=Value Health Inc;VH +N2478=Value Proprty Trust;VLP +N2479=Van Kamp Ca Muni Income;VCV +N2480=Van Kamp Insurance Muni Fd;VIM +N2481=Van Kamp Investment Group;VGM +N2482=Van Kamp Ny Value Muni Income;VNV +N2483=Van Kampen Amer Cap Cv Sec Inc;ACS +N2484=Van Kampen Amer Capital Bond Fund;ACB +N2485=Van Kampen Amer Capital Income Trust;ACD +N2486=Van Kampen Ltd;VLT +N2487=Van Kampen Mer Adv MI Muni;VKA +N2488=Van Kampen Mer Adv PA Muni;VAP +N2489=Van Kampen Mer CA Qual Muni;VQC +N2490=Van Kampen Mer FL Qua Muni;VFM +N2491=Van Kampen Mer Muni Opp Tr II;VOT +N2492=Van Kampen Mer PA Val Mun Incom;VPV +N2493=Van Kampen Mer Strag Sec Muni;VKS +N2494=Van Kampen Mer Value Inc Tr;VKV +N2495=Van Kampen Merit Municipal;VMT +N2496=Van Kampen Merritt Income Fund;VIT +N2497=Van Kampen Merritt Inv Grade Muni;VIG +N2498=Van Kampen Merritt IG Fl;VTF +N2499=Van Kampen Merritt IG NJ;VTJ +N2500=Van Kampen Merritt IG NY;VTN +N2501=Van Kampen Merritt IG PA;VTP +N2502=Van Kampen Muni Opportunity Trust;VMO +N2503=Van Kampen NY Quality;VNM +N2504=Van Kampen Ohio Quality;VOQ +N2505=Van Kampen Trust Investment Cal Muni;VIC +N2506=Van Kempen Merritt Municip;VKQ +N2507=Van Kempen Merritt Penn Quality Municipa;VPQ +N2508=Varco Intl Inc;VRC +N2509=Varian Associates;VAR +N2510=Varity Corp;VAT +N2511=Vastar Resources Inc;VRI +N2512=Vencor Inc;VC +N2513=Venture Stores;VEN +N2514=Venture Stores Inc Prf;VEN+ +N2515=Verifone Inc;VFI +N2516=Vesta Insurance Group Inc;VTA +N2517=Vestaur Securities Inc;VES +N2518=VF Cp;VFC +N2519=Vina Concha Y Toro;VCO +N2520=Vintage Petroleum Inc;VPI +N2521=Vishay Intertechnology;VSH +N2522=Vitro Sociedad Anonima ADR;VTO +N2523=Vivra Inc;V +N2524=Vms Mortgage Investment;VMG +N2525=Vodafone Group;VOD +N2526=Volunteer Capital Corp;VCC +N2527=Vons Companies Inc;VON +N2528=Vornado Inc;VNO +N2529=Vulcan Materials Co.;VMC +N2530=Waban Inc;WBN +N2531=Wabash Natl Cp;WNC +N2532=Wachovia Corp;WB +N2533=Wackenhut Corp;WAK +N2534=Wackenhut Correction;WHC +N2535=Wackenhut Cp Cl B;WAKB +N2536=Wahlco Environment Systems;WAL +N2537=Wainoco Co.;WOL +N2538=Wal-Mart Stores Inc.;WMT +N2539=Walden Residential Properties;WDN +N2540=Walgreen Co;WAG +N2541=Wallace Computer Svcs;WCS +N2542=Warnaco Group Inc Class A;WAC +N2543=Warner Lambert Co.;WLA +N2544=Washington Construction Group;WAS +N2545=Washington Energy Co;WEG +N2546=Washington Gas Light;WGL +N2547=Washington Homes;WHI +N2548=Washington Natl Corp;WNT +N2549=Washington Post Co;WPO +N2550=Washington Water Power;WWP +N2551=Waste Management Intl ADR;WME +N2552=Waterhouse Investor Serv Inc;WHO +N2553=Waters Corp;WAT +N2554=Watkins Johnson Co.;WJ +N2555=Watsco Inc Cl A;WSO +N2556=Watts Indus Inc Class A;WTS +N2557=Waxman Industries Inc;WAX +N2558=WCI Steel Inc;WRN +N2559=Weatherford Enterra Inc;WII +N2560=Webb (Del E) Corp;WBB +N2561=Weeks Corp;WKS +N2562=Weingarten Realty Inc;WRI +N2563=Weirton Steel Corp;WS +N2564=Weis Markets Inc;WMK +N2565=Wellman Inc;WLM +N2566=Wellpoint Health Networks Inc;WLP +N2567=Wells Fargo & Co;WFC +N2568=Wellsford Residentl P;WRP +N2569=Wendy's Intl.;WEN +N2570=West Coast Energy Inc;WE +N2571=West Company Inc;WST +N2572=West Penn Pwr Co Quid;WQP +N2573=Westbridge Capital Cp;WBC +N2574=Westcorp;WES +N2575=Western Atlas Inc;WAI +N2576=Western Digital Corp;WDC +N2577=Western Gas Resources Inc;WGR +N2578=Western National Corp;WNH +N2579=Western Resources;WR +N2580=Western Waste Industries;WW +N2581=Westinghouse Air Brake Co;WAB +N2582=Westinghouse Electric;WX +N2583=Westmoreland Coal;WCX +N2584=Westpac Banking Corp;WBK +N2585=Westvaco Corp.;W +N2586=Weyerhaeuser Co.;WY +N2587=Wheelabrator Technologies Inc;WTI +N2588=Whirlpool;WHR +N2589=Whitehall Corp;WHT +N2590=Whitman Corp;WH +N2591=Whittaker Corp.;WKR +N2592=WHX Corp;WHX +N2593=Wicor Inc;WIC +N2594=Williams Co.;WMB +N2595=Williams Coal Seam Gas Royalty Trust;WTU +N2596=Willis Corroon Plc ADR;WCG +N2597=Wilshire Oil Co Tx;WOC +N2598=Windmere;WND +N2599=Winn-Dixie Stores Inc.;WIN +N2600=Winnebago Inds Inc;WGO +N2601=Wisconsin Elec.;WEC +N2602=Wiser Oil Co;WZR +N2603=Witco Corp;WIT +N2604=WMC Ltd ADR;WMC +N2605=Wms Industries;WMS +N2606=WMX Inc.;WMX +N2607=Wolverine Tube Inc;WLV +N2608=Wolverine Worldwide;WWW +N2609=Woolworth Co.;Z +N2610=World Airways Inc;WOA +N2611=World Color Press Inc;WRC +N2612=World Fuel Services;INT +N2613=Worldtex Inc;WTX +N2614=Worldwide Dollarvest;WDV +N2615=Worldwide Value Fund;VLU +N2616=WPL Holding;WPH +N2617=WPS Resources;WPS +N2618=Wrigley (Wm Jr) Co.;WWY +N2619=Wyle Electronics;WYL +N2620=Wynn's Intl;WN +N2621=Xerox Corp.;XRX +N2622=Xtra Corp;XTR +N2623=Yankee Energy Systems Inc;YES +N2624=York Intl Corp;YRK +N2625=YPF Sociedad Anonima ADR;YPF +N2626=Z-Seven Fund Inc;ZSE +N2627=Zapata Corp.;ZAP +N2628=Zeigler Coal Holdings;ZEI +N2629=Zemex Corp;ZMX +N2630=Zeneca Group ADR;ZEN +N2631=Zenith Electronics Cp;ZE +N2632=Zenith Income Fund;ZIF +N2633=Zenith Natl Ins Corp;ZNT +N2634=Zero Co.;ZRO +N2635=Zilog Inc;ZLG +N2636=Zurich Reinsurance Centre Holding;ZRC +N2637=Zurn Industries;ZRN +N2638=Zweig Fund Inc.;ZF +N2639=Zweig Total Return Fund;ZTR + +[AMEX] +N1=Ackerley Commun Inc;AK +N2=Acme United Cp;ACU +N3=Action Ind Inc;ACZ +N4=Adam Resources & Energy Inc;AE +N5=Advanced Financial;AVF +N6=Advanced Magnetics Inc;AVM +N7=Advanced Medical Inc;AMA +N8=Advanced Photonix Inc Class A;API +N9=Advanced Therapeutic Systems;ATH +N10=Aerosonics Cp;AIM +N11=Aim Strategic Income Fund Inc;AST +N12=Air & Water Technology Cp Class A;AWT +N13=Air Methods Corp;AIRM +N14=Aircoa Hotel Partners;AHT +N15=Alamco Inc;AXO +N16=Alba Waldensian Inc;AWS +N17=Alcoa Pf;AA+ +N18=Alfin Inc;AFN +N19=Allied Digital Tech;ADT +N20=Allied Research Cp;ALR +N21=Allou Health & Beauty Cl A;ALU +N22=Alpha Ind;AHA +N23=Alpine Group Inc;AGI +N24=AMC Entertainment Inc;AEN +N25=Amdahl;AMH +N26=Ame Insured Mtg Inv 84;AIA +N27=Amer Bank Of Connecticut;BKC +N28=Amer Biltrite Inc;ABL +N29=Amer Body Armor & Equipment;ABE +N30=Amer Explor Co;AX +N31=Amer Insured Mtg Inv 85;AII +N32=Amer Insured Mtg Inv 86;AIJ +N33=Amer Insured Mtg Inv 88;AIK +N34=Amer Israeli Paper Mills;AIP +N35=Amer List Cp;AMZ +N36=Amer Paging Inc;APP +N37=Amer Real Estate Investment;REA +N38=Amer Restaurants Partners LP;RMC +N39=Amer Science Engineering;ASE +N40=Amer Shared Hospital Services;AMS +N41=Amer Technical Ceramics Cp;AMK +N42=America First Prep Fund 2 Lp;PF +N43=Ampal Amer Israel Cl A;AISA +N44=Amwest Ins Gr Inc;AMW +N45=Andrea Electronics Cp;AND +N46=Angeles Mortgage Inv Tr;ANM +N47=Angeles Partcp Mtge Tr;APT +N48=Anuhco Inc;ANU +N49=Aprogenex Inc;APG +N50=Arc Intl Inc;ATV +N51=Arizona Land Incm Cp Cl A;AZL +N52=Arrhythia Research Technology;HRT +N53=Arrow Automotive Ind Inc;AI +N54=ASR Investments Corp;ASR +N55=Assisted Living Concepts Inc;ALF +N56=Astrotech Intl Cp;AIX +N57=AT Plastics Inc;ATJ +N58=Atari Corp;ATC +N59=Atlantis Plastics Inc Cl A;AGH +N60=Audiovox Cp Cl A;VOX +N61=Audits & Surveys Inc;ASW +N62=Aurora Electronics Inc;AUR +N63=Aviva Petroleum;AVV +N64=Azco Mining;AZC +N65=B & H Maritime Carriers Ltd;BHM +N66=B & H Ocean Carriers Ltd;BHO +N67=B A T Industries ADR;BTI +N68=B Stearns CUBS;KBB +N69=Badger Meter Inc;BMI +N70=Baker (Michael) Cp;BKR +N71=Balchem Cp;BCP +N72=Baldwin Technology Co;BLD +N73=Bancroft Convertible Fund Inc;BCV +N74=Banister Foundation Inc;BAN +N75=Bank Of Southington;BSO +N76=Bankers Tr NY Conv;BND +N77=Bankers Trust Dep;BPR +N78=Bankers Trust Shrs Pf;BPB +N79=Banyan Hotel Inv Fd;VHT +N80=Barnwell Ind;BRN +N81=Barr Laboratories Inc;BRL +N82=Barrister Information Cp;BIS +N83=Bay Meadows Operating Co;CJ +N84=Bayou Steel Cp Cl A;BYX +N85=Bear Stearns MRK Chip;MCP +N86=Beard Oil Co;BOC +N87=Bema Gold Corp;BGO +N88=Benchmark Electronics Inc;BHE +N89=Bentley Pharmaceuticals Inc;BNT +N90=Bergstrom Capital Cp;BEM +N91=Besicorp Group Inc;BGI +N92=Bethlehem Cp;BET +N93=BHC Communications Inc Class A;BHC +N94=Binks Mfg Co;BIN +N95=Bio-Rad Laboratories Inc Class A;BIOA +N96=Bio-Rad Labs Cl B;BIOB +N97=Biscayne Apparel;BHA +N98=Blackrock Broad Inv Gr 09 Term;BCT +N99=Blackrock CA Inv Qual Muni Tr;RAA +N100=Blackrock FL Inv Qual Muni Tr;RFA +N101=Blackrock NJ Inv Qual Muni Tr;RNJ +N102=Blackrock NY Inv Qual Muni Tr;RNY +N103=Blair Cp;BL +N104=Blessings Cp;BCO +N105=Blonder Tongue Laboratories;BDR +N106=Boddie Noell Prop;BNP +N107=Bogen Comm Intl Inc;BGN +N108=Bostonfed Bancorp;BFD +N109=Bowl America Inc Cl A;BWLA +N110=Bowmar Instrument Cp;BOM +N111=Bowne & Co Inc;BNE +N112=Brandon Systems Corp;BRA +N113=Brandywine Realty Trust;BDN +N114=Brascan Ltd.;BRSA +N115=Buffton Cp;BFX +N116=Cabletel Communication;TTV +N117=Cablevision Sys Cp Cl A;CVC +N118=Cagles Inc Cl A;CGLA +N119=Calprop Cp;CPP +N120=Calton Inc;CN +N121=Cambrex Cp;CBM +N122=Cancer Treatment Hldgs Inc;CTH +N123=Capital Realty Tax Ex LP I;CRA +N124=Capital Realty Tax Ex LP II;CRB +N125=Capital Realty Tax Ex LP III;CRL +N126=Carmel Container Sys Ord;KML +N127=Castle A M & Co;CAS +N128=Castle Convertible Fund Inc;CVF +N129=Cavalier Homes Inc;CAV +N130=Cdn Marconi Co;CMW +N131=Cdn Occidental Pet;CXY +N132=CE Franklin Ltd;CFK +N133=CEC Resources;CGS +N134=Centennial Technologies;CTN +N135=Centerpoint Properties Corp;CNT +N136=Central Fund Of Can Class A;CEF +N137=Central Securities;CET +N138=CFX Corp;CFX +N139=Chad Therapeutics;CTU +N140=Champion Healthcare Cp;CHC +N141=Chase Corp;CCF +N142=Chesapeake Biological Laboratories;PHD +N143=Cheyenne Software Inc;CYE +N144=Chicago Rivet & Machine Co;CVR +N145=Chieftain Intl Inc;CID +N146=CIM High Yield Securities;CIM +N147=Citadel Holding Cp;CDL +N148=Citisave Financial Cp;CZF +N149=Coast Distrib System;CRV +N150=Coastal Caribbean Oils;CCO +N151=Cognitronics Cp;CGN +N152=Cohen & Steers Reality Income Fund;RIF +N153=Columbia Laboratories Inc;COB +N154=Columbus Energy Corp;EGY +N155=Comforce Corp;CFS +N156=Cominco Ltd;CLT +N157=Commercial Assets Inc;CAX +N158=Competitve Technologies;CTT +N159=Comptek Research;CTK +N160=Computrac Inc;LLB +N161=Comsouth Bancshares;CSB +N162=Concord Fabrics Inc Cl A;CIS +N163=Concord Fabrics Inc Cl B;CISB +N164=Consolidated Tomako Land;CTO +N165=Contl Materials Cp;CUO +N166=Convest Energy Cp;COV +N167=Copley Prop Inc;COP +N168=Cornerstone Bank;CBN +N169=Cornerstone Natural Gas Inc;CGA +N170=Corpus Christi Bancshares;CTZ +N171=Courtaulds Plc ADR;COU +N172=Creative Computer Application;CAP +N173=Cross (AT) Co Class A;ATXA +N174=Crowley Milner & Co;COM +N175=Crown Central Pet Cl A;CNPA +N176=Crown Central Pet Cl B;CNPB +N177=Crown Laboratories;CLL +N178=Cruise Amer Inc;RVR +N179=Crystal Oil Co;COR +N180=CST Entertainment Inc;CLR +N181=Cubic Corp;CUB +N182=Customedix Cp;CUS +N183=CVB Financial Cp;CVB +N184=Cycomm Intl;CYI +N185=Dakota Mining;DKT +N186=Dallas Gold & Silver;DLS +N187=Danielson Holding Cp;DHC +N188=Datametrics Cp;DC +N189=Dataram Cp;DTM +N190=Daxor Cp;DXR +N191=Dayton Mining Cp;DAY +N192=Decorator Ind Inc;DII +N193=Del Global Tech Corp;DEL +N194=Del Laboratories Inc;DLI +N195=Denamerica Corp;DEN +N196=Devon Energy Cp;DVN +N197=Dewolfe Co;DWL +N198=DI Industries;DRL +N199=Dia Met Minerals Ltd Cl A;DMMA +N200=Dia Met Minerals Ltd Cl B;DMMB +N201=Diagnostic/Retrieval Systems;DRS +N202=Digicon Inc;DGC +N203=Digital Communication;DCT +N204=Dimark Inc;DMK +N205=Diodes Inc;DIO +N206=Disc Graphics Inc;DGI +N207=Dixon Ticonderoga Co;DXT +N208=Donnelly Cp Cl A;DON +N209=DRCA Medical Cp;DRC +N210=Drew Ind Inc;DW +N211=Dreyfus Cal Muni Incm;DCM +N212=Dreyfus Muni Income Trust;DMF +N213=Dreyfus NY Muni Income Fund;DNM +N214=Driver Harris Co;DRH +N215=Ducommun Inc;DCO +N216=Duplex Products Inc;DPX +N217=Dycam Inc;DYC +N218=E-Z Serve Cp;EZS +N219=Eastern Co;EML +N220=Echo Bay Mines;ECO +N221=Ecology & Environment Inc Cl A;EEI +N222=Edisto Resources Cp;EDT +N223=Editek Inc;EDI +N224=Eldorado Bancorp;ELB +N225=Electrochemical Ind Frutarom;EIF +N226=Ellsworth Cv Growth & Income Fund;ECF +N227=Elsinore Cp;ELS +N228=Emeritus Corp;ESC +N229=Emerson Radio;MSN +N230=Empire Of Carolina Inc;EMP +N231=Encore Marketing International;EMI +N232=Engex Inc;EGX +N233=Environmental Tectonics Cp;ETC +N234=Enzo Biochem Inc;ENZ +N235=Epitope Inc;EPT +N236=Equity Income Fund;ATF +N237=Equus II;EQS +N238=Espey Mfg & Electronics;ESP +N239=Essex Bancorp Inc;ESX +N240=ETS International Inc;ETS +N241=ETZ Lavud Cl A;ETZA +N242=ETZ Lavud Ltd Ord;ETZ +N243=Everest & Jennings Intl Inc;EJ +N244=EXX Inc Cl B;EXXB +N245=EXX Inc Class A;EXXA +N246=Fab Ind Inc;FIT +N247=Falcon Cable Systems Co;FAL +N248=Falmouth Co - Operative Bank;FCB +N249=Female Health Co;FHC +N250=FFP Partners Lp;FFP +N251=Fibreboard Cp;FBD +N252=Fina Inc Cl A;FI +N253=Financial Federal Corp;FIF +N254=First Australia Fund;IAF +N255=First Australian Prime Inc.;FAX +N256=First Central Finan Cp;FCC +N257=First Empire State Cp;FES +N258=First Iberian Fund Inc;IBF +N259=First Natl Bankshares;FNH +N260=First Republic Bancorp;FRC +N261=First West Virg Bancorp;FWV +N262=Flanigans Enterprises;BDL +N263=Florida Public Utilities Co;FPU +N264=Florida Rock Ind;FRK +N265=Foodarama Supermarkets;FSM +N266=Forest City Enter Cl A;FCEA +N267=Forest City Enter Cl B;FCEB +N268=Forest Lab Inc.;FRX +N269=Fortune Petroleum Corp;FPX +N270=Forum Retirement Lp;FRL +N271=Fountain Powerboat Indus Inc;FPI +N272=FPA Cp;FPO +N273=Franklin Advantage Re;FAD +N274=Franklin Hldg Cp;FKL +N275=Franklin Real Estate;FIN +N276=Franklin Select RE Fd;FSN +N277=Frequency Electronics;FEI +N278=Fresenius USA Inc;FRN +N279=Friedman Ind;FRD +N280=Frischs Restaurants;FRS +N281=Frontiers Adjuster Of America;FAJ +N282=Fuqua Enterprise;FQE +N283=GA Financial Inc;GAF +N284=Gainsco Inc;GNA +N285=Galaxy Cablevision L P;GTV +N286=Gamma Biologicals;GBL +N287=Garan Inc;GAN +N288=Gaylord Container Cp;GCR +N289=Gelman Sciences Inc;GSC +N290=Gen Automation Inc;GA +N291=Gen Employment Enter;JOB +N292=Gen Microwave Cp;GMW +N293=General Kinetics;GKI +N294=Genovese Drug Stores Inc Cl A;GDXA +N295=Giant Food Class A;GFSA +N296=Glacier Water Services Inc;HOO +N297=Glatfelter P H Co;GLT +N298=Global Ocean Carriers Ltd;GLO +N299=Globalink Inc;GNK +N300=Go-Video Inc;VCR +N301=Golden Star Resources Ltd;GSR +N302=Goldfield Cp;GV +N303=Goldwyn (Samuel) Co;SG +N304=Gorman Rupp Co;GRC +N305=Graham Cp;GHM +N306=Graham Field Health Prod;GFI +N307=Granges Inc;GXL +N308=Greenbriar Corp;GBR +N309=Greenwich Street Cal Muni Fd;GCM +N310=Greyhound Lines Inc;BUS +N311=Griffin Gaming & Entertainment;GGE +N312=GST Telecommunication;GST +N313=Gull Laboratories Inc;GUL +N314=Gundle Slt Environ Sys Inc;GUN +N315=Haagen (Alexander) Properties Inc;ACH +N316=Halifax Cp;HX +N317=Hallmark Financial Sv;HAF +N318=Hallwood Energy Partners;HEP +N319=Hallwood Energy Partners class C;HEPC +N320=Hallwood Rlty Partners L P;HRY +N321=Halsey Drug Co Inc;HDG +N322=Hampton Ind Inc;HAI +N323=Hanger Orthopedic Group;HGR +N324=Hanover Direct;HNV +N325=Harken Energy Cp;HEC +N326=Harlyn Products Inc;HRN +N327=Harolds Stores Inc;HLD +N328=Hasbro;HAS +N329=Hastings Mfg;HMF +N330=Hawaiian Airlines;HA +N331=Health Chem Cp;HCH +N332=Health Professionals Inc;HPI +N333=Healthy Planet Products;HPP +N334=Heartland Partners L P;HTL +N335=Hearx Ltd;EAR +N336=Heico Cp;HEI +N337=Hein Werner Cp;HNW +N338=Heist (CH) Cp;HST +N339=Helionetics Inc;ZAPP +N340=Helm Resources Inc;HHH +N341=Helmstar Group;HLM +N342=Hemlo Gold Mines Inc;HEM +N343=Heritage Media Cp Cl A;HTG +N344=Hi Shear Tech Cp;HSR +N345=Highlander Income Fund;HLA +N346=HMG/Courtland Prop In;HMG +N347=Holco Mtg Accep Cp-i;HOLA +N348=Holly Cp;HOC +N349=Hondo Oil & Gas Co;HOG +N350=Hooper Holmes Inc;HH +N351=Horizon Mental Health Mngt;HMH +N352=Host Funding;HFD +N353=Houston Biotechnology;HBI +N354=Hovnanian Enterprises Inc;HOV +N355=Howell Ind;HOW +N356=Hudson General Cp;HGC +N357=Hungarian Telephone;HTC +N358=Identix Inc;IDX +N359=IGI Inc;IG +N360=Imperial Credit Mortgage;IMH +N361=Imperial Holly Group;IHK +N362=Imperial Oil Ltd.;IMO +N363=Income Opport Rea Inv;IOT +N364=Incstar Cp;ISR +N365=Independent Bankshares;IBK +N366=Inefficient-Market Fund Inc;IMF +N367=Instron Cp;ISN +N368=Int'l Lottery Inc;ILI +N369=Intelcom Group Inc;ICG +N370=Intelligent Controls;ITC +N371=Intelligent Systems;INS +N372=Inter-City Products Cp;IPR +N373=Interchange Finan Serv Cp;ISB +N374=Interdigital Communications Corp;IDC +N375=Interline Resources Corp;IRC +N376=Intermagnetics Gen Cp;IMG +N377=Interstate General Cl A Ut Lp;IGC +N378=Intersystems Inc;II +N379=Intertape Polymer Group Inc;ITP +N380=Intl Thoroughbred Brdrs;ITB +N381=Investors Insurance Group Inc;IIG +N382=Ion Laser Technology Inc;ILT +N383=Iriec;IRI +N384=IVAX Cp;IVX +N385=Jaclyn Inc.;JLN +N386=Jalate Ltd;JLT +N387=Jan Bell Marketing;JBM +N388=Jetronic Ind;JET +N389=Jones Intercable Inv Cl A;JTV +N390=Joule Inc;JOL +N391=Kankakee Bancorp Se;KNK +N392=Katz Media Group;KTZ +N393=KBK Capital Cp;KBK +N394=Keane Inc;KEA +N395=Kentucky First Bancorp;KYF +N396=Kenwin Shops Inc;KWN +N397=Key Energy Group Inc;KEG +N398=Keystone Heritage Group;KHG +N399=KFX Inc;KFX +N400=Killearn Properties Inc;KPI +N401=Kinark Cp;KIN +N402=Kirby Cp;KEX +N403=Kit Mfg;KIT +N404=Kleer Vu Ind;KVU +N405=Knogo N Amer Corp;KNA +N406=Koger Equity;KE +N407=KV Pharmaceutical Class B;KVB +N408=KV Pharmaceutical Class A;KVA +N409=Labarge Inc;LB +N410=Lancer Cp;LAN +N411=Landauer Inc;LDR +N412=Laser Indus Ltd;LAS +N413=Laser Tech;LSR +N414=Lazare Kaplan Intl Inc;LKI +N415=Leather Factory;TLF +N416=Lehman Bro Hld Amgen;AYN +N417=Lehman Bro Region Bk;BKG +N418=Lehman Bros Hld Glo Suns 2000;SXT +N419=Lehman Bros Hldngs MICN Elks;MUY +N420=Lillian Vernon Cp;LVC +N421=Littlefield Adams & Co;LFA +N422=Lumex Inc;LUM +N423=Luxtec Cp;LXU +N424=LXR Biotechnology Inc;LXR +N425=Lynch Cp;LGL +N426=M C Shipping Inc;MCX +N427=M Stanley GT PERQS 97;IGS +N428=M Stanley TMX PERQS;MXT +N429=MacNeal Schwendler Cp;MNS +N430=Magellan Health Services;MGL +N431=Magnum Petroleum Inc;MPM +N432=MAI Systems Inc;NOW +N433=Maine Public Serv;MAP +N434=Marlton Technologies Inc;MTY +N435=Massachusetts H&E Tru;MHE +N436=Matec Cp;MXC +N437=Maxxam Inc;MXM +N438=McRae Ind Cl A;MRIA +N439=McRae Ind Cl B;MRIB +N440=Mdc Corp;MDQ +N441=Measurement Specialties Inc;MSS +N442=Medco Research Inc;MRE +N443=Medeva Plc Ads;MDV +N444=Media General Cl A;MEGA +N445=Media Logic Inc;TST +N446=Medicore Inc;MDK +N447=Mediq Inc;MED +N448=Medquist Inc;MBS +N449=Mem Co;MEM +N450=Mental Health Management Inc;MHM +N451=Merchants Group Inc;MGP +N452=Mercury Air Group Inc;MAX +N453=Meridian Point Rlty 8;MPH +N454=Merrimac Ind Inc;MRM +N455=Met-Pro Cp;MPR +N456=Metromedia Intl Group;MMG +N457=Metropolitan Realty Cp;MET +N458=Michael Anthony Jewelers;MAJ +N459=Microtel Intl Inc;MOL +N460=Mid America Bancorp;MAB +N461=Mid Atlantic Realty Trust Sbi;MRR +N462=Middleby Cp;MIDD +N463=Midland Co;MLA +N464=Midsouth Bancorp Inc;MSL +N465=Milwaukee Land Inc;MWK +N466=Minnesota Mun Term Tr;MNB +N467=Minnesota Muni Inc Port;MXA +N468=Mission West Properties;MSW +N469=Moog Inc Cl B;MOGB +N470=Moog Inc Class A;MOGA +N471=Moore Medical Cp;MMD +N472=Morgan Group Class A;MG +N473=Morgan Stanley CSCO;XPC +N474=Morgans Foods Inc;MR +N475=Morrison Fresh Cooking Inc;MFC +N476=Movie Star Inc;MSI +N477=MSR Exploration Ltd;MSR +N478=Muniinsured Fund Inc;MIF +N479=Munivest Fund Inc;MVF +N480=Muniyield AZ Fd;MZA +N481=Muniyield Insured Fund;MYI +N482=Myers Ind Inc;MYE +N483=N Amer Vaccine Inc;NVX +N484=N Y Tax Exempt Incm Fd;XTX +N485=Nabors Industries Inc;NBR +N486=Nantucket Ind Inc;NAN +N487=National Bancshares Of Texas;NBT +N488=Natl Beverage Corp;FIZ +N489=Natl Gas & Oil Cp;NLG +N490=Natl Healthcare Lp;NHC +N491=Natl Patent Deve Cp;NPD +N492=Natl Realty Lp;NLP +N493=Natural Alternatives Intl;NAI +N494=New Iberian Bancorp;NIB +N495=New Mexico & Arizona Land;NZ +N496=New York Times Class A;NYTA +N497=NFC Plc;NFC +N498=Norex America Inc;NXA +N499=Northbay Financial Cp;NBF +N500=Northern Technologies Intl;NTI +N501=Novavax Inc;NOX +N502=NTN Communication;NTN +N503=Numac Energy Inc;NMC +N504=Nuveen CA Premium Ins Muni Fd;NCU +N505=Nuveen GA Premium Ins Muni Fd;NPG +N506=Nuveen MO Premium Ins Muni fd;NOM +N507=Nuveen WA Premium Ins Muni Fd;NPW +N508=NV Ryan Homes;NVR +N509=O Okiep Copper ADR;OKP +N510=O Sullivan Cp;OSL +N511=Ohio Art Co;OAR +N512=OMI Corp;OMM +N513=Omni Multimedia Group;OMG +N514=Oncor Inc;ONC +N515=Oncormed Inc;ONM +N516=One Liberty Prop;OLP +N517=Organogenesis Inc;ORG +N518=Oriole Homes Cp Cl A;OHCA +N519=Oriole Homes Cp Cl B;OHCB +N520=Oshman Sporting Goods;OSH +N521=Pacific Gateway Property Inc;PGP +N522=Pacific Gulf Properties;PAG +N523=Page America Group Inc;PGG +N524=Paine Webber Grp S&P 400;SIS +N525=Pamida Hldgs Cp;PAM +N526=Park Natl Corp;PRK +N527=Partners Preferred Yield;PYA +N528=Partners Preferred Yield II;PYB +N529=Partners Preferred Yield III;PYC +N530=Paxson Communication;PXN +N531=PC Quote;PQT +N532=Pegasus Gold Inc;PGU +N533=Penn Engineering & Mfg Cp;PNN +N534=Penn Real Estate Inv Tr Sbi;PEI +N535=Penobscot Shoe Co;PSO +N536=Perini Cp;PCR +N537=Peters (JM) Co;CPH +N538=Phoenix Network Inc;PHX +N539=Phoenix Resources Cos;PHN +N540=Pico Products Inc;PPI +N541=Piedmont Bancorp;PDB +N542=Pinnacle Bank;PLE +N543=Pitts & West Va R R Sbi;PW +N544=Pitts De Moines Inc;PDM +N545=Pittway Cl A;PRYA +N546=Pittway Cp;PRY +N547=Plains Resources Inc;PLX +N548=PLC Systems Inc;PLC +N549=PLM Intl Inc;PLM +N550=Plymouth Rubber Cl A;PLRA +N551=Plymouth Rubber Inc Cl A;PLRB +N552=PMC Capital Inc;PMC +N553=PMC Commercial Trust;PCC +N554=Poly Medical Industries;PM +N555=Polyphase Cp;PLY +N556=Polyvision;PLI +N557=Porta Systems Cp;PSI +N558=Portage Indus Cp;PTG +N559=Pratt Hotel Cp;PHC +N560=Pre-Paid Legal Serv Inc;PPD +N561=Presidential Realty Cl A;PDLA +N562=Presidential Realty Cl B;PDLB +N563=Price Communications;PR +N564=Pricellular Corp;PC +N565=Prism Entertainment Cp;PRZ +N566=Professional Bancorp;MDB +N567=Professional Dental Tech Inc;PRO +N568=Property Capital Tr Sbi;PCT +N569=Provena Foods Inc;PZA +N570=Providence Energy Cp;PVY +N571=Psychemedics Corp;PMD +N572=Public Storage Prop X Inc;PSL +N573=Public Storage Prop XI Inc;PSM +N574=Public Storage Prop XII Inc;PSN +N575=Public Storage Prop XIV Inc;PSP +N576=Public Storage Prop XV Inc;PSQ +N577=Public Storage Prop XVI Inc;PSU +N578=Public Storage Prop XVIII Inc;PSW +N579=Public Storage Prop XX Inc;PSZ +N580=Public Storage Props XVII Inc;PSV +N581=Public Storage Props XIX Inc;PSY +N582=Putnam CA Inv Grd Mun;PCA +N583=Putnam Inv Grd Mun Tr III;PML +N584=Putnam NY Inv Grd Mun;PMN +N585=Pyrocap Intl Corp;PYR +N586=Quebecor Inc Cl A;PQB +N587=R F Power Products;RFP +N588=Ragan (Brad) Inc;BRD +N589=Randers Group Inc;RGI +N590=Raven Industries Inc;RAVN +N591=Red Lion Inns Lp;RED +N592=Redlaw Industries;RDL +N593=Redwood Empire Bancorp;REB +N594=Refac Technology Deve;REF +N595=Regal Beloit Cp;RBC +N596=Regency Healthcare Systems Inc;RHS +N597=Reliv International Inc;RLV +N598=Resort Income Investors Inc;RII +N599=Richton Intl Cp;RHT +N600=Riegel Energy Corp;RJL +N601=Rio Algom Ltd;ROM +N602=Riser Inc;RSR +N603=Rogers Cp;ROG +N604=Rotonics Manufacturing Inc;RMI +N605=Royal Oak Mines Inc;RYO +N606=Rx Medical Service Corp;RXM +N607=Rymac Mortgage Inv Cp;RM +N608=S&P Midcap Dep Recpts;MDY +N609=Saba Petroleum Co;SAB +N610=Saga Communications Inc;SGA +N611=Sahara Gaming Corp;SGM +N612=Salem Cp;SBS +N613=Salomon AMGN Elk;AEK +N614=Salomon Brothers 2008 Worldwide Trust;SBG +N615=Salomon Inc DEC Elk;DLK +N616=Salomon Inc HWP Els;HLK +N617=Salomon Inc MSFT Com;MEK +N618=Salomon Inc ORCL Elks;OLK +N619=Salomon Inc SNPL Elks;SEK +N620=Santa Monica Bank;SMO +N621=SC Bancorp;SCK +N622=Scandinavia Co Inc;SCF +N623=Sceptre Resources Ltd;SRL +N624=Scheib (Earl) Inc;ESH +N625=Schult Homes Cp;SHC +N626=Scope Ind;SCP +N627=Scotland Bancorp;SSB +N628=Seaboard Cp;SEB +N629=Selas Cp Of Amer;SLS +N630=Serenpit Inc;SRI +N631=Servico Inc;SER +N632=Servotronics;SVT +N633=Sheffield Explorations;SHE +N634=Sheffield Medical Technology Inc;SHM +N635=Shelter Components Cp;SST +N636=Shopco Laurel Centre;LSC +N637=Sifco Ind;SIF +N638=Signal Technology Corp;STZ +N639=Silverado Foods Inc;SLV +N640=Simula Inc;SMU +N641=SJW Cp;SJW +N642=Sloans Supermarket Inc;SLO +N643=Smith A O Cl A;SMCA +N644=Smith Barney Interm Muni Fund Inc;SBI +N645=Smith Barney Municipal Fund;SBT +N646=Softnet Systems Inc;SOF +N647=SOI Industries;SOI +N648=Soligen Tech;SGT +N649=Southern Banc Inc;SRN +N650=Southern Calif Ed Qui;SCEQ +N651=Southfirst Bancshares;SZB +N652=SPDR;SPY +N653=SPDR Net Asset Value;SXN +N654=Specialty Chemical Resources Inc;CHM +N655=Spectravision Inc Cl;SVN +N656=Speed O Print Bus Mach;SBM +N657=Sports Club Inc;SCY +N658=Stage II Apparel Cp;SA +N659=Starrett Housing Cp;SHO +N660=Stepan Co;SCL +N661=Stephan Co;TSC +N662=Sterling Capital Cp;SPR +N663=Sterling Healthcare;STER +N664=Sterling House;SGH +N665=Stevens Intl Cl B;SVGB +N666=Stevens Intl Cp Cl A;SVGA +N667=Stone Street Bancorp;SSM +N668=Storage Computer Corp;SOS +N669=Storage Properties Inc;STG +N670=Struthers Industries Inc;SIR +N671=Sulcus Computer Cp;SUL +N672=Summit Tax Ex Bond Fund Lp;SUA +N673=Sun City Ind;SNI +N674=Sunair Electronics Inc;SNR +N675=Sunbelt Nursery Grp Inc;SBN +N676=Suncor Inc;SU +N677=Superior Surgical Mfg Co;SGC +N678=Supreme Industries;STS +N679=Surety Capital Corp;SRY +N680=Swing N Slide Corp;SWG +N681=Tab Products Co;TBP +N682=Tasty Baking Co;TBC +N683=Team Inc;TMI +N684=Tech/Ops Sevcon Inc;TO +N685=Teche Holdings;TSH +N686=Technitrol Inc;TNL +N687=Tejas Power Cp;TPC +N688=Tejon Ranch Co;TRC +N689=Telephone & Data Systems Inc;TDS +N690=Tenera Inc;TNR +N691=Texarkana First Financiall Corp;FTF +N692=Texas Biotechnology;TXB +N693=Texas Meridian Res Cp;TMR +N694=Thermedics Inc;TMD +N695=Thermo Cardiosystems Inc;TCA +N696=Thermo Ecotek;TCK +N697=Thermo Fibertek;TFT +N698=Thermo Instrument Systems Inc;THI +N699=Thermo Power Cp;THP +N700=Thermo Remediation Inc;THN +N701=Thermo Sentron Inc;TSR +N702=Thermo Terratech Inc;TTT +N703=Thermo Voltek Corp;TVL +N704=Thermolase Corp;TLZ +N705=Thermospectra Corp;THS +N706=Thermotrex Corp;TKN +N707=Thermwood Cp;THM +N708=Three D Dept Cl A;TDDA +N709=Three D Dept Cl B;TDDB +N710=Three River Fncl Corp;THR +N711=Tipperary Corp;TPY +N712=Tofutti Brands Inc;TOF +N713=Tolland Bank CT;TBK +N714=Top Source Technology;TPS +N715=Torotel Inc;TTL +N716=Total Petroleum N.amer;TPN +N717=Town & Country;TNC +N718=Trans World Airlines Inc;TWA +N719=Trans-Lux Cp;TLX +N720=Transcisco Ind;TNI +N721=Tranzonic Cos B;TNZB +N722=Tranzonic Cos Class A;TNZA +N723=Tridex Corp;TRDX +N724=Trinitech Systems;TSI +N725=Triple A & Govt 1997;TGB +N726=Triton Group Ltd;TGL +N727=TSF Communications Cp;TCM +N728=Tulos De Acero De Mexico Ltd;TAM +N729=Turner Broadcasting Sys Cl B;TBSB +N730=Turner Broadcasting Sys Cl A;TBSA +N731=Turner Cp;TUR +N732=Unapix Entertainment Inc;UPX +N733=Uni-Marts Inc;UNI +N734=Uniflex Inc;UFX +N735=Unimar Inc;UMR +N736=Unique Mobility Inc;UQM +N737=United Capital Cp;AFP +N738=United Foods Inc Cl B;UFDB +N739=United Foods Inc Cl A;UFDA +N740=United Guardian Inc;UG +N741=United Mobile Homes Inc;UMH +N742=Unitel Video Inc;UNV +N743=Unitil Cp;UTL +N744=Urohealth Systems Inc;URO +N745=US Alcohol Testing;AAA +N746=US Biosciences Inc;UBS +N747=US Cellular;USM +N748=USF&G Pacholder Fund Inc;PHF +N749=UTI Energy Corp;UTI +N750=Valley Forge Cp;VF +N751=Valley Resources Inc;VR +N752=Van Kamp Mer Cal Muni Tr;VKC +N753=Van Kampen Mer Adv Muni Inc II;VKI +N754=Van Kampen Mer FL Muni Opp;VOF +N755=Van Kampen Mer MA Val Muni Inco;VMV +N756=Van Kampen Mer NJ Val Muni Inc Tr;VJV +N757=Van Kampen Mer OH Val Muni Inco;VOV +N758=Van Kampen Mer Sel Muni Tr;VKL +N759=Vanguard Re Fund II;VRT +N760=Vanguard Real Est Fd I Com Fr;VRO +N761=Versar Inc;VSR +N762=Viacom Class B;VIAB +N763=Viacom Intl;VIA +N764=Vicon Ind Inc;VII +N765=Virco Mfg Cp;VIR +N766=Vitronics Cp;VTC +N767=Voyageur AZ Muni Inc;VAZ +N768=Voyageur Co Ins Muni;VCF +N769=Voyageur FL Ins Muni;VFL +N770=Voyageur Minnesota Muni Income Fund;VMN +N771=Voyageur MN Muni Income II;VMM +N772=Voyageur MN Muni Income III;VYM +N773=Vulcan Intl Cp;VUL +N774=Wash Real Estate Inv Tr Sbi;WRE +N775=Washington Savings Bk Fsb;WSB +N776=Watsco Inc Cl B;WSOB +N777=Webco Industries Inc;WEB +N778=WEBS Australia;EWA +N779=WEBS Austria Index;EWO +N780=WEBS Belgium Index;EWK +N781=WEBS Canada;EWC +N782=WEBS France;EWQ +N783=WEBS Germany;EWG +N784=WEBS Hong Kong;EWH +N785=WEBS Italy;EWI +N786=WEBS Japan Index;EWJ +N787=WEBS Malaysia Index;EWM +N788=WEBS Mexico;EWW +N789=WEBS Nethlands;EWN +N790=WEBS Singapore;EWS +N791=WEBS Spain;EWP +N792=WEBS Sweden;EWD +N793=WEBS Switzerland;EWL +N794=WEBS UK;EWU +N795=Weldotron Cp;WLD +N796=Wellco Enterprises;WLC +N797=Wells Gardner Electronics Cp;WGA +N798=Wendt Bristol Hlth Sv;WMD +N799=Wesco Financial Cp;WSC +N800=Western Investment Real Estate Trust;WIR +N801=Western Star Truck Holding;WSH +N802=Whitman Educational Group;WIX +N803=Wilshire Technology Inc;WIL +N804=Winston Resources Inc;WRS +N805=Wireless Telecom Group;WTT +N806=Wiz Technology;WIZ + +[MUTUAL] +N1=20th C Balance Investors Fund;TWBIX +N2=20th C Giftrust;TWGTX +N3=20th C Growth;TWCGX +N4=20th C Heritage Inv;TWHIX +N5=20th C Intl Stocks;TWIEX +N6=20th C Select;TWCIX +N7=20th C Ultra;TWCUX +N8=20th C US Govt;TWUSX +N9=20th C Vista;TWCVX +N10=20th Century Intl Emerging Growth;TWEGX +N11=AARP Capital Growth Fund;ACGFX +N12=AARP Global Growth;ARGGX +N13=AARP GNMA & US Treasury Fund;AGNMX +N14=AARP Growth & Income Fund;AGIFX +N15=Acorn Fund Inc;ACRNX +N16=Acorn Intl;ACINX +N17=AIM Aggressive Growth;AAGFX +N18=Aim Charter Fund;CHTRX +N19=Aim Constellation Growth Fund;CSTGX +N20=Aim Convertible Yld Security;AMBLX +N21=AIM Value Fund;AVLFX +N22=Aim Weingarten Equity Fund;WEINX +N23=Alliance Tech Fund;ALTFX +N24=Alliance World Income;AWITX +N25=Alliance Worldwide Privatization;AWPAX +N26=Amer Europacific Growth Funds;AEPGX +N27=Amer Fundamental Investors Fund;ANCFX +N28=Amer Growth Fund Of America;AGTHX +N29=Amer New Perspective;ANWPX +N30=Amer Washington Mutual;AWSHX +N31=American Heritage Fund;AHERX +N32=Artisen Small Cap Fund;ARTSX +N33=ASM Fund;ASMUX +N34=Babson Bond Tr;BBDSX +N35=Babson Enterprise Fund;BABEX +N36=Babson Growth Fund;BABSX +N37=Babson Shadow Stock Fund;SHSTX +N38=Babson Stewart Ivory Intl;BAINX +N39=Babson Value Fund;BVALX +N40=Baron Asset Fund;BARAX +N41=Baron Growth &income Fund;BGINX +N42=Benham Adj Rate Govt Security Fund;BARGX +N43=Benham Equity Growth;BEQGX +N44=Benham European Gov Bond Fund;BEGBX +N45=Benham Glb Natural Resources;BGRIX +N46=Benham GNMA Income Fund;BGNMX +N47=Benham Gold Equity Index Fund;BGEIX +N48=Benham Income & Growth;BIGRX +N49=Benham Target 2000 Fund;BTMTX +N50=Benham Target 2005 Fund;BTFIX +N51=Benham Target 2010 Fund;BTTNX +N52=Benham Target 2015 Fund;BTFTX +N53=Benham Target 2020 Fund;BTTTX +N54=Benham Treasury Note Fund;CPTNX +N55=Benham Util Inc Fund;BULIX +N56=Berger 100 Fund;BEONX +N57=Berger 101 Fund;BEOOX +N58=Berger Small Co Growth Fund;BESCX +N59=Bernstein International Value;SNIVX +N60=Blanchard Flex Tax Free Bond;BTFBX +N61=Blanchard Global Growth;BGGFX +N62=Bramwell Growth Fund;BRGRX +N63=Brandywine Fund;BRWIX +N64=Bull & Bear Global Income;BBGLX +N65=Bull & Bear Gold Investors Fund;BBGIX +N66=Bull & Bear Special Equity Fund;BBSEX +N67=Bull & Bear US & Overseas Fund;BBOSX +N68=California Tax Free Income;CFNTX +N69=Cappiello Rushmore TR Growth Fund;CRGRX +N70=Cappiello Rushmore Tr Emerging Growth;CREGX +N71=Century Shares Trust Fund;CENSX +N72=CGC Intl Equity;TIEUX +N73=CGC Large Cap Growth;TLGUX +N74=CGC Large Cap Value;TLVUX +N75=CGC Small Cap Growth;TSGUX +N76=CGM Capital Development;LOMCX +N77=CGM Mutual Fund;LOMMX +N78=Clipper Fund;CFIMX +N79=Cohen Steers Realty Shares;CSRSX +N80=Colonial Tax Exempt Fund;COLTX +N81=Columbia Growth Fund;CLMBX +N82=Columbia Special Fund Inc.;CLSPX +N83=Crabbe Huson Spec Fund;CHSPX +N84=DFA Continental Small Company;DFCSX +N85=DFA Japanese Small Company;DFJSX +N86=DFA United Kingdom Small Company;DFUKX +N87=Dodge & Cox Stock Fund;DODGX +N88=Drey A Bonds Plus;DRBDX +N89=Drey Asset Allocation Fund;DRAAX +N90=Drey Comstock Cap Value Cl A;DRCVX +N91=Drey Core Value Fund;DCVIX +N92=Drey Fund;DREVX +N93=Drey Global Inv Class B;DGLBX +N94=Drey Growth + Income;DGRIX +N95=Drey Intermediate Tax Exempt Bond;DITEX +N96=Drey Leverage Fund;DRLEX +N97=Drey New Leader Fund;DNLDX +N98=Drey Opportunity Fund;DREQX +N99=Drey Strategic Worldwide;DSWIX +N100=Drey Tax Ex Bond Fund;DRTAX +N101=Drey Third Century;DRTHX +N102=Dreyfus Appreciation;DGAGX +N103=DW American Value Fund;DWIVX +N104=DW Capital Growth Fund;DWCGX +N105=DW Developing Growth Fund;DWDGX +N106=DW Dividend Growth Fund;DWDVX +N107=DW European Growth Fund;DWEGX +N108=DW Pacific Growth Fund;DWPGX +N109=DW Strategist Fund;DWSTX +N110=DW Value Added Fund;DWVAX +N111=DW Worldwide Investor Fund;DWWWX +N112=Eaton Vance High Yield Muni Tr;EVHMX +N113=Evergreen Fund;EVGRX +N114=Evergreen Global R.E. Fund;EGLRX +N115=Evergreen Total Return Fund;EVTRX +N116=Fam Value Fund;FAMVX +N117=Federal Capital Appreciation Fund;FEDEX +N118=Federated Amer Leaders Fd;FALDX +N119=Federated High Income;FHIIX +N120=Federated High Yield Trust;FHYTX +N121=Federated Stock Trust;FSTKX +N122=Federated US Govt Sec;FUSGX +N123=Fid Adv Growth Opport Fund;FAGOX +N124=Fid Advisor High Income;FAHYX +N125=Fid Advisory Overseas Fund;FAERX +N126=Fid Asset Manager;FASMX +N127=Fid Asset Manager;FASIX +N128=Fid Asset Mng Growth;FASGX +N129=Fid Balanced Fund;FBALX +N130=Fid Blue Chip Growth Fund;FBGRX +N131=Fid Cal Tax Free High Yield;FCTFX +N132=Fid Cal Tax Free Insur Port;FCXIX +N133=Fid Canada Fund;FICDX +N134=Fid Capital Appreciation;FDCAX +N135=Fid Congress Street Fund;CNGRX +N136=Fid Contra Fund;FCNTX +N137=Fid Conv Security Fund;FCVSX +N138=Fid Destiny Fund;FDESX +N139=Fid Destiny II Port;FDETX +N140=Fid Disciplined Equity Fund;FDEQX +N141=Fid Diversified Intl;FDIVX +N142=Fid Dividend Growth Fund;FDGFX +N143=Fid Emerging Growth Fund;FDEGX +N144=Fid Emerging Markets;FEMKX +N145=Fid Equity Income;FEQIX +N146=Fid Equity Income II Fund;FEQTX +N147=Fid Euro Cap Appreciation;FECAX +N148=Fid Europe Fund;FIEUX +N149=Fid Exchange Fund;FDLEX +N150=Fid Export Fund;FEXPX +N151=Fid Fifty Fund;FFTYX +N152=Fid Freedom;FDFFX +N153=Fid Global Balance;FGBLX +N154=Fid Global Bond Fund;FGBDX +N155=Fid GNMA Portfolio;FGMNX +N156=Fid Government Security Fund;FGOVX +N157=Fid Growth & Income;FGRIX +N158=Fid Growth Co Fund;FDGRX +N159=Fid High Income Fund;FAGIX +N160=Fid High Yield Fund;FHIGX +N161=Fid Int'l Growth & Income Fund;FIGRX +N162=Fid Int'l Value Fund;FIVFX +N163=Fid Intermediate Bond Fund;FTHRX +N164=Fid Investment Grade Bond Fund;FBNDX +N165=Fid Japan Fund;FJAPX +N166=Fid Latin America Fund;FLATX +N167=Fid Low-Priced Stock Fund;FLPSX +N168=Fid Magellan;FMAGX +N169=Fid Midcap Stocks;FMCSX +N170=Fid Mortgage Security Fund;FMSFX +N171=Fid Muni Tr Ins Tax Free;FMUIX +N172=Fid Municipal Bond Fund;FMBDX +N173=Fid New Markets Income;FNMIX +N174=Fid New Millenium Fund;FMILX +N175=Fid NY Tax Free High Yield Fund;FNTIX +N176=Fid OTC;FOCPX +N177=Fid Overseas;FOSFX +N178=Fid Pacific-basin Fund;FPBFX +N179=Fid Puritan;FPURX +N180=Fid Real Estate Investment Fund;FRESX +N181=Fid Retired Mm Port;FRTXX +N182=Fid SE Asia Fumd;FSEAX +N183=Fid Sel Air Transport;FSAIX +N184=Fid Sel Amer Gold;FSAGX +N185=Fid Sel Automotive Prt;FSAVX +N186=Fid Sel Biotech Port;FBIOX +N187=Fid Sel Bkrge & Inv Mg;FSLBX +N188=Fid Sel Broadcast;FBMPX +N189=Fid Sel Capital Goods;FSCGX +N190=Fid Sel Chemical Port;FSCHX +N191=Fid Sel Computers;FDCPX +N192=Fid Sel Consumer Products;FSCPX +N193=Fid Sel Develop Community;FSDCX +N194=Fid Sel Electronics Port;FSELX +N195=Fid Sel Energy;FSENX +N196=Fid Sel Energy Service;FSESX +N197=Fid Sel Environmental Port;FSLEX +N198=Fid Sel Food & Agric;FDFAX +N199=Fid Sel Health Care;FSPHX +N200=Fid Sel Housing Port;FSHOX +N201=Fid Sel Industrial Prt;FSDPX +N202=Fid Sel Leisure & Ent;FDLSX +N203=Fid Sel Medic Delivery;FSHCX +N204=Fid Sel Natural Gas;FSNGX +N205=Fid Sel Paper & Forest;FSPFX +N206=Fid Sel Port Defense;FSDAX +N207=Fid Sel Port Financial Services;FIDSX +N208=Fid Sel Port Technolgy;FSPTX +N209=Fid Sel Port Utilities;FSUTX +N210=Fid Sel Prec Mtl & Minerals;FDPMX +N211=Fid Sel Prop & Casul Insur;FSPCX +N212=Fid Sel Regional Banks;FSRBX +N213=Fid Sel Retail;FSRPX +N214=Fid Sel S & L Port;FSVLX +N215=Fid Sel Software;FSCSX +N216=Fid Sel Telecommunicatns Port;FSTCX +N217=Fid Sel Transport Port;FSRFX +N218=Fid Short Term World Income;FSHWX +N219=Fid Short-Term Bond Port;FSHBX +N220=Fid Short-Term Gov't Bond Port;FSTGX +N221=Fid Small Cap Stock Fund;FDSCX +N222=Fid Spart Inv Grade;FSIBX +N223=Fid Spart Long Term Gov;SLTGX +N224=Fid Spart Muni Income;FSMIX +N225=Fid Spart Short Term Muni;FSTFX +N226=Fid Spartan Govt Income Fund;SPGVX +N227=Fid Specialty Situation;FSLSX +N228=Fid Stock Selector Fund;FDSSX +N229=Fid Trend Fund;FTRNX +N230=Fid Utility Income Fund;FIUIX +N231=Fid Worldwide Fund;FWWFX +N232=Fidelity Fund;FFIDX +N233=Fidelity Hong Kong China Fund;FHKCX +N234=Fidelity Japan Small Co;FJSCX +N235=Fidelity Limited Term Muni;FLTMX +N236=First Investors Tax Exempt Fund;FITAX +N237=Flex Fund Short Term Global Income;FLGIX +N238=Founder Discovery Mutual Fund;FDISX +N239=Founder Worldwide Growth;FWWGX +N240=Founders Frontier Fund Inc.;FOUNX +N241=Founders Growth Fund;FRGRX +N242=Founders Passport Fund;FPSSX +N243=Founders Special Fund;FRSPX +N244=Frank/Temp German Govt Bond;HGGBX +N245=Frank/Templ Global Curr;ICPGX +N246=Franklin Dynatech Fund;FKDNX +N247=Franklin Equity Fund;FKREX +N248=Franklin Federal Tax Free Income Fund;FKTIX +N249=Franklin Gold Fund;FKRCX +N250=Franklin US Govt Secs Fd;FKUSX +N251=Franklin Utility Fund;FKUTX +N252=Franklin Valuemark;AGEFX +N253=Franklin Valuemark Income Sec;FKINX +N254=Fremont Global Fund;FMAFX +N255=Gabelli Asset Fund;GABAX +N256=Gabelli Global Telecommunications;GABTX +N257=Gabelli Growth Fund;GABGX +N258=Gabelli Small Cap Growth Fund;GABSX +N259=Gabelli Value Fund;GABVX +N260=Gateway Index Plus Fund;GATEX +N261=GE Savings & Security Long Term;GESSX +N262=GE Savings Security Program;GESLX +N263=Gintel Erisa Fund;GINTX +N264=Gintel Fund;GINLX +N265=Goldman Sachs Smallcap Equity Fund;GSSMX +N266=Govett Smaller Cos Fund;GSCQX +N267=Gradison Established Growth Fund;GETGX +N268=Greenspring Fund;GRSPX +N269=GT Global America Growth Fund;GTAGX +N270=GT Global Bond Fund;GSIAX +N271=GT Global Emerging Mkt;GTEMX +N272=GT Global Europe Growth Fund;GTGEX +N273=GT Global Gov't Income Fund;GGINX +N274=GT Global Growth & Income Fund;GAGIX +N275=GT Global Health Care Fund;GGHCX +N276=GT Global Int'l Growth Fund;GINGX +N277=GT Global Japan Growth Fund;GJGRX +N278=GT Global Pacific Growth Fund;GTPAX +N279=GT Global Worldwide Growth Fund;GTWGX +N280=Guiness Flight China & HK;GFCHX +N281=Harbor Intl Fund;HAINX +N282=Hartwell Growth Fund;HRGRX +N283=Heartland Small Cap Cont Fund;HRSMX +N284=Heartland Value;HRTVX +N285=Hotchkis & Wiley Intl;HWINX +N286=Hotchkis & Wiley Low Duration;HWLDX +N287=Hotchkis & Wiley Total Return;HWTRX +N288=IAI Apollo Fund;IAAPX +N289=IAI Emerging Growth Fund;IAEGX +N290=IAI Growth & Income Fund;IASKX +N291=IAI Intl Fun;IAINX +N292=IAI Regional Fund;IARGX +N293=IDS Bond Fund;INBNX +N294=IDS Discovery Fund;INDYX +N295=IDS Equity Plus Fund;INVPX +N296=IDS Extra Income Fund;INEAX +N297=IDS Growth Fund;INIDX +N298=IDS Intl Fund;INIFX +N299=IDS Managed Retirement;IMRFX +N300=IDS Mutual Fund;INMUX +N301=IDS New Dimensions Fund;INNDX +N302=IDS Progressive Fund;INPRX +N303=IDS Selective Fund;INSEX +N304=IDS Stock Fund;INSTX +N305=IDS Strategy Aggressive;INAGX +N306=IDS Tax-Exempt Bond Fund;INTAX +N307=IDS Utilities Income Fund;INUTX +N308=Invesco Dynamics;FIDYX +N309=Invesco Emerging Growth Fund;FIEGX +N310=Invesco Financial Services;FSFSX +N311=Invesco Growth Fund;FLRFX +N312=Invesco Income Fund;FBDSX +N313=Invesco Income Hi Yield;FHYPX +N314=Invesco Income US Govt Security;FBDGX +N315=Invesco Industrial Income Fund;FIIIX +N316=Invesco International European;FEURX +N317=Invesco Intl Growth;FSIGX +N318=Invesco Intl Pacific Basin;FPBSX +N319=Invesco Strategic Energy;FSTEX +N320=Invesco Strategic Gold;FGLDX +N321=Invesco Strategic Health;FHLSX +N322=Invesco Strategic Leisure;FLISX +N323=Invesco Strategic Technology;FTCHX +N324=Invesco Strategic Utilities;FSTUX +N325=Invesco Tax Free Income;FTIFX +N326=Invesco Value Inter Bond Fund;FIGBX +N327=Invesco Value Total Return;FSFLX +N328=Invesco World Wide Communication;ISWCX +N329=Investco Environment;FSEVX +N330=Investco Multi Asset;IMABX +N331=Ivy Growth Fund;IVYFX +N332=Ivy Int'l Fund;IVINX +N333=Janus Enterprise;JAENX +N334=Janus Flex Income;JAFIX +N335=Janus Fund;JANSX +N336=Janus Growth & Income;JAGIX +N337=Janus Mercury Fund;JAMRX +N338=Janus Olympus Fund;JAOLX +N339=Janus Overseas;JAOSX +N340=Janus Twenty Fund;JAVLX +N341=Janus Venture Fund;JAVTX +N342=Janus Worldwide;JAWWX +N343=John Handcock World Fund;JHGRX +N344=Kaufman Fund;KAUFX +N345=Kemper Growth Fund];KGRAX +N346=Kemper Inv High Yield;KHYAX +N347=Keystone Balance Fund;KKONX +N348=Keystone Cust Fund Series S-4;KSFOX +N349=Keystone Diversified Bond;KBTWX +N350=Keystone Growth & Income;KSONX +N351=Keystone High Income;KBFOX +N352=Keystone Mid Cap Growth Fund;KSTHX +N353=Keystone Precious Metals Hldgs;KSPMX +N354=Keystone Quality Bond Fund;KBONX +N355=Keystone Strategic Growth Fund;KKTWX +N356=Keystone Tax Free Fund;KSTFX +N357=Legg Mason Special Investments;LMASX +N358=Legg Mason Value Trust;LMVTX +N359=Lexington Corp Lenders Tres;LEXCX +N360=Lexington Global Fund;LXGLX +N361=Lexington Gold Fund Inc;LEXMX +N362=Lexington Ramirez Global Incom;LEBDX +N363=Lexington Research Fund;LEXRX +N364=Lexington Strat Silver Fund;STSLX +N365=Lexington Strategic Investment;STIVX +N366=Lexington World Wide Emerging Markets;LEXGX +N367=Liberty Muni Security Fund;LMSFX +N368=Lindner Bulwark Inc;LDNBX +N369=Lindner Dividend Fund;LDDVX +N370=Lindner Fund;LDNRX +N371=Lord Ab Bond Deb;LBNDX +N372=Lord Ab Dev Growth Fund;LAGWX +N373=Lord Ab Govt Security Fd;LAGVX +N374=Lord Ab Value Appreciation;LAVLX +N375=Lord Abbett Affiliated Fund;LAFFX +N376=M Lynch Amer Inc Cl D;MDAMX +N377=M Lynch Americus;MBAMX +N378=M Lynch Asset Growth Cl B;MBAGX +N379=M Lynch Asset Income Cl B;MBASX +N380=M Lynch Basic Value Cl B;MBAZX +N381=M Lynch Basic Value;MBBAX +N382=M Lynch Bond Fund I& R Cl C;MCGOX +N383=M Lynch Cap Fund Cl B;MBCPX +N384=M Lynch Dev Cap Markets;MBDCX +N385=M Lynch E Africa Cl B;MBAFX +N386=M Lynch Euro Fund Cl B;MBEFX +N387=M Lynch Funds For Instit;MLTXX +N388=M Lynch Glb Cv Fund Cl B;MBGVX +N389=M Lynch Glob Util Cl B;MBGUX +N390=M Lynch Global Alloc Cl B;MBLOX +N391=M Lynch Global Bond I & R Cl B;MBGOX +N392=M Lynch Global Holdings Cl B;MBHDX +N393=M Lynch Global Res Tr Cl B;MBGRX +N394=M Lynch Global Small Cap Cl B;MBGCX +N395=M Lynch Growth Fd IRA Cl B;MBQRX +N396=M Lynch Growth Fund Cl B;MBFGX +N397=M Lynch Growth Inv & Retirement;MDQRX +N398=M Lynch Healthcare Cl B;MBHCX +N399=M Lynch Inst Interm Cl A;MLMEX +N400=M Lynch Intl Eq Fund Cl B;MBIEX +N401=M Lynch Latin Amer Cl B;MBLTX +N402=M Lynch Pacific Fd Cl B;MBPCX +N403=M Lynch Short Term Glb Cl B;MBSIX +N404=M Lynch Spec Value Cl B;MBSPX +N405=M Lynch Strat Div Cl B;MBDVX +N406=M Lynch Tech Fund Cl B;MBTCX +N407=M Lynch Tomorrow Fund Cl B;MBTWX +N408=M Lynch Util Income Cl B;MBUTX +N409=M Lynch Value Fund Cl B;MDSPX +N410=Managers Intermediate Mortgage;MGIGX +N411=Mas Pooled Intl Equity;MPIEX +N412=Mathers Fund;MATRX +N413=Merger Fund;MERFX +N414=Merrill Basic Value;MABAX +N415=Merrill Capital;MACPX +N416=Merrill Corp High Income;MAHIX +N417=Merrill Federal Securities;MBFSX +N418=Merrill Growth;MAQRX +N419=Merrill International Holdings;MAHDX +N420=Merrill Investment Grade;MBHQX +N421=Merrill L Phoenix Fund;MBPNX +N422=Merrill L Tech Fund;MATCX +N423=Merrill Lynch Dragon Fund;MBDRX +N424=Merrill Pacific;MAPCX +N425=Merrill Special Value;MASPX +N426=MFS Gov't Mortgage Fund;MGMTX +N427=MFS High Income Fund;MHITX +N428=Midas Fund Inc;EMGSX +N429=Monetta Fund Inc;MONTX +N430=Monitrend Gold Fund;MNTGX +N431=Montgomery Asset Allocation;MNAAX +N432=Montgomery Emerging Markets;MNEMX +N433=Montgomery Equity Income;MNEIX +N434=Montgomery Global Commun Fund;MNGCX +N435=Montgomery Global Opportunity;MNGOX +N436=Montgomery Growth;MNGFX +N437=Montgomery Intl Small Cap;MNISX +N438=Montgomery Micro Cap;MNMCX +N439=Montgomery Small Cap Fund;MNSCX +N440=Mutual Beacon Fund Inc;BEGRX +N441=Mutual Discovery Fund;MDISX +N442=Mutual Qualified Income Fund;MQIFX +N443=Mutual Shares Corp;MUTHX +N444=Navellier Aggressive Small Cap;NASCX +N445=Neub & Ber Partners;NPRTX +N446=Neub & Ber Select Sectors;NBSSX +N447=Neub Guardian;NGUAX +N448=Neub Ltd Maturity Bond;NLMBX +N449=Neub Manhattan;NMANX +N450=New USA Fund;NUSFX +N451=Newberger & Bermon Manttatn TR;NBMTX +N452=Nicholas Fund;NICSX +N453=Nicholas II Fund;NCTWX +N454=Nicholas Income Fund;NCINX +N455=Nomura Pacific Basin Fund;NPBFX +N456=Northeast Investors Growth Fund;NTHFX +N457=Northeast Investors Trust Fund;NTHEX +N458=Oakmark;OAKMX +N459=Oakmark Intl Fd;OAKIX +N460=Oberweis Emerging Grwth Fund;OBEGX +N461=Oppen Main St Income & Growth;MSIGX +N462=Oppenheimer Glabal A Fund;OPPAX +N463=Oppenheimer Gold & Spec Minerals;OPGSX +N464=Pacific Horizon Agressive Fund;PHAGX +N465=Pax World Fund;PAXWX +N466=Pbhg Emerging Growth;PBEGX +N467=Pbhg Fund;PBHGX +N468=PBHG Large Cap Growth;PBHLX +N469=PBHG Select Equity;PBHEX +N470=PBHG Tech & Communications Fund;PBTCX +N471=Penn Mutual Fund;PENNX +N472=Penn Square Fund;PESQX +N473=Pimco Adv Growth Fund;PGWCX +N474=Pimco Adv Intl Fund;PILCX +N475=Pimco Foreign;PFORX +N476=Piper Jaffray Institutional Gvt Income;PJIGX +N477=Pra Real Estate Fund;PRREX +N478=Primco Adv Oppt Cl C;POPCX +N479=Prud Global Utility Fund;GLUAX +N480=Prudential Interm Global Income Fund;PBIGX +N481=Put Convertible Fund;PCONX +N482=Put Diversified Income Trust;PDINX +N483=Put Growth & Income Fund;PGRWX +N484=Put Income Fund;PINCX +N485=Put Intl Equities;PEQUX +N486=Put Investors Fund;PINVX +N487=Put Natural Resources Fund;EBERX +N488=Put Option Income II Fund;PMITX +N489=Put OTC Emerging Growth Fund;POEGX +N490=Put Vista Basic Value Fund;PVISX +N491=Put Voyager Fund;PVOYX +N492=Putnam Cali Tax Ex Inc;PCTEX +N493=Putnam Health Sciences;PHSTX +N494=Putnam High Yield Tr B;PHBBX +N495=Putnam High Yield Tr A;PHIGX +N496=Putnam Tax Ex Income;PTAEX +N497=Quest For Value Fund;QFVFX +N498=Reich & Tang Equity Fund;RCHTX +N499=RIM Balanced PT;RIMBX +N500=RIM Small/Mid Cap Equity;RIMSX +N501=Rob St Contrarian Fund;RSCOX +N502=Rob St Dev Countries Fund;RSDCX +N503=Rob St Emerging Growth Fund;RSEGX +N504=Rob St Value Plus Fund;RSVPX +N505=Robertson Stephens Info Age;RSIFX +N506=Royce Mico Cap;RYOTX +N507=Royce Value Fund;RYVFX +N508=Rushmore Amer Gas Index;GASFX +N509=Ryder Juno Fund;RYJUX +N510=Rydex Nova Port;RYNVX +N511=Rydex OTC Fund;RYOCX +N512=Rydex Precious Metal Fund;RYPMX +N513=Rydex Ursa Fund;RYURX +N514=Rydex US Gov Bond;RYGBX +N515=Safeco Equity Fund;SAFQX +N516=Safeco Gov't Securities Fund;SFUSX +N517=Safeco Growth Fund;SAFGX +N518=Safeco Income Fund Inc;SAFIX +N519=Safeco Municipal Bond Fund;SFCOX +N520=SBS Strategic Investing;SESIX +N521=Schroder Capital Us Equity;SUSEX +N522=Schroder Intl Equity;SCIEX +N523=Schwab 1000 Fund;SNXFX +N524=Schwab Intl Index Fund;SWINX +N525=Scud CA Tax Free Fund;SCTFX +N526=Scud Capital Growth Fund;SCDUX +N527=Scud Development Fund;SCDVX +N528=Scud Emerg Mrkt Income;SCEMX +N529=Scud Global Bond Fund;SSTGX +N530=Scud Global Fund;SCOBX +N531=Scud Gnma Fund;SGMSX +N532=Scud Gold Fund;SCGDX +N533=Scud Growth & Income Fund;SCDGX +N534=Scud Hi Yield Tax Free;SHYTX +N535=Scud Income Fund Inc;SCSBX +N536=Scud Intl Bond Fund;SCIBX +N537=Scud Intl Fund;SCINX +N538=Scud Japan Fund;SJPNX +N539=Scud Med Term Tax Free;SCMTX +N540=Scud Mgt Municipal Fund;SCMBX +N541=Scud Quality Growth Fund;SCQGX +N542=Scud Short Term Bond Fund;SCSTX +N543=Scud US Tres Money Fund;SCGXX +N544=Scud Zero Coupon 2000 Target;SGZTX +N545=Scudder Global Discovery Fund;SGSCX +N546=Scudder Greater Europe Group;SCGEX +N547=Scudder Latin America Fund;SLAFX +N548=Scudder Pacific Opportunity;SCOPX +N549=Scudder Value Fund;SCVAX +N550=SEI Index S&P 500;TRQIX +N551=SEI Inst Managed Trust Small Cap Growth;SSCGX +N552=Select Special Shares;SLSSX +N553=Selected Amer Shares;SLASX +N554=Seligman Comm & Info Class D;SLMDX +N555=Seligman Frontier;SLFRX +N556=Sequoia Fund Inc;SEQUX +N557=Shearson SP High Income;SHIBX +N558=Sit Growth Fund Incorp;NBNGX +N559=Sit Small CAp Growth Fund;SSMGX +N560=Smith Barn Managed Growth Fund;SBMGX +N561=Sogen International;SGENX +N562=Spartan High Income Mutual Fund;SPHIX +N563=State Farm Growth Fund;STFGX +N564=State Street Research Govt Income Fund;SSGIX +N565=Stein Roe Capital Fund;SRFCX +N566=Stein Roe Growth Fund;SRFSX +N567=Stein Roe Hi Yield Muni;SRMFX +N568=Stein Roe Special Fund;SRSPX +N569=Stratton Growth Fund;STRGX +N570=Stratton Monthly Dividend;STMDX +N571=Strong Asia Pacific Fund;SASPX +N572=Strong Asset Allocation;STAAX +N573=Strong Common Stock Fund;STCSX +N574=Strong Corporate Bond Fund Inc;STCBX +N575=Strong Discovery Fund;STDIX +N576=Strong Government Securities;STVSX +N577=Strong Growth;SGROX +N578=Strong High Yield Fund;SHYLX +N579=Strong Intl Bond Fund;SIBUX +N580=Strong Intl Stock;STISX +N581=Strong Municipal Advantage Fund;SMUAX +N582=Strong Opportunity Fund;SOPFX +N583=Strong Short Term Bond;SSTBX +N584=Strong Short Term Glbl Bond;STGBX +N585=Strong Total Return Fund;STRFX +N586=T Price Rowe Capital Apprec Fund;PRWCX +N587=T Price Rowe Income Fund;PRCIX +N588=T Price Rowe Int'l Stock Fund;PRITX +N589=T Price Rowe New Era Fund;PRNEX +N590=T Price Rowe New Horizon Fund;PRNHX +N591=T Price Rowe Tax Free Hi Yield;PRFHX +N592=T Rowe Global Government Bond;RPGGX +N593=T Rowe Growth Fund;TRSGX +N594=T Rowe Income Fund;PRSIX +N595=T Rowe Japan;PRJPX +N596=T Rowe Latin Amer;PRLAX +N597=T Rowe Personal Strat;TRPBX +N598=T Rowe Price Equity Fund;PRFDX +N599=T Rowe Price Equity;PREIX +N600=T Rowe Price European Stock Fund;PRESX +N601=T Rowe Price High Yield Bond Fund;PRHYX +N602=T Rowe Price Int'l Bond Fund;RPIBX +N603=T Rowe Price Int'l Discovery Fund;PRIDX +N604=T Rowe Price New Amer Growth;PRWAX +N605=T Rowe Price NY Tax Free Bond Fund;PRNYX +N606=T Rowe Price OTC Fund;OTCFX +N607=T Rowe Price Science & Technology;PRSCX +N608=T Rowe Price Small Cap Value;PRSVX +N609=T Rowe Price Tax Free Short Interest;PRFSX +N610=T Rowe Price US Treasury Long Term;PRULX +N611=T Rowe Short Term Global Income;RPSGX +N612=Temp Foreign Equity Series;TFEQX +N613=Templeton Developing Market;TEDMX +N614=Templeton Foreign Fund;TEMFX +N615=Templeton Global Opport Tr;TEGOX +N616=Templeton Growth Fund;TEPLX +N617=Templeton Intl Stock Fund;FINEX +N618=Templeton Real Estate Securities;TEMRX +N619=Templeton World Fund;TEMWX +N620=TR Price Spec Growth Fund;PRSGX +N621=TR Price Spec Income Fund;RPSIX +N622=Trowe Price New Asia;PRASX +N623=Tweedy Browne Global Value;TBGVX +N624=United Bond Fund;UNBDX +N625=United Service Goldshares;USERX +N626=United Service Real Estate;UNREX +N627=United Service World Gold Fund;UNWPX +N628=USAA Agressive Growth Fund;USAUX +N629=USAA Capital Growth Fund;USAAX +N630=USAA Cornerstone Strat Fund;USCRX +N631=USAA Gold Fund;USAGX +N632=USAA Investment Intl;USIFX +N633=USAA Mutual Income Fund;USAIX +N634=USAA Tax Exempt Intermediate Term;USATX +N635=USAA Tax Exempt Short Term;USSTX +N636=Value Line Aggressive Income Fund;VAGIX +N637=Value Line Convertible Fd Inc;VALCX +N638=Value Line Fund;VLIFX +N639=Value Line High Yield Port;VLHYX +N640=Value Line Income Fund;VALIX +N641=Value Line Leveraged Growth;VALLX +N642=Value Line Special Fund;VALSX +N643=Value Line US Gov't Securities Fund;VALBX +N644=Van Eck Fund Intl Invest;INIVX +N645=Van Eck Gold Resources Fund;GRFRX +N646=Van Kampen Merriott US Govt Fund;VKMGX +N647=Vang Bond Market Fund;VBMFX +N648=Vang Converible Security Fund;VCVSX +N649=Vang Equity Income Port;VEIPX +N650=Vang Explorer Fund;VEXPX +N651=Vang GNMA Port;VFIIX +N652=Vang Gold & Precious Metal;VGPMX +N653=Vang High Yield Corp;VWEHX +N654=Vang Hor Capital Oppt;VHCOX +N655=Vang Horizon Aggressive Growth;VHAGX +N656=Vang Horz Glb Assets;VHAAX +N657=Vang Horz Glb Equity;VHGEX +N658=Vang Index 500 Trust;VFINX +N659=Vang Index Growth Fund;VIGRX +N660=Vang Index Trust Extended Market Fund;VEXMX +N661=Vang Index Value Fund;VIVAX +N662=Vang Intl Eq Emerging;VEIEX +N663=Vang Intl Index Europe;VEURX +N664=Vang Intl Index Pacific;VPACX +N665=Vang Life Cons Growth;VSCGX +N666=Vang Life Income;VASIX +N667=Vang Life Mod Pt;VSMGX +N668=Vang Morgan;VMRGX +N669=Vang Municipal Bond Fund;VWAHX +N670=Vang Preferred Stock Fund;VQIIX +N671=Vang Primecap;VPMCX +N672=Vang Quantitative;VQNPX +N673=Vang Short Term Corporate Fund;VFSTX +N674=Vang Short Term Gov't Bond Fund;VSGBX +N675=Vang Smallcap Stock Fund;NAESX +N676=Vang Special Energy Port;VGENX +N677=Vang Special Health Port;VGHCX +N678=Vang Star Fund;VGSTX +N679=Vang TCA Intl;VTRIX +N680=Vang TCF USA Fund;VTRSX +N681=Vang US Treasury Bond Port;VUSTX +N682=Vang Utility Income;VGSUX +N683=Vang Warwick Intermed Fund;VWITX +N684=Vang Warwick Short Fund;VWSTX +N685=Vang Wellesley;VWINX +N686=Vang Wellington Fund;VWELX +N687=Vang Westminster Fixed Income Fund;VWESX +N688=Vang Windsor Fund;VWNDX +N689=Vang Windsor II;VWNFX +N690=Vang World Fd Int'l Grwth;VWIGX +N691=Vang World Fund US Growth Port;VWUSX +N692=Vanguard Asset Allocation Strat;VAAPX +N693=Vanguard Life Growth;VASGX +N694=Vista Capital Growth Fund;VCAGX +N695=Von Wagoner Emerging Growth;VWEGX +N696=Von Wagoner Mid Cap Fund;VWMDX +N697=Vontobel Europacific;VNEPX +N698=Vontobel US Value;VUSVX +N699=Warburg Pin Gr & Income;RBEGX +N700=Warburg Pincus Emerging Growth;CUEGX +N701=Warburg Pincus Global Fixed Income;CGFIX +N702=Warburg Pincus Intl Equity;CUIEX +N703=Warburg Pincus Japan;WPJPX +N704=Wasatch Aggressive Equity Fund;WAAEX +N705=Wasatch Growth Fund;WGROX +N706=Wasatch Micro-Cap;WMICX +N707=Wasatch Mid-Cap Fund;WAMCX +N708=Wayne Hummer Income Fund;WHICX +N709=Weiss, Peck & Greer Tudor Fund;TUDRX +N710=World\Fds Vontobel US Value;VUSGX +N711=WPG Govt Securities;WPGVX +N712=WPG Growth & Income;WPGFX +N713=Wright Dutch Ntl Fund;WENLX +N714=Wright Equity Mex Ntl;WEMEX +N715=Wright Equity TR Hong Kong;WEHKX + diff --git a/http/HTTP.DAT b/http/HTTP.DAT new file mode 100644 index 0000000..ce51d3b --- /dev/null +++ b/http/HTTP.DAT @@ -0,0 +1,4292 @@ +[HTTP] +HOSTNAME=qs.secapl.com +REQUEST="GET /cgi-bin/qs?tick=" + +[NASDAQ] +N1=Accent Software International Ltd.;ACNTF +N2=Actrade International Ltd.;ACRT +N3=Adaptive Solutions, Inc.;ADSO +N4=ALDEN Electronics, Inc.;ADNEA +N5=Allegro New Media, Inc.;ANMI +N6=Alternate Postal Delivery, Inc.;ALTD +N7=Amedisys, Inc.;AMED +N8=Ancor Communications, Inc.;ANCR +N9=Applied Biometrics, Inc.;ABIO +N10=Applied Cellular Technology, Inc.;ACTC +N11=Applied Research Corporation ;APLS +N12=ARC Capital (Formerly Applied Laser Systems);ARCCA +N13=ASA International Ltd. ;ASAA +N14=Atlantic Pharmaceuticals, Inc.;ATLC +N15=Automobile Protection Corporation;APCO +N16=Blue Dolphin Energy Company;BDCO +N17=Bureau of Electronic Publishing, Inc.;BEPI +N18=Byron Preiss Multimedia Company, Inc.;CDRM +N19=Camelot Corporation;CAML +N20=Cardiotronics Systems, Inc.;CDIO +N21=Centurion Mines Corporation;CTMC +N22=Churchill Downs Incorporated;CHDN +N23=CinemaStar Luxury Theaters;LUXY +N24=Circuit Research Labs, Inc.;CRLI +N25=Classics International Entertainment, Inc.;CIEI +N26=Coda Music Technology;COMT +N27=CompuMed, Inc.;CMPD +N28=Computer Marketplace, Inc.;MKPL +N29=Computone Corporation;CMPT +N30=Concord Energy, Inc.;CODE +N31=CSI Computer Specialists, Inc.;CSIS +N32=Cusac Gold Mines Ltd.;CUSIF +N33=DeltaPoint, Inc.;DTPT +N34=Digital Sciences Inc.;DISI +N35=Dynamic Healthcare Technologies, Inc.;DHTI +N36=DynaMotive Technologies Corporation;DYMTF +N37=Eckler Industries, Inc.;ECKL +N38=Electronic Clearing House, Inc.;ECHO +N39=Enteractive, Inc.;ENTR +N40=Environment One Corporation;EONE +N41=Environmental Technologies USA, Inc.;ENVR +N42=Erox Corporation;EROX +N43=Esquire Communications Ltd.;ESQS +N44=Essex Corporation;ESEX +N45=Farmstead Telephone Group, Inc.;FONE +N46=FIND/SVP, Inc.;FSVP +N47=F1RSTMARK, Inc.;FIRM +N48=Focus Enhancements, Inc.;FCSE +N49=Gilman & Ciocia, Inc.;GTAX +N50=Graphix Zone, Inc.;GZON +N51=Great Pines Water Company, Inc.;GPWC +N52=Imex Medical Systems, Inc.;IMEX +N53=Independence Federal Savings Bank;IFSB +N54=Infodata Systems, Inc.;INFD +N55=Informedics, Inc.;IMED +N56=INOTEK Technologies Corp.;INTK +N57=Insignia Systems, Inc.;ISIG +N58=Integral Systems, Inc.;ISYS +N59=IntelliCorp, Inc.;INAI +N60=International Microcomputer Software, Inc.;IMSI +N61=International Precious Metals Corporation;IPMCF +N62=Internet Communications Corporation;INCC +N63=InVitro International;INVI +N64=Irvine Sensors Corporation;IRSN +N65=ITEX Corporation;ITEX +N66=Janex International, Inc.;JANX +N67=Kansas City Life Insurance Company;KCLI +N68=Kinetiks.com, Inc.;KNET +N69=Laser Video Network;LVNI +N70=LCA-Vision Inc.;LCAV +N71=LifeCell Corporation;LIFC +N72=LifeRate Systems, Inc.;LRSI +N73=LightPath Technologies Inc.;LPTHA +N74=Lotto World, Inc.;LTTO +N75=Marine National Bank;MNBK +N76=MaxServ, Inc.;MXSV +N77=Medizone International, Inc.;MZEI +N78=MetroBanCorp;METB +N79=Mitek Systems, Inc.;MITK +N80=Network Connection, Inc. (The);TNCX +N81=National Registry Inc. (The);NRID +N82=Nona Morelli's II, Inc.;NONA +N83=Norris Communications Corporation;NORRF +N84=Online System Services, Inc.;WEBB +N85=Navigato International, Inc.;NATO +N86=Pacific Animated Imaging Corp.;PAID +N87=Palomar Medical Technologies, Inc.;PMTI +N88=PerfectData Corporation;PERF +N89=Perle Systems Inc.;PERLF +N90=Precision Systems, Inc.;PSYS +N91=ProtoSource Corporation;PSCO +N92=PTI Holding, Inc.;PTII +N93=Pudgie's Chicken, Inc.;PUDG +N94=QCS Corporation;QCSC +N95=Quadrax Corporation;QDRX +N96=Rent-A-Wreck of America, Inc.;RAWA +N97=Rotary Power International, Inc.;RPII +N98=Sanctuary Woods Multimedia Corporation ;SWMFC +N99=Scangraphics, Inc.;SCNG +N100=Seiler Pollution Control Systems, Inc.;SEPC +N101=Silverado Mines, Ltd.;GOLDF +N102=Socket Communications, Inc.;SCKT +N103=Spanlink Communications;SPLK +N104=Sparta Pharmaceuticals, Inc.;SPTA +N105=Spatializer Audio Laboratories, Inc.;SPAZ +N106=Sports International Ltd.;SBET +N107=Sports Sciences, Inc.;SSCI +N108=SunRiver Corporation;SRVC +N109=SwissRay International, Inc.;SRMI +N110=SYSTEMS of Excellence, Inc.;SEXI +N111=Vasco Data Security, Inc.;VASC +N112=Vector Aeromotive Corporation;VCAR +N113=VictorMaxx Technologies, Inc.;VMAX +N114=VideoLabs Inc.;VLAB +N115=Visual Information Services Corp.;VICP +N116=Voice Powered Technology International, Inc.;VPTI +N117=VOXEL;VOXL +N118=VSI Enterprises, Inc.;VSIN +N119=Wavetech, Inc.;ITEL +N120=Zila, Inc.;ZILA + +[NYSE] +N1=A G Edwards;AGE +N2=AAR Corporation;AIR +N3=Abbott Laboratories;ABT +N4=Abitibi Price Inc;ABY +N5=Acceptance Insurance Cos;AIF +N6=ACE Ltd;ACL +N7=ACM Gov't Income Fund;ACG +N8=ACM Gov't Income Opportunity;AOF +N9=ACM Gov't Securities Fund;GSF +N10=ACM Gov't Spectrum Fund Inc.;SI +N11=ACM Managed Dollar Income Fund;ADF +N12=ACM Managed Income Fund;AMF +N13=ACM Municipal Sec Income Fund;AMU +N14=Acme Cleveland Corp;AMT +N15=Acme Electric Corp;ACE +N16=Acordia Inc;ACO +N17=Acuson Corp;ACN +N18=ACX Technologies;ACX +N19=Adams Express Co;ADX +N20=Advanced Micro Devices;AMD +N21=Advest Group Inc;ADV +N22=Advo System Inc;AD +N23=Advocat Inc;AVC +N24=Aegon Nv;AEG +N25=Aeroflex Labs Inc;ARX +N26=Aetna Life & Casualty;AET +N27=AFLAC Inc;AFL +N28=Agco;AG +N29=AGL Resources Inc;ATG +N30=Agree Realty Corp;ADC +N31=Ahmanson(HF) & Co;AHM +N32=Ahold Nv ADR;AHO +N33=Air Products & Chem.;APD +N34=Airborne Freight Corp;ABF +N35=Airgas Inc;ARG +N36=Airlease Ltd;FLY +N37=Airtouch Communication Inc;ATI +N38=AJL Peps Trust;AJP +N39=AK Steel Holding Corp;AKS +N40=Alamo Group Inc;ALG +N41=Alaska Airlines Inc;ALK +N42=Albany Intl Corp Class A;AIN +N43=Albemarble Corp;ALB +N44=Alberta Energy Co;AOG +N45=Alberto Culver Class A;ACVA +N46=Alberto-Culver Co;ACV +N47=Albertsons Inc;ABS +N48=Alcan Aluminum;AL +N49=Alcatel Alsthom;ALA +N50=Alco Standard Corp.;ASN +N51=Alden Financial Corp;JA +N52=Alex Brown Inc;AB +N53=Alexander & Alex Svcs;AAL +N54=Alexanders Inc;ALX +N55=All American Target Term Trust;AAT +N56=Allegheny Corp;Y +N57=Allegheny Ludlim Corp;ALS +N58=Allegheny Power System;AYP +N59=Allen Group Inc;ALN +N60=Allen Interiors Inc;ETH +N61=Allergan;AGN +N62=Alliance All Market A;AMO +N63=Alliance Capital Management Lp;AC +N64=Alliance Entertainment Corp;CDS +N65=Alliance Global Environment Fund Inc.;AEF +N66=Alliance World Dol Govt Fund II;AWF +N67=Alliance World Dollar Govt;AWG +N68=Alliant Techsystems Inc;ATK +N69=Allied Irish Bancshares;AIB+ +N70=Allied Irish Banks Plc ADR;AIB +N71=Allied Products Corp;ADP +N72=Allied Signal Corp;ALD +N73=Allmerica Financial;AFC +N74=Allmerica Property And Casualty;APY +N75=Allmerica Security Trust;ALM +N76=Allstate Corp 98;PME +N77=Allstate Insurance;ALL +N78=Allstate Muni Income Tr III;TFC +N79=Allstate Muni Opp Fund;OIB +N80=Allstate Muni Premium Trust;PIA +N81=Allstate Municipal Fund;TFA +N82=Allstate Municipal Income Ii;TFB +N83=ALLTEL Corp;AT +N84=Allwaste Inc;ALW +N85=ALPharma Inc;ALO +N86=Alumax Inc;AMX +N87=Aluminum Co. Of Amer (ALCOA);AA +N88=ALZA Corp;AZA +N89=Amax Gold Inc;AU +N90=Ambac;ABK +N91=Amcast Industrial Corp;AIZ +N92=Amdin De Fondos De Pension;PVD +N93=Amer Banknote;ABN +N94=Amer Brands Inc;AMB +N95=Amer Building Maint;ABM +N96=Amer Business Prod;ABP +N97=Amer Elecric Power;AEP +N98=Amer Express;AXP +N99=Amer Financial Group;AFG +N100=Amer General Corp;AGC +N101=Amer Gov't Income Fund;AGF +N102=Amer Gov't Income Port;AAF +N103=Amer Health Properties;AHE +N104=Amer Heritage Lf Inv;AHL +N105=Amer Home Prod;AHP +N106=Amer Hotels & Realty Cp;AHR +N107=Amer Intl Group;AIG +N108=Amer Muni Term Trust Inc;AXT +N109=Amer Muni Term Trust II;BXT +N110=Amer Opportunity Income Fund;OIF +N111=Amer Precision Ind;APR +N112=Amer President Co Ltd;APS +N113=Amer Real Estate Lp;ACP +N114=Amer Realty Trust;ARB +N115=Amer Standard;ASD +N116=Amer Stores Co;ASC +N117=Amer Strategic Income Port II;BSP +N118=Amer Strategic Income Fund;ASP +N119=Amer Waste Services Inc;AW +N120=Amer Water Works;AWK +N121=Amer West Airlines;AWA +N122=Amerada Hess Corp.;AHC +N123=American Annuity Group;AAG +N124=American Eagle;FLI +N125=American Industrial Properties Reit Sbi;IND +N126=American Media Inc;ENQ +N127=American Medical Response Inc;EMT +N128=American Muni Inc Por;XAA +N129=American Muni Term Tr;CXT +N130=American Re Corp;ARN +N131=American Select Portfolio Inc;SLA +N132=American Strat Inc Port III;CSP +N133=Americas Income Trust;XUS +N134=Americredit;ACF +N135=Ameridata Technologies;ADA +N136=Amerigas Partners;APU +N137=Ameriquest Technologies;AQS +N138=Ameritech;AIT +N139=Ameron Intl Corp;AMN +N140=Ametek Inc;AME +N141=AMLI Residential Properties Trust;AML +N142=Amoco;AN +N143=AMP Inc;AMP +N144=Ampco Pittsburgh Corp;AP +N145=Ampex Corp;AXC +N146=Amphenol Cp;APH +N147=AMR Corp;AMR +N148=Amre Inc;AMM +N149=Amrep Corporation;AXR +N150=Amsco Intl Inc;ASZ +N151=Amsouth Bancorp;ASO +N152=Amvestors Finan Cp;AMV +N153=Amway Asia Pacific Ltd;AAP +N154=Amway Japan Limited;AJL +N155=Anadarko Petroleum;APC +N156=Analog Devices Inc;ADI +N157=Angelica Corporation;AGL +N158=Anheuser Busch Co.;BUD +N159=Anixter Intl;AXE +N160=Ann Taylor Inc;ANN +N161=Anthony Industries;ANT +N162=Aon Corp;AOC +N163=Apache Corp.;APA +N164=Apartment Int & Mngt;AIV +N165=Apex Municipal Fund;APX +N166=Applied Magnetics Corp;APM +N167=Applied Power Inc Class A;APW +N168=Aptargroup Inc;ATR +N169=Aquarion;WTR +N170=Aquila Gas Pipeline Corp;AQP +N171=Aracruz Celulose Sa ADR;ARA +N172=Arbor Property Trust;ABR +N173=Arcadian Corp;ACA +N174=Archer-Daniels Midland;ADM +N175=Arco Chemical;RCM +N176=Argentina Fund Inc;AF +N177=Arizona Publ Series Q;ARP+Q +N178=Armco Inc.;AS +N179=Armstrong World Ind Inc;ACK +N180=Arrow Electronics Inc;ARW +N181=Artra Group Inc;ATA +N182=Arvin Industries;ARV +N183=Asa Ltd.;ASA +N184=ASARCO Inc;AR +N185=Ashanti Goldfield Ltd;ASL +N186=Ashland Coal Inc;ACI +N187=Ashland Oil Inc.;ASH +N188=Asia Pacific;APB +N189=Asia Pacific Resources Intl;ARH +N190=Asia Pulp & Paper;PAP +N191=Asis Tigers Fund;GRR +N192=Asset Investors;AIC +N193=Associated Estates Realty Cp;AEC +N194=AT&T;T +N195=AT&T Capital Corp;TCC +N196=Atalanta Sosnoff Cap;ATL +N197=Atlantic Energy N.J.;ATE +N198=Atlantic Richfield Co.;ARC +N199=Atlantic Richfield Co;LYX +N200=Atlas Corporation;AZ +N201=Atmos Energy Corp;ATO +N202=Augat Incorporated;AUG +N203=Australia & New Zealand Bank Group;ANZ +N204=Austria Fund Inc;OST +N205=Austrialia New Zealand Bank pf;ANZ+ +N206=Austrian Stock Index Notes;SPJ +N207=Authentic Fitness Corp;ASM +N208=Automated Security Holdings;ASI +N209=Automatic Data Process;AUD +N210=Autozone Inc.;AZO +N211=Avalon Properties Inc;AVN +N212=AVEMCO Cp;AVE +N213=Avery Dennison Cp;AVY +N214=Aviall Inc;AVL +N215=Avnet Incorp.;AVT +N216=Avon Products Inc.;AVP +N217=AVX Corp;AVX +N218=Aydin Corporation;AYD +N219=Aztar Cp;AZR +N220=B J Services Co;BJS +N221=Bairnco Corp;BZ +N222=Baker Fentress & Co;BKF +N223=Baker Hughes;BHI +N224=Baldor Electric Co.;BEZ +N225=Ball Corp.;BLL +N226=Ballantyne of Omaha Inc;BTN +N227=Ballard Medical Products;BMP +N228=Bally Entertainment;BLY +N229=Baltimore Gas And Electric;BGE +N230=Banc One;ONE +N231=Banco Bilbao Vizcaya S A;BBV +N232=Banco Central Sa Dep Sh;BCH +N233=Banco Commercial Portugues ADR;BPC +N234=Banco De Edwards Adr;AED +N235=Banco De Santander Soc An;STD +N236=Banco France Del Rio De La Plata;BFR +N237=Banco Ganadero;BGA +N238=Banco Industrial Colombiano Sa;CIB +N239=Banco Latin Americano De Exportaciones;BLX +N240=Banco Ohiggins ADR;OHG +N241=Banco Osorno La Union;BOU +N242=Banco Wiese Limitado ADR;BWP +N243=Bancorp Hawaii Inc;BOH +N244=Banctech Inc;BTC +N245=Bandag Inc Cl A;BDGA +N246=Bandag Inc.;BDG +N247=Bangor Hydro El;BGR +N248=Bank Amer Pref M;BAC+M +N249=Bank America Corp;BAC +N250=Bank Of Boston Corp.;BKB +N251=Bank Of Montreal;BMO +N252=Bank Of New York Co;BK +N253=Bank of Tokyo Mitsubishi Ltd;MBK +N254=Banker Life Holdings Corp;BLH +N255=Bankers Note Inc;TBN +N256=Bankers Trust;BT +N257=Banner Aerospace Inc;BAR +N258=Barclay Banks;BCS +N259=Barclays Bank Plc Pf Series C;BCB+C +N260=Bard (C.R.) Inc;BCR +N261=Barnes & Noble Inc;BKS +N262=Barnes Group Inc;B +N263=Barnett Bank Of Florida;BBI +N264=Barrett Resource Cp;BRR +N265=Barrick Gold Corp;ABX +N266=Barry R G Cp;RGB +N267=Bass Plc Ads;BAS +N268=Battle Mountain Gold Class A;BMG +N269=Bausch & Lomb Inc.;BOL +N270=Baxter Intl;BAX +N271=Bay Apartment Community;BYA +N272=Bay State Gas Co;BGC +N273=BBN Corp;BBN +N274=BCE Inc;BCE +N275=Bea Income Fund;FBF +N276=Bea Strat Income Fund;FBI +N277=Beacon Properties;BCN +N278=Bear Stearns Co;BSC +N279=Bearings Inc;BER +N280=Beazer Homes USA Inc;BZH +N281=Beckman Instrument Inc.;BEC +N282=Becton Dickinson Co.;BDX +N283=Bedford Property Investors;BED +N284=Belden Inc;BWC +N285=Belding Hemingway;BHY +N286=Bell & Howell Co;BHW +N287=Bell Atlantic Cp.;BEL +N288=Bell Industries;BI +N289=Bell South Corp.;BLS +N290=Belo A H;BLC +N291=Bemis Co. Inc.;BMS +N292=Beneficial Corp.;BNL +N293=Benetton Group Spa;BNG +N294=Benguet Corp Class B;BE +N295=Benson Eyecare Corp;EYE +N296=Berg Electronics;BEI +N297=Bergen Brunswig Cp;BBC +N298=Berkshire Hathaway Inc;BRK +N299=Berkshire Reality Co;BRI +N300=Berlitz Intl Inc;BTZ +N301=Berry Petroleum Co Class A;BRY +N302=Best Buy Co. Inc;BBY +N303=Bet Holdings Class A;BTV +N304=Bet Public Ltd Co.;BEP +N305=Bethlehem Steel Corp.;BS +N306=Bethlehem Steel Cp Pf $5.00;BS+ +N307=Betz Laboratories Inc;BTL +N308=Beverly Enterprises;BEV +N309=Big Flower Press Holdings Inc;BGF +N310=Bindley Western Ind;BDY +N311=Bio Whittaker Inc;BWI +N312=Biocraft Labs Inc;BCL +N313=Biovail Corp;BVF +N314=Birmingham Steel Corp;BIR +N315=Black & Decker Mfg.;BDK +N316=Black Hills Corp;BKH +N317=Blackrock 1998 Term Trust Inc;BBT +N318=Blackrock 1999 Term Tr;BNN +N319=Blackrock 2001 Term Trust Inc;BLK +N320=Blackrock Advantage Term Trust;BAT +N321=Blackrock CA Ins Muni 2008;BFC +N322=Blackrock FL Ins Muni 2008;BRF +N323=Blackrock Income Trust;BKT +N324=Blackrock Ins Muni 2008;BRM +N325=Blackrock Insured Muni 2008;BMT +N326=Blackrock Inv Qual Muni;BKN +N327=Blackrock Target Trust Inc;BTT +N328=Blackstone Investment Quality Term Trust;BQT +N329=Blackstone Muni Target Term Trust Inc;BMN +N330=Blackstone N Amer Government Income Trus;BNA +N331=Blackstone Strategic Term Trust;BGT +N332=Blanch Holdings Inc;EWB +N333=Block (H & R);HRB +N334=Blount Inc Cl A;BLTA +N335=Blount Inc Cl B;BLTB +N336=Blue Chip Value Fund Inc.;BLU +N337=Bluegreen Corp;BXG +N338=Blyth Industries;BTH +N339=BMC Inc;BMC +N340=Boeing Co.;BA +N341=Boise Cascade Corp.;BCC +N342=Boise Cascade Office Products;BOP +N343=Bombay Co Inc;BBA +N344=Borden Chemical & Plastics Lp Uts;BCU +N345=Borders Group;BGP +N346=Borg Warner Automotive Inc;BWA +N347=Borg-warner Security Corp;BOR +N348=Boston Beer Co Cl A;SAM +N349=Boston Celtics Lp;BOS +N350=Boston Edison Co.;BSE +N351=Boston Scientific Corp;BSX +N352=Bowater Inc;BOW +N353=Boyd Gaming Inc;BYD +N354=Bradlees Inc;BLE +N355=Bradley Real Estate Tr Sbi;BTR +N356=Brazil Fund;BZF +N357=Brazilian Equity Fund;BZL +N358=BRE Properties Inc;BRE +N359=Breed Technology;BDT +N360=Briggs & Stratton Corp.;BGG +N361=Brilliance China Automotive Holding;CBA +N362=Brinker International Inc;EAT +N363=Bristol Hotel Co;BH +N364=Bristol Myers Squibb Co.;BMY +N365=Brit Pet Pru Bay Rlty Tr;BPT +N366=British Airways;BAB +N367=British Gas;BRG +N368=British Petroleum;BP +N369=British Petroleum ADR Pp;BP_P +N370=British Sky Broadcasting Group;BSY +N371=British Steel Pp ADR;BST +N372=British Telecom;BTY +N373=Broken Hill Propriety;BHP +N374=Brooke Group Ltd;BGL +N375=Brooklyn Union Gas Co;BU +N376=Brown & Sharpe Mfg. Co.;BNS +N377=Brown Group;BG +N378=Brown-Foreman Class B;BFB +N379=Brown-foreman Inc. Class A;BFA +N380=Browning-Ferris Ind;BFI +N381=Brt Realty Trust Sbi;BRT +N382=Brunswick Corp.;BC +N383=Brush Wellman Inc.;BW +N384=BT Office Products Int'l Inc;BTF +N385=Buckeye Cellulose Corp;BKI +N386=Buckeye Partners Lp;BPL +N387=Buenos Aires Enbotelladora ADR;BAE +N388=Bufete Industries;GBI +N389=Burlington Coat Factory Warehouse;BCF +N390=Burlington Industries Equity Inc;BUR +N391=Burlington Northern Santa Fe Corp;BNI +N392=Burlington Resource Coal Seam Gas Royalt;BRU +N393=Burlington Resources;BR +N394=Burnham Pacific Property Inc;BPP +N395=Bush Boake Allen Inc;BOA +N396=Bush Ind Inc Cl A;BSH +N397=Cable & Wireless Plc;CWP +N398=Cabletron Systems;CS +N399=Cabot Corporation;CBT +N400=Cabot Oil & Gas Cp;COG +N401=Cadence Design Sys Inc;CDN +N402=Cal Fed Bancorp Inc.;CAL +N403=Cal Reit Sbi;CT +N404=Caldor Corp;CLD +N405=Calgon Carbon Cp;CCC +N406=Cali Realty;CLI +N407=Caliber Systems;CBB +N408=Calienergy Co;CE +N409=Calif Water Serv Co;CWT +N410=Callaway Golf Cp;ELY +N411=Calmat Co.;CZM +N412=Camco International Inc;CAM +N413=Camden Property Trust Sbi;CPT +N414=Campbell Resources Inc;CCH +N415=Campbells Soup Co.;CPB +N416=Canadian Pacific Ltd.;CP +N417=Capital American Financial;CAF +N418=Capital One Financial;COF +N419=Capital Re Corp;KRE +N420=Capmac Holdings Inc;KAP +N421=Capstead Mortgage Corp;CMO +N422=Capstone Capital Cp;CCT +N423=Capsure Holdings Corp;CSH +N424=Cardinal Health Inc;CAH +N425=Career Horizons Inc;CHZ +N426=Caremark Interrnational Inc;CK +N427=Caribiner Intl Inc;CWC +N428=Carlisle Corp;CSL +N429=Carlisle Plastics Inc;CPA +N430=Carmike Cinemas Inc Class A;CKE +N431=Carnival Corp;CCL +N432=Carolina P & L 8.55%;CPD +N433=Carolina Power & Light;CPL +N434=Carpenter Technology;CRS +N435=Carr Gottstein Food;CGF +N436=Carr Realty;CRE +N437=Carson Pirie Scott & Co;CRP +N438=Carter Wallace Inc.;CAR +N439=Cascade Natural Gas;CGC +N440=Case Corp;CSE +N441=Cash Amer Investments;PWN +N442=Castech Aluminum Group;CTA +N443=Catalina Lighting Inc;LTG +N444=Catalina Marketing Cp;POS +N445=Catellus Development Cp;CDX +N446=Caterpillar Tractor;CAT +N447=CBL & Associates Properties;CBL +N448=CDI Corp;CDI +N449=Cedar Fair LP;FUN +N450=Centex Corp.;CTX +N451=Central & Southwest Cp;CSR +N452=Central European Equity Fund;CEE +N453=Central Hudson Gas & Electric;CNH +N454=Central Illinois Public Serv;CIP +N455=Central Louisiana Electric;CNL +N456=Central Maine Power;CTP +N457=Central Newspapers Inc;ECP +N458=Central Parking Corp;PK +N459=Central Transport Rental Group;TPH +N460=Central Vermont Pub Svc;CV +N461=Centura Banks Inc;CBC +N462=Centurior Energy;CX +N463=Century Telep Entpr;CTL +N464=Cenvill Invest Unpaired;CVI +N465=Ceridian Corp;CEN +N466=Champion Enterprises;CHB +N467=Champion Intl;CHA +N468=Chaparral Steel Co;CSM +N469=Chart House Enterprises Inc;CHT +N470=Chart Industries Inc;CTI +N471=Chase Brass Ind;CSI +N472=Chase Manhattan Bank Pf Series I;CMB+I +N473=Chase Manhatten 8.32;CMB+L +N474=Chase Manhatten 8.375;CMB+H +N475=Chase Manhatten 8.5;CMB+K +N476=Chase Manhatten 9.08;CMB+J +N477=Chase Manhatten pf C;CMB+C +N478=Chase manhatten pf D;CMB+D +N479=Chase Manhatten pf E;CMB+E +N480=Chase Manhatten pf F;CMB+F +N481=Chateau Properties;CPJ +N482=Chaus Bernard;CHS +N483=Check Point Systems;CKP +N484=Chelsea GCA Realty Inc;CCG +N485=Chemed Corp;CHE +N486=Chesapeake Corp;CSK +N487=Chesapeake Energy Corp;CHK +N488=Chesapeake Util Cp;CPK +N489=Chevron;CHV +N490=Chic By H I S;JNS +N491=Chile Fund;CH +N492=Chilgener ADR;CHR +N493=China Fund Inc;CHN +N494=China Tire Holding Ltd;TIR +N495=China Yuchai Intl;CYD +N496=Chiquita Brands Intl;CQB +N497=Chock Full O Nuts;CHF +N498=Chris Craft Ind.;CCN +N499=Christiana Companies;CST +N500=Chromecraft Revington Inc;CRC +N501=Chrysler;C +N502=Chubb Corp. (The);CB +N503=Church & Dwight Co Inc;CHD +N504=Chyron Corp;CHY +N505=CIGNA;CI +N506=Cigna Hi Income Shares;HIS +N507=Cilcorp Inc Hldg Co.;CER +N508=Cincinnati Bell Hldg Co.;CSN +N509=Cincinnati Milacrom;CMZ +N510=Cineplex Odeon Corp;CPX +N511=CINergy Corp;CIN +N512=Circle K Corp;CRK +N513=Circuit City Stores;CC +N514=Circus Circus Enterprises;CIR +N515=Citicorp;CCI +N516=Citicorp Pf E;CCI+E +N517=Citizens Corp;CZC +N518=Citizens Util Class A;CZNA +N519=Citizens Util Class B;CZNB +N520=City Natl Cp;CYN +N521=CKE Restaurants;CKR +N522=Claire's Stores Inc;CLE +N523=Clarcor Inc;CLC +N524=Clayton Homes Inc;CMH +N525=Clear Channel Inc;CCU +N526=Clemente Global Growth Fund;CLM +N527=Cleveland-Cliffs Inc Co.;CLF +N528=Clorox (The) Co;CLX +N529=CMAC Investments Corp;CMT +N530=CMI Corp;CMX +N531=CML Group Inc;CML +N532=CMS Energy;CMS +N533=CNA Financial;CNA +N534=CNA Income Shares Inc.;CNN +N535=Coachman Ind.;COA +N536=Coast Savings & Loan Asc;CSA +N537=Coastal Corp;CGP +N538=Coastal Physician Group;DR +N539=Coastcast Corp;PAR +N540=Coca Cola Co.;KO +N541=Coca Cola Enterprise;CCE +N542=Coca-Cola Femsa ADR;KOF +N543=Coeur D'alene Mines Cp;CDE +N544=Cohen & Steers Tot Ret;RFI +N545=Cold Metal Products Inc;CLQ +N546=Cole National;CNJ +N547=Cole Production;KCP +N548=Coleman;CLN +N549=Coles Myer Ltd ADR;CM +N550=Colgate Plus;CL+ +N551=Colgate-Palmolive Co.;CL +N552=Collins & Aikman Cp;CKC +N553=Colonial Bancgroup Class A;CNB +N554=Colonial High In Muni Tr;CXE +N555=Colonial Intermarket Income Trust I;CMK +N556=Colonial Intermediate Fund;CIF +N557=Colonial Inv Muni Tr;CXH +N558=Colonial Muni;CMU +N559=Colonial Properties Trust Sbi;CLP +N560=Coltec Industries Inc;COT +N561=Columbia Gas Systems;CG +N562=Columbia/HCA Healthcare Corp;COL +N563=Columbus Realty Trust Sbi;CLB +N564=Comdisco Inc;CDO +N565=Comerica Inc;CMA +N566=Commerce Group Inc;CGI +N567=Commercial Federal Cp;CFB +N568=Commercial Intertech Cp;TEC +N569=Commercial Metals Co;CMC +N570=Commercial Net Leasing Reality Inc;NNN +N571=Commonwealth Egy Sbi;CES +N572=Communication Satellite;CQ +N573=Community Health Systems Inc;CYH +N574=Community Psychiatric;CMY +N575=Compania De Telecomm De Chile As ADR;CTC +N576=Compaq Computer;CPQ +N577=Comprehensive Care Corp;CMP +N578=CompUSA Inc;CPU +N579=Computer Assoc Intl Inc;CA +N580=Computer Science Corp.;CSC +N581=Computer Task Group Inc;TSK +N582=Computervision Corp;CVN +N583=ConAgra Inc.;CAG +N584=Cone Mills Cp;COE +N585=Congoleum Corp;CGM +N586=Conn Energy Corp;CNE +N587=Connecticut Natural Gas;CTG +N588=Conrail Inc;CRR +N589=Cons Edison 4.65 Pf Series C;ED+C +N590=Cons Edison 5.00 Pf Series A;ED+A +N591=Conseco Inc;CNC +N592=Consl Papers Inc;CDP +N593=Consolidated Edison NY;ED +N594=Consolidated Freightway;CNF +N595=Consolidated Natural Gas;CNG +N596=Consolidated Stores Cp;CNS +N597=Consorci G Grupo Dina ADR;DIN +N598=Contifinancial Corp;CFN +N599=Continental Can Corp;CAN +N600=Continential Airlines Class A;CAIA +N601=Continential Airlines Class B;CAIB +N602=Continuum Company Inc;CNU +N603=Contl Homes Holding Cp;CON +N604=Convenience Holding Co;CNV +N605=Converse;CVE +N606=Cooker Restaurant Corp;CGR +N607=Cooper Cameron Corp;RON +N608=Cooper Industries Inc.;CBE +N609=Cooper Tire & Rubber;CTB +N610=Coopervision;COO +N611=Coram Healthcare Corp;CRH +N612=Cordiant ADR;CDA +N613=Core Business Services;CBS +N614=Core Ind. Inc;CRI +N615=Corestates Finan Cp;CFL +N616=Corimon Inc;CRM +N617=Corning Inc;GLW +N618=Corporacion Bancaria De Espana ADR;AGR +N619=Corporate High Yield Fund;COY +N620=Corporate High Yield Fd II;KYT +N621=Corrections Corp Of America;CXC +N622=Corrpro Cos;CO +N623=Counsellors Tandem Sec Fd;CTF +N624=Countrybasket France Index;GXF +N625=Countrybasket German;GXG +N626=Countrybasket Hong Kong Index;GXH +N627=Countrybasket Italy Index;GXI +N628=Countrybasket Japan;GXJ +N629=Countrybasket S Africa;GXR +N630=Countrybasket UK Index;GXK +N631=Countrybasket US Index;GXU +N632=Countrywide Credit Ind.;CCR +N633=Cousins Properties Inc;CUZ +N634=Cox Communications;COX +N635=CPC Intl;CPC +N636=CPI Corp;CPY +N637=Craig Corp;CRG +N638=Crane Co;CR +N639=Crawford & Co Class A;CRDA +N640=Crawford & Co Class B;CRDB +N641=Cray Research Inc.;CYR +N642=Credicorp Inc;BAP +N643=Crescent Real Estate Equities;CEI +N644=Crestar Financial Corp;CF +N645=CRI Liquid Reit Income Fund;CFR +N646=Criimi Mae Inc;CMM +N647=Cristalerias De Chile ADR;CGW +N648=Crompton & Knowles Cp;CNK +N649=Cross Timber Royalty Trust;CRT +N650=Cross Timbers Oil Co;XTO +N651=Crown American Realty Trust Sbi;CWN +N652=Crown Cork & Seal;CCK +N653=Crown Crafts Inc;CRW +N654=Crown Pacific Partners;CRO +N655=CSS Industries;CSS +N656=CSX Corp.;CSX +N657=CTS Corporation;CTS +N658=CUC Intl Inc;CU +N659=Culbro Corp;CUC +N660=Culligan Water Tech;CUL +N661=Cummins Engines;CUM +N662=Current Income Shares;CUR +N663=Curtiss Wright Corp;CW +N664=CWM Mortgage Holding;CWM +N665=Cycare Systems Inc;CYS +N666=Cypress Amax Minerals;CYM +N667=Cypress Semiconductor Corp;CY +N668=Cytec Industries;CYT +N669=Czech Republic Fund;CRF +N670=D R Horton Inc;DHI +N671=Daimler Benz Ag ADR;DAI +N672=Dallas Semiconductor Cp;DS +N673=Dames & Moore Inc;DM +N674=Dana Corp;DCN +N675=Danahr Corp;DHR +N676=Daniel Ind Inc;DAN +N677=Darden Restaurants;DRI +N678=Data General Corp.;DGN +N679=Data Water/waste;DWW +N680=Datapoint Corp.;DPT +N681=Dayton Hudson Corp.;DH +N682=DDL Electronics Inc;DDL +N683=De Rigo Spa Adr;DER +N684=Dean Foods Co.;DF +N685=Dean Witter Discover & Co;DWD +N686=Dean Witter Gov't Income Trust;GVT +N687=Debartolo Realty Corp;EJD +N688=Deere & Co;DE +N689=Delaware Group Div & Income Fd;DDF +N690=Deleware Group Global Dividend;DGF +N691=Delmarva Power;DEW +N692=Delta & Pine Land Co;DLP +N693=Delta Air Lines;DAL +N694=Delta Airlines P;DAL+C +N695=Delta Woodside Ind Inc;DLW +N696=Deluxe Check Printers;DLX +N697=Department 56 Inc;DFS +N698=Desc Sa De Service ADR;DES +N699=Desoto Inc;DSO +N700=Destec Energy Inc;ENG +N701=Detroit Diesel Corp;DDC +N702=Developers Diversified Reality Corp;DDR +N703=Dexter Corp;DEX +N704=Diagnostic Product Corp;DP +N705=Dial Corp (The);DL +N706=Diamond Offshore Drilling;DO +N707=Diamond Shamrock Refinery;DRM +N708=Diana Corp;DNA +N709=Diebold Inc.;DBD +N710=Digital Equipment Cp.;DEC +N711=Dillard Dept Stores;DDS +N712=Dime Bancorp Inc;DME +N713=Dimon Inc;DMN +N714=Disco Adr;DXO +N715=Discount Auto Parts Inc;DAP +N716=Disney (Walt) Prod.;DIS +N717=Dole Foods;DOL +N718=Dollar General Corp;DG +N719=Dominion Res Black Warrior Tr;DOM +N720=Dominion Resources Inc;D +N721=Domtar Inc;DTC +N722=Donaldson Co Inc;DCI +N723=Donaldson Lufkin & Jenrette Inc;DLJ +N724=Donnelley (RR) & Sons;DNY +N725=Dover Cp;DOV +N726=Dow Chemical Co.;DOW +N727=Dow Jones & Co. Inc.;DJ +N728=Downey Financial;DSL +N729=DPL Inc;DPL +N730=DQE Inc.;DQE +N731=Dravo Corp;DRV +N732=Dresser Ind.;DI +N733=Dreyfus (Louis) Natural Gas Cp;LD +N734=Dreyfus Strategic Gov't Fund;DSI +N735=Dreyfus Strategic Municipals Inc;LEO +N736=Dreyfus Strategic Muni Bond Fund Inc;DSM +N737=DST Systems Inc;DST +N738=DTE Energy Co;DTE +N739=Duff & Phelps Credit Rating;DCR +N740=Duff & Phelps Util & Cp Bond Tr;DUC +N741=Duff & Phelps Utilities;DNP +N742=Duff Phelps Utilities Tax Free Income;DTF +N743=Duke Power Co.;DUK +N744=Duke R Ca;DRE +N745=Dun & Bradstreet;DNB +N746=Dupont (EI) De Nemour;DD +N747=Dupont 3.50 Pf Series A;DD+A +N748=Dupont 4.50 Pf Series B;DD+B +N749=Duracell Intl;DUR +N750=Duty Free Intl Inc;DFI +N751=DVI Inc;DVI +N752=Dycom Industries Inc;DY +N753=Dyersburg Corp;DBG +N754=Dynamics Corp Amer;DYA +N755=E G & G;EGG +N756=E'Town Cp;ETW +N757=EA Industries Inc;EA +N758=Earthgrains Co;EGR +N759=Eastern Amer Nat Gas;NGT +N760=Eastern Enterprises;EFU +N761=Eastern Utilities Asc;EUA +N762=Eastgroup Properties Sbi;EGP +N763=Eastman Chemical Co;EMN +N764=Eastman Kodak Co.;EK +N765=Eaton Corp.;ETN +N766=ECC Group Plc ADR Spons;ENC +N767=Echlin Inc.;ECH +N768=Eckerd Corp;ECK +N769=Ecolab Inc;ECL +N770=Edison Brothers Store;EBS +N771=Edison Intl;EIX +N772=EDO Corp;EDO +N773=Educational Computer;ECC +N774=Ek Chor China Motorcycle;EKC +N775=Ekco Group;EKO +N776=El Paso Natural Gas;EPG +N777=Elan Cp Plc;ELN +N778=Elcor Corp;ELK +N779=Elf Aquitaine ADR;ELF +N780=Eljer Industrials;ELJ +N781=Elsag Bailey Process Automation;EBY +N782=Elscint Ltd.;ELT +N783=Elsevier ADR;ENL +N784=Embotelladora Andina;AKO +N785=EMC Corp;EMC +N786=Emerging Germany Fund Inc;FRG +N787=Emerging Markets Float Rate Fd;EFL +N788=Emerging Markets Income Fund;EMD +N789=Emerging Markets Income Fd II;EDF +N790=Emerging Markets Telecom Fund;ETF +N791=Emerging Mexico Fund Inc;MEF +N792=Emerging Tiger Fund;TGF +N793=Emerson Electric Co;EMR +N794=Empire District Electric;EDE +N795=Empresa Nacional De Electric;ELE +N796=Empresa Ntl De Electri;EOC +N797=Empresas Ica Sociedad Controladora Sa;ICA +N798=Empresas La Moderna;ELM +N799=Emrg Mrkt Infrastructure;EMG +N800=Energen;EGN +N801=Energy North Inc;EI +N802=Energy Ventures;EVI +N803=Enersis ADR;ENI +N804=Englehard Corp.;EC +N805=Enhance Financial Services Group;EFS +N806=ENI Adr;E +N807=Ennis Business Forms;EBF +N808=Enova Corp;ENA +N809=Enron Corp;ENE +N810=Enron Global Power & Pipeline;EPP +N811=Enron Liquids Pipeline Lp;ENP +N812=Enron Oil & Gas Co - Ny;EOG +N813=Ensco Intl;ESV +N814=ENSERCH Corp.;ENS +N815=Enserch Explor Part Ltd.;EEX +N816=Entergy Corp;ETR +N817=Enterprise Oil;ETP+ +N818=Enterprise Oil Plc ADR;ETP +N819=Environmental Elements;EEC +N820=Eott Energy Partners;EOT +N821=EQK Realty Investors;EKR +N822=Equifax Incorp.;EFX +N823=Equitable Companies Inc;EQ +N824=Equitable Of Iowa Class B;EIC +N825=Equitable Resources Co.;EQT +N826=Equity Resource Intl;EQR +N827=Esco Electronics Cp;ESE +N828=Espirito Santa Financial Holding ADR;ESF +N829=Essex Property Trust;ESS +N830=Esterline Corp;ESL +N831=Ethyl Cp;EY +N832=Europe Fund Inc;EF +N833=Evans Withycomb Residential Inc;EWR +N834=Excel Ind Inc;EXC +N835=Excel Reality Trust;XEL +N836=Excelsior Income Shrs;EIS +N837=Executive Risk Inc;ER +N838=Exel Ltd;XL +N839=Exide Corp;EX +N840=Exxon Corp.;XON +N841=F & M Natl Cp;FMN +N842=Fabri-Centers Of Amer Cl A;FCAA +N843=Factory Stores Of America Inc;FAC +N844=FAI Insurance Ltd ADR;FAI +N845=Fairchild Cp;FA +N846=Fairfield Communities;FFD +N847=Falcon Building Prod;FB +N848=Falcon Products;FCP +N849=Family Dollar Stores;FDO +N850=Fansteel Inc;FNL +N851=Farah Mfg Co.;FRA +N852=Fay's Drug Co. Inc;FAY +N853=Fedders Corp.;FJC +N854=Federal Express Corp.;FDX +N855=Federal Home Loan Cp;FRE +N856=Federal Home Loan Pref;FRE+ +N857=Federal Mogul Corp;FMO +N858=Federal Natl Mortgage;FNM +N859=Federal Rlty Inv Tr Sbi;FRT +N860=Federal Signal Corp;FSS +N861=Federated Department Stores;FD +N862=Ferrellgas Partners Lp;FGP +N863=Ferro Corp;FOE +N864=Fiat S P A Ads;FIA +N865=Fidelity Advisor Emerging Asia Fund;FAE +N866=Fidelity Advisory Korea Fund;FAK +N867=Fidelity Natl Financial Inc;FNF +N868=Fieldcrest Cannon Inc;FLD +N869=Fila Holdings Spa ADR;FLH +N870=Financial Security Assurance Holding;FSA +N871=Fingerhut Cos;FHT +N872=Finova Group;FNV +N873=First Amer Bank & Trust Class A;FOA +N874=First Amer Finan Cp;FAF +N875=First Bank Of America;FBA +N876=First Bank System Inc;FBS +N877=First Brands Cp;FBR +N878=First Chicago NBD Corp;FCN +N879=First Colony Corp;FCL +N880=First Commonwealth Financial Corp;FCF +N881=First Commonwealth Fund Inc;FCO +N882=First Data Corp;FDC +N883=First Federal Financial;FED +N884=First Fincl Fund;FF +N885=First Indust Rlty Tr;FR +N886=First Israel Fund;ISL +N887=First Mississippi Cp;FRM +N888=First Philippine Fund;FPF +N889=First Union Corp;FTU +N890=First Union Real Estate Equity;FUR +N891=First USA Inc;FUS +N892=First USA Paymentech;PTI +N893=First Va Banks Inc;FVB +N894=Firstar Corp;FSR +N895=Firstbank P Rico Commercial;FBP +N896=Fisher Scientific Intl;FSH +N897=Fleet Financial Group Inc;FLT +N898=Fleetwood Enterprises;FLE +N899=Fleming Co's Inc;FLM +N900=Fletcher Challenge Building;FLB +N901=Fletcher Challenge Energy;FEG +N902=Fletcher Challenge Ltd Forest Div;FFS +N903=Fletcher Challenge Paper;FLP +N904=Flightsafety Intl Inc;FSI +N905=Florida East Coast Ind Inc Hld;FLA +N906=Florida Progress Corp;FPC +N907=Flowers Ind.;FLO +N908=Fluke Cp;FLK +N909=Fluor Corp.;FLR +N910=FMC Cp;FMC +N911=FMC Gold Co.;FGL +N912=Food Maker;FM +N913=Foodbrands America;FDB +N914=Ford Motor Co Pf;F+ +N915=Ford Motor Co.;F +N916=Ford Pref B.8%;F+B +N917=Foreign & Colonial Emrg East;EME +N918=Fort Dearborn Income;FTD +N919=Fortis Securities Inc;FOR +N920=Foster Wheeler Corp.;FWC +N921=Foundation Health Corp;FH +N922=Foxmeyer Health Corp;FOX +N923=FPL Group;FPL +N924=France Growth Fund Inc;FRF +N925=Franchise Finance Corp Of Amer;FFA +N926=Franklin Electronic Publishers;FEP +N927=Franklin Multi Income Trust Sbi;FMI +N928=Franklin Principal Maturity Trust;FPT +N929=Franklin Quest Inc;FNQ +N930=Franklin Res Inc;BEN +N931=Franklin Universal Tr;FT +N932=Frederick Of Hollywood;FOHA +N933=Frederick's Hollywood;FOHB +N934=Freeport Mcmoran;FTX +N935=Freeport Mcmoran Copper Co;FCXA +N936=Freeport McMoran Copper & Gold Cl B;FCX +N937=Freeport McMoran Oil & Gas Tr Ubi;FMR +N938=Freeport Mcmoran Res Cp Dep;FRP +N939=Frontier Corp;FRO +N940=Frontier Insurance Grp Inc;FTR +N941=Fruehauf Trailer;FTC +N942=Fruit Of The Loom;FTL +N943=Fund Amer Enterprises Hlgs;FFC +N944=Furniture Brands Intl;FBN +N945=Furon Co;FCY +N946=Furr's/Bishop Inc;CHI +N947=G&L Realty Corp;GLR +N948=Gabelli Convtble Sec;GCV +N949=Gabelli Equity Trust Inc;GAB +N950=Gabelli Global Multimedia;GGT +N951=Gables Residential Tr;GBP +N952=Galey & Lord Inc;GNL +N953=Gallagher Arthur J & Co;AJG +N954=Galoob Lewis Toys;GAL +N955=Gannett Co. Inc.;GCI +N956=Gap Inc;GPS +N957=GATX Corp;GMT +N958=Gaylord Entertainment Co;GET +N959=GC Cos;GCX +N960=Gemini II;GMI+ +N961=Gemini II Inc Cap Shares;GMI +N962=Gen Cp;GY +N963=Gen Rad Inc.;GEN +N964=Genentech Callable Putable Common Secs;GNE +N965=General Amer Investment;GAM +N966=General Datacomm Ind.;GDC +N967=General Dynamics;GD +N968=General Electric Co.;GE +N969=General Growth Properties;GGP +N970=General Host;GH +N971=General Housewares;GHW +N972=General Instrument Cp;GIC +N973=General Mills;GIS +N974=General Motors;GM +N975=General Motors 7.92;GM+D +N976=General Motors Class E;GME +N977=General Motors Cp Cl H;GMH +N978=General Physics Corp;GPH +N979=General Public Utilities;GPU +N980=General Re Corp;GRN +N981=General Signal Corp.;GSX +N982=Genesco Inc;GCO +N983=Genesis Health Ventures;GHV +N984=Geneva Steel Cp;GNV +N985=Genuine Parts Co.;GPC +N986=Geon Inc;GON +N987=Georgia Gulf Corp;GGC +N988=Georgia Pacific Corp.;GP +N989=Georgia Power Pf L;GPE+L +N990=Gerber Scientific Inc.;GRB +N991=Germany Fund Inc;GER +N992=Gerrity Oil & Gas Cp;GOG +N993=Getty Petroleum Corp;GTY +N994=Giant Group Inc;GPO +N995=Giant Industries Inc;GI +N996=Gillette;G +N997=Glamis Gold Ltd;GLG +N998=Glaxo Plc ADR;GLX +N999=Gleason Corp;GLE +N1000=Glenborough Realty Trust Inc;GLB +N1001=Glenfed Inc Hldg Co.;GLN +N1002=Glimcher Realty Trust;GRT +N1003=Global Directmail;GML +N1004=Global Health Sciences Fund;GHS +N1005=Global High Income;GHI +N1006=Global Indust Tech Inc;GIX +N1007=Global Marine Inc;GLM +N1008=Global Natural Resources Inc;GNR +N1009=Global Partners Inc Fd;GDF +N1010=Global Small Cap Fund;GSG +N1011=GM Pref 9 1/8%;GM+Q +N1012=Goldcorp B;GGB +N1013=Goldcorp Inc;GGA +N1014=Golden West Financial;GDW +N1015=Goodrich (BF) Co.;GR +N1016=Goodrich Petroleum Corp;GDP +N1017=Goodyear Tire And Rubber;GT +N1018=Gottschalks Inc;GOT +N1019=Grace (WR) & Co.;GRA +N1020=Graco Inc;GGG +N1021=Grainger (WW);GWW +N1022=Grancare Inc;GC +N1023=Grand Casinos;GND +N1024=Grand Metropolitan Plc;GRM +N1025=Gray Communication System Inc;GCS +N1026=GRC Intl Inc;GRH +N1027=Great Atlantic/Pacific Tea;GAP +N1028=Great Lakes Chemical Corp;GLK +N1029=Great Nthrn Iron Ore;GNI +N1030=Great Western Financial;GWF +N1031=Greater China Fund;GCH +N1032=Green Mountain Power;GMP +N1033=Green Tree Acceptance;GNT +N1034=Greenbrier Cos;GBX +N1035=Greenwich Street Muni Fd;GSI +N1036=Griffon Corp;GFF +N1037=Growth Fund Of Spain Inc;GSP +N1038=Grubb & Ellis Co.;GBE +N1039=Grupo Casa Autrey ADR;ATY +N1040=Grupo Elektra SA;EKT +N1041=Grupo Embotellador De Mexico;GEM +N1042=Grupo Financiero Serfin ADR;SFN +N1043=Grupo Ind Durago;GID +N1044=Grupo Industrial Maseca;MSK +N1045=Grupo Iusacell SA class D;CELD +N1046=Grupo Iusacell Ser L;CEL +N1047=Grupo Mex Desarrollo;GMD +N1048=Grupo Radio Centro ADR;RC +N1049=Grupo Sideksa;SDK +N1050=Grupo Televisa Sa Gdr;TV +N1051=Grupo Tribasa Sa ADR;GTR +N1052=GT Global Dev Markets;GTD +N1053=Gt Great Europe Fund;GTF +N1054=GTE Corp;GTE +N1055=GTech Holdings Corp;GTK +N1056=Guaranty Natl Cp;GNC +N1057=Gucci Group NV;GUC +N1058=Guidant Corp;GDT +N1059=Guilford Mills Inc;GFD +N1060=Gulf Canada Ltd.;GOU +N1061=H&Q Healthcare Fund;HQH +N1062=H&Q Life Science Investors Inc;HQL +N1063=Haemonetics Corp;HAE +N1064=Hafslund Nycomed;HN +N1065=Halliburton Co.;HAL +N1066=Hallwood Group Inc;HWG +N1067=Hammon Hotels;JQH +N1068=Hancock Fabrics Inc;HKF +N1069=Hancock John B & Thrift Opp Fd;BTO +N1070=Hancock Patriot Dividend Fund II;PDT +N1071=Hancock Patriot Premium Div Fund Inc;PDF +N1072=Hancock Patriot Select Dividend Trust;DIV +N1073=Handleman Co.;HDL +N1074=Handy & Harman;HNH +N1075=Hanna M A Co.;MAH +N1076=Hannaford Bros Co.;HRD +N1077=Hanson Plc ADR;HAN +N1078=Harbourton Financial Services;HBT +N1079=Harcourt General Inc;H +N1080=Harland (John H) Co.;JH +N1081=Harley Davidson Inc;HDI +N1082=Harman Int'l Industries;HAR +N1083=Harnischfeger Ind. Inc.;HPH +N1084=Harrah Entertainment;HET +N1085=Harris Corp. (the);HRS +N1086=Harsco Corp;HSC +N1087=Harte Hanks Communication;HHS +N1088=Hartford Steam Boiler Ins;HSB +N1089=Hartmarx Cp;HMX +N1090=Harvey Casino Resorts;HVY +N1091=Hattaras Income Sec;HAT +N1092=Hawaiian Elect Co. Inc;HE +N1093=Hayes Wheels International;HAY +N1094=HCC Insurance Holding Inc;HCC +N1095=He Ro Group Ltd;HRG +N1096=Health Care Property Inv.;HCP +N1097=Health Care Reit;HCN +N1098=Health Care Retirement Corp;HCR +N1099=Health Images Inc;HII +N1100=Health Management Associates Inc;HMA +N1101=Health Systems Intl Inc;HQ +N1102=Health/Retirement Property Tr;HRP +N1103=Healthcare Realty Trust;HR +N1104=Healthplan Services;HPS +N1105=Healthsource Corp;HRC +N1106=Healthsource Inc;HS +N1107=Hecla Mining;HL +N1108=Heilig-Meyers Co.;HMY +N1109=Heinz H.J.;HNZ +N1110=Helmerich & Payne Inc;HP +N1111=Helvetia Fund Inc The;SWZ +N1112=Hercules Inc;HPC +N1113=Heritage U.S. Govt Income Fd;HGA +N1114=Hershey Foods Corp.;HSY +N1115=Hewlett-Packard Co.;HWP +N1116=Hexcel Corp/De;HXL +N1117=HGI Realty Inc;HGI +N1118=Hi Shear Ind.;HSI +N1119=Hi-Lo Automotive Inc;HLO +N1120=Hibernia Cp Class A;HIB +N1121=High Income Adv Tr II Sbi;YLT +N1122=High Income Adv Tr III Sbi;YLH +N1123=High Income Advantage Trust;YLD +N1124=High Income Oppor Fd;HIO +N1125=High Yield Income Fund Inc;HYI +N1126=High Yield Plus Fund Inc;HYP +N1127=Highlands Insurance Group;HIC +N1128=Highwoods Properties;HIW +N1129=Hilb, Rogal & Hamilton Co.;HRH +N1130=Hilenbrand Ind.;HB +N1131=Hilfiger Co;TOM +N1132=Hills Department Stores;HDS +N1133=Hilton Hotels Corp.;HLT +N1134=Hitachi;HIT +N1135=Hollinger Intl Inc;HLR +N1136=Home Depot;HD +N1137=Home Properties Of New York;HME +N1138=Home Shopping Network;HSN +N1139=Homeplex Mortgage Investments Cp;HPX +N1140=Homestake Mining Co.;HM +N1141=Honda Motor Co;HMC +N1142=Honeywell Inc.;HON +N1143=Hong Kong Telecom;HKT +N1144=Horace Mann Educators Cp;HMN +N1145=Horizon Healthcare Corp;HHC +N1146=Hormel Food Corp;HRL +N1147=Horsham Corp;HSM +N1148=Hospital Staffing Service Inc;HSS +N1149=Hospitality Franchise Systems Inc;HFS +N1150=Hospitality Properties Trust;HPT +N1151=Host Marriott Service;HMS +N1152=Houghton Mifflin Co.;HTN +N1153=House Of Fabrics Inc;HF +N1154=Household Int'l Inc Pf 9.5;HI+X +N1155=Household Intl.;HI +N1156=Houston Industries;HOU +N1157=Howell Corp;HWL +N1158=Hre Properties Ltd.;HRE +N1159=HS Resources;HSE +N1160=Huaneng Power Int;HNP +N1161=Hubbell Inc Cl A;HUBA +N1162=Hubbell Inc Cl B;HUBB +N1163=Hudson Foods Inc Class A;HFI +N1164=Huffy Corp;HUF +N1165=Hugh Supply Inc;HUG +N1166=Humana Inc.;HUM +N1167=Hunt Mfg Co.;HUN +N1168=Huntco Inc;HCO +N1169=Huntington Int'l Hldgs Plc ADR;HTD +N1170=Huntway Partners Lp;HWY +N1171=Hyperion 1997 Term Tr;HTA +N1172=Hyperion 1999 Term Trust Inc;HTT +N1173=Hyperion 2002 Term Tr;HTB +N1174=Hyperion 2005 Inv Grd Opp Tr;HTO +N1175=Hyperion Total Return & Income Fund;HTR +N1176=IBP Inc.;IBP +N1177=ICF Kaiser Intl Inc;ICF +N1178=ICN Pharmaceutical;ICN +N1179=Idaho Power Co.;IDA +N1180=Ideon Group;IQ +N1181=Idex Corp;IEX +N1182=IES Industries Inc;IES +N1183=Illinois Central Corp;IC +N1184=Illinois Tool Works;ITW +N1185=Illinova Corp;ILN +N1186=IMC Global Inc;IGL +N1187=Imco Recycling Inc;IMR +N1188=IMO Delaval Inc;IMD +N1189=Imperial Chemical Ind. Inc;ICI +N1190=Inco Ltd.;N +N1191=Income Opportun Fd 1999;IOF +N1192=Income Opportun Fd 2000;IFT +N1193=India Fund;IFN +N1194=India Growth Fund;IGF +N1195=Indiana Energy Inc;IEI +N1196=Indonesian Satellite Corp;IIT +N1197=Industrie Natuzzi ADR;NTZ +N1198=Infinity Broadcasting Corp;INF +N1199=Ingersoll-Rand Co.;IR +N1200=Inland Steel Co;IAD +N1201=Input-Output Inc;IO +N1202=Insignia Financial Group;IFS +N1203=Inst Nazion Dellwe Assicurazioni;INZ +N1204=Insteel Indus Inc;III +N1205=Int Technology Corp.;ITX +N1206=Int'l Game Technology;IGT +N1207=Int'l Specialty Products Inc.;ISP +N1208=Integon Corp;IN +N1209=Integra Financial Cp;ITG +N1210=Integrated Health Services Inc;IHS +N1211=Intellicall Inc;ICL +N1212=Inter Regional Financial;IFG +N1213=Intercapital Ca Ins Muni;IIC +N1214=Intercapital Ca Qual Muni Sec;IQC +N1215=Intercapital Income;ICB +N1216=Intercapital Ins Ca Muni;ICS +N1217=Intercapital Ins Muni Income Tr;IIM +N1218=Intercapital Ins Muni Sec;IMS +N1219=Intercapital Insured Municipal Bond;IMB +N1220=Intercapital Insured Municipal Trust;IMT +N1221=Intercapital NY Qual Muni Sec;IQN +N1222=Intercapital Qual Muni Inv Tr;IQI +N1223=Intercapital Qual Muni Sec;IQM +N1224=Intercapital Quality Municipal Investmen;IQT +N1225=Interlake Inc;IK +N1226=Interpool Inc;IPX +N1227=Interpublic Grp Of Co's;IPG +N1228=Interstate Bakeries;IBC +N1229=Interstate Johnson Lane Securities Inc;IJL +N1230=Interstate Power Co.;IPW +N1231=Intertan Int'l Inc;ITN +N1232=Intimate Brands Inc Cl A;IBI +N1233=Intl Aluminum;IAL +N1234=Intl Business Machines;IBM +N1235=Intl Colin Energy Cp;KCN +N1236=Intl De Ceramica ADR;ICM +N1237=Intl Family Entertainment Inc;FAM +N1238=Intl Flavor/Frag.;IFF +N1239=Intl Investment Securities;IIS +N1240=Intl Mutifoods;IMC +N1241=Intl Paper Co;IP +N1242=Intl Rectifier;IRF +N1243=Intl Shipholding Corp;ISH +N1244=Invesco Plc Adr;IVC +N1245=Ionics Inc;ION +N1246=IP Timberlands Ltd.;IPT +N1247=IPALCO Entprses Holding;IPL +N1248=Irish Investment Fund Inc;IRL +N1249=Irsa Inversiones Y Repres Grd;IRS +N1250=IRT Property/Ga;IRT +N1251=Irvine Apartment Communities;IAC +N1252=Isomedix Inc;ISO +N1253=ISS Intl Service;ISG +N1254=Istituto Mobiliare Italiano ADR;IMI +N1255=Italy Fund Inc.;ITA +N1256=ITT Corp;ITT +N1257=ITT Educational Service;ESI +N1258=ITT Hartford Group Inc;HIG +N1259=ITT Industries Inc;IIN +N1260=J&l Speciality Steel Inc;JL +N1261=Jackpot Enterprises;J +N1262=Jacobs Engineering Group;JEC +N1263=Jakarta Growth Fund Inc;JGF +N1264=James River Cp/Va;JR +N1265=Japan Equity Fund Inc;JEQ +N1266=Japan Otc Equity Fund Inc;JOF +N1267=Jardine Fleming China Region Fund;JFC +N1268=Jardine Fleming India Fund;JFI +N1269=JDN Realty Cp;JDN +N1270=Jefferies Group Inc;JEF +N1271=Jefferson Smurfit;JS +N1272=Jefferson-Pilot Corp.;JP +N1273=Jenny Craig Inc;JC +N1274=Jilin Chemical Indust;JCC +N1275=John Hancock Inc Sec;JHS +N1276=John Hancock Investment;JHI +N1277=John Hancock Pat Glob;PGD +N1278=John Hancock Patr Pf;PPF +N1279=Johnson & Johnson;JNJ +N1280=Johnson Controls;JCI +N1281=Johnstown Industries Inc;JII +N1282=Jones Apparel;JNY +N1283=Josten's Inc;JOS +N1284=JP Morgan Pref;JPM+A +N1285=JP Realty Inc;JPR +N1286=K III Communication;KCC+ +N1287=K Mart Cp;KM +N1288=K-III Communication;KCC +N1289=Kaiser Aluminum;KLU +N1290=Kaneb Pipeline Partners Lp;KPP +N1291=Kaneb Services;KAB +N1292=Kansas City Power & Light;KLT +N1293=Kansas City Sthrn Ind.;KSU +N1294=Katy Ind Inc;KT +N1295=Kaufman & Broad Home Cp;KBH +N1296=Kaydon Cp;KDN +N1297=KCS Energy Inc;KCS +N1298=Keithley Instru Inc;KEI +N1299=Kellog Co;K +N1300=Kellwood Co.;KWD +N1301=Kemper High Income Trust;KHI +N1302=Kemper Intermediate Gov't Tr;KGT +N1303=Kemper Multi Mkt Income Trust;KMM +N1304=Kemper Muni Inc Trust;KTF +N1305=Kemper Strategic Income Fd;KST +N1306=Kemper Strategic Muni Inc;KSM +N1307=Kennametal Inc;KMT +N1308=Kent Electronics Cp;KNT +N1309=Kerr Glass Mfg Co.;KGM +N1310=Kerr-McGee;KMG +N1311=Key Corp;KEY +N1312=Keystone Consol Ind.;KES +N1313=Keystone Intl.;KII +N1314=Kimberly Clark;KMB +N1315=Kimco Realty Corp;KIM +N1316=Kimmins Environmental Services Cp;KVN +N1317=King World Productions;KWP +N1318=Kinross Gold Corp;KGC +N1319=Kleinwort Benson Austral;KBA +N1320=KLM Royal Dutch Air;KLM +N1321=KN Energy Inc;KNE +N1322=Knight-Ridder Newspapers;KRI +N1323=Kohls Corp;KSS +N1324=Kollmorgen Corp;KOL +N1325=Koor Industries;KOR +N1326=Korea Electric;KEP +N1327=Korea Equity Fund;KEF +N1328=Korea Fund Inc;KF +N1329=Korean Investment Fund;KIF +N1330=Kranzco Reality Trust;KRT +N1331=Kroger Co.(the);KR +N1332=KU Energy;KU +N1333=Kubota Ltd;KUB +N1334=Kuhlman Corp;KUH +N1335=Kyocera Corp;KYO +N1336=Kysor Industrial Corp;KZ +N1337=L & N Housing Corp;LHC +N1338=L. L. & E Royalty Trust;LRT +N1339=LA Gear;LA +N1340=La Quinta Inns Inc;LQI +N1341=La-Z-Boy Chair;LZB +N1342=Laboratory Chile;LBC +N1343=Laboratory Corp Of Amer;LH +N1344=Laclede Gas Co.;LG +N1345=Lafarge Corp;LAF +N1346=Laidlaw Transportation Ltd Class B;LDWB +N1347=Laidlaw Transportation Class A;LDWA +N1348=Lakehead Pipeline Partners Lp;LHP +N1349=Lamson & Sessions Co.;LMS +N1350=Lands End Inc;LE +N1351=Lasmo Plc ADR;LSO +N1352=Latin Amer Discovery Fund;LDF +N1353=Latin Amer Equity Fund;LAQ +N1354=Latin America Dollar Income;LBF +N1355=Latin America Investment Fund Inc;LAM +N1356=Lauder (Estee) Cos Cl A;EL +N1357=Lawter Intl Inc;LAW +N1358=Lawyers Title;LTI +N1359=LCI International;LCI +N1360=Lear Seating;LEA +N1361=Learonal Inc;LRI +N1362=Lee Enterprises Inc;LEE +N1363=Legg Mason Inc;LM +N1364=Leggett & Platt Inc;LEG +N1365=Lehigh Group Inc;LEI +N1366=Lehman Brothers Holding;LEH +N1367=Lehman Latin Growth;LLF +N1368=Lennar Corporation;LEN +N1369=Leucadia Natl Corp;LUK +N1370=Leviathan Gas Pipeline;LEV +N1371=Levitz Furniture;LFI +N1372=Lexington Corporate Properties;LXP +N1373=Lexmark Intl Group;LXK +N1374=LG&E Energy Cp;LGE +N1375=Libbey Inc;LBY +N1376=Liberte Investors Sbi;LBI +N1377=Liberty All Star Equty Fund;USA +N1378=Liberty All-Star Growth Fund;ASG +N1379=Liberty Corp;LC +N1380=Liberty Financial Cos;L +N1381=Liberty Property Trus;LRY +N1382=Liberty Term Trust Inc;LTT +N1383=Life Partners Group;LPG +N1384=Life Re Corp;LRE +N1385=Lilly (Eli) & Co.;LLY +N1386=Limited Inc.;LTD +N1387=Lincoln Natl;LNC +N1388=Lincoln Natl Cv Sec Fund;LNV +N1389=Lincoln Natl Direct Plc;LND +N1390=Litton Ind. Inc.;LIT +N1391=Living Centers Of Amer Inc;LCA +N1392=Liz Claiborne;LIZ +N1393=Lockheed Martin Corp;LMT +N1394=Loctite Cp;LOC +N1395=Loews Corp;LTR +N1396=Logicon Inc;LGN +N1397=Lone Star Industries Inc.;LCE +N1398=Long Island Lighting;LIL +N1399=Longs Drug Stores Inc.;LDG +N1400=Longview Fibre Co.;LFB +N1401=Loral Corp.;LOR +N1402=Loral Space & Communicaton Ltd;LSPI +N1403=Louisiana Land/Expl.;LLX +N1404=Louisiana-Pacific;LPX +N1405=Lowe's Co Inc;LOW +N1406=LSB Ind Inc;LSB +N1407=LSI Logic Cp;LSI +N1408=LTC Properties Inc;LTC +N1409=LTV Corp;LTV +N1410=Lubrizol Corp (the);LZ +N1411=Luby's Cafeterias;LUB +N1412=Lucent Technology;LU +N1413=Lukens Inc;LUC +N1414=Luria & Sons Inc;LUR +N1415=Luxottica Group Spa;LUX +N1416=Lydall Inc;LDL +N1417=Lyondell Petrochemical;LYO +N1418=M/I Schottenstein Homes;MHO +N1419=Mac Frugal Bargain Close Out;MFI +N1420=Macerich Co;MAC +N1421=Madeco SA ADR;MAD +N1422=Maderas Sinteticos Soliedad Anonima Masi;MYS +N1423=Mafco Consl Group;MFO +N1424=Magna Intl Inc Class A;MGA +N1425=Magnetek Inc;MAG +N1426=Malan Realty Investors Inc;MAL +N1427=Malaysia Fund Inc;MF +N1428=Mallinckrodt Group;MKG +N1429=Managed High Income Port;MHY +N1430=Managed Mun Portfolio III;MTU +N1431=Managed Municipals Portfolio Inc;MMU +N1432=Manitowoc Inc;MTW +N1433=Manor Care Inc;MNR +N1434=Manpower Inc;MAN +N1435=Manufactured Homes Communities;MHC +N1436=Mapco Inc.;MDA +N1437=Marcus Cp;MCS +N1438=Maritrans Inc;TUG +N1439=Mark Center Trust Sbi;MCT +N1440=Mark IV Industries;IV +N1441=Marriott Corp;HMT +N1442=Marriott International;MAR +N1443=Marsh & Mclennan Co's;MMC +N1444=Marshall Industries;MI +N1445=Martin Lawrence Ltd Inc;MLE +N1446=Martin Marietta Materials Inc;MLM +N1447=Marvel Entertainment;MRV +N1448=Masco;MAS +N1449=Mascotech Inc;MSX +N1450=Mass Mutual Part Investors;MPV +N1451=Massmutual Corp.;MCI +N1452=Material Sciences Cp;MSC +N1453=Matlack Systems Inc;MLK +N1454=Matsushita Elec.;MC +N1455=Mattel Co.;MAT +N1456=Mauna Loa Macadamia Lp;NUT +N1457=Maxxim Medical;MAM +N1458=May Dept Stores;MA +N1459=Maytag Co. (The);MYG +N1460=MBIA Inc.;MBI +N1461=MBNA Cp;KRB +N1462=Mc Dermott J Ray Sa;JRM +N1463=Mc Kesson Corp;MCK +N1464=Mc Whorter Technology;MWT +N1465=McClatchy Newspapers Class A;MNI +N1466=McDermott Intl Inc.;MDR +N1467=McDonald & Co Inv.;MDD +N1468=McDonalds Corp.;MCD +N1469=McDonnell Douglas;MD +N1470=McGraw-Hill Cos;MHP +N1471=MCN Corp;MCN +N1472=MCN Corp Prides;MCE +N1473=MDC Holding Corp;MDC +N1474=MDU Resources Group;MDU +N1475=Mead Corp. (The);MEA +N1476=Meadowbrook Insurance Group;MIG +N1477=Measurex Corp;MX +N1478=Meditrust;MT +N1479=Medpartners/Mullikin Inc;MDM +N1480=Medtronic Inc;MDT +N1481=Medusa Corp;MSA +N1482=Mellon Bank Corp.;MEL +N1483=Mellon Bank Pfd J;MEL+J +N1484=Melville Cp;MES +N1485=MEMC Electronic Materials;WFR +N1486=Mentor Income Fund;MRF +N1487=Mercantile Bancorp;MTL +N1488=Mercantile Stores;MST +N1489=Merck & Co. Inc.;MRK +N1490=Mercury Financial;MFN +N1491=Meredith Corp.;MDP +N1492=Meridian Industrial Trust;MDN +N1493=Merrill Lynch & Co.;MER +N1494=Merrill Lynch Euro Mkt Tgt 1999;MEE +N1495=Merrill Lynch S+P 500 1998;MIE +N1496=Merry Land & Investment Co;MRY +N1497=Mesa Lp;MXP +N1498=Mesa Royalty Trust Ubi;MTR +N1499=Mesabi Trust Sbi;MSB +N1500=Mestek Inc;MCC +N1501=Metrogas;MGS +N1502=Mexico Equity & Income Fund Inc;MXE +N1503=Mexico Fund Inc;MXF +N1504=Meyer (Fred) Inc.;FMY +N1505=MFS Charter Income Trust;MCR +N1506=MFS Govt Market Income Trust;MGF +N1507=MFS Income Trust;MIN +N1508=MFS Multiple Income Trust;MFM +N1509=MFS Multiple Market Income Trust;MMT +N1510=MFS Special Value Trust;MFV +N1511=MGI Properties;MGI +N1512=MGIC Investments;MTG +N1513=MGM Grand Inc;MGG +N1514=Micron Technology;MU +N1515=Mid America Apartment Communities;MAA +N1516=Mid Atlantic Medical Serv;MME +N1517=Mid-Amer Realty Investment;MDI +N1518=Mid-Amer Waste Systems;MAW +N1519=Midamerican Energy Co;MEC +N1520=Midwest Express Holdings;MEH +N1521=Midwest Real Estate Shopping Center;EQM +N1522=Mikasa Inc;MKS +N1523=Milestone Properties Inc;MPI +N1524=Miller Industries;MLR +N1525=Millipore Corp;MIL +N1526=Mills Corp;MLS +N1527=Mineral Technologies Inc;MTX +N1528=Minnesota Mining & Manufacturing (3M);MMM +N1529=Minnesota Muni Term Trust;MNA +N1530=Minnesota Power & Light;MPL +N1531=Mirage Resorts Inc;MIR +N1532=Mitchell Energy & Dev;MNDB +N1533=Mitchell Energy/devel.;MNDA +N1534=Mitel Corp;MLT +N1535=MMI Co;MMI +N1536=Mobil Corp.;MOB +N1537=Molecular Bio Sys Inc;MB +N1538=Monarch Machine Tool;MMO +N1539=Monsanto Co.;MTC +N1540=Montana Power;MTP +N1541=Montedison S.P.A. Ord Ads;MNT +N1542=Montgomery St Income;MTS +N1543=Moore Corp Ltd;MCL +N1544=Morgan (J.P.) & Co;JPM +N1545=Morgan Grenfell Smallcup;MGC +N1546=Morgan Keegan Inc;MOR +N1547=Morgan Products Ltd;MGN +N1548=Morgan Stan Glob Opp Fd;MGB +N1549=Morgan Stanley Emer Mkt Debt Fd;MSD +N1550=Morgan Stanley Emerging Market Fund;MSF +N1551=Morgan Stanley Fin;MSV +N1552=Morgan Stanley Fin 7.82 Fd;MSU +N1553=Morgan Stanley Group;MS +N1554=Morgan Stanley High Yld Fd;MSY +N1555=Morrison Health Care Inc;MHI +N1556=Morrison-Knudsen Cp Hldg;MRN +N1557=Morton Intl Inc;MII +N1558=Morton-thiokol Inc;TKC +N1559=Mossimo Inc;MGX +N1560=Motorola Inc.;MOT +N1561=MS Africa Fund;AFF +N1562=MS Asia Fund;APF +N1563=MS India Fund;IIF +N1564=MSC Industrial Direct;MSM +N1565=Mueller Industries Inc;MLI +N1566=Multicare Cos;MUL +N1567=Muni Yield Califoria Fund;MYC +N1568=Muni Yield Florida Fund Inc;MYF +N1569=Muni Yield Michigan Fund Inc;MYM +N1570=Muni Yield New York Insured Fund;MYN +N1571=Muni-Enhanced Fund Inc.;MEN +N1572=Muniassets Fund Inc;MUA +N1573=Municipal Advantage Fd;MAF +N1574=Municipal High Income Fund;MHF +N1575=Municipal Income Opportunities Trust II;OIA +N1576=Municipal Income Opp Fd;OIC +N1577=Municipal Partners Fund;MNP +N1578=Municipal Partners Fd;MPT +N1579=Munivest CA Ins Fd;MVC +N1580=Munivest FL Fd;MVS +N1581=Munivest Fund II;MVT +N1582=Munivest MI Ins Fd;MVM +N1583=Munivest NJ Fund;MVJ +N1584=Munivest NY Ins Fd;MVY +N1585=Munivest PA Ins Fd;MVP +N1586=Muniyield CA Insured;MIC +N1587=Muniyield FL Insured Fd;MFT +N1588=Muniyield Fund;MYD +N1589=Muniyield Insured Fd II;MTI +N1590=Muniyield MI Insur Fd;MIY +N1591=Muniyield New Jersey Fund Inc;MYJ +N1592=Muniyield NJ Insur Fd;MJI +N1593=Muniyield NY Ins Fd II;MYT +N1594=Muniyield NY Ins Fd III;MYY +N1595=Muniyield PA Fd;MPA +N1596=Muniyield Quality Fd II;MQT +N1597=Muniyield Quality Fd;MQY +N1598=Munsingwear Inc;MUN +N1599=Murphy Oil Corp.;MUR +N1600=Music Land Stores;MLG +N1601=Mutual Risk Management;MM +N1602=Mylan Labs Inc;MYL +N1603=Myrs Group Inc;MYR +N1604=N.Y. Gas & Electric;NGE +N1605=Nabisco Holding;NA +N1606=Nac Re Cp;NRC +N1607=NACCO Industries;NC +N1608=Nalco Chemical Co;NLC +N1609=Nashua Corp;NSH +N1610=National Auto Credit;NAK +N1611=National Golf Properties;TEE +N1612=National Power ADR;NP +N1613=National Power Plc In;NPPP +N1614=National Steel class B;NS +N1615=Nations Balanced Targ;NBM +N1616=Nations Bank;NB +N1617=Nations Govt Inv Tr 2004;NGF +N1618=Nations Govt Inv Tr 2003;NGI +N1619=Nationwide Health Properties;NHP +N1620=Natl Australian Bank;NAB +N1621=Natl City Cp;NCC +N1622=Natl Data Cp;NDC +N1623=Natl Education Cp;NEC +N1624=Natl Fuel & Gas Co;NFG +N1625=Natl Health Investors Inc;NHI +N1626=Natl Media Cp;NM +N1627=Natl Presto Ind;NPK +N1628=Natl Re Holdings Cp;NRE +N1629=Natl Semiconductor;NSM +N1630=Natl Service Ind;NSI +N1631=Natl Standard Co;NSD +N1632=Natl Westminster Bank;NW +N1633=Navistar;NAV +N1634=NCH Corp.;NCH +N1635=Neiman Marcus;NMG +N1636=Nelson Thomas Cl B;TNMB +N1637=Network Equipment Tech;NWK +N1638=Nevada Power Co;NVP +N1639=New Age Media Fund;NAF +N1640=New Amer High Income Fund;HYB +N1641=New Eng Business Service Inc;NEB +N1642=New England Elec. System;NES +N1643=New England Investment Inc;NEW +N1644=New Germany Fund Inc;GF +N1645=New Jersey Resources;NJR +N1646=New Plan Rlty Tr Sbi;NPR +N1647=New South Africa Fund;NSA +N1648=New York Bancorp Inc;NYB +N1649=Newbridge Networkd Cp;NN +N1650=Newell Co.;NWL +N1651=Newfield Exploration Co;NFX +N1652=Newhall Land/Farming;NHL +N1653=Newmont Gold Co.;NGC +N1654=Newmont Mining Cp;NEM +N1655=Newpark Resources Inc;NR +N1656=News Corp Ltd ADR;NWS +N1657=NGL Corp;NGL +N1658=Niagara Mohawk Power;NMK +N1659=NICOR;GAS +N1660=Nike Inc Class B;NKE +N1661=Nine West Group;NIN +N1662=Nippon Telegraph & Telephone Corp ADR;NTT +N1663=Nipso Indust Inc;NI +N1664=NL Industries;NL +N1665=Noble Affiliates;NBL +N1666=Nokia Corp ADR;NOKA +N1667=NorAm Energy Corp;NAE +N1668=Nord Resources Corp;NRD +N1669=Norfolk Southern;NSC +N1670=Norrell Cp;NRL +N1671=Norsk Hydro Ads;NHY +N1672=Nortek Inc.;NTK +N1673=North American Mortgage Co;NAC +N1674=North Carolina Natural Gas;NCG +N1675=North European Oil Rlty;NET +N1676=North Fork Bancorp;NFB +N1677=Northeast Utilities;NU +N1678=Northern Border Partners Lp;NBP +N1679=Northern States Power;NSP +N1680=Northern Telecom;NT +N1681=Northgate Exploration;NGX +N1682=Northrop Grumman Corp.;NOC +N1683=Northwestern Public Serv;NPS +N1684=Norwest Corp;NOB +N1685=Nova Corp;NVA +N1686=Novacare;NOV +N1687=Novo Indust. A/S Ads;NVO +N1688=NS Group Inc;NSS +N1689=Nucor Corp;NUE +N1690=Nuevo Energy Co;NEV +N1691=NUI Corp;NUI +N1692=Nuveen (John) Co;JNC +N1693=Nuveen AZ Prem Inc Mu;NAZ +N1694=Nuveen CA Invest Qual Muni;NQC +N1695=Nuveen CA Muni Mkt Opportunity;NCO +N1696=Nuveen CA Municipal Value Fund;NCA +N1697=Nuveen CA Performance Plus Muni Fund;NCP +N1698=Nuveen CA Select Qual Muni;NVC +N1699=Nuveen California Quality Income Muni;NUC +N1700=Nuveen CT Premium Ins Mun Fd;NTC +N1701=Nuveen Florida IQ Muni Fund;NQF +N1702=Nuveen Florida Quality Income Muni Fund;NUF +N1703=Nuveen Ins CA Prem Im;NCL +N1704=Nuveen Ins CA Prem Ins Mun Fd;NPC +N1705=Nuveen Ins FL Prem Im;NFL +N1706=Nuveen Ins NY Prem Ins Mun Fd;NNF +N1707=Nuveen Ins Premium Ins Mun Fd;NPE +N1708=Nuveen Ins Premium Ins Mun Fd;NPX +N1709=Nuveen Insured CA Select Port;NXC +N1710=Nuveen Insured Muni Opportunity Fund Inc;NIO +N1711=Nuveen Insured NY Select Port;NXN +N1712=Nuveen Insured Quality Muni Fund;NQI +N1713=Nuveen Investment Quality Municipal Fund;NQM +N1714=Nuveen MA Premium Ins Mun Fd;NMT +N1715=Nuveen MD Premium Ins Mun Fd;NMY +N1716=Nuveen MI Premium Ins Mun Fd;NMP +N1717=Nuveen Michigan Quality Income Municipal;NUM +N1718=Nuveen Muni Market Opportunity Fund;NMO +N1719=Nuveen Municipal Advantage Fund;NMA +N1720=Nuveen Municipal Income;NMI +N1721=Nuveen Municipal Value Fund;NUV +N1722=Nuveen NC Premium Ins Mun Fd;NNC +N1723=Nuveen New Jersey IQ Muni Fund;NQJ +N1724=Nuveen NJ Premium Ins Mun Fd;NNJ +N1725=Nuveen Ny Investment Quality Muni Fund;NQN +N1726=Nuveen NY Municipal Value Fund;NNY +N1727=Nuveen NY Performance Plus Muni Fund;NNP +N1728=Nuveen NY Quality Ins Mun Fd;NUN +N1729=Nuveen NY Select Qual Muni;NVN +N1730=Nuveen Ohio Quality Income Municipal Fun;NUO +N1731=Nuveen PA Premium Ins Mun Fd;NPY +N1732=Nuveen Pennsylvania IQ Muni Fund;NQP +N1733=Nuveen Performance Plus Muni Fd;NPP +N1734=Nuveen Premier Insured Municipal;NIF +N1735=Nuveen Premier Municipal Fund;NPF +N1736=Nuveen Premium Income Muni Fd;NPI +N1737=Nuveen Premium Ins Mun Fd II;NPM +N1738=Nuveen Premium Ins Mun Fd IV;NPT +N1739=Nuveen Quality Investment Muni Fund;NQU +N1740=Nuveen Sel Mat Muni F;NIM +N1741=Nuveen Sel Tax-free 3;NXR +N1742=Nuveen Select Quality Muni Fund Inc;NQS +N1743=Nuveen Select Tax Free Income Portfolio;NXP +N1744=Nuveen Select Tax-Free Income Port;NXQ +N1745=Nuveen Texas Quality Income Municipal;NTX +N1746=Nuveen VA Premium Ins Mun Fd;NPV +N1747=Nymagic Inc;NYM +N1748=Nynex;NYN +N1749=Oak Industries;OAK +N1750=Oakley Inc;OO +N1751=Oakwood Homes Corp;OH +N1752=Oasis Residential Inc;OAS +N1753=Occidental Petrole;OXY +N1754=Oceaneering Intl Inc;OII +N1755=OEA Inc;OEA +N1756=OEC Medical Systems Inc;OXE +N1757=Office Depot Inc;ODP +N1758=OfficeMax Inc;OMX +N1759=Ogden Corp.;OG +N1760=Ohio Edison;OEC +N1761=Ohm Cp;OHM +N1762=Oil-Dri Cp;ODC +N1763=Oklahoma Gas & Electric;OGE +N1764=Old Republic Intl;ORI +N1765=Olin Corp;OLN +N1766=Olsten Corp;OLS +N1767=Omega Healthcare Investors Inc;OHI +N1768=Omnicare Inc;OCR +N1769=Omnicom Group Inc;OMC +N1770=Oneida Ltd;OCQ +N1771=Oneita Ind;ONA +N1772=ONEOK Inc.;OKE +N1773=Oppenheimer Capital Lp;OCC +N1774=Oppenheimer Multi Fund;OMS +N1775=Oppenheimer Multi Gov't Tr;OGT +N1776=Orange & Rockland Util;ORU +N1777=Orange Co;OJ +N1778=Orbital Engine Ltd;OE +N1779=Oregon Steel Mills Inc;OS +N1780=Oriental Bank & Trust;OBT +N1781=Orion Capital Corp;OC +N1782=Ornda Healthcorp;ORN +N1783=Oryx Energy;ORX +N1784=Osmonics Inc;OSM +N1785=Osullivans Industries Holding;OSU +N1786=Outboard Marine Corp.;OM +N1787=Overseas Shiphldg Grp;OSG +N1788=Owen Illinois;OI +N1789=Owens & Minor Inc;OMI +N1790=Owens-Corning;OCF +N1791=Oxford Ind Cl A;OXM +N1792=P P&L Resources;PPL +N1793=Pacific Amer Inc Shr;PAI +N1794=Pacific Corp;PPW +N1795=Pacific Enterprises;PET +N1796=Pacific Gas And Electric;PCG +N1797=Pacific Scientific Co.;PSX +N1798=Pacific Telesis Corp.;PAC +N1799=Pacificorp Quids;PCQ +N1800=Paine Webber Group;PWJ +N1801=Paine Webber Prem Hi Inc Tr;PHT +N1802=Paine Webber Prem Ins Muni Tr;PIF +N1803=Paine Webber Prem Tax Fr Income;PPM +N1804=Pakistan Investment Fund;PKF +N1805=Pall Cp;PLL +N1806=Panamerican Beverage Inc;PB +N1807=Panhandle Eastern Corp;PEL +N1808=Par Technology;PTC +N1809=Paragon Group;PAO +N1810=Paragon Trade Brands Inc;PTB +N1811=Park Electrochemical;PKE +N1812=Parker & Parsley Petroleum Co;PDP +N1813=Parker Drilling Co.;PKD +N1814=Parker Hannifin Corp.;PH +N1815=Patriot American Hospitality;PAH +N1816=Paxar Co;PXR +N1817=Payless Cashways Inc;PCS +N1818=Pec Israel Economic Cp;IEC +N1819=Pechiney Adr;PY +N1820=PECO Energy Co;PE +N1821=Penn Enterprises;PNT +N1822=Penn Traffic Co;PNF +N1823=Penncorp Financial Group;PFG +N1824=Penney (JC) Co. Inc.;JCP +N1825=Pennzoil Co.;PZL +N1826=Peoples Energy Corp;PGL +N1827=Pep Boys Manny, Moe, & Jack;PBY +N1828=Pepsi Co. Inc.;PEP +N1829=Pepsi-Cola Puerto Rico Bottling Cl B;PPO +N1830=Perkin Elmer Corp.;PKN +N1831=Perkins Farm Restaurants;PFR +N1832=Permian Basin Rlty Ubi;PBT +N1833=Personnel Group of Amer;PGA +N1834=Perusahaan Perseroan;TLK +N1835=Petro-Canada;PCZ +N1836=Petro-Canada 1st Installments;PCZPP +N1837=Petroleum & Resources;PEO +N1838=Pfizer Inc;PFE +N1839=Pharmaceutical Resources Inc;PRX +N1840=Pharmacia & Upjohn Inc;PNU +N1841=Phelps Dodge Corp.;PD +N1842=PHH Group Inc;PHH +N1843=Philadelphia Suburban;PSC +N1844=Philip Morris Inc;MO +N1845=Philippine Long Dist Tele;PHI +N1846=Phillips Electronics NV;PHG +N1847=Phillips Petroleum Co.;P +N1848=Phillips-Van Heusen Cp;PVH +N1849=Phoenix Duff & Phelps Corp;DUF +N1850=PHP Healthcare Cp;PPH +N1851=Physician Resource Group;PRG +N1852=Piccadilly Cafeteria;PIC +N1853=Piedmont Natural Gas;PNY +N1854=Pier 1;PIR +N1855=Pilgram America Prime Rate Trust;PPR +N1856=Pilgrim Amer Bank & Thrift Funds;PBS +N1857=Pilgrims Pride Corp;CHX +N1858=Pillowtex Corp;PTX +N1859=Pimco Advisory;PA +N1860=Pimco Commercial Mortgage Security Tru;PCM +N1861=Pinnacle West Capital Corp.;PNW +N1862=Pioneer Electronic ADR;PIO +N1863=Pioneer Finan Serv;PFS +N1864=Pioneer Financial Serv 225 Pr;PFS+ +N1865=Pioneer Hi Bred Intl;PHB +N1866=Pioneer Interest Shares;MUO +N1867=Piper Jaffray Inc;PJC +N1868=Pitney Bowes Inc.;PBI +N1869=Pittston Brinks Group;PZB +N1870=Pittston Burlington Group;PZX +N1871=Pittston Mineral Group;PZM +N1872=Placer Dome Inc.;PDG +N1873=Plantronics Inc;PLT +N1874=Playboy Enterprises;PLA +N1875=Playboy Enterprises A;PLAA +N1876=Playtex Products;PYX +N1877=Plum Creek;PCL +N1878=Ply Gem Ind;PGI +N1879=PMI Group;PMA +N1880=PNC Financial;PNC +N1881=Pogo Producing Co.;PPP +N1882=Pohang Iron & Steel Co;PKX +N1883=Polaris Indus Lp;PII +N1884=Polaroid Corp.;PRD +N1885=Policy Management Systems Cp;PMS +N1886=Polygram Nv;PLG +N1887=Poncebank Fsb;PBK +N1888=Pope & Talbot Inc;POP +N1889=Portec Inc;POR +N1890=Portland Gas & Elec.;PGN +N1891=Portugal Fund;PGF +N1892=Portugal Telecom;PT +N1893=Post Properties Inc;PPS +N1894=Potash Cp;POT +N1895=Potlatch Corp.;PCH +N1896=Potomac Utilities;POM +N1897=Power Control Tech;ATP +N1898=Powergen ADR;PWG +N1899=Powergen Plc Fst Inte;PWGPP +N1900=PPG Ind. Inc;PPG +N1901=Praxair Inc;PX +N1902=Precision Castparts Cp;PCP +N1903=Preferred Income Fund Inc;PFD +N1904=Preferred Income Mgmt;PFM +N1905=Preferred Income Opportunity Fund;PFO +N1906=Premark Intl Inc;PMI +N1907=Premdor Inc;PI +N1908=Premier Farnell Pld;PFP +N1909=Presley Cos;PDC +N1910=Pride Cos Lp;PRF +N1911=Primark Corp;PMK +N1912=Prime Hospitality Inns Inc;PDQ +N1913=Prime Motor Inns Lp;PMP +N1914=Proctor & Gamble Co.;PG +N1915=Progressive Corp (Ohio);PGR +N1916=Proler Intl;PS +N1917=Promus Hotel;PRH +N1918=Prospect Street Hi Income;PHY +N1919=Protective Life Cp;PL +N1920=Provident Life & Accident Insurance Cl A;PVT +N1921=Providian Corp;PVN +N1922=Prudential Reinsurance Holdings Inc;RE +N1923=PS Group Inc;PSG +N1924=Public Serv Co Of N C;PGS +N1925=Public Service Co Colo;PSR +N1926=Public Service Electric Gas;PEG +N1927=Public Service New Mexico;PNM +N1928=Public Storage Inc;PSA +N1929=Publicker Industries;PUL +N1930=Puerto Rican Cement;PRN +N1931=Puget Sound Power & Light;PSD +N1932=Pulitzer Publishing Co;PTZ +N1933=Pulte Corp;PHM +N1934=Putnam Dividend Income Fund;PDI +N1935=Putnam High Income Trust;PCF +N1936=Putnam High Muni;PYM +N1937=Putnam Intermediate Govt Trust;PGT +N1938=Putnam Inv Grd Mun Tr II;PMG +N1939=Putnam Investment Grade Muni Trust;PGM +N1940=Putnam Managed Hi Yield Tr;PTM +N1941=Putnam Management Muni Inc Tr;PMM +N1942=Putnam Master Income Trust;PMT +N1943=Putnam Master Interm Income Trust;PIM +N1944=Putnam Mun Opp Trust;PMO +N1945=Putnam Premier Income Trust;PPT +N1946=Putnam Tax-Free Health Care Fund;PMH +N1947=QMS Inc;AQM +N1948=Quaker Oats Co.;OAT +N1949=Quaker State Oil Ref;KSF +N1950=Quanex Corp;NX +N1951=Quantum Restaurants Group;KRG +N1952=Quebecor Printing;PRW +N1953=Quest For Value Cap Shares;KFV +N1954=Quest For Value Income Shares;KFV+ +N1955=Questar Corp Holding Co.;STR +N1956=Quick & Reilly Group Inc;BQR +N1957=Quilmes Indust Societe Anonyme;LQU +N1958=Ralcorp Holdings Inc;RAH +N1959=Ralston Purina Group;RAL +N1960=Ranger Oil Ltd;RGO +N1961=Rauma Oy ADR;RMA +N1962=Raychem Corp;RYC +N1963=Raymond James Financial;RJF +N1964=Rayonier Inc;RYN +N1965=Rayonier Timberlands Lp;LOG +N1966=Raytech Corp Hldg & Co Del;RAY +N1967=Raytheon Co.;RTN +N1968=RCM Strategic Global;RCS +N1969=Reader's Digest Assn cl B;RDB +N1970=Reader's Digest Association Inc Class A;RDA +N1971=Reading $ Bates Cp;RB +N1972=Realty Income Fund;O +N1973=Realty Refund Tr Sbi;RRF +N1974=Red Lion Hotels Inc;RL +N1975=Red Roof Inns;RRI +N1976=Reebok Intl Ltd;RBK +N1977=Reed Intl ADR;RUK +N1978=Regency Realty Corp;REG +N1979=Reinsurance Group Of America;RGA +N1980=Reliance Steel & Aluminum;RS +N1981=Reliastar Fncl;RLR +N1982=Relience Group Holding;REL +N1983=Renaissance Communications Corp;RRR +N1984=Renaissance Hotel Group;RHG +N1985=Renal Treatment Center;RXT +N1986=Repsol ADR;REP +N1987=Republic Group Inc;RGC +N1988=Republic NY Cp;RNB +N1989=Resource Mortgage Capital Inc;RMR +N1990=Retirement Care Associates;RCA +N1991=Revco D S Inc;RXR +N1992=Revere (Paul) Corp;PRL +N1993=Revlon Inc Cl A;REV +N1994=Rex Stores Corp;RSC +N1995=Rexel Inc;RXL +N1996=Rexene Corp;RXN +N1997=Reynolds & Reynolds Co Class A;REY +N1998=Reynolds Metals Co.;RLM +N1999=Rhoders Inc;RHD +N2000=Rhone Poulenc ADR;RP +N2001=Rhone-Polenc Rorer Inc;RPR +N2002=Rightchoice Managed Care;RIT +N2003=Rite Aid Corp;RAD +N2004=RJR Nabisco Hldg;RN +N2005=RJR Nabisco pf C;RN+C +N2006=RLI Corp;RLI +N2007=RMI Titanium Co;RTI +N2008=Roadmaster Ind Inc;RDM +N2009=Robert Half Intl Inc;RHI +N2010=Robertson (HH) Co.;RHH +N2011=Roc Communities Inc;RCI +N2012=ROC Taiwan Fund;ROC +N2013=Rochester Gas & Electric;RGS +N2014=Rockerfeller Center Prop;RCP +N2015=Rockwell Intl;ROK +N2016=Rodman & Renshaw Cap Grp;RR +N2017=Rogers Communication;RG +N2018=Rohm & Hass Co.;ROH +N2019=Rohr Ind Inc.;RHR +N2020=Rollins Environmental Svcs Inc;REN +N2021=Rollins Inc;ROL +N2022=Rollins Truck Leasing Corp;RLC +N2023=Rouge Steel Co;ROU +N2024=Rouse Co;RSE +N2025=Rowan Companies Inc.;RDC +N2026=Rowe Furniture Cp;ROW +N2027=Royal Appliance Mfg Co;RAM +N2028=Royal Bank of Canada;RY +N2029=Royal Bank Scotland 9.5;RBS+C +N2030=Royal Bank Scotland;RBS+ +N2031=Royal Carribean Cruise Ltd;RCL +N2032=Royal Dutch Petroleum ADR;RD +N2033=Royal Plastics Group Inc;RYG +N2034=Royal PTT Netherland Adr;KPN +N2035=Royce Value Trust Inc;RVT +N2036=RPC Inc;RES +N2037=RPS Realty Tr Sbi;RPS +N2038=RTZ Plc ADR;RTZ +N2039=Rubbermaid Inc;RBD +N2040=Ruby Tuesday Inc;RI +N2041=Ruddick Corp;RDK +N2042=Russ Berrie & Co;RUS +N2043=Russell Cp;RML +N2044=Ryder Systems Inc.;R +N2045=Rykoff Sexton;RYK +N2046=Ryland Group Inc;RYL +N2047=Rymer Co.;RYR +N2048=Sabine Royalty Tr;SBR +N2049=Safeguard Scientific;SFE +N2050=Safety-Kleen Corp;SK +N2051=Safeway Inc;SWY +N2052=Saga Petroleum ADR;SPMB +N2053=Salant Corp;SLT +N2054=Saloman Inc pf D;SB+D +N2055=Salomon Bros WW Inc Fd;SBW +N2056=Salomon Brothers Fund Inc;SBF +N2057=Salomon Brothers High Income Fund;HIF +N2058=Salomon Brothers Inc;SB +N2059=San Anita Rlty Entp;SAR +N2060=San Juan Basin Realty;SJT +N2061=Sanifill Inc;FIL +N2062=Santa Fe Energy Resources Inc;SFR +N2063=Santa Fe Energy Trust Spers;SFF +N2064=Santa Fe Pacific Gold Corp;GLD +N2065=Santa Fe Pacific Pipeline Lp;SFL +N2066=Santa Isabel Sa;ISA +N2067=Santander Overseas Bank Nc;OPR+ +N2068=Sara Lee;SLE +N2069=Saul Centers Inc;BFS +N2070=Savannah Foods & Ind;SFI +N2071=Sbarro Cp;SBA +N2072=SBC Communication;SBC +N2073=Scana Corp;SCG +N2074=Scania Ab Cl A Adr;SCVA +N2075=Scania AB cl B Adr;SCVB +N2076=Schawk Inc Cl A;SGK +N2077=Scheitzer-Mauduit Intl Inc;SWM +N2078=Scherer (R.P.) Cp;SHR +N2079=Schering-Plough Corp.;SGP +N2080=Schlumberger Ltd;SLB +N2081=Schroder Asian Fund;SHF +N2082=Schroeder Sth Africa;SOA +N2083=Schuller Corp;GLS +N2084=Schwab Charles;SCH +N2085=Scientific Atlanta Inc.;SFA +N2086=Scotsman Ind. Inc;SCT +N2087=Scott Liquid Gold;SGD +N2088=Scripps (E.W) Co. Class A;SSP +N2089=Scudder New Asia Fund Inc;SAF +N2090=Scudder New Europe Fund Inc;NEF +N2091=Scudder World Income;SWI +N2092=Sea Containers Cl A;SCRA +N2093=Sea Containers Ltd Class B;SCRB +N2094=Seagram Co. Ltd.;VO +N2095=Seagull Energy Corp;SGO +N2096=Sealed Air Corp;SEE +N2097=Sears Pf;S+A +N2098=Sears Roebuck & Co.;S +N2099=Security Capital Ind;SCN +N2100=Security Capital Pacific Trust;PTR +N2101=Seitel Inc.;SEI +N2102=Seligman Quality Municipal Fund;SQF +N2103=Seligman Select Muni Fund Inc;SEL +N2104=Sensormatic Electronics;SRM +N2105=Sequa Corp Class A;SQAA +N2106=Sequa Corp Class B;SQAB +N2107=Service Corp Intl;SRV +N2108=Service Merchandise;SME +N2109=Servicemaster Lp;SVM +N2110=SGS Thomson Microelectronics;STM +N2111=Shandong Huaneng Power Development ADR;SH +N2112=Shanghai Petrochemical ADR;SHI +N2113=Shaw Ind Inc;SHX +N2114=Shelby Williams Ind;SY +N2115=Shell Transport ADR;SC +N2116=Sherwin Williams Co.;SHW +N2117=Sherwood Group;SHD +N2118=Shoney's Restaurants;SHN +N2119=Shop Ko Stores;SKO +N2120=Showboat Inc;SBO +N2121=Shurgard Storage Centers;SHU +N2122=Sierra Health Services Inc;SIE +N2123=Sierra Pac Res Hldg;SRP +N2124=Sigcorp Inc;SIG +N2125=Signal Apparel Co.;SIA +N2126=Signet Banking Cp;SBK +N2127=Silicon Graphics Inc;SGI +N2128=Simon Property Group;SPG +N2129=Singapore Fund Inc;SGF +N2130=Singer Co;SEW +N2131=Sinter Metal Inc;SNM +N2132=Sizeler Property Invstrs;SIZ +N2133=Sizzler Intl;SZ +N2134=Skyline Corp.;SKY +N2135=SL Industries Inc;SL +N2136=Smart & Final Inc;SMF +N2137=Smith AO Class B;AOS +N2138=Smith Charles Realty Inc;SRW +N2139=Smith Corona;SCO +N2140=Smith Food & Drugs Cl B;SFD +N2141=Smith Intl Inc;SII +N2142=Smithkline Beecham Plc Ads;SBH +N2143=Smucker (JM) Co. Class A;SJMA +N2144=Smucker (JM) Co. Class B;SJMB +N2145=Snap-On Inc;SNA +N2146=Snyder Oil Cp;SNY +N2147=Sociedad Quinica Minera De Chile;SQM +N2148=Sofamor/Danek Group;SDG +N2149=Sola Intl Inc;SOL +N2150=Solectron Cp;SLR +N2151=Sonat Inc.;SNT +N2152=Sonat Offshore Drilling Inc;RIG +N2153=Sonoco Products Co;SON +N2154=Sony Cp ADR;SNE +N2155=Sotheby's Holdings Inc;BID +N2156=Source Capital Inc;SOR +N2157=South Jersey Ind.;SJI +N2158=Southdown Inc;SDW +N2159=Southern Calif Water;SCW +N2160=Southern Co.;SO +N2161=Southern Natl Cp;SNB +N2162=Southern New England Tech;SNG +N2163=Southern Pacific Rail Inc;RSP +N2164=Southern Peru Copper Cp;PCU +N2165=Southern Union Co;SUG +N2166=Southwest Airlines;LUV +N2167=Southwest Gas Corp;SWX +N2168=Southwestern Energy;SWN +N2169=Southwestern Property Trust;SWP +N2170=Southwestern Public Service;SPS +N2171=Sovran Self Storage;SSS +N2172=Spaghetti Warehouse;SWH +N2173=Spain Fund;SNF +N2174=Spartech Cp;SEH +N2175=Sparton Corp;SPA +N2176=Speedway Motorsport;TRK +N2177=Spelling Entertainment;SP +N2178=Sphere Drake Holding Ltd;SD +N2179=Spieker Properties Inc;SPK +N2180=Sport Supply Group Inc;GYM +N2181=Sports & Recreation Inc;WON +N2182=Sports Authority;TSA +N2183=Springs Industries;SMI +N2184=Sprint Corp;FON +N2185=Sprint Cp Exchangbl D;FXN +N2186=SPS Technologies;ST +N2187=SPS Transaction Services Inc;PAY +N2188=SPX Cp;SPW +N2189=St Joe Paper Co;SJP +N2190=St John Knits Inc;SJK +N2191=St Joseph Power & Light;SAJ +N2192=St Paul Companies;SPC +N2193=Standard Commercial Corp;STW +N2194=Standard Federal Bancorp;SFB +N2195=Standard Motor Prod Class A;SMP +N2196=Standard Products Co.;SPD +N2197=Standard-pacific Cp;SPF +N2198=Standex Intl;SXI +N2199=Stanhome Inc;STH +N2200=Stanley Works (the);SWK +N2201=Star Bancorp;STB +N2202=Starret (LS) Co. (The);SCX +N2203=Starter Corp;STA +N2204=Starwood Lodging;HOT +N2205=State Street Boston;STT +N2206=Sterile Concept Holdings;SYS +N2207=Sterling Bancorp;STL +N2208=Sterling Chemical;STX +N2209=Sterling Commerce Inc;SE +N2210=Sterling Electronics;SEC +N2211=Sterling Software Inc;SSW +N2212=Stet Societa Finanziaria Telefonica ADR;STE +N2213=Stewart Information Serv;STC +N2214=Stifel Financial Corp;SF +N2215=Stone & Webster Inc;SW +N2216=Stone Container Corp.;STO +N2217=Stone Energy Corp;SGY +N2218=Stop & Shop Cos;SHP +N2219=Storage Technology;STK +N2220=Storage Trust Realty;SEA +N2221=Storage USA;SUS +N2222=Strategic Global Income Fund Inc;SGL +N2223=Stratus Computer Inc;SRA +N2224=Stride Rite Corp;SRR +N2225=Student Loan Corp;STU +N2226=Student Loan Mtg Assoc;SLM +N2227=Sturm Ruger & Co Inc;RGR +N2228=Suburban Propane Partners;SPH +N2229=Summit Bancorp;SUB +N2230=Summit Properties Inc;SMT +N2231=Sun Co. Inc.;SUN +N2232=Sun Communities Inc;SUI +N2233=Sun Energy Pt Lp Dep;SLP +N2234=Sun Healthcare Group;SHG +N2235=Sun Intl Hotels Ltd;SIH +N2236=Sunamerica Inc;SAI +N2237=Sunbeam Co;SOC +N2238=Suncoast Industries Inc;SN +N2239=Sundstrand Corp;SNS +N2240=Sunrise Medical Inc;SMD +N2241=Sunshine Mining & Refining;SSC +N2242=Sunsource Lp Cl A;SDP +N2243=Sunsource Lp Cl B;SDPB +N2244=SunTrust Bank Inc;STI +N2245=Super Food Services Inc;SFS +N2246=Superior Industries Intl;SUP +N2247=Supervalu Inc;SVU +N2248=Swift Energy;SFY +N2249=Sybron International Corp;SYB +N2250=Symbol Technology;SBL +N2251=Syms Corp;SYM +N2252=Synovus Financial Cp;SNV +N2253=Syratech Corp;SYR +N2254=Sysco Corp;SYY +N2255=Tadiran Ltd;TAD +N2256=Taiwan Equity Fund;TYW +N2257=Taiwan Fund;TWN +N2258=Talbot Inc;TLB +N2259=Tally Industries Inc;TAL +N2260=Tambrands Inc;TMB +N2261=Tandem Computers;TDM +N2262=Tandy Corp.;TAN +N2263=Tandycrafts Inc;TAC +N2264=Tanger Factory Outlet Centers;SKT +N2265=Taubman Centers Inc;TCO +N2266=Taurus Muni CA Holdings Inc;MCF +N2267=Taurus Muni NY Holdings Inc;MNY +N2268=TB Woods Corp;TBW +N2269=TCBY Enterprises Inc;TBY +N2270=TCC Industries;TEL +N2271=TCF Financial;TCB +N2272=TCW Convertible Sec Fund;CVT +N2273=TCW/DW Emerging Mkt Opp Tr;EMO +N2274=TCW/DW Term Trust 2000;TDT +N2275=TCW/DW Term Trust 2003;TMT +N2276=TCW/DW Term Trust 2002;TRM +N2277=TDK Corp;TDK +N2278=Tech-Sym Corp;TSY +N2279=Teckson Associates Rl;RA +N2280=Teco Energy;TE +N2281=Teekay Shipping Cp;TK +N2282=Tejas Gas Cp;TEJ +N2283=Tektronix Inc.;TEK +N2284=Tele Danmark ADR;TLD +N2285=Telecom Argentina Stet-france;TEO +N2286=Telecom Of New Zealand;NZT +N2287=Telecomm Brasileiras Adr;TBR +N2288=Teledyne Inc.;TDY +N2289=Teleflex Inc.;TFX +N2290=Telefonica De Argentina ADR;TAR +N2291=Telefonica De Espana ADR;TEF +N2292=Telefonos De Mexico;TMX +N2293=Telex Chile;TL +N2294=Temple-Inland Inc;TIN +N2295=Templeton China World Fund;TCH +N2296=Templeton Emerg Mkt Appr Fd;TEA +N2297=Templeton Emerg Mkt Inc Fd;TEI +N2298=Templeton Emerging Market Fund;EMF +N2299=Templeton Global Gov't In Tr;TGG +N2300=Templeton Global Income Fund;GIM +N2301=Templeton Russia Fund Inc;TRF +N2302=Templeton Vietnam Oppt Fund;TVF +N2303=Templton Dragon;TDF +N2304=Tenet Healthcare Corp;THC +N2305=Tenneco Inc.;TEN +N2306=Tennessee Valley Auth;TVA +N2307=Teppco Partners Lp;TPP +N2308=Teradyne Inc.;TER +N2309=Terex Cp;TEX +N2310=Terra Industries;TRA +N2311=Terra Nitrogen;TNH +N2312=Terra Nova Holdings Ltd;TNA +N2313=Tesoro Petrolium Corp.;TSO +N2314=Texaco Inc.;TX +N2315=Texaco Pr B;TXC+B +N2316=Texas Industries Inc.;TXI +N2317=Texas Instruments;TXN +N2318=Texas Pacific Land Tr;TPL +N2319=Texas Utility;TXU +N2320=Texfi Ind. Inc;TXF +N2321=Textron Inc.;TXT +N2322=Thackeray Corp;THK +N2323=Thai Capital Fund Inc;TC +N2324=Thai Fund;TTF +N2325=The European Warrant Fund Inc;EWF +N2326=The Indonesia Fund Inc;IF +N2327=Thermo Electron Corp;TMO +N2328=Thomas & Betts Corp.;TNB +N2329=Thomas Ind. Inc;TII +N2330=Thomas Nelson Inc;TNM +N2331=Thor Industries Inc;THO +N2332=Thornburg Mortgage Asset Corp;TMA +N2333=Three 60 Communication;XO +N2334=Three Five Systems Inc;TFS +N2335=Thrifty Payless Holdings Cl B;TPD +N2336=Tidewater Inc;TDW +N2337=Tiffany & Co.;TIF +N2338=TIG Holdings Inc;TIG +N2339=Timberland;TBL +N2340=Time Warner Inc;TWX +N2341=Times Mirror Co;TMC +N2342=Timken Co.;TKR +N2343=TIS Mortgage Investment Co;TIS +N2344=Titan Corp;TTN +N2345=Titan Holdings Inc;TH +N2346=Titan Wheel International;TWI +N2347=TJX Companies Inc;TJX +N2348=Tnp Enterprises Inc;TNP +N2349=Toastmaster Inc;TM +N2350=Todd Shipyards Cp;TOD +N2351=Tokheim Corp;TOK +N2352=Toll Brothers Inc;TOL +N2353=Tomkins Plc ADR;TKS +N2354=Tootsie Roll Ind.;TR +N2355=Torch Energy Royalty;TRU +N2356=Torchmark Corp;TMK +N2357=Toro Co;TTC +N2358=Tosco Corp.;TOS +N2359=Total ADR;TOT +N2360=Total Renal Care Holdings Inc;TRL +N2361=Total System Service Inc;TSS +N2362=Town & Country Trust Sbi;TCT +N2363=Toy Biz;TBZ +N2364=Toys R Us;TOY +N2365=Trans Canada Pipeins Ltd.;TRP +N2366=Trans Technology Corp;TT +N2367=Transamerica Corp.;TA +N2368=Transamerican Income;TAI +N2369=Transatlantic Holdings Inc;TRH +N2370=Transcontinental Realty;TCI +N2371=Transmedia Network;TMN +N2372=Transportadora De Gas Del Sur ADR;TGS +N2373=Transportation Maritima Mexicana ADR;TMM +N2374=Transportation Maritima Mexicana ADR A;TMMA +N2375=Transpro Inc;TPR +N2376=Travelers Group Inc;TRV +N2377=Travelers/Aetna Property Casualty;TAP +N2378=TRC Inc;TRR +N2379=Tredegar Industries Inc;TG +N2380=Tremont Cp;TRE +N2381=Tri-Continental Corp.;TY +N2382=Triarc Cos;TRY +N2383=Tribune Co;TRB +N2384=Trigen Energy Cp;TGN +N2385=Trimas Cp;TMS +N2386=Trinet Corporate Realty Trust;TRI +N2387=Trinity Ind. Inc;TRN +N2388=Trinova;TNV +N2389=Triton Energy Corp.;OIL +N2390=Trizec Corp;TZC +N2391=True North Communication;TNO +N2392=Trump Hotel & Casino;DJT +N2393=TRW Inc.;TRW +N2394=Tucson Elec Pwr.;TEP +N2395=Tultex Corp;TTX +N2396=Turkey Fund;TKF +N2397=TVX Gold Inc;TVX +N2398=Twentieth Century Ind;TW +N2399=Twin Disc Inc;TDI +N2400=Tyco International Ltd;TYC +N2401=Tyco Toys Inc;TTI +N2402=Tyler Corp;TYL +N2403=U S Filter Corp;USF +N2404=U S Surgical Corp;USS +N2405=U.S. Home Corp;UH +N2406=UAL Corp;UAL +N2407=Ucar Intl;UCR +N2408=UGI Corp;UGI +N2409=Ultramar Corp;ULR +N2410=UNC Resources;UNC +N2411=Unicom Corp;UCM +N2412=Unifi Inc;UFI +N2413=Unifirst Corp;UNF +N2414=Unilever Ltd Amer Shr;UL +N2415=Unilever Ltd NV;UN +N2416=Union Camp;UCC +N2417=Union Carbide Corp.;UK +N2418=Union Corporation;UCO +N2419=Union Electric;UEP +N2420=Union Pacific;UNP +N2421=Union Pacific Resources Group;UPR +N2422=Union Planters Corp;UPC +N2423=Union Texas Petroleum;UTH +N2424=Unionamerica Holdings Adr;UA +N2425=Unisys Corp.;UIS +N2426=Unisys Cp Pf Series A;UIS+A +N2427=Unit Corp;UNT +N2428=United Amer Healthcare Cp;UAH +N2429=United Asset Management;UAM +N2430=United Dominion;UDI +N2431=United Dominion Realty Trust;UDR +N2432=United Healthcare;UNH +N2433=United Illuminating;UIL +N2434=United Ind Corp;UIC +N2435=United Kingdom Fund Inc;UKM +N2436=United Meridian Cp;UMC +N2437=United Park City Mines;UPK +N2438=United Technologies;UTX +N2439=United Transnet Inc;UT +N2440=United Water Res Inc;UWR +N2441=United Wisconsin Services Inc;UWZ +N2442=Unitrode Corp;UTR +N2443=Univar Corp;UVX +N2444=Universal Foods Cp;UFC +N2445=Universal Health Realty Trust;UHT +N2446=Universal Hlth Serv Inc Class B;UHS +N2447=Universal Leaf Tobacco;UVV +N2448=Uno Restaurants Corp;UNO +N2449=Unocal Co;UCL +N2450=UNUM (Union Mutual);UNM +N2451=Unum Cp 8.80pc Mids;UND +N2452=Urban Shopping Centers;URB +N2453=URS Cp;URS +N2454=US 1 Industries;USO +N2455=US Can Corp;USC +N2456=US Indust Inc;USN +N2457=US Restaurants;USV +N2458=US West;USW +N2459=US West Media Group;UMG +N2460=USA Waste Services Inc;UW +N2461=USAir Inc.;U +N2462=USF&G;FG +N2463=USG Cp;USG +N2464=USLife Corp.;USH +N2465=Uslife Income Fund;UIF +N2466=UST Inc;UST +N2467=USX Delhi Group;DGP +N2468=USX Marathon Oil Co;MRO +N2469=USX US Steel;X +N2470=Utilicorp United Inc;UCU +N2471=Valassis Communication Inc;VCI +N2472=Valero Energy Corp.;VLO +N2473=Valhi Corp.;VHI +N2474=Valley Natl Bancorp;VLY +N2475=Valspar Cp;VAL +N2476=Value City Department Stores;VCD +N2477=Value Health Inc;VH +N2478=Value Proprty Trust;VLP +N2479=Van Kamp Ca Muni Income;VCV +N2480=Van Kamp Insurance Muni Fd;VIM +N2481=Van Kamp Investment Group;VGM +N2482=Van Kamp Ny Value Muni Income;VNV +N2483=Van Kampen Amer Cap Cv Sec Inc;ACS +N2484=Van Kampen Amer Capital Bond Fund;ACB +N2485=Van Kampen Amer Capital Income Trust;ACD +N2486=Van Kampen Ltd;VLT +N2487=Van Kampen Mer Adv MI Muni;VKA +N2488=Van Kampen Mer Adv PA Muni;VAP +N2489=Van Kampen Mer CA Qual Muni;VQC +N2490=Van Kampen Mer FL Qua Muni;VFM +N2491=Van Kampen Mer Muni Opp Tr II;VOT +N2492=Van Kampen Mer PA Val Mun Incom;VPV +N2493=Van Kampen Mer Strag Sec Muni;VKS +N2494=Van Kampen Mer Value Inc Tr;VKV +N2495=Van Kampen Merit Municipal;VMT +N2496=Van Kampen Merritt Income Fund;VIT +N2497=Van Kampen Merritt Inv Grade Muni;VIG +N2498=Van Kampen Merritt IG Fl;VTF +N2499=Van Kampen Merritt IG NJ;VTJ +N2500=Van Kampen Merritt IG NY;VTN +N2501=Van Kampen Merritt IG PA;VTP +N2502=Van Kampen Muni Opportunity Trust;VMO +N2503=Van Kampen NY Quality;VNM +N2504=Van Kampen Ohio Quality;VOQ +N2505=Van Kampen Trust Investment Cal Muni;VIC +N2506=Van Kempen Merritt Municip;VKQ +N2507=Van Kempen Merritt Penn Quality Municipa;VPQ +N2508=Varco Intl Inc;VRC +N2509=Varian Associates;VAR +N2510=Varity Corp;VAT +N2511=Vastar Resources Inc;VRI +N2512=Vencor Inc;VC +N2513=Venture Stores;VEN +N2514=Venture Stores Inc Prf;VEN+ +N2515=Verifone Inc;VFI +N2516=Vesta Insurance Group Inc;VTA +N2517=Vestaur Securities Inc;VES +N2518=VF Cp;VFC +N2519=Vina Concha Y Toro;VCO +N2520=Vintage Petroleum Inc;VPI +N2521=Vishay Intertechnology;VSH +N2522=Vitro Sociedad Anonima ADR;VTO +N2523=Vivra Inc;V +N2524=Vms Mortgage Investment;VMG +N2525=Vodafone Group;VOD +N2526=Volunteer Capital Corp;VCC +N2527=Vons Companies Inc;VON +N2528=Vornado Inc;VNO +N2529=Vulcan Materials Co.;VMC +N2530=Waban Inc;WBN +N2531=Wabash Natl Cp;WNC +N2532=Wachovia Corp;WB +N2533=Wackenhut Corp;WAK +N2534=Wackenhut Correction;WHC +N2535=Wackenhut Cp Cl B;WAKB +N2536=Wahlco Environment Systems;WAL +N2537=Wainoco Co.;WOL +N2538=Wal-Mart Stores Inc.;WMT +N2539=Walden Residential Properties;WDN +N2540=Walgreen Co;WAG +N2541=Wallace Computer Svcs;WCS +N2542=Warnaco Group Inc Class A;WAC +N2543=Warner Lambert Co.;WLA +N2544=Washington Construction Group;WAS +N2545=Washington Energy Co;WEG +N2546=Washington Gas Light;WGL +N2547=Washington Homes;WHI +N2548=Washington Natl Corp;WNT +N2549=Washington Post Co;WPO +N2550=Washington Water Power;WWP +N2551=Waste Management Intl ADR;WME +N2552=Waterhouse Investor Serv Inc;WHO +N2553=Waters Corp;WAT +N2554=Watkins Johnson Co.;WJ +N2555=Watsco Inc Cl A;WSO +N2556=Watts Indus Inc Class A;WTS +N2557=Waxman Industries Inc;WAX +N2558=WCI Steel Inc;WRN +N2559=Weatherford Enterra Inc;WII +N2560=Webb (Del E) Corp;WBB +N2561=Weeks Corp;WKS +N2562=Weingarten Realty Inc;WRI +N2563=Weirton Steel Corp;WS +N2564=Weis Markets Inc;WMK +N2565=Wellman Inc;WLM +N2566=Wellpoint Health Networks Inc;WLP +N2567=Wells Fargo & Co;WFC +N2568=Wellsford Residentl P;WRP +N2569=Wendy's Intl.;WEN +N2570=West Coast Energy Inc;WE +N2571=West Company Inc;WST +N2572=West Penn Pwr Co Quid;WQP +N2573=Westbridge Capital Cp;WBC +N2574=Westcorp;WES +N2575=Western Atlas Inc;WAI +N2576=Western Digital Corp;WDC +N2577=Western Gas Resources Inc;WGR +N2578=Western National Corp;WNH +N2579=Western Resources;WR +N2580=Western Waste Industries;WW +N2581=Westinghouse Air Brake Co;WAB +N2582=Westinghouse Electric;WX +N2583=Westmoreland Coal;WCX +N2584=Westpac Banking Corp;WBK +N2585=Westvaco Corp.;W +N2586=Weyerhaeuser Co.;WY +N2587=Wheelabrator Technologies Inc;WTI +N2588=Whirlpool;WHR +N2589=Whitehall Corp;WHT +N2590=Whitman Corp;WH +N2591=Whittaker Corp.;WKR +N2592=WHX Corp;WHX +N2593=Wicor Inc;WIC +N2594=Williams Co.;WMB +N2595=Williams Coal Seam Gas Royalty Trust;WTU +N2596=Willis Corroon Plc ADR;WCG +N2597=Wilshire Oil Co Tx;WOC +N2598=Windmere;WND +N2599=Winn-Dixie Stores Inc.;WIN +N2600=Winnebago Inds Inc;WGO +N2601=Wisconsin Elec.;WEC +N2602=Wiser Oil Co;WZR +N2603=Witco Corp;WIT +N2604=WMC Ltd ADR;WMC +N2605=Wms Industries;WMS +N2606=WMX Inc.;WMX +N2607=Wolverine Tube Inc;WLV +N2608=Wolverine Worldwide;WWW +N2609=Woolworth Co.;Z +N2610=World Airways Inc;WOA +N2611=World Color Press Inc;WRC +N2612=World Fuel Services;INT +N2613=Worldtex Inc;WTX +N2614=Worldwide Dollarvest;WDV +N2615=Worldwide Value Fund;VLU +N2616=WPL Holding;WPH +N2617=WPS Resources;WPS +N2618=Wrigley (Wm Jr) Co.;WWY +N2619=Wyle Electronics;WYL +N2620=Wynn's Intl;WN +N2621=Xerox Corp.;XRX +N2622=Xtra Corp;XTR +N2623=Yankee Energy Systems Inc;YES +N2624=York Intl Corp;YRK +N2625=YPF Sociedad Anonima ADR;YPF +N2626=Z-Seven Fund Inc;ZSE +N2627=Zapata Corp.;ZAP +N2628=Zeigler Coal Holdings;ZEI +N2629=Zemex Corp;ZMX +N2630=Zeneca Group ADR;ZEN +N2631=Zenith Electronics Cp;ZE +N2632=Zenith Income Fund;ZIF +N2633=Zenith Natl Ins Corp;ZNT +N2634=Zero Co.;ZRO +N2635=Zilog Inc;ZLG +N2636=Zurich Reinsurance Centre Holding;ZRC +N2637=Zurn Industries;ZRN +N2638=Zweig Fund Inc.;ZF +N2639=Zweig Total Return Fund;ZTR + +[AMEX] +N1=Ackerley Commun Inc;AK +N2=Acme United Cp;ACU +N3=Action Ind Inc;ACZ +N4=Adam Resources & Energy Inc;AE +N5=Advanced Financial;AVF +N6=Advanced Magnetics Inc;AVM +N7=Advanced Medical Inc;AMA +N8=Advanced Photonix Inc Class A;API +N9=Advanced Therapeutic Systems;ATH +N10=Aerosonics Cp;AIM +N11=Aim Strategic Income Fund Inc;AST +N12=Air & Water Technology Cp Class A;AWT +N13=Air Methods Corp;AIRM +N14=Aircoa Hotel Partners;AHT +N15=Alamco Inc;AXO +N16=Alba Waldensian Inc;AWS +N17=Alcoa Pf;AA+ +N18=Alfin Inc;AFN +N19=Allied Digital Tech;ADT +N20=Allied Research Cp;ALR +N21=Allou Health & Beauty Cl A;ALU +N22=Alpha Ind;AHA +N23=Alpine Group Inc;AGI +N24=AMC Entertainment Inc;AEN +N25=Amdahl;AMH +N26=Ame Insured Mtg Inv 84;AIA +N27=Amer Bank Of Connecticut;BKC +N28=Amer Biltrite Inc;ABL +N29=Amer Body Armor & Equipment;ABE +N30=Amer Explor Co;AX +N31=Amer Insured Mtg Inv 85;AII +N32=Amer Insured Mtg Inv 86;AIJ +N33=Amer Insured Mtg Inv 88;AIK +N34=Amer Israeli Paper Mills;AIP +N35=Amer List Cp;AMZ +N36=Amer Paging Inc;APP +N37=Amer Real Estate Investment;REA +N38=Amer Restaurants Partners LP;RMC +N39=Amer Science Engineering;ASE +N40=Amer Shared Hospital Services;AMS +N41=Amer Technical Ceramics Cp;AMK +N42=America First Prep Fund 2 Lp;PF +N43=Ampal Amer Israel Cl A;AISA +N44=Amwest Ins Gr Inc;AMW +N45=Andrea Electronics Cp;AND +N46=Angeles Mortgage Inv Tr;ANM +N47=Angeles Partcp Mtge Tr;APT +N48=Anuhco Inc;ANU +N49=Aprogenex Inc;APG +N50=Arc Intl Inc;ATV +N51=Arizona Land Incm Cp Cl A;AZL +N52=Arrhythia Research Technology;HRT +N53=Arrow Automotive Ind Inc;AI +N54=ASR Investments Corp;ASR +N55=Assisted Living Concepts Inc;ALF +N56=Astrotech Intl Cp;AIX +N57=AT Plastics Inc;ATJ +N58=Atari Corp;ATC +N59=Atlantis Plastics Inc Cl A;AGH +N60=Audiovox Cp Cl A;VOX +N61=Audits & Surveys Inc;ASW +N62=Aurora Electronics Inc;AUR +N63=Aviva Petroleum;AVV +N64=Azco Mining;AZC +N65=B & H Maritime Carriers Ltd;BHM +N66=B & H Ocean Carriers Ltd;BHO +N67=B A T Industries ADR;BTI +N68=B Stearns CUBS;KBB +N69=Badger Meter Inc;BMI +N70=Baker (Michael) Cp;BKR +N71=Balchem Cp;BCP +N72=Baldwin Technology Co;BLD +N73=Bancroft Convertible Fund Inc;BCV +N74=Banister Foundation Inc;BAN +N75=Bank Of Southington;BSO +N76=Bankers Tr NY Conv;BND +N77=Bankers Trust Dep;BPR +N78=Bankers Trust Shrs Pf;BPB +N79=Banyan Hotel Inv Fd;VHT +N80=Barnwell Ind;BRN +N81=Barr Laboratories Inc;BRL +N82=Barrister Information Cp;BIS +N83=Bay Meadows Operating Co;CJ +N84=Bayou Steel Cp Cl A;BYX +N85=Bear Stearns MRK Chip;MCP +N86=Beard Oil Co;BOC +N87=Bema Gold Corp;BGO +N88=Benchmark Electronics Inc;BHE +N89=Bentley Pharmaceuticals Inc;BNT +N90=Bergstrom Capital Cp;BEM +N91=Besicorp Group Inc;BGI +N92=Bethlehem Cp;BET +N93=BHC Communications Inc Class A;BHC +N94=Binks Mfg Co;BIN +N95=Bio-Rad Laboratories Inc Class A;BIOA +N96=Bio-Rad Labs Cl B;BIOB +N97=Biscayne Apparel;BHA +N98=Blackrock Broad Inv Gr 09 Term;BCT +N99=Blackrock CA Inv Qual Muni Tr;RAA +N100=Blackrock FL Inv Qual Muni Tr;RFA +N101=Blackrock NJ Inv Qual Muni Tr;RNJ +N102=Blackrock NY Inv Qual Muni Tr;RNY +N103=Blair Cp;BL +N104=Blessings Cp;BCO +N105=Blonder Tongue Laboratories;BDR +N106=Boddie Noell Prop;BNP +N107=Bogen Comm Intl Inc;BGN +N108=Bostonfed Bancorp;BFD +N109=Bowl America Inc Cl A;BWLA +N110=Bowmar Instrument Cp;BOM +N111=Bowne & Co Inc;BNE +N112=Brandon Systems Corp;BRA +N113=Brandywine Realty Trust;BDN +N114=Brascan Ltd.;BRSA +N115=Buffton Cp;BFX +N116=Cabletel Communication;TTV +N117=Cablevision Sys Cp Cl A;CVC +N118=Cagles Inc Cl A;CGLA +N119=Calprop Cp;CPP +N120=Calton Inc;CN +N121=Cambrex Cp;CBM +N122=Cancer Treatment Hldgs Inc;CTH +N123=Capital Realty Tax Ex LP I;CRA +N124=Capital Realty Tax Ex LP II;CRB +N125=Capital Realty Tax Ex LP III;CRL +N126=Carmel Container Sys Ord;KML +N127=Castle A M & Co;CAS +N128=Castle Convertible Fund Inc;CVF +N129=Cavalier Homes Inc;CAV +N130=Cdn Marconi Co;CMW +N131=Cdn Occidental Pet;CXY +N132=CE Franklin Ltd;CFK +N133=CEC Resources;CGS +N134=Centennial Technologies;CTN +N135=Centerpoint Properties Corp;CNT +N136=Central Fund Of Can Class A;CEF +N137=Central Securities;CET +N138=CFX Corp;CFX +N139=Chad Therapeutics;CTU +N140=Champion Healthcare Cp;CHC +N141=Chase Corp;CCF +N142=Chesapeake Biological Laboratories;PHD +N143=Cheyenne Software Inc;CYE +N144=Chicago Rivet & Machine Co;CVR +N145=Chieftain Intl Inc;CID +N146=CIM High Yield Securities;CIM +N147=Citadel Holding Cp;CDL +N148=Citisave Financial Cp;CZF +N149=Coast Distrib System;CRV +N150=Coastal Caribbean Oils;CCO +N151=Cognitronics Cp;CGN +N152=Cohen & Steers Reality Income Fund;RIF +N153=Columbia Laboratories Inc;COB +N154=Columbus Energy Corp;EGY +N155=Comforce Corp;CFS +N156=Cominco Ltd;CLT +N157=Commercial Assets Inc;CAX +N158=Competitve Technologies;CTT +N159=Comptek Research;CTK +N160=Computrac Inc;LLB +N161=Comsouth Bancshares;CSB +N162=Concord Fabrics Inc Cl A;CIS +N163=Concord Fabrics Inc Cl B;CISB +N164=Consolidated Tomako Land;CTO +N165=Contl Materials Cp;CUO +N166=Convest Energy Cp;COV +N167=Copley Prop Inc;COP +N168=Cornerstone Bank;CBN +N169=Cornerstone Natural Gas Inc;CGA +N170=Corpus Christi Bancshares;CTZ +N171=Courtaulds Plc ADR;COU +N172=Creative Computer Application;CAP +N173=Cross (AT) Co Class A;ATXA +N174=Crowley Milner & Co;COM +N175=Crown Central Pet Cl A;CNPA +N176=Crown Central Pet Cl B;CNPB +N177=Crown Laboratories;CLL +N178=Cruise Amer Inc;RVR +N179=Crystal Oil Co;COR +N180=CST Entertainment Inc;CLR +N181=Cubic Corp;CUB +N182=Customedix Cp;CUS +N183=CVB Financial Cp;CVB +N184=Cycomm Intl;CYI +N185=Dakota Mining;DKT +N186=Dallas Gold & Silver;DLS +N187=Danielson Holding Cp;DHC +N188=Datametrics Cp;DC +N189=Dataram Cp;DTM +N190=Daxor Cp;DXR +N191=Dayton Mining Cp;DAY +N192=Decorator Ind Inc;DII +N193=Del Global Tech Corp;DEL +N194=Del Laboratories Inc;DLI +N195=Denamerica Corp;DEN +N196=Devon Energy Cp;DVN +N197=Dewolfe Co;DWL +N198=DI Industries;DRL +N199=Dia Met Minerals Ltd Cl A;DMMA +N200=Dia Met Minerals Ltd Cl B;DMMB +N201=Diagnostic/Retrieval Systems;DRS +N202=Digicon Inc;DGC +N203=Digital Communication;DCT +N204=Dimark Inc;DMK +N205=Diodes Inc;DIO +N206=Disc Graphics Inc;DGI +N207=Dixon Ticonderoga Co;DXT +N208=Donnelly Cp Cl A;DON +N209=DRCA Medical Cp;DRC +N210=Drew Ind Inc;DW +N211=Dreyfus Cal Muni Incm;DCM +N212=Dreyfus Muni Income Trust;DMF +N213=Dreyfus NY Muni Income Fund;DNM +N214=Driver Harris Co;DRH +N215=Ducommun Inc;DCO +N216=Duplex Products Inc;DPX +N217=Dycam Inc;DYC +N218=E-Z Serve Cp;EZS +N219=Eastern Co;EML +N220=Echo Bay Mines;ECO +N221=Ecology & Environment Inc Cl A;EEI +N222=Edisto Resources Cp;EDT +N223=Editek Inc;EDI +N224=Eldorado Bancorp;ELB +N225=Electrochemical Ind Frutarom;EIF +N226=Ellsworth Cv Growth & Income Fund;ECF +N227=Elsinore Cp;ELS +N228=Emeritus Corp;ESC +N229=Emerson Radio;MSN +N230=Empire Of Carolina Inc;EMP +N231=Encore Marketing International;EMI +N232=Engex Inc;EGX +N233=Environmental Tectonics Cp;ETC +N234=Enzo Biochem Inc;ENZ +N235=Epitope Inc;EPT +N236=Equity Income Fund;ATF +N237=Equus II;EQS +N238=Espey Mfg & Electronics;ESP +N239=Essex Bancorp Inc;ESX +N240=ETS International Inc;ETS +N241=ETZ Lavud Cl A;ETZA +N242=ETZ Lavud Ltd Ord;ETZ +N243=Everest & Jennings Intl Inc;EJ +N244=EXX Inc Cl B;EXXB +N245=EXX Inc Class A;EXXA +N246=Fab Ind Inc;FIT +N247=Falcon Cable Systems Co;FAL +N248=Falmouth Co - Operative Bank;FCB +N249=Female Health Co;FHC +N250=FFP Partners Lp;FFP +N251=Fibreboard Cp;FBD +N252=Fina Inc Cl A;FI +N253=Financial Federal Corp;FIF +N254=First Australia Fund;IAF +N255=First Australian Prime Inc.;FAX +N256=First Central Finan Cp;FCC +N257=First Empire State Cp;FES +N258=First Iberian Fund Inc;IBF +N259=First Natl Bankshares;FNH +N260=First Republic Bancorp;FRC +N261=First West Virg Bancorp;FWV +N262=Flanigans Enterprises;BDL +N263=Florida Public Utilities Co;FPU +N264=Florida Rock Ind;FRK +N265=Foodarama Supermarkets;FSM +N266=Forest City Enter Cl A;FCEA +N267=Forest City Enter Cl B;FCEB +N268=Forest Lab Inc.;FRX +N269=Fortune Petroleum Corp;FPX +N270=Forum Retirement Lp;FRL +N271=Fountain Powerboat Indus Inc;FPI +N272=FPA Cp;FPO +N273=Franklin Advantage Re;FAD +N274=Franklin Hldg Cp;FKL +N275=Franklin Real Estate;FIN +N276=Franklin Select RE Fd;FSN +N277=Frequency Electronics;FEI +N278=Fresenius USA Inc;FRN +N279=Friedman Ind;FRD +N280=Frischs Restaurants;FRS +N281=Frontiers Adjuster Of America;FAJ +N282=Fuqua Enterprise;FQE +N283=GA Financial Inc;GAF +N284=Gainsco Inc;GNA +N285=Galaxy Cablevision L P;GTV +N286=Gamma Biologicals;GBL +N287=Garan Inc;GAN +N288=Gaylord Container Cp;GCR +N289=Gelman Sciences Inc;GSC +N290=Gen Automation Inc;GA +N291=Gen Employment Enter;JOB +N292=Gen Microwave Cp;GMW +N293=General Kinetics;GKI +N294=Genovese Drug Stores Inc Cl A;GDXA +N295=Giant Food Class A;GFSA +N296=Glacier Water Services Inc;HOO +N297=Glatfelter P H Co;GLT +N298=Global Ocean Carriers Ltd;GLO +N299=Globalink Inc;GNK +N300=Go-Video Inc;VCR +N301=Golden Star Resources Ltd;GSR +N302=Goldfield Cp;GV +N303=Goldwyn (Samuel) Co;SG +N304=Gorman Rupp Co;GRC +N305=Graham Cp;GHM +N306=Graham Field Health Prod;GFI +N307=Granges Inc;GXL +N308=Greenbriar Corp;GBR +N309=Greenwich Street Cal Muni Fd;GCM +N310=Greyhound Lines Inc;BUS +N311=Griffin Gaming & Entertainment;GGE +N312=GST Telecommunication;GST +N313=Gull Laboratories Inc;GUL +N314=Gundle Slt Environ Sys Inc;GUN +N315=Haagen (Alexander) Properties Inc;ACH +N316=Halifax Cp;HX +N317=Hallmark Financial Sv;HAF +N318=Hallwood Energy Partners;HEP +N319=Hallwood Energy Partners class C;HEPC +N320=Hallwood Rlty Partners L P;HRY +N321=Halsey Drug Co Inc;HDG +N322=Hampton Ind Inc;HAI +N323=Hanger Orthopedic Group;HGR +N324=Hanover Direct;HNV +N325=Harken Energy Cp;HEC +N326=Harlyn Products Inc;HRN +N327=Harolds Stores Inc;HLD +N328=Hasbro;HAS +N329=Hastings Mfg;HMF +N330=Hawaiian Airlines;HA +N331=Health Chem Cp;HCH +N332=Health Professionals Inc;HPI +N333=Healthy Planet Products;HPP +N334=Heartland Partners L P;HTL +N335=Hearx Ltd;EAR +N336=Heico Cp;HEI +N337=Hein Werner Cp;HNW +N338=Heist (CH) Cp;HST +N339=Helionetics Inc;ZAPP +N340=Helm Resources Inc;HHH +N341=Helmstar Group;HLM +N342=Hemlo Gold Mines Inc;HEM +N343=Heritage Media Cp Cl A;HTG +N344=Hi Shear Tech Cp;HSR +N345=Highlander Income Fund;HLA +N346=HMG/Courtland Prop In;HMG +N347=Holco Mtg Accep Cp-i;HOLA +N348=Holly Cp;HOC +N349=Hondo Oil & Gas Co;HOG +N350=Hooper Holmes Inc;HH +N351=Horizon Mental Health Mngt;HMH +N352=Host Funding;HFD +N353=Houston Biotechnology;HBI +N354=Hovnanian Enterprises Inc;HOV +N355=Howell Ind;HOW +N356=Hudson General Cp;HGC +N357=Hungarian Telephone;HTC +N358=Identix Inc;IDX +N359=IGI Inc;IG +N360=Imperial Credit Mortgage;IMH +N361=Imperial Holly Group;IHK +N362=Imperial Oil Ltd.;IMO +N363=Income Opport Rea Inv;IOT +N364=Incstar Cp;ISR +N365=Independent Bankshares;IBK +N366=Inefficient-Market Fund Inc;IMF +N367=Instron Cp;ISN +N368=Int'l Lottery Inc;ILI +N369=Intelcom Group Inc;ICG +N370=Intelligent Controls;ITC +N371=Intelligent Systems;INS +N372=Inter-City Products Cp;IPR +N373=Interchange Finan Serv Cp;ISB +N374=Interdigital Communications Corp;IDC +N375=Interline Resources Corp;IRC +N376=Intermagnetics Gen Cp;IMG +N377=Interstate General Cl A Ut Lp;IGC +N378=Intersystems Inc;II +N379=Intertape Polymer Group Inc;ITP +N380=Intl Thoroughbred Brdrs;ITB +N381=Investors Insurance Group Inc;IIG +N382=Ion Laser Technology Inc;ILT +N383=Iriec;IRI +N384=IVAX Cp;IVX +N385=Jaclyn Inc.;JLN +N386=Jalate Ltd;JLT +N387=Jan Bell Marketing;JBM +N388=Jetronic Ind;JET +N389=Jones Intercable Inv Cl A;JTV +N390=Joule Inc;JOL +N391=Kankakee Bancorp Se;KNK +N392=Katz Media Group;KTZ +N393=KBK Capital Cp;KBK +N394=Keane Inc;KEA +N395=Kentucky First Bancorp;KYF +N396=Kenwin Shops Inc;KWN +N397=Key Energy Group Inc;KEG +N398=Keystone Heritage Group;KHG +N399=KFX Inc;KFX +N400=Killearn Properties Inc;KPI +N401=Kinark Cp;KIN +N402=Kirby Cp;KEX +N403=Kit Mfg;KIT +N404=Kleer Vu Ind;KVU +N405=Knogo N Amer Corp;KNA +N406=Koger Equity;KE +N407=KV Pharmaceutical Class B;KVB +N408=KV Pharmaceutical Class A;KVA +N409=Labarge Inc;LB +N410=Lancer Cp;LAN +N411=Landauer Inc;LDR +N412=Laser Indus Ltd;LAS +N413=Laser Tech;LSR +N414=Lazare Kaplan Intl Inc;LKI +N415=Leather Factory;TLF +N416=Lehman Bro Hld Amgen;AYN +N417=Lehman Bro Region Bk;BKG +N418=Lehman Bros Hld Glo Suns 2000;SXT +N419=Lehman Bros Hldngs MICN Elks;MUY +N420=Lillian Vernon Cp;LVC +N421=Littlefield Adams & Co;LFA +N422=Lumex Inc;LUM +N423=Luxtec Cp;LXU +N424=LXR Biotechnology Inc;LXR +N425=Lynch Cp;LGL +N426=M C Shipping Inc;MCX +N427=M Stanley GT PERQS 97;IGS +N428=M Stanley TMX PERQS;MXT +N429=MacNeal Schwendler Cp;MNS +N430=Magellan Health Services;MGL +N431=Magnum Petroleum Inc;MPM +N432=MAI Systems Inc;NOW +N433=Maine Public Serv;MAP +N434=Marlton Technologies Inc;MTY +N435=Massachusetts H&E Tru;MHE +N436=Matec Cp;MXC +N437=Maxxam Inc;MXM +N438=McRae Ind Cl A;MRIA +N439=McRae Ind Cl B;MRIB +N440=Mdc Corp;MDQ +N441=Measurement Specialties Inc;MSS +N442=Medco Research Inc;MRE +N443=Medeva Plc Ads;MDV +N444=Media General Cl A;MEGA +N445=Media Logic Inc;TST +N446=Medicore Inc;MDK +N447=Mediq Inc;MED +N448=Medquist Inc;MBS +N449=Mem Co;MEM +N450=Mental Health Management Inc;MHM +N451=Merchants Group Inc;MGP +N452=Mercury Air Group Inc;MAX +N453=Meridian Point Rlty 8;MPH +N454=Merrimac Ind Inc;MRM +N455=Met-Pro Cp;MPR +N456=Metromedia Intl Group;MMG +N457=Metropolitan Realty Cp;MET +N458=Michael Anthony Jewelers;MAJ +N459=Microtel Intl Inc;MOL +N460=Mid America Bancorp;MAB +N461=Mid Atlantic Realty Trust Sbi;MRR +N462=Middleby Cp;MIDD +N463=Midland Co;MLA +N464=Midsouth Bancorp Inc;MSL +N465=Milwaukee Land Inc;MWK +N466=Minnesota Mun Term Tr;MNB +N467=Minnesota Muni Inc Port;MXA +N468=Mission West Properties;MSW +N469=Moog Inc Cl B;MOGB +N470=Moog Inc Class A;MOGA +N471=Moore Medical Cp;MMD +N472=Morgan Group Class A;MG +N473=Morgan Stanley CSCO;XPC +N474=Morgans Foods Inc;MR +N475=Morrison Fresh Cooking Inc;MFC +N476=Movie Star Inc;MSI +N477=MSR Exploration Ltd;MSR +N478=Muniinsured Fund Inc;MIF +N479=Munivest Fund Inc;MVF +N480=Muniyield AZ Fd;MZA +N481=Muniyield Insured Fund;MYI +N482=Myers Ind Inc;MYE +N483=N Amer Vaccine Inc;NVX +N484=N Y Tax Exempt Incm Fd;XTX +N485=Nabors Industries Inc;NBR +N486=Nantucket Ind Inc;NAN +N487=National Bancshares Of Texas;NBT +N488=Natl Beverage Corp;FIZ +N489=Natl Gas & Oil Cp;NLG +N490=Natl Healthcare Lp;NHC +N491=Natl Patent Deve Cp;NPD +N492=Natl Realty Lp;NLP +N493=Natural Alternatives Intl;NAI +N494=New Iberian Bancorp;NIB +N495=New Mexico & Arizona Land;NZ +N496=New York Times Class A;NYTA +N497=NFC Plc;NFC +N498=Norex America Inc;NXA +N499=Northbay Financial Cp;NBF +N500=Northern Technologies Intl;NTI +N501=Novavax Inc;NOX +N502=NTN Communication;NTN +N503=Numac Energy Inc;NMC +N504=Nuveen CA Premium Ins Muni Fd;NCU +N505=Nuveen GA Premium Ins Muni Fd;NPG +N506=Nuveen MO Premium Ins Muni fd;NOM +N507=Nuveen WA Premium Ins Muni Fd;NPW +N508=NV Ryan Homes;NVR +N509=O Okiep Copper ADR;OKP +N510=O Sullivan Cp;OSL +N511=Ohio Art Co;OAR +N512=OMI Corp;OMM +N513=Omni Multimedia Group;OMG +N514=Oncor Inc;ONC +N515=Oncormed Inc;ONM +N516=One Liberty Prop;OLP +N517=Organogenesis Inc;ORG +N518=Oriole Homes Cp Cl A;OHCA +N519=Oriole Homes Cp Cl B;OHCB +N520=Oshman Sporting Goods;OSH +N521=Pacific Gateway Property Inc;PGP +N522=Pacific Gulf Properties;PAG +N523=Page America Group Inc;PGG +N524=Paine Webber Grp S&P 400;SIS +N525=Pamida Hldgs Cp;PAM +N526=Park Natl Corp;PRK +N527=Partners Preferred Yield;PYA +N528=Partners Preferred Yield II;PYB +N529=Partners Preferred Yield III;PYC +N530=Paxson Communication;PXN +N531=PC Quote;PQT +N532=Pegasus Gold Inc;PGU +N533=Penn Engineering & Mfg Cp;PNN +N534=Penn Real Estate Inv Tr Sbi;PEI +N535=Penobscot Shoe Co;PSO +N536=Perini Cp;PCR +N537=Peters (JM) Co;CPH +N538=Phoenix Network Inc;PHX +N539=Phoenix Resources Cos;PHN +N540=Pico Products Inc;PPI +N541=Piedmont Bancorp;PDB +N542=Pinnacle Bank;PLE +N543=Pitts & West Va R R Sbi;PW +N544=Pitts De Moines Inc;PDM +N545=Pittway Cl A;PRYA +N546=Pittway Cp;PRY +N547=Plains Resources Inc;PLX +N548=PLC Systems Inc;PLC +N549=PLM Intl Inc;PLM +N550=Plymouth Rubber Cl A;PLRA +N551=Plymouth Rubber Inc Cl A;PLRB +N552=PMC Capital Inc;PMC +N553=PMC Commercial Trust;PCC +N554=Poly Medical Industries;PM +N555=Polyphase Cp;PLY +N556=Polyvision;PLI +N557=Porta Systems Cp;PSI +N558=Portage Indus Cp;PTG +N559=Pratt Hotel Cp;PHC +N560=Pre-Paid Legal Serv Inc;PPD +N561=Presidential Realty Cl A;PDLA +N562=Presidential Realty Cl B;PDLB +N563=Price Communications;PR +N564=Pricellular Corp;PC +N565=Prism Entertainment Cp;PRZ +N566=Professional Bancorp;MDB +N567=Professional Dental Tech Inc;PRO +N568=Property Capital Tr Sbi;PCT +N569=Provena Foods Inc;PZA +N570=Providence Energy Cp;PVY +N571=Psychemedics Corp;PMD +N572=Public Storage Prop X Inc;PSL +N573=Public Storage Prop XI Inc;PSM +N574=Public Storage Prop XII Inc;PSN +N575=Public Storage Prop XIV Inc;PSP +N576=Public Storage Prop XV Inc;PSQ +N577=Public Storage Prop XVI Inc;PSU +N578=Public Storage Prop XVIII Inc;PSW +N579=Public Storage Prop XX Inc;PSZ +N580=Public Storage Props XVII Inc;PSV +N581=Public Storage Props XIX Inc;PSY +N582=Putnam CA Inv Grd Mun;PCA +N583=Putnam Inv Grd Mun Tr III;PML +N584=Putnam NY Inv Grd Mun;PMN +N585=Pyrocap Intl Corp;PYR +N586=Quebecor Inc Cl A;PQB +N587=R F Power Products;RFP +N588=Ragan (Brad) Inc;BRD +N589=Randers Group Inc;RGI +N590=Raven Industries Inc;RAVN +N591=Red Lion Inns Lp;RED +N592=Redlaw Industries;RDL +N593=Redwood Empire Bancorp;REB +N594=Refac Technology Deve;REF +N595=Regal Beloit Cp;RBC +N596=Regency Healthcare Systems Inc;RHS +N597=Reliv International Inc;RLV +N598=Resort Income Investors Inc;RII +N599=Richton Intl Cp;RHT +N600=Riegel Energy Corp;RJL +N601=Rio Algom Ltd;ROM +N602=Riser Inc;RSR +N603=Rogers Cp;ROG +N604=Rotonics Manufacturing Inc;RMI +N605=Royal Oak Mines Inc;RYO +N606=Rx Medical Service Corp;RXM +N607=Rymac Mortgage Inv Cp;RM +N608=S&P Midcap Dep Recpts;MDY +N609=Saba Petroleum Co;SAB +N610=Saga Communications Inc;SGA +N611=Sahara Gaming Corp;SGM +N612=Salem Cp;SBS +N613=Salomon AMGN Elk;AEK +N614=Salomon Brothers 2008 Worldwide Trust;SBG +N615=Salomon Inc DEC Elk;DLK +N616=Salomon Inc HWP Els;HLK +N617=Salomon Inc MSFT Com;MEK +N618=Salomon Inc ORCL Elks;OLK +N619=Salomon Inc SNPL Elks;SEK +N620=Santa Monica Bank;SMO +N621=SC Bancorp;SCK +N622=Scandinavia Co Inc;SCF +N623=Sceptre Resources Ltd;SRL +N624=Scheib (Earl) Inc;ESH +N625=Schult Homes Cp;SHC +N626=Scope Ind;SCP +N627=Scotland Bancorp;SSB +N628=Seaboard Cp;SEB +N629=Selas Cp Of Amer;SLS +N630=Serenpit Inc;SRI +N631=Servico Inc;SER +N632=Servotronics;SVT +N633=Sheffield Explorations;SHE +N634=Sheffield Medical Technology Inc;SHM +N635=Shelter Components Cp;SST +N636=Shopco Laurel Centre;LSC +N637=Sifco Ind;SIF +N638=Signal Technology Corp;STZ +N639=Silverado Foods Inc;SLV +N640=Simula Inc;SMU +N641=SJW Cp;SJW +N642=Sloans Supermarket Inc;SLO +N643=Smith A O Cl A;SMCA +N644=Smith Barney Interm Muni Fund Inc;SBI +N645=Smith Barney Municipal Fund;SBT +N646=Softnet Systems Inc;SOF +N647=SOI Industries;SOI +N648=Soligen Tech;SGT +N649=Southern Banc Inc;SRN +N650=Southern Calif Ed Qui;SCEQ +N651=Southfirst Bancshares;SZB +N652=SPDR;SPY +N653=SPDR Net Asset Value;SXN +N654=Specialty Chemical Resources Inc;CHM +N655=Spectravision Inc Cl;SVN +N656=Speed O Print Bus Mach;SBM +N657=Sports Club Inc;SCY +N658=Stage II Apparel Cp;SA +N659=Starrett Housing Cp;SHO +N660=Stepan Co;SCL +N661=Stephan Co;TSC +N662=Sterling Capital Cp;SPR +N663=Sterling Healthcare;STER +N664=Sterling House;SGH +N665=Stevens Intl Cl B;SVGB +N666=Stevens Intl Cp Cl A;SVGA +N667=Stone Street Bancorp;SSM +N668=Storage Computer Corp;SOS +N669=Storage Properties Inc;STG +N670=Struthers Industries Inc;SIR +N671=Sulcus Computer Cp;SUL +N672=Summit Tax Ex Bond Fund Lp;SUA +N673=Sun City Ind;SNI +N674=Sunair Electronics Inc;SNR +N675=Sunbelt Nursery Grp Inc;SBN +N676=Suncor Inc;SU +N677=Superior Surgical Mfg Co;SGC +N678=Supreme Industries;STS +N679=Surety Capital Corp;SRY +N680=Swing N Slide Corp;SWG +N681=Tab Products Co;TBP +N682=Tasty Baking Co;TBC +N683=Team Inc;TMI +N684=Tech/Ops Sevcon Inc;TO +N685=Teche Holdings;TSH +N686=Technitrol Inc;TNL +N687=Tejas Power Cp;TPC +N688=Tejon Ranch Co;TRC +N689=Telephone & Data Systems Inc;TDS +N690=Tenera Inc;TNR +N691=Texarkana First Financiall Corp;FTF +N692=Texas Biotechnology;TXB +N693=Texas Meridian Res Cp;TMR +N694=Thermedics Inc;TMD +N695=Thermo Cardiosystems Inc;TCA +N696=Thermo Ecotek;TCK +N697=Thermo Fibertek;TFT +N698=Thermo Instrument Systems Inc;THI +N699=Thermo Power Cp;THP +N700=Thermo Remediation Inc;THN +N701=Thermo Sentron Inc;TSR +N702=Thermo Terratech Inc;TTT +N703=Thermo Voltek Corp;TVL +N704=Thermolase Corp;TLZ +N705=Thermospectra Corp;THS +N706=Thermotrex Corp;TKN +N707=Thermwood Cp;THM +N708=Three D Dept Cl A;TDDA +N709=Three D Dept Cl B;TDDB +N710=Three River Fncl Corp;THR +N711=Tipperary Corp;TPY +N712=Tofutti Brands Inc;TOF +N713=Tolland Bank CT;TBK +N714=Top Source Technology;TPS +N715=Torotel Inc;TTL +N716=Total Petroleum N.amer;TPN +N717=Town & Country;TNC +N718=Trans World Airlines Inc;TWA +N719=Trans-Lux Cp;TLX +N720=Transcisco Ind;TNI +N721=Tranzonic Cos B;TNZB +N722=Tranzonic Cos Class A;TNZA +N723=Tridex Corp;TRDX +N724=Trinitech Systems;TSI +N725=Triple A & Govt 1997;TGB +N726=Triton Group Ltd;TGL +N727=TSF Communications Cp;TCM +N728=Tulos De Acero De Mexico Ltd;TAM +N729=Turner Broadcasting Sys Cl B;TBSB +N730=Turner Broadcasting Sys Cl A;TBSA +N731=Turner Cp;TUR +N732=Unapix Entertainment Inc;UPX +N733=Uni-Marts Inc;UNI +N734=Uniflex Inc;UFX +N735=Unimar Inc;UMR +N736=Unique Mobility Inc;UQM +N737=United Capital Cp;AFP +N738=United Foods Inc Cl B;UFDB +N739=United Foods Inc Cl A;UFDA +N740=United Guardian Inc;UG +N741=United Mobile Homes Inc;UMH +N742=Unitel Video Inc;UNV +N743=Unitil Cp;UTL +N744=Urohealth Systems Inc;URO +N745=US Alcohol Testing;AAA +N746=US Biosciences Inc;UBS +N747=US Cellular;USM +N748=USF&G Pacholder Fund Inc;PHF +N749=UTI Energy Corp;UTI +N750=Valley Forge Cp;VF +N751=Valley Resources Inc;VR +N752=Van Kamp Mer Cal Muni Tr;VKC +N753=Van Kampen Mer Adv Muni Inc II;VKI +N754=Van Kampen Mer FL Muni Opp;VOF +N755=Van Kampen Mer MA Val Muni Inco;VMV +N756=Van Kampen Mer NJ Val Muni Inc Tr;VJV +N757=Van Kampen Mer OH Val Muni Inco;VOV +N758=Van Kampen Mer Sel Muni Tr;VKL +N759=Vanguard Re Fund II;VRT +N760=Vanguard Real Est Fd I Com Fr;VRO +N761=Versar Inc;VSR +N762=Viacom Class B;VIAB +N763=Viacom Intl;VIA +N764=Vicon Ind Inc;VII +N765=Virco Mfg Cp;VIR +N766=Vitronics Cp;VTC +N767=Voyageur AZ Muni Inc;VAZ +N768=Voyageur Co Ins Muni;VCF +N769=Voyageur FL Ins Muni;VFL +N770=Voyageur Minnesota Muni Income Fund;VMN +N771=Voyageur MN Muni Income II;VMM +N772=Voyageur MN Muni Income III;VYM +N773=Vulcan Intl Cp;VUL +N774=Wash Real Estate Inv Tr Sbi;WRE +N775=Washington Savings Bk Fsb;WSB +N776=Watsco Inc Cl B;WSOB +N777=Webco Industries Inc;WEB +N778=WEBS Australia;EWA +N779=WEBS Austria Index;EWO +N780=WEBS Belgium Index;EWK +N781=WEBS Canada;EWC +N782=WEBS France;EWQ +N783=WEBS Germany;EWG +N784=WEBS Hong Kong;EWH +N785=WEBS Italy;EWI +N786=WEBS Japan Index;EWJ +N787=WEBS Malaysia Index;EWM +N788=WEBS Mexico;EWW +N789=WEBS Nethlands;EWN +N790=WEBS Singapore;EWS +N791=WEBS Spain;EWP +N792=WEBS Sweden;EWD +N793=WEBS Switzerland;EWL +N794=WEBS UK;EWU +N795=Weldotron Cp;WLD +N796=Wellco Enterprises;WLC +N797=Wells Gardner Electronics Cp;WGA +N798=Wendt Bristol Hlth Sv;WMD +N799=Wesco Financial Cp;WSC +N800=Western Investment Real Estate Trust;WIR +N801=Western Star Truck Holding;WSH +N802=Whitman Educational Group;WIX +N803=Wilshire Technology Inc;WIL +N804=Winston Resources Inc;WRS +N805=Wireless Telecom Group;WTT +N806=Wiz Technology;WIZ + +[MUTUAL] +N1=20th C Balance Investors Fund;TWBIX +N2=20th C Giftrust;TWGTX +N3=20th C Growth;TWCGX +N4=20th C Heritage Inv;TWHIX +N5=20th C Intl Stocks;TWIEX +N6=20th C Select;TWCIX +N7=20th C Ultra;TWCUX +N8=20th C US Govt;TWUSX +N9=20th C Vista;TWCVX +N10=20th Century Intl Emerging Growth;TWEGX +N11=AARP Capital Growth Fund;ACGFX +N12=AARP Global Growth;ARGGX +N13=AARP GNMA & US Treasury Fund;AGNMX +N14=AARP Growth & Income Fund;AGIFX +N15=Acorn Fund Inc;ACRNX +N16=Acorn Intl;ACINX +N17=AIM Aggressive Growth;AAGFX +N18=Aim Charter Fund;CHTRX +N19=Aim Constellation Growth Fund;CSTGX +N20=Aim Convertible Yld Security;AMBLX +N21=AIM Value Fund;AVLFX +N22=Aim Weingarten Equity Fund;WEINX +N23=Alliance Tech Fund;ALTFX +N24=Alliance World Income;AWITX +N25=Alliance Worldwide Privatization;AWPAX +N26=Amer Europacific Growth Funds;AEPGX +N27=Amer Fundamental Investors Fund;ANCFX +N28=Amer Growth Fund Of America;AGTHX +N29=Amer New Perspective;ANWPX +N30=Amer Washington Mutual;AWSHX +N31=American Heritage Fund;AHERX +N32=Artisen Small Cap Fund;ARTSX +N33=ASM Fund;ASMUX +N34=Babson Bond Tr;BBDSX +N35=Babson Enterprise Fund;BABEX +N36=Babson Growth Fund;BABSX +N37=Babson Shadow Stock Fund;SHSTX +N38=Babson Stewart Ivory Intl;BAINX +N39=Babson Value Fund;BVALX +N40=Baron Asset Fund;BARAX +N41=Baron Growth &income Fund;BGINX +N42=Benham Adj Rate Govt Security Fund;BARGX +N43=Benham Equity Growth;BEQGX +N44=Benham European Gov Bond Fund;BEGBX +N45=Benham Glb Natural Resources;BGRIX +N46=Benham GNMA Income Fund;BGNMX +N47=Benham Gold Equity Index Fund;BGEIX +N48=Benham Income & Growth;BIGRX +N49=Benham Target 2000 Fund;BTMTX +N50=Benham Target 2005 Fund;BTFIX +N51=Benham Target 2010 Fund;BTTNX +N52=Benham Target 2015 Fund;BTFTX +N53=Benham Target 2020 Fund;BTTTX +N54=Benham Treasury Note Fund;CPTNX +N55=Benham Util Inc Fund;BULIX +N56=Berger 100 Fund;BEONX +N57=Berger 101 Fund;BEOOX +N58=Berger Small Co Growth Fund;BESCX +N59=Bernstein International Value;SNIVX +N60=Blanchard Flex Tax Free Bond;BTFBX +N61=Blanchard Global Growth;BGGFX +N62=Bramwell Growth Fund;BRGRX +N63=Brandywine Fund;BRWIX +N64=Bull & Bear Global Income;BBGLX +N65=Bull & Bear Gold Investors Fund;BBGIX +N66=Bull & Bear Special Equity Fund;BBSEX +N67=Bull & Bear US & Overseas Fund;BBOSX +N68=California Tax Free Income;CFNTX +N69=Cappiello Rushmore TR Growth Fund;CRGRX +N70=Cappiello Rushmore Tr Emerging Growth;CREGX +N71=Century Shares Trust Fund;CENSX +N72=CGC Intl Equity;TIEUX +N73=CGC Large Cap Growth;TLGUX +N74=CGC Large Cap Value;TLVUX +N75=CGC Small Cap Growth;TSGUX +N76=CGM Capital Development;LOMCX +N77=CGM Mutual Fund;LOMMX +N78=Clipper Fund;CFIMX +N79=Cohen Steers Realty Shares;CSRSX +N80=Colonial Tax Exempt Fund;COLTX +N81=Columbia Growth Fund;CLMBX +N82=Columbia Special Fund Inc.;CLSPX +N83=Crabbe Huson Spec Fund;CHSPX +N84=DFA Continental Small Company;DFCSX +N85=DFA Japanese Small Company;DFJSX +N86=DFA United Kingdom Small Company;DFUKX +N87=Dodge & Cox Stock Fund;DODGX +N88=Drey A Bonds Plus;DRBDX +N89=Drey Asset Allocation Fund;DRAAX +N90=Drey Comstock Cap Value Cl A;DRCVX +N91=Drey Core Value Fund;DCVIX +N92=Drey Fund;DREVX +N93=Drey Global Inv Class B;DGLBX +N94=Drey Growth + Income;DGRIX +N95=Drey Intermediate Tax Exempt Bond;DITEX +N96=Drey Leverage Fund;DRLEX +N97=Drey New Leader Fund;DNLDX +N98=Drey Opportunity Fund;DREQX +N99=Drey Strategic Worldwide;DSWIX +N100=Drey Tax Ex Bond Fund;DRTAX +N101=Drey Third Century;DRTHX +N102=Dreyfus Appreciation;DGAGX +N103=DW American Value Fund;DWIVX +N104=DW Capital Growth Fund;DWCGX +N105=DW Developing Growth Fund;DWDGX +N106=DW Dividend Growth Fund;DWDVX +N107=DW European Growth Fund;DWEGX +N108=DW Pacific Growth Fund;DWPGX +N109=DW Strategist Fund;DWSTX +N110=DW Value Added Fund;DWVAX +N111=DW Worldwide Investor Fund;DWWWX +N112=Eaton Vance High Yield Muni Tr;EVHMX +N113=Evergreen Fund;EVGRX +N114=Evergreen Global R.E. Fund;EGLRX +N115=Evergreen Total Return Fund;EVTRX +N116=Fam Value Fund;FAMVX +N117=Federal Capital Appreciation Fund;FEDEX +N118=Federated Amer Leaders Fd;FALDX +N119=Federated High Income;FHIIX +N120=Federated High Yield Trust;FHYTX +N121=Federated Stock Trust;FSTKX +N122=Federated US Govt Sec;FUSGX +N123=Fid Adv Growth Opport Fund;FAGOX +N124=Fid Advisor High Income;FAHYX +N125=Fid Advisory Overseas Fund;FAERX +N126=Fid Asset Manager;FASMX +N127=Fid Asset Manager;FASIX +N128=Fid Asset Mng Growth;FASGX +N129=Fid Balanced Fund;FBALX +N130=Fid Blue Chip Growth Fund;FBGRX +N131=Fid Cal Tax Free High Yield;FCTFX +N132=Fid Cal Tax Free Insur Port;FCXIX +N133=Fid Canada Fund;FICDX +N134=Fid Capital Appreciation;FDCAX +N135=Fid Congress Street Fund;CNGRX +N136=Fid Contra Fund;FCNTX +N137=Fid Conv Security Fund;FCVSX +N138=Fid Destiny Fund;FDESX +N139=Fid Destiny II Port;FDETX +N140=Fid Disciplined Equity Fund;FDEQX +N141=Fid Diversified Intl;FDIVX +N142=Fid Dividend Growth Fund;FDGFX +N143=Fid Emerging Growth Fund;FDEGX +N144=Fid Emerging Markets;FEMKX +N145=Fid Equity Income;FEQIX +N146=Fid Equity Income II Fund;FEQTX +N147=Fid Euro Cap Appreciation;FECAX +N148=Fid Europe Fund;FIEUX +N149=Fid Exchange Fund;FDLEX +N150=Fid Export Fund;FEXPX +N151=Fid Fifty Fund;FFTYX +N152=Fid Freedom;FDFFX +N153=Fid Global Balance;FGBLX +N154=Fid Global Bond Fund;FGBDX +N155=Fid GNMA Portfolio;FGMNX +N156=Fid Government Security Fund;FGOVX +N157=Fid Growth & Income;FGRIX +N158=Fid Growth Co Fund;FDGRX +N159=Fid High Income Fund;FAGIX +N160=Fid High Yield Fund;FHIGX +N161=Fid Int'l Growth & Income Fund;FIGRX +N162=Fid Int'l Value Fund;FIVFX +N163=Fid Intermediate Bond Fund;FTHRX +N164=Fid Investment Grade Bond Fund;FBNDX +N165=Fid Japan Fund;FJAPX +N166=Fid Latin America Fund;FLATX +N167=Fid Low-Priced Stock Fund;FLPSX +N168=Fid Magellan;FMAGX +N169=Fid Midcap Stocks;FMCSX +N170=Fid Mortgage Security Fund;FMSFX +N171=Fid Muni Tr Ins Tax Free;FMUIX +N172=Fid Municipal Bond Fund;FMBDX +N173=Fid New Markets Income;FNMIX +N174=Fid New Millenium Fund;FMILX +N175=Fid NY Tax Free High Yield Fund;FNTIX +N176=Fid OTC;FOCPX +N177=Fid Overseas;FOSFX +N178=Fid Pacific-basin Fund;FPBFX +N179=Fid Puritan;FPURX +N180=Fid Real Estate Investment Fund;FRESX +N181=Fid Retired Mm Port;FRTXX +N182=Fid SE Asia Fumd;FSEAX +N183=Fid Sel Air Transport;FSAIX +N184=Fid Sel Amer Gold;FSAGX +N185=Fid Sel Automotive Prt;FSAVX +N186=Fid Sel Biotech Port;FBIOX +N187=Fid Sel Bkrge & Inv Mg;FSLBX +N188=Fid Sel Broadcast;FBMPX +N189=Fid Sel Capital Goods;FSCGX +N190=Fid Sel Chemical Port;FSCHX +N191=Fid Sel Computers;FDCPX +N192=Fid Sel Consumer Products;FSCPX +N193=Fid Sel Develop Community;FSDCX +N194=Fid Sel Electronics Port;FSELX +N195=Fid Sel Energy;FSENX +N196=Fid Sel Energy Service;FSESX +N197=Fid Sel Environmental Port;FSLEX +N198=Fid Sel Food & Agric;FDFAX +N199=Fid Sel Health Care;FSPHX +N200=Fid Sel Housing Port;FSHOX +N201=Fid Sel Industrial Prt;FSDPX +N202=Fid Sel Leisure & Ent;FDLSX +N203=Fid Sel Medic Delivery;FSHCX +N204=Fid Sel Natural Gas;FSNGX +N205=Fid Sel Paper & Forest;FSPFX +N206=Fid Sel Port Defense;FSDAX +N207=Fid Sel Port Financial Services;FIDSX +N208=Fid Sel Port Technolgy;FSPTX +N209=Fid Sel Port Utilities;FSUTX +N210=Fid Sel Prec Mtl & Minerals;FDPMX +N211=Fid Sel Prop & Casul Insur;FSPCX +N212=Fid Sel Regional Banks;FSRBX +N213=Fid Sel Retail;FSRPX +N214=Fid Sel S & L Port;FSVLX +N215=Fid Sel Software;FSCSX +N216=Fid Sel Telecommunicatns Port;FSTCX +N217=Fid Sel Transport Port;FSRFX +N218=Fid Short Term World Income;FSHWX +N219=Fid Short-Term Bond Port;FSHBX +N220=Fid Short-Term Gov't Bond Port;FSTGX +N221=Fid Small Cap Stock Fund;FDSCX +N222=Fid Spart Inv Grade;FSIBX +N223=Fid Spart Long Term Gov;SLTGX +N224=Fid Spart Muni Income;FSMIX +N225=Fid Spart Short Term Muni;FSTFX +N226=Fid Spartan Govt Income Fund;SPGVX +N227=Fid Specialty Situation;FSLSX +N228=Fid Stock Selector Fund;FDSSX +N229=Fid Trend Fund;FTRNX +N230=Fid Utility Income Fund;FIUIX +N231=Fid Worldwide Fund;FWWFX +N232=Fidelity Fund;FFIDX +N233=Fidelity Hong Kong China Fund;FHKCX +N234=Fidelity Japan Small Co;FJSCX +N235=Fidelity Limited Term Muni;FLTMX +N236=First Investors Tax Exempt Fund;FITAX +N237=Flex Fund Short Term Global Income;FLGIX +N238=Founder Discovery Mutual Fund;FDISX +N239=Founder Worldwide Growth;FWWGX +N240=Founders Frontier Fund Inc.;FOUNX +N241=Founders Growth Fund;FRGRX +N242=Founders Passport Fund;FPSSX +N243=Founders Special Fund;FRSPX +N244=Frank/Temp German Govt Bond;HGGBX +N245=Frank/Templ Global Curr;ICPGX +N246=Franklin Dynatech Fund;FKDNX +N247=Franklin Equity Fund;FKREX +N248=Franklin Federal Tax Free Income Fund;FKTIX +N249=Franklin Gold Fund;FKRCX +N250=Franklin US Govt Secs Fd;FKUSX +N251=Franklin Utility Fund;FKUTX +N252=Franklin Valuemark;AGEFX +N253=Franklin Valuemark Income Sec;FKINX +N254=Fremont Global Fund;FMAFX +N255=Gabelli Asset Fund;GABAX +N256=Gabelli Global Telecommunications;GABTX +N257=Gabelli Growth Fund;GABGX +N258=Gabelli Small Cap Growth Fund;GABSX +N259=Gabelli Value Fund;GABVX +N260=Gateway Index Plus Fund;GATEX +N261=GE Savings & Security Long Term;GESSX +N262=GE Savings Security Program;GESLX +N263=Gintel Erisa Fund;GINTX +N264=Gintel Fund;GINLX +N265=Goldman Sachs Smallcap Equity Fund;GSSMX +N266=Govett Smaller Cos Fund;GSCQX +N267=Gradison Established Growth Fund;GETGX +N268=Greenspring Fund;GRSPX +N269=GT Global America Growth Fund;GTAGX +N270=GT Global Bond Fund;GSIAX +N271=GT Global Emerging Mkt;GTEMX +N272=GT Global Europe Growth Fund;GTGEX +N273=GT Global Gov't Income Fund;GGINX +N274=GT Global Growth & Income Fund;GAGIX +N275=GT Global Health Care Fund;GGHCX +N276=GT Global Int'l Growth Fund;GINGX +N277=GT Global Japan Growth Fund;GJGRX +N278=GT Global Pacific Growth Fund;GTPAX +N279=GT Global Worldwide Growth Fund;GTWGX +N280=Guiness Flight China & HK;GFCHX +N281=Harbor Intl Fund;HAINX +N282=Hartwell Growth Fund;HRGRX +N283=Heartland Small Cap Cont Fund;HRSMX +N284=Heartland Value;HRTVX +N285=Hotchkis & Wiley Intl;HWINX +N286=Hotchkis & Wiley Low Duration;HWLDX +N287=Hotchkis & Wiley Total Return;HWTRX +N288=IAI Apollo Fund;IAAPX +N289=IAI Emerging Growth Fund;IAEGX +N290=IAI Growth & Income Fund;IASKX +N291=IAI Intl Fun;IAINX +N292=IAI Regional Fund;IARGX +N293=IDS Bond Fund;INBNX +N294=IDS Discovery Fund;INDYX +N295=IDS Equity Plus Fund;INVPX +N296=IDS Extra Income Fund;INEAX +N297=IDS Growth Fund;INIDX +N298=IDS Intl Fund;INIFX +N299=IDS Managed Retirement;IMRFX +N300=IDS Mutual Fund;INMUX +N301=IDS New Dimensions Fund;INNDX +N302=IDS Progressive Fund;INPRX +N303=IDS Selective Fund;INSEX +N304=IDS Stock Fund;INSTX +N305=IDS Strategy Aggressive;INAGX +N306=IDS Tax-Exempt Bond Fund;INTAX +N307=IDS Utilities Income Fund;INUTX +N308=Invesco Dynamics;FIDYX +N309=Invesco Emerging Growth Fund;FIEGX +N310=Invesco Financial Services;FSFSX +N311=Invesco Growth Fund;FLRFX +N312=Invesco Income Fund;FBDSX +N313=Invesco Income Hi Yield;FHYPX +N314=Invesco Income US Govt Security;FBDGX +N315=Invesco Industrial Income Fund;FIIIX +N316=Invesco International European;FEURX +N317=Invesco Intl Growth;FSIGX +N318=Invesco Intl Pacific Basin;FPBSX +N319=Invesco Strategic Energy;FSTEX +N320=Invesco Strategic Gold;FGLDX +N321=Invesco Strategic Health;FHLSX +N322=Invesco Strategic Leisure;FLISX +N323=Invesco Strategic Technology;FTCHX +N324=Invesco Strategic Utilities;FSTUX +N325=Invesco Tax Free Income;FTIFX +N326=Invesco Value Inter Bond Fund;FIGBX +N327=Invesco Value Total Return;FSFLX +N328=Invesco World Wide Communication;ISWCX +N329=Investco Environment;FSEVX +N330=Investco Multi Asset;IMABX +N331=Ivy Growth Fund;IVYFX +N332=Ivy Int'l Fund;IVINX +N333=Janus Enterprise;JAENX +N334=Janus Flex Income;JAFIX +N335=Janus Fund;JANSX +N336=Janus Growth & Income;JAGIX +N337=Janus Mercury Fund;JAMRX +N338=Janus Olympus Fund;JAOLX +N339=Janus Overseas;JAOSX +N340=Janus Twenty Fund;JAVLX +N341=Janus Venture Fund;JAVTX +N342=Janus Worldwide;JAWWX +N343=John Handcock World Fund;JHGRX +N344=Kaufman Fund;KAUFX +N345=Kemper Growth Fund];KGRAX +N346=Kemper Inv High Yield;KHYAX +N347=Keystone Balance Fund;KKONX +N348=Keystone Cust Fund Series S-4;KSFOX +N349=Keystone Diversified Bond;KBTWX +N350=Keystone Growth & Income;KSONX +N351=Keystone High Income;KBFOX +N352=Keystone Mid Cap Growth Fund;KSTHX +N353=Keystone Precious Metals Hldgs;KSPMX +N354=Keystone Quality Bond Fund;KBONX +N355=Keystone Strategic Growth Fund;KKTWX +N356=Keystone Tax Free Fund;KSTFX +N357=Legg Mason Special Investments;LMASX +N358=Legg Mason Value Trust;LMVTX +N359=Lexington Corp Lenders Tres;LEXCX +N360=Lexington Global Fund;LXGLX +N361=Lexington Gold Fund Inc;LEXMX +N362=Lexington Ramirez Global Incom;LEBDX +N363=Lexington Research Fund;LEXRX +N364=Lexington Strat Silver Fund;STSLX +N365=Lexington Strategic Investment;STIVX +N366=Lexington World Wide Emerging Markets;LEXGX +N367=Liberty Muni Security Fund;LMSFX +N368=Lindner Bulwark Inc;LDNBX +N369=Lindner Dividend Fund;LDDVX +N370=Lindner Fund;LDNRX +N371=Lord Ab Bond Deb;LBNDX +N372=Lord Ab Dev Growth Fund;LAGWX +N373=Lord Ab Govt Security Fd;LAGVX +N374=Lord Ab Value Appreciation;LAVLX +N375=Lord Abbett Affiliated Fund;LAFFX +N376=M Lynch Amer Inc Cl D;MDAMX +N377=M Lynch Americus;MBAMX +N378=M Lynch Asset Growth Cl B;MBAGX +N379=M Lynch Asset Income Cl B;MBASX +N380=M Lynch Basic Value Cl B;MBAZX +N381=M Lynch Basic Value;MBBAX +N382=M Lynch Bond Fund I& R Cl C;MCGOX +N383=M Lynch Cap Fund Cl B;MBCPX +N384=M Lynch Dev Cap Markets;MBDCX +N385=M Lynch E Africa Cl B;MBAFX +N386=M Lynch Euro Fund Cl B;MBEFX +N387=M Lynch Funds For Instit;MLTXX +N388=M Lynch Glb Cv Fund Cl B;MBGVX +N389=M Lynch Glob Util Cl B;MBGUX +N390=M Lynch Global Alloc Cl B;MBLOX +N391=M Lynch Global Bond I & R Cl B;MBGOX +N392=M Lynch Global Holdings Cl B;MBHDX +N393=M Lynch Global Res Tr Cl B;MBGRX +N394=M Lynch Global Small Cap Cl B;MBGCX +N395=M Lynch Growth Fd IRA Cl B;MBQRX +N396=M Lynch Growth Fund Cl B;MBFGX +N397=M Lynch Growth Inv & Retirement;MDQRX +N398=M Lynch Healthcare Cl B;MBHCX +N399=M Lynch Inst Interm Cl A;MLMEX +N400=M Lynch Intl Eq Fund Cl B;MBIEX +N401=M Lynch Latin Amer Cl B;MBLTX +N402=M Lynch Pacific Fd Cl B;MBPCX +N403=M Lynch Short Term Glb Cl B;MBSIX +N404=M Lynch Spec Value Cl B;MBSPX +N405=M Lynch Strat Div Cl B;MBDVX +N406=M Lynch Tech Fund Cl B;MBTCX +N407=M Lynch Tomorrow Fund Cl B;MBTWX +N408=M Lynch Util Income Cl B;MBUTX +N409=M Lynch Value Fund Cl B;MDSPX +N410=Managers Intermediate Mortgage;MGIGX +N411=Mas Pooled Intl Equity;MPIEX +N412=Mathers Fund;MATRX +N413=Merger Fund;MERFX +N414=Merrill Basic Value;MABAX +N415=Merrill Capital;MACPX +N416=Merrill Corp High Income;MAHIX +N417=Merrill Federal Securities;MBFSX +N418=Merrill Growth;MAQRX +N419=Merrill International Holdings;MAHDX +N420=Merrill Investment Grade;MBHQX +N421=Merrill L Phoenix Fund;MBPNX +N422=Merrill L Tech Fund;MATCX +N423=Merrill Lynch Dragon Fund;MBDRX +N424=Merrill Pacific;MAPCX +N425=Merrill Special Value;MASPX +N426=MFS Gov't Mortgage Fund;MGMTX +N427=MFS High Income Fund;MHITX +N428=Midas Fund Inc;EMGSX +N429=Monetta Fund Inc;MONTX +N430=Monitrend Gold Fund;MNTGX +N431=Montgomery Asset Allocation;MNAAX +N432=Montgomery Emerging Markets;MNEMX +N433=Montgomery Equity Income;MNEIX +N434=Montgomery Global Commun Fund;MNGCX +N435=Montgomery Global Opportunity;MNGOX +N436=Montgomery Growth;MNGFX +N437=Montgomery Intl Small Cap;MNISX +N438=Montgomery Micro Cap;MNMCX +N439=Montgomery Small Cap Fund;MNSCX +N440=Mutual Beacon Fund Inc;BEGRX +N441=Mutual Discovery Fund;MDISX +N442=Mutual Qualified Income Fund;MQIFX +N443=Mutual Shares Corp;MUTHX +N444=Navellier Aggressive Small Cap;NASCX +N445=Neub & Ber Partners;NPRTX +N446=Neub & Ber Select Sectors;NBSSX +N447=Neub Guardian;NGUAX +N448=Neub Ltd Maturity Bond;NLMBX +N449=Neub Manhattan;NMANX +N450=New USA Fund;NUSFX +N451=Newberger & Bermon Manttatn TR;NBMTX +N452=Nicholas Fund;NICSX +N453=Nicholas II Fund;NCTWX +N454=Nicholas Income Fund;NCINX +N455=Nomura Pacific Basin Fund;NPBFX +N456=Northeast Investors Growth Fund;NTHFX +N457=Northeast Investors Trust Fund;NTHEX +N458=Oakmark;OAKMX +N459=Oakmark Intl Fd;OAKIX +N460=Oberweis Emerging Grwth Fund;OBEGX +N461=Oppen Main St Income & Growth;MSIGX +N462=Oppenheimer Glabal A Fund;OPPAX +N463=Oppenheimer Gold & Spec Minerals;OPGSX +N464=Pacific Horizon Agressive Fund;PHAGX +N465=Pax World Fund;PAXWX +N466=Pbhg Emerging Growth;PBEGX +N467=Pbhg Fund;PBHGX +N468=PBHG Large Cap Growth;PBHLX +N469=PBHG Select Equity;PBHEX +N470=PBHG Tech & Communications Fund;PBTCX +N471=Penn Mutual Fund;PENNX +N472=Penn Square Fund;PESQX +N473=Pimco Adv Growth Fund;PGWCX +N474=Pimco Adv Intl Fund;PILCX +N475=Pimco Foreign;PFORX +N476=Piper Jaffray Institutional Gvt Income;PJIGX +N477=Pra Real Estate Fund;PRREX +N478=Primco Adv Oppt Cl C;POPCX +N479=Prud Global Utility Fund;GLUAX +N480=Prudential Interm Global Income Fund;PBIGX +N481=Put Convertible Fund;PCONX +N482=Put Diversified Income Trust;PDINX +N483=Put Growth & Income Fund;PGRWX +N484=Put Income Fund;PINCX +N485=Put Intl Equities;PEQUX +N486=Put Investors Fund;PINVX +N487=Put Natural Resources Fund;EBERX +N488=Put Option Income II Fund;PMITX +N489=Put OTC Emerging Growth Fund;POEGX +N490=Put Vista Basic Value Fund;PVISX +N491=Put Voyager Fund;PVOYX +N492=Putnam Cali Tax Ex Inc;PCTEX +N493=Putnam Health Sciences;PHSTX +N494=Putnam High Yield Tr B;PHBBX +N495=Putnam High Yield Tr A;PHIGX +N496=Putnam Tax Ex Income;PTAEX +N497=Quest For Value Fund;QFVFX +N498=Reich & Tang Equity Fund;RCHTX +N499=RIM Balanced PT;RIMBX +N500=RIM Small/Mid Cap Equity;RIMSX +N501=Rob St Contrarian Fund;RSCOX +N502=Rob St Dev Countries Fund;RSDCX +N503=Rob St Emerging Growth Fund;RSEGX +N504=Rob St Value Plus Fund;RSVPX +N505=Robertson Stephens Info Age;RSIFX +N506=Royce Mico Cap;RYOTX +N507=Royce Value Fund;RYVFX +N508=Rushmore Amer Gas Index;GASFX +N509=Ryder Juno Fund;RYJUX +N510=Rydex Nova Port;RYNVX +N511=Rydex OTC Fund;RYOCX +N512=Rydex Precious Metal Fund;RYPMX +N513=Rydex Ursa Fund;RYURX +N514=Rydex US Gov Bond;RYGBX +N515=Safeco Equity Fund;SAFQX +N516=Safeco Gov't Securities Fund;SFUSX +N517=Safeco Growth Fund;SAFGX +N518=Safeco Income Fund Inc;SAFIX +N519=Safeco Municipal Bond Fund;SFCOX +N520=SBS Strategic Investing;SESIX +N521=Schroder Capital Us Equity;SUSEX +N522=Schroder Intl Equity;SCIEX +N523=Schwab 1000 Fund;SNXFX +N524=Schwab Intl Index Fund;SWINX +N525=Scud CA Tax Free Fund;SCTFX +N526=Scud Capital Growth Fund;SCDUX +N527=Scud Development Fund;SCDVX +N528=Scud Emerg Mrkt Income;SCEMX +N529=Scud Global Bond Fund;SSTGX +N530=Scud Global Fund;SCOBX +N531=Scud Gnma Fund;SGMSX +N532=Scud Gold Fund;SCGDX +N533=Scud Growth & Income Fund;SCDGX +N534=Scud Hi Yield Tax Free;SHYTX +N535=Scud Income Fund Inc;SCSBX +N536=Scud Intl Bond Fund;SCIBX +N537=Scud Intl Fund;SCINX +N538=Scud Japan Fund;SJPNX +N539=Scud Med Term Tax Free;SCMTX +N540=Scud Mgt Municipal Fund;SCMBX +N541=Scud Quality Growth Fund;SCQGX +N542=Scud Short Term Bond Fund;SCSTX +N543=Scud US Tres Money Fund;SCGXX +N544=Scud Zero Coupon 2000 Target;SGZTX +N545=Scudder Global Discovery Fund;SGSCX +N546=Scudder Greater Europe Group;SCGEX +N547=Scudder Latin America Fund;SLAFX +N548=Scudder Pacific Opportunity;SCOPX +N549=Scudder Value Fund;SCVAX +N550=SEI Index S&P 500;TRQIX +N551=SEI Inst Managed Trust Small Cap Growth;SSCGX +N552=Select Special Shares;SLSSX +N553=Selected Amer Shares;SLASX +N554=Seligman Comm & Info Class D;SLMDX +N555=Seligman Frontier;SLFRX +N556=Sequoia Fund Inc;SEQUX +N557=Shearson SP High Income;SHIBX +N558=Sit Growth Fund Incorp;NBNGX +N559=Sit Small CAp Growth Fund;SSMGX +N560=Smith Barn Managed Growth Fund;SBMGX +N561=Sogen International;SGENX +N562=Spartan High Income Mutual Fund;SPHIX +N563=State Farm Growth Fund;STFGX +N564=State Street Research Govt Income Fund;SSGIX +N565=Stein Roe Capital Fund;SRFCX +N566=Stein Roe Growth Fund;SRFSX +N567=Stein Roe Hi Yield Muni;SRMFX +N568=Stein Roe Special Fund;SRSPX +N569=Stratton Growth Fund;STRGX +N570=Stratton Monthly Dividend;STMDX +N571=Strong Asia Pacific Fund;SASPX +N572=Strong Asset Allocation;STAAX +N573=Strong Common Stock Fund;STCSX +N574=Strong Corporate Bond Fund Inc;STCBX +N575=Strong Discovery Fund;STDIX +N576=Strong Government Securities;STVSX +N577=Strong Growth;SGROX +N578=Strong High Yield Fund;SHYLX +N579=Strong Intl Bond Fund;SIBUX +N580=Strong Intl Stock;STISX +N581=Strong Municipal Advantage Fund;SMUAX +N582=Strong Opportunity Fund;SOPFX +N583=Strong Short Term Bond;SSTBX +N584=Strong Short Term Glbl Bond;STGBX +N585=Strong Total Return Fund;STRFX +N586=T Price Rowe Capital Apprec Fund;PRWCX +N587=T Price Rowe Income Fund;PRCIX +N588=T Price Rowe Int'l Stock Fund;PRITX +N589=T Price Rowe New Era Fund;PRNEX +N590=T Price Rowe New Horizon Fund;PRNHX +N591=T Price Rowe Tax Free Hi Yield;PRFHX +N592=T Rowe Global Government Bond;RPGGX +N593=T Rowe Growth Fund;TRSGX +N594=T Rowe Income Fund;PRSIX +N595=T Rowe Japan;PRJPX +N596=T Rowe Latin Amer;PRLAX +N597=T Rowe Personal Strat;TRPBX +N598=T Rowe Price Equity Fund;PRFDX +N599=T Rowe Price Equity;PREIX +N600=T Rowe Price European Stock Fund;PRESX +N601=T Rowe Price High Yield Bond Fund;PRHYX +N602=T Rowe Price Int'l Bond Fund;RPIBX +N603=T Rowe Price Int'l Discovery Fund;PRIDX +N604=T Rowe Price New Amer Growth;PRWAX +N605=T Rowe Price NY Tax Free Bond Fund;PRNYX +N606=T Rowe Price OTC Fund;OTCFX +N607=T Rowe Price Science & Technology;PRSCX +N608=T Rowe Price Small Cap Value;PRSVX +N609=T Rowe Price Tax Free Short Interest;PRFSX +N610=T Rowe Price US Treasury Long Term;PRULX +N611=T Rowe Short Term Global Income;RPSGX +N612=Temp Foreign Equity Series;TFEQX +N613=Templeton Developing Market;TEDMX +N614=Templeton Foreign Fund;TEMFX +N615=Templeton Global Opport Tr;TEGOX +N616=Templeton Growth Fund;TEPLX +N617=Templeton Intl Stock Fund;FINEX +N618=Templeton Real Estate Securities;TEMRX +N619=Templeton World Fund;TEMWX +N620=TR Price Spec Growth Fund;PRSGX +N621=TR Price Spec Income Fund;RPSIX +N622=Trowe Price New Asia;PRASX +N623=Tweedy Browne Global Value;TBGVX +N624=United Bond Fund;UNBDX +N625=United Service Goldshares;USERX +N626=United Service Real Estate;UNREX +N627=United Service World Gold Fund;UNWPX +N628=USAA Agressive Growth Fund;USAUX +N629=USAA Capital Growth Fund;USAAX +N630=USAA Cornerstone Strat Fund;USCRX +N631=USAA Gold Fund;USAGX +N632=USAA Investment Intl;USIFX +N633=USAA Mutual Income Fund;USAIX +N634=USAA Tax Exempt Intermediate Term;USATX +N635=USAA Tax Exempt Short Term;USSTX +N636=Value Line Aggressive Income Fund;VAGIX +N637=Value Line Convertible Fd Inc;VALCX +N638=Value Line Fund;VLIFX +N639=Value Line High Yield Port;VLHYX +N640=Value Line Income Fund;VALIX +N641=Value Line Leveraged Growth;VALLX +N642=Value Line Special Fund;VALSX +N643=Value Line US Gov't Securities Fund;VALBX +N644=Van Eck Fund Intl Invest;INIVX +N645=Van Eck Gold Resources Fund;GRFRX +N646=Van Kampen Merriott US Govt Fund;VKMGX +N647=Vang Bond Market Fund;VBMFX +N648=Vang Converible Security Fund;VCVSX +N649=Vang Equity Income Port;VEIPX +N650=Vang Explorer Fund;VEXPX +N651=Vang GNMA Port;VFIIX +N652=Vang Gold & Precious Metal;VGPMX +N653=Vang High Yield Corp;VWEHX +N654=Vang Hor Capital Oppt;VHCOX +N655=Vang Horizon Aggressive Growth;VHAGX +N656=Vang Horz Glb Assets;VHAAX +N657=Vang Horz Glb Equity;VHGEX +N658=Vang Index 500 Trust;VFINX +N659=Vang Index Growth Fund;VIGRX +N660=Vang Index Trust Extended Market Fund;VEXMX +N661=Vang Index Value Fund;VIVAX +N662=Vang Intl Eq Emerging;VEIEX +N663=Vang Intl Index Europe;VEURX +N664=Vang Intl Index Pacific;VPACX +N665=Vang Life Cons Growth;VSCGX +N666=Vang Life Income;VASIX +N667=Vang Life Mod Pt;VSMGX +N668=Vang Morgan;VMRGX +N669=Vang Municipal Bond Fund;VWAHX +N670=Vang Preferred Stock Fund;VQIIX +N671=Vang Primecap;VPMCX +N672=Vang Quantitative;VQNPX +N673=Vang Short Term Corporate Fund;VFSTX +N674=Vang Short Term Gov't Bond Fund;VSGBX +N675=Vang Smallcap Stock Fund;NAESX +N676=Vang Special Energy Port;VGENX +N677=Vang Special Health Port;VGHCX +N678=Vang Star Fund;VGSTX +N679=Vang TCA Intl;VTRIX +N680=Vang TCF USA Fund;VTRSX +N681=Vang US Treasury Bond Port;VUSTX +N682=Vang Utility Income;VGSUX +N683=Vang Warwick Intermed Fund;VWITX +N684=Vang Warwick Short Fund;VWSTX +N685=Vang Wellesley;VWINX +N686=Vang Wellington Fund;VWELX +N687=Vang Westminster Fixed Income Fund;VWESX +N688=Vang Windsor Fund;VWNDX +N689=Vang Windsor II;VWNFX +N690=Vang World Fd Int'l Grwth;VWIGX +N691=Vang World Fund US Growth Port;VWUSX +N692=Vanguard Asset Allocation Strat;VAAPX +N693=Vanguard Life Growth;VASGX +N694=Vista Capital Growth Fund;VCAGX +N695=Von Wagoner Emerging Growth;VWEGX +N696=Von Wagoner Mid Cap Fund;VWMDX +N697=Vontobel Europacific;VNEPX +N698=Vontobel US Value;VUSVX +N699=Warburg Pin Gr & Income;RBEGX +N700=Warburg Pincus Emerging Growth;CUEGX +N701=Warburg Pincus Global Fixed Income;CGFIX +N702=Warburg Pincus Intl Equity;CUIEX +N703=Warburg Pincus Japan;WPJPX +N704=Wasatch Aggressive Equity Fund;WAAEX +N705=Wasatch Growth Fund;WGROX +N706=Wasatch Micro-Cap;WMICX +N707=Wasatch Mid-Cap Fund;WAMCX +N708=Wayne Hummer Income Fund;WHICX +N709=Weiss, Peck & Greer Tudor Fund;TUDRX +N710=World\Fds Vontobel US Value;VUSGX +N711=WPG Govt Securities;WPGVX +N712=WPG Growth & Income;WPGFX +N713=Wright Dutch Ntl Fund;WENLX +N714=Wright Equity Mex Ntl;WEMEX +N715=Wright Equity TR Hong Kong;WEHKX + diff --git a/http/HTTP.H b/http/HTTP.H new file mode 100644 index 0000000..d2f1600 --- /dev/null +++ b/http/HTTP.H @@ -0,0 +1,20 @@ +#ifndef _HTTP_HTTP_H_ +#define IDC_LISTBOX1 101 +#define _HTTP_HTTP_H_ + +#define HTTPMENU_FILE_OPEN 10000 +#define HTTPMENU_FILE_NEW 10001 +#define HTTPMENU_FILE_SAVE 10002 +#define HTTPMENU_FILE_SAVEAS 10003 +#define HTTPMENU_FILE_EXIT 10004 + +#define IDM_CASCADE 30 +#define IDM_TILE 31 +#define IDM_ARRANGE 32 +#define IDM_CLOSEALL 33 +#define IDM_MINIMIZEALL 34 +#define IDM_RESTOREALL 35 +#define IDM_HELP_CONTENTS 36 +#define IDM_HELP_SEARCH 37 +#define IDM_HELP_ABOUT 38 +#endif diff --git a/http/HTTP.HPP b/http/HTTP.HPP new file mode 100644 index 0000000..9d0b7e8 --- /dev/null +++ b/http/HTTP.HPP @@ -0,0 +1,6 @@ +#ifndef _HTTP_HTTP_HPP_ +#define _HTTP_HTTP_HPP_ +#ifndef _HTTP_HTTP_H_ +#include +#endif +#endif \ No newline at end of file diff --git a/http/HTTP.IDE b/http/HTTP.IDE new file mode 100644 index 0000000..8ef695e Binary files /dev/null and b/http/HTTP.IDE differ diff --git a/http/HTTP.INI b/http/HTTP.INI new file mode 100644 index 0000000..ce51d3b --- /dev/null +++ b/http/HTTP.INI @@ -0,0 +1,4292 @@ +[HTTP] +HOSTNAME=qs.secapl.com +REQUEST="GET /cgi-bin/qs?tick=" + +[NASDAQ] +N1=Accent Software International Ltd.;ACNTF +N2=Actrade International Ltd.;ACRT +N3=Adaptive Solutions, Inc.;ADSO +N4=ALDEN Electronics, Inc.;ADNEA +N5=Allegro New Media, Inc.;ANMI +N6=Alternate Postal Delivery, Inc.;ALTD +N7=Amedisys, Inc.;AMED +N8=Ancor Communications, Inc.;ANCR +N9=Applied Biometrics, Inc.;ABIO +N10=Applied Cellular Technology, Inc.;ACTC +N11=Applied Research Corporation ;APLS +N12=ARC Capital (Formerly Applied Laser Systems);ARCCA +N13=ASA International Ltd. ;ASAA +N14=Atlantic Pharmaceuticals, Inc.;ATLC +N15=Automobile Protection Corporation;APCO +N16=Blue Dolphin Energy Company;BDCO +N17=Bureau of Electronic Publishing, Inc.;BEPI +N18=Byron Preiss Multimedia Company, Inc.;CDRM +N19=Camelot Corporation;CAML +N20=Cardiotronics Systems, Inc.;CDIO +N21=Centurion Mines Corporation;CTMC +N22=Churchill Downs Incorporated;CHDN +N23=CinemaStar Luxury Theaters;LUXY +N24=Circuit Research Labs, Inc.;CRLI +N25=Classics International Entertainment, Inc.;CIEI +N26=Coda Music Technology;COMT +N27=CompuMed, Inc.;CMPD +N28=Computer Marketplace, Inc.;MKPL +N29=Computone Corporation;CMPT +N30=Concord Energy, Inc.;CODE +N31=CSI Computer Specialists, Inc.;CSIS +N32=Cusac Gold Mines Ltd.;CUSIF +N33=DeltaPoint, Inc.;DTPT +N34=Digital Sciences Inc.;DISI +N35=Dynamic Healthcare Technologies, Inc.;DHTI +N36=DynaMotive Technologies Corporation;DYMTF +N37=Eckler Industries, Inc.;ECKL +N38=Electronic Clearing House, Inc.;ECHO +N39=Enteractive, Inc.;ENTR +N40=Environment One Corporation;EONE +N41=Environmental Technologies USA, Inc.;ENVR +N42=Erox Corporation;EROX +N43=Esquire Communications Ltd.;ESQS +N44=Essex Corporation;ESEX +N45=Farmstead Telephone Group, Inc.;FONE +N46=FIND/SVP, Inc.;FSVP +N47=F1RSTMARK, Inc.;FIRM +N48=Focus Enhancements, Inc.;FCSE +N49=Gilman & Ciocia, Inc.;GTAX +N50=Graphix Zone, Inc.;GZON +N51=Great Pines Water Company, Inc.;GPWC +N52=Imex Medical Systems, Inc.;IMEX +N53=Independence Federal Savings Bank;IFSB +N54=Infodata Systems, Inc.;INFD +N55=Informedics, Inc.;IMED +N56=INOTEK Technologies Corp.;INTK +N57=Insignia Systems, Inc.;ISIG +N58=Integral Systems, Inc.;ISYS +N59=IntelliCorp, Inc.;INAI +N60=International Microcomputer Software, Inc.;IMSI +N61=International Precious Metals Corporation;IPMCF +N62=Internet Communications Corporation;INCC +N63=InVitro International;INVI +N64=Irvine Sensors Corporation;IRSN +N65=ITEX Corporation;ITEX +N66=Janex International, Inc.;JANX +N67=Kansas City Life Insurance Company;KCLI +N68=Kinetiks.com, Inc.;KNET +N69=Laser Video Network;LVNI +N70=LCA-Vision Inc.;LCAV +N71=LifeCell Corporation;LIFC +N72=LifeRate Systems, Inc.;LRSI +N73=LightPath Technologies Inc.;LPTHA +N74=Lotto World, Inc.;LTTO +N75=Marine National Bank;MNBK +N76=MaxServ, Inc.;MXSV +N77=Medizone International, Inc.;MZEI +N78=MetroBanCorp;METB +N79=Mitek Systems, Inc.;MITK +N80=Network Connection, Inc. (The);TNCX +N81=National Registry Inc. (The);NRID +N82=Nona Morelli's II, Inc.;NONA +N83=Norris Communications Corporation;NORRF +N84=Online System Services, Inc.;WEBB +N85=Navigato International, Inc.;NATO +N86=Pacific Animated Imaging Corp.;PAID +N87=Palomar Medical Technologies, Inc.;PMTI +N88=PerfectData Corporation;PERF +N89=Perle Systems Inc.;PERLF +N90=Precision Systems, Inc.;PSYS +N91=ProtoSource Corporation;PSCO +N92=PTI Holding, Inc.;PTII +N93=Pudgie's Chicken, Inc.;PUDG +N94=QCS Corporation;QCSC +N95=Quadrax Corporation;QDRX +N96=Rent-A-Wreck of America, Inc.;RAWA +N97=Rotary Power International, Inc.;RPII +N98=Sanctuary Woods Multimedia Corporation ;SWMFC +N99=Scangraphics, Inc.;SCNG +N100=Seiler Pollution Control Systems, Inc.;SEPC +N101=Silverado Mines, Ltd.;GOLDF +N102=Socket Communications, Inc.;SCKT +N103=Spanlink Communications;SPLK +N104=Sparta Pharmaceuticals, Inc.;SPTA +N105=Spatializer Audio Laboratories, Inc.;SPAZ +N106=Sports International Ltd.;SBET +N107=Sports Sciences, Inc.;SSCI +N108=SunRiver Corporation;SRVC +N109=SwissRay International, Inc.;SRMI +N110=SYSTEMS of Excellence, Inc.;SEXI +N111=Vasco Data Security, Inc.;VASC +N112=Vector Aeromotive Corporation;VCAR +N113=VictorMaxx Technologies, Inc.;VMAX +N114=VideoLabs Inc.;VLAB +N115=Visual Information Services Corp.;VICP +N116=Voice Powered Technology International, Inc.;VPTI +N117=VOXEL;VOXL +N118=VSI Enterprises, Inc.;VSIN +N119=Wavetech, Inc.;ITEL +N120=Zila, Inc.;ZILA + +[NYSE] +N1=A G Edwards;AGE +N2=AAR Corporation;AIR +N3=Abbott Laboratories;ABT +N4=Abitibi Price Inc;ABY +N5=Acceptance Insurance Cos;AIF +N6=ACE Ltd;ACL +N7=ACM Gov't Income Fund;ACG +N8=ACM Gov't Income Opportunity;AOF +N9=ACM Gov't Securities Fund;GSF +N10=ACM Gov't Spectrum Fund Inc.;SI +N11=ACM Managed Dollar Income Fund;ADF +N12=ACM Managed Income Fund;AMF +N13=ACM Municipal Sec Income Fund;AMU +N14=Acme Cleveland Corp;AMT +N15=Acme Electric Corp;ACE +N16=Acordia Inc;ACO +N17=Acuson Corp;ACN +N18=ACX Technologies;ACX +N19=Adams Express Co;ADX +N20=Advanced Micro Devices;AMD +N21=Advest Group Inc;ADV +N22=Advo System Inc;AD +N23=Advocat Inc;AVC +N24=Aegon Nv;AEG +N25=Aeroflex Labs Inc;ARX +N26=Aetna Life & Casualty;AET +N27=AFLAC Inc;AFL +N28=Agco;AG +N29=AGL Resources Inc;ATG +N30=Agree Realty Corp;ADC +N31=Ahmanson(HF) & Co;AHM +N32=Ahold Nv ADR;AHO +N33=Air Products & Chem.;APD +N34=Airborne Freight Corp;ABF +N35=Airgas Inc;ARG +N36=Airlease Ltd;FLY +N37=Airtouch Communication Inc;ATI +N38=AJL Peps Trust;AJP +N39=AK Steel Holding Corp;AKS +N40=Alamo Group Inc;ALG +N41=Alaska Airlines Inc;ALK +N42=Albany Intl Corp Class A;AIN +N43=Albemarble Corp;ALB +N44=Alberta Energy Co;AOG +N45=Alberto Culver Class A;ACVA +N46=Alberto-Culver Co;ACV +N47=Albertsons Inc;ABS +N48=Alcan Aluminum;AL +N49=Alcatel Alsthom;ALA +N50=Alco Standard Corp.;ASN +N51=Alden Financial Corp;JA +N52=Alex Brown Inc;AB +N53=Alexander & Alex Svcs;AAL +N54=Alexanders Inc;ALX +N55=All American Target Term Trust;AAT +N56=Allegheny Corp;Y +N57=Allegheny Ludlim Corp;ALS +N58=Allegheny Power System;AYP +N59=Allen Group Inc;ALN +N60=Allen Interiors Inc;ETH +N61=Allergan;AGN +N62=Alliance All Market A;AMO +N63=Alliance Capital Management Lp;AC +N64=Alliance Entertainment Corp;CDS +N65=Alliance Global Environment Fund Inc.;AEF +N66=Alliance World Dol Govt Fund II;AWF +N67=Alliance World Dollar Govt;AWG +N68=Alliant Techsystems Inc;ATK +N69=Allied Irish Bancshares;AIB+ +N70=Allied Irish Banks Plc ADR;AIB +N71=Allied Products Corp;ADP +N72=Allied Signal Corp;ALD +N73=Allmerica Financial;AFC +N74=Allmerica Property And Casualty;APY +N75=Allmerica Security Trust;ALM +N76=Allstate Corp 98;PME +N77=Allstate Insurance;ALL +N78=Allstate Muni Income Tr III;TFC +N79=Allstate Muni Opp Fund;OIB +N80=Allstate Muni Premium Trust;PIA +N81=Allstate Municipal Fund;TFA +N82=Allstate Municipal Income Ii;TFB +N83=ALLTEL Corp;AT +N84=Allwaste Inc;ALW +N85=ALPharma Inc;ALO +N86=Alumax Inc;AMX +N87=Aluminum Co. Of Amer (ALCOA);AA +N88=ALZA Corp;AZA +N89=Amax Gold Inc;AU +N90=Ambac;ABK +N91=Amcast Industrial Corp;AIZ +N92=Amdin De Fondos De Pension;PVD +N93=Amer Banknote;ABN +N94=Amer Brands Inc;AMB +N95=Amer Building Maint;ABM +N96=Amer Business Prod;ABP +N97=Amer Elecric Power;AEP +N98=Amer Express;AXP +N99=Amer Financial Group;AFG +N100=Amer General Corp;AGC +N101=Amer Gov't Income Fund;AGF +N102=Amer Gov't Income Port;AAF +N103=Amer Health Properties;AHE +N104=Amer Heritage Lf Inv;AHL +N105=Amer Home Prod;AHP +N106=Amer Hotels & Realty Cp;AHR +N107=Amer Intl Group;AIG +N108=Amer Muni Term Trust Inc;AXT +N109=Amer Muni Term Trust II;BXT +N110=Amer Opportunity Income Fund;OIF +N111=Amer Precision Ind;APR +N112=Amer President Co Ltd;APS +N113=Amer Real Estate Lp;ACP +N114=Amer Realty Trust;ARB +N115=Amer Standard;ASD +N116=Amer Stores Co;ASC +N117=Amer Strategic Income Port II;BSP +N118=Amer Strategic Income Fund;ASP +N119=Amer Waste Services Inc;AW +N120=Amer Water Works;AWK +N121=Amer West Airlines;AWA +N122=Amerada Hess Corp.;AHC +N123=American Annuity Group;AAG +N124=American Eagle;FLI +N125=American Industrial Properties Reit Sbi;IND +N126=American Media Inc;ENQ +N127=American Medical Response Inc;EMT +N128=American Muni Inc Por;XAA +N129=American Muni Term Tr;CXT +N130=American Re Corp;ARN +N131=American Select Portfolio Inc;SLA +N132=American Strat Inc Port III;CSP +N133=Americas Income Trust;XUS +N134=Americredit;ACF +N135=Ameridata Technologies;ADA +N136=Amerigas Partners;APU +N137=Ameriquest Technologies;AQS +N138=Ameritech;AIT +N139=Ameron Intl Corp;AMN +N140=Ametek Inc;AME +N141=AMLI Residential Properties Trust;AML +N142=Amoco;AN +N143=AMP Inc;AMP +N144=Ampco Pittsburgh Corp;AP +N145=Ampex Corp;AXC +N146=Amphenol Cp;APH +N147=AMR Corp;AMR +N148=Amre Inc;AMM +N149=Amrep Corporation;AXR +N150=Amsco Intl Inc;ASZ +N151=Amsouth Bancorp;ASO +N152=Amvestors Finan Cp;AMV +N153=Amway Asia Pacific Ltd;AAP +N154=Amway Japan Limited;AJL +N155=Anadarko Petroleum;APC +N156=Analog Devices Inc;ADI +N157=Angelica Corporation;AGL +N158=Anheuser Busch Co.;BUD +N159=Anixter Intl;AXE +N160=Ann Taylor Inc;ANN +N161=Anthony Industries;ANT +N162=Aon Corp;AOC +N163=Apache Corp.;APA +N164=Apartment Int & Mngt;AIV +N165=Apex Municipal Fund;APX +N166=Applied Magnetics Corp;APM +N167=Applied Power Inc Class A;APW +N168=Aptargroup Inc;ATR +N169=Aquarion;WTR +N170=Aquila Gas Pipeline Corp;AQP +N171=Aracruz Celulose Sa ADR;ARA +N172=Arbor Property Trust;ABR +N173=Arcadian Corp;ACA +N174=Archer-Daniels Midland;ADM +N175=Arco Chemical;RCM +N176=Argentina Fund Inc;AF +N177=Arizona Publ Series Q;ARP+Q +N178=Armco Inc.;AS +N179=Armstrong World Ind Inc;ACK +N180=Arrow Electronics Inc;ARW +N181=Artra Group Inc;ATA +N182=Arvin Industries;ARV +N183=Asa Ltd.;ASA +N184=ASARCO Inc;AR +N185=Ashanti Goldfield Ltd;ASL +N186=Ashland Coal Inc;ACI +N187=Ashland Oil Inc.;ASH +N188=Asia Pacific;APB +N189=Asia Pacific Resources Intl;ARH +N190=Asia Pulp & Paper;PAP +N191=Asis Tigers Fund;GRR +N192=Asset Investors;AIC +N193=Associated Estates Realty Cp;AEC +N194=AT&T;T +N195=AT&T Capital Corp;TCC +N196=Atalanta Sosnoff Cap;ATL +N197=Atlantic Energy N.J.;ATE +N198=Atlantic Richfield Co.;ARC +N199=Atlantic Richfield Co;LYX +N200=Atlas Corporation;AZ +N201=Atmos Energy Corp;ATO +N202=Augat Incorporated;AUG +N203=Australia & New Zealand Bank Group;ANZ +N204=Austria Fund Inc;OST +N205=Austrialia New Zealand Bank pf;ANZ+ +N206=Austrian Stock Index Notes;SPJ +N207=Authentic Fitness Corp;ASM +N208=Automated Security Holdings;ASI +N209=Automatic Data Process;AUD +N210=Autozone Inc.;AZO +N211=Avalon Properties Inc;AVN +N212=AVEMCO Cp;AVE +N213=Avery Dennison Cp;AVY +N214=Aviall Inc;AVL +N215=Avnet Incorp.;AVT +N216=Avon Products Inc.;AVP +N217=AVX Corp;AVX +N218=Aydin Corporation;AYD +N219=Aztar Cp;AZR +N220=B J Services Co;BJS +N221=Bairnco Corp;BZ +N222=Baker Fentress & Co;BKF +N223=Baker Hughes;BHI +N224=Baldor Electric Co.;BEZ +N225=Ball Corp.;BLL +N226=Ballantyne of Omaha Inc;BTN +N227=Ballard Medical Products;BMP +N228=Bally Entertainment;BLY +N229=Baltimore Gas And Electric;BGE +N230=Banc One;ONE +N231=Banco Bilbao Vizcaya S A;BBV +N232=Banco Central Sa Dep Sh;BCH +N233=Banco Commercial Portugues ADR;BPC +N234=Banco De Edwards Adr;AED +N235=Banco De Santander Soc An;STD +N236=Banco France Del Rio De La Plata;BFR +N237=Banco Ganadero;BGA +N238=Banco Industrial Colombiano Sa;CIB +N239=Banco Latin Americano De Exportaciones;BLX +N240=Banco Ohiggins ADR;OHG +N241=Banco Osorno La Union;BOU +N242=Banco Wiese Limitado ADR;BWP +N243=Bancorp Hawaii Inc;BOH +N244=Banctech Inc;BTC +N245=Bandag Inc Cl A;BDGA +N246=Bandag Inc.;BDG +N247=Bangor Hydro El;BGR +N248=Bank Amer Pref M;BAC+M +N249=Bank America Corp;BAC +N250=Bank Of Boston Corp.;BKB +N251=Bank Of Montreal;BMO +N252=Bank Of New York Co;BK +N253=Bank of Tokyo Mitsubishi Ltd;MBK +N254=Banker Life Holdings Corp;BLH +N255=Bankers Note Inc;TBN +N256=Bankers Trust;BT +N257=Banner Aerospace Inc;BAR +N258=Barclay Banks;BCS +N259=Barclays Bank Plc Pf Series C;BCB+C +N260=Bard (C.R.) Inc;BCR +N261=Barnes & Noble Inc;BKS +N262=Barnes Group Inc;B +N263=Barnett Bank Of Florida;BBI +N264=Barrett Resource Cp;BRR +N265=Barrick Gold Corp;ABX +N266=Barry R G Cp;RGB +N267=Bass Plc Ads;BAS +N268=Battle Mountain Gold Class A;BMG +N269=Bausch & Lomb Inc.;BOL +N270=Baxter Intl;BAX +N271=Bay Apartment Community;BYA +N272=Bay State Gas Co;BGC +N273=BBN Corp;BBN +N274=BCE Inc;BCE +N275=Bea Income Fund;FBF +N276=Bea Strat Income Fund;FBI +N277=Beacon Properties;BCN +N278=Bear Stearns Co;BSC +N279=Bearings Inc;BER +N280=Beazer Homes USA Inc;BZH +N281=Beckman Instrument Inc.;BEC +N282=Becton Dickinson Co.;BDX +N283=Bedford Property Investors;BED +N284=Belden Inc;BWC +N285=Belding Hemingway;BHY +N286=Bell & Howell Co;BHW +N287=Bell Atlantic Cp.;BEL +N288=Bell Industries;BI +N289=Bell South Corp.;BLS +N290=Belo A H;BLC +N291=Bemis Co. Inc.;BMS +N292=Beneficial Corp.;BNL +N293=Benetton Group Spa;BNG +N294=Benguet Corp Class B;BE +N295=Benson Eyecare Corp;EYE +N296=Berg Electronics;BEI +N297=Bergen Brunswig Cp;BBC +N298=Berkshire Hathaway Inc;BRK +N299=Berkshire Reality Co;BRI +N300=Berlitz Intl Inc;BTZ +N301=Berry Petroleum Co Class A;BRY +N302=Best Buy Co. Inc;BBY +N303=Bet Holdings Class A;BTV +N304=Bet Public Ltd Co.;BEP +N305=Bethlehem Steel Corp.;BS +N306=Bethlehem Steel Cp Pf $5.00;BS+ +N307=Betz Laboratories Inc;BTL +N308=Beverly Enterprises;BEV +N309=Big Flower Press Holdings Inc;BGF +N310=Bindley Western Ind;BDY +N311=Bio Whittaker Inc;BWI +N312=Biocraft Labs Inc;BCL +N313=Biovail Corp;BVF +N314=Birmingham Steel Corp;BIR +N315=Black & Decker Mfg.;BDK +N316=Black Hills Corp;BKH +N317=Blackrock 1998 Term Trust Inc;BBT +N318=Blackrock 1999 Term Tr;BNN +N319=Blackrock 2001 Term Trust Inc;BLK +N320=Blackrock Advantage Term Trust;BAT +N321=Blackrock CA Ins Muni 2008;BFC +N322=Blackrock FL Ins Muni 2008;BRF +N323=Blackrock Income Trust;BKT +N324=Blackrock Ins Muni 2008;BRM +N325=Blackrock Insured Muni 2008;BMT +N326=Blackrock Inv Qual Muni;BKN +N327=Blackrock Target Trust Inc;BTT +N328=Blackstone Investment Quality Term Trust;BQT +N329=Blackstone Muni Target Term Trust Inc;BMN +N330=Blackstone N Amer Government Income Trus;BNA +N331=Blackstone Strategic Term Trust;BGT +N332=Blanch Holdings Inc;EWB +N333=Block (H & R);HRB +N334=Blount Inc Cl A;BLTA +N335=Blount Inc Cl B;BLTB +N336=Blue Chip Value Fund Inc.;BLU +N337=Bluegreen Corp;BXG +N338=Blyth Industries;BTH +N339=BMC Inc;BMC +N340=Boeing Co.;BA +N341=Boise Cascade Corp.;BCC +N342=Boise Cascade Office Products;BOP +N343=Bombay Co Inc;BBA +N344=Borden Chemical & Plastics Lp Uts;BCU +N345=Borders Group;BGP +N346=Borg Warner Automotive Inc;BWA +N347=Borg-warner Security Corp;BOR +N348=Boston Beer Co Cl A;SAM +N349=Boston Celtics Lp;BOS +N350=Boston Edison Co.;BSE +N351=Boston Scientific Corp;BSX +N352=Bowater Inc;BOW +N353=Boyd Gaming Inc;BYD +N354=Bradlees Inc;BLE +N355=Bradley Real Estate Tr Sbi;BTR +N356=Brazil Fund;BZF +N357=Brazilian Equity Fund;BZL +N358=BRE Properties Inc;BRE +N359=Breed Technology;BDT +N360=Briggs & Stratton Corp.;BGG +N361=Brilliance China Automotive Holding;CBA +N362=Brinker International Inc;EAT +N363=Bristol Hotel Co;BH +N364=Bristol Myers Squibb Co.;BMY +N365=Brit Pet Pru Bay Rlty Tr;BPT +N366=British Airways;BAB +N367=British Gas;BRG +N368=British Petroleum;BP +N369=British Petroleum ADR Pp;BP_P +N370=British Sky Broadcasting Group;BSY +N371=British Steel Pp ADR;BST +N372=British Telecom;BTY +N373=Broken Hill Propriety;BHP +N374=Brooke Group Ltd;BGL +N375=Brooklyn Union Gas Co;BU +N376=Brown & Sharpe Mfg. Co.;BNS +N377=Brown Group;BG +N378=Brown-Foreman Class B;BFB +N379=Brown-foreman Inc. Class A;BFA +N380=Browning-Ferris Ind;BFI +N381=Brt Realty Trust Sbi;BRT +N382=Brunswick Corp.;BC +N383=Brush Wellman Inc.;BW +N384=BT Office Products Int'l Inc;BTF +N385=Buckeye Cellulose Corp;BKI +N386=Buckeye Partners Lp;BPL +N387=Buenos Aires Enbotelladora ADR;BAE +N388=Bufete Industries;GBI +N389=Burlington Coat Factory Warehouse;BCF +N390=Burlington Industries Equity Inc;BUR +N391=Burlington Northern Santa Fe Corp;BNI +N392=Burlington Resource Coal Seam Gas Royalt;BRU +N393=Burlington Resources;BR +N394=Burnham Pacific Property Inc;BPP +N395=Bush Boake Allen Inc;BOA +N396=Bush Ind Inc Cl A;BSH +N397=Cable & Wireless Plc;CWP +N398=Cabletron Systems;CS +N399=Cabot Corporation;CBT +N400=Cabot Oil & Gas Cp;COG +N401=Cadence Design Sys Inc;CDN +N402=Cal Fed Bancorp Inc.;CAL +N403=Cal Reit Sbi;CT +N404=Caldor Corp;CLD +N405=Calgon Carbon Cp;CCC +N406=Cali Realty;CLI +N407=Caliber Systems;CBB +N408=Calienergy Co;CE +N409=Calif Water Serv Co;CWT +N410=Callaway Golf Cp;ELY +N411=Calmat Co.;CZM +N412=Camco International Inc;CAM +N413=Camden Property Trust Sbi;CPT +N414=Campbell Resources Inc;CCH +N415=Campbells Soup Co.;CPB +N416=Canadian Pacific Ltd.;CP +N417=Capital American Financial;CAF +N418=Capital One Financial;COF +N419=Capital Re Corp;KRE +N420=Capmac Holdings Inc;KAP +N421=Capstead Mortgage Corp;CMO +N422=Capstone Capital Cp;CCT +N423=Capsure Holdings Corp;CSH +N424=Cardinal Health Inc;CAH +N425=Career Horizons Inc;CHZ +N426=Caremark Interrnational Inc;CK +N427=Caribiner Intl Inc;CWC +N428=Carlisle Corp;CSL +N429=Carlisle Plastics Inc;CPA +N430=Carmike Cinemas Inc Class A;CKE +N431=Carnival Corp;CCL +N432=Carolina P & L 8.55%;CPD +N433=Carolina Power & Light;CPL +N434=Carpenter Technology;CRS +N435=Carr Gottstein Food;CGF +N436=Carr Realty;CRE +N437=Carson Pirie Scott & Co;CRP +N438=Carter Wallace Inc.;CAR +N439=Cascade Natural Gas;CGC +N440=Case Corp;CSE +N441=Cash Amer Investments;PWN +N442=Castech Aluminum Group;CTA +N443=Catalina Lighting Inc;LTG +N444=Catalina Marketing Cp;POS +N445=Catellus Development Cp;CDX +N446=Caterpillar Tractor;CAT +N447=CBL & Associates Properties;CBL +N448=CDI Corp;CDI +N449=Cedar Fair LP;FUN +N450=Centex Corp.;CTX +N451=Central & Southwest Cp;CSR +N452=Central European Equity Fund;CEE +N453=Central Hudson Gas & Electric;CNH +N454=Central Illinois Public Serv;CIP +N455=Central Louisiana Electric;CNL +N456=Central Maine Power;CTP +N457=Central Newspapers Inc;ECP +N458=Central Parking Corp;PK +N459=Central Transport Rental Group;TPH +N460=Central Vermont Pub Svc;CV +N461=Centura Banks Inc;CBC +N462=Centurior Energy;CX +N463=Century Telep Entpr;CTL +N464=Cenvill Invest Unpaired;CVI +N465=Ceridian Corp;CEN +N466=Champion Enterprises;CHB +N467=Champion Intl;CHA +N468=Chaparral Steel Co;CSM +N469=Chart House Enterprises Inc;CHT +N470=Chart Industries Inc;CTI +N471=Chase Brass Ind;CSI +N472=Chase Manhattan Bank Pf Series I;CMB+I +N473=Chase Manhatten 8.32;CMB+L +N474=Chase Manhatten 8.375;CMB+H +N475=Chase Manhatten 8.5;CMB+K +N476=Chase Manhatten 9.08;CMB+J +N477=Chase Manhatten pf C;CMB+C +N478=Chase manhatten pf D;CMB+D +N479=Chase Manhatten pf E;CMB+E +N480=Chase Manhatten pf F;CMB+F +N481=Chateau Properties;CPJ +N482=Chaus Bernard;CHS +N483=Check Point Systems;CKP +N484=Chelsea GCA Realty Inc;CCG +N485=Chemed Corp;CHE +N486=Chesapeake Corp;CSK +N487=Chesapeake Energy Corp;CHK +N488=Chesapeake Util Cp;CPK +N489=Chevron;CHV +N490=Chic By H I S;JNS +N491=Chile Fund;CH +N492=Chilgener ADR;CHR +N493=China Fund Inc;CHN +N494=China Tire Holding Ltd;TIR +N495=China Yuchai Intl;CYD +N496=Chiquita Brands Intl;CQB +N497=Chock Full O Nuts;CHF +N498=Chris Craft Ind.;CCN +N499=Christiana Companies;CST +N500=Chromecraft Revington Inc;CRC +N501=Chrysler;C +N502=Chubb Corp. (The);CB +N503=Church & Dwight Co Inc;CHD +N504=Chyron Corp;CHY +N505=CIGNA;CI +N506=Cigna Hi Income Shares;HIS +N507=Cilcorp Inc Hldg Co.;CER +N508=Cincinnati Bell Hldg Co.;CSN +N509=Cincinnati Milacrom;CMZ +N510=Cineplex Odeon Corp;CPX +N511=CINergy Corp;CIN +N512=Circle K Corp;CRK +N513=Circuit City Stores;CC +N514=Circus Circus Enterprises;CIR +N515=Citicorp;CCI +N516=Citicorp Pf E;CCI+E +N517=Citizens Corp;CZC +N518=Citizens Util Class A;CZNA +N519=Citizens Util Class B;CZNB +N520=City Natl Cp;CYN +N521=CKE Restaurants;CKR +N522=Claire's Stores Inc;CLE +N523=Clarcor Inc;CLC +N524=Clayton Homes Inc;CMH +N525=Clear Channel Inc;CCU +N526=Clemente Global Growth Fund;CLM +N527=Cleveland-Cliffs Inc Co.;CLF +N528=Clorox (The) Co;CLX +N529=CMAC Investments Corp;CMT +N530=CMI Corp;CMX +N531=CML Group Inc;CML +N532=CMS Energy;CMS +N533=CNA Financial;CNA +N534=CNA Income Shares Inc.;CNN +N535=Coachman Ind.;COA +N536=Coast Savings & Loan Asc;CSA +N537=Coastal Corp;CGP +N538=Coastal Physician Group;DR +N539=Coastcast Corp;PAR +N540=Coca Cola Co.;KO +N541=Coca Cola Enterprise;CCE +N542=Coca-Cola Femsa ADR;KOF +N543=Coeur D'alene Mines Cp;CDE +N544=Cohen & Steers Tot Ret;RFI +N545=Cold Metal Products Inc;CLQ +N546=Cole National;CNJ +N547=Cole Production;KCP +N548=Coleman;CLN +N549=Coles Myer Ltd ADR;CM +N550=Colgate Plus;CL+ +N551=Colgate-Palmolive Co.;CL +N552=Collins & Aikman Cp;CKC +N553=Colonial Bancgroup Class A;CNB +N554=Colonial High In Muni Tr;CXE +N555=Colonial Intermarket Income Trust I;CMK +N556=Colonial Intermediate Fund;CIF +N557=Colonial Inv Muni Tr;CXH +N558=Colonial Muni;CMU +N559=Colonial Properties Trust Sbi;CLP +N560=Coltec Industries Inc;COT +N561=Columbia Gas Systems;CG +N562=Columbia/HCA Healthcare Corp;COL +N563=Columbus Realty Trust Sbi;CLB +N564=Comdisco Inc;CDO +N565=Comerica Inc;CMA +N566=Commerce Group Inc;CGI +N567=Commercial Federal Cp;CFB +N568=Commercial Intertech Cp;TEC +N569=Commercial Metals Co;CMC +N570=Commercial Net Leasing Reality Inc;NNN +N571=Commonwealth Egy Sbi;CES +N572=Communication Satellite;CQ +N573=Community Health Systems Inc;CYH +N574=Community Psychiatric;CMY +N575=Compania De Telecomm De Chile As ADR;CTC +N576=Compaq Computer;CPQ +N577=Comprehensive Care Corp;CMP +N578=CompUSA Inc;CPU +N579=Computer Assoc Intl Inc;CA +N580=Computer Science Corp.;CSC +N581=Computer Task Group Inc;TSK +N582=Computervision Corp;CVN +N583=ConAgra Inc.;CAG +N584=Cone Mills Cp;COE +N585=Congoleum Corp;CGM +N586=Conn Energy Corp;CNE +N587=Connecticut Natural Gas;CTG +N588=Conrail Inc;CRR +N589=Cons Edison 4.65 Pf Series C;ED+C +N590=Cons Edison 5.00 Pf Series A;ED+A +N591=Conseco Inc;CNC +N592=Consl Papers Inc;CDP +N593=Consolidated Edison NY;ED +N594=Consolidated Freightway;CNF +N595=Consolidated Natural Gas;CNG +N596=Consolidated Stores Cp;CNS +N597=Consorci G Grupo Dina ADR;DIN +N598=Contifinancial Corp;CFN +N599=Continental Can Corp;CAN +N600=Continential Airlines Class A;CAIA +N601=Continential Airlines Class B;CAIB +N602=Continuum Company Inc;CNU +N603=Contl Homes Holding Cp;CON +N604=Convenience Holding Co;CNV +N605=Converse;CVE +N606=Cooker Restaurant Corp;CGR +N607=Cooper Cameron Corp;RON +N608=Cooper Industries Inc.;CBE +N609=Cooper Tire & Rubber;CTB +N610=Coopervision;COO +N611=Coram Healthcare Corp;CRH +N612=Cordiant ADR;CDA +N613=Core Business Services;CBS +N614=Core Ind. Inc;CRI +N615=Corestates Finan Cp;CFL +N616=Corimon Inc;CRM +N617=Corning Inc;GLW +N618=Corporacion Bancaria De Espana ADR;AGR +N619=Corporate High Yield Fund;COY +N620=Corporate High Yield Fd II;KYT +N621=Corrections Corp Of America;CXC +N622=Corrpro Cos;CO +N623=Counsellors Tandem Sec Fd;CTF +N624=Countrybasket France Index;GXF +N625=Countrybasket German;GXG +N626=Countrybasket Hong Kong Index;GXH +N627=Countrybasket Italy Index;GXI +N628=Countrybasket Japan;GXJ +N629=Countrybasket S Africa;GXR +N630=Countrybasket UK Index;GXK +N631=Countrybasket US Index;GXU +N632=Countrywide Credit Ind.;CCR +N633=Cousins Properties Inc;CUZ +N634=Cox Communications;COX +N635=CPC Intl;CPC +N636=CPI Corp;CPY +N637=Craig Corp;CRG +N638=Crane Co;CR +N639=Crawford & Co Class A;CRDA +N640=Crawford & Co Class B;CRDB +N641=Cray Research Inc.;CYR +N642=Credicorp Inc;BAP +N643=Crescent Real Estate Equities;CEI +N644=Crestar Financial Corp;CF +N645=CRI Liquid Reit Income Fund;CFR +N646=Criimi Mae Inc;CMM +N647=Cristalerias De Chile ADR;CGW +N648=Crompton & Knowles Cp;CNK +N649=Cross Timber Royalty Trust;CRT +N650=Cross Timbers Oil Co;XTO +N651=Crown American Realty Trust Sbi;CWN +N652=Crown Cork & Seal;CCK +N653=Crown Crafts Inc;CRW +N654=Crown Pacific Partners;CRO +N655=CSS Industries;CSS +N656=CSX Corp.;CSX +N657=CTS Corporation;CTS +N658=CUC Intl Inc;CU +N659=Culbro Corp;CUC +N660=Culligan Water Tech;CUL +N661=Cummins Engines;CUM +N662=Current Income Shares;CUR +N663=Curtiss Wright Corp;CW +N664=CWM Mortgage Holding;CWM +N665=Cycare Systems Inc;CYS +N666=Cypress Amax Minerals;CYM +N667=Cypress Semiconductor Corp;CY +N668=Cytec Industries;CYT +N669=Czech Republic Fund;CRF +N670=D R Horton Inc;DHI +N671=Daimler Benz Ag ADR;DAI +N672=Dallas Semiconductor Cp;DS +N673=Dames & Moore Inc;DM +N674=Dana Corp;DCN +N675=Danahr Corp;DHR +N676=Daniel Ind Inc;DAN +N677=Darden Restaurants;DRI +N678=Data General Corp.;DGN +N679=Data Water/waste;DWW +N680=Datapoint Corp.;DPT +N681=Dayton Hudson Corp.;DH +N682=DDL Electronics Inc;DDL +N683=De Rigo Spa Adr;DER +N684=Dean Foods Co.;DF +N685=Dean Witter Discover & Co;DWD +N686=Dean Witter Gov't Income Trust;GVT +N687=Debartolo Realty Corp;EJD +N688=Deere & Co;DE +N689=Delaware Group Div & Income Fd;DDF +N690=Deleware Group Global Dividend;DGF +N691=Delmarva Power;DEW +N692=Delta & Pine Land Co;DLP +N693=Delta Air Lines;DAL +N694=Delta Airlines P;DAL+C +N695=Delta Woodside Ind Inc;DLW +N696=Deluxe Check Printers;DLX +N697=Department 56 Inc;DFS +N698=Desc Sa De Service ADR;DES +N699=Desoto Inc;DSO +N700=Destec Energy Inc;ENG +N701=Detroit Diesel Corp;DDC +N702=Developers Diversified Reality Corp;DDR +N703=Dexter Corp;DEX +N704=Diagnostic Product Corp;DP +N705=Dial Corp (The);DL +N706=Diamond Offshore Drilling;DO +N707=Diamond Shamrock Refinery;DRM +N708=Diana Corp;DNA +N709=Diebold Inc.;DBD +N710=Digital Equipment Cp.;DEC +N711=Dillard Dept Stores;DDS +N712=Dime Bancorp Inc;DME +N713=Dimon Inc;DMN +N714=Disco Adr;DXO +N715=Discount Auto Parts Inc;DAP +N716=Disney (Walt) Prod.;DIS +N717=Dole Foods;DOL +N718=Dollar General Corp;DG +N719=Dominion Res Black Warrior Tr;DOM +N720=Dominion Resources Inc;D +N721=Domtar Inc;DTC +N722=Donaldson Co Inc;DCI +N723=Donaldson Lufkin & Jenrette Inc;DLJ +N724=Donnelley (RR) & Sons;DNY +N725=Dover Cp;DOV +N726=Dow Chemical Co.;DOW +N727=Dow Jones & Co. Inc.;DJ +N728=Downey Financial;DSL +N729=DPL Inc;DPL +N730=DQE Inc.;DQE +N731=Dravo Corp;DRV +N732=Dresser Ind.;DI +N733=Dreyfus (Louis) Natural Gas Cp;LD +N734=Dreyfus Strategic Gov't Fund;DSI +N735=Dreyfus Strategic Municipals Inc;LEO +N736=Dreyfus Strategic Muni Bond Fund Inc;DSM +N737=DST Systems Inc;DST +N738=DTE Energy Co;DTE +N739=Duff & Phelps Credit Rating;DCR +N740=Duff & Phelps Util & Cp Bond Tr;DUC +N741=Duff & Phelps Utilities;DNP +N742=Duff Phelps Utilities Tax Free Income;DTF +N743=Duke Power Co.;DUK +N744=Duke R Ca;DRE +N745=Dun & Bradstreet;DNB +N746=Dupont (EI) De Nemour;DD +N747=Dupont 3.50 Pf Series A;DD+A +N748=Dupont 4.50 Pf Series B;DD+B +N749=Duracell Intl;DUR +N750=Duty Free Intl Inc;DFI +N751=DVI Inc;DVI +N752=Dycom Industries Inc;DY +N753=Dyersburg Corp;DBG +N754=Dynamics Corp Amer;DYA +N755=E G & G;EGG +N756=E'Town Cp;ETW +N757=EA Industries Inc;EA +N758=Earthgrains Co;EGR +N759=Eastern Amer Nat Gas;NGT +N760=Eastern Enterprises;EFU +N761=Eastern Utilities Asc;EUA +N762=Eastgroup Properties Sbi;EGP +N763=Eastman Chemical Co;EMN +N764=Eastman Kodak Co.;EK +N765=Eaton Corp.;ETN +N766=ECC Group Plc ADR Spons;ENC +N767=Echlin Inc.;ECH +N768=Eckerd Corp;ECK +N769=Ecolab Inc;ECL +N770=Edison Brothers Store;EBS +N771=Edison Intl;EIX +N772=EDO Corp;EDO +N773=Educational Computer;ECC +N774=Ek Chor China Motorcycle;EKC +N775=Ekco Group;EKO +N776=El Paso Natural Gas;EPG +N777=Elan Cp Plc;ELN +N778=Elcor Corp;ELK +N779=Elf Aquitaine ADR;ELF +N780=Eljer Industrials;ELJ +N781=Elsag Bailey Process Automation;EBY +N782=Elscint Ltd.;ELT +N783=Elsevier ADR;ENL +N784=Embotelladora Andina;AKO +N785=EMC Corp;EMC +N786=Emerging Germany Fund Inc;FRG +N787=Emerging Markets Float Rate Fd;EFL +N788=Emerging Markets Income Fund;EMD +N789=Emerging Markets Income Fd II;EDF +N790=Emerging Markets Telecom Fund;ETF +N791=Emerging Mexico Fund Inc;MEF +N792=Emerging Tiger Fund;TGF +N793=Emerson Electric Co;EMR +N794=Empire District Electric;EDE +N795=Empresa Nacional De Electric;ELE +N796=Empresa Ntl De Electri;EOC +N797=Empresas Ica Sociedad Controladora Sa;ICA +N798=Empresas La Moderna;ELM +N799=Emrg Mrkt Infrastructure;EMG +N800=Energen;EGN +N801=Energy North Inc;EI +N802=Energy Ventures;EVI +N803=Enersis ADR;ENI +N804=Englehard Corp.;EC +N805=Enhance Financial Services Group;EFS +N806=ENI Adr;E +N807=Ennis Business Forms;EBF +N808=Enova Corp;ENA +N809=Enron Corp;ENE +N810=Enron Global Power & Pipeline;EPP +N811=Enron Liquids Pipeline Lp;ENP +N812=Enron Oil & Gas Co - Ny;EOG +N813=Ensco Intl;ESV +N814=ENSERCH Corp.;ENS +N815=Enserch Explor Part Ltd.;EEX +N816=Entergy Corp;ETR +N817=Enterprise Oil;ETP+ +N818=Enterprise Oil Plc ADR;ETP +N819=Environmental Elements;EEC +N820=Eott Energy Partners;EOT +N821=EQK Realty Investors;EKR +N822=Equifax Incorp.;EFX +N823=Equitable Companies Inc;EQ +N824=Equitable Of Iowa Class B;EIC +N825=Equitable Resources Co.;EQT +N826=Equity Resource Intl;EQR +N827=Esco Electronics Cp;ESE +N828=Espirito Santa Financial Holding ADR;ESF +N829=Essex Property Trust;ESS +N830=Esterline Corp;ESL +N831=Ethyl Cp;EY +N832=Europe Fund Inc;EF +N833=Evans Withycomb Residential Inc;EWR +N834=Excel Ind Inc;EXC +N835=Excel Reality Trust;XEL +N836=Excelsior Income Shrs;EIS +N837=Executive Risk Inc;ER +N838=Exel Ltd;XL +N839=Exide Corp;EX +N840=Exxon Corp.;XON +N841=F & M Natl Cp;FMN +N842=Fabri-Centers Of Amer Cl A;FCAA +N843=Factory Stores Of America Inc;FAC +N844=FAI Insurance Ltd ADR;FAI +N845=Fairchild Cp;FA +N846=Fairfield Communities;FFD +N847=Falcon Building Prod;FB +N848=Falcon Products;FCP +N849=Family Dollar Stores;FDO +N850=Fansteel Inc;FNL +N851=Farah Mfg Co.;FRA +N852=Fay's Drug Co. Inc;FAY +N853=Fedders Corp.;FJC +N854=Federal Express Corp.;FDX +N855=Federal Home Loan Cp;FRE +N856=Federal Home Loan Pref;FRE+ +N857=Federal Mogul Corp;FMO +N858=Federal Natl Mortgage;FNM +N859=Federal Rlty Inv Tr Sbi;FRT +N860=Federal Signal Corp;FSS +N861=Federated Department Stores;FD +N862=Ferrellgas Partners Lp;FGP +N863=Ferro Corp;FOE +N864=Fiat S P A Ads;FIA +N865=Fidelity Advisor Emerging Asia Fund;FAE +N866=Fidelity Advisory Korea Fund;FAK +N867=Fidelity Natl Financial Inc;FNF +N868=Fieldcrest Cannon Inc;FLD +N869=Fila Holdings Spa ADR;FLH +N870=Financial Security Assurance Holding;FSA +N871=Fingerhut Cos;FHT +N872=Finova Group;FNV +N873=First Amer Bank & Trust Class A;FOA +N874=First Amer Finan Cp;FAF +N875=First Bank Of America;FBA +N876=First Bank System Inc;FBS +N877=First Brands Cp;FBR +N878=First Chicago NBD Corp;FCN +N879=First Colony Corp;FCL +N880=First Commonwealth Financial Corp;FCF +N881=First Commonwealth Fund Inc;FCO +N882=First Data Corp;FDC +N883=First Federal Financial;FED +N884=First Fincl Fund;FF +N885=First Indust Rlty Tr;FR +N886=First Israel Fund;ISL +N887=First Mississippi Cp;FRM +N888=First Philippine Fund;FPF +N889=First Union Corp;FTU +N890=First Union Real Estate Equity;FUR +N891=First USA Inc;FUS +N892=First USA Paymentech;PTI +N893=First Va Banks Inc;FVB +N894=Firstar Corp;FSR +N895=Firstbank P Rico Commercial;FBP +N896=Fisher Scientific Intl;FSH +N897=Fleet Financial Group Inc;FLT +N898=Fleetwood Enterprises;FLE +N899=Fleming Co's Inc;FLM +N900=Fletcher Challenge Building;FLB +N901=Fletcher Challenge Energy;FEG +N902=Fletcher Challenge Ltd Forest Div;FFS +N903=Fletcher Challenge Paper;FLP +N904=Flightsafety Intl Inc;FSI +N905=Florida East Coast Ind Inc Hld;FLA +N906=Florida Progress Corp;FPC +N907=Flowers Ind.;FLO +N908=Fluke Cp;FLK +N909=Fluor Corp.;FLR +N910=FMC Cp;FMC +N911=FMC Gold Co.;FGL +N912=Food Maker;FM +N913=Foodbrands America;FDB +N914=Ford Motor Co Pf;F+ +N915=Ford Motor Co.;F +N916=Ford Pref B.8%;F+B +N917=Foreign & Colonial Emrg East;EME +N918=Fort Dearborn Income;FTD +N919=Fortis Securities Inc;FOR +N920=Foster Wheeler Corp.;FWC +N921=Foundation Health Corp;FH +N922=Foxmeyer Health Corp;FOX +N923=FPL Group;FPL +N924=France Growth Fund Inc;FRF +N925=Franchise Finance Corp Of Amer;FFA +N926=Franklin Electronic Publishers;FEP +N927=Franklin Multi Income Trust Sbi;FMI +N928=Franklin Principal Maturity Trust;FPT +N929=Franklin Quest Inc;FNQ +N930=Franklin Res Inc;BEN +N931=Franklin Universal Tr;FT +N932=Frederick Of Hollywood;FOHA +N933=Frederick's Hollywood;FOHB +N934=Freeport Mcmoran;FTX +N935=Freeport Mcmoran Copper Co;FCXA +N936=Freeport McMoran Copper & Gold Cl B;FCX +N937=Freeport McMoran Oil & Gas Tr Ubi;FMR +N938=Freeport Mcmoran Res Cp Dep;FRP +N939=Frontier Corp;FRO +N940=Frontier Insurance Grp Inc;FTR +N941=Fruehauf Trailer;FTC +N942=Fruit Of The Loom;FTL +N943=Fund Amer Enterprises Hlgs;FFC +N944=Furniture Brands Intl;FBN +N945=Furon Co;FCY +N946=Furr's/Bishop Inc;CHI +N947=G&L Realty Corp;GLR +N948=Gabelli Convtble Sec;GCV +N949=Gabelli Equity Trust Inc;GAB +N950=Gabelli Global Multimedia;GGT +N951=Gables Residential Tr;GBP +N952=Galey & Lord Inc;GNL +N953=Gallagher Arthur J & Co;AJG +N954=Galoob Lewis Toys;GAL +N955=Gannett Co. Inc.;GCI +N956=Gap Inc;GPS +N957=GATX Corp;GMT +N958=Gaylord Entertainment Co;GET +N959=GC Cos;GCX +N960=Gemini II;GMI+ +N961=Gemini II Inc Cap Shares;GMI +N962=Gen Cp;GY +N963=Gen Rad Inc.;GEN +N964=Genentech Callable Putable Common Secs;GNE +N965=General Amer Investment;GAM +N966=General Datacomm Ind.;GDC +N967=General Dynamics;GD +N968=General Electric Co.;GE +N969=General Growth Properties;GGP +N970=General Host;GH +N971=General Housewares;GHW +N972=General Instrument Cp;GIC +N973=General Mills;GIS +N974=General Motors;GM +N975=General Motors 7.92;GM+D +N976=General Motors Class E;GME +N977=General Motors Cp Cl H;GMH +N978=General Physics Corp;GPH +N979=General Public Utilities;GPU +N980=General Re Corp;GRN +N981=General Signal Corp.;GSX +N982=Genesco Inc;GCO +N983=Genesis Health Ventures;GHV +N984=Geneva Steel Cp;GNV +N985=Genuine Parts Co.;GPC +N986=Geon Inc;GON +N987=Georgia Gulf Corp;GGC +N988=Georgia Pacific Corp.;GP +N989=Georgia Power Pf L;GPE+L +N990=Gerber Scientific Inc.;GRB +N991=Germany Fund Inc;GER +N992=Gerrity Oil & Gas Cp;GOG +N993=Getty Petroleum Corp;GTY +N994=Giant Group Inc;GPO +N995=Giant Industries Inc;GI +N996=Gillette;G +N997=Glamis Gold Ltd;GLG +N998=Glaxo Plc ADR;GLX +N999=Gleason Corp;GLE +N1000=Glenborough Realty Trust Inc;GLB +N1001=Glenfed Inc Hldg Co.;GLN +N1002=Glimcher Realty Trust;GRT +N1003=Global Directmail;GML +N1004=Global Health Sciences Fund;GHS +N1005=Global High Income;GHI +N1006=Global Indust Tech Inc;GIX +N1007=Global Marine Inc;GLM +N1008=Global Natural Resources Inc;GNR +N1009=Global Partners Inc Fd;GDF +N1010=Global Small Cap Fund;GSG +N1011=GM Pref 9 1/8%;GM+Q +N1012=Goldcorp B;GGB +N1013=Goldcorp Inc;GGA +N1014=Golden West Financial;GDW +N1015=Goodrich (BF) Co.;GR +N1016=Goodrich Petroleum Corp;GDP +N1017=Goodyear Tire And Rubber;GT +N1018=Gottschalks Inc;GOT +N1019=Grace (WR) & Co.;GRA +N1020=Graco Inc;GGG +N1021=Grainger (WW);GWW +N1022=Grancare Inc;GC +N1023=Grand Casinos;GND +N1024=Grand Metropolitan Plc;GRM +N1025=Gray Communication System Inc;GCS +N1026=GRC Intl Inc;GRH +N1027=Great Atlantic/Pacific Tea;GAP +N1028=Great Lakes Chemical Corp;GLK +N1029=Great Nthrn Iron Ore;GNI +N1030=Great Western Financial;GWF +N1031=Greater China Fund;GCH +N1032=Green Mountain Power;GMP +N1033=Green Tree Acceptance;GNT +N1034=Greenbrier Cos;GBX +N1035=Greenwich Street Muni Fd;GSI +N1036=Griffon Corp;GFF +N1037=Growth Fund Of Spain Inc;GSP +N1038=Grubb & Ellis Co.;GBE +N1039=Grupo Casa Autrey ADR;ATY +N1040=Grupo Elektra SA;EKT +N1041=Grupo Embotellador De Mexico;GEM +N1042=Grupo Financiero Serfin ADR;SFN +N1043=Grupo Ind Durago;GID +N1044=Grupo Industrial Maseca;MSK +N1045=Grupo Iusacell SA class D;CELD +N1046=Grupo Iusacell Ser L;CEL +N1047=Grupo Mex Desarrollo;GMD +N1048=Grupo Radio Centro ADR;RC +N1049=Grupo Sideksa;SDK +N1050=Grupo Televisa Sa Gdr;TV +N1051=Grupo Tribasa Sa ADR;GTR +N1052=GT Global Dev Markets;GTD +N1053=Gt Great Europe Fund;GTF +N1054=GTE Corp;GTE +N1055=GTech Holdings Corp;GTK +N1056=Guaranty Natl Cp;GNC +N1057=Gucci Group NV;GUC +N1058=Guidant Corp;GDT +N1059=Guilford Mills Inc;GFD +N1060=Gulf Canada Ltd.;GOU +N1061=H&Q Healthcare Fund;HQH +N1062=H&Q Life Science Investors Inc;HQL +N1063=Haemonetics Corp;HAE +N1064=Hafslund Nycomed;HN +N1065=Halliburton Co.;HAL +N1066=Hallwood Group Inc;HWG +N1067=Hammon Hotels;JQH +N1068=Hancock Fabrics Inc;HKF +N1069=Hancock John B & Thrift Opp Fd;BTO +N1070=Hancock Patriot Dividend Fund II;PDT +N1071=Hancock Patriot Premium Div Fund Inc;PDF +N1072=Hancock Patriot Select Dividend Trust;DIV +N1073=Handleman Co.;HDL +N1074=Handy & Harman;HNH +N1075=Hanna M A Co.;MAH +N1076=Hannaford Bros Co.;HRD +N1077=Hanson Plc ADR;HAN +N1078=Harbourton Financial Services;HBT +N1079=Harcourt General Inc;H +N1080=Harland (John H) Co.;JH +N1081=Harley Davidson Inc;HDI +N1082=Harman Int'l Industries;HAR +N1083=Harnischfeger Ind. Inc.;HPH +N1084=Harrah Entertainment;HET +N1085=Harris Corp. (the);HRS +N1086=Harsco Corp;HSC +N1087=Harte Hanks Communication;HHS +N1088=Hartford Steam Boiler Ins;HSB +N1089=Hartmarx Cp;HMX +N1090=Harvey Casino Resorts;HVY +N1091=Hattaras Income Sec;HAT +N1092=Hawaiian Elect Co. Inc;HE +N1093=Hayes Wheels International;HAY +N1094=HCC Insurance Holding Inc;HCC +N1095=He Ro Group Ltd;HRG +N1096=Health Care Property Inv.;HCP +N1097=Health Care Reit;HCN +N1098=Health Care Retirement Corp;HCR +N1099=Health Images Inc;HII +N1100=Health Management Associates Inc;HMA +N1101=Health Systems Intl Inc;HQ +N1102=Health/Retirement Property Tr;HRP +N1103=Healthcare Realty Trust;HR +N1104=Healthplan Services;HPS +N1105=Healthsource Corp;HRC +N1106=Healthsource Inc;HS +N1107=Hecla Mining;HL +N1108=Heilig-Meyers Co.;HMY +N1109=Heinz H.J.;HNZ +N1110=Helmerich & Payne Inc;HP +N1111=Helvetia Fund Inc The;SWZ +N1112=Hercules Inc;HPC +N1113=Heritage U.S. Govt Income Fd;HGA +N1114=Hershey Foods Corp.;HSY +N1115=Hewlett-Packard Co.;HWP +N1116=Hexcel Corp/De;HXL +N1117=HGI Realty Inc;HGI +N1118=Hi Shear Ind.;HSI +N1119=Hi-Lo Automotive Inc;HLO +N1120=Hibernia Cp Class A;HIB +N1121=High Income Adv Tr II Sbi;YLT +N1122=High Income Adv Tr III Sbi;YLH +N1123=High Income Advantage Trust;YLD +N1124=High Income Oppor Fd;HIO +N1125=High Yield Income Fund Inc;HYI +N1126=High Yield Plus Fund Inc;HYP +N1127=Highlands Insurance Group;HIC +N1128=Highwoods Properties;HIW +N1129=Hilb, Rogal & Hamilton Co.;HRH +N1130=Hilenbrand Ind.;HB +N1131=Hilfiger Co;TOM +N1132=Hills Department Stores;HDS +N1133=Hilton Hotels Corp.;HLT +N1134=Hitachi;HIT +N1135=Hollinger Intl Inc;HLR +N1136=Home Depot;HD +N1137=Home Properties Of New York;HME +N1138=Home Shopping Network;HSN +N1139=Homeplex Mortgage Investments Cp;HPX +N1140=Homestake Mining Co.;HM +N1141=Honda Motor Co;HMC +N1142=Honeywell Inc.;HON +N1143=Hong Kong Telecom;HKT +N1144=Horace Mann Educators Cp;HMN +N1145=Horizon Healthcare Corp;HHC +N1146=Hormel Food Corp;HRL +N1147=Horsham Corp;HSM +N1148=Hospital Staffing Service Inc;HSS +N1149=Hospitality Franchise Systems Inc;HFS +N1150=Hospitality Properties Trust;HPT +N1151=Host Marriott Service;HMS +N1152=Houghton Mifflin Co.;HTN +N1153=House Of Fabrics Inc;HF +N1154=Household Int'l Inc Pf 9.5;HI+X +N1155=Household Intl.;HI +N1156=Houston Industries;HOU +N1157=Howell Corp;HWL +N1158=Hre Properties Ltd.;HRE +N1159=HS Resources;HSE +N1160=Huaneng Power Int;HNP +N1161=Hubbell Inc Cl A;HUBA +N1162=Hubbell Inc Cl B;HUBB +N1163=Hudson Foods Inc Class A;HFI +N1164=Huffy Corp;HUF +N1165=Hugh Supply Inc;HUG +N1166=Humana Inc.;HUM +N1167=Hunt Mfg Co.;HUN +N1168=Huntco Inc;HCO +N1169=Huntington Int'l Hldgs Plc ADR;HTD +N1170=Huntway Partners Lp;HWY +N1171=Hyperion 1997 Term Tr;HTA +N1172=Hyperion 1999 Term Trust Inc;HTT +N1173=Hyperion 2002 Term Tr;HTB +N1174=Hyperion 2005 Inv Grd Opp Tr;HTO +N1175=Hyperion Total Return & Income Fund;HTR +N1176=IBP Inc.;IBP +N1177=ICF Kaiser Intl Inc;ICF +N1178=ICN Pharmaceutical;ICN +N1179=Idaho Power Co.;IDA +N1180=Ideon Group;IQ +N1181=Idex Corp;IEX +N1182=IES Industries Inc;IES +N1183=Illinois Central Corp;IC +N1184=Illinois Tool Works;ITW +N1185=Illinova Corp;ILN +N1186=IMC Global Inc;IGL +N1187=Imco Recycling Inc;IMR +N1188=IMO Delaval Inc;IMD +N1189=Imperial Chemical Ind. Inc;ICI +N1190=Inco Ltd.;N +N1191=Income Opportun Fd 1999;IOF +N1192=Income Opportun Fd 2000;IFT +N1193=India Fund;IFN +N1194=India Growth Fund;IGF +N1195=Indiana Energy Inc;IEI +N1196=Indonesian Satellite Corp;IIT +N1197=Industrie Natuzzi ADR;NTZ +N1198=Infinity Broadcasting Corp;INF +N1199=Ingersoll-Rand Co.;IR +N1200=Inland Steel Co;IAD +N1201=Input-Output Inc;IO +N1202=Insignia Financial Group;IFS +N1203=Inst Nazion Dellwe Assicurazioni;INZ +N1204=Insteel Indus Inc;III +N1205=Int Technology Corp.;ITX +N1206=Int'l Game Technology;IGT +N1207=Int'l Specialty Products Inc.;ISP +N1208=Integon Corp;IN +N1209=Integra Financial Cp;ITG +N1210=Integrated Health Services Inc;IHS +N1211=Intellicall Inc;ICL +N1212=Inter Regional Financial;IFG +N1213=Intercapital Ca Ins Muni;IIC +N1214=Intercapital Ca Qual Muni Sec;IQC +N1215=Intercapital Income;ICB +N1216=Intercapital Ins Ca Muni;ICS +N1217=Intercapital Ins Muni Income Tr;IIM +N1218=Intercapital Ins Muni Sec;IMS +N1219=Intercapital Insured Municipal Bond;IMB +N1220=Intercapital Insured Municipal Trust;IMT +N1221=Intercapital NY Qual Muni Sec;IQN +N1222=Intercapital Qual Muni Inv Tr;IQI +N1223=Intercapital Qual Muni Sec;IQM +N1224=Intercapital Quality Municipal Investmen;IQT +N1225=Interlake Inc;IK +N1226=Interpool Inc;IPX +N1227=Interpublic Grp Of Co's;IPG +N1228=Interstate Bakeries;IBC +N1229=Interstate Johnson Lane Securities Inc;IJL +N1230=Interstate Power Co.;IPW +N1231=Intertan Int'l Inc;ITN +N1232=Intimate Brands Inc Cl A;IBI +N1233=Intl Aluminum;IAL +N1234=Intl Business Machines;IBM +N1235=Intl Colin Energy Cp;KCN +N1236=Intl De Ceramica ADR;ICM +N1237=Intl Family Entertainment Inc;FAM +N1238=Intl Flavor/Frag.;IFF +N1239=Intl Investment Securities;IIS +N1240=Intl Mutifoods;IMC +N1241=Intl Paper Co;IP +N1242=Intl Rectifier;IRF +N1243=Intl Shipholding Corp;ISH +N1244=Invesco Plc Adr;IVC +N1245=Ionics Inc;ION +N1246=IP Timberlands Ltd.;IPT +N1247=IPALCO Entprses Holding;IPL +N1248=Irish Investment Fund Inc;IRL +N1249=Irsa Inversiones Y Repres Grd;IRS +N1250=IRT Property/Ga;IRT +N1251=Irvine Apartment Communities;IAC +N1252=Isomedix Inc;ISO +N1253=ISS Intl Service;ISG +N1254=Istituto Mobiliare Italiano ADR;IMI +N1255=Italy Fund Inc.;ITA +N1256=ITT Corp;ITT +N1257=ITT Educational Service;ESI +N1258=ITT Hartford Group Inc;HIG +N1259=ITT Industries Inc;IIN +N1260=J&l Speciality Steel Inc;JL +N1261=Jackpot Enterprises;J +N1262=Jacobs Engineering Group;JEC +N1263=Jakarta Growth Fund Inc;JGF +N1264=James River Cp/Va;JR +N1265=Japan Equity Fund Inc;JEQ +N1266=Japan Otc Equity Fund Inc;JOF +N1267=Jardine Fleming China Region Fund;JFC +N1268=Jardine Fleming India Fund;JFI +N1269=JDN Realty Cp;JDN +N1270=Jefferies Group Inc;JEF +N1271=Jefferson Smurfit;JS +N1272=Jefferson-Pilot Corp.;JP +N1273=Jenny Craig Inc;JC +N1274=Jilin Chemical Indust;JCC +N1275=John Hancock Inc Sec;JHS +N1276=John Hancock Investment;JHI +N1277=John Hancock Pat Glob;PGD +N1278=John Hancock Patr Pf;PPF +N1279=Johnson & Johnson;JNJ +N1280=Johnson Controls;JCI +N1281=Johnstown Industries Inc;JII +N1282=Jones Apparel;JNY +N1283=Josten's Inc;JOS +N1284=JP Morgan Pref;JPM+A +N1285=JP Realty Inc;JPR +N1286=K III Communication;KCC+ +N1287=K Mart Cp;KM +N1288=K-III Communication;KCC +N1289=Kaiser Aluminum;KLU +N1290=Kaneb Pipeline Partners Lp;KPP +N1291=Kaneb Services;KAB +N1292=Kansas City Power & Light;KLT +N1293=Kansas City Sthrn Ind.;KSU +N1294=Katy Ind Inc;KT +N1295=Kaufman & Broad Home Cp;KBH +N1296=Kaydon Cp;KDN +N1297=KCS Energy Inc;KCS +N1298=Keithley Instru Inc;KEI +N1299=Kellog Co;K +N1300=Kellwood Co.;KWD +N1301=Kemper High Income Trust;KHI +N1302=Kemper Intermediate Gov't Tr;KGT +N1303=Kemper Multi Mkt Income Trust;KMM +N1304=Kemper Muni Inc Trust;KTF +N1305=Kemper Strategic Income Fd;KST +N1306=Kemper Strategic Muni Inc;KSM +N1307=Kennametal Inc;KMT +N1308=Kent Electronics Cp;KNT +N1309=Kerr Glass Mfg Co.;KGM +N1310=Kerr-McGee;KMG +N1311=Key Corp;KEY +N1312=Keystone Consol Ind.;KES +N1313=Keystone Intl.;KII +N1314=Kimberly Clark;KMB +N1315=Kimco Realty Corp;KIM +N1316=Kimmins Environmental Services Cp;KVN +N1317=King World Productions;KWP +N1318=Kinross Gold Corp;KGC +N1319=Kleinwort Benson Austral;KBA +N1320=KLM Royal Dutch Air;KLM +N1321=KN Energy Inc;KNE +N1322=Knight-Ridder Newspapers;KRI +N1323=Kohls Corp;KSS +N1324=Kollmorgen Corp;KOL +N1325=Koor Industries;KOR +N1326=Korea Electric;KEP +N1327=Korea Equity Fund;KEF +N1328=Korea Fund Inc;KF +N1329=Korean Investment Fund;KIF +N1330=Kranzco Reality Trust;KRT +N1331=Kroger Co.(the);KR +N1332=KU Energy;KU +N1333=Kubota Ltd;KUB +N1334=Kuhlman Corp;KUH +N1335=Kyocera Corp;KYO +N1336=Kysor Industrial Corp;KZ +N1337=L & N Housing Corp;LHC +N1338=L. L. & E Royalty Trust;LRT +N1339=LA Gear;LA +N1340=La Quinta Inns Inc;LQI +N1341=La-Z-Boy Chair;LZB +N1342=Laboratory Chile;LBC +N1343=Laboratory Corp Of Amer;LH +N1344=Laclede Gas Co.;LG +N1345=Lafarge Corp;LAF +N1346=Laidlaw Transportation Ltd Class B;LDWB +N1347=Laidlaw Transportation Class A;LDWA +N1348=Lakehead Pipeline Partners Lp;LHP +N1349=Lamson & Sessions Co.;LMS +N1350=Lands End Inc;LE +N1351=Lasmo Plc ADR;LSO +N1352=Latin Amer Discovery Fund;LDF +N1353=Latin Amer Equity Fund;LAQ +N1354=Latin America Dollar Income;LBF +N1355=Latin America Investment Fund Inc;LAM +N1356=Lauder (Estee) Cos Cl A;EL +N1357=Lawter Intl Inc;LAW +N1358=Lawyers Title;LTI +N1359=LCI International;LCI +N1360=Lear Seating;LEA +N1361=Learonal Inc;LRI +N1362=Lee Enterprises Inc;LEE +N1363=Legg Mason Inc;LM +N1364=Leggett & Platt Inc;LEG +N1365=Lehigh Group Inc;LEI +N1366=Lehman Brothers Holding;LEH +N1367=Lehman Latin Growth;LLF +N1368=Lennar Corporation;LEN +N1369=Leucadia Natl Corp;LUK +N1370=Leviathan Gas Pipeline;LEV +N1371=Levitz Furniture;LFI +N1372=Lexington Corporate Properties;LXP +N1373=Lexmark Intl Group;LXK +N1374=LG&E Energy Cp;LGE +N1375=Libbey Inc;LBY +N1376=Liberte Investors Sbi;LBI +N1377=Liberty All Star Equty Fund;USA +N1378=Liberty All-Star Growth Fund;ASG +N1379=Liberty Corp;LC +N1380=Liberty Financial Cos;L +N1381=Liberty Property Trus;LRY +N1382=Liberty Term Trust Inc;LTT +N1383=Life Partners Group;LPG +N1384=Life Re Corp;LRE +N1385=Lilly (Eli) & Co.;LLY +N1386=Limited Inc.;LTD +N1387=Lincoln Natl;LNC +N1388=Lincoln Natl Cv Sec Fund;LNV +N1389=Lincoln Natl Direct Plc;LND +N1390=Litton Ind. Inc.;LIT +N1391=Living Centers Of Amer Inc;LCA +N1392=Liz Claiborne;LIZ +N1393=Lockheed Martin Corp;LMT +N1394=Loctite Cp;LOC +N1395=Loews Corp;LTR +N1396=Logicon Inc;LGN +N1397=Lone Star Industries Inc.;LCE +N1398=Long Island Lighting;LIL +N1399=Longs Drug Stores Inc.;LDG +N1400=Longview Fibre Co.;LFB +N1401=Loral Corp.;LOR +N1402=Loral Space & Communicaton Ltd;LSPI +N1403=Louisiana Land/Expl.;LLX +N1404=Louisiana-Pacific;LPX +N1405=Lowe's Co Inc;LOW +N1406=LSB Ind Inc;LSB +N1407=LSI Logic Cp;LSI +N1408=LTC Properties Inc;LTC +N1409=LTV Corp;LTV +N1410=Lubrizol Corp (the);LZ +N1411=Luby's Cafeterias;LUB +N1412=Lucent Technology;LU +N1413=Lukens Inc;LUC +N1414=Luria & Sons Inc;LUR +N1415=Luxottica Group Spa;LUX +N1416=Lydall Inc;LDL +N1417=Lyondell Petrochemical;LYO +N1418=M/I Schottenstein Homes;MHO +N1419=Mac Frugal Bargain Close Out;MFI +N1420=Macerich Co;MAC +N1421=Madeco SA ADR;MAD +N1422=Maderas Sinteticos Soliedad Anonima Masi;MYS +N1423=Mafco Consl Group;MFO +N1424=Magna Intl Inc Class A;MGA +N1425=Magnetek Inc;MAG +N1426=Malan Realty Investors Inc;MAL +N1427=Malaysia Fund Inc;MF +N1428=Mallinckrodt Group;MKG +N1429=Managed High Income Port;MHY +N1430=Managed Mun Portfolio III;MTU +N1431=Managed Municipals Portfolio Inc;MMU +N1432=Manitowoc Inc;MTW +N1433=Manor Care Inc;MNR +N1434=Manpower Inc;MAN +N1435=Manufactured Homes Communities;MHC +N1436=Mapco Inc.;MDA +N1437=Marcus Cp;MCS +N1438=Maritrans Inc;TUG +N1439=Mark Center Trust Sbi;MCT +N1440=Mark IV Industries;IV +N1441=Marriott Corp;HMT +N1442=Marriott International;MAR +N1443=Marsh & Mclennan Co's;MMC +N1444=Marshall Industries;MI +N1445=Martin Lawrence Ltd Inc;MLE +N1446=Martin Marietta Materials Inc;MLM +N1447=Marvel Entertainment;MRV +N1448=Masco;MAS +N1449=Mascotech Inc;MSX +N1450=Mass Mutual Part Investors;MPV +N1451=Massmutual Corp.;MCI +N1452=Material Sciences Cp;MSC +N1453=Matlack Systems Inc;MLK +N1454=Matsushita Elec.;MC +N1455=Mattel Co.;MAT +N1456=Mauna Loa Macadamia Lp;NUT +N1457=Maxxim Medical;MAM +N1458=May Dept Stores;MA +N1459=Maytag Co. (The);MYG +N1460=MBIA Inc.;MBI +N1461=MBNA Cp;KRB +N1462=Mc Dermott J Ray Sa;JRM +N1463=Mc Kesson Corp;MCK +N1464=Mc Whorter Technology;MWT +N1465=McClatchy Newspapers Class A;MNI +N1466=McDermott Intl Inc.;MDR +N1467=McDonald & Co Inv.;MDD +N1468=McDonalds Corp.;MCD +N1469=McDonnell Douglas;MD +N1470=McGraw-Hill Cos;MHP +N1471=MCN Corp;MCN +N1472=MCN Corp Prides;MCE +N1473=MDC Holding Corp;MDC +N1474=MDU Resources Group;MDU +N1475=Mead Corp. (The);MEA +N1476=Meadowbrook Insurance Group;MIG +N1477=Measurex Corp;MX +N1478=Meditrust;MT +N1479=Medpartners/Mullikin Inc;MDM +N1480=Medtronic Inc;MDT +N1481=Medusa Corp;MSA +N1482=Mellon Bank Corp.;MEL +N1483=Mellon Bank Pfd J;MEL+J +N1484=Melville Cp;MES +N1485=MEMC Electronic Materials;WFR +N1486=Mentor Income Fund;MRF +N1487=Mercantile Bancorp;MTL +N1488=Mercantile Stores;MST +N1489=Merck & Co. Inc.;MRK +N1490=Mercury Financial;MFN +N1491=Meredith Corp.;MDP +N1492=Meridian Industrial Trust;MDN +N1493=Merrill Lynch & Co.;MER +N1494=Merrill Lynch Euro Mkt Tgt 1999;MEE +N1495=Merrill Lynch S+P 500 1998;MIE +N1496=Merry Land & Investment Co;MRY +N1497=Mesa Lp;MXP +N1498=Mesa Royalty Trust Ubi;MTR +N1499=Mesabi Trust Sbi;MSB +N1500=Mestek Inc;MCC +N1501=Metrogas;MGS +N1502=Mexico Equity & Income Fund Inc;MXE +N1503=Mexico Fund Inc;MXF +N1504=Meyer (Fred) Inc.;FMY +N1505=MFS Charter Income Trust;MCR +N1506=MFS Govt Market Income Trust;MGF +N1507=MFS Income Trust;MIN +N1508=MFS Multiple Income Trust;MFM +N1509=MFS Multiple Market Income Trust;MMT +N1510=MFS Special Value Trust;MFV +N1511=MGI Properties;MGI +N1512=MGIC Investments;MTG +N1513=MGM Grand Inc;MGG +N1514=Micron Technology;MU +N1515=Mid America Apartment Communities;MAA +N1516=Mid Atlantic Medical Serv;MME +N1517=Mid-Amer Realty Investment;MDI +N1518=Mid-Amer Waste Systems;MAW +N1519=Midamerican Energy Co;MEC +N1520=Midwest Express Holdings;MEH +N1521=Midwest Real Estate Shopping Center;EQM +N1522=Mikasa Inc;MKS +N1523=Milestone Properties Inc;MPI +N1524=Miller Industries;MLR +N1525=Millipore Corp;MIL +N1526=Mills Corp;MLS +N1527=Mineral Technologies Inc;MTX +N1528=Minnesota Mining & Manufacturing (3M);MMM +N1529=Minnesota Muni Term Trust;MNA +N1530=Minnesota Power & Light;MPL +N1531=Mirage Resorts Inc;MIR +N1532=Mitchell Energy & Dev;MNDB +N1533=Mitchell Energy/devel.;MNDA +N1534=Mitel Corp;MLT +N1535=MMI Co;MMI +N1536=Mobil Corp.;MOB +N1537=Molecular Bio Sys Inc;MB +N1538=Monarch Machine Tool;MMO +N1539=Monsanto Co.;MTC +N1540=Montana Power;MTP +N1541=Montedison S.P.A. Ord Ads;MNT +N1542=Montgomery St Income;MTS +N1543=Moore Corp Ltd;MCL +N1544=Morgan (J.P.) & Co;JPM +N1545=Morgan Grenfell Smallcup;MGC +N1546=Morgan Keegan Inc;MOR +N1547=Morgan Products Ltd;MGN +N1548=Morgan Stan Glob Opp Fd;MGB +N1549=Morgan Stanley Emer Mkt Debt Fd;MSD +N1550=Morgan Stanley Emerging Market Fund;MSF +N1551=Morgan Stanley Fin;MSV +N1552=Morgan Stanley Fin 7.82 Fd;MSU +N1553=Morgan Stanley Group;MS +N1554=Morgan Stanley High Yld Fd;MSY +N1555=Morrison Health Care Inc;MHI +N1556=Morrison-Knudsen Cp Hldg;MRN +N1557=Morton Intl Inc;MII +N1558=Morton-thiokol Inc;TKC +N1559=Mossimo Inc;MGX +N1560=Motorola Inc.;MOT +N1561=MS Africa Fund;AFF +N1562=MS Asia Fund;APF +N1563=MS India Fund;IIF +N1564=MSC Industrial Direct;MSM +N1565=Mueller Industries Inc;MLI +N1566=Multicare Cos;MUL +N1567=Muni Yield Califoria Fund;MYC +N1568=Muni Yield Florida Fund Inc;MYF +N1569=Muni Yield Michigan Fund Inc;MYM +N1570=Muni Yield New York Insured Fund;MYN +N1571=Muni-Enhanced Fund Inc.;MEN +N1572=Muniassets Fund Inc;MUA +N1573=Municipal Advantage Fd;MAF +N1574=Municipal High Income Fund;MHF +N1575=Municipal Income Opportunities Trust II;OIA +N1576=Municipal Income Opp Fd;OIC +N1577=Municipal Partners Fund;MNP +N1578=Municipal Partners Fd;MPT +N1579=Munivest CA Ins Fd;MVC +N1580=Munivest FL Fd;MVS +N1581=Munivest Fund II;MVT +N1582=Munivest MI Ins Fd;MVM +N1583=Munivest NJ Fund;MVJ +N1584=Munivest NY Ins Fd;MVY +N1585=Munivest PA Ins Fd;MVP +N1586=Muniyield CA Insured;MIC +N1587=Muniyield FL Insured Fd;MFT +N1588=Muniyield Fund;MYD +N1589=Muniyield Insured Fd II;MTI +N1590=Muniyield MI Insur Fd;MIY +N1591=Muniyield New Jersey Fund Inc;MYJ +N1592=Muniyield NJ Insur Fd;MJI +N1593=Muniyield NY Ins Fd II;MYT +N1594=Muniyield NY Ins Fd III;MYY +N1595=Muniyield PA Fd;MPA +N1596=Muniyield Quality Fd II;MQT +N1597=Muniyield Quality Fd;MQY +N1598=Munsingwear Inc;MUN +N1599=Murphy Oil Corp.;MUR +N1600=Music Land Stores;MLG +N1601=Mutual Risk Management;MM +N1602=Mylan Labs Inc;MYL +N1603=Myrs Group Inc;MYR +N1604=N.Y. Gas & Electric;NGE +N1605=Nabisco Holding;NA +N1606=Nac Re Cp;NRC +N1607=NACCO Industries;NC +N1608=Nalco Chemical Co;NLC +N1609=Nashua Corp;NSH +N1610=National Auto Credit;NAK +N1611=National Golf Properties;TEE +N1612=National Power ADR;NP +N1613=National Power Plc In;NPPP +N1614=National Steel class B;NS +N1615=Nations Balanced Targ;NBM +N1616=Nations Bank;NB +N1617=Nations Govt Inv Tr 2004;NGF +N1618=Nations Govt Inv Tr 2003;NGI +N1619=Nationwide Health Properties;NHP +N1620=Natl Australian Bank;NAB +N1621=Natl City Cp;NCC +N1622=Natl Data Cp;NDC +N1623=Natl Education Cp;NEC +N1624=Natl Fuel & Gas Co;NFG +N1625=Natl Health Investors Inc;NHI +N1626=Natl Media Cp;NM +N1627=Natl Presto Ind;NPK +N1628=Natl Re Holdings Cp;NRE +N1629=Natl Semiconductor;NSM +N1630=Natl Service Ind;NSI +N1631=Natl Standard Co;NSD +N1632=Natl Westminster Bank;NW +N1633=Navistar;NAV +N1634=NCH Corp.;NCH +N1635=Neiman Marcus;NMG +N1636=Nelson Thomas Cl B;TNMB +N1637=Network Equipment Tech;NWK +N1638=Nevada Power Co;NVP +N1639=New Age Media Fund;NAF +N1640=New Amer High Income Fund;HYB +N1641=New Eng Business Service Inc;NEB +N1642=New England Elec. System;NES +N1643=New England Investment Inc;NEW +N1644=New Germany Fund Inc;GF +N1645=New Jersey Resources;NJR +N1646=New Plan Rlty Tr Sbi;NPR +N1647=New South Africa Fund;NSA +N1648=New York Bancorp Inc;NYB +N1649=Newbridge Networkd Cp;NN +N1650=Newell Co.;NWL +N1651=Newfield Exploration Co;NFX +N1652=Newhall Land/Farming;NHL +N1653=Newmont Gold Co.;NGC +N1654=Newmont Mining Cp;NEM +N1655=Newpark Resources Inc;NR +N1656=News Corp Ltd ADR;NWS +N1657=NGL Corp;NGL +N1658=Niagara Mohawk Power;NMK +N1659=NICOR;GAS +N1660=Nike Inc Class B;NKE +N1661=Nine West Group;NIN +N1662=Nippon Telegraph & Telephone Corp ADR;NTT +N1663=Nipso Indust Inc;NI +N1664=NL Industries;NL +N1665=Noble Affiliates;NBL +N1666=Nokia Corp ADR;NOKA +N1667=NorAm Energy Corp;NAE +N1668=Nord Resources Corp;NRD +N1669=Norfolk Southern;NSC +N1670=Norrell Cp;NRL +N1671=Norsk Hydro Ads;NHY +N1672=Nortek Inc.;NTK +N1673=North American Mortgage Co;NAC +N1674=North Carolina Natural Gas;NCG +N1675=North European Oil Rlty;NET +N1676=North Fork Bancorp;NFB +N1677=Northeast Utilities;NU +N1678=Northern Border Partners Lp;NBP +N1679=Northern States Power;NSP +N1680=Northern Telecom;NT +N1681=Northgate Exploration;NGX +N1682=Northrop Grumman Corp.;NOC +N1683=Northwestern Public Serv;NPS +N1684=Norwest Corp;NOB +N1685=Nova Corp;NVA +N1686=Novacare;NOV +N1687=Novo Indust. A/S Ads;NVO +N1688=NS Group Inc;NSS +N1689=Nucor Corp;NUE +N1690=Nuevo Energy Co;NEV +N1691=NUI Corp;NUI +N1692=Nuveen (John) Co;JNC +N1693=Nuveen AZ Prem Inc Mu;NAZ +N1694=Nuveen CA Invest Qual Muni;NQC +N1695=Nuveen CA Muni Mkt Opportunity;NCO +N1696=Nuveen CA Municipal Value Fund;NCA +N1697=Nuveen CA Performance Plus Muni Fund;NCP +N1698=Nuveen CA Select Qual Muni;NVC +N1699=Nuveen California Quality Income Muni;NUC +N1700=Nuveen CT Premium Ins Mun Fd;NTC +N1701=Nuveen Florida IQ Muni Fund;NQF +N1702=Nuveen Florida Quality Income Muni Fund;NUF +N1703=Nuveen Ins CA Prem Im;NCL +N1704=Nuveen Ins CA Prem Ins Mun Fd;NPC +N1705=Nuveen Ins FL Prem Im;NFL +N1706=Nuveen Ins NY Prem Ins Mun Fd;NNF +N1707=Nuveen Ins Premium Ins Mun Fd;NPE +N1708=Nuveen Ins Premium Ins Mun Fd;NPX +N1709=Nuveen Insured CA Select Port;NXC +N1710=Nuveen Insured Muni Opportunity Fund Inc;NIO +N1711=Nuveen Insured NY Select Port;NXN +N1712=Nuveen Insured Quality Muni Fund;NQI +N1713=Nuveen Investment Quality Municipal Fund;NQM +N1714=Nuveen MA Premium Ins Mun Fd;NMT +N1715=Nuveen MD Premium Ins Mun Fd;NMY +N1716=Nuveen MI Premium Ins Mun Fd;NMP +N1717=Nuveen Michigan Quality Income Municipal;NUM +N1718=Nuveen Muni Market Opportunity Fund;NMO +N1719=Nuveen Municipal Advantage Fund;NMA +N1720=Nuveen Municipal Income;NMI +N1721=Nuveen Municipal Value Fund;NUV +N1722=Nuveen NC Premium Ins Mun Fd;NNC +N1723=Nuveen New Jersey IQ Muni Fund;NQJ +N1724=Nuveen NJ Premium Ins Mun Fd;NNJ +N1725=Nuveen Ny Investment Quality Muni Fund;NQN +N1726=Nuveen NY Municipal Value Fund;NNY +N1727=Nuveen NY Performance Plus Muni Fund;NNP +N1728=Nuveen NY Quality Ins Mun Fd;NUN +N1729=Nuveen NY Select Qual Muni;NVN +N1730=Nuveen Ohio Quality Income Municipal Fun;NUO +N1731=Nuveen PA Premium Ins Mun Fd;NPY +N1732=Nuveen Pennsylvania IQ Muni Fund;NQP +N1733=Nuveen Performance Plus Muni Fd;NPP +N1734=Nuveen Premier Insured Municipal;NIF +N1735=Nuveen Premier Municipal Fund;NPF +N1736=Nuveen Premium Income Muni Fd;NPI +N1737=Nuveen Premium Ins Mun Fd II;NPM +N1738=Nuveen Premium Ins Mun Fd IV;NPT +N1739=Nuveen Quality Investment Muni Fund;NQU +N1740=Nuveen Sel Mat Muni F;NIM +N1741=Nuveen Sel Tax-free 3;NXR +N1742=Nuveen Select Quality Muni Fund Inc;NQS +N1743=Nuveen Select Tax Free Income Portfolio;NXP +N1744=Nuveen Select Tax-Free Income Port;NXQ +N1745=Nuveen Texas Quality Income Municipal;NTX +N1746=Nuveen VA Premium Ins Mun Fd;NPV +N1747=Nymagic Inc;NYM +N1748=Nynex;NYN +N1749=Oak Industries;OAK +N1750=Oakley Inc;OO +N1751=Oakwood Homes Corp;OH +N1752=Oasis Residential Inc;OAS +N1753=Occidental Petrole;OXY +N1754=Oceaneering Intl Inc;OII +N1755=OEA Inc;OEA +N1756=OEC Medical Systems Inc;OXE +N1757=Office Depot Inc;ODP +N1758=OfficeMax Inc;OMX +N1759=Ogden Corp.;OG +N1760=Ohio Edison;OEC +N1761=Ohm Cp;OHM +N1762=Oil-Dri Cp;ODC +N1763=Oklahoma Gas & Electric;OGE +N1764=Old Republic Intl;ORI +N1765=Olin Corp;OLN +N1766=Olsten Corp;OLS +N1767=Omega Healthcare Investors Inc;OHI +N1768=Omnicare Inc;OCR +N1769=Omnicom Group Inc;OMC +N1770=Oneida Ltd;OCQ +N1771=Oneita Ind;ONA +N1772=ONEOK Inc.;OKE +N1773=Oppenheimer Capital Lp;OCC +N1774=Oppenheimer Multi Fund;OMS +N1775=Oppenheimer Multi Gov't Tr;OGT +N1776=Orange & Rockland Util;ORU +N1777=Orange Co;OJ +N1778=Orbital Engine Ltd;OE +N1779=Oregon Steel Mills Inc;OS +N1780=Oriental Bank & Trust;OBT +N1781=Orion Capital Corp;OC +N1782=Ornda Healthcorp;ORN +N1783=Oryx Energy;ORX +N1784=Osmonics Inc;OSM +N1785=Osullivans Industries Holding;OSU +N1786=Outboard Marine Corp.;OM +N1787=Overseas Shiphldg Grp;OSG +N1788=Owen Illinois;OI +N1789=Owens & Minor Inc;OMI +N1790=Owens-Corning;OCF +N1791=Oxford Ind Cl A;OXM +N1792=P P&L Resources;PPL +N1793=Pacific Amer Inc Shr;PAI +N1794=Pacific Corp;PPW +N1795=Pacific Enterprises;PET +N1796=Pacific Gas And Electric;PCG +N1797=Pacific Scientific Co.;PSX +N1798=Pacific Telesis Corp.;PAC +N1799=Pacificorp Quids;PCQ +N1800=Paine Webber Group;PWJ +N1801=Paine Webber Prem Hi Inc Tr;PHT +N1802=Paine Webber Prem Ins Muni Tr;PIF +N1803=Paine Webber Prem Tax Fr Income;PPM +N1804=Pakistan Investment Fund;PKF +N1805=Pall Cp;PLL +N1806=Panamerican Beverage Inc;PB +N1807=Panhandle Eastern Corp;PEL +N1808=Par Technology;PTC +N1809=Paragon Group;PAO +N1810=Paragon Trade Brands Inc;PTB +N1811=Park Electrochemical;PKE +N1812=Parker & Parsley Petroleum Co;PDP +N1813=Parker Drilling Co.;PKD +N1814=Parker Hannifin Corp.;PH +N1815=Patriot American Hospitality;PAH +N1816=Paxar Co;PXR +N1817=Payless Cashways Inc;PCS +N1818=Pec Israel Economic Cp;IEC +N1819=Pechiney Adr;PY +N1820=PECO Energy Co;PE +N1821=Penn Enterprises;PNT +N1822=Penn Traffic Co;PNF +N1823=Penncorp Financial Group;PFG +N1824=Penney (JC) Co. Inc.;JCP +N1825=Pennzoil Co.;PZL +N1826=Peoples Energy Corp;PGL +N1827=Pep Boys Manny, Moe, & Jack;PBY +N1828=Pepsi Co. Inc.;PEP +N1829=Pepsi-Cola Puerto Rico Bottling Cl B;PPO +N1830=Perkin Elmer Corp.;PKN +N1831=Perkins Farm Restaurants;PFR +N1832=Permian Basin Rlty Ubi;PBT +N1833=Personnel Group of Amer;PGA +N1834=Perusahaan Perseroan;TLK +N1835=Petro-Canada;PCZ +N1836=Petro-Canada 1st Installments;PCZPP +N1837=Petroleum & Resources;PEO +N1838=Pfizer Inc;PFE +N1839=Pharmaceutical Resources Inc;PRX +N1840=Pharmacia & Upjohn Inc;PNU +N1841=Phelps Dodge Corp.;PD +N1842=PHH Group Inc;PHH +N1843=Philadelphia Suburban;PSC +N1844=Philip Morris Inc;MO +N1845=Philippine Long Dist Tele;PHI +N1846=Phillips Electronics NV;PHG +N1847=Phillips Petroleum Co.;P +N1848=Phillips-Van Heusen Cp;PVH +N1849=Phoenix Duff & Phelps Corp;DUF +N1850=PHP Healthcare Cp;PPH +N1851=Physician Resource Group;PRG +N1852=Piccadilly Cafeteria;PIC +N1853=Piedmont Natural Gas;PNY +N1854=Pier 1;PIR +N1855=Pilgram America Prime Rate Trust;PPR +N1856=Pilgrim Amer Bank & Thrift Funds;PBS +N1857=Pilgrims Pride Corp;CHX +N1858=Pillowtex Corp;PTX +N1859=Pimco Advisory;PA +N1860=Pimco Commercial Mortgage Security Tru;PCM +N1861=Pinnacle West Capital Corp.;PNW +N1862=Pioneer Electronic ADR;PIO +N1863=Pioneer Finan Serv;PFS +N1864=Pioneer Financial Serv 225 Pr;PFS+ +N1865=Pioneer Hi Bred Intl;PHB +N1866=Pioneer Interest Shares;MUO +N1867=Piper Jaffray Inc;PJC +N1868=Pitney Bowes Inc.;PBI +N1869=Pittston Brinks Group;PZB +N1870=Pittston Burlington Group;PZX +N1871=Pittston Mineral Group;PZM +N1872=Placer Dome Inc.;PDG +N1873=Plantronics Inc;PLT +N1874=Playboy Enterprises;PLA +N1875=Playboy Enterprises A;PLAA +N1876=Playtex Products;PYX +N1877=Plum Creek;PCL +N1878=Ply Gem Ind;PGI +N1879=PMI Group;PMA +N1880=PNC Financial;PNC +N1881=Pogo Producing Co.;PPP +N1882=Pohang Iron & Steel Co;PKX +N1883=Polaris Indus Lp;PII +N1884=Polaroid Corp.;PRD +N1885=Policy Management Systems Cp;PMS +N1886=Polygram Nv;PLG +N1887=Poncebank Fsb;PBK +N1888=Pope & Talbot Inc;POP +N1889=Portec Inc;POR +N1890=Portland Gas & Elec.;PGN +N1891=Portugal Fund;PGF +N1892=Portugal Telecom;PT +N1893=Post Properties Inc;PPS +N1894=Potash Cp;POT +N1895=Potlatch Corp.;PCH +N1896=Potomac Utilities;POM +N1897=Power Control Tech;ATP +N1898=Powergen ADR;PWG +N1899=Powergen Plc Fst Inte;PWGPP +N1900=PPG Ind. Inc;PPG +N1901=Praxair Inc;PX +N1902=Precision Castparts Cp;PCP +N1903=Preferred Income Fund Inc;PFD +N1904=Preferred Income Mgmt;PFM +N1905=Preferred Income Opportunity Fund;PFO +N1906=Premark Intl Inc;PMI +N1907=Premdor Inc;PI +N1908=Premier Farnell Pld;PFP +N1909=Presley Cos;PDC +N1910=Pride Cos Lp;PRF +N1911=Primark Corp;PMK +N1912=Prime Hospitality Inns Inc;PDQ +N1913=Prime Motor Inns Lp;PMP +N1914=Proctor & Gamble Co.;PG +N1915=Progressive Corp (Ohio);PGR +N1916=Proler Intl;PS +N1917=Promus Hotel;PRH +N1918=Prospect Street Hi Income;PHY +N1919=Protective Life Cp;PL +N1920=Provident Life & Accident Insurance Cl A;PVT +N1921=Providian Corp;PVN +N1922=Prudential Reinsurance Holdings Inc;RE +N1923=PS Group Inc;PSG +N1924=Public Serv Co Of N C;PGS +N1925=Public Service Co Colo;PSR +N1926=Public Service Electric Gas;PEG +N1927=Public Service New Mexico;PNM +N1928=Public Storage Inc;PSA +N1929=Publicker Industries;PUL +N1930=Puerto Rican Cement;PRN +N1931=Puget Sound Power & Light;PSD +N1932=Pulitzer Publishing Co;PTZ +N1933=Pulte Corp;PHM +N1934=Putnam Dividend Income Fund;PDI +N1935=Putnam High Income Trust;PCF +N1936=Putnam High Muni;PYM +N1937=Putnam Intermediate Govt Trust;PGT +N1938=Putnam Inv Grd Mun Tr II;PMG +N1939=Putnam Investment Grade Muni Trust;PGM +N1940=Putnam Managed Hi Yield Tr;PTM +N1941=Putnam Management Muni Inc Tr;PMM +N1942=Putnam Master Income Trust;PMT +N1943=Putnam Master Interm Income Trust;PIM +N1944=Putnam Mun Opp Trust;PMO +N1945=Putnam Premier Income Trust;PPT +N1946=Putnam Tax-Free Health Care Fund;PMH +N1947=QMS Inc;AQM +N1948=Quaker Oats Co.;OAT +N1949=Quaker State Oil Ref;KSF +N1950=Quanex Corp;NX +N1951=Quantum Restaurants Group;KRG +N1952=Quebecor Printing;PRW +N1953=Quest For Value Cap Shares;KFV +N1954=Quest For Value Income Shares;KFV+ +N1955=Questar Corp Holding Co.;STR +N1956=Quick & Reilly Group Inc;BQR +N1957=Quilmes Indust Societe Anonyme;LQU +N1958=Ralcorp Holdings Inc;RAH +N1959=Ralston Purina Group;RAL +N1960=Ranger Oil Ltd;RGO +N1961=Rauma Oy ADR;RMA +N1962=Raychem Corp;RYC +N1963=Raymond James Financial;RJF +N1964=Rayonier Inc;RYN +N1965=Rayonier Timberlands Lp;LOG +N1966=Raytech Corp Hldg & Co Del;RAY +N1967=Raytheon Co.;RTN +N1968=RCM Strategic Global;RCS +N1969=Reader's Digest Assn cl B;RDB +N1970=Reader's Digest Association Inc Class A;RDA +N1971=Reading $ Bates Cp;RB +N1972=Realty Income Fund;O +N1973=Realty Refund Tr Sbi;RRF +N1974=Red Lion Hotels Inc;RL +N1975=Red Roof Inns;RRI +N1976=Reebok Intl Ltd;RBK +N1977=Reed Intl ADR;RUK +N1978=Regency Realty Corp;REG +N1979=Reinsurance Group Of America;RGA +N1980=Reliance Steel & Aluminum;RS +N1981=Reliastar Fncl;RLR +N1982=Relience Group Holding;REL +N1983=Renaissance Communications Corp;RRR +N1984=Renaissance Hotel Group;RHG +N1985=Renal Treatment Center;RXT +N1986=Repsol ADR;REP +N1987=Republic Group Inc;RGC +N1988=Republic NY Cp;RNB +N1989=Resource Mortgage Capital Inc;RMR +N1990=Retirement Care Associates;RCA +N1991=Revco D S Inc;RXR +N1992=Revere (Paul) Corp;PRL +N1993=Revlon Inc Cl A;REV +N1994=Rex Stores Corp;RSC +N1995=Rexel Inc;RXL +N1996=Rexene Corp;RXN +N1997=Reynolds & Reynolds Co Class A;REY +N1998=Reynolds Metals Co.;RLM +N1999=Rhoders Inc;RHD +N2000=Rhone Poulenc ADR;RP +N2001=Rhone-Polenc Rorer Inc;RPR +N2002=Rightchoice Managed Care;RIT +N2003=Rite Aid Corp;RAD +N2004=RJR Nabisco Hldg;RN +N2005=RJR Nabisco pf C;RN+C +N2006=RLI Corp;RLI +N2007=RMI Titanium Co;RTI +N2008=Roadmaster Ind Inc;RDM +N2009=Robert Half Intl Inc;RHI +N2010=Robertson (HH) Co.;RHH +N2011=Roc Communities Inc;RCI +N2012=ROC Taiwan Fund;ROC +N2013=Rochester Gas & Electric;RGS +N2014=Rockerfeller Center Prop;RCP +N2015=Rockwell Intl;ROK +N2016=Rodman & Renshaw Cap Grp;RR +N2017=Rogers Communication;RG +N2018=Rohm & Hass Co.;ROH +N2019=Rohr Ind Inc.;RHR +N2020=Rollins Environmental Svcs Inc;REN +N2021=Rollins Inc;ROL +N2022=Rollins Truck Leasing Corp;RLC +N2023=Rouge Steel Co;ROU +N2024=Rouse Co;RSE +N2025=Rowan Companies Inc.;RDC +N2026=Rowe Furniture Cp;ROW +N2027=Royal Appliance Mfg Co;RAM +N2028=Royal Bank of Canada;RY +N2029=Royal Bank Scotland 9.5;RBS+C +N2030=Royal Bank Scotland;RBS+ +N2031=Royal Carribean Cruise Ltd;RCL +N2032=Royal Dutch Petroleum ADR;RD +N2033=Royal Plastics Group Inc;RYG +N2034=Royal PTT Netherland Adr;KPN +N2035=Royce Value Trust Inc;RVT +N2036=RPC Inc;RES +N2037=RPS Realty Tr Sbi;RPS +N2038=RTZ Plc ADR;RTZ +N2039=Rubbermaid Inc;RBD +N2040=Ruby Tuesday Inc;RI +N2041=Ruddick Corp;RDK +N2042=Russ Berrie & Co;RUS +N2043=Russell Cp;RML +N2044=Ryder Systems Inc.;R +N2045=Rykoff Sexton;RYK +N2046=Ryland Group Inc;RYL +N2047=Rymer Co.;RYR +N2048=Sabine Royalty Tr;SBR +N2049=Safeguard Scientific;SFE +N2050=Safety-Kleen Corp;SK +N2051=Safeway Inc;SWY +N2052=Saga Petroleum ADR;SPMB +N2053=Salant Corp;SLT +N2054=Saloman Inc pf D;SB+D +N2055=Salomon Bros WW Inc Fd;SBW +N2056=Salomon Brothers Fund Inc;SBF +N2057=Salomon Brothers High Income Fund;HIF +N2058=Salomon Brothers Inc;SB +N2059=San Anita Rlty Entp;SAR +N2060=San Juan Basin Realty;SJT +N2061=Sanifill Inc;FIL +N2062=Santa Fe Energy Resources Inc;SFR +N2063=Santa Fe Energy Trust Spers;SFF +N2064=Santa Fe Pacific Gold Corp;GLD +N2065=Santa Fe Pacific Pipeline Lp;SFL +N2066=Santa Isabel Sa;ISA +N2067=Santander Overseas Bank Nc;OPR+ +N2068=Sara Lee;SLE +N2069=Saul Centers Inc;BFS +N2070=Savannah Foods & Ind;SFI +N2071=Sbarro Cp;SBA +N2072=SBC Communication;SBC +N2073=Scana Corp;SCG +N2074=Scania Ab Cl A Adr;SCVA +N2075=Scania AB cl B Adr;SCVB +N2076=Schawk Inc Cl A;SGK +N2077=Scheitzer-Mauduit Intl Inc;SWM +N2078=Scherer (R.P.) Cp;SHR +N2079=Schering-Plough Corp.;SGP +N2080=Schlumberger Ltd;SLB +N2081=Schroder Asian Fund;SHF +N2082=Schroeder Sth Africa;SOA +N2083=Schuller Corp;GLS +N2084=Schwab Charles;SCH +N2085=Scientific Atlanta Inc.;SFA +N2086=Scotsman Ind. Inc;SCT +N2087=Scott Liquid Gold;SGD +N2088=Scripps (E.W) Co. Class A;SSP +N2089=Scudder New Asia Fund Inc;SAF +N2090=Scudder New Europe Fund Inc;NEF +N2091=Scudder World Income;SWI +N2092=Sea Containers Cl A;SCRA +N2093=Sea Containers Ltd Class B;SCRB +N2094=Seagram Co. Ltd.;VO +N2095=Seagull Energy Corp;SGO +N2096=Sealed Air Corp;SEE +N2097=Sears Pf;S+A +N2098=Sears Roebuck & Co.;S +N2099=Security Capital Ind;SCN +N2100=Security Capital Pacific Trust;PTR +N2101=Seitel Inc.;SEI +N2102=Seligman Quality Municipal Fund;SQF +N2103=Seligman Select Muni Fund Inc;SEL +N2104=Sensormatic Electronics;SRM +N2105=Sequa Corp Class A;SQAA +N2106=Sequa Corp Class B;SQAB +N2107=Service Corp Intl;SRV +N2108=Service Merchandise;SME +N2109=Servicemaster Lp;SVM +N2110=SGS Thomson Microelectronics;STM +N2111=Shandong Huaneng Power Development ADR;SH +N2112=Shanghai Petrochemical ADR;SHI +N2113=Shaw Ind Inc;SHX +N2114=Shelby Williams Ind;SY +N2115=Shell Transport ADR;SC +N2116=Sherwin Williams Co.;SHW +N2117=Sherwood Group;SHD +N2118=Shoney's Restaurants;SHN +N2119=Shop Ko Stores;SKO +N2120=Showboat Inc;SBO +N2121=Shurgard Storage Centers;SHU +N2122=Sierra Health Services Inc;SIE +N2123=Sierra Pac Res Hldg;SRP +N2124=Sigcorp Inc;SIG +N2125=Signal Apparel Co.;SIA +N2126=Signet Banking Cp;SBK +N2127=Silicon Graphics Inc;SGI +N2128=Simon Property Group;SPG +N2129=Singapore Fund Inc;SGF +N2130=Singer Co;SEW +N2131=Sinter Metal Inc;SNM +N2132=Sizeler Property Invstrs;SIZ +N2133=Sizzler Intl;SZ +N2134=Skyline Corp.;SKY +N2135=SL Industries Inc;SL +N2136=Smart & Final Inc;SMF +N2137=Smith AO Class B;AOS +N2138=Smith Charles Realty Inc;SRW +N2139=Smith Corona;SCO +N2140=Smith Food & Drugs Cl B;SFD +N2141=Smith Intl Inc;SII +N2142=Smithkline Beecham Plc Ads;SBH +N2143=Smucker (JM) Co. Class A;SJMA +N2144=Smucker (JM) Co. Class B;SJMB +N2145=Snap-On Inc;SNA +N2146=Snyder Oil Cp;SNY +N2147=Sociedad Quinica Minera De Chile;SQM +N2148=Sofamor/Danek Group;SDG +N2149=Sola Intl Inc;SOL +N2150=Solectron Cp;SLR +N2151=Sonat Inc.;SNT +N2152=Sonat Offshore Drilling Inc;RIG +N2153=Sonoco Products Co;SON +N2154=Sony Cp ADR;SNE +N2155=Sotheby's Holdings Inc;BID +N2156=Source Capital Inc;SOR +N2157=South Jersey Ind.;SJI +N2158=Southdown Inc;SDW +N2159=Southern Calif Water;SCW +N2160=Southern Co.;SO +N2161=Southern Natl Cp;SNB +N2162=Southern New England Tech;SNG +N2163=Southern Pacific Rail Inc;RSP +N2164=Southern Peru Copper Cp;PCU +N2165=Southern Union Co;SUG +N2166=Southwest Airlines;LUV +N2167=Southwest Gas Corp;SWX +N2168=Southwestern Energy;SWN +N2169=Southwestern Property Trust;SWP +N2170=Southwestern Public Service;SPS +N2171=Sovran Self Storage;SSS +N2172=Spaghetti Warehouse;SWH +N2173=Spain Fund;SNF +N2174=Spartech Cp;SEH +N2175=Sparton Corp;SPA +N2176=Speedway Motorsport;TRK +N2177=Spelling Entertainment;SP +N2178=Sphere Drake Holding Ltd;SD +N2179=Spieker Properties Inc;SPK +N2180=Sport Supply Group Inc;GYM +N2181=Sports & Recreation Inc;WON +N2182=Sports Authority;TSA +N2183=Springs Industries;SMI +N2184=Sprint Corp;FON +N2185=Sprint Cp Exchangbl D;FXN +N2186=SPS Technologies;ST +N2187=SPS Transaction Services Inc;PAY +N2188=SPX Cp;SPW +N2189=St Joe Paper Co;SJP +N2190=St John Knits Inc;SJK +N2191=St Joseph Power & Light;SAJ +N2192=St Paul Companies;SPC +N2193=Standard Commercial Corp;STW +N2194=Standard Federal Bancorp;SFB +N2195=Standard Motor Prod Class A;SMP +N2196=Standard Products Co.;SPD +N2197=Standard-pacific Cp;SPF +N2198=Standex Intl;SXI +N2199=Stanhome Inc;STH +N2200=Stanley Works (the);SWK +N2201=Star Bancorp;STB +N2202=Starret (LS) Co. (The);SCX +N2203=Starter Corp;STA +N2204=Starwood Lodging;HOT +N2205=State Street Boston;STT +N2206=Sterile Concept Holdings;SYS +N2207=Sterling Bancorp;STL +N2208=Sterling Chemical;STX +N2209=Sterling Commerce Inc;SE +N2210=Sterling Electronics;SEC +N2211=Sterling Software Inc;SSW +N2212=Stet Societa Finanziaria Telefonica ADR;STE +N2213=Stewart Information Serv;STC +N2214=Stifel Financial Corp;SF +N2215=Stone & Webster Inc;SW +N2216=Stone Container Corp.;STO +N2217=Stone Energy Corp;SGY +N2218=Stop & Shop Cos;SHP +N2219=Storage Technology;STK +N2220=Storage Trust Realty;SEA +N2221=Storage USA;SUS +N2222=Strategic Global Income Fund Inc;SGL +N2223=Stratus Computer Inc;SRA +N2224=Stride Rite Corp;SRR +N2225=Student Loan Corp;STU +N2226=Student Loan Mtg Assoc;SLM +N2227=Sturm Ruger & Co Inc;RGR +N2228=Suburban Propane Partners;SPH +N2229=Summit Bancorp;SUB +N2230=Summit Properties Inc;SMT +N2231=Sun Co. Inc.;SUN +N2232=Sun Communities Inc;SUI +N2233=Sun Energy Pt Lp Dep;SLP +N2234=Sun Healthcare Group;SHG +N2235=Sun Intl Hotels Ltd;SIH +N2236=Sunamerica Inc;SAI +N2237=Sunbeam Co;SOC +N2238=Suncoast Industries Inc;SN +N2239=Sundstrand Corp;SNS +N2240=Sunrise Medical Inc;SMD +N2241=Sunshine Mining & Refining;SSC +N2242=Sunsource Lp Cl A;SDP +N2243=Sunsource Lp Cl B;SDPB +N2244=SunTrust Bank Inc;STI +N2245=Super Food Services Inc;SFS +N2246=Superior Industries Intl;SUP +N2247=Supervalu Inc;SVU +N2248=Swift Energy;SFY +N2249=Sybron International Corp;SYB +N2250=Symbol Technology;SBL +N2251=Syms Corp;SYM +N2252=Synovus Financial Cp;SNV +N2253=Syratech Corp;SYR +N2254=Sysco Corp;SYY +N2255=Tadiran Ltd;TAD +N2256=Taiwan Equity Fund;TYW +N2257=Taiwan Fund;TWN +N2258=Talbot Inc;TLB +N2259=Tally Industries Inc;TAL +N2260=Tambrands Inc;TMB +N2261=Tandem Computers;TDM +N2262=Tandy Corp.;TAN +N2263=Tandycrafts Inc;TAC +N2264=Tanger Factory Outlet Centers;SKT +N2265=Taubman Centers Inc;TCO +N2266=Taurus Muni CA Holdings Inc;MCF +N2267=Taurus Muni NY Holdings Inc;MNY +N2268=TB Woods Corp;TBW +N2269=TCBY Enterprises Inc;TBY +N2270=TCC Industries;TEL +N2271=TCF Financial;TCB +N2272=TCW Convertible Sec Fund;CVT +N2273=TCW/DW Emerging Mkt Opp Tr;EMO +N2274=TCW/DW Term Trust 2000;TDT +N2275=TCW/DW Term Trust 2003;TMT +N2276=TCW/DW Term Trust 2002;TRM +N2277=TDK Corp;TDK +N2278=Tech-Sym Corp;TSY +N2279=Teckson Associates Rl;RA +N2280=Teco Energy;TE +N2281=Teekay Shipping Cp;TK +N2282=Tejas Gas Cp;TEJ +N2283=Tektronix Inc.;TEK +N2284=Tele Danmark ADR;TLD +N2285=Telecom Argentina Stet-france;TEO +N2286=Telecom Of New Zealand;NZT +N2287=Telecomm Brasileiras Adr;TBR +N2288=Teledyne Inc.;TDY +N2289=Teleflex Inc.;TFX +N2290=Telefonica De Argentina ADR;TAR +N2291=Telefonica De Espana ADR;TEF +N2292=Telefonos De Mexico;TMX +N2293=Telex Chile;TL +N2294=Temple-Inland Inc;TIN +N2295=Templeton China World Fund;TCH +N2296=Templeton Emerg Mkt Appr Fd;TEA +N2297=Templeton Emerg Mkt Inc Fd;TEI +N2298=Templeton Emerging Market Fund;EMF +N2299=Templeton Global Gov't In Tr;TGG +N2300=Templeton Global Income Fund;GIM +N2301=Templeton Russia Fund Inc;TRF +N2302=Templeton Vietnam Oppt Fund;TVF +N2303=Templton Dragon;TDF +N2304=Tenet Healthcare Corp;THC +N2305=Tenneco Inc.;TEN +N2306=Tennessee Valley Auth;TVA +N2307=Teppco Partners Lp;TPP +N2308=Teradyne Inc.;TER +N2309=Terex Cp;TEX +N2310=Terra Industries;TRA +N2311=Terra Nitrogen;TNH +N2312=Terra Nova Holdings Ltd;TNA +N2313=Tesoro Petrolium Corp.;TSO +N2314=Texaco Inc.;TX +N2315=Texaco Pr B;TXC+B +N2316=Texas Industries Inc.;TXI +N2317=Texas Instruments;TXN +N2318=Texas Pacific Land Tr;TPL +N2319=Texas Utility;TXU +N2320=Texfi Ind. Inc;TXF +N2321=Textron Inc.;TXT +N2322=Thackeray Corp;THK +N2323=Thai Capital Fund Inc;TC +N2324=Thai Fund;TTF +N2325=The European Warrant Fund Inc;EWF +N2326=The Indonesia Fund Inc;IF +N2327=Thermo Electron Corp;TMO +N2328=Thomas & Betts Corp.;TNB +N2329=Thomas Ind. Inc;TII +N2330=Thomas Nelson Inc;TNM +N2331=Thor Industries Inc;THO +N2332=Thornburg Mortgage Asset Corp;TMA +N2333=Three 60 Communication;XO +N2334=Three Five Systems Inc;TFS +N2335=Thrifty Payless Holdings Cl B;TPD +N2336=Tidewater Inc;TDW +N2337=Tiffany & Co.;TIF +N2338=TIG Holdings Inc;TIG +N2339=Timberland;TBL +N2340=Time Warner Inc;TWX +N2341=Times Mirror Co;TMC +N2342=Timken Co.;TKR +N2343=TIS Mortgage Investment Co;TIS +N2344=Titan Corp;TTN +N2345=Titan Holdings Inc;TH +N2346=Titan Wheel International;TWI +N2347=TJX Companies Inc;TJX +N2348=Tnp Enterprises Inc;TNP +N2349=Toastmaster Inc;TM +N2350=Todd Shipyards Cp;TOD +N2351=Tokheim Corp;TOK +N2352=Toll Brothers Inc;TOL +N2353=Tomkins Plc ADR;TKS +N2354=Tootsie Roll Ind.;TR +N2355=Torch Energy Royalty;TRU +N2356=Torchmark Corp;TMK +N2357=Toro Co;TTC +N2358=Tosco Corp.;TOS +N2359=Total ADR;TOT +N2360=Total Renal Care Holdings Inc;TRL +N2361=Total System Service Inc;TSS +N2362=Town & Country Trust Sbi;TCT +N2363=Toy Biz;TBZ +N2364=Toys R Us;TOY +N2365=Trans Canada Pipeins Ltd.;TRP +N2366=Trans Technology Corp;TT +N2367=Transamerica Corp.;TA +N2368=Transamerican Income;TAI +N2369=Transatlantic Holdings Inc;TRH +N2370=Transcontinental Realty;TCI +N2371=Transmedia Network;TMN +N2372=Transportadora De Gas Del Sur ADR;TGS +N2373=Transportation Maritima Mexicana ADR;TMM +N2374=Transportation Maritima Mexicana ADR A;TMMA +N2375=Transpro Inc;TPR +N2376=Travelers Group Inc;TRV +N2377=Travelers/Aetna Property Casualty;TAP +N2378=TRC Inc;TRR +N2379=Tredegar Industries Inc;TG +N2380=Tremont Cp;TRE +N2381=Tri-Continental Corp.;TY +N2382=Triarc Cos;TRY +N2383=Tribune Co;TRB +N2384=Trigen Energy Cp;TGN +N2385=Trimas Cp;TMS +N2386=Trinet Corporate Realty Trust;TRI +N2387=Trinity Ind. Inc;TRN +N2388=Trinova;TNV +N2389=Triton Energy Corp.;OIL +N2390=Trizec Corp;TZC +N2391=True North Communication;TNO +N2392=Trump Hotel & Casino;DJT +N2393=TRW Inc.;TRW +N2394=Tucson Elec Pwr.;TEP +N2395=Tultex Corp;TTX +N2396=Turkey Fund;TKF +N2397=TVX Gold Inc;TVX +N2398=Twentieth Century Ind;TW +N2399=Twin Disc Inc;TDI +N2400=Tyco International Ltd;TYC +N2401=Tyco Toys Inc;TTI +N2402=Tyler Corp;TYL +N2403=U S Filter Corp;USF +N2404=U S Surgical Corp;USS +N2405=U.S. Home Corp;UH +N2406=UAL Corp;UAL +N2407=Ucar Intl;UCR +N2408=UGI Corp;UGI +N2409=Ultramar Corp;ULR +N2410=UNC Resources;UNC +N2411=Unicom Corp;UCM +N2412=Unifi Inc;UFI +N2413=Unifirst Corp;UNF +N2414=Unilever Ltd Amer Shr;UL +N2415=Unilever Ltd NV;UN +N2416=Union Camp;UCC +N2417=Union Carbide Corp.;UK +N2418=Union Corporation;UCO +N2419=Union Electric;UEP +N2420=Union Pacific;UNP +N2421=Union Pacific Resources Group;UPR +N2422=Union Planters Corp;UPC +N2423=Union Texas Petroleum;UTH +N2424=Unionamerica Holdings Adr;UA +N2425=Unisys Corp.;UIS +N2426=Unisys Cp Pf Series A;UIS+A +N2427=Unit Corp;UNT +N2428=United Amer Healthcare Cp;UAH +N2429=United Asset Management;UAM +N2430=United Dominion;UDI +N2431=United Dominion Realty Trust;UDR +N2432=United Healthcare;UNH +N2433=United Illuminating;UIL +N2434=United Ind Corp;UIC +N2435=United Kingdom Fund Inc;UKM +N2436=United Meridian Cp;UMC +N2437=United Park City Mines;UPK +N2438=United Technologies;UTX +N2439=United Transnet Inc;UT +N2440=United Water Res Inc;UWR +N2441=United Wisconsin Services Inc;UWZ +N2442=Unitrode Corp;UTR +N2443=Univar Corp;UVX +N2444=Universal Foods Cp;UFC +N2445=Universal Health Realty Trust;UHT +N2446=Universal Hlth Serv Inc Class B;UHS +N2447=Universal Leaf Tobacco;UVV +N2448=Uno Restaurants Corp;UNO +N2449=Unocal Co;UCL +N2450=UNUM (Union Mutual);UNM +N2451=Unum Cp 8.80pc Mids;UND +N2452=Urban Shopping Centers;URB +N2453=URS Cp;URS +N2454=US 1 Industries;USO +N2455=US Can Corp;USC +N2456=US Indust Inc;USN +N2457=US Restaurants;USV +N2458=US West;USW +N2459=US West Media Group;UMG +N2460=USA Waste Services Inc;UW +N2461=USAir Inc.;U +N2462=USF&G;FG +N2463=USG Cp;USG +N2464=USLife Corp.;USH +N2465=Uslife Income Fund;UIF +N2466=UST Inc;UST +N2467=USX Delhi Group;DGP +N2468=USX Marathon Oil Co;MRO +N2469=USX US Steel;X +N2470=Utilicorp United Inc;UCU +N2471=Valassis Communication Inc;VCI +N2472=Valero Energy Corp.;VLO +N2473=Valhi Corp.;VHI +N2474=Valley Natl Bancorp;VLY +N2475=Valspar Cp;VAL +N2476=Value City Department Stores;VCD +N2477=Value Health Inc;VH +N2478=Value Proprty Trust;VLP +N2479=Van Kamp Ca Muni Income;VCV +N2480=Van Kamp Insurance Muni Fd;VIM +N2481=Van Kamp Investment Group;VGM +N2482=Van Kamp Ny Value Muni Income;VNV +N2483=Van Kampen Amer Cap Cv Sec Inc;ACS +N2484=Van Kampen Amer Capital Bond Fund;ACB +N2485=Van Kampen Amer Capital Income Trust;ACD +N2486=Van Kampen Ltd;VLT +N2487=Van Kampen Mer Adv MI Muni;VKA +N2488=Van Kampen Mer Adv PA Muni;VAP +N2489=Van Kampen Mer CA Qual Muni;VQC +N2490=Van Kampen Mer FL Qua Muni;VFM +N2491=Van Kampen Mer Muni Opp Tr II;VOT +N2492=Van Kampen Mer PA Val Mun Incom;VPV +N2493=Van Kampen Mer Strag Sec Muni;VKS +N2494=Van Kampen Mer Value Inc Tr;VKV +N2495=Van Kampen Merit Municipal;VMT +N2496=Van Kampen Merritt Income Fund;VIT +N2497=Van Kampen Merritt Inv Grade Muni;VIG +N2498=Van Kampen Merritt IG Fl;VTF +N2499=Van Kampen Merritt IG NJ;VTJ +N2500=Van Kampen Merritt IG NY;VTN +N2501=Van Kampen Merritt IG PA;VTP +N2502=Van Kampen Muni Opportunity Trust;VMO +N2503=Van Kampen NY Quality;VNM +N2504=Van Kampen Ohio Quality;VOQ +N2505=Van Kampen Trust Investment Cal Muni;VIC +N2506=Van Kempen Merritt Municip;VKQ +N2507=Van Kempen Merritt Penn Quality Municipa;VPQ +N2508=Varco Intl Inc;VRC +N2509=Varian Associates;VAR +N2510=Varity Corp;VAT +N2511=Vastar Resources Inc;VRI +N2512=Vencor Inc;VC +N2513=Venture Stores;VEN +N2514=Venture Stores Inc Prf;VEN+ +N2515=Verifone Inc;VFI +N2516=Vesta Insurance Group Inc;VTA +N2517=Vestaur Securities Inc;VES +N2518=VF Cp;VFC +N2519=Vina Concha Y Toro;VCO +N2520=Vintage Petroleum Inc;VPI +N2521=Vishay Intertechnology;VSH +N2522=Vitro Sociedad Anonima ADR;VTO +N2523=Vivra Inc;V +N2524=Vms Mortgage Investment;VMG +N2525=Vodafone Group;VOD +N2526=Volunteer Capital Corp;VCC +N2527=Vons Companies Inc;VON +N2528=Vornado Inc;VNO +N2529=Vulcan Materials Co.;VMC +N2530=Waban Inc;WBN +N2531=Wabash Natl Cp;WNC +N2532=Wachovia Corp;WB +N2533=Wackenhut Corp;WAK +N2534=Wackenhut Correction;WHC +N2535=Wackenhut Cp Cl B;WAKB +N2536=Wahlco Environment Systems;WAL +N2537=Wainoco Co.;WOL +N2538=Wal-Mart Stores Inc.;WMT +N2539=Walden Residential Properties;WDN +N2540=Walgreen Co;WAG +N2541=Wallace Computer Svcs;WCS +N2542=Warnaco Group Inc Class A;WAC +N2543=Warner Lambert Co.;WLA +N2544=Washington Construction Group;WAS +N2545=Washington Energy Co;WEG +N2546=Washington Gas Light;WGL +N2547=Washington Homes;WHI +N2548=Washington Natl Corp;WNT +N2549=Washington Post Co;WPO +N2550=Washington Water Power;WWP +N2551=Waste Management Intl ADR;WME +N2552=Waterhouse Investor Serv Inc;WHO +N2553=Waters Corp;WAT +N2554=Watkins Johnson Co.;WJ +N2555=Watsco Inc Cl A;WSO +N2556=Watts Indus Inc Class A;WTS +N2557=Waxman Industries Inc;WAX +N2558=WCI Steel Inc;WRN +N2559=Weatherford Enterra Inc;WII +N2560=Webb (Del E) Corp;WBB +N2561=Weeks Corp;WKS +N2562=Weingarten Realty Inc;WRI +N2563=Weirton Steel Corp;WS +N2564=Weis Markets Inc;WMK +N2565=Wellman Inc;WLM +N2566=Wellpoint Health Networks Inc;WLP +N2567=Wells Fargo & Co;WFC +N2568=Wellsford Residentl P;WRP +N2569=Wendy's Intl.;WEN +N2570=West Coast Energy Inc;WE +N2571=West Company Inc;WST +N2572=West Penn Pwr Co Quid;WQP +N2573=Westbridge Capital Cp;WBC +N2574=Westcorp;WES +N2575=Western Atlas Inc;WAI +N2576=Western Digital Corp;WDC +N2577=Western Gas Resources Inc;WGR +N2578=Western National Corp;WNH +N2579=Western Resources;WR +N2580=Western Waste Industries;WW +N2581=Westinghouse Air Brake Co;WAB +N2582=Westinghouse Electric;WX +N2583=Westmoreland Coal;WCX +N2584=Westpac Banking Corp;WBK +N2585=Westvaco Corp.;W +N2586=Weyerhaeuser Co.;WY +N2587=Wheelabrator Technologies Inc;WTI +N2588=Whirlpool;WHR +N2589=Whitehall Corp;WHT +N2590=Whitman Corp;WH +N2591=Whittaker Corp.;WKR +N2592=WHX Corp;WHX +N2593=Wicor Inc;WIC +N2594=Williams Co.;WMB +N2595=Williams Coal Seam Gas Royalty Trust;WTU +N2596=Willis Corroon Plc ADR;WCG +N2597=Wilshire Oil Co Tx;WOC +N2598=Windmere;WND +N2599=Winn-Dixie Stores Inc.;WIN +N2600=Winnebago Inds Inc;WGO +N2601=Wisconsin Elec.;WEC +N2602=Wiser Oil Co;WZR +N2603=Witco Corp;WIT +N2604=WMC Ltd ADR;WMC +N2605=Wms Industries;WMS +N2606=WMX Inc.;WMX +N2607=Wolverine Tube Inc;WLV +N2608=Wolverine Worldwide;WWW +N2609=Woolworth Co.;Z +N2610=World Airways Inc;WOA +N2611=World Color Press Inc;WRC +N2612=World Fuel Services;INT +N2613=Worldtex Inc;WTX +N2614=Worldwide Dollarvest;WDV +N2615=Worldwide Value Fund;VLU +N2616=WPL Holding;WPH +N2617=WPS Resources;WPS +N2618=Wrigley (Wm Jr) Co.;WWY +N2619=Wyle Electronics;WYL +N2620=Wynn's Intl;WN +N2621=Xerox Corp.;XRX +N2622=Xtra Corp;XTR +N2623=Yankee Energy Systems Inc;YES +N2624=York Intl Corp;YRK +N2625=YPF Sociedad Anonima ADR;YPF +N2626=Z-Seven Fund Inc;ZSE +N2627=Zapata Corp.;ZAP +N2628=Zeigler Coal Holdings;ZEI +N2629=Zemex Corp;ZMX +N2630=Zeneca Group ADR;ZEN +N2631=Zenith Electronics Cp;ZE +N2632=Zenith Income Fund;ZIF +N2633=Zenith Natl Ins Corp;ZNT +N2634=Zero Co.;ZRO +N2635=Zilog Inc;ZLG +N2636=Zurich Reinsurance Centre Holding;ZRC +N2637=Zurn Industries;ZRN +N2638=Zweig Fund Inc.;ZF +N2639=Zweig Total Return Fund;ZTR + +[AMEX] +N1=Ackerley Commun Inc;AK +N2=Acme United Cp;ACU +N3=Action Ind Inc;ACZ +N4=Adam Resources & Energy Inc;AE +N5=Advanced Financial;AVF +N6=Advanced Magnetics Inc;AVM +N7=Advanced Medical Inc;AMA +N8=Advanced Photonix Inc Class A;API +N9=Advanced Therapeutic Systems;ATH +N10=Aerosonics Cp;AIM +N11=Aim Strategic Income Fund Inc;AST +N12=Air & Water Technology Cp Class A;AWT +N13=Air Methods Corp;AIRM +N14=Aircoa Hotel Partners;AHT +N15=Alamco Inc;AXO +N16=Alba Waldensian Inc;AWS +N17=Alcoa Pf;AA+ +N18=Alfin Inc;AFN +N19=Allied Digital Tech;ADT +N20=Allied Research Cp;ALR +N21=Allou Health & Beauty Cl A;ALU +N22=Alpha Ind;AHA +N23=Alpine Group Inc;AGI +N24=AMC Entertainment Inc;AEN +N25=Amdahl;AMH +N26=Ame Insured Mtg Inv 84;AIA +N27=Amer Bank Of Connecticut;BKC +N28=Amer Biltrite Inc;ABL +N29=Amer Body Armor & Equipment;ABE +N30=Amer Explor Co;AX +N31=Amer Insured Mtg Inv 85;AII +N32=Amer Insured Mtg Inv 86;AIJ +N33=Amer Insured Mtg Inv 88;AIK +N34=Amer Israeli Paper Mills;AIP +N35=Amer List Cp;AMZ +N36=Amer Paging Inc;APP +N37=Amer Real Estate Investment;REA +N38=Amer Restaurants Partners LP;RMC +N39=Amer Science Engineering;ASE +N40=Amer Shared Hospital Services;AMS +N41=Amer Technical Ceramics Cp;AMK +N42=America First Prep Fund 2 Lp;PF +N43=Ampal Amer Israel Cl A;AISA +N44=Amwest Ins Gr Inc;AMW +N45=Andrea Electronics Cp;AND +N46=Angeles Mortgage Inv Tr;ANM +N47=Angeles Partcp Mtge Tr;APT +N48=Anuhco Inc;ANU +N49=Aprogenex Inc;APG +N50=Arc Intl Inc;ATV +N51=Arizona Land Incm Cp Cl A;AZL +N52=Arrhythia Research Technology;HRT +N53=Arrow Automotive Ind Inc;AI +N54=ASR Investments Corp;ASR +N55=Assisted Living Concepts Inc;ALF +N56=Astrotech Intl Cp;AIX +N57=AT Plastics Inc;ATJ +N58=Atari Corp;ATC +N59=Atlantis Plastics Inc Cl A;AGH +N60=Audiovox Cp Cl A;VOX +N61=Audits & Surveys Inc;ASW +N62=Aurora Electronics Inc;AUR +N63=Aviva Petroleum;AVV +N64=Azco Mining;AZC +N65=B & H Maritime Carriers Ltd;BHM +N66=B & H Ocean Carriers Ltd;BHO +N67=B A T Industries ADR;BTI +N68=B Stearns CUBS;KBB +N69=Badger Meter Inc;BMI +N70=Baker (Michael) Cp;BKR +N71=Balchem Cp;BCP +N72=Baldwin Technology Co;BLD +N73=Bancroft Convertible Fund Inc;BCV +N74=Banister Foundation Inc;BAN +N75=Bank Of Southington;BSO +N76=Bankers Tr NY Conv;BND +N77=Bankers Trust Dep;BPR +N78=Bankers Trust Shrs Pf;BPB +N79=Banyan Hotel Inv Fd;VHT +N80=Barnwell Ind;BRN +N81=Barr Laboratories Inc;BRL +N82=Barrister Information Cp;BIS +N83=Bay Meadows Operating Co;CJ +N84=Bayou Steel Cp Cl A;BYX +N85=Bear Stearns MRK Chip;MCP +N86=Beard Oil Co;BOC +N87=Bema Gold Corp;BGO +N88=Benchmark Electronics Inc;BHE +N89=Bentley Pharmaceuticals Inc;BNT +N90=Bergstrom Capital Cp;BEM +N91=Besicorp Group Inc;BGI +N92=Bethlehem Cp;BET +N93=BHC Communications Inc Class A;BHC +N94=Binks Mfg Co;BIN +N95=Bio-Rad Laboratories Inc Class A;BIOA +N96=Bio-Rad Labs Cl B;BIOB +N97=Biscayne Apparel;BHA +N98=Blackrock Broad Inv Gr 09 Term;BCT +N99=Blackrock CA Inv Qual Muni Tr;RAA +N100=Blackrock FL Inv Qual Muni Tr;RFA +N101=Blackrock NJ Inv Qual Muni Tr;RNJ +N102=Blackrock NY Inv Qual Muni Tr;RNY +N103=Blair Cp;BL +N104=Blessings Cp;BCO +N105=Blonder Tongue Laboratories;BDR +N106=Boddie Noell Prop;BNP +N107=Bogen Comm Intl Inc;BGN +N108=Bostonfed Bancorp;BFD +N109=Bowl America Inc Cl A;BWLA +N110=Bowmar Instrument Cp;BOM +N111=Bowne & Co Inc;BNE +N112=Brandon Systems Corp;BRA +N113=Brandywine Realty Trust;BDN +N114=Brascan Ltd.;BRSA +N115=Buffton Cp;BFX +N116=Cabletel Communication;TTV +N117=Cablevision Sys Cp Cl A;CVC +N118=Cagles Inc Cl A;CGLA +N119=Calprop Cp;CPP +N120=Calton Inc;CN +N121=Cambrex Cp;CBM +N122=Cancer Treatment Hldgs Inc;CTH +N123=Capital Realty Tax Ex LP I;CRA +N124=Capital Realty Tax Ex LP II;CRB +N125=Capital Realty Tax Ex LP III;CRL +N126=Carmel Container Sys Ord;KML +N127=Castle A M & Co;CAS +N128=Castle Convertible Fund Inc;CVF +N129=Cavalier Homes Inc;CAV +N130=Cdn Marconi Co;CMW +N131=Cdn Occidental Pet;CXY +N132=CE Franklin Ltd;CFK +N133=CEC Resources;CGS +N134=Centennial Technologies;CTN +N135=Centerpoint Properties Corp;CNT +N136=Central Fund Of Can Class A;CEF +N137=Central Securities;CET +N138=CFX Corp;CFX +N139=Chad Therapeutics;CTU +N140=Champion Healthcare Cp;CHC +N141=Chase Corp;CCF +N142=Chesapeake Biological Laboratories;PHD +N143=Cheyenne Software Inc;CYE +N144=Chicago Rivet & Machine Co;CVR +N145=Chieftain Intl Inc;CID +N146=CIM High Yield Securities;CIM +N147=Citadel Holding Cp;CDL +N148=Citisave Financial Cp;CZF +N149=Coast Distrib System;CRV +N150=Coastal Caribbean Oils;CCO +N151=Cognitronics Cp;CGN +N152=Cohen & Steers Reality Income Fund;RIF +N153=Columbia Laboratories Inc;COB +N154=Columbus Energy Corp;EGY +N155=Comforce Corp;CFS +N156=Cominco Ltd;CLT +N157=Commercial Assets Inc;CAX +N158=Competitve Technologies;CTT +N159=Comptek Research;CTK +N160=Computrac Inc;LLB +N161=Comsouth Bancshares;CSB +N162=Concord Fabrics Inc Cl A;CIS +N163=Concord Fabrics Inc Cl B;CISB +N164=Consolidated Tomako Land;CTO +N165=Contl Materials Cp;CUO +N166=Convest Energy Cp;COV +N167=Copley Prop Inc;COP +N168=Cornerstone Bank;CBN +N169=Cornerstone Natural Gas Inc;CGA +N170=Corpus Christi Bancshares;CTZ +N171=Courtaulds Plc ADR;COU +N172=Creative Computer Application;CAP +N173=Cross (AT) Co Class A;ATXA +N174=Crowley Milner & Co;COM +N175=Crown Central Pet Cl A;CNPA +N176=Crown Central Pet Cl B;CNPB +N177=Crown Laboratories;CLL +N178=Cruise Amer Inc;RVR +N179=Crystal Oil Co;COR +N180=CST Entertainment Inc;CLR +N181=Cubic Corp;CUB +N182=Customedix Cp;CUS +N183=CVB Financial Cp;CVB +N184=Cycomm Intl;CYI +N185=Dakota Mining;DKT +N186=Dallas Gold & Silver;DLS +N187=Danielson Holding Cp;DHC +N188=Datametrics Cp;DC +N189=Dataram Cp;DTM +N190=Daxor Cp;DXR +N191=Dayton Mining Cp;DAY +N192=Decorator Ind Inc;DII +N193=Del Global Tech Corp;DEL +N194=Del Laboratories Inc;DLI +N195=Denamerica Corp;DEN +N196=Devon Energy Cp;DVN +N197=Dewolfe Co;DWL +N198=DI Industries;DRL +N199=Dia Met Minerals Ltd Cl A;DMMA +N200=Dia Met Minerals Ltd Cl B;DMMB +N201=Diagnostic/Retrieval Systems;DRS +N202=Digicon Inc;DGC +N203=Digital Communication;DCT +N204=Dimark Inc;DMK +N205=Diodes Inc;DIO +N206=Disc Graphics Inc;DGI +N207=Dixon Ticonderoga Co;DXT +N208=Donnelly Cp Cl A;DON +N209=DRCA Medical Cp;DRC +N210=Drew Ind Inc;DW +N211=Dreyfus Cal Muni Incm;DCM +N212=Dreyfus Muni Income Trust;DMF +N213=Dreyfus NY Muni Income Fund;DNM +N214=Driver Harris Co;DRH +N215=Ducommun Inc;DCO +N216=Duplex Products Inc;DPX +N217=Dycam Inc;DYC +N218=E-Z Serve Cp;EZS +N219=Eastern Co;EML +N220=Echo Bay Mines;ECO +N221=Ecology & Environment Inc Cl A;EEI +N222=Edisto Resources Cp;EDT +N223=Editek Inc;EDI +N224=Eldorado Bancorp;ELB +N225=Electrochemical Ind Frutarom;EIF +N226=Ellsworth Cv Growth & Income Fund;ECF +N227=Elsinore Cp;ELS +N228=Emeritus Corp;ESC +N229=Emerson Radio;MSN +N230=Empire Of Carolina Inc;EMP +N231=Encore Marketing International;EMI +N232=Engex Inc;EGX +N233=Environmental Tectonics Cp;ETC +N234=Enzo Biochem Inc;ENZ +N235=Epitope Inc;EPT +N236=Equity Income Fund;ATF +N237=Equus II;EQS +N238=Espey Mfg & Electronics;ESP +N239=Essex Bancorp Inc;ESX +N240=ETS International Inc;ETS +N241=ETZ Lavud Cl A;ETZA +N242=ETZ Lavud Ltd Ord;ETZ +N243=Everest & Jennings Intl Inc;EJ +N244=EXX Inc Cl B;EXXB +N245=EXX Inc Class A;EXXA +N246=Fab Ind Inc;FIT +N247=Falcon Cable Systems Co;FAL +N248=Falmouth Co - Operative Bank;FCB +N249=Female Health Co;FHC +N250=FFP Partners Lp;FFP +N251=Fibreboard Cp;FBD +N252=Fina Inc Cl A;FI +N253=Financial Federal Corp;FIF +N254=First Australia Fund;IAF +N255=First Australian Prime Inc.;FAX +N256=First Central Finan Cp;FCC +N257=First Empire State Cp;FES +N258=First Iberian Fund Inc;IBF +N259=First Natl Bankshares;FNH +N260=First Republic Bancorp;FRC +N261=First West Virg Bancorp;FWV +N262=Flanigans Enterprises;BDL +N263=Florida Public Utilities Co;FPU +N264=Florida Rock Ind;FRK +N265=Foodarama Supermarkets;FSM +N266=Forest City Enter Cl A;FCEA +N267=Forest City Enter Cl B;FCEB +N268=Forest Lab Inc.;FRX +N269=Fortune Petroleum Corp;FPX +N270=Forum Retirement Lp;FRL +N271=Fountain Powerboat Indus Inc;FPI +N272=FPA Cp;FPO +N273=Franklin Advantage Re;FAD +N274=Franklin Hldg Cp;FKL +N275=Franklin Real Estate;FIN +N276=Franklin Select RE Fd;FSN +N277=Frequency Electronics;FEI +N278=Fresenius USA Inc;FRN +N279=Friedman Ind;FRD +N280=Frischs Restaurants;FRS +N281=Frontiers Adjuster Of America;FAJ +N282=Fuqua Enterprise;FQE +N283=GA Financial Inc;GAF +N284=Gainsco Inc;GNA +N285=Galaxy Cablevision L P;GTV +N286=Gamma Biologicals;GBL +N287=Garan Inc;GAN +N288=Gaylord Container Cp;GCR +N289=Gelman Sciences Inc;GSC +N290=Gen Automation Inc;GA +N291=Gen Employment Enter;JOB +N292=Gen Microwave Cp;GMW +N293=General Kinetics;GKI +N294=Genovese Drug Stores Inc Cl A;GDXA +N295=Giant Food Class A;GFSA +N296=Glacier Water Services Inc;HOO +N297=Glatfelter P H Co;GLT +N298=Global Ocean Carriers Ltd;GLO +N299=Globalink Inc;GNK +N300=Go-Video Inc;VCR +N301=Golden Star Resources Ltd;GSR +N302=Goldfield Cp;GV +N303=Goldwyn (Samuel) Co;SG +N304=Gorman Rupp Co;GRC +N305=Graham Cp;GHM +N306=Graham Field Health Prod;GFI +N307=Granges Inc;GXL +N308=Greenbriar Corp;GBR +N309=Greenwich Street Cal Muni Fd;GCM +N310=Greyhound Lines Inc;BUS +N311=Griffin Gaming & Entertainment;GGE +N312=GST Telecommunication;GST +N313=Gull Laboratories Inc;GUL +N314=Gundle Slt Environ Sys Inc;GUN +N315=Haagen (Alexander) Properties Inc;ACH +N316=Halifax Cp;HX +N317=Hallmark Financial Sv;HAF +N318=Hallwood Energy Partners;HEP +N319=Hallwood Energy Partners class C;HEPC +N320=Hallwood Rlty Partners L P;HRY +N321=Halsey Drug Co Inc;HDG +N322=Hampton Ind Inc;HAI +N323=Hanger Orthopedic Group;HGR +N324=Hanover Direct;HNV +N325=Harken Energy Cp;HEC +N326=Harlyn Products Inc;HRN +N327=Harolds Stores Inc;HLD +N328=Hasbro;HAS +N329=Hastings Mfg;HMF +N330=Hawaiian Airlines;HA +N331=Health Chem Cp;HCH +N332=Health Professionals Inc;HPI +N333=Healthy Planet Products;HPP +N334=Heartland Partners L P;HTL +N335=Hearx Ltd;EAR +N336=Heico Cp;HEI +N337=Hein Werner Cp;HNW +N338=Heist (CH) Cp;HST +N339=Helionetics Inc;ZAPP +N340=Helm Resources Inc;HHH +N341=Helmstar Group;HLM +N342=Hemlo Gold Mines Inc;HEM +N343=Heritage Media Cp Cl A;HTG +N344=Hi Shear Tech Cp;HSR +N345=Highlander Income Fund;HLA +N346=HMG/Courtland Prop In;HMG +N347=Holco Mtg Accep Cp-i;HOLA +N348=Holly Cp;HOC +N349=Hondo Oil & Gas Co;HOG +N350=Hooper Holmes Inc;HH +N351=Horizon Mental Health Mngt;HMH +N352=Host Funding;HFD +N353=Houston Biotechnology;HBI +N354=Hovnanian Enterprises Inc;HOV +N355=Howell Ind;HOW +N356=Hudson General Cp;HGC +N357=Hungarian Telephone;HTC +N358=Identix Inc;IDX +N359=IGI Inc;IG +N360=Imperial Credit Mortgage;IMH +N361=Imperial Holly Group;IHK +N362=Imperial Oil Ltd.;IMO +N363=Income Opport Rea Inv;IOT +N364=Incstar Cp;ISR +N365=Independent Bankshares;IBK +N366=Inefficient-Market Fund Inc;IMF +N367=Instron Cp;ISN +N368=Int'l Lottery Inc;ILI +N369=Intelcom Group Inc;ICG +N370=Intelligent Controls;ITC +N371=Intelligent Systems;INS +N372=Inter-City Products Cp;IPR +N373=Interchange Finan Serv Cp;ISB +N374=Interdigital Communications Corp;IDC +N375=Interline Resources Corp;IRC +N376=Intermagnetics Gen Cp;IMG +N377=Interstate General Cl A Ut Lp;IGC +N378=Intersystems Inc;II +N379=Intertape Polymer Group Inc;ITP +N380=Intl Thoroughbred Brdrs;ITB +N381=Investors Insurance Group Inc;IIG +N382=Ion Laser Technology Inc;ILT +N383=Iriec;IRI +N384=IVAX Cp;IVX +N385=Jaclyn Inc.;JLN +N386=Jalate Ltd;JLT +N387=Jan Bell Marketing;JBM +N388=Jetronic Ind;JET +N389=Jones Intercable Inv Cl A;JTV +N390=Joule Inc;JOL +N391=Kankakee Bancorp Se;KNK +N392=Katz Media Group;KTZ +N393=KBK Capital Cp;KBK +N394=Keane Inc;KEA +N395=Kentucky First Bancorp;KYF +N396=Kenwin Shops Inc;KWN +N397=Key Energy Group Inc;KEG +N398=Keystone Heritage Group;KHG +N399=KFX Inc;KFX +N400=Killearn Properties Inc;KPI +N401=Kinark Cp;KIN +N402=Kirby Cp;KEX +N403=Kit Mfg;KIT +N404=Kleer Vu Ind;KVU +N405=Knogo N Amer Corp;KNA +N406=Koger Equity;KE +N407=KV Pharmaceutical Class B;KVB +N408=KV Pharmaceutical Class A;KVA +N409=Labarge Inc;LB +N410=Lancer Cp;LAN +N411=Landauer Inc;LDR +N412=Laser Indus Ltd;LAS +N413=Laser Tech;LSR +N414=Lazare Kaplan Intl Inc;LKI +N415=Leather Factory;TLF +N416=Lehman Bro Hld Amgen;AYN +N417=Lehman Bro Region Bk;BKG +N418=Lehman Bros Hld Glo Suns 2000;SXT +N419=Lehman Bros Hldngs MICN Elks;MUY +N420=Lillian Vernon Cp;LVC +N421=Littlefield Adams & Co;LFA +N422=Lumex Inc;LUM +N423=Luxtec Cp;LXU +N424=LXR Biotechnology Inc;LXR +N425=Lynch Cp;LGL +N426=M C Shipping Inc;MCX +N427=M Stanley GT PERQS 97;IGS +N428=M Stanley TMX PERQS;MXT +N429=MacNeal Schwendler Cp;MNS +N430=Magellan Health Services;MGL +N431=Magnum Petroleum Inc;MPM +N432=MAI Systems Inc;NOW +N433=Maine Public Serv;MAP +N434=Marlton Technologies Inc;MTY +N435=Massachusetts H&E Tru;MHE +N436=Matec Cp;MXC +N437=Maxxam Inc;MXM +N438=McRae Ind Cl A;MRIA +N439=McRae Ind Cl B;MRIB +N440=Mdc Corp;MDQ +N441=Measurement Specialties Inc;MSS +N442=Medco Research Inc;MRE +N443=Medeva Plc Ads;MDV +N444=Media General Cl A;MEGA +N445=Media Logic Inc;TST +N446=Medicore Inc;MDK +N447=Mediq Inc;MED +N448=Medquist Inc;MBS +N449=Mem Co;MEM +N450=Mental Health Management Inc;MHM +N451=Merchants Group Inc;MGP +N452=Mercury Air Group Inc;MAX +N453=Meridian Point Rlty 8;MPH +N454=Merrimac Ind Inc;MRM +N455=Met-Pro Cp;MPR +N456=Metromedia Intl Group;MMG +N457=Metropolitan Realty Cp;MET +N458=Michael Anthony Jewelers;MAJ +N459=Microtel Intl Inc;MOL +N460=Mid America Bancorp;MAB +N461=Mid Atlantic Realty Trust Sbi;MRR +N462=Middleby Cp;MIDD +N463=Midland Co;MLA +N464=Midsouth Bancorp Inc;MSL +N465=Milwaukee Land Inc;MWK +N466=Minnesota Mun Term Tr;MNB +N467=Minnesota Muni Inc Port;MXA +N468=Mission West Properties;MSW +N469=Moog Inc Cl B;MOGB +N470=Moog Inc Class A;MOGA +N471=Moore Medical Cp;MMD +N472=Morgan Group Class A;MG +N473=Morgan Stanley CSCO;XPC +N474=Morgans Foods Inc;MR +N475=Morrison Fresh Cooking Inc;MFC +N476=Movie Star Inc;MSI +N477=MSR Exploration Ltd;MSR +N478=Muniinsured Fund Inc;MIF +N479=Munivest Fund Inc;MVF +N480=Muniyield AZ Fd;MZA +N481=Muniyield Insured Fund;MYI +N482=Myers Ind Inc;MYE +N483=N Amer Vaccine Inc;NVX +N484=N Y Tax Exempt Incm Fd;XTX +N485=Nabors Industries Inc;NBR +N486=Nantucket Ind Inc;NAN +N487=National Bancshares Of Texas;NBT +N488=Natl Beverage Corp;FIZ +N489=Natl Gas & Oil Cp;NLG +N490=Natl Healthcare Lp;NHC +N491=Natl Patent Deve Cp;NPD +N492=Natl Realty Lp;NLP +N493=Natural Alternatives Intl;NAI +N494=New Iberian Bancorp;NIB +N495=New Mexico & Arizona Land;NZ +N496=New York Times Class A;NYTA +N497=NFC Plc;NFC +N498=Norex America Inc;NXA +N499=Northbay Financial Cp;NBF +N500=Northern Technologies Intl;NTI +N501=Novavax Inc;NOX +N502=NTN Communication;NTN +N503=Numac Energy Inc;NMC +N504=Nuveen CA Premium Ins Muni Fd;NCU +N505=Nuveen GA Premium Ins Muni Fd;NPG +N506=Nuveen MO Premium Ins Muni fd;NOM +N507=Nuveen WA Premium Ins Muni Fd;NPW +N508=NV Ryan Homes;NVR +N509=O Okiep Copper ADR;OKP +N510=O Sullivan Cp;OSL +N511=Ohio Art Co;OAR +N512=OMI Corp;OMM +N513=Omni Multimedia Group;OMG +N514=Oncor Inc;ONC +N515=Oncormed Inc;ONM +N516=One Liberty Prop;OLP +N517=Organogenesis Inc;ORG +N518=Oriole Homes Cp Cl A;OHCA +N519=Oriole Homes Cp Cl B;OHCB +N520=Oshman Sporting Goods;OSH +N521=Pacific Gateway Property Inc;PGP +N522=Pacific Gulf Properties;PAG +N523=Page America Group Inc;PGG +N524=Paine Webber Grp S&P 400;SIS +N525=Pamida Hldgs Cp;PAM +N526=Park Natl Corp;PRK +N527=Partners Preferred Yield;PYA +N528=Partners Preferred Yield II;PYB +N529=Partners Preferred Yield III;PYC +N530=Paxson Communication;PXN +N531=PC Quote;PQT +N532=Pegasus Gold Inc;PGU +N533=Penn Engineering & Mfg Cp;PNN +N534=Penn Real Estate Inv Tr Sbi;PEI +N535=Penobscot Shoe Co;PSO +N536=Perini Cp;PCR +N537=Peters (JM) Co;CPH +N538=Phoenix Network Inc;PHX +N539=Phoenix Resources Cos;PHN +N540=Pico Products Inc;PPI +N541=Piedmont Bancorp;PDB +N542=Pinnacle Bank;PLE +N543=Pitts & West Va R R Sbi;PW +N544=Pitts De Moines Inc;PDM +N545=Pittway Cl A;PRYA +N546=Pittway Cp;PRY +N547=Plains Resources Inc;PLX +N548=PLC Systems Inc;PLC +N549=PLM Intl Inc;PLM +N550=Plymouth Rubber Cl A;PLRA +N551=Plymouth Rubber Inc Cl A;PLRB +N552=PMC Capital Inc;PMC +N553=PMC Commercial Trust;PCC +N554=Poly Medical Industries;PM +N555=Polyphase Cp;PLY +N556=Polyvision;PLI +N557=Porta Systems Cp;PSI +N558=Portage Indus Cp;PTG +N559=Pratt Hotel Cp;PHC +N560=Pre-Paid Legal Serv Inc;PPD +N561=Presidential Realty Cl A;PDLA +N562=Presidential Realty Cl B;PDLB +N563=Price Communications;PR +N564=Pricellular Corp;PC +N565=Prism Entertainment Cp;PRZ +N566=Professional Bancorp;MDB +N567=Professional Dental Tech Inc;PRO +N568=Property Capital Tr Sbi;PCT +N569=Provena Foods Inc;PZA +N570=Providence Energy Cp;PVY +N571=Psychemedics Corp;PMD +N572=Public Storage Prop X Inc;PSL +N573=Public Storage Prop XI Inc;PSM +N574=Public Storage Prop XII Inc;PSN +N575=Public Storage Prop XIV Inc;PSP +N576=Public Storage Prop XV Inc;PSQ +N577=Public Storage Prop XVI Inc;PSU +N578=Public Storage Prop XVIII Inc;PSW +N579=Public Storage Prop XX Inc;PSZ +N580=Public Storage Props XVII Inc;PSV +N581=Public Storage Props XIX Inc;PSY +N582=Putnam CA Inv Grd Mun;PCA +N583=Putnam Inv Grd Mun Tr III;PML +N584=Putnam NY Inv Grd Mun;PMN +N585=Pyrocap Intl Corp;PYR +N586=Quebecor Inc Cl A;PQB +N587=R F Power Products;RFP +N588=Ragan (Brad) Inc;BRD +N589=Randers Group Inc;RGI +N590=Raven Industries Inc;RAVN +N591=Red Lion Inns Lp;RED +N592=Redlaw Industries;RDL +N593=Redwood Empire Bancorp;REB +N594=Refac Technology Deve;REF +N595=Regal Beloit Cp;RBC +N596=Regency Healthcare Systems Inc;RHS +N597=Reliv International Inc;RLV +N598=Resort Income Investors Inc;RII +N599=Richton Intl Cp;RHT +N600=Riegel Energy Corp;RJL +N601=Rio Algom Ltd;ROM +N602=Riser Inc;RSR +N603=Rogers Cp;ROG +N604=Rotonics Manufacturing Inc;RMI +N605=Royal Oak Mines Inc;RYO +N606=Rx Medical Service Corp;RXM +N607=Rymac Mortgage Inv Cp;RM +N608=S&P Midcap Dep Recpts;MDY +N609=Saba Petroleum Co;SAB +N610=Saga Communications Inc;SGA +N611=Sahara Gaming Corp;SGM +N612=Salem Cp;SBS +N613=Salomon AMGN Elk;AEK +N614=Salomon Brothers 2008 Worldwide Trust;SBG +N615=Salomon Inc DEC Elk;DLK +N616=Salomon Inc HWP Els;HLK +N617=Salomon Inc MSFT Com;MEK +N618=Salomon Inc ORCL Elks;OLK +N619=Salomon Inc SNPL Elks;SEK +N620=Santa Monica Bank;SMO +N621=SC Bancorp;SCK +N622=Scandinavia Co Inc;SCF +N623=Sceptre Resources Ltd;SRL +N624=Scheib (Earl) Inc;ESH +N625=Schult Homes Cp;SHC +N626=Scope Ind;SCP +N627=Scotland Bancorp;SSB +N628=Seaboard Cp;SEB +N629=Selas Cp Of Amer;SLS +N630=Serenpit Inc;SRI +N631=Servico Inc;SER +N632=Servotronics;SVT +N633=Sheffield Explorations;SHE +N634=Sheffield Medical Technology Inc;SHM +N635=Shelter Components Cp;SST +N636=Shopco Laurel Centre;LSC +N637=Sifco Ind;SIF +N638=Signal Technology Corp;STZ +N639=Silverado Foods Inc;SLV +N640=Simula Inc;SMU +N641=SJW Cp;SJW +N642=Sloans Supermarket Inc;SLO +N643=Smith A O Cl A;SMCA +N644=Smith Barney Interm Muni Fund Inc;SBI +N645=Smith Barney Municipal Fund;SBT +N646=Softnet Systems Inc;SOF +N647=SOI Industries;SOI +N648=Soligen Tech;SGT +N649=Southern Banc Inc;SRN +N650=Southern Calif Ed Qui;SCEQ +N651=Southfirst Bancshares;SZB +N652=SPDR;SPY +N653=SPDR Net Asset Value;SXN +N654=Specialty Chemical Resources Inc;CHM +N655=Spectravision Inc Cl;SVN +N656=Speed O Print Bus Mach;SBM +N657=Sports Club Inc;SCY +N658=Stage II Apparel Cp;SA +N659=Starrett Housing Cp;SHO +N660=Stepan Co;SCL +N661=Stephan Co;TSC +N662=Sterling Capital Cp;SPR +N663=Sterling Healthcare;STER +N664=Sterling House;SGH +N665=Stevens Intl Cl B;SVGB +N666=Stevens Intl Cp Cl A;SVGA +N667=Stone Street Bancorp;SSM +N668=Storage Computer Corp;SOS +N669=Storage Properties Inc;STG +N670=Struthers Industries Inc;SIR +N671=Sulcus Computer Cp;SUL +N672=Summit Tax Ex Bond Fund Lp;SUA +N673=Sun City Ind;SNI +N674=Sunair Electronics Inc;SNR +N675=Sunbelt Nursery Grp Inc;SBN +N676=Suncor Inc;SU +N677=Superior Surgical Mfg Co;SGC +N678=Supreme Industries;STS +N679=Surety Capital Corp;SRY +N680=Swing N Slide Corp;SWG +N681=Tab Products Co;TBP +N682=Tasty Baking Co;TBC +N683=Team Inc;TMI +N684=Tech/Ops Sevcon Inc;TO +N685=Teche Holdings;TSH +N686=Technitrol Inc;TNL +N687=Tejas Power Cp;TPC +N688=Tejon Ranch Co;TRC +N689=Telephone & Data Systems Inc;TDS +N690=Tenera Inc;TNR +N691=Texarkana First Financiall Corp;FTF +N692=Texas Biotechnology;TXB +N693=Texas Meridian Res Cp;TMR +N694=Thermedics Inc;TMD +N695=Thermo Cardiosystems Inc;TCA +N696=Thermo Ecotek;TCK +N697=Thermo Fibertek;TFT +N698=Thermo Instrument Systems Inc;THI +N699=Thermo Power Cp;THP +N700=Thermo Remediation Inc;THN +N701=Thermo Sentron Inc;TSR +N702=Thermo Terratech Inc;TTT +N703=Thermo Voltek Corp;TVL +N704=Thermolase Corp;TLZ +N705=Thermospectra Corp;THS +N706=Thermotrex Corp;TKN +N707=Thermwood Cp;THM +N708=Three D Dept Cl A;TDDA +N709=Three D Dept Cl B;TDDB +N710=Three River Fncl Corp;THR +N711=Tipperary Corp;TPY +N712=Tofutti Brands Inc;TOF +N713=Tolland Bank CT;TBK +N714=Top Source Technology;TPS +N715=Torotel Inc;TTL +N716=Total Petroleum N.amer;TPN +N717=Town & Country;TNC +N718=Trans World Airlines Inc;TWA +N719=Trans-Lux Cp;TLX +N720=Transcisco Ind;TNI +N721=Tranzonic Cos B;TNZB +N722=Tranzonic Cos Class A;TNZA +N723=Tridex Corp;TRDX +N724=Trinitech Systems;TSI +N725=Triple A & Govt 1997;TGB +N726=Triton Group Ltd;TGL +N727=TSF Communications Cp;TCM +N728=Tulos De Acero De Mexico Ltd;TAM +N729=Turner Broadcasting Sys Cl B;TBSB +N730=Turner Broadcasting Sys Cl A;TBSA +N731=Turner Cp;TUR +N732=Unapix Entertainment Inc;UPX +N733=Uni-Marts Inc;UNI +N734=Uniflex Inc;UFX +N735=Unimar Inc;UMR +N736=Unique Mobility Inc;UQM +N737=United Capital Cp;AFP +N738=United Foods Inc Cl B;UFDB +N739=United Foods Inc Cl A;UFDA +N740=United Guardian Inc;UG +N741=United Mobile Homes Inc;UMH +N742=Unitel Video Inc;UNV +N743=Unitil Cp;UTL +N744=Urohealth Systems Inc;URO +N745=US Alcohol Testing;AAA +N746=US Biosciences Inc;UBS +N747=US Cellular;USM +N748=USF&G Pacholder Fund Inc;PHF +N749=UTI Energy Corp;UTI +N750=Valley Forge Cp;VF +N751=Valley Resources Inc;VR +N752=Van Kamp Mer Cal Muni Tr;VKC +N753=Van Kampen Mer Adv Muni Inc II;VKI +N754=Van Kampen Mer FL Muni Opp;VOF +N755=Van Kampen Mer MA Val Muni Inco;VMV +N756=Van Kampen Mer NJ Val Muni Inc Tr;VJV +N757=Van Kampen Mer OH Val Muni Inco;VOV +N758=Van Kampen Mer Sel Muni Tr;VKL +N759=Vanguard Re Fund II;VRT +N760=Vanguard Real Est Fd I Com Fr;VRO +N761=Versar Inc;VSR +N762=Viacom Class B;VIAB +N763=Viacom Intl;VIA +N764=Vicon Ind Inc;VII +N765=Virco Mfg Cp;VIR +N766=Vitronics Cp;VTC +N767=Voyageur AZ Muni Inc;VAZ +N768=Voyageur Co Ins Muni;VCF +N769=Voyageur FL Ins Muni;VFL +N770=Voyageur Minnesota Muni Income Fund;VMN +N771=Voyageur MN Muni Income II;VMM +N772=Voyageur MN Muni Income III;VYM +N773=Vulcan Intl Cp;VUL +N774=Wash Real Estate Inv Tr Sbi;WRE +N775=Washington Savings Bk Fsb;WSB +N776=Watsco Inc Cl B;WSOB +N777=Webco Industries Inc;WEB +N778=WEBS Australia;EWA +N779=WEBS Austria Index;EWO +N780=WEBS Belgium Index;EWK +N781=WEBS Canada;EWC +N782=WEBS France;EWQ +N783=WEBS Germany;EWG +N784=WEBS Hong Kong;EWH +N785=WEBS Italy;EWI +N786=WEBS Japan Index;EWJ +N787=WEBS Malaysia Index;EWM +N788=WEBS Mexico;EWW +N789=WEBS Nethlands;EWN +N790=WEBS Singapore;EWS +N791=WEBS Spain;EWP +N792=WEBS Sweden;EWD +N793=WEBS Switzerland;EWL +N794=WEBS UK;EWU +N795=Weldotron Cp;WLD +N796=Wellco Enterprises;WLC +N797=Wells Gardner Electronics Cp;WGA +N798=Wendt Bristol Hlth Sv;WMD +N799=Wesco Financial Cp;WSC +N800=Western Investment Real Estate Trust;WIR +N801=Western Star Truck Holding;WSH +N802=Whitman Educational Group;WIX +N803=Wilshire Technology Inc;WIL +N804=Winston Resources Inc;WRS +N805=Wireless Telecom Group;WTT +N806=Wiz Technology;WIZ + +[MUTUAL] +N1=20th C Balance Investors Fund;TWBIX +N2=20th C Giftrust;TWGTX +N3=20th C Growth;TWCGX +N4=20th C Heritage Inv;TWHIX +N5=20th C Intl Stocks;TWIEX +N6=20th C Select;TWCIX +N7=20th C Ultra;TWCUX +N8=20th C US Govt;TWUSX +N9=20th C Vista;TWCVX +N10=20th Century Intl Emerging Growth;TWEGX +N11=AARP Capital Growth Fund;ACGFX +N12=AARP Global Growth;ARGGX +N13=AARP GNMA & US Treasury Fund;AGNMX +N14=AARP Growth & Income Fund;AGIFX +N15=Acorn Fund Inc;ACRNX +N16=Acorn Intl;ACINX +N17=AIM Aggressive Growth;AAGFX +N18=Aim Charter Fund;CHTRX +N19=Aim Constellation Growth Fund;CSTGX +N20=Aim Convertible Yld Security;AMBLX +N21=AIM Value Fund;AVLFX +N22=Aim Weingarten Equity Fund;WEINX +N23=Alliance Tech Fund;ALTFX +N24=Alliance World Income;AWITX +N25=Alliance Worldwide Privatization;AWPAX +N26=Amer Europacific Growth Funds;AEPGX +N27=Amer Fundamental Investors Fund;ANCFX +N28=Amer Growth Fund Of America;AGTHX +N29=Amer New Perspective;ANWPX +N30=Amer Washington Mutual;AWSHX +N31=American Heritage Fund;AHERX +N32=Artisen Small Cap Fund;ARTSX +N33=ASM Fund;ASMUX +N34=Babson Bond Tr;BBDSX +N35=Babson Enterprise Fund;BABEX +N36=Babson Growth Fund;BABSX +N37=Babson Shadow Stock Fund;SHSTX +N38=Babson Stewart Ivory Intl;BAINX +N39=Babson Value Fund;BVALX +N40=Baron Asset Fund;BARAX +N41=Baron Growth &income Fund;BGINX +N42=Benham Adj Rate Govt Security Fund;BARGX +N43=Benham Equity Growth;BEQGX +N44=Benham European Gov Bond Fund;BEGBX +N45=Benham Glb Natural Resources;BGRIX +N46=Benham GNMA Income Fund;BGNMX +N47=Benham Gold Equity Index Fund;BGEIX +N48=Benham Income & Growth;BIGRX +N49=Benham Target 2000 Fund;BTMTX +N50=Benham Target 2005 Fund;BTFIX +N51=Benham Target 2010 Fund;BTTNX +N52=Benham Target 2015 Fund;BTFTX +N53=Benham Target 2020 Fund;BTTTX +N54=Benham Treasury Note Fund;CPTNX +N55=Benham Util Inc Fund;BULIX +N56=Berger 100 Fund;BEONX +N57=Berger 101 Fund;BEOOX +N58=Berger Small Co Growth Fund;BESCX +N59=Bernstein International Value;SNIVX +N60=Blanchard Flex Tax Free Bond;BTFBX +N61=Blanchard Global Growth;BGGFX +N62=Bramwell Growth Fund;BRGRX +N63=Brandywine Fund;BRWIX +N64=Bull & Bear Global Income;BBGLX +N65=Bull & Bear Gold Investors Fund;BBGIX +N66=Bull & Bear Special Equity Fund;BBSEX +N67=Bull & Bear US & Overseas Fund;BBOSX +N68=California Tax Free Income;CFNTX +N69=Cappiello Rushmore TR Growth Fund;CRGRX +N70=Cappiello Rushmore Tr Emerging Growth;CREGX +N71=Century Shares Trust Fund;CENSX +N72=CGC Intl Equity;TIEUX +N73=CGC Large Cap Growth;TLGUX +N74=CGC Large Cap Value;TLVUX +N75=CGC Small Cap Growth;TSGUX +N76=CGM Capital Development;LOMCX +N77=CGM Mutual Fund;LOMMX +N78=Clipper Fund;CFIMX +N79=Cohen Steers Realty Shares;CSRSX +N80=Colonial Tax Exempt Fund;COLTX +N81=Columbia Growth Fund;CLMBX +N82=Columbia Special Fund Inc.;CLSPX +N83=Crabbe Huson Spec Fund;CHSPX +N84=DFA Continental Small Company;DFCSX +N85=DFA Japanese Small Company;DFJSX +N86=DFA United Kingdom Small Company;DFUKX +N87=Dodge & Cox Stock Fund;DODGX +N88=Drey A Bonds Plus;DRBDX +N89=Drey Asset Allocation Fund;DRAAX +N90=Drey Comstock Cap Value Cl A;DRCVX +N91=Drey Core Value Fund;DCVIX +N92=Drey Fund;DREVX +N93=Drey Global Inv Class B;DGLBX +N94=Drey Growth + Income;DGRIX +N95=Drey Intermediate Tax Exempt Bond;DITEX +N96=Drey Leverage Fund;DRLEX +N97=Drey New Leader Fund;DNLDX +N98=Drey Opportunity Fund;DREQX +N99=Drey Strategic Worldwide;DSWIX +N100=Drey Tax Ex Bond Fund;DRTAX +N101=Drey Third Century;DRTHX +N102=Dreyfus Appreciation;DGAGX +N103=DW American Value Fund;DWIVX +N104=DW Capital Growth Fund;DWCGX +N105=DW Developing Growth Fund;DWDGX +N106=DW Dividend Growth Fund;DWDVX +N107=DW European Growth Fund;DWEGX +N108=DW Pacific Growth Fund;DWPGX +N109=DW Strategist Fund;DWSTX +N110=DW Value Added Fund;DWVAX +N111=DW Worldwide Investor Fund;DWWWX +N112=Eaton Vance High Yield Muni Tr;EVHMX +N113=Evergreen Fund;EVGRX +N114=Evergreen Global R.E. Fund;EGLRX +N115=Evergreen Total Return Fund;EVTRX +N116=Fam Value Fund;FAMVX +N117=Federal Capital Appreciation Fund;FEDEX +N118=Federated Amer Leaders Fd;FALDX +N119=Federated High Income;FHIIX +N120=Federated High Yield Trust;FHYTX +N121=Federated Stock Trust;FSTKX +N122=Federated US Govt Sec;FUSGX +N123=Fid Adv Growth Opport Fund;FAGOX +N124=Fid Advisor High Income;FAHYX +N125=Fid Advisory Overseas Fund;FAERX +N126=Fid Asset Manager;FASMX +N127=Fid Asset Manager;FASIX +N128=Fid Asset Mng Growth;FASGX +N129=Fid Balanced Fund;FBALX +N130=Fid Blue Chip Growth Fund;FBGRX +N131=Fid Cal Tax Free High Yield;FCTFX +N132=Fid Cal Tax Free Insur Port;FCXIX +N133=Fid Canada Fund;FICDX +N134=Fid Capital Appreciation;FDCAX +N135=Fid Congress Street Fund;CNGRX +N136=Fid Contra Fund;FCNTX +N137=Fid Conv Security Fund;FCVSX +N138=Fid Destiny Fund;FDESX +N139=Fid Destiny II Port;FDETX +N140=Fid Disciplined Equity Fund;FDEQX +N141=Fid Diversified Intl;FDIVX +N142=Fid Dividend Growth Fund;FDGFX +N143=Fid Emerging Growth Fund;FDEGX +N144=Fid Emerging Markets;FEMKX +N145=Fid Equity Income;FEQIX +N146=Fid Equity Income II Fund;FEQTX +N147=Fid Euro Cap Appreciation;FECAX +N148=Fid Europe Fund;FIEUX +N149=Fid Exchange Fund;FDLEX +N150=Fid Export Fund;FEXPX +N151=Fid Fifty Fund;FFTYX +N152=Fid Freedom;FDFFX +N153=Fid Global Balance;FGBLX +N154=Fid Global Bond Fund;FGBDX +N155=Fid GNMA Portfolio;FGMNX +N156=Fid Government Security Fund;FGOVX +N157=Fid Growth & Income;FGRIX +N158=Fid Growth Co Fund;FDGRX +N159=Fid High Income Fund;FAGIX +N160=Fid High Yield Fund;FHIGX +N161=Fid Int'l Growth & Income Fund;FIGRX +N162=Fid Int'l Value Fund;FIVFX +N163=Fid Intermediate Bond Fund;FTHRX +N164=Fid Investment Grade Bond Fund;FBNDX +N165=Fid Japan Fund;FJAPX +N166=Fid Latin America Fund;FLATX +N167=Fid Low-Priced Stock Fund;FLPSX +N168=Fid Magellan;FMAGX +N169=Fid Midcap Stocks;FMCSX +N170=Fid Mortgage Security Fund;FMSFX +N171=Fid Muni Tr Ins Tax Free;FMUIX +N172=Fid Municipal Bond Fund;FMBDX +N173=Fid New Markets Income;FNMIX +N174=Fid New Millenium Fund;FMILX +N175=Fid NY Tax Free High Yield Fund;FNTIX +N176=Fid OTC;FOCPX +N177=Fid Overseas;FOSFX +N178=Fid Pacific-basin Fund;FPBFX +N179=Fid Puritan;FPURX +N180=Fid Real Estate Investment Fund;FRESX +N181=Fid Retired Mm Port;FRTXX +N182=Fid SE Asia Fumd;FSEAX +N183=Fid Sel Air Transport;FSAIX +N184=Fid Sel Amer Gold;FSAGX +N185=Fid Sel Automotive Prt;FSAVX +N186=Fid Sel Biotech Port;FBIOX +N187=Fid Sel Bkrge & Inv Mg;FSLBX +N188=Fid Sel Broadcast;FBMPX +N189=Fid Sel Capital Goods;FSCGX +N190=Fid Sel Chemical Port;FSCHX +N191=Fid Sel Computers;FDCPX +N192=Fid Sel Consumer Products;FSCPX +N193=Fid Sel Develop Community;FSDCX +N194=Fid Sel Electronics Port;FSELX +N195=Fid Sel Energy;FSENX +N196=Fid Sel Energy Service;FSESX +N197=Fid Sel Environmental Port;FSLEX +N198=Fid Sel Food & Agric;FDFAX +N199=Fid Sel Health Care;FSPHX +N200=Fid Sel Housing Port;FSHOX +N201=Fid Sel Industrial Prt;FSDPX +N202=Fid Sel Leisure & Ent;FDLSX +N203=Fid Sel Medic Delivery;FSHCX +N204=Fid Sel Natural Gas;FSNGX +N205=Fid Sel Paper & Forest;FSPFX +N206=Fid Sel Port Defense;FSDAX +N207=Fid Sel Port Financial Services;FIDSX +N208=Fid Sel Port Technolgy;FSPTX +N209=Fid Sel Port Utilities;FSUTX +N210=Fid Sel Prec Mtl & Minerals;FDPMX +N211=Fid Sel Prop & Casul Insur;FSPCX +N212=Fid Sel Regional Banks;FSRBX +N213=Fid Sel Retail;FSRPX +N214=Fid Sel S & L Port;FSVLX +N215=Fid Sel Software;FSCSX +N216=Fid Sel Telecommunicatns Port;FSTCX +N217=Fid Sel Transport Port;FSRFX +N218=Fid Short Term World Income;FSHWX +N219=Fid Short-Term Bond Port;FSHBX +N220=Fid Short-Term Gov't Bond Port;FSTGX +N221=Fid Small Cap Stock Fund;FDSCX +N222=Fid Spart Inv Grade;FSIBX +N223=Fid Spart Long Term Gov;SLTGX +N224=Fid Spart Muni Income;FSMIX +N225=Fid Spart Short Term Muni;FSTFX +N226=Fid Spartan Govt Income Fund;SPGVX +N227=Fid Specialty Situation;FSLSX +N228=Fid Stock Selector Fund;FDSSX +N229=Fid Trend Fund;FTRNX +N230=Fid Utility Income Fund;FIUIX +N231=Fid Worldwide Fund;FWWFX +N232=Fidelity Fund;FFIDX +N233=Fidelity Hong Kong China Fund;FHKCX +N234=Fidelity Japan Small Co;FJSCX +N235=Fidelity Limited Term Muni;FLTMX +N236=First Investors Tax Exempt Fund;FITAX +N237=Flex Fund Short Term Global Income;FLGIX +N238=Founder Discovery Mutual Fund;FDISX +N239=Founder Worldwide Growth;FWWGX +N240=Founders Frontier Fund Inc.;FOUNX +N241=Founders Growth Fund;FRGRX +N242=Founders Passport Fund;FPSSX +N243=Founders Special Fund;FRSPX +N244=Frank/Temp German Govt Bond;HGGBX +N245=Frank/Templ Global Curr;ICPGX +N246=Franklin Dynatech Fund;FKDNX +N247=Franklin Equity Fund;FKREX +N248=Franklin Federal Tax Free Income Fund;FKTIX +N249=Franklin Gold Fund;FKRCX +N250=Franklin US Govt Secs Fd;FKUSX +N251=Franklin Utility Fund;FKUTX +N252=Franklin Valuemark;AGEFX +N253=Franklin Valuemark Income Sec;FKINX +N254=Fremont Global Fund;FMAFX +N255=Gabelli Asset Fund;GABAX +N256=Gabelli Global Telecommunications;GABTX +N257=Gabelli Growth Fund;GABGX +N258=Gabelli Small Cap Growth Fund;GABSX +N259=Gabelli Value Fund;GABVX +N260=Gateway Index Plus Fund;GATEX +N261=GE Savings & Security Long Term;GESSX +N262=GE Savings Security Program;GESLX +N263=Gintel Erisa Fund;GINTX +N264=Gintel Fund;GINLX +N265=Goldman Sachs Smallcap Equity Fund;GSSMX +N266=Govett Smaller Cos Fund;GSCQX +N267=Gradison Established Growth Fund;GETGX +N268=Greenspring Fund;GRSPX +N269=GT Global America Growth Fund;GTAGX +N270=GT Global Bond Fund;GSIAX +N271=GT Global Emerging Mkt;GTEMX +N272=GT Global Europe Growth Fund;GTGEX +N273=GT Global Gov't Income Fund;GGINX +N274=GT Global Growth & Income Fund;GAGIX +N275=GT Global Health Care Fund;GGHCX +N276=GT Global Int'l Growth Fund;GINGX +N277=GT Global Japan Growth Fund;GJGRX +N278=GT Global Pacific Growth Fund;GTPAX +N279=GT Global Worldwide Growth Fund;GTWGX +N280=Guiness Flight China & HK;GFCHX +N281=Harbor Intl Fund;HAINX +N282=Hartwell Growth Fund;HRGRX +N283=Heartland Small Cap Cont Fund;HRSMX +N284=Heartland Value;HRTVX +N285=Hotchkis & Wiley Intl;HWINX +N286=Hotchkis & Wiley Low Duration;HWLDX +N287=Hotchkis & Wiley Total Return;HWTRX +N288=IAI Apollo Fund;IAAPX +N289=IAI Emerging Growth Fund;IAEGX +N290=IAI Growth & Income Fund;IASKX +N291=IAI Intl Fun;IAINX +N292=IAI Regional Fund;IARGX +N293=IDS Bond Fund;INBNX +N294=IDS Discovery Fund;INDYX +N295=IDS Equity Plus Fund;INVPX +N296=IDS Extra Income Fund;INEAX +N297=IDS Growth Fund;INIDX +N298=IDS Intl Fund;INIFX +N299=IDS Managed Retirement;IMRFX +N300=IDS Mutual Fund;INMUX +N301=IDS New Dimensions Fund;INNDX +N302=IDS Progressive Fund;INPRX +N303=IDS Selective Fund;INSEX +N304=IDS Stock Fund;INSTX +N305=IDS Strategy Aggressive;INAGX +N306=IDS Tax-Exempt Bond Fund;INTAX +N307=IDS Utilities Income Fund;INUTX +N308=Invesco Dynamics;FIDYX +N309=Invesco Emerging Growth Fund;FIEGX +N310=Invesco Financial Services;FSFSX +N311=Invesco Growth Fund;FLRFX +N312=Invesco Income Fund;FBDSX +N313=Invesco Income Hi Yield;FHYPX +N314=Invesco Income US Govt Security;FBDGX +N315=Invesco Industrial Income Fund;FIIIX +N316=Invesco International European;FEURX +N317=Invesco Intl Growth;FSIGX +N318=Invesco Intl Pacific Basin;FPBSX +N319=Invesco Strategic Energy;FSTEX +N320=Invesco Strategic Gold;FGLDX +N321=Invesco Strategic Health;FHLSX +N322=Invesco Strategic Leisure;FLISX +N323=Invesco Strategic Technology;FTCHX +N324=Invesco Strategic Utilities;FSTUX +N325=Invesco Tax Free Income;FTIFX +N326=Invesco Value Inter Bond Fund;FIGBX +N327=Invesco Value Total Return;FSFLX +N328=Invesco World Wide Communication;ISWCX +N329=Investco Environment;FSEVX +N330=Investco Multi Asset;IMABX +N331=Ivy Growth Fund;IVYFX +N332=Ivy Int'l Fund;IVINX +N333=Janus Enterprise;JAENX +N334=Janus Flex Income;JAFIX +N335=Janus Fund;JANSX +N336=Janus Growth & Income;JAGIX +N337=Janus Mercury Fund;JAMRX +N338=Janus Olympus Fund;JAOLX +N339=Janus Overseas;JAOSX +N340=Janus Twenty Fund;JAVLX +N341=Janus Venture Fund;JAVTX +N342=Janus Worldwide;JAWWX +N343=John Handcock World Fund;JHGRX +N344=Kaufman Fund;KAUFX +N345=Kemper Growth Fund];KGRAX +N346=Kemper Inv High Yield;KHYAX +N347=Keystone Balance Fund;KKONX +N348=Keystone Cust Fund Series S-4;KSFOX +N349=Keystone Diversified Bond;KBTWX +N350=Keystone Growth & Income;KSONX +N351=Keystone High Income;KBFOX +N352=Keystone Mid Cap Growth Fund;KSTHX +N353=Keystone Precious Metals Hldgs;KSPMX +N354=Keystone Quality Bond Fund;KBONX +N355=Keystone Strategic Growth Fund;KKTWX +N356=Keystone Tax Free Fund;KSTFX +N357=Legg Mason Special Investments;LMASX +N358=Legg Mason Value Trust;LMVTX +N359=Lexington Corp Lenders Tres;LEXCX +N360=Lexington Global Fund;LXGLX +N361=Lexington Gold Fund Inc;LEXMX +N362=Lexington Ramirez Global Incom;LEBDX +N363=Lexington Research Fund;LEXRX +N364=Lexington Strat Silver Fund;STSLX +N365=Lexington Strategic Investment;STIVX +N366=Lexington World Wide Emerging Markets;LEXGX +N367=Liberty Muni Security Fund;LMSFX +N368=Lindner Bulwark Inc;LDNBX +N369=Lindner Dividend Fund;LDDVX +N370=Lindner Fund;LDNRX +N371=Lord Ab Bond Deb;LBNDX +N372=Lord Ab Dev Growth Fund;LAGWX +N373=Lord Ab Govt Security Fd;LAGVX +N374=Lord Ab Value Appreciation;LAVLX +N375=Lord Abbett Affiliated Fund;LAFFX +N376=M Lynch Amer Inc Cl D;MDAMX +N377=M Lynch Americus;MBAMX +N378=M Lynch Asset Growth Cl B;MBAGX +N379=M Lynch Asset Income Cl B;MBASX +N380=M Lynch Basic Value Cl B;MBAZX +N381=M Lynch Basic Value;MBBAX +N382=M Lynch Bond Fund I& R Cl C;MCGOX +N383=M Lynch Cap Fund Cl B;MBCPX +N384=M Lynch Dev Cap Markets;MBDCX +N385=M Lynch E Africa Cl B;MBAFX +N386=M Lynch Euro Fund Cl B;MBEFX +N387=M Lynch Funds For Instit;MLTXX +N388=M Lynch Glb Cv Fund Cl B;MBGVX +N389=M Lynch Glob Util Cl B;MBGUX +N390=M Lynch Global Alloc Cl B;MBLOX +N391=M Lynch Global Bond I & R Cl B;MBGOX +N392=M Lynch Global Holdings Cl B;MBHDX +N393=M Lynch Global Res Tr Cl B;MBGRX +N394=M Lynch Global Small Cap Cl B;MBGCX +N395=M Lynch Growth Fd IRA Cl B;MBQRX +N396=M Lynch Growth Fund Cl B;MBFGX +N397=M Lynch Growth Inv & Retirement;MDQRX +N398=M Lynch Healthcare Cl B;MBHCX +N399=M Lynch Inst Interm Cl A;MLMEX +N400=M Lynch Intl Eq Fund Cl B;MBIEX +N401=M Lynch Latin Amer Cl B;MBLTX +N402=M Lynch Pacific Fd Cl B;MBPCX +N403=M Lynch Short Term Glb Cl B;MBSIX +N404=M Lynch Spec Value Cl B;MBSPX +N405=M Lynch Strat Div Cl B;MBDVX +N406=M Lynch Tech Fund Cl B;MBTCX +N407=M Lynch Tomorrow Fund Cl B;MBTWX +N408=M Lynch Util Income Cl B;MBUTX +N409=M Lynch Value Fund Cl B;MDSPX +N410=Managers Intermediate Mortgage;MGIGX +N411=Mas Pooled Intl Equity;MPIEX +N412=Mathers Fund;MATRX +N413=Merger Fund;MERFX +N414=Merrill Basic Value;MABAX +N415=Merrill Capital;MACPX +N416=Merrill Corp High Income;MAHIX +N417=Merrill Federal Securities;MBFSX +N418=Merrill Growth;MAQRX +N419=Merrill International Holdings;MAHDX +N420=Merrill Investment Grade;MBHQX +N421=Merrill L Phoenix Fund;MBPNX +N422=Merrill L Tech Fund;MATCX +N423=Merrill Lynch Dragon Fund;MBDRX +N424=Merrill Pacific;MAPCX +N425=Merrill Special Value;MASPX +N426=MFS Gov't Mortgage Fund;MGMTX +N427=MFS High Income Fund;MHITX +N428=Midas Fund Inc;EMGSX +N429=Monetta Fund Inc;MONTX +N430=Monitrend Gold Fund;MNTGX +N431=Montgomery Asset Allocation;MNAAX +N432=Montgomery Emerging Markets;MNEMX +N433=Montgomery Equity Income;MNEIX +N434=Montgomery Global Commun Fund;MNGCX +N435=Montgomery Global Opportunity;MNGOX +N436=Montgomery Growth;MNGFX +N437=Montgomery Intl Small Cap;MNISX +N438=Montgomery Micro Cap;MNMCX +N439=Montgomery Small Cap Fund;MNSCX +N440=Mutual Beacon Fund Inc;BEGRX +N441=Mutual Discovery Fund;MDISX +N442=Mutual Qualified Income Fund;MQIFX +N443=Mutual Shares Corp;MUTHX +N444=Navellier Aggressive Small Cap;NASCX +N445=Neub & Ber Partners;NPRTX +N446=Neub & Ber Select Sectors;NBSSX +N447=Neub Guardian;NGUAX +N448=Neub Ltd Maturity Bond;NLMBX +N449=Neub Manhattan;NMANX +N450=New USA Fund;NUSFX +N451=Newberger & Bermon Manttatn TR;NBMTX +N452=Nicholas Fund;NICSX +N453=Nicholas II Fund;NCTWX +N454=Nicholas Income Fund;NCINX +N455=Nomura Pacific Basin Fund;NPBFX +N456=Northeast Investors Growth Fund;NTHFX +N457=Northeast Investors Trust Fund;NTHEX +N458=Oakmark;OAKMX +N459=Oakmark Intl Fd;OAKIX +N460=Oberweis Emerging Grwth Fund;OBEGX +N461=Oppen Main St Income & Growth;MSIGX +N462=Oppenheimer Glabal A Fund;OPPAX +N463=Oppenheimer Gold & Spec Minerals;OPGSX +N464=Pacific Horizon Agressive Fund;PHAGX +N465=Pax World Fund;PAXWX +N466=Pbhg Emerging Growth;PBEGX +N467=Pbhg Fund;PBHGX +N468=PBHG Large Cap Growth;PBHLX +N469=PBHG Select Equity;PBHEX +N470=PBHG Tech & Communications Fund;PBTCX +N471=Penn Mutual Fund;PENNX +N472=Penn Square Fund;PESQX +N473=Pimco Adv Growth Fund;PGWCX +N474=Pimco Adv Intl Fund;PILCX +N475=Pimco Foreign;PFORX +N476=Piper Jaffray Institutional Gvt Income;PJIGX +N477=Pra Real Estate Fund;PRREX +N478=Primco Adv Oppt Cl C;POPCX +N479=Prud Global Utility Fund;GLUAX +N480=Prudential Interm Global Income Fund;PBIGX +N481=Put Convertible Fund;PCONX +N482=Put Diversified Income Trust;PDINX +N483=Put Growth & Income Fund;PGRWX +N484=Put Income Fund;PINCX +N485=Put Intl Equities;PEQUX +N486=Put Investors Fund;PINVX +N487=Put Natural Resources Fund;EBERX +N488=Put Option Income II Fund;PMITX +N489=Put OTC Emerging Growth Fund;POEGX +N490=Put Vista Basic Value Fund;PVISX +N491=Put Voyager Fund;PVOYX +N492=Putnam Cali Tax Ex Inc;PCTEX +N493=Putnam Health Sciences;PHSTX +N494=Putnam High Yield Tr B;PHBBX +N495=Putnam High Yield Tr A;PHIGX +N496=Putnam Tax Ex Income;PTAEX +N497=Quest For Value Fund;QFVFX +N498=Reich & Tang Equity Fund;RCHTX +N499=RIM Balanced PT;RIMBX +N500=RIM Small/Mid Cap Equity;RIMSX +N501=Rob St Contrarian Fund;RSCOX +N502=Rob St Dev Countries Fund;RSDCX +N503=Rob St Emerging Growth Fund;RSEGX +N504=Rob St Value Plus Fund;RSVPX +N505=Robertson Stephens Info Age;RSIFX +N506=Royce Mico Cap;RYOTX +N507=Royce Value Fund;RYVFX +N508=Rushmore Amer Gas Index;GASFX +N509=Ryder Juno Fund;RYJUX +N510=Rydex Nova Port;RYNVX +N511=Rydex OTC Fund;RYOCX +N512=Rydex Precious Metal Fund;RYPMX +N513=Rydex Ursa Fund;RYURX +N514=Rydex US Gov Bond;RYGBX +N515=Safeco Equity Fund;SAFQX +N516=Safeco Gov't Securities Fund;SFUSX +N517=Safeco Growth Fund;SAFGX +N518=Safeco Income Fund Inc;SAFIX +N519=Safeco Municipal Bond Fund;SFCOX +N520=SBS Strategic Investing;SESIX +N521=Schroder Capital Us Equity;SUSEX +N522=Schroder Intl Equity;SCIEX +N523=Schwab 1000 Fund;SNXFX +N524=Schwab Intl Index Fund;SWINX +N525=Scud CA Tax Free Fund;SCTFX +N526=Scud Capital Growth Fund;SCDUX +N527=Scud Development Fund;SCDVX +N528=Scud Emerg Mrkt Income;SCEMX +N529=Scud Global Bond Fund;SSTGX +N530=Scud Global Fund;SCOBX +N531=Scud Gnma Fund;SGMSX +N532=Scud Gold Fund;SCGDX +N533=Scud Growth & Income Fund;SCDGX +N534=Scud Hi Yield Tax Free;SHYTX +N535=Scud Income Fund Inc;SCSBX +N536=Scud Intl Bond Fund;SCIBX +N537=Scud Intl Fund;SCINX +N538=Scud Japan Fund;SJPNX +N539=Scud Med Term Tax Free;SCMTX +N540=Scud Mgt Municipal Fund;SCMBX +N541=Scud Quality Growth Fund;SCQGX +N542=Scud Short Term Bond Fund;SCSTX +N543=Scud US Tres Money Fund;SCGXX +N544=Scud Zero Coupon 2000 Target;SGZTX +N545=Scudder Global Discovery Fund;SGSCX +N546=Scudder Greater Europe Group;SCGEX +N547=Scudder Latin America Fund;SLAFX +N548=Scudder Pacific Opportunity;SCOPX +N549=Scudder Value Fund;SCVAX +N550=SEI Index S&P 500;TRQIX +N551=SEI Inst Managed Trust Small Cap Growth;SSCGX +N552=Select Special Shares;SLSSX +N553=Selected Amer Shares;SLASX +N554=Seligman Comm & Info Class D;SLMDX +N555=Seligman Frontier;SLFRX +N556=Sequoia Fund Inc;SEQUX +N557=Shearson SP High Income;SHIBX +N558=Sit Growth Fund Incorp;NBNGX +N559=Sit Small CAp Growth Fund;SSMGX +N560=Smith Barn Managed Growth Fund;SBMGX +N561=Sogen International;SGENX +N562=Spartan High Income Mutual Fund;SPHIX +N563=State Farm Growth Fund;STFGX +N564=State Street Research Govt Income Fund;SSGIX +N565=Stein Roe Capital Fund;SRFCX +N566=Stein Roe Growth Fund;SRFSX +N567=Stein Roe Hi Yield Muni;SRMFX +N568=Stein Roe Special Fund;SRSPX +N569=Stratton Growth Fund;STRGX +N570=Stratton Monthly Dividend;STMDX +N571=Strong Asia Pacific Fund;SASPX +N572=Strong Asset Allocation;STAAX +N573=Strong Common Stock Fund;STCSX +N574=Strong Corporate Bond Fund Inc;STCBX +N575=Strong Discovery Fund;STDIX +N576=Strong Government Securities;STVSX +N577=Strong Growth;SGROX +N578=Strong High Yield Fund;SHYLX +N579=Strong Intl Bond Fund;SIBUX +N580=Strong Intl Stock;STISX +N581=Strong Municipal Advantage Fund;SMUAX +N582=Strong Opportunity Fund;SOPFX +N583=Strong Short Term Bond;SSTBX +N584=Strong Short Term Glbl Bond;STGBX +N585=Strong Total Return Fund;STRFX +N586=T Price Rowe Capital Apprec Fund;PRWCX +N587=T Price Rowe Income Fund;PRCIX +N588=T Price Rowe Int'l Stock Fund;PRITX +N589=T Price Rowe New Era Fund;PRNEX +N590=T Price Rowe New Horizon Fund;PRNHX +N591=T Price Rowe Tax Free Hi Yield;PRFHX +N592=T Rowe Global Government Bond;RPGGX +N593=T Rowe Growth Fund;TRSGX +N594=T Rowe Income Fund;PRSIX +N595=T Rowe Japan;PRJPX +N596=T Rowe Latin Amer;PRLAX +N597=T Rowe Personal Strat;TRPBX +N598=T Rowe Price Equity Fund;PRFDX +N599=T Rowe Price Equity;PREIX +N600=T Rowe Price European Stock Fund;PRESX +N601=T Rowe Price High Yield Bond Fund;PRHYX +N602=T Rowe Price Int'l Bond Fund;RPIBX +N603=T Rowe Price Int'l Discovery Fund;PRIDX +N604=T Rowe Price New Amer Growth;PRWAX +N605=T Rowe Price NY Tax Free Bond Fund;PRNYX +N606=T Rowe Price OTC Fund;OTCFX +N607=T Rowe Price Science & Technology;PRSCX +N608=T Rowe Price Small Cap Value;PRSVX +N609=T Rowe Price Tax Free Short Interest;PRFSX +N610=T Rowe Price US Treasury Long Term;PRULX +N611=T Rowe Short Term Global Income;RPSGX +N612=Temp Foreign Equity Series;TFEQX +N613=Templeton Developing Market;TEDMX +N614=Templeton Foreign Fund;TEMFX +N615=Templeton Global Opport Tr;TEGOX +N616=Templeton Growth Fund;TEPLX +N617=Templeton Intl Stock Fund;FINEX +N618=Templeton Real Estate Securities;TEMRX +N619=Templeton World Fund;TEMWX +N620=TR Price Spec Growth Fund;PRSGX +N621=TR Price Spec Income Fund;RPSIX +N622=Trowe Price New Asia;PRASX +N623=Tweedy Browne Global Value;TBGVX +N624=United Bond Fund;UNBDX +N625=United Service Goldshares;USERX +N626=United Service Real Estate;UNREX +N627=United Service World Gold Fund;UNWPX +N628=USAA Agressive Growth Fund;USAUX +N629=USAA Capital Growth Fund;USAAX +N630=USAA Cornerstone Strat Fund;USCRX +N631=USAA Gold Fund;USAGX +N632=USAA Investment Intl;USIFX +N633=USAA Mutual Income Fund;USAIX +N634=USAA Tax Exempt Intermediate Term;USATX +N635=USAA Tax Exempt Short Term;USSTX +N636=Value Line Aggressive Income Fund;VAGIX +N637=Value Line Convertible Fd Inc;VALCX +N638=Value Line Fund;VLIFX +N639=Value Line High Yield Port;VLHYX +N640=Value Line Income Fund;VALIX +N641=Value Line Leveraged Growth;VALLX +N642=Value Line Special Fund;VALSX +N643=Value Line US Gov't Securities Fund;VALBX +N644=Van Eck Fund Intl Invest;INIVX +N645=Van Eck Gold Resources Fund;GRFRX +N646=Van Kampen Merriott US Govt Fund;VKMGX +N647=Vang Bond Market Fund;VBMFX +N648=Vang Converible Security Fund;VCVSX +N649=Vang Equity Income Port;VEIPX +N650=Vang Explorer Fund;VEXPX +N651=Vang GNMA Port;VFIIX +N652=Vang Gold & Precious Metal;VGPMX +N653=Vang High Yield Corp;VWEHX +N654=Vang Hor Capital Oppt;VHCOX +N655=Vang Horizon Aggressive Growth;VHAGX +N656=Vang Horz Glb Assets;VHAAX +N657=Vang Horz Glb Equity;VHGEX +N658=Vang Index 500 Trust;VFINX +N659=Vang Index Growth Fund;VIGRX +N660=Vang Index Trust Extended Market Fund;VEXMX +N661=Vang Index Value Fund;VIVAX +N662=Vang Intl Eq Emerging;VEIEX +N663=Vang Intl Index Europe;VEURX +N664=Vang Intl Index Pacific;VPACX +N665=Vang Life Cons Growth;VSCGX +N666=Vang Life Income;VASIX +N667=Vang Life Mod Pt;VSMGX +N668=Vang Morgan;VMRGX +N669=Vang Municipal Bond Fund;VWAHX +N670=Vang Preferred Stock Fund;VQIIX +N671=Vang Primecap;VPMCX +N672=Vang Quantitative;VQNPX +N673=Vang Short Term Corporate Fund;VFSTX +N674=Vang Short Term Gov't Bond Fund;VSGBX +N675=Vang Smallcap Stock Fund;NAESX +N676=Vang Special Energy Port;VGENX +N677=Vang Special Health Port;VGHCX +N678=Vang Star Fund;VGSTX +N679=Vang TCA Intl;VTRIX +N680=Vang TCF USA Fund;VTRSX +N681=Vang US Treasury Bond Port;VUSTX +N682=Vang Utility Income;VGSUX +N683=Vang Warwick Intermed Fund;VWITX +N684=Vang Warwick Short Fund;VWSTX +N685=Vang Wellesley;VWINX +N686=Vang Wellington Fund;VWELX +N687=Vang Westminster Fixed Income Fund;VWESX +N688=Vang Windsor Fund;VWNDX +N689=Vang Windsor II;VWNFX +N690=Vang World Fd Int'l Grwth;VWIGX +N691=Vang World Fund US Growth Port;VWUSX +N692=Vanguard Asset Allocation Strat;VAAPX +N693=Vanguard Life Growth;VASGX +N694=Vista Capital Growth Fund;VCAGX +N695=Von Wagoner Emerging Growth;VWEGX +N696=Von Wagoner Mid Cap Fund;VWMDX +N697=Vontobel Europacific;VNEPX +N698=Vontobel US Value;VUSVX +N699=Warburg Pin Gr & Income;RBEGX +N700=Warburg Pincus Emerging Growth;CUEGX +N701=Warburg Pincus Global Fixed Income;CGFIX +N702=Warburg Pincus Intl Equity;CUIEX +N703=Warburg Pincus Japan;WPJPX +N704=Wasatch Aggressive Equity Fund;WAAEX +N705=Wasatch Growth Fund;WGROX +N706=Wasatch Micro-Cap;WMICX +N707=Wasatch Mid-Cap Fund;WAMCX +N708=Wayne Hummer Income Fund;WHICX +N709=Weiss, Peck & Greer Tudor Fund;TUDRX +N710=World\Fds Vontobel US Value;VUSGX +N711=WPG Govt Securities;WPGVX +N712=WPG Growth & Income;WPGFX +N713=Wright Dutch Ntl Fund;WENLX +N714=Wright Equity Mex Ntl;WEMEX +N715=Wright Equity TR Hong Kong;WEHKX + diff --git a/http/HTTP.PLG b/http/HTTP.PLG new file mode 100644 index 0000000..2a97a2a --- /dev/null +++ b/http/HTTP.PLG @@ -0,0 +1,47 @@ + + +
+

Build Log

+

+--------------------Configuration: http - Win32 Debug-------------------- +

+

Command Lines

+Creating command line "rc.exe /l 0x409 /fo"msvcobj/http.res" /d "_DEBUG" "D:\work\HTTP\http.rc"" +Creating temporary file "C:\TEMP\RSP1E.tmp" with contents +[ +/nologo /Zp8 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/http.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"D:\work\fund\html.cpp" +"D:\work\HTTP\mainfrm.cpp" +"D:\work\HTTP\Mainpage.cpp" +] +Creating command line "cl.exe @C:\TEMP\RSP1E.tmp" +Creating temporary file "C:\TEMP\RSP1F.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo /subsystem:windows /incremental:no /pdb:"msvcobj/http.pdb" /debug /machine:I386 /out:"msvcobj/http.exe" /pdbtype:sept +.\msvcobj\html.obj +.\msvcobj\mainfrm.obj +.\msvcobj\Mainpage.obj +.\msvcobj\http.res +..\exe\mscommon.lib +..\exe\msfileio.lib +..\exe\mssocket.lib +..\exe\statbar.lib +] +Creating command line "link.exe @C:\TEMP\RSP1F.tmp" +

Output Window

+Compiling resources... +Compiling... +html.cpp +mainfrm.cpp +Mainpage.cpp +Linking... +LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /INCREMENTAL:NO specification + Creating library msvcobj/http.lib and object msvcobj/http.exp + + + +

Results

+http.exe - 0 error(s), 1 warning(s) +
+ + diff --git a/http/HTTP.RC b/http/HTTP.RC new file mode 100644 index 0000000..3a6bdfa --- /dev/null +++ b/http/HTTP.RC @@ -0,0 +1,34 @@ +#include +#include + +mainMenu MENU +{ + POPUP "&File" + { + MENUITEM "&Open\tCtrl+O",HTTPMENU_FILE_OPEN + MENUITEM "&New\tCtrl+N", HTTPMENU_FILE_NEW + MENUITEM SEPARATOR + MENUITEM "&Save", HTTPMENU_FILE_SAVE + MENUITEM "Save &As...", HTTPMENU_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "E&xit", HTTPMENU_FILE_EXIT + } + POPUP "&Help" + { + MENUITEM "&Contents", IDM_HELP_CONTENTS + MENUITEM "&Search", IDM_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&About" IDM_HELP_ABOUT + } +} + +Batch DIALOG 6, 15, 293, 159 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Batch Setup" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 240, 2, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 240, 16, 50, 14 + LISTBOX IDC_LISTBOX1, 4, 41, 235, 115, LBS_STANDARD +} + diff --git a/http/HTTP.RES b/http/HTTP.RES new file mode 100644 index 0000000..633ce04 Binary files /dev/null and b/http/HTTP.RES differ diff --git a/http/HTTP.RWS b/http/HTTP.RWS new file mode 100644 index 0000000..ab669a4 Binary files /dev/null and b/http/HTTP.RWS differ diff --git a/http/HTTP.ZIP b/http/HTTP.ZIP new file mode 100644 index 0000000..ceb9ad4 Binary files /dev/null and b/http/HTTP.ZIP differ diff --git a/http/HTTP.~DE b/http/HTTP.~DE new file mode 100644 index 0000000..c2359fe Binary files /dev/null and b/http/HTTP.~DE differ diff --git a/http/HTTP.~H b/http/HTTP.~H new file mode 100644 index 0000000..b1f2f43 --- /dev/null +++ b/http/HTTP.~H @@ -0,0 +1,19 @@ +#ifndef _HTTP_HTTP_H_ +#define _HTTP_HTTP_H_ + +#define HTTPMENU_FILE_OPEN 10000 +#define HTTPMENU_FILE_NEW 10001 +#define HTTPMENU_FILE_SAVE 10002 +#define HTTPMENU_FILE_SAVEAS 10003 +#define HTTPMENU_FILE_EXIT 10004 + +#define IDM_CASCADE 30 +#define IDM_TILE 31 +#define IDM_ARRANGE 32 +#define IDM_CLOSEALL 33 +#define IDM_MINIMIZEALL 34 +#define IDM_RESTOREALL 35 +#define IDM_HELP_CONTENTS 36 +#define IDM_HELP_SEARCH 37 +#define IDM_HELP_ABOUT 38 +#endif diff --git a/http/HTTP.~RC b/http/HTTP.~RC new file mode 100644 index 0000000..4976d72 --- /dev/null +++ b/http/HTTP.~RC @@ -0,0 +1,23 @@ +#include +#include + +mainMenu MENU +{ + POPUP "&File" + { + MENUITEM "&Open\tCtrl+O",HTTPMENU_FILE_OPEN + MENUITEM "&New\tCtrl+N", HTTPMENU_FILE_NEW + MENUITEM SEPARATOR + MENUITEM "&Save", HTTPMENU_FILE_SAVE + MENUITEM "Save &As...", HTTPMENU_FILE_SAVEAS + MENUITEM SEPARATOR + MENUITEM "E&xit", HTTPMENU_FILE_EXIT + } + POPUP "&Help" + { + MENUITEM "&Contents", IDM_HELP_CONTENTS + MENUITEM "&Search", IDM_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&About" IDM_HELP_ABOUT + } +} diff --git a/http/Http.mak b/http/Http.mak new file mode 100644 index 0000000..316fa89 --- /dev/null +++ b/http/Http.mak @@ -0,0 +1,447 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=http - Win32 Debug +!MESSAGE No configuration specified. Defaulting to http - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "http - Win32 Release" && "$(CFG)" != "http - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Http.mak" CFG="http - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "http - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "http - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "http - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "http - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Http.exe" + +CLEAN : + -@erase "$(INTDIR)\Http.res" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainfrm.obj" + -@erase "$(INTDIR)\Mainpage.obj" + -@erase "$(OUTDIR)\Http.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Http.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Http.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Http.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Http.pdb" /machine:I386 /out:"$(OUTDIR)/Http.exe" +LINK32_OBJS= \ + "$(INTDIR)\Http.res" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainfrm.obj" \ + "$(INTDIR)\Mainpage.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" \ + "..\Exe\statbar.lib" + +"$(OUTDIR)\Http.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\getpage.exe" + +CLEAN : + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainfrm.obj" + -@erase "$(INTDIR)\Mainpage.obj" + -@erase "$(OUTDIR)\getpage.pdb" + -@erase "..\exe\getpage.exe" + -@erase "..\exe\getpage.ilk" + -@erase ".\http.res" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo"http.res" /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"http.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Http.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib odbc32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\exe\getpage.exe" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib wsock32.lib odbc32.lib comctl32.lib /nologo\ + /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)/getpage.pdb" /debug\ + /machine:I386 /out:"..\exe\getpage.exe" +LINK32_OBJS= \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainfrm.obj" \ + "$(INTDIR)\Mainpage.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" \ + "..\Exe\statbar.lib" \ + ".\http.res" + +"..\exe\getpage.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "http - Win32 Release" +# Name "http - Win32 Debug" + +!IF "$(CFG)" == "http - Win32 Release" + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "http - Win32 Release" + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mssocket.lib + +!IF "$(CFG)" == "http - Win32 Release" + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "http - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\mdifrm.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\mdifrm.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainpage.cpp +DEP_CPP_MAINP=\ + {$(INCLUDE)}"\.\entry.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\coord.hpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\mdifrm.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\fileio\fileio.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Mainpage.obj" : $(SOURCE) $(DEP_CPP_MAINP) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainfrm.cpp +DEP_CPP_MAINF=\ + {$(INCLUDE)}"\.\http.h"\ + {$(INCLUDE)}"\.\http.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\common\control.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\mdifrm.hpp"\ + {$(INCLUDE)}"\common\menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\common\puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\statbar\popup.hpp"\ + {$(INCLUDE)}"\statbar\statbarx.hpp"\ + {$(INCLUDE)}"\statbar\statmenu.hpp"\ + + +"$(INTDIR)\Mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\statbar.lib + +!IF "$(CFG)" == "http - Win32 Release" + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Http.rc +DEP_RSC_HTTP_=\ + {$(INCLUDE)}"\.\http.h"\ + + +!IF "$(CFG)" == "http - Win32 Release" + + +"$(INTDIR)\Http.res" : $(SOURCE) $(DEP_RSC_HTTP_) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + + +".\http.res" : $(SOURCE) $(DEP_RSC_HTTP_) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/http/MAIN.BAK b/http/MAIN.BAK new file mode 100644 index 0000000..37684ea --- /dev/null +++ b/http/MAIN.BAK @@ -0,0 +1,66 @@ +#ifndef _HTTP_MAIN_HPP_ +#define _HTTP_MAIN_HPP_ +#include + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/http/MAIN.HPP b/http/MAIN.HPP new file mode 100644 index 0000000..37684ea --- /dev/null +++ b/http/MAIN.HPP @@ -0,0 +1,66 @@ +#ifndef _HTTP_MAIN_HPP_ +#define _HTTP_MAIN_HPP_ +#include + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/http/MAINFRM.CPP b/http/MAINFRM.CPP new file mode 100644 index 0000000..500f3bc --- /dev/null +++ b/http/MAINFRM.CPP @@ -0,0 +1,103 @@ +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MainFrame::~MainFrame() +{ + removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &someCallbackData) +{ + postQuitMessage(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::closeHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &someCallbackData) +{ + mStatusBarEx=::new StatusBarEx(*this,getClient(),StatusControlID); + mStatusBarEx.disposition(PointerDisposition::Delete); + mStatusBarEx->setText("Ready"); + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case IDM_CASCADE : + cascade(); + break; + case IDM_TILE : + tile(); + break; + case IDM_ARRANGE : + arrange(); + break; + case IDM_CLOSEALL : + closeAll(); + break; + case IDM_MINIMIZEALL : + minimizeAll(); + break; + case IDM_RESTOREALL : + restoreAll(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void MainFrame::splash(void) +{ +// SplashScreen splashScreen("Splash","Splash",TRUE); +// splashScreen.perform(); +} + +// *** virtuals + +void MainFrame::preRegister(WNDCLASS &wndClass) +{ + wndClass.hbrBackground=(HBRUSH)::GetStockObject(GRAY_BRUSH); +} + +void MainFrame::mdiDestroy(MDIWindow &mdiWindow) +{ +} + +void MainFrame::mdiActivate(MDIWindow &mdiWindow) +{ +} + +void MainFrame::mdiDeactivate(MDIWindow &mdiWindow) +{ +} diff --git a/http/MAINFRM.HPP b/http/MAINFRM.HPP new file mode 100644 index 0000000..2a76c33 --- /dev/null +++ b/http/MAINFRM.HPP @@ -0,0 +1,36 @@ +#ifndef _HTTP_MAINFRAME_HPP_ +#define _HTTP_MAINFRAME_HPP_ +#ifndef _COMMON_MDIFRM_HPP_ +#include +#endif + +class StatusBarEx; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); + void splash(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); +private: + enum {StatusControlID=100}; + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType threadCompletionHandler(CallbackData &someCallbackData); + + Callback mQueryEndSessionHandler; + Callback mCloseHandler; + Callback mCommandHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + SmartPointer mStatusBarEx; +}; +#endif diff --git a/http/MAINPAGE.CPP b/http/MAINPAGE.CPP new file mode 100644 index 0000000..c2fc832 --- /dev/null +++ b/http/MAINPAGE.CPP @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +WORD open(const String &hostName,const String &nameFile); +WORD open(const String &hostName,const String &nameString,const String &saveAs); +WORD makeFileName(String &pathFileName); +BOOL getEntryItems(const String &pathFileName,Block &entryItems); + +Console winConsole; + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + String pathFileName(lpszCmdLine); + Block entryItems; + + if(pathFileName.isNull()) + { + winConsole.writeLine("GETPAGE "); + winConsole.writeLine("Input file is a text file that contains entries in the following format..."); + winConsole.writeLine(" "); + winConsole.writeLine("for example..."); + winConsole.writeLine("www.developer.com http://www.developer.com/reference/foo.htm c:\\developer\\docs\\foo.html"); + winConsole.writeLine("a '#' character located in the first position of any line indicates a comment, the line is ignored."); + winConsole.writeLine("Press ENTER to exit."); + winConsole.read(); + return FALSE; + } + if(!getEntryItems(pathFileName,entryItems)) + { + winConsole.writeLine("Failed to read input file"); + winConsole.writeLine("Press ENTER to exit"); + winConsole.read(); + return FALSE; + } + for(int itemIndex=0;itemIndex=(char*)tempString)ptr--; + pathFileName=(++ptr); + return TRUE; +} + +BOOL getEntryItems(const String &pathFileName,Block &entryItems) +{ + FileIO inFile; + String strLine; + + entryItems.remove(); + inFile.open(pathFileName); + if(!inFile.isOkay())return FALSE; + strLine.reserve(512); + while(inFile.readLine(strLine)) + { + if('#'==*(char*)strLine)continue; + entryItems.insert(&EntryItem(strLine.betweenString(0,' '),strLine.betweenString(' ',' '),strLine.betweenString(' ',0).betweenString(' ',0))); + } + return entryItems.size()?TRUE:FALSE; +} diff --git a/http/MUTUAL.TXT b/http/MUTUAL.TXT new file mode 100644 index 0000000..4087121 --- /dev/null +++ b/http/MUTUAL.TXT @@ -0,0 +1,715 @@ +N1=20th C Balance Investors Fund;TWBIX +N2=20th C Giftrust;TWGTX +N3=20th C Growth;TWCGX +N4=20th C Heritage Inv;TWHIX +N5=20th C Intl Stocks;TWIEX +N6=20th C Select;TWCIX +N7=20th C Ultra;TWCUX +N8=20th C US Govt;TWUSX +N9=20th C Vista;TWCVX +N10=20th Century Intl Emerging Growth;TWEGX +N11=AARP Capital Growth Fund;ACGFX +N12=AARP Global Growth;ARGGX +N13=AARP GNMA & US Treasury Fund;AGNMX +N14=AARP Growth & Income Fund;AGIFX +N15=Acorn Fund Inc;ACRNX +N16=Acorn Intl;ACINX +N17=AIM Aggressive Growth;AAGFX +N18=Aim Charter Fund;CHTRX +N19=Aim Constellation Growth Fund;CSTGX +N20=Aim Convertible Yld Security;AMBLX +N21=AIM Value Fund;AVLFX +N22=Aim Weingarten Equity Fund;WEINX +N23=Alliance Tech Fund;ALTFX +N24=Alliance World Income;AWITX +N25=Alliance Worldwide Privatization;AWPAX +N26=Amer Europacific Growth Funds;AEPGX +N27=Amer Fundamental Investors Fund;ANCFX +N28=Amer Growth Fund Of America;AGTHX +N29=Amer New Perspective;ANWPX +N30=Amer Washington Mutual;AWSHX +N31=American Heritage Fund;AHERX +N32=Artisen Small Cap Fund;ARTSX +N33=ASM Fund;ASMUX +N34=Babson Bond Tr;BBDSX +N35=Babson Enterprise Fund;BABEX +N36=Babson Growth Fund;BABSX +N37=Babson Shadow Stock Fund;SHSTX +N38=Babson Stewart Ivory Intl;BAINX +N39=Babson Value Fund;BVALX +N40=Baron Asset Fund;BARAX +N41=Baron Growth &income Fund;BGINX +N42=Benham Adj Rate Govt Security Fund;BARGX +N43=Benham Equity Growth;BEQGX +N44=Benham European Gov Bond Fund;BEGBX +N45=Benham Glb Natural Resources;BGRIX +N46=Benham GNMA Income Fund;BGNMX +N47=Benham Gold Equity Index Fund;BGEIX +N48=Benham Income & Growth;BIGRX +N49=Benham Target 2000 Fund;BTMTX +N50=Benham Target 2005 Fund;BTFIX +N51=Benham Target 2010 Fund;BTTNX +N52=Benham Target 2015 Fund;BTFTX +N53=Benham Target 2020 Fund;BTTTX +N54=Benham Treasury Note Fund;CPTNX +N55=Benham Util Inc Fund;BULIX +N56=Berger 100 Fund;BEONX +N57=Berger 101 Fund;BEOOX +N58=Berger Small Co Growth Fund;BESCX +N59=Bernstein International Value;SNIVX +N60=Blanchard Flex Tax Free Bond;BTFBX +N61=Blanchard Global Growth;BGGFX +N62=Bramwell Growth Fund;BRGRX +N63=Brandywine Fund;BRWIX +N64=Bull & Bear Global Income;BBGLX +N65=Bull & Bear Gold Investors Fund;BBGIX +N66=Bull & Bear Special Equity Fund;BBSEX +N67=Bull & Bear US & Overseas Fund;BBOSX +N68=California Tax Free Income;CFNTX +N69=Cappiello Rushmore TR Growth Fund;CRGRX +N70=Cappiello Rushmore Tr Emerging Growth;CREGX +N71=Century Shares Trust Fund;CENSX +N72=CGC Intl Equity;TIEUX +N73=CGC Large Cap Growth;TLGUX +N74=CGC Large Cap Value;TLVUX +N75=CGC Small Cap Growth;TSGUX +N76=CGM Capital Development;LOMCX +N77=CGM Mutual Fund;LOMMX +N78=Clipper Fund;CFIMX +N79=Cohen Steers Realty Shares;CSRSX +N80=Colonial Tax Exempt Fund;COLTX +N81=Columbia Growth Fund;CLMBX +N82=Columbia Special Fund Inc.;CLSPX +N83=Crabbe Huson Spec Fund;CHSPX +N84=DFA Continental Small Company;DFCSX +N85=DFA Japanese Small Company;DFJSX +N86=DFA United Kingdom Small Company;DFUKX +N87=Dodge & Cox Stock Fund;DODGX +N88=Drey A Bonds Plus;DRBDX +N89=Drey Asset Allocation Fund;DRAAX +N90=Drey Comstock Cap Value Cl A;DRCVX +N91=Drey Core Value Fund;DCVIX +N92=Drey Fund;DREVX +N93=Drey Global Inv Class B;DGLBX +N94=Drey Growth + Income;DGRIX +N95=Drey Intermediate Tax Exempt Bond;DITEX +N96=Drey Leverage Fund;DRLEX +N97=Drey New Leader Fund;DNLDX +N98=Drey Opportunity Fund;DREQX +N99=Drey Strategic Worldwide;DSWIX +N100=Drey Tax Ex Bond Fund;DRTAX +N101=Drey Third Century;DRTHX +N102=Dreyfus Appreciation;DGAGX +N103=DW American Value Fund;DWIVX +N104=DW Capital Growth Fund;DWCGX +N105=DW Developing Growth Fund;DWDGX +N106=DW Dividend Growth Fund;DWDVX +N107=DW European Growth Fund;DWEGX +N108=DW Pacific Growth Fund;DWPGX +N109=DW Strategist Fund;DWSTX +N110=DW Value Added Fund;DWVAX +N111=DW Worldwide Investor Fund;DWWWX +N112=Eaton Vance High Yield Muni Tr;EVHMX +N113=Evergreen Fund;EVGRX +N114=Evergreen Global R.E. Fund;EGLRX +N115=Evergreen Total Return Fund;EVTRX +N116=Fam Value Fund;FAMVX +N117=Federal Capital Appreciation Fund;FEDEX +N118=Federated Amer Leaders Fd;FALDX +N119=Federated High Income;FHIIX +N120=Federated High Yield Trust;FHYTX +N121=Federated Stock Trust;FSTKX +N122=Federated US Govt Sec;FUSGX +N123=Fid Adv Growth Opport Fund;FAGOX +N124=Fid Advisor High Income;FAHYX +N125=Fid Advisory Overseas Fund;FAERX +N126=Fid Asset Manager;FASMX +N127=Fid Asset Manager;FASIX +N128=Fid Asset Mng Growth;FASGX +N129=Fid Balanced Fund;FBALX +N130=Fid Blue Chip Growth Fund;FBGRX +N131=Fid Cal Tax Free High Yield;FCTFX +N132=Fid Cal Tax Free Insur Port;FCXIX +N133=Fid Canada Fund;FICDX +N134=Fid Capital Appreciation;FDCAX +N135=Fid Congress Street Fund;CNGRX +N136=Fid Contra Fund;FCNTX +N137=Fid Conv Security Fund;FCVSX +N138=Fid Destiny Fund;FDESX +N139=Fid Destiny II Port;FDETX +N140=Fid Disciplined Equity Fund;FDEQX +N141=Fid Diversified Intl;FDIVX +N142=Fid Dividend Growth Fund;FDGFX +N143=Fid Emerging Growth Fund;FDEGX +N144=Fid Emerging Markets;FEMKX +N145=Fid Equity Income;FEQIX +N146=Fid Equity Income II Fund;FEQTX +N147=Fid Euro Cap Appreciation;FECAX +N148=Fid Europe Fund;FIEUX +N149=Fid Exchange Fund;FDLEX +N150=Fid Export Fund;FEXPX +N151=Fid Fifty Fund;FFTYX +N152=Fid Freedom;FDFFX +N153=Fid Global Balance;FGBLX +N154=Fid Global Bond Fund;FGBDX +N155=Fid GNMA Portfolio;FGMNX +N156=Fid Government Security Fund;FGOVX +N157=Fid Growth & Income;FGRIX +N158=Fid Growth Co Fund;FDGRX +N159=Fid High Income Fund;FAGIX +N160=Fid High Yield Fund;FHIGX +N161=Fid Int'l Growth & Income Fund;FIGRX +N162=Fid Int'l Value Fund;FIVFX +N163=Fid Intermediate Bond Fund;FTHRX +N164=Fid Investment Grade Bond Fund;FBNDX +N165=Fid Japan Fund;FJAPX +N166=Fid Latin America Fund;FLATX +N167=Fid Low-Priced Stock Fund;FLPSX +N168=Fid Magellan;FMAGX +N169=Fid Midcap Stocks;FMCSX +N170=Fid Mortgage Security Fund;FMSFX +N171=Fid Muni Tr Ins Tax Free;FMUIX +N172=Fid Municipal Bond Fund;FMBDX +N173=Fid New Markets Income;FNMIX +N174=Fid New Millenium Fund;FMILX +N175=Fid NY Tax Free High Yield Fund;FNTIX +N176=Fid OTC;FOCPX +N177=Fid Overseas;FOSFX +N178=Fid Pacific-basin Fund;FPBFX +N179=Fid Puritan;FPURX +N180=Fid Real Estate Investment Fund;FRESX +N181=Fid Retired Mm Port;FRTXX +N182=Fid SE Asia Fumd;FSEAX +N183=Fid Sel Air Transport;FSAIX +N184=Fid Sel Amer Gold;FSAGX +N185=Fid Sel Automotive Prt;FSAVX +N186=Fid Sel Biotech Port;FBIOX +N187=Fid Sel Bkrge & Inv Mg;FSLBX +N188=Fid Sel Broadcast;FBMPX +N189=Fid Sel Capital Goods;FSCGX +N190=Fid Sel Chemical Port;FSCHX +N191=Fid Sel Computers;FDCPX +N192=Fid Sel Consumer Products;FSCPX +N193=Fid Sel Develop Community;FSDCX +N194=Fid Sel Electronics Port;FSELX +N195=Fid Sel Energy;FSENX +N196=Fid Sel Energy Service;FSESX +N197=Fid Sel Environmental Port;FSLEX +N198=Fid Sel Food & Agric;FDFAX +N199=Fid Sel Health Care;FSPHX +N200=Fid Sel Housing Port;FSHOX +N201=Fid Sel Industrial Prt;FSDPX +N202=Fid Sel Leisure & Ent;FDLSX +N203=Fid Sel Medic Delivery;FSHCX +N204=Fid Sel Natural Gas;FSNGX +N205=Fid Sel Paper & Forest;FSPFX +N206=Fid Sel Port Defense;FSDAX +N207=Fid Sel Port Financial Services;FIDSX +N208=Fid Sel Port Technolgy;FSPTX +N209=Fid Sel Port Utilities;FSUTX +N210=Fid Sel Prec Mtl & Minerals;FDPMX +N211=Fid Sel Prop & Casul Insur;FSPCX +N212=Fid Sel Regional Banks;FSRBX +N213=Fid Sel Retail;FSRPX +N214=Fid Sel S & L Port;FSVLX +N215=Fid Sel Software;FSCSX +N216=Fid Sel Telecommunicatns Port;FSTCX +N217=Fid Sel Transport Port;FSRFX +N218=Fid Short Term World Income;FSHWX +N219=Fid Short-Term Bond Port;FSHBX +N220=Fid Short-Term Gov't Bond Port;FSTGX +N221=Fid Small Cap Stock Fund;FDSCX +N222=Fid Spart Inv Grade;FSIBX +N223=Fid Spart Long Term Gov;SLTGX +N224=Fid Spart Muni Income;FSMIX +N225=Fid Spart Short Term Muni;FSTFX +N226=Fid Spartan Govt Income Fund;SPGVX +N227=Fid Specialty Situation;FSLSX +N228=Fid Stock Selector Fund;FDSSX +N229=Fid Trend Fund;FTRNX +N230=Fid Utility Income Fund;FIUIX +N231=Fid Worldwide Fund;FWWFX +N232=Fidelity Fund;FFIDX +N233=Fidelity Hong Kong China Fund;FHKCX +N234=Fidelity Japan Small Co;FJSCX +N235=Fidelity Limited Term Muni;FLTMX +N236=First Investors Tax Exempt Fund;FITAX +N237=Flex Fund Short Term Global Income;FLGIX +N238=Founder Discovery Mutual Fund;FDISX +N239=Founder Worldwide Growth;FWWGX +N240=Founders Frontier Fund Inc.;FOUNX +N241=Founders Growth Fund;FRGRX +N242=Founders Passport Fund;FPSSX +N243=Founders Special Fund;FRSPX +N244=Frank/Temp German Govt Bond;HGGBX +N245=Frank/Templ Global Curr;ICPGX +N246=Franklin Dynatech Fund;FKDNX +N247=Franklin Equity Fund;FKREX +N248=Franklin Federal Tax Free Income Fund;FKTIX +N249=Franklin Gold Fund;FKRCX +N250=Franklin US Govt Secs Fd;FKUSX +N251=Franklin Utility Fund;FKUTX +N252=Franklin Valuemark;AGEFX +N253=Franklin Valuemark Income Sec;FKINX +N254=Fremont Global Fund;FMAFX +N255=Gabelli Asset Fund;GABAX +N256=Gabelli Global Telecommunications;GABTX +N257=Gabelli Growth Fund;GABGX +N258=Gabelli Small Cap Growth Fund;GABSX +N259=Gabelli Value Fund;GABVX +N260=Gateway Index Plus Fund;GATEX +N261=GE Savings & Security Long Term;GESSX +N262=GE Savings Security Program;GESLX +N263=Gintel Erisa Fund;GINTX +N264=Gintel Fund;GINLX +N265=Goldman Sachs Smallcap Equity Fund;GSSMX +N266=Govett Smaller Cos Fund;GSCQX +N267=Gradison Established Growth Fund;GETGX +N268=Greenspring Fund;GRSPX +N269=GT Global America Growth Fund;GTAGX +N270=GT Global Bond Fund;GSIAX +N271=GT Global Emerging Mkt;GTEMX +N272=GT Global Europe Growth Fund;GTGEX +N273=GT Global Gov't Income Fund;GGINX +N274=GT Global Growth & Income Fund;GAGIX +N275=GT Global Health Care Fund;GGHCX +N276=GT Global Int'l Growth Fund;GINGX +N277=GT Global Japan Growth Fund;GJGRX +N278=GT Global Pacific Growth Fund;GTPAX +N279=GT Global Worldwide Growth Fund;GTWGX +N280=Guiness Flight China & HK;GFCHX +N281=Harbor Intl Fund;HAINX +N282=Hartwell Growth Fund;HRGRX +N283=Heartland Small Cap Cont Fund;HRSMX +N284=Heartland Value;HRTVX +N285=Hotchkis & Wiley Intl;HWINX +N286=Hotchkis & Wiley Low Duration;HWLDX +N287=Hotchkis & Wiley Total Return;HWTRX +N288=IAI Apollo Fund;IAAPX +N289=IAI Emerging Growth Fund;IAEGX +N290=IAI Growth & Income Fund;IASKX +N291=IAI Intl Fun;IAINX +N292=IAI Regional Fund;IARGX +N293=IDS Bond Fund;INBNX +N294=IDS Discovery Fund;INDYX +N295=IDS Equity Plus Fund;INVPX +N296=IDS Extra Income Fund;INEAX +N297=IDS Growth Fund;INIDX +N298=IDS Intl Fund;INIFX +N299=IDS Managed Retirement;IMRFX +N300=IDS Mutual Fund;INMUX +N301=IDS New Dimensions Fund;INNDX +N302=IDS Progressive Fund;INPRX +N303=IDS Selective Fund;INSEX +N304=IDS Stock Fund;INSTX +N305=IDS Strategy Aggressive;INAGX +N306=IDS Tax-Exempt Bond Fund;INTAX +N307=IDS Utilities Income Fund;INUTX +N308=Invesco Dynamics;FIDYX +N309=Invesco Emerging Growth Fund;FIEGX +N310=Invesco Financial Services;FSFSX +N311=Invesco Growth Fund;FLRFX +N312=Invesco Income Fund;FBDSX +N313=Invesco Income Hi Yield;FHYPX +N314=Invesco Income US Govt Security;FBDGX +N315=Invesco Industrial Income Fund;FIIIX +N316=Invesco International European;FEURX +N317=Invesco Intl Growth;FSIGX +N318=Invesco Intl Pacific Basin;FPBSX +N319=Invesco Strategic Energy;FSTEX +N320=Invesco Strategic Gold;FGLDX +N321=Invesco Strategic Health;FHLSX +N322=Invesco Strategic Leisure;FLISX +N323=Invesco Strategic Technology;FTCHX +N324=Invesco Strategic Utilities;FSTUX +N325=Invesco Tax Free Income;FTIFX +N326=Invesco Value Inter Bond Fund;FIGBX +N327=Invesco Value Total Return;FSFLX +N328=Invesco World Wide Communication;ISWCX +N329=Investco Environment;FSEVX +N330=Investco Multi Asset;IMABX +N331=Ivy Growth Fund;IVYFX +N332=Ivy Int'l Fund;IVINX +N333=Janus Enterprise;JAENX +N334=Janus Flex Income;JAFIX +N335=Janus Fund;JANSX +N336=Janus Growth & Income;JAGIX +N337=Janus Mercury Fund;JAMRX +N338=Janus Olympus Fund;JAOLX +N339=Janus Overseas;JAOSX +N340=Janus Twenty Fund;JAVLX +N341=Janus Venture Fund;JAVTX +N342=Janus Worldwide;JAWWX +N343=John Handcock World Fund;JHGRX +N344=Kaufman Fund;KAUFX +N345=Kemper Growth Fund];KGRAX +N346=Kemper Inv High Yield;KHYAX +N347=Keystone Balance Fund;KKONX +N348=Keystone Cust Fund Series S-4;KSFOX +N349=Keystone Diversified Bond;KBTWX +N350=Keystone Growth & Income;KSONX +N351=Keystone High Income;KBFOX +N352=Keystone Mid Cap Growth Fund;KSTHX +N353=Keystone Precious Metals Hldgs;KSPMX +N354=Keystone Quality Bond Fund;KBONX +N355=Keystone Strategic Growth Fund;KKTWX +N356=Keystone Tax Free Fund;KSTFX +N357=Legg Mason Special Investments;LMASX +N358=Legg Mason Value Trust;LMVTX +N359=Lexington Corp Lenders Tres;LEXCX +N360=Lexington Global Fund;LXGLX +N361=Lexington Gold Fund Inc;LEXMX +N362=Lexington Ramirez Global Incom;LEBDX +N363=Lexington Research Fund;LEXRX +N364=Lexington Strat Silver Fund;STSLX +N365=Lexington Strategic Investment;STIVX +N366=Lexington World Wide Emerging Markets;LEXGX +N367=Liberty Muni Security Fund;LMSFX +N368=Lindner Bulwark Inc;LDNBX +N369=Lindner Dividend Fund;LDDVX +N370=Lindner Fund;LDNRX +N371=Lord Ab Bond Deb;LBNDX +N372=Lord Ab Dev Growth Fund;LAGWX +N373=Lord Ab Govt Security Fd;LAGVX +N374=Lord Ab Value Appreciation;LAVLX +N375=Lord Abbett Affiliated Fund;LAFFX +N376=M Lynch Amer Inc Cl D;MDAMX +N377=M Lynch Americus;MBAMX +N378=M Lynch Asset Growth Cl B;MBAGX +N379=M Lynch Asset Income Cl B;MBASX +N380=M Lynch Basic Value Cl B;MBAZX +N381=M Lynch Basic Value;MBBAX +N382=M Lynch Bond Fund I& R Cl C;MCGOX +N383=M Lynch Cap Fund Cl B;MBCPX +N384=M Lynch Dev Cap Markets;MBDCX +N385=M Lynch E Africa Cl B;MBAFX +N386=M Lynch Euro Fund Cl B;MBEFX +N387=M Lynch Funds For Instit;MLTXX +N388=M Lynch Glb Cv Fund Cl B;MBGVX +N389=M Lynch Glob Util Cl B;MBGUX +N390=M Lynch Global Alloc Cl B;MBLOX +N391=M Lynch Global Bond I & R Cl B;MBGOX +N392=M Lynch Global Holdings Cl B;MBHDX +N393=M Lynch Global Res Tr Cl B;MBGRX +N394=M Lynch Global Small Cap Cl B;MBGCX +N395=M Lynch Growth Fd IRA Cl B;MBQRX +N396=M Lynch Growth Fund Cl B;MBFGX +N397=M Lynch Growth Inv & Retirement;MDQRX +N398=M Lynch Healthcare Cl B;MBHCX +N399=M Lynch Inst Interm Cl A;MLMEX +N400=M Lynch Intl Eq Fund Cl B;MBIEX +N401=M Lynch Latin Amer Cl B;MBLTX +N402=M Lynch Pacific Fd Cl B;MBPCX +N403=M Lynch Short Term Glb Cl B;MBSIX +N404=M Lynch Spec Value Cl B;MBSPX +N405=M Lynch Strat Div Cl B;MBDVX +N406=M Lynch Tech Fund Cl B;MBTCX +N407=M Lynch Tomorrow Fund Cl B;MBTWX +N408=M Lynch Util Income Cl B;MBUTX +N409=M Lynch Value Fund Cl B;MDSPX +N410=Managers Intermediate Mortgage;MGIGX +N411=Mas Pooled Intl Equity;MPIEX +N412=Mathers Fund;MATRX +N413=Merger Fund;MERFX +N414=Merrill Basic Value;MABAX +N415=Merrill Capital;MACPX +N416=Merrill Corp High Income;MAHIX +N417=Merrill Federal Securities;MBFSX +N418=Merrill Growth;MAQRX +N419=Merrill International Holdings;MAHDX +N420=Merrill Investment Grade;MBHQX +N421=Merrill L Phoenix Fund;MBPNX +N422=Merrill L Tech Fund;MATCX +N423=Merrill Lynch Dragon Fund;MBDRX +N424=Merrill Pacific;MAPCX +N425=Merrill Special Value;MASPX +N426=MFS Gov't Mortgage Fund;MGMTX +N427=MFS High Income Fund;MHITX +N428=Midas Fund Inc;EMGSX +N429=Monetta Fund Inc;MONTX +N430=Monitrend Gold Fund;MNTGX +N431=Montgomery Asset Allocation;MNAAX +N432=Montgomery Emerging Markets;MNEMX +N433=Montgomery Equity Income;MNEIX +N434=Montgomery Global Commun Fund;MNGCX +N435=Montgomery Global Opportunity;MNGOX +N436=Montgomery Growth;MNGFX +N437=Montgomery Intl Small Cap;MNISX +N438=Montgomery Micro Cap;MNMCX +N439=Montgomery Small Cap Fund;MNSCX +N440=Mutual Beacon Fund Inc;BEGRX +N441=Mutual Discovery Fund;MDISX +N442=Mutual Qualified Income Fund;MQIFX +N443=Mutual Shares Corp;MUTHX +N444=Navellier Aggressive Small Cap;NASCX +N445=Neub & Ber Partners;NPRTX +N446=Neub & Ber Select Sectors;NBSSX +N447=Neub Guardian;NGUAX +N448=Neub Ltd Maturity Bond;NLMBX +N449=Neub Manhattan;NMANX +N450=New USA Fund;NUSFX +N451=Newberger & Bermon Manttatn TR;NBMTX +N452=Nicholas Fund;NICSX +N453=Nicholas II Fund;NCTWX +N454=Nicholas Income Fund;NCINX +N455=Nomura Pacific Basin Fund;NPBFX +N456=Northeast Investors Growth Fund;NTHFX +N457=Northeast Investors Trust Fund;NTHEX +N458=Oakmark;OAKMX +N459=Oakmark Intl Fd;OAKIX +N460=Oberweis Emerging Grwth Fund;OBEGX +N461=Oppen Main St Income & Growth;MSIGX +N462=Oppenheimer Glabal A Fund;OPPAX +N463=Oppenheimer Gold & Spec Minerals;OPGSX +N464=Pacific Horizon Agressive Fund;PHAGX +N465=Pax World Fund;PAXWX +N466=Pbhg Emerging Growth;PBEGX +N467=Pbhg Fund;PBHGX +N468=PBHG Large Cap Growth;PBHLX +N469=PBHG Select Equity;PBHEX +N470=PBHG Tech & Communications Fund;PBTCX +N471=Penn Mutual Fund;PENNX +N472=Penn Square Fund;PESQX +N473=Pimco Adv Growth Fund;PGWCX +N474=Pimco Adv Intl Fund;PILCX +N475=Pimco Foreign;PFORX +N476=Piper Jaffray Institutional Gvt Income;PJIGX +N477=Pra Real Estate Fund;PRREX +N478=Primco Adv Oppt Cl C;POPCX +N479=Prud Global Utility Fund;GLUAX +N480=Prudential Interm Global Income Fund;PBIGX +N481=Put Convertible Fund;PCONX +N482=Put Diversified Income Trust;PDINX +N483=Put Growth & Income Fund;PGRWX +N484=Put Income Fund;PINCX +N485=Put Intl Equities;PEQUX +N486=Put Investors Fund;PINVX +N487=Put Natural Resources Fund;EBERX +N488=Put Option Income II Fund;PMITX +N489=Put OTC Emerging Growth Fund;POEGX +N490=Put Vista Basic Value Fund;PVISX +N491=Put Voyager Fund;PVOYX +N492=Putnam Cali Tax Ex Inc;PCTEX +N493=Putnam Health Sciences;PHSTX +N494=Putnam High Yield Tr B;PHBBX +N495=Putnam High Yield Tr A;PHIGX +N496=Putnam Tax Ex Income;PTAEX +N497=Quest For Value Fund;QFVFX +N498=Reich & Tang Equity Fund;RCHTX +N499=RIM Balanced PT;RIMBX +N500=RIM Small/Mid Cap Equity;RIMSX +N501=Rob St Contrarian Fund;RSCOX +N502=Rob St Dev Countries Fund;RSDCX +N503=Rob St Emerging Growth Fund;RSEGX +N504=Rob St Value Plus Fund;RSVPX +N505=Robertson Stephens Info Age;RSIFX +N506=Royce Mico Cap;RYOTX +N507=Royce Value Fund;RYVFX +N508=Rushmore Amer Gas Index;GASFX +N509=Ryder Juno Fund;RYJUX +N510=Rydex Nova Port;RYNVX +N511=Rydex OTC Fund;RYOCX +N512=Rydex Precious Metal Fund;RYPMX +N513=Rydex Ursa Fund;RYURX +N514=Rydex US Gov Bond;RYGBX +N515=Safeco Equity Fund;SAFQX +N516=Safeco Gov't Securities Fund;SFUSX +N517=Safeco Growth Fund;SAFGX +N518=Safeco Income Fund Inc;SAFIX +N519=Safeco Municipal Bond Fund;SFCOX +N520=SBS Strategic Investing;SESIX +N521=Schroder Capital Us Equity;SUSEX +N522=Schroder Intl Equity;SCIEX +N523=Schwab 1000 Fund;SNXFX +N524=Schwab Intl Index Fund;SWINX +N525=Scud CA Tax Free Fund;SCTFX +N526=Scud Capital Growth Fund;SCDUX +N527=Scud Development Fund;SCDVX +N528=Scud Emerg Mrkt Income;SCEMX +N529=Scud Global Bond Fund;SSTGX +N530=Scud Global Fund;SCOBX +N531=Scud Gnma Fund;SGMSX +N532=Scud Gold Fund;SCGDX +N533=Scud Growth & Income Fund;SCDGX +N534=Scud Hi Yield Tax Free;SHYTX +N535=Scud Income Fund Inc;SCSBX +N536=Scud Intl Bond Fund;SCIBX +N537=Scud Intl Fund;SCINX +N538=Scud Japan Fund;SJPNX +N539=Scud Med Term Tax Free;SCMTX +N540=Scud Mgt Municipal Fund;SCMBX +N541=Scud Quality Growth Fund;SCQGX +N542=Scud Short Term Bond Fund;SCSTX +N543=Scud US Tres Money Fund;SCGXX +N544=Scud Zero Coupon 2000 Target;SGZTX +N545=Scudder Global Discovery Fund;SGSCX +N546=Scudder Greater Europe Group;SCGEX +N547=Scudder Latin America Fund;SLAFX +N548=Scudder Pacific Opportunity;SCOPX +N549=Scudder Value Fund;SCVAX +N550=SEI Index S&P 500;TRQIX +N551=SEI Inst Managed Trust Small Cap Growth;SSCGX +N552=Select Special Shares;SLSSX +N553=Selected Amer Shares;SLASX +N554=Seligman Comm & Info Class D;SLMDX +N555=Seligman Frontier;SLFRX +N556=Sequoia Fund Inc;SEQUX +N557=Shearson SP High Income;SHIBX +N558=Sit Growth Fund Incorp;NBNGX +N559=Sit Small CAp Growth Fund;SSMGX +N560=Smith Barn Managed Growth Fund;SBMGX +N561=Sogen International;SGENX +N562=Spartan High Income Mutual Fund;SPHIX +N563=State Farm Growth Fund;STFGX +N564=State Street Research Govt Income Fund;SSGIX +N565=Stein Roe Capital Fund;SRFCX +N566=Stein Roe Growth Fund;SRFSX +N567=Stein Roe Hi Yield Muni;SRMFX +N568=Stein Roe Special Fund;SRSPX +N569=Stratton Growth Fund;STRGX +N570=Stratton Monthly Dividend;STMDX +N571=Strong Asia Pacific Fund;SASPX +N572=Strong Asset Allocation;STAAX +N573=Strong Common Stock Fund;STCSX +N574=Strong Corporate Bond Fund Inc;STCBX +N575=Strong Discovery Fund;STDIX +N576=Strong Government Securities;STVSX +N577=Strong Growth;SGROX +N578=Strong High Yield Fund;SHYLX +N579=Strong Intl Bond Fund;SIBUX +N580=Strong Intl Stock;STISX +N581=Strong Municipal Advantage Fund;SMUAX +N582=Strong Opportunity Fund;SOPFX +N583=Strong Short Term Bond;SSTBX +N584=Strong Short Term Glbl Bond;STGBX +N585=Strong Total Return Fund;STRFX +N586=T Price Rowe Capital Apprec Fund;PRWCX +N587=T Price Rowe Income Fund;PRCIX +N588=T Price Rowe Int'l Stock Fund;PRITX +N589=T Price Rowe New Era Fund;PRNEX +N590=T Price Rowe New Horizon Fund;PRNHX +N591=T Price Rowe Tax Free Hi Yield;PRFHX +N592=T Rowe Global Government Bond;RPGGX +N593=T Rowe Growth Fund;TRSGX +N594=T Rowe Income Fund;PRSIX +N595=T Rowe Japan;PRJPX +N596=T Rowe Latin Amer;PRLAX +N597=T Rowe Personal Strat;TRPBX +N598=T Rowe Price Equity Fund;PRFDX +N599=T Rowe Price Equity;PREIX +N600=T Rowe Price European Stock Fund;PRESX +N601=T Rowe Price High Yield Bond Fund;PRHYX +N602=T Rowe Price Int'l Bond Fund;RPIBX +N603=T Rowe Price Int'l Discovery Fund;PRIDX +N604=T Rowe Price New Amer Growth;PRWAX +N605=T Rowe Price NY Tax Free Bond Fund;PRNYX +N606=T Rowe Price OTC Fund;OTCFX +N607=T Rowe Price Science & Technology;PRSCX +N608=T Rowe Price Small Cap Value;PRSVX +N609=T Rowe Price Tax Free Short Interest;PRFSX +N610=T Rowe Price US Treasury Long Term;PRULX +N611=T Rowe Short Term Global Income;RPSGX +N612=Temp Foreign Equity Series;TFEQX +N613=Templeton Developing Market;TEDMX +N614=Templeton Foreign Fund;TEMFX +N615=Templeton Global Opport Tr;TEGOX +N616=Templeton Growth Fund;TEPLX +N617=Templeton Intl Stock Fund;FINEX +N618=Templeton Real Estate Securities;TEMRX +N619=Templeton World Fund;TEMWX +N620=TR Price Spec Growth Fund;PRSGX +N621=TR Price Spec Income Fund;RPSIX +N622=Trowe Price New Asia;PRASX +N623=Tweedy Browne Global Value;TBGVX +N624=United Bond Fund;UNBDX +N625=United Service Goldshares;USERX +N626=United Service Real Estate;UNREX +N627=United Service World Gold Fund;UNWPX +N628=USAA Agressive Growth Fund;USAUX +N629=USAA Capital Growth Fund;USAAX +N630=USAA Cornerstone Strat Fund;USCRX +N631=USAA Gold Fund;USAGX +N632=USAA Investment Intl;USIFX +N633=USAA Mutual Income Fund;USAIX +N634=USAA Tax Exempt Intermediate Term;USATX +N635=USAA Tax Exempt Short Term;USSTX +N636=Value Line Aggressive Income Fund;VAGIX +N637=Value Line Convertible Fd Inc;VALCX +N638=Value Line Fund;VLIFX +N639=Value Line High Yield Port;VLHYX +N640=Value Line Income Fund;VALIX +N641=Value Line Leveraged Growth;VALLX +N642=Value Line Special Fund;VALSX +N643=Value Line US Gov't Securities Fund;VALBX +N644=Van Eck Fund Intl Invest;INIVX +N645=Van Eck Gold Resources Fund;GRFRX +N646=Van Kampen Merriott US Govt Fund;VKMGX +N647=Vang Bond Market Fund;VBMFX +N648=Vang Converible Security Fund;VCVSX +N649=Vang Equity Income Port;VEIPX +N650=Vang Explorer Fund;VEXPX +N651=Vang GNMA Port;VFIIX +N652=Vang Gold & Precious Metal;VGPMX +N653=Vang High Yield Corp;VWEHX +N654=Vang Hor Capital Oppt;VHCOX +N655=Vang Horizon Aggressive Growth;VHAGX +N656=Vang Horz Glb Assets;VHAAX +N657=Vang Horz Glb Equity;VHGEX +N658=Vang Index 500 Trust;VFINX +N659=Vang Index Growth Fund;VIGRX +N660=Vang Index Trust Extended Market Fund;VEXMX +N661=Vang Index Value Fund;VIVAX +N662=Vang Intl Eq Emerging;VEIEX +N663=Vang Intl Index Europe;VEURX +N664=Vang Intl Index Pacific;VPACX +N665=Vang Life Cons Growth;VSCGX +N666=Vang Life Income;VASIX +N667=Vang Life Mod Pt;VSMGX +N668=Vang Morgan;VMRGX +N669=Vang Municipal Bond Fund;VWAHX +N670=Vang Preferred Stock Fund;VQIIX +N671=Vang Primecap;VPMCX +N672=Vang Quantitative;VQNPX +N673=Vang Short Term Corporate Fund;VFSTX +N674=Vang Short Term Gov't Bond Fund;VSGBX +N675=Vang Smallcap Stock Fund;NAESX +N676=Vang Special Energy Port;VGENX +N677=Vang Special Health Port;VGHCX +N678=Vang Star Fund;VGSTX +N679=Vang TCA Intl;VTRIX +N680=Vang TCF USA Fund;VTRSX +N681=Vang US Treasury Bond Port;VUSTX +N682=Vang Utility Income;VGSUX +N683=Vang Warwick Intermed Fund;VWITX +N684=Vang Warwick Short Fund;VWSTX +N685=Vang Wellesley;VWINX +N686=Vang Wellington Fund;VWELX +N687=Vang Westminster Fixed Income Fund;VWESX +N688=Vang Windsor Fund;VWNDX +N689=Vang Windsor II;VWNFX +N690=Vang World Fd Int'l Grwth;VWIGX +N691=Vang World Fund US Growth Port;VWUSX +N692=Vanguard Asset Allocation Strat;VAAPX +N693=Vanguard Life Growth;VASGX +N694=Vista Capital Growth Fund;VCAGX +N695=Von Wagoner Emerging Growth;VWEGX +N696=Von Wagoner Mid Cap Fund;VWMDX +N697=Vontobel Europacific;VNEPX +N698=Vontobel US Value;VUSVX +N699=Warburg Pin Gr & Income;RBEGX +N700=Warburg Pincus Emerging Growth;CUEGX +N701=Warburg Pincus Global Fixed Income;CGFIX +N702=Warburg Pincus Intl Equity;CUIEX +N703=Warburg Pincus Japan;WPJPX +N704=Wasatch Aggressive Equity Fund;WAAEX +N705=Wasatch Growth Fund;WGROX +N706=Wasatch Micro-Cap;WMICX +N707=Wasatch Mid-Cap Fund;WAMCX +N708=Wayne Hummer Income Fund;WHICX +N709=Weiss, Peck & Greer Tudor Fund;TUDRX +N710=World\Fds Vontobel US Value;VUSGX +N711=WPG Govt Securities;WPGVX +N712=WPG Growth & Income;WPGFX +N713=Wright Dutch Ntl Fund;WENLX +N714=Wright Equity Mex Ntl;WEMEX +N715=Wright Equity TR Hong Kong;WEHKX diff --git a/http/Main.cpp b/http/Main.cpp new file mode 100644 index 0000000..ec3f168 --- /dev/null +++ b/http/Main.cpp @@ -0,0 +1,10 @@ +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; + frameWindow.splash(); + frameWindow.createWindow("WINPAGE","HTML Batch Retrieval System v1.00","mainMenu","Diversified"); + return frameWindow.messageLoop(); +} + diff --git a/http/NASDAQ.TXT b/http/NASDAQ.TXT new file mode 100644 index 0000000..0649ad0 --- /dev/null +++ b/http/NASDAQ.TXT @@ -0,0 +1,125 @@ +N1=Accent Software International Ltd.;ACNTF +N2=Actrade International Ltd.;ACRT +N3=Adaptive Solutions, Inc.;ADSO +N4=ALDEN Electronics, Inc.;ADNEA +N5=Allegro New Media, Inc.;ANMI +N6=Alternate Postal Delivery, Inc.;ALTD +N7=Amedisys, Inc.;AMED +N8=Ancor Communications, Inc.;ANCR +N9=Applied Biometrics, Inc.;ABIO +N10=Applied Cellular Technology, Inc.;ACTC +N11=Applied Research Corporation ;APLS +N12=ARC Capital (Formerly Applied Laser Systems);ARCCA +N13=ASA International Ltd. ;ASAA +N14=Atlantic Pharmaceuticals, Inc.;ATLC +N15=Automobile Protection Corporation;APCO +N16=Blue Dolphin Energy Company;BDCO +N17=Bureau of Electronic Publishing, Inc.;BEPI +N18=Byron Preiss Multimedia Company, Inc.;CDRM +N19=Camelot Corporation;CAML +N20=Cardiotronics Systems, Inc.;CDIO +N21=Centurion Mines Corporation;CTMC +N22=Churchill Downs Incorporated;CHDN +N23=CinemaStar Luxury Theaters;LUXY +N24=Circuit Research Labs, Inc.;CRLI +N25=Classics International Entertainment, Inc.;CIEI +N26=Coda Music Technology;COMT +N27=CompuMed, Inc.;CMPD +N28=Computer Marketplace, Inc.;MKPL +N29=Computone Corporation;CMPT +N30=Concord Energy, Inc.;CODE +N31=CSI Computer Specialists, Inc.;CSIS +N32=Cusac Gold Mines Ltd.;CUSIF +N33=DeltaPoint, Inc.;DTPT +N34=Digital Sciences Inc.;DISI +N35=Dynamic Healthcare Technologies, Inc.;DHTI +N36=DynaMotive Technologies Corporation;DYMTF +N37=Eckler Industries, Inc.;ECKL +N38=Electronic Clearing House, Inc.;ECHO +N39=Enteractive, Inc.;ENTR +N40=Environment One Corporation;EONE +N41=Environmental Technologies USA, Inc.;ENVR +N42=Erox Corporation;EROX +N43=Esquire Communications Ltd.;ESQS +N44=Essex Corporation;ESEX +N45=Farmstead Telephone Group, Inc.;FONE +N46=FIND/SVP, Inc.;FSVP +N47=F1RSTMARK, Inc.;FIRM +N48=Focus Enhancements, Inc.;FCSE +N49=Gilman & Ciocia, Inc.;GTAX +N50=Graphix Zone, Inc.;GZON +N51=Great Pines Water Company, Inc.;GPWC +N52=Imex Medical Systems, Inc.;IMEX +N53=Independence Federal Savings Bank;IFSB +N54=Infodata Systems, Inc.;INFD +N55=Informedics, Inc.;IMED +N56=INOTEK Technologies Corp.;INTK +N57=Insignia Systems, Inc.;ISIG +N58=Integral Systems, Inc.;ISYS +N59=IntelliCorp, Inc.;INAI +N60=International Microcomputer Software, Inc.;IMSI +N61=International Precious Metals Corporation;IPMCF +N62=Internet Communications Corporation;INCC +N63=InVitro International;INVI +N64=Irvine Sensors Corporation;IRSN +N65=ITEX Corporation;ITEX +N66=Janex International, Inc.;JANX +N67=Kansas City Life Insurance Company;KCLI +N68=Kinetiks.com, Inc.;KNET +N69=Laser Video Network;LVNI +N70=LCA-Vision Inc.;LCAV +N71=LifeCell Corporation;LIFC +N72=LifeRate Systems, Inc.;LRSI +N73=LightPath Technologies Inc.;LPTHA +N74=Lotto World, Inc.;LTTO +N75=Marine National Bank;MNBK +N76=MaxServ, Inc.;MXSV +N77=Medizone International, Inc.;MZEI +N78=MetroBanCorp;METB +N79=Mitek Systems, Inc.;MITK +N80=Network Connection, Inc. (The);TNCX +N81=National Registry Inc. (The);NRID +N82=Nona Morelli's II, Inc.;NONA +N83=Norris Communications Corporation;NORRF +N84=Online System Services, Inc.;WEBB +N85=Navigato International, Inc.;NATO +N86=Pacific Animated Imaging Corp.;PAID +N87=Palomar Medical Technologies, Inc.;PMTI +N88=PerfectData Corporation;PERF +N89=Perle Systems Inc.;PERLF +N90=Precision Systems, Inc.;PSYS +N91=ProtoSource Corporation;PSCO +N92=PTI Holding, Inc.;PTII +N93=Pudgie's Chicken, Inc.;PUDG +N94=QCS Corporation;QCSC +N95=Quadrax Corporation;QDRX +N96=Rent-A-Wreck of America, Inc.;RAWA +N97=Rotary Power International, Inc.;RPII +N98=Sanctuary Woods Multimedia Corporation ;SWMFC +N99=Scangraphics, Inc.;SCNG +N100=Seiler Pollution Control Systems, Inc.;SEPC +N101=Silverado Mines, Ltd.;GOLDF +N102=Socket Communications, Inc.;SCKT +N103=Spanlink Communications;SPLK +N104=Sparta Pharmaceuticals, Inc.;SPTA +N105=Spatializer Audio Laboratories, Inc.;SPAZ +N106=Sports International Ltd.;SBET +N107=Sports Sciences, Inc.;SSCI +N108=SunRiver Corporation;SRVC +N109=SwissRay International, Inc.;SRMI +N110=SYSTEMS of Excellence, Inc.;SEXI +N111=Vasco Data Security, Inc.;VASC +N112=Vector Aeromotive Corporation;VCAR +N113=VictorMaxx Technologies, Inc.;VMAX +N114=VideoLabs Inc.;VLAB +N115=Visual Information Services Corp.;VICP +N116=Voice Powered Technology International, Inc.;VPTI +N117=VOXEL;VOXL +N118=VSI Enterprises, Inc.;VSIN +N119=Wavetech, Inc.;ITEL +N120=Zila, Inc.;ZILA +N121=Intel Corp.,;INTC +N122=Microsoft Corp.,;MSFT +N123=Cisco Systems;CSCO +n124=Compaq Computer Corp.,;CPQ + diff --git a/http/NYSE.TXT b/http/NYSE.TXT new file mode 100644 index 0000000..1159acb --- /dev/null +++ b/http/NYSE.TXT @@ -0,0 +1,2639 @@ +N1=A G Edwards;AGE +N2=AAR Corporation;AIR +N3=Abbott Laboratories;ABT +N4=Abitibi Price Inc;ABY +N5=Acceptance Insurance Cos;AIF +N6=ACE Ltd;ACL +N7=ACM Gov't Income Fund;ACG +N8=ACM Gov't Income Opportunity;AOF +N9=ACM Gov't Securities Fund;GSF +N10=ACM Gov't Spectrum Fund Inc.;SI +N11=ACM Managed Dollar Income Fund;ADF +N12=ACM Managed Income Fund;AMF +N13=ACM Municipal Sec Income Fund;AMU +N14=Acme Cleveland Corp;AMT +N15=Acme Electric Corp;ACE +N16=Acordia Inc;ACO +N17=Acuson Corp;ACN +N18=ACX Technologies;ACX +N19=Adams Express Co;ADX +N20=Advanced Micro Devices;AMD +N21=Advest Group Inc;ADV +N22=Advo System Inc;AD +N23=Advocat Inc;AVC +N24=Aegon Nv;AEG +N25=Aeroflex Labs Inc;ARX +N26=Aetna Life & Casualty;AET +N27=AFLAC Inc;AFL +N28=Agco;AG +N29=AGL Resources Inc;ATG +N30=Agree Realty Corp;ADC +N31=Ahmanson(HF) & Co;AHM +N32=Ahold Nv ADR;AHO +N33=Air Products & Chem.;APD +N34=Airborne Freight Corp;ABF +N35=Airgas Inc;ARG +N36=Airlease Ltd;FLY +N37=Airtouch Communication Inc;ATI +N38=AJL Peps Trust;AJP +N39=AK Steel Holding Corp;AKS +N40=Alamo Group Inc;ALG +N41=Alaska Airlines Inc;ALK +N42=Albany Intl Corp Class A;AIN +N43=Albemarble Corp;ALB +N44=Alberta Energy Co;AOG +N45=Alberto Culver Class A;ACVA +N46=Alberto-Culver Co;ACV +N47=Albertsons Inc;ABS +N48=Alcan Aluminum;AL +N49=Alcatel Alsthom;ALA +N50=Alco Standard Corp.;ASN +N51=Alden Financial Corp;JA +N52=Alex Brown Inc;AB +N53=Alexander & Alex Svcs;AAL +N54=Alexanders Inc;ALX +N55=All American Target Term Trust;AAT +N56=Allegheny Corp;Y +N57=Allegheny Ludlim Corp;ALS +N58=Allegheny Power System;AYP +N59=Allen Group Inc;ALN +N60=Allen Interiors Inc;ETH +N61=Allergan;AGN +N62=Alliance All Market A;AMO +N63=Alliance Capital Management Lp;AC +N64=Alliance Entertainment Corp;CDS +N65=Alliance Global Environment Fund Inc.;AEF +N66=Alliance World Dol Govt Fund II;AWF +N67=Alliance World Dollar Govt;AWG +N68=Alliant Techsystems Inc;ATK +N69=Allied Irish Bancshares;AIB+ +N70=Allied Irish Banks Plc ADR;AIB +N71=Allied Products Corp;ADP +N72=Allied Signal Corp;ALD +N73=Allmerica Financial;AFC +N74=Allmerica Property And Casualty;APY +N75=Allmerica Security Trust;ALM +N76=Allstate Corp 98;PME +N77=Allstate Insurance;ALL +N78=Allstate Muni Income Tr III;TFC +N79=Allstate Muni Opp Fund;OIB +N80=Allstate Muni Premium Trust;PIA +N81=Allstate Municipal Fund;TFA +N82=Allstate Municipal Income Ii;TFB +N83=ALLTEL Corp;AT +N84=Allwaste Inc;ALW +N85=ALPharma Inc;ALO +N86=Alumax Inc;AMX +N87=Aluminum Co. Of Amer (ALCOA);AA +N88=ALZA Corp;AZA +N89=Amax Gold Inc;AU +N90=Ambac;ABK +N91=Amcast Industrial Corp;AIZ +N92=Amdin De Fondos De Pension;PVD +N93=Amer Banknote;ABN +N94=Amer Brands Inc;AMB +N95=Amer Building Maint;ABM +N96=Amer Business Prod;ABP +N97=Amer Elecric Power;AEP +N98=Amer Express;AXP +N99=Amer Financial Group;AFG +N100=Amer General Corp;AGC +N101=Amer Gov't Income Fund;AGF +N102=Amer Gov't Income Port;AAF +N103=Amer Health Properties;AHE +N104=Amer Heritage Lf Inv;AHL +N105=Amer Home Prod;AHP +N106=Amer Hotels & Realty Cp;AHR +N107=Amer Intl Group;AIG +N108=Amer Muni Term Trust Inc;AXT +N109=Amer Muni Term Trust II;BXT +N110=Amer Opportunity Income Fund;OIF +N111=Amer Precision Ind;APR +N112=Amer President Co Ltd;APS +N113=Amer Real Estate Lp;ACP +N114=Amer Realty Trust;ARB +N115=Amer Standard;ASD +N116=Amer Stores Co;ASC +N117=Amer Strategic Income Port II;BSP +N118=Amer Strategic Income Fund;ASP +N119=Amer Waste Services Inc;AW +N120=Amer Water Works;AWK +N121=Amer West Airlines;AWA +N122=Amerada Hess Corp.;AHC +N123=American Annuity Group;AAG +N124=American Eagle;FLI +N125=American Industrial Properties Reit Sbi;IND +N126=American Media Inc;ENQ +N127=American Medical Response Inc;EMT +N128=American Muni Inc Por;XAA +N129=American Muni Term Tr;CXT +N130=American Re Corp;ARN +N131=American Select Portfolio Inc;SLA +N132=American Strat Inc Port III;CSP +N133=Americas Income Trust;XUS +N134=Americredit;ACF +N135=Ameridata Technologies;ADA +N136=Amerigas Partners;APU +N137=Ameriquest Technologies;AQS +N138=Ameritech;AIT +N139=Ameron Intl Corp;AMN +N140=Ametek Inc;AME +N141=AMLI Residential Properties Trust;AML +N142=Amoco;AN +N143=AMP Inc;AMP +N144=Ampco Pittsburgh Corp;AP +N145=Ampex Corp;AXC +N146=Amphenol Cp;APH +N147=AMR Corp;AMR +N148=Amre Inc;AMM +N149=Amrep Corporation;AXR +N150=Amsco Intl Inc;ASZ +N151=Amsouth Bancorp;ASO +N152=Amvestors Finan Cp;AMV +N153=Amway Asia Pacific Ltd;AAP +N154=Amway Japan Limited;AJL +N155=Anadarko Petroleum;APC +N156=Analog Devices Inc;ADI +N157=Angelica Corporation;AGL +N158=Anheuser Busch Co.;BUD +N159=Anixter Intl;AXE +N160=Ann Taylor Inc;ANN +N161=Anthony Industries;ANT +N162=Aon Corp;AOC +N163=Apache Corp.;APA +N164=Apartment Int & Mngt;AIV +N165=Apex Municipal Fund;APX +N166=Applied Magnetics Corp;APM +N167=Applied Power Inc Class A;APW +N168=Aptargroup Inc;ATR +N169=Aquarion;WTR +N170=Aquila Gas Pipeline Corp;AQP +N171=Aracruz Celulose Sa ADR;ARA +N172=Arbor Property Trust;ABR +N173=Arcadian Corp;ACA +N174=Archer-Daniels Midland;ADM +N175=Arco Chemical;RCM +N176=Argentina Fund Inc;AF +N177=Arizona Publ Series Q;ARP+Q +N178=Armco Inc.;AS +N179=Armstrong World Ind Inc;ACK +N180=Arrow Electronics Inc;ARW +N181=Artra Group Inc;ATA +N182=Arvin Industries;ARV +N183=Asa Ltd.;ASA +N184=ASARCO Inc;AR +N185=Ashanti Goldfield Ltd;ASL +N186=Ashland Coal Inc;ACI +N187=Ashland Oil Inc.;ASH +N188=Asia Pacific;APB +N189=Asia Pacific Resources Intl;ARH +N190=Asia Pulp & Paper;PAP +N191=Asis Tigers Fund;GRR +N192=Asset Investors;AIC +N193=Associated Estates Realty Cp;AEC +N194=AT&T;T +N195=AT&T Capital Corp;TCC +N196=Atalanta Sosnoff Cap;ATL +N197=Atlantic Energy N.J.;ATE +N198=Atlantic Richfield Co.;ARC +N199=Atlantic Richfield Co;LYX +N200=Atlas Corporation;AZ +N201=Atmos Energy Corp;ATO +N202=Augat Incorporated;AUG +N203=Australia & New Zealand Bank Group;ANZ +N204=Austria Fund Inc;OST +N205=Austrialia New Zealand Bank pf;ANZ+ +N206=Austrian Stock Index Notes;SPJ +N207=Authentic Fitness Corp;ASM +N208=Automated Security Holdings;ASI +N209=Automatic Data Process;AUD +N210=Autozone Inc.;AZO +N211=Avalon Properties Inc;AVN +N212=AVEMCO Cp;AVE +N213=Avery Dennison Cp;AVY +N214=Aviall Inc;AVL +N215=Avnet Incorp.;AVT +N216=Avon Products Inc.;AVP +N217=AVX Corp;AVX +N218=Aydin Corporation;AYD +N219=Aztar Cp;AZR +N220=B J Services Co;BJS +N221=Bairnco Corp;BZ +N222=Baker Fentress & Co;BKF +N223=Baker Hughes;BHI +N224=Baldor Electric Co.;BEZ +N225=Ball Corp.;BLL +N226=Ballantyne of Omaha Inc;BTN +N227=Ballard Medical Products;BMP +N228=Bally Entertainment;BLY +N229=Baltimore Gas And Electric;BGE +N230=Banc One;ONE +N231=Banco Bilbao Vizcaya S A;BBV +N232=Banco Central Sa Dep Sh;BCH +N233=Banco Commercial Portugues ADR;BPC +N234=Banco De Edwards Adr;AED +N235=Banco De Santander Soc An;STD +N236=Banco France Del Rio De La Plata;BFR +N237=Banco Ganadero;BGA +N238=Banco Industrial Colombiano Sa;CIB +N239=Banco Latin Americano De Exportaciones;BLX +N240=Banco Ohiggins ADR;OHG +N241=Banco Osorno La Union;BOU +N242=Banco Wiese Limitado ADR;BWP +N243=Bancorp Hawaii Inc;BOH +N244=Banctech Inc;BTC +N245=Bandag Inc Cl A;BDGA +N246=Bandag Inc.;BDG +N247=Bangor Hydro El;BGR +N248=Bank Amer Pref M;BAC+M +N249=Bank America Corp;BAC +N250=Bank Of Boston Corp.;BKB +N251=Bank Of Montreal;BMO +N252=Bank Of New York Co;BK +N253=Bank of Tokyo Mitsubishi Ltd;MBK +N254=Banker Life Holdings Corp;BLH +N255=Bankers Note Inc;TBN +N256=Bankers Trust;BT +N257=Banner Aerospace Inc;BAR +N258=Barclay Banks;BCS +N259=Barclays Bank Plc Pf Series C;BCB+C +N260=Bard (C.R.) Inc;BCR +N261=Barnes & Noble Inc;BKS +N262=Barnes Group Inc;B +N263=Barnett Bank Of Florida;BBI +N264=Barrett Resource Cp;BRR +N265=Barrick Gold Corp;ABX +N266=Barry R G Cp;RGB +N267=Bass Plc Ads;BAS +N268=Battle Mountain Gold Class A;BMG +N269=Bausch & Lomb Inc.;BOL +N270=Baxter Intl;BAX +N271=Bay Apartment Community;BYA +N272=Bay State Gas Co;BGC +N273=BBN Corp;BBN +N274=BCE Inc;BCE +N275=Bea Income Fund;FBF +N276=Bea Strat Income Fund;FBI +N277=Beacon Properties;BCN +N278=Bear Stearns Co;BSC +N279=Bearings Inc;BER +N280=Beazer Homes USA Inc;BZH +N281=Beckman Instrument Inc.;BEC +N282=Becton Dickinson Co.;BDX +N283=Bedford Property Investors;BED +N284=Belden Inc;BWC +N285=Belding Hemingway;BHY +N286=Bell & Howell Co;BHW +N287=Bell Atlantic Cp.;BEL +N288=Bell Industries;BI +N289=Bell South Corp.;BLS +N290=Belo A H;BLC +N291=Bemis Co. Inc.;BMS +N292=Beneficial Corp.;BNL +N293=Benetton Group Spa;BNG +N294=Benguet Corp Class B;BE +N295=Benson Eyecare Corp;EYE +N296=Berg Electronics;BEI +N297=Bergen Brunswig Cp;BBC +N298=Berkshire Hathaway Inc;BRK +N299=Berkshire Reality Co;BRI +N300=Berlitz Intl Inc;BTZ +N301=Berry Petroleum Co Class A;BRY +N302=Best Buy Co. Inc;BBY +N303=Bet Holdings Class A;BTV +N304=Bet Public Ltd Co.;BEP +N305=Bethlehem Steel Corp.;BS +N306=Bethlehem Steel Cp Pf $5.00;BS+ +N307=Betz Laboratories Inc;BTL +N308=Beverly Enterprises;BEV +N309=Big Flower Press Holdings Inc;BGF +N310=Bindley Western Ind;BDY +N311=Bio Whittaker Inc;BWI +N312=Biocraft Labs Inc;BCL +N313=Biovail Corp;BVF +N314=Birmingham Steel Corp;BIR +N315=Black & Decker Mfg.;BDK +N316=Black Hills Corp;BKH +N317=Blackrock 1998 Term Trust Inc;BBT +N318=Blackrock 1999 Term Tr;BNN +N319=Blackrock 2001 Term Trust Inc;BLK +N320=Blackrock Advantage Term Trust;BAT +N321=Blackrock CA Ins Muni 2008;BFC +N322=Blackrock FL Ins Muni 2008;BRF +N323=Blackrock Income Trust;BKT +N324=Blackrock Ins Muni 2008;BRM +N325=Blackrock Insured Muni 2008;BMT +N326=Blackrock Inv Qual Muni;BKN +N327=Blackrock Target Trust Inc;BTT +N328=Blackstone Investment Quality Term Trust;BQT +N329=Blackstone Muni Target Term Trust Inc;BMN +N330=Blackstone N Amer Government Income Trus;BNA +N331=Blackstone Strategic Term Trust;BGT +N332=Blanch Holdings Inc;EWB +N333=Block (H & R);HRB +N334=Blount Inc Cl A;BLTA +N335=Blount Inc Cl B;BLTB +N336=Blue Chip Value Fund Inc.;BLU +N337=Bluegreen Corp;BXG +N338=Blyth Industries;BTH +N339=BMC Inc;BMC +N340=Boeing Co.;BA +N341=Boise Cascade Corp.;BCC +N342=Boise Cascade Office Products;BOP +N343=Bombay Co Inc;BBA +N344=Borden Chemical & Plastics Lp Uts;BCU +N345=Borders Group;BGP +N346=Borg Warner Automotive Inc;BWA +N347=Borg-warner Security Corp;BOR +N348=Boston Beer Co Cl A;SAM +N349=Boston Celtics Lp;BOS +N350=Boston Edison Co.;BSE +N351=Boston Scientific Corp;BSX +N352=Bowater Inc;BOW +N353=Boyd Gaming Inc;BYD +N354=Bradlees Inc;BLE +N355=Bradley Real Estate Tr Sbi;BTR +N356=Brazil Fund;BZF +N357=Brazilian Equity Fund;BZL +N358=BRE Properties Inc;BRE +N359=Breed Technology;BDT +N360=Briggs & Stratton Corp.;BGG +N361=Brilliance China Automotive Holding;CBA +N362=Brinker International Inc;EAT +N363=Bristol Hotel Co;BH +N364=Bristol Myers Squibb Co.;BMY +N365=Brit Pet Pru Bay Rlty Tr;BPT +N366=British Airways;BAB +N367=British Gas;BRG +N368=British Petroleum;BP +N369=British Petroleum ADR Pp;BP_P +N370=British Sky Broadcasting Group;BSY +N371=British Steel Pp ADR;BST +N372=British Telecom;BTY +N373=Broken Hill Propriety;BHP +N374=Brooke Group Ltd;BGL +N375=Brooklyn Union Gas Co;BU +N376=Brown & Sharpe Mfg. Co.;BNS +N377=Brown Group;BG +N378=Brown-Foreman Class B;BFB +N379=Brown-foreman Inc. Class A;BFA +N380=Browning-Ferris Ind;BFI +N381=Brt Realty Trust Sbi;BRT +N382=Brunswick Corp.;BC +N383=Brush Wellman Inc.;BW +N384=BT Office Products Int'l Inc;BTF +N385=Buckeye Cellulose Corp;BKI +N386=Buckeye Partners Lp;BPL +N387=Buenos Aires Enbotelladora ADR;BAE +N388=Bufete Industries;GBI +N389=Burlington Coat Factory Warehouse;BCF +N390=Burlington Industries Equity Inc;BUR +N391=Burlington Northern Santa Fe Corp;BNI +N392=Burlington Resource Coal Seam Gas Royalt;BRU +N393=Burlington Resources;BR +N394=Burnham Pacific Property Inc;BPP +N395=Bush Boake Allen Inc;BOA +N396=Bush Ind Inc Cl A;BSH +N397=Cable & Wireless Plc;CWP +N398=Cabletron Systems;CS +N399=Cabot Corporation;CBT +N400=Cabot Oil & Gas Cp;COG +N401=Cadence Design Sys Inc;CDN +N402=Cal Fed Bancorp Inc.;CAL +N403=Cal Reit Sbi;CT +N404=Caldor Corp;CLD +N405=Calgon Carbon Cp;CCC +N406=Cali Realty;CLI +N407=Caliber Systems;CBB +N408=Calienergy Co;CE +N409=Calif Water Serv Co;CWT +N410=Callaway Golf Cp;ELY +N411=Calmat Co.;CZM +N412=Camco International Inc;CAM +N413=Camden Property Trust Sbi;CPT +N414=Campbell Resources Inc;CCH +N415=Campbells Soup Co.;CPB +N416=Canadian Pacific Ltd.;CP +N417=Capital American Financial;CAF +N418=Capital One Financial;COF +N419=Capital Re Corp;KRE +N420=Capmac Holdings Inc;KAP +N421=Capstead Mortgage Corp;CMO +N422=Capstone Capital Cp;CCT +N423=Capsure Holdings Corp;CSH +N424=Cardinal Health Inc;CAH +N425=Career Horizons Inc;CHZ +N426=Caremark Interrnational Inc;CK +N427=Caribiner Intl Inc;CWC +N428=Carlisle Corp;CSL +N429=Carlisle Plastics Inc;CPA +N430=Carmike Cinemas Inc Class A;CKE +N431=Carnival Corp;CCL +N432=Carolina P & L 8.55%;CPD +N433=Carolina Power & Light;CPL +N434=Carpenter Technology;CRS +N435=Carr Gottstein Food;CGF +N436=Carr Realty;CRE +N437=Carson Pirie Scott & Co;CRP +N438=Carter Wallace Inc.;CAR +N439=Cascade Natural Gas;CGC +N440=Case Corp;CSE +N441=Cash Amer Investments;PWN +N442=Castech Aluminum Group;CTA +N443=Catalina Lighting Inc;LTG +N444=Catalina Marketing Cp;POS +N445=Catellus Development Cp;CDX +N446=Caterpillar Tractor;CAT +N447=CBL & Associates Properties;CBL +N448=CDI Corp;CDI +N449=Cedar Fair LP;FUN +N450=Centex Corp.;CTX +N451=Central & Southwest Cp;CSR +N452=Central European Equity Fund;CEE +N453=Central Hudson Gas & Electric;CNH +N454=Central Illinois Public Serv;CIP +N455=Central Louisiana Electric;CNL +N456=Central Maine Power;CTP +N457=Central Newspapers Inc;ECP +N458=Central Parking Corp;PK +N459=Central Transport Rental Group;TPH +N460=Central Vermont Pub Svc;CV +N461=Centura Banks Inc;CBC +N462=Centurior Energy;CX +N463=Century Telep Entpr;CTL +N464=Cenvill Invest Unpaired;CVI +N465=Ceridian Corp;CEN +N466=Champion Enterprises;CHB +N467=Champion Intl;CHA +N468=Chaparral Steel Co;CSM +N469=Chart House Enterprises Inc;CHT +N470=Chart Industries Inc;CTI +N471=Chase Brass Ind;CSI +N472=Chase Manhattan Bank Pf Series I;CMB+I +N473=Chase Manhatten 8.32;CMB+L +N474=Chase Manhatten 8.375;CMB+H +N475=Chase Manhatten 8.5;CMB+K +N476=Chase Manhatten 9.08;CMB+J +N477=Chase Manhatten pf C;CMB+C +N478=Chase manhatten pf D;CMB+D +N479=Chase Manhatten pf E;CMB+E +N480=Chase Manhatten pf F;CMB+F +N481=Chateau Properties;CPJ +N482=Chaus Bernard;CHS +N483=Check Point Systems;CKP +N484=Chelsea GCA Realty Inc;CCG +N485=Chemed Corp;CHE +N486=Chesapeake Corp;CSK +N487=Chesapeake Energy Corp;CHK +N488=Chesapeake Util Cp;CPK +N489=Chevron;CHV +N490=Chic By H I S;JNS +N491=Chile Fund;CH +N492=Chilgener ADR;CHR +N493=China Fund Inc;CHN +N494=China Tire Holding Ltd;TIR +N495=China Yuchai Intl;CYD +N496=Chiquita Brands Intl;CQB +N497=Chock Full O Nuts;CHF +N498=Chris Craft Ind.;CCN +N499=Christiana Companies;CST +N500=Chromecraft Revington Inc;CRC +N501=Chrysler;C +N502=Chubb Corp. (The);CB +N503=Church & Dwight Co Inc;CHD +N504=Chyron Corp;CHY +N505=CIGNA;CI +N506=Cigna Hi Income Shares;HIS +N507=Cilcorp Inc Hldg Co.;CER +N508=Cincinnati Bell Hldg Co.;CSN +N509=Cincinnati Milacrom;CMZ +N510=Cineplex Odeon Corp;CPX +N511=CINergy Corp;CIN +N512=Circle K Corp;CRK +N513=Circuit City Stores;CC +N514=Circus Circus Enterprises;CIR +N515=Citicorp;CCI +N516=Citicorp Pf E;CCI+E +N517=Citizens Corp;CZC +N518=Citizens Util Class A;CZNA +N519=Citizens Util Class B;CZNB +N520=City Natl Cp;CYN +N521=CKE Restaurants;CKR +N522=Claire's Stores Inc;CLE +N523=Clarcor Inc;CLC +N524=Clayton Homes Inc;CMH +N525=Clear Channel Inc;CCU +N526=Clemente Global Growth Fund;CLM +N527=Cleveland-Cliffs Inc Co.;CLF +N528=Clorox (The) Co;CLX +N529=CMAC Investments Corp;CMT +N530=CMI Corp;CMX +N531=CML Group Inc;CML +N532=CMS Energy;CMS +N533=CNA Financial;CNA +N534=CNA Income Shares Inc.;CNN +N535=Coachman Ind.;COA +N536=Coast Savings & Loan Asc;CSA +N537=Coastal Corp;CGP +N538=Coastal Physician Group;DR +N539=Coastcast Corp;PAR +N540=Coca Cola Co.;KO +N541=Coca Cola Enterprise;CCE +N542=Coca-Cola Femsa ADR;KOF +N543=Coeur D'alene Mines Cp;CDE +N544=Cohen & Steers Tot Ret;RFI +N545=Cold Metal Products Inc;CLQ +N546=Cole National;CNJ +N547=Cole Production;KCP +N548=Coleman;CLN +N549=Coles Myer Ltd ADR;CM +N550=Colgate Plus;CL+ +N551=Colgate-Palmolive Co.;CL +N552=Collins & Aikman Cp;CKC +N553=Colonial Bancgroup Class A;CNB +N554=Colonial High In Muni Tr;CXE +N555=Colonial Intermarket Income Trust I;CMK +N556=Colonial Intermediate Fund;CIF +N557=Colonial Inv Muni Tr;CXH +N558=Colonial Muni;CMU +N559=Colonial Properties Trust Sbi;CLP +N560=Coltec Industries Inc;COT +N561=Columbia Gas Systems;CG +N562=Columbia/HCA Healthcare Corp;COL +N563=Columbus Realty Trust Sbi;CLB +N564=Comdisco Inc;CDO +N565=Comerica Inc;CMA +N566=Commerce Group Inc;CGI +N567=Commercial Federal Cp;CFB +N568=Commercial Intertech Cp;TEC +N569=Commercial Metals Co;CMC +N570=Commercial Net Leasing Reality Inc;NNN +N571=Commonwealth Egy Sbi;CES +N572=Communication Satellite;CQ +N573=Community Health Systems Inc;CYH +N574=Community Psychiatric;CMY +N575=Compania De Telecomm De Chile As ADR;CTC +N576=Compaq Computer;CPQ +N577=Comprehensive Care Corp;CMP +N578=CompUSA Inc;CPU +N579=Computer Assoc Intl Inc;CA +N580=Computer Science Corp.;CSC +N581=Computer Task Group Inc;TSK +N582=Computervision Corp;CVN +N583=ConAgra Inc.;CAG +N584=Cone Mills Cp;COE +N585=Congoleum Corp;CGM +N586=Conn Energy Corp;CNE +N587=Connecticut Natural Gas;CTG +N588=Conrail Inc;CRR +N589=Cons Edison 4.65 Pf Series C;ED+C +N590=Cons Edison 5.00 Pf Series A;ED+A +N591=Conseco Inc;CNC +N592=Consl Papers Inc;CDP +N593=Consolidated Edison NY;ED +N594=Consolidated Freightway;CNF +N595=Consolidated Natural Gas;CNG +N596=Consolidated Stores Cp;CNS +N597=Consorci G Grupo Dina ADR;DIN +N598=Contifinancial Corp;CFN +N599=Continental Can Corp;CAN +N600=Continential Airlines Class A;CAIA +N601=Continential Airlines Class B;CAIB +N602=Continuum Company Inc;CNU +N603=Contl Homes Holding Cp;CON +N604=Convenience Holding Co;CNV +N605=Converse;CVE +N606=Cooker Restaurant Corp;CGR +N607=Cooper Cameron Corp;RON +N608=Cooper Industries Inc.;CBE +N609=Cooper Tire & Rubber;CTB +N610=Coopervision;COO +N611=Coram Healthcare Corp;CRH +N612=Cordiant ADR;CDA +N613=Core Business Services;CBS +N614=Core Ind. Inc;CRI +N615=Corestates Finan Cp;CFL +N616=Corimon Inc;CRM +N617=Corning Inc;GLW +N618=Corporacion Bancaria De Espana ADR;AGR +N619=Corporate High Yield Fund;COY +N620=Corporate High Yield Fd II;KYT +N621=Corrections Corp Of America;CXC +N622=Corrpro Cos;CO +N623=Counsellors Tandem Sec Fd;CTF +N624=Countrybasket France Index;GXF +N625=Countrybasket German;GXG +N626=Countrybasket Hong Kong Index;GXH +N627=Countrybasket Italy Index;GXI +N628=Countrybasket Japan;GXJ +N629=Countrybasket S Africa;GXR +N630=Countrybasket UK Index;GXK +N631=Countrybasket US Index;GXU +N632=Countrywide Credit Ind.;CCR +N633=Cousins Properties Inc;CUZ +N634=Cox Communications;COX +N635=CPC Intl;CPC +N636=CPI Corp;CPY +N637=Craig Corp;CRG +N638=Crane Co;CR +N639=Crawford & Co Class A;CRDA +N640=Crawford & Co Class B;CRDB +N641=Cray Research Inc.;CYR +N642=Credicorp Inc;BAP +N643=Crescent Real Estate Equities;CEI +N644=Crestar Financial Corp;CF +N645=CRI Liquid Reit Income Fund;CFR +N646=Criimi Mae Inc;CMM +N647=Cristalerias De Chile ADR;CGW +N648=Crompton & Knowles Cp;CNK +N649=Cross Timber Royalty Trust;CRT +N650=Cross Timbers Oil Co;XTO +N651=Crown American Realty Trust Sbi;CWN +N652=Crown Cork & Seal;CCK +N653=Crown Crafts Inc;CRW +N654=Crown Pacific Partners;CRO +N655=CSS Industries;CSS +N656=CSX Corp.;CSX +N657=CTS Corporation;CTS +N658=CUC Intl Inc;CU +N659=Culbro Corp;CUC +N660=Culligan Water Tech;CUL +N661=Cummins Engines;CUM +N662=Current Income Shares;CUR +N663=Curtiss Wright Corp;CW +N664=CWM Mortgage Holding;CWM +N665=Cycare Systems Inc;CYS +N666=Cypress Amax Minerals;CYM +N667=Cypress Semiconductor Corp;CY +N668=Cytec Industries;CYT +N669=Czech Republic Fund;CRF +N670=D R Horton Inc;DHI +N671=Daimler Benz Ag ADR;DAI +N672=Dallas Semiconductor Cp;DS +N673=Dames & Moore Inc;DM +N674=Dana Corp;DCN +N675=Danahr Corp;DHR +N676=Daniel Ind Inc;DAN +N677=Darden Restaurants;DRI +N678=Data General Corp.;DGN +N679=Data Water/waste;DWW +N680=Datapoint Corp.;DPT +N681=Dayton Hudson Corp.;DH +N682=DDL Electronics Inc;DDL +N683=De Rigo Spa Adr;DER +N684=Dean Foods Co.;DF +N685=Dean Witter Discover & Co;DWD +N686=Dean Witter Gov't Income Trust;GVT +N687=Debartolo Realty Corp;EJD +N688=Deere & Co;DE +N689=Delaware Group Div & Income Fd;DDF +N690=Deleware Group Global Dividend;DGF +N691=Delmarva Power;DEW +N692=Delta & Pine Land Co;DLP +N693=Delta Air Lines;DAL +N694=Delta Airlines P;DAL+C +N695=Delta Woodside Ind Inc;DLW +N696=Deluxe Check Printers;DLX +N697=Department 56 Inc;DFS +N698=Desc Sa De Service ADR;DES +N699=Desoto Inc;DSO +N700=Destec Energy Inc;ENG +N701=Detroit Diesel Corp;DDC +N702=Developers Diversified Reality Corp;DDR +N703=Dexter Corp;DEX +N704=Diagnostic Product Corp;DP +N705=Dial Corp (The);DL +N706=Diamond Offshore Drilling;DO +N707=Diamond Shamrock Refinery;DRM +N708=Diana Corp;DNA +N709=Diebold Inc.;DBD +N710=Digital Equipment Cp.;DEC +N711=Dillard Dept Stores;DDS +N712=Dime Bancorp Inc;DME +N713=Dimon Inc;DMN +N714=Disco Adr;DXO +N715=Discount Auto Parts Inc;DAP +N716=Disney (Walt) Prod.;DIS +N717=Dole Foods;DOL +N718=Dollar General Corp;DG +N719=Dominion Res Black Warrior Tr;DOM +N720=Dominion Resources Inc;D +N721=Domtar Inc;DTC +N722=Donaldson Co Inc;DCI +N723=Donaldson Lufkin & Jenrette Inc;DLJ +N724=Donnelley (RR) & Sons;DNY +N725=Dover Cp;DOV +N726=Dow Chemical Co.;DOW +N727=Dow Jones & Co. Inc.;DJ +N728=Downey Financial;DSL +N729=DPL Inc;DPL +N730=DQE Inc.;DQE +N731=Dravo Corp;DRV +N732=Dresser Ind.;DI +N733=Dreyfus (Louis) Natural Gas Cp;LD +N734=Dreyfus Strategic Gov't Fund;DSI +N735=Dreyfus Strategic Municipals Inc;LEO +N736=Dreyfus Strategic Muni Bond Fund Inc;DSM +N737=DST Systems Inc;DST +N738=DTE Energy Co;DTE +N739=Duff & Phelps Credit Rating;DCR +N740=Duff & Phelps Util & Cp Bond Tr;DUC +N741=Duff & Phelps Utilities;DNP +N742=Duff Phelps Utilities Tax Free Income;DTF +N743=Duke Power Co.;DUK +N744=Duke R Ca;DRE +N745=Dun & Bradstreet;DNB +N746=Dupont (EI) De Nemour;DD +N747=Dupont 3.50 Pf Series A;DD+A +N748=Dupont 4.50 Pf Series B;DD+B +N749=Duracell Intl;DUR +N750=Duty Free Intl Inc;DFI +N751=DVI Inc;DVI +N752=Dycom Industries Inc;DY +N753=Dyersburg Corp;DBG +N754=Dynamics Corp Amer;DYA +N755=E G & G;EGG +N756=E'Town Cp;ETW +N757=EA Industries Inc;EA +N758=Earthgrains Co;EGR +N759=Eastern Amer Nat Gas;NGT +N760=Eastern Enterprises;EFU +N761=Eastern Utilities Asc;EUA +N762=Eastgroup Properties Sbi;EGP +N763=Eastman Chemical Co;EMN +N764=Eastman Kodak Co.;EK +N765=Eaton Corp.;ETN +N766=ECC Group Plc ADR Spons;ENC +N767=Echlin Inc.;ECH +N768=Eckerd Corp;ECK +N769=Ecolab Inc;ECL +N770=Edison Brothers Store;EBS +N771=Edison Intl;EIX +N772=EDO Corp;EDO +N773=Educational Computer;ECC +N774=Ek Chor China Motorcycle;EKC +N775=Ekco Group;EKO +N776=El Paso Natural Gas;EPG +N777=Elan Cp Plc;ELN +N778=Elcor Corp;ELK +N779=Elf Aquitaine ADR;ELF +N780=Eljer Industrials;ELJ +N781=Elsag Bailey Process Automation;EBY +N782=Elscint Ltd.;ELT +N783=Elsevier ADR;ENL +N784=Embotelladora Andina;AKO +N785=EMC Corp;EMC +N786=Emerging Germany Fund Inc;FRG +N787=Emerging Markets Float Rate Fd;EFL +N788=Emerging Markets Income Fund;EMD +N789=Emerging Markets Income Fd II;EDF +N790=Emerging Markets Telecom Fund;ETF +N791=Emerging Mexico Fund Inc;MEF +N792=Emerging Tiger Fund;TGF +N793=Emerson Electric Co;EMR +N794=Empire District Electric;EDE +N795=Empresa Nacional De Electric;ELE +N796=Empresa Ntl De Electri;EOC +N797=Empresas Ica Sociedad Controladora Sa;ICA +N798=Empresas La Moderna;ELM +N799=Emrg Mrkt Infrastructure;EMG +N800=Energen;EGN +N801=Energy North Inc;EI +N802=Energy Ventures;EVI +N803=Enersis ADR;ENI +N804=Englehard Corp.;EC +N805=Enhance Financial Services Group;EFS +N806=ENI Adr;E +N807=Ennis Business Forms;EBF +N808=Enova Corp;ENA +N809=Enron Corp;ENE +N810=Enron Global Power & Pipeline;EPP +N811=Enron Liquids Pipeline Lp;ENP +N812=Enron Oil & Gas Co - Ny;EOG +N813=Ensco Intl;ESV +N814=ENSERCH Corp.;ENS +N815=Enserch Explor Part Ltd.;EEX +N816=Entergy Corp;ETR +N817=Enterprise Oil;ETP+ +N818=Enterprise Oil Plc ADR;ETP +N819=Environmental Elements;EEC +N820=Eott Energy Partners;EOT +N821=EQK Realty Investors;EKR +N822=Equifax Incorp.;EFX +N823=Equitable Companies Inc;EQ +N824=Equitable Of Iowa Class B;EIC +N825=Equitable Resources Co.;EQT +N826=Equity Resource Intl;EQR +N827=Esco Electronics Cp;ESE +N828=Espirito Santa Financial Holding ADR;ESF +N829=Essex Property Trust;ESS +N830=Esterline Corp;ESL +N831=Ethyl Cp;EY +N832=Europe Fund Inc;EF +N833=Evans Withycomb Residential Inc;EWR +N834=Excel Ind Inc;EXC +N835=Excel Reality Trust;XEL +N836=Excelsior Income Shrs;EIS +N837=Executive Risk Inc;ER +N838=Exel Ltd;XL +N839=Exide Corp;EX +N840=Exxon Corp.;XON +N841=F & M Natl Cp;FMN +N842=Fabri-Centers Of Amer Cl A;FCAA +N843=Factory Stores Of America Inc;FAC +N844=FAI Insurance Ltd ADR;FAI +N845=Fairchild Cp;FA +N846=Fairfield Communities;FFD +N847=Falcon Building Prod;FB +N848=Falcon Products;FCP +N849=Family Dollar Stores;FDO +N850=Fansteel Inc;FNL +N851=Farah Mfg Co.;FRA +N852=Fay's Drug Co. Inc;FAY +N853=Fedders Corp.;FJC +N854=Federal Express Corp.;FDX +N855=Federal Home Loan Cp;FRE +N856=Federal Home Loan Pref;FRE+ +N857=Federal Mogul Corp;FMO +N858=Federal Natl Mortgage;FNM +N859=Federal Rlty Inv Tr Sbi;FRT +N860=Federal Signal Corp;FSS +N861=Federated Department Stores;FD +N862=Ferrellgas Partners Lp;FGP +N863=Ferro Corp;FOE +N864=Fiat S P A Ads;FIA +N865=Fidelity Advisor Emerging Asia Fund;FAE +N866=Fidelity Advisory Korea Fund;FAK +N867=Fidelity Natl Financial Inc;FNF +N868=Fieldcrest Cannon Inc;FLD +N869=Fila Holdings Spa ADR;FLH +N870=Financial Security Assurance Holding;FSA +N871=Fingerhut Cos;FHT +N872=Finova Group;FNV +N873=First Amer Bank & Trust Class A;FOA +N874=First Amer Finan Cp;FAF +N875=First Bank Of America;FBA +N876=First Bank System Inc;FBS +N877=First Brands Cp;FBR +N878=First Chicago NBD Corp;FCN +N879=First Colony Corp;FCL +N880=First Commonwealth Financial Corp;FCF +N881=First Commonwealth Fund Inc;FCO +N882=First Data Corp;FDC +N883=First Federal Financial;FED +N884=First Fincl Fund;FF +N885=First Indust Rlty Tr;FR +N886=First Israel Fund;ISL +N887=First Mississippi Cp;FRM +N888=First Philippine Fund;FPF +N889=First Union Corp;FTU +N890=First Union Real Estate Equity;FUR +N891=First USA Inc;FUS +N892=First USA Paymentech;PTI +N893=First Va Banks Inc;FVB +N894=Firstar Corp;FSR +N895=Firstbank P Rico Commercial;FBP +N896=Fisher Scientific Intl;FSH +N897=Fleet Financial Group Inc;FLT +N898=Fleetwood Enterprises;FLE +N899=Fleming Co's Inc;FLM +N900=Fletcher Challenge Building;FLB +N901=Fletcher Challenge Energy;FEG +N902=Fletcher Challenge Ltd Forest Div;FFS +N903=Fletcher Challenge Paper;FLP +N904=Flightsafety Intl Inc;FSI +N905=Florida East Coast Ind Inc Hld;FLA +N906=Florida Progress Corp;FPC +N907=Flowers Ind.;FLO +N908=Fluke Cp;FLK +N909=Fluor Corp.;FLR +N910=FMC Cp;FMC +N911=FMC Gold Co.;FGL +N912=Food Maker;FM +N913=Foodbrands America;FDB +N914=Ford Motor Co Pf;F+ +N915=Ford Motor Co.;F +N916=Ford Pref B.8%;F+B +N917=Foreign & Colonial Emrg East;EME +N918=Fort Dearborn Income;FTD +N919=Fortis Securities Inc;FOR +N920=Foster Wheeler Corp.;FWC +N921=Foundation Health Corp;FH +N922=Foxmeyer Health Corp;FOX +N923=FPL Group;FPL +N924=France Growth Fund Inc;FRF +N925=Franchise Finance Corp Of Amer;FFA +N926=Franklin Electronic Publishers;FEP +N927=Franklin Multi Income Trust Sbi;FMI +N928=Franklin Principal Maturity Trust;FPT +N929=Franklin Quest Inc;FNQ +N930=Franklin Res Inc;BEN +N931=Franklin Universal Tr;FT +N932=Frederick Of Hollywood;FOHA +N933=Frederick's Hollywood;FOHB +N934=Freeport Mcmoran;FTX +N935=Freeport Mcmoran Copper Co;FCXA +N936=Freeport McMoran Copper & Gold Cl B;FCX +N937=Freeport McMoran Oil & Gas Tr Ubi;FMR +N938=Freeport Mcmoran Res Cp Dep;FRP +N939=Frontier Corp;FRO +N940=Frontier Insurance Grp Inc;FTR +N941=Fruehauf Trailer;FTC +N942=Fruit Of The Loom;FTL +N943=Fund Amer Enterprises Hlgs;FFC +N944=Furniture Brands Intl;FBN +N945=Furon Co;FCY +N946=Furr's/Bishop Inc;CHI +N947=G&L Realty Corp;GLR +N948=Gabelli Convtble Sec;GCV +N949=Gabelli Equity Trust Inc;GAB +N950=Gabelli Global Multimedia;GGT +N951=Gables Residential Tr;GBP +N952=Galey & Lord Inc;GNL +N953=Gallagher Arthur J & Co;AJG +N954=Galoob Lewis Toys;GAL +N955=Gannett Co. Inc.;GCI +N956=Gap Inc;GPS +N957=GATX Corp;GMT +N958=Gaylord Entertainment Co;GET +N959=GC Cos;GCX +N960=Gemini II;GMI+ +N961=Gemini II Inc Cap Shares;GMI +N962=Gen Cp;GY +N963=Gen Rad Inc.;GEN +N964=Genentech Callable Putable Common Secs;GNE +N965=General Amer Investment;GAM +N966=General Datacomm Ind.;GDC +N967=General Dynamics;GD +N968=General Electric Co.;GE +N969=General Growth Properties;GGP +N970=General Host;GH +N971=General Housewares;GHW +N972=General Instrument Cp;GIC +N973=General Mills;GIS +N974=General Motors;GM +N975=General Motors 7.92;GM+D +N976=General Motors Class E;GME +N977=General Motors Cp Cl H;GMH +N978=General Physics Corp;GPH +N979=General Public Utilities;GPU +N980=General Re Corp;GRN +N981=General Signal Corp.;GSX +N982=Genesco Inc;GCO +N983=Genesis Health Ventures;GHV +N984=Geneva Steel Cp;GNV +N985=Genuine Parts Co.;GPC +N986=Geon Inc;GON +N987=Georgia Gulf Corp;GGC +N988=Georgia Pacific Corp.;GP +N989=Georgia Power Pf L;GPE+L +N990=Gerber Scientific Inc.;GRB +N991=Germany Fund Inc;GER +N992=Gerrity Oil & Gas Cp;GOG +N993=Getty Petroleum Corp;GTY +N994=Giant Group Inc;GPO +N995=Giant Industries Inc;GI +N996=Gillette;G +N997=Glamis Gold Ltd;GLG +N998=Glaxo Plc ADR;GLX +N999=Gleason Corp;GLE +N1000=Glenborough Realty Trust Inc;GLB +N1001=Glenfed Inc Hldg Co.;GLN +N1002=Glimcher Realty Trust;GRT +N1003=Global Directmail;GML +N1004=Global Health Sciences Fund;GHS +N1005=Global High Income;GHI +N1006=Global Indust Tech Inc;GIX +N1007=Global Marine Inc;GLM +N1008=Global Natural Resources Inc;GNR +N1009=Global Partners Inc Fd;GDF +N1010=Global Small Cap Fund;GSG +N1011=GM Pref 9 1/8%;GM+Q +N1012=Goldcorp B;GGB +N1013=Goldcorp Inc;GGA +N1014=Golden West Financial;GDW +N1015=Goodrich (BF) Co.;GR +N1016=Goodrich Petroleum Corp;GDP +N1017=Goodyear Tire And Rubber;GT +N1018=Gottschalks Inc;GOT +N1019=Grace (WR) & Co.;GRA +N1020=Graco Inc;GGG +N1021=Grainger (WW);GWW +N1022=Grancare Inc;GC +N1023=Grand Casinos;GND +N1024=Grand Metropolitan Plc;GRM +N1025=Gray Communication System Inc;GCS +N1026=GRC Intl Inc;GRH +N1027=Great Atlantic/Pacific Tea;GAP +N1028=Great Lakes Chemical Corp;GLK +N1029=Great Nthrn Iron Ore;GNI +N1030=Great Western Financial;GWF +N1031=Greater China Fund;GCH +N1032=Green Mountain Power;GMP +N1033=Green Tree Acceptance;GNT +N1034=Greenbrier Cos;GBX +N1035=Greenwich Street Muni Fd;GSI +N1036=Griffon Corp;GFF +N1037=Growth Fund Of Spain Inc;GSP +N1038=Grubb & Ellis Co.;GBE +N1039=Grupo Casa Autrey ADR;ATY +N1040=Grupo Elektra SA;EKT +N1041=Grupo Embotellador De Mexico;GEM +N1042=Grupo Financiero Serfin ADR;SFN +N1043=Grupo Ind Durago;GID +N1044=Grupo Industrial Maseca;MSK +N1045=Grupo Iusacell SA class D;CELD +N1046=Grupo Iusacell Ser L;CEL +N1047=Grupo Mex Desarrollo;GMD +N1048=Grupo Radio Centro ADR;RC +N1049=Grupo Sideksa;SDK +N1050=Grupo Televisa Sa Gdr;TV +N1051=Grupo Tribasa Sa ADR;GTR +N1052=GT Global Dev Markets;GTD +N1053=Gt Great Europe Fund;GTF +N1054=GTE Corp;GTE +N1055=GTech Holdings Corp;GTK +N1056=Guaranty Natl Cp;GNC +N1057=Gucci Group NV;GUC +N1058=Guidant Corp;GDT +N1059=Guilford Mills Inc;GFD +N1060=Gulf Canada Ltd.;GOU +N1061=H&Q Healthcare Fund;HQH +N1062=H&Q Life Science Investors Inc;HQL +N1063=Haemonetics Corp;HAE +N1064=Hafslund Nycomed;HN +N1065=Halliburton Co.;HAL +N1066=Hallwood Group Inc;HWG +N1067=Hammon Hotels;JQH +N1068=Hancock Fabrics Inc;HKF +N1069=Hancock John B & Thrift Opp Fd;BTO +N1070=Hancock Patriot Dividend Fund II;PDT +N1071=Hancock Patriot Premium Div Fund Inc;PDF +N1072=Hancock Patriot Select Dividend Trust;DIV +N1073=Handleman Co.;HDL +N1074=Handy & Harman;HNH +N1075=Hanna M A Co.;MAH +N1076=Hannaford Bros Co.;HRD +N1077=Hanson Plc ADR;HAN +N1078=Harbourton Financial Services;HBT +N1079=Harcourt General Inc;H +N1080=Harland (John H) Co.;JH +N1081=Harley Davidson Inc;HDI +N1082=Harman Int'l Industries;HAR +N1083=Harnischfeger Ind. Inc.;HPH +N1084=Harrah Entertainment;HET +N1085=Harris Corp. (the);HRS +N1086=Harsco Corp;HSC +N1087=Harte Hanks Communication;HHS +N1088=Hartford Steam Boiler Ins;HSB +N1089=Hartmarx Cp;HMX +N1090=Harvey Casino Resorts;HVY +N1091=Hattaras Income Sec;HAT +N1092=Hawaiian Elect Co. Inc;HE +N1093=Hayes Wheels International;HAY +N1094=HCC Insurance Holding Inc;HCC +N1095=He Ro Group Ltd;HRG +N1096=Health Care Property Inv.;HCP +N1097=Health Care Reit;HCN +N1098=Health Care Retirement Corp;HCR +N1099=Health Images Inc;HII +N1100=Health Management Associates Inc;HMA +N1101=Health Systems Intl Inc;HQ +N1102=Health/Retirement Property Tr;HRP +N1103=Healthcare Realty Trust;HR +N1104=Healthplan Services;HPS +N1105=Healthsource Corp;HRC +N1106=Healthsource Inc;HS +N1107=Hecla Mining;HL +N1108=Heilig-Meyers Co.;HMY +N1109=Heinz H.J.;HNZ +N1110=Helmerich & Payne Inc;HP +N1111=Helvetia Fund Inc The;SWZ +N1112=Hercules Inc;HPC +N1113=Heritage U.S. Govt Income Fd;HGA +N1114=Hershey Foods Corp.;HSY +N1115=Hewlett-Packard Co.;HWP +N1116=Hexcel Corp/De;HXL +N1117=HGI Realty Inc;HGI +N1118=Hi Shear Ind.;HSI +N1119=Hi-Lo Automotive Inc;HLO +N1120=Hibernia Cp Class A;HIB +N1121=High Income Adv Tr II Sbi;YLT +N1122=High Income Adv Tr III Sbi;YLH +N1123=High Income Advantage Trust;YLD +N1124=High Income Oppor Fd;HIO +N1125=High Yield Income Fund Inc;HYI +N1126=High Yield Plus Fund Inc;HYP +N1127=Highlands Insurance Group;HIC +N1128=Highwoods Properties;HIW +N1129=Hilb, Rogal & Hamilton Co.;HRH +N1130=Hilenbrand Ind.;HB +N1131=Hilfiger Co;TOM +N1132=Hills Department Stores;HDS +N1133=Hilton Hotels Corp.;HLT +N1134=Hitachi;HIT +N1135=Hollinger Intl Inc;HLR +N1136=Home Depot;HD +N1137=Home Properties Of New York;HME +N1138=Home Shopping Network;HSN +N1139=Homeplex Mortgage Investments Cp;HPX +N1140=Homestake Mining Co.;HM +N1141=Honda Motor Co;HMC +N1142=Honeywell Inc.;HON +N1143=Hong Kong Telecom;HKT +N1144=Horace Mann Educators Cp;HMN +N1145=Horizon Healthcare Corp;HHC +N1146=Hormel Food Corp;HRL +N1147=Horsham Corp;HSM +N1148=Hospital Staffing Service Inc;HSS +N1149=Hospitality Franchise Systems Inc;HFS +N1150=Hospitality Properties Trust;HPT +N1151=Host Marriott Service;HMS +N1152=Houghton Mifflin Co.;HTN +N1153=House Of Fabrics Inc;HF +N1154=Household Int'l Inc Pf 9.5;HI+X +N1155=Household Intl.;HI +N1156=Houston Industries;HOU +N1157=Howell Corp;HWL +N1158=Hre Properties Ltd.;HRE +N1159=HS Resources;HSE +N1160=Huaneng Power Int;HNP +N1161=Hubbell Inc Cl A;HUBA +N1162=Hubbell Inc Cl B;HUBB +N1163=Hudson Foods Inc Class A;HFI +N1164=Huffy Corp;HUF +N1165=Hugh Supply Inc;HUG +N1166=Humana Inc.;HUM +N1167=Hunt Mfg Co.;HUN +N1168=Huntco Inc;HCO +N1169=Huntington Int'l Hldgs Plc ADR;HTD +N1170=Huntway Partners Lp;HWY +N1171=Hyperion 1997 Term Tr;HTA +N1172=Hyperion 1999 Term Trust Inc;HTT +N1173=Hyperion 2002 Term Tr;HTB +N1174=Hyperion 2005 Inv Grd Opp Tr;HTO +N1175=Hyperion Total Return & Income Fund;HTR +N1176=IBP Inc.;IBP +N1177=ICF Kaiser Intl Inc;ICF +N1178=ICN Pharmaceutical;ICN +N1179=Idaho Power Co.;IDA +N1180=Ideon Group;IQ +N1181=Idex Corp;IEX +N1182=IES Industries Inc;IES +N1183=Illinois Central Corp;IC +N1184=Illinois Tool Works;ITW +N1185=Illinova Corp;ILN +N1186=IMC Global Inc;IGL +N1187=Imco Recycling Inc;IMR +N1188=IMO Delaval Inc;IMD +N1189=Imperial Chemical Ind. Inc;ICI +N1190=Inco Ltd.;N +N1191=Income Opportun Fd 1999;IOF +N1192=Income Opportun Fd 2000;IFT +N1193=India Fund;IFN +N1194=India Growth Fund;IGF +N1195=Indiana Energy Inc;IEI +N1196=Indonesian Satellite Corp;IIT +N1197=Industrie Natuzzi ADR;NTZ +N1198=Infinity Broadcasting Corp;INF +N1199=Ingersoll-Rand Co.;IR +N1200=Inland Steel Co;IAD +N1201=Input-Output Inc;IO +N1202=Insignia Financial Group;IFS +N1203=Inst Nazion Dellwe Assicurazioni;INZ +N1204=Insteel Indus Inc;III +N1205=Int Technology Corp.;ITX +N1206=Int'l Game Technology;IGT +N1207=Int'l Specialty Products Inc.;ISP +N1208=Integon Corp;IN +N1209=Integra Financial Cp;ITG +N1210=Integrated Health Services Inc;IHS +N1211=Intellicall Inc;ICL +N1212=Inter Regional Financial;IFG +N1213=Intercapital Ca Ins Muni;IIC +N1214=Intercapital Ca Qual Muni Sec;IQC +N1215=Intercapital Income;ICB +N1216=Intercapital Ins Ca Muni;ICS +N1217=Intercapital Ins Muni Income Tr;IIM +N1218=Intercapital Ins Muni Sec;IMS +N1219=Intercapital Insured Municipal Bond;IMB +N1220=Intercapital Insured Municipal Trust;IMT +N1221=Intercapital NY Qual Muni Sec;IQN +N1222=Intercapital Qual Muni Inv Tr;IQI +N1223=Intercapital Qual Muni Sec;IQM +N1224=Intercapital Quality Municipal Investmen;IQT +N1225=Interlake Inc;IK +N1226=Interpool Inc;IPX +N1227=Interpublic Grp Of Co's;IPG +N1228=Interstate Bakeries;IBC +N1229=Interstate Johnson Lane Securities Inc;IJL +N1230=Interstate Power Co.;IPW +N1231=Intertan Int'l Inc;ITN +N1232=Intimate Brands Inc Cl A;IBI +N1233=Intl Aluminum;IAL +N1234=Intl Business Machines;IBM +N1235=Intl Colin Energy Cp;KCN +N1236=Intl De Ceramica ADR;ICM +N1237=Intl Family Entertainment Inc;FAM +N1238=Intl Flavor/Frag.;IFF +N1239=Intl Investment Securities;IIS +N1240=Intl Mutifoods;IMC +N1241=Intl Paper Co;IP +N1242=Intl Rectifier;IRF +N1243=Intl Shipholding Corp;ISH +N1244=Invesco Plc Adr;IVC +N1245=Ionics Inc;ION +N1246=IP Timberlands Ltd.;IPT +N1247=IPALCO Entprses Holding;IPL +N1248=Irish Investment Fund Inc;IRL +N1249=Irsa Inversiones Y Repres Grd;IRS +N1250=IRT Property/Ga;IRT +N1251=Irvine Apartment Communities;IAC +N1252=Isomedix Inc;ISO +N1253=ISS Intl Service;ISG +N1254=Istituto Mobiliare Italiano ADR;IMI +N1255=Italy Fund Inc.;ITA +N1256=ITT Corp;ITT +N1257=ITT Educational Service;ESI +N1258=ITT Hartford Group Inc;HIG +N1259=ITT Industries Inc;IIN +N1260=J&l Speciality Steel Inc;JL +N1261=Jackpot Enterprises;J +N1262=Jacobs Engineering Group;JEC +N1263=Jakarta Growth Fund Inc;JGF +N1264=James River Cp/Va;JR +N1265=Japan Equity Fund Inc;JEQ +N1266=Japan Otc Equity Fund Inc;JOF +N1267=Jardine Fleming China Region Fund;JFC +N1268=Jardine Fleming India Fund;JFI +N1269=JDN Realty Cp;JDN +N1270=Jefferies Group Inc;JEF +N1271=Jefferson Smurfit;JS +N1272=Jefferson-Pilot Corp.;JP +N1273=Jenny Craig Inc;JC +N1274=Jilin Chemical Indust;JCC +N1275=John Hancock Inc Sec;JHS +N1276=John Hancock Investment;JHI +N1277=John Hancock Pat Glob;PGD +N1278=John Hancock Patr Pf;PPF +N1279=Johnson & Johnson;JNJ +N1280=Johnson Controls;JCI +N1281=Johnstown Industries Inc;JII +N1282=Jones Apparel;JNY +N1283=Josten's Inc;JOS +N1284=JP Morgan Pref;JPM+A +N1285=JP Realty Inc;JPR +N1286=K III Communication;KCC+ +N1287=K Mart Cp;KM +N1288=K-III Communication;KCC +N1289=Kaiser Aluminum;KLU +N1290=Kaneb Pipeline Partners Lp;KPP +N1291=Kaneb Services;KAB +N1292=Kansas City Power & Light;KLT +N1293=Kansas City Sthrn Ind.;KSU +N1294=Katy Ind Inc;KT +N1295=Kaufman & Broad Home Cp;KBH +N1296=Kaydon Cp;KDN +N1297=KCS Energy Inc;KCS +N1298=Keithley Instru Inc;KEI +N1299=Kellog Co;K +N1300=Kellwood Co.;KWD +N1301=Kemper High Income Trust;KHI +N1302=Kemper Intermediate Gov't Tr;KGT +N1303=Kemper Multi Mkt Income Trust;KMM +N1304=Kemper Muni Inc Trust;KTF +N1305=Kemper Strategic Income Fd;KST +N1306=Kemper Strategic Muni Inc;KSM +N1307=Kennametal Inc;KMT +N1308=Kent Electronics Cp;KNT +N1309=Kerr Glass Mfg Co.;KGM +N1310=Kerr-McGee;KMG +N1311=Key Corp;KEY +N1312=Keystone Consol Ind.;KES +N1313=Keystone Intl.;KII +N1314=Kimberly Clark;KMB +N1315=Kimco Realty Corp;KIM +N1316=Kimmins Environmental Services Cp;KVN +N1317=King World Productions;KWP +N1318=Kinross Gold Corp;KGC +N1319=Kleinwort Benson Austral;KBA +N1320=KLM Royal Dutch Air;KLM +N1321=KN Energy Inc;KNE +N1322=Knight-Ridder Newspapers;KRI +N1323=Kohls Corp;KSS +N1324=Kollmorgen Corp;KOL +N1325=Koor Industries;KOR +N1326=Korea Electric;KEP +N1327=Korea Equity Fund;KEF +N1328=Korea Fund Inc;KF +N1329=Korean Investment Fund;KIF +N1330=Kranzco Reality Trust;KRT +N1331=Kroger Co.(the);KR +N1332=KU Energy;KU +N1333=Kubota Ltd;KUB +N1334=Kuhlman Corp;KUH +N1335=Kyocera Corp;KYO +N1336=Kysor Industrial Corp;KZ +N1337=L & N Housing Corp;LHC +N1338=L. L. & E Royalty Trust;LRT +N1339=LA Gear;LA +N1340=La Quinta Inns Inc;LQI +N1341=La-Z-Boy Chair;LZB +N1342=Laboratory Chile;LBC +N1343=Laboratory Corp Of Amer;LH +N1344=Laclede Gas Co.;LG +N1345=Lafarge Corp;LAF +N1346=Laidlaw Transportation Ltd Class B;LDWB +N1347=Laidlaw Transportation Class A;LDWA +N1348=Lakehead Pipeline Partners Lp;LHP +N1349=Lamson & Sessions Co.;LMS +N1350=Lands End Inc;LE +N1351=Lasmo Plc ADR;LSO +N1352=Latin Amer Discovery Fund;LDF +N1353=Latin Amer Equity Fund;LAQ +N1354=Latin America Dollar Income;LBF +N1355=Latin America Investment Fund Inc;LAM +N1356=Lauder (Estee) Cos Cl A;EL +N1357=Lawter Intl Inc;LAW +N1358=Lawyers Title;LTI +N1359=LCI International;LCI +N1360=Lear Seating;LEA +N1361=Learonal Inc;LRI +N1362=Lee Enterprises Inc;LEE +N1363=Legg Mason Inc;LM +N1364=Leggett & Platt Inc;LEG +N1365=Lehigh Group Inc;LEI +N1366=Lehman Brothers Holding;LEH +N1367=Lehman Latin Growth;LLF +N1368=Lennar Corporation;LEN +N1369=Leucadia Natl Corp;LUK +N1370=Leviathan Gas Pipeline;LEV +N1371=Levitz Furniture;LFI +N1372=Lexington Corporate Properties;LXP +N1373=Lexmark Intl Group;LXK +N1374=LG&E Energy Cp;LGE +N1375=Libbey Inc;LBY +N1376=Liberte Investors Sbi;LBI +N1377=Liberty All Star Equty Fund;USA +N1378=Liberty All-Star Growth Fund;ASG +N1379=Liberty Corp;LC +N1380=Liberty Financial Cos;L +N1381=Liberty Property Trus;LRY +N1382=Liberty Term Trust Inc;LTT +N1383=Life Partners Group;LPG +N1384=Life Re Corp;LRE +N1385=Lilly (Eli) & Co.;LLY +N1386=Limited Inc.;LTD +N1387=Lincoln Natl;LNC +N1388=Lincoln Natl Cv Sec Fund;LNV +N1389=Lincoln Natl Direct Plc;LND +N1390=Litton Ind. Inc.;LIT +N1391=Living Centers Of Amer Inc;LCA +N1392=Liz Claiborne;LIZ +N1393=Lockheed Martin Corp;LMT +N1394=Loctite Cp;LOC +N1395=Loews Corp;LTR +N1396=Logicon Inc;LGN +N1397=Lone Star Industries Inc.;LCE +N1398=Long Island Lighting;LIL +N1399=Longs Drug Stores Inc.;LDG +N1400=Longview Fibre Co.;LFB +N1401=Loral Corp.;LOR +N1402=Loral Space & Communicaton Ltd;LSPI +N1403=Louisiana Land/Expl.;LLX +N1404=Louisiana-Pacific;LPX +N1405=Lowe's Co Inc;LOW +N1406=LSB Ind Inc;LSB +N1407=LSI Logic Cp;LSI +N1408=LTC Properties Inc;LTC +N1409=LTV Corp;LTV +N1410=Lubrizol Corp (the);LZ +N1411=Luby's Cafeterias;LUB +N1412=Lucent Technology;LU +N1413=Lukens Inc;LUC +N1414=Luria & Sons Inc;LUR +N1415=Luxottica Group Spa;LUX +N1416=Lydall Inc;LDL +N1417=Lyondell Petrochemical;LYO +N1418=M/I Schottenstein Homes;MHO +N1419=Mac Frugal Bargain Close Out;MFI +N1420=Macerich Co;MAC +N1421=Madeco SA ADR;MAD +N1422=Maderas Sinteticos Soliedad Anonima Masi;MYS +N1423=Mafco Consl Group;MFO +N1424=Magna Intl Inc Class A;MGA +N1425=Magnetek Inc;MAG +N1426=Malan Realty Investors Inc;MAL +N1427=Malaysia Fund Inc;MF +N1428=Mallinckrodt Group;MKG +N1429=Managed High Income Port;MHY +N1430=Managed Mun Portfolio III;MTU +N1431=Managed Municipals Portfolio Inc;MMU +N1432=Manitowoc Inc;MTW +N1433=Manor Care Inc;MNR +N1434=Manpower Inc;MAN +N1435=Manufactured Homes Communities;MHC +N1436=Mapco Inc.;MDA +N1437=Marcus Cp;MCS +N1438=Maritrans Inc;TUG +N1439=Mark Center Trust Sbi;MCT +N1440=Mark IV Industries;IV +N1441=Marriott Corp;HMT +N1442=Marriott International;MAR +N1443=Marsh & Mclennan Co's;MMC +N1444=Marshall Industries;MI +N1445=Martin Lawrence Ltd Inc;MLE +N1446=Martin Marietta Materials Inc;MLM +N1447=Marvel Entertainment;MRV +N1448=Masco;MAS +N1449=Mascotech Inc;MSX +N1450=Mass Mutual Part Investors;MPV +N1451=Massmutual Corp.;MCI +N1452=Material Sciences Cp;MSC +N1453=Matlack Systems Inc;MLK +N1454=Matsushita Elec.;MC +N1455=Mattel Co.;MAT +N1456=Mauna Loa Macadamia Lp;NUT +N1457=Maxxim Medical;MAM +N1458=May Dept Stores;MA +N1459=Maytag Co. (The);MYG +N1460=MBIA Inc.;MBI +N1461=MBNA Cp;KRB +N1462=Mc Dermott J Ray Sa;JRM +N1463=Mc Kesson Corp;MCK +N1464=Mc Whorter Technology;MWT +N1465=McClatchy Newspapers Class A;MNI +N1466=McDermott Intl Inc.;MDR +N1467=McDonald & Co Inv.;MDD +N1468=McDonalds Corp.;MCD +N1469=McDonnell Douglas;MD +N1470=McGraw-Hill Cos;MHP +N1471=MCN Corp;MCN +N1472=MCN Corp Prides;MCE +N1473=MDC Holding Corp;MDC +N1474=MDU Resources Group;MDU +N1475=Mead Corp. (The);MEA +N1476=Meadowbrook Insurance Group;MIG +N1477=Measurex Corp;MX +N1478=Meditrust;MT +N1479=Medpartners/Mullikin Inc;MDM +N1480=Medtronic Inc;MDT +N1481=Medusa Corp;MSA +N1482=Mellon Bank Corp.;MEL +N1483=Mellon Bank Pfd J;MEL+J +N1484=Melville Cp;MES +N1485=MEMC Electronic Materials;WFR +N1486=Mentor Income Fund;MRF +N1487=Mercantile Bancorp;MTL +N1488=Mercantile Stores;MST +N1489=Merck & Co. Inc.;MRK +N1490=Mercury Financial;MFN +N1491=Meredith Corp.;MDP +N1492=Meridian Industrial Trust;MDN +N1493=Merrill Lynch & Co.;MER +N1494=Merrill Lynch Euro Mkt Tgt 1999;MEE +N1495=Merrill Lynch S+P 500 1998;MIE +N1496=Merry Land & Investment Co;MRY +N1497=Mesa Lp;MXP +N1498=Mesa Royalty Trust Ubi;MTR +N1499=Mesabi Trust Sbi;MSB +N1500=Mestek Inc;MCC +N1501=Metrogas;MGS +N1502=Mexico Equity & Income Fund Inc;MXE +N1503=Mexico Fund Inc;MXF +N1504=Meyer (Fred) Inc.;FMY +N1505=MFS Charter Income Trust;MCR +N1506=MFS Govt Market Income Trust;MGF +N1507=MFS Income Trust;MIN +N1508=MFS Multiple Income Trust;MFM +N1509=MFS Multiple Market Income Trust;MMT +N1510=MFS Special Value Trust;MFV +N1511=MGI Properties;MGI +N1512=MGIC Investments;MTG +N1513=MGM Grand Inc;MGG +N1514=Micron Technology;MU +N1515=Mid America Apartment Communities;MAA +N1516=Mid Atlantic Medical Serv;MME +N1517=Mid-Amer Realty Investment;MDI +N1518=Mid-Amer Waste Systems;MAW +N1519=Midamerican Energy Co;MEC +N1520=Midwest Express Holdings;MEH +N1521=Midwest Real Estate Shopping Center;EQM +N1522=Mikasa Inc;MKS +N1523=Milestone Properties Inc;MPI +N1524=Miller Industries;MLR +N1525=Millipore Corp;MIL +N1526=Mills Corp;MLS +N1527=Mineral Technologies Inc;MTX +N1528=Minnesota Mining & Manufacturing (3M);MMM +N1529=Minnesota Muni Term Trust;MNA +N1530=Minnesota Power & Light;MPL +N1531=Mirage Resorts Inc;MIR +N1532=Mitchell Energy & Dev;MNDB +N1533=Mitchell Energy/devel.;MNDA +N1534=Mitel Corp;MLT +N1535=MMI Co;MMI +N1536=Mobil Corp.;MOB +N1537=Molecular Bio Sys Inc;MB +N1538=Monarch Machine Tool;MMO +N1539=Monsanto Co.;MTC +N1540=Montana Power;MTP +N1541=Montedison S.P.A. Ord Ads;MNT +N1542=Montgomery St Income;MTS +N1543=Moore Corp Ltd;MCL +N1544=Morgan (J.P.) & Co;JPM +N1545=Morgan Grenfell Smallcup;MGC +N1546=Morgan Keegan Inc;MOR +N1547=Morgan Products Ltd;MGN +N1548=Morgan Stan Glob Opp Fd;MGB +N1549=Morgan Stanley Emer Mkt Debt Fd;MSD +N1550=Morgan Stanley Emerging Market Fund;MSF +N1551=Morgan Stanley Fin;MSV +N1552=Morgan Stanley Fin 7.82 Fd;MSU +N1553=Morgan Stanley Group;MS +N1554=Morgan Stanley High Yld Fd;MSY +N1555=Morrison Health Care Inc;MHI +N1556=Morrison-Knudsen Cp Hldg;MRN +N1557=Morton Intl Inc;MII +N1558=Morton-thiokol Inc;TKC +N1559=Mossimo Inc;MGX +N1560=Motorola Inc.;MOT +N1561=MS Africa Fund;AFF +N1562=MS Asia Fund;APF +N1563=MS India Fund;IIF +N1564=MSC Industrial Direct;MSM +N1565=Mueller Industries Inc;MLI +N1566=Multicare Cos;MUL +N1567=Muni Yield Califoria Fund;MYC +N1568=Muni Yield Florida Fund Inc;MYF +N1569=Muni Yield Michigan Fund Inc;MYM +N1570=Muni Yield New York Insured Fund;MYN +N1571=Muni-Enhanced Fund Inc.;MEN +N1572=Muniassets Fund Inc;MUA +N1573=Municipal Advantage Fd;MAF +N1574=Municipal High Income Fund;MHF +N1575=Municipal Income Opportunities Trust II;OIA +N1576=Municipal Income Opp Fd;OIC +N1577=Municipal Partners Fund;MNP +N1578=Municipal Partners Fd;MPT +N1579=Munivest CA Ins Fd;MVC +N1580=Munivest FL Fd;MVS +N1581=Munivest Fund II;MVT +N1582=Munivest MI Ins Fd;MVM +N1583=Munivest NJ Fund;MVJ +N1584=Munivest NY Ins Fd;MVY +N1585=Munivest PA Ins Fd;MVP +N1586=Muniyield CA Insured;MIC +N1587=Muniyield FL Insured Fd;MFT +N1588=Muniyield Fund;MYD +N1589=Muniyield Insured Fd II;MTI +N1590=Muniyield MI Insur Fd;MIY +N1591=Muniyield New Jersey Fund Inc;MYJ +N1592=Muniyield NJ Insur Fd;MJI +N1593=Muniyield NY Ins Fd II;MYT +N1594=Muniyield NY Ins Fd III;MYY +N1595=Muniyield PA Fd;MPA +N1596=Muniyield Quality Fd II;MQT +N1597=Muniyield Quality Fd;MQY +N1598=Munsingwear Inc;MUN +N1599=Murphy Oil Corp.;MUR +N1600=Music Land Stores;MLG +N1601=Mutual Risk Management;MM +N1602=Mylan Labs Inc;MYL +N1603=Myrs Group Inc;MYR +N1604=N.Y. Gas & Electric;NGE +N1605=Nabisco Holding;NA +N1606=Nac Re Cp;NRC +N1607=NACCO Industries;NC +N1608=Nalco Chemical Co;NLC +N1609=Nashua Corp;NSH +N1610=National Auto Credit;NAK +N1611=National Golf Properties;TEE +N1612=National Power ADR;NP +N1613=National Power Plc In;NPPP +N1614=National Steel class B;NS +N1615=Nations Balanced Targ;NBM +N1616=Nations Bank;NB +N1617=Nations Govt Inv Tr 2004;NGF +N1618=Nations Govt Inv Tr 2003;NGI +N1619=Nationwide Health Properties;NHP +N1620=Natl Australian Bank;NAB +N1621=Natl City Cp;NCC +N1622=Natl Data Cp;NDC +N1623=Natl Education Cp;NEC +N1624=Natl Fuel & Gas Co;NFG +N1625=Natl Health Investors Inc;NHI +N1626=Natl Media Cp;NM +N1627=Natl Presto Ind;NPK +N1628=Natl Re Holdings Cp;NRE +N1629=Natl Semiconductor;NSM +N1630=Natl Service Ind;NSI +N1631=Natl Standard Co;NSD +N1632=Natl Westminster Bank;NW +N1633=Navistar;NAV +N1634=NCH Corp.;NCH +N1635=Neiman Marcus;NMG +N1636=Nelson Thomas Cl B;TNMB +N1637=Network Equipment Tech;NWK +N1638=Nevada Power Co;NVP +N1639=New Age Media Fund;NAF +N1640=New Amer High Income Fund;HYB +N1641=New Eng Business Service Inc;NEB +N1642=New England Elec. System;NES +N1643=New England Investment Inc;NEW +N1644=New Germany Fund Inc;GF +N1645=New Jersey Resources;NJR +N1646=New Plan Rlty Tr Sbi;NPR +N1647=New South Africa Fund;NSA +N1648=New York Bancorp Inc;NYB +N1649=Newbridge Networkd Cp;NN +N1650=Newell Co.;NWL +N1651=Newfield Exploration Co;NFX +N1652=Newhall Land/Farming;NHL +N1653=Newmont Gold Co.;NGC +N1654=Newmont Mining Cp;NEM +N1655=Newpark Resources Inc;NR +N1656=News Corp Ltd ADR;NWS +N1657=NGL Corp;NGL +N1658=Niagara Mohawk Power;NMK +N1659=NICOR;GAS +N1660=Nike Inc Class B;NKE +N1661=Nine West Group;NIN +N1662=Nippon Telegraph & Telephone Corp ADR;NTT +N1663=Nipso Indust Inc;NI +N1664=NL Industries;NL +N1665=Noble Affiliates;NBL +N1666=Nokia Corp ADR;NOKA +N1667=NorAm Energy Corp;NAE +N1668=Nord Resources Corp;NRD +N1669=Norfolk Southern;NSC +N1670=Norrell Cp;NRL +N1671=Norsk Hydro Ads;NHY +N1672=Nortek Inc.;NTK +N1673=North American Mortgage Co;NAC +N1674=North Carolina Natural Gas;NCG +N1675=North European Oil Rlty;NET +N1676=North Fork Bancorp;NFB +N1677=Northeast Utilities;NU +N1678=Northern Border Partners Lp;NBP +N1679=Northern States Power;NSP +N1680=Northern Telecom;NT +N1681=Northgate Exploration;NGX +N1682=Northrop Grumman Corp.;NOC +N1683=Northwestern Public Serv;NPS +N1684=Norwest Corp;NOB +N1685=Nova Corp;NVA +N1686=Novacare;NOV +N1687=Novo Indust. A/S Ads;NVO +N1688=NS Group Inc;NSS +N1689=Nucor Corp;NUE +N1690=Nuevo Energy Co;NEV +N1691=NUI Corp;NUI +N1692=Nuveen (John) Co;JNC +N1693=Nuveen AZ Prem Inc Mu;NAZ +N1694=Nuveen CA Invest Qual Muni;NQC +N1695=Nuveen CA Muni Mkt Opportunity;NCO +N1696=Nuveen CA Municipal Value Fund;NCA +N1697=Nuveen CA Performance Plus Muni Fund;NCP +N1698=Nuveen CA Select Qual Muni;NVC +N1699=Nuveen California Quality Income Muni;NUC +N1700=Nuveen CT Premium Ins Mun Fd;NTC +N1701=Nuveen Florida IQ Muni Fund;NQF +N1702=Nuveen Florida Quality Income Muni Fund;NUF +N1703=Nuveen Ins CA Prem Im;NCL +N1704=Nuveen Ins CA Prem Ins Mun Fd;NPC +N1705=Nuveen Ins FL Prem Im;NFL +N1706=Nuveen Ins NY Prem Ins Mun Fd;NNF +N1707=Nuveen Ins Premium Ins Mun Fd;NPE +N1708=Nuveen Ins Premium Ins Mun Fd;NPX +N1709=Nuveen Insured CA Select Port;NXC +N1710=Nuveen Insured Muni Opportunity Fund Inc;NIO +N1711=Nuveen Insured NY Select Port;NXN +N1712=Nuveen Insured Quality Muni Fund;NQI +N1713=Nuveen Investment Quality Municipal Fund;NQM +N1714=Nuveen MA Premium Ins Mun Fd;NMT +N1715=Nuveen MD Premium Ins Mun Fd;NMY +N1716=Nuveen MI Premium Ins Mun Fd;NMP +N1717=Nuveen Michigan Quality Income Municipal;NUM +N1718=Nuveen Muni Market Opportunity Fund;NMO +N1719=Nuveen Municipal Advantage Fund;NMA +N1720=Nuveen Municipal Income;NMI +N1721=Nuveen Municipal Value Fund;NUV +N1722=Nuveen NC Premium Ins Mun Fd;NNC +N1723=Nuveen New Jersey IQ Muni Fund;NQJ +N1724=Nuveen NJ Premium Ins Mun Fd;NNJ +N1725=Nuveen Ny Investment Quality Muni Fund;NQN +N1726=Nuveen NY Municipal Value Fund;NNY +N1727=Nuveen NY Performance Plus Muni Fund;NNP +N1728=Nuveen NY Quality Ins Mun Fd;NUN +N1729=Nuveen NY Select Qual Muni;NVN +N1730=Nuveen Ohio Quality Income Municipal Fun;NUO +N1731=Nuveen PA Premium Ins Mun Fd;NPY +N1732=Nuveen Pennsylvania IQ Muni Fund;NQP +N1733=Nuveen Performance Plus Muni Fd;NPP +N1734=Nuveen Premier Insured Municipal;NIF +N1735=Nuveen Premier Municipal Fund;NPF +N1736=Nuveen Premium Income Muni Fd;NPI +N1737=Nuveen Premium Ins Mun Fd II;NPM +N1738=Nuveen Premium Ins Mun Fd IV;NPT +N1739=Nuveen Quality Investment Muni Fund;NQU +N1740=Nuveen Sel Mat Muni F;NIM +N1741=Nuveen Sel Tax-free 3;NXR +N1742=Nuveen Select Quality Muni Fund Inc;NQS +N1743=Nuveen Select Tax Free Income Portfolio;NXP +N1744=Nuveen Select Tax-Free Income Port;NXQ +N1745=Nuveen Texas Quality Income Municipal;NTX +N1746=Nuveen VA Premium Ins Mun Fd;NPV +N1747=Nymagic Inc;NYM +N1748=Nynex;NYN +N1749=Oak Industries;OAK +N1750=Oakley Inc;OO +N1751=Oakwood Homes Corp;OH +N1752=Oasis Residential Inc;OAS +N1753=Occidental Petrole;OXY +N1754=Oceaneering Intl Inc;OII +N1755=OEA Inc;OEA +N1756=OEC Medical Systems Inc;OXE +N1757=Office Depot Inc;ODP +N1758=OfficeMax Inc;OMX +N1759=Ogden Corp.;OG +N1760=Ohio Edison;OEC +N1761=Ohm Cp;OHM +N1762=Oil-Dri Cp;ODC +N1763=Oklahoma Gas & Electric;OGE +N1764=Old Republic Intl;ORI +N1765=Olin Corp;OLN +N1766=Olsten Corp;OLS +N1767=Omega Healthcare Investors Inc;OHI +N1768=Omnicare Inc;OCR +N1769=Omnicom Group Inc;OMC +N1770=Oneida Ltd;OCQ +N1771=Oneita Ind;ONA +N1772=ONEOK Inc.;OKE +N1773=Oppenheimer Capital Lp;OCC +N1774=Oppenheimer Multi Fund;OMS +N1775=Oppenheimer Multi Gov't Tr;OGT +N1776=Orange & Rockland Util;ORU +N1777=Orange Co;OJ +N1778=Orbital Engine Ltd;OE +N1779=Oregon Steel Mills Inc;OS +N1780=Oriental Bank & Trust;OBT +N1781=Orion Capital Corp;OC +N1782=Ornda Healthcorp;ORN +N1783=Oryx Energy;ORX +N1784=Osmonics Inc;OSM +N1785=Osullivans Industries Holding;OSU +N1786=Outboard Marine Corp.;OM +N1787=Overseas Shiphldg Grp;OSG +N1788=Owen Illinois;OI +N1789=Owens & Minor Inc;OMI +N1790=Owens-Corning;OCF +N1791=Oxford Ind Cl A;OXM +N1792=P P&L Resources;PPL +N1793=Pacific Amer Inc Shr;PAI +N1794=Pacific Corp;PPW +N1795=Pacific Enterprises;PET +N1796=Pacific Gas And Electric;PCG +N1797=Pacific Scientific Co.;PSX +N1798=Pacific Telesis Corp.;PAC +N1799=Pacificorp Quids;PCQ +N1800=Paine Webber Group;PWJ +N1801=Paine Webber Prem Hi Inc Tr;PHT +N1802=Paine Webber Prem Ins Muni Tr;PIF +N1803=Paine Webber Prem Tax Fr Income;PPM +N1804=Pakistan Investment Fund;PKF +N1805=Pall Cp;PLL +N1806=Panamerican Beverage Inc;PB +N1807=Panhandle Eastern Corp;PEL +N1808=Par Technology;PTC +N1809=Paragon Group;PAO +N1810=Paragon Trade Brands Inc;PTB +N1811=Park Electrochemical;PKE +N1812=Parker & Parsley Petroleum Co;PDP +N1813=Parker Drilling Co.;PKD +N1814=Parker Hannifin Corp.;PH +N1815=Patriot American Hospitality;PAH +N1816=Paxar Co;PXR +N1817=Payless Cashways Inc;PCS +N1818=Pec Israel Economic Cp;IEC +N1819=Pechiney Adr;PY +N1820=PECO Energy Co;PE +N1821=Penn Enterprises;PNT +N1822=Penn Traffic Co;PNF +N1823=Penncorp Financial Group;PFG +N1824=Penney (JC) Co. Inc.;JCP +N1825=Pennzoil Co.;PZL +N1826=Peoples Energy Corp;PGL +N1827=Pep Boys Manny, Moe, & Jack;PBY +N1828=Pepsi Co. Inc.;PEP +N1829=Pepsi-Cola Puerto Rico Bottling Cl B;PPO +N1830=Perkin Elmer Corp.;PKN +N1831=Perkins Farm Restaurants;PFR +N1832=Permian Basin Rlty Ubi;PBT +N1833=Personnel Group of Amer;PGA +N1834=Perusahaan Perseroan;TLK +N1835=Petro-Canada;PCZ +N1836=Petro-Canada 1st Installments;PCZPP +N1837=Petroleum & Resources;PEO +N1838=Pfizer Inc;PFE +N1839=Pharmaceutical Resources Inc;PRX +N1840=Pharmacia & Upjohn Inc;PNU +N1841=Phelps Dodge Corp.;PD +N1842=PHH Group Inc;PHH +N1843=Philadelphia Suburban;PSC +N1844=Philip Morris Inc;MO +N1845=Philippine Long Dist Tele;PHI +N1846=Phillips Electronics NV;PHG +N1847=Phillips Petroleum Co.;P +N1848=Phillips-Van Heusen Cp;PVH +N1849=Phoenix Duff & Phelps Corp;DUF +N1850=PHP Healthcare Cp;PPH +N1851=Physician Resource Group;PRG +N1852=Piccadilly Cafeteria;PIC +N1853=Piedmont Natural Gas;PNY +N1854=Pier 1;PIR +N1855=Pilgram America Prime Rate Trust;PPR +N1856=Pilgrim Amer Bank & Thrift Funds;PBS +N1857=Pilgrims Pride Corp;CHX +N1858=Pillowtex Corp;PTX +N1859=Pimco Advisory;PA +N1860=Pimco Commercial Mortgage Security Tru;PCM +N1861=Pinnacle West Capital Corp.;PNW +N1862=Pioneer Electronic ADR;PIO +N1863=Pioneer Finan Serv;PFS +N1864=Pioneer Financial Serv 225 Pr;PFS+ +N1865=Pioneer Hi Bred Intl;PHB +N1866=Pioneer Interest Shares;MUO +N1867=Piper Jaffray Inc;PJC +N1868=Pitney Bowes Inc.;PBI +N1869=Pittston Brinks Group;PZB +N1870=Pittston Burlington Group;PZX +N1871=Pittston Mineral Group;PZM +N1872=Placer Dome Inc.;PDG +N1873=Plantronics Inc;PLT +N1874=Playboy Enterprises;PLA +N1875=Playboy Enterprises A;PLAA +N1876=Playtex Products;PYX +N1877=Plum Creek;PCL +N1878=Ply Gem Ind;PGI +N1879=PMI Group;PMA +N1880=PNC Financial;PNC +N1881=Pogo Producing Co.;PPP +N1882=Pohang Iron & Steel Co;PKX +N1883=Polaris Indus Lp;PII +N1884=Polaroid Corp.;PRD +N1885=Policy Management Systems Cp;PMS +N1886=Polygram Nv;PLG +N1887=Poncebank Fsb;PBK +N1888=Pope & Talbot Inc;POP +N1889=Portec Inc;POR +N1890=Portland Gas & Elec.;PGN +N1891=Portugal Fund;PGF +N1892=Portugal Telecom;PT +N1893=Post Properties Inc;PPS +N1894=Potash Cp;POT +N1895=Potlatch Corp.;PCH +N1896=Potomac Utilities;POM +N1897=Power Control Tech;ATP +N1898=Powergen ADR;PWG +N1899=Powergen Plc Fst Inte;PWGPP +N1900=PPG Ind. Inc;PPG +N1901=Praxair Inc;PX +N1902=Precision Castparts Cp;PCP +N1903=Preferred Income Fund Inc;PFD +N1904=Preferred Income Mgmt;PFM +N1905=Preferred Income Opportunity Fund;PFO +N1906=Premark Intl Inc;PMI +N1907=Premdor Inc;PI +N1908=Premier Farnell Pld;PFP +N1909=Presley Cos;PDC +N1910=Pride Cos Lp;PRF +N1911=Primark Corp;PMK +N1912=Prime Hospitality Inns Inc;PDQ +N1913=Prime Motor Inns Lp;PMP +N1914=Proctor & Gamble Co.;PG +N1915=Progressive Corp (Ohio);PGR +N1916=Proler Intl;PS +N1917=Promus Hotel;PRH +N1918=Prospect Street Hi Income;PHY +N1919=Protective Life Cp;PL +N1920=Provident Life & Accident Insurance Cl A;PVT +N1921=Providian Corp;PVN +N1922=Prudential Reinsurance Holdings Inc;RE +N1923=PS Group Inc;PSG +N1924=Public Serv Co Of N C;PGS +N1925=Public Service Co Colo;PSR +N1926=Public Service Electric Gas;PEG +N1927=Public Service New Mexico;PNM +N1928=Public Storage Inc;PSA +N1929=Publicker Industries;PUL +N1930=Puerto Rican Cement;PRN +N1931=Puget Sound Power & Light;PSD +N1932=Pulitzer Publishing Co;PTZ +N1933=Pulte Corp;PHM +N1934=Putnam Dividend Income Fund;PDI +N1935=Putnam High Income Trust;PCF +N1936=Putnam High Muni;PYM +N1937=Putnam Intermediate Govt Trust;PGT +N1938=Putnam Inv Grd Mun Tr II;PMG +N1939=Putnam Investment Grade Muni Trust;PGM +N1940=Putnam Managed Hi Yield Tr;PTM +N1941=Putnam Management Muni Inc Tr;PMM +N1942=Putnam Master Income Trust;PMT +N1943=Putnam Master Interm Income Trust;PIM +N1944=Putnam Mun Opp Trust;PMO +N1945=Putnam Premier Income Trust;PPT +N1946=Putnam Tax-Free Health Care Fund;PMH +N1947=QMS Inc;AQM +N1948=Quaker Oats Co.;OAT +N1949=Quaker State Oil Ref;KSF +N1950=Quanex Corp;NX +N1951=Quantum Restaurants Group;KRG +N1952=Quebecor Printing;PRW +N1953=Quest For Value Cap Shares;KFV +N1954=Quest For Value Income Shares;KFV+ +N1955=Questar Corp Holding Co.;STR +N1956=Quick & Reilly Group Inc;BQR +N1957=Quilmes Indust Societe Anonyme;LQU +N1958=Ralcorp Holdings Inc;RAH +N1959=Ralston Purina Group;RAL +N1960=Ranger Oil Ltd;RGO +N1961=Rauma Oy ADR;RMA +N1962=Raychem Corp;RYC +N1963=Raymond James Financial;RJF +N1964=Rayonier Inc;RYN +N1965=Rayonier Timberlands Lp;LOG +N1966=Raytech Corp Hldg & Co Del;RAY +N1967=Raytheon Co.;RTN +N1968=RCM Strategic Global;RCS +N1969=Reader's Digest Assn cl B;RDB +N1970=Reader's Digest Association Inc Class A;RDA +N1971=Reading $ Bates Cp;RB +N1972=Realty Income Fund;O +N1973=Realty Refund Tr Sbi;RRF +N1974=Red Lion Hotels Inc;RL +N1975=Red Roof Inns;RRI +N1976=Reebok Intl Ltd;RBK +N1977=Reed Intl ADR;RUK +N1978=Regency Realty Corp;REG +N1979=Reinsurance Group Of America;RGA +N1980=Reliance Steel & Aluminum;RS +N1981=Reliastar Fncl;RLR +N1982=Relience Group Holding;REL +N1983=Renaissance Communications Corp;RRR +N1984=Renaissance Hotel Group;RHG +N1985=Renal Treatment Center;RXT +N1986=Repsol ADR;REP +N1987=Republic Group Inc;RGC +N1988=Republic NY Cp;RNB +N1989=Resource Mortgage Capital Inc;RMR +N1990=Retirement Care Associates;RCA +N1991=Revco D S Inc;RXR +N1992=Revere (Paul) Corp;PRL +N1993=Revlon Inc Cl A;REV +N1994=Rex Stores Corp;RSC +N1995=Rexel Inc;RXL +N1996=Rexene Corp;RXN +N1997=Reynolds & Reynolds Co Class A;REY +N1998=Reynolds Metals Co.;RLM +N1999=Rhoders Inc;RHD +N2000=Rhone Poulenc ADR;RP +N2001=Rhone-Polenc Rorer Inc;RPR +N2002=Rightchoice Managed Care;RIT +N2003=Rite Aid Corp;RAD +N2004=RJR Nabisco Hldg;RN +N2005=RJR Nabisco pf C;RN+C +N2006=RLI Corp;RLI +N2007=RMI Titanium Co;RTI +N2008=Roadmaster Ind Inc;RDM +N2009=Robert Half Intl Inc;RHI +N2010=Robertson (HH) Co.;RHH +N2011=Roc Communities Inc;RCI +N2012=ROC Taiwan Fund;ROC +N2013=Rochester Gas & Electric;RGS +N2014=Rockerfeller Center Prop;RCP +N2015=Rockwell Intl;ROK +N2016=Rodman & Renshaw Cap Grp;RR +N2017=Rogers Communication;RG +N2018=Rohm & Hass Co.;ROH +N2019=Rohr Ind Inc.;RHR +N2020=Rollins Environmental Svcs Inc;REN +N2021=Rollins Inc;ROL +N2022=Rollins Truck Leasing Corp;RLC +N2023=Rouge Steel Co;ROU +N2024=Rouse Co;RSE +N2025=Rowan Companies Inc.;RDC +N2026=Rowe Furniture Cp;ROW +N2027=Royal Appliance Mfg Co;RAM +N2028=Royal Bank of Canada;RY +N2029=Royal Bank Scotland 9.5;RBS+C +N2030=Royal Bank Scotland;RBS+ +N2031=Royal Carribean Cruise Ltd;RCL +N2032=Royal Dutch Petroleum ADR;RD +N2033=Royal Plastics Group Inc;RYG +N2034=Royal PTT Netherland Adr;KPN +N2035=Royce Value Trust Inc;RVT +N2036=RPC Inc;RES +N2037=RPS Realty Tr Sbi;RPS +N2038=RTZ Plc ADR;RTZ +N2039=Rubbermaid Inc;RBD +N2040=Ruby Tuesday Inc;RI +N2041=Ruddick Corp;RDK +N2042=Russ Berrie & Co;RUS +N2043=Russell Cp;RML +N2044=Ryder Systems Inc.;R +N2045=Rykoff Sexton;RYK +N2046=Ryland Group Inc;RYL +N2047=Rymer Co.;RYR +N2048=Sabine Royalty Tr;SBR +N2049=Safeguard Scientific;SFE +N2050=Safety-Kleen Corp;SK +N2051=Safeway Inc;SWY +N2052=Saga Petroleum ADR;SPMB +N2053=Salant Corp;SLT +N2054=Saloman Inc pf D;SB+D +N2055=Salomon Bros WW Inc Fd;SBW +N2056=Salomon Brothers Fund Inc;SBF +N2057=Salomon Brothers High Income Fund;HIF +N2058=Salomon Brothers Inc;SB +N2059=San Anita Rlty Entp;SAR +N2060=San Juan Basin Realty;SJT +N2061=Sanifill Inc;FIL +N2062=Santa Fe Energy Resources Inc;SFR +N2063=Santa Fe Energy Trust Spers;SFF +N2064=Santa Fe Pacific Gold Corp;GLD +N2065=Santa Fe Pacific Pipeline Lp;SFL +N2066=Santa Isabel Sa;ISA +N2067=Santander Overseas Bank Nc;OPR+ +N2068=Sara Lee;SLE +N2069=Saul Centers Inc;BFS +N2070=Savannah Foods & Ind;SFI +N2071=Sbarro Cp;SBA +N2072=SBC Communication;SBC +N2073=Scana Corp;SCG +N2074=Scania Ab Cl A Adr;SCVA +N2075=Scania AB cl B Adr;SCVB +N2076=Schawk Inc Cl A;SGK +N2077=Scheitzer-Mauduit Intl Inc;SWM +N2078=Scherer (R.P.) Cp;SHR +N2079=Schering-Plough Corp.;SGP +N2080=Schlumberger Ltd;SLB +N2081=Schroder Asian Fund;SHF +N2082=Schroeder Sth Africa;SOA +N2083=Schuller Corp;GLS +N2084=Schwab Charles;SCH +N2085=Scientific Atlanta Inc.;SFA +N2086=Scotsman Ind. Inc;SCT +N2087=Scott Liquid Gold;SGD +N2088=Scripps (E.W) Co. Class A;SSP +N2089=Scudder New Asia Fund Inc;SAF +N2090=Scudder New Europe Fund Inc;NEF +N2091=Scudder World Income;SWI +N2092=Sea Containers Cl A;SCRA +N2093=Sea Containers Ltd Class B;SCRB +N2094=Seagram Co. Ltd.;VO +N2095=Seagull Energy Corp;SGO +N2096=Sealed Air Corp;SEE +N2097=Sears Pf;S+A +N2098=Sears Roebuck & Co.;S +N2099=Security Capital Ind;SCN +N2100=Security Capital Pacific Trust;PTR +N2101=Seitel Inc.;SEI +N2102=Seligman Quality Municipal Fund;SQF +N2103=Seligman Select Muni Fund Inc;SEL +N2104=Sensormatic Electronics;SRM +N2105=Sequa Corp Class A;SQAA +N2106=Sequa Corp Class B;SQAB +N2107=Service Corp Intl;SRV +N2108=Service Merchandise;SME +N2109=Servicemaster Lp;SVM +N2110=SGS Thomson Microelectronics;STM +N2111=Shandong Huaneng Power Development ADR;SH +N2112=Shanghai Petrochemical ADR;SHI +N2113=Shaw Ind Inc;SHX +N2114=Shelby Williams Ind;SY +N2115=Shell Transport ADR;SC +N2116=Sherwin Williams Co.;SHW +N2117=Sherwood Group;SHD +N2118=Shoney's Restaurants;SHN +N2119=Shop Ko Stores;SKO +N2120=Showboat Inc;SBO +N2121=Shurgard Storage Centers;SHU +N2122=Sierra Health Services Inc;SIE +N2123=Sierra Pac Res Hldg;SRP +N2124=Sigcorp Inc;SIG +N2125=Signal Apparel Co.;SIA +N2126=Signet Banking Cp;SBK +N2127=Silicon Graphics Inc;SGI +N2128=Simon Property Group;SPG +N2129=Singapore Fund Inc;SGF +N2130=Singer Co;SEW +N2131=Sinter Metal Inc;SNM +N2132=Sizeler Property Invstrs;SIZ +N2133=Sizzler Intl;SZ +N2134=Skyline Corp.;SKY +N2135=SL Industries Inc;SL +N2136=Smart & Final Inc;SMF +N2137=Smith AO Class B;AOS +N2138=Smith Charles Realty Inc;SRW +N2139=Smith Corona;SCO +N2140=Smith Food & Drugs Cl B;SFD +N2141=Smith Intl Inc;SII +N2142=Smithkline Beecham Plc Ads;SBH +N2143=Smucker (JM) Co. Class A;SJMA +N2144=Smucker (JM) Co. Class B;SJMB +N2145=Snap-On Inc;SNA +N2146=Snyder Oil Cp;SNY +N2147=Sociedad Quinica Minera De Chile;SQM +N2148=Sofamor/Danek Group;SDG +N2149=Sola Intl Inc;SOL +N2150=Solectron Cp;SLR +N2151=Sonat Inc.;SNT +N2152=Sonat Offshore Drilling Inc;RIG +N2153=Sonoco Products Co;SON +N2154=Sony Cp ADR;SNE +N2155=Sotheby's Holdings Inc;BID +N2156=Source Capital Inc;SOR +N2157=South Jersey Ind.;SJI +N2158=Southdown Inc;SDW +N2159=Southern Calif Water;SCW +N2160=Southern Co.;SO +N2161=Southern Natl Cp;SNB +N2162=Southern New England Tech;SNG +N2163=Southern Pacific Rail Inc;RSP +N2164=Southern Peru Copper Cp;PCU +N2165=Southern Union Co;SUG +N2166=Southwest Airlines;LUV +N2167=Southwest Gas Corp;SWX +N2168=Southwestern Energy;SWN +N2169=Southwestern Property Trust;SWP +N2170=Southwestern Public Service;SPS +N2171=Sovran Self Storage;SSS +N2172=Spaghetti Warehouse;SWH +N2173=Spain Fund;SNF +N2174=Spartech Cp;SEH +N2175=Sparton Corp;SPA +N2176=Speedway Motorsport;TRK +N2177=Spelling Entertainment;SP +N2178=Sphere Drake Holding Ltd;SD +N2179=Spieker Properties Inc;SPK +N2180=Sport Supply Group Inc;GYM +N2181=Sports & Recreation Inc;WON +N2182=Sports Authority;TSA +N2183=Springs Industries;SMI +N2184=Sprint Corp;FON +N2185=Sprint Cp Exchangbl D;FXN +N2186=SPS Technologies;ST +N2187=SPS Transaction Services Inc;PAY +N2188=SPX Cp;SPW +N2189=St Joe Paper Co;SJP +N2190=St John Knits Inc;SJK +N2191=St Joseph Power & Light;SAJ +N2192=St Paul Companies;SPC +N2193=Standard Commercial Corp;STW +N2194=Standard Federal Bancorp;SFB +N2195=Standard Motor Prod Class A;SMP +N2196=Standard Products Co.;SPD +N2197=Standard-pacific Cp;SPF +N2198=Standex Intl;SXI +N2199=Stanhome Inc;STH +N2200=Stanley Works (the);SWK +N2201=Star Bancorp;STB +N2202=Starret (LS) Co. (The);SCX +N2203=Starter Corp;STA +N2204=Starwood Lodging;HOT +N2205=State Street Boston;STT +N2206=Sterile Concept Holdings;SYS +N2207=Sterling Bancorp;STL +N2208=Sterling Chemical;STX +N2209=Sterling Commerce Inc;SE +N2210=Sterling Electronics;SEC +N2211=Sterling Software Inc;SSW +N2212=Stet Societa Finanziaria Telefonica ADR;STE +N2213=Stewart Information Serv;STC +N2214=Stifel Financial Corp;SF +N2215=Stone & Webster Inc;SW +N2216=Stone Container Corp.;STO +N2217=Stone Energy Corp;SGY +N2218=Stop & Shop Cos;SHP +N2219=Storage Technology;STK +N2220=Storage Trust Realty;SEA +N2221=Storage USA;SUS +N2222=Strategic Global Income Fund Inc;SGL +N2223=Stratus Computer Inc;SRA +N2224=Stride Rite Corp;SRR +N2225=Student Loan Corp;STU +N2226=Student Loan Mtg Assoc;SLM +N2227=Sturm Ruger & Co Inc;RGR +N2228=Suburban Propane Partners;SPH +N2229=Summit Bancorp;SUB +N2230=Summit Properties Inc;SMT +N2231=Sun Co. Inc.;SUN +N2232=Sun Communities Inc;SUI +N2233=Sun Energy Pt Lp Dep;SLP +N2234=Sun Healthcare Group;SHG +N2235=Sun Intl Hotels Ltd;SIH +N2236=Sunamerica Inc;SAI +N2237=Sunbeam Co;SOC +N2238=Suncoast Industries Inc;SN +N2239=Sundstrand Corp;SNS +N2240=Sunrise Medical Inc;SMD +N2241=Sunshine Mining & Refining;SSC +N2242=Sunsource Lp Cl A;SDP +N2243=Sunsource Lp Cl B;SDPB +N2244=SunTrust Bank Inc;STI +N2245=Super Food Services Inc;SFS +N2246=Superior Industries Intl;SUP +N2247=Supervalu Inc;SVU +N2248=Swift Energy;SFY +N2249=Sybron International Corp;SYB +N2250=Symbol Technology;SBL +N2251=Syms Corp;SYM +N2252=Synovus Financial Cp;SNV +N2253=Syratech Corp;SYR +N2254=Sysco Corp;SYY +N2255=Tadiran Ltd;TAD +N2256=Taiwan Equity Fund;TYW +N2257=Taiwan Fund;TWN +N2258=Talbot Inc;TLB +N2259=Tally Industries Inc;TAL +N2260=Tambrands Inc;TMB +N2261=Tandem Computers;TDM +N2262=Tandy Corp.;TAN +N2263=Tandycrafts Inc;TAC +N2264=Tanger Factory Outlet Centers;SKT +N2265=Taubman Centers Inc;TCO +N2266=Taurus Muni CA Holdings Inc;MCF +N2267=Taurus Muni NY Holdings Inc;MNY +N2268=TB Woods Corp;TBW +N2269=TCBY Enterprises Inc;TBY +N2270=TCC Industries;TEL +N2271=TCF Financial;TCB +N2272=TCW Convertible Sec Fund;CVT +N2273=TCW/DW Emerging Mkt Opp Tr;EMO +N2274=TCW/DW Term Trust 2000;TDT +N2275=TCW/DW Term Trust 2003;TMT +N2276=TCW/DW Term Trust 2002;TRM +N2277=TDK Corp;TDK +N2278=Tech-Sym Corp;TSY +N2279=Teckson Associates Rl;RA +N2280=Teco Energy;TE +N2281=Teekay Shipping Cp;TK +N2282=Tejas Gas Cp;TEJ +N2283=Tektronix Inc.;TEK +N2284=Tele Danmark ADR;TLD +N2285=Telecom Argentina Stet-france;TEO +N2286=Telecom Of New Zealand;NZT +N2287=Telecomm Brasileiras Adr;TBR +N2288=Teledyne Inc.;TDY +N2289=Teleflex Inc.;TFX +N2290=Telefonica De Argentina ADR;TAR +N2291=Telefonica De Espana ADR;TEF +N2292=Telefonos De Mexico;TMX +N2293=Telex Chile;TL +N2294=Temple-Inland Inc;TIN +N2295=Templeton China World Fund;TCH +N2296=Templeton Emerg Mkt Appr Fd;TEA +N2297=Templeton Emerg Mkt Inc Fd;TEI +N2298=Templeton Emerging Market Fund;EMF +N2299=Templeton Global Gov't In Tr;TGG +N2300=Templeton Global Income Fund;GIM +N2301=Templeton Russia Fund Inc;TRF +N2302=Templeton Vietnam Oppt Fund;TVF +N2303=Templton Dragon;TDF +N2304=Tenet Healthcare Corp;THC +N2305=Tenneco Inc.;TEN +N2306=Tennessee Valley Auth;TVA +N2307=Teppco Partners Lp;TPP +N2308=Teradyne Inc.;TER +N2309=Terex Cp;TEX +N2310=Terra Industries;TRA +N2311=Terra Nitrogen;TNH +N2312=Terra Nova Holdings Ltd;TNA +N2313=Tesoro Petrolium Corp.;TSO +N2314=Texaco Inc.;TX +N2315=Texaco Pr B;TXC+B +N2316=Texas Industries Inc.;TXI +N2317=Texas Instruments;TXN +N2318=Texas Pacific Land Tr;TPL +N2319=Texas Utility;TXU +N2320=Texfi Ind. Inc;TXF +N2321=Textron Inc.;TXT +N2322=Thackeray Corp;THK +N2323=Thai Capital Fund Inc;TC +N2324=Thai Fund;TTF +N2325=The European Warrant Fund Inc;EWF +N2326=The Indonesia Fund Inc;IF +N2327=Thermo Electron Corp;TMO +N2328=Thomas & Betts Corp.;TNB +N2329=Thomas Ind. Inc;TII +N2330=Thomas Nelson Inc;TNM +N2331=Thor Industries Inc;THO +N2332=Thornburg Mortgage Asset Corp;TMA +N2333=Three 60 Communication;XO +N2334=Three Five Systems Inc;TFS +N2335=Thrifty Payless Holdings Cl B;TPD +N2336=Tidewater Inc;TDW +N2337=Tiffany & Co.;TIF +N2338=TIG Holdings Inc;TIG +N2339=Timberland;TBL +N2340=Time Warner Inc;TWX +N2341=Times Mirror Co;TMC +N2342=Timken Co.;TKR +N2343=TIS Mortgage Investment Co;TIS +N2344=Titan Corp;TTN +N2345=Titan Holdings Inc;TH +N2346=Titan Wheel International;TWI +N2347=TJX Companies Inc;TJX +N2348=Tnp Enterprises Inc;TNP +N2349=Toastmaster Inc;TM +N2350=Todd Shipyards Cp;TOD +N2351=Tokheim Corp;TOK +N2352=Toll Brothers Inc;TOL +N2353=Tomkins Plc ADR;TKS +N2354=Tootsie Roll Ind.;TR +N2355=Torch Energy Royalty;TRU +N2356=Torchmark Corp;TMK +N2357=Toro Co;TTC +N2358=Tosco Corp.;TOS +N2359=Total ADR;TOT +N2360=Total Renal Care Holdings Inc;TRL +N2361=Total System Service Inc;TSS +N2362=Town & Country Trust Sbi;TCT +N2363=Toy Biz;TBZ +N2364=Toys R Us;TOY +N2365=Trans Canada Pipeins Ltd.;TRP +N2366=Trans Technology Corp;TT +N2367=Transamerica Corp.;TA +N2368=Transamerican Income;TAI +N2369=Transatlantic Holdings Inc;TRH +N2370=Transcontinental Realty;TCI +N2371=Transmedia Network;TMN +N2372=Transportadora De Gas Del Sur ADR;TGS +N2373=Transportation Maritima Mexicana ADR;TMM +N2374=Transportation Maritima Mexicana ADR A;TMMA +N2375=Transpro Inc;TPR +N2376=Travelers Group Inc;TRV +N2377=Travelers/Aetna Property Casualty;TAP +N2378=TRC Inc;TRR +N2379=Tredegar Industries Inc;TG +N2380=Tremont Cp;TRE +N2381=Tri-Continental Corp.;TY +N2382=Triarc Cos;TRY +N2383=Tribune Co;TRB +N2384=Trigen Energy Cp;TGN +N2385=Trimas Cp;TMS +N2386=Trinet Corporate Realty Trust;TRI +N2387=Trinity Ind. Inc;TRN +N2388=Trinova;TNV +N2389=Triton Energy Corp.;OIL +N2390=Trizec Corp;TZC +N2391=True North Communication;TNO +N2392=Trump Hotel & Casino;DJT +N2393=TRW Inc.;TRW +N2394=Tucson Elec Pwr.;TEP +N2395=Tultex Corp;TTX +N2396=Turkey Fund;TKF +N2397=TVX Gold Inc;TVX +N2398=Twentieth Century Ind;TW +N2399=Twin Disc Inc;TDI +N2400=Tyco International Ltd;TYC +N2401=Tyco Toys Inc;TTI +N2402=Tyler Corp;TYL +N2403=U S Filter Corp;USF +N2404=U S Surgical Corp;USS +N2405=U.S. Home Corp;UH +N2406=UAL Corp;UAL +N2407=Ucar Intl;UCR +N2408=UGI Corp;UGI +N2409=Ultramar Corp;ULR +N2410=UNC Resources;UNC +N2411=Unicom Corp;UCM +N2412=Unifi Inc;UFI +N2413=Unifirst Corp;UNF +N2414=Unilever Ltd Amer Shr;UL +N2415=Unilever Ltd NV;UN +N2416=Union Camp;UCC +N2417=Union Carbide Corp.;UK +N2418=Union Corporation;UCO +N2419=Union Electric;UEP +N2420=Union Pacific;UNP +N2421=Union Pacific Resources Group;UPR +N2422=Union Planters Corp;UPC +N2423=Union Texas Petroleum;UTH +N2424=Unionamerica Holdings Adr;UA +N2425=Unisys Corp.;UIS +N2426=Unisys Cp Pf Series A;UIS+A +N2427=Unit Corp;UNT +N2428=United Amer Healthcare Cp;UAH +N2429=United Asset Management;UAM +N2430=United Dominion;UDI +N2431=United Dominion Realty Trust;UDR +N2432=United Healthcare;UNH +N2433=United Illuminating;UIL +N2434=United Ind Corp;UIC +N2435=United Kingdom Fund Inc;UKM +N2436=United Meridian Cp;UMC +N2437=United Park City Mines;UPK +N2438=United Technologies;UTX +N2439=United Transnet Inc;UT +N2440=United Water Res Inc;UWR +N2441=United Wisconsin Services Inc;UWZ +N2442=Unitrode Corp;UTR +N2443=Univar Corp;UVX +N2444=Universal Foods Cp;UFC +N2445=Universal Health Realty Trust;UHT +N2446=Universal Hlth Serv Inc Class B;UHS +N2447=Universal Leaf Tobacco;UVV +N2448=Uno Restaurants Corp;UNO +N2449=Unocal Co;UCL +N2450=UNUM (Union Mutual);UNM +N2451=Unum Cp 8.80pc Mids;UND +N2452=Urban Shopping Centers;URB +N2453=URS Cp;URS +N2454=US 1 Industries;USO +N2455=US Can Corp;USC +N2456=US Indust Inc;USN +N2457=US Restaurants;USV +N2458=US West;USW +N2459=US West Media Group;UMG +N2460=USA Waste Services Inc;UW +N2461=USAir Inc.;U +N2462=USF&G;FG +N2463=USG Cp;USG +N2464=USLife Corp.;USH +N2465=Uslife Income Fund;UIF +N2466=UST Inc;UST +N2467=USX Delhi Group;DGP +N2468=USX Marathon Oil Co;MRO +N2469=USX US Steel;X +N2470=Utilicorp United Inc;UCU +N2471=Valassis Communication Inc;VCI +N2472=Valero Energy Corp.;VLO +N2473=Valhi Corp.;VHI +N2474=Valley Natl Bancorp;VLY +N2475=Valspar Cp;VAL +N2476=Value City Department Stores;VCD +N2477=Value Health Inc;VH +N2478=Value Proprty Trust;VLP +N2479=Van Kamp Ca Muni Income;VCV +N2480=Van Kamp Insurance Muni Fd;VIM +N2481=Van Kamp Investment Group;VGM +N2482=Van Kamp Ny Value Muni Income;VNV +N2483=Van Kampen Amer Cap Cv Sec Inc;ACS +N2484=Van Kampen Amer Capital Bond Fund;ACB +N2485=Van Kampen Amer Capital Income Trust;ACD +N2486=Van Kampen Ltd;VLT +N2487=Van Kampen Mer Adv MI Muni;VKA +N2488=Van Kampen Mer Adv PA Muni;VAP +N2489=Van Kampen Mer CA Qual Muni;VQC +N2490=Van Kampen Mer FL Qua Muni;VFM +N2491=Van Kampen Mer Muni Opp Tr II;VOT +N2492=Van Kampen Mer PA Val Mun Incom;VPV +N2493=Van Kampen Mer Strag Sec Muni;VKS +N2494=Van Kampen Mer Value Inc Tr;VKV +N2495=Van Kampen Merit Municipal;VMT +N2496=Van Kampen Merritt Income Fund;VIT +N2497=Van Kampen Merritt Inv Grade Muni;VIG +N2498=Van Kampen Merritt IG Fl;VTF +N2499=Van Kampen Merritt IG NJ;VTJ +N2500=Van Kampen Merritt IG NY;VTN +N2501=Van Kampen Merritt IG PA;VTP +N2502=Van Kampen Muni Opportunity Trust;VMO +N2503=Van Kampen NY Quality;VNM +N2504=Van Kampen Ohio Quality;VOQ +N2505=Van Kampen Trust Investment Cal Muni;VIC +N2506=Van Kempen Merritt Municip;VKQ +N2507=Van Kempen Merritt Penn Quality Municipa;VPQ +N2508=Varco Intl Inc;VRC +N2509=Varian Associates;VAR +N2510=Varity Corp;VAT +N2511=Vastar Resources Inc;VRI +N2512=Vencor Inc;VC +N2513=Venture Stores;VEN +N2514=Venture Stores Inc Prf;VEN+ +N2515=Verifone Inc;VFI +N2516=Vesta Insurance Group Inc;VTA +N2517=Vestaur Securities Inc;VES +N2518=VF Cp;VFC +N2519=Vina Concha Y Toro;VCO +N2520=Vintage Petroleum Inc;VPI +N2521=Vishay Intertechnology;VSH +N2522=Vitro Sociedad Anonima ADR;VTO +N2523=Vivra Inc;V +N2524=Vms Mortgage Investment;VMG +N2525=Vodafone Group;VOD +N2526=Volunteer Capital Corp;VCC +N2527=Vons Companies Inc;VON +N2528=Vornado Inc;VNO +N2529=Vulcan Materials Co.;VMC +N2530=Waban Inc;WBN +N2531=Wabash Natl Cp;WNC +N2532=Wachovia Corp;WB +N2533=Wackenhut Corp;WAK +N2534=Wackenhut Correction;WHC +N2535=Wackenhut Cp Cl B;WAKB +N2536=Wahlco Environment Systems;WAL +N2537=Wainoco Co.;WOL +N2538=Wal-Mart Stores Inc.;WMT +N2539=Walden Residential Properties;WDN +N2540=Walgreen Co;WAG +N2541=Wallace Computer Svcs;WCS +N2542=Warnaco Group Inc Class A;WAC +N2543=Warner Lambert Co.;WLA +N2544=Washington Construction Group;WAS +N2545=Washington Energy Co;WEG +N2546=Washington Gas Light;WGL +N2547=Washington Homes;WHI +N2548=Washington Natl Corp;WNT +N2549=Washington Post Co;WPO +N2550=Washington Water Power;WWP +N2551=Waste Management Intl ADR;WME +N2552=Waterhouse Investor Serv Inc;WHO +N2553=Waters Corp;WAT +N2554=Watkins Johnson Co.;WJ +N2555=Watsco Inc Cl A;WSO +N2556=Watts Indus Inc Class A;WTS +N2557=Waxman Industries Inc;WAX +N2558=WCI Steel Inc;WRN +N2559=Weatherford Enterra Inc;WII +N2560=Webb (Del E) Corp;WBB +N2561=Weeks Corp;WKS +N2562=Weingarten Realty Inc;WRI +N2563=Weirton Steel Corp;WS +N2564=Weis Markets Inc;WMK +N2565=Wellman Inc;WLM +N2566=Wellpoint Health Networks Inc;WLP +N2567=Wells Fargo & Co;WFC +N2568=Wellsford Residentl P;WRP +N2569=Wendy's Intl.;WEN +N2570=West Coast Energy Inc;WE +N2571=West Company Inc;WST +N2572=West Penn Pwr Co Quid;WQP +N2573=Westbridge Capital Cp;WBC +N2574=Westcorp;WES +N2575=Western Atlas Inc;WAI +N2576=Western Digital Corp;WDC +N2577=Western Gas Resources Inc;WGR +N2578=Western National Corp;WNH +N2579=Western Resources;WR +N2580=Western Waste Industries;WW +N2581=Westinghouse Air Brake Co;WAB +N2582=Westinghouse Electric;WX +N2583=Westmoreland Coal;WCX +N2584=Westpac Banking Corp;WBK +N2585=Westvaco Corp.;W +N2586=Weyerhaeuser Co.;WY +N2587=Wheelabrator Technologies Inc;WTI +N2588=Whirlpool;WHR +N2589=Whitehall Corp;WHT +N2590=Whitman Corp;WH +N2591=Whittaker Corp.;WKR +N2592=WHX Corp;WHX +N2593=Wicor Inc;WIC +N2594=Williams Co.;WMB +N2595=Williams Coal Seam Gas Royalty Trust;WTU +N2596=Willis Corroon Plc ADR;WCG +N2597=Wilshire Oil Co Tx;WOC +N2598=Windmere;WND +N2599=Winn-Dixie Stores Inc.;WIN +N2600=Winnebago Inds Inc;WGO +N2601=Wisconsin Elec.;WEC +N2602=Wiser Oil Co;WZR +N2603=Witco Corp;WIT +N2604=WMC Ltd ADR;WMC +N2605=Wms Industries;WMS +N2606=WMX Inc.;WMX +N2607=Wolverine Tube Inc;WLV +N2608=Wolverine Worldwide;WWW +N2609=Woolworth Co.;Z +N2610=World Airways Inc;WOA +N2611=World Color Press Inc;WRC +N2612=World Fuel Services;INT +N2613=Worldtex Inc;WTX +N2614=Worldwide Dollarvest;WDV +N2615=Worldwide Value Fund;VLU +N2616=WPL Holding;WPH +N2617=WPS Resources;WPS +N2618=Wrigley (Wm Jr) Co.;WWY +N2619=Wyle Electronics;WYL +N2620=Wynn's Intl;WN +N2621=Xerox Corp.;XRX +N2622=Xtra Corp;XTR +N2623=Yankee Energy Systems Inc;YES +N2624=York Intl Corp;YRK +N2625=YPF Sociedad Anonima ADR;YPF +N2626=Z-Seven Fund Inc;ZSE +N2627=Zapata Corp.;ZAP +N2628=Zeigler Coal Holdings;ZEI +N2629=Zemex Corp;ZMX +N2630=Zeneca Group ADR;ZEN +N2631=Zenith Electronics Cp;ZE +N2632=Zenith Income Fund;ZIF +N2633=Zenith Natl Ins Corp;ZNT +N2634=Zero Co.;ZRO +N2635=Zilog Inc;ZLG +N2636=Zurich Reinsurance Centre Holding;ZRC +N2637=Zurn Industries;ZRN +N2638=Zweig Fund Inc.;ZF +N2639=Zweig Total Return Fund;ZTR diff --git a/http/PARSE.MAK b/http/PARSE.MAK new file mode 100644 index 0000000..5a08abd --- /dev/null +++ b/http/PARSE.MAK @@ -0,0 +1,329 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=parse - Win32 Debug +!MESSAGE No configuration specified. Defaulting to parse - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "parse - Win32 Release" && "$(CFG)" != "parse - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "parse.mak" CFG="parse - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "parse - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "parse - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "parse - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "parse - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\parse.exe" + +CLEAN : + -@erase "$(INTDIR)\Main.obj" + -@erase "$(OUTDIR)\parse.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/parse.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/parse.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/parse.pdb" /machine:I386 /out:"$(OUTDIR)/parse.exe" +LINK32_OBJS= \ + "$(INTDIR)\Main.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\parse.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "parse - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\parse.exe" + +CLEAN : + -@erase "$(INTDIR)\Main.obj" + -@erase "$(OUTDIR)\parse.exe" + -@erase "$(OUTDIR)\parse.ilk" + -@erase "$(OUTDIR)\parse.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /W2 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windws.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /W2 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windws.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/parse.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/parse.pdb" /debug /machine:I386 /out:"$(OUTDIR)/parse.exe" +LINK32_OBJS= \ + "$(INTDIR)\Main.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\parse.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "parse - Win32 Release" +# Name "parse - Win32 Debug" + +!IF "$(CFG)" == "parse - Win32 Release" + +!ELSEIF "$(CFG)" == "parse - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "parse - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\reader.hpp"\ + {$(INCLUDE)}"\.\stock.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "parse - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\reader.hpp"\ + {$(INCLUDE)}"\.\stock.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "parse - Win32 Release" + +!ELSEIF "$(CFG)" == "parse - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/http/PARSE.MDP b/http/PARSE.MDP new file mode 100644 index 0000000..d338080 Binary files /dev/null and b/http/PARSE.MDP differ diff --git a/http/PRESCAN.CPP b/http/PRESCAN.CPP new file mode 100644 index 0000000..5411bbf --- /dev/null +++ b/http/PRESCAN.CPP @@ -0,0 +1,28 @@ +#include +#include +#include +#include +#include +#include + +void PreScan::preScan(const String &pathFileName) +{ + BTree mapToken; + String formatString; + BYTE readByte; + + FileHandle writeFile("tokens.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + FileHandle scanFile(pathFileName,FileHandle::Read,FileHandle::ShareRead,FileHandle::Open); + if(!scanFile.isOkay())return; + FileMap scanMap(scanFile); + PureViewOfFile scanView(scanMap); + + PureVector scanBytes; + while(scanView.read(readByte))mapToken.insert(PureBYTE(readByte)); + mapToken.treeItems(scanBytes); + for(int itemIndex=0;itemIndex +#endif + +class String; + +class PreScan +{ +public: + PreScan(void); + virtual ~PreScan(); + void preScan(const String &pathFileName); +private: +}; + +inline +PreScan::PreScan(void) +{ +} + +inline +PreScan::~PreScan() +{ +} +#endif \ No newline at end of file diff --git a/http/READER.HPP b/http/READER.HPP new file mode 100644 index 0000000..6ab6262 --- /dev/null +++ b/http/READER.HPP @@ -0,0 +1,75 @@ +#ifndef _HTTP_READER_HPP_ +#define _HTTP_READER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Reader +{ +public: + Reader(void); + virtual ~Reader(); +protected: + WORD getAt(int bracketLevel,String &lineString,String &textString); + float strToDec(String strNum); +private: + enum {LeftBracket='<',RightBracket='>'}; +}; + +inline +Reader::Reader(void) +{ +} + +inline +Reader::~Reader() +{ +} + +WORD Reader::getAt(int bracketLevel,String &lineString,String &textString) +{ + char *ptrStr=((LPSTR)lineString); + char *ptrEnd=((LPSTR)lineString+lineString.length()); + String captureString; + + for(int currLevel=0;currLevelptrEnd)return FALSE; + while(*ptrStr!=RightBracket&&ptrStr<=ptrEnd)ptrStr++; + if(ptrStr>ptrEnd)return FALSE; + } + ptrStr++; + while(*ptrStr!=LeftBracket&&ptrStr<=ptrEnd)captureString+=*ptrStr++; + if(captureString.isNull())return FALSE; + textString=captureString; + return TRUE; +} + +inline +float Reader::strToDec(String strNum) +{ + float number; + float num; + float den; + String frString; + String whString; + + number=0.00; + if(strNum.isNull())return number; + if(strNum.strstr("."))return number=::atof(strNum); + whString=strNum.betweenString(0,' '); + if(whString.isNull())whString=strNum; + if(!whString.strstr("/")) + { + number=::atof(whString); + frString=strNum.betweenString(' ',0); + } + else frString=strNum; + if(frString.isNull())return number; + num=::atof(frString.betweenString(0,'/')); + den=::atof(frString.betweenString('/',0)); + number+=num/den; + return number; +} +#endif \ No newline at end of file diff --git a/http/SCAN.CPP b/http/SCAN.CPP new file mode 100644 index 0000000..9cbcf5a --- /dev/null +++ b/http/SCAN.CPP @@ -0,0 +1,226 @@ +#include +#include + +Scan::Scan(PureViewOfFile &srcView,PureViewOfFile &dstView,Table &symbolTable,WORD allowUserSymbols) +: Emit(srcView,dstView), mSymbolTable(symbolTable), mUserSymbols(allowUserSymbols) +{ +} + +Scan::~Scan(void) +{ + mWinConsole.writeLine("press enter to continue"); + mWinConsole.read(); +} + +void Scan::analyze(void) +{ + readch(); + while((int)mChar!=-1&&mChar!=0x001A) + { + skipSeparators(); + if(0xFFFF==mChar||0x001A==mChar)break; + if(isdigit(mChar))scanNumeral(); + else if(isalpha(mChar))scanWord(); + else if(mChar=='\r')scanNewLine(); + else if(mChar=='"')scanLiteral(); + else if(mChar=='<')scanLeftAngle(); + else if(mChar=='>')scanRightAngle(); + else if(mChar=='/')scanForwardSlash(); + else if(mChar=='&')scanAmpersand(); + else if(mChar==';')scanSemicolon(); + else if(mChar=='#')scanPound(); + else if(mChar=='!')scanExclamation(); + else if(mChar=='-')scanMinus(); + else if(mChar=='=')scanEqual(); + else scanUnknown(); + } + emit(endtext1); +} + +void Scan::scanNewLine(void) +{ + mWinConsole.writeLine("Scan::scanNewLine"); + readch(); + if(mChar=='\n') + { + emit(newline1); + readch(); + } + else emit(unknown1); +} + +void Scan::skipSeparators(void) +{ + while(mChar==SpaceChar||mChar==TabChar)readch(); +} + +void Scan::scanWord(void) +{ + String wordString; + int tableIndex(0); + + mWinConsole.writeLine("Scan::scanWord"); + if(mChar=='"')readch(); + while(0xFFFF!=mChar&&0x0D!=mChar&&mChar!='"'&&mChar!='>'&&mChar!='/'&&mChar!='='&&mChar!='"'&&!isspace(mChar)) + { + wordString+=String((char)mChar); + readch(); + } + if(mChar=='"')readch(); + if(wordString.isNull())return; + if(mSymbolTable.locateSymbolString(wordString,tableIndex)) + { + if(Symbol::UserSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),tableIndex); + else if(Symbol::AssignedSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::ConstantSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::SystemSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::CommandSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else emit(unknown1); + } + else + { + emit(startliteral1); + emit(wordString.length()); + emit((char*)wordString); + } +} + +void Scan::scanLiteral(void) +{ + String wordString; + int tableIndex(0); + + mWinConsole.writeLine("Scan::scanLiteral"); + readch(); + while(0xFFFF!=mChar&&'"'!=mChar) + { + wordString+=String((char)mChar); + readch(); + } + if(mChar=='"')readch(); + if(wordString.isNull())return; + if(mSymbolTable.locateSymbolString(wordString,tableIndex)) + { + if(Symbol::UserSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),tableIndex); + else if(Symbol::AssignedSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::ConstantSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::SystemSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else if(Symbol::CommandSymbol==mSymbolTable[tableIndex].symbolType()) + emit(name1,mSymbolTable[tableIndex].symbolType(),mSymbolTable[tableIndex].identifier()); + else emit(unknown1); + } + else + { + emit(startliteral1); + emit(wordString.length()); + emit((char*)wordString); + } +} + +void Scan::scanNumeral(void) +{ + int multiplier=10; + double value=0; + double digits; + + mWinConsole.writeLine("Scan::scanNumeral"); + while(0xFFFF!=mChar&&isdigit(mChar)) + { + digits=atof((char *)&mChar); + value=multiplier*value+digits; + readch(); + } + if(mChar=='.') + { + readch(); + while(isdigit(mChar)) + { + digits=atof((char *)&mChar); + value=(digits/multiplier)+value; + multiplier*=10; + readch(); + } + } + emit(numeral1,value); +} + +// ***************************************************************************** + +void Scan::scanLeftAngle(void) +{ + mWinConsole.writeLine("Scan::scanLeftAngle"); + emit(leftangle1); + readch(); +} + +void Scan::scanRightAngle(void) +{ + mWinConsole.writeLine("Scan::scanRightAngle"); + emit(rightangle1); + readch(); +} + +void Scan::scanForwardSlash(void) +{ + mWinConsole.writeLine("Scan::scanForwardSlash"); + emit(forwardslash1); + readch(); +} + +void Scan::scanAmpersand(void) +{ + mWinConsole.writeLine("Scan::scanAmpersand"); + emit(ampersand1); + readch(); +} + +void Scan::scanSemicolon(void) +{ + mWinConsole.writeLine("Scan::scanSemicolon"); + emit(semicolon1); + readch(); +} + +void Scan::scanPound(void) +{ + mWinConsole.writeLine("Scan::scanPound"); + emit(pound1); + readch(); +} + +void Scan::scanExclamation(void) +{ + mWinConsole.writeLine("Scan::scanExclamation"); + emit(exclamation1); + readch(); +} + +void Scan::scanMinus(void) +{ + mWinConsole.writeLine("Scan::scanMinus"); + emit(minus1); + readch(); +} + +void Scan::scanEqual(void) +{ + mWinConsole.writeLine("Scan::scanEqual"); + emit(equal1); + readch(); +} + +void Scan::scanUnknown(void) +{ + mWinConsole.writeLine("Scan::scanUnknown"); + emit(unknown1); + readch(); +} diff --git a/http/SCAN.HPP b/http/SCAN.HPP new file mode 100644 index 0000000..f3d2826 --- /dev/null +++ b/http/SCAN.HPP @@ -0,0 +1,56 @@ +#ifndef _HTTP_SCAN_HPP_ +#define _HTTP_SCAN_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _HTTP_EMIT_HPP_ +#include +#endif +#ifndef _HTTP_SYMBOL_HPP_ +#include +#endif +#ifndef _HTTP_TABLE_HPP_ +#include +#endif +#ifndef _COMMON_CONSOLE_HPP_ +#include +#endif + +class Scan : public Emit +{ +public: + enum ScanSymbols{leftangle1,rightangle1,forwardslash1,ampersand1,semicolon1,exclamation1,minus1,pound1,startliteral1,literal1,name1,equal1,newline1,numeral1,endtext1,unknown1,stop1}; + Scan(PureViewOfFile &srcView,PureViewOfFile &dstView,Table &symbolTable,WORD allowUserSymbols=TRUE); + virtual ~Scan(); + void analyze(void); +private: + enum {SpaceChar=32,TabChar=9}; + void readch(void); + void skipSeparators(void); + void scanNewLine(void); + void scanNumeral(void); + void scanWord(void); + void scanLiteral(void); + void scanLeftAngle(void); + void scanRightAngle(void); + void scanForwardSlash(void); + void scanAmpersand(void); + void scanSemicolon(void); + void scanPound(void); + void scanExclamation(void); + void scanMinus(void); + void scanEqual(void); + void scanUnknown(void); + + WORD mUserSymbols; + Console mWinConsole; + Table &mSymbolTable; + int mChar; +}; + +inline +void Scan::readch(void) +{ + mChar=read(); +} +#endif diff --git a/http/SCAN.LOG b/http/SCAN.LOG new file mode 100644 index 0000000..3b3b089 --- /dev/null +++ b/http/SCAN.LOG @@ -0,0 +1,1824 @@ +Scan::scanLeftAngle +Scan::scanWord 'html' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'head' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'title' +Scan::scanRightAngle +Scan::scanWord 'CheckFree' +Scan::scanSpace +Scan::scanWord 'Investment' +Scan::scanSpace +Scan::scanWord 'Services' +Scan::scanSpace +Scan::scanWord 'Quote' +Scan::scanSpace +Scan::scanWord 'Server' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'title' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'link' +Scan::scanSpace +Scan::scanWord 'rev' +Scan::scanEqual +Scan::scanLiteral 'made' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanLiteral 'dhp@secapl.com' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'head' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'center' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'nobr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/HOMELink' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'img' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'center' +Scan::scanSpace +Scan::scanWord 'border' +Scan::scanEqual +Scan::scanNumeral '0.000000' +Scan::scanSpace +Scan::scanWord 'src' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/images/cf_invest_svcs.sm.gif' +Scan::scanSpace +Scan::scanWord 'alt' +Scan::scanEqual +Scan::scanLiteral ' CheckFree Investment Services ' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '3.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanSpace +Scan::scanEqual +Scan::scanSpace +Scan::scanWord 'http://www.secapl.com/cgi-bin/qslinks.cgi?link3' +Scan::scanEqual +Scan::scanNumeral '1.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'img' +Scan::scanSpace +Scan::scanWord 'src' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/qsImages/ad3.gif' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '460.000000' +Scan::scanSpace +Scan::scanWord 'height' +Scan::scanEqual +Scan::scanNumeral '60.000000' +Scan::scanSpace +Scan::scanWord 'border' +Scan::scanEqual +Scan::scanNumeral '0.000000' +Scan::scanSpace +Scan::scanWord 'alt' +Scan::scanEqual +Scan::scanLiteral 'Click Here For An Investment Opportunity' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'br' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '3.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'p' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'FORM' +Scan::scanSpace +Scan::scanWord 'METHOD' +Scan::scanEqual +Scan::scanLiteral 'POST' +Scan::scanSpace +Scan::scanWord 'ACTION' +Scan::scanEqual +Scan::scanLiteral 'http://qs.secapl.com/cgi-bin/qs' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'input' +Scan::scanSpace +Scan::scanWord 'type' +Scan::scanEqual +Scan::scanWord 'hidden' +Scan::scanSpace +Scan::scanWord 'name' +Scan::scanEqual +Scan::scanLiteral 'gif' +Scan::scanSpace +Scan::scanWord 'value' +Scan::scanEqual +Scan::scanLiteral '2' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'input' +Scan::scanSpace +Scan::scanWord 'type' +Scan::scanEqual +Scan::scanWord 'hidden' +Scan::scanSpace +Scan::scanWord 'name' +Scan::scanEqual +Scan::scanLiteral 'time' +Scan::scanSpace +Scan::scanWord 'value' +Scan::scanEqual +Scan::scanLiteral '0000000866784013' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/ticks.html' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanWord 'Ticker' +Scan::scanSpace +Scan::scanWord 'Symbols' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanColon +Scan::scanSpace +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanRightParen +Scan::scanWord 'Up' +Scan::scanSpace +Scan::scanWord 'to' +Scan::scanSpace +Scan::scanNumeral '5.000000' +Scan::scanSpace +Scan::scanWord 'tickers' +Scan::scanSpace +Scan::scanWord 'may' +Scan::scanSpace +Scan::scanWord 'be' +Scan::scanSpace +Scan::scanWord 'entered' +Scan::scanSpace +Scan::scanWord 'separated' +Scan::scanSpace +Scan::scanWord 'by' +Scan::scanSpace +Scan::scanWord 'spaces' +Scan::scanLeftParen +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'br' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'dd' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'INPUT' +Scan::scanSpace +Scan::scanWord 'NAME' +Scan::scanEqual +Scan::scanLiteral 'tick' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '30.000000' +Scan::scanSpace +Scan::scanWord 'maxlength' +Scan::scanEqual +Scan::scanNumeral '50.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'font' +Scan::scanSpace +Scan::scanWord 'color' +Scan::scanEqual +Scan::scanNumeral '0.000000' +Scan::scanWord 'ff' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'input' +Scan::scanSpace +Scan::scanWord 'type' +Scan::scanEqual +Scan::scanLiteral 'submit' +Scan::scanSpace +Scan::scanWord 'value' +Scan::scanEqual +Scan::scanLiteral ' Get Quotes ' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'font' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'FORM' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'table' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '450.000000' +Scan::scanSpace +Scan::scanWord 'border' +Scan::scanSpace +Scan::scanWord 'cellpadding' +Scan::scanEqual +Scan::scanNumeral '2.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'colspan' +Scan::scanEqual +Scan::scanNumeral '4.000000' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'center' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'table' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '60.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '330.000000' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'center' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'strong' +Scan::scanRightAngle +Scan::scanWord 'CSI' +Scan::scanSpace +Scan::scanWord 'COMPUTER' +Scan::scanSpace +Scan::scanWord 'SPECIALIST' +Scan::scanSpace +Scan::scanWord 'INC' +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanRightParen +Scan::scanWord 'CSIS' +Scan::scanLeftParen +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'strong' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '60.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '60.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '330.000000' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'center' +Scan::scanRightAngle +Scan::scanWord 'Nasdaq' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '60.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'table' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'last' +Scan::scanRightAngle +Scan::scanWord 'Last' +Scan::scanSpace +Scan::scanWord 'Traded' +Scan::scanSpace +Scan::scanWord 'at' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'strong' +Scan::scanRightAngle +Scan::scanNumeral '2.000000' +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '16.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'strong' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'datetime' +Scan::scanRightAngle +Scan::scanWord 'Date/Time' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanWord 'Jun' +Scan::scanSpace +Scan::scanNumeral '19.000000' +Scan::scanSpace +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanColon +Scan::scanNumeral '38.000000' +Scan::scanColon +Scan::scanNumeral '55.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'change' +Scan::scanRightAngle +Scan::unknown '0x24' 36 +Scan::scanSpace +Scan::scanWord 'Change' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'strong' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'font' +Scan::scanSpace +Scan::scanWord 'color' +Scan::scanEqual +Scan::scanPound +Scan::scanWord 'AF0000' +Scan::scanRightAngle +Scan::scanMinus +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '8.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'font' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'strong' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::unknown '0x25' 37 +Scan::scanWord 'change' +Scan::scanRightAngle +Scan::unknown '0x25' 37 +Scan::scanSpace +Scan::scanWord 'Change' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'font' +Scan::scanSpace +Scan::scanWord 'color' +Scan::scanEqual +Scan::scanPound +Scan::scanWord 'AF0000' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanMinus +Scan::scanNumeral '5.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'font' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'volume' +Scan::scanRightAngle +Scan::scanWord 'Volume' +Scan::scanSpace +Scan::scanRightParen +Scan::scanNumeral '0.000000' +Scan::scanLeftParen +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'trades' +Scan::scanRightAngle +Scan::scanPound +Scan::scanSpace +Scan::scanWord 'of' +Scan::scanSpace +Scan::scanWord 'Trades' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'open' +Scan::scanRightAngle +Scan::scanWord 'Open' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '2.000000' +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '16.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'pclose' +Scan::scanRightAngle +Scan::scanWord 'Previous' +Scan::scanSpace +Scan::scanWord 'Close' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '2.000000' +Scan::scanSpace +Scan::scanNumeral '3.000000' +Scan::scanForwardSlash +Scan::scanNumeral '16.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'bid' +Scan::scanRightAngle +Scan::scanWord 'Bid' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '2.000000' +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '16.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'ask' +Scan::scanRightAngle +Scan::scanWord 'Ask' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '2.000000' +Scan::scanSpace +Scan::scanNumeral '3.000000' +Scan::scanForwardSlash +Scan::scanNumeral '16.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'low' +Scan::scanRightAngle +Scan::scanWord 'Day' +Scan::scanSpace +Scan::scanWord 'Low' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '2.000000' +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '16.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'high' +Scan::scanRightAngle +Scan::scanWord 'Day' +Scan::scanSpace +Scan::scanWord 'High' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '2.000000' +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '16.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanNumeral '52.000000' +Scan::scanWord 'low' +Scan::scanRightAngle +Scan::scanNumeral '52.000000' +Scan::scanSpace +Scan::scanWord 'Week' +Scan::scanSpace +Scan::scanWord 'Low' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '1.000000' +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '8.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanNumeral '52.000000' +Scan::scanWord 'high' +Scan::scanRightAngle +Scan::scanNumeral '52.000000' +Scan::scanSpace +Scan::scanWord 'Week' +Scan::scanSpace +Scan::scanWord 'High' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanNumeral '6.000000' +Scan::scanSpace +Scan::scanNumeral '1.000000' +Scan::scanForwardSlash +Scan::scanNumeral '8.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'table' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'p' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'p' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'table' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '450.000000' +Scan::scanSpace +Scan::scanWord 'border' +Scan::scanSpace +Scan::scanWord 'cellpadding' +Scan::scanEqual +Scan::scanNumeral '2.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'eps' +Scan::scanRightAngle +Scan::scanWord 'EPS' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanNumeral '0.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'pe' +Scan::scanRightAngle +Scan::scanWord 'P/E' +Scan::scanSpace +Scan::scanWord 'Ratio' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanNumeral '68.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/glossary.html' +Scan::scanPound +Scan::scanWord 'div' +Scan::scanRightAngle +Scan::scanWord 'Annual' +Scan::scanSpace +Scan::scanWord 'Div' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'td' +Scan::scanSpace +Scan::scanWord 'align' +Scan::scanEqual +Scan::scanWord 'right' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanSpace +Scan::scanNumeral '0.000000' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'td' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'tr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'table' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'p' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'p' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/mw.html' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'font' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::unknown '0x2b' 43 +Scan::scanNumeral '1.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanWord 'Market' +Scan::scanSpace +Scan::scanWord 'Watch' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'font' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanWord 'A' +Scan::scanSpace +Scan::scanWord 'Detailed' +Scan::scanSpace +Scan::scanWord 'Look' +Scan::scanSpace +Scan::scanWord 'at' +Scan::scanSpace +Scan::scanWord 'Market' +Scan::scanSpace +Scan::scanWord 'Activity' +Scan::scanLeftAngle +Scan::scanWord 'br' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '3.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/PAWLink' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'img' +Scan::scanSpace +Scan::scanWord 'src' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/qsImages/qs.gif' +Scan::scanSpace +Scan::scanWord 'height' +Scan::scanEqual +Scan::scanNumeral '30.000000' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'border' +Scan::scanEqual +Scan::scanNumeral '0.000000' +Scan::scanSpace +Scan::scanWord 'alt' +Scan::scanEqual +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'br' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '3.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/PORTVUELink' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanWord 'APL' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanMinus +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/NEWLink.html' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanWord 'WhatsNew' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanMinus +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/PAWLink' +Scan::scanRightAngle +Scan::scanWord 'Web' +Scan::scanSpace +Scan::scanWord 'Investor' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanMinus +Scan::scanLeftAngle +Scan::scanWord 'font' +Scan::scanSpace +Scan::scanWord 'color' +Scan::scanEqual +Scan::scanNumeral '777777.000000' +Scan::scanRightAngle +Scan::scanWord 'QuoteServer' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'font' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanMinus +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/PODIUMLink' +Scan::scanRightAngle +Scan::scanWord 'PODIUM' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanMinus +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/SPONSORLink' +Scan::scanRightAngle +Scan::scanWord 'Sponsored' +Scan::scanSpace +Scan::scanWord 'Sites' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '1.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'font' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::unknown '0x2b' 43 +Scan::scanNumeral '1.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/quoteserver/search.html' +Scan::scanRightAngle +Scan::scanWord 'Ticker' +Scan::scanSpace +Scan::scanWord 'Search' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanMinus +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/secapl/qsq1.html' +Scan::scanRightAngle +Scan::scanWord 'Questionnaire' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanMinus +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://pawws.com/C_phtml/calculators.shtml' +Scan::scanRightAngle +Scan::scanWord 'Financial' +Scan::scanSpace +Scan::scanWord 'Calculators' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '100.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '1.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/NEWLink' +Scan::scanRightAngle +Scan::scanWord 'What's' +Scan::scanSpace +Scan::scanWord 'New' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'font' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanSpace +Scan::scanMinus +Scan::scanMinus +Scan::scanSpace +Scan::scanWord 'Mar' +Scan::scanSpace +Scan::scanNumeral '10.000000' +Scan::scanSpace +Scan::scanNumeral '1997.000000' +Scan::scanColon +Scan::scanSpace +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.checkfree.com/cgi-bin/product.exe?news' +Scan::scanAmpersand +Scan::scanWord 'news/1997/pr_031097_reuters.html' +Scan::scanAmpersand +Scan::scanWord 'news/content.html' +Scan::scanRightAngle +Scan::scanWord 'Reuters' +Scan::scanSpace +Scan::scanWord 'and' +Scan::scanSpace +Scan::scanWord 'CheckFree' +Scan::scanSpace +Scan::scanWord 'Join' +Scan::scanSpace +Scan::scanWord 'Forces' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'br' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '1.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '100.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '1.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'font' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanMinus +Scan::scanNumeral '1.000000' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/HOMELink' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'nobr' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanWord 'CheckFree' +Scan::scanSpace +Scan::scanWord 'Investment' +Scan::scanSpace +Scan::scanWord 'Services' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanWord 'and' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanSpace +Scan::scanLeftAngle +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/NAQLink' +Scan::scanRightAngle +Scan::scanWord 'North' +Scan::scanSpace +Scan::scanWord 'American' +Scan::scanSpace +Scan::scanWord 'Quotations,' +Scan::scanSpace +Scan::scanWord 'Inc.' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanWord 'make' +Scan::scanSpace +Scan::scanWord 'no' +Scan::scanSpace +Scan::scanWord 'claims' +Scan::scanSpace +Scan::scanWord 'concerning' +Scan::scanSpace +Scan::scanWord 'the' +Scan::scanSpace +Scan::scanWord 'validity' +Scan::scanWord 'of' +Scan::scanSpace +Scan::scanWord 'the' +Scan::scanSpace +Scan::scanWord 'information' +Scan::scanSpace +Scan::scanWord 'provided' +Scan::scanSpace +Scan::scanWord 'herein,' +Scan::scanSpace +Scan::scanWord 'and' +Scan::scanSpace +Scan::scanWord 'will' +Scan::scanSpace +Scan::scanWord 'not' +Scan::scanSpace +Scan::scanWord 'be' +Scan::scanSpace +Scan::scanWord 'held' +Scan::scanSpace +Scan::scanWord 'liable' +Scan::scanSpace +Scan::scanWord 'for' +Scan::scanSpace +Scan::scanWord 'any' +Scan::scanSpace +Scan::scanWord 'use' +Scan::scanSpace +Scan::scanWord 'thereof.' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'b' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'font' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'hr' +Scan::scanSpace +Scan::scanWord 'width' +Scan::scanEqual +Scan::scanNumeral '600.000000' +Scan::scanSpace +Scan::scanWord 'size' +Scan::scanEqual +Scan::scanNumeral '3.000000' +Scan::scanSpace +Scan::scanWord 'noshade' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'http://www.secapl.com/HOMELink' +Scan::scanRightAngle +Scan::scanWord 'CheckFree' +Scan::scanSpace +Scan::scanWord 'Investment' +Scan::scanSpace +Scan::scanWord 'Services' +Scan::scanSpace +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'br' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanWord 'a' +Scan::scanSpace +Scan::scanWord 'href' +Scan::scanEqual +Scan::scanWord 'mailto:g.www@secapl.com' +Scan::scanRightAngle +Scan::scanWord 'g.www@secapl.com' +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'a' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'i' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'center' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'body' +Scan::scanRightAngle +Scan::scanLeftAngle +Scan::scanForwardSlash +Scan::scanWord 'html' +Scan::scanRightAngle diff --git a/http/SCRAPS.TXT b/http/SCRAPS.TXT new file mode 100644 index 0000000..bc2c52d --- /dev/null +++ b/http/SCRAPS.TXT @@ -0,0 +1,452 @@ +//#include +//#include +//#include + + + +// Table symbolTable; +// FileHandle srcFile("c:\\work\\http\\htm\\csis.htm",FileHandle::Read,FileHandle::ShareRead); +// FileMap srcMap(srcFile); +// FileMap dstMap("OUTMAP",0,250000,FileMap::ReadWrite,FileMap::Commit); +// PureViewOfFile srcView(srcMap); +// PureViewOfFile dstView(dstMap); +// Scan htmlScan(srcView,dstView,symbolTable); +// htmlScan.analyze(); +// FundReader fundReader; +// fundReader.readQuote("c:\\work\\http\\htm\\csis.htm",""); + + +#include +#include + +void parseData(void) +{ + FileHandle readFile("C:\\WORK\\HTTP\\DATA.DAT",FileHandle::Read); + FileHandle writeFile("C:\\WORK\\HTTP\\DATA.TXT",FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite); + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + String inLine; + String security; + String ticker; + String prefix; + int tickPos; + int count(18); + + while(readView.getLine(inLine)) + { + ::sprintf(prefix,"N%d=",count++); + security=inLine.betweenString('=','<'); + if(security.isNull())continue; + tickPos=inLine.strpos("TICKER="); + if(-1==tickPos)continue; + ticker=inLine.substr(tickPos); + if(ticker.isNull())continue; + ticker=ticker.betweenString('=','"'); + if(ticker.isNull())continue; + prefix+=security; + prefix+=";"; + prefix+=ticker; + writeFile.writeLine(prefix); + } + + +void parseData(void) +{ + FileHandle readFile("C:\\WORK\\HTTP\\DATA.DAT",FileHandle::Read); + FileHandle writeFile("C:\\WORK\\HTTP\\DATA.TXT",FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite); + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + String inLine; + String prefix; + String security; + String ticker; + char *lpThumb; + char *lpCursor; + int count(1); + + while(readView.getLine(inLine)) + { + ::sprintf(prefix,"N%d=",count++); + lpThumb=lpCursor=((char*)inLine)+40; + while(*lpCursor==' ')lpCursor--; + *(lpCursor+1)=0; + security=inLine; + lpCursor=++lpThumb; + while(*lpCursor!=' ')lpCursor++; + *lpCursor=0; + ticker=lpThumb; + prefix+=security; + prefix+=";"; + prefix+=ticker; + writeFile.writeLine(prefix); + } +} + +void Scan::analyze(void) +{ + readch(); + while((int)mChar!=-1&&mChar!=0x001A) + { + skipSeparators(); + if(0xFFFF==mChar||0x001A==mChar)break; + if(isdigit(mChar))scanNumeral(); + else if(isalpha(mChar))scanWord(); + else if(mChar=='\r')scanNewLine(); + else if(mChar=='"')scanLiteral(); + else if(mChar=='<')scanLeftAngle(); + else if(mChar=='>')scanRightAngle(); + else if(mChar=='/')scanForwardSlash(); + else if(mChar=='&')scanAmpersand(); + else scanUnknown(); +// else scanWord(); + } + emit(endtext1); +} + + +class StockReader : private Reader +{ +public: + StockReader(void); + virtual ~StockReader(); + WORD readQuote(const String &pathFileName,StockQuote &someStockQuote); +private: + enum Key{Description,Symbol,Last,Change,Volume,Open,Bid,Low,Low52,End}; + void handleDescriptionKey(const String "eLine,StockQuote &someStockQuote); + void handleSymbolKey(const String "eLine,StockQuote &someStockQuote); + void handleLastKey(const String "eLine,StockQuote &someStockQuote); + void handleChangeKey(const String "eLine,StockQuote &someStockQuote); + void handleVolumeKey(const String "eLine,StockQuote &someStockQuote); + void handleOpenKey(const String "eLine,StockQuote &someStockQuote); + void handleBidKey(const String "eLine,StockQuote &someStockQuote); + void handleLowKey(const String "eLine,StockQuote &someStockQuote); + void handleLowKey52(const String "eLine,StockQuote &someStockQuote); + + String mDescriptionKey; + String mLastKey; + String mChangeKey; + String mVolumeKey; + String mOpenKey; + String mBidKey; + String mLowKey; + String mLowKey52; +}; + +StockReader::StockReader(void) +: mDescriptionKey(""), + mLastKey("glossary.html#last"), + mChangeKey("glossary.html#change"), + mVolumeKey("glossary.html#volume"), + mOpenKey("glossary.html#open"), + mBidKey("glossary.html#bid"), + mLowKey("glossary.html#low"), + mLowKey52("glossary.html#52low") +{ +} + +inline +StockReader::~StockReader() +{ +} + +WORD StockReader::readQuote(const String &pathFileName,StockQuote &someStockQuote) +{ + FileHandle quoteFile(pathFileName); + if(!quoteFile.isOkay())return FALSE; + FileMap quoteMap(quoteFile); + PureViewOfFile quoteView(quoteMap); + Key expectKey; + String quoteLine; + + expectKey=Description; + while(TRUE) + { + if(End==expectKey||!quoteView.getLine(quoteLine))break; + switch(expectKey) + { + case Description : + if(!quoteLine.strstr(mDescriptionKey))break; + handleDescriptionKey(quoteLine,someStockQuote); + expectKey=Symbol; + break; + case Symbol : + handleSymbolKey(quoteLine,someStockQuote); + expectKey=Last; + break; + case Last : + if(!quoteLine.strstr(mLastKey))break; + handleLastKey(quoteLine,someStockQuote); + expectKey=Change; + break; + case Change : + if(!quoteLine.strstr(mChangeKey))break; + handleChangeKey(quoteLine,someStockQuote); + expectKey=Volume; + break; + case Volume : + if(!quoteLine.strstr(mVolumeKey))break; + handleVolumeKey(quoteLine,someStockQuote); + expectKey=Open; + break; + case Open : + if(!quoteLine.strstr(mOpenKey))break; + handleOpenKey(quoteLine,someStockQuote); + expectKey=Bid; + break; + case Bid : + if(!quoteLine.strstr(mBidKey))break; + handleBidKey(quoteLine,someStockQuote); + expectKey=Low; + break; + case Low : + if(!quoteLine.strstr(mLowKey))break; + handleLowKey(quoteLine,someStockQuote); + expectKey=Low52; + break; + case Low52 : + if(!quoteLine.strstr(mLowKey52))break; + handleLowKey52(quoteLine,someStockQuote); + expectKey=End; + break; + } + } +} + +void StockReader::handleDescriptionKey(const String "eLine,StockQuote &someStockQuote) +{ + char *pString; + String descriptionString; + + pString=(LPSTR)quoteLine+quoteLine.length(); + while(*(pString)!='>')pString--; + descriptionString=++pString; + descriptionString.trimRight(); + someStockQuote.description(descriptionString); + winConsole.writeLine(String("Description:")+descriptionString); +} + +void StockReader::handleSymbolKey(const String "eLine,StockQuote &someStockQuote) +{ + String symbolString(quoteLine.betweenString('(',')')); + someStockQuote.symbol(symbolString); + winConsole.writeLine(String("Symbol:")+symbolString); +} + +void StockReader::handleLastKey(const String "eLine,StockQuote &someStockQuote) +{ + String lastTraded; + String dateTime; + getAt(7,String(quoteLine),lastTraded); + getAt(14,String(quoteLine),dateTime); + winConsole.writeLine(String("Last Traded:")+lastTraded); + winConsole.writeLine(String("DateTime:")+dateTime); + someStockQuote.lastTraded(strToDec(lastTraded)); +} + +void StockReader::handleChangeKey(const String "eLine,StockQuote &someStockQuote) +{ + String changeInValueDollars; + String changeInValuePercent; + + if(!getAt(7,String(quoteLine),changeInValueDollars)) + { + getAt(8,String(quoteLine),changeInValueDollars); + if(!getAt(17,String(quoteLine),changeInValuePercent)) + getAt(19,String(quoteLine),changeInValuePercent); + } + else + { + if(!getAt(16,String(quoteLine),changeInValuePercent)) + getAt(14,String(quoteLine),changeInValuePercent); + } + winConsole.writeLine(String("$ Change:")+changeInValueDollars); + winConsole.writeLine(String("% Change:")+changeInValuePercent); + someStockQuote.dollarChange(strToDec(changeInValueDollars)); + someStockQuote.percentChange(::atof(changeInValuePercent)); +} + +void StockReader::handleVolumeKey(const String "eLine,StockQuote &someStockQuote) +{ + String volume; + String trades; + + if(!getAt(6,String(quoteLine),volume))getAt(8,String(quoteLine),volume); + getAt(12,String(quoteLine),trades); + winConsole.writeLine(String("Volume:")+volume); + winConsole.writeLine(String("Trades:")+trades); + someStockQuote.volume(::atoi(volume)); + someStockQuote.trades(::atoi(trades)); +} + +void StockReader::handleOpenKey(const String "eLine,StockQuote &someStockQuote) +{ + String open; + String previousClose; + + getAt(6,String(quoteLine),open); + getAt(12,String(quoteLine),previousClose); + winConsole.writeLine(String("Open:")+open); + winConsole.writeLine(String("Previous Close:")+previousClose); + someStockQuote.openingPrice(strToDec(open)); + someStockQuote.previousClose(strToDec(previousClose)); +} + +void StockReader::handleBidKey(const String "eLine,StockQuote &someStockQuote) +{ + String bid; + String ask; + + getAt(6,String(quoteLine),bid); + getAt(12,String(quoteLine),ask); + winConsole.writeLine(String("Bid:")+bid); + winConsole.writeLine(String("Ask:")+ask); + someStockQuote.bid(strToDec(bid)); + someStockQuote.ask(strToDec(ask)); +} + +void StockReader::handleLowKey(const String "eLine,StockQuote &someStockQuote) +{ + String dayLow; + String dayHigh; + + getAt(6,String(quoteLine),dayLow); + getAt(12,String(quoteLine),dayHigh); + winConsole.writeLine(String("Day Low:")+dayLow); + winConsole.writeLine(String("Day High:")+dayHigh); + someStockQuote.dayLow(strToDec(dayLow)); + someStockQuote.dayHigh(strToDec(dayHigh)); +} + +void StockReader::handleLowKey52(const String "eLine,StockQuote &someStockQuote) +{ + String weekLow52; + String weekHigh52; + + getAt(6,String(quoteLine),weekLow52); + getAt(12,String(quoteLine),weekHigh52); + winConsole.writeLine(String("52 Week Low:")+weekLow52); + winConsole.writeLine(String("52 Week High:")+weekHigh52); + someStockQuote.low52(strToDec(weekLow52)); + someStockQuote.high52(strToDec(weekHigh52)); +} + +// ************************************************************************** + +#include +#include +#include +#include +#include +#include + + +#include +#include +#include + +#if 0 +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + String strLine; + String strDescription; + String strSymbol; + String sqlString; + FileHandle inFile("mutual.txt",FileHandle::Read,FileHandle::ShareRead); + FileMap inMap(inFile); + PureViewOfFile inView(inMap); + SQLDb sqlDb; + SQLStatement sqlStatement; + + sqlDb.open("Exchange","dba","sql"); + if(!sqlDb.isOkay())return FALSE; + sqlStatement=sqlDb; + while(inView.getLine(strLine)) + { + strDescription=strLine.betweenString('=',';'); + strDescription.removeTokens("'"); + strSymbol=strLine.betweenString(';',0); + sqlString=String("add_symbol('")+strDescription+String("','")+strSymbol+String("','MUTUAL'")+String(");"); + sqlStatement.call(sqlString); + } + sqlDb.close(); + + String pathString("c:\\work\\http\\nasdaq\\"); + FindData findData; + StockReader stockReader; + StockQuote stockQuote; + + if(findData.findFirst(pathString+String("*.htm"))); + { + stockReader.readQuote(pathString+findData.fileName(),stockQuote); + winConsole.read(); + while(findData.findNext()) + { + stockReader.readQuote(pathString+findData.fileName(),stockQuote); + winConsole.read(); + } + } + return FALSE; +} +#endif + + + +#if 0 + Block itemStrings; + + hostName=cmdLine.betweenString(' ',0); + if(hostName.isNull())return FALSE; + nameFile=hostName; + hostName=hostName.betweenString(0,' '); + if(hostName.isNull())return FALSE; + nameFile=nameFile.betweenString(' ',0); + if(nameFile.isNull())return FALSE; + if(String(nameFile.operator[](0))==String("@")) + { + nameFile=nameFile.substr(1); +// listLoad(nameFile,itemStrings); +// for(int itemIndex=0;itemIndex +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef GlobalData c; +typedef Block e; + + diff --git a/http/STDTMPL.CPP b/http/STDTMPL.CPP new file mode 100644 index 0000000..1916845 --- /dev/null +++ b/http/STDTMPL.CPP @@ -0,0 +1,18 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef GlobalData c; +typedef Block e; +#endif diff --git a/http/STOCK.HPP b/http/STOCK.HPP new file mode 100644 index 0000000..97252df --- /dev/null +++ b/http/STOCK.HPP @@ -0,0 +1,291 @@ +#ifndef _HTTP_STOCKQUOTE_HPP_ +#define _HTTP_STOCKQUOTE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class StockQuote +{ +public: + StockQuote(void); + StockQuote(const StockQuote &someStockQuote); + virtual ~StockQuote(); + StockQuote &operator=(const StockQuote &someStockQuote); + WORD operator==(const StockQuote &someStockQuote)const; + const String &description(void)const; + void description(const String &description); + const String &symbol(void)const; + void symbol(const String &symbol); + float lastTraded(void)const; + void lastTraded(float lastTraded); + float dollarChange(void)const; + void dollarChange(float dollarChange); + float percentChange(void)const; + void percentChange(float percentChange); + int volume(void)const; + void volume(int volume); + int trades(void)const; + void trades(int trades); + float openingPrice(void)const; + void openingPrice(float openingPrice); + float previousClose(void)const; + void previousClose(float previousClose); + float bid(void)const; + void bid(float bid); + float ask(void)const; + void ask(float ask); + float dayLow(void)const; + void dayLow(float dayLow); + float dayHigh(void)const; + void dayHigh(float dayHigh); + float low52(void)const; + void low52(float low52); + float high52(void)const; + void high52(float high52); +private: + String mDescription; + String mSymbol; + float mLastTraded; + float mDollarChange; + float mPercentChange; + int mVolume; + int mTrades; + float mOpeningPrice; + float mPreviousClose; + + float mBid; + float mAsk; + float mDayLow; + float mDayHigh; + float mLow52; + float mHigh52; +}; + +inline +StockQuote::StockQuote(void) +: mLastTraded(0.00), mDollarChange(0.00), mPercentChange(0.00), mVolume(0), mTrades(0), + mOpeningPrice(0.00), mPreviousClose(0.00), + mBid(0.00), mAsk(0.00), mDayLow(0.00), mDayHigh(0.00), mLow52(0.00), mHigh52(0.00) +{ +} + +inline +StockQuote::StockQuote(const StockQuote &someStockQuote) +{ + *this=someStockQuote; +} + +inline +StockQuote::~StockQuote() +{ +} + +inline +StockQuote &StockQuote::operator=(const StockQuote &someStockQuote) +{ + description(someStockQuote.description()); + symbol(someStockQuote.symbol()); + lastTraded(someStockQuote.lastTraded()); + dollarChange(someStockQuote.dollarChange()); + percentChange(someStockQuote.percentChange()); + volume(someStockQuote.volume()); + trades(someStockQuote.trades()); + openingPrice(someStockQuote.openingPrice()); + previousClose(someStockQuote.previousClose()); + + bid(someStockQuote.bid()); + ask(someStockQuote.ask()); + dayLow(someStockQuote.dayLow()); + dayHigh(someStockQuote.dayHigh()); + low52(someStockQuote.low52()); + high52(someStockQuote.high52()); + return *this; +} + +inline +WORD StockQuote::operator==(const StockQuote &someStockQuote)const +{ + return (symbol()==someStockQuote.symbol()&& + description()==someStockQuote.description()); +} + +inline +const String &StockQuote::description(void)const +{ + return mDescription; +} + +inline +void StockQuote::description(const String &description) +{ + mDescription=description; +} + +inline +const String &StockQuote::symbol(void)const +{ + return mSymbol; +} + +inline +void StockQuote::symbol(const String &symbol) +{ + mSymbol=symbol; +} + +inline +float StockQuote::lastTraded(void)const +{ + return mLastTraded; +} + +inline +void StockQuote::lastTraded(float lastTraded) +{ + mLastTraded=lastTraded; +} + +inline +float StockQuote::dollarChange(void)const +{ + return mDollarChange; +} + +inline +void StockQuote::dollarChange(float dollarChange) +{ + mDollarChange=dollarChange; +} + +inline +float StockQuote::percentChange(void)const +{ + return mPercentChange; +} + +inline +void StockQuote::percentChange(float percentChange) +{ + mPercentChange=percentChange; +} + +inline +int StockQuote::volume(void)const +{ + return mVolume; +} + +inline +void StockQuote::volume(int volume) +{ + mVolume=volume; +} + +inline +int StockQuote::trades(void)const +{ + return mTrades; +} + +inline +void StockQuote::trades(int trades) +{ + mTrades=trades; +} + +inline +float StockQuote::openingPrice(void)const +{ + return mOpeningPrice; +} + +inline +void StockQuote::openingPrice(float openingPrice) +{ + mOpeningPrice=openingPrice; +} + +inline +float StockQuote::previousClose(void)const +{ + return mPreviousClose; +} + +inline +void StockQuote::previousClose(float previousClose) +{ + mPreviousClose=previousClose; +} + +inline +float StockQuote::bid(void)const +{ + return mBid; +} + +inline +void StockQuote::bid(float bid) +{ + mBid=bid; +} + +inline +float StockQuote::ask(void)const +{ + return mAsk; +} + +inline +void StockQuote::ask(float ask) +{ + mAsk=ask; +} + +inline +float StockQuote::dayLow(void)const +{ + return mDayLow; +} + +inline +void StockQuote::dayLow(float dayLow) +{ + mDayLow=dayLow; +} + +inline +float StockQuote::dayHigh(void)const +{ + return mDayHigh; +} + +inline +void StockQuote::dayHigh(float dayHigh) +{ + mDayHigh=dayHigh; +} + +inline +float StockQuote::low52(void)const +{ + return mLow52; +} + +inline +void StockQuote::low52(float low52) +{ + mLow52=low52; +} + +inline +float StockQuote::high52(void)const +{ + return mHigh52; +} + +inline +void StockQuote::high52(float high52) +{ + mHigh52=high52; +} +#endif \ No newline at end of file diff --git a/http/SYMBOL.HPP b/http/SYMBOL.HPP new file mode 100644 index 0000000..0212fe1 --- /dev/null +++ b/http/SYMBOL.HPP @@ -0,0 +1,126 @@ +#ifndef _HTTP_SYMBOL_HPP_ +#define _HTTP_SYMBOL_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Symbol +{ +public: + enum SymbolType{AssignedSymbol,ConstantSymbol,SystemSymbol, + CommandSymbol,UserSymbol,UnknownSymbol}; + Symbol(void); + Symbol(const Symbol &someSymbol); + Symbol(const String &symbolString,int identifier,SymbolType symbolType); + virtual ~Symbol(); + Symbol &operator=(const Symbol &someSymbol); + int operator==(const Symbol &someSymbol)const; + int operator==(const String &symbolString)const; + String symbolName(void)const; + void symbolName(const String &symbolName); + int identifier(void)const; + void identifier(int identifier); + SymbolType symbolType(void)const; + void symbolType(SymbolType symbolType); + void symbolValue(double symbolValue); + double symbolValue(void)const; +private: + String mSymbolName; + int mIdentifier; + SymbolType mSymbolType; + double mSymbolValue; +}; + +inline +Symbol::Symbol(void) +: mIdentifier(0), mSymbolType(UnknownSymbol), mSymbolValue(0.00) +{ +} + +inline +Symbol::Symbol(const Symbol &someSymbol) +{ + *this=someSymbol; +} + +inline +Symbol::Symbol(const String &symbolString,int identifier,SymbolType symbolType) +: mSymbolName(symbolString), mSymbolType(symbolType), mIdentifier(identifier) +{ +} + +inline +Symbol::~Symbol() +{ +} + +inline +int Symbol::operator==(const Symbol &someSymbol)const +{ + return (mSymbolName==someSymbol.mSymbolName); +} + +inline +int Symbol::operator==(const String &symbolName)const +{ + return (mSymbolName==symbolName); +} + +inline +Symbol &Symbol::operator=(const Symbol &someSymbol) +{ + symbolName(someSymbol.symbolName()); + identifier(someSymbol.identifier()); + symbolType(someSymbol.symbolType()); + symbolValue(someSymbol.symbolValue()); + return *this; +} + +inline +String Symbol::symbolName(void)const +{ + return mSymbolName; +} + +inline +void Symbol::symbolName(const String &symbolName) +{ + mSymbolName=symbolName; +} + +inline +Symbol::SymbolType Symbol::symbolType(void)const +{ + return mSymbolType; +} + +inline +void Symbol::symbolType(SymbolType symbolType) +{ + mSymbolType=symbolType; +} + +inline +int Symbol::identifier(void)const +{ + return mIdentifier; +} + +inline +void Symbol::identifier(int identifier) +{ + mIdentifier=identifier; +} + +inline +void Symbol::symbolValue(double symbolValue) +{ + mSymbolValue=symbolValue; +} + +inline +double Symbol::symbolValue(void)const +{ + return mSymbolValue; +} +#endif \ No newline at end of file diff --git a/http/SYMBOLS.HPP b/http/SYMBOLS.HPP new file mode 100644 index 0000000..582703f --- /dev/null +++ b/http/SYMBOLS.HPP @@ -0,0 +1,35 @@ +#ifndef _HTTP_DATAFILE_HPP_ +#define _HTTP_DATAFILE_HPP_ +#ifndef _HTTP_SYMBOL_HPP_ +#include +#endif + + +class Symbol +{ +public: + S +private: +}; + +class DataFile : public Block +{ +public: + enum Exchange{Nasdaq,Nyse,Amex,Mutual}; + Symbols(void); + Symbols(const Symbols &someSymbols); + virtual ~Symbols(); + WORD loadSymbols(const String &pathFileName,Exchange exchange); +private: +}; + + + enum Exchange{Nasdaq,Nyse,Amex,Mutual}; + Symbols(void); + Symbols(const Symbols &someSymbols); + virtual ~Symbols(); + WORD loadSymbols(Exchange exchange); + + + +#endif \ No newline at end of file diff --git a/http/TABLE.CPP b/http/TABLE.CPP new file mode 100644 index 0000000..b5623ea --- /dev/null +++ b/http/TABLE.CPP @@ -0,0 +1,32 @@ +#include + +WORD Table::locateSymbolString(String &symbolString,int &tableIndex) +{ + size_t numSymbols((size_t)size()); + + for(int index=0;index +#endif +#ifndef _HTTP_SYMBOL_HPP_ +#include +#endif + +class Table : public Block +{ +public: + Table(void); + virtual ~Table(); + WORD locateSymbolString(String &symbolString,int &tableIndex); + WORD locateSymbolIdentifier(int identifier,int &tableIndex); +private: +}; + +inline +Table::Table(void) +{ +} + +inline +Table::~Table() +{ +} +#endif \ No newline at end of file diff --git a/http/TDCONFIG.TDW b/http/TDCONFIG.TDW new file mode 100644 index 0000000..40ac47c Binary files /dev/null and b/http/TDCONFIG.TDW differ diff --git a/http/TDW.TRW b/http/TDW.TRW new file mode 100644 index 0000000..e3273ab Binary files /dev/null and b/http/TDW.TRW differ diff --git a/http/TOKENS.TXT b/http/TOKENS.TXT new file mode 100644 index 0000000..b98e8b0 --- /dev/null +++ b/http/TOKENS.TXT @@ -0,0 +1,80 @@ +' +' +' ' +'"' +'#' +'$' +'%' +'&' +''' +'(' +')' +'+' +',' +'-' +'.' +'/' +'0' +'1' +'2' +'3' +'4' +'5' +'6' +'7' +'8' +'9' +':' +'<' +'=' +'>' +'?' +'@' +'A' +'B' +'C' +'D' +'E' +'F' +'G' +'H' +'I' +'J' +'L' +'M' +'N' +'O' +'P' +'Q' +'R' +'S' +'T' +'U' +'V' +'W' +'_' +'a' +'b' +'c' +'d' +'e' +'f' +'g' +'h' +'i' +'k' +'l' +'m' +'n' +'o' +'p' +'q' +'r' +'s' +'t' +'u' +'v' +'w' +'x' +'y' +'z' diff --git a/http/http.001 b/http/http.001 new file mode 100644 index 0000000..833193c --- /dev/null +++ b/http/http.001 @@ -0,0 +1,121 @@ +# Microsoft Developer Studio Project File - Name="http" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=http - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "http.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "http.mak" CFG="http - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "http - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "http - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "http - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "http - Win32 Release" +# Name "http - Win32 Debug" +# Begin Source File + +SOURCE=.\http.rc +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainpage.cpp +# End Source File +# Begin Source File + +SOURCE=..\exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\msfileio.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\mssocket.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\statbar.lib +# End Source File +# End Target +# End Project diff --git a/http/http.dsp b/http/http.dsp new file mode 100644 index 0000000..428b60c --- /dev/null +++ b/http/http.dsp @@ -0,0 +1,106 @@ +# Microsoft Developer Studio Project File - Name="http" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=http - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "http.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "http.mak" CFG="http - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "http - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "http - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "http - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "http - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp8 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo /subsystem:windows /incremental:no /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "http - Win32 Release" +# Name "http - Win32 Debug" +# Begin Source File + +SOURCE=..\fund\html.cpp +# End Source File +# Begin Source File + +SOURCE=.\http.rc +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainpage.cpp +# End Source File +# End Target +# End Project diff --git a/http/http.dsw b/http/http.dsw new file mode 100644 index 0000000..33c8c10 --- /dev/null +++ b/http/http.dsw @@ -0,0 +1,89 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "fileio"=..\FILEIO\fileio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "http"=.\http.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name fileio + End Project Dependency + Begin Project Dependency + Project_Dep_Name socket + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency +}}} + +############################################################################### + +Project: "socket"=..\SOCKET\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/http/http.mdp b/http/http.mdp new file mode 100644 index 0000000..45a0fda Binary files /dev/null and b/http/http.mdp differ diff --git a/http/request.txt b/http/request.txt new file mode 100644 index 0000000..9bd4a85 --- /dev/null +++ b/http/request.txt @@ -0,0 +1 @@ +http://tiger.census.gov http://tiger.census.gov/cgi-bin/mapsurfer?infact=2&outfact=2&act=move&tlevel=-&tvar=-&tmeth=i&mlat=40.6333&mlon=-73.3334&msym=redpin&mlabel=&murl=&lat=40.63330&lon=-73.33340&wid=0.25&ht=0.25&conf=mapnew.con c:\\foo.html diff --git a/image/COMP.RSP b/image/COMP.RSP new file mode 100644 index 0000000..b77b31e --- /dev/null +++ b/image/COMP.RSP @@ -0,0 +1,7 @@ +/D__FLAT__ +/DSTRICT +/IC:\PARTS\MSVC\INCLUDE +/I.. +/c +/FoMSVCOBJ\EXPORT.OBJ +EXPORT.CPP diff --git a/image/DBGDIR.HPP b/image/DBGDIR.HPP new file mode 100644 index 0000000..e4ff270 --- /dev/null +++ b/image/DBGDIR.HPP @@ -0,0 +1,191 @@ +#ifndef _IMAGE_IMAGEDEBUGDIRECTORY_HPP_ +#define _IMAGE_IMAGEDEBUGDIRECTORY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class ImageDebugDirectory : private IMAGE_DEBUG_DIRECTORY +{ +public: + ImageDebugDirectory(void); + ImageDebugDirectory(const ImageDebugDirectory &someImageDebugDirectory); + virtual ~ImageDebugDirectory(); + PureViewOfFile &operator<<(PureViewOfFile &pureViewOfFile); + ImageDebugDirectory &operator=(const ImageDebugDirectory &someImageDebugDirectory); + WORD operator==(const ImageDebugDirectory &someImageDebugDirectory)const; + DWORD characteristics(void)const; + void characteristics(DWORD characteristics); + DWORD timeDate(void)const; + void timeDate(DWORD timeDate); + WORD majorVersion(void)const; + void majorVersion(WORD majorVersion); + WORD minorVersion(void)const; + void minorVersion(WORD minorVersion); + DWORD type(void)const; + void type(DWORD type); + DWORD sizeofData(void)const; + void sizeofData(DWORD sizeofData); + DWORD addressOfRawData(void)const; + void addressOfRawData(DWORD addressOfRawData); + DWORD pointerToRawData(void)const; + void pointerToRawData(DWORD pointerToRawData); +private: +}; + +inline +ImageDebugDirectory::ImageDebugDirectory(void) +{ + characteristics(0); + timeDate(0); + majorVersion(0); + minorVersion(0); + type(0); + sizeofData(0); + addressOfRawData(0); + pointerToRawData(0); +} + +inline +ImageDebugDirectory::ImageDebugDirectory(const ImageDebugDirectory &someImageDebugDirectory) +{ + *this=someImageDebugDirectory; +} + +inline +ImageDebugDirectory::~ImageDebugDirectory() +{ +} + +inline +ImageDebugDirectory &ImageDebugDirectory::operator=(const ImageDebugDirectory &someImageDebugDirectory) +{ + characteristics(someImageDebugDirectory.characteristics()); + timeDate(someImageDebugDirectory.timeDate()); + majorVersion(someImageDebugDirectory.majorVersion()); + minorVersion(someImageDebugDirectory.minorVersion()); + type(someImageDebugDirectory.type()); + sizeofData(someImageDebugDirectory.sizeofData()); + addressOfRawData(someImageDebugDirectory.addressOfRawData()); + pointerToRawData(someImageDebugDirectory.pointerToRawData()); + return *this; +} + +inline +WORD ImageDebugDirectory::operator==(const ImageDebugDirectory &someImageDebugDirectory)const +{ + return (characteristics()==someImageDebugDirectory.characteristics()&& + timeDate()==someImageDebugDirectory.timeDate()&& + majorVersion()==someImageDebugDirectory.majorVersion()&& + minorVersion()==someImageDebugDirectory.minorVersion()&& + type()==someImageDebugDirectory.type()&& + sizeofData()==someImageDebugDirectory.sizeofData()&& + addressOfRawData()==someImageDebugDirectory.addressOfRawData()&& + pointerToRawData()==someImageDebugDirectory.pointerToRawData()); +} + +inline +PureViewOfFile &ImageDebugDirectory::operator<<(PureViewOfFile &pureViewOfFile) +{ + pureViewOfFile.read((char*)&((IMAGE_DEBUG_DIRECTORY&)*this),sizeof(IMAGE_DEBUG_DIRECTORY)); + return pureViewOfFile; +} + +inline +DWORD ImageDebugDirectory::characteristics(void)const +{ + return IMAGE_DEBUG_DIRECTORY::Characteristics; +} + +inline +void ImageDebugDirectory::characteristics(DWORD characteristics) +{ + IMAGE_DEBUG_DIRECTORY::Characteristics=characteristics; +} + +inline +DWORD ImageDebugDirectory::timeDate(void)const +{ + return IMAGE_DEBUG_DIRECTORY::TimeDateStamp; +} + +inline +void ImageDebugDirectory::timeDate(DWORD timeDate) +{ + IMAGE_DEBUG_DIRECTORY::TimeDateStamp=timeDate; +} + +inline +WORD ImageDebugDirectory::majorVersion(void)const +{ + return IMAGE_DEBUG_DIRECTORY::MajorVersion; +} + +inline +void ImageDebugDirectory::majorVersion(WORD majorVersion) +{ + IMAGE_DEBUG_DIRECTORY::MajorVersion=majorVersion; +} + +inline +WORD ImageDebugDirectory::minorVersion(void)const +{ + return IMAGE_DEBUG_DIRECTORY::MinorVersion; +} + +inline +void ImageDebugDirectory::minorVersion(WORD minorVersion) +{ + IMAGE_DEBUG_DIRECTORY::MinorVersion=minorVersion; +} + +inline +DWORD ImageDebugDirectory::type(void)const +{ + return IMAGE_DEBUG_DIRECTORY::Type; +} + +inline +void ImageDebugDirectory::type(DWORD type) +{ + IMAGE_DEBUG_DIRECTORY::Type=type; +} + +inline +DWORD ImageDebugDirectory::sizeofData(void)const +{ + return IMAGE_DEBUG_DIRECTORY::SizeOfData; +} + +inline +void ImageDebugDirectory::sizeofData(DWORD sizeofData) +{ + IMAGE_DEBUG_DIRECTORY::SizeOfData=sizeofData; +} + +inline +DWORD ImageDebugDirectory::addressOfRawData(void)const +{ + return IMAGE_DEBUG_DIRECTORY::AddressOfRawData; +} + +inline +void ImageDebugDirectory::addressOfRawData(DWORD addressOfRawData) +{ + IMAGE_DEBUG_DIRECTORY::AddressOfRawData=addressOfRawData; +} + +inline +DWORD ImageDebugDirectory::pointerToRawData(void)const +{ + return IMAGE_DEBUG_DIRECTORY::PointerToRawData; +} + +inline +void ImageDebugDirectory::pointerToRawData(DWORD pointerToRawData) +{ + IMAGE_DEBUG_DIRECTORY::PointerToRawData; +} +#endif diff --git a/image/DIRENTRY.BAK b/image/DIRENTRY.BAK new file mode 100644 index 0000000..8f47169 --- /dev/null +++ b/image/DIRENTRY.BAK @@ -0,0 +1,68 @@ +#include +#include +#include + +ImageResourceDirectoryEntry::operator String(void) +{ + String resDirString; + + resDirString.reserve(256); + ::sprintf(resDirString,"offName:%ld nameIsString:%ld name:%ld resID:%ld offData:%ld offDir:%ld dataIsDir:%ld", + offsetName(),nameIsString(),name(),resID(),offsetData(),offsetDirectory(),dataIsDirectory()); + return resDirString; +} + +void ImageResourceDirectoryEntry::read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView) +{ + pureView.read((char*)&((IMAGE_RESOURCE_DIRECTORY_ENTRY&)*this),sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)); + pureView.push(); + if(nameIsString()) + { + ImageResourceDirString resDirString; + pureView.push(); + pureView.seek(resBase+offsetName(),PureViewOfFile::SeekSet); + resDirString.read(pureView); + mResourceName=resDirString.name(); + pureView.pop(); + } + if(dataIsDirectory()) + { + if(mResourceName.isNull())mResourceName=getResource(name()); +// if(!mResourceName.isNull())::OutputDebugString(mResourceName+String("\n")); + pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet); + mImageResourceDirectory.read(resBase,deltaOffset,pureView); + } + else + { + pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet); + mImageResourceDataEntry.read(deltaOffset,pureView); + } + pureView.pop(); +} + +const String &ImageResourceDirectoryEntry::getResource(DWORD resIndex) +{ + if(resIndex>=mResStrings.size())return mResStrings[0]; + return mResStrings[resIndex]; +} + +void ImageResourceDirectoryEntry::createResStrings(void) +{ + mResStrings.insert(&String("???_0")); + mResStrings.insert(&String("CURSOR")); + mResStrings.insert(&String("BITMAP")); + mResStrings.insert(&String("ICON")); + mResStrings.insert(&String("MENU")); + mResStrings.insert(&String("DIALOG")); + mResStrings.insert(&String("STRING")); + mResStrings.insert(&String("FONTDIR")); + mResStrings.insert(&String("FONT")); + mResStrings.insert(&String("ACCELERATORS")); + mResStrings.insert(&String("RCDATA")); + mResStrings.insert(&String("MESSAGETABLE")); + mResStrings.insert(&String("GROUP_CURSOR")); + mResStrings.insert(&String("???_13")); + mResStrings.insert(&String("GROUP_ICON")); + mResStrings.insert(&String("???_15")); + mResStrings.insert(&String("VERSION")); +} diff --git a/image/DIRENTRY.CPP b/image/DIRENTRY.CPP new file mode 100644 index 0000000..cb6d14e --- /dev/null +++ b/image/DIRENTRY.CPP @@ -0,0 +1,68 @@ +#include +#include +#include + +ImageResourceDirectoryEntry::operator String(void) +{ + String resDirString; + + resDirString.reserve(256); + ::sprintf(resDirString,"offName:%ld nameIsString:%ld name:%ld resID:%ld offData:%ld offDir:%ld dataIsDir:%ld", + offsetName(),nameIsString(),name(),resID(),offsetData(),offsetDirectory(),dataIsDirectory()); + return resDirString; +} + +void ImageResourceDirectoryEntry::read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView) +{ + pureView.read((char*)&((IMAGE_RESOURCE_DIRECTORY_ENTRY&)*this),sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)); + pureView.push(); + if(nameIsString()) + { + ImageResourceDirString resDirString; + pureView.push(); + pureView.seek(resBase+offsetName(),PureViewOfFile::SeekSet); + resDirString.read(pureView); + mResourceName=resDirString.name(); + pureView.pop(); + } + if(dataIsDirectory()) + { + if(mResourceName.isNull())mResourceName=getResource(name()); +// if(!mResourceName.isNull())::OutputDebugString(mResourceName+String("\n")); + pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet); + mImageResourceDirectory.read(resBase,deltaOffset,pureView); + } + else + { + pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet); + mImageResourceDataEntry.read(deltaOffset,pureView); + } + pureView.pop(); +} + +String ImageResourceDirectoryEntry::getResource(DWORD resIndex) +{ + if(resIndex>=mResStrings.size())return mResStrings[0]; + return mResStrings[resIndex]; +} + +void ImageResourceDirectoryEntry::createResStrings(void) +{ + mResStrings.insert(&StrPointer("???_0")); + mResStrings.insert(&StrPointer("CURSOR")); + mResStrings.insert(&StrPointer("BITMAP")); + mResStrings.insert(&StrPointer("ICON")); + mResStrings.insert(&StrPointer("MENU")); + mResStrings.insert(&StrPointer("DIALOG")); + mResStrings.insert(&StrPointer("STRING")); + mResStrings.insert(&StrPointer("FONTDIR")); + mResStrings.insert(&StrPointer("FONT")); + mResStrings.insert(&StrPointer("ACCELERATORS")); + mResStrings.insert(&StrPointer("RCDATA")); + mResStrings.insert(&StrPointer("MESSAGETABLE")); + mResStrings.insert(&StrPointer("GROUP_CURSOR")); + mResStrings.insert(&StrPointer("???_13")); + mResStrings.insert(&StrPointer("GROUP_ICON")); + mResStrings.insert(&StrPointer("???_15")); + mResStrings.insert(&StrPointer("VERSION")); +} diff --git a/image/DIRENTRY.HPP b/image/DIRENTRY.HPP new file mode 100644 index 0000000..72ca5cd --- /dev/null +++ b/image/DIRENTRY.HPP @@ -0,0 +1,286 @@ +#ifndef _IMAGE_IMAGERESOURCEDIRECTORYENTRY_HPP_ +#define _IMAGE_IMAGERESOURCEDIRECTORYENTRY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGERESOURCEDATAENTRY_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGERESOURCEDIRECTORY_HPP_ +#include +#endif +#ifndef _IMAGE_STRPOINTER_HPP_ +#include +#endif + +template +class SmartPointer; +template +class Block; +class PureViewOfFile; + +class ImageResourceDirectoryEntry : public IMAGE_RESOURCE_DIRECTORY_ENTRY +{ +public: + ImageResourceDirectoryEntry(void); + ImageResourceDirectoryEntry(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry); + virtual ~ImageResourceDirectoryEntry(); + ImageResourceDirectoryEntry &operator=(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry); + WORD operator==(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)const; + operator IMAGE_RESOURCE_DIRECTORY_ENTRY &(void); + operator String(void); + const String &resName(void)const; + DWORD offsetName(void)const; + void offsetName(DWORD offsetName); + DWORD nameIsString(void)const; + void nameIsString(DWORD nameIsString); + DWORD name(void)const; + void name(DWORD name); + DWORD resID(void)const; + void resID(DWORD resID); + DWORD offsetData(void)const; + void offsetData(DWORD offsetData); + DWORD offsetDirectory(void)const; + void offsetDirectory(DWORD offsetDirectory); + DWORD dataIsDirectory(void)const; + void dataIsDirectory(DWORD dataIsDirectory); + void read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView); + ImageResourceDirectory &imageResourceDirectory(void); + ImageResourceDataEntry &imageResourceDataEntry(void); +private: + void createResStrings(void); + String getResource(DWORD resIndex); + void setZero(void); + + String mResourceName; + Block mResStrings; + ImageResourceDirectory mImageResourceDirectory; + ImageResourceDataEntry mImageResourceDataEntry; +}; + +inline +ImageResourceDirectoryEntry::ImageResourceDirectoryEntry(void) +{ + setZero(); + createResStrings(); +} + +inline +ImageResourceDirectoryEntry::ImageResourceDirectoryEntry(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry) +{ + createResStrings(); + *this=someImageResourceDirectoryEntry; +} + +inline +ImageResourceDirectoryEntry::~ImageResourceDirectoryEntry() +{ +} + +inline +ImageResourceDirectoryEntry &ImageResourceDirectoryEntry::operator=(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry) +{ + mResourceName=someImageResourceDirectoryEntry.mResourceName; + offsetName(someImageResourceDirectoryEntry.offsetName()); + nameIsString(someImageResourceDirectoryEntry.nameIsString()); + name(someImageResourceDirectoryEntry.name()); + resID(someImageResourceDirectoryEntry.resID()); + offsetData(someImageResourceDirectoryEntry.offsetData()); + offsetDirectory(someImageResourceDirectoryEntry.offsetDirectory()); + dataIsDirectory(someImageResourceDirectoryEntry.dataIsDirectory()); + mImageResourceDirectory=someImageResourceDirectoryEntry.mImageResourceDirectory; + mImageResourceDataEntry=someImageResourceDirectoryEntry.mImageResourceDataEntry; + return *this; +} + +inline +WORD ImageResourceDirectoryEntry::operator==(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)const +{ + return (offsetName()==someImageResourceDirectoryEntry.offsetName()&& + nameIsString()==someImageResourceDirectoryEntry.nameIsString()&& + name()==someImageResourceDirectoryEntry.name()&& + resID()==someImageResourceDirectoryEntry.resID()&& + offsetData()==someImageResourceDirectoryEntry.offsetData()&& + offsetDirectory()==someImageResourceDirectoryEntry.offsetDirectory()&& + dataIsDirectory()==someImageResourceDirectoryEntry.dataIsDirectory()); +} + +inline +ImageResourceDirectoryEntry::operator IMAGE_RESOURCE_DIRECTORY_ENTRY &(void) +{ + return *this; +} + +inline +DWORD ImageResourceDirectoryEntry::offsetName(void)const +{ +#ifndef _MSC_VER + return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameOffset; +#else + return IMAGE_RESOURCE_DIRECTORY_ENTRY::NameOffset; +#endif +} + +inline +void ImageResourceDirectoryEntry::offsetName(DWORD offsetName) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameOffset=offsetName; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::NameOffset=offsetName; +#endif +} + +inline +DWORD ImageResourceDirectoryEntry::nameIsString(void)const +{ +#ifndef _MSC_VER + return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameIsString; +#else + return IMAGE_RESOURCE_DIRECTORY_ENTRY::NameIsString; +#endif +} + +inline +void ImageResourceDirectoryEntry::nameIsString(DWORD nameIsString) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameIsString=nameIsString; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::NameIsString=nameIsString; +#endif +} + +inline +DWORD ImageResourceDirectoryEntry::name(void)const +{ +#ifndef _MSC_VER + return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name; +#else + return IMAGE_RESOURCE_DIRECTORY_ENTRY::Name; +#endif +} + +inline +void ImageResourceDirectoryEntry::name(DWORD name) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name=name; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::Name=name; +#endif +} + +inline +DWORD ImageResourceDirectoryEntry::resID(void)const +{ +#ifndef _MSC_VER + return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Id; +#else + return IMAGE_RESOURCE_DIRECTORY_ENTRY::Id; +#endif +} + +inline +void ImageResourceDirectoryEntry::resID(DWORD resID) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Id=resID; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::Id=resID; +#endif +} + +inline +DWORD ImageResourceDirectoryEntry::offsetData(void)const +{ +#ifndef _MSC_VER + return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData; +#else + return IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData; +#endif +} + +inline +void ImageResourceDirectoryEntry::offsetData(DWORD offsetData) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData=offsetData; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData=offsetData; +#endif +} + +inline +DWORD ImageResourceDirectoryEntry::offsetDirectory(void)const +{ +#ifndef _MSC_VER + return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.OffsetToDirectory; +#else + return IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToDirectory; +#endif +} + +inline +void ImageResourceDirectoryEntry::offsetDirectory(DWORD offsetDirectory) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.OffsetToDirectory=offsetDirectory; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToDirectory=offsetDirectory; +#endif +} + +inline +DWORD ImageResourceDirectoryEntry::dataIsDirectory(void)const +{ +#ifndef _MSC_VER + return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.DataIsDirectory; +#else + return IMAGE_RESOURCE_DIRECTORY_ENTRY::DataIsDirectory; +#endif +} + +inline +void ImageResourceDirectoryEntry::dataIsDirectory(DWORD dataIsDirectory) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.DataIsDirectory=dataIsDirectory; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::DataIsDirectory=dataIsDirectory; +#endif +} + +inline +const String &ImageResourceDirectoryEntry::resName(void)const +{ + return mResourceName; +} + +inline +ImageResourceDirectory &ImageResourceDirectoryEntry::imageResourceDirectory(void) +{ + return mImageResourceDirectory; +} + +inline +ImageResourceDataEntry &ImageResourceDirectoryEntry::imageResourceDataEntry(void) +{ + return mImageResourceDataEntry; +} + +inline +void ImageResourceDirectoryEntry::setZero(void) +{ +#ifndef _MSC_VER + IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name=0; + IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData=0; +#else + IMAGE_RESOURCE_DIRECTORY_ENTRY::Name=0; + IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData=0; +#endif +} +#endif diff --git a/image/DLLFLAGS.HPP b/image/DLLFLAGS.HPP new file mode 100644 index 0000000..afe9583 --- /dev/null +++ b/image/DLLFLAGS.HPP @@ -0,0 +1,88 @@ +#ifndef _IMAGE_DLLFLAGS_HPP_ +#define _IMAGE_DLLFLAGS_HPP_ +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class DLLFlags +{ +public: + enum DLLType{PerProcessLibInit=0x0001,PerProcessLibTerm=0x0002, + PerThreadLibInit=0x0004,PerThreadLibTerm=0x0008}; + DLLFlags(DLLType dllType=PerProcessLibInit); + DLLFlags(const DLLFlags &someDLLFlags); + ~DLLFlags(); + DLLFlags &operator=(const DLLFlags &someDLLFlags); + WORD operator==(const DLLFlags &someDLLFlags)const; + WORD operator<<(PureViewOfFile &pureView); + DLLType dllType(void)const; + void dllType(DLLType dllType); + WORD isValid(void)const; +private: + DLLType mDLLType; +}; + +inline +DLLFlags::DLLFlags(DLLType dllType) +: mDLLType(dllType) +{ +} + +inline +DLLFlags::DLLFlags(const DLLFlags &someDLLFlags) +{ + *this=someDLLFlags; +} + +inline +DLLFlags::~DLLFlags() +{ +} + +inline +DLLFlags &DLLFlags::operator=(const DLLFlags &someDLLFlags) +{ + dllType(someDLLFlags.dllType()); + return *this; +} + +inline +WORD DLLFlags::operator==(const DLLFlags &someDLLFlags)const +{ + return dllType()==someDLLFlags.dllType(); +} + +inline +WORD DLLFlags::operator<<(PureViewOfFile &pureView) +{ + WORD dllType; + + pureView.read(dllType); + mDLLType=(DLLType)dllType; + if(!isValid())return FALSE; + return TRUE; +} + +inline +DLLFlags::DLLType DLLFlags::dllType(void)const +{ + return mDLLType; +} + +inline +void DLLFlags::dllType(DLLType dllType) +{ + mDLLType=dllType; +} + +inline +WORD DLLFlags::isValid(void)const +{ + if(PerProcessLibInit==dllType())return TRUE; + if(PerProcessLibTerm==dllType())return TRUE; + if(PerThreadLibInit==dllType())return TRUE; + if(PerThreadLibTerm==dllType())return TRUE; + return FALSE; +} +#endif + diff --git a/image/DOSHDR.HPP b/image/DOSHDR.HPP new file mode 100644 index 0000000..827f151 --- /dev/null +++ b/image/DOSHDR.HPP @@ -0,0 +1,185 @@ +#ifndef _IMAGE_DOSHEADER_HPP_ +#define _IMAGE_DOSHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class DOSHeader : private _IMAGE_DOS_HEADER +{ +public: + enum{MZSignature=IMAGE_DOS_SIGNATURE}; + DOSHeader(void); + DOSHeader(const DOSHeader &someDOSHeader); + ~DOSHeader(); + DOSHeader &operator=(const DOSHeader &someDOSHeader); + WORD operator==(const DOSHeader &someDOSHeader); + WORD operator<<(PureViewOfFile &pureView); + WORD magic(void)const; + WORD bytesLastPage(void)const; + WORD pages(void)const; + WORD relocations(void)const; + WORD headerParagraphs(void)const; + WORD minExtraParagraphs(void)const; + WORD maxExtraParagraphs(void)const; + WORD initialStackSegment(void)const; + WORD initialStackPointer(void)const; + WORD checksum(void)const; + WORD relocationTableAddress(void)const; + WORD overlayNumber(void)const; + WORD oemID(void)const; + WORD oemInfo(void)const; + LONG neHeaderAddress(void)const; + WORD isOkay(void)const; +private: +}; + +inline +DOSHeader::DOSHeader(void) +{ + ::memset((char*)&((_IMAGE_DOS_HEADER&)*this),0,sizeof(_IMAGE_DOS_HEADER)); +} + +inline +DOSHeader::DOSHeader(const DOSHeader &someDOSHeader) +{ + *this=someDOSHeader; +} + +inline +DOSHeader::~DOSHeader() +{ +} + +inline +WORD DOSHeader::operator<<(PureViewOfFile &pureView) +{ + if(sizeof(_IMAGE_DOS_HEADER)!=pureView.read((char*)&((_IMAGE_DOS_HEADER&)*this),sizeof(_IMAGE_DOS_HEADER)))return FALSE; + return isOkay(); +} + +inline +DOSHeader &DOSHeader::operator=(const DOSHeader &someDOSHeader) +{ + ::memcpy((char*)&((_IMAGE_DOS_HEADER&)*this),(char*)&((_IMAGE_DOS_HEADER&)someDOSHeader),sizeof(_IMAGE_DOS_HEADER)); + return *this; +} + +inline +WORD DOSHeader::operator==(const DOSHeader &someDOSHeader) +{ + return (magic()==someDOSHeader.magic()&& + bytesLastPage()==someDOSHeader.bytesLastPage()&& + pages()==someDOSHeader.pages()&& + relocations()==someDOSHeader.relocations()&& + headerParagraphs()==someDOSHeader.headerParagraphs()&& + minExtraParagraphs()==someDOSHeader.minExtraParagraphs()&& + maxExtraParagraphs()==someDOSHeader.maxExtraParagraphs()&& + initialStackSegment()==someDOSHeader.initialStackSegment()&& + initialStackPointer()==someDOSHeader.initialStackPointer()&& + checksum()==someDOSHeader.checksum()&& + relocationTableAddress()==someDOSHeader.relocationTableAddress()&& + overlayNumber()==someDOSHeader.overlayNumber()&& + oemID()==someDOSHeader.oemID()&& + oemInfo()==someDOSHeader.oemInfo()&& + neHeaderAddress()==someDOSHeader.neHeaderAddress()); +} + +inline +WORD DOSHeader::magic(void)const +{ + return _IMAGE_DOS_HEADER::e_magic; +} + +inline +WORD DOSHeader::bytesLastPage(void)const +{ + return _IMAGE_DOS_HEADER::e_cblp; +} + +inline +WORD DOSHeader::pages(void)const +{ + return _IMAGE_DOS_HEADER::e_cp; +} + +inline +WORD DOSHeader::relocations(void)const +{ + return _IMAGE_DOS_HEADER::e_crlc; +} + +inline +WORD DOSHeader::headerParagraphs(void)const +{ + return _IMAGE_DOS_HEADER::e_cparhdr; +} + +inline +WORD DOSHeader::minExtraParagraphs(void)const +{ + return _IMAGE_DOS_HEADER::e_minalloc; +} + +inline +WORD DOSHeader::maxExtraParagraphs(void)const +{ + return _IMAGE_DOS_HEADER::e_maxalloc; +} + +inline +WORD DOSHeader::initialStackSegment(void)const +{ + return _IMAGE_DOS_HEADER::e_ss; +} + +inline +WORD DOSHeader::initialStackPointer(void)const +{ + return _IMAGE_DOS_HEADER::e_sp; +} + +inline +WORD DOSHeader::checksum(void)const +{ + return _IMAGE_DOS_HEADER::e_csum; +} + +inline +WORD DOSHeader::relocationTableAddress(void)const +{ + return _IMAGE_DOS_HEADER::e_lfarlc; +} + +inline +WORD DOSHeader::overlayNumber(void)const +{ + return _IMAGE_DOS_HEADER::e_ovno; +} + +inline +WORD DOSHeader::oemID(void)const +{ + return _IMAGE_DOS_HEADER::e_oemid; +} + +inline +WORD DOSHeader::oemInfo(void)const +{ + return _IMAGE_DOS_HEADER::e_oeminfo; +} + +inline +LONG DOSHeader::neHeaderAddress(void)const +{ + return _IMAGE_DOS_HEADER::e_lfanew; +} + +inline +WORD DOSHeader::isOkay(void)const +{ + return MZSignature==magic(); +} +#endif diff --git a/image/DTAENTRY.BAK b/image/DTAENTRY.BAK new file mode 100644 index 0000000..40661a7 --- /dev/null +++ b/image/DTAENTRY.BAK @@ -0,0 +1,135 @@ +#ifndef _IMAGE_IMAGERESOURCEDATAENTRY_HPP_ +#define _IMAGE_IMAGERESOURCEDATAENTRY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class PureViewOfFile; + +class ImageResourceDataEntry : private IMAGE_RESOURCE_DATA_ENTRY +{ +public: + ImageResourceDataEntry(void); + ImageResourceDataEntry(const ImageResourceDataEntry &someImageResourceDataEntry); + virtual ~ImageResourceDataEntry(); + ImageResourceDataEntry &operator=(const ImageResourceDataEntry &someImageResourceDataEntry); + WORD operator==(const ImageResourceDataEntry &someImageResourceDataEntry)const; + operator IMAGE_RESOURCE_DATA_ENTRY &(void); + DWORD offsetData(void)const; + void offsetData(DWORD offsetData); + DWORD size(void)const; + void size(DWORD size); + DWORD codePage(void)const; + void codePage(DWORD codePage); + DWORD reserved(void)const; + void reserved(DWORD reserved); + void read(DWORD deltaOffset,PureViewOfFile &pureView); +private: + void setZero(void); + GlobalData mRawData; +}; + +inline +ImageResourceDataEntry::ImageResourceDataEntry(void) +{ + setZero(); +} + +inline +ImageResourceDataEntry::ImageResourceDataEntry(const ImageResourceDataEntry &someImageResourceDataEntry) +{ + *this=someImageResourceDataEntry; +} + +inline +ImageResourceDataEntry::~ImageResourceDataEntry() +{ +} + +inline +ImageResourceDataEntry &ImageResourceDataEntry::operator=(const ImageResourceDataEntry &someImageResourceDataEntry) +{ + offsetData(someImageResourceDataEntry.offsetData()); + size(someImageResourceDataEntry.size()); + codePage(someImageResourceDataEntry.codePage()); + reserved(someImageResourceDataEntry.reserved()); + mRawData=someImageResourceDataEntry.mRawData; + return *this; +} + +inline +WORD ImageResourceDataEntry::operator==(const ImageResourceDataEntry &someImageResourceDataEntry)const +{ + return (offsetData()==someImageResourceDataEntry.offsetData()&& + size()==someImageResourceDataEntry.size()&& + codePage()==someImageResourceDataEntry.codePage()&& + reserved()==someImageResourceDataEntry.reserved()&& + mRawData==someImageResourceDataEntry.mRawData); +} + +inline +ImageResourceDataEntry::operator IMAGE_RESOURCE_DATA_ENTRY &(void) +{ + return *this; +} + +inline +DWORD ImageResourceDataEntry::offsetData(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::OffsetToData; +} + +inline +void ImageResourceDataEntry::offsetData(DWORD offsetData) +{ + IMAGE_RESOURCE_DATA_ENTRY::OffsetToData=offsetData; +} + +inline +DWORD ImageResourceDataEntry::size(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::Size; +} + +inline +void ImageResourceDataEntry::size(DWORD size) +{ + IMAGE_RESOURCE_DATA_ENTRY::Size=size; +} + +inline +DWORD ImageResourceDataEntry::codePage(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::CodePage; +} + +inline +void ImageResourceDataEntry::codePage(DWORD codePage) +{ + IMAGE_RESOURCE_DATA_ENTRY::CodePage=codePage; +} + +inline +DWORD ImageResourceDataEntry::reserved(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::Reserved; +} + +inline +void ImageResourceDataEntry::reserved(DWORD reserved) +{ + IMAGE_RESOURCE_DATA_ENTRY::Reserved=reserved; +} + +inline +void ImageResourceDataEntry::setZero(void) +{ + IMAGE_RESOURCE_DATA_ENTRY::OffsetToData=0; + IMAGE_RESOURCE_DATA_ENTRY::Size=0; + IMAGE_RESOURCE_DATA_ENTRY::CodePage=0; + IMAGE_RESOURCE_DATA_ENTRY::Reserved=0; +} +#endif \ No newline at end of file diff --git a/image/DTAENTRY.CPP b/image/DTAENTRY.CPP new file mode 100644 index 0000000..b9843c5 --- /dev/null +++ b/image/DTAENTRY.CPP @@ -0,0 +1,13 @@ +#include +#include + +void ImageResourceDataEntry::read(DWORD deltaOffset,PureViewOfFile &pureView) +{ + pureView.push(); + pureView.read((char*)&((IMAGE_RESOURCE_DATA_ENTRY&)*this),sizeof(IMAGE_RESOURCE_DATA_ENTRY)); + mRawData.size(size()); + pureView.seek(offsetData()-deltaOffset,PureViewOfFile::SeekSet); + pureView.read((char*)((BYTE*)&mRawData[0]),mRawData.size()); + pureView.pop(); +} + diff --git a/image/DTAENTRY.HPP b/image/DTAENTRY.HPP new file mode 100644 index 0000000..052e4d4 --- /dev/null +++ b/image/DTAENTRY.HPP @@ -0,0 +1,142 @@ +#ifndef _IMAGE_IMAGERESOURCEDATAENTRY_HPP_ +#define _IMAGE_IMAGERESOURCEDATAENTRY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class PureViewOfFile; + +class ImageResourceDataEntry : private IMAGE_RESOURCE_DATA_ENTRY +{ +public: + ImageResourceDataEntry(void); + ImageResourceDataEntry(const ImageResourceDataEntry &someImageResourceDataEntry); + virtual ~ImageResourceDataEntry(); + ImageResourceDataEntry &operator=(const ImageResourceDataEntry &someImageResourceDataEntry); + WORD operator==(const ImageResourceDataEntry &someImageResourceDataEntry)const; + operator IMAGE_RESOURCE_DATA_ENTRY &(void); + DWORD offsetData(void)const; + void offsetData(DWORD offsetData); + DWORD size(void)const; + void size(DWORD size); + DWORD codePage(void)const; + void codePage(DWORD codePage); + DWORD reserved(void)const; + void reserved(DWORD reserved); + GlobalData &rawData(void); + void read(DWORD deltaOffset,PureViewOfFile &pureView); +private: + void setZero(void); + GlobalData mRawData; +}; + +inline +ImageResourceDataEntry::ImageResourceDataEntry(void) +{ + setZero(); +} + +inline +ImageResourceDataEntry::ImageResourceDataEntry(const ImageResourceDataEntry &someImageResourceDataEntry) +{ + *this=someImageResourceDataEntry; +} + +inline +ImageResourceDataEntry::~ImageResourceDataEntry() +{ +} + +inline +ImageResourceDataEntry &ImageResourceDataEntry::operator=(const ImageResourceDataEntry &someImageResourceDataEntry) +{ + offsetData(someImageResourceDataEntry.offsetData()); + size(someImageResourceDataEntry.size()); + codePage(someImageResourceDataEntry.codePage()); + reserved(someImageResourceDataEntry.reserved()); + mRawData=someImageResourceDataEntry.mRawData; + return *this; +} + +inline +WORD ImageResourceDataEntry::operator==(const ImageResourceDataEntry &someImageResourceDataEntry)const +{ + return (offsetData()==someImageResourceDataEntry.offsetData()&& + size()==someImageResourceDataEntry.size()&& + codePage()==someImageResourceDataEntry.codePage()&& + reserved()==someImageResourceDataEntry.reserved()&& + mRawData==someImageResourceDataEntry.mRawData); +} + +inline +ImageResourceDataEntry::operator IMAGE_RESOURCE_DATA_ENTRY &(void) +{ + return *this; +} + +inline +DWORD ImageResourceDataEntry::offsetData(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::OffsetToData; +} + +inline +void ImageResourceDataEntry::offsetData(DWORD offsetData) +{ + IMAGE_RESOURCE_DATA_ENTRY::OffsetToData=offsetData; +} + +inline +DWORD ImageResourceDataEntry::size(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::Size; +} + +inline +void ImageResourceDataEntry::size(DWORD size) +{ + IMAGE_RESOURCE_DATA_ENTRY::Size=size; +} + +inline +DWORD ImageResourceDataEntry::codePage(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::CodePage; +} + +inline +void ImageResourceDataEntry::codePage(DWORD codePage) +{ + IMAGE_RESOURCE_DATA_ENTRY::CodePage=codePage; +} + +inline +DWORD ImageResourceDataEntry::reserved(void)const +{ + return IMAGE_RESOURCE_DATA_ENTRY::Reserved; +} + +inline +void ImageResourceDataEntry::reserved(DWORD reserved) +{ + IMAGE_RESOURCE_DATA_ENTRY::Reserved=reserved; +} + +inline +GlobalData &ImageResourceDataEntry::rawData(void) +{ + return mRawData; +} + +inline +void ImageResourceDataEntry::setZero(void) +{ + IMAGE_RESOURCE_DATA_ENTRY::OffsetToData=0; + IMAGE_RESOURCE_DATA_ENTRY::Size=0; + IMAGE_RESOURCE_DATA_ENTRY::CodePage=0; + IMAGE_RESOURCE_DATA_ENTRY::Reserved=0; +} +#endif \ No newline at end of file diff --git a/image/EXPDIR.HPP b/image/EXPDIR.HPP new file mode 100644 index 0000000..dc1a73a --- /dev/null +++ b/image/EXPDIR.HPP @@ -0,0 +1,250 @@ +#ifndef _IMAGE_IMAGEEXPORTDIRECTORY_HPP_ +#define _IMAGE_IMAGEEXPORTDIRECTORY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class ImageExportDirectory : private IMAGE_EXPORT_DIRECTORY +{ +public: + ImageExportDirectory(void); + ImageExportDirectory(const ImageExportDirectory &someImageExportDirectory); + virtual ~ImageExportDirectory(); + ImageExportDirectory &operator=(const ImageExportDirectory &someImageExportDirectory); + ImageExportDirectory &operator<<(PureViewOfFile &pureView); + WORD operator==(const ImageExportDirectory &someImageExportDirectory); + DWORD characteristics(void)const; + void characteristics(DWORD characteristics); + DWORD timeDate(void)const; + void timeDate(DWORD timeDate); + WORD majorVersion(void)const; + void majorVersion(WORD majorVersion); + WORD minorVersion(void)const; + void minorVersion(WORD minorVersion); + DWORD name(void)const; + void name(DWORD name); + DWORD base(void)const; + void base(DWORD base); + DWORD numberOfFunctions(void)const; + void numberOfFunctions(DWORD numberOfunctions); + DWORD numberOfNames(void)const; + void numberOfNames(DWORD numberOfNames); + DWORD addressOfFunctions(void)const; + void addressOfFunctions(DWORD addressOfFunctions); + DWORD addressOfNames(void)const; + void addressOfNames(DWORD addressOfNames); + DWORD addressOfNameOrdinals(void)const; + void addressOfNameOrdinals(DWORD addressOfNameOrdinals); +private: + void zeroInit(void); +}; + +inline +ImageExportDirectory::ImageExportDirectory(void) +{ + zeroInit(); +} + +inline +ImageExportDirectory::ImageExportDirectory(const ImageExportDirectory &someImageExportDirectory) +{ + *this=someImageExportDirectory; +} + +inline +ImageExportDirectory::~ImageExportDirectory() +{ +} + +inline +ImageExportDirectory &ImageExportDirectory::operator=(const ImageExportDirectory &someImageExportDirectory) +{ + characteristics(someImageExportDirectory.characteristics()); + timeDate(someImageExportDirectory.timeDate()); + majorVersion(someImageExportDirectory.majorVersion()); + minorVersion(someImageExportDirectory.minorVersion()); + name(someImageExportDirectory.name()); + base(someImageExportDirectory.base()); + numberOfFunctions(someImageExportDirectory.numberOfFunctions()); + numberOfNames(someImageExportDirectory.numberOfNames()); + addressOfFunctions(someImageExportDirectory.addressOfFunctions()); + addressOfNames(someImageExportDirectory.addressOfNames()); + addressOfNameOrdinals(someImageExportDirectory.addressOfNameOrdinals()); + return *this; +} + +inline +WORD ImageExportDirectory::operator==(const ImageExportDirectory &someImageExportDirectory) +{ + return (characteristics()==someImageExportDirectory.characteristics()&& + timeDate()==someImageExportDirectory.timeDate()&& + majorVersion()==someImageExportDirectory.majorVersion()&& + minorVersion()==someImageExportDirectory.minorVersion()&& + name()==someImageExportDirectory.name()&& + base()==someImageExportDirectory.base()&& + numberOfFunctions()==someImageExportDirectory.numberOfFunctions()&& + numberOfNames()==someImageExportDirectory.numberOfNames()&& + addressOfFunctions()==someImageExportDirectory.addressOfFunctions()&& + addressOfNames()==someImageExportDirectory.addressOfNames()&& + addressOfNameOrdinals()==someImageExportDirectory.addressOfNameOrdinals()); +} + +inline +ImageExportDirectory &ImageExportDirectory::operator<<(PureViewOfFile &pureView) +{ + pureView.read((char*)&((IMAGE_EXPORT_DIRECTORY&)*this),sizeof(IMAGE_EXPORT_DIRECTORY)); + return *this; +} + +inline +DWORD ImageExportDirectory::characteristics(void)const +{ + return IMAGE_EXPORT_DIRECTORY::Characteristics; +} + +inline +void ImageExportDirectory::characteristics(DWORD characteristics) +{ + IMAGE_EXPORT_DIRECTORY::Characteristics=characteristics; +} + +inline +DWORD ImageExportDirectory::timeDate(void)const +{ + return IMAGE_EXPORT_DIRECTORY::TimeDateStamp; +} + +inline +void ImageExportDirectory::timeDate(DWORD timeDate) +{ + IMAGE_EXPORT_DIRECTORY::TimeDateStamp=timeDate; +} + +inline +WORD ImageExportDirectory::majorVersion(void)const +{ + return IMAGE_EXPORT_DIRECTORY::MajorVersion; +} + +inline +void ImageExportDirectory::majorVersion(WORD majorVersion) +{ + IMAGE_EXPORT_DIRECTORY::MajorVersion=majorVersion; +} + +inline +WORD ImageExportDirectory::minorVersion(void)const +{ + return IMAGE_EXPORT_DIRECTORY::MinorVersion; +} + +inline +void ImageExportDirectory::minorVersion(WORD minorVersion) +{ + IMAGE_EXPORT_DIRECTORY::MinorVersion=minorVersion; +} + +inline +DWORD ImageExportDirectory::name(void)const +{ + return IMAGE_EXPORT_DIRECTORY::Name; +} + +inline +void ImageExportDirectory::name(DWORD name) +{ + IMAGE_EXPORT_DIRECTORY::Name=name; +} + +inline +DWORD ImageExportDirectory::base(void)const +{ + return IMAGE_EXPORT_DIRECTORY::Base; +} + +inline +void ImageExportDirectory::base(DWORD base) +{ + IMAGE_EXPORT_DIRECTORY::Base=base; +} + +inline +DWORD ImageExportDirectory::numberOfFunctions(void)const +{ + return IMAGE_EXPORT_DIRECTORY::NumberOfFunctions; +} + +inline +void ImageExportDirectory::numberOfFunctions(DWORD numberOfFunctions) +{ + IMAGE_EXPORT_DIRECTORY::NumberOfFunctions=numberOfFunctions; +} + +inline +DWORD ImageExportDirectory::numberOfNames(void)const +{ + return IMAGE_EXPORT_DIRECTORY::NumberOfNames; +} + +inline +void ImageExportDirectory::numberOfNames(DWORD numberOfNames) +{ + IMAGE_EXPORT_DIRECTORY::NumberOfNames=numberOfNames; +} + +inline +DWORD ImageExportDirectory::addressOfFunctions(void)const +{ + return (DWORD)IMAGE_EXPORT_DIRECTORY::AddressOfFunctions; +} + +inline +void ImageExportDirectory::addressOfFunctions(DWORD addressOfFunctions) +{ + IMAGE_EXPORT_DIRECTORY::AddressOfFunctions=(DWORD)(PDWORD*)addressOfFunctions; +} + +inline +DWORD ImageExportDirectory::addressOfNames(void)const +{ + return (DWORD)IMAGE_EXPORT_DIRECTORY::AddressOfNames; +} + +inline +void ImageExportDirectory::addressOfNames(DWORD addressOfNames) +{ + IMAGE_EXPORT_DIRECTORY::AddressOfNames=(DWORD)(PDWORD*)addressOfNames; +} + +inline +DWORD ImageExportDirectory::addressOfNameOrdinals(void)const +{ + return (DWORD)IMAGE_EXPORT_DIRECTORY::AddressOfNameOrdinals; +} + +inline +void ImageExportDirectory::addressOfNameOrdinals(DWORD addressOfNameOrdinals) +{ + IMAGE_EXPORT_DIRECTORY::AddressOfNameOrdinals=(DWORD)(PWORD*)addressOfNameOrdinals; +} + +inline +void ImageExportDirectory::zeroInit(void) +{ + IMAGE_EXPORT_DIRECTORY::Characteristics=0; + IMAGE_EXPORT_DIRECTORY::TimeDateStamp=0; + IMAGE_EXPORT_DIRECTORY::MajorVersion=0; + IMAGE_EXPORT_DIRECTORY::MinorVersion=0; + IMAGE_EXPORT_DIRECTORY::Name=0; + IMAGE_EXPORT_DIRECTORY::Base=0; + IMAGE_EXPORT_DIRECTORY::NumberOfFunctions=0; + IMAGE_EXPORT_DIRECTORY::NumberOfNames=0; + IMAGE_EXPORT_DIRECTORY::AddressOfFunctions=0; + IMAGE_EXPORT_DIRECTORY::AddressOfNames=0; + IMAGE_EXPORT_DIRECTORY::AddressOfNameOrdinals=0; +} +#endif + diff --git a/image/EXPDSC.HPP b/image/EXPDSC.HPP new file mode 100644 index 0000000..2983676 --- /dev/null +++ b/image/EXPDSC.HPP @@ -0,0 +1,130 @@ +#ifndef _IMAGE_IMAGEEXPORTDESCRIPTOR_HPP_ +#define _IMAGE_IMAGEEXPORTDESCRIPTOR_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREDWORD_HPP_ +#include +#endif +#ifndef _COMMON_PUREWORD_HPP_ +#include +#endif +#ifndef _COMMON_STDIO_HPP_ +#include +#endif + +class ImageExportDescriptor +{ +public: + ImageExportDescriptor(void); + ImageExportDescriptor(const ImageExportDescriptor &someImageExportDescriptor); + virtual ~ImageExportDescriptor(); + ImageExportDescriptor &operator=(const ImageExportDescriptor &someImageExportDescriptor); + WORD operator==(const ImageExportDescriptor &someImageExportDescriptor)const; + WORD operator<(const ImageExportDescriptor &someImageExportDescriptor)const; + WORD operator>(const ImageExportDescriptor &someImageExportDescriptor)const; + operator String(void)const; + String imageExportName(void)const; + void imageExportName(const String &imageExportName); + PureWORD imageExportOrdinal(void)const; + void imageExportOrdinal(PureWORD imageExportOrdinal); + PureDWORD imageExportEntryPoint(void)const; + void imageExportEntryPoint(PureDWORD imageExportEntryPoint); +private: + String mImageExportName; + PureWORD mImageExportOrdinal; + PureDWORD mImageExportEntryPoint; +}; + +inline +ImageExportDescriptor::ImageExportDescriptor(void) +{ +} + +inline +ImageExportDescriptor::ImageExportDescriptor(const ImageExportDescriptor &someImageExportDescriptor) +{ + *this=someImageExportDescriptor; +} + +inline +ImageExportDescriptor::~ImageExportDescriptor() +{ +} + +inline +ImageExportDescriptor &ImageExportDescriptor::operator=(const ImageExportDescriptor &someImageExportDescriptor) +{ + imageExportName(someImageExportDescriptor.imageExportName()); + imageExportOrdinal(someImageExportDescriptor.imageExportOrdinal()); + imageExportEntryPoint(someImageExportDescriptor.imageExportEntryPoint()); + return *this; +} + +inline +WORD ImageExportDescriptor::operator==(const ImageExportDescriptor &someImageExportDescriptor)const +{ + return (imageExportName()==someImageExportDescriptor.imageExportName()&& + imageExportOrdinal()==someImageExportDescriptor.imageExportOrdinal()&& + imageExportEntryPoint()==someImageExportDescriptor.imageExportEntryPoint()); +} + +inline +WORD ImageExportDescriptor::operator<(const ImageExportDescriptor &someImageExportDescriptor)const +{ + return imageExportEntryPoint()(const ImageExportDescriptor &someImageExportDescriptor)const +{ + return imageExportEntryPoint()>someImageExportDescriptor.imageExportEntryPoint(); +} + +inline +ImageExportDescriptor::operator String(void)const +{ + String descriptorString; + ::sprintf((LPSTR)descriptorString,"%s @%ld 0x%08lx", + imageExportName().str(), + imageExportOrdinal().getValue(), + imageExportEntryPoint().getValue()); + return descriptorString; +} + +inline +String ImageExportDescriptor::imageExportName(void)const +{ + return mImageExportName; +} + +inline +void ImageExportDescriptor::imageExportName(const String &imageExportName) +{ + mImageExportName=imageExportName; +} + +inline +PureWORD ImageExportDescriptor::imageExportOrdinal(void)const +{ + return mImageExportOrdinal; +} + +inline +void ImageExportDescriptor::imageExportOrdinal(PureWORD imageExportOrdinal) +{ + mImageExportOrdinal=imageExportOrdinal; +} + +inline +PureDWORD ImageExportDescriptor::imageExportEntryPoint(void)const +{ + return mImageExportEntryPoint; +} + +inline +void ImageExportDescriptor::imageExportEntryPoint(PureDWORD imageExportEntryPoint) +{ + mImageExportEntryPoint=imageExportEntryPoint; +} +#endif diff --git a/image/EXPORT.CPP b/image/EXPORT.CPP new file mode 100644 index 0000000..a6cf5f9 --- /dev/null +++ b/image/EXPORT.CPP @@ -0,0 +1,148 @@ +#include +#include +#include +#include + +WORD ImageExportDescriptors::loadImageExports(PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,WORD sortFlag) +{ + ImageSectionHeader exportFunctionsSectionHeader; + QuickSort quickSort; + Array exportFunctions; + Array exportOrdinals; + PureDWORD exportFunctionEntryPoint; + Array exportNames; + DWORD deltaFunctions; + + size(0); + (ImageExportDirectory&)*this<&)*this); + return TRUE; +} + +WORD ImageExportDescriptors::loadExportNames(Array &exportNames,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView) +{ + ImageSectionHeader exportNamesSectionHeader; + String exportName; + DWORD deltaNames; + DWORD nameRVA; + + if(!numberOfNames())return false; + exportNames.size(numberOfNames()); + imageSectionHeaders.enclosingSectionHeader(addressOfNames(),exportNamesSectionHeader,deltaNames); + pureView.seek(addressOfNames()-deltaNames,PureViewOfFile::SeekSet); + for(DWORD nameIndex=0;nameIndex &exportOrdinals,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView) +{ + ImageSectionHeader exportOrdinalsSectionHeader; + WORD exportOrdinal; + DWORD deltaOrdinals; + + if(!numberOfNames())return false; + exportOrdinals.size(numberOfNames()); + imageSectionHeaders.enclosingSectionHeader(addressOfNameOrdinals(),exportOrdinalsSectionHeader,deltaOrdinals); + pureView.seek(addressOfNameOrdinals()-deltaOrdinals,PureViewOfFile::SeekSet); + for(DWORD ordinalIndex=0;ordinalIndex &exportFunctions,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView) +{ + ImageSectionHeader exportFunctionsSectionHeader; + DWORD exportFunction; + DWORD deltaFunctions; + + if(!numberOfFunctions())return false; + exportFunctions.size(numberOfFunctions()); + imageSectionHeaders.enclosingSectionHeader(addressOfFunctions(),exportFunctionsSectionHeader,deltaFunctions); + pureView.seek(addressOfFunctions()-deltaFunctions,PureViewOfFile::SeekSet); + for(DWORD functionIndex=0;functionIndex &exportNames,Array &exportOrdinals,Array &exportFunctions) +{ + DWORD sizeExportNames(exportNames.size()); + DWORD sizeExportFunctions(exportFunctions.size()); + String entryPointString; + + size(sizeExportFunctions); + for(DWORD functionIndex=0;functionIndex&)*this)[functionIndex].imageExportEntryPoint(exportFunctions[functionIndex]); + ((Array&)*this)[functionIndex].imageExportOrdinal(functionIndex+base()); + } + for(LONG nameIndex=0;nameIndex&)*this)[exportOrdinals[nameIndex].getValue()].imageExportName(exportNames[nameIndex]); + ((Array&)*this)[exportOrdinals[nameIndex].getValue()].imageExportOrdinal(exportOrdinals[nameIndex].getValue()+(WORD)base()); + } + for(functionIndex=0;functionIndex&)*this)[functionIndex].imageExportName().isNull()) + { + ::sprintf(entryPointString,"@%d",((Array&)*this)[functionIndex].imageExportOrdinal().getValue()); + ((Array&)*this)[functionIndex].imageExportName(entryPointString); + } + } + return TRUE; +} + +WORD ImageExportDescriptors::locateImageExportName(String imageExportName,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex) +{ + DWORD sizeExportFunctions(size()); + WORD exportOrdinal; + + if(imageExportName.isNull())return FALSE; + for(DWORD itemIndex=0;itemIndex +#endif +#ifndef _COMMON_PUREWORD_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGESECTIONHEADERS_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEEXPORTDIRECTORY_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEEXPORTDESCRIPTOR_HPP_ +#include +#endif + +class ImageExportDescriptors : public ImageExportDirectory, public Array +{ +public: + ImageExportDescriptors(void); + ImageExportDescriptors(const ImageExportDescriptors &someImageExportDescriptors); + virtual ~ImageExportDescriptors(); + ImageExportDescriptors &operator=(const ImageExportDescriptors &someImageExportDecsriptors); + WORD operator==(const ImageExportDescriptors &someImageExportDescriptors)const; + WORD loadImageExports(PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,WORD sortFlag); + WORD locateImageExportName(String imageExportName,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex); + WORD locateImageExportOrdinal(DWORD exportOrdinal,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex); +private: + enum {OrdinalPrefix='@'}; + WORD loadExportNames(Array &exportNames,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView); + WORD loadExportOrdinals(Array &exportOrdinals,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView); + WORD loadExportFunctions(Array &exportFunctions,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView); + WORD combineExportDescriptors(Array &exportNames,Array &exportOrdinals,Array &exportFunctions); + WORD makeOrdinalValue(String imageExportName,WORD &exportOrdinal)const; +}; + +inline +ImageExportDescriptors::ImageExportDescriptors(void) +{ +} + +inline +ImageExportDescriptors::ImageExportDescriptors(const ImageExportDescriptors &someImageExportDescriptors) +{ + *this=someImageExportDescriptors; +} + +inline +ImageExportDescriptors::~ImageExportDescriptors() +{ +} + +inline +ImageExportDescriptors &ImageExportDescriptors::operator=(const ImageExportDescriptors &someImageExportDescriptors) +{ + (Array&)*this=(Array&)someImageExportDescriptors; + return *this; +} + +inline +WORD ImageExportDescriptors::operator==(const ImageExportDescriptors &someImageExportDescriptors)const +{ + return (Array&)*this==(Array&)someImageExportDescriptors; +} + +inline +WORD ImageExportDescriptors::makeOrdinalValue(String imageExportName,WORD &exportOrdinal)const +{ + if(imageExportName.isNull())return FALSE; + if(OrdinalPrefix!=imageExportName[(DWORD)0])return FALSE; + exportOrdinal=(int)imageExportName.betweenString(OrdinalPrefix,0).toInt(); + return TRUE; +} +#endif diff --git a/image/HARDWARE.CPP b/image/HARDWARE.CPP new file mode 100644 index 0000000..626964d --- /dev/null +++ b/image/HARDWARE.CPP @@ -0,0 +1,19 @@ +#include + +Hardware::operator String(void)const +{ + if(CPUUnknown==cpuType())return "CPU_UNKNOWN"; + else if(CPU80386==cpuType())return "CPU_80386"; + else if(CPU80486==cpuType())return "CPU_80486"; + else if(CPU80586==cpuType())return "CPU_80586"; + else if(CPUMIPSR3000==cpuType())return "CPU_MIPS_R3000"; + else if(CPUMIPSMARKII==cpuType())return "CPU_MIPS_MARKII"; + else if(CPUMIPSMARKIII==cpuType())return "CPU_MIPS_MARKIII"; + else if(CPUMIPSR4000==cpuType())return "CPU_MIPS_R4000"; + else if(CPUDECALPHAAXP==cpuType())return "CPU_DEC_ALPHA_AXP"; + else if(CPUPOWERPC==cpuType())return "CPU_POWERPC"; + else if(CPUMOTOROLA68000==cpuType())return "CPU_MOTOROLA_68000"; + else if(CPUPARISC==cpuType())return "CPU_PA_RISC"; + else if(CPUMIPS10000==cpuType())return "CPU_MIPS-10000"; + else return "*********"; +} diff --git a/image/HARDWARE.HPP b/image/HARDWARE.HPP new file mode 100644 index 0000000..e7f5c47 --- /dev/null +++ b/image/HARDWARE.HPP @@ -0,0 +1,109 @@ +#ifndef _IMAGE_HARDWARE_HPP_ +#define _IMAGE_HARDWARE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class Hardware +{ +public: + enum CPUType{CPUUnknown=0x0000,CPU80386=0x014C,CPU80486=0x14D,CPU80586, + CPUMIPSR3000=0x0162,CPUMIPSMARKII=0x0163,CPUMIPSMARKIII=0x164, + CPUMIPSR4000=0x0166,CPUMIPS10000=0x0168,CPUDECALPHAAXP=0x0184, + CPUPOWERPC=0x01F0,CPUMOTOROLA68000=0x0268,CPUPARISC=0x0290}; + Hardware(CPUType cpuType=CPUUnknown); + Hardware(const Hardware &someHardware); + Hardware(WORD machine); + ~Hardware(); + Hardware &operator=(const Hardware &someHardware); + WORD operator==(const Hardware &someHardware)const; + WORD operator<<(PureViewOfFile &pureView); + WORD isValid(void)const; + CPUType cpuType(void)const; + void cpuType(CPUType cpuType); + operator String(void)const; +private: + CPUType mCPUType; +}; + +inline +Hardware::Hardware(CPUType cpuType) +: mCPUType(cpuType) +{ +} + +inline +Hardware::Hardware(WORD machine) +{ + mCPUType=(CPUType)machine; +} + +inline +Hardware::Hardware(const Hardware &someHardware) +{ + *this=someHardware; +} + +inline +Hardware::~Hardware() +{ +} + +inline +Hardware &Hardware::operator=(const Hardware &someHardware) +{ + cpuType(someHardware.cpuType()); + return *this; +} + +inline +WORD Hardware::operator==(const Hardware &someHardware)const +{ + return cpuType()==someHardware.cpuType(); +} + +inline +Hardware::CPUType Hardware::cpuType(void)const +{ + return mCPUType; +} + +inline +void Hardware::cpuType(CPUType cpuType) +{ + mCPUType=cpuType; +} + +inline +WORD Hardware::operator<<(PureViewOfFile &pureView) +{ + WORD cpuType; + + pureView.read(cpuType); + mCPUType=(CPUType)cpuType; + if(!isValid())return FALSE; + return TRUE; +} + +inline +WORD Hardware::isValid(void)const +{ + if(CPUUnknown==cpuType())return TRUE; + if(CPU80386==cpuType())return TRUE; + if(CPU80486==cpuType())return TRUE; + if(CPU80586==cpuType())return TRUE; + if(CPUMIPSR3000==cpuType())return TRUE; + if(CPUMIPSMARKII==cpuType())return TRUE; + if(CPUMIPSMARKIII==cpuType())return TRUE; + if(CPUMIPSR4000==cpuType())return TRUE; + if(CPUDECALPHAAXP==cpuType())return TRUE; + if(CPUPOWERPC==cpuType())return TRUE; + if(CPUMOTOROLA68000==cpuType())return TRUE; + if(CPUPARISC==cpuType())return TRUE; + if(CPUMIPS10000==cpuType())return TRUE; + return FALSE; +} +#endif diff --git a/image/HOLD/RELOC.HPP b/image/HOLD/RELOC.HPP new file mode 100644 index 0000000..3f9facf --- /dev/null +++ b/image/HOLD/RELOC.HPP @@ -0,0 +1,122 @@ +#ifndef _IMAGE_IMAGERELOCATION_HPP_ +#define _IMAGE_IMAGERELOCATION_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class ImageRelocation : private IMAGE_RELOCATION +{ +public: + ImageRelocation(void); + ImageRelocation(const ImageRelocation &someImageRelocation); + virtual ~ImageRelocation(); + ImageRelocation &operator=(const ImageRelocation &someImageRelocation); + bool operator==(const ImageRelocation &someImageRelocation)const; + DWORD virtualAddress(void)const; + void virtualAddress(DWORD virtualAddress); + DWORD relocationCount(void)const; + void relocationCount(DWORD relocationCount); + DWORD symbolTableIndex(void)const; + void symbolTableIndex(DWORD symbolTableIndex); + WORD relocationType(void)const; + void relocationType(WORD relocationType); +private: + void setZero(void); +}; + +inline +ImageRelocation::ImageRelocation(void) +{ + setZero(); +} + +inline +ImageRelocation::ImageRelocation(const ImageRelocation &someImageRelocation) +{ + *this=someImageRelocation; +} + +inline +ImageRelocation::~ImageRelocation() +{ +} + +inline +ImageRelocation &ImageRelocation::operator=(const ImageRelocation &someImageRelocation) +{ + virtualAddress(someImageRelocation.virtualAddress()); + symbolTableIndex(someImageRelocation.symbolTableIndex()); + relocationType(someImageRelocation.relocationType()); + return *this; +} + +inline +bool ImageRelocation::operator==(const ImageRelocation &someImageRelocation)const +{ + return (virtualAddress()==someImageRelocation.virtualAddress()&& + symbolTableIndex()==someImageRelocation.symbolTableIndex()&& + relocationType()==someImageRelocation.relocationType()); +} + +inline +DWORD ImageRelocation::virtualAddress(void)const +{ + return IMAGE_RELOCATION::VirtualAddress; +} + +inline +void ImageRelocation::virtualAddress(DWORD virtualAddress) +{ + IMAGE_RELOCATION::VirtualAddress=virtualAddress; +} + +inline +DWORD ImageRelocation::relocationCount(void)const +{ + return IMAGE_RELOCATION::RelocCount; +} + +inline +void ImageRelocation::relocationCount(DWORD relocationCount) +{ + IMAGE_RELOCATION::RelocCount=relocationCount; +} + +inline +DWORD ImageRelocation::symbolTableIndex(void)const +{ + return IMAGE_RELOCATION::SymbolTableIndex; +} + +inline +void ImageRelocation::symbolTableIndex(DWORD symbolTableIndex) +{ + IMAGE_RELOCATION::SymbolTableIndex=symbolTableIndex; +} + +inline +WORD ImageRelocation::relocationType(void)const +{ + return IMAGE_RELOCATION::Type; +} + +inline +void ImageRelocation::relocationType(WORD relocationType) +{ + IMAGE_RELOCATION::Type=relocationType; +} + +inline +void ImageRelocation::setZero(void) +{ + IMAGE_RELOCATION::VirtualAddress=0; + IMAGE_RELOCATION::SymbolTableIndex=0; + IMAGE_RELOCATION::Type=0; +} + +typedef Block ImageRelocations; + +#endif diff --git a/image/IFLAGS.HPP b/image/IFLAGS.HPP new file mode 100644 index 0000000..06db976 --- /dev/null +++ b/image/IFLAGS.HPP @@ -0,0 +1,118 @@ +#ifndef _IMAGE_IMAGEFLAGS_HPP_ +#define _IMAGE_IMAGEFLAGS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ImageFlags +{ +public: + ImageFlags(const ImageFlags &someImageFlags); + ImageFlags(WORD imageFlags=0); + ~ImageFlags(); + ImageFlags &operator=(const ImageFlags &someImageFlags); + WORD operator==(const ImageFlags &someImageFlags); + WORD hasRelocations(void)const; + WORD hasLineNumbers(void)const; + WORD hasLocalSymbols(void)const; + WORD hasBytesReversedLo(void)const; + WORD hasBytesReversedHi(void)const; + WORD hasDebugInfo(void)const; + WORD is32BitMachine(void)const; + WORD isExeFile(void)const; + WORD isDllFile(void)const; + WORD isSystemFile(void)const; +private: + WORD mImageFlags; +}; + +inline +ImageFlags::ImageFlags(WORD imageFlags) +: mImageFlags(imageFlags) +{ +} + +inline +ImageFlags::ImageFlags(const ImageFlags &someImageFlags) +{ + *this=someImageFlags; +} + +inline +ImageFlags::~ImageFlags() +{ +} + +inline +ImageFlags &ImageFlags::operator=(const ImageFlags &someImageFlags) +{ + mImageFlags=someImageFlags.mImageFlags; + return *this; +} + +inline +WORD ImageFlags::operator==(const ImageFlags &someImageFlags) +{ + return mImageFlags==someImageFlags.mImageFlags; +} + +inline +WORD ImageFlags::hasRelocations(void)const +{ + return (!(IMAGE_FILE_RELOCS_STRIPPED==(mImageFlags&IMAGE_FILE_RELOCS_STRIPPED))); +} + +inline +WORD ImageFlags::hasLineNumbers(void)const +{ + return (!(IMAGE_FILE_LINE_NUMS_STRIPPED==(mImageFlags&IMAGE_FILE_LINE_NUMS_STRIPPED))); +} + +inline +WORD ImageFlags::hasLocalSymbols(void)const +{ + return (!(IMAGE_FILE_LOCAL_SYMS_STRIPPED==(mImageFlags&IMAGE_FILE_LOCAL_SYMS_STRIPPED))); +} + +inline +WORD ImageFlags::hasBytesReversedLo(void)const +{ + return (IMAGE_FILE_BYTES_REVERSED_LO==(mImageFlags&IMAGE_FILE_BYTES_REVERSED_LO)); +} + +inline +WORD ImageFlags::hasBytesReversedHi(void)const +{ + return (IMAGE_FILE_BYTES_REVERSED_HI==(mImageFlags&IMAGE_FILE_BYTES_REVERSED_HI)); +} + +inline +WORD ImageFlags::hasDebugInfo(void)const +{ + return (!(IMAGE_FILE_DEBUG_STRIPPED==(mImageFlags&IMAGE_FILE_DEBUG_STRIPPED))); +} + +inline +WORD ImageFlags::is32BitMachine(void)const +{ + return (IMAGE_FILE_32BIT_MACHINE==(mImageFlags&IMAGE_FILE_32BIT_MACHINE)); +} + +inline +WORD ImageFlags::isExeFile(void)const +{ + return (IMAGE_FILE_EXECUTABLE_IMAGE==(mImageFlags&IMAGE_FILE_EXECUTABLE_IMAGE)); +} + +inline +WORD ImageFlags::isDllFile(void)const +{ + return (IMAGE_FILE_DLL==(mImageFlags&IMAGE_FILE_DLL)); +} + +inline +WORD ImageFlags::isSystemFile(void)const +{ + return (IMAGE_FILE_SYSTEM==(mImageFlags&IMAGE_FILE_SYSTEM)); +} +#endif diff --git a/image/IMAGE.BAK b/image/IMAGE.BAK new file mode 100644 index 0000000..dff3fcb --- /dev/null +++ b/image/IMAGE.BAK @@ -0,0 +1,779 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=image - Win32 Debug +!MESSAGE No configuration specified. Defaulting to image - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "image - Win32 Release" && "$(CFG)" != "image - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Image.mak" CFG="image - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "image - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "image - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Image.lib" + +CLEAN : + -@erase "$(INTDIR)\Direntry.obj" + -@erase "$(INTDIR)\Dtaentry.obj" + -@erase "$(INTDIR)\Export.obj" + -@erase "$(INTDIR)\Hardware.obj" + -@erase "$(INTDIR)\Import.obj" + -@erase "$(INTDIR)\Imresdir.obj" + -@erase "$(INTDIR)\Pehdr.obj" + -@erase "$(INTDIR)\Sctnhdrs.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vxdhdr.obj" + -@erase "$(INTDIR)\vxdname.obj" + -@erase "$(INTDIR)\vxdobj.obj" + -@erase "$(OUTDIR)\Image.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Image.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Image.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Image.lib" +LIB32_OBJS= \ + "$(INTDIR)\Direntry.obj" \ + "$(INTDIR)\Dtaentry.obj" \ + "$(INTDIR)\Export.obj" \ + "$(INTDIR)\Hardware.obj" \ + "$(INTDIR)\Import.obj" \ + "$(INTDIR)\Imresdir.obj" \ + "$(INTDIR)\Pehdr.obj" \ + "$(INTDIR)\Sctnhdrs.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vxdhdr.obj" \ + "$(INTDIR)\vxdname.obj" \ + "$(INTDIR)\vxdobj.obj" + +"$(OUTDIR)\Image.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msimage.lib" + +CLEAN : + -@erase "$(INTDIR)\Direntry.obj" + -@erase "$(INTDIR)\Dtaentry.obj" + -@erase "$(INTDIR)\Export.obj" + -@erase "$(INTDIR)\Hardware.obj" + -@erase "$(INTDIR)\Import.obj" + -@erase "$(INTDIR)\Imresdir.obj" + -@erase "$(INTDIR)\Pehdr.obj" + -@erase "$(INTDIR)\Sctnhdrs.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vxdhdr.obj" + -@erase "$(INTDIR)\vxdname.obj" + -@erase "$(INTDIR)\vxdobj.obj" + -@erase "..\exe\msimage.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /GX /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /G4 /Zp1 /MTd /GX /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)/"\ + /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Image.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msimage.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msimage.lib" +LIB32_OBJS= \ + "$(INTDIR)\Direntry.obj" \ + "$(INTDIR)\Dtaentry.obj" \ + "$(INTDIR)\Export.obj" \ + "$(INTDIR)\Hardware.obj" \ + "$(INTDIR)\Import.obj" \ + "$(INTDIR)\Imresdir.obj" \ + "$(INTDIR)\Pehdr.obj" \ + "$(INTDIR)\Sctnhdrs.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vxdhdr.obj" \ + "$(INTDIR)\vxdname.obj" \ + "$(INTDIR)\vxdobj.obj" + +"..\exe\msimage.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "image - Win32 Release" +# Name "image - Win32 Debug" + +!IF "$(CFG)" == "image - Win32 Release" + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Vxdhdr.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_VXDHD=\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Vxdhdr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Vxdhdr.obj" : $(SOURCE) $(DEP_CPP_VXDHD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_VXDHD=\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Vxdhdr.hpp"\ + {$(INCLUDE)}"\.\vxdname.hpp"\ + {$(INCLUDE)}"\.\vxdnames.hpp"\ + {$(INCLUDE)}"\.\vxdobj.hpp"\ + {$(INCLUDE)}"\.\vxdobjs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Vxdhdr.obj" : $(SOURCE) $(DEP_CPP_VXDHD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Hardware.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_HARDW=\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Hardware.obj" : $(SOURCE) $(DEP_CPP_HARDW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_HARDW=\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Hardware.obj" : $(SOURCE) $(DEP_CPP_HARDW) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Import.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_IMPOR=\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Import.obj" : $(SOURCE) $(DEP_CPP_IMPOR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_IMPOR=\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Import.obj" : $(SOURCE) $(DEP_CPP_IMPOR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Pehdr.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_PEHDR=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Dllflags.hpp"\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\.\Iflags.hpp"\ + {$(INCLUDE)}"\.\Imagedir.hpp"\ + {$(INCLUDE)}"\.\Imagehdr.hpp"\ + {$(INCLUDE)}"\.\Ntsubsys.hpp"\ + {$(INCLUDE)}"\.\Optlhdr.hpp"\ + {$(INCLUDE)}"\.\Pehdr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pathfnd.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Pehdr.obj" : $(SOURCE) $(DEP_CPP_PEHDR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_PEHDR=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Dllflags.hpp"\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\.\Iflags.hpp"\ + {$(INCLUDE)}"\.\Imagedir.hpp"\ + {$(INCLUDE)}"\.\Imagehdr.hpp"\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Keydir.hpp"\ + {$(INCLUDE)}"\.\Ntsubsys.hpp"\ + {$(INCLUDE)}"\.\Optlhdr.hpp"\ + {$(INCLUDE)}"\.\Pehdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pathfnd.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Pehdr.obj" : $(SOURCE) $(DEP_CPP_PEHDR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Sctnhdrs.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_SCTNH=\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Sctnhdrs.obj" : $(SOURCE) $(DEP_CPP_SCTNH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_SCTNH=\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Sctnhdrs.obj" : $(SOURCE) $(DEP_CPP_SCTNH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Export.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_EXPOR=\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Export.obj" : $(SOURCE) $(DEP_CPP_EXPOR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_EXPOR=\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Export.obj" : $(SOURCE) $(DEP_CPP_EXPOR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Imresdir.cpp +DEP_CPP_IMRES=\ + {$(INCLUDE)}"\.\Direntry.hpp"\ + {$(INCLUDE)}"\.\Dtaentry.hpp"\ + {$(INCLUDE)}"\.\Imresdir.hpp"\ + {$(INCLUDE)}"\.\Strptr.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Imresdir.obj" : $(SOURCE) $(DEP_CPP_IMRES) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Direntry.cpp +DEP_CPP_DIREN=\ + {$(INCLUDE)}"\.\Direntry.hpp"\ + {$(INCLUDE)}"\.\Dtaentry.hpp"\ + {$(INCLUDE)}"\.\Imresdir.hpp"\ + {$(INCLUDE)}"\.\Resdrstr.hpp"\ + {$(INCLUDE)}"\.\Strptr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnls.hpp"\ + + +"$(INTDIR)\Direntry.obj" : $(SOURCE) $(DEP_CPP_DIREN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dtaentry.cpp +DEP_CPP_DTAEN=\ + {$(INCLUDE)}"\.\Dtaentry.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Dtaentry.obj" : $(SOURCE) $(DEP_CPP_DTAEN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\vxdobj.cpp +DEP_CPP_VXDOB=\ + {$(INCLUDE)}"\.\vxdobj.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\vxdobj.obj" : $(SOURCE) $(DEP_CPP_VXDOB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\vxdname.cpp +DEP_CPP_VXDNA=\ + {$(INCLUDE)}"\.\vxdname.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\vxdname.obj" : $(SOURCE) $(DEP_CPP_VXDNA) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/image/IMAGE.IDE b/image/IMAGE.IDE new file mode 100644 index 0000000..30c0e3a Binary files /dev/null and b/image/IMAGE.IDE differ diff --git a/image/IMAGE.PLG b/image/IMAGE.PLG new file mode 100644 index 0000000..7a8e94a --- /dev/null +++ b/image/IMAGE.PLG @@ -0,0 +1,65 @@ + + +
+

Build Log

+

+--------------------Configuration: image - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP281.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\image\Direntry.cpp" +"F:\work\image\Dtaentry.cpp" +"F:\work\image\Export.cpp" +"F:\work\image\Hardware.cpp" +"F:\work\image\Import.cpp" +"F:\work\image\Imresdir.cpp" +"F:\work\image\Pehdr.cpp" +"F:\work\image\Sctnhdrs.cpp" +"F:\work\image\Stdtmpl.cpp" +"F:\work\image\Vxdhdr.cpp" +"F:\work\image\vxdname.cpp" +"F:\work\image\vxdobj.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP281.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP282.tmp" with contents +[ +/nologo /out:"..\exe\msimage.lib" +.\msvcobj\Direntry.obj +.\msvcobj\Dtaentry.obj +.\msvcobj\Export.obj +.\msvcobj\Hardware.obj +.\msvcobj\Import.obj +.\msvcobj\Imresdir.obj +.\msvcobj\Pehdr.obj +.\msvcobj\Sctnhdrs.obj +.\msvcobj\Stdtmpl.obj +.\msvcobj\Vxdhdr.obj +.\msvcobj\vxdname.obj +.\msvcobj\vxdobj.obj +] +Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP282.tmp" +

Output Window

+Compiling... +Direntry.cpp +Dtaentry.cpp +Export.cpp +Hardware.cpp +Import.cpp +Imresdir.cpp +Pehdr.cpp +Sctnhdrs.cpp +Stdtmpl.cpp +Vxdhdr.cpp +vxdname.cpp +vxdobj.cpp +Creating library... + + + +

Results

+msimage.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/image/IMAGE32.DSW b/image/IMAGE32.DSW new file mode 100644 index 0000000..0ff9a9c Binary files /dev/null and b/image/IMAGE32.DSW differ diff --git a/image/IMAGE32.IDE b/image/IMAGE32.IDE new file mode 100644 index 0000000..82c54a4 Binary files /dev/null and b/image/IMAGE32.IDE differ diff --git a/image/IMAGE32.MAK b/image/IMAGE32.MAK new file mode 100644 index 0000000..1d5abff --- /dev/null +++ b/image/IMAGE32.MAK @@ -0,0 +1,106 @@ +# +# Borland C++ IDE generated makefile +# +.AUTODEPEND + + +# +# Borland C++ tools +# +IMPLIB = Implib +BCC32 = Bcc32 -v -vi -4 -Jgx -Os -Z- -O- -O-l -O-m -O-i -w-sig -O-c -d -WM -W +TLINK32 = TLink32 +TLIB = TLib +BRC32 = Brc32 +TASM32 = Tasm32 +# +# IDE macros +# + + +# +# Options +# +IDE_LFLAGS32 = -L\bc45\lib +IDE_RFLAGS32 = +LLATW32_ddbEXEbimage32dlib = -LC:\BC45\LIB;..\EXE -Tpe -aa -c +RLATW32_ddbEXEbimage32dlib = -w32 +BLATW32_ddbEXEbimage32dlib = /P128 +CNIEAT_ddbEXEbimage32dlib = -IC:\BC45\INCLUDE;.. -D +LNIEAT_ddbEXEbimage32dlib = -x +LEAT_ddbEXEbimage32dlib = $(LLATW32_ddbEXEbimage32dlib) +REAT_ddbEXEbimage32dlib = $(RLATW32_ddbEXEbimage32dlib) +BEAT_ddbEXEbimage32dlib = $(BLATW32_ddbEXEbimage32dlib) +CLATW16_ddbexebcommon32dlib = +LLATW16_ddbexebcommon32dlib = +RLATW16_ddbexebcommon32dlib = +BLATW16_ddbexebcommon32dlib = +CEAT_ddbexebcommon32dlib = $(CEAT_ddbEXEbimage32dlib) $(CLATW16_ddbexebcommon32dlib) +CNIEAT_ddbexebcommon32dlib = -IC:\BC45\INCLUDE;.. -D +LNIEAT_ddbexebcommon32dlib = -x +LEAT_ddbexebcommon32dlib = $(LEAT_ddbEXEbimage32dlib) $(LLATW16_ddbexebcommon32dlib) +REAT_ddbexebcommon32dlib = $(REAT_ddbEXEbimage32dlib) $(RLATW16_ddbexebcommon32dlib) +BEAT_ddbexebcommon32dlib = $(BEAT_ddbEXEbimage32dlib) $(BLATW16_ddbexebcommon32dlib) + +# +# Dependency List +# +Dep_image32 = \ + ..\EXE\image32.lib + +Dep_ddbEXEbimage32dlib = \ + ..\exe\common32.lib\ + EXEOBJ32\export.obj\ + EXEOBJ32\sctnhdrs.obj\ + EXEOBJ32\import.obj\ + EXEOBJ32\hardware.obj\ + EXEOBJ32\vxdhdr.obj\ + EXEOBJ32\pehdr.obj\ + EXEOBJ32\stdtmpl.obj + +..\EXE\image32.lib : $(Dep_ddbEXEbimage32dlib) + $(TLIB) $< $(IDE_BFLAGS) $(BEAT_ddbEXEbimage32dlib) @&&| + -+EXEOBJ32\export.obj & +-+EXEOBJ32\sctnhdrs.obj & +-+EXEOBJ32\import.obj & +-+EXEOBJ32\hardware.obj & +-+EXEOBJ32\vxdhdr.obj & +-+EXEOBJ32\pehdr.obj & +-+EXEOBJ32\stdtmpl.obj & +-+..\exe\common32.lib +| + +EXEOBJ32\export.obj : export.cpp + $(BCC32) -c @&&| + $(CEAT_ddbEXEbimage32dlib) $(CNIEAT_ddbEXEbimage32dlib) -o$@ export.cpp +| + +EXEOBJ32\sctnhdrs.obj : sctnhdrs.cpp + $(BCC32) -c @&&| + $(CEAT_ddbEXEbimage32dlib) $(CNIEAT_ddbEXEbimage32dlib) -o$@ sctnhdrs.cpp +| + +EXEOBJ32\import.obj : import.cpp + $(BCC32) -c @&&| + $(CEAT_ddbEXEbimage32dlib) $(CNIEAT_ddbEXEbimage32dlib) -o$@ import.cpp +| + +EXEOBJ32\hardware.obj : hardware.cpp + $(BCC32) -c @&&| + $(CEAT_ddbEXEbimage32dlib) $(CNIEAT_ddbEXEbimage32dlib) -o$@ hardware.cpp +| + +EXEOBJ32\vxdhdr.obj : vxdhdr.cpp + $(BCC32) -c @&&| + $(CEAT_ddbEXEbimage32dlib) $(CNIEAT_ddbEXEbimage32dlib) -o$@ vxdhdr.cpp +| + +EXEOBJ32\pehdr.obj : pehdr.cpp + $(BCC32) -c @&&| + $(CEAT_ddbEXEbimage32dlib) $(CNIEAT_ddbEXEbimage32dlib) -o$@ pehdr.cpp +| + +EXEOBJ32\stdtmpl.obj : stdtmpl.cpp + $(BCC32) -c @&&| + $(CEAT_ddbEXEbimage32dlib) $(CNIEAT_ddbEXEbimage32dlib) -o$@ stdtmpl.cpp +| diff --git a/image/IMAGEDIR.BAK b/image/IMAGEDIR.BAK new file mode 100644 index 0000000..f1c072b --- /dev/null +++ b/image/IMAGEDIR.BAK @@ -0,0 +1,69 @@ +#ifndef _IMAGE_IMAGEDATADIRECTORY_HPP_ +#define _IMAGE_IMAGEDATADIRECTORY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ImageDataDirectory : private _IMAGE_DATA_DIRECTORY +{ +public: + ImageDataDirectory(void); + ImageDataDirectory(const ImageDataDirectory &someImageDataDirectory); + ImageDataDirectory(const _IMAGE_DATA_DIRECTORY &someImageDataDirectory); + ~ImageDataDirectory(); + ImageDataDirectory &operator=(const ImageDataDirectory &someImageDataDirectory); + WORD operator==(const ImageDataDirectory &someImageDataDirectory)const; + DWORD virtualAddress(void)const; + DWORD size(void)const; +private: +}; + +inline +ImageDataDirectory::ImageDataDirectory(void) +{ + ::memset((char*)&((_IMAGE_DATA_DIRECTORY&)*this),0,sizeof(_IMAGE_DATA_DIRECTORY)); +} + +inline +ImageDataDirectory::ImageDataDirectory(const ImageDataDirectory &someImageDataDirectory) +{ + *this=someImageDataDirectory; +} + +inline +ImageDataDirectory::ImageDataDirectory(const _IMAGE_DATA_DIRECTORY &someImageDataDirectory) +{ + ::memcpy((char*)&((_IMAGE_DATA_DIRECTORY&)*this),(char*)&someImageDataDirectory,sizeof(_IMAGE_DATA_DIRECTORY)); +} + +inline +ImageDataDirectory::~ImageDataDirectory() +{ +} + +inline +ImageDataDirectory &ImageDataDirectory::operator=(const ImageDataDirectory &someImageDataDirectory) +{ + ::memcpy((char*)&((_IMAGE_DATA_DIRECTORY&)*this),(char*)&((_IMAGE_DATA_DIRECTORY&)someImageDataDirectory),sizeof(_IMAGE_DATA_DIRECTORY)); + return *this; +} + +inline +WORD ImageDataDirectory::operator==(const ImageDataDirectory &someImageDataDirectory)const +{ + return (virtualAddress()==someImageDataDirectory.virtualAddress()&& + size()==someImageDataDirectory.size()); +} + +inline +DWORD ImageDataDirectory::virtualAddress(void)const +{ + return _IMAGE_DATA_DIRECTORY::VirtualAddress; +} + +inline +DWORD ImageDataDirectory::size(void)const +{ + return _IMAGE_DATA_DIRECTORY::Size; +} +#endif diff --git a/image/IMAGEDIR.HPP b/image/IMAGEDIR.HPP new file mode 100644 index 0000000..f1c072b --- /dev/null +++ b/image/IMAGEDIR.HPP @@ -0,0 +1,69 @@ +#ifndef _IMAGE_IMAGEDATADIRECTORY_HPP_ +#define _IMAGE_IMAGEDATADIRECTORY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ImageDataDirectory : private _IMAGE_DATA_DIRECTORY +{ +public: + ImageDataDirectory(void); + ImageDataDirectory(const ImageDataDirectory &someImageDataDirectory); + ImageDataDirectory(const _IMAGE_DATA_DIRECTORY &someImageDataDirectory); + ~ImageDataDirectory(); + ImageDataDirectory &operator=(const ImageDataDirectory &someImageDataDirectory); + WORD operator==(const ImageDataDirectory &someImageDataDirectory)const; + DWORD virtualAddress(void)const; + DWORD size(void)const; +private: +}; + +inline +ImageDataDirectory::ImageDataDirectory(void) +{ + ::memset((char*)&((_IMAGE_DATA_DIRECTORY&)*this),0,sizeof(_IMAGE_DATA_DIRECTORY)); +} + +inline +ImageDataDirectory::ImageDataDirectory(const ImageDataDirectory &someImageDataDirectory) +{ + *this=someImageDataDirectory; +} + +inline +ImageDataDirectory::ImageDataDirectory(const _IMAGE_DATA_DIRECTORY &someImageDataDirectory) +{ + ::memcpy((char*)&((_IMAGE_DATA_DIRECTORY&)*this),(char*)&someImageDataDirectory,sizeof(_IMAGE_DATA_DIRECTORY)); +} + +inline +ImageDataDirectory::~ImageDataDirectory() +{ +} + +inline +ImageDataDirectory &ImageDataDirectory::operator=(const ImageDataDirectory &someImageDataDirectory) +{ + ::memcpy((char*)&((_IMAGE_DATA_DIRECTORY&)*this),(char*)&((_IMAGE_DATA_DIRECTORY&)someImageDataDirectory),sizeof(_IMAGE_DATA_DIRECTORY)); + return *this; +} + +inline +WORD ImageDataDirectory::operator==(const ImageDataDirectory &someImageDataDirectory)const +{ + return (virtualAddress()==someImageDataDirectory.virtualAddress()&& + size()==someImageDataDirectory.size()); +} + +inline +DWORD ImageDataDirectory::virtualAddress(void)const +{ + return _IMAGE_DATA_DIRECTORY::VirtualAddress; +} + +inline +DWORD ImageDataDirectory::size(void)const +{ + return _IMAGE_DATA_DIRECTORY::Size; +} +#endif diff --git a/image/IMAGEHDR.BAK b/image/IMAGEHDR.BAK new file mode 100644 index 0000000..a48b97e --- /dev/null +++ b/image/IMAGEHDR.BAK @@ -0,0 +1,118 @@ +#ifndef _IMAGE_IMAGEHEADER_HPP_ +#define _IMAGE_IMAGEHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _IMAGE_HARDWARE_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEFLAGS_HPP_ +#include +#endif + +class ImageHeader : private _IMAGE_FILE_HEADER +{ +public: + ImageHeader(void); + ImageHeader(const ImageHeader &someImageHeader); + ~ImageHeader(); + ImageHeader &operator=(const ImageHeader &someImageHeader); + WORD operator==(const ImageHeader &someImageHeader); + WORD operator<<(PureViewOfFile &pureView); + Hardware hardware(void)const; + WORD sectionCount(void)const; + DWORD timeDateStamp(void)const; + DWORD pointerSymbolTable(void)const; + DWORD symbolCount(void)const; + WORD sizeOptionalHeader(void)const; + ImageFlags imageFlags(void)const; +private: +}; + +inline +ImageHeader::ImageHeader(void) +{ + ::memset((char*)&((_IMAGE_FILE_HEADER&)*this),0,sizeof(_IMAGE_FILE_HEADER)); +} + +inline +ImageHeader::ImageHeader(const ImageHeader &someImageHeader) +{ + *this=someImageHeader; +} + +inline +ImageHeader::~ImageHeader() +{ +} + +inline +ImageHeader &ImageHeader::operator=(const ImageHeader &someImageHeader) +{ + ::memcpy((char*)&((_IMAGE_FILE_HEADER&)*this),(char*)&((_IMAGE_FILE_HEADER&)someImageHeader),sizeof(_IMAGE_FILE_HEADER)); + return *this; +} + +inline +WORD ImageHeader::operator==(const ImageHeader &someImageHeader) +{ + return (hardware()==someImageHeader.hardware()&& + sectionCount()==someImageHeader.sectionCount()&& + timeDateStamp()==someImageHeader.timeDateStamp()&& + pointerSymbolTable()==someImageHeader.pointerSymbolTable()&& + symbolCount()==someImageHeader.symbolCount()&& + sizeOptionalHeader()==someImageHeader.sizeOptionalHeader()&& + imageFlags()==someImageHeader.imageFlags()); +} + +inline +WORD ImageHeader::operator<<(PureViewOfFile &pureView) +{ + return sizeof(_IMAGE_FILE_HEADER)==pureView.read((char*)&((_IMAGE_FILE_HEADER&)*this),sizeof(_IMAGE_FILE_HEADER)); +} + +inline +Hardware ImageHeader::hardware(void)const +{ + return Hardware(_IMAGE_FILE_HEADER::Machine); +} + +inline +WORD ImageHeader::sectionCount(void)const +{ + return _IMAGE_FILE_HEADER::NumberOfSections; +} + +inline +DWORD ImageHeader::timeDateStamp(void)const +{ + return _IMAGE_FILE_HEADER::TimeDateStamp; +} + +inline +DWORD ImageHeader::pointerSymbolTable(void)const +{ + return _IMAGE_FILE_HEADER::PointerToSymbolTable; +} + +inline +DWORD ImageHeader::symbolCount(void)const +{ + return _IMAGE_FILE_HEADER::NumberOfSymbols; +} + +inline +WORD ImageHeader::sizeOptionalHeader(void)const +{ + return _IMAGE_FILE_HEADER::SizeOfOptionalHeader; +} + +inline +ImageFlags ImageHeader::imageFlags(void)const +{ + return ImageFlags(_IMAGE_FILE_HEADER::Characteristics); +} +#endif diff --git a/image/IMAGEHDR.HPP b/image/IMAGEHDR.HPP new file mode 100644 index 0000000..a48b97e --- /dev/null +++ b/image/IMAGEHDR.HPP @@ -0,0 +1,118 @@ +#ifndef _IMAGE_IMAGEHEADER_HPP_ +#define _IMAGE_IMAGEHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _IMAGE_HARDWARE_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEFLAGS_HPP_ +#include +#endif + +class ImageHeader : private _IMAGE_FILE_HEADER +{ +public: + ImageHeader(void); + ImageHeader(const ImageHeader &someImageHeader); + ~ImageHeader(); + ImageHeader &operator=(const ImageHeader &someImageHeader); + WORD operator==(const ImageHeader &someImageHeader); + WORD operator<<(PureViewOfFile &pureView); + Hardware hardware(void)const; + WORD sectionCount(void)const; + DWORD timeDateStamp(void)const; + DWORD pointerSymbolTable(void)const; + DWORD symbolCount(void)const; + WORD sizeOptionalHeader(void)const; + ImageFlags imageFlags(void)const; +private: +}; + +inline +ImageHeader::ImageHeader(void) +{ + ::memset((char*)&((_IMAGE_FILE_HEADER&)*this),0,sizeof(_IMAGE_FILE_HEADER)); +} + +inline +ImageHeader::ImageHeader(const ImageHeader &someImageHeader) +{ + *this=someImageHeader; +} + +inline +ImageHeader::~ImageHeader() +{ +} + +inline +ImageHeader &ImageHeader::operator=(const ImageHeader &someImageHeader) +{ + ::memcpy((char*)&((_IMAGE_FILE_HEADER&)*this),(char*)&((_IMAGE_FILE_HEADER&)someImageHeader),sizeof(_IMAGE_FILE_HEADER)); + return *this; +} + +inline +WORD ImageHeader::operator==(const ImageHeader &someImageHeader) +{ + return (hardware()==someImageHeader.hardware()&& + sectionCount()==someImageHeader.sectionCount()&& + timeDateStamp()==someImageHeader.timeDateStamp()&& + pointerSymbolTable()==someImageHeader.pointerSymbolTable()&& + symbolCount()==someImageHeader.symbolCount()&& + sizeOptionalHeader()==someImageHeader.sizeOptionalHeader()&& + imageFlags()==someImageHeader.imageFlags()); +} + +inline +WORD ImageHeader::operator<<(PureViewOfFile &pureView) +{ + return sizeof(_IMAGE_FILE_HEADER)==pureView.read((char*)&((_IMAGE_FILE_HEADER&)*this),sizeof(_IMAGE_FILE_HEADER)); +} + +inline +Hardware ImageHeader::hardware(void)const +{ + return Hardware(_IMAGE_FILE_HEADER::Machine); +} + +inline +WORD ImageHeader::sectionCount(void)const +{ + return _IMAGE_FILE_HEADER::NumberOfSections; +} + +inline +DWORD ImageHeader::timeDateStamp(void)const +{ + return _IMAGE_FILE_HEADER::TimeDateStamp; +} + +inline +DWORD ImageHeader::pointerSymbolTable(void)const +{ + return _IMAGE_FILE_HEADER::PointerToSymbolTable; +} + +inline +DWORD ImageHeader::symbolCount(void)const +{ + return _IMAGE_FILE_HEADER::NumberOfSymbols; +} + +inline +WORD ImageHeader::sizeOptionalHeader(void)const +{ + return _IMAGE_FILE_HEADER::SizeOfOptionalHeader; +} + +inline +ImageFlags ImageHeader::imageFlags(void)const +{ + return ImageFlags(_IMAGE_FILE_HEADER::Characteristics); +} +#endif diff --git a/image/IMPEXP.HPP b/image/IMPEXP.HPP new file mode 100644 index 0000000..6f94ea1 --- /dev/null +++ b/image/IMPEXP.HPP @@ -0,0 +1,140 @@ +#ifndef _IMAGE_IMAGEIMPORTDESCRIPTOREXPAND_HPP_ +#define _IMAGE_IMAGEIMPORTDESCRIPTOREXPAND_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _ENGINEER_IMAGETHUNKDATA_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGETHUNKNAME_HPP_ +#include +#endif + +class ImageImportDescriptorExpand +{ +public: + typedef Block ImageThunkDataBlock; + typedef Block ImageThunkNameBlock; + ImageImportDescriptorExpand(void); + ImageImportDescriptorExpand(const ImageImportDescriptorExpand &someImageImportDescriptorExpand); + virtual ~ImageImportDescriptorExpand(); + ImageImportDescriptorExpand &operator=(const ImageImportDescriptorExpand &someImageImportDescriptor); + WORD operator==(const ImageImportDescriptorExpand &someImageImportDescriptorExpand)const; + ImageThunkDataBlock &imageOriginalThunkImportOrdinals(void); + void imageOriginalThunkImportOrdinals(const ImageThunkDataBlock &someImageOriginalThunkImportOrdinals); + ImageThunkNameBlock &imageOriginalThunkImportNames(void); + void imageOriginalThunkImportNames(const ImageThunkNameBlock &someImageOriginalThunkImportNames); + ImageThunkDataBlock &imageThunkImportOrdinals(void); + void imageThunkImportOrdinals(const ImageThunkDataBlock &someImageThunkImportOrdinals); + ImageThunkNameBlock &imageThunkImportNames(void); + void imageThunkImportNames(const ImageThunkNameBlock &someImageThunkImportNames); + String moduleName(void)const; + void moduleName(const String &moduleName); +private: + ImageThunkDataBlock mImageOriginalThunkImportOrdinals; + ImageThunkNameBlock mImageOriginalThunkImportNames; + ImageThunkDataBlock mImageThunkImportOrdinals; + ImageThunkNameBlock mImageThunkImportNames; + String mModuleName; +}; + +inline +ImageImportDescriptorExpand::ImageImportDescriptorExpand(void) +{ +} + +inline +ImageImportDescriptorExpand::ImageImportDescriptorExpand(const ImageImportDescriptorExpand &someImageImportDescriptorExpand) +{ + *this=someImageImportDescriptorExpand; +} + +inline +ImageImportDescriptorExpand::~ImageImportDescriptorExpand() +{ +} + +inline +ImageImportDescriptorExpand &ImageImportDescriptorExpand::operator=(const ImageImportDescriptorExpand &someImageImportDescriptorExpand) +{ + moduleName(someImageImportDescriptorExpand.moduleName()); + imageOriginalThunkImportOrdinals(((ImageImportDescriptorExpand&)someImageImportDescriptorExpand).imageOriginalThunkImportOrdinals()); + imageOriginalThunkImportNames(((ImageImportDescriptorExpand&)someImageImportDescriptorExpand).imageOriginalThunkImportNames()); + imageThunkImportOrdinals(((ImageImportDescriptorExpand&)someImageImportDescriptorExpand).imageThunkImportOrdinals()); + imageThunkImportNames(((ImageImportDescriptorExpand&)someImageImportDescriptorExpand).imageThunkImportNames()); + return *this; +} + +inline +WORD ImageImportDescriptorExpand::operator==(const ImageImportDescriptorExpand &someImageImportDescriptorExpand)const +{ + return (moduleName()==someImageImportDescriptorExpand.moduleName()&& + mImageOriginalThunkImportOrdinals==someImageImportDescriptorExpand.mImageOriginalThunkImportOrdinals&& + mImageOriginalThunkImportNames==someImageImportDescriptorExpand.mImageOriginalThunkImportNames&& + mImageThunkImportOrdinals==someImageImportDescriptorExpand.mImageThunkImportOrdinals&& + mImageThunkImportNames==someImageImportDescriptorExpand.mImageThunkImportNames); +} + +inline +String ImageImportDescriptorExpand::moduleName(void)const +{ + return mModuleName; +} + +inline +void ImageImportDescriptorExpand::moduleName(const String &moduleName) +{ + mModuleName=moduleName; +} + +inline +ImageImportDescriptorExpand::ImageThunkDataBlock &ImageImportDescriptorExpand::imageOriginalThunkImportOrdinals(void) +{ + return mImageOriginalThunkImportOrdinals; +} + +inline +void ImageImportDescriptorExpand::imageOriginalThunkImportOrdinals(const ImageThunkDataBlock &someImageOriginalThunkImportOrdinals) +{ + mImageOriginalThunkImportOrdinals=someImageOriginalThunkImportOrdinals; +} + +inline +ImageImportDescriptorExpand::ImageThunkNameBlock &ImageImportDescriptorExpand::imageOriginalThunkImportNames(void) +{ + return mImageOriginalThunkImportNames; +} + +inline +void ImageImportDescriptorExpand::imageOriginalThunkImportNames(const ImageThunkNameBlock &someImageOriginalThunkImportNames) +{ + mImageOriginalThunkImportNames=someImageOriginalThunkImportNames; +} + +inline +ImageImportDescriptorExpand::ImageThunkDataBlock &ImageImportDescriptorExpand::imageThunkImportOrdinals(void) +{ + return mImageThunkImportOrdinals; +} + +inline +void ImageImportDescriptorExpand::imageThunkImportOrdinals(const ImageThunkDataBlock &someImageThunkImportOrdinals) +{ + mImageThunkImportOrdinals=someImageThunkImportOrdinals; +} + +inline +ImageImportDescriptorExpand::ImageThunkNameBlock &ImageImportDescriptorExpand::imageThunkImportNames(void) +{ + return mImageThunkImportNames; +} + +inline +void ImageImportDescriptorExpand::imageThunkImportNames(const ImageThunkNameBlock &someImageThunkImportNames) +{ + mImageThunkImportNames=someImageThunkImportNames; +} +#endif diff --git a/image/IMPNAME.HPP b/image/IMPNAME.HPP new file mode 100644 index 0000000..8700e69 --- /dev/null +++ b/image/IMPNAME.HPP @@ -0,0 +1,85 @@ +#ifndef _ENGINEER_IMAGEIMPORTBYNAME_HPP_ +#define _ENGINEER_IMAGEIMPORTBYNAME_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ImageImportByName : private IMAGE_IMPORT_BY_NAME +{ +public: + ImageImportByName(void); + ImageImportByName(const ImageImportByName &someImageImportByName); + ~ImageImportByName(); + ImageImportByName &operator=(const ImageImportByName &someImageImportByName); + WORD operator==(const ImageImportByName &someImageImportByName)const; + WORD hint(void)const; + void hint(WORD hint); + BYTE name(void)const; + void name(BYTE name); +private: + void setZero(void); +}; + +inline +ImageImportByName::ImageImportByName(void) +{ + setZero(); +} + +inline +ImageImportByName::ImageImportByName(const ImageImportByName &someImageImportByName) +{ + *this=someImageImportByName; +} + +inline +ImageImportByName::~ImageImportByName() +{ +} + +inline +ImageImportByName &ImageImportByName::operator=(const ImageImportByName &someImageImportByName) +{ + name(someImageImportByName.name()); + hint(someImageImportByName.hint()); + return *this; +} + +inline +WORD ImageImportByName::operator==(const ImageImportByName &someImageImportByName)const +{ + return (name()==someImageImportByName.name()&& + hint()==someImageImportByName.hint()); +} + +inline +WORD ImageImportByName::hint(void)const +{ + return IMAGE_IMPORT_BY_NAME::Hint; +} + +inline +void ImageImportByName::hint(WORD hint) +{ + IMAGE_IMPORT_BY_NAME::Hint=hint; +} + +inline +BYTE ImageImportByName::name(void)const +{ + return IMAGE_IMPORT_BY_NAME::Name[0]; +} + +inline +void ImageImportByName::name(BYTE name) +{ + IMAGE_IMPORT_BY_NAME::Name[0]=name; +} + +inline +void ImageImportByName::setZero(void) +{ + IMAGE_IMPORT_BY_NAME::Hint=0; + IMAGE_IMPORT_BY_NAME::Name[0]=0; +} +#endif diff --git a/image/IMPORT.CPP b/image/IMPORT.CPP new file mode 100644 index 0000000..04ccc4f --- /dev/null +++ b/image/IMPORT.CPP @@ -0,0 +1,48 @@ +#include + +void ImageImportDescriptor::loadImageImportThunks(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders) +{ + if(!isOkay())return; + if(!firstThunkRVA()&&!originalFirstThunkRVA())return; + if(originalFirstThunkRVA())loadImageImportThunk(originalFirstThunkRVA(),deltaOffset, + imageOriginalThunkImportOrdinals(),imageOriginalThunkImportNames(),pureView,imageSectionHeaders); + else if(firstThunkRVA())loadImageImportThunk(firstThunkRVA(),deltaOffset, + imageThunkImportOrdinals(),imageThunkImportNames(),pureView,imageSectionHeaders); +} + +void ImageImportDescriptor::loadImageFirstThunk(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders) +{ + if(!isOkay()||!firstThunkRVA())return; + loadImageImportThunk(firstThunkRVA(),deltaOffset, + imageThunkImportOrdinals(),imageThunkImportNames(),pureView,imageSectionHeaders); +} + +void ImageImportDescriptor::loadImageImportThunk(DWORD virtualAddress,DWORD deltaOffset,Block &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders) +{ + ImageSectionHeader imageSectionHeader; + + imageThunkImportOrdinals.remove(); + imageThunkImportNames.remove(); + pureView.push(); + pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + ImageThunkData imageThunkData; + imageThunkData< +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGESECTIONHEADERS_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEIMPORTDESCRIPTOREXPAND_HPP_ +#include +#endif + +class ImageImportDescriptor : public ImageImportDescriptorExpand, private IMAGE_IMPORT_DESCRIPTOR +{ +public: + ImageImportDescriptor(void); + ImageImportDescriptor(const ImageImportDescriptor &someImageImportDescriptor); + virtual ~ImageImportDescriptor(); + ImageImportDescriptor &operator=(const ImageImportDescriptor &someImageImportDescriptor); + WORD operator==(const ImageImportDescriptor &someImageImportDescriptor)const; + operator IMAGE_IMPORT_DESCRIPTOR &(void); + ImageImportDescriptor &operator<<(PureViewOfFile &pureView); + DWORD characteristicsRVA(void)const; + void characteristicsRVA(DWORD characteristicsRVA); + DWORD originalFirstThunkRVA(void)const; + void originalFirstThunkRVA(DWORD originalFirstThunkRVA); + DWORD timeDateStamp(void)const; + void timeDateStamp(DWORD timeDateStamp); + DWORD forwarderChainIndex(void)const; + void forwarderChainIndex(DWORD forwarderChainIndex); + DWORD nameRVA(void)const; + void nameRVA(DWORD nameRVA); + DWORD firstThunkRVA(void)const; + void firstThunkRVA(DWORD firstThunkRVA); + WORD isOkay(void)const; + void loadImageImportThunks(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders); + void loadImageFirstThunk(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders); +private: + void loadImageImportThunk(DWORD virtualAddress,DWORD deltaOffset,Block &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders); + void setZero(void); +}; + +inline +ImageImportDescriptor::ImageImportDescriptor(void) +{ + setZero(); +} + +inline +ImageImportDescriptor::ImageImportDescriptor(const ImageImportDescriptor &someImageImportDescriptor) +{ + *this=someImageImportDescriptor; +} + +inline +ImageImportDescriptor::~ImageImportDescriptor() +{ +} + +inline +ImageImportDescriptor::operator IMAGE_IMPORT_DESCRIPTOR &(void) +{ + return *this; +} + +inline +ImageImportDescriptor &ImageImportDescriptor::operator=(const ImageImportDescriptor &someImageImportDescriptor) +{ + characteristicsRVA(someImageImportDescriptor.characteristicsRVA()); + originalFirstThunkRVA(someImageImportDescriptor.originalFirstThunkRVA()); + timeDateStamp(someImageImportDescriptor.timeDateStamp()); + forwarderChainIndex(someImageImportDescriptor.forwarderChainIndex()); + nameRVA(someImageImportDescriptor.nameRVA()); + firstThunkRVA(someImageImportDescriptor.firstThunkRVA()); + (ImageImportDescriptorExpand&)*this=(ImageImportDescriptorExpand&)someImageImportDescriptor; + return *this; +} + +inline +ImageImportDescriptor &ImageImportDescriptor::operator<<(PureViewOfFile &pureView) +{ + pureView.read((char*)&((IMAGE_IMPORT_DESCRIPTOR&)*this),sizeof(IMAGE_IMPORT_DESCRIPTOR)); + return *this; +} + +inline +WORD ImageImportDescriptor::operator==(const ImageImportDescriptor &someImageImportDescriptor)const +{ + return (characteristicsRVA()==someImageImportDescriptor.characteristicsRVA()&& + originalFirstThunkRVA()==someImageImportDescriptor.originalFirstThunkRVA()&& + timeDateStamp()==someImageImportDescriptor.timeDateStamp()&& + forwarderChainIndex()==someImageImportDescriptor.forwarderChainIndex()&& + nameRVA()==someImageImportDescriptor.nameRVA()&& + firstThunkRVA()==someImageImportDescriptor.firstThunkRVA()); +} + +inline +DWORD ImageImportDescriptor::characteristicsRVA(void)const +{ + return IMAGE_IMPORT_DESCRIPTOR::Characteristics; +} + +inline +DWORD ImageImportDescriptor::originalFirstThunkRVA(void)const +{ + return (DWORD)IMAGE_IMPORT_DESCRIPTOR::OriginalFirstThunk; +} + +inline +DWORD ImageImportDescriptor::timeDateStamp(void)const +{ + return IMAGE_IMPORT_DESCRIPTOR::TimeDateStamp; +} + +inline +DWORD ImageImportDescriptor::forwarderChainIndex(void)const +{ + return IMAGE_IMPORT_DESCRIPTOR::ForwarderChain; +} + +inline +DWORD ImageImportDescriptor::nameRVA(void)const +{ + return IMAGE_IMPORT_DESCRIPTOR::Name; +} + +inline +DWORD ImageImportDescriptor::firstThunkRVA(void)const +{ + return (DWORD)IMAGE_IMPORT_DESCRIPTOR::FirstThunk; +} + +inline +void ImageImportDescriptor::characteristicsRVA(DWORD characteristicsRVA) +{ + IMAGE_IMPORT_DESCRIPTOR::Characteristics=characteristicsRVA; +} + +inline +void ImageImportDescriptor::originalFirstThunkRVA(DWORD originalFirstThunkRVA) +{ + IMAGE_IMPORT_DESCRIPTOR::OriginalFirstThunk=(unsigned long)(PIMAGE_THUNK_DATA)originalFirstThunkRVA; +} + +inline +void ImageImportDescriptor::timeDateStamp(DWORD timeDateStamp) +{ + IMAGE_IMPORT_DESCRIPTOR::TimeDateStamp=timeDateStamp; +} + +inline +void ImageImportDescriptor::forwarderChainIndex(DWORD forwarderChainIndex) +{ + IMAGE_IMPORT_DESCRIPTOR::ForwarderChain=forwarderChainIndex; +} + +inline +void ImageImportDescriptor::nameRVA(DWORD nameRVA) +{ + IMAGE_IMPORT_DESCRIPTOR::Name=nameRVA; +} + +inline +void ImageImportDescriptor::firstThunkRVA(DWORD firstThunkRVA) +{ + IMAGE_IMPORT_DESCRIPTOR::FirstThunk=(unsigned long)(PIMAGE_THUNK_DATA)firstThunkRVA; +} + +inline +WORD ImageImportDescriptor::isOkay(void)const +{ + if(!characteristicsRVA()&&!originalFirstThunkRVA()&& + !timeDateStamp()&&!forwarderChainIndex()&& + !nameRVA()&&!firstThunkRVA())return FALSE; + return TRUE; +} + +inline +void ImageImportDescriptor::setZero(void) +{ + ::memset(&((IMAGE_IMPORT_DESCRIPTOR&)*this),0,sizeof(IMAGE_IMPORT_DESCRIPTOR)); +} +#endif + diff --git a/image/IMRESDIR.BAK b/image/IMRESDIR.BAK new file mode 100644 index 0000000..312bba7 --- /dev/null +++ b/image/IMRESDIR.BAK @@ -0,0 +1,188 @@ +#ifndef _IMAGE_IMAGERESOURCEDIRECTORY_HPP_ +#define _IMAGE_IMAGERESOURCEDIRECTORY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class ImageResourceDirectory; +class ImageResourceDirectoryEntry; +class PureViewOfFile; + +class ImageResourceDirectory : private IMAGE_RESOURCE_DIRECTORY +{ +public: + typedef Block ImageResourceDirectoryEntries; + ImageResourceDirectory(void); + ImageResourceDirectory(const ImageResourceDirectory &someImageResourceDirectory); + virtual ~ImageResourceDirectory(); + ImageResourceDirectory &operator=(const ImageResourceDirectory &someImageResourceDirectory); + ImageResourceDirectoryEntry &operator[](UINT itemIndex); + WORD operator==(const ImageResourceDirectory &someImageResourceDirectory)const; + operator IMAGE_RESOURCE_DIRECTORY &(void); + DWORD characteristics(void)const; + void characteristics(DWORD characteristics); + DWORD timeDate(void)const; + void timeDate(DWORD timeDate); + WORD majorVersion(void)const; + void majorVersion(WORD majorVersion); + WORD minorVersion(void)const; + void minorVersion(WORD minorVersion); + WORD entriesByName(void)const; + void entriesByName(WORD entriesByName); + WORD entriesByID(void)const; + void entriesByID(WORD entriesByID); + WORD entries(void)const; + void read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView); + void clear(void); +private: + void zeroInit(void); + ImageResourceDirectoryEntries mImageResourceDirectoryEntries; +}; + +inline +ImageResourceDirectory::ImageResourceDirectory(void) +{ + zeroInit(); +} + +inline +ImageResourceDirectory::ImageResourceDirectory(const ImageResourceDirectory &someImageResourceDirectory) +{ + *this=someImageResourceDirectory; +} + +inline +ImageResourceDirectory::~ImageResourceDirectory() +{ +} + +inline +ImageResourceDirectory &ImageResourceDirectory::operator=(const ImageResourceDirectory &someImageResourceDirectory) +{ + characteristics(someImageResourceDirectory.characteristics()); + timeDate(someImageResourceDirectory.timeDate()); + majorVersion(someImageResourceDirectory.majorVersion()); + minorVersion(someImageResourceDirectory.minorVersion()); + entriesByName(someImageResourceDirectory.entriesByName()); + entriesByID(someImageResourceDirectory.entriesByID()); + mImageResourceDirectoryEntries=someImageResourceDirectory.mImageResourceDirectoryEntries; + return *this; +} + +inline +WORD ImageResourceDirectory::operator==(const ImageResourceDirectory &someImageResourceDirectory)const +{ + return (characteristics()==someImageResourceDirectory.characteristics()&& + timeDate()==someImageResourceDirectory.timeDate()&& + majorVersion()==someImageResourceDirectory.majorVersion()&& + minorVersion()==someImageResourceDirectory.minorVersion()&& + entriesByName()==someImageResourceDirectory.entriesByName()&& + entriesByID()==someImageResourceDirectory.entriesByID()&& + mImageResourceDirectoryEntries==someImageResourceDirectory.mImageResourceDirectoryEntries); +} + +inline +ImageResourceDirectory::operator IMAGE_RESOURCE_DIRECTORY &(void) +{ + return *this; +} + +inline +DWORD ImageResourceDirectory::characteristics(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::Characteristics; +} + +inline +void ImageResourceDirectory::characteristics(DWORD characteristics) +{ + IMAGE_RESOURCE_DIRECTORY::Characteristics=characteristics; +} + +inline +DWORD ImageResourceDirectory::timeDate(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::TimeDateStamp; +} + +inline +void ImageResourceDirectory::timeDate(DWORD timeDate) +{ + IMAGE_RESOURCE_DIRECTORY::TimeDateStamp=timeDate; +} + +inline +WORD ImageResourceDirectory::majorVersion(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::MajorVersion; +} + +inline +void ImageResourceDirectory::majorVersion(WORD majorVersion) +{ + IMAGE_RESOURCE_DIRECTORY::MajorVersion=majorVersion; +} + +inline +WORD ImageResourceDirectory::minorVersion(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::MinorVersion; +} + +inline +void ImageResourceDirectory::minorVersion(WORD minorVersion) +{ + IMAGE_RESOURCE_DIRECTORY::MinorVersion=minorVersion; +} + +inline +WORD ImageResourceDirectory::entries(void)const +{ + return entriesByName()+entriesByID(); +} + +inline +WORD ImageResourceDirectory::entriesByName(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::NumberOfNamedEntries; +} + +inline +void ImageResourceDirectory::entriesByName(WORD entriesByName) +{ + IMAGE_RESOURCE_DIRECTORY::NumberOfNamedEntries=entriesByName; +} + +inline +WORD ImageResourceDirectory::entriesByID(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::NumberOfIdEntries; +} + +inline +void ImageResourceDirectory::entriesByID(WORD entriesByID) +{ + IMAGE_RESOURCE_DIRECTORY::NumberOfIdEntries=entriesByID; +} + +inline +void ImageResourceDirectory::zeroInit(void) +{ + IMAGE_RESOURCE_DIRECTORY::Characteristics=0; + IMAGE_RESOURCE_DIRECTORY::TimeDateStamp=0; + IMAGE_RESOURCE_DIRECTORY::MajorVersion=0; + IMAGE_RESOURCE_DIRECTORY::MinorVersion=0; + IMAGE_RESOURCE_DIRECTORY::NumberOfNamedEntries=0; + IMAGE_RESOURCE_DIRECTORY::NumberOfIdEntries=0; +} + +inline +void ImageResourceDirectory::clear(void) +{ + zeroInit(); + mImageResourceDirectoryEntries.remove(); +} +#endif \ No newline at end of file diff --git a/image/IMRESDIR.CPP b/image/IMRESDIR.CPP new file mode 100644 index 0000000..c53db1b --- /dev/null +++ b/image/IMRESDIR.CPP @@ -0,0 +1,24 @@ +#include +#include +#include +#include + +ImageResourceDirectoryEntry &ImageResourceDirectory::operator[](UINT itemIndex) +{ + assert(itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class ImageResourceDirectory; +class ImageResourceDirectoryEntry; +class PureViewOfFile; + +class ImageResourceDirectory : private IMAGE_RESOURCE_DIRECTORY +{ +public: + typedef Block ImageResourceDirectoryEntries; + ImageResourceDirectory(void); + ImageResourceDirectory(const ImageResourceDirectory &someImageResourceDirectory); + virtual ~ImageResourceDirectory(); + ImageResourceDirectory &operator=(const ImageResourceDirectory &someImageResourceDirectory); + ImageResourceDirectoryEntry &operator[](UINT itemIndex); + WORD operator==(const ImageResourceDirectory &someImageResourceDirectory)const; + operator IMAGE_RESOURCE_DIRECTORY &(void); + DWORD characteristics(void)const; + void characteristics(DWORD characteristics); + DWORD timeDate(void)const; + void timeDate(DWORD timeDate); + WORD majorVersion(void)const; + void majorVersion(WORD majorVersion); + WORD minorVersion(void)const; + void minorVersion(WORD minorVersion); + WORD entriesByName(void)const; + void entriesByName(WORD entriesByName); + WORD entriesByID(void)const; + void entriesByID(WORD entriesByID); + WORD entries(void)const; + void read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView); + void clear(void); +private: + void zeroInit(void); + ImageResourceDirectoryEntries mImageResourceDirectoryEntries; +}; + +inline +ImageResourceDirectory::ImageResourceDirectory(void) +{ + zeroInit(); +} + +inline +ImageResourceDirectory::ImageResourceDirectory(const ImageResourceDirectory &someImageResourceDirectory) +{ + *this=someImageResourceDirectory; +} + +inline +ImageResourceDirectory::~ImageResourceDirectory() +{ +} + +inline +ImageResourceDirectory &ImageResourceDirectory::operator=(const ImageResourceDirectory &someImageResourceDirectory) +{ + characteristics(someImageResourceDirectory.characteristics()); + timeDate(someImageResourceDirectory.timeDate()); + majorVersion(someImageResourceDirectory.majorVersion()); + minorVersion(someImageResourceDirectory.minorVersion()); + entriesByName(someImageResourceDirectory.entriesByName()); + entriesByID(someImageResourceDirectory.entriesByID()); + mImageResourceDirectoryEntries=someImageResourceDirectory.mImageResourceDirectoryEntries; + return *this; +} + +inline +WORD ImageResourceDirectory::operator==(const ImageResourceDirectory &someImageResourceDirectory)const +{ + return (characteristics()==someImageResourceDirectory.characteristics()&& + timeDate()==someImageResourceDirectory.timeDate()&& + majorVersion()==someImageResourceDirectory.majorVersion()&& + minorVersion()==someImageResourceDirectory.minorVersion()&& + entriesByName()==someImageResourceDirectory.entriesByName()&& + entriesByID()==someImageResourceDirectory.entriesByID()&& + mImageResourceDirectoryEntries==someImageResourceDirectory.mImageResourceDirectoryEntries); +} + +inline +ImageResourceDirectory::operator IMAGE_RESOURCE_DIRECTORY &(void) +{ + return *this; +} + +inline +DWORD ImageResourceDirectory::characteristics(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::Characteristics; +} + +inline +void ImageResourceDirectory::characteristics(DWORD characteristics) +{ + IMAGE_RESOURCE_DIRECTORY::Characteristics=characteristics; +} + +inline +DWORD ImageResourceDirectory::timeDate(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::TimeDateStamp; +} + +inline +void ImageResourceDirectory::timeDate(DWORD timeDate) +{ + IMAGE_RESOURCE_DIRECTORY::TimeDateStamp=timeDate; +} + +inline +WORD ImageResourceDirectory::majorVersion(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::MajorVersion; +} + +inline +void ImageResourceDirectory::majorVersion(WORD majorVersion) +{ + IMAGE_RESOURCE_DIRECTORY::MajorVersion=majorVersion; +} + +inline +WORD ImageResourceDirectory::minorVersion(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::MinorVersion; +} + +inline +void ImageResourceDirectory::minorVersion(WORD minorVersion) +{ + IMAGE_RESOURCE_DIRECTORY::MinorVersion=minorVersion; +} + +inline +WORD ImageResourceDirectory::entries(void)const +{ + return entriesByName()+entriesByID(); +} + +inline +WORD ImageResourceDirectory::entriesByName(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::NumberOfNamedEntries; +} + +inline +void ImageResourceDirectory::entriesByName(WORD entriesByName) +{ + IMAGE_RESOURCE_DIRECTORY::NumberOfNamedEntries=entriesByName; +} + +inline +WORD ImageResourceDirectory::entriesByID(void)const +{ + return IMAGE_RESOURCE_DIRECTORY::NumberOfIdEntries; +} + +inline +void ImageResourceDirectory::entriesByID(WORD entriesByID) +{ + IMAGE_RESOURCE_DIRECTORY::NumberOfIdEntries=entriesByID; +} + +inline +void ImageResourceDirectory::zeroInit(void) +{ + IMAGE_RESOURCE_DIRECTORY::Characteristics=0; + IMAGE_RESOURCE_DIRECTORY::TimeDateStamp=0; + IMAGE_RESOURCE_DIRECTORY::MajorVersion=0; + IMAGE_RESOURCE_DIRECTORY::MinorVersion=0; + IMAGE_RESOURCE_DIRECTORY::NumberOfNamedEntries=0; + IMAGE_RESOURCE_DIRECTORY::NumberOfIdEntries=0; +} + +inline +void ImageResourceDirectory::clear(void) +{ + zeroInit(); + mImageResourceDirectoryEntries.remove(); +} +#endif \ No newline at end of file diff --git a/image/Image.mak b/image/Image.mak new file mode 100644 index 0000000..dff3fcb --- /dev/null +++ b/image/Image.mak @@ -0,0 +1,779 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=image - Win32 Debug +!MESSAGE No configuration specified. Defaulting to image - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "image - Win32 Release" && "$(CFG)" != "image - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Image.mak" CFG="image - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "image - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "image - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Image.lib" + +CLEAN : + -@erase "$(INTDIR)\Direntry.obj" + -@erase "$(INTDIR)\Dtaentry.obj" + -@erase "$(INTDIR)\Export.obj" + -@erase "$(INTDIR)\Hardware.obj" + -@erase "$(INTDIR)\Import.obj" + -@erase "$(INTDIR)\Imresdir.obj" + -@erase "$(INTDIR)\Pehdr.obj" + -@erase "$(INTDIR)\Sctnhdrs.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vxdhdr.obj" + -@erase "$(INTDIR)\vxdname.obj" + -@erase "$(INTDIR)\vxdobj.obj" + -@erase "$(OUTDIR)\Image.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Image.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Image.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Image.lib" +LIB32_OBJS= \ + "$(INTDIR)\Direntry.obj" \ + "$(INTDIR)\Dtaentry.obj" \ + "$(INTDIR)\Export.obj" \ + "$(INTDIR)\Hardware.obj" \ + "$(INTDIR)\Import.obj" \ + "$(INTDIR)\Imresdir.obj" \ + "$(INTDIR)\Pehdr.obj" \ + "$(INTDIR)\Sctnhdrs.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vxdhdr.obj" \ + "$(INTDIR)\vxdname.obj" \ + "$(INTDIR)\vxdobj.obj" + +"$(OUTDIR)\Image.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msimage.lib" + +CLEAN : + -@erase "$(INTDIR)\Direntry.obj" + -@erase "$(INTDIR)\Dtaentry.obj" + -@erase "$(INTDIR)\Export.obj" + -@erase "$(INTDIR)\Hardware.obj" + -@erase "$(INTDIR)\Import.obj" + -@erase "$(INTDIR)\Imresdir.obj" + -@erase "$(INTDIR)\Pehdr.obj" + -@erase "$(INTDIR)\Sctnhdrs.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vxdhdr.obj" + -@erase "$(INTDIR)\vxdname.obj" + -@erase "$(INTDIR)\vxdobj.obj" + -@erase "..\exe\msimage.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /GX /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /G4 /Zp1 /MTd /GX /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)/"\ + /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Image.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msimage.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msimage.lib" +LIB32_OBJS= \ + "$(INTDIR)\Direntry.obj" \ + "$(INTDIR)\Dtaentry.obj" \ + "$(INTDIR)\Export.obj" \ + "$(INTDIR)\Hardware.obj" \ + "$(INTDIR)\Import.obj" \ + "$(INTDIR)\Imresdir.obj" \ + "$(INTDIR)\Pehdr.obj" \ + "$(INTDIR)\Sctnhdrs.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vxdhdr.obj" \ + "$(INTDIR)\vxdname.obj" \ + "$(INTDIR)\vxdobj.obj" + +"..\exe\msimage.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "image - Win32 Release" +# Name "image - Win32 Debug" + +!IF "$(CFG)" == "image - Win32 Release" + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Vxdhdr.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_VXDHD=\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Vxdhdr.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Vxdhdr.obj" : $(SOURCE) $(DEP_CPP_VXDHD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_VXDHD=\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Vxdhdr.hpp"\ + {$(INCLUDE)}"\.\vxdname.hpp"\ + {$(INCLUDE)}"\.\vxdnames.hpp"\ + {$(INCLUDE)}"\.\vxdobj.hpp"\ + {$(INCLUDE)}"\.\vxdobjs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Vxdhdr.obj" : $(SOURCE) $(DEP_CPP_VXDHD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Hardware.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_HARDW=\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Hardware.obj" : $(SOURCE) $(DEP_CPP_HARDW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_HARDW=\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Hardware.obj" : $(SOURCE) $(DEP_CPP_HARDW) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Import.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_IMPOR=\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Import.obj" : $(SOURCE) $(DEP_CPP_IMPOR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_IMPOR=\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Import.obj" : $(SOURCE) $(DEP_CPP_IMPOR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Pehdr.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_PEHDR=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Dllflags.hpp"\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\.\Iflags.hpp"\ + {$(INCLUDE)}"\.\Imagedir.hpp"\ + {$(INCLUDE)}"\.\Imagehdr.hpp"\ + {$(INCLUDE)}"\.\Ntsubsys.hpp"\ + {$(INCLUDE)}"\.\Optlhdr.hpp"\ + {$(INCLUDE)}"\.\Pehdr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pathfnd.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Pehdr.obj" : $(SOURCE) $(DEP_CPP_PEHDR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_PEHDR=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Dllflags.hpp"\ + {$(INCLUDE)}"\.\Doshdr.hpp"\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Hardware.hpp"\ + {$(INCLUDE)}"\.\Iflags.hpp"\ + {$(INCLUDE)}"\.\Imagedir.hpp"\ + {$(INCLUDE)}"\.\Imagehdr.hpp"\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Keydir.hpp"\ + {$(INCLUDE)}"\.\Ntsubsys.hpp"\ + {$(INCLUDE)}"\.\Optlhdr.hpp"\ + {$(INCLUDE)}"\.\Pehdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pathfnd.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Pehdr.obj" : $(SOURCE) $(DEP_CPP_PEHDR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Sctnhdrs.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_SCTNH=\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Sctnhdrs.obj" : $(SOURCE) $(DEP_CPP_SCTNH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_SCTNH=\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Sctnhdrs.obj" : $(SOURCE) $(DEP_CPP_SCTNH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Dbgdir.hpp"\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Impexp.hpp"\ + {$(INCLUDE)}"\.\Import.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\.\Thnkdata.hpp"\ + {$(INCLUDE)}"\.\Thnkname.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Export.cpp + +!IF "$(CFG)" == "image - Win32 Release" + +DEP_CPP_EXPOR=\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Export.obj" : $(SOURCE) $(DEP_CPP_EXPOR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +DEP_CPP_EXPOR=\ + {$(INCLUDE)}"\.\Expdir.hpp"\ + {$(INCLUDE)}"\.\Expdsc.hpp"\ + {$(INCLUDE)}"\.\Export.hpp"\ + {$(INCLUDE)}"\.\Sctnhdr.hpp"\ + {$(INCLUDE)}"\.\Sctnhdrs.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purewrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Export.obj" : $(SOURCE) $(DEP_CPP_EXPOR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Imresdir.cpp +DEP_CPP_IMRES=\ + {$(INCLUDE)}"\.\Direntry.hpp"\ + {$(INCLUDE)}"\.\Dtaentry.hpp"\ + {$(INCLUDE)}"\.\Imresdir.hpp"\ + {$(INCLUDE)}"\.\Strptr.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Imresdir.obj" : $(SOURCE) $(DEP_CPP_IMRES) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Direntry.cpp +DEP_CPP_DIREN=\ + {$(INCLUDE)}"\.\Direntry.hpp"\ + {$(INCLUDE)}"\.\Dtaentry.hpp"\ + {$(INCLUDE)}"\.\Imresdir.hpp"\ + {$(INCLUDE)}"\.\Resdrstr.hpp"\ + {$(INCLUDE)}"\.\Strptr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnls.hpp"\ + + +"$(INTDIR)\Direntry.obj" : $(SOURCE) $(DEP_CPP_DIREN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dtaentry.cpp +DEP_CPP_DTAEN=\ + {$(INCLUDE)}"\.\Dtaentry.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Dtaentry.obj" : $(SOURCE) $(DEP_CPP_DTAEN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\vxdobj.cpp +DEP_CPP_VXDOB=\ + {$(INCLUDE)}"\.\vxdobj.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\vxdobj.obj" : $(SOURCE) $(DEP_CPP_VXDOB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\vxdname.cpp +DEP_CPP_VXDNA=\ + {$(INCLUDE)}"\.\vxdname.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\vxdname.obj" : $(SOURCE) $(DEP_CPP_VXDNA) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/image/Image.mdp b/image/Image.mdp new file mode 100644 index 0000000..e050fce Binary files /dev/null and b/image/Image.mdp differ diff --git a/image/KEYDIR.HPP b/image/KEYDIR.HPP new file mode 100644 index 0000000..cba381d --- /dev/null +++ b/image/KEYDIR.HPP @@ -0,0 +1,77 @@ +#ifndef _IMAGE_DIRECTORYENTRYKEY_HPP_ +#define _IMAGE_DIRECTORYENTRYKEY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class DirectoryEntryKey +{ +public: + enum Key{ExportDirectory=IMAGE_DIRECTORY_ENTRY_EXPORT, + ImportDirectory=IMAGE_DIRECTORY_ENTRY_IMPORT, + ResourceDirectory=IMAGE_DIRECTORY_ENTRY_RESOURCE, + ExceptionDirectory=IMAGE_DIRECTORY_ENTRY_EXCEPTION, + SecurityDirectory=IMAGE_DIRECTORY_ENTRY_SECURITY, + BaseRelocationTableDirectory=IMAGE_DIRECTORY_ENTRY_BASERELOC, + DebugDirectory=IMAGE_DIRECTORY_ENTRY_DEBUG, + DescriptionStringDirectory=IMAGE_DIRECTORY_ENTRY_COPYRIGHT, + MachineValueDirectory=IMAGE_DIRECTORY_ENTRY_GLOBALPTR, + ThreadLocalStorageDirectory=IMAGE_DIRECTORY_ENTRY_TLS, + LoadConfigurationDirectory=IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG, + BoundImportDirectory=IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT, + ImportAddressTableDirectory=IMAGE_DIRECTORY_ENTRY_IAT, +// DelayImportDirectory=IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT + }; + DirectoryEntryKey(Key entryEntry=ImportDirectory); + DirectoryEntryKey(const DirectoryEntryKey &someDirectoryEntryKey); + virtual ~DirectoryEntryKey(); + DirectoryEntryKey &operator=(const DirectoryEntryKey &someDirectoryEntryKey); + WORD operator==(const DirectoryEntryKey &someDirectoryEntryKey); + Key entryKey(void)const; + void entryKey(Key entryKey); +private: + Key mDirectoryKey; +}; + +inline +DirectoryEntryKey::DirectoryEntryKey(Key entryKey) +: mDirectoryKey(entryKey) +{ +} + +inline +DirectoryEntryKey::DirectoryEntryKey(const DirectoryEntryKey &someDirectoryEntryKey) +{ + *this=someDirectoryEntryKey; +} + +inline +DirectoryEntryKey::~DirectoryEntryKey() +{ +} + +inline +DirectoryEntryKey &DirectoryEntryKey::operator=(const DirectoryEntryKey &someDirectoryEntryKey) +{ + entryKey(someDirectoryEntryKey.entryKey()); + return *this; +} + +inline +WORD DirectoryEntryKey::operator==(const DirectoryEntryKey &someDirectoryEntryKey) +{ + return entryKey()==someDirectoryEntryKey.entryKey(); +} + +inline +DirectoryEntryKey::Key DirectoryEntryKey::entryKey(void)const +{ + return mDirectoryKey; +} + +inline +void DirectoryEntryKey::entryKey(Key entryKey) +{ + mDirectoryKey=entryKey; +} +#endif diff --git a/image/LIB.RSP b/image/LIB.RSP new file mode 100644 index 0000000..fe744fe --- /dev/null +++ b/image/LIB.RSP @@ -0,0 +1,11 @@ +/OUT:C:\WORK\IMAGE\MSVCOBJ\MSIMAGE.LIB +/MACHINE:IX86 +/SUBSYSTEM:WINDOWS +/DEBUGTYPE:BOTH +MSVCOBJ\EXPORT.OBJ +MSVCOBJ\HARDWARE.OBJ +MSVCOBJ\IMPORT.OBJ +MSVCOBJ\PEHDR.OBJ +MSVCOBJ\SCTNHDRS.OBJ +MSVCOBJ\VXDHDR.OBJ +MSVCOBJ\STDTMPL.OBJ diff --git a/image/MAIN.CPP b/image/MAIN.CPP new file mode 100644 index 0000000..f717cd1 --- /dev/null +++ b/image/MAIN.CPP @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ +// FileHandle peFile("C:\\WORK\\EXE\\MIDISQ32.DLL"); +// FileHandle peFile("C:\\WINDOWS\\SYSTEM\\DISKCOPY.DLL",FileHandle::Read,FileHandle::ShareReadWrite); +// FileHandle peFile("C:\\WINDOWS\\SYSTEM\\KERNEL32.DLL",FileHandle::Read,FileHandle::ShareReadWrite); +// FileHandle peFile("C:\\WINDOWS\\SYSTEM\\DISKCOPY.DLL",FileHandle::Read,FileHandle::ShareReadWrite); + FileHandle peFile("D:\\WORK\\EXE\\ENGINEER.EXE",FileHandle::Read,FileHandle::ShareReadWrite); + FileMap peMap(peFile); + PureViewOfFile peView(peMap); + PEHeader peHeader; + peHeader< imageImportDescriptors; + Block imageDebugDirectory; + ImageExportDescriptors imageExportDescriptors; + ImageSectionHeader importSectionHeader; + ImageSectionHeader exportSectionHeader; +// peHeader.loadImageImportDescriptors(imageImportDescriptors,importSectionHeader,peView); +// peHeader.loadImageExportDescriptors(imageExportDescriptors,exportSectionHeader,peView); + peHeader.loadImageDebugDirectory(imageDebugDirectory,peView); + return FALSE; +} + diff --git a/image/MAKE.RSP b/image/MAKE.RSP new file mode 100644 index 0000000..b7ebf16 --- /dev/null +++ b/image/MAKE.RSP @@ -0,0 +1,23 @@ +/D__FLAT__ +/DSTRICT +/DWIN32 +/D_WINDOWS +/IC:\PARTS\MSVC\INCLUDE +/I.. +/Od +/GD +/G4 +/Zi +/Yd +/YX +/c +/nologo +/FoMSVCOBJ\ +SCTNHDRS.CPP +EXPORT.CPP +HARDWARE.CPP +IMPORT.CPP +PEHDR.CPP +VXDHDR.CPP +STDTMPL.CPP + diff --git a/image/MSIMAGE.DSW b/image/MSIMAGE.DSW new file mode 100644 index 0000000..efb0ba3 Binary files /dev/null and b/image/MSIMAGE.DSW differ diff --git a/image/MSIMAGE.IDE b/image/MSIMAGE.IDE new file mode 100644 index 0000000..61f66b5 Binary files /dev/null and b/image/MSIMAGE.IDE differ diff --git a/image/NTSUBSYS.HPP b/image/NTSUBSYS.HPP new file mode 100644 index 0000000..86ea2f8 --- /dev/null +++ b/image/NTSUBSYS.HPP @@ -0,0 +1,77 @@ +#ifndef _IMAGE_NTSUBSYS_HPP_ +#define _IMAGE_NTSUBSYS_HPP_ +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class NTSubSystem +{ +public: + enum SubSystem{Unknown=0x0000,Native=0x0001,WindowsGUI=0x0002,WindowsChar=0x0003,OS2Char=0x0005,PosixChar=0x0007}; + NTSubSystem(WORD subSystem=0); + NTSubSystem(const NTSubSystem &someNTSubSystem); + ~NTSubSystem(); + NTSubSystem &operator=(const NTSubSystem &someNTSubSystem); + WORD operator==(const NTSubSystem &someNTSubSystem); + SubSystem subSystem(void)const; + void subSystem(SubSystem subSystem); + operator String(void)const; +private: + SubSystem mSubSystem; +}; + +inline +NTSubSystem::NTSubSystem(WORD subSystem) +: mSubSystem((SubSystem)subSystem) +{ +} + +inline +NTSubSystem::NTSubSystem(const NTSubSystem &someNTSubSystem) +{ + *this=someNTSubSystem; +} + +inline +NTSubSystem::~NTSubSystem() +{ +} + +inline +NTSubSystem &NTSubSystem::operator=(const NTSubSystem &someNTSubSystem) +{ + subSystem(someNTSubSystem.subSystem()); + return *this; +} + +inline +WORD NTSubSystem::operator==(const NTSubSystem &someNTSubSystem) +{ + return subSystem()==someNTSubSystem.subSystem(); +} + +inline +NTSubSystem::SubSystem NTSubSystem::subSystem(void)const +{ + return mSubSystem; +} + +inline +void NTSubSystem::subSystem(SubSystem subSystem) +{ + mSubSystem=subSystem; +} + +inline +NTSubSystem::operator String(void)const +{ + if(Unknown==subSystem())return "Unknown"; + else if(Native==subSystem())return "Native"; + else if(WindowsGUI==subSystem())return "WindowsGUI"; + else if(WindowsChar==subSystem())return "WindowsChar"; + else if(OS2Char==subSystem())return "OS2Char"; + else if(PosixChar==subSystem())return "PosixChar"; + else return "********"; +} +#endif + diff --git a/image/OPTLHDR.HPP b/image/OPTLHDR.HPP new file mode 100644 index 0000000..5fe6822 --- /dev/null +++ b/image/OPTLHDR.HPP @@ -0,0 +1,284 @@ +#ifndef _IMAGE_IMAGEOPTIONALHEADER_HPP_ +#define _IMAGE_IMAGEOPTIONALHEADER_HPP_ +#ifndef _IMAGE_IMAGEDATADIRECTORY_HPP_ +#include +#endif +#ifndef _IMAGE_DIRECTORYENTRYKEY_HPP_ +#include +#endif +#ifndef _IMAGE_NTSUBSYS_HPP_ +#include +#endif +#ifndef _COMMON_ASSERT_HPP_ +#include +#endif + +class ImageOptionalHeader : private _IMAGE_OPTIONAL_HEADER +{ +public: + enum{NTMagic=0x010B,ROMMagic=0x0107}; + ImageOptionalHeader(void); + ImageOptionalHeader(const ImageOptionalHeader &someImageOptionalHeader); + ~ImageOptionalHeader(); + ImageOptionalHeader &operator=(const ImageOptionalHeader &someImageOptionalHeader); + WORD operator==(const ImageOptionalHeader &someImageOptionalHeader); + WORD operator<<(PureViewOfFile &pureView); + ImageDataDirectory operator[](DirectoryEntryKey entryKey); + WORD magic(void)const; + BYTE majorLinkerVersion(void)const; + BYTE minorLinkerVersion(void)const; + DWORD sizeofCode(void)const; + DWORD sizeofInitializedData(void)const; + DWORD sizeofUninitializedData(void)const; + DWORD entryPointAddress(void)const; + DWORD codeBase(void)const; + DWORD dataBase(void)const; + DWORD imageBase(void)const; + DWORD sectionAlignment(void)const; + DWORD fileAlignment(void)const; + WORD majorOSVersion(void)const; + WORD minorOSVersion(void)const; + WORD majorImageVersion(void)const; + WORD minorImageVersion(void)const; + WORD majorSubsystemVersion(void)const; + WORD minorSubsystemVersion(void)const; + DWORD sizeofImage(void)const; + DWORD sizeofHeaders(void)const; + DWORD checksum(void)const; + NTSubSystem subsystem(void)const; + WORD dllCharacteristics(void)const; + DWORD sizeofStackReserve(void)const; + DWORD sizeofStackCommit(void)const; + DWORD sizeofHeapReserve(void)const; + DWORD sizeofHeapCommit(void)const; + DWORD loaderFlags(void)const; + DWORD numberOfRvaAndSizes(void)const; + WORD isOkay(void)const; +private: + enum{NumberOfDirectoryEntries=IMAGE_NUMBEROF_DIRECTORY_ENTRIES}; +}; + +inline +ImageOptionalHeader::ImageOptionalHeader(void) +{ + ::memset((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),0,sizeof(_IMAGE_OPTIONAL_HEADER)); +} + +inline +ImageOptionalHeader::ImageOptionalHeader(const ImageOptionalHeader &someImageOptionalHeader) +{ + *this=someImageOptionalHeader; +} + +inline +ImageOptionalHeader::~ImageOptionalHeader() +{ +} + +inline +ImageOptionalHeader &ImageOptionalHeader::operator=(const ImageOptionalHeader &someImageOptionalHeader) +{ + ::memcpy((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),(char*)&((_IMAGE_OPTIONAL_HEADER&)someImageOptionalHeader),sizeof(_IMAGE_OPTIONAL_HEADER)); + return *this; +} + +inline +WORD ImageOptionalHeader::operator==(const ImageOptionalHeader &someImageOptionalHeader) +{ + return ::memcmp((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),(char*)&((_IMAGE_OPTIONAL_HEADER&)someImageOptionalHeader),sizeof(_IMAGE_OPTIONAL_HEADER)); +} + +inline +WORD ImageOptionalHeader::operator<<(PureViewOfFile &pureView) +{ + if(sizeof(_IMAGE_OPTIONAL_HEADER)!=pureView.read((char*)&((_IMAGE_OPTIONAL_HEADER&)*this),sizeof(_IMAGE_OPTIONAL_HEADER)))return FALSE; + return isOkay(); +} + +inline +ImageDataDirectory ImageOptionalHeader::operator[](DirectoryEntryKey entryKey) +{ + assert(entryKey.entryKey() +#include +#include +#include +#include +#include +#include + +WORD PEHeader::operator<<(PureViewOfFile &pureView) +{ + pureView.rewind(); + if(!((DOSHeader&)*this<&)*this)[itemIndex]< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + ImageSectionHeader importNamesSectionHeader; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + isMemImage(memImage); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + ImageSectionHeader importNamesSectionHeader; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + isMemImage(memImage); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageDebugDirectories,PureViewOfFile &pureView,WORD memImage) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::DebugDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageSectionHeader exportSectionHeader; + DWORD imageDirectoryEntries; + DWORD deltaOffset; + WORD msImage(FALSE); + + imageDebugDirectories.remove(); + isMemImage(memImage); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),exportSectionHeader,deltaOffset))return FALSE; + for(short sectionIndex=0;sectionIndex&)*this)[sectionIndex].name()==String(".text"))msImage=TRUE; + imageDirectoryEntries=imageSectionDirectory.size(); + if(msImage)imageDirectoryEntries/=sizeof(IMAGE_DEBUG_DIRECTORY); + pureView.push(); + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + for(long entryIndex=0;entryIndex +#include +#include +#include +#include +#include + +WORD PEHeader::operator<<(PureViewOfFile &pureView) +{ + pureView.rewind(); + if(!((DOSHeader&)*this<&)*this)[itemIndex]< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + ImageSectionHeader importNamesSectionHeader; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + isMemImage(memImage); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + ImageSectionHeader importNamesSectionHeader; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + isMemImage(memImage); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageDebugDirectories,PureViewOfFile &pureView,WORD memImage) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::DebugDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageSectionHeader exportSectionHeader; + DWORD imageDirectoryEntries; + DWORD deltaOffset; + WORD msImage(FALSE); + + imageDebugDirectories.remove(); + isMemImage(memImage); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),exportSectionHeader,deltaOffset))return FALSE; + for(short sectionIndex=0;sectionIndex&)*this)[sectionIndex].name()==String(".text"))msImage=TRUE; + imageDirectoryEntries=imageSectionDirectory.size(); + if(msImage)imageDirectoryEntries/=sizeof(IMAGE_DEBUG_DIRECTORY); + pureView.push(); + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + for(long entryIndex=0;entryIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _IMAGE_DOSHEADER_HPP_ +#include +#endif +#ifndef _IMAGE_HARDWARE_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEFLAGS_HPP_ +#include +#endif +#ifndef _IMAGE_NTSUBSYS_HPP_ +#include +#endif +#ifndef _IMAGE_DLLFLAGS_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEHEADER_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEOPTIONALHEADER_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGESECTIONHEADERS_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGEIMPORTDESCRIPTOR_HPP_ +#include +#endif +#ifndef _IMAGE_EXPORTDESCRIPTOR_HPP_ +#include +#endif +#ifndef _ENGINEER_IMAGETHUNKDATA_HPP_ +#include +#endif +#ifndef _IMAGE_IMAGETHUNKNAME_HPP_ +#include +#endif + +class ImageDebugDirectory; +class PureViewOfFile; + +class PEHeader : public DOSHeader, public ImageHeader, public ImageOptionalHeader, public ImageSectionHeaders +{ +public: + enum {PESignature=0x4550}; + PEHeader(void); + PEHeader(const PEHeader &somePEHeader); + ~PEHeader(); + PEHeader &operator=(const PEHeader &somePEHeader); + WORD operator==(const PEHeader &somePEHeader); + WORD operator<<(PureViewOfFile &pureView); + WORD loadImageImportDescriptors(Block &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage=FALSE); + WORD loadImageFirstThunk(Block &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD memImage=FALSE); + WORD loadImageExportDescriptors(ImageExportDescriptors &imageExportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView,WORD sortFlag=TRUE,WORD memImage=FALSE); + WORD loadImageDebugDirectory(Block &imageDebugDirectories,PureViewOfFile &pureView,WORD memImage=FALSE); + WORD isOkay(void)const; +private: + WORD loadImageExportDescriptors(ImageExportDescriptors &imageExportDescriptors,ImageSectionHeader &exportSectionHeader,const String &moduleName); + DWORD mPESignature; + ImageExportDescriptors mImageExportDescriptorsCache; +}; + +inline +PEHeader::PEHeader(void) +: mPESignature(0) +{ +} + +inline +PEHeader::PEHeader(const PEHeader &somePEHeader) +{ + *this=somePEHeader; +} + +inline +PEHeader::~PEHeader() +{ +} + +inline +PEHeader &PEHeader::operator=(const PEHeader &somePEHeader) +{ + (DOSHeader&)*this=(DOSHeader&)somePEHeader; + (ImageHeader&)*this=(ImageHeader&)somePEHeader; + mImageExportDescriptorsCache=somePEHeader.mImageExportDescriptorsCache; + return *this; +} + +inline +WORD PEHeader::operator==(const PEHeader &somePEHeader) +{ + return ((DOSHeader&)*this==(DOSHeader&)somePEHeader&& + (ImageHeader&)*this==(ImageHeader&)somePEHeader); +} + +inline +WORD PEHeader::isOkay(void)const +{ + return PESignature==mPESignature; +} +#endif diff --git a/image/PUREIMP.HPP b/image/PUREIMP.HPP new file mode 100644 index 0000000..57286ba --- /dev/null +++ b/image/PUREIMP.HPP @@ -0,0 +1,168 @@ +#ifndef _IMAGE_PUREIMPORT_HPP_ +#define _IMAGE_PUREIMPORT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#include + +class PureImport +{ +public: + enum ThunkType{StandardThunk,WIN95Thunk}; + PureImport(void); + PureImport(const PureImport &somePureImport); + PureImport(const String &moduleName,const String &importName,DWORD importAddress=0L,DWORD rewriteAddress=0L,ThunkType thunkType=StandardThunk); + virtual ~PureImport(); + PureImport &operator=(const PureImport &somePureImport); + WORD operator==(const PureImport &somePureImport)const; + WORD operator>(const PureImport &somePureImport)const; + WORD operator<(const PureImport &somePureImport)const; + operator String(void)const; + const String &moduleName(void)const; + void moduleName(const String &moduleName); + String importName(void)const; + void importName(const String &importName); + DWORD importAddress(void)const; + void importAddress(DWORD importAddress); + DWORD rewriteAddress(void)const; + void rewriteAddress(DWORD rewriteAddress); + ThunkType thunkType(void)const; + void thunkType(ThunkType thunkType); +private: + String mModuleName; + String mImportName; + DWORD mImportAddress; + DWORD mRewriteAddress; + ThunkType mThunkType; +}; + +inline +PureImport::PureImport(void) +: mImportAddress(0), mRewriteAddress(0), mThunkType(StandardThunk) +{ +} + +inline +PureImport::PureImport(const PureImport &somePureImport) +{ + *this=somePureImport; +} + +inline +PureImport::PureImport(const String &moduleName,const String &importName,DWORD importAddress,DWORD rewriteAddress,ThunkType thunkType) +: mModuleName(moduleName), mImportName(importName), mImportAddress(importAddress), + mRewriteAddress(rewriteAddress), mThunkType(thunkType) +{ +} + +inline +PureImport::~PureImport() +{ +} + +inline +PureImport &PureImport::operator=(const PureImport &somePureImport) +{ + moduleName(somePureImport.moduleName()); + importName(somePureImport.importName()); + importAddress(somePureImport.importAddress()); + rewriteAddress(somePureImport.rewriteAddress()); + thunkType(somePureImport.thunkType()); + return *this; +} + +inline +WORD PureImport::operator==(const PureImport &somePureImport)const +{ + return importAddress()==somePureImport.importAddress(); +} + +inline +WORD PureImport::operator>(const PureImport &somePureImport)const +{ + return (importAddress()>somePureImport.importAddress()); +} + +inline +WORD PureImport::operator<(const PureImport &somePureImport)const +{ + return (importAddress() +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _COMMON_WINNLS_HPP_ +#include +#endif + +class ImageResourceDirString : private IMAGE_RESOURCE_DIR_STRING_U +{ +public: + ImageResourceDirString(void); + virtual ~ImageResourceDirString(); + operator IMAGE_RESOURCE_DIR_STRING_U &(void); + String name(void)const; + void read(PureViewOfFile &pureView); +private: + WORD length(void)const; + ImageResourceDirString(const ImageResourceDirString &someImageResourceDirString); + ImageResourceDirString &operator=(const ImageResourceDirString &imageResourceDirString); + void zeroInit(void); + String mResourceName; +}; + +inline +ImageResourceDirString::ImageResourceDirString(void) +{ + zeroInit(); +} + +inline +ImageResourceDirString::ImageResourceDirString(const ImageResourceDirString &someImageResourceDirString) +{ + *this=someImageResourceDirString; +} + +inline +ImageResourceDirString::~ImageResourceDirString() +{ +} + +inline +ImageResourceDirString &ImageResourceDirString::operator=(const ImageResourceDirString &/*imageResourceDirString*/) +{ + return *this; +} + +inline +ImageResourceDirString::operator IMAGE_RESOURCE_DIR_STRING_U &(void) +{ + return *this; +} + +inline +WORD ImageResourceDirString::length(void)const +{ + return IMAGE_RESOURCE_DIR_STRING_U::Length; +} + +inline +String ImageResourceDirString::name(void)const +{ + return mResourceName; +} + +inline +void ImageResourceDirString::read(PureViewOfFile &pureView) +{ + WCHAR wszBuffer[String::MaxString]; + + pureView.push(); + ::memset(wszBuffer,0,sizeof(wszBuffer)); + mResourceName.reserve(String::MaxString); + pureView.read((char*)&((IMAGE_RESOURCE_DIR_STRING_U&)*this),sizeof(IMAGE_RESOURCE_DIR_STRING_U)); + wszBuffer[0]=IMAGE_RESOURCE_DIR_STRING_U::NameString[0]; + pureView.read((char*)(wszBuffer+1),length()*sizeof(WCHAR)); + ::WideCharToMultiByte(CP_ACP,0,wszBuffer,IMAGE_RESOURCE_DIR_STRING_U::Length,(LPSTR)mResourceName,String::MaxString,0,0); + pureView.pop(); +} + +inline +void ImageResourceDirString::zeroInit(void) +{ + IMAGE_RESOURCE_DIR_STRING_U::Length=0; + IMAGE_RESOURCE_DIR_STRING_U::NameString[0]=0; +} +#endif diff --git a/image/RESDRSTR.HPP b/image/RESDRSTR.HPP new file mode 100644 index 0000000..47515ed --- /dev/null +++ b/image/RESDRSTR.HPP @@ -0,0 +1,94 @@ +#ifndef _IMAGE_IMAGERESOURCEDIRSTRING_HPP_ +#define _IMAGE_IMAGERESOURCEDIRSTRING_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _COMMON_WINNLS_HPP_ +#include +#endif + +class ImageResourceDirString : private IMAGE_RESOURCE_DIR_STRING_U +{ +public: + ImageResourceDirString(void); + virtual ~ImageResourceDirString(); + operator IMAGE_RESOURCE_DIR_STRING_U &(void); + String name(void)const; + void read(PureViewOfFile &pureView); +private: + WORD length(void)const; + ImageResourceDirString(const ImageResourceDirString &someImageResourceDirString); + ImageResourceDirString &operator=(const ImageResourceDirString &imageResourceDirString); + void zeroInit(void); + String mResourceName; +}; + +inline +ImageResourceDirString::ImageResourceDirString(void) +{ + zeroInit(); +} + +inline +ImageResourceDirString::ImageResourceDirString(const ImageResourceDirString &someImageResourceDirString) +{ + *this=someImageResourceDirString; +} + +inline +ImageResourceDirString::~ImageResourceDirString() +{ +} + +inline +ImageResourceDirString &ImageResourceDirString::operator=(const ImageResourceDirString &/*imageResourceDirString*/) +{ + return *this; +} + +inline +ImageResourceDirString::operator IMAGE_RESOURCE_DIR_STRING_U &(void) +{ + return *this; +} + +inline +WORD ImageResourceDirString::length(void)const +{ + return IMAGE_RESOURCE_DIR_STRING_U::Length; +} + +inline +String ImageResourceDirString::name(void)const +{ + return mResourceName; +} + +inline +void ImageResourceDirString::read(PureViewOfFile &pureView) +{ + WCHAR wszBuffer[String::MaxString]; + + pureView.push(); + ::memset(wszBuffer,0,sizeof(wszBuffer)); + mResourceName.reserve(String::MaxString); + pureView.read((char*)&((IMAGE_RESOURCE_DIR_STRING_U&)*this),sizeof(IMAGE_RESOURCE_DIR_STRING_U)); + wszBuffer[0]=IMAGE_RESOURCE_DIR_STRING_U::NameString[0]; + pureView.read((char*)(wszBuffer+1),length()*sizeof(WCHAR)); + ::WideCharToMultiByte(CP_ACP,0,wszBuffer,IMAGE_RESOURCE_DIR_STRING_U::Length,(LPSTR)mResourceName,String::MaxString,0,0); + pureView.pop(); +} + +inline +void ImageResourceDirString::zeroInit(void) +{ + IMAGE_RESOURCE_DIR_STRING_U::Length=0; + IMAGE_RESOURCE_DIR_STRING_U::NameString[0]=0; +} +#endif diff --git a/image/SCRAPS.BAK b/image/SCRAPS.BAK new file mode 100644 index 0000000..e1a02e9 --- /dev/null +++ b/image/SCRAPS.BAK @@ -0,0 +1,365 @@ + void loadImageImportThunks(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,ImageExportDescriptors &imageExportDescriptors); + + +void ImageImportDescriptor::loadImageImportThunk(DWORD virtualAddress,DWORD deltaOffset,Block &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,ImageExportDescriptors &imageExportDescriptors) +{ + ImageSectionHeader imageSectionHeader; + + imageThunkImportOrdinals.remove(); + imageThunkImportNames.remove(); + pureView.push(); + pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + ImageThunkData imageThunkData; + imageThunkData< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,ImageExportDescriptors &imageExportDescriptors,PureViewOfFile &pureView) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + ImageSectionHeader importNamesSectionHeader; + ImageSectionHeader exportSectionHeader; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + imageExportDescriptors.size(0); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,ImageExportDescriptors &imageExportDescriptors,PureViewOfFile &pureView); + +// ::sprintf(entryPointString,"&0x%08lx",(DWORD)((PureVector&)*this)[functionIndex].imageExportEntryPoint()); + +void replaceImageImportOrdinals(Block &imageImportDescriptors,PureViewOfFile &pureView); +void PEHeader::replaceImageImportOrdinals(Block &imageImportDescriptors,PureViewOfFile &pureView) +{ + ImageExportDescriptors imageExportDescriptors; + ImageExportDescriptor imageExportDescriptor; + ImageSectionHeader exportSectionHeader; + DWORD itemCount; + DWORD importModuleCount; + DWORD exportIndex; + + if(!(importModuleCount=imageImportDescriptors.size()))return; + loadImageExportDescriptors(imageExportDescriptors,exportSectionHeader,pureView); + for(short importModuleIndex=0;importModuleIndex&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportName(exportNames[nameIndex]); +// ((PureVector&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportOrdinal(exportOrdinals[nameIndex]); + +WORD PEHeader::enclosingSectionHeader(DWORD virtualAddress,ImageSectionHeader &someImageSectionHeader,DWORD &deltaOffset) +{ + DWORD sectionCount(((PureVector&)*this).size()); + + for(short sectionIndex=0;sectionIndex&)*this)[sectionIndex]); + if(virtualAddress>=imageSectionHeader.virtualAddress()&& + virtualAddress &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader))return FALSE; + deltaOffset=importSectionHeader.virtualAddress()-importSectionHeader.pointerRawData(); + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView); + + + +void PEHeader::loadImageImportThunks(DWORD virtualAddress,DWORD deltaOffset,Block &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView) +{ + imageThunkImportOrdinals.remove(); + imageThunkImportNames.remove(); + pureView.push(); + pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + ImageThunkData imageThunkData; + imageThunkData< imageOriginalThunkImportOrdinals; +// Block imageOriginalThunkImportNames; +// if(imageImportDescriptor.originalFirstThunkRVA()) +// loadImageImportThunks(imageImportDescriptor.originalFirstThunkRVA(),deltaOffset, +// imageOriginalThunkImportOrdinals,imageOriginalThunkImportNames,pureView); + +// Block imageThunkImportOrdinals; +// Block imageThunkImportNames; +// if(imageImportDescriptor.firstThunkRVA()) +// loadImageImportThunks(imageImportDescriptor.firstThunkRVA(),deltaOffset, +// imageThunkImportOrdinals,imageThunkImportNames,pureView); + + + + pureView.push(); + if(imageImportDescriptor.originalFirstThunkRVA()) + { + pureView.seek(imageImportDescriptor.originalFirstThunkRVA()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + ImageThunkData imageThunkData; + imageThunkData< +//#endif +//#ifndef _COMMON_BLOCK_TPP_ +//#include +//#endif + + + +#if 0 +// Block > mResStrings; + + mResStrings.insert(&SmartPointer("???_0")); + mResStrings.insert(&SmartPointer("CURSOR")); + mResStrings.insert(&SmartPointer("BITMAP")); + mResStrings.insert(&SmartPointer("ICON")); + mResStrings.insert(&SmartPointer("MENU")); + mResStrings.insert(&SmartPointer("DIALOG")); + mResStrings.insert(&SmartPointer("STRING")); + mResStrings.insert(&SmartPointer("FONTDIR")); + mResStrings.insert(&SmartPointer("FONT")); + mResStrings.insert(&SmartPointer("ACCELERATORS")); + mResStrings.insert(&SmartPointer("RCDATA")); + mResStrings.insert(&SmartPointer("MESSAGETABLE")); + mResStrings.insert(&SmartPointer("GROUP_CURSOR")); + mResStrings.insert(&SmartPointer("???_13")); + mResStrings.insert(&SmartPointer("GROUP_ICON")); + mResStrings.insert(&SmartPointer("???_15")); + mResStrings.insert(&SmartPointer("VERSION")); + for(short itemIndex=0;itemIndex &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,ImageExportDescriptors &imageExportDescriptors) +{ + ImageSectionHeader imageSectionHeader; + + imageThunkImportOrdinals.remove(); + imageThunkImportNames.remove(); + pureView.push(); + pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + ImageThunkData imageThunkData; + imageThunkData< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,ImageExportDescriptors &imageExportDescriptors,PureViewOfFile &pureView) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + ImageSectionHeader importNamesSectionHeader; + ImageSectionHeader exportSectionHeader; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + imageExportDescriptors.size(0); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,ImageExportDescriptors &imageExportDescriptors,PureViewOfFile &pureView); + +// ::sprintf(entryPointString,"&0x%08lx",(DWORD)((PureVector&)*this)[functionIndex].imageExportEntryPoint()); + +void replaceImageImportOrdinals(Block &imageImportDescriptors,PureViewOfFile &pureView); +void PEHeader::replaceImageImportOrdinals(Block &imageImportDescriptors,PureViewOfFile &pureView) +{ + ImageExportDescriptors imageExportDescriptors; + ImageExportDescriptor imageExportDescriptor; + ImageSectionHeader exportSectionHeader; + DWORD itemCount; + DWORD importModuleCount; + DWORD exportIndex; + + if(!(importModuleCount=imageImportDescriptors.size()))return; + loadImageExportDescriptors(imageExportDescriptors,exportSectionHeader,pureView); + for(short importModuleIndex=0;importModuleIndex&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportName(exportNames[nameIndex]); +// ((PureVector&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportOrdinal(exportOrdinals[nameIndex]); + +WORD PEHeader::enclosingSectionHeader(DWORD virtualAddress,ImageSectionHeader &someImageSectionHeader,DWORD &deltaOffset) +{ + DWORD sectionCount(((PureVector&)*this).size()); + + for(short sectionIndex=0;sectionIndex&)*this)[sectionIndex]); + if(virtualAddress>=imageSectionHeader.virtualAddress()&& + virtualAddress &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView) +{ + DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); + ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); + ImageImportDescriptor imageImportDescriptor; + DWORD deltaOffset; + DWORD deltaNames; + + imageImportDescriptors.remove(); + if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader))return FALSE; + deltaOffset=importSectionHeader.virtualAddress()-importSectionHeader.pointerRawData(); + pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + String moduleName; + imageImportDescriptor< &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView); + + + +void PEHeader::loadImageImportThunks(DWORD virtualAddress,DWORD deltaOffset,Block &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView) +{ + imageThunkImportOrdinals.remove(); + imageThunkImportNames.remove(); + pureView.push(); + pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + ImageThunkData imageThunkData; + imageThunkData< imageOriginalThunkImportOrdinals; +// Block imageOriginalThunkImportNames; +// if(imageImportDescriptor.originalFirstThunkRVA()) +// loadImageImportThunks(imageImportDescriptor.originalFirstThunkRVA(),deltaOffset, +// imageOriginalThunkImportOrdinals,imageOriginalThunkImportNames,pureView); + +// Block imageThunkImportOrdinals; +// Block imageThunkImportNames; +// if(imageImportDescriptor.firstThunkRVA()) +// loadImageImportThunks(imageImportDescriptor.firstThunkRVA(),deltaOffset, +// imageThunkImportOrdinals,imageThunkImportNames,pureView); + + + + pureView.push(); + if(imageImportDescriptor.originalFirstThunkRVA()) + { + pureView.seek(imageImportDescriptor.originalFirstThunkRVA()-deltaOffset,PureViewOfFile::SeekSet); + while(TRUE) + { + ImageThunkData imageThunkData; + imageThunkData< +//#endif +//#ifndef _COMMON_BLOCK_TPP_ +//#include +//#endif + + + +#if 0 +// Block > mResStrings; + + mResStrings.insert(&SmartPointer("???_0")); + mResStrings.insert(&SmartPointer("CURSOR")); + mResStrings.insert(&SmartPointer("BITMAP")); + mResStrings.insert(&SmartPointer("ICON")); + mResStrings.insert(&SmartPointer("MENU")); + mResStrings.insert(&SmartPointer("DIALOG")); + mResStrings.insert(&SmartPointer("STRING")); + mResStrings.insert(&SmartPointer("FONTDIR")); + mResStrings.insert(&SmartPointer("FONT")); + mResStrings.insert(&SmartPointer("ACCELERATORS")); + mResStrings.insert(&SmartPointer("RCDATA")); + mResStrings.insert(&SmartPointer("MESSAGETABLE")); + mResStrings.insert(&SmartPointer("GROUP_CURSOR")); + mResStrings.insert(&SmartPointer("???_13")); + mResStrings.insert(&SmartPointer("GROUP_ICON")); + mResStrings.insert(&SmartPointer("???_15")); + mResStrings.insert(&SmartPointer("VERSION")); + for(short itemIndex=0;itemIndex&)*this)[sectionIndex].name()==String(".reloc")){msImage=TRUE;break;} + return imageRelocations.size()?TRUE:FALSE; +} diff --git a/image/SCTNHDR.HPP b/image/SCTNHDR.HPP new file mode 100644 index 0000000..9f40ec3 --- /dev/null +++ b/image/SCTNHDR.HPP @@ -0,0 +1,211 @@ +#ifndef _IMAGE_IMAGESECTIONHEADER_HPP_ +#define _IMAGE_IMAGESECTIONHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif + +class ImageSectionHeader : private _IMAGE_SECTION_HEADER +{ +public: + ImageSectionHeader(void); + ImageSectionHeader(const ImageSectionHeader &someImageSectionHeader); + ~ImageSectionHeader(); + ImageSectionHeader &operator=(const ImageSectionHeader &someImageSectionHeader); + WORD operator==(const ImageSectionHeader &someImageSectionHeader); + WORD operator<<(PureViewOfFile &pureView); + String name(void)const; + DWORD physicalAddress(void)const; + void physicalAddress(DWORD physicalAddress); + DWORD virtualSize(void)const; + void virtualSize(DWORD virtualSize); + DWORD virtualAddress(void)const; + void virtualAddress(DWORD virtualAddress); + DWORD sizeofRawData(void)const; + void sizeofRawData(DWORD sizeofRawData); + DWORD pointerRawData(void)const; + void pointerRawData(WORD pointerRawData); + DWORD pointerRelocations(void)const; + void pointerRelocations(DWORD pointerRelocations); + DWORD pointerLineNumbers(void)const; + void pointerLineNumbers(DWORD pointerLineNumbers); + WORD relocationsCount(void)const; + void relocationsCount(WORD relocationsCount); + WORD lineNumbersCount(void)const; + void lineNumbersCount(WORD lineNumbersCount); + DWORD characteristics(void)const; + void characteristics(DWORD characteristics); +private: +}; + +inline +ImageSectionHeader::ImageSectionHeader(void) +{ + ::memset((char*)&((_IMAGE_SECTION_HEADER&)*this),0,sizeof(_IMAGE_SECTION_HEADER)); +} + +inline +ImageSectionHeader::ImageSectionHeader(const ImageSectionHeader &someImageSectionHeader) +{ + *this=someImageSectionHeader; +} + +inline +ImageSectionHeader::~ImageSectionHeader() +{ +} + +inline +ImageSectionHeader &ImageSectionHeader::operator=(const ImageSectionHeader &someImageSectionHeader) +{ + ::memcpy((char*)&((_IMAGE_SECTION_HEADER&)*this),(char*)&((_IMAGE_SECTION_HEADER&)someImageSectionHeader),sizeof(_IMAGE_SECTION_HEADER)); + return *this; +} + +inline +WORD ImageSectionHeader::operator==(const ImageSectionHeader &someImageSectionHeader) +{ + return ::memcmp((char*)&((_IMAGE_SECTION_HEADER&)*this),(char*)&((_IMAGE_SECTION_HEADER&)someImageSectionHeader),sizeof(_IMAGE_SECTION_HEADER)); +} + +inline +WORD ImageSectionHeader::operator<<(PureViewOfFile &pureView) +{ + return sizeof(_IMAGE_SECTION_HEADER)==pureView.read((char*)&((_IMAGE_SECTION_HEADER&)*this),sizeof(_IMAGE_SECTION_HEADER)); +} + +inline +String ImageSectionHeader::name(void)const +{ + String sectionName; + + sectionName.reserve(sizeof(_IMAGE_SECTION_HEADER::Name)+1); + ::memcpy(sectionName,_IMAGE_SECTION_HEADER::Name,sizeof(_IMAGE_SECTION_HEADER::Name)); + return sectionName; +} + +inline +DWORD ImageSectionHeader::physicalAddress(void)const +{ + return _IMAGE_SECTION_HEADER::Misc.PhysicalAddress; +} + +inline +void ImageSectionHeader::physicalAddress(DWORD physicalAddress) +{ + _IMAGE_SECTION_HEADER::Misc.PhysicalAddress=physicalAddress; +} + +inline +DWORD ImageSectionHeader::virtualSize(void)const +{ + return _IMAGE_SECTION_HEADER::Misc.VirtualSize; +} + +inline +void ImageSectionHeader::virtualSize(DWORD virtualSize) +{ + _IMAGE_SECTION_HEADER::Misc.VirtualSize=virtualSize; +} + +inline +DWORD ImageSectionHeader::virtualAddress(void)const +{ + return _IMAGE_SECTION_HEADER::VirtualAddress; +} + +inline +void ImageSectionHeader::virtualAddress(DWORD virtualAddress) +{ + _IMAGE_SECTION_HEADER::VirtualAddress=virtualAddress; +} + +inline +DWORD ImageSectionHeader::sizeofRawData(void)const +{ + return _IMAGE_SECTION_HEADER::SizeOfRawData; +} + +inline +void ImageSectionHeader::sizeofRawData(DWORD sizeofRawData) +{ + _IMAGE_SECTION_HEADER::SizeOfRawData=sizeofRawData; +} + +inline +DWORD ImageSectionHeader::pointerRawData(void)const +{ + return _IMAGE_SECTION_HEADER::PointerToRawData; +} + +inline +void ImageSectionHeader::pointerRawData(WORD pointerRawData) +{ + _IMAGE_SECTION_HEADER::PointerToRawData=pointerRawData; +} + +inline +DWORD ImageSectionHeader::pointerRelocations(void)const +{ + return _IMAGE_SECTION_HEADER::PointerToRelocations; +} + +inline +void ImageSectionHeader::pointerRelocations(DWORD pointerRelocations) +{ + _IMAGE_SECTION_HEADER::PointerToRelocations=pointerRelocations; +} + +inline +DWORD ImageSectionHeader::pointerLineNumbers(void)const +{ + return _IMAGE_SECTION_HEADER::PointerToLinenumbers; +} + +inline +void ImageSectionHeader::pointerLineNumbers(DWORD pointerLineNumbers) +{ + _IMAGE_SECTION_HEADER::PointerToLinenumbers=pointerLineNumbers; +} + +inline +WORD ImageSectionHeader::relocationsCount(void)const +{ + return _IMAGE_SECTION_HEADER::NumberOfRelocations; +} + +inline +void ImageSectionHeader::relocationsCount(WORD relocationsCount) +{ + _IMAGE_SECTION_HEADER::NumberOfRelocations=relocationsCount; +} + +inline +WORD ImageSectionHeader::lineNumbersCount(void)const +{ + return _IMAGE_SECTION_HEADER::NumberOfLinenumbers; +} + +inline +void ImageSectionHeader::lineNumbersCount(WORD lineNumbersCount) +{ + _IMAGE_SECTION_HEADER::NumberOfLinenumbers=lineNumbersCount; +} + +inline +DWORD ImageSectionHeader::characteristics(void)const +{ + return _IMAGE_SECTION_HEADER::Characteristics; +} + +inline +void ImageSectionHeader::characteristics(DWORD characteristics) +{ + _IMAGE_SECTION_HEADER::Characteristics=characteristics; +} +#endif diff --git a/image/SCTNHDRS.CPP b/image/SCTNHDRS.CPP new file mode 100644 index 0000000..7ffd1f1 --- /dev/null +++ b/image/SCTNHDRS.CPP @@ -0,0 +1,23 @@ +#include + +WORD ImageSectionHeaders::enclosingSectionHeader(DWORD virtualAddress,ImageSectionHeader &someImageSectionHeader,DWORD &deltaOffset) +{ + DWORD sectionCount(((Array&)*this).size()); + + deltaOffset=0; + for(short sectionIndex=0;sectionIndex&)*this)[sectionIndex]; + if(virtualAddress>=imageSectionHeader.virtualAddress()&& + virtualAddress +#endif +#ifndef _IMAGE_IMAGESECTIONHEADER_HPP_ +#include +#endif + +class ImageSectionHeaders : public Array +{ +public: + ImageSectionHeaders(void); + ImageSectionHeaders(const ImageSectionHeaders &someImageSectionHeaders); + virtual ~ImageSectionHeaders(); + ImageSectionHeaders &operator=(const ImageSectionHeaders &someImageSectionHeaders); + WORD operator==(const ImageSectionHeaders &someImageSectionHeaders)const; + WORD enclosingSectionHeader(DWORD virtualAddress,ImageSectionHeader &someImageSectionHeader,DWORD &deltaOffset); + WORD isMemImage(void)const; + void isMemImage(WORD isMemImage); +private: + WORD mIsMemImage; +}; + +inline +ImageSectionHeaders::ImageSectionHeaders(void) +: mIsMemImage(FALSE) +{ +} + +inline +ImageSectionHeaders::ImageSectionHeaders(const ImageSectionHeaders &someImageSectionHeaders) +{ + *this=someImageSectionHeaders; +} + +inline +ImageSectionHeaders::~ImageSectionHeaders() +{ +} + +inline +ImageSectionHeaders &ImageSectionHeaders::operator=(const ImageSectionHeaders &someImageSectionHeaders) +{ + (Array&)*this=(Array&)someImageSectionHeaders; + isMemImage(someImageSectionHeaders.isMemImage()); + return *this; +} + +inline +WORD ImageSectionHeaders::operator==(const ImageSectionHeaders &someImageSectionHeaders)const +{ + return (Array&)*this==(Array&)someImageSectionHeaders; +} + +inline +WORD ImageSectionHeaders::isMemImage(void)const +{ + return mIsMemImage; +} + +inline +void ImageSectionHeaders::isMemImage(WORD isMemImage) +{ + mIsMemImage=isMemImage; +} +#endif diff --git a/image/STDTMPL.CPP b/image/STDTMPL.CPP new file mode 100644 index 0000000..c57e486 --- /dev/null +++ b/image/STDTMPL.CPP @@ -0,0 +1,32 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef PureVector a; +typedef PureVector b; +typedef Block c; +typedef Block d; +typedef Block e; +typedef Block f; +typedef QuickSort g; +typedef Block h; +#endif \ No newline at end of file diff --git a/image/STRPTR.HPP b/image/STRPTR.HPP new file mode 100644 index 0000000..ee9521b --- /dev/null +++ b/image/STRPTR.HPP @@ -0,0 +1,37 @@ +#ifndef _IMAGE_STRPOINTER_HPP_ +#define _IMAGE_STRPOINTER_HPP_ + +class StrPointer +{ +public: + StrPointer(void); + StrPointer(char *ptrString); + virtual ~StrPointer(); + operator char *(void); +private: + char *mpString; +}; + +inline +StrPointer::StrPointer(void) +: mpString(0) +{ +} + +inline +StrPointer::StrPointer(char *ptrString) +: mpString(ptrString) +{ +} + +inline +StrPointer::~StrPointer() +{ +} + +inline +StrPointer::operator char *(void) +{ + return mpString; +} +#endif \ No newline at end of file diff --git a/image/TDCONFIG.TDW b/image/TDCONFIG.TDW new file mode 100644 index 0000000..40ac47c Binary files /dev/null and b/image/TDCONFIG.TDW differ diff --git a/image/TDW.TRW b/image/TDW.TRW new file mode 100644 index 0000000..e3273ab Binary files /dev/null and b/image/TDW.TRW differ diff --git a/image/THNKDATA.HPP b/image/THNKDATA.HPP new file mode 100644 index 0000000..9362c4b --- /dev/null +++ b/image/THNKDATA.HPP @@ -0,0 +1,151 @@ +#ifndef _ENGINEER_IMAGETHUNKDATA_HPP_ +#define _ENGINEER_IMAGETHUNKDATA_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class ImageThunkData : private IMAGE_THUNK_DATA +{ +public: + ImageThunkData(void); + ImageThunkData(const ImageThunkData &someImageThunkData); + virtual ~ImageThunkData(); + ImageThunkData &operator=(const ImageThunkData &someImageThunkData); + WORD operator==(const ImageThunkData &someImageThunkData)const; + ImageThunkData &operator<<(PureViewOfFile &pureView); + operator IMAGE_THUNK_DATA&(void); + DWORD forwarderStringRVA(void)const; + void forwarderStringRVA(DWORD forwarderStringRVA); + DWORD functionRVA(void)const; + void functionRVA(DWORD functionRVA); + DWORD ordinal(void)const; + void ordinal(DWORD ordinal); + DWORD addressOfDataRVA(void)const; + void addressOfDataRVA(DWORD addressOfDataRVA); + WORD isOkay(void)const; + WORD isOrdinalImport(void)const; +private: + void setZero(void); +}; + +inline +ImageThunkData::ImageThunkData(void) +{ + setZero(); +} + +inline +ImageThunkData::ImageThunkData(const ImageThunkData &someImageThunkData) +{ + *this=someImageThunkData; +} + +inline +ImageThunkData::~ImageThunkData() +{ +} + +inline +ImageThunkData::operator IMAGE_THUNK_DATA&(void) +{ + return *this; +} + +inline +ImageThunkData &ImageThunkData::operator=(const ImageThunkData &someImageThunkData) +{ + forwarderStringRVA(someImageThunkData.forwarderStringRVA()); + functionRVA(someImageThunkData.functionRVA()); + ordinal(someImageThunkData.ordinal()); + addressOfDataRVA(someImageThunkData.addressOfDataRVA()); + return *this; +} + +inline +WORD ImageThunkData::operator==(const ImageThunkData &someImageThunkData)const +{ + return (forwarderStringRVA()==someImageThunkData.forwarderStringRVA()&& + functionRVA()==someImageThunkData.functionRVA()&& + ordinal()==someImageThunkData.ordinal()&& + addressOfDataRVA()==someImageThunkData.addressOfDataRVA()); +} + +inline +ImageThunkData &ImageThunkData::operator<<(PureViewOfFile &pureView) +{ + pureView.read((char*)&((IMAGE_THUNK_DATA&)*this),sizeof(IMAGE_THUNK_DATA)); + return *this; +} + +inline +DWORD ImageThunkData::forwarderStringRVA(void)const +{ + return (DWORD)IMAGE_THUNK_DATA::u1.ForwarderString; +} + +inline +void ImageThunkData::forwarderStringRVA(DWORD forwarderStringRVA) +{ + IMAGE_THUNK_DATA::u1.ForwarderString=(PBYTE)forwarderStringRVA; +} + +inline +DWORD ImageThunkData::functionRVA(void)const +{ + return (DWORD)IMAGE_THUNK_DATA::u1.Function; +} + +inline +void ImageThunkData::functionRVA(DWORD functionRVA) +{ + IMAGE_THUNK_DATA::u1.Function=(PDWORD)functionRVA; +} + +inline +DWORD ImageThunkData::ordinal(void)const +{ + return IMAGE_ORDINAL(IMAGE_THUNK_DATA::u1.Ordinal); +} + +inline +void ImageThunkData::ordinal(DWORD ordinal) +{ + IMAGE_THUNK_DATA::u1.Ordinal=ordinal; +} + +inline +DWORD ImageThunkData::addressOfDataRVA(void)const +{ + return (DWORD)IMAGE_THUNK_DATA::u1.AddressOfData; +} + +inline +void ImageThunkData::addressOfDataRVA(DWORD addressOfDataRVA) +{ + IMAGE_THUNK_DATA::u1.AddressOfData=(PIMAGE_IMPORT_BY_NAME)addressOfDataRVA; +} + +inline +void ImageThunkData::setZero(void) +{ + ::memset(&((IMAGE_THUNK_DATA&)*this),0,sizeof(IMAGE_THUNK_DATA)); +} + +inline +WORD ImageThunkData::isOkay(void)const +{ + return (functionRVA()?TRUE:FALSE); +} + +inline +WORD ImageThunkData::isOrdinalImport(void)const +{ + return (IMAGE_THUNK_DATA::u1.Ordinal&IMAGE_ORDINAL_FLAG)==IMAGE_ORDINAL_FLAG; +} +#endif diff --git a/image/THNKNAME.HPP b/image/THNKNAME.HPP new file mode 100644 index 0000000..85a4586 --- /dev/null +++ b/image/THNKNAME.HPP @@ -0,0 +1,174 @@ +#ifndef _IMAGE_IMAGETHUNKNAME_HPP_ +#define _IMAGE_IMAGETHUNKNAME_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class ImageThunkNameExpand +{ +public: + ImageThunkNameExpand(void); + ImageThunkNameExpand(const ImageThunkNameExpand &someImageThunkNameExpand); + ImageThunkNameExpand(const String &importName); + ~ImageThunkNameExpand(); + ImageThunkNameExpand &operator=(const ImageThunkNameExpand &someImageThunkNameExpand); + WORD operator==(const ImageThunkNameExpand &someImageThunkNameExpand)const; + String importName(void)const; + void importName(const String &importName); +private: + String mImportName; +}; + +inline +ImageThunkNameExpand::ImageThunkNameExpand(void) +{ +} + +inline +ImageThunkNameExpand::ImageThunkNameExpand(const ImageThunkNameExpand &someImageThunkNameExpand) +{ + *this=someImageThunkNameExpand; +} + +inline +ImageThunkNameExpand::ImageThunkNameExpand(const String &importName) +: mImportName(importName) +{ +} + +inline +ImageThunkNameExpand::~ImageThunkNameExpand() +{ +} + +inline +ImageThunkNameExpand &ImageThunkNameExpand::operator=(const ImageThunkNameExpand &someImageThunkNameExpand) +{ + importName(someImageThunkNameExpand.importName()); + return *this; +} + +inline +WORD ImageThunkNameExpand::operator==(const ImageThunkNameExpand &someImageThunkNameExpand)const +{ + return importName()==someImageThunkNameExpand.importName(); +} + +inline +String ImageThunkNameExpand::importName(void)const +{ + return mImportName; +} + +inline +void ImageThunkNameExpand::importName(const String &importName) +{ + mImportName=importName; +} + +// ****************************************** + +class ImageThunkName : public ImageThunkNameExpand, private IMAGE_IMPORT_BY_NAME +{ +public: + ImageThunkName(void); + ImageThunkName(const ImageThunkName &someImageThunkName); + ~ImageThunkName(); + ImageThunkName &operator=(const ImageThunkName &someImageThunName); + WORD operator==(const ImageThunkName &someImageThunkName)const; + ImageThunkName &operator<<(PureViewOfFile &pureView); + operator IMAGE_IMPORT_BY_NAME &(void); + WORD hint(void)const; + void hint(WORD hint); + BYTE name(void)const; + void name(BYTE name); +private: + void setZero(void); +}; + +inline +ImageThunkName::ImageThunkName(void) +{ + setZero(); +} + +inline +ImageThunkName::ImageThunkName(const ImageThunkName &someImageThunkName) +{ + *this=someImageThunkName; +} + +inline +ImageThunkName::~ImageThunkName() +{ +} + +inline +ImageThunkName &ImageThunkName::operator=(const ImageThunkName &someImageThunkName) +{ + hint(someImageThunkName.hint()); + name(someImageThunkName.name()); + (ImageThunkNameExpand&)*this=(ImageThunkNameExpand&)someImageThunkName; + return *this; +} + +inline +WORD ImageThunkName::operator==(const ImageThunkName &someImageThunkName)const +{ + return (hint()==someImageThunkName.hint()&& + name()==someImageThunkName.name()); +} + +inline +ImageThunkName &ImageThunkName::operator<<(PureViewOfFile &pureView) +{ + String moduleImportName; + pureView.read(IMAGE_IMPORT_BY_NAME::Hint); + pureView.getLine(moduleImportName); + importName(moduleImportName); + return *this; +} + +inline +ImageThunkName::operator IMAGE_IMPORT_BY_NAME &(void) +{ + return *this; +} + +inline +WORD ImageThunkName::hint(void)const +{ + return IMAGE_IMPORT_BY_NAME::Hint; +} + +inline +void ImageThunkName::hint(WORD hint) +{ + IMAGE_IMPORT_BY_NAME::Hint=hint; +} + +inline +BYTE ImageThunkName::name(void)const +{ + return IMAGE_IMPORT_BY_NAME::Name[0]; +} + +inline +void ImageThunkName::name(BYTE name) +{ + IMAGE_IMPORT_BY_NAME::Name[0]=name; +} + +inline +void ImageThunkName::setZero(void) +{ + IMAGE_IMPORT_BY_NAME::Hint=0; + IMAGE_IMPORT_BY_NAME::Name[0]=0; +} +#endif diff --git a/image/VXDHDR.CPP b/image/VXDHDR.CPP new file mode 100644 index 0000000..ef79550 --- /dev/null +++ b/image/VXDHDR.CPP @@ -0,0 +1,111 @@ +#include + +VxDHeader::~VxDHeader() +{ +} + +VxDHeader &VxDHeader::operator=(const VxDHeader &someVxDHeader) +{ + ::memcpy((char*)&((_IMAGE_VXD_HEADER&)*this),(char*)&((_IMAGE_VXD_HEADER&)someVxDHeader),sizeof(_IMAGE_VXD_HEADER)); + (DOSHeader&)*this=(DOSHeader&)someVxDHeader; + return *this; +} + +WORD VxDHeader::operator==(const VxDHeader &someVxDHeader) +{ + return ((DOSHeader&)*this==(DOSHeader&)someVxDHeader&& + magic()==someVxDHeader.magic()&& + byteOrdering()==someVxDHeader.byteOrdering()&& + wordOrdering()==someVxDHeader.wordOrdering()&& + exeFormatLevel()==someVxDHeader.exeFormatLevel()&& + cpuType()==someVxDHeader.cpuType()&& + osType()==someVxDHeader.osType()&& + moduleVersion()==someVxDHeader.moduleVersion()&& + moduleFlags()==someVxDHeader.moduleFlags()&& + moduleNumPages()==someVxDHeader.moduleNumPages()&& + startObjectNumberForIP()==someVxDHeader.startObjectNumberForIP()&& + eip()==someVxDHeader.eip()&& + startObjectNumberForSP()==someVxDHeader.startObjectNumberForSP()&& + esp()==someVxDHeader.esp()&& + vxdPageSize()==someVxDHeader.vxdPageSize()&& + vxdLastPageSize()==someVxDHeader.vxdLastPageSize()&& + fixupSectionSize()==someVxDHeader.fixupSectionSize()&& + fixupSectionChecksum()==someVxDHeader.fixupSectionChecksum()&& + loaderSectionSize()==someVxDHeader.loaderSectionSize()&& + loaderSectionChecksum()==someVxDHeader.loaderSectionChecksum()&& + objectTableOffset()==someVxDHeader.objectTableOffset()&& + objectCount()==someVxDHeader.objectCount()&& + objectPageMapOffset()==someVxDHeader.objectPageMapOffset()&& + objectIteratedDataMapOffset()==someVxDHeader.objectIteratedDataMapOffset()&& + resourceTableOffset()==someVxDHeader.resourceTableOffset()&& + resourceEntryCount()==someVxDHeader.resourceEntryCount()&& + residentNameTableOffset()==someVxDHeader.residentNameTableOffset()&& + entryTableOffset()==someVxDHeader.entryTableOffset()&& + moduleDirectiveTableOffset()==someVxDHeader.moduleDirectiveTableOffset()&& + moduleDirectivesCount()==someVxDHeader.moduleDirectivesCount()&& + fixupPageTableOffset()==someVxDHeader.fixupPageTableOffset()&& + fixupRecordTableOffset()==someVxDHeader.fixupRecordTableOffset()&& + importModuleNameTableOffset()==someVxDHeader.importModuleNameTableOffset()&& + importModuleNameTableCount()==someVxDHeader.importModuleNameTableCount()&& + importProcedureNameTableOffset()==someVxDHeader.importProcedureNameTableOffset()&& + perPageChecksumTableOffset()==someVxDHeader.perPageChecksumTableOffset()&& + enumeratedDataPagesOffset()==someVxDHeader.enumeratedDataPagesOffset()&& + preloadPagesCount()==someVxDHeader.preloadPagesCount()&& + nonResidentNameTableOffset()==someVxDHeader.nonResidentNameTableOffset()&& + nonResidentNameTableChecksum()==someVxDHeader.nonResidentNameTableChecksum()&& + automaticDataObjectNumber()==someVxDHeader.automaticDataObjectNumber()&& + debugInfoOffset()==someVxDHeader.debugInfoOffset()&& + debugInfoLengthBytes()==someVxDHeader.debugInfoLengthBytes()&& + preloadSectionInstancePageCount()==someVxDHeader.preloadSectionInstancePageCount()&& + demandLoadSectionInstancePageCount()==someVxDHeader.demandLoadSectionInstancePageCount()&& + sizeHeap()==someVxDHeader.sizeHeap()&& + windowsResourceOffset()==someVxDHeader.windowsResourceOffset()&& + windowsResourceLength()==someVxDHeader.windowsResourceLength()&& + vxdID()==someVxDHeader.vxdID()&& + ddkVersion()==someVxDHeader.ddkVersion()); +} + +WORD VxDHeader::operator<<(PureViewOfFile &pureView) +{ + VxDObjects::remove(); + VxDNames::remove(); + pureView.rewind(); + if(!(((DOSHeader&)*this)< +#endif +#ifndef _IMAGE_DOSHEADER_HPP_ +#include +#endif +#ifndef _IMAGE_VXDOBJECTS_HPP_ +#include +#endif +#ifndef _IMAGE_VXDNAMES_HPP_ +#include +#endif + +class PureViewOfFile; + +class VxDHeader: private _IMAGE_VXD_HEADER, public DOSHeader, public VxDObjects, public VxDNames +{ +public: + enum {LESignature=IMAGE_VXD_SIGNATURE}; + VxDHeader(void); + VxDHeader(const VxDHeader &someVxDHeader); + virtual ~VxDHeader(); + VxDHeader &operator=(const VxDHeader &someVxDHeader); + WORD operator==(const VxDHeader &someVxDHeader); + WORD operator<<(PureViewOfFile &pureView); + WORD magic(void)const; + BYTE byteOrdering(void)const; + BYTE wordOrdering(void)const; + DWORD exeFormatLevel(void)const; + WORD cpuType(void)const; + WORD osType(void)const; + DWORD moduleVersion(void)const; + DWORD moduleFlags(void)const; + DWORD moduleNumPages(void)const; + DWORD startObjectNumberForIP(void)const; + DWORD eip(void)const; + DWORD startObjectNumberForSP(void)const; + DWORD esp(void)const; + DWORD vxdPageSize(void)const; + DWORD vxdLastPageSize(void)const; + DWORD fixupSectionSize(void)const; + DWORD fixupSectionChecksum(void)const; + DWORD loaderSectionSize(void)const; + DWORD loaderSectionChecksum(void)const; + DWORD objectTableOffset(void)const; + DWORD objectCount(void)const; + DWORD objectPageMapOffset(void)const; + DWORD objectIteratedDataMapOffset(void)const; + DWORD resourceTableOffset(void)const; + DWORD resourceEntryCount(void)const; + DWORD residentNameTableOffset(void)const; + DWORD entryTableOffset(void)const; + DWORD moduleDirectiveTableOffset(void)const; + DWORD moduleDirectivesCount(void)const; + DWORD fixupPageTableOffset(void)const; + DWORD fixupRecordTableOffset(void)const; + DWORD importModuleNameTableOffset(void)const; + DWORD importModuleNameTableCount(void)const; + DWORD importProcedureNameTableOffset(void)const; + DWORD perPageChecksumTableOffset(void)const; + DWORD enumeratedDataPagesOffset(void)const; + DWORD preloadPagesCount(void)const; + DWORD nonResidentNameTableOffset(void)const; + DWORD nonResidentNameTableChecksum(void)const; + DWORD automaticDataObjectNumber(void)const; + DWORD debugInfoOffset(void)const; + DWORD debugInfoLengthBytes(void)const; + DWORD preloadSectionInstancePageCount(void)const; + DWORD demandLoadSectionInstancePageCount(void)const; + DWORD sizeHeap(void)const; + DWORD windowsResourceOffset(void)const; + DWORD windowsResourceLength(void)const; + WORD vxdID(void)const; + WORD ddkVersion(void)const; + WORD isOkay(void)const; +private: + void getNames(PureViewOfFile &pureView); + void getObjects(PureViewOfFile &pureView); +}; + +inline +VxDHeader::VxDHeader(void) +{ + ::memset((char*)&((_IMAGE_VXD_HEADER&)*this),0,sizeof(_IMAGE_VXD_HEADER)); +} + +inline +VxDHeader::VxDHeader(const VxDHeader &someVxDHeader) +{ + *this=someVxDHeader; +} + +inline +WORD VxDHeader::magic(void)const +{ + return _IMAGE_VXD_HEADER::e32_magic; +} + +inline +BYTE VxDHeader::byteOrdering(void)const +{ + return _IMAGE_VXD_HEADER::e32_border; +} + +inline +BYTE VxDHeader::wordOrdering(void)const +{ + return _IMAGE_VXD_HEADER::e32_worder; +} + +inline +DWORD VxDHeader::exeFormatLevel(void)const +{ + return _IMAGE_VXD_HEADER::e32_level; +} + +inline +WORD VxDHeader::cpuType(void)const +{ + return _IMAGE_VXD_HEADER::e32_cpu; +} + +inline +WORD VxDHeader::osType(void)const +{ + return _IMAGE_VXD_HEADER::e32_os; +} + +inline +DWORD VxDHeader::moduleVersion(void)const +{ + return _IMAGE_VXD_HEADER::e32_ver; +} + +inline +DWORD VxDHeader::moduleFlags(void)const +{ + return _IMAGE_VXD_HEADER::e32_mflags; +} + +inline +DWORD VxDHeader::moduleNumPages(void)const +{ + return _IMAGE_VXD_HEADER::e32_mpages; +} + +inline +DWORD VxDHeader::startObjectNumberForIP(void)const +{ + return _IMAGE_VXD_HEADER::e32_startobj; +} + +inline +DWORD VxDHeader::eip(void)const +{ + return _IMAGE_VXD_HEADER::e32_eip; +} + +inline +DWORD VxDHeader::startObjectNumberForSP(void)const +{ + return _IMAGE_VXD_HEADER::e32_stackobj; +} + +inline +DWORD VxDHeader::esp(void)const +{ + return _IMAGE_VXD_HEADER::e32_esp; +} + +inline +DWORD VxDHeader::vxdPageSize(void)const +{ + return _IMAGE_VXD_HEADER::e32_pagesize; +} + +inline +DWORD VxDHeader::vxdLastPageSize(void)const +{ + return _IMAGE_VXD_HEADER::e32_lastpagesize; +} + +inline +DWORD VxDHeader::fixupSectionSize(void)const +{ + return _IMAGE_VXD_HEADER::e32_fixupsize; +} + +inline +DWORD VxDHeader::fixupSectionChecksum(void)const +{ + return _IMAGE_VXD_HEADER::e32_fixupsum; +} + +inline +DWORD VxDHeader::loaderSectionSize(void)const +{ + return _IMAGE_VXD_HEADER::e32_ldrsize; +} + +inline +DWORD VxDHeader::loaderSectionChecksum(void)const +{ + return _IMAGE_VXD_HEADER::e32_ldrsum; +} + +inline +DWORD VxDHeader::objectTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_objtab; +} + +inline +DWORD VxDHeader::objectCount(void)const +{ + return _IMAGE_VXD_HEADER::e32_objcnt; +} + +inline +DWORD VxDHeader::objectPageMapOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_objmap; +} + +inline +DWORD VxDHeader::objectIteratedDataMapOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_itermap; +} + +inline +DWORD VxDHeader::resourceTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_rsrctab; +} + +inline +DWORD VxDHeader::resourceEntryCount(void)const +{ + return _IMAGE_VXD_HEADER::e32_rsrccnt; +} + +inline +DWORD VxDHeader::residentNameTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_restab; +} + +inline +DWORD VxDHeader::entryTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_enttab; +} + +inline +DWORD VxDHeader::moduleDirectiveTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_dirtab; +} + +inline +DWORD VxDHeader::moduleDirectivesCount(void)const +{ + return _IMAGE_VXD_HEADER::e32_dircnt; +} + +inline +DWORD VxDHeader::fixupPageTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_fpagetab; +} + +inline +DWORD VxDHeader::fixupRecordTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_frectab; +} + +inline +DWORD VxDHeader::importModuleNameTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_impmod; +} + +inline +DWORD VxDHeader::importModuleNameTableCount(void)const +{ + return _IMAGE_VXD_HEADER::e32_impmodcnt; +} + +inline +DWORD VxDHeader::importProcedureNameTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_impproc; +} + +inline +DWORD VxDHeader::perPageChecksumTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_pagesum; +} + +inline +DWORD VxDHeader::enumeratedDataPagesOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_datapage; +} + +inline +DWORD VxDHeader::preloadPagesCount(void)const +{ + return _IMAGE_VXD_HEADER::e32_preload; +} + +inline +DWORD VxDHeader::nonResidentNameTableOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_nrestab; +} + +inline +DWORD VxDHeader::nonResidentNameTableChecksum(void)const +{ + return _IMAGE_VXD_HEADER::e32_cbnrestab; +} + +inline +DWORD VxDHeader::automaticDataObjectNumber(void)const +{ + return _IMAGE_VXD_HEADER::e32_nressum; +} + +inline +DWORD VxDHeader::debugInfoOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_autodata; +} + +inline +DWORD VxDHeader::debugInfoLengthBytes(void)const +{ + return _IMAGE_VXD_HEADER::e32_debuginfo; +} + +inline +DWORD VxDHeader::preloadSectionInstancePageCount(void)const +{ + return _IMAGE_VXD_HEADER::e32_instpreload; +} + +inline +DWORD VxDHeader::demandLoadSectionInstancePageCount(void)const +{ + return _IMAGE_VXD_HEADER::e32_instdemand; +} + +inline +DWORD VxDHeader::sizeHeap(void)const +{ + return _IMAGE_VXD_HEADER::e32_heapsize; +} + +inline +DWORD VxDHeader::windowsResourceOffset(void)const +{ + return _IMAGE_VXD_HEADER::e32_winresoff; +} + +inline +DWORD VxDHeader::windowsResourceLength(void)const +{ + return _IMAGE_VXD_HEADER::e32_winreslen; +} + +inline +WORD VxDHeader::vxdID(void)const +{ + return _IMAGE_VXD_HEADER::e32_devid; +} + +inline +WORD VxDHeader::ddkVersion(void)const +{ + return _IMAGE_VXD_HEADER::e32_ddkver; +} + +inline +WORD VxDHeader::isOkay(void)const +{ + return LESignature==magic(); +} +#endif diff --git a/image/VXDNAME.CPP b/image/VXDNAME.CPP new file mode 100644 index 0000000..d2369de --- /dev/null +++ b/image/VXDNAME.CPP @@ -0,0 +1,42 @@ +#include + +VxDName::VxDName(void) +{ +} + +VxDName::VxDName(const VxDName &someVxDName) +{ + *this=someVxDName; +} + +VxDName::VxDName(const String &entryName,WORD entryOrdinal) +: mEntryName(entryName), mEntryOrdinal(entryOrdinal) +{ +} + +VxDName &VxDName::operator=(const VxDName &someVxDName) +{ + entryName(someVxDName.entryName()); + entryOrdinal(someVxDName.entryOrdinal()); + return *this; +} + +const String &VxDName::entryName(void)const +{ + return mEntryName; +} + +void VxDName::entryName(const String &entryName) +{ + mEntryName=entryName; +} + +WORD VxDName::entryOrdinal(void)const +{ + return mEntryOrdinal; +} + +void VxDName::entryOrdinal(WORD entryOrdinal) +{ + mEntryOrdinal=entryOrdinal; +} diff --git a/image/VXDNAME.HPP b/image/VXDNAME.HPP new file mode 100644 index 0000000..6075b5d --- /dev/null +++ b/image/VXDNAME.HPP @@ -0,0 +1,22 @@ +#ifndef _IMAGE_VXDNAME_HPP_ +#define _IMAGE_VXDNAME_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class VxDName +{ +public: + VxDName(void);; + VxDName(const VxDName &someVxDName); + VxDName(const String &entryName,WORD entryOrdinal); + VxDName &operator=(const VxDName &someVxDName); + const String &entryName(void)const; + void entryName(const String &entryName); + WORD entryOrdinal(void)const; + void entryOrdinal(WORD entryOrdinal); +private: + String mEntryName; + WORD mEntryOrdinal; +}; +#endif \ No newline at end of file diff --git a/image/VXDNAMES.HPP b/image/VXDNAMES.HPP new file mode 100644 index 0000000..7300206 --- /dev/null +++ b/image/VXDNAMES.HPP @@ -0,0 +1,11 @@ +#ifndef _IMAGE_VXDNAMES_HPP_ +#define _IMAGE_VXDNAMES_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _IMAGE_VXDNAME_HPP_ +#include +#endif + +typedef Block VxDNames; +#endif \ No newline at end of file diff --git a/image/VXDOBJ.CPP b/image/VXDOBJ.CPP new file mode 100644 index 0000000..0543133 --- /dev/null +++ b/image/VXDOBJ.CPP @@ -0,0 +1,137 @@ +#include +#include + +VxDObject::VxDObject(void) +{ + zeroInit(); +} + +VxDObject::VxDObject(const VxDObject &someVxDObject) +{ + *this=someVxDObject; +} + +VxDObject::~VxDObject() +{ +} + +VxDObject &VxDObject::operator=(const VxDObject &someVxDObject) +{ + virtualSize(someVxDObject.virtualSize()); + relocationBaseAddress(someVxDObject.relocationBaseAddress()); + flags(someVxDObject.flags()); + pageTableIndex(someVxDObject.pageTableIndex()); + pageTableEntries(someVxDObject.pageTableEntries()); + reserved(someVxDObject.reserved()); + return *this; +} + +BOOL VxDObject::operator<<(PureViewOfFile &pureView) +{ + if(!pureView.read(mVirtualSize))return FALSE; + if(!pureView.read(mRelocationBaseAddress))return FALSE; + if(!pureView.read(mFlags))return FALSE; + if(!pureView.read(mPageTableIndex))return FALSE; + if(!pureView.read(mPageTableEntries))return FALSE; + if(!pureView.read(mReserved))return FALSE; + return TRUE; +} + +VxDObject::operator String(void)const +{ + String strFlags; + + if(has(Readable))strFlags+="Readable"; + if(has(Writeable)){if(!strFlags.isNull())strFlags+=",";strFlags+="Writeable";} + if(has(Executable)){if(!strFlags.isNull())strFlags+=",";strFlags+="Executable";} + if(has(Resource)){if(!strFlags.isNull())strFlags+=",";strFlags+="Resource";} + if(has(Discardable)){if(!strFlags.isNull())strFlags+=",";strFlags+="Discardable";} + if(has(Shared)){if(!strFlags.isNull())strFlags+=",";strFlags+="Shared";} + if(has(HasPreloadPages)){if(!strFlags.isNull())strFlags+=",";strFlags+="HasPreloadPages";} + if(has(HasInvalidPages)){if(!strFlags.isNull())strFlags+=",";strFlags+="HasInvalidPages";} + if(has(HasZeroFilledPages)){if(!strFlags.isNull())strFlags+=",";strFlags+="HasZeroFilledPages";} + if(has(IsResident)){if(!strFlags.isNull())strFlags+=",";strFlags+="IsResident";} + if(has(IsResidentAndContiguous)){if(!strFlags.isNull())strFlags+=",";strFlags+="IsResidentAndContiguous";} + if(has(IsResidentAndLongLockable)){if(!strFlags.isNull())strFlags+=",";strFlags+="IsResidentAndLongLockable";} + if(has(Reserved)){if(!strFlags.isNull())strFlags+=",";strFlags+="Reserved";} + if(has(Alias1616Required)){if(!strFlags.isNull())strFlags+=",";strFlags+="Alias1616Required";} + if(has(Big)){if(!strFlags.isNull())strFlags+=",";strFlags+="Big";} + if(has(IsCodeConforming)){if(!strFlags.isNull())strFlags+=",";strFlags+="IsCodeConforming";} + if(has(IOPrivilegeLevel)){if(!strFlags.isNull())strFlags+=",";strFlags+="IOPrivilegeLevel";} + return strFlags; +} + +DWORD VxDObject::virtualSize(void)const +{ + return mVirtualSize; +} + +void VxDObject::virtualSize(DWORD virtualSize) +{ + mVirtualSize=virtualSize; +} + +DWORD VxDObject::relocationBaseAddress(void)const +{ + return mRelocationBaseAddress; +} + +void VxDObject::relocationBaseAddress(DWORD relocationBaseAddress) +{ + mRelocationBaseAddress=relocationBaseAddress; +} + +DWORD VxDObject::flags(void)const +{ + return mFlags; +} + +void VxDObject::flags(DWORD flags) +{ + mFlags=flags; +} + +DWORD VxDObject::pageTableIndex(void)const +{ + return mPageTableIndex; +} + +void VxDObject::pageTableIndex(DWORD pageTableIndex) +{ + mPageTableIndex=pageTableIndex; +} + +DWORD VxDObject::pageTableEntries(void)const +{ + return mPageTableEntries; +} + +void VxDObject::pageTableEntries(DWORD pageTableEntries) +{ + mPageTableEntries=pageTableEntries; +} + +DWORD VxDObject::reserved(void)const +{ + return mReserved; +} + +void VxDObject::reserved(DWORD reserved) +{ + mReserved=reserved; +} + +BOOL VxDObject::has(Flags flagBit)const +{ + return mFlags&(DWORD)flagBit; +} + +void VxDObject::zeroInit(void) +{ + mVirtualSize=0; + mRelocationBaseAddress=0; + mFlags=0; + mPageTableIndex=0; + mPageTableEntries=0; + mReserved=0; +} diff --git a/image/VXDOBJ.HPP b/image/VXDOBJ.HPP new file mode 100644 index 0000000..a257ae4 --- /dev/null +++ b/image/VXDOBJ.HPP @@ -0,0 +1,49 @@ +#ifndef _IMAGE_VXDOBJECT_HPP_ +#define _IMAGE_VXDOBJECT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class PureViewOfFile; + +class VxDObject +{ +public: + enum Flags{Readable=0x0001,Writeable=0x0002,Executable=0x0004,Resource=0x0008,Discardable=0x0010, + Shared=0x0020,HasPreloadPages=0x0040,HasInvalidPages=0x0080,HasZeroFilledPages=0x0100, + IsResident=0x0200,IsResidentAndContiguous=0x0300,IsResidentAndLongLockable=0x0400, + Reserved=0x0800,Alias1616Required=0x1000,Big=0x2000,IsCodeConforming=0x4000, + IOPrivilegeLevel=0x8000}; + VxDObject(void); + VxDObject(const VxDObject &someVxDObject); + virtual ~VxDObject(); + VxDObject &operator=(const VxDObject &someVxDObject); + BOOL operator<<(PureViewOfFile &pureView); + operator String(void)const; + DWORD virtualSize(void)const; + void virtualSize(DWORD virtualSize); + DWORD relocationBaseAddress(void)const; + void relocationBaseAddress(DWORD relocationBaseAddress); + DWORD flags(void)const; + void flags(DWORD flags); + DWORD pageTableIndex(void)const; + void pageTableIndex(DWORD pageTableIndex); + DWORD pageTableEntries(void)const; + void pageTableEntries(DWORD pageTableEntries); + DWORD reserved(void)const; + void reserved(DWORD reserved); + BOOL has(Flags flagBit)const; +private: + void zeroInit(void); + + DWORD mVirtualSize; + DWORD mRelocationBaseAddress; + DWORD mFlags; + DWORD mPageTableIndex; + DWORD mPageTableEntries; + DWORD mReserved; +}; +#endif diff --git a/image/VXDOBJS.HPP b/image/VXDOBJS.HPP new file mode 100644 index 0000000..785d3a0 --- /dev/null +++ b/image/VXDOBJS.HPP @@ -0,0 +1,11 @@ +#ifndef _IMAGE_VXDOBJECTS_HPP_ +#define _IMAGE_VXDOBJECTS_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _IMAGE_VXDOBJ_HPP_ +#include +#endif + +typedef Block VxDObjects; +#endif \ No newline at end of file diff --git a/image/VXDPAGE.CPP b/image/VXDPAGE.CPP new file mode 100644 index 0000000..d5d91dd --- /dev/null +++ b/image/VXDPAGE.CPP @@ -0,0 +1,72 @@ +#include + +VxDPage::VxDPage(void) +{ + zeroInit(); +} + +VxDPage::VxDPage(const VxDPage &someVxDPage) +{ + *this=someVxDPage; +} + +VxDPage::~VxDPage() +{ +} + +VxDPage &VxDPage::operator=(const VxDPage &someVxDPage) +{ + pageDataOffset(someVxDPage.pageDataOffset()); + dataSize(someVxDPage.dataSize()); + flags(someVxDPage.flags()); + return *this; +} + +BOOL VxDPage::operator<<(PureViewOfFile &pureView) +{ + if(!pureView.read(mPageDataOffset))return FALSE; + if(!pureView.read(mDataSize))return FALSE; + if(!pureView.read(mFlags))return FALSE; +} + +DWORD VxDPage::pageDataOffset(void)const +{ + return mPageDataOffset; +} + +void VxDPage::pageDataOffset(DWORD pageDataOffset) +{ + mPageDataOffset=pageDataOffset; +} + +DWORD VxDPage::dataSize(void)const +{ + return mDataSize; +} + +void VxDPage::dataSize(DWORD dataSize) +{ + mDataSize=dataSize; +} + +WORD VxDPage::flags(void)const +{ + return mFlags; +} + +void VxDPage::flags(WORD flags) +{ + mFlags=flags; +} + +BOOL VxDPage::has(Flags pageFlags) +{ + return flags()&pageFlags; +} + +void VxDPage::zeroInit(void) +{ + mPageDataOffset=0; + mDataSize=0; + mFlags=0; +} diff --git a/image/VXDPAGE.HPP b/image/VXDPAGE.HPP new file mode 100644 index 0000000..b5cf13a --- /dev/null +++ b/image/VXDPAGE.HPP @@ -0,0 +1,32 @@ +#ifndef _IMAGE_VXDPAGE_HPP_ +#define _IMAGE_VXDPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class PureViewOfFile; + +class VxDPage +{ +public: + enum Flags{LegalPhysical=0x00,IteratedData=0x01,Invalid=0x02,ZeroFilled=0x03,Range=0x04}; + VxDPage(void); + VxDPage(const VxDPage &someVxDPage); + virtual ~VxDPage(); + VxDPage &operator=(const VxDPage &someVxDPage); + BOOL operator<<(PureViewOfFile &pureView); + DWORD pageDataOffset(void)const; + void pageDataOffset(DWORD pageDataOffset); + DWORD dataSize(void)const; + void dataSize(DWORD dataSize); + WORD flags(void)const; + void flags(WORD flags); + BOOL has(Flags pageFlags); +private: + void zeroInit(void); + + DWORD mPageDataOffset; + WORD mDataSize; + WORD mFlags; +}; +#endif \ No newline at end of file diff --git a/image/image.001 b/image/image.001 new file mode 100644 index 0000000..46c826b --- /dev/null +++ b/image/image.001 @@ -0,0 +1,258 @@ +# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=image - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "image.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "image.mak" CFG="image - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "image - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msimage.lib" + +!ENDIF + +# Begin Target + +# Name "image - Win32 Release" +# Name "image - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Direntry.cpp +# End Source File +# Begin Source File + +SOURCE=.\Dtaentry.cpp +# End Source File +# Begin Source File + +SOURCE=.\Export.cpp +# End Source File +# Begin Source File + +SOURCE=.\Hardware.cpp +# End Source File +# Begin Source File + +SOURCE=.\Import.cpp +# End Source File +# Begin Source File + +SOURCE=.\Imresdir.cpp +# End Source File +# Begin Source File + +SOURCE=.\Pehdr.cpp +# End Source File +# Begin Source File + +SOURCE=.\Sctnhdrs.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Vxdhdr.cpp +# End Source File +# Begin Source File + +SOURCE=.\vxdname.cpp +# End Source File +# Begin Source File + +SOURCE=.\vxdobj.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Dbgdir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Direntry.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dllflags.hpp +# End Source File +# Begin Source File + +SOURCE=.\Doshdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dtaentry.hpp +# End Source File +# Begin Source File + +SOURCE=.\Expdir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Expdsc.hpp +# End Source File +# Begin Source File + +SOURCE=.\Export.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hardware.hpp +# End Source File +# Begin Source File + +SOURCE=.\Iflags.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imagedir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imagehdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Impexp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Import.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imresdir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Keydir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ntsubsys.hpp +# End Source File +# Begin Source File + +SOURCE=.\Optlhdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pehdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resdrstr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sctnhdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sctnhdrs.hpp +# End Source File +# Begin Source File + +SOURCE=.\Strptr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thnkdata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thnkname.hpp +# End Source File +# Begin Source File + +SOURCE=.\Vxdhdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdname.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdnames.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdobj.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdobjs.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/image/image.dsp b/image/image.dsp new file mode 100644 index 0000000..74bfe1b --- /dev/null +++ b/image/image.dsp @@ -0,0 +1,264 @@ +# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=image - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "image.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "image.mak" CFG="image - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "image - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "image - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msimage.lib" + +!ENDIF + +# Begin Target + +# Name "image - Win32 Release" +# Name "image - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Direntry.cpp +# End Source File +# Begin Source File + +SOURCE=.\Dtaentry.cpp +# End Source File +# Begin Source File + +SOURCE=.\Export.cpp +# End Source File +# Begin Source File + +SOURCE=.\Hardware.cpp +# End Source File +# Begin Source File + +SOURCE=.\Import.cpp +# End Source File +# Begin Source File + +SOURCE=.\Imresdir.cpp +# End Source File +# Begin Source File + +SOURCE=.\Pehdr.cpp +# End Source File +# Begin Source File + +SOURCE=.\Sctnhdrs.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Vxdhdr.cpp +# End Source File +# Begin Source File + +SOURCE=.\vxdname.cpp +# End Source File +# Begin Source File + +SOURCE=.\vxdobj.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Dbgdir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Direntry.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dllflags.hpp +# End Source File +# Begin Source File + +SOURCE=.\Doshdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dtaentry.hpp +# End Source File +# Begin Source File + +SOURCE=.\Expdir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Expdsc.hpp +# End Source File +# Begin Source File + +SOURCE=.\Export.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hardware.hpp +# End Source File +# Begin Source File + +SOURCE=.\Iflags.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imagedir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imagehdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Impexp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Import.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imresdir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Keydir.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ntsubsys.hpp +# End Source File +# Begin Source File + +SOURCE=.\Optlhdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pehdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resdrstr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sctnhdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sctnhdrs.hpp +# End Source File +# Begin Source File + +SOURCE=.\Strptr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thnkdata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thnkname.hpp +# End Source File +# Begin Source File + +SOURCE=.\Vxdhdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdname.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdnames.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdobj.hpp +# End Source File +# Begin Source File + +SOURCE=.\vxdobjs.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/image/image.dsw b/image/image.dsw new file mode 100644 index 0000000..723dc94 --- /dev/null +++ b/image/image.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "image"=.\image.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/image/image.ncb b/image/image.ncb new file mode 100644 index 0000000..095d4aa Binary files /dev/null and b/image/image.ncb differ diff --git a/image/image.opt b/image/image.opt new file mode 100644 index 0000000..c0e3d7b Binary files /dev/null and b/image/image.opt differ diff --git a/imagelst/172.ICO b/imagelst/172.ICO new file mode 100644 index 0000000..35f659c Binary files /dev/null and b/imagelst/172.ICO differ diff --git a/imagelst/173.ICO b/imagelst/173.ICO new file mode 100644 index 0000000..cff2a97 Binary files /dev/null and b/imagelst/173.ICO differ diff --git a/imagelst/174.ICO b/imagelst/174.ICO new file mode 100644 index 0000000..b60ded1 Binary files /dev/null and b/imagelst/174.ICO differ diff --git a/imagelst/175.ICO b/imagelst/175.ICO new file mode 100644 index 0000000..f90ea9b Binary files /dev/null and b/imagelst/175.ICO differ diff --git a/imagelst/BCCW32.CFG b/imagelst/BCCW32.CFG new file mode 100644 index 0000000..fcf9cb0 --- /dev/null +++ b/imagelst/BCCW32.CFG @@ -0,0 +1,25 @@ +-R +-v +-vi +-H +-H=propsht.csm +-R- +-H- +-4 +-Jgx +-x- +-xd- +-RT- +-Og +-Ot +-Z +-O +-Oe +-Ol +-Ob +-OW +-Om +-Op +-Oi +-Ov +-W diff --git a/imagelst/BOLT.ICO b/imagelst/BOLT.ICO new file mode 100644 index 0000000..63ee3a5 Binary files /dev/null and b/imagelst/BOLT.ICO differ diff --git a/imagelst/CA.ICO b/imagelst/CA.ICO new file mode 100644 index 0000000..aef94d2 Binary files /dev/null and b/imagelst/CA.ICO differ diff --git a/imagelst/CD.ICO b/imagelst/CD.ICO new file mode 100644 index 0000000..728146d Binary files /dev/null and b/imagelst/CD.ICO differ diff --git a/imagelst/CDROM.ICO b/imagelst/CDROM.ICO new file mode 100644 index 0000000..fac7ded Binary files /dev/null and b/imagelst/CDROM.ICO differ diff --git a/imagelst/CHIP.BMP b/imagelst/CHIP.BMP new file mode 100644 index 0000000..0f6879b Binary files /dev/null and b/imagelst/CHIP.BMP differ diff --git a/imagelst/CHIP.ICO b/imagelst/CHIP.ICO new file mode 100644 index 0000000..f477f33 Binary files /dev/null and b/imagelst/CHIP.ICO differ diff --git a/imagelst/DEVICE.ICO b/imagelst/DEVICE.ICO new file mode 100644 index 0000000..1a933ef Binary files /dev/null and b/imagelst/DEVICE.ICO differ diff --git a/imagelst/DRAGINFO.HPP b/imagelst/DRAGINFO.HPP new file mode 100644 index 0000000..2ba13b7 --- /dev/null +++ b/imagelst/DRAGINFO.HPP @@ -0,0 +1,82 @@ +#ifndef _IMAGELIST_DRAGINFO_HPP_ +#define _IMAGELIST_DRAGINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif + +class DragInfo +{ +public: + DragInfo(void); + DragInfo(const DragInfo &someDragInfo); + ~DragInfo(); + DragInfo &operator=(const DragInfo &someDragInfo); + WORD operator==(const DragInfo &someDragInfo)const; + WORD isInDrag(void)const; + void isInDrag(WORD isInDrag); + TreeViewItem dragItem(void)const; + void dragItem(const TreeViewItem &someTreeViewItem); +private: + WORD mIsInDrag; + TreeViewItem mDragItem; +}; + +inline +DragInfo::DragInfo(void) +: mIsInDrag(FALSE) +{ +} + +inline +DragInfo::DragInfo(const DragInfo &someDragInfo) +{ + *this=someDragInfo; +} + +inline +DragInfo::~DragInfo() +{ +} + +inline +DragInfo &DragInfo::operator=(const DragInfo &someDragInfo) +{ + isInDrag(someDragInfo.isInDrag()); + dragItem(someDragInfo.dragItem()); + return *this; +} + +inline +WORD DragInfo::operator==(const DragInfo &someDragInfo)const +{ + return (isInDrag()==someDragInfo.isInDrag()&& + dragItem()==someDragInfo.dragItem()); +} + +inline +WORD DragInfo::isInDrag(void)const +{ + return mIsInDrag; +} + +inline +void DragInfo::isInDrag(WORD isInDrag) +{ + mIsInDrag=isInDrag; +} + +inline +TreeViewItem DragInfo::dragItem(void)const +{ + return mDragItem; +} + +inline +void DragInfo::dragItem(const TreeViewItem &someTreeViewItem) +{ + mDragItem=someTreeViewItem; +} +#endif diff --git a/imagelst/DRILL.ICO b/imagelst/DRILL.ICO new file mode 100644 index 0000000..265d603 Binary files /dev/null and b/imagelst/DRILL.ICO differ diff --git a/imagelst/FDD.ICO b/imagelst/FDD.ICO new file mode 100644 index 0000000..e0f7939 Binary files /dev/null and b/imagelst/FDD.ICO differ diff --git a/imagelst/FTREE.BAK b/imagelst/FTREE.BAK new file mode 100644 index 0000000..37a9c11 --- /dev/null +++ b/imagelst/FTREE.BAK @@ -0,0 +1,54 @@ +#ifndef _IMAGELIST_FOLDERTREE_HPP_ +#define _IMAGELIST_FOLDERTREE_HPP_ +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACKPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEW_HPP_ +#include +#endif +#ifndef _IMAGELIST_IMAGELIST_HPP_ +#include +#endif + +class TreeViewMessageHeader; +class TreeViewDisplayInfo; +class Rect; + +class FolderTree : public TreeView, public ImageList +{ +public: + enum{FolderOpen=0,FolderClosed=2}; + enum HandlerType{SelChangedHandler,SelChangingHandler,ItemExpandingHandler,ItemExpandedHandler,BeginDragHandler}; + FolderTree(GUIWindow &parentWindow,const Rect &winRect=Rect(1,1,320,200),int controlID=101,RGBColor bkColor=RGBColor(::GetSysColor(COLOR_WINDOW))); + virtual ~FolderTree(); + void insertHandler(HandlerType handlerType,PureCallback *lpCallback); + void removeHandler(HandlerType handlerType); +protected: + virtual WORD tvnSelChanging(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnSelChanged(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnGetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnSetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnItemExpanding(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnItemExpanded(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginDrag(const TreeViewMessageHeader &TreeViewMessageHeader); + virtual WORD tvnBeginRDrag(const TreeViewMessageHeader &TreeViewMessageHeader); + virtual WORD tvnDeleteItem(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnEndLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnKeyDown(const TreeViewMessageHeader &treeViewMessageHeader); +private: + void callHandler(HandlerType handlerType,CallbackData &someCallbackData); + void initHandlers(void); + + Block mEventHandlers; +}; +#endif diff --git a/imagelst/FTREE.CPP b/imagelst/FTREE.CPP new file mode 100644 index 0000000..e146b4d --- /dev/null +++ b/imagelst/FTREE.CPP @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include +#include +#include + +FolderTree::FolderTree(GUIWindow &parentWindow,const Rect &winRect,int controlID,RGBColor bkColor) +: TreeView(parentWindow,winRect,controlID,TreeView::TreeHasLines|TreeView::TreeHasButtons|TreeView::TreeLinesAtRoot|TreeView::TreeShowSelAlways), + ImageList(parentWindow.processInstance(),"LIST",16,RGBColor(0,0,255)) +{ + setBkColor(bkColor); + setImageList(*this); + initHandlers(); +} + +FolderTree::~FolderTree() +{ +} + +void FolderTree::insertHandler(HandlerType handlerType,PureCallback *lpCallback) +{ + mEventHandlers[(int)handlerType]=CallbackPointer(lpCallback); +} + +void FolderTree::removeHandler(HandlerType handlerType) +{ + mEventHandlers[(int)handlerType]=CallbackPointer(); +} + +void FolderTree::callHandler(HandlerType handlerType,CallbackData &someCallbackData) +{ + mEventHandlers[(int)handlerType].callback(someCallbackData); +} + +void FolderTree::initHandlers(void) +{ + for(int handlerIndex=0;handlerIndex<=KeyDownHandler;handlerIndex++) + mEventHandlers.insert(&CallbackPointer()); +} + +// virual overloads + +WORD FolderTree::tvnSelChanging(const TreeViewMessageHeader &treeViewMessageHeader) +{ + CallbackData callbackData(0,treeViewMessageHeader.itemOld().lParam()); + callHandler(SelChangingHandler,callbackData); + return FALSE; +} + +WORD FolderTree::tvnSelChanged(const TreeViewMessageHeader &treeViewMessageHeader) +{ + CallbackData callbackData(0,treeViewMessageHeader.itemNew().lParam()); + callHandler(SelChangedHandler,callbackData); + return FALSE; +} + +WORD FolderTree::tvnItemExpanding(const TreeViewMessageHeader &treeViewMessageHeader) +{ + CallbackData callbackData(0,(LPARAM)&treeViewMessageHeader); + callHandler(ItemExpandingHandler,callbackData); + return FALSE; +} + +WORD FolderTree::tvnItemExpanded(const TreeViewMessageHeader &treeViewMessageHeader) +{ + CallbackData callbackData(0,(LPARAM)&treeViewMessageHeader); + callHandler(ItemExpandedHandler,callbackData); + return FALSE; +} + +WORD FolderTree::tvnGetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo) +{ + TreeViewItem tvItem(treeViewDisplayInfo.item()); + + if(treeViewDisplayInfo.item().state()&TVIS_EXPANDED) + {tvItem.image(FolderOpen);tvItem.selectedImage(FolderOpen);} + else + {tvItem.image(FolderClosed);tvItem.selectedImage(FolderClosed);} + treeViewDisplayInfo.item(tvItem); + return TRUE; +} + +WORD FolderTree::tvnSetDispInfo(TreeViewDisplayInfo &/*treeViewDisplayInfo*/) +{ + return FALSE; +} + +WORD FolderTree::tvnBeginDrag(const TreeViewMessageHeader &treeViewMessageHeader) +{ + CallbackData callbackData(0,(LPARAM)&treeViewMessageHeader); + callHandler(BeginDragHandler,callbackData); + return FALSE; +} + +WORD FolderTree::tvnBeginRDrag(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD FolderTree::tvnDeleteItem(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD FolderTree::tvnBeginLabelEdit(const TreeViewDisplayInfo &/*treeViewDisplayInfo*/) +{ + return FALSE; +} + +WORD FolderTree::tvnEndLabelEdit(const TreeViewDisplayInfo &/*treeViewDisplayInfo*/) +{ + return FALSE; +} + +WORD FolderTree::tvnKeyDown(const TreeViewKeyDown &treeViewKeyDown) +{ + CallbackData callbackData(0,(LPARAM)&treeViewKeyDown); + callHandler(KeyDownHandler,callbackData); + return FALSE; +} diff --git a/imagelst/FTREE.HPP b/imagelst/FTREE.HPP new file mode 100644 index 0000000..dc64516 --- /dev/null +++ b/imagelst/FTREE.HPP @@ -0,0 +1,56 @@ +#ifndef _IMAGELIST_FOLDERTREE_HPP_ +#define _IMAGELIST_FOLDERTREE_HPP_ +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACKPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEW_HPP_ +#include +#endif +#ifndef _IMAGELIST_IMAGELIST_HPP_ +#include +#endif + +class TreeViewMessageHeader; +class TreeViewDisplayInfo; +class TreeViewKeyDown; +class Rect; + +class FolderTree : public TreeView, public ImageList +{ +public: + enum{FolderOpen=0,FolderClosed=2}; + enum HandlerType{SelChangedHandler,SelChangingHandler,ItemExpandingHandler, + ItemExpandedHandler,BeginDragHandler,KeyDownHandler}; + FolderTree(GUIWindow &parentWindow,const Rect &winRect=Rect(1,1,320,200),int controlID=101,RGBColor bkColor=RGBColor(GetSysColor(COLOR_WINDOW))); + virtual ~FolderTree(); + void insertHandler(HandlerType handlerType,PureCallback *lpCallback); + void removeHandler(HandlerType handlerType); +protected: + virtual WORD tvnSelChanging(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnSelChanged(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnGetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnSetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnItemExpanding(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnItemExpanded(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginDrag(const TreeViewMessageHeader &TreeViewMessageHeader); + virtual WORD tvnBeginRDrag(const TreeViewMessageHeader &TreeViewMessageHeader); + virtual WORD tvnDeleteItem(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnEndLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnKeyDown(const TreeViewKeyDown &treeViewKeyDown); +private: + void callHandler(HandlerType handlerType,CallbackData &someCallbackData); + void initHandlers(void); + + Block mEventHandlers; +}; +#endif diff --git a/imagelst/FTREE.MAK b/imagelst/FTREE.MAK new file mode 100644 index 0000000..400c617 --- /dev/null +++ b/imagelst/FTREE.MAK @@ -0,0 +1,208 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +!IF "$(CFG)" == "" +CFG=Ftree - Win32 Debug +!MESSAGE No configuration specified. Defaulting to Ftree - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "Ftree - Win32 Release" && "$(CFG)" != "Ftree - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Ftree.mak" CFG="Ftree - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "Ftree - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "Ftree - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "Ftree - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Ftree.exe" + +CLEAN : + -@erase "$(INTDIR)\Ftree.obj" + -@erase "$(OUTDIR)\Ftree.exe" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\ + /Fp"Ftree.pch" /YX /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftree.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:console /incremental:no\ + /pdb:"$(OUTDIR)/Ftree.pdb" /machine:I386 /out:"$(OUTDIR)/Ftree.exe" +LINK32_OBJS= \ + "$(INTDIR)\Ftree.obj" + +"$(OUTDIR)\Ftree.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "Ftree - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Ftree.exe" + +CLEAN : + -@erase "$(INTDIR)\Ftree.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Ftree.exe" + -@erase "$(OUTDIR)\Ftree.ilk" + -@erase "$(OUTDIR)\Ftree.pdb" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c +CPP_PROJ=/nologo /MLd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\ + /Fp"Ftree.pch" /YX /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Ftree.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:console /incremental:yes\ + /pdb:"$(OUTDIR)/Ftree.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Ftree.exe" +LINK32_OBJS= \ + "$(INTDIR)\Ftree.obj" + +"$(OUTDIR)\Ftree.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx.obj: + $(CPP) $(CPP_PROJ) $< + +.c.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "Ftree - Win32 Release" +# Name "Ftree - Win32 Debug" + +!IF "$(CFG)" == "Ftree - Win32 Release" + +!ELSEIF "$(CFG)" == "Ftree - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Ftree.cpp +DEP_CPP_FTREE=\ + {$(INCLUDE)}"\.\draginfo.hpp"\ + {$(INCLUDE)}"\.\ftree.hpp"\ + {$(INCLUDE)}"\.\hittest.hpp"\ + {$(INCLUDE)}"\.\imagelst.hpp"\ + {$(INCLUDE)}"\.\treeview.hpp"\ + {$(INCLUDE)}"\.\tvinsert.hpp"\ + {$(INCLUDE)}"\.\tvitem.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\commctrl.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\iconinfo.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\pureicon.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + + +"$(INTDIR)\Ftree.obj" : $(SOURCE) $(DEP_CPP_FTREE) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/imagelst/HDD.ICO b/imagelst/HDD.ICO new file mode 100644 index 0000000..3e90932 Binary files /dev/null and b/imagelst/HDD.ICO differ diff --git a/imagelst/HITTEST.HPP b/imagelst/HITTEST.HPP new file mode 100644 index 0000000..cb231a7 --- /dev/null +++ b/imagelst/HITTEST.HPP @@ -0,0 +1,115 @@ +#ifndef _IMAGELIST_HITTEST_HPP_ +#define _IMAGELIST_HITTEST_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif + +class HitTestInfo : private TV_HITTESTINFO +{ +public: + enum{HitTestAbove=TVHT_ABOVE,HitTestBelow=TVHT_BELOW,HitTestNoWhere=TVHT_NOWHERE, + HitTestOnItem=TVHT_ONITEM,HitTestOnItemButton=TVHT_ONITEMBUTTON, + HitTestOnItemIcon=TVHT_ONITEMICON,HitTestOnItemIndent=TVHT_ONITEMINDENT, + HitTestOnItemLabel=TVHT_ONITEMLABEL,HitTestOnItemRight=TVHT_ONITEMRIGHT, + HitTestToLeft=TVHT_TOLEFT,HitTestToRight=TVHT_TORIGHT}; + HitTestInfo(void); + HitTestInfo(const HitTestInfo &someHitTestInfo); + ~HitTestInfo(); + HitTestInfo &operator=(const HitTestInfo &someHitTestInfo); + WORD operator==(const HitTestInfo &someHitTestInfo); + operator TV_HITTESTINFO&(void); + GDIPoint point(void)const; + void point(const GDIPoint &somePoint); + UINT flags(void)const; + void flags(UINT flags); + HTREEITEM item(void)const; + void item(HTREEITEM item); +private: +}; + +inline +HitTestInfo::HitTestInfo(void) +{ + point(GDIPoint(0,0)); + flags(0); + item(0); +} + +inline +HitTestInfo::HitTestInfo(const HitTestInfo &someHitTestInfo) +{ + *this=someHitTestInfo; +} + +inline +HitTestInfo::~HitTestInfo() +{ +} + +inline +HitTestInfo &HitTestInfo::operator=(const HitTestInfo &someHitTestInfo) +{ + point(someHitTestInfo.point()); + flags(someHitTestInfo.flags()); + item(someHitTestInfo.item()); + return *this; +} + +inline +WORD HitTestInfo::operator==(const HitTestInfo &someHitTestInfo) +{ + return (point()==someHitTestInfo.point()&& + flags()==someHitTestInfo.flags()&& + item()==someHitTestInfo.item()); +} + +inline +HitTestInfo::operator TV_HITTESTINFO&(void) +{ + return *this; +} + +inline +GDIPoint HitTestInfo::point(void)const +{ + return GDIPoint(TV_HITTESTINFO::pt.x,TV_HITTESTINFO::pt.y); +} + +inline +void HitTestInfo::point(const GDIPoint &somePoint) +{ + TV_HITTESTINFO::pt.x=somePoint.x(); + TV_HITTESTINFO::pt.y=somePoint.y(); +} + +inline +UINT HitTestInfo::flags(void)const +{ + return TV_HITTESTINFO::flags; +} + +inline +void HitTestInfo::flags(UINT flags) +{ + TV_HITTESTINFO::flags=flags; +} + +inline +HTREEITEM HitTestInfo::item(void)const +{ + return TV_HITTESTINFO::hItem; +} + +inline +void HitTestInfo::item(HTREEITEM item) +{ + TV_HITTESTINFO::hItem=item; +} +#endif + diff --git a/imagelst/IMAGE.DOC b/imagelst/IMAGE.DOC new file mode 100644 index 0000000..e911979 --- /dev/null +++ b/imagelst/IMAGE.DOC @@ -0,0 +1,8026 @@ +{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fnil MS Sans Serif;}{\f1\fnil\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fnil Times New Roman;}{\f4\fswiss Arial;}{\f5\fmodern Courier New;}{\f6\fnil Arial;}} +{\colortbl\red0\green0\blue0;} +\deflang1033\pard\plain\f6\fs18 +\par \pard\li180\ri240\qc\plain\f6\fs18 Dave Edson +\par \pard\li180\ri240\plain\f6\fs18 Chicago introduces many new interface gadgets. This is the first in a series that will explore them. Here I'll introduce a graphics aid called the Image List, along with a new control called the TreeView. Future articles will cover the new Toolbar control, the RTF edit control, and the new Common Dialogs. +\par +\par +\par I have chosen to talk about the Image List and the TreeView control first because the TreeView control is very easily demonstrated in a self-contained unit, and it gives you a nice little Chicago app to start dinking around with. +\par The Image List is not a control\emdash it is a GDI-like object that'll make your life easier. If your application needs to manage a bunch of bitmaps, the Image List provides an easy way to manage and draw these bitmaps. Your application can stop keeping around all those memory DCs and bitmap handles; and you can also get rid of a lot of ugly BitBlt code. Since the Image List also provides some complex drawing mechanisms, you can also use it to handle some tedious graphics operations, such as drawing a transparent bitmap with a mask. Also, the graphical elements for implementing drag-and-drop are provided: making a drag cursor and moving the drag cursor to follow the mouse. You worry only about the application-specific implications of dragging and dropping, since the graphical grunt work is provided for free by the Image List. +\par As a responsible programmer, one of the worst things you can do is spend hours or months of your life writing code for a control that Windows\plain\f6\fs18\up8 _\plain\f6\fs18 supplies for free. This is your official notice to stop work on that hierarchical list box, since the TreeView control is here, and it is majorly cool! Wherever your current program would like to list a tree of information (such as a directory listing), the Tree View control will make it considerably easier. +\par What do the Image List and TreeView have in common? The TreeView control has an option to automatically use an Image List. Coupling these two objects allows your program to draw little graphical pictures from the Image List next to items in the TreeView hierarchy, as the Chicago Explorer does (see Figure 1). I'll explain later how to do this. +\par \plain\f6\fs18\b Figure 1 An Image List and TreeView in action.\plain\f6\fs18 +\par {\pict\wmetafile8\picw8974\pich7443\picscalex99\picscaley99\picwgoal5099\pichgoal4229 +010009000003495F00000000FE5E00000000050000000B0200000000050000000C02131D0E2303 +0000001E00070000001604131D0E2300000000050000000C02251D2323050000000B0200000000 +030000001E00070000001604251D232300000000050000000C028610EC13050000000B02000000 +00050000000B0200000000FE5E0000430F2000CC0000001A015401000000008610EC1300000000 +28000000540100001A010000010004000000000000000000130B0000130B000000000000000000 +00000000000000BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 +FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000788788787878787878787878787878787878787878787878787878787878787878787878 +787878787878787878787878787878787878787878787878787878787878787878787878787878 +787878787878787878787878787878787878787878787787787878787878787878787878787878 +787878787878787878787878787878787878787878787878787878787878787878787878787878 +787878787878787878787878787878787000007F77777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777000007F777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777778000007F77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777000007F77777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777F777877777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7F778000007F7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F77 +80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77800000 +7F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F778000007F7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7780 +00007F7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F778000007F7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F +7780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFFFF +FFFFFFFFF0000007787878780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFF7778787F77770070FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFF878787878FFFFFF8F777 +78FFFFFFF80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000 +007F7770FFFF7FFFFFFF7FFFFFF7F0777778788770FFFFFFF0FFFF0FFF000FFF0FF0FFF0FFF000 +FF0FF0FFF0FFFF0FFFF0FFF000FF0FF0000F0FFF0F0000FFF000FF0FF0FFF0FF000FFF000FFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFF8FFF0FFF8FFFFFF8F0777087777F80FFFF +FFF0FFF00FF0FFF0F0FFF0FFF0FF0FFF0F0FF0FF0FFFFF0FFF00FF0FFF0F0F0FFF0F0FFF0F0FFF +0F0FFF0F0FF0FFF0F0FFF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFF7F +FF0FFF7FFFFFF7F077F077777770FFFFFFF0FFF00FF0FFFFF0FF0F0F0F0F0FFF0F0FF0F0FFFFFF +0FFF00FF0FFFFF0F0FFF0F0FFF0F0FFF0F0FFF0F0FF0FFF0F0FFF0F0FFF0F0FFF0FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F777000007F7780FFFF8F00000F8F8F8F87F0777077777780FFFFFFF0FF0F0FF000 +00F0FF0F0F0F0F0FFF0F0FF00FFFFFFF0FF0F0FF00000F0F0FFF0F0FFF0F0FFF0F0FFF0F0FF0FF +F0F0FFF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFF7FFF0FFF7FFFFFF8 +F0000087777770FFFFFFF0F0FF0FF0FFF0F0FF0FF0FF0F0FFF0F0FF0F0FFFFFF0F0FF0FF0FFF0F +0F0FFF0F00FF0F0FFF0F0FFF0F0FF00FF0F0FFF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +8000007F7780FFFF8FFF0FFF8FFFFFF7F07F707787878FFFFFFFF0F0FF0FFF000FF00F0FF0FF0F +F000FF00F0FF0FFFFF0F0FF0FFF000FF0FF0000F0F00FF0000FFF000FF00F0F00FFF000FFF000F +FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFF7FFFFFFF7FFFFFF8F0777077F770FF +FFFFFFF00FFF0FFFFFFFF0FFFFFFFFFFFFFFFFFFF0FFFFFFFF00FFF0FFFFFFFFFFFFFFFF0FFFFF +0FFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FF +FF878787878FFFFFF7F07770777770FFFFFFFFF00FFF0FFFFFFFF0FFFFFFFFFFFFFFFFFFF0FFFF +FFFF00FFF0FFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFF0FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFF8F00000000780FFFFFFFFF0FFFF0F +FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFF0FFFF0FFFFFFFF0FFFFFFF0FFFFF0FFFFFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFF +FFF7F77777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F777000007F7770FFFFFFFFFFFFFFFFFFF8FFFFFFFFFF70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFF78787878787 +80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F77 +70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF787787787878770FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F3000000007370FFFFFFF0FFFFFF0FF0F0FFF0FF0FF000FF0FFF00FFFFF0FFFFF +F000FF0FF0000FF000FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77800000 +7F7780FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F7777777770780FFFFFFF0FFFFFF0FF0F +0FFF0F0FF0FFF0F0FF0FF0FFFF0FFFFF0FFF0F0F0FFF0F0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +8777773780370FFFFFFF0FFFFFF0FF0F0FFF0F0FF0FFFFF0FFFF0FFFFF0FFFFF0FFF0F0F0FFF0F +0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF +8FFFFFFFFFFFFFFFFFF8F8F8F8F8F78F7777878770770FFFFFFF0FFFFFF0FF0F0FFF0F0FF00000 +F0FFF0FFFFFF0FFFFF0FFF0F0F0FFF0F00000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F378FFF0737380F +FFFFFF00000FF0FF0F00FF0F0FF0FFF0F0FF0FF0FFFF0000FF0FFF0F0F0FFF0F0FFF0F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFF +FFFFF8FFFFFFFFFF8F7377FFF073770FFFFFFF0FFFF0F00F0F0F00FF00FF000FF00FF00FFFFF0F +FFFFF000FF0FF0000FF000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7770 +00007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3737878707370FFFFFFF0FFFF0FF +FFFFFFFFFF0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFF +FF8FFFFFFFFFFFF70FFFFFFF0FFFF0FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFF0FFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF73737373787878FFFFFFFF00000FFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFF00000FFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFF7373737FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF87878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +777000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780 +FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000 +0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFF +FFFFFFFFFFFFF8FFFFFFFFFF787777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3737373737370FFFFFFF +F0000FFF000FF0FFF0FF0F0FFF000FF0FFFF0FFFFFFF0000F0FFF0FF000FF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8 +FFFFFFFFFF8F7376703303780FFFFFFF0FFFF0F0FFF0F0FFF0F0FF0FF0FFF0F0FFFF0FFFFFF0FF +F0F0FFF0F0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F +7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3737763337370FFFFFFF0FFFFFF0FFF0F0 +FFF0F0FF0FF0FFF0F0FFFF0FFFFFF0FFF0F0FFF0F0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8F8F8F8F8F87F70 +70780700770FFFFFFF0FFFFFF0FFF0F0FFF0F0FF0FF0FFF0F0FFFF0FFFFFFF0000F0FFF0F00000 +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8FFF0770370FFFFFFF0FFFFFF0FFF0F00FF0F0FF0FF0FF +F0F0FFFF00000FFFFFF0F00FF0F0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF7F7877707F70780FFF +FFFF0FFFFFFF000FF0F00FF00F00FF000FF0FFFF0FFFF0FF000FF0F00FFF000FF0FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF8F3737378780370FFFFFFF0FFFFFFFFFFFFFFFFFF0FFFFFFFFFFF0FFFF0FFFF0 +FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000 +007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF7FFFFFFFFFFFF70FFFFFFF0FFFF0FFFF +FFFFFFFFF0FFFFFFFFFFF0FFFF0FFFF0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +87373737787878FFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFF00000FFFFFFFFFFFFFFF +FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7778 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFF +FF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFF7737378FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87878FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFF +FFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +7000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFF0FFFFFFFFFF0FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF8778787878 +78780FFFFFFFFFF0FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFF +FFFFFFF7FFFFFFF7FFFFFF77FFFFFFFFFF7770FFFFFFFFF0FF0FFFFF0FFF0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFF8787787787787780FFFFFFFF +F0FF0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFF0FF +F7FFFFFF7777777777777870FFFFFFFFF0FF0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F77 +80FFFFFFFF8FFFFFFFFFFFFFF8F00000F8F8F8F87777777777737870FFFFFFFFF0FF0FFFFFFFFF +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF8FFFFF +FFFFFFF780FFFFFFFFF0FF0000FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFF +FFFFFFFFFFF8FFF0FFF8FFFFFFF777777777777770FFFFFFFFF0FF0FFFFF0FFF0FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFFFF8787878787878FFFFF +FFFFF0FF0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF878 +787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FF0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77700000 +7F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F00000F +FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7770 +00007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFF +FFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF787777777777770FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF +7FFFFFF7F3737373737370FFFFFFFF000FFF0000FFFF0FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFF +FFFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFF8F7373737373780FFFFFFF0FFF0FF0FFF0FFF0F +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF7F37373 +73737370FFFFFFFFFFF0FF0FFFF0FF0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFF8F00000F8F8F8F87F7373737373770FFFFFFFFFFF0FF0FFFF0FF0F0FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF8F3737373737370FFFFFF +FF000FFF0FFFF0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF8FFF +0FFF8FFFFFF7F7373737373780FFFFFFF0FFFFFF0FFFF0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF8F3737373737370FFFFFFF0FFFFFF0FFFF0 +FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF7FF +FFFFFFFFFF70FFFFFFF0FFF0FF0FFF0FFF0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF87373737787878FFFFFFFFF000FFF0000FFFF0FFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F +7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFF7737378FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF87878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8F +FFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFF +FFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000 +007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF +FFFFFFFF8FFFFFFFFFF787777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3737373737370FFFFFFF0000F +FF0000FF00FFF000FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFF +FFFFF8F7373737373780FFFFFFF0FFF0F0FFF0F0FF0F0FFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3737373737370FFFFFFF0FFF0F0FFF0FFF0FF0F +FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +8000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8F8F8F8F8F87F7373737 +373770FFFFFFF0FFF0FF0000FF0FFF00000FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF8F3737373737370FFFFFFF0FFF0FFFFF0F0FF0F0FFF0FFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FF +FFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF7F7373737373780FFFFFFF0 +000FFF000FFF00FFF000FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF8F3737373737370FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFF +FFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF7FFFFFFFFFFFF70FFFFFFF0FFFFFFFFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87373 +737787878FFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FF +FFFFFFFFFFFFFFFF8FFFFFFFFFFF7737378FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F77 +70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87878FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF +FF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF303030303030303030B0303FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +4844844544444844444540FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF0000000000000FFFFF3545454F48584545845F483FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77800000 +7F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF877878787878780FFFF044484F45444448 +44484F40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF77 +FFFFFFFFFF7770FFF384444F84FFFFF54F544F53FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF +8FFFFFFFFFFFFFF8FFFFFFF8FFFFFF8787787787787780FFF045845F44F4544448445F40FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F778000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF7777777777777870 +FFF344544F45F4845854484F43FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFF +F8F00000F8F8F8F87777777777737870FFF084484F84F4444444548F40FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7770 +00007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF8FFFFFFFFFFFF780FFF354454F54FF +FF4548444F53FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF8FFFFFFF8FFFF +FFF777777777777770FFF048444F44F454848F414F40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFF +FFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFFFF8787878787878FFFF344458F48F4845445444F43FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFFFFFFFFFFFFFF +FFFFFFF085445F44F4444544584F40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3448444F4FFFFF48444F453FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0584584 +5845845845845840FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF34444444444444444444443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780 +FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF030303030303030303030 +30FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFF +FFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F778000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFF +FFFF0FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFF87878 +7878FFFFFF877878787878780FFFFFFFFFF0FFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F +7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF77FFFFFFFFFF7770FFFFFFFFF0FF0000FFFF +0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFF8787 +787787787780FFFFFFFFF0FF0FFF0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFF +FFFFFFFFFFFFF7FFF0FFF7FFFFFF7777777777777870FFFFFFFFF0FF0FFFF0FFFFFF0FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF8F00000F8F8F8F87777777777737870FF +FFFFFFF0FF0FFFF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7 +FFF0FFF7FFFFFF8FFFFFFFFFFFF780FFFFFFFFF0FF0FFFF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000 +007F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFFF777777777777770FFFFFFFFF0FF0FFF +F0FF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF +FF8787878787878FFFFFFFFFF0FF0FFFF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7778 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFF +FF8FFFFFFFFFFFFFF878787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FF0FFF0FFFFFFF0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0F0000FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFF +FFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +8000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF877878787878780FFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFF +F7FFFFFF77FFFFFFFFFF7770FFFFFF0000FFFFF000FFF00FFFFF0FFF0000FF0FFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F77 +80FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFF8787787787787780FFFFFF0FFF0FFF0FFF0F0F +F0FFFF0FF0FFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF777777 +7777777870FFFFFF0FFFF0FF0FFF0FFF0FFFFF0FF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFF +FFFFFFFFFFF8F00000F8F8F8F87777777777737870FFFFFF0FFFF0FF0FFF0FF0FFFFFF0FF0FFFF +FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF8FFFFFFFFFFFF780FFFF +FF0FFFF0FF0FFF0F0FF0FFFF0FF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFF8FF +F0FFF8FFFFFFF777777777777770FFFFFF0FFFF0FFF000FFF00FFFFF0FF0FFFFFF0FFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77800000 +7F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFFFF8787878787878FFFFFFF0FFFF0FFFFFF +FFFFFFFFFF0FF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFFFF +FFFFFFFFFFFFFFFFFFFF0FFF0FFFFFFFFFFFFFFFFF0FF0FFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFF0FF +0000FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F77770F00000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7780 +00007F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777807777777777770FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +7708FFFFFFFFFF70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFF +FFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777807FFFFFFFFFF70FFFFFFF0FF000FFF00FFF0FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000 +00FFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF0FFFFF0FFFF00FFFFFFFF0FFFFFFFFFFF0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708FF000000FF +70FFFFFF0FF0FFF0F0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFF +FFFFF878787878FFFFFF787878787787780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF0 +FFFFFF0FFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F777807FFFFFFFFFF70FFFFFF0FF0FFFFFFF0FF0FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF8777777777777780FFFFFFF000 +FFFFFFFFFFF0FFFFF0FF000FF0000FF0000FFF0FFFFFF0F0FFFFF0F0FFF0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708FF000000FF70FFFFFF0FF000 +00FF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8 +FFFFFF77777FFFF7777870FFFFFF0FFF0FFFFFFFFFF0FFFFF0F0FFF0F0FFF0F0FFF0FF00FFFFF0 +F0FFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F777707FFFFFFFFFF70FFFFFF0FF0FFF0F0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770 +FFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF7778700007877770FFFFFFFFFF0FFFFFFFFFF0FF +FFF0F0FFF0F0FFF0F0FFF0F0FF0FFFF0FF00000FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708FF000000FF70FFFFFF00FF000FFF00FF00FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFFF8F00000F8F8F8F877777787 +87737870FFFFFFFFFF0FFFFFFFFFF0FFFFF0F0FFF0F0FFF0F0FFF0F0FF0FFFF0FF0FFF0FFFFFF0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777807FFFFFF +FFFF70FFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFF +FFFFFFFFF7FFF0FFF7FFFFFF8FFFFFFFFFFFF780FFFFFFFF00FFFFFFFFFFF0000FF0F0FFF0F0FF +F0F0FFF0F0FF0FFFF0FF0FFF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F777708FF000F00FF70FFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFFF777777777777770FFFFFF +FFFF0FFFFFFFFFF0FFFFF0FF000FF0000FF0000FF0FF0FFFF0FFF0F0FFF0FFF0FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777707FFFFFFFFFF70FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFF +FFF7FFFFFFFF8787878787878FFFFFFFFFFF0FFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFF +FFF0FFF0F0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F777807FFFFFFFFFF70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F +7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFFFFFFFF +F0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFF0FFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF00000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFFFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780F0F +8F8F8F8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8F +FFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F77770FF0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F777000007F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFFF8FFFFFFFFFFFFFFF +FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000 +007F7770FFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFF7777777777777770FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7778 +0F00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFF +FFFFFFFFFFFFF8707707807707780FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F77770877777777777770FFFFF000FFF0000FFFF0FFFF0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F777000007F7780FFFF878787878FFFFFFF77078077077070FFFFFFFFFFFFFFFFF0 +FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777807F37373737373 +70FFFF0FFF0FF0FFF0FFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFF7FFFFFFF7FFFFFFF +8F777777777780FFFFFFF0FFFFF0FFF0FFFFFFF0000FFF000FF0FF0FF0F0000FFF00F0FF0FF000 +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F777708F7373737373780FFFFFFFF0FF0FFFF0FF0FF0FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +8000007F7780FFFF8FFFFFFF8FFFFFFF7F777777000770FFFFFFF0FF0FF0FFF00FFFFF0FFFF0F0 +FFF0F0FF0FF0F0FFF0F0FF00F0FF0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777707F3737373737370FFFFFFFF0FF0 +FFFF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFF7FFFFFFF7FFFFFFF8FFFFFFFFFFF80 +FFFFFFF0FF0FF0FF0FF0FFFF0FFFFFF0FFF0F0FF0FF0F0FFF0F0FFF0F0FF0FFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +777708F7373737373770FFFFF000FFF0FFFF0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FF +FF8F00000F8F8F8F8FF877787878770FFFFFFFF0F0F0F0FF0FF0FFFF0FFFFFF0FFF0F0FF0FF0F0 +FFF0F0FFF0F0FF00000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777807F3737373737370FFFF0FFFFFF0FFFF0FF00FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F777000007F7770FFFF7FFFFFFF7FFFFFFFF777777777780FFFFFFFF0F0F0F0 +FF0FF0FFFF0FFFFFF0FFF0F0FF0FF0F0FFF0F0FFF0F0FF0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708F7373737 +373780FFFF0FFFFFF0FFFF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFF8FFFFFFF8FFF +FFFFF778700007770FFFFFFFF00FFF00FF0FF0FFFF0FFFFFFF000FF000F00FF0000FF0FFF0F00F +F000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F777707F3737373737370FFFF0FFF0FF0FFF0FFF0FF0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F777000007F7770FFFF7FFFFFFF7FFFFFFFF87770FF07780FFFFFFFF00FFF00FFFFFFFFFF0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777807FFFFFFFFFFFF70FFFFF000 +FFF0000FFFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFF878787878FFFFFFFF777700007 +770FFFFFFFF0FFFFF0FFFFFFFFFF0FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F7777087373737787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F77 +70FFFFFFFFFFFFFFFFFFFFF878777777780FFFFFFFF0FFFFF0FFFFFFFFFFF0000FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780F7737378FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFF777788778770FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FF878 +78FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFFFFFFF +FFFFFFFFF877777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7F777000007F7780FFFFFFFF8FFFFFFFFFFFFF7878787878FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F777000000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77800000 +7F7780877777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF7F777000007F7770777877117777780FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770F +00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F778008077737 +00000780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7F77780777777777777770FFFF0000FFF0000FF00FFF000FFFF0FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF7F777000007F7770F78F878733333770FFFFFF0000FFFFF000FFF00FF0FFF0FF0FF000 +FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708F3737373737370 +FFFF0FFF0F0FFF0F0FF0F0FFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780F0777F0773777080FFFFFF +0FFF0FFF0FFF0F0FF0F0FF0FF0FF0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF7F777807F7373737373780FFFF0FFF0F0FFF0FFF0FF0FFFFFFF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7770 +00007F7770FF87878787877000FFFFFF0FFFF0FF0FFFFFFF0FF0F0FFF0FF0FFF0F0FFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708F3737373737370FFFF0FFF0FF000 +0FF0FFF00000FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FF00000000006800FFFFFF0FFFF0FF00000F +F0FFF00FFFF0FF0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77 +7807F7373737373770FFFF0FFF0FFFFF0F0FF0F0FFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFF +FFFFFFFF08FFFFFFFF0FFFF0FF0FFF0F0FF0F0F0FFF0FF0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777708F3737373737370FFFF0000FFF000FFF00FFF000FFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF7F777000007F7780FFFFFFFFFFFFF80FFFFFFF0FFFF0FFF000FFF00FF0FF0FF00F +F000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777707F737373737 +3780FFFF0FFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7770FFFFFFF330FFF06FFF +FFFF0FFFF0FFFFFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF7F777708F3737373737370FFFF0FFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +777000007F7780FFFFF086600FF080FFFFFF0FFF0FFFFFFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777807FFFFFFFFFFFF70FFFF0FFFFF +FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F777000007F7770FFFFFF8780008800FFFFFF0000FFFFFF +FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7F7777087373737787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780 +FFFFFFF6808800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77780F7737378FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF7F777000007F7770FFFFFFF88000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77770FF87878 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F778000007F7780FFFFFFF00FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF7F77780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF7F777000007F7770000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000007F77770000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000007F777000007F77787878787878777787778778787787 +878787787878778787787787878778778778787787878787787778777787778777878778778777 +877878778777877878787878778787787778777877877878787787787877878787878787878787 +87878F777787878787878787878787787787878787878787787878787878787878787878787878 +7878787878787878787878787787787787787877877787778777877787878787878F778000007F +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777000007F77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777000007F77777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777F777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777F778000007F778777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777777777F7778777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777F777000007F7777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777F77777777777777777777777777777777777777777777777777777777777777777777 +77777077777777777077777777777777777777777777777777777777777777777777777F778000 +007F77777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777F777777777777777777777777777777777777 +777777777777777777777777777777777777077777777777770777777777777777777777777777 +7777777777777777777777777F777000007F778777770777770707077770777777000770770000 +770007707770077777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777777777777777777777777777F7777 +777777700007770007707770770770007707770770770077777700077077777777770770000077 +077707777777777777777777777777777777777777777777777777777F778000007F7777777707 +777707070777707777707770707077707077707077077077777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777F77777777770777707077707077707077077707077707077077 +077770777070777777777707707777777777077777777777777777777777777777777777777777 +77777777777F777000007F77877777700000770707777077777077707070777070777770777707 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777F777877777707777770 +777070777070770777770777070777707777707770707777777777077077777777770777777777 +7777777777777777777777777777777777777777777F778000007F777777777077707707077770 +777770777070707770700000707770777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777F7777777777077777707770707770707700000707770707770777777077707077 +777777770770777777777707777777777777777777777777777777777777777777777777777F77 +7000007F7787777770777077070777700007707770707077707077707077077077777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777F77787777770777777077707007707077 +077707007707077077077770777070777777777707700007777777077777777777777777777777 +77777777777777777777777777777F777000007F77777777770707770707777077777700077077 +000077000770077007777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777777F +777777777707777777000770700770077000770700770077007777770007700777777777077077 +7777077707777777777777777777777777777777777777777777777777777F778000007F777777 +777707077707077770777777777770777770777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777F7777777777077777777777777777707777777777777707 +777777777777777077777077770770777777777707077777777777777777777777777777777777 +777777777777777F777000007F7787777777707777070777707777777777707777707777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777F77787777770777 +707777777777777077777777777777077777777777777770777770777707707777777777070777 +77777777777777777777777777777777777777777777777F777000007F77877777777077770707 +777000007777777077777077777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777F777777777770000777777777777777777777777777777777777777777777 +770777707777707000007777707707777777777777777777777777777777777777777777777777 +7F778000007F777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777F7778777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777F777000007F7787777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777F77777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777F778000007F77 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777F777877777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777F777000007F777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777777777777777777777F7777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777F778000007F7787878777878787 +878787787878787878787878778787878778778787878787787787878788787787887788787878 +787877877878787878778787787878778878878778778787878787878778777877878778878778 +778878778778878778778F77777877878778778878778778878778778878778778878778778878 +778778878778778878778787878777878778788787877877877877877878787878787878787878 +78787F777000007F77777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777778000007F777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777700000 +7F7777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777778000007F77777777000000777777777777777777777700000007 +777777777777777777777700000007777777777777777777777777777000000077777777777777 +777777777777777770000000077777777707777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777000007F777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777077777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777000007F7777777770777770707700077777777777777000007770000707707777 +777777777770777707700077707770777777777777777707777700077700077077007777777777 +777707777077700077070000777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777000007F77777777707777707070777077 +777777777770777777077707070777777777777777707777070777077077707777777777777777 +077770777070777070707707777777777777077770770777070707770777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777780 +00007F777777777077777070707777777777777777707777770777070707777777777777770707 +770707777707070707777777777777770777707770707770707770777777777777770777707707 +777707077707777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777000007F7777777770777770707000007777777777777077 +777707770707077777777777777707077707000007070707077777777777777707777077707077 +707077077777777777777707777077000007070777077777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777778000007F77777777 +700007707070777077777777777770000777077707070777777777777770777077070777070770 +770777777777777777077770777070777070707707777777777777000000770777070707770777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777000007F777777777077777070770007777777777777707777777000070700 +777777777777707770770770007707707707777777777777770777770007770007707700777777 +777777770777707770007707000077777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777778000007F7777777770777777707777 +777777777777777077777777770777077777777777777077707777777777777777777777777777 +777707777777777777777077777777777777777707777077777777077777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777000007F77777777707777777077777777777777777770777777777707770777777777777707 +777707777777777777777777777777777777077777777777777770777777777777777777077770 +777777770777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777000007F777777777000007070777777777777777777 +700000777777070777777777777777077777070777777777777777777777777777000007777777 +777777707777777777777777770777707777777707777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777777777777777777777000007F7777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777778000007F77777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777000007F777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777778000007F7745444548544844444445854544844544548548485484585444484485484841 +444545448448544584484584585444485448544844444444445484444445484444445484444445 +484444445484444445484444445484444445484444445484444445484444445484444445484444 +445484444445484444445484444445484444445484444445484544485484454854544848548548 +548548548548548584844584854854858484777000007F77445444444844005484444484845444 +544444544445444448545454444541448444544545444844454544444445854448444854545848 +485444548485444548485444548485444548485444548485444548485444548485444548485444 +548485444548485444548485444548485444548485444548485444548485444548485444548485 +44454848444445484444484444444444444444444444444444544444444444444454778000007F +77484858458450780445845845444848484FF48454844584544484484584444545848484484584 +454844FF4845844445845FF4484844454448484454448484454448484454448484454448484454 +448484454448484454448484454448484454448484454448484454448484454448484454448484 +454448484454448484454448484454448484454545854844458454000000000000000000000000 +0000480000000000000044777000007F77454444444404840454444444485445445FF444845484 +4444845445444445844444445445444548444FF454444445844544FF4545441445045441445045 +441445045441445045441445045441445045441445045441445045441445045441445045441445 +045441445045441445045441445045441445045441445045441445045441445045441444844445 +45844484F7787878778770F777787878787045F777878777787048778000007F77440000000047 +8008484FFFFFF44FF4FF4FFFFF44FF54FFFF44FF844FFFF44FF854544548458445454FF84FFFFF +F44FF484FF44445444845445444845445444845445444845445444845445444845445444845445 +444845445444845445444845445444845445444845445444845445444845445444845445444845 +4454448454454448454454448544548444454545F7777777777770F777777777777044F7777777 +77778054777000007F77847F370087883305454FF545454FF4FF4FF54FF4FF4FF54FF4FF54FF84 +FF4FF448484845445484484FF54FF54484145454FF848448544448448544448448544448448544 +448448544448448544448448544448448544448448544448448544448448544448448544448448 +544448448544448448544448448544448448544448448544448448544448445484448444F77000 +00777770F770000000778084F777077707777044778000007F77447F777707337304448FF48444 +84FFF48FF44FF4FF4FF44FF4FF44FF44448FF454454444844444844FF44FF48454444844FF4454 +844458454844458454844458454844458454844458454844458454844458454844458454844458 +454844458454844458454844458454844458454844458454844458454844458454844458454844 +45845484445845484445845484F7700000777780F770777770777054F777007007777048777000 +007F77458F877770333304845FF4448544FFF45FF48FF4FF4FF48FF4FF48FFFFFF4FF444544FFF +458454545FF48FF44484484548FF45445458445445458445445458445445458445445458445445 +458445445458445445458445445458445445458445445458445445458445445458445445458445 +4454584454454584454454584454454584454454584454454504444544F7777777777770F77077 +7770777044F777700077778045777000007F77847F7F7770377305444FFFFF444FF4FF4FF44FF4 +FF4FF44FF4FF44FF44FF4FF484848485444848444FF44FFFFF44544454FF448484445448484445 +448484445448484445448484445448484445448484445448484445448484445448484445448484 +445448484445448484445448484445448484445448484445448484445448484445448484445448 +484454854484F7777777777770F770777770778084F777700077777044777000007F77547F87F7 +70733304854FF544584FF4FF4FFFFF54FF84FFFF44FFF54FFFF54FFF45445444845445484FF54F +F544584FF844FF8444548448444548448444548448444548448444548448444548448444548448 +444548448444548448444548448444548448444548448444548448444548448444548448444548 +44844454844844454844844454844844454844448454F7777777777780F770777770777054F777 +007007777084777000007F77447F7F7F07377304544FF4854444584544544544FF454454454454 +454454454454454454454454454FF48FF48544445445FF45454454545454454545454454545454 +454545454454545454454545454454545454454545454454545454454545454454545454454545 +4544545454544545454544545454544545454544545454544545454544545454544545454544F7 +777777777770F770000000778044F777077707778054778000007F77488F377073733304448FF4 +444450444448448448FF444844844844844844844844844844844844844FF44FF44444504484FF +448448448448448448448448448448448448448448448448448448448448448448448448448448 +448448448448448448448448448448448448448448448448448448448448448448448448448448 +448448448448448448448448448448F7777777777770F770000000777048F77777777777704477 +7000007F774477337377777745845FFFFFF845845845845845FF58458458458458458458458458 +45845845845845FF5FFFFFF845845FF48548548548548548548548548548548548548548548548 +548548548548548548548548548548548548548548548548548548548548548548548548548548 +54854854854854854854854854854854854854854854854854854854854854F7777777777780F7 +77777777778054F777777777778084778000007F77544777378444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +4444444444444444FFFFFFFFFFFFF0FFFFFFFFFFFFF044FFFFFFFFFFFFF044777000007F774850 +777784584584584584584584584584584584584584584584584584584584584584584584584584 +584584584584584584584584584584584584584584584584584584584584584584584584584584 +584584584584584584584584584584584584584584584584584584584584584584584584584584 +584584584584584584584584584584584584584584584584584584584584584584584584584584 +5845845845845845778000007F7744444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444777000007F77777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777000007F777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777778000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7000007777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777700000040000002701FFFF040000002701FFFF030000000000 +}\plain\f6\fs18 +\par The Common Controls DLL +\par The COMCTL32.DLL file that comes with the M6 prerelease of Chicago contains all of the code to implement the Image List and TreeView, and a lot more controls (see Figure 2). (I used the tools that come with this version of the Chicago SDK to build all the sample code shown here.) Extra flavors of this DLL will be made available in Win32s and Win32 on Windows NT versions so that an application can run on all three platforms (Chicago, Windows 3.1, and Windows NT) and take advantage of these nifty Windows doo-dads. These extra flavors of the DLL should be available once the final Chicago product ships. To use either an Image List or TreeView, you must include COMMCTRL.H and link with the COMCTL32.LIB file. +\par \plain\f6\fs18\b Figure 2 Elements in the Common Control DLL\plain\f6\fs18 +\par +\par \pard\plain\f6\fs18 Element\tab Brief Description\tab App Using a Similar Control Today +\par Header Control\tab A segmented bar that divides rows or columns, mouse adjusts widths or heights\tab All spreadsheets use a similar control to adjust rows and columns +\par Image List\tab Graphics aid to easily manage bitmap images\tab DRAGDROP sample program +\par Toolbar\tab A more graphical menu\tab Take your pick +\par Status Bar\tab A bar along bottom of screen to convey nformation to useri\tab Take your pick +\par TrackBar\tab A much nicer scroll bar\emdash can look like a slider from a stereo mixer console\tab Multimedia Viewer +\par Spinner Control (aka UpDown)\tab A tiny scroll bar that can be linked with a companion control; MUSCROLL mimics it\tab Control Panel's Set Time applet +\par Progress Indicator\tab A gas gauge control to indicate how far along something is\tab Most setup programs +\par Hotkey\tab Special edit control to allow users to enter Ctrl/Shift/Alt combinations\tab Word 60 Tools Customize Keyboard Shortcut key edit control +\par ListView\tab A non-heirarchical list box that easily supports columns\tab The right pane in the Explorer +\par TreeView\tab A hierarchical list box that supports "trees"\tab The left pane in the Explorer and the TREEVIEW sample program +\par Tab Control\tab A very graphical radio button that looks like folder tabs\tab Word 6.0, Excel 5.0 use them all over in their dialog boxes +\par \pard\li180\ri240\plain\f6\fs18 Image Lists +\par An Image List is just another drawing tool, just as fonts, pens, brushes, bitmaps, regions, and palettes are today. Image Lists are essentially bitmap managers with some very sassy APIs. I like to think of an Image List as a roll of film. Each exposure on the roll of film is an image; the entire roll of film is called an Image List. Just as your typical roll of film has exposures numbered from 1 to 24, an Image List has images numbered from 0 to n\endash 1, n being the number of images you specify (see Figure 3). And, as with a roll of film, each image is the same size. Certain Chicago controls (such as the Tree View) use this roll of film to automatically draw the images besides their items\emdash you no longer need to implement all that owner-draw code for a control to get your graphics displayed in the list. The TreeView section of this article will explain how this is done. +\par \plain\f6\fs18\b Figure 3 An Image List as a Roll of Film\plain\f6\fs18 +\par {\pict\wmetafile8\picw9790\pich2004\picscalex99\picscaley99\picwgoal5564\pichgoal1139 +010009000003751C000000002A1C00000000050000000B0200000000050000000C02D4073E2603 +0000001E00070000001604D4073E2600000000050000000C02DA075826050000000B0200000000 +030000001E00070000001604DA07582600000000050000000C027404BD15050000000B02000000 +00050000000B02000000002A1C0000430F2000CC0000004C007301000000007404BD1500000000 +28000000730100004C000000010004000000000000000000130B0000130B000000000000000000 +00000000000000BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 +FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000FFFF000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFF0000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +00FFF0000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000FF0000000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000F0000000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000F0000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFF33333FFFFFFFFFFFFFFFFFFF +FFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF333333FFFFFFF333333FFFFFFFFFFFFF0000000 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFFFF3833F333FFFFF33333383FFFFFFFFFFFF000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFFFF333FF33384843333FF333FFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFF +F000000B3B3B3B3B3B3000000FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF333FF +FF33384383384843333333FFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFF0000033B3333333 +B333B3B300000FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF333FFFF333F83338484 +83339333FFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFF00003B3B3B3B3B3B3B3B3B333333000 +0FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF33FFFFF39331313313931931348FFFFFF +F000000000FFFFFFFFFFFFFFFFFFFFFF000033B33333333B3333333B3B3B3B0000FFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFF333FFF313339333139333313338488FFFFF000000000FFFF +FFFFFFFFFFFFFFFFF000B3B3B3BBB3B3B3B3B3BB333333B333000FFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFF333919191383333333333F33FF4844FFFFF000000000FFFFFFFFFFFFFFFFFF +FF0003B3333333333B3333B333B3B3B3B3B3B000FFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF +FFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +F3833133338F333333333FFF33FFFF88FFFFF000000000FFFFFFFFFFFFFFFFFFF0003B3B3B3B3B +3B3B3B3B3B3B33B33333333B000FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF0000F0 +0F0F00F0F000F0F000F0F00F00FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0 +0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0 +F000F00FFF00F000F000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF3933318484843 +3848FFFFFF333FFF84FFFFF000000000FFFFFFFFFFFFFFFFFF0003333333B333B3333B3333B33B +3B3B3B3B333000FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF0000F00F0F00F0F00FF0 +F00FF0F00F00FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0F00000FFF000FF +F00FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0F00F00F000F00F +0F0000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF31393FFF484883484FFFFFF3333 +3338FFFFF000000000FFFFFFFFFFFFFFFFF000B3B3B3B3B3B3B3B3B3B3B3B33333333333B3B300 +0FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF0000FFFF0FFFF0F0F0F0F0F0F0FFFF00FF +FFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0F0000F000F0F00F0F000F0FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0F0FF00F000F000F00000F000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF33384FFFFFFF33F88FFFFFF83338334FFFFF00000 +0000FFFFFFFFFFFFFFFF0003B333B3333333333B3333B333B3BBB3B3B3B3333000FFFFFFFFFFFF +FFFF000FFFFFFFFFFFFFFFFFFFFFFF0000F00F0F00F0FF00F0FF00F0F00F00FFFFFFFFFFFFFFFF +FFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0FFF00F000F0F0FF0F000F0FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0F000F0F000F00F0F000F0F00FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFF31348FFFFFFF33F4383833833383348FFFFF000000000FFFFFFFFFF +FFFFFF00333B3B3B3B3B3B3B3B3B3B3B3B33333B33333BBB3B00FFFFFFFFFFFFFFFF000FFFFFFF +FFFFFFFFFFFFFFFF0000F00F00FF00F000F0F000F00FF000FFFFFFFFFFFFFFFFFFFFFFF000FFFF +FFFFFFFFFFFFFFFFFFFFF0F00F0F000F0F0000F000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFF0FFFF000FFF00F000F0F000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFF19F848FFFFFF333333333333333388FFFFFF000000000FFFFFFFFFFFFFFF00B3B33B3 +33333333B3333B3333333B3B3B3B3B33333B300FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFF +FF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFF +FFFFFFF0FFF000FFF000FFF00FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF +FFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF31348 +8FFFFFF3333338FFFFF333848FFFFFF000000000FFFFFFFFFFFFFFF00333B3B3B3B3B3B3B3B3B3 +B3B3BB33333333333B3B3B300FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0000000 +0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF333F44FFF19331FF848 +FFFFF833484FFFFFF000000000FFFFFFFFFFFFFF003B3B3333333333B3333B3333B333B3B3B3B3 +B3B333333300FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00777877800FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00877778F00FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF339F88FF13313393F84FFFF333884FFFF +FFF000000000FFFFFFFFFFFFFF00333B3B3B3B3B3B3B3B3B3B3B3B3B3333B3333333BB3B3B00FF +FFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0778787787780FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFF8F8FFFF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF000FFFFFFF333184FF331F3131948FFFF338848FFFFFFF000000000FF +FFFFFFFFFFFF003B333333333B3333B3333B3333333B3B3B3B3B3B333B3300FFFFFFFFFFFFFF00 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF078000000000780FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF +F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0933333333330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0FF000000000FF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFF +FFFFFFF000FFFFFFF313348FF13FFFF33348FFF833348FFFFFFFF000000000FFFFFFFFFFFFF003 +33B3B3B3B3B3B3B3B3B3B3B3B3B33B33333333333B3B3B300FFFFFFFFFFFFF000FFFFFFFFFFFFF +FFFFFFFFFFF0000FF08700777787800770FF000FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFF033000000000330FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF +FFFFFFFFFFFFF0000FF0FF00FFFFFFF00FF0FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFF +FFF331984F931FFFFF1384FFF333384FFFFFFFF000000000FFFFFFFFFFFFF003B3333B33B33333 +B3333B333B3333B3B3BBB3B3B3B33333300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF +0000078778787777780000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF00 +00FF03300333333900330FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFF +FF00000FFFFFFFFFFFF70000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF383318F333F +FFFF3358FFF333348FFFFFFFF000000000FFFFFFFFFFFFF003333B3B3B3B3B3B3B3B3B3B3B3B3B +333333333333B33BBB300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF078007870000 +8780780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0000033333333 +333330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0FF00FFF00 +00F830370FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF333138F31FFFFFF3184FFF383 +884FFFFFFFF000000000FFFFFFFFFFFFF00B3B333333333B3333B333333333333B3B3B3B3B3B3B +3333300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000FF +FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0330033300003330330FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF00000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF33F398333FFFFFFF848FF333338FFFFFFFFF000 +000000FFFFFFFFFFFFF00333B3B3B3B3B3B3B3B3B3B3B3B3B33B3333333333333B3B300FFFFFFF +FFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF078778000000000787780FFFFFFFFFFFFFFFFFFFF +FFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000FFFFFFFFFFFFFFF +FFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF033333000000000F73F30FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF000FFFFFFF833313313FFFFFF8484FF333334FFFFFFFFF000000000FFFFFFFF +FFFFF003B333333B333333B3333B33333333B3B3B3B3B3B3B3BB33300FFFFFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFFFFFFFFF070000787000878000770FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FF +FFFFFFFFFFFFFFFFFFFFFFFF073737000000000737170FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +0FFFFFFFFFFFFFFFFFFFFFFFF0300003390003FF000FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F000FFFFFFF3333383313FF848848FFF333338FFFFFFFFF000000000FFFFFFFFFFFFF003333B3B +3B3B3B3B3B3B3B3B3B3B3B3333B3333333B3333B300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFF +FFFFFFFF0008787777707777778000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFF +FFFFFFFFFF030000717000717000730FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFF +FFFFFFFFFF000333333330F3FF3F1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33 +13333934848848FFFF338384FFFFFFFFF000000000FFFFFFFFFFFFF00BBB3B3333333B3333B333 +3333B333BB3B3B3B3B3B3B3B33300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF000F07777 +0000787000077780000FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF00037 +37373707373737000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF000F039 +3300003FF00003F370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF3833333318484FFF +FFFF3333FFFFFFFFFFF000000000FFFFFFFFFFFFF00333B3B3B3B3B3B3B3B3B3B3B3B3B3333333 +33333333333B300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0877048840708484087 +70FFF0FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF000F017370000073000073 +030000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF0333088480F048840 +FF30FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF433931333913FFFFFFFFF3833FFFFFF +FFFFF000000000FFFFFFFFFFFFF003B3333333333333B3333B33333333B3BBB3B3B3B3BBB3B330 +0FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF077804848070884807780FFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFF073703833030838307170FFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF0333084840F048480FFF0FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF838313F3313131FFFFFF3833FFFFFFFFFFFF000000000 +FFFFFFFFFFFFFF0033BB3B3B3B3B3B3B3B3B3B3B3BBB33333333333333333300FFFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0870878407047880780FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF000FFFFFFFFFFFFFFFFFFFFFFFFFF037103333070333300730FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF03304788030878403F0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF000FFFFFF4433F33FF333933919FF33333FFFFFFFFFFFF000000000FFFFFFFFFFFFFF +003B333333333B3333B333333B3333B3B3B3BBB3B3B3B3B300FFFFFFFFFFFFFF000FFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0770484808084840770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF +FFFFFFFFFFFFFFFFFFF0370343303038830730FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFFFFFF033084840F048480FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FF +FFFF8833F193FF338313313138333FFFFFFFFFFFF000000000FFFFFFFFFFFFFF0033B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3333B33333333B33300FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0087000077700007800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF +FFFFF0730333307033330380FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFF +FFFFFF0033000033800003300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF4833F313FF +3333F3331313333FFFFFFFFFFFF000000000FFFFFFFFFFFFFFF00333B333333333B3333B333333 +3333B3B3B3B3B3B3B3B00FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF007878787 +87877700FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF003100007 +3700003700FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFF0033339 +3FFFFF3F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF8433FF331FF333FFFF333393 +1391FFFFFFFFF000000000FFFFFFFFFFFFFFF003B3B3B3BBB3B3B3B33B3B3B3B3B3BB333333333 +B333300FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0080777777777780700FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00737173737373700FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF00F033333337F730F00FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF4833FF3131FF338FFFFFF33133139FFFFFFFF0 +00000000FFFFFFFFFFFFFFFF00333333333B3333BB333333333B333BB3BBB3B3B3B300FFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777008787878007870FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0080733171717380800FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0F8F0033333F800F7F0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000FFFFFFF433FFF3393F333FFFFFF338FF333133FFFFF000000000FFFFFF +FFFFFFFFFF0003B3B3B3B3B3B333B3B3B3B3B3B333B3333333333000FFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0877800000000078780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFFFFFFFFFFFFFFFFFFFFF0070003737373007070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFF0778F000000000F8FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF000FFFFFFF8334FFF131F883838383333FFF13393FFFFF000000000FFFFFFFFFFFFFFFFF000 +3333333333B3B33B333B333333B333B3B3B3B3000FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFF078700FFFFFFF007770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFF +FFFFFFFFFFFFF0708700000000070700FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF +FFFFFFFFFFFFFF0F8F00FFFFFFF00FF80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF +3388FFF33343333333333338FFFF331FFFF000000000FFFFFFFFFFFFFFFFFF0003B3BBB33B3B33 +3B3B3B3B3BBB3B3B3333333000FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +000FFFFFFFFF00080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0 +07000FFFFFFF008080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF +0F000FFFFFFFFF000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33848FF131F333 +33FFF333833FFF313FFFF000000000FFFFFFFFFFFFFFFFFFF00033333B33333B333B333B33333B +333B33B3000FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF08000FFFFFFFFF0 +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF3348488F9338338848F848333FFF +F31FFFF000000000FFFFFFFFFFFFFFFFFFFF0003B333B3B333B3B3B3B3B3B333BB33B33000FFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33F4848431333F4884848483833FF33FFFF0000000 +00FFFFFFFFFFFFFFFFFFFFF00033B333B3B333333333333BB333B333000FFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFF33FFF8433931FFFF484848433333391FFFF000000000FFFFFFFFFFFF +FFFFFFFFFF000033B3B333BB3BBB3BBB3B333B330000FFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFF33FFFF3333131FFFF888FFFFF3133138FFF000000000FFFFFFFFFFFFFFFFFFFFFFF000 +03333B3B3333333333333B3330000FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33FFF3 +333F3393FFF444FFFF39331333FFF000000000FFFFFFFFFFFFFFFFFFFFFFFFF000003333B3B3B3 +B3B3B33300000FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33F33333FFF133193933 +13331313FFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFF000000333333333333000000FFF +FFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF3333333FFFFF31331313331333FFFFFFFF +F000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFF33383FFFFFFF488488FFFFFFFFFFFFFFFFF000000000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFF3333FFFFFFFFF8484FFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +FF3333FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF333FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF333FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000 +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFFF33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000FFFFFF00000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000FFFFFF0000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000FFF +FFF0000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFF0000000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFF0000000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFFFFFFF0000000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFFFFFFF00000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFF0000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFF000 +00040000002701FFFF040000002701FFFF030000000000 +}\plain\f6\fs18 +\par The internal means of storage used by the Image List is a bitmap. Therefore, each of your images is simply a portion of a bitmap. This bitmap can have a maximum size of 32K pixels by 32K pixels. Therefore, the maximum number of images supportable by one Image List is 32K, each image being only one pixel wide (and up to 32K pixels high). To figure out the maximum number of images your Image List can support, simply divide 32K by the width of one image. The maximum height of an image is always 32K pixels, since the Image List always stores the individual images in one row just like a roll of film does\emdash a long strip of images. +\par There are two fundamental flavors of Image Lists: masked and unmasked. A masked Image List draws the image exactly like an icon is drawn today: you have two images, the real image and the mask. The mask defines transparent pixels in your image so that when your image is drawn on a DC, the background shines through (think of it as a photographic slide that you project onto the DC). The unmasked Image List just splats the entire image down like a BitBlt(... SRCCOPY), obliterating all the pixels underneath it (sort of like a photographic print that you paste on top of the DC). For almost all Image Lists, expect to use the masked version. +\par Now since the Image List is a software object and a roll of film is not (at least not yet for most of us), there are some extra bonus features that you get with the Image List that you don't get with a roll of film, the most important being that an Image List does not have a fixed number of images. An Image List is a practically endless roll of film that grows if you add more images to it. Also, the images in an Image List can be changed whenever you want, and you can even delete or insert images. Plus, so you can pretend to be George Lucas, the Image List lets you do some special effects with the images, such as dithering. +\par Some of the new Chicago controls use Image Lists automatically: you simply provide a handle to the Image List to the control and let the control do the rest. A cornucopia of APIs for the Image List are available so that you can also use them easily in your own custom controls and applications. I will cover these APIs in varying amounts of detail here. +\par Creating an Image List +\par Before you create your Image List, as with any GDI object, you need to figure out exactly what you want. If you're going to buy a roll of film, you need to decide how many exposures (size of the Image List), what type of picture you want (prints or slides), and what format film you want to use (35mm, 6 x 7, 4 x 5, and so on). So, getting back into SDK mode, let's look at the first API, ImageList_Create: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 HIMAGELIST ImageListCreate(int cx,// width of one image +\par int cy, // height of one image +\par BOOL fMask, // Masked or Unmasked +\par int cInitial, // Number of images +\par int cGrow ); // Growth factor +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 The cx and cy parameters specify the size of one image in the list. The fMask parameter specifies whether you want prints (FALSE) or slides (TRUE). The cInitial specifies the number of exposures in your roll of film, and the cGrow specifies the number of extra exposures to tack onto the end of the roll of film at one time if you need to add more exposures. Let's look at an example. If you specify 24 for cInitial and 4 for cGrow, when you try to add a 25th image to the Image List, your Image List will grow in size from 24 images to 28 images. Why not grow the Image List by one? Enlarging the Image List is an expensive operation on the CPUCCE (that's the CPU cycle commodity exchange). Growing an Image List involves creating new bitmaps, internal data structures, copying old data onto the new data, and freeing the old data. +\par If you plan on having an Image List that changes frequently, use a larger value for cGrow to minimize the number of times the Image List is actually grown. If you plan to have a fairly static Image List, use a smaller value for cGrow; this will conserve memory. The return value from this function is of type HIMAGELIST, which is how you will reference the entire Image List. +\par Once you have created the Image List, it is time to add images to it. There are three basic ways to add an individual image to the Image List. If you hand the Image List an icon, it will make a copy of the pixels in the icon and add them as an image. Or you can pass the Image List a pair of device-dependent bitmaps (possibly generated using LoadBitmap); the first bitmap is the actual image, and the second bitmap is the mask of the image (unless of course your Image List is not masked). Finally, you can give the Image List a single bitmap and specify that a certain color pixel should be considered the transparent pixel. For masked Image Lists, you would almost always use the last method, unless you have no unused colors that you can specify to be the magic transparent color. In that case, you'd have to build your mask bitmap and use the first method described to add the image (the API is called ImageList_Add). +\par Let's look at the three core APIs for adding images to the Image List (see Figure 4). All of these APIs will add images to the end of your Image Lists, and return the image number (exposure). The handle to the Image List and the image number are the two key pieces of information that Image List-enabled Chicago controls (or your custom controls) require. +\par \plain\f6\fs18\b Figure 4 APIs for Adding Images\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 int ImageList_Add (HIMAGELIST himl, // Handle to the Image List +\par HBITMAP hbmImage, // Handle of bitmap +\par HBITMAP hbmMask ); // Handle of Mask bitmap +\par // (NULL if not masked) +\par +\par int ImageList_AddMasked (HIMAGELIST himl, // Handle to the Image List +\par HBITMAP hbmImage, // Handle of bitmap +\par COLORREF crMask ); // Color of "Transparent" Pixel +\par +\par int ImageList_AddIcon (HIMAGELIST himl, // Handle to the Image List +\par HICON hicon); // Handle of icon +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 These functions copy the bitmap pixels into the private data structure of the Image List. Therefore, you need to do your own housekeeping: if you do not delete the hbmImage and hbmMask bitmaps at some point after adding them to the Image List, your system resources will drop faster than that first gut-wrenching plunge of the Coney Island Cyclone roller coaster. +\par One API allows you to do a wham-bam-slam initialization of an Image List (see Figure 5). ImageList_LoadBitmap requires you to create a little filmstrip of images using Windows Paintbrush (or some other bitmap editing facility), and then store this bitmap in your resource file. You can then use the ImageList_LoadBitmap API to load that bitmap, and let the API divvy up the filmstrip into individual frames and create the entire Image List for you. If you want to dynamically assemble Image Lists, then you need to use the above bunch of APIs. +\par \plain\f6\fs18\b Figure 5 ImageList_LoadBitmap\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 HIMAGELIST ImageList_LoadBitmap(HINSTANCE hi, // Instance handle to load \tab // bitmap +\par LPSCTR lpBmp, // Points to the resource \tab // identifier +\par int cx, // Width of one image +\par int cGrow, // Growth factor +\par COLORREF crMask); // Color of "Transparent" +\par // pixel +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Maintaining the Image List +\par Of course, there are some handy APIs to allow you to modify and delete the images in the Image List. All of them are self-explanatory (see Figure 6). +\par \plain\f6\fs18\b Figure 6 APIs for Modifying and Deleting Images\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 BOOL ImageList_Remove(HIMAGELIST himl, // Handle to the Image List +\par int i ); // Image Number +\par +\par BOOL ImageList_Replace (HIMAGELIST himl, // Handle to the Image List +\par int i, // Image Number to replace +\par HBITMAP hbmImage, // Handle of bitmap +\par HBITMAP hbmMask ); // Handle of Mask bitmap +\par +\par int ImageList_ReplaceIcon(HIMAGELIST himl, // Handle to the Image List +\par int i, // Image number to replace +\par HICON hicon); // Handle of new icon +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Of course, just to make things fun, ImageList_Replace returns TRUE or FALSE, depending on success or failure, while the ImageList_ReplaceIcon returns the index or \endash 1, depending on success or failure. And just as with the Add family of functions, you need to delete the hbmImage and hbmMask bitmaps after you have called these APIs to avoid leaking memory. +\par If you call ImageList_Remove, all of the images beyond the image you just removed will shift down by one. It's just as if you deleted an item from an array. Therefore, if you have the image numbers stored away in some control (such as the TreeView), you really don't want to call this function unless you are willing to update all of the items in the control(s) using this Image List. +\par After you have had all your fun with your Image List, use the ImageList_Destroy API to clean up your Image List and free up any chunks of memory associated with the Image List. Its only parameter is the handle to the Image List: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 BOOL ImageList_Destroy(HIMAGELIST himl); +\par // Handle to the Image List +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 You can also find out just about anything you want to know about the actual images in the Image List. These APIs allow you to count the number of images in the list, determine the size of an image, determine the size of the icon inside the Image List, or get detailed information about the bitmap representation of an image inside the Image List (see Figure 7). +\par \plain\f6\fs18\b Figure 7 APIs for Getting Image Information\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 int ImageList_GetImageCount(HIMAGELIST himl); // Handle to the Image List +\par +\par BOOL ImageList_GetImageRect(HIMAGELIST himl, // Handle to the Image List +\par int i, // Image Number +\par RECT FAR* prcImage); // Points to RECT +\par // receiving info +\par +\par BOOL ImageList_GetIconSize(IMAGELIST himl, // Handle to the Image List +\par int FAR * cx, // points to cx receiving \tab // info +\par int FAR * cy); // points to cy receiving \tab // info +\par +\par BOOL ImageList_GetImageInfo(HIMAGELIST himl, // Handle to the \tab // Image List +\par int i, // Image number +\par IMAGEINFO FAR* pImageInfo); // Pointer to +\par // IMAGEINFO +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 The first three functions in Figure 7 are straightforward. The last one, ImageList_GetImageInfo, lets you get very detailed information about the actual bitmap used when the image is drawn. The IMAGEINFO structure contains this information, most of which is standard bitmap nomenclature (see Figure 8). +\par There is also a way to actually create an icon based on the image inside an Image List. ImageList_ExtractIcon will create a new icon and fill it in for you. +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 HICON ImageList_ExtractIcon(HINSTANCE hAppInst, +\par // Instance of app to own icon +\par HIMAGELIST himl, +\par // Handle to Image List +\par int i); +\par // Image number +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18\b Figure 8 IMAGEINFO\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 typedef struct _IMAGEINFO \{ +\par HBITMAP hbmImage; // bitmap containing the images +\par HBITMAP hbmMask; // mono bitmap containing the mask (if applicable) +\par int cPlanes; // number of color planes in hbmImage +\par int cBitsPerPixel; // bits per pixel in hbmImage +\par RECT rcImage; // Bounding rectangle of the image in the +\par // Image List bitmap +\par \} IMAGEINFO; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 This is a great way to manufacture icons in a hurry (I expect to see some really sizzling icon editors show up after Chicago ships). One thing to remember: the icons you get are brand new icons\emdash they are not connected in any way to the image inside the Image List. +\par Special Effects +\par The two types of special effects provided by the Image List are merging and dithering (see Figure 9). Merging Image Lists is like the Hollywood bluescreen matte special effect: the second image is drawn over the first image using the second image's mask, and a handle to a brand-new third Image List is returned. For example, the first Image List could have a star field, and the second list could have the Death Star. Merge the two together, and you have the Death Star floating in space. Cool. +\par \plain\f6\fs18\b Figure 9 Merging and dithering.\plain\f6\fs18 +\par {\pict\wmetafile8\picw3060\pich1423\picscalex99\picscaley99\picwgoal1739\pichgoal809 +010009000003E10600000000960600000000050000000B0200000000050000000C028F05F40B03 +0000001E000700000016048F05F40B00000000050000000C029405FD0B050000000B0200000000 +030000001E000700000016049405FD0B00000000050000000C022A03CC06050000000B02000000 +00050000000B020000000096060000430F2000CC00000036007400000000002A03CC0600000000 +280000007400000036000000010004000000000000000000130B0000130B000000000000000000 +00FFFFFF00FFFFCC00FFCCCC00CCCCCC00FFFF9900CCFF9900FFCC9900CCCC9900999999009999 +66000099660099993300EEEEEE00DDDDDD00AAAAAA0000000000B999B99B9B99B9B99B99B99B99 +B99B99B99B9B9B99B9B9B99B9B9B99B99B99B9B9B9B9B9B99B9B9B99B9B99B99B9B9B99B9B9B9B +9B99B99B99B90000999B99B999B99999B99B99B99B99B99B99B999B99B999999B999B99B99B99B +99999B999999B999999B9999B99B999B99B999B999B99B99B99B990000B9B9B99B9B9B9B9B9B99 +B99B99B99B99B99B9B99B99B9B9B99B99B99B99B99B9B9B99B9B9B99B9B9B9B9B99B99B9B99B9B +9B9B9B9B99B99B99B900009B999B999999B99999B99B99B99B99B99B9999B99B99B999B99B99B9 +9B99B99B999B99B999B99B9999999B99B9999B999999999999B99B99B9990000999B99B9B9B99B +9B9B99B99B99B99B99B99B9B9B999B9B9B99B99B99B99B99B99B99B99B9B99B9B9B9B9B99B99B9 +B9B9B9B9B9B9B999B99B9B9B0000B9B99B999B99B999B99B99B99B99B99B99B9999999B999999B +99B99B99B99B99B99B99B9999B99999B9999B99B9999999B999B999B9B99B999B90000999B99B9 +B99B99B99B99B99B99B99B99B99B9B9B9B9B9B9B99B99B99B99B99B99B999B9B9B99B9B9B99B9B +9B99B9B9B9B99B99B9B999B99B9B9900009B99B9999B99B99B99B99B99B99B99B99B99B999B999 +B999B99B99B99B99B99B99B9999999B99B999B99B999B9999B999B99B9999B9B9B9999B90000B9 +9B99B9B9B999B99B99B99B99B99B99B99B9B9B9B9B9B9B99B99B99B99B99B99B9B9B9B9B99B9B9 +B99B9B9B9B9B99B9B99B99B9B9B999B9B999000099B99B9999999B99B99B99B99B99B99B99B999 +99999999999B99B99B99B99B99B999B999B99B999999B9999999B99B9999B99B9999999B999B9B +0000B99B99B9B9B9B9B999B9B99B999B9B99B999B9B9B9B9B9B9B9B99B99B99B99B99B9B9B9B9B +99B9B9B99B9B9B9B9B99B9B99B99B9B9B9B9B9B99900009B99B99B999B999B9B999B99B9B999B9 +9B9B999B999B999B999B99B99B99B99B9999999999B9999B9B9999B99999B9999B99B99B999B99 +999B9B0000999B99B99B999B99999B999B9999B999B9999B999B999B99B9B99B99B99B99B99B9B +9B9B9B99B9B9999B9B99B9B999B9B99B99B9B9B9B9B9B9990000B9B99B99B999B99B9FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF9999B99B99B99B99B9F9F9F9F9FBF9F9FBF9F9FBF9F9FBF9F9B99B99 +9999999B99B90000999B99B99B9B9B99BE3DD3DD3DD3DD3DD3DD3DD3DD3D3D3F9B9B9B99B99B99 +B99B939393939D939D9DBD939D939D9D9DB99B99B9B9B9B9B9B99B00009B99B99B99B999B99808 +FE8FE8FE8FE8FE8FE8FE8FE8FEEFB99999B99B99B99B99EBE9E9FBE989FBE989FBE989FBE9899B +99B99B999B99999B990000B99B99B99B99B999B9E0EF0EF0EF0EF0EF0EF0EF0EF0E8FB9B9B9B99 +B99B99B99B989EB09F98909F98909F9890BF989FB99B9B999B99B9B9B99B000099B99B99B99B99 +9B99BE08F3EF3EF3EF3EF3EF3EF3EF3F999999B99B99B99B99B9998989DBF9EBDBF9EB39F9E9D9 +F9B999B99999B99B999B99B90000B99B99B999B9B9B9B9980D3DDD3D3D3D3D3D3D3D3D3D3F9B9B +9B9B99B99B99B99B9B90939D93939D939D93BDBDBDBD9B9B9B9B9B9B99B9B9B99B00009B99B99B +99999B999B9E03DB93D3D3D3D3D3D3D3FD3DDF99B99999B99B99B99B999989DB9BDBD93BD93BD9 +39393939F9999999B999B999999B990000999B99B9B9B9B99B999803DAAD3D3D3D3D3DFFFFFFF3 +3F9B9B9B9B99B99B99B99B9B90BD9A93939393939F9F9F9F939B9B9B9B99B99B9B9B99B90000B9 +B99B999B9999B99B9E03D3DD3D3D3D3D3D8E8EE8EDDFB99999B99B99B99B99B99989D9393BD9D9 +39D939E989EBD9F9B999B99B99B999B99B990000999B99B9B9B9B99B99B80D3D33D3D3D3D3D3D3 +D33D333F99B9B99B99B99B99B99B9B90B3939D93BD93BD93BD939D93B999B99B99B99B9B99B99B +00009B99B99999999B99B99E0000000000000000000000000F9B999B99B99B99B99B99B9E90909 +0B090B090B090B090B09F9B99B99B99B9999B99B990000B99B99B9B9B9B99B99B98D3DD3D3D3D3 +D3D3D3DD3DDDF9B9B9B99B99B99B99B99B99B89DBD9393939393939393939F9B99B99B99B99B9B +9B999B000099B99B999B9999B99B9998EE8E8FFFFFFFFFFFE8EE8FB9999999B99B99B99B99B99B +9989EBE9F9F9F9F9F9F9EBE9F9B99B99B99B99B9999999B90000B99B99B9B99B9B9B99B9B9FFFF +FFFFFFFFFFFFFFFFF99B9B9B9B9B99B99B99B99B999B9F9FBF9F9F9F9F9F9F9F9F9B9B99B99B99 +9B9B9B9B9B9B00009B99B9999B99B999B9999E8E8EEE8E8E8E8EE8EE8E8F99B999B999B99B99B9 +9B99B99989E9E989898B89EBE98989F999B99B99B99999B999B9990000B99B9B9B99B999B99B9B +9803DD33D3D3D3D33D3D3DEF9B9B9B99B999B99B99B99B9B9B90B3939DBD9D9D9D939DBE9B9B9B +999B9B9B9B9B9B9B9B000099B999B99B999B99B999BE0DD33DD3D3D3D3DD3D3D8F9999999B999B +99B99B99B999B98939D93939393B3BD93BD9F9999999B999B9999999999900009B99B99B99B9B9 +B99B9B9E0382C7DDDDDDDDD7DDD3EFB9B9B9B9B9B9B99B99B99B9B99909EBDBDBDBDBD9DBD9398 +9B9B9B9B9B9B9B9B9B9B9B9B000099B99B99B99B999B9999980DE5DDFFFFFFFFDD4D3D8F9B999B +999B999B99B99B9999B9EBDBDBD9F9F9F9FBDBD939F9B999B999999999B999B9990000B999B99B +9B999B99B9B9BE0D8D71F000000FDD7DD3EF99B9B9B9B9B9B99B99B9B9B999B0989DBF90B090BD +BDBDBE999B9B9B9B9B9B9B99B99B9B0000999B99B99999B99B999B9803EDC7F08F0F0FFFDC3D8F +9B999999999999B99B999B99B98939DBDB09F9F9F9F9DBD9F9B9999999B999B99B99B9990000B9 +B9B99B9B9B9B99B9B99E0D8C7DF000100F3FD7D3EF999B9B9B9B9B9B99B99B999B9B909EBD9FB0 +90B093BDB3989B9B9B9B9B99B999B9B99B9B00009B999B9999B999B9999B980DE7CDFDDDDDDFDF +DC3D8FB9B999B999B999B99B99B999998BDBDBDBDBDBD9F9FBD939F99999B999B99B99999B9999 +0000999B99B9B99B9B99B9B99E03ED7DFFFFFFFF3FD7D3EF999B9B99B99B9B9B999B9B9B9B9098 +9DBF9F9F9F939DBD9EB9B9B99B9B99B9B9B9B99B9B0000B9B99B999B99999B9B99B80D8CD5D6DF +D3D3DFCDD3EFB9B9999B99B9999999B999B9998939DBD9DBF93939F9DB39F99B99B9999B999B99 +99B9990000999B99B9B9B9B9B999B99E03E7C7C7DFFFFFFF7D3DEF999B9B99B99B9B9B9B9B9B9B +9B909EBDBDBD9F9F9FBDBD989B999B9B9B99B9B99B9B9B9B00009B99B999999B999B999B980DED +DDDDDDDDDDDDDDD38F9B9999B99B99B999B999999999EBDBDBDBDBDBDBDBDBD939F9B99999B9B9 +9999B99999990000B99B99B9B9B99B99B9B99E038E8E8E8E8E8E8E8E3DEFB99B9B9B999B99B99B +9B9B9B9B9098989898989E989E939E999B9B9B999B9B9B9B9B9B9B000099B99B999B99B99B999B +9803DD3D3D3D3D3D3D3D3D8F99B9B99999B99B99B999B999B989DBD9D9DBD9DBD9DB39DBF9B9B9 +9999B999B99999B99900009B9B99B9B9B99B99B9B99E0033D3D3D3D3D3D3D3D3EFB9999B9B9B99 +B9B999B99B9B99E09393B3939393B393939EB9999B9B9B99B99B9B9B9B9B000099999B99999B99 +B9999B9B8E00000000000000000FF99B9B9999B9B9999B9B9B9999B9B8E90909090909090909F9 +9B9B9999B9B99B99B99999990000B9B9B9B9B9B99B99B9B999998E8E8EEE8E8E8EEE8B99B999B9 +B99999B9B99999B9B99999B898989EB898989EB899B999B9B99999B9B99B9B9B9B0000999B9999 +9B99B99B999B9B9B999B9B9B999B9B9B999B9B9B999B9B9B999B9B9B999B9B9B999B9B9B999B9B +9B999B9B9B999B9B9B9999B999B99900009B99B9B9B9B999B9B9B999B9B9B999B9B9B999B9B9B9 +99B9B9B999B9B9B999B9B9B999B9B9B999B9B9B999B9B9B999B9B9B999B9B9B99B9B9B9B000099 +B99B99999B9999999B9999999B9999999B9999999B9999999B9999999B9999999B9999999B9999 +999B9999999B9999999B9999999B9999999900009B9B99B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 +B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 +0000B9999B999B999B999B999B999B999B999B999B999B999B999B999B999B999B999B999B999B +999B999B999B999B999B999B999B999B999B999B99000099B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 +B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 +B9B9B900009B999999999999999999999999999999999999999999999999999999999999999999 +99999999999999999999999999999999999999999999999B0000B99B9B9B9B9B9B9B9B9B9B9B9B +9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B +9B9B9B9B9B99000099B999B999B999B999B999B999B999B999B999B999B999B999B999B999B999 +B999B999B999B999B999B999B999B999B999B999B999B999B999B90000040000002701FFFF0400 +00002701FFFF030000000000 +}\plain\f6\fs18 +\par Dithering Image Lists involves taking an image from a source Image List, running it through a GDI blender, and then placing the dithered image in the destination Image List (see Figure 9). +\par ImageList_Merge simply copies the image from a source Image List and places it the destination Image List for you. Three APIs are provided just to make it easier to shuffle around images (see Figure 10). You need the x and y offsets in these functions because the source and destination images may be of a different size. For example, the star field from above could be 100 by 100 pixels, while the Death Star may only be 40 pixels by 40 pixels. The x and y offsets can be used to correctly place the Death Star in the most threatening position on the star field. +\par \plain\f6\fs18\b Figure 10 APIs for Moving Images\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 HIMAGELIST ImageList_Merge(HIMAGELIST himl1, // Handle of first (background) +\par // Image List +\par int i1, // Image number of first image +\par // to merge +\par HIMAGELIST himl2, // Handle of second (foreground) +\par // Image List +\par int i2, // Image number of first second +\par // image to merge. +\par int dx, // x offset of second image +\par int dy); // y offset of second image +\par +\par void ImageList_CopyDitherImage(HIMAGELIST himlDst, // Handle of \tab // Destination +\par WORD iDst, // Image # in \tab // destination +\par int xDst, // x Offset in \tab // destination +\par int yDst, // y Offset in \tab // destination +\par HIMAGELIST himlSrc, // Handle of source +\par int iSrc); // Image # in source +\par +\par int ImageList_AddFromImageList(HIMAGELIST himlDest, // Handle of +\par // destination +\par HIMAGELIST himlSrc, // Handle of +\par // Source +\par int iSrc); // Image # +\par // of source +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Using Image Lists in Custom Controls +\par If you plan on writing a custom control, or just want to use the Image List as an easy way to manage a group of bitmaps, then you will be very interested in the APIs supplied for drawing images from the Image List. There are also some helper functions for transparent drawing on backgrounds. +\par Before I get into how to draw an image, let's take a quick peek at how background colors are utilized by the Image List. For masked images, the background color can be set to a defined color (an RGB value) or you can choose to have no background color (the constant CLR_NONE). No background color means the image is to be drawn on top of the existing device context, leaving the pixels under the image's transparent pixels intact. You would want to use no background color if you were going to draw an image on a complex background, such as a bitmap. If you are going to draw a masked image on a solid background, it is cool to set the background color; this means better performance. Use these functions for setting/getting the background color of an Image List: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 COLORREF ImageList_SetBkColor(HIMAGELIST himl, +\par // Handle to Image List +\par COLORREF clrBk); +\par // New background color or CLR_NONE (default) +\par +\par COLORREF ImageList_GetBkColor(HIMAGELIST himl); +\par // Handle to Image List +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 To draw an image from the Image List, use the ImageList_Draw API. +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 BOOL ImageList_Draw(HIMAGELIST himl, +\par // Handle of Image List to draw from +\par int i, +\par // Image number to draw +\par HDC hdcDst, +\par // Device context to draw to +\par int x, +\par // x position on device context +\par int y, +\par // y position on device context +\par UINT fStyle); +\par // ILD_* flags (see above) +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 This API requires that you specify the Image List, the image number, a device context, a location on the device context, and some flags to indicate how to draw the image. These flags let you apply some extra attributes to the image you are about to draw. One of the interesting flags is ILD_OVERLAYMASK. This tells the ImageList_Draw API to first draw the image you asked it to, and then draw another masked image on top of it (see Figure 11). It's going to do the same thing as merging the two images, except the images are merged only at draw time, leaving the actual images inside the Image List intact. Of course, some restrictions do apply. You can't use just any image from your Image List as the overlay image; you have to specify which image to use in advance using the ImageList_SetOverlayImage API which I'll discuss in a moment. You can specify up to four images from your Image List to be used as overlay images (so you could use the Death Star, a TIE fighter, an X-Wing, and a Sneaker for the overlay images, and then all sorts of space backdrops for the regular images). You put both the overlay images and the backdrop images in the same Image List; you just need to tag certain images as overlay masks. Do this, with the ImageList_SetOverlayImage API: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 BOOL ImageList_SetOverlayImage(HIMAGELIST himl, +\par // Handle to Image List +\par int iImage, +\par // Image to set as an overlay +\par int iOverlay); +\par // The mask # (0, 1, 2 or 3) +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18\b Figure 11 Drawing and Overlaying Images\plain\f6\fs18 +\par {\pict\wmetafile8\picw9819\pich4273\picscalex99\picscaley99\picwgoal5579\pichgoal2429 +010009000003093C00000000BE3B00000000050000000B0200000000050000000C02B1105B2603 +0000001E00070000001604B1105B2600000000050000000C02BE107226050000000B0200000000 +030000001E00070000001604BE10722600000000050000000C027E09CC15050000000B02000000 +00050000000B0200000000BE3B0000430F2000CC000000A2007401000000007E09CC1500000000 +2800000074010000A2000000010004000000000000000000130B0000130B000000000000000000 +00000000000000BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 +FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000FFFFF00000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +00FFFF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000FFF000000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF000000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000F00000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000F0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000F +00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFF33388FFFFFFFFFFFFFFFFFFF +FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF333333FFFFFFF333833FFFFFFFFFFFFFF000000 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFFFF3833F333FFFFF33333333FFFFFFFFFFFFF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFFFF333FF33888883333FF333FFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF +F0000003B3B3B3B3B3B000000FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF383FF +FF33384383348883333383FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFF000003B3B333B33 +33333B3300000FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF333FFFF333F83334844 +43383333FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFF0000333333B3B3B3B3B3B3B3B3B3000 +0FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF33FFFFF31331913133391391348FFFFFF +FF00000000FFFFFFFFFFFFFFFFFFFFFF0000B3B3B3B3333333B33333333B330000FFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFF338FFF331339333393131331338888FFFFFF00000000FFFF +FFFFFFFFFFFFFFFFF000333B333333BB3B3B3B3B3BBB3B3B3B000FFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFF333139319333383833333F33FF4848FFFFFF00000000FFFFFFFFFFFFFFFFFF +FF000B3B3B3B3B3B333B3333B3333333333B3000FFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF +FFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +F3833931334F333333333FFF33FFFF88FFFFFF00000000FFFFFFFFFFFFFFFFFFF000B33333333B +33B3B3B3B3B3B3B3B3B3B3B3000FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF0000F0 +0F0F00F0F000F0F000F0F00F00FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0 +0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0 +F000F00FFF00F000F000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF3313138488843 +3484FFFFFF333FFF88FFFFFF00000000FFFFFFFFFFFFFFFFFF000333B3B3B3B3B33B3333B3333B +333B3333333000FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF0000F00F0F00F0F00FF0 +F00FF0F00F00FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0F00000FFF000FF +F00FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0F00F00F000F00F +0F0000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF31933FFF484838848FFFFFF3333 +3338FFFFFF00000000FFFFFFFFFFFFFFFFF0003B3B33333333333B3B3B3B3B3B3B3B3B3B3B3B00 +0FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF0000FFFF0FFFF0F0F0F0F0F0F0FFFF00FF +FFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0F0000F000F0F00F0F000F0FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0F0FF00F000F000F00000F000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF33344FFFFFFF33F84FFFFFF33333388FFFFFF0000 +0000FFFFFFFFFFFFFFFF0003333B3B3B3BBB3B333B3333B3333333333B333B3000FFFFFFFFFFFF +FFFF000FFFFFFFFFFFFFFFFFFFFFFF0000F00F0F00F0FF00F0FF00F0F00F00FFFFFFFFFFFFFFFF +FFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0FFF00F000F0F0FF0F000F0FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0F000F0F000F00F0F000F0F00FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFF93188FFFFFFF33F4333383383838388FFFFFF00000000FFFFFFFFFF +FFFFFF00B3BBB33333B33333B3B3B3B3B3B3B3B3B3B3B3B33300FFFFFFFFFFFFFFFF000FFFFFFF +FFFFFFFFFFFFFFFF0000F00F00FF00F000F0F000F00FF000FFFFFFFFFFFFFFFFFFFFFFF000FFFF +FFFFFFFFFFFFFFFFFFFFF0F00F0F000F0F0000F000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFF0FFFF000FFF00F000F0F000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFF33F484FFFFFF333838333333333388FFFFFFF00000000FFFFFFFFFFFFFFF003B33333 +B3B3B3B3B3333333B3333B333333333B33B3B00FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFF +FF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFF +FFFFFFF0FFF000FFF000FFF00FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF +FFFFFFF0000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF93184 +8FFFFFF3333338FFFFF333848FFFFFFF00000000FFFFFFFFFFFFFFF003B3B3B33333333333BB3B +3B3B3B3B3B3B3B3B3B3B33300FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0000000 +0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF333F84FFF31933FF484 +FFFFF333488FFFFFFF00000000FFFFFFFFFFFFFF003333333B3B3B3B3B3B333B3333B3333B3333 +333333B3B300FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00777777700FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00787777F00FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF313F48FF13313133F48FFFF333888FFFF +FFFF00000000FFFFFFFFFFFFFF00B3B3BB3333333B3333B3B3B3B3B3B3B3B3B3B3B3B3B33300FF +FFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0778787878770FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFF8F8FFFF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF000FFFFFFF831384FF913F3313384FFFF333488FFFFFFFF00000000FF +FFFFFFFFFFFF0033B333B3B3B3B3B3B3333333B3333B3333B333333333B300FFFFFFFFFFFFFF00 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF078000000000870FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF +F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0333333333330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0FF000000000FF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFF +FFFFFFF000FFFFFFF313948FF13FFFF33948FFF383388FFFFFFFFF00000000FFFFFFFFFFFFF003 +B3B3B33333333333B33B3B3B3B3B3B3B3B3B3B3B3B3B33300FFFFFFFFFFFFF000FFFFFFFFFFFFF +FFFFFFFFFFF0000FF08700778777700770FF000FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFF033000000000330FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF +FFFFFFFFFFFFF0000FF0FF00FFFFFFF00FF0FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFF +FFF333184F333FFFFF1388FFF333888FFFFFFFFF00000000FFFFFFFFFFFFF00333333B3B3B3BBB +3B3B3333B333B3333B33333B33B3333B300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF +0000078787778787780000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF00 +00FF03300933333300330FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFF +FF00000FFFFFFFFFFFF70000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF333318F313F +FFFF3184FFF383348FFFFFFFFF00000000FFFFFFFFFFFFF003BBB33B333333333333B3B3B3B3B3 +B3B3B3B3B3B3B3B333300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF077007780000 +7870780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0000033333333 +333330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0FF00FFF00 +00F730370FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF831934F13FFFFFF3948FFF333 +388FFFFFFFFF00000000FFFFFFFFFFFFF0033333B3B3B3B3B3B3B333333333333B3333B3333333 +33B3B00FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000FF +FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0330033300003330330FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF00000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF33F313333FFFFFFF884FF333838FFFFFFFFFF00 +000000FFFFFFFFFFFFF003B3B3333333333333B33B3B3B3B3B3B3B3B3B3B3B3B3B33300FFFFFFF +FFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF077878000000000787770FFFFFFFFFFFFFFFFFFFF +FFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000FFFFFFFFFFFFFFF +FFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF033333000000000F73F30FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF000FFFFFFF338338339FFFFFF8448FF333338FFFFFFFFFF00000000FFFFFFFF +FFFFF00333BB3B3B3B3B3B3B3B33333333B3333B333333B333333B300FFFFFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFFFFFFFFF080000878000878000780FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FF +FFFFFFFFFFFFFFFFFFFFFFFF071737000000000737370FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +0FFFFFFFFFFFFFFFFFFFFFFFF0300009330003FF000FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F000FFFFFFF3331933131FF888488FFF383838FFFFFFFFFF00000000FFFFFFFFFFFFF003B3333B +3333333B3333B3B3B3B3B3B3B3B3B3B3B3B3B333300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFF +FFFFFFFF0007777777707777778000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFF +FFFFFFFFFF030000717000717000730FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFF +FFFFFFFFFF000333333330F3FF3F3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33 +33333398848484FFFF333388FFFFFFFFFF00000000FFFFFFFFFFFFF00333B3B3B3B3B3B3B3BB33 +3B3333333B3333B3333333B3BBB00FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF000F07787 +0000787000077770000FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF00037 +37373707373737000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF000F033 +3300003FF00003F370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF3831333318484FFF +FFFF3833FFFFFFFFFFFF00000000FFFFFFFFFFFFF003B333333333333333333B3B3B3B3B3B3B3B +3B3B3B3B3B33300FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0877084840704848077 +80FFF0FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF000F037170000073000073 +030000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF0339044840F084840 +FF30FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF833393333313FFFFFFFFF3333FFFFFF +FFFFFF00000000FFFFFFFFFFFFF0033B3BBB3B3B3B3BBB3B33333333B3333B3333333333333B30 +0FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF078704848070848808770FFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFF073703383030338307170FFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF0333088880F048480FFF0FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF838131F3193133FFFFFF3383FFFFFFFFFFFFF00000000 +FFFFFFFFFFFFFF00333333333333333333BBB3B3B3B3B3B3B3B3B3B3B3BB3300FFFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0780878407087480780FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF000FFFFFFFFFFFFFFFFFFFFFFFFFF017303333070333300730FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF03304F48030878403F0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF000FFFFFF8833F33FF383313933FF33333FFFFFFFFFFFFF00000000FFFFFFFFFFFFFF +003B3B3B3B3BBB3B3B3B3333B333333B3333B333333333B300FFFFFFFFFFFFFF000FFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0770484808084840770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF +FFFFFFFFFFFFFFFFFFF0370388303038830730FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFFFFFF033084840F048480FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FF +FFFF8833F131FF333333139333333FFFFFFFFFFFFF00000000FFFFFFFFFFFFFF00333B33333333 +B3333B3B3B3B3B3B3B3B3B3B3B3B3B3B3300FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0087000077700007800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF +FFFFF0710333307033330370FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFF +FFFFFF0033000033700003300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF8833F333FF +3383F3333313313FFFFFFFFFFFFF00000000FFFFFFFFFFFFFFF00B3B3B3B3B3B3B3B3333333333 +B3333B333333333B33300FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF007778787 +87878700FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF003300007 +1700003800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFF0033333 +3FFFFF3F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF8433FF193FF333FFFF133133 +9393FFFFFFFFFF00000000FFFFFFFFFFFFFFF003333B333333333BB3B3B3B3B3B33B3B3B3BBB3B +3B3B300FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0070877777777770800FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00717373737173700FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF00F033333337F730F00FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF8833FF3133FF333FFFFFF33333133FFFFFFFFF +00000000FFFFFFFFFFFFFFFF003B3B3B3BBB3BB333B333333333BB3333B33333333300FFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0787008787878007770FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0080731371717370800FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0F8F0033333F800F8F0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000FFFFFFF838FFF3131F333FFFFFF334FF319393FFFFFF00000000FFFFFF +FFFFFFFFFF0003333333333B333B3B3B3B3B3B333B3B3B3B3B3B3000FFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0878700000000087780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFFFFFFFFFFFFFFFFFFFFF0070003737373007070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFF0877F000000000F8FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF000FFFFFFF8338FFF339F833833333333FFF31319FFFFFF00000000FFFFFFFFFFFFFFFFF000 +3B3B3B3B333B333333B333B33B3B3333333333000FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFF077700FFFFFFF007870FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFF +FFFFFFFFFFFFF0707800000000070700FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF +FFFFFFFFFFFFFF0F8F00FFFFFFF00FF80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF +3348FFF31343333833333833FFFF339FFFFF00000000FFFFFFFFFFFFFFFFFF0003333333B3B3BB +B3B3B3B3B333B3B33BBB3B3000FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF08 +000FFFFFFFFF00080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0 +08000FFFFFFF008080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF +0F000FFFFFFFFF000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33848FF133F333 +33FFF333383FFF333FFFFF00000000FFFFFFFFFFFFFFFFFFF0003B33B333B33333B333B333B333 +33B33333000FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFF +000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF08000FFFFFFFFF0 +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF3388484F3933338488F848333FFF +F19FFFFF00000000FFFFFFFFFFFFFFFFFFFF00033B33BB333B3B3B3B3B3B333B3B333B3000FFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF38F4848433133F4884848483833FF33FFFFF000000 +00FFFFFFFFFFFFFFFFFFFFF000333B333BB333333333333B3B333B33000FFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000FFFFFFFF33FFF8431333FFFF484884833333139FFFFF00000000FFFFFFFFFFFF +FFFFFFFFFF000033B333B3BBB3BBB3BB333B3B330000FFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000 +FFFFFFFF33FFFF3333931FFFF884FFFFF3133338FFFF00000000FFFFFFFFFFFFFFFFFFFFFFF000 +0333B3333333333333B3B33330000FFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33FFF3 +833F3933FFF448FFFF13333933FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFF00000333B3B3B3B +3B3B333300000FFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33F33338FFF393133333 +33333939FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFF000000333333333333000000FFF +FFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF3333333FFFFF33313393393393FFFFFFFF +FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF000FFFFFFFF33833FFFFFFF888888FFFFFFFFFFFFFFFFFF00000000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000FFFFFFFF3333FFFFFFFFF8888FFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFF +FF8333FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF333FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF383FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFF33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000FFFFFFF0000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000FFFFFFF000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000FFF +FFFF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFF000000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFF000000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFF000000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 +00FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF +0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF +FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 +FFFF0000FFFF0000FFFFFFFFFF0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFFF000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +0000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000033333333333 +3000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000B3B3B3B3B3B3B3B3B300000FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003333333333333333333333330000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF0000B3B33B3B3B3B3B3B3B3B3B3B3B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +0033B333B333B333B333B333B333B333000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00033B3B3B333B3B +3B3B3B3B3B3B3B3B3B3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003B3333333B333333333333333333 +333333000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000B300000000000000000000000000000000B3000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF00033300003003030030300030300030300300333000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF000B3B3000030030300B03003B03003B0300B003B3B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00B333300003 +B330B3330303030303030B333003333300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003B33B30000300303003033003 +0B30030300300B3B3B300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333B330000300300330030003030003003B0003 +B333300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF003B3B3330000000000000000000000000000000033B3B3B00FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF00333333B3B3B3B3B333300000003333333333333B33B33300FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00B3BB +B33333B33B3B3007777777003B3B3BB3B333B3B3B300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003333333B3B3B33B3307 +77878787870333333B33B3333333300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003B3B3B3333333B330780000000007703B +3B330333BB3BBB300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333B33B3300003308700787777800870330003B3B333333 +300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF003B3B33BB3B3B000007877787877777000033B33333B3B3B300FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F0033333B33333333077007870000878078033B33BBB333B33300FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0033B3B333B00 +000000000000000000000000000333BB3B3B300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00B33333B33B3B3087878000000 +00077877033B3B3B333333300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003B3BB33B3B3330700007870008780008703B333 +33B3B3BB300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF0033333B33333B0007877777807777777000333B3B33B33B3300FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF0033B3B333B00030787700007780000778700003333B3B333300FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0033 +333B33333307770484807084880777033B03B33333B300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00B3B33BB33BBB0787 +08484070484408770B333333B3BB3300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333BB333B333307704788070878807 +7033BB3B3B3333B300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003B3333BB33B3078084840708484078033B333333BB3 +300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF0033B3B333B3330078000087800007700B333B3B3B33B300FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00333BB333BBB30077777777877780033B3333333B3300FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003B333 +B3333007087878787787070033BB3B3B333000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00033B3B33B3078700777 +77770078703B33333333000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00033B3B3330878700000000078770333B +BB3B3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0003333B33077700333B3330078703B333333000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0003B333B070003B3B3B3B30007033BB3B3000FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF000333B30003B333333333330003B3333000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003330 +B333B3BBB3B3BBB33033B30000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00003333B333333333333 +3B3B3330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000333B3B3B3B3B3B333300000FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000333333333333000000FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000040000002701FFFF040000002701FFFF +030000000000 +}\plain\f6\fs18 +\par The iOverlay parameter is the most important, as it's the number you will use in COMMCTRL.H's INDEXTOOVERLAYMASK macro when you actually draw the image. Figure 12 shows the flags for drawing images. +\par \plain\f6\fs18\b Figure 12 Image Drawing Flags\plain\f6\fs18 +\par +\par \pard\plain\f6\fs18 ILD_NORMAL\tab Draws the image using the background color for the Image List. If the background color is CLR_NONE, the image is drawn transparently using the mask. +\par ILD_TRANSPARENT\tab Draws the image transparently using the mask, regardless of the background color. This flag has no effect if the Image List does not contain a mask. +\par ILD_SELECTED\tab Draws the image dithered with the system highlight color to indicate that it is selected. This flag has no effect if the Image List does not contain a mask. +\par ILD_FOCUS\tab Draws the image striped with the system highlight color to indicate that it has the focus. This flag has no effect if ILD_SELECTED is not also specified or the Image List does not contain a mask. +\par ILD_OVERLAYMASK\tab Draws the image and overlays it with an overlay mask. The index of the overlay mask must be combined with the ILD_OVERLAYMASK style. Also, the index must be specified by using the INDEXTOOVERLAYMASK macro. +\par \pard\li180\ri240\plain\f6\fs18 As you can see, the ImageList_Draw API is extremely powerful and flexible. You can not only maintain images for controls, it's also a handy way to manage bitmap drawing. You can now quit doing the CreateCompatibleDC/SelectObject/BitBlt/Barf/SelectObject/DeleteDC rigamarole, and enjoy the painless functionality of the Image List. +\par Image List Drag-and-Drop Melancholy +\par As mentioned, the Image List provides the graphical grunt work for implementing drag-and-drop. Your application is still responsible for the implementation of the drag-and-drop (that is, it needs to do something once the user has dropped the object), but the Image List will handle the GUI work of moving a little graphic around the screen until the user lets go of the mouse button. The Image List will create a fake cursor out of an indicated image, and move it around the screen until your program instructs it to stop. +\par There are three steps your program must take to let the Image List handle the GUI part of drag and drop. +\par \pard\li540\ri240\fi-360\plain\f6\fs18 \'b7\tab Start the drag (on WM_XBUTTONDOWN ). +\par \'b7\tab Move the drag/drop image (on WM_MOUSEMOVE). +\par \'b7\tab End the drag (on WM_XBUTTONUP). +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Figure 13 is a code fragment that shows how you'd implement these three steps in your WinProc. +\par \plain\f6\fs18\b Figure 13 Drag-and-drop with Image Lists\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 case WM_LBUTTONDOWN: +\par +\par // Get the mouse position +\par pt.x = LOWORD (lParam); +\par pt.y = HIWORD (lParam); +\par +\par // Figure the hit test rect region of the image +\par rc.left = iXPos; // iXPos and iYpos are static +\par rc.top = iYPos; // variables that contain the x,y position of the \tab // object +\par rc.right = rc.left + dxImageSize; +\par rc.bottom = rc.top + dyImageSize; +\par +\par // Figure out where in the region the user clicked, +\par // and figure the hotspot offset +\par dxHotspot = pt.x - iXPos; +\par dyHotspot = pt.y - iYPos; +\par +\par // If the hittest passes... +\par if ( hImageList && PtInRect ( &rc, pt )) +\par \{ +\par // Set drag flag +\par bDragging = TRUE; +\par +\par // Hide the cursor +\par ShowCursor ( FALSE ); +\par +\par // Capture the mouse +\par SetCapture ( hWnd ); +\par +\par // Call the ImageList API to start the drag process +\par ImageList_StartDrag ( hImageList, // Handle to Image list +\par hWnd, // hWnd of this client +\par iImage, // Image # to use for drag cursor +\par iXPos, // Position of image +\par iYPos, // Position of image +\par dxHotspot, // Hotspot offset +\par dyHotspot); // Hotspot offset +\par +\par // Show the new "fake" cursor +\par ImageList_DragShow ( TRUE ); +\par \} +\par break; +\par +\par case WM_MOUSEMOVE: +\par +\par if ( bDragging ) +\par \{ +\par // Call the ImageList API to automatically move the image around +\par ImageList_DragMove ( LOWORD (lParam), +\par HIWORD (lParam) +\par ); +\par \} +\par break; +\par +\par case WM_LBUTTONUP: +\par +\par if ( bDragging ) +\par \{ +\par // Tell the ImageList to stop dragging and erase the "fake" cursor +\par ImageList_EndDrag (); +\par // Release mouse capture +\par ReleaseCapture (); +\par // Bring back the real cursor +\par ShowCursor ( TRUE ); +\par // Calculate the image's new position +\par iXPos = LOWORD (lParam) - dxHotspot; +\par iYPos = HIWORD (lParam) - dyHotspot; +\par // Force a repaint +\par InvalidateRect ( hWnd, NULL, TRUE ); +\par // Clear the drag flag +\par bDragging = FALSE; +\par \} +\par break; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 For the first step, you erase the mouse cursor (since the Image List's fake cursor will be used instead of the real mouse cursor), set mouse capture (so you are guaranteed to get the WM_XBUTTONUP), and then call the ImageList_StartDrag and ImageList_DragShow APIs. +\par For the second step, call ImageList_DragMove to move the drag/drop image cursor wannabe on the screen. +\par And finally, for the third step, call the ImageList_EndDrag API to let the Image List know you are finished with it and erase the fake cursor. You also want to release capture, show the real mouse cursor again, and also take some action in response to whatever your program is supposed to do when the user drops the Death Star on top of the Borg cube. +\par The Image List has some extra goodies to make it really easy to do some drag-and-drop dinking around. Just to be different, let's first look at the functions involved in making this happen (see Figure 14). +\par \plain\f6\fs18\b Figure 14 Image List Drag-and-drop Functions\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 BOOL ImageList_StartDrag(HIMAGELIST himl, // Image List to use image from +\par HWND hwndLock, // Handle to draw image on. +\par // Use NULL for anywhere on +\par // the screen. +\par int i, // Image number to use +\par int x, // Where to draw (usually the +\par int y, // cursor position +\par int dxHotspot, // Hotspot (usually the same +\par int dyHotspot); // as the cursor position) +\par +\par BOOL ImageList_DragMove(int x, // Where to draw (usually +\par int y); // the cursor position) +\par +\par BOOL ImageList_DragShow(BOOL fShow); // Shows or hides the drag/ \tab // drop image +\par +\par HIMAGELIST ImageList_EndDrag(VOID); // Do this when done +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 IMAGELST +\par I have tossed together a tiny little sample program that shows some of the basics of the Image List (see Figures 15 and 16). The IMAGELST sample program simply creates a tiny Image List and paints an image (a TIE fighter) on the client area. The user can click and drag this TIE fighter around the screen with the mouse. That's it. Let's go. +\par \plain\f6\fs18\b Figure 15 Image List\plain\f6\fs18 +\par {\pict\wmetafile8\picw6677\pich4959\picscalex99\picscaley99\picwgoal3794\pichgoal2819 +0100090000038D2F00000000422F00000000050000000B0200000000050000000C025F13151A03 +0000001E000700000016045F13151A00000000050000000C026E13251A050000000B0200000000 +030000001E000700000016046E13251A00000000050000000C02040BD30E050000000B02000000 +00050000000B0200000000422F0000430F2000CC000000BC00FD0000000000040BD30E00000000 +28000000FD000000BC000000010004000000000000000000130B0000130B000000000000000000 +00FFFFFF00CCFFFF0099FFFF0066FFFF0033FFFF00CCCCCC00FFCCFF0099999900660066003300 +660066003300DDDDDD00AAAAAA00555555004444440000000000FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFCC7 +C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7 +C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7 +C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7 +C7C7C7C7C77CC7F0FFF05B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5BB5BCF0FFF05B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B55B7F0FFF05BFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7 +F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0 +FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FF +F055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0 +BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5C +F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0 +F6F055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F000F05BFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF5B7F000F05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F056F055FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FF +F0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF5B7F0F6F055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF0 +55FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB +5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7 +F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0 +FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5FFFFFFFFFFFF5BFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FB5FFFFFFFFFFFFFF5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFB5FFFFFFFFFFFFFFFF55FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FF +F055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55FFFFFFFFFFFFFFFFFFB5FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFF +FFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF5FFFFFFFFFFFFFFFFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF05BFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFB5B5B5FFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFFFFFB5FFFFB5FFFFFF5FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFF +FFFB5F00F0FB5FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF05BFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF5FFFFF5F0F000FFBFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0 +B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5B5B5BF00F0F0F55B5B5BFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFFFF5F0F0F00F +BFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0FFF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFBFFFFFBFF000F0F5FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FFF055FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFFFF5BF0F00F5BFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FB5CF0FFF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFF55FFFF5BFFFFFFBFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF5B7F02BF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFFF +FFFB5B5B5FFFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0F6F0B5FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F02BF05B +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5BFFFFFFFFFFFFFFFFFFB5FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFB5CF02BF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF55FFFFFFFFFFFFFF +FFB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F02BF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFB5FFFFFFFFFFFFFFB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF02BF0BBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5FFFFFFFFFFFFB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 +B7F0F6F055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFB5CF0F6F05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0F6F05BFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF02BF0B5FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF5B7F02BF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0F6F0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F02BF055FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5C +F0F6F0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF5B7F02BF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF02BF05BFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0F6F05BFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFB5CF02BF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F02BF05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF02BF0B5FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0 +2BF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFB5CF02BF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0F6F055FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0F6F05BFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF5B7F0F6F05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF02BF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0F6F05BFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF0F6 +F0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF5B7F02BF055FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF02BF0BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F02BF055FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFB5CF0F6F05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF5B7F0F6F05BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5CF02BF0B5FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B7F0FBF0 +5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF5BCF08DF05B5B5B5B5B5B5B55B5BB5B5B5B5B5BBB5B5B55B5B5B55B5B5B5B5B5B +B5B5B5B5B5BB5B5B5B55B5B5B55BB5B5BB5BB5BB5B55B555B5BB5BB55B55BB5BBBBB5B5B5B5B5B +B5B555B5B55B5B5B5B5B5555B55B5B5BB5B555BB5B5B5B5B55BB5B5B5B5B5B55B5B5BBB5B55B55 +B55B55B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B7F0B1F05B5B5B5B55B5B5BB5B55B5B5B5B5B555B5 +B5BB5B5B5BB5B5B5B5B5B55B5B5B5B5B55B5B5B5BB5B5B5BB55B5B55B55B55B5BB5BBB5B55B55B +B5BB55B55555B5B5B5B5B55B5BBB5B5BB5B5B5B5B5BBBB5BB5B5B55B5BBB55B5B5B5B5BB55B5B5 +B5B5B5BB5B5B555B5BB5BB5BB5BB5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5CF0B1F0B5B5B5B5B5B5 +B55B5BB5B5B5B5B5BBB5B5B55B5B5B55B5B55B5B5B5BB5B5B5B5B5B5B5B5B55B5B5B55BB5B5BB5 +BB5BB5B55B555B5BB5BB55B55BB5BBBBB5B5B5B5B5BB5B555B5B55B5B5B5B5B5555B55B5B5BB5B +555BB5B5B5B5B55BB5B5B5B5B5B55B5B5BBB5B55B55B55B55B55B5B5B5B5B5B5B5B5B5B5B5B5B5 +B5B7F0B1F05B5B5B5BFFFFFFB5B55B5B5B5B5B555B5B5BFFFFFFFB5B5B5B55B5B55B5B5B5B5BFF +FFFFFFB5B5B5BB5FB5B55B55B55B5BB5BBB5B55B55BB5BB55B55555B5B5B5B5B55B5BBB5B5BB5B +5B5B5B5BBBB5BB5B5B55B5BBB55B5B5B5B5BB55B5B5B5B5B5BB5B5B555B5BB5BB5BB5BB5BB5B5B +5B5B5B5B5B5B5B5B5B5B5B5B5CF0FCF0B5B5B5B5B55B5B55B5BB5B5B5B5B5BB5B5B5B5B5B5B5B5 +B5B5BBB5BBB5B5B5B55B5B55B55B5B5B55B55F5B55BB5BB5BB5B55B555B5BB5BB55B55BB5BBBBB +5B5B5B5B5BB5B555B5B55B5B5B5B5B5555B55B5B5BB5B555BB5B5B5B5B55BB5B5B5B5B5B55B5B5 +BBB5B55B55B55B55B55B5B5B5B5B5B5B5B5B5B5B5B5B5B5CF0B1F055B5B5B5BFB5B5BF5F55FFF5 +B5B5B55B5B5B5FFFFF5B5FFFFBF55F555B5B5B5BB5BF5B5BF5B5FFFB5FBFFFFB55B55B55B5BB5B +BB5B55B55BB5BB55B55555B5B5B5B5B55B5BBB5B5BB5B5B5B5B5BBBB5BB5B5B55B5BBB55B5B5B5 +B5BB55B5B5B5B5B5BB5B5B555B5BB5BB5BB5BB5BB5B5B5B5B5B5B5B5B5B5B5B5B5B5BCF0FBF0BB +5B5B5B5F5B5B5FBFBFB5BF5B5B5BB5B5B5BF5B55B5FB5BF5FBF5BB5B5B5B55B55FB5B5FB5FB5BF +BF5F5B5FB5BB5BB5B55B555B5BB5BB55B55BB5BBBBB5B5B5B5B5BB5B555B5B55B5B5B5B5B5555B +55B5B5BB5B555BB5B5B5B5B55BB5B5B5B5B5B55B5B5BBB5B55B55B55B55B55B55B5B5BB5B5B5B5 +B55B5B5B5B5B57F000F055B5B5B5BFB5B5BF5F5F5B55B5B5B55B5B5B5FB5BB5BF5B5FBF5FB55B5 +B5B5BB5BBFB5B5F5BF5B555FBF5B5F5B55B55B5BB5BBB5B55B55BB5BB55B55555B5B5B5B5B55B5 +BBB5B5BB5B5B5B5B5BBBB5BB5B5B55B5BBB55B5B5B5B5BB55B5B5B5B5B5BB5B5B555B5BB5BB5BB +5BB5BB5BB5B5B555B5B55B5BB5B5B5B5B5BCF0FBF0BB5B5B5B5F5B55BFBFBFFFFFB5B5B5BB5B5B +5F5B555BFB5BF5FBF5BB5B5B55B55B5F5B5BFB5FFFFFBF5FB5BF5B5BB5BB5B55B555B5BB5BB55B +55BB5BBBBB5B5B5B5B5BB5B555B5B55B5B5B5B5B5555B55B5B5BB5B555BB5B5B5B5B55BB5B5B5B +5B5B55B5B5BBB5B55B55B55B55B55B55B5B5BB5B5BBB5B55B5B5B5B5B7F0B1F055B5B5B5BFFFFB +5F5F5F5B5F5B5B5B55B5B5BFFFFBB5F5B5FBF5FB55B5B5BB5BB55FFFFFF5BFB5BF5FBF5B5FB5B5 +5B55B5BB5BBB5B55B55BB5BB55B55555B5B5B5B5B55B5BBB5B5BB5B5B5B5B5BBBB5BB5B5B55B5B +BB55B5B5B5B5BB55B5B55B5B5B5B5B5B555B5BB5BB5BB5BB5BB5BB5B5B55B5B555B5BB5B5B5B5B +5CF000F0B5B5B5B55FB5B5BFBFB5FFFB5B5B5BB55B5B5FB5B55B5FFFF5FBFFB5B5B55B55BBBFB5 +BBFB55FFF5BF5FFFF5B5BB5BB5B55B555B5BB5BB55B55BB5BBBBB5B5B5B5B5BB5B555B5B55B5B5 +B5B5B5555B55B5B5BB5B555BB5B5B5B5B55BB5B5BBB5B5B5B5B5B5BB5B55B55B55B55B55B55B55 +B5BB5B5BB5B55B55B5B5B5B7F000F05B5B5B5BBF5B5B555FB5B5B5B5B5B55BB5B5BF5B5BB5BB5B +F5B5FB5B5B5BB5BB555FB555F5BB5B5B5F5B5B5B5B55B55B5BB5BBB5B55B55BB5BB55B55555B5B +5B5B5B55B5BBB5B5BB5B5B5B5B5BBBB5BB5B5B55B5BBB55B5B5B5B5BB55B5B555B5B5B5B5B5B55 +B5BB5BB5BB5BB5BB5BB5BB5B55B5B55B5BB5BB5B5B5B5CF0B1F05B5B5B5B5FB5B55BBF5B5B5B5B +5B5BB55B5B5FB5B555B55BF5B5F5B55B5B55B55BBF5BBBFB55B5B5BF5B5B5B5B5B5BB55B55B555 +B5BB5BB55B55BB5BBBBB5B5B5B5B5BB5B555B5B55B5B5B5B5B5555B55B5B5BB5B555BB5B5B5B5B +55BB5B5BB5B5B5B5B5B5BB55B55B55B55B55B55B55B55B5B5B5BB55B55B55B5B5B5CF0B1F05B5B +5B5B5FFFFFBF5FB5B5B5B5B5B55BB5B5BFFFFFBB5BB5FBFB5B5BB5B5BB5BB55FB555F5BB5B5B5F +B5B55B5B5BB55BB5BB5BBB5B55B55BB5BB55B55555B5B5B5B5B55B5BBB5B5BB5B5B5B5B5BBBB5B +B5B5B55B5BBB555B5B5B55BB55B5B55B5B5B5B5B5B55BB5BB5BB5BB5BB5BB5BB5BB5B5B5B55BB5 +BB5BB5B5B5BCF000F0B5B5B5B5B5B5B5B5B5B5B5B5B5B5BB555B5B55B5B555B55B555B5B55B5B5 +5B55BBB5BBB5B555B5B5B5B5BBBB5B55BB55B55B555B5BB55B55B55BB5BBBBBB5B5B5BB5BB5B55 +5B5B555B5B5B5BB5555B55B5B5BB5B555BBBB5B5B5B55BB5B55BB5B5B5B5B5B5B55B55B55B55B5 +5B55B55B55B55B5B5B55B55B55B5B55B57F000F05B5B5B5B5B5B5B5B5B5B5B5B5B5B55BBB5B5BB +5BBBBB5BB5BBB5B5BB5B5BB5BB555B555B5BBB5BBBBB5B5555B5BB55BB5BB5BBB5B5BBB5BB5BB5 +5B555B555BB5B55B55B5BBB5B5BB5B5B5BB55BBBB5BBB5BBB5B5BBB555BB5B5BBBB55BBBBB5BB5 +BBBB5B5BBBB5BB5BB5BB5BB5BB5BB5BB5BBBB5BBBB5BB5BB5BBBB5BCF08DF0B5BBBBBBBBBBBBBB +BB5BBBB5B5B5BBB55B55B5BB5555B555B55B5BB5B5B55B55BBB55BBBB5555B5555B55BBB55B55B +B5BB55B555B5555B55B55BB55BB55BB55B55BB5B5BB55B55B5BB5B555BB55555B55B555B5BB55B +BB55B55B555BB55555B55B5555BBB55555B55B55B55B55B55B55B555555B55555B55B555555BB7 +F08DF05BAAAAAAAAAAAAAAAAAAA9AAA8A8AAADAAE8A8AA8A8EA8E8AAEA8AAEA8A8EA8EAAAD8AA9 +ADAE8AEADAAE8AAAE8AE8AAEAAE8AAD8A8ADA8DA8DAAAD8AADA8ADAAE8AA8A8AADA8DAEA8AEA8D +AAAD8AE8AAE8ADAAEA8AEAAADAAE8AADA8AAEADAAE8AEADAAAA8DAD8AD8AD8AD8AD8AD8AD8AD8D +ADAA8DAD8AD8AD8DADAB5CF0FFF0B58AF0FFFF000F0FF0DAAAD8AAEA9A8A8AAADA9AADAAAAAADA +8AA8AAAADAAAAA8AAAA8AA8A8AAA8AAA8AAD8AAA8AA8AA8AAAEAAAAA8AAAAAAA8AAAA8AAAAAA8A +AA8AADA9AAAAAA8AAA8AAA8AAAA8AADAAAAA8AAAAA8A8AAA8AADAAAAE8A8A8AAAA8A8A8AAAAAAA +AAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAA8A5B7F0B1F05BAE00FF0FFF0F00FFA8A8AADA8A +AAAEAA8EAAAA8AA8DA8DA8AEADA8DAAA8DA8EA8AEADAAAAADAAA8EAA8AAA8DAADAA8AD8A8A8EAD +AA8EA00ADA8AEAA8DA8EAA8EADAAAAA8EA00ADA8A00ADA8AEAA8AA8DA8EA8AD8ADAA8DAA8AA8DA +8AAAEAA8DAAAAEADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEFFFFFFFFFFFFFFAAB5CF0FFF0B5A800 +0000000000FFAADAAA8AAA8DA8ADAA8AADAAEAAAAAAAA8AAAAAA8EAAAAAADA8AAADAE8A8ADAA8A +EAADAAAA8AEAAAAAADAA8AADAA800AAADA8AEAAAAA8EAA8AA8AADAA800AAADA00AAADA8ADAAEAA +AAAAEAAAAAAEAAADAAEAAAAADA8ADAAA8DA8AA80CC7C7C7CC7CCF0CCCC7C7C7C7CFA80CCC7C7CC +CC7CFAD5B7F0B1F05BAA0000000000000FA8A00EA00DAAA00A00AD8A008A000000EA000000AA00 +0000AA0000A8AAA00A8AEA8A8A0000AA8A00000A00A00A00A00000AA008A0000AA8AA00AD8A00A +00000AA00000AA00A008A0000A8A000008A00A008A0000AA00AA00AAAA8AA055B5B5B55B5CF055 +55B5B5B5BCFAA0555B5B5B55B7F8AB5CF0FFF0B5DA0F000F000F0FFFDAA008A00A00A00A00AAAA +00A008A0008A00A8AE8A00A8A8A00AA00A8EA008AA8AAEA00AA00EA00DA00A00A00A00A00AA00A +00A00DA00AADA00AAAA00A008A00A00AA00A00A00A008A00A00DA00A008A00A008A00A008A00E8 +AEADA0B5FFFFFB5B5CF0BBFFFFFFF5B7FDA0BB5F5B5FB5BCFAABB7F0B1F05BAA0F000F000F0FFF +A8A00AA00A00A00AA000000AA00ADA00AA00ADAAAA00AAAEA8DA800AAAA00ADAAEA8AA8DA00AA0 +0AA00A00A00A00A00AE00A00A00AAAAADAA8000000A800AA00A00AE00A00A00A00AA8DA00AA00A +00AA00A00AA00A00AD00AAA8AA805BFFFFF5B5B7F055FB5B5BFB5CF8A055BFF5FF5B5CFAD55CF0 +00F0B5A80F000F000F0FFFAAD00AD00000000AD00AD00A800AAA00AD00AAA8E800ADA8AAAAA00A +DA800AAA8A8AADAAA00A8A00000A00A00A00A00A800A00A000000A8A9A00AD00AA00AD00A00A80 +0A00A00A00ADAAAA00000A00AD00A00AD00A00AA00A8EAA9A05B5B5B5B5B5CF05BF5B5B5F55CFA +A0BB5BFFFBB5B7FA85BCF0B1F05BEA0F000F000F0FFFA8A00AA00000000AA00AA00DA00A0000AA +00000AAA008AAADA0000AA8AA00A8ADAADAA0600AAADAAA00A00A00A00A00AA00800A00AA00EAA +AA00AA00E800AA00A00AA00800A00A00AA00ADAAA00A00AA00A00AA00A000A00AAA8AAA05B5B5B +5B5B5CF05BF5B5B5FBB7FEA055B5FFF55B5CFAAB5CF0FFF0B58A0F000F000F0FFFDAA008A000AA +000A8A0000AAA008A8DA8A008AADAA00AE8AA00AEADAAEA00AEAA8A8A00DADAE8A00008A000000 +08A00000AA00AA0000A8ADA8A0000AAA000008A00000AA00A00EA0000A8A0000EA000A00EA0000 +EA000008ADAAD8A0B5B5B5B5B5B7F0B5FB5B5BF5BCF8A0B5BFF5FFB5BCFEAB5CF08DF05BAA0F00 +0F000F0FFFA8A00AD000AD000AEA0000A8A00ADAAADA00AD8A8A00A8AA800A8AA8A8A00A8AEAAE +A00A8AA8AA8AA8AA8AA8AA8AA8AEAADA00A8A8AA8AA8AAA0000A8AA8AA8AA8AEAADA00AEA8AA8A +A8AA8AA8A800A8A8A8A8AA8A8A8A8AA8A8AAA05B5B5B5B5B5CF05BFFFFFFF5B7FAA05B5F5B5FB5 +B7F8ABB7F000F0B5AD0F000F000F0FFFAAE00AA00A8AA00A8AA00AAEA00AAA00AA00AAAAEA00AA +AEA00AA00AEAA00AAA8AA8A00AA00AAEAAEAAEAAEAAEAAEAAAA8AA00AAEAAEAAEAAEA800AEAAEA +AEAAEAAAA8AA00A8AAAEAAEAAEAAEAAA00AADAAAEAAEAAEAAEAAEAAEAAD05B5B5B5B5B5CF0B5FF +FFFFFB5CFAD05B5B5B5B5B5CFAAB5CF0B1F05BAA0F000F000F0FFFDA8009A00DA9A00DA9A00DA8 +DA00000A9A000000A8008DA8DA0000DA8000000DA8DA9A00008DA8DA8DA8DA8DA8DA8DA8DA9A00 +DA8DA8DA8DA8DA00A8DA8DA8DA8DA8DA9A00A00DA8DA8DA8DA8DA8DA9A00D8AD8AD8AD8AD8AD8A +D8A05B55B55B55B7F055B55B5555B7F8A05B55B55B55B7FDAB57F0B1F0B58A0F000F000F0FFFAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAA0000000000000F0000000000000FAA0000000000000FAABBCF02B +F05BAD0000000000000F8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8 +DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8 +DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8DA8 +DA8DA8DA8DA8DA85B7F02BF0BBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5CF02BF055B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5 +B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5 +B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5 +B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B7F02BF0B5B5B5B5B5 +B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5 +B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5 +B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5 +B5B5BCF000F0000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000007F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FF040000002701FFFF04000000 +2701FFFF030000000000 +}\plain\f6\fs18 +\par \plain\f6\fs18\b Figure 16 IMAGELST\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 IMAGELST.MAK +\par IMAGELST.DLG +\par These files are available on any MSJ bulletin board +\par +\par IMAGELST.RC +\par #include "windows.h" +\par #include "IMAGELST.h" +\par +\par IMAGELST ICON IMAGELST.ICO +\par +\par Tie BITMAP TIE.BMP +\par +\par IMAGELST MENU +\par BEGIN +\par POPUP "&File" +\par \{ +\par MENUITEM "&New", IDM_NEW, GRAYED +\par MENUITEM "&Open...", IDM_OPEN, GRAYED +\par MENUITEM "&Save", IDM_SAVE, GRAYED +\par MENUITEM "Save &As...", IDM_SAVEAS, GRAYED +\par MENUITEM SEPARATOR +\par MENUITEM "&Print...", IDM_PRINT, GRAYED +\par MENUITEM "P&rint Setup...", IDM_PRINTSETUP, GRAYED +\par MENUITEM SEPARATOR +\par MENUITEM "E&xit", IDM_EXIT +\par \} +\par POPUP "&Edit" +\par \{ +\par MENUITEM "&Undo\\tCtrl+Z", IDM_UNDO, GRAYED +\par MENUITEM SEPARATOR +\par MENUITEM "Cu&t\\tCtrl+X", IDM_CUT, GRAYED +\par MENUITEM "&Copy\\tCtrl+C", IDM_COPY, GRAYED +\par MENUITEM "&Paste\\tCtrl+V", IDM_PASTE, GRAYED +\par MENUITEM "Paste &Link" IDM_LINK, GRAYED +\par MENUITEM SEPARATOR +\par MENUITEM "Lin&ks..." IDM_LINKS, GRAYED +\par \} +\par +\par POPUP "&Help" +\par \{ +\par MENUITEM "&Contents", IDM_HELPCONTENTS +\par MENUITEM "&Search for Help On...", IDM_HELPSEARCH +\par MENUITEM "&How to Use Help", IDM_HELPHELP +\par MENUITEM SEPARATOR +\par MENUITEM "&About IMAGELST...", IDM_ABOUT +\par \} +\par END +\par +\par IMAGELST ACCELERATORS +\par BEGIN +\par VK_F1, IDM_HELPCONTENTS, VIRTKEY +\par "?", IDM_ABOUT, ALT +\par "/", IDM_ABOUT, ALT +\par END +\par +\par +\par +\par ; Bring in the dialogs: +\par RCINCLUDE IMAGELST.DLG +\par +\par ; Bring in the version stamping information: +\par RCINCLUDE IMAGELST.RCV +\par +\par IMAGELST.H +\par #define IDM_NEW 100 +\par #define IDM_OPEN 101 +\par #define IDM_SAVE 102 +\par #define IDM_SAVEAS 103 +\par #define IDM_PRINT 104 +\par #define IDM_PRINTSETUP 105 +\par #define IDM_EXIT 106 +\par #define IDM_UNDO 200 +\par x +\par #define IDM_COPY 202 +\par #define IDM_PASTE 203 +\par #define IDM_LINK 204 +\par #define IDM_LINKS 205 +\par #define IDM_HELPCONTENTS 300 +\par #define IDM_HELPSEARCH 301 +\par #define IDM_HELPHELP 302 +\par #define IDM_ABOUT 303 +\par +\par #define DLG_VERFIRST 400 +\par #define DLG_VERLAST 404 +\par +\par +\par +\par BOOL InitApplication(HANDLE); +\par BOOL InitInstance(HANDLE, int); +\par LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +\par LRESULT CALLBACK ClientWndProc(HWND, UINT, WPARAM, LPARAM); +\par LRESULT CALLBACK About (HWND, UINT, WPARAM, LPARAM); +\par +\par IMAGELST.C +\par // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF +\par // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO +\par // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A +\par // PARTICULAR PURPOSE. +\par // +\par // Copyright \'a9 1993, 1994 Microsoft Corporation. All Rights Reserved. +\par // +\par // PROGRAM: IMAGELST.c +\par // +\par // PURPOSE: IMAGELST template for Windows applications +\par // +\par // +\par // PLATFORMS: Chicago,NT +\par // +\par // FUNCTIONS: +\par // WinMain() - calls initialization function, processes message loop +\par // InitApplication() - initializes window data and registers window +\par // InitInstance() - saves instance handle and creates main window +\par // WndProc() - processes messages +\par // CenterWindow() - used to center the "About" box over application window +\par // About() - processes messages for "About" dialog box +\par // +\par // COMMENTS: +\par // +\par // The Windows SDK IMAGELST Application Example is a sample application +\par // that you can use to get an idea of how to perform some of the simple +\par // functionality that all Applications written for Microsoft Windows +\par // should implement. You can use this application as either a starting +\par // point from which to build your own applications, or for quickly +\par // testing out functionality of an interesting Windows API. +\par // +\par // This application is source compatible for with Windows 3.1 and +\par // Windows NT. +\par // +\par // SPECIAL INSTRUCTIONS: N/A +\par // +\par +\par #include // required for all Windows applications +\par #if !defined(_WIN32) +\par #include +\par #endif +\par #include "IMAGELST.h" // specific to this program +\par +\par //*********************** NEW CODE START ******* +\par +\par #include "commctrl.h" // for Image List +\par +\par //*********************** NEW CODE END ******* +\par +\par // Windows NT defines APIENTRY, but 3.x doesn't +\par #if !defined (APIENTRY) +\par #define APIENTRY far pascal +\par #endif +\par +\par // Windows 3.x uses a FARPROC for dialogs +\par #if !defined(_WIN32) +\par #define DLGPROC FARPROC +\par #endif +\par +\par HINSTANCE hInst; // current instance +\par HWND hWndClient; // Handle to Client Window +\par +\par char szAppName[] = "IMAGELST"; // The name of this application +\par char szTitle[] = "IMAGELST Sample Application"; // The title bar text +\par +\par //*********************** NEW CODE START ******* +\par +\par char szAppNameClient[] = "ImageClient"; // The client window class +\par +\par //*********************** NEW CODE END ******* +\par +\par // +\par // FUNCTION: WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +\par // +\par // PURPOSE: calls initialization function, processes message loop +\par // +\par // COMMENTS: +\par // +\par // Windows recognizes this function by name as the initial entry point +\par // for the program. This function calls the application initialization +\par // routine, if no other instance of the program is running, and always +\par // calls the instance initialization routine. It then executes a +\par // message retrieval and dispatch loop that is the top-level control +\par // structure for the remainder of execution. The loop is terminated +\par // when a WM_QUIT message is received, at which time this function +\par // exits the application instance by returning the value passed by +\par // PostQuitMessage(). +\par // +\par // If this function must \plain\f6\fs18\ul abort\plain\f6\fs18 before entering the message loop, it +\par // returns the conventional value NULL. +\par // +\par +\par int APIENTRY WinMain( +\par HINSTANCE hInstance, +\par HINSTANCE hPrevInstance, +\par LPSTR lpCmdLine, +\par int nCmdShow +\par ) +\par \{ +\par MSG msg; +\par HANDLE hAccelTable; +\par +\par // Other instances of app running? +\par if (!hPrevInstance) \{ +\par // Initialize shared things +\par if (!InitApplication(hInstance)) \{ +\par return (FALSE); // Exits if unable to initialize +\par \} +\par \} +\par +\par // Perform initializations that apply to a specific instance +\par if (!InitInstance(hInstance, nCmdShow)) \{ +\par return (FALSE); +\par \} +\par +\par hAccelTable = LoadAccelerators (hInstance, szAppName); +\par +\par // Acquire and dispatch messages until a WM_QUIT message is received. +\par while (GetMessage(&msg, // message structure +\par NULL, // handle of window receiving the message +\par 0, // lowest message to examine +\par 0))\{ // highest message to examine +\par if (!TranslateAccelerator (msg.hwnd, hAccelTable, &msg)) \{ +\par TranslateMessage(&msg);// Translates virtual key codes +\par DispatchMessage(&msg); // Dispatches message to window +\par \} +\par \} +\par +\par +\par // Returns the value from PostQuitMessage +\par return (msg.wParam); +\par +\par // This will prevent 'unused formal parameter' warnings +\par lpCmdLine; +\par \} +\par +\par o +\par o +\par o +\par +\par //*********************** NEW CODE START ******* +\par +\par // This window lives inside the client area -- it does all the interesting +\par // stuff for this demo program +\par +\par LRESULT CALLBACK ClientWndProc( +\par HWND hWnd, // window handle +\par UINT message, // type of message +\par WPARAM uParam, // additional information +\par LPARAM lParam // additional information +\par ) +\par \{ +\par HDC hDC; // DC to draw to +\par PAINTSTRUCT ps; // For BeginPaint/EndPaint +\par RECT rc; // Rect of image (for hit testing) +\par POINT pt; // Cursor pos +\par +\par // These static variables are placed here just to keep the +\par // window proc and it's variables all on the same page. +\par +\par static int dxHotspot; // Offset of image and cursor +\par static int dyHotspot; // Offset of image and cursor +\par static BOOL bDragging; // If the user is dragging the image +\par static HIMAGELIST hImageList; // Image list handle +\par static int iXPos; // X Location of image +\par static int iYPos; // Y Location of image +\par +\par switch ( message ) +\par \{ +\par case WM_CREATE: +\par +\par // Load the Image List +\par hImageList = ImageList_LoadBitmap ( hInst, +\par "TIE", +\par 32, +\par 1, +\par RGB (255,0,0) +\par ); +\par +\par // Init position of image +\par iXPos = iYPos = 0; +\par bDragging = FALSE; +\par break; +\par +\par case WM_PAINT: +\par +\par // Get the DC +\par hDC = BeginPaint ( hWnd, &ps ); +\par +\par // Draw the first image ( Image number 0 ) on the DC +\par if ( hImageList ) +\par \{ +\par ImageList_Draw ( hImageList, +\par 0, +\par hDC, +\par iXPos, +\par iYPos, +\par ILD_TRANSPARENT +\par ); +\par \} +\par +\par // Release the DC +\par EndPaint ( hWnd, &ps ); +\par break; +\par +\par case WM_LBUTTONDOWN: +\par +\par // Get the mouse position +\par pt.x = LOWORD (lParam); +\par pt.y = HIWORD (lParam); +\par +\par // Figure the hit test region of the 32x32 image +\par rc.left = iXPos; +\par rc.top = iYPos; +\par rc.right = rc.left + 32; +\par rc.bottom = rc.top + 32; +\par +\par // Figure out where in the region the user clicked, +\par // and figure the hotspot offset +\par dxHotspot = pt.x - iXPos; +\par dyHotspot = pt.y - iYPos; +\par +\par // If the hittest passes... +\par if ( hImageList && PtInRect ( &rc, pt )) +\par \{ +\par // Set drag flag +\par bDragging = TRUE; +\par +\par // Hide the cursor +\par ShowCursor ( FALSE ); +\par +\par // Capture the mouse +\par SetCapture ( hWnd ); +\par +\par // Call the ImageList API to start the drag process +\par ImageList_StartDrag ( hImageList, // Handle to Image list +\par hWnd, // hWnd of this client +\par 0, // Image #0 +\par iXPos, // Position of image +\par iYPos, // Position of image +\par dxHotspot, // Hotspot offset +\par dyHotspot); // Hotspot offset +\par +\par // Show the new "fake" cursor +\par ImageList_DragShow ( TRUE ); +\par \} +\par break; +\par +\par case WM_MOUSEMOVE: +\par +\par if ( bDragging ) +\par \{ +\par // Call the ImageList API to automatically move the image around +\par ImageList_DragMove ( LOWORD (lParam), +\par HIWORD (lParam) +\par ); +\par \} +\par break; +\par +\par case WM_LBUTTONUP: +\par +\par if ( bDragging ) +\par \{ +\par // Tell the ImageList to stop dragging and erase the "fake" cursor +\par ImageList_EndDrag (); +\par // Release mouse capture +\par ReleaseCapture (); +\par // Bring back the real cursor +\par ShowCursor ( TRUE ); +\par // Calculate the image's new position +\par iXPos = LOWORD (lParam) - dxHotspot; +\par iYPos = HIWORD (lParam) - dyHotspot; +\par // Force a repaint +\par InvalidateRect ( hWnd, NULL, TRUE ); +\par // Clear the drag flag +\par bDragging = FALSE; +\par \} +\par break; +\par +\par case WM_DESTROY: // message: window being destroyed +\par +\par // Housekeep +\par if ( hImageList ) +\par \{ +\par ImageList_Destroy ( hImageList ); +\par hImageList = NULL; +\par \} +\par break; +\par +\par default: // Passes it on if unproccessed +\par return (DefWindowProc(hWnd, message, uParam, lParam)); +\par \} +\par return (0); +\par \} +\par +\par //*********************** NEW CODE END ******* +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Almost every new line of code is in a new window procedure called ClientWndProc. This procedure maintains a list of static variables to determine where to draw Vader's ship (iXPos, iYPos), and a few other helper variables. +\par When this client window is created, the code under WM_CREATE uses that ImageList_LoadBitmap API I blathered about earlier. The code under WM_DESTROY deletes the Image List with the ImageList_Destroy API. +\par The code under WM_PAINT is quite simple\emdash it just calls the ImageList_Draw API to splat Darth's TIE onto the black background. Isn't this a lot easier than doing BitBlts? +\par The interesting code comes in the WM_LBUTTONDOWN/ WM_MOUSEMOVE/WM_LBUTTONUP trilogy. The code in WM_LBUTTONDOWN follows the steps above for drag-and-drop. The only part that's a little weird is the calculation of the hotspot for the ImageList_StartDrag API call in WM_LBUTTONDOWN. Since the user can click on any pixel within the TIE fighter, that point must be set as the hotspot for the image being dragged. If you don't set the hotspot, the image will jump to the 0,0 position of the image's rectangle, which is ugly (to see this, just change dxHotspot and dyHotspot in the sample to 0,0). By subtracting the upper-left position of the image from the current cursor position, you can counter this jumpiness and give Vader a smooth ride into space. +\par That covers the APIs and some general usage of the Image List. I have another sample program that will actually implement some of the functionality of the Image List, as well as implement the TreeView control (which is coming up next on your plate of Chicago goodies). +\par Even though the Image List is intended mainly for use by controls, there is no reason you cannot use it as a convenient bitmap drawing tool or even as an icon database. Many graphics editing tools will find the Image List invaluable for managing arrays of images and drawing them easily. +\par The TreeView Control +\par By now you are probably pretty bored of dragging and dropping Darth Vader all over your window. Let's take a look at the more common use of an Image List: as a graphical enhancement to a control. Let's use the TreeView as the control. I picked the TreeView control because it is one of the most common questions I get asked as a Microsoft support engineer: "Do you guys have a list box that supports a tree-like structure?" Well, finally, I can answer "Yes!" and steer them to the TreeView control. +\par There is another control in Figure 2 called the ListView, which is used similarly to the TreeView. The ListView control provides for a group of items that are displayed as a name and/or icon that can be organized into several formats. These are the small icon format, the list format, and the report format. After you master the TreeView, you should be able to figure out the ListView control by just scanning over the COMMCTRL.H file (you will notice a striking similarity in their approach). +\par What is a TreeView good for? It's perfect for displaying lists of items that you want to group into different folders. These folders can have child folders, and it is possible to hide the information in a folder by collapsing it. To get a feel for how the TreeView control works, play with the left pane of Chicago's Explorer, or play with the TREEVIEW sample program (see Figures 17 and 18) from this article (you will need to be running Chicago). +\par \plain\f6\fs18\b Figure 17 The TreeView control offers gut-wrenching excitement.\plain\f6\fs18 +\par {\pict\wmetafile8\picw8182\pich10399\picscalex99\picscaley99\picwgoal4649\pichgoal5909 +0100090000039978000000004E7800000000050000000B0200000000050000000C029F28F61F03 +0000001E000700000016049F28F61F00000000050000000C02B8280A20050000000B0200000000 +030000001E00070000001604B8280A2000000000050000000C0216172A12050000000B02000000 +00050000000B02000000004E780000430F2000CC0000008A0136010000000016172A1200000000 +28000000360100008A010000010004000000000000000000130B0000130B000000000000000000 +00000000000000BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 +FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000008787878787878787878787878 +787878787878787878787878787878787878787878787878787878787878787878787878787878 +787878787777787787878787877877787878777878787877878777787787777877777787878778 +787778787877777777877778787787878787878787878787878787878787878787878787878787 +87878787878787878787878787878787878787878787877770000F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770000F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777780000F770000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000007770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF044844544584584845454454845844545448544545445444545445414844445444584544 +1448458484444541484545844545484583FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF354454484444445448448445484454844844448444484454844584444548548458454484 +4845445454548444544444548448454440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF778787778877007770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF048448454854844544545484454484544454845484454844458454854844454444445445 +4444844448444584485484445445448543FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFF +FFFFFF344454448444548484484454548454484584544845844458444444444545844845848458 +4584458484541444544845854844845440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFF +FFFFFF045844854458445454454148445448454444484544444144584584585484445444445444 +4444544544484448454454444445444483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F00000F3F0FFFFFFF +FFFFFF384445445444584444844444484545448545454485454448454454444454548548544854 +8414848445445454448448548548458540FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777077778007770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF033300000003330FFFFFF +FFFFFF044544844854445484548548454484544484844544848545448448548448444454484445 +4544445484844484144544454445444443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7770007777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F000000000F3F0FFFFF +FFFFFF358485448448458445444444548544484544445845444444844454445445485484544584 +4845454454458454445845484584484580FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7700000778007770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01330000000003330FFFFF +FFFFFF044454454545444458458458444448454441484444414845445484484584444454448444 +5448484544544484584448454444544443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F3F300000003F1F30FFFF +FFFFFF345448484484485444445445485FF5448544545485445448548444544445854844854548 +4FF4454848484544448544448454854840FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0333333000003333330FFFF +FFFFFF08484445445444484584484444444F454484484544844844445485484584444545444444 +544F444544454485444484545484444543FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F30003F3F30003F30FFFF +FFFFFF3444FFFF484FFF45F444F45FFF484F484544F444FF45F45FFFF4F444F44FFFF48448FFFF +484F4844FFF48F44FFF45F484F45FFF440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFF7007770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0330000033100000330FFFF +FFFFFF045F4854F4F485F4F441F4F485F54FF44845F48F44F4F4F484F4F441F4F444F4445F4844 +F45FF45F454F4F4F485F4F445F4F485F83FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F00000F3F00000F30FFFF +FFFFFF384F444454F444F4F544F4F44444F44F4484F5454F84F4F444F4F544F4F454F4544F4454 +44F44F4F84454F4F444F4F544F4F444440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8FFFFFF0330000033300000330FFFF +FFFFFF054F454844F584F4F484F4FFFFF4F84F5444F444F544F84FFFF4F484F4F484F8484F5484 +54F54F4F54844F4F584F4F484F4FFFFF43FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F30003F3F30003F0FFFFF +FFFFFF344F484445F444F4FF44F4F444F4F45F8454F58F44F4F44444F4FF44F4F444F4454F4454 +84F48F4F444F4F4F444F4FF44F5F444F40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333333333303330FFFFF +FFFFFF048F4445484FFF44F4FF445FFF44F44F4484F444FF48F45FFF44F4FF445FFFF4544F4844 +54F44F48FFF45F44FFF48F4FF444FFF453FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000FFFFFF +FFFFFF345F85484544545448545448545448545444F4454454F44854544854544854F4484F4548 +4445445454484F45445454485484454840FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0F0F0F00FFFFFF +FFFFFF044F4444F484444854444854444854444854F5848444F85444485444485444F8544F4444 +F484844448544F84844448544454844543FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0F0000F0FFFFFF +FFFFFF3845FFFF4444584444584444584444584444F4444458F44458444458444458F44458FFFF +4544445844445F44445844445844445440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F000FF0FFFFFFFF +FFFFFF054844844148444148444148444148444148444148444148444148444148444148444148 +4441484441484441484441484441484483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0F000000FFFF +FFFFFF344454454454854454854454854454854454854454854454854454854454854454854454 +8544548544548544548544548544548540FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF000077770FFF +FFFFFF048448548444548444548444548444548444548444548444548444548444548444548444 +5484445484445484445484445484445443FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0077777770FFF +FFFFFF354544444584444584444584444584444584444584444584444584444584444584444584 +4445844445844445844445844445844480FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000077777000FFFF +FFFFFF044845845445845445845445845445845445845445845445845445845445845445845445 +8454458454458454458454458454458453FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07777777700FFFFFFF +FFFFFF345444544844544844544844544844544844544844544844544844544844544844544844 +5448445448445448445448445448445440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0077777000FFFFFFFF +FFFFFF084584484584484584484584484584484584484584484584484584484584484584484584 +4845844845844845844845844845844843FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFF +FFFFFF344444544444544444544444544444544444544444544444544444544444544444544444 +5444445444445444445444445444445440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF058458458458458458458458458458458458458458458458458458458458458458458458 +4584584584584584584584584584584583FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF344444444444444444444444444444444444444444444444444444444444444444444444 +4444444444444444444444444444444440FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF030303030303030303030303030303030303030303030303030303030303030303030303 +0303030303030303030303030303030303FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF0F0FF0FF0FF0FF0FF0FF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF00FF0FF0FF0FF0FF0FF0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF7F00F0FF0FF0FF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF7FF77F00FF0FF0FF0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF77FF77F000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF77FF7FF00F0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7FF48FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF84848FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF18848FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF3FF184F848FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF3FFFF48484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F4884FFFFFFFFFFFFFFFFFFF0FFF0FFFFF000FFF000FFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF3FF3F48FFFFFFFFFFFFFFFFFFF0FFF0FFFF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFF0F0F0F0FFF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8F8F8 +F8F8F8F8F8F8F8FFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0FFF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FFF000FFF000FFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FFFFFFFFFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFF0FFFFFFFFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFF0FFFFFFFFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF000F0FFF000F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFF00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFF0FFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +F0080FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +0088800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +08888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFF0 +0888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770000000000000000000000 +888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770088888888888888888888 +888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770088888888888888888888 +888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770088888888888888888888 +888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770088888888888888888888 +888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770088888888888888888888 +888880FFFFFFFFFFF0FFFF0FFF000FFF0FFF0FFFFFFF0FFFFF000FF0FF0FFF0FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777778077702B0F770088888888888888888888 +888880FFFFFFFFFFF0FFF00FF0FFF0FF0FFF0FFFFFFF0FFFF0FFF0F0FF0FF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770008888888888888888888 +88880FFFFFFFFFFFF0FFF00FF0FFFFF0F0F0F0FFFFFF0FFFF0FFF0F0FF0F0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770F08888888888338888888 +88880FFFFFFFFFFFF0FF0F0FF00000F0F0F0F0FFFFFF0FFFF0FFF0F0FF00FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770F08888888833333888888 +88880FFFFFFFFFFFF0F0FF0FF0FFF0F0FF0FF0FFFFFF0FFFF0FFF0F0FF0F0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770FF0F770F08888883333B3B388888 +88880FFFFFFFFFFFF0F0FF0FFF000FF0FF0FF0FFFFF0F0FFFF000FF00F0FF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770F000003333B3333388888 +88880FFFFFFFFFFFF00FFF0FFFFFFFFFFFFFFFFFFF0FFF0FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770F60F770FFFF33303330B33388888 +88880FFFFFFFFFFFF00FFF0FFFFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFF3B33B03B33B388888 +88880FFFFFFFFFFFF0FFFF0FFFFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770FF0F770FFFF333B3033333388888 +8880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFF3303333B33B388888 +8880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770F80F770FFFF33B33B33333388888 +88880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFF3B303333033388888 +88880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770F60F770FFFF3333B3B3B3B388888 +88880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780FF0F770FFFF33333033303388888 +88880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777778077702B0F770FFFFFF333333333388888 +8880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFF0088888888 +880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770F60F770FFFFFFFFFFFFF08888888 +880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFF0000888 +880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770F60F770FFFFFFFFFFFFFFFFFF000 +000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF0F0FF0FF0FF0FF0FF0FF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF00FF0FF0FF0FF0FF0FF0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF7F00F0FF0FF0FF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF7FF77F00FF0FF0FF0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF77FF77F000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF77FF7FF00F0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF7FF48FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF84848FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF18848FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF3FF184F848FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF3FFFF48484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F4884FFFFFFFFFFFFFFFFFFF0FFF0FFFFF000FFF000FFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF3FF3F48FFFFFFFFFFFFFFFFFFF0FFF0FFFF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFFFFFFFFFFFFFFFFF0F0F0F0FFF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8F8F8 +F8F8F8F8F8F8F8FFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0FFF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FF0FFF0F0FFF0F0FF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FFF000FFF000FFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FFFFFFFFFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFF0FFFFFFFFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFF0FFFFFFFFFFFFFFFF +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777807770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777707780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777707770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF000F0FFF000F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF877777777777807780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777878787878007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF033313331333330FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03333300000333330FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F3F300000003F1F30FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0333331333333333330FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777780077803B0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F1F3F3F3F3F1F3F30FFFF +FFFFFFFFFF000F0FF0FFF000FFF0000FF0FFF0FFFFF0F0FF0FF0FF000FF0FF0FF000FFF0000FFF +FFF0FFFFF000FF0FFF0FF000FF0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0333303333333033330FFFF +FFFFFFFFF0FFF00FF0FF0FFF0F0FFF0F0FFFF0FFFFF0F0FF0FF0F0FFF0F0FF0F0FFF0F0FFF0FFF +FFF0FFFF0FFF0F0FF0FF0FFF0F0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F30003F1F30003F30FFFF +FFFFFFFFF0FFFF0FF0FF0FFFFF0FFF0F0FFFFF00000FF0FF0FF0F0FFFFF0FF0F0FFFFF0FFF0FFF +FF0F0FFF0FFF0F0FF0FF0FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8FFFFFF0333300333330033330FFFF +FFFFFFFFF0FFFF0FF0FF00000FF0000F0FFFFF0FFF0FF0FF0FF0F00000F0FF0F0FFFFFF0000FFF +FF0F0FFF0FFF0F0FF0FF00000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFF0FF000FF0FF0FFF0FFFFF0F0FFFFF0FFF0FF0FF0FF0F0FFF0F0FF0F0FFF0FFFFF0FFF +F0FFF0FF0FFF0F0FF0FF0FFF0F0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333333333333330FFFFF +FFFFFFFFF0FFFFFFF00FF000FFF000FF00FFFFF0F0FFF000F00FFF000FF00F0FF000FFF000FFFF +F0FFF0FFF000FF00F00FF000FF0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFF +FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFF0FFFFFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F0FFF0FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF00777777777777770FFFFF +FFFFFFFFF0FFFF0FFFFFFFFFFFFFFFFF0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0FFFFF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780410F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777777777777700FFFFF +FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF +0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777780077803B0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFF033313331333330FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333300000333330FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F3F300000003F1F30FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333331333333333330FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F1F3F3F3F3F1F3F30FFFF +FFFFFFFFFF000F0FF0FFF000FFF0000FF0FFF0FFFFF0F0FF0FF0FF000FF0FF0FF000FFF0000FFF +F0000FFFFF000FF0FF0FF0FF000FF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333303333333033330FFFF +FFFFFFFFF0FFF00FF0FF0FFF0F0FFF0F0FFFF0FFFFF0F0FF0FF0F0FFF0F0FF0F0FFF0F0FFF0FFF +F0FFF0FFF0FFF0F0FF0FF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F30003F1F30003F30FFFF +FFFFFFFFF0FFFF0FF0FF0FFFFF0FFF0F0FFFFF00000FF0FF0FF0F0FFFFF0FF0F0FFFFF0FFF0FFF +F0FFFF0FF0FFFFF0FF0FF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8FFFFFF0333300333330033330FFFF +FFFFFFFFF0FFFF0FF0FF00000FF0000F0FFFFF0FFF0FF0FF0FF0F00000F0FF0F0FFFFFF0000FFF +F0FFFF0FF00000F0FF0FF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFF0FF000FF0FF0FFF0FFFFF0F0FFFFF0FFF0FF0FF0FF0F0FFF0F0FF0F0FFF0FFFFF0FFF +F0FFFF0FF0FFF0F0FF0FF0F0FFF0F00FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333333333333330FFFFF +FFFFFFFFF0FFFFFFF00FF000FFF000FF00FFFFF0F0FFF000F00FFF000FF00F0FF000FFF000FFFF +F0FFFF0FFF000FF000F00FFF000FF0F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFF +FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFF0FFFFFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F0FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF00777777777777770FFFFF +FFFFFFFFF0FFFF0FFFFFFFFFFFFFFFFF0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777777777777700FFFFF +FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF +F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFF033313331333330FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333300000333330FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F3F300000003F1F30FFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333331333333333330FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F1F3F3F3F3F1F3F30FFFF +FFFFFFFFF0FFFFF0FFF0000FF0000F0FF000FFFFF0FFFFF0FFF000FFF00F0F0FFF0FF0FF0000F0 +F0FFF0FFFFF000FFF0FFF0FF000FFF000FF0FFF0FFF0FFF0FFFFF0000FFF0FFFF000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333303333333033330FFFF +FFFFFFFFF0FF0FF0FF0FFF0F0FFF0F0F0FFF0FFFF0FF0FF0FF0FFF0F0FF00F0FFF0F0FF0FFF0F0 +F0FFF0FFFF0FFF0FF0FFF0F0FFF0F0FFF0F0FF0FFFF0FFF0FFFF0FFF0FFF0FFF0FFF0FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F30003F1F30003F30FFFF +FFFFFFFFF0FF0FF0FF0FFF0F0FFF0F0F0FFFFFFFF0FF0FF0FF0FFF0F0FFF0F0FFF0F0FF0FFF0F0 +F0FFF0FFFFFFFF0FF0FFF0F0FFF0F0FFFFF0F0FFFF0F0F0F0FFF0FFF0FF0F0FF0FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8FFFFFF0333300333330033330FFFF +FFFFFFFFF0F0F0F0FFF0000F0FFF0F0F0FFFFFFFF0F0F0F0FF0FFF0F0FFF0F0FFF0F0FFF0000F0 +F0FFF0FFFFFFFF0FF0FFF0F0FFF0F0FFFFF00FFFFF0F0F0F0FFFF0000FF0F0FF00000FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFF0F0F0F0FFFFFF0F0FFF0F0F0FFF0FFFF0F0F0F0FF0FFF0F0FFF0F00FF0F0FFFFFF0F0 +F00FF0FFFFF000FFF00FF0F0FFF0F0FFF0F0F0FFF0FFF0FFF0FFFFFF0F0FFF0F0FFF0FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333333333333330FFFFF +FFFFFFFFF00FFF00FFF000FFF0000F0FF000FFFFF00FFF00FFF000FF0FFF0F0F00FF00FF000FF0 +F0F00FFFFF0FFFFFF0F00FFF000FFF000FF0FF0FF0FFF0FFF0FFF000FF0FFF0FF000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFF +FFFFFFFFF00FFF00FFFFFFFFFFFFFFFFFFFFFFFFF00FFF00FFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFF0FFFFFF0FFFFFFFFFFFFFFFFF0FFFFF0FFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF00777777777777770FFFFF +FFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFF0FFF0FF0FFFFFFFFFFFFFFFFF0FFFF0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777777777777700FFFFF +FFFFFFFFF0FFFFF0FFFFFFFFFFFFFF0FFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +FFFFFFFFFFF000FFF0FFFFFFFFFFFFFFFFF0FFFF0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFF033313331333330FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780F60F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333300000333330FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F3F300000003F1F30FFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333331333333333330FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F1F3F3F3F3F1F3F30FFFF +FFFFFFFFF0FFFFF0FFF0000FF0000F0FF000FFFFF0FFFFF0FFF000FFF00F0F0FFF0FF0FF0000F0 +F0FFF0FFFF0FFFF0FFF000FFFF0FFFF000FF0FF00F0FF0F0FF000FF0FFF0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333303333333033330FFFF +FFFFFFFFF0FF0FF0FF0FFF0F0FFF0F0F0FFF0FFFF0FF0FF0FF0FFF0F0FF00F0FFF0F0FF0FFF0F0 +F0FFF0FFFF0FFFF0FF0FFF0FFF0FFF0FFF0F0F0FF00F0FF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780F60F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F30003F1F30003F30FFFF +FFFFFFFFF0FF0FF0FF0FFF0F0FFF0F0F0FFFFFFFF0FF0FF0FF0FFF0F0FFF0F0FFF0F0FF0FFF0F0 +F0FFF0FFFF0FFFF0FF0FFFFFF0F0FF0FFF0F0F0FFF0F0FF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8FFFFFF0333300333330033330FFFF +FFFFFFFFF0F0F0F0FFF0000F0FFF0F0F0FFFFFFFF0F0F0F0FF0FFF0F0FFF0F0FFF0F0FFF0000F0 +F0FFF0FFFF0FFFF0FF00000FF0F0FF0FFF0F0F0FFF0F0FF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFF0F0F0F0FFFFFF0F0FFF0F0F0FFF0FFFF0F0F0F0FF0FFF0F0FFF0F00FF0F0FFFFFF0F0 +F00FF0FFFF00000FFF0FFF0F0FFF0F0FFF0F0F0FFF0F0FF0F0FFF0F00FF0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333333333333330FFFFF +FFFFFFFFF00FFF00FFF000FFF0000F0FF000FFFFF00FFF00FFF000FF0FFF0F0F00FF00FF000FF0 +F0F00FFFFF0FFFF0FFF000FF0FFF0FF000FF0F0FFF0F00F0FF000FF0F00FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780560F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFF +FFFFFFFFF00FFF00FFFFFFFFFFFFFFFFFFFFFFFFF00FFF00FFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFF0FFFF0FFFFFFFFFFFFFFFFFFFF0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF00777777777777770FFFFF +FFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFF0FFFF0FFFFFFFFFFFFFFFFFFFF0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780F60F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777777777777700FFFFF +FFFFFFFFF0FFFFF0FFFFFFFFFFFFFF0FFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +FFFFFFFFFF00000FFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780F60F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780F60F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077802B0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFF033313331333330FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333300000333330FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F3F300000003F1F30FFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333331333333333330FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F1F3F3F3F3F1F3F30FFFF +FFFFFFFFF0FFFFF0FFF0000FF0000F0FF000FFFFF0FFFFF0FFF000FFF00F0F0FFF0FF0FF0000F0 +F0FFF0FFFFFF0FFFF0F0000FFF000FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF0333303333333033330FFFF +FFFFFFFFF0FF0FF0FF0FFF0F0FFF0F0F0FFF0FFFF0FF0FF0FF0FFF0F0FF00F0FFF0F0FF0FFF0F0 +F0FFF0FFFFFF0FFFF0F0FFF0F0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F30003F1F30003F30FFFF +FFFFFFFFF0FF0FF0FF0FFF0F0FFF0F0F0FFFFFFFF0FF0FF0FF0FFF0F0FFF0F0FFF0F0FF0FFF0F0 +F0FFF0FFFFF0F0FFF0F0FFF0F0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8FFFFFF0333300333330033330FFFF +FFFFFFFFF0F0F0F0FFF0000F0FFF0F0F0FFFFFFFF0F0F0F0FF0FFF0F0FFF0F0FFF0F0FFF0000F0 +F0FFF0FFFFF0F0FFF0F0FFF0F00000F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F3F3F3F3F3F3F0FFFFF +FFFFFFFFF0F0F0F0FFFFFF0F0FFF0F0F0FFF0FFFF0F0F0F0FF0FFF0F0FFF0F00FF0F0FFFFFF0F0 +F00FF0FFFF0FFF0FF0F0FFF0F0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF03333333333333330FFFFF +FFFFFFFFF00FFF00FFF000FFF0000F0FF000FFFFF00FFF00FFF000FF0FFF0F0F00FF00FF000FF0 +F0F00FFFFF0FFF0FF0F0000FFF000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFF +FFFFFFFFF00FFF00FFFFFFFFFFFFFFFFFFFFFFFFF00FFF00FFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFF00777777777777770FFFFF +FFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777777777777700FFFFF +FFFFFFFFF0FFFFF0FFFFFFFFFFFFFF0FFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +FFFFFFFFF0FFFFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF00F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF000FFFF0FF000FFF000FF0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFF0FFF0FF0FF0FFF0F0FFF0F0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFF0FF0FF0FFFFF0FFFFF0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8F8F8 +F8F8F8F8F8F8F8FFF0FFFFFFFFFFFFFFF3FFFF0FFFFFFFFFFFFFFFFF0FF0FF00000F00000F0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF0FFFFFFFFFF1FFFFF348F0FFFFFFFFFFFFFF000FFF0FF0FFF0F0FFF0F0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFF0FFFFFFFFFF3F3FFF848F0FFFFFFFFFFFFF0FFFFFF00FF000FFF000FF0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFF3FF48F0FFFFFFFFFFFFFF0FFFFFF0FFFFFFFFFFFFFF0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFF0FFFFFFFF1FF3FFFFF84F0FFFFFFFFFFFFFF0FFF0FF0FFFFFFFFFFFFFF0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0FFFFFF1FF3FFFFFFF48F0FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFF0FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFF0FFFFFF3FFFFFF3FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF0FFFFFFFFF3FFF188FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFF0FFF8FFFFFFFFF8484F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0F844FFFFFFFF848F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFF0F4888FFF884F48F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF0F4848F4848FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770000F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFF0FF484F8484FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780FF0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF00FFFF48FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770FF0F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFF00FFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077802B0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770F60F770FFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777780077802B0F770FFFFFFFFFFFFFFFFFFF00 +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077702B0F770FFFFFFFFFFFFFFF000077 +7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077802B0F770FFFFFFFFFFFFFF0777777 +770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077702B0F770FFFFFFFFFFFFFF0777777 +7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777780077802B0F770FFFFFFFFFFFFF07777777 +77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077702B0F770FFFFFFFFFFFFF07777777 +77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780F60F770FFFFFFFFFFFF077777777 +777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077702B0F770FFFFFFFFFFFF077777777 +777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780F60F770FFFFFFFFFF00777777777 +77770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770F60F770FFFFFFFFF077777777777 +7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780F60F770FFFFFFFFF077777777777 +7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777780077702B0F770FFFFFFFFF077777777777 +770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077802B0F770FFFFFFFF0777777777777 +70FFFFFFFFFFFFFFFF0000FFF0000F0F0F0FFF000FF0FF0FFF0F0FF0000FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077702B0F770FFFFFFFF0777777777777 +0FFFFFFFFFFFFFFFF0FFFF0F0FFF0F0F0F0FF0FFF0F0FF0FFF0F0F0FFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777780077802B0F770FFFFFFF07777777777777 +0FFFFFFFFFFFFFFFF0FFFFFF0FFF0F0F0F0FF0FFF0F0FF0FFF0F0F0FFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077702B0F770FFFFFFF07777777777770 +FFFFFFFFFFFFFFFFF0FFFFFFF0000F0F0F0FF0FFF0F0FF0FFF0F0FF0000FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007780F60F770FFFFFFFF077777777770F +FFFFFF33FFFFFFFFF0FFFFFFFFFF0F0F0F0FF0FFF0F0FF00FF0F0FFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770F60F770FFFFFF0F07777777770FF +FFFF33B33FFFFFFFF0FFFFFFF000FF0F0F00FF000FF00F0F00FF0FF000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFF8007780F60F770FFFFF07077737777770FF +FF33B33333FFFFFFF0FFFFFFFFFFFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777007770F60F770FFFFF077773B377770FFF +333333B333FFFFFFF0FFFF0FFFFFFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000077802B0F770FFFFF077773337770FF33 +303B3033B3FFFFFFFF0000FFFFFFFF0F0FF0FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7878878778770077702B0F770FFFFF07777737770FFF33 +3B303B3333FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780F60F770FFFFF07777777770FFF3B +33303333B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777778007770F60F770FFFFF07777777770FFF33 +0B3B3B3333FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777770077802B0F770FFFF077777777770FFF33 +B333333B33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7700000778007770F60F770FFFF077777777770FFF33 +3033330333FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7770007777007780F60F770FFF0777777777770FFF3B +33B3B3B3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777077777007770F60F770FFF0777777777770FFF33 +3330333033FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F77777777780077802B0F770FFFF077777777770FFFFF +3333333333FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007770F60F770FFFF077777777770FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7777777777007780F60F770FFFF000000000000FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFF70077702B0F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777007780FB0F770000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000077708D0F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777780B10F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770B10F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777808D0F777777770000007777777777 +777777777777000000077777777777777777777777000000007777777770777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770B10F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777770777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770B10F777777777077777070770007 +777777777777700000777000070770777777777777707777077700077070000777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770B10F777777777077777070707770 +777777777777707777770777070707777777777777707777077077707070777077777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777808D0F777777777077777070707777 +777777777777707777770777070707777777777777707777077077777070777077777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770FC0F777777777077777070700000 +777777777777707777770777070707777777777777707777077000007070777077777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777780000F777777777000077070707770 +777777777777700007770777070707777777777777700000077077707070777077777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770B10F777777777077777070770007 +777777777777707777777000070700777777777777707777077700077070000777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777780B10F777777777077777770777777 +777777777777707777777777077707777777777777707777077777777077777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770000F777777777077777770777777 +777777777777707777777777077707777777777777707777077777777077777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770000F777777777000007070777777 +777777777777700000777777070777777777777777707777077777777077777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770FB0F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777780000F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770B10F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777780000F774444444444444444444484 +454454848545484584844544854544454844854414584485484454484545458548448548454454 +444854548458458444854484548448544545448458484548458444854854485484484548444844 +854484544848448454484544444444444548444444548444444548444444544844844844548454 +48485485485485485485485485848445848548548584847770FF0F77540F0000FFF0F00F844545 +448444544448444444458454448458445454445444445444545445444484444445454445448448 +414444454444444544445444444544454484144444454445444544445448444445444445454445 +448444485454544445444485458484854445484854445484854445484854485454445441445448 +444444444444444444444444444454444444444444445477808D0F7748FF00F000F0FF00458448 +454485445845458458544484585444484484584848548458448484458445845844848548454584 +544584844584FF484548445845844584844444584FF48454FF4845484454458458454854844584 +454458454448445848458444844454448484454448484454448484454448444484584484484844 +00000000000000000000000000004800000000000000447770FF0F7745FFFFFFFFFFFF00444454 +484544484544844444444544444484544454454454444444544454844454454444544445484444 +448445448445FF444845484444458445445448445FF44484FF4448454844844444484444448444 +844844444845484445444504544144504544144504544144504544144504548454445454454445 +F7787878778770F777787878787045F7778787777870487780B10F7744FFFFFFFFFFFFF085484F +F5484FF444FF54FFFFFF84FFFFFF5484FF4844FF44FFFFFF4854FF54FF484484584FFFF4454FFF +FF4FF4FF4FF4FFFFF44FF54FFFF44544FF4854FF4FFFFF44FFFFF44FF4FF54FFFF454FFFFF54FF +4FF54FFFF44FF44FF4548454454448454454448454454448454454448454454448544844844544 +F7777777777770F777777777777044F7777777777780547770FF0F7784F0FFF0FFF0F00044544F +F4454FF454FF44FF545444FF45444454FF4544FF84FF54414444FF44FF45445444FF44FF84FF84 +FF4FF4FF4FF4FF44FF4FF4FF84FF4484FF4444FF4FF54FF4FF44FF4FF4FF4FF54FF4FF84FF4FF5 +4FF4FF54FF4FF54FF4844448448544448448544448448544448448544448448544484544548484 +F7700000777770F770000000778084F77707770777704477808D0F7744F0FFF0FFF0F00048445F +F4844FF484FF48FF484458FF4845484FFFF484FF44FF4844458FFFFFFFF48548544584FF44FF44 +FF4FF4FF4FF4FF48FF4FF4FF444448445FFFFFF45FF44FF4FF48FF4FF4FF4FF44584FF44FF4FF4 +4FF4FF44FF4FF48FF4445845484445845484445845484445845484445845484445845484445445 +F7700000777780F770777770777054F7770070077770487770000F7745F0FFF0FFF0F00045484F +F4548FF444FF54FF444844FF4448454FFFF445FF45FF4445844FFFFFFFF44444448444FF454FFF +FF4FF4FF4FF4FF45FF4FF4FFFFFF45414FF48FF44FF48FF4FF45FF4FF4FF4FF484444FFFFF4FF4 +8FF4FF48FF4FF44FF4584454454584454454584454454584454454584454454584454454584414 +F7777777777770F770777770777044F7777000777780457770B10F7784F0FFF0FFF0F00044544F +F4454FFFFFF444FFFFF454FFFFF544FF84FF44FF84FFFFF444FF84FF84FF4854854FFFF4448444 +FF4FF4FF4FF4FF44FF5FF4FF44FF84444FF44FF85FF44FF4FF44FF5FF4FF4FF44FF48444FF4FF4 +4FF4FF44FF4FFF4FF4445448484445448484445448484445448484445448484445448484445444 +F7777777777770F770777770778084F7777000777770447770FF0F7754F0FFF0FFF0F00084484F +F4844FF454FF84FF544444FF544484FF54FF84FF54FF544854FF44FF54FF544444FF8484854FFF +F54FFFFFFF54FFFFF44FF44FFFF4548454FFFF444FFFFF54FFFFF44FF4FF84FFFF454FFFF84FFF +4FF84FFFF84FFFFF54844844454844844454844844454844844454844844454844844454844854 +F7777777777780F770777770777054F7770070077770847770FB0F7744F0FFF0FFF0F00045454F +F4548FF484FF45FF485848FF485444FF44FF45FF44FF485444FF45FF44FF485484FF4544544544 +5445445445445484484FF4545445445444FFFF45445445445484484FF484544544544544545FF4 +545454544545454544545454544545454544545454544545454544545454544545454544545444 +F7777777777770F770000000778044F7770777077780547780000F7748F0FFF0FFF0F00044844F +F4445FF444FF44FF444444FF44441FF4845FF4FF48FF44448FF44844845FF44454FF44FF448448 +4484484484484444544FF44844844844845FF484484484484444544FF454448448448448444FF4 +484448448448448448448448448448448448448448448448448448448448448448448448448448 +F7777777777770F770000000777048F7777777777770447770B10F7744F0FFF0FFF0F000845FFF +FFF84FFFFFF584FFFFFF14FFFFFF4FF4584FF4FF45FFFFFF4FF84584584FF458414FFFF5845845 +8458458458458458414FF84584584584584FF458458458458458414FF4FF845845845845845841 +4FF854854854854854854854854854854854854854854854854854854854854854854854854854 +F7777777777780F777777777778054F7777777777780847780B10F7754F0FFF0FFF0F000444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +FFFFFFFFFFFFF0FFFFFFFFFFFFF044FFFFFFFFFFFFF0447770F60F7748FFFFFFFFFFFFF0584584 +584584584584584584584584584584584584584584584584584584584584584584584584584584 +584584584584584584584584584584584584584584584584584584584584584584584584584584 +584584584584584584584584584584584584584584584584584584584584584584584584584584 +58458458458458458458458458458458458458458458457780F60F774444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444447770F60F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777780F60F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777770000FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FF040000002701FFFF0400000027 +01FFFF030000000000 +}\plain\f6\fs18 +\par \plain\f6\fs18\b Figure 18 TREEVIEW\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TREEVIEW.MAK, TREEVIEW.RC, TREEVIEW.RCV, TREEVIEW.STR, TREEVIEW.DLG, TREEVIEW.H are all available on any MSJ bulletin board. +\par +\par TREEVIEW.C +\par // PROGRAM: TREEVIEW.c +\par +\par #include // required for all Windows applications +\par #if !defined(_WIN32) +\par #include +\par #endif +\par #include "TREEVIEW.h" // specific to this program +\par +\par //****************** NEW CODE START ********* +\par +\par #include // Common controls +\par #include // for \plain\f6\fs18\ul atoi\plain\f6\fs18 +\par +\par //****************** NEW CODE END ********* +\par +\par // Windows NT defines APIENTRY, but 3.x doesn't +\par #if !defined (APIENTRY) +\par #define APIENTRY far pascal +\par #endif +\par +\par // Windows 3.x uses a FARPROC for dialogs +\par #if !defined(_WIN32) +\par #define DLGPROC FARPROC +\par #endif +\par +\par HINSTANCE hInst; // current instance +\par +\par HWND ghWnd; // Handle of main window +\par HWND hWndTreeView; // Handle of TreeView control +\par HIMAGELIST hCoasterImageList; // Roller coaster images +\par int iImageWood ; // Image number for the "Wood" roler coaster +\par int iImageSteel ; // Image number for the "Steel" roler coaster +\par int iImageCA ; // Images for states in open/closed... state +\par int iImageNY ; // +\par int iImageOH ; // +\par int iImageCA_OPEN; // +\par int iImageNY_OPEN; // +\par int iImageOH_OPEN; // +\par int iImageRider1 ; // Image of the coaster rider when not selected +\par int iImageRider2 ; // Image of the coaster rider when selected +\par +\par // These are stored in lParam of the TV_ITEM structure, to +\par // help identify what type of thing the item is. +\par +\par #define ITEM_TYPE_STATE_START 0 +\par #define ITEM_TYPE_STATE_CA 0 +\par #define ITEM_TYPE_STATE_NY 1 // The Coney Island Cyclone! +\par #define ITEM_TYPE_STATE_OH 2 +\par #define ITEM_TYPE_STATE_END 50 +\par +\par #define ITEM_TYPE_COASTER_TYPE 100 +\par #define ITEM_TYPE_COASTER_NAME 101 +\par +\par void FillTreeView ( HWND ); // Function to fill our TreeView with data +\par void Sample_Init ( void ); // All added init code +\par void Sample_Shutdown ( void ); // All added shutdown code +\par +\par char szAppName[] = "TREEVIEW"; // The name of this application +\par char szTitle[] = "TREEVIEW Sample Application"; // The title bar text +\par +\par int APIENTRY WinMain( +\par HINSTANCE hInstance, +\par HINSTANCE hPrevInstance, +\par LPSTR lpCmdLine, +\par int nCmdShow +\par ) +\par \{ +\par o +\par o +\par o +\par Sample_Init ( ); +\par +\par hAccelTable = LoadAccelerators (hInstance, szAppName); +\par +\par // Acquire and dispatch messages until a WM_QUIT message is received. +\par while (GetMessage(&msg, // message structure +\par NULL, // handle of window receiving the message +\par 0, // lowest message to examine +\par 0))\{ // highest message to examine +\par if (!TranslateAccelerator (msg.hwnd, hAccelTable, &msg)) \{ +\par TranslateMessage(&msg);// Translates virtual key codes +\par DispatchMessage(&msg); // Dispatches message to window +\par \} +\par \} +\par +\par Sample_Shutdown ( ); +\par o +\par o +\par o +\par +\par ghWnd = hWnd; // add this line of code to end of your InitInstance function +\par +\par o +\par o +\par o +\par +\par // Sample_Init: Creates the Image List, the TreeView, and +\par // calls the FillTreeView function to put some stuff into it +\par void Sample_Init ( void ) // All added init code +\par \{ +\par RECT rc; +\par +\par InitCommonControls(); // This MUST be called once per instance +\par // to register the TreeView class. +\par +\par hCoasterImageList = ImageList_Create(32, 32, TRUE, 5, 1); +\par +\par iImageWood =ImageList_AddIcon(hCoasterImageList, LoadIcon ( hInst, "WOOD" )); +\par iImageSteel=ImageList_AddIcon(hCoasterImageList, LoadIcon ( hInst, "STEEL" )); +\par iImageOH =ImageList_AddIcon(hCoasterImageList, LoadIcon ( hInst, "OH" )); +\par iImageNY =ImageList_AddIcon(hCoasterImageList, LoadIcon ( hInst, "NY" )); +\par iImageCA =ImageList_AddIcon(hCoasterImageList, LoadIcon ( hInst, "CA" )); +\par iImageOH_OPEN=ImageList_AddIcon(hCoasterImageList, LoadIcon (hInst,"OH_OPEN")); +\par iImageNY_OPEN=ImageList_AddIcon(hCoasterImageList, LoadIcon (hInst,"NY_OPEN")); +\par iImageCA_OPEN=ImageList_AddIcon(hCoasterImageList, LoadIcon (hInst,"CA_OPEN")); +\par +\par iImageRider1=ImageList_AddIcon(hCoasterImageList, LoadIcon (hInst, "RIDER1" )); +\par iImageRider2=ImageList_AddIcon(hCoasterImageList, LoadIcon (hInst, "RIDER2" )); +\par +\par GetClientRect ( ghWnd, &rc ); +\par +\par hWndTreeView = CreateWindow ( WC_TREEVIEW, "", +\par WS_VISIBLE | WS_CHILD | WS_BORDER | +\par TVS_HASLINES | TVS_EDITLABELS, +\par 0, 0, rc.right, rc.bottom, ghWnd, +\par (HMENU)NULL, hInst, NULL); +\par +\par if (hWndTreeView) +\par \{ +\par TreeView_SetImageList ( hWndTreeView, hCoasterImageList, 0 ); +\par ImageList_SetBkColor ( hCoasterImageList, GetSysColor ( COLOR_WINDOW )); +\par FillTreeView ( hWndTreeView ); +\par \} +\par \} +\par +\par o +\par o +\par o +\par +\par // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) +\par LRESULT CALLBACK WndProc( +\par HWND hWnd, // window handle +\par UINT message, // type of message +\par WPARAM uParam, // additional information +\par LPARAM lParam // additional information +\par ) +\par \{ +\par FARPROC lpProcAbout; // pointer to the "About" function +\par int wmId, wmEvent; +\par +\par #define ptrNMHDR ((LPNMHDR)lParam) +\par #define ptrNM_TREEVIEW ((NM_TREEVIEW *)lParam) +\par #define ptrTV_DISPINFO ((TV_DISPINFO *)lParam) +\par +\par RECT rcItem; +\par static HIMAGELIST hDragImage; +\par static BOOL bDragging; +\par static HTREEITEM hDragItem; +\par +\par switch (message) \{ +\par +\par case WM_NOTIFY: // This is a new Chicago message for control notifications +\par +\par switch (ptrNMHDR->code) +\par \{ +\par case TVN_BEGINDRAG: // Sent by TreeView when user +\par // wants to drag an item. +\par +\par // Only allow drag & drop for the actual coaster +\par // items. +\par +\par if ( ITEM_TYPE_COASTER_NAME = = ptrNM_TREEVIEW->itemNew.lParam) +\par \{ +\par // The hDragImage variable is declared static, +\par // so the code in WM_LBUTTONUP can delete it when +\par // the user stops dragging. Here we create a +\par // drag image to use for the ImageList_StartDrag API. +\par +\par hDragImage = TreeView_CreateDragImage +\par ( +\par ptrNMHDR->hwndFrom, +\par ptrNM_TREEVIEW->itemNew.hItem +\par ); +\par +\par // Get the location of the item rectangle's text. +\par TreeView_GetItemRect +\par ( +\par ptrNMHDR->hwndFrom, // Handle of TreeView +\par ptrNM_TREEVIEW->itemNew.hItem, // Item in TreeView +\par &rcItem, // RECT to store result +\par TRUE // Rect of label text only +\par ); +\par +\par // Cache away the handle of the item to drag into a +\par // staticly declared variable, so the code in +\par // WM_LBUTTONUP can know what the user is dragging. +\par hDragItem = ptrNM_TREEVIEW->itemNew.hItem; +\par +\par // Start the drag ala ImageList +\par ImageList_StartDrag +\par (hDragImage, // From TreeView_CreateDragImage +\par ptrNMHDR->hwndFrom, // Clip drag & drop to TreeView Window +\par 0, // Use first image +\par ptrNM_TREEVIEW->ptDrag.x, // Coords of image to drag +\par ptrNM_TREEVIEW->ptDrag.y, +\par ptrNM_TREEVIEW->ptDrag.x - rcItem.left, // Offset hotspot +\par ptrNM_TREEVIEW->ptDrag.y - rcItem.top ); +\par +\par // Capture the mousey to this window +\par ShowCursor ( FALSE ); +\par SetCapture ( hWnd ); +\par +\par // Set a staticly declared drag flag so the WM_MOUSEMOVE +\par // and WM_LBUTTONUP messages know to take action. +\par bDragging = TRUE; +\par \} +\par +\par return 0L; // Return value is irrelevant +\par +\par case TVN_GETDISPINFO: // Sent by TreeView just before it paints +\par // an item declared with callback values. +\par +\par // Our lParam is where we store what state the item represents. +\par // Therefore, switch on that to indicate the correct image to use. +\par if ( ptrTV_DISPINFO->item.state & TVIS_EXPANDED ) +\par \{ +\par switch (ptrTV_DISPINFO->item.lParam) +\par \{ +\par case ITEM_TYPE_STATE_CA: +\par ptrTV_DISPINFO->item.iImage = +\par ptrTV_DISPINFO->item.iSelectedImage = iImageCA_OPEN; +\par break; +\par +\par case ITEM_TYPE_STATE_NY: +\par ptrTV_DISPINFO->item.iImage = +\par ptrTV_DISPINFO->item.iSelectedImage = iImageNY_OPEN; +\par break; +\par +\par case ITEM_TYPE_STATE_OH: +\par ptrTV_DISPINFO->item.iImage = +\par ptrTV_DISPINFO->item.iSelectedImage = iImageOH_OPEN; +\par break; +\par \} +\par \} +\par else // Collapsed item +\par \{ +\par switch (ptrTV_DISPINFO->item.lParam) +\par \{ +\par case ITEM_TYPE_STATE_CA: +\par ptrTV_DISPINFO->item.iImage = +\par ptrTV_DISPINFO->item.iSelectedImage = iImageCA; +\par break; +\par +\par case ITEM_TYPE_STATE_NY: +\par ptrTV_DISPINFO->item.iImage = +\par ptrTV_DISPINFO->item.iSelectedImage = iImageNY; +\par break; +\par +\par case ITEM_TYPE_STATE_OH: +\par ptrTV_DISPINFO->item.iImage = +\par ptrTV_DISPINFO->item.iSelectedImage = iImageOH; +\par break; +\par \} +\par \} +\par return TRUE; +\par +\par case TVN_BEGINLABELEDIT: // Sent by TreeView when user single +\par // clicks on an item in a TreeView +\par // that has the TVS_EDITLABELS style bit set. +\par +\par // Only allow label editing for the coaster names +\par if (ITEM_TYPE_COASTER_NAME = = ptrTV_DISPINFO->item.lParam) +\par return 0; // Return 0 to OK edit +\par else +\par return 1; // Return non-zero to disallow edit +\par break; +\par +\par case TVN_ENDLABELEDIT: // Sent by TreeView when user presses +\par // the ENTER key or ESC key, +\par +\par // if user pressed ENTER to accept edits +\par +\par if ( ptrTV_DISPINFO->item.pszText) +\par \{ +\par // Set the "change mask" to indicate that the only attribute +\par // we wish to change is the text field. +\par ptrTV_DISPINFO->item.mask = TVIF_TEXT; +\par +\par TreeView_SetItem +\par ( +\par ptrNMHDR->hwndFrom, // Handle of TreeView +\par &(ptrTV_DISPINFO->item) // TV_ITEM structure w/changes +\par ); +\par \} +\par break; +\par +\par \} +\par +\par return (DefWindowProc(hWnd, message, uParam, lParam)); +\par +\par case WM_MOUSEMOVE: // check for the drag flag +\par +\par if (bDragging) +\par \{ +\par HTREEITEM hTarget; // Item under mouse +\par TV_HITTESTINFO tvht; // Used for hit testing +\par +\par // Do standard drag drop movement +\par +\par ImageList_DragMove ( LOWORD (lParam), HIWORD (lParam)); +\par +\par // Fill out hit test struct with mouse pos +\par tvht.pt.x = LOWORD (lParam); +\par tvht.pt.y = HIWORD (lParam); +\par +\par // Check to see if an item lives under the mouse +\par +\par if ( hTarget = TreeView_HitTest +\par ( +\par hWndTreeView, // This is the global variable +\par &tvht // TV_HITTESTINFO struct +\par ) +\par ) +\par \{ +\par TV_ITEM tvi; // Temporary Item +\par tvi.mask = TVIF_PARAM; // We want to fetch the lParam field. +\par tvi.hItem = hTarget; // Set the handle of the item to fetch. +\par +\par TreeView_GetItem ( hWndTreeView, &tvi ); // Fetch, spot! +\par +\par // Check to see if the lParam is a valid item to drop onto +\par if ( ITEM_TYPE_COASTER_NAME = = tvi.lParam ) +\par \{ +\par // Hide the drag image +\par ImageList_DragShow ( FALSE ); +\par // Select the item +\par TreeView_SelectDropTarget ( hWndTreeView, hTarget ); +\par // Show the drag image +\par ImageList_DragShow ( TRUE ); +\par +\par return 0L; +\par \} +\par \} +\par +\par // If we made it here, then the user has either +\par // dragged the mouse over an invalid item, or no item. +\par // Hide any current drop target, this is a no-no drop +\par TreeView_SelectDropTarget ( hWndTreeView, NULL ); +\par \} +\par break; +\par +\par case WM_LBUTTONUP: // we check for the drag flag and process WM_LBUTTONUP +\par if (bDragging) +\par \{ +\par HTREEITEM hTarget; // Item under mouse +\par TV_ITEM tvi; // Temporary Item +\par TV_INSERTSTRUCT tvIns; // Insert struct +\par char szBuffer[256]; // Item text buffer +\par +\par // End the drag +\par ImageList_EndDrag(); +\par // Bring back the cursor +\par ShowCursor ( TRUE ); +\par // Release the mouse capture +\par ReleaseCapture(); +\par // Clear the drag flag +\par bDragging = FALSE; +\par // Clean up the image list object +\par ImageList_Destroy ( hDragImage ); +\par hDragImage = NULL; +\par +\par // First, check to see if there is a valid drop point +\par // by checking for a highlighted drop target. +\par if ( hTarget = TreeView_GetDropHilight (hWndTreeView)) +\par \{ +\par // If we made it here, then we need to move the item. +\par // First, we will fetch it, specifying the attributes +\par // we need to copy. +\par +\par tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; +\par tvi.hItem = hDragItem; +\par tvi.pszText = szBuffer; +\par tvi.cchTextMax = sizeof(szBuffer); +\par +\par TreeView_GetItem ( hWndTreeView, &tvi ); +\par +\par // Now, figure the new place to put it by filling out +\par // the TV_INSERTSTRUCT structure. +\par tvIns.hParent = TreeView_GetParent ( hWndTreeView, hTarget ); +\par tvIns.hInsertAfter = hTarget; +\par tvIns.item = tvi; +\par +\par // Delete the old item +\par TreeView_DeleteItem ( hWndTreeView, hDragItem ); +\par // And add the new item. +\par TreeView_InsertItem ( hWndTreeView, &tvIns ); +\par \} +\par +\par // Clear any drop highlights on the TreeView +\par TreeView_SelectDropTarget ( hWndTreeView, NULL ); +\par \} +\par break; +\par +\par case WM_SIZE: +\par +\par if ( hWndTreeView ) // Standard code to keep the TreeView +\par // sized up with the main window +\par \{ +\par SetWindowPos ( hWndTreeView, +\par NULL, +\par 0, 0, +\par LOWORD (lParam), +\par HIWORD (lParam), +\par SWP_NOZORDER +\par ); +\par \} +\par break; +\par +\par case WM_COMMAND: // message: command from application menu +\par +\par o +\par o +\par o +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 There are many, many features available in the TreeView control. It's impossible to cover every minute detail here. I'll cover the most commonly used TreeView features: initialization and cleanup, adding items, deleting items, using an Image List, and label editing (allowing a user to change the text of an item in place). A brief discussion of drag-and-drop will also be included for your reading pleasure. +\par TreeView Flavors and Limitations +\par TheTreeView control has several different appearances. +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 // TreeView window styles +\par #define TVS_HASBUTTONS 0x0001\tab +\par // draw "plus" & "minus" sign on nodes with children +\par #define TVS_HASLINES 0x0002\tab +\par // draw lines between nodes +\par #define TVS_LINESATROOT 0x0004\tab +\par // Draw the lines also at the root level +\par #define TVS_EDITLABELS 0x0008\tab +\par // allow text edit in place +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 The two most fundamental types are those with plain text and those with Image Lists attached to them. The TreeView control can dynamically toggle between these two types. If a TreeView control is to use an Image List, then every item in the TreeView will be drawn with an image from the Image List, and every image must come from the same Image List. This means that every item in the TreeView control will have an equal-sized image tagged next to it. There is no such thing as an owner-draw TreeView control, although there is a special callback implementation that gives you a little bit of on-the-fly drawing control, but not enough to get around the equal-sized image limitation. I'll discuss how to implement this callback functionality later. +\par There are various styles of the TreeView control that cover the "lines" and "buttons." Lines are the connecting dotted lines from item to item in the TreeView, and buttons have plus and minus signs in them to allow the user to expand and collapse certain branches of the TreeView with a single mouse click (see Figure 19). Double-clicking on a node will achieve the same results. +\par \plain\f6\fs18\b Figure 19 Lines and buttons.\plain\f6\fs18 +\par {\pict\wmetafile8\picw4431\pich5251\picscalex99\picscaley99\picwgoal2520\pichgoal2984 +010009000003332100000000E82000000000050000000B0200000000050000000C0283144F1103 +0000001E0007000000160483144F1100000000050000000C0291145D11050000000B0200000000 +030000001E0007000000160491145D1100000000050000000C02A90BD809050000000B02000000 +00050000000B0200000000E8200000430F2000CC000000C700A80000000000A90BD80900000000 +28000000A8000000C7000000010004000000000000000000130B0000130B000000000000000000 +00000000000000BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 +FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF000000FFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF000000FFFF00000000000000FFFF0000000000FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF000000000000000000FF7FFFFFF7FFFFFFFFFFFF770FFFFFFFFF0FF0000FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFFFFFF8F8F8F87777777777737870FFFFFFFF +F0FF0FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFF8FFFFFFFFFFF +F780FFFFFFFFF0FF0000F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000070FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFF +F777777777777770FFFFFFFFF0FF0FFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FF +FFFFF7FFFFFFFF8787878787878FFFFFFFFFF0FF0FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFF +FFFFFFFFF878787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FF0FFFFFFF00FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F00000FFFF000FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFF +FFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFF +FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF787777777777770FF +FFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF7F373 +7373737370FFFFFFFF000FFF0000FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF +8FFFFFF8F7373737373780FFFFFFF0FFF0FF0FFF0FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF7FFF0FFF7FFFFFF7F3737373737370FFFFFFFFFFF0FF0FFFF0FF000FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFF +F8FFFFFFFFFFFFFF8F00000F8F8F8F87F7373737373770FFFFFFFFFFF0FF0FFFF0FF0F0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF8F3737373737370FFFFFFFF000FFF0FFFF0 +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FF +FFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFF7F7373737373780FFFFFFF0 +FFFFFF0FFFF0FF00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF8F373737373 +7370FFFFFFF0FFFFFF0FFFF0FF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFF878787878FFFFF +F7FFFFFFFFFFFF70FFFFFFF0FFF0FF0FFF0FFF0FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF87373737787878FFFFFFFFF000FFF0000FFFF0FFFF0FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFF8FFFFFFFFFFF7737378FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF +8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF +FFFFFFFF8FFFFFFFFFF787777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3737373737370FFFFFFF0000FFF0000FF00FFF000FF0F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFF +FFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF8F7373737373780FFFFFFF0FFF0F0FFF0F0 +FF0F0FFF0F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3737373737370FFFFFFF0 +FFF0F0FFF0FFF0FF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8F8F8F8F8F87F737373737 +3770FFFFFFF0FFF0FF0000FF0FFF00000FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F8F3737373737370FFFFFFF0FFF0FFFFF0F0FF0F0FFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF +FF8FFFFFFFFFF7F7373737373780FFFFFFF0000FFF000FFF00FFF000FFFF000FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF8F3737373737370FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF0F00FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFF +FFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF7FFFFFFFFFFFF70FFFFFFF0FFFFFFFFFFFFFFFFFF +FFFF000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87373737787878FFFFFFFF0FFFFFF +FFFFFFFFFFFFFFFFFF0FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFF7737378FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878 +78FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFF8FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF303030303030303030B0303FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFF +F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF04844844544444844444540FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFF3545454F48584545845F483FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FF +FFFFFF8FFFFFFFFFFFFFF878787878FFFFFF877878787878780FFFF044484F4544444844484F40 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF77FFFFFFFFFF7770FFF384444F84FF +FFF54F544F53FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF8FFFFFFF8FFFFFF8787787787787780FF +F045845F44F4544448445F40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF777777 +7777777870FFF344544F45F4845854484F43FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF8F00000F8 +F8F8F87777777777737870FFF084484F84F4444444548F40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFF +FFF7FFFFFFF7FFFFFF8FFFFFFFFFFFF780FFF354454F54FFFF4548444F53FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF +8FFFFFFFFFFFFFF8FFFFFFF8FFFFFFF777777777777770FFF048444F44F454848F414F40FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFFFF8787878787878FFFF344458F48F4845445 +444F43FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFFFFFFFFFFFFFFFFFFFFF08544 +5F44F4444544584F40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF3448444F4FFFFF48444F453FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFF +FFFFFFFFFFFFFFFFFFF05845845845845845845840FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF34444444444444444444443FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFF +FFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF03030303030303030303030FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFF +FFFFFFFF0FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF877878 +787878780FFFFFFFFFF0FFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7 +FFFFFF77FFFFFFFFFF7770FFFFFFFFF0FF0000FFFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFF +FFF8FFF0FFF8FFFFFF8787787787787780FFFFFFFFF0FF0FFF0FFFFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFF +FFFFFFFFFFFFFFF7FFF0FFF7FFFFFF7777777777777870FFFFFFFFF0FF0FFFF0FFFFFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7780FFFFFFFF8FFFFFFFFFFFFFF8F00000F8F8F8F87777777777737870FFFFFFFFF0FF0FFFF0FF +FFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF8FFFFFFFFFFFF780FFFFFFFF +F0FF0FFFF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFFF77777777777 +7770FFFFFFFFF0FF0FFFF0FF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF +FF8787878787878FFFFFFFFFF0FF0FFFF0FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF878 +787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FF0FFF0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0000FFFFFFF0FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FF +FFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFF0FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF +8FFFFFFFFFFFFFF878787878FFFFFF877878787878780FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF +FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF77FFFFFFFFFF7770FFFFFF0000FFFFF000FF +F00FFFFF0FFF0000FF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFF8787787787787780FFFFFF0F +FF0FFF0FFF0F0FF0FFFF0FF0FFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF777777777777 +7870FFFFFF0FFFF0FF0FFF0FFF0FFFFF0FF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF8F00000F8F8F8F8 +7777777777737870FFFFFF0FFFF0FF0FFF0FF0FFFFFF0FF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FF +F0FFF7FFFFFF8FFFFFFFFFFFF780FFFFFF0FFFF0FF0FFF0F0FF0FFFF0FF0FFFFFFFFFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFF +FFFFFFFFF8FFF0FFF8FFFFFFF777777777777770FFFFFF0FFFF0FFF000FFF00FFFFF0FF0FFFFFF +0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FF +FFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFFFF8787878787878FFFFFFF0FFFF0FFFFFFFFFFFFFF +FF0FF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF +FFFFFFFFFFFFFF0FF0FFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0000FFFFFFFFFFFFFFFFFFF0FF0000FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFF +FFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7780FFFFFFFF8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000FFFFFFFFFF +FFF000000FFFFFFFFFFFFFFFFFF0FFFFF0FFFF00FFFFFFFF0FFFFFFFFFFF0FFFFFFFF0FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF878787878FFFFFF787878787787 +780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF0FFFFFF0FFFFFF0FFFFFFFFFFFFF0FFFF +FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFF +8777777777777780FFFFFFF000FFFFFFFFFFF0FFFFF0FF000FF0000FF0000FFF0FFFFFF0F0FFFF +F0F0FFF0FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF8FF +F0FFF8FFFFFF77777FFFF7777870FFFFFF0FFF0FFFFFFFFFF0FFFFF0F0FFF0F0FFF0F0FFF0FF00 +FFFFF0F0FFFFF0FFFFF0FFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFF +FFFFFFFFF7FFF0FFF7FFFFFF7778700007877770FFFFFFFFFF0FFFFFFFFFF0FFFFF0F0FFF0F0FF +F0F0FFF0F0FF0FFFF0FF00000FFFFFF0FFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FF +FFFFFF8FFFFFFFFFFFFFF8F00000F8F8F8F87777778787737870FFFFFFFFFF0FFFFFFFFFF0FFFF +F0F0FFF0F0FFF0F0FFF0F0FF0FFFF0FF0FFF0FFFFFF0FFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFF0FFF7FFFFFF8FFFFFFFFFFFF780FFFFFFFF00FFFF +FFFFFFF0000FF0F0FFF0F0FFF0F0FFF0F0FF0FFFF0FF0FFF0FFFFFF0FFFFFFFF0FFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF8FFF0FFF8FFFFFFF777777777777770FF +FFFFFFFF0FFFFFFFFFF0FFFFF0FF000FF0000FF0000FF0FF0FFFF0FFF0F0FFF0FFF0FFFFFFFFF0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF7FFFFFFFF8787 +878787878FFFFFFFFFFF0FFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF0F0FFFFFF +F0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFF878787878 +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFFFFFFFFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF0 +FFFF0FFFFFFFF0FFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFF00000F0FFFFFFFFFFFFFFFF +FFFFFFFFFFFF0FFF0FFFFFFF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF +8FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +7770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF +FFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF +FFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFF7777777777777770FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFF8707707 +807707780FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFF878787878F +FFFFFF77078077077070FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFF0F7770FF +FF7FFFFFFF7FFFFFFF8F777777777780FFFFFFF0FFFFF0FFF0FFFFFFF0000FFF000FF0FF0FF0F0 +000FFF00F0FF0FF000FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFF +FFFF0F7780FFFF8FFFFFFF8FFFFFFF7F777777000770FFFFFFF0FF0FF0FFF00FFFFF0FFFF0F0FF +F0F0FF0FF0F0FFF0F0FF00F0FF0FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFF +FFFFFFFFFFFFFFFF0F7770FFFF7FFFFFFF7FFFFFFF8FFFFFFFFFFF80FFFFFFF0FF0FF0FF0FF0FF +FF0FFFFFF0FFF0F0FF0FF0F0FFF0F0FFF0F0FF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFF8F00000F8F8F8F8FF877787878770FFFFFFFF0F0 +F0F0FF0FF0FFFF0FFFFFF0FFF0F0FF0FF0F0FFF0F0FFF0F0FF00000F0FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0F7770FFFF7FFFFFFF7FFFFFFFF77777777778 +0FFFFFFFF0F0F0F0FF0FF0FFFF0FFFFFF0FFF0F0FF0FF0F0FFF0F0FFF0F0FF0FFF0F0FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF0F7780FFFF8FFFFFFF8FFFFFFF +F778700007770FFFFFFFF00FFF00FF0FF0FFFF0FFFFFFF000FF000F00FF0000FF0FFF0F00FF000 +FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFF0F7770FFFF7FFF +FFFF7FFFFFFFF87770FF07780FFFFFFFF00FFF00FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFF0F +7780FFFF878787878FFFFFFFF777700007770FFFFFFFF0FFFFF0FFFFFFFFFF0FFFF0FFFFFFFFFF +FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFF +FFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFF878777777780FFFFFFFF0FFFFF0FFFFFFFFFFF000 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +FFFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFF777788778770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFF0F7770FFFFFFFFFFFFFFFFFFFFF877777777770FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFF0F7780FFFFFFFF8FFFFFFFFFFFFF7878 +787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFF0F777000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0F778087 +7777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF +FFFF0F7770777877117777780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFF +FFFFFFFFFFFFFFFF0F77800807773700000780FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF00FFFFFFFFFFFFFFFFFFF0F7770F78F878733333770FFFFFF0000FFFFF000FFF00FF0FF +F0FF0FF000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF0F7780F0777F0773777080FFFFFF0FFF0FFF0F +FF0F0FF0F0FF0FF0FF0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF0F7770FF87878787877000FFFF +FF0FFFF0FF0FFFFFFF0FF0F0FFF0FF0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFF0F7780FF000000 +00006800FFFFFF0FFFF0FF00000FF0FFF00FFFF0FF0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFF0F +7770FFFFFFFFFFFF08FFFFFFFF0FFFF0FF0FFF0F0FF0F0F0FFF0FF0FFF0F0FFF0FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFF +FFFFFFFFFF0F7780FFFFFFFFFFFFF80FFFFFFF0FFFF0FFF000FFF00FF0FF0FF00FF000FF0000FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0FFFFFFFFFFFFFFFFF0F7770FFFFFFF330FFF06FFFFFFF0FFFF0FFFFFFFFFFFFF0FFFFF0FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFF0F7780FFFFF086600FF080FFFFFF0FFF0FFFFFFFFFFF +FFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF0F7770FFFFFF8780008800FFFFFF0000 +FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF0F7780FFFFFFF6808800 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF0F7770FF +FFFFF88000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFF +FFFF0F7780FFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +0FFFFFFFFFFFFFFF0F777000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000FFFFFFFFFFFFFFF0F777878787878787777877787787877878787877878787787 +877877878787787787787877878787877877787787787778778778777877877787878787878787 +7878787787778787878787800FFFFFFFFFFFFFFF0F777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777770FFFFFFFFFFFFFFF0F77FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0F777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777777777777770FFFFFFFFFFFFFFF0F +778777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777777777777777777777777770FFFFF +FFFFFFFFFF0F777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777770FFFFFFFFFFFFFFF0F777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777770FFFFFFFFFFFFFFF0F778777770777770707077770777777000770770000 +770007707770077777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777770FFFFFFFFFFFFFF0F777777770777770707077770777770 +777070707770707770707707707777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777770FFFFFFFFFFFFFF0F778777777000007707 +077770777770777070707770707777707777077777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777770FFFFFFFFFFFFFF0F777777 +777077707707077770777770777070707770700000707770777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777700FFFFFFFFF +FFFF0F778777777077707707077770000770777070707770707770707707707777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7700FFFFFFFFFFFF0F777777777707077707077770777777000770770000770007700770077777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777770FFFFFFFFFFFF0F777777777707077707077770777777777770777770777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777700FFFFFFFFFFF0F778777777770777707077770777777777770 +777770777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777700FFFFFFFFFF0F778777777770777707077770 +000077777770777770777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777770FFFFFFFFFF0F777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777770FFFFFFFFFF0F +778777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +0FFFFFFFFF0F777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777770FFFFFFFFF0F777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777770FFFFFFFFF0F778787877787878787878778787878787878787877 +878787877877878787878778778787878878778788778877878877877787878787878778878778 +7877878778787878787878787787878778770FFFFFFFFF0F777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777770FFFFFFFFF0F777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777700FFFFFFFF0F777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777F0FFFF +FFFF0F777777770000007777777777777777777777000000077777777777777777777777000000 +077777777777777777777777777770000000777777777777777777777777777777700000000777 +77777700FFFFFFFF0F777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777700FFFFFFFF0F777777777077777070770007777777777777700000777000 +070770777777777777777077770770007770777077777777777777770777770007770007707700 +777777777777770777707770007707000FFFFFFF0F777777777077777070707770777777777777 +707777770777070707777777777777777077770707770770777077777777777777770777707770 +7077707070770777777777777707777077077707070700FFFFFF0F777777777077777070707777 +777777777777707777770777070707777777777777770707770707777707070707777777777777 +7707777077707077707077707777777777777707777077077777070770FFFFFF0F777777777077 +777070700000777777777777707777770777070707777777777777770707770700000707070707 +7777777777777707777077707077707077077777777777777707777077000007070770FFFFFF0F +777777777000077070707770777777777777700007770777070707777777777777707770770707 +770707707707777777777777770777707770707770707077077777777777770000007707770707 +07770FFFFF0F777777777077777070770007777777777777707777777000070700777777777777 +707770770770007707707707777777777777770777770007770007707700777777777777770777 +70777000770700000FFFFF0F777777777077777770777777777777777777707777777777077707 +777777777777707770777777777777777777777777777777770777777777777777707777777777 +77777777077770777777770777770FFFFF0F777777777077777770777777777777777777707777 +777777077707777777777777077777077777777777777777777777777777770777777777777777 +70777777777777777777077770777777770777770FFFFF0F777777777000007070777777777777 +777777700000777777070777777777777777077777070777777777777777777777777777000007 +77777777777770777777777777777777077770777777770777770FFFFF0F777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777770FFFFF0F777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777770F +FFFF0F777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777770FFFFF0F774545454854484444444585454484454454854848548458544448448548 +484144454544844854458448458458544448544854454444485485448454454848454454848454 +454848454454448448545400FFFF0F774444444448440054844444848454445444445444454444 +485454544445414484445445454448444545444444458544484448448545444544845448445445 +448445445448445445448445444544444840FFFF0F77484858458450780445845845444848484F +F48454844584544484484584444545848484484584454844FF4845844445845FF4544484854845 +454484584454484584454484584454484584854845848440FFFF0F774544444444048404544444 +44485445445FF4448454844444845445444445844444445445444548444FF454444445844544FF +484544544444848454444848454444848454444848454444444544454450FFFF0F774400000000 +478008484FFFFFF44FF4FF4FFFFF44FF54FFFF44FF844FFFF44FF854544548458445454FF84FFF +FFF44FF484FF444845445854445445854445445854445445854445445854548448445440FFFF0F +77847F370087883305454FF545454FF4FF4FF54FF4FF4FF54FF4FF54FF84FF4FF4484848454454 +84484FF54FF54484145454FF454444844448544844448544844448544844448544844448445445 +484840FFFF0F77447F777707337304448FF4844484FFF48FF44FF4FF4FF44FF4FF44FF44448FF4 +54454444844444844FF44FF48454444844FF484584448454484448454484448454484448454484 +448454484484454450FFFF0F77458F877770333304845FF4448544FFF45FF48FF4FF4FF48FF4FF +48FFFFFF4FF444544FFF458454545FF48FF44484484548FF454444145444544145444544145444 +544145444544145444544144544540FFFF0F77847F7F7770377305444FFFFF444FF4FF4FF44FF4 +FF4FF44FF4FF44FF44FF4FF484848485444848444FF44FFFFF44544454FF445854448484854448 +484854448484854448484854448484854448484840FFFF0F77547F87F770733304854FF544584F +F4FF4FFFFF54FF84FFFF44FFF54FFFF54FFF45445444845445484FF54FF544584FF844FF844448 +4544544484544544484544544484544544484544544484544544400FFF0F77447F7F7F07377304 +544FF4854444584544544544FF454454454454454454454454454454454454454FF48FF4854444 +5445FF4545445445445445445445445445445445445445445445445445445445840FFF0F77488F +377073733304448FF4444450444448448448FF444844844844844844844844844844844844844F +F44FF44444504484FF448448448448448448448448448448448448448448448448448448448445 +0FFF0F774477337377777745845FFFFFF845845845845845FF5845845845845845845845845845 +845845845845FF5FFFFFF845845FF5845845845845845845845845845845845845845845845845 +84584584584400FF0F775447773784444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444540FF0F774850777784584584584584584584584584584584584584 +584584584584584584584584584584584584584584584584584584584584584584584584584584 +584584584584584584584584584584584584800F0F774444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444440F0F777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777000F777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777777F00F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000040000002701FFFF040000002701FFFF030000000000 +}\plain\f6\fs18 +\par Lines have two styles: root and nodes. If you use root lines, then items at the root level will be connected. Node lines are all the lines deeper than the root level. There is only one button style: either your TreeView uses buttons or it doesn't. +\par Another variant of the TreeView control allows in-place editing of the TreeView text labels. When the user clicks on an already selected label in a TreeView, a little edit control pops up in-place for the user to change the value (see Figure 20). This feature will be discussed in more detail later. +\par \plain\f6\fs18\b Figure 20 Pop-up edit control.\plain\f6\fs18 +\par {\pict\wmetafile8\picw9027\pich6543\picscalex99\picscaley99\picwgoal5129\pichgoal3719 +010009000003DD5300000000925300000000050000000B0200000000050000000C028F19432303 +0000001E000700000016048F19432300000000050000000C02A1195823050000000B0200000000 +030000001E00070000001604A119582300000000050000000C02880E0A14050000000B02000000 +00050000000B020000000092530000430F2000CC000000F800560100000000880E0A1400000000 +2800000056010000F8000000010004000000000000000000130B0000130B000000000000000000 +00000000000000BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 +FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000077878787878787878787878787878787878787878787878787878787878787878787878 +787878787878787878787878787878787878787878787878787878787878787878787878787878 +787878787878787878787878787878787878787878787878787878787878787878787878787878 +787878787878787878787878787878787878787878787878787878787878787878787878787878 +787878787878787878787878787878787780000F77777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777770000F777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777780000F7700000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000007770000F770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F77 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777000 +0F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077 +80000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F +770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770 +000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +7780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F77 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF07780000F770FFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFF030FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0778000 +0F770FFFFFF000000000330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFF08333333333330FFF0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFF03333 +3833333330FF030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF07770000F770F00033833333383833300330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770F0333333333333333330333 +30FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077 +70000F770F083333333333333333838330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770F0333833833333333383333380FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F0383 +33333333333333338383300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF07780000F770F033838383333333333333333330FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F033333338383838333 +333333330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F07780FF0F770F033333333333333333333333330FFFFFFFFFFF0000FFF0FFF0F0FF000FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F033333833383838383333838380FFFFF +FFFFF0FFFF0FF0FFF0F0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077805C0F770F +0333333333333333333333333330FFFFFFFFF0FFFF0FF0FFF0F0F0FFF0FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF07770000F770F0333333387787787383338333330FFFFFFFFF0FFFF0FF0 +FFF0F0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077805C0F770F033333387F7777 +77333333333330FFFFFFFFF0FFFF0FF00FF0F0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF07770000F770F033333337F770777383338333330FFFFFFFFF0FFFF0FF0F00FF0FF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077805C0F770F033333337F700077333833338330 +FFFFFFFFF0FFFF0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F +770F083333337F7707773333838333330FFFFFFFF0FFFF0FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF077805C0F770F033333337F77777733333333333330FFFFFFFF0000 +FFF0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F038383837F +FFFFF7338333333338330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF07780FF0F770F0333333377777787333833383833830FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F038333338333333333333333 +3333330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780 +F60F770F0333333333333833333833383333330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F0383333383333333333333833333330FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770F033333 +3333000000000003333333330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF07770000F770F0000000000FFFFFFFFFFF0333333330FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780FF0F770FFFFFFFFFFFFFFFFFFFFF +FF033338330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +7770000F770FFFFFFFFFFFFFFFFFFFFFFFF03383330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780F60F770FFFFFFFFFFFFFFFFFFFFFFFFF0333330FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFF +FFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF07780FF0F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F77 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00333333300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F00000F3F +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF033300000003330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3F000000000F3F0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777000 +0F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF01330000000003330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03F3F300000003F1F30FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03333330000 +03333330FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF03F30003F3F30003F30FFFFFFFFFFFFFF0000FFF000FF0FFF0FF000FF +F0FFFFFF0FFF00FF0FF0000F0FFF0FF0000FFFFF0000FFF0FFFF000FF0FF000FF0FFF0FF000FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0330000033100000330FFFFFF +FFFFFFF0FFFF0F0FFF0F0FFF0F0FFF0FF00FFFFF0FF0FF0F0F0FFF0F0FFF0F0FFF0FFFF0FFFF0F +F00FF0FFF0F0F0FFF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077 +80000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF03F00000F3F00000F30FFFFFFFFFFFFF0FFFFFF0FFF0F0FFF0F0FFFFF0FF0FFFF0FFFF0 +FF0F0FFF0F0FFF0F0FFF0FFFF0FFFFFF0FF0F0FFFFF0F0FFF0F0FFF0F0FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8FFFFFF0330000033300000330FFFFFFFFF00000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F3000 +3F3F30003F0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +8FFFFFFFFFFFFFFFFFFFFFFFFF03333333333303330FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000FFFF +FFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFF +FFFFFFFFFFFFFF0F0F0F0F0F0F00FFFFFFFFFFF0F5445484545854484584445484FF4848544548 +4144545454845444844845841444454854FF44844845445445845484484445484FFFFFFFFFFF0F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0F0000F0FFFFFFFFFFF0F48444 +4544444844544584444454F454484484444844844445845445844444445844444845F444544484 +4844448445445844445FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFF +0F0F0F000FF0FFFFFFFFFFFFF0F45FFFF484FFF45F444F45FFF484F444544F454FF45F44FFFF4F +484F45FFFF48445FFFF444F4584FFF45F45FFF45F484F45FFF4FFFFFFFFFFF0FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0F000000FFFFFFFFF0F4F4454F4F444F4F485F +4F485F54FF48484F44F54F4F4F484F4F445F4F444F5484F4444F54FF44F484F4F4F444F4F445F4 +F484FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFF000077 +770FFFFFFFF0F4F584144F454F4F544F4F44444F84F4454F8444F84F4F444F4F544F4F454F4454 +F854484F84F4F45444F4F454F4F544F4F4444FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF0077777770FFFFFFFF0F4F444445F484F4F484F4FFFFF4F45F414 +4F458F445F45FFFF4F484F4F484F4544F448544F45F4F48458F4F484F4F484F4FFFFFFFFFFFFFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000077777000FFFFFFFFF0F4 +F485484F444F4FF44F4F444F4F44F4448F44F44F4F48444F4FF44F4F444F4848F454445F44F4F4 +44F4F4F444F4FF44F4F444FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F +770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF07777777700FFFFFFFFFFFF0F4F4444484FFF84F4FF484FFF84F84F4844F414FF84F44FF +F84F4FF484FFFF4444F844484F84F84FFF44F44FFF84F4FF484FFF4FFFFFFFFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0077777000FFFFFFFFFFFFF0F4F5485454454545 +4545454545454545454F5445454F54545454545454584F5414F54854445454545454F854545454 +545454584FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000F +FFFFFFFFFFFFFFF0F4F4444F484484484484484484484484484F4844844F48448448448448444F +4844F4444F584484484484F448448448448448444FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F45FFFF44544544544544544544544 +54454F4445445F44445445445445445F44445FFFF4444544544544F445445445445445445FFFFF +FFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F0F484584584584584584584584584584584584584584584584584584584584584584584584584 +584584584584584584584584584FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770 +000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F4444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444FFFFFFFFFFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F +F0FF0FF0FF0FF0FF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0FF0FF0FF0FF0FF0FF00FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF7F00F0FF0FF0FF0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +7780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF77F00FF0FF0FF0FF00FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FF77FF77F000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77FF7FF00F0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF48FF0 +0FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFF84848FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF07770000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18848FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF3FF184F848FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F77 +0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFF48484FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF3F4884FFFFFFFFFFFFFFFFFFF0FFF0FFFFF000FFF000FFF0000FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FF3F48FFFFFFFFFFFFFFFFFFF0FFF0FFFF0FFF0F0 +FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFFFFF +FFFFFFFFFFFFFFF0F0F0F0FFF0FFF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFF8F8F8F8F8F8 +F8F8F8F8FFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFF0F0F0F0FFF0FFF0F0FFF0F0FFF0FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0778000 +0F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF +0FFF0FFF0FF0FFF0F0FFF0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FFF000FFF000FFF0000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFF0FFF0FFFFF +FFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFF +FFFFFFFFFFFFFFFFF0FFFFFFFFF0FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFF0FFFFFFFFFFFFFFFFF0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077 +70000F770FFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFF +FFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFF8FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F0FFF000F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFF0FFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000F0FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF07770000F770FFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFFFF00F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F +770FFFFFFFFFFFFFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFFFFF0FFF0000FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFF +FFFFFFFFFFF0080FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF07780000F770FFFFFFFFFFFFFFFFFFFFF0088800FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFFFFFFFFFFFFFFFFF0888 +8880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780 +000F770FFFFFFFFFFFFFFFFFFFF00888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770000000000000000000000888880FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F7700888888 +88888888888888888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF07770000F770088888888888888888888888880FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770088888888888888888888 +888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +7770000F770088888888888888888888888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770088888888888888888888888880FFFFFFFF +FFF0FFFF0FFF000FFF0FFF0FFFFFFF0FFFFF000FF0FF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770088 +888888888888888888888880FFFFFFFFFFF0FFF00FF0FFF0FF0FFF0FFFFFFF0FFFF0FFF0F0FF0F +F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF07780000F77000888888888888888888888880FFFFFFFFFFFF0FFF00FF0FF +FFF0F0F0F0FFFFFF0FFFF0FFF0F0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F0888888888833888 +888888880FFFFFFFFFFFF0FF0F0FF00000F0F0F0F0FFFFFF0FFFF0FFF0F0FF00FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF07780000F770F0888888883333388888888880FFFFFFFFFFFF0F0FF0FF0FFF0F0FF0FF0FFFF +FF0FFFF0FFF0F0FF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770F08888883333B3B38888888880FFFFF +FFFFFFF0F0FF0FFF000FF0FF0FF0FFFFF0F0FFFF000FF00F0FF0FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F77 +0F000003333B333338888888880FFFFFFFFFFFF00FFF0FFFFFFFFFFFFFFFFFFF0FFF0FFFFFFFFF +FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF07770000F770FFFF33303330B3338888888880FFFFFFFFFFFF00FFF0F +FFFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFF3B33B03B3 +3B38888888880FFFFFFFFFFFF0FFFF0FFFFFFFFFFFFFFFFFF0FFFFF0FFFFFFFFFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF07770000F770FFFF333B30333333888888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFF3303333B33B3888888880FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0777000 +0F770FFFF33B33B3333338888888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF07780000F770FFFF3B30333303338888888880FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFF3333B +3B3B3B38888888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFF07780000F770FFFF3333303330338888888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770000F770FFFFFF33333333338888888 +80FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077 +80FF0F770FFFFFFFFFFF0088888888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770FF0F770FFFFFFFFFFFFF08888888880FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077802B0F770FFFFF +FFFFFFFFF0000888880FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFF07770F60F770FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077802B0F770FFFFFFFFFFFFFFFFFFF +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F077702B0F770FFFFFFFFFFFFFFF0000777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077802B0F770FFFFFFFFFFFFFF0777777770FFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077702B0F770F +FFFFFFFFFFFFF07777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF07780F60F770FFFFFFFFFFFFF0777777777770FFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077702B0F770FFFFFFFFFFFFF07 +77777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF07780F60F770FFFFFFFFFFFF077777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077702B0F770FFFFFFFFFFFF077777777777770FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780F60F +770FFFFFFFFFF0077777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFF07770F60F770FFFFFFFFF0777777777777770FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780F60F770FFFFFFFFF07 +77777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF077702B0F770FFFFFFFFF077777777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077802B0F770FFFFFFFF077777777777770FF +FFFFFFFFFFFFFF0000FFF0000F0F0F0FFF000FF0FF0FFF0F0FF0000FFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770 +2B0F770FFFFFFFF07777777777770FFFFFFFFFFFFFFFF0FFFF0F0FFF0F0F0F0FF0FFF0F0FF0FFF +0F0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFF077802B0F770FFFFFFF077777777777770FFFFFFFFFFFFFFFF0 +FFFFFF0FFF0F0F0F0FF0FFF0F0FF0FFF0F0F0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077702B0F770FFFFFFF +07777777777770FFFFFFFFFFFFFFFFF0FFFFFFF0000F0F0F0FF0FFF0F0FF0FFF0F0FF0000FFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF07780F60F770FFFFFFFF077777777770FFFFFFFFFFFFFFFFFF0FFFFFFFFFF0F0F +0F0FF0FFF0F0FF00FF0F0FFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770F60F770FFFFFF0F07777777770FF +FFFFFFFFFFFFFFFFF0FFFFFFF000FF0F0F00FF000FF00F0F00FF0FF000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +77802B0F770FFFFF07077737777770FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFF0FFF0FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770F60F770FFFFF077773B377770FFFFFFFFFFFFFFFFF +FFF0FFFF0FFFFFFF0FFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780F60F770FFF +FF077773337770FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0F0FF0FFFFFFFFFFFFFFFF0FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFF077702B0F770FFFFF07777737770FFFF8787777FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780F60F770FFFFF07777777770F +FFFF777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFF07770F60F770FFFFF07777777770FFFFF770778FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF077802B0F770FFFF077777777770FFFFF700077FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770F60F77 +0FFFF077777777770FFFFF770778FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFF07780F60F770FFF0777777777770FFFFF777777FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770F60F770FFF0777777777 +770FFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF07780F60F770FFFF077777777770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770F60F770FFFF077777777770FFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07780F6 +0F770FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF077702B0F770FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07770B10F770000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000077808D0F7777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777770B10F77777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +70B10F777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777780B10F7777777700000077777777777777777777770000 +000777777777777777777777770000000077777777707777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777770B10F77777777 +777777777777777777777777777777777777777777777777777777777777777777777777777077 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777780B10F777777777077777070770007777777777777700000777000070770 +777777777777707777077700077070000777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777770B10F7777777770777770707077 +707777777777777077777707770707077777777777777077770770777070707770777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777780B10F77777777707777707070777777777777777770777777077707070777777777777770 +777707707777707077707777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777770FC0F777777777077777070700000777777777777 +707777770777070707777777777777707777077000007070777077777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777777777777777777777777777777777777777777777780B10F7777 +777770000770707077707777777777777000077707770707077777777777777000000770777070 +707770777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777770B10F77777777707777707077000777777777777770777777700007 +070077777777777770777707770007707000077777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777780000F777777777077777770 +777777777777777777707777777777077707777777777777707777077777777077777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777770000F7777777770777777707777777777777777777077777777770777077777777777 +777077770777777770777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777770B10F77777777700000707077777777777777 +777770000077777707077777777777777770777707777777707777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777777777777777777777777777777777770FB0F +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +7777777777777777777777777780000F7777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777770B10F77777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777780FC0F774444444444444444444484454454848545484584844544854544454844 +854414584485484454484545458548448548454454444854548458458444854484548448544545 +448458484548458444854854485484484548444844854484544848448454548444848454454848 +454454848454454848454454848454454848454454848454548484854448414584844854544548 +5485485845845845845845848445848548548584847770FF0F77540F0000FFF0F00F8445454484 +445444484444444584544484584454544454444454445454454444844444454544454484484144 +444544444445444454444445444544841444444544454445444454484444454444454544454484 +444854545444414445454454484454454484454454484454454484454454484454454484454454 +484454454414454444544454444844444444444444444444444444445444444444444444547770 +FB0F7748FF00F000F0FF0045844845448544584545845854448458544448448458484854845844 +8484458445845844848548454584544584844584FF484548445845844584844444584FF48454FF +484548445445845845485484458445445845444844584445848445448458445448458445448458 +445448458445448458445448458445448458445448448445844458445844000000000000000000 +00000000004800000000000000487780FF0F7745FFFFFFFFFFFF00444454484544484544844444 +444544444484544454454454444444544454844454454444544445484444448445448445FF4448 +45484444458445445448445FF44484FF4448454844844444484444448444844844444845484444 +844454848454444848454444848454444848454444848454444848454444848454444848454454 +84444845484445F7787878778770F877878787787045F7778787778770457770B20F7744FFFFFF +FFFFFFF085484FF5484FF444FF54FFFFFF84FFFFFF5484FF4844FF44FFFFFF4854FF54FF484484 +584FFFF4454FFFFF4FF4FF4FF4FFFFF44FF54FFFF44544FF4854FF4FFFFF44FFFFF44FF4FF54FF +FF454FFFFF54FF4FF54FFFF44FF44FF54454445454458544454458544454458544454458544454 +4585444544585444544585444544584545485444548544F7777777777770F777777777777044F7 +777777777770447770FF0F7784F0FFF0FFF0F00044544FF4454FF454FF44FF545444FF45444454 +FF4544FF84FF54414444FF44FF45445444FF44FF84FF84FF4FF4FF4FF4FF44FF4FF4FF84FF4484 +FF4444FF4FF54FF4FF44FF4FF4FF4FF54FF4FF84FF4FF54FF4FF44FF4FF54FF485484844484444 +854484444854484444854484444854484444854484444854484444854484444844544584454484 +F7700000777770F770000000778084F7770777077770847780FB0F7744F0FFF0FFF0F00048445F +F4844FF484FF48FF484458FF4845484FFFF484FF44FF4844458FFFFFFFF48548544584FF44FF44 +FF4FF4FF4FF4FF48FF4FF4FF444448445FFFFFF45FF44FF4FF48FF4FF4FF4FF44584FF44FF4FF4 +4FF4FF48FF4FF48FF4444454484448454484448454484448454484448454484448454484448454 +48444845448444845448448444844844F7700000777780F770777770777054F777007007777044 +7770000F7745F0FFF0FFF0F00045484FF4548FF444FF54FF444844FF4448454FFFF445FF45FF44 +45844FFFFFFFF44444448444FF454FFFFF4FF4FF4FF4FF45FF4FF4FFFFFF45414FF48FF44FF48F +F4FF45FF4FF4FF4FF484444FFFFF4FF48FF4FF45FF4FF44FF45845445441454445441454445441 +4544454414544454414544454414544454414544454414544454414454541454F7777777777770 +F770777770778044F7777000777770457780B10F7784F0FFF0FFF0F00044544FF4454FFFFFF444 +FFFFF454FFFFF544FF84FF44FF84FFFFF444FF84FF84FF4854854FFFF4448444FF4FF4FF4FF4FF +44FF5FF4FF44FF84444FF44FF85FF44FF4FF44FF5FF4FF4FF44FF48444FF4FF44FF4FF44FF4FFF +4FF444848485444848485444848485444848485444848485444848485444848485444848485444 +848485444848444444F7777777777770F770777770777084F7777000777780847770FF0F7754F0 +FFF0FFF0F00084484FF4844FF454FF84FF544444FF544484FF54FF84FF54FF544854FF44FF54FF +544444FF8484854FFFF54FFFFFFF54FFFFF44FF44FFFF4548454FFFF444FFFFF54FFFFF44FF4FF +84FFFF454FFFF84FFF4FF84FFFF84FFFFF48454454448454454448454454448454454448454454 +44845445444845445444845445444845445444845445484584F7777777777780F7707777707770 +54F7770070077770547780B10F7744F0FFF0FFF0F00045454FF4548FF484FF45FF485848FF4854 +44FF44FF45FF44FF485444FF45FF44FF485484FF45445445445445445445445484484FF4545445 +445444FFFF45445445445484484FF484544544544544545FF45454445845445445445445445445 +445445445445445445445445445445445445445445445445445445445445445445445445445445 +4444F7777777777770F770000000777044F7770777077770447770000F7748F0FFF0FFF0F00044 +844FF4445FF444FF44FF444444FF44441FF4845FF4FF48FF44448FF44844845FF44454FF44FF44 +84484484484484484444544FF44844844844845FF484484484484444544FF45444844844844844 +4FF448445044444844844844844844844844844844844844844844844844844844844844844844 +844844844844844844844844844844844845F7777777777780F770000000777048F77777777777 +80487770B10F7744F0FFF0FFF0F000845FFFFFF84FFFFFF584FFFFFF14FFFFFF4FF4584FF4FF45 +FFFFFF4FF84584584FF458414FFFF58458458458458458458458414FF84584584584584FF45845 +8458458458414FF4FF8458458458458458414FF845845845845845845845845845845845845845 +84584584584584584584584584584584584584584584584584584584584584584584F777777777 +7780F777777777778054F7777777777780547780B10F7754F0FFF0FFF0F0004444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +4444444444444444444444FFFFFFFFFFFFF0FFFFFFFFFFFFF044FFFFFFFFFFFFF0447770F60F77 +48FFFFFFFFFFFFF058458458458458458458458458458458458458458458458458458458458458 +458458458458458458458458458458458458458458458458458458458458458458458458458458 +458458458458458458458458458458458458458458458458458458458458458458458458458458 +458458458458458458458458458458458458458458458458458458458458458458458458458458 +45845845845845845845847780F60F774444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +444444444444444444444444444444444444444444444444444444444444444444444444444444 +4444444444444444444444444444444444444444444444444444447770F60F7777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777780F60F77777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +777777777777777777777777777777777777777777777777777777777777777777777777777777 +77777777777777777777777777777777777777777770000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FF040000002701FFFF040000002701FFFF030000000000 +}\plain\f6\fs18 +\par TreeView Interface Macros +\par The TreeView control is completely message-based; in other words there are no APIs. However, COMMCTRL.H supplies a boatload of macros, which I'll explain throughout the article, that make it very easy to interface to the TreeView control without dealing with message building. For this article, I will only use the macros, since they will easily recompile to different platforms. To satisfy the curious, I will put the message used in after the macro: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TreeView_SetImageList ( hWndTV, hIml ) +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TreeView Creation and Adding Items +\par There are three steps to creating a TreeView control. First, you need to create the TreeView window using your old pal CreateWindow (the TreeView can also be part of a resource template, such as a dialog). Second, you can optionally tell the TreeView what level of indentation you want for each branch, and you can optionally tell the TreeView to use an Image List. And finally, you add your items. +\par A TreeView item is much more than a string. It contains the string, the image(s) from the Image List, the state (such as selected or unselected), and some user data (a DWORD, which is a handy place to put your C++ this pointer). Each item in the list box is accessible by a handle, defined as HTREEITEM in COMMCTRL.H. Unlike in a list box, you do not access an item by its index, you access it by the handle. This is very nice, since the items in a TreeView can be sorted, dragged, and dropped, yet they still keep the same handle. This makes it a lot easier for programmers to keep track of items; of course, you have to manage the handles yourself. (However, there are ways to get handle values by position.) +\par To add an item, you will fill out a TV_INSERTSTRUCT structure (described later) and pass it to the TreeView, which will return a handle to you. To traverse the list of items, you will communicate with the TreeView to find the first/next item in the list. +\par Before I get into how to get handles and traverse lists in detail, let's start from the top and look at the three steps involved with making a TreeView control. Steps 2 and 3 are optional, although if you don't do them, you will have one of the most boring TreeView programs in the known universe: an empty window. Let's look at each step in more detail. +\par Step 1: Create the Control First, be sure to include COMMCTRL.H and link with COMCTL32.LIB. And, since the TreeView control is a window, you must instruct the COMCTL32.DLL to register the class. This is done with a one-time initialization call into COMCTL32.DLL: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 InitCommonControls(); +\par // Place this in WinMain or some other startup code +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Now, using CreateWindow (or via a dialog template), you will want to use the class name of WC_TREEVIEW, which is currently defined as SysTreeView32 in Chicago. This makes it easier to cross-compile for future platforms, and it lets you avoid using that string constant in a million places (which wastes memory). So, plop this in your global variable declaration: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 char szTreeViewClass[] = WC_TREEVIEW; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 and then use szTreeViewClass everywhere. For the style bits, use the styles in the table in Figure 21. +\par \plain\f6\fs18\b Figure 21 TreeView Style Bits\plain\f6\fs18 +\par \pard\li420\ri240\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 +\par \pard\plain\f6\fs18 Style\tab Meaning +\par TVS_HASLINES\tab Show lines for the nodes +\par TVS_LINESATROOT\tab Show lines for the root items +\par TVS_HASBUTTONS\tab Show buttons for applicable items +\par TVS_EDITLABELS\tab Allow in-place editing of text +\par \pard\li180\ri240\plain\f6\fs18 Step 2: Set Optional TreeView Attributes Once you have created the control, you may want to change the indent amount for child nodes, or you may want to use an Image List. To change the indent amount from the default (which is slightly more than the pixel width of an image if the control has an Image List, and slightly less than an icon's width if the control is plain text), use the TreeView_SetIndent macro. Likewise, you can find out the indent with the TreeView_GetIndent macro: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 BOOL TreeView_SetIndent(HWND hWndTV, +\par // Handle of TreeView +\par UINT uIndent ); +\par // Indent, in pixels +\par +\par UINT TreeView_GetIndent(HWND hWndTV); +\par // Handle of TreeView +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 A very common attribute for the TreeView will be, of course, the Image List. The left pane of the Explorer shows how colorful graphics images can make a TreeView control take on a really vibrant appearance. To associate an Image List with a TreeView, use the TreeView_SetImageList macro, and use TreeView_GetImageList to retrieve the current Image List in use by the TreeView control: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 HIMAGELIST TreeView_SetImageList(HWND hWndTV, +\par // Handle of TreeView +\par HIMAGELIST hIml); +\par // Handle of Image List +\par +\par HIMAGELIST TreeView_GetImageList(HWND hWndTV); +\par // Handle of TreeView +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 A word of caution: since an Image List is created with a default background color of transparent, you can run into some weird problems when using a default Image List with a TreeView control. Since an item in a TreeView can support one of two different images (one for a selected state and one for a nonselected state), if the actual shapes in the two images do not have the exact same size (that is, their transparent masks are not the same), then they will paint over each other as your item becomes selected or unselected. Figure 22 shows an item in a TreeView that has an X for the selected image and an O for the nonselected image. This item was once nonselected, and is now selected. The X was drawn right over the O, which is why both images seem to be painted in the same area. What is the solution? Since a TreeView control's background color will by default be the value returned from GetSysColor (COLOR_WINDOW), you can set the background color of the Image List to that color as well: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 ImageList_SetBkColor (hImageList, +\par GetSysColor ( COLOR_WINDOW )); +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18\b Figure 22 An item.\plain\f6\fs18 +\par {\pict\wmetafile8\picw3324\pich737\picscalex99\picscaley99\picwgoal1889\pichgoal419 +0100090000030D0400000000C20300000000050000000B0200000000050000000C02E102FC0C03 +0000001E00070000001604E102FC0C00000000050000000C02E402050D050000000B0200000000 +030000001E00070000001604E402050D00000000050000000C02A4016207050000000B02000000 +00050000000B0200000000C2030000430F2000CC0000001C007E0000000000A401620700000000 +280000007E0000001C000000010004000000000000000000130B0000130B000000000000000000 +00FFFFFF000000BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 +FF0000FF000000FFFF00FF000000FF00FF00FFFF00000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FF000000000000000000009990000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FF0000009990 +000000000099900000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000999900FFFFFF09990000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000009999FFFFFFF999900000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000099990000 +F99990000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000900000000F99990000999FF0000000FF0000FF00FF00F +F000FFFF0000000FF000FFFF00000000FFFFF00FF00FF000000FF000FF00FFFF000FF00FF00FF0 +0000000000000FFF9999009990FFF000000FF0000FF00FF00FF00FF00FF000000FF00FF00FF000 +000FF00FF00FF00FF000000FF00FF00FF00FF00FF00FF00FF00000000000000FF009999999900F +F000000FF0000FF00FF00FF000000FF000000FF000000FF000000FF00FF00FF00FF000000FF00F +F00FF000000FF00FF00FF0000000000000FF00009999990000FF00000FF0000FF00FF00FF000FF +FF0000000FF000FFFF00000000FF0FF00FF00FF000000FF00FF00FF000000FF00FF00FF0000000 +000000FF00000999990000FF00000FF0000FF00FF00FF00FF0000000000FF00FF000000000000F +FFF00FF00FF000000FF00FF00FFFFFF00FF00FF00FF0000000000000FF00000999999000FF0000 +0FF0000FF00FF00FF00FF00FF000000FF00FF00FF000000FF00FF00FF00FF000000FF00FF00FF0 +0FF00FF00FF00FF0000000000000FF00009999999900FF00000FF0000FFFFF000FF000FFFF0000 +000FF000FFFF00000000FFFF000FFFFF0000000FF0FFFF00FFFF000FFFFFFFFF00000000000000 +FF00099990099990FF00000FF0000FF00000000000000000000000000000000000000000000000 +000000000000000FF0000000000000000000000000FF0000000FF0099900009999F000000FF000 +0FF000000FF00000000000000FF0000000000000000000000000000000000FF00FF00000000000 +00000000000000000000000FFF9990000009999000FFFFFFFF0FF000000FF00000000000000FF0 +000000000000000000000000000000000FF000000000000000000000000000000900000000F999 +9000000F9999000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000009999000000FFF9999000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000900000000999FFFFFFFFF009990000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000099900FFFFFF +000009900000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000999000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000009900000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000040000002701FFFF040000002701FF +FF030000000000 +}\plain\f6\fs18 +\par Step 3: Add Your Items At this point, you should have your TreeView control prepared and ready for some serious item addition action! But wait, there's more! Unlike the dinosaur list box control, adding items to the TreeView is not as simple as passing a string into the control with some Jurassic LB_ADDSTRING message. Since the TreeView control is a hierarchical list, each item must fit into some branch of the tree. Think of a TreeView as a hard disk, and each item as a file. The root directory is the equal to the root of the TreeView. The TreeView can have children (subdirectories) and those children can have children as well (more subdirectories). A TreeView item's parent is the same as the .. from MS-DOS\'ae file-land. To make things easier, let's say that a node is an item that has children (like an MS-DOS subdirectory), and an item has no children (like a normal MS-DOS file). Remember, though, that a node and an item are both exactly the same in the eyes of the TreeView control; my terminology is just an attempt to make it easier to understand. +\par So when you add an item or node, you not only need to specify what it is, but where it goes. The developers of the TreeView control wisely kept these two different properties separate from each other. To specify what a TreeView item or node is, you will fill out a structure called TV_ITEM (see Figure 23). This structure defines the attributes of the text, images, selection state, and user-supplied data. To specify where a TreeView item or node goes, you will fill out a structure called TV_INSERTSTRUCT (see Figure 24). Both structures are used when you insert the item into the TreeView. +\par \plain\f6\fs18\b Figure 23 TV_ITEM Structure\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 typedef struct _TV_ITEM +\par \{ +\par UINT mask; // TVIF_ flags +\par HTREEITEM hItem; // The item to be changed +\par UINT state; // TVIS_ flags +\par UINT stateMask; // TVIS_ flags (valid bits in state) +\par LPSTR pszText; // The text for this item +\par int cchTextMax; // The length of the pszText buffer +\par int iImage; // The index of the image for this item +\par int iSelectedImage; // the index of the selected imagex +\par int cChildren; // # of child nodes, I_CHILDRENCALLBACK for callback +\par LPARAM lParam; // App defined data +\par \} +\par TV_ITEM, FAR *LPTV_ITEM; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18\b Figure 24 TV_INSERTSTRUCT Structure\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 typedef struct _TV_INSERTSTRUCT +\par \{ +\par HTREEITEM hParent; // a valid HTREEITEM or TVI_ value +\par HTREEITEM hInsertAfter; // a valid HTREEITEM or TVI_ value +\par TV_ITEM item; +\par \} +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT; +\par Let's first define an item. I'll start off with a plain boring text item, one that has something really boring in it (assume this TreeView control does not have an Image List attached to it): +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TV_ITEM tvi; +\par tvi.mask = TVIF_TEXT; // This item has text +\par tvi.pszText = "Whitewater"; // Something really boring +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 There, that was easy. Now, I need to add this to a TreeView. To do this, I fill out a TV_INSERTSTRUCT and then call the TreeView_InsertItem macro: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TV_INSERTSTRUCT tvis; +\par tvis.hParent= hParent; // Set parent node +\par tvis.hInsertAfter= hInsertAfter; +\par // Indicate sibling item to add this item after +\par tvis.item= tvi; // Indicate the item (from above) +\par hItem =TreeView_InsertItem ( hWndTV, &tvis ); +\par // Add the item to the TreeView, +\par // return value is handle to item +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 If you wanted to make the above item into a node, simply add another item with TreeView_InsertItem, and use the above hItem return value (from the Whitewater item) as the hParent for your new item. This will automatically turn your Whitewater item into a node. +\par If your TreeView control is using an Image List, you simply need to indicate the images to use when filling out the TV_ITEM structure. Say you are using an Image List whose first image (iFirstImage) is a log, and the second image (iSecondImage) is a box of sugar-frosted milk. To add these two items to the same node in a TreeView, you would use code like Figure 25. Notice that both the iImage and iSelected image fields are set. That is because the TreeView will draw different images for the item depending on whether it's selected. Since this tiny sample doesn't utilize this feature, use the same value. If you only filled in the iImage field and used the TVIF_IMAGE style bit only, the iSelectedImage would default to 0, and you would find that image #0 would always be drawn on your selected item. +\par \plain\f6\fs18\b Figure 25 Adding Two Items to the Same Node\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TV_ITEM tvi; +\par TV_INSERTSTRUCT tvis; +\par tvi.mask = TVIF_TEXT | TVIS_IMAGE | TVIS_SELECTEDIMAGE; // This item has text, +\par // and an image +\par tvi.pszText = "Log"; // Every kid loves Log! +\par tvi.iImage = +\par tvi.iSelectedImage = iFirstImage; // Use Log image +\par tvis.hParent= hParent; // Set parent node +\par tvis.hInsertAfter= hInsertAfter; // Indicate sibling item \tab // to add +\par // this item after +\par tvis.item= tvi; // Indicate the item \tab // (from above) +\par hItem = TreeView_InsertItem ( hWndTV, &tvis ); // Add the item to the \tab // TreeView +\par tvi.pszText = "Sugar Frosted Milk"; // Stays crunchy in cereal! +\par tvi.iImage = +\par tvi.iSelectedImage = iSecondImage; // Use Sugar Frosted Milk \tab // Image +\par tvi.hInsertAfter = hItem; // Add right after "Log" +\par hItem = TreeView_InsertItem ( hWndTV, &tvis ); // Add the item to the \tab // TreeView +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 See, still easy! That, actually, is basically how to add items to the TreeView. However, there is a lot of syrup to pass around the TreeView dinner table, so let's jump into some of the enhancements. These enhancements include using two images from an Image List per item/node and a snappy way of doing on-the-fly item/node drawing. +\par Dueling Images On Duh Fly With Callbacks +\par Sometimes you may wish to have a different image for a selected item and a non-selected item. To do this, you simply put the number of one image in the iImage field and the number of the other image in the iSelectedImage field of the TV_ITEM structure, and make sure to use the TVIS_IMAGE and TVIS_SELECTEDIMAGE style bits. +\par A more common use for two different images would be to indicate the state of a node. Say your node is a folder. If you want to draw the folder open when the node is expanded and closed when the node is collapsed, you will need to set up a callback. This callback is a different type than you're used to. Instead of calling some exported function in your program, the TreeView control will send the parent of the TreeView control a new message: WM_NOTIFY. +\par This is a new message for Chicago, used instead of the clunky WM_COMMAND method to notify parents (which has always been a pain since menus also use WM_COMMAND). +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 // WM_NOTIFY: wParam = id of the control, lParam points +\par // to a NMHDR structure. +\par +\par typedef struct tagNMHDR +\par \{ +\par HWND hwndFrom; // Handle of control sending message +\par UINT idFrom; // id of control sending message +\par UINT code; // notif. code (depends on control) +\par \} +\par NMHDR; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 The TreeView control overloads this structure by wrapping the NMHDR structure in a larger structure (making sure to keep the original NMHDR structure at the start of the new structure). So, when the TreeView sends the parent a WM_NOTIFY message, lParam points to a TV_DISPINFO structure: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 typedef struct _TV_DISPINFO +\par \{ +\par NMHDR hdr; // from above +\par TV_ITEM item; // Item in question +\par \} +\par TV_DISPINFO; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 The fields in the new structure will be used differently in various scenarios. Let's look at the first scenario: on-the-fly image selection. +\par TVN_GETDISPINFO +\par If you want to determine the images or text of an item on-the-fly, use the special I_IMAGECALLBACK constant in COMMCTRL.H in place of image numbers. This will cause the TreeView control to send a callback message to the TreeView's parent. +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 tvi.iImage = +\par tvi.iSelectedImage = I_IMAGECALLBACK; // Use a callback +\par // to get image at Draw time +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 If you use the I_IMAGECALLBACK constant, the TVN_GETDISPINFO notification message will be sent to the parent of the TreeView control at draw time via the WM_NOTIFY message (see Figure 26 for a list of callbacks via WM_NOTIFY). Figure 27 shows what the WM_NOTIFY message will look like to your parent window. The state of the control is filled out automatically by the TreeView control. Your parent window needs to fill in the image numbers depending on the state of your item. For example, let's say you want to use the iOpenFolder and iClosedFolder images, depending on whether or not the node is collapsed or expanded. To do this, use I_IMAGECALLBACK for the iImage and iSelectedImage fields of your TV_ITEM structure, and then add WM_NOTIFY code to the parent window procedure of the TreeView control. One of the constants defined in COMMCTRL.H for the different states of an item is TVIS_EXPANDED, which indicates if the node is open or closed. Using that constant, Figure 28 shows a quick-and-dirty way to handle the WM_NOTIFY message. Of course, this code is for demonstration only; in your app there would most likely be many more cases of the WM_NOTIFY message (from other controls not discussed here), and you will write a WM_NOTIFY handler function. +\par \plain\f6\fs18\b Figure 26 TreeView Callback Messages\plain\f6\fs18 +\par +\par \pard\plain\f6\fs18 Callback's Purpose\tab How to Invoke it\tab Type of Message Sent via WM_NOTIFY +\par Count the number of child nodes\tab While filling in the TV_ITEM structure, use I_CHILDRENCALLBACK for cChildren field\tab TVN_GETDISPINFO +\par Supply an image number at draw time for an item\tab While filling in the TV_ITEM structure, use I_IMAGECALLBACK for iImage and/or iSelectedImage field\tab TVN_GETDISPINFO +\par Supply label text at draw time\tab While filling in the TV_ITEM structure, use LPSTR_CALLBACK for pszText field\tab TVN_GETDISPINFO +\par Allow label editing\tab Use the TVS_EDITLABELS style bit when creating the TreeView control\tab TVN_BEGINLABELEDIT +\par Accept label edits\tab Use the TVS_EDITLABELS style bit when reating the TreeView control\tab TVN_ENDLABELEDIT +\par Allow drag-and-drop\tab This comes for free\tab TVN_BEGINDRAG +\par \tab \tab TVN_BEGINRDRAG +\par Do something in response to node expanding or collapsing\tab This comes for free\tab TVN_ITEMEXPANDING (not covered in this article) +\par Do something in response to node getting deleted\tab This comes for free\tab TVN_DELETEITEM(not covered in this article) +\par \pard\li180\ri240\plain\f6\fs18\b Figure 27 WM_NOTIFY Sent to Parent Window\plain\f6\fs18 +\par +\par \pard\plain\f6\fs18 Parameter\tab Meaning\tab \tab +\par wParam\tab idTreeViewControl\tab \tab +\par lParam \tab Points to a TV_DISPINFO:\tab \tab +\par \tab \tab (TV_DISPINFO)lParam->hdr.hwndFrom\tab hWndTV +\par \tab \tab (TV_DISPINFO)lParam->hdr.idfrom\tab idTreeViewControl +\par \tab \tab (TV_DISPINFO)lParam->hdr.code \tab TVN_GETDISPINFO +\par \tab \tab (TV_DISPINFO)lParam->item.mask\tab TVIF_IMAGE | TVIF_SELECTEDIMAGE +\par \tab \tab (TV_DISPINFO)lParam->item.state \tab State of control +\par \tab \tab (TV_DISPINFO)lParam->item.lParam \tab User-defined data +\par \pard\li180\ri240\plain\f6\fs18\b Figure 28 Handling WM_NOTIFY\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 case WM_NOTIFY: +\par +\par if (TVN_GETDISPINFO = = ((LPNMHDR)lParam)->code) +\par \{ +\par if ( (((TV_DISPINFO *)lParam)->item.state) & TVIS_EXPANDED ) +\par \{ +\par ((TV_DISPINFO *)lParam)->item.iImage = +\par ((TV_DISPINFO *)lParam)->item.iSelectedImage = iOpenFolder; +\par \} +\par else +\par \{ +\par ((TV_DISPINFO *)lParam)->item.iImage = +\par ((TV_DISPINFO *)lParam)->item.iSelectedImage = iClosedFolder; +\par \} +\par return TRUE; +\par \} +\par return (DefWindowProc(hWnd, message, uParam, lParam)); +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Text Strings on Duh Fly With Callbacks +\par A text callback is needed if you want to determine the text for a label at draw time. They're just like the I_IMAGECALLBACK, except that you use LPSTR_CALLBACK for the pszText field of the TV_ITEM structure. Then, when you get your TVN_GETDISPINFO message, fill in the pszText field of the TV_DISPINFO->item field. You can use the lParam field of the TV_DISPINFO->item to access a this pointer to get your string. When you add the item to the TreeView, you can store a handle/pointer/record number/whatever in that value, and use that value now to determine the string to return. +\par Okay, enough on drawing the items in the TreeView. Let's move on to some more features. +\par In-place Label Editing +\par A very cool feature of the TreeView is in-place label editing. If the user clicks once on a label, a little edit control pops up for the user to change the text (refer back to Figure 20). You'd do this, say, if you want to rename files in the Explorer. Of course, this does not come for free. You have to do a little bit of work to get the basic functionality, and a lot of work if you want more functionality. Let's start with the basics. +\par There are two steps for implementing label editing. The first step is taken when the user clicks on a selected label. The TreeView's parent window is sent a TVN_BEGINLABELEDIT notification via the WM_NOTIFY message. At this point, the TreeView can do a number of things, but the most important is determining whether the label should be edited or not. For example, you may want to let the user change the labels of the child items in a TreeView, but not the root nodes. The parent window returns zero to allow editing, nonzero to \plain\f6\fs18\ul abort\plain\f6\fs18 . +\par The second step happens after the user completes editing (by either pressing Enter to accept or Esc to cancel). The TreeView's parent windows will get a TVN_ENDLABELEDIT notification via the WM_NOTIFY message; this is your program's chance to validate the text and update the actual label in the TreeView. The TreeView will not automatically update the label text\emdash you must do it in response to the TVN_ENDLABELEDIT notification code. +\par Let's look at a simple way to do label editing. The code in Figure 29 will accept whatever the user types in, and will not allow editing of the root items. This code introduces two more features of the TreeView. The first is part of the query interface for the TreeView. The macro used was TreeView_GetParent . This TVM_GETNEXTITEM message takes a bunch of different types of flags for wParam. I'll discuss the query interface later. +\par \plain\f6\fs18\b Figure 29 Core Code for Label Editing\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 case WM_NOTIFY: +\par +\par switch (((LPNMHDR)lParam)->code) +\par \{ +\par case TVN_BEGINLABELEDIT: // Run this code for the label edit start +\par +\par // Get the parent control using the TreeView_GetParent +\par // macro , and check to see if it +\par // is the root. +\par if (TVGN_ROOT != TreeView_GetParent +\par ( +\par ((LPNMHDR)lParam)->hwndFrom, +\par ((TV_DISPINFO *)lParam)->item.hItem +\par ) +\par ) +\par return 0; // Return 0 to OK edit +\par else +\par return 1; // Return non-zero to disallow edit +\par break; +\par +\par case TVN_ENDLABELEDIT: // Run this code when user is done +\par +\par // Check to make sure user did not cancel action. +\par // If they cancelled, the string pointer is NULL. +\par if ( ((TV_DISPINFO *)lParam)->item.pszText ) +\par \{ +\par ((TV_DISPINFO *)lParam)->item.mask = TVIF_TEXT; +\par TreeView_SetItem +\par ( +\par ((LPNMHDR)lParam)->hwndFrom, +\par &(((TV_DISPINFO *)lParam)->item) +\par ); +\par \} +\par break; +\par \} +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 return (DefWindowProc(hWnd, message, uParam, lParam)); +\par The second feature is the TreeView_SetItem macro, which is a way to modify items in the TreeView. I'll also discuss item maintenance features later. +\par Other Goodies +\par The above code for in-place label editing will probably be enough for 90 percent of the programs that will use the TreeView control. For programs that require more control over the label editing process, you can get the handle to that in-place edit control with the TreeView_GetEditControl macro. +\par Your application should retrieve the edit control handle when it receives a TVM_BEGINLABELEDIT notification. You can then subclass this edit control, change its size, or move it as desired. But whatever you do, don't destroy it\emdash the TreeView will do that for you. Once you get the TVM_ENDLABELEDIT message, assume that the handle to the edit control will be invalid after you return from that notification. +\par TreeView Drag-and-Drop +\par Dragging and dropping items in a TreeView is actually quite straightforward. You do this when you move files in the Explorer. There are three steps involved. The first step requires setting up the drag operation when a TVN_BEGINDRAG notification is received via WM_NOTIFY, and eventually calling the ImageList_StartDrag API. The second step involves calling the ImageList_DragMove API in response to WM_MOUSEMOVE messages captured in the TreeView's parent, and (optionally) checking for a drop target inside the TreeView control. The third step involves calling the ImageList_EndDrag function in response to the WM_XBUTTONUP message. Let's cover each step in more detail. +\par TVN_BEGINDRAG is sent via the WM_NOTIFY message to the TreeView's parent when the user starts a drag operation. In response to this message, your program must first create a drag image. This image will look just like the item in the TreeView, but dithered. A macro called TreeView_CreateDragImage will do all of this automatically, and return a handle to an Image List with the drag image already inside it. Then use the TreeView_GetItemRect macro to figure out where the item is positioned onscreen. Finally, call the standard ImageList_StartDrag and ImageList_SetCapture code. +\par Make sure you cache away the handle of the item you are dragging; you will need it later when you drop the item. +\par A note about the WM_NOTIFY message. Instead of lParam pointing to a TV_DISPINFO structure, lParam will point to the more general-purpose NM_TREEVIEW structure. This structure is also an overloaded NMHDR structure, with different information in it: +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 typedef struct _NM_TREEVIEW +\par \{ +\par NMHDR hdr; // Standard NMHDR +\par UINT action; // notif. specific action +\par TV_ITEM itemOld; // Old item state +\par TV_ITEM itemNew; // New item state +\par POINT ptDrag; // Mouse cursor pos (in TV +\par // client coords) +\par \} +\par NM_TREEVIEW; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Using that new notification, use code like Figure 30 to handle Step 1. +\par \plain\f6\fs18\b Figure 30 Step 1 of TreeView Drag-and-drop\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 case WM_NOTIFY: +\par +\par switch (((LPNMHDR)lParam)->code) +\par \{ +\par case TVN_BEGINDRAG: +\par +\par \{ +\par RECT rcItem; +\par +\par // hDragImage is static, so we can delete it when +\par // the user stops dragging. Here we create a +\par // drag image to use for the ImageList_StartDrag +\par // API. +\par +\par hDragImage = TreeView_CreateDragImage +\par ( +\par ((LPNMHDR)lParam)->hwndFrom, +\par ((NM_TREEVIEW *)lParam)->itemNew.hItem +\par ); +\par +\par // Get the location of the item rectangle +\par +\par TreeView_GetItemRect +\par ( +\par ((LPNMHDR)lParam)->hwndFrom, +\par ((NM_TREEVIEW *)lParam)->itemNew.hItem, +\par &rcItem, +\par TRUE // TRUE = Rect of label text only +\par ); +\par +\par // Cache away the handle of the item to drag +\par +\par hDragItem = ((NM_TREEVIEW *)lParam)->itemNew.hItem; +\par +\par // Start the drag ala ImageList +\par +\par ImageList_StartDrag +\par ( +\par hDragImage, +\par ((LPNMHDR)lParam)->hwndFrom, +\par 0, +\par ((NM_TREEVIEW *)lParam)->ptDrag.x, +\par ((NM_TREEVIEW *)lParam)->ptDrag.y, +\par ((NM_TREEVIEW *)lParam)->ptDrag.x - rcItem.left, +\par ((NM_TREEVIEW *)lParam)->ptDrag.y - rcItem.top +\par ); +\par +\par // Capture the mousey to this window +\par +\par ShowCursor ( FALSE ); +\par SetCapture ( hWnd ); +\par +\par // Set a drag flag +\par +\par bDragging = TRUE; +\par +\par return 0L; // Return value is irrelevant +\par \} +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Step 2: In addition to the standard Image List drag operations, you may want to provide a touch of user feedback. When you drag the current item over another item in the TreeView, it would be really polite to highlight the drop location so the user knows he or she is dropping the item onto the correct location. +\par The TreeView provides a nice pair of features to make this easy. The first macro, TreeView_HitTest , returns the handle to the item at a specified location. The second macro, TreeView_SelectDropTarget , does the highlighting for you. To use TreeView_HitTest, you need to fill out a TV_HITTESTINFO structure (defined in COMMCTRL.H). See Figure 31 for a sample implementation. +\par \plain\f6\fs18\b Figure 31 Step 2 of TreeView Drag-and-drop\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 case WM_MOUSEMOVE: +\par +\par if (bDragging) +\par \{ +\par HTREEITEM hTarget; // Item under mouse +\par TV_HITTESTINFO tvht; // Used for hit testing +\par +\par // Do standard drag drop movement +\par +\par ImageList_DragMove ( LOWORD (lParam), HIWORD (lParam)); +\par +\par // Fill out hit test struct with mouse pos +\par +\par tvht.pt.x = LOWORD (lParam); +\par tvht.pt.y = HIWORD (lParam); +\par +\par // Check to see if an item lives under the mouse +\par +\par if ( hTarget = TreeView_HitTest +\par ( +\par hWndTreeView, // This is the global variable +\par &tvht +\par ) +\par ) +\par \{ +\par // Hide the drag image +\par ImageList_DragShow ( FALSE ); +\par // Select the item +\par TreeView_SelectDropTarget ( hWndTreeView, hTarget ); +\par // Show the drag image +\par ImageList_DragShow ( TRUE ); +\par \} +\par \} +\par break; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Step 3: Once the user lets go of the mouse button, it is time to take two actions: clean up the drag operation and do something in response to the user dropping. Cleaning up is easy. Simply release mouse capture, call that ImageList_EndDrag API, and clean up the Image List. The more complex part is where your program does something with the drag-and-drop operation. +\par First, get the drop item using the same TreeView_HitTest method you used to handle the WM_MOUSEMOVE message in Step 2. Then, check to see if the handle to the drag item you cached away in Step 1 can be dropped. If so, you can do the operation. The sample code is brain-dead; it will just blindly drag and drop any item anywhere. +\par To move an item around, delete it and then add it back. To delete an item, use the (brace yourself) TreeView_DeleteItem macro. To add it back, just use the TreeView_InsertItem macro. To automatically fill out the TV_ITEM structure, use the TreeView_GetItem macro. See the code in Figure 32 for the brain-dead drag-and-drop implementation. +\par \plain\f6\fs18\b Figure 32 Step 3 of TreeView Drag-and-drop\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 case WM_LBUTTONUP: +\par +\par if (bDragging) +\par \{ +\par HTREEITEM hTarget; // Item under mouse +\par TV_HITTESTINFO tvht; // Used for hit testing +\par TV_ITEM tvi; // Temporary Item +\par TV_INSERTSTRUCT tvIns; // Insert struct +\par char szBuffer[256]; // Item text buffer +\par +\par // Clear any drop highlights on the TreeView +\par TreeView_SelectDropTarget ( hWndTreeView, NULL ); +\par // End the drag +\par ImageList_EndDrag(); +\par // Bring back the cursor +\par ShowCursor ( TRUE ); +\par // Release the mouse capture +\par ReleaseCapture(); +\par // Clear the drag flag +\par bDragging = FALSE; +\par // Clean up the image list object +\par ImageList_Destroy ( hDragImage ); +\par hDragImage = NULL; +\par +\par // Fill out hit test struct with mouse pos +\par +\par tvht.pt.x = LOWORD (lParam); +\par tvht.pt.y = HIWORD (lParam); +\par +\par // Check to see if an item lives under the mouse +\par +\par if ( hTarget = TreeView_HitTest +\par ( +\par hWndTreeView, // This is the global variable +\par &tvht +\par ) +\par ) +\par \{ +\par // If we made it here, then we need to move the item. +\par // First, we will fetch it +\par +\par tvi.mask = TVIF_HANDLE | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE ; +\par tvi.hItem = hDragItem; +\par tvi.pszText = szBuffer; +\par tvi.cchTextMax = sizeof(szBuffer); +\par +\par TreeView_GetItem ( hWndTreeView, &tvi ); +\par +\par // Now, figure the new place to put it +\par +\par tvIns.hParent = TreeView_GetParent ( hWndTreeView, hTarget ); +\par tvIns.hInsertAfter = hTarget; +\par +\par // Nix the handle flag, since we will get a new handle +\par // for this item +\par +\par tvi.mask &= ~TVIF_HANDLE; +\par +\par tvIns.item = tvi; +\par +\par // Delete old item +\par +\par TreeView_DeleteItem ( hWndTreeView, hDragItem ); +\par +\par // Add new item (if your app tracks the handles of +\par // the items, you want to use the return value +\par // of this function). +\par +\par TreeView_InsertItem ( hWndTreeView, &tvIns ); +\par \} +\par +\par \} +\par break; +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 TreeView Querying +\par The TreeView control exposes almost every tidbit of information you can think of. I've already used a few of them in the above samples, such as TreeView_GetParent, TreeView_GetEditControl, and TreeView_HitTest. Figure 33 lists all of the query macros with a short explanation of each. For more information, check out the docs supplied with the Chicago beta SDK or look in COMMCTRL.H. +\par \plain\f6\fs18\b Figure 33 TreeView Query Macros\plain\f6\fs18 +\par +\par \pard\plain\f6\fs18 Macro\tab Result +\par TreeView_GetItemRect(hwnd, hitem, prc, code)\tab Gets the bounding rect in client coordinates of the item. Code is TRUE or FALSE.TRUE means the bounding rect of the item's text only, FALSE means the entire width of the TreeView control. +\par TreeView_GetCount(hwnd)\tab Counts the number of items in the TreeView +\par TreeView_GetIndent(hwnd)\tab Returns the indent amount, in pixels +\par TreeView_GetImageList(hwnd, iImage)\tab Returns the handle to the current Image List +\par TreeView_GetNextItem(hwnd, hitem, code)\tab Returns the handle to an item, depening on the code. However, there are macros that eliminate the need to use this macro (such as the TreeView_GetChild macro, which is actually a flavor of TreeView_GetNextItem). +\par TreeView_GetChild(hwnd, hitem)\tab Returns the handle to the first child item of a node. +\par TreeView_GetNextSibling(hwnd, hitem)\tab Returns the handle to the next sibling item +\par TreeView_GetPrevSibling(hwnd, hitem)\tab Returns the handle to the previous sibling +\par TreeView_GetParent(hwnd, hitem)\tab Returns the handle to the parent node of an item +\par TreeView_GetFirstVisible(hwnd)\tab Returns the handle of the first visible item +\par TreeView_GetNextVisible(hwnd, hitem)\tab Returns the handle of the next item, if it is visible. Otherwise returns NULL. +\par TreeView_GetPrevVisible(hwnd, hitem)\tab Returns the handle of the previous item, if it is visible. Otherwise returns NULL. +\par TreeView_GetSelection(hwnd)\tab Returns the handle to the currently selected item. +\par TreeView_GetDropHilight(hwnd)\tab Returns the handle to the currently drop-highlighted selection. +\par TreeView_GetRoot(hwnd)\tab Returns the handle to the first root node. +\par TreeView_GetItem(hwnd, pitem)\tab Fills a TV_ITEM structure from the TreeView, indicated by the hItem field. +\par TreeView_GetEditControl(hwnd)\tab Returns the handle to the in-place edit control during a Label Edit session. +\par TreeView_GetVisibleCount(hwnd)\tab Returns the number of items that are visible. +\par TreeView_HitTest(hwnd, lpht)\tab Returns the item under the coordinates specified by the TV_HITTESTINFO structure. +\par \pard\li180\ri240\plain\f6\fs18 Finally, every control has some oddball functions that get lumped together into a big bowl of API oatmeal. Figure 34 showcases these macros, and explains what they do. +\par \plain\f6\fs18\b Figure 34 TreeView Miscellaneous Macros\plain\f6\fs18 +\par +\par \pard\plain\f6\fs18 Macro\tab Result +\par TreeView_Select(hwnd, hitem, code)\tab Selects a specified item in the TreeView +\par TreeView_SelectItem(hwnd, hitem)\tab Selects the item with the caret in the TreeView +\par TreeView_SortChildren(hwnd, hitem, recurse)\tab Sorts the items in a branch of the TreeView +\par TreeView_EnsureVisible(hwnd, hitem)\tab Makes sure that an item is visible, by either expanding the parent node and/or scrolling the item into view. +\par TreeView_SortChildrenCB(hwnd, psort, recurse)\tab Sorts the children using a callback function. Read the docs for more information about this. +\par TreeView_EditLabel(hwnd, hitem)\tab Starts an in-place edit session on an item programatically. +\par \pard\li180\ri240\plain\f6\fs18 The Mother of All Samples +\par Well, this is it. You have been reading this article for hours, days, perhaps months, and all you really wanted was just a sample program to go cut and paste from. The TREEVIEW.EXE sample program builds a TreeView control that uses an Image List. The items inside the TreeView are roller coasters, such as the Coney Island Cyclone. When the sample app starts up, the TreeView is filled with a list of some of the coasters in the states of California, Ohio, and New York. You can expand or collapse the list, and pretend you are ACME Roller Coaster Relocation, Inc., and drag-and-drop the coasters from state to state. Also, the I_IMAGECALLBACK feature is used to display a different folder for the open and closed State nodes (when a state is closed, there is a little plus sign in it; when it is open, there is a piece of cheese, since this is such a cheesy example). Different images are used for the selected and non-selected coaster names. A normal coaster rider is displayed when the item is non-selected; when the coaster is selected, the rider is taking a plunge down the first gut-wrenching drop and losing their hat. +\par Also, label editing works, so you can change the name of a roller coaster (but not the name of a state), in case you want to rename one to "Bitchin Camaro Cool Coaster." +\par So without further ado, let me explain the code. As with the Image List sample program, this TREEVIEW program is a derivative of GENERIC, with all code changes bracketed by NEW CODE START and NEW CODE END comment blocks. +\par The initialization of the TreeView control happens in the Sample_Init function. Here the InitCommonControls API is called to make the TreeView class available to this application. Next, the Image List for the TreeView is created from scratch, and a bunch of icons from the resource file are added. The return values from the ImageList_AddIcon API are stored away in global variables, since the program will use these image numbers all over the place. Then the TreeView control is created with CreateWindow, and upon success, it is filled with exciting coaster data. +\par The FillTreeView function involves a few helper functions. The iNumCoasters function simply grabs the string from the string table in TREEVIEW.STR and uses that number to determine how many items to add to the TreeView. Inside the loop in FillTreeView, the FindOrAddTreeViewItem function is called for each node level, starting with the root node and working deeper. This method adds new nodes as needed, always returning a handle to a node for adding the next deeper level. +\par The FindOrAddTreeViewItem function may call the AddTreeViewItem function, which simply fills out the appropriate structures and calls the TreeView_InsertItem macro. When adding items to the TreeView control, the lParam field of the TV_ITEM structure identifies the type of item. If this program were written in C++, I'd put the this pointer in lParam. +\par Since the topmost state nodes are created using the I_IMAGECALLBACK constants, the parent window of the TreeView will receive a WM_NOTIFY message with the TVN_GETDISPINFO message. The code to handle this lives in WndProc; it looks at the state of the item and fills out the appropriate images to use on-the-fly. This is how the plus sign and block of cheese images are used for the states. +\par Since I created the TreeView control with the TVS_EDITLABELS style bit, a WM_NOTIFY message is sent to the TreeView's parent window whenever the user clicks a selected item. The TVN_BEGINLABELEDIT code checks to see if the item the user clicked on is a coaster item. If it is, then label editing is allowed. +\par Once the user is finished editing the label, he or she presses Enter or the Esc key to accept or chuck edits. In both cases, you will get the WM_NOTIFY message with the TVN_ENDLABELEDIT code. If the user pressed Esc, the pszText pointer in the TV_DISPINFO field will be NULL; otherwise it will contain a pointer to the string the user just typed in. +\par Since this program blindly accepts all edits, the TreeView_SetItem macro is used to update the text in the item. When you receive the WM_NOTIFY:TVN_LABELEDIT message, the item field in the TV_DISPINFO field is already filled out with the item's attributes for you; you simply need to change the attributes you care about. +\par And finally, the drag-and-drop is handled in the three-step process described above. The WM_NOTIFY message is sent with the TVN_BEGINDRAG code, and the program dutifully checks to make sure the user is only moving coasters around. If this test passes, then the TreeView_CreateDragImage macro is called to initiate the drag-and-drop process. The rest of the code in the TVN_BEGINDRAG block is frighteningly similar to the WM_LBUTTONDOWN code from the IMAGELST sample program. +\par As the user drags the object around, the WM_MOUSEMOVE code in WndProc checks to see if the user is dragging over a valid object. If so, the TreeView_SelectDropTarget macro is called to provide the user some feedback. +\par Finally, when the user finally drops the object, the code in WM_LBUTTONUP does the grunt job of moving the item around by deleting it and adding it back in. +\par TreeView Summary +\par Wow, what an E-ticket ride! The TreeView control is a very powerful control that really does make it easy to accomplish many of your hierarchical list box programming goals. The new WM_NOTIFY message makes for a much more elegant way of handling the myriad of notifications associated with the TreeView control. Besides, the TreeView combined with the Image List makes for one really trick-looking user interface. +\par Challenge! +\par Modify the TREEVIEW sample program to do all of the following: +\par \pard\li540\ri240\fi-360\plain\f6\fs18 \'b7\tab Only allow coasters to be dropped onto the right type (that is, only allow wooden coasters to be dropped in lists of wooden coasters). +\par \'b7\tab Prompt the user if they really want to move the coaster in the form: "Do you really want to move the Coney Island Cyclone from New York to Ohio?" +\par \'b7\tab Position the in-place edit control so that it is vertically centered over the label being edited, to look nicer (hint: get the edit control handle and use TreeView_GetItemRect to figure out the parameters for SetWindowPos). +\par \'b7\tab The first correct entry we recieve will receive their choice of the following: +\par \'b7\tab A Star Wars Millennium Falcon plastic model kit (some assembly required). +\par \'b7\tab A "Coney Island Cyclone" roller coaster T-shirt (please specify size and preferred color). +\par \'b7\tab Their name mentioned in a truly humiliating fashion in the next MSJ Editor's Note. +\par \pard\plain\f6\fs18 +\par \pard\li180\ri240\plain\f6\fs18 Please send a ZIP file containing a completely compilable program, with makefiles and everything. We will not run any submitted EXE files; they must compile without warnings at -W3 (we will run the ones we can compile). Send the ZIP file to 76100,543 on CompuServe or on disk to Challenge!, MSJ, 825 Eighth Ave., 18th Floor, New York, NY 10019. +\par Contest expires July 1, 1994; after that the winning entry will be placed on the MSJ bulletin board. In case of dispute, decision of MSJ editors is final. +\par \plain\f6\fs18\b Cyclone Roller Coaster at Astroland Amusement Park, Coney Island\plain\f6\fs18 +\par coaster.bmp +\par For Further Information: +\par Cyclone Roller Coaster at +\par Astroland Amusement Park, Coney Island +\par 1000 Surf Avenue +\par Brooklyn, New York 11224 +\par \plain\f6\fs18\i This article is reproduced from \plain\f6\fs18 Microsoft Systems Journal\plain\f6\fs18\i . Copyright \plain\f6\fs18 \'a9\plain\f6\fs18\i 1994 by Miller Freeman, Inc. All rights are reserved. No part of this article may be reproduced in any fashion (except in brief quotations used in critical articles and reviews) without the prior consent of Miller Freeman.\plain\f6\fs18 +\par \plain\f6\fs18\i To contact Miller Freeman regarding subscription information, call (800) 666-1084 in the U.S., or (303) 447-9330 in all other countries. For other inquiries, call (415) 358-9500.\plain\f6\fs18 +\par \pard\li180\plain\f6\fs18 +\par \pard\plain\f6\fs18 +\par +\par +\par } + \ No newline at end of file diff --git a/imagelst/IMAGELST.BAK b/imagelst/IMAGELST.BAK new file mode 100644 index 0000000..e244f20 --- /dev/null +++ b/imagelst/IMAGELST.BAK @@ -0,0 +1,128 @@ +#include +#include +#include +#include +#include +#include + +ImageList::ImageList(HINSTANCE hProcessInstance,const String &bitmapName,DWORD widthImage,RGBColor maskColor,DWORD growthFactor) +: mhImageList(0), mhProcessInstance(hProcessInstance) +{ + mhImageList=::ImageList_LoadBitmap(hProcessInstance,bitmapName,widthImage,growthFactor,maskColor); +} + +ImageList &ImageList::operator=(HIMAGELIST hImageList) +{ + destroyImageList(); + mhImageList=hImageList; + return *this; +} + +ImageList &ImageList::operator=(const ImageList &someImageList) +{ + DWORD sourceImageListEntries; + Point imageDimensions; + ImageType imageType; + + if(!mhProcessInstance)return *this; + if(someImageList.isOkay()&&(0!=(sourceImageListEntries=someImageList.size()))) + { + someImageList.imageDimensions(imageDimensions); + imageType=someImageList.imageType(); + if(createImageList(imageDimensions.x(),imageDimensions.y(),imageType)) + { + for(DWORD itemIndex=0;itemIndex +#include +#include +#include +#include +#include + +ImageList::ImageList(HINSTANCE hProcessInstance,const String &bitmapName,DWORD widthImage,RGBColor maskColor,DWORD growthFactor) +: mhImageList(0), mhProcessInstance(hProcessInstance) +{ + mhImageList=::ImageList_LoadBitmap(hProcessInstance,bitmapName,widthImage,growthFactor,maskColor); +} + +ImageList &ImageList::operator=(HIMAGELIST hImageList) +{ + destroyImageList(); + mhImageList=hImageList; + return *this; +} + +ImageList &ImageList::operator=(const ImageList &someImageList) +{ + DWORD sourceImageListEntries; + Point imageDimensions; + ImageType imageType; + + if(!mhProcessInstance)return *this; + if(someImageList.isOkay()&&(0!=(sourceImageListEntries=someImageList.size()))) + { + someImageList.imageDimensions(imageDimensions); + imageType=someImageList.imageType(); + if(createImageList(imageDimensions.x(),imageDimensions.y(),imageType)) + { + for(DWORD itemIndex=0;itemIndex + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/imagelst/IMAGELST.HPP b/imagelst/IMAGELST.HPP new file mode 100644 index 0000000..2169adf --- /dev/null +++ b/imagelst/IMAGELST.HPP @@ -0,0 +1,205 @@ +#ifndef _IMAGELIST_IMAGELIST_HPP_ +#define _IMAGELIST_IMAGELIST_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif + +class GDIPoint; +class Point; +class PureBitmap; +class PureDevice; +class PureIcon; +class String; +class ImageInfo; + +class ImageList +{ +public: + enum ImageType{ImageMasked=0x0000,ImageUnMasked=0x0001}; + enum DrawFlag{DrawNormal=ILD_NORMAL,DrawTransparent=ILD_TRANSPARENT,DrawMask=ILD_MASK, + DrawImage=ILD_IMAGE,DrawBlend25=ILD_BLEND25,DrawBlend50=ILD_BLEND50, + DrawOverlayMask=ILD_OVERLAYMASK}; + ImageList(HINSTANCE hProcessInstance=(HINSTANCE)0); + ImageList(HIMAGELIST hImageList,HINSTANCE hProcessInstance=(HINSTANCE)0,ImageType imageType=ImageUnMasked); + ImageList(const ImageList &someImageList); + ImageList(HINSTANCE hProcessInstance,const String &bitmapName,DWORD widthImage,RGBColor maskColor=RGBColor(),DWORD growthFactor=1); + ImageList(HINSTANCE hProcessInstance,DWORD widthImage,DWORD heightImage,ImageType imageType=ImageUnMasked,DWORD initialCount=0,DWORD growthFactor=1); + virtual ~ImageList(); + ImageList &operator=(const ImageList &someImageList); + ImageList &operator=(HIMAGELIST hImageList); + WORD operator==(const ImageList &someImageList); + operator HIMAGELIST(void); + WORD insertImage(HBITMAP hBitmap); + WORD insertImage(const PureBitmap &colorBitmap); + WORD insertImage(const PureBitmap &colorBitmap,const PureBitmap &maskBitmap); + WORD insertImage(const PureBitmap &colorBitmap,const RGBColor &maskColor); + WORD insertImage(PureIcon &somePureIcon); + WORD removeImage(DWORD itemIndex); + WORD replaceImage(DWORD itemIndex,const PureBitmap &colorBitmap,const PureBitmap &maskBitmap); + WORD replaceImage(DWORD itemIndex,PureIcon &somePureIcon); + BOOL beginDrag(DWORD itemIndex,const GDIPoint &dragPoint)const; + BOOL dragMove(const GDIPoint &dragPoint)const; + BOOL dragEnter(HWND hwndLock,const GDIPoint &imagePoint)const; + BOOL dragLeave(HWND hwndLock)const; + BOOL dragShowNoLock(BOOL showFlag)const; + BOOL setDragCursorImage(int itemIndex,const GDIPoint &hotSpot); + void endDrag(void)const; + DWORD size(void)const; + RGBColor setBkColor(RGBColor bkGndColor=RGBColor((COLORREF)CLR_NONE)); + RGBColor getBkColor(void)const; + WORD drawImage(PureDevice &somePureDevice,const Point &xyPoint,DWORD itemIndex,DrawFlag drawFlag=DrawNormal); + WORD setOverlayImage(DWORD itemIndex,DrawFlag drawFlag); + BOOL imageInfo(int itemIndex,ImageInfo &imageInfo); + WORD isOkay(void)const; +private: + ImageType imageType(void)const; + WORD imageDimensions(Point &imageDimensions)const; + HICON extractIcon(DWORD itemIndex)const; + void destroyImageList(void); + WORD createImageList(DWORD widthImage,DWORD heightImage,ImageType imageType=ImageUnMasked,DWORD initialCount=0,DWORD growthFactor=1); + + HIMAGELIST mhImageList; + HINSTANCE mhProcessInstance; + ImageType mImageType; +}; + +inline +ImageList::ImageList(HINSTANCE hProcessInstance) +: mhImageList(0), mImageType(ImageUnMasked), mhProcessInstance(hProcessInstance) +{ +} + +inline +ImageList::ImageList(HIMAGELIST hImageList,HINSTANCE hProcessInstance,ImageType imageType) +: mhImageList(hImageList), mhProcessInstance(hProcessInstance), mImageType(imageType) +{ +} + +inline +ImageList::ImageList(HINSTANCE hProcessInstance,DWORD widthImage,DWORD heightImage,ImageType imageType,DWORD initialCount,DWORD growthFactor) +: mhImageList(0), mImageType(ImageUnMasked), mhProcessInstance(hProcessInstance) +{ + createImageList(widthImage,heightImage,imageType,initialCount,growthFactor); +} + +inline +ImageList::ImageList(const ImageList &someImageList) +{ + *this=someImageList; +} + +inline +ImageList::~ImageList() +{ + destroyImageList(); +} + +inline +WORD ImageList::operator==(const ImageList &/*someImageList*/) +{ + return FALSE; +} + +inline +WORD ImageList::createImageList(DWORD widthImage,DWORD heightImage,ImageType imageType,DWORD initialCount,DWORD growthFactor) +{ + destroyImageList(); + mhImageList=::ImageList_Create(widthImage,heightImage,imageType,initialCount,growthFactor); + return isOkay(); +} + +inline +void ImageList::destroyImageList(void) +{ + if(!isOkay())return; + ::ImageList_Destroy(mhImageList); + mhImageList=0; +} + +inline +ImageList::operator HIMAGELIST(void) +{ + return mhImageList; +} + +inline +WORD ImageList::insertImage(HBITMAP hBitmap) +{ + if(!isOkay())return FALSE; + return ::ImageList_Add(mhImageList,hBitmap,0); +} + +inline +WORD ImageList::removeImage(DWORD itemIndex) +{ + if(!isOkay())return FALSE; + return ::ImageList_Remove(mhImageList,itemIndex); +} + +inline +DWORD ImageList::size(void)const +{ + if(!isOkay())return FALSE; + return ::ImageList_GetImageCount(mhImageList); +} + +inline +RGBColor ImageList::setBkColor(RGBColor bkGndColor) +{ + if(!isOkay())return RGBColor((COLORREF)0); + return RGBColor(::ImageList_SetBkColor(mhImageList,(COLORREF)bkGndColor)); +} + +inline +RGBColor ImageList::getBkColor(void)const +{ + if(!isOkay())return RGBColor((COLORREF)0); + return RGBColor(::ImageList_GetBkColor(mhImageList)); +} + +inline +WORD ImageList::setOverlayImage(DWORD itemIndex,DrawFlag drawFlag) +{ + if(!isOkay())return FALSE; + return ::ImageList_SetOverlayImage(mhImageList,itemIndex,(int)drawFlag); +} + +inline +ImageList::ImageType ImageList::imageType(void)const +{ + return mImageType; +} + +inline +HICON ImageList::extractIcon(DWORD itemIndex)const +{ + if(!isOkay())return FALSE; + return ::ImageList_ExtractIcon(mhProcessInstance,mhImageList,itemIndex); +} + +inline +void ImageList::endDrag(void)const +{ + if(!isOkay())return; + ::ImageList_EndDrag(); +} + +inline +BOOL ImageList::dragShowNoLock(BOOL showFlag)const +{ + if(!isOkay())return FALSE; + return ::ImageList_DragShowNolock(showFlag); +} + +inline +WORD ImageList::isOkay(void)const +{ + return (mhImageList?TRUE:FALSE); +} +#endif diff --git a/imagelst/IMAGELST.IDE b/imagelst/IMAGELST.IDE new file mode 100644 index 0000000..37acae9 Binary files /dev/null and b/imagelst/IMAGELST.IDE differ diff --git a/imagelst/IMAGELST.MAK b/imagelst/IMAGELST.MAK new file mode 100644 index 0000000..adf7e7b --- /dev/null +++ b/imagelst/IMAGELST.MAK @@ -0,0 +1,449 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=imagelst - Win32 Debug +!MESSAGE No configuration specified. Defaulting to imagelst - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "imagelst - Win32 Release" && "$(CFG)" !=\ + "imagelst - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Imagelst.mak" CFG="imagelst - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "imagelst - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "imagelst - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "imagelst - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "imagelst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Imagelst.lib" + +CLEAN : + -@erase "$(INTDIR)\Ftree.obj" + -@erase "$(INTDIR)\Imagelst.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Treeview.obj" + -@erase "$(OUTDIR)\Imagelst.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Imagelst.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Imagelst.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Imagelst.lib" +LIB32_OBJS= \ + "$(INTDIR)\Ftree.obj" \ + "$(INTDIR)\Imagelst.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Treeview.obj" + +"$(OUTDIR)\Imagelst.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "imagelst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msimglst.lib" + +CLEAN : + -@erase "$(INTDIR)\Ftree.obj" + -@erase "$(INTDIR)\Imagelst.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Treeview.obj" + -@erase "..\exe\msimglst.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/Imagelst.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Imagelst.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msimglst.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msimglst.lib" +LIB32_OBJS= \ + "$(INTDIR)\Ftree.obj" \ + "$(INTDIR)\Imagelst.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Treeview.obj" + +"..\exe\msimglst.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "imagelst - Win32 Release" +# Name "imagelst - Win32 Debug" + +!IF "$(CFG)" == "imagelst - Win32 Release" + +!ELSEIF "$(CFG)" == "imagelst - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Treeview.cpp + +!IF "$(CFG)" == "imagelst - Win32 Release" + +DEP_CPP_TREEV=\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\Tvkey.hpp"\ + {$(INCLUDE)}"\.\Tvmsghdr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Treeview.obj" : $(SOURCE) $(DEP_CPP_TREEV) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "imagelst - Win32 Debug" + +DEP_CPP_TREEV=\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\Tvkey.hpp"\ + {$(INCLUDE)}"\.\Tvmsghdr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Treeview.obj" : $(SOURCE) $(DEP_CPP_TREEV) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Imagelst.cpp +DEP_CPP_IMAGE=\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Imgeinfo.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Imagelst.obj" : $(SOURCE) $(DEP_CPP_IMAGE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "imagelst - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "imagelst - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftree.cpp + +!IF "$(CFG)" == "imagelst - Win32 Release" + +DEP_CPP_FTREE=\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\Tvkey.hpp"\ + {$(INCLUDE)}"\.\Tvmsghdr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Ftree.obj" : $(SOURCE) $(DEP_CPP_FTREE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "imagelst - Win32 Debug" + +DEP_CPP_FTREE=\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\Tvkey.hpp"\ + {$(INCLUDE)}"\.\Tvmsghdr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Ftree.obj" : $(SOURCE) $(DEP_CPP_FTREE) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/imagelst/IMAGELST.PLG b/imagelst/IMAGELST.PLG new file mode 100644 index 0000000..dfb2eb0 --- /dev/null +++ b/imagelst/IMAGELST.PLG @@ -0,0 +1,31 @@ + + +
+

Build Log

+

+--------------------Configuration: imagelst - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP2.tmp" with contents +[ +/nologo /MTd /GX /ZI /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp".\msvcobj/imagelst.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\imagelst\Ftree.cpp" +"D:\work\imagelst\Imagelst.cpp" +"D:\work\imagelst\Treeview.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP2.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\imagelst.lib" .\msvcobj\Ftree.obj .\msvcobj\Imagelst.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Treeview.obj " +

Output Window

+Compiling... +Ftree.cpp +Imagelst.cpp +Treeview.cpp +Creating library... + + + +

Results

+imagelst.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/imagelst/IMAGETST.APS b/imagelst/IMAGETST.APS new file mode 100644 index 0000000..1c1cc45 Binary files /dev/null and b/imagelst/IMAGETST.APS differ diff --git a/imagelst/IMAGETST.DSW b/imagelst/IMAGETST.DSW new file mode 100644 index 0000000..0af332c Binary files /dev/null and b/imagelst/IMAGETST.DSW differ diff --git a/imagelst/IMAGETST.IDE b/imagelst/IMAGETST.IDE new file mode 100644 index 0000000..074522e Binary files /dev/null and b/imagelst/IMAGETST.IDE differ diff --git a/imagelst/IMAGETST.MAK b/imagelst/IMAGETST.MAK new file mode 100644 index 0000000..00d8d25 --- /dev/null +++ b/imagelst/IMAGETST.MAK @@ -0,0 +1,1244 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=imagetst - Win32 Debug +!MESSAGE No configuration specified. Defaulting to imagetst - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "imagetst - Win32 Release" && "$(CFG)" !=\ + "imagetst - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Imagetst.mak" CFG="imagetst - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "imagetst - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "imagetst - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "imagetst - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "imagetst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Imagetst.exe" + +CLEAN : + -@erase "$(INTDIR)\Ftree.obj" + -@erase "$(INTDIR)\Imagelst.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Treeview.obj" + -@erase "$(OUTDIR)\Imagetst.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Imagetst.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Imagetst.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Imagetst.pdb" /machine:I386 /out:"$(OUTDIR)/Imagetst.exe" +LINK32_OBJS= \ + "$(INTDIR)\Ftree.obj" \ + "$(INTDIR)\Imagelst.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Treeview.obj" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\Imagetst.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "imagetst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Imagetst.exe" + +CLEAN : + -@erase "$(INTDIR)\Ftree.obj" + -@erase "$(INTDIR)\Imagelst.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Treeview.obj" + -@erase "$(OUTDIR)\Imagetst.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /G4 /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Imagetst.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib comctl32.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib winmm.lib comctl32.lib /nologo\ + /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386\ + /out:"$(OUTDIR)/Imagetst.exe" +LINK32_OBJS= \ + "$(INTDIR)\Ftree.obj" \ + "$(INTDIR)\Imagelst.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Treeview.obj" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\Imagetst.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "imagetst - Win32 Release" +# Name "imagetst - Win32 Debug" + +!IF "$(CFG)" == "imagetst - Win32 Release" + +!ELSEIF "$(CFG)" == "imagetst - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\main.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\Direct.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "imagetst - Win32 Release" + +!ELSEIF "$(CFG)" == "imagetst - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Treeview.cpp + +!IF "$(CFG)" == "imagetst - Win32 Release" + +DEP_CPP_TREEV=\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\tvmsghdr.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\common\notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Treeview.obj" : $(SOURCE) $(DEP_CPP_TREEV) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "imagetst - Win32 Debug" + +DEP_CPP_TREEV=\ + ".\Draginfo.hpp"\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\tvmsghdr.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\common\notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Treeview.obj" : $(SOURCE) $(DEP_CPP_TREEV) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Imagelst.cpp +DEP_CPP_IMAGE=\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Imagelst.obj" : $(SOURCE) $(DEP_CPP_IMAGE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "imagetst - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "imagetst - Win32 Debug" + +DEP_CPP_STDTM=\ + ".\Draginfo.hpp"\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ftree.cpp + +!IF "$(CFG)" == "imagetst - Win32 Release" + +DEP_CPP_FTREE=\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\tvmsghdr.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\common\notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Ftree.obj" : $(SOURCE) $(DEP_CPP_FTREE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "imagetst - Win32 Debug" + +DEP_CPP_FTREE=\ + ".\Draginfo.hpp"\ + {$(INCLUDE)}"\.\Ftree.hpp"\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Imagelst.hpp"\ + {$(INCLUDE)}"\.\Treeview.hpp"\ + {$(INCLUDE)}"\.\tvdisp.hpp"\ + {$(INCLUDE)}"\.\Tvinsert.hpp"\ + {$(INCLUDE)}"\.\Tvitem.hpp"\ + {$(INCLUDE)}"\.\tvmsghdr.hpp"\ + {$(INCLUDE)}"\assert.h"\ + {$(INCLUDE)}"\cderr.h"\ + {$(INCLUDE)}"\cguid.h"\ + {$(INCLUDE)}"\commctrl.h"\ + {$(INCLUDE)}"\commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\common\notify.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\dlgs.h"\ + {$(INCLUDE)}"\excpt.h"\ + {$(INCLUDE)}"\imm.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\mcx.h"\ + {$(INCLUDE)}"\memory.h"\ + {$(INCLUDE)}"\mmsystem.h"\ + {$(INCLUDE)}"\mswsock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\oaidl.h"\ + {$(INCLUDE)}"\objbase.h"\ + {$(INCLUDE)}"\objidl.h"\ + {$(INCLUDE)}"\ole.h"\ + {$(INCLUDE)}"\ole2.h"\ + {$(INCLUDE)}"\oleauto.h"\ + {$(INCLUDE)}"\oleidl.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\prsht.h"\ + {$(INCLUDE)}"\pshpack1.h"\ + {$(INCLUDE)}"\pshpack2.h"\ + {$(INCLUDE)}"\pshpack4.h"\ + {$(INCLUDE)}"\pshpack8.h"\ + {$(INCLUDE)}"\rpc.h"\ + {$(INCLUDE)}"\rpcdce.h"\ + {$(INCLUDE)}"\rpcdcep.h"\ + {$(INCLUDE)}"\rpcndr.h"\ + {$(INCLUDE)}"\rpcnsi.h"\ + {$(INCLUDE)}"\rpcnsip.h"\ + {$(INCLUDE)}"\rpcnterr.h"\ + {$(INCLUDE)}"\shellapi.h"\ + {$(INCLUDE)}"\stdarg.h"\ + {$(INCLUDE)}"\stdlib.h"\ + {$(INCLUDE)}"\string.h"\ + {$(INCLUDE)}"\unknwn.h"\ + {$(INCLUDE)}"\winbase.h"\ + {$(INCLUDE)}"\wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\windef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\winerror.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\winnetwk.h"\ + {$(INCLUDE)}"\winnls.h"\ + {$(INCLUDE)}"\winnt.h"\ + {$(INCLUDE)}"\winperf.h"\ + {$(INCLUDE)}"\winreg.h"\ + {$(INCLUDE)}"\winsock.h"\ + {$(INCLUDE)}"\winsock2.h"\ + {$(INCLUDE)}"\winspool.h"\ + {$(INCLUDE)}"\winsvc.h"\ + {$(INCLUDE)}"\winuser.h"\ + {$(INCLUDE)}"\winver.h"\ + {$(INCLUDE)}"\wtypes.h"\ + + +"$(INTDIR)\Ftree.obj" : $(SOURCE) $(DEP_CPP_FTREE) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/imagelst/IMAGETST.MDP b/imagelst/IMAGETST.MDP new file mode 100644 index 0000000..2dca86f Binary files /dev/null and b/imagelst/IMAGETST.MDP differ diff --git a/imagelst/IMAGETST.RC b/imagelst/IMAGETST.RC new file mode 100644 index 0000000..65dba4a --- /dev/null +++ b/imagelst/IMAGETST.RC @@ -0,0 +1,14 @@ +LIST BITMAP "STRIP.BMP" +CHIP3 BITMAP "CHIP.BMP" +CHIP ICON "CHIP.ICO" +HDD ICON "HDD.ICO" +FDD ICON "FDD.ICO" +MMEDIA ICON "MMEDIA.ICO" +CD ICON "CD.ICO" +BOLT ICON "BOLT.ICO" +SYSTEM ICON "SYSTEM.ICO" +DRILL ICON "DRILL.ICO" +DEVICE ICON "DEVICE.ICO" +CDROM ICON "CDROM.ICO" +CA ICON "CA.ICO" + diff --git a/imagelst/IMGEINFO.HPP b/imagelst/IMGEINFO.HPP new file mode 100644 index 0000000..05ffbcc --- /dev/null +++ b/imagelst/IMGEINFO.HPP @@ -0,0 +1,145 @@ +#ifndef _IMAGELIST_IMAGEINFO_HPP_ +#define _IMAGELIST_IMAGEINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif + +class ImageInfo : private _IMAGEINFO +{ +public: + ImageInfo(void); + ImageInfo(const ImageInfo &someImageInfo); + ~ImageInfo(); + ImageInfo &operator=(const ImageInfo &someImageInfo); + WORD operator==(const ImageInfo &someImageInfo)const; + operator _IMAGEINFO&(void); + HBITMAP colorBitmap(void)const; + HBITMAP maskBitmap(void)const; + DWORD planes(void)const; + DWORD bitsPerPixel(void)const; + Rect boundingRect(void)const; +private: + void colorBitmap(HBITMAP hbmColorBitmap); + void maskBitmap(HBITMAP hbmMaskBitmap); + void planes(DWORD planes); + void bitsPerPixel(DWORD bitsPerPixel); + void boundingRect(const Rect &boundingRect); +}; + +inline +ImageInfo::ImageInfo(void) +{ + colorBitmap(0); + maskBitmap(0); + planes(0); + bitsPerPixel(0); + boundingRect(Rect()); +} + +inline +ImageInfo::ImageInfo(const ImageInfo &someImageInfo) +{ + *this=someImageInfo; +} + +inline +ImageInfo::~ImageInfo() +{ +} + +inline +ImageInfo &ImageInfo::operator=(const ImageInfo &someImageInfo) +{ + colorBitmap(someImageInfo.colorBitmap()); + maskBitmap(someImageInfo.maskBitmap()); + planes(someImageInfo.planes()); + bitsPerPixel(someImageInfo.bitsPerPixel()); + boundingRect(someImageInfo.boundingRect()); + return *this; +} + +inline +WORD ImageInfo::operator==(const ImageInfo &someImageInfo)const +{ + return (colorBitmap()==someImageInfo.colorBitmap()&& + maskBitmap()==someImageInfo.maskBitmap()&& + planes()==someImageInfo.planes()&& + bitsPerPixel()==someImageInfo.bitsPerPixel()&& + boundingRect()==someImageInfo.boundingRect()); +} + +inline +ImageInfo::operator _IMAGEINFO&(void) +{ + return *this; +} + +inline +HBITMAP ImageInfo::colorBitmap(void)const +{ + return _IMAGEINFO::hbmImage; +} + +inline +void ImageInfo::colorBitmap(HBITMAP hbmColorBitmap) +{ + _IMAGEINFO::hbmImage=hbmColorBitmap; +} + +inline +HBITMAP ImageInfo::maskBitmap(void)const +{ + return _IMAGEINFO::hbmMask; +} + +inline +void ImageInfo::maskBitmap(HBITMAP hbmMaskBitmap) +{ + _IMAGEINFO::hbmMask=hbmMaskBitmap; +} + +inline +DWORD ImageInfo::planes(void)const +{ + return _IMAGEINFO::Unused1; +} + +inline +void ImageInfo::planes(DWORD planes) +{ + _IMAGEINFO::Unused1=planes; +} + +inline +DWORD ImageInfo::bitsPerPixel(void)const +{ + return _IMAGEINFO::Unused2; +} + +inline +void ImageInfo::bitsPerPixel(DWORD bitsPerPixel) +{ + _IMAGEINFO::Unused2=bitsPerPixel; +} + +inline +Rect ImageInfo::boundingRect(void)const +{ + return Rect(_IMAGEINFO::rcImage); +} + +inline +void ImageInfo::boundingRect(const Rect &boundingRect) +{ + _IMAGEINFO::rcImage.left=boundingRect.left(); + _IMAGEINFO::rcImage.top=boundingRect.top(); + _IMAGEINFO::rcImage.right=boundingRect.right(); + _IMAGEINFO::rcImage.bottom=boundingRect.bottom(); +} +#endif diff --git a/imagelst/LIST.BMP b/imagelst/LIST.BMP new file mode 100644 index 0000000..8af6547 Binary files /dev/null and b/imagelst/LIST.BMP differ diff --git a/imagelst/LIST2.BMP b/imagelst/LIST2.BMP new file mode 100644 index 0000000..373e1b6 Binary files /dev/null and b/imagelst/LIST2.BMP differ diff --git a/imagelst/LIST3.BMP b/imagelst/LIST3.BMP new file mode 100644 index 0000000..19b59d8 Binary files /dev/null and b/imagelst/LIST3.BMP differ diff --git a/imagelst/LIST4.BMP b/imagelst/LIST4.BMP new file mode 100644 index 0000000..6400d86 Binary files /dev/null and b/imagelst/LIST4.BMP differ diff --git a/imagelst/MAIN.CPP b/imagelst/MAIN.CPP new file mode 100644 index 0000000..5aba109 --- /dev/null +++ b/imagelst/MAIN.CPP @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hProcessInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hProcessInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + + if(Main::previousProcessInstance()) + { + HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); + if(!hWnd) + { + ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); + return FALSE; + } + ::PostMessage(hWnd,WM_REACTIVATE,0,0L); + return FALSE; + } + MainWindow applicationWindow(Main::processInstance()); + return applicationWindow.messageLoop(); +} + diff --git a/imagelst/MAIN.HPP b/imagelst/MAIN.HPP new file mode 100644 index 0000000..398445d --- /dev/null +++ b/imagelst/MAIN.HPP @@ -0,0 +1,67 @@ +#ifndef _IMAGELIST_MAIN_HPP_ +#define _IMAGELIST_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/imagelst/MAINWND.BAK b/imagelst/MAINWND.BAK new file mode 100644 index 0000000..978bc82 --- /dev/null +++ b/imagelst/MAINWND.BAK @@ -0,0 +1,51 @@ +#ifndef _IMAGELIST_MAINWINDOW_HPP_ +#define _IMAGELIST_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _IMAGELIST_FOLDERTREE_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(HINSTANCE hInstance); + ~MainWindow(); + static String className(void); +private: + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mTimerHandler; + Callback mCreateHandler; + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + FolderTree *mlpFolderTree; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif + + diff --git a/imagelst/MAINWND.CPP b/imagelst/MAINWND.CPP new file mode 100644 index 0000000..e237c1e --- /dev/null +++ b/imagelst/MAINWND.CPP @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include +#include + +char MainWindow::szClassName[]="Proto"; +char MainWindow::szMenuName[]=""; + +MainWindow::MainWindow(HINSTANCE hInstance) +: mPaintHandler(this,&MainWindow::paintHandler), + mDestroyHandler(this,&MainWindow::destroyHandler), + mCommandHandler(this,&MainWindow::commandHandler), + mKeyDownHandler(this,&MainWindow::keyDownHandler), + mSizeHandler(this,&MainWindow::sizeHandler), + mCreateHandler(this,&MainWindow::createHandler), + mTimerHandler(this,&MainWindow::timerHandler), + mhInstance(hInstance), mlpFolderTree(0) +{ + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_SIZEBOX|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,mhInstance,(LPSTR)this); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + if(mlpFolderTree){delete mlpFolderTree;mlpFolderTree=0;} + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)(COLOR_WINDOW+1); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +#define makeItemID(nodeType,itemID) MAKELPARAM(itemID,nodeType) + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + enum {RootID=0x0000}; + enum NodeType{NullNode=0x0000,ImportTerminalNode=0x0001,ExportTerminalNode=0x0002, + CodeTerminalNode=0x0003,DataTerminalNode=0x0004}; + + killTimer(0); + mlpFolderTree=new FolderTree(*this); + mlpFolderTree->addRootNode(FolderTree::FolderClosed,"Image Sections",makeItemID(NullNode,RootID)); + TreeViewItem firstItem(0,0,0,0,"foo",3,FolderTree::FolderClosed,FolderTree::FolderOpen,0,makeItemID(ImportTerminalNode,1)); + mlpFolderTree->addNode(TreeView::NodeChild,firstItem,"Image Sections"); + mlpFolderTree->appendNode(TreeView::NodeSibling,0,"section(foo)",0); + mlpFolderTree->appendNode(TreeView::NodeSibling,0,"section(bar)",0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + setTimer(0,250); + return (CallbackData::ReturnType)FALSE; +} + diff --git a/imagelst/MAINWND.HPP b/imagelst/MAINWND.HPP new file mode 100644 index 0000000..978bc82 --- /dev/null +++ b/imagelst/MAINWND.HPP @@ -0,0 +1,51 @@ +#ifndef _IMAGELIST_MAINWINDOW_HPP_ +#define _IMAGELIST_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _IMAGELIST_FOLDERTREE_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(HINSTANCE hInstance); + ~MainWindow(); + static String className(void); +private: + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mTimerHandler; + Callback mCreateHandler; + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + FolderTree *mlpFolderTree; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif + + diff --git a/imagelst/MMEDIA.ICO b/imagelst/MMEDIA.ICO new file mode 100644 index 0000000..5cf0243 Binary files /dev/null and b/imagelst/MMEDIA.ICO differ diff --git a/imagelst/NCB b/imagelst/NCB new file mode 100644 index 0000000..50e288d Binary files /dev/null and b/imagelst/NCB differ diff --git a/imagelst/NOTIFY.HPP b/imagelst/NOTIFY.HPP new file mode 100644 index 0000000..4cd916a --- /dev/null +++ b/imagelst/NOTIFY.HPP @@ -0,0 +1,132 @@ +#ifndef _IMAGELIST_NOTIFYMESSAGEHEADER_HPP_ +#define _IMAGELIST_NOTIFYMESSAGEHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif + +class NotifyMessageHeader : private NMHDR +{ +public: + NotifyMessageHeader(void); + NotifyMessageHeader(const NotifyMessageHeader &someNotifyMessageHeader); + NotifyMessageHeader(const NMHDR &someNMHDR); + virtual ~NotifyMessageHeader(); + NotifyMessageHeader &operator=(const NotifyMessageHeader &someNotifyMessageHeader); + NotifyMessageHeader &operator=(const NMHDR &someNMHDR); + WORD operator==(const NotifyMessageHeader &someNotifyMessageHeader)const; + WORD operator==(const NMHDR &someNMHDR)const; + operator NMHDR&(void); + HWND hwndFrom(void)const; + void hwndFrom(HWND hwndFrom); + UINT idFrom(void)const; + void idFrom(UINT idFrom); + UINT code(void)const; + void code(UINT code); +private: +}; + +inline +NotifyMessageHeader::NotifyMessageHeader(void) +{ + hwndFrom(0); + idFrom(0); + code(0); +} + +inline +NotifyMessageHeader::NotifyMessageHeader(const NotifyMessageHeader &someNotifyMessageHeader) +{ + *this=someNotifyMessageHeader; +} + +inline +NotifyMessageHeader::NotifyMessageHeader(const NMHDR &someNMHDR) +{ + *this=someNMHDR; +} + +inline +NotifyMessageHeader::~NotifyMessageHeader() +{ +} + +inline +NotifyMessageHeader &NotifyMessageHeader::operator=(const NotifyMessageHeader &someNotifyMessageHeader) +{ + hwndFrom(someNotifyMessageHeader.hwndFrom()); + idFrom(someNotifyMessageHeader.idFrom()); + code(someNotifyMessageHeader.code()); + return *this; +} + +inline +NotifyMessageHeader &NotifyMessageHeader::operator=(const NMHDR &someNMHDR) +{ + hwndFrom(someNMHDR.hwndFrom); + idFrom(someNMHDR.idFrom); + code(someNMHDR.code); + return *this; +} + +inline +WORD NotifyMessageHeader::operator==(const NotifyMessageHeader &someNotifyMessageHeader)const +{ + return (hwndFrom()==someNotifyMessageHeader.hwndFrom()&& + idFrom()==someNotifyMessageHeader.idFrom()&& + code()==someNotifyMessageHeader.code()); +} + +inline +WORD NotifyMessageHeader::operator==(const NMHDR &someNMHDR)const +{ + return (hwndFrom()==someNMHDR.hwndFrom&& + idFrom()==someNMHDR.idFrom&& + code()==someNMHDR.code); +} + +inline +NotifyMessageHeader::operator NMHDR&(void) +{ + return *this; +} + +inline +HWND NotifyMessageHeader::hwndFrom(void)const +{ + return NMHDR::hwndFrom; +} + +inline +void NotifyMessageHeader::hwndFrom(HWND hwndFrom) +{ + NMHDR::hwndFrom=hwndFrom; +} + +inline +UINT NotifyMessageHeader::idFrom(void)const +{ + return NMHDR::idFrom; +} + +inline +void NotifyMessageHeader::idFrom(UINT idFrom) +{ + NMHDR::idFrom=idFrom; +} + +inline +UINT NotifyMessageHeader::code(void)const +{ + return NMHDR::code; +} + +inline +void NotifyMessageHeader::code(UINT code) +{ + NMHDR::code=code; +} +#endif + diff --git a/imagelst/RELATION.HPP b/imagelst/RELATION.HPP new file mode 100644 index 0000000..ac89716 --- /dev/null +++ b/imagelst/RELATION.HPP @@ -0,0 +1,47 @@ +#ifndef _IMAGELST_RELATION_HPP_ +#define _IMAGELST_RELATION_HPP_ + +#ifdef _EXPAND_RELATION_TEMPLATES_ +#pragma option -Jgd +#endif + +template +class RContainer +{ + friend class Relation; + public: + T *item(void); + void item(T *lpItem); + RContainer *sibling(void); + void sibling(RContainer *lpSibling); + RContainer *parent(void); + void parent(RContainer *lpParent); + RContainer *child(void); + void child(RContainer *lpChild); + private: + RContainer *mlpSibling; + RContainer *mlpParent; + RContainer *mlpChild; + T *mlpItem; + RContainer(void); + ~RContainer(); +}; + +template +class Relation +{ +public: + Relation(void); + Relation(const Relation &someRelation); + virtual ~Relation(void); + void insert(const T &someItem,const T &insertAfter); + void remove(const T &someItem); + WORD find(T &someItem); + Relation &operator=(const Relation &someRelation); + WORD operator==(const Relation &someRelation)const; +private: + RContainer *Relation::searchChildDescend(RContainer *lpRContainer,T &someItem); + RContainer *Relation::searchSiblingDescend(RContainer *lpRContainer,T &someItem); + RContainer *mlpRContainer; +}; +#endif diff --git a/imagelst/RELATION.TPP b/imagelst/RELATION.TPP new file mode 100644 index 0000000..1202d4a --- /dev/null +++ b/imagelst/RELATION.TPP @@ -0,0 +1,156 @@ +#ifndef _IMAGELST_RELATION_HPP_ +#error relation.hpp must precede relation.tpp +#endif + +template +Relation::Relation(void) +: mlpRContainer(0) +{ +} + +template +Relation::Relation(const Relation &someRelation) +{ +} + +template +Relation::~Relation() +{ + if(mlpRContainer){delete mlpRContainer;mlpRContainer=0;} +} + +template +void Relation::insert(const T &someItem,const T &insertAfter) +{ +} + +template +void Relation::remove(const T &someItem) +{ +} + +template +WORD Relation::find(T &someItem) +{ + if(!mlpRContainer)return FALSE; + RContainer *lpParentNode(mlpRContainer); + + while(lpParentNode) + { + if(searchChildDescend(lpParentNode,someItem))return TRUE; + lpParentNode=lpParentNode->sibling(); + } + return FALSE; + +} + +template +Relation &Relation::operator=(const Relation &someRelation) +{ +} + +template +WORD Relation::operator==(const Relation &someRelation)const +{ +} + +template +RContainer *Relation::searchChildDescend(RContainer *lpRContainer,T &someItem) +{ + RContainer *lpParentNode(lpRContainer); + RContainer *lpSiblingNode(0); + + while(lpRContainer) + { + if(someItem==*(lpRContainer->item())){someItem=*lpRContainer->item();return lpRContainer;} + lpRContainer=lpRContainer->child(); + if(lpRContainer->sibling()) + { + lpSiblingNode=searchSiblingDescend(lpRContainer->sibling(),someItem); + if(lpSiblingNode)return lpSiblingNode; + } + } + return lpSiblingNode; +} + +template +RContainer *Relation::searchSiblingDescend(RContainer *lpRContainer,T &someItem) +{ + RContainer *lpParentNode(lpRContainer); + RContainer *lpChildNode(0); + + while(lpRContainer) + { + if(someItem==*(lpRContainer->item())){someItem=*(lpRContainer->item());return lpRContainer;} + lpRContainer=lpRContainer->sibling(); + if(lpRContainer->child()) + { + lpChildNode=searchChildDescend(lpRContainer->child(),someItem); + if(lpChildNode)return lpChildNode; + } + } + return lpChildNode; +} + +// Container methods + +template +RContainer::RContainer(void) +: mlpSibling(0), mlpParent(0), mlpChild(0), mlpItem(0) +{ +} + +template +RContainer::~RContainer() +{ + if(mlpItem){delete mlpItem;mlpItem=0;} +} + + +template +RContainer *RContainer::sibling(void) +{ + return mlpSibling; +} + +template +void RContainer::sibling(RContainer *lpSibling) +{ + mlpSibling=lpSibling; +} + +template +RContainer *RContainer::parent(void) +{ + return mlpParent; +} + +template +void RContainer::parent(RContainer *lpParent) +{ + mlpParent=lpParent; +} + +template +RContainer *RContainer::child(void) +{ + return mlpChild; +} + +template +void RContainer::child(RContainer *lpChild) +{ + mlpChild=lpChild; +} + +template +T *RContainer::item(void) +{ + return mlpItem; +} + +template +void RContainer::item(T *lpItem) +{ + mlpItem=lpItem; +} diff --git a/imagelst/SCRAPS.TXT b/imagelst/SCRAPS.TXT new file mode 100644 index 0000000..5158870 --- /dev/null +++ b/imagelst/SCRAPS.TXT @@ -0,0 +1,499 @@ + + WORD addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString); + WORD addSiblingNode(const TreeViewItem &someTreeViewItem,const String &parentString); + +WORD TreeView::addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString) +{ + HTREEITEM hParent(0); + HTREEITEM hTreeItem; + HTREEITEM hPrevItem; + HTREEITEM hChildItem; + String bufferString; + TreeViewInsert viewInsert; + TreeViewItem viewItem; + + bufferString.length(255); + hTreeItem=getChild(TVGN_ROOT); + while(hTreeItem) + { + hChildItem=getChild(hTreeItem); + if(hChildItem&&searchInsertChild(someTreeViewItem,viewInsert,parentString,hChildItem)) + { + insertItem(viewInsert); + return TRUE; + } + else + { + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(hTreeItem); + viewItem.text(bufferString); + getItem(viewItem); + if(parentString==viewItem.text()) + { + hParent=hTreeItem; + viewItem=TreeViewItem(); + viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + viewItem.text(someTreeViewItem.text()); + viewItem.image(someTreeViewItem.image()); + viewItem.selectedImage(someTreeViewItem.selectedImage()); + viewItem.lParam(someTreeViewItem.lParam()); + viewInsert.parent(hParent); + viewInsert.insertAfter(hPrevItem); + viewInsert.viewItem(viewItem); + insertItem(viewInsert); + return TRUE; + } + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return TRUE; +} + +WORD TreeView::addSiblingNode(const TreeViewItem &someTreeViewItem,const String &parentString) +{ + HTREEITEM hParent(0); + HTREEITEM hTreeItem; + HTREEITEM hPrevItem; + HTREEITEM hChildItem; + String bufferString; + TreeViewInsert viewInsert; + TreeViewItem viewItem; + + bufferString.length(255); + hTreeItem=getChild(TVGN_ROOT); + while(hTreeItem) + { + hChildItem=getChild(hTreeItem); + if(hChildItem&&searchInsertSibling(someTreeViewItem,viewInsert,parentString,hTreeItem,hChildItem)) + { + insertItem(viewInsert); + return TRUE; + } + else + { + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(hTreeItem); + viewItem.text(bufferString); + getItem(viewItem); + if(parentString==viewItem.text()) + { + hParent=hTreeItem; + viewItem=TreeViewItem(); + viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + viewItem.text(someTreeViewItem.text()); + viewItem.image(someTreeViewItem.image()); + viewItem.selectedImage(someTreeViewItem.selectedImage()); + viewItem.lParam(someTreeViewItem.lParam()); + viewInsert.parent(hParent); + viewInsert.insertAfter(hPrevItem); + viewInsert.viewItem(viewItem); + insertItem(viewInsert); + return TRUE; + } + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return TRUE; +} + + + + + + + + + + +WORD TreeView::searchInsertChild(TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent) +{ + WORD searchResult(FALSE); + HTREEITEM hPrevItem(FALSE); + HTREEITEM hTreeItem(hParent); + HTREEITEM hChildItem; + TreeViewItem searchItem; + String bufferString; + + bufferString.length(String::MaxString); + while(hTreeItem) + { + hChildItem=getChild(hTreeItem); + if(hChildItem&&searchInsertChild(viewItem,viewInsert,parentString,hChildItem)) + { + searchResult=TRUE; + break; + } + searchItem.mask(TreeViewItem::MaskText); + searchItem.item(hTreeItem); + searchItem.text(bufferString); + getItem(searchItem); + if(searchItem.text()==parentString) + { + viewInsert.parent(hTreeItem); + viewInsert.insertAfter(hPrevItem); + viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + viewInsert.viewItem(viewItem); + searchResult=TRUE; + break; + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return searchResult; +} + + +WORD TreeView::searchInsertSibling(TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent,HTREEITEM hChildItem) +{ + WORD searchResult(FALSE); + HTREEITEM hPrevItem(FALSE); + HTREEITEM hTreeItem(hChildItem); + HTREEITEM hChildNode; + TreeViewItem searchItem; + String bufferString; + + bufferString.length(String::MaxString); + while(hTreeItem) + { + hChildNode=getChild(hTreeItem); + if(hChildNode&&searchInsertSibling(viewItem,viewInsert,parentString,hTreeItem,hChildNode)) + { + searchResult=TRUE; + break; + } + searchItem.mask(TreeViewItem::MaskText); + searchItem.item(hTreeItem); + searchItem.text(bufferString); + getItem(searchItem); + if(searchItem.text()==parentString) + { + viewInsert.parent(hParent); + viewInsert.insertAfter(hPrevItem); + viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + viewInsert.viewItem(viewItem); + searchResult=TRUE; + break; + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return searchResult; +} + + + + + + + + +// mhTreeViewWnd=::CreateWindow("SysTreeView32","",WS_VISIBLE|WS_BORDER|WS_CHILD|viewFlags, +// winRect.left(),winRect.top(),winRect.right(),winRect.bottom(), +// parentWindow(),(HMENU)TreeViewID,TreeView::processInstance(),0); +// mhTreeViewWnd=::CreateWindowEx(WS_EX_CLIENTEDGE|WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR, +// "SysTreeView32","",WS_CHILD|WS_VISIBLE|TVS_HASBUTTONS|TVS_HASLINES|TVS_EDITLABELS, +// winRect.left(),winRect.top(),winRect.right(),winRect.bottom(), +// parentWindow(),(HMENU)TreeViewID,TreeView::processInstance(),0); +// ::UpdateWindow(mhTreeViewWnd); + + +WORD TreeView::addChildNode(const TreeViewItem &someTreeViewItem,const String &parentString) +{ + HTREEITEM hParent(0); + HTREEITEM hTreeItem; + HTREEITEM hPrevItem; + String bufferString; + + bufferString.length(255); + hTreeItem=getChild(TVGN_ROOT); + while(hTreeItem) + { + TreeViewItem viewItem; + + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(hTreeItem); + viewItem.text(bufferString); + getItem(viewItem); + + + + if(parentString==viewItem.text()) + { + hParent=hTreeItem; + while(hTreeItem){hPrevItem=hTreeItem;hTreeItem=getChild(hTreeItem);} + TreeViewInsert viewInsert; + viewItem=TreeViewItem(); + viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + viewItem.text(someTreeViewItem.text()); + viewItem.image(someTreeViewItem.image()); + viewItem.selectedImage(someTreeViewItem.selectedImage()); + viewItem.lParam(someTreeViewItem.lParam()); + viewInsert.parent(hParent); + viewInsert.insertAfter(hPrevItem); + viewInsert.viewItem(viewItem); + insertItem(viewInsert); + break; + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return TRUE; +} + + +WORD TreeView::searchInsert(const TreeItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParent) +{ + WORD searchResult(FALSE); + HTREEITEM hPrevItem(FALSE); + HTREEITEM hTreeItem(hParent); + TreeViewItem searchItem; + String bufferString; + + bufferString.length(String::MaxString); + while(hTreeItem) + { + searchItem.mask(TreeViewItem::MaskText); + searchItem.item(hTreeItem); + searchItem.text(bufferString); + getItem(searchItem); + if(searchItem.text()==parentString) + { + viewInsert.parent(hParent); + viewInsert.insertAfter(hPrevItem); + viewInsert.viewItem(viewItem); + searchResult=TRUE; + break; + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return searchResult; +} + + + + +#if 0 +WORD TreeView::addChildNode(DWORD indexImage,const String &textString,const String &parentString,DWORD userData) +{ + treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + treeViewItem.text(textString); + treeViewItem.image(indexImage); + treeViewItem.selectedImage(I_IMAGECALLBACK); + treeViewItem.lParam(userData); + treeViewInsert.parent(hParent); + treeViewInsert.insertAfter(hPrevItem); + treeViewInsert.viewItem(treeViewItem); + insertItem(treeViewInsert); + break; + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return TRUE; +} +#endif + +#if 0 +WORD TreeView::addChildNode(DWORD indexImage,const String &textString,const String &parentString,DWORD userData) +{ + HTREEITEM hParent(0); + HTREEITEM hTreeItem; + HTREEITEM hPrevItem; + String bufferString; + + bufferString.length(255); + hTreeItem=getChild(TVGN_ROOT); + while(hTreeItem) + { + TreeViewItem treeViewItem; + + treeViewItem.mask(TVIF_TEXT); + treeViewItem.item(hTreeItem); + treeViewItem.text(bufferString); + getItem(treeViewItem); + if(parentString==treeViewItem.text()) + { + hParent=hTreeItem; + while(hTreeItem) + { + hPrevItem=hTreeItem; + hTreeItem=getChild(hTreeItem); + } + TreeViewInsert treeViewInsert; + TreeViewItem treeViewItem; + treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + treeViewItem.text(textString); + treeViewItem.image(indexImage); + treeViewItem.selectedImage(I_IMAGECALLBACK); + treeViewItem.lParam(userData); + treeViewInsert.parent(hParent); + treeViewInsert.insertAfter(hPrevItem); + treeViewInsert.viewItem(treeViewItem); + insertItem(treeViewInsert); + break; + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return TRUE; +} +#endif + + + + +#if 0 +HTREEITEM FindOrAddTreeViewItem(HWND hWndTV,HTREEITEM hParent,int iImage,int iSelectedImage,LPSTR szText,LPARAM lParam) +{ + TV_ITEM tvItem; // Temporary item + HTREEITEM hItem; // Handle to item + HTREEITEM hPrevItem; // Handle to previous item + char szBuffer[256]; // Temporary buffer + + // Get the first child of the passed in parent + hItem=TreeView_GetChild(hWndTV,hParent); + // Loop through all children, looking for an already existing child. + while(hItem) + { + tvItem.mask= TVIF_TEXT; // We want the text + tvItem.hItem= hItem; // Indicate the item to fetch + tvItem.pszText=szBuffer; // Indicate the buffer + tvItem.cchTextMax=sizeof(szBuffer); // Indicate buffer's size + ::TreeView_GetItem(hWndTV,&tvItem); // Fetch, Rover! + + if(!lstrcmpi(tvItem.pszText,szText))return hItem; + hPrevItem=hItem; // Remember the last item, since the next line + // of code will eventually put a NULL in the + // hItem variable, and we want to know the + // last item under the parent in case we need + // to add a new item. + + // Get the next sibling item in the TreeView, if any. + hItem=::TreeView_GetNextSibling(hWndTV,hItem); + } + + // If we made it here, then the item needs to be added onto the end of the list + return AddTreeViewItem ( hWndTV, // Handle of TreeView + hParent, // Parent item + hPrevItem, // Last child in list (from above loop) + iImage, // These are the parameters + iSelectedImage,// passed into this + szText, // function. + lParam // + ); +} +#endif +#if 0 + + if (hWndTreeView) + { + TreeView_SetImageList ( hWndTreeView, hCoasterImageList, 0 ); + ImageList_SetBkColor ( hCoasterImageList, GetSysColor ( COLOR_WINDOW )); + FillTreeView ( hWndTreeView ); + } +} +#endif + +// enum StateFlags{StateFocused=TVIS_FOCUSED,StateSelected=TVIS_SELECTED, +// StateCut=TVIS_CUT,StateDropHilited=TVIS_DROPHILITED,StateBold=TVIS_BOLD, +// StateExpanded=TVIS_EXPANDED,StateExpandedOnce=TVIS_EXPANDEDONCE}; + + + +#if 0 + TreeViewInfo &treeViewInfo=((TreeViewInfo&)*((TreeViewInfo*)someCallbackData.lParam())); + TreeViewNotify &treeViewNotify=(*((TreeViewNotify*)someCallbackData.lParam())); + + if(TreeViewID==((NotifyMessageHeader&)treeViewInfo).idFrom()) + { + switch(((NotifyMessageHeader&)treeViewInfo).code()) + { + case TVN_SELCHANGING : + return tvnSelChanging(treeViewNotify); + case TVN_SELCHANGED : + return tvnSelChanged(treeViewNotify); + case TVN_GETDISPINFO : + return tvnGetDispInfo(treeViewInfo); + case TVN_SETDISPINFO : + return tvnSetDispInfo(treeViewInfo); + case TVN_ITEMEXPANDING : + return tvnItemExpanding(treeViewInfo); + case TVN_BEGINDRAG : + return tvnBeginDrag(treeViewNotify); + case TVN_BEGINRDRAG : + return tvnBeginRDrag(treeViewNotify); + case TVN_DELETEITEM : + return tvnDeleteItem(treeViewInfo); + case TVN_BEGINLABELEDIT : + return tvnBeginLabelEdit(treeViewInfo); + case TVN_ENDLABELEDIT : + return tvnEndLabelEdit(treeViewInfo); + case TVN_KEYDOWN : + return tvnKeyDown(treeViewInfo); + } + } +#endif + + + if(((TreeViewItem&)treeViewInfo).state()&TVIS_EXPANDED) + { + ((TreeViewItem&)treeViewInfo).image(FolderOpen); + ((TreeViewItem&)treeViewInfo).selectedImage(FolderOpen); + } + else + { + ((TreeViewItem&)treeViewInfo).image(FolderClosed); + ((TreeViewItem&)treeViewInfo).selectedImage(FolderClosed); + } + + +WNDPROC sOrigProc; +void subClass(HINSTANCE hProcessInstance); +__declspec(dllexport) LONG FAR PASCAL windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); +// ******************************************************************************** + +void subClass(HINSTANCE hProcessInstance) +{ + WNDCLASS wndClass; + ::GetClassInfo(0,"SysTreeView32",&wndClass); + wndClass.lpszClassName="SysTreeView32Sk"; + sOrigProc=wndClass.lpfnWndProc; + wndClass.lpfnWndProc=(WNDPROC)windowProcedure; + wndClass.hInstance=hProcessInstance; + ::RegisterClass(&wndClass); +} + +long FAR PASCAL windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) +{ + if(WM_RBUTTONUP==message)::MessageBeep(0); + return sOrigProc(hWnd,message,wParam,lParam); +} + + + +WORD TreeView::appendNode(NodeType nodeType,DWORD itemIndex,const String &text,DWORD userData,WORD selected) +{ + HTREEITEM hInsertItem; + TreeViewItem treeViewItem; + TreeViewInsert treeViewInsert; +// String workString; + +// workString=text; + treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + treeViewItem.text((LPSTR)(String&)text); + treeViewItem.maxText(text.length()); + treeViewItem.image(itemIndex); + treeViewItem.selectedImage(I_IMAGECALLBACK); + treeViewItem.lParam(userData); + if(NodeChild==nodeType)treeViewInsert.parent(mLastInsert.insertAfter()); + else treeViewInsert.parent(mLastInsert.parent()); + treeViewInsert.insertAfter(mLastInsert.insertAfter()); + treeViewInsert.viewItem(treeViewItem); + hInsertItem=insertItem(treeViewInsert); + if(!hInsertItem)return FALSE; + if(selected)selectItem(hInsertItem); + return (hInsertItem?TRUE:FALSE); +} diff --git a/imagelst/STATE.TXT b/imagelst/STATE.TXT new file mode 100644 index 0000000..345f491 --- /dev/null +++ b/imagelst/STATE.TXT @@ -0,0 +1,14 @@ +Table 3. Tree View Item States + +Item State Meaning + +TVIS_CUT The item is marked. +TVIS_DISABLED The item is disabled and is drawn using the standard disabled style and color. +TVIS_DROPHILITED The item is highlighted as a drag-and-drop target. +TVIS_EXPANDED The item's list of child items is currently expanded. +TVIS_EXPANDEDONCE The item's list of child items has been expanded at least once. +TVIS_FOCUSED The item has the focus and is drawn with the standard focus rectangle. +TVIS_OVERLAYMASK An overlay image is used as a mask with the item image. +TVIS_SELECTED The item is selected. +TVIS_USERMASK A user-defined mask is set. If you set the image to be a state image list, this mask will specify the indexes into the state image list and draw another image next to the normal item image. For example, you can use this state to put a check mark next to a tree view item image. +At any given time, the parent it diff --git a/imagelst/STDTMPL.BAK b/imagelst/STDTMPL.BAK new file mode 100644 index 0000000..abf66e9 --- /dev/null +++ b/imagelst/STDTMPL.BAK @@ -0,0 +1,25 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#define _EXPAND_RELATION_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef PureVector a; +typedef PureVector b; +typedef Block c; +typedef GlobalData e; +typedef Block f; +typedef Callback h; +#endif diff --git a/imagelst/STDTMPL.CPP b/imagelst/STDTMPL.CPP new file mode 100644 index 0000000..abf66e9 --- /dev/null +++ b/imagelst/STDTMPL.CPP @@ -0,0 +1,25 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#define _EXPAND_RELATION_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef PureVector a; +typedef PureVector b; +typedef Block c; +typedef GlobalData e; +typedef Block f; +typedef Callback h; +#endif diff --git a/imagelst/STRIP.BMP b/imagelst/STRIP.BMP new file mode 100644 index 0000000..68746ea Binary files /dev/null and b/imagelst/STRIP.BMP differ diff --git a/imagelst/SYSTEM.ICO b/imagelst/SYSTEM.ICO new file mode 100644 index 0000000..c659a6c Binary files /dev/null and b/imagelst/SYSTEM.ICO differ diff --git a/imagelst/TDCONFIG.TDW b/imagelst/TDCONFIG.TDW new file mode 100644 index 0000000..40ac47c Binary files /dev/null and b/imagelst/TDCONFIG.TDW differ diff --git a/imagelst/TDW.TRW b/imagelst/TDW.TRW new file mode 100644 index 0000000..bf16ab2 Binary files /dev/null and b/imagelst/TDW.TRW differ diff --git a/imagelst/TREEITEM.HPP b/imagelst/TREEITEM.HPP new file mode 100644 index 0000000..9674c41 --- /dev/null +++ b/imagelst/TREEITEM.HPP @@ -0,0 +1,12 @@ +#ifndef _IMAGELIST_HANDLETREE_HPP_ +#define _IMAGELIST_HANDLETREE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif + +typedef HTREEITEM HandleTreeItem; + +#endif \ No newline at end of file diff --git a/imagelst/TREEVIEW.BAK b/imagelst/TREEVIEW.BAK new file mode 100644 index 0000000..9faaa03 --- /dev/null +++ b/imagelst/TREEVIEW.BAK @@ -0,0 +1,453 @@ +#ifndef _IMAGELIST_TREEVIEW_HPP_ +#define _IMAGELIST_TREEVIEW_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _IMAGELIST_IMAGELIST_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWINSERT_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif + +class TreeViewMessageHeader; +class TreeViewDisplayInfo; +class GUIWindow; +class HitTestInfo; + +class TreeView : public WinHookProc +{ +public: + enum{ControlID=101}; + enum TreeFlags{TreeHasButtons=TVS_HASBUTTONS,TreeHasLines=TVS_HASLINES, + TreeLinesAtRoot=TVS_LINESATROOT,TreeEditLabels=TVS_EDITLABELS, + TreeDisableDragDrop=TVS_DISABLEDRAGDROP,TreeShowSelAlways=TVS_SHOWSELALWAYS}; + enum TreeExpand{Collapse=TVE_COLLAPSE,CollapseReset=TVE_COLLAPSERESET, + Expand=TVE_EXPAND,Toggle=TVE_TOGGLE}; + enum NodeType{NodeChild=0,NodeSibling=1}; + enum ListType{Normal=TVSIL_NORMAL,State=TVSIL_STATE}; + TreeView(GUIWindow &parentWindow,DWORD viewFlags=TreeHasLines,const Rect &winRect=Rect(1,1,320,200),int controlID=ControlID); + virtual ~TreeView(); + HIMAGELIST setImageList(ImageList &someImageList,WORD itemIndex=0); + HIMAGELIST createDragImage(HTREEITEM hTreeItem); + HTREEITEM addRootNode(DWORD indexImage,const String &textString,DWORD userData); + HWND getControlWnd(void)const; + HWND getEditControl(void)const; + String currentSelection(void)const; + String currentParentSelection(void)const; + String getRootItemText(void)const; + UINT getCount(void)const; + int controlID(void)const; + HTREEITEM getChild(HTREEITEM hTreeItem)const; + HTREEITEM getNextSibling(HTREEITEM hTreeItem)const; + HTREEITEM getParent(HTREEITEM hTreeItem)const; + HTREEITEM hitTest(HitTestInfo &someHitTestInfo)const; + HTREEITEM selectItem(HTREEITEM hTreeItem)const; + HTREEITEM selectDropTarget(HTREEITEM hTreeItem)const; + HTREEITEM insertItem(TreeViewInsert &someTreeViewInsert); + HIMAGELIST getImageList(ListType listType=Normal); + const TreeViewInsert &lastInsert(void)const; + WORD addNode(NodeType nodeType,TreeViewItem &insertTreeViewItem,const String &parentString,WORD selected=FALSE,BYTE delimeter=0); + WORD appendNode(NodeType nodeType,DWORD itemIndex,const String &text,DWORD userData,WORD selected=FALSE); + WORD moveTree(int left,int top,int right,int bottom,WORD repaint=TRUE)const; + WORD getItemRect(Rect &itemRect,BOOL boundingText=TRUE)const; + WORD getItemRect(Rect &itemRect,HTREEITEM hTreeItem,BOOL boundingText=TRUE)const; + WORD getItem(TreeViewItem &someTreeViewItem)const; + WORD setItem(const TreeViewItem &someTreeViewItem)const; + WORD remove(HTREEITEM hTreeItem)const; + WORD remove(const String &nodeName)const; + WORD setRedraw(WORD redrawFlag)const; + WORD setFocus(void)const; + WORD remove(void)const; + BOOL update(void)const; + BOOL invalidate(void)const; + WORD isOkay(void)const; +protected: + HTREEITEM getRoot(void)const; + virtual WORD tvnSelChanging(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnSelChanged(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnGetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnSetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnItemExpanding(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnItemExpanded(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginDrag(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginRDrag(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnDeleteItem(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnEndLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnKeyDown(const TreeViewMessageHeader &treeViewMessageHeader); +private: + CallbackData::ReturnType notifyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + WORD handleGetDisplayInfo(CallbackData &someCallackData); + void createTreeView(const Rect &winRect,DWORD viewFlags,int controlID); + HTREEITEM selectSetFirstVisible(HTREEITEM hTreeItem); + HTREEITEM getDropHilight(void); + HTREEITEM getSelection(void)const; + HTREEITEM searchItem(const String &searchString,HTREEITEM hDescendItem=(HTREEITEM)0)const; + HTREEITEM getFirstVisible(void); + HTREEITEM select(HTREEITEM hTreeItem,WPARAM code)const; + HTREEITEM getNextItem(HTREEITEM hTreeItem,WPARAM code)const; + HTREEITEM getPrevSibling(HTREEITEM hTreeItem); + HTREEITEM getNextVisible(HTREEITEM hTreeItem); + HTREEITEM getPrevVisible(HTREEITEM hTreeItem); + + WORD sortChildren(HTREEITEM hTreeItem,WPARAM recurse); + WORD expand(HTREEITEM hTreeItem,WPARAM code); + WORD getISearchString(String &searchString); + WORD searchInsert(NodeType nodeType,TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParentItem,HTREEITEM hChildItem,BYTE delimeter=0); + WORD ensureVisible(HTREEITEM hTreeItem); + WORD endEditLabelNow(WPARAM cancel); + WORD setIndent(WORD indent); + HWND getEditLabel(HTREEITEM hTreeItem); + UINT getVisibleCount(void); + UINT getIndent(void); + UINT indent(void); + void indent(UINT indent); + + Callback mNotifyHandler; + GUIWindow &mParentWindow; + HWND mhTreeViewWnd; + int mControlID; + TreeViewInsert mLastInsert; +}; + +inline +UINT TreeView::indent(void) +{ + if(!isOkay())return FALSE; + return (UINT)::SendMessage(mhTreeViewWnd,TVM_GETINDENT,0,0L); +} + +inline +void TreeView::indent(UINT indent) +{ + if(!isOkay())return; + ::SendMessage(mhTreeViewWnd,TVM_SETINDENT,(WPARAM)indent,0L); +} + +inline +HTREEITEM TreeView::insertItem(TreeViewInsert &someTreeViewInsert) +{ + HTREEITEM hTreeItem; + if(!isOkay())return FALSE; + hTreeItem=(HTREEITEM)::SendMessage(mhTreeViewWnd,TVM_INSERTITEM,0,(LPARAM)&((TV_INSERTSTRUCT&)someTreeViewInsert)); + if(hTreeItem){mLastInsert=someTreeViewInsert;mLastInsert.insertAfter(hTreeItem);} + return hTreeItem; +} + +inline +WORD TreeView::remove(HTREEITEM hTreeItem)const +{ + if(!isOkay())return FALSE; + return ::SendMessage(mhTreeViewWnd,TVM_DELETEITEM,0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::expand(HTREEITEM hTreeItem,WPARAM code) +{ + if(!isOkay())return FALSE; + return ::SendMessage(mhTreeViewWnd,TVM_EXPAND,(WPARAM)code,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +UINT TreeView::getCount(void)const +{ + if(!isOkay())return FALSE; + return (UINT)::SendMessage(mhTreeViewWnd,TVM_GETCOUNT,0,0L); +} + +inline +UINT TreeView::getIndent(void) +{ + if(!isOkay())return FALSE; + return (UINT)::SendMessage(mhTreeViewWnd,TVM_GETINDENT,0,0L); +} + +inline +WORD TreeView::setIndent(WORD indent) +{ + if(!isOkay())return FALSE; + return (WORD)::SendMessage(mhTreeViewWnd,TVM_SETINDENT,(WPARAM)indent,0L); +} + +inline +HIMAGELIST TreeView::getImageList(ListType listType) +{ + if(!isOkay())return FALSE; + return (HIMAGELIST)::SendMessage(mhTreeViewWnd,TVM_GETIMAGELIST,(WPARAM)listType,0L); +} + +inline +HIMAGELIST TreeView::setImageList(ImageList &someImageList,WORD indexImage) +{ + if(!isOkay()||!someImageList.isOkay())return FALSE; + return (HIMAGELIST)::SendMessage(mhTreeViewWnd,TVM_SETIMAGELIST,indexImage,(LPARAM)(HIMAGELIST)someImageList); +} + +inline +HTREEITEM TreeView::getNextItem(HTREEITEM hTreeItem,WPARAM code)const +{ + if(!isOkay())return FALSE; + return (HTREEITEM)::SendMessage(mhTreeViewWnd,TVM_GETNEXTITEM,(WPARAM)code,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +HTREEITEM TreeView::getChild(HTREEITEM hTreeItem)const +{ + return getNextItem(hTreeItem,TVGN_CHILD); +} + +inline +HTREEITEM TreeView::getNextSibling(HTREEITEM hTreeItem)const +{ + return getNextItem(hTreeItem,TVGN_NEXT); +} + +inline +HTREEITEM TreeView::getPrevSibling(HTREEITEM hTreeItem) +{ + return getNextItem(hTreeItem,TVGN_PREVIOUS); +} + +inline +HTREEITEM TreeView::getParent(HTREEITEM hTreeItem)const +{ + return getNextItem(hTreeItem,TVGN_PARENT); +} + +inline +HTREEITEM TreeView::getFirstVisible(void) +{ + return getNextItem(0,TVGN_FIRSTVISIBLE); +} + +inline +HTREEITEM TreeView::getNextVisible(HTREEITEM hTreeItem) +{ + return getNextItem(hTreeItem,TVGN_NEXTVISIBLE); +} + +inline +HTREEITEM TreeView::getPrevVisible(HTREEITEM hTreeItem) +{ + return getNextItem(hTreeItem,TVGN_PREVIOUSVISIBLE); +} + +inline +HTREEITEM TreeView::getSelection(void)const +{ + return getNextItem(0,TVGN_CARET); +} + +inline +HTREEITEM TreeView::getDropHilight(void) +{ + return getNextItem(0,TVGN_DROPHILITE); +} + +inline +HTREEITEM TreeView::getRoot(void)const +{ + return getNextItem(0,TVGN_ROOT); +} + +inline +HTREEITEM TreeView::select(HTREEITEM hTreeItem,WPARAM code)const +{ + if(!isOkay())return FALSE; + return (HTREEITEM)::SendMessage(mhTreeViewWnd,TVM_SELECTITEM,(WPARAM)code,(LPARAM)(HTREEITEM)(hTreeItem)); +} + +inline +HTREEITEM TreeView::selectItem(HTREEITEM hTreeItem)const +{ + return select(hTreeItem,TVGN_CARET); +} + +inline +HTREEITEM TreeView::selectDropTarget(HTREEITEM hTreeItem)const +{ + return select(hTreeItem,TVGN_DROPHILITE); +} + +inline +HTREEITEM TreeView::selectSetFirstVisible(HTREEITEM hTreeItem) +{ + return select(hTreeItem,TVGN_FIRSTVISIBLE); +} + +inline +WORD TreeView::getItem(TreeViewItem &someTreeViewItem)const +{ + if(!isOkay())return FALSE; + return (WORD)::SendMessage(mhTreeViewWnd,TVM_GETITEM,0,(LPARAM)&((TV_ITEM&)someTreeViewItem)); +} + +inline +WORD TreeView::setItem(const TreeViewItem &someTreeViewItem)const +{ + if(!isOkay())return FALSE; + return (WORD)::SendMessage(mhTreeViewWnd,TVM_SETITEM,0,(LPARAM)&((TV_ITEM&)(TreeViewItem&)someTreeViewItem)); +} + +inline +HWND TreeView::getEditLabel(HTREEITEM hTreeItem) +{ + if(!isOkay())return FALSE; + return (HWND)::SendMessage(mhTreeViewWnd,TVM_EDITLABEL,0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +HWND TreeView::getEditControl(void)const +{ + if(!isOkay())return FALSE; + return (HWND)::SendMessage(mhTreeViewWnd,TVM_GETEDITCONTROL,0,0L); +} + +inline +UINT TreeView::getVisibleCount(void) +{ + if(!isOkay())return FALSE; + return (UINT)::SendMessage(mhTreeViewWnd,TVM_GETVISIBLECOUNT,0,0L); +} + +inline +HIMAGELIST TreeView::createDragImage(HTREEITEM hTreeItem) +{ + if(!isOkay())return FALSE; + return (HIMAGELIST)::SendMessage(mhTreeViewWnd,TVM_CREATEDRAGIMAGE,0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::sortChildren(HTREEITEM hTreeItem,WPARAM recurse) +{ + if(!isOkay())return FALSE; + return ::SendMessage(mhTreeViewWnd,TVM_SORTCHILDREN,(WPARAM)recurse,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::ensureVisible(HTREEITEM hTreeItem) +{ + if(!isOkay())return FALSE; + return ::SendMessage(mhTreeViewWnd,TVM_ENSUREVISIBLE,(WPARAM)0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::endEditLabelNow(WPARAM cancel) +{ + if(!isOkay())return FALSE; + return ::SendMessage(mhTreeViewWnd,TVM_ENDEDITLABELNOW,(WPARAM)cancel,0L); +} + +inline +WORD TreeView::getISearchString(String &searchString) +{ + if(!isOkay())return FALSE; + return (WORD)::SendMessage(mhTreeViewWnd,TVM_GETISEARCHSTRING,0,(LPARAM)(LPSTR)searchString); +} + +inline +WORD TreeView::getItemRect(Rect &itemRect,BOOL boundingText)const +{ + if(!isOkay())return FALSE; + *((HTREEITEM*)&((RECT&)itemRect))=getSelection(); + return (WORD)::SendMessage(mhTreeViewWnd,TVM_GETITEMRECT,boundingText,(LPARAM)&((RECT&)itemRect)); +} + +inline +WORD TreeView::getItemRect(Rect &itemRect,HTREEITEM hTreeItem,BOOL boundingText)const +{ + if(!isOkay())return FALSE; + *((HTREEITEM*)&((RECT&)itemRect))=hTreeItem; + return (WORD)::SendMessage(mhTreeViewWnd,TVM_GETITEMRECT,boundingText,(LPARAM)&((RECT&)itemRect)); +} + +inline +WORD TreeView::setRedraw(WORD redrawFlag)const +{ + if(!isOkay())return FALSE; + return (WORD)::SendMessage(mhTreeViewWnd,WM_SETREDRAW,redrawFlag,0L); +} + +inline +BOOL TreeView::update(void)const +{ + if(!isOkay())return FALSE; + return ::UpdateWindow(mhTreeViewWnd); +} + +inline +BOOL TreeView::invalidate(void)const +{ + if(!isOkay())return FALSE; + return ::InvalidateRect(mhTreeViewWnd,0,FALSE); +} + +inline +WORD TreeView::moveTree(int left,int top,int right,int bottom,WORD repaint)const +{ + if(!isOkay())return FALSE; + return ::MoveWindow(mhTreeViewWnd,left,top,right,bottom,repaint); +} + +inline +WORD TreeView::setFocus(void)const +{ + if(!isOkay())return FALSE; + ::SetFocus(mhTreeViewWnd); + return TRUE; +} + +inline +WORD TreeView::remove(const String &nodeName)const +{ + if(!isOkay())return FALSE; + HTREEITEM hTreeItem(searchItem(nodeName)); + if(!hTreeItem)return FALSE; + return remove(hTreeItem); +} + +inline +const TreeViewInsert &TreeView::lastInsert(void)const +{ + return mLastInsert; +} + +inline +HWND TreeView::getControlWnd(void)const +{ + return mhTreeViewWnd; +} + +inline +int TreeView::controlID(void)const +{ + return mControlID; +} + +inline +WORD TreeView::isOkay(void)const +{ + return (mhTreeViewWnd?TRUE:FALSE); +} +#endif diff --git a/imagelst/TREEVIEW.CPP b/imagelst/TREEVIEW.CPP new file mode 100644 index 0000000..47933a8 --- /dev/null +++ b/imagelst/TREEVIEW.CPP @@ -0,0 +1,361 @@ +#include +#include +#include +#include +#include +#include + +TreeView::TreeView(GUIWindow &parentWindow,const Rect &winRect,int controlID,DWORD viewFlags) +: mParentWindow(parentWindow) //, mControlID(controlID) +{ + mNotifyHandler.setCallback(this,&TreeView::notifyHandler); + ::InitCommonControls(); + mParentWindow.insertHandler(VectorHandler::NotifyHandler,&mNotifyHandler); + createTreeView(winRect,viewFlags,controlID); +} + +TreeView::~TreeView() +{ + destroy(); + mParentWindow.removeHandler(VectorHandler::NotifyHandler,&mNotifyHandler); +} + + +void TreeView::createTreeView(const Rect &winRect,DWORD viewFlags,int controlID) +{ + createControl(WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR|WS_EX_CLIENTEDGE,WC_TREEVIEW,"",WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|viewFlags,winRect,mParentWindow,controlID); +} + +HTREEITEM TreeView::hitTest(HitTestInfo &someHitTestInfo)const +{ + if(!isOkay())return FALSE; + return (HTREEITEM)sendMessage(TVM_HITTEST,0,(LPARAM)&((TV_HITTESTINFO&)someHitTestInfo)); +} + +WORD TreeView::remove(void)const +{ + if(!isOkay())return FALSE; + if(!getCount())return TRUE; + sendMessage(TVM_DELETEITEM,0,(LPARAM)TVI_ROOT); + return !getCount(); +} + +CallbackData::ReturnType TreeView::rightButtonDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType TreeView::rightButtonUpHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType TreeView::notifyHandler(CallbackData &someCallbackData) +{ + NotifyMessageHeader nmHeader(*(((NMHDR*)someCallbackData.lParam()))); + if(controlID()==nmHeader.idFrom()) + { + switch(nmHeader.code()) + { + case TVN_SELCHANGING : + return tvnSelChanging(TreeViewMessageHeader(*(((NM_TREEVIEW*)someCallbackData.lParam())))); + case TVN_SELCHANGED : + return tvnSelChanged(TreeViewMessageHeader(*(((NM_TREEVIEW*)someCallbackData.lParam())))); + case TVN_GETDISPINFO : + return handleGetDisplayInfo(someCallbackData); + case TVN_SETDISPINFO : + return tvnSetDispInfo(TreeViewDisplayInfo(*(((TV_DISPINFO*)someCallbackData.lParam())))); + case TVN_ITEMEXPANDING : + return tvnItemExpanding(TreeViewMessageHeader(*(((NM_TREEVIEW*)someCallbackData.lParam())))); + case TVN_ITEMEXPANDED : + return tvnItemExpanded(TreeViewMessageHeader(*(((NM_TREEVIEW*)someCallbackData.lParam())))); + case TVN_BEGINDRAG : + return tvnBeginDrag(TreeViewMessageHeader(*(((NM_TREEVIEW*)someCallbackData.lParam())))); + case TVN_BEGINRDRAG : + return tvnBeginRDrag(TreeViewMessageHeader(*(((NM_TREEVIEW*)someCallbackData.lParam())))); + case TVN_DELETEITEM : + return tvnDeleteItem(TreeViewMessageHeader(*(((NM_TREEVIEW*)someCallbackData.lParam())))); + case TVN_BEGINLABELEDIT : + return tvnBeginLabelEdit(TreeViewDisplayInfo(*(((TV_DISPINFO*)someCallbackData.lParam())))); + case TVN_ENDLABELEDIT : + return tvnEndLabelEdit(TreeViewDisplayInfo(*(((TV_DISPINFO*)someCallbackData.lParam())))); + case TVN_KEYDOWN : + return tvnKeyDown(TreeViewKeyDown(*(((TV_KEYDOWN*)someCallbackData.lParam())))); + } + } + return (CallbackData::ReturnType)::DefWindowProc(someCallbackData.hwndFrom(),WM_NOTIFY,someCallbackData.wParam(),someCallbackData.lParam()); +} + +HTREEITEM TreeView::addRootNode(DWORD itemIndex,const String &text,DWORD userData) +{ + TreeViewItem treeViewItem; + TreeViewInsert treeViewInsert; + + treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + treeViewItem.text((LPSTR)(String&)text); + treeViewItem.maxText(text.length()); + treeViewItem.image(itemIndex); + treeViewItem.selectedImage(I_IMAGECALLBACK); + treeViewItem.lParam(userData); + treeViewInsert.parent(TVGN_ROOT); + treeViewInsert.insertAfter(TVGN_ROOT); + treeViewInsert.viewItem(treeViewItem); + return insertItem(treeViewInsert); +} + +WORD TreeView::appendNode(NodeType nodeType,DWORD itemIndex,const String &text,DWORD userData,WORD selected) +{ + HTREEITEM hInsertItem; + TreeViewItem treeViewItem; + TreeViewInsert treeViewInsert; + + treeViewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + treeViewItem.text((LPSTR)(String&)text); + treeViewItem.maxText(text.length()); + treeViewItem.image(itemIndex); + treeViewItem.selectedImage(I_IMAGECALLBACK); + treeViewItem.lParam(userData); + if(NodeChild==nodeType)treeViewInsert.parent(mLastInsert.insertAfter()); + else treeViewInsert.parent(mLastInsert.parent()); + treeViewInsert.insertAfter(mLastInsert.insertAfter()); + treeViewInsert.viewItem(treeViewItem); + hInsertItem=insertItem(treeViewInsert); + if(!hInsertItem)return FALSE; + if(selected)selectItem(hInsertItem); + return (hInsertItem?TRUE:FALSE); +} + +WORD TreeView::addNode(NodeType nodeType,TreeViewItem &insertTreeViewItem,const String &parentString,WORD selected,BYTE delimeter) +{ + HTREEITEM hTreeItem; + HTREEITEM hPrevItem; + HTREEITEM hChildItem; + String workString; + TreeViewInsert viewInsert; + TreeViewItem viewItem; + + workString.length(String::MaxString); + viewItem.maxText(workString.length()); + hTreeItem=getChild((HTREEITEM)TreeViewInsert::GetRoot); + while(hTreeItem) + { + hChildItem=getChild(hTreeItem); + if(hChildItem&&searchInsert(nodeType,insertTreeViewItem,viewInsert,parentString,hTreeItem,hChildItem,delimeter)) + { + HTREEITEM hInsertItem(insertItem(viewInsert)); + if(!hInsertItem)return FALSE; + if(selected)selectItem(hInsertItem); + return TRUE; + } + else + { + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(hTreeItem); + viewItem.text((LPSTR)workString); + getItem(viewItem); + if(parentString==String(viewItem.text()).betweenString(0,delimeter)) + { + String workString(insertTreeViewItem.text()); + viewItem=TreeViewItem(); + viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + viewItem.text((LPSTR)workString); + viewItem.maxText(workString.length()); + viewItem.image(insertTreeViewItem.image()); + viewItem.selectedImage(I_IMAGECALLBACK); + viewItem.lParam(insertTreeViewItem.lParam()); + viewInsert.parent(hTreeItem); + viewInsert.insertAfter(hPrevItem); + viewInsert.viewItem(viewItem); + HTREEITEM hInsertItem(insertItem(viewInsert)); + if(!hInsertItem)return FALSE; + if(selected)selectItem(hInsertItem); + return TRUE; + } + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return FALSE; +} + +HTREEITEM TreeView::searchItem(const String &searchString,HTREEITEM hDescendItem)const +{ + TreeViewItem viewItem; + String workString; + HTREEITEM hTreeItem; + HTREEITEM hChildItem; + + workString.length(String::MaxString); + viewItem.maxText(workString.length()); + if(!hDescendItem)hTreeItem=getChild((HTREEITEM)TreeViewInsert::GetRoot); + else hTreeItem=hDescendItem; + while(hTreeItem) + { + hChildItem=getChild(hTreeItem); + if(hChildItem) + { + HTREEITEM hFoundItem(searchItem(searchString,hChildItem)); + if(hFoundItem)return hFoundItem; + } + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(hTreeItem); + viewItem.text((LPSTR)workString); + getItem(viewItem); + if(searchString==viewItem.text())return hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return (HTREEITEM)0; +} + +WORD TreeView::searchInsert(NodeType nodeType,TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParentItem,HTREEITEM hChildItem,BYTE delimeter) +{ + WORD searchResult(FALSE); + HTREEITEM hPrevItem(FALSE); + HTREEITEM hTreeItem(hChildItem); + HTREEITEM hChildNode; + TreeViewItem searchItem; + String bufferString; + + bufferString.length(String::MaxString); + searchItem.maxText(bufferString.length()); + while(hTreeItem) + { + hChildNode=getChild(hTreeItem); + if(hChildNode&&searchInsert(nodeType,viewItem,viewInsert,parentString,hTreeItem,hChildNode,delimeter)) + { + searchResult=TRUE; + break; + } + searchItem.mask(TreeViewItem::MaskText); + searchItem.item(hTreeItem); + searchItem.text((LPSTR)bufferString); + getItem(searchItem); + if(parentString==delimeter?String(searchItem.text()).betweenString(0,delimeter):String(searchItem.text())) + { + viewItem.mask(TreeViewItem::MaskText|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskParam); + viewItem.selectedImage(I_IMAGECALLBACK); + if(NodeChild==nodeType)viewInsert.parent(hTreeItem); + else viewInsert.parent(hParentItem); + viewInsert.insertAfter(hPrevItem); + viewInsert.viewItem(viewItem); + searchResult=TRUE; + break; + } + hPrevItem=hTreeItem; + hTreeItem=getNextSibling(hTreeItem); + } + return searchResult; +} + +String TreeView::getRootItemText(void)const +{ + TreeViewItem viewItem; + String rootText; + + viewItem.maxText(String::MaxString); + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(getRoot()); + viewItem.text((LPSTR)rootText); + getItem(viewItem); + return rootText; +} + +String TreeView::currentSelection(void)const +{ + TreeViewItem viewItem; + String workString; + + workString.length(String::MaxString); + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(getSelection()); + viewItem.text(workString); + viewItem.maxText(workString.length()); + getItem(viewItem); + return (const char*)viewItem.text(); +} + +String TreeView::currentParentSelection(void)const +{ + TreeViewItem viewItem; + String workString; + + workString.length(String::MaxString); + viewItem.mask(TreeViewItem::MaskText); + viewItem.item(getParent(getSelection())); + viewItem.text(workString); + viewItem.maxText(workString.length()); + getItem(viewItem); + return (const char *)viewItem.text(); +} + +WORD TreeView::handleGetDisplayInfo(CallbackData &someCallbackData) +{ + WORD returnCode; + TreeViewDisplayInfo tvDispInfo(*((TV_DISPINFO*)someCallbackData.lParam())); + returnCode=tvnGetDispInfo(tvDispInfo); + *((TV_DISPINFO*)someCallbackData.lParam())=(TV_DISPINFO&)tvDispInfo; + return returnCode; +} + +// *******virtuals + +WORD TreeView::tvnSelChanging(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD TreeView::tvnSelChanged(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD TreeView::tvnGetDispInfo(TreeViewDisplayInfo &/*treeViewDisplayInfo*/) +{ + return FALSE; +} + +WORD TreeView::tvnSetDispInfo(TreeViewDisplayInfo &/*treeViewDisplayInfo*/) +{ + return FALSE; +} + +WORD TreeView::tvnItemExpanding(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD TreeView::tvnItemExpanded(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD TreeView::tvnBeginDrag(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD TreeView::tvnBeginRDrag(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD TreeView::tvnDeleteItem(const TreeViewMessageHeader &/*treeViewMessageHeader*/) +{ + return FALSE; +} + +WORD TreeView::tvnBeginLabelEdit(const TreeViewDisplayInfo &/*treeViewDisplayInfo*/) +{ + return FALSE; +} + +WORD TreeView::tvnEndLabelEdit(const TreeViewDisplayInfo &/*treeViewDisplayInfo*/) +{ + return FALSE; +} + +WORD TreeView::tvnKeyDown(const TreeViewKeyDown &/*treeViewMessageHeader*/) +{ + return FALSE; +} + diff --git a/imagelst/TREEVIEW.HPP b/imagelst/TREEVIEW.HPP new file mode 100644 index 0000000..98c308c --- /dev/null +++ b/imagelst/TREEVIEW.HPP @@ -0,0 +1,428 @@ +#ifndef _IMAGELIST_TREEVIEW_HPP_ +#define _IMAGELIST_TREEVIEW_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _IMAGELIST_IMAGELIST_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWINSERT_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif + +class TreeViewMessageHeader; +class TreeViewDisplayInfo; +class TreeViewKeyDown; +class GUIWindow; +class HitTestInfo; + +class TreeView : public Control +{ +public: + enum TreeFlags{TreeHasButtons=TVS_HASBUTTONS,TreeHasLines=TVS_HASLINES,TreeLinesAtRoot=TVS_LINESATROOT,TreeEditLabels=TVS_EDITLABELS,TreeDisableDragDrop=TVS_DISABLEDRAGDROP,TreeShowSelAlways=TVS_SHOWSELALWAYS}; + enum TreeExpand{Collapse=TVE_COLLAPSE,CollapseReset=TVE_COLLAPSERESET,Expand=TVE_EXPAND,Toggle=TVE_TOGGLE}; + enum NodeType{NodeChild=0,NodeSibling=1}; + enum ListType{Normal=TVSIL_NORMAL,State=TVSIL_STATE}; + TreeView(GUIWindow &parentWindow,const Rect &winRect,int controlID,DWORD viewFlags=TreeHasLines); + virtual ~TreeView(); + HIMAGELIST setImageList(ImageList &someImageList,WORD itemIndex=0); + HIMAGELIST createDragImage(HTREEITEM hTreeItem); + HTREEITEM addRootNode(DWORD indexImage,const String &textString,DWORD userData); + HWND getEditControl(void)const; + String currentSelection(void)const; + String currentParentSelection(void)const; + String getRootItemText(void)const; + UINT getCount(void)const; + HTREEITEM getRoot(void)const; + HTREEITEM getChild(HTREEITEM hTreeItem)const; + HTREEITEM getNextSibling(HTREEITEM hTreeItem)const; + HTREEITEM getParent(HTREEITEM hTreeItem)const; + HTREEITEM hitTest(HitTestInfo &someHitTestInfo)const; + HTREEITEM selectItem(HTREEITEM hTreeItem)const; + HTREEITEM selectRoot(void)const; + HTREEITEM selectDropTarget(HTREEITEM hTreeItem)const; + HTREEITEM insertItem(TreeViewInsert &someTreeViewInsert); + HTREEITEM searchItem(const String &searchString,HTREEITEM hDescendItem=(HTREEITEM)0)const; + HIMAGELIST getImageList(ListType listType=Normal); + const TreeViewInsert &lastInsert(void)const; + WORD addNode(NodeType nodeType,TreeViewItem &insertTreeViewItem,const String &parentString,WORD selected=FALSE,BYTE delimeter=0); + WORD appendNode(NodeType nodeType,DWORD itemIndex,const String &text,DWORD userData,WORD selected=FALSE); + WORD moveTree(int left,int top,int right,int bottom,WORD repaint=TRUE)const; + WORD getItemRect(Rect &itemRect,BOOL boundingText=TRUE)const; + WORD getItemRect(Rect &itemRect,HTREEITEM hTreeItem,BOOL boundingText=TRUE)const; + WORD getItem(TreeViewItem &someTreeViewItem)const; + WORD setItem(const TreeViewItem &someTreeViewItem)const; + WORD remove(HTREEITEM hTreeItem)const; + WORD remove(const String &nodeName)const; + WORD setRedraw(WORD redrawFlag)const; + WORD setFocus(void)const; + WORD remove(void)const; + WORD isOkay(void)const; +protected: + virtual WORD tvnSelChanging(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnSelChanged(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnGetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnSetDispInfo(TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnItemExpanding(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnItemExpanded(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginDrag(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginRDrag(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnDeleteItem(const TreeViewMessageHeader &treeViewMessageHeader); + virtual WORD tvnBeginLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnEndLabelEdit(const TreeViewDisplayInfo &treeViewDisplayInfo); + virtual WORD tvnKeyDown(const TreeViewKeyDown &treeViewKeyDown); +private: + CallbackData::ReturnType notifyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + WORD handleGetDisplayInfo(CallbackData &someCallackData); + void createTreeView(const Rect &winRect,DWORD viewFlags,int controlID); + HTREEITEM selectSetFirstVisible(HTREEITEM hTreeItem); + HTREEITEM getDropHilight(void); + HTREEITEM getSelection(void)const; + HTREEITEM getFirstVisible(void); + HTREEITEM select(HTREEITEM hTreeItem,WPARAM code)const; + HTREEITEM getNextItem(HTREEITEM hTreeItem,WPARAM code)const; + HTREEITEM getPrevSibling(HTREEITEM hTreeItem); + HTREEITEM getNextVisible(HTREEITEM hTreeItem); + HTREEITEM getPrevVisible(HTREEITEM hTreeItem); + + WORD sortChildren(HTREEITEM hTreeItem,WPARAM recurse); + WORD expand(HTREEITEM hTreeItem,WPARAM code); + WORD getISearchString(String &searchString); + WORD searchInsert(NodeType nodeType,TreeViewItem &viewItem,TreeViewInsert &viewInsert,const String &parentString,HTREEITEM hParentItem,HTREEITEM hChildItem,BYTE delimeter=0); + WORD ensureVisible(HTREEITEM hTreeItem); + WORD endEditLabelNow(WPARAM cancel); + WORD setIndent(WORD indent); + HWND getEditLabel(HTREEITEM hTreeItem); + UINT getVisibleCount(void); + UINT getIndent(void); + UINT indent(void); + void indent(UINT indent); + + Callback mNotifyHandler; + GUIWindow &mParentWindow; + TreeViewInsert mLastInsert; +}; + +inline +UINT TreeView::indent(void) +{ + if(!isOkay())return FALSE; + return (UINT)sendMessage(TVM_GETINDENT,0,0L); +} + +inline +void TreeView::indent(UINT indent) +{ + if(!isOkay())return; + sendMessage(TVM_SETINDENT,(WPARAM)indent,0L); +} + +inline +HTREEITEM TreeView::insertItem(TreeViewInsert &someTreeViewInsert) +{ + HTREEITEM hTreeItem; + if(!isOkay())return FALSE; + hTreeItem=(HTREEITEM)sendMessage(TVM_INSERTITEM,0,(LPARAM)&((TV_INSERTSTRUCT&)someTreeViewInsert)); + if(hTreeItem){mLastInsert=someTreeViewInsert;mLastInsert.insertAfter(hTreeItem);} + return hTreeItem; +} + +inline +WORD TreeView::remove(HTREEITEM hTreeItem)const +{ + if(!isOkay())return FALSE; + return sendMessage(TVM_DELETEITEM,0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::expand(HTREEITEM hTreeItem,WPARAM code) +{ + if(!isOkay())return FALSE; + return sendMessage(TVM_EXPAND,(WPARAM)code,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +UINT TreeView::getCount(void)const +{ + if(!isOkay())return FALSE; + return (UINT)sendMessage(TVM_GETCOUNT,0,0L); +} + +inline +UINT TreeView::getIndent(void) +{ + if(!isOkay())return FALSE; + return (UINT)sendMessage(TVM_GETINDENT,0,0L); +} + +inline +WORD TreeView::setIndent(WORD indent) +{ + if(!isOkay())return FALSE; + return (WORD)sendMessage(TVM_SETINDENT,(WPARAM)indent,0L); +} + +inline +HIMAGELIST TreeView::getImageList(ListType listType) +{ + if(!isOkay())return FALSE; + return (HIMAGELIST)sendMessage(TVM_GETIMAGELIST,(WPARAM)listType,0L); +} + +inline +HIMAGELIST TreeView::setImageList(ImageList &someImageList,WORD indexImage) +{ + if(!isOkay()||!someImageList.isOkay())return FALSE; + return (HIMAGELIST)sendMessage(TVM_SETIMAGELIST,indexImage,(LPARAM)(HIMAGELIST)someImageList); +} + +inline +HTREEITEM TreeView::getNextItem(HTREEITEM hTreeItem,WPARAM code)const +{ + if(!isOkay())return FALSE; + return (HTREEITEM)sendMessage(TVM_GETNEXTITEM,(WPARAM)code,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +HTREEITEM TreeView::getChild(HTREEITEM hTreeItem)const +{ + return getNextItem(hTreeItem,TVGN_CHILD); +} + +inline +HTREEITEM TreeView::getNextSibling(HTREEITEM hTreeItem)const +{ + return getNextItem(hTreeItem,TVGN_NEXT); +} + +inline +HTREEITEM TreeView::getPrevSibling(HTREEITEM hTreeItem) +{ + return getNextItem(hTreeItem,TVGN_PREVIOUS); +} + +inline +HTREEITEM TreeView::getParent(HTREEITEM hTreeItem)const +{ + return getNextItem(hTreeItem,TVGN_PARENT); +} + +inline +HTREEITEM TreeView::getFirstVisible(void) +{ + return getNextItem(0,TVGN_FIRSTVISIBLE); +} + +inline +HTREEITEM TreeView::getNextVisible(HTREEITEM hTreeItem) +{ + return getNextItem(hTreeItem,TVGN_NEXTVISIBLE); +} + +inline +HTREEITEM TreeView::getPrevVisible(HTREEITEM hTreeItem) +{ + return getNextItem(hTreeItem,TVGN_PREVIOUSVISIBLE); +} + +inline +HTREEITEM TreeView::getSelection(void)const +{ + return getNextItem(0,TVGN_CARET); +} + +inline +HTREEITEM TreeView::getDropHilight(void) +{ + return getNextItem(0,TVGN_DROPHILITE); +} + +inline +HTREEITEM TreeView::getRoot(void)const +{ + return getNextItem(0,TVGN_ROOT); +} + +inline +HTREEITEM TreeView::select(HTREEITEM hTreeItem,WPARAM code)const +{ + if(!isOkay())return FALSE; + return (HTREEITEM)sendMessage(TVM_SELECTITEM,(WPARAM)code,(LPARAM)(HTREEITEM)(hTreeItem)); +} + +inline +HTREEITEM TreeView::selectItem(HTREEITEM hTreeItem)const +{ + return select(hTreeItem,TVGN_CARET); +} + +inline +HTREEITEM TreeView::selectRoot(void)const +{ + return selectItem(getRoot()); +} + +inline +HTREEITEM TreeView::selectDropTarget(HTREEITEM hTreeItem)const +{ + return select(hTreeItem,TVGN_DROPHILITE); +} + +inline +HTREEITEM TreeView::selectSetFirstVisible(HTREEITEM hTreeItem) +{ + return select(hTreeItem,TVGN_FIRSTVISIBLE); +} + +inline +WORD TreeView::getItem(TreeViewItem &someTreeViewItem)const +{ + if(!isOkay())return FALSE; + return (WORD)sendMessage(TVM_GETITEM,0,(LPARAM)&((TV_ITEM&)someTreeViewItem)); +} + +inline +WORD TreeView::setItem(const TreeViewItem &someTreeViewItem)const +{ + if(!isOkay())return FALSE; + return (WORD)sendMessage(TVM_SETITEM,0,(LPARAM)&((TV_ITEM&)(TreeViewItem&)someTreeViewItem)); +} + +inline +HWND TreeView::getEditLabel(HTREEITEM hTreeItem) +{ + if(!isOkay())return FALSE; + return (HWND)sendMessage(TVM_EDITLABEL,0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +HWND TreeView::getEditControl(void)const +{ + if(!isOkay())return FALSE; + return (HWND)sendMessage(TVM_GETEDITCONTROL,0,0L); +} + +inline +UINT TreeView::getVisibleCount(void) +{ + if(!isOkay())return FALSE; + return (UINT)sendMessage(TVM_GETVISIBLECOUNT,0,0L); +} + +inline +HIMAGELIST TreeView::createDragImage(HTREEITEM hTreeItem) +{ + if(!isOkay())return FALSE; + return (HIMAGELIST)sendMessage(TVM_CREATEDRAGIMAGE,0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::sortChildren(HTREEITEM hTreeItem,WPARAM recurse) +{ + if(!isOkay())return FALSE; + return sendMessage(TVM_SORTCHILDREN,(WPARAM)recurse,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::ensureVisible(HTREEITEM hTreeItem) +{ + if(!isOkay())return FALSE; + return sendMessage(TVM_ENSUREVISIBLE,(WPARAM)0,(LPARAM)(HTREEITEM)hTreeItem); +} + +inline +WORD TreeView::endEditLabelNow(WPARAM cancel) +{ + if(!isOkay())return FALSE; + return sendMessage(TVM_ENDEDITLABELNOW,(WPARAM)cancel,0L); +} + +inline +WORD TreeView::getISearchString(String &searchString) +{ + if(!isOkay())return FALSE; + return (WORD)sendMessage(TVM_GETISEARCHSTRING,0,(LPARAM)(LPSTR)searchString); +} + +inline +WORD TreeView::getItemRect(Rect &itemRect,BOOL boundingText)const +{ + if(!isOkay())return FALSE; + *((HTREEITEM*)&((RECT&)itemRect))=getSelection(); + return (WORD)sendMessage(TVM_GETITEMRECT,boundingText,(LPARAM)&((RECT&)itemRect)); +} + +inline +WORD TreeView::getItemRect(Rect &itemRect,HTREEITEM hTreeItem,BOOL boundingText)const +{ + if(!isOkay())return FALSE; + *((HTREEITEM*)&((RECT&)itemRect))=hTreeItem; + return (WORD)sendMessage(TVM_GETITEMRECT,boundingText,(LPARAM)&((RECT&)itemRect)); +} + +inline +WORD TreeView::setRedraw(WORD redrawFlag)const +{ + if(!isOkay())return FALSE; + return (WORD)sendMessage(WM_SETREDRAW,redrawFlag,0L); +} + +inline +WORD TreeView::moveTree(int left,int top,int right,int bottom,WORD repaint)const +{ + if(!isOkay())return FALSE; + return moveWindow(left,top,right,bottom,repaint); +} + +inline +WORD TreeView::setFocus(void)const +{ + if(!isOkay())return FALSE; + setFocus(); + return TRUE; +} + +inline +WORD TreeView::remove(const String &nodeName)const +{ + if(!isOkay())return FALSE; + HTREEITEM hTreeItem(searchItem(nodeName)); + if(!hTreeItem)return FALSE; + return remove(hTreeItem); +} + +inline +const TreeViewInsert &TreeView::lastInsert(void)const +{ + return mLastInsert; +} + +inline +WORD TreeView::isOkay(void)const +{ + return isValid(); +} +#endif diff --git a/imagelst/TVDISP.HPP b/imagelst/TVDISP.HPP new file mode 100644 index 0000000..79ddb81 --- /dev/null +++ b/imagelst/TVDISP.HPP @@ -0,0 +1,117 @@ +#ifndef _IMAGELIST_TREEVIEWDISPLAYINFO_HPP_ +#define _IMAGELIST_TREEVIEWDISPLAYINFO_HPP_ +#ifndef _COMMON_NOTIFYMESSAGEHEADER_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif + +class TreeViewDisplayInfo : private TV_DISPINFO +{ +public: + TreeViewDisplayInfo(void); + TreeViewDisplayInfo(const TreeViewDisplayInfo &someTreeViewDisplayInfo); + TreeViewDisplayInfo(const TV_DISPINFO &someTVDISPINFO); + virtual ~TreeViewDisplayInfo(); + TreeViewDisplayInfo &operator=(const TreeViewDisplayInfo &someTreeViewDisplayInfo); + TreeViewDisplayInfo &operator=(const TV_DISPINFO &someTVDISPINFO); + WORD operator==(const TreeViewDisplayInfo &someTreeViewDisplayInfo)const; + WORD operator==(const TV_DISPINFO &someTVDISPINFO)const; + operator TV_DISPINFO &(void); + NotifyMessageHeader nmHeader(void)const; + void nmHeader(const NotifyMessageHeader &someNotifyMessageHeader); + TreeViewItem item(void)const; + void item(const TreeViewItem &someTreeViewItem); +private: + void init(void); +}; + +inline +TreeViewDisplayInfo::TreeViewDisplayInfo(void) +{ + init(); +} + +inline +TreeViewDisplayInfo::TreeViewDisplayInfo(const TreeViewDisplayInfo &someTreeViewDisplayInfo) +{ + *this=someTreeViewDisplayInfo; +} + +inline +TreeViewDisplayInfo::TreeViewDisplayInfo(const TV_DISPINFO &someTVDISPINFO) +{ + *this=someTVDISPINFO; +} + +inline +TreeViewDisplayInfo::~TreeViewDisplayInfo() +{ +} + +inline +TreeViewDisplayInfo &TreeViewDisplayInfo::operator=(const TreeViewDisplayInfo &someTreeViewDisplayInfo) +{ + nmHeader(someTreeViewDisplayInfo.nmHeader()); + item(someTreeViewDisplayInfo.item()); + return *this; +} + +inline +TreeViewDisplayInfo &TreeViewDisplayInfo::operator=(const TV_DISPINFO &someTVDISPINFO) +{ + (TV_DISPINFO&)*this=someTVDISPINFO; + return *this; +} + +inline +WORD TreeViewDisplayInfo::operator==(const TreeViewDisplayInfo &someTreeViewDisplayInfo)const +{ + return (nmHeader()==someTreeViewDisplayInfo.nmHeader()&& + item()==someTreeViewDisplayInfo.item()); +} + +inline +WORD TreeViewDisplayInfo::operator==(const TV_DISPINFO &someTVDISPINFO)const +{ + return (nmHeader()==NotifyMessageHeader(someTVDISPINFO.hdr)&& + item()==TreeViewItem(someTVDISPINFO.item)); +} + +inline +TreeViewDisplayInfo::operator TV_DISPINFO &(void) +{ + return *this; +} + +inline +NotifyMessageHeader TreeViewDisplayInfo::nmHeader(void)const +{ + return TV_DISPINFO::hdr; +} + +inline +void TreeViewDisplayInfo::nmHeader(const NotifyMessageHeader &someNotifyMessageHeader) +{ + TV_DISPINFO::hdr=(NMHDR&)someNotifyMessageHeader; +} + +inline +TreeViewItem TreeViewDisplayInfo::item(void)const +{ + return TV_DISPINFO::item; +} + +inline +void TreeViewDisplayInfo::item(const TreeViewItem &someTreeViewItem) +{ + TV_DISPINFO::item=(TV_ITEM&)someTreeViewItem; +} + +inline +void TreeViewDisplayInfo::init(void) +{ + ::memset(&((TV_DISPINFO&)*this),0,sizeof(TV_DISPINFO)); +} +#endif diff --git a/imagelst/TVINFO.HPP b/imagelst/TVINFO.HPP new file mode 100644 index 0000000..881fb7a --- /dev/null +++ b/imagelst/TVINFO.HPP @@ -0,0 +1,59 @@ +#ifndef _IMAGELST_TREEVIEWINFO_HPP_ +#define _IMAGELST_TREEVIEWINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _IMAGELIST_NOTIFYMESSAGEHEADER_HPP_ +#include +#endif +#ifndef _IMAGELST_TREEVIEWINFO_HPP_ +#include +#endif + +class TreeViewInfo : public NotifyMessageHeader, public TreeViewItem +{ +public: + TreeViewInfo(void); + TreeViewInfo(const TreeViewInfo &someTreeViewInfo); + ~TreeViewInfo(); + TreeViewInfo &operator=(const TreeViewInfo &someTreeViewInfo); + WORD operator==(const TreeViewInfo &someTreeViewInfo)const; +private: +}; + +inline +TreeViewInfo::TreeViewInfo(void) +{ +} + +inline +TreeViewInfo::TreeViewInfo(const TreeViewInfo &someTreeViewInfo) +{ + *this=someTreeViewInfo; +} + +inline +TreeViewInfo::~TreeViewInfo() +{ +} + +inline +TreeViewInfo &TreeViewInfo::operator=(const TreeViewInfo &someTreeViewInfo) +{ + (NotifyMessageHeader&)*this=(NotifyMessageHeader&)someTreeViewInfo; + (TreeViewItem&)*this=(TreeViewItem&)someTreeViewInfo; + return *this; +} + +inline +WORD TreeViewInfo::operator==(const TreeViewInfo &someTreeViewInfo)const +{ + return ((NotifyMessageHeader&)*this==(NotifyMessageHeader&)someTreeViewInfo&& + (TreeViewItem&)*this==(TreeViewItem&)someTreeViewInfo); +} +#endif + + diff --git a/imagelst/TVINSERT.HPP b/imagelst/TVINSERT.HPP new file mode 100644 index 0000000..127ea85 --- /dev/null +++ b/imagelst/TVINSERT.HPP @@ -0,0 +1,109 @@ +#ifndef _IMAGELIST_TREEVIEWINSERT_HPP_ +#define _IMAGELIST_TREEVIEWINSERT_HPP_ +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif + +class TreeViewInsert : private TV_INSERTSTRUCT +{ +public: + enum InsertFlags{InsertRoot=(int)TVI_ROOT,InsertFirst=(int)TVI_FIRST, + InsertLast=(int)TVI_LAST,InsertSort=(int)TVI_SORT}; + enum GetFlags{GetRoot=TVGN_ROOT,GetNext=TVGN_NEXT,GetPrevious=TVGN_PREVIOUS, + GetParent=TVGN_PARENT,GetChild=TVGN_CHILD,GetFirstVisible=TVGN_FIRSTVISIBLE, + GetNextVisible=TVGN_NEXTVISIBLE,GetPreviousVisible=TVGN_PREVIOUSVISIBLE, + GetDropHilite=TVGN_DROPHILITE,GetCaret=TVGN_CARET}; + TreeViewInsert(void); + TreeViewInsert(const TreeViewInsert &someTreeViewInsert); + virtual ~TreeViewInsert(); + operator TV_INSERTSTRUCT&(void); + TreeViewInsert &operator=(const TreeViewInsert &someTreeViewInsert); + HTREEITEM parent(void)const; + void parent(HTREEITEM hParent); + HTREEITEM insertAfter(void)const; + void insertAfter(HTREEITEM hInsertAfter); + void insertAfter(InsertFlags insertFlags); + TreeViewItem viewItem(void)const; + void viewItem(const TreeViewItem &someTreeViewItem); +private: +}; + +inline +TreeViewInsert::TreeViewInsert(void) +{ + parent(0); + insertAfter(0); + viewItem(TreeViewItem()); +} + +inline +TreeViewInsert::TreeViewInsert(const TreeViewInsert &someTreeViewInsert) +{ + *this=someTreeViewInsert; +} + +inline +TreeViewInsert::~TreeViewInsert() +{ +} + +inline +TreeViewInsert &TreeViewInsert::operator=(const TreeViewInsert &someTreeViewInsert) +{ + parent(someTreeViewInsert.parent()); + insertAfter(someTreeViewInsert.insertAfter()); + viewItem(someTreeViewInsert.viewItem()); + return *this; +} + +inline +TreeViewInsert::operator TV_INSERTSTRUCT&(void) +{ + return *this; +} + +inline +HTREEITEM TreeViewInsert::parent(void)const +{ + return TV_INSERTSTRUCT::hParent; +} + +inline +void TreeViewInsert::parent(HTREEITEM hParent) +{ + TV_INSERTSTRUCT::hParent=hParent; +} + +inline +HTREEITEM TreeViewInsert::insertAfter(void)const +{ + return TV_INSERTSTRUCT::hInsertAfter; +} + +inline +void TreeViewInsert::insertAfter(HTREEITEM hInsertAfter) +{ + TV_INSERTSTRUCT::hInsertAfter=hInsertAfter; +} + +inline +void TreeViewInsert::insertAfter(InsertFlags insertFlags) +{ + TV_INSERTSTRUCT::hInsertAfter=((HTREEITEM)insertFlags); +} + +inline +TreeViewItem TreeViewInsert::viewItem(void)const +{ + return TreeViewItem(TV_INSERTSTRUCT::item); +} + +inline +void TreeViewInsert::viewItem(const TreeViewItem &someTreeViewItem) +{ + ::memcpy((char*)&item,(char*)&((TV_ITEM&)someTreeViewItem),sizeof(TV_ITEM)); +} +#endif diff --git a/imagelst/TVITEM.HPP b/imagelst/TVITEM.HPP new file mode 100644 index 0000000..086aaf0 --- /dev/null +++ b/imagelst/TVITEM.HPP @@ -0,0 +1,300 @@ +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#define _IMAGELIST_TREEVIEWITEM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif + +class TreeViewItem : private TV_ITEM +{ +public: + enum ItemFlags{MaskText=TVIF_TEXT,MaskImage=TVIF_IMAGE,MaskParam=TVIF_PARAM, + MaskState=TVIF_STATE,MaskHandle=TVIF_HANDLE,MaskSelectedImage=TVIF_SELECTEDIMAGE, + MaskChildren=TVIF_CHILDREN}; + enum StateFlags{StateSelected=TVIS_SELECTED,StateCut=TVIS_CUT, + StateDropHilited=TVIS_DROPHILITED,StateBold=TVIS_BOLD, + StateExpanded=TVIS_EXPANDED,StateExpandedOnce=TVIS_EXPANDEDONCE}; + TreeViewItem(void); + TreeViewItem(const TreeViewItem &someTreeViewItem); + TreeViewItem(const TV_ITEM &someTVITEM); + TreeViewItem(UINT maskParam,HTREEITEM itemParam,UINT stateParam,UINT stateMask,LPSTR pszTextParam,DWORD maxTextParam,DWORD imageParam,DWORD selectedImageParam,DWORD childrenParam,DWORD lParam); + virtual ~TreeViewItem(); + TreeViewItem &operator=(const TreeViewItem &someTreeViewItem); + TreeViewItem &operator=(const TV_ITEM &someTVITEM); + WORD operator==(const TreeViewItem &someTreeViewItem)const; + WORD operator==(const TV_ITEM &someTVITEM)const; + operator TV_ITEM&(void); + UINT mask(void)const; + void mask(UINT mask); + HTREEITEM item(void)const; + void item(HTREEITEM item); + UINT state(void)const; + void state(UINT state); + UINT stateMask(void)const; + void stateMask(UINT stateMask); + LPSTR text(void)const; + void text(LPSTR pszText); + DWORD maxText(void)const; + void maxText(DWORD maxText); + DWORD image(void)const; + void image(DWORD image); + DWORD selectedImage(void)const; + void selectedImage(DWORD selectedImage); + DWORD children(void)const; + void children(DWORD children); + LPARAM lParam(void)const; + void lParam(LPARAM lParam); +private: + void clearData(void); +}; + +inline +TreeViewItem::TreeViewItem(void) +{ + clearData(); +} + +inline +TreeViewItem::TreeViewItem(const TreeViewItem &someTreeViewItem) +{ + clearData(); + *this=someTreeViewItem; +} + +inline +TreeViewItem::TreeViewItem(const TV_ITEM &someTVITEM) +{ + *this=someTVITEM; +} + +inline +TreeViewItem::TreeViewItem(UINT maskParam,HTREEITEM itemParam,UINT stateParam,UINT stateMaskParam,LPSTR pszTextParam,DWORD maxTextParam,DWORD imageParam,DWORD selectedImageParam,DWORD childrenParam,DWORD lParamParam) +{ + clearData(); + mask(maskParam); + item(itemParam); + state(stateParam); + stateMask(stateMaskParam); + text(pszTextParam); + maxText(maxTextParam); + image(imageParam); + selectedImage(selectedImageParam); + children(childrenParam); + lParam(lParamParam); +} + +inline +TreeViewItem::~TreeViewItem() +{ +} + +inline +TreeViewItem::operator TV_ITEM &(void) +{ + return *this; +} + +inline +TreeViewItem &TreeViewItem::operator=(const TreeViewItem &someTreeViewItem) +{ + mask(someTreeViewItem.mask()); + item(someTreeViewItem.item()); + state(someTreeViewItem.state()); + stateMask(someTreeViewItem.stateMask()); + text(someTreeViewItem.text()); + maxText(someTreeViewItem.maxText()); + image(someTreeViewItem.image()); + selectedImage(someTreeViewItem.selectedImage()); + children(someTreeViewItem.children()); + lParam(someTreeViewItem.lParam()); + return *this; +} + +inline +TreeViewItem &TreeViewItem::operator=(const TV_ITEM &someTVITEM) +{ + mask(someTVITEM.mask); + item(someTVITEM.hItem); + state(someTVITEM.state); + stateMask(someTVITEM.stateMask); + text(someTVITEM.pszText); + maxText(someTVITEM.cchTextMax); + image(someTVITEM.iImage); + selectedImage(someTVITEM.iSelectedImage); + children(someTVITEM.cChildren); + lParam(someTVITEM.lParam); + return *this; +} + +inline +WORD TreeViewItem::operator==(const TreeViewItem &someTreeViewItem)const +{ + return (mask()==someTreeViewItem.mask()&& + item()==someTreeViewItem.item()&& + state()==someTreeViewItem.state()&& + stateMask()==someTreeViewItem.stateMask()&& + text()==someTreeViewItem.text()&& + maxText()==someTreeViewItem.maxText()&& + image()==someTreeViewItem.image()&& + selectedImage()==someTreeViewItem.selectedImage()&& + children()==someTreeViewItem.children()&& + lParam()==someTreeViewItem.lParam()); +} + +inline +WORD TreeViewItem::operator==(const TV_ITEM &someTVITEM)const +{ + return (TV_ITEM::mask==someTVITEM.mask&& + TV_ITEM::hItem==someTVITEM.hItem&& + TV_ITEM::state==someTVITEM.state&& + TV_ITEM::stateMask==someTVITEM.stateMask&& + TV_ITEM::pszText==someTVITEM.pszText&& + TV_ITEM::cchTextMax==someTVITEM.cchTextMax&& + TV_ITEM::iImage==someTVITEM.iImage&& + TV_ITEM::iSelectedImage==someTVITEM.iSelectedImage&& + TV_ITEM::cChildren==someTVITEM.cChildren&& + TV_ITEM::lParam==someTVITEM.lParam); +} + +inline +void TreeViewItem::clearData(void) +{ + TV_ITEM::mask=0; + TV_ITEM::hItem=0; + TV_ITEM::state=0; + TV_ITEM::stateMask=0; + TV_ITEM::pszText=0; + TV_ITEM::cchTextMax=0; + TV_ITEM::iImage=0; + TV_ITEM::iSelectedImage=0; + TV_ITEM::cChildren=0; + TV_ITEM::lParam=0; +} + +inline +UINT TreeViewItem::mask(void)const +{ + return TV_ITEM::mask; +} + +inline +void TreeViewItem::mask(UINT mask) +{ + TV_ITEM::mask=mask; +} + +inline +HTREEITEM TreeViewItem::item(void)const +{ + return TV_ITEM::hItem; +} + +inline +void TreeViewItem::item(HTREEITEM hItem) +{ + TV_ITEM::hItem=hItem; +} + +inline +UINT TreeViewItem::state(void)const +{ + return TV_ITEM::state; +} + +inline +void TreeViewItem::state(UINT state) +{ + TV_ITEM::state=state; +} + +inline +UINT TreeViewItem::stateMask(void)const +{ + return TV_ITEM::stateMask; +} + +inline +void TreeViewItem::stateMask(UINT stateMask) +{ + TV_ITEM::stateMask=stateMask; +} + +inline +LPSTR TreeViewItem::text(void)const +{ + return TV_ITEM::pszText; +} + +inline +void TreeViewItem::text(LPSTR pszText) +{ + TV_ITEM::pszText=pszText; +} + +inline +DWORD TreeViewItem::maxText(void)const +{ + return TV_ITEM::cchTextMax; +} + +inline +void TreeViewItem::maxText(DWORD maxText) +{ + TV_ITEM::cchTextMax=maxText; +} + +inline +DWORD TreeViewItem::image(void)const +{ + return TV_ITEM::iImage; +} + +inline +void TreeViewItem::image(DWORD image) +{ + TV_ITEM::iImage=image; +} + +inline +DWORD TreeViewItem::selectedImage(void)const +{ + return TV_ITEM::iSelectedImage; +} + +inline +void TreeViewItem::selectedImage(DWORD selectedImage) +{ + TV_ITEM::iSelectedImage=selectedImage; +} + +inline +DWORD TreeViewItem::children(void)const +{ + return TV_ITEM::cChildren; +} + +inline +void TreeViewItem::children(DWORD children) +{ + TV_ITEM::cChildren=children; +} + +inline +LPARAM TreeViewItem::lParam(void)const +{ + return TV_ITEM::lParam; +} + +inline +void TreeViewItem::lParam(LPARAM lParam) +{ + TV_ITEM::lParam=lParam; +} +#endif + + + + + diff --git a/imagelst/TVITEMEX.HPP b/imagelst/TVITEMEX.HPP new file mode 100644 index 0000000..55e122f --- /dev/null +++ b/imagelst/TVITEMEX.HPP @@ -0,0 +1,72 @@ +#ifndef _IMAGELST_TREEVIEWITEMEX_HPP_ +#define _IMAGELST_TREEVIEWITEMEX_HPP_ +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif + +class TreeViewItemEx : public TreeViewItem +{ +public: + TreeViewItemEx(void); + TreeViewItemEx(const TreeViewItemEx &someTreeViewItemEx); + TreeViewItemEx(const TreeViewItem &someTreeViewItem); + ~TreeViewItemEx(); + TreeViewItemEx &operator=(const TreeViewItemEx &someTreeViewItemEx); + WORD operator==(const TreeViewItemEx &someTreeViewItemEx); + HTREEITEM parent(void)const; + void parent(HTREEITEM parent); +private: + HTREEITEM mhParent; +}; + +inline +TreeViewItemEx::TreeViewItemEx(void) +: mhParent(0) +{ +} + +inline +TreeViewItemEx::TreeViewItemEx(const TreeViewItemEx &someTreeViewItemEx) +{ + *this=someTreeViewItemEx; +} + +inline +TreeViewItemEx::TreeViewItemEx(const TreeViewItem &someTreeViewItem) +: mhParent(0), TreeViewItem(someTreeViewItem) +{ +} + +inline +TreeViewItemEx::~TreeViewItemEx() +{ +} + +inline +TreeViewItemEx &TreeViewItemEx::operator=(const TreeViewItemEx &someTreeViewItemEx) +{ + (TreeViewItem&)*this=(TreeViewItem&)someTreeViewItemEx; + parent(someTreeViewItemEx.parent()); + return *this; +} + +inline +WORD TreeViewItemEx::operator==(const TreeViewItemEx &someTreeViewItemEx) +{ + return ((TreeViewItem&)*this==(TreeViewItem&)someTreeViewItemEx&& + parent()==someTreeViewItemEx.parent()); +} + +inline +HTREEITEM TreeViewItemEx::parent(void)const +{ + return mhParent; +} + +inline +void TreeViewItemEx::parent(HTREEITEM hParent) +{ + mhParent=hParent; +} +#endif + diff --git a/imagelst/TVKEY.HPP b/imagelst/TVKEY.HPP new file mode 100644 index 0000000..bf0305a --- /dev/null +++ b/imagelst/TVKEY.HPP @@ -0,0 +1,134 @@ +#ifndef _IMAGELIST_TREEVIEWKEYDOWN_HPP_ +#define _IMAGELIST_TREEVIEWKEYDOWN_HPP_ +#ifndef _COMMON_NOTIFYMESSAGEHEADER_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif + +class TreeViewKeyDown : private TV_KEYDOWN +{ +public: + TreeViewKeyDown(void); + TreeViewKeyDown(const TreeViewKeyDown &someTreeViewKeyDown); + TreeViewKeyDown(const TV_KEYDOWN &someTVKEYDOWN); + virtual ~TreeViewKeyDown(); + TreeViewKeyDown &operator=(const TreeViewKeyDown &someTreeViewKeyDown); + TreeViewKeyDown &operator=(const TV_KEYDOWN &someTVKEYDOWN); + BOOL operator==(const TreeViewKeyDown &someTreeViewKeyDown)const; + BOOL operator==(const TV_KEYDOWN &someTVKEYDOWN)const; + operator TV_KEYDOWN &(void); + NotifyMessageHeader nmHeader(void)const; + void nmHeader(const NotifyMessageHeader &someNotifyMessageHeader); + WORD virtualKey(void)const; + void virtualKey(WORD virtualKey); + UINT flags(void)const; + void flags(UINT flags); +private: + void init(void); +}; + +inline +TreeViewKeyDown::TreeViewKeyDown(void) +{ + init(); +} + +inline +TreeViewKeyDown::TreeViewKeyDown(const TreeViewKeyDown &someTreeViewKeyDown) +{ + *this=someTreeViewKeyDown; +} + +inline +TreeViewKeyDown::TreeViewKeyDown(const TV_KEYDOWN &someTVKEYDOWN) +{ + *this=someTVKEYDOWN; +} + +inline +TreeViewKeyDown::~TreeViewKeyDown() +{ +} + +inline +TreeViewKeyDown &TreeViewKeyDown::operator=(const TreeViewKeyDown &someTreeViewKeyDown) +{ + nmHeader(someTreeViewKeyDown.nmHeader()); + virtualKey(someTreeViewKeyDown.virtualKey()); + flags(someTreeViewKeyDown.flags()); + return *this; +} + +inline +TreeViewKeyDown &TreeViewKeyDown::operator=(const TV_KEYDOWN &someTVKEYDOWN) +{ + (TV_KEYDOWN&)*this=someTVKEYDOWN; + return *this; +} + +inline +BOOL TreeViewKeyDown::operator==(const TreeViewKeyDown &someTreeViewKeyDown)const +{ + return (nmHeader()==someTreeViewKeyDown.nmHeader()&& + virtualKey()==someTreeViewKeyDown.virtualKey()&& + flags()==someTreeViewKeyDown.flags()); +} + +inline +BOOL TreeViewKeyDown::operator==(const TV_KEYDOWN &someTVKEYDOWN)const +{ + return (nmHeader()==NotifyMessageHeader(someTVKEYDOWN.hdr)&& + virtualKey()==someTVKEYDOWN.wVKey&& + flags()==someTVKEYDOWN.flags); +} + +inline +TreeViewKeyDown::operator TV_KEYDOWN &(void) +{ + return *this; +} + +inline +NotifyMessageHeader TreeViewKeyDown::nmHeader(void)const +{ + return TV_KEYDOWN::hdr; +} + +inline +void TreeViewKeyDown::nmHeader(const NotifyMessageHeader &someNotifyMessageHeader) +{ + TV_KEYDOWN::hdr=(NMHDR&)someNotifyMessageHeader; +} + +inline +WORD TreeViewKeyDown::virtualKey(void)const +{ + return TV_KEYDOWN::wVKey; +} + +inline +void TreeViewKeyDown::virtualKey(WORD virtualKey) +{ + TV_KEYDOWN::wVKey=virtualKey; +} + +inline +UINT TreeViewKeyDown::flags(void)const +{ + return TV_KEYDOWN::flags; +} + +inline +void TreeViewKeyDown::flags(UINT flags) +{ + TV_KEYDOWN::flags=flags; +} + +inline +void TreeViewKeyDown::init(void) +{ + ::memset(&((TV_KEYDOWN&)*this),0,sizeof(TV_KEYDOWN)); +} +#endif diff --git a/imagelst/TVMSGHDR.HPP b/imagelst/TVMSGHDR.HPP new file mode 100644 index 0000000..9c7075c --- /dev/null +++ b/imagelst/TVMSGHDR.HPP @@ -0,0 +1,173 @@ +#ifndef _IMAGELIST_TREEVIEWMESSAGEHEADER_HPP_ +#define _IMAGELIST_TREEVIEWMESSAGEHEADER_HPP_ +#ifndef _COMMON_NOTIFYMESSAGEHEADER_HPP_ +#include +#endif +#ifndef _IMAGELIST_TREEVIEWITEM_HPP_ +#include +#endif +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif + +class TreeViewMessageHeader : private NM_TREEVIEW +{ +public: + TreeViewMessageHeader(void); + TreeViewMessageHeader(const TreeViewMessageHeader &someTreeViewMessageHeader); + TreeViewMessageHeader(const NM_TREEVIEW &someNMTREEVIEW); + virtual ~TreeViewMessageHeader(); + TreeViewMessageHeader &operator=(const TreeViewMessageHeader &someTreeViewMessageHeader); + TreeViewMessageHeader &operator=(const NM_TREEVIEW &someNMTREEVIEW); + WORD operator==(const TreeViewMessageHeader &someTreeViewMessageHeader)const; + WORD operator==(const NM_TREEVIEW &someNMTREEVIEW)const; + NotifyMessageHeader nmHeader(void)const; + UINT action(void)const; + TreeViewItem itemOld(void)const; + TreeViewItem itemNew(void)const; + GDIPoint pointDrag(void)const; +private: + void init(void); + void nmHeader(NotifyMessageHeader &tvMessageHeader); + void action(UINT tvAction); + void itemOld(const TreeViewItem &tvItemOld); + void itemNew(const TreeViewItem &tvItemNew); + void pointDrag(const GDIPoint &tvDrawPoint); +}; + +inline +TreeViewMessageHeader::TreeViewMessageHeader(void) +{ + init(); +} + +inline +TreeViewMessageHeader::TreeViewMessageHeader(const TreeViewMessageHeader &someTreeViewMessageHeader) +{ + *this=someTreeViewMessageHeader; +} + +inline +TreeViewMessageHeader::TreeViewMessageHeader(const NM_TREEVIEW &someNMTREEVIEW) +{ + *this=someNMTREEVIEW; +} + +inline +TreeViewMessageHeader::~TreeViewMessageHeader() +{ +} + +inline +TreeViewMessageHeader &TreeViewMessageHeader::operator=(const TreeViewMessageHeader &someTreeViewMessageHeader) +{ + nmHeader(someTreeViewMessageHeader.nmHeader()); + action(someTreeViewMessageHeader.action()); + itemOld(someTreeViewMessageHeader.itemOld()); + itemNew(someTreeViewMessageHeader.itemNew()); + pointDrag(someTreeViewMessageHeader.pointDrag()); + return *this; +} + +inline +TreeViewMessageHeader &TreeViewMessageHeader::operator=(const NM_TREEVIEW &someNMTREEVIEW) +{ + NM_TREEVIEW::hdr=someNMTREEVIEW.hdr; + NM_TREEVIEW::action=someNMTREEVIEW.action; + NM_TREEVIEW::itemOld=someNMTREEVIEW.itemOld; + NM_TREEVIEW::itemNew=someNMTREEVIEW.itemNew; + NM_TREEVIEW::ptDrag=someNMTREEVIEW.ptDrag; + return *this; +} + +inline +WORD TreeViewMessageHeader::operator==(const TreeViewMessageHeader &someTreeViewMessageHeader)const +{ + return (nmHeader()==someTreeViewMessageHeader.nmHeader()&& + action()==someTreeViewMessageHeader.action()&& + itemOld()==someTreeViewMessageHeader.itemOld()&& + itemNew()==someTreeViewMessageHeader.itemNew()&& + pointDrag()==someTreeViewMessageHeader.pointDrag()); +} + +inline +WORD TreeViewMessageHeader::operator==(const NM_TREEVIEW &someNMTREEVIEW)const +{ + return (NotifyMessageHeader(NM_TREEVIEW::hdr)==NotifyMessageHeader(someNMTREEVIEW.hdr)&& + NM_TREEVIEW::action==someNMTREEVIEW.action&& + TreeViewItem(NM_TREEVIEW::itemOld)==TreeViewItem(someNMTREEVIEW.itemOld)&& + TreeViewItem(NM_TREEVIEW::itemNew)==TreeViewItem(someNMTREEVIEW.itemNew)&& + NM_TREEVIEW::ptDrag.x==someNMTREEVIEW.ptDrag.x&& + NM_TREEVIEW::ptDrag.y==someNMTREEVIEW.ptDrag.y); +} + +inline +NotifyMessageHeader TreeViewMessageHeader::nmHeader(void)const +{ + return NM_TREEVIEW::hdr; +} + +inline +void TreeViewMessageHeader::nmHeader(NotifyMessageHeader &tvMessageHeader) +{ + NM_TREEVIEW::hdr=(NMHDR&)tvMessageHeader; +} + +inline +UINT TreeViewMessageHeader::action(void)const +{ + return NM_TREEVIEW::action; +} + +inline +void TreeViewMessageHeader::action(UINT tvAction) +{ + NM_TREEVIEW::action=tvAction; +} + +inline +TreeViewItem TreeViewMessageHeader::itemOld(void)const +{ + return NM_TREEVIEW::itemOld; +} + +inline +void TreeViewMessageHeader::itemOld(const TreeViewItem &tvItemOld) +{ + NM_TREEVIEW::itemOld=(TV_ITEM&)tvItemOld; +} + +inline +TreeViewItem TreeViewMessageHeader::itemNew(void)const +{ + return NM_TREEVIEW::itemNew; +} + +inline +void TreeViewMessageHeader::itemNew(const TreeViewItem &tvItemNew) +{ + NM_TREEVIEW::itemOld=(TV_ITEM&)tvItemNew; +} + +inline +GDIPoint TreeViewMessageHeader::pointDrag(void)const +{ + GDIPoint dragPoint; + + dragPoint.x(NM_TREEVIEW::ptDrag.x); + dragPoint.y(NM_TREEVIEW::ptDrag.y); + return dragPoint; +} + +inline +void TreeViewMessageHeader::pointDrag(const GDIPoint &tvDrawPoint) +{ + NM_TREEVIEW::ptDrag=(POINT&)tvDrawPoint; +} + +inline +void TreeViewMessageHeader::init(void) +{ + ::memset(&((NM_TREEVIEW&)*this),0,sizeof(NM_TREEVIEW)); +} +#endif \ No newline at end of file diff --git a/imagelst/TVNOTIFY.HPP b/imagelst/TVNOTIFY.HPP new file mode 100644 index 0000000..d1584ae --- /dev/null +++ b/imagelst/TVNOTIFY.HPP @@ -0,0 +1,139 @@ +#ifndef _IMAGELIST_TREEVIEWNOTIFY_HPP_ +#define _IMAGELIST_TREEVIEWNOTIFY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif +#ifndef _IMAGELIST_NOTIFYMESSAGEHEADER_HPP_ +#include +#endif + +class TreeViewNotify : private NM_TREEVIEW +{ +public: + TreeViewNotify(void); + TreeViewNotify(const TreeViewNotify &someTreeViewNotify); + ~TreeViewNotify(); + NotifyMessageHeader &hdr(void); + UINT action(void)const; + TreeViewItem &itemOld(void); + TreeViewItem &itemNew(void); + GDIPoint &dragPoint(void); +private: + TreeViewNotify &operator=(const TreeViewNotify &someTreeViewNotify); + WORD operator==(const TreeViewNotify &someTreeViewNotify)const; + void hdr(const NotifyMessageHeader &someNotifyMessageHeader); + void itemOld(const TreeViewItem &someTreeViewItem); + void itemNew(const TreeViewItem &someTreeViewItem); + void dragPoint(const GDIPoint &someGDIPoint); + void action(UINT action); + void clearData(void); +}; + +inline +TreeViewNotify::TreeViewNotify(void) +{ + clearData(); +} + +inline +TreeViewNotify::TreeViewNotify(const TreeViewNotify &someTreeViewNotify) +{ + clearData(); + *this=someTreeViewNotify; +} + +inline +TreeViewNotify::~TreeViewNotify() +{ +} + +inline +TreeViewNotify &TreeViewNotify::operator=(const TreeViewNotify &someTreeViewNotify) +{ + hdr(((TreeViewNotify&)someTreeViewNotify).hdr()); + itemOld(((TreeViewNotify&)someTreeViewNotify).itemOld()); + itemNew(((TreeViewNotify&)someTreeViewNotify).itemNew()); + dragPoint(((TreeViewNotify&)someTreeViewNotify).dragPoint()); + action(((TreeViewNotify&)someTreeViewNotify).action()); + return *this; +} + +inline +WORD TreeViewNotify::operator==(const TreeViewNotify &someTreeViewNotify)const +{ + return (((TreeViewNotify&)*this).hdr()==((TreeViewNotify&)someTreeViewNotify).hdr()&& + ((TreeViewNotify&)*this).itemOld()==((TreeViewNotify&)someTreeViewNotify).itemOld()&& + ((TreeViewNotify&)*this).itemNew()==((TreeViewNotify&)someTreeViewNotify).itemNew()&& + ((TreeViewNotify&)*this).dragPoint()==((TreeViewNotify&)someTreeViewNotify).dragPoint()&& + ((TreeViewNotify&)*this).action()==((TreeViewNotify&)someTreeViewNotify).action()); +} + +inline +NotifyMessageHeader &TreeViewNotify::hdr(void) +{ + return (NotifyMessageHeader&)NM_TREEVIEW::hdr; +} + +inline +void TreeViewNotify::hdr(const NotifyMessageHeader &someNotifyMessageHeader) +{ + ((NotifyMessageHeader&)NM_TREEVIEW::hdr)=someNotifyMessageHeader; +} + +inline +UINT TreeViewNotify::action(void)const +{ + return NM_TREEVIEW::action; +} + +inline +void TreeViewNotify::action(UINT action) +{ + NM_TREEVIEW::action=action; +} + +inline +TreeViewItem &TreeViewNotify::itemOld(void) +{ + return (TreeViewItem&)NM_TREEVIEW::itemOld; +} + +inline +void TreeViewNotify::itemOld(const TreeViewItem &someTreeViewItem) +{ + (TreeViewItem&)NM_TREEVIEW::itemOld=someTreeViewItem; +} + +inline +TreeViewItem &TreeViewNotify::itemNew(void) +{ + return (TreeViewItem&)NM_TREEVIEW::itemNew; +} + +inline +void TreeViewNotify::itemNew(const TreeViewItem &someTreeViewItem) +{ + (TreeViewItem&)NM_TREEVIEW::itemNew=someTreeViewItem; +} + +inline +GDIPoint &TreeViewNotify::dragPoint(void) +{ + return (GDIPoint&)NM_TREEVIEW::ptDrag; +} + +inline +void TreeViewNotify::dragPoint(const GDIPoint &someGDIPoint) +{ + (GDIPoint&)NM_TREEVIEW::ptDrag=someGDIPoint; +} + +inline +void TreeViewNotify::clearData(void) +{ + ::memset((char*)&((NM_TREEVIEW&)*this),0,sizeof(NM_TREEVIEW)); +} +#endif diff --git a/imagelst/VC40.IDB b/imagelst/VC40.IDB new file mode 100644 index 0000000..8b9461b Binary files /dev/null and b/imagelst/VC40.IDB differ diff --git a/imagelst/imagelst.001 b/imagelst/imagelst.001 new file mode 100644 index 0000000..8f00ba2 --- /dev/null +++ b/imagelst/imagelst.001 @@ -0,0 +1,142 @@ +# Microsoft Developer Studio Project File - Name="imagelst" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=imagelst - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "imagelst.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "imagelst.mak" CFG="imagelst - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "imagelst - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "imagelst - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "imagelst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\imagelst.lib" + +!ELSEIF "$(CFG)" == "imagelst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /Ob2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\imagelst.lib" + +!ENDIF + +# Begin Target + +# Name "imagelst - Win32 Release" +# Name "imagelst - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Ftree.cpp +# End Source File +# Begin Source File + +SOURCE=.\Imagelst.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Treeview.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Ftree.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hittest.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imagelst.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imgeinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Treeview.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvdisp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvkey.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvmsghdr.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/imagelst/imagelst.dsp b/imagelst/imagelst.dsp new file mode 100644 index 0000000..cc8e892 --- /dev/null +++ b/imagelst/imagelst.dsp @@ -0,0 +1,148 @@ +# Microsoft Developer Studio Project File - Name="imagelst" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=imagelst - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "imagelst.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "imagelst.mak" CFG="imagelst - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "imagelst - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "imagelst - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "imagelst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /ZI /Od /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\imagelst.lib" + +!ELSEIF "$(CFG)" == "imagelst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp8 /MTd /GX /ZI /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\imagelst.lib" + +!ENDIF + +# Begin Target + +# Name "imagelst - Win32 Release" +# Name "imagelst - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Ftree.cpp +# End Source File +# Begin Source File + +SOURCE=.\Imagelst.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Treeview.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Ftree.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hittest.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imagelst.hpp +# End Source File +# Begin Source File + +SOURCE=.\Imgeinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Treeview.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvdisp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvkey.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tvmsghdr.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/imagelst/imagelst.mdp b/imagelst/imagelst.mdp new file mode 100644 index 0000000..b974dee Binary files /dev/null and b/imagelst/imagelst.mdp differ diff --git a/imagelst/imagelst.opt b/imagelst/imagelst.opt new file mode 100644 index 0000000..32e4c4e Binary files /dev/null and b/imagelst/imagelst.opt differ diff --git a/java/ANIMATE/ANIMATE.MAK b/java/ANIMATE/ANIMATE.MAK new file mode 100644 index 0000000..5745dc2 --- /dev/null +++ b/java/ANIMATE/ANIMATE.MAK @@ -0,0 +1,226 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Java Virtual Machine Java Workspace" 0x0809 + +!IF "$(CFG)" == "" +CFG=animate - Java Virtual Machine Debug +!MESSAGE No configuration specified. Defaulting to animate - Java Virtual\ + Machine Debug. +!ENDIF + +!IF "$(CFG)" != "animate - Java Virtual Machine Release" && "$(CFG)" !=\ + "animate - Java Virtual Machine Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "animate.mak" CFG="animate - Java Virtual Machine Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "animate - Java Virtual Machine Release" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE "animate - Java Virtual Machine Debug" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "animate - Java Virtual Machine Debug" +JAVA=jvc.exe + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Animation.class" "$(OUTDIR)\BlackModel.class"\ + "$(OUTDIR)\BlackFilter.class" "$(OUTDIR)\GrayModel.class"\ + "$(OUTDIR)\GrayFilter.class" + +CLEAN : + -@erase "$(INTDIR)\Animation.class" + -@erase "$(INTDIR)\BlackFilter.class" + -@erase "$(INTDIR)\BlackModel.class" + -@erase "$(INTDIR)\GrayFilter.class" + -@erase "$(INTDIR)\GrayModel.class" + +# ADD BASE JAVA /O +# ADD JAVA /O + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Animation.class" "$(OUTDIR)\BlackModel.class"\ + "$(OUTDIR)\BlackFilter.class" "$(OUTDIR)\GrayModel.class"\ + "$(OUTDIR)\GrayFilter.class" + +CLEAN : + -@erase "$(INTDIR)\Animation.class" + -@erase "$(INTDIR)\BlackFilter.class" + -@erase "$(INTDIR)\BlackModel.class" + -@erase "$(INTDIR)\GrayFilter.class" + -@erase "$(INTDIR)\GrayModel.class" + +# ADD BASE JAVA /g +# ADD JAVA /g + +!ENDIF + +################################################################################ +# Begin Target + +# Name "animate - Java Virtual Machine Release" +# Name "animate - Java Virtual Machine Debug" + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Animation.java + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + + +"$(INTDIR)\Animation.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + + +"$(INTDIR)\Animation.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\index.html + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\BlackModel.java + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + + +"$(INTDIR)\BlackModel.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + + +"$(INTDIR)\BlackModel.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\BlackFilter.java + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + + +"$(INTDIR)\BlackFilter.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + + +"$(INTDIR)\BlackFilter.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\GrayModel.java + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + + +"$(INTDIR)\GrayModel.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + + +"$(INTDIR)\GrayModel.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\GrayFilter.java + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + + +"$(INTDIR)\GrayFilter.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + + +"$(INTDIR)\GrayFilter.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/java/ANIMATE/ANIMATE.MDP b/java/ANIMATE/ANIMATE.MDP new file mode 100644 index 0000000..f479585 Binary files /dev/null and b/java/ANIMATE/ANIMATE.MDP differ diff --git a/java/ANIMATE/Animation.java b/java/ANIMATE/Animation.java new file mode 100644 index 0000000..08a226c --- /dev/null +++ b/java/ANIMATE/Animation.java @@ -0,0 +1,43 @@ +import java.awt.*; +import java.applet.Applet; +import java.awt.image.*; + +public class Animation extends java.applet.Applet // implements Runnable +{ + private Image mImage; + private Image mTransImage; +// private GrayFilter mCropFilter; + private CropImageFilter mCropFilter; + + + public Animation() + { + } + public void init() + { + mImage=getImage(getCodeBase(),"ball.jpg"); +// mBlackFilter=new BlackFilter(); + mCropFilter=new CropImageFilter(25,30,75,75); +// mCropFilter=new GrayFilter(); + +// mTransImage=createImage(new FilteredImageSource(mImage.getSource(),mCropFilter)); + + MediaTracker mediaTracker=new MediaTracker(this); + mediaTracker.addImage(mImage,0); +// mediaTracker.addImage(mImage,0); + try{mediaTracker.waitForAll();} + catch(Exception ignore){;} + mTransImage=createImage(new FilteredImageSource(mImage.getSource(),mCropFilter)); + repaint(); + } + public void update(Graphics graphics) + { + paint(graphics); + } + public synchronized void paint(Graphics graphics) + { + if(null!=mTransImage)graphics.drawImage(mTransImage,0,0,this); + graphics.drawImage(mImage,60,60,this); +// graphics.drawImage(mImage,0,0,this); + } +} diff --git a/java/ANIMATE/BALL.BMP b/java/ANIMATE/BALL.BMP new file mode 100644 index 0000000..cc2ca66 Binary files /dev/null and b/java/ANIMATE/BALL.BMP differ diff --git a/java/ANIMATE/BALL.JPG b/java/ANIMATE/BALL.JPG new file mode 100644 index 0000000..9449e22 Binary files /dev/null and b/java/ANIMATE/BALL.JPG differ diff --git a/java/ANIMATE/BlackFilter.java b/java/ANIMATE/BlackFilter.java new file mode 100644 index 0000000..9b1bf49 --- /dev/null +++ b/java/ANIMATE/BlackFilter.java @@ -0,0 +1,17 @@ +import java.awt.image.*; + +public class BlackFilter extends RGBImageFilter +{ + public BlackFilter() + { + canFilterIndexColorModel=false; + } + public void setColorModel(ColorModel colorModel) + { + substituteColorModel(colorModel,new BlackModel(colorModel)); + } + public int filterRGB(int x,int y,int pixel) + { // must be present, will not get called + return pixel; + } +}; diff --git a/java/ANIMATE/BlackModel.java b/java/ANIMATE/BlackModel.java new file mode 100644 index 0000000..ef9a413 --- /dev/null +++ b/java/ANIMATE/BlackModel.java @@ -0,0 +1,32 @@ +import java.awt.image.*; + +public class BlackModel extends ColorModel +{ + ColorModel originalModel; + + public BlackModel(ColorModel colorModel) + { + super(colorModel.getPixelSize()); + originalModel=colorModel; + } + public int getAlpha(int pixel) + { + return originalModel.getAlpha(pixel); + } + public int getRed(int pixel) + { + return originalModel.getRed(pixel); + } + public int getGreen(int pixel) + { + return originalModel.getGreen(pixel); + } + public int getBlue(int pixel) + { + return originalModel.getBlue(pixel); + } + public int getRGB(int pixel) + { + return originalModel.getRGB(pixel); + } +}; diff --git a/java/ANIMATE/GrayFilter.java b/java/ANIMATE/GrayFilter.java new file mode 100644 index 0000000..7c4a611 --- /dev/null +++ b/java/ANIMATE/GrayFilter.java @@ -0,0 +1,29 @@ +import java.awt.image.*; + +// This class sets up a very simple image graying +// filter. It takes the original color model and +// sets up a substutition to a GrayModel. +public class GrayFilter extends RGBImageFilter +{ + public GrayFilter() + { + canFilterIndexColorModel = true; + } + +// When the color model is first set, create a gray +// model based on the original model and set it up as +// the substitute color model. + + public void setColorModel(ColorModel cm) + { + substituteColorModel(cm, new GrayModel(cm)); + } + +// This method has to be present, but it will never be called +// because we are doing a color model substitution. + + public int filterRGB(int x, int y, int pixel) + { + return pixel; + } +} \ No newline at end of file diff --git a/java/ANIMATE/GrayModel.java b/java/ANIMATE/GrayModel.java new file mode 100644 index 0000000..7350a19 --- /dev/null +++ b/java/ANIMATE/GrayModel.java @@ -0,0 +1,64 @@ +import java.awt.image.*; + +// This class implements a gray color model +// scheme based on another color model. It acts +// like a gray filter. To compute the amount of +// gray for a pixel, it takes the max of the red, +// green, and blue components and uses that value +// for all three color components. + +public class GrayModel extends ColorModel +{ + ColorModel originalModel; + + public GrayModel(ColorModel originalModel) + { + super(originalModel.getPixelSize()); + this.originalModel = originalModel; + } + +// The amount of gray is the max of the red, green, and blue + protected int getGrayLevel(int pixel) + { + return Math.max(originalModel.getRed(pixel), + Math.max(originalModel.getGreen(pixel), + originalModel.getBlue(pixel))); + } + +// Leave the alpha values untouched + public int getAlpha(int pixel) + { + return originalModel.getAlpha(pixel); + } + +// Since gray requires red, green and blue to be the same, +// use the same gray level value for red, green, and blue + + public int getRed(int pixel) + { + return getGrayLevel(pixel); + } + + public int getGreen(int pixel) + { + return getGrayLevel(pixel); + } + + public int getBlue(int pixel) + { + return getGrayLevel(pixel); + } + +// Normally, this method queries the red, green, blue and +// alpha values and returns them in the form 0xaarrggbb. To +// keep from computing the gray level 3 times, we just override +// this method, get the gray level once, and return it as the +// red, green, and blue, and add in the original alpha value. + + public int getRGB(int pixel) + { + int gray = getGrayLevel(pixel); + return (getAlpha(pixel) << 24) + (gray << 16) + + (gray << 8) + gray; + } +} \ No newline at end of file diff --git a/java/ANIMATE/INDEX~1.HTM b/java/ANIMATE/INDEX~1.HTM new file mode 100644 index 0000000..3c40885 --- /dev/null +++ b/java/ANIMATE/INDEX~1.HTM @@ -0,0 +1,11 @@ + + +proto + + +
+ + +
+ + diff --git a/java/ANIMATOR/ANIMATE.MAK b/java/ANIMATOR/ANIMATE.MAK new file mode 100644 index 0000000..2115ea9 --- /dev/null +++ b/java/ANIMATOR/ANIMATE.MAK @@ -0,0 +1,133 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Java Virtual Machine Java Workspace" 0x0809 + +!IF "$(CFG)" == "" +CFG=animate - Java Virtual Machine Debug +!MESSAGE No configuration specified. Defaulting to animate - Java Virtual\ + Machine Debug. +!ENDIF + +!IF "$(CFG)" != "animate - Java Virtual Machine Release" && "$(CFG)" !=\ + "animate - Java Virtual Machine Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "animate.mak" CFG="animate - Java Virtual Machine Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "animate - Java Virtual Machine Release" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE "animate - Java Virtual Machine Debug" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +JAVA=jvc.exe + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Animate.class" + +CLEAN : + -@erase "$(INTDIR)\Animate.class" + +# ADD BASE JAVA /O +# ADD JAVA /O + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Animate.class" + +CLEAN : + -@erase "$(INTDIR)\Animate.class" + +# ADD BASE JAVA /g +# ADD JAVA /g + +!ENDIF + +################################################################################ +# Begin Target + +# Name "animate - Java Virtual Machine Release" +# Name "animate - Java Virtual Machine Debug" + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\index.html + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\animate.java + +!IF "$(CFG)" == "animate - Java Virtual Machine Release" + + +"$(INTDIR)\Animate.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "animate - Java Virtual Machine Debug" + + +"$(INTDIR)\Animate.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/java/ANIMATOR/ANIMATE.MDP b/java/ANIMATOR/ANIMATE.MDP new file mode 100644 index 0000000..f21fd9e Binary files /dev/null and b/java/ANIMATOR/ANIMATE.MDP differ diff --git a/java/ANIMATOR/ANIMAT~1.CLA b/java/ANIMATOR/ANIMAT~1.CLA new file mode 100644 index 0000000..015faab Binary files /dev/null and b/java/ANIMATOR/ANIMAT~1.CLA differ diff --git a/java/ANIMATOR/Animate.java b/java/ANIMATOR/Animate.java new file mode 100644 index 0000000..7415449 --- /dev/null +++ b/java/ANIMATOR/Animate.java @@ -0,0 +1,79 @@ +import java.awt.*; +import java.applet.Applet; + +public class Animate extends java.applet.Applet implements Runnable +{ + Image mImages[]; + Thread mTimerThread; + int mImageCount; + int mSleepTime; + int mImageIndex; + String mImagePrefix; + + MediaTracker mMediaTracker; + + public Animate() + { + } + public void init() + { + mImageCount=Integer.parseInt(getParameter("image_count")); + mSleepTime=Integer.parseInt(getParameter("sleep")); + mImagePrefix=getParameter("prefix"); + mImages=new Image[imageCount()]; + mImageIndex=0; + } + public void start() + { + if(null==mTimerThread){mTimerThread=new Thread(this);mTimerThread.start();} + if(null==mMediaTracker)mMediaTracker=new MediaTracker(this); + for(int mediaIndex=0;mediaIndex=imageCount())mImageIndex=0; + } + } + public void update(Graphics graphics) + { + paint(graphics); + } + public void paint(Graphics graphics) + { + if(true==mMediaTracker.checkID(mImageIndex))graphics.drawImage(mImages[mImageIndex],0,0,this); + else if(true==mMediaTracker.checkID(0))graphics.drawImage(mImages[0],0,0,this); + } + private int imageCount() + { + return mImageCount; + } + private int sleepTime() + { + return mSleepTime; + } + private String imagePrefix() + { + return mImagePrefix; + } +} diff --git a/java/ANIMATOR/INDEX~1.HTM b/java/ANIMATOR/INDEX~1.HTM new file mode 100644 index 0000000..ad81f42 --- /dev/null +++ b/java/ANIMATOR/INDEX~1.HTM @@ -0,0 +1,16 @@ + + +proto + + +
+ + + + + + +
+The source. + + diff --git a/java/ANIMATOR/ROLL1.JPG b/java/ANIMATOR/ROLL1.JPG new file mode 100644 index 0000000..1a7d2b8 Binary files /dev/null and b/java/ANIMATOR/ROLL1.JPG differ diff --git a/java/ANIMATOR/ROLL2.JPG b/java/ANIMATOR/ROLL2.JPG new file mode 100644 index 0000000..ebc828d Binary files /dev/null and b/java/ANIMATOR/ROLL2.JPG differ diff --git a/java/ANIMATOR/ROLL3.JPG b/java/ANIMATOR/ROLL3.JPG new file mode 100644 index 0000000..bfed37c Binary files /dev/null and b/java/ANIMATOR/ROLL3.JPG differ diff --git a/java/ANIMATOR/ROLL4.JPG b/java/ANIMATOR/ROLL4.JPG new file mode 100644 index 0000000..0961936 Binary files /dev/null and b/java/ANIMATOR/ROLL4.JPG differ diff --git a/java/ANIMATOR/ROLL5.JPG b/java/ANIMATOR/ROLL5.JPG new file mode 100644 index 0000000..a75a85a Binary files /dev/null and b/java/ANIMATOR/ROLL5.JPG differ diff --git a/java/ANIMATOR/SMK b/java/ANIMATOR/SMK new file mode 100644 index 0000000..0fd29ca --- /dev/null +++ b/java/ANIMATOR/SMK @@ -0,0 +1,623 @@ + 'ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 01 2c ' + '01 2c 00 00 ff db 00 43 00 05 03 04 04 04 03 05 ' + '04 04 04 05 05 05 06 07 0c 08 07 07 07 07 0f 0b ' + '0b 09 0c 11 0f 12 12 11 0f 11 11 13 16 1c 17 13 ' + '14 1a 15 11 11 18 21 18 1a 1d 1d 1f 1f 1f 13 17 ' + '22 24 22 1e 24 1c 1e 1f 1e ff db 00 43 01 05 05 ' + '05 07 06 07 0e 08 08 0e 1e 14 11 14 1e 1e 1e 1e ' + '1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e ' + '1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e ' + '1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e ff c0 ' + '00 11 08 00 c8 01 40 03 01 22 00 02 11 01 03 11 ' + '01 ff c4 00 1f 00 00 01 05 01 01 01 01 01 01 00 ' + '00 00 00 00 00 00 00 01 02 03 04 05 06 07 08 09 ' + '0a 0b ff c4 00 b5 10 00 02 01 03 03 02 04 03 05 ' + '05 04 04 00 00 01 7d 01 02 03 00 04 11 05 12 21 ' + '31 41 06 13 51 61 07 22 71 14 32 81 91 a1 08 23 ' + '42 b1 c1 15 52 d1 f0 24 33 62 72 82 09 0a 16 17 ' + '18 19 1a 25 26 27 28 29 2a 34 35 36 37 38 39 3a ' + '43 44 45 46 47 48 49 4a 53 54 55 56 57 58 59 5a ' + '63 64 65 66 67 68 69 6a 73 74 75 76 77 78 79 7a ' + '83 84 85 86 87 88 89 8a 92 93 94 95 96 97 98 99 ' + '9a a2 a3 a4 a5 a6 a7 a8 a9 aa b2 b3 b4 b5 b6 b7 ' + 'b8 b9 ba c2 c3 c4 c5 c6 c7 c8 c9 ca d2 d3 d4 d5 ' + 'd6 d7 d8 d9 da e1 e2 e3 e4 e5 e6 e7 e8 e9 ea f1 ' + 'f2 f3 f4 f5 f6 f7 f8 f9 fa ff c4 00 1f 01 00 03 ' + '01 01 01 01 01 01 01 01 01 00 00 00 00 00 00 01 ' + '02 03 04 05 06 07 08 09 0a 0b ff c4 00 b5 11 00 ' + '02 01 02 04 04 03 04 07 05 04 04 00 01 02 77 00 ' + '01 02 03 11 04 05 21 31 06 12 41 51 07 61 71 13 ' + '22 32 81 08 14 42 91 a1 b1 c1 09 23 33 52 f0 15 ' + '62 72 d1 0a 16 24 34 e1 25 f1 17 18 19 1a 26 27 ' + '28 29 2a 35 36 37 38 39 3a 43 44 45 46 47 48 49 ' + '4a 53 54 55 56 57 58 59 5a 63 64 65 66 67 68 69 ' + '6a 73 74 75 76 77 78 79 7a 82 83 84 85 86 87 88 ' + '89 8a 92 93 94 95 96 97 98 99 9a a2 a3 a4 a5 a6 ' + 'a7 a8 a9 aa b2 b3 b4 b5 b6 b7 b8 b9 ba c2 c3 c4 ' + 'c5 c6 c7 c8 c9 ca d2 d3 d4 d5 d6 d7 d8 d9 da e2 ' + 'e3 e4 e5 e6 e7 e8 e9 ea f2 f3 f4 f5 f6 f7 f8 f9 ' + 'fa ff da 00 0c 03 01 00 02 11 03 11 00 3f 00 f9 ' + 'fe 8a 28 af eb b3 d2 0a 28 a2 80 0a 28 a2 80 0a ' + '28 a2 80 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 0a ' + '28 a2 80 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 0a ' + '28 a2 80 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 0a ' + '28 a2 80 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 0a ' + '28 a2 80 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 0a ' + '28 a2 80 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 0a ' + '28 a9 2d 6d e7 bb ba 8a d6 d6 09 27 b8 99 c4 71 ' + '45 1a 16 77 62 70 15 40 e4 92 4e 00 14 a5 25 14 ' + 'e5 27 64 80 8e 8a ee b4 6f 84 3f 12 75 6b 56 b9 ' + 'b5 f0 95 ec 68 ae 50 8b b6 4b 67 c8 00 f0 b2 b2 ' + 'b1 1c f5 03 1d 79 e0 d7 63 a5 7e cd be 36 b8 fb ' + '2c 97 da 96 89 65 1c bb 0c e9 e6 c9 24 b0 83 8d ' + 'c3 68 4d ac c3 9e 03 e0 91 f7 b1 cd 7c 46 67 e2 ' + '67 08 e5 6d ac 4e 63 49 35 ba 53 52 6b d6 31 bb ' + '5f 71 4a 12 7d 0f 14 a2 be 8e ff 00 86 5e ff 00 ' + 'a9 e7 ff 00 29 3f fd ba ba 0b 5f d9 a3 c1 8b 6b ' + '12 dd 6b 5a fc b7 01 00 95 e3 96 14 46 6c 72 55 ' + '4c 6c 54 13 d0 12 71 ea 7a d7 c5 e2 fe 90 dc 05 ' + '41 27 4f 15 2a 97 fe 5a 75 34 ff 00 c0 a3 1f c2 ' + 'e5 7b 29 1f 28 d1 5f 59 7f c3 35 78 17 fe 82 de ' + '24 ff 00 c0 88 7f f8 d5 1f f0 cd 5e 05 ff 00 a0 ' + 'b7 89 3f f0 22 1f fe 35 5c 3f f1 32 3c 11 ff 00 ' + '3f 2a 7f e0 b7 fe 63 f6 32 3e 4d a2 be a0 d6 ff ' + '00 66 4d 0a 6f 27 fb 17 c4 fa 95 96 37 79 bf 6c ' + '81 2e 77 74 c6 dd be 5e dc 73 9c e7 39 1d 31 ce ' + '2e a7 fb 30 df c7 63 23 e9 9e 30 b6 b9 bb 18 f2 ' + 'e2 b8 b1 68 63 6e 46 72 ea ee 47 19 3f 74 e4 f1 ' + 'c7 51 ea e0 fc 7f e0 2c 4a 8d f1 ae 12 93 b5 a5 ' + '4e a2 b6 b6 d5 a8 38 a5 d6 fc d6 4b 7b 6a 27 4a ' + '7d 8f 9e 68 af 59 d6 ff 00 67 bf 88 da 7f 93 f6 ' + '4b 6d 37 56 f3 37 6e fb 1d e0 5f 2f 18 c6 ef 38 ' + '27 5c 9c 63 3d 0e 71 c6 78 af 13 78 13 c6 5e 1a ' + 'fb 43 6b 5e 1b d4 ad 61 b6 db e6 dc f9 25 e0 5d ' + 'd8 c7 ef 57 28 79 60 38 6e a7 1d 78 af ba ca 78 ' + 'eb 86 b3 89 46 18 0c 7d 2a 92 96 d1 53 8f 36 f6 ' + 'f8 6f cd be 8b 4d 6e ad ba 21 c6 4b 74 73 74 51 ' + '45 7d 58 82 8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 ' + '8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 ' + '8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 ' + '8a 92 d6 de 7b bb a8 ad 6d 60 92 7b 89 9c 47 14 ' + '51 a1 67 76 27 01 54 0e 49 24 e0 01 5e f3 f0 fb ' + 'f6 70 d5 6f 76 dd f8 d6 ff 00 fb 2e 1e 7f d0 ac ' + 'dd 64 9c fd e1 f3 49 ca 27 21 58 63 7e 41 20 ed ' + '35 f2 7c 59 c7 19 17 08 e1 d5 7c db 10 a9 df e1 ' + '8e f3 95 bf 96 2a ed f4 4d da ca ea ed 0e 31 72 ' + 'd8 f0 bd 32 c2 ff 00 54 be 8e c7 4c b2 b9 bd bb ' + '97 3e 5c 16 f1 34 92 3e 01 27 0a a0 93 80 09 fa ' + '0a f5 9f 04 fe cf 7e 32 d7 21 82 ef 59 9a db 40 ' + 'b4 97 92 b3 83 25 c8 52 81 95 bc a1 80 32 48 05 ' + '59 95 86 0e 47 00 1f a8 3c 23 e1 3f 0e 78 4a c5 ' + 'ac fc 3b a4 5b 69 f1 bf fa c6 40 4c 92 60 b1 1b ' + 'dd b2 cf 8d cd 8d c4 e0 1c 0c 0a db af e4 ce 2e ' + 'fa 4f e6 98 b9 4a 8e 41 41 51 87 49 ce d2 9f af ' + '2e b0 8b f2 7c fb 6f ad 8e 88 d0 5d 4f 26 f0 87 ' + 'c0 0f 01 e8 9e 54 fa 8c 37 3a ed da 79 6e 5a f2 ' + '4c 44 1d 79 25 63 4c 02 ac 7a ab 97 18 00 73 ce ' + '7d 2f 46 d2 34 9d 16 d5 ad 74 7d 2e cb 4d b7 77 ' + '32 34 56 96 eb 12 16 20 02 c4 28 03 38 00 67 d8 ' + '55 ea 2b f9 e7 3e e2 fc f7 88 66 e7 9a 62 e7 56 ' + 'fd 25 27 ca bd 23 f0 af 92 5d cd 54 52 d8 28 a2 ' + '8a f9 c2 82 8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 ' + '8a 28 a0 0e 6f c4 de 04 f0 6f 89 7e d0 da d7 86 ' + 'f4 db a9 ae 76 f9 b7 3e 48 49 db 6e 31 fb d5 c3 ' + '8e 14 0e 1b a0 c7 4e 2b c9 bc 5f fb 35 68 d7 5e ' + '6d c7 85 b5 bb 9d 3e 43 e6 3a db 5e 2f 9d 11 27 ' + '94 45 61 86 45 1c 82 4f 98 71 83 c9 1c fb ed 15 ' + 'f6 fc 39 e2 47 14 70 db 5f d9 d8 d9 c6 2b ec b7 ' + 'cd 0d ad f0 4a f1 db 4d 15 f4 56 7a 22 1c 22 f7 ' + '47 c3 9e 38 f8 4d e3 9f 08 c9 23 5e e8 f2 5e d9 ' + 'a2 34 86 f6 c1 5a 78 42 aa 86 66 62 06 e4 03 3d ' + '5c 2e 70 71 90 33 5c 2d 7e 8e d7 9c 7c 46 f8 35 ' + 'e0 df 18 f9 d7 7f 64 fe c9 d5 64 dc df 6d b3 50 ' + 'bb dc ee 39 92 3f ba f9 66 dc c7 87 38 03 70 15 ' + 'fd 25 c1 9f 4a 18 4d c7 0f c4 78 7e 5e 9e d2 9d ' + 'ed eb 28 3d 7d 5c 5b d7 68 f4 58 ca 87 63 e2 9a ' + '2b d0 fe 27 fc 21 f1 57 81 63 96 fe e6 38 f5 0d ' + '19 5c 28 bf b6 3c 2e e6 21 7c c4 3f 32 13 81 9e ' + 'aa 0b 28 dc 49 af 3c af ea 8c 93 3f cb 73 ec 22 ' + 'c6 e5 95 a3 56 9b eb 17 7d 7b 3e a9 ab ab a7 66 ' + 'ba a3 16 9a d1 85 14 51 5e b8 82 8a 28 a0 02 8a ' + '28 a0 02 8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 8a ' + '28 a0 02 8a 28 a0 02 bb 5f 85 df 0d 3c 47 e3 fb ' + 'e1 fd 9d 07 d9 f4 b8 e6 11 5d ea 12 e3 cb 87 8c ' + '90 06 41 91 b1 8f 95 7b b2 ee 2a 0e 6b a8 f8 05 ' + 'f0 86 7f 1a dd 26 bb ae c7 24 1e 1c 85 f8 19 2a ' + 'f7 cc 0f 28 a7 a8 40 46 19 c7 ba af 39 29 f5 96 ' + '85 a4 e9 ba 16 91 6d a4 69 16 71 d9 d8 da a6 c8 ' + '61 8c 70 a3 af 7e 49 24 92 49 c9 24 92 49 26 bf ' + '9b fc 5c f1 e3 0f c3 12 a9 94 e4 b6 a9 8b 5a 4a ' + '4f 58 53 de eb 7f 7a a2 fe 5f 86 2f e2 bb 4e 06 ' + 'd4 e9 73 6a cc 0f 87 5f 0f 3c 31 e0 4b 1f 23 44 ' + 'b2 dd 72 db 84 97 d7 01 5e e6 40 c4 1d a5 c0 18 ' + '5f 95 7e 50 00 f9 73 8c e4 9e b6 8a 2b f8 5b 33 ' + 'cd 71 b9 b6 2a 78 bc 75 59 54 a9 27 77 29 3b b7 ' + 'ff 00 03 b2 d9 74 3a 52 4b 60 a2 8a 2b 80 61 59 ' + '1e 2d f1 37 87 fc 27 a3 49 ac 78 93 57 b4 d2 ec ' + '53 23 cd b8 90 2e f6 0a 5b 62 0e ae e4 2b 10 8a ' + '0b 1c 70 0d 71 9f b4 37 c5 3b 6f 85 7e 09 1a 9a ' + '5b c3 7b ab de c8 6d f4 db 59 24 00 17 da 49 95 ' + 'c6 43 18 d3 8c ed ea 59 17 2b bb 70 fc fb f1 c7 ' + '8b bc 47 e3 6d 79 b5 cf 14 ea b3 6a 57 ed 1a c4 ' + '24 75 55 08 8b d1 55 14 05 51 c9 38 50 32 49 3d ' + '49 27 ef 78 4b 81 6b e7 b1 fa c5 59 72 51 bd af ' + 'd6 56 de cb b7 9b eb b2 7a db 96 be 25 52 d1 6a ' + 'cf b5 fc 41 fb 56 fc 2a d3 2f 12 0b 26 d7 35 a8 ' + 'da 30 e6 7b 1b 10 a8 a7 24 6c 22 76 8d b3 c0 3c ' + '02 39 1c e7 20 4d e1 df da 9f e1 36 a9 e7 fd ba ' + 'f3 57 d0 fc ad bb 3e df 60 cf e7 67 39 db e4 19 ' + '31 8c 0c ee c7 51 8c f3 8f 81 a8 af d2 9f 85 f9 ' + '23 a7 c9 79 df bf 32 bf e5 6f c0 e2 fa ed 4b f4 ' + '3f 57 f4 7d 53 4d d6 74 e8 b5 2d 1f 51 b4 d4 6c ' + '66 cf 95 73 6b 32 cb 13 e0 95 38 65 24 1c 10 41 ' + 'c7 70 45 5b af cc 2f 86 1f 11 bc 5b f0 e3 59 7d ' + '4b c2 da 97 d9 fc fd 82 ea da 44 12 41 72 8a db ' + '82 ba 9f c4 6e 5c 30 0c c1 58 64 d7 e8 87 c2 2f ' + '1d e9 bf 11 fc 09 63 e2 9d 36 3f b3 f9 fb a3 b9 ' + 'b5 69 56 47 b6 99 4e 1a 36 2b f8 30 c8 04 ab 2b ' + '60 67 15 f9 6f 15 f0 5e 27 20 6a aa 97 3d 26 ec ' + '9e cd 3e cd 7d f6 6b 47 6e 9b 1d d4 31 2a ae 9d ' + '4e b6 8a 28 af 8a 3a 42 a1 bd ba b6 b1 b3 9e f6 ' + 'f6 e2 1b 6b 5b 78 da 59 a6 99 c2 24 68 a3 2c cc ' + 'c7 80 00 04 92 7a 54 d5 f0 67 ed 3f f1 de e7 e2 ' + '1d e4 9e 1a f0 d4 b3 5b 78 4a de 41 b9 b0 51 f5 ' + '27 53 91 23 83 c8 8c 11 95 43 ec cd f3 6d 54 fa ' + '3e 19 e1 ac 4e 7f 8a f6 34 b4 84 75 94 bb 2f d5 ' + 'be 8b f4 4d 98 d6 ac a9 46 ec f7 1f 89 9f b5 57 ' + '82 7c 35 78 74 ff 00 0c d9 4d e2 bb a8 e4 db 34 ' + 'b0 cd f6 7b 55 00 b8 60 b2 95 62 e4 15 52 0a a9 ' + '42 1b 21 ce 31 5e 49 7b fb 5f fc 41 7b c9 de cb ' + 'c3 de 17 86 d5 a4 63 0c 73 43 3c 8e 89 9f 94 33 ' + '89 54 31 03 00 90 ab 9e b8 1d 2b e7 2a 2b f7 5c ' + '07 87 f9 1e 12 9a 8c a9 73 be ae 4d bb fc b4 4b ' + 'e4 8f 32 58 ba b2 7b d8 fa 67 c3 ff 00 b6 1f 8b ' + 'a0 bc 77 d7 fc 27 a1 df da 98 c8 48 ec 64 96 d5 ' + 'c3 e4 60 97 76 94 11 8c 8c 6d 1d 41 cf 18 3e ed ' + 'f0 9b f6 81 f0 07 8f fe cf 63 f6 df ec 3d 6e 5d ' + 'a9 fd 9f a8 30 4f 32 43 b0 6d 86 4f bb 26 5d f6 ' + 'aa f0 ed 82 76 01 5f 9e 14 56 19 9f 87 59 2e 32 ' + '0d 52 87 b2 97 78 b7 f8 a6 ed f7 59 f9 8e 18 ba ' + '91 7a ea 7e b5 51 5f 33 7e c9 1f 1d ee 7c 51 2d ' + 'b7 c3 ff 00 18 4b 35 c6 b6 b1 b7 f6 6e a2 41 63 ' + '78 88 a5 8c 73 1f f9 e8 aa a4 87 3f 7c 03 bb e7 ' + '19 93 e9 9a fc 13 3a c9 b1 39 36 2e 58 5c 4a d5 ' + '6a 9f 46 ba 35 e4 ff 00 e0 3d 4f 52 9d 48 d4 8f ' + '32 0a f1 0f 8c 5f 01 f4 9d 6e d6 e7 58 f0 6d bc ' + '7a 6e ae a8 a4 58 c6 16 3b 5b 8d a0 82 15 70 04 ' + '6e 46 30 72 14 95 e4 02 c5 c7 b7 d1 5e 87 0a 71 ' + '86 6f c2 78 e5 8e ca eb 38 4b 4b af b3 24 9d f9 ' + '64 ba af c5 74 69 ea 54 a2 a4 ac cf ce fd 77 49 ' + 'd4 b4 2d 5e e7 48 d5 ec e4 b3 be b5 7d 93 43 20 ' + 'e5 4f 5e dc 10 41 04 11 90 41 04 12 0d 52 af b9 ' + 'fe 28 fc 34 f0 e7 8f ec 4f f6 8c 1f 67 d5 23 84 ' + 'c5 69 a8 45 9f 32 1e 72 01 19 02 45 ce 7e 56 ec ' + 'cd b4 a9 39 af 8c fc 6d e1 6d 67 c1 de 21 9f 43 ' + 'd7 2d bc 9b 98 be 64 75 e6 39 90 e7 6c 88 df c4 ' + 'a7 07 dc 10 41 00 82 07 fa 0b e1 6f 8b b9 6f 1d ' + 'e1 fd 93 5e cb 17 05 79 d3 7b 3e f2 a7 ad dc 6f ' + 'ba 7a c5 bb 3b ab 4a 5c 93 a6 e2 62 51 45 15 fa ' + 'e9 01 45 14 50 01 45 14 50 01 45 14 50 01 45 14 ' + '50 01 45 14 50 01 5e 8f f0 2f e1 a5 ff 00 8f 3c ' + '43 1d cd c4 1b 3c 3f 65 32 9b e9 9f 70 59 b1 82 ' + '60 42 08 25 98 75 20 8d a0 e7 a9 50 dc 57 85 f4 ' + '5b ff 00 11 f8 86 c7 42 d3 23 df 77 7b 32 c5 1e ' + '43 15 5c f5 66 da 09 0a a3 2c 4e 0e 00 27 b5 7d ' + 'd9 f0 ff 00 c2 ba 6f 83 3c 29 67 a0 e9 b1 c6 04 ' + '28 0c f3 22 6d 37 13 60 07 95 b2 49 cb 11 d3 27 ' + '03 00 70 05 7e 13 e3 9f 89 ef 83 b2 b5 83 c0 ca ' + 'd8 ba e9 f2 ff 00 72 1b 39 fa f4 87 9d de bc b6 ' + '34 a5 0e 67 76 6d 5a db c1 69 6b 15 ad ac 11 c1 ' + '6f 0a 08 e2 8a 34 0a 88 a0 60 2a 81 c0 00 0c 00 ' + '2a 5a 28 af f3 be 52 72 6e 52 77 6c ec 0a 28 a2 ' + 'a4 02 8a 28 a0 0f ce af da bf c5 52 78 ab e3 96 ' + 'bc e1 e6 36 ba 54 9f d9 56 c9 2c 6a a6 31 01 2b ' + '20 f9 7a 83 31 95 81 24 9c 30 e9 d0 79 55 76 7f ' + '1d 2d 6e 6c fe 34 78 d2 2b bb 79 ad e4 6d 72 f2 ' + '50 92 a1 52 51 e6 67 46 c1 ec ca ca c0 f7 04 11 ' + 'c1 ae 32 bf ae b2 5a 34 e8 e5 d4 29 d2 f8 54 23 ' + '6f b9 7e 67 81 51 b7 36 d8 51 45 74 df 09 f4 bb ' + '0d 73 e2 9f 84 b4 4d 52 0f b4 58 6a 1a dd 95 ad ' + 'd4 5b d9 7c c8 a4 9d 15 d7 2a 41 19 52 46 41 07 ' + 'd2 bd 32 0e 83 c0 1f 03 be 2a 78 f3 c3 a9 e2 1f ' + '0b 78 4a 6b dd 2e 49 5a 28 ee 24 ba 82 dd 64 2b ' + 'c3 14 12 ba 96 50 72 37 00 46 43 0c e5 48 1e 87 ' + 'fb 11 6b f7 de 18 f8 cf 7f e0 cd 4a 1b cb 53 ab ' + 'db cb 6f 35 a3 c0 15 a2 bb b6 dc e3 cd dd 87 4d ' + 'a8 27 52 07 f1 30 c8 e3 23 f4 26 c2 d2 d6 c2 c6 ' + 'de c6 c6 da 1b 5b 4b 68 96 18 20 86 30 91 c4 8a ' + '30 a8 aa 38 55 00 00 00 e0 01 5e 0d f1 77 c2 da ' + '7c 1f b5 47 c3 0f 13 69 7a 30 5d 42 f2 db 56 fe ' + 'd6 bb 82 36 f9 e2 86 d5 23 89 e5 c7 03 06 60 81 ' + 'cf 27 72 29 27 0a 07 cf f1 5d 1a 75 b2 5c 54 6a ' + '6d c9 27 f3 4a eb f1 48 d6 83 6a a4 6d dc f5 1a ' + '28 a2 bf 94 8f 74 f1 ff 00 db 07 c5 52 78 5f e0 ' + '6e a8 96 ef 34 77 5a cc 89 a5 44 e9 1a b0 02 40 ' + 'cd 28 6d dd 03 42 92 ae 40 24 16 18 c7 51 f9 eb ' + '5f 77 7e dd ba 6d ed f7 c1 28 6e ad 61 f3 21 d3 ' + 'b5 88 2e 6e 9b 70 1e 5c 65 25 88 36 09 c9 f9 e5 ' + '8c 60 64 fc d9 e8 09 1d 8f c0 ef d9 8f c0 5e 08 ' + 'f0 ec 0f e2 9d 1b 4c f1 4f 88 e5 88 fd b2 e6 f6 ' + '1f 3e da 32 db 4f 97 0c 52 0d bb 57 68 02 42 bb ' + 'ce 58 e5 43 6c 1f d0 de 17 52 a5 1c 99 ce 1f 13 ' + '9b bf c9 2b 2f bb 5b 79 df a9 e4 e3 5b f6 87 e7 ' + '05 15 fa 73 f1 47 f6 72 f8 5b e3 5f 0e cb 63 6b ' + 'e1 9d 33 c3 7a 8a c4 e2 cf 50 d2 6d 12 dd a1 73 ' + 'b4 ee 78 e3 da b3 2f ca 01 57 e7 05 b6 94 27 75 ' + '7e 6c f8 b3 44 ba f0 d7 8a b5 6f 0e 5f 49 0c 97 ' + '7a 55 f4 d6 53 bc 24 98 d9 e2 72 8c 54 90 09 5c ' + 'a9 c6 40 38 ec 2b f4 73 8c cc a2 8a 28 02 de 8b ' + 'a9 5e e8 da cd 96 b1 a6 cd e4 5f 58 dc 47 73 6d ' + '2e d0 db 24 46 0c ad 86 04 1c 10 0e 08 22 bf 53 ' + 'bc 31 ac 5b 78 87 c3 5a 5e bf 64 93 47 6b a9 d9 ' + 'c3 79 0a 4c 00 75 49 10 3a 86 00 90 0e 18 67 04 ' + 'fd 6b f2 9a bf 52 3e 18 e9 b7 ba 37 c3 5f 0b e8 ' + 'fa 94 3e 45 f5 8e 8f 69 6d 73 16 e0 db 24 48 51 ' + '59 72 a4 83 82 08 c8 24 57 e3 de 2d 52 a5 ec b0 ' + 'd5 3e dd e4 bc ed 65 f9 3b 7a 5f cc f4 30 0d dd ' + 'a3 a2 a2 8a 2b f1 33 d2 0a e2 7e 32 78 0a d7 c7 ' + 'fe 10 97 4e db 6d 16 a9 0f ef 34 fb b9 54 9f 25 ' + 'f2 32 a4 8e 76 b8 1b 4f 51 d1 b0 4a 8a ed a8 af ' + '4f 26 cd f1 99 2e 3e 96 61 81 9b 85 5a 52 52 8b ' + '5d d7 7e e9 ec d3 d1 a6 d3 d1 89 a4 d5 99 f9 df ' + 'ae e9 3a 96 85 ab dc e9 1a bd 9c 96 77 d6 af b2 ' + '68 64 1c a9 eb db 82 08 20 82 32 08 20 82 41 aa ' + '55 f5 2f ed 57 f0 ed 35 3d 21 bc 6f a4 5b c6 b7 ' + 'd6 09 ff 00 13 15 8e 26 2f 73 0f ca 03 f1 c6 63 ' + '19 c9 23 ee 67 2d 84 02 be 5a af f4 e3 c3 6e 3a ' + 'c3 71 b6 45 4b 32 a5 65 51 7b b5 23 fc b3 5b a5 ' + 'bf ba f4 94 75 7e eb 57 d5 34 b8 a7 1e 57 60 a2 ' + '8a 2b ef 49 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 ' + '0a 28 a2 80 3e 8e fd 90 3c 15 ff 00 1f 9e 39 bf ' + 'b7 f5 b4 d3 77 a7 fd fd 95 72 bf 44 0c ad ff 00 ' + '3d 54 8a fa 3e b9 bf 86 1a 17 fc 23 5f 0f 74 2d ' + '15 ad 7e cb 35 b5 94 7f 69 8b cc df b6 76 1b a5 ' + 'e7 24 1f de 33 9e 0e 39 e3 8c 57 49 5f e5 a7 89 ' + 'bc 55 53 8a 78 9f 17 98 39 5e 1c ce 30 ec a9 c5 ' + 'da 36 b3 6b 55 ef 3b 36 ae db 47 6c 23 cb 1b 05 ' + '14 51 5f 04 58 51 45 14 00 51 45 14 01 f1 ff 00 ' + 'ed d3 f0 ca 58 35 14 f8 9f a5 ae eb 7b 9f 2a d3 ' + '56 89 51 d9 92 40 0a c7 39 3c a8 42 aa 91 9f ba ' + '03 04 fb c5 ce 3e 55 af d6 4b db 5b 6b eb 39 ec ' + 'af 6d e1 b9 b5 b8 8d a2 9a 19 90 3a 48 8c 30 ca ' + 'ca 78 20 82 41 07 ad 7c ad f1 93 f6 4f 8e 79 66 ' + 'd5 fe 19 5c c3 6c a2 30 4e 8b 77 23 10 4a ab 67 ' + 'ca 9d 89 39 62 10 05 93 8c b3 1d ea 30 a3 f6 8e ' + '08 e3 cc 35 1c 34 32 fc c6 5c bc ba 46 4f 6b 74 ' + '4f b5 ba 3d ad bb 56 d7 ce c4 e1 5b 7c f0 3e 44 ' + 'a2 bb ef 10 7c 18 f8 ab a1 de 25 a5 ef 80 b5 c9 ' + '64 78 c4 80 d8 db 1b c4 c1 24 60 bc 1b d4 1e 0f ' + 'ca 4e 7a 1c 60 8a 9b c3 bf 03 fe 2c eb de 7f d8 ' + '7c 09 ab c3 e4 6d df f6 f4 5b 2c ee ce 36 f9 e5 ' + '37 f4 39 db 9c 71 9c 64 67 f5 37 9d 65 ca 9f b5 ' + '78 88 72 f7 e6 8d be fb 9c 3e ce 77 b5 99 ec 5f ' + '0c 7f 6c bf 12 78 6f c2 16 ba 27 8a 3c 33 ff 00 ' + '09 55 ed af ee e3 d4 9f 53 36 f2 c9 10 03 68 97 ' + 'f7 4f bd c7 23 7e 41 61 8c 82 d9 66 f5 7f d9 b3 ' + '4c f1 4f 89 af 75 0f 8d 3e 3e ba f3 b5 af 11 db ' + '8b 7d 36 d8 47 24 69 61 60 24 2c 11 11 8e 02 39 ' + '08 cb c1 3b 40 7d ec 65 7a e6 7e 0c 7e ca fa 2f ' + '87 e7 5d 5b e2 0c f6 9e 21 be 5d a6 1b 08 43 8b ' + '48 5d 5f 3b 98 9c 19 b2 02 fc ac a1 79 70 55 f8 ' + '23 e9 3a fc 87 8e b8 ea 86 3a 83 cb f2 f6 dc 5b ' + 'f7 a5 b2 69 74 5d 6d 7d de 9b 59 5d 33 bf 0b 85 ' + '71 7c f3 0a 28 a2 bf 22 3d 03 23 c6 5e 1e d3 7c ' + '59 e1 5d 4b c3 7a c4 5e 65 8e a3 6e d0 4b 85 52 ' + 'c9 91 c3 ae e0 40 75 38 65 24 1c 32 83 da b3 7c ' + '27 f1 a7 42 82 e5 bc 33 f1 36 f7 4c f0 77 8b ec ' + 'e2 2f 73 15 d4 fe 55 8d dc 60 80 b7 36 b3 c9 85 ' + '68 df 3c 21 6f 31 4a ba 90 76 16 3d 4d 70 df 19 ' + 'fe 19 78 7f e2 87 85 5b 47 d6 17 c8 bb 87 73 e9 ' + 'fa 84 68 0c b6 92 11 d4 74 dc 87 00 32 12 03 00 ' + '39 0c 15 97 ee b8 27 8b bf b0 6b ba 55 95 e8 cd ' + 'ab f7 8b fe 65 fa ad da db 6b 3e 5c 4d 0f 6a ae ' + 'b7 45 8f 8a 3f b4 6f c2 df 05 78 76 5b eb 5f 13 ' + '69 9e 24 d4 5a 27 36 7a 7e 93 76 97 0d 33 8d a3 ' + '6b c9 1e e5 85 7e 60 4b 3f 38 0d b4 39 1b 6b f3 ' + '67 c5 9a dd d7 89 7c 55 ab 78 8e fa 38 63 bb d5 ' + '6f a6 bd 9d 21 04 46 af 2b 97 60 a0 92 42 e5 8e ' + '32 49 c7 73 5e 9b f1 33 f6 74 f8 91 e0 eb c2 6c ' + 'b4 99 bc 4d a6 bc 9b 61 ba d2 a2 69 5f 04 be d1 ' + '24 20 17 43 b5 41 24 06 41 b8 0d e4 d7 92 de da ' + 'dc d8 de 4f 65 7b 6f 35 b5 d5 bc 8d 14 d0 cc 85 ' + '1e 37 53 86 56 53 c8 20 82 08 3d 2b fa 17 01 99 ' + 'e0 f3 0a 6a a6 16 a2 9a f2 7f 9a dd 7c cf 26 50 ' + '94 1d a4 88 68 ad 1f 0f e8 5a e7 88 6f 1e cb 40 ' + 'd1 b5 1d 5a e9 23 32 bc 36 36 af 3b aa 02 01 62 ' + 'a8 09 03 2c 06 7d c7 ad 7b bf c2 6f d9 5f c5 be ' + '22 fb 3e a5 e3 39 ff 00 e1 1a d3 1f 6b fd 9b 01 ' + 'ef 65 43 b1 b1 b7 ee c3 95 66 19 7c b2 b2 e0 c6 ' + '6b 9f 33 cf 32 fc ae 0e 78 ba aa 3e 5d 5f a2 5a ' + 'bf b8 a8 52 9c df ba 8e 77 f6 53 f8 55 7b e3 ef ' + '1d da 6b 17 fa 7e ff 00 0b 69 17 02 5b e9 65 03 ' + 'cb b8 91 46 e4 b7 01 94 89 32 76 97 5c 60 21 39 ' + '20 b2 67 f4 12 b3 bc 35 a1 e9 3e 1a d0 6c f4 2d ' + '0a c2 1b 0d 36 ce 3f 2e 08 22 1c 28 ea 4e 4f 24 ' + '92 49 2c 49 24 92 49 24 93 5a 35 fc df c5 7c 4b ' + '53 3f c6 7b 66 b9 61 1d 22 bb 2e ef cd f5 f9 2e ' + '97 3d 7a 14 55 28 db a8 51 45 15 f3 06 e1 45 14 ' + '50 04 57 56 f0 5d da cb 6b 75 04 73 db cc 86 39 ' + '62 91 03 23 a9 18 2a c0 f0 41 07 04 1a f8 3f e2 ' + '9f 84 a7 f0 4f 8e 75 0d 06 41 21 b7 8d fc cb 39 ' + '5f 3f bd 81 b9 46 ce d5 0c 40 f9 58 81 8d ca c0 ' + '74 af bd 6b e7 0f db 3f 42 ff 00 90 07 89 61 b5 ' + 'ff 00 9e 96 37 33 f9 9f f0 38 53 6e 7f eb b9 c8 ' + '1f 53 f7 6b fa 1f e8 dd c5 55 32 ae 29 fe cb 9c ' + 'bf 75 8a 8b 56 e8 a7 04 e5 17 ab dd a5 28 f9 b9 ' + '24 63 5a 37 8d cf 9c 68 a2 8a ff 00 40 4e 50 a2 ' + '8a 28 00 a2 8a 28 00 a2 8a 28 00 ad 6f 06 69 90 ' + '6b 5e 30 d1 74 7b a7 91 2d ef f5 08 2d a5 68 c8 ' + '0e 15 e4 55 25 49 04 67 07 8c 83 59 35 d2 7c 2d ' + 'ff 00 92 9d e1 5f fb 0c d9 ff 00 e8 e4 af 2f 3c ' + 'ad 3a 19 66 22 ad 37 69 46 13 69 f6 6a 2d a6 0b ' + '73 ef 9a 28 a2 bf c8 b3 d0 0a 28 a2 80 0a 28 a2 ' + '80 0a 28 a2 80 0a 28 a2 80 0a 28 a2 80 0a c3 f1 ' + 'c7 8b bc 39 e0 9d 05 b5 cf 14 ea b0 e9 b6 0b 22 ' + 'c4 24 75 66 2e ed d1 55 14 16 63 c1 38 50 70 01 ' + '3d 01 23 72 be 17 fd b8 7c 6d ab 6a df 14 a5 f0 ' + '69 9a 68 74 8d 0e 38 4a db 89 32 93 4f 24 42 43 ' + '31 00 0e 42 c8 10 02 5b 1b 58 8c 6f 61 5f 4b c2 ' + '79 03 cf b3 18 e1 9b b4 52 e6 93 5b f2 ab 2d 37 ' + 'd6 ed 2f c4 c6 bd 5f 65 0e 63 47 e2 2f ed 6d e2 ' + 'dd 4a 7b 9b 5f 04 e9 96 9a 15 89 f9 61 ba b9 41 ' + '71 77 c3 93 bf 07 f7 49 b9 76 82 85 5f 19 6c 31 ' + 'e0 8e 32 cb f6 96 f8 cb 6f 79 04 f2 f8 a6 1b b8 ' + 'e3 91 5d e0 9b 4d b6 09 28 07 25 18 a4 6a d8 3d ' + '0e d2 0f 3c 10 79 af 1f a2 bf a1 b0 dc 23 92 61 ' + 'e9 7b 28 e1 60 d7 77 15 27 f7 bb bf c4 f2 5d 7a ' + '8d df 98 fb 5f e0 c7 ed 51 a2 f8 82 75 d2 7e 20 ' + 'c1 69 e1 eb e6 da 21 bf 84 b9 b4 99 d9 f1 b5 81 ' + 'c9 87 00 af cc cc 57 87 25 93 80 7e 93 af c9 5a ' + 'fd 0a fd 91 3c 6d ab 78 df e0 fc 37 3a e4 d3 5d ' + '5f e9 97 92 69 d2 5d cd 26 f7 b9 0a a8 e8 ed c0 ' + 'e4 2c 8a 84 9c 96 d9 b8 92 58 d7 e5 5c 7f c1 98 ' + '6c b2 92 c7 e0 57 2c 1b b4 a3 7d 15 f6 6a fd 37 ' + 'ba bf 55 6d 36 ee c2 e2 1c df 2c 8f 60 a2 8a 2b ' + 'f2 93 b8 28 a2 8a 00 28 a2 8a 00 28 a2 8a 00 28 ' + 'a2 8a 00 2b ca bf 6a ad 32 0b ff 00 83 b7 d7 53 ' + '3c 8a fa 75 d4 17 30 84 20 06 62 e2 2c 36 47 23 ' + '6c ac 78 c7 20 7d 0f aa d7 9c 7e d3 1f f2 44 7c ' + '41 ff 00 6e df fa 53 15 7d b7 86 d5 a7 47 8b f2 ' + 'b9 53 76 7e de 92 f9 39 c5 35 f3 4d a2 27 f0 b3 ' + 'e2 9a 28 a2 bf d5 23 88 28 a2 8a 00 28 a2 8a 00 ' + '28 a2 8a 00 2a ee 81 a9 cf a2 eb ba 7e b1 6a 91 ' + 'bd c5 85 d4 77 31 2c 80 94 2c 8c 18 06 00 83 8c ' + '8e 70 45 52 a2 b3 ad 46 15 e9 ca 95 45 78 c9 34 ' + 'd7 74 f4 68 0f d1 da 2b 85 f8 09 ae 41 af 7c 25 ' + 'd0 27 84 46 8f 69 6a b6 33 46 92 87 28 d0 8f 2f ' + 'e6 c6 36 96 55 57 da 7a 07 1d 7a 9e ea bf c8 fc ' + 'ef 2a ab 93 e6 58 8c be b7 c7 4a 72 83 f5 8b 6b ' + 'bb de dd 1b 5d 9b 3b d3 ba b8 51 45 15 e5 8c 28 ' + 'a2 8a 00 28 a2 8a 00 28 a2 8a 00 28 a2 8a 00 2b ' + 'e1 7f db 87 c1 3a b6 93 f1 4a 5f 19 18 66 9b 48 ' + 'd7 23 84 2d c0 8f 09 0c f1 c4 23 30 92 09 e4 ac ' + '61 c1 21 73 b9 80 ce c6 35 f7 45 61 f8 e3 c2 3e ' + '1c f1 b6 82 da 1f 8a 74 a8 75 2b 06 91 65 11 bb ' + '32 94 75 e8 ca ea 43 29 e4 8c a9 19 04 8e 84 83 ' + 'f4 bc 27 9f bc 87 31 8e 25 ab c5 ae 59 25 bf 2b ' + 'b3 d3 6d 6e 93 fc 0c 6b d2 f6 b0 e5 3c 5f fe 16 ' + '2f ec 6d ff 00 08 3f d9 ff 00 e1 1c d1 7f e4 1b ' + 'b3 ec 5f f0 8e 49 f6 ff 00 f5 58 f2 be d1 b3 fd ' + '77 f0 f9 9e 77 de f9 bc cf e2 af 9c bf 65 bd 13 ' + 'e1 4e bd f1 0d ed 3e 2b ea df 62 b0 16 ce d6 70 ' + 'cf 37 d9 ad 2e 25 c1 c8 9a e0 3a 98 f0 b9 65 1c ' + '06 61 82 c3 01 24 ee be 22 fe c9 3e 2d d3 67 b9 ' + 'ba f0 4e a7 69 ae d8 8f 9a 1b 5b 97 16 f7 7c b9 ' + '1b 32 7f 74 fb 57 69 2e 59 33 86 c2 8e 01 e3 2c ' + 'bf 66 9f 8c b7 17 90 41 2f 85 a1 b4 8e 49 15 1e ' + '79 b5 2b 62 91 02 70 5d 82 48 cd 81 d4 ed 04 f1 ' + 'c0 27 8a fe 86 c3 71 76 49 88 a5 ed 63 8a 82 5d ' + '9c 94 5f dc ec ff 00 03 c9 74 2a 27 6e 53 67 f6 ' + 'b8 f0 d7 c1 0f 0f 5f 68 a3 e1 3e b1 0c f7 72 c4 ' + 'df 6e b4 b0 bc 37 d6 8a 99 3b 64 33 b4 8c 56 52 ' + '72 3c b0 58 15 00 90 9c 79 9f 48 fe c8 9e 09 d5 ' + 'bc 11 f0 7e 1b 6d 72 19 ad 6f f5 3b c9 35 19 2d ' + '26 8f 63 db 06 54 44 46 e4 f2 56 35 72 0e 0a ef ' + 'da 40 2a 6b 8c f8 31 fb 2b e8 be 1f 9d 75 6f 88 ' + '33 da 78 86 f9 76 98 6c 21 0e 2d 21 75 7c ee 62 ' + '70 66 c8 0b f2 b2 85 e5 c1 57 e0 8f a4 eb f2 ae ' + '3f e3 3c 36 67 49 60 30 2f 9a 09 de 52 b6 8e db ' + '25 7e 9b dd db a2 b6 9b f7 61 70 ee 0f 9a 41 45 ' + '14 57 e5 27 70 51 45 14 00 51 45 14 00 51 45 14 ' + '00 51 45 14 00 57 90 fe d6 ba 9c f6 1f 09 4d ac ' + '29 1b 26 a3 a8 43 6d 31 70 49 55 01 a5 ca e0 f0 ' + '77 44 a3 9c f0 4f d4 7a f5 7c b5 fb 64 eb 90 5e ' + '78 af 46 d0 21 11 bb e9 b6 af 34 ce 92 86 2a d3 ' + '15 fd db 28 fb a4 2c 6a dc 9e 44 83 81 d4 fe b3 ' + 'e0 7e 49 2c df 8d f0 31 b5 e3 4a 4e ac bc bd 9a ' + 'e6 4f 75 f6 f9 57 93 77 b3 b1 9d 57 68 b3 c1 e8 ' + 'a2 8a ff 00 4b ce 30 a2 8a 28 00 a2 8a 28 00 a2 ' + '8a 28 00 a2 8a 28 03 da ff 00 64 ef 1a ff 00 62 ' + '78 be 5f 0b df 5c 6d b0 d6 31 e4 6f 7c 2c 77 4a ' + '3e 5c 65 80 1b d7 2b c0 2c cc 22 15 f5 95 7e 73 ' + '5a dc 4f 69 75 15 d5 ac f2 41 71 0b 89 22 96 37 ' + '2a e8 c0 e4 32 91 c8 20 8c 82 2b ed bf 81 7e 3d ' + '8f c7 9e 0b 8e e6 76 c6 ab 63 b6 df 50 46 64 dc ' + 'ee 14 62 60 ab 8c 2b f2 47 00 02 18 0c 85 c9 fe ' + '2a fa 4b 78 7d 3a 18 a8 f1 3e 12 3f bb 9d a3 56 ' + 'dd 25 b4 65 e9 25 68 bf 34 ba c8 e8 a3 3f b2 77 ' + 'd4 51 45 7f 26 1d 01 45 14 50 01 45 14 50 06 77 ' + '88 35 ad 3b 41 b3 4b dd 52 49 a1 b5 69 02 3c cb ' + '6f 24 89 08 c1 25 e5 64 52 22 8c 00 4b 48 fb 51 ' + '7b b0 ad 1a 86 f6 d6 da fa ce 7b 2b db 78 6e 6d ' + '6e 23 68 a6 86 64 0e 92 23 0c 32 b2 9e 08 20 90 ' + '41 eb 5c c7 f6 a7 fc 21 7f e8 de 23 d4 7f e2 9f ' + 'e9 69 ac 5e 4d ff 00 1e be 90 5d 48 c7 f0 8e 76 ' + '3f 3f 09 21 f3 36 b4 fd 54 a8 c6 b4 39 69 df 9f ' + 'b7 7f 4f 3f 2e bd 09 6e db 9d 6d 14 51 5c a5 05 ' + '14 51 40 05 14 51 40 05 14 51 40 05 14 51 40 1c ' + 'ef c4 6d 6b 52 d0 7c 25 3d f6 8b 6d 69 71 a9 cb ' + '71 6d 65 66 97 6e c9 00 9a e2 e2 38 11 a4 2a 0b ' + '6c 56 94 31 03 92 01 00 8c e4 74 55 c9 69 9f f1 ' + '3c f8 87 7f a8 b7 fa 5e 93 a4 5b c5 6f a7 c9 ff ' + '00 2c a3 bf df 70 b7 85 3b 3b aa 79 11 97 e7 61 ' + '33 46 a4 13 32 d7 5b 5d 78 88 46 94 23 4a de f2 ' + 'd5 bf 54 ac be 5f 2d 5b 5d 2e e5 6b a8 51 45 15 ' + 'c8 50 51 45 14 00 51 45 14 01 9b e2 8d 6a c3 c3 ' + '9e 1e be d7 75 39 36 5a 59 42 d2 c9 82 a1 9b 1d ' + '15 77 10 0b 31 c2 81 91 92 40 ef 5f 03 78 a3 5a ' + 'bf f1 1f 88 6f b5 dd 4e 4d f7 77 b3 34 b2 60 b1 ' + '55 cf 45 5d c4 90 aa 30 a0 64 e0 00 3b 57 b3 7e ' + 'd5 7f 11 1f 53 d5 db c1 1a 45 c4 8b 63 60 ff 00 ' + 'f1 31 68 e5 52 97 33 7c a4 27 1c e2 33 9c 82 7e ' + 'fe 72 b9 40 6b c1 eb fb f7 e8 ed e1 f4 f8 7f 26 ' + '96 6f 8c 8d ab e2 92 69 75 8d 2d e3 e8 e7 f1 35 ' + 'db 96 f6 69 a5 c9 5a 77 76 41 45 14 57 f4 59 90 ' + '51 45 14 00 51 45 14 00 51 45 14 00 51 45 14 00 ' + '56 ff 00 c3 ff 00 15 6a 5e 0c f1 5d 9e bd a6 c9 ' + '20 30 b8 13 c2 8f b4 5c 43 90 5e 26 c8 23 0c 07 ' + '5c 1c 1c 11 c8 15 81 45 72 e3 f0 38 7c c3 0d 53 ' + '09 8a 82 9d 39 a7 19 45 ec d3 d1 a6 09 d8 fd 02 ' + 'f0 4f 8a 74 6f 18 f8 7a 0d 73 43 b9 f3 ad a5 f9 ' + '5d 1b 89 21 71 8d d1 ba ff 00 0b 0c 8f 62 08 20 ' + '90 41 3b 75 f0 77 c2 ef 1e eb 3e 00 f1 08 d4 f4 ' + 'c6 f3 ad a5 c2 5e d9 3b 62 3b 94 1d 8f f7 58 64 ' + 'ed 6c 64 12 7a 82 c0 fd 89 f0 bb c7 ba 37 8f fc ' + '3c 35 3d 31 bc 9b 98 b0 97 b6 4e d9 92 d9 cf 63 ' + 'fd e5 38 3b 5b 18 20 1e 84 30 1f e7 67 8b 1e 0e ' + '66 1c 13 88 9e 2f 0c 9d 4c 0b 6b 96 7d 61 7d a3 ' + '35 df a2 95 b9 65 a6 d2 7c a7 5d 3a 8a 5e a7 5b ' + '45 14 57 e2 86 a1 45 14 50 01 45 14 50 07 25 f6 ' + '3d 4b c2 1f bc d2 93 ed de 18 8b ef 69 71 5b b3 ' + 'dc d8 a1 ea 6d 88 3f bc 85 31 91 6f b7 70 05 84 ' + '6c 42 c7 01 dc f0 fe b9 a4 eb f6 6f 77 a4 5f c3 ' + '77 1c 72 18 66 0a 70 f0 4a 00 2d 14 a8 70 d1 c8 ' + 'b9 1b 91 c0 65 ce 08 06 b4 6b 0f c4 1e 19 b6 d5 ' + '2f 13 52 b7 bf d4 74 7d 56 38 c4 49 7d a7 cc 11 ' + 'ca 02 48 57 47 0d 14 c0 6e 7d a2 54 7d 9e 63 94 ' + 'da c7 75 76 fb 5a 75 ff 00 8d a4 bf 9b ff 00 92 ' + '5b bf 36 b5 f2 93 26 cd 6c 6e 51 5c 97 db fc 7f ' + 'a6 71 7d a0 69 1a fd bc 5f 7e 7d 2a f0 da dc cd ' + '9e 9b 2d 67 06 35 c1 20 1d d7 5c 85 2c 39 22 3a ' + '3f e1 3d b0 83 f7 5a a6 81 e2 dd 3e ed 7f d6 5b ' + 'ff 00 60 5d 5d ec f4 fd ed aa 4b 0b 64 60 fc 92 ' + '36 33 83 86 04 03 ea 15 a5 fc 34 a7 fe 16 9b f5 ' + 'b2 f7 92 f5 4a db 3b 30 e7 5d 4e b6 8a e4 bf e1 ' + '64 78 2e 2f f9 0a 6b 3f d8 39 ff 00 57 fd bb 6b ' + '36 97 e7 7a f9 7f 6a 48 fc cc 71 9d 99 db b9 73 ' + '8d c3 3b 9e 1f d7 74 3f 10 d9 bd ee 81 ac e9 da ' + 'b5 aa 48 62 79 ac 6e 92 74 57 00 12 a5 90 90 0e ' + '18 1c 7b 8f 5a ce ae 0f 11 4a 3c d5 29 b4 bc d3 ' + '40 a4 9e cc d1 a2 8a c3 f1 07 8a b4 9d 1e f1 34 ' + 'd6 79 af b5 79 63 12 43 a5 d8 c7 e7 5d 48 a4 95 ' + '57 28 3f d5 c6 58 6d f3 64 29 12 92 03 3a d6 54 ' + 'a9 4e ac b9 60 ae c6 da 5b 9b 95 c9 6b 97 f7 be ' + '21 d4 6e fc 2f a1 ad dd b4 56 b7 11 45 ab 6a ab ' + '20 8d 61 5c 47 34 96 d1 e1 84 a6 69 22 92 31 bd ' + '42 aa 2c a5 d6 4f 32 30 84 ff 00 8a d3 c4 3f f5 ' + '26 e9 e7 fe b8 dd 6a 6f ff 00 a1 db c1 86 5f fa ' + '78 de 8f ff 00 2c 98 71 d1 68 fa 6d 96 91 a7 45 ' + 'a7 e9 f0 f9 36 f1 64 80 58 bb 33 31 2c ce cc c4 ' + 'b3 bb 31 2c ce c4 b3 31 24 92 49 35 d7 15 0c 2f ' + 'bc da 94 fa 25 aa 4f bb 6b 47 e4 93 6b f9 b6 b3 ' + '9f 88 96 ca d6 da c6 ce 0b 2b 2b 78 6d ad 6d e3 ' + '58 a1 86 14 08 91 a2 8c 2a aa 8e 00 00 00 00 e9 ' + '53 51 45 70 b6 db bb 28 28 a2 8a 43 0a 28 a2 80 ' + '0a f1 8f da 43 e2 9c 1e 19 d2 27 f0 be 85 7b 22 ' + 'f8 8a e9 14 49 2d bb 80 6c 63 38 24 93 83 87 65 ' + 'e1 40 c1 01 b7 e5 7e 5d d5 fe 37 7c 72 83 c3 37 ' + '57 7e 1b f0 b2 47 79 ab a2 34 73 de 96 06 2b 29 ' + '32 06 d0 b8 22 47 03 76 47 01 4e 01 dc 43 28 f9 ' + '56 ea e2 7b bb a9 6e ae a7 92 7b 89 9c c9 2c b2 ' + '39 67 76 27 25 98 9e 49 24 e4 93 5f d5 5e 0a 78 ' + '1d 5f 1f 5a 96 7d 9f d3 e5 a1 1b 4a 9d 37 bd 47 ' + 'ba 94 d7 48 75 51 7a cf aa e4 f8 b0 a9 56 da 22 ' + '3a 28 a2 bf b7 8e 60 a2 8a 28 00 a2 8a 28 00 a2 ' + '8a 28 00 a2 8a 28 00 a2 8a 28 00 a2 8a 28 00 ab ' + 'ba 16 ad a9 68 5a bd b6 af a4 5e 49 67 7d 6a fb ' + 'e1 9a 33 ca 9e 9d f8 20 82 41 07 20 82 41 04 1a ' + 'a5 45 67 5a 8d 3a f4 e5 4a ac 54 a3 24 d3 4d 5d ' + '34 f4 69 a7 a3 4d 6e 80 fa bb e1 87 ed 07 a1 eb ' + '31 c5 61 e3 11 1e 8d a9 33 95 17 11 a1 fb 1c 99 ' + '60 17 92 4b 46 7e 63 9d df 28 0a 49 61 9c 0f 6f ' + 'af ce 2a ed 7e 1f 7c 51 f1 97 82 36 c3 a4 ea 5e ' + '7d 82 e7 fd 02 f0 19 60 fe 23 f2 8c 82 9f 33 96 ' + '3b 0a e4 e3 39 af e5 3e 3f fa 34 61 71 8e 58 ce ' + '19 a8 a9 4d dd ba 53 6f 91 ff 00 82 5a b8 f9 26 ' + '9a 77 5a c5 23 78 56 b7 c4 7d d1 45 79 37 c3 ef ' + '8f 5e 0d f1 2e db 6d 5a 4f f8 47 6f ce 7e 4b c9 ' + '41 81 be f1 f9 66 c0 03 e5 51 9d e1 39 60 06 ea ' + 'f5 4b 5b 88 2e ed 62 ba b5 9e 39 ed e6 41 24 52 ' + 'c6 e1 91 d4 8c 86 52 38 20 83 90 45 7f 23 f1 0f ' + '0a 67 3c 37 88 78 6c d7 0d 2a 52 f3 5a 3f f0 c9 ' + '5e 32 5e 71 6d 1b a9 27 b1 2d 14 51 5f 3e 50 51 ' + '45 14 00 51 45 14 00 56 1f 88 3c 1d e1 1f 10 de ' + '25 ee bf e1 5d 0f 56 ba 48 c4 49 35 f6 9f 14 ee ' + 'a8 09 21 43 3a 92 06 58 9c 7b 9f 5a dc a2 b4 a5 ' + '5a a5 29 73 53 93 4f c9 d8 4d 27 b9 c9 7f c2 b1 ' + 'f8 6b ff 00 44 f7 c2 5f f8 26 b7 ff 00 e2 2b 73 ' + 'c3 fa 16 87 e1 eb 37 b2 d0 34 6d 3b 49 b5 79 0c ' + 'af 0d 8d aa 40 8c e4 00 58 aa 00 09 c2 81 9f 61 ' + 'e9 5a 34 56 b5 71 98 8a b1 e5 a9 51 b5 e6 db 12 ' + '8a 5b 20 a2 8a 2b 98 a0 a2 8a 28 00 a2 b2 7c 4b ' + 'e2 5f 0f f8 6a d7 ed 3a fe b3 65 a7 21 47 74 13 ' + 'cc 15 e5 08 01 6d 8b f7 9c 8c 8e 14 13 c8 e3 91 ' + '5e 0d f1 1b f6 8f ff 00 5d 61 e0 6b 0f ef 27 f6 ' + '95 e2 7f bc 37 47 17 fd f0 c1 9f dc 14 af b9 e1 ' + '1f 0e 38 8f 8b aa 28 e5 98 66 e1 d6 72 f7 69 ae ' + '9f 13 d1 db b4 6e fc 88 94 d4 77 3d e7 c5 9e 24 ' + 'd0 fc 29 a4 36 ad e2 0d 46 3b 1b 30 eb 1e f7 05 ' + '8b 33 74 55 55 05 98 f5 38 00 f0 09 e8 09 af 97 ' + 'be 31 7c 75 d4 bc 57 6b 73 a1 78 72 19 34 cd 12 ' + '74 55 9a 49 06 2e a7 18 3b d1 8a b1 55 43 90 0a ' + '8c 92 17 93 86 2b 5e 57 e2 3d 7b 59 f1 1e a6 fa ' + '9e bb a9 5c ea 17 6f 91 e6 4c f9 da 0b 16 da a3 ' + 'a2 a8 2c 70 aa 00 19 e0 0a cd af ec cf 0e 7e 8f ' + 'd9 3f 0c 4e 18 ec ce 4b 13 89 8b 4d 69 6a 70 6a ' + 'cd 38 c5 eb 29 27 f6 a5 e5 68 c5 ab 9c f3 aa e5 ' + 'a2 0a 28 a2 bf a0 cc 82 8a 28 a0 02 8a 28 a0 02 ' + '8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 ' + '8a 28 a0 02 8a 28 a0 02 8a 28 a0 02 b7 fc 27 e3 ' + '4f 15 78 52 45 6f 0f eb d7 b6 28 1d a4 f2 12 4d ' + 'd0 b3 32 ed 2c d1 36 51 8e 31 c9 07 a0 f4 15 81 ' + '45 72 63 70 18 5c 7d 19 61 f1 74 a3 52 0f 78 c9 ' + '29 27 ea 9d d3 04 ec 7b ef 84 3f 69 5d 66 d7 ca ' + 'b7 f1 4e 89 6d a8 46 3c b4 6b 9b 36 f2 65 00 70 ' + 'ee ca 72 ae c7 82 00 f2 c6 72 38 07 8f 50 f0 e7 ' + 'c7 9f 87 3a c6 c4 9b 52 b9 d2 66 92 61 12 45 7f ' + '6e 57 39 c6 18 ba 6e 45 5c 9c 65 98 63 04 9c 0e ' + '6b e3 2a 2b f1 9e 20 fa 3c f0 5e 6f 29 54 a5 4a ' + '58 79 3e b4 a5 65 ff 00 80 c9 4a 29 79 45 2f bf ' + '53 45 56 48 fd 0f d1 b5 7d 27 5a b5 6b ad 1f 54 ' + 'b2 d4 ad d1 cc 6d 2d a5 c2 ca 81 80 04 a9 2a 48 ' + 'ce 08 38 f7 15 7a bf 38 ab a4 d2 bc 7b e3 6d 2f ' + 'ec ab 63 e2 cd 6e 18 ed 36 08 21 fb 6c 8d 12 04 ' + 'c6 d5 f2 c9 2a 54 60 0d a4 63 1c 63 15 f9 2e 67 ' + 'f4 52 af 16 e5 80 cc 93 ec a7 4d ab 7f db d1 94 ' + 'af ff 00 80 a3 45 5f ba 3e f9 a2 be 29 ff 00 85 ' + 'e5 f1 4b fe 86 8f fc 90 b6 ff 00 e3 75 bf 6b fb ' + '48 f8 f6 1b 58 a1 92 c7 40 b9 74 40 ad 34 96 d2 ' + '07 90 81 82 cd b6 40 b9 3d 4e 00 1e 80 57 c5 62 ' + 'fe 8c 7c 65 41 27 4e 74 6a 5f f9 67 2d 3f f0 28 ' + '47 f0 b9 5e da 27 d6 f4 57 c9 bf f0 d2 be 3a ff ' + '00 a0 4f 86 ff 00 f0 1e 6f fe 3b 47 fc 34 af 8e ' + 'bf e8 13 e1 bf fc 07 9b ff 00 8e d7 17 fc 4b 77 ' + '1b ff 00 cf ba 7f f8 31 7f 90 fd b4 4f ac a8 af ' + '8e f5 bf da 13 e2 36 a1 e4 fd 92 e7 4d d2 7c bd ' + 'db be c7 66 1b cc ce 31 bb ce 2f d3 07 18 c7 53 ' + '9c f1 8c 4d 4f e3 2f c4 cd 46 c6 4b 3b 8f 15 dc ' + 'a4 72 63 73 5b c3 14 12 0c 10 78 78 d1 58 74 ec ' + '46 47 1d 0d 7a b8 3f a2 ff 00 16 d6 51 95 6a d4 ' + '29 a6 f5 4e 53 72 4a fd 95 37 16 ed aa 5c de ad ' + '74 4e bc 4f b7 eb 9b f1 37 8e fc 1b e1 af b4 2e ' + 'b5 e2 4d 36 d6 6b 6d be 6d b7 9c 1e 75 dd 8c 7e ' + 'e9 72 e7 86 07 85 e8 73 d3 9a f8 63 5b d7 f5 dd ' + '73 c9 fe da d6 b5 2d 4f c8 dd e5 7d b2 e9 e6 f2 ' + 'f7 63 3b 77 13 8c e0 67 1e 82 b3 6b ee b2 9f a2 ' + '95 18 ca 32 cc b3 16 d7 58 d3 82 5d 7a 4e 52 97 ' + '4f ee 68 df 54 b5 87 5f b2 3e b2 f1 37 ed 1f e0 ' + 'db 0f b4 45 a2 d8 6a 5a cc d1 ed f2 a4 d8 2d e0 ' + '97 38 cf cc df 3a e0 13 d6 3e 48 f4 39 af 26 f1 ' + '7f c7 ff 00 1e 6b 7e 6c 1a 74 d6 da 15 a3 f9 88 ' + '16 ce 3c ca 51 b8 01 a4 7c 90 ca 3a 32 04 39 24 ' + 'f1 c6 3c 9a 8a fd 8b 87 3c 0e e0 bc 85 a9 c3 08 ' + 'ab 4d 7d aa af 9f a5 be 17 68 5f ad d4 77 7a 6c ' + 'ad 9b ab 26 59 d4 ef ef f5 4b e9 2f b5 3b db 9b ' + 'db b9 71 e6 4f 71 2b 49 23 e0 00 32 cc 49 38 00 ' + '0f a0 aa d4 51 5f ac d3 a7 0a 50 50 82 4a 29 59 ' + '25 a2 49 6c 92 ec 40 51 45 15 60 14 51 45 00 14 ' + '51 45 00 14 51 45 00 14 51 45 00 14 51 45 00 14 ' + '51 45 00 14 51 45 00 14 51 45 00 14 51 45 00 14 ' + '51 45 00 14 51 45 00 14 51 45 00 14 51 45 00 14 ' + '51 45 00 14 51 45 00 14 51 45 00 14 51 45 00 14 ' + '51 45 00 14 51 45 00 14 51 45 00 14 51 45 00 14 ' + '51 45 00 14 51 45 00 14 51 45 00 7f ff d9 ' diff --git a/java/CASHFLOW/Applet1.class b/java/CASHFLOW/Applet1.class new file mode 100644 index 0000000..b9f016e Binary files /dev/null and b/java/CASHFLOW/Applet1.class differ diff --git a/java/CASHFLOW/Applet1.java b/java/CASHFLOW/Applet1.java new file mode 100644 index 0000000..b0dc86c --- /dev/null +++ b/java/CASHFLOW/Applet1.java @@ -0,0 +1,116 @@ +import java.awt.*; +import java.applet.*; + +/** + * This class reads PARAM tags from its HTML host page and sets + * the color and label properties of the applet. Program execution + * begins with the init() method. + */ +public class Applet1 extends Applet +{ + /** + * The entry point for the applet. + */ + public void init() + { + initForm(); + + usePageParams(); + + // TODO: Add any constructor code after initForm call. + } + + private final String labelParam = "label"; + private final String backgroundParam = "background"; + private final String foregroundParam = "foreground"; + + /** + * Reads parameters from the applet's HTML host and sets applet + * properties. + */ + private void usePageParams() + { + final String defaultLabel = "Default label"; + final String defaultBackground = "C0C0C0"; + final String defaultForeground = "000000"; + String labelValue; + String backgroundValue; + String foregroundValue; + + /** + * Read the , + * , + * and tags from + * the applet's HTML host. + */ + labelValue = getParameter(labelParam); + backgroundValue = getParameter(backgroundParam); + foregroundValue = getParameter(foregroundParam); + + if ((labelValue == null) || (backgroundValue == null) || + (foregroundValue == null)) + { + /** + * There was something wrong with the HTML host tags. + * Generate default values. + */ + labelValue = defaultLabel; + backgroundValue = defaultBackground; + foregroundValue = defaultForeground; + } + + /** + * Set the applet's string label, background color, and + * foreground colors. + */ + label1.setText(labelValue); + label1.setBackground(stringToColor(backgroundValue)); + label1.setForeground(stringToColor(foregroundValue)); + this.setBackground(stringToColor(backgroundValue)); + this.setForeground(stringToColor(foregroundValue)); + } + + /** + * Converts a string formatted as "rrggbb" to an awt.Color object + */ + private Color stringToColor(String paramValue) + { + int red; + int green; + int blue; + + red = (Integer.decode("0x" + paramValue.substring(0,2))).intValue(); + green = (Integer.decode("0x" + paramValue.substring(2,4))).intValue(); + blue = (Integer.decode("0x" + paramValue.substring(4,6))).intValue(); + + return new Color(red,green,blue); + } + + /** + * External interface used by design tools to show properties of an applet. + */ + public String[][] getParameterInfo() + { + String[][] info = + { + { labelParam, "String", "Label string to be displayed" }, + { backgroundParam, "String", "Background color, format \"rrggbb\"" }, + { foregroundParam, "String", "Foreground color, format \"rrggbb\"" }, + }; + return info; + } + + Label label1 = new Label(); + + /** + * Intializes values for the applet and its components + */ + void initForm() + { + this.setBackground(Color.lightGray); + this.setForeground(Color.black); + label1.setText("label1"); + this.setLayout(new BorderLayout()); + this.add("North",label1); + } +} diff --git a/java/CASHFLOW/CASHFLOW.MAK b/java/CASHFLOW/CASHFLOW.MAK new file mode 100644 index 0000000..a14ecdd --- /dev/null +++ b/java/CASHFLOW/CASHFLOW.MAK @@ -0,0 +1,291 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Java Virtual Machine Java Workspace" 0x0809 + +!IF "$(CFG)" == "" +CFG=spread - Java Virtual Machine Debug +!MESSAGE No configuration specified. Defaulting to spread - Java Virtual\ + Machine Debug. +!ENDIF + +!IF "$(CFG)" != "spread - Java Virtual Machine Release" && "$(CFG)" !=\ + "spread - Java Virtual Machine Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "cashflow.mak" CFG="spread - Java Virtual Machine Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "spread - Java Virtual Machine Release" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE "spread - Java Virtual Machine Debug" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "spread - Java Virtual Machine Debug" +JAVA=jvc.exe + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Key.class" "$(OUTDIR)\SpreadSheetInput.class"\ + "$(OUTDIR)\InputField.class" "$(OUTDIR)\Node.class" "$(OUTDIR)\Cell.class"\ + "$(OUTDIR)\SpreadSheet.class" "$(OUTDIR)\SpreadSheetInterface.class"\ + "$(OUTDIR)\PurePassThru.class" "$(OUTDIR)\PureCashflow.class"\ + "$(OUTDIR)\Money.class" "$(OUTDIR)\Prepayment.class" "$(OUTDIR)\Cashflow.class" + +CLEAN : + -@erase "$(INTDIR)\Cashflow.class" + -@erase "$(INTDIR)\Cell.class" + -@erase "$(INTDIR)\InputField.class" + -@erase "$(INTDIR)\Key.class" + -@erase "$(INTDIR)\Money.class" + -@erase "$(INTDIR)\Node.class" + -@erase "$(INTDIR)\Prepayment.class" + -@erase "$(INTDIR)\PureCashflow.class" + -@erase "$(INTDIR)\PurePassThru.class" + -@erase "$(INTDIR)\SpreadSheet.class" + -@erase "$(INTDIR)\SpreadSheetInput.class" + -@erase "$(INTDIR)\SpreadSheetInterface.class" + +# ADD BASE JAVA /O +# ADD JAVA /O + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msjvcobj" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=.\msjvcobj +INTDIR=. + +ALL : "$(OUTDIR)\Key.class" "$(OUTDIR)\SpreadSheetInput.class"\ + "$(OUTDIR)\InputField.class" "$(OUTDIR)\Node.class" "$(OUTDIR)\Cell.class"\ + "$(OUTDIR)\SpreadSheet.class" "$(OUTDIR)\SpreadSheetInterface.class"\ + "$(OUTDIR)\PurePassThru.class" "$(OUTDIR)\PureCashflow.class"\ + "$(OUTDIR)\Money.class" "$(OUTDIR)\Prepayment.class" "$(OUTDIR)\Cashflow.class" + +CLEAN : + -@erase "$(INTDIR)\msjvcobj\Cashflow.class" + -@erase "$(INTDIR)\msjvcobj\Cell.class" + -@erase "$(INTDIR)\msjvcobj\InputField.class" + -@erase "$(INTDIR)\msjvcobj\Key.class" + -@erase "$(INTDIR)\msjvcobj\Money.class" + -@erase "$(INTDIR)\msjvcobj\Node.class" + -@erase "$(INTDIR)\msjvcobj\Prepayment.class" + -@erase "$(INTDIR)\msjvcobj\PureCashflow.class" + -@erase "$(INTDIR)\msjvcobj\PurePassThru.class" + -@erase "$(INTDIR)\msjvcobj\SpreadSheet.class" + -@erase "$(INTDIR)\msjvcobj\SpreadSheetInput.class" + -@erase "$(INTDIR)\msjvcobj\SpreadSheetInterface.class" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE JAVA /g +# ADD JAVA /g + +!ENDIF + +################################################################################ +# Begin Target + +# Name "spread - Java Virtual Machine Release" +# Name "spread - Java Virtual Machine Debug" + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\spread.html + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\SpreadSheetInterface.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Key.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\SpreadSheetInput.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\InputField.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\Node.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\Cell.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\SpreadSheet.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\SpreadSheetInterface.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Key.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\SpreadSheetInput.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\InputField.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\Node.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\Cell.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\SpreadSheet.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\SpreadSheetInterface.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\PurePassThru.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\PurePassThru.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\PurePassThru.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\PureCashflow.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\PureCashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\PureCashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\money.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Money.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Money.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Prepayment.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Prepayment.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Prepayment.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Cashflow.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Cashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Cashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/java/CASHFLOW/Cashflow.001 b/java/CASHFLOW/Cashflow.001 new file mode 100644 index 0000000..a14ecdd --- /dev/null +++ b/java/CASHFLOW/Cashflow.001 @@ -0,0 +1,291 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Java Virtual Machine Java Workspace" 0x0809 + +!IF "$(CFG)" == "" +CFG=spread - Java Virtual Machine Debug +!MESSAGE No configuration specified. Defaulting to spread - Java Virtual\ + Machine Debug. +!ENDIF + +!IF "$(CFG)" != "spread - Java Virtual Machine Release" && "$(CFG)" !=\ + "spread - Java Virtual Machine Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "cashflow.mak" CFG="spread - Java Virtual Machine Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "spread - Java Virtual Machine Release" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE "spread - Java Virtual Machine Debug" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "spread - Java Virtual Machine Debug" +JAVA=jvc.exe + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\Key.class" "$(OUTDIR)\SpreadSheetInput.class"\ + "$(OUTDIR)\InputField.class" "$(OUTDIR)\Node.class" "$(OUTDIR)\Cell.class"\ + "$(OUTDIR)\SpreadSheet.class" "$(OUTDIR)\SpreadSheetInterface.class"\ + "$(OUTDIR)\PurePassThru.class" "$(OUTDIR)\PureCashflow.class"\ + "$(OUTDIR)\Money.class" "$(OUTDIR)\Prepayment.class" "$(OUTDIR)\Cashflow.class" + +CLEAN : + -@erase "$(INTDIR)\Cashflow.class" + -@erase "$(INTDIR)\Cell.class" + -@erase "$(INTDIR)\InputField.class" + -@erase "$(INTDIR)\Key.class" + -@erase "$(INTDIR)\Money.class" + -@erase "$(INTDIR)\Node.class" + -@erase "$(INTDIR)\Prepayment.class" + -@erase "$(INTDIR)\PureCashflow.class" + -@erase "$(INTDIR)\PurePassThru.class" + -@erase "$(INTDIR)\SpreadSheet.class" + -@erase "$(INTDIR)\SpreadSheetInput.class" + -@erase "$(INTDIR)\SpreadSheetInterface.class" + +# ADD BASE JAVA /O +# ADD JAVA /O + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msjvcobj" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=.\msjvcobj +INTDIR=. + +ALL : "$(OUTDIR)\Key.class" "$(OUTDIR)\SpreadSheetInput.class"\ + "$(OUTDIR)\InputField.class" "$(OUTDIR)\Node.class" "$(OUTDIR)\Cell.class"\ + "$(OUTDIR)\SpreadSheet.class" "$(OUTDIR)\SpreadSheetInterface.class"\ + "$(OUTDIR)\PurePassThru.class" "$(OUTDIR)\PureCashflow.class"\ + "$(OUTDIR)\Money.class" "$(OUTDIR)\Prepayment.class" "$(OUTDIR)\Cashflow.class" + +CLEAN : + -@erase "$(INTDIR)\msjvcobj\Cashflow.class" + -@erase "$(INTDIR)\msjvcobj\Cell.class" + -@erase "$(INTDIR)\msjvcobj\InputField.class" + -@erase "$(INTDIR)\msjvcobj\Key.class" + -@erase "$(INTDIR)\msjvcobj\Money.class" + -@erase "$(INTDIR)\msjvcobj\Node.class" + -@erase "$(INTDIR)\msjvcobj\Prepayment.class" + -@erase "$(INTDIR)\msjvcobj\PureCashflow.class" + -@erase "$(INTDIR)\msjvcobj\PurePassThru.class" + -@erase "$(INTDIR)\msjvcobj\SpreadSheet.class" + -@erase "$(INTDIR)\msjvcobj\SpreadSheetInput.class" + -@erase "$(INTDIR)\msjvcobj\SpreadSheetInterface.class" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE JAVA /g +# ADD JAVA /g + +!ENDIF + +################################################################################ +# Begin Target + +# Name "spread - Java Virtual Machine Release" +# Name "spread - Java Virtual Machine Debug" + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\spread.html + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\SpreadSheetInterface.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Key.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\SpreadSheetInput.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\InputField.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\Node.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\Cell.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\SpreadSheet.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\SpreadSheetInterface.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Key.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\SpreadSheetInput.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\InputField.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\Node.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\Cell.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\SpreadSheet.class" : $(SOURCE) "$(INTDIR)" + +"$(INTDIR)\msjvcobj\SpreadSheetInterface.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\PurePassThru.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\PurePassThru.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\PurePassThru.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\PureCashflow.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\PureCashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\PureCashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\money.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Money.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Money.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Prepayment.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Prepayment.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Prepayment.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Cashflow.java + +!IF "$(CFG)" == "spread - Java Virtual Machine Release" + + +"$(INTDIR)\Cashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "spread - Java Virtual Machine Debug" + + +"$(INTDIR)\msjvcobj\Cashflow.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/java/CASHFLOW/Cashflow.class b/java/CASHFLOW/Cashflow.class new file mode 100644 index 0000000..060b67d Binary files /dev/null and b/java/CASHFLOW/Cashflow.class differ diff --git a/java/CASHFLOW/Cashflow.java b/java/CASHFLOW/Cashflow.java new file mode 100644 index 0000000..ce30ace --- /dev/null +++ b/java/CASHFLOW/Cashflow.java @@ -0,0 +1,312 @@ +import java.awt.*; + +public class Cashflow extends java.applet.Applet +{ + SpreadSheetInterface mSpreadSheet; + PurePassThru mPurePassThru=new PurePassThru(); + PureCashflow mPureCashflows[]; + TextField mCtlPrincipal; + TextField mCtlInterest; + TextField mCtlTerm; + TextField mCtlPrepayment; + TextField mCtlIncrement; + TextField mCtlFrequency; + Label mCtlCost; + Label mCtlMsg; + Button mCtlButton; + + public void init() + { + performLayout(); + mSpreadSheet=new SpreadSheetInterface(this,361,10,new Dimension(630,200)); + mSpreadSheet.setDocumentTitle("Paydown Calculator v1.00"); + mSpreadSheet.gridLock(true); + repaint(); + } + public void update(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.update(graphics); + } + public void paint(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.paint(graphics); + } + public boolean mouseDown(Event event,int x,int y) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.mouseDown(event,x,y); + return true; + } + public boolean keyDown(Event event,int key) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.keyDown(event,key); + return true; + } + public void performLayout() + { + GridBagLayout layout=new GridBagLayout(); + GridBagConstraints constraints=new GridBagConstraints(); + setFont(new Font("Fixed",Font.BOLD,12)); + setLayout(layout); + + constraints.fill=GridBagConstraints.BOTH; + constraints.weightx=0.25; + Label prnLabel=new Label("Principal",Label.LEFT); + layout.setConstraints(prnLabel,constraints); + add(prnLabel); + mCtlPrincipal=new TextField("$100000.00"); + layout.setConstraints(mCtlPrincipal,constraints); + add(mCtlPrincipal); + + Label intLabel=new Label("Interest",Label.LEFT); + layout.setConstraints(intLabel,constraints); + add(intLabel); + mCtlInterest=new TextField("8.00%"); + layout.setConstraints(mCtlInterest,constraints); + add(mCtlInterest); + + Label trmLabel=new Label("Term",Label.LEFT); + layout.setConstraints(trmLabel,constraints); + add(trmLabel); + mCtlTerm=new TextField("360"); + layout.setConstraints(mCtlTerm,constraints); + add(mCtlTerm); + constraints.gridwidth=GridBagConstraints.REMAINDER; + mCtlButton=new Button("Calculate"); + layout.setConstraints(mCtlButton,constraints); + add(mCtlButton); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label ppyLabel=new Label("Prepayment",Label.LEFT); + layout.setConstraints(ppyLabel,constraints); + add(ppyLabel); + mCtlPrepayment=new TextField("$0.00"); + layout.setConstraints(mCtlPrepayment,constraints); + add(mCtlPrepayment); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label ppyHlpLabel=new Label("Enter the amount of your prepayment(s)."); + layout.setConstraints(ppyHlpLabel,constraints); + add(ppyHlpLabel); + + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label incLabel=new Label("Increment",Label.LEFT); + layout.setConstraints(incLabel,constraints); + add(incLabel); + mCtlIncrement=new TextField("$0.00"); + layout.setConstraints(mCtlIncrement,constraints); + add(mCtlIncrement); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label incHlpLabel=new Label("Increment the prepayment(s) by this amount."); + layout.setConstraints(incHlpLabel,constraints); + add(incHlpLabel); + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label frqLabel=new Label("Frequency",Label.LEFT); + layout.setConstraints(frqLabel,constraints); + add(frqLabel); + mCtlFrequency=new TextField("0.00"); + layout.setConstraints(mCtlFrequency,constraints); + add(mCtlFrequency); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label frqHlpLabel=new Label("Frequency at which to increment the prepayments (ie) number of months."); + layout.setConstraints(frqHlpLabel,constraints); + add(frqHlpLabel); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label costLabel=new Label("Cost Of Capital:",Label.LEFT); + layout.setConstraints(costLabel,constraints); + add(costLabel); + mCtlCost=new Label("$0.00",Label.LEFT); +// constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mCtlCost,constraints); + add(mCtlCost); + mCtlMsg=new Label("",Label.LEFT); + constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mCtlMsg,constraints); + add(mCtlMsg); + } + public boolean action(Event event,Object object) + { + if(null!=mCtlButton&&mCtlButton==event.target)performCalc(); + return true; + } + public void performCalc() + { + Prepayment prepayment=new Prepayment(); + String strPrincipal=mCtlPrincipal.getText(); + String strInterest=mCtlInterest.getText(); + String strTerm=mCtlTerm.getText(); + String strPrepayment=mCtlPrepayment.getText(); + String strIncrement=mCtlIncrement.getText(); + String strFrequency=mCtlFrequency.getText(); + Double workDouble; + double principal; + double interest; + int term; + int itemIndex; + + workDouble=new Double(0); + strPrincipal=strPrincipal.replace('$',' '); + workDouble=workDouble.valueOf(strPrincipal); + principal=workDouble.doubleValue(); + strInterest=strInterest.replace('%',' '); + workDouble=workDouble.valueOf(strInterest); + interest=workDouble.doubleValue(); + term=Integer.parseInt(strTerm); + strPrepayment=strPrepayment.replace('$',' '); + workDouble=workDouble.valueOf(strPrepayment); + prepayment.amount(workDouble.doubleValue()); + strIncrement=strIncrement.replace('$',' '); + workDouble=workDouble.valueOf(strIncrement); + prepayment.increment(workDouble.doubleValue()); + workDouble=workDouble.valueOf(strFrequency); + prepayment.frequency(workDouble.doubleValue()); + + mPurePassThru.issBal(principal); + mPurePassThru.wac(interest); + mPurePassThru.coupon(interest); + mPurePassThru.wam((short)term); + mPurePassThru.origTerm((short)term); + mPurePassThru.psa(0.00); + mCtlMsg.setText("Please wait a few moments..."); + mCtlMsg.repaint(); + if(0.00!=prepayment.amount()||0.00!=prepayment.increment())generateFlows(prepayment); + else generateFlows(); + Money money=new Money(0); + mSpreadSheet.clear(); + repaint(); + mSpreadSheet.setCellData(0,0,"BeginBal"); + mSpreadSheet.setCellData(0,1,"SMM"); + mSpreadSheet.setCellData(0,2,"MtgPay"); + mSpreadSheet.setCellData(0,3,"NetIntPay"); + mSpreadSheet.setCellData(0,4,"GrossIntPay"); + mSpreadSheet.setCellData(0,5,"SchedPrinPay"); + mSpreadSheet.setCellData(0,6,"Prepayment"); + mSpreadSheet.setCellData(0,7,"TotPrin"); + mSpreadSheet.setCellData(0,8,"Cashflow"); + mSpreadSheet.setCellData(0,9,"Factor"); + + for(itemIndex=0;itemIndex0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(0.00); + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } + public void generateFlows(Prepayment prepayment) + { + double issBal; + double tmpCPR; + int actualMonth; + int indexFlows; + + indexFlows=0; + mPureCashflows=new PureCashflow[mPurePassThru.wam()]; + issBal=mPurePassThru.issBal(); + for(int wam=mPurePassThru.wam();wam>0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(prepayment.amount()); + prepayment.period(prepayment.period()+1); + if(prepayment.period()>prepayment.frequency()) + { + prepayment.amount(prepayment.amount()+prepayment.increment()); + prepayment.period(1); + } + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } +} + diff --git a/java/CASHFLOW/Cashflow.mdp b/java/CASHFLOW/Cashflow.mdp new file mode 100644 index 0000000..82413c7 Binary files /dev/null and b/java/CASHFLOW/Cashflow.mdp differ diff --git a/java/CASHFLOW/Cell.class b/java/CASHFLOW/Cell.class new file mode 100644 index 0000000..bee4972 Binary files /dev/null and b/java/CASHFLOW/Cell.class differ diff --git a/java/CASHFLOW/InputField.class b/java/CASHFLOW/InputField.class new file mode 100644 index 0000000..1e23dce Binary files /dev/null and b/java/CASHFLOW/InputField.class differ diff --git a/java/CASHFLOW/Key.class b/java/CASHFLOW/Key.class new file mode 100644 index 0000000..5150a39 Binary files /dev/null and b/java/CASHFLOW/Key.class differ diff --git a/java/CASHFLOW/MSJVCOBJ/CASHFL~1.CLA b/java/CASHFLOW/MSJVCOBJ/CASHFL~1.CLA new file mode 100644 index 0000000..a240138 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/CASHFL~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/CASHFL~1.HTM b/java/CASHFLOW/MSJVCOBJ/CASHFL~1.HTM new file mode 100644 index 0000000..8506038 --- /dev/null +++ b/java/CASHFLOW/MSJVCOBJ/CASHFL~1.HTM @@ -0,0 +1,21 @@ + + +Paydown Calculator + + +
+Diversified Software Solutions. +
+
+Try the Paydown Calculator JAVA applet. + +
Inquiries, comments are welcome. We also provide customization services to meet your special needs. Please send email to +
+europa@li.net +
+ + + +
+ + diff --git a/java/CASHFLOW/MSJVCOBJ/CELL~1.CLA b/java/CASHFLOW/MSJVCOBJ/CELL~1.CLA new file mode 100644 index 0000000..3c78f15 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/CELL~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/INPUTF~1.CLA b/java/CASHFLOW/MSJVCOBJ/INPUTF~1.CLA new file mode 100644 index 0000000..b375cb3 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/INPUTF~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/KEY~1.CLA b/java/CASHFLOW/MSJVCOBJ/KEY~1.CLA new file mode 100644 index 0000000..3024984 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/KEY~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/MONEY~1.CLA b/java/CASHFLOW/MSJVCOBJ/MONEY~1.CLA new file mode 100644 index 0000000..f15294a Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/MONEY~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/NODE~1.CLA b/java/CASHFLOW/MSJVCOBJ/NODE~1.CLA new file mode 100644 index 0000000..2735797 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/NODE~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/PREPAY~1.CLA b/java/CASHFLOW/MSJVCOBJ/PREPAY~1.CLA new file mode 100644 index 0000000..5027917 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/PREPAY~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/PURECA~1.CLA b/java/CASHFLOW/MSJVCOBJ/PURECA~1.CLA new file mode 100644 index 0000000..0b1ea2d Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/PURECA~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/PUREPA~1.CLA b/java/CASHFLOW/MSJVCOBJ/PUREPA~1.CLA new file mode 100644 index 0000000..fb021b9 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/PUREPA~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/SPREAD~1.CLA b/java/CASHFLOW/MSJVCOBJ/SPREAD~1.CLA new file mode 100644 index 0000000..d17624f Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/SPREAD~1.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/SPREAD~2.CLA b/java/CASHFLOW/MSJVCOBJ/SPREAD~2.CLA new file mode 100644 index 0000000..9f53e62 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/SPREAD~2.CLA differ diff --git a/java/CASHFLOW/MSJVCOBJ/SPREAD~3.CLA b/java/CASHFLOW/MSJVCOBJ/SPREAD~3.CLA new file mode 100644 index 0000000..aa0b7b1 Binary files /dev/null and b/java/CASHFLOW/MSJVCOBJ/SPREAD~3.CLA differ diff --git a/java/CASHFLOW/Money.class b/java/CASHFLOW/Money.class new file mode 100644 index 0000000..029c720 Binary files /dev/null and b/java/CASHFLOW/Money.class differ diff --git a/java/CASHFLOW/Money.java b/java/CASHFLOW/Money.java new file mode 100644 index 0000000..ce714fa --- /dev/null +++ b/java/CASHFLOW/Money.java @@ -0,0 +1,85 @@ +class Money +{ +private double mValue; +public Money() +{ + setValue(0.00); +} +public Money(double value) +{ + setValue(value); +} +public Money(Money money) +{ + setValue(money.getValue()); +} +public double getValue() +{ + return mValue; +} +public void setValue(double value) +{ + mValue=value; +} +public String toString() +{ + String strDouble; + String strFixed; + String strFinal; + String strFraction; + int strLength; + int commaCount; + int initPos; + int lastPos; + int ptIndex; + + lastPos=0; + strFraction=new String(); + strFinal=new String(); + strDouble=stringRep(getValue()); // strDouble=String.valueOf(getValue()); + strLength=strDouble.length(); + for(ptIndex=0;ptIndex=strLength)strFraction=".00"; + else strFraction=strDouble.substring(ptIndex,strLength); + if(2==strFraction.length())strFraction+="0"; + strFixed=strDouble.substring(0,ptIndex); + strLength=strFixed.length(); + initPos=strLength%3; + commaCount=strLength/3; + if(0==initPos) + { + initPos+=3; + commaCount--; + } + strFinal+="$"; + for(int count=0;count=strLength)return String.valueOf(value); + strFraction=strRep.substring(ptIndex+1,strLength); + strFractionLength=strFraction.length(); + if(strFractionLength>2)strFraction=strRep.substring(ptIndex+1,strLength-(strFractionLength-2)); + strWhole=strRep.substring(0,ptIndex); + return strWhole+"."+strFraction; +} +}; diff --git a/java/CASHFLOW/NOTES.TXT b/java/CASHFLOW/NOTES.TXT new file mode 100644 index 0000000..22a389f --- /dev/null +++ b/java/CASHFLOW/NOTES.TXT @@ -0,0 +1,11 @@ +// +// * Parse a spreadsheet formula. The syntax is defined as: +// * +// * formula -> value +// * formula -> value op value +// * value -> '(' formula ')' +// * value -> cell +// * value -> +// * op -> '+' | '*' | '/' | '-' +// * cell -> +// */ diff --git a/java/CASHFLOW/Node.class b/java/CASHFLOW/Node.class new file mode 100644 index 0000000..2cbdaa5 Binary files /dev/null and b/java/CASHFLOW/Node.class differ diff --git a/java/CASHFLOW/Page1.htm b/java/CASHFLOW/Page1.htm new file mode 100644 index 0000000..b2b1781 --- /dev/null +++ b/java/CASHFLOW/Page1.htm @@ -0,0 +1,22 @@ + + + + + + +

 

+ + + + + + + + + + + \ No newline at end of file diff --git a/java/CASHFLOW/Prepayment.class b/java/CASHFLOW/Prepayment.class new file mode 100644 index 0000000..f672a0a Binary files /dev/null and b/java/CASHFLOW/Prepayment.class differ diff --git a/java/CASHFLOW/Prepayment.java b/java/CASHFLOW/Prepayment.java new file mode 100644 index 0000000..ea83f86 --- /dev/null +++ b/java/CASHFLOW/Prepayment.java @@ -0,0 +1,55 @@ + +public class Prepayment +{ + double mAmount; + double mIncrement; + double mFrequency; + int mPeriod; + + public Prepayment() + { + mAmount=0.00; + mIncrement=0.00; + mFrequency=0.00; + mPeriod=1; + } + public Prepayment(double amount,double increment,double frequency) + { + mAmount=amount; + mIncrement=increment; + mFrequency=frequency; + mPeriod=1; + } + public double amount() + { + return mAmount; + } + public void amount(double amount) + { + mAmount=amount; + } + public double increment() + { + return mIncrement; + } + public void increment(double increment) + { + mIncrement=increment; + } + public double frequency() + { + return mFrequency; + } + public void frequency(double frequency) + { + mFrequency=frequency; + } + public int period() + { + return mPeriod; + } + public void period(int period) + { + mPeriod=period; + } +}; diff --git a/java/CASHFLOW/Proto.class b/java/CASHFLOW/Proto.class new file mode 100644 index 0000000..1466b53 Binary files /dev/null and b/java/CASHFLOW/Proto.class differ diff --git a/java/CASHFLOW/Proto.java b/java/CASHFLOW/Proto.java new file mode 100644 index 0000000..595298e --- /dev/null +++ b/java/CASHFLOW/Proto.java @@ -0,0 +1,306 @@ +import java.awt.*; + +public class Proto extends java.applet.Applet +{ + SpreadSheetInterface mSpreadSheet; + PurePassThru mPurePassThru=new PurePassThru(); + PureCashflow mPureCashflows[]; + TextField mCtlPrincipal; + TextField mCtlInterest; + TextField mCtlTerm; + + TextField mCtlPrepayment; + TextField mCtlIncrement; + TextField mCtlFrequency; + Label mCtlCost; + + Button mCtlButton; + + public void init() + { + performLayout(); + mSpreadSheet=new SpreadSheetInterface(this,361,10,new Dimension(630,200)); + mSpreadSheet.setDocumentTitle("Paydown Calculator v1.00"); + mSpreadSheet.gridLock(true); + repaint(); + } + public void update(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.update(graphics); + } + public void paint(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.paint(graphics); + } + public boolean mouseDown(Event event,int x,int y) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.mouseDown(event,x,y); + return true; + } + public boolean keyDown(Event event,int key) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.keyDown(event,key); + return true; + } + public void performLayout() + { + GridBagLayout layout=new GridBagLayout(); + GridBagConstraints constraints=new GridBagConstraints(); + setFont(new Font("Fixed",Font.BOLD,12)); + setLayout(layout); + + constraints.fill=GridBagConstraints.BOTH; + constraints.weightx=0.25; + Label prnLabel=new Label("Principal",Label.LEFT); + layout.setConstraints(prnLabel,constraints); + add(prnLabel); + mCtlPrincipal=new TextField("$100000.00"); + layout.setConstraints(mCtlPrincipal,constraints); + add(mCtlPrincipal); + + Label intLabel=new Label("Interest",Label.LEFT); + layout.setConstraints(intLabel,constraints); + add(intLabel); + mCtlInterest=new TextField("8.00%"); + layout.setConstraints(mCtlInterest,constraints); + add(mCtlInterest); + + Label trmLabel=new Label("Term",Label.LEFT); + layout.setConstraints(trmLabel,constraints); + add(trmLabel); + mCtlTerm=new TextField("360"); + layout.setConstraints(mCtlTerm,constraints); + add(mCtlTerm); + constraints.gridwidth=GridBagConstraints.REMAINDER; + mCtlButton=new Button("Calculate"); + layout.setConstraints(mCtlButton,constraints); + add(mCtlButton); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label ppyLabel=new Label("Prepayment",Label.LEFT); + layout.setConstraints(ppyLabel,constraints); + add(ppyLabel); + mCtlPrepayment=new TextField("$0.00"); + layout.setConstraints(mCtlPrepayment,constraints); + add(mCtlPrepayment); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label ppyHlpLabel=new Label("Enter the amount of your prepayment(s)."); + layout.setConstraints(ppyHlpLabel,constraints); + add(ppyHlpLabel); + + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label incLabel=new Label("Increment",Label.LEFT); + layout.setConstraints(incLabel,constraints); + add(incLabel); + mCtlIncrement=new TextField("$0.00"); + layout.setConstraints(mCtlIncrement,constraints); + add(mCtlIncrement); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label incHlpLabel=new Label("Increment the prepayment(s) by this amount."); + layout.setConstraints(incHlpLabel,constraints); + add(incHlpLabel); + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label frqLabel=new Label("Frequency",Label.LEFT); + layout.setConstraints(frqLabel,constraints); + add(frqLabel); + mCtlFrequency=new TextField("0.00"); + layout.setConstraints(mCtlFrequency,constraints); + add(mCtlFrequency); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label frqHlpLabel=new Label("Frequency at which to increment the prepayments (ie) number of months."); + layout.setConstraints(frqHlpLabel,constraints); + add(frqHlpLabel); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label costLabel=new Label("Cost Of Capital:",Label.LEFT); + layout.setConstraints(costLabel,constraints); + add(costLabel); + mCtlCost=new Label("$0.00",Label.LEFT); + constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mCtlCost,constraints); + add(mCtlCost); + } + public boolean action(Event event,Object object) + { + if(null!=mCtlButton&&mCtlButton==event.target)performCalc(); + return true; + } + public void performCalc() + { + Prepayment prepayment=new Prepayment(); + String strPrincipal=mCtlPrincipal.getText(); + String strInterest=mCtlInterest.getText(); + String strTerm=mCtlTerm.getText(); + String strPrepayment=mCtlPrepayment.getText(); + String strIncrement=mCtlIncrement.getText(); + String strFrequency=mCtlFrequency.getText(); + Double workDouble; + double principal; + double interest; + int term; + int itemIndex; + + workDouble=new Double(0); + strPrincipal=strPrincipal.replace('$',' '); + workDouble=workDouble.valueOf(strPrincipal); + principal=workDouble.doubleValue(); + strInterest=strInterest.replace('%',' '); + workDouble=workDouble.valueOf(strInterest); + interest=workDouble.doubleValue(); + term=Integer.parseInt(strTerm); + strPrepayment=strPrepayment.replace('$',' '); + workDouble=workDouble.valueOf(strPrepayment); + prepayment.amount(workDouble.doubleValue()); + strIncrement=strIncrement.replace('$',' '); + workDouble=workDouble.valueOf(strIncrement); + prepayment.increment(workDouble.doubleValue()); + workDouble=workDouble.valueOf(strFrequency); + prepayment.frequency(workDouble.doubleValue()); + + mPurePassThru.issBal(principal); + mPurePassThru.wac(interest); + mPurePassThru.coupon(interest); + mPurePassThru.wam((short)term); + mPurePassThru.origTerm((short)term); + mPurePassThru.psa(0.00); + if(0.00!=prepayment.amount()||0.00!=prepayment.increment())generateFlows(prepayment); + else generateFlows(); + Money money=new Money(0); + mSpreadSheet.clear(); + repaint(); + mSpreadSheet.setCellData(0,0,"BeginBal"); + mSpreadSheet.setCellData(0,1,"SMM"); + mSpreadSheet.setCellData(0,2,"MtgPay"); + mSpreadSheet.setCellData(0,3,"NetIntPay"); + mSpreadSheet.setCellData(0,4,"GrossIntPay"); + mSpreadSheet.setCellData(0,5,"SchedPrinPay"); + mSpreadSheet.setCellData(0,6,"Prepayment"); + mSpreadSheet.setCellData(0,7,"TotPrin"); + mSpreadSheet.setCellData(0,8,"Cashflow"); + mSpreadSheet.setCellData(0,9,"Factor"); + + for(itemIndex=0;itemIndex0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(0.00); + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } + public void generateFlows(Prepayment prepayment) + { + double issBal; + double tmpCPR; + int actualMonth; + int indexFlows; + + indexFlows=0; + mPureCashflows=new PureCashflow[mPurePassThru.wam()]; + issBal=mPurePassThru.issBal(); + for(int wam=mPurePassThru.wam();wam>0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(prepayment.amount()); + prepayment.period(prepayment.period()+1); + if(prepayment.period()>prepayment.frequency()) + { + prepayment.amount(prepayment.amount()+prepayment.increment()); + prepayment.period(1); + } + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } +} + diff --git a/java/CASHFLOW/PureCashflow.class b/java/CASHFLOW/PureCashflow.class new file mode 100644 index 0000000..0c50717 Binary files /dev/null and b/java/CASHFLOW/PureCashflow.class differ diff --git a/java/CASHFLOW/PureCashflow.java b/java/CASHFLOW/PureCashflow.java new file mode 100644 index 0000000..84b8fd1 --- /dev/null +++ b/java/CASHFLOW/PureCashflow.java @@ -0,0 +1,140 @@ + +class PureCashflow +{ + double mBeginBal; + double mSMM; + double mMtgPay; + double mNetIntPay; + double mGrossIntPay; + double mSchedPrinPay; + double mPrepayment; + double mTotPrin; + double mCashFlow; + double mFactor; + +public PureCashflow() +{ + mBeginBal=0.00; + mSMM=0.00; + mMtgPay=0.00; + mNetIntPay=0.00; + mGrossIntPay=0.00; + mSchedPrinPay=0.00; + mPrepayment=0.00; + mTotPrin=0.00; + mCashFlow=0.00; + mFactor=0.00; +} +public PureCashflow(PureCashflow pureCashflow) +{ + beginBal(pureCashflow.beginBal()); + smm(pureCashflow.smm()); + mtgPay(pureCashflow.mtgPay()); + netIntPay(pureCashflow.netIntPay()); + grossIntPay(pureCashflow.grossIntPay()); + schedPrinPay(pureCashflow.schedPrinPay()); + prepayment(pureCashflow.prepayment()); + totPrin(pureCashflow.totPrin()); + cashflow(pureCashflow.cashflow()); + factor(pureCashflow.factor()); +} +public double beginBal() +{ + return mBeginBal; +} +public void beginBal(double beginBal) +{ + mBeginBal=beginBal; +} +public double smm() +{ + return mSMM; +} +public void smm(double smm) +{ + mSMM=smm; +} +public double mtgPay() +{ + return mMtgPay; +} +public void mtgPay(double mtgPay) +{ + mMtgPay=mtgPay; +} +public double netIntPay() +{ + return mNetIntPay; +} +public void netIntPay(double netIntPay) +{ + mNetIntPay=netIntPay; +} +public double grossIntPay() +{ + return mGrossIntPay; +} +public void grossIntPay(double grossIntPay) +{ + mGrossIntPay=grossIntPay; +} +public double schedPrinPay() +{ + return mSchedPrinPay; +} +public void schedPrinPay(double schedPrinPay) +{ + mSchedPrinPay=schedPrinPay; +} +public double prepayment() +{ + return mPrepayment; +} +public void prepayment(double prepayment) +{ + mPrepayment=prepayment; +} +public double totPrin() +{ + return mTotPrin; +} +public void totPrin(double totPrin) +{ + mTotPrin=totPrin; +} +public double cashflow() +{ + return mCashFlow; +} +public void cashflow(double cashFlow) +{ + mCashFlow=cashFlow; +} +public double factor() +{ + return mFactor; +} +public void factor(double factor) +{ + mFactor=factor; +} +public String toString() +{ + String strReturn; + Money money; + + strReturn=new String(); + money=new Money(); + strReturn+=(new Money(beginBal())).toString(); +// strReturn+=(new Money(smm())).toString(); + strReturn+=(new Money(mtgPay())).toString(); + strReturn+=(new Money(netIntPay())).toString(); + strReturn+=(new Money(grossIntPay())).toString(); + strReturn+=(new Money(schedPrinPay())).toString(); + strReturn+=(new Money(prepayment())).toString(); + strReturn+=(new Money(totPrin())).toString(); + strReturn+=(new Money(cashflow())).toString()+" "; +// strReturn+=String.valueOf(factor()); + return strReturn; +} +} diff --git a/java/CASHFLOW/PurePassThru.class b/java/CASHFLOW/PurePassThru.class new file mode 100644 index 0000000..c69426e Binary files /dev/null and b/java/CASHFLOW/PurePassThru.class differ diff --git a/java/CASHFLOW/PurePassThru.java b/java/CASHFLOW/PurePassThru.java new file mode 100644 index 0000000..c8c3696 --- /dev/null +++ b/java/CASHFLOW/PurePassThru.java @@ -0,0 +1,86 @@ +class PurePassThru +{ + int mSanity; + double mIssBal; + double mWAC; + double mCoupon; + short mWAM; + short mOrigTerm; + double mPSA; +public PurePassThru() +{ + mSanity=0; + mIssBal=0.00; + mWAC=0.00; + mCoupon=0.00; + mWAM=0; + mOrigTerm=0; + mPSA=0.00; +} +public PurePassThru(PurePassThru purePassThru) +{ + sanity(purePassThru.sanity()); + issBal(purePassThru.issBal()); + wac(purePassThru.wac()); + coupon(purePassThru.coupon()); + wam(purePassThru.wam()); + origTerm(purePassThru.origTerm()); + psa(purePassThru.psa()); +} +public int sanity() +{ + return mSanity; +} +public void sanity(int sanity) +{ + mSanity=sanity; +} +public double issBal() +{ + return mIssBal; +} +public void issBal(double issBal) +{ + mIssBal=issBal; +} +public double wac() +{ + return mWAC; +} +public void wac(double wac) +{ + mWAC=wac; +} +public double coupon() +{ + return mCoupon; +} +public void coupon(double coupon) +{ + mCoupon=coupon; +} +public short wam() +{ + return mWAM; +} +public void wam(short wam) +{ + mWAM=wam; +} +public short origTerm() +{ + return mOrigTerm; +} +public void origTerm(short origTerm) +{ + mOrigTerm=origTerm; +} +public double psa() +{ + return mPSA; +} +public void psa(double psa) +{ + mPSA=psa; +} +} diff --git a/java/CASHFLOW/SCRAPS.TXT b/java/CASHFLOW/SCRAPS.TXT new file mode 100644 index 0000000..13f6611 --- /dev/null +++ b/java/CASHFLOW/SCRAPS.TXT @@ -0,0 +1,293 @@ +// cell = mCells[mSelectedRow][mSelectedColumn]; +// if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); +// else mInputArea.setText(new String("")); +// if(mCurrent!=null)mCurrent.deselect(); +// mCurrent=cell; +// mCurrent.select(); +// requestFocus(); +// mFullUpdate = true; +// repaint(); + + +// graphics.fillRect(x,y,mWidth-1,mHeight); + + + if(mTransientValue)graphics.drawString("" + mValue,x,y+(mHeight/2)+5); + else + { + if(mValueString.length() > 14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + + + + public synchronized void paint(Graphics graphics) + { + int i; + int j; + int cx; + int cy; + char strLabel[]=new char[1]; + + Dimension clientRect=size(); + graphics.setFont(mTitleFont); + graphics.drawString(mStrTitle,(clientRect.width-graphics.getFontMetrics().stringWidth(mStrTitle))/2,12); + graphics.setColor(mInputColor); + graphics.fillRect(0,mCellDimension.height,clientRect.width,mCellDimension.height); + graphics.setFont(mTitleFont); + for(i=0;i14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + + +//****************************************************************************************************** +// ***************************************** CELLTHREAD *********************************************** +//****************************************************************************************************** +class CellThread extends Thread +{ + private Cell mTarget; + private InputStream mDataStream=null; + private StreamTokenizer mTokenStream; + + public CellThread(Cell cell) + { + super("CellThread"); + mTarget=cell; + } + public void run() + { + try + { + mDataStream = new URL(mTarget.spreadSheet().applet().getDocumentBase(),mTarget.getValueString()).openStream(); + mTokenStream = new StreamTokenizer(mDataStream); + mTokenStream.eolIsSignificant(false); + while(true) + { + switch(mTokenStream.nextToken()) + { + case mTokenStream.TT_EOF: + mDataStream.close(); + return; + default: + break; + case mTokenStream.TT_NUMBER: + mTarget.setTransientValue((float)mTokenStream.nval); + if(!mTarget.spreadSheet().stopped()&&!mTarget.paused())mTarget.spreadSheet().applet().repaint(); + break; + } + try {Thread.sleep(2000);} + catch(InterruptedException exception){break;} + } + } + catch (IOException exception){return;} + } +} + + +// if(mType == Cell.URL) +// { +// mCellThread.stop(); +// mCellThread=null; +// } + + +// mCellThread = new CellThread(this); +// mCellThread.start(); + + +// public CellThread cellThread() +// { +// return mCellThread; +// } + + +//import java.awt.Font; +//import java.awt.Graphics; +//import java.awt.Color; +//import java.util.Date; +//import java.awt.Frame; +//import java.awt.image.*; + +//import java.applet.*; +//import java.util.*; +//import java.net.*; + + + + + public synchronized void paint(Graphics graphics) + { + char strLabel[]=new char[1]; + int i; + int j; + int cx; + int cy; + + graphics.setFont(mTitleFont); + graphics.drawString(mStrTitle,(mControlDimension.width-graphics.getFontMetrics().stringWidth(mStrTitle))/2,12); + graphics.setColor(mInputColor); +// graphics.fillRect(0,mCellDimension.height,mControlDimension.width,mCellDimension.height); +// graphics.setFont(mTitleFont); +// drawGrid(graphics); + for(i=mStartDisplayRow;i14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); +// else graphics.drawString(mValueString,x,y+(mHeight/2)+5); +// +// String printString; +// if(mValueString.length()>14)printString=new String(mValueString.substring(0,14)); +// else printString=mValueString; +// FontMetrics metrics=graphics.getFontMetrics(); +// int stringWidth=metrics.stringWidth(printString); +// if(x+stringWidthmRows||mSelectedColumn>=mColumns) + { + mSelectedRow = -1; + deselect(true); + } + else + { + if(mSelectedRow>=mRows) + { + mSelectedRow = -1; + deselect(true); + return true; + } + select(); + } + return true; + } + public boolean keyDown(Event evt, int key) + { + mFullUpdate=true; + if(mLeftArrow==key||mRightArrow==key||mUpArrow==key||mDownArrow==key)navigate(key); + else mInputArea.keyDown(key); + return true; + } + private void navigate(int key) + { + switch(key) + { + case mLeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + select(); + break; + case mRightArrow : + if(mSelectedColumn>=mColumns)break; + mSelectedColumn++; + select(); + break; + case mUpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + select(); + break; + case mDownArrow : + if(mSelectedRow>=mRows)break; + mSelectedRow++; + select(); + break; + } + } + private void select() + { + Cell cell; + cell=mCells[mSelectedRow][mSelectedColumn]; + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + requestFocus(); + mFullUpdate=true; + repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } +} + +// ****** + +class ScrollManager +{ + private int mFirstVisibleCell; + + public ScrollManager() + { + mFirstVisibleCell=0; + } + public int firstVisibleCell() + { + return mFirstVisibleCell; + } + public void firstVisibleCell(int firstVisibleCell) + { + mFirstVisibleCell=firstVisibleCell; + } +} + +//****************************************************************************************************** +// ***************************************** CELLTHREAD *********************************************** +//****************************************************************************************************** +class CellThread extends Thread +{ + private Cell mTarget; + private InputStream mDataStream=null; + private StreamTokenizer mTokenStream; + + public CellThread(Cell cell) + { + super("CellThread"); + mTarget=cell; + } + public void run() + { + try + { + mDataStream = new URL(mTarget.spreadSheet().getDocumentBase(),mTarget.getValueString()).openStream(); + mTokenStream = new StreamTokenizer(mDataStream); + mTokenStream.eolIsSignificant(false); + while(true) + { + switch(mTokenStream.nextToken()) + { + case mTokenStream.TT_EOF: + mDataStream.close(); + return; + default: + break; + case mTokenStream.TT_NUMBER: + mTarget.setTransientValue((float)mTokenStream.nval); + if(!mTarget.spreadSheet().stopped()&&!mTarget.paused())mTarget.spreadSheet().repaint(); + break; + } + try {Thread.sleep(2000);} + catch(InterruptedException exception){break;} + } + } + catch (IOException exception){return;} + } +} +//****************************************************************************************************** +// ******************************************** CELL *************************************************** +//****************************************************************************************************** +class Cell +{ + public static final int VALUE = 0; + public static final int LABEL = 1; + public static final int URL = 2; + public static final int FORMULA = 3; + + private Node mParseRoot; + private boolean mNeedRedisplay; + private boolean mSelected = false; + private boolean mTransientValue = false; + private int mType=Cell.VALUE; + private String mValueString = ""; + private String mPrintString = "v"; + private float mValue; + private Color mBgColor; + private Color mFgColor; + private Color mHighlightColor; + private int mWidth; + private int mHeight; + private SpreadSheet mSpreadSheet; + private CellThread mCellThread; + private boolean mPaused=false; + + public Cell(SpreadSheet spreadSheet,Color bgColor,Color fgColor,Color highlightColor,int width,int height) + { + mSpreadSheet=spreadSheet; + mBgColor=bgColor; + mFgColor=fgColor; + mHighlightColor=highlightColor; + mWidth=width; + mHeight=height; + mNeedRedisplay=true; + } + public void setRawValue(float value) + { + mValueString=Float.toString(value); + mValue=value; + } + public void setValue(float value) + { + setRawValue(value); + mPrintString="v"+mValueString; + mType=Cell.VALUE; + mPaused=false; + mSpreadSheet.recalculate(); + mNeedRedisplay=true; + } + public void setTransientValue(float value) + { + mTransientValue=true; + mValue=value; + mNeedRedisplay=true; + mSpreadSheet.recalculate(); + } + public void setUnparsedValue(String s) + { + switch (s.charAt(0)) + { + case 'v': + setValue(Cell.VALUE, s.substring(1)); + break; + case 'f': + setValue(Cell.FORMULA, s.substring(1)); + break; + case 'l': + setValue(Cell.LABEL, s.substring(1)); + break; + case 'u': + setValue(Cell.URL, s.substring(1)); + break; + } + } + public String parseFormula(String formula, Node node) + { + String subformula; + String restFormula; + float value; + int length = formula.length(); + Node left; + Node right; + char op; + + if(null==formula)return null; + subformula=parseValue(formula, node); + if(null==subformula||0==subformula.length())return null; + if(subformula==formula)return formula; + switch(op=subformula.charAt(0)) + { + case 0: + return null; + case ')': + return subformula; + case '+': + case '*': + case '-': + case '/': + restFormula = subformula.substring(1); + subformula = parseValue(restFormula, right=new Node()); + if(subformula != restFormula) + { + left = new Node(node); + node.left(left); + node.right(right); + node.op(op); + node.type(Node.OP); + return subformula; + } + else return formula; + default: + return formula; + } + } + public String parseValue(String formula, Node node) + { + char c=formula.charAt(0); + String subformula; + String restFormula; + float value; + int row; + int column; + + restFormula = formula; + if (c == '(') + { + restFormula = formula.substring(1); + subformula = parseFormula(restFormula, node); + if(subformula == null || subformula.length() == restFormula.length())return formula; + else if (! (subformula.charAt(0) == ')'))return formula; + restFormula = subformula; + } + else if (c >= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(int type, String s) + { + mPaused=false; + if(mType == Cell.URL) + { + mCellThread.stop(); + mCellThread=null; + } + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + mCellThread = new CellThread(this); + mCellThread.start(); + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected = true; + mPaused=true; + } + public void deselect() + { + mSelected = false; + mPaused=false; + mNeedRedisplay = true; + mSpreadSheet.repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-2,mHeight-2); + if(null!=mValueString) + { + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + if(!mTransientValue) + { + if(mValueString.length()>14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + public int type() + { + return mType; + } + public Node parseRoot() + { + return mParseRoot; + } + public void needRedisplay(boolean needRedisplay) + { + mNeedRedisplay=needRedisplay; + } + public boolean needRedisplay() + { + return mNeedRedisplay; + } + public float value() + { + return mValue; + } + public CellThread cellThread() + { + return mCellThread; + } + public SpreadSheet spreadSheet() + { + return mSpreadSheet; + } + public boolean paused() + { + return mPaused; + } +} +//****************************************************************************************************** +// *************************************** NODE ******************************************************* +//****************************************************************************************************** +class Node +{ + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + private int mType; + private Node mLeft; + private Node mRight; + private int mRow; + private int mColumn; + private float mValue; + private char mOp; + + public Node() + { + mLeft=null; + mRight=null; + mValue=0; + mRow=-1; + mColumn=-1; + mOp=0; + mType=Node.VALUE; + } + public Node(Node node) + { + mLeft=node.mLeft; + mRight=node.mRight; + mValue=node.mValue; + mRow=node.mRow; + mColumn=node.mColumn; + mOp=node.mOp; + mType=node.mType; + } + public void print(int indentLevel) + { + char l[] = new char[1]; + switch(mType) + { + case Node.VALUE: + break; + case Node.CELL: + l[0] = (char)((int)'A' + column()); + break; + case Node.OP: + mLeft.print(indentLevel + 3); + mRight.print(indentLevel + 3); + break; + } + } + public int type() + { + return mType; + } + public void type(int type) + { + mType=type; + } + public float value() + { + return mValue; + } + public void value(float value) + { + mValue=value; + } + public Node left() + { + return mLeft; + } + public void left(Node left) + { + mLeft=left; + } + public Node right() + { + return mRight; + } + public void right(Node right) + { + mRight=right; + } + public char op() + { + return mOp; + } + public void op(char op) + { + mOp=op; + } + public int row() + { + return mRow; + } + public void row(int row) + { + mRow=row; + } + public int column() + { + return mColumn; + } + public void column(int column) + { + mColumn=column; + } +} + +class InputField +{ + private int mMaxchars = 50; + private Applet mApplet; + private String mStringValue; + private char mBuffer[]; + private int mChars; + private int mWidth; + private int mHeight; + private Color mBgColor; + private Color mFgColor; + + public InputField(String initValue,Applet applet, int width, int height,Color bgColor, Color fgColor) + { + mWidth=width; + mHeight=height; + mBgColor=bgColor; + mFgColor=fgColor; + mApplet=applet; + mBuffer = new char[mMaxchars]; + mChars = 0; + if(initValue != null) + { + initValue.getChars(0, initValue.length(),mBuffer, 0); + mChars = initValue.length(); + } + mStringValue=initValue; + } + public void setText(String val) + { + int i; + for(i=0; i < mMaxchars; i++)mBuffer[i] = 0; + mStringValue=new String(val); + if (val == null) + { + mStringValue= ""; + mChars = 0; + mBuffer[0] = 0; + } + else + { + mStringValue.getChars(0,mStringValue.length(), mBuffer, 0); + mChars = val.length(); + mStringValue = new String(mBuffer); + } + } + public String getValue() + { + return mStringValue; + } + public void paint(Graphics g, int x, int y) + { + g.setColor(mBgColor); + g.fillRect(x, y,mWidth,mHeight); + if (mStringValue!= null) + { + g.setColor(mFgColor); + g.drawString(mStringValue, x, y + (mHeight / 2) + 3); + } + } + public void mouseUp(int x, int y) + { + } + public void keyDown(int key) + { + if(mCharsmControlDimension.height)continue; + graphics.setColor(mApplet.getBackground()); + graphics.draw3DRect(0,cy,mControlDimension.width,2,true); + if(cy+mCellDimension.height>mControlDimension.height)continue; + if(imControlDimension.width)continue; + graphics.setColor(mApplet.getBackground()); + graphics.draw3DRect(cx+mRowLabelWidth,2*mCellDimension.height,1,mControlDimension.height-(2*mCellDimension.height),true); + } + } + public void drawCells(Graphics graphics,boolean updateAll) + { + int i; + int j; + int cx; + int cy; + boolean inDraw=true; + + for(i=mStartDisplayRow;imControlDimension.height)inDraw=false; + if(mCells[i][j]!=null)mCells[i][j].paint(graphics,cx,cy); + } + } + } + } + public void recalculate() + { + for(int row=0;row=mRows||mSelectedColumn>=mColumns) + { + mSelectedRow=-1; + deselect(true); + return true; + } + if(((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight>mControlDimension.height) + { + mSelectedRow=-1; + deselect(true); + return true; + } + if(((mSelectedColumn-mStartDisplayColumn)*mCellDimension.width)+2+mRowLabelWidth+mCellDimension.width>mControlDimension.width) + { + mSelectedColumn=-1; + deselect(true); + return true; + } + select(); + return true; + } + public boolean keyDown(Event evt, int key) + { + if(Key.LeftArrow==key||Key.RightArrow==key||Key.UpArrow==key||Key.DownArrow==key) + { + if(!gridLock()){mInputArea.keyDown(Key.Return);mFullUpdate=true;} + navigate(key); + } + else if(!gridLock()){mInputArea.keyDown(key);mFullUpdate=true;} + return true; + } + private void navigate(int key) + { + switch(key) + { + case Key.LeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + ensureVisible(); + select(); + break; + case Key.RightArrow : + if(mSelectedColumn+1>=mColumns)break; + mSelectedColumn++; + ensureVisible(); + select(); + break; + case Key.UpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + ensureVisible(); + select(); + break; + case Key.DownArrow : + if(mSelectedRow+1>=mRows)break; + mSelectedRow++; + ensureVisible(); + select(); + break; + } + } + private void select() + { + Cell cell=mCells[mSelectedRow][mSelectedColumn]; + + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + mApplet.requestFocus(); + mFullUpdate=true; + mApplet.repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } + private void ensureVisible() + { + int yMin=(2*mCellDimension.height)+2+mTitleHeight; + int xMin=2+mRowLabelWidth+mCellDimension.width; + Point currPoint=new Point(0,0); + + currPoint.y=((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; + currPoint.x=((mSelectedColumn-mStartDisplayColumn)*mCellDimension.width)+2+mRowLabelWidth+mCellDimension.width; + if(currPoint.y>mControlDimension.height)mStartDisplayRow++; + else if(currPoint.ymControlDimension.width)mStartDisplayColumn++; + else if(currPoint.x=mRows||col>=mColumns)return false; + strCellData="l"; + strCellData+=strData; + mCells[row][col].setUnparsedValue(strCellData); + if(repaint)mApplet.repaint(); + return true; + } + public void setDocumentTitle(String strDocumentTitle) + { + mStrTitle=strDocumentTitle; + } + public void gridLock(boolean gridLock) + { + mGridLock=gridLock; + } + public boolean gridLock() + { + return mGridLock; + } +} + +//****************************************************************************************************** +// ******************************************** CELL *************************************************** +//****************************************************************************************************** +class Cell +{ + public static final int VALUE = 0; + public static final int LABEL = 1; + public static final int URL = 2; + public static final int FORMULA = 3; + + private final int mMaxDisplayLength=14; + private Node mParseRoot; + private boolean mNeedRedisplay; + private boolean mSelected = false; + private boolean mTransientValue = false; + private int mType=Cell.VALUE; + private String mValueString = ""; + private String mPrintString = "v"; + private float mValue; + private Color mBgColor; + private Color mFgColor; + private Color mHighlightColor; + private int mWidth; + private int mHeight; + private SpreadSheet mSpreadSheet; + private boolean mPaused=false; + + public Cell(SpreadSheet spreadSheet,Color bgColor,Color fgColor,Color highlightColor,int width,int height) + { + mSpreadSheet=spreadSheet; + mBgColor=bgColor; + mFgColor=fgColor; + mHighlightColor=highlightColor; + mWidth=width; + mHeight=height; + mNeedRedisplay=true; + } + public void setRawValue(float value) + { + mValueString=Float.toString(value); + mValue=value; + } + public void setTransientValue(float value) + { + mTransientValue=true; + mValue=value; + mNeedRedisplay=true; + mSpreadSheet.recalculate(); + } + public void setUnparsedValue(String s) + { + switch (s.charAt(0)) + { + case 'v': + setValue(Cell.VALUE,s.substring(1)); + break; + case 'f': + setValue(Cell.FORMULA,s.substring(1)); + break; + case 'l': + setValue(Cell.LABEL,s.substring(1)); + break; + case 'u': + setValue(Cell.URL, s.substring(1)); + break; + } + } + public String parseFormula(String formula, Node node) + { + String subformula; + String restFormula; + float value; + int length = formula.length(); + Node left; + Node right; + char op; + + if(null==formula)return null; + subformula=parseValue(formula, node); + if(null==subformula||0==subformula.length())return null; + if(subformula==formula)return formula; + switch(op=subformula.charAt(0)) + { + case 0: + return null; + case ')': + return subformula; + case '+': + case '*': + case '-': + case '/': + restFormula = subformula.substring(1); + subformula = parseValue(restFormula, right=new Node()); + if(subformula != restFormula) + { + left = new Node(node); + node.left(left); + node.right(right); + node.op(op); + node.type(Node.OP); + return subformula; + } + else return formula; + default: + return formula; + } + } + public String parseValue(String formula, Node node) + { + char c=formula.charAt(0); + String subformula; + String restFormula; + float value; + int row; + int column; + + restFormula = formula; + if (c == '(') + { + restFormula = formula.substring(1); + subformula = parseFormula(restFormula, node); + if(subformula == null || subformula.length() == restFormula.length())return formula; + else if (! (subformula.charAt(0) == ')'))return formula; + restFormula = subformula; + } + else if (c >= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(float value) + { + setRawValue(value); + mPrintString="v"+mValueString; + mType=Cell.VALUE; + mPaused=false; + mSpreadSheet.recalculate(); + mNeedRedisplay=true; + } + public void setValue(int type, String s) + { + mPaused=false; + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected=true; + mPaused=true; + } + public void deselect() + { + mSelected=false; + mPaused=false; + mNeedRedisplay=true; + mSpreadSheet.applet().repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-1,mHeight-1); + if(null==mValueString)return; + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + String printString; + if(!mTransientValue) + { + if(mValueString.length()>mMaxDisplayLength)printString=new String(mValueString.substring(0,mMaxDisplayLength)); + else printString=new String(mValueString); + } + else printString=new String(""+mValue); + FontMetrics metrics=graphics.getFontMetrics(); + int stringWidth=metrics.stringWidth(printString); + + if(x+stringWidth=mMaxChars?mMaxChars-1:valLength,mBuffer,0); + for(index=0;mBuffer[index]!=0&&index + +Paydown Calculator + + +
+Diversified Software Solutions. +
+
+Try the Paydown Calculator JAVA applet. + +
Inquiries, comments are welcome. We also provide customization services to meet your special needs. Please send email to +
+europa@li.net +
+ + + +
+ + + + + + + + + + + diff --git a/java/CASHFLOW/cashflow.sln b/java/CASHFLOW/cashflow.sln new file mode 100644 index 0000000..5127930 --- /dev/null +++ b/java/CASHFLOW/cashflow.sln @@ -0,0 +1,13 @@ +Microsoft Visual Studio Solution File, Format Version 1.00 +Project("{66355F20-A65B-11D0-BFB5-00A0C91EBFA0}") = "cashflow", "cashflow.vjp", "{CEC84D61-6BF6-11D4-9777-00E0987B8880}" +EndProject +Global + GlobalSection(LocalDeployment) = postSolution + StartupProject = {CEC84D61-6BF6-11D4-9777-00E0987B8880} + EndGlobalSection + GlobalSection(BuildOrder) = postSolution + 0 = {CEC84D61-6BF6-11D4-9777-00E0987B8880} + EndGlobalSection + GlobalSection(DeploymentRoot) = postSolution + EndGlobalSection +EndGlobal diff --git a/java/CASHFLOW/cashflow.suo b/java/CASHFLOW/cashflow.suo new file mode 100644 index 0000000..f1fd1fa Binary files /dev/null and b/java/CASHFLOW/cashflow.suo differ diff --git a/java/CASHFLOW/cashflow.vjp b/java/CASHFLOW/cashflow.vjp new file mode 100644 index 0000000..05af019 Binary files /dev/null and b/java/CASHFLOW/cashflow.vjp differ diff --git a/java/CASHFLOW/codebase.dat b/java/CASHFLOW/codebase.dat new file mode 100644 index 0000000..a768eea --- /dev/null +++ b/java/CASHFLOW/codebase.dat @@ -0,0 +1 @@ +file:/D:\work\JAVA\CASHFLOW diff --git a/java/CASHFLOW/spreadsheet.html b/java/CASHFLOW/spreadsheet.html new file mode 100644 index 0000000..8506038 --- /dev/null +++ b/java/CASHFLOW/spreadsheet.html @@ -0,0 +1,21 @@ + + +Paydown Calculator + + +
+Diversified Software Solutions. +
+
+Try the Paydown Calculator JAVA applet. + +
Inquiries, comments are welcome. We also provide customization services to meet your special needs. Please send email to +
+europa@li.net +
+ + + +
+ + diff --git a/java/COUNTER/ACCESS.CPP b/java/COUNTER/ACCESS.CPP new file mode 100644 index 0000000..6aa1b75 --- /dev/null +++ b/java/COUNTER/ACCESS.CPP @@ -0,0 +1,179 @@ +#include +#include +#include +#include +#include + +AccessManager::AccessManager(void) +: mStrPathAccessLog("/var/log/httpd/access_log"), mStrPathMessageLog("var/log/messages") +{ +} + +AccessManager::AccessManager(const AccessManager &someAccessManager) +{ // private implementation +} + +AccessManager::~AccessManager() +{ +} + +AccessManager &AccessManager::operator=(const AccessManager &someAccessManager) +{ // private implementation +} + +DWORD AccessManager::getAccessLineCount(void) +{ + String strLine; + DWORD lineCount(0); + + File accessFile(mStrPathAccessLog); + if(!accessFile.isOkay())return FALSE; + while(accessFile.getLine(strLine))lineCount++; + return lineCount; +} + +void AccessManager::accessDelta(DWORD prevLines,DWORD currLines) +{ + Block accessLines; + String strLine; + File accessLog; + + accessLog.open(mStrPathAccessLog); + if(!accessLog.isOkay())return; + while(accessLog.getLine(strLine))accessLines.insert(strLine); + accessLog.close(); + for(int indexLine=0;indexLine accessRecords; + SystemTime systemTime; + String strPostfix; + String strPrefix; + String strLine; + File outFile; + SDate currDate; + + mAccessFile.getEntries(accessRecords); + createCounter(accessRecords.size()); + strPrefix=""; + strPostfix="
"; + outFile.open("/home/httpd/html/access/access.html","wb"); + if(!outFile.isOkay())return; + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine("

Ganymede System Monitor

"); + outFile.writeLine("

 

"); + outFile.writeLine(String("

HTTP Access Log, ")+(String)systemTime+String("
")); + outFile.writeLine("
"); + for(int index=0;index");currDate=accessRecord.date();} + outFile.writeLine(strPrefix+accessRecord.ip()+String(" (")+accessRecord.host()+String(") on ")+accessRecord.date().makeString()+String(" at ")+accessRecord.time()+strPostfix); + } + outFile.writeLine("

"); + outFile.writeLine(""); + outFile.writeLine(""); +} + +void AccessManager::getHost(AccessRecord &accessRecord) +{ + String strPathResultFile("host.rst"); + String strSystem("/usr/bin/host "); + String strHostNotFoundTryAgain("Host not found, try again."); + String strHostNotFound("Host not found."); + String strLine; + char *ptrLine; + File inFile; + + strSystem+=accessRecord.ip(); + strSystem+=String(" &>")+strPathResultFile; + ::unlink(strPathResultFile); + ::system(strSystem); + inFile.open(strPathResultFile); + if(!inFile.isOkay()){accessRecord.host(strHostNotFound);return;} + inFile.getLine(strLine); + if(strLine.isNull()||strLine==strHostNotFound||strLine==strHostNotFound){accessRecord.host(strHostNotFound);return;} + ptrLine=(char*)strLine+(strLine.length()-1); + while(ptrLine>(char*)strLine&&*ptrLine!=' ')ptrLine--; + if(' '==*ptrLine)ptrLine++; + accessRecord.host(ptrLine); +} + +void AccessManager::createCounter(int accessCount) +{ + File outFile; + String strCount; + + ::sprintf(strCount,"%06d",accessCount); + outFile.open("/home/httpd/html/log/access.cnt","wb"); + if(!outFile.isOkay())return; + outFile.writeLine(strCount); + outFile.close(); +} + +void AccessManager::perform(void) +{ + DWORD accessLines(getAccessLineCount()); + DWORD newAccessLines; + SDate currDate(SDate::TodaysDate); + SDate nextDate; + Sleep sleeper; + BOOL isInit(TRUE); + + while(TRUE) + { + ::printf("AccessManager is sleeping\n"); + if(!isInit)sleeper.sleep(TimeOut); + isInit=FALSE; + ::printf("AccessManager is awake\n"); + nextDate=SDate(SDate::TodaysDate); + if(DayCount<=nextDate.daysBetweenActual(currDate,nextDate)) + { + currDate=nextDate; + mAccessFile.reset(); + } + newAccessLines=getAccessLineCount(); + if(newAccessLines + +proto + + +
+ + + +
+The source. + + diff --git a/java/COUNTER/Counter.java b/java/COUNTER/Counter.java new file mode 100644 index 0000000..935a739 --- /dev/null +++ b/java/COUNTER/Counter.java @@ -0,0 +1,39 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; +import java.io.*; + +public class Counter extends java.applet.Applet +{ + private Led mLed=null; + + public Counter() + { + setBackground(Color.white); + } + public void init() + { + mLed=new Led(this); + } + public void start() + { + mLed.start(); + } + public void stop() + { + mLed.stop(); + } + public void update(Graphics graphics) + { + paint(graphics); + } + public void paint(Graphics graphics) + { + mLed.paint(graphics); + } +} + diff --git a/java/COUNTER/Counter.java.old b/java/COUNTER/Counter.java.old new file mode 100644 index 0000000..4e7d4fb --- /dev/null +++ b/java/COUNTER/Counter.java.old @@ -0,0 +1,82 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; +import java.io.*; +import java.net.*; + +public class Counter extends java.applet.Applet implements Runnable +{ +// private Thread mThread; + private String mStrFileName; + + public Counter() + { + } + public void init() + { + mStrFileName=new String("counter.dat"); + repaint(); + } + public void run() + { +// InFile inFile; +// System.out.println("Hello"); +// try{inFile=new InFile(getCodeBase(),mStrFileName);} +// try{inFile.open(getCodeBase(),mStrFileName);} +// catch(Exception exception){return;} +// String strLine=new String(); +// try{strLine=inFile.readLine();} +// catch(Exception exception){return;} +// Integer iCounter=new Integer(strLine); +// int counter=iCounter.intValue(); +// counter++; +// strLine.valueOf(counter); +// inFile.close(); +// OutFile outFile=new OutFile(); +// try{outFile.open(getCodeBase(),mStrFileName);} +// catch(Exception exception){return;} +// try{outFile.write(strLine);} +// catch(Exception exception){return;} +// outFile.close(); + } + public void start() + { + InFile inFile; + try{inFile=new InFile(getCodeBase(),mStrFileName);} + catch(Exception exception){return;} + String strLine=new String(); + try{strLine=inFile.readLine();} + catch(Exception exception){return;} + Integer iCounter=new Integer(strLine); + int counter=iCounter.intValue(); + counter++; + strLine=String.valueOf(counter); + inFile.close(); + OutFile outFile; + String str=new String(getCodeBase().toString()); +// try{outFile=new OutFile(getCodeBase(),mStrFileName);} +// catch(Exception exception){return;} +// try{outFile.write(strLine);} +// catch(Exception exception){return;} +// outFile.close(); + + +// if(mThread==null){mThread=new Thread(this);mThread.start();} + } + public void stop() + { +// if(null!=mThread){mThread.stop();mThread=null;} + } +// public void update(Graphics graphics) +// { +// paint(graphics); +// } +// public void paint(Graphics graphics) +// { +// } +} + diff --git a/java/COUNTER/Counter.java~ b/java/COUNTER/Counter.java~ new file mode 100644 index 0000000..a9e65c2 --- /dev/null +++ b/java/COUNTER/Counter.java~ @@ -0,0 +1,39 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; +import java.io.*; + +public class Counter extends java.applet.Applet +{ + private Led mLed=null; + + public Counter() + { + setBackground(Color.white); + } + public void init() + { + mLed=new Led(this); + } + public void start() + { + mLed.start(); + } + public void stop() + { + mLed.stop(); + } + public void update(Graphics graphics) + { + paint(graphics); + } + public void paint(Graphics graphics) + { + mLed.paint(graphics); + } +} + diff --git a/java/COUNTER/Counter.mdp b/java/COUNTER/Counter.mdp new file mode 100644 index 0000000..20a5643 Binary files /dev/null and b/java/COUNTER/Counter.mdp differ diff --git a/java/COUNTER/IMAGE/BLANK.GIF b/java/COUNTER/IMAGE/BLANK.GIF new file mode 100644 index 0000000..60a681e Binary files /dev/null and b/java/COUNTER/IMAGE/BLANK.GIF differ diff --git a/java/COUNTER/IMAGE/DASH.GIF b/java/COUNTER/IMAGE/DASH.GIF new file mode 100644 index 0000000..9e79c13 Binary files /dev/null and b/java/COUNTER/IMAGE/DASH.GIF differ diff --git a/java/COUNTER/IMAGE/EIGHT.GIF b/java/COUNTER/IMAGE/EIGHT.GIF new file mode 100644 index 0000000..e3b86b5 Binary files /dev/null and b/java/COUNTER/IMAGE/EIGHT.GIF differ diff --git a/java/COUNTER/IMAGE/FIVE.GIF b/java/COUNTER/IMAGE/FIVE.GIF new file mode 100644 index 0000000..3e7075f Binary files /dev/null and b/java/COUNTER/IMAGE/FIVE.GIF differ diff --git a/java/COUNTER/IMAGE/FOUR.GIF b/java/COUNTER/IMAGE/FOUR.GIF new file mode 100644 index 0000000..4494bdb Binary files /dev/null and b/java/COUNTER/IMAGE/FOUR.GIF differ diff --git a/java/COUNTER/IMAGE/LED.GIF b/java/COUNTER/IMAGE/LED.GIF new file mode 100644 index 0000000..4fab937 Binary files /dev/null and b/java/COUNTER/IMAGE/LED.GIF differ diff --git a/java/COUNTER/IMAGE/NINE.GIF b/java/COUNTER/IMAGE/NINE.GIF new file mode 100644 index 0000000..36674f6 Binary files /dev/null and b/java/COUNTER/IMAGE/NINE.GIF differ diff --git a/java/COUNTER/IMAGE/ONE.GIF b/java/COUNTER/IMAGE/ONE.GIF new file mode 100644 index 0000000..d909890 Binary files /dev/null and b/java/COUNTER/IMAGE/ONE.GIF differ diff --git a/java/COUNTER/IMAGE/SEVEN.GIF b/java/COUNTER/IMAGE/SEVEN.GIF new file mode 100644 index 0000000..f0bc698 Binary files /dev/null and b/java/COUNTER/IMAGE/SEVEN.GIF differ diff --git a/java/COUNTER/IMAGE/SIX.GIF b/java/COUNTER/IMAGE/SIX.GIF new file mode 100644 index 0000000..07d148a Binary files /dev/null and b/java/COUNTER/IMAGE/SIX.GIF differ diff --git a/java/COUNTER/IMAGE/THREE.GIF b/java/COUNTER/IMAGE/THREE.GIF new file mode 100644 index 0000000..d4f617a Binary files /dev/null and b/java/COUNTER/IMAGE/THREE.GIF differ diff --git a/java/COUNTER/IMAGE/TWO.GIF b/java/COUNTER/IMAGE/TWO.GIF new file mode 100644 index 0000000..4325e16 Binary files /dev/null and b/java/COUNTER/IMAGE/TWO.GIF differ diff --git a/java/COUNTER/IMAGE/ZERO.GIF b/java/COUNTER/IMAGE/ZERO.GIF new file mode 100644 index 0000000..58f8fbc Binary files /dev/null and b/java/COUNTER/IMAGE/ZERO.GIF differ diff --git a/java/COUNTER/InFile.class b/java/COUNTER/InFile.class new file mode 100644 index 0000000..cae9f5a Binary files /dev/null and b/java/COUNTER/InFile.class differ diff --git a/java/COUNTER/Infile.java b/java/COUNTER/Infile.java new file mode 100644 index 0000000..d0ad4a8 --- /dev/null +++ b/java/COUNTER/Infile.java @@ -0,0 +1,75 @@ +import java.net.*; +import java.io.*; + +class InFile +{ + private boolean mIsOkay; + private URL mInFile; + private URLConnection mConnection; + private DataInputStream mInData; + private String mStrLine; + + public InFile() + { + mIsOkay=false; + } + public InFile(URL resBase,String strHostPathFileName)throws Exception + { + mIsOkay=false; + open(resBase,strHostPathFileName); + } + public InFile(String strHostPathFileName)throws Exception + { + mIsOkay=false; + open(strHostPathFileName); + } + public InFile(String resBase,String strHostPathFileName)throws Exception + { + mIsOkay=false; + open(resBase,strHostPathFileName); + } + public void open(URL resBase,String strHostPathFileName)throws Exception + { + close(); + try{mInFile=new URL(resBase,strHostPathFileName);} + catch(MalformedURLException exception){throw new Exception();} + try{mConnection=mInFile.openConnection();} + catch(Exception exception){throw new Exception();} + try{mInData=new DataInputStream(mConnection.getInputStream());} + catch(Exception exception){throw new Exception();} + mIsOkay=true; + } + public void open(String resBase,String strHostPathFileName)throws Exception + { + open(resBase+strHostPathFileName); + } + public void open(String strHostPathFileName)throws Exception + { + close(); + try{mInFile=new URL(strHostPathFileName);} + catch(MalformedURLException exception){throw new Exception();} + try{mConnection=mInFile.openConnection();} + catch(IOException ioException){throw new Exception();} + try{mInData=new DataInputStream(mConnection.getInputStream());} + catch(Exception exception){throw new Exception();} + mIsOkay=true; + } + public void close() + { + if(!isOkay())return; + try{mInData.close();} + catch(Exception exception){;} + mIsOkay=false; + } + public String readLine()throws Exception + { + if(!isOkay())throw new Exception(); + try{mStrLine=new String(mInData.readLine());} + catch(IOException ioException){throw new Exception();} + return mStrLine; + } + public boolean isOkay() + { + return mIsOkay; + } +}; diff --git a/java/COUNTER/LOG/ACCESS.CNT b/java/COUNTER/LOG/ACCESS.CNT new file mode 100644 index 0000000..a12b6f9 --- /dev/null +++ b/java/COUNTER/LOG/ACCESS.CNT @@ -0,0 +1,2 @@ +000930 + diff --git a/java/COUNTER/Led.class b/java/COUNTER/Led.class new file mode 100644 index 0000000..ca2b81c Binary files /dev/null and b/java/COUNTER/Led.class differ diff --git a/java/COUNTER/Led.java b/java/COUNTER/Led.java new file mode 100644 index 0000000..430e5ab --- /dev/null +++ b/java/COUNTER/Led.java @@ -0,0 +1,110 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; +import java.io.*; +import java.net.*; + +public class Led extends Thread +{ + private Thread mThread=null; + private InFile mInFile; + private final int smImageCount=12; + private Image[] mLedImages=new Image[smImageCount]; + private String mStrParam=null; + private java.applet.Applet mApplet=null; + private final int TimeOut=300000; + + Led(java.applet.Applet applet) + { + init(applet); + } + public void init(java.applet.Applet applet) + { + mApplet=applet; + mLedImages[0]=mApplet.getImage(mApplet.getCodeBase(),"image/zero.gif"); + mLedImages[1]=mApplet.getImage(mApplet.getCodeBase(),"image/one.gif"); + mLedImages[2]=mApplet.getImage(mApplet.getCodeBase(),"image/two.gif"); + mLedImages[3]=mApplet.getImage(mApplet.getCodeBase(),"image/three.gif"); + mLedImages[4]=mApplet.getImage(mApplet.getCodeBase(),"image/four.gif"); + mLedImages[5]=mApplet.getImage(mApplet.getCodeBase(),"image/five.gif"); + mLedImages[6]=mApplet.getImage(mApplet.getCodeBase(),"image/six.gif"); + mLedImages[7]=mApplet.getImage(mApplet.getCodeBase(),"image/seven.gif"); + mLedImages[8]=mApplet.getImage(mApplet.getCodeBase(),"image/eight.gif"); + mLedImages[9]=mApplet.getImage(mApplet.getCodeBase(),"image/nine.gif"); + mLedImages[10]=mApplet.getImage(mApplet.getCodeBase(),"image/dash.gif"); + mLedImages[11]=mApplet.getImage(mApplet.getCodeBase(),"image/blank.gif"); + MediaTracker mediaTracker=new MediaTracker(mApplet); + for(int imageIndex=0;imageIndex + +proto + + +
+ + +
+The source. + + diff --git a/java/HOTLINK/HOTLIN~1.JAV b/java/HOTLINK/HOTLIN~1.JAV new file mode 100644 index 0000000..5c5efb1 --- /dev/null +++ b/java/HOTLINK/HOTLIN~1.JAV @@ -0,0 +1,141 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; +import java.io.*; +import java.net.*; + +public class HotLink extends java.applet.Applet implements Runnable +{ + private Thread mThread; + private final int smImageCount=12; + private Image[] mLedImages=new Image[smImageCount]; + private String mStrServerIP; +// private String mURLString; + private Button mHTTPButton; + private Button mTelnetButton; + private final int mTimeout=60000; + private final String mHTTPButtonLabel=new String("Ganymede (HTTP)"); + private final String mTelnetButtonLabel=new String("Ganymede (TELNET)"); + + public HotLink() + { + } + public void init() + { + mHTTPButton=new Button(mHTTPButtonLabel); + mTelnetButton=new Button(mTelnetButtonLabel); + add(mHTTPButton); + add(mTelnetButton); + mLedImages[0]=getImage(getCodeBase(),"image/zero.gif"); + mLedImages[1]=getImage(getCodeBase(),"image/one.gif"); + mLedImages[2]=getImage(getCodeBase(),"image/two.gif"); + mLedImages[3]=getImage(getCodeBase(),"image/three.gif"); + mLedImages[4]=getImage(getCodeBase(),"image/four.gif"); + mLedImages[5]=getImage(getCodeBase(),"image/five.gif"); + mLedImages[6]=getImage(getCodeBase(),"image/six.gif"); + mLedImages[7]=getImage(getCodeBase(),"image/seven.gif"); + mLedImages[8]=getImage(getCodeBase(),"image/eight.gif"); + mLedImages[9]=getImage(getCodeBase(),"image/nine.gif"); + mLedImages[10]=getImage(getCodeBase(),"image/dash.gif"); + mLedImages[11]=getImage(getCodeBase(),"image/blank.gif"); + MediaTracker mediaTracker=new MediaTracker(this); + for(int imageIndex=0;imageIndex + +proto + + + +
+ +Sean Kessler's Home Page + + + + + diff --git a/java/IPLED/IPLED.MAK b/java/IPLED/IPLED.MAK new file mode 100644 index 0000000..c4e90c3 --- /dev/null +++ b/java/IPLED/IPLED.MAK @@ -0,0 +1,133 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Java Virtual Machine Java Workspace" 0x0809 + +!IF "$(CFG)" == "" +CFG=ipled - Java Virtual Machine Debug +!MESSAGE No configuration specified. Defaulting to ipled - Java Virtual\ + Machine Debug. +!ENDIF + +!IF "$(CFG)" != "ipled - Java Virtual Machine Release" && "$(CFG)" !=\ + "ipled - Java Virtual Machine Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "ipled.mak" CFG="ipled - Java Virtual Machine Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "ipled - Java Virtual Machine Release" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE "ipled - Java Virtual Machine Debug" (based on\ + "Java Virtual Machine Java Workspace") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +JAVA=jvc.exe + +!IF "$(CFG)" == "ipled - Java Virtual Machine Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\IPLed.class" + +CLEAN : + -@erase "$(INTDIR)\IPLed.class" + +# ADD BASE JAVA /O +# ADD JAVA /O + +!ELSEIF "$(CFG)" == "ipled - Java Virtual Machine Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "" +# PROP BASE Intermediate_Dir "" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "" +# PROP Intermediate_Dir "" +# PROP Target_Dir "" +OUTDIR=. +INTDIR=. + +ALL : "$(OUTDIR)\IPLed.class" + +CLEAN : + -@erase "$(INTDIR)\IPLed.class" + +# ADD BASE JAVA /g +# ADD JAVA /g + +!ENDIF + +################################################################################ +# Begin Target + +# Name "ipled - Java Virtual Machine Release" +# Name "ipled - Java Virtual Machine Debug" + +!IF "$(CFG)" == "ipled - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "ipled - Java Virtual Machine Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\IPLed.java + +!IF "$(CFG)" == "ipled - Java Virtual Machine Release" + + +"$(INTDIR)\IPLed.class" : $(SOURCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "ipled - Java Virtual Machine Debug" + + +"$(INTDIR)\IPLed.class" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\index.html + +!IF "$(CFG)" == "ipled - Java Virtual Machine Release" + +!ELSEIF "$(CFG)" == "ipled - Java Virtual Machine Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/java/IPLED/IPLED~1.CLA b/java/IPLED/IPLED~1.CLA new file mode 100644 index 0000000..d48a6a0 Binary files /dev/null and b/java/IPLED/IPLED~1.CLA differ diff --git a/java/IPLED/IPLED~1.JAV b/java/IPLED/IPLED~1.JAV new file mode 100644 index 0000000..6a7483e --- /dev/null +++ b/java/IPLED/IPLED~1.JAV @@ -0,0 +1,94 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; + +public class IPLed extends java.applet.Applet implements Runnable +{ + Thread mThread; + final int smImageCount=12; + Image[] mLedImages=new Image[smImageCount]; + String mStrParam; + + public void init() + { + mLedImages[0]=getImage(getCodeBase(),"image/zero.gif"); + mLedImages[1]=getImage(getCodeBase(),"image/one.gif"); + mLedImages[2]=getImage(getCodeBase(),"image/two.gif"); + mLedImages[3]=getImage(getCodeBase(),"image/three.gif"); + mLedImages[4]=getImage(getCodeBase(),"image/four.gif"); + mLedImages[5]=getImage(getCodeBase(),"image/five.gif"); + mLedImages[6]=getImage(getCodeBase(),"image/six.gif"); + mLedImages[7]=getImage(getCodeBase(),"image/seven.gif"); + mLedImages[8]=getImage(getCodeBase(),"image/eight.gif"); + mLedImages[9]=getImage(getCodeBase(),"image/nine.gif"); + mLedImages[10]=getImage(getCodeBase(),"image/dash.gif"); + mLedImages[11]=getImage(getCodeBase(),"image/blank.gif"); + mStrParam=new String(getParameter("address")); + if(null==mStrParam)mStrParam="255.255.255.255"; + MediaTracker mediaTracker=new MediaTracker(this); + for(int imageIndex=0;imageIndex + +Chat Control Panel + + + +

Chat Control Panel

+ +
+ + + + +

+ +


+

+ + \ No newline at end of file diff --git a/java/JCHAT/IOManager.java b/java/JCHAT/IOManager.java new file mode 100644 index 0000000..5238e5e --- /dev/null +++ b/java/JCHAT/IOManager.java @@ -0,0 +1,203 @@ +import java.net.*; +import java.io.*; + +public class IOManager +{ + public static final int OkResult=220; + public static final int ErrorResult=500; + private final int MaxNetworkPacket=1024; + private final int InvalidPort=-1; + private SocketControl mTCPSocket=null; + private boolean mIsLoggedIn=false; + private StringArray mAckResponseStrings; + + public IOManager() + { + mAckResponseStrings=new StringArray(); + mAckResponseStrings.insert("220"); + } + public void shutdown() + { + if(!mTCPSocket.isConnected())return; + if(isLoggedIn())quit(); + try{mTCPSocket.closeSocket();} + catch(IOException exception){return;} + } + public boolean isConnected() + { + if(mTCPSocket==null||!mTCPSocket.isConnected())return false; + return true; + } + private void isLoggedIn(boolean isLoggedIn) + { + mIsLoggedIn=isLoggedIn; + } + public boolean isLoggedIn() + { + return mIsLoggedIn; + } + public boolean connect(String strHost,int port) + { + int bytesRead; + byte streamBytes[]; + int clientPort; + String strLine=new String(); + + if(isConnected())return false; + streamBytes=new byte[MaxNetworkPacket]; + InetAddress inetAddress=null; + SocketControl socket=null; + if(0!=strHost.length()) + { + try{inetAddress=InetAddress.getByName(strHost);} + catch(UnknownHostException exception){return false;} + try{socket=new SocketControl(inetAddress,port);} + catch(IOException exception){return false;} + catch(SecurityException exception){return false;} + } + else + { + try{socket=new SocketControl("",port);} + catch(IOException exception){return false;} + catch(SecurityException exception){return false;} + } + if(!socket.isConnected())return false; + strLine=socket.readLine(); + if(0==strLine.length())return false; + clientPort=getPort(strLine); + if(InvalidPort==clientPort)return false; + socket.writeLine("OK"); + try{socket.closeSocket();} + catch(IOException exception){return false;} + if(0!=strHost.length()) + { + try{inetAddress=InetAddress.getByName(strHost);} + catch(UnknownHostException exception){return false;} + try{mTCPSocket=new SocketControl(inetAddress,clientPort);} + catch(IOException exception){return false;} + } + else + { + try{mTCPSocket=new SocketControl("",clientPort);} + catch(IOException exception){return false;} + } + strLine=mTCPSocket.readLine(); + return isConnected(); + } + public boolean advise(String strAddress,int port) + { + String strRequest=null; + if(!isConnected())return false; + strRequest=new String("ADVISE(")+new String(strAddress)+new String(",")+String.valueOf(port)+new String(")"); + mTCPSocket.writeLine(strRequest); + strRequest=mTCPSocket.readLine(); + return true; + } + private String readLine(InputStream inputStream) + { + byte streamByte[]; + String strLine=new String(); + + strLine=new String(); + while(true) + { + streamByte=new byte[1]; + try{inputStream.read(streamByte);} + catch(IOException exception){break;} + if(13==streamByte[0])continue; + else if(10==streamByte[0])break; + strLine+=new String(streamByte); + } + return strLine; + } + private boolean writeLine(String strLine,OutputStream outputStream) + { + if(0==strLine.length())return false; + strLine+=new String("\r\n"); + byte streamData[]=strLine.getBytes(); + try{outputStream.write(streamData);} + catch(IOException exception){return false;} + return true; + } + private int getPort(String strLine) + { + String strPort; + int strIndex; + int port; + + strIndex=strLine.length()-1; + port=InvalidPort; + strPort=new String(); + if(strIndex<0)return -1; + while(true) + { + if(strIndex<0)break; + if(' '==strLine.charAt(strIndex))break; + strIndex--; + } + strIndex++; + if(strIndex<0)return port; + strPort=strLine.substring(strIndex); + return Integer.parseInt(strPort); + } + private boolean isInResponse(String responseString,StringArray responseStrings) + { + if(0==responseString.length())return false; + for(int index=0;index + +Chat Control Panel + + + +

Chat Control Panel

+

This applet may not work correctly if your browser is configured through a proxy server. +


+

+

+ + + + + + + + + + + +


+

+ + \ No newline at end of file diff --git a/java/JCHAT/SCRAPS.TXT b/java/JCHAT/SCRAPS.TXT new file mode 100644 index 0000000..6672c41 --- /dev/null +++ b/java/JCHAT/SCRAPS.TXT @@ -0,0 +1,6 @@ +// if(null==getParameter("advise"))strAdviseAddress=new String(AdviseThread.getAdviseAddress()); +// else strAdviseAddress=new String(getParameter("advise")); +// if(null==getParameter("ip"))strIPAddress=new String(""); +// else strIPAddress=new String(getParameter("ip")); +// if(null==getParameter("port"))strPort=new String("100"); +// else strPort=new String(getParameter("port")); \ No newline at end of file diff --git a/java/JCHAT/ServerSocketControl.java b/java/JCHAT/ServerSocketControl.java new file mode 100644 index 0000000..bb05f79 --- /dev/null +++ b/java/JCHAT/ServerSocketControl.java @@ -0,0 +1,18 @@ +import java.net.*; +import java.io.*; + +public class ServerSocketControl extends ServerSocket +{ + public ServerSocketControl(int port)throws IOException + { + super(port); + } + public void accept(SocketControl socketControl)throws IOException + { + implAccept(socketControl); + } +} + + + + diff --git a/java/JCHAT/SocketControl.java b/java/JCHAT/SocketControl.java new file mode 100644 index 0000000..6565423 --- /dev/null +++ b/java/JCHAT/SocketControl.java @@ -0,0 +1,202 @@ +import java.net.*; +import java.io.*; + +public class SocketControl extends Socket +{ + public final int OkResult=220; + public final int ErrorResult=500; + private InputStream mInputStream=null; + private OutputStream mOutputStream=null; + private boolean mIsConnected=false; + + public SocketControl() + { + } + public SocketControl(String strHost,int port)throws IOException + { + super(strHost,port); + try{mInputStream=getInputStream();} + catch(IOException exception){close();return;} + try{mOutputStream=getOutputStream();} + catch(IOException exception){close();return;} + isConnected(true); + } + public SocketControl(InetAddress inetAddress,int port)throws IOException + { + super(inetAddress,port); + try{mInputStream=getInputStream();} + catch(IOException exception){close();return;} + try{mOutputStream=getOutputStream();} + catch(IOException exception){close();return;} + isConnected(true); + } + public void closeSocket()throws IOException + { + isConnected(false); + close(); + } + public boolean isConnected() + { + return mIsConnected; + } + private void isConnected(boolean isConnected) + { + mIsConnected=isConnected; + } + public String readLine() + { + byte streamByte[]; + String strLine=new String(); + + if(!isConnected())return strLine; + strLine=new String(); + while(true) + { + streamByte=new byte[1]; + try{mInputStream.read(streamByte);} + catch(IOException exception){break;} + if(13==streamByte[0])continue; + else if(10==streamByte[0])break; + strLine+=new String(streamByte); + } + return strLine; + } + public boolean writeLine(String strLine) + { + if(!isConnected()||0==strLine.length())return false; + strLine+=new String("\r\n"); + byte streamData[]=strLine.getBytes(); + try{mOutputStream.write(streamData);} + catch(IOException exception){return false;} + return true; + } + public int getResultCode(String strLine) + { + if(0==strLine.length())return 0; + String strResult=new String(); + int strIndex=0; + while(true) + { + if(strIndex>=3)break; + if(' '==strLine.charAt(strIndex))break; + strResult+=strLine.charAt(strIndex); + strIndex++; + } + if(0==strResult.length())return 0; + return Integer.parseInt(strResult); + } + public String getResult(String strLine) + { + String strResult=new String(); + int strIndex=0; + int strLength=strLine.length(); + if(0==strLength)return strResult; + while(' '!=strLine.charAt(strIndex)&&strIndex=strLength)return strResult; + while(strIndex=size())throw new ArrayIndexOutOfBoundsException(); + return mStringArray[arrayIndex]; + } + public void setAt(String strItem,int arrayIndex)throws ArrayIndexOutOfBoundsException + { + if(arrayIndex>=size())throw new ArrayIndexOutOfBoundsException(); + mStringArray[arrayIndex]=strItem; + } + public boolean insert(String strItem) + { + guarantee(size()+1); + mStringArray[size()]=strItem; + size(size()+1); + return true; + } + public void guarantee(int requiredSize) + { + if(virtualSize()>=requiredSize)return; + String tmpArray[]=new String[virtualSize()+growBy()]; + for(int index=0;index + +proto + + + +
+ +Sean Kessler's Home Page + + + + + + + + + diff --git a/java/PROTO/IPLED~1.CLA b/java/PROTO/IPLED~1.CLA new file mode 100644 index 0000000..e89cea2 Binary files /dev/null and b/java/PROTO/IPLED~1.CLA differ diff --git a/java/PROTO/IPLED~1.JAV b/java/PROTO/IPLED~1.JAV new file mode 100644 index 0000000..92004ac --- /dev/null +++ b/java/PROTO/IPLED~1.JAV @@ -0,0 +1,39 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; +import java.net.*; + +public class IPLed extends java.applet.Applet implements Runnable +{ + Thread mThread; + + public void init() + { + repaint(); + } + public void run() + { + InetAddress inetAddress; + try{inetAddress=InetAddress.getLocalHost();} + catch(UnknownHostException exception){showStatus("unknown host.");return;} + showStatus(inetAddress.toString()); + + repaint(); + } + public void start() + { + if(mThread==null){mThread=new Thread(this);mThread.start();} + } + public void stop() + { + if(null!=mThread){mThread.stop();mThread=null;} + } + public void paint(Graphics graphics) + { + } +} + diff --git a/java/PROTO/JFOO~1.CLA b/java/PROTO/JFOO~1.CLA new file mode 100644 index 0000000..6dd5ec5 Binary files /dev/null and b/java/PROTO/JFOO~1.CLA differ diff --git a/java/PROTO/JFOO~1.JAV b/java/PROTO/JFOO~1.JAV new file mode 100644 index 0000000..fb5c1f4 --- /dev/null +++ b/java/PROTO/JFOO~1.JAV @@ -0,0 +1,98 @@ +import java.awt.*; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Date; +import java.awt.Frame; +import java.awt.image.*; + +public class JFoo extends java.applet.Applet implements Runnable +{ + Font mFont=new Font("TimesRoman",Font.BOLD,36); + Date mDate; + Thread mThread; + Color mColor=new Color(255,0,0); + Color mBlack=new Color(192,192,192); + final int smImageCount=12; + Image[] mLedImages=new Image[smImageCount]; + String mStrParam; + + public void init() + { + mLedImages[0]=getImage(getCodeBase(),"image/zero.gif"); + mLedImages[1]=getImage(getCodeBase(),"image/one.gif"); + mLedImages[2]=getImage(getCodeBase(),"image/two.gif"); + mLedImages[3]=getImage(getCodeBase(),"image/three.gif"); + mLedImages[4]=getImage(getCodeBase(),"image/four.gif"); + mLedImages[5]=getImage(getCodeBase(),"image/five.gif"); + mLedImages[6]=getImage(getCodeBase(),"image/six.gif"); + mLedImages[7]=getImage(getCodeBase(),"image/seven.gif"); + mLedImages[8]=getImage(getCodeBase(),"image/eight.gif"); + mLedImages[9]=getImage(getCodeBase(),"image/nine.gif"); + mLedImages[10]=getImage(getCodeBase(),"image/dash.gif"); + mLedImages[11]=getImage(getCodeBase(),"image/blank.gif"); + mStrParam=new String(getParameter("address")); + if(null==mStrParam)mStrParam="255.255.255.255"; + MediaTracker mediaTracker=new MediaTracker(this); + for(int imageIndex=0;imageIndex + + +JFoo + + +
+ + + +
+ + diff --git a/java/RemoteProcess/CoRemoteProcess.class b/java/RemoteProcess/CoRemoteProcess.class new file mode 100644 index 0000000..e6ad317 Binary files /dev/null and b/java/RemoteProcess/CoRemoteProcess.class differ diff --git a/java/RemoteProcess/CoRemoteProcess.java b/java/RemoteProcess/CoRemoteProcess.java new file mode 100644 index 0000000..173f5e7 --- /dev/null +++ b/java/RemoteProcess/CoRemoteProcess.java @@ -0,0 +1,48 @@ +// +// Auto-generated using JActiveX.EXE 5.00.2748 +// (..\jactivex /l foo remoteps.tlb) +// +// WARNING: Do not remove the comments that include "@com" directives. +// This source file must be compiled by a @com-aware compiler. +// If you are using the Microsoft Visual J++ compiler, you must use +// version 1.02.3920 or later. Previous versions will not issue an error +// but will not generate COM-enabled class files. +// + +//package remoteps; + +import com.ms.com.*; +import com.ms.com.IUnknown; +import com.ms.com.Variant; + +/** @com.class(classid=BD20693F-8D8A-11D3-B2F0-0050043ED4DB,DynamicCasts) +*/ +public class CoRemoteProcess implements IUnknown,com.ms.com.NoAutoScripting,IRemoteProcess +{ + /** @com.method() */ + public native Variant Snapshot(); + + /** @com.method() */ + public native Variant GetProcessFirst(); + + /** @com.method() */ + public native Variant GetProcessNext(); + + /** @com.method() */ + public native Variant GetModuleFirst(); + + /** @com.method() */ + public native Variant GetModuleNext(); + + /** @com.method() */ + public native Variant GetDesktopWindow(); + + /** @com.method() */ + public native void GetProcessTimes(Variant pVariant, double[] pCreationTime, double[] pExitTime, double[] pKernelTime, double[] pUserTime); + + /** @com.method() */ + public native Variant Kill(); + + + public static final com.ms.com._Guid clsid = new com.ms.com._Guid((int)0xbd20693f, (short)0x8d8a, (short)0x11d3, (byte)0xb2, (byte)0xf0, (byte)0x0, (byte)0x50, (byte)0x4, (byte)0x3e, (byte)0xd4, (byte)0xdb); +} diff --git a/java/RemoteProcess/IRemoteProcess.class b/java/RemoteProcess/IRemoteProcess.class new file mode 100644 index 0000000..fe111a7 Binary files /dev/null and b/java/RemoteProcess/IRemoteProcess.class differ diff --git a/java/RemoteProcess/IRemoteProcess.java b/java/RemoteProcess/IRemoteProcess.java new file mode 100644 index 0000000..793df90 --- /dev/null +++ b/java/RemoteProcess/IRemoteProcess.java @@ -0,0 +1,56 @@ +// +// Auto-generated using JActiveX.EXE 5.00.2748 +// (..\jactivex /l foo remoteps.tlb) +// +// WARNING: Do not remove the comments that include "@com" directives. +// This source file must be compiled by a @com-aware compiler. +// If you are using the Microsoft Visual J++ compiler, you must use +// version 1.02.3920 or later. Previous versions will not issue an error +// but will not generate COM-enabled class files. +// + +//package remoteps; + +import com.ms.com.*; +import com.ms.com.IUnknown; +import com.ms.com.Variant; + +// VTable-only interface IRemoteProcess +/** @com.interface(iid=BD20693E-8D8A-11D3-B2F0-0050043ED4DB, thread=AUTO) */ +public interface IRemoteProcess extends IUnknown +{ + /** @com.method(vtoffset=0, addFlagsVtable=4) + @com.parameters([type=VARIANT] return) */ + public Variant Snapshot(); + + /** @com.method(vtoffset=1, addFlagsVtable=4) + @com.parameters([type=VARIANT] return) */ + public Variant GetProcessFirst(); + + /** @com.method(vtoffset=2, addFlagsVtable=4) + @com.parameters([type=VARIANT] return) */ + public Variant GetProcessNext(); + + /** @com.method(vtoffset=3, addFlagsVtable=4) + @com.parameters([type=VARIANT] return) */ + public Variant GetModuleFirst(); + + /** @com.method(vtoffset=4, addFlagsVtable=4) + @com.parameters([type=VARIANT] return) */ + public Variant GetModuleNext(); + + /** @com.method(vtoffset=5, addFlagsVtable=4) + @com.parameters([type=VARIANT] return) */ + public Variant GetDesktopWindow(); + + /** @com.method(vtoffset=6, addFlagsVtable=4) + @com.parameters([in,type=PTR] pVariant, [out,size=1,type=ARRAY] pCreationTime, [out,size=1,type=ARRAY] pExitTime, [out,size=1,type=ARRAY] pKernelTime, [out,size=1,type=ARRAY] pUserTime) */ + public void GetProcessTimes(Variant pVariant, double[] pCreationTime, double[] pExitTime, double[] pKernelTime, double[] pUserTime); + + /** @com.method(vtoffset=7, addFlagsVtable=4) + @com.parameters([type=VARIANT] return) */ + public Variant Kill(); + + + public static final com.ms.com._Guid iid = new com.ms.com._Guid((int)0xbd20693e, (short)0x8d8a, (short)0x11d3, (byte)0xb2, (byte)0xf0, (byte)0x0, (byte)0x50, (byte)0x4, (byte)0x3e, (byte)0xd4, (byte)0xdb); +} diff --git a/java/RemoteProcess/ListListener.class b/java/RemoteProcess/ListListener.class new file mode 100644 index 0000000..ec11b99 Binary files /dev/null and b/java/RemoteProcess/ListListener.class differ diff --git a/java/RemoteProcess/ListListener.java b/java/RemoteProcess/ListListener.java new file mode 100644 index 0000000..c1c0301 --- /dev/null +++ b/java/RemoteProcess/ListListener.java @@ -0,0 +1,25 @@ +import java.awt.*; +import java.awt.event.*; + +class ListListener implements ActionListener +{ + RemoteProcess mApplet; + ListListener(RemoteProcess applet) + { + mApplet=applet; + } + public void actionPerformed(ActionEvent event) + { + String strSelText=null; + String strSymbol; + int strLength; + int index; + + strSelText=mApplet.mProcessList.getSelectedItem(); + if(null==strSelText||0==(strLength=strSelText.length()))return; + strSymbol=new String(); + for(index=0;index + + + + + + + + + +

Remote Process Applet

+ +
+ +

+ +

+
+


+

+ + diff --git a/java/RemoteProcess/remoteprocess.CAB b/java/RemoteProcess/remoteprocess.CAB new file mode 100644 index 0000000..a156891 Binary files /dev/null and b/java/RemoteProcess/remoteprocess.CAB differ diff --git a/java/RemoteProcess/remoteprocess.sln b/java/RemoteProcess/remoteprocess.sln new file mode 100644 index 0000000..f040876 --- /dev/null +++ b/java/RemoteProcess/remoteprocess.sln @@ -0,0 +1,13 @@ +Microsoft Visual Studio Solution File, Format Version 1.00 +Project("{66355F20-A65B-11D0-BFB5-00A0C91EBFA0}") = "remoteprocess", "remoteprocess.vjp", "{7389B3D0-A04A-11D3-B309-0050043ED4DB}" +EndProject +Global + GlobalSection(LocalDeployment) = postSolution + StartupProject = {7389B3D0-A04A-11D3-B309-0050043ED4DB} + EndGlobalSection + GlobalSection(BuildOrder) = postSolution + 0 = {7389B3D0-A04A-11D3-B309-0050043ED4DB} + EndGlobalSection + GlobalSection(DeploymentRoot) = postSolution + EndGlobalSection +EndGlobal diff --git a/java/RemoteProcess/remoteprocess.suo b/java/RemoteProcess/remoteprocess.suo new file mode 100644 index 0000000..db67a67 Binary files /dev/null and b/java/RemoteProcess/remoteprocess.suo differ diff --git a/java/RemoteProcess/remoteprocess.vjp b/java/RemoteProcess/remoteprocess.vjp new file mode 100644 index 0000000..cfb5ee7 Binary files /dev/null and b/java/RemoteProcess/remoteprocess.vjp differ diff --git a/java/RemoteProcess/remoteps/CoRemoteProcess.class b/java/RemoteProcess/remoteps/CoRemoteProcess.class new file mode 100644 index 0000000..443d1bc Binary files /dev/null and b/java/RemoteProcess/remoteps/CoRemoteProcess.class differ diff --git a/java/RemoteProcess/remoteps/IRemoteProcess.class b/java/RemoteProcess/remoteps/IRemoteProcess.class new file mode 100644 index 0000000..b654b0d Binary files /dev/null and b/java/RemoteProcess/remoteps/IRemoteProcess.class differ diff --git a/java/SPREAD/CASHFL~1.CLA b/java/SPREAD/CASHFL~1.CLA new file mode 100644 index 0000000..dce7453 Binary files /dev/null and b/java/SPREAD/CASHFL~1.CLA differ diff --git a/java/SPREAD/CASHFL~1.JAV b/java/SPREAD/CASHFL~1.JAV new file mode 100644 index 0000000..ce30ace --- /dev/null +++ b/java/SPREAD/CASHFL~1.JAV @@ -0,0 +1,312 @@ +import java.awt.*; + +public class Cashflow extends java.applet.Applet +{ + SpreadSheetInterface mSpreadSheet; + PurePassThru mPurePassThru=new PurePassThru(); + PureCashflow mPureCashflows[]; + TextField mCtlPrincipal; + TextField mCtlInterest; + TextField mCtlTerm; + TextField mCtlPrepayment; + TextField mCtlIncrement; + TextField mCtlFrequency; + Label mCtlCost; + Label mCtlMsg; + Button mCtlButton; + + public void init() + { + performLayout(); + mSpreadSheet=new SpreadSheetInterface(this,361,10,new Dimension(630,200)); + mSpreadSheet.setDocumentTitle("Paydown Calculator v1.00"); + mSpreadSheet.gridLock(true); + repaint(); + } + public void update(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.update(graphics); + } + public void paint(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.paint(graphics); + } + public boolean mouseDown(Event event,int x,int y) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.mouseDown(event,x,y); + return true; + } + public boolean keyDown(Event event,int key) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.keyDown(event,key); + return true; + } + public void performLayout() + { + GridBagLayout layout=new GridBagLayout(); + GridBagConstraints constraints=new GridBagConstraints(); + setFont(new Font("Fixed",Font.BOLD,12)); + setLayout(layout); + + constraints.fill=GridBagConstraints.BOTH; + constraints.weightx=0.25; + Label prnLabel=new Label("Principal",Label.LEFT); + layout.setConstraints(prnLabel,constraints); + add(prnLabel); + mCtlPrincipal=new TextField("$100000.00"); + layout.setConstraints(mCtlPrincipal,constraints); + add(mCtlPrincipal); + + Label intLabel=new Label("Interest",Label.LEFT); + layout.setConstraints(intLabel,constraints); + add(intLabel); + mCtlInterest=new TextField("8.00%"); + layout.setConstraints(mCtlInterest,constraints); + add(mCtlInterest); + + Label trmLabel=new Label("Term",Label.LEFT); + layout.setConstraints(trmLabel,constraints); + add(trmLabel); + mCtlTerm=new TextField("360"); + layout.setConstraints(mCtlTerm,constraints); + add(mCtlTerm); + constraints.gridwidth=GridBagConstraints.REMAINDER; + mCtlButton=new Button("Calculate"); + layout.setConstraints(mCtlButton,constraints); + add(mCtlButton); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label ppyLabel=new Label("Prepayment",Label.LEFT); + layout.setConstraints(ppyLabel,constraints); + add(ppyLabel); + mCtlPrepayment=new TextField("$0.00"); + layout.setConstraints(mCtlPrepayment,constraints); + add(mCtlPrepayment); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label ppyHlpLabel=new Label("Enter the amount of your prepayment(s)."); + layout.setConstraints(ppyHlpLabel,constraints); + add(ppyHlpLabel); + + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label incLabel=new Label("Increment",Label.LEFT); + layout.setConstraints(incLabel,constraints); + add(incLabel); + mCtlIncrement=new TextField("$0.00"); + layout.setConstraints(mCtlIncrement,constraints); + add(mCtlIncrement); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label incHlpLabel=new Label("Increment the prepayment(s) by this amount."); + layout.setConstraints(incHlpLabel,constraints); + add(incHlpLabel); + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label frqLabel=new Label("Frequency",Label.LEFT); + layout.setConstraints(frqLabel,constraints); + add(frqLabel); + mCtlFrequency=new TextField("0.00"); + layout.setConstraints(mCtlFrequency,constraints); + add(mCtlFrequency); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label frqHlpLabel=new Label("Frequency at which to increment the prepayments (ie) number of months."); + layout.setConstraints(frqHlpLabel,constraints); + add(frqHlpLabel); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label costLabel=new Label("Cost Of Capital:",Label.LEFT); + layout.setConstraints(costLabel,constraints); + add(costLabel); + mCtlCost=new Label("$0.00",Label.LEFT); +// constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mCtlCost,constraints); + add(mCtlCost); + mCtlMsg=new Label("",Label.LEFT); + constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mCtlMsg,constraints); + add(mCtlMsg); + } + public boolean action(Event event,Object object) + { + if(null!=mCtlButton&&mCtlButton==event.target)performCalc(); + return true; + } + public void performCalc() + { + Prepayment prepayment=new Prepayment(); + String strPrincipal=mCtlPrincipal.getText(); + String strInterest=mCtlInterest.getText(); + String strTerm=mCtlTerm.getText(); + String strPrepayment=mCtlPrepayment.getText(); + String strIncrement=mCtlIncrement.getText(); + String strFrequency=mCtlFrequency.getText(); + Double workDouble; + double principal; + double interest; + int term; + int itemIndex; + + workDouble=new Double(0); + strPrincipal=strPrincipal.replace('$',' '); + workDouble=workDouble.valueOf(strPrincipal); + principal=workDouble.doubleValue(); + strInterest=strInterest.replace('%',' '); + workDouble=workDouble.valueOf(strInterest); + interest=workDouble.doubleValue(); + term=Integer.parseInt(strTerm); + strPrepayment=strPrepayment.replace('$',' '); + workDouble=workDouble.valueOf(strPrepayment); + prepayment.amount(workDouble.doubleValue()); + strIncrement=strIncrement.replace('$',' '); + workDouble=workDouble.valueOf(strIncrement); + prepayment.increment(workDouble.doubleValue()); + workDouble=workDouble.valueOf(strFrequency); + prepayment.frequency(workDouble.doubleValue()); + + mPurePassThru.issBal(principal); + mPurePassThru.wac(interest); + mPurePassThru.coupon(interest); + mPurePassThru.wam((short)term); + mPurePassThru.origTerm((short)term); + mPurePassThru.psa(0.00); + mCtlMsg.setText("Please wait a few moments..."); + mCtlMsg.repaint(); + if(0.00!=prepayment.amount()||0.00!=prepayment.increment())generateFlows(prepayment); + else generateFlows(); + Money money=new Money(0); + mSpreadSheet.clear(); + repaint(); + mSpreadSheet.setCellData(0,0,"BeginBal"); + mSpreadSheet.setCellData(0,1,"SMM"); + mSpreadSheet.setCellData(0,2,"MtgPay"); + mSpreadSheet.setCellData(0,3,"NetIntPay"); + mSpreadSheet.setCellData(0,4,"GrossIntPay"); + mSpreadSheet.setCellData(0,5,"SchedPrinPay"); + mSpreadSheet.setCellData(0,6,"Prepayment"); + mSpreadSheet.setCellData(0,7,"TotPrin"); + mSpreadSheet.setCellData(0,8,"Cashflow"); + mSpreadSheet.setCellData(0,9,"Factor"); + + for(itemIndex=0;itemIndex0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(0.00); + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } + public void generateFlows(Prepayment prepayment) + { + double issBal; + double tmpCPR; + int actualMonth; + int indexFlows; + + indexFlows=0; + mPureCashflows=new PureCashflow[mPurePassThru.wam()]; + issBal=mPurePassThru.issBal(); + for(int wam=mPurePassThru.wam();wam>0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(prepayment.amount()); + prepayment.period(prepayment.period()+1); + if(prepayment.period()>prepayment.frequency()) + { + prepayment.amount(prepayment.amount()+prepayment.increment()); + prepayment.period(1); + } + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } +} + diff --git a/java/SPREAD/CELL~1.CLA b/java/SPREAD/CELL~1.CLA new file mode 100644 index 0000000..7105b9f Binary files /dev/null and b/java/SPREAD/CELL~1.CLA differ diff --git a/java/SPREAD/HOLD/SPREAD~1.JAV b/java/SPREAD/HOLD/SPREAD~1.JAV new file mode 100644 index 0000000..90dfa16 --- /dev/null +++ b/java/SPREAD/HOLD/SPREAD~1.JAV @@ -0,0 +1,897 @@ +/* + * Adapted 10/98 by Sean Kessler + * Added arrow key navigation + * Added cell scrolling + * Class no longer extends of applet + * + * @(#)SpreadSheet.java 1.17 95/03/09 Sami Shaio + * + * Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved. + * + * Permission to use, copy, modify, and distribute this software + * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and + * without fee is hereby granted. + * Please refer to the file http://java.sun.com/copy_trademarks.html + * for further important copyright and trademark information and to + * http://java.sun.com/licensing.html for further important licensing + * information for the Java (tm) Technology. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE + * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE + * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT + * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE + * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE + * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE + * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). SUN + * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR + * HIGH RISK ACTIVITIES. + */ +import java.applet.Applet; +import java.awt.*; +import java.io.*; +import java.net.*; + +//****************************************************************************************************** +// ***************************************** SPREADSHEET *********************************************** +//****************************************************************************************************** + +public class SpreadSheetInterface +{ + SpreadSheet mSpreadSheet; + + SpreadSheetInteraface(Applet applet) + { + mSpreadSheet=new SpreadSheet(applet,applet.size()); + } + SpreadSheetInterface(Applet applet,Dimension controlDimension) + { + mSpreadSheet=new SpreadSheet(applet,controlDimension); + } +} +//public class SpreadSheet +class SpreadSheet +{ + private final Dimension mCellDimension=new Dimension(100,15); + private Dimension mControlDimension; + private String mStrTitle; + private Font mTitleFont; + private Color mCellColor; + private Color mInputColor; + private int mTitleHeight=15; + private int mRowLabelWidth=15; + private boolean mIsStopped=false; + private boolean mFullUpdate=true; + private int mRows; + private int mColumns; + private int mSelectedRow = -1; + private int mSelectedColumn = -1; + private SpreadSheetInput mInputArea; + private Cell mCells[][]; + private Cell mCurrent=null; + private int mStartDisplayRow; + private int mStartDisplayColumn; + private Applet mApplet; + + public SpreadSheet(Applet applet,Dimension controlDimension) + { + String strParam; + + mApplet=applet; + mControlDimension=controlDimension; + mStartDisplayRow=0; + mStartDisplayColumn=0; + mCellColor=Color.white; + mInputColor=new Color(100, 100, 225); + mTitleFont=new Font("Courier", Font.BOLD, 12); + mStrTitle=mApplet.getParameter("title"); + if(null==mStrTitle)mStrTitle="SpreadSheet"; + strParam=mApplet.getParameter("rows"); + if(null==strParam)mRows=9; + else mRows=Integer.parseInt(strParam); + strParam=mApplet.getParameter("columns"); + if(null==strParam)mColumns=5; + else mColumns=Integer.parseInt(strParam); + mCells=new Cell[mRows][mColumns]; + char strLabel[]=new char[1]; + for(int row=0;row=mRows||mSelectedColumn>=mColumns) + { + mSelectedRow = -1; + deselect(true); + return true; + } + select(); + return true; + } + public boolean keyDown(Event evt, int key) + { + mFullUpdate=true; + if(Key.LeftArrow==key||Key.RightArrow==key||Key.UpArrow==key||Key.DownArrow==key) + { + mInputArea.keyDown(Key.Return); + navigate(key); + } + else mInputArea.keyDown(key); + return true; + } + private void navigate(int key) + { + switch(key) + { + case Key.LeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + ensureVisible(); + select(); + break; + case Key.RightArrow : + if(mSelectedColumn+1>=mColumns)break; + mSelectedColumn++; + ensureVisible(); + select(); + break; + case Key.UpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + ensureVisible(); + select(); + break; + case Key.DownArrow : + if(mSelectedRow+1>=mRows)break; + mSelectedRow++; + ensureVisible(); + select(); + break; + } + } + private void select() + { + Cell cell=mCells[mSelectedRow][mSelectedColumn]; + + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + mApplet.requestFocus(); + mFullUpdate=true; + mApplet.repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } + public Applet applet() + { + return mApplet; + } + private void ensureVisible() + { + int yMin=(2*mCellDimension.height)+2+mTitleHeight; + int xMin=2+mRowLabelWidth+mCellDimension.width; + Point currPoint=new Point(0,0); + + currPoint.y=((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; + currPoint.x=((mSelectedColumn-mStartDisplayColumn)*mCellDimension.width)+2+mRowLabelWidth+mCellDimension.width; + if(currPoint.y>mControlDimension.height)mStartDisplayRow++; + else if(currPoint.ymControlDimension.width)mStartDisplayColumn++; + else if(currPoint.x= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(int type, String s) + { + mPaused=false; + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected=true; + mPaused=true; + } + public void deselect() + { + mSelected=false; + mPaused=false; + mNeedRedisplay=true; + mSpreadSheet.applet().repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-1,mHeight-1); + if(null!=mValueString) + { + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + if(!mTransientValue) + { + if(mValueString.length()>14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + public int type() + { + return mType; + } + public Node parseRoot() + { + return mParseRoot; + } + public void needRedisplay(boolean needRedisplay) + { + mNeedRedisplay=needRedisplay; + } + public boolean needRedisplay() + { + return mNeedRedisplay; + } + public float value() + { + return mValue; + } + public SpreadSheet spreadSheet() + { + return mSpreadSheet; + } + public boolean paused() + { + return mPaused; + } +} +//****************************************************************************************************** +// *************************************** NODE ******************************************************* +//****************************************************************************************************** +class Node +{ + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + private int mType; + private Node mLeft; + private Node mRight; + private int mRow; + private int mColumn; + private float mValue; + private char mOp; + + public Node() + { + mLeft=null; + mRight=null; + mValue=0; + mRow=-1; + mColumn=-1; + mOp=0; + mType=Node.VALUE; + } + public Node(Node node) + { + mLeft=node.mLeft; + mRight=node.mRight; + mValue=node.mValue; + mRow=node.mRow; + mColumn=node.mColumn; + mOp=node.mOp; + mType=node.mType; + } + public void print(int indentLevel) + { + char l[] = new char[1]; + switch(mType) + { + case Node.VALUE: + break; + case Node.CELL: + l[0] = (char)((int)'A' + column()); + break; + case Node.OP: + mLeft.print(indentLevel + 3); + mRight.print(indentLevel + 3); + break; + } + } + public int type() + { + return mType; + } + public void type(int type) + { + mType=type; + } + public float value() + { + return mValue; + } + public void value(float value) + { + mValue=value; + } + public Node left() + { + return mLeft; + } + public void left(Node left) + { + mLeft=left; + } + public Node right() + { + return mRight; + } + public void right(Node right) + { + mRight=right; + } + public char op() + { + return mOp; + } + public void op(char op) + { + mOp=op; + } + public int row() + { + return mRow; + } + public void row(int row) + { + mRow=row; + } + public int column() + { + return mColumn; + } + public void column(int column) + { + mColumn=column; + } +} + +class InputField +{ + private int mMaxchars = 50; + private Applet mApplet; + private String mStringValue; + private char mBuffer[]; + private int mChars; + private int mWidth; + private int mHeight; + private Color mBgColor; + private Color mFgColor; + + public InputField(String initValue,Applet applet,int width,int height,Color bgColor, Color fgColor) + { + mWidth=width; + mHeight=height; + mBgColor=bgColor; + mFgColor=fgColor; + mApplet=applet; + mBuffer = new char[mMaxchars]; + mChars = 0; + if(initValue != null) + { + initValue.getChars(0, initValue.length(),mBuffer, 0); + mChars = initValue.length(); + } + mStringValue=initValue; + } + public void setText(String val) + { + int i; + for(i=0; i < mMaxchars; i++)mBuffer[i] = 0; + mStringValue=new String(val); + if (val == null) + { + mStringValue= ""; + mChars = 0; + mBuffer[0] = 0; + } + else + { + mStringValue.getChars(0,mStringValue.length(), mBuffer, 0); + mChars = val.length(); + mStringValue = new String(mBuffer); + } + } + public String getValue() + { + return mStringValue; + } + public void paint(Graphics g, int x, int y) + { + g.setColor(mBgColor); + g.fillRect(x, y,mWidth,mHeight); + if(mStringValue!= null) + { + g.setColor(mFgColor); + g.drawString(mStringValue, x, y + (mHeight / 2) + 3); + } + } + public void mouseUp(int x, int y) + { + } + public void keyDown(int key) + { + if(mChars" + n.value); + return n.value; + case Node.CELL: + if (n == null) { + //System.out.println("NULL at 192"); + } else { + if (cells[n.row][n.column] == null) { + //System.out.println("NULL at 193"); + } else { + //System.out.println("=>" + cells[n.row][n.column].value); + return cells[n.row][n.column].value; + } + } + } + + //System.out.println("=>" + val); + return val; + } + + public synchronized void paint(Graphics g) { + int i, j; + int cx, cy; + char l[] = new char[1]; + + + Dimension d = size(); + g.setFont(titleFont); + i = g.getFontMetrics().stringWidth(title); + g.drawString((title == null) ? "Spreadsheet" : title, + (d.width - i) / 2, 12); + g.setColor(inputColor); + g.fillRect(0, cellHeight, d.width, cellHeight); + g.setFont(titleFont); + for (i=0; i < rows+1; i++) { + cy = (i+2) * cellHeight; + g.setColor(getBackground()); + g.draw3DRect(0, cy, d.width, 2, true); + if (i < rows) { + g.setColor(Color.red); + g.drawString("" + (i+1), 2, cy + 12); + } + } + g.setColor(Color.red); + for (i=0; i < columns; i++) { + cx = i * cellWidth; + g.setColor(getBackground()); + g.draw3DRect(cx + rowLabelWidth, + 2 * cellHeight, 1, d.height, true); + if (i < columns) { + g.setColor(Color.red); + l[0] = (char)((int)'A' + i); + g.drawString(new String(l), + cx + rowLabelWidth + (cellWidth / 2), + d.height - 3); + } + } + + + for (i=0; i < rows; i++) { + for (j=0; j < columns; j++) { + cx = (j * cellWidth) + 2 + rowLabelWidth; + cy = ((i+1) * cellHeight) + 2 + titleHeight; + if (cells[i][j] != null) { + cells[i][j].paint(g, cx, cy); + } + } + } + + g.setColor(getBackground()); + g.draw3DRect(0, titleHeight, + d.width, + d.height - titleHeight, + false); + inputArea.paint(g, 1, titleHeight + 1); + } + public boolean mouseDown(Event evt, int x, int y) + { + Cell cell; + if (y < (titleHeight + cellHeight)) + { + selectedRow = -1; + if (y <= titleHeight && current != null) + { + current.deselect(); + current = null; + } + return true; + } + if (x < rowLabelWidth) + { + selectedRow = -1; + if (current != null) { + current.deselect(); + current = null; + } + return true; + } + selectedRow = ((y - cellHeight - titleHeight) / cellHeight); + selectedColumn = (x - rowLabelWidth) / cellWidth; + if (selectedRow > rows || selectedColumn >= columns) + { + selectedRow = -1; + if(current != null) + { + current.deselect(); + current = null; + } + } + else + { + if (selectedRow >= rows) + { + selectedRow = -1; + if (current != null) + { + current.deselect(); + current = null; + } + return true; + } + cell = cells[selectedRow][selectedColumn]; + + // inputArea.setText(new String(cell.getPrintString())); +// smk + if(null!=cell.getPrintString())inputArea.setText(new String(cell.getPrintString())); + else inputArea.setText(new String("")); + + if (current != null)current.deselect(); + current = cell; + current.select(); + requestFocus(); + fullUpdate = true; + repaint(); + } + return true; + } + public boolean keyDown(Event evt, int key) + { + fullUpdate=true; + inputArea.keyDown(key); + return true; + } +} + +class CellUpdater extends Thread { + Cell target; + InputStream dataStream = null; + StreamTokenizer tokenStream; + + public CellUpdater(Cell c) { + super("cell updater"); + target = c; + } + + public void run() { + try { + dataStream = new URL(target.app.getDocumentBase(), + target.getValueString()).openStream(); + tokenStream = new StreamTokenizer(dataStream); + tokenStream.eolIsSignificant(false); + + while (true) { + switch (tokenStream.nextToken()) { + case tokenStream.TT_EOF: + dataStream.close(); + return; + default: + break; + case tokenStream.TT_NUMBER: + target.setTransientValue((float)tokenStream.nval); + if (! target.app.isStopped && ! target.paused) { + target.app.repaint(); + } + break; + } + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + break; + } + } + } catch (IOException e) { + return; + } + } +} + +class Cell { + public static final int VALUE = 0; + public static final int LABEL = 1; + public static final int URL = 2; + public static final int FORMULA = 3; + + Node parseRoot; + boolean needRedisplay; + boolean selected = false; + boolean transientValue = false; + public int type = Cell.VALUE; + String valueString = ""; + String printString = "v"; + float value; + Color bgColor; + Color fgColor; + Color highlightColor; + int width; + int height; + SpreadSheet app; + CellUpdater updaterThread; + boolean paused = false; + + public Cell(SpreadSheet app,Color bgColor,Color fgColor,Color highlightColor,int width,int height) + { + this.app = app; + this.bgColor = bgColor; + this.fgColor = fgColor; + this.highlightColor = highlightColor; + this.width = width; + this.height = height; + needRedisplay = true; + } + + public void setRawValue(float f) + { + valueString=Float.toString(f); + value = f; + } + public void setValue(float f) { + setRawValue(f); + printString = "v" + valueString; + type = Cell.VALUE; + paused = false; + app.recalculate(); + needRedisplay = true; + } + + public void setTransientValue(float f) { + transientValue = true; + value = f; + needRedisplay = true; + app.recalculate(); + } + + public void setUnparsedValue(String s) { + switch (s.charAt(0)) { + case 'v': + setValue(Cell.VALUE, s.substring(1)); + break; + case 'f': + setValue(Cell.FORMULA, s.substring(1)); + break; + case 'l': + setValue(Cell.LABEL, s.substring(1)); + break; + case 'u': + setValue(Cell.URL, s.substring(1)); + break; + } + } + + /** + * Parse a spreadsheet formula. The syntax is defined as: + * + * formula -> value + * formula -> value op value + * value -> '(' formula ')' + * value -> cell + * value -> + * op -> '+' | '*' | '/' | '-' + * cell -> + */ + public String parseFormula(String formula, Node node) { + String subformula; + String restFormula; + float value; + int length = formula.length(); + Node left; + Node right; + char op; + + if (formula == null) { + return null; + } + subformula = parseValue(formula, node); + //System.out.println("subformula = " + subformula); + if (subformula == null || subformula.length() == 0) { + //System.out.println("Parse succeeded"); + return null; + } + if (subformula == formula) { + //System.out.println("Parse failed"); + return formula; + } + + // parse an operator and then another value + switch (op = subformula.charAt(0)) { + case 0: + //System.out.println("Parse succeeded"); + return null; + case ')': + //System.out.println("Returning subformula=" + subformula); + return subformula; + case '+': + case '*': + case '-': + case '/': + restFormula = subformula.substring(1); + subformula = parseValue(restFormula, right=new Node()); + //System.out.println("subformula(2) = " + subformula); + if (subformula != restFormula) { + //System.out.println("Parse succeeded"); + left = new Node(node); + node.left = left; + node.right = right; + node.op = op; + node.type = Node.OP; + //node.print(3); + return subformula; + } else { + //System.out.println("Parse failed"); + return formula; + } + default: + //System.out.println("Parse failed (bad operator): " + subformula); + return formula; + } + } + + public String parseValue(String formula, Node node) { + char c = formula.charAt(0); + String subformula; + String restFormula; + float value; + int row; + int column; + + //System.out.println("parseValue: " + formula); + restFormula = formula; + if (c == '(') { + //System.out.println("parseValue(" + formula + ")"); + restFormula = formula.substring(1); + subformula = parseFormula(restFormula, node); + //System.out.println("rest=(" + subformula + ")"); + if (subformula == null || + subformula.length() == restFormula.length()) { + //System.out.println("Failed"); + return formula; + } else if (! (subformula.charAt(0) == ')')) { + //System.out.println("Failed (missing parentheses)"); + return formula; + } + restFormula = subformula; + } else if (c >= '0' && c <= '9') { + int i; + + //System.out.println("formula=" + formula); + try { + value = Float.valueOf(formula).floatValue(); + } catch (NumberFormatException e) { + //System.out.println("Failed (number format error)"); + return formula; + } + for (i=0; i < formula.length(); i++) { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.') { + break; + } + } + node.type = Node.VALUE; + node.value = value; + //node.print(3); + restFormula = formula.substring(i); + //System.out.println("value= " + value + " i=" + i + + // " rest = " + restFormula); + return restFormula; + } else if (c >= 'A' && c <= 'Z') { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + //System.out.println("row = " + row + " column = " + column); + for (i=0; i < restFormula.length(); i++) { + c = restFormula.charAt(i); + if (c < '0' || c > '9') { + break; + } + } + node.row = row - 1; + node.column = column; + node.type = Node.CELL; + //node.print(3); + if (i == restFormula.length()) { + restFormula = null; + } else { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0) { + return null; + } + } + } + + return restFormula; + } + + + public void setValue(int type, String s) { + paused = false; + if (this.type == Cell.URL) { + updaterThread.stop(); + updaterThread = null; + } + + valueString = new String(s); + this.type = type; + needRedisplay = true; + switch (type) { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + printString = "l" + valueString; + break; + case Cell.URL: + printString = "u" + valueString; + updaterThread = new CellUpdater(this); + updaterThread.start(); + break; + case Cell.FORMULA: + parseFormula(valueString, parseRoot = new Node()); + printString = "f" + valueString; + break; + } + app.recalculate(); + } + + public String getValueString() { + return valueString; + } + + public String getPrintString() { + return printString; + } + + public void select() { + selected = true; + paused = true; + } + public void deselect() { + selected = false; + paused = false; + needRedisplay = true; + app.repaint(); + } + public void paint(Graphics g, int x, int y) { + if (selected) { + g.setColor(highlightColor); + } else { + g.setColor(bgColor); + } + g.fillRect(x, y, width - 1, height); + if (valueString != null) + { + switch (type) { + case Cell.VALUE: + case Cell.LABEL: + g.setColor(fgColor); + break; + case Cell.FORMULA: + g.setColor(Color.red); + break; + case Cell.URL: + g.setColor(Color.blue); + break; + } + if (transientValue){ + g.drawString("" + value, x, y + (height / 2) + 5); + } else { + if (valueString.length() > 14) { + g.drawString(valueString.substring(0, 14), + x, y + (height / 2) + 5); + } else { + g.drawString(valueString, x, y + (height / 2) + 5); + } + } + } + needRedisplay = false; + } +} + +class Node { + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + + int type; + Node left; + Node right; + int row; + int column; + float value; + char op; + + public Node() { + left = null; + right = null; + value = 0; + row = -1; + column = -1; + op = 0; + type = Node.VALUE; + } + public Node(Node n) { + left = n.left; + right = n.right; + value = n.value; + row = n.row; + column = n.column; + op = n.op; + type = n.type; + } + public void indent(int ind) { + for (int i = 0; i < ind; i++) { + System.out.print(" "); + } + } + public void print(int indentLevel) { + char l[] = new char[1]; + indent(indentLevel); + System.out.println("NODE type=" + type); + indent(indentLevel); + switch (type) { + case Node.VALUE: + System.out.println(" value=" + value); + break; + case Node.CELL: + l[0] = (char)((int)'A' + column); + System.out.println(" cell=" + new String(l) + (row+1)); + break; + case Node.OP: + System.out.println(" op=" + op); + left.print(indentLevel + 3); + right.print(indentLevel + 3); + break; + } + } +} + +class InputField +{ + int maxchars = 50; + int cursorPos = 0; + Applet app; + String sval; + char buffer[]; + int nChars; + int width; + int height; + Color bgColor; + Color fgColor; + + public InputField(String initValue, Applet app, int width, int height,Color bgColor, Color fgColor) { + this.width = width; + this.height = height; + this.bgColor = bgColor; + this.fgColor = fgColor; + this.app = app; + buffer = new char[maxchars]; + nChars = 0; + if (initValue != null) { + initValue.getChars(0, initValue.length(), this.buffer, 0); + nChars = initValue.length(); + } + sval = initValue; + } + + public void setText(String val) { + int i; + + for (i=0; i < maxchars; i++) { + buffer[i] = 0; + } + sval = new String(val); + if (val == null) { + sval = ""; + nChars = 0; + buffer[0] = 0; + } else { + sval.getChars(0, sval.length(), buffer, 0); + nChars = val.length(); + sval = new String(buffer); + } + } + + public String getValue() { + return sval; + } + + public void paint(Graphics g, int x, int y) { + g.setColor(bgColor); + g.fillRect(x, y, width, height); + if (sval != null) { + g.setColor(fgColor); + g.drawString(sval, x, y + (height / 2) + 3); + } + } + public void mouseUp(int x, int y) { + // set the edit position + } + public void keyDown(int key) { + if (nChars < maxchars) { + switch (key) { + case 8: // delete + --nChars; + if (nChars < 0) { + nChars = 0; + } + buffer[nChars] = 0; + sval = new String(new String(buffer)); + break; + case 10: // return + selected(); + break; + default: + buffer[nChars++] = (char)key; + sval = new String(new String(buffer)); + break; + } + } + app.repaint(); + } + public void selected() { + } +} + +class SpreadSheetInput extends InputField +{ + public SpreadSheetInput(String initValue,SpreadSheet app,int width,int height,Color bgColor,Color fgColor) + { + super(initValue, app, width, height, bgColor, fgColor); + } + public void selected() + { + float f; + + switch (sval.charAt(0)) + { + case 'v': + try + { + f = Float.valueOf(sval.substring(1)).floatValue(); + ((SpreadSheet)app).setCurrentValue(f); + } + catch(NumberFormatException e){System.out.println("Not a float...");} + break; + case 'l': + ((SpreadSheet)app).setCurrentValue(Cell.LABEL, sval.substring(1)); + break; + case 'u': + ((SpreadSheet)app).setCurrentValue(Cell.URL, sval.substring(1)); + break; + case 'f': + ((SpreadSheet)app).setCurrentValue(Cell.FORMULA, sval.substring(1)); + break; + } + } +} \ No newline at end of file diff --git a/java/SPREAD/HOLD/SPREAD~3.JAV b/java/SPREAD/HOLD/SPREAD~3.JAV new file mode 100644 index 0000000..54b5923 --- /dev/null +++ b/java/SPREAD/HOLD/SPREAD~3.JAV @@ -0,0 +1,971 @@ + + +/* + * Adapted 10/98 by Sean Kessler + * Added arrow key navigation + * Added cell scrolling + * + * @(#)SpreadSheet.java 1.17 95/03/09 Sami Shaio + * + * Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved. + * + * Permission to use, copy, modify, and distribute this software + * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and + * without fee is hereby granted. + * Please refer to the file http://java.sun.com/copy_trademarks.html + * for further important copyright and trademark information and to + * http://java.sun.com/licensing.html for further important licensing + * information for the Java (tm) Technology. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE + * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE + * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT + * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE + * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE + * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE + * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). SUN + * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR + * HIGH RISK ACTIVITIES. + */ +import java.applet.Applet; +import java.awt.*; +import java.io.*; +import java.net.*; + +//****************************************************************************************************** +// ***************************************** SPREADSHEET *********************************************** +//****************************************************************************************************** +public class SpreadSheet extends Applet +{ + private final Dimension mCellDimension=new Dimension(100,15); + private final int mLeftArrow=1006; + private final int mRightArrow=1007; + private final int mUpArrow=1004; + private final int mDownArrow=1005; + private String mStrTitle; + private Font mTitleFont; + private Color mCellColor; + private Color mInputColor; + private int mTitleHeight=15; + private int mRowLabelWidth=15; + private boolean mIsStopped=false; + private boolean mFullUpdate=true; + private int mRows; + private int mColumns; + private int mSelectedRow = -1; + private int mSelectedColumn = -1; + private SpreadSheetInput mInputArea; + private Cell mCells[][]; + private Cell mCurrent=null; + + private int mStartDisplayRow; + + public synchronized void init() + { + String strParam; + + mStartDisplayRow=0; + + mCellColor=Color.white; + mInputColor=new Color(100, 100, 225); + mTitleFont=new Font("Courier", Font.BOLD, 12); + mStrTitle=getParameter("title"); + if(null==mStrTitle)mStrTitle="SpreadSheet"; + strParam=getParameter("rows"); + if(null==strParam)mRows=9; + else mRows=Integer.parseInt(strParam); + strParam=getParameter("columns"); + if(null==strParam)mColumns=5; + else mColumns=Integer.parseInt(strParam); + mCells=new Cell[mRows][mColumns]; + char strLabel[]=new char[1]; + for(int i=0; i < mRows; i++) + { + for (int j=0; j < mColumns; j++) + { + mCells[i][j]=new Cell(this,Color.lightGray,Color.black,mCellColor,mCellDimension.width-2,mCellDimension.height-2); + strLabel[0]=(char)((int)'a'+j); + strParam=getParameter(""+new String(strLabel)+(i+1)); + if(null!=strParam)mCells[i][j].setUnparsedValue(strParam); + } + } + Dimension workArea=size(); + mInputArea=new SpreadSheetInput(null, this,workArea.width-2,mCellDimension.height-1,mInputColor,Color.white); + resize(mColumns*mCellDimension.width+mRowLabelWidth,((mRows+1)*mCellDimension.height)+mCellDimension.height+mTitleHeight); + } + public void setCurrentValue(float val) + { + if(-1==mSelectedRow||-1==mSelectedColumn)return; + mCells[selectedRow()][mSelectedColumn].setValue(val); +// mCells[mSelectedRow][mSelectedColumn].setValue(val); + repaint(); + } + public void stop() + { + stopped(true); + } + public void start() + { + stopped(false); + } + public void stopped(boolean stopped) + { + mIsStopped=stopped; + } + public boolean stopped() + { + return mIsStopped; + } + public void destroy() + { + for(int i=0;imRows||mSelectedColumn>=mColumns) + { + mSelectedRow = -1; + deselect(true); + } + else + { + if(mSelectedRow>=mRows) + { + mSelectedRow = -1; + deselect(true); + return true; + } + select(); + } + return true; + } + public boolean keyDown(Event evt, int key) + { + mFullUpdate=true; + if(mLeftArrow==key||mRightArrow==key||mUpArrow==key||mDownArrow==key)navigate(key); + else mInputArea.keyDown(key); + return true; + } + private void navigate(int key) + { + switch(key) + { + case mLeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + select(); + break; + case mRightArrow : + if(mSelectedColumn>=mColumns)break; + mSelectedColumn++; + select(); + break; + case mUpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + ensureVisible(); + select(); + break; + case mDownArrow : + if(mSelectedRow+1>=mRows)break; + mSelectedRow++; + ensureVisible(); + select(); + break; + } + } + private int selectedRow() + { + return mSelectedRow+mStartDisplayRow; + } + private int selectedColumn() + { + return mSelectedColumn; + } + private void select() + { + Cell cell; + +// String strString="select selRow:"+String.valueOf(mSelectedRow); +// showStatus(strString); + + cell=mCells[mSelectedRow][mSelectedColumn]; + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + requestFocus(); + mFullUpdate=true; + repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } + + private boolean ensureVisible() + { + Point currPoint=new Point(0,0); + Dimension workArea=size(); + boolean adjusted=false; + +// currPoint.y=((mSelectedRow+1)*mCellDimension.height)+2+mTitleHeight; +// int firstVisibleRowx=((mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; +// int firstVisibleRowx=(2*mCellDimension.height)+2+mTitleHeight; + + int yMin=(2*mCellDimension.height)+2+mTitleHeight; + + currPoint.y=((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; + currPoint.x=(mSelectedColumn*mCellDimension.width)+2+mRowLabelWidth; + + String strString=new String(" "); + if(currPoint.y>workArea.height) + { + mStartDisplayRow++; + strString+="incrementing startdisplayRow"; + adjusted=true; + } + else if(currPoint.y= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(int type, String s) + { + mPaused=false; + if(mType == Cell.URL) + { + mCellThread.stop(); + mCellThread=null; + } + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + mCellThread = new CellThread(this); + mCellThread.start(); + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected = true; + mPaused=true; + } + public void deselect() + { + mSelected = false; + mPaused=false; + mNeedRedisplay = true; + mSpreadSheet.repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-2,mHeight-2); + if(null!=mValueString) + { + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + if(!mTransientValue) + { + if(mValueString.length()>14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + public int type() + { + return mType; + } + public Node parseRoot() + { + return mParseRoot; + } + public void needRedisplay(boolean needRedisplay) + { + mNeedRedisplay=needRedisplay; + } + public boolean needRedisplay() + { + return mNeedRedisplay; + } + public float value() + { + return mValue; + } + public CellThread cellThread() + { + return mCellThread; + } + public SpreadSheet spreadSheet() + { + return mSpreadSheet; + } + public boolean paused() + { + return mPaused; + } +} +//****************************************************************************************************** +// *************************************** NODE ******************************************************* +//****************************************************************************************************** +class Node +{ + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + private int mType; + private Node mLeft; + private Node mRight; + private int mRow; + private int mColumn; + private float mValue; + private char mOp; + + public Node() + { + mLeft=null; + mRight=null; + mValue=0; + mRow=-1; + mColumn=-1; + mOp=0; + mType=Node.VALUE; + } + public Node(Node node) + { + mLeft=node.mLeft; + mRight=node.mRight; + mValue=node.mValue; + mRow=node.mRow; + mColumn=node.mColumn; + mOp=node.mOp; + mType=node.mType; + } + public void print(int indentLevel) + { + char l[] = new char[1]; + switch(mType) + { + case Node.VALUE: + break; + case Node.CELL: + l[0] = (char)((int)'A' + column()); + break; + case Node.OP: + mLeft.print(indentLevel + 3); + mRight.print(indentLevel + 3); + break; + } + } + public int type() + { + return mType; + } + public void type(int type) + { + mType=type; + } + public float value() + { + return mValue; + } + public void value(float value) + { + mValue=value; + } + public Node left() + { + return mLeft; + } + public void left(Node left) + { + mLeft=left; + } + public Node right() + { + return mRight; + } + public void right(Node right) + { + mRight=right; + } + public char op() + { + return mOp; + } + public void op(char op) + { + mOp=op; + } + public int row() + { + return mRow; + } + public void row(int row) + { + mRow=row; + } + public int column() + { + return mColumn; + } + public void column(int column) + { + mColumn=column; + } +} + +class InputField +{ + private int mMaxchars = 50; + private Applet mApplet; + private String mStringValue; + private char mBuffer[]; + private int mChars; + private int mWidth; + private int mHeight; + private Color mBgColor; + private Color mFgColor; + + public InputField(String initValue,Applet applet, int width, int height,Color bgColor, Color fgColor) + { + mWidth=width; + mHeight=height; + mBgColor=bgColor; + mFgColor=fgColor; + mApplet=applet; + mBuffer = new char[mMaxchars]; + mChars = 0; + if(initValue != null) + { + initValue.getChars(0, initValue.length(),mBuffer, 0); + mChars = initValue.length(); + } + mStringValue=initValue; + } + public void setText(String val) + { + int i; + for(i=0; i < mMaxchars; i++)mBuffer[i] = 0; + mStringValue=new String(val); + if (val == null) + { + mStringValue= ""; + mChars = 0; + mBuffer[0] = 0; + } + else + { + mStringValue.getChars(0,mStringValue.length(), mBuffer, 0); + mChars = val.length(); + mStringValue = new String(mBuffer); + } + } + public String getValue() + { + return mStringValue; + } + public void paint(Graphics g, int x, int y) + { + g.setColor(mBgColor); + g.fillRect(x, y,mWidth,mHeight); + if (mStringValue!= null) + { + g.setColor(mFgColor); + g.drawString(mStringValue, x, y + (mHeight / 2) + 3); + } + } + public void mouseUp(int x, int y) + { + } + public void keyDown(int key) + { + if(mChars=mRows||mSelectedColumn>=mColumns) + { + mSelectedRow = -1; + deselect(true); + return true; + } + select(); + return true; + } + public boolean keyDown(Event evt, int key) + { + mFullUpdate=true; + if(Key.LeftArrow==key||Key.RightArrow==key||Key.UpArrow==key||Key.DownArrow==key) + { + mInputArea.keyDown(Key.Return); + navigate(key); + } + else mInputArea.keyDown(key); + return true; + } + private void navigate(int key) + { + switch(key) + { + case Key.LeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + ensureVisible(); + select(); + break; + case Key.RightArrow : + if(mSelectedColumn+1>=mColumns)break; + mSelectedColumn++; + ensureVisible(); + select(); + break; + case Key.UpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + ensureVisible(); + select(); + break; + case Key.DownArrow : + if(mSelectedRow+1>=mRows)break; + mSelectedRow++; + ensureVisible(); + select(); + break; + } + } + private void select() + { + Cell cell=mCells[mSelectedRow][mSelectedColumn]; + + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + mApplet.requestFocus(); + mFullUpdate=true; + mApplet.repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } + private void ensureVisible() + { + int yMin=(2*mCellDimension.height)+2+mTitleHeight; + int xMin=2+mRowLabelWidth+mCellDimension.width; + Point currPoint=new Point(0,0); + + currPoint.y=((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; + currPoint.x=((mSelectedColumn-mStartDisplayColumn)*mCellDimension.width)+2+mRowLabelWidth+mCellDimension.width; + if(currPoint.y>mControlDimension.height)mStartDisplayRow++; + else if(currPoint.ymControlDimension.width)mStartDisplayColumn++; + else if(currPoint.x=mRows||col>=mColumns)return false; + strCellData="l"; + strCellData+=strData; + mCells[row][col].setUnparsedValue(strCellData); + mApplet.repaint(); + return true; + } + public void setDocumentTitle(String strDocumentTitle) + { + mStrTitle=strDocumentTitle; + } +} + +//****************************************************************************************************** +// ******************************************** CELL *************************************************** +//****************************************************************************************************** +class Cell +{ + public static final int VALUE = 0; + public static final int LABEL = 1; + public static final int URL = 2; + public static final int FORMULA = 3; + + private Node mParseRoot; + private boolean mNeedRedisplay; + private boolean mSelected = false; + private boolean mTransientValue = false; + private int mType=Cell.VALUE; + private String mValueString = ""; + private String mPrintString = "v"; + private float mValue; + private Color mBgColor; + private Color mFgColor; + private Color mHighlightColor; + private int mWidth; + private int mHeight; + private SpreadSheet mSpreadSheet; + private boolean mPaused=false; + + public Cell(SpreadSheet spreadSheet,Color bgColor,Color fgColor,Color highlightColor,int width,int height) + { + mSpreadSheet=spreadSheet; + mBgColor=bgColor; + mFgColor=fgColor; + mHighlightColor=highlightColor; + mWidth=width; + mHeight=height; + mNeedRedisplay=true; + } + public void setRawValue(float value) + { + mValueString=Float.toString(value); + mValue=value; + } + public void setValue(float value) + { + setRawValue(value); + mPrintString="v"+mValueString; + mType=Cell.VALUE; + mPaused=false; + mSpreadSheet.recalculate(); + mNeedRedisplay=true; + } + public void setTransientValue(float value) + { + mTransientValue=true; + mValue=value; + mNeedRedisplay=true; + mSpreadSheet.recalculate(); + } + public void setUnparsedValue(String s) + { + switch (s.charAt(0)) + { + case 'v': + setValue(Cell.VALUE, s.substring(1)); + break; + case 'f': + setValue(Cell.FORMULA, s.substring(1)); + break; + case 'l': + setValue(Cell.LABEL, s.substring(1)); + break; + case 'u': + setValue(Cell.URL, s.substring(1)); + break; + } + } + public String parseFormula(String formula, Node node) + { + String subformula; + String restFormula; + float value; + int length = formula.length(); + Node left; + Node right; + char op; + + if(null==formula)return null; + subformula=parseValue(formula, node); + if(null==subformula||0==subformula.length())return null; + if(subformula==formula)return formula; + switch(op=subformula.charAt(0)) + { + case 0: + return null; + case ')': + return subformula; + case '+': + case '*': + case '-': + case '/': + restFormula = subformula.substring(1); + subformula = parseValue(restFormula, right=new Node()); + if(subformula != restFormula) + { + left = new Node(node); + node.left(left); + node.right(right); + node.op(op); + node.type(Node.OP); + return subformula; + } + else return formula; + default: + return formula; + } + } + public String parseValue(String formula, Node node) + { + char c=formula.charAt(0); + String subformula; + String restFormula; + float value; + int row; + int column; + + restFormula = formula; + if (c == '(') + { + restFormula = formula.substring(1); + subformula = parseFormula(restFormula, node); + if(subformula == null || subformula.length() == restFormula.length())return formula; + else if (! (subformula.charAt(0) == ')'))return formula; + restFormula = subformula; + } + else if (c >= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(int type, String s) + { + mPaused=false; + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected=true; + mPaused=true; + } + public void deselect() + { + mSelected=false; + mPaused=false; + mNeedRedisplay=true; + mSpreadSheet.applet().repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-1,mHeight-1); + if(null!=mValueString) + { + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + if(!mTransientValue) + { + if(mValueString.length()>14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + public int type() + { + return mType; + } + public Node parseRoot() + { + return mParseRoot; + } + public void needRedisplay(boolean needRedisplay) + { + mNeedRedisplay=needRedisplay; + } + public boolean needRedisplay() + { + return mNeedRedisplay; + } + public float value() + { + return mValue; + } + public SpreadSheet spreadSheet() + { + return mSpreadSheet; + } + public boolean paused() + { + return mPaused; + } +} +//****************************************************************************************************** +// *************************************** NODE ******************************************************* +//****************************************************************************************************** +class Node +{ + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + private int mType; + private Node mLeft; + private Node mRight; + private int mRow; + private int mColumn; + private float mValue; + private char mOp; + + public Node() + { + mLeft=null; + mRight=null; + mValue=0; + mRow=-1; + mColumn=-1; + mOp=0; + mType=Node.VALUE; + } + public Node(Node node) + { + mLeft=node.mLeft; + mRight=node.mRight; + mValue=node.mValue; + mRow=node.mRow; + mColumn=node.mColumn; + mOp=node.mOp; + mType=node.mType; + } + public void print(int indentLevel) + { + char l[] = new char[1]; + switch(mType) + { + case Node.VALUE: + break; + case Node.CELL: + l[0] = (char)((int)'A' + column()); + break; + case Node.OP: + mLeft.print(indentLevel + 3); + mRight.print(indentLevel + 3); + break; + } + } + public int type() + { + return mType; + } + public void type(int type) + { + mType=type; + } + public float value() + { + return mValue; + } + public void value(float value) + { + mValue=value; + } + public Node left() + { + return mLeft; + } + public void left(Node left) + { + mLeft=left; + } + public Node right() + { + return mRight; + } + public void right(Node right) + { + mRight=right; + } + public char op() + { + return mOp; + } + public void op(char op) + { + mOp=op; + } + public int row() + { + return mRow; + } + public void row(int row) + { + mRow=row; + } + public int column() + { + return mColumn; + } + public void column(int column) + { + mColumn=column; + } +} + +class InputField +{ + private int mMaxchars = 50; + private Applet mApplet; + private String mStringValue; + private char mBuffer[]; + private int mChars; + private int mWidth; + private int mHeight; + private Color mBgColor; + private Color mFgColor; + + public InputField(String initValue,Applet applet,int width,int height,Color bgColor, Color fgColor) + { + mWidth=width; + mHeight=height; + mBgColor=bgColor; + mFgColor=fgColor; + mApplet=applet; + mBuffer = new char[mMaxchars]; + mChars = 0; + if(initValue != null) + { + initValue.getChars(0, initValue.length(),mBuffer, 0); + mChars = initValue.length(); + } + mStringValue=initValue; + } + public void setText(String val) + { + int i; + for(i=0; i < mMaxchars; i++)mBuffer[i] = 0; + mStringValue=new String(val); + if (val == null) + { + mStringValue= ""; + mChars = 0; + mBuffer[0] = 0; + } + else + { + mStringValue.getChars(0,mStringValue.length(), mBuffer, 0); + mChars = val.length(); + mStringValue = new String(mBuffer); + } + } + public String getValue() + { + return mStringValue; + } + public void paint(Graphics g, int x, int y) + { + g.setColor(mBgColor); + g.fillRect(x, y,mWidth,mHeight); + if(mStringValue!= null) + { + g.setColor(mFgColor); + g.drawString(mStringValue, x, y + (mHeight / 2) + 3); + } + } + public void mouseUp(int x, int y) + { + } + public void keyDown(int key) + { + if(mChars=mRows||mSelectedColumn>=mColumns) + { + mSelectedRow = -1; + deselect(true); + return true; + } + select(); + return true; + } + public boolean keyDown(Event evt, int key) + { + mFullUpdate=true; + if(Key.LeftArrow==key||Key.RightArrow==key||Key.UpArrow==key||Key.DownArrow==key) + { + mInputArea.keyDown(Key.Return); + navigate(key); + } + else mInputArea.keyDown(key); + return true; + } + private void navigate(int key) + { + switch(key) + { + case Key.LeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + select(); + break; + case Key.RightArrow : + if(mSelectedColumn>=mColumns)break; + mSelectedColumn++; + select(); + break; + case Key.UpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + ensureVisible(); + select(); + break; + case Key.DownArrow : + if(mSelectedRow+1>=mRows)break; + mSelectedRow++; + ensureVisible(); + select(); + break; + } + } + private void select() + { + Cell cell=mCells[mSelectedRow][mSelectedColumn]; + + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + mApplet.requestFocus(); + mFullUpdate=true; + mApplet.repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } + public Applet applet() + { + return mApplet; + } + private boolean ensureVisible() + { + int yMin=(2*mCellDimension.height)+2+mTitleHeight; + Point currPoint=new Point(0,0); + Dimension workArea=mApplet.size(); + boolean adjusted=false; + + yMin=(2*mCellDimension.height)+2+mTitleHeight; + currPoint.y=((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; + currPoint.x=(mSelectedColumn*mCellDimension.width)+2+mRowLabelWidth; + if(currPoint.y>workArea.height){mStartDisplayRow++;adjusted=true;} + else if(currPoint.y= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(int type, String s) + { + mPaused=false; + if(mType == Cell.URL) + { + mCellThread.stop(); + mCellThread=null; + } + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + mCellThread = new CellThread(this); + mCellThread.start(); + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected=true; + mPaused=true; + } + public void deselect() + { + mSelected=false; + mPaused=false; + mNeedRedisplay=true; + mSpreadSheet.applet().repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-1,mHeight-1); + if(null!=mValueString) + { + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + if(!mTransientValue) + { + if(mValueString.length()>14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + public int type() + { + return mType; + } + public Node parseRoot() + { + return mParseRoot; + } + public void needRedisplay(boolean needRedisplay) + { + mNeedRedisplay=needRedisplay; + } + public boolean needRedisplay() + { + return mNeedRedisplay; + } + public float value() + { + return mValue; + } + public CellThread cellThread() + { + return mCellThread; + } + public SpreadSheet spreadSheet() + { + return mSpreadSheet; + } + public boolean paused() + { + return mPaused; + } +} +//****************************************************************************************************** +// *************************************** NODE ******************************************************* +//****************************************************************************************************** +class Node +{ + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + private int mType; + private Node mLeft; + private Node mRight; + private int mRow; + private int mColumn; + private float mValue; + private char mOp; + + public Node() + { + mLeft=null; + mRight=null; + mValue=0; + mRow=-1; + mColumn=-1; + mOp=0; + mType=Node.VALUE; + } + public Node(Node node) + { + mLeft=node.mLeft; + mRight=node.mRight; + mValue=node.mValue; + mRow=node.mRow; + mColumn=node.mColumn; + mOp=node.mOp; + mType=node.mType; + } + public void print(int indentLevel) + { + char l[] = new char[1]; + switch(mType) + { + case Node.VALUE: + break; + case Node.CELL: + l[0] = (char)((int)'A' + column()); + break; + case Node.OP: + mLeft.print(indentLevel + 3); + mRight.print(indentLevel + 3); + break; + } + } + public int type() + { + return mType; + } + public void type(int type) + { + mType=type; + } + public float value() + { + return mValue; + } + public void value(float value) + { + mValue=value; + } + public Node left() + { + return mLeft; + } + public void left(Node left) + { + mLeft=left; + } + public Node right() + { + return mRight; + } + public void right(Node right) + { + mRight=right; + } + public char op() + { + return mOp; + } + public void op(char op) + { + mOp=op; + } + public int row() + { + return mRow; + } + public void row(int row) + { + mRow=row; + } + public int column() + { + return mColumn; + } + public void column(int column) + { + mColumn=column; + } +} + +class InputField +{ + private int mMaxchars = 50; + private Applet mApplet; + private String mStringValue; + private char mBuffer[]; + private int mChars; + private int mWidth; + private int mHeight; + private Color mBgColor; + private Color mFgColor; + + public InputField(String initValue,Applet applet,int width,int height,Color bgColor, Color fgColor) + { + mWidth=width; + mHeight=height; + mBgColor=bgColor; + mFgColor=fgColor; + mApplet=applet; + mBuffer = new char[mMaxchars]; + mChars = 0; + if(initValue != null) + { + initValue.getChars(0, initValue.length(),mBuffer, 0); + mChars = initValue.length(); + } + mStringValue=initValue; + } + public void setText(String val) + { + int i; + for(i=0; i < mMaxchars; i++)mBuffer[i] = 0; + mStringValue=new String(val); + if (val == null) + { + mStringValue= ""; + mChars = 0; + mBuffer[0] = 0; + } + else + { + mStringValue.getChars(0,mStringValue.length(), mBuffer, 0); + mChars = val.length(); + mStringValue = new String(mBuffer); + } + } + public String getValue() + { + return mStringValue; + } + public void paint(Graphics g, int x, int y) + { + g.setColor(mBgColor); + g.fillRect(x, y,mWidth,mHeight); + if(mStringValue!= null) + { + g.setColor(mFgColor); + g.drawString(mStringValue, x, y + (mHeight / 2) + 3); + } + } + public void mouseUp(int x, int y) + { + } + public void keyDown(int key) + { + if(mChars=mRows||mSelectedColumn>=mColumns) + { + mSelectedRow = -1; + deselect(true); + return true; + } + select(); + return true; + } + public boolean keyDown(Event evt, int key) + { + mFullUpdate=true; + if(Key.LeftArrow==key||Key.RightArrow==key||Key.UpArrow==key||Key.DownArrow==key) + { + mInputArea.keyDown(Key.Return); + navigate(key); + } + else mInputArea.keyDown(key); + return true; + } + private void navigate(int key) + { + switch(key) + { + case Key.LeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + select(); + break; + case Key.RightArrow : + if(mSelectedColumn>=mColumns)break; + mSelectedColumn++; + select(); + break; + case Key.UpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + ensureVisible(); + select(); + break; + case Key.DownArrow : + if(mSelectedRow+1>=mRows)break; + mSelectedRow++; + ensureVisible(); + select(); + break; + } + } + private void select() + { + Cell cell=mCells[mSelectedRow][mSelectedColumn]; + + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + mApplet.requestFocus(); + mFullUpdate=true; + mApplet.repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } + public Applet applet() + { + return mApplet; + } + private void ensureVisible() + { + int yMin=(2*mCellDimension.height)+2+mTitleHeight; + Point currPoint=new Point(0,0); + + yMin=(2*mCellDimension.height)+2+mTitleHeight; + currPoint.y=((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; + currPoint.x=(mSelectedColumn*mCellDimension.width)+2+mRowLabelWidth; + if(currPoint.y>mControlDimension.height)mStartDisplayRow++; + else if(currPoint.y= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(int type, String s) + { + mPaused=false; + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected=true; + mPaused=true; + } + public void deselect() + { + mSelected=false; + mPaused=false; + mNeedRedisplay=true; + mSpreadSheet.applet().repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-1,mHeight-1); + if(null!=mValueString) + { + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + if(!mTransientValue) + { + if(mValueString.length()>14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + public int type() + { + return mType; + } + public Node parseRoot() + { + return mParseRoot; + } + public void needRedisplay(boolean needRedisplay) + { + mNeedRedisplay=needRedisplay; + } + public boolean needRedisplay() + { + return mNeedRedisplay; + } + public float value() + { + return mValue; + } + public SpreadSheet spreadSheet() + { + return mSpreadSheet; + } + public boolean paused() + { + return mPaused; + } +} +//****************************************************************************************************** +// *************************************** NODE ******************************************************* +//****************************************************************************************************** +class Node +{ + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + private int mType; + private Node mLeft; + private Node mRight; + private int mRow; + private int mColumn; + private float mValue; + private char mOp; + + public Node() + { + mLeft=null; + mRight=null; + mValue=0; + mRow=-1; + mColumn=-1; + mOp=0; + mType=Node.VALUE; + } + public Node(Node node) + { + mLeft=node.mLeft; + mRight=node.mRight; + mValue=node.mValue; + mRow=node.mRow; + mColumn=node.mColumn; + mOp=node.mOp; + mType=node.mType; + } + public void print(int indentLevel) + { + char l[] = new char[1]; + switch(mType) + { + case Node.VALUE: + break; + case Node.CELL: + l[0] = (char)((int)'A' + column()); + break; + case Node.OP: + mLeft.print(indentLevel + 3); + mRight.print(indentLevel + 3); + break; + } + } + public int type() + { + return mType; + } + public void type(int type) + { + mType=type; + } + public float value() + { + return mValue; + } + public void value(float value) + { + mValue=value; + } + public Node left() + { + return mLeft; + } + public void left(Node left) + { + mLeft=left; + } + public Node right() + { + return mRight; + } + public void right(Node right) + { + mRight=right; + } + public char op() + { + return mOp; + } + public void op(char op) + { + mOp=op; + } + public int row() + { + return mRow; + } + public void row(int row) + { + mRow=row; + } + public int column() + { + return mColumn; + } + public void column(int column) + { + mColumn=column; + } +} + +class InputField +{ + private int mMaxchars = 50; + private Applet mApplet; + private String mStringValue; + private char mBuffer[]; + private int mChars; + private int mWidth; + private int mHeight; + private Color mBgColor; + private Color mFgColor; + + public InputField(String initValue,Applet applet,int width,int height,Color bgColor, Color fgColor) + { + mWidth=width; + mHeight=height; + mBgColor=bgColor; + mFgColor=fgColor; + mApplet=applet; + mBuffer = new char[mMaxchars]; + mChars = 0; + if(initValue != null) + { + initValue.getChars(0, initValue.length(),mBuffer, 0); + mChars = initValue.length(); + } + mStringValue=initValue; + } + public void setText(String val) + { + int i; + for(i=0; i < mMaxchars; i++)mBuffer[i] = 0; + mStringValue=new String(val); + if (val == null) + { + mStringValue= ""; + mChars = 0; + mBuffer[0] = 0; + } + else + { + mStringValue.getChars(0,mStringValue.length(), mBuffer, 0); + mChars = val.length(); + mStringValue = new String(mBuffer); + } + } + public String getValue() + { + return mStringValue; + } + public void paint(Graphics g, int x, int y) + { + g.setColor(mBgColor); + g.fillRect(x, y,mWidth,mHeight); + if(mStringValue!= null) + { + g.setColor(mFgColor); + g.drawString(mStringValue, x, y + (mHeight / 2) + 3); + } + } + public void mouseUp(int x, int y) + { + } + public void keyDown(int key) + { + if(mChars=strLength)strFraction=".00"; + else strFraction=strDouble.substring(ptIndex,strLength); + if(2==strFraction.length())strFraction+="0"; + strFixed=strDouble.substring(0,ptIndex); + strLength=strFixed.length(); + initPos=strLength%3; + commaCount=strLength/3; + if(0==initPos) + { + initPos+=3; + commaCount--; + } + strFinal+="$"; + for(int count=0;count=strLength)return String.valueOf(value); + strFraction=strRep.substring(ptIndex+1,strLength); + strFractionLength=strFraction.length(); + if(strFractionLength>2)strFraction=strRep.substring(ptIndex+1,strLength-(strFractionLength-2)); + strWhole=strRep.substring(0,ptIndex); + return strWhole+"."+strFraction; +} +}; diff --git a/java/SPREAD/NODE~1.CLA b/java/SPREAD/NODE~1.CLA new file mode 100644 index 0000000..529a530 Binary files /dev/null and b/java/SPREAD/NODE~1.CLA differ diff --git a/java/SPREAD/NOTES.TXT b/java/SPREAD/NOTES.TXT new file mode 100644 index 0000000..22a389f --- /dev/null +++ b/java/SPREAD/NOTES.TXT @@ -0,0 +1,11 @@ +// +// * Parse a spreadsheet formula. The syntax is defined as: +// * +// * formula -> value +// * formula -> value op value +// * value -> '(' formula ')' +// * value -> cell +// * value -> +// * op -> '+' | '*' | '/' | '-' +// * cell -> +// */ diff --git a/java/SPREAD/PREPAY~1.CLA b/java/SPREAD/PREPAY~1.CLA new file mode 100644 index 0000000..6cbb100 Binary files /dev/null and b/java/SPREAD/PREPAY~1.CLA differ diff --git a/java/SPREAD/PREPAY~1.JAV b/java/SPREAD/PREPAY~1.JAV new file mode 100644 index 0000000..ea83f86 --- /dev/null +++ b/java/SPREAD/PREPAY~1.JAV @@ -0,0 +1,55 @@ + +public class Prepayment +{ + double mAmount; + double mIncrement; + double mFrequency; + int mPeriod; + + public Prepayment() + { + mAmount=0.00; + mIncrement=0.00; + mFrequency=0.00; + mPeriod=1; + } + public Prepayment(double amount,double increment,double frequency) + { + mAmount=amount; + mIncrement=increment; + mFrequency=frequency; + mPeriod=1; + } + public double amount() + { + return mAmount; + } + public void amount(double amount) + { + mAmount=amount; + } + public double increment() + { + return mIncrement; + } + public void increment(double increment) + { + mIncrement=increment; + } + public double frequency() + { + return mFrequency; + } + public void frequency(double frequency) + { + mFrequency=frequency; + } + public int period() + { + return mPeriod; + } + public void period(int period) + { + mPeriod=period; + } +}; diff --git a/java/SPREAD/PROTO~1.JAV b/java/SPREAD/PROTO~1.JAV new file mode 100644 index 0000000..595298e --- /dev/null +++ b/java/SPREAD/PROTO~1.JAV @@ -0,0 +1,306 @@ +import java.awt.*; + +public class Proto extends java.applet.Applet +{ + SpreadSheetInterface mSpreadSheet; + PurePassThru mPurePassThru=new PurePassThru(); + PureCashflow mPureCashflows[]; + TextField mCtlPrincipal; + TextField mCtlInterest; + TextField mCtlTerm; + + TextField mCtlPrepayment; + TextField mCtlIncrement; + TextField mCtlFrequency; + Label mCtlCost; + + Button mCtlButton; + + public void init() + { + performLayout(); + mSpreadSheet=new SpreadSheetInterface(this,361,10,new Dimension(630,200)); + mSpreadSheet.setDocumentTitle("Paydown Calculator v1.00"); + mSpreadSheet.gridLock(true); + repaint(); + } + public void update(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.update(graphics); + } + public void paint(Graphics graphics) + { + if(null!=mSpreadSheet)mSpreadSheet.paint(graphics); + } + public boolean mouseDown(Event event,int x,int y) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.mouseDown(event,x,y); + return true; + } + public boolean keyDown(Event event,int key) + { + if(null!=mCtlPrincipal&&mCtlPrincipal==event.target)return false; + else if(null!=mCtlInterest&&mCtlInterest==event.target)return false; + else if(null!=mCtlTerm&&mCtlTerm==event.target)return false; + else if(null!=mCtlButton&&mCtlButton==event.target)return false; + else if(null!=mCtlPrepayment&&mCtlPrepayment==event.target)return false; + else if(null!=mCtlIncrement&&mCtlIncrement==event.target)return false; + else if(null!=mCtlFrequency&&mCtlFrequency==event.target)return false; + else if(null!=mSpreadSheet)return mSpreadSheet.keyDown(event,key); + return true; + } + public void performLayout() + { + GridBagLayout layout=new GridBagLayout(); + GridBagConstraints constraints=new GridBagConstraints(); + setFont(new Font("Fixed",Font.BOLD,12)); + setLayout(layout); + + constraints.fill=GridBagConstraints.BOTH; + constraints.weightx=0.25; + Label prnLabel=new Label("Principal",Label.LEFT); + layout.setConstraints(prnLabel,constraints); + add(prnLabel); + mCtlPrincipal=new TextField("$100000.00"); + layout.setConstraints(mCtlPrincipal,constraints); + add(mCtlPrincipal); + + Label intLabel=new Label("Interest",Label.LEFT); + layout.setConstraints(intLabel,constraints); + add(intLabel); + mCtlInterest=new TextField("8.00%"); + layout.setConstraints(mCtlInterest,constraints); + add(mCtlInterest); + + Label trmLabel=new Label("Term",Label.LEFT); + layout.setConstraints(trmLabel,constraints); + add(trmLabel); + mCtlTerm=new TextField("360"); + layout.setConstraints(mCtlTerm,constraints); + add(mCtlTerm); + constraints.gridwidth=GridBagConstraints.REMAINDER; + mCtlButton=new Button("Calculate"); + layout.setConstraints(mCtlButton,constraints); + add(mCtlButton); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label ppyLabel=new Label("Prepayment",Label.LEFT); + layout.setConstraints(ppyLabel,constraints); + add(ppyLabel); + mCtlPrepayment=new TextField("$0.00"); + layout.setConstraints(mCtlPrepayment,constraints); + add(mCtlPrepayment); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label ppyHlpLabel=new Label("Enter the amount of your prepayment(s)."); + layout.setConstraints(ppyHlpLabel,constraints); + add(ppyHlpLabel); + + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label incLabel=new Label("Increment",Label.LEFT); + layout.setConstraints(incLabel,constraints); + add(incLabel); + mCtlIncrement=new TextField("$0.00"); + layout.setConstraints(mCtlIncrement,constraints); + add(mCtlIncrement); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label incHlpLabel=new Label("Increment the prepayment(s) by this amount."); + layout.setConstraints(incHlpLabel,constraints); + add(incHlpLabel); + + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label frqLabel=new Label("Frequency",Label.LEFT); + layout.setConstraints(frqLabel,constraints); + add(frqLabel); + mCtlFrequency=new TextField("0.00"); + layout.setConstraints(mCtlFrequency,constraints); + add(mCtlFrequency); + constraints.gridwidth=GridBagConstraints.REMAINDER; + Label frqHlpLabel=new Label("Frequency at which to increment the prepayments (ie) number of months."); + layout.setConstraints(frqHlpLabel,constraints); + add(frqHlpLabel); + + constraints.fill=GridBagConstraints.BOTH; + constraints.gridwidth=1; + Label costLabel=new Label("Cost Of Capital:",Label.LEFT); + layout.setConstraints(costLabel,constraints); + add(costLabel); + mCtlCost=new Label("$0.00",Label.LEFT); + constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mCtlCost,constraints); + add(mCtlCost); + } + public boolean action(Event event,Object object) + { + if(null!=mCtlButton&&mCtlButton==event.target)performCalc(); + return true; + } + public void performCalc() + { + Prepayment prepayment=new Prepayment(); + String strPrincipal=mCtlPrincipal.getText(); + String strInterest=mCtlInterest.getText(); + String strTerm=mCtlTerm.getText(); + String strPrepayment=mCtlPrepayment.getText(); + String strIncrement=mCtlIncrement.getText(); + String strFrequency=mCtlFrequency.getText(); + Double workDouble; + double principal; + double interest; + int term; + int itemIndex; + + workDouble=new Double(0); + strPrincipal=strPrincipal.replace('$',' '); + workDouble=workDouble.valueOf(strPrincipal); + principal=workDouble.doubleValue(); + strInterest=strInterest.replace('%',' '); + workDouble=workDouble.valueOf(strInterest); + interest=workDouble.doubleValue(); + term=Integer.parseInt(strTerm); + strPrepayment=strPrepayment.replace('$',' '); + workDouble=workDouble.valueOf(strPrepayment); + prepayment.amount(workDouble.doubleValue()); + strIncrement=strIncrement.replace('$',' '); + workDouble=workDouble.valueOf(strIncrement); + prepayment.increment(workDouble.doubleValue()); + workDouble=workDouble.valueOf(strFrequency); + prepayment.frequency(workDouble.doubleValue()); + + mPurePassThru.issBal(principal); + mPurePassThru.wac(interest); + mPurePassThru.coupon(interest); + mPurePassThru.wam((short)term); + mPurePassThru.origTerm((short)term); + mPurePassThru.psa(0.00); + if(0.00!=prepayment.amount()||0.00!=prepayment.increment())generateFlows(prepayment); + else generateFlows(); + Money money=new Money(0); + mSpreadSheet.clear(); + repaint(); + mSpreadSheet.setCellData(0,0,"BeginBal"); + mSpreadSheet.setCellData(0,1,"SMM"); + mSpreadSheet.setCellData(0,2,"MtgPay"); + mSpreadSheet.setCellData(0,3,"NetIntPay"); + mSpreadSheet.setCellData(0,4,"GrossIntPay"); + mSpreadSheet.setCellData(0,5,"SchedPrinPay"); + mSpreadSheet.setCellData(0,6,"Prepayment"); + mSpreadSheet.setCellData(0,7,"TotPrin"); + mSpreadSheet.setCellData(0,8,"Cashflow"); + mSpreadSheet.setCellData(0,9,"Factor"); + + for(itemIndex=0;itemIndex0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(0.00); + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } + public void generateFlows(Prepayment prepayment) + { + double issBal; + double tmpCPR; + int actualMonth; + int indexFlows; + + indexFlows=0; + mPureCashflows=new PureCashflow[mPurePassThru.wam()]; + issBal=mPurePassThru.issBal(); + for(int wam=mPurePassThru.wam();wam>0&&issBal>0.00;wam--) + { + mPureCashflows[indexFlows]=new PureCashflow(); + actualMonth=(mPurePassThru.origTerm()-wam)+1; + if(actualMonth<=30)tmpCPR=.002*(double)actualMonth; + else tmpCPR=.06; + mPureCashflows[indexFlows].beginBal(issBal); + mPureCashflows[indexFlows].smm(1.00-Math.pow(1.00-(tmpCPR*mPurePassThru.psa()/100.00),1.00/12.00)); + if(0==indexFlows)mPureCashflows[indexFlows].mtgPay((issBal*(mPurePassThru.wac()/1200.00))/ + (1.00-Math.pow(1.00/(1.00+(mPurePassThru.wac()/1200.00)),(double)wam))); + else mPureCashflows[indexFlows].mtgPay(mPureCashflows[indexFlows-1].mtgPay()); + if(issBal<=mPureCashflows[indexFlows].mtgPay())mPureCashflows[indexFlows].mtgPay(issBal); + mPureCashflows[indexFlows].netIntPay(issBal*(mPurePassThru.coupon()/1200.00)); + if(0==indexFlows)mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows].netIntPay()); + else mPureCashflows[indexFlows].grossIntPay(mPureCashflows[indexFlows-1].grossIntPay()+mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].schedPrinPay(mPureCashflows[indexFlows].mtgPay()-mPureCashflows[indexFlows].netIntPay()); + mPureCashflows[indexFlows].prepayment(prepayment.amount()); + prepayment.period(prepayment.period()+1); + if(prepayment.period()>prepayment.frequency()) + { + prepayment.amount(prepayment.amount()+prepayment.increment()); + prepayment.period(1); + } + mPureCashflows[indexFlows].totPrin(mPureCashflows[indexFlows].schedPrinPay()+mPureCashflows[indexFlows].prepayment()); + mPureCashflows[indexFlows].cashflow(mPureCashflows[indexFlows].netIntPay()+mPureCashflows[indexFlows].totPrin()); + mPureCashflows[indexFlows].factor(issBal/mPurePassThru.issBal()); + issBal-=mPureCashflows[indexFlows].totPrin(); + indexFlows++; + } + } +} + diff --git a/java/SPREAD/PURECA~1.CLA b/java/SPREAD/PURECA~1.CLA new file mode 100644 index 0000000..c4bbe5e Binary files /dev/null and b/java/SPREAD/PURECA~1.CLA differ diff --git a/java/SPREAD/PURECA~1.JAV b/java/SPREAD/PURECA~1.JAV new file mode 100644 index 0000000..84b8fd1 --- /dev/null +++ b/java/SPREAD/PURECA~1.JAV @@ -0,0 +1,140 @@ + +class PureCashflow +{ + double mBeginBal; + double mSMM; + double mMtgPay; + double mNetIntPay; + double mGrossIntPay; + double mSchedPrinPay; + double mPrepayment; + double mTotPrin; + double mCashFlow; + double mFactor; + +public PureCashflow() +{ + mBeginBal=0.00; + mSMM=0.00; + mMtgPay=0.00; + mNetIntPay=0.00; + mGrossIntPay=0.00; + mSchedPrinPay=0.00; + mPrepayment=0.00; + mTotPrin=0.00; + mCashFlow=0.00; + mFactor=0.00; +} +public PureCashflow(PureCashflow pureCashflow) +{ + beginBal(pureCashflow.beginBal()); + smm(pureCashflow.smm()); + mtgPay(pureCashflow.mtgPay()); + netIntPay(pureCashflow.netIntPay()); + grossIntPay(pureCashflow.grossIntPay()); + schedPrinPay(pureCashflow.schedPrinPay()); + prepayment(pureCashflow.prepayment()); + totPrin(pureCashflow.totPrin()); + cashflow(pureCashflow.cashflow()); + factor(pureCashflow.factor()); +} +public double beginBal() +{ + return mBeginBal; +} +public void beginBal(double beginBal) +{ + mBeginBal=beginBal; +} +public double smm() +{ + return mSMM; +} +public void smm(double smm) +{ + mSMM=smm; +} +public double mtgPay() +{ + return mMtgPay; +} +public void mtgPay(double mtgPay) +{ + mMtgPay=mtgPay; +} +public double netIntPay() +{ + return mNetIntPay; +} +public void netIntPay(double netIntPay) +{ + mNetIntPay=netIntPay; +} +public double grossIntPay() +{ + return mGrossIntPay; +} +public void grossIntPay(double grossIntPay) +{ + mGrossIntPay=grossIntPay; +} +public double schedPrinPay() +{ + return mSchedPrinPay; +} +public void schedPrinPay(double schedPrinPay) +{ + mSchedPrinPay=schedPrinPay; +} +public double prepayment() +{ + return mPrepayment; +} +public void prepayment(double prepayment) +{ + mPrepayment=prepayment; +} +public double totPrin() +{ + return mTotPrin; +} +public void totPrin(double totPrin) +{ + mTotPrin=totPrin; +} +public double cashflow() +{ + return mCashFlow; +} +public void cashflow(double cashFlow) +{ + mCashFlow=cashFlow; +} +public double factor() +{ + return mFactor; +} +public void factor(double factor) +{ + mFactor=factor; +} +public String toString() +{ + String strReturn; + Money money; + + strReturn=new String(); + money=new Money(); + strReturn+=(new Money(beginBal())).toString(); +// strReturn+=(new Money(smm())).toString(); + strReturn+=(new Money(mtgPay())).toString(); + strReturn+=(new Money(netIntPay())).toString(); + strReturn+=(new Money(grossIntPay())).toString(); + strReturn+=(new Money(schedPrinPay())).toString(); + strReturn+=(new Money(prepayment())).toString(); + strReturn+=(new Money(totPrin())).toString(); + strReturn+=(new Money(cashflow())).toString()+" "; +// strReturn+=String.valueOf(factor()); + return strReturn; +} +} diff --git a/java/SPREAD/PUREPA~1.CLA b/java/SPREAD/PUREPA~1.CLA new file mode 100644 index 0000000..16e04bc Binary files /dev/null and b/java/SPREAD/PUREPA~1.CLA differ diff --git a/java/SPREAD/PUREPA~1.JAV b/java/SPREAD/PUREPA~1.JAV new file mode 100644 index 0000000..c8c3696 --- /dev/null +++ b/java/SPREAD/PUREPA~1.JAV @@ -0,0 +1,86 @@ +class PurePassThru +{ + int mSanity; + double mIssBal; + double mWAC; + double mCoupon; + short mWAM; + short mOrigTerm; + double mPSA; +public PurePassThru() +{ + mSanity=0; + mIssBal=0.00; + mWAC=0.00; + mCoupon=0.00; + mWAM=0; + mOrigTerm=0; + mPSA=0.00; +} +public PurePassThru(PurePassThru purePassThru) +{ + sanity(purePassThru.sanity()); + issBal(purePassThru.issBal()); + wac(purePassThru.wac()); + coupon(purePassThru.coupon()); + wam(purePassThru.wam()); + origTerm(purePassThru.origTerm()); + psa(purePassThru.psa()); +} +public int sanity() +{ + return mSanity; +} +public void sanity(int sanity) +{ + mSanity=sanity; +} +public double issBal() +{ + return mIssBal; +} +public void issBal(double issBal) +{ + mIssBal=issBal; +} +public double wac() +{ + return mWAC; +} +public void wac(double wac) +{ + mWAC=wac; +} +public double coupon() +{ + return mCoupon; +} +public void coupon(double coupon) +{ + mCoupon=coupon; +} +public short wam() +{ + return mWAM; +} +public void wam(short wam) +{ + mWAM=wam; +} +public short origTerm() +{ + return mOrigTerm; +} +public void origTerm(short origTerm) +{ + mOrigTerm=origTerm; +} +public double psa() +{ + return mPSA; +} +public void psa(double psa) +{ + mPSA=psa; +} +} diff --git a/java/SPREAD/SCRAPS.TXT b/java/SPREAD/SCRAPS.TXT new file mode 100644 index 0000000..13f6611 --- /dev/null +++ b/java/SPREAD/SCRAPS.TXT @@ -0,0 +1,293 @@ +// cell = mCells[mSelectedRow][mSelectedColumn]; +// if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); +// else mInputArea.setText(new String("")); +// if(mCurrent!=null)mCurrent.deselect(); +// mCurrent=cell; +// mCurrent.select(); +// requestFocus(); +// mFullUpdate = true; +// repaint(); + + +// graphics.fillRect(x,y,mWidth-1,mHeight); + + + if(mTransientValue)graphics.drawString("" + mValue,x,y+(mHeight/2)+5); + else + { + if(mValueString.length() > 14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + + + + public synchronized void paint(Graphics graphics) + { + int i; + int j; + int cx; + int cy; + char strLabel[]=new char[1]; + + Dimension clientRect=size(); + graphics.setFont(mTitleFont); + graphics.drawString(mStrTitle,(clientRect.width-graphics.getFontMetrics().stringWidth(mStrTitle))/2,12); + graphics.setColor(mInputColor); + graphics.fillRect(0,mCellDimension.height,clientRect.width,mCellDimension.height); + graphics.setFont(mTitleFont); + for(i=0;i14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + + +//****************************************************************************************************** +// ***************************************** CELLTHREAD *********************************************** +//****************************************************************************************************** +class CellThread extends Thread +{ + private Cell mTarget; + private InputStream mDataStream=null; + private StreamTokenizer mTokenStream; + + public CellThread(Cell cell) + { + super("CellThread"); + mTarget=cell; + } + public void run() + { + try + { + mDataStream = new URL(mTarget.spreadSheet().applet().getDocumentBase(),mTarget.getValueString()).openStream(); + mTokenStream = new StreamTokenizer(mDataStream); + mTokenStream.eolIsSignificant(false); + while(true) + { + switch(mTokenStream.nextToken()) + { + case mTokenStream.TT_EOF: + mDataStream.close(); + return; + default: + break; + case mTokenStream.TT_NUMBER: + mTarget.setTransientValue((float)mTokenStream.nval); + if(!mTarget.spreadSheet().stopped()&&!mTarget.paused())mTarget.spreadSheet().applet().repaint(); + break; + } + try {Thread.sleep(2000);} + catch(InterruptedException exception){break;} + } + } + catch (IOException exception){return;} + } +} + + +// if(mType == Cell.URL) +// { +// mCellThread.stop(); +// mCellThread=null; +// } + + +// mCellThread = new CellThread(this); +// mCellThread.start(); + + +// public CellThread cellThread() +// { +// return mCellThread; +// } + + +//import java.awt.Font; +//import java.awt.Graphics; +//import java.awt.Color; +//import java.util.Date; +//import java.awt.Frame; +//import java.awt.image.*; + +//import java.applet.*; +//import java.util.*; +//import java.net.*; + + + + + public synchronized void paint(Graphics graphics) + { + char strLabel[]=new char[1]; + int i; + int j; + int cx; + int cy; + + graphics.setFont(mTitleFont); + graphics.drawString(mStrTitle,(mControlDimension.width-graphics.getFontMetrics().stringWidth(mStrTitle))/2,12); + graphics.setColor(mInputColor); +// graphics.fillRect(0,mCellDimension.height,mControlDimension.width,mCellDimension.height); +// graphics.setFont(mTitleFont); +// drawGrid(graphics); + for(i=mStartDisplayRow;i14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); +// else graphics.drawString(mValueString,x,y+(mHeight/2)+5); +// +// String printString; +// if(mValueString.length()>14)printString=new String(mValueString.substring(0,14)); +// else printString=mValueString; +// FontMetrics metrics=graphics.getFontMetrics(); +// int stringWidth=metrics.stringWidth(printString); +// if(x+stringWidth + +Paydown Calculator + + +
+Diversified Software Solutions. +
+
+Try the Paydown Calculator JAVA applet. + +
Inquiries, comments are welcome. We also provide customization services to meet your special needs. Please send email to +
+europa@li.net +
+ + + +
+ + diff --git a/java/SPREAD/SPREAD~1.SAF b/java/SPREAD/SPREAD~1.SAF new file mode 100644 index 0000000..12c8498 --- /dev/null +++ b/java/SPREAD/SPREAD~1.SAF @@ -0,0 +1,930 @@ +/* + * @(#)SpreadSheet.java 1.17 95/03/09 Sami Shaio + * + * Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved. + * + * Permission to use, copy, modify, and distribute this software + * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and + * without fee is hereby granted. + * Please refer to the file http://java.sun.com/copy_trademarks.html + * for further important copyright and trademark information and to + * http://java.sun.com/licensing.html for further important licensing + * information for the Java (tm) Technology. + * + * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF + * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * + * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE + * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE + * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT + * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE + * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE + * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE + * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). SUN + * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR + * HIGH RISK ACTIVITIES. + */ +import java.applet.Applet; +import java.awt.*; +import java.io.*; +import java.net.*; + +//****************************************************************************************************** +// ***************************************** SPREADSHEET *********************************************** +//****************************************************************************************************** +public class SpreadSheet extends Applet +{ + private final int mLeftArrow=1006; + private final int mRightArrow=1007; + private final int mUpArrow=1004; + private final int mDownArrow=1005; + private String mStrTitle; + private Font mTitleFont; + private Color mCellColor; + private Color mInputColor; + + private int mCellWidth=100; + private int mCellHeight=15; + + private int mTitleHeight=15; + private int mRowLabelWidth=15; + private boolean mIsStopped=false; + private boolean mFullUpdate=true; + private int mRows; + private int mColumns; + private int mSelectedRow = -1; + private int mSelectedColumn = -1; + private SpreadSheetInput mInputArea; + private Cell mCells[][]; + private Cell mCurrent=null; + + public synchronized void init() + { + String strParam; + + mCellColor=Color.white; + mInputColor=new Color(100, 100, 225); + mTitleFont=new Font("Courier", Font.BOLD, 12); + mStrTitle=getParameter("title"); + if(null==mStrTitle)mStrTitle="SpreadSheet"; + strParam=getParameter("rows"); + if(null==strParam)mRows=9; + else mRows=Integer.parseInt(strParam); + strParam=getParameter("columns"); + if(null==strParam)mColumns=5; + else mColumns=Integer.parseInt(strParam); + mCells=new Cell[mRows][mColumns]; + char l[]=new char[1]; + for(int i=0; i < mRows; i++) + { + for (int j=0; j < mColumns; j++) + { + mCells[i][j]=new Cell(this,Color.lightGray,Color.black,mCellColor,mCellWidth-2,mCellHeight-2); + l[0]=(char)((int)'a'+j); + strParam=getParameter(""+new String(l)+(i+1)); + if(null!=strParam)mCells[i][j].setUnparsedValue(strParam); + } + } + Dimension workArea=size(); + mInputArea=new SpreadSheetInput(null, this,workArea.width-2,mCellHeight-1,mInputColor,Color.white); + resize(mColumns*mCellWidth+mRowLabelWidth,((mRows+1)*mCellHeight)+mCellHeight+mTitleHeight); + } + public void setCurrentValue(float val) + { + if(-1==mSelectedRow||-1==mSelectedColumn)return; + mCells[mSelectedRow][mSelectedColumn].setValue(val); + repaint(); + } + public void stop() + { + stopped(true); + } + public void start() + { + stopped(false); + } + public void stopped(boolean stopped) + { + mIsStopped=stopped; + } + public boolean stopped() + { + return mIsStopped; + } + public void destroy() + { + for(int i=0;imRows||mSelectedColumn>=mColumns) + { + mSelectedRow = -1; + deselect(true); + } + else + { + if(mSelectedRow>=mRows) + { + mSelectedRow = -1; + deselect(true); + return true; + } + select(); + } + return true; + } + public boolean keyDown(Event evt, int key) + { + mFullUpdate=true; + if(mLeftArrow==key||mRightArrow==key||mUpArrow==key||mDownArrow==key)navigate(key); + else mInputArea.keyDown(key); + return true; + } + private void navigate(int key) + { + switch(key) + { + case mLeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + select(); + break; + case mRightArrow : + if(mSelectedColumn>=mColumns)break; + mSelectedColumn++; + select(); + break; + case mUpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + select(); + break; + case mDownArrow : + if(mSelectedRow>=mRows)break; + mSelectedRow++; + select(); + break; + } + } + private void select() + { + Cell cell; + cell=mCells[mSelectedRow][mSelectedColumn]; + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + requestFocus(); + mFullUpdate=true; + repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } +} + +// ****** + +class ScrollManager +{ + private int mFirstVisibleCell; + + public ScrollManager() + { + mFirstVisibleCell=0; + } + public int firstVisibleCell() + { + return mFirstVisibleCell; + } + public void firstVisibleCell(int firstVisibleCell) + { + mFirstVisibleCell=firstVisibleCell; + } +} + +//****************************************************************************************************** +// ***************************************** CELLTHREAD *********************************************** +//****************************************************************************************************** +class CellThread extends Thread +{ + private Cell mTarget; + private InputStream mDataStream=null; + private StreamTokenizer mTokenStream; + + public CellThread(Cell cell) + { + super("CellThread"); + mTarget=cell; + } + public void run() + { + try + { + mDataStream = new URL(mTarget.spreadSheet().getDocumentBase(),mTarget.getValueString()).openStream(); + mTokenStream = new StreamTokenizer(mDataStream); + mTokenStream.eolIsSignificant(false); + while(true) + { + switch(mTokenStream.nextToken()) + { + case mTokenStream.TT_EOF: + mDataStream.close(); + return; + default: + break; + case mTokenStream.TT_NUMBER: + mTarget.setTransientValue((float)mTokenStream.nval); + if(!mTarget.spreadSheet().stopped()&&!mTarget.paused())mTarget.spreadSheet().repaint(); + break; + } + try {Thread.sleep(2000);} + catch(InterruptedException exception){break;} + } + } + catch (IOException exception){return;} + } +} +//****************************************************************************************************** +// ******************************************** CELL *************************************************** +//****************************************************************************************************** +class Cell +{ + public static final int VALUE = 0; + public static final int LABEL = 1; + public static final int URL = 2; + public static final int FORMULA = 3; + + private Node mParseRoot; + private boolean mNeedRedisplay; + private boolean mSelected = false; + private boolean mTransientValue = false; + private int mType=Cell.VALUE; + private String mValueString = ""; + private String mPrintString = "v"; + private float mValue; + private Color mBgColor; + private Color mFgColor; + private Color mHighlightColor; + private int mWidth; + private int mHeight; + private SpreadSheet mSpreadSheet; + private CellThread mCellThread; + private boolean mPaused=false; + + public Cell(SpreadSheet spreadSheet,Color bgColor,Color fgColor,Color highlightColor,int width,int height) + { + mSpreadSheet=spreadSheet; + mBgColor=bgColor; + mFgColor=fgColor; + mHighlightColor=highlightColor; + mWidth=width; + mHeight=height; + mNeedRedisplay=true; + } + public void setRawValue(float value) + { + mValueString=Float.toString(value); + mValue=value; + } + public void setValue(float value) + { + setRawValue(value); + mPrintString="v"+mValueString; + mType=Cell.VALUE; + mPaused=false; + mSpreadSheet.recalculate(); + mNeedRedisplay=true; + } + public void setTransientValue(float value) + { + mTransientValue=true; + mValue=value; + mNeedRedisplay=true; + mSpreadSheet.recalculate(); + } + public void setUnparsedValue(String s) + { + switch (s.charAt(0)) + { + case 'v': + setValue(Cell.VALUE, s.substring(1)); + break; + case 'f': + setValue(Cell.FORMULA, s.substring(1)); + break; + case 'l': + setValue(Cell.LABEL, s.substring(1)); + break; + case 'u': + setValue(Cell.URL, s.substring(1)); + break; + } + } + public String parseFormula(String formula, Node node) + { + String subformula; + String restFormula; + float value; + int length = formula.length(); + Node left; + Node right; + char op; + + if(null==formula)return null; + subformula=parseValue(formula, node); + if(null==subformula||0==subformula.length())return null; + if(subformula==formula)return formula; + switch(op=subformula.charAt(0)) + { + case 0: + return null; + case ')': + return subformula; + case '+': + case '*': + case '-': + case '/': + restFormula = subformula.substring(1); + subformula = parseValue(restFormula, right=new Node()); + if(subformula != restFormula) + { + left = new Node(node); + node.left(left); + node.right(right); + node.op(op); + node.type(Node.OP); + return subformula; + } + else return formula; + default: + return formula; + } + } + public String parseValue(String formula, Node node) + { + char c=formula.charAt(0); + String subformula; + String restFormula; + float value; + int row; + int column; + + restFormula = formula; + if (c == '(') + { + restFormula = formula.substring(1); + subformula = parseFormula(restFormula, node); + if(subformula == null || subformula.length() == restFormula.length())return formula; + else if (! (subformula.charAt(0) == ')'))return formula; + restFormula = subformula; + } + else if (c >= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(int type, String s) + { + mPaused=false; + if(mType == Cell.URL) + { + mCellThread.stop(); + mCellThread=null; + } + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + mCellThread = new CellThread(this); + mCellThread.start(); + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected = true; + mPaused=true; + } + public void deselect() + { + mSelected = false; + mPaused=false; + mNeedRedisplay = true; + mSpreadSheet.repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-2,mHeight-2); + if(null!=mValueString) + { + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + if(!mTransientValue) + { + if(mValueString.length()>14)graphics.drawString(mValueString.substring(0,14),x,y+(mHeight/2)+5); + else graphics.drawString(mValueString,x,y+(mHeight/2)+5); + } + else graphics.drawString(""+mValue,x,y+(mHeight/2)+5); + mNeedRedisplay=false; + } + } + public int type() + { + return mType; + } + public Node parseRoot() + { + return mParseRoot; + } + public void needRedisplay(boolean needRedisplay) + { + mNeedRedisplay=needRedisplay; + } + public boolean needRedisplay() + { + return mNeedRedisplay; + } + public float value() + { + return mValue; + } + public CellThread cellThread() + { + return mCellThread; + } + public SpreadSheet spreadSheet() + { + return mSpreadSheet; + } + public boolean paused() + { + return mPaused; + } +} +//****************************************************************************************************** +// *************************************** NODE ******************************************************* +//****************************************************************************************************** +class Node +{ + public static final int OP = 0; + public static final int VALUE = 1; + public static final int CELL = 2; + private int mType; + private Node mLeft; + private Node mRight; + private int mRow; + private int mColumn; + private float mValue; + private char mOp; + + public Node() + { + mLeft=null; + mRight=null; + mValue=0; + mRow=-1; + mColumn=-1; + mOp=0; + mType=Node.VALUE; + } + public Node(Node node) + { + mLeft=node.mLeft; + mRight=node.mRight; + mValue=node.mValue; + mRow=node.mRow; + mColumn=node.mColumn; + mOp=node.mOp; + mType=node.mType; + } + public void print(int indentLevel) + { + char l[] = new char[1]; + switch(mType) + { + case Node.VALUE: + break; + case Node.CELL: + l[0] = (char)((int)'A' + column()); + break; + case Node.OP: + mLeft.print(indentLevel + 3); + mRight.print(indentLevel + 3); + break; + } + } + public int type() + { + return mType; + } + public void type(int type) + { + mType=type; + } + public float value() + { + return mValue; + } + public void value(float value) + { + mValue=value; + } + public Node left() + { + return mLeft; + } + public void left(Node left) + { + mLeft=left; + } + public Node right() + { + return mRight; + } + public void right(Node right) + { + mRight=right; + } + public char op() + { + return mOp; + } + public void op(char op) + { + mOp=op; + } + public int row() + { + return mRow; + } + public void row(int row) + { + mRow=row; + } + public int column() + { + return mColumn; + } + public void column(int column) + { + mColumn=column; + } +} + +class InputField +{ + private int mMaxchars = 50; + private Applet mApplet; + private String mStringValue; + private char mBuffer[]; + private int mChars; + private int mWidth; + private int mHeight; + private Color mBgColor; + private Color mFgColor; + + public InputField(String initValue,Applet applet, int width, int height,Color bgColor, Color fgColor) + { + mWidth=width; + mHeight=height; + mBgColor=bgColor; + mFgColor=fgColor; + mApplet=applet; + mBuffer = new char[mMaxchars]; + mChars = 0; + if(initValue != null) + { + initValue.getChars(0, initValue.length(),mBuffer, 0); + mChars = initValue.length(); + } + mStringValue=initValue; + } + public void setText(String val) + { + int i; + for(i=0; i < mMaxchars; i++)mBuffer[i] = 0; + mStringValue=new String(val); + if (val == null) + { + mStringValue= ""; + mChars = 0; + mBuffer[0] = 0; + } + else + { + mStringValue.getChars(0,mStringValue.length(), mBuffer, 0); + mChars = val.length(); + mStringValue = new String(mBuffer); + } + } + public String getValue() + { + return mStringValue; + } + public void paint(Graphics g, int x, int y) + { + g.setColor(mBgColor); + g.fillRect(x, y,mWidth,mHeight); + if (mStringValue!= null) + { + g.setColor(mFgColor); + g.drawString(mStringValue, x, y + (mHeight / 2) + 3); + } + } + public void mouseUp(int x, int y) + { + } + public void keyDown(int key) + { + if(mCharsmControlDimension.height)continue; + graphics.setColor(mApplet.getBackground()); + graphics.draw3DRect(0,cy,mControlDimension.width,2,true); + if(cy+mCellDimension.height>mControlDimension.height)continue; + if(imControlDimension.width)continue; + graphics.setColor(mApplet.getBackground()); + graphics.draw3DRect(cx+mRowLabelWidth,2*mCellDimension.height,1,mControlDimension.height-(2*mCellDimension.height),true); + } + } + public void drawCells(Graphics graphics,boolean updateAll) + { + int i; + int j; + int cx; + int cy; + boolean inDraw=true; + + for(i=mStartDisplayRow;imControlDimension.height)inDraw=false; + if(mCells[i][j]!=null)mCells[i][j].paint(graphics,cx,cy); + } + } + } + } + public void recalculate() + { + for(int row=0;row=mRows||mSelectedColumn>=mColumns) + { + mSelectedRow=-1; + deselect(true); + return true; + } + if(((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight>mControlDimension.height) + { + mSelectedRow=-1; + deselect(true); + return true; + } + if(((mSelectedColumn-mStartDisplayColumn)*mCellDimension.width)+2+mRowLabelWidth+mCellDimension.width>mControlDimension.width) + { + mSelectedColumn=-1; + deselect(true); + return true; + } + select(); + return true; + } + public boolean keyDown(Event evt, int key) + { + if(Key.LeftArrow==key||Key.RightArrow==key||Key.UpArrow==key||Key.DownArrow==key) + { + if(!gridLock()){mInputArea.keyDown(Key.Return);mFullUpdate=true;} + navigate(key); + } + else if(!gridLock()){mInputArea.keyDown(key);mFullUpdate=true;} + return true; + } + private void navigate(int key) + { + switch(key) + { + case Key.LeftArrow : + if(mSelectedColumn<=0)break; + mSelectedColumn--; + ensureVisible(); + select(); + break; + case Key.RightArrow : + if(mSelectedColumn+1>=mColumns)break; + mSelectedColumn++; + ensureVisible(); + select(); + break; + case Key.UpArrow : + if(mSelectedRow<=0)break; + mSelectedRow--; + ensureVisible(); + select(); + break; + case Key.DownArrow : + if(mSelectedRow+1>=mRows)break; + mSelectedRow++; + ensureVisible(); + select(); + break; + } + } + private void select() + { + Cell cell=mCells[mSelectedRow][mSelectedColumn]; + + if(null!=cell.getPrintString())mInputArea.setText(new String(cell.getPrintString())); + else mInputArea.setText(new String("")); + if(mCurrent!=null)mCurrent.deselect(); + mCurrent=cell; + mCurrent.select(); + mApplet.requestFocus(); + mFullUpdate=true; + mApplet.repaint(); + } + private void deselect(boolean destroy) + { + if(null==mCurrent)return; + mCurrent.deselect(); + if(destroy)mCurrent=null; + } + private void ensureVisible() + { + int yMin=(2*mCellDimension.height)+2+mTitleHeight; + int xMin=2+mRowLabelWidth+mCellDimension.width; + Point currPoint=new Point(0,0); + + currPoint.y=((mSelectedRow-mStartDisplayRow+2)*mCellDimension.height)+2+mTitleHeight; + currPoint.x=((mSelectedColumn-mStartDisplayColumn)*mCellDimension.width)+2+mRowLabelWidth+mCellDimension.width; + if(currPoint.y>mControlDimension.height)mStartDisplayRow++; + else if(currPoint.ymControlDimension.width)mStartDisplayColumn++; + else if(currPoint.x=mRows||col>=mColumns)return false; + strCellData="l"; + strCellData+=strData; + mCells[row][col].setUnparsedValue(strCellData); + if(repaint)mApplet.repaint(); + return true; + } + public void setDocumentTitle(String strDocumentTitle) + { + mStrTitle=strDocumentTitle; + } + public void gridLock(boolean gridLock) + { + mGridLock=gridLock; + } + public boolean gridLock() + { + return mGridLock; + } +} + +//****************************************************************************************************** +// ******************************************** CELL *************************************************** +//****************************************************************************************************** +class Cell +{ + public static final int VALUE = 0; + public static final int LABEL = 1; + public static final int URL = 2; + public static final int FORMULA = 3; + + private final int mMaxDisplayLength=14; + private Node mParseRoot; + private boolean mNeedRedisplay; + private boolean mSelected = false; + private boolean mTransientValue = false; + private int mType=Cell.VALUE; + private String mValueString = ""; + private String mPrintString = "v"; + private float mValue; + private Color mBgColor; + private Color mFgColor; + private Color mHighlightColor; + private int mWidth; + private int mHeight; + private SpreadSheet mSpreadSheet; + private boolean mPaused=false; + + public Cell(SpreadSheet spreadSheet,Color bgColor,Color fgColor,Color highlightColor,int width,int height) + { + mSpreadSheet=spreadSheet; + mBgColor=bgColor; + mFgColor=fgColor; + mHighlightColor=highlightColor; + mWidth=width; + mHeight=height; + mNeedRedisplay=true; + } + public void setRawValue(float value) + { + mValueString=Float.toString(value); + mValue=value; + } + public void setTransientValue(float value) + { + mTransientValue=true; + mValue=value; + mNeedRedisplay=true; + mSpreadSheet.recalculate(); + } + public void setUnparsedValue(String s) + { + switch (s.charAt(0)) + { + case 'v': + setValue(Cell.VALUE,s.substring(1)); + break; + case 'f': + setValue(Cell.FORMULA,s.substring(1)); + break; + case 'l': + setValue(Cell.LABEL,s.substring(1)); + break; + case 'u': + setValue(Cell.URL, s.substring(1)); + break; + } + } + public String parseFormula(String formula, Node node) + { + String subformula; + String restFormula; + float value; + int length = formula.length(); + Node left; + Node right; + char op; + + if(null==formula)return null; + subformula=parseValue(formula, node); + if(null==subformula||0==subformula.length())return null; + if(subformula==formula)return formula; + switch(op=subformula.charAt(0)) + { + case 0: + return null; + case ')': + return subformula; + case '+': + case '*': + case '-': + case '/': + restFormula = subformula.substring(1); + subformula = parseValue(restFormula, right=new Node()); + if(subformula != restFormula) + { + left = new Node(node); + node.left(left); + node.right(right); + node.op(op); + node.type(Node.OP); + return subformula; + } + else return formula; + default: + return formula; + } + } + public String parseValue(String formula, Node node) + { + char c=formula.charAt(0); + String subformula; + String restFormula; + float value; + int row; + int column; + + restFormula = formula; + if (c == '(') + { + restFormula = formula.substring(1); + subformula = parseFormula(restFormula, node); + if(subformula == null || subformula.length() == restFormula.length())return formula; + else if (! (subformula.charAt(0) == ')'))return formula; + restFormula = subformula; + } + else if (c >= '0' && c <= '9') + { + int i; + + try{value = Float.valueOf(formula).floatValue();} + catch (NumberFormatException exception){return formula;} + for (i=0; i < formula.length(); i++) + { + c = formula.charAt(i); + if ((c < '0' || c > '9') && c != '.')break; + } + node.type(Node.VALUE); + node.value(value); + restFormula = formula.substring(i); + return restFormula; + } + else if (c >= 'A' && c <= 'Z') + { + int i; + + column = c - 'A'; + restFormula = formula.substring(1); + row = Float.valueOf(restFormula).intValue(); + for(i=0; i < restFormula.length(); i++) + { + c = restFormula.charAt(i); + if (c < '0' || c > '9')break; + } + node.row(row-1); + node.column(column); + node.type(Node.CELL); + if (i == restFormula.length())restFormula=null; + else + { + restFormula = restFormula.substring(i); + if (restFormula.charAt(0) == 0)return null; + } + } + return restFormula; + } + public void setValue(float value) + { + setRawValue(value); + mPrintString="v"+mValueString; + mType=Cell.VALUE; + mPaused=false; + mSpreadSheet.recalculate(); + mNeedRedisplay=true; + } + public void setValue(int type, String s) + { + mPaused=false; + mValueString=new String(s); + mType=type; + mNeedRedisplay=true; + switch(mType) + { + case Cell.VALUE: + setValue(Float.valueOf(s).floatValue()); + break; + case Cell.LABEL: + mPrintString = "l" + mValueString; + break; + case Cell.URL: + mPrintString = "u" + mValueString; + break; + case Cell.FORMULA: + parseFormula(mValueString,mParseRoot=new Node()); + mPrintString = "f" + mValueString; + break; + } + mSpreadSheet.recalculate(); + } + public String getValueString() + { + return mValueString; + } + public String getPrintString() + { + return mPrintString; + } + public void select() + { + mSelected=true; + mPaused=true; + } + public void deselect() + { + mSelected=false; + mPaused=false; + mNeedRedisplay=true; + mSpreadSheet.applet().repaint(); + } + public void paint(Graphics graphics,int x,int y) + { + if(mSelected)graphics.setColor(mHighlightColor); + else graphics.setColor(mBgColor); + graphics.fillRect(x+1,y+1,mWidth-1,mHeight-1); + if(null==mValueString)return; + switch(mType) + { + case Cell.VALUE: + case Cell.LABEL: + graphics.setColor(mFgColor); + break; + case Cell.FORMULA: + graphics.setColor(Color.red); + break; + case Cell.URL: + graphics.setColor(Color.blue); + break; + } + String printString; + if(!mTransientValue) + { + if(mValueString.length()>mMaxDisplayLength)printString=new String(mValueString.substring(0,mMaxDisplayLength)); + else printString=new String(mValueString); + } + else printString=new String(""+mValue); + FontMetrics metrics=graphics.getFontMetrics(); + int stringWidth=metrics.stringWidth(printString); + + if(x+stringWidth=mMaxChars?mMaxChars-1:valLength,mBuffer,0); + for(index=0;mBuffer[index]!=0&&indexedi) + jmp dword ptr[edx*4+JumpTable] ; finish off the remaining bytes +Trail0: ; zero trailing bytes sync address + jmp @@endCopy ; we're all done +Trail1: ; 1 trailing byte sync address + mov al,byte ptr[esi] ; move source byte into al register + mov byte ptr [edi],al ; ... and copy it over to destination + inc esi ; increment source index + inc edi ; increment destination + jmp @@endCopy ; we're all done +Trail2: ; 2 trailing bytes sync address + mov ax,word ptr[esi] ; move a word value from source + mov word ptr[edi],ax ; move word value into destination + add esi,2 ; increment source index + add edi,2 ; increment destination index + jmp @@endCopy ; we're all done here +Trail3: ; 3 trailing bytes sync address + mov ax,word ptr[esi] ; move a word value from source + mov word ptr[edi],ax ; copy word value to destination + mov al,byte ptr[edi+2] ; move next byte to al + mov byte ptr[edi+2],al ; copy to destination + add esi,3 ; increment source index register + add edi,3 ; increment destination index register +@@endCopy: ; we're all done here +ENDM +_setAt proc near ; int setAt(ImageInfo *pImageInfo,DWORD row,DWORD col) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push ebx ; save ebx register + mov ebx,[ebp+08h] ; move (ImageInfo*) to ebx register + cld ; clear the direction flag + mov eax,[ebx].ImageInfo@@mSrcWidth ; move source image width into eax register + multiply eax,SIZE_RGB888 ; multiply width by sizeof(RGB888) + mov [ebx].ImageInfo@@mSrcWidthFactor,eax ; replace factor into structure + mov eax,[ebx].ImageInfo@@mDstWidth ; move destination image width into eax register + multiply eax,SIZE_RGB888 ; multiply width by sizeof(RGB888) + mov [ebx].ImageInfo@@mDstWidthFactor,eax ; replace factor into structure + mov esi,[ebx].ImageInfo@@mSrcRGB888 ; move source RGB888* to source index + multiply [ebx].ImageInfo@@mDstRow,[ebx].ImageInfo@@mDstWidth ; multiply source width by source row->eax + add eax,[ebx].ImageInfo@@mDstCol ; add in the destination column + multiply eax,SIZE_RGB888 ; multiply result by sizeof(RGB888) + mov edi,[ebx].ImageInfo@@mDstRGB888 ; move RGB888* to esi + add edi,eax ; add in the offset, result to esi +@@rowLoop: ; row loop sync address + copy ; copy the column + mov eax,[ebx].ImageInfo@@mDstWidthFactor ; move destination width factor to eax + sub eax,[ebx].ImageInfo@@mSrcWidthFactor ; get difference between source and destination + add edi,eax ; add to destination so it sits at next row + inc [ebx].ImageInfo@@mSrcRow ; increment source row + mov eax,[ebx].ImageInfo@@mSrcRow ; replace row counter + cmp eax,[ebx].ImageInfo@@mSrcHeight ; cmp row to image height + jl @@rowLoop ; if less then keep going +@@imageDone: ; done processing sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_setAt endp +_copyBGRRGB proc near ; void copyBGRRGB(RGB *pRGB,BGR *pBGR,int count,int output_components) + push ebp ; save frame + mov ebp,esp ; create new frame + push ebx ; save ebx register + push ecx ; save ecx register + push esi ; save source index register + push edi ; save destination index register + mov ebx,[ebp+14h] ; move output_components to ebx register + mov ecx,[ebp+10h] ; move item count to ecx, one item is a single XXX component + mov edi,[ebp+08h] ; move pRGB to edi register + mov esi,[ebp+0Ch] ; move pBGR to esi register + add esi,ebx ; add (output_components) to esi + dec esi ; subtract one to get index +@@copyLoop: ; copyLoop sync address + mov ax,word ptr[esi-1] ; get a word value from source into ax register + rol ax,08h ; swap the bytes in this word + mov word ptr[edi],ax ; write the word value out to destination + mov al,byte ptr[esi-2] ; move source blue component into al + mov byte ptr[edi+2],al ; move blue component into destination blue + add esi,ebx ; add output_components to esi + add edi,SIZE_RGB888 ; increment destination index to next component + loopnz @@copyLoop ; continue through count items + pop edi ; restore destination index register + pop esi ; restore source index register + pop ecx ; restore ecx register + pop ebx ; restore ebx register + pop ebp ; restore previous frame + retn ; return near to caller +_copyBGRRGB endp +public _resampleClipRow +public _resampleClipCol +public _copyBGRRGB +public _setAt +END diff --git a/jpgimg/Asmutil.hpp b/jpgimg/Asmutil.hpp new file mode 100644 index 0000000..1543181 --- /dev/null +++ b/jpgimg/Asmutil.hpp @@ -0,0 +1,14 @@ +#ifndef _JPGIMG_ASMUTIL_HPP_ +#define _JPGIMG_ASMUTIL_HPP_ + +class RGB888; +class ImageInfo; + +extern "C" +{ + __cdecl resampleClipRow(RGB888 *lpIn,RGB888 *lpOut,DWORD inLen,DWORD outLen); + __cdecl resampleClipCol(RGB888 *lpIn,RGB888 *lpOut,DWORD inLen,DWORD inWidth,DWORD outLen,DWORD outWidth); + __cdecl setAt(ImageInfo *pImageInfo); + __cdecl copyBGRRGB(void *pRGB,void *pBGR,int items,int output_components); +} +#endif diff --git a/jpgimg/Dib24.cpp b/jpgimg/Dib24.cpp new file mode 100644 index 0000000..48ebc46 --- /dev/null +++ b/jpgimg/Dib24.cpp @@ -0,0 +1,215 @@ +#include +#include +#include +#include + +DIB24 &DIB24::operator=(const DIB24 &image) +{ + PureDevice pureDevice; + RGB888 rgb888; + + pureDevice.screenDevice(); + create(image.width(),image.height(),pureDevice); + for(int row=0;row>3)*(LONG)desiredHeight; + if(imageExtent==(LONG)desiredWidth*(LONG)desiredHeight)return; + else desiredWidth=(WORD)(imageExtent/(LONG)desiredHeight); + someBitmapInfo.width(desiredWidth); +} + +bool DIB24::setAt(DWORD row,DWORD col,JPGImage &jpgImage) +{ + DWORD srcWidth; + DWORD srcHeight; + DWORD dstWidth; + DWORD dstHeight; + RGB888 *ptrSrcCol; + RGB888 *ptrDstCol; + + if(!isOkay())return false; + srcWidth=jpgImage.width(); + srcHeight=jpgImage.height(); + dstWidth=mBitmapInfo.width(); + dstHeight=mBitmapInfo.height()<0?-mBitmapInfo.height():mBitmapInfo.height(); + for(int srcRow=0,dstRow=row;srcRowheight())firstPoint.y(height()); + if(firstPoint.x()>width())firstPoint.x(width()); + if(secondPoint.y()>height())secondPoint.y(height()); + if(secondPoint.x()>width())secondPoint.x(width()); + xRunning=(LONG)firstPoint.x()<<0x10; + yRunning=(LONG)firstPoint.y()<<0x10; + if(secondPoint.x()>0x10,xRunning>>0x10,rgb888); + xRunning-=xDelta; + yRunning-=yDelta; + } + } + else if(-1==xDir&&1==yDir) + { + for(short stepIndex=0;stepIndex>0x10,xRunning>>0x10,rgb888); + xRunning-=xDelta; + yRunning+=yDelta; + } + } + else if(1==xDir&&-1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,rgb888); + xRunning+=xDelta; + yRunning-=yDelta; + } + } + else if(1==xDir&&1==yDir) + { + for(short itemIndex=0;itemIndex>0x10,xRunning>>0x10,rgb888); + xRunning+=xDelta; + yRunning+=yDelta; + } + } + return true; +} + +bool DIB24::copyBits(ResBitmap &resBitmap) +{ + if(BitmapInfo::Bit8!=resBitmap.bitCount())return false; // add code to handle other bitCounts + BYTE *pData=resBitmap.ptrData(); + int srcWidth=resBitmap.width(); + int srcHeight=resBitmap.height(); + int dstWidth=width(); + int dstHeight=height(); + + for(int col=0;col=srcHeight)continue; + if(col>=srcWidth)continue; + RGBColor color=resBitmap.paletteEntry(pData[row*dstWidth+col]); + RGB888 dibColor(color.red(),color.green(),color.blue()); + setAt(row,col,dibColor); + } + } + return true; +} + + + + + + + diff --git a/jpgimg/Dib24.hpp b/jpgimg/Dib24.hpp new file mode 100644 index 0000000..1ac933b --- /dev/null +++ b/jpgimg/Dib24.hpp @@ -0,0 +1,144 @@ +#ifndef _JPGIMG_DIB24_HPP_ +#define _JPGIMG_DIB24_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _JPGIMG_JPGIMAGE_HPP_ +#include +#endif +#ifndef _JPGIMG_RGB888_HPP_ +#include +#endif + +class ResBitmap; + +class DIB24 +{ +public: + DIB24(void); + DIB24(const DIB24 &image); + virtual ~DIB24(); + DIB24 &operator=(const DIB24 &image); + bool create(int width,int height,PureDevice &pureDevice); + bool bitBlt(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + bool draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + bool setBits(BYTE value); + bool copyBits(ResBitmap &resBitmap); + bool getAt(DWORD row,DWORD col,RGB888 &someRGB888)const; + bool setAt(DWORD row,DWORD col,const RGB888 &someRGB888); + bool setAt(DWORD row,DWORD col,JPGImage &jpgImage); + bool setAtAsm(DWORD row,DWORD col,JPGImage &jpgImage); + bool line(Point firstPoint,Point secondPoint,const RGB888 &rgb888); + RGB888 *rgbArray(void); + DWORD extent(void)const; + DWORD width(void)const; + DWORD height(void)const; + HBITMAP getBitmap(void); + bool isOkay(void)const; +private: + void verifyDimensions(BitmapInfo &someBitmapInfo); + void destroy(void); + + HBITMAP mhBitmap; + RGB888 *mpRGBArray; + BitmapInfo mBitmapInfo; + DWORD mExtent; +}; + +inline +DIB24::DIB24(void) +: mhBitmap(0), mpRGBArray(0), mExtent(0) +{ +} + +inline +DIB24::DIB24(const DIB24 &someDIB24) +{ + *this=someDIB24; +} + +inline +DIB24::~DIB24() +{ + destroy(); +} + +inline +RGB888 *DIB24::rgbArray(void) +{ + return mpRGBArray; +} + +inline +DWORD DIB24::extent(void)const +{ + return mExtent; +} + +inline +DWORD DIB24::width(void)const +{ + if(!isOkay())return 0; + return mBitmapInfo.width(); +} + +inline +DWORD DIB24::height(void)const +{ + if(!isOkay())return 0; + return mBitmapInfo.height()<0?-mBitmapInfo.height():mBitmapInfo.height(); +} + +inline +void DIB24::destroy(void) +{ + if(!mhBitmap)return; + ::DeleteObject(mhBitmap); + mhBitmap=0; + mExtent=0; +} + +inline +HBITMAP DIB24::getBitmap(void) +{ + return mhBitmap; +} + +inline +bool DIB24::setBits(BYTE value) +{ + if(!isOkay())return FALSE; + ::memset(mpRGBArray,value,extent()*sizeof(RGB888)); + return true; +} + +inline +bool DIB24::getAt(DWORD row,DWORD col,RGB888 &someRGB888)const +{ + if(!isOkay())return false; + if(mBitmapInfo.height()>0)someRGB888=mpRGBArray[row*width()+col]; + else someRGB888=mpRGBArray[(mBitmapInfo.width()*(-mBitmapInfo.height()))-(((row*mBitmapInfo.width())+mBitmapInfo.width()))+col]; + return true; +} + +inline +bool DIB24::setAt(DWORD row,DWORD col,const RGB888 &someRGB888) +{ + if(!isOkay())return false; + if(mBitmapInfo.height()>0)mpRGBArray[row*width()+col]=someRGB888; + else mpRGBArray[(mBitmapInfo.width()*(-mBitmapInfo.height()))-(((row*mBitmapInfo.width())+mBitmapInfo.width()))+col]=someRGB888; + return true; +} + +inline +bool DIB24::isOkay(void)const +{ + return mhBitmap?true:false; +} +#endif diff --git a/jpgimg/Imginfo.hpp b/jpgimg/Imginfo.hpp new file mode 100644 index 0000000..0893105 --- /dev/null +++ b/jpgimg/Imginfo.hpp @@ -0,0 +1,271 @@ +#ifndef _JPGIMG_IMAGEINFO_HPP_ +#define _JPGIMG_IMAGEINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _JPGIMG_RGB888_HPP_ +#include +#endif + +class ImageInfo +{ +public: + ImageInfo(void); + ImageInfo(const ImageInfo &someImageInfo); + virtual ~ImageInfo(); + ImageInfo &operator=(const ImageInfo &someImageInfo); + bool operator==(const ImageInfo &someImageInfo)const; + void setSrcParams(DWORD width,DWORD height,RGB888 *srcRGB888); + void setDstParams(DWORD width,DWORD height,RGB888 *dstRGB888); + DWORD srcWidth(void)const; + void srcWidth(DWORD srcWidth); + DWORD srcHeight(void)const; + void srcHeight(DWORD srcHeight); + RGB888 *srcRGB888(void); + void srcRGB888(RGB888 *srcRGB888); + DWORD dstWidth(void)const; + void dstWidth(DWORD dstWidth); + DWORD dstHeight(void)const; + void dstHeight(DWORD dstHeight); + RGB888 *dstRGB888(void); + void dstRGB888(RGB888 *dstRGB888); + DWORD srcRow(void)const; + void srcRow(DWORD srcRow); + DWORD srcCol(void)const; + void srcCol(DWORD srcCol); + DWORD dstRow(void)const; + void dstRow(DWORD dstRow); + DWORD dstCol(void)const; + void dstCol(DWORD dstCol); + DWORD srcWidthFactor(void)const; + void srcWidthFactor(DWORD srcWidthFactor); + DWORD dstWidthFactor(void)const; + void dstWidthFactor(DWORD dstWidthFactor); +private: + DWORD mSrcWidth; + DWORD mSrcHeight; + RGB888 *mpSrcRGB888; + DWORD mDstWidth; + DWORD mDstHeight; + RGB888 *mpDstRGB888; + DWORD mSrcRow; + DWORD mSrcCol; + DWORD mDstRow; + DWORD mDstCol; + DWORD mSrcWidthFactor; + DWORD mDstWidthFactor; +}; + +inline +ImageInfo::ImageInfo(void) +: mSrcWidth(0), mSrcHeight(0), mpSrcRGB888(0), mDstWidth(0), mDstHeight(0), mpDstRGB888(0), + mSrcRow(0), mSrcCol(0), mDstRow(0), mDstCol(0), mSrcWidthFactor(0), mDstWidthFactor(0) +{ +} + +inline +ImageInfo::ImageInfo(const ImageInfo &someImageInfo) +{ + *this==someImageInfo; +} + +inline +ImageInfo::~ImageInfo() +{ +} + +inline +ImageInfo &ImageInfo::operator=(const ImageInfo &someImageInfo) +{ + srcWidth(someImageInfo.srcWidth()); + srcHeight(someImageInfo.srcHeight()); + srcRGB888(((ImageInfo&)someImageInfo).srcRGB888()); + dstWidth(someImageInfo.dstWidth()); + dstHeight(someImageInfo.dstHeight()); + dstRGB888(((ImageInfo&)someImageInfo).dstRGB888()); + srcRow(someImageInfo.srcRow()); + srcCol(someImageInfo.srcCol()); + dstRow(someImageInfo.dstRow()); + dstCol(someImageInfo.dstCol()); + srcWidthFactor(someImageInfo.srcWidthFactor()); + dstWidthFactor(someImageInfo.dstWidthFactor()); + return *this; +} + +inline +bool ImageInfo::operator==(const ImageInfo &someImageInfo)const +{ + return (srcWidth()==someImageInfo.srcWidth()&& + srcHeight()==someImageInfo.srcHeight()&& + ((ImageInfo&)*this).srcRGB888()==((ImageInfo&)someImageInfo).srcRGB888()&& + dstWidth()==someImageInfo.dstWidth()&& + dstHeight()==someImageInfo.dstHeight()&& + ((ImageInfo&)*this).dstRGB888()==((ImageInfo&)someImageInfo).dstRGB888()&& + srcRow()==someImageInfo.srcRow()&& + srcCol()==someImageInfo.srcCol()&& + dstRow()==someImageInfo.dstRow()&& + dstCol()==someImageInfo.dstCol()&& + srcWidthFactor()==someImageInfo.srcWidthFactor()&& + dstWidthFactor()==someImageInfo.dstWidthFactor()); +} + +inline +void ImageInfo::setSrcParams(DWORD width,DWORD height,RGB888 *srcRGB888) +{ + mSrcWidth=width; + mSrcHeight=height; + mpSrcRGB888=srcRGB888; +} + +inline +void ImageInfo::setDstParams(DWORD width,DWORD height,RGB888 *dstRGB888) +{ + mDstWidth=width; + mDstHeight=height; + mpDstRGB888=dstRGB888; +} + +inline +DWORD ImageInfo::srcWidth(void)const +{ + return mSrcWidth; +} + +inline +void ImageInfo::srcWidth(DWORD srcWidth) +{ + mSrcWidth=srcWidth; +} + +inline +DWORD ImageInfo::srcHeight(void)const +{ + return mSrcHeight; +} + +inline +void ImageInfo::srcHeight(DWORD srcHeight) +{ + mSrcHeight=srcHeight; +} + +inline +RGB888 *ImageInfo::srcRGB888(void) +{ + return mpSrcRGB888; +} + +inline +void ImageInfo::srcRGB888(RGB888 *srcRGB888) +{ + mpSrcRGB888=srcRGB888; +} + +inline +DWORD ImageInfo::dstWidth(void)const +{ + return mDstWidth; +} + +inline +void ImageInfo::dstWidth(DWORD dstWidth) +{ + mDstWidth=dstWidth; +} + +inline +DWORD ImageInfo::dstHeight(void)const +{ + return mDstHeight; +} + +inline +void ImageInfo::dstHeight(DWORD dstHeight) +{ + mDstHeight=dstHeight; +} + +inline +RGB888 *ImageInfo::dstRGB888(void) +{ + return mpDstRGB888; +} + +inline +void ImageInfo::dstRGB888(RGB888 *dstRGB888) +{ + mpDstRGB888=dstRGB888; +} + +inline +DWORD ImageInfo::srcRow(void)const +{ + return mSrcRow; +} + +inline +void ImageInfo::srcRow(DWORD srcRow) +{ + mSrcRow=srcRow; +} + +inline +DWORD ImageInfo::srcCol(void)const +{ + return mSrcCol; +} + +inline +void ImageInfo::srcCol(DWORD srcCol) +{ + mSrcCol=srcCol; +} + +inline +DWORD ImageInfo::dstRow(void)const +{ + return mDstRow; +} + +inline +void ImageInfo::dstRow(DWORD dstRow) +{ + mDstRow=dstRow; +} + +inline +DWORD ImageInfo::dstCol(void)const +{ + return mDstCol; +} + +inline +void ImageInfo::dstCol(DWORD dstCol) +{ + mDstCol=dstCol; +} + +inline +DWORD ImageInfo::srcWidthFactor(void)const +{ + return mSrcWidthFactor; +} + +inline +void ImageInfo::srcWidthFactor(DWORD srcWidthFactor) +{ + mSrcWidthFactor=srcWidthFactor; +} + +inline +DWORD ImageInfo::dstWidthFactor(void)const +{ + return mDstWidthFactor; +} + +inline +void ImageInfo::dstWidthFactor(DWORD dstWidthFactor) +{ + mDstWidthFactor=dstWidthFactor; +} +#endif \ No newline at end of file diff --git a/jpgimg/Jpgimg.cpp b/jpgimg/Jpgimg.cpp new file mode 100644 index 0000000..7e1c492 --- /dev/null +++ b/jpgimg/Jpgimg.cpp @@ -0,0 +1,347 @@ +#include +#include +#include +#include +#include +#include + +bool JPGImage::draw(PureDevice &pureDevice) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(0,0,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool JPGImage::draw(PureDevice &pureDevice,int xSrc,int ySrc) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(xSrc,ySrc,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool JPGImage::draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(dstRect,compatibleDevice,srcPoint); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool JPGImage::stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.stretchBlt(Rect(xyPoint.x(),xyPoint.y(),strwidth,strheight),compatibleDevice,Rect(0,0,width(),height())); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return FALSE; +} + +bool JPGImage::decode(const String &strPathFileName,PureDevice &pureDevice) +{ + JSAMPARRAY buffer; + int row_stride; + int row_elements; + int row(0); + jpeg_decompress_struct cinfo; + FILE *fp; + + destroy(); + if((fp=::fopen((char*)(String&)strPathFileName,"rb"))==NULL)return FALSE; + ::jpeg_create_decompress(&cinfo); + ::jpeg_stdio_src(&cinfo,fp); + try{::jpeg_read_header(&cinfo,TRUE);} + catch(JPGError){return FALSE;} + try{::jpeg_start_decompress(&cinfo);} + catch(JPGError){return FALSE;} + row_stride=cinfo.output_width*cinfo.output_components; + buffer=(*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE,row_stride,cinfo.output_height); + while(cinfo.output_scanlinealloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE,row_stride,cinfo.output_height); + while(cinfo.output_scanline &rgbArray=getRGBArray(); + Array tmpArray; + + tmpArray.size(rgbArray.size()); + bmInfo.height(-bmInfo.height()); + for(int row=0;row rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + float heightFactor; + float aspectRatio; + int newHeight; + + newWidth-=(newWidth%4); // align the width on DWORD boundary + if(!isOkay())return false; + aspectRatio=(float)width()/(float)height(); + newHeight=(float)newWidth/aspectRatio; + heightFactor=(float)newHeight/height(); + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(int((float)getBitmapInfo().height()*heightFactor)); + if(bitmapInfo.height()<0)bitmapInfo.height(-newHeight); + else bitmapInfo.height(newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + tmpArray.size(bitmapInfo.width()*height()); + for(int row=0;row rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + + if(!isOkay())return false; + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(-newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + bitmapInfo.verifyDimensions(); + tmpArray.size(bitmapInfo.width()*(height()<0?-height():height())); + for(int row=0;row rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + + if(!getRGBArray().size())return false; + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(-newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + bitmapInfo.verifyDimensions(); + tmpArray.size(bitmapInfo.width()*(height()<0?-height():height())); + for(int row=0;row &rawData) +{ + return RawImage::getRawData(rawData); +} + +bool JPGImage::setRawData(GlobalData &rawData,PureDevice &pureDevice) +{ + destroy(); + if(!RawImage::setRawData(rawData))return false; + mhBitmap=::CreateDIBitmap((HDC)pureDevice,(BITMAPINFOHEADER*)getBitmapInfo(),CBM_INIT,&getRGBArray()[0],(BITMAPINFO*)getBitmapInfo(),DIB_RGB_COLORS); + return true; +} + +bool JPGImage::rotateLeft(PureDevice &pureDevice) +{ + Array rgbArray; + RawImage rawImage; + RGB888 rgb888; + + if(!isOkay())return false; + rawImage.getBitmapInfo().rgbColors(0); + rawImage.getBitmapInfo().bitCount(BitmapInfo::Bit24); + rawImage.getBitmapInfo().width(getBitmapInfo().height()<0?-getBitmapInfo().height():getBitmapInfo().height()); + rawImage.getBitmapInfo().height(getBitmapInfo().height()<0?-getBitmapInfo().width():getBitmapInfo().width()); + rawImage.getBitmapInfo().planes(1); + rawImage.getBitmapInfo().compression(BI_RGB); + rawImage.getBitmapInfo().sizeImage(0); + rawImage.getBitmapInfo().colorUsed(0); + rawImage.getBitmapInfo().colorImportant(0); + rawImage.getBitmapInfo().verifyDimensions(); + rawImage.getRGBArray().size(rawImage.width()*rawImage.height()); + for(int rowIndex=0;rowIndex<(height()<0?-height():height());rowIndex++) + { + for(int colIndex=0;colIndex rgbArray; + RawImage rawImage; + RGB888 rgb888; + + if(!isOkay())return false; + rawImage.getBitmapInfo().rgbColors(0); + rawImage.getBitmapInfo().bitCount(BitmapInfo::Bit24); + rawImage.getBitmapInfo().width(getBitmapInfo().height()<0?-getBitmapInfo().height():getBitmapInfo().height()); + rawImage.getBitmapInfo().height(getBitmapInfo().height()<0?-getBitmapInfo().width():getBitmapInfo().width()); + rawImage.getBitmapInfo().planes(1); + rawImage.getBitmapInfo().compression(BI_RGB); + rawImage.getBitmapInfo().sizeImage(0); + rawImage.getBitmapInfo().colorUsed(0); + rawImage.getBitmapInfo().colorImportant(0); + rawImage.getBitmapInfo().verifyDimensions(); + rawImage.getRGBArray().size(rawImage.width()*rawImage.height()); + for(int rowIndex=0;rowIndex<(height()<0?-height():height());rowIndex++) + { + for(int colIndex=0;colIndex +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif +#ifndef _JPGIMG_RGB888_HPP_ +#include +#endif +#ifndef _JPGIMG_RAWIMAGE_HPP_ +#include +#endif + +class String; +class PureDevice; +class RGB888; + +class JPGImage : public RawImage +{ +public: + class JPGImageInvalidImage{}; + JPGImage(void); + virtual ~JPGImage(); + bool decode(const String &strPathFileName,PureDevice &pureDevice); + bool decode(const String &strPathFileName); + bool saveBitmap(const String &strPathFileName); + bool draw(PureDevice &pureDevice); + bool draw(PureDevice &pureDevice,int xSrc,int ySrc); + bool draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + bool stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight); + bool rotateLeft(PureDevice &pureDevice); + bool rotateRight(PureDevice &pureDevice); + bool resample(PureDevice &pureDevice,int width); + bool resample(PureDevice &pureDevice,int newWidth,int newHeight); + bool resample(int newWidth,int newHeight); + DWORD memoryUsage(void)const; + bool isOkay(void)const; + int width(void)const; + int height(void)const; + bool getRawData(GlobalData &rawData); + bool setRawData(GlobalData &rawData,PureDevice &pureDevice); + bool setRawData(GlobalData &rawData); + bool getAt(DWORD row,DWORD col,RGB888 &rgb888)const; +private: + JPGImage(const JPGImage &someJPGImage); + JPGImage &operator=(const JPGImage &someJPGImage); + void copyRow(RGB888 *pDstArray,RGB888 *pSrcArray,int length); + void destroy(void); + + HBITMAP mhBitmap; +}; + +inline +JPGImage::JPGImage(void) +: mhBitmap(0) +{ +} + +inline +JPGImage::JPGImage(const JPGImage &someJPGImage) +: mhBitmap(0) +{ // private implementation + *this=someJPGImage; +} + +inline +JPGImage &JPGImage::operator=(const JPGImage &someJPGImage) +{ // private implementation + return *this; +} + +inline +JPGImage::~JPGImage() +{ + destroy(); +} + +inline +int JPGImage::width(void)const +{ + return getBitmapInfo().width(); +} + +inline +int JPGImage::height(void)const +{ + if(getBitmapInfo().height()<0)return -getBitmapInfo().height(); + return getBitmapInfo().height(); +} + +inline +bool JPGImage::getAt(DWORD row,DWORD col,RGB888 &rgb888)const +{ + return RawImage::getAt(row,col,rgb888); +} + +inline +bool JPGImage::isOkay(void)const +{ + return mhBitmap?TRUE:FALSE; +} + +inline +void JPGImage::destroy(void) +{ + if(!mhBitmap)return; + ::DeleteObject(mhBitmap); + mhBitmap=0; +} + +inline +DWORD JPGImage::memoryUsage(void)const +{ + return RawImage::memoryUsage(); +} + +inline +bool JPGImage::setRawData(GlobalData &rawData) +{ + destroy(); + return RawImage::setRawData(rawData); +} +#endif diff --git a/jpgimg/Rawimg.cpp b/jpgimg/Rawimg.cpp new file mode 100644 index 0000000..68b38af --- /dev/null +++ b/jpgimg/Rawimg.cpp @@ -0,0 +1,20 @@ +#include +#include + +bool RawImage::getRawData(GlobalData &rawData) +{ + if(!isOkay())return false; + rawData.size(sizeof(BITMAPINFO)+(mRGBArray.size()*sizeof(RGB888))); + ::memcpy((BYTE*)&rawData[0],(BITMAPINFO*)mBitmapInfo,sizeof(BITMAPINFO)); + ::memcpy(((BYTE*)&rawData[0])+sizeof(BITMAPINFO),(BYTE*)&mRGBArray[0],mRGBArray.size()*sizeof(RGB888)); + return true; +} + +bool RawImage::setRawData(GlobalData &rawData) +{ + if(!rawData.size())return false; + ::memcpy((BYTE*)(BITMAPINFO*)mBitmapInfo,(BYTE*)&rawData[0],sizeof(BITMAPINFO)); + mRGBArray.size((rawData.size()-sizeof(BITMAPINFO))/sizeof(RGB888)); + ::memcpy((BYTE*)&mRGBArray[0],((BYTE*)&rawData[0])+sizeof(BITMAPINFO),rawData.size()-sizeof(BITMAPINFO)); + return true; +} diff --git a/jpgimg/Rawimg.hpp b/jpgimg/Rawimg.hpp new file mode 100644 index 0000000..c74401e --- /dev/null +++ b/jpgimg/Rawimg.hpp @@ -0,0 +1,137 @@ +#ifndef _JPGIMG_RAWIMAGE_HPP_ +#define _JPGIMG_RAWIMAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif +#ifndef _JPGIMG_RGB888_HPP_ +#include +#endif + +class RawImage +{ +public: + class RawImageInvalidImage{}; + RawImage(void); + virtual ~RawImage(); + DWORD memoryUsage(void)const; + int width(void)const; + int height(void)const; + bool getRawData(GlobalData &rawData); + bool setRawData(GlobalData &rawData); + bool getAt(DWORD row,DWORD col,RGB888 &rgb888)const; + bool setAt(DWORD row,DWORD col,const RGB888 &rgb888); + Array &getRGBArray(void); + BitmapInfo &getBitmapInfo(void); + const BitmapInfo &getBitmapInfo(void)const; + bool isOkay(void)const; +private: + RawImage(const RawImage &someRawImage); + RawImage &operator=(const RawImage &someRawImage); + + BitmapInfo mBitmapInfo; + Array mRGBArray; +}; + +inline +RawImage::RawImage(void) +{ +} + +inline +RawImage::RawImage(const RawImage &someRawImage) +{ // private implementation + *this=someRawImage; +} + +inline +RawImage &RawImage::operator=(const RawImage &someRawImage) +{ // private implementation + return *this; +} + +inline +RawImage::~RawImage() +{ +} + +inline +int RawImage::width(void)const +{ + return mBitmapInfo.width(); +} + +inline +int RawImage::height(void)const +{ + if(mBitmapInfo.height()<0)return -mBitmapInfo.height(); + return mBitmapInfo.height(); +} + +inline +Array &RawImage::getRGBArray(void) +{ + return mRGBArray; +} + +inline +BitmapInfo &RawImage::getBitmapInfo(void) +{ + return mBitmapInfo; +} + +inline +const BitmapInfo &RawImage::getBitmapInfo(void)const +{ + return mBitmapInfo; +} + +inline +bool RawImage::getAt(DWORD row,DWORD col,RGB888 &rgb888)const +{ + if(!isOkay())return false; + if(mBitmapInfo.height()>0)rgb888=((Array&)mRGBArray)[row*width()+col]; + else rgb888=((Array&)mRGBArray)[(mBitmapInfo.width()*(-mBitmapInfo.height()))-(((row*mBitmapInfo.width())+mBitmapInfo.width()))+col]; + +// if(mBitmapInfo.height()<0)rgb888=((Array&)mRGBArray)[row*width()+col]; +// else rgb888=((Array&)mRGBArray)[(mBitmapInfo.width()*(-mBitmapInfo.height()))-(((row*mBitmapInfo.width())+mBitmapInfo.width()))+col]; + return true; +} + +inline +bool RawImage::setAt(DWORD row,DWORD col,const RGB888 &rgb888) +{ + if(!isOkay())return false; + + if(mBitmapInfo.height()>0)((Array&)mRGBArray)[row*width()+col]=rgb888; + else ((Array&)mRGBArray)[(mBitmapInfo.width()*(-mBitmapInfo.height()))-(((row*mBitmapInfo.width())+mBitmapInfo.width()))+col]=rgb888; + +// if(mBitmapInfo.height()<0)((Array&)mRGBArray)[row*width()+col]=rgb888; +// else ((Array&)mRGBArray)[(mBitmapInfo.width()*(-mBitmapInfo.height()))-(((row*mBitmapInfo.width())+mBitmapInfo.width()))+col]=rgb888; + + return true; +} + +inline +DWORD RawImage::memoryUsage(void)const +{ + return mRGBArray.size()*sizeof(RGB888); +} + +inline +bool RawImage::isOkay(void)const +{ + return mRGBArray.size()?true:false; +} +#endif \ No newline at end of file diff --git a/jpgimg/Release/jpgimg.lib b/jpgimg/Release/jpgimg.lib new file mode 100644 index 0000000..035d74e Binary files /dev/null and b/jpgimg/Release/jpgimg.lib differ diff --git a/jpgimg/Release/vc60.idb b/jpgimg/Release/vc60.idb new file mode 100644 index 0000000..9b0f984 Binary files /dev/null and b/jpgimg/Release/vc60.idb differ diff --git a/jpgimg/Rgb888.hpp b/jpgimg/Rgb888.hpp new file mode 100644 index 0000000..bd0d17b --- /dev/null +++ b/jpgimg/Rgb888.hpp @@ -0,0 +1,116 @@ +#ifndef _JPGIMG_RGB888_HPP_ +#define _JPGIMG_RGB888_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_STDIO_HPP_ +#include +#endif + +class RGB888 +{ +public: + RGB888(void); + RGB888(const RGB888 &someRGB888); + RGB888(BYTE red,BYTE green,BYTE blue); + ~RGB888(); // the destructor cannot be virtual + RGB888 &operator=(const RGB888 &someRGB888); + BOOL operator==(const RGB888 &someRGB888); + BYTE red(void)const; + void red(BYTE red); + BYTE green(void)const; + void green(BYTE green); + BYTE blue(void)const; + void blue(BYTE blue); + String toString(void)const; +private: + BYTE mBlue; + BYTE mGreen; + BYTE mRed; +}; + +inline +RGB888::RGB888(void) +: mBlue(0), mGreen(0), mRed(0) +{ +} + +inline +RGB888::RGB888(BYTE red,BYTE green,BYTE blue) +: mBlue(blue), mGreen(green), mRed(red) +{ +} + +inline +RGB888::RGB888(const RGB888 &someRGB888) +{ + *this=someRGB888; +} + +inline +RGB888::~RGB888() +{ +} + +inline +RGB888 &RGB888::operator=(const RGB888 &someRGB888) +{ + red(someRGB888.red()); + green(someRGB888.green()); + blue(someRGB888.blue()); + return *this; +} + +inline +BOOL RGB888::operator==(const RGB888 &someRGB888) +{ + return red()==someRGB888.red()&&green()==someRGB888.green()&&blue()==someRGB888.blue(); +} + +inline +BYTE RGB888::red(void)const +{ + return mRed; +} + +inline +void RGB888::red(BYTE red) +{ + mRed=red; +} + +inline +BYTE RGB888::green(void)const +{ + return mGreen; +} + +inline +void RGB888::green(BYTE green) +{ + mGreen=green; +} + +inline +BYTE RGB888::blue(void)const +{ + return mBlue; +} + +inline +void RGB888::blue(BYTE blue) +{ + mBlue=blue; +} + +inline +String RGB888::toString(void)const +{ + String str; + ::sprintf(str,"(%d,%d,%d)",red(),green(),blue()); + return str; +} +#endif diff --git a/jpgimg/Scroll.hpp b/jpgimg/Scroll.hpp new file mode 100644 index 0000000..718f381 --- /dev/null +++ b/jpgimg/Scroll.hpp @@ -0,0 +1,362 @@ +#ifndef _JPGIMG_SCROLLINFO_HPP_ +#define _JPGIMG_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +inline +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=jpgimg - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "jpgimg.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "jpgimg.mak" CFG="jpgimg - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "jpgimg - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "jpgimg - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "jpgimg - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "jpgimg - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /W1 /GX /Z7 /Od /I "\work" /I "\parts" /I "\parts\jpeg-6b" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\jpgimg.lib" + +!ENDIF + +# Begin Target + +# Name "jpgimg - Win32 Release" +# Name "jpgimg - Win32 Debug" +# Begin Source File + +SOURCE=.\Asmutil.asm + +!IF "$(CFG)" == "jpgimg - Win32 Release" + +!ELSEIF "$(CFG)" == "jpgimg - Win32 Debug" + +# Begin Custom Build +InputPath=.\Asmutil.asm +InputName=Asmutil + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + \parts\tasm32\tasm32 /t /zi /ml /m5 $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Dib24.cpp +# End Source File +# Begin Source File + +SOURCE=.\Jpgimg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Rawimg.cpp +# End Source File +# End Target +# End Project diff --git a/jpgimg/jpgimg.dsp b/jpgimg/jpgimg.dsp new file mode 100644 index 0000000..d0ff078 --- /dev/null +++ b/jpgimg/jpgimg.dsp @@ -0,0 +1,116 @@ +# Microsoft Developer Studio Project File - Name="jpgimg" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=jpgimg - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "jpgimg.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "jpgimg.mak" CFG="jpgimg - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "jpgimg - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "jpgimg - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "jpgimg - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "jpgimg - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Gz /MTd /GX /Zi /O2 /I "\work" /I "\parts" /I "\parts\jpeg-6b" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "_WINDOWS" /D "WIN32" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\jpgimg.lib" + +!ENDIF + +# Begin Target + +# Name "jpgimg - Win32 Release" +# Name "jpgimg - Win32 Debug" +# Begin Source File + +SOURCE=.\Asmutil.asm + +!IF "$(CFG)" == "jpgimg - Win32 Release" + +!ELSEIF "$(CFG)" == "jpgimg - Win32 Debug" + +# Begin Custom Build +InputPath=.\Asmutil.asm +InputName=Asmutil + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\tasm32\TASM32 /t /ml $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Dib24.cpp +# End Source File +# Begin Source File + +SOURCE=.\Jpgimg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Rawimg.cpp +# End Source File +# End Target +# End Project diff --git a/jpgimg/jpgimg.dsw b/jpgimg/jpgimg.dsw new file mode 100644 index 0000000..3fef60c --- /dev/null +++ b/jpgimg/jpgimg.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "jpgimg"=.\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/jpgimg/jpgimg.ncb b/jpgimg/jpgimg.ncb new file mode 100644 index 0000000..947d65b Binary files /dev/null and b/jpgimg/jpgimg.ncb differ diff --git a/jpgimg/jpgimg.opt b/jpgimg/jpgimg.opt new file mode 100644 index 0000000..e1d5ced Binary files /dev/null and b/jpgimg/jpgimg.opt differ diff --git a/jpgimg/jpgimg.plg b/jpgimg/jpgimg.plg new file mode 100644 index 0000000..01dbfd5 --- /dev/null +++ b/jpgimg/jpgimg.plg @@ -0,0 +1,28 @@ + + +
+

Build Log

+

+--------------------Configuration: jpgimg - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1B3.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /O2 /I "\work" /I "\parts" /I "\parts\jpeg-6b" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "_WINDOWS" /D "WIN32" /Fp"msvcobj/jpgimg.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"F:\work\jpgimg\Jpgimg.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1B3.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\jpgimg.lib" .\msvcobj\Dib24.obj .\msvcobj\Jpgimg.obj .\msvcobj\Rawimg.obj .\Asmutil.obj " +

Output Window

+Compiling... +Jpgimg.cpp +Creating library... +.\Asmutil.obj : warning LNK4033: converting object format from OMF to COFF + + + +

Results

+jpgimg.lib - 0 error(s), 1 warning(s) +
+ + diff --git a/jpgimg/scraps.txt b/jpgimg/scraps.txt new file mode 100644 index 0000000..603d26e --- /dev/null +++ b/jpgimg/scraps.txt @@ -0,0 +1,43 @@ +bool JPGImage::resample(PureDevice &pureDevice,int newWidth) +{ + Array rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + float heightFactor; + float aspectRatio; + int newHeight; + + newWidth-=(newWidth%4); // align the width on DWORD boundary + if(!isOkay())return false; + aspectRatio=(float)width()/(float)height(); + newHeight=(float)newWidth/aspectRatio; + heightFactor=(float)newHeight/height(); + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(int((float)getBitmapInfo().height()*heightFactor)); + if(bitmapInfo.height()<0)bitmapInfo.height(-newHeight); + else bitmapInfo.height(newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + tmpArray.size(bitmapInfo.width()*height()); + for(int row=0;row +#include + +WORD GenericServer::listen(const String &hostName,short portNum) +{ + HostEnt hostEntry; + ServEnt serverEntry; + String stringData; + + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + INETSocketAddress::internetAddress((hostEntry.addresses())[0]); + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(htons(portNum)); + if(!mGenericControl.openSocket())return FALSE; + mGenericControl.bind(*this); + if(!mGenericControl.listen())return FALSE; + message("waiting for connection..."); + if(!mGenericControl.accept(mPortControl)){message("accept returned FALSE;");return FALSE;} + message("service started..."); + acceptHandler(); + while(TRUE) + { + if(mPortControl.receive(stringData)) + { + if(!stringHandler(stringData))break; + } + } + message("terminating connection"); + return TRUE; +} + +// virtuals + +void GenericServer::message(const String &message) +{ + mWinConsole.writeLine(message); +} + +void GenericServer::message(Block &msgData) +{ + for(int msgIndex=0;msgIndex +#include +#include +#include +#include + +class String; + +class GenericServer : public INETSocketAddress +{ +public: + GenericServer(void); + virtual ~GenericServer(); + WORD listen(const String &hostName,short portNum); + WORD send(const char &charData); + WORD send(const String &sendString); + WORD receive(String &receiveString,BOOL waitForData=TRUE); + WORD receive(Block &receiveStrings); + WORD receive(char &charData,BOOL waitForData=TRUE); +protected: + virtual void acceptHandler(void); + virtual BOOL stringHandler(const String &stringData); + virtual void message(const String &message); + virtual void message(Block &msgData); +private: + + Socket mGenericControl; + Socket mPortControl; + WSASystem mWSASystem; + Console mWinConsole; +}; + +inline +GenericServer::GenericServer(void) +{ +} + +inline +GenericServer::~GenericServer() +{ + mWinConsole.writeLine("Server is detructing...(hit enter)."); + mWinConsole.read(); +} + +inline +WORD GenericServer::send(const char &charData) +{ + return mPortControl.send(charData); +} + +inline +WORD GenericServer::send(const String &sendString) +{ + return mPortControl.send(sendString); +} + +inline +WORD GenericServer::receive(String &receiveString,BOOL waitForData) +{ + return mPortControl.receive(receiveString,waitForData); +} + +inline +WORD GenericServer::receive(char &charData,BOOL waitForData) +{ + return mPortControl.receive(charData,waitForData); +} + +inline +WORD GenericServer::receive(Block &receiveStrings) +{ + return mPortControl.receive(receiveStrings); +} + + + +#endif \ No newline at end of file diff --git a/listen/LISTEN.MAK b/listen/LISTEN.MAK new file mode 100644 index 0000000..56a3e54 --- /dev/null +++ b/listen/LISTEN.MAK @@ -0,0 +1,728 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=listen - Win32 Debug +!MESSAGE No configuration specified. Defaulting to listen - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "listen - Win32 Release" && "$(CFG)" != "listen - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Listen.mak" CFG="listen - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "listen - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "listen - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "listen - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "listen - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Listen.exe" + +CLEAN : + -@erase "$(INTDIR)\gensrv.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\smtpsrv.obj" + -@erase "$(OUTDIR)\Listen.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Listen.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Listen.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Listen.pdb" /machine:I386 /out:"$(OUTDIR)/Listen.exe" +LINK32_OBJS= \ + "$(INTDIR)\gensrv.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\smtpsrv.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" + +"$(OUTDIR)\Listen.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "listen - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Listen.exe" + +CLEAN : + -@erase "$(INTDIR)\gensrv.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\smtpsrv.obj" + -@erase "$(OUTDIR)\Listen.exe" + -@erase "$(OUTDIR)\Listen.ilk" + -@erase "$(OUTDIR)\Listen.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX"c:\work\exe\msvc42.pch" /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/Listen.pch" /YX"c:\work\exe\msvc42.pch"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Listen.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib wsock32.lib /nologo /subsystem:windows\ + /incremental:yes /pdb:"$(OUTDIR)/Listen.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)/Listen.exe" +LINK32_OBJS= \ + "$(INTDIR)\gensrv.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\smtpsrv.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" + +"$(OUTDIR)\Listen.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "listen - Win32 Release" +# Name "listen - Win32 Debug" + +!IF "$(CFG)" == "listen - Win32 Release" + +!ELSEIF "$(CFG)" == "listen - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "listen - Win32 Release" + +!ELSEIF "$(CFG)" == "listen - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mssocket.lib + +!IF "$(CFG)" == "listen - Win32 Release" + +!ELSEIF "$(CFG)" == "listen - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\gensrv.cpp + +!IF "$(CFG)" == "listen - Win32 Release" + +DEP_CPP_GENSR=\ + {$(INCLUDE)}"\.\Gensrv.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\coord.hpp"\ + {$(INCLUDE)}"\Common\scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\gensrv.obj" : $(SOURCE) $(DEP_CPP_GENSR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "listen - Win32 Debug" + +DEP_CPP_GENSR=\ + {$(INCLUDE)}"\.\Gensrv.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\gensrv.obj" : $(SOURCE) $(DEP_CPP_GENSR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\smtpsrv.cpp + +!IF "$(CFG)" == "listen - Win32 Release" + +DEP_CPP_SMTPS=\ + {$(INCLUDE)}"\.\Gensrv.hpp"\ + {$(INCLUDE)}"\.\smtpsrv.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\coord.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\smtpsrv.obj" : $(SOURCE) $(DEP_CPP_SMTPS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "listen - Win32 Debug" + +DEP_CPP_SMTPS=\ + {$(INCLUDE)}"\.\Gensrv.hpp"\ + {$(INCLUDE)}"\.\smtpsrv.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\smtpsrv.obj" : $(SOURCE) $(DEP_CPP_SMTPS) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\main.cpp + +!IF "$(CFG)" == "listen - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Gensrv.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\smtpsrv.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\coord.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "listen - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Gensrv.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\smtpsrv.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/listen/LISTEN.MDP b/listen/LISTEN.MDP new file mode 100644 index 0000000..0c59f35 Binary files /dev/null and b/listen/LISTEN.MDP differ diff --git a/listen/MAIN.CPP b/listen/MAIN.CPP new file mode 100644 index 0000000..29a7650 --- /dev/null +++ b/listen/MAIN.CPP @@ -0,0 +1,9 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + SMTPServer smtpServer; + smtpServer.listen("europa.com",25); + return FALSE; +} diff --git a/listen/MAIN.HPP b/listen/MAIN.HPP new file mode 100644 index 0000000..37684ea --- /dev/null +++ b/listen/MAIN.HPP @@ -0,0 +1,66 @@ +#ifndef _HTTP_MAIN_HPP_ +#define _HTTP_MAIN_HPP_ +#include + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/listen/PACKET.CPP b/listen/PACKET.CPP new file mode 100644 index 0000000..826fb02 --- /dev/null +++ b/listen/PACKET.CPP @@ -0,0 +1,241 @@ +#include +#include +#include + +TelnetPacket::~TelnetPacket() +{ +} + +WORD TelnetPacket::getPacket(Socket &someSocket,WORD useWait) +{ + char charByte; + + command(Unknown); + code(Unknown); + if(!someSocket.isConnected())return FALSE; + if(!someSocket.receive(charByte,useWait)||!InterpretAsCommand==(charByte&0xFF))return FALSE; + if(!someSocket.receive(charByte,TRUE))return FALSE; + command((TelnetCommand)(charByte&0xFF)); + if(command()==Will||command()==Wont||command()==Do||command()==Dont) + { + if(!someSocket.receive(charByte,TRUE))return FALSE; + code((TelnetCommand)(charByte&0xFF)); + } + return TRUE; +} + +TelnetPacket::operator String(void)const +{ + String stringRep; + String workString; + + switch(command()) + { + case StartSubNegotiation : + stringRep+="StartSubNegotiation"; + break; + case EndOfSubNegotiation : + stringRep+="EndOfSubNegotiation"; + break; + case NoOperation : + stringRep+="NoOperation"; + break; + case DataMark : + stringRep+="DataMark"; + break; + case TimingMark : + stringRep+="TimingMark"; + break; + case CharacterBreak : + stringRep+="CharacterBreak"; + break; + case InterruptProcess : + stringRep+="InterruptProcess"; + break; + case AbortOutput : + stringRep+="AbortOutput"; + break; + case AreYouThere : + stringRep+="AreYouThere"; + break; + case EraseCharacter : + stringRep+="EraseCharacter"; + break; + case EraseLine : + stringRep+="EraseLine"; + break; + case GoAheadFunction : + stringRep+="GoAheadFunction"; + break; + case SuppressGoAhead : + stringRep+="SuppressGoAhead"; + break; + case Will : + stringRep+="Will"; + break; + case UserID : + stringRep+="UserID"; + break; + case Wont : + stringRep+="Wont"; + break; + case Do : + stringRep+="Do"; + break; + case Dont : + stringRep+="Dont"; + break; + case InterpretAsCommand : + stringRep+="InterpretAsCommand"; + break; + case TransmitBinary : + stringRep+="TransmitBinary"; + break; + case Echo : + stringRep+="Echo"; + break; + case TermType : + stringRep+="TermType"; + break; + case Regime : + stringRep+="Regime"; + break; + case TerminalSpeed : + stringRep+="Regime"; + break; + case WindowSize : + stringRep+="WindowSize"; + break; + case TTYLoc : + stringRep+="TTYLoc"; + break; + case OutMark : + stringRep+="OutMark"; + break; + case ToggleFlowControl : + stringRep+="ToggleFlowControl"; + break; + case LineMode : + stringRep+="LineMode"; + break; + case Authentication : + stringRep+="Authentication"; + break; + case NewEnvironment : + stringRep+="NewEnvironment"; + break; + case Status : + stringRep+="NewEnvironment"; + break; + default : + ::sprintf(workString,"(%d)",command()); + stringRep+=workString; + break; + } + if(command()!=Will&&command()!=Wont&&command()!=Do&&command()!=Dont)return stringRep; + stringRep+="+"; + switch(code()) + { + case StartSubNegotiation : + stringRep+="StartSubNegotiation"; + break; + case EndOfSubNegotiation : + stringRep+="EndOfSubNegotiation"; + break; + case NoOperation : + stringRep+="NoOperation"; + break; + case DataMark : + stringRep+="DataMark"; + break; + case CharacterBreak : + stringRep+="CharacterBreak"; + break; + case InterruptProcess : + stringRep+="InterruptProcess"; + break; + case AbortOutput : + stringRep+="AbortOutput"; + break; + case SuppressGoAhead : + stringRep+="SuppressGoAhead"; + break; + case AreYouThere : + stringRep+="AreYouThere"; + break; + case EraseCharacter : + stringRep+="EraseCharacter"; + break; + case EraseLine : + stringRep+="EraseLine"; + break; + case GoAheadFunction : + stringRep+="GoAheadFunction"; + break; + case Will : + stringRep+="Will"; + break; + case Wont : + stringRep+="Wont"; + break; + case Do : + stringRep+="Do"; + break; + case Dont : + stringRep+="Dont"; + break; + case UserID : + stringRep+="UserID"; + break; + case TimingMark : + stringRep+="TimingMark"; + break; + case InterpretAsCommand : + stringRep+="InterpretAsCommand"; + break; + case TransmitBinary : + stringRep+="TransmitBinary"; + break; + case Echo : + stringRep+="Echo"; + break; + case TermType : + stringRep+="TermType"; + break; + case Regime : + stringRep+="Regime"; + break; + case TerminalSpeed : + stringRep+="Regime"; + break; + case ToggleFlowControl : + stringRep+="ToggleFlowControl"; + break; + case WindowSize : + stringRep+="WindowSize"; + break; + case TTYLoc : + stringRep+="TTYLoc"; + break; + case OutMark : + stringRep+="OutMark"; + break; + case LineMode : + stringRep+="LineMode"; + break; + case Authentication : + stringRep+="Authentication"; + break; + case NewEnvironment : + stringRep+="NewEnvironment"; + break; + case Status : + stringRep+="NewEnvironment"; + break; + default : + ::sprintf(workString,"(%d)",command()); + stringRep+=workString; + break; + } + return stringRep; +} diff --git a/listen/PACKET.HPP b/listen/PACKET.HPP new file mode 100644 index 0000000..4b3eeff --- /dev/null +++ b/listen/PACKET.HPP @@ -0,0 +1,93 @@ +#ifndef _LISTEN_TELNETPACKET_HPP_ +#define _LISTEN_TELNETPACKET_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Socket; +class String; + +class TelnetPacket +{ +public: + enum TelnetCommand{StartSubNegotiation=250,EndOfSubNegotiation=240, + NoOperation=241,DataMark=242,CharacterBreak=243,InterruptProcess=244, + AbortOutput=245,AreYouThere=246,EraseCharacter=247,EraseLine=248, + GoAheadFunction=249,InterpretAsCommand=255,Will=251,Wont=252,Do=253,Dont=254, + TransmitBinary=0,Echo=1,TermType=24,OutMark=27,TTYLoc=28,Regime=29,WindowSize=31, + TerminalSpeed=32,ToggleFlowControl=33,LineMode=34,Authentication=37,NewEnvironment=39, + UserID=26,Status=5,SuppressGoAhead=3,TimingMark=6,Unknown=256}; + TelnetPacket(void); + TelnetPacket(const TelnetPacket &someTelnetPacket); + TelnetPacket(TelnetCommand command,TelnetCommand code); + virtual ~TelnetPacket(); + TelnetPacket &operator=(const TelnetPacket &someTelnetPacket); + WORD operator==(const TelnetPacket &someTelnetPacket)const; + WORD getPacket(Socket &someSocket,WORD useWait=TRUE); + operator String(void)const; + TelnetCommand command(void)const; + void command(TelnetCommand command); + TelnetCommand code(void)const; + void code(TelnetCommand code); +private: + TelnetCommand mTelnetCommand; + TelnetCommand mOptionCode; +}; + +inline +TelnetPacket::TelnetPacket(void) +: mTelnetCommand(Unknown), mOptionCode(Unknown) +{ +} + +inline +TelnetPacket::TelnetPacket(const TelnetPacket &someTelnetPacket) +{ + *this=someTelnetPacket; +} + +inline +TelnetPacket::TelnetPacket(TelnetCommand command,TelnetCommand code) +: mTelnetCommand(command), mOptionCode(code) +{ +} + +inline +TelnetPacket &TelnetPacket::operator=(const TelnetPacket &someTelnetPacket) +{ + command(someTelnetPacket.command()); + code(someTelnetPacket.code()); + return *this; +} + +inline +WORD TelnetPacket::operator==(const TelnetPacket &someTelnetPacket)const +{ + return (command()==someTelnetPacket.command()&& + code()==someTelnetPacket.code()); +} + +inline +TelnetPacket::TelnetCommand TelnetPacket::command(void)const +{ + return mTelnetCommand; +} + +inline +void TelnetPacket::command(TelnetCommand command) +{ + mTelnetCommand=command; +} + +inline +TelnetPacket::TelnetCommand TelnetPacket::code(void)const +{ + return mOptionCode; +} + +inline +void TelnetPacket::code(TelnetCommand code) +{ + mOptionCode=code; +} +#endif diff --git a/listen/RANDOM.HPP b/listen/RANDOM.HPP new file mode 100644 index 0000000..ed7116a --- /dev/null +++ b/listen/RANDOM.HPP @@ -0,0 +1,40 @@ +#ifndef _LISTEN_RANDOM_HP_ +#define _LISTEN_RANDOM_HPP_ +#ifndef _COMMON_STDLIB_HPP_ +#include +#endif + +class Random +{ +public: + Random(int maxNum=10); + virtual ~Random(); + void setMax(int maxNum); + int random(void)const; +private: + float mMax; +}; + +inline +Random::Random(int maxNum) +: mMax(maxNum) +{ +} + +inline +Random::~Random() +{ +} + +inline +void Random::setMax(int maxNum) +{ + mMax=maxNum; +} + +inline +int Random::random(void)const +{ + return ((float)mMax/RAND_MAX)*(float)rand(); +} +#endif \ No newline at end of file diff --git a/listen/SCRAPS.TXT b/listen/SCRAPS.TXT new file mode 100644 index 0000000..598a5b2 --- /dev/null +++ b/listen/SCRAPS.TXT @@ -0,0 +1,432 @@ + String cmdLine(::GetCommandLine()); + String hostName; + String nameFile; + Block itemStrings; + + hostName=cmdLine.betweenString(' ',0); + if(hostName.isNull())return FALSE; + nameFile=hostName; + hostName=hostName.betweenString(0,' '); + if(hostName.isNull())return FALSE; + nameFile=nameFile.betweenString(' ',0); + if(nameFile.isNull())return FALSE; + if(String(nameFile.operator[](0))==String("@")) + { + nameFile=nameFile.substr(1); + listLoad(nameFile,itemStrings); + for(int itemIndex=0;itemIndex &listStrings) +{ + String lineString; + + listStrings.remove(); + FileHandle readFile(listFile,FileHandle::Read,FileHandle::ShareRead,FileHandle::Open); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + while(readView.getLine(lineString))listStrings.insert(&lineString); + return listStrings.size(); +} + +WORD makeFileName(String &pathFileName) +{ + String tempString(pathFileName); + char *ptr; + + ptr=::strchr(tempString,'.'); + if(!ptr)return FALSE; + while(*ptr!='\\'&&*ptr!='/'&&*ptr!=':'&&ptr>=(char*)tempString)ptr--; + pathFileName=(++ptr); + return TRUE; +} + + + if(!receive(mAckConnectionResponseStrings))return FALSE; + + if(!serverEntry.serviceByName("telnet","tcp")) + { + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(serverEntry.port()); + } + else + { + if(!mGenericControl.openSocket())return FALSE; + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(htons(23)); + } + + + while(TRUE) + { + int listenResult(mGenericControl.listen()); + switch(listenResult) + { + default : + message("unknown code returned from ::listen(...)"); + break; + case 0 : + message("listen succeeded"); + break; + case WSANOTINITIALISED : + message("A successful WSAStartup must occur before using this function."); + break; + case WSAENETDOWN : + message("The Windows Sockets implementation has detected that the network subsystem has failed."); + break; + case WSAEADDRINUSE : + message("An attempt has been made to listen on an address in use."); + break; + case WSAEINPROGRESS : + message("A blocking Windows Sockets operation is in progress."); + break; + case WSAEINVAL : + message("The socket has not been bound with bind or is already connected."); + break; + case WSAEISCONN : + message("The socket is already connected."); + break; + case WSAEMFILE : + message("No more file descriptors are available."); + break; + case WSAENOBUFS : + message("No buffer space is available."); + break; + case WSAENOTSOCK : + message("The descriptor is not a socket."); + break; + case WSAEOPNOTSUPP : + message("The referenced socket is not of a type that supports the listen operation."); + break; + } + + +// InternetAddress inetAddress(0,0,0,0); +// INETSocketAddress::port(htons(IPPORT_RESERVED)); +// INETSocketAddress::internetAddress(inetAddress); + + + + + while(TRUE) + { + char charData; + portControl.receive(charData); + String strVal; + ::sprintf(strVal,"received :%lx",(int)charData); + mWinConsole.writeLine(strVal); + if(charData==0x0D||charData==0x0A)break; + else portControl.send(charData); + } + + + mTelnetControl.send(0); + mTelnetControl.send("embuscar",FALSE); + mTelnetControl.send(0); + mTelnetControl.send("analqa1",FALSE); + mTelnetControl.send(0); + mTelnetControl.send("vt100/9600",FALSE); + mTelnetControl.send(0); + mTelnetControl.receive(charByte); + + + Block lineData; +// mTelnetControl.send("ls"); + mTelnetControl.receive(lineData); + + +// if(!serverEntry.serviceByName("telnet","tcp")) +// { +// if(!mTelnetControl.openSocket())return FALSE; +// INETSocketAddress::family(PF_INET); +// INETSocketAddress::port(serverEntry.port()); +// } +// else +// { + + if(mTelnetControl.receive(charByte)) + { + charStr+=charByte; + while(mTelnetControl.receive(charByte,FALSE)) + { + charStr+=charByte; + } + } + +// mTelnetControl.receive(charByte); +// mTelnetControl.receive(charByte); + + + + + enum TelnetCode{TOTXBINARY,TOECHO,TONOGA,TOTERMTYPE}; + + + +// telnetPacket< + +SMTPServer::~SMTPServer() +{ +} + +BOOL SMTPServer::stringHandler(const String &stringData) +{ + BOOL returnCode(TRUE); + + if(stringData.isNull())return FALSE; + if(stringData==String("QUIT"))returnCode=quitHandler(stringData); + else if(stringData==String("DATA"))returnCode=dataHandler(stringData); + else if(stringData==String("RSET"))returnCode=resetHandler(stringData); + else if(stringData.betweenString(0,' ')==String("HELO"))returnCode=heloHandler(stringData); + else if(stringData.betweenString(0,' ')==String("MAIL"))returnCode=mailHandler(stringData); + else if(stringData.betweenString(0,' ')==String("RCPT"))returnCode=rcptHandler(stringData); + else if(stringData.betweenString(0,' ')==String("VRFY"))returnCode=verifyHandler(stringData); + else if(stringData.betweenString(0,' ')==String("EXPN"))returnCode=expandHandler(stringData); + else if(stringData.betweenString(0,' ')==String("SEND"))returnCode=sendHandler(stringData); + else if(stringData.betweenString(0,' ')==String("SOML"))returnCode=sendOrMailHandler(stringData); + else if(stringData.betweenString(0,' ')==String("SAML"))returnCode=sendAndMailHandler(stringData); + else if(stringData.betweenString(0,' ')==String("HELP"))returnCode=helpHandler(stringData); + else invalidHandler(stringData); + return returnCode; +} + +void SMTPServer::acceptHandler(void) +{ + message("220 Connection accepted"); + send("220 SMTP Test Environment is now active."); +} + +BOOL SMTPServer::heloHandler(const String &stringData) +{ + send(String("250 ")+stringData+String(" pleased to meet you.")); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::quitHandler(const String &stringData) +{ + send("221 QUIT was received"); + message(String("received(")+stringData+String(")")); + return FALSE; +} + +BOOL SMTPServer::mailHandler(const String &stringData) +{ + send("250 MAIL was received"); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::rcptHandler(const String &stringData) +{ + send("250 RCPT was received"); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::dataHandler(const String &stringData) +{ + Block mailData; + String mailLine; + + send("354 DATA was received"); + message(String("Received(")+stringData+String(")")); + while(TRUE) + { + receive(mailLine); + if(mailLine==String("."))break; + mailData.insert(&mailLine); + } + send("250 received mail data"); + message(String("mail data follows...")); + message(mailData); + return TRUE; +} + +BOOL SMTPServer::verifyHandler(const String &stringData) +{ + send(String("250 VRFY <")+stringData+String(">")); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::sendHandler(const String &stringData) +{ + send(String("250 SEND <")+stringData+String(">")); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::expandHandler(const String &stringData) +{ + send(String("250 EXPN <")+stringData+String(">")); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::sendOrMailHandler(const String &stringData) +{ + send(String("250 SOML <")+stringData+String(">")); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::sendAndMailHandler(const String &stringData) +{ + send(String("250 SAML <")+stringData+String(">")); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::resetHandler(const String &stringData) +{ + send("250 RSET "); + message(String("received(RSET)")); + return TRUE; +} + +BOOL SMTPServer::helpHandler(const String &stringData) +{ + send("211 help"); + message(String("received(")+stringData+String(")")); + return TRUE; +} + +BOOL SMTPServer::invalidHandler(const String &stringData) +{ + send("500 unhandled command"); + message(String("received(")+stringData+String(")")); + return TRUE; +} + diff --git a/listen/SMTPSRV.HPP b/listen/SMTPSRV.HPP new file mode 100644 index 0000000..0378cf5 --- /dev/null +++ b/listen/SMTPSRV.HPP @@ -0,0 +1,35 @@ +#ifndef _LISTEN_SMTPSERVER_HPP_ +#define _LISTEN_SMTPSERVER_HPP_ +#ifndef _LISTEN_GENERICSERVER_HPP_ +#include +#endif + +class SMTPServer : public GenericServer +{ +public: + SMTPServer(void); + virtual ~SMTPServer(); +protected: + virtual void acceptHandler(void); + virtual BOOL stringHandler(const String &stringData); +private: + BOOL heloHandler(const String &stringData); + BOOL quitHandler(const String &stringData); + BOOL mailHandler(const String &stringData); + BOOL rcptHandler(const String &stringData); + BOOL dataHandler(const String &stringData); + BOOL verifyHandler(const String &stringData); + BOOL expandHandler(const String &stringData); + BOOL sendHandler(const String &stringData); + BOOL invalidHandler(const String &stringData); + BOOL sendOrMailHandler(const String &stringData); + BOOL sendAndMailHandler(const String &stringData); + BOOL resetHandler(const String &stringData); + BOOL helpHandler(const String &stringData); +}; + +inline +SMTPServer::SMTPServer(void) +{ +} +#endif \ No newline at end of file diff --git a/logfile/LOGFILE.CPP b/logfile/LOGFILE.CPP new file mode 100644 index 0000000..8272a3c --- /dev/null +++ b/logfile/LOGFILE.CPP @@ -0,0 +1,82 @@ +#include + +LogFile::LogFile(const String &strLogName) +: mFileMap(strLogName,0,1000000), mFileView(mFileMap), mIOEvent("IOPUTEVENT",FALSE), + mIOAckEvent("IOACKEVENT",FALSE), mMutex("IOENTERREQUEST",FALSE), mIsAckPending(FALSE) +{ + mLogFile.open("APISPY.LOG", + FileIO::GenericWrite, + FileIO::FileShareRead, + FileIO::CreateAlways, + FileIO::Normal); +} + +LogFile::~LogFile() +{ +} + +BOOL LogFile::write(const String &strLine) +{ + mLogFile.writeLine(strLine); + mIOAckEvent.waitEvent(); + mIOAckEvent.resetEvent(); + mMutex.requestMutex(); + mFileView.rewind(); + mFileView.writeLine(strLine); + mMutex.releaseMutex(); + mIOEvent.setEvent(); + return TRUE; +} + +BOOL LogFile::write(Block &strLines) +{ + mIOAckEvent.waitEvent(); + mIOAckEvent.resetEvent(); + mMutex.requestMutex(); + mFileView.rewind(); + for(int lineIndex=0;lineIndex &strLines) +{ + String strLine; + + strLines.remove(); + mIOEvent.waitEvent(); + mMutex.requestMutex(); + mIOEvent.resetEvent(); + mFileView.rewind(); + while(mFileView.getLine(strLine)&&!strLine.isNull())strLines.insert(&strLine); + mMutex.releaseMutex(); + mIOAckEvent.setEvent(); + return TRUE; +} + +void LogFile::synchronize(void) +{ + mIOAckEvent.setEvent(); +} + +void LogFile::log(const String &msg) +{ + ::OutputDebugString((String&)msg+String("\n")); +} diff --git a/logfile/LOGFILE.HPP b/logfile/LOGFILE.HPP new file mode 100644 index 0000000..51953f9 --- /dev/null +++ b/logfile/LOGFILE.HPP @@ -0,0 +1,47 @@ +#ifndef _LOGFILE_LOGFILE_HPP_ +#define _LOGFILE_LOGFILE_HPP_ +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _COMMON_FILEMAP_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif +#ifndef _FILEIO_FILEIO_HPP_ +#include +#endif + +class LogFile +{ +public: + LogFile(const String &strLogName=String("LOGFILE")); + virtual ~LogFile(); + BOOL writeLine(const String &strLine); + BOOL write(const String &strLine); + BOOL write(Block &strLines); + BOOL read(String &strLine); + BOOL read(Block &strLines); + void synchronize(void); +private: + void log(const String &msg); + + FileMap mFileMap; + PureViewOfFile mFileView; + Event mIOEvent; + Event mIOAckEvent; + Mutex mMutex; + BOOL mIsAckPending; + FileIO mLogFile; +}; + +inline +BOOL LogFile::writeLine(const String &strLine) +{ + return write(strLine); +} +#endif diff --git a/logfile/LOGFILE.MAK b/logfile/LOGFILE.MAK new file mode 100644 index 0000000..ffde483 --- /dev/null +++ b/logfile/LOGFILE.MAK @@ -0,0 +1,219 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=logfile - Win32 Debug +!MESSAGE No configuration specified. Defaulting to logfile - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "logfile - Win32 Release" && "$(CFG)" !=\ + "logfile - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "logfile.mak" CFG="logfile - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "logfile - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "logfile - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "logfile - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "logfile - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\logfile.lib" + +CLEAN : + -@erase "$(INTDIR)\logfile.obj" + -@erase "$(OUTDIR)\logfile.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/logfile.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/logfile.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/logfile.lib" +LIB32_OBJS= \ + "$(INTDIR)\logfile.obj" + +"$(OUTDIR)\logfile.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "logfile - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\logfile.lib" + +CLEAN : + -@erase "$(INTDIR)\logfile.obj" + -@erase "..\exe\logfile.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/logfile.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/logfile.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\logfile.lib" +LIB32_FLAGS=/nologo /out:"..\exe\logfile.lib" +LIB32_OBJS= \ + "$(INTDIR)\logfile.obj" + +"..\exe\logfile.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "logfile - Win32 Release" +# Name "logfile - Win32 Debug" + +!IF "$(CFG)" == "logfile - Win32 Release" + +!ELSEIF "$(CFG)" == "logfile - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\logfile.cpp + +!IF "$(CFG)" == "logfile - Win32 Release" + +DEP_CPP_LOGFI=\ + {$(INCLUDE)}"\.\logfile.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\fileio\fileio.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + + +"$(INTDIR)\logfile.obj" : $(SOURCE) $(DEP_CPP_LOGFI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "logfile - Win32 Debug" + +DEP_CPP_LOGFI=\ + {$(INCLUDE)}"\.\logfile.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\fileio\fileio.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + + +"$(INTDIR)\logfile.obj" : $(SOURCE) $(DEP_CPP_LOGFI) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/logfile/LOGFILE.MDP b/logfile/LOGFILE.MDP new file mode 100644 index 0000000..e45833d Binary files /dev/null and b/logfile/LOGFILE.MDP differ diff --git a/m68hc11/BLANK.BMP b/m68hc11/BLANK.BMP new file mode 100644 index 0000000..8b8797d Binary files /dev/null and b/m68hc11/BLANK.BMP differ diff --git a/m68hc11/CMPDlg.cpp b/m68hc11/CMPDlg.cpp new file mode 100644 index 0000000..033f4b5 --- /dev/null +++ b/m68hc11/CMPDlg.cpp @@ -0,0 +1,136 @@ +#include +#include +#include +#include + +CMPDlg::CMPDlg(void) +{ + mInitHandler.setCallback(this,&CMPDlg::initHandler); + mCreateHandler.setCallback(this,&CMPDlg::createHandler); + mCloseHandler.setCallback(this,&CMPDlg::closeHandler); + mDestroyHandler.setCallback(this,&CMPDlg::destroyHandler); + mCommandHandler.setCallback(this,&CMPDlg::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +CMPDlg::CMPDlg(const CMPDlg &someCMPDlg) +{ // private implementation + *this=someCMPDlg; +} + +CMPDlg::~CMPDlg() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +CMPDlg &CMPDlg::operator=(const CMPDlg &someCMPDlg) +{ // private implementation + return *this; +} + +bool CMPDlg::perform(GUIWindow &parentWindow) +{ + return ::DialogBoxParam(processInstance(),(LPSTR)"CMPDLG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType CMPDlg::initHandler(CallbackData &someCallbackData) +{ + setItems(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType CMPDlg::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType CMPDlg::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType CMPDlg::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType CMPDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + case CMPDLG_CANCEL : + handleCancel(); + break; + case CMPDLG_OK : + handleOk(); + break; + case CMPDLG_LIST : + handleList(someCallbackData); + break; + case CMPDLG_BROWSE : + handleBrowse(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void CMPDlg::handleCancel(void) +{ + endDialog(false); +} + +void CMPDlg::handleOk(void) +{ + getItems(); + endDialog(true); +} + +void CMPDlg::handleList(CallbackData &cbData) +{ + DWORD current; + + switch(cbData.wmCommandCommand()) + { + case LBN_DBLCLK : + current=sendMessage(CMPDLG_LIST,LB_GETCURSEL,0,0L); + sendMessage(CMPDLG_LIST,LB_DELETESTRING,current,0L); + break; + } +} + +void CMPDlg::handleBrowse() +{ + String strDirectory; + OpenDirectory openDirectory; + if(!openDirectory.getOpenDirectory(*this,"Choose Folder",".",strDirectory))return; + sendMessage(CMPDLG_LIST,LB_INSERTSTRING,-1,(LPARAM)(LPCSTR)strDirectory); +} + +void CMPDlg::getItems(void) +{ + String strItem; + DWORD count; + + mIncludePath.remove(); + count=sendMessage(CMPDLG_LIST,LB_GETCOUNT,0,0L); + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class CMPDlg : public DWindow +{ +public: + CMPDlg(void); + virtual ~CMPDlg(); + bool perform(GUIWindow &parentWindow); + void setIncludePath(Block &includePath); + void getIncludePath(Block &includePath); +private: + CMPDlg(const CMPDlg &someCMPDlg); + CMPDlg &operator=(const CMPDlg &someCMPDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleCancel(void); + void handleOk(void); + void handleList(CallbackData &cbData); + void handleBrowse(void); + void getItems(void); + void setItems(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Block mIncludePath; +}; + +inline +void CMPDlg::setIncludePath(Block &includePath) +{ + mIncludePath=includePath; +} + +inline +void CMPDlg::getIncludePath(Block &includePath) +{ + includePath=mIncludePath; +} +#endif diff --git a/m68hc11/COMMCTRL.HPP b/m68hc11/COMMCTRL.HPP new file mode 100644 index 0000000..01e8d70 --- /dev/null +++ b/m68hc11/COMMCTRL.HPP @@ -0,0 +1,228 @@ +#ifndef _COMMON_COMMCONTROL_HPP_ +#define _COMMON_COMMCONTROL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_ +#include +#endif +#ifndef _M68HC11_COMMSTATUS_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif + +class CommControl +{ +public: + enum {TimeOut=5000}; + enum Port{PortCOM1,PortCOM2,PortCOM3,PortCOM4}; + enum EventMask{EventBreak=EV_BREAK,EventCts=EV_CTS,EventDsr=EV_DSR,EventErr=EV_ERR,EventRing=EV_RING, + EventRlsd=EV_RLSD,EventRxChar=EV_RXCHAR,EventRxFlag=EV_RXFLAG,EventTxEmpty=EV_TXEMPTY, + EventAll=EV_BREAK|EV_CTS|EV_DSR|EV_ERR|EV_RING|EV_RLSD|EV_RXCHAR|EV_RXFLAG|EV_TXEMPTY}; + CommControl(void); + virtual ~CommControl(); + bool open(Port commPort,BOOL overlappedIO=false); + void close(); + bool getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const; + bool setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const; + bool setDeviceControlBlock(String strControlBlock)const; // (ie) "baud=1200 parity=N data=8 stop=1" + DWORD readLine(String &strLine); + DWORD writeLine(const String &strLine)const; + DWORD read(void *pBuffer,int length,DWORD timeout=0L); + DWORD write(BYTE *pBuffer,int length)const; + DWORD write(GlobalData &sndBuffer); + DWORD enumerateDevices(Block &deviceList); + DWORD enumerateDevices(Block &deviceList); + bool clearError(void)const; + bool clearError(CommStatus &commStatus)const; + bool clearBreak(void)const; + bool clearReceiveQueue(void); + bool readFully(GlobalData &dataBytes); + bool readFully(BYTE *pBuffer,DWORD byteCount); + bool setBreak(void)const; + bool waitEvent(DWORD &eventMask,DWORD timeout); + bool waitEvent(DWORD timeout=TimeOut); + bool waitForBreak(DWORD timeout=TimeOut); + bool waitForData(DWORD timeout=TimeOut); + bool waitForTransmit(DWORD timeout=TimeOut); + bool setEventMask(DWORD eventMask)const; + bool hasData(void); + bool isOkay(void)const; + static void portToString(CommControl::Port port,String &strPort); + static CommControl::Port stringToPort(const String &strPort); + static void showBytes(GlobalData rcvBytes); + static void showBytes(BYTE *pBuffer,DWORD byteCount); +private: + CommControl(const CommControl &someCommControl); + CommControl &operator=(const CommControl &someCommControl); + void showError(DWORD errorMask)const; + + FileHandle mCommDevice; + Block mStrPorts; + CommStatus mCommStatus; + Event mIOEvent; + Overlapped mOverlapped; +}; + +inline +CommControl::CommControl(void) +{ + mOverlapped.event((HANDLE)mIOEvent); + mStrPorts.insert(&String("\\.\\COM1")); + mStrPorts.insert(&String("\\.\\COM2")); + mStrPorts.insert(&String("\\.\\COM3")); + mStrPorts.insert(&String("\\.\\COM4")); +} + +inline +CommControl::CommControl(const CommControl &someCommControl) +{ // private implementation + *this=someCommControl; +} + +inline +CommControl::~CommControl() +{ + close(); +} + +inline +CommControl &CommControl::operator=(const CommControl &/*someCommControl*/) +{ // private implementation + return *this; +} + +inline +bool CommControl::open(Port commPort,BOOL overlappedIO) +{ + close(); + mCommDevice.open(mStrPorts[commPort],FileHandle::ReadWrite,FileHandle::ShareNone,FileHandle::Open,(overlappedIO?FileHandle::FlagOverlapped:FileHandle::Normal)); + return isOkay(); +} + +inline +void CommControl::close(void) +{ + if(!isOkay())return; + mCommDevice.close(); +} + +inline +DWORD CommControl::readLine(String &strLine) +{ + strLine.reserve(1024); + if(!isOkay())return FALSE; + clearError(mCommStatus); + if(!mCommStatus.bytesInReceiveQueue())return FALSE; + return mCommDevice.getLine(strLine); +} + +inline +DWORD CommControl::writeLine(const String &strLine)const +{ + if(!isOkay()||strLine.isNull())return FALSE; + return mCommDevice.writeLine(strLine); +} + +inline +DWORD CommControl::write(GlobalData &sndBuffer) +{ + if(!isOkay()||!sndBuffer.size())return 0; + return write(&sndBuffer[0],sndBuffer.size()); +} + +inline +DWORD CommControl::write(BYTE *pBuffer,int length)const +{ + if(!isOkay()||!pBuffer||!length)return 0; + return mCommDevice.write(pBuffer,length); +} + +inline +bool CommControl::setBreak(void)const +{ + if(!isOkay())return false; + return ::SetCommBreak((HANDLE)mCommDevice); +} + +inline +bool CommControl::clearBreak(void)const +{ + if(!isOkay())return false; + return ::ClearCommBreak((HANDLE)mCommDevice); +} + +inline +bool CommControl::getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const +{ + if(!isOkay())return false; + return ::GetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB()); +} + +inline +bool CommControl::setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const +{ + if(!isOkay())return false; + return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB()); +} + +inline +bool CommControl::setDeviceControlBlock(String strControlBlock)const // (ie) "baud=1200 parity=N data=8 stop=1" +{ + DeviceControlBlock deviceControlBlock; + if(!::BuildCommDCB(strControlBlock.str(),&((DeviceControlBlock&)deviceControlBlock).getDCB()))return false; + return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB()); +} + +inline +bool CommControl::setEventMask(DWORD eventMask)const +{ + if(!isOkay())return false; + return ::SetCommMask((HANDLE)mCommDevice,eventMask); +} + +inline +bool CommControl::waitEvent(DWORD timeout) +{ + DWORD eventMask; + return waitEvent(eventMask,timeout); +} + +inline +bool CommControl::waitForBreak(DWORD timeout) +{ + if(!isOkay())return false; + setEventMask(EventBreak); + return waitEvent(timeout); +} + +inline +bool CommControl::waitForData(DWORD timeout) +{ + if(!isOkay())return false; + setEventMask(EventRxChar); + return waitEvent(timeout); +} + +inline +bool CommControl::waitForTransmit(DWORD timeout) +{ + if(!isOkay())return false; + setEventMask(EventTxEmpty); + return waitEvent(timeout); +} +#endif diff --git a/m68hc11/COMMSTAT.HPP b/m68hc11/COMMSTAT.HPP new file mode 100644 index 0000000..9ec3e3f --- /dev/null +++ b/m68hc11/COMMSTAT.HPP @@ -0,0 +1,213 @@ +#ifndef _M68HC11_COMMSTATUS_HPP_ +#define _M68HC11_COMMSTATUS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class CommStatus : private _COMSTAT +{ +public: + CommStatus(void); + CommStatus(const CommStatus &someCommStatus); + virtual ~CommStatus(); + CommStatus &operator=(const CommStatus &someCommStatus); + BOOL operator==(const CommStatus &someCommStatus)const; + BOOL waitingForCts(void)const; + BOOL waitingForDsr(void)const; + BOOL waitingForRlsd(void)const; + BOOL waitingRcvdXOff(void)const; + BOOL waitingSentXOff(void)const; + BOOL waitingRcvdEof(void)const; + BOOL waitingForTx(void)const; + DWORD bytesInReceiveQueue(void)const; + DWORD bytesInSendQueue(void)const; + _COMSTAT &getCOMSTAT(void); +private: + void waitingForCts(BOOL waitingForCts); + void waitingForDsr(BOOL waitingForDsr); + void waitingForRlsd(BOOL waitingForRlsd); + void waitingRcvdXOff(BOOL waitingRcvdXOff); + void waitingSentXOff(BOOL waitingSentXOff); + void waitingRcvdEof(BOOL waitingRcvdEof); + void waitingForTx(BOOL waitingForTx); + void bytesInReceiveQueue(DWORD bytesInReceiveQueue); + void bytesInSendQueue(DWORD bytesInSendQueue); + void setZero(void); +}; + +inline +CommStatus::CommStatus(void) +{ + setZero(); +} + +inline +CommStatus::CommStatus(const CommStatus &someCommStatus) +{ + *this=someCommStatus; +} + +inline +CommStatus::~CommStatus() +{ +} + +inline +CommStatus &CommStatus::operator=(const CommStatus &someCommStatus) +{ + waitingForCts(someCommStatus.waitingForCts()); + waitingForDsr(someCommStatus.waitingForDsr()); + waitingForRlsd(someCommStatus.waitingForRlsd()); + waitingRcvdXOff(someCommStatus.waitingRcvdXOff()); + waitingSentXOff(someCommStatus.waitingSentXOff()); + waitingRcvdEof(someCommStatus.waitingRcvdEof()); + waitingForTx(someCommStatus.waitingForTx()); + bytesInReceiveQueue(someCommStatus.bytesInReceiveQueue()); + bytesInSendQueue(someCommStatus.bytesInSendQueue()); + return *this; +} + +inline +BOOL CommStatus::operator==(const CommStatus &someCommStatus)const +{ + return (waitingForCts()==someCommStatus.waitingForCts()&& + waitingForDsr()==someCommStatus.waitingForDsr()&& + waitingForRlsd()==someCommStatus.waitingForRlsd()&& + waitingRcvdXOff()==someCommStatus.waitingRcvdXOff()&& + waitingSentXOff()==someCommStatus.waitingSentXOff()&& + waitingRcvdEof()==someCommStatus.waitingRcvdEof()&& + waitingForTx()==someCommStatus.waitingForTx()&& + bytesInReceiveQueue()==someCommStatus.bytesInReceiveQueue()&& + bytesInSendQueue()==someCommStatus.bytesInSendQueue()); +} + +inline +BOOL CommStatus::waitingForCts(void)const +{ + return _COMSTAT::fCtsHold; +} + +inline +void CommStatus::waitingForCts(BOOL waitingForCts) +{ + _COMSTAT::fCtsHold=waitingForCts; +} + +inline +BOOL CommStatus::waitingForDsr(void)const +{ + return _COMSTAT::fDsrHold; +} + +inline +void CommStatus::waitingForDsr(BOOL waitingForDsr) +{ + _COMSTAT::fDsrHold=waitingForDsr; +} + +inline +BOOL CommStatus::waitingForRlsd(void)const +{ + return _COMSTAT::fRlsdHold; +} + +inline +void CommStatus::waitingForRlsd(BOOL waitingForRlsd) +{ + _COMSTAT::fRlsdHold=waitingForRlsd; +} + +inline +BOOL CommStatus::waitingRcvdXOff(void)const +{ + return _COMSTAT::fXoffHold; +} + +inline +void CommStatus::waitingRcvdXOff(BOOL waitingRcvdXOff) +{ + _COMSTAT::fXoffHold=waitingRcvdXOff; +} + +inline +BOOL CommStatus::waitingSentXOff(void)const +{ + return _COMSTAT::fXoffSent; +} + +inline +void CommStatus::waitingSentXOff(BOOL waitingSentXOff) +{ + _COMSTAT::fXoffSent=waitingSentXOff; +} + +inline +BOOL CommStatus::waitingRcvdEof(void)const +{ + return _COMSTAT::fEof; +} + +inline +void CommStatus::waitingRcvdEof(BOOL waitingRcvdEof) +{ + _COMSTAT::fEof=waitingRcvdEof; + +} + +inline +BOOL CommStatus::waitingForTx(void)const +{ + return _COMSTAT::fTxim; +} + +inline +void CommStatus::waitingForTx(BOOL waitingForTx) +{ + _COMSTAT::fTxim=waitingForTx; +} + +inline +DWORD CommStatus::bytesInReceiveQueue(void)const +{ + return _COMSTAT::cbInQue; +} + +inline +void CommStatus::bytesInReceiveQueue(DWORD bytesInReceiveQueue) +{ + _COMSTAT::cbInQue=bytesInReceiveQueue; +} + +inline +DWORD CommStatus::bytesInSendQueue(void)const +{ + return _COMSTAT::cbOutQue; +} + +inline +void CommStatus::bytesInSendQueue(DWORD bytesInSendQueue) +{ + _COMSTAT::cbOutQue=bytesInSendQueue; +} + +inline +_COMSTAT &CommStatus::getCOMSTAT(void) +{ + return *this; +} + +inline +void CommStatus::setZero(void) +{ + _COMSTAT::fCtsHold=0; + _COMSTAT::fDsrHold=0; + _COMSTAT::fRlsdHold=0; + _COMSTAT::fXoffHold=0; + _COMSTAT::fXoffSent=0; + _COMSTAT::fEof=0; + _COMSTAT::fTxim=0; + _COMSTAT::fReserved=0; + _COMSTAT::cbInQue=0; + _COMSTAT::cbOutQue=0; +} +#endif \ No newline at end of file diff --git a/m68hc11/DASH.BMP b/m68hc11/DASH.BMP new file mode 100644 index 0000000..245d691 Binary files /dev/null and b/m68hc11/DASH.BMP differ diff --git a/m68hc11/DCB.CPP b/m68hc11/DCB.CPP new file mode 100644 index 0000000..a5a4540 --- /dev/null +++ b/m68hc11/DCB.CPP @@ -0,0 +1,318 @@ +#include + +DeviceControlBlock::DeviceControlBlock(void) +{ + setZero(); +} + +DeviceControlBlock::DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock) +{ + *this=someDeviceControlBlock; +} + +DeviceControlBlock::~DeviceControlBlock() +{ +} + +DeviceControlBlock &DeviceControlBlock::operator=(const DeviceControlBlock &someDeviceControlBlock) +{ + baudRate(someDeviceControlBlock.baudRate()); + binaryEnabled(someDeviceControlBlock.binaryEnabled()); + enableParity(someDeviceControlBlock.enableParity()); + ctsFlowControlOutMonitor(someDeviceControlBlock.ctsFlowControlOutMonitor()); + dsrFlowControlOutMonitor(someDeviceControlBlock.dsrFlowControlOutMonitor()); + dtrControl(someDeviceControlBlock.dtrControl()); + dsrSensitivityEnable(someDeviceControlBlock.dsrSensitivityEnable()); + continueOnXOff(someDeviceControlBlock.continueOnXOff()); + xonXOffEnableTransmit(someDeviceControlBlock.xonXOffEnableTransmit()); + xonXOffEnableReceive(someDeviceControlBlock.xonXOffEnableReceive()); + errorCharEnable(someDeviceControlBlock.errorCharEnable()); + discardNullEnable(someDeviceControlBlock.discardNullEnable()); + rtsControl(someDeviceControlBlock.rtsControl()); + abortOnErrorEnable(someDeviceControlBlock.abortOnErrorEnable()); + xonLimit(someDeviceControlBlock.xonLimit()); + xoffLimit(someDeviceControlBlock.xoffLimit()); + dataBits(someDeviceControlBlock.dataBits()); + parity(someDeviceControlBlock.parity()); + stopBits(someDeviceControlBlock.stopBits()); + xonChar(someDeviceControlBlock.xonChar()); + xoffChar(someDeviceControlBlock.xoffChar()); + errorChar(someDeviceControlBlock.errorChar()); + eofChar(someDeviceControlBlock.eofChar()); + evtChar(someDeviceControlBlock.evtChar()); + return *this; +} + +BOOL DeviceControlBlock::operator==(const DeviceControlBlock &someDeviceControlBlock) +{ + return(baudRate()==someDeviceControlBlock.baudRate()&& + binaryEnabled()==someDeviceControlBlock.binaryEnabled()&& + enableParity()==someDeviceControlBlock.enableParity()&& + ctsFlowControlOutMonitor()==someDeviceControlBlock.ctsFlowControlOutMonitor()&& + dsrFlowControlOutMonitor()==someDeviceControlBlock.dsrFlowControlOutMonitor()&& + dtrControl()==someDeviceControlBlock.dtrControl()&& + dsrSensitivityEnable()==someDeviceControlBlock.dsrSensitivityEnable()&& + continueOnXOff()==someDeviceControlBlock.continueOnXOff()&& + xonXOffEnableTransmit()==someDeviceControlBlock.xonXOffEnableTransmit()&& + xonXOffEnableReceive()==someDeviceControlBlock.xonXOffEnableReceive()&& + errorCharEnable()==someDeviceControlBlock.errorCharEnable()&& + discardNullEnable()==someDeviceControlBlock.discardNullEnable()&& + rtsControl()==someDeviceControlBlock.rtsControl()&& + abortOnErrorEnable()==someDeviceControlBlock.abortOnErrorEnable()&& + xonLimit()==someDeviceControlBlock.xonLimit()&& + xoffLimit()==someDeviceControlBlock.xoffLimit()&& + dataBits()==someDeviceControlBlock.dataBits()&& + parity()==someDeviceControlBlock.parity()&& + stopBits()==someDeviceControlBlock.stopBits()&& + xonChar()==someDeviceControlBlock.xonChar()&& + xoffChar()==someDeviceControlBlock.xoffChar()&& + errorChar()==someDeviceControlBlock.errorChar()&& + eofChar()==someDeviceControlBlock.eofChar()&& + evtChar()==someDeviceControlBlock.evtChar()); +} + +DWORD DeviceControlBlock::baudRate(void)const +{ + return _DCB::BaudRate; +} + +void DeviceControlBlock::baudRate(DWORD baudRate) +{ + _DCB::BaudRate=baudRate; +} + +BOOL DeviceControlBlock::binaryEnabled(void)const +{ + return _DCB::fBinary; +} + +void DeviceControlBlock::binaryEnabled(BOOL binaryEnabled) +{ + _DCB::fBinary=binaryEnabled; +} + +BOOL DeviceControlBlock::enableParity(void)const +{ + return _DCB::fParity; +} + +void DeviceControlBlock::enableParity(BOOL parity) +{ + _DCB::fParity=parity; +} + +BOOL DeviceControlBlock::ctsFlowControlOutMonitor(void)const +{ + return _DCB::fOutxCtsFlow; +} + +void DeviceControlBlock::ctsFlowControlOutMonitor(BOOL ctsFlowControlOut) +{ + _DCB::fOutxCtsFlow=ctsFlowControlOut; +} + +BOOL DeviceControlBlock::dsrFlowControlOutMonitor(void)const +{ + return _DCB::fOutxDsrFlow; +} + +void DeviceControlBlock::dsrFlowControlOutMonitor(BOOL dsrFlowControlOut) +{ + _DCB::fOutxDsrFlow=dsrFlowControlOut; +} + +DeviceControlBlock::DtrControl DeviceControlBlock::dtrControl(void)const +{ + return DtrControl(_DCB::fDtrControl); +} + +void DeviceControlBlock::dtrControl(DtrControl dtrControl) +{ + _DCB::fDtrControl=(DWORD)dtrControl; +} + +BOOL DeviceControlBlock::dsrSensitivityEnable(void)const +{ + return _DCB::fDsrSensitivity; +} + +void DeviceControlBlock::dsrSensitivityEnable(BOOL dsrSensitivityEnable) +{ + _DCB::fDsrSensitivity=dsrSensitivityEnable; +} + +BOOL DeviceControlBlock::continueOnXOff(void)const +{ + return _DCB::fTXContinueOnXoff; +} + +void DeviceControlBlock::continueOnXOff(BOOL continueOnXOff) +{ + _DCB::fTXContinueOnXoff=continueOnXOff; +} + +BOOL DeviceControlBlock::xonXOffEnableTransmit(void)const +{ + return _DCB::fOutX; +} + +void DeviceControlBlock::xonXOffEnableTransmit(BOOL xonXOffEnable) +{ + _DCB::fOutX=xonXOffEnable; +} + +BOOL DeviceControlBlock::xonXOffEnableReceive(void)const +{ + return _DCB::fInX; +} + +void DeviceControlBlock::xonXOffEnableReceive(BOOL xonXOffEnable) +{ + _DCB::fInX=xonXOffEnable; +} + +BOOL DeviceControlBlock::errorCharEnable(void)const +{ + return _DCB::fErrorChar; +} + +void DeviceControlBlock::errorCharEnable(BOOL errorCharEnable) +{ + _DCB::fErrorChar=errorCharEnable; +} + +BOOL DeviceControlBlock::discardNullEnable(void)const +{ + return _DCB::fNull; +} + +void DeviceControlBlock::discardNullEnable(BOOL discardNullEnable) +{ + _DCB::fNull=discardNullEnable; +} + +DeviceControlBlock::RtsControl DeviceControlBlock::rtsControl(void)const +{ + return RtsControl(_DCB::fRtsControl); +} + +void DeviceControlBlock::rtsControl(RtsControl rtsControl) +{ + _DCB::fRtsControl=(DWORD)rtsControl; +} + +BOOL DeviceControlBlock::abortOnErrorEnable(void)const +{ + return _DCB::fAbortOnError; +} + +void DeviceControlBlock::abortOnErrorEnable(BOOL abortOnError) +{ + _DCB::fAbortOnError=abortOnError; +} + +WORD DeviceControlBlock::xonLimit(void)const +{ + return _DCB::XonLim; +} + +void DeviceControlBlock::xonLimit(WORD xonLimit) +{ + _DCB::XonLim=xonLimit; +} + +WORD DeviceControlBlock::xoffLimit(void)const +{ + return _DCB::XoffLim; +} + +void DeviceControlBlock::xoffLimit(WORD xoffLimit) +{ + _DCB::XoffLim=xoffLimit; +} + +BYTE DeviceControlBlock::dataBits(void)const +{ + return _DCB::ByteSize; +} + +void DeviceControlBlock::dataBits(BYTE dataBits) +{ + _DCB::ByteSize=dataBits; +} + +DeviceControlBlock::Parity DeviceControlBlock::parity(void)const +{ + return Parity(_DCB::Parity); +} + +void DeviceControlBlock::parity(Parity parity) +{ + _DCB::Parity=BYTE(parity); +} + +BYTE DeviceControlBlock::stopBits(void)const +{ + return _DCB::StopBits; +} + +void DeviceControlBlock::stopBits(BYTE stopBits) +{ + _DCB::StopBits=stopBits; +} + +char DeviceControlBlock::xonChar(void)const +{ + return _DCB::XonChar; +} + +void DeviceControlBlock::xonChar(char xonChar) +{ + _DCB::XonChar=xonChar; +} + +char DeviceControlBlock::xoffChar(void)const +{ + return _DCB::XoffChar; +} + +void DeviceControlBlock::xoffChar(char xoffChar) +{ + _DCB::XoffChar=xoffChar; +} + +char DeviceControlBlock::errorChar(void)const +{ + return _DCB::ErrorChar; +} + +void DeviceControlBlock::errorChar(char errorChar) +{ + _DCB::ErrorChar=errorChar; +} + +char DeviceControlBlock::eofChar(void)const +{ + return _DCB::EofChar; +} + +void DeviceControlBlock::eofChar(char eofChar) +{ + _DCB::EofChar; +} + +char DeviceControlBlock::evtChar(void)const +{ + return _DCB::EvtChar; +} + +void DeviceControlBlock::evtChar(char evtChar) +{ + _DCB::EvtChar=evtChar; +} + +void DeviceControlBlock::setZero(void) +{ + ::memset(&(_DCB&)*this,0,sizeof(_DCB)); + _DCB::DCBlength=sizeof(_DCB); +} diff --git a/m68hc11/DCB.HPP b/m68hc11/DCB.HPP new file mode 100644 index 0000000..72f4a47 --- /dev/null +++ b/m68hc11/DCB.HPP @@ -0,0 +1,79 @@ +#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_ +#define _M68HC11_DEVICECONTROLBLOCK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STDLIB_HPP_ +#include +#endif + +class DeviceControlBlock : private _DCB +{ +public: + enum DtrControl{DtrControlDisable=DTR_CONTROL_DISABLE,DtrControlEnable=DTR_CONTROL_ENABLE,DtrControlHandshake=DTR_CONTROL_HANDSHAKE}; + enum RtsControl{RtsControlDisable=RTS_CONTROL_DISABLE,RtsControlEnable=RTS_CONTROL_ENABLE,RtsControlHandshake=RTS_CONTROL_HANDSHAKE,RtsControlToggle=RTS_CONTROL_TOGGLE}; + enum Parity{ParityNone,ParityOdd,ParityEven,ParityMark}; + DeviceControlBlock(void); + DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock); + virtual ~DeviceControlBlock(); + DeviceControlBlock &operator=(const DeviceControlBlock &someDeviceControlBlock); + BOOL operator==(const DeviceControlBlock &someDeviceControlBlock); + DWORD baudRate(void)const; + void baudRate(DWORD baudRate); + BOOL binaryEnabled(void)const; + void binaryEnabled(BOOL binaryEnabled); + BOOL enableParity(void)const; + void enableParity(BOOL parity); + BOOL ctsFlowControlOutMonitor(void)const; + void ctsFlowControlOutMonitor(BOOL ctsFlowControlOut); + BOOL dsrFlowControlOutMonitor(void)const; + void dsrFlowControlOutMonitor(BOOL dsrFlowControlOut); + DtrControl dtrControl(void)const; + void dtrControl(DtrControl dtrControl); + BOOL dsrSensitivityEnable(void)const; + void dsrSensitivityEnable(BOOL dsrSensitivityEnable); + BOOL continueOnXOff(void)const; + void continueOnXOff(BOOL continueOnXOff); + BOOL xonXOffEnableTransmit(void)const; + void xonXOffEnableTransmit(BOOL xonXOffEnable); + BOOL xonXOffEnableReceive(void)const; + void xonXOffEnableReceive(BOOL xonXOffEnable); + BOOL errorCharEnable(void)const; + void errorCharEnable(BOOL errorCharEnable); + BOOL discardNullEnable(void)const; + void discardNullEnable(BOOL discardNullEnable); + RtsControl rtsControl(void)const; + void rtsControl(RtsControl rtsControl); + BOOL abortOnErrorEnable(void)const; + void abortOnErrorEnable(BOOL abortOnError); + WORD xonLimit(void)const; + void xonLimit(WORD xonLimit); + WORD xoffLimit(void)const; + void xoffLimit(WORD xoffLimit); + BYTE dataBits(void)const; + void dataBits(BYTE dataBits); + Parity parity(void)const; + void parity(Parity parity); + BYTE stopBits(void)const; + void stopBits(BYTE stopBits); + char xonChar(void)const; + void xonChar(char xonChar); + char xoffChar(void)const; + void xoffChar(char xoffChar); + char errorChar(void)const; + void errorChar(char errorChar); + char eofChar(void)const; + void eofChar(char eofChar); + char evtChar(void)const; + void evtChar(char evtChar); + _DCB &getDCB(void); +private: + void setZero(void); +}; + +inline +_DCB &DeviceControlBlock::getDCB(void) +{ + return *this; +} +#endif diff --git a/m68hc11/DOC.ICO b/m68hc11/DOC.ICO new file mode 100644 index 0000000..1258cf1 Binary files /dev/null and b/m68hc11/DOC.ICO differ diff --git a/m68hc11/Editfnd.cpp b/m68hc11/Editfnd.cpp new file mode 100644 index 0000000..d581549 --- /dev/null +++ b/m68hc11/Editfnd.cpp @@ -0,0 +1,51 @@ +#include + +EditFind::EditFind(void) +{ +} + +EditFind::~EditFind() +{ +} + +// virtuals + +void EditFind::init(void) +{ + CharRange searchRange; + + searchRange.posMin(0); + searchRange.posMax(0); + mFindTextEx.searchRange(searchRange); +} + +void EditFind::leaveEdit(const String &strText) +{ + findNext(); +} + +void EditFind::find(void) +{ + findNext(); +} + +void EditFind::findNext(void) +{ + String currText; + + getText(currText); + if(currText.isNull())return; + if(!(currText==lastSearchText()))lastFindIndex(-1); + mFindTextEx.strFind(currText); + if(!mFindTextEx.searchRange().posMin()&&!mFindTextEx.searchRange().posMax())mFindTextEx.searchRange(CharRange(0,-1)); + else + { + CharRange searchRange(mFindTextEx.foundRange()); + searchRange.posMin(searchRange.posMax()); + searchRange.posMax(-1); + mFindTextEx.searchRange(searchRange); + } +// mRichEditControl->setFocus(); + mRichEditControl->findText(mFindTextEx); +// setFocus(); +} diff --git a/m68hc11/Editfnd.hpp b/m68hc11/Editfnd.hpp new file mode 100644 index 0000000..be9e0fb --- /dev/null +++ b/m68hc11/Editfnd.hpp @@ -0,0 +1,35 @@ +#ifndef _M68HC11_EDITFIND_HPP_ +#define _M68HC11_EDITFIND_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_RICHEDIT_HPP_ +#include +#endif +#ifndef _M68HC11_FIND_HPP_ +#include +#endif + +class EditFind : private Find +{ +public: + EditFind(void); + virtual ~EditFind(); + void perform(GUIWindow &parentWindow,RichEditControl &richEditControl); +protected: + virtual void findNext(void); + virtual void init(void); + virtual void find(void); + virtual void leaveEdit(const String &strText); +private: + SmartPointer mRichEditControl; + FindTextEx mFindTextEx; +}; + +inline +void EditFind::perform(GUIWindow &parentWindow,RichEditControl &richEditControl) +{ + mRichEditControl=&richEditControl; + Find::perform(parentWindow); +} +#endif \ No newline at end of file diff --git a/m68hc11/Find.cpp b/m68hc11/Find.cpp new file mode 100644 index 0000000..c4ebf9b --- /dev/null +++ b/m68hc11/Find.cpp @@ -0,0 +1,192 @@ +#include +#include + +Find::Find(void) +: mLastFindIndex(-1) +{ + mKeyDownHandler.setCallback(this,&Find::keyDownHandler); + mDlgCodeHandler.setCallback(this,&Find::dlgCodeHandler); + mEditHook.insertHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); + mEditHook.insertHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); +} + +Find::Find(const Find &find) +{ // private implementation + *this=find; +} + +Find::~Find() +{ + mEditHook.removeHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); + mEditHook.removeHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); +} + +Find &Find::operator=(const Find &find) +{ // private implementation + return *this; +} + +void Find::perform(GUIWindow &parentWindow) +{ + create(parentWindow); +} + +void Find::create(GUIWindow &parentWindow) +{ + String staticName("STATIC"); + String editName("EDIT"); + String buttonName("BUTTON"); + + DialogTemplate dlgTemplate; + DialogItemTemplate staticFind; + DialogItemTemplate editFind; + DialogItemTemplate cancelButton; + DialogItemTemplate fnButton; + DialogItemTemplate wmButton; + + dlgTemplate.titleText("Find"); + dlgTemplate.posRect(Rect(10,73,236,62)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); // WS_POPUP + + staticFind.className(staticName); + staticFind.titleText("Fi&nd what:"); + staticFind.style(WS_CHILD|WS_VISIBLE); + staticFind.posRect(Rect(4,8,42,8)); + staticFind.itemID(-1); + + editFind.className(editName); + editFind.titleText(""); + editFind.style(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP|WS_GROUP); + editFind.posRect(Rect(47,7,128,12)); + editFind.itemID(FindText); + + fnButton.className(buttonName); + fnButton.titleText("&Find Next"); + fnButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|BS_DEFPUSHBUTTON); + fnButton.posRect(Rect(182,5,50,14)); + fnButton.itemID(FindNext); + + wmButton.className(buttonName); + wmButton.titleText("Match &whole word only"); + wmButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX|WS_GROUP); + wmButton.posRect(Rect(4,26,100,12)); + wmButton.itemID(FindWhole); + + cancelButton.className(buttonName); + cancelButton.titleText("Cancel"); + cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP); + cancelButton.posRect(Rect(182,23,50,14)); + cancelButton.itemID(CancelFind); + + dlgTemplate+=staticFind; + dlgTemplate+=editFind; + dlgTemplate+=cancelButton; + dlgTemplate+=fnButton; + dlgTemplate+=wmButton; + createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog); +} + +CallbackData::ReturnType Find::keyDownHandler(CallbackData &someCallbackData) +{ + KeyData keyData(someCallbackData); + String strEditText; + + if(keyData.isEscapeKey())GUIWindow::postMessage(*this,WM_CLOSE,0,0L); + else if(keyData.isEnterKey()) + { + getText(strEditText); + leaveEdit(strEditText); + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType Find::dlgCodeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +WORD Find::dlgCommand(DWORD commandID,CallbackData &someCallbackData) +{ + switch(commandID) + { + case FindText : + break; + case FindNext : + handleFindNext(); + break; + case CancelFind : + destroy(); + break; + } + return FALSE; +} + +WORD Find::dlgCode(CallbackData &someCallbackData) +{ + return DLGC_WANTALLKEYS; +} + +BOOL Find::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + mEditHook.hookWin(getItem(FindText)); + init(); + return TRUE; +} + +void Find::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ + mEditHook.unhookWin(); + return; +} + +void Find::getText(String &strEditText) +{ + String strText; + + DynamicDialog::getText(FindText,strText); + strEditText=strText; +} + +BOOL Find::matchWholeWordOnly(void)const +{ + return ::SendMessage(getItem(FindWhole),BM_GETCHECK,0,0L); +} + +void Find::handleFind(void) +{ + find(); +} + +void Find::handleFindNext(void) +{ + findNext(); +} + +// virtuals + +void Find::init(void) +{ +} + +void Find::find(void) +{ + String currText; + + getText(currText); + lastSearchText(currText); +} + +void Find::findNext(void) +{ + String currText; + + getText(currText); + lastSearchText(currText); +} + +void Find::leaveEdit(const String &strEditText) +{ + lastSearchText(strEditText); +} diff --git a/m68hc11/Find.hpp b/m68hc11/Find.hpp new file mode 100644 index 0000000..4fc95aa --- /dev/null +++ b/m68hc11/Find.hpp @@ -0,0 +1,81 @@ +#ifndef _M68HC11_FIND_HPP_ +#define _M68HC11_FIND_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif + +class Find : private DynamicDialog +{ +public: + Find(void); + virtual ~Find(); + void perform(GUIWindow &parentWindow); + int lastFindIndex(void)const; + const String &lastSearchText(void)const; + void setFocus(void)const; +protected: + virtual void init(void); + virtual void find(void); + virtual void findNext(void); + virtual void leaveEdit(const String &strText); + void getText(String &strEditText); + void lastFindIndex(int lastFindIndex); + void lastSearchText(const String &lastSearchText); + BOOL matchWholeWordOnly(void)const; +private: + enum{FindText=101,CancelFind=IDCANCEL,FindNext=103,FindWhole=104}; + Find(const Find &find); + Find &operator=(const Find &find); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + void handleFind(void); + void handleFindNext(void); + void create(GUIWindow &parentWindow); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + WORD dlgCode(CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + + Callback mKeyDownHandler; + Callback mDlgCodeHandler; + String mLastSearchText; + int mLastFindIndex; + WinHookProc mEditHook; +}; + +inline +const String &Find::lastSearchText(void)const +{ + return mLastSearchText; +} + +inline +void Find::lastSearchText(const String &lastSearchText) +{ + mLastSearchText=lastSearchText; +} + +inline +void Find::lastFindIndex(int lastFindIndex) +{ + mLastFindIndex=lastFindIndex; +} + +inline +int Find::lastFindIndex(void)const +{ + return mLastFindIndex; +} + +inline +void Find::setFocus(void)const +{ + GUIWindow::setFocus(); +} +#endif diff --git a/m68hc11/HELP/M68HC11.FTS b/m68hc11/HELP/M68HC11.FTS new file mode 100644 index 0000000..85563a7 Binary files /dev/null and b/m68hc11/HELP/M68HC11.FTS differ diff --git a/m68hc11/HELP/M68HC11.HLP b/m68hc11/HELP/M68HC11.HLP new file mode 100644 index 0000000..60a2fa2 Binary files /dev/null and b/m68hc11/HELP/M68HC11.HLP differ diff --git a/m68hc11/HELP/M68HC11.HPJ b/m68hc11/HELP/M68HC11.HPJ new file mode 100644 index 0000000..f35b42f --- /dev/null +++ b/m68hc11/HELP/M68HC11.HPJ @@ -0,0 +1,15 @@ +[OPTIONS] + ERRORLOG = error.log + COMPRESS = No +[BUILDTAGS] + +[FILES] + M68HC11.RTF + +[BITMAPS] + +[ALIAS] +[CONFIG] + BrowseButtons() +[WINDOWS] +[BAGGAGE] diff --git a/m68hc11/HELP/M68HC11.HPS b/m68hc11/HELP/M68HC11.HPS new file mode 100644 index 0000000..62ac996 --- /dev/null +++ b/m68hc11/HELP/M68HC11.HPS @@ -0,0 +1,21 @@ +[OPTIONS] + COMPRESS = No + OLDKEYPHRASE = No + CONTEXTSENS = No + PASCALINCLUDE = No + PASCALINCLUDENAME = noname.inc + CINCLUDENAME = noname.h + HC30NAME = hc30.exe + HC31NAME = hc31.exe +[BUILDTAGS] + +[FILES] + C:\WORK\M68HC11\HELP\M68HC11.TPC + +[BITMAPS] + +[ALIAS] +[MAP] +[CONFIG] +[WINDOWS] +[BAGGAGE] diff --git a/m68hc11/HELP/M68HC11.RTF b/m68hc11/HELP/M68HC11.RTF new file mode 100644 index 0000000..e68f590 --- /dev/null +++ b/m68hc11/HELP/M68HC11.RTF @@ -0,0 +1,1244 @@ +{\rtf1\ansi \deff0 +{\fonttbl{\f0\froman Tms Rmn;}{\f1\fdecor Symbol;}{\f2\fswiss Helv;} +{\f3\fmodern Courier;\f4\fswiss MS Sans Serif;\f5\fswiss Helvitica;} +{\f6\fswiss Arial;\f7\fswiss Arial Super;\f8\fswiss MS Serif;} +{\f9\froman Times;\f10\froman Times New Roman;} +} +{\colortbl; + +\red0\green0\blue127; +\red0\green127\blue0; +\red0\green127\blue127; +\red127\green0\blue0; +\red127\green0\blue127; +\red127\green127\blue0; +\red127\green127\blue127; + +\red192\green192\blue192; +\red0\green0\blue255; +\red0\green255\blue0; +\red0\green255\blue255; +\red255\green0\blue0; +\red255\green0\blue255; +\red255\green255\blue0; +\red255\green255\blue255;} +\f2\fs20 +{#{\footnote # Introduction} +K{\footnote K introduction;contents} +${\footnote $ Introduction} ++{\footnote + General} +{\b \fs24 Introduction to M68HC11}\par\pard +\par\li360{{\uldb Instruction Set}{\v InstructionSet}}\par\pard +\li360{{\uldb Interrupt Vectors}{\v InterruptVectors}}\par\pard +}\page +{#{\footnote # InterruptVectors} +K{\footnote K Interrupt Vector} +${\footnote $ Interrupt Vectors} ++{\footnote + General} +{\b \fs24 M68HC11 Interrupt Vectors}\par\pard +\par\li240{Clock Monitor............. FFFC,FFFD}\par\pard +\li240{COP WatchDog.............. FFFA,FFFB}\par\pard +\li240{SWI....................... FFF6,FFF7}\par\pard +\li240{Timer (IC1F).............. FFEE,FFEF}\par\pard +\li240{Timer (IC2F).............. FFEC,FFED}\par\pard +\li240{Timer (IC3F).............. FFEA,FFEB}\par\pard +\li240{Timer (OC1F).............. FFE8,FFE9}\par\pard +\li240{Timer (OC2F).............. FFE6,FFE7}\par\pard +\li240{Timer (OC3F).............. FFE4,FFE5}\par\pard +\li240{Timer (OC4F).............. FFE2,FFE3}\par\pard +\li240{Timer (OC5F).............. FFE0,FFE1}\par\pard +\li240{Timer (TOF)............... FFDE,FFDD}\par\pard +\li240{Pulse Accumulator (PAOVF). FFDC,FFDD}\par\pard +\li240{Pulse Accumulator (PAII).. FFDA,FFDB}\par\pard +\par}\page +{#{\footnote # InstructionSet} +K{\footnote K Instruction Set} +${\footnote $ Instruction Set} ++{\footnote + General} +\par{\b \fs24 Instruction Set}\par\pard +\par\li240{{\uldb aba}{\v aba}}\par\pard +\li240{{\uldb abx}{\v abx}}\par\pard +\li240{{\uldb aby}{\v aby}}\par\pard +\li240{{\uldb adca}{\v adca}}\par\pard +\li240{{\uldb adcb}{\v adcb}}\par\pard +\li240{{\uldb adda}{\v adda}}\par\pard +\li240{{\uldb addb}{\v addb}}\par\pard +\li240{{\uldb addd}{\v addd}}\par\pard +\li240{{\uldb anda}{\v anda}}\par\pard +\li240{{\uldb andb}{\v andb}}\par\pard +\li240{{\uldb asl}{\v asl}}\par\pard +\li240{{\uldb asla}{\v asla}}\par\pard +\li240{{\uldb aslb}{\v aslb}}\par\pard +\li240{{\uldb asld}{\v asld}}\par\pard +\li240{{\uldb asr}{\v asr}}\par\pard +\li240{{\uldb asra}{\v asra}}\par\pard +\li240{{\uldb asrb}{\v asrb}}\par\pard +\li240{{\uldb bcc}{\v bcc}}\par\pard +\li240{{\uldb bclr}{\v bclr}}\par\pard +\li240{{\uldb bcs}{\v bcs}}\par\pard +\li240{{\uldb beq}{\v beq}}\par\pard +\li240{{\uldb bge}{\v bge}}\par\pard +\li240{{\uldb bgt}{\v bgt}}\par\pard +\li240{{\uldb bhi}{\v bhi}}\par\pard +\li240{{\uldb bhs}{\v bhs}}\par\pard +\li240{{\uldb bita}{\v bita}}\par\pard +\li240{{\uldb bitb}{\v bitb}}\par\pard +\li240{{\uldb ble}{\v ble}}\par\pard +\li240{{\uldb blo}{\v blo}}\par\pard +\li240{{\uldb bls}{\v bls}}\par\pard +\li240{{\uldb blt}{\v blt}}\par\pard +\li240{{\uldb bmi}{\v bmi}}\par\pard +\li240{{\uldb bne}{\v bne}}\par\pard +\li240{{\uldb bpl}{\v bpl}}\par\pard +\li240{{\uldb bra}{\v bra}}\par\pard +\li240{{\uldb brclr}{\v brclr}}\par\pard +\li240{{\uldb brn}{\v brn}}\par\pard +\li240{{\uldb brset}{\v brset}}\par\pard +\li240{{\uldb bset}{\v bset}}\par\pard +\li240{{\uldb bsr}{\v bsr}}\par\pard +\li240{{\uldb bvc}{\v bvc}}\par\pard +\li240{{\uldb bvs}{\v bvs}}\par\pard +\li240{{\uldb cba}{\v cba}}\par\pard +\li240{{\uldb clc}{\v clc}}\par\pard +\li240{{\uldb cli}{\v cli}}\par\pard +\li240{{\uldb clr}{\v clr}}\par\pard +\li240{{\uldb clra}{\v clra}}\par\pard +\li240{{\uldb clrb}{\v clrb}}\par\pard +\li240{{\uldb clv}{\v clv}}\par\pard +\li240{{\uldb cmpa}{\v cmpa}}\par\pard +\li240{{\uldb cmpb}{\v cmpb}}\par\pard +\li240{{\uldb com}{\v com}}\par\pard +\li240{{\uldb coma}{\v coma}}\par\pard +\li240{{\uldb comb}{\v comb}}\par\pard +\li240{{\uldb cpd}{\v cpd}}\par\pard +\li240{{\uldb cpx}{\v cpx}}\par\pard +\li240{{\uldb cpy}{\v cpy}}\par\pard +\li240{{\uldb daa}{\v daa}}\par\pard +\li240{{\uldb dec}{\v dec}}\par\pard +\li240{{\uldb deca}{\v deca}}\par\pard +\li240{{\uldb decb}{\v decb}}\par\pard +\li240{{\uldb des}{\v des}}\par\pard +\li240{{\uldb dex}{\v dex}}\par\pard +\li240{{\uldb dey}{\v dey}}\par\pard +\li240{{\uldb eora}{\v eora}}\par\pard +\li240{{\uldb eorb}{\v eorb}}\par\pard +\li240{{\uldb fdiv}{\v fdiv}}\par\pard +\li240{{\uldb idiv}{\v idiv}}\par\pard +\li240{{\uldb inc}{\v inc}}\par\pard +\li240{{\uldb inca}{\v inca}}\par\pard +\li240{{\uldb incb}{\v incb}}\par\pard +\li240{{\uldb ins}{\v ins}}\par\pard +\li240{{\uldb inx}{\v inx}}\par\pard +\li240{{\uldb iny}{\v iny}}\par\pard +\li240{{\uldb jmp}{\v jmp}}\par\pard +\li240{{\uldb jsr}{\v jsr}}\par\pard +\li240{{\uldb ldaa}{\v ldaa}}\par\pard +\li240{{\uldb ldab}{\v ldab}}\par\pard +\li240{{\uldb ldd}{\v ldd}}\par\pard +\li240{{\uldb lds}{\v lds}}\par\pard +\li240{{\uldb ldx}{\v ldx}}\par\pard +\li240{{\uldb ldy}{\v ldy}}\par\pard +\li240{{\uldb lsl}{\v lsl}}\par\pard +\li240{{\uldb lsla}{\v lsla}}\par\pard +\li240{{\uldb lslb}{\v lslb}}\par\pard +\li240{{\uldb lsld}{\v lsld}}\par\pard +\li240{{\uldb lsr}{\v lsr}}\par\pard +\li240{{\uldb lsra}{\v lsra}}\par\pard +\li240{{\uldb lsrb}{\v lsrb}}\par\pard +\li240{{\uldb lsrd}{\v lsrd}}\par\pard +\li240{{\uldb mul}{\v mul}}\par\pard +\li240{{\uldb neg}{\v neg}}\par\pard +\li240{{\uldb nega}{\v nega}}\par\pard +\li240{{\uldb negb}{\v negb}}\par\pard +\li240{{\uldb nop}{\v nop}}\par\pard +\li240{{\uldb oraa}{\v oraa}}\par\pard +\li240{{\uldb orab}{\v orab}}\par\pard +\li240{{\uldb psha}{\v psha}}\par\pard +\li240{{\uldb pshb}{\v pshb}}\par\pard +\li240{{\uldb pshx}{\v pshx}}\par\pard +\li240{{\uldb pshy}{\v pshy}}\par\pard +\li240{{\uldb pula}{\v pula}}\par\pard +\li240{{\uldb pulb}{\v pulb}}\par\pard +\li240{{\uldb pulx}{\v pulx}}\par\pard +\li240{{\uldb puly}{\v puly}}\par\pard +\li240{{\uldb rol}{\v rol}}\par\pard +\li240{{\uldb rola}{\v rola}}\par\pard +\li240{{\uldb rolb}{\v rolb}}\par\pard +\li240{{\uldb ror}{\v ror}}\par\pard +\li240{{\uldb rora}{\v rora}}\par\pard +\li240{{\uldb rorb}{\v rorb}}\par\pard +\li240{{\uldb rti}{\v rti}}\par\pard +\li240{{\uldb rts}{\v rts}}\par\pard +\li240{{\uldb sba}{\v sba}}\par\pard +\li240{{\uldb sbca}{\v sbca}}\par\pard +\li240{{\uldb sbcb}{\v sbcb}}\par\pard +\li240{{\uldb sec}{\v sec}}\par\pard +\li240{{\uldb sei}{\v sei}}\par\pard +\li240{{\uldb sev}{\v sev}}\par\pard +\li240{{\uldb staa}{\v staa}}\par\pard +\li240{{\uldb stab}{\v stab}}\par\pard +\li240{{\uldb std}{\v std}}\par\pard +\li240{{\uldb stop}{\v stop}}\par\pard +\li240{{\uldb sts}{\v sts}}\par\pard +\li240{{\uldb stx}{\v stx}}\par\pard +\li240{{\uldb sty}{\v sty}}\par\pard +\li240{{\uldb suba}{\v suba}}\par\pard +\li240{{\uldb subb}{\v subb}}\par\pard +\li240{{\uldb subd}{\v subd}}\par\pard +\li240{{\uldb swi}{\v swi}}\par\pard +\li240{{\uldb tab}{\v tab}}\par\pard +\li240{{\uldb tap}{\v tap}}\par\pard +\li240{{\uldb tba}{\v tba}}\par\pard +\li240{{\uldb test}{\v test}}\par\pard +\li240{{\uldb tpa}{\v tpa}}\par\pard +\li240{{\uldb tst}{\v tst}}\par\pard +\li240{{\uldb tsta}{\v tsta}}\par\pard +\li240{{\uldb tstb}{\v tstb}}\par\pard +\li240{{\uldb tsx}{\v tsx}}\par\pard +\li240{{\uldb tsy}{\v tsy}}\par\pard +\li240{{\uldb txs}{\v txs}}\par\pard +\li240{{\uldb tys}{\v tys}}\par\pard +\li240{{\uldb wai}{\v wai}}\par\pard +\li240{{\uldb xgdx}{\v xgdx}}\par\pard +\li240{{\uldb xgdy}{\v xgdy}}\par\pard +\par}\page +{#{\footnote # aba} +K{\footnote K aba} +${\footnote $ aba} ++{\footnote + General} +\par{\b \fs24 aba}\par\pard +\par\li240{Add Accumulators. A + B -> A. (INH)}\par\pard +\par}\page +{#{\footnote # abx} +K{\footnote K abx} +${\footnote $ abx} ++{\footnote + General} +\par{\b \fs24 abx}\par\pard +\par\li240{Add B to X. (INH)}\par\pard +\par}\page +{#{\footnote # aby} +K{\footnote K aby} +${\footnote $ aby} ++{\footnote + General} +\par{\b \fs24 aby}\par\pard +\par\li240{Add B to Y. (INH)}\par\pard +\par}\page +{#{\footnote # adca} +K{\footnote K adca} +${\footnote $ adca} ++{\footnote + General} +\par{\b \fs24 adca}\par\pard +\par\li240{Add with carry to A. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # adcb} +K{\footnote K adcb} +${\footnote $ adcb} ++{\footnote + General} +\par{\b \fs24 adca}\par\pard +\par\li240{Add with carry to B. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # adda} +K{\footnote K adda} +${\footnote $ adda} ++{\footnote + General} +\par{\b \fs24 adda}\par\pard +\par\li240{Add memory to A. A + M -> A. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # addb} +K{\footnote K addb} +${\footnote $ addb} ++{\footnote + General} +\par{\b \fs24 addb}\par\pard +\par\li240{Add memory to B. B + M -> B. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # addd} +K{\footnote K addd} +${\footnote $ addd} ++{\footnote + General} +\par{\b \fs24 addd}\par\pard +\par\li240{Add 16 bit to D. D + (M : M + 1) -> D. (IMM,DIR,EXT,INDX,INDY +)}\par\pard +\par}\page +{#{\footnote # anda} +K{\footnote K anda} +${\footnote $ anda} ++{\footnote + General} +\par{\b \fs24 anda}\par\pard +\par\li240{AND A with memory. A & M -> A (IMM,DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # andb} +K{\footnote K andb} +${\footnote $ andb} ++{\footnote + General} +\par{\b \fs24 andb}\par\pard +\par\li240{AND B with memory. B & M -> B (IMM,DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # asl} +K{\footnote K asl} +${\footnote $ asl} ++{\footnote + General} +\par{\b \fs24 asl}\par\pard +\par\li240{Arithmetic shift left. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # asla} +K{\footnote K asla} +${\footnote $ asla} ++{\footnote + General} +\par{\b \fs24 asla}\par\pard +\par\li240{Arithmetic shift left A. (INH)}\par\pard +\par}\page +{#{\footnote # aslb} +K{\footnote K aslb} +${\footnote $ aslb} ++{\footnote + General} +\par{\b \fs24 aslb}\par\pard +\par\li240{Arithmetic shift left B. (INH)}\par\pard +\par}\page +{#{\footnote # asld} +K{\footnote K asld} +${\footnote $ asld} ++{\footnote + General} +\par{\b \fs24 asld}\par\pard +\par\li240{Arithmetic shift left D. (INH)}\par\pard +\par}\page +{#{\footnote # asr} +K{\footnote K asr} +${\footnote $ asr} ++{\footnote + General} +\par{\b \fs24 asr}\par\pard +\par\li240{Arithmetic shift right. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # asra} +K{\footnote K asra} +${\footnote $ asra} ++{\footnote + General} +\par{\b \fs24 asra}\par\pard +\par\li240{Arithmetic shift right A. (INH)}\par\pard +\par}\page +{#{\footnote # asrb} +K{\footnote K asrb} +${\footnote $ asrb} ++{\footnote + General} +\par{\b \fs24 asrb}\par\pard +\par\li240{Arithmetic shift right B. (INH)}\par\pard +\par}\page +{#{\footnote # bcc} +K{\footnote K bcc} +${\footnote $ bcc} ++{\footnote + General} +\par{\b \fs24 bcc}\par\pard +\par\li240{Branch if carry clear. (REL)}\par\pard +\par}\page +{#{\footnote # bclr} +K{\footnote K bclr} +${\footnote $ bclr} ++{\footnote + General} +\par{\b \fs24 bclr}\par\pard +\par\li240{Clear bits. M : (mm) -> M (DIR,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # bcs} +K{\footnote K bcs} +${\footnote $ bcs} ++{\footnote + General} +\par{\b \fs24 bcs}\par\pard +\par\li240{Branch if carry set. (REL)}\par\pard +\par}\page +{#{\footnote # beq} +K{\footnote K beq} +${\footnote $ beq} ++{\footnote + General} +\par{\b \fs24 beq}\par\pard +\par\li240{Branch if equal zero. (REL)}\par\pard +\par}\page +{#{\footnote # bge} +K{\footnote K bge} +${\footnote $ bge} ++{\footnote + General} +\par{\b \fs24 bge}\par\pard +\par\li240{Branch if greater equal zero. (REL)}\par\pard +\par}\page +{#{\footnote # bgt} +K{\footnote K bgt} +${\footnote $ bgt} ++{\footnote + General} +\par{\b \fs24 bgt}\par\pard +\par\li240{Branch if greater than zero. (REL)}\par\pard +\par}\page +{#{\footnote # bhi} +K{\footnote K bhi} +${\footnote $ bhi} ++{\footnote + General} +\par{\b \fs24 bhi}\par\pard +\par\li240{Branch if higher. (REL)}\par\pard +\par}\page +{#{\footnote # bhs} +K{\footnote K bhs} +${\footnote $ bhs} ++{\footnote + General} +\par{\b \fs24 bhs}\par\pard +\par\li240{Branch if higher or same. (REL)}\par\pard +\par}\page +{#{\footnote # bita} +K{\footnote K bita} +${\footnote $ bita} ++{\footnote + General} +\par{\b \fs24 bita}\par\pard +\par\li240{Bit test A with memory. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # bitb} +K{\footnote K bitb} +${\footnote $ bitb} ++{\footnote + General} +\par{\b \fs24 bitb}\par\pard +\par\li240{Bit test B with memory. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # ble} +K{\footnote K ble} +${\footnote $ ble} ++{\footnote + General} +\par{\b \fs24 ble}\par\pard +\par\li240{Branch if less than or equal to zero. (REL)}\par\pard +\par}\page +{#{\footnote # blo} +K{\footnote K blo} +${\footnote $ blo} ++{\footnote + General} +\par{\b \fs24 blo}\par\pard +\par\li240{Branch if lower. (REL)}\par\pard +\par}\page +{#{\footnote # bls} +K{\footnote K bls} +${\footnote $ bls} ++{\footnote + General} +\par{\b \fs24 bls}\par\pard +\par\li240{Branch if less or same. (REL)}\par\pard +\par}\page +{#{\footnote # blt} +K{\footnote K blt} +${\footnote $ blt} ++{\footnote + General} +\par{\b \fs24 blt}\par\pard +\par\li240{Branch if less than zero. (REL)}\par\pard +\par}\page +{#{\footnote # bmi} +K{\footnote K bmi} +${\footnote $ bmi} ++{\footnote + General} +\par{\b \fs24 bmi}\par\pard +\par\li240{Branch if minus. (REL)}\par\pard +\par}\page +{#{\footnote # bne} +K{\footnote K bne} +${\footnote $ bne} ++{\footnote + General} +\par{\b \fs24 bne}\par\pard +\par\li240{Branch if not equal zero. (REL)}\par\pard +\par}\page +{#{\footnote # bpl} +K{\footnote K bpl} +${\footnote $ bpl} ++{\footnote + General} +\par{\b \fs24 bpl}\par\pard +\par\li120{Branch if plus. (REL)}\par\pard +\par}\page +{#{\footnote # bra} +K{\footnote K bra} +${\footnote $ bra} ++{\footnote + General} +\par{\b \fs24 bra}\par\pard +\par\li240{Branch always. (REL)}\par\pard +\par}\page +{#{\footnote # brclr} +K{\footnote K brclr} +${\footnote $ brclr} ++{\footnote + General} +\par{\b \fs24 brclr}\par\pard +\par\li240{Branch if bits clear. (DIR,INDX,INDY). (dd mm rr)}\par\pard +\li4920{(ff mm rr)}\par\pard +}\page +{#{\footnote # brn} +K{\footnote K brn} +${\footnote $ brn} ++{\footnote + General} +\par{\b \fs24 brn}\par\pard +\par\li240{Branch never. (REL)}\par\pard +\par}\page +{#{\footnote # brset} +K{\footnote K brset} +${\footnote $ brset} ++{\footnote + General} +\par{\b \fs24 brset}\par\pard +\par\li240{Branch if bits set. (DIR,INDX,INDY) (dd mm rr)}\par\pard +\li4560{(ff mm rr)}\par\pard +\par}\page +{#{\footnote # bset} +K{\footnote K bset} +${\footnote $ bset} ++{\footnote + General} +\par{\b \fs24 bset}\par\pard +\par\li240{Set bits. (DIR,INDX,INDY) (dd mm)}\par\pard +\li4560{(ff mm)}\par\pard +\par}\page +{#{\footnote # bsr} +K{\footnote K bsr} +${\footnote $ bsr} ++{\footnote + General} +\par{\b \fs24 bsr}\par\pard +\par\li240{Branch to subroutine. (REL)}\par\pard +\par}\page +{#{\footnote # bvc} +K{\footnote K bvc} +${\footnote $ bvc} ++{\footnote + General} +\par{\b \fs24 bvc}\par\pard +\par\li240{Branch if overflow clear. (REL)}\par\pard +\par}\page +{#{\footnote # bvs} +K{\footnote K bvs} +${\footnote $ bvs} ++{\footnote + General} +\par{\b \fs24 bvs}\par\pard +\par\li240{Branch if overflow set. (REL)}\par\pard +\par}\page +{#{\footnote # cba} +K{\footnote K cba} +${\footnote $ cba} ++{\footnote + General} +\par{\b \fs24 cba}\par\pard +\par\li240{Compare A to B. (INH)}\par\pard +\par}\page +{#{\footnote # clc} +K{\footnote K clc} +${\footnote $ clc} ++{\footnote + General} +\par{\b \fs24 clc}\par\pard +\par\li240{Clear carry bit. (INH)}\par\pard +\par}\page +{#{\footnote # cli} +K{\footnote K cli} +${\footnote $ cli} ++{\footnote + General} +\par{\b \fs24 cli}\par\pard +\par\li240{Clear interrupt mask. (INH)}\par\pard +\par}\page +{#{\footnote # clr} +K{\footnote K clr} +${\footnote $ clr} ++{\footnote + General} +\par{\b \fs24 clr}\par\pard +\par\li240{Clear memory bytes. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # clra} +K{\footnote K clra} +${\footnote $ clra} ++{\footnote + General} +\par{\b \fs24 clra}\par\pard +\par\li240{Clear accumulator A. (INH)}\par\pard +\par}\page +{#{\footnote # clrb} +K{\footnote K clrb} +${\footnote $ clrb} ++{\footnote + General} +\par{\b \fs24 clrb}\par\pard +\par\li240{Clear accumulator B. (INH)}\par\pard +\par}\page +{#{\footnote # clv} +K{\footnote K clv} +${\footnote $ clv} ++{\footnote + General} +\par{\b \fs24 clv}\par\pard +\par\li240{Clear overflow flag. (INH)}\par\pard +\par}\page +{#{\footnote # cmpa} +K{\footnote K cmpa} +${\footnote $ cmpa} ++{\footnote + General} +\par{\b \fs24 cmpa}\par\pard +\par\li240{Compare A to memory. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # cmpb} +K{\footnote K cmpb} +${\footnote $ cmpb} ++{\footnote + General} +\par{\b \fs24 cmpb}\par\pard +\par\li240{Compare B to memory. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # com} +K{\footnote K com} +${\footnote $ com} ++{\footnote + General} +\par{\b \fs24 com}\par\pard +\par\li240{Ones complement memory byte. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # coma} +K{\footnote K coma} +${\footnote $ coma} ++{\footnote + General} +\par{\b \fs24 coma}\par\pard +\par\li240{Ones complement A. (INH)}\par\pard +\par}\page +{#{\footnote # comb} +K{\footnote K comb} +${\footnote $ comb} ++{\footnote + General} +\par{\b \fs24 comb}\par\pard +\par\li240{Ones complement B. (INH)}\par\pard +\par}\page +{#{\footnote # cpd} +K{\footnote K cpd} +${\footnote $ cpd} ++{\footnote + General} +\par{\b \fs24 cpd}\par\pard +\par\li240{compare D to memory 16-bit. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # cpx} +K{\footnote K cpx} +${\footnote $ cpx} ++{\footnote + General} +\par{\b \fs24 cpx}\par\pard +\par\li240{compare X to memory 16-bit. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # cpy} +K{\footnote K cpy} +${\footnote $ cpy} ++{\footnote + General} +\par{\b \fs24 cpy}\par\pard +\par\li240{compare Y to memory 16-bit. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # daa} +K{\footnote K daa} +${\footnote $ daa} ++{\footnote + General} +\par{\b \fs24 daa}\par\pard +\par\li240{Decimal adjust A. (INH)}\par\pard +\par}\page +{#{\footnote # dec} +K{\footnote K dec} +${\footnote $ dec} ++{\footnote + General} +\par{\b \fs24 dec}\par\pard +\par\li240{Decrement memory byte. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # deca} +K{\footnote K deca} +${\footnote $ deca} ++{\footnote + General} +\par{\b \fs24 deca}\par\pard +\par\li240{Decrement accumulator A. (INH)}\par\pard +\par}\page +{#{\footnote # decb} +K{\footnote K decb} +${\footnote $ decb} ++{\footnote + General} +\par{\b \fs24 decb}\par\pard +\par\li240{Decrement accumulator B. (INH)}\par\pard +\par}\page +{#{\footnote # des} +K{\footnote K des} +${\footnote $ des} ++{\footnote + General} +\par{\b \fs24 des}\par\pard +\par\li240{Decrement stack pointer. (INH)}\par\pard +\par}\page +{#{\footnote # dex} +K{\footnote K dex} +${\footnote $ dex} ++{\footnote + General} +\par{\b \fs24 dex}\par\pard +\par\li240{Decrement index register X. (INH)}\par\pard +\par}\page +{#{\footnote # dey} +K{\footnote K dey} +${\footnote $ dey} ++{\footnote + General} +\par{\b \fs24 dey}\par\pard +\par\li240{Decrement index register Y. (INH)}\par\pard +\par}\page +{#{\footnote # eora} +K{\footnote K eora} +${\footnote $ eora} ++{\footnote + General} +\par{\b \fs24 eora}\par\pard +\par\li240{Exclusive OR A with memory. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # eorb} +K{\footnote K eorb} +${\footnote $ eorb} ++{\footnote + General} +\par{\b \fs24 eorb}\par\pard +\par\li240{Exclusive OR B with memory. (IMM,DIR,EXT,INDX,INDY) }\par\pard +}\page +{#{\footnote # fdiv} +K{\footnote K fdiv} +${\footnote $ fdiv} ++{\footnote + General} +\par{\b \fs24 fdiv}\par\pard +\par\li240{Fractional divide 16-bit by 16-bit . (INH)}\par\pard +\par}\page +{#{\footnote # idiv} +K{\footnote K idiv} +${\footnote $ idiv} ++{\footnote + General} +\par{\b \fs24 idiv}\par\pard +\par\li240{Integer divide 16-bit by 16-bit . (INH)}\par\pard +\par}\page +{#{\footnote # inc} +K{\footnote K inc} +${\footnote $ inc} ++{\footnote + General} +\par{\b \fs24 inc}\par\pard +\par\li240{Increment memory byte . (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # inca} +K{\footnote K inca} +${\footnote $ inca} ++{\footnote + General} +\par{\b \fs24 inca}\par\pard +\par\li240{Increment accumulator A. (INH)}\par\pard +\par}\page +{#{\footnote # incb} +K{\footnote K incb} +${\footnote $ incb} ++{\footnote + General} +\par{\b \fs24 incb}\par\pard +\par\li240{Increment accumulator B. (INH)}\par\pard +\par}\page +{#{\footnote # ins} +K{\footnote K ins} +${\footnote $ ins} ++{\footnote + General} +\par{\b \fs24 ins}\par\pard +\par\li240{Increment stack pointer. (INH)}\par\pard +\par}\page +{#{\footnote # inx} +K{\footnote K inx} +${\footnote $ inx} ++{\footnote + General} +\par{\b \fs24 inx}\par\pard +\par\li240{Increment index register X. (INH)}\par\pard +\par}\page +{#{\footnote # iny} +K{\footnote K iny} +${\footnote $ iny} ++{\footnote + General} +\par{\b \fs24 iny}\par\pard +\par\li240{Increment index register Y. (INH)}\par\pard +\par}\page +{#{\footnote # jmp} +K{\footnote K jmp} +${\footnote $ jmp} ++{\footnote + General} +\par{\b \fs24 jmp}\par\pard +\par\li240{Jump. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # jsr} +K{\footnote K jsr} +${\footnote $ jsr} ++{\footnote + General} +\par{\b \fs24 jsr}\par\pard +\par\li240{Jump to subroutine. (DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # ldaa} +K{\footnote K ldaa} +${\footnote $ ldaa} ++{\footnote + General} +\par{\b \fs24 ldaa}\par\pard +\par\li240{Load accumulator A. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # ldab} +K{\footnote K ldab} +${\footnote $ ldab} ++{\footnote + General} +\par{\b \fs24 ldab}\par\pard +\par\li240{Load accumulator B. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # ldd} +K{\footnote K ldd} +${\footnote $ ldd} ++{\footnote + General} +\par{\b \fs24 ldd}\par\pard +\par\li240{Load double accumulator D.}\par\pard +\par\li360{CC IMM ii}\par\pard +\li360{DC DIR dd}\par\pard +\li360{FC EXT hh ll}\par\pard +\li360{EC INDX ff}\par\pard +{18 EC INDY ff}\par\pard +\par\par}\page +{#{\footnote # lds} +K{\footnote K lds} +${\footnote $ lds} ++{\footnote + General} +\par{\b \fs24 ldjs}\par\pard +\par\li240{Load stack pointer. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # ldx} +K{\footnote K ldx} +${\footnote $ ldx} ++{\footnote + General} +\par{\b \fs24 ldx}\par\pard +\par\li240{Load index register X. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # ldy} +K{\footnote K ldy} +${\footnote $ ldy} ++{\footnote + General} +\par{\b \fs24 ldy}\par\pard +\par\li240{Load index register Y. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # lsl} +K{\footnote K lsl} +${\footnote $ lsl} ++{\footnote + General} +\par{\b \fs24 lsl}\par\pard +\par\li240{Logical shift left. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # lsla} +K{\footnote K lsla} +${\footnote $ lsla} ++{\footnote + General} +\par{\b \fs24 lsla}\par\pard +\par\li240{Logical shift left A. (INH)}\par\pard +\par}\page +{#{\footnote # lslb} +K{\footnote K lslb} +${\footnote $ lslb} ++{\footnote + General} +\par{\b \fs24 lslb}\par\pard +\par\li240{Logical shift left B. (INH)}\par\pard +\par}\page +{#{\footnote # lsld} +K{\footnote K lsld} +${\footnote $ lsld} ++{\footnote + General} +\par{\b \fs24 lsld}\par\pard +\par\li240{Logical shift left D. (INH)}\par\pard +\par}\page +{#{\footnote # lsr} +K{\footnote K lsr} +${\footnote $ lsr} ++{\footnote + General} +\par{\b \fs24 lsr}\par\pard +\par\li240{Logical shift right. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # lsra} +K{\footnote K lsra} +${\footnote $ lsra} ++{\footnote + General} +\par{\b \fs24 lsra}\par\pard +\par\li240{Logical shift right A. (INH)}\par\pard +\par}\page +{#{\footnote # lsrb} +K{\footnote K lsrb} +${\footnote $ lsrb} ++{\footnote + General} +\par{\b \fs24 lsrb}\par\pard +\par\li240{Logical shift right B. (INH)}\par\pard +\par}\page +{#{\footnote # lsrd} +K{\footnote K lsrd} +${\footnote $ lsrd} ++{\footnote + General} +\par{\b \fs24 lsrd}\par\pard +\par\li240{Logical shift right D. (INH)}\par\pard +\par}\page +{#{\footnote # mul} +K{\footnote K mul} +${\footnote $ mul} ++{\footnote + General} +\par{\b \fs24 mul}\par\pard +\par\li240{Multiply A * B -> D (INH)}\par\pard +\par}\page +{#{\footnote # neg} +K{\footnote K neg} +${\footnote $ neg} ++{\footnote + General} +\par{\b \fs24 neg}\par\pard +\par\li240{Two's complement memory byte. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # nega} +K{\footnote K nega} +${\footnote $ nega} ++{\footnote + General} +\par{\b \fs24 nega}\par\pard +\par\li240{Two's complement A. (INH)}\par\pard +\par}\page +{#{\footnote # negb} +K{\footnote K negb} +${\footnote $ negb} ++{\footnote + General} +\par{\b \fs24 negb}\par\pard +\par\li240{Two's complement B. (INH)}\par\pard +\par}\page +{#{\footnote # nop} +K{\footnote K nop} +${\footnote $ nop} ++{\footnote + General} +\par{\b \fs24 nop}\par\pard +\par\li240{No operation. (INH)}\par\pard +\par}\page +{#{\footnote # oraa} +K{\footnote K oraa} +${\footnote $ oraa} ++{\footnote + General} +\par{\b \fs24 oraa}\par\pard +\par\li240{Inclusive OR accumulator A. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # orab} +K{\footnote K orab} +${\footnote $ orab} ++{\footnote + General} +\par{\b \fs24 orab}\par\pard +\par\li240{Inclusive OR accumulator B. (IMM,DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # psha} +K{\footnote K psha} +${\footnote $ psha} ++{\footnote + General} +\par{\b \fs24 psha}\par\pard +\par\li240{Push A onto stack. (INH)}\par\pard +\par}\page +{#{\footnote # pshb} +K{\footnote K pshb} +${\footnote $ pshb} ++{\footnote + General} +\par{\b \fs24 pshb}\par\pard +\par\li240{Push B onto stack. (INH)}\par\pard +\par}\page +{#{\footnote # pshx} +K{\footnote K pshx} +${\footnote $ pshx} ++{\footnote + General} +\par{\b \fs24 pshx}\par\pard +\par\li240{Push X onto stack. (INH)}\par\pard +\par}\page +{#{\footnote # pshy} +K{\footnote K pshy} +${\footnote $ pshy} ++{\footnote + General} +\par{\b \fs24 pshy}\par\pard +\par\li240{Push Y onto stack. (INH)}\par\pard +\par}\page +{#{\footnote # pula} +K{\footnote K pula} +${\footnote $ pula} ++{\footnote + General} +\par{\b \fs24 pula}\par\pard +\par\li240{Pull A from stack. (INH)}\par\pard +\par}\page +{#{\footnote # pulb} +K{\footnote K pulb} +${\footnote $ pulb} ++{\footnote + General} +\par{\b \fs24 pulb}\par\pard +\par\li240{Pull B from stack. (INH)}\par\pard +\par}\page +{#{\footnote # pulx} +K{\footnote K pulx} +${\footnote $ pulx} ++{\footnote + General} +\par{\b \fs24 pulx}\par\pard +\par\li240{Pull X from stack. (Hi byte first). (INH)}\par\pard +\par}\page +{#{\footnote # puly} +K{\footnote K puly} +${\footnote $ puly} ++{\footnote + General} +\par{\b \fs24 puly}\par\pard +\par\li240{Pull Y from stack. (Hi byte first). (INH)}\par\pard +\par}\page +{#{\footnote # rol} +K{\footnote K rol} +${\footnote $ rol} ++{\footnote + General} +\par{\b \fs24 rol}\par\pard +\par\li240{Rotate left. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # rola} +K{\footnote K rola} +${\footnote $ rola} ++{\footnote + General} +\par{\b \fs24 rola}\par\pard +\par\li240{Rotate left A. (INH)}\par\pard +\par}\page +{#{\footnote # rolb} +K{\footnote K rolb} +${\footnote $ rolb} ++{\footnote + General} +\par{\b \fs24 rolb}\par\pard +\par\li240{Rotate left B. (INH)}\par\pard +\par}\page +{#{\footnote # ror} +K{\footnote K ror} +${\footnote $ ror} ++{\footnote + General} +\par{\b \fs24 ror}\par\pard +\par\li240{Rotate right. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # rora} +K{\footnote K rora} +${\footnote $ rora} ++{\footnote + General} +\par{\b \fs24 rora}\par\pard +\par\li240{Rotate right A. (INH)}\par\pard +\par}\page +{#{\footnote # rorb} +K{\footnote K rorb} +${\footnote $ rorb} ++{\footnote + General} +\par{\b \fs24 rorb}\par\pard +\par\li240{Rotate right B. (INH)}\par\pard +\par}\page +{#{\footnote # rti} +K{\footnote K rti} +${\footnote $ rti} ++{\footnote + General} +\par{\b \fs24 rti}\par\pard +\par\li240{Return from interrupt. (INH)}\par\pard +\par}\page +{#{\footnote # rts} +K{\footnote K rts} +${\footnote $ rts} ++{\footnote + General} +\par{\b \fs24 rts}\par\pard +\par\li240{Return from subroutine. (INH)}\par\pard +\par}\page +{#{\footnote # sba} +K{\footnote K sba} +${\footnote $ sba} ++{\footnote + General} +\par{\b \fs24 sba}\par\pard +\par\li240{Subtract B from A -> A. (INH)}\par\pard +\par}\page +{#{\footnote # sbca} +K{\footnote K sbca} +${\footnote $ sbca} ++{\footnote + General} +\par{\b \fs24 sbca}\par\pard +\par\li240{Subtract with carry from A -> A. (IMM,DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # sbcb} +K{\footnote K sbcb} +${\footnote $ sbcb} ++{\footnote + General} +\par{\b \fs24 sbcb}\par\pard +\par\li240{Subtract with carry from B -> B. (IMM,DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # sec} +K{\footnote K sec} +${\footnote $ sec} ++{\footnote + General} +\par{\b \fs24 sec}\par\pard +\par\li240{Set carry. (INH)}\par\pard +\par}\page +{#{\footnote # sei} +K{\footnote K sei} +${\footnote $ sei} ++{\footnote + General} +\par{\b \fs24 sei}\par\pard +\par\li240{Set interrupt mask. (INH)}\par\pard +\par}\page +{#{\footnote # sev} +K{\footnote K sev} +${\footnote $ sev} ++{\footnote + General} +\par{\b \fs24 sev}\par\pard +\par\li240{Set overflow flag. (INH)}\par\pard +\par}\page +{#{\footnote # staa} +K{\footnote K staa} +${\footnote $ staa} ++{\footnote + General} +\par{\b \fs24 staa}\par\pard +\par\li240{Store accumulator A -> M. (DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # stab} +K{\footnote K stab} +${\footnote $ stab} ++{\footnote + General} +\par{\b \fs24 stab}\par\pard +\par\li240{Store accumulator B -> M. (DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # std} +K{\footnote K std} +${\footnote $ std} ++{\footnote + General} +\par{\b \fs24 std}\par\pard +\par\li240{Store accumulator D -> M (A -> M : B -> M + 1).}\par\pard +\par\li360{DD DIR dd}\par\pard +\li360{FD EXT hh ll}\par\pard +\li360{ED INDX ff}\par\pard +{18 ED INDY ff' }\par\pard +}\page +{#{\footnote # stop} +K{\footnote K stop} +${\footnote $ stop} ++{\footnote + General} +\par{\b \fs24 stop}\par\pard +\par\li240{Stop internal clocks. (DIR,EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # sts} +K{\footnote K sts} +${\footnote $ sts} ++{\footnote + General} +\par{\b \fs24 sts}\par\pard +\par\li240{Store stack pointer SP -> M : M + 1. (DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # stx} +K{\footnote K stx} +${\footnote $ stx} ++{\footnote + General} +\par{\b \fs24 stx}\par\pard +\par\li240{Store index register X -> M : M + 1. (DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # sty} +K{\footnote K sty} +${\footnote $ sty} ++{\footnote + General} +\par{\b \fs24 sty}\par\pard +\par\li240{Store index register Y -> M : M + 1. (DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # suba} +K{\footnote K suba} +${\footnote $ suba} ++{\footnote + General} +\par{\b \fs24 suba}\par\pard +\par\li240{Subtract memory from A. A - M -> A. (IMM,DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # subb} +K{\footnote K subb} +${\footnote $ subb} ++{\footnote + General} +\par{\b \fs24 subb}\par\pard +\par\li240{Subtract memory from B. B - M -> B. (IMM,DIR,EXT,INDX,INDY) +}\par\pard +\par}\page +{#{\footnote # subd} +K{\footnote K subd} +${\footnote $ subd} ++{\footnote + General} +\par{\b \fs24 subd}\par\pard +\par\li240{Subtract memory from D. D - M : M + 1 -> D. (IMM,DIR,EXT,INDX, +INDY)}\par\pard +\par}\page +{#{\footnote # swi} +K{\footnote K swi} +${\footnote $ swi} ++{\footnote + General} +\par{\b \fs24 swi}\par\pard +\par\li240{Software interrupt. (INH)}\par\pard +\par}\page +{#{\footnote # tab} +K{\footnote K tab} +${\footnote $ tab} ++{\footnote + General} +\par{\b \fs24 tab}\par\pard +\par\li240{Transfer A to B. (INH)}\par\pard +\par}\page +{#{\footnote # tap} +K{\footnote K tap} +${\footnote $ tap} ++{\footnote + General} +\par{\b \fs24 tap}\par\pard +\par\li240{Transfer A to CC (Control Register). (INH)}\par\pard +\par}\page +{#{\footnote # tba} +K{\footnote K tba} +${\footnote $ tba} ++{\footnote + General} +\par{\b \fs24 tba}\par\pard +\par\li240{Transfer B to A. (INH)}\par\pard +\par}\page +{#{\footnote # test} +K{\footnote K test} +${\footnote $ test} ++{\footnote + General} +\par{\b \fs24 test}\par\pard +\par\li240{TEST (Only in test modes). (INH)}\par\pard +\par}\page +{#{\footnote # tpa} +K{\footnote K tpa} +${\footnote $ tpa} ++{\footnote + General} +\par{\b \fs24 tpa}\par\pard +\par\li240{Transfer CC (Control Register) to A. (INH)}\par\pard +\par}\page +{#{\footnote # tst} +K{\footnote K tst} +${\footnote $ tst} ++{\footnote + General} +\par{\b \fs24 tst}\par\pard +\par\li240{Test for zero or minus. (EXT,INDX,INDY)}\par\pard +\par}\page +{#{\footnote # tsta} +K{\footnote K tsta} +${\footnote $ tsta} ++{\footnote + General} +\par{\b \fs24 tsta}\par\pard +\par\li240{Test A for zero or minus. (INH)}\par\pard +\par}\page +{#{\footnote # tstb} +K{\footnote K tstb} +${\footnote $ tstb} ++{\footnote + General} +\par{\b \fs24 tstb}\par\pard +\par\li240{Test B for zero or minus. (INH)}\par\pard +\par}\page +{#{\footnote # tsx} +K{\footnote K tsx} +${\footnote $ tsx} ++{\footnote + General} +\par{\b \fs24 tsx}\par\pard +\par\li240{Transfer stack pointer to X. (INH)}\par\pard +\par}\page +{#{\footnote # tsy} +K{\footnote K tsy} +${\footnote $ tsy} ++{\footnote + General} +\par{\b \fs24 tsy}\par\pard +\par\li240{Transfer stack pointer to Y. (INH)}\par\pard +\par}\page +{#{\footnote # txs} +K{\footnote K txs} +${\footnote $ txs} ++{\footnote + General} +\par{\b \fs24 txs}\par\pard +\par\li240{Transfer X to stack pointer. (INH)}\par\pard +\par}\page +{#{\footnote # tys} +K{\footnote K tys} +${\footnote $ tys} ++{\footnote + General} +\par{\b \fs24 tys}\par\pard +\par\li240{Transfer Y to stack pointer. (INH)}\par\pard +\par}\page +{#{\footnote # wai} +K{\footnote K wai} +${\footnote $ wai} ++{\footnote + General} +\par{\b \fs24 wai}\par\pard +\par\li240{Wait for interrupt. Stack the registers and wait. (INH) +}\par\pard +\par}\page +{#{\footnote # xgdx} +K{\footnote K xgdx} +${\footnote $ xgdx} ++{\footnote + General} +\par{\b \fs24 xgdx}\par\pard +\par\li240{Exchange D with X. (INH)}\par\pard +\par}\page +{#{\footnote # xgdy} +K{\footnote K xgdy} +${\footnote $ xgdy} ++{\footnote + General} +\par{\b \fs24 xgdy}\par\pard +\par\li240{Exchange D with Y. (INH)}\par\pard +\par}\page +} diff --git a/m68hc11/HELP/M68HC11.TPC b/m68hc11/HELP/M68HC11.TPC new file mode 100644 index 0000000..1f96b42 --- /dev/null +++ b/m68hc11/HELP/M68HC11.TPC @@ -0,0 +1,1952 @@ +\docstart` + +\topic Introduction` +\keyword introduction;contents` +\title Introduction` +\browse General` +================ +\b\fs24 Introduction to M68HC11` + + [Instruction Set:InstructionSet]` + [Interrupt Vectors:InterruptVectors]` +------------- + + +\topic InterruptVectors` +\keyword Interrupt Vector` +\title Interrupt Vectors` +\browse General` +================ +\b\fs24 M68HC11 Interrupt Vectors` + + Clock Monitor............. FFFC,FFFD` + COP WatchDog.............. FFFA,FFFB` + SWI....................... FFF6,FFF7` + Timer (IC1F).............. FFEE,FFEF` + Timer (IC2F).............. FFEC,FFED` + Timer (IC3F).............. FFEA,FFEB` + Timer (OC1F).............. FFE8,FFE9` + Timer (OC2F).............. FFE6,FFE7` + Timer (OC3F).............. FFE4,FFE5` + Timer (OC4F).............. FFE2,FFE3` + Timer (OC5F).............. FFE0,FFE1` + Timer (TOF)............... FFDE,FFDD` + Pulse Accumulator (PAOVF). FFDC,FFDD` + Pulse Accumulator (PAII).. FFDA,FFDB` + +------------- + +\topic InstructionSet` +\keyword Instruction Set` +\title Instruction Set` +\browse General` +=============== + +\b\fs24 Instruction Set` + + [aba:aba]` + [abx:abx]` + [aby:aby]` + [adca:adca]` + [adcb:adcb]` + [adda:adda]` + [addb:addb]` + [addd:addd]` + [anda:anda]` + [andb:andb]` + [asl:asl]` + [asla:asla]` + [aslb:aslb]` + [asld:asld]` + [asr:asr]` + [asra:asra]` + [asrb:asrb]` + [bcc:bcc]` + [bclr:bclr]` + [bcs:bcs]` + [beq:beq]` + [bge:bge]` + [bgt:bgt]` + [bhi:bhi]` + [bhs:bhs]` + [bita:bita]` + [bitb:bitb]` + [ble:ble]` + [blo:blo]` + [bls:bls]` + [blt:blt]` + [bmi:bmi]` + [bne:bne]` + [bpl:bpl]` + [bra:bra]` + [brclr:brclr]` + [brn:brn]` + [brset:brset]` + [bset:bset]` + [bsr:bsr]` + [bvc:bvc]` + [bvs:bvs]` + [cba:cba]` + [clc:clc]` + [cli:cli]` + [clr:clr]` + [clra:clra]` + [clrb:clrb]` + [clv:clv]` + [cmpa:cmpa]` + [cmpb:cmpb]` + [com:com]` + [coma:coma]` + [comb:comb]` + [cpd:cpd]` + [cpx:cpx]` + [cpy:cpy]` + [daa:daa]` + [dec:dec]` + [deca:deca]` + [decb:decb]` + [des:des]` + [dex:dex]` + [dey:dey]` + [eora:eora]` + [eorb:eorb]` + [fdiv:fdiv]` + [idiv:idiv]` + [inc:inc]` + [inca:inca]` + [incb:incb]` + [ins:ins]` + [inx:inx]` + [iny:iny]` + [jmp:jmp]` + [jsr:jsr]` + [ldaa:ldaa]` + [ldab:ldab]` + [ldd:ldd]` + [lds:lds]` + [ldx:ldx]` + [ldy:ldy]` + [lsl:lsl]` + [lsla:lsla]` + [lslb:lslb]` + [lsld:lsld]` + [lsr:lsr]` + [lsra:lsra]` + [lsrb:lsrb]` + [lsrd:lsrd]` + [mul:mul]` + [neg:neg]` + [nega:nega]` + [negb:negb]` + [nop:nop]` + [oraa:oraa]` + [orab:orab]` + [psha:psha]` + [pshb:pshb]` + [pshx:pshx]` + [pshy:pshy]` + [pula:pula]` + [pulb:pulb]` + [pulx:pulx]` + [puly:puly]` + [rol:rol]` + [rola:rola]` + [rolb:rolb]` + [ror:ror]` + [rora:rora]` + [rorb:rorb]` + [rti:rti]` + [rts:rts]` + [sba:sba]` + [sbca:sbca]` + [sbcb:sbcb]` + [sec:sec]` + [sei:sei]` + [sev:sev]` + [staa:staa]` + [stab:stab]` + [std:std]` + [stop:stop]` + [sts:sts]` + [stx:stx]` + [sty:sty]` + [suba:suba]` + [subb:subb]` + [subd:subd]` + [swi:swi]` + [tab:tab]` + [tap:tap]` + [tba:tba]` + [test:test]` + [tpa:tpa]` + [tst:tst]` + [tsta:tsta]` + [tstb:tstb]` + [tsx:tsx]` + [tsy:tsy]` + [txs:txs]` + [tys:tys]` + [wai:wai]` + [xgdx:xgdx]` + [xgdy:xgdy]` + +------------------- + +\topic aba` +\keyword aba` +\title aba` +\browse General` +=============== + +\b\fs24 aba` + + Add Accumulators. A + B -> A. (INH)` + +--------------- + +\topic abx` +\keyword abx` +\title abx` +\browse General` +=============== + +\b\fs24 abx` + + Add B to X. (INH)` + +------------------ + +\topic aby` +\keyword aby` +\title aby` +\browse General` +=============== + +\b\fs24 aby` + + Add B to Y. (INH)` + +------------------ + +\topic adca` +\keyword adca` +\title adca` +\browse General` +=============== + +\b\fs24 adca` + + Add with carry to A. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic adcb` +\keyword adcb` +\title adcb` +\browse General` +=============== + +\b\fs24 adca` + + Add with carry to B. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic adda` +\keyword adda` +\title adda` +\browse General` +=============== + +\b\fs24 adda` + + Add memory to A. A + M -> A. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic addb` +\keyword addb` +\title addb` +\browse General` +=============== + +\b\fs24 addb` + + Add memory to B. B + M -> B. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic addd` +\keyword addd` +\title addd` +\browse General` +=============== + +\b\fs24 addd` + + Add 16 bit to D. D + (M : M + 1) -> D. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic anda` +\keyword anda` +\title anda` +\browse General` +=============== + +\b\fs24 anda` + + AND A with memory. A & M -> A (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic andb` +\keyword andb` +\title andb` +\browse General` +=============== + +\b\fs24 andb` + + AND B with memory. B & M -> B (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic asl` +\keyword asl` +\title asl` +\browse General` +=============== + +\b\fs24 asl` + + Arithmetic shift left. (EXT,INDX,INDY)` + +------------------ + +\topic asla` +\keyword asla` +\title asla` +\browse General` +=============== + +\b\fs24 asla` + + Arithmetic shift left A. (INH)` + +------------------ + +\topic aslb` +\keyword aslb` +\title aslb` +\browse General` +=============== + +\b\fs24 aslb` + + Arithmetic shift left B. (INH)` + +------------------ + +\topic asld` +\keyword asld` +\title asld` +\browse General` +=============== + +\b\fs24 asld` + + Arithmetic shift left D. (INH)` + +------------------ + +\topic asr` +\keyword asr` +\title asr` +\browse General` +=============== + +\b\fs24 asr` + + Arithmetic shift right. (EXT,INDX,INDY)` + +------------------ + +\topic asra` +\keyword asra` +\title asra` +\browse General` +=============== + +\b\fs24 asra` + + Arithmetic shift right A. (INH)` + +------------------ + +\topic asrb` +\keyword asrb` +\title asrb` +\browse General` +=============== + +\b\fs24 asrb` + + Arithmetic shift right B. (INH)` + +------------------ + +\topic bcc` +\keyword bcc` +\title bcc` +\browse General` +=============== + +\b\fs24 bcc` + + Branch if carry clear. (REL)` + +------------------ + +\topic bclr` +\keyword bclr` +\title bclr` +\browse General` +=============== + +\b\fs24 bclr` + + Clear bits. M : (mm) -> M (DIR,INDX,INDY)` + +------------------ + +\topic bcs` +\keyword bcs` +\title bcs` +\browse General` +=============== + +\b\fs24 bcs` + + Branch if carry set. (REL)` + +------------------ + +\topic beq` +\keyword beq` +\title beq` +\browse General` +=============== + +\b\fs24 beq` + + Branch if equal zero. (REL)` + +------------------ + +\topic bge` +\keyword bge` +\title bge` +\browse General` +=============== + +\b\fs24 bge` + + Branch if greater equal zero. (REL)` + +------------------ + +\topic bgt` +\keyword bgt` +\title bgt` +\browse General` +=============== + +\b\fs24 bgt` + + Branch if greater than zero. (REL)` + +------------------ + +\topic bhi` +\keyword bhi` +\title bhi` +\browse General` +=============== + +\b\fs24 bhi` + + Branch if higher. (REL)` + +------------------ + +\topic bhs` +\keyword bhs` +\title bhs` +\browse General` +=============== + +\b\fs24 bhs` + + Branch if higher or same. (REL)` + +------------------ + +\topic bita` +\keyword bita` +\title bita` +\browse General` +=============== + +\b\fs24 bita` + + Bit test A with memory. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic bitb` +\keyword bitb` +\title bitb` +\browse General` +=============== + +\b\fs24 bitb` + + Bit test B with memory. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic ble` +\keyword ble` +\title ble` +\browse General` +=============== + +\b\fs24 ble` + + Branch if less than or equal to zero. (REL)` + +------------------ + +\topic blo` +\keyword blo` +\title blo` +\browse General` +=============== + +\b\fs24 blo` + + Branch if lower. (REL)` + +------------------ + +\topic bls` +\keyword bls` +\title bls` +\browse General` +=============== + +\b\fs24 bls` + + Branch if less or same. (REL)` + +------------------ + +\topic blt` +\keyword blt` +\title blt` +\browse General` +=============== + +\b\fs24 blt` + + Branch if less than zero. (REL)` + +------------------ + +\topic bmi` +\keyword bmi` +\title bmi` +\browse General` +=============== + +\b\fs24 bmi` + + Branch if minus. (REL)` + +------------------ + +\topic bne` +\keyword bne` +\title bne` +\browse General` +=============== + +\b\fs24 bne` + + Branch if not equal zero. (REL)` + +------------------ + +\topic bpl` +\keyword bpl` +\title bpl` +\browse General` +=============== + +\b\fs24 bpl` + + Branch if plus. (REL)` + +------------------ + +\topic bra` +\keyword bra` +\title bra` +\browse General` +=============== + +\b\fs24 bra` + + Branch always. (REL)` + +------------------ + +\topic brclr` +\keyword brclr` +\title brclr` +\browse General` +=============== + +\b\fs24 brclr` + + Branch if bits clear. (DIR,INDX,INDY). (dd mm rr)` + (ff mm rr)` +------------------ + +\topic brn` +\keyword brn` +\title brn` +\browse General` +=============== + +\b\fs24 brn` + + Branch never. (REL)` + +------------------ + + +\topic brset` +\keyword brset` +\title brset` +\browse General` +=============== + +\b\fs24 brset` + + Branch if bits set. (DIR,INDX,INDY) (dd mm rr)` + (ff mm rr)` + +----------------- + +\topic bset` +\keyword bset` +\title bset` +\browse General` +=============== + +\b\fs24 bset` + + Set bits. (DIR,INDX,INDY) (dd mm)` + (ff mm)` + +------------------ + +\topic bsr` +\keyword bsr` +\title bsr` +\browse General` +=============== + +\b\fs24 bsr` + + Branch to subroutine. (REL)` + +------------------ + +\topic bvc` +\keyword bvc` +\title bvc` +\browse General` +=============== + +\b\fs24 bvc` + + Branch if overflow clear. (REL)` + +------------------ + +\topic bvs` +\keyword bvs` +\title bvs` +\browse General` +=============== + +\b\fs24 bvs` + + Branch if overflow set. (REL)` + +------------------ + +\topic cba` +\keyword cba` +\title cba` +\browse General` +=============== + +\b\fs24 cba` + + Compare A to B. (INH)` + +------------------ + +\topic clc` +\keyword clc` +\title clc` +\browse General` +=============== + +\b\fs24 clc` + + Clear carry bit. (INH)` + +------------------ + +\topic cli` +\keyword cli` +\title cli` +\browse General` +=============== + +\b\fs24 cli` + + Clear interrupt mask. (INH)` + +------------------ + +\topic clr` +\keyword clr` +\title clr` +\browse General` +=============== + +\b\fs24 clr` + + Clear memory bytes. (EXT,INDX,INDY)` + +------------------ + +\topic clra` +\keyword clra` +\title clra` +\browse General` +=============== + +\b\fs24 clra` + + Clear accumulator A. (INH)` + +------------------ + +\topic clrb` +\keyword clrb` +\title clrb` +\browse General` +=============== + +\b\fs24 clrb` + + Clear accumulator B. (INH)` + +------------------ + +\topic clv` +\keyword clv` +\title clv` +\browse General` +=============== + +\b\fs24 clv` + + Clear overflow flag. (INH)` + +------------------ + +\topic cmpa` +\keyword cmpa` +\title cmpa` +\browse General` +=============== + +\b\fs24 cmpa` + + Compare A to memory. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic cmpb` +\keyword cmpb` +\title cmpb` +\browse General` +=============== + +\b\fs24 cmpb` + + Compare B to memory. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic com` +\keyword com` +\title com` +\browse General` +=============== + +\b\fs24 com` + + Ones complement memory byte. (EXT,INDX,INDY)` + +------------------ + +\topic coma` +\keyword coma` +\title coma` +\browse General` +=============== + +\b\fs24 coma` + + Ones complement A. (INH)` + +------------------ + +\topic comb` +\keyword comb` +\title comb` +\browse General` +=============== + +\b\fs24 comb` + + Ones complement B. (INH)` + +------------------ + +\topic cpd` +\keyword cpd` +\title cpd` +\browse General` +=============== + +\b\fs24 cpd` + + compare D to memory 16-bit. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic cpx` +\keyword cpx` +\title cpx` +\browse General` +=============== + +\b\fs24 cpx` + + compare X to memory 16-bit. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic cpy` +\keyword cpy` +\title cpy` +\browse General` +=============== + +\b\fs24 cpy` + + compare Y to memory 16-bit. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic daa` +\keyword daa` +\title daa` +\browse General` +=============== + +\b\fs24 daa` + + Decimal adjust A. (INH)` + +------------------ + +\topic dec` +\keyword dec` +\title dec` +\browse General` +=============== + +\b\fs24 dec` + + Decrement memory byte. (EXT,INDX,INDY)` + +------------------ + +\topic deca` +\keyword deca` +\title deca` +\browse General` +=============== + +\b\fs24 deca` + + Decrement accumulator A. (INH)` + +------------------ + +\topic decb` +\keyword decb` +\title decb` +\browse General` +=============== + +\b\fs24 decb` + + Decrement accumulator B. (INH)` + +------------------ + +\topic des` +\keyword des` +\title des` +\browse General` +=============== + +\b\fs24 des` + + Decrement stack pointer. (INH)` + +------------------ + +\topic dex` +\keyword dex` +\title dex` +\browse General` +=============== + +\b\fs24 dex` + + Decrement index register X. (INH)` + +------------------ + +\topic dey` +\keyword dey` +\title dey` +\browse General` +=============== + +\b\fs24 dey` + + Decrement index register Y. (INH)` + +------------------ + +\topic eora` +\keyword eora` +\title eora` +\browse General` +=============== + +\b\fs24 eora` + + Exclusive OR A with memory. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic eorb` +\keyword eorb` +\title eorb` +\browse General` +=============== + +\b\fs24 eorb` + + Exclusive OR B with memory. (IMM,DIR,EXT,INDX,INDY) + +------------------ + +\topic fdiv` +\keyword fdiv` +\title fdiv` +\browse General` +=============== + +\b\fs24 fdiv` + + Fractional divide 16-bit by 16-bit . (INH)` + +------------------ + +\topic idiv` +\keyword idiv` +\title idiv` +\browse General` +=============== + +\b\fs24 idiv` + + Integer divide 16-bit by 16-bit . (INH)` + +------------------ + +\topic inc` +\keyword inc` +\title inc` +\browse General` +=============== + +\b\fs24 inc` + + Increment memory byte . (EXT,INDX,INDY)` + +------------------ + +\topic inca` +\keyword inca` +\title inca` +\browse General` +=============== + +\b\fs24 inca` + + Increment accumulator A. (INH)` + +------------------ + +\topic incb` +\keyword incb` +\title incb` +\browse General` +=============== + +\b\fs24 incb` + + Increment accumulator B. (INH)` + +------------------ + +\topic ins` +\keyword ins` +\title ins` +\browse General` +=============== + +\b\fs24 ins` + + Increment stack pointer. (INH)` + +------------------ + +\topic inx` +\keyword inx` +\title inx` +\browse General` +=============== + +\b\fs24 inx` + + Increment index register X. (INH)` + +------------------ + +\topic iny` +\keyword iny` +\title iny` +\browse General` +=============== + +\b\fs24 iny` + + Increment index register Y. (INH)` + +------------------ + +\topic jmp` +\keyword jmp` +\title jmp` +\browse General` +=============== + +\b\fs24 jmp` + + Jump. (EXT,INDX,INDY)` + +------------------ + + +\topic jsr` +\keyword jsr` +\title jsr` +\browse General` +=============== + +\b\fs24 jsr` + + Jump to subroutine. (DIR,EXT,INDX,INDY)` + +------------------ + +\topic ldaa` +\keyword ldaa` +\title ldaa` +\browse General` +=============== + +\b\fs24 ldaa` + + Load accumulator A. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic ldab` +\keyword ldab` +\title ldab` +\browse General` +=============== + +\b\fs24 ldab` + + Load accumulator B. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic ldd` +\keyword ldd` +\title ldd` +\browse General` +=============== + +\b\fs24 ldd` + + Load double accumulator D.` + + CC IMM ii` + DC DIR dd` + FC EXT hh ll` + EC INDX ff` +18 EC INDY ff` + + +------------------ + +\topic lds` +\keyword lds` +\title lds` +\browse General` +=============== + +\b\fs24 ldjs` + + Load stack pointer. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic ldx` +\keyword ldx` +\title ldx` +\browse General` +=============== + +\b\fs24 ldx` + + Load index register X. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic ldy` +\keyword ldy` +\title ldy` +\browse General` +=============== + +\b\fs24 ldy` + + Load index register Y. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic lsl` +\keyword lsl` +\title lsl` +\browse General` +=============== + +\b\fs24 lsl` + + Logical shift left. (EXT,INDX,INDY)` + +------------------ + +\topic lsla` +\keyword lsla` +\title lsla` +\browse General` +=============== + +\b\fs24 lsla` + + Logical shift left A. (INH)` + +------------------ + +\topic lslb` +\keyword lslb` +\title lslb` +\browse General` +=============== + +\b\fs24 lslb` + + Logical shift left B. (INH)` + +------------------ + +\topic lsld` +\keyword lsld` +\title lsld` +\browse General` +=============== + +\b\fs24 lsld` + + Logical shift left D. (INH)` + +------------------ + +\topic lsr` +\keyword lsr` +\title lsr` +\browse General` +=============== + +\b\fs24 lsr` + + Logical shift right. (EXT,INDX,INDY)` + +------------------ + +\topic lsra` +\keyword lsra` +\title lsra` +\browse General` +=============== + +\b\fs24 lsra` + + Logical shift right A. (INH)` + +------------------ + +\topic lsrb` +\keyword lsrb` +\title lsrb` +\browse General` +=============== + +\b\fs24 lsrb` + + Logical shift right B. (INH)` + +------------------ + +\topic lsrd` +\keyword lsrd` +\title lsrd` +\browse General` +=============== + +\b\fs24 lsrd` + + Logical shift right D. (INH)` + +------------------ + +\topic mul` +\keyword mul` +\title mul` +\browse General` +=============== + +\b\fs24 mul` + + Multiply A * B -> D (INH)` + +------------------ + +\topic neg` +\keyword neg` +\title neg` +\browse General` +=============== + +\b\fs24 neg` + + Two's complement memory byte. (EXT,INDX,INDY)` + +------------------ + +\topic nega` +\keyword nega` +\title nega` +\browse General` +=============== + +\b\fs24 nega` + + Two's complement A. (INH)` + +------------------ + +\topic negb` +\keyword negb` +\title negb` +\browse General` +=============== + +\b\fs24 negb` + + Two's complement B. (INH)` + +------------------ + +\topic nop` +\keyword nop` +\title nop` +\browse General` +=============== + +\b\fs24 nop` + + No operation. (INH)` + +------------------ + +\topic oraa` +\keyword oraa` +\title oraa` +\browse General` +=============== + +\b\fs24 oraa` + + Inclusive OR accumulator A. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic orab` +\keyword orab` +\title orab` +\browse General` +=============== + +\b\fs24 orab` + + Inclusive OR accumulator B. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic psha` +\keyword psha` +\title psha` +\browse General` +=============== + +\b\fs24 psha` + + Push A onto stack. (INH)` + +------------------ + +\topic pshb` +\keyword pshb` +\title pshb` +\browse General` +=============== + +\b\fs24 pshb` + + Push B onto stack. (INH)` + +------------------ + +\topic pshx` +\keyword pshx` +\title pshx` +\browse General` +=============== + +\b\fs24 pshx` + + Push X onto stack. (INH)` + +------------------ + +\topic pshy` +\keyword pshy` +\title pshy` +\browse General` +=============== + +\b\fs24 pshy` + + Push Y onto stack. (INH)` + +------------------ + +\topic pula` +\keyword pula` +\title pula` +\browse General` +=============== + +\b\fs24 pula` + + Pull A from stack. (INH)` + +------------------ + +\topic pulb` +\keyword pulb` +\title pulb` +\browse General` +=============== + +\b\fs24 pulb` + + Pull B from stack. (INH)` + +------------------ + +\topic pulx` +\keyword pulx` +\title pulx` +\browse General` +=============== + +\b\fs24 pulx` + + Pull X from stack. (Hi byte first). (INH)` + +------------------ + +\topic puly` +\keyword puly` +\title puly` +\browse General` +=============== + +\b\fs24 puly` + + Pull Y from stack. (Hi byte first). (INH)` + +------------------ + +\topic rol` +\keyword rol` +\title rol` +\browse General` +=============== + +\b\fs24 rol` + + Rotate left. (EXT,INDX,INDY)` + +------------------ + +\topic rola` +\keyword rola` +\title rola` +\browse General` +=============== + +\b\fs24 rola` + + Rotate left A. (INH)` + +------------------ + +\topic rolb` +\keyword rolb` +\title rolb` +\browse General` +=============== + +\b\fs24 rolb` + + Rotate left B. (INH)` + +------------------ + +\topic ror` +\keyword ror` +\title ror` +\browse General` +=============== + +\b\fs24 ror` + + Rotate right. (EXT,INDX,INDY)` + +------------------ + +\topic rora` +\keyword rora` +\title rora` +\browse General` +=============== + +\b\fs24 rora` + + Rotate right A. (INH)` + +------------------ + +\topic rorb` +\keyword rorb` +\title rorb` +\browse General` +=============== + +\b\fs24 rorb` + + Rotate right B. (INH)` + +------------------ + +\topic rti` +\keyword rti` +\title rti` +\browse General` +=============== + +\b\fs24 rti` + + Return from interrupt. (INH)` + +------------------ + +\topic rts` +\keyword rts` +\title rts` +\browse General` +=============== + +\b\fs24 rts` + + Return from subroutine. (INH)` + +------------------ + +\topic sba` +\keyword sba` +\title sba` +\browse General` +=============== + +\b\fs24 sba` + + Subtract B from A -> A. (INH)` + +------------------ + +\topic sbca` +\keyword sbca` +\title sbca` +\browse General` +=============== + +\b\fs24 sbca` + + Subtract with carry from A -> A. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic sbcb` +\keyword sbcb` +\title sbcb` +\browse General` +=============== + +\b\fs24 sbcb` + + Subtract with carry from B -> B. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic sec` +\keyword sec` +\title sec` +\browse General` +=============== + +\b\fs24 sec` + + Set carry. (INH)` + +------------------ + +\topic sei` +\keyword sei` +\title sei` +\browse General` +=============== + +\b\fs24 sei` + + Set interrupt mask. (INH)` + +------------------ + +\topic sev` +\keyword sev` +\title sev` +\browse General` +=============== + +\b\fs24 sev` + + Set overflow flag. (INH)` + +------------------ + +\topic staa` +\keyword staa` +\title staa` +\browse General` +=============== + +\b\fs24 staa` + + Store accumulator A -> M. (DIR,EXT,INDX,INDY)` + +------------------ + +\topic stab` +\keyword stab` +\title stab` +\browse General` +=============== + +\b\fs24 stab` + + Store accumulator B -> M. (DIR,EXT,INDX,INDY)` + +------------------ + +\topic std` +\keyword std` +\title std` +\browse General` +=============== + +\b\fs24 std` + + Store accumulator D -> M (A -> M : B -> M + 1).` + + DD DIR dd` + FD EXT hh ll` + ED INDX ff` +18 ED INDY ff' + +------------------ + +\topic stop` +\keyword stop` +\title stop` +\browse General` +=============== + +\b\fs24 stop` + + Stop internal clocks. (DIR,EXT,INDX,INDY)` + +------------------ + +\topic sts` +\keyword sts` +\title sts` +\browse General` +=============== + +\b\fs24 sts` + + Store stack pointer SP -> M : M + 1. (DIR,EXT,INDX,INDY)` + +------------------ + +\topic stx` +\keyword stx` +\title stx` +\browse General` +=============== + +\b\fs24 stx` + + Store index register X -> M : M + 1. (DIR,EXT,INDX,INDY)` + +------------------ + +\topic sty` +\keyword sty` +\title sty` +\browse General` +=============== + +\b\fs24 sty` + + Store index register Y -> M : M + 1. (DIR,EXT,INDX,INDY)` + +------------------ + +\topic suba` +\keyword suba` +\title suba` +\browse General` +=============== + +\b\fs24 suba` + + Subtract memory from A. A - M -> A. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic subb` +\keyword subb` +\title subb` +\browse General` +=============== + +\b\fs24 subb` + + Subtract memory from B. B - M -> B. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic subd` +\keyword subd` +\title subd` +\browse General` +=============== + +\b\fs24 subd` + + Subtract memory from D. D - M : M + 1 -> D. (IMM,DIR,EXT,INDX,INDY)` + +------------------ + +\topic swi` +\keyword swi` +\title swi` +\browse General` +=============== + +\b\fs24 swi` + + Software interrupt. (INH)` + +------------------ + +\topic tab` +\keyword tab` +\title tab` +\browse General` +=============== + +\b\fs24 tab` + + Transfer A to B. (INH)` + +------------------ + +\topic tap` +\keyword tap` +\title tap` +\browse General` +=============== + +\b\fs24 tap` + + Transfer A to CC (Control Register). (INH)` + +------------------ + +\topic tba` +\keyword tba` +\title tba` +\browse General` +=============== + +\b\fs24 tba` + + Transfer B to A. (INH)` + +------------------ + +\topic test` +\keyword test` +\title test` +\browse General` +=============== + +\b\fs24 test` + + TEST (Only in test modes). (INH)` + +------------------ + +\topic tpa` +\keyword tpa` +\title tpa` +\browse General` +=============== + +\b\fs24 tpa` + + Transfer CC (Control Register) to A. (INH)` + +------------------ + +\topic tst` +\keyword tst` +\title tst` +\browse General` +=============== + +\b\fs24 tst` + + Test for zero or minus. (EXT,INDX,INDY)` + +------------------ + +\topic tsta` +\keyword tsta` +\title tsta` +\browse General` +=============== + +\b\fs24 tsta` + + Test A for zero or minus. (INH)` + +------------------ + +\topic tstb` +\keyword tstb` +\title tstb` +\browse General` +=============== + +\b\fs24 tstb` + + Test B for zero or minus. (INH)` + +------------------ + +\topic tsx` +\keyword tsx` +\title tsx` +\browse General` +=============== + +\b\fs24 tsx` + + Transfer stack pointer to X. (INH)` + +------------------ + +\topic tsy` +\keyword tsy` +\title tsy` +\browse General` +=============== + +\b\fs24 tsy` + + Transfer stack pointer to Y. (INH)` + +------------------ + +\topic txs` +\keyword txs` +\title txs` +\browse General` +=============== + +\b\fs24 txs` + + Transfer X to stack pointer. (INH)` + +------------------ + +\topic tys` +\keyword tys` +\title tys` +\browse General` +=============== + +\b\fs24 tys` + + Transfer Y to stack pointer. (INH)` + +------------------ + +\topic wai` +\keyword wai` +\title wai` +\browse General` +=============== + +\b\fs24 wai` + + Wait for interrupt. Stack the registers and wait. (INH)` + +------------------ + +\topic xgdx` +\keyword xgdx` +\title xgdx` +\browse General` +=============== + +\b\fs24 xgdx` + + Exchange D with X. (INH)` + +------------------ + +\topic xgdy` +\keyword xgdy` +\title xgdy` +\browse General` +=============== + +\b\fs24 xgdy` + + Exchange D with Y. (INH)` + +------------------ + + +\docend` diff --git a/m68hc11/M68HC11.BAK b/m68hc11/M68HC11.BAK new file mode 100644 index 0000000..6a2d0d3 --- /dev/null +++ b/m68hc11/M68HC11.BAK @@ -0,0 +1,1567 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=m68hc11 - Win32 Debug +!MESSAGE No configuration specified. Defaulting to m68hc11 - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "m68hc11 - Win32 Release" && "$(CFG)" !=\ + "m68hc11 - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "m68hc11.mak" CFG="m68hc11 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "m68hc11 - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "m68hc11 - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "m68hc11 - Win32 Debug" +RSC=rc.exe +MTL=mktyplib.exe +CPP=cl.exe + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\m68hc11.exe" + +CLEAN : + -@erase "$(INTDIR)\codeview.obj" + -@erase "$(INTDIR)\dcb.obj" + -@erase "$(INTDIR)\Editfnd.obj" + -@erase "$(INTDIR)\Find.obj" + -@erase "$(INTDIR)\m68hc11.res" + -@erase "$(INTDIR)\m68reg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\mcudlg.obj" + -@erase "$(INTDIR)\mcuthrd.obj" + -@erase "$(INTDIR)\mcuview.obj" + -@erase "$(INTDIR)\Odlstled.obj" + -@erase "$(INTDIR)\Serdlg.obj" + -@erase "$(INTDIR)\Splash.obj" + -@erase "$(OUTDIR)\m68hc11.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/m68hc11.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/m68hc11.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/m68hc11.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/m68hc11.pdb" /machine:I386 /out:"$(OUTDIR)/m68hc11.exe" +LINK32_OBJS= \ + "$(INTDIR)\codeview.obj" \ + "$(INTDIR)\dcb.obj" \ + "$(INTDIR)\Editfnd.obj" \ + "$(INTDIR)\Find.obj" \ + "$(INTDIR)\m68hc11.res" \ + "$(INTDIR)\m68reg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\mcudlg.obj" \ + "$(INTDIR)\mcuthrd.obj" \ + "$(INTDIR)\mcuview.obj" \ + "$(INTDIR)\Odlstled.obj" \ + "$(INTDIR)\Serdlg.obj" \ + "$(INTDIR)\Splash.obj" \ + "..\Exe\asm6811.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\toolbar.lib" + +"$(OUTDIR)\m68hc11.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\m68hc11.exe" + +CLEAN : + -@erase "$(INTDIR)\codeview.obj" + -@erase "$(INTDIR)\dcb.obj" + -@erase "$(INTDIR)\Editfnd.obj" + -@erase "$(INTDIR)\Find.obj" + -@erase "$(INTDIR)\m68hc11.res" + -@erase "$(INTDIR)\m68reg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\mcudlg.obj" + -@erase "$(INTDIR)\mcuthrd.obj" + -@erase "$(INTDIR)\mcuview.obj" + -@erase "$(INTDIR)\Odlstled.obj" + -@erase "$(INTDIR)\Serdlg.obj" + -@erase "$(INTDIR)\Splash.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\m68hc11.exe" + -@erase "$(OUTDIR)\m68hc11.ilk" + -@erase "$(OUTDIR)\m68hc11.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/m68hc11.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/m68hc11.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/m68hc11.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows\ + /incremental:yes /pdb:"$(OUTDIR)/m68hc11.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)/m68hc11.exe" +LINK32_OBJS= \ + "$(INTDIR)\codeview.obj" \ + "$(INTDIR)\dcb.obj" \ + "$(INTDIR)\Editfnd.obj" \ + "$(INTDIR)\Find.obj" \ + "$(INTDIR)\m68hc11.res" \ + "$(INTDIR)\m68reg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\mcudlg.obj" \ + "$(INTDIR)\mcuthrd.obj" \ + "$(INTDIR)\mcuview.obj" \ + "$(INTDIR)\Odlstled.obj" \ + "$(INTDIR)\Serdlg.obj" \ + "$(INTDIR)\Splash.obj" \ + "..\Exe\asm6811.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\toolbar.lib" + +"$(OUTDIR)\m68hc11.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "m68hc11 - Win32 Release" +# Name "m68hc11 - Win32 Debug" + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Serdlg.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_SERDL=\ + {$(INCLUDE)}"\.\commctrl.hpp"\ + {$(INCLUDE)}"\.\commstat.hpp"\ + {$(INCLUDE)}"\.\dcb.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\m68reg.hpp"\ + {$(INCLUDE)}"\.\Serdlg.hpp"\ + {$(INCLUDE)}"\.\settings.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Serdlg.obj" : $(SOURCE) $(DEP_CPP_SERDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_SERDL=\ + {$(INCLUDE)}"\.\commctrl.hpp"\ + {$(INCLUDE)}"\.\commstat.hpp"\ + {$(INCLUDE)}"\.\dcb.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\m68reg.hpp"\ + {$(INCLUDE)}"\.\Serdlg.hpp"\ + {$(INCLUDE)}"\.\settings.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Serdlg.obj" : $(SOURCE) $(DEP_CPP_SERDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\m68hc11.rc +DEP_RSC_M68HC=\ + ".\BLANK.BMP"\ + ".\DASH.BMP"\ + ".\DOC.ICO"\ + ".\MOT.ICO"\ + ".\ONE.BMP"\ + ".\SPLASH.bmp"\ + ".\ZERO.BMP"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + + +"$(INTDIR)\m68hc11.res" : $(SOURCE) $(DEP_RSC_M68HC) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\commctrl.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\commctrl.hpp"\ + {$(INCLUDE)}"\.\commstat.hpp"\ + {$(INCLUDE)}"\.\dcb.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\.\settings.hpp"\ + {$(INCLUDE)}"\as68hc11\asm6811.hpp"\ + {$(INCLUDE)}"\as68hc11\Cacheblk.hpp"\ + {$(INCLUDE)}"\as68hc11\codeptr.hpp"\ + {$(INCLUDE)}"\as68hc11\Emit.hpp"\ + {$(INCLUDE)}"\as68hc11\equate.hpp"\ + {$(INCLUDE)}"\as68hc11\Fixup.hpp"\ + {$(INCLUDE)}"\as68hc11\instrctn.hpp"\ + {$(INCLUDE)}"\as68hc11\Label.hpp"\ + {$(INCLUDE)}"\as68hc11\labelgen.hpp"\ + {$(INCLUDE)}"\as68hc11\mode.hpp"\ + {$(INCLUDE)}"\as68hc11\Parse.hpp"\ + {$(INCLUDE)}"\as68hc11\Psymbol.hpp"\ + {$(INCLUDE)}"\as68hc11\Psymbolc.hpp"\ + {$(INCLUDE)}"\as68hc11\Scan.hpp"\ + {$(INCLUDE)}"\as68hc11\Symbol.hpp"\ + {$(INCLUDE)}"\as68hc11\Table.hpp"\ + {$(INCLUDE)}"\Bsptree\bintree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdifrm.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Toolbar\addbmp.hpp"\ + {$(INCLUDE)}"\Toolbar\tbbtn.hpp"\ + {$(INCLUDE)}"\Toolbar\toolbar.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\dcb.cpp +DEP_CPP_DCB_C=\ + {$(INCLUDE)}"\.\dcb.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\dcb.obj" : $(SOURCE) $(DEP_CPP_DCB_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\statbar.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mainfrm.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MAINF=\ + {$(INCLUDE)}"\.\Codeview.hpp"\ + {$(INCLUDE)}"\.\Editfnd.hpp"\ + {$(INCLUDE)}"\.\Find.hpp"\ + {$(INCLUDE)}"\.\m68reg.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\.\mcudlg.hpp"\ + {$(INCLUDE)}"\.\mcuthrd.hpp"\ + {$(INCLUDE)}"\.\mcuview.hpp"\ + {$(INCLUDE)}"\.\Serdlg.hpp"\ + {$(INCLUDE)}"\.\Splash.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Clipbrd.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\fndtextx.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\range.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\riched.hpp"\ + {$(INCLUDE)}"\Common\Richedit.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\winuser.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\printman\Abortdlg.hpp"\ + {$(INCLUDE)}"\printman\Printer.hpp"\ + {$(INCLUDE)}"\printman\Printman.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MAINF=\ + {$(INCLUDE)}"\.\Codeview.hpp"\ + {$(INCLUDE)}"\.\commctrl.hpp"\ + {$(INCLUDE)}"\.\commstat.hpp"\ + {$(INCLUDE)}"\.\dcb.hpp"\ + {$(INCLUDE)}"\.\Editfnd.hpp"\ + {$(INCLUDE)}"\.\Find.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\m68reg.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\.\mcudlg.hpp"\ + {$(INCLUDE)}"\.\mcuthrd.hpp"\ + {$(INCLUDE)}"\.\mcuview.hpp"\ + {$(INCLUDE)}"\.\Serdlg.hpp"\ + {$(INCLUDE)}"\.\settings.hpp"\ + {$(INCLUDE)}"\.\Splash.hpp"\ + {$(INCLUDE)}"\as68hc11\asm6811.hpp"\ + {$(INCLUDE)}"\as68hc11\Cacheblk.hpp"\ + {$(INCLUDE)}"\as68hc11\codeptr.hpp"\ + {$(INCLUDE)}"\as68hc11\Emit.hpp"\ + {$(INCLUDE)}"\as68hc11\equate.hpp"\ + {$(INCLUDE)}"\as68hc11\Fixup.hpp"\ + {$(INCLUDE)}"\as68hc11\instrctn.hpp"\ + {$(INCLUDE)}"\as68hc11\Label.hpp"\ + {$(INCLUDE)}"\as68hc11\labelgen.hpp"\ + {$(INCLUDE)}"\as68hc11\mode.hpp"\ + {$(INCLUDE)}"\as68hc11\Parse.hpp"\ + {$(INCLUDE)}"\as68hc11\Psymbol.hpp"\ + {$(INCLUDE)}"\as68hc11\Psymbolc.hpp"\ + {$(INCLUDE)}"\as68hc11\Scan.hpp"\ + {$(INCLUDE)}"\as68hc11\Symbol.hpp"\ + {$(INCLUDE)}"\as68hc11\Table.hpp"\ + {$(INCLUDE)}"\Bsptree\bintree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Clipbrd.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\fndtextx.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Mdifrm.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\range.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\riched.hpp"\ + {$(INCLUDE)}"\Common\Richedit.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\winuser.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\printman\Abortdlg.hpp"\ + {$(INCLUDE)}"\printman\Printer.hpp"\ + {$(INCLUDE)}"\printman\Printman.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + {$(INCLUDE)}"\Toolbar\addbmp.hpp"\ + {$(INCLUDE)}"\Toolbar\tbbtn.hpp"\ + {$(INCLUDE)}"\Toolbar\toolbar.hpp"\ + + +"$(INTDIR)\mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\msthread.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Find.cpp +DEP_CPP_FIND_=\ + {$(INCLUDE)}"\.\Find.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Keydata.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Find.obj" : $(SOURCE) $(DEP_CPP_FIND_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Editfnd.cpp +DEP_CPP_EDITF=\ + {$(INCLUDE)}"\.\Editfnd.hpp"\ + {$(INCLUDE)}"\.\Find.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\fndtextx.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\range.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\riched.hpp"\ + {$(INCLUDE)}"\Common\Richedit.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\winuser.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Editfnd.obj" : $(SOURCE) $(DEP_CPP_EDITF) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\codeview.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_CODEV=\ + {$(INCLUDE)}"\.\Codeview.hpp"\ + {$(INCLUDE)}"\.\Editfnd.hpp"\ + {$(INCLUDE)}"\.\Find.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Clipbrd.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\fndtextx.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Keydata.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\range.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\riched.hpp"\ + {$(INCLUDE)}"\Common\Richedit.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\winuser.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Fileio\Fileio.hpp"\ + {$(INCLUDE)}"\printman\Abortdlg.hpp"\ + {$(INCLUDE)}"\printman\Printer.hpp"\ + {$(INCLUDE)}"\printman\Printman.hpp"\ + + +"$(INTDIR)\codeview.obj" : $(SOURCE) $(DEP_CPP_CODEV) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_CODEV=\ + {$(INCLUDE)}"\.\Codeview.hpp"\ + {$(INCLUDE)}"\.\Editfnd.hpp"\ + {$(INCLUDE)}"\.\Find.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Clipbrd.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\fndtextx.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Keydata.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\range.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\riched.hpp"\ + {$(INCLUDE)}"\Common\Richedit.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\winuser.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Fileio\Fileio.hpp"\ + {$(INCLUDE)}"\printman\Abortdlg.hpp"\ + {$(INCLUDE)}"\printman\Printer.hpp"\ + {$(INCLUDE)}"\printman\Printman.hpp"\ + + +"$(INTDIR)\codeview.obj" : $(SOURCE) $(DEP_CPP_CODEV) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\msfileio.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\msdialog.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\toolbar.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\printman.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\asm6811.lib + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\m68reg.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_M68RE=\ + {$(INCLUDE)}"\.\m68reg.hpp"\ + + +"$(INTDIR)\m68reg.obj" : $(SOURCE) $(DEP_CPP_M68RE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_M68RE=\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\m68reg.hpp"\ + {$(INCLUDE)}"\.\settings.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\m68reg.obj" : $(SOURCE) $(DEP_CPP_M68RE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Splash.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_SPLAS=\ + {$(INCLUDE)}"\.\Splash.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Resbmp.hpp"\ + {$(INCLUDE)}"\Common\Resdata.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Splash.obj" : $(SOURCE) $(DEP_CPP_SPLAS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_SPLAS=\ + {$(INCLUDE)}"\.\Splash.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Resbmp.hpp"\ + {$(INCLUDE)}"\Common\Resdata.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Splash.obj" : $(SOURCE) $(DEP_CPP_SPLAS) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Odlstled.cpp +DEP_CPP_ODLST=\ + {$(INCLUDE)}"\.\Odlstled.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Drawitem.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Measure.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Odlstled.obj" : $(SOURCE) $(DEP_CPP_ODLST) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mcuview.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MCUVI=\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\mcudlg.hpp"\ + {$(INCLUDE)}"\.\mcuthrd.hpp"\ + {$(INCLUDE)}"\.\mcuview.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\mcuview.obj" : $(SOURCE) $(DEP_CPP_MCUVI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MCUVI=\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\mcudlg.hpp"\ + {$(INCLUDE)}"\.\mcuthrd.hpp"\ + {$(INCLUDE)}"\.\mcuview.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\mcuview.obj" : $(SOURCE) $(DEP_CPP_MCUVI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mcudlg.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MCUDL=\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\mcudlg.hpp"\ + {$(INCLUDE)}"\.\Odlstled.hpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\mcudlg.obj" : $(SOURCE) $(DEP_CPP_MCUDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MCUDL=\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\mcudlg.hpp"\ + {$(INCLUDE)}"\.\Odlstled.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\mcudlg.obj" : $(SOURCE) $(DEP_CPP_MCUDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mcuthrd.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MCUTH=\ + {$(INCLUDE)}"\.\commctrl.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\mcuthrd.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\mcuthrd.obj" : $(SOURCE) $(DEP_CPP_MCUTH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MCUTH=\ + {$(INCLUDE)}"\.\commctrl.hpp"\ + {$(INCLUDE)}"\.\commstat.hpp"\ + {$(INCLUDE)}"\.\dcb.hpp"\ + {$(INCLUDE)}"\.\m68hc11.h"\ + {$(INCLUDE)}"\.\m68hc11.hpp"\ + {$(INCLUDE)}"\.\mcuthrd.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\mcuthrd.obj" : $(SOURCE) $(DEP_CPP_MCUTH) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/m68hc11/M68HC11.GID b/m68hc11/M68HC11.GID new file mode 100644 index 0000000..5650533 Binary files /dev/null and b/m68hc11/M68HC11.GID differ diff --git a/m68hc11/M68HC11.HLP b/m68hc11/M68HC11.HLP new file mode 100644 index 0000000..cbe9c9e Binary files /dev/null and b/m68hc11/M68HC11.HLP differ diff --git a/m68hc11/M68HC11.HPP b/m68hc11/M68HC11.HPP new file mode 100644 index 0000000..3d5ee7c --- /dev/null +++ b/m68hc11/M68HC11.HPP @@ -0,0 +1,6 @@ +#ifndef _M68HC11_M68HC11_HPP_ +#define _M68HC11_M68HC11_HPP_ +#ifndef _M68HC11_M68HC11_H_ +#include +#endif +#endif diff --git a/m68hc11/M68HC11.PLG b/m68hc11/M68HC11.PLG new file mode 100644 index 0000000..ba44636 --- /dev/null +++ b/m68hc11/M68HC11.PLG @@ -0,0 +1,580 @@ + + +
+

Build Log

+

+--------------------Configuration: bsptree - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16E.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /O2 /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "_WINDOWS" /D "WIN32" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\BSPTREE\Bsptmpl.cpp" +"F:\work\BSPTREE\Rgbtree.cpp" +"F:\work\BSPTREE\Stdtmpl.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16E.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msbsp.lib" .\msvcobj\Bsptmpl.obj .\msvcobj\Rgbtree.obj .\msvcobj\Stdtmpl.obj " +

Output Window

+Compiling... +Bsptmpl.cpp +Rgbtree.cpp +Stdtmpl.cpp +Generating Code... +Creating library... +

+--------------------Configuration: common - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16F.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\COMMON\accelerator.cpp" +"F:\work\COMMON\Bitmap.cpp" +"F:\work\COMMON\Bminfo.cpp" +"F:\work\COMMON\Bmplnk.cpp" +"F:\work\COMMON\Brush.cpp" +"F:\work\COMMON\Btnlnk.cpp" +"F:\work\COMMON\calendar.cpp" +"F:\work\COMMON\Catmull.cpp" +"F:\work\COMMON\Cbdata.cpp" +"F:\work\COMMON\Cbdatahk.cpp" +"F:\work\COMMON\Clipbrd.cpp" +"F:\work\COMMON\Console.cpp" +"F:\work\COMMON\Control.cpp" +"F:\work\COMMON\Crsctrl.cpp" +"F:\work\COMMON\Ddemsg.cpp" +"F:\work\COMMON\Dib.cpp" +"F:\work\COMMON\Diskinfo.cpp" +"F:\work\COMMON\Drawbmp.cpp" +"F:\work\COMMON\Dwindow.cpp" +"F:\work\COMMON\elastic.cpp" +"F:\work\COMMON\errormsg.cpp" +"F:\work\COMMON\File.cpp" +"F:\work\COMMON\Fileio.cpp" +"F:\work\COMMON\Filemap.cpp" +"F:\work\COMMON\Finddata.cpp" +"F:\work\COMMON\Font.cpp" +"F:\work\COMMON\gdipoint.cpp" +"F:\work\COMMON\Guiwnd.cpp" +"F:\work\COMMON\Hookproc.cpp" +"F:\work\COMMON\Iconfrm.cpp" +"F:\work\COMMON\Infowin.cpp" +"F:\work\COMMON\Intel.cpp" +"F:\work\COMMON\Iobuff.cpp" +"F:\work\COMMON\Logowin.cpp" +"F:\work\COMMON\Macro.cpp" +"F:\work\COMMON\Math.cpp" +"F:\work\COMMON\Mdifrm.cpp" +"F:\work\COMMON\Mdiwin.cpp" +"F:\work\COMMON\Memfile.cpp" +"F:\work\COMMON\Mmtimer.cpp" +"F:\work\COMMON\Odbutton.cpp" +"F:\work\COMMON\Odlist.cpp" +"F:\work\COMMON\Odlstalt.cpp" +"F:\work\COMMON\Odlstchk.cpp" +"F:\work\COMMON\opendlg.Cpp" +"F:\work\COMMON\Openfile.cpp" +"F:\work\COMMON\opndlgex.cpp" +"F:\work\COMMON\Owner.cpp" +"F:\work\COMMON\Pathfnd.cpp" +"F:\work\COMMON\Point.cpp" +"F:\work\COMMON\Process.cpp" +"F:\work\COMMON\Profile.cpp" +"F:\work\COMMON\Progress.cpp" +"F:\work\COMMON\Purebmp.cpp" +"F:\work\COMMON\Purebyte.cpp" +"F:\work\COMMON\puredbl.cpp" +"F:\work\COMMON\Puredwrd.cpp" +"F:\work\COMMON\Purehdc.cpp" +"F:\work\COMMON\puremenu.Cpp" +"F:\work\COMMON\Purepal.cpp" +"F:\work\COMMON\purewrd.cpp" +"F:\work\COMMON\Pview.cpp" +"F:\work\COMMON\Regkey.cpp" +"F:\work\COMMON\resbmp.cpp" +"F:\work\COMMON\Richedit.cpp" +"F:\work\COMMON\rubber.cpp" +"F:\work\COMMON\Sdate.cpp" +"F:\work\COMMON\Smrtstrm.cpp" +"F:\work\COMMON\snapshot.cpp" +"F:\work\COMMON\static.cpp" +"F:\work\COMMON\String.cpp" +"F:\work\COMMON\Systime.cpp" +"F:\work\COMMON\Vhandler.cpp" +"F:\work\COMMON\Vxdctrl.cpp" +"F:\work\COMMON\widestr.Cpp" +"F:\work\COMMON\Window.cpp" +"F:\work\COMMON\Wintimer.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP16F.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP170.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fp"msvcobj/common.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\COMMON\Bmdata.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP170.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP171.tmp" with contents +[ +/nologo /out:"..\exe\mscommon.lib" +.\msvcobj\accelerator.obj +.\msvcobj\Bitmap.obj +.\msvcobj\Bmdata.obj +.\msvcobj\Bminfo.obj +.\msvcobj\Bmplnk.obj +.\msvcobj\Brush.obj +.\msvcobj\Btnlnk.obj +.\msvcobj\calendar.obj +.\msvcobj\Catmull.obj +.\msvcobj\Cbdata.obj +.\msvcobj\Cbdatahk.obj +.\msvcobj\Clipbrd.obj +.\msvcobj\Console.obj +.\msvcobj\Control.obj +.\msvcobj\Crsctrl.obj +.\msvcobj\Ddemsg.obj +.\msvcobj\Dib.obj +.\msvcobj\Diskinfo.obj +.\msvcobj\Drawbmp.obj +.\msvcobj\Dwindow.obj +.\msvcobj\elastic.obj +.\msvcobj\errormsg.obj +.\msvcobj\File.obj +.\msvcobj\Fileio.obj +.\msvcobj\Filemap.obj +.\msvcobj\Finddata.obj +.\msvcobj\Font.obj +.\msvcobj\gdipoint.obj +.\msvcobj\Guiwnd.obj +.\msvcobj\Hookproc.obj +.\msvcobj\Iconfrm.obj +.\msvcobj\Infowin.obj +.\msvcobj\Intel.obj +.\msvcobj\Iobuff.obj +.\msvcobj\Logowin.obj +.\msvcobj\Macro.obj +.\msvcobj\Math.obj +.\msvcobj\Mdifrm.obj +.\msvcobj\Mdiwin.obj +.\msvcobj\Memfile.obj +.\msvcobj\Mmtimer.obj +.\msvcobj\Odbutton.obj +.\msvcobj\Odlist.obj +.\msvcobj\Odlstalt.obj +.\msvcobj\Odlstchk.obj +.\msvcobj\opendlg.obj +.\msvcobj\Openfile.obj +.\msvcobj\opndlgex.obj +.\msvcobj\Owner.obj +.\msvcobj\Pathfnd.obj +.\msvcobj\Point.obj +.\msvcobj\Process.obj +.\msvcobj\Profile.obj +.\msvcobj\Progress.obj +.\msvcobj\Purebmp.obj +.\msvcobj\Purebyte.obj +.\msvcobj\puredbl.obj +.\msvcobj\Puredwrd.obj +.\msvcobj\Purehdc.obj +.\msvcobj\puremenu.obj +.\msvcobj\Purepal.obj +.\msvcobj\purewrd.obj +.\msvcobj\Pview.obj +.\msvcobj\Regkey.obj +.\msvcobj\resbmp.obj +.\msvcobj\Richedit.obj +.\msvcobj\rubber.obj +.\msvcobj\Sdate.obj +.\msvcobj\Smrtstrm.obj +.\msvcobj\snapshot.obj +.\msvcobj\static.obj +.\msvcobj\String.obj +.\msvcobj\Systime.obj +.\msvcobj\Vhandler.obj +.\msvcobj\Vxdctrl.obj +.\msvcobj\widestr.obj +.\msvcobj\Window.obj +.\msvcobj\Wintimer.obj +] +Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP171.tmp" +

Output Window

+Compiling... +accelerator.cpp +Bitmap.cpp +Bminfo.cpp +Bmplnk.cpp +Brush.cpp +Btnlnk.cpp +calendar.cpp +Catmull.cpp +Cbdata.cpp +Cbdatahk.cpp +Clipbrd.cpp +Console.cpp +Control.cpp +Crsctrl.cpp +Ddemsg.cpp +Dib.cpp +Diskinfo.cpp +Drawbmp.cpp +Dwindow.cpp +elastic.cpp +Generating Code... +Compiling... +errormsg.cpp +File.cpp +Fileio.cpp +Filemap.cpp +Finddata.cpp +Font.cpp +gdipoint.cpp +Guiwnd.cpp +Hookproc.cpp +Iconfrm.cpp +Infowin.cpp +Intel.cpp +Iobuff.cpp +Logowin.cpp +Macro.cpp +Math.cpp +Mdifrm.cpp +Mdiwin.cpp +Memfile.cpp +Mmtimer.cpp +Generating Code... +Compiling... +Odbutton.cpp +Odlist.cpp +Odlstalt.cpp +Odlstchk.cpp +opendlg.Cpp +Openfile.cpp +opndlgex.cpp +Owner.cpp +Pathfnd.cpp +Point.cpp +Process.cpp +Profile.cpp +Progress.cpp +Purebmp.cpp +Purebyte.cpp +puredbl.cpp +Puredwrd.cpp +Purehdc.cpp +puremenu.Cpp +Purepal.cpp +Generating Code... +Compiling... +purewrd.cpp +Pview.cpp +Regkey.cpp +resbmp.cpp +Richedit.cpp +rubber.cpp +Sdate.cpp +Smrtstrm.cpp +snapshot.cpp +static.cpp +String.cpp +Systime.cpp +Vhandler.cpp +Vxdctrl.cpp +widestr.Cpp +Window.cpp +Wintimer.cpp +Generating Code... +Compiling... +Bmdata.cpp +Creating library... +

+--------------------Configuration: dialog - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP172.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\DIALOG\Dlgtmpl.cpp" +"F:\work\DIALOG\Dyndlg.cpp" +"F:\work\DIALOG\Stdtmpl.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP172.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msdialog.lib" .\msvcobj\Dlgtmpl.obj .\msvcobj\Dyndlg.obj .\msvcobj\Stdtmpl.obj " +

Output Window

+Compiling... +Dlgtmpl.cpp +Dyndlg.cpp +Stdtmpl.cpp +Creating library... +

+--------------------Configuration: fileio - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP173.bat" with contents +[ +@echo off +c:\masm32\bin\ml /c /Zi /coff cfile.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP173.bat" +Creating command line "link.exe -lib /nologo /out:"..\exe\msfileio.lib" .\cfile.obj " +Performing Custom Build Step on .\cfile.asm +Microsoft (R) Macro Assembler Version 6.14.8444 +Copyright (C) Microsoft Corp 1981-1997. All rights reserved. + + Assembling: cfile.asm +

Output Window

+Creating library... +

+--------------------Configuration: libasm68 - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP174.tmp" with contents +[ +/nologo /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/libasm68.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\AS68HC11\asm6811.cpp" +"F:\work\AS68HC11\Cacheblk.cpp" +"F:\work\AS68HC11\Fmtlines.cpp" +"F:\work\AS68HC11\instrctn.cpp" +"F:\work\AS68HC11\Main.cpp" +"F:\work\AS68HC11\mode.cpp" +"F:\work\AS68HC11\Parse.cpp" +"F:\work\AS68HC11\S19Generator.cpp" +"F:\work\AS68HC11\Scan.cpp" +"F:\work\AS68HC11\symbol.cpp" +"F:\work\AS68HC11\Table.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP174.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP175.tmp" with contents +[ +/nologo /out:"..\exe\asm6811.lib" +.\msvcobj\asm6811.obj +.\msvcobj\Cacheblk.obj +.\msvcobj\Fmtlines.obj +.\msvcobj\instrctn.obj +.\msvcobj\Main.obj +.\msvcobj\mode.obj +.\msvcobj\Parse.obj +.\msvcobj\S19Generator.obj +.\msvcobj\Scan.obj +.\msvcobj\symbol.obj +.\msvcobj\Table.obj +] +Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP175.tmp" +

Output Window

+Compiling... +asm6811.cpp +Cacheblk.cpp +Fmtlines.cpp +instrctn.cpp +Main.cpp +mode.cpp +Parse.cpp +S19Generator.cpp +Scan.cpp +symbol.cpp +Table.cpp +Creating library... +

+--------------------Configuration: printman - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP176.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/Printman.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"F:\work\printman\Abortdlg.cpp" +"F:\work\printman\pickdlg.cpp" +"F:\work\printman\Printman.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP176.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\printman.lib" .\msvcobj\Abortdlg.obj .\msvcobj\pickdlg.obj .\msvcobj\Printman.obj " +

Output Window

+Compiling... +Abortdlg.cpp +pickdlg.cpp +Printman.cpp +Creating library... +

+--------------------Configuration: statbar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP177.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"\work\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\STATBAR\Popup.cpp" +"F:\work\STATBAR\Statbar.cpp" +"F:\work\STATBAR\statbarx.cpp" +"F:\work\STATBAR\Statinfo.cpp" +"F:\work\STATBAR\statlogo.cpp" +"F:\work\STATBAR\Statmenu.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP177.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\statbar.lib" .\msvcobj\Popup.obj .\msvcobj\Statbar.obj .\msvcobj\statbarx.obj .\msvcobj\Statinfo.obj .\msvcobj\statlogo.obj .\msvcobj\Statmenu.obj " +

Output Window

+Compiling... +Popup.cpp +Statbar.cpp +statbarx.cpp +Statinfo.cpp +statlogo.cpp +Statmenu.cpp +Creating library... +

+--------------------Configuration: thread - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP178.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\THREAD\Event.cpp" +"F:\work\THREAD\Msgqueue.cpp" +"F:\work\THREAD\Mthread.cpp" +"F:\work\THREAD\Mutex.cpp" +"F:\work\THREAD\Ptcllbck.cpp" +"F:\work\THREAD\Qthread.cpp" +"F:\work\THREAD\Stdtmpl.cpp" +"F:\work\THREAD\Thread.cpp" +"F:\work\THREAD\thtimer.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP178.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msthread.lib" .\msvcobj\Event.obj .\msvcobj\Msgqueue.obj .\msvcobj\Mthread.obj .\msvcobj\Mutex.obj .\msvcobj\Ptcllbck.obj .\msvcobj\Qthread.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Thread.obj .\msvcobj\thtimer.obj " +

Output Window

+Compiling... +Event.cpp +Msgqueue.cpp +Mthread.cpp +Mutex.cpp +Ptcllbck.cpp +Qthread.cpp +Stdtmpl.cpp +Thread.cpp +thtimer.cpp +Creating library... +

+--------------------Configuration: toolbar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP179.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/Toolbar.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\TOOLBAR\toolbar.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP179.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\toolbar.lib" .\msvcobj\toolbar.obj " +

Output Window

+Compiling... +toolbar.cpp +Creating library... +

+--------------------Configuration: hookproc - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17A.tmp" with contents +[ +/nologo /Gz /MTd /GX /ZI /Od /I "\cortex" /I "\parts" /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/hookproc.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"F:\work\hookproc\Apientry.cpp" +"F:\work\hookproc\enumdesk.cpp" +"F:\work\hookproc\enumstation.cpp" +"F:\work\hookproc\enumwin.cpp" +"F:\work\hookproc\Msghook.cpp" +"F:\work\hookproc\ofnhook.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17A.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mshook.lib" .\msvcobj\Apientry.obj .\msvcobj\enumdesk.obj .\msvcobj\enumstation.obj .\msvcobj\enumwin.obj .\msvcobj\Msghook.obj .\msvcobj\ofnhook.obj " +

Output Window

+Compiling... +Apientry.cpp +enumdesk.cpp +enumstation.cpp +enumwin.cpp +Msghook.cpp +ofnhook.cpp +Creating library... +

+--------------------Configuration: m68hc11 - Win32 Debug-------------------- +

+

Command Lines

+Creating command line "rc.exe /l 0x409 /fo".\msvcobj/m68hc11.res" /d "_DEBUG" "F:\work\m68hc11\m68hc11.rc"" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17B.tmp" with contents +[ +/nologo /MTd /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/m68hc11.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\m68hc11\CMPDlg.cpp" +"F:\work\m68hc11\codeview.cpp" +"F:\work\m68hc11\commctrl.cpp" +"F:\work\m68hc11\dcb.cpp" +"F:\work\m68hc11\Editfnd.cpp" +"F:\work\m68hc11\Find.cpp" +"F:\work\m68hc11\fmtlines.cpp" +"F:\work\m68hc11\m68reg.cpp" +"F:\work\m68hc11\Main.cpp" +"F:\work\m68hc11\mainfrm.cpp" +"F:\work\m68hc11\mcudlg.cpp" +"F:\work\m68hc11\mcuthrd.cpp" +"F:\work\m68hc11\mcuview.cpp" +"F:\work\m68hc11\Odlstled.cpp" +"F:\work\m68hc11\OPENDIR.CPP" +"F:\work\m68hc11\Serdlg.cpp" +"F:\work\m68hc11\Splash.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17B.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17C.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/m68hc11.pdb" /debug /machine:I386 /out:".\msvcobj/m68hc11.exe" +.\msvcobj\CMPDlg.obj +.\msvcobj\codeview.obj +.\msvcobj\commctrl.obj +.\msvcobj\dcb.obj +.\msvcobj\Editfnd.obj +.\msvcobj\Find.obj +.\msvcobj\fmtlines.obj +.\msvcobj\m68reg.obj +.\msvcobj\Main.obj +.\msvcobj\mainfrm.obj +.\msvcobj\mcudlg.obj +.\msvcobj\mcuthrd.obj +.\msvcobj\mcuview.obj +.\msvcobj\Odlstled.obj +.\msvcobj\OPENDIR.OBJ +.\msvcobj\Serdlg.obj +.\msvcobj\Splash.obj +.\msvcobj\m68hc11.res +\work\exe\msbsp.lib +\work\exe\mscommon.lib +\work\exe\msdialog.lib +\work\exe\msfileio.lib +\work\exe\asm6811.lib +\work\exe\printman.lib +\work\exe\statbar.lib +\work\exe\msthread.lib +\work\exe\toolbar.lib +\work\exe\mshook.lib +] +Creating command line "link.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP17C.tmp" +

Output Window

+Compiling resources... +Compiling... +CMPDlg.cpp +codeview.cpp +commctrl.cpp +dcb.cpp +Editfnd.cpp +Find.cpp +fmtlines.cpp +m68reg.cpp +Main.cpp +mainfrm.cpp +mcudlg.cpp +mcuthrd.cpp +mcuview.cpp +Odlstled.cpp +OPENDIR.CPP +Serdlg.cpp +Splash.cpp +Linking... + Creating library .\msvcobj/m68hc11.lib and object .\msvcobj/m68hc11.exp + + + +

Results

+m68hc11.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/m68hc11/M68HC11.RWS b/m68hc11/M68HC11.RWS new file mode 100644 index 0000000..e11ced0 Binary files /dev/null and b/m68hc11/M68HC11.RWS differ diff --git a/m68hc11/M68HC11.~H b/m68hc11/M68HC11.~H new file mode 100644 index 0000000..2c1607e --- /dev/null +++ b/m68hc11/M68HC11.~H @@ -0,0 +1,149 @@ +#ifndef _M68HC11_M68HC11_H_ +#define _M68HC11_M68HC11_H_ + +#define MCUDLG_REGISTERS 101 +#define MCUDLG_CCR 102 +#define MCUDLG_PC 103 +#define MCUDLG_SP 104 +#define MCUDLG_Y 105 +#define MCUDLG_X 106 +#define MCUDLG_A 107 +#define IDC_LISTBOX1 109 +#define MCUDLG_B 108 + +#define SERIAL_STOP 104 +#define SERIAL_PARITY 105 +#define SERIAL_APPLY 106 +#define SERIAL_TEST 107 +#define SERIAL_DATA 103 +#define SERIAL_BAUD 102 +#define SERIAL_PORT 101 + +#define SBCMENU_FILENEW 500 +#define SBCMENU_FILEOPEN 501 +#define SBCMENU_FILESAVE 502 +#define SBCMENU_FILESAVEAS 503 +#define SBCMENU_FILEPRINT 504 +#define SBCMENU_FILEQUIT 505 +#define SBCMENU_FILECLOSE 506 +#define SBCMENU_EDITCUT 507 +#define SBCMENU_EDITCOPY 508 +#define SBCMENU_EDITPASTE 509 +#define SBCMENU_EDITFIND 510 +#define SBCMENU_SETTINGSSERIAL 511 +#define SBCMENU_CODECOMPILE 512 +#define SBCMENU_CODECOMPILEANDLOAD 513 +#define SBCMENU_HELPCONTENTS 514 +#define SBCMENU_HELPSEARCH 515 +#define SBCMENU_REGISTRATION 516 +#define SBCMENU_HELPABOUT 517 + +#define IDM_CASCADE 10013 +#define IDM_TILE 10014 +#define IDM_ARRANGE 10015 +#define IDM_CLOSEALL 10016 +#define IDM_MINIMIZEALL 10017 +#define IDM_RESTOREALL 10018 + +#define STRING_M68KEYNAME 600 +#define STRING_HISTORYKEYNAME 601 +#define STRING_SETTINGSKEYNAME 602 +#define STRING_SERIALKEYNAME 603 +#define STRING_HISTORYKEYSHORTNAME 604 +#define STRING_SETTINGSEMAIL 605 +#define STRING_SERIALPORT 606 +#define STRING_SERIALBAUD 607 +#define STRING_SERIALDATA 608 +#define STRING_SERIALPARITY 609 +#define STRING_SERIALSTOP 610 +#define STRING_COM1 611 +#define STRING_COM2 612 +#define STRING_COM3 613 +#define STRING_COM4 614 + +#define STRING_CODEVIEWCLASSNAME 500 +#define STRING_MCUVIEWCLASSNAME 501 +#define STRING_UNTITLED 502 +#define STRING_HELPFILENAME 503 + +#define STRING_REGISTERPORTA 700 +#define STRING_REGISTERRESERVED1 701 +#define STRING_REGISTERPIOC 702 +#define STRING_REGISTERPORTC 703 +#define STRING_REGISTERPORTB 704 +#define STRING_REGISTERPORTCL 705 +#define STRING_REGISTERRESERVED2 706 +#define STRING_REGISTERDDRC 707 +#define STRING_REGISTERPORTD 708 +#define STRING_REGISTERDDRD 709 +#define STRING_REGISTERPORTE 710 +#define STRING_REGISTERCFORC 711 +#define STRING_REGISTEROC1M 712 +#define STRING_REGISTEROC1D 713 +#define STRING_REGISTERTCNTH1 714 +#define STRING_REGISTERTCNTLO 715 +#define STRING_REGISTERTIC1HI 716 +#define STRING_REGISTERTIC1LO 717 +#define STRING_REGISTERTIC2HI 718 +#define STRING_REGISTERTIC2LO 719 +#define STRING_REGISTERTIC3HI 720 +#define STRING_REGISTERTIC3LO 721 +#define STRING_REGISTERTOC1HI 722 +#define STRING_REGISTERTOC1LO 723 +#define STRING_REGISTERTOC2HI 724 +#define STRING_REGISTERTOC2LO 725 +#define STRING_REGISTERTOC3HI 726 +#define STRING_REGISTERTOC3LO 727 +#define STRING_REGISTERTOC4HI 728 +#define STRING_REGISTERTOC4LO 729 +#define STRING_REGISTERTI405HI 730 +#define STRING_REGISTERTI405LO 731 +#define STRING_REGISTERTCTL1 732 +#define STRING_REGISTERTCTL2 733 +#define STRING_REGISTERTMSK1 734 +#define STRING_REGISTERTFLG1 735 +#define STRING_REGISTERTMSK2 736 +#define STRING_REGISTERTFLG2 737 +#define STRING_REGISTERPACTL 738 +#define STRING_REGISTERPACNT 739 +#define STRING_REGISTERSPCR 740 +#define STRING_REGISTERSPSR 741 +#define STRING_REGISTERSPDR 742 +#define STRING_REGISTERBAUD 743 +#define STRING_REGISTERSCCR1 744 +#define STRING_REGISTERSCCR2 745 +#define STRING_REGISTERSCSR 746 +#define STRING_REGISTERSCDR 747 +#define STRING_REGISTERADCTL 748 +#define STRING_REGISTERADR1 749 +#define STRING_REGISTERADR2 750 +#define STRING_REGISTERADR3 751 +#define STRING_REGISTERADR4 752 +#define STRING_REGISTERBPROT 753 +#define STRING_REGISTEREPROG 754 +#define STRING_REGISTERRESERVED3 755 +#define STRING_REGISTERRESERVED4 756 +#define STRING_REGISTEROPTION 757 +#define STRING_REGISTERCOPRST 758 +#define STRING_REGISTERPPROG 759 +#define STRING_REGISTERHPRIO 760 +#define STRING_REGISTERINIT 761 +#define STRING_REGISTERTEST1 762 +#define STRING_REGISTERCONFIG 763 + +#define STRING_ERRORFILEOPEN 764 +#define STRING_ERRORPORTOPEN 765 +#define STRING_ERRORPORTSETTINGS 766 +#define STRING_ERRORTIMEOUT 767 +#define STRING_ERRORREADERROR 768 +#define STRING_ERRORTALKBACKFAILURE 769 +#define STRING_ERRORTALKBACKDATA 770 + +#define STRING_EVENTSINGLEBYTE 771 +#define STRING_EVENTQUADBYTE 772 +#define STRING_EVENTVARBYTE 773 +#define STRING_EVENTREGDATASTART 774 +#define STRING_EVENTREGDATACOMPLETE 775 +#define STRING_EVENTCODECOMPLETE 776 +#define STRING_EVENTDOUBLEBYTE 777 +#endif diff --git a/m68hc11/M68HC11.~RC b/m68hc11/M68HC11.~RC new file mode 100644 index 0000000..2d854b3 --- /dev/null +++ b/m68hc11/M68HC11.~RC @@ -0,0 +1,295 @@ +#include +#include + +APP ICON "MOT.ICO" +MOT ICON "MOT.ICO" +DOC ICON "DOC.ICO" +BLANK BITMAP "BLANK.BMP" +ONE BITMAP "ONE.BMP" +ZERO BITMAP "ZERO.BMP" +DASH BITMAP "DASH.BMP" +SPLASH BITMAP "SPLASH.BMP" + +mainMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Settings" + BEGIN + MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + +codeMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN + MENUITEM "&Close", SBCMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE + MENUITEM "Save &As...", SBCMENU_FILESAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X" SBCMENU_EDITCUT + MENUITEM "&Copy\tCtrl+C" SBCMENU_EDITCOPY + MENUITEM "&Paste\tCtrl+V" SBCMENU_EDITPASTE + MENUITEM SEPARATOR + MENUITEM "&Find...\tAlt+F3" SBCMENU_EDITFIND + END + POPUP "&Settings" + BEGIN + MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL + END + POPUP "&Code" + BEGIN + MENUITEM "&Compile\tCtrl+C", SBCMENU_CODECOMPILE + MENUITEM "Compile and Load\tCtrl+P", SBCMENU_CODECOMPILEANDLOAD + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + +mcuMenu MENU +{ + POPUP "&File" + { + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW, GRAYED + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN, GRAYED + MENUITEM "&Close", SBCMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE, GRAYED + MENUITEM "Save &As...", SBCMENU_FILESAVEAS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + } + + POPUP "&Edit" + { + MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT + MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY + MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE + MENUITEM SEPARATOR + MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND + } + + POPUP "&Window" + { + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + } + + POPUP "&Help" + { + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + } +} + +SERIAL DIALOG 6, 15, 207, 111 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Serial Setup" +FONT 6, "MS Sans Serif" +{ + DEFPUSHBUTTON "OK", IDOK, 153, 3, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 153, 18, 50, 14 + PUSHBUTTON "Test", SERIAL_TEST, 153, 32, 50, 14 + PUSHBUTTON "Apply", SERIAL_APPLY, 153, 46, 50, 14 + COMBOBOX SERIAL_BAUD, 30, 24, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX SERIAL_DATA, 30, 37, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX SERIAL_PARITY, 30, 63, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX SERIAL_PORT, 30, 11, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Port:", -1, 3, 14, 18, 8 + LTEXT "Baud:", -1, 3, 27, 21, 8 + LTEXT "Data:", -1, 3, 40, 20, 8 + LTEXT "Stop:", -1, 4, 53, 19, 8 + LTEXT "Parity:", -1, 3, 65, 19, 8 + COMBOBOX SERIAL_STOP, 30, 50, 49, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +} + +MCUDLG DIALOG 6, 5, 358, 174 +STYLE DS_MODALFRAME | 0x4L | WS_CHILD | WS_VISIBLE +FONT 6, "MS Sans Serif" +{ + DEFPUSHBUTTON "Start", IDOK, 254, 5, 50, 14 + PUSHBUTTON "Quit", IDCANCEL, 304, 5, 50, 14 + LISTBOX MCUDLG_REGISTERS, 15, 38, 144, 129, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS + EDITTEXT MCUDLG_A, 217, 37, 38, 12 + EDITTEXT MCUDLG_B, 256, 37, 38, 12 + EDITTEXT MCUDLG_X, 217, 50, 38, 12 + EDITTEXT MCUDLG_Y, 256, 50, 38, 12 + EDITTEXT MCUDLG_SP, 217, 63, 38, 12 + EDITTEXT MCUDLG_PC, 256, 63, 38, 12 + EDITTEXT MCUDLG_CCR, 217, 76, 38, 12 + LISTBOX IDC_LISTBOX1, 168, 107, 177, 60, LBS_STANDARD + CTEXT "MCU Registers", -1, 44, 26, 60, 8 + CTEXT "Processor", -1, 203, 26, 49, 8 + LTEXT "Accumulator A", -1, 165, 40, 51, 8 + LTEXT "Accumulator B", -1, 297, 39, 49, 8 + LTEXT "Index Register X", -1, 163, 52, 56, 8 + LTEXT "Index Register Y", -1, 296, 51, 55, 8 + LTEXT "SP", -1, 201, 65, 13, 8 + LTEXT "PC", -1, 297, 64, 10, 8 + LTEXT "CCR", -1, 198, 78, 16, 8 + GROUPBOX "", -1, 2, 19, 349, 154, BS_GROUPBOX + LTEXT "Debug Messages", -1, 225, 95, 60, 8 +} + +STRINGTABLE +{ + STRING_M68KEYNAME, "Software\\Diversified\\M68HC11" + STRING_HISTORYKEYNAME, "Software\\Diversified\\M68HC11\\History" + STRING_SETTINGSKEYNAME, "Software\\Diversified\\M68HC11\\Settings" + STRING_SERIALKEYNAME, "Software\\Diversified\\M68HC11\\Serial" + STRING_HISTORYKEYSHORTNAME, "History" + STRING_SETTINGSEMAIL, "EMAIL" + STRING_SERIALPORT, "Port" + STRING_SERIALBAUD, "Baud" + STRING_SERIALDATA, "Data" + STRING_SERIALPARITY, "Parity" + STRING_SERIALSTOP, "Stop" + STRING_COM1, "COM1" + STRING_COM2, "COM2" + STRING_COM3, "COM3" + STRING_COM4, "COM4" +} + +STRINGTABLE +{ + STRING_CODEVIEWCLASSNAME, "CodeView" + STRING_MCUVIEWCLASSNAME, "MCUView" + STRING_UNTITLED, "Untitled" + STRING_HELPFILENAME, "m68hc11.hlp" + STRING_ERRORFILEOPEN, "Error opening '" + STRING_ERRORPORTOPEN, "Error opening communications port." + STRING_ERRORPORTSETTINGS, "Error initializing port settings." + STRING_ERRORTIMEOUT, "Timeout waiting for device." + STRING_ERRORREADERROR, "Error reading from device." + STRING_ERRORTALKBACKFAILURE, "Error receiving response from device" + STRING_ERRORTALKBACKDATA, "Error validating code load" + STRING_EVENTSINGLEBYTE, "Received single-byte event." + STRING_EVENTQUADBYTE, "Received quad-byte event." + STRING_EVENTDOUBLEBYTE, "Received double-byte event." + STRING_EVENTVARBYTE, "Received variable-byte event." + STRING_EVENTREGDATASTART, "Receiving register data..." + STRING_EVENTREGDATACOMPLETE, "Register receive complete." + STRING_EVENTCODECOMPLETE, "Received code completion event." +} + +STRINGTABLE +{ + STRING_REGISTERPORTA, "PORTA" + STRING_REGISTERRESERVED1, "RESERVED" + STRING_REGISTERPIOC, "PIOC" + STRING_REGISTERPORTC, "PORTC" + STRING_REGISTERPORTB, "PORTB" + STRING_REGISTERPORTCL, "PORTCL" + STRING_REGISTERRESERVED2, "RESERVED" + STRING_REGISTERDDRC, "DDRC" + STRING_REGISTERPORTD, "PORTD" + STRING_REGISTERDDRD, "DDRD" + STRING_REGISTERPORTE, "PORTE" + STRING_REGISTERCFORC, "CFORC" + STRING_REGISTEROC1M, "OC1M" + STRING_REGISTEROC1D, "OC1D" + STRING_REGISTERTCNTH1, "TCNT(Hi)" + STRING_REGISTERTCNTLO, "TCNT(Lo)" + STRING_REGISTERTIC1HI, "TIC1(Hi)" + STRING_REGISTERTIC1LO, "TIC1(Lo)" + STRING_REGISTERTIC2HI, "TIC2(Hi)" + STRING_REGISTERTIC2LO, "TIC2(Lo)" + STRING_REGISTERTIC3HI, "TIC3(Hi)" + STRING_REGISTERTIC3LO, "TIC3(Lo)" + STRING_REGISTERTOC1HI, "TOC1(Hi)" + STRING_REGISTERTOC1LO, "TOC1(Lo)" + STRING_REGISTERTOC2HI, "TOC2(Hi)" + STRING_REGISTERTOC2LO, "TOC2(Lo)" + STRING_REGISTERTOC3HI, "TOC3(Hi)" + STRING_REGISTERTOC3LO, "TOC3(Lo)" + STRING_REGISTERTOC4HI, "TOC4(Hi)" + STRING_REGISTERTOC4LO, "TOC4(Lo)" + STRING_REGISTERTI405HI, "TI405(Hi)" + STRING_REGISTERTI405LO, "TI4O5(Lo)" + STRING_REGISTERTCTL1, "TCTL1" + STRING_REGISTERTCTL2, "TCTL2" + STRING_REGISTERTMSK1, "TMSK1" + STRING_REGISTERTFLG1, "TFLG1" + STRING_REGISTERTMSK2, "TMSK2" + STRING_REGISTERTFLG2, "TFLG2" + STRING_REGISTERPACTL, "PACTL" + STRING_REGISTERPACNT, "PACNT" + STRING_REGISTERSPCR, "SPCR" + STRING_REGISTERSPSR, "SPSR" + STRING_REGISTERSPDR, "SPDR" + STRING_REGISTERBAUD, "BAUD" + STRING_REGISTERSCCR1, "SCCR1" + STRING_REGISTERSCCR2, "SCCR2" + STRING_REGISTERSCSR, "SCSR" + STRING_REGISTERSCDR, "SCDR" + STRING_REGISTERADCTL, "ADCTL" + STRING_REGISTERADR1, "ADR1" + STRING_REGISTERADR2, "ADR2" + STRING_REGISTERADR3, "ADR3" + STRING_REGISTERADR4, "ADR4" + STRING_REGISTERBPROT, "BPROT" + STRING_REGISTEREPROG, "EPROG" + STRING_REGISTERRESERVED3, "RESERVED" + STRING_REGISTERRESERVED4, "RESERVED" + STRING_REGISTEROPTION, "OPTION" + STRING_REGISTERCOPRST, "COPRST" + STRING_REGISTERPPROG, "PPROG" + STRING_REGISTERHPRIO, "HPRIO" + STRING_REGISTERINIT, "INIT" + STRING_REGISTERTEST1, "TEST1" + STRING_REGISTERCONFIG, "CONFIG" +} diff --git a/m68hc11/M68REG.CPP b/m68hc11/M68REG.CPP new file mode 100644 index 0000000..29e86c9 --- /dev/null +++ b/m68hc11/M68REG.CPP @@ -0,0 +1,261 @@ +#include +#include + +M68Reg::M68Reg(void) +: mM68KeyName(STRING_M68KEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mSerialKeyName(STRING_SERIALKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsEMAIL(STRING_SETTINGSEMAIL), + mSerialPort(STRING_SERIALPORT), + mSerialBaud(STRING_SERIALBAUD), + mSerialData(STRING_SERIALDATA), + mSerialParity(STRING_SERIALPARITY), + mSerialStop(STRING_SERIALSTOP), + mRegKeySettings(RegKey::CurrentUser), + mRegKeyHistory(RegKey::CurrentUser), + mRegKeySerial(RegKey::CurrentUser), + mPathDirKeyName(STRING_PATHDIRKEYNAME), + mPathDirKeyShortName(STRING_PATHDIRKEYSHORTNAME), + mRegKeyPathDir(RegKey::CurrentUser) +{ + guarantee(); + getCacheNames(); +} + +M68Reg::M68Reg(const M68Reg &someM68Reg) +: mM68KeyName(STRING_M68KEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mSerialKeyName(STRING_SERIALKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsEMAIL(STRING_SETTINGSEMAIL), + mSerialPort(STRING_SERIALPORT), + mSerialBaud(STRING_SERIALBAUD), + mSerialData(STRING_SERIALDATA), + mSerialParity(STRING_SERIALPARITY), + mSerialStop(STRING_SERIALSTOP), + mRegKeySettings(RegKey::CurrentUser), + mRegKeyHistory(RegKey::CurrentUser), + mRegKeySerial(RegKey::CurrentUser), + mPathDirKeyName(STRING_PATHDIRKEYNAME), + mPathDirKeyShortName(STRING_PATHDIRKEYSHORTNAME), + mRegKeyPathDir(RegKey::CurrentUser) +{ + *this=someM68Reg; +} + +M68Reg::~M68Reg() +{ +} + +M68Reg &M68Reg::operator=(const M68Reg &/*someM68Reg*/) +{ + return *this; +} + +void M68Reg::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +String M68Reg::email(void) +{ + String strEMAIL; + mRegKeySettings.queryValue(mSettingsEMAIL,strEMAIL); + return strEMAIL; +} + +void M68Reg::email(const String &email) +{ + mRegKeySettings.setValue(mSettingsEMAIL,email); +} + +bool M68Reg::setBaud(const String &strBaud) +{ + return mRegKeySerial.setValue(mSerialBaud,strBaud); +} + +String M68Reg::getBaud(void) +{ + String strBaud; + mRegKeySerial.queryValue(mSerialBaud,strBaud); + return strBaud; +} + +bool M68Reg::setParity(const String &strParity) +{ + return mRegKeySerial.setValue(mSerialParity,strParity); +} + +String M68Reg::getParity(void) +{ + String strParity; + mRegKeySerial.queryValue(mSerialParity,strParity); + return strParity; +} + +bool M68Reg::setDataBits(const String &strDataBits) +{ + return mRegKeySerial.setValue(mSerialData,strDataBits); +} + +String M68Reg::getDataBits(void) +{ + String strData; + mRegKeySerial.queryValue(mSerialData,strData); + return strData; +} + +bool M68Reg::setStopBits(const String &stopBits) +{ + return mRegKeySerial.setValue(mSerialStop,stopBits); +} + +String M68Reg::getStopBits(void) +{ + String strStop; + + mRegKeySerial.queryValue(mSerialStop,strStop); + return strStop; +} + +bool M68Reg::setPort(const String &strPort) +{ + return mRegKeySerial.setValue(mSerialPort,strPort); +} + +String M68Reg::getPort(void) +{ + String strPort; + mRegKeySerial.queryValue(mSerialPort,strPort); + return strPort; +} + +String M68Reg::getSerialSettings(void) +{ + String serialSettings; + + serialSettings+="baud="; + serialSettings+=getBaud(); + serialSettings+=" "; + serialSettings+="parity="; + serialSettings+=getParity(); + serialSettings+=" "; + serialSettings+="data="; + serialSettings+=getDataBits(); + serialSettings+=" "; + serialSettings+="stop="; + serialSettings+=getStopBits(); + return serialSettings; +} + +void M68Reg::guarantee(void) +{ + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + } + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeyPathDir.openKey(mPathDirKeyName)) + { + mRegKeyPathDir.createKey(mPathDirKeyName,""); + mRegKeyPathDir.openKey(mPathDirKeyName); + } + if(!mRegKeySerial.openKey(mSerialKeyName)) + { + CommControl commControl; + Block deviceList; + + commControl.enumerateDevices(deviceList); + mRegKeySerial.createKey(mSerialKeyName,""); + mRegKeySerial.openKey(mSerialKeyName); + setBaud("1200"); + setParity("N"); + setDataBits("8"); + setStopBits("1"); + setPort(deviceList.size()?deviceList[0]:"COM1"); + } +} + +BOOL M68Reg::isOkay(void)const +{ + return mRegKeySettings.isOkay()&&mRegKeyHistory.isOkay()&&mRegKeySerial.isOkay(); +} + +bool M68Reg::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +bool M68Reg::setHistory(Block &nameList) +{ + RegKey regKey(RegKey::CurrentUser); + mRegKeyHistory.closeKey(); + regKey.openKey(mM68KeyName); + regKey.deleteKey(mHistoryKeyShortName); + regKey.closeKey(); + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + for(int itemIndex=0;itemIndexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex &pathDirList) +{ + int itemIndex(0); + String entryName; + DWORD status; + + pathDirList.remove(); + while(mRegKeyPathDir.enumValue(itemIndex++,entryName,status)) + pathDirList.insert(&entryName); + return true; +} + +bool M68Reg::setIncludePath(Block &pathDirList) +{ + removeIncludePath(); + for(int itemIndex=0;itemIndex values; + String entryName; + DWORD status; + + while(mRegKeyPathDir.enumValue(itemIndex++,entryName,status))values.insert(&entryName); + for(int index=0;index +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _M68HC11_M68HC11_HPP_ +#include +#endif + +class M68Reg +{ +public: + M68Reg(void); + M68Reg(const M68Reg &someM68Reg); + virtual ~M68Reg(); + M68Reg &operator=(const M68Reg &someM68Reg); + bool getHistory(Block &nameList); + bool setHistory(Block &nameList); + bool insertHistory(const String &strName); + bool getIncludePath(Block &pathDirList); + bool setIncludePath(Block &pathDirList); + bool removeIncludePath(void); + bool setBaud(const String &strBaud); + String getBaud(void); + bool setParity(const String &strParity); + String getParity(void); + bool setDataBits(const String &strDataBits); + String getDataBits(void); + bool setStopBits(const String &stopBits); + String getStopBits(void); + bool setPort(const String &strPort); + String getPort(void); + String getSerialSettings(void); + String email(void); + void email(const String &email); + BOOL isOkay(void)const; +private: + enum {MaxCachedNames=5}; + void guarantee(void); + void getCacheNames(void); + + Block mCachedNames; + String mPathDirKeyName; + String mHistoryKeyName; + String mSettingsKeyName; + String mSerialKeyName; + String mHistoryKeyShortName; + String mPathDirKeyShortName; + String mSettingsEMAIL; + String mM68KeyName; + String mSerialPort; + String mSerialBaud; + String mSerialData; + String mSerialParity; + String mSerialStop; + RegKey mRegKeySettings; + RegKey mRegKeyHistory; + RegKey mRegKeyPathDir; + RegKey mRegKeySerial; +}; +#endif diff --git a/m68hc11/M68hc11.h b/m68hc11/M68hc11.h new file mode 100644 index 0000000..d49bbb8 --- /dev/null +++ b/m68hc11/M68hc11.h @@ -0,0 +1,160 @@ +#ifndef _M68HC11_M68HC11_H_ +#define _M68HC11_M68HC11_H_ + +#define M68ACCELERATORS 10000 + +#define CMPDLG_BROWSE 100 +#define CMPDLG_LIST 101 +#define CMPDLG_CANCEL 102 +#define CMPDLG_OK 103 + +#define MCUDLG_REGISTERS 101 +#define MCUDLG_CCR 102 +#define MCUDLG_MESSAGES 109 +#define MCUDLG_PC 103 +#define MCUDLG_SP 104 +#define MCUDLG_Y 105 +#define MCUDLG_X 106 +#define MCUDLG_A 107 +#define MCUDLG_B 108 + +#define SERIAL_STOP 104 +#define SERIAL_PARITY 105 +#define SERIAL_APPLY 106 +#define SERIAL_TEST 107 +#define SERIAL_DATA 103 +#define SERIAL_BAUD 102 +#define SERIAL_PORT 101 + +#define SBCMENU_FILENEW 500 +#define SBCMENU_FILEOPEN 501 +#define SBCMENU_FILESAVE 502 +#define SBCMENU_FILESAVEAS 503 +#define SBCMENU_FILEPRINT 504 +#define SBCMENU_FILEQUIT 505 +#define SBCMENU_FILECLOSE 506 +#define SBCMENU_EDITCUT 507 +#define SBCMENU_EDITCOPY 508 +#define SBCMENU_EDITPASTE 509 +#define SBCMENU_EDITFIND 510 +#define SBCMENU_SETTINGSSERIAL 511 +#define SBCMENU_CODECOMPILE 512 +#define SBCMENU_CODECOMPILEANDLOAD 513 +#define SBCMENU_HELPCONTENTS 514 +#define SBCMENU_HELPSEARCH 515 +#define SBCMENU_REGISTRATION 516 +#define SBCMENU_HELPABOUT 517 +#define SBCMENU_COMPILER 518 + +#define IDM_CASCADE 10013 +#define IDM_TILE 10014 +#define IDM_ARRANGE 10015 +#define IDM_CLOSEALL 10016 +#define IDM_MINIMIZEALL 10017 +#define IDM_RESTOREALL 10018 + +#define STRING_M68KEYNAME 600 +#define STRING_HISTORYKEYNAME 601 +#define STRING_SETTINGSKEYNAME 602 +#define STRING_SERIALKEYNAME 603 +#define STRING_HISTORYKEYSHORTNAME 604 +#define STRING_SETTINGSEMAIL 605 +#define STRING_SERIALPORT 606 +#define STRING_SERIALBAUD 607 +#define STRING_SERIALDATA 608 +#define STRING_SERIALPARITY 609 +#define STRING_SERIALSTOP 610 +#define STRING_COM1 611 +#define STRING_COM2 612 +#define STRING_COM3 613 +#define STRING_COM4 614 +#define STRING_PATHDIRKEYNAME 615 +#define STRING_PATHDIRKEYSHORTNAME 616 + +#define STRING_CODEVIEWCLASSNAME 500 +#define STRING_MCUVIEWCLASSNAME 501 +#define STRING_UNTITLED 502 +#define STRING_HELPFILENAME 503 + +#define STRING_REGISTERPORTA 700 +#define STRING_REGISTERRESERVED1 701 +#define STRING_REGISTERPIOC 702 +#define STRING_REGISTERPORTC 703 +#define STRING_REGISTERPORTB 704 +#define STRING_REGISTERPORTCL 705 +#define STRING_REGISTERRESERVED2 706 +#define STRING_REGISTERDDRC 707 +#define STRING_REGISTERPORTD 708 +#define STRING_REGISTERDDRD 709 +#define STRING_REGISTERPORTE 710 +#define STRING_REGISTERCFORC 711 +#define STRING_REGISTEROC1M 712 +#define STRING_REGISTEROC1D 713 +#define STRING_REGISTERTCNTH1 714 +#define STRING_REGISTERTCNTLO 715 +#define STRING_REGISTERTIC1HI 716 +#define STRING_REGISTERTIC1LO 717 +#define STRING_REGISTERTIC2HI 718 +#define STRING_REGISTERTIC2LO 719 +#define STRING_REGISTERTIC3HI 720 +#define STRING_REGISTERTIC3LO 721 +#define STRING_REGISTERTOC1HI 722 +#define STRING_REGISTERTOC1LO 723 +#define STRING_REGISTERTOC2HI 724 +#define STRING_REGISTERTOC2LO 725 +#define STRING_REGISTERTOC3HI 726 +#define STRING_REGISTERTOC3LO 727 +#define STRING_REGISTERTOC4HI 728 +#define STRING_REGISTERTOC4LO 729 +#define STRING_REGISTERTI405HI 730 +#define STRING_REGISTERTI405LO 731 +#define STRING_REGISTERTCTL1 732 +#define STRING_REGISTERTCTL2 733 +#define STRING_REGISTERTMSK1 734 +#define STRING_REGISTERTFLG1 735 +#define STRING_REGISTERTMSK2 736 +#define STRING_REGISTERTFLG2 737 +#define STRING_REGISTERPACTL 738 +#define STRING_REGISTERPACNT 739 +#define STRING_REGISTERSPCR 740 +#define STRING_REGISTERSPSR 741 +#define STRING_REGISTERSPDR 742 +#define STRING_REGISTERBAUD 743 +#define STRING_REGISTERSCCR1 744 +#define STRING_REGISTERSCCR2 745 +#define STRING_REGISTERSCSR 746 +#define STRING_REGISTERSCDR 747 +#define STRING_REGISTERADCTL 748 +#define STRING_REGISTERADR1 749 +#define STRING_REGISTERADR2 750 +#define STRING_REGISTERADR3 751 +#define STRING_REGISTERADR4 752 +#define STRING_REGISTERBPROT 753 +#define STRING_REGISTEREPROG 754 +#define STRING_REGISTERRESERVED3 755 +#define STRING_REGISTERRESERVED4 756 +#define STRING_REGISTEROPTION 757 +#define STRING_REGISTERCOPRST 758 +#define STRING_REGISTERPPROG 759 +#define STRING_REGISTERHPRIO 760 +#define STRING_REGISTERINIT 761 +#define STRING_REGISTERTEST1 762 +#define STRING_REGISTERCONFIG 763 + +#define STRING_ERRORFILEOPEN 764 +#define STRING_ERRORPORTOPEN 765 +#define STRING_ERRORPORTSETTINGS 766 +#define STRING_ERRORTIMEOUT 767 +#define STRING_ERRORREADERROR 768 +#define STRING_ERRORTALKBACKFAILURE 769 +#define STRING_ERRORTALKBACKDATA 770 + +#define STRING_EVENTSINGLEBYTE 771 +#define STRING_EVENTQUADBYTE 772 +#define STRING_EVENTVARBYTE 773 +#define STRING_EVENTREGDATASTART 774 +#define STRING_EVENTREGDATACOMPLETE 775 +#define STRING_EVENTCODECOMPLETE 776 +#define STRING_EVENTDOUBLEBYTE 777 +#define STRING_EVENTSTRING 778 +#endif diff --git a/m68hc11/M68hc11.mak b/m68hc11/M68hc11.mak new file mode 100644 index 0000000..e4523a8 --- /dev/null +++ b/m68hc11/M68hc11.mak @@ -0,0 +1,1774 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on m68hc11.dsp +!IF "$(CFG)" == "" +CFG=m68hc11 - Win32 Release +!MESSAGE No configuration specified. Defaulting to m68hc11 - Win32 Release. +!ENDIF + +!IF "$(CFG)" != "m68hc11 - Win32 Release" && "$(CFG)" !=\ + "m68hc11 - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "m68hc11.mak" CFG="m68hc11 - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "m68hc11 - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "m68hc11 - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\m68hc11.exe" + +!ELSE + +ALL : "$(OUTDIR)\m68hc11.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\codeview.obj" + -@erase "$(INTDIR)\dcb.obj" + -@erase "$(INTDIR)\Editfnd.obj" + -@erase "$(INTDIR)\Find.obj" + -@erase "$(INTDIR)\m68hc11.res" + -@erase "$(INTDIR)\m68reg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\mcudlg.obj" + -@erase "$(INTDIR)\mcuthrd.obj" + -@erase "$(INTDIR)\mcuview.obj" + -@erase "$(INTDIR)\Odlstled.obj" + -@erase "$(INTDIR)\Serdlg.obj" + -@erase "$(INTDIR)\Splash.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\m68hc11.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\m68hc11.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +MTL=midl.exe +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 +RSC=rc.exe +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\m68hc11.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\m68hc11.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\m68hc11.pdb" /machine:I386 /out:"$(OUTDIR)\m68hc11.exe" +LINK32_OBJS= \ + "$(INTDIR)\codeview.obj" \ + "$(INTDIR)\dcb.obj" \ + "$(INTDIR)\Editfnd.obj" \ + "$(INTDIR)\Find.obj" \ + "$(INTDIR)\m68hc11.res" \ + "$(INTDIR)\m68reg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\mcudlg.obj" \ + "$(INTDIR)\mcuthrd.obj" \ + "$(INTDIR)\mcuview.obj" \ + "$(INTDIR)\Odlstled.obj" \ + "$(INTDIR)\Serdlg.obj" \ + "$(INTDIR)\Splash.obj" \ + "..\Exe\asm6811.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\toolbar.lib" + +"$(OUTDIR)\m68hc11.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj +# Begin Custom Macros +OutDir=.\.\msvcobj +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\m68hc11.exe" + +!ELSE + +ALL : "$(OUTDIR)\m68hc11.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\codeview.obj" + -@erase "$(INTDIR)\dcb.obj" + -@erase "$(INTDIR)\Editfnd.obj" + -@erase "$(INTDIR)\Find.obj" + -@erase "$(INTDIR)\m68hc11.res" + -@erase "$(INTDIR)\m68reg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\mcudlg.obj" + -@erase "$(INTDIR)\mcuthrd.obj" + -@erase "$(INTDIR)\mcuview.obj" + -@erase "$(INTDIR)\Odlstled.obj" + -@erase "$(INTDIR)\Serdlg.obj" + -@erase "$(INTDIR)\Splash.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "$(OUTDIR)\m68hc11.exe" + -@erase "$(OUTDIR)\m68hc11.ilk" + -@erase "$(OUTDIR)\m68hc11.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)\m68hc11.pch" /YX /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +MTL=midl.exe +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 +RSC=rc.exe +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\m68hc11.res" /d "_DEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\m68hc11.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows\ + /incremental:yes /pdb:"$(OUTDIR)\m68hc11.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)\m68hc11.exe" +LINK32_OBJS= \ + "$(INTDIR)\codeview.obj" \ + "$(INTDIR)\dcb.obj" \ + "$(INTDIR)\Editfnd.obj" \ + "$(INTDIR)\Find.obj" \ + "$(INTDIR)\m68hc11.res" \ + "$(INTDIR)\m68reg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\mcudlg.obj" \ + "$(INTDIR)\mcuthrd.obj" \ + "$(INTDIR)\mcuview.obj" \ + "$(INTDIR)\Odlstled.obj" \ + "$(INTDIR)\Serdlg.obj" \ + "$(INTDIR)\Splash.obj" \ + "..\Exe\asm6811.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\toolbar.lib" + +"$(OUTDIR)\m68hc11.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + + +!IF "$(CFG)" == "m68hc11 - Win32 Release" || "$(CFG)" ==\ + "m68hc11 - Win32 Debug" +SOURCE=.\codeview.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_CODEV=\ + ".\Codeview.hpp"\ + ".\Editfnd.hpp"\ + ".\Find.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\clipbrd.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\crsctrl.hpp"\ + {$(INCLUDE)}"common\diskinfo.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\finddata.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\fndtextx.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\keydata.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\profile.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\range.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\riched.hpp"\ + {$(INCLUDE)}"common\richedit.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winuser.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + {$(INCLUDE)}"printman\abortdlg.hpp"\ + {$(INCLUDE)}"printman\printer.hpp"\ + {$(INCLUDE)}"printman\printman.hpp"\ + + +"$(INTDIR)\codeview.obj" : $(SOURCE) $(DEP_CPP_CODEV) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_CODEV=\ + ".\Codeview.hpp"\ + ".\Editfnd.hpp"\ + ".\Find.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\clipbrd.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\crsctrl.hpp"\ + {$(INCLUDE)}"common\diskinfo.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\finddata.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\fndtextx.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\keydata.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\profile.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\range.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\riched.hpp"\ + {$(INCLUDE)}"common\richedit.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winuser.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + {$(INCLUDE)}"printman\abortdlg.hpp"\ + {$(INCLUDE)}"printman\printer.hpp"\ + {$(INCLUDE)}"printman\printman.hpp"\ + + +"$(INTDIR)\codeview.obj" : $(SOURCE) $(DEP_CPP_CODEV) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\dcb.cpp +DEP_CPP_DCB_C=\ + ".\dcb.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\dcb.obj" : $(SOURCE) $(DEP_CPP_DCB_C) "$(INTDIR)" + + +SOURCE=.\Editfnd.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_EDITF=\ + ".\Editfnd.hpp"\ + ".\Find.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fndtextx.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\range.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\riched.hpp"\ + {$(INCLUDE)}"common\richedit.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winuser.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Editfnd.obj" : $(SOURCE) $(DEP_CPP_EDITF) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_EDITF=\ + ".\Editfnd.hpp"\ + ".\Find.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fndtextx.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\range.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\riched.hpp"\ + {$(INCLUDE)}"common\richedit.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winuser.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Editfnd.obj" : $(SOURCE) $(DEP_CPP_EDITF) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Find.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_FIND_=\ + ".\Find.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\keydata.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Find.obj" : $(SOURCE) $(DEP_CPP_FIND_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_FIND_=\ + ".\Find.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\keydata.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Find.obj" : $(SOURCE) $(DEP_CPP_FIND_) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\m68hc11.rc +DEP_RSC_M68HC=\ + ".\BLANK.BMP"\ + ".\DASH.BMP"\ + ".\DOC.ICO"\ + ".\m68hc11.h"\ + ".\MOT.ICO"\ + ".\ONE.BMP"\ + ".\SPLASH.bmp"\ + ".\ZERO.BMP"\ + + +"$(INTDIR)\m68hc11.res" : $(SOURCE) $(DEP_RSC_M68HC) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +SOURCE=.\m68reg.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_M68RE=\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\m68reg.hpp"\ + ".\settings.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\m68reg.obj" : $(SOURCE) $(DEP_CPP_M68RE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_M68RE=\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\m68reg.hpp"\ + ".\settings.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\m68reg.obj" : $(SOURCE) $(DEP_CPP_M68RE) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MAIN_=\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mainfrm.hpp"\ + ".\settings.hpp"\ + {$(INCLUDE)}"as68hc11\asm6811.hpp"\ + {$(INCLUDE)}"as68hc11\cacheblk.hpp"\ + {$(INCLUDE)}"as68hc11\codeptr.hpp"\ + {$(INCLUDE)}"as68hc11\emit.hpp"\ + {$(INCLUDE)}"as68hc11\equate.hpp"\ + {$(INCLUDE)}"as68hc11\fixup.hpp"\ + {$(INCLUDE)}"as68hc11\instrctn.hpp"\ + {$(INCLUDE)}"as68hc11\label.hpp"\ + {$(INCLUDE)}"as68hc11\labelgen.hpp"\ + {$(INCLUDE)}"as68hc11\mode.hpp"\ + {$(INCLUDE)}"as68hc11\parse.hpp"\ + {$(INCLUDE)}"as68hc11\psymbol.hpp"\ + {$(INCLUDE)}"as68hc11\psymbolc.hpp"\ + {$(INCLUDE)}"as68hc11\scan.hpp"\ + {$(INCLUDE)}"as68hc11\symbol.hpp"\ + {$(INCLUDE)}"as68hc11\table.hpp"\ + {$(INCLUDE)}"bsptree\bintree.hpp"\ + {$(INCLUDE)}"bsptree\btree.hpp"\ + {$(INCLUDE)}"bsptree\btree.tpp"\ + {$(INCLUDE)}"bsptree\treenode.hpp"\ + {$(INCLUDE)}"bsptree\treenode.tpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"toolbar\addbmp.hpp"\ + {$(INCLUDE)}"toolbar\tbbtn.hpp"\ + {$(INCLUDE)}"toolbar\toolbar.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MAIN_=\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mainfrm.hpp"\ + ".\settings.hpp"\ + {$(INCLUDE)}"as68hc11\asm6811.hpp"\ + {$(INCLUDE)}"as68hc11\cacheblk.hpp"\ + {$(INCLUDE)}"as68hc11\codeptr.hpp"\ + {$(INCLUDE)}"as68hc11\emit.hpp"\ + {$(INCLUDE)}"as68hc11\equate.hpp"\ + {$(INCLUDE)}"as68hc11\fixup.hpp"\ + {$(INCLUDE)}"as68hc11\instrctn.hpp"\ + {$(INCLUDE)}"as68hc11\label.hpp"\ + {$(INCLUDE)}"as68hc11\labelgen.hpp"\ + {$(INCLUDE)}"as68hc11\mode.hpp"\ + {$(INCLUDE)}"as68hc11\parse.hpp"\ + {$(INCLUDE)}"as68hc11\psymbol.hpp"\ + {$(INCLUDE)}"as68hc11\psymbolc.hpp"\ + {$(INCLUDE)}"as68hc11\scan.hpp"\ + {$(INCLUDE)}"as68hc11\symbol.hpp"\ + {$(INCLUDE)}"as68hc11\table.hpp"\ + {$(INCLUDE)}"bsptree\bintree.hpp"\ + {$(INCLUDE)}"bsptree\btree.hpp"\ + {$(INCLUDE)}"bsptree\btree.tpp"\ + {$(INCLUDE)}"bsptree\treenode.hpp"\ + {$(INCLUDE)}"bsptree\treenode.tpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"toolbar\addbmp.hpp"\ + {$(INCLUDE)}"toolbar\tbbtn.hpp"\ + {$(INCLUDE)}"toolbar\toolbar.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\mainfrm.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MAINF=\ + ".\Codeview.hpp"\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\Editfnd.hpp"\ + ".\Find.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\m68reg.hpp"\ + ".\mainfrm.hpp"\ + ".\mcudlg.hpp"\ + ".\mcuthrd.hpp"\ + ".\mcuview.hpp"\ + ".\Serdlg.hpp"\ + ".\settings.hpp"\ + ".\Splash.hpp"\ + {$(INCLUDE)}"as68hc11\asm6811.hpp"\ + {$(INCLUDE)}"as68hc11\cacheblk.hpp"\ + {$(INCLUDE)}"as68hc11\codeptr.hpp"\ + {$(INCLUDE)}"as68hc11\emit.hpp"\ + {$(INCLUDE)}"as68hc11\equate.hpp"\ + {$(INCLUDE)}"as68hc11\fixup.hpp"\ + {$(INCLUDE)}"as68hc11\instrctn.hpp"\ + {$(INCLUDE)}"as68hc11\label.hpp"\ + {$(INCLUDE)}"as68hc11\labelgen.hpp"\ + {$(INCLUDE)}"as68hc11\mode.hpp"\ + {$(INCLUDE)}"as68hc11\parse.hpp"\ + {$(INCLUDE)}"as68hc11\psymbol.hpp"\ + {$(INCLUDE)}"as68hc11\psymbolc.hpp"\ + {$(INCLUDE)}"as68hc11\scan.hpp"\ + {$(INCLUDE)}"as68hc11\symbol.hpp"\ + {$(INCLUDE)}"as68hc11\table.hpp"\ + {$(INCLUDE)}"bsptree\bintree.hpp"\ + {$(INCLUDE)}"bsptree\btree.hpp"\ + {$(INCLUDE)}"bsptree\btree.tpp"\ + {$(INCLUDE)}"bsptree\treenode.hpp"\ + {$(INCLUDE)}"bsptree\treenode.tpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\clipbrd.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\commdlg.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\crsctrl.hpp"\ + {$(INCLUDE)}"common\diskinfo.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\finddata.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\fndtextx.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\opendlg.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\range.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\riched.hpp"\ + {$(INCLUDE)}"common\richedit.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"common\winuser.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + {$(INCLUDE)}"printman\abortdlg.hpp"\ + {$(INCLUDE)}"printman\printer.hpp"\ + {$(INCLUDE)}"printman\printman.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"toolbar\addbmp.hpp"\ + {$(INCLUDE)}"toolbar\tbbtn.hpp"\ + {$(INCLUDE)}"toolbar\toolbar.hpp"\ + + +"$(INTDIR)\mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MAINF=\ + ".\Codeview.hpp"\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\Editfnd.hpp"\ + ".\Find.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\m68reg.hpp"\ + ".\mainfrm.hpp"\ + ".\mcudlg.hpp"\ + ".\mcuthrd.hpp"\ + ".\mcuview.hpp"\ + ".\Serdlg.hpp"\ + ".\settings.hpp"\ + ".\Splash.hpp"\ + {$(INCLUDE)}"as68hc11\asm6811.hpp"\ + {$(INCLUDE)}"as68hc11\cacheblk.hpp"\ + {$(INCLUDE)}"as68hc11\codeptr.hpp"\ + {$(INCLUDE)}"as68hc11\emit.hpp"\ + {$(INCLUDE)}"as68hc11\equate.hpp"\ + {$(INCLUDE)}"as68hc11\fixup.hpp"\ + {$(INCLUDE)}"as68hc11\instrctn.hpp"\ + {$(INCLUDE)}"as68hc11\label.hpp"\ + {$(INCLUDE)}"as68hc11\labelgen.hpp"\ + {$(INCLUDE)}"as68hc11\mode.hpp"\ + {$(INCLUDE)}"as68hc11\parse.hpp"\ + {$(INCLUDE)}"as68hc11\psymbol.hpp"\ + {$(INCLUDE)}"as68hc11\psymbolc.hpp"\ + {$(INCLUDE)}"as68hc11\scan.hpp"\ + {$(INCLUDE)}"as68hc11\symbol.hpp"\ + {$(INCLUDE)}"as68hc11\table.hpp"\ + {$(INCLUDE)}"bsptree\bintree.hpp"\ + {$(INCLUDE)}"bsptree\btree.hpp"\ + {$(INCLUDE)}"bsptree\btree.tpp"\ + {$(INCLUDE)}"bsptree\treenode.hpp"\ + {$(INCLUDE)}"bsptree\treenode.tpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\clipbrd.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\commdlg.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\crsctrl.hpp"\ + {$(INCLUDE)}"common\diskinfo.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filemap.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\finddata.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\fndtextx.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\opendlg.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puredwrd.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\pview.hpp"\ + {$(INCLUDE)}"common\range.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\riched.hpp"\ + {$(INCLUDE)}"common\richedit.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"common\winuser.hpp"\ + {$(INCLUDE)}"dialog\dlgitem.hpp"\ + {$(INCLUDE)}"dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"dialog\dyndlg.hpp"\ + {$(INCLUDE)}"printman\abortdlg.hpp"\ + {$(INCLUDE)}"printman\printer.hpp"\ + {$(INCLUDE)}"printman\printman.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"toolbar\addbmp.hpp"\ + {$(INCLUDE)}"toolbar\tbbtn.hpp"\ + {$(INCLUDE)}"toolbar\toolbar.hpp"\ + + +"$(INTDIR)\mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\mcudlg.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MCUDL=\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mcudlg.hpp"\ + ".\Odlstled.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\brush.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\odlist.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rubber.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\mcudlg.obj" : $(SOURCE) $(DEP_CPP_MCUDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MCUDL=\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mcudlg.hpp"\ + ".\Odlstled.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\brush.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\odlist.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rubber.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\mcudlg.obj" : $(SOURCE) $(DEP_CPP_MCUDL) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\mcuthrd.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MCUTH=\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mcuthrd.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + + +"$(INTDIR)\mcuthrd.obj" : $(SOURCE) $(DEP_CPP_MCUTH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MCUTH=\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mcuthrd.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + + +"$(INTDIR)\mcuthrd.obj" : $(SOURCE) $(DEP_CPP_MCUTH) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\mcuview.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_MCUVI=\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mcudlg.hpp"\ + ".\mcuthrd.hpp"\ + ".\mcuview.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + + +"$(INTDIR)\mcuview.obj" : $(SOURCE) $(DEP_CPP_MCUVI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_MCUVI=\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\mcudlg.hpp"\ + ".\mcuthrd.hpp"\ + ".\mcuview.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + + +"$(INTDIR)\mcuview.obj" : $(SOURCE) $(DEP_CPP_MCUVI) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Odlstled.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_ODLST=\ + ".\Odlstled.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\brush.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\drawitem.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\measure.hpp"\ + {$(INCLUDE)}"common\odlist.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rubber.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Odlstled.obj" : $(SOURCE) $(DEP_CPP_ODLST) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_ODLST=\ + ".\Odlstled.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\brush.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\drawitem.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\measure.hpp"\ + {$(INCLUDE)}"common\odlist.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rubber.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Odlstled.obj" : $(SOURCE) $(DEP_CPP_ODLST) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Serdlg.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_SERDL=\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\m68reg.hpp"\ + ".\Serdlg.hpp"\ + ".\settings.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + + +"$(INTDIR)\Serdlg.obj" : $(SOURCE) $(DEP_CPP_SERDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_SERDL=\ + ".\commctrl.hpp"\ + ".\commstat.hpp"\ + ".\dcb.hpp"\ + ".\m68hc11.h"\ + ".\m68hc11.hpp"\ + ".\m68reg.hpp"\ + ".\Serdlg.hpp"\ + ".\settings.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + + +"$(INTDIR)\Serdlg.obj" : $(SOURCE) $(DEP_CPP_SERDL) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Splash.cpp + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +DEP_CPP_SPLAS=\ + ".\Splash.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\bitmap.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bmdata.hpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\boverlay.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\resbmp.hpp"\ + {$(INCLUDE)}"common\resdata.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Splash.obj" : $(SOURCE) $(DEP_CPP_SPLAS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +DEP_CPP_SPLAS=\ + ".\Splash.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\bitmap.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bmdata.hpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\boverlay.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\font.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\resbmp.hpp"\ + {$(INCLUDE)}"common\resdata.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Splash.obj" : $(SOURCE) $(DEP_CPP_SPLAS) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/m68hc11/MAIN.CPP b/m68hc11/MAIN.CPP new file mode 100644 index 0000000..b4f5245 --- /dev/null +++ b/m68hc11/MAIN.CPP @@ -0,0 +1,10 @@ +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; + frameWindow.createWindow("M68HC11","M68HC11 v1.00","mainMenu","MOT"); + frameWindow.loadAccelerators(M68ACCELERATORS); + return frameWindow.messageLoop(); +} + diff --git a/m68hc11/MCUDLG.CPP b/m68hc11/MCUDLG.CPP new file mode 100644 index 0000000..1a00ea1 --- /dev/null +++ b/m68hc11/MCUDLG.CPP @@ -0,0 +1,147 @@ +#include +#include +#include +#include + +MCUDlg::MCUDlg(void) +{ + mInitHandler.setCallback(this,&MCUDlg::initHandler); + mCreateHandler.setCallback(this,&MCUDlg::createHandler); + mCloseHandler.setCallback(this,&MCUDlg::closeHandler); + mDestroyHandler.setCallback(this,&MCUDlg::destroyHandler); + mCommandHandler.setCallback(this,&MCUDlg::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MCUDlg::MCUDlg(const MCUDlg &someMCUDlg) +{ // private implementation + *this=someMCUDlg; +} + +MCUDlg::~MCUDlg() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MCUDlg &MCUDlg::operator=(const MCUDlg &someMCUDlg) +{ // private implementation + return *this; +} + +BOOL MCUDlg::perform(GUIWindow &parentWindow) +{ + ::CreateDialogParam(processInstance(),(LPSTR)"MCUDLG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return isValid(); +} + +CallbackData::ReturnType MCUDlg::initHandler(CallbackData &someCallbackData) +{ + mOwnerDrawList=::new OwnerDrawListBinaryLed(*this,getItem(MCUDLG_REGISTERS),MCUDLG_REGISTERS); + mOwnerDrawList.disposition(PointerDisposition::Delete); + for(int index=STRING_REGISTERPORTA;index<=STRING_REGISTERCONFIG;index++)mOwnerDrawList->insertString(String(index)); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + handleCancel(); + break; + case IDOK : + handleOk(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void MCUDlg::setRegister(int mcuRegister,BYTE value) +{ + String stringData; + String strItem; + String strData; + + if(LB_ERR==mOwnerDrawList->getText(stringData,mcuRegister))return; + strItem=stringData.betweenString(0,'\t'); + if(strItem.isNull())::sprintf(strData,"%s\t%d",(LPSTR)stringData,value); + else ::sprintf(strData,"%s\t%d",(LPSTR)strItem,value); + mOwnerDrawList->deleteString(mcuRegister); + mOwnerDrawList->insertString(strData,mcuRegister); +} + +void MCUDlg::setRegisters(GlobalData ®Data) +{ + mOwnerDrawList->setRedraw(FALSE); + for(int index=0;indexsetRedraw(TRUE); +} + +void MCUDlg::setVarByteData(GlobalData &byteData) +{ + String strData; + String strLine; + String strHexLine; + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class OwnerDrawListBinaryLed; + +class MCUDlg : public DWindow +{ +public: + MCUDlg(void); + virtual ~MCUDlg(); + BOOL perform(GUIWindow &parentWindow); + void setCancelHandler(PureCallback *pCallback); + void setStartHandler(PureCallback *pCallback); + void setRegister(int mcuRegister,BYTE value); + void setRegisters(GlobalData ®Data); + void setVarByteData(GlobalData &byteData); + void setQuadByteData(DWORD quadByteData); + void setDoubleByteData(WORD doubleByteData); + void setSingleByteData(BYTE singleByteData); + void setStringData(const String &string); + void enableStart(BOOL enable); +private: + MCUDlg(const MCUDlg &someMCUDlg); + MCUDlg &operator=(const MCUDlg &someMCUDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleCancel(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mOwnerDrawList; + CallbackPointer mCancelHandler; + CallbackPointer mStartHandler; +}; + +inline +void MCUDlg::setCancelHandler(PureCallback *pCallback) +{ + mCancelHandler=CallbackPointer(pCallback); +} + +inline +void MCUDlg::setStartHandler(PureCallback *pCallback) +{ + mStartHandler=CallbackPointer(pCallback); +} + +inline +void MCUDlg::handleCancel(void) +{ + mCancelHandler.callback(CallbackData()); +} + +inline +void MCUDlg::handleOk(void) +{ + mStartHandler.callback(CallbackData()); +} + +inline +void MCUDlg::enableStart(BOOL enable) +{ + ::EnableWindow(getItem(IDOK),enable); +} +#endif diff --git a/m68hc11/MCUTHRD.CPP b/m68hc11/MCUTHRD.CPP new file mode 100644 index 0000000..6b51c63 --- /dev/null +++ b/m68hc11/MCUTHRD.CPP @@ -0,0 +1,238 @@ +#include +#include +#include +#include +#include +#include + +MCUThread::MCUThread(void) +: mIsInEvents(false) +{ + mThreadHandler.setCallback(this,&MCUThread::threadHandler); + insertHandler(&mThreadHandler); +} + +MCUThread::MCUThread(const MCUThread &someMCUThread) +: mIsInEvents(false) +{ // private implementation + *this=someMCUThread; +} + +MCUThread::~MCUThread() +{ + removeHandler(&mThreadHandler); +} + +MCUThread &MCUThread::operator=(const MCUThread &someMCUThread) +{ // private implementation + return *this; +} + +void MCUThread::listen(const String &strPathBinary) +{ + String *pString=::new String(strPathBinary); + ThreadMessage threadMessage(ThreadMessage::TM_USER,ThMsgListen,int(pString)); + postMessage(threadMessage); + return; +} + +DWORD MCUThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(ThMsgListen==someThreadMessage.userDataOne()) + { + String *pString=(String*)someThreadMessage.userDataTwo(); + thListen(*pString); + ::delete pString; + } + break; + } + return FALSE; +} + +void MCUThread::thListen(const String &strPathBinary) +{ + CommControl commControl; + + sendMessage("Initializing device..."); + if(!openDevice(commControl))return; + sendMessage("Loading code..."); + if(!codeLoad(commControl,strPathBinary))return; + sendMessage("Processing events..."); + processEvents(commControl); + return; +} + +BOOL MCUThread::openDevice(CommControl &commControl,bool useOverlappedIO) +{ + M68Reg mcuReg; + + if(!commControl.open(CommControl::stringToPort(mcuReg.getPort()),useOverlappedIO)) + { + mErrorEventHandler.callback(CallbackData(ErrorPortOpen,0L)); + return FALSE; + } + if(!commControl.setDeviceControlBlock(mcuReg.getSerialSettings())) + { + mErrorEventHandler.callback(CallbackData(ErrorPortSettings,0L)); + return FALSE; + } + commControl.setEventMask(CommControl::EventBreak); + if(!commControl.waitEvent()) + { + mErrorEventHandler.callback(CallbackData(ErrorTimeout,0L)); + return FALSE; + } + return TRUE; +} + +BOOL MCUThread::codeLoad(CommControl &commControl,const String &strPathBinary) +{ + FileHandle inFile; + BYTE sndBuffer[256]; +// BYTE rcvBuffer[256]; + GlobalData rcvBuffer; + WORD codeLength(0); + BYTE prefix(0xFF); + BYTE *ptrByte; + + if(!inFile.open(strPathBinary)) + { + mErrorEventHandler.callback(CallbackData(ErrorFileOpen,int(&(String&)strPathBinary))); + return FALSE; + } + ::memset(sndBuffer,1,sizeof(sndBuffer)); +// ::memset(&rcvBuffer,0,sizeof(rcvBuffer)); + ptrByte=sndBuffer; + while(inFile.read(*ptrByte)&&codeLength<=256){codeLength++;ptrByte++;} + commControl.write(&prefix,sizeof(prefix)); + commControl.clearReceiveQueue(); + commControl.write(sndBuffer,sizeof(sndBuffer)); + if(!commControl.waitForData()) + { + mErrorEventHandler.callback(CallbackData(ErrorTalkBackFailure,0L)); + return false; + } + rcvBuffer.size(sizeof(sndBuffer)); + rcvBuffer.setZero(); + commControl.readFully(rcvBuffer); +// commControl.readFully(rcvBuffer,sizeof(rcvBuffer)); + if(::memcmp(&rcvBuffer[0],sndBuffer,sizeof(sndBuffer))) + { + mErrorEventHandler.callback(CallbackData(ErrorTalkBackData,0L)); + return false; + } + return true; +} + +// event types +// 0x00 - character +// 0x01 - WORD +// 0x02 - DWORD +// 0x03 - varchar : [WORD:count,countcharacters] +// 0xFF - end + +BOOL MCUThread::processEvents(CommControl &commControl) +{ + GlobalData byteData; + String strString; + BYTE event(0x00); + BYTE ack(0x00); + WORD wordData; + DWORD dwordData; + char charData; + int index; + int map(0x1000); + + ::OutputDebugString("MCUThread::processEvents[Thread is starting]"); + isInEvents(true); + while(isInEvents()) + { + if(!commControl.hasData())continue; + commControl.read(&event,sizeof(event)); + switch(MCUEvent(event)) + { + case EventString : + { + String str; + sendMessage(STRING_EVENTSTRING); + while(true) + { + commControl.read(&charData,sizeof(charData)); + if(!charData)break; + str+=charData; + } + mMCUEventHandler.callback(CallbackData(EventString,int(&str))); + commControl.write(&ack,sizeof(ack)); + } + break; + case EventSingleByte : + sendMessage(STRING_EVENTSINGLEBYTE); + commControl.read(&charData,sizeof(charData)); + mMCUEventHandler.callback(CallbackData(EventSingleByte,int(&charData))); + commControl.write(&ack,sizeof(ack)); + break; + case EventDoubleByte : + sendMessage(STRING_EVENTDOUBLEBYTE); + commControl.read(&wordData,sizeof(wordData)); + mMCUEventHandler.callback(CallbackData(EventDoubleByte,int(&wordData))); + commControl.write(&ack,sizeof(ack)); + break; + case EventQuadByte : + sendMessage(STRING_EVENTQUADBYTE); + commControl.read(&dwordData,sizeof(dwordData)); + mMCUEventHandler.callback(CallbackData(EventQuadByte,(int)&dwordData)); + commControl.write(&ack,sizeof(ack)); + break; + case EventVarByte : + sendMessage(STRING_EVENTVARBYTE); + commControl.read(&wordData,sizeof(wordData)); + byteData.size(wordData); + for(index=0;index +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class CommControl; + +class MCUThread : protected MessageThread +{ +public: + enum MCUEvent{EventSingleByte=0x00,EventDoubleByte=0x01,EventQuadByte=0x02,EventVarByte=0x03,EventRegs=0x04,EventString=0x05,EventEnd=0xFF}; + enum ErrorEvent{ErrorFileOpen,ErrorPortOpen,ErrorPortSettings,ErrorTimeout,ErrorReadError,ErrorTalkBackFailure,ErrorTalkBackData}; + MCUThread(void); + virtual ~MCUThread(); + void listen(const String &strPathBinary); + void setErrorEventHandler(PureCallback *pCallback); + void setMCUEventHandler(PureCallback *pCallback); + void setMessageHandler(PureCallback *pCallback); + bool isInEvents(void)const; + void isInEvents(bool isInEvents); +private: + enum{ThMsgListen}; + MCUThread(const MCUThread &someMCUThread); + MCUThread &operator=(const MCUThread &someMCUThread); + DWORD threadHandler(ThreadMessage &someThreadMessage); + void thListen(const String &strPathBinary); + BOOL openDevice(CommControl &commControl,bool userOverlappedIO=false); + BOOL codeLoad(CommControl &commControl,const String &strPathBinary); + BOOL processEvents(CommControl &commControl); + void sendMessage(const String &strMessage); + + ThreadCallback mThreadHandler; + CallbackPointer mErrorEventHandler; + CallbackPointer mMCUEventHandler; + CallbackPointer mMessageHandler; + bool mIsInEvents; +}; + +inline +void MCUThread::setErrorEventHandler(PureCallback *pCallback) +{ + mErrorEventHandler=CallbackPointer(pCallback); +} + +inline +void MCUThread::setMCUEventHandler(PureCallback *pCallback) +{ + mMCUEventHandler=CallbackPointer(pCallback); +} + +inline +void MCUThread::setMessageHandler(PureCallback *pCallback) +{ + mMessageHandler=CallbackPointer(pCallback); +} + +inline +bool MCUThread::isInEvents(void)const +{ + return mIsInEvents; +} + +inline +void MCUThread::isInEvents(bool isInEvents) +{ + mIsInEvents=isInEvents; +} +#endif \ No newline at end of file diff --git a/m68hc11/MCUVIEW.CPP b/m68hc11/MCUVIEW.CPP new file mode 100644 index 0000000..65ba7b9 --- /dev/null +++ b/m68hc11/MCUVIEW.CPP @@ -0,0 +1,193 @@ +#include +#include +#include + +MCUView::MCUView(void) +{ + mCreateHandler.setCallback(this,&MCUView::createHandler); + mSizeHandler.setCallback(this,&MCUView::sizeHandler); + mCloseHandler.setCallback(this,&MCUView::closeHandler); + mDestroyHandler.setCallback(this,&MCUView::destroyHandler); + mCommandHandler.setCallback(this,&MCUView::commandHandler); + mCancelHandler.setCallback(this,&MCUView::cancelHandler); + mStartHandler.setCallback(this,&MCUView::startHandler); + mErrorEventHandler.setCallback(this,&MCUView::errorEventHandler); + mMCUEventHandler.setCallback(this,&MCUView::mcuEventHandler); + mMessageHandler.setCallback(this,&MCUView::messageHandler); + MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler); + MCUThread::setErrorEventHandler(&mErrorEventHandler); + MCUThread::setMCUEventHandler(&mMCUEventHandler); + MCUThread::setMessageHandler(&mMessageHandler); +} + +MCUView::~MCUView() +{ + MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler); + MCUThread::setErrorEventHandler(0); + MCUThread::setMCUEventHandler(0); + MCUThread::setMessageHandler(0); +} + +CallbackData::ReturnType MCUView::createHandler(CallbackData &someCallbackData) +{ + mMCUDialog.setCancelHandler(&mCancelHandler); + mMCUDialog.setStartHandler(&mStartHandler); + mMCUDialog.perform(*this); + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + mStatusBar->setText("Press start and then switch on the device."); + return FALSE; +} + +CallbackData::ReturnType MCUView::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::closeHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::commandHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::cancelHandler(CallbackData &/*someCallbackData*/) +{ + isInEvents(false); + MDIWindow::postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUView::startHandler(CallbackData &/*someCallbackData*/) +{ + mMCUDialog.enableStart(FALSE); + listen(mStrPathBinary); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUView::messageHandler(CallbackData &someCallbackData) +{ + mStatusBar->setText(*((String*)someCallbackData.lParam())); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUView::errorEventHandler(CallbackData &someCallbackData) +{ + switch(MCUThread::ErrorEvent(someCallbackData.wParam())) + { + case MCUThread::ErrorFileOpen : + mStatusBar->setText(String(STRING_ERRORFILEOPEN)+*((String*)someCallbackData.lParam())+String("'.")); + break; + case MCUThread::ErrorPortOpen : + mStatusBar->setText(STRING_ERRORPORTOPEN); + break; + case MCUThread::ErrorPortSettings : + mStatusBar->setText(STRING_ERRORPORTSETTINGS); + break; + case MCUThread::ErrorTimeout : + mStatusBar->setText(STRING_ERRORTIMEOUT); + break; + case MCUThread::ErrorReadError : + mStatusBar->setText(STRING_ERRORREADERROR); + break; + case MCUThread::ErrorTalkBackFailure : + mStatusBar->setText(STRING_ERRORTALKBACKFAILURE); + break; + case MCUThread::ErrorTalkBackData : + mStatusBar->setText(STRING_ERRORTALKBACKDATA); + break; + } + mMCUDialog.enableStart(TRUE); + return FALSE; +} + +CallbackData::ReturnType MCUView::mcuEventHandler(CallbackData &someCallbackData) +{ + switch(MCUThread::MCUEvent(someCallbackData.wParam())) + { + case MCUThread::EventString : + handleStringData(someCallbackData); + break; + case MCUThread::EventSingleByte : + handleSingleByteData(someCallbackData); + break; + case MCUThread::EventDoubleByte : + handleEventDoubleByte(someCallbackData); + break; + case MCUThread::EventQuadByte : + handleEventQuadByte(someCallbackData); + break; + case MCUThread::EventVarByte : + handleEventVarByte(someCallbackData); + break; + case MCUThread::EventRegs : + handleEventRegs(someCallbackData); + break; + case MCUThread::EventEnd : + mMCUDialog.enableStart(TRUE); + break; + } + return FALSE; +} + +void MCUView::handleEventRegs(CallbackData &someCallbackData) +{ + GlobalData ®Data=(GlobalData &)*((GlobalData *)someCallbackData.lParam()); + mMCUDialog.setRegisters(regData); +} + +void MCUView::handleEventVarByte(CallbackData &someCallbackData) +{ + GlobalData &byteData=(GlobalData &)*((GlobalData *)someCallbackData.lParam()); + mMCUDialog.setVarByteData(byteData); +} + +void MCUView::handleEventQuadByte(CallbackData &someCallbackData) +{ + mMCUDialog.setQuadByteData(*((DWORD*)someCallbackData.lParam())); +} + +void MCUView::handleEventDoubleByte(CallbackData &someCallbackData) +{ + mMCUDialog.setDoubleByteData(*((WORD*)someCallbackData.lParam())); +} + +void MCUView::handleSingleByteData(CallbackData &someCallbackData) +{ + mMCUDialog.setSingleByteData(*((BYTE*)someCallbackData.lParam())); +} + +void MCUView::handleStringData(CallbackData &someCallbackData) +{ + mMCUDialog.setStringData(*((String*)someCallbackData.lParam())); +} + +// *** virtuals + +void MCUView::preRegister(WNDCLASS &wndClass) +{ + wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE; +} + +void MCUView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.cx=InitialWidth; + createStruct.cy=InitialHeight; + createStruct.style^=WS_THICKFRAME; +} diff --git a/m68hc11/MCUVIEW.HPP b/m68hc11/MCUVIEW.HPP new file mode 100644 index 0000000..abcf56c --- /dev/null +++ b/m68hc11/MCUVIEW.HPP @@ -0,0 +1,66 @@ +#ifndef _M68HC11_MCUVIEW_HPP_ +#define _M68HC11_MCUVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _M68HC11_MCUDLG_HPP_ +#include +#endif +#ifndef _M68HC11_MCUTHREAD_HPP_ +#include +#endif + +class StatusBarEx; + +class MCUView : public MDIWindow, public MCUThread +{ +public: + MCUView(void); + virtual ~MCUView(); + void setCode(const String &strPathBinary); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,InitialWidth=565,InitialHeight=360}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType cancelHandler(CallbackData &someCallbackData); + CallbackData::ReturnType startHandler(CallbackData &someCallbackData); + CallbackData::ReturnType errorEventHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mcuEventHandler(CallbackData &someCallbackData); + CallbackData::ReturnType messageHandler(CallbackData &someCallbackData); + void handleEventRegs(CallbackData &someCallbackData); + void handleEventVarByte(CallbackData &someCallbackData); + void handleEventQuadByte(CallbackData &someCallbackData); + void handleEventDoubleByte(CallbackData &someCallbackData); + void handleSingleByteData(CallbackData &someCallbackData); + void handleStringData(CallbackData &someCallbackData); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCancelHandler; + Callback mStartHandler; + Callback mErrorEventHandler; + Callback mMCUEventHandler; + Callback mMessageHandler; + SmartPointer mStatusBar; + MCUDlg mMCUDialog; + String mStrPathBinary; +}; + +inline +void MCUView::setCode(const String &strPathBinary) +{ + mStrPathBinary=strPathBinary; +} +#endif \ No newline at end of file diff --git a/m68hc11/MOT.BMP b/m68hc11/MOT.BMP new file mode 100644 index 0000000..1b92cb8 Binary files /dev/null and b/m68hc11/MOT.BMP differ diff --git a/m68hc11/MOT.ICO b/m68hc11/MOT.ICO new file mode 100644 index 0000000..7cd957d Binary files /dev/null and b/m68hc11/MOT.ICO differ diff --git a/m68hc11/MOT.~IC b/m68hc11/MOT.~IC new file mode 100644 index 0000000..8a517d0 Binary files /dev/null and b/m68hc11/MOT.~IC differ diff --git a/m68hc11/Mainfrm.cpp b/m68hc11/Mainfrm.cpp new file mode 100644 index 0000000..3a347a7 --- /dev/null +++ b/m68hc11/Mainfrm.cpp @@ -0,0 +1,529 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char MainFrame::szClassName[]="M68HC11"; +char MainFrame::szMenuName[]="mainMenu"; + +MainFrame::MainFrame(void) +{ + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mLineHandler.setCallback(this,&MainFrame::lineHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + destroy(); +} + +void MainFrame::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); +} + +void MainFrame::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/) +{ + GlobalData statParts; + + createToolBar(); + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + statParts.size(2); + *((int*)&statParts[0])=300; + *((int*)&statParts[1])=400; + mStatusBar->setParts(statParts); + mStatusBar->setText("Ready"); + applyHistory(getFrameMenu()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + ::WinHelp(*this,0,HELP_QUIT,0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + mToolBar.windowRect(toolRect); + mStatusBar->windowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::lineHandler(CallbackData &someCallbackData) +{ + String msg; + ::sprintf(msg,"Ln %d, Col %d",someCallbackData.loWord(),someCallbackData.hiWord()); + mStatusBar->setText(msg,1); + mStatusBar->update(); + return FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case MenuCodeCompile : + handleCodeCompile(); + break; + case MenuCodeCompileAndLoad : + handleCodeCompileAndLoad(); + break; + case MenuEditCut : + handleEditCut(); + break; + case MenuEditCopy : + handleEditCopy(); + break; + case MenuEditPaste : + handleEditPaste(); + break; + case MenuEditFind : + handleEditFind(); + break; + case MenuCascade : + cascade(); + break; + case MenuTile : + tile(); + break; + case MenuArrange : + arrange(); + break; + case MenuCloseAll : + closeAll(); + break; + case MenuMinimizeAll : + minimizeAll(); + break; + case MenuRestoreAll : + restoreAll(); + break; + case MenuFileNew : + handleFileNew(); + break; + case MenuFileOpen : + handleFileOpen(); + break; + case MenuFileSave : + handleFileSave(); + break; + case MenuFilePrint : + handleFilePrint(); + break; + case MenuFileSaveAs : + handleFileSaveAs(); + break; + case MenuFileClose : + handleFileClose(); + break; + case MenuCompiler : + handleMenuCompiler(); + break; + case MenuFileQuit : + handleQuit(); + break; + case MenuSettingsSerial : + handleCommunications(); + break; + case MenuHelpContents : + handleHelp(); + break; + case MenuHelpSearch : + handleHelp(); + break; + case MenuRegistration : + break; + case MenuHelpAbout : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleFileOpen(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +// handlers + +void MainFrame::handleCodeCompile(void) +{ + CursorControl cursorControl; + SmartPointer mdiWindow; + Block includePath; + String strMessage; + M68Reg m68Reg; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + CodeView &codeView=(CodeView&)*mdiWindow; + if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return; + mStatusBar->setText("compiling..."); + cursorControl.waitCursor(TRUE); + m68Reg.getIncludePath(includePath); + m68Assembler.assemble(codeView.getTitle(),includePath); + cursorControl.waitCursor(FALSE); + strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s)."); + mStatusBar->setText(strMessage); +} + +void MainFrame::handleCodeCompileAndLoad(void) +{ + CursorControl cursorControl; + Block includePath; + bool assembleResult; + String strPathBinary; + String strMessage; + M68Reg m68Reg; + + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + CodeView &codeView=(CodeView&)*mdiWindow; + if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return; + mStatusBar->setText("compiling..."); + cursorControl.waitCursor(TRUE); + m68Reg.getIncludePath(includePath); + assembleResult=m68Assembler.assemble(codeView.getTitle(),includePath); + cursorControl.waitCursor(FALSE); + strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s)."); + mStatusBar->setText(strMessage); + if(!assembleResult)return; + strPathBinary=codeView.getTitle().betweenString(0,'.'); + strPathBinary+=".bin"; + codeLoad(strPathBinary); +} + +void MainFrame::handleEditCut(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).cut(); +} + +void MainFrame::handleEditCopy(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).copy(); +} + +void MainFrame::handleEditPaste(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).paste(); +} + +void MainFrame::handleEditFind(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).find(); +} + +void MainFrame::handleFileNew(void) +{ + CodeView *pCodeView; + + pCodeView=::new CodeView; + pCodeView->setLineHandler(&mLineHandler); + pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc"); + insert(*pCodeView); +} + +void MainFrame::handleFileOpen(CallbackData &someCallbackData) +{ + PureMenu fileMenu; + String menuItemString; + + getFrameMenu().getSubMenu(0,fileMenu); + menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand); + if(menuItemString.isNull())return; + menuItemString=menuItemString.betweenString(')',0); + menuItemString.trimLeft(); + handleFileOpen(menuItemString); +} + +void MainFrame::handleFileOpen(void) +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,"*.asm","Open File","*.asm",strPathFileName))return; + handleFileOpen(strPathFileName); +} + +void MainFrame::handleFileOpen(const String &strPathFileName) +{ + CodeView *pCodeView; + CursorControl cursorControl; + + if(bringDocumentToFront(strPathFileName))return; + mStatusBar->setText("Loading..."); + cursorControl.waitCursor(TRUE); + + pCodeView=::new CodeView; + insert(*pCodeView); // insert the pointer before creating/activating the window + pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc"); + pCodeView->setLineHandler(&mLineHandler); + pCodeView->open(strPathFileName); + mStatusBar->setText("Ready"); + cursorControl.waitCursor(FALSE); + updateHistory(strPathFileName); +} + +void MainFrame::handleFileClose(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + mdiWindow->close(); +} + +void MainFrame::handleFilePrint(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).print(); +} + +BOOL MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE; + CodeView &codeView=(CodeView&)*mdiWindow; + if(codeView.getTitle()==String(STRING_UNTITLED))return handleFileSaveAs(); + if(!codeView.save())return mStatusBar->setText(codeView.getTitle()+String(" save failed.")),FALSE; + return mStatusBar->setText(codeView.getTitle()+String(" saved.")),TRUE; + return TRUE; +} + +BOOL MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileName; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE; + if(!openDialog.getSaveFileName(*this,"Assembly Files","File Save","*.asm",strPathFileName))return FALSE; + if(!strPathFileName.strstr(".asm"))strPathFileName+=".asm"; + if(!((CodeView&)*mdiWindow).save(strPathFileName))return mStatusBar->setText(strPathFileName+String(" save failed!.")),FALSE; + return mStatusBar->setText(strPathFileName+String(" saved.")),TRUE; +} + +void MainFrame::handleCommunications(void) +{ + SerialDlg serDlg; + serDlg.perform(*this); +} + +void MainFrame::handleHelp(void) +{ + String strPathHelpFileName; + DiskInfo diskInfo; + + diskInfo.getCurrentDirectory(strPathHelpFileName); + strPathHelpFileName+=String(STRING_HELPFILENAME); + ::WinHelp(*this,strPathHelpFileName,HELP_CONTENTS,0); +} + +void MainFrame::handleMenuCompiler() +{ + M68Reg m68Reg; + CMPDlg cmpDlg; + Block pathDirList; + + m68Reg.getIncludePath(pathDirList); + cmpDlg.setIncludePath(pathDirList); + if(cmpDlg.perform(*this)) + { + cmpDlg.getIncludePath(pathDirList); + m68Reg.setIncludePath(pathDirList); + } + return; +} + +void MainFrame::handleQuit() +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +// support & testing +BOOL MainFrame::codeLoad(const String &strPathBinary) +{ + MCUView *pMCUView; + + pMCUView=::new MCUView; + pMCUView->createWindow(*this,STRING_MCUVIEWCLASSNAME,STRING_MCUVIEWCLASSNAME,"mcuMenu","Doc"); + insert(*pMCUView); + pMCUView->setCode(strPathBinary); + return TRUE; +} + +void MainFrame::setParts(int numParts) +{ + GlobalData statParts; + if(1==numParts){statParts.size(1);*((int*)&statParts[0])=FirstPartWidth;} + else {statParts.size(2);*((int*)&statParts[0])=FirstPartWidth;*((int*)&statParts[0]+1)=SecondPartWidth;} + mStatusBar->setParts(statParts); +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + M68Reg m68Reg; + Array >mdiWindows; + + if(!m68Reg.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + getDocuments(mdiWindows); + for(int index=0;index &mdiWindow=mdiWindows[index]; + removeHistory(mdiWindow->getMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + M68Reg m68Reg; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + m68Reg.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex nameList; + PureMenu fileMenu; + String strItem; + + m68Reg.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MenuFileNew,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MenuFileOpen,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MenuFileSave,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,MenuEditCut,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,MenuEditCopy,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,MenuEditPaste,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,MenuEditFind,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +} + +BOOL MainFrame::bringDocumentToFront(const String &strTitle) +{ + Array >mdiWindows; + + getDocuments(mdiWindows); + for(int index=0;index &mdiWindow=mdiWindows[index]; + if(((CodeView&)*mdiWindow).getTitle()==strTitle){mdiWindow->bringWindowToTop();return TRUE;} + } + return false; +} + +void MainFrame::splash(void) +{ + SplashScreen splashScreen("SPLASH","M68HC11"); + splashScreen.perform(); +} + +// virtuals + +void MainFrame::mdiDestroy(MDIWindow &mdiWindow) +{ + Array >mdiWindows; + WORD winCount(0); + + getDocuments(mdiWindows); + for(int index=0;index &mdiWindowPtr=mdiWindows[index]; + if(mdiWindowPtr->className()==String(STRING_CODEVIEWCLASSNAME)&&((MDIWindow*)mdiWindowPtr!=&mdiWindow))winCount++; + } + if(!winCount)setParts(SinglePart); +} + +void MainFrame::mdiActivate(MDIWindow &mdiWindow) +{ + if(mdiWindow.className()==String(STRING_CODEVIEWCLASSNAME))setParts(DoublePart); + removeHistory(mdiWindow.getMenu()); + applyHistory(mdiWindow.getMenu()); +} + +void MainFrame::mdiDeactivate(MDIWindow &/*mdiWindow*/) +{ +} diff --git a/m68hc11/Mainfrm.hpp b/m68hc11/Mainfrm.hpp new file mode 100644 index 0000000..395788f --- /dev/null +++ b/m68hc11/Mainfrm.hpp @@ -0,0 +1,112 @@ +#ifndef _M68HC11_MAINFRAME_HPP_ +#define _M68HC11_MAINFRAME_HPP_ +#ifndef _COMMON_MDIFRM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif +#ifndef _M68HC11_COMMCONTROL_HPP_ +#include +#endif +#ifndef _M68HC11_M68HC11_HPP_ +#include +#endif +#ifndef _AS68HC11_M68ASSEMBLER_HPP_ +#include +#endif + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); + static String className(void); + void splash(void); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); +private: + enum {StatusBarID=500,ToolBarID=501,StartDynamicID=30000}; + enum{SinglePart=1,DoublePart=2,FirstPartWidth=340,SecondPartWidth=420}; + enum{MenuFileSave=SBCMENU_FILESAVE,MenuFileQuit=SBCMENU_FILEQUIT,MenuFilePrint=SBCMENU_FILEPRINT, + MenuSettingsSerial=SBCMENU_SETTINGSSERIAL,MenuHelpContents=SBCMENU_HELPCONTENTS, + MenuHelpSearch=SBCMENU_HELPSEARCH,MenuRegistration=SBCMENU_REGISTRATION,MenuFileNew=SBCMENU_FILENEW, + MenuFileOpen=SBCMENU_FILEOPEN,MenuHelpAbout=SBCMENU_HELPABOUT,MenuFileClose=SBCMENU_FILECLOSE, + MenuFileSaveAs=SBCMENU_FILESAVEAS,MenuCascade=IDM_CASCADE,MenuTile=IDM_TILE,MenuArrange=IDM_ARRANGE, + MenuCloseAll=IDM_CLOSEALL,MenuMinimizeAll=IDM_MINIMIZEALL,MenuRestoreAll=IDM_RESTOREALL, + MenuEditCut=SBCMENU_EDITCUT,MenuEditCopy=SBCMENU_EDITCOPY,MenuEditPaste=SBCMENU_EDITPASTE, + MenuEditFind=SBCMENU_EDITFIND,MenuCodeCompile=SBCMENU_CODECOMPILE,MenuCompiler=SBCMENU_COMPILER, + MenuCodeCompileAndLoad=SBCMENU_CODECOMPILEANDLOAD}; + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType activateAppHandler(CallbackData &someCallbackData); + CallbackData::ReturnType displayChangeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + void createToolBar(void); + void handleMenuCompiler(); + void handleCodeCompile(void); + void handleCodeCompileAndLoad(void); + void handleCommunications(void); + void handleEditCut(void); + void handleEditCopy(void); + void handleEditPaste(void); + void handleEditFind(void); + void handleFileNew(void); + void handleFileOpen(void); + void handleFileOpen(CallbackData &someCallbackData); + void handleFileOpen(const String &strPathFileName); + void handleFileClose(void); + void handleFilePrint(void); + void handleHelp(void); + void handleQuit(void); + BOOL handleFileSave(void); + BOOL handleFileSaveAs(void); + BOOL codeLoad(const String &strPathBinary); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void setParts(int numParts); + void applyHistory(PureMenu &pureMenu); + void updateHistory(const String &pathFileName); + void removeHistory(PureMenu &pureMenu); + BOOL bringDocumentToFront(const String &strTitle); + + Callback mQueryEndSessionHandler; + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mLineHandler; + SmartPointer mStatusBar; + CommControl mCommControl; + ToolBar mToolBar; +// SerialSettings mSerialSettings; + M68Assembler m68Assembler; + static char szClassName[]; + static char szMenuName[]; +}; + +inline +String MainFrame::className(void) +{ + return String(szClassName); +} +#endif diff --git a/m68hc11/ODLSTLED.CPP b/m68hc11/ODLSTLED.CPP new file mode 100644 index 0000000..1908ede --- /dev/null +++ b/m68hc11/ODLSTLED.CPP @@ -0,0 +1,129 @@ +#include +#include +#include +#include + +OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID) +: OwnerDrawList(parentWnd,hControlWnd,controlID), mRGBGray(192,192,192), mGrayBrush(mRGBGray), + mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"), + mDashBitmap("DASH"), mFont("Courier",14) +{ +} + +OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style) +: OwnerDrawList(parentWnd,initRect,controlID,style), mRGBGray(192,192,192), mGrayBrush(mRGBGray), + mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"), + mDashBitmap("DASH"), mFont("Courier",14) +{ +} + +OwnerDrawListBinaryLed::~OwnerDrawListBinaryLed() +{ +} + +OwnerDrawListBinaryLed &OwnerDrawListBinaryLed::operator=(const OwnerDrawListBinaryLed &/*someOwnerDrawListBinaryLed*/) +{ // private implementation + return *this; +} + +// **** virtuals + +LPARAM OwnerDrawListBinaryLed::handleControlColor(PureDevice &/*pureDevice*/,Control &/*wndListBox*/) +{ + return (LPARAM)(GDIObj)mGrayBrush; +} + +WORD OwnerDrawListBinaryLed::handleDraw(const DrawItem &drawItem) +{ + if(!isOkay()||-1==drawItem.itemID()||DrawItem::ListBox!=drawItem.controlType())return FALSE; + PureDevice pureDevice(drawItem.deviceContext()); + pureDevice.setBkColor(mRGBGray); + switch(drawItem.itemAction()) + { + case DrawItem::Select : + case DrawItem::DrawEntire : + case DrawItem::Focus : + drawEntire(drawItem); + break; + } + return TRUE; +} + +WORD OwnerDrawListBinaryLed::handleMeasureItem(MeasureItem &measureItem) +{ + measureItem.itemHeight(20); + return TRUE; +} + +void OwnerDrawListBinaryLed::drawEntire(const DrawItem &drawItem) +{ + PureDevice pureDevice(drawItem.deviceContext()); + PureDevice memDevice; + String stringData; + String strNumber; + TEXTMETRIC textMetric; + Rect drawRect; + SIZE sizeExtent; + HFONT hPrevFont; + + if(!isOkay())return; + stringData.reserve(256); + drawRect=drawItem.rectItem(); + hPrevFont=(HFONT)::SelectObject(drawItem.deviceContext(),(GDIObj)mFont); + memDevice.compatibleDevice(pureDevice); + sendMessage(drawItem.hwndItem(),LB_GETTEXT,drawItem.itemID(),(LPARAM)(LPSTR)stringData); + strNumber=stringData.betweenString('\t',0); + if(strNumber.isNull())setBitmap(); + else + { + setBitmap(::atoi(strNumber)); + stringData=stringData.betweenString(0,'\t'); + } + if(stringData.isNull())::MessageBeep(0); + ::GetTextMetrics(drawItem.deviceContext(),&textMetric); + ::GetTextExtentPoint32(drawItem.deviceContext(),(LPSTR)stringData,stringData.length(),&sizeExtent); + if(drawItem.itemState()&ODS_DISABLED) + { + ::GrayString(drawItem.deviceContext(),(HBRUSH)(GDIObj)mDisabledBrush,(GRAYSTRINGPROC)0,(LPARAM)(LPSTR)stringData,stringData.length(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,0,0); + memDevice.select(mBlankBitmap,TRUE); + Rect stretchRect(drawRect); + stretchRect.right(mBlankBitmap.width()); + stretchRect.bottom(sizeExtent.cy); + pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy); + memDevice.select(mBlankBitmap,FALSE); + } + else + { + ::TextOut(drawItem.deviceContext(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,(LPSTR)stringData,stringData.length()); + memDevice.select(mBlankBitmap,TRUE); + Rect stretchRect(drawRect); + stretchRect.right(mBlankBitmap.width()); + stretchRect.bottom(sizeExtent.cy); + pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy); + memDevice.select(mBlankBitmap,FALSE); + } + if((((UINT)drawItem.itemState())&ODS_FOCUS)) + { + Rect bmpRect(drawRect); + bmpRect.right(bmpRect.left()+mBlankBitmap.width()); + bmpRect.bottom(bmpRect.top()+sizeExtent.cy); + ::DrawFocusRect(drawItem.deviceContext(),(RECT*)&bmpRect); + } + ::SelectObject(drawItem.deviceContext(),hPrevFont); +} + +void OwnerDrawListBinaryLed::setBitmap(BYTE value) +{ + for(int index=0,mask=0x80;index<8;index++,mask/=2) + mBlankBitmap.setFrom(value&mask?mOneBitmap:mZeroBitmap,getPlacementRect(index)); +} + +void OwnerDrawListBinaryLed::setBitmap(void) +{ + for(int index=0,mask=0x80;index<8;index++,mask/=2)mBlankBitmap.setFrom(mDashBitmap,getPlacementRect(index)); +} + +Rect OwnerDrawListBinaryLed::getPlacementRect(int position) +{ + return Rect(position*CellWidth,0,CellWidth,CellHeight); +} diff --git a/m68hc11/ODLSTLED.HPP b/m68hc11/ODLSTLED.HPP new file mode 100644 index 0000000..cc358a0 --- /dev/null +++ b/m68hc11/ODLSTLED.HPP @@ -0,0 +1,44 @@ +#ifndef _COMMON_OWNERDRAWLISTBINARYLED_HPP_ +#define _COMMON_OWNERDRAWLISTBINARYLED_HPP_ +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLIST_HPP_ +#include +#endif +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif + +class OwnerDrawListBinaryLed : public OwnerDrawList +{ +public: + OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID); + OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style=LBS_NOTIFY|WS_BORDER|LBS_HASSTRINGS|WS_VSCROLL|LBS_OWNERDRAWFIXED|WS_CLIPCHILDREN|WS_CLIPSIBLINGS); + virtual ~OwnerDrawListBinaryLed(); + OwnerDrawListBinaryLed &operator=(const OwnerDrawListBinaryLed &someOwnerDrawListBinaryLed); +protected: + virtual WORD handleDraw(const DrawItem &drawItem); + virtual WORD handleMeasureItem(MeasureItem &measureItem); + virtual LPARAM handleControlColor(PureDevice &pureDevice,Control &wndListBox); + virtual void drawEntire(const DrawItem &drawItem); +private: + enum {BmSel=0,BmUnSel=1}; + enum {CellWidth=13,CellHeight=23}; + Rect getPlacementRect(int position); + void setBitmap(BYTE value); + void setBitmap(void); + + PureBitmap mBlankBitmap; + PureBitmap mOneBitmap; + PureBitmap mZeroBitmap; + PureBitmap mDashBitmap; + Font mFont; + RGBColor mRGBGray; + Brush mGrayBrush; + Brush mDisabledBrush; +}; +#endif \ No newline at end of file diff --git a/m68hc11/ONE.BMP b/m68hc11/ONE.BMP new file mode 100644 index 0000000..0d0476c Binary files /dev/null and b/m68hc11/ONE.BMP differ diff --git a/m68hc11/OPENDIR.CPP b/m68hc11/OPENDIR.CPP new file mode 100644 index 0000000..009d9f8 --- /dev/null +++ b/m68hc11/OPENDIR.CPP @@ -0,0 +1,184 @@ +#include +#include +#include + +OpenDirectory::OpenDirectory(void) +{ +} + +OpenDirectory::~OpenDirectory() +{ +} + +bool OpenDirectory::getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory) +{ + DiskInfo diskInfo; + String strCurrentDirectory; + + if(strInitialDirectory.isNull())diskInfo.getCurrentDirectory(strCurrentDirectory); + else strCurrentDirectory=strInitialDirectory; + owner(parentWindow); + instance(parentWindow.processInstance()); + filter("..;."); + filterPattern("..;."); + fileName(""); + fileTitle(""); + initialDirectory(strCurrentDirectory); + title(titleString); + creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST|OpenDialog::ENABLEHOOK); + OpenDialog::hookProc((LPOFNHOOKPROC)getHookAddress()); + mLastFolderChange=String(""); + if(!getOpenFileName())return false; + strDirectory=mLastFolderChange; + return true; +} + +OpenDirectory::OpenDirectory(const OpenDirectory &someOpenDirectory) +{ // private implementation + *this=someOpenDirectory; +} + +OpenDirectory &OpenDirectory::operator=(const OpenDirectory &/*someOpenDirectory*/) +{ // private implementation + return *this; +} + +UINT OpenDirectory::hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam) +{ + UINT returnCode(false); + switch(uiMsg) + { + case WM_NOTIFY : + { + LPOFNOTIFY pNotify=(LPOFNOTIFY)lParam; + switch(pNotify->hdr.code) + { + case CDN_INITDONE : + ::EnableWindow(::GetDlgItem(getParent(),FileNameEditControlID),false); + returnCode=handleInitDone(); + break; + case CDN_SELCHANGE : + returnCode=handleSelChange(); + break; + case CDN_FOLDERCHANGE : + returnCode=handleFolderChange(); + break; + case CDN_SHAREVIOLATION : + returnCode=handleShareViolation(); + break; + case CDN_HELP : + returnCode=handleHelp(); + break; + case CDN_FILEOK : + returnCode=handleFileOk(); + break; + case CDN_TYPECHANGE : + returnCode=handleTypeChange(); + break; + } + } + } + return returnCode; +} + +// helpers + +bool OpenDirectory::getPathFileName(String &strPathFileName) +{ + if(!getHandle())return false; + strPathFileName.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETFILEPATH,MaxString,(LPARAM)(LPSTR)strPathFileName); +} + +bool OpenDirectory::getFileName(String &strFileName) +{ + if(!getHandle())return false; + strFileName.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETSPEC,MaxString,(LPARAM)(LPSTR)strFileName); +} + +bool OpenDirectory::getFolderPath(String &strFolderPath) +{ + if(!getHandle())return false; + strFolderPath.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETFOLDERPATH,MaxString,(LPARAM)(LPSTR)strFolderPath); +} + +bool OpenDirectory::hideControl(UINT controlID) +{ + if(!getHandle())return false; + return ::SendMessage(getParent(),CDM_HIDECONTROL,controlID,0); +} + +bool OpenDirectory::setControlText(UINT controlID,const String &strControlText)const +{ + if(!getHandle())return false; + return ::SendMessage(getParent(),CDM_SETCONTROLTEXT,controlID,(LPARAM)(LPSTR)(String&)strControlText); +} + +bool OpenDirectory::getControlText(UINT controlID,String &strControlText)const +{ + if(!getHandle())return false; + strControlText.reserve(MaxString); + return ::SendMessage(getParent(),WM_GETTEXT,MaxString,(LPARAM)(char*)strControlText); +} + +bool OpenDirectory::setDefaultExtension(const String &strDefaultExtension) +{ + if(!getHandle()||strDefaultExtension.isNull())return false; + return ::SendMessage(getParent(),CDM_SETDEFEXT,0,(LPARAM)(LPSTR)(String&)strDefaultExtension); +} + +// virtuals + +UINT OpenDirectory::handleInitDone(void) +{ + return false; +} + +UINT OpenDirectory::handleSelChange(void) +{ + String strFolderPath; + + getFolderPath(strFolderPath); + setControlText(FileNameEditControlID,strFolderPath); + return false; +} + +UINT OpenDirectory::handleFolderChange(void) +{ + String strFolderPath; + + getFolderPath(strFolderPath); + if(strFolderPath==mLastFolderChange) + { + setControlText(FileNameEditControlID,strFolderPath); + ::EndDialog(getParent(),TRUE); + } + else + { + mLastFolderChange=strFolderPath; + setControlText(FileNameEditControlID,strFolderPath); + } + return false; +} + +UINT OpenDirectory::handleShareViolation(void) +{ + return false; +} + +UINT OpenDirectory::handleFileOk(void) +{ + return false; +} + +UINT OpenDirectory::handleHelp(void) +{ + return false; +} + +UINT OpenDirectory::handleTypeChange(void) +{ + return false; +} diff --git a/m68hc11/OPENDIR.HPP b/m68hc11/OPENDIR.HPP new file mode 100644 index 0000000..dd1d7a6 --- /dev/null +++ b/m68hc11/OPENDIR.HPP @@ -0,0 +1,42 @@ +#ifndef _M68HC11_OPENDIRECTORY_HPP_ +#define _M68HC11_OPENDIRECTORY_HPP_ +#ifndef _COMMON_OPENDIALOG_HPP_ +#include +#endif +#ifndef _HOOKPROC_OFNHOOK_HPP_ +#include +#endif + +class OpenDirectory : private OpenDialog, private OFNHook +{ +public: + OpenDirectory(void); + virtual ~OpenDirectory(); + bool getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory); +protected: + virtual UINT hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam); + virtual UINT handleInitDone(void); + virtual UINT handleSelChange(void); + virtual UINT handleFolderChange(void); + virtual UINT handleShareViolation(void); + virtual UINT handleFileOk(void); + virtual UINT handleHelp(void); + virtual UINT handleTypeChange(void); + + bool getPathFileName(String &strPathFileName); + bool getFileName(String &strFileName); + bool getFolderPath(String &strFolderPath); + bool hideControl(UINT controlID); + bool setDefaultExtension(const String &strDefaultExtension); + bool getControlText(UINT controlID,String &strControlText)const; + bool setControlText(UINT controlID,const String &strControlText)const; +private: + enum{FileNameEditControlID=0x480}; + enum{MaxString=256}; + OpenDirectory(const OpenDirectory &someOpenDirectory); + OpenDirectory &operator=(const OpenDirectory &someOpenDirectory); + + String mLastFolderChange; +}; +#endif + diff --git a/m68hc11/PARSE.LOG b/m68hc11/PARSE.LOG new file mode 100644 index 0000000..e69de29 diff --git a/m68hc11/SCRAPS.TXT b/m68hc11/SCRAPS.TXT new file mode 100644 index 0000000..4f36921 --- /dev/null +++ b/m68hc11/SCRAPS.TXT @@ -0,0 +1,764 @@ + + +#if 0 +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + CommControl commControl; + DeviceControlBlock deviceControlBlock; + CommStatus commStatus; + BYTE charByte; + String strString; + BYTE ioBuffer[256]; + DWORD eventMask; + + commControl.open(CommControl::PortCOM1); + if(!commControl.isOkay())return FALSE; + commControl.getDeviceControlBlock(deviceControlBlock); + deviceControlBlock.parity(DeviceControlBlock::ParityNone); + deviceControlBlock.baudRate(1200); + deviceControlBlock.dataBits(8); + deviceControlBlock.stopBits(0); + if(!commControl.setDeviceControlBlock(deviceControlBlock))::OutputDebugString("Set operation failed\n"); + + ::OutputDebugString("waiting for break signal...\n"); + commControl.setEventMask(CommControl::EventBreak); + commControl.waitEvent(); + ::OutputDebugString("break received, loading code...\n"); + + for(int index=0;index<256;index++)ioBuffer[index]=index; + charByte=0xFF; + commControl.write(&charByte,sizeof(charByte)); + commControl.write(ioBuffer,sizeof(ioBuffer)); + ::memset(ioBuffer,0,sizeof(ioBuffer)); + + ::OutputDebugString("receiving echo\n"); + while(TRUE) + { + commControl.clearError(commStatus); + if(commStatus.bytesInReceiveQueue()) + { + commControl.read(ioBuffer,sizeof(ioBuffer)); + for(index=0;index+8 +#include +#include +#include +#include +#include +#include +#include + +void main(int argc,char **argv) +{ + CommControl commControl; + CommStatus commStatus; + DeviceControlBlock deviceControlBlock; + DeviceControlBlock sanityBlock; + BYTE ioBuffer[256]; + + commControl.open(CommControl::PortCOM1); + if(!commControl.isOkay())return; + commControl.getDeviceControlBlock(deviceControlBlock); + deviceControlBlock.parity(DeviceControlBlock::ParityNone); +// deviceControlBlock.dataBits(8); +// deviceControlBlock.stopBits(1); +// deviceControlBlock.baudRate(1200); + if(!commControl.setDeviceControlBlock(deviceControlBlock)) + { + String strCode; + DWORD errorCode(::GetLastError()); + ::sprintf(strCode,"0x%08lx %d\n",errorCode,errorCode); + ::OutputDebugString(strCode); + } + String strRcv; + commControl.writeLine("ATE1"); + commControl.readLine(strRcv); + ::OutputDebugString(strRcv); + commControl.writeLine("ATDT 9,1,5162620924"); +// commControl.readLine(strRcv); + ::OutputDebugString(strRcv); + commControl.clearError(commStatus); + if(commStatus.bytesInReceiveQueue()) + { + commControl.readLine(strRcv); + ::OutputDebugString(strRcv); + } + commControl.close(); +} +#endif + +#include + + String strPathFileName("c:\\work\\as68hc11\\code2.asm"); + String strLine; + FileIO outFile; + + outFile.open(strPathFileName); //,FileIO::GenericRead,FileIO::FileShareRead); + if(!outFile.isOkay())return FALSE; + while(outFile.readLine(strLine)); + outFile.close(); + outFile.open(strPathFileName,FileIO::GenericRead,FileIO::FileShareRead); + if(!outFile.isOkay())return FALSE; + while(outFile.readLine(strLine)); + return FALSE; + + + +void MainFrame::createToolBar(void) +{ + Block addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MenuFileNew,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MenuFileOpen,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MenuFileSave,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,112,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,110,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,111,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_PRINT,RiskMenuPrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_PRINTPRE,RiskMenuPageSetup,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,122,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.show(SW_SHOW); +// mToolBar.addButton(ToolBarButton(STD_HELP,RiskMenuHelpContents,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + +// mToolBar.addButton(ToolBarButton(STD_DELETE,114,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_PROPERTIES,117,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_REDOW,119,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_REPLACE,121,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_UNDO,123,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +} + + + + +// mToolBar.show(SW_SHOW); +// mToolBar.addButton(ToolBarButton(STD_PRINT,RiskMenuPrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_PRINTPRE,RiskMenuPageSetup,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_HELP,RiskMenuHelpContents,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_DELETE,114,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_PROPERTIES,117,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_REDOW,119,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_REPLACE,121,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolBar.addButton(ToolBarButton(STD_UNDO,123,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + + + + + +// commControl.read(&address,sizeof(address)); +// ::sprintf(strString,"%lx",int(address)); +// ::sprintf(strString,"%d%d%d%d%d%d%d%d", +// int((address&128?1:0)),int((address&64?1:0)),int((address&32?1:0)),int((address&16?1:0)), +// int((address&8?1:0)),int((address&4?1:0)),int((address&2?1:0)),int((address&1?1:0))); +// ::MessageBox(::GetFocus(),(LPSTR)strString,"VALUE",MB_OK); +// commControl.write(&charByte,sizeof(charByte)); + + +// WORD address; + + +// typedef void (PASCAL * DEBUGPROC)(CommControl &commControl); +// Library procLib("procLib.dll"); +// if(!procLib.isOkay())return FALSE; +// if(!procLib.procIn("_procDebug@4"))return FALSE; + // ((DEBUGPROC)procLib.procAddress("_procDebug@4"))(commControl); + + +//c ((COMPROC)procLib.procAddress("_procDebug@4"))(commControl); + +/// ::memset(rcvBuffer,0,sizeof(rcvBuffer)); + +// WORD address; +// String strString; +// WORD count(0); +// while(TRUE) +// { +// commControl.read(&address,sizeof(address)); +// ::sprintf(strString,"%d) %08lx\n",++count,int(address)); +// ::OutputDebugString(strString); +// commControl.write(&charByte,sizeof(charByte)); +// } + +// commControl.read(rcvBuffer,1); +// commControl.read(rcvBuffer+1, + +// commControl.read(rcvBuffer+2,1); +// commControl.read(rcvBuffer+3,1); + +// commControl.setEventMask(CommControl::EventBreak); +// if(!commControl.waitEvent()){mStatusBar->setText("timeout waiting for break.");return FALSE;} +// else mStatusBar->setText("received break"); +// commControl.write(&charByte,sizeof(charByte)); +// ::memset(rcvBuffer,0,sizeof(rcvBuffer)); +// charByte=0; +// commControl.read(&charByte,1); +// commControl.read(&charByte,1); + +// ldd SWIHANDLER ; get address of SWIHANDLER to register D +// bsr WRITEWORD ; send it out to SCI +// bsr WAITCHAR ; wait for a character +// ldd [SWI] ; load contents of SWI vector ? +// bsr WRITEWORD ; send it out to SCI +// bsr WAITCHAR ; wait for a character +// ldd SWIHANDLER ; load address of SWIHANDLER to register D +// std [SWI] ; store SWIHANDLER at swi vector ? +// ldd [SWI] ; load contents of SWIHANDLER +// bsr WRITEWORD ; send it out to SCI +// bsr WAITCHAR ; wait for a character + + + + + + + +; ********************************************************************************* +; +; ldd REGS ; load REGS into D +; std [MEMLOC] ; store D into MEMLOC +;CONTINUE equ * ; sync address +; ldd [MEMLOC] ; load D with value at MEMLOC +; xgdx ; exchange D with X +; ldab ix,00h ; load B with byte at address of X plus 00h +; bsr WRITECHAR ; write the contents of B to SCI +; ldd [MEMLOC] ; reload the value at MEMLOC +; addd 0001h ; increment value +; cpd CONFIG ; compare register D with CONFIG +; bgt END ; if D is greater than CONFIG we're all done +; std [MEMLOC] ; store value back into MEMLOC +; jmp CONTINUE ; keep going +;END equ * +; std [EEPROM] +; ldd [EEPROM] +; bsr WRITEWORD +; bsr WAITCHAR + + + + + +; ldab EVENTCHAR +; bsr WRITECHAR +; ldab [PPROG] +; bsr WRITECHAR +; bsr WAITCHAR + + +; ldab EVENTCHAR +; bsr WRITECHAR +; ldab [BPROT] +; bsr WRITECHAR +; bsr WAITCHAR + +; ldab 00h +; stab [BPROT] + +; ldab EVENTCHAR +; bsr WRITECHAR +; ldab [BPROT] +; bsr WRITECHAR +; bsr WAITCHAR + +; ldab 11h +; stab [EEPROM] +; ldab EVENTCHAR +; bsr WRITECHAR +; ldab [EEPROM] +; bsr WRITECHAR +; bsr WAITCHAR + +; ldab EVENTEND +; bsr WRITECHAR + +; ldab EVENTWORD +; bsr WRITECHAR +; ldd 5555h +; std [EEPROM] +; ldd [EEPROM] +; bsr WRITEWORD +; bsr READCHAR +; ldab EVENTEND +; bsr WRITECHAR +; ldd [msg] ; this seems to generate a compile error +; bsr WRITEENDEVENT ; write end event character to the SCI + + + + + + +#define STRING_REGISTERPORTA 700 +#define STRING_REGISTERCONFIG 763 + + + + mOwnerDrawList->insertString("PORTA"); + mOwnerDrawList->insertString("RESERVED"); + mOwnerDrawList->insertString("PIOC"); + mOwnerDrawList->insertString("PORTC"); + mOwnerDrawList->insertString("PORTB"); + mOwnerDrawList->insertString("PORTCL"); + mOwnerDrawList->insertString("RESERVED"); + mOwnerDrawList->insertString("DDRC"); + mOwnerDrawList->insertString("PORTD"); + mOwnerDrawList->insertString("DDRD"); + mOwnerDrawList->insertString("PORTE"); + mOwnerDrawList->insertString("CFORC"); + mOwnerDrawList->insertString("OC1M"); + mOwnerDrawList->insertString("OC1D"); + mOwnerDrawList->insertString("TCNT(Hi)"); + mOwnerDrawList->insertString("TCNT(Lo)"); + mOwnerDrawList->insertString("TIC1(Hi)"); + mOwnerDrawList->insertString("TIC1(Lo)"); + mOwnerDrawList->insertString("TIC2(Hi)"); + mOwnerDrawList->insertString("TIC2(Lo)"); + mOwnerDrawList->insertString("TIC3(Hi)"); + mOwnerDrawList->insertString("TIC3(Lo)"); + mOwnerDrawList->insertString("TOC1(Hi)"); + mOwnerDrawList->insertString("TOC1(Lo)"); + mOwnerDrawList->insertString("TOC2(Hi)"); + mOwnerDrawList->insertString("TOC2(Lo)"); + mOwnerDrawList->insertString("TOC3(Hi)"); + mOwnerDrawList->insertString("TOC3(Lo)"); + mOwnerDrawList->insertString("TOC4(Hi)"); + mOwnerDrawList->insertString("TOC4(Lo)"); + mOwnerDrawList->insertString("TI405(Hi)"); + mOwnerDrawList->insertString("TI405(Lo)"); + mOwnerDrawList->insertString("TCTL1"); + mOwnerDrawList->insertString("TCTL2"); + mOwnerDrawList->insertString("TMSK1"); + mOwnerDrawList->insertString("TFLG1"); + mOwnerDrawList->insertString("TMSK2"); + mOwnerDrawList->insertString("TFLG2"); + mOwnerDrawList->insertString("PACTL"); + mOwnerDrawList->insertString("PACNT"); + mOwnerDrawList->insertString("SPCR"); + mOwnerDrawList->insertString("SPSR"); + mOwnerDrawList->insertString("SPDR"); + mOwnerDrawList->insertString("BAUD"); + mOwnerDrawList->insertString("SCCR1"); + mOwnerDrawList->insertString("SCCR2"); + mOwnerDrawList->insertString("SCSR"); + mOwnerDrawList->insertString("SCDR"); + mOwnerDrawList->insertString("ADCTL"); + mOwnerDrawList->insertString("ADR1"); + mOwnerDrawList->insertString("ADR2"); + mOwnerDrawList->insertString("ADR3"); + mOwnerDrawList->insertString("ADR4"); + mOwnerDrawList->insertString("BPROT"); + mOwnerDrawList->insertString("EPROG"); + mOwnerDrawList->insertString("RESERVED"); + mOwnerDrawList->insertString("RESERVED"); + mOwnerDrawList->insertString("OPTION"); + mOwnerDrawList->insertString("COPRST"); + mOwnerDrawList->insertString("PPROG"); + mOwnerDrawList->insertString("HPRIO"); + mOwnerDrawList->insertString("INIT"); + mOwnerDrawList->insertString("TEST1"); + mOwnerDrawList->insertString("CONFIG"); + + + +#if 0 +#include + +BOOL MainFrame::codeLoad(const String &strPathBinary) +{ + FileHandle inFile; + BYTE sndBuffer[256]; + BYTE rcvBuffer[256]; + BYTE *ptrByte; + BYTE charByte(0xFF); + WORD codeLength(0); + DeviceControlBlock deviceControlBlock; + CommControl commControl; + CommStatus commStatus; + + if(!inFile.open(strPathBinary)){mStatusBar->setText("Error opening file.");return FALSE;} + if(!commControl.open(CommControl::Port(0))){mStatusBar->setText("Error opening port.");return FALSE;} + commControl.getDeviceControlBlock(deviceControlBlock); + deviceControlBlock.baudRate(1200); + deviceControlBlock.parity(DeviceControlBlock::Parity(0)); + deviceControlBlock.dataBits(8); + deviceControlBlock.stopBits(0); + if(!commControl.setDeviceControlBlock(deviceControlBlock))mStatusBar->setText("Failed to apply settings."); + mStatusBar->setText("waiting for break signal...."); + commControl.setEventMask(CommControl::EventBreak); + if(!commControl.waitEvent()){mStatusBar->setText("timeout waiting for break.");return FALSE;} + mStatusBar->setText("break received, loading code..."); + ::memset(sndBuffer,1,sizeof(sndBuffer)); + ::memset(rcvBuffer,0,sizeof(rcvBuffer)); + ptrByte=sndBuffer; + while(inFile.read(*ptrByte)){codeLength++;ptrByte++;} + commControl.write(&charByte,sizeof(charByte)); + commControl.read(&charByte,sizeof(charByte)); + commControl.write(sndBuffer,sizeof(sndBuffer)); + if(!commControl.read(rcvBuffer,sizeof(sndBuffer))){mStatusBar->setText("Failed to verify write.");return FALSE;} + if(!::memcmp(rcvBuffer,sndBuffer,codeLength))mStatusBar->setText("Code has been loaded onto device."); + else {mStatusBar->setText("Failed to verify write.");return FALSE;} + + +// event types +// 0x00 - character +// 0x01 - WORD +// 0x02 - DWORD +// 0x03 - varchar : [WORD:count,countcharacters] +// 0xFF - end + + + BYTE event; // 0x00=char, 0x01=WORD, 0x02=varchar + BYTE ack(0x00); + char charData; + WORD wordData; + DWORD dwordData; + int index; + BOOL reading(TRUE); + String strString; + int map(0x1000); + + enum Event{EventSingleByte=0x00,EventDoubleByte=0x01,EventQuadByte=0x02,EventVarByte=0x03, + EventRegs=0x04,EventEnd=0xFF}; + while(reading) + { + commControl.read(&event,sizeof(event)); + switch(Event(event)) + { + case EventSingleByte : + commControl.read(&charData,sizeof(charData)); + commControl.write(&ack,sizeof(ack)); + ::sprintf(strString,"(%d%d%d%d%d%d%d%d) %lx\n", + int((charData&128?1:0)),int((charData&64?1:0)),int((charData&32?1:0)),int((charData&16?1:0)), + int((charData&8?1:0)),int((charData&4?1:0)),int((charData&2?1:0)),int((charData&1?1:0)), + int(charData)); + ::OutputDebugString(strString); + ::MessageBox(::GetFocus(),(LPSTR)strString,"M68HC11",MB_OK); + break; + case EventDoubleByte : + commControl.read(&wordData,sizeof(wordData)); + commControl.write(&ack,sizeof(ack)); + ::sprintf(strString,"%lx\n",int(wordData)); + ::OutputDebugString(strString); + ::MessageBox(::GetFocus(),(LPSTR)strString,"M68HC11",MB_OK); + break; + case EventQuadByte : + commControl.read(&dwordData,sizeof(dwordData)); + commControl.write(&ack,sizeof(ack)); + ::sprintf(strString,"%lx\n",int(dwordData)); + ::OutputDebugString(strString); + ::MessageBox(::GetFocus(),(LPSTR)strString,"M68HC11",MB_OK); + break; + case EventVarByte : + commControl.read(&wordData,sizeof(wordData)); + for(index=0;indexsetText("No response to initial command.");return;} + commControl.write(sndBuffer,sizeof(sndBuffer)); + +// if(!commControl.read(rcvBuffer,sizeof(sndBuffer))){mStatusBar->setText("no data was received from device.");return;} +// if(!::memcmp(rcvBuffer,sndBuffer,sizeof(sndBuffer)))mStatusBar->setText("The device is present and working properly."); +// else mStatusBar->setText("Failed to verify write."); + + + + + + +#if 0 +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + CommControl commControl; + CommStatus commStatus; + DeviceControlBlock deviceControlBlock; + BYTE charByte(0xFF); + + commControl.open(CommControl::PortCOM1); + if(!commControl.isOkay())return FALSE; + if(!commControl.setDeviceControlBlock("baud=1200 data=8 stop=1 parity=N"))::OutputDebugString("Set operation failed\n"); + + String strString; + charByte='a'; + while(TRUE) + { + commControl.write(&charByte,sizeof(charByte)); +// commControl.waitForData(); + commControl.read(&charByte,sizeof(charByte)); + ::sprintf(strString,"%02x\n",(int)charByte); + ::OutputDebugString(strString); + charByte++; + +// commControl.clearError(commStatus); + +// if(commStatus.bytesInReceiveQueue()) +// { +// commControl.read(&charByte,sizeof(charByte)); +// ::sprintf(strString,"%02x\n",(int)charByte); +// ::OutputDebugString(strString); +// break; +// } + ::Sleep(250); + } + + + +/* + ::OutputDebugString("waiting for break signal...\n"); + commControl.setEventMask(CommControl::EventBreak); // EventBreak + if(!commControl.waitEvent())::OutputDebugString("timeout waiting for break.\n"); + else ::OutputDebugString("break received, loading code...\n"); + + + BYTE ioBuffer[256]; + + for(int index=0;index<256;index++)ioBuffer[index]=index; + charByte=0xFF; + commControl.write(&charByte,sizeof(charByte)); + +// commControl.clearError(commStatus); +// if(commStatus.bytesInReceiveQueue())commControl.read(ioBuffer,commStatus.bytesInReceiveQueue()); + + commControl.write(ioBuffer,sizeof(ioBuffer)); + ::memset(ioBuffer,0,sizeof(ioBuffer)); + + String strString; + ::OutputDebugString("receiving echo\n"); + while(TRUE) + { + commControl.clearError(commStatus); + + if(commStatus.bytesInReceiveQueue()) + { + commControl.read(ioBuffer,sizeof(ioBuffer)); + for(index=0;index+8 +#include + +SerialDlg::SerialDlg(void) +{ + mInitHandler.setCallback(this,&SerialDlg::initHandler); + mDestroyHandler.setCallback(this,&SerialDlg::destroyHandler); + mCommandHandler.setCallback(this,&SerialDlg::commandHandler); + mCloseHandler.setCallback(this,&SerialDlg::closeHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +SerialDlg::~SerialDlg() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +SerialDlg &SerialDlg::operator=(const SerialDlg &/*someSerialDlg*/) +{ // private implementation + return *this; +} + +BOOL SerialDlg::perform(GUIWindow &parentWindow) // ,SerialSettings &serialSettings) +{ + return ::DialogBoxParam(processInstance(),(LPSTR)"SERIAL",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SerialDlg::initHandler(CallbackData &/*someCallbackData*/) +{ + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + initSerialSettings(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SerialDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SerialDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(applySerialSettings())endDialog(TRUE); + break; + case IDCANCEL : + endDialog(FALSE); + break; + case SerialStopBits : + case SerialParity : + case SerialDataBits : + case SerialBaud : + case SerialPort : + mStatusBar->setText(" "); + break; + case SerialApply : + applySerialSettings(); + break; + case SerialTest : + testDevice(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SerialDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +void SerialDlg::initSerialSettings(void) +{ + M68Reg mcuReg; + + initPorts(); + initBaud(); + initDataBits(); + initStopBits(); + initParity(); + sendMessage(SerialPort,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getPort()); + sendMessage(SerialBaud,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getBaud()); + sendMessage(SerialDataBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getDataBits()); + sendMessage(SerialParity,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getParity()); + sendMessage(SerialStopBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getStopBits()); +} + +void SerialDlg::initPorts(void) +{ + String strPort; + CommControl commControl; + Block ports; + + sendMessage(SerialPort,CB_RESETCONTENT,0,0L); + commControl.enumerateDevices(ports); + for(int index=0;indexsetText("Error opening port."); + ::MessageBeep(0); + return false; + } + if(!commControl.setDeviceControlBlock(strCommSettings)){mStatusBar->setText("Failed to apply settings.");return false;} + sendMessage(SerialBaud,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strBaud); + mcuReg.setBaud(strBaud); + sendMessage(SerialDataBits,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strDataBits); + mcuReg.setDataBits(strDataBits); + currSel=sendMessage(SerialParity,CB_GETCURSEL,0,0L); + sendMessage(SerialParity,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strParity); + if(String("None")==strParity)strParity="N"; + else if(String("Odd")==strParity)strParity="O"; + else if(String("Even")==strParity)strParity="E"; + else if(String("Space")==strParity)strParity="S"; + mcuReg.setParity(strParity); + currSel=sendMessage(SerialStopBits,CB_GETCURSEL,0,0L); + sendMessage(SerialStopBits,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strStopBits); + mcuReg.setStopBits(strStopBits); + mStatusBar->setText("Settings have been applied."); + return true; +} + +void SerialDlg::testDevice(void) +{ + CommControl commControl; + BYTE prefix(0xFF); + GlobalData rcvBuffer; + GlobalData sndBuffer; + BYTE codeBytes[]={0x8E,0x00,0xFF,0xCE,0x10,0x00,0x6F,0x2C,0xCC,0x33,0x0C,0xA7,0x2B,0xE7,0x2D,0x1F,0x2E,0x20,0xFC,0xA6,0x2F,0x4C,0x1F,0x2E,0x80,0xFC,0xA7,0x2F,0x7E,0x00,0x0F}; + + sndBuffer.size(256); + sndBuffer.setZero(); + rcvBuffer.size(sndBuffer.size()); + rcvBuffer.setZero(); + ::memcpy(&sndBuffer[0],codeBytes,sizeof(codeBytes)); + if(IDCANCEL==::MessageBox(*this,"This operation will overwrite the contents of MCU RAM with the ECHO program.","WARNING",MB_OKCANCEL))return; + if(!commControl.open(getCommPort())){mStatusBar->setText("Error opening port.");return;} + if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return;} + mStatusBar->setText("waiting for break signal....please reset the device."); + if(!commControl.waitForBreak()){mStatusBar->setText("timeout waiting for break.");return;} + mStatusBar->setText("break received, loading code..."); + commControl.write(&prefix,sizeof(prefix)); + commControl.clearReceiveQueue(); + commControl.write(sndBuffer); + mStatusBar->setText("Waiting for response."); + if(!commControl.waitForData()){mStatusBar->setText("Timeout reached for receive.");return;} + commControl.readFully(rcvBuffer); + if(::memcmp(&rcvBuffer[0],&sndBuffer[0],sndBuffer.size())) + { + mStatusBar->setText("Failed to verify program load."); + return; + } + ::Sleep(250); + if(!echo(commControl))mStatusBar->setText("Received unexpected results from program."); + else mStatusBar->setText("The program has been verified, all tests successful."); + return; +} + +bool SerialDlg::echo(CommControl &commControl) +{ + BYTE sndByte('a'); + BYTE rcvByte=0; + DWORD rcvCount(0); + String str; + + if(!commControl.isOkay()) + { + if(!commControl.open(getCommPort())){mStatusBar->setText("Unable to open comm port.");mStatusBar->setText("Error opening port.");return false;} + if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return false;} + } + commControl.clearError(); + while('z'!=rcvByte) + { + CommStatus commStatus; + commControl.write(&sndByte,sizeof(sndByte)); + if(commControl.waitForData()) + { + rcvByte=0; + commControl.read(&rcvByte,sizeof(rcvByte)); + str+=rcvByte; + mStatusBar->setText(str); + if(!rcvCount&&rcvByte!='b') + { + mStatusBar->setText("Unexpected character in input stream."); + return false; + } + sndByte++; + rcvCount++; + } + } + ::Sleep(250); + return true; +} + +String SerialDlg::getByteString(BYTE charByte) +{ + String str; + ::sprintf(str.str(),"char:%d(0x%08lx)",(int)charByte,(int)charByte); + return str; +} + + diff --git a/m68hc11/SERDLG.HPP b/m68hc11/SERDLG.HPP new file mode 100644 index 0000000..fd3bf0f --- /dev/null +++ b/m68hc11/SERDLG.HPP @@ -0,0 +1,61 @@ +#ifndef _M68HC11_SERIALDLG_HPP_ +#define _M68HC11_SERIAL_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _M68HC11_M68HC11_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _COMMON_COMMCONTROL_HPP_ +#include +#endif + +class CommControl; + +class SerialDlg : public DWindow +{ +public: + SerialDlg(void); + virtual ~SerialDlg(); + BOOL perform(GUIWindow &parentWindow); +private: + enum{SerialStopBits=SERIAL_STOP,SerialParity=SERIAL_PARITY,SerialDataBits=SERIAL_DATA, + SerialBaud=SERIAL_BAUD,SerialPort=SERIAL_PORT,SerialApply=SERIAL_APPLY,SerialTest=SERIAL_TEST}; + enum {StatusBarID=500}; + SerialDlg &operator=(const SerialDlg &someSerialDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType controlColorHandler(CallbackData &someCallbackData); + CallbackData::ReturnType measureItemHandler(CallbackData &someCallbackData); + String getByteString(BYTE charByte); + CommControl::Port getCommPort(void)const; + String getCommSettings(void)const; + bool applySerialSettings(void); + void initSerialSettings(void); + void testDevice(void); + void initDataBits(void); + void initParity(void); + void initStopBits(void); + void initPorts(void); + void initBaud(void); + bool echo(CommControl &commControl); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + SmartPointer mStatusBar; +}; +#endif \ No newline at end of file diff --git a/m68hc11/SETTINGS.HPP b/m68hc11/SETTINGS.HPP new file mode 100644 index 0000000..2b93f86 --- /dev/null +++ b/m68hc11/SETTINGS.HPP @@ -0,0 +1,130 @@ +#ifndef _M68HC11_SERIALSETUP_HPP_ +#define _M68HC11_SERIALSETUP_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class SerialSettings +{ +public: + SerialSettings(void); + SerialSettings(const SerialSettings &someSerialSettings); + virtual ~SerialSettings(); + SerialSettings &operator=(const SerialSettings &someSerialSettings); + BOOL operator==(const SerialSettings &someSerialSettings)const; + DWORD port(void)const; + void port(DWORD port); + DWORD baudRate(void)const; + void baudRate(DWORD baudRate); + DWORD parity(void)const; + void parity(DWORD parity); + DWORD stopBits(void)const; + void stopBits(DWORD stopBits); + DWORD dataBits(void)const; + void dataBits(DWORD dataBits); +private: + DWORD mSerialPort; + DWORD mBaudRate; + DWORD mParity; + DWORD mStopBits; + DWORD mDataBits; +}; + +inline +SerialSettings::SerialSettings(void) +: mSerialPort(0), mBaudRate(1200), mParity(0), mStopBits(0), mDataBits(8) +{ +} + +inline +SerialSettings::SerialSettings(const SerialSettings &someSerialSettings) +{ + *this=someSerialSettings; +} + +inline +SerialSettings::~SerialSettings() +{ +} + +inline +SerialSettings &SerialSettings::operator=(const SerialSettings &someSerialSettings) +{ + port(someSerialSettings.port()); + baudRate(someSerialSettings.baudRate()); + parity(someSerialSettings.parity()); + stopBits(someSerialSettings.stopBits()); + dataBits(someSerialSettings.dataBits()); + return *this; +} + +inline +BOOL SerialSettings::operator==(const SerialSettings &someSerialSettings)const +{ + return (port()==someSerialSettings.port()&& + baudRate()==someSerialSettings.baudRate()&& + parity()==someSerialSettings.parity()&& + stopBits()==someSerialSettings.stopBits()&& + dataBits()==someSerialSettings.dataBits()); +} + +inline +DWORD SerialSettings::port(void)const +{ + return mSerialPort; +} + +inline +void SerialSettings::port(DWORD port) +{ + mSerialPort=port; +} + +inline +DWORD SerialSettings::baudRate(void)const +{ + return mBaudRate; +} + +inline +void SerialSettings::baudRate(DWORD baudRate) +{ + mBaudRate=baudRate; +} + +inline +DWORD SerialSettings::parity(void)const +{ + return mParity; +} + +inline +void SerialSettings::parity(DWORD parity) +{ + mParity=parity; +} + +inline +DWORD SerialSettings::stopBits(void)const +{ + return mStopBits; +} + +inline +void SerialSettings::stopBits(DWORD stopBits) +{ + mStopBits=stopBits; +} + +inline +DWORD SerialSettings::dataBits(void)const +{ + return mDataBits; +} + +inline +void SerialSettings::dataBits(DWORD dataBits) +{ + mDataBits=dataBits; +} +#endif \ No newline at end of file diff --git a/m68hc11/SPLASH.BMP b/m68hc11/SPLASH.BMP new file mode 100644 index 0000000..d093dda Binary files /dev/null and b/m68hc11/SPLASH.BMP differ diff --git a/m68hc11/SPLASH.CPP b/m68hc11/SPLASH.CPP new file mode 100644 index 0000000..79516e9 --- /dev/null +++ b/m68hc11/SPLASH.CPP @@ -0,0 +1,156 @@ +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mTimeout(timeout), + mTextFont("Times New Roman",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) +// if(useTimer()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)mStrCaption,style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIBitmap(*mPureDevice,mResBitmap->width(),mResBitmap->height(),*mResBitmap); + mDIBitmap.disposition(PointerDisposition::Delete); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mDIBitmap->copyBits(mResBitmap->ptrData(),mResBitmap->imageExtent()); + mDIBitmap->stretchBlt(pureDevice,Rect(0,0,width(),height())); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); +// pureDevice.textOut(60,180,"1998 Diversified Software Solutions"); + if(!mInstallLine.isNull()) + { + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(50,196,mInstallLine); + } + return (CallbackData::ReturnType)FALSE; +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} + + diff --git a/m68hc11/SPLASH.HPP b/m68hc11/SPLASH.HPP new file mode 100644 index 0000000..3b1d203 --- /dev/null +++ b/m68hc11/SPLASH.HPP @@ -0,0 +1,68 @@ +#ifndef _M68HC11_SPLASHSCREEN_HPP_ +#define _M68HC11_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIBitmap; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=2500}; + SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mInstallLine; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} + +#endif \ No newline at end of file diff --git a/m68hc11/XTRAINFO.HPP b/m68hc11/XTRAINFO.HPP new file mode 100644 index 0000000..3cf9bc0 --- /dev/null +++ b/m68hc11/XTRAINFO.HPP @@ -0,0 +1,86 @@ +#ifndef _M68HC11_EXTRAINFO_HPP_ +#define _M68HC11_EXTRAINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ExtraInfo +{ +public: + ExtraInfo(void); + ExtraInfo(const ExtraInfo &someExtraInfo); + ExtraInfo(DWORD userDataOne,DWORD userDataTwo); + virtual ~ExtraInfo(); + ExtraInfo &operator=(const ExtraInfo &someExtraInfo); + BOOL operator==(const ExtraInfo &someExtraInfo)const; + DWORD userDataOne(void)const; + void userDataOne(DWORD userDataOne); + DWORD userDataTwo(void)const; + void userDataTwo(DWORD userDataTwo); +private: + DWORD mUserDataOne; + DWORD mUserDataTwo; +}; + +inline +ExtraInfo::ExtraInfo(void) +: mUserDataOne(0), mUserDataTwo(0) +{ +} + +inline +ExtraInfo::ExtraInfo(const ExtraInfo &someExtraInfo) +{ + *this=someExtraInfo; +} + +inline +ExtraInfo::ExtraInfo(DWORD userDataOne,DWORD userDataTwo) +: mUserDataOne(userDataOne), mUserDataTwo(userDataTwo) +{ +} + +inline +ExtraInfo::~ExtraInfo() +{ +} + +inline +ExtraInfo &ExtraInfo::operator=(const ExtraInfo &someExtraInfo) +{ + userDataOne(someExtraInfo.userDataOne()); + userDataTwo(someExtraInfo.userDataTwo()); + return *this; +} + +inline +BOOL ExtraInfo::operator==(const ExtraInfo &someExtraInfo)const +{ + return (userDataOne()==someExtraInfo.userDataOne()&& + userDataTwo()==someExtraInfo.userDataTwo()); +} + +inline +DWORD ExtraInfo::userDataOne(void)const +{ + return mUserDataOne; +} + +inline +void ExtraInfo::userDataOne(DWORD userDataOne) +{ + mUserDataOne=userDataOne; +} + +inline +DWORD ExtraInfo::userDataTwo(void)const +{ + return mUserDataTwo; +} + +inline +void ExtraInfo::userDataTwo(DWORD userDataTwo) +{ + mUserDataTwo=userDataTwo; +} +#endif diff --git a/m68hc11/ZERO.BMP b/m68hc11/ZERO.BMP new file mode 100644 index 0000000..ac8cb75 Binary files /dev/null and b/m68hc11/ZERO.BMP differ diff --git a/m68hc11/backup/COMMCTRL.HPP b/m68hc11/backup/COMMCTRL.HPP new file mode 100644 index 0000000..01e8d70 --- /dev/null +++ b/m68hc11/backup/COMMCTRL.HPP @@ -0,0 +1,228 @@ +#ifndef _COMMON_COMMCONTROL_HPP_ +#define _COMMON_COMMCONTROL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_ +#include +#endif +#ifndef _M68HC11_COMMSTATUS_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif + +class CommControl +{ +public: + enum {TimeOut=5000}; + enum Port{PortCOM1,PortCOM2,PortCOM3,PortCOM4}; + enum EventMask{EventBreak=EV_BREAK,EventCts=EV_CTS,EventDsr=EV_DSR,EventErr=EV_ERR,EventRing=EV_RING, + EventRlsd=EV_RLSD,EventRxChar=EV_RXCHAR,EventRxFlag=EV_RXFLAG,EventTxEmpty=EV_TXEMPTY, + EventAll=EV_BREAK|EV_CTS|EV_DSR|EV_ERR|EV_RING|EV_RLSD|EV_RXCHAR|EV_RXFLAG|EV_TXEMPTY}; + CommControl(void); + virtual ~CommControl(); + bool open(Port commPort,BOOL overlappedIO=false); + void close(); + bool getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const; + bool setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const; + bool setDeviceControlBlock(String strControlBlock)const; // (ie) "baud=1200 parity=N data=8 stop=1" + DWORD readLine(String &strLine); + DWORD writeLine(const String &strLine)const; + DWORD read(void *pBuffer,int length,DWORD timeout=0L); + DWORD write(BYTE *pBuffer,int length)const; + DWORD write(GlobalData &sndBuffer); + DWORD enumerateDevices(Block &deviceList); + DWORD enumerateDevices(Block &deviceList); + bool clearError(void)const; + bool clearError(CommStatus &commStatus)const; + bool clearBreak(void)const; + bool clearReceiveQueue(void); + bool readFully(GlobalData &dataBytes); + bool readFully(BYTE *pBuffer,DWORD byteCount); + bool setBreak(void)const; + bool waitEvent(DWORD &eventMask,DWORD timeout); + bool waitEvent(DWORD timeout=TimeOut); + bool waitForBreak(DWORD timeout=TimeOut); + bool waitForData(DWORD timeout=TimeOut); + bool waitForTransmit(DWORD timeout=TimeOut); + bool setEventMask(DWORD eventMask)const; + bool hasData(void); + bool isOkay(void)const; + static void portToString(CommControl::Port port,String &strPort); + static CommControl::Port stringToPort(const String &strPort); + static void showBytes(GlobalData rcvBytes); + static void showBytes(BYTE *pBuffer,DWORD byteCount); +private: + CommControl(const CommControl &someCommControl); + CommControl &operator=(const CommControl &someCommControl); + void showError(DWORD errorMask)const; + + FileHandle mCommDevice; + Block mStrPorts; + CommStatus mCommStatus; + Event mIOEvent; + Overlapped mOverlapped; +}; + +inline +CommControl::CommControl(void) +{ + mOverlapped.event((HANDLE)mIOEvent); + mStrPorts.insert(&String("\\.\\COM1")); + mStrPorts.insert(&String("\\.\\COM2")); + mStrPorts.insert(&String("\\.\\COM3")); + mStrPorts.insert(&String("\\.\\COM4")); +} + +inline +CommControl::CommControl(const CommControl &someCommControl) +{ // private implementation + *this=someCommControl; +} + +inline +CommControl::~CommControl() +{ + close(); +} + +inline +CommControl &CommControl::operator=(const CommControl &/*someCommControl*/) +{ // private implementation + return *this; +} + +inline +bool CommControl::open(Port commPort,BOOL overlappedIO) +{ + close(); + mCommDevice.open(mStrPorts[commPort],FileHandle::ReadWrite,FileHandle::ShareNone,FileHandle::Open,(overlappedIO?FileHandle::FlagOverlapped:FileHandle::Normal)); + return isOkay(); +} + +inline +void CommControl::close(void) +{ + if(!isOkay())return; + mCommDevice.close(); +} + +inline +DWORD CommControl::readLine(String &strLine) +{ + strLine.reserve(1024); + if(!isOkay())return FALSE; + clearError(mCommStatus); + if(!mCommStatus.bytesInReceiveQueue())return FALSE; + return mCommDevice.getLine(strLine); +} + +inline +DWORD CommControl::writeLine(const String &strLine)const +{ + if(!isOkay()||strLine.isNull())return FALSE; + return mCommDevice.writeLine(strLine); +} + +inline +DWORD CommControl::write(GlobalData &sndBuffer) +{ + if(!isOkay()||!sndBuffer.size())return 0; + return write(&sndBuffer[0],sndBuffer.size()); +} + +inline +DWORD CommControl::write(BYTE *pBuffer,int length)const +{ + if(!isOkay()||!pBuffer||!length)return 0; + return mCommDevice.write(pBuffer,length); +} + +inline +bool CommControl::setBreak(void)const +{ + if(!isOkay())return false; + return ::SetCommBreak((HANDLE)mCommDevice); +} + +inline +bool CommControl::clearBreak(void)const +{ + if(!isOkay())return false; + return ::ClearCommBreak((HANDLE)mCommDevice); +} + +inline +bool CommControl::getDeviceControlBlock(DeviceControlBlock &deviceControlBlock)const +{ + if(!isOkay())return false; + return ::GetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB()); +} + +inline +bool CommControl::setDeviceControlBlock(const DeviceControlBlock &deviceControlBlock)const +{ + if(!isOkay())return false; + return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB()); +} + +inline +bool CommControl::setDeviceControlBlock(String strControlBlock)const // (ie) "baud=1200 parity=N data=8 stop=1" +{ + DeviceControlBlock deviceControlBlock; + if(!::BuildCommDCB(strControlBlock.str(),&((DeviceControlBlock&)deviceControlBlock).getDCB()))return false; + return ::SetCommState((HANDLE)mCommDevice,&((DeviceControlBlock&)deviceControlBlock).getDCB()); +} + +inline +bool CommControl::setEventMask(DWORD eventMask)const +{ + if(!isOkay())return false; + return ::SetCommMask((HANDLE)mCommDevice,eventMask); +} + +inline +bool CommControl::waitEvent(DWORD timeout) +{ + DWORD eventMask; + return waitEvent(eventMask,timeout); +} + +inline +bool CommControl::waitForBreak(DWORD timeout) +{ + if(!isOkay())return false; + setEventMask(EventBreak); + return waitEvent(timeout); +} + +inline +bool CommControl::waitForData(DWORD timeout) +{ + if(!isOkay())return false; + setEventMask(EventRxChar); + return waitEvent(timeout); +} + +inline +bool CommControl::waitForTransmit(DWORD timeout) +{ + if(!isOkay())return false; + setEventMask(EventTxEmpty); + return waitEvent(timeout); +} +#endif diff --git a/m68hc11/backup/COMMSTAT.HPP b/m68hc11/backup/COMMSTAT.HPP new file mode 100644 index 0000000..9ec3e3f --- /dev/null +++ b/m68hc11/backup/COMMSTAT.HPP @@ -0,0 +1,213 @@ +#ifndef _M68HC11_COMMSTATUS_HPP_ +#define _M68HC11_COMMSTATUS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class CommStatus : private _COMSTAT +{ +public: + CommStatus(void); + CommStatus(const CommStatus &someCommStatus); + virtual ~CommStatus(); + CommStatus &operator=(const CommStatus &someCommStatus); + BOOL operator==(const CommStatus &someCommStatus)const; + BOOL waitingForCts(void)const; + BOOL waitingForDsr(void)const; + BOOL waitingForRlsd(void)const; + BOOL waitingRcvdXOff(void)const; + BOOL waitingSentXOff(void)const; + BOOL waitingRcvdEof(void)const; + BOOL waitingForTx(void)const; + DWORD bytesInReceiveQueue(void)const; + DWORD bytesInSendQueue(void)const; + _COMSTAT &getCOMSTAT(void); +private: + void waitingForCts(BOOL waitingForCts); + void waitingForDsr(BOOL waitingForDsr); + void waitingForRlsd(BOOL waitingForRlsd); + void waitingRcvdXOff(BOOL waitingRcvdXOff); + void waitingSentXOff(BOOL waitingSentXOff); + void waitingRcvdEof(BOOL waitingRcvdEof); + void waitingForTx(BOOL waitingForTx); + void bytesInReceiveQueue(DWORD bytesInReceiveQueue); + void bytesInSendQueue(DWORD bytesInSendQueue); + void setZero(void); +}; + +inline +CommStatus::CommStatus(void) +{ + setZero(); +} + +inline +CommStatus::CommStatus(const CommStatus &someCommStatus) +{ + *this=someCommStatus; +} + +inline +CommStatus::~CommStatus() +{ +} + +inline +CommStatus &CommStatus::operator=(const CommStatus &someCommStatus) +{ + waitingForCts(someCommStatus.waitingForCts()); + waitingForDsr(someCommStatus.waitingForDsr()); + waitingForRlsd(someCommStatus.waitingForRlsd()); + waitingRcvdXOff(someCommStatus.waitingRcvdXOff()); + waitingSentXOff(someCommStatus.waitingSentXOff()); + waitingRcvdEof(someCommStatus.waitingRcvdEof()); + waitingForTx(someCommStatus.waitingForTx()); + bytesInReceiveQueue(someCommStatus.bytesInReceiveQueue()); + bytesInSendQueue(someCommStatus.bytesInSendQueue()); + return *this; +} + +inline +BOOL CommStatus::operator==(const CommStatus &someCommStatus)const +{ + return (waitingForCts()==someCommStatus.waitingForCts()&& + waitingForDsr()==someCommStatus.waitingForDsr()&& + waitingForRlsd()==someCommStatus.waitingForRlsd()&& + waitingRcvdXOff()==someCommStatus.waitingRcvdXOff()&& + waitingSentXOff()==someCommStatus.waitingSentXOff()&& + waitingRcvdEof()==someCommStatus.waitingRcvdEof()&& + waitingForTx()==someCommStatus.waitingForTx()&& + bytesInReceiveQueue()==someCommStatus.bytesInReceiveQueue()&& + bytesInSendQueue()==someCommStatus.bytesInSendQueue()); +} + +inline +BOOL CommStatus::waitingForCts(void)const +{ + return _COMSTAT::fCtsHold; +} + +inline +void CommStatus::waitingForCts(BOOL waitingForCts) +{ + _COMSTAT::fCtsHold=waitingForCts; +} + +inline +BOOL CommStatus::waitingForDsr(void)const +{ + return _COMSTAT::fDsrHold; +} + +inline +void CommStatus::waitingForDsr(BOOL waitingForDsr) +{ + _COMSTAT::fDsrHold=waitingForDsr; +} + +inline +BOOL CommStatus::waitingForRlsd(void)const +{ + return _COMSTAT::fRlsdHold; +} + +inline +void CommStatus::waitingForRlsd(BOOL waitingForRlsd) +{ + _COMSTAT::fRlsdHold=waitingForRlsd; +} + +inline +BOOL CommStatus::waitingRcvdXOff(void)const +{ + return _COMSTAT::fXoffHold; +} + +inline +void CommStatus::waitingRcvdXOff(BOOL waitingRcvdXOff) +{ + _COMSTAT::fXoffHold=waitingRcvdXOff; +} + +inline +BOOL CommStatus::waitingSentXOff(void)const +{ + return _COMSTAT::fXoffSent; +} + +inline +void CommStatus::waitingSentXOff(BOOL waitingSentXOff) +{ + _COMSTAT::fXoffSent=waitingSentXOff; +} + +inline +BOOL CommStatus::waitingRcvdEof(void)const +{ + return _COMSTAT::fEof; +} + +inline +void CommStatus::waitingRcvdEof(BOOL waitingRcvdEof) +{ + _COMSTAT::fEof=waitingRcvdEof; + +} + +inline +BOOL CommStatus::waitingForTx(void)const +{ + return _COMSTAT::fTxim; +} + +inline +void CommStatus::waitingForTx(BOOL waitingForTx) +{ + _COMSTAT::fTxim=waitingForTx; +} + +inline +DWORD CommStatus::bytesInReceiveQueue(void)const +{ + return _COMSTAT::cbInQue; +} + +inline +void CommStatus::bytesInReceiveQueue(DWORD bytesInReceiveQueue) +{ + _COMSTAT::cbInQue=bytesInReceiveQueue; +} + +inline +DWORD CommStatus::bytesInSendQueue(void)const +{ + return _COMSTAT::cbOutQue; +} + +inline +void CommStatus::bytesInSendQueue(DWORD bytesInSendQueue) +{ + _COMSTAT::cbOutQue=bytesInSendQueue; +} + +inline +_COMSTAT &CommStatus::getCOMSTAT(void) +{ + return *this; +} + +inline +void CommStatus::setZero(void) +{ + _COMSTAT::fCtsHold=0; + _COMSTAT::fDsrHold=0; + _COMSTAT::fRlsdHold=0; + _COMSTAT::fXoffHold=0; + _COMSTAT::fXoffSent=0; + _COMSTAT::fEof=0; + _COMSTAT::fTxim=0; + _COMSTAT::fReserved=0; + _COMSTAT::cbInQue=0; + _COMSTAT::cbOutQue=0; +} +#endif \ No newline at end of file diff --git a/m68hc11/backup/DCB.CPP b/m68hc11/backup/DCB.CPP new file mode 100644 index 0000000..a5a4540 --- /dev/null +++ b/m68hc11/backup/DCB.CPP @@ -0,0 +1,318 @@ +#include + +DeviceControlBlock::DeviceControlBlock(void) +{ + setZero(); +} + +DeviceControlBlock::DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock) +{ + *this=someDeviceControlBlock; +} + +DeviceControlBlock::~DeviceControlBlock() +{ +} + +DeviceControlBlock &DeviceControlBlock::operator=(const DeviceControlBlock &someDeviceControlBlock) +{ + baudRate(someDeviceControlBlock.baudRate()); + binaryEnabled(someDeviceControlBlock.binaryEnabled()); + enableParity(someDeviceControlBlock.enableParity()); + ctsFlowControlOutMonitor(someDeviceControlBlock.ctsFlowControlOutMonitor()); + dsrFlowControlOutMonitor(someDeviceControlBlock.dsrFlowControlOutMonitor()); + dtrControl(someDeviceControlBlock.dtrControl()); + dsrSensitivityEnable(someDeviceControlBlock.dsrSensitivityEnable()); + continueOnXOff(someDeviceControlBlock.continueOnXOff()); + xonXOffEnableTransmit(someDeviceControlBlock.xonXOffEnableTransmit()); + xonXOffEnableReceive(someDeviceControlBlock.xonXOffEnableReceive()); + errorCharEnable(someDeviceControlBlock.errorCharEnable()); + discardNullEnable(someDeviceControlBlock.discardNullEnable()); + rtsControl(someDeviceControlBlock.rtsControl()); + abortOnErrorEnable(someDeviceControlBlock.abortOnErrorEnable()); + xonLimit(someDeviceControlBlock.xonLimit()); + xoffLimit(someDeviceControlBlock.xoffLimit()); + dataBits(someDeviceControlBlock.dataBits()); + parity(someDeviceControlBlock.parity()); + stopBits(someDeviceControlBlock.stopBits()); + xonChar(someDeviceControlBlock.xonChar()); + xoffChar(someDeviceControlBlock.xoffChar()); + errorChar(someDeviceControlBlock.errorChar()); + eofChar(someDeviceControlBlock.eofChar()); + evtChar(someDeviceControlBlock.evtChar()); + return *this; +} + +BOOL DeviceControlBlock::operator==(const DeviceControlBlock &someDeviceControlBlock) +{ + return(baudRate()==someDeviceControlBlock.baudRate()&& + binaryEnabled()==someDeviceControlBlock.binaryEnabled()&& + enableParity()==someDeviceControlBlock.enableParity()&& + ctsFlowControlOutMonitor()==someDeviceControlBlock.ctsFlowControlOutMonitor()&& + dsrFlowControlOutMonitor()==someDeviceControlBlock.dsrFlowControlOutMonitor()&& + dtrControl()==someDeviceControlBlock.dtrControl()&& + dsrSensitivityEnable()==someDeviceControlBlock.dsrSensitivityEnable()&& + continueOnXOff()==someDeviceControlBlock.continueOnXOff()&& + xonXOffEnableTransmit()==someDeviceControlBlock.xonXOffEnableTransmit()&& + xonXOffEnableReceive()==someDeviceControlBlock.xonXOffEnableReceive()&& + errorCharEnable()==someDeviceControlBlock.errorCharEnable()&& + discardNullEnable()==someDeviceControlBlock.discardNullEnable()&& + rtsControl()==someDeviceControlBlock.rtsControl()&& + abortOnErrorEnable()==someDeviceControlBlock.abortOnErrorEnable()&& + xonLimit()==someDeviceControlBlock.xonLimit()&& + xoffLimit()==someDeviceControlBlock.xoffLimit()&& + dataBits()==someDeviceControlBlock.dataBits()&& + parity()==someDeviceControlBlock.parity()&& + stopBits()==someDeviceControlBlock.stopBits()&& + xonChar()==someDeviceControlBlock.xonChar()&& + xoffChar()==someDeviceControlBlock.xoffChar()&& + errorChar()==someDeviceControlBlock.errorChar()&& + eofChar()==someDeviceControlBlock.eofChar()&& + evtChar()==someDeviceControlBlock.evtChar()); +} + +DWORD DeviceControlBlock::baudRate(void)const +{ + return _DCB::BaudRate; +} + +void DeviceControlBlock::baudRate(DWORD baudRate) +{ + _DCB::BaudRate=baudRate; +} + +BOOL DeviceControlBlock::binaryEnabled(void)const +{ + return _DCB::fBinary; +} + +void DeviceControlBlock::binaryEnabled(BOOL binaryEnabled) +{ + _DCB::fBinary=binaryEnabled; +} + +BOOL DeviceControlBlock::enableParity(void)const +{ + return _DCB::fParity; +} + +void DeviceControlBlock::enableParity(BOOL parity) +{ + _DCB::fParity=parity; +} + +BOOL DeviceControlBlock::ctsFlowControlOutMonitor(void)const +{ + return _DCB::fOutxCtsFlow; +} + +void DeviceControlBlock::ctsFlowControlOutMonitor(BOOL ctsFlowControlOut) +{ + _DCB::fOutxCtsFlow=ctsFlowControlOut; +} + +BOOL DeviceControlBlock::dsrFlowControlOutMonitor(void)const +{ + return _DCB::fOutxDsrFlow; +} + +void DeviceControlBlock::dsrFlowControlOutMonitor(BOOL dsrFlowControlOut) +{ + _DCB::fOutxDsrFlow=dsrFlowControlOut; +} + +DeviceControlBlock::DtrControl DeviceControlBlock::dtrControl(void)const +{ + return DtrControl(_DCB::fDtrControl); +} + +void DeviceControlBlock::dtrControl(DtrControl dtrControl) +{ + _DCB::fDtrControl=(DWORD)dtrControl; +} + +BOOL DeviceControlBlock::dsrSensitivityEnable(void)const +{ + return _DCB::fDsrSensitivity; +} + +void DeviceControlBlock::dsrSensitivityEnable(BOOL dsrSensitivityEnable) +{ + _DCB::fDsrSensitivity=dsrSensitivityEnable; +} + +BOOL DeviceControlBlock::continueOnXOff(void)const +{ + return _DCB::fTXContinueOnXoff; +} + +void DeviceControlBlock::continueOnXOff(BOOL continueOnXOff) +{ + _DCB::fTXContinueOnXoff=continueOnXOff; +} + +BOOL DeviceControlBlock::xonXOffEnableTransmit(void)const +{ + return _DCB::fOutX; +} + +void DeviceControlBlock::xonXOffEnableTransmit(BOOL xonXOffEnable) +{ + _DCB::fOutX=xonXOffEnable; +} + +BOOL DeviceControlBlock::xonXOffEnableReceive(void)const +{ + return _DCB::fInX; +} + +void DeviceControlBlock::xonXOffEnableReceive(BOOL xonXOffEnable) +{ + _DCB::fInX=xonXOffEnable; +} + +BOOL DeviceControlBlock::errorCharEnable(void)const +{ + return _DCB::fErrorChar; +} + +void DeviceControlBlock::errorCharEnable(BOOL errorCharEnable) +{ + _DCB::fErrorChar=errorCharEnable; +} + +BOOL DeviceControlBlock::discardNullEnable(void)const +{ + return _DCB::fNull; +} + +void DeviceControlBlock::discardNullEnable(BOOL discardNullEnable) +{ + _DCB::fNull=discardNullEnable; +} + +DeviceControlBlock::RtsControl DeviceControlBlock::rtsControl(void)const +{ + return RtsControl(_DCB::fRtsControl); +} + +void DeviceControlBlock::rtsControl(RtsControl rtsControl) +{ + _DCB::fRtsControl=(DWORD)rtsControl; +} + +BOOL DeviceControlBlock::abortOnErrorEnable(void)const +{ + return _DCB::fAbortOnError; +} + +void DeviceControlBlock::abortOnErrorEnable(BOOL abortOnError) +{ + _DCB::fAbortOnError=abortOnError; +} + +WORD DeviceControlBlock::xonLimit(void)const +{ + return _DCB::XonLim; +} + +void DeviceControlBlock::xonLimit(WORD xonLimit) +{ + _DCB::XonLim=xonLimit; +} + +WORD DeviceControlBlock::xoffLimit(void)const +{ + return _DCB::XoffLim; +} + +void DeviceControlBlock::xoffLimit(WORD xoffLimit) +{ + _DCB::XoffLim=xoffLimit; +} + +BYTE DeviceControlBlock::dataBits(void)const +{ + return _DCB::ByteSize; +} + +void DeviceControlBlock::dataBits(BYTE dataBits) +{ + _DCB::ByteSize=dataBits; +} + +DeviceControlBlock::Parity DeviceControlBlock::parity(void)const +{ + return Parity(_DCB::Parity); +} + +void DeviceControlBlock::parity(Parity parity) +{ + _DCB::Parity=BYTE(parity); +} + +BYTE DeviceControlBlock::stopBits(void)const +{ + return _DCB::StopBits; +} + +void DeviceControlBlock::stopBits(BYTE stopBits) +{ + _DCB::StopBits=stopBits; +} + +char DeviceControlBlock::xonChar(void)const +{ + return _DCB::XonChar; +} + +void DeviceControlBlock::xonChar(char xonChar) +{ + _DCB::XonChar=xonChar; +} + +char DeviceControlBlock::xoffChar(void)const +{ + return _DCB::XoffChar; +} + +void DeviceControlBlock::xoffChar(char xoffChar) +{ + _DCB::XoffChar=xoffChar; +} + +char DeviceControlBlock::errorChar(void)const +{ + return _DCB::ErrorChar; +} + +void DeviceControlBlock::errorChar(char errorChar) +{ + _DCB::ErrorChar=errorChar; +} + +char DeviceControlBlock::eofChar(void)const +{ + return _DCB::EofChar; +} + +void DeviceControlBlock::eofChar(char eofChar) +{ + _DCB::EofChar; +} + +char DeviceControlBlock::evtChar(void)const +{ + return _DCB::EvtChar; +} + +void DeviceControlBlock::evtChar(char evtChar) +{ + _DCB::EvtChar=evtChar; +} + +void DeviceControlBlock::setZero(void) +{ + ::memset(&(_DCB&)*this,0,sizeof(_DCB)); + _DCB::DCBlength=sizeof(_DCB); +} diff --git a/m68hc11/backup/DCB.HPP b/m68hc11/backup/DCB.HPP new file mode 100644 index 0000000..72f4a47 --- /dev/null +++ b/m68hc11/backup/DCB.HPP @@ -0,0 +1,79 @@ +#ifndef _M68HC11_DEVICECONTROLBLOCK_HPP_ +#define _M68HC11_DEVICECONTROLBLOCK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STDLIB_HPP_ +#include +#endif + +class DeviceControlBlock : private _DCB +{ +public: + enum DtrControl{DtrControlDisable=DTR_CONTROL_DISABLE,DtrControlEnable=DTR_CONTROL_ENABLE,DtrControlHandshake=DTR_CONTROL_HANDSHAKE}; + enum RtsControl{RtsControlDisable=RTS_CONTROL_DISABLE,RtsControlEnable=RTS_CONTROL_ENABLE,RtsControlHandshake=RTS_CONTROL_HANDSHAKE,RtsControlToggle=RTS_CONTROL_TOGGLE}; + enum Parity{ParityNone,ParityOdd,ParityEven,ParityMark}; + DeviceControlBlock(void); + DeviceControlBlock(const DeviceControlBlock &someDeviceControlBlock); + virtual ~DeviceControlBlock(); + DeviceControlBlock &operator=(const DeviceControlBlock &someDeviceControlBlock); + BOOL operator==(const DeviceControlBlock &someDeviceControlBlock); + DWORD baudRate(void)const; + void baudRate(DWORD baudRate); + BOOL binaryEnabled(void)const; + void binaryEnabled(BOOL binaryEnabled); + BOOL enableParity(void)const; + void enableParity(BOOL parity); + BOOL ctsFlowControlOutMonitor(void)const; + void ctsFlowControlOutMonitor(BOOL ctsFlowControlOut); + BOOL dsrFlowControlOutMonitor(void)const; + void dsrFlowControlOutMonitor(BOOL dsrFlowControlOut); + DtrControl dtrControl(void)const; + void dtrControl(DtrControl dtrControl); + BOOL dsrSensitivityEnable(void)const; + void dsrSensitivityEnable(BOOL dsrSensitivityEnable); + BOOL continueOnXOff(void)const; + void continueOnXOff(BOOL continueOnXOff); + BOOL xonXOffEnableTransmit(void)const; + void xonXOffEnableTransmit(BOOL xonXOffEnable); + BOOL xonXOffEnableReceive(void)const; + void xonXOffEnableReceive(BOOL xonXOffEnable); + BOOL errorCharEnable(void)const; + void errorCharEnable(BOOL errorCharEnable); + BOOL discardNullEnable(void)const; + void discardNullEnable(BOOL discardNullEnable); + RtsControl rtsControl(void)const; + void rtsControl(RtsControl rtsControl); + BOOL abortOnErrorEnable(void)const; + void abortOnErrorEnable(BOOL abortOnError); + WORD xonLimit(void)const; + void xonLimit(WORD xonLimit); + WORD xoffLimit(void)const; + void xoffLimit(WORD xoffLimit); + BYTE dataBits(void)const; + void dataBits(BYTE dataBits); + Parity parity(void)const; + void parity(Parity parity); + BYTE stopBits(void)const; + void stopBits(BYTE stopBits); + char xonChar(void)const; + void xonChar(char xonChar); + char xoffChar(void)const; + void xoffChar(char xoffChar); + char errorChar(void)const; + void errorChar(char errorChar); + char eofChar(void)const; + void eofChar(char eofChar); + char evtChar(void)const; + void evtChar(char evtChar); + _DCB &getDCB(void); +private: + void setZero(void); +}; + +inline +_DCB &DeviceControlBlock::getDCB(void) +{ + return *this; +} +#endif diff --git a/m68hc11/backup/Editfnd.cpp b/m68hc11/backup/Editfnd.cpp new file mode 100644 index 0000000..d581549 --- /dev/null +++ b/m68hc11/backup/Editfnd.cpp @@ -0,0 +1,51 @@ +#include + +EditFind::EditFind(void) +{ +} + +EditFind::~EditFind() +{ +} + +// virtuals + +void EditFind::init(void) +{ + CharRange searchRange; + + searchRange.posMin(0); + searchRange.posMax(0); + mFindTextEx.searchRange(searchRange); +} + +void EditFind::leaveEdit(const String &strText) +{ + findNext(); +} + +void EditFind::find(void) +{ + findNext(); +} + +void EditFind::findNext(void) +{ + String currText; + + getText(currText); + if(currText.isNull())return; + if(!(currText==lastSearchText()))lastFindIndex(-1); + mFindTextEx.strFind(currText); + if(!mFindTextEx.searchRange().posMin()&&!mFindTextEx.searchRange().posMax())mFindTextEx.searchRange(CharRange(0,-1)); + else + { + CharRange searchRange(mFindTextEx.foundRange()); + searchRange.posMin(searchRange.posMax()); + searchRange.posMax(-1); + mFindTextEx.searchRange(searchRange); + } +// mRichEditControl->setFocus(); + mRichEditControl->findText(mFindTextEx); +// setFocus(); +} diff --git a/m68hc11/backup/Editfnd.hpp b/m68hc11/backup/Editfnd.hpp new file mode 100644 index 0000000..be9e0fb --- /dev/null +++ b/m68hc11/backup/Editfnd.hpp @@ -0,0 +1,35 @@ +#ifndef _M68HC11_EDITFIND_HPP_ +#define _M68HC11_EDITFIND_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_RICHEDIT_HPP_ +#include +#endif +#ifndef _M68HC11_FIND_HPP_ +#include +#endif + +class EditFind : private Find +{ +public: + EditFind(void); + virtual ~EditFind(); + void perform(GUIWindow &parentWindow,RichEditControl &richEditControl); +protected: + virtual void findNext(void); + virtual void init(void); + virtual void find(void); + virtual void leaveEdit(const String &strText); +private: + SmartPointer mRichEditControl; + FindTextEx mFindTextEx; +}; + +inline +void EditFind::perform(GUIWindow &parentWindow,RichEditControl &richEditControl) +{ + mRichEditControl=&richEditControl; + Find::perform(parentWindow); +} +#endif \ No newline at end of file diff --git a/m68hc11/backup/Find.cpp b/m68hc11/backup/Find.cpp new file mode 100644 index 0000000..c4ebf9b --- /dev/null +++ b/m68hc11/backup/Find.cpp @@ -0,0 +1,192 @@ +#include +#include + +Find::Find(void) +: mLastFindIndex(-1) +{ + mKeyDownHandler.setCallback(this,&Find::keyDownHandler); + mDlgCodeHandler.setCallback(this,&Find::dlgCodeHandler); + mEditHook.insertHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); + mEditHook.insertHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); +} + +Find::Find(const Find &find) +{ // private implementation + *this=find; +} + +Find::~Find() +{ + mEditHook.removeHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); + mEditHook.removeHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); +} + +Find &Find::operator=(const Find &find) +{ // private implementation + return *this; +} + +void Find::perform(GUIWindow &parentWindow) +{ + create(parentWindow); +} + +void Find::create(GUIWindow &parentWindow) +{ + String staticName("STATIC"); + String editName("EDIT"); + String buttonName("BUTTON"); + + DialogTemplate dlgTemplate; + DialogItemTemplate staticFind; + DialogItemTemplate editFind; + DialogItemTemplate cancelButton; + DialogItemTemplate fnButton; + DialogItemTemplate wmButton; + + dlgTemplate.titleText("Find"); + dlgTemplate.posRect(Rect(10,73,236,62)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); // WS_POPUP + + staticFind.className(staticName); + staticFind.titleText("Fi&nd what:"); + staticFind.style(WS_CHILD|WS_VISIBLE); + staticFind.posRect(Rect(4,8,42,8)); + staticFind.itemID(-1); + + editFind.className(editName); + editFind.titleText(""); + editFind.style(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP|WS_GROUP); + editFind.posRect(Rect(47,7,128,12)); + editFind.itemID(FindText); + + fnButton.className(buttonName); + fnButton.titleText("&Find Next"); + fnButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|BS_DEFPUSHBUTTON); + fnButton.posRect(Rect(182,5,50,14)); + fnButton.itemID(FindNext); + + wmButton.className(buttonName); + wmButton.titleText("Match &whole word only"); + wmButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX|WS_GROUP); + wmButton.posRect(Rect(4,26,100,12)); + wmButton.itemID(FindWhole); + + cancelButton.className(buttonName); + cancelButton.titleText("Cancel"); + cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP); + cancelButton.posRect(Rect(182,23,50,14)); + cancelButton.itemID(CancelFind); + + dlgTemplate+=staticFind; + dlgTemplate+=editFind; + dlgTemplate+=cancelButton; + dlgTemplate+=fnButton; + dlgTemplate+=wmButton; + createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog); +} + +CallbackData::ReturnType Find::keyDownHandler(CallbackData &someCallbackData) +{ + KeyData keyData(someCallbackData); + String strEditText; + + if(keyData.isEscapeKey())GUIWindow::postMessage(*this,WM_CLOSE,0,0L); + else if(keyData.isEnterKey()) + { + getText(strEditText); + leaveEdit(strEditText); + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType Find::dlgCodeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +WORD Find::dlgCommand(DWORD commandID,CallbackData &someCallbackData) +{ + switch(commandID) + { + case FindText : + break; + case FindNext : + handleFindNext(); + break; + case CancelFind : + destroy(); + break; + } + return FALSE; +} + +WORD Find::dlgCode(CallbackData &someCallbackData) +{ + return DLGC_WANTALLKEYS; +} + +BOOL Find::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + mEditHook.hookWin(getItem(FindText)); + init(); + return TRUE; +} + +void Find::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ + mEditHook.unhookWin(); + return; +} + +void Find::getText(String &strEditText) +{ + String strText; + + DynamicDialog::getText(FindText,strText); + strEditText=strText; +} + +BOOL Find::matchWholeWordOnly(void)const +{ + return ::SendMessage(getItem(FindWhole),BM_GETCHECK,0,0L); +} + +void Find::handleFind(void) +{ + find(); +} + +void Find::handleFindNext(void) +{ + findNext(); +} + +// virtuals + +void Find::init(void) +{ +} + +void Find::find(void) +{ + String currText; + + getText(currText); + lastSearchText(currText); +} + +void Find::findNext(void) +{ + String currText; + + getText(currText); + lastSearchText(currText); +} + +void Find::leaveEdit(const String &strEditText) +{ + lastSearchText(strEditText); +} diff --git a/m68hc11/backup/Find.hpp b/m68hc11/backup/Find.hpp new file mode 100644 index 0000000..4fc95aa --- /dev/null +++ b/m68hc11/backup/Find.hpp @@ -0,0 +1,81 @@ +#ifndef _M68HC11_FIND_HPP_ +#define _M68HC11_FIND_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif + +class Find : private DynamicDialog +{ +public: + Find(void); + virtual ~Find(); + void perform(GUIWindow &parentWindow); + int lastFindIndex(void)const; + const String &lastSearchText(void)const; + void setFocus(void)const; +protected: + virtual void init(void); + virtual void find(void); + virtual void findNext(void); + virtual void leaveEdit(const String &strText); + void getText(String &strEditText); + void lastFindIndex(int lastFindIndex); + void lastSearchText(const String &lastSearchText); + BOOL matchWholeWordOnly(void)const; +private: + enum{FindText=101,CancelFind=IDCANCEL,FindNext=103,FindWhole=104}; + Find(const Find &find); + Find &operator=(const Find &find); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + void handleFind(void); + void handleFindNext(void); + void create(GUIWindow &parentWindow); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + WORD dlgCode(CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + + Callback mKeyDownHandler; + Callback mDlgCodeHandler; + String mLastSearchText; + int mLastFindIndex; + WinHookProc mEditHook; +}; + +inline +const String &Find::lastSearchText(void)const +{ + return mLastSearchText; +} + +inline +void Find::lastSearchText(const String &lastSearchText) +{ + mLastSearchText=lastSearchText; +} + +inline +void Find::lastFindIndex(int lastFindIndex) +{ + mLastFindIndex=lastFindIndex; +} + +inline +int Find::lastFindIndex(void)const +{ + return mLastFindIndex; +} + +inline +void Find::setFocus(void)const +{ + GUIWindow::setFocus(); +} +#endif diff --git a/m68hc11/backup/M68HC11.HPP b/m68hc11/backup/M68HC11.HPP new file mode 100644 index 0000000..3d5ee7c --- /dev/null +++ b/m68hc11/backup/M68HC11.HPP @@ -0,0 +1,6 @@ +#ifndef _M68HC11_M68HC11_HPP_ +#define _M68HC11_M68HC11_HPP_ +#ifndef _M68HC11_M68HC11_H_ +#include +#endif +#endif diff --git a/m68hc11/backup/M68REG.CPP b/m68hc11/backup/M68REG.CPP new file mode 100644 index 0000000..acb823a --- /dev/null +++ b/m68hc11/backup/M68REG.CPP @@ -0,0 +1,219 @@ +#include +#include + +M68Reg::M68Reg(void) +: mM68KeyName(STRING_M68KEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mSerialKeyName(STRING_SERIALKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsEMAIL(STRING_SETTINGSEMAIL), + mSerialPort(STRING_SERIALPORT), + mSerialBaud(STRING_SERIALBAUD), + mSerialData(STRING_SERIALDATA), + mSerialParity(STRING_SERIALPARITY), + mSerialStop(STRING_SERIALSTOP), + mRegKeySettings(RegKey::CurrentUser), + mRegKeyHistory(RegKey::CurrentUser), + mRegKeySerial(RegKey::CurrentUser) +{ + guarantee(); + getCacheNames(); +} + +M68Reg::M68Reg(const M68Reg &someM68Reg) +: mM68KeyName(STRING_M68KEYNAME), + mHistoryKeyName(STRING_HISTORYKEYNAME), + mSettingsKeyName(STRING_SETTINGSKEYNAME), + mSerialKeyName(STRING_SERIALKEYNAME), + mHistoryKeyShortName(STRING_HISTORYKEYSHORTNAME), + mSettingsEMAIL(STRING_SETTINGSEMAIL), + mSerialPort(STRING_SERIALPORT), + mSerialBaud(STRING_SERIALBAUD), + mSerialData(STRING_SERIALDATA), + mSerialParity(STRING_SERIALPARITY), + mSerialStop(STRING_SERIALSTOP), + mRegKeySettings(RegKey::CurrentUser), + mRegKeyHistory(RegKey::CurrentUser), + mRegKeySerial(RegKey::CurrentUser) +{ + *this=someM68Reg; +} + +M68Reg::~M68Reg() +{ +} + +M68Reg &M68Reg::operator=(const M68Reg &/*someM68Reg*/) +{ + return *this; +} + +void M68Reg::getCacheNames(void) +{ + int itemIndex(0); + String entryName; + DWORD status; + + mCachedNames.remove(); + while(mRegKeyHistory.enumValue(itemIndex++,entryName,status))mCachedNames.insert(&entryName); +} + +String M68Reg::email(void) +{ + String strEMAIL; + mRegKeySettings.queryValue(mSettingsEMAIL,strEMAIL); + return strEMAIL; +} + +void M68Reg::email(const String &email) +{ + mRegKeySettings.setValue(mSettingsEMAIL,email); +} + +bool M68Reg::setBaud(const String &strBaud) +{ + return mRegKeySerial.setValue(mSerialBaud,strBaud); +} + +String M68Reg::getBaud(void) +{ + String strBaud; + mRegKeySerial.queryValue(mSerialBaud,strBaud); + return strBaud; +} + +bool M68Reg::setParity(const String &strParity) +{ + return mRegKeySerial.setValue(mSerialParity,strParity); +} + +String M68Reg::getParity(void) +{ + String strParity; + mRegKeySerial.queryValue(mSerialParity,strParity); + return strParity; +} + +bool M68Reg::setDataBits(const String &strDataBits) +{ + return mRegKeySerial.setValue(mSerialData,strDataBits); +} + +String M68Reg::getDataBits(void) +{ + String strData; + mRegKeySerial.queryValue(mSerialData,strData); + return strData; +} + +bool M68Reg::setStopBits(const String &stopBits) +{ + return mRegKeySerial.setValue(mSerialStop,stopBits); +} + +String M68Reg::getStopBits(void) +{ + String strStop; + + mRegKeySerial.queryValue(mSerialStop,strStop); + return strStop; +} + +bool M68Reg::setPort(const String &strPort) +{ + return mRegKeySerial.setValue(mSerialPort,strPort); +} + +String M68Reg::getPort(void) +{ + String strPort; + mRegKeySerial.queryValue(mSerialPort,strPort); + return strPort; +} + +String M68Reg::getSerialSettings(void) +{ + String serialSettings; + + serialSettings+="baud="; + serialSettings+=getBaud(); + serialSettings+=" "; + serialSettings+="parity="; + serialSettings+=getParity(); + serialSettings+=" "; + serialSettings+="data="; + serialSettings+=getDataBits(); + serialSettings+=" "; + serialSettings+="stop="; + serialSettings+=getStopBits(); + return serialSettings; +} + +void M68Reg::guarantee(void) +{ + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + } + if(!mRegKeyHistory.openKey(mHistoryKeyName)) + { + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + } + if(!mRegKeySerial.openKey(mSerialKeyName)) + { + CommControl commControl; + Block deviceList; + + commControl.enumerateDevices(deviceList); + mRegKeySerial.createKey(mSerialKeyName,""); + mRegKeySerial.openKey(mSerialKeyName); + setBaud("1200"); + setParity("N"); + setDataBits("8"); + setStopBits("1"); + setPort(deviceList.size()?deviceList[0]:"COM1"); + } +} + +BOOL M68Reg::isOkay(void)const +{ + return mRegKeySettings.isOkay()&&mRegKeyHistory.isOkay()&&mRegKeySerial.isOkay(); +} + +BOOL M68Reg::getHistory(Block &nameList) +{ + nameList=mCachedNames; + return nameList.size()?TRUE:FALSE; +} + +BOOL M68Reg::setHistory(Block &nameList) +{ + RegKey regKey(RegKey::CurrentUser); + mRegKeyHistory.closeKey(); + regKey.openKey(mM68KeyName); + regKey.deleteKey(mHistoryKeyShortName); + regKey.closeKey(); + mRegKeyHistory.createKey(mHistoryKeyName,""); + mRegKeyHistory.openKey(mHistoryKeyName); + for(int itemIndex=0;itemIndexMaxCachedNames) + { + Block mruCachedNames; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _M68HC11_M68HC11_HPP_ +#include +#endif + +class M68Reg +{ +public: + M68Reg(void); + M68Reg(const M68Reg &someM68Reg); + virtual ~M68Reg(); + M68Reg &operator=(const M68Reg &someM68Reg); + BOOL getHistory(Block &nameList); + BOOL setHistory(Block &nameList); + BOOL insertHistory(const String &strName); + bool setBaud(const String &strBaud); + String getBaud(void); + bool setParity(const String &strParity); + String getParity(void); + bool setDataBits(const String &strDataBits); + String getDataBits(void); + bool setStopBits(const String &stopBits); + String getStopBits(void); + bool setPort(const String &strPort); + String getPort(void); + String getSerialSettings(void); + String email(void); + void email(const String &email); + BOOL isOkay(void)const; +private: + enum {MaxCachedNames=5}; + void guarantee(void); + void getCacheNames(void); + + Block mCachedNames; + String mHistoryKeyName; + String mSettingsKeyName; + String mSerialKeyName; + String mHistoryKeyShortName; + String mSettingsEMAIL; + String mM68KeyName; + String mSerialPort; + String mSerialBaud; + String mSerialData; + String mSerialParity; + String mSerialStop; + RegKey mRegKeySettings; + RegKey mRegKeyHistory; + RegKey mRegKeySerial; +}; +#endif diff --git a/m68hc11/backup/M68hc11.h b/m68hc11/backup/M68hc11.h new file mode 100644 index 0000000..a437ea5 --- /dev/null +++ b/m68hc11/backup/M68hc11.h @@ -0,0 +1,150 @@ +#ifndef _M68HC11_M68HC11_H_ +#define _M68HC11_M68HC11_H_ + +#define MCUDLG_REGISTERS 101 +#define MCUDLG_CCR 102 +#define MCUDLG_MESSAGES 109 +#define MCUDLG_PC 103 +#define MCUDLG_SP 104 +#define MCUDLG_Y 105 +#define MCUDLG_X 106 +#define MCUDLG_A 107 +#define MCUDLG_B 108 + +#define SERIAL_STOP 104 +#define SERIAL_PARITY 105 +#define SERIAL_APPLY 106 +#define SERIAL_TEST 107 +#define SERIAL_DATA 103 +#define SERIAL_BAUD 102 +#define SERIAL_PORT 101 + +#define SBCMENU_FILENEW 500 +#define SBCMENU_FILEOPEN 501 +#define SBCMENU_FILESAVE 502 +#define SBCMENU_FILESAVEAS 503 +#define SBCMENU_FILEPRINT 504 +#define SBCMENU_FILEQUIT 505 +#define SBCMENU_FILECLOSE 506 +#define SBCMENU_EDITCUT 507 +#define SBCMENU_EDITCOPY 508 +#define SBCMENU_EDITPASTE 509 +#define SBCMENU_EDITFIND 510 +#define SBCMENU_SETTINGSSERIAL 511 +#define SBCMENU_CODECOMPILE 512 +#define SBCMENU_CODECOMPILEANDLOAD 513 +#define SBCMENU_HELPCONTENTS 514 +#define SBCMENU_HELPSEARCH 515 +#define SBCMENU_REGISTRATION 516 +#define SBCMENU_HELPABOUT 517 + +#define IDM_CASCADE 10013 +#define IDM_TILE 10014 +#define IDM_ARRANGE 10015 +#define IDM_CLOSEALL 10016 +#define IDM_MINIMIZEALL 10017 +#define IDM_RESTOREALL 10018 + +#define STRING_M68KEYNAME 600 +#define STRING_HISTORYKEYNAME 601 +#define STRING_SETTINGSKEYNAME 602 +#define STRING_SERIALKEYNAME 603 +#define STRING_HISTORYKEYSHORTNAME 604 +#define STRING_SETTINGSEMAIL 605 +#define STRING_SERIALPORT 606 +#define STRING_SERIALBAUD 607 +#define STRING_SERIALDATA 608 +#define STRING_SERIALPARITY 609 +#define STRING_SERIALSTOP 610 +#define STRING_COM1 611 +#define STRING_COM2 612 +#define STRING_COM3 613 +#define STRING_COM4 614 + +#define STRING_CODEVIEWCLASSNAME 500 +#define STRING_MCUVIEWCLASSNAME 501 +#define STRING_UNTITLED 502 +#define STRING_HELPFILENAME 503 + +#define STRING_REGISTERPORTA 700 +#define STRING_REGISTERRESERVED1 701 +#define STRING_REGISTERPIOC 702 +#define STRING_REGISTERPORTC 703 +#define STRING_REGISTERPORTB 704 +#define STRING_REGISTERPORTCL 705 +#define STRING_REGISTERRESERVED2 706 +#define STRING_REGISTERDDRC 707 +#define STRING_REGISTERPORTD 708 +#define STRING_REGISTERDDRD 709 +#define STRING_REGISTERPORTE 710 +#define STRING_REGISTERCFORC 711 +#define STRING_REGISTEROC1M 712 +#define STRING_REGISTEROC1D 713 +#define STRING_REGISTERTCNTH1 714 +#define STRING_REGISTERTCNTLO 715 +#define STRING_REGISTERTIC1HI 716 +#define STRING_REGISTERTIC1LO 717 +#define STRING_REGISTERTIC2HI 718 +#define STRING_REGISTERTIC2LO 719 +#define STRING_REGISTERTIC3HI 720 +#define STRING_REGISTERTIC3LO 721 +#define STRING_REGISTERTOC1HI 722 +#define STRING_REGISTERTOC1LO 723 +#define STRING_REGISTERTOC2HI 724 +#define STRING_REGISTERTOC2LO 725 +#define STRING_REGISTERTOC3HI 726 +#define STRING_REGISTERTOC3LO 727 +#define STRING_REGISTERTOC4HI 728 +#define STRING_REGISTERTOC4LO 729 +#define STRING_REGISTERTI405HI 730 +#define STRING_REGISTERTI405LO 731 +#define STRING_REGISTERTCTL1 732 +#define STRING_REGISTERTCTL2 733 +#define STRING_REGISTERTMSK1 734 +#define STRING_REGISTERTFLG1 735 +#define STRING_REGISTERTMSK2 736 +#define STRING_REGISTERTFLG2 737 +#define STRING_REGISTERPACTL 738 +#define STRING_REGISTERPACNT 739 +#define STRING_REGISTERSPCR 740 +#define STRING_REGISTERSPSR 741 +#define STRING_REGISTERSPDR 742 +#define STRING_REGISTERBAUD 743 +#define STRING_REGISTERSCCR1 744 +#define STRING_REGISTERSCCR2 745 +#define STRING_REGISTERSCSR 746 +#define STRING_REGISTERSCDR 747 +#define STRING_REGISTERADCTL 748 +#define STRING_REGISTERADR1 749 +#define STRING_REGISTERADR2 750 +#define STRING_REGISTERADR3 751 +#define STRING_REGISTERADR4 752 +#define STRING_REGISTERBPROT 753 +#define STRING_REGISTEREPROG 754 +#define STRING_REGISTERRESERVED3 755 +#define STRING_REGISTERRESERVED4 756 +#define STRING_REGISTEROPTION 757 +#define STRING_REGISTERCOPRST 758 +#define STRING_REGISTERPPROG 759 +#define STRING_REGISTERHPRIO 760 +#define STRING_REGISTERINIT 761 +#define STRING_REGISTERTEST1 762 +#define STRING_REGISTERCONFIG 763 + +#define STRING_ERRORFILEOPEN 764 +#define STRING_ERRORPORTOPEN 765 +#define STRING_ERRORPORTSETTINGS 766 +#define STRING_ERRORTIMEOUT 767 +#define STRING_ERRORREADERROR 768 +#define STRING_ERRORTALKBACKFAILURE 769 +#define STRING_ERRORTALKBACKDATA 770 + +#define STRING_EVENTSINGLEBYTE 771 +#define STRING_EVENTQUADBYTE 772 +#define STRING_EVENTVARBYTE 773 +#define STRING_EVENTREGDATASTART 774 +#define STRING_EVENTREGDATACOMPLETE 775 +#define STRING_EVENTCODECOMPLETE 776 +#define STRING_EVENTDOUBLEBYTE 777 +#define STRING_EVENTSTRING 778 +#endif diff --git a/m68hc11/backup/MAIN.CPP b/m68hc11/backup/MAIN.CPP new file mode 100644 index 0000000..0b1783b --- /dev/null +++ b/m68hc11/backup/MAIN.CPP @@ -0,0 +1,120 @@ +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; +// frameWindow.splash(); + frameWindow.createWindow("M68HC11","M68HC11 v1.00","mainMenu","MOT"); + return frameWindow.messageLoop(); +} + +#if 0 +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + CommControl commControl; + CommStatus commStatus; + DeviceControlBlock deviceControlBlock; + BYTE charByte(0xFF); + + commControl.open(CommControl::PortCOM1); + if(!commControl.isOkay())return FALSE; + if(!commControl.setDeviceControlBlock("baud=1200 data=8 stop=1 parity=N"))::OutputDebugString("Set operation failed\n"); + + String strString; + charByte='a'; + while(TRUE) + { + commControl.write(&charByte,sizeof(charByte)); +// commControl.waitForData(); + commControl.read(&charByte,sizeof(charByte)); + ::sprintf(strString,"%02x\n",(int)charByte); + ::OutputDebugString(strString); + charByte++; + +// commControl.clearError(commStatus); + +// if(commStatus.bytesInReceiveQueue()) +// { +// commControl.read(&charByte,sizeof(charByte)); +// ::sprintf(strString,"%02x\n",(int)charByte); +// ::OutputDebugString(strString); +// break; +// } + ::Sleep(250); + } + + + +/* + ::OutputDebugString("waiting for break signal...\n"); + commControl.setEventMask(CommControl::EventBreak); // EventBreak + if(!commControl.waitEvent())::OutputDebugString("timeout waiting for break.\n"); + else ::OutputDebugString("break received, loading code...\n"); + + + BYTE ioBuffer[256]; + + for(int index=0;index<256;index++)ioBuffer[index]=index; + charByte=0xFF; + commControl.write(&charByte,sizeof(charByte)); + +// commControl.clearError(commStatus); +// if(commStatus.bytesInReceiveQueue())commControl.read(ioBuffer,commStatus.bytesInReceiveQueue()); + + commControl.write(ioBuffer,sizeof(ioBuffer)); + ::memset(ioBuffer,0,sizeof(ioBuffer)); + + String strString; + ::OutputDebugString("receiving echo\n"); + while(TRUE) + { + commControl.clearError(commStatus); + + if(commStatus.bytesInReceiveQueue()) + { + commControl.read(ioBuffer,sizeof(ioBuffer)); + for(index=0;index+8 +#include +#include +#include + +MCUDlg::MCUDlg(void) +{ + mInitHandler.setCallback(this,&MCUDlg::initHandler); + mCreateHandler.setCallback(this,&MCUDlg::createHandler); + mCloseHandler.setCallback(this,&MCUDlg::closeHandler); + mDestroyHandler.setCallback(this,&MCUDlg::destroyHandler); + mCommandHandler.setCallback(this,&MCUDlg::commandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MCUDlg::MCUDlg(const MCUDlg &someMCUDlg) +{ // private implementation + *this=someMCUDlg; +} + +MCUDlg::~MCUDlg() +{ + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MCUDlg &MCUDlg::operator=(const MCUDlg &someMCUDlg) +{ // private implementation + return *this; +} + +BOOL MCUDlg::perform(GUIWindow &parentWindow) +{ + ::CreateDialogParam(processInstance(),(LPSTR)"MCUDLG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + return isValid(); +} + +CallbackData::ReturnType MCUDlg::initHandler(CallbackData &someCallbackData) +{ + mOwnerDrawList=::new OwnerDrawListBinaryLed(*this,getItem(MCUDLG_REGISTERS),MCUDLG_REGISTERS); + mOwnerDrawList.disposition(PointerDisposition::Delete); + for(int index=STRING_REGISTERPORTA;index<=STRING_REGISTERCONFIG;index++)mOwnerDrawList->insertString(String(index)); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::createHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDCANCEL : + handleCancel(); + break; + case IDOK : + handleOk(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void MCUDlg::setRegister(int mcuRegister,BYTE value) +{ + String stringData; + String strItem; + String strData; + + if(LB_ERR==mOwnerDrawList->getText(stringData,mcuRegister))return; + strItem=stringData.betweenString(0,'\t'); + if(strItem.isNull())::sprintf(strData,"%s\t%d",(LPSTR)stringData,value); + else ::sprintf(strData,"%s\t%d",(LPSTR)strItem,value); + mOwnerDrawList->deleteString(mcuRegister); + mOwnerDrawList->insertString(strData,mcuRegister); +} + +void MCUDlg::setRegisters(GlobalData ®Data) +{ + mOwnerDrawList->setRedraw(FALSE); + for(int index=0;indexsetRedraw(TRUE); +} + +void MCUDlg::setVarByteData(GlobalData &byteData) +{ + String strData; + String strLine; + String strHexLine; + + for(int index=0;index +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class OwnerDrawListBinaryLed; + +class MCUDlg : public DWindow +{ +public: + MCUDlg(void); + virtual ~MCUDlg(); + BOOL perform(GUIWindow &parentWindow); + void setCancelHandler(PureCallback *pCallback); + void setStartHandler(PureCallback *pCallback); + void setRegister(int mcuRegister,BYTE value); + void setRegisters(GlobalData ®Data); + void setVarByteData(GlobalData &byteData); + void setQuadByteData(DWORD quadByteData); + void setDoubleByteData(WORD doubleByteData); + void setSingleByteData(BYTE singleByteData); + void setStringData(const String &string); + void enableStart(BOOL enable); +private: + MCUDlg(const MCUDlg &someMCUDlg); + MCUDlg &operator=(const MCUDlg &someMCUDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleCancel(void); + void handleOk(void); + + Callback mInitHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + SmartPointer mOwnerDrawList; + CallbackPointer mCancelHandler; + CallbackPointer mStartHandler; +}; + +inline +void MCUDlg::setCancelHandler(PureCallback *pCallback) +{ + mCancelHandler=CallbackPointer(pCallback); +} + +inline +void MCUDlg::setStartHandler(PureCallback *pCallback) +{ + mStartHandler=CallbackPointer(pCallback); +} + +inline +void MCUDlg::handleCancel(void) +{ + mCancelHandler.callback(CallbackData()); +} + +inline +void MCUDlg::handleOk(void) +{ + mStartHandler.callback(CallbackData()); +} + +inline +void MCUDlg::enableStart(BOOL enable) +{ + ::EnableWindow(getItem(IDOK),enable); +} +#endif diff --git a/m68hc11/backup/MCUTHRD.CPP b/m68hc11/backup/MCUTHRD.CPP new file mode 100644 index 0000000..6b51c63 --- /dev/null +++ b/m68hc11/backup/MCUTHRD.CPP @@ -0,0 +1,238 @@ +#include +#include +#include +#include +#include +#include + +MCUThread::MCUThread(void) +: mIsInEvents(false) +{ + mThreadHandler.setCallback(this,&MCUThread::threadHandler); + insertHandler(&mThreadHandler); +} + +MCUThread::MCUThread(const MCUThread &someMCUThread) +: mIsInEvents(false) +{ // private implementation + *this=someMCUThread; +} + +MCUThread::~MCUThread() +{ + removeHandler(&mThreadHandler); +} + +MCUThread &MCUThread::operator=(const MCUThread &someMCUThread) +{ // private implementation + return *this; +} + +void MCUThread::listen(const String &strPathBinary) +{ + String *pString=::new String(strPathBinary); + ThreadMessage threadMessage(ThreadMessage::TM_USER,ThMsgListen,int(pString)); + postMessage(threadMessage); + return; +} + +DWORD MCUThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(ThMsgListen==someThreadMessage.userDataOne()) + { + String *pString=(String*)someThreadMessage.userDataTwo(); + thListen(*pString); + ::delete pString; + } + break; + } + return FALSE; +} + +void MCUThread::thListen(const String &strPathBinary) +{ + CommControl commControl; + + sendMessage("Initializing device..."); + if(!openDevice(commControl))return; + sendMessage("Loading code..."); + if(!codeLoad(commControl,strPathBinary))return; + sendMessage("Processing events..."); + processEvents(commControl); + return; +} + +BOOL MCUThread::openDevice(CommControl &commControl,bool useOverlappedIO) +{ + M68Reg mcuReg; + + if(!commControl.open(CommControl::stringToPort(mcuReg.getPort()),useOverlappedIO)) + { + mErrorEventHandler.callback(CallbackData(ErrorPortOpen,0L)); + return FALSE; + } + if(!commControl.setDeviceControlBlock(mcuReg.getSerialSettings())) + { + mErrorEventHandler.callback(CallbackData(ErrorPortSettings,0L)); + return FALSE; + } + commControl.setEventMask(CommControl::EventBreak); + if(!commControl.waitEvent()) + { + mErrorEventHandler.callback(CallbackData(ErrorTimeout,0L)); + return FALSE; + } + return TRUE; +} + +BOOL MCUThread::codeLoad(CommControl &commControl,const String &strPathBinary) +{ + FileHandle inFile; + BYTE sndBuffer[256]; +// BYTE rcvBuffer[256]; + GlobalData rcvBuffer; + WORD codeLength(0); + BYTE prefix(0xFF); + BYTE *ptrByte; + + if(!inFile.open(strPathBinary)) + { + mErrorEventHandler.callback(CallbackData(ErrorFileOpen,int(&(String&)strPathBinary))); + return FALSE; + } + ::memset(sndBuffer,1,sizeof(sndBuffer)); +// ::memset(&rcvBuffer,0,sizeof(rcvBuffer)); + ptrByte=sndBuffer; + while(inFile.read(*ptrByte)&&codeLength<=256){codeLength++;ptrByte++;} + commControl.write(&prefix,sizeof(prefix)); + commControl.clearReceiveQueue(); + commControl.write(sndBuffer,sizeof(sndBuffer)); + if(!commControl.waitForData()) + { + mErrorEventHandler.callback(CallbackData(ErrorTalkBackFailure,0L)); + return false; + } + rcvBuffer.size(sizeof(sndBuffer)); + rcvBuffer.setZero(); + commControl.readFully(rcvBuffer); +// commControl.readFully(rcvBuffer,sizeof(rcvBuffer)); + if(::memcmp(&rcvBuffer[0],sndBuffer,sizeof(sndBuffer))) + { + mErrorEventHandler.callback(CallbackData(ErrorTalkBackData,0L)); + return false; + } + return true; +} + +// event types +// 0x00 - character +// 0x01 - WORD +// 0x02 - DWORD +// 0x03 - varchar : [WORD:count,countcharacters] +// 0xFF - end + +BOOL MCUThread::processEvents(CommControl &commControl) +{ + GlobalData byteData; + String strString; + BYTE event(0x00); + BYTE ack(0x00); + WORD wordData; + DWORD dwordData; + char charData; + int index; + int map(0x1000); + + ::OutputDebugString("MCUThread::processEvents[Thread is starting]"); + isInEvents(true); + while(isInEvents()) + { + if(!commControl.hasData())continue; + commControl.read(&event,sizeof(event)); + switch(MCUEvent(event)) + { + case EventString : + { + String str; + sendMessage(STRING_EVENTSTRING); + while(true) + { + commControl.read(&charData,sizeof(charData)); + if(!charData)break; + str+=charData; + } + mMCUEventHandler.callback(CallbackData(EventString,int(&str))); + commControl.write(&ack,sizeof(ack)); + } + break; + case EventSingleByte : + sendMessage(STRING_EVENTSINGLEBYTE); + commControl.read(&charData,sizeof(charData)); + mMCUEventHandler.callback(CallbackData(EventSingleByte,int(&charData))); + commControl.write(&ack,sizeof(ack)); + break; + case EventDoubleByte : + sendMessage(STRING_EVENTDOUBLEBYTE); + commControl.read(&wordData,sizeof(wordData)); + mMCUEventHandler.callback(CallbackData(EventDoubleByte,int(&wordData))); + commControl.write(&ack,sizeof(ack)); + break; + case EventQuadByte : + sendMessage(STRING_EVENTQUADBYTE); + commControl.read(&dwordData,sizeof(dwordData)); + mMCUEventHandler.callback(CallbackData(EventQuadByte,(int)&dwordData)); + commControl.write(&ack,sizeof(ack)); + break; + case EventVarByte : + sendMessage(STRING_EVENTVARBYTE); + commControl.read(&wordData,sizeof(wordData)); + byteData.size(wordData); + for(index=0;index +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif + +class CommControl; + +class MCUThread : protected MessageThread +{ +public: + enum MCUEvent{EventSingleByte=0x00,EventDoubleByte=0x01,EventQuadByte=0x02,EventVarByte=0x03,EventRegs=0x04,EventString=0x05,EventEnd=0xFF}; + enum ErrorEvent{ErrorFileOpen,ErrorPortOpen,ErrorPortSettings,ErrorTimeout,ErrorReadError,ErrorTalkBackFailure,ErrorTalkBackData}; + MCUThread(void); + virtual ~MCUThread(); + void listen(const String &strPathBinary); + void setErrorEventHandler(PureCallback *pCallback); + void setMCUEventHandler(PureCallback *pCallback); + void setMessageHandler(PureCallback *pCallback); + bool isInEvents(void)const; + void isInEvents(bool isInEvents); +private: + enum{ThMsgListen}; + MCUThread(const MCUThread &someMCUThread); + MCUThread &operator=(const MCUThread &someMCUThread); + DWORD threadHandler(ThreadMessage &someThreadMessage); + void thListen(const String &strPathBinary); + BOOL openDevice(CommControl &commControl,bool userOverlappedIO=false); + BOOL codeLoad(CommControl &commControl,const String &strPathBinary); + BOOL processEvents(CommControl &commControl); + void sendMessage(const String &strMessage); + + ThreadCallback mThreadHandler; + CallbackPointer mErrorEventHandler; + CallbackPointer mMCUEventHandler; + CallbackPointer mMessageHandler; + bool mIsInEvents; +}; + +inline +void MCUThread::setErrorEventHandler(PureCallback *pCallback) +{ + mErrorEventHandler=CallbackPointer(pCallback); +} + +inline +void MCUThread::setMCUEventHandler(PureCallback *pCallback) +{ + mMCUEventHandler=CallbackPointer(pCallback); +} + +inline +void MCUThread::setMessageHandler(PureCallback *pCallback) +{ + mMessageHandler=CallbackPointer(pCallback); +} + +inline +bool MCUThread::isInEvents(void)const +{ + return mIsInEvents; +} + +inline +void MCUThread::isInEvents(bool isInEvents) +{ + mIsInEvents=isInEvents; +} +#endif \ No newline at end of file diff --git a/m68hc11/backup/MCUVIEW.CPP b/m68hc11/backup/MCUVIEW.CPP new file mode 100644 index 0000000..65ba7b9 --- /dev/null +++ b/m68hc11/backup/MCUVIEW.CPP @@ -0,0 +1,193 @@ +#include +#include +#include + +MCUView::MCUView(void) +{ + mCreateHandler.setCallback(this,&MCUView::createHandler); + mSizeHandler.setCallback(this,&MCUView::sizeHandler); + mCloseHandler.setCallback(this,&MCUView::closeHandler); + mDestroyHandler.setCallback(this,&MCUView::destroyHandler); + mCommandHandler.setCallback(this,&MCUView::commandHandler); + mCancelHandler.setCallback(this,&MCUView::cancelHandler); + mStartHandler.setCallback(this,&MCUView::startHandler); + mErrorEventHandler.setCallback(this,&MCUView::errorEventHandler); + mMCUEventHandler.setCallback(this,&MCUView::mcuEventHandler); + mMessageHandler.setCallback(this,&MCUView::messageHandler); + MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler); + MCUThread::setErrorEventHandler(&mErrorEventHandler); + MCUThread::setMCUEventHandler(&mMCUEventHandler); + MCUThread::setMessageHandler(&mMessageHandler); +} + +MCUView::~MCUView() +{ + MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler); + MCUThread::setErrorEventHandler(0); + MCUThread::setMCUEventHandler(0); + MCUThread::setMessageHandler(0); +} + +CallbackData::ReturnType MCUView::createHandler(CallbackData &someCallbackData) +{ + mMCUDialog.setCancelHandler(&mCancelHandler); + mMCUDialog.setStartHandler(&mStartHandler); + mMCUDialog.perform(*this); + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + mStatusBar->setText("Press start and then switch on the device."); + return FALSE; +} + +CallbackData::ReturnType MCUView::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::closeHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::commandHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType MCUView::cancelHandler(CallbackData &/*someCallbackData*/) +{ + isInEvents(false); + MDIWindow::postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUView::startHandler(CallbackData &/*someCallbackData*/) +{ + mMCUDialog.enableStart(FALSE); + listen(mStrPathBinary); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUView::messageHandler(CallbackData &someCallbackData) +{ + mStatusBar->setText(*((String*)someCallbackData.lParam())); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MCUView::errorEventHandler(CallbackData &someCallbackData) +{ + switch(MCUThread::ErrorEvent(someCallbackData.wParam())) + { + case MCUThread::ErrorFileOpen : + mStatusBar->setText(String(STRING_ERRORFILEOPEN)+*((String*)someCallbackData.lParam())+String("'.")); + break; + case MCUThread::ErrorPortOpen : + mStatusBar->setText(STRING_ERRORPORTOPEN); + break; + case MCUThread::ErrorPortSettings : + mStatusBar->setText(STRING_ERRORPORTSETTINGS); + break; + case MCUThread::ErrorTimeout : + mStatusBar->setText(STRING_ERRORTIMEOUT); + break; + case MCUThread::ErrorReadError : + mStatusBar->setText(STRING_ERRORREADERROR); + break; + case MCUThread::ErrorTalkBackFailure : + mStatusBar->setText(STRING_ERRORTALKBACKFAILURE); + break; + case MCUThread::ErrorTalkBackData : + mStatusBar->setText(STRING_ERRORTALKBACKDATA); + break; + } + mMCUDialog.enableStart(TRUE); + return FALSE; +} + +CallbackData::ReturnType MCUView::mcuEventHandler(CallbackData &someCallbackData) +{ + switch(MCUThread::MCUEvent(someCallbackData.wParam())) + { + case MCUThread::EventString : + handleStringData(someCallbackData); + break; + case MCUThread::EventSingleByte : + handleSingleByteData(someCallbackData); + break; + case MCUThread::EventDoubleByte : + handleEventDoubleByte(someCallbackData); + break; + case MCUThread::EventQuadByte : + handleEventQuadByte(someCallbackData); + break; + case MCUThread::EventVarByte : + handleEventVarByte(someCallbackData); + break; + case MCUThread::EventRegs : + handleEventRegs(someCallbackData); + break; + case MCUThread::EventEnd : + mMCUDialog.enableStart(TRUE); + break; + } + return FALSE; +} + +void MCUView::handleEventRegs(CallbackData &someCallbackData) +{ + GlobalData ®Data=(GlobalData &)*((GlobalData *)someCallbackData.lParam()); + mMCUDialog.setRegisters(regData); +} + +void MCUView::handleEventVarByte(CallbackData &someCallbackData) +{ + GlobalData &byteData=(GlobalData &)*((GlobalData *)someCallbackData.lParam()); + mMCUDialog.setVarByteData(byteData); +} + +void MCUView::handleEventQuadByte(CallbackData &someCallbackData) +{ + mMCUDialog.setQuadByteData(*((DWORD*)someCallbackData.lParam())); +} + +void MCUView::handleEventDoubleByte(CallbackData &someCallbackData) +{ + mMCUDialog.setDoubleByteData(*((WORD*)someCallbackData.lParam())); +} + +void MCUView::handleSingleByteData(CallbackData &someCallbackData) +{ + mMCUDialog.setSingleByteData(*((BYTE*)someCallbackData.lParam())); +} + +void MCUView::handleStringData(CallbackData &someCallbackData) +{ + mMCUDialog.setStringData(*((String*)someCallbackData.lParam())); +} + +// *** virtuals + +void MCUView::preRegister(WNDCLASS &wndClass) +{ + wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE; +} + +void MCUView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.cx=InitialWidth; + createStruct.cy=InitialHeight; + createStruct.style^=WS_THICKFRAME; +} diff --git a/m68hc11/backup/MCUVIEW.HPP b/m68hc11/backup/MCUVIEW.HPP new file mode 100644 index 0000000..abcf56c --- /dev/null +++ b/m68hc11/backup/MCUVIEW.HPP @@ -0,0 +1,66 @@ +#ifndef _M68HC11_MCUVIEW_HPP_ +#define _M68HC11_MCUVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _M68HC11_MCUDLG_HPP_ +#include +#endif +#ifndef _M68HC11_MCUTHREAD_HPP_ +#include +#endif + +class StatusBarEx; + +class MCUView : public MDIWindow, public MCUThread +{ +public: + MCUView(void); + virtual ~MCUView(); + void setCode(const String &strPathBinary); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,InitialWidth=565,InitialHeight=360}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType cancelHandler(CallbackData &someCallbackData); + CallbackData::ReturnType startHandler(CallbackData &someCallbackData); + CallbackData::ReturnType errorEventHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mcuEventHandler(CallbackData &someCallbackData); + CallbackData::ReturnType messageHandler(CallbackData &someCallbackData); + void handleEventRegs(CallbackData &someCallbackData); + void handleEventVarByte(CallbackData &someCallbackData); + void handleEventQuadByte(CallbackData &someCallbackData); + void handleEventDoubleByte(CallbackData &someCallbackData); + void handleSingleByteData(CallbackData &someCallbackData); + void handleStringData(CallbackData &someCallbackData); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCancelHandler; + Callback mStartHandler; + Callback mErrorEventHandler; + Callback mMCUEventHandler; + Callback mMessageHandler; + SmartPointer mStatusBar; + MCUDlg mMCUDialog; + String mStrPathBinary; +}; + +inline +void MCUView::setCode(const String &strPathBinary) +{ + mStrPathBinary=strPathBinary; +} +#endif \ No newline at end of file diff --git a/m68hc11/backup/Mainfrm.cpp b/m68hc11/backup/Mainfrm.cpp new file mode 100644 index 0000000..e996fa5 --- /dev/null +++ b/m68hc11/backup/Mainfrm.cpp @@ -0,0 +1,497 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char MainFrame::szClassName[]="M68HC11"; +char MainFrame::szMenuName[]="mainMenu"; + +MainFrame::MainFrame(void) +{ + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mLineHandler.setCallback(this,&MainFrame::lineHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + destroy(); +} + +void MainFrame::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); +} + +void MainFrame::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/) +{ + GlobalData statParts; + + createToolBar(); + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + statParts.size(2); + *((int*)&statParts[0])=300; + *((int*)&statParts[1])=400; + mStatusBar->setParts(statParts); + mStatusBar->setText("Ready"); + applyHistory(getFrameMenu()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + ::WinHelp(*this,0,HELP_QUIT,0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + mToolBar.windowRect(toolRect); + mStatusBar->windowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::lineHandler(CallbackData &someCallbackData) +{ + String msg; + ::sprintf(msg,"Ln %d, Col %d",someCallbackData.loWord(),someCallbackData.hiWord()); + mStatusBar->setText(msg,1); + mStatusBar->update(); + return FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case MenuCodeCompile : + handleCodeCompile(); + break; + case MenuCodeCompileAndLoad : + handleCodeCompileAndLoad(); + break; + case MenuEditCut : + handleEditCut(); + break; + case MenuEditCopy : + handleEditCopy(); + break; + case MenuEditPaste : + handleEditPaste(); + break; + case MenuEditFind : + handleEditFind(); + break; + case MenuCascade : + cascade(); + break; + case MenuTile : + tile(); + break; + case MenuArrange : + arrange(); + break; + case MenuCloseAll : + closeAll(); + break; + case MenuMinimizeAll : + minimizeAll(); + break; + case MenuRestoreAll : + restoreAll(); + break; + case MenuFileNew : + handleFileNew(); + break; + case MenuFileOpen : + handleFileOpen(); + break; + case MenuFileSave : + handleFileSave(); + break; + case MenuFilePrint : + handleFilePrint(); + break; + case MenuFileSaveAs : + handleFileSaveAs(); + break; + case MenuFileClose : + handleFileClose(); + break; + case MenuFileQuit : + break; + case MenuSettingsSerial : + handleCommunications(); + break; + case MenuHelpContents : + handleHelp(); + break; + case MenuHelpSearch : + handleHelp(); + break; + case MenuRegistration : + break; + case MenuHelpAbout : + break; + } + if(someCallbackData.wParam()>=StartDynamicID)handleFileOpen(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +// handlers + +void MainFrame::handleCodeCompile(void) +{ + CursorControl cursorControl; + SmartPointer mdiWindow; + String strMessage; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + CodeView &codeView=(CodeView&)*mdiWindow; + if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return; + mStatusBar->setText("compiling..."); + cursorControl.waitCursor(TRUE); + m68Assembler.assemble(codeView.getTitle()); + cursorControl.waitCursor(FALSE); + strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s)."); + mStatusBar->setText(strMessage); +} + +void MainFrame::handleCodeCompileAndLoad(void) +{ + CursorControl cursorControl; + BOOL assembleResult; + String strPathBinary; + String strMessage; + + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + CodeView &codeView=(CodeView&)*mdiWindow; + if(codeView.isDirty()&&IDYES==::MessageBox(*this,(LPSTR)"Save Changes?",(LPSTR)"M68HC11",MB_YESNO))if(!handleFileSave())return; + mStatusBar->setText("compiling..."); + cursorControl.waitCursor(TRUE); + assembleResult=m68Assembler.assemble(codeView.getTitle()); + cursorControl.waitCursor(FALSE); + strMessage=m68Assembler.strLastMessage()+String(", code size is ")+String().fromInt(m68Assembler.codeSize())+String(" byte(s)."); + mStatusBar->setText(strMessage); + if(!assembleResult)return; + strPathBinary=codeView.getTitle().betweenString(0,'.'); + strPathBinary+=".bin"; + codeLoad(strPathBinary); +} + +void MainFrame::handleEditCut(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).cut(); +} + +void MainFrame::handleEditCopy(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).copy(); +} + +void MainFrame::handleEditPaste(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).paste(); +} + +void MainFrame::handleEditFind(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).find(); +} + +void MainFrame::handleFileNew(void) +{ + CodeView *pCodeView; + + pCodeView=::new CodeView; + pCodeView->setLineHandler(&mLineHandler); + pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc"); + insert(*pCodeView); +} + +void MainFrame::handleFileOpen(CallbackData &someCallbackData) +{ + PureMenu fileMenu; + String menuItemString; + + getFrameMenu().getSubMenu(0,fileMenu); + menuItemString=fileMenu.menuItemString(someCallbackData.wParam(),PureMenu::ByCommand); + if(menuItemString.isNull())return; + menuItemString=menuItemString.betweenString(')',0); + menuItemString.trimLeft(); + handleFileOpen(menuItemString); +} + +void MainFrame::handleFileOpen(void) +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,"*.asm","Open File","*.asm",strPathFileName))return; + handleFileOpen(strPathFileName); +} + +void MainFrame::handleFileOpen(const String &strPathFileName) +{ + CodeView *pCodeView; + CursorControl cursorControl; + + if(bringDocumentToFront(strPathFileName))return; + mStatusBar->setText("Loading..."); + cursorControl.waitCursor(TRUE); + + pCodeView=::new CodeView; + insert(*pCodeView); // insert the pointer before creating/activating the window + pCodeView->createWindow(*this,STRING_CODEVIEWCLASSNAME,STRING_CODEVIEWCLASSNAME,"codeMenu","Doc"); + pCodeView->setLineHandler(&mLineHandler); + pCodeView->open(strPathFileName); + mStatusBar->setText("Ready"); + cursorControl.waitCursor(FALSE); + updateHistory(strPathFileName); +} + +void MainFrame::handleFileClose(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + mdiWindow->close(); +} + +void MainFrame::handleFilePrint(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return; + ((CodeView&)*mdiWindow).print(); +} + +BOOL MainFrame::handleFileSave(void) +{ + SmartPointer mdiWindow; + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE; + CodeView &codeView=(CodeView&)*mdiWindow; + if(codeView.getTitle()==String(STRING_UNTITLED))return handleFileSaveAs(); + if(!codeView.save())return mStatusBar->setText(codeView.getTitle()+String(" save failed.")),FALSE; + return mStatusBar->setText(codeView.getTitle()+String(" saved.")),TRUE; + return TRUE; +} + +BOOL MainFrame::handleFileSaveAs(void) +{ + SmartPointer mdiWindow; + OpenDialog openDialog; + String strPathFileName; + + if(!getActive(mdiWindow)||!(mdiWindow->className()==String(STRING_CODEVIEWCLASSNAME)))return FALSE; + if(!openDialog.getSaveFileName(*this,"Assembly Files","File Save","*.asm",strPathFileName))return FALSE; + if(!strPathFileName.strstr(".asm"))strPathFileName+=".asm"; + if(!((CodeView&)*mdiWindow).save(strPathFileName))return mStatusBar->setText(strPathFileName+String(" save failed!.")),FALSE; + return mStatusBar->setText(strPathFileName+String(" saved.")),TRUE; +} + +void MainFrame::handleCommunications(void) +{ + SerialDlg serDlg; + serDlg.perform(*this); +} + +void MainFrame::handleHelp(void) +{ + String strPathHelpFileName; + DiskInfo diskInfo; + + diskInfo.getCurrentDirectory(strPathHelpFileName); + strPathHelpFileName+=String(STRING_HELPFILENAME); + ::WinHelp(*this,strPathHelpFileName,HELP_CONTENTS,0); +} + +// support & testing +BOOL MainFrame::codeLoad(const String &strPathBinary) +{ + MCUView *pMCUView; + + pMCUView=::new MCUView; + pMCUView->createWindow(*this,STRING_MCUVIEWCLASSNAME,STRING_MCUVIEWCLASSNAME,"mcuMenu","Doc"); + insert(*pMCUView); + pMCUView->setCode(strPathBinary); + return TRUE; +} + +void MainFrame::setParts(int numParts) +{ + GlobalData statParts; + if(1==numParts){statParts.size(1);*((int*)&statParts[0])=FirstPartWidth;} + else {statParts.size(2);*((int*)&statParts[0])=FirstPartWidth;*((int*)&statParts[0]+1)=SecondPartWidth;} + mStatusBar->setParts(statParts); +} + +void MainFrame::updateHistory(const String &pathFileName) +{ + M68Reg m68Reg; + Array >mdiWindows; + + if(!m68Reg.insertHistory(pathFileName))return; + removeHistory(getFrameMenu()); + applyHistory(getFrameMenu()); + getDocuments(mdiWindows); + for(int index=0;index &mdiWindow=mdiWindows[index]; + removeHistory(mdiWindow->getMenu()); + applyHistory(mdiWindow->getMenu()); + } +} + +void MainFrame::removeHistory(PureMenu &pureMenu) +{ + M68Reg m68Reg; + UINT startID(StartDynamicID); + Block nameList; + PureMenu fileMenu; + + m68Reg.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + for(int itemIndex=0;itemIndex nameList; + PureMenu fileMenu; + String strItem; + + m68Reg.getHistory(nameList); + if(!nameList.size())return; + pureMenu.getSubMenu(0,fileMenu); + fileMenu.appendSeparator(); + for(int itemIndex=0;itemIndex addBitmaps; + + mToolBar.create(*this,ToolBarID); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolBar.addBitmaps(addBitmaps))return; + mToolBar.addButton(ToolBarButton(STD_FILENEW,MenuFileNew,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILEOPEN,MenuFileOpen,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FILESAVE,MenuFileSave,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_CUT,MenuEditCut,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_COPY,MenuEditCopy,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PASTE,MenuEditPaste,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_FIND,MenuEditFind,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolBar.addButton(ToolBarButton(STD_PRINT,MenuFilePrint,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +} + +BOOL MainFrame::bringDocumentToFront(const String &strTitle) +{ + Array >mdiWindows; + + getDocuments(mdiWindows); + for(int index=0;index &mdiWindow=mdiWindows[index]; + if(((CodeView&)*mdiWindow).getTitle()==strTitle){mdiWindow->bringWindowToTop();return TRUE;} + } + return false; +} + +void MainFrame::splash(void) +{ + SplashScreen splashScreen("SPLASH","M68HC11"); + splashScreen.perform(); +} + +// virtuals + +void MainFrame::mdiDestroy(MDIWindow &mdiWindow) +{ + Array >mdiWindows; + WORD winCount(0); + + getDocuments(mdiWindows); + for(int index=0;index &mdiWindowPtr=mdiWindows[index]; + if(mdiWindowPtr->className()==String(STRING_CODEVIEWCLASSNAME)&&((MDIWindow*)mdiWindowPtr!=&mdiWindow))winCount++; + } + if(!winCount)setParts(SinglePart); +} + +void MainFrame::mdiActivate(MDIWindow &mdiWindow) +{ + if(mdiWindow.className()==String(STRING_CODEVIEWCLASSNAME))setParts(DoublePart); + removeHistory(mdiWindow.getMenu()); + applyHistory(mdiWindow.getMenu()); +} + +void MainFrame::mdiDeactivate(MDIWindow &/*mdiWindow*/) +{ +} diff --git a/m68hc11/backup/Mainfrm.hpp b/m68hc11/backup/Mainfrm.hpp new file mode 100644 index 0000000..0bb33d2 --- /dev/null +++ b/m68hc11/backup/Mainfrm.hpp @@ -0,0 +1,110 @@ +#ifndef _M68HC11_MAINFRAME_HPP_ +#define _M68HC11_MAINFRAME_HPP_ +#ifndef _COMMON_MDIFRM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif +#ifndef _M68HC11_COMMCONTROL_HPP_ +#include +#endif +#ifndef _M68HC11_M68HC11_HPP_ +#include +#endif +#ifndef _AS68HC11_M68ASSEMBLER_HPP_ +#include +#endif + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); + static String className(void); + void splash(void); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); +private: + enum {StatusBarID=500,ToolBarID=501,StartDynamicID=30000}; + enum{SinglePart=1,DoublePart=2,FirstPartWidth=340,SecondPartWidth=420}; + enum{MenuFileSave=SBCMENU_FILESAVE,MenuFileQuit=SBCMENU_FILEQUIT,MenuFilePrint=SBCMENU_FILEPRINT, + MenuSettingsSerial=SBCMENU_SETTINGSSERIAL,MenuHelpContents=SBCMENU_HELPCONTENTS, + MenuHelpSearch=SBCMENU_HELPSEARCH,MenuRegistration=SBCMENU_REGISTRATION,MenuFileNew=SBCMENU_FILENEW, + MenuFileOpen=SBCMENU_FILEOPEN,MenuHelpAbout=SBCMENU_HELPABOUT,MenuFileClose=SBCMENU_FILECLOSE, + MenuFileSaveAs=SBCMENU_FILESAVEAS,MenuCascade=IDM_CASCADE,MenuTile=IDM_TILE,MenuArrange=IDM_ARRANGE, + MenuCloseAll=IDM_CLOSEALL,MenuMinimizeAll=IDM_MINIMIZEALL,MenuRestoreAll=IDM_RESTOREALL, + MenuEditCut=SBCMENU_EDITCUT,MenuEditCopy=SBCMENU_EDITCOPY,MenuEditPaste=SBCMENU_EDITPASTE, + MenuEditFind=SBCMENU_EDITFIND,MenuCodeCompile=SBCMENU_CODECOMPILE, + MenuCodeCompileAndLoad=SBCMENU_CODECOMPILEANDLOAD}; + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType activateAppHandler(CallbackData &someCallbackData); + CallbackData::ReturnType displayChangeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + void createToolBar(void); + void handleCodeCompile(void); + void handleCodeCompileAndLoad(void); + void handleCommunications(void); + void handleEditCut(void); + void handleEditCopy(void); + void handleEditPaste(void); + void handleEditFind(void); + void handleFileNew(void); + void handleFileOpen(void); + void handleFileOpen(CallbackData &someCallbackData); + void handleFileOpen(const String &strPathFileName); + void handleFileClose(void); + void handleFilePrint(void); + void handleHelp(void); + BOOL handleFileSave(void); + BOOL handleFileSaveAs(void); + BOOL codeLoad(const String &strPathBinary); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void setParts(int numParts); + void applyHistory(PureMenu &pureMenu); + void updateHistory(const String &pathFileName); + void removeHistory(PureMenu &pureMenu); + BOOL bringDocumentToFront(const String &strTitle); + + Callback mQueryEndSessionHandler; + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mLineHandler; + SmartPointer mStatusBar; + CommControl mCommControl; + ToolBar mToolBar; +// SerialSettings mSerialSettings; + M68Assembler m68Assembler; + static char szClassName[]; + static char szMenuName[]; +}; + +inline +String MainFrame::className(void) +{ + return String(szClassName); +} +#endif diff --git a/m68hc11/backup/ODLSTLED.CPP b/m68hc11/backup/ODLSTLED.CPP new file mode 100644 index 0000000..1908ede --- /dev/null +++ b/m68hc11/backup/ODLSTLED.CPP @@ -0,0 +1,129 @@ +#include +#include +#include +#include + +OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID) +: OwnerDrawList(parentWnd,hControlWnd,controlID), mRGBGray(192,192,192), mGrayBrush(mRGBGray), + mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"), + mDashBitmap("DASH"), mFont("Courier",14) +{ +} + +OwnerDrawListBinaryLed::OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style) +: OwnerDrawList(parentWnd,initRect,controlID,style), mRGBGray(192,192,192), mGrayBrush(mRGBGray), + mDisabledBrush(RGBColor(128,128,128)), mOneBitmap("ONE"), mZeroBitmap("ZERO"), mBlankBitmap("BLANK"), + mDashBitmap("DASH"), mFont("Courier",14) +{ +} + +OwnerDrawListBinaryLed::~OwnerDrawListBinaryLed() +{ +} + +OwnerDrawListBinaryLed &OwnerDrawListBinaryLed::operator=(const OwnerDrawListBinaryLed &/*someOwnerDrawListBinaryLed*/) +{ // private implementation + return *this; +} + +// **** virtuals + +LPARAM OwnerDrawListBinaryLed::handleControlColor(PureDevice &/*pureDevice*/,Control &/*wndListBox*/) +{ + return (LPARAM)(GDIObj)mGrayBrush; +} + +WORD OwnerDrawListBinaryLed::handleDraw(const DrawItem &drawItem) +{ + if(!isOkay()||-1==drawItem.itemID()||DrawItem::ListBox!=drawItem.controlType())return FALSE; + PureDevice pureDevice(drawItem.deviceContext()); + pureDevice.setBkColor(mRGBGray); + switch(drawItem.itemAction()) + { + case DrawItem::Select : + case DrawItem::DrawEntire : + case DrawItem::Focus : + drawEntire(drawItem); + break; + } + return TRUE; +} + +WORD OwnerDrawListBinaryLed::handleMeasureItem(MeasureItem &measureItem) +{ + measureItem.itemHeight(20); + return TRUE; +} + +void OwnerDrawListBinaryLed::drawEntire(const DrawItem &drawItem) +{ + PureDevice pureDevice(drawItem.deviceContext()); + PureDevice memDevice; + String stringData; + String strNumber; + TEXTMETRIC textMetric; + Rect drawRect; + SIZE sizeExtent; + HFONT hPrevFont; + + if(!isOkay())return; + stringData.reserve(256); + drawRect=drawItem.rectItem(); + hPrevFont=(HFONT)::SelectObject(drawItem.deviceContext(),(GDIObj)mFont); + memDevice.compatibleDevice(pureDevice); + sendMessage(drawItem.hwndItem(),LB_GETTEXT,drawItem.itemID(),(LPARAM)(LPSTR)stringData); + strNumber=stringData.betweenString('\t',0); + if(strNumber.isNull())setBitmap(); + else + { + setBitmap(::atoi(strNumber)); + stringData=stringData.betweenString(0,'\t'); + } + if(stringData.isNull())::MessageBeep(0); + ::GetTextMetrics(drawItem.deviceContext(),&textMetric); + ::GetTextExtentPoint32(drawItem.deviceContext(),(LPSTR)stringData,stringData.length(),&sizeExtent); + if(drawItem.itemState()&ODS_DISABLED) + { + ::GrayString(drawItem.deviceContext(),(HBRUSH)(GDIObj)mDisabledBrush,(GRAYSTRINGPROC)0,(LPARAM)(LPSTR)stringData,stringData.length(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,0,0); + memDevice.select(mBlankBitmap,TRUE); + Rect stretchRect(drawRect); + stretchRect.right(mBlankBitmap.width()); + stretchRect.bottom(sizeExtent.cy); + pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy); + memDevice.select(mBlankBitmap,FALSE); + } + else + { + ::TextOut(drawItem.deviceContext(),mBlankBitmap.width()+6,(drawRect.bottom()+drawRect.top()-textMetric.tmHeight)/2,(LPSTR)stringData,stringData.length()); + memDevice.select(mBlankBitmap,TRUE); + Rect stretchRect(drawRect); + stretchRect.right(mBlankBitmap.width()); + stretchRect.bottom(sizeExtent.cy); + pureDevice.stretchBlt(stretchRect,memDevice,Rect(0,0,mBlankBitmap.width(),mBlankBitmap.height()),PureDevice::MergeCopy); + memDevice.select(mBlankBitmap,FALSE); + } + if((((UINT)drawItem.itemState())&ODS_FOCUS)) + { + Rect bmpRect(drawRect); + bmpRect.right(bmpRect.left()+mBlankBitmap.width()); + bmpRect.bottom(bmpRect.top()+sizeExtent.cy); + ::DrawFocusRect(drawItem.deviceContext(),(RECT*)&bmpRect); + } + ::SelectObject(drawItem.deviceContext(),hPrevFont); +} + +void OwnerDrawListBinaryLed::setBitmap(BYTE value) +{ + for(int index=0,mask=0x80;index<8;index++,mask/=2) + mBlankBitmap.setFrom(value&mask?mOneBitmap:mZeroBitmap,getPlacementRect(index)); +} + +void OwnerDrawListBinaryLed::setBitmap(void) +{ + for(int index=0,mask=0x80;index<8;index++,mask/=2)mBlankBitmap.setFrom(mDashBitmap,getPlacementRect(index)); +} + +Rect OwnerDrawListBinaryLed::getPlacementRect(int position) +{ + return Rect(position*CellWidth,0,CellWidth,CellHeight); +} diff --git a/m68hc11/backup/ODLSTLED.HPP b/m68hc11/backup/ODLSTLED.HPP new file mode 100644 index 0000000..cc358a0 --- /dev/null +++ b/m68hc11/backup/ODLSTLED.HPP @@ -0,0 +1,44 @@ +#ifndef _COMMON_OWNERDRAWLISTBINARYLED_HPP_ +#define _COMMON_OWNERDRAWLISTBINARYLED_HPP_ +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLIST_HPP_ +#include +#endif +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif + +class OwnerDrawListBinaryLed : public OwnerDrawList +{ +public: + OwnerDrawListBinaryLed(GUIWindow &parentWnd,HWND hControlWnd,UINT controlID); + OwnerDrawListBinaryLed(GUIWindow &parentWnd,const Rect &initRect,int controlID,DWORD style=LBS_NOTIFY|WS_BORDER|LBS_HASSTRINGS|WS_VSCROLL|LBS_OWNERDRAWFIXED|WS_CLIPCHILDREN|WS_CLIPSIBLINGS); + virtual ~OwnerDrawListBinaryLed(); + OwnerDrawListBinaryLed &operator=(const OwnerDrawListBinaryLed &someOwnerDrawListBinaryLed); +protected: + virtual WORD handleDraw(const DrawItem &drawItem); + virtual WORD handleMeasureItem(MeasureItem &measureItem); + virtual LPARAM handleControlColor(PureDevice &pureDevice,Control &wndListBox); + virtual void drawEntire(const DrawItem &drawItem); +private: + enum {BmSel=0,BmUnSel=1}; + enum {CellWidth=13,CellHeight=23}; + Rect getPlacementRect(int position); + void setBitmap(BYTE value); + void setBitmap(void); + + PureBitmap mBlankBitmap; + PureBitmap mOneBitmap; + PureBitmap mZeroBitmap; + PureBitmap mDashBitmap; + Font mFont; + RGBColor mRGBGray; + Brush mGrayBrush; + Brush mDisabledBrush; +}; +#endif \ No newline at end of file diff --git a/m68hc11/backup/SERDLG.CPP b/m68hc11/backup/SERDLG.CPP new file mode 100644 index 0000000..6f6130c --- /dev/null +++ b/m68hc11/backup/SERDLG.CPP @@ -0,0 +1,313 @@ +#include +#include + +SerialDlg::SerialDlg(void) +{ + mInitHandler.setCallback(this,&SerialDlg::initHandler); + mDestroyHandler.setCallback(this,&SerialDlg::destroyHandler); + mCommandHandler.setCallback(this,&SerialDlg::commandHandler); + mCloseHandler.setCallback(this,&SerialDlg::closeHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +SerialDlg::~SerialDlg() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); +} + +SerialDlg &SerialDlg::operator=(const SerialDlg &/*someSerialDlg*/) +{ // private implementation + return *this; +} + +BOOL SerialDlg::perform(GUIWindow &parentWindow) // ,SerialSettings &serialSettings) +{ + return ::DialogBoxParam(processInstance(),(LPSTR)"SERIAL",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType SerialDlg::initHandler(CallbackData &/*someCallbackData*/) +{ + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + initSerialSettings(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SerialDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SerialDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(applySerialSettings())endDialog(TRUE); + break; + case IDCANCEL : + endDialog(FALSE); + break; + case SerialStopBits : + case SerialParity : + case SerialDataBits : + case SerialBaud : + case SerialPort : + mStatusBar->setText(" "); + break; + case SerialApply : + applySerialSettings(); + break; + case SerialTest : + testDevice(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SerialDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +void SerialDlg::initSerialSettings(void) +{ + M68Reg mcuReg; + + initPorts(); + initBaud(); + initDataBits(); + initStopBits(); + initParity(); + sendMessage(SerialPort,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getPort()); + sendMessage(SerialBaud,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getBaud()); + sendMessage(SerialDataBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getDataBits()); + sendMessage(SerialParity,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getParity()); + sendMessage(SerialStopBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)mcuReg.getStopBits()); +} + +void SerialDlg::initPorts(void) +{ + String strPort; + CommControl commControl; + Block ports; + + sendMessage(SerialPort,CB_RESETCONTENT,0,0L); + commControl.enumerateDevices(ports); + for(int index=0;indexsetText("Error opening port."); + ::MessageBeep(0); + return false; + } + if(!commControl.setDeviceControlBlock(strCommSettings)){mStatusBar->setText("Failed to apply settings.");return false;} + sendMessage(SerialBaud,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strBaud); + mcuReg.setBaud(strBaud); + sendMessage(SerialDataBits,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strDataBits); + mcuReg.setDataBits(strDataBits); + currSel=sendMessage(SerialParity,CB_GETCURSEL,0,0L); + sendMessage(SerialParity,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strParity); + if(String("None")==strParity)strParity="N"; + else if(String("Odd")==strParity)strParity="O"; + else if(String("Even")==strParity)strParity="E"; + else if(String("Space")==strParity)strParity="S"; + mcuReg.setParity(strParity); + currSel=sendMessage(SerialStopBits,CB_GETCURSEL,0,0L); + sendMessage(SerialStopBits,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strStopBits); + mcuReg.setStopBits(strStopBits); + mStatusBar->setText("Settings have been applied."); + return true; +} + +void SerialDlg::testDevice(void) +{ + CommControl commControl; + BYTE prefix(0xFF); + GlobalData rcvBuffer; + GlobalData sndBuffer; + BYTE codeBytes[]={0x8E,0x00,0xFF,0xCE,0x10,0x00,0x6F,0x2C,0xCC,0x33,0x0C,0xA7,0x2B,0xE7,0x2D,0x1F,0x2E,0x20,0xFC,0xA6,0x2F,0x4C,0x1F,0x2E,0x80,0xFC,0xA7,0x2F,0x7E,0x00,0x0F}; + + sndBuffer.size(256); + sndBuffer.setZero(); + rcvBuffer.size(sndBuffer.size()); + rcvBuffer.setZero(); + ::memcpy(&sndBuffer[0],codeBytes,sizeof(codeBytes)); + if(IDCANCEL==::MessageBox(*this,"This operation will overwrite the contents of MCU RAM with the ECHO program.","WARNING",MB_OKCANCEL))return; + if(!commControl.open(getCommPort())){mStatusBar->setText("Error opening port.");return;} + if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return;} + mStatusBar->setText("waiting for break signal....please reset the device."); + if(!commControl.waitForBreak()){mStatusBar->setText("timeout waiting for break.");return;} + mStatusBar->setText("break received, loading code..."); + commControl.write(&prefix,sizeof(prefix)); + commControl.clearReceiveQueue(); + commControl.write(sndBuffer); + mStatusBar->setText("Waiting for response."); + if(!commControl.waitForData()){mStatusBar->setText("Timeout reached for receive.");return;} + commControl.readFully(rcvBuffer); + if(::memcmp(&rcvBuffer[0],&sndBuffer[0],sndBuffer.size())) + { + mStatusBar->setText("Failed to verify program load."); + return; + } + ::Sleep(250); + if(!echo(commControl))mStatusBar->setText("Received unexpected results from program."); + else mStatusBar->setText("The program has been verified, all tests successful."); + return; +} + +bool SerialDlg::echo(CommControl &commControl) +{ + BYTE sndByte('a'); + BYTE rcvByte=0; + DWORD rcvCount(0); + String str; + + if(!commControl.isOkay()) + { + if(!commControl.open(getCommPort())){mStatusBar->setText("Unable to open comm port.");mStatusBar->setText("Error opening port.");return false;} + if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return false;} + } + commControl.clearError(); + while('z'!=rcvByte) + { + CommStatus commStatus; + commControl.write(&sndByte,sizeof(sndByte)); + if(commControl.waitForData()) + { + rcvByte=0; + commControl.read(&rcvByte,sizeof(rcvByte)); + str+=rcvByte; + mStatusBar->setText(str); + if(!rcvCount&&rcvByte!='b') + { + mStatusBar->setText("Unexpected character in input stream."); + return false; + } + sndByte++; + rcvCount++; + } + } + ::Sleep(250); + return true; +} + +String SerialDlg::getByteString(BYTE charByte) +{ + String str; + ::sprintf(str.str(),"char:%d(0x%08lx)",(int)charByte,(int)charByte); + return str; +} + + diff --git a/m68hc11/backup/SERDLG.HPP b/m68hc11/backup/SERDLG.HPP new file mode 100644 index 0000000..fd3bf0f --- /dev/null +++ b/m68hc11/backup/SERDLG.HPP @@ -0,0 +1,61 @@ +#ifndef _M68HC11_SERIALDLG_HPP_ +#define _M68HC11_SERIAL_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _M68HC11_M68HC11_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _COMMON_COMMCONTROL_HPP_ +#include +#endif + +class CommControl; + +class SerialDlg : public DWindow +{ +public: + SerialDlg(void); + virtual ~SerialDlg(); + BOOL perform(GUIWindow &parentWindow); +private: + enum{SerialStopBits=SERIAL_STOP,SerialParity=SERIAL_PARITY,SerialDataBits=SERIAL_DATA, + SerialBaud=SERIAL_BAUD,SerialPort=SERIAL_PORT,SerialApply=SERIAL_APPLY,SerialTest=SERIAL_TEST}; + enum {StatusBarID=500}; + SerialDlg &operator=(const SerialDlg &someSerialDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType controlColorHandler(CallbackData &someCallbackData); + CallbackData::ReturnType measureItemHandler(CallbackData &someCallbackData); + String getByteString(BYTE charByte); + CommControl::Port getCommPort(void)const; + String getCommSettings(void)const; + bool applySerialSettings(void); + void initSerialSettings(void); + void testDevice(void); + void initDataBits(void); + void initParity(void); + void initStopBits(void); + void initPorts(void); + void initBaud(void); + bool echo(CommControl &commControl); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + SmartPointer mStatusBar; +}; +#endif \ No newline at end of file diff --git a/m68hc11/backup/SETTINGS.HPP b/m68hc11/backup/SETTINGS.HPP new file mode 100644 index 0000000..2b93f86 --- /dev/null +++ b/m68hc11/backup/SETTINGS.HPP @@ -0,0 +1,130 @@ +#ifndef _M68HC11_SERIALSETUP_HPP_ +#define _M68HC11_SERIALSETUP_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class SerialSettings +{ +public: + SerialSettings(void); + SerialSettings(const SerialSettings &someSerialSettings); + virtual ~SerialSettings(); + SerialSettings &operator=(const SerialSettings &someSerialSettings); + BOOL operator==(const SerialSettings &someSerialSettings)const; + DWORD port(void)const; + void port(DWORD port); + DWORD baudRate(void)const; + void baudRate(DWORD baudRate); + DWORD parity(void)const; + void parity(DWORD parity); + DWORD stopBits(void)const; + void stopBits(DWORD stopBits); + DWORD dataBits(void)const; + void dataBits(DWORD dataBits); +private: + DWORD mSerialPort; + DWORD mBaudRate; + DWORD mParity; + DWORD mStopBits; + DWORD mDataBits; +}; + +inline +SerialSettings::SerialSettings(void) +: mSerialPort(0), mBaudRate(1200), mParity(0), mStopBits(0), mDataBits(8) +{ +} + +inline +SerialSettings::SerialSettings(const SerialSettings &someSerialSettings) +{ + *this=someSerialSettings; +} + +inline +SerialSettings::~SerialSettings() +{ +} + +inline +SerialSettings &SerialSettings::operator=(const SerialSettings &someSerialSettings) +{ + port(someSerialSettings.port()); + baudRate(someSerialSettings.baudRate()); + parity(someSerialSettings.parity()); + stopBits(someSerialSettings.stopBits()); + dataBits(someSerialSettings.dataBits()); + return *this; +} + +inline +BOOL SerialSettings::operator==(const SerialSettings &someSerialSettings)const +{ + return (port()==someSerialSettings.port()&& + baudRate()==someSerialSettings.baudRate()&& + parity()==someSerialSettings.parity()&& + stopBits()==someSerialSettings.stopBits()&& + dataBits()==someSerialSettings.dataBits()); +} + +inline +DWORD SerialSettings::port(void)const +{ + return mSerialPort; +} + +inline +void SerialSettings::port(DWORD port) +{ + mSerialPort=port; +} + +inline +DWORD SerialSettings::baudRate(void)const +{ + return mBaudRate; +} + +inline +void SerialSettings::baudRate(DWORD baudRate) +{ + mBaudRate=baudRate; +} + +inline +DWORD SerialSettings::parity(void)const +{ + return mParity; +} + +inline +void SerialSettings::parity(DWORD parity) +{ + mParity=parity; +} + +inline +DWORD SerialSettings::stopBits(void)const +{ + return mStopBits; +} + +inline +void SerialSettings::stopBits(DWORD stopBits) +{ + mStopBits=stopBits; +} + +inline +DWORD SerialSettings::dataBits(void)const +{ + return mDataBits; +} + +inline +void SerialSettings::dataBits(DWORD dataBits) +{ + mDataBits=dataBits; +} +#endif \ No newline at end of file diff --git a/m68hc11/backup/SPLASH.CPP b/m68hc11/backup/SPLASH.CPP new file mode 100644 index 0000000..79516e9 --- /dev/null +++ b/m68hc11/backup/SPLASH.CPP @@ -0,0 +1,156 @@ +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout) +: mBitmapName(strBitmap), mStrCaption(strCaption), mTimeout(timeout), + mTextFont("Times New Roman",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(timeout()) +// if(useTimer()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS; + createWindow(WS_EX_CONTROLPARENT,szClassName,timeout()?(char*)0:(char*)mStrCaption,style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIBitmap(*mPureDevice,mResBitmap->width(),mResBitmap->height(),*mResBitmap); + mDIBitmap.disposition(PointerDisposition::Delete); + if(timeout())setTimer(TimerID,timeout()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mDIBitmap->copyBits(mResBitmap->ptrData(),mResBitmap->imageExtent()); + mDIBitmap->stretchBlt(pureDevice,Rect(0,0,width(),height())); + pureDevice.select((GDIObj)mTextFont,TRUE); + pureDevice.setTextColor(RGBColor(247,231,33)); + pureDevice.setBkMode(PureDevice::Transparent); +// pureDevice.textOut(60,180,"1998 Diversified Software Solutions"); + if(!mInstallLine.isNull()) + { + pureDevice.setTextColor(RGBColor(255,255,255)); + pureDevice.textOut(50,196,mInstallLine); + } + return (CallbackData::ReturnType)FALSE; +} + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} + + diff --git a/m68hc11/backup/SPLASH.HPP b/m68hc11/backup/SPLASH.HPP new file mode 100644 index 0000000..3b1d203 --- /dev/null +++ b/m68hc11/backup/SPLASH.HPP @@ -0,0 +1,68 @@ +#ifndef _M68HC11_SPLASHSCREEN_HPP_ +#define _M68HC11_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIBitmap; + +class SplashScreen : public Window +{ +public: + enum{TimeOut=2500}; + SplashScreen(const String &strBitmap,const String &strCaption,UINT timeout=TimeOut); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + void registerClass(void); + UINT timeout(void)const; + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mInstallLine; + UINT mTimeout; + Font mTextFont; + static char szClassName[]; +}; + +inline +UINT SplashScreen::timeout(void)const +{ + return mTimeout; +} + +#endif \ No newline at end of file diff --git a/m68hc11/backup/XTRAINFO.HPP b/m68hc11/backup/XTRAINFO.HPP new file mode 100644 index 0000000..3cf9bc0 --- /dev/null +++ b/m68hc11/backup/XTRAINFO.HPP @@ -0,0 +1,86 @@ +#ifndef _M68HC11_EXTRAINFO_HPP_ +#define _M68HC11_EXTRAINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ExtraInfo +{ +public: + ExtraInfo(void); + ExtraInfo(const ExtraInfo &someExtraInfo); + ExtraInfo(DWORD userDataOne,DWORD userDataTwo); + virtual ~ExtraInfo(); + ExtraInfo &operator=(const ExtraInfo &someExtraInfo); + BOOL operator==(const ExtraInfo &someExtraInfo)const; + DWORD userDataOne(void)const; + void userDataOne(DWORD userDataOne); + DWORD userDataTwo(void)const; + void userDataTwo(DWORD userDataTwo); +private: + DWORD mUserDataOne; + DWORD mUserDataTwo; +}; + +inline +ExtraInfo::ExtraInfo(void) +: mUserDataOne(0), mUserDataTwo(0) +{ +} + +inline +ExtraInfo::ExtraInfo(const ExtraInfo &someExtraInfo) +{ + *this=someExtraInfo; +} + +inline +ExtraInfo::ExtraInfo(DWORD userDataOne,DWORD userDataTwo) +: mUserDataOne(userDataOne), mUserDataTwo(userDataTwo) +{ +} + +inline +ExtraInfo::~ExtraInfo() +{ +} + +inline +ExtraInfo &ExtraInfo::operator=(const ExtraInfo &someExtraInfo) +{ + userDataOne(someExtraInfo.userDataOne()); + userDataTwo(someExtraInfo.userDataTwo()); + return *this; +} + +inline +BOOL ExtraInfo::operator==(const ExtraInfo &someExtraInfo)const +{ + return (userDataOne()==someExtraInfo.userDataOne()&& + userDataTwo()==someExtraInfo.userDataTwo()); +} + +inline +DWORD ExtraInfo::userDataOne(void)const +{ + return mUserDataOne; +} + +inline +void ExtraInfo::userDataOne(DWORD userDataOne) +{ + mUserDataOne=userDataOne; +} + +inline +DWORD ExtraInfo::userDataTwo(void)const +{ + return mUserDataTwo; +} + +inline +void ExtraInfo::userDataTwo(DWORD userDataTwo) +{ + mUserDataTwo=userDataTwo; +} +#endif diff --git a/m68hc11/backup/codeview.cpp b/m68hc11/backup/codeview.cpp new file mode 100644 index 0000000..07b21ff --- /dev/null +++ b/m68hc11/backup/codeview.cpp @@ -0,0 +1,270 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +CodeView::CodeView(void) +: WinHookProc(WinHookProc::HookBefore) +{ + mCreateHandler.setCallback(this,&CodeView::createHandler); + mSizeHandler.setCallback(this,&CodeView::sizeHandler); + mCloseHandler.setCallback(this,&CodeView::closeHandler); + mDestroyHandler.setCallback(this,&CodeView::destroyHandler); + mCommandHandler.setCallback(this,&CodeView::commandHandler); + mKeyUpHandler.setCallback(this,&CodeView::keyUpHandler); + mKeyDownHandler.setCallback(this,&CodeView::keyDownHandler); + mLeftButtonDownHandler.setCallback(this,&CodeView::leftButtonDownHandler); + mSetFocusHandler.setCallback(this,&CodeView::setFocusHandler); + MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler); + MDIWindow::insertHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler); + WinHookProc::insertHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler); + WinHookProc::insertHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler); + WinHookProc::insertHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler); +} + +CodeView::~CodeView() +{ + MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler); + MDIWindow::removeHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler); + WinHookProc::removeHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler); + WinHookProc::removeHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler); + WinHookProc::removeHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler); +} + +CallbackData::ReturnType CodeView::keyDownHandler(CallbackData &someCallbackData) +{ + KeyData keyData(someCallbackData); + + if(keyData.isEscapeKey())return (CallbackData::ReturnType)TRUE; + notifyCurrentLine(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType CodeView::keyUpHandler(CallbackData &someCallbackData) +{ + notifyCurrentLine(); + return FALSE; +} + +CallbackData::ReturnType CodeView::leftButtonDownHandler(CallbackData &someCallbackData) +{ + notifyCurrentLine(); + return FALSE; +} + +CallbackData::ReturnType CodeView::createHandler(CallbackData &someCallbackData) +{ + Rect controlRect; + + getControlRect(controlRect); + mRichEditControl.createControl(*this,controlRect,EditControlID,WS_VSCROLL|WS_HSCROLL); + hookWin(mRichEditControl); + mRichEditControl.wantReturn(TRUE); +// mRichEditControl.setCharFormat("MS Sans Serif",FontMagic); // "Courier New" +// mRichEditControl.setCharFormat("Courier",FontMagic); // "Courier New" +// mRichEditControl.setCharFormat("Courier New",FontMagic); // "Courier New" +// mRichEditControl.setCharFormat("Courier New",8); // "Courier New" + Font font("Courier New",12); + mRichEditControl.setFont(font); + mRichEditControl.setTextColor(RGBColor(0,0,0)); + mRichEditControl.setBkGndColor(RGBColor(255,255,255)); + mRichEditControl.setReadOnly(FALSE); + mRichEditControl.limitText(0); + mRichEditControl.setFocus(); + mClipboard=::new Clipboard(*this); + mClipboard.disposition(PointerDisposition::Delete); + setTitle(String()); + return FALSE; +} + +CallbackData::ReturnType CodeView::sizeHandler(CallbackData &someCallbackData) +{ + Rect controlRect; + + if(SIZE_RESTORED==someCallbackData.wParam())mRichEditControl.show(SW_SHOWNORMAL); + getControlRect(controlRect); + mRichEditControl.moveWindow(controlRect,TRUE); + return FALSE; +} + +CallbackData::ReturnType CodeView::closeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType CodeView::destroyHandler(CallbackData &someCallbackData) +{ + if(!mRichEditControl.isDirty())return FALSE; + if(IDOK!=::MessageBox(*this,(LPSTR)"Do you want to save the changes?",(LPSTR)"The file has been changed",MB_YESNO))return FALSE; + save(); + unhookWin(); + return FALSE; +} + +CallbackData::ReturnType CodeView::commandHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType CodeView::setFocusHandler(CallbackData &someCallbackData) +{ + mRichEditControl.setFocus(); + notifyCurrentLine(); + return (CallbackData::ReturnType)FALSE; +} + +void CodeView::setTitle(const String &strTitle) +{ + String strCaption; + String strBase; + + if(strTitle.isNull())mTitle=String(STRING_UNTITLED); + else mTitle=strTitle; + windowText(strCaption); + strBase=strCaption.betweenString(0,'-'); + strBase.trimRight(); + strBase+=String(" - [")+mTitle+String("]"); + setCaption(strBase); +} + +BOOL CodeView::save(void) +{ + Block lineStrings; + + mRichEditControl.getLines(lineStrings); + mRichEditControl.isDirty(FALSE); + return saveCode(lineStrings,getTitle()); +} + +BOOL CodeView::save(const String &strPathFileName) +{ + Block lineStrings; + + setTitle(strPathFileName); + mRichEditControl.getLines(lineStrings); + mRichEditControl.isDirty(FALSE); + return saveCode(lineStrings,strPathFileName); +} + +void CodeView::find(void) +{ + mEditFind.perform(*this,mRichEditControl); +} + +void CodeView::cut(void) +{ + if(!mClipboard.isOkay()||!mRichEditControl.isValid())return; + String strText; + if(mRichEditControl.getSelectedText(strText))mClipboard->setClipboard(strText); + mRichEditControl.cutSelection(); +} + +void CodeView::copy(void) +{ + if(!mClipboard.isOkay()||!mRichEditControl.isValid())return; + String strText; + if(!mRichEditControl.getSelectedText(strText))return; + mClipboard->setClipboard(strText); +} + +void CodeView::paste(void) +{ + if(!mClipboard.isOkay())return; + mRichEditControl.pasteSpecial(CF_TEXT); +} + +BOOL CodeView::saveCode(Block &codeLines,const String &strPathFileName) +{ + FileIO outFile; + CursorControl cursorControl; + + if(!codeLines.size())return FALSE; + outFile.open(strPathFileName,FileIO::GenericWrite,FileIO::FileShareRead,FileIO::Open(FileIO::CreateAlways)); + if(!outFile.isOkay())return FALSE; + for(int lineIndex=0;lineIndex codeLines; + Font textFont("Helv",36); + + if(!printManager.choosePrinter((GUIWindow&)*(getFrame()),strPrinter))return; + printManager.openPrinter(strPrinter,(GUIWindow&)*(getFrame()),getTitle()); + printManager.printLines(codeLines,textFont,Point(10,10)); + printManager.endDoc(); +} + +void CodeView::notifyCurrentLine(void) +{ + CallbackData lineData(0,mRichEditControl.getCaretPosition()); + mLineHandler.callback(lineData); +} + +void CodeView::getControlRect(Rect &controlRect) +{ + clientRect(controlRect); + controlRect.left(BorderWidth); + controlRect.top(BorderWidth); + controlRect.right((controlRect.right()-BorderWidth)+1); + controlRect.bottom((controlRect.bottom()-BorderWidth)+1); +} + +// *** virtuals + +void CodeView::preRegister(WNDCLASS &wndClass) +{ + wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE; +} + +void CodeView::preCreate(MDICREATESTRUCT &createStruct) +{ +} diff --git a/m68hc11/backup/codeview.hpp b/m68hc11/backup/codeview.hpp new file mode 100644 index 0000000..0b5e2e9 --- /dev/null +++ b/m68hc11/backup/codeview.hpp @@ -0,0 +1,87 @@ +#ifndef _M68HC11_CODEVIEW_HPP_ +#define _M68HC11_CODEVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_RICHEDIT_HPP_ +#include +#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif +#ifndef _COMMON_CLIPBOARD_HPP_ +#include +#endif +#ifndef _M68HC11_EDITFIND_HPP_ +#include +#endif + +class CodeView : public MDIWindow, private WinHookProc +{ +public: + CodeView(void); + virtual ~CodeView(); + BOOL save(void); + BOOL save(const String &strPathFileName); + void open(const String &pathFileName); + void find(void); + void cut(void); + void copy(void); + void paste(void); + void print(void); + BOOL isDirty(void)const; + void setLineHandler(PureCallback *pPureCallback); + const String &getTitle(void)const; + void setTitle(const String &strTitle); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {FontMagic=175,EditControlID=100,StatusBarID=101,BorderWidth=1}; // 165 + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + BOOL saveCode(Block &headerLines,const String &strPathFileName); + void getControlRect(Rect &controlRect); + void notifyCurrentLine(void); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyUpHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mSetFocusHandler; + CallbackPointer mLineHandler; + RichEditControl mRichEditControl; + SmartPointer mClipboard; + EditFind mEditFind; + String mTitle; +}; + +inline +BOOL CodeView::isDirty(void)const +{ + return mRichEditControl.isDirty(); +} + +inline +void CodeView::setLineHandler(PureCallback *pPureCallback) +{ + mLineHandler=CallbackPointer(pPureCallback); +} + +inline +const String &CodeView::getTitle(void)const +{ + return mTitle; +} +#endif \ No newline at end of file diff --git a/m68hc11/backup/commctrl.cpp b/m68hc11/backup/commctrl.cpp new file mode 100644 index 0000000..5a8ec55 --- /dev/null +++ b/m68hc11/backup/commctrl.cpp @@ -0,0 +1,209 @@ +#include +#include +#include + +void CommControl::portToString(CommControl::Port port,String &strPort) +{ + if(port==CommControl::PortCOM1)strPort=String(STRING_COM1); + else if(port==CommControl::PortCOM2)strPort=String(STRING_COM2); + else if(port==CommControl::PortCOM3)strPort=String(STRING_COM3); + else strPort=String(STRING_COM4); +} + +CommControl::Port CommControl::stringToPort(const String &strPort) +{ + if(strPort==String(STRING_COM1))return CommControl::PortCOM1; + else if(strPort==String(STRING_COM2))return CommControl::PortCOM2; + else if(strPort==String(STRING_COM3))return CommControl::PortCOM3; + else return CommControl::PortCOM4; +} + +bool CommControl::readFully(GlobalData &dataBytes) +{ + CommStatus commStatus; + DWORD bytesRead=0; + DWORD byteCount; + DWORD bytesToRead; + + if(!isOkay())return false; + clearError(commStatus); + byteCount=dataBytes.size(); + if(!byteCount&&!commStatus.bytesInReceiveQueue())return false; + if(!byteCount){byteCount=commStatus.bytesInReceiveQueue();dataBytes.size(byteCount);} + return readFully(&dataBytes[0],dataBytes.size()); +} + +bool CommControl::readFully(BYTE *pBuffer,DWORD byteCount) +{ + CommStatus commStatus; + DWORD bytesRead=0; + DWORD bytesToRead; + + if(!isOkay())return false; + clearError(commStatus); + if(!byteCount||!pBuffer)return false; + while(bytesReadbyteCount?byteCount-bytesRead:commStatus.bytesInReceiveQueue(); + read(&pBuffer[bytesRead],bytesToRead); + bytesRead+=bytesToRead; + } + if(bytesRead==byteCount)break; + ::Sleep(25); + clearError(commStatus); + } + showBytes(pBuffer,byteCount); + return true; +} + +bool CommControl::hasData(void) +{ + CommStatus commStatus; + clearError(commStatus); + return commStatus.bytesInReceiveQueue()?true:false; +} + +bool CommControl::clearReceiveQueue(void) +{ + GlobalData rcvBytes; + CommStatus commStatus; + + if(!isOkay())return false; + ::Sleep(1000); + clearError(commStatus); + if(!commStatus.bytesInReceiveQueue())return true; + ::OutputDebugString(String(String("Clearing ")+String().fromInt(commStatus.bytesInReceiveQueue())+String(" bytes from receive queue.\n")).str()); + rcvBytes.size(commStatus.bytesInReceiveQueue()); + read(&rcvBytes[0],rcvBytes.size()); + showBytes(rcvBytes); + return true; +} + +bool CommControl::waitEvent(DWORD &eventMask,DWORD timeout) +{ + BOOL result; + DWORD lastError; + + eventMask=0; + if(!isOkay())return false; + mIOEvent.resetEvent(); + result=::WaitCommEvent((HANDLE)mCommDevice,&eventMask,&mOverlapped.getOverlapped()); + if(result)return true; + lastError=::GetLastError(); + if(lastError!=ERROR_IO_PENDING)return false; + mIOEvent.waitEvent(timeout); + if(!mCommDevice.getOverlappedResult(mOverlapped,false))return false; + return true; +} + +DWORD CommControl::enumerateDevices(Block &deviceList) +{ + + deviceList.remove(); + if(isOkay())return 0; + for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++) + { + if(mCommDevice.open(mStrPorts[port])) + { + mCommDevice.close(); + deviceList.insert(&port); + } + } + return deviceList.size(); +} + +DWORD CommControl::enumerateDevices(Block &deviceList) +{ + deviceList.remove(); + if(isOkay())return 0; + for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++) + { + if(mCommDevice.open(mStrPorts[port])) + { + mCommDevice.close(); + if(PortCOM1==port)deviceList.insert(&String("COM1")); + else if(PortCOM2==port)deviceList.insert(&String("COM2")); + else if(PortCOM3==port)deviceList.insert(&String("COM3")); + else if(PortCOM4==port)deviceList.insert(&String("COM4")); + } + } + return deviceList.size(); +} + +DWORD CommControl::read(void *pBuffer,int length,DWORD timeout) +{ + BOOL result; + DWORD lastError; + + if(!isOkay())return FALSE; + mIOEvent.resetEvent(); + result=mCommDevice.read((BYTE*)pBuffer,length,mOverlapped); + if(result)return TRUE; + lastError=::GetLastError(); + if(lastError!=ERROR_IO_PENDING)return FALSE; + mIOEvent.waitEvent(TimeOut); + if(!mCommDevice.getOverlappedResult(mOverlapped,FALSE))return FALSE; + return TRUE; +} + +bool CommControl::isOkay(void)const +{ + return mCommDevice.isOkay(); +} + +bool CommControl::clearError(CommStatus &commStatus)const +{ + DWORD errorMask(0); + bool returnCode(false); + + if(!isOkay())return returnCode; + returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,&commStatus.getCOMSTAT()); + showError(errorMask); + return returnCode; +} + +bool CommControl::clearError(void)const +{ + DWORD errorMask(0); + bool returnCode(false); + + if(!isOkay())return false; + returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,0); + showError(errorMask); + return returnCode; +} + +void CommControl::showError(DWORD errorMask)const +{ + if(errorMask&CE_BREAK)::OutputDebugString("The hardware detected a break condition.\n"); + if(errorMask&CE_DNS)::OutputDebugString("Windows 95 and Windows 98: A parallel device is not selected.\n"); + if(errorMask&CE_FRAME)::OutputDebugString("The hardware detected a framing error.\n"); + if(errorMask&CE_IOE)::OutputDebugString("An I/O error occurred during communications with the device.\n"); + if(errorMask&CE_MODE)::OutputDebugString("The requested mode is not supported, or the hFile parameter is invalid. If this value is specified, it is the only valid error.\n"); + if(errorMask&CE_OOP)::OutputDebugString("Windows 95 and Windows 98: A parallel device signaled that it is out of paper.\n"); + if(errorMask&CE_OVERRUN)::OutputDebugString("A character-buffer overrun has occurred. The next character is lost.\n"); + if(errorMask&CE_PTO)::OutputDebugString("Windows 95 and Windows 98: A time-out occurred on a parallel device.\n"); + if(errorMask&CE_RXOVER)::OutputDebugString("An input buffer overflow has occurred. There is either no room in the input buffer, or a character was received after the end-of-file (EOF) character.\n"); + if(errorMask&CE_RXPARITY)::OutputDebugString("The hardware detected a parity error.\n"); + if(errorMask&CE_TXFULL)::OutputDebugString("The application tried to transmit a character, but the output buffer was full.\n"); +} + +void CommControl::showBytes(BYTE *pBuffer,DWORD byteCount) +{ + Block strLines; + + ::OutputDebugString("\n"); + FormatLines::hexasciiLines(strLines,pBuffer,byteCount); + for(int index=0;index rcvBytes) +{ + showBytes(&rcvBytes[0],rcvBytes.size()); +} diff --git a/m68hc11/backup/fmtlines.cpp b/m68hc11/backup/fmtlines.cpp new file mode 100644 index 0000000..f8e396d --- /dev/null +++ b/m68hc11/backup/fmtlines.cpp @@ -0,0 +1,120 @@ +#include +#include + +DWORD FormatLines::hexasciiLines(Block &lineStrings,GlobalData &globalData) +{ + return hexasciiLines(lineStrings,&globalData[0],globalData.size()); +} + +DWORD FormatLines::hexasciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount) +{ + Block asciiLines; + Block hexLines; + String tmpString; + DWORD lineCount; + + formatLines(asciiLines,pBuffer,byteCount,HexCharsPerLine,ASCIILine); + formatLines(hexLines,pBuffer,byteCount,HexCharsPerLine,HexLine); + lineCount=asciiLines.size(); + for(DWORD itemIndex=0;itemIndex &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD charsPerLine,LineType lineType) +{ + WORD charCount; + String charString; + String charLine; + BYTE charByte; + BYTE prevByte; + + if(!byteCount||!pBuffer)return byteCount; + charCount=0; + for(DWORD itemIndex=0;itemIndex &lineStrings,GlobalData &globalData,WORD charsPerLine,LineType lineType) +{ + DWORD byteCount(globalData.size()); + WORD charCount; + String charString; + String charLine; + BYTE charByte; + BYTE prevByte; + + if(!byteCount)return byteCount; + charCount=0; + for(DWORD itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class FormatLines +{ +public: + enum{HexCharsPerLine=0x10,ASCIICharsPerLine=0x20}; + FormatLines(void); + ~FormatLines(); + static DWORD hexLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD hexCharsPerLine=HexCharsPerLine); + static DWORD hexLines(Block &lineStrings,GlobalData &globalData,WORD hexCharsPerLine=HexCharsPerLine); + static DWORD asciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD asciiCharsPerLine=ASCIICharsPerLine); + static DWORD asciiLines(Block &lineStrings,GlobalData &globalData,WORD asciiCharsPerLine=ASCIICharsPerLine); + static DWORD hexasciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount); + static DWORD hexasciiLines(Block &lineStrings,GlobalData &globalData); +private: + enum LineType{HexLine,ASCIILine}; + static DWORD formatLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD charsPerLine,LineType lineType); +}; + +inline +FormatLines::FormatLines(void) +{ +} + +inline +FormatLines::~FormatLines() +{ +} + +inline +DWORD FormatLines::hexLines(Block &lineStrings,GlobalData &globalData,WORD hexCharsPerLine) +{ + return formatLines(lineStrings,&globalData[0],globalData.size(),hexCharsPerLine,HexLine); +} + +inline +DWORD FormatLines::hexLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD hexCharsPerLine) +{ + return formatLines(lineStrings,pBuffer,byteCount,hexCharsPerLine,HexLine); +} + +inline +DWORD FormatLines::asciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD asciiCharsPerLine) +{ + return formatLines(lineStrings,pBuffer,byteCount,asciiCharsPerLine,ASCIILine); +} +#endif diff --git a/m68hc11/backup/m68hc11.rc b/m68hc11/backup/m68hc11.rc new file mode 100644 index 0000000..e499117 --- /dev/null +++ b/m68hc11/backup/m68hc11.rc @@ -0,0 +1,422 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +#include "m68hc11\m68hc11.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP ICON DISCARDABLE "MOT.ICO" +MOT ICON DISCARDABLE "MOT.ICO" +DOC ICON DISCARDABLE "DOC.ICO" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +BLANK BITMAP MOVEABLE PURE "BLANK.BMP" +ONE BITMAP MOVEABLE PURE "ONE.BMP" +ZERO BITMAP MOVEABLE PURE "ZERO.BMP" +DASH BITMAP MOVEABLE PURE "DASH.BMP" +SPLASH BITMAP MOVEABLE PURE "SPLASH.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Settings" + BEGIN + MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + +CODEMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN + MENUITEM "&Close", SBCMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE + MENUITEM "Save &As...", SBCMENU_FILESAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT + MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY + MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE + MENUITEM SEPARATOR + MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND + END + POPUP "&Settings" + BEGIN + MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL + END + POPUP "&Code" + BEGIN + MENUITEM "&Compile\tCtrl+C", SBCMENU_CODECOMPILE + MENUITEM "Compile and Load\tCtrl+P", SBCMENU_CODECOMPILEANDLOAD + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + +MCUMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW, GRAYED + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN, GRAYED + MENUITEM "&Close", SBCMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE, GRAYED + MENUITEM "Save &As...", SBCMENU_FILESAVEAS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT + MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY + MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE + MENUITEM SEPARATOR + MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +SERIAL DIALOG DISCARDABLE 6, 15, 207, 111 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Serial Setup" +FONT 6, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,153,3,50,14 + PUSHBUTTON "Cancel",IDCANCEL,153,18,50,14 + PUSHBUTTON "Test",SERIAL_TEST,153,32,50,14 + COMBOBOX SERIAL_BAUD,30,24,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + COMBOBOX SERIAL_DATA,30,37,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + COMBOBOX SERIAL_PARITY,30,63,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + COMBOBOX SERIAL_PORT,30,11,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Port:",-1,3,14,18,8 + LTEXT "Baud:",-1,3,27,21,8 + LTEXT "Data:",-1,3,40,20,8 + LTEXT "Stop:",-1,4,53,19,8 + LTEXT "Parity:",-1,3,65,19,8 + COMBOBOX SERIAL_STOP,30,50,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "Apply",SERIAL_APPLY,153,46,50,14 +END + +MCUDLG DIALOG DISCARDABLE 6, 5, 358, 174 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_CHILD | WS_VISIBLE +FONT 6, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "Start",IDOK,254,5,50,14 + PUSHBUTTON "Quit",IDCANCEL,304,5,50,14 + LISTBOX MCUDLG_REGISTERS,15,38,144,129,LBS_SORT | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL + EDITTEXT MCUDLG_A,217,37,38,12 + EDITTEXT MCUDLG_B,256,37,38,12 + EDITTEXT MCUDLG_X,217,50,38,12 + EDITTEXT MCUDLG_Y,256,50,38,12 + EDITTEXT MCUDLG_SP,217,63,38,12 + EDITTEXT MCUDLG_PC,256,63,38,12 + EDITTEXT MCUDLG_CCR,217,76,38,12 + LISTBOX MCUDLG_MESSAGES,168,107,177,60,LBS_SORT | WS_VSCROLL + CTEXT "MCU Registers",-1,44,26,60,8 + CTEXT "Processor",-1,203,26,49,8 + LTEXT "Accumulator A",-1,165,40,51,8 + LTEXT "Accumulator B",-1,297,39,49,8 + LTEXT "Index Register X",-1,163,52,52,8 + LTEXT "Index Register Y",-1,296,51,55,8 + LTEXT "SP",-1,201,65,13,8 + LTEXT "PC",-1,297,64,10,8 + LTEXT "CCR",-1,198,78,16,8 + GROUPBOX "",-1,2,19,349,154 + LTEXT "Debug Messages",-1,225,95,60,8 +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""m68hc11\\m68hc11.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_M68KEYNAME "Software\\Diversified\\M68HC11" + STRING_HISTORYKEYNAME "Software\\Diversified\\M68HC11\\History" + STRING_SETTINGSKEYNAME "Software\\Diversified\\M68HC11\\Settings" + STRING_SERIALKEYNAME "Software\\Diversified\\M68HC11\\Serial" + STRING_HISTORYKEYSHORTNAME "History" + STRING_SETTINGSEMAIL "EMAIL" + STRING_SERIALPORT "Port" + STRING_SERIALBAUD "Baud" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_SERIALDATA "Data" + STRING_SERIALPARITY "Parity" + STRING_SERIALSTOP "Stop" + STRING_COM1 "COM1" + STRING_COM2 "COM2" + STRING_COM3 "COM3" + STRING_COM4 "COM4" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_CODEVIEWCLASSNAME "CodeView" + STRING_MCUVIEWCLASSNAME "MCUView" + STRING_UNTITLED "Untitled" + STRING_HELPFILENAME "m68hc11.hlp" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERADR4 "ADR4" + STRING_REGISTERBPROT "BPROT" + STRING_REGISTEREPROG "EPROG" + STRING_REGISTERRESERVED3 "RESERVED" + STRING_REGISTERRESERVED4 "RESERVED" + STRING_REGISTEROPTION "OPTION" + STRING_REGISTERCOPRST "COPRST" + STRING_REGISTERPPROG "PPROG" + STRING_REGISTERHPRIO "HPRIO" + STRING_REGISTERINIT "INIT" + STRING_REGISTERTEST1 "TEST1" + STRING_REGISTERCONFIG "CONFIG" + STRING_ERRORFILEOPEN "Error opening '" + STRING_ERRORPORTOPEN "Error opening communications port." + STRING_ERRORPORTSETTINGS "Error initializing port settings." + STRING_ERRORTIMEOUT "Timeout waiting for device." +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_ERRORREADERROR "Error reading from device." + STRING_ERRORTALKBACKFAILURE "Error receiving response from device" + STRING_ERRORTALKBACKDATA "Error validating code load" + STRING_EVENTSINGLEBYTE "Received single-byte event." + STRING_EVENTQUADBYTE "Received quad-byte event." + STRING_EVENTVARBYTE "Received variable-byte event." + STRING_EVENTREGDATASTART "Receiving register data..." + STRING_EVENTREGDATACOMPLETE "Register receive complete." + STRING_EVENTCODECOMPLETE "Received code completion event." + STRING_EVENTDOUBLEBYTE "Received double-byte event." + STRING_EVENTSTRING "Received string event." +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERPORTA "PORTA" + STRING_REGISTERRESERVED1 "RESERVED" + STRING_REGISTERPIOC "PIOC" + STRING_REGISTERPORTC "PORTC" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERPORTB "PORTB" + STRING_REGISTERPORTCL "PORTCL" + STRING_REGISTERRESERVED2 "RESERVED" + STRING_REGISTERDDRC "DDRC" + STRING_REGISTERPORTD "PORTD" + STRING_REGISTERDDRD "DDRD" + STRING_REGISTERPORTE "PORTE" + STRING_REGISTERCFORC "CFORC" + STRING_REGISTEROC1M "OC1M" + STRING_REGISTEROC1D "OC1D" + STRING_REGISTERTCNTH1 "TCNT(Hi)" + STRING_REGISTERTCNTLO "TCNT(Lo)" + STRING_REGISTERTIC1HI "TIC1(Hi)" + STRING_REGISTERTIC1LO "TIC1(Lo)" + STRING_REGISTERTIC2HI "TIC2(Hi)" + STRING_REGISTERTIC2LO "TIC2(Lo)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERTIC3HI "TIC3(Hi)" + STRING_REGISTERTIC3LO "TIC3(Lo)" + STRING_REGISTERTOC1HI "TOC1(Hi)" + STRING_REGISTERTOC1LO "TOC1(Lo)" + STRING_REGISTERTOC2HI "TOC2(Hi)" + STRING_REGISTERTOC2LO "TOC2(Lo)" + STRING_REGISTERTOC3HI "TOC3(Hi)" + STRING_REGISTERTOC3LO "TOC3(Lo)" + STRING_REGISTERTOC4HI "TOC4(Hi)" + STRING_REGISTERTOC4LO "TOC4(Lo)" + STRING_REGISTERTI405HI "TI405(Hi)" + STRING_REGISTERTI405LO "TI4O5(Lo)" + STRING_REGISTERTCTL1 "TCTL1" + STRING_REGISTERTCTL2 "TCTL2" + STRING_REGISTERTMSK1 "TMSK1" + STRING_REGISTERTFLG1 "TFLG1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERTMSK2 "TMSK2" + STRING_REGISTERTFLG2 "TFLG2" + STRING_REGISTERPACTL "PACTL" + STRING_REGISTERPACNT "PACNT" + STRING_REGISTERSPCR "SPCR" + STRING_REGISTERSPSR "SPSR" + STRING_REGISTERSPDR "SPDR" + STRING_REGISTERBAUD "BAUD" + STRING_REGISTERSCCR1 "SCCR1" + STRING_REGISTERSCCR2 "SCCR2" + STRING_REGISTERSCSR "SCSR" + STRING_REGISTERSCDR "SCDR" + STRING_REGISTERADCTL "ADCTL" + STRING_REGISTERADR1 "ADR1" + STRING_REGISTERADR2 "ADR2" + STRING_REGISTERADR3 "ADR3" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/m68hc11/backup/resource.h b/m68hc11/backup/resource.h new file mode 100644 index 0000000..3fb9f4e --- /dev/null +++ b/m68hc11/backup/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by m68hc11.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/m68hc11/codeview.cpp b/m68hc11/codeview.cpp new file mode 100644 index 0000000..07b21ff --- /dev/null +++ b/m68hc11/codeview.cpp @@ -0,0 +1,270 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +CodeView::CodeView(void) +: WinHookProc(WinHookProc::HookBefore) +{ + mCreateHandler.setCallback(this,&CodeView::createHandler); + mSizeHandler.setCallback(this,&CodeView::sizeHandler); + mCloseHandler.setCallback(this,&CodeView::closeHandler); + mDestroyHandler.setCallback(this,&CodeView::destroyHandler); + mCommandHandler.setCallback(this,&CodeView::commandHandler); + mKeyUpHandler.setCallback(this,&CodeView::keyUpHandler); + mKeyDownHandler.setCallback(this,&CodeView::keyDownHandler); + mLeftButtonDownHandler.setCallback(this,&CodeView::leftButtonDownHandler); + mSetFocusHandler.setCallback(this,&CodeView::setFocusHandler); + MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler); + MDIWindow::insertHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler); + WinHookProc::insertHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler); + WinHookProc::insertHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler); + WinHookProc::insertHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler); +} + +CodeView::~CodeView() +{ + MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler); + MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler); + MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler); + MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler); + MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler); + MDIWindow::removeHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler); + WinHookProc::removeHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler); + WinHookProc::removeHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler); + WinHookProc::removeHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler); +} + +CallbackData::ReturnType CodeView::keyDownHandler(CallbackData &someCallbackData) +{ + KeyData keyData(someCallbackData); + + if(keyData.isEscapeKey())return (CallbackData::ReturnType)TRUE; + notifyCurrentLine(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType CodeView::keyUpHandler(CallbackData &someCallbackData) +{ + notifyCurrentLine(); + return FALSE; +} + +CallbackData::ReturnType CodeView::leftButtonDownHandler(CallbackData &someCallbackData) +{ + notifyCurrentLine(); + return FALSE; +} + +CallbackData::ReturnType CodeView::createHandler(CallbackData &someCallbackData) +{ + Rect controlRect; + + getControlRect(controlRect); + mRichEditControl.createControl(*this,controlRect,EditControlID,WS_VSCROLL|WS_HSCROLL); + hookWin(mRichEditControl); + mRichEditControl.wantReturn(TRUE); +// mRichEditControl.setCharFormat("MS Sans Serif",FontMagic); // "Courier New" +// mRichEditControl.setCharFormat("Courier",FontMagic); // "Courier New" +// mRichEditControl.setCharFormat("Courier New",FontMagic); // "Courier New" +// mRichEditControl.setCharFormat("Courier New",8); // "Courier New" + Font font("Courier New",12); + mRichEditControl.setFont(font); + mRichEditControl.setTextColor(RGBColor(0,0,0)); + mRichEditControl.setBkGndColor(RGBColor(255,255,255)); + mRichEditControl.setReadOnly(FALSE); + mRichEditControl.limitText(0); + mRichEditControl.setFocus(); + mClipboard=::new Clipboard(*this); + mClipboard.disposition(PointerDisposition::Delete); + setTitle(String()); + return FALSE; +} + +CallbackData::ReturnType CodeView::sizeHandler(CallbackData &someCallbackData) +{ + Rect controlRect; + + if(SIZE_RESTORED==someCallbackData.wParam())mRichEditControl.show(SW_SHOWNORMAL); + getControlRect(controlRect); + mRichEditControl.moveWindow(controlRect,TRUE); + return FALSE; +} + +CallbackData::ReturnType CodeView::closeHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +CallbackData::ReturnType CodeView::destroyHandler(CallbackData &someCallbackData) +{ + if(!mRichEditControl.isDirty())return FALSE; + if(IDOK!=::MessageBox(*this,(LPSTR)"Do you want to save the changes?",(LPSTR)"The file has been changed",MB_YESNO))return FALSE; + save(); + unhookWin(); + return FALSE; +} + +CallbackData::ReturnType CodeView::commandHandler(CallbackData &/*someCallbackData*/) +{ + return FALSE; +} + +CallbackData::ReturnType CodeView::setFocusHandler(CallbackData &someCallbackData) +{ + mRichEditControl.setFocus(); + notifyCurrentLine(); + return (CallbackData::ReturnType)FALSE; +} + +void CodeView::setTitle(const String &strTitle) +{ + String strCaption; + String strBase; + + if(strTitle.isNull())mTitle=String(STRING_UNTITLED); + else mTitle=strTitle; + windowText(strCaption); + strBase=strCaption.betweenString(0,'-'); + strBase.trimRight(); + strBase+=String(" - [")+mTitle+String("]"); + setCaption(strBase); +} + +BOOL CodeView::save(void) +{ + Block lineStrings; + + mRichEditControl.getLines(lineStrings); + mRichEditControl.isDirty(FALSE); + return saveCode(lineStrings,getTitle()); +} + +BOOL CodeView::save(const String &strPathFileName) +{ + Block lineStrings; + + setTitle(strPathFileName); + mRichEditControl.getLines(lineStrings); + mRichEditControl.isDirty(FALSE); + return saveCode(lineStrings,strPathFileName); +} + +void CodeView::find(void) +{ + mEditFind.perform(*this,mRichEditControl); +} + +void CodeView::cut(void) +{ + if(!mClipboard.isOkay()||!mRichEditControl.isValid())return; + String strText; + if(mRichEditControl.getSelectedText(strText))mClipboard->setClipboard(strText); + mRichEditControl.cutSelection(); +} + +void CodeView::copy(void) +{ + if(!mClipboard.isOkay()||!mRichEditControl.isValid())return; + String strText; + if(!mRichEditControl.getSelectedText(strText))return; + mClipboard->setClipboard(strText); +} + +void CodeView::paste(void) +{ + if(!mClipboard.isOkay())return; + mRichEditControl.pasteSpecial(CF_TEXT); +} + +BOOL CodeView::saveCode(Block &codeLines,const String &strPathFileName) +{ + FileIO outFile; + CursorControl cursorControl; + + if(!codeLines.size())return FALSE; + outFile.open(strPathFileName,FileIO::GenericWrite,FileIO::FileShareRead,FileIO::Open(FileIO::CreateAlways)); + if(!outFile.isOkay())return FALSE; + for(int lineIndex=0;lineIndex codeLines; + Font textFont("Helv",36); + + if(!printManager.choosePrinter((GUIWindow&)*(getFrame()),strPrinter))return; + printManager.openPrinter(strPrinter,(GUIWindow&)*(getFrame()),getTitle()); + printManager.printLines(codeLines,textFont,Point(10,10)); + printManager.endDoc(); +} + +void CodeView::notifyCurrentLine(void) +{ + CallbackData lineData(0,mRichEditControl.getCaretPosition()); + mLineHandler.callback(lineData); +} + +void CodeView::getControlRect(Rect &controlRect) +{ + clientRect(controlRect); + controlRect.left(BorderWidth); + controlRect.top(BorderWidth); + controlRect.right((controlRect.right()-BorderWidth)+1); + controlRect.bottom((controlRect.bottom()-BorderWidth)+1); +} + +// *** virtuals + +void CodeView::preRegister(WNDCLASS &wndClass) +{ + wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE; +} + +void CodeView::preCreate(MDICREATESTRUCT &createStruct) +{ +} diff --git a/m68hc11/codeview.hpp b/m68hc11/codeview.hpp new file mode 100644 index 0000000..0b5e2e9 --- /dev/null +++ b/m68hc11/codeview.hpp @@ -0,0 +1,87 @@ +#ifndef _M68HC11_CODEVIEW_HPP_ +#define _M68HC11_CODEVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_RICHEDIT_HPP_ +#include +#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif +#ifndef _COMMON_CLIPBOARD_HPP_ +#include +#endif +#ifndef _M68HC11_EDITFIND_HPP_ +#include +#endif + +class CodeView : public MDIWindow, private WinHookProc +{ +public: + CodeView(void); + virtual ~CodeView(); + BOOL save(void); + BOOL save(const String &strPathFileName); + void open(const String &pathFileName); + void find(void); + void cut(void); + void copy(void); + void paste(void); + void print(void); + BOOL isDirty(void)const; + void setLineHandler(PureCallback *pPureCallback); + const String &getTitle(void)const; + void setTitle(const String &strTitle); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {FontMagic=175,EditControlID=100,StatusBarID=101,BorderWidth=1}; // 165 + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + BOOL saveCode(Block &headerLines,const String &strPathFileName); + void getControlRect(Rect &controlRect); + void notifyCurrentLine(void); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mCloseHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyUpHandler; + Callback mLeftButtonDownHandler; + Callback mKeyDownHandler; + Callback mSetFocusHandler; + CallbackPointer mLineHandler; + RichEditControl mRichEditControl; + SmartPointer mClipboard; + EditFind mEditFind; + String mTitle; +}; + +inline +BOOL CodeView::isDirty(void)const +{ + return mRichEditControl.isDirty(); +} + +inline +void CodeView::setLineHandler(PureCallback *pPureCallback) +{ + mLineHandler=CallbackPointer(pPureCallback); +} + +inline +const String &CodeView::getTitle(void)const +{ + return mTitle; +} +#endif \ No newline at end of file diff --git a/m68hc11/commctrl.cpp b/m68hc11/commctrl.cpp new file mode 100644 index 0000000..5a8ec55 --- /dev/null +++ b/m68hc11/commctrl.cpp @@ -0,0 +1,209 @@ +#include +#include +#include + +void CommControl::portToString(CommControl::Port port,String &strPort) +{ + if(port==CommControl::PortCOM1)strPort=String(STRING_COM1); + else if(port==CommControl::PortCOM2)strPort=String(STRING_COM2); + else if(port==CommControl::PortCOM3)strPort=String(STRING_COM3); + else strPort=String(STRING_COM4); +} + +CommControl::Port CommControl::stringToPort(const String &strPort) +{ + if(strPort==String(STRING_COM1))return CommControl::PortCOM1; + else if(strPort==String(STRING_COM2))return CommControl::PortCOM2; + else if(strPort==String(STRING_COM3))return CommControl::PortCOM3; + else return CommControl::PortCOM4; +} + +bool CommControl::readFully(GlobalData &dataBytes) +{ + CommStatus commStatus; + DWORD bytesRead=0; + DWORD byteCount; + DWORD bytesToRead; + + if(!isOkay())return false; + clearError(commStatus); + byteCount=dataBytes.size(); + if(!byteCount&&!commStatus.bytesInReceiveQueue())return false; + if(!byteCount){byteCount=commStatus.bytesInReceiveQueue();dataBytes.size(byteCount);} + return readFully(&dataBytes[0],dataBytes.size()); +} + +bool CommControl::readFully(BYTE *pBuffer,DWORD byteCount) +{ + CommStatus commStatus; + DWORD bytesRead=0; + DWORD bytesToRead; + + if(!isOkay())return false; + clearError(commStatus); + if(!byteCount||!pBuffer)return false; + while(bytesReadbyteCount?byteCount-bytesRead:commStatus.bytesInReceiveQueue(); + read(&pBuffer[bytesRead],bytesToRead); + bytesRead+=bytesToRead; + } + if(bytesRead==byteCount)break; + ::Sleep(25); + clearError(commStatus); + } + showBytes(pBuffer,byteCount); + return true; +} + +bool CommControl::hasData(void) +{ + CommStatus commStatus; + clearError(commStatus); + return commStatus.bytesInReceiveQueue()?true:false; +} + +bool CommControl::clearReceiveQueue(void) +{ + GlobalData rcvBytes; + CommStatus commStatus; + + if(!isOkay())return false; + ::Sleep(1000); + clearError(commStatus); + if(!commStatus.bytesInReceiveQueue())return true; + ::OutputDebugString(String(String("Clearing ")+String().fromInt(commStatus.bytesInReceiveQueue())+String(" bytes from receive queue.\n")).str()); + rcvBytes.size(commStatus.bytesInReceiveQueue()); + read(&rcvBytes[0],rcvBytes.size()); + showBytes(rcvBytes); + return true; +} + +bool CommControl::waitEvent(DWORD &eventMask,DWORD timeout) +{ + BOOL result; + DWORD lastError; + + eventMask=0; + if(!isOkay())return false; + mIOEvent.resetEvent(); + result=::WaitCommEvent((HANDLE)mCommDevice,&eventMask,&mOverlapped.getOverlapped()); + if(result)return true; + lastError=::GetLastError(); + if(lastError!=ERROR_IO_PENDING)return false; + mIOEvent.waitEvent(timeout); + if(!mCommDevice.getOverlappedResult(mOverlapped,false))return false; + return true; +} + +DWORD CommControl::enumerateDevices(Block &deviceList) +{ + + deviceList.remove(); + if(isOkay())return 0; + for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++) + { + if(mCommDevice.open(mStrPorts[port])) + { + mCommDevice.close(); + deviceList.insert(&port); + } + } + return deviceList.size(); +} + +DWORD CommControl::enumerateDevices(Block &deviceList) +{ + deviceList.remove(); + if(isOkay())return 0; + for(Port port=PortCOM1;port<=PortCOM4;((int&)port)++) + { + if(mCommDevice.open(mStrPorts[port])) + { + mCommDevice.close(); + if(PortCOM1==port)deviceList.insert(&String("COM1")); + else if(PortCOM2==port)deviceList.insert(&String("COM2")); + else if(PortCOM3==port)deviceList.insert(&String("COM3")); + else if(PortCOM4==port)deviceList.insert(&String("COM4")); + } + } + return deviceList.size(); +} + +DWORD CommControl::read(void *pBuffer,int length,DWORD timeout) +{ + BOOL result; + DWORD lastError; + + if(!isOkay())return FALSE; + mIOEvent.resetEvent(); + result=mCommDevice.read((BYTE*)pBuffer,length,mOverlapped); + if(result)return TRUE; + lastError=::GetLastError(); + if(lastError!=ERROR_IO_PENDING)return FALSE; + mIOEvent.waitEvent(TimeOut); + if(!mCommDevice.getOverlappedResult(mOverlapped,FALSE))return FALSE; + return TRUE; +} + +bool CommControl::isOkay(void)const +{ + return mCommDevice.isOkay(); +} + +bool CommControl::clearError(CommStatus &commStatus)const +{ + DWORD errorMask(0); + bool returnCode(false); + + if(!isOkay())return returnCode; + returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,&commStatus.getCOMSTAT()); + showError(errorMask); + return returnCode; +} + +bool CommControl::clearError(void)const +{ + DWORD errorMask(0); + bool returnCode(false); + + if(!isOkay())return false; + returnCode=::ClearCommError((HANDLE)mCommDevice,&errorMask,0); + showError(errorMask); + return returnCode; +} + +void CommControl::showError(DWORD errorMask)const +{ + if(errorMask&CE_BREAK)::OutputDebugString("The hardware detected a break condition.\n"); + if(errorMask&CE_DNS)::OutputDebugString("Windows 95 and Windows 98: A parallel device is not selected.\n"); + if(errorMask&CE_FRAME)::OutputDebugString("The hardware detected a framing error.\n"); + if(errorMask&CE_IOE)::OutputDebugString("An I/O error occurred during communications with the device.\n"); + if(errorMask&CE_MODE)::OutputDebugString("The requested mode is not supported, or the hFile parameter is invalid. If this value is specified, it is the only valid error.\n"); + if(errorMask&CE_OOP)::OutputDebugString("Windows 95 and Windows 98: A parallel device signaled that it is out of paper.\n"); + if(errorMask&CE_OVERRUN)::OutputDebugString("A character-buffer overrun has occurred. The next character is lost.\n"); + if(errorMask&CE_PTO)::OutputDebugString("Windows 95 and Windows 98: A time-out occurred on a parallel device.\n"); + if(errorMask&CE_RXOVER)::OutputDebugString("An input buffer overflow has occurred. There is either no room in the input buffer, or a character was received after the end-of-file (EOF) character.\n"); + if(errorMask&CE_RXPARITY)::OutputDebugString("The hardware detected a parity error.\n"); + if(errorMask&CE_TXFULL)::OutputDebugString("The application tried to transmit a character, but the output buffer was full.\n"); +} + +void CommControl::showBytes(BYTE *pBuffer,DWORD byteCount) +{ + Block strLines; + + ::OutputDebugString("\n"); + FormatLines::hexasciiLines(strLines,pBuffer,byteCount); + for(int index=0;index rcvBytes) +{ + showBytes(&rcvBytes[0],rcvBytes.size()); +} diff --git a/m68hc11/echo.asm b/m68hc11/echo.asm new file mode 100644 index 0000000..10b7a56 --- /dev/null +++ b/m68hc11/echo.asm @@ -0,0 +1,33 @@ +; File - Echo.asm - echo the character received back to the host. Increment +; it by one to prove it is not a local terminal echo. +;$$$$$$$$$$$$$ - file set up for e2 series 68hc11 with eeprom at $f800 +; +; Constants +TDRE equ 0080h +RDRF equ 0020h +BAUD equ 002bh +SCCR1 equ 002ch +SCCR2 equ 002dh +SCSR equ 002eh +SCDR equ 002fh + lds 00FFh ; 8E,00,0F + ldx 1000h ; CE,10,00 + clr ix,SCCR1 ; 6F,2C + ldd 330Ch ; CC,33,0C + staa ix,BAUD ; A7,2B + stab ix,SCCR2 ; E7,2D + + +dssdfsd +loop: + brclr ix,SCSR,20h,loop ; 1F,2E,20,FC wait for RDRF + ldaa ix,SCDR ; A6,2F read next character + inca ; 4C increment the character +loop2: + brclr ix,SCSR,80h,loop2 ; 1F,2E,80,FC + staa ix,SCDR ; A7,2F echo back to host + jmp loop ; 7E,00,0F continue + + + + diff --git a/m68hc11/echo.bin b/m68hc11/echo.bin new file mode 100644 index 0000000..30d07b5 Binary files /dev/null and b/m68hc11/echo.bin differ diff --git a/m68hc11/echo.s19 b/m68hc11/echo.s19 new file mode 100644 index 0000000..c14a206 --- /dev/null +++ b/m68hc11/echo.s19 @@ -0,0 +1,17 @@ +S12300008E00FFCE10006F2CCC330CA72BE72D1F2E20FCA62F4C1F2E80FCA72F7E000F012E +S123002001010101010101010101010101010101010101010101010101010101010101019C +S123004001010101010101010101010101010101010101010101010101010101010101017C +S123006001010101010101010101010101010101010101010101010101010101010101015C +S123008001010101010101010101010101010101010101010101010101010101010101013C +S12300A001010101010101010101010101010101010101010101010101010101010101011C +S12300C00101010101010101010101010101010101010101010101010101010101010101FC +S12300E00101010101010101010101010101010101010101010101010101010101010101DC +S12301000101010101010101010101010101010101010101010101010101010101010101BC +S123012001010101010101010101010101010101010101010101010101010101010101019C +S123014001010101010101010101010101010101010101010101010101010101010101017C +S123016001010101010101010101010101010101010101010101010101010101010101015C +S123018001010101010101010101010101010101010101010101010101010101010101013C +S12301A001010101010101010101010101010101010101010101010101010101010101011C +S12301C00101010101010101010101010101010101010101010101010101010101010101FC +S12301E00101010101010101010101010101010101010101010101010101010101010101DC +S9030000FC diff --git a/m68hc11/fmtlines.cpp b/m68hc11/fmtlines.cpp new file mode 100644 index 0000000..f8e396d --- /dev/null +++ b/m68hc11/fmtlines.cpp @@ -0,0 +1,120 @@ +#include +#include + +DWORD FormatLines::hexasciiLines(Block &lineStrings,GlobalData &globalData) +{ + return hexasciiLines(lineStrings,&globalData[0],globalData.size()); +} + +DWORD FormatLines::hexasciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount) +{ + Block asciiLines; + Block hexLines; + String tmpString; + DWORD lineCount; + + formatLines(asciiLines,pBuffer,byteCount,HexCharsPerLine,ASCIILine); + formatLines(hexLines,pBuffer,byteCount,HexCharsPerLine,HexLine); + lineCount=asciiLines.size(); + for(DWORD itemIndex=0;itemIndex &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD charsPerLine,LineType lineType) +{ + WORD charCount; + String charString; + String charLine; + BYTE charByte; + BYTE prevByte; + + if(!byteCount||!pBuffer)return byteCount; + charCount=0; + for(DWORD itemIndex=0;itemIndex &lineStrings,GlobalData &globalData,WORD charsPerLine,LineType lineType) +{ + DWORD byteCount(globalData.size()); + WORD charCount; + String charString; + String charLine; + BYTE charByte; + BYTE prevByte; + + if(!byteCount)return byteCount; + charCount=0; + for(DWORD itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class FormatLines +{ +public: + enum{HexCharsPerLine=0x10,ASCIICharsPerLine=0x20}; + FormatLines(void); + ~FormatLines(); + static DWORD hexLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD hexCharsPerLine=HexCharsPerLine); + static DWORD hexLines(Block &lineStrings,GlobalData &globalData,WORD hexCharsPerLine=HexCharsPerLine); + static DWORD asciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD asciiCharsPerLine=ASCIICharsPerLine); + static DWORD asciiLines(Block &lineStrings,GlobalData &globalData,WORD asciiCharsPerLine=ASCIICharsPerLine); + static DWORD hexasciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount); + static DWORD hexasciiLines(Block &lineStrings,GlobalData &globalData); +private: + enum LineType{HexLine,ASCIILine}; + static DWORD formatLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD charsPerLine,LineType lineType); +}; + +inline +FormatLines::FormatLines(void) +{ +} + +inline +FormatLines::~FormatLines() +{ +} + +inline +DWORD FormatLines::hexLines(Block &lineStrings,GlobalData &globalData,WORD hexCharsPerLine) +{ + return formatLines(lineStrings,&globalData[0],globalData.size(),hexCharsPerLine,HexLine); +} + +inline +DWORD FormatLines::hexLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD hexCharsPerLine) +{ + return formatLines(lineStrings,pBuffer,byteCount,hexCharsPerLine,HexLine); +} + +inline +DWORD FormatLines::asciiLines(Block &lineStrings,BYTE *pBuffer,DWORD byteCount,WORD asciiCharsPerLine) +{ + return formatLines(lineStrings,pBuffer,byteCount,asciiCharsPerLine,ASCIILine); +} +#endif diff --git a/m68hc11/m68hc11.001 b/m68hc11/m68hc11.001 new file mode 100644 index 0000000..73389e9 --- /dev/null +++ b/m68hc11/m68hc11.001 @@ -0,0 +1,284 @@ +# Microsoft Developer Studio Project File - Name="m68hc11" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=m68hc11 - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "m68hc11.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "m68hc11.mak" CFG="m68hc11 - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "m68hc11 - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "m68hc11 - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "m68hc11 - Win32 Release" +# Name "m68hc11 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=..\Exe\asm6811.lib +# End Source File +# Begin Source File + +SOURCE=.\codeview.cpp +# End Source File +# Begin Source File + +SOURCE=.\dcb.cpp +# End Source File +# Begin Source File + +SOURCE=.\Editfnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Find.cpp +# End Source File +# Begin Source File + +SOURCE=.\m68hc11.rc +# End Source File +# Begin Source File + +SOURCE=.\m68reg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\mcudlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\mcuthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\mcuview.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msdialog.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msfileio.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msthread.lib +# End Source File +# Begin Source File + +SOURCE=.\Odlstled.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\printman.lib +# End Source File +# Begin Source File + +SOURCE=.\Serdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Splash.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\statbar.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\toolbar.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Codeview.hpp +# End Source File +# Begin Source File + +SOURCE=.\commctrl.hpp +# End Source File +# Begin Source File + +SOURCE=.\commstat.hpp +# End Source File +# Begin Source File + +SOURCE=.\dcb.hpp +# End Source File +# Begin Source File + +SOURCE=.\Editfnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Find.hpp +# End Source File +# Begin Source File + +SOURCE=.\m68hc11.h +# End Source File +# Begin Source File + +SOURCE=.\m68hc11.hpp +# End Source File +# Begin Source File + +SOURCE=.\m68reg.hpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.hpp +# End Source File +# Begin Source File + +SOURCE=.\mcudlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\mcuthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\mcuview.hpp +# End Source File +# Begin Source File + +SOURCE=.\Odlstled.hpp +# End Source File +# Begin Source File + +SOURCE=.\Serdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\settings.hpp +# End Source File +# Begin Source File + +SOURCE=.\Splash.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\BLANK.BMP +# End Source File +# Begin Source File + +SOURCE=.\DASH.BMP +# End Source File +# Begin Source File + +SOURCE=.\DOC.ICO +# End Source File +# Begin Source File + +SOURCE=.\MOT.ICO +# End Source File +# Begin Source File + +SOURCE=.\ONE.BMP +# End Source File +# Begin Source File + +SOURCE=.\SPLASH.bmp +# End Source File +# Begin Source File + +SOURCE=.\ZERO.BMP +# End Source File +# End Group +# End Target +# End Project diff --git a/m68hc11/m68hc11.aps b/m68hc11/m68hc11.aps new file mode 100644 index 0000000..dbf6dfc Binary files /dev/null and b/m68hc11/m68hc11.aps differ diff --git a/m68hc11/m68hc11.dsp b/m68hc11/m68hc11.dsp new file mode 100644 index 0000000..322b1a0 --- /dev/null +++ b/m68hc11/m68hc11.dsp @@ -0,0 +1,271 @@ +# Microsoft Developer Studio Project File - Name="m68hc11" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=m68hc11 - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "m68hc11.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "m68hc11.mak" CFG="m68hc11 - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "m68hc11 - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "m68hc11 - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "m68hc11 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "m68hc11 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MTd /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "m68hc11 - Win32 Release" +# Name "m68hc11 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\CMPDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\codeview.cpp +# End Source File +# Begin Source File + +SOURCE=.\commctrl.cpp +# End Source File +# Begin Source File + +SOURCE=.\dcb.cpp +# End Source File +# Begin Source File + +SOURCE=.\Editfnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Find.cpp +# End Source File +# Begin Source File + +SOURCE=.\fmtlines.cpp +# End Source File +# Begin Source File + +SOURCE=.\m68hc11.rc +# End Source File +# Begin Source File + +SOURCE=.\m68reg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\mcudlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\mcuthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\mcuview.cpp +# End Source File +# Begin Source File + +SOURCE=.\Odlstled.cpp +# End Source File +# Begin Source File + +SOURCE=.\OPENDIR.CPP +# End Source File +# Begin Source File + +SOURCE=.\Serdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Splash.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Codeview.hpp +# End Source File +# Begin Source File + +SOURCE=.\commctrl.hpp +# End Source File +# Begin Source File + +SOURCE=.\commstat.hpp +# End Source File +# Begin Source File + +SOURCE=.\dcb.hpp +# End Source File +# Begin Source File + +SOURCE=.\Editfnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Find.hpp +# End Source File +# Begin Source File + +SOURCE=.\m68hc11.h +# End Source File +# Begin Source File + +SOURCE=.\m68hc11.hpp +# End Source File +# Begin Source File + +SOURCE=.\m68reg.hpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.hpp +# End Source File +# Begin Source File + +SOURCE=.\mcudlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\mcuthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\mcuview.hpp +# End Source File +# Begin Source File + +SOURCE=.\Odlstled.hpp +# End Source File +# Begin Source File + +SOURCE=.\Serdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\settings.hpp +# End Source File +# Begin Source File + +SOURCE=.\Splash.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\BLANK.BMP +# End Source File +# Begin Source File + +SOURCE=.\DASH.BMP +# End Source File +# Begin Source File + +SOURCE=.\DOC.ICO +# End Source File +# Begin Source File + +SOURCE=.\MOT.ICO +# End Source File +# Begin Source File + +SOURCE=.\ONE.BMP +# End Source File +# Begin Source File + +SOURCE=.\SPLASH.bmp +# End Source File +# Begin Source File + +SOURCE=.\ZERO.BMP +# End Source File +# End Group +# End Target +# End Project diff --git a/m68hc11/m68hc11.dsw b/m68hc11/m68hc11.dsw new file mode 100644 index 0000000..804c7f4 --- /dev/null +++ b/m68hc11/m68hc11.dsw @@ -0,0 +1,179 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\BSPTREE\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dialog"=..\DIALOG\Dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "fileio"=..\FILEIO\fileio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "hookproc"=..\hookproc\hookproc.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "libasm68"=..\AS68HC11\libasm68.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "m68hc11"=.\m68hc11.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name dialog + End Project Dependency + Begin Project Dependency + Project_Dep_Name fileio + End Project Dependency + Begin Project Dependency + Project_Dep_Name libasm68 + End Project Dependency + Begin Project Dependency + Project_Dep_Name printman + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name toolbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name hookproc + End Project Dependency +}}} + +############################################################################### + +Project: "printman"=..\printman\Printman.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\THREAD\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "toolbar"=..\TOOLBAR\Toolbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/m68hc11/m68hc11.mdp b/m68hc11/m68hc11.mdp new file mode 100644 index 0000000..e198916 Binary files /dev/null and b/m68hc11/m68hc11.mdp differ diff --git a/m68hc11/m68hc11.ncb b/m68hc11/m68hc11.ncb new file mode 100644 index 0000000..f2f9c4c Binary files /dev/null and b/m68hc11/m68hc11.ncb differ diff --git a/m68hc11/m68hc11.opt b/m68hc11/m68hc11.opt new file mode 100644 index 0000000..332a3b5 Binary files /dev/null and b/m68hc11/m68hc11.opt differ diff --git a/m68hc11/m68hc11.rc b/m68hc11/m68hc11.rc new file mode 100644 index 0000000..e6856dd --- /dev/null +++ b/m68hc11/m68hc11.rc @@ -0,0 +1,468 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +#include "m68hc11\m68hc11.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP ICON DISCARDABLE "MOT.ICO" +MOT ICON DISCARDABLE "MOT.ICO" +DOC ICON DISCARDABLE "DOC.ICO" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +BLANK BITMAP MOVEABLE PURE "BLANK.BMP" +ONE BITMAP MOVEABLE PURE "ONE.BMP" +ZERO BITMAP MOVEABLE PURE "ZERO.BMP" +DASH BITMAP MOVEABLE PURE "DASH.BMP" +SPLASH BITMAP MOVEABLE PURE "SPLASH.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Settings" + BEGIN + MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL + MENUITEM "&Compiler...", SBCMENU_COMPILER + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + +CODEMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN + MENUITEM "&Close", SBCMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE + MENUITEM "Save &As...", SBCMENU_FILESAVEAS + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT + MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY + MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE + MENUITEM SEPARATOR + MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND + END + POPUP "&Settings" + BEGIN + MENUITEM "Se&rial...", SBCMENU_SETTINGSSERIAL + MENUITEM "&Compiler...", SBCMENU_COMPILER + END + POPUP "&Code" + BEGIN + MENUITEM "&Compile\tCtrl+C", SBCMENU_CODECOMPILE + MENUITEM "Compile and Load\tCtrl+P", SBCMENU_CODECOMPILEANDLOAD + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + +MCUMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&New\tCtrl+N", SBCMENU_FILENEW, GRAYED + MENUITEM "&Open...\tCtrl+O", SBCMENU_FILEOPEN, GRAYED + MENUITEM "&Close", SBCMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save...\tCtrl+S", SBCMENU_FILESAVE, GRAYED + MENUITEM "Save &As...", SBCMENU_FILESAVEAS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Print\tCtrl+P", SBCMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", SBCMENU_FILEQUIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X", SBCMENU_EDITCUT + MENUITEM "&Copy\tCtrl+C", SBCMENU_EDITCOPY + MENUITEM "&Paste\tCtrl+V", SBCMENU_EDITPASTE + MENUITEM SEPARATOR + MENUITEM "&Find...\tAlt+F3", SBCMENU_EDITFIND + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SBCMENU_HELPCONTENTS + MENUITEM "&Search", SBCMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SBCMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About ...", SBCMENU_HELPABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +SERIAL DIALOG DISCARDABLE 6, 15, 207, 111 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Serial Setup" +FONT 6, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,153,3,50,14 + PUSHBUTTON "Cancel",IDCANCEL,153,18,50,14 + PUSHBUTTON "Test",SERIAL_TEST,153,32,50,14 + COMBOBOX SERIAL_BAUD,30,24,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + COMBOBOX SERIAL_DATA,30,37,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + COMBOBOX SERIAL_PARITY,30,63,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + COMBOBOX SERIAL_PORT,30,11,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "Port:",-1,3,14,18,8 + LTEXT "Baud:",-1,3,27,21,8 + LTEXT "Data:",-1,3,40,20,8 + LTEXT "Stop:",-1,4,53,19,8 + LTEXT "Parity:",-1,3,65,19,8 + COMBOBOX SERIAL_STOP,30,50,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "Apply",SERIAL_APPLY,153,46,50,14 +END + +MCUDLG DIALOG DISCARDABLE 6, 5, 358, 174 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_CHILD | WS_VISIBLE +FONT 6, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "Start",IDOK,254,5,50,14 + PUSHBUTTON "Quit",IDCANCEL,304,5,50,14 + LISTBOX MCUDLG_REGISTERS,15,38,144,129,LBS_SORT | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_VSCROLL + EDITTEXT MCUDLG_A,217,37,38,12 + EDITTEXT MCUDLG_B,256,37,38,12 + EDITTEXT MCUDLG_X,217,50,38,12 + EDITTEXT MCUDLG_Y,256,50,38,12 + EDITTEXT MCUDLG_SP,217,63,38,12 + EDITTEXT MCUDLG_PC,256,63,38,12 + EDITTEXT MCUDLG_CCR,217,76,38,12 + LISTBOX MCUDLG_MESSAGES,168,107,177,60,LBS_SORT | WS_VSCROLL + CTEXT "MCU Registers",-1,44,26,60,8 + CTEXT "Processor",-1,203,26,49,8 + LTEXT "Accumulator A",-1,165,40,51,8 + LTEXT "Accumulator B",-1,297,39,49,8 + LTEXT "Index Register X",-1,163,52,52,8 + LTEXT "Index Register Y",-1,296,51,55,8 + LTEXT "SP",-1,201,65,13,8 + LTEXT "PC",-1,297,64,10,8 + LTEXT "CCR",-1,198,78,16,8 + GROUPBOX "",-1,2,19,349,154 + LTEXT "Debug Messages",-1,225,95,60,8 +END + +CMPDLG DIALOG DISCARDABLE 6, 5, 263, 153 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Compiler Settings" +FONT 6, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "Ok",CMPDLG_OK,194,8,50,14 + PUSHBUTTON "Cancel",CMPDLG_CANCEL,194,25,50,14 + PUSHBUTTON "Browse",CMPDLG_BROWSE,194,42,50,14 + LTEXT "Include Path",IDC_STATIC,16,15,90,8 + LISTBOX CMPDLG_LIST,7,30,180,106,LBS_SORT | LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""m68hc11\\m68hc11.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +M68ACCELERATORS ACCELERATORS DISCARDABLE +BEGIN + VK_F5, IDM_CASCADE, VIRTKEY, NOINVERT + VK_F4, IDM_TILE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "CMPDLG", DIALOG + BEGIN + RIGHTMARGIN, 251 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_M68KEYNAME "Software\\Diversified\\M68HC11" + STRING_HISTORYKEYNAME "Software\\Diversified\\M68HC11\\History" + STRING_SETTINGSKEYNAME "Software\\Diversified\\M68HC11\\Settings" + STRING_SERIALKEYNAME "Software\\Diversified\\M68HC11\\Serial" + STRING_HISTORYKEYSHORTNAME "History" + STRING_SETTINGSEMAIL "EMAIL" + STRING_SERIALPORT "Port" + STRING_SERIALBAUD "Baud" + STRING_PATHDIRKEYNAME "Software\\Diversified\\M68HC11\\IncludePath" + STRING_PATHDIRKEYSHORTNAME "IncludePath" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_SERIALDATA "Data" + STRING_SERIALPARITY "Parity" + STRING_SERIALSTOP "Stop" + STRING_COM1 "COM1" + STRING_COM2 "COM2" + STRING_COM3 "COM3" + STRING_COM4 "COM4" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_CODEVIEWCLASSNAME "CodeView" + STRING_MCUVIEWCLASSNAME "MCUView" + STRING_UNTITLED "Untitled" + STRING_HELPFILENAME "m68hc11.hlp" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERADR4 "ADR4" + STRING_REGISTERBPROT "BPROT" + STRING_REGISTEREPROG "EPROG" + STRING_REGISTERRESERVED3 "RESERVED" + STRING_REGISTERRESERVED4 "RESERVED" + STRING_REGISTEROPTION "OPTION" + STRING_REGISTERCOPRST "COPRST" + STRING_REGISTERPPROG "PPROG" + STRING_REGISTERHPRIO "HPRIO" + STRING_REGISTERINIT "INIT" + STRING_REGISTERTEST1 "TEST1" + STRING_REGISTERCONFIG "CONFIG" + STRING_ERRORFILEOPEN "Error opening '" + STRING_ERRORPORTOPEN "Error opening communications port." + STRING_ERRORPORTSETTINGS "Error initializing port settings." + STRING_ERRORTIMEOUT "Timeout waiting for device." +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_ERRORREADERROR "Error reading from device." + STRING_ERRORTALKBACKFAILURE "Error receiving response from device" + STRING_ERRORTALKBACKDATA "Error validating code load" + STRING_EVENTSINGLEBYTE "Received single-byte event." + STRING_EVENTQUADBYTE "Received quad-byte event." + STRING_EVENTVARBYTE "Received variable-byte event." + STRING_EVENTREGDATASTART "Receiving register data..." + STRING_EVENTREGDATACOMPLETE "Register receive complete." + STRING_EVENTCODECOMPLETE "Received code completion event." + STRING_EVENTDOUBLEBYTE "Received double-byte event." + STRING_EVENTSTRING "Received string event." +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERPORTA "PORTA" + STRING_REGISTERRESERVED1 "RESERVED" + STRING_REGISTERPIOC "PIOC" + STRING_REGISTERPORTC "PORTC" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERPORTB "PORTB" + STRING_REGISTERPORTCL "PORTCL" + STRING_REGISTERRESERVED2 "RESERVED" + STRING_REGISTERDDRC "DDRC" + STRING_REGISTERPORTD "PORTD" + STRING_REGISTERDDRD "DDRD" + STRING_REGISTERPORTE "PORTE" + STRING_REGISTERCFORC "CFORC" + STRING_REGISTEROC1M "OC1M" + STRING_REGISTEROC1D "OC1D" + STRING_REGISTERTCNTH1 "TCNT(Hi)" + STRING_REGISTERTCNTLO "TCNT(Lo)" + STRING_REGISTERTIC1HI "TIC1(Hi)" + STRING_REGISTERTIC1LO "TIC1(Lo)" + STRING_REGISTERTIC2HI "TIC2(Hi)" + STRING_REGISTERTIC2LO "TIC2(Lo)" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERTIC3HI "TIC3(Hi)" + STRING_REGISTERTIC3LO "TIC3(Lo)" + STRING_REGISTERTOC1HI "TOC1(Hi)" + STRING_REGISTERTOC1LO "TOC1(Lo)" + STRING_REGISTERTOC2HI "TOC2(Hi)" + STRING_REGISTERTOC2LO "TOC2(Lo)" + STRING_REGISTERTOC3HI "TOC3(Hi)" + STRING_REGISTERTOC3LO "TOC3(Lo)" + STRING_REGISTERTOC4HI "TOC4(Hi)" + STRING_REGISTERTOC4LO "TOC4(Lo)" + STRING_REGISTERTI405HI "TI405(Hi)" + STRING_REGISTERTI405LO "TI4O5(Lo)" + STRING_REGISTERTCTL1 "TCTL1" + STRING_REGISTERTCTL2 "TCTL2" + STRING_REGISTERTMSK1 "TMSK1" + STRING_REGISTERTFLG1 "TFLG1" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REGISTERTMSK2 "TMSK2" + STRING_REGISTERTFLG2 "TFLG2" + STRING_REGISTERPACTL "PACTL" + STRING_REGISTERPACNT "PACNT" + STRING_REGISTERSPCR "SPCR" + STRING_REGISTERSPSR "SPSR" + STRING_REGISTERSPDR "SPDR" + STRING_REGISTERBAUD "BAUD" + STRING_REGISTERSCCR1 "SCCR1" + STRING_REGISTERSCCR2 "SCCR2" + STRING_REGISTERSCSR "SCSR" + STRING_REGISTERSCDR "SCDR" + STRING_REGISTERADCTL "ADCTL" + STRING_REGISTERADR1 "ADR1" + STRING_REGISTERADR2 "ADR2" + STRING_REGISTERADR3 "ADR3" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/m68hc11/resource.h b/m68hc11/resource.h new file mode 100644 index 0000000..6312a16 --- /dev/null +++ b/m68hc11/resource.h @@ -0,0 +1,18 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by m68hc11.rc +// +#define IDC_LIST1 1004 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1006 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mcast/mcastrcv.cpp b/mcast/mcastrcv.cpp new file mode 100644 index 0000000..462aafe --- /dev/null +++ b/mcast/mcastrcv.cpp @@ -0,0 +1,185 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +void outDebug(const String &string); +void mcastsnd(int destPort,String destIP,Array &message,int frequency,int ttl=1); +void mcastrcv(int destPort,String rcvIPAddress,int ttl=1); + +void main(int argc,char **argv) +{ + String strOp; + String strIPAddress; + String strPort; + String strData; + String strFrequency="1000"; + Array message; + + outDebug("MCAST 1.00 - Sean Kessler."); + if(1==argc) + { + outDebug("USAGE: mcast send|receive address:port {frequency (ms)} {stringdata}"); + outDebug("(ie) mcast send 234.5.6.7:4567 1000 hello"); + return; + } + strOp=argv[1]; + strOp.lower(); + strIPAddress=String(argv[2]).betweenString(0,':'); + strPort=String(argv[2]).betweenString(':',0); + if(5==argc)strData=argv[4]; + else strData="hello world"; + if(argc>=4)strFrequency=argv[3]; + message.size(strData.length()+1); + ::memset(&message[0],0,message.size()); + ::strcpy((char*)&message[0],strData.str()); + outDebug(String("mode=")+strOp); + outDebug(String("address=")+strIPAddress); + outDebug(String("port=")+strPort); + if(strOp=="send")mcastsnd(strPort.toInt(),strIPAddress,message,strFrequency.toInt()); + else if(strOp=="receive")mcastrcv(strPort.toInt(),strIPAddress); + else outDebug("USAGE: mcast send|receive address:port"); +} + +void mcastrcv(int destPort,String rcvIPAddress,int ttl) +{ + WSASystem wsaSystem; + SocketAddress socketAddressLocal; + SocketAddress socketAddressTo; + SocketAddress socketAddressFrom; + IPMReq ipMCast; + Socket socket; + + outDebug("Socket create."); + if(!socket.create(Socket::DomainInternet,Socket::SocketDGram,Socket::ProtocolNone)) + { + outDebug("Socket creation failed."); + return; + } + if(!socket.reuseAddress(true)) + { + outDebug("Error setting option REUSEADDR."); + socket.destroy(); + return; + } + outDebug("Socket created."); + socketAddressLocal.family(AF_INET); + socketAddressLocal.internetAddress(InternetAddress()); + socketAddressLocal.port(htons(destPort)); + outDebug(String("Socket bind to ")+socketAddressLocal.toString()); + if(!socket.bind(socketAddressLocal)) + { + outDebug("Bind failed."); + socket.destroy(); + return; + } + outDebug("Socket is bound."); + if(!socket.setMulticastTTL(ttl)) + { + outDebug("[Error setting option SET_MULTICAST_TTL.]"); + socket.destroy(); + return; + } + ipMCast.multicastAddress(InternetAddress(rcvIPAddress)); + ipMCast.localAddress(InternetAddress()); + outDebug(String("Add membership ")+ipMCast.toString()); + if(!socket.addMembership(ipMCast)) + { + int error=WSAGetLastError(); + outDebug(String("[Error setting option ADDMEMBERSHIP.] Code=")+String().fromInt(error)); + socket.destroy(); + return; + } + outDebug(String("Joined ")+InternetAddress(rcvIPAddress).toString()); + if(!socket.setMulticastLoopback(false)) + { + int error=WSAGetLastError(); + outDebug(String("[Error setting option MULTICASTLOOPBACK.] Code=")+String().fromInt(error)); + } + outDebug(String("Loopback is disabled.")); + outDebug("Listening for messages..."); + while(true) + { + char buffer[1024]; + INETSocketAddress from; + if(!socket.receiveFrom(buffer,sizeof(buffer),0,from)) + { + outDebug("Receive Failed."); + socket.destroy(); + return; + } + else + { + SystemTime sysTime; + outDebug(String("[")+sysTime.toString()+String("]")+String("Received from [")+from.toString()+String("] \"")+String(buffer)+String("\"")); + } + } + socket.destroy(); +} + +void mcastsnd(int destPort,String destIPAddress,Array &message,int frequency,int ttl) +{ + WSASystem wsaSystem; + SocketAddress socketAddressLocal; + Socket socket; + + if(!socket.create(Socket::DomainInternet,Socket::SocketDGram,Socket::ProtocolNone)) + { + outDebug("[Socket creation failed]"); + return; + } + if(!socket.reuseAddress(true)) + { + outDebug("[Error setting option REUSEADDR.]"); + socket.destroy(); + return; + } + outDebug("Socket created."); + socketAddressLocal.family(AF_INET); + socketAddressLocal.internetAddress(InternetAddress()); + socketAddressLocal.port(htons(0)); + if(!socket.bind(socketAddressLocal)) + { + outDebug("Bind failed."); + socket.destroy(); + return; + } + outDebug("Socket is bound."); + if(!socket.setMulticastTTL(ttl)) + { + outDebug("[Error setting option SET_MULTICAST_TTL.]"); + socket.destroy(); + return; + } + INETSocketAddress inetSocketAddress; + inetSocketAddress.family(AF_INET); + inetSocketAddress.port(destPort); + inetSocketAddress.internetAddress(InternetAddress(destIPAddress)); + while(true) + { + if(!socket.sendTo((void*)&message[0],message.size(),inetSocketAddress)) + { + outDebug("Send Failed."); + socket.destroy(); + return; + } + else + { + SystemTime sysTime; + outDebug(sysTime.toString()+"Data sent."); + } + ::Sleep(frequency); + } + socket.destroy(); +} + +void outDebug(const String &string) +{ + String outString(string+String("\n")); + cout << ((String&)string).str() << endl; + ::OutputDebugString(outString.str()); +} diff --git a/mdiwin/944.ICO b/mdiwin/944.ICO new file mode 100644 index 0000000..8531c30 Binary files /dev/null and b/mdiwin/944.ICO differ diff --git a/mdiwin/AVERAGE.CPP b/mdiwin/AVERAGE.CPP new file mode 100644 index 0000000..1bf7020 --- /dev/null +++ b/mdiwin/AVERAGE.CPP @@ -0,0 +1,157 @@ +#include +#include +#include +#include + +Average::Average(char *imageName,HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height,WORD *isThreaded) +: mhPalette(hPalette), mhpImage(hpImage), mWidth(width), mHeight(height), + mIsThreaded(isThreaded), mDivisor(0) +{ + ::strcpy(mImageName,imageName); +} + +Average::~Average() +{ +} + +void Average::processImage(Block &averagingMatrix,Criterion criterion) +{ + int size; + + size=(int)averagingMatrix.size(); + if(size!=MatrixDimension*3)return; + mAvMatrix[0][0]=averagingMatrix[0]; + mAvMatrix[0][1]=averagingMatrix[1]; + mAvMatrix[0][2]=averagingMatrix[2]; + mAvMatrix[1][0]=averagingMatrix[3]; + mAvMatrix[1][1]=averagingMatrix[4]; + mAvMatrix[1][2]=averagingMatrix[5]; + mAvMatrix[2][0]=averagingMatrix[6]; + mAvMatrix[2][1]=averagingMatrix[7]; + mAvMatrix[2][2]=averagingMatrix[8]; + for(int i=0;isetText((LPSTR)statusMsg); + } + if(::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + if(!(*mIsThreaded))break; + for(currImageCol=1;currImageColsetText(""); +} + +BYTE NEAR Average::averageImageIndex(LONG imageIndex) +{ + BYTE paletteIndex; + int tempRed,tempGreen,tempBlue; + int col,row; + LONG currentIndex; + + tempRed=tempGreen=tempBlue=0; + for(col=-1;colsetText((LPSTR)statusMsg); + } + if(::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + if(!(*mIsThreaded))break; + for(currImageCol=1;currImageColsetText(""); +} + +BYTE NEAR Average::averageImageIndexRangeClipping(LONG imageIndex) +{ + BYTE paletteIndex; + int tempRed,tempGreen,tempBlue; + int col,row; + LONG currentIndex; + + tempRed=tempGreen=tempBlue=0; + for(col=-1;col255)tempRed=255; + if(tempGreen<0)tempGreen=0; + else if(tempGreen>255)tempGreen=255; + if(tempBlue<0)tempBlue=0; + else if(tempBlue>255)tempBlue=255; + return ::GetNearestPaletteIndex(mhPalette,RGB((BYTE)(tempRed/mDivisor),(BYTE)(tempGreen/mDivisor),(BYTE)(tempBlue/mDivisor))); +} diff --git a/mdiwin/AVERAGE.HPP b/mdiwin/AVERAGE.HPP new file mode 100644 index 0000000..f110850 --- /dev/null +++ b/mdiwin/AVERAGE.HPP @@ -0,0 +1,44 @@ +#ifndef _MDIWIN_AVERAGE_HPP_ +#define _MDIWIN_AVERAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#include +#include +#include + +class Average +{ +public: + typedef enum Criterion{RangeClipping,Normalization}; + Average(char *imageName,HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height,WORD *isThreaded); + ~Average(); + void processImage(Block &averagingMatrix,Criterion criterion); +private: + enum {MaxColors=256}; + enum {MatrixDimension=3}; + enum {MaxImageName=100}; + void getPaletteEntries(void); + void performAverage(void); + BYTE NEAR averageImageIndex(LONG imageIndex); + void performAverageRangeClipping(void); + BYTE NEAR averageImageIndexRangeClipping(LONG imageIndex); + + WORD *mIsThreaded; + int mDivisor; + char mImageName[MaxImageName+1]; + WORD mAvMatrix[MatrixDimension][MatrixDimension]; + HPALETTE mhPalette; + PALETTEENTRY mPaletteData[MaxColors]; + UHUGE *mhpImage; + WORD mWidth; + WORD mHeight; +}; + +inline +void Average::getPaletteEntries(void) +{ + ::GetPaletteEntries(mhPalette,0,MaxColors,(PALETTEENTRY FAR*)&mPaletteData); +} +#endif + diff --git a/mdiwin/BCCW16.CFG b/mdiwin/BCCW16.CFG new file mode 100644 index 0000000..d470662 --- /dev/null +++ b/mdiwin/BCCW16.CFG @@ -0,0 +1,37 @@ +-R +-v +-vi +-H +-H=mdiwin.csm +-H- +-4 +-Jgx +-Ot +-w-cln +-wucp +-wdef +-wnod +-wamb +-wuse +-wstv +-wpin +-O-c +-Z- +-O- +-O-l +-O-b +-O-W +-O-m +-O-p +-O-i +-O-v +-d- +-i50 +-R- +-Vb +-x- +-xd- +-RT- +-wsig +-ml +-WS diff --git a/mdiwin/BCCW32.CFG b/mdiwin/BCCW32.CFG new file mode 100644 index 0000000..0f8a6e6 --- /dev/null +++ b/mdiwin/BCCW32.CFG @@ -0,0 +1,35 @@ +-R +-v +-vi +-H +-H=mdiwin.csm +-H- +-4 +-Jgx +-Ot +-w-cln +-w-sig +-wucp +-wdef +-wnod +-wamb +-wuse +-wstv +-wpin +-O-c +-Z- +-O- +-O-l +-O-b +-O-W +-O-m +-O-p +-O-i +-O-v +-d- +-i50 +-R- +-x- +-xd- +-RT- +-W diff --git a/mdiwin/BIT32.HPP b/mdiwin/BIT32.HPP new file mode 100644 index 0000000..bcc862a --- /dev/null +++ b/mdiwin/BIT32.HPP @@ -0,0 +1,87 @@ +#ifndef _BIT32_HPP_ +#define _BIT32_HPP_ +#include + +class FAR BIT32 +{ +public: + BIT32(void); + BIT32(const BIT32&someBIT32); + BIT32(LONG longValue); + virtual ~BIT32(); + WORD operator==(const BIT32 &someBIT32)const; + WORD operator<(const BIT32 &someBIT32)const; + WORD operator>(const BIT32 &someBIT32)const; + void operator=(LONG longValue); + void operator=(const BIT32 &someBIT32); + void value(LONG newValue); + LONG value(void)const; +private: + LONG mValue; +}; + +inline +BIT32::BIT32(void) +: mValue(0) +{ +} + +inline +BIT32::BIT32(LONG longValue) +: mValue(longValue) +{ +} + +inline +BIT32::BIT32(const BIT32 &someBIT32) +: mValue(someBIT32.mValue) +{ +} + +inline +BIT32::~BIT32() +{ +} + +inline +WORD BIT32::operator==(const BIT32 &someBIT32)const +{ + return mValue==someBIT32.mValue; +} + +inline +WORD BIT32::operator<(const BIT32 &someBIT32)const +{ + return mValue(const BIT32 &someBIT32)const +{ + return mValue>someBIT32.mValue; +} + +inline +void BIT32::operator=(LONG longValue) +{ + mValue=longValue; +} + +inline +void BIT32::operator=(const BIT32 &someBIT32) +{ + mValue=someBIT32.mValue; +} + +inline +void BIT32::value(LONG newValue) +{ + mValue=newValue; +} + +inline +LONG BIT32::value(void)const +{ + return mValue; +} +#endif diff --git a/mdiwin/BITMAP.CPP b/mdiwin/BITMAP.CPP new file mode 100644 index 0000000..4319f12 --- /dev/null +++ b/mdiwin/BITMAP.CPP @@ -0,0 +1,252 @@ +#include + +#define MaxBlock 64000L + +Bitmap::Bitmap(void) +: mhFile(HFILE_ERROR), mMaxColors(0), mhPalette(0), mhGlobalImage(0), + mhGlobalBitmapInfo(0), mCurrentMode(Idle), mSizeImage(0), + mBlockSize(MaxBlock) +{ +} + +Bitmap::Bitmap(String pathFileName) +: mhFile(HFILE_ERROR), mMaxColors(0), mhPalette(0), mhGlobalImage(0), + mhGlobalBitmapInfo(0), mCurrentMode(Read), mSizeImage(0), + mBlockSize(MaxBlock) +{ + processBitmap(pathFileName); +} + +Bitmap::Bitmap(String pathFileName,HGLOBAL hGlobalImage,HGLOBAL hGlobalBitmapInfo) +: mhFile(HFILE_ERROR), mMaxColors(0), mhPalette(0), mhGlobalImage(0), + mhGlobalBitmapInfo(0), mCurrentMode(Write), mSizeImage(0), + mBlockSize(MaxBlock) +{ + DWORD sizeBitmapInfo; + BITMAPINFO FAR *lpSourceBitmapInfo; + OFSTRUCT ofStruct; + UHUGE *lpSourceImage; + + if(!hGlobalImage||!hGlobalBitmapInfo)return; + mFileName=pathFileName; + if(HFILE_ERROR==(mhFile=::OpenFile(pathFileName,&ofStruct,OF_WRITE|OF_CREATE)))return; +#if defined(__FLAT__) + sizeBitmapInfo=::GlobalSize(hGlobalBitmapInfo); +#else + sizeBitmapInfo=::GetSelectorLimit((UINT)hGlobalBitmapInfo)+1; +#endif + mhGlobalBitmapInfo=::GlobalAlloc(GMEM_FIXED,sizeBitmapInfo); + mpBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(mhGlobalBitmapInfo); + lpSourceBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(hGlobalBitmapInfo); + copyBits((UHUGE *)mpBitmapInfo,(UHUGE *)lpSourceBitmapInfo,sizeBitmapInfo); + ::GlobalUnlock(hGlobalBitmapInfo); + mSizeImage=((((mpBitmapInfo->bmiHeader.biWidth* + mpBitmapInfo->bmiHeader.biBitCount)+31)&~31)>>3)* + mpBitmapInfo->bmiHeader.biHeight; + mhGlobalImage=::GlobalAlloc(GMEM_FIXED,mSizeImage); + mpImage=(UHUGE *)::GlobalLock(mhGlobalImage); + lpSourceImage=(UHUGE *)::GlobalLock(hGlobalImage); + copyBits(mpImage,lpSourceImage,mSizeImage); + ::GlobalUnlock(hGlobalImage); + if(!(mMaxColors=(WORD)mpBitmapInfo->bmiHeader.biClrUsed)) + mMaxColors=1 << mpBitmapInfo->bmiHeader.biBitCount; +} + +Bitmap::~Bitmap() +{ + cleanup(); +} + +WORD Bitmap::operator=(String pathFileName) +{ + int returnCode; + + cleanup(); + mCurrentMode=Read; + returnCode=processBitmap(pathFileName); + ::_lclose(mhFile); + mhFile=HFILE_ERROR; + return returnCode; +} + +WORD Bitmap::processBitmap(String pathFileName) +{ + OFSTRUCT ofStruct; + + mFileName=pathFileName; + if(HFILE_ERROR==(mhFile=::OpenFile(pathFileName,&ofStruct,OF_READ)))return FALSE; + ::_lread(mhFile,&mBitmapFileHeader,sizeof(BITMAPFILEHEADER)); + if(Signature!=mBitmapFileHeader.bfType) + { + cleanup(); + return FALSE; + } + createPalette(); + decodeImage(); + return TRUE; +} + +WORD Bitmap::isValidBitmap(String pathFileName)const +{ + HFILE hFile; + OFSTRUCT ofStruct; + BITMAPFILEHEADER bitmapFileHeader; + + if(pathFileName.isNull())return FALSE; + if(HFILE_ERROR==(hFile=::OpenFile(pathFileName,&ofStruct,OF_READ)))return FALSE; + ::_lread(hFile,&bitmapFileHeader,sizeof(BITMAPFILEHEADER)); + ::_lclose(hFile); + if(Signature!=bitmapFileHeader.bfType)return FALSE; + return TRUE; +} + +WORD Bitmap::setPalette(HPALETTE hPalette) +{ + PALETTEENTRY FAR *lpPaletteEntry; + BITMAPINFOHEADER bitmapInfoHeader; + + if(!isOkay()||!hPalette)return FALSE; + lpPaletteEntry=new PALETTEENTRY[MaxColors]; + mMaxColors=::GetPaletteEntries(hPalette,0,MaxColors,(PALETTEENTRY FAR*)lpPaletteEntry); + ::memcpy(&bitmapInfoHeader,mpBitmapInfo,sizeof(BITMAPINFOHEADER)); + bitmapInfoHeader.biClrUsed=mMaxColors; + bitmapInfoHeader.biClrImportant=mMaxColors; + ::GlobalUnlock(mhGlobalBitmapInfo); + ::GlobalFree(mhGlobalBitmapInfo); + mhGlobalBitmapInfo=::GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT,sizeof(BITMAPINFOHEADER)+(sizeof(RGBQUAD)*mMaxColors)); + mpBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(mhGlobalBitmapInfo); + ::memcpy(mpBitmapInfo,&bitmapInfoHeader,sizeof(BITMAPINFOHEADER)); + for(int i=0;ibmiColors[i].rgbRed=lpPaletteEntry[i].peRed; + mpBitmapInfo->bmiColors[i].rgbGreen=lpPaletteEntry[i].peGreen; + mpBitmapInfo->bmiColors[i].rgbBlue=lpPaletteEntry[i].peBlue; + } + delete lpPaletteEntry; + return TRUE; +} + +void Bitmap::createPalette(void) +{ + RGBQUAD FAR *pRGBQuad; + LOGPALETTE FAR *pLogicalPalette; + PALETTEENTRY FAR *pPaletteEntry; + BITMAPINFOHEADER bitmapInfoHeader; + HGLOBAL hGlobalPalette; + + if(mhPalette)::DeleteObject(mhPalette); + ::_lread(mhFile,&bitmapInfoHeader,sizeof(BITMAPINFOHEADER)); + if(!(mMaxColors=(WORD)bitmapInfoHeader.biClrUsed)) + mMaxColors=1 << bitmapInfoHeader.biBitCount; + mhGlobalBitmapInfo=::GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT, + sizeof(BITMAPINFOHEADER)+(sizeof(RGBQUAD)*mMaxColors)); + mpBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(mhGlobalBitmapInfo); + ::memcpy(mpBitmapInfo,&bitmapInfoHeader,sizeof(BITMAPINFOHEADER)); + hGlobalPalette=::GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT, + sizeof(LOGPALETTE)+(mMaxColors*sizeof(PALETTEENTRY))); + pLogicalPalette=(LOGPALETTE FAR *)::GlobalLock(hGlobalPalette); + pLogicalPalette->palNumEntries=mMaxColors; + pLogicalPalette->palVersion=0x300; + for(int i=0;ibmiColors[i]; + ::_lread(mhFile,pRGBQuad,sizeof(RGBQUAD)); + pPaletteEntry=(PALETTEENTRY FAR *)&pLogicalPalette->palPalEntry[i]; + pPaletteEntry->peRed=pRGBQuad->rgbRed; + pPaletteEntry->peGreen=pRGBQuad->rgbGreen; + pPaletteEntry->peBlue=pRGBQuad->rgbBlue; + pPaletteEntry->peFlags=0; + } + mhPalette=::CreatePalette((LOGPALETTE FAR *)pLogicalPalette); + ::GlobalUnlock(hGlobalPalette); + ::GlobalFree(hGlobalPalette); +} + +void Bitmap::decodeImage(void) +{ + switch(mpBitmapInfo->bmiHeader.biCompression) + { + case BI_RGB : + mSizeImage=((((mpBitmapInfo->bmiHeader.biWidth* + mpBitmapInfo->bmiHeader.biBitCount)+31)&~31)>>3)* + mpBitmapInfo->bmiHeader.biHeight; + mhGlobalImage=::GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT,mSizeImage); + mpImage=(UHUGE*)::GlobalLock(mhGlobalImage); + ::_llseek(mhFile,(mBitmapFileHeader.bfOffBits),0); + ::_hread(mhFile,mpImage,mSizeImage); + break; + case BI_RLE4 : + cleanup(); + ::MessageBox(::GetFocus(),(LPSTR)"BI_RLE4 Is not implemented at this time.\nPlease try an uncompressed bitmap.",(LPSTR)"ERROR",MB_ICONEXCLAMATION); + break; + case BI_RLE8 : + cleanup(); + ::MessageBox(::GetFocus(),(LPSTR)"BI_RLE8 Is not implemented at this time.\nPlease try an uncompressed bitmap.",(LPSTR)"ERROR",MB_ICONEXCLAMATION); + break; + } +} + +WORD Bitmap::displayBitmap(HWND hDisplayWindow,HDC hDC,int isActive,int conforming)const +{ + RECT rect; + HPALETTE hOldPalette; + WORD width; + WORD height; + int suppliedDC; + + if(!isOkay()||!hDisplayWindow)return FALSE; + if(Read!=mCurrentMode)return FALSE; + width=(WORD)mpBitmapInfo->bmiHeader.biWidth; + height=(WORD)mpBitmapInfo->bmiHeader.biHeight; + ::GetClientRect(hDisplayWindow,(RECT FAR *)&rect); + if(!hDC){suppliedDC=FALSE;hDC=::GetDC(hDisplayWindow);} + if(isActive)hOldPalette=::SelectPalette(hDC,mhPalette,FALSE); + else hOldPalette=::SelectPalette(hDC,mhPalette,TRUE); + ::RealizePalette(hDC); + if(conforming) + ::StretchDIBits(hDC,0,0,rect.right,rect.bottom,0,0,width,height,mpImage,(BITMAPINFO *)mpBitmapInfo,DIB_RGB_COLORS,SRCCOPY); + else + ::StretchDIBits(hDC,0,0,width,height,0,0,width,height,mpImage,(BITMAPINFO *)mpBitmapInfo,DIB_RGB_COLORS,SRCCOPY); + if(isActive)::SelectPalette(hDC,hOldPalette,FALSE); + else ::SelectPalette(hDC,hOldPalette,TRUE); + if(!suppliedDC)::ReleaseDC(hDisplayWindow,hDC); + return TRUE; +} + +WORD Bitmap::saveBitmap(void)const +{ + BITMAPFILEHEADER bitmapFileHeader; + + if(!isOkay())return FALSE; + if(Write!=mCurrentMode)return FALSE; + ::memset(&bitmapFileHeader,0,sizeof(BITMAPFILEHEADER)); + bitmapFileHeader.bfType=Signature; + bitmapFileHeader.bfSize=sizeof(BITMAPFILEHEADER)+ + sizeof(BITMAPINFOHEADER)+(sizeof(RGBQUAD)*mMaxColors)+mSizeImage; + bitmapFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+(sizeof(RGBQUAD)*mMaxColors); + ::_lwrite(mhFile,(char*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER)); + ::_lwrite(mhFile,(char*)mpBitmapInfo,sizeof(BITMAPINFOHEADER)+(sizeof(RGBQUAD)*mMaxColors)); + ::_hwrite(mhFile,(char*)mpImage,mSizeImage); + return FALSE; +} + +void Bitmap::cleanup(void) +{ + if(HFILE_ERROR!=mhFile) + {::_lclose(mhFile);mhFile=HFILE_ERROR;} + if(mhPalette) + {::DeleteObject(mhPalette);mhPalette=0;} + if(mhGlobalImage) + {while(::GlobalUnlock(mhGlobalImage));::GlobalFree(mhGlobalImage); + mhGlobalImage=0;} + if(mhGlobalBitmapInfo) + {while(::GlobalUnlock(mhGlobalBitmapInfo)); + ::GlobalFree(mhGlobalBitmapInfo);mhGlobalBitmapInfo=0;} +} + +void Bitmap::copyBits(UHUGE *destination,UHUGE *source,unsigned long length)const +{ + for(unsigned long count=0;count +#include +#include +#include + +class Bitmap +{ +public: + enum {MaxColors=256}; + Bitmap(void); + Bitmap(String pathFileName); + Bitmap(String pathFileName,HGLOBAL hGlobalImage,HGLOBAL hGlobalBitmapInfo); + ~Bitmap(); + WORD operator=(String pathFileName); + void operator=(const Bitmap &someBitmap); + WORD operator==(const Bitmap &someBitmap)const; + WORD isOkay(void)const; + WORD displayBitmap(HWND hDisplayWindow,HDC hDC=(HDC)0,int isActive=FALSE,int conforming=FALSE)const; + WORD saveBitmap(void)const; + HGLOBAL lockedImageData(void)const; + HGLOBAL lockedBitmapInfo(void)const; + HPALETTE paletteHandle(void)const; + WORD setPalette(HPALETTE hPalette); + WORD isValidBitmap(String pathFileName)const; +private: + enum Mode{Read,Write,Idle}; + enum {Signature=0x4D42}; + void cleanup(void); + void createPalette(void); + void decodeImage(void); + void copyBits(UHUGE *destination,UHUGE *source,unsigned long length)const; + WORD processBitmap(String pathFileName); + + String mFileName; + WORD mMaxColors; + Mode mCurrentMode; + BITMAPFILEHEADER mBitmapFileHeader; + HPALETTE mhPalette; + HGLOBAL mhGlobalImage; + HGLOBAL mhGlobalBitmapInfo; + LONG mSizeImage; + const LONG mBlockSize; + UHUGE *mpImage; + BITMAPINFO *mpBitmapInfo; + HFILE mhFile; +}; + +inline +WORD Bitmap::isOkay(void)const +{ + return (mhGlobalImage&&mhGlobalBitmapInfo); +} + +inline +HGLOBAL Bitmap::lockedImageData(void)const +{ + return mhGlobalImage; +} + +inline +HGLOBAL Bitmap::lockedBitmapInfo(void)const +{ + return mhGlobalBitmapInfo; +} + +inline +HPALETTE Bitmap::paletteHandle(void)const +{ + return mhPalette; +} + +inline +WORD Bitmap::operator==(const Bitmap &someBitmap)const +{ + return mFileName==someBitmap.mFileName; +} + +inline +void Bitmap::operator=(const Bitmap &someBitmap) +{ + (*this)=someBitmap.mFileName; +} +#endif diff --git a/mdiwin/BLOCK.BAK b/mdiwin/BLOCK.BAK new file mode 100644 index 0000000..44a694e --- /dev/null +++ b/mdiwin/BLOCK.BAK @@ -0,0 +1,49 @@ +#ifndef _BLOCK_HPP_ +#define _BLOCK_HPP_ +#include +#include +#include + +template +class Vector; + +template +class Container +{ + friend class Block; + public: + Container *Next(); + void Next(Container *nextItem); + private: + Container *mNext; + T *mItem; + Container(); + ~Container(); +}; + +template +class Block +{ +public: + typedef LONG Index; + Block(void); + virtual ~Block(void); + LONG size(void)const; + void insert(const T *item); + void insert(Block &newBlock); + void remove(void); + void remove(const T *item); + void remove(Block &oldBlock); + void remove(Index itemIndex); + int operator=(Block &someBlock); + int operator=(Vector &someVector); + T &operator[](LONG itemIndex); +private: + void synchronizeBlock(void); + LONG mSize; + LONG mLastIndexReferenced; + Container *mLastObjectReferenced; + Container *mLastObjectInserted; + Container *mContainer; +}; +#endif \ No newline at end of file diff --git a/mdiwin/BLOCK.HPP b/mdiwin/BLOCK.HPP new file mode 100644 index 0000000..2011d7c --- /dev/null +++ b/mdiwin/BLOCK.HPP @@ -0,0 +1,53 @@ +#ifndef _BLOCK_HPP_ +#define _BLOCK_HPP_ +#include +#include +#include + +template +class Vector; + +template +class Block; + +template +class Container +{ + friend class Block; + public: + Container *Next(); + void Next(Container *nextItem); + private: + Container *mNext; + T *mItem; + Container(); + ~Container(); +}; + +template +class Block +{ +public: + typedef LONG Index; + Block(void); + virtual ~Block(void); + LONG size(void)const; + void insert(const T *item); + void insert(Block &newBlock); + void remove(void); + void remove(const T *item); + void remove(Block &oldBlock); + void remove(Index itemIndex); + int operator=(Block &someBlock); + int operator=(Vector &someVector); + T &operator[](LONG itemIndex); +private: + void synchronizeBlock(void); + LONG mSize; + LONG mLastIndexReferenced; + Container *mLastObjectReferenced; + Container *mLastObjectInserted; + Container *mContainer; +}; +#include +#endif diff --git a/mdiwin/BLOCK.TPP b/mdiwin/BLOCK.TPP new file mode 100644 index 0000000..0292061 --- /dev/null +++ b/mdiwin/BLOCK.TPP @@ -0,0 +1,231 @@ +#ifndef _BLOCK_HPP_ +#error BLOCK.HPP MUST PRECEDE BLOCK.TPP +#endif + +#ifdef _EXPAND_BLOCK_TEMPLATES_ +//#pragma option -Jgd +#endif + +template +Block::Block() +: mContainer(0), mSize(0), mLastIndexReferenced(-1), mLastObjectReferenced(0), + mLastObjectInserted(0) +{ +} + +template +Block::~Block() +{ + remove(); +} + +template +void Block::remove(void) +{ + if(!mContainer)return; + Container *Cursor=mContainer; + Container *Thumb; + while(Cursor) + { + Thumb=Cursor; + Cursor=Cursor->Next(); + delete Thumb; + } + mContainer=0; + mLastIndexReferenced=-1L; + mLastObjectReferenced=0; + mLastObjectInserted=0; + mSize=0; +} + +template +T & Block::operator [](LONG itemIndex) +{ + Container *Cursor; + + assert(itemIndexmItem; + if(itemIndex==mLastIndexReferenced+1 && -1!=mLastIndexReferenced) + { + mLastIndexReferenced++; + mLastObjectReferenced=mLastObjectReferenced->Next(); + return *mLastObjectReferenced->mItem; + } + Cursor=mContainer; + for(Index i=0;iNext(); + if(i==itemIndex) + { + mLastIndexReferenced=i; + mLastObjectReferenced=Cursor; + return *Cursor->mItem; + } + return *((T*)0); +} + +template +void Block::insert(Block &newBlock) +{ + LONG size(newBlock.size()); + for(Index i=0;i +void Block::insert(const T *item) +{ + if(!mContainer) + { + mContainer=new Container; + mContainer->mItem=new T(*item); + mLastObjectInserted=mContainer; + mSize++; + } + else + { + mLastObjectInserted->Next(new Container); + mLastObjectInserted=mLastObjectInserted->Next(); + mLastObjectInserted->mItem=new T(*item); + mSize++; + } +} + +template +void Block::remove(Block &oldBlock) +{ + LONG size(oldBlock.size()); + for(Index i=0;i +void Block::remove(const T *item) +{ + if(!mContainer)return; + Container *Thumb=mContainer; + Container *Prev=0; + + while(Thumb) + { + if(*item==*(Thumb->mItem)) + break; + Prev=Thumb; + Thumb=Thumb->mNext; + } + if(!Thumb)return; + if(Thumb==mContainer) + { + if(Thumb->Next()) + mContainer=Thumb->Next(); + else mContainer=0; + } + else + { + if(Thumb->Next()) + Prev->Next(Thumb->Next()); + else + Prev->Next(0); + } + delete Thumb; + mSize--; + synchronizeBlock(); +} + +template +void Block::remove(LONG itemIndex) +{ + if(!mContainer)return; + Container *Thumb=mContainer; + Container *Prev=0; + + for(Index i=0;iNext(); + } + if(!Thumb)return; + if(Thumb==mContainer) + { + if(Thumb->Next()) + mContainer=Thumb->Next(); + else mContainer=0; + } + else + { + if(Thumb->Next()) + Prev->Next(Thumb->Next()); + else + Prev->Next(0); + } + delete Thumb; + mSize--; + synchronizeBlock(); +} + +template +void Block::synchronizeBlock(void) +{ + Container *Thumb=mLastObjectInserted=mContainer; + + mLastIndexReferenced=-1; + mLastObjectReferenced=0; + while(Thumb) + { + mLastObjectInserted=Thumb; + Thumb=Thumb->Next(); + } +} + +template +LONG Block::size(void)const +{ + return mSize; +} + +template +int Block::operator=(Block &someBlock) +{ + LONG blockSize(someBlock.size()); + + if(!blockSize)return FALSE; + remove(); + for(LONG i=0;i +int Block::operator=(Vector &someVector) +{ + LONG blockSize(someVector.size()); + + if(!blockSize)return FALSE; + remove(); + for(LONG i=0;i +Container::Container() +: mNext(0), mItem(0) +{ +} + +template +Container::~Container() +{ + delete mItem; +} + +template +Container *Container::Next(void) +{ + return mNext; +} + +template +void Container::Next(Container *nextItem) +{ + mNext=nextItem; +} \ No newline at end of file diff --git a/mdiwin/BMPLNK.CPP b/mdiwin/BMPLNK.CPP new file mode 100644 index 0000000..233769d --- /dev/null +++ b/mdiwin/BMPLNK.CPP @@ -0,0 +1,36 @@ +#include + +LinkedBitmap::LinkedBitmap(void) +: mCtlID(0), mhBitmap(0), mReferenceCount(0), mhLibrary(0) +{ +} + +LinkedBitmap::LinkedBitmap(int ctlID,String &bitmapName,HINSTANCE hLibrary) +: mCtlID(ctlID), mReferenceCount(1), mhLibrary(hLibrary), mBitmapName(bitmapName) +{ + loadBitmap(); +} + +LinkedBitmap::LinkedBitmap(const LinkedBitmap &someLinkedBitmap) +: mCtlID(someLinkedBitmap.mCtlID), mReferenceCount(someLinkedBitmap.mReferenceCount), + mhLibrary(someLinkedBitmap.mhLibrary), mBitmapName(someLinkedBitmap.mBitmapName) +{ + loadBitmap(); +} + +LinkedBitmap::~LinkedBitmap() +{ + if(mhBitmap)::DeleteObject(mhBitmap); +} + +WORD LinkedBitmap::drawBitmap(HDC hDC,RECT locationRect) +{ + DrawBitmap::drawBitmap(hDC,mhBitmap,locationRect); + return TRUE; +} + +WORD LinkedBitmap::drawBitmap(void) +{ + DrawBitmap::drawBitmap(mhBitmap); + return TRUE; +} diff --git a/mdiwin/BMPLNK.HPP b/mdiwin/BMPLNK.HPP new file mode 100644 index 0000000..cbfc6f8 --- /dev/null +++ b/mdiwin/BMPLNK.HPP @@ -0,0 +1,57 @@ +#ifndef _LINKEDBITMAP_HPP_ +#define _LINKEDBITMAP_HPP_ +#include +#include + +class LinkedBitmap : public DrawBitmap +{ +public: + LinkedBitmap(void); + LinkedBitmap(int ctlID,String &bitmapName,HINSTANCE hLibrary); + LinkedBitmap(const LinkedBitmap &someLinkedBitmap); + ~LinkedBitmap(); + WORD drawBitmap(HDC hDC,RECT locationRect); + WORD drawBitmap(void); + int referenceCount(void)const; + void referenceCount(int newCount); + WORD operator==(const LinkedBitmap &someLinkedBitmap)const; + WORD operator==(int ctlID)const; +private: + void loadBitmap(void); + int mCtlID; + HBITMAP mhBitmap; + String mBitmapName; + int mReferenceCount; + HINSTANCE mhLibrary; +}; + +inline +int LinkedBitmap::referenceCount(void)const +{ + return mReferenceCount; +} + +inline +void LinkedBitmap::referenceCount(int newCount) +{ + mReferenceCount=newCount; +} + +inline +WORD LinkedBitmap::operator==(const LinkedBitmap &someLinkedBitmap)const +{ + return (mCtlID==someLinkedBitmap.mCtlID); +} + +inline +WORD LinkedBitmap::operator==(int ctlID)const +{ + return mCtlID==ctlID; +} + +inline +void LinkedBitmap::loadBitmap(void) +{ + mhBitmap=::LoadBitmap(mhLibrary,mBitmapName); +} +#endif \ No newline at end of file diff --git a/mdiwin/BTNLNK.CPP b/mdiwin/BTNLNK.CPP new file mode 100644 index 0000000..ec50766 --- /dev/null +++ b/mdiwin/BTNLNK.CPP @@ -0,0 +1,70 @@ +#include + +LinkedButton::LinkedButton(void) +: mCtlID(0), mhBitmapFocusUp(0), mhBitmapNoFocusUp(0), mFocus(Focus), + mhBitmapFocusDown(0), mlpBitmapDefault(0), mReferenceCount(0), mhLibrary(0) +{ +} + +LinkedButton::LinkedButton(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,HINSTANCE hLibrary,FocusItem focusItem) +: mCtlID(ctlID), mReferenceCount(1), mFocus(focusItem), + mhLibrary(hLibrary), mFocusUpString(focusUp), mNoFocusUpString(noFocusUp), + mFocusDownString(focusDown) +{ + loadButtons(); +} + +LinkedButton::LinkedButton(const LinkedButton &someLinkedButton) +: mCtlID(someLinkedButton.mCtlID), mReferenceCount(someLinkedButton.mReferenceCount), + mFocus(someLinkedButton.mFocus), mhLibrary(someLinkedButton.mhLibrary), + mFocusUpString(someLinkedButton.mFocusUpString), + mNoFocusUpString(someLinkedButton.mNoFocusUpString), + mFocusDownString(someLinkedButton.mFocusDownString) +{ + loadButtons(); +} + +void LinkedButton::loadButtons(void) +{ + mhBitmapFocusUp=::LoadBitmap(mhLibrary,mFocusUpString); + mhBitmapNoFocusUp=::LoadBitmap(mhLibrary,mNoFocusUpString); + mhBitmapFocusDown=::LoadBitmap(mhLibrary,mFocusDownString); + if(Focus==mFocus)mlpBitmapDefault=&mhBitmapFocusUp; + else mlpBitmapDefault=&mhBitmapNoFocusUp; +} + +LinkedButton::~LinkedButton() +{ + if(mhBitmapFocusUp)::DeleteObject(mhBitmapFocusUp); + if(mhBitmapNoFocusUp)::DeleteObject(mhBitmapNoFocusUp); + if(mhBitmapFocusDown)::DeleteObject(mhBitmapFocusDown); +} + +WORD LinkedButton::drawButton(LPDRAWITEMSTRUCT lpControlData) +{ + int retCode(TRUE); + RECT buttonRect; + + ::SetRect((RECT FAR *)&buttonRect,0,0,0,0); + switch(lpControlData->itemAction) + { + case ODA_DRAWENTIRE : + if(lpControlData->itemState & ODS_SELECTED)drawBitmap(lpControlData->hDC,mhBitmapFocusDown,buttonRect); + else if(lpControlData->itemState & ODS_FOCUS)drawBitmap(lpControlData->hDC,*mlpBitmapDefault,buttonRect); + else drawBitmap(lpControlData->hDC,mhBitmapNoFocusUp,buttonRect); + break; + case ODA_SELECT : + if(lpControlData->itemState & ODS_SELECTED)drawBitmap(lpControlData->hDC,mhBitmapFocusDown,buttonRect); + else + { + drawBitmap(lpControlData->hDC,mhBitmapFocusUp,buttonRect); + retCode=FALSE; + } + break; + case ODA_FOCUS : + if(lpControlData->itemState & ODS_FOCUS)drawBitmap(lpControlData->hDC,mhBitmapFocusUp,buttonRect); + else drawBitmap(lpControlData->hDC,mhBitmapNoFocusUp,buttonRect); + break; + } + return retCode; +} diff --git a/mdiwin/BTNLNK.HPP b/mdiwin/BTNLNK.HPP new file mode 100644 index 0000000..a978bbc --- /dev/null +++ b/mdiwin/BTNLNK.HPP @@ -0,0 +1,57 @@ +#ifndef _LINKEDBUTTON_HPP_ +#define _LINKEDBUTTON_HPP_ +#include +#include + +class LinkedButton : public DrawBitmap +{ +public: + enum FocusItem{Focus,NoFocus}; + LinkedButton(void); + LinkedButton(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,HINSTANCE hLibrary,FocusItem focusItem=Focus); + LinkedButton(const LinkedButton &someLinkedButton); + ~LinkedButton(); + WORD drawButton(LPDRAWITEMSTRUCT lpControlData); + int referenceCount(void)const; + void referenceCount(int newCount); + WORD operator==(const LinkedButton &someLinkedButton)const; + WORD operator==(int ctlID)const; +private: + void loadButtons(void); + int mCtlID; + HBITMAP mhBitmapFocusUp; + HBITMAP mhBitmapNoFocusUp; + HBITMAP mhBitmapFocusDown; + HBITMAP *mlpBitmapDefault; + String mFocusUpString; + String mNoFocusUpString; + String mFocusDownString; + int mReferenceCount; + FocusItem mFocus; + HINSTANCE mhLibrary; +}; + +inline +int LinkedButton::referenceCount(void)const +{ + return mReferenceCount; +} + +inline +void LinkedButton::referenceCount(int newCount) +{ + mReferenceCount=newCount; +} + +inline +WORD LinkedButton::operator==(const LinkedButton &someLinkedButton)const +{ + return (mCtlID==someLinkedButton.mCtlID); +} + +inline +WORD LinkedButton::operator==(int ctlID)const +{ + return mCtlID==ctlID; +} +#endif \ No newline at end of file diff --git a/mdiwin/BWINDOW.CPP b/mdiwin/BWINDOW.CPP new file mode 100644 index 0000000..b95a2d8 --- /dev/null +++ b/mdiwin/BWINDOW.CPP @@ -0,0 +1,121 @@ +#include +#include +#include +#include + +char BWindow::szClassName[]="BWindow"; +char BWindow::szMenuName[]={'\0'}; + +BWindow::BWindow(HWND hParent) +: mhParent(hParent) +{ + RECT parentRect; + + mLastText[0]=0; +#if defined(__FLAT__) + mhInstance=(HINSTANCE)::GetWindowLong(hParent,GWL_HINSTANCE); +#else + mhInstance=(HINSTANCE)::GetWindowWord(hParent,GWW_HINSTANCE); +#endif + ::GetClientRect(hParent,&parentRect); + ::CreateWindow(szClassName,0, + WS_CHILDWINDOW, + 0,0, + parentRect.right,WindowHeight, + hParent,(HMENU)0x0A, + mhInstance, + (LPSTR)this); + Show(SW_HIDE); + Update(); +} + +BWindow::~BWindow() +{ +} + +void BWindow::registerClass(void) +{ + WNDCLASS wndclass; + wndclass.style =CS_HREDRAW|CS_VREDRAW; + wndclass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndclass.cbClsExtra =0; + wndclass.cbWndExtra =sizeof(BWindow*); + wndclass.hInstance =Main::smhInstance; + wndclass.hIcon =0; + wndclass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndclass.hbrBackground =(HBRUSH)::GetStockObject(GRAY_BRUSH); + wndclass.lpszMenuName =0; + wndclass.lpszClassName =szClassName; + RegisterClass(&wndclass); +} + +long BWindow::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + return FALSE; + case WM_SIZE : + resize(LOWORD(lParam)); + return FALSE; + case WM_PAINT : + paint(); + return FALSE; + case WM_DESTROY : + return FALSE; + } + return DefWindowProc(GetHandle(),message,wParam,lParam); +} + +void BWindow::paint(void) +{ + PAINTSTRUCT ps; + + ::BeginPaint(GetHandle(),(PAINTSTRUCT far*)&ps); + setText(); + ::EndPaint(GetHandle(),(PAINTSTRUCT far*)&ps); +} + +void BWindow::resize(int NewParentWidth) +{ + ::InvalidateRect(GetHandle(),0,1); + ::MoveWindow(GetHandle(),0,0,NewParentWidth,WindowHeight,FALSE); +} + +void BWindow::setText() +{ + HDC hdc; + hdc=::GetDC(GetHandle()); + Font textFont(GetHandle(),WindowHeight-2,WindowHeight-2); + textFont.DrawText(1,1,mLastText,RGB(128,128,128),RGB(255,255,255)); + ::ReleaseDC(GetHandle(),hdc); +} + +void BWindow::setText(char *text) +{ + ::strcpy(mLastText,text); + if(!::strlen(text)) + { + if(::IsWindowVisible(GetHandle()))::ShowWindow(GetHandle(),SW_HIDE); + } + else + { + if(!::IsWindowVisible(GetHandle()))::ShowWindow(GetHandle(),SW_SHOW); + ::InvalidateRect(GetHandle(),0,TRUE); + ::UpdateWindow(GetHandle()); + setText(); + } + ::UpdateWindow(GetHandle()); + yieldTask(); +} + +void BWindow::yieldTask(void) +{ + MSG msg; + + if(::PeekMessage((MSG far *)&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } +} diff --git a/mdiwin/BWINDOW.HPP b/mdiwin/BWINDOW.HPP new file mode 100644 index 0000000..376f6f1 --- /dev/null +++ b/mdiwin/BWINDOW.HPP @@ -0,0 +1,33 @@ +#ifndef _BWINDOW_HPP_ +#define _BWINDOW_HPP_ +#include + +class BWindow : public Window +{ +public: + enum {WindowHeight=16,MaxText=100}; + BWindow(HWND hParent); + ~BWindow(); + static void registerClass(void); + static char far *className(); + void setText(char *text); +private: + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + void yieldTask(void); + void setText(); + void resize(int NewSize); + void paint(void); + HINSTANCE mhInstance; + HWND mhParent; + static char szClassName[28]; + static char szMenuName[6]; + char mLastText[MaxText+1]; +}; + +inline +char far*BWindow::className() +{ + return szClassName; +} +#endif + diff --git a/mdiwin/BYTE.HPP b/mdiwin/BYTE.HPP new file mode 100644 index 0000000..07ea96a --- /dev/null +++ b/mdiwin/BYTE.HPP @@ -0,0 +1,38 @@ +#ifndef _BYTE_HPP_ +#define _BYTE_HPP_ +#include + +class Byte +{ +public: + Byte(void); + Byte(BYTE value); + ~Byte(); + operator BYTE(void)const; +private: + BYTE mData; +}; + +inline +Byte::Byte(void) +: mData(0) +{ +} + +inline +Byte::Byte(BYTE someByte) +: mData(someByte) +{ +} + +inline +Byte::~Byte() +{ +} + +inline +Byte::operator BYTE(void)const +{ + return mData; +} +#endif diff --git a/mdiwin/CACHE.HPP b/mdiwin/CACHE.HPP new file mode 100644 index 0000000..a1e7be0 --- /dev/null +++ b/mdiwin/CACHE.HPP @@ -0,0 +1,46 @@ +#ifndef _CACHE_HPP_ +#define _CACHE_HPP_ +#include +#include + +template +class Cache +{ +public: + Cache(void); + ~Cache(); + WORD locateItem(const K &someKeyItem,T &someDataItem); + void insertItem(const K &someKeyItem,const T &someDataItem); +private: + Vector mDataItem; + Vector mKeyItem; + LONG mEntries; +}; + +template +inline +Cache::Cache(void) +: mEntries(0L) +{ + mDataItem.size(N); + mKeyItem.size(N); +} + +template +inline +Cache::~Cache() +{ +} + +template +inline +void Cache::insertItem(const K &someKeyItem,const T &someDataItem) +{ + if(mEntries>=N)mEntries=0L; + mKeyItem[mEntries]=someKeyItem; + mDataItem[mEntries]=someDataItem; + mEntries++; +} +#include +#endif + diff --git a/mdiwin/CACHE.TPP b/mdiwin/CACHE.TPP new file mode 100644 index 0000000..a5814bd --- /dev/null +++ b/mdiwin/CACHE.TPP @@ -0,0 +1,21 @@ +#ifndef _CACHE_HPP_ +#error CACHE.HPP must precede CACHE.TPP +#endif + +#ifdef _EXPAND_CACHE_TEMPLATES_ +#pragma option -Jgd +#endif + +template +WORD Cache::locateItem(const K &someKeyItem,T &someDataItem) +{ + for(LONG index=0;index +#include + +Capture::Capture(void) +: mhWnd(0), mIsInCapture(FALSE), mHasCapture(FALSE) +{ + reset(); +} + +Capture::~Capture() +{ +} + +void Capture::leftButtonDown(LPARAM lParam) +{ + HDC hDC; + if(!mhWnd)return; + + mIsInCapture=TRUE; + mHasCapture=FALSE; + hDC=::GetDC(mhWnd); + ::DrawFocusRect(hDC,(RECT FAR *)&mZoomRect); + ::ReleaseDC(mhWnd,hDC); + ::memset((char*)&mZoomRect,0,sizeof(RECT)); + ::SetCapture(mhWnd); + ::GetClientRect(mhWnd,(RECT FAR *)&mZoomRect); + ::ClientToScreen(mhWnd,(POINT FAR *)&mZoomRect); + ::ClientToScreen(mhWnd,(POINT FAR *)&mZoomRect+1); + ::ClipCursor((RECT FAR *)&mZoomRect); + mZoomRect.top=mZoomRect.bottom=HIWORD(lParam); + mZoomRect.left=mZoomRect.right=LOWORD(lParam); +} + +void Capture::mouseMove(LPARAM lParam) +{ + HDC hDC; + + if(!mIsInCapture)return; + hDC=::GetDC(mhWnd); + ::DrawFocusRect(hDC,(RECT FAR *)&mZoomRect); + mZoomRect.bottom=HIWORD(lParam); + mZoomRect.right=LOWORD(lParam); + ::DrawFocusRect(hDC,(RECT FAR *)&mZoomRect); + ::ReleaseDC(mhWnd,hDC); +} + +void Capture::leftButtonUp(void) +{ + HDC hDC; + int width; + int height; + int temp; + + if(!mIsInCapture)return; + mIsInCapture=FALSE; + ::ClipCursor(NULL); + ::ReleaseCapture(); + hDC=::GetDC(mhWnd); + ::DrawFocusRect(hDC,(RECT FAR *)&mZoomRect); + if(mZoomRect.left>mZoomRect.right) + { + temp=mZoomRect.left; + mZoomRect.left=mZoomRect.right; + mZoomRect.right=temp; + } + if(mZoomRect.top>mZoomRect.bottom) + { + temp=mZoomRect.top; + mZoomRect.top=mZoomRect.bottom; + mZoomRect.bottom=temp; + } + width=mZoomRect.right-mZoomRect.left; + height=mZoomRect.bottom-mZoomRect.top; + ::DrawFocusRect(hDC,(RECT FAR *)&mZoomRect); + ::ReleaseDC(mhWnd,hDC); + if(width>7 && height>7) + { + mClipRect.right=mZoomRect.right; + mClipRect.left=mZoomRect.left; + mClipRect.top=mZoomRect.top; + mClipRect.bottom=mZoomRect.bottom; + mHasCapture=TRUE; + } +} + +WORD Capture::boundedRect(RECT &boundingRect) +{ + HDC hDC; + + if(!mHasCapture)return FALSE; + boundingRect.right=mClipRect.right; + boundingRect.left=mClipRect.left; + boundingRect.top=mClipRect.top; + boundingRect.bottom=mClipRect.bottom; + hDC=::GetDC(mhWnd); + ::DrawFocusRect(hDC,(RECT FAR *)&mZoomRect); + ::ReleaseDC(mhWnd,hDC); + ::memset((char*)&mZoomRect,0,sizeof(RECT)); + return TRUE; +} + +void Capture::reset(void) +{ + HDC hDC(::GetDC(mhWnd)); + + if(mHasCapture) + { + ::DrawFocusRect(hDC,(RECT FAR *)&mZoomRect); + mHasCapture=FALSE; + } + ::memset((char *)&mZoomRect,0,sizeof(RECT)); + ::ReleaseDC(mhWnd,hDC); +} diff --git a/mdiwin/CAPTURE.HPP b/mdiwin/CAPTURE.HPP new file mode 100644 index 0000000..d3bb5df --- /dev/null +++ b/mdiwin/CAPTURE.HPP @@ -0,0 +1,36 @@ +#ifndef _CAPTURE_HPP_ +#define _CAPTURE_HPP_ +#include + +class Capture +{ +public: + Capture(void); + ~Capture(); + void operator=(HWND hWnd); + void reset(void); + void leftButtonDown(LPARAM lParam); + void leftButtonUp(void); + void mouseMove(LPARAM lParam); + WORD hasRectangle(void)const; + WORD boundedRect(RECT &boundingRect); +private: + HWND mhWnd; + WORD mIsInCapture; + WORD mHasCapture; + RECT mClipRect; + RECT mZoomRect; +}; + +inline +WORD Capture::hasRectangle(void)const +{ + return mHasCapture; +} + +inline +void Capture::operator=(HWND hWnd) +{ + mhWnd=hWnd; +} +#endif diff --git a/mdiwin/CATMULL.CPP b/mdiwin/CATMULL.CPP new file mode 100644 index 0000000..c8d7b7e --- /dev/null +++ b/mdiwin/CATMULL.CPP @@ -0,0 +1,66 @@ +#include + +WORD CatmullRom::performSpline(Vector &sourcePairs,Vector &destPairs) +{ + double a0,a1,a2,a3; + double dx,dx1,dx2; + double dy,dy1,dy2; + double endPointOne,endPointTwo,resamplingPos; + double xPoint; + int clampOne,clampTwo; + int direction; + int destSize((int)destPairs.size()); + int sourceSize((int)sourcePairs.size()); + int inputIndex,index; + + if(sourceSize<2||destSize<2)return FALSE; + if(sourcePairs[0].column()sourcePairs[sourceSize-1].column()) + direction=0; + else direction=1; + } + else + { + if(destPairs[0].column()>sourcePairs[0].column()|| + destPairs[destSize-1].column()endPointTwo)|| + (-1==direction&&resamplingPossourcePairs[inputIndex].column(); + inputIndex++); + if(resamplingPos +#include +#include +#include + +class CatmullRom +{ +public: + CatmullRom(void); + ~CatmullRom(); + WORD performSpline(Vector &sourcePoints,Vector &destPoints); +private: +}; + +inline +CatmullRom::CatmullRom() +{ +} + +inline +CatmullRom::~CatmullRom() +{ +} +#endif diff --git a/mdiwin/CLIPBRD.CPP b/mdiwin/CLIPBRD.CPP new file mode 100644 index 0000000..d435363 --- /dev/null +++ b/mdiwin/CLIPBRD.CPP @@ -0,0 +1,53 @@ +#include + +Clipboard::Clipboard(HWND hOwnerWnd) +: mhOwnerWnd(hOwnerWnd), mhNextViewerWnd(0) +{ + if(!mhOwnerWnd)return; + mhNextViewerWnd=::SetClipboardViewer(mhOwnerWnd); +} + +Clipboard::~Clipboard() +{ + if(!isOkay())return; + ::ChangeClipboardChain(mhOwnerWnd,mhNextViewerWnd); +} + +void Clipboard::changeClipboardChain(WORD message,WPARAM wParam,LPARAM lParam) +{ + if(!isOkay())return; + if((HWND)wParam==mhNextViewerWnd)mhNextViewerWnd=(HWND)LOWORD(lParam); + else ::SendMessage(mhNextViewerWnd,message,wParam,lParam); +} + +WORD Clipboard::drawClipboard(WORD message,WPARAM wParam,LPARAM lParam) +{ + if(!isOkay())return FALSE; + ::SendMessage(mhNextViewerWnd,message,wParam,lParam); + handleClipboardData(); + return TRUE; +} + +void Clipboard::handleClipboardData(void)const +{ +#if 0 + HGLOBAL hGlobalClipboard(0); + BITMAPINFO FAR *lpSourceBitmapInfo; + RGBQUAD FAR *lpRGBQuad; + BYTE FAR *lpDataBytes; + + ::OpenClipboard(mhOwnerWnd); + hGlobalClipboard=::GetClipboardData(CF_DIB); + if(hGlobalClipboard) + { + lpSourceBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(hGlobalClipboard); + if(lpSourceBitmapInfo->bmiHeader.biBitCount==8) + { + lpRGBQuad=(RGBQUAD FAR *)((char FAR *)lpSourceBitmapInfo+sizeof(BITMAPINFOHEADER)); + lpDataBytes=(BYTE FAR *)((BYTE FAR *)lpSourceBitmapInfo+(sizeof(BITMAPINFOHEADER)*256)); + } + ::GlobalUnlock(hGlobalClipboard); + } + ::CloseClipboard(); +#endif +} diff --git a/mdiwin/CLIPBRD.HPP b/mdiwin/CLIPBRD.HPP new file mode 100644 index 0000000..6304a15 --- /dev/null +++ b/mdiwin/CLIPBRD.HPP @@ -0,0 +1,24 @@ +#ifndef _CLIPBOARD_HPP_ +#define _CLIPBOARD_HPP_ +#include + +class Clipboard +{ +public: + Clipboard(HWND hOwnerWnd); + ~Clipboard(); + void changeClipboardChain(WORD message,WPARAM wParam,LPARAM lParam); + WORD drawClipboard(WORD message,WPARAM wParam,LPARAM lParam); +private: + void handleClipboardData(void)const; + WORD isOkay(void)const; + HWND mhOwnerWnd; + HWND mhNextViewerWnd; +}; + +inline +WORD Clipboard::isOkay(void)const +{ + return (mhNextViewerWnd && mhOwnerWnd); +} +#endif // macro guards \ No newline at end of file diff --git a/mdiwin/COLORCNT.HPP b/mdiwin/COLORCNT.HPP new file mode 100644 index 0000000..8ff75e6 --- /dev/null +++ b/mdiwin/COLORCNT.HPP @@ -0,0 +1,102 @@ +#ifndef _COLORCOUNT_HPP_ +#define _COLORCOUNT_HPP_ +#include +class ColorCount +{ +public: + ColorCount(void); + ColorCount(const ColorCount &someColorCount); + ColorCount(COLORREF someColorRef); + ColorCount(COLORREF someColorRef,LONG colorCount); + virtual ~ColorCount(); + void count(LONG newCount); + LONG count(void)const; + void color(COLORREF newColor); + COLORREF color(void)const; + WORD operator==(const ColorCount &someColorCount)const; + WORD operator==(COLORREF someColorRef)const; + WORD operator<(const ColorCount &someColorCount)const; + WORD operator>(const ColorCount &someColorCount)const; +private: + LONG mCount; + COLORREF mColor; +}; + +inline +ColorCount::ColorCount(void) +: mCount(0), mColor(0) +{ +} + +inline +ColorCount::ColorCount(const ColorCount &someColorCount) +: mCount(someColorCount.mCount), mColor(someColorCount.mColor) +{ +} + +inline +ColorCount::ColorCount(COLORREF someColorRef) +: mColor(someColorRef), mCount(1) +{ +} + +inline +ColorCount::ColorCount(COLORREF someColorRef,LONG colorCount) +: mColor(someColorRef), mCount(colorCount) +{ +} + +inline +ColorCount::~ColorCount() +{ +} + +inline +void ColorCount::count(LONG newCount) +{ + mCount=newCount; +} + +inline +LONG ColorCount::count(void)const +{ + return mCount; +} + +inline +void ColorCount::color(COLORREF newColor) +{ + mColor=newColor; +} + +inline +COLORREF ColorCount::color(void)const +{ + return mColor; +} + +inline +WORD ColorCount::operator==(const ColorCount &someColorCount)const +{ + return mColor==someColorCount.mColor; +} + +inline +WORD ColorCount::operator<(const ColorCount &someColorCount)const +{ + return mCount(const ColorCount &someColorCount)const +{ + return mCount>someColorCount.mCount; +} + +inline +WORD ColorCount::operator==(COLORREF someColor)const +{ + return mColor==someColor; +} +#endif + \ No newline at end of file diff --git a/mdiwin/CONVEX.CPP b/mdiwin/CONVEX.CPP new file mode 100644 index 0000000..d2d7842 --- /dev/null +++ b/mdiwin/CONVEX.CPP @@ -0,0 +1,90 @@ +#include +#include +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +Convex::Convex() +: mIsInThread(TRUE) +{ +} + +Convex::~Convex() +{ +} + +HGLOBAL Convex::performConvex(WORD &width,WORD &height,UHUGE *lpImage) +{ + HGLOBAL hGlobalSource; + HGLOBAL hGlobalImage; + UHUGE *ptrSource; + UHUGE *ptrImage; + POINT tempPoint; + double scaleFactor; + double tempFactor; + mWidth=width; + mHeight=height; + mxHalf=mWidth/2; + myHalf=mHeight/2; + + if(!lpImage)return 0; + hGlobalSource=Main::upsideDown(width,height,lpImage); + ptrSource=(UHUGE*)::GlobalLock(hGlobalSource); + hGlobalImage=::GlobalAlloc(GMEM_FIXED,(LONG)width*(LONG)height); + ptrImage=(UHUGE *)::GlobalLock(hGlobalImage); + Main::hmemset(ptrImage,0,(LONG)width*(LONG)height); + for(int y=0;y=width)continue; + if(tempPoint.y>=height)continue; + *(ptrImage+((LONG)tempPoint.y*(LONG)width)+(LONG)tempPoint.x)= + *(ptrSource+((LONG)y*(LONG)width)+(LONG)x); + if(!yieldTask())return emergencyCleanup(hGlobalSource,hGlobalImage); + } + } + ::GlobalUnlock(hGlobalSource); + ::GlobalFree(hGlobalSource); + hGlobalSource=Main::upsideDown(width,height,ptrImage); + ::GlobalUnlock(hGlobalImage); + ::GlobalFree(hGlobalImage); + return hGlobalSource; +} + +WORD Convex::yieldTask(void)const +{ + MSG msg; + + while(::PeekMessage((MSG far *)&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + return mIsInThread; +} + +HGLOBAL Convex::emergencyCleanup(HGLOBAL hGlobalSource,HGLOBAL hGlobal)const +{ + ::GlobalUnlock(hGlobalSource); + ::GlobalFree(hGlobalSource); + ::GlobalUnlock(hGlobal); + ::GlobalFree(hGlobal); + return FALSE; +} diff --git a/mdiwin/CONVEX.HPP b/mdiwin/CONVEX.HPP new file mode 100644 index 0000000..401d048 --- /dev/null +++ b/mdiwin/CONVEX.HPP @@ -0,0 +1,62 @@ +#ifndef _CONVEX_HPP_ +#define _CONVEX_HPP_ +#include +#include + +class Convex +{ +public: + Convex(void); + ~Convex(void); + HGLOBAL performConvex(WORD &width,WORD &height,UHUGE *lpImage); + void cancelThread(void); + WORD isCancelled(void)const; +private: + void cartesianPoint(POINT &imagePoint)const; + void imagePoint(POINT &cartesianPoint)const; + void setPoint(int x,int y,POINT &somePoint)const; + void reportTime(void)const; + WORD yieldTask(void)const; + HGLOBAL emergencyCleanup(HGLOBAL hGlobalSource,HGLOBAL hGlobal)const; + + WORD mIsInThread; + WORD mWidth; + WORD mHeight; + WORD mxHalf; + WORD myHalf; +}; + +inline +void Convex::cartesianPoint(POINT &imagePoint)const +{ + imagePoint.x-=mxHalf; + imagePoint.y=(mHeight-1)-(myHalf+imagePoint.y); +} + +inline +void Convex::imagePoint(POINT &cartesianPoint)const +{ + cartesianPoint.x+=mxHalf; + cartesianPoint.y=(mHeight-1)-(myHalf+cartesianPoint.y); +} + +inline +void Convex::setPoint(int x,int y,POINT &point)const +{ + point.x=x; + point.y=y; +} + +inline +void Convex::cancelThread(void) +{ + mIsInThread=FALSE; +} + +inline +WORD Convex::isCancelled(void)const +{ + return !mIsInThread; +} +#endif + \ No newline at end of file diff --git a/mdiwin/CRSCTRL.CPP b/mdiwin/CRSCTRL.CPP new file mode 100644 index 0000000..19e7cad --- /dev/null +++ b/mdiwin/CRSCTRL.CPP @@ -0,0 +1,15 @@ +#include + +void CursorControl::waitCursor(int setState) +{ + if(setState) + { + mhCursor=::SetCursor(::LoadCursor(NULL,IDC_WAIT)); + ::ShowCursor(TRUE); + } + else + { + ::ShowCursor(FALSE); + ::SetCursor(mhCursor); + } +} \ No newline at end of file diff --git a/mdiwin/CRSCTRL.HPP b/mdiwin/CRSCTRL.HPP new file mode 100644 index 0000000..71b736c --- /dev/null +++ b/mdiwin/CRSCTRL.HPP @@ -0,0 +1,24 @@ +#ifndef _CURSORCONTROL_HPP_ +#define _CURSORCONTROL_HPP_ +#include +class CursorControl +{ +public: + CursorControl(); + virtual ~CursorControl(); + void waitCursor(int setState); +private: + HCURSOR mhCursor; +}; + +inline +CursorControl::CursorControl() +: mhCursor(0) +{ +} + +inline +CursorControl::~CursorControl() +{ +} +#endif \ No newline at end of file diff --git a/mdiwin/DISSOLVE.CPP b/mdiwin/DISSOLVE.CPP new file mode 100644 index 0000000..a56a5a4 --- /dev/null +++ b/mdiwin/DISSOLVE.CPP @@ -0,0 +1,177 @@ +#include +#include +#include + +WORD CrossDissolve::crossDissolve(Block &srcImage,Block &dstImage) +{ + Block dissolveSchedule; + size_t srcSize((int)srcImage.size()); + + if(!srcSize)return FALSE; + Schedule::createSchedule(dissolveSchedule,srcSize); + for(int i=0;i dissolveSchedule; + + if(!nFrames)return FALSE; + Schedule::createSchedule(dissolveSchedule,nFrames); + for(int i=0;i &sourceBlock,Block &destBlock,Block &dissolveSchedule) +{ + size_t size((int)sourceBlock.size()); + + if(!size)return FALSE; + if(size!=destBlock.size())return FALSE; + if(size!=dissolveSchedule.size())return FALSE; + for(int i=0;iisOkay()||!lpDstBitmap->isOkay()) + { + delete lpSrcBitmap; + delete lpDstBitmap; + return returnCode; + } + hGlobalSrcImageData=lpSrcBitmap->lockedImageData(); + hGlobalDstImageData=lpDstBitmap->lockedImageData(); + hGlobalSrcBitmapInfo=lpSrcBitmap->lockedBitmapInfo(); + hGlobalDstBitmapInfo=lpDstBitmap->lockedBitmapInfo(); + lpSrcImageData=(UHUGE*)::GlobalLock(hGlobalSrcImageData); + lpDstImageData=(UHUGE*)::GlobalLock(hGlobalDstImageData); + lpSrcBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(hGlobalSrcBitmapInfo); + lpDstBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(hGlobalDstBitmapInfo); + if(lpSrcBitmapInfo->bmiHeader.biWidth==lpDstBitmapInfo->bmiHeader.biWidth&& + lpSrcBitmapInfo->bmiHeader.biHeight==lpDstBitmapInfo->bmiHeader.biHeight&& + ((8==lpSrcBitmapInfo->bmiHeader.biBitCount)&&(8==lpDstBitmapInfo->bmiHeader.biBitCount))) + { + sizeImage=(LONG)lpSrcBitmapInfo->bmiHeader.biWidth*(LONG)lpSrcBitmapInfo->bmiHeader.biHeight; + hGlobalHistogram=::GlobalAlloc(GMEM_FIXED,sizeImage*(LONG)sizeof(LONG)); + lpHistogram=(LHUGE*)::GlobalLock(hGlobalHistogram); + for(LONG imageOffset=0;imageOffsetbmiColors[*(lpSrcImageData+imageOffset)]; + dstRGB=&lpDstBitmapInfo->bmiColors[*(lpDstImageData+imageOffset)]; + outRGB.rgbRed=srcRGB->rgbRed*srcWeight+dstRGB->rgbRed*dstWeight; + outRGB.rgbGreen=srcRGB->rgbGreen*srcWeight+dstRGB->rgbGreen*dstWeight; + outRGB.rgbBlue=srcRGB->rgbBlue*srcWeight+dstRGB->rgbBlue*dstWeight; + *(lpHistogram+imageOffset)=RGB((BYTE)(outRGB.rgbRed/100L),(BYTE)(outRGB.rgbGreen/100L),(BYTE)(outRGB.rgbBlue/100L)); + } + delete lpDstBitmap; + hPalette=createBlendedPalette(lpHistogram,sizeImage); + for(imageOffset=0;imageOffset sortedBIT32; + QuickSort sortedColorCount; + Block blockedColors; + Vector vectoredColors; + Vector vectoredColorCount; + + vectoredColors.size(sizeImage); + for(LONG i=0;i &vectoredColors,Block &blockedColors) +{ + BIT32 prevColor; + LONG equalColors; + LONG sizeImage(vectoredColors.size()); + + for(LONG i=0;i &blockedColors) +{ + PALETTEENTRY FAR *lpPaletteEntry; + LOGPALETTE FAR *lpLogPalette; + HGLOBAL hGlobalPalette; + HPALETTE hPalette; + size_t paletteSize((int)blockedColors.size()); + + while((paletteSize=(int)blockedColors.size())palNumEntries=paletteSize; + lpLogPalette->palVersion=0x300; + for(int i=0;ipalPalEntry[i]; + lpPaletteEntry->peRed=GetRValue(blockedColors[i].color()); + lpPaletteEntry->peGreen=GetGValue(blockedColors[i].color()); + lpPaletteEntry->peBlue=GetBValue(blockedColors[i].color()); + lpPaletteEntry->peFlags=0; + } + hPalette=::CreatePalette((LOGPALETTE FAR *)lpLogPalette); + ::GlobalUnlock(hGlobalPalette); + ::GlobalFree(hGlobalPalette); + return hPalette; +} + diff --git a/mdiwin/DISSOLVE.HPP b/mdiwin/DISSOLVE.HPP new file mode 100644 index 0000000..085cf7f --- /dev/null +++ b/mdiwin/DISSOLVE.HPP @@ -0,0 +1,59 @@ +#ifndef _CROSSDISSOLVE_HPP_ +#define _CROSSDISSOLVE_HPP_ +#include +#include +#include +#include +#include +#include +#include +#include + +class RGBLong +{ +public: + friend class CrossDissolve; +private: + RGBLong(void); + virtual ~RGBLong(); + LONG rgbRed; + LONG rgbGreen; + LONG rgbBlue; +}; + +inline +RGBLong::RGBLong(void) +{ +} + +inline +RGBLong::~RGBLong() +{ +} + +class CrossDissolve +{ +public: + CrossDissolve(void); + virtual ~CrossDissolve(); + WORD crossDissolve(Block &srcImage,Block &dstImage); + WORD crossDissolve(String &srcImage,String &dstImage,WORD nFrames); + WORD crossDissolve(Block &sourceBlock,Block &destBlock,Block &dissolveSchedule); +private: + typedef RGBLong RGBLONG; + HPALETTE createBlendedPalette(LHUGE *lpImage,LONG sizeImage); + HPALETTE createPalette(Block &blockedColors); + WORD crossImage(String &srcImageString,String &dstImageString,LONG srcWeight,LONG dstWeight); + void condenseBlock(Vector &vectoredColors,Block &blockedColors); +}; + +inline +CrossDissolve::CrossDissolve(void) +{ +} + +inline +CrossDissolve::~CrossDissolve() +{ +} +#endif diff --git a/mdiwin/DRAWBMP.CPP b/mdiwin/DRAWBMP.CPP new file mode 100644 index 0000000..6e263a4 --- /dev/null +++ b/mdiwin/DRAWBMP.CPP @@ -0,0 +1,66 @@ +#include + +DrawBitmap::DrawBitmap(void) +{ +} + +DrawBitmap::~DrawBitmap() +{ +} + +void DrawBitmap::drawBitmap(HBITMAP hBitmap)const +{ + if(!hBitmap)return; + HWND hFocusWnd(::GetDesktopWindow()); + drawBitmap(hFocusWnd,hBitmap); +} + +void DrawBitmap::drawBitmap(HWND hDrawWindow,HBITMAP hBitmap)const +{ + HDC hDC; + RECT windowRect; + BITMAP bm; + + if(!hBitmap||!hDrawWindow)return; + hDC=::GetDC(hDrawWindow); + ::GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&bm); + ::GetWindowRect(hDrawWindow,(RECT FAR *)&windowRect); + windowRect.left=(((windowRect.right-windowRect.left))/2)-(bm.bmWidth/2)-1; + windowRect.top=(((windowRect.bottom-windowRect.top))/2)-(bm.bmHeight/2)-1; + windowRect.right=bm.bmWidth; + windowRect.bottom-bm.bmHeight; + drawBitmap(hDC,hBitmap,windowRect,FALSE); + ::ReleaseDC(hDrawWindow,hDC); +} + +void DrawBitmap::drawBitmap(HDC hDC,HBITMAP hBitmap,RECT &drawRect,int initRect)const +{ + HDC hMemDC; + + if(!hBitmap)return; + if(initRect) + { + BITMAP bm; + ::GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&bm); + drawRect.right=bm.bmWidth; + drawRect.bottom=bm.bmHeight; + } + hMemDC=::CreateCompatibleDC(hDC); + ::SelectObject(hMemDC,hBitmap); + ::BitBlt(hDC,drawRect.left,drawRect.top,drawRect.right,drawRect.bottom,hMemDC,0,0,SRCCOPY); + ::DeleteDC(hMemDC); + return; +} + +void DrawBitmap::centerRect(HBITMAP hBitmap,RECT &windowRect)const +{ + BITMAP bm; + + if(!hBitmap)return; + ::GetObject(hBitmap,sizeof(bm),(LPSTR)&bm); + ::GetWindowRect(::GetDesktopWindow(),(RECT FAR *)&windowRect); + windowRect.left=(((windowRect.right-windowRect.left))/2)-(bm.bmWidth/2)-1; + windowRect.top=(((windowRect.bottom-windowRect.top))/2)-(bm.bmHeight/2)-1; + windowRect.right=bm.bmWidth+2; + windowRect.bottom=bm.bmHeight+2; +} \ No newline at end of file diff --git a/mdiwin/DRAWBMP.HPP b/mdiwin/DRAWBMP.HPP new file mode 100644 index 0000000..e52f355 --- /dev/null +++ b/mdiwin/DRAWBMP.HPP @@ -0,0 +1,16 @@ +#ifndef _DRAWBITMAP_HPP_ +#define _DRAWBITMAP_HPP_ +#include + +class DrawBitmap +{ +public: + DrawBitmap(void); + virtual ~DrawBitmap(); + void drawBitmap(HBITMAP hBitmap)const; + void drawBitmap(HWND hWnd,HBITMAP hBitmap)const; + void drawBitmap(HDC hDC,HBITMAP hBitmap,RECT &drawRect,int initRect=TRUE)const; + void centerRect(HBITMAP hBitmap,RECT &bitmapRect)const; +private: +}; +#endif diff --git a/mdiwin/DSLVDLG.CPP b/mdiwin/DSLVDLG.CPP new file mode 100644 index 0000000..398e489 --- /dev/null +++ b/mdiwin/DSLVDLG.CPP @@ -0,0 +1,229 @@ +#include +#include +#include +#include +#include +#include + +AdjustDissolve::AdjustDissolve(HWND hParent) +: mhParent(hParent), mhInstance(Main::processInstance(hParent)) +{ +} + +AdjustDissolve::~AdjustDissolve() +{ +} + +WORD AdjustDissolve::adjustDissolve(Block &dissolveSchedule,WORD nFrames) +{ + WORD returnCode(FALSE); + + if(!nFrames)return returnCode; + if(dissolveSchedule.size()) + { + mDissolveSchedule=dissolveSchedule; + mFrames=(int)mDissolveSchedule.size(); + } + else mFrames=nFrames; + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Dissolve",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); + if(returnCode)dissolveSchedule=mDissolveSchedule; + else dissolveSchedule.remove(); + return returnCode; +} + +int AdjustDissolve::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,mhInstance), + String(STRING_BITMAPOKNOFUP,mhInstance), + String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,mhInstance), + String(STRING_BITMAPCANOFUP,mhInstance), + String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + initializeList(); + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + return TRUE; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + return TRUE; + } + break; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case DSLV_LIST : + if(LBN_DBLCLK==HIWORD(lParam))handleEditEvent(); + break; + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + case IDOK : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + return TRUE; + } + } + return FALSE; +} + +void AdjustDissolve::initializeList(void) +{ + String formattingString; + size_t size; + + formattingString.reserve(String::MaxString); + if(!mDissolveSchedule.size())Schedule::createSchedule(mDissolveSchedule,mFrames); + size=(int)mDissolveSchedule.size(); + ::SendDlgItemMessage(GetHandle(),DSLV_LIST,LB_RESETCONTENT,0,0L); + ::SendDlgItemMessage(GetHandle(),DSLV_LIST,WM_SETREDRAW,FALSE,0L); + for(int i=0;iCtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + return TRUE; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + return TRUE; + } + break; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + case IDOK : + if(!captureDissolveSchedule()) + { + ::MessageBeep(0); + break; + } + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + return TRUE; + } + } + return FALSE; +} + +WORD EditItem::captureDissolveSchedule(void) +{ + String tempString; + + ::GetDlgItemText(GetHandle(),EDITITEM_SOURCE,tempString,String::MaxString); + mDissolveItem.srcWeight(::atof(tempString)); + ::GetDlgItemText(GetHandle(),EDITITEM_DESTINATION,tempString,String::MaxString); + mDissolveItem.dstWeight(::atof(tempString)); + ::GetDlgItemText(GetHandle(),EDITITEM_REPEAT,tempString,String::MaxString); + mDissolveItem.count(::atoi(tempString)); + return mDissolveItem.isValid(); +} + +void EditItem::displayDissolveSchedule(void)const +{ + String tempString; + + ::sprintf(tempString,"%7.4lf",mDissolveItem.srcWeight()); + ::SetDlgItemText(GetHandle(),EDITITEM_SOURCE,tempString); + ::sprintf(tempString,"%7.4lf",mDissolveItem.dstWeight()); + ::SetDlgItemText(GetHandle(),EDITITEM_DESTINATION,tempString); + ::sprintf(tempString,"%d",mDissolveItem.count()); + ::SetDlgItemText(GetHandle(),EDITITEM_REPEAT,tempString); +} + \ No newline at end of file diff --git a/mdiwin/DSLVDLG.HPP b/mdiwin/DSLVDLG.HPP new file mode 100644 index 0000000..ba61430 --- /dev/null +++ b/mdiwin/DSLVDLG.HPP @@ -0,0 +1,42 @@ +#ifndef _DISSOLVEDIALOG_HPP_ +#define _DISSOLVEDIALOG_HPP_ +#include +#include +#include + +class EditItem : public DWindow +{ +public: + EditItem(HWND hParent); + ~EditItem(); + WORD editItem(Schedule &dissolveItem); +private: + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + WORD captureDissolveSchedule(void); + void displayDissolveSchedule(void)const; + + Schedule mDissolveItem; + HINSTANCE mhInstance; + HWND mhParent; +}; + +class AdjustDissolve : public DWindow +{ +public: + AdjustDissolve(HWND hParent); + ~AdjustDissolve(); + WORD adjustDissolve(Block &dissolveSchedule,WORD nFrames); +private: + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void handleEditEvent(void); + void initializeList(void); + + Block mDissolveSchedule; + WORD mFrames; + HINSTANCE mhInstance; + HWND mhParent; +}; +#endif + + + \ No newline at end of file diff --git a/mdiwin/DWINDOW.CPP b/mdiwin/DWINDOW.CPP new file mode 100644 index 0000000..fcfee64 --- /dev/null +++ b/mdiwin/DWINDOW.CPP @@ -0,0 +1,57 @@ +#include + +DWindow::DWindow() +: mhWnd(0) +{ +} + +DWindow::~DWindow() +{ + if(GetHandle())::DestroyWindow(GetHandle()); +} + +LONG FAR PASCAL DWindow::DialogProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) +{ + int returnCode; + DWindow *pDWindow=DWindow::GetPointer(hWnd); + if(0==pDWindow) + { + if(WM_INITDIALOG==message) + { + pDWindow=(DWindow*)lParam; + DWindow::SetPointer(hWnd,pDWindow); + pDWindow->SetHandle(hWnd); + return pDWindow->DlgProc(message,wParam,lParam); + } + return FALSE; + } + returnCode=pDWindow->DlgProc(message,wParam,lParam); + if(WM_NCDESTROY==message) + { +#if defined (__LARGE__) || defined (__COMPACT__) + ::RemoveProp(hWnd,"HIWORD"); +#endif + ::RemoveProp(hWnd,(LPSTR)"LOWORD"); + pDWindow->SetHandle(0); + } + return returnCode; +} + +#if defined (__LARGE__) || defined (__COMPACT__) +DWindow *DWindow::GetPointer(HWND hWnd) +{ + HANDLE handleSegment; + HANDLE handleOffset; + + handleSegment=::GetProp(hWnd,(LPSTR)"HIWORD"); + handleOffset=::GetProp(hWnd,(LPSTR)"LOWORD"); + return (DWindow*)(MK_FP(handleSegment,handleOffset)); +} + +void DWindow::SetPointer(HWND hWnd,DWindow *pDWindow) +{ + ::SetProp(hWnd,"HIWORD",(HANDLE)FP_SEG(pDWindow)); + ::SetProp(hWnd,"LOWORD",(HANDLE)FP_OFF(pDWindow)); +} +#endif + \ No newline at end of file diff --git a/mdiwin/DWINDOW.HPP b/mdiwin/DWINDOW.HPP new file mode 100644 index 0000000..e299a9e --- /dev/null +++ b/mdiwin/DWINDOW.HPP @@ -0,0 +1,60 @@ +#ifndef _DWINDOW_HPP_ +#define _DWINDOW_HPP_ +#include +#include +#include +#include + +class DWindow : public CursorControl +{ +public: + DWindow(); + virtual ~DWindow(); + HWND GetHandle(void)const; + int Show(int nCmdShow); +protected: +// static int FAR PASCAL _export DialogProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); + __declspec(dllexport) static LONG FAR PASCAL DialogProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); +private: + static DWindow *DWindow::GetPointer(HWND hWnd); + static void DWindow::SetPointer(HWND hWnd,DWindow *pDWindow); + virtual int DlgProc(UINT message,WPARAM wParam,LPARAM lParam)=0; + void SetHandle(HWND hWnd); + HWND mhWnd; +}; + +inline +HWND DWindow::GetHandle(void)const +{ + if(::IsWindow(mhWnd))return mhWnd; + return 0; +} + +inline +void DWindow::SetHandle(HWND hWnd) +{ + mhWnd=hWnd; +} + +inline +int DWindow::Show(int nCmdShow) +{ + if(!GetHandle())return FALSE; + return ::ShowWindow(GetHandle(),nCmdShow); +} + +#if defined (__SMALL__) || defined (__MEDIUM__) || defined (__FLAT__) +inline +DWindow *DWindow::GetPointer(HWND hWnd) +{ + return (DWindow*)::GetProp(hWnd,(LPSTR)"LOWORD"); +} + +inline +void DWindow::SetPointer(HWND hWnd,DWindow *pDWindow) +{ + ::SetProp(hWnd,(LPSTR)"LOWORD",(HANDLE)(pDWindow)); +} +#endif +#endif + \ No newline at end of file diff --git a/mdiwin/FACTOR.CPP b/mdiwin/FACTOR.CPP new file mode 100644 index 0000000..a0a3f0e --- /dev/null +++ b/mdiwin/FACTOR.CPP @@ -0,0 +1,184 @@ +#include +#include +#include +#include +#include +#include +#include + +Factor::Factor(HWND hParent,const char *caption) +: mhParent(hParent), mWidthFactor(0.00), mWidthIncremental(0.00), + mWidthOperation(None), mHeightFactor(0.00), mHeightIncremental(0.00), + mHeightOperation(None), mhInstance(Main::processInstance(hParent)) +{ + ::strcpy(mCaption,caption); +} + +Factor::~Factor() +{ +} + +WORD Factor::showFactor(double &widthFactor,double &heightFactor, + double &widthIncremental,Operation &widthOperation, + double &heightIncremental,Operation &heightOperation) +{ + WORD returnCode; + + mFactorType=Incremental; + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Factor",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); + if(!returnCode)return FALSE; + widthFactor=mWidthFactor; + widthIncremental=mWidthIncremental; + widthOperation=mWidthOperation; + heightFactor=mHeightFactor; + heightIncremental=mHeightIncremental; + heightOperation=mHeightOperation; + return TRUE; +} + +WORD Factor::showFactor(double &widthFactor,double &heightFactor) +{ + WORD returnCode; + + mFactorType=NonIncremental; + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Factor",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); + if(!returnCode)return FALSE; + widthFactor=mWidthFactor; + heightFactor=mHeightFactor; + return TRUE; +} + +void Factor::initializeStrings(void) +{ + mWidthStringIndex=0; + mHeightStringIndex=0; + mWidthStrings.insert(&String("+=")); + mWidthStrings.insert(&String("-=")); + mWidthStrings.insert(&String("\\=")); + mWidthStrings.insert(&String("*=")); + mHeightStrings.insert(&mWidthStrings[0]); + mHeightStrings.insert(&mWidthStrings[1]); + mHeightStrings.insert(&mWidthStrings[2]); + mHeightStrings.insert(&mWidthStrings[3]); +} + +void Factor::currentOperation(WORD stringIndex,Operation &operation)const +{ + switch(stringIndex) + { + case 0 : + operation=Add; + break; + case 1 : + operation=Subtract; + break; + case 2 : + operation=Divide; + break; + case 3 : + operation=Multiply; + break; + } +} + +int Factor::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + { + mWidthStrings.remove(); + mHeightStrings.remove(); + if(Incremental==mFactorType) + { + RECT clientRect; + + ::GetWindowRect(GetHandle(),(RECT FAR *)&clientRect); + ::MoveWindow(GetHandle(),clientRect.left,clientRect.top,407,148,TRUE); + initializeStrings(); + currentOperation(mWidthStringIndex,mWidthOperation); + currentOperation(mHeightStringIndex,mHeightOperation); + ::SetDlgItemText(GetHandle(),FACTOR_WOPSTRING,(LPSTR)mWidthStrings[mWidthStringIndex]); + ::SetDlgItemText(GetHandle(),FACTOR_HOPSTRING,(LPSTR)mHeightStrings[mHeightStringIndex]); + } + ::SetWindowText(GetHandle(),(LPSTR)mCaption); + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,mhInstance), + String(STRING_BITMAPOKNOFUP,mhInstance), + String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,mhInstance), + String(STRING_BITMAPCANOFUP,mhInstance), + String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + } + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + break; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + break; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case FACTOR_WIDTHOP : + { + LRESULT checkState; + if(BN_CLICKED==HIWORD(lParam)) + { + if(!mWidthStrings.size())break; + if(++mWidthStringIndex>=mWidthStrings.size())mWidthStringIndex=0; + checkState=::SendDlgItemMessage(GetHandle(),FACTOR_WIDTHOP,BM_GETCHECK,0,0L); + ::SendDlgItemMessage(GetHandle(),FACTOR_WIDTHOP,BM_SETCHECK,!checkState,0L); + ::SetDlgItemText(GetHandle(),FACTOR_WOPSTRING,(LPSTR)mWidthStrings[mWidthStringIndex]); + ::SendDlgItemMessage(GetHandle(),FACTOR_WIDTHOP,BM_SETCHECK,!(!checkState),0L); + currentOperation(mWidthStringIndex,mWidthOperation); + } + } + break; + case FACTOR_HEIGHTOP : + { + LRESULT checkState; + if(BN_CLICKED==HIWORD(wParam)) + { + if(!mHeightStrings.size())break; + if(++mHeightStringIndex>=mHeightStrings.size())mHeightStringIndex=0; + checkState=::SendDlgItemMessage(GetHandle(),FACTOR_HEIGHTOP,BM_GETCHECK,0,0L); + ::SendDlgItemMessage(GetHandle(),FACTOR_HEIGHTOP,BM_SETCHECK,!checkState,0L); + ::SetDlgItemText(GetHandle(),FACTOR_HOPSTRING,(LPSTR)mHeightStrings[mHeightStringIndex]); + ::SendDlgItemMessage(GetHandle(),FACTOR_HEIGHTOP,BM_SETCHECK,!(!checkState),0L); + currentOperation(mHeightStringIndex,mHeightOperation); + } + } + break; + case IDOK : + { + char buffer[50]; + ::GetDlgItemText(GetHandle(),FACTOR_WIDTH,(LPSTR)buffer,sizeof(buffer)-1); + mWidthFactor=::atof(buffer); + ::GetDlgItemText(GetHandle(),FACTOR_HEIGHT,(LPSTR)buffer,sizeof(buffer)-1); + mHeightFactor=::atof(buffer); + ::GetDlgItemText(GetHandle(),FACTOR_WIDTHINCR,(LPSTR)buffer,sizeof(buffer)-1); + mWidthIncremental=::atof(buffer); + ::GetDlgItemText(GetHandle(),FACTOR_HEIGHTINCR,(LPSTR)buffer,sizeof(buffer)-1); + mHeightIncremental=::atof(buffer); + } + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + return TRUE; + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + \ No newline at end of file diff --git a/mdiwin/FACTOR.HPP b/mdiwin/FACTOR.HPP new file mode 100644 index 0000000..3126381 --- /dev/null +++ b/mdiwin/FACTOR.HPP @@ -0,0 +1,41 @@ +#ifndef _FACTOR_HPP_ +#define _FACTOR_HPP_ +#include +#include +#include +#include + +class Factor : public DWindow +{ +public: + enum Type{Incremental,NonIncremental}; + enum Operation{Add,Subtract,Multiply,Divide,None}; + Factor(HWND hParent,const char *caption); + ~Factor(); + WORD showFactor(double &widthFactor,double &heightFactor); + WORD showFactor(double &widthFactor,double &heightFactor, + double &widthIncremental,Operation &widthOperation, + double &heightIncremental, Operation &heightOperation); +private: + enum{MaxCaption=70}; + virtual int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void initializeStrings(void); + void currentOperation(WORD stringIndex,Operation &operation)const; + + HWND mhParent; + HINSTANCE mhInstance; + char mCaption[MaxCaption]; + double mWidthFactor; + double mWidthIncremental; + Operation mWidthOperation; + double mHeightFactor; + double mHeightIncremental; + Operation mHeightOperation; + Type mFactorType; + Block mWidthStrings; + Block mHeightStrings; + WORD mWidthStringIndex; + WORD mHeightStringIndex; +}; +#endif + \ No newline at end of file diff --git a/mdiwin/FILEHELP.BAK b/mdiwin/FILEHELP.BAK new file mode 100644 index 0000000..7cfc131 --- /dev/null +++ b/mdiwin/FILEHELP.BAK @@ -0,0 +1,349 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +SelectFile::SelectFile(HWND hParent,Mode readWrite) +: mwFileAttribute((WORD)DefaultAttribute), mhParent(hParent), + mMode(readWrite), mhInstance(Main::processInstance(mhParent)) +{ + mszFileName[0]='\0'; + ::strcpy(mszDefExt,".DAT"); + ::strcpy(mszFileSpec,"*.*"); + mLastDrive=::getdisk(); + ::getcwd(mszDirectory,sizeof(mszDirectory)); +} +SelectFile::~SelectFile() +{ + char Path[132]; + ::wsprintf(Path,"%c:\\",mLastDrive+65); + ::setdisk(mLastDrive); + ::strcat(Path,mszDirectory); + ::chdir(Path); +} + +int SelectFile::GetFileName(char *szNameBuf,WORD nMaxChars) +{ + WORD returnCode; + + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"FileSelect",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); + if(returnCode) + ::strncpy(szNameBuf,mszFileName,nMaxChars>sizeof(mszFileName)?sizeof(mszFileName):nMaxChars); + return returnCode; +} + +void SelectFile::Initialize() +{ + ::SendDlgItemMessage(GetHandle(),IDS_FNAME,EM_LIMITTEXT,80,0L); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + ::DlgDirList(GetHandle(),mszFileSpec,IDS_FLIST,IDS_FPATH,mwFileAttribute); + waitCursor(FALSE); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SendMessage(GetDlgItem(GetHandle(),IDS_FLIST),LB_GETTEXT,0,(LONG)mszFileName); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETCURSEL,0,0L); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::SelChange() +{ +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::DoubleClick() +{ + waitCursor(TRUE); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + { + ::lstrcat(mszFileName,mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + ::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else + { + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); + ::SendMessage(GetHandle(),WM_COMMAND,IDOK,0L); + } + waitCursor(FALSE); +} + +int SelectFile::CheckFileNameSpec() +{ + ::GetDlgItemText(GetHandle(),IDS_FNAME,mszFileName,sizeof(mszFileName)); + mnEditLen=::lstrlen(mszFileName); + mcLastChar=*::AnsiPrev(mszFileName,mszFileName+mnEditLen); + if(mcLastChar=='\\'||mcLastChar==':')::lstrcat(mszFileName,mszFileSpec); + if(lstrchr(mszFileName,'*')||lstrchr(mszFileName,'?')) + { + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else ::MessageBeep(0); + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + return FALSE; + } + ::lstrcat(lstrcat(mszFileName,"\\"),mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + waitCursor(FALSE); + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + return FALSE; + } + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + mszFileName[mnEditLen]='\0'; + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + if(Write==mMode) + { + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_WRITE|OF_CREATE))) + { + ::MessageBeep(0); + return FALSE; + } + ::_lclose(mfd); + ::unlink(mszFileName); + return TRUE; + } + ::lstrcat(mszFileName,mszDefExt); + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + ::MessageBeep(0); + return FALSE; + } + else ::_lclose(mfd); + } + else ::_lclose(mfd); + ::strcpy(mszFileName,mPof.szPathName); + ::OemToAnsi(mszFileName,mszFileName); + if(Write==mMode) + { + ::MessageBeep(0); + switch( + ::MessageBox(GetHandle(),(LPSTR)"Overwrite this file?",(LPSTR)mszFileName,MB_OKCANCEL)) + { + case IDOK : + return TRUE; + case IDCANCEL : + return FALSE; + } + } + return TRUE; +} + +LPSTR SelectFile::lstrchr(LPSTR str,char ch) +{ + while(*str) + { + if(ch==*str)return str; + str=::AnsiNext(str); + } + return NULL; +} + +LPSTR SelectFile::lstrrchr(LPSTR str,char ch) +{ + LPSTR strl=str+lstrlen(str); + + do + { + if(ch==*strl)return strl; + strl=::AnsiPrev(str,strl); + }while(strl>str); + return NULL; +} + +int SelectFile::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + { + int TabStopList[3]; + WORD DlgWidthUnits; + String windowText; + + DlgWidthUnits=LOWORD(::GetDialogBaseUnits())/4; + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,mhInstance), + String(STRING_BITMAPOKNOFUP,mhInstance), + String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,mhInstance), + String(STRING_BITMAPCANOFUP,mhInstance), + String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Initialize(); + TabStopList[0]=DlgWidthUnits*13*2; + TabStopList[1]=DlgWidthUnits*28*2; + TabStopList[2]=DlgWidthUnits*38*2; + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETTABSTOPS,3,(LONG)(LPSTR)TabStopList); + ::GetDlgItemText(GetHandle(),(Write==mMode?IDS_FILESAVE:IDS_FILEOPEN),windowText,String::MaxString); + ::SetWindowText(GetHandle(),windowText); + } + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + return TRUE; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + return TRUE; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDS_FLIST : + switch(GET_WM_COMMAND_CMD(wParam,lParam)) + { + case LBN_SELCHANGE : + SelChange(); + return TRUE; + case LBN_DBLCLK : + DoubleClick(); + return TRUE; + } + break; + case IDS_FNAME : + if(GET_WM_COMMAND_CMD(wParam,lParam)==EN_CHANGE) + ::EnableWindow(::GetDlgItem(GetHandle(),IDOK), + (BOOL)::SendMessage(GET_WM_COMMAND_HWND(wParam,lParam), + WM_GETTEXTLENGTH,0,0L)); + return TRUE; + case IDOK : + if(CheckFileNameSpec()) + { + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + } + return TRUE; + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + +void SelectFile::SetExtended() +{ + HCURSOR hCursor; + ffblk mffblk; + char szBuffer[100]; + char szFormat[100]; + char minBuf[5]; + char hrBuf[5]; + char moBuf[5]; + char dayBuf[5]; + int nIndex=0; + unsigned Year; + unsigned Month; + unsigned Day; + unsigned Hour; + unsigned Minute; + char cAmPm; + + int nItems=(int)::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_GETCOUNT,0,0L); + if(!nItems)return; + hCursor=::SetCursor(::LoadCursor(NULL,IDC_WAIT)); + ::ShowCursor(TRUE); + for(nIndex=0;nIndex>9)+1980; + Month=(mffblk.ff_fdate>>5)&0x0F; + Day=mffblk.ff_fdate&0x1F; + Hour=(mffblk.ff_ftime>>11)&0x1F; + Minute=(mffblk.ff_ftime>>5)&0x3F; + if(Hour>=12 && Minute) + { + Hour=Hour==12?1:Hour-12; + if(Hour==12)cAmPm='a'; + else cAmPm='p'; + } + else + { + if(!Hour)Hour=12; + cAmPm='a'; + } + ::wsprintf(minBuf,"%d",Minute); + if(1==::lstrlen(minBuf)) + { + minBuf[2]='\0'; + minBuf[1]=minBuf[0]; + minBuf[0]='0'; + } + ::wsprintf(hrBuf,"%d",Hour); + if(1==::lstrlen(hrBuf)) + { + hrBuf[3]='\0'; + hrBuf[2]=hrBuf[0]; + hrBuf[1]=' '; + hrBuf[0]=' '; + } + ::wsprintf(moBuf,"%d",Month); + if(1==::lstrlen(moBuf)) + { + moBuf[2]='\0'; + moBuf[1]=moBuf[0]; + moBuf[0]='0'; + } + ::wsprintf(dayBuf,"%d",Day); + if(1==::lstrlen(dayBuf)) + { + dayBuf[2]='\0'; + dayBuf[1]=dayBuf[0]; + dayBuf[0]='0'; + } + ::wsprintf(szFormat,"\t%s-%s-%d\t%9ld\t%s:%s%c", + (LPSTR)moBuf,(LPSTR)dayBuf,Year,mffblk.ff_fsize,(LPSTR)hrBuf,(LPSTR)minBuf,cAmPm); + ::lstrcat(szBuffer,szFormat); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_DELETESTRING,nIndex,0L); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_INSERTSTRING,nIndex,(LPARAM)(LPCSTR)szBuffer); + } + } + ::ShowCursor(FALSE); + ::SetCursor(hCursor); +} + \ No newline at end of file diff --git a/mdiwin/FILEHELP.CPP b/mdiwin/FILEHELP.CPP new file mode 100644 index 0000000..4b441a4 --- /dev/null +++ b/mdiwin/FILEHELP.CPP @@ -0,0 +1,348 @@ +#include +#include +//#include +#include +#include +#include +#include +#include + +SelectFile::SelectFile(HWND hParent,Mode readWrite) +: mwFileAttribute((WORD)DefaultAttribute), mhParent(hParent), + mMode(readWrite), mhInstance(Main::processInstance(mhParent)) +{ +/* mszFileName[0]='\0'; + ::strcpy(mszDefExt,".DAT"); + ::strcpy(mszFileSpec,"*.*"); + mLastDrive=::getdisk(); + ::getcwd(mszDirectory,sizeof(mszDirectory)); */ +} +SelectFile::~SelectFile() +{ +/* char Path[132]; + ::wsprintf(Path,"%c:\\",mLastDrive+65); + ::setdisk(mLastDrive); + ::strcat(Path,mszDirectory); + ::chdir(Path); */ +} + +int SelectFile::GetFileName(char *szNameBuf,WORD nMaxChars) +{ + WORD returnCode; + + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"FileSelect",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); + if(returnCode) + ::strncpy(szNameBuf,mszFileName,nMaxChars>sizeof(mszFileName)?sizeof(mszFileName):nMaxChars); + return returnCode; +} + +void SelectFile::Initialize() +{ + ::SendDlgItemMessage(GetHandle(),IDS_FNAME,EM_LIMITTEXT,80,0L); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + ::DlgDirList(GetHandle(),mszFileSpec,IDS_FLIST,IDS_FPATH,mwFileAttribute); + waitCursor(FALSE); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SendMessage(GetDlgItem(GetHandle(),IDS_FLIST),LB_GETTEXT,0,(LONG)mszFileName); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETCURSEL,0,0L); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::SelChange() +{ +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::DoubleClick() +{ + waitCursor(TRUE); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + { + ::lstrcat(mszFileName,mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + ::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else + { + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); + ::SendMessage(GetHandle(),WM_COMMAND,IDOK,0L); + } + waitCursor(FALSE); +} + +int SelectFile::CheckFileNameSpec() +{ + ::GetDlgItemText(GetHandle(),IDS_FNAME,mszFileName,sizeof(mszFileName)); + mnEditLen=::lstrlen(mszFileName); + mcLastChar=*::AnsiPrev(mszFileName,mszFileName+mnEditLen); + if(mcLastChar=='\\'||mcLastChar==':')::lstrcat(mszFileName,mszFileSpec); + if(lstrchr(mszFileName,'*')||lstrchr(mszFileName,'?')) + { + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else ::MessageBeep(0); + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + return FALSE; + } + ::lstrcat(lstrcat(mszFileName,"\\"),mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + waitCursor(FALSE); + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + return FALSE; + } + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + mszFileName[mnEditLen]='\0'; + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + if(Write==mMode) + { + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_WRITE|OF_CREATE))) + { + ::MessageBeep(0); + return FALSE; + } + ::_lclose(mfd); + ::unlink(mszFileName); + return TRUE; + } + ::lstrcat(mszFileName,mszDefExt); + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + ::MessageBeep(0); + return FALSE; + } + else ::_lclose(mfd); + } + else ::_lclose(mfd); + ::strcpy(mszFileName,mPof.szPathName); + ::OemToAnsi(mszFileName,mszFileName); + if(Write==mMode) + { + ::MessageBeep(0); + switch( + ::MessageBox(GetHandle(),(LPSTR)"Overwrite this file?",(LPSTR)mszFileName,MB_OKCANCEL)) + { + case IDOK : + return TRUE; + case IDCANCEL : + return FALSE; + } + } + return TRUE; +} + +LPSTR SelectFile::lstrchr(LPSTR str,char ch) +{ + while(*str) + { + if(ch==*str)return str; + str=::AnsiNext(str); + } + return NULL; +} + +LPSTR SelectFile::lstrrchr(LPSTR str,char ch) +{ + LPSTR strl=str+lstrlen(str); + + do + { + if(ch==*strl)return strl; + strl=::AnsiPrev(str,strl); + }while(strl>str); + return NULL; +} + +int SelectFile::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + { + int TabStopList[3]; + WORD DlgWidthUnits; + String windowText; + + DlgWidthUnits=LOWORD(::GetDialogBaseUnits())/4; + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,mhInstance), + String(STRING_BITMAPOKNOFUP,mhInstance), + String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,mhInstance), + String(STRING_BITMAPCANOFUP,mhInstance), + String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Initialize(); + TabStopList[0]=DlgWidthUnits*13*2; + TabStopList[1]=DlgWidthUnits*28*2; + TabStopList[2]=DlgWidthUnits*38*2; + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETTABSTOPS,3,(LONG)(LPSTR)TabStopList); + ::GetDlgItemText(GetHandle(),(Write==mMode?IDS_FILESAVE:IDS_FILEOPEN),windowText,String::MaxString); + ::SetWindowText(GetHandle(),windowText); + } + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + return TRUE; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + return TRUE; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDS_FLIST : + switch(GET_WM_COMMAND_CMD(wParam,lParam)) + { + case LBN_SELCHANGE : + SelChange(); + return TRUE; + case LBN_DBLCLK : + DoubleClick(); + return TRUE; + } + break; + case IDS_FNAME : + if(GET_WM_COMMAND_CMD(wParam,lParam)==EN_CHANGE) + ::EnableWindow(::GetDlgItem(GetHandle(),IDOK), + (BOOL)::SendMessage(GET_WM_COMMAND_HWND(wParam,lParam), + WM_GETTEXTLENGTH,0,0L)); + return TRUE; + case IDOK : + if(CheckFileNameSpec()) + { + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + } + return TRUE; + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + +void SelectFile::SetExtended() +{ +/* HCURSOR hCursor; + ffblk mffblk; + char szBuffer[100]; + char szFormat[100]; + char minBuf[5]; + char hrBuf[5]; + char moBuf[5]; + char dayBuf[5]; + int nIndex=0; + unsigned Year; + unsigned Month; + unsigned Day; + unsigned Hour; + unsigned Minute; + char cAmPm; + + int nItems=(int)::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_GETCOUNT,0,0L); + if(!nItems)return; + hCursor=::SetCursor(::LoadCursor(NULL,IDC_WAIT)); + ::ShowCursor(TRUE); + for(nIndex=0;nIndex>9)+1980; + Month=(mffblk.ff_fdate>>5)&0x0F; + Day=mffblk.ff_fdate&0x1F; + Hour=(mffblk.ff_ftime>>11)&0x1F; + Minute=(mffblk.ff_ftime>>5)&0x3F; + if(Hour>=12 && Minute) + { + Hour=Hour==12?1:Hour-12; + if(Hour==12)cAmPm='a'; + else cAmPm='p'; + } + else + { + if(!Hour)Hour=12; + cAmPm='a'; + } + ::wsprintf(minBuf,"%d",Minute); + if(1==::lstrlen(minBuf)) + { + minBuf[2]='\0'; + minBuf[1]=minBuf[0]; + minBuf[0]='0'; + } + ::wsprintf(hrBuf,"%d",Hour); + if(1==::lstrlen(hrBuf)) + { + hrBuf[3]='\0'; + hrBuf[2]=hrBuf[0]; + hrBuf[1]=' '; + hrBuf[0]=' '; + } + ::wsprintf(moBuf,"%d",Month); + if(1==::lstrlen(moBuf)) + { + moBuf[2]='\0'; + moBuf[1]=moBuf[0]; + moBuf[0]='0'; + } + ::wsprintf(dayBuf,"%d",Day); + if(1==::lstrlen(dayBuf)) + { + dayBuf[2]='\0'; + dayBuf[1]=dayBuf[0]; + dayBuf[0]='0'; + } + ::wsprintf(szFormat,"\t%s-%s-%d\t%9ld\t%s:%s%c", + (LPSTR)moBuf,(LPSTR)dayBuf,Year,mffblk.ff_fsize,(LPSTR)hrBuf,(LPSTR)minBuf,cAmPm); + ::lstrcat(szBuffer,szFormat); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_DELETESTRING,nIndex,0L); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_INSERTSTRING,nIndex,(LPARAM)(LPCSTR)szBuffer); + } + } + ::ShowCursor(FALSE); + ::SetCursor(hCursor); */ +} diff --git a/mdiwin/FILEHELP.HPP b/mdiwin/FILEHELP.HPP new file mode 100644 index 0000000..f0f4fec --- /dev/null +++ b/mdiwin/FILEHELP.HPP @@ -0,0 +1,67 @@ +#ifndef _FILEHELP_HPP +#define _FILEHELP_HPP +#include +#include +#include +#include +#include + +class SelectFile : public DWindow +{ +public: + enum Mode{Read,Write}; + SelectFile(HWND hParent,Mode readWrite=Read); + ~SelectFile(); + void SetAttribute(WORD attribute); + void SetExtension(const char * extension); + void SetFileSpec(const char * fileSpec); + int GetFileName(char *buffer,WORD length); +private: + enum {MaxTextLength=96}; + enum {DefaultAttribute=0x4010}; + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void Initialize(); + void SelChange(); + void DoubleClick(); + void SetExtended(); + int CheckFileNameSpec(); + LPSTR lstrrchr(LPSTR,char); + LPSTR lstrchr(LPSTR,char); + + + char mszDefExt[MaxTextLength]; + char mszFileName[MaxTextLength]; + char mszFileSpec[MaxTextLength]; + char mszDirectory[MaxTextLength]; + char mcLastChar; + short mnEditLen; + int mLastDrive; + WORD mwFileAttribute; + OFSTRUCT mPof; + HFILE mfd; + HWND mhParent; + HINSTANCE mhInstance; + Mode mMode; +}; + +inline +void SelectFile::SetAttribute(WORD nAttribute) +{ + mwFileAttribute=nAttribute; +} + +inline +void SelectFile::SetExtension(const char *szExtension) +{ + ::strncpy(mszDefExt,szExtension,sizeof(mszDefExt)-1); + mszDefExt[sizeof(mszDefExt)-1]='\0'; +} + +inline +void SelectFile::SetFileSpec(const char *szFileSpec) +{ + ::strncpy(mszFileSpec,szFileSpec,sizeof(mszFileSpec)-1); + mszFileSpec[sizeof(mszFileSpec)-1]='\0'; +} +#endif + \ No newline at end of file diff --git a/mdiwin/FLTPRS.HPP b/mdiwin/FLTPRS.HPP new file mode 100644 index 0000000..49b2958 --- /dev/null +++ b/mdiwin/FLTPRS.HPP @@ -0,0 +1,101 @@ +#ifndef _FLOATPAIRS_HPP_ +#define _FLOATPAIRS_HPP_ +#include +#include + +#undef min +#undef max + +class FAR FloatPairs +{ +public: + FloatPairs(void); + FloatPairs(float column,float row); + ~FloatPairs(); + WORD operator==(const FloatPairs &someFloatPair)const; + float column(void)const; + void column(float newColumn); + float row(void)const; + void row(float newRow); + void setPairs(float newColumn,float newRow); + void setPairs(int newColumn,int newRow); + static int max(int firstVal,int secondVal); + static int min(int firstVal,int secondVal); +private: + float mColumn; + float mRow; +}; + +inline +FloatPairs::FloatPairs(void) +: mColumn(0.00), mRow(0.00) +{ +} + +inline +FloatPairs::FloatPairs(float column,float row) +: mColumn(column), mRow(row) +{ +} + +inline +FloatPairs::~FloatPairs() +{ +} + +inline +WORD FloatPairs::operator==(const FloatPairs &someFloatPair)const +{ + return (mColumn==someFloatPair.mColumn && mRow==someFloatPair.mRow); +} + +inline +float FloatPairs::column(void)const +{ + return mColumn; +} + +inline +void FloatPairs::column(float newColumn) +{ + mColumn=newColumn; +} + +inline +float FloatPairs::row(void)const +{ + return mRow; +} + +inline +void FloatPairs::row(float newRow) +{ + mRow=newRow; +} + +inline +void FloatPairs::setPairs(float newColumn,float newRow) +{ + mColumn=newColumn; + mRow=newRow; +} + +inline +void FloatPairs::setPairs(int newColumn,int newRow) +{ + mColumn=(float)newColumn; + mRow=(float)newRow; +} + +inline +int FloatPairs::max(int firstVal,int secondVal) +{ + return (firstVal>secondVal?firstVal:secondVal); +} + +inline +int FloatPairs::min(int firstVal,int secondVal) +{ + return (firstVal +#include + +Font::Font(HWND hWnd,int nWidth,int nHeight) +: mhWnd(hWnd), mhdc(::GetDC(hWnd)) +{ + int nEscape=0; + int nOrient=0; + int nWeight=FW_ULTRALIGHT; + BYTE nItalic=0; + BYTE nUnderline=0; + BYTE nStrikeOut=0; + BYTE nCharSet=ANSI_CHARSET; + BYTE nOutputPrecision=OUT_CHARACTER_PRECIS; + BYTE nClipPrecision=CLIP_DEFAULT_PRECIS; + BYTE nQuality=PROOF_QUALITY; + BYTE nPitchAndFamily=DEFAULT_PITCH; + LPCSTR lpszFace="MS Serif"; + + mhFont=::CreateFont(nHeight,nWidth,nEscape,nOrient,nWeight,nItalic, + nUnderline,nStrikeOut,nCharSet,nOutputPrecision, + nClipPrecision,nQuality,nPitchAndFamily,lpszFace); +} + +Font::~Font() +{ + ::DeleteObject(mhFont); + ::ReleaseDC(mhWnd,mhdc); +} + +void Font::DrawText(int xStart,int yStart,const char *lpStr)const +{ + HFONT hOldFont; + + hOldFont=(HFONT)::SelectObject(mhdc,mhFont); + ::TextOut(mhdc,xStart,yStart,(LPSTR)lpStr,::strlen(lpStr)); + ::SelectObject(mhdc,hOldFont); +} + +void Font::DrawText(int xStart,int yStart,const char *lpStr,COLORREF bkColor,COLORREF textColor)const +{ + HFONT hOldFont; + COLORREF oldBkColor; + COLORREF oldTextColor; + + hOldFont=(HFONT)::SelectObject(mhdc,mhFont); + oldBkColor=::SetBkColor(mhdc,bkColor); + oldTextColor=::SetTextColor(mhdc,textColor); + ::TextOut(mhdc,xStart,yStart,(LPSTR)lpStr,::strlen(lpStr)); + ::SetBkColor(mhdc,oldBkColor); + ::SetTextColor(mhdc,oldTextColor); + ::SelectObject(mhdc,hOldFont); +} diff --git a/mdiwin/FONT.HPP b/mdiwin/FONT.HPP new file mode 100644 index 0000000..b25e447 --- /dev/null +++ b/mdiwin/FONT.HPP @@ -0,0 +1,18 @@ +#ifndef _FONT_HPP_ +#define _FONT_HPP_ +#include + +class Font +{ +public: + Font(HWND hWnd,int nWidth,int nHeight); + ~Font(); + void DrawText(int xStart,int yStart,const char *npString,COLORREF bkColor,COLORREF textColor)const; + void DrawText(int xStart,int yStart,const char *npString)const; +private: + HDC mhdc; + HWND mhWnd; + HFONT mhFont; +}; +#endif + \ No newline at end of file diff --git a/mdiwin/FOREST.000 b/mdiwin/FOREST.000 new file mode 100644 index 0000000..1a84749 Binary files /dev/null and b/mdiwin/FOREST.000 differ diff --git a/mdiwin/FOREST.001 b/mdiwin/FOREST.001 new file mode 100644 index 0000000..84820e3 Binary files /dev/null and b/mdiwin/FOREST.001 differ diff --git a/mdiwin/FOREST.002 b/mdiwin/FOREST.002 new file mode 100644 index 0000000..b6c09bf Binary files /dev/null and b/mdiwin/FOREST.002 differ diff --git a/mdiwin/FOREST.003 b/mdiwin/FOREST.003 new file mode 100644 index 0000000..6476875 Binary files /dev/null and b/mdiwin/FOREST.003 differ diff --git a/mdiwin/FOREST.PRJ b/mdiwin/FOREST.PRJ new file mode 100644 index 0000000..9247c85 --- /dev/null +++ b/mdiwin/FOREST.PRJ @@ -0,0 +1,5 @@ +PRJV1.00 +C:\work\Mdiwin\FOREST.000 +C:\work\Mdiwin\FOREST.001 +C:\work\Mdiwin\FOREST.002 +C:\work\Mdiwin\FOREST.003 diff --git a/mdiwin/FRAME.BAK b/mdiwin/FRAME.BAK new file mode 100644 index 0000000..5c37df7 --- /dev/null +++ b/mdiwin/FRAME.BAK @@ -0,0 +1,316 @@ +#include +#include +#include +#include +#include +#include +#include + +char Frame::szClassName[]="Windows Graphic View"; +char Frame::szMenuName[]="mdiMainMenu"; +HINSTANCE Frame::smhInstance=0; + +Frame::Frame() +: mhClientWindow(0), mhAccelerator(0), mhMainMenu(0) +{ + mhMainMenu=::LoadMenu(smhInstance,(LPSTR)szMenuName); + ::CreateWindow(szClassName,szClassName, // since I am assigning mhMainMenu to + WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN, // the frame window, It is not necessary + CW_USEDEFAULT,CW_USEDEFAULT, // to destroy it. However, I am inclined + CW_USEDEFAULT,CW_USEDEFAULT, // to perform the check in DTOR anyway. + NULL,mhMainMenu,smhInstance,(LPSTR)this); + Show(SW_SHOW); + Update(); + Main::smlpStatusBar=new BWindow(GetHandle()); +} + +Frame::~Frame() +{ + if(mhMainMenu&&::IsMenu(mhMainMenu))::DestroyMenu(mhMainMenu); + if(Main::smlpStatusBar)delete Main::smlpStatusBar; +} + +void Frame::Register(HINSTANCE hInstance) +{ + WNDCLASS wndClass; + + smhInstance=hInstance; + wndClass.style =CS_HREDRAW|CS_VREDRAW; + wndClass.lpfnWndProc =(WNDPROC)FrameWindow::FrameWndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(Frame*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(hInstance,String(STRING_LITERAL944,hInstance)); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)(COLOR_APPWORKSPACE+1); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +int Frame::messageLoop(void) +{ + MSG msg; + + while(::GetMessage(&msg,NULL,0,0)) + { + if(!::TranslateMDISysAccel(getClientHandle(),&msg) && + !::TranslateAccelerator(GetHandle(),mhAccelerator,&msg)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + } + return msg.wParam; +} + +void Frame::createMDIClientWindow(void) +{ + CLIENTCREATESTRUCT clientCreate; + + if(getClientHandle())return; + clientCreate.hWindowMenu=::GetSubMenu(mhMainMenu,0); + clientCreate.idFirstChild=idFirstMDIChild; + setClientHandle(::CreateWindow((LPSTR)"MDICLIENT", + NULL,WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE|MDIS_ALLCHILDSTYLES, + 0,0,0,0,GetHandle(),(HMENU)1, + smhInstance,(CLIENTCREATESTRUCT FAR *)&clientCreate)); +} + +void Frame::selectViewItem(int itemType) +{ + int size; + String gifExtensionString(STRING_ASTERISKDOTGIF,Main::processInstance()); + String bmpExtensionString(STRING_ASTERISKDOTBMP,Main::processInstance()); + char pathFileName[MaxFileName]; + + SelectFile selector(GetHandle(),SelectFile::Read); + switch(itemType) + { + case MENU_LOAD_GIF : + selector.SetFileSpec(gifExtensionString); + break; + case MENU_LOAD_BITMAP : + selector.SetFileSpec(bmpExtensionString); + break; + } + if(selector.GetFileName(pathFileName,sizeof(pathFileName))) + { + size=(int)mViewWindow.size(); + mViewWindow.insert(&ViewWindow()); + mViewWindow[size].showWindow(getClientHandle(),pathFileName,Main::smlpStatusBar,mhMainMenu); + } + if(1==mViewWindow.size())updateMenu(); +} + +void Frame::selectSlideItem(void) +{ + Block pathFileNames; + size_t size; + + SlideSelect slideSelect(GetHandle()); + if(slideSelect.selectSlides(pathFileNames)) + { + size=(int)mSlideWindow.size(); + mSlideWindow.insert(&SlideWindow()); + mSlideWindow[size].showWindow(getClientHandle(),pathFileNames,Main::smlpStatusBar,mhMainMenu); + } + if(1==mSlideWindow.size())updateMenu(); +} + +void Frame::watchDocumentWindows(void) +{ + WORD size; + + size=(int)mViewWindow.size(); + for(int i=0;iGetHandle(),WM_SIZE,wParam,lParam); + break; + case WM_PAINT : + paint(); + if(Main::smlpStatusBar) + ::SendMessage(Main::smlpStatusBar->GetHandle(),WM_PAINT,wParam,lParam); + break; + case WM_QUERYENDSESSION : + case WM_CLOSE : + ::SendMessage(GetHandle(),WM_COMMAND,IDM_CLOSEALL,0L); + if(0!=::GetWindow(getClientHandle(),GW_CHILD))return FALSE; + break; + case WM_DESTROY : + ::PostQuitMessage(0); + return FALSE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDM_CASCADE : + ::SendMessage(getClientHandle(),WM_MDICASCADE,0,0L); + return FALSE; + case IDM_TILE : + ::SendMessage(getClientHandle(),WM_MDITILE,0,0L); + return FALSE; + case IDM_ARRANGE : + ::SendMessage(getClientHandle(),WM_MDIICONARRANGE,0,0L); + return FALSE; + case IDM_CLOSEALL : + ::EnumChildWindows(getClientHandle(),(WNDENUMPROC)enumerateProcedure,MAKELONG(IDM_CLOSEALL,0)); + return FALSE; + case IDM_MINIMIZEALL : + ::EnumChildWindows(getClientHandle(),(WNDENUMPROC)enumerateProcedure,MAKELONG(IDM_MINIMIZEALL,0)); + ::SendMessage(getClientHandle(),WM_MDIICONARRANGE,0,0L); + return FALSE; + case IDM_RESTOREALL : + ::EnumChildWindows(getClientHandle(),(WNDENUMPROC)enumerateProcedure,MAKELONG(IDM_RESTOREALL,0)); + ::SendMessage(getClientHandle(),WM_MDICASCADE,0,0L); + return FALSE; + case IDM_GETWINLIST : + handleWindowListRequest((HWND)LOWORD(lParam)); + break; + case IDM_INVALIDATEMDIWINDOWS : + handleInvalidateRequest((HWND)LOWORD(lParam)); + break; + case MENU_LOAD_GIF : + case MENU_LOAD_BITMAP : + selectViewItem(GET_WM_COMMAND_ID(wParam,lParam)); + return FALSE; + case MENU_SLIDE_SELECT : + selectSlideItem(); + return FALSE; + case MENU_FILE_EXIT : + ::SendMessage(GetHandle(),WM_CLOSE,0,0L); + return FALSE; + default : + processCommand(wParam,lParam); + break; + } + } + return ::DefFrameProc(GetHandle(),getClientHandle(),message,wParam,lParam); +} + +int FAR PASCAL _export Frame::enumerateProcedure(HWND hWnd,LPARAM lParam) +{ + if(::GetWindow(hWnd,GW_OWNER))return 1; + switch(LOWORD(lParam)) + { + case IDM_CLOSEALL : + ::SendMessage(::GetParent(hWnd),WM_MDIRESTORE,(WPARAM)hWnd,0L); + if(!::SendMessage(hWnd,WM_QUERYENDSESSION,0,0L))return 1; + ::SendMessage(::GetParent(hWnd),WM_MDIDESTROY,(WPARAM)hWnd,0L); + break; + case IDM_RESTOREALL : + if(::IsIconic(hWnd)||::IsZoomed(hWnd)) + ::ShowWindow(hWnd,SW_RESTORE); + break; + case IDM_MINIMIZEALL : + if(!::IsIconic(hWnd))::ShowWindow(hWnd,SW_SHOWMINIMIZED); + break; + } + return 1; +} + +void Frame::handleWindowListRequest(HWND hOwnerWindow) +{ + Block *lpDataBlock=new Block; + size_t size((int)mViewWindow.size()); + size_t ownerIndex(0); + + for(int i=0;i=size)return; + for(i=0;iinsert(&ViewContainer(&mViewWindow[i])); + } + ::PostMessage(hOwnerWindow,WM_COMMAND,IDM_WINLIST,(LPARAM)(lpDataBlock)); +} + +void Frame::handleInvalidateRequest(HWND hExcludeWnd) +{ + size_t size((int)mViewWindow.size()); + HDC hDC; + + for(int i=0;i +#include +#include +#include +#include +#include +#include + +char Frame::szClassName[]="Windows Graphic View"; +char Frame::szMenuName[]="mdiMainMenu"; +HINSTANCE Frame::smhInstance=0; + +Frame::Frame() +: mhClientWindow(0), mhAccelerator(0), mhMainMenu(0) +{ + mhMainMenu=::LoadMenu(smhInstance,(LPSTR)szMenuName); + ::CreateWindow(szClassName,szClassName, // since I am assigning mhMainMenu to + WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN, // the frame window, It is not necessary + CW_USEDEFAULT,CW_USEDEFAULT, // to destroy it. However, I am inclined + CW_USEDEFAULT,CW_USEDEFAULT, // to perform the check in DTOR anyway. + NULL,mhMainMenu,smhInstance,(LPSTR)this); + Show(SW_SHOW); + Update(); + Main::smlpStatusBar=new BWindow(GetHandle()); +} + +Frame::~Frame() +{ + if(mhMainMenu&&::IsMenu(mhMainMenu))::DestroyMenu(mhMainMenu); + if(Main::smlpStatusBar)delete Main::smlpStatusBar; +} + +void Frame::Register(HINSTANCE hInstance) +{ + WNDCLASS wndClass; + + smhInstance=hInstance; + wndClass.style =CS_HREDRAW|CS_VREDRAW; + wndClass.lpfnWndProc =(WNDPROC)FrameWindow::FrameWndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(Frame*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(hInstance,String(STRING_LITERAL944,hInstance)); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)(COLOR_APPWORKSPACE+1); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +int Frame::messageLoop(void) +{ + MSG msg; + + while(::GetMessage(&msg,NULL,0,0)) + { + if(!::TranslateMDISysAccel(getClientHandle(),&msg) && + !::TranslateAccelerator(GetHandle(),mhAccelerator,&msg)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + } + return msg.wParam; +} + +void Frame::createMDIClientWindow(void) +{ + CLIENTCREATESTRUCT clientCreate; + + if(getClientHandle())return; + clientCreate.hWindowMenu=::GetSubMenu(mhMainMenu,0); + clientCreate.idFirstChild=idFirstMDIChild; + setClientHandle(::CreateWindow((LPSTR)"MDICLIENT", + NULL,WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE|MDIS_ALLCHILDSTYLES, + 0,0,0,0,GetHandle(),(HMENU)1, + smhInstance,(CLIENTCREATESTRUCT FAR *)&clientCreate)); +} + +void Frame::selectViewItem(int itemType) +{ + int size; + String gifExtensionString(STRING_ASTERISKDOTGIF,Main::processInstance()); + String bmpExtensionString(STRING_ASTERISKDOTBMP,Main::processInstance()); + char pathFileName[MaxFileName]; + + SelectFile selector(GetHandle(),SelectFile::Read); + switch(itemType) + { + case MENU_LOAD_GIF : + selector.SetFileSpec(gifExtensionString); + break; + case MENU_LOAD_BITMAP : + selector.SetFileSpec(bmpExtensionString); + break; + } + if(selector.GetFileName(pathFileName,sizeof(pathFileName))) + { + size=(int)mViewWindow.size(); + mViewWindow.insert(&ViewWindow()); + mViewWindow[size].showWindow(getClientHandle(),pathFileName,Main::smlpStatusBar,mhMainMenu); + } + if(1==mViewWindow.size())updateMenu(); +} + +void Frame::selectSlideItem(void) +{ + Block pathFileNames; + size_t size; + + SlideSelect slideSelect(GetHandle()); + if(slideSelect.selectSlides(pathFileNames)) + { + size=(int)mSlideWindow.size(); + mSlideWindow.insert(&SlideWindow()); + mSlideWindow[size].showWindow(getClientHandle(),pathFileNames,Main::smlpStatusBar,mhMainMenu); + } + if(1==mSlideWindow.size())updateMenu(); +} + +void Frame::watchDocumentWindows(void) +{ + WORD size; + + size=(int)mViewWindow.size(); + for(int i=0;iGetHandle(),WM_SIZE,wParam,lParam); + break; + case WM_PAINT : + paint(); + if(Main::smlpStatusBar) + ::SendMessage(Main::smlpStatusBar->GetHandle(),WM_PAINT,wParam,lParam); + break; + case WM_QUERYENDSESSION : + case WM_CLOSE : + ::SendMessage(GetHandle(),WM_COMMAND,IDM_CLOSEALL,0L); + if(0!=::GetWindow(getClientHandle(),GW_CHILD))return FALSE; + break; + case WM_DESTROY : + ::PostQuitMessage(0); + return FALSE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDM_CASCADE : + ::SendMessage(getClientHandle(),WM_MDICASCADE,0,0L); + return FALSE; + case IDM_TILE : + ::SendMessage(getClientHandle(),WM_MDITILE,0,0L); + return FALSE; + case IDM_ARRANGE : + ::SendMessage(getClientHandle(),WM_MDIICONARRANGE,0,0L); + return FALSE; + case IDM_CLOSEALL : + ::EnumChildWindows(getClientHandle(),(WNDENUMPROC)enumerateProcedure,MAKELONG(IDM_CLOSEALL,0)); + return FALSE; + case IDM_MINIMIZEALL : + ::EnumChildWindows(getClientHandle(),(WNDENUMPROC)enumerateProcedure,MAKELONG(IDM_MINIMIZEALL,0)); + ::SendMessage(getClientHandle(),WM_MDIICONARRANGE,0,0L); + return FALSE; + case IDM_RESTOREALL : + ::EnumChildWindows(getClientHandle(),(WNDENUMPROC)enumerateProcedure,MAKELONG(IDM_RESTOREALL,0)); + ::SendMessage(getClientHandle(),WM_MDICASCADE,0,0L); + return FALSE; + case IDM_GETWINLIST : + handleWindowListRequest((HWND)LOWORD(lParam)); + break; + case IDM_INVALIDATEMDIWINDOWS : + handleInvalidateRequest((HWND)LOWORD(lParam)); + break; + case MENU_LOAD_GIF : + case MENU_LOAD_BITMAP : + selectViewItem(GET_WM_COMMAND_ID(wParam,lParam)); + return FALSE; + case MENU_SLIDE_SELECT : + selectSlideItem(); + return FALSE; + case MENU_FILE_EXIT : + ::SendMessage(GetHandle(),WM_CLOSE,0,0L); + return FALSE; + default : + processCommand(wParam,lParam); + break; + } + } + return ::DefFrameProc(GetHandle(),getClientHandle(),message,wParam,lParam); +} + +int FAR PASCAL Frame::enumerateProcedure(HWND hWnd,LPARAM lParam) +{ + if(::GetWindow(hWnd,GW_OWNER))return 1; + switch(LOWORD(lParam)) + { + case IDM_CLOSEALL : + ::SendMessage(::GetParent(hWnd),WM_MDIRESTORE,(WPARAM)hWnd,0L); + if(!::SendMessage(hWnd,WM_QUERYENDSESSION,0,0L))return 1; + ::SendMessage(::GetParent(hWnd),WM_MDIDESTROY,(WPARAM)hWnd,0L); + break; + case IDM_RESTOREALL : + if(::IsIconic(hWnd)||::IsZoomed(hWnd)) + ::ShowWindow(hWnd,SW_RESTORE); + break; + case IDM_MINIMIZEALL : + if(!::IsIconic(hWnd))::ShowWindow(hWnd,SW_SHOWMINIMIZED); + break; + } + return 1; +} + +void Frame::handleWindowListRequest(HWND hOwnerWindow) +{ + Block *lpDataBlock=new Block; + size_t size((int)mViewWindow.size()); + size_t ownerIndex(0); + + for(int i=0;i=size)return; + for(i=0;iinsert(&ViewContainer(&mViewWindow[i])); + } + ::PostMessage(hOwnerWindow,WM_COMMAND,IDM_WINLIST,(LPARAM)(lpDataBlock)); +} + +void Frame::handleInvalidateRequest(HWND hExcludeWnd) +{ + size_t size((int)mViewWindow.size()); + HDC hDC; + + for(int i=0;i +#include +#include +#include +#include + +class Frame : public FrameWindow +{ +public: + Frame(void); + ~Frame(); + static void Register(HINSTANCE hInstance); + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + int messageLoop(void); + static char far *ClassName(void); + void setAcceleratorTable(char *accelerator); +private: + enum{idFirstMDIChild=100}; + enum {MaxFileName=60}; + __declspec(dllexport) static int FAR PASCAL enumerateProcedure(HWND hWnd,LPARAM lParam); + + void paint(void); + WORD processCommand(WPARAM wParam,LPARAM lParam); + HWND getClientHandle(void)const; + void setClientHandle(HWND hClientWnd); + void createMDIClientWindow(void); + void selectViewItem(int itemType); + void selectSlideItem(void); + void watchDocumentWindows(void); + void updateMenu(void)const; + void handleWindowListRequest(HWND hOwnerWindow); + void handleInvalidateRequest(HWND hExcludeWindow); + + static char szClassName[]; + static char szMenuName[]; + static HINSTANCE smhInstance; + HACCEL mhAccelerator; + HWND mhClientWindow; + HMENU mhMainMenu; + Block mViewWindow; + Block mSlideWindow; + }; + +inline +HWND Frame::getClientHandle(void)const +{ + return mhClientWindow; +} + +inline +void Frame::setClientHandle(HWND hClientWnd) +{ + mhClientWindow=hClientWnd; +} + +inline +char far *Frame::ClassName(void) +{ + return szClassName; +} + +inline +void Frame::updateMenu(void)const +{ // for future use. +} // use this stub to selectively disable features of the frame menu. +#endif + diff --git a/mdiwin/FRMDLG.CPP b/mdiwin/FRMDLG.CPP new file mode 100644 index 0000000..59609be --- /dev/null +++ b/mdiwin/FRMDLG.CPP @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include + +FrameDialog::FrameDialog(HWND hParent) +: mhParent(hParent), mFrames(0), mhInstance(Main::processInstance(mhParent)) +{ +} + +FrameDialog::~FrameDialog() +{ +} + +WORD FrameDialog::performFrameDialog(int &numFrames) +{ + mFrames=numFrames; + if(::DialogBoxParam(mhInstance,(LPSTR)"Frame",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)))numFrames=mFrames; + return TRUE; +} + +int FrameDialog::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + { + String frameString; + ::sprintf(frameString,"%d",mFrames); + ::SetDlgItemText(GetHandle(),FRAME_FRAMES,frameString); + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,mhInstance), + String(STRING_BITMAPOKNOFUP,mhInstance), + String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,mhInstance), + String(STRING_BITMAPCANOFUP,mhInstance), + String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + } + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + break; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + break; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDOK : + { + String frameString; + ::GetDlgItemText(GetHandle(),FRAME_FRAMES,frameString,String::MaxString-1); + mFrames=::atoi(frameString); + Main::smhBitmap.freeButton(IDOK); + ::EndDialog(GetHandle(),TRUE); + } + return TRUE; + case IDCANCEL : + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + + \ No newline at end of file diff --git a/mdiwin/FRMDLG.HPP b/mdiwin/FRMDLG.HPP new file mode 100644 index 0000000..2a435de --- /dev/null +++ b/mdiwin/FRMDLG.HPP @@ -0,0 +1,17 @@ +#ifndef _FRAMEDIALOG_HPP_ +#define _FRAMEDIALOG_HPP_ +#include + +class FrameDialog : public DWindow +{ +public: + FrameDialog(HWND hParent); + ~FrameDialog(); + WORD performFrameDialog(int &numFrames); +private: + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + HWND mhParent; + HINSTANCE mhInstance; + int mFrames; +}; +#endif diff --git a/mdiwin/GIF.HPP b/mdiwin/GIF.HPP new file mode 100644 index 0000000..5af146d --- /dev/null +++ b/mdiwin/GIF.HPP @@ -0,0 +1,57 @@ +#ifndef _GIF_HPP_ +#define _GIF_HPP_ +#include +#include +#include +#include + +#ifdef _EXPAND_GIFDECODER_TEMPLATES_ +#pragma option -Jgd +#endif + +template +class GIFDecoder : public LZWDecompression +{ +public: + GIFDecoder(const char *pathFileName); + virtual ~GIFDecoder(); + WORD unpackImage(void); + void setPaletteHandler(T *object,void (T::*method)(const UCHAR FAR *lpPaletteData,USHORT numColors)); + void setBackgroundHandler(T *object,void (T::*method)(USHORT backgroundColor)); + void setImageHandler(T *object,void (T::*method)(void)); + void setShowHandler(T *object,void (T::*method)(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation)); + void setErrorHandler(T *object,void (T::*method)(const char FAR *message)); +private: + void showHandler(UCHAR FAR *lpOutRow,USHORT yLocation); + WORD readPaletteData(void); + WORD processImage(void); + + T FAR *mPaletteObject; + T *mBackgroundObject; + T *mImageObject; + T *mShowObject; + T *mErrorObject; + void(T::*mPaletteMethod)(const UCHAR FAR *lpPaletteData,USHORT numColors); + void(T::*mBackgroundMethod)(USHORT backgroundColor); + void(T::*mImageMethod)(void); + void(T::*mShowMethod)(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation); + void(T::*mErrorMethod)(const char FAR *message); + + HGLOBAL mhGlobalPalette; + UCHAR FAR *mlpPaletteData; + + USHORT mScreenWidth; + USHORT mScreenHeight; + UCHAR mGlobalFlagByte; + USHORT mColors; + USHORT mBackgroundColor; + USHORT mImageStartLeft; + USHORT mImageStartTop; + USHORT mImageWide; + USHORT mImageDeep; + USHORT mIsInterlaced; + USHORT mBufferCount; + USHORT mPixelSize; +}; +#include +#endif diff --git a/mdiwin/GIF.TPP b/mdiwin/GIF.TPP new file mode 100644 index 0000000..e24d2f5 --- /dev/null +++ b/mdiwin/GIF.TPP @@ -0,0 +1,171 @@ +template +GIFDecoder::GIFDecoder(const char *pathFileName) +: LZWDecompression(pathFileName), + mhGlobalPalette(0), mlpPaletteData(0), mColors(0), mIsInterlaced(0), + mBufferCount(0), mPaletteObject(0), mBackgroundObject(0), + mImageObject(0), mShowObject(0), mErrorObject(0), mPaletteMethod(0), + mBackgroundMethod(0), mImageMethod(0), mShowMethod(0), mErrorMethod(0) +{ +} + +template +GIFDecoder::~GIFDecoder() +{ + if(mhGlobalPalette) + { + ::GlobalUnlock(mhGlobalPalette); + ::GlobalFree(mhGlobalPalette); + } +} + +template +WORD GIFDecoder::unpackImage(void) +{ + Index i; + int hasProcessed; + + hasProcessed=FALSE; + if(!isOpen())return FALSE; + if(!getChar())return FALSE; + if('G'!=currentChar())return FALSE; + for(i=0;i<5;i++)if(!getChar())return FALSE; + if(!getWord())return FALSE; + mScreenWidth=currentWord(); + if(!getWord())return FALSE; + mScreenHeight=currentWord(); + if(!getChar())return FALSE; + mGlobalFlagByte=currentChar(); + mColors=1<<((mGlobalFlagByte&0x07)+1); + if(!getChar())return FALSE; + mBackgroundColor=currentChar(); + if(!getChar())return FALSE; + if(currentChar())return FALSE; + if(mGlobalFlagByte&0x80) + { + if(!readPaletteData())return FALSE; + if(mPaletteObject && mPaletteMethod) + (mPaletteObject->*mPaletteMethod)(mlpPaletteData,mColors); + } + while(TRUE) + { + if(!getChar())break; + switch(currentChar()) + { + case '!' : // extension folows + while(getChar() && currentChar()!=','); + if(currentChar()!=',')break; + case ',' : // image follows + if(hasProcessed)break; + hasProcessed=TRUE; + if(!processImage())return FALSE; + break; + case ';' : // file is completely processed + continue; + default : + return FALSE; + } + } + closeFile(); + return TRUE; +} + + +template +WORD GIFDecoder::processImage(void) +{ + UCHAR localFlagByte; + + if(!getWord())return FALSE; + mImageStartLeft=currentWord(); + if(!getWord())return FALSE; + mImageStartTop=currentWord(); + if(!getWord())return FALSE; + mImageWide=currentWord(); + if(!getWord())return FALSE; + mImageDeep=currentWord(); + if(!getChar())return FALSE; + localFlagByte=currentChar(); + mIsInterlaced=localFlagByte&0x40; + mPixelSize=(mGlobalFlagByte&0x07)+1; + if(localFlagByte&0x80) + { + mPixelSize=(localFlagByte&0x07)+1; + mColors=1<<((localFlagByte&0x07)+1); + if(!readPaletteData())return FALSE; + if(mPaletteObject && mPaletteMethod) + (mPaletteObject->*mPaletteMethod)(mlpPaletteData,mColors); + } + if(mBackgroundObject && mBackgroundMethod) + (mBackgroundObject->*mBackgroundMethod)(mBackgroundColor); + mBufferCount=0; + if(!getChar())return FALSE; + unpackData(mImageWide,mImageDeep,mIsInterlaced,mPixelSize); + if(mImageObject && mImageMethod) + (mImageObject->*mImageMethod)(); + return TRUE; +} + +template +WORD GIFDecoder::readPaletteData(void) +{ + if(mhGlobalPalette) + { + ::GlobalUnlock(mhGlobalPalette); + ::GlobalFree(mhGlobalPalette); + } + mhGlobalPalette=::GlobalAlloc(GMEM_FIXED,mColors*3); + if(!mhGlobalPalette)return FALSE; + mlpPaletteData=(UCHAR FAR *)::GlobalLock(mhGlobalPalette); + for(Index i=0;i +void GIFDecoder::showHandler(UCHAR FAR *lpOutRow,USHORT yLocation) +{ + if(mShowObject && mShowMethod) + (mShowObject->*mShowMethod)(mImageWide,mImageDeep,lpOutRow,yLocation); +} + +template +void GIFDecoder::setPaletteHandler(T *object,void (T::*method)(const UCHAR FAR *lpPaletteData,USHORT numColors)) +{ + mPaletteObject=object; + mPaletteMethod=method; +} + +template +void GIFDecoder::setBackgroundHandler(T *object,void (T::*method)(USHORT backgroundColor)) +{ + mBackgroundObject=object; + mBackgroundMethod=method; +} + +template +void GIFDecoder::setImageHandler(T *object,void (T::*method)(void)) +{ + mImageObject=object; + mImageMethod=method; +} + +template +void GIFDecoder::setShowHandler(T *object,void (T::*method)(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation)) +{ + mShowObject=object; + mShowMethod=method; +} + +template +void GIFDecoder::setErrorHandler(T *object,void (T::*method)(const char FAR *message)) +{ + mErrorObject=object; + mErrorMethod=method; +} diff --git a/mdiwin/INIFILE.CPP b/mdiwin/INIFILE.CPP new file mode 100644 index 0000000..195ae9e --- /dev/null +++ b/mdiwin/INIFILE.CPP @@ -0,0 +1,54 @@ +#include +#include +#include + +IniFile::IniFile() +: mSettingsHeading(String(STRING_INISETTINGS,Main::processInstance())), + mProjDirString(String(STRING_INIPROJDIR,Main::processInstance())), + mMeshDirString(String(STRING_INIMESHDIR,Main::processInstance())) +{ + String defaultDirectory; + + defaultDirectory.reserve(String::MaxString); + drivePathName(defaultDirectory,FALSE); + if(!verifyInitializationFile()) + { + writeProfileString(mSettingsHeading,mProjDirString,defaultDirectory); + writeProfileString(mSettingsHeading,mMeshDirString,defaultDirectory); + return; + } + if(!verifyDirectory(meshDirectory(FALSE))) + writeProfileString(mSettingsHeading,mMeshDirString,defaultDirectory); + if(!verifyDirectory(projectDirectory(FALSE))) + writeProfileString(mSettingsHeading,mProjDirString,defaultDirectory); +} + +IniFile::~IniFile() +{ +} + +void IniFile::meshDirectory(String &newMeshDirectory) +{ + writeProfileString(mSettingsHeading,mMeshDirString,newMeshDirectory); +} + +String IniFile::meshDirectory(int putTrailer) +{ + String meshDirectory; + readProfileString(mSettingsHeading,mMeshDirString,meshDirectory); + if(putTrailer)meshDirectory+="\\"; + return meshDirectory; +} + +void IniFile::projectDirectory(String &newProjectDirectory) +{ + writeProfileString(mSettingsHeading,mProjDirString,newProjectDirectory); +} + +String IniFile::projectDirectory(int putTrailer) +{ + String projectDirectory; + readProfileString(mSettingsHeading,mProjDirString,projectDirectory); + if(putTrailer)projectDirectory+="\\"; + return projectDirectory; +} diff --git a/mdiwin/INIFILE.HPP b/mdiwin/INIFILE.HPP new file mode 100644 index 0000000..2116ac5 --- /dev/null +++ b/mdiwin/INIFILE.HPP @@ -0,0 +1,18 @@ +#ifndef _INIFILE_HPP_ +#define _INIFILE_HPP_ +#include +class IniFile : public Profile +{ +public: + IniFile(); + virtual ~IniFile(); + void meshDirectory(String &newMeshDirectory); + String meshDirectory(int putTrailer=TRUE); + void projectDirectory(String &newProjectDirectory); + String projectDirectory(int putTrailer=TRUE); +private: + String mSettingsHeading; + String mProjDirString; + String mMeshDirString; +}; +#endif \ No newline at end of file diff --git a/mdiwin/INT.HPP b/mdiwin/INT.HPP new file mode 100644 index 0000000..da7cbae --- /dev/null +++ b/mdiwin/INT.HPP @@ -0,0 +1,37 @@ +#ifndef _INTEGER_HPP_ +#define _INTEGER_HPP_ + +class Integer +{ +public: + Integer(void); + Integer(int value); + ~Integer(); + operator int(void)const; +private: + int mValue; +}; + +inline +Integer::Integer(void) +: mValue(0) +{ +} + +inline +Integer::Integer(int value) +: mValue(value) +{ +} + +inline +Integer::~Integer() +{ +} + +inline +Integer::operator int(void)const +{ + return mValue; +} +#endif diff --git a/mdiwin/ISTREAM.CPP b/mdiwin/ISTREAM.CPP new file mode 100644 index 0000000..c79e04f --- /dev/null +++ b/mdiwin/ISTREAM.CPP @@ -0,0 +1,47 @@ +#include + +IStream::IStream(const char *pathFileName) +: mFileDescriptor(-1), mCurrentWord(0), mCurrentChar(0), mhGlobalBuffer(0), + mlpBuffer(0), mBufferIndex(0), mlpBufferPointer(0) +{ + if(-1==(mFileDescriptor=::open(pathFileName,O_RDONLY|O_BINARY,0,SH_DENYWR)))return; + mhGlobalBuffer=::GlobalAlloc(GMEM_FIXED,MaxInputBuffer); + if(!mhGlobalBuffer)return; + mlpBuffer=(UCHAR FAR *)::GlobalLock(mhGlobalBuffer); +} + +IStream::~IStream() +{ + if(-1!=mFileDescriptor)::close(mFileDescriptor); + if(mhGlobalBuffer) + { + ::GlobalUnlock(mhGlobalBuffer); + ::GlobalFree(mhGlobalBuffer); + } +} + +WORD IStream::getChar(void) +{ + if(-1==mFileDescriptor)return FALSE; + if(!mBufferIndex) + { + mBufferIndex=::read(mFileDescriptor,(VPTR)mlpBuffer,MaxInputBuffer); + if(!mBufferIndex)return FALSE; + mlpBufferPointer=mlpBuffer; + } + mCurrentChar=*(mlpBufferPointer); + mlpBufferPointer++; + mBufferIndex--; + return TRUE; +} + +WORD IStream::getWord(void) +{ + if(-1==mFileDescriptor)return FALSE; + mCurrentWord=0; + if(!getChar())return FALSE; + mCurrentWord=mCurrentChar; + if(!getChar())return FALSE; + mCurrentWord|=((short)mCurrentChar)<<8; + return TRUE; +} diff --git a/mdiwin/ISTREAM.HPP b/mdiwin/ISTREAM.HPP new file mode 100644 index 0000000..efb0595 --- /dev/null +++ b/mdiwin/ISTREAM.HPP @@ -0,0 +1,64 @@ +#ifndef _ISTREAM_HPP_ +#define _ISTREAM_HPP_ +#include +#include +#include +#include +#include +#include + +class IStream +{ +public: +#if defined(__FLAT__) + typedef void * VPTR; +#else + typedef void far * VPTR; +#endif + IStream(const char *pathFileName); + virtual ~IStream(); + WORD isOpen(void)const; + WORD getChar(void); + WORD getWord(void); + UCHAR currentChar(void)const; + USHORT currentWord(void)const; + void closeFile(void); +private: + enum{MaxInputBuffer=6400}; + HGLOBAL mhGlobalBuffer; + UCHAR FAR *mlpBuffer; + UCHAR FAR *mlpBufferPointer; + USHORT mBufferIndex; + + short mFileDescriptor; + USHORT mCurrentWord; + UCHAR mCurrentChar; +}; + +inline +UCHAR IStream::currentChar(void)const +{ + return mCurrentChar; +} + +inline +USHORT IStream::currentWord(void)const +{ + return mCurrentWord; +} + +inline +void IStream::closeFile(void) +{ + if(-1!=mFileDescriptor)::close(mFileDescriptor); + mFileDescriptor=-1; +} + +inline +WORD IStream::isOpen(void)const +{ + if(-1==mFileDescriptor)return FALSE; + return TRUE; +} +#endif + \ No newline at end of file diff --git a/mdiwin/LOGOWIN.CPP b/mdiwin/LOGOWIN.CPP new file mode 100644 index 0000000..f158cd5 --- /dev/null +++ b/mdiwin/LOGOWIN.CPP @@ -0,0 +1,108 @@ +#include + +char LogoWindow::smszClassName[]={"NepalNight"}; + +LogoWindow::LogoWindow(HINSTANCE hInstance,HINSTANCE hLibrary) +: mhInstance(hInstance), mhLibrary(hLibrary), mIsDestroyed(FALSE), mhBitmap(0) +{ + registerClass(); +} + +LogoWindow::~LogoWindow() +{ + if(mhBitmap)::DeleteObject(mhBitmap); + if(::IsWindow(GetHandle()))::DestroyWindow(GetHandle()); +} + +WORD LogoWindow::showLogo(String &bitmapName) +{ + RECT windowRect; + HWND hCaptureWindow(::GetCapture()); + + if(mhLibrary)mhBitmap=::LoadBitmap(mhLibrary,bitmapName); + else mhBitmap=::LoadBitmap(mhInstance,bitmapName); + if(!mhBitmap) + { + mIsDestroyed=TRUE; + return FALSE; + } + centerRect(mhBitmap,windowRect); + ::CreateWindow( + (LPSTR)smszClassName,0,WS_POPUP|WS_BORDER, + windowRect.left,windowRect.top,windowRect.right,windowRect.bottom, + 0x00,0x00,mhInstance,(LPSTR)(Window*)this); + Show(SW_SHOW); + Update(); + ::SetCapture(GetHandle()); + waitCursor(TRUE); + while(!mIsDestroyed)messageLoop(); + waitCursor(FALSE); + ::SetCapture(hCaptureWindow); + return TRUE; +} + +void LogoWindow::registerClass(void) +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,smszClassName,(WNDCLASS FAR *)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(LogoWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =0; + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =smszClassName; + ::RegisterClass(&wndClass); +} + +void LogoWindow::messageLoop(void) +{ + MSG msg; + + while(!mIsDestroyed) + { + while(::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + } +} + +long LogoWindow::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + ::SetTimer(GetHandle(),TimerID,TimeOut,0); + return TRUE; + case WM_TIMER : + ::KillTimer(GetHandle(),TimerID); + ::PostMessage(GetHandle(),WM_CLOSE,0,0L); + return FALSE; + case WM_PAINT : + paint(); + return FALSE; + case WM_DESTROY : + mIsDestroyed=TRUE; + return FALSE; + case WM_CLOSE : + ::DestroyWindow(GetHandle()); + mIsDestroyed=TRUE; + return FALSE; + } + return ::DefWindowProc(GetHandle(),message,wParam,lParam); +} + +void LogoWindow::paint()const +{ + PAINTSTRUCT ps; + + ::BeginPaint(GetHandle(),(PAINTSTRUCT FAR *)&ps); + drawBitmap(GetHandle(),mhBitmap); + ::EndPaint(GetHandle(),(PAINTSTRUCT FAR *)&ps); +} diff --git a/mdiwin/LOGOWIN.HPP b/mdiwin/LOGOWIN.HPP new file mode 100644 index 0000000..07bde70 --- /dev/null +++ b/mdiwin/LOGOWIN.HPP @@ -0,0 +1,26 @@ +#ifndef _LOGOWINDOW_HPP_ +#define _LOGOWINDOW_HPP_ +#include +#include +#include + +class LogoWindow : public Window, public DrawBitmap +{ +public: + LogoWindow(HINSTANCE hInstance,HINSTANCE hLibrary); + virtual ~LogoWindow(); + WORD showLogo(String &logoBitmapName); +private: + enum{TimerID=0x01,TimeOut=3000}; + static char smszClassName[]; + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + void registerClass(void); + void paint()const; + void messageLoop(void); + + HINSTANCE mhInstance; + HINSTANCE mhLibrary; + HBITMAP mhBitmap; + WORD mIsDestroyed; +}; +#endif \ No newline at end of file diff --git a/mdiwin/LZW.CPP b/mdiwin/LZW.CPP new file mode 100644 index 0000000..f34cbdb --- /dev/null +++ b/mdiwin/LZW.CPP @@ -0,0 +1,317 @@ +#include + +USHORT LZWDecompression::mStartTable[LZWDecompression::STARTTABLESIZE]= + {0x00,0x04,0x02,0x01,0x00}; + +USHORT LZWDecompression::mIncTable[LZWDecompression::INCTABLESIZE]= + {0x08,0x08,0x04,0x02,0x00}; + +USHORT LZWDecompression::mcMask[LZWDecompression::CMASKSIZE]= + {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; + +CHAR LZWDecompression::errorMessage[]="Error reading data."; + +LZWDecompression::LZWDecompression(const char *pathFileName) +: IStream(pathFileName), + mhGlobalctFirst(0), mhGlobalctLast(0), mhGlobalctLink(0), + mhGlobalOutRow(0), mhGlobalStack(0), mlpctFirst(0), mlpctLast(0), + mlpctLink(0), mlpOutRow(0), mlpStack(0), mNextCode(0), mNextLimit(0), + mBufferCount(0), mRemct(0), mRem(0), mPass(0), mxLocation(0), + myLocation(0), mRowCount(0), mIsConstructed(FALSE), mReqct(0), mCode(0) +{ + + mhGlobalctFirst=::GlobalAlloc(GMEM_FIXED,CTSIZE); + mhGlobalctLast=::GlobalAlloc(GMEM_FIXED,CTSIZE); + mhGlobalctLink=::GlobalAlloc(GMEM_FIXED,CTSIZE*sizeof(USHORT)); + mhGlobalOutRow=::GlobalAlloc(GMEM_FIXED,OUTROWSIZE); + mhGlobalStack=::GlobalAlloc(GMEM_FIXED,STACKSIZE); + + if(!mhGlobalctFirst || + !mhGlobalctLast || + !mhGlobalctLink || + !mhGlobalOutRow || + !mhGlobalStack)return; + mlpctFirst=(CHAR FAR *)::GlobalLock(mhGlobalctFirst); + mlpctLast=(CHAR FAR *)::GlobalLock(mhGlobalctLast); + mlpctLink=(SHORT FAR *)::GlobalLock(mhGlobalctLink); + mlpOutRow=(UCHAR FAR *)::GlobalLock(mhGlobalOutRow); + mlpStack=(UCHAR FAR *)::GlobalLock(mhGlobalStack); + ::memset(mlpctFirst,0,CTSIZE); + ::memset(mlpctLast,0,CTSIZE); + ::memset(mlpctLink,0,CTSIZE*sizeof(USHORT)); + ::memset(mlpOutRow,0,OUTROWSIZE); + ::memset(mlpStack,0,STACKSIZE); + mIsConstructed=TRUE; +} + +LZWDecompression::~LZWDecompression() +{ + if(!mIsConstructed)return; + cleanup(); +} + +void LZWDecompression::unpackData(USHORT imageWide,USHORT imageDeep,USHORT isInterlaced,USHORT bitsPerPixel) +{ + USHORT clearCode; + USHORT pixelSize; + USHORT endOfInput; + CHAR firstCode; + + firstCode=currentChar(); + mImageWide=imageWide; + mImageDeep=imageDeep; + mIsInterlaced=isInterlaced; + pixelSize=bitsPerPixel; + clearCode=(1<=code)break; + } + if(1==pixelSize) + { + while(i>0) + { + lpStack--; + tempCode=(*lpStack)&0x0001; + doPixel(tempCode); + tempCode=(*lpStack)&0x00FF; + tempCode>>=1; + doPixel(tempCode); + i--; + } + } + else + { + while(i>0) + { + lpStack--; + tempCode=(*lpStack)&0x00FF; + doPixel(tempCode); + i--; + } + } +} + +void LZWDecompression::doPixel(CHAR tempCode) +{ + *(mlpOutRow+mxLocation)=tempCode; + mxLocation++; + mRowCount--; + if(0!=mRowCount)return; + showHandler(mlpOutRow,myLocation); + mxLocation=0; + mRowCount=mImageWide; + if(!mIsInterlaced) + { + myLocation++; + if(myLocation>=mImageDeep)myLocation=0; + } + else + { + myLocation+=mIncTable[mPass]; + if(myLocation>=(code&0x00FF); + return tempCode; +} + +USHORT LZWDecompression::getCode(USHORT reqct) +{ + USHORT tempCode1; + USHORT tempCode2; + + if(reqct<=8)return getBCode(reqct); + tempCode1=getBCode(8); + tempCode2=getBCode(reqct-8); + tempCode2<<=8; + tempCode2|=tempCode1; + return tempCode2; +} + +WORD LZWDecompression::insertCode(SHORT code) +{ + if(mNextCode>=CTSIZE)return FALSE; + *(mlpctLink+mNextCode)=mOldCode; + *(mlpctLast+mNextCode)=*(mlpctFirst+code); + *(mlpctFirst+mNextCode)=*(mlpctFirst+mOldCode); + mNextCode++; + if(mNextCode!=mNextLimit)return TRUE; + if(mReqct>=12)return TRUE; + mReqct++; + mNextLimit<<=1; + return TRUE; +} + +void LZWDecompression::flush(void) +{ + while(TRUE) + { + if(0==mBufferCount) + { + if(!getChar())return; + mBufferCount=currentChar(); + if(0==mBufferCount)return; + } + else + { + if(!getChar())return; + mBufferCount--; + } + } +} + +void LZWDecompression::cleanup(void) +{ + if(mhGlobalctFirst) + { + ::GlobalUnlock(mhGlobalctFirst); + ::GlobalFree(mhGlobalctFirst); + } + if(mhGlobalctLast) + { + ::GlobalUnlock(mhGlobalctLast); + ::GlobalFree(mhGlobalctLast); + } + if(mhGlobalctLink) + { + ::GlobalUnlock(mhGlobalctLink); + ::GlobalFree(mhGlobalctLink); + } + if(mhGlobalOutRow) + { + ::GlobalUnlock(mhGlobalOutRow); + ::GlobalFree(mhGlobalOutRow); + } + if(mhGlobalStack) + { + ::GlobalUnlock(mhGlobalStack); + ::GlobalFree(mhGlobalStack); + } +} + +// VIRTUALS + +void LZWDecompression::showHandler(UCHAR FAR */*lpOutRow*/,USHORT /*yLocation*/) +{ +} + +void LZWDecompression::errorHandler(CHAR */*errorMessage*/) +{ +} + + \ No newline at end of file diff --git a/mdiwin/LZW.HPP b/mdiwin/LZW.HPP new file mode 100644 index 0000000..c715306 --- /dev/null +++ b/mdiwin/LZW.HPP @@ -0,0 +1,63 @@ +#ifndef _LZWDECOMPRESSION_HPP_ +#define _LZWDECOMPRESSION_HPP_ +#include +#include +#include +#include +class LZWDecompression : public IStream +{ +public: + LZWDecompression(const char *pathFileName); + virtual ~LZWDecompression(); + enum{CMASKSIZE=9,STARTTABLESIZE=5,INCTABLESIZE=5}; + enum{OUTROWSIZE=2048,CTSIZE=4096,STACKSIZE=4096}; + void unpackData(USHORT imageWide,USHORT imageDeep,USHORT isInterlaced,USHORT pixelSize); +protected: + virtual void errorHandler(CHAR *errorMessage); + virtual void showHandler(UCHAR FAR *lpOutRow,USHORT yLocation); +private: + void cleanup(void); + void flush(void); + void initializeTable(SHORT clearCode); + WORD insertCode(SHORT code); + void putx(SHORT code,SHORT pixelSize); + void doPixel(CHAR tempCode); + USHORT getCode(USHORT reqct); + USHORT getBCode(USHORT code); + UCHAR getGB(void); + + static USHORT mcMask[]; + static USHORT mStartTable[]; + static USHORT mIncTable[]; + static CHAR errorMessage[]; + USHORT mImageWide; + USHORT mImageDeep; + USHORT mIsInterlaced; + USHORT mOldCode; + USHORT mNextCode; + USHORT mCode; + USHORT mPixelSize; + USHORT mNextLimit; + USHORT mBufferCount; + USHORT mRemct; + USHORT mReqct; + USHORT mRem; + USHORT mPass; + USHORT mxLocation; + USHORT myLocation; + USHORT mRowCount; + CHAR FAR *mlpctFirst; + CHAR FAR *mlpctLast; + SHORT FAR *mlpctLink; + UCHAR FAR *mlpOutRow; + UCHAR FAR *mlpStack; + + HGLOBAL mhGlobalctFirst; + HGLOBAL mhGlobalctLast; + HGLOBAL mhGlobalctLink; + HGLOBAL mhGlobalOutRow; + HGLOBAL mhGlobalStack; + WORD mIsConstructed; +}; +#endif + \ No newline at end of file diff --git a/mdiwin/MAIN.CPP b/mdiwin/MAIN.CPP new file mode 100644 index 0000000..df80db0 --- /dev/null +++ b/mdiwin/MAIN.CPP @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +OwnerDraw Main::smhBitmap; +int Main::smnCmdShow=0; +BWindow *Main::smlpStatusBar=0; + +void Main::hmemcpy(UHUGE *destination,UHUGE *source,unsigned long length) +{ + for(unsigned long count=0;count=0;srcRow--) + { + *(destPtr+(((long)destRow*(long)destCols)+(long)destCol))= + *(srcPtr+(((long)srcRow*(long)width)+(long)srcCol)); + if(destCol+1>=destCols) + { + destRow++; + destCol=0; + } + else destCol++; + } + } + ::GlobalUnlock(hGlobalDest); + return hGlobalDest; +} + +HGLOBAL Main::rotateLeft(UHUGE *srcPtr,WORD width,WORD height) +{ + HGLOBAL hGlobalDest; + UHUGE *destPtr; + int srcCol; + int srcRow; + int destRows; + int destCols; + int destRow; + int destCol; + + hGlobalDest=::GlobalAlloc(GMEM_FIXED,(long)width*(long)height); + if(!hGlobalDest)return 0; + destPtr=(UHUGE *)::GlobalLock(hGlobalDest); + destRows=width; + destCols=height; + destRow=destRows-1; + destCol=0; + for(srcRow=0;srcRow +#include +#include +#include + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static OwnerDraw smhBitmap; + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; + static BWindow *smlpStatusBar; + static void hmemcpy(UHUGE *dest,UHUGE *src,unsigned long lenght); + static void hmemset(UHUGE *dest,UCHAR ch,unsigned long length); + static HGLOBAL upsideDown(WORD width,WORD height,UHUGE *srcPtr); + static HGLOBAL rotateRight(UHUGE *srcPtr,WORD width,WORD height); + static HGLOBAL rotateLeft(UHUGE *srcPtr,WORD width,WORD height); +}; +#define WM_REACTIVATE WM_USER+1 + + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#endif diff --git a/mdiwin/MDIFRM.CPP b/mdiwin/MDIFRM.CPP new file mode 100644 index 0000000..0d3d5dc --- /dev/null +++ b/mdiwin/MDIFRM.CPP @@ -0,0 +1,30 @@ +#include + +FrameWindow::FrameWindow() +: mhWnd(0) +{ +} + +FrameWindow::~FrameWindow() +{ +} + +long FAR PASCAL FrameWindow::FrameWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) +{ + FrameWindow *pWindow=FrameWindow::GetPointer(hWnd); + if(pWindow==0) + { + if(WM_CREATE==message) + { + ::DefFrameProc(hWnd,(HWND)0,message,wParam,lParam); + LPCREATESTRUCT lpcs=(LPCREATESTRUCT)lParam; + pWindow=(FrameWindow *)lpcs->lpCreateParams; + FrameWindow::SetPointer(hWnd,pWindow); + pWindow->SetHandle(hWnd); + return pWindow->WndProc(message,wParam,lParam); + } + else if(WM_CREATE==message)return pWindow->WndProc(message,wParam,lParam); + else return ::DefFrameProc(hWnd,(HWND)0,message,wParam,lParam); + } + else return pWindow->WndProc(message,wParam,lParam); +} diff --git a/mdiwin/MDIFRM.HPP b/mdiwin/MDIFRM.HPP new file mode 100644 index 0000000..ceb5b41 --- /dev/null +++ b/mdiwin/MDIFRM.HPP @@ -0,0 +1,77 @@ +#ifndef _MDIFRM_HPP_ +#define _MDIFRM_HPP_ +#include +#include +class FrameWindow +{ +public: + FrameWindow(); + virtual ~FrameWindow(); + HWND GetHandle(void)const; + void SetHandle(HWND hWnd); + int Show(int nCmdShow); + void Update(void); + virtual long WndProc(UINT message,WPARAM wParam,LPARAM lParam)=0; +// static long FAR PASCAL _export FrameWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); + __declspec(dllexport) static long FAR PASCAL FrameWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); +protected: + HWND mhWnd; +#if defined (__SMALL__) || defined (__MEDIUM__) + static FrameWindow *FrameWindow::GetPointer(HWND hWnd); + static void FrameWindow::SetPointer(HWND hWnd,FrameWindow *pWindow); +#else + static FrameWindow *FrameWindow::GetPointer(HWND hWnd); + static void FrameWindow::SetPointer(HWND hWnd,FrameWindow *pWindow); +#endif +}; + +inline +HWND FrameWindow::GetHandle(void)const +{ + return mhWnd; +} +inline void FrameWindow::SetHandle(HWND hWnd) +{ + mhWnd=hWnd; +} + +inline +int FrameWindow::Show(int nCmdShow) +{ + return ::ShowWindow(mhWnd,nCmdShow); +} + +inline +void FrameWindow::Update(void) +{ + UpdateWindow(mhWnd); +} + +#if defined (__SMALL__) || defined (__MEDIUM__) +inline +FrameWindow *FrameWindow::GetPointer(HWND hWnd) +{ + return (FrameWindow*)GetWindowWord(hWnd,0); + +} + +inline +void FrameWindow::SetPointer(HWND hWnd,FrameWindow *pWindow) +{ + SetWindowWord(hWnd,0,(WORD)pWindow); +} +#else +inline +FrameWindow *FrameWindow::GetPointer(HWND hWnd) +{ + return (FrameWindow*)::GetWindowLong(hWnd,0); +} + +inline +void FrameWindow::SetPointer(HWND hWnd,FrameWindow *pWindow) +{ + ::SetWindowLong(hWnd,0,(LONG)pWindow); +} +#endif +#endif + \ No newline at end of file diff --git a/mdiwin/MDIWIN.001 b/mdiwin/MDIWIN.001 new file mode 100644 index 0000000..11ac76a --- /dev/null +++ b/mdiwin/MDIWIN.001 @@ -0,0 +1,3721 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=mdiwin - Win32 Debug +!MESSAGE No configuration specified. Defaulting to mdiwin - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "mdiwin - Win32 Release" && "$(CFG)" != "mdiwin - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Mdiwin.mak" CFG="mdiwin - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mdiwin - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mdiwin - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "mdiwin - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Mdiwin.exe" + +CLEAN : + -@erase "$(INTDIR)\Average.obj" + -@erase "$(INTDIR)\Bitmap.obj" + -@erase "$(INTDIR)\Bmplnk.obj" + -@erase "$(INTDIR)\Btnlnk.obj" + -@erase "$(INTDIR)\Bwindow.obj" + -@erase "$(INTDIR)\Capture.obj" + -@erase "$(INTDIR)\Catmull.obj" + -@erase "$(INTDIR)\Clipbrd.obj" + -@erase "$(INTDIR)\Convex.obj" + -@erase "$(INTDIR)\Crsctrl.obj" + -@erase "$(INTDIR)\Dissolve.obj" + -@erase "$(INTDIR)\Drawbmp.obj" + -@erase "$(INTDIR)\Dslvdlg.obj" + -@erase "$(INTDIR)\Dwindow.obj" + -@erase "$(INTDIR)\Factor.obj" + -@erase "$(INTDIR)\Filehelp.obj" + -@erase "$(INTDIR)\Font.obj" + -@erase "$(INTDIR)\Frame.obj" + -@erase "$(INTDIR)\Frmdlg.obj" + -@erase "$(INTDIR)\Inifile.obj" + -@erase "$(INTDIR)\Istream.obj" + -@erase "$(INTDIR)\Logowin.obj" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mdifrm.obj" + -@erase "$(INTDIR)\Mdiwin.obj" + -@erase "$(INTDIR)\Mesh.obj" + -@erase "$(INTDIR)\Meshfrm.obj" + -@erase "$(INTDIR)\Meshwrp.obj" + -@erase "$(INTDIR)\Owner.obj" + -@erase "$(INTDIR)\Paltdlg.obj" + -@erase "$(INTDIR)\Polypnt.obj" + -@erase "$(INTDIR)\Process.obj" + -@erase "$(INTDIR)\Profile.obj" + -@erase "$(INTDIR)\Pwarp.obj" + -@erase "$(INTDIR)\Resize.obj" + -@erase "$(INTDIR)\Schedule.obj" + -@erase "$(INTDIR)\Segment.obj" + -@erase "$(INTDIR)\Shear.obj" + -@erase "$(INTDIR)\Slide.obj" + -@erase "$(INTDIR)\Slidesel.obj" + -@erase "$(INTDIR)\Spacial.obj" + -@erase "$(INTDIR)\Stdtmpla.obj" + -@erase "$(INTDIR)\Stdtmplb.obj" + -@erase "$(INTDIR)\Stdtmplc.obj" + -@erase "$(INTDIR)\Stdtmpld.obj" + -@erase "$(INTDIR)\Stdtmple.obj" + -@erase "$(INTDIR)\Stdtmplf.obj" + -@erase "$(INTDIR)\Stdtmplg.obj" + -@erase "$(INTDIR)\Stdtmplh.obj" + -@erase "$(INTDIR)\Stdtmpli.obj" + -@erase "$(INTDIR)\Stdtmplj.obj" + -@erase "$(INTDIR)\Stdtmplk.obj" + -@erase "$(INTDIR)\Stdtmpll.obj" + -@erase "$(INTDIR)\Stdtmplm.obj" + -@erase "$(INTDIR)\Stream.obj" + -@erase "$(INTDIR)\String.obj" + -@erase "$(INTDIR)\Toolbar.obj" + -@erase "$(INTDIR)\Txlmtrx.obj" + -@erase "$(INTDIR)\View.obj" + -@erase "$(INTDIR)\Viewsel.obj" + -@erase "$(INTDIR)\Window.obj" + -@erase "$(OUTDIR)\Mdiwin.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Mdiwin.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mdiwin.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Mdiwin.pdb" /machine:I386 /out:"$(OUTDIR)/Mdiwin.exe" +LINK32_OBJS= \ + "$(INTDIR)\Average.obj" \ + "$(INTDIR)\Bitmap.obj" \ + "$(INTDIR)\Bmplnk.obj" \ + "$(INTDIR)\Btnlnk.obj" \ + "$(INTDIR)\Bwindow.obj" \ + "$(INTDIR)\Capture.obj" \ + "$(INTDIR)\Catmull.obj" \ + "$(INTDIR)\Clipbrd.obj" \ + "$(INTDIR)\Convex.obj" \ + "$(INTDIR)\Crsctrl.obj" \ + "$(INTDIR)\Dissolve.obj" \ + "$(INTDIR)\Drawbmp.obj" \ + "$(INTDIR)\Dslvdlg.obj" \ + "$(INTDIR)\Dwindow.obj" \ + "$(INTDIR)\Factor.obj" \ + "$(INTDIR)\Filehelp.obj" \ + "$(INTDIR)\Font.obj" \ + "$(INTDIR)\Frame.obj" \ + "$(INTDIR)\Frmdlg.obj" \ + "$(INTDIR)\Inifile.obj" \ + "$(INTDIR)\Istream.obj" \ + "$(INTDIR)\Logowin.obj" \ + "$(INTDIR)\Lzw.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mdifrm.obj" \ + "$(INTDIR)\Mdiwin.obj" \ + "$(INTDIR)\Mesh.obj" \ + "$(INTDIR)\Meshfrm.obj" \ + "$(INTDIR)\Meshwrp.obj" \ + "$(INTDIR)\Owner.obj" \ + "$(INTDIR)\Paltdlg.obj" \ + "$(INTDIR)\Polypnt.obj" \ + "$(INTDIR)\Process.obj" \ + "$(INTDIR)\Profile.obj" \ + "$(INTDIR)\Pwarp.obj" \ + "$(INTDIR)\Resize.obj" \ + "$(INTDIR)\Schedule.obj" \ + "$(INTDIR)\Segment.obj" \ + "$(INTDIR)\Shear.obj" \ + "$(INTDIR)\Slide.obj" \ + "$(INTDIR)\Slidesel.obj" \ + "$(INTDIR)\Spacial.obj" \ + "$(INTDIR)\Stdtmpla.obj" \ + "$(INTDIR)\Stdtmplb.obj" \ + "$(INTDIR)\Stdtmplc.obj" \ + "$(INTDIR)\Stdtmpld.obj" \ + "$(INTDIR)\Stdtmple.obj" \ + "$(INTDIR)\Stdtmplf.obj" \ + "$(INTDIR)\Stdtmplg.obj" \ + "$(INTDIR)\Stdtmplh.obj" \ + "$(INTDIR)\Stdtmpli.obj" \ + "$(INTDIR)\Stdtmplj.obj" \ + "$(INTDIR)\Stdtmplk.obj" \ + "$(INTDIR)\Stdtmpll.obj" \ + "$(INTDIR)\Stdtmplm.obj" \ + "$(INTDIR)\Stream.obj" \ + "$(INTDIR)\String.obj" \ + "$(INTDIR)\Toolbar.obj" \ + "$(INTDIR)\Txlmtrx.obj" \ + "$(INTDIR)\View.obj" \ + "$(INTDIR)\Viewsel.obj" \ + "$(INTDIR)\Window.obj" + +"$(OUTDIR)\Mdiwin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Mdiwin.exe" + +CLEAN : + -@erase "$(INTDIR)\Average.obj" + -@erase "$(INTDIR)\Bitmap.obj" + -@erase "$(INTDIR)\Bmplnk.obj" + -@erase "$(INTDIR)\Btnlnk.obj" + -@erase "$(INTDIR)\Bwindow.obj" + -@erase "$(INTDIR)\Capture.obj" + -@erase "$(INTDIR)\Catmull.obj" + -@erase "$(INTDIR)\Clipbrd.obj" + -@erase "$(INTDIR)\Convex.obj" + -@erase "$(INTDIR)\Crsctrl.obj" + -@erase "$(INTDIR)\Dissolve.obj" + -@erase "$(INTDIR)\Drawbmp.obj" + -@erase "$(INTDIR)\Dslvdlg.obj" + -@erase "$(INTDIR)\Dwindow.obj" + -@erase "$(INTDIR)\Factor.obj" + -@erase "$(INTDIR)\Filehelp.obj" + -@erase "$(INTDIR)\Font.obj" + -@erase "$(INTDIR)\Frame.obj" + -@erase "$(INTDIR)\Frmdlg.obj" + -@erase "$(INTDIR)\Inifile.obj" + -@erase "$(INTDIR)\Istream.obj" + -@erase "$(INTDIR)\Logowin.obj" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mdifrm.obj" + -@erase "$(INTDIR)\Mdiwin.obj" + -@erase "$(INTDIR)\Mesh.obj" + -@erase "$(INTDIR)\Meshfrm.obj" + -@erase "$(INTDIR)\Meshwrp.obj" + -@erase "$(INTDIR)\Owner.obj" + -@erase "$(INTDIR)\Paltdlg.obj" + -@erase "$(INTDIR)\Polypnt.obj" + -@erase "$(INTDIR)\Process.obj" + -@erase "$(INTDIR)\Profile.obj" + -@erase "$(INTDIR)\Pwarp.obj" + -@erase "$(INTDIR)\Resize.obj" + -@erase "$(INTDIR)\Schedule.obj" + -@erase "$(INTDIR)\Segment.obj" + -@erase "$(INTDIR)\Shear.obj" + -@erase "$(INTDIR)\Slide.obj" + -@erase "$(INTDIR)\Slidesel.obj" + -@erase "$(INTDIR)\Spacial.obj" + -@erase "$(INTDIR)\Stdtmpla.obj" + -@erase "$(INTDIR)\Stdtmplb.obj" + -@erase "$(INTDIR)\Stdtmplc.obj" + -@erase "$(INTDIR)\Stdtmpld.obj" + -@erase "$(INTDIR)\Stdtmple.obj" + -@erase "$(INTDIR)\Stdtmplf.obj" + -@erase "$(INTDIR)\Stdtmplg.obj" + -@erase "$(INTDIR)\Stdtmplh.obj" + -@erase "$(INTDIR)\Stdtmpli.obj" + -@erase "$(INTDIR)\Stdtmplj.obj" + -@erase "$(INTDIR)\Stdtmplk.obj" + -@erase "$(INTDIR)\Stdtmpll.obj" + -@erase "$(INTDIR)\Stdtmplm.obj" + -@erase "$(INTDIR)\Stream.obj" + -@erase "$(INTDIR)\String.obj" + -@erase "$(INTDIR)\Toolbar.obj" + -@erase "$(INTDIR)\Txlmtrx.obj" + -@erase "$(INTDIR)\View.obj" + -@erase "$(INTDIR)\Viewsel.obj" + -@erase "$(INTDIR)\Window.obj" + -@erase "$(OUTDIR)\Mdiwin.exe" + -@erase "$(OUTDIR)\Mdiwin.ilk" + -@erase "$(OUTDIR)\Mdiwin.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mdiwin.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/Mdiwin.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Mdiwin.exe" +LINK32_OBJS= \ + "$(INTDIR)\Average.obj" \ + "$(INTDIR)\Bitmap.obj" \ + "$(INTDIR)\Bmplnk.obj" \ + "$(INTDIR)\Btnlnk.obj" \ + "$(INTDIR)\Bwindow.obj" \ + "$(INTDIR)\Capture.obj" \ + "$(INTDIR)\Catmull.obj" \ + "$(INTDIR)\Clipbrd.obj" \ + "$(INTDIR)\Convex.obj" \ + "$(INTDIR)\Crsctrl.obj" \ + "$(INTDIR)\Dissolve.obj" \ + "$(INTDIR)\Drawbmp.obj" \ + "$(INTDIR)\Dslvdlg.obj" \ + "$(INTDIR)\Dwindow.obj" \ + "$(INTDIR)\Factor.obj" \ + "$(INTDIR)\Filehelp.obj" \ + "$(INTDIR)\Font.obj" \ + "$(INTDIR)\Frame.obj" \ + "$(INTDIR)\Frmdlg.obj" \ + "$(INTDIR)\Inifile.obj" \ + "$(INTDIR)\Istream.obj" \ + "$(INTDIR)\Logowin.obj" \ + "$(INTDIR)\Lzw.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mdifrm.obj" \ + "$(INTDIR)\Mdiwin.obj" \ + "$(INTDIR)\Mesh.obj" \ + "$(INTDIR)\Meshfrm.obj" \ + "$(INTDIR)\Meshwrp.obj" \ + "$(INTDIR)\Owner.obj" \ + "$(INTDIR)\Paltdlg.obj" \ + "$(INTDIR)\Polypnt.obj" \ + "$(INTDIR)\Process.obj" \ + "$(INTDIR)\Profile.obj" \ + "$(INTDIR)\Pwarp.obj" \ + "$(INTDIR)\Resize.obj" \ + "$(INTDIR)\Schedule.obj" \ + "$(INTDIR)\Segment.obj" \ + "$(INTDIR)\Shear.obj" \ + "$(INTDIR)\Slide.obj" \ + "$(INTDIR)\Slidesel.obj" \ + "$(INTDIR)\Spacial.obj" \ + "$(INTDIR)\Stdtmpla.obj" \ + "$(INTDIR)\Stdtmplb.obj" \ + "$(INTDIR)\Stdtmplc.obj" \ + "$(INTDIR)\Stdtmpld.obj" \ + "$(INTDIR)\Stdtmple.obj" \ + "$(INTDIR)\Stdtmplf.obj" \ + "$(INTDIR)\Stdtmplg.obj" \ + "$(INTDIR)\Stdtmplh.obj" \ + "$(INTDIR)\Stdtmpli.obj" \ + "$(INTDIR)\Stdtmplj.obj" \ + "$(INTDIR)\Stdtmplk.obj" \ + "$(INTDIR)\Stdtmpll.obj" \ + "$(INTDIR)\Stdtmplm.obj" \ + "$(INTDIR)\Stream.obj" \ + "$(INTDIR)\String.obj" \ + "$(INTDIR)\Toolbar.obj" \ + "$(INTDIR)\Txlmtrx.obj" \ + "$(INTDIR)\View.obj" \ + "$(INTDIR)\Viewsel.obj" \ + "$(INTDIR)\Window.obj" + +"$(OUTDIR)\Mdiwin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "mdiwin - Win32 Release" +# Name "mdiwin - Win32 Debug" + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Window.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_WINDO=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Window.obj" : $(SOURCE) $(DEP_CPP_WINDO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + + +"$(INTDIR)\Window.obj" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bitmap.cpp +DEP_CPP_BITMA=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Bitmap.obj" : $(SOURCE) $(DEP_CPP_BITMA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bmplnk.cpp +DEP_CPP_BMPLN=\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Bmplnk.obj" : $(SOURCE) $(DEP_CPP_BMPLN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Btnlnk.cpp +DEP_CPP_BTNLN=\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Btnlnk.obj" : $(SOURCE) $(DEP_CPP_BTNLN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bwindow.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_BWIND=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Font.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Bwindow.obj" : $(SOURCE) $(DEP_CPP_BWIND) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_BWIND=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Font.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Bwindow.obj" : $(SOURCE) $(DEP_CPP_BWIND) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Capture.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CAPTU=\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Capture.obj" : $(SOURCE) $(DEP_CPP_CAPTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CAPTU=\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Capture.obj" : $(SOURCE) $(DEP_CPP_CAPTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Catmull.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CATMU=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Catmull.obj" : $(SOURCE) $(DEP_CPP_CATMU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CATMU=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Dos.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Catmull.obj" : $(SOURCE) $(DEP_CPP_CATMU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Clipbrd.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CLIPB=\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Clipbrd.obj" : $(SOURCE) $(DEP_CPP_CLIPB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CLIPB=\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Clipbrd.obj" : $(SOURCE) $(DEP_CPP_CLIPB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Convex.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CONVE=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Convex.obj" : $(SOURCE) $(DEP_CPP_CONVE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CONVE=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Math.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Convex.obj" : $(SOURCE) $(DEP_CPP_CONVE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Crsctrl.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CRSCT=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Crsctrl.obj" : $(SOURCE) $(DEP_CPP_CRSCT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CRSCT=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Crsctrl.obj" : $(SOURCE) $(DEP_CPP_CRSCT) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dissolve.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_DISSO=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\Qsort.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Dissolve.obj" : $(SOURCE) $(DEP_CPP_DISSO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_DISSO=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\Qsort.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Dos.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Dissolve.obj" : $(SOURCE) $(DEP_CPP_DISSO) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Drawbmp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_DRAWB=\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Drawbmp.obj" : $(SOURCE) $(DEP_CPP_DRAWB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_DRAWB=\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Drawbmp.obj" : $(SOURCE) $(DEP_CPP_DRAWB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dslvdlg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_DSLVD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Dslvdlg.obj" : $(SOURCE) $(DEP_CPP_DSLVD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_DSLVD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Dslvdlg.obj" : $(SOURCE) $(DEP_CPP_DSLVD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dwindow.cpp +DEP_CPP_DWIND=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Dos.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Dwindow.obj" : $(SOURCE) $(DEP_CPP_DWIND) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Factor.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_FACTO=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Factor.obj" : $(SOURCE) $(DEP_CPP_FACTO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_FACTO=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Factor.obj" : $(SOURCE) $(DEP_CPP_FACTO) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Filehelp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_FILEH=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Filehelp.obj" : $(SOURCE) $(DEP_CPP_FILEH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_FILEH=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Filehelp.obj" : $(SOURCE) $(DEP_CPP_FILEH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Font.cpp +DEP_CPP_FONT_=\ + {$(INCLUDE)}"\.\Font.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Font.obj" : $(SOURCE) $(DEP_CPP_FONT_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Frame.cpp +DEP_CPP_FRAME=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Frame.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdifrm.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Slidesel.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Frame.obj" : $(SOURCE) $(DEP_CPP_FRAME) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Frmdlg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_FRMDL=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Frmdlg.obj" : $(SOURCE) $(DEP_CPP_FRMDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_FRMDL=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Frmdlg.obj" : $(SOURCE) $(DEP_CPP_FRMDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Inifile.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_INIFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Inifile.obj" : $(SOURCE) $(DEP_CPP_INIFI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_INIFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Inifile.obj" : $(SOURCE) $(DEP_CPP_INIFI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Istream.cpp +DEP_CPP_ISTRE=\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Istream.obj" : $(SOURCE) $(DEP_CPP_ISTRE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Logowin.cpp +DEP_CPP_LOGOW=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\logowin.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Logowin.obj" : $(SOURCE) $(DEP_CPP_LOGOW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Lzw.cpp +DEP_CPP_LZW_C=\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Lzw.obj" : $(SOURCE) $(DEP_CPP_LZW_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Frame.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\logowin.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdifrm.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mdifrm.cpp +DEP_CPP_MDIFR=\ + {$(INCLUDE)}"\.\Mdifrm.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Mdifrm.obj" : $(SOURCE) $(DEP_CPP_MDIFR) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mdiwin.cpp +DEP_CPP_MDIWI=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Mdiwin.obj" : $(SOURCE) $(DEP_CPP_MDIWI) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mesh.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_MESH_=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Mesh.obj" : $(SOURCE) $(DEP_CPP_MESH_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_MESH_=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Mesh.obj" : $(SOURCE) $(DEP_CPP_MESH_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Meshfrm.cpp +DEP_CPP_MESHF=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Meshfrm.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Meshfrm.obj" : $(SOURCE) $(DEP_CPP_MESHF) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Meshwrp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_MESHW=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Meshwrp.obj" : $(SOURCE) $(DEP_CPP_MESHW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_MESHW=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Meshwrp.obj" : $(SOURCE) $(DEP_CPP_MESHW) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Owner.cpp +DEP_CPP_OWNER=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Owner.obj" : $(SOURCE) $(DEP_CPP_OWNER) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Paltdlg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PALTD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Paltdlg.obj" : $(SOURCE) $(DEP_CPP_PALTD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PALTD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Paltdlg.obj" : $(SOURCE) $(DEP_CPP_PALTD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Polypnt.cpp +DEP_CPP_POLYP=\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Polypnt.obj" : $(SOURCE) $(DEP_CPP_POLYP) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Process.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PROCE=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Process.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PROCE=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Process.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Profile.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PROFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Profile.obj" : $(SOURCE) $(DEP_CPP_PROFI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PROFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Profile.obj" : $(SOURCE) $(DEP_CPP_PROFI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Pwarp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PWARP=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Pwarp.obj" : $(SOURCE) $(DEP_CPP_PWARP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PWARP=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Pwarp.obj" : $(SOURCE) $(DEP_CPP_PWARP) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Resize.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_RESIZ=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Resize.obj" : $(SOURCE) $(DEP_CPP_RESIZ) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_RESIZ=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Resize.obj" : $(SOURCE) $(DEP_CPP_RESIZ) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Schedule.cpp +DEP_CPP_SCHED=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Schedule.obj" : $(SOURCE) $(DEP_CPP_SCHED) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Segment.cpp +DEP_CPP_SEGME=\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Segment.obj" : $(SOURCE) $(DEP_CPP_SEGME) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Shear.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SHEAR=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Shear.obj" : $(SOURCE) $(DEP_CPP_SHEAR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SHEAR=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Shear.obj" : $(SOURCE) $(DEP_CPP_SHEAR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Slide.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SLIDE=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slide.obj" : $(SOURCE) $(DEP_CPP_SLIDE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SLIDE=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slide.obj" : $(SOURCE) $(DEP_CPP_SLIDE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Slidesel.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SLIDES=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slidesel.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slidesel.obj" : $(SOURCE) $(DEP_CPP_SLIDES) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SLIDES=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slidesel.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slidesel.obj" : $(SOURCE) $(DEP_CPP_SLIDES) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Spacial.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpla.cpp +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmpla.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplb.cpp +DEP_CPP_STDTMP=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplb.obj" : $(SOURCE) $(DEP_CPP_STDTMP) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplc.cpp +DEP_CPP_STDTMPL=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplc.obj" : $(SOURCE) $(DEP_CPP_STDTMPL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpld.cpp +DEP_CPP_STDTMPLD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmpld.obj" : $(SOURCE) $(DEP_CPP_STDTMPLD) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmple.cpp +DEP_CPP_STDTMPLE=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmple.obj" : $(SOURCE) $(DEP_CPP_STDTMPLE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplf.cpp +DEP_CPP_STDTMPLF=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplf.obj" : $(SOURCE) $(DEP_CPP_STDTMPLF) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLG=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplg.obj" : $(SOURCE) $(DEP_CPP_STDTMPLG) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLG=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplg.obj" : $(SOURCE) $(DEP_CPP_STDTMPLG) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplh.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLH=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplh.obj" : $(SOURCE) $(DEP_CPP_STDTMPLH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLH=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplh.obj" : $(SOURCE) $(DEP_CPP_STDTMPLH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpli.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLI=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpli.obj" : $(SOURCE) $(DEP_CPP_STDTMPLI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLI=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpli.obj" : $(SOURCE) $(DEP_CPP_STDTMPLI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplj.cpp +DEP_CPP_STDTMPLJ=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplj.obj" : $(SOURCE) $(DEP_CPP_STDTMPLJ) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplk.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLK=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Gif.tpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Vector.tpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplk.obj" : $(SOURCE) $(DEP_CPP_STDTMPLK) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLK=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Gif.tpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Vector.tpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplk.obj" : $(SOURCE) $(DEP_CPP_STDTMPLK) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpll.cpp +DEP_CPP_STDTMPLL=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Qsort.hpp"\ + {$(INCLUDE)}"\.\qsort.tpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmpll.obj" : $(SOURCE) $(DEP_CPP_STDTMPLL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplm.cpp +DEP_CPP_STDTMPLM=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Cache.tpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplm.obj" : $(SOURCE) $(DEP_CPP_STDTMPLM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stream.cpp +DEP_CPP_STREA=\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stream.obj" : $(SOURCE) $(DEP_CPP_STREA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\String.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STRIN=\ + {$(INCLUDE)}"\.\string.hpp"\ + + +"$(INTDIR)\String.obj" : $(SOURCE) $(DEP_CPP_STRIN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STRIN=\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\String.obj" : $(SOURCE) $(DEP_CPP_STRIN) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Toolbar.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Txlmtrx.cpp +DEP_CPP_TXLMT=\ + {$(INCLUDE)}"\.\txlmtrx.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Txlmtrx.obj" : $(SOURCE) $(DEP_CPP_TXLMT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\View.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_VIEW_=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Meshfrm.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\txlmtrx.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\View.obj" : $(SOURCE) $(DEP_CPP_VIEW_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_VIEW_=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Meshfrm.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\txlmtrx.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\View.obj" : $(SOURCE) $(DEP_CPP_VIEW_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Viewsel.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Viewsel.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Viewsel.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Average.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_AVERA=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Average.obj" : $(SOURCE) $(DEP_CPP_AVERA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_AVERA=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Average.obj" : $(SOURCE) $(DEP_CPP_AVERA) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/mdiwin/MDIWIN.BAK b/mdiwin/MDIWIN.BAK new file mode 100644 index 0000000..5b347e7 --- /dev/null +++ b/mdiwin/MDIWIN.BAK @@ -0,0 +1,833 @@ +#include +#include + +P944 ICON "944.ICO" + +mdiMainMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "Load &GIF...", MENU_LOAD_GIF + MENUITEM "Load &Bitmap...", MENU_LOAD_BITMAP + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM "E&xit", MENU_FILE_EXIT + END +END + +viewMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "Load &GIF...", MENU_LOAD_GIF + MENUITEM "Load &Bitmap...", MENU_LOAD_BITMAP + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM SEPARATOR + MENUITEM "&Save Bitmap...", MENU_FILE_SAVEBITMAP + MENUITEM "E&xit", MENU_FILE_EXIT + END + + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X", MENU_CUT + MENUITEM "&Copy\tCtrl+C", MENU_COPY + MENUITEM "P&aste\tCtrl+V", MENU_PASTE + MENUITEM "Cli&p\tCtrl+P", MENU_CLIP + END + + POPUP "E&nhancement" + BEGIN + MENUITEM "&Smoothing", MENU_SMOOTHING + MENUITEM "&Resize", MENU_RESIZE + MENUITEM "&Translate", MENU_TRANSLATE + MENUITEM "S&hear", MENU_SHEAR + END + + POPUP "War&ping" + BEGIN + MENUITEM "&Perspective Warp" , MENU_WARP_PERSPECTIVE + MENUITEM "&Convex Warp", MENU_WARP_CONVEX + END + + POPUP "Pale&tte" + BEGIN + MENUITEM "&View Palette...", MENU_PALETTE_VIEW + END + + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM "&Hide Toolbar", IDM_TOOLBAR + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END +END + + +slideMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "Load &GIF...", MENU_LOAD_GIF + MENUITEM "Load &Bitmap...", MENU_LOAD_BITMAP + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM SEPARATOR + MENUITEM "&Save Bitmap...", MENU_FILE_SAVEBITMAP + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM "&Hide Toolbar", IDM_TOOLBAR + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END +END + +FileSelect DIALOG 31, 27, 211, 145 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 6,"Helv" +BEGIN + CONTROL "", IDS_FLIST, "LISTBOX", LBS_STANDARD | LBS_USETABSTOPS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 53, 201, 88 + CONTROL "", IDS_FNAME, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 42, 6, 84, 12 + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 131, 3, 36, 24 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 170, 3, 36, 24 + LTEXT "File Name:", -1, 2, 8, 38, 8 + LTEXT "Path:", -1, 4, 24, 17, 8 + LTEXT "", IDS_FPATH, 25, 24, 98, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File", -1, 20, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Date", -1, 68, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Size", -1, 129, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Time", -1, 159, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File Save", IDS_FILESAVE, 90, 155, 38, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File Open", IDS_FILEOPEN, 90, 168, 34, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +END + +ViewSelect DIALOG 11, 26, 130, 55 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Select Mesh Target" +FONT 6, "Helv" +BEGIN + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 92, 5, 36, 24 + CONTROL "", VIEWSEL_LIST, "LISTBOX", LBS_STANDARD | LBS_USETABSTOPS | WS_CHILD | WS_VISIBLE, 5, 4, 82, 48 +END + +Processing DIALOG 20, 36, 153, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Image Processing" +FONT 6, "Helv" +BEGIN + CHECKBOX "3x3 Matrix Averaging", IP_AVERAGING, 7, 55, 82, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Low Pass Filter", IP_LOWPASS, 7, 70, 77, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "High Pass Filter", IP_HIGHPASS, 7, 85, 65, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + EDITTEXT IP_33R1C1, 104, 57, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R1C2, 118, 57, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R1C3, 132, 57, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R2C1, 104, 69, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R2C2, 118, 69, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R2C3, 132, 69, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R3C1, 104, 81, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R3C2, 118, 81, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R3C3, 132, 81, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + CHECKBOX "Sobel Transform", IP_SOBEL, 7, 124, 87, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Smoothed Transform", IP_SMOOTHED, 7, 136, 84, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Laplace Transform", IP_LAPLACE, 7, 148, 80, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Isotropic Transform", IP_ISOTROPIC, 7, 160, 75, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Stochastic Transform", IP_STOCHASTIC, 7, 172, 85, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 77, 2, 36, 24 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 115, 2, 36, 24 + CONTROL "Smoothing Algorithms", IP_SMOOTHING, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 37, 148, 68 + LTEXT "Matrix", -1, 109, 47, 24, 7, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "Edge Detection Algorithms", IP_EDGE, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 111, 148, 76 +END + +SlideShow DIALOG 20, 30, 208, 128 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Slide Show" +FONT 6, "Helv" +BEGIN + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 132, 4, 36, 24 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 169, 4, 36, 24 + RADIOBUTTON "Select Files", SS_SELECT, 5, 29, 51, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP +; CONTROL "", SS_LIST, "LISTBOX", LBS_NOTIFY | LBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, 3, 45, 202, 86 +; CHECKBOX "Bitmap", SS_BITMAP, 5, 4, 36, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP +; CHECKBOX "Project", SS_PROJECT, 5, 17, 36, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +Factor DIALOG 10, 27, 90, 72 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 6, "Helv" +{ + EDITTEXT FACTOR_WIDTH, 56, 40, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT FACTOR_HEIGHT, 56, 54, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT FACTOR_WIDTHINCR, 140, 40, 40, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT FACTOR_HEIGHTINCR, 140, 54, 40, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + RADIOBUTTON "Op :", FACTOR_WIDTHOP, 182, 41, 28, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "Op :", FACTOR_HEIGHTOP, 182, 54, 27, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 1, 1, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 40, 1, 36, 24 + LTEXT "Width Factor :", -1, 4, 42, 48, 8 + LTEXT "Height Factor :", -1, 4, 55, 51, 8 + LTEXT "Incremental :", -1, 93, 42, 45, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Incremental :", -1, 93, 55, 44, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "", 106, 91, 29, 131, 41, BS_GROUPBOX | WS_CHILD | WS_VISIBLE + LTEXT "", FACTOR_WOPSTRING, 211, 43, 9, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "", FACTOR_HOPSTRING, 211, 55, 9, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +} + +Frame DIALOG 10, 27, 81, 65 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Mesh Frames" +FONT 6, "Helv" +BEGIN + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 4, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 41, 4, 36, 24 + LTEXT "Frames:", -1, 4, 45, 27, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT FRAME_FRAMES, 33, 44, 21, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP +END + +mdiAccel ACCELERATORS +BEGIN + VK_F5, IDM_CASCADE, VIRTKEY, SHIFT + VK_F4, IDM_TILE, VIRTKEY, SHIFT + "X", MENU_CUT, VIRTKEY, CONTROL + "C", MENU_COPY, VIRTKEY, CONTROL + "V", MENU_PASTE, VIRTKEY, CONTROL + "P", MENU_CLIP, VIRTKEY, CONTROL +END + +Palette DIALOG 30, 0, 142, 105 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Palette" +FONT 6,"Helv" +BEGIN + CONTROL "", PALETTE_COLORS, "button", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE, 1, 34, 140, 68 + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 103, 3, 36, 24 +END + +Dissolve DIALOG 19, 25, 143, 137 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Cross Dissolve Schedule" +FONT 6,"Helv" +BEGIN + CONTROL "", DSLV_LIST, "LISTBOX", LBS_NOTIFY | LBS_HASSTRINGS | LBS_USETABSTOPS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 3, 54, 137, 79 + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 105, 2, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 68, 2, 36, 24 + LTEXT "Frame", -1, 5, 42, 20, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Source", -1, 36, 42, 26, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Repeat", -1, 102, 42, 25, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Destination", -1, 62, 42, 38, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +END + +EditDissolve DIALOG 21, 35, 117, 74 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Edit Item" +FONT 8,"Helv" +BEGIN + LTEXT "Source :", -1, 4, 39, 29, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Destination :", -1, 4, 51, 45, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Repeat :", -1, 4, 63, 34, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT EDITITEM_SOURCE, 50, 35, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT EDITITEM_DESTINATION, 50, 47, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT EDITITEM_REPEAT, 50, 59, 16, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 80, 2, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 43, 2, 36, 24 +END + +CLIP BITMAP +BEGIN +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 00 88 80 F8 88 88 88 88 88 88 00 80 FF' +'08 80 F8 88 88 88 88 88 88 0F 0F FF 08 80 F8 88' +'88 88 88 88 88 0F FF F0 88 80 F8 80 08 00 80 08' +'00 0F FF 08 88 80 F8 80 88 88 88 88 88 0F FF F0' +'88 80 F8 88 88 88 88 88 88 00 00 00 88 80 F8 80' +'88 88 88 88 88 88 08 88 88 80 F8 80 88 88 88 88' +'88 88 08 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 80 88 88 88 88 88 88 08 88 88 80 F8 80' +'88 88 88 88 88 88 08 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 80 88 88 88 88 88 88 08 88' +'88 80 F8 80 88 88 88 88 88 88 08 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 80 88 88 88 88' +'88 88 08 88 88 80 F8 80 08 00 80 08 00 80 08 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF FF' + +END +MESH BITMAP +BEGIN +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 80 00 00' +'00 00 08 88 88 80 F8 88 80 0F 00 F0 0F 00 F0 08' +'88 80 F8 88 00 F0 0F 00 F0 0F 00 F0 88 80 F8 88' +'0F 00 F0 0F 00 F0 0F 00 88 80 F8 80 F0 0F 00 F0' +'0F 00 F0 0F 08 80 F8 80 00 F0 0F 00 F0 0F 00 F0' +'08 80 F8 80 0F 00 F0 0F 00 F0 0F 00 08 80 F8 80' +'F0 0F 00 F0 0F 00 F0 0F 08 80 F8 80 00 F0 0F 00' +'F0 0F 00 F0 08 80 F8 80 0F 00 F0 0F 00 F0 0F 00' +'08 80 F8 80 F0 0F 00 F0 0F 00 F0 0F 08 80 F8 80' +'00 F0 0F 00 F0 0F 00 F0 08 80 F8 80 0F 00 F0 0F' +'00 F0 0F 00 08 80 F8 80 F0 0F 00 F0 0F 00 F0 0F' +'08 80 F8 88 00 F0 0F 00 F0 0F 00 F0 88 80 F8 88' +'0F 00 F0 0F 00 F0 0F 00 88 80 F8 88 80 0F 00 F0' +'0F 00 F0 08 88 80 F8 88 88 80 00 00 00 00 08 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF F8' + +END +CUT BITMAP +BEGIN +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 80 00 88 88' +'88 88 00 08 88 80 F8 88 00 80 08 88 88 80 08 00' +'88 80 F8 88 08 88 00 88 88 00 88 80 88 80 F8 88' +'00 88 80 88 88 08 88 00 88 80 F8 88 80 08 80 88' +'88 08 80 08 88 80 F8 88 88 00 00 08 80 00 00 88' +'88 80 F8 88 88 88 00 00 00 00 88 88 88 80 F8 88' +'88 88 80 0F F0 08 88 88 88 80 F8 88 88 88 88 00' +'00 88 88 88 88 80 F8 88 88 88 80 FF F0 08 88 88' +'88 80 F8 88 88 88 0F F0 0F F0 88 88 88 80 F8 88' +'88 80 FF 08 80 FF 08 88 88 80 F8 88 88 0F F0 88' +'88 0F F0 88 88 80 F8 88 80 FF 08 88 88 80 FF 08' +'88 80 F8 88 0F F0 88 88 88 88 0F F0 88 80 F8 80' +'FF 08 88 88 88 88 80 FF 08 80 F8 80 F0 88 88 88' +'88 88 88 0F 08 80 F8 80 08 88 88 88 88 88 88 80' +'08 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF F8' + +END +ARROWD BITMAP LOADONCALL MOVEABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 80' + '08 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 80 FF FF 08 88 88 88 80 F8 88' + '88 88 0F FF FF F0 88 88 88 80 F8 88 88 88 00 0F' + 'F0 00 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 00 00 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +END + +ARROWU BITMAP LOADONCALL MOVEABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 00' + '00 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 00 0F F0 00 88 88' + '88 80 F8 88 88 88 0F FF FF F0 88 88 88 80 F8 88' + '88 88 80 FF FF 08 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 80 08 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +END + +ARROWR BITMAP LOADONCALL MOVEABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 00 88' + '88 80 F8 88 88 88 88 88 88 88 0F 08 88 80 F8 80' + '00 00 00 00 00 00 0F F0 88 80 F8 80 FF FF FF FF' + 'FF FF FF FF 08 80 F8 80 FF FF FF FF FF FF FF FF' + '08 80 F8 80 00 00 00 00 00 00 0F F0 88 80 F8 88' + '88 88 88 88 88 88 0F 08 88 80 F8 88 88 88 88 88' + '88 88 00 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +END + +ARROWL BITMAP LOADONCALL MOVEABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 00 88 88 88 88 88 88' + '88 80 F8 88 80 F0 88 88 88 88 88 88 88 80 F8 88' + '0F F0 00 00 00 00 00 00 08 80 F8 80 FF FF FF FF' + 'FF FF FF FF 08 80 F8 80 FF FF FF FF FF FF FF FF' + '08 80 F8 88 0F F0 00 00 00 00 00 00 08 80 F8 88' + '80 F0 88 88 88 88 88 88 88 80 F8 88 88 00 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +END + + +BSAVE BITMAP +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 77 7F FF FF FF' + '77 70 F8 88 88 88 88 77 7F FF 11 1F 77 70 F8 88' + '88 88 88 77 7F FF 11 1F 77 70 F8 88 88 88 88 77' + '7F FF 11 1F 77 70 F8 88 80 88 88 77 7F FF FF FF' + '77 70 F8 88 80 08 88 77 77 77 77 77 77 70 F8 88' + '80 00 88 77 77 77 77 77 77 70 F0 00 00 00 08 77' + '77 77 77 77 77 70 F0 00 00 00 00 77 00 00 00 00' + '00 70 F0 00 00 00 08 77 0F FF FF FF F0 70 F8 88' + '80 00 88 77 00 00 00 00 00 70 F8 88 80 08 88 77' + '0F FF FF FF F0 70 F8 88 80 88 88 77 00 00 00 00' + '00 70 F8 88 88 88 88 77 0F FF FF FF F0 70 F8 88' + '88 88 88 77 00 00 00 00 00 70 F8 88 88 88 88 77' + '77 77 77 77 77 70 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +} + +BLOAD BITMAP +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F7 77 FF FF FF F7 77 88 88 88' + '88 80 F7 77 F1 11 FF F7 77 88 88 88 88 80 F7 77' + 'F1 11 FF F7 77 88 88 88 88 80 F7 77 F1 11 FF F7' + '77 88 88 88 88 80 F7 77 FF FF FF F7 77 88 88 08' + '88 80 F7 77 77 77 77 77 77 88 88 00 88 80 F7 77' + '77 77 77 77 77 88 88 00 08 80 F7 77 77 77 77 77' + '77 00 00 00 00 80 F7 70 00 00 00 00 07 00 00 00' + '00 00 F7 70 FF FF FF FF 07 00 00 00 00 80 F7 70' + '00 00 00 00 07 88 88 00 08 80 F7 70 FF FF FF FF' + '07 88 88 00 88 80 F7 70 00 00 00 00 07 88 88 08' + '88 80 F7 70 FF FF FF FF 07 88 88 88 88 80 F7 70' + '00 00 00 00 07 88 88 88 88 80 F7 77 77 77 77 77' + '77 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +} + +TRANSFORMB BITMAP +{ +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 00 88 00 88 88 08 88 00 00 88 80 F8 08' +'88 80 88 88 80 88 80 88 08 80 F8 80 00 08 80 00' +'88 08 80 88 08 80 F8 80 88 08 88 88 80 88 80 00' +'88 80 F8 88 00 88 88 88 08 88 80 88 08 80 F8 88' +'00 88 88 88 88 88 00 00 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF F8' +} + +TRANSFORMA BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 BF 00 00 BF' + '00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF' + '00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 00 77 00 77 77 07 77 00 77 00 70 F7 07' + '77 70 77 77 70 77 07 77 70 70 F7 70 00 07 70 00' + '77 07 70 00 07 70 F7 70 77 07 77 77 70 77 70 77' + '07 70 F7 77 00 77 77 77 07 77 77 00 77 70 F7 77' + '00 77 77 77 77 77 77 00 77 70 F7 77 77 77 77 77' + '77 77 77 77 70 70 F7 77 77 77 77 77 77 77 77 77' + '70 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +END + +SIGMA BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 BF 00 00 BF' + '00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF' + '00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 70 00 00' + '00 07 77 77 77 70 F7 77 77 77 00 77 70 07 77 77' + '77 70 F7 77 77 77 70 07 77 77 77 77 77 70 F7 77' + '77 77 77 00 77 77 77 77 77 70 F7 77 77 77 77 70' + '07 77 77 77 77 70 F7 77 77 77 77 70 07 77 77 77' + '77 70 F7 77 77 77 77 00 77 77 77 77 77 70 F7 77' + '77 77 70 07 77 77 77 77 77 70 F7 77 77 77 00 77' + '70 07 77 77 77 70 F7 77 77 70 00 00 00 07 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +END + +VIEW BITMAP LOADONCALL MOVEABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 F7 77 77 77' + '77 77 77 77 88 80 F8 88 F0 00 00 00 00 00 00 07' + '88 80 F8 88 F0 00 00 00 00 00 00 07 88 80 F8 88' + 'F0 07 87 00 00 77 70 07 88 80 F8 88 F0 77 77 70' + '07 87 87 07 88 80 F8 88 F0 E7 87 87 77 77 7E 07' + '88 80 F8 88 FE EE 77 77 77 87 EE E7 88 80 F8 88' + 'FE EE E7 87 F7 FE EE E7 88 80 F8 88 FE EE EE FF' + 'FF EE EE E7 88 80 F8 88 FE EE EE EF FE EE EE E7' + '88 80 F8 88 FE EE EE EE EE EE EE E7 88 80 F8 88' + 'F0 EE EE EE EE EE EE 07 88 80 F8 88 F0 EE EE E0' + '0E EE EE 07 88 80 F8 88 F0 0E EE 00 00 EE E0 07' + '88 80 F8 88 F0 00 00 00 00 00 00 07 88 80 F8 88' + 'F0 00 00 00 00 00 00 07 88 80 F8 88 FF FF FF FF' + 'FF FF FF FF 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF FF' +END + +TIME BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 7F FF' + 'FF F7 77 77 77 70 F7 77 77 7F F0 00 00 0F F7 77' + '77 70 F7 77 77 F0 00 00 70 00 0F 77 77 70 F7 77' + '7F 00 70 00 00 07 00 F7 77 70 F7 77 F0 00 00 00' + '00 00 00 0F 77 70 F7 77 F0 70 00 00 00 00 00 0F' + '77 70 F7 7F 00 00 00 00 00 00 07 00 77 70 F7 7F' + '00 00 00 00 00 00 00 00 F7 70 F7 7F 00 00 00 00' + '00 00 00 00 F7 70 F7 7F 07 00 00 00 FF FF F0 70' + 'F7 70 F7 7F 00 00 00 00 F0 00 00 00 F7 70 F7 7F' + '00 00 00 00 F0 00 00 00 F7 70 F7 77 F0 70 00 00' + 'F0 00 07 0F 77 70 F7 77 F0 00 00 00 F0 00 00 07' + '77 70 F7 77 7F 00 70 00 00 00 70 F7 77 70 F7 77' + '77 F0 00 00 70 00 0F 77 77 70 F7 77 77 7F F0 00' + '00 0F F7 77 77 70 F7 77 77 77 7F FF FF F7 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +END + +PLAY BITMAP PRELOAD MOVEABLE DISCARDABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 BA AA AA AA AA AA AA AA AA AA' + 'AA AB A7 77 77 77 77 77 77 77 77 77 77 7A AF 77' + '77 77 77 77 77 77 77 77 77 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 08 88' + '88 88 88 88 87 7A AF 88 88 88 00 88 88 88 88 88' + '87 7A AF 88 88 88 00 08 88 88 88 88 87 7A AF 88' + '88 88 00 00 88 88 88 88 87 7A AF 88 88 88 00 00' + '08 88 88 88 87 7A AF 88 88 88 00 00 00 88 88 88' + '87 7A AF 88 88 88 00 00 00 08 88 88 87 7A AF 88' + '88 88 00 00 00 88 88 88 87 7A AF 88 88 88 00 00' + '08 88 88 88 87 7A AF 88 88 88 00 00 88 88 88 88' + '87 7A AF 88 88 88 00 08 88 88 88 88 87 7A AF 88' + '88 88 00 88 88 88 88 88 87 7A AF 88 88 88 08 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF FF' + 'FF FF FF FF FF FF FF FF FF 7A BA AA AA AA AA AA' + 'AA AA AA AA AA AB' +END + +PAUSE BITMAP PRELOAD MOVEABLE DISCARDABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 BA AA AA AA AA AA AA AA AA AA' + 'AA AB A7 77 77 77 77 77 77 77 77 77 77 7A AF 77' + '77 77 77 77 77 77 77 77 77 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 00 00 88 00 00 88 88' + '87 7A AF 88 88 00 00 88 00 00 88 88 87 7A AF 88' + '88 00 00 88 00 00 88 88 87 7A AF 88 88 00 00 88' + '00 00 88 88 87 7A AF 88 88 00 00 88 00 00 88 88' + '87 7A AF 88 88 00 00 88 00 00 88 88 87 7A AF 88' + '88 00 00 88 00 00 88 88 87 7A AF 88 88 00 00 88' + '00 00 88 88 87 7A AF 88 88 00 00 88 00 00 88 88' + '87 7A AF 88 88 00 00 88 00 00 88 88 87 7A AF 88' + '88 00 00 88 00 00 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF FF' + 'FF FF FF FF FF FF FF FF FF 7A BA AA AA AA AA AA' + 'AA AA AA AA AA AB' +END + +EJECT BITMAP PRELOAD MOVEABLE DISCARDABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 BA AA AA AA AA AA AA AA AA AA' + 'AA AB A7 77 77 77 77 77 77 77 77 77 77 7A AF 77' + '77 77 77 77 77 77 77 77 77 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 80 00 00 00 00 00 00 88' + '87 7A AF 88 80 00 00 00 00 00 00 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 80 00 00 00 00 00 00 88' + '87 7A AF 88 88 00 00 00 00 00 08 88 87 7A AF 88' + '88 80 00 00 00 00 88 88 87 7A AF 88 88 88 00 00' + '00 08 88 88 87 7A AF 88 88 88 80 00 00 88 88 88' + '87 7A AF 88 88 88 88 00 08 88 88 88 87 7A AF 88' + '88 88 88 80 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF FF' + 'FF FF FF FF FF FF FF FF FF 7A BA AA AA AA AA AA' + 'AA AA AA AA AA AB' +END + +XDISSOLVE BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 F0 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 08 88 88 80 88 88 88 80 F8 88 88 88 00 88' + '88 00 88 88 88 80 F8 88 88 88 80 08 80 08 88 88' + '88 80 F8 88 88 88 88 08 80 88 88 88 88 80 F8 88' + '88 88 88 08 80 88 88 88 88 80 F8 88 88 88 00 00' + '00 00 88 88 88 80 F8 88 88 88 00 00 00 00 88 88' + '88 80 F8 88 88 88 88 08 80 88 88 88 88 80 F8 88' + '88 88 88 08 80 88 88 88 88 80 F8 88 88 88 80 08' + '80 08 88 88 88 80 F8 88 88 88 00 88 88 00 88 88' + '88 80 F8 88 88 88 08 88 88 80 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF FF' +END + +STRINGTABLE +BEGIN + STRING_HIDETOOLBAR, "&Hide Toolbar" + STRING_SHOWTOOLBAR, "&Show Toolbar" + STRING_ASTERISKDOTBMP, "*.BMP" + STRING_ASTERISKDOTGIF, "*.GIF" + STRING_ASTERISKDOTPRJ, "*.PRJ" + STRING_BITMAPOKFOCUSUP, "OKFOCUSUP" + STRING_BITMAPOKNOFUP, "OKNOFUP" + STRING_BITMAPOKFOCUSDN, "OKFOCUSDN" + STRING_BITMAPCAFOCUSUP, "CAFOCUSUP" + STRING_BITMAPCANOFUP, "CANOFUP" + STRING_BITMAPCAFOCUSDN, "CAFOCUSDN" + STRING_LITERALCLIP, "CLIP" + STRING_LITERALMESH, "MESH" + STRING_LITERALCUT, "CUT" + STRING_LITERALARROWD, "ARROWD" + STRING_LITERALARROWU, "ARROWU" + STRING_LITERALARROWR, "ARROWR" + STRING_LITERALARROWL, "ARROWL" + STRING_LITERALTEST, "TEST" + STRING_LITERALBSAVE, "BSAVE" + STRING_LITERALBLOAD, "BLOAD" + STRING_LITERALTRANSFORMA,"TRANSFORMA" + STRING_LITERALTRANSFORMB,"TRANSFORMB" + STRING_LITERALVIEW, "VIEW" + STRING_LITERALTIME, "TIME" + STRING_LITERALPLAY, "PLAY" + STRING_LITERALEJECT, "EJECT" + STRING_LITERALPAUSE, "PAUSE" + STRING_LITERALDISSOLVE, "XDISSOLVE" + STRING_LITERALTOOLBAR, "ToolBar" + STRING_LITERALSIGMA, "SIGMA" + STRING_LITERAL944, "P944" + STRING_MESHEXTENSION, ".000" + STRING_PROJECTEXTENSION,".PRJ" + STRING_DOT, "." + STRING_CRLF, "\n" + STRING_TABSTRING, "\t" + STRING_PROJECTIDSTRING, "PRJV1.00" + STRING_UNKNOWNFILETYPE, "Dont know how to handle this file." + STRING_UNKNOWNREFERENCE,"Project references missing or invalid items." + STRING_ERRORLOADINGPRJ, "Error loading project" + STRING_INIFILENAME, "MDIWIN.INI" + STRING_UNSET, "UNSET" + STRING_INISETTINGS, "SETTINGS" + STRING_INIPROJDIR, "ProjDir" + STRING_INIMESHDIR, "MeshDir" +END diff --git a/mdiwin/MDIWIN.CPP b/mdiwin/MDIWIN.CPP new file mode 100644 index 0000000..f9c4505 --- /dev/null +++ b/mdiwin/MDIWIN.CPP @@ -0,0 +1,40 @@ +#include + +MDIWindow::MDIWindow() +: mhWnd(0) +{ +} + +MDIWindow::~MDIWindow() +{ + if(GetHandle())::DestroyWindow(GetHandle()); +} + +long FAR PASCAL _export MDIWindow::MDIWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) +{ + MDIWindow *pWindow=MDIWindow::GetPointer(hWnd); + + if(pWindow) + { + long retCode=pWindow->WndProc(message,wParam,lParam); + if(WM_NCDESTROY==message) + { + MDIWindow::SetPointer(hWnd,0); + pWindow->SetHandle(0); + } + return retCode; + } + if(message==WM_NCCREATE) + { + ::DefMDIChildProc(hWnd,message,wParam,lParam); + LPCREATESTRUCT lpcs=(LPCREATESTRUCT)lParam; + LPMDICREATESTRUCT lpcm=(LPMDICREATESTRUCT)lpcs->lpCreateParams; + pWindow=(MDIWindow *)lpcm->lParam; + if(!pWindow)return FALSE; + MDIWindow::SetPointer(hWnd,pWindow); + pWindow->SetHandle(hWnd); + return pWindow->WndProc(message,wParam,lParam); + } + else return ::DefMDIChildProc(hWnd,message,wParam,lParam); +} + diff --git a/mdiwin/MDIWIN.DEF b/mdiwin/MDIWIN.DEF new file mode 100644 index 0000000..c5485e7 --- /dev/null +++ b/mdiwin/MDIWIN.DEF @@ -0,0 +1,13 @@ +NAME MDIWIN +DESCRIPTION 'MDWIN' +EXETYPE WINDOWS +STUB 'WINSTUB.EXE' +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE +HEAPSIZE 8191 +STACKSIZE 24576 +EXPORTS + + + + \ No newline at end of file diff --git a/mdiwin/MDIWIN.DSP b/mdiwin/MDIWIN.DSP new file mode 100644 index 0000000..eec0dbd --- /dev/null +++ b/mdiwin/MDIWIN.DSP @@ -0,0 +1,583 @@ +# Microsoft Developer Studio Project File - Name="mdiwin" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=mdiwin - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MDIWIN.MAK". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MDIWIN.MAK" CFG="mdiwin - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mdiwin - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mdiwin - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /force:multiple +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "mdiwin - Win32 Release" +# Name "mdiwin - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Average.cpp +# End Source File +# Begin Source File + +SOURCE=.\Bitmap.cpp +# End Source File +# Begin Source File + +SOURCE=.\Bmplnk.cpp +# End Source File +# Begin Source File + +SOURCE=.\Btnlnk.cpp +# End Source File +# Begin Source File + +SOURCE=.\Bwindow.cpp +# End Source File +# Begin Source File + +SOURCE=.\Capture.cpp +# End Source File +# Begin Source File + +SOURCE=.\Catmull.cpp +# End Source File +# Begin Source File + +SOURCE=.\Clipbrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Convex.cpp +# End Source File +# Begin Source File + +SOURCE=.\Crsctrl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Dissolve.cpp +# End Source File +# Begin Source File + +SOURCE=.\Drawbmp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Dslvdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Dwindow.cpp +# End Source File +# Begin Source File + +SOURCE=.\Factor.cpp +# End Source File +# Begin Source File + +SOURCE=.\FILEHELP.CPP +# End Source File +# Begin Source File + +SOURCE=.\Font.cpp +# End Source File +# Begin Source File + +SOURCE=.\Frame.cpp +# End Source File +# Begin Source File + +SOURCE=.\Frmdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Inifile.cpp +# End Source File +# Begin Source File + +SOURCE=.\Istream.cpp +# End Source File +# Begin Source File + +SOURCE=.\Logowin.cpp +# End Source File +# Begin Source File + +SOURCE=.\Lzw.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mdifrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mdiwin.cpp +# End Source File +# Begin Source File + +SOURCE=.\MDIWIN.RC +# End Source File +# Begin Source File + +SOURCE=.\Mesh.cpp +# End Source File +# Begin Source File + +SOURCE=.\Meshfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\Meshwrp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Owner.cpp +# End Source File +# Begin Source File + +SOURCE=.\Paltdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Polypnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Process.cpp +# End Source File +# Begin Source File + +SOURCE=.\PROFILE.CPP +# End Source File +# Begin Source File + +SOURCE=.\Pwarp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Resize.cpp +# End Source File +# Begin Source File + +SOURCE=.\Schedule.cpp +# End Source File +# Begin Source File + +SOURCE=.\Segment.cpp +# End Source File +# Begin Source File + +SOURCE=.\Shear.cpp +# End Source File +# Begin Source File + +SOURCE=.\Slide.cpp +# End Source File +# Begin Source File + +SOURCE=.\Slidesel.cpp +# End Source File +# Begin Source File + +SOURCE=.\Spacial.cpp +# End Source File +# Begin Source File + +SOURCE=.\String.cpp +# End Source File +# Begin Source File + +SOURCE=.\Toolbar.cpp +# End Source File +# Begin Source File + +SOURCE=.\Txlmtrx.cpp +# End Source File +# Begin Source File + +SOURCE=.\View.cpp +# End Source File +# Begin Source File + +SOURCE=.\Viewsel.cpp +# End Source File +# Begin Source File + +SOURCE=.\Window.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Average.hpp +# End Source File +# Begin Source File + +SOURCE=.\Bit32.hpp +# End Source File +# Begin Source File + +SOURCE=.\bitmap.hpp +# End Source File +# Begin Source File + +SOURCE=.\Block.hpp +# End Source File +# Begin Source File + +SOURCE=.\bmplnk.hpp +# End Source File +# Begin Source File + +SOURCE=.\btnlnk.hpp +# End Source File +# Begin Source File + +SOURCE=.\Bwindow.hpp +# End Source File +# Begin Source File + +SOURCE=.\Byte.hpp +# End Source File +# Begin Source File + +SOURCE=.\Cache.hpp +# End Source File +# Begin Source File + +SOURCE=.\Capture.hpp +# End Source File +# Begin Source File + +SOURCE=.\Catmull.hpp +# End Source File +# Begin Source File + +SOURCE=.\Clipbrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Colorcnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Convex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Crsctrl.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dissolve.hpp +# End Source File +# Begin Source File + +SOURCE=.\drawbmp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dslvdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Dwindow.hpp +# End Source File +# Begin Source File + +SOURCE=.\Factor.hpp +# End Source File +# Begin Source File + +SOURCE=.\Filehelp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Fltprs.hpp +# End Source File +# Begin Source File + +SOURCE=.\Font.hpp +# End Source File +# Begin Source File + +SOURCE=.\Frame.hpp +# End Source File +# Begin Source File + +SOURCE=.\Frmdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Gif.hpp +# End Source File +# Begin Source File + +SOURCE=.\Inifile.hpp +# End Source File +# Begin Source File + +SOURCE=.\Int.hpp +# End Source File +# Begin Source File + +SOURCE=.\Istream.hpp +# End Source File +# Begin Source File + +SOURCE=.\logowin.hpp +# End Source File +# Begin Source File + +SOURCE=.\Lzw.hpp +# End Source File +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mdifrm.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mdiwin.h +# End Source File +# Begin Source File + +SOURCE=.\Mdiwin.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mesh.hpp +# End Source File +# Begin Source File + +SOURCE=.\Meshfrm.hpp +# End Source File +# Begin Source File + +SOURCE=.\Meshwrp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Owner.hpp +# End Source File +# Begin Source File + +SOURCE=.\Paltdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Point.hpp +# End Source File +# Begin Source File + +SOURCE=.\Polypnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Process.hpp +# End Source File +# Begin Source File + +SOURCE=.\Profile.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pwarp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Qsort.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resize.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rgb.hpp +# End Source File +# Begin Source File + +SOURCE=.\Schedule.hpp +# End Source File +# Begin Source File + +SOURCE=.\Segment.hpp +# End Source File +# Begin Source File + +SOURCE=.\Shear.hpp +# End Source File +# Begin Source File + +SOURCE=.\Slide.hpp +# End Source File +# Begin Source File + +SOURCE=.\Slidesel.hpp +# End Source File +# Begin Source File + +SOURCE=.\Spacial.hpp +# End Source File +# Begin Source File + +SOURCE=.\string.hpp +# End Source File +# Begin Source File + +SOURCE=.\Toolbar.hpp +# End Source File +# Begin Source File + +SOURCE=.\txlmtrx.hpp +# End Source File +# Begin Source File + +SOURCE=.\types.hpp +# End Source File +# Begin Source File + +SOURCE=.\Vector.hpp +# End Source File +# Begin Source File + +SOURCE=.\View.hpp +# End Source File +# Begin Source File + +SOURCE=.\Viewcntr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Viewsel.hpp +# End Source File +# Begin Source File + +SOURCE=.\Window.hpp +# End Source File +# Begin Source File + +SOURCE=.\Windows.hpp +# End Source File +# Begin Source File + +SOURCE=.\Windowsx.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\Block.tpp +# End Source File +# Begin Source File + +SOURCE=.\Cache.tpp +# End Source File +# Begin Source File + +SOURCE=.\Gif.tpp +# End Source File +# Begin Source File + +SOURCE=.\qsort.tpp +# End Source File +# Begin Source File + +SOURCE=.\Vector.tpp +# End Source File +# Begin Source File + +SOURCE=.\View.ipp +# End Source File +# End Target +# End Project diff --git a/mdiwin/MDIWIN.DSW b/mdiwin/MDIWIN.DSW new file mode 100644 index 0000000..6836576 --- /dev/null +++ b/mdiwin/MDIWIN.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "mdiwin"=.\MDIWIN.DSP - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/mdiwin/MDIWIN.H b/mdiwin/MDIWIN.H new file mode 100644 index 0000000..88a37db --- /dev/null +++ b/mdiwin/MDIWIN.H @@ -0,0 +1,156 @@ +// defines for edit schedule dialog +#define EDITITEM_SOURCE 102 +#define EDITITEM_DESTINATION 103 +#define EDITITEM_REPEAT 104 + +// defines for dissolve schedule dialog +#define DSLV_LIST 101 + +// defines for ViewSelect Dialog +#define VIEWSEL_LIST 101 + +// defines for FrameDialog +#define FRAME_FRAMES 101 + +// defines for Main Menu +#define MENU_LOAD_GIF 0x01 +#define MENU_LOAD_BITMAP 0x02 +#define MENU_FILE_EXIT 0x03 +#define MENU_PALETTE_VIEW 0x04 +#define MENU_CUT 0x05 +#define MENU_COPY 0x06 +#define MENU_PASTE 0x07 +#define MENU_SMOOTHING 0x08 +#define MENU_RESIZE 0x09 +#define MENU_TRANSLATE 0x0A +#define MENU_WARP_PERSPECTIVE 0x0B +#define MENU_CLIP 0x0C +#define MENU_FILE_SAVEBITMAP 0x0D +#define MENU_SHEAR 0x0E +#define MENU_WARP_CONVEX 0x10 +#define MENU_TBMESH 0x20 +#define MENU_TBCLIP 0x21 +#define MENU_TBARROWL 0x23 +#define MENU_TBARROWR 0x24 +#define MENU_TBARROWU 0x25 +#define MENU_TBARROWD 0x26 +#define MENU_TBSAVE 0x27 +#define MENU_TBLOAD 0x28 +#define MENU_TBTRANSFORMA 0x29 +#define MENU_TBTRANSFORMB 0x2A +#define MENU_TBSIGMA 0x2B +#define MENU_TBPLAY 0x2C +#define MENU_TBEJECT 0x2D +#define MENU_TBPAUSE 0x2E +#define MENU_TBTIME 0x2F +#define MENU_SLIDE_SELECT 0x30 +#define MENU_DISSOLVE 0x31 + +// defines for window menu item +#define IDM_CASCADE 30 +#define IDM_TILE 31 +#define IDM_ARRANGE 32 +#define IDM_CLOSEALL 33 +#define IDM_MINIMIZEALL 34 +#define IDM_RESTOREALL 35 +#define IDM_TOOLBAR 36 +#define IDM_GETWINLIST 37 +#define IDM_WINLIST 38 +#define IDM_INVALIDATEMDIWINDOWS 39 + +// defines for file selection dialog +#define IDS_FLIST 0x0B +#define IDS_FNAME 0x0C +#define IDS_FPATH 0x0D +#define IDS_FILEOPEN 0x0E +#define IDS_FILESAVE 0x0F + +// defines for factor dialog window +#define FACTOR_WIDTH 101 +#define FACTOR_HEIGHT 102 +#define FACTOR_WIDTHINCR 103 +#define FACTOR_HEIGHTINCR 104 +#define FACTOR_WIDTHOP 105 +#define FACTOR_HEIGHTOP 106 +#define FACTOR_WOPSTRING 107 +#define FACTOR_HOPSTRING 108 + +// defines for enhancement dialog +#define IP_SMOOTHING 104 +#define IP_EDGE 114 +#define IP_SMDEFAULTS 120 +#define IP_AVERAGING 101 +#define IP_LOWPASS 102 +#define IP_HIGHPASS 103 +#define IP_33R1C1 105 +#define IP_33R1C2 106 +#define IP_33R1C3 107 +#define IP_33R2C1 108 +#define IP_33R2C2 109 +#define IP_33R2C3 110 +#define IP_33R3C1 111 +#define IP_33R3C2 112 +#define IP_33R3C3 113 +#define IP_SOBEL 115 +#define IP_SMOOTHED 116 +#define IP_LAPLACE 117 +#define IP_ISOTROPIC 118 +#define IP_STOCHASTIC 119 + +// defines for palette dialog +#define PALETTE_COLORS 101 + +// defines for slide select dialog +#define SS_LIST 101 +#define SS_SELECT 102 +#define SS_BMP 103 +#define SS_PROJECT 104 + +// defines for string table +#define STRING_HIDETOOLBAR 0x0001 +#define STRING_SHOWTOOLBAR 0x0002 +#define STRING_ASTERISKDOTBMP 0x0003 +#define STRING_ASTERISKDOTGIF 0x0004 +#define STRING_BITMAPOKFOCUSUP 0x0005 +#define STRING_BITMAPOKNOFUP 0x0006 +#define STRING_BITMAPOKFOCUSDN 0x0007 +#define STRING_BITMAPCAFOCUSUP 0x0008 +#define STRING_BITMAPCANOFUP 0x0009 +#define STRING_BITMAPCAFOCUSDN 0x000A +#define STRING_LITERALCLIP 0x000B +#define STRING_LITERALMESH 0x000C +#define STRING_LITERALCUT 0x000D +#define STRING_LITERALARROWD 0x000E +#define STRING_LITERALARROWU 0x000F +#define STRING_LITERALARROWR 0x0010 +#define STRING_LITERALARROWL 0x0011 +#define STRING_LITERALTEST 0x0012 +#define STRING_LITERALBSAVE 0x0013 +#define STRING_LITERALBLOAD 0x0014 +#define STRING_LITERALTRANSFORMA 0x0015 +#define STRING_LITERALTRANSFORMB 0x0016 +#define STRING_LITERALVIEW 0x0017 +#define STRING_LITERALTIME 0x0018 +#define STRING_LITERALPLAY 0x0019 +#define STRING_LITERALSTOP 0x001A +#define STRING_LITERALPAUSE 0x001B +#define STRING_LITERALEJECT 0x001C +#define STRING_LITERALTOOLBAR 0x001D +#define STRING_LITERAL944 0x001E +#define STRING_MESHEXTENSION 0x001F +#define STRING_PROJECTEXTENSION 0x0020 +#define STRING_DOT 0x0021 +#define STRING_CRLF 0x0022 +#define STRING_ASTERISKDOTPRJ 0x0023 +#define STRING_PROJECTIDSTRING 0x0024 +#define STRING_UNKNOWNFILETYPE 0x0025 +#define STRING_UNKNOWNREFERENCE 0x0026 +#define STRING_ERRORLOADINGPRJ 0x0027 +#define STRING_LITERALSIGMA 0x0028 +#define STRING_INIFILENAME 0x0029 +#define STRING_UNSET 0x002A +#define STRING_INISETTINGS 0x002B +#define STRING_INIPROJDIR 0x002C +#define STRING_INIMESHDIR 0x002D +#define STRING_TABSTRING 0x002E +#define STRING_LITERALDISSOLVE 0x002F diff --git a/mdiwin/MDIWIN.HPP b/mdiwin/MDIWIN.HPP new file mode 100644 index 0000000..7d13586 --- /dev/null +++ b/mdiwin/MDIWIN.HPP @@ -0,0 +1,81 @@ +#ifndef _MDIWIN_HPP_ +#define _MDIWIN_HPP_ +#include +#include +#include + +class MDIWindow : public CursorControl +{ +public: + MDIWindow(); + virtual ~MDIWindow(); + HWND GetHandle(void)const; + int Show(int nCmdShow)const; + void Update(void)const; +protected: + virtual long WndProc(UINT message,WPARAM wParam,LPARAM lParam)=0; +// static long FAR PASCAL _export MDIWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); + __declspec(dllexport) static LONG FAR PASCAL MDIWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); +private: +#if defined (__SMALL__) || defined (__MEDIUM__) + static MDIWindow *MDIWindow::GetPointer(HWND hWnd); + static void MDIWindow::SetPointer(HWND hWnd,MDIWindow *pWindow); +#else + static MDIWindow *MDIWindow::GetPointer(HWND hWnd); + static void MDIWindow::SetPointer(HWND hWnd,MDIWindow *pWindow); +#endif + void SetHandle(HWND hWnd); + HWND mhWnd; +}; + +inline +HWND MDIWindow::GetHandle(void)const +{ + if(::IsWindow(mhWnd))return mhWnd; + return 0; +} + +inline void MDIWindow::SetHandle(HWND hWnd) +{ + mhWnd=hWnd; +} + +inline +int MDIWindow::Show(int nCmdShow)const +{ + if(!GetHandle())return FALSE; + return ::ShowWindow(GetHandle(),nCmdShow); +} + +inline +void MDIWindow::Update(void)const +{ + if(!GetHandle())return; + ::UpdateWindow(GetHandle()); +} + +#if defined (__SMALL__) || defined (__MEDIUM__) +inline +MDIWindow *MDIWindow::GetPointer(HWND hWnd) +{ + return (MDIWindow*)GetWindowWord(hWnd,0); + +} +inline +void MDIWindow::SetPointer(HWND hWnd,MDIWindow *pWindow) +{ + SetWindowWord(hWnd,0,(WORD)pWindow); +} +#else +inline +MDIWindow *MDIWindow::GetPointer(HWND hWnd) +{ + return (MDIWindow*)::GetWindowLong(hWnd,0); +} +inline +void MDIWindow::SetPointer(HWND hWnd,MDIWindow *pWindow) +{ + ::SetWindowLong(hWnd,0,(LONG)pWindow); +} +#endif +#endif diff --git a/mdiwin/MDIWIN.MAK b/mdiwin/MDIWIN.MAK new file mode 100644 index 0000000..11ac76a --- /dev/null +++ b/mdiwin/MDIWIN.MAK @@ -0,0 +1,3721 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=mdiwin - Win32 Debug +!MESSAGE No configuration specified. Defaulting to mdiwin - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "mdiwin - Win32 Release" && "$(CFG)" != "mdiwin - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Mdiwin.mak" CFG="mdiwin - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mdiwin - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mdiwin - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "mdiwin - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Mdiwin.exe" + +CLEAN : + -@erase "$(INTDIR)\Average.obj" + -@erase "$(INTDIR)\Bitmap.obj" + -@erase "$(INTDIR)\Bmplnk.obj" + -@erase "$(INTDIR)\Btnlnk.obj" + -@erase "$(INTDIR)\Bwindow.obj" + -@erase "$(INTDIR)\Capture.obj" + -@erase "$(INTDIR)\Catmull.obj" + -@erase "$(INTDIR)\Clipbrd.obj" + -@erase "$(INTDIR)\Convex.obj" + -@erase "$(INTDIR)\Crsctrl.obj" + -@erase "$(INTDIR)\Dissolve.obj" + -@erase "$(INTDIR)\Drawbmp.obj" + -@erase "$(INTDIR)\Dslvdlg.obj" + -@erase "$(INTDIR)\Dwindow.obj" + -@erase "$(INTDIR)\Factor.obj" + -@erase "$(INTDIR)\Filehelp.obj" + -@erase "$(INTDIR)\Font.obj" + -@erase "$(INTDIR)\Frame.obj" + -@erase "$(INTDIR)\Frmdlg.obj" + -@erase "$(INTDIR)\Inifile.obj" + -@erase "$(INTDIR)\Istream.obj" + -@erase "$(INTDIR)\Logowin.obj" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mdifrm.obj" + -@erase "$(INTDIR)\Mdiwin.obj" + -@erase "$(INTDIR)\Mesh.obj" + -@erase "$(INTDIR)\Meshfrm.obj" + -@erase "$(INTDIR)\Meshwrp.obj" + -@erase "$(INTDIR)\Owner.obj" + -@erase "$(INTDIR)\Paltdlg.obj" + -@erase "$(INTDIR)\Polypnt.obj" + -@erase "$(INTDIR)\Process.obj" + -@erase "$(INTDIR)\Profile.obj" + -@erase "$(INTDIR)\Pwarp.obj" + -@erase "$(INTDIR)\Resize.obj" + -@erase "$(INTDIR)\Schedule.obj" + -@erase "$(INTDIR)\Segment.obj" + -@erase "$(INTDIR)\Shear.obj" + -@erase "$(INTDIR)\Slide.obj" + -@erase "$(INTDIR)\Slidesel.obj" + -@erase "$(INTDIR)\Spacial.obj" + -@erase "$(INTDIR)\Stdtmpla.obj" + -@erase "$(INTDIR)\Stdtmplb.obj" + -@erase "$(INTDIR)\Stdtmplc.obj" + -@erase "$(INTDIR)\Stdtmpld.obj" + -@erase "$(INTDIR)\Stdtmple.obj" + -@erase "$(INTDIR)\Stdtmplf.obj" + -@erase "$(INTDIR)\Stdtmplg.obj" + -@erase "$(INTDIR)\Stdtmplh.obj" + -@erase "$(INTDIR)\Stdtmpli.obj" + -@erase "$(INTDIR)\Stdtmplj.obj" + -@erase "$(INTDIR)\Stdtmplk.obj" + -@erase "$(INTDIR)\Stdtmpll.obj" + -@erase "$(INTDIR)\Stdtmplm.obj" + -@erase "$(INTDIR)\Stream.obj" + -@erase "$(INTDIR)\String.obj" + -@erase "$(INTDIR)\Toolbar.obj" + -@erase "$(INTDIR)\Txlmtrx.obj" + -@erase "$(INTDIR)\View.obj" + -@erase "$(INTDIR)\Viewsel.obj" + -@erase "$(INTDIR)\Window.obj" + -@erase "$(OUTDIR)\Mdiwin.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Mdiwin.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mdiwin.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Mdiwin.pdb" /machine:I386 /out:"$(OUTDIR)/Mdiwin.exe" +LINK32_OBJS= \ + "$(INTDIR)\Average.obj" \ + "$(INTDIR)\Bitmap.obj" \ + "$(INTDIR)\Bmplnk.obj" \ + "$(INTDIR)\Btnlnk.obj" \ + "$(INTDIR)\Bwindow.obj" \ + "$(INTDIR)\Capture.obj" \ + "$(INTDIR)\Catmull.obj" \ + "$(INTDIR)\Clipbrd.obj" \ + "$(INTDIR)\Convex.obj" \ + "$(INTDIR)\Crsctrl.obj" \ + "$(INTDIR)\Dissolve.obj" \ + "$(INTDIR)\Drawbmp.obj" \ + "$(INTDIR)\Dslvdlg.obj" \ + "$(INTDIR)\Dwindow.obj" \ + "$(INTDIR)\Factor.obj" \ + "$(INTDIR)\Filehelp.obj" \ + "$(INTDIR)\Font.obj" \ + "$(INTDIR)\Frame.obj" \ + "$(INTDIR)\Frmdlg.obj" \ + "$(INTDIR)\Inifile.obj" \ + "$(INTDIR)\Istream.obj" \ + "$(INTDIR)\Logowin.obj" \ + "$(INTDIR)\Lzw.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mdifrm.obj" \ + "$(INTDIR)\Mdiwin.obj" \ + "$(INTDIR)\Mesh.obj" \ + "$(INTDIR)\Meshfrm.obj" \ + "$(INTDIR)\Meshwrp.obj" \ + "$(INTDIR)\Owner.obj" \ + "$(INTDIR)\Paltdlg.obj" \ + "$(INTDIR)\Polypnt.obj" \ + "$(INTDIR)\Process.obj" \ + "$(INTDIR)\Profile.obj" \ + "$(INTDIR)\Pwarp.obj" \ + "$(INTDIR)\Resize.obj" \ + "$(INTDIR)\Schedule.obj" \ + "$(INTDIR)\Segment.obj" \ + "$(INTDIR)\Shear.obj" \ + "$(INTDIR)\Slide.obj" \ + "$(INTDIR)\Slidesel.obj" \ + "$(INTDIR)\Spacial.obj" \ + "$(INTDIR)\Stdtmpla.obj" \ + "$(INTDIR)\Stdtmplb.obj" \ + "$(INTDIR)\Stdtmplc.obj" \ + "$(INTDIR)\Stdtmpld.obj" \ + "$(INTDIR)\Stdtmple.obj" \ + "$(INTDIR)\Stdtmplf.obj" \ + "$(INTDIR)\Stdtmplg.obj" \ + "$(INTDIR)\Stdtmplh.obj" \ + "$(INTDIR)\Stdtmpli.obj" \ + "$(INTDIR)\Stdtmplj.obj" \ + "$(INTDIR)\Stdtmplk.obj" \ + "$(INTDIR)\Stdtmpll.obj" \ + "$(INTDIR)\Stdtmplm.obj" \ + "$(INTDIR)\Stream.obj" \ + "$(INTDIR)\String.obj" \ + "$(INTDIR)\Toolbar.obj" \ + "$(INTDIR)\Txlmtrx.obj" \ + "$(INTDIR)\View.obj" \ + "$(INTDIR)\Viewsel.obj" \ + "$(INTDIR)\Window.obj" + +"$(OUTDIR)\Mdiwin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Mdiwin.exe" + +CLEAN : + -@erase "$(INTDIR)\Average.obj" + -@erase "$(INTDIR)\Bitmap.obj" + -@erase "$(INTDIR)\Bmplnk.obj" + -@erase "$(INTDIR)\Btnlnk.obj" + -@erase "$(INTDIR)\Bwindow.obj" + -@erase "$(INTDIR)\Capture.obj" + -@erase "$(INTDIR)\Catmull.obj" + -@erase "$(INTDIR)\Clipbrd.obj" + -@erase "$(INTDIR)\Convex.obj" + -@erase "$(INTDIR)\Crsctrl.obj" + -@erase "$(INTDIR)\Dissolve.obj" + -@erase "$(INTDIR)\Drawbmp.obj" + -@erase "$(INTDIR)\Dslvdlg.obj" + -@erase "$(INTDIR)\Dwindow.obj" + -@erase "$(INTDIR)\Factor.obj" + -@erase "$(INTDIR)\Filehelp.obj" + -@erase "$(INTDIR)\Font.obj" + -@erase "$(INTDIR)\Frame.obj" + -@erase "$(INTDIR)\Frmdlg.obj" + -@erase "$(INTDIR)\Inifile.obj" + -@erase "$(INTDIR)\Istream.obj" + -@erase "$(INTDIR)\Logowin.obj" + -@erase "$(INTDIR)\Lzw.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mdifrm.obj" + -@erase "$(INTDIR)\Mdiwin.obj" + -@erase "$(INTDIR)\Mesh.obj" + -@erase "$(INTDIR)\Meshfrm.obj" + -@erase "$(INTDIR)\Meshwrp.obj" + -@erase "$(INTDIR)\Owner.obj" + -@erase "$(INTDIR)\Paltdlg.obj" + -@erase "$(INTDIR)\Polypnt.obj" + -@erase "$(INTDIR)\Process.obj" + -@erase "$(INTDIR)\Profile.obj" + -@erase "$(INTDIR)\Pwarp.obj" + -@erase "$(INTDIR)\Resize.obj" + -@erase "$(INTDIR)\Schedule.obj" + -@erase "$(INTDIR)\Segment.obj" + -@erase "$(INTDIR)\Shear.obj" + -@erase "$(INTDIR)\Slide.obj" + -@erase "$(INTDIR)\Slidesel.obj" + -@erase "$(INTDIR)\Spacial.obj" + -@erase "$(INTDIR)\Stdtmpla.obj" + -@erase "$(INTDIR)\Stdtmplb.obj" + -@erase "$(INTDIR)\Stdtmplc.obj" + -@erase "$(INTDIR)\Stdtmpld.obj" + -@erase "$(INTDIR)\Stdtmple.obj" + -@erase "$(INTDIR)\Stdtmplf.obj" + -@erase "$(INTDIR)\Stdtmplg.obj" + -@erase "$(INTDIR)\Stdtmplh.obj" + -@erase "$(INTDIR)\Stdtmpli.obj" + -@erase "$(INTDIR)\Stdtmplj.obj" + -@erase "$(INTDIR)\Stdtmplk.obj" + -@erase "$(INTDIR)\Stdtmpll.obj" + -@erase "$(INTDIR)\Stdtmplm.obj" + -@erase "$(INTDIR)\Stream.obj" + -@erase "$(INTDIR)\String.obj" + -@erase "$(INTDIR)\Toolbar.obj" + -@erase "$(INTDIR)\Txlmtrx.obj" + -@erase "$(INTDIR)\View.obj" + -@erase "$(INTDIR)\Viewsel.obj" + -@erase "$(INTDIR)\Window.obj" + -@erase "$(OUTDIR)\Mdiwin.exe" + -@erase "$(OUTDIR)\Mdiwin.ilk" + -@erase "$(OUTDIR)\Mdiwin.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mdiwin.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/Mdiwin.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Mdiwin.exe" +LINK32_OBJS= \ + "$(INTDIR)\Average.obj" \ + "$(INTDIR)\Bitmap.obj" \ + "$(INTDIR)\Bmplnk.obj" \ + "$(INTDIR)\Btnlnk.obj" \ + "$(INTDIR)\Bwindow.obj" \ + "$(INTDIR)\Capture.obj" \ + "$(INTDIR)\Catmull.obj" \ + "$(INTDIR)\Clipbrd.obj" \ + "$(INTDIR)\Convex.obj" \ + "$(INTDIR)\Crsctrl.obj" \ + "$(INTDIR)\Dissolve.obj" \ + "$(INTDIR)\Drawbmp.obj" \ + "$(INTDIR)\Dslvdlg.obj" \ + "$(INTDIR)\Dwindow.obj" \ + "$(INTDIR)\Factor.obj" \ + "$(INTDIR)\Filehelp.obj" \ + "$(INTDIR)\Font.obj" \ + "$(INTDIR)\Frame.obj" \ + "$(INTDIR)\Frmdlg.obj" \ + "$(INTDIR)\Inifile.obj" \ + "$(INTDIR)\Istream.obj" \ + "$(INTDIR)\Logowin.obj" \ + "$(INTDIR)\Lzw.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mdifrm.obj" \ + "$(INTDIR)\Mdiwin.obj" \ + "$(INTDIR)\Mesh.obj" \ + "$(INTDIR)\Meshfrm.obj" \ + "$(INTDIR)\Meshwrp.obj" \ + "$(INTDIR)\Owner.obj" \ + "$(INTDIR)\Paltdlg.obj" \ + "$(INTDIR)\Polypnt.obj" \ + "$(INTDIR)\Process.obj" \ + "$(INTDIR)\Profile.obj" \ + "$(INTDIR)\Pwarp.obj" \ + "$(INTDIR)\Resize.obj" \ + "$(INTDIR)\Schedule.obj" \ + "$(INTDIR)\Segment.obj" \ + "$(INTDIR)\Shear.obj" \ + "$(INTDIR)\Slide.obj" \ + "$(INTDIR)\Slidesel.obj" \ + "$(INTDIR)\Spacial.obj" \ + "$(INTDIR)\Stdtmpla.obj" \ + "$(INTDIR)\Stdtmplb.obj" \ + "$(INTDIR)\Stdtmplc.obj" \ + "$(INTDIR)\Stdtmpld.obj" \ + "$(INTDIR)\Stdtmple.obj" \ + "$(INTDIR)\Stdtmplf.obj" \ + "$(INTDIR)\Stdtmplg.obj" \ + "$(INTDIR)\Stdtmplh.obj" \ + "$(INTDIR)\Stdtmpli.obj" \ + "$(INTDIR)\Stdtmplj.obj" \ + "$(INTDIR)\Stdtmplk.obj" \ + "$(INTDIR)\Stdtmpll.obj" \ + "$(INTDIR)\Stdtmplm.obj" \ + "$(INTDIR)\Stream.obj" \ + "$(INTDIR)\String.obj" \ + "$(INTDIR)\Toolbar.obj" \ + "$(INTDIR)\Txlmtrx.obj" \ + "$(INTDIR)\View.obj" \ + "$(INTDIR)\Viewsel.obj" \ + "$(INTDIR)\Window.obj" + +"$(OUTDIR)\Mdiwin.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "mdiwin - Win32 Release" +# Name "mdiwin - Win32 Debug" + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Window.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_WINDO=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Window.obj" : $(SOURCE) $(DEP_CPP_WINDO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + + +"$(INTDIR)\Window.obj" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bitmap.cpp +DEP_CPP_BITMA=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Bitmap.obj" : $(SOURCE) $(DEP_CPP_BITMA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bmplnk.cpp +DEP_CPP_BMPLN=\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Bmplnk.obj" : $(SOURCE) $(DEP_CPP_BMPLN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Btnlnk.cpp +DEP_CPP_BTNLN=\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Btnlnk.obj" : $(SOURCE) $(DEP_CPP_BTNLN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bwindow.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_BWIND=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Font.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Bwindow.obj" : $(SOURCE) $(DEP_CPP_BWIND) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_BWIND=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Font.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Bwindow.obj" : $(SOURCE) $(DEP_CPP_BWIND) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Capture.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CAPTU=\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Capture.obj" : $(SOURCE) $(DEP_CPP_CAPTU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CAPTU=\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Capture.obj" : $(SOURCE) $(DEP_CPP_CAPTU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Catmull.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CATMU=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Catmull.obj" : $(SOURCE) $(DEP_CPP_CATMU) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CATMU=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Dos.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Catmull.obj" : $(SOURCE) $(DEP_CPP_CATMU) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Clipbrd.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CLIPB=\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Clipbrd.obj" : $(SOURCE) $(DEP_CPP_CLIPB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CLIPB=\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Clipbrd.obj" : $(SOURCE) $(DEP_CPP_CLIPB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Convex.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CONVE=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Convex.obj" : $(SOURCE) $(DEP_CPP_CONVE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CONVE=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Math.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Convex.obj" : $(SOURCE) $(DEP_CPP_CONVE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Crsctrl.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_CRSCT=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Crsctrl.obj" : $(SOURCE) $(DEP_CPP_CRSCT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_CRSCT=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Crsctrl.obj" : $(SOURCE) $(DEP_CPP_CRSCT) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dissolve.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_DISSO=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\Qsort.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Dissolve.obj" : $(SOURCE) $(DEP_CPP_DISSO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_DISSO=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\Qsort.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Dos.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Dissolve.obj" : $(SOURCE) $(DEP_CPP_DISSO) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Drawbmp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_DRAWB=\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Drawbmp.obj" : $(SOURCE) $(DEP_CPP_DRAWB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_DRAWB=\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Drawbmp.obj" : $(SOURCE) $(DEP_CPP_DRAWB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dslvdlg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_DSLVD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Dslvdlg.obj" : $(SOURCE) $(DEP_CPP_DSLVD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_DSLVD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Dslvdlg.obj" : $(SOURCE) $(DEP_CPP_DSLVD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Dwindow.cpp +DEP_CPP_DWIND=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Dos.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Dwindow.obj" : $(SOURCE) $(DEP_CPP_DWIND) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Factor.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_FACTO=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Factor.obj" : $(SOURCE) $(DEP_CPP_FACTO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_FACTO=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Factor.obj" : $(SOURCE) $(DEP_CPP_FACTO) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Filehelp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_FILEH=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Filehelp.obj" : $(SOURCE) $(DEP_CPP_FILEH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_FILEH=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Filehelp.obj" : $(SOURCE) $(DEP_CPP_FILEH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Font.cpp +DEP_CPP_FONT_=\ + {$(INCLUDE)}"\.\Font.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Font.obj" : $(SOURCE) $(DEP_CPP_FONT_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Frame.cpp +DEP_CPP_FRAME=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Frame.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdifrm.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Slidesel.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Frame.obj" : $(SOURCE) $(DEP_CPP_FRAME) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Frmdlg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_FRMDL=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Frmdlg.obj" : $(SOURCE) $(DEP_CPP_FRMDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_FRMDL=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Frmdlg.obj" : $(SOURCE) $(DEP_CPP_FRMDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Inifile.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_INIFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Inifile.obj" : $(SOURCE) $(DEP_CPP_INIFI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_INIFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Inifile.obj" : $(SOURCE) $(DEP_CPP_INIFI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Istream.cpp +DEP_CPP_ISTRE=\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Istream.obj" : $(SOURCE) $(DEP_CPP_ISTRE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Logowin.cpp +DEP_CPP_LOGOW=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\logowin.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Logowin.obj" : $(SOURCE) $(DEP_CPP_LOGOW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Lzw.cpp +DEP_CPP_LZW_C=\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Lzw.obj" : $(SOURCE) $(DEP_CPP_LZW_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Frame.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\logowin.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdifrm.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mdifrm.cpp +DEP_CPP_MDIFR=\ + {$(INCLUDE)}"\.\Mdifrm.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Mdifrm.obj" : $(SOURCE) $(DEP_CPP_MDIFR) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mdiwin.cpp +DEP_CPP_MDIWI=\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Mdiwin.obj" : $(SOURCE) $(DEP_CPP_MDIWI) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mesh.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_MESH_=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Mesh.obj" : $(SOURCE) $(DEP_CPP_MESH_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_MESH_=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Mesh.obj" : $(SOURCE) $(DEP_CPP_MESH_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Meshfrm.cpp +DEP_CPP_MESHF=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Meshfrm.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Meshfrm.obj" : $(SOURCE) $(DEP_CPP_MESHF) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Meshwrp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_MESHW=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Meshwrp.obj" : $(SOURCE) $(DEP_CPP_MESHW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_MESHW=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Meshwrp.obj" : $(SOURCE) $(DEP_CPP_MESHW) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Owner.cpp +DEP_CPP_OWNER=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Owner.obj" : $(SOURCE) $(DEP_CPP_OWNER) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Paltdlg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PALTD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Paltdlg.obj" : $(SOURCE) $(DEP_CPP_PALTD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PALTD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Paltdlg.obj" : $(SOURCE) $(DEP_CPP_PALTD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Polypnt.cpp +DEP_CPP_POLYP=\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Polypnt.obj" : $(SOURCE) $(DEP_CPP_POLYP) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Process.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PROCE=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Process.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PROCE=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Process.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Profile.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PROFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Profile.obj" : $(SOURCE) $(DEP_CPP_PROFI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PROFI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Profile.obj" : $(SOURCE) $(DEP_CPP_PROFI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Pwarp.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_PWARP=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Pwarp.obj" : $(SOURCE) $(DEP_CPP_PWARP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_PWARP=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Pwarp.obj" : $(SOURCE) $(DEP_CPP_PWARP) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Resize.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_RESIZ=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Resize.obj" : $(SOURCE) $(DEP_CPP_RESIZ) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_RESIZ=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Resize.obj" : $(SOURCE) $(DEP_CPP_RESIZ) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Schedule.cpp +DEP_CPP_SCHED=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Schedule.obj" : $(SOURCE) $(DEP_CPP_SCHED) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Segment.cpp +DEP_CPP_SEGME=\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Segment.obj" : $(SOURCE) $(DEP_CPP_SEGME) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Shear.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SHEAR=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Shear.obj" : $(SOURCE) $(DEP_CPP_SHEAR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SHEAR=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Shear.obj" : $(SOURCE) $(DEP_CPP_SHEAR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Slide.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SLIDE=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slide.obj" : $(SOURCE) $(DEP_CPP_SLIDE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SLIDE=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slide.obj" : $(SOURCE) $(DEP_CPP_SLIDE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Slidesel.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SLIDES=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slidesel.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slidesel.obj" : $(SOURCE) $(DEP_CPP_SLIDES) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SLIDES=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slidesel.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Slidesel.obj" : $(SOURCE) $(DEP_CPP_SLIDES) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Spacial.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_SPACI=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Spacial.obj" : $(SOURCE) $(DEP_CPP_SPACI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpla.cpp +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmpla.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplb.cpp +DEP_CPP_STDTMP=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplb.obj" : $(SOURCE) $(DEP_CPP_STDTMP) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplc.cpp +DEP_CPP_STDTMPL=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplc.obj" : $(SOURCE) $(DEP_CPP_STDTMPL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpld.cpp +DEP_CPP_STDTMPLD=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmpld.obj" : $(SOURCE) $(DEP_CPP_STDTMPLD) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmple.cpp +DEP_CPP_STDTMPLE=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmple.obj" : $(SOURCE) $(DEP_CPP_STDTMPLE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplf.cpp +DEP_CPP_STDTMPLF=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplf.obj" : $(SOURCE) $(DEP_CPP_STDTMPLF) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplg.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLG=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplg.obj" : $(SOURCE) $(DEP_CPP_STDTMPLG) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLG=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplg.obj" : $(SOURCE) $(DEP_CPP_STDTMPLG) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplh.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLH=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplh.obj" : $(SOURCE) $(DEP_CPP_STDTMPLH) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLH=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplh.obj" : $(SOURCE) $(DEP_CPP_STDTMPLH) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpli.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLI=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpli.obj" : $(SOURCE) $(DEP_CPP_STDTMPLI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLI=\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + + +"$(INTDIR)\Stdtmpli.obj" : $(SOURCE) $(DEP_CPP_STDTMPLI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplj.cpp +DEP_CPP_STDTMPLJ=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Block.tpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplj.obj" : $(SOURCE) $(DEP_CPP_STDTMPLJ) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplk.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STDTMPLK=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Gif.tpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Vector.tpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplk.obj" : $(SOURCE) $(DEP_CPP_STDTMPLK) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STDTMPLK=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Gif.tpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Slide.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Vector.tpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stdtmplk.obj" : $(SOURCE) $(DEP_CPP_STDTMPLK) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpll.cpp +DEP_CPP_STDTMPLL=\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Qsort.hpp"\ + {$(INCLUDE)}"\.\qsort.tpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmpll.obj" : $(SOURCE) $(DEP_CPP_STDTMPLL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmplm.cpp +DEP_CPP_STDTMPLM=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Cache.tpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Stdtmplm.obj" : $(SOURCE) $(DEP_CPP_STDTMPLM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stream.cpp +DEP_CPP_STREA=\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Stream.obj" : $(SOURCE) $(DEP_CPP_STREA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\String.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_STRIN=\ + {$(INCLUDE)}"\.\string.hpp"\ + + +"$(INTDIR)\String.obj" : $(SOURCE) $(DEP_CPP_STRIN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_STRIN=\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\String.obj" : $(SOURCE) $(DEP_CPP_STRIN) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Toolbar.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Txlmtrx.cpp +DEP_CPP_TXLMT=\ + {$(INCLUDE)}"\.\txlmtrx.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Txlmtrx.obj" : $(SOURCE) $(DEP_CPP_TXLMT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\View.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_VIEW_=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Meshfrm.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\txlmtrx.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\View.obj" : $(SOURCE) $(DEP_CPP_VIEW_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_VIEW_=\ + {$(INCLUDE)}"\.\\Windows.hpp"\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Bit32.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Catmull.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Colorcnt.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\Dissolve.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Factor.hpp"\ + {$(INCLUDE)}"\.\Filehelp.hpp"\ + {$(INCLUDE)}"\.\Fltprs.hpp"\ + {$(INCLUDE)}"\.\Frmdlg.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Inifile.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Meshfrm.hpp"\ + {$(INCLUDE)}"\.\Meshwrp.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Paltdlg.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Resize.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Shear.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\txlmtrx.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\View.obj" : $(SOURCE) $(DEP_CPP_VIEW_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Viewsel.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Viewsel.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_VIEWS=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\bitmap.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Byte.hpp"\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Capture.hpp"\ + {$(INCLUDE)}"\.\Clipbrd.hpp"\ + {$(INCLUDE)}"\.\Convex.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Dslvdlg.hpp"\ + {$(INCLUDE)}"\.\Dwindow.hpp"\ + {$(INCLUDE)}"\.\Gif.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Istream.hpp"\ + {$(INCLUDE)}"\.\Lzw.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mdiwin.h"\ + {$(INCLUDE)}"\.\Mdiwin.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\Point.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Process.hpp"\ + {$(INCLUDE)}"\.\Profile.hpp"\ + {$(INCLUDE)}"\.\Pwarp.hpp"\ + {$(INCLUDE)}"\.\Rgb.hpp"\ + {$(INCLUDE)}"\.\Schedule.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\.\Spacial.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\Toolbar.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Vector.hpp"\ + {$(INCLUDE)}"\.\View.hpp"\ + {$(INCLUDE)}"\.\View.ipp"\ + {$(INCLUDE)}"\.\Viewcntr.hpp"\ + {$(INCLUDE)}"\.\Viewsel.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + {$(INCLUDE)}"\.\Windowsx.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Viewsel.obj" : $(SOURCE) $(DEP_CPP_VIEWS) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Average.cpp + +!IF "$(CFG)" == "mdiwin - Win32 Release" + +DEP_CPP_AVERA=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Average.obj" : $(SOURCE) $(DEP_CPP_AVERA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mdiwin - Win32 Debug" + +DEP_CPP_AVERA=\ + {$(INCLUDE)}"\.\Average.hpp"\ + {$(INCLUDE)}"\.\Block.hpp"\ + {$(INCLUDE)}"\.\bmplnk.hpp"\ + {$(INCLUDE)}"\.\btnlnk.hpp"\ + {$(INCLUDE)}"\.\Bwindow.hpp"\ + {$(INCLUDE)}"\.\Crsctrl.hpp"\ + {$(INCLUDE)}"\.\drawbmp.hpp"\ + {$(INCLUDE)}"\.\Int.hpp"\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Owner.hpp"\ + {$(INCLUDE)}"\.\string.hpp"\ + {$(INCLUDE)}"\.\types.hpp"\ + {$(INCLUDE)}"\.\Window.hpp"\ + {$(INCLUDE)}"\.\Windows.hpp"\ + + +"$(INTDIR)\Average.obj" : $(SOURCE) $(DEP_CPP_AVERA) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/mdiwin/MDIWIN.MDP b/mdiwin/MDIWIN.MDP new file mode 100644 index 0000000..42ac508 Binary files /dev/null and b/mdiwin/MDIWIN.MDP differ diff --git a/mdiwin/MDIWIN.OPT b/mdiwin/MDIWIN.OPT new file mode 100644 index 0000000..6d7e7a2 Binary files /dev/null and b/mdiwin/MDIWIN.OPT differ diff --git a/mdiwin/MDIWIN.PLG b/mdiwin/MDIWIN.PLG new file mode 100644 index 0000000..d8a312c --- /dev/null +++ b/mdiwin/MDIWIN.PLG @@ -0,0 +1,213 @@ + + +
+

Build Log

+

+--------------------Configuration: mdiwin - Win32 Debug-------------------- +

+

Command Lines

+Creating command line "rc.exe /l 0x409 /fo".\msvcobj/MDIWIN.res" /d "_DEBUG" "F:\work\mdiwin\MDIWIN.RC"" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP21D.tmp" with contents +[ +/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\mdiwin\Average.cpp" +"F:\work\mdiwin\Bitmap.cpp" +"F:\work\mdiwin\Bmplnk.cpp" +"F:\work\mdiwin\Btnlnk.cpp" +"F:\work\mdiwin\Bwindow.cpp" +"F:\work\mdiwin\Capture.cpp" +"F:\work\mdiwin\Catmull.cpp" +"F:\work\mdiwin\Clipbrd.cpp" +"F:\work\mdiwin\Convex.cpp" +"F:\work\mdiwin\Crsctrl.cpp" +"F:\work\mdiwin\Dissolve.cpp" +"F:\work\mdiwin\Drawbmp.cpp" +"F:\work\mdiwin\Dslvdlg.cpp" +"F:\work\mdiwin\Dwindow.cpp" +"F:\work\mdiwin\Factor.cpp" +"F:\work\mdiwin\FILEHELP.CPP" +"F:\work\mdiwin\Font.cpp" +"F:\work\mdiwin\Frame.cpp" +"F:\work\mdiwin\Frmdlg.cpp" +"F:\work\mdiwin\Inifile.cpp" +"F:\work\mdiwin\Istream.cpp" +"F:\work\mdiwin\Logowin.cpp" +"F:\work\mdiwin\Lzw.cpp" +"F:\work\mdiwin\Main.cpp" +"F:\work\mdiwin\Mdifrm.cpp" +"F:\work\mdiwin\Mdiwin.cpp" +"F:\work\mdiwin\Mesh.cpp" +"F:\work\mdiwin\Meshfrm.cpp" +"F:\work\mdiwin\Meshwrp.cpp" +"F:\work\mdiwin\Owner.cpp" +"F:\work\mdiwin\Paltdlg.cpp" +"F:\work\mdiwin\Polypnt.cpp" +"F:\work\mdiwin\Process.cpp" +"F:\work\mdiwin\PROFILE.CPP" +"F:\work\mdiwin\Pwarp.cpp" +"F:\work\mdiwin\Resize.cpp" +"F:\work\mdiwin\Schedule.cpp" +"F:\work\mdiwin\Segment.cpp" +"F:\work\mdiwin\Shear.cpp" +"F:\work\mdiwin\Slide.cpp" +"F:\work\mdiwin\Slidesel.cpp" +"F:\work\mdiwin\Spacial.cpp" +"F:\work\mdiwin\String.cpp" +"F:\work\mdiwin\Toolbar.cpp" +"F:\work\mdiwin\Txlmtrx.cpp" +"F:\work\mdiwin\View.cpp" +"F:\work\mdiwin\Viewsel.cpp" +"F:\work\mdiwin\Window.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP21D.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP21E.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/MDIWIN.pdb" /debug /machine:I386 /out:".\msvcobj/MDIWIN.exe" /force:multiple +.\msvcobj\Average.obj +.\msvcobj\Bitmap.obj +.\msvcobj\Bmplnk.obj +.\msvcobj\Btnlnk.obj +.\msvcobj\Bwindow.obj +.\msvcobj\Capture.obj +.\msvcobj\Catmull.obj +.\msvcobj\Clipbrd.obj +.\msvcobj\Convex.obj +.\msvcobj\Crsctrl.obj +.\msvcobj\Dissolve.obj +.\msvcobj\Drawbmp.obj +.\msvcobj\Dslvdlg.obj +.\msvcobj\Dwindow.obj +.\msvcobj\Factor.obj +.\msvcobj\FILEHELP.OBJ +.\msvcobj\Font.obj +.\msvcobj\Frame.obj +.\msvcobj\Frmdlg.obj +.\msvcobj\Inifile.obj +.\msvcobj\Istream.obj +.\msvcobj\Logowin.obj +.\msvcobj\Lzw.obj +.\msvcobj\Main.obj +.\msvcobj\Mdifrm.obj +.\msvcobj\Mdiwin.obj +.\msvcobj\Mesh.obj +.\msvcobj\Meshfrm.obj +.\msvcobj\Meshwrp.obj +.\msvcobj\Owner.obj +.\msvcobj\Paltdlg.obj +.\msvcobj\Polypnt.obj +.\msvcobj\Process.obj +.\msvcobj\PROFILE.OBJ +.\msvcobj\Pwarp.obj +.\msvcobj\Resize.obj +.\msvcobj\Schedule.obj +.\msvcobj\Segment.obj +.\msvcobj\Shear.obj +.\msvcobj\Slide.obj +.\msvcobj\Slidesel.obj +.\msvcobj\Spacial.obj +.\msvcobj\String.obj +.\msvcobj\Toolbar.obj +.\msvcobj\Txlmtrx.obj +.\msvcobj\View.obj +.\msvcobj\Viewsel.obj +.\msvcobj\Window.obj +.\msvcobj\MDIWIN.res +] +Creating command line "link.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP21E.tmp" +

Output Window

+Compiling resources... +Compiling... +Average.cpp +Bitmap.cpp +Bmplnk.cpp +Btnlnk.cpp +Bwindow.cpp +Capture.cpp +Catmull.cpp +Clipbrd.cpp +Convex.cpp +Crsctrl.cpp +Dissolve.cpp +Drawbmp.cpp +F:\work\mdiwin\Drawbmp.cpp(31) : warning C4552: '-' : operator has no effect; expected operator with side-effect +Dslvdlg.cpp +Dwindow.cpp +Factor.cpp +FILEHELP.CPP +Font.cpp +Frame.cpp +Frmdlg.cpp +Inifile.cpp +Istream.cpp +Logowin.cpp +Lzw.cpp +F:\work\mdiwin\Lzw.cpp(309) : warning C4138: '*/' found outside of comment +F:\work\mdiwin\Lzw.cpp(313) : warning C4138: '*/' found outside of comment +Main.cpp +Mdifrm.cpp +Mdiwin.cpp +F:\work\mdiwin\Mdiwin.cpp(13) : warning C4236: nonstandard extension used : '_export' is an obsolete keyword, see documentation for __declspec(dllexport) +Mesh.cpp +Meshfrm.cpp +Meshwrp.cpp +Owner.cpp +Paltdlg.cpp +Polypnt.cpp +Process.cpp +PROFILE.CPP +Pwarp.cpp +Resize.cpp +Schedule.cpp +Segment.cpp +Shear.cpp +Slide.cpp +Slidesel.cpp +Spacial.cpp +String.cpp +Toolbar.cpp +Txlmtrx.cpp +View.cpp +Viewsel.cpp +Window.cpp +Linking... +LINK : warning LNK4075: ignoring /INCREMENTAL due to /FORCE specification +Dissolve.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Factor.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Frame.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Inifile.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Main.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Mesh.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Meshfrm.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Meshwrp.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Process.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +PROFILE.OBJ : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Slide.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Slidesel.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Spacial.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +View.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Viewsel.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Dissolve.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Factor.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Frame.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Inifile.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Main.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Mesh.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Meshfrm.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Meshwrp.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Process.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +PROFILE.OBJ : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Slide.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Slidesel.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Spacial.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +View.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored +Viewsel.obj : warning LNK4006: "void * __cdecl operator new(unsigned int,int,void *)" (??2@YAPAXIHPAX@Z) already defined in Catmull.obj; second definition ignored + Creating library .\msvcobj/MDIWIN.lib and object .\msvcobj/MDIWIN.exp +.\msvcobj/MDIWIN.exe : warning LNK4088: image being generated due to /FORCE option; image may not run + + + +

Results

+MDIWIN.exe - 0 error(s), 36 warning(s) +
+ + diff --git a/mdiwin/MDIWIN.RC b/mdiwin/MDIWIN.RC new file mode 100644 index 0000000..47fb2d5 --- /dev/null +++ b/mdiwin/MDIWIN.RC @@ -0,0 +1,293 @@ +#include +#include + +P944 ICON "944.ICO" + +mdiMainMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "Load &GIF...", MENU_LOAD_GIF + MENUITEM "Load &Bitmap...", MENU_LOAD_BITMAP + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM "E&xit", MENU_FILE_EXIT + END +END + +viewMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "Load &GIF...", MENU_LOAD_GIF + MENUITEM "Load &Bitmap...", MENU_LOAD_BITMAP + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM SEPARATOR + MENUITEM "&Save Bitmap...", MENU_FILE_SAVEBITMAP + MENUITEM "E&xit", MENU_FILE_EXIT + END + + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X", MENU_CUT + MENUITEM "&Copy\tCtrl+C", MENU_COPY + MENUITEM "P&aste\tCtrl+V", MENU_PASTE + MENUITEM "Cli&p\tCtrl+P", MENU_CLIP + END + + POPUP "E&nhancement" + BEGIN + MENUITEM "&Smoothing", MENU_SMOOTHING + MENUITEM "&Resize", MENU_RESIZE + MENUITEM "&Translate", MENU_TRANSLATE + MENUITEM "S&hear", MENU_SHEAR + END + + POPUP "War&ping" + BEGIN + MENUITEM "&Perspective Warp" , MENU_WARP_PERSPECTIVE + MENUITEM "&Convex Warp", MENU_WARP_CONVEX + END + + POPUP "Pale&tte" + BEGIN + MENUITEM "&View Palette...", MENU_PALETTE_VIEW + END + + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM "&Hide Toolbar", IDM_TOOLBAR + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END +END + + +slideMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "Load &GIF...", MENU_LOAD_GIF + MENUITEM "Load &Bitmap...", MENU_LOAD_BITMAP + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM SEPARATOR + MENUITEM "&Save Bitmap...", MENU_FILE_SAVEBITMAP + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM "&Hide Toolbar", IDM_TOOLBAR + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END +END + +FileSelect DIALOG 31, 27, 211, 145 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 6,"Helv" +BEGIN + CONTROL "", IDS_FLIST, "LISTBOX", LBS_STANDARD | LBS_USETABSTOPS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 53, 201, 88 + CONTROL "", IDS_FNAME, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 42, 6, 84, 12 + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 131, 3, 36, 24 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 170, 3, 36, 24 + LTEXT "File Name:", -1, 2, 8, 38, 8 + LTEXT "Path:", -1, 4, 24, 17, 8 + LTEXT "", IDS_FPATH, 25, 24, 98, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File", -1, 20, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Date", -1, 68, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Size", -1, 129, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Time", -1, 159, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File Save", IDS_FILESAVE, 90, 155, 38, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File Open", IDS_FILEOPEN, 90, 168, 34, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +END + +ViewSelect DIALOG 11, 26, 130, 55 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Select Mesh Target" +FONT 6, "Helv" +BEGIN + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 92, 5, 36, 24 + CONTROL "", VIEWSEL_LIST, "LISTBOX", LBS_STANDARD | LBS_USETABSTOPS | WS_CHILD | WS_VISIBLE, 5, 4, 82, 48 +END + +Processing DIALOG 20, 36, 153, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Image Processing" +FONT 6, "Helv" +BEGIN + CHECKBOX "3x3 Matrix Averaging", IP_AVERAGING, 7, 55, 82, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Low Pass Filter", IP_LOWPASS, 7, 70, 77, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "High Pass Filter", IP_HIGHPASS, 7, 85, 65, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + EDITTEXT IP_33R1C1, 104, 57, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R1C2, 118, 57, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R1C3, 132, 57, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R2C1, 104, 69, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R2C2, 118, 69, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R2C3, 132, 69, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R3C1, 104, 81, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R3C2, 118, 81, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT IP_33R3C3, 132, 81, 14, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + CHECKBOX "Sobel Transform", IP_SOBEL, 7, 124, 87, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Smoothed Transform", IP_SMOOTHED, 7, 136, 84, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Laplace Transform", IP_LAPLACE, 7, 148, 80, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Isotropic Transform", IP_ISOTROPIC, 7, 160, 75, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Stochastic Transform", IP_STOCHASTIC, 7, 172, 85, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 77, 2, 36, 24 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 115, 2, 36, 24 + CONTROL "Smoothing Algorithms", IP_SMOOTHING, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 37, 148, 68 + LTEXT "Matrix", -1, 109, 47, 24, 7, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "Edge Detection Algorithms", IP_EDGE, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 111, 148, 76 +END + +SlideShow DIALOG 20, 30, 208, 128 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Slide Show" +FONT 6, "Helv" +BEGIN + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 132, 4, 36, 24 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 169, 4, 36, 24 + RADIOBUTTON "Select Files", SS_SELECT, 5, 29, 51, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP +; CONTROL "", SS_LIST, "LISTBOX", LBS_NOTIFY | LBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, 3, 45, 202, 86 +; CHECKBOX "Bitmap", SS_BITMAP, 5, 4, 36, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP +; CHECKBOX "Project", SS_PROJECT, 5, 17, 36, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +Factor DIALOG 10, 27, 90, 72 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 6, "Helv" +{ + EDITTEXT FACTOR_WIDTH, 56, 40, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT FACTOR_HEIGHT, 56, 54, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT FACTOR_WIDTHINCR, 140, 40, 40, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT FACTOR_HEIGHTINCR, 140, 54, 40, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + RADIOBUTTON "Op :", FACTOR_WIDTHOP, 182, 41, 28, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + RADIOBUTTON "Op :", FACTOR_HEIGHTOP, 182, 54, 27, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 1, 1, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 40, 1, 36, 24 + LTEXT "Width Factor :", -1, 4, 42, 48, 8 + LTEXT "Height Factor :", -1, 4, 55, 51, 8 + LTEXT "Incremental :", -1, 93, 42, 45, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Incremental :", -1, 93, 55, 44, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +// GROUPBOX "", 106, 91, 29, 131, 41, BS_GROUPBOX | WS_CHILD | WS_VISIBLE + LTEXT "", FACTOR_WOPSTRING, 211, 43, 9, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "", FACTOR_HOPSTRING, 211, 55, 9, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +} + +Frame DIALOG 10, 27, 81, 65 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Mesh Frames" +FONT 6, "Helv" +BEGIN + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 4, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 41, 4, 36, 24 + LTEXT "Frames:", -1, 4, 45, 27, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT FRAME_FRAMES, 33, 44, 21, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP +END + +mdiAccel ACCELERATORS +BEGIN + VK_F5, IDM_CASCADE, VIRTKEY, SHIFT + VK_F4, IDM_TILE, VIRTKEY, SHIFT + "X", MENU_CUT, VIRTKEY, CONTROL + "C", MENU_COPY, VIRTKEY, CONTROL + "V", MENU_PASTE, VIRTKEY, CONTROL + "P", MENU_CLIP, VIRTKEY, CONTROL +END + +Palette DIALOG 30, 0, 142, 105 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Palette" +FONT 6,"Helv" +BEGIN + CONTROL "", PALETTE_COLORS, "button", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE, 1, 34, 140, 68 + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 103, 3, 36, 24 +END + +Dissolve DIALOG 19, 25, 143, 137 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Cross Dissolve Schedule" +FONT 6,"Helv" +BEGIN + CONTROL "", DSLV_LIST, "LISTBOX", LBS_NOTIFY | LBS_HASSTRINGS | LBS_USETABSTOPS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 3, 54, 137, 79 + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 105, 2, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 68, 2, 36, 24 + LTEXT "Frame", -1, 5, 42, 20, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Source", -1, 36, 42, 26, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Repeat", -1, 102, 42, 25, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Destination", -1, 62, 42, 38, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +END + +EditDissolve DIALOG 21, 35, 117, 74 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Edit Item" +FONT 8,"Helv" +BEGIN + LTEXT "Source :", -1, 4, 39, 29, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Destination :", -1, 4, 51, 45, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Repeat :", -1, 4, 63, 34, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT EDITITEM_SOURCE, 50, 35, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT EDITITEM_DESTINATION, 50, 47, 32, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + EDITTEXT EDITITEM_REPEAT, 50, 59, 16, 12, ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + CONTROL "", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 80, 2, 36, 24 + CONTROL "", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 43, 2, 36, 24 +END + + +STRINGTABLE +BEGIN + STRING_HIDETOOLBAR, "&Hide Toolbar" + STRING_SHOWTOOLBAR, "&Show Toolbar" + STRING_ASTERISKDOTBMP, "*.BMP" + STRING_ASTERISKDOTGIF, "*.GIF" + STRING_ASTERISKDOTPRJ, "*.PRJ" + STRING_BITMAPOKFOCUSUP, "OKFOCUSUP" + STRING_BITMAPOKNOFUP, "OKNOFUP" + STRING_BITMAPOKFOCUSDN, "OKFOCUSDN" + STRING_BITMAPCAFOCUSUP, "CAFOCUSUP" + STRING_BITMAPCANOFUP, "CANOFUP" + STRING_BITMAPCAFOCUSDN, "CAFOCUSDN" + STRING_LITERALCLIP, "CLIP" + STRING_LITERALMESH, "MESH" + STRING_LITERALCUT, "CUT" + STRING_LITERALARROWD, "ARROWD" + STRING_LITERALARROWU, "ARROWU" + STRING_LITERALARROWR, "ARROWR" + STRING_LITERALARROWL, "ARROWL" + STRING_LITERALTEST, "TEST" + STRING_LITERALBSAVE, "BSAVE" + STRING_LITERALBLOAD, "BLOAD" + STRING_LITERALTRANSFORMA,"TRANSFORMA" + STRING_LITERALTRANSFORMB,"TRANSFORMB" + STRING_LITERALVIEW, "VIEW" + STRING_LITERALTIME, "TIME" + STRING_LITERALPLAY, "PLAY" + STRING_LITERALEJECT, "EJECT" + STRING_LITERALPAUSE, "PAUSE" + STRING_LITERALDISSOLVE, "XDISSOLVE" + STRING_LITERALTOOLBAR, "ToolBar" + STRING_LITERALSIGMA, "SIGMA" + STRING_LITERAL944, "P944" + STRING_MESHEXTENSION, ".000" + STRING_PROJECTEXTENSION,".PRJ" + STRING_DOT, "." + STRING_CRLF, "\n" + STRING_TABSTRING, "\t" + STRING_PROJECTIDSTRING, "PRJV1.00" + STRING_UNKNOWNFILETYPE, "Dont know how to handle this file." + STRING_UNKNOWNREFERENCE,"Project references missing or invalid items." + STRING_ERRORLOADINGPRJ, "Error loading project" + STRING_INIFILENAME, "MDIWIN.INI" + STRING_UNSET, "UNSET" + STRING_INISETTINGS, "SETTINGS" + STRING_INIPROJDIR, "ProjDir" + STRING_INIMESHDIR, "MeshDir" +END diff --git a/mdiwin/MDIWIN.ncb b/mdiwin/MDIWIN.ncb new file mode 100644 index 0000000..8a5338c Binary files /dev/null and b/mdiwin/MDIWIN.ncb differ diff --git a/mdiwin/MDIWIN16.IDE b/mdiwin/MDIWIN16.IDE new file mode 100644 index 0000000..8846b2a Binary files /dev/null and b/mdiwin/MDIWIN16.IDE differ diff --git a/mdiwin/MDIWIN32.IDE b/mdiwin/MDIWIN32.IDE new file mode 100644 index 0000000..34b1fbf Binary files /dev/null and b/mdiwin/MDIWIN32.IDE differ diff --git a/mdiwin/MDIWIN32.OBR b/mdiwin/MDIWIN32.OBR new file mode 100644 index 0000000..f520e13 Binary files /dev/null and b/mdiwin/MDIWIN32.OBR differ diff --git a/mdiwin/MDIWIN32.~DE b/mdiwin/MDIWIN32.~DE new file mode 100644 index 0000000..45527ff Binary files /dev/null and b/mdiwin/MDIWIN32.~DE differ diff --git a/mdiwin/MESH.BAK b/mdiwin/MESH.BAK new file mode 100644 index 0000000..6ad35a8 --- /dev/null +++ b/mdiwin/MESH.BAK @@ -0,0 +1,455 @@ +#include +#include +#include +#include + +char GridMesh::szClassName[]="MESH93B"; +char GridMesh::szMenuName[]={'\0'}; + +GridMesh::GridMesh(HWND hParent,int width,int height,GridShow visibility) +: mhParent(hParent), mStatus(InActive), mGridLines(GridLines), mStandardColor(RGB(0,0,0)), + mIsSuspended(FALSE), mhInstance(Main::processInstance()) +{ + mVersionInfo=szClassName; + mhDrawingPen=::CreatePen(PS_SOLID,1,mStandardColor); + registerClass(); + ::CreateWindowEx(WS_EX_TRANSPARENT,(LPSTR)szClassName,0, + WS_CHILD|WS_CLIPSIBLINGS, + CW_USEDEFAULT,CW_USEDEFAULT, + width,height, + mhParent,0x00,mhInstance,(LPSTR)(Window*)this); + if(GridMesh::Show==visibility) + { + Window::Show(SW_SHOW); + Update(); + ::InvalidateRect(GetHandle(),0,TRUE); + } +} + +GridMesh::~GridMesh() +{ + ::DeleteObject(mhDrawingPen); + if(::IsWindow(GetHandle()))::DestroyWindow(GetHandle()); +} + +void GridMesh::registerClass(void) +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,szClassName,(WNDCLASS FAR *)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(GridMesh*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =0; + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);; + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +long GridMesh::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + ::SendMessage(GetHandle(),WM_NCACTIVATE,TRUE,0L); + newMesh(); + return FALSE; + case WM_PAINT : + paint(); + return FALSE; + case WM_LBUTTONUP : + mouseUp(LOWORD(lParam),HIWORD(lParam)); + return FALSE; + case WM_LBUTTONDOWN : + mouseDown(LOWORD(lParam),HIWORD(lParam)); + return FALSE; + case WM_MOUSEMOVE : + mouseMove(LOWORD(lParam),HIWORD(lParam)); + return FALSE; + case WM_DESTROY : + return FALSE; + } + return ::DefWindowProc(GetHandle(),message,wParam,lParam); +} + +void GridMesh::showWindow(int visible) +{ + Window::Show(visible?SW_SHOW:SW_HIDE); + ::InvalidateRect(GetHandle(),0,TRUE); +} + +void GridMesh::newMesh(WORD gridLines) +{ + createMesh(gridLines,(Vector&)*this); + ::InvalidateRect(mhParent,0,TRUE); + ::InvalidateRect(GetHandle(),0,TRUE); +} + +void GridMesh::createMesh(WORD gridLines,Vector &someSegmentVector) +{ + RECT clientRect; + WORD xLength; + WORD yLength; + Point tempFirstPoint; + Point tempSecondPoint; + WORD vectorSize(0); + Index vectorIndex(0); + + if(gridLines>MaxGridLines)mGridLines=GridLines; + else mGridLines=gridLines; + ::GetClientRect(GetHandle(),(RECT FAR *)&clientRect); + xLength=clientRect.right/(mGridLines+1); + yLength=clientRect.bottom/(mGridLines+1); + for(int x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++)vectorSize+=2; + someSegmentVector.size(vectorSize); + for(x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + { + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++) + { + tempFirstPoint.setPoint(x+xLength,y+yLength); + tempSecondPoint.setPoint(x+xLength,y); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + tempSecondPoint.setPoint(x,y+yLength); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + } + } +} + +void GridMesh::paint(void)const +{ + PAINTSTRUCT ps; + HDC hDC; + size_t size((int)Vector::size()); + + hDC=::BeginPaint(GetHandle(),(PAINTSTRUCT FAR*)&ps); + for(int i=0;i::operator[](i)).drawSegment(hDC,mhDrawingPen); + ::EndPaint(GetHandle(),(PAINTSTRUCT FAR *)&ps); +} + +void GridMesh::mouseDown(int x,int y) +{ + HDC hDC; + Point mousePoint; + size_t size; + + if(mIsSuspended)return; + mCurrentIntersection.remove(); + mousePoint.setPoint(x,y); + if(!closestIntersection(mCurrentIntersection,mousePoint)) + { + mStatus=InActive; + ::MessageBeep(-1); + return; + } + mStatus=Active; + hDC=::GetDC(GetHandle()); + size=(int)mCurrentIntersection.size(); + for(int i=0;i::operator[](mCurrentIntersection[index].vectorIndex())=mCurrentIntersection[index]; + size=(int)Vector::size(); + for(int i=0;i::operator[](i)).drawSegment(hDC,mhDrawingPen); + ::ReleaseDC(GetHandle(),hDC); + ::InvalidateRect(GetHandle(),0,TRUE); + ::UpdateWindow(GetHandle()); +} + +WORD GridMesh::closestIntersection(Block &filterBlock,Point &mousePoint) +{ + DWORD tempDistance; + DWORD leastDistance; + Segment tempSegment; + Segment minSegment; + size_t size((int)Vector::size()); + + if(!size)return FALSE; + filterBlock.remove(); + while(IntersectionSegments!=filterBlock.size()) + { + for(int index=0;index::operator[](index); + while(isInBlock(filterBlock,tempSegment)) + tempSegment=Vector::operator[](++index); + leastDistance=minDistance(tempSegment,mousePoint); + } + else + { + tempDistance=minDistance(Vector::operator[](index),mousePoint); + if(tempDistance::operator[](index); + if(!isInBlock(filterBlock,minSegment)) + { + tempSegment=minSegment; + leastDistance=tempDistance; + } + } + } + } + filterBlock.insert(&tempSegment); + } + return orderIntersection(filterBlock); +} + +WORD GridMesh::orderIntersection(Block &intersection) +{ + Point tempPoint; + Point swapPoint; + size_t size((int)intersection.size()); + int firstSection(0); + int secondSection(0); + int index; + + if(IntersectionSegments!=size)return FALSE; + tempPoint=intersection[0].firstPoint(); + firstSection=(tempPoint==intersection[1].firstPoint()); + if(!firstSection)firstSection=(tempPoint==intersection[1].secondPoint()); + if(!firstSection) + { + tempPoint=intersection[0].secondPoint(); + secondSection=tempPoint==intersection[1].firstPoint(); + if(!secondSection)secondSection=tempPoint==intersection[1].secondPoint(); + } + if(!firstSection && !secondSection)return FALSE; + for(index=1;index &source,Segment &someSegment) +{ + size_t size((int)source.size()); + + for(int i=0;i::size()); + + if(!size)return FALSE; + if(0==(fp=::fopen((LPSTR)pathFileName,"wb")))return FALSE; + ::fwrite((void*)(LPSTR)mVersionInfo,::strlen(mVersionInfo),1,fp); + ::fwrite((void*)&size,sizeof(size),1,fp); + ::fwrite((void*)&mGridLines,sizeof(mGridLines),1,fp); + for(int i=0;i::operator[](i).firstPoint(); + ::fwrite((void *)&tempPoint,sizeof(Point),1,fp); + tempPoint=Vector::operator[](i).secondPoint(); + ::fwrite((void*)&tempPoint,sizeof(Point),1,fp); + } + ::fclose(fp); + return TRUE; +} + +WORD GridMesh::loadMesh(String &pathFileName) +{ + FILE *fp; + Point firstPoint; + Point secondPoint; + String versionString; + int vectorIndex(0); + size_t size; + + if(0==(fp=::fopen((LPSTR)pathFileName,"rb")))return upgradeStatus(FALSE); + versionString.reserve(String::MaxString); + ::fread((void*)(LPSTR)versionString,::strlen(mVersionInfo),1,fp); + if(versionString!=mVersionInfo) + { + ::fclose(fp); + return upgradeStatus(FALSE); + } + ::fread((void*)&size,sizeof(size),1,fp); + ::fread((void*)&mGridLines,sizeof(mGridLines),1,fp); + Vector::size(size); + for(int i=0;i::operator[](vectorIndex)=Segment(firstPoint,secondPoint,vectorIndex); + vectorIndex++; + } + ::fclose(fp); + return upgradeStatus(TRUE); +} + +WORD GridMesh::upgradeStatus(WORD retCode)const +{ + if(!::IsWindowVisible(GetHandle()))Window::Show(SW_SHOW); + ::InvalidateRect(mhParent,0,TRUE); + ::InvalidateRect(GetHandle(),0,TRUE); + return retCode; +} + +WORD GridMesh::retrieveMesh(Vector &sourcePoints,Vector &destPoints) +{ + Vector sourceSegments; + createMesh(mGridLines,sourceSegments); + retrieveMesh(sourcePoints,sourceSegments); + retrieveMesh(destPoints,(Vector&)*this); + if(sourcePoints.size()!=destPoints.size())return FALSE; + return (WORD)sourcePoints.size(); +} + +WORD GridMesh::retrieveMesh(Vector &meshPoints,Vector &someSegmentVector)const +{ + Segment tempSegment; + int vectorIndex; + int pointIndex(0); + size_t vectorSize((int)someSegmentVector.size()); + int haveFirstColumn(FALSE); + Vector dummyPoint; + + meshPoints.size(0); + meshPoints.size((mGridLines+2)*(mGridLines+2)); + for(vectorIndex=0;vectorIndex +#include +#include +#include + +char GridMesh::szClassName[]="MESH93B"; +char GridMesh::szMenuName[]={'\0'}; + +GridMesh::GridMesh(HWND hParent,int width,int height,GridShow visibility) +: mhParent(hParent), mStatus(InActive), mGridLines(GridLines), mStandardColor(RGB(0,0,0)), + mIsSuspended(FALSE), mhInstance(Main::processInstance()) +{ + mVersionInfo=szClassName; + mhDrawingPen=::CreatePen(PS_SOLID,1,mStandardColor); + registerClass(); + ::CreateWindowEx(WS_EX_TRANSPARENT,(LPSTR)szClassName,0, + WS_CHILD|WS_CLIPSIBLINGS, + CW_USEDEFAULT,CW_USEDEFAULT, + width,height, + mhParent,0x00,mhInstance,(LPSTR)(Window*)this); + if(GridMesh::Show==visibility) + { + Window::Show(SW_SHOW); + Update(); + ::InvalidateRect(GetHandle(),0,TRUE); + } +} + +GridMesh::~GridMesh() +{ + ::DeleteObject(mhDrawingPen); + if(::IsWindow(GetHandle()))::DestroyWindow(GetHandle()); +} + +void GridMesh::registerClass(void) +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,szClassName,(WNDCLASS FAR *)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(GridMesh*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =0; + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);; + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +long GridMesh::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + ::SendMessage(GetHandle(),WM_NCACTIVATE,TRUE,0L); + newMesh(); + return FALSE; + case WM_PAINT : + paint(); + return FALSE; + case WM_LBUTTONUP : + mouseUp(LOWORD(lParam),HIWORD(lParam)); + return FALSE; + case WM_LBUTTONDOWN : + mouseDown(LOWORD(lParam),HIWORD(lParam)); + return FALSE; + case WM_MOUSEMOVE : + mouseMove(LOWORD(lParam),HIWORD(lParam)); + return FALSE; + case WM_DESTROY : + return FALSE; + } + return ::DefWindowProc(GetHandle(),message,wParam,lParam); +} + +void GridMesh::showWindow(int visible) +{ + Window::Show(visible?SW_SHOW:SW_HIDE); + ::InvalidateRect(GetHandle(),0,TRUE); +} + +void GridMesh::newMesh(WORD gridLines) +{ + createMesh(gridLines,(Vector&)*this); + ::InvalidateRect(mhParent,0,TRUE); + ::InvalidateRect(GetHandle(),0,TRUE); +} + +void GridMesh::createMesh(WORD gridLines,Vector &someSegmentVector) +{ + RECT clientRect; + WORD xLength; + WORD yLength; + Point tempFirstPoint; + Point tempSecondPoint; + WORD vectorSize(0); + Index vectorIndex(0); + + if(gridLines>MaxGridLines)mGridLines=GridLines; + else mGridLines=gridLines; + ::GetClientRect(GetHandle(),(RECT FAR *)&clientRect); + xLength=clientRect.right/(mGridLines+1); + yLength=clientRect.bottom/(mGridLines+1); + for(int x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++)vectorSize+=2; + someSegmentVector.size(vectorSize); + for(x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + { + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++) + { + tempFirstPoint.setPoint(x+xLength,y+yLength); + tempSecondPoint.setPoint(x+xLength,y); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + tempSecondPoint.setPoint(x,y+yLength); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + } + } +} + +void GridMesh::paint(void) +{ + PAINTSTRUCT ps; + HDC hDC; + size_t size((int)Vector::size()); + + hDC=::BeginPaint(GetHandle(),(PAINTSTRUCT FAR*)&ps); + for(int i=0;i::operator[](i)).drawSegment(hDC,mhDrawingPen); + ::EndPaint(GetHandle(),(PAINTSTRUCT FAR *)&ps); +} + +void GridMesh::mouseDown(int x,int y) +{ + HDC hDC; + Point mousePoint; + size_t size; + + if(mIsSuspended)return; + mCurrentIntersection.remove(); + mousePoint.setPoint(x,y); + if(!closestIntersection(mCurrentIntersection,mousePoint)) + { + mStatus=InActive; + ::MessageBeep(-1); + return; + } + mStatus=Active; + hDC=::GetDC(GetHandle()); + size=(int)mCurrentIntersection.size(); + for(int i=0;i::operator[](mCurrentIntersection[index].vectorIndex())=mCurrentIntersection[index]; + size=(int)Vector::size(); + for(int i=0;i::operator[](i)).drawSegment(hDC,mhDrawingPen); + ::ReleaseDC(GetHandle(),hDC); + ::InvalidateRect(GetHandle(),0,TRUE); + ::UpdateWindow(GetHandle()); +} + +WORD GridMesh::closestIntersection(Block &filterBlock,Point &mousePoint) +{ + DWORD tempDistance; + DWORD leastDistance; + Segment tempSegment; + Segment minSegment; + size_t size((int)Vector::size()); + + if(!size)return FALSE; + filterBlock.remove(); + while(IntersectionSegments!=filterBlock.size()) + { + for(int index=0;index::operator[](index); + while(isInBlock(filterBlock,tempSegment)) + tempSegment=Vector::operator[](++index); + leastDistance=minDistance(tempSegment,mousePoint); + } + else + { + tempDistance=minDistance(Vector::operator[](index),mousePoint); + if(tempDistance::operator[](index); + if(!isInBlock(filterBlock,minSegment)) + { + tempSegment=minSegment; + leastDistance=tempDistance; + } + } + } + } + filterBlock.insert(&tempSegment); + } + return orderIntersection(filterBlock); +} + +WORD GridMesh::orderIntersection(Block &intersection) +{ + Point tempPoint; + Point swapPoint; + size_t size((int)intersection.size()); + int firstSection(0); + int secondSection(0); + int index; + + if(IntersectionSegments!=size)return FALSE; + tempPoint=intersection[0].firstPoint(); + firstSection=(tempPoint==intersection[1].firstPoint()); + if(!firstSection)firstSection=(tempPoint==intersection[1].secondPoint()); + if(!firstSection) + { + tempPoint=intersection[0].secondPoint(); + secondSection=tempPoint==intersection[1].firstPoint(); + if(!secondSection)secondSection=tempPoint==intersection[1].secondPoint(); + } + if(!firstSection && !secondSection)return FALSE; + for(index=1;index &source,Segment &someSegment) +{ + size_t size((int)source.size()); + + for(int i=0;i::size()); + + if(!size)return FALSE; + if(0==(fp=::fopen((LPSTR)pathFileName,"wb")))return FALSE; + ::fwrite((void*)(LPSTR)mVersionInfo,::strlen(mVersionInfo),1,fp); + ::fwrite((void*)&size,sizeof(size),1,fp); + ::fwrite((void*)&mGridLines,sizeof(mGridLines),1,fp); + for(int i=0;i::operator[](i).firstPoint(); + ::fwrite((void *)&tempPoint,sizeof(Point),1,fp); + tempPoint=Vector::operator[](i).secondPoint(); + ::fwrite((void*)&tempPoint,sizeof(Point),1,fp); + } + ::fclose(fp); + return TRUE; +} + +WORD GridMesh::loadMesh(String &pathFileName) +{ + FILE *fp; + Point firstPoint; + Point secondPoint; + String versionString; + int vectorIndex(0); + size_t size; + + if(0==(fp=::fopen((LPSTR)pathFileName,"rb")))return upgradeStatus(FALSE); + versionString.reserve(String::MaxString); + ::fread((void*)(LPSTR)versionString,::strlen(mVersionInfo),1,fp); + if(versionString!=mVersionInfo) + { + ::fclose(fp); + return upgradeStatus(FALSE); + } + ::fread((void*)&size,sizeof(size),1,fp); + ::fread((void*)&mGridLines,sizeof(mGridLines),1,fp); + Vector::size(size); + for(int i=0;i::operator[](vectorIndex)=Segment(firstPoint,secondPoint,vectorIndex); + vectorIndex++; + } + ::fclose(fp); + return upgradeStatus(TRUE); +} + +WORD GridMesh::upgradeStatus(WORD retCode) +{ + if(!::IsWindowVisible(GetHandle()))Window::Show(SW_SHOW); + ::InvalidateRect(mhParent,0,TRUE); + ::InvalidateRect(GetHandle(),0,TRUE); + return retCode; +} + +WORD GridMesh::retrieveMesh(Vector &sourcePoints,Vector &destPoints) +{ + Vector sourceSegments; + createMesh(mGridLines,sourceSegments); + retrieveMesh(sourcePoints,sourceSegments); + retrieveMesh(destPoints,(Vector&)*this); + if(sourcePoints.size()!=destPoints.size())return FALSE; + return (WORD)sourcePoints.size(); +} + +WORD GridMesh::retrieveMesh(Vector &meshPoints,Vector &someSegmentVector)const +{ + Segment tempSegment; + int vectorIndex; + int pointIndex(0); + size_t vectorSize((int)someSegmentVector.size()); + int haveFirstColumn(FALSE); + Vector dummyPoint; + + meshPoints.size(0); + meshPoints.size((mGridLines+2)*(mGridLines+2)); + for(vectorIndex=0;vectorIndex +#include +#include +#include +#include +#include + +class GridMesh : public Vector, public Window +{ +public: + enum GridShow{Show,NoShow}; + GridMesh(HWND hParent,int width,int height,GridShow visibility=Show); + ~GridMesh(void); + void newMesh(WORD gridLines=GridLines); + WORD saveMesh(String &pathFileName); + WORD loadMesh(String &pathFileName); + WORD retrieveMesh(Vector &sourcePoints,Vector &destPoints); + WORD rowCols(void)const; + WORD gridLines(void)const; + WORD upgradeStatus(WORD retCode); + WORD isVisible(void)const; + void showWindow(int visible=TRUE); + void suspendMesh(WORD suspend); +private: + typedef LONG Index; + enum Status{InActive,Active}; + enum {IntersectionSegments=4}; + enum {GridLines=8,MaxGridLines=16}; + void registerClass(void); + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + void paint(void); + void mouseUp(int x,int y); + void mouseDown(int x,int y); + void mouseMove(int x,int y); + DWORD minDistance(const Segment &someSegment,const Point &mousePoint); + WORD closestIntersection(Block &filterSegment,Point &mousePoint); + WORD orderIntersection(Block &intersection); + WORD isInBlock(Block &source,Segment &someSegment); + void createMesh(WORD gridLines,Vector &someSegmentVector); + WORD retrieveMesh(Vector &meshPoints,Vector &meshSegments)const; + + static char szClassName[]; + static char szMenuName[]; + Block mCurrentIntersection; + int mGridLines; + Status mStatus; + String mVersionInfo; + WORD mIsSuspended; + COLORREF mStandardColor; + HPEN mhDrawingPen; + HWND mhParent; + HINSTANCE mhInstance; +}; + +inline +WORD GridMesh::isVisible(void)const +{ + return ::IsWindowVisible(GetHandle()); +} + +inline +WORD GridMesh::gridLines(void)const +{ + return mGridLines; +} + +inline +WORD GridMesh::rowCols(void)const +{ + return mGridLines+2; +} + +inline +void GridMesh::suspendMesh(WORD suspend) +{ + if(suspend)mIsSuspended=TRUE; + else mIsSuspended=FALSE; +} +#endif diff --git a/mdiwin/MESHFRM.BAK b/mdiwin/MESHFRM.BAK new file mode 100644 index 0000000..a500853 --- /dev/null +++ b/mdiwin/MESHFRM.BAK @@ -0,0 +1,97 @@ +#include + +WORD MeshFrames::interpolateMeshFrames(Vector &srcPairs,Vector &dstPairs,Vector &meshVectors,int nFrames) +{ + Vector resamplePairs; + Vector tempPairs; + CatmullRom catmullRom; + size_t vectorSize((int)srcPairs.size()); + meshVectors.size(nFrames); + + resamplePairs.size(nFrames); + tempPairs.size(MaxTempPairs); + for(int i=0;i &resamplePairs) +{ + int nFrames((int)resamplePairs.size()); + int index; + double incremental; + double i; + + if(dstPoint>srcPoint) + { + incremental=((double)dstPoint-(double)srcPoint)/(double)nFrames; + for(i=srcPoint+incremental,index=0;index &meshVectors,Vector &resamplePairs,int meshRow) +{ + int nFrames((int)resamplePairs.size()); + + if(nFrames!=meshVectors.size())return; + for(int i=0;i &meshVectors) +{ + size_t meshCols((int)meshVectors.size()); + size_t meshRows((int)meshVectors[0].size()); + ofstream output("OUTPUT.DAT"); + + for(int row=0;row + +WORD MeshFrames::interpolateMeshFrames(Vector &srcPairs,Vector &dstPairs,Vector &meshVectors,int nFrames) +{ + Vector resamplePairs; + Vector tempPairs; + CatmullRom catmullRom; + size_t vectorSize((int)srcPairs.size()); + meshVectors.size(nFrames); + + resamplePairs.size(nFrames); + tempPairs.size(MaxTempPairs); + for(int i=0;i &resamplePairs) +{ + int nFrames((int)resamplePairs.size()); + int index; + double incremental; + double i; + + if(dstPoint>srcPoint) + { + incremental=((double)dstPoint-(double)srcPoint)/(double)nFrames; + for(i=srcPoint+incremental,index=0;index &meshVectors,Vector &resamplePairs,int meshRow) +{ + int nFrames((int)resamplePairs.size()); + + if(nFrames!=meshVectors.size())return; + for(int i=0;i &meshVectors) +{ + size_t meshCols((int)meshVectors.size()); + size_t meshRows((int)meshVectors[0].size()); + ofstream output("OUTPUT.DAT"); + + for(int row=0;row +#include +#include +#include + +class MeshFrames +{ +public: + typedef Vector VectoredPairs; + MeshFrames(); + ~MeshFrames(); + WORD interpolateMeshFrames(Vector &srcPairs,Vector &dstPairs,Vector &meshVectors,int nFrames); + void dumpMeshFrames(Vector &meshVectors); +private: + enum{MaxTempPairs=2,SourceTempPair=0,DestTempPair=1}; + void distributeMeshPoints(float srcPoint,float dstPoint,Vector &resamplePairs); + void replaceMeshColumn(Vector &meshVectors,Vector &resamplePairs,int meshRow); + WORD distanceBetween(FloatPairs &srcPair,FloatPairs &dstPairs)const; +}; + +inline +MeshFrames::MeshFrames() +{ +} + +inline +MeshFrames::~MeshFrames() +{ +} +#endif diff --git a/mdiwin/MESHWRP.BAK b/mdiwin/MESHWRP.BAK new file mode 100644 index 0000000..19336c5 --- /dev/null +++ b/mdiwin/MESHWRP.BAK @@ -0,0 +1,295 @@ +#include +#include +#include +#include +#include + +MeshWarp::MeshWarp(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height) +: mhPalette(hPalette), mhpImage(hpImage), mWidth(width), mHeight(height), + mhGlobalIntermediate(0), mhpIntermediate(0), mhGlobalImage(0), mhpGlobalImage(0), + mhGlobalSource(0), mDstWidth(0), mDstHeight(0) +{ + loadPaletteEntries(); +} + +MeshWarp::~MeshWarp() +{ +} + +HGLOBAL MeshWarp::performWarp(Vector &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight) +{ + size_t size; + + if((size=(int)sourceMesh.size())!=destMesh.size())return (HGLOBAL)0; + mSrcPairs.size(sourceMesh.size()); + mDstPairs.size(destMesh.size()); + for(int i=0;i &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight) +{ + if(sourceMesh.size()!=destMesh.size())return (HGLOBAL)0; + mSrcPairs=sourceMesh; + mDstPairs=destMesh; + return performWarp(newWidth,newHeight,meshColRows); +} + +HGLOBAL MeshWarp::performWarp(int &newWidth,int &newHeight,int meshColRows) +{ + initializeSplineColumns(mVerticalSplineSrcData,meshColRows); + initializeSplineColumns(mVerticalSplineDstData,meshColRows); + initializeSplineColumns(mHorizontalSplineSrcData,meshColRows); + initializeSplineColumns(mHorizontalSplineDstData,meshColRows); + assert(0!=(mhGlobalSource=Main::upsideDown(mWidth,mHeight,mhpImage))); + mhpImage=(UHUGE *)::GlobalLock(mhGlobalSource); + firstPassPhaseOne(meshColRows); + firstPassPhaseTwo(); + secondPassPhaseOne(meshColRows); + secondPassPhaseTwo(); + newWidth=(mVerticalSplineSrcData[mVerticalSplineSrcData.size()-1])[mVerticalSplineSrcData[0].size()-1].column(); + newHeight=(mVerticalSplineSrcData[0])[mVerticalSplineSrcData[0].size()-1].row(); + return mhGlobalImage; +} + +void MeshWarp::firstPassPhaseOne(int columnData) +{ + Vector resampleSrcPairs; + Vector resampleDstPairs; + Vector tempSrcPairs; + Vector tempDstPairs; + CatmullRom catmullRom; + size_t resampleSize; + + for(int i=0;i resamplePairs; + Vector tempPairs; + size_t meshRows((int)mVerticalSplineSrcData[0].size()); + size_t meshCols((int)mVerticalSplineSrcData.size()); + UHUGE *hpSrcScanline(0); + UHUGE *hpDstScanline(0); + CatmullRom catmullRom; + + mDstWidth=(mVerticalSplineSrcData[meshCols-1])[meshRows-1].column(); + mDstHeight=(mVerticalSplineSrcData[0])[meshRows-1].row(); + assert(0!=(mhGlobalIntermediate=::GlobalAlloc(GMEM_FIXED,(LONG)mDstWidth*(LONG)mDstHeight))); + mhpIntermediate=(UHUGE*)::GlobalLock(mhGlobalIntermediate); + resamplePairs.size(mDstWidth); + tempPairs.size(meshCols); + for(int j=0;j resampleSrcPairs; + Vector resampleDstPairs; + Vector tempSrcPairs; + Vector tempDstPairs; + size_t resampleSize(mDstPairs[mDstPairs.size()-1].column()); + CatmullRom catmullRom; + + resampleDstPairs.size(resampleSrcPairs.size(resampleSize)); + for(int j=0;j tempPairs; + Vector resamplePairs; + HGLOBAL hGlobalTempOutput; + HGLOBAL hGlobalTempIntermediate; + HGLOBAL hGlobalOutput; + UHUGE *hpOutputImage; + UHUGE *hpSrcScanline; + UHUGE *hpDstScanline; + CatmullRom catmullRom; + + assert(0!=(hGlobalOutput=::GlobalAlloc(GMEM_FIXED,(LONG)mDstWidth*(LONG)mDstHeight))); + hpOutputImage=(UHUGE*)::GlobalLock(hGlobalOutput); + hGlobalTempOutput=Main::rotateLeft(hpOutputImage,mDstWidth,mDstHeight); + ::GlobalUnlock(hGlobalOutput); + ::GlobalFree(hGlobalOutput); + hGlobalOutput=hGlobalTempOutput; + hpOutputImage=(UHUGE*)::GlobalLock(hGlobalOutput); + hGlobalTempIntermediate=Main::rotateLeft(mhpIntermediate,mDstWidth,mDstHeight); + ::GlobalUnlock(mhGlobalIntermediate); + ::GlobalFree(mhGlobalIntermediate); + mhGlobalIntermediate=hGlobalTempIntermediate; + mhpIntermediate=(UHUGE*)::GlobalLock(mhGlobalIntermediate); + resamplePairs.size(mDstHeight); + tempPairs.size(meshRows); + for(int i=0;i &mappingPoints,UHUGE *lpSrcScanline,UHUGE *lpDstScanline,int outLen) +{ + int u,x; + float redAccumulator(0); + float greenAccumulator(0); + float blueAccumulator(0); + float redIntensity; + float greenIntensity; + float blueIntensity; + float inverseFactor; + float inSegment; + float outSegment; + float inputPos[MaxLineWidth+1]; + + // precompute input index for each output pixel + ::memset(inputPos,0,sizeof(inputPos)); + for(u=x=0;x=outLen)u--; + inputPos[x]=u+(double)(x-mappingPoints[u].row())/ + (mappingPoints[u+1].row()-mappingPoints[u].row()); + } + inSegment=1.0; + outSegment=inputPos[1]; + inverseFactor=outSegment; + for(x=u=0;x &splineData,int columnData) +{ + splineData.size(columnData); +} + +void MeshWarp::dumpMesh(Vector &sourceMesh,Vector &destMesh,String &fileName) +{ + FILE *fp; + size_t size; + + size=(int)sourceMesh.size(); + fp=::fopen(fileName,"wb"); + for(int i=0;i +#include +#include +#include +#include + +MeshWarp::MeshWarp(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height) +: mhPalette(hPalette), mhpImage(hpImage), mWidth(width), mHeight(height), + mhGlobalIntermediate(0), mhpIntermediate(0), mhGlobalImage(0), mhpGlobalImage(0), + mhGlobalSource(0), mDstWidth(0), mDstHeight(0) +{ + loadPaletteEntries(); +} + +MeshWarp::~MeshWarp() +{ +} + +HGLOBAL MeshWarp::performWarp(Vector &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight) +{ + size_t size; + + if((size=(int)sourceMesh.size())!=destMesh.size())return (HGLOBAL)0; + mSrcPairs.size(sourceMesh.size()); + mDstPairs.size(destMesh.size()); + for(int i=0;i &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight) +{ + if(sourceMesh.size()!=destMesh.size())return (HGLOBAL)0; + mSrcPairs=sourceMesh; + mDstPairs=destMesh; + return performWarp(newWidth,newHeight,meshColRows); +} + +HGLOBAL MeshWarp::performWarp(int &newWidth,int &newHeight,int meshColRows) +{ + initializeSplineColumns(mVerticalSplineSrcData,meshColRows); + initializeSplineColumns(mVerticalSplineDstData,meshColRows); + initializeSplineColumns(mHorizontalSplineSrcData,meshColRows); + initializeSplineColumns(mHorizontalSplineDstData,meshColRows); + assert(0!=(mhGlobalSource=Main::upsideDown(mWidth,mHeight,mhpImage))); + mhpImage=(UHUGE *)::GlobalLock(mhGlobalSource); + firstPassPhaseOne(meshColRows); + firstPassPhaseTwo(); + secondPassPhaseOne(meshColRows); + secondPassPhaseTwo(); + newWidth=(mVerticalSplineSrcData[mVerticalSplineSrcData.size()-1])[mVerticalSplineSrcData[0].size()-1].column(); + newHeight=(mVerticalSplineSrcData[0])[mVerticalSplineSrcData[0].size()-1].row(); + return mhGlobalImage; +} + +void MeshWarp::firstPassPhaseOne(int columnData) +{ + Vector resampleSrcPairs; + Vector resampleDstPairs; + Vector tempSrcPairs; + Vector tempDstPairs; + CatmullRom catmullRom; + size_t resampleSize; + + for(int i=0;i resamplePairs; + Vector tempPairs; + size_t meshRows((int)mVerticalSplineSrcData[0].size()); + size_t meshCols((int)mVerticalSplineSrcData.size()); + UHUGE *hpSrcScanline=0; + UHUGE *hpDstScanline=0; + CatmullRom catmullRom; + + mDstWidth=(mVerticalSplineSrcData[meshCols-1])[meshRows-1].column(); + mDstHeight=(mVerticalSplineSrcData[0])[meshRows-1].row(); + assert(0!=(mhGlobalIntermediate=::GlobalAlloc(GMEM_FIXED,(LONG)mDstWidth*(LONG)mDstHeight))); + mhpIntermediate=(UHUGE*)::GlobalLock(mhGlobalIntermediate); + resamplePairs.size(mDstWidth); + tempPairs.size(meshCols); + for(int j=0;j resampleSrcPairs; + Vector resampleDstPairs; + Vector tempSrcPairs; + Vector tempDstPairs; + size_t resampleSize(mDstPairs[mDstPairs.size()-1].column()); + CatmullRom catmullRom; + + resampleDstPairs.size(resampleSrcPairs.size(resampleSize)); + for(int j=0;j tempPairs; + Vector resamplePairs; + HGLOBAL hGlobalTempOutput; + HGLOBAL hGlobalTempIntermediate; + HGLOBAL hGlobalOutput; + UHUGE *hpOutputImage; + UHUGE *hpSrcScanline; + UHUGE *hpDstScanline; + CatmullRom catmullRom; + + assert(0!=(hGlobalOutput=::GlobalAlloc(GMEM_FIXED,(LONG)mDstWidth*(LONG)mDstHeight))); + hpOutputImage=(UHUGE*)::GlobalLock(hGlobalOutput); + hGlobalTempOutput=Main::rotateLeft(hpOutputImage,mDstWidth,mDstHeight); + ::GlobalUnlock(hGlobalOutput); + ::GlobalFree(hGlobalOutput); + hGlobalOutput=hGlobalTempOutput; + hpOutputImage=(UHUGE*)::GlobalLock(hGlobalOutput); + hGlobalTempIntermediate=Main::rotateLeft(mhpIntermediate,mDstWidth,mDstHeight); + ::GlobalUnlock(mhGlobalIntermediate); + ::GlobalFree(mhGlobalIntermediate); + mhGlobalIntermediate=hGlobalTempIntermediate; + mhpIntermediate=(UHUGE*)::GlobalLock(mhGlobalIntermediate); + resamplePairs.size(mDstHeight); + tempPairs.size(meshRows); + for(int i=0;i &mappingPoints,UHUGE *lpSrcScanline,UHUGE *lpDstScanline,int outLen) +{ + int u,x; + float redAccumulator(0); + float greenAccumulator(0); + float blueAccumulator(0); + float redIntensity; + float greenIntensity; + float blueIntensity; + float inverseFactor; + float inSegment; + float outSegment; + float inputPos[MaxLineWidth+1]; + + // precompute input index for each output pixel + ::memset(inputPos,0,sizeof(inputPos)); + for(u=x=0;x=outLen)u--; + inputPos[x]=u+(double)(x-mappingPoints[u].row())/ + (mappingPoints[u+1].row()-mappingPoints[u].row()); + } + inSegment=1.0; + outSegment=inputPos[1]; + inverseFactor=outSegment; + for(x=u=0;x &splineData,int columnData) +{ + splineData.size(columnData); +} + +void MeshWarp::dumpMesh(Vector &sourceMesh,Vector &destMesh,String &fileName) +{ + FILE *fp; + size_t size; + + size=(int)sourceMesh.size(); + fp=::fopen(fileName,"wb"); + for(int i=0;i +#include +#include +#include +#include + +class MeshWarp +{ +public: + MeshWarp(void); + MeshWarp(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height); + ~MeshWarp(); + HGLOBAL performWarp(Vector &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight); + HGLOBAL performWarp(Vector &sourceMesh,Vector &destMesh,int meshColRows,int &newWidth,int &newHeight); + static void dumpMesh(Vector &sourceMesh,Vector &destMesh,String &fileName); +private: + typedef Vector VectoredPairs; + enum {MaxColors=256,MaxLineWidth=2048}; + void loadPaletteEntries(void); + HGLOBAL performWarp(int &newWidth,int &newHeight,int meshColRows); + void firstPassPhaseOne(int columnData); + void firstPassPhaseTwo(void); + void secondPassPhaseOne(int columnData); + void secondPassPhaseTwo(void); + void resampleGenerate(Vector &mappingPoints,UHUGE *lpSrcScanline,UHUGE *lpDstScanline,int outLen); + void initializeSplineColumns(Vector &splineData,int columnData); + + Vector mSrcPairs; + Vector mDstPairs; + Vector mVerticalSplineSrcData; + Vector mVerticalSplineDstData; + Vector mHorizontalSplineSrcData; + Vector mHorizontalSplineDstData; + HPALETTE mhPalette; + PALETTEENTRY mPaletteData[MaxColors]; + HGLOBAL mhGlobalImage; + HGLOBAL mhGlobalSource; + UHUGE *mhpGlobalImage; + HGLOBAL mhGlobalIntermediate; + UHUGE *mhpIntermediate; + UHUGE *mhpImage; + WORD mWidth; + WORD mHeight; + WORD mDstWidth; + WORD mDstHeight; +}; + +inline +void MeshWarp::loadPaletteEntries(void) +{ + ::GetPaletteEntries(mhPalette,0,MaxColors,(PALETTEENTRY FAR *)&mPaletteData); +} +#endif \ No newline at end of file diff --git a/mdiwin/OWNER.BAK b/mdiwin/OWNER.BAK new file mode 100644 index 0000000..24528a2 --- /dev/null +++ b/mdiwin/OWNER.BAK @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include + +OwnerDraw::OwnerDraw() +: mhLibrary(0) +{ + String dllPathFileName; + + dllPathFileName.reserve(String::MaxString); + ::GetWindowsDirectory(dllPathFileName,String::MaxString-1); +#if defined(__FLAT__) + dllPathFileName+="\\RESLIB32.DLL"; +#else + dllPathFileName+="\\RESLIB16.DLL"; +#endif + mhLibrary=::LoadLibrary(dllPathFileName); + if((UINT)mhLibrary<32) + ::MessageBox(NULL,(LPSTR)"Could not load resource library!",(LPSTR)"RESOURCE ERROR",MB_ICONSTOP|MB_APPLMODAL); + return; +} + +OwnerDraw::~OwnerDraw() +{ + if(0!=mhLibrary)::FreeLibrary(mhLibrary); +} + +int OwnerDraw::associate(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,FocusItem focusItem) +{ + int itemIndex; + + if(!(itemIndex=locateLinkedButton(ctlID)))mLinkedButtons.insert(&LinkedButton(ctlID,focusUp,noFocusUp,focusDown,mhLibrary,(LinkedButton::FocusItem)focusItem)); + else + { + itemIndex--; + mLinkedButtons[itemIndex].referenceCount(mLinkedButtons[itemIndex].referenceCount()+1); + } + return TRUE; +} + +int OwnerDraw::handleOwnerButton(int ctlID,LPARAM lParam) +{ + int itemIndex; + LPDRAWITEMSTRUCT lpControlData((LPDRAWITEMSTRUCT)lParam); + + if(!(itemIndex=locateLinkedButton(ctlID)))return FALSE; + return mLinkedButtons[--itemIndex].drawButton(lpControlData); +} + +void OwnerDraw::freeButton(int ctlID) +{ + int itemIndex; + + if(!(itemIndex=locateLinkedButton(ctlID)))return; + --itemIndex; + if(mLinkedButtons[itemIndex].referenceCount()-1<=0)mLinkedButtons.remove(itemIndex); + else mLinkedButtons[itemIndex].referenceCount(mLinkedButtons[itemIndex].referenceCount()-1); +} + +int OwnerDraw::locateLinkedButton(int ctlID) +{ + size_t size((int)mLinkedButtons.size()); + + for(int i=0;i +#include +#include +#include +#include + +OwnerDraw::OwnerDraw() +: mhLibrary(0) +{ + String dllPathFileName; + + dllPathFileName.reserve(String::MaxString); + ::GetWindowsDirectory(dllPathFileName,String::MaxString-1); +#if defined(__FLAT__) + dllPathFileName+="\\RESLIB32.DLL"; +#else + dllPathFileName+="\\RESLIB16.DLL"; +#endif + mhLibrary=::LoadLibrary(dllPathFileName); + if((UINT)mhLibrary<32) + ::MessageBox(NULL,(LPSTR)"Could not load resource library!",(LPSTR)"RESOURCE ERROR",MB_ICONSTOP|MB_APPLMODAL); + return; +} + +OwnerDraw::~OwnerDraw() +{ + if(0!=mhLibrary)::FreeLibrary(mhLibrary); +} + +int OwnerDraw::associate(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,FocusItem focusItem) +{ + int itemIndex; + + if(!(itemIndex=locateLinkedButton(ctlID)))mLinkedButtons.insert(&LinkedButton(ctlID,focusUp,noFocusUp,focusDown,mhLibrary,(LinkedButton::FocusItem)focusItem)); + else + { + itemIndex--; + mLinkedButtons[itemIndex].referenceCount(mLinkedButtons[itemIndex].referenceCount()+1); + } + return TRUE; +} + +int OwnerDraw::handleOwnerButton(int ctlID,LPARAM lParam) +{ + int itemIndex; + LPDRAWITEMSTRUCT lpControlData((LPDRAWITEMSTRUCT)lParam); + + if(!(itemIndex=locateLinkedButton(ctlID)))return FALSE; + return mLinkedButtons[--itemIndex].drawButton(lpControlData); +} + +void OwnerDraw::freeButton(int ctlID) +{ + int itemIndex; + + if(!(itemIndex=locateLinkedButton(ctlID)))return; + --itemIndex; + if(mLinkedButtons[itemIndex].referenceCount()-1<=0)mLinkedButtons.remove(itemIndex); + else mLinkedButtons[itemIndex].referenceCount(mLinkedButtons[itemIndex].referenceCount()-1); +} + +int OwnerDraw::locateLinkedButton(int ctlID) +{ + size_t size((int)mLinkedButtons.size()); + + for(int i=0;i +#include +#include +#include +#include + +class OwnerDraw +{ +public: + enum FocusItem{FOCUS,NOFOCUS}; + OwnerDraw(); + ~OwnerDraw(); + HINSTANCE getHandle(void)const; + int associate(int ctlID,String &focusUp,String &noFocusUp,String &focusDown,FocusItem focusItem); + int handleOwnerButton(int ctlID,LPARAM lParam); + void freeButton(int ctlID); + int associate(int ctlID,String &bitmapName); + void drawBitmap(int ctlID,HWND hWnd,RECT locationRect); + void drawBitmap(int ctlID); + void freeBitmap(int ctlID); +private: + int locateLinkedButton(int ctlID); + int locateLinkedBitmap(int ctlID); + + HINSTANCE mhLibrary; + Block mLinkedButtons; + Block mLinkedBitmaps; +}; + +inline +HINSTANCE OwnerDraw::getHandle(void)const +{ + return mhLibrary; +} +#endif diff --git a/mdiwin/PALTDLG.CPP b/mdiwin/PALTDLG.CPP new file mode 100644 index 0000000..09589dc --- /dev/null +++ b/mdiwin/PALTDLG.CPP @@ -0,0 +1,168 @@ +#include +#include +#include +#include +#include +#include + +PaletteDialog::PaletteDialog(HWND hParent,HPALETTE hPalette) +: mhParent(hParent), mhPalette(hPalette) +{ + PALETTEENTRY lpPaletteEntry[256]; + mNumColors=::GetPaletteEntries(mhPalette,0,256,(PALETTEENTRY FAR *)&lpPaletteEntry); +} + +PaletteDialog::~PaletteDialog() +{ +} + +void PaletteDialog::showPalette(void) +{ + HINSTANCE hInstance; + +#if defined (__FLAT__) + hInstance=(HINSTANCE)::GetWindowLong(mhParent,GWL_HINSTANCE); +#else + hInstance=(HINSTANCE)::GetWindowWord(mhParent,GWW_HINSTANCE); +#endif + ::DialogBoxParam(hInstance,(LPSTR)"Palette",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); +} + +int PaletteDialog::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,Main::processInstance()), + String(STRING_BITMAPOKNOFUP,Main::processInstance()), + String(STRING_BITMAPOKFOCUSDN,Main::processInstance()), + OwnerDraw::NOFOCUS); + mhGroupWindow=::GetDlgItem(GetHandle(),PALETTE_COLORS); + setWindowSize(); + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + break; + case PALETTE_COLORS : + if(ODA_DRAWENTIRE==((LPDRAWITEMSTRUCT)lParam)->itemAction) + drawPaletteColors(); + break; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDOK : + Main::smhBitmap.freeButton(IDOK); + ::EndDialog(GetHandle(),TRUE); + return TRUE; + } + } + return FALSE; +} + +void PaletteDialog::drawPaletteColors(void)const +{ + HDC hDC; + HBRUSH hBrush; + HBRUSH hOldBrush; + HPALETTE hOldPalette; + HPEN hOldPen; + RECT winRect; + short xStart=1; + short yStart=1; + + ::GetClientRect(mhGroupWindow,(RECT FAR *)&winRect); + hDC=::GetDC(mhGroupWindow); + hOldPalette=::SelectPalette(hDC,mhPalette,FALSE); + ::RealizePalette(hDC); + hOldPen=(HPEN)::SelectObject(hDC,::GetStockObject(BLACK_PEN)); + for(int i=0;i=winRect.right) + { + if(yStart+DELTAY>winRect.bottom)break; + xStart=1; + yStart=(yStart+DELTAY); + } + } + ::SelectObject(hDC,hOldPen); + ::SelectPalette(hDC,hOldPalette,FALSE); + ::ReleaseDC(mhGroupWindow,hDC); + return; +} + +void PaletteDialog::conformWindow(int heightRegion)const +{ + RECT winRect; + RECT grpRect; + UINT yRelative; + WORD xLen; + WORD yLen; + + ::GetClientRect(mhGroupWindow,(RECT FAR *)&grpRect); + heightRegion=grpRect.bottom-heightRegion; + ::GetWindowRect(GetHandle(),(RECT FAR *)&winRect); + ::GetWindowRect(mhGroupWindow,(RECT FAR *)&grpRect); + yRelative=winRect.bottom-grpRect.bottom; + grpRect.bottom-=heightRegion; + winRect.bottom=grpRect.bottom+yRelative; + + makeClientRect(grpRect); + xLen=grpRect.right-grpRect.left; + yLen=grpRect.bottom-grpRect.top; + ::MoveWindow(mhGroupWindow,grpRect.left,grpRect.top,xLen,yLen,TRUE); + xLen=winRect.right-winRect.left; + yLen=winRect.bottom-winRect.top; + ::MoveWindow(GetHandle(),winRect.left,winRect.top,xLen,yLen,TRUE); + return; +} + +void PaletteDialog::makeClientRect(RECT &screenRect)const +{ + POINT pt; + + pt.x=screenRect.left; + pt.y=screenRect.top; + ::ScreenToClient(GetHandle(),(POINT FAR *)&pt); + screenRect.left=pt.x; + screenRect.top=pt.y; + pt.x=screenRect.right; + pt.y=screenRect.bottom; + ::ScreenToClient(GetHandle(),(POINT FAR *)&pt); + screenRect.right=pt.x; + screenRect.bottom=pt.y; + return; +} + +void PaletteDialog::setWindowSize(void)const +{ + RECT winRect; + short xStart=1; + short yStart=1; + + ::GetClientRect(mhGroupWindow,(RECT FAR *)&winRect); + for(int i=0;i=winRect.right) + { + if(yStart+DELTAY>winRect.bottom)break; + xStart=1; + yStart=(yStart+DELTAY); + } + } + conformWindow(yStart+DELTAY); + return; +} + \ No newline at end of file diff --git a/mdiwin/PALTDLG.HPP b/mdiwin/PALTDLG.HPP new file mode 100644 index 0000000..2128f8b --- /dev/null +++ b/mdiwin/PALTDLG.HPP @@ -0,0 +1,27 @@ +#ifndef _PALETTEDIALOG_HPP_ +#define _PALETTEDIALOG_HPP_ +#include + +class PaletteDialog : public DWindow +{ +public: + PaletteDialog(HWND hParent,HPALETTE hPalette); + ~PaletteDialog(); + void showPalette(void); +private: + enum {DELTAX=10,DELTAY=10}; + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void conformWindow(int heightRegion)const; + void drawPaletteColors(void)const; + void makeClientRect(RECT &screenRect)const; + void setWindowSize(void)const; + void dumpPalette(void)const; + + HWND mhParent; + HWND mhGroupWindow; + HPALETTE mhPalette; + WORD mNumColors; +}; +#endif + + \ No newline at end of file diff --git a/mdiwin/POINT.HPP b/mdiwin/POINT.HPP new file mode 100644 index 0000000..c8cfead --- /dev/null +++ b/mdiwin/POINT.HPP @@ -0,0 +1,95 @@ +#ifndef _POINT_HPP_ +#define _POINT_HPP_ +#include +#include + +class Point : public tagPOINT +{ +public: + Point(void); + Point(int x,int y); + ~Point(); + WORD operator==(const Point &somePoint)const; + WORD operator<(const Point &somePoint)const; + Point operator=(const Point &somePoint); + void setPoint(int x,int y); + void xPoint(int newx); + void yPoint(int newy); + int xPoint(void)const; + int yPoint(void)const; +private: +}; + +inline +Point::Point(void) +{ + POINT::x=0; + POINT::y=0; +} + +inline +Point::Point(int x,int y) +{ + POINT::x=x; + POINT::y=y; +} + +inline +Point::~Point() +{ +} + +inline +Point Point::operator=(const Point &somePoint) +{ + POINT::x=somePoint.x; + POINT::y=somePoint.y; + return *this; +} + +inline +void Point::xPoint(int newx) +{ + POINT::x=newx; +} + +inline +void Point::yPoint(int newy) +{ + POINT::y=newy; +} + +inline +int Point::xPoint(void)const +{ + return POINT::x; +} + +inline +int Point::yPoint(void)const +{ + return POINT::y; +} + +inline +void Point::setPoint(int x,int y) +{ + POINT::x=x; + POINT::y=y; +} + +inline +WORD Point::operator==(const Point &somePoint)const +{ + return (POINT::x==somePoint.x && + POINT::y==somePoint.y); +} + +inline +WORD Point::operator<(const Point &somePoint)const +{ + int thisDistance(int(::sqrt(((float)POINT::x*(float)POINT::x)+((float)POINT::y*(float)POINT::y)))); + int someDistance(int(::sqrt(((float)somePoint.x*(float)somePoint.x)+((float)somePoint.y*(float)somePoint.y)))); + return (thisDistance + +PolyPoint::PolyPoint(const PolyPoint &somePolyPoint) +{ + for(int i=0;i + +class PolyPoint +{ +public: + enum {MaxPoint=4}; + PolyPoint(void); + PolyPoint(const PolyPoint &somePolyPoint); + ~PolyPoint(); + Point &operator[](unsigned point); +private: + Point mPolyPoint[MaxPoint]; +}; + +inline +PolyPoint::PolyPoint(void) +{ +} + +inline +PolyPoint::~PolyPoint() +{ +} + +inline +Point &PolyPoint::operator[](unsigned point) +{ + if(point>=MaxPoint)return mPolyPoint[MaxPoint-1]; + return mPolyPoint[point]; +} +#endif \ No newline at end of file diff --git a/mdiwin/PROCESS.CPP b/mdiwin/PROCESS.CPP new file mode 100644 index 0000000..98e3a31 --- /dev/null +++ b/mdiwin/PROCESS.CPP @@ -0,0 +1,494 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +Process *Process::smCurrInstance=0; + +Process::Process(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height) +: mIsConstructed(FALSE), mhPalette(hPalette), mhpImage(hpImage), mWidth(width), + mHeight(height), mCurrentSelection(FALSE), mIsInThread(TRUE) +{ + if(smCurrInstance)return; + smCurrInstance=this; + mIsConstructed=TRUE; +} + +Process::~Process() +{ +} + +WORD Process::showProcess(HWND hParent,char *imageName) +{ + WORD retCode; + DLGPROC lpfnDlgProc; + HINSTANCE hInstance; + + if(!mIsConstructed)return FALSE; + ::strcpy(mImageName,imageName); + buildMatrices(); +#if defined(__FLAT__) + hInstance=(HINSTANCE)::GetWindowLong(hParent,GWL_HINSTANCE); +#else + hInstance=(HINSTANCE)::GetWindowWord(hParent,GWW_HINSTANCE); +#endif + lpfnDlgProc=(DLGPROC)MakeProcInstance((FARPROC)ProcessDlgProc,hInstance); + retCode=DialogBox(hInstance,"Processing",hParent,lpfnDlgProc); + FreeProcInstance((FARPROC)lpfnDlgProc); + smCurrInstance=0; + if(!retCode)return FALSE; + switch(mCurrentSelection) + { + case IP_HIGHPASS : + { + Average averageImage(mImageName,mhPalette,mhpImage,mWidth,mHeight,&mIsInThread); + averageImage.processImage(mAveragingMatrixUse,Average::RangeClipping); + } + return TRUE; + case IP_LOWPASS : + case IP_AVERAGING : + { + Average averageImage(mImageName,mhPalette,mhpImage,mWidth,mHeight,&mIsInThread); + averageImage.processImage(mAveragingMatrixUse,Average::Normalization); + } + return TRUE; + case IP_SOBEL : + break; + case IP_SMOOTHED : + break; + case IP_LAPLACE : + break; + case IP_ISOTROPIC : + break; + case IP_STOCHASTIC : + break; + } + return FALSE; +} + +int FAR PASCAL Process::ProcessDlgProc(HWND hWnd,WORD message,WPARAM wParam,LPARAM lParam) +{ + if(WM_INITDIALOG==message)smCurrInstance->SetHandle(hWnd); + return smCurrInstance->ProcessProc(message,wParam,lParam); +} + +void Process::buildMatrices(void) +{ + mAveragingMatrixOne.insert(&Integer(1)); + mAveragingMatrixOne.insert(&Integer(1)); + mAveragingMatrixOne.insert(&Integer(1)); + mAveragingMatrixOne.insert(&Integer(1)); + mAveragingMatrixOne.insert(&Integer(0)); + mAveragingMatrixOne.insert(&Integer(1)); + mAveragingMatrixOne.insert(&Integer(1)); + mAveragingMatrixOne.insert(&Integer(1)); + mAveragingMatrixOne.insert(&Integer(1)); + + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + mAveragingMatrixTwo.insert(&Integer(1)); + + mAveragingMatrixThree.insert(&Integer(1)); + mAveragingMatrixThree.insert(&Integer(1)); + mAveragingMatrixThree.insert(&Integer(1)); + mAveragingMatrixThree.insert(&Integer(1)); + mAveragingMatrixThree.insert(&Integer(4)); + mAveragingMatrixThree.insert(&Integer(1)); + mAveragingMatrixThree.insert(&Integer(1)); + mAveragingMatrixThree.insert(&Integer(1)); + mAveragingMatrixThree.insert(&Integer(1)); + + mAveragingMatrixFour.insert(&Integer(1)); + mAveragingMatrixFour.insert(&Integer(1)); + mAveragingMatrixFour.insert(&Integer(1)); + mAveragingMatrixFour.insert(&Integer(1)); + mAveragingMatrixFour.insert(&Integer(8)); + mAveragingMatrixFour.insert(&Integer(1)); + mAveragingMatrixFour.insert(&Integer(1)); + mAveragingMatrixFour.insert(&Integer(1)); + mAveragingMatrixFour.insert(&Integer(1)); + + mLowPassMatrix.insert(&Integer(1)); + mLowPassMatrix.insert(&Integer(2)); + mLowPassMatrix.insert(&Integer(1)); + mLowPassMatrix.insert(&Integer(2)); + mLowPassMatrix.insert(&Integer(4)); + mLowPassMatrix.insert(&Integer(2)); + mLowPassMatrix.insert(&Integer(1)); + mLowPassMatrix.insert(&Integer(2)); + mLowPassMatrix.insert(&Integer(1)); + + mHighPassMatrixOne.insert(&Integer(-1)); + mHighPassMatrixOne.insert(&Integer(-2)); + mHighPassMatrixOne.insert(&Integer(-1)); + mHighPassMatrixOne.insert(&Integer(-2)); + mHighPassMatrixOne.insert(&Integer(12)); + mHighPassMatrixOne.insert(&Integer(-2)); + mHighPassMatrixOne.insert(&Integer(-1)); + mHighPassMatrixOne.insert(&Integer(-2)); + mHighPassMatrixOne.insert(&Integer(-1)); + + mHighPassMatrixTwo.insert(&Integer(-1)); + mHighPassMatrixTwo.insert(&Integer(-2)); + mHighPassMatrixTwo.insert(&Integer(-1)); + mHighPassMatrixTwo.insert(&Integer(-2)); + mHighPassMatrixTwo.insert(&Integer(16)); + mHighPassMatrixTwo.insert(&Integer(-2)); + mHighPassMatrixTwo.insert(&Integer(-1)); + mHighPassMatrixTwo.insert(&Integer(-2)); + mHighPassMatrixTwo.insert(&Integer(-1)); + + mHighPassMatrixThree.insert(&Integer(-1)); + mHighPassMatrixThree.insert(&Integer(-3)); + mHighPassMatrixThree.insert(&Integer(-1)); + mHighPassMatrixThree.insert(&Integer(-3)); + mHighPassMatrixThree.insert(&Integer(16)); + mHighPassMatrixThree.insert(&Integer(-3)); + mHighPassMatrixThree.insert(&Integer(-1)); + mHighPassMatrixThree.insert(&Integer(-3)); + mHighPassMatrixThree.insert(&Integer(-1)); + + mHighPassMatrixFour.insert(&Integer(-2)); + mHighPassMatrixFour.insert(&Integer(-3)); + mHighPassMatrixFour.insert(&Integer(-2)); + mHighPassMatrixFour.insert(&Integer(-3)); + mHighPassMatrixFour.insert(&Integer(20)); + mHighPassMatrixFour.insert(&Integer(-3)); + mHighPassMatrixFour.insert(&Integer(-2)); + mHighPassMatrixFour.insert(&Integer(-3)); + mHighPassMatrixFour.insert(&Integer(-2)); +} + +int Process::ProcessProc(WORD message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,Main::processInstance()), + String(STRING_BITMAPOKNOFUP,Main::processInstance()), + String(STRING_BITMAPOKFOCUSDN,Main::processInstance()), + OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,Main::processInstance()), + String(STRING_BITMAPCANOFUP,Main::processInstance()), + String(STRING_BITMAPCAFOCUSDN,Main::processInstance()), + OwnerDraw::NOFOCUS); + ::SendDlgItemMessage(GetHandle(),IP_AVERAGING,BM_SETCHECK,TRUE,0L); + setMatrix(mAveragingMatrixOne); + mCurrentAveragingMatrix=0; + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + return TRUE; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + return TRUE; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IP_AVERAGING : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_AVERAGING,BM_GETCHECK,0,0L); + if(!checkState) + { + uncheckControls(); + mCurrentAveragingMatrix=0; + setMatrix(mAveragingMatrixOne); + ::SendDlgItemMessage(GetHandle(),IP_AVERAGING,BM_SETCHECK,TRUE,0L); + } + else + { + if(++mCurrentAveragingMatrix>GreatestAveragingMatrixIndex) + mCurrentAveragingMatrix=0; + switch(mCurrentAveragingMatrix) + { + case 0 : + setMatrix(mAveragingMatrixOne); + break; + case 1 : + setMatrix(mAveragingMatrixTwo); + break; + case 2 : + setMatrix(mAveragingMatrixThree); + break; + case 3 : + setMatrix(mAveragingMatrixFour); + break; + } + } + } + return TRUE; + case IP_LOWPASS : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_LOWPASS,BM_GETCHECK,0,0L); + if(!checkState) + { + uncheckControls(); + setMatrix(mLowPassMatrix); + ::SendDlgItemMessage(GetHandle(),IP_LOWPASS,BM_SETCHECK,TRUE,0L); + } + } + return TRUE; + case IP_HIGHPASS : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_HIGHPASS,BM_GETCHECK,0,0L); + if(!checkState) + { + uncheckControls(); + mCurrentHighPassMatrix=0; + setMatrix(mHighPassMatrixOne); + ::SendDlgItemMessage(GetHandle(),IP_HIGHPASS,BM_SETCHECK,TRUE,0L); + } + else + { + if(++mCurrentHighPassMatrix>GreatestHighPassMatrixIndex) + mCurrentHighPassMatrix=0; + switch(mCurrentHighPassMatrix) + { + case 0 : + setMatrix(mHighPassMatrixOne); + break; + case 1 : + setMatrix(mHighPassMatrixTwo); + break; + case 2 : + setMatrix(mHighPassMatrixThree); + break; + case 3 : + setMatrix(mHighPassMatrixFour); + break; + } + } + } + return TRUE; + case IP_SOBEL : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_SOBEL,BM_GETCHECK,0,0L); + if(!checkState)uncheckControls(); + ::SendDlgItemMessage(GetHandle(),IP_SOBEL,BM_SETCHECK,!checkState,0L); + } + return TRUE; + case IP_SMOOTHED : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_SMOOTHED,BM_GETCHECK,0,0L); + if(!checkState)uncheckControls(); + ::SendDlgItemMessage(GetHandle(),IP_SMOOTHED,BM_SETCHECK,!checkState,0L); + } + return TRUE; + case IP_LAPLACE : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_LAPLACE,BM_GETCHECK,0,0L); + if(!checkState)uncheckControls(); + ::SendDlgItemMessage(GetHandle(),IP_LAPLACE,BM_SETCHECK,!checkState,0L); + } + return TRUE; + case IP_ISOTROPIC : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_ISOTROPIC,BM_GETCHECK,0,0L); + if(!checkState)uncheckControls(); + ::SendDlgItemMessage(GetHandle(),IP_ISOTROPIC,BM_SETCHECK,!checkState,0L); + } + return TRUE; + case IP_STOCHASTIC : + { + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_STOCHASTIC,BM_GETCHECK,0,0L); + if(!checkState)uncheckControls(); + ::SendDlgItemMessage(GetHandle(),IP_STOCHASTIC,BM_SETCHECK,!checkState,0L); + } + return TRUE; + case IDOK : + mCurrentSelection=IP_AVERAGING; + if(0==(mCurrentSelection=activeControl()))return FALSE; + processUserSelection(); + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(mhWnd,TRUE); + smCurrInstance=0; + return TRUE; + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(mhWnd,FALSE); + smCurrInstance=0; + return TRUE; + } + } + return FALSE; +} + +void Process::uncheckControls(void)const +{ + LRESULT checkState; + + checkState=::SendDlgItemMessage(GetHandle(),IP_AVERAGING,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_AVERAGING,BM_SETCHECK,FALSE,0L); + return; + } + checkState=::SendDlgItemMessage(GetHandle(),IP_LOWPASS,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_LOWPASS,BM_SETCHECK,FALSE,0L); + return; + } + checkState=::SendDlgItemMessage(GetHandle(),IP_HIGHPASS,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_HIGHPASS,BM_SETCHECK,FALSE,0L); + return; + } + checkState=::SendDlgItemMessage(GetHandle(),IP_SOBEL,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_SOBEL,BM_SETCHECK,FALSE,0L); + return; + } + checkState=::SendDlgItemMessage(GetHandle(),IP_SMOOTHED,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_SMOOTHED,BM_SETCHECK,FALSE,0L); + return; + } + checkState=::SendDlgItemMessage(GetHandle(),IP_LAPLACE,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_LAPLACE,BM_SETCHECK,FALSE,0L); + return; + } + checkState=::SendDlgItemMessage(GetHandle(),IP_ISOTROPIC,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_ISOTROPIC,BM_SETCHECK,FALSE,0L); + return; + } + checkState=::SendDlgItemMessage(GetHandle(),IP_STOCHASTIC,BM_GETCHECK,FALSE,0L); + if(checkState) + { + ::SendDlgItemMessage(GetHandle(),IP_STOCHASTIC,BM_SETCHECK,FALSE,0L); + return; + } +} + +void Process::setMatrix(Block &matrix) +{ + char Buffer[10]; + + ::sprintf(Buffer,"%d",(int)matrix[0]); + ::SetDlgItemText(GetHandle(),IP_33R1C1,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[1]); + ::SetDlgItemText(GetHandle(),IP_33R1C2,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[2]); + ::SetDlgItemText(GetHandle(),IP_33R1C3,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[3]); + ::SetDlgItemText(GetHandle(),IP_33R2C1,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[4]); + ::SetDlgItemText(GetHandle(),IP_33R2C2,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[5]); + ::SetDlgItemText(GetHandle(),IP_33R2C3,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[6]); + ::SetDlgItemText(GetHandle(),IP_33R3C1,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[7]); + ::SetDlgItemText(GetHandle(),IP_33R3C2,(LPSTR)Buffer); + ::sprintf(Buffer,"%d",(int)matrix[8]); + ::SetDlgItemText(GetHandle(),IP_33R3C3,(LPSTR)Buffer); +} + +WORD Process::activeControl(void)const +{ + LRESULT activeControl; + + activeControl=::SendDlgItemMessage(GetHandle(),IP_AVERAGING,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_AVERAGING; + activeControl=::SendDlgItemMessage(GetHandle(),IP_LOWPASS,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_LOWPASS; + activeControl=::SendDlgItemMessage(GetHandle(),IP_HIGHPASS,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_HIGHPASS; + activeControl=::SendDlgItemMessage(GetHandle(),IP_SOBEL,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_SOBEL; + activeControl=::SendDlgItemMessage(GetHandle(),IP_SMOOTHED,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_SMOOTHED; + activeControl=::SendDlgItemMessage(GetHandle(),IP_LAPLACE,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_LAPLACE; + activeControl=::SendDlgItemMessage(GetHandle(),IP_ISOTROPIC,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_ISOTROPIC; + activeControl=::SendDlgItemMessage(GetHandle(),IP_STOCHASTIC,BM_GETCHECK,FALSE,0L); + if(activeControl)return IP_STOCHASTIC; + return 0L; +} + + +void Process::processUserSelection(void) +{ + char buffer[10]; + + switch(mCurrentSelection) + { + case IP_AVERAGING : + case IP_LOWPASS : + case IP_HIGHPASS : + ::GetDlgItemText(GetHandle(),IP_33R1C1,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R1C2,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R1C3,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R2C1,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R2C2,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R2C3,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R3C1,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R3C2,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + ::GetDlgItemText(GetHandle(),IP_33R3C3,(LPSTR)buffer,sizeof(buffer)-1); + mAveragingMatrixUse.insert(&Integer(::atoi(buffer))); + break; + case IP_SOBEL : + break; + case IP_SMOOTHED : + break; + case IP_LAPLACE : + break; + case IP_ISOTROPIC : + break; + case IP_STOCHASTIC : + break; + } +} + \ No newline at end of file diff --git a/mdiwin/PROCESS.HPP b/mdiwin/PROCESS.HPP new file mode 100644 index 0000000..0802ff0 --- /dev/null +++ b/mdiwin/PROCESS.HPP @@ -0,0 +1,75 @@ +#ifndef _PROCESS_HPP_ +#define _PROCESS_HPP_ +#include +#include +#include +#include +#include + +class Process +{ +public: + Process(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height); + ~Process(); + WORD showProcess(HWND hParent,char *imageName); + void cancelThread(); +private: + enum {GreatestHighPassMatrixIndex=3}; + enum {GreatestAveragingMatrixIndex=3}; + enum {MaxImageName=50}; + static Process *smCurrInstance; +// static int FAR PASCAL _export ProcessDlgProc(HWND hWnd,WORD message,WPARAM wParam,LPARAM lParam); + __declspec(dllexport) static int FAR PASCAL ProcessDlgProc(HWND hWnd,WORD message,WPARAM wParam,LPARAM lParam); + int ProcessProc(WORD message,WPARAM wParam,LPARAM lParam); + HWND GetHandle(void)const; + void SetHandle(HWND); + void buildMatrices(void); + void uncheckControls(void)const; + WORD activeControl(void)const; + void setMatrix(Block &matrix); + void processUserSelection(); + + Block mLowPassMatrix; + Block mAveragingMatrixOne; + Block mAveragingMatrixTwo; + Block mAveragingMatrixThree; + Block mAveragingMatrixFour; + Block mHighPassMatrixOne; + Block mHighPassMatrixTwo; + Block mHighPassMatrixThree; + Block mHighPassMatrixFour; + Block mAveragingMatrixUse; + + char mImageName[MaxImageName+1]; + WORD mCurrentAveragingMatrix; + WORD mCurrentHighPassMatrix; + WORD mCurrentSelection; + WORD mIsInThread; + HPALETTE mhPalette; + UHUGE *mhpImage; + WORD mWidth; + WORD mHeight; + WORD mIsConstructed; + HWND mhWnd; + HWND hParent; +}; + +inline +void Process::SetHandle(HWND hWnd) +{ + mhWnd=hWnd; +} + +inline +HWND Process::GetHandle(void)const +{ + return mhWnd; +} + +inline +void Process::cancelThread(void) +{ + mIsInThread=FALSE; +} +#endif + diff --git a/mdiwin/PROFILE.CPP b/mdiwin/PROFILE.CPP new file mode 100644 index 0000000..a3a42b7 --- /dev/null +++ b/mdiwin/PROFILE.CPP @@ -0,0 +1,184 @@ +#include +#include +#include + +Profile::Profile(void) +: mIniFileName(String(STRING_INIFILENAME,Main::processInstance())), + mStringUnset(STRING_UNSET,Main::processInstance()) +{ +} + +Profile::Profile(String &iniFileName) +: mIniFileName(iniFileName), + mStringUnset(STRING_UNSET,Main::processInstance()) +{ +} + +Profile::~Profile() +{ +} + +WORD Profile::verifyInitializationFile(void)const +{ + HFILE hFile; + OFSTRUCT pof; + String iniPathFileName; + + iniPathFileName.reserve(String::MaxString); + if(!::GetWindowsDirectory(iniPathFileName,String::MaxString-1))return FALSE; + iniPathFileName+="\\"; + iniPathFileName+=mIniFileName; + if(-1==(hFile=::OpenFile(iniPathFileName,&pof,OF_READ|OF_EXIST)))return FALSE; + ::_lclose(hFile); + return TRUE; +} + +WORD Profile::verifyDirectory(String &pathDirectoryName) +{ +/* String currentWorkDir; + int resultCode; + + ::getcwd(currentWorkDir,String::MaxString); + resultCode=::chdir(pathDirectoryName); + ::chdir(currentWorkDir); + return !resultCode; */ + return FALSE; +} + +WORD Profile::readProfileString(String §ionString,String &itemString,String &returnString) +{ + String currentDriveString; + + returnString.reserve(String::MaxString); + ::GetPrivateProfileString((LPSTR)sectionString,(LPSTR)itemString,(LPSTR)mStringUnset, + (LPSTR)returnString,String::MaxString,(LPSTR)mIniFileName); + if(!(returnString==mStringUnset)) + { + expandEmbeddedMacro(returnString); + return TRUE; + } + drivePathName(currentDriveString); + currentDriveString+=mIniFileName; + ::GetPrivateProfileString((LPSTR)sectionString,(LPSTR)itemString,(LPSTR)mStringUnset, + (LPSTR)returnString,String::MaxString,(LPSTR)currentDriveString); + if(!(returnString==mStringUnset)) + { + expandEmbeddedMacro(returnString); + return TRUE; + } + return FALSE; +} + +WORD Profile::readProfileBlock(String §ionString,Block §ionBlock) +{ + String tempString; + String itemString; + Block tempBlock; + size_t sectionItems(0); + char *ptr; + + sectionBlock.remove(); + tempString.reserve(String::MaxString); + itemString.reserve(String::MaxString); + if(!readProfileString(sectionString,String((char*)0),tempString))return FALSE; + ptr=(LPSTR)tempString; + while(TRUE) + { + if(!ptr||!*ptr)break; + tempBlock.insert(&String(ptr)); + ptr+=(::strlen(ptr)+1); + } + if(0==(sectionItems=(int)tempBlock.size()))return 0; + for(int i=0;i &itemStrings,Block &textStrings) +{ + WORD blockSize((int)itemStrings.size()); + if(textStrings.size()!=blockSize)return FALSE; + for(int i=0;i4)*(ptr+4)=0; + while(*ptr!='\\'&&*ptr!='/'&&*ptr!=':'&&ptr>=tempString)ptr--; + if(::strlen(++ptr)>12)return FALSE; + pathFileName=ptr; */ + return TRUE; +} + +void Profile::drivePathName(String ¤tDriveString,int appendDirConst) +{ +/* String tempString; + + tempString.reserve(String::MaxString); + currentDriveString.reserve(String::MaxString); + ::sprintf((LPSTR)currentDriveString,"%c:\\",::getdisk()+'A'); + ::getcurdir(::getdisk()+1,(LPSTR)tempString); + currentDriveString+=tempString; + if(appendDirConst)currentDriveString+="\\"; */ +} + +void Profile::expandEmbeddedMacro(String &someString) +{ + String macroSyncChar("$("); + String macroEndChar(")"); + String macroString; + String tempString(someString); + String resultString; + char *ptr; + char *envPtr; + char tempChar; + + ptr=::strstr(tempString,macroSyncChar); + if(!ptr)return; + tempChar=*ptr; + *ptr=0; + resultString=tempString; + *ptr=tempChar; + ptr+=2; + ptr=::strtok(ptr,macroEndChar); + if(!ptr)return; + if(0==(envPtr=::getenv(ptr)))resultString+=mStringUnset; + else resultString+=envPtr; + ptr=::strtok(0,"\0"); + if(ptr)resultString+=ptr; + someString=resultString; +} diff --git a/mdiwin/PROFILE.HPP b/mdiwin/PROFILE.HPP new file mode 100644 index 0000000..838ceb9 --- /dev/null +++ b/mdiwin/PROFILE.HPP @@ -0,0 +1,32 @@ +#ifndef _PROFILE_HPP_ +#define _PROFILE_HPP_ +#include +//#include +#include +#include +#include +#include +#include + +class Profile +{ +public: + Profile(void); + Profile(String &iniFileName); + virtual ~Profile(void); + WORD verifyInitializationFile(void)const; + WORD readProfileString(String §ionString,String &itemString,String &returnString); + WORD readProfileBlock(String §ionString,Block §ionBlock); + WORD writeProfileString(String §ionString,String &itemString,String &textString); + WORD writeProfileBlock(String §ionString,Block &itemStrings,Block &textStrings); + WORD makeFileName(String &pathFileName); + WORD verifyDirectory(String &pathDirectoryName); + void makePathFileName(String &fileNameString); + void drivePathName(String ¤tDriveString,int appendDirConst=TRUE); +private: + void expandEmbeddedMacro(String &someString); + + String mStringUnset; + String mIniFileName; +}; +#endif diff --git a/mdiwin/PWARP.CPP b/mdiwin/PWARP.CPP new file mode 100644 index 0000000..783bcf3 --- /dev/null +++ b/mdiwin/PWARP.CPP @@ -0,0 +1,168 @@ +#include + +PerspectiveWarp::PerspectiveWarp(WORD width,WORD height,UHUGE *hpImageInvert,double wRow,double wCol) +: mWidth(width), mHeight(height),mwRow(wRow), mwCol(wCol), + mhpImageInvert(hpImageInvert), mWarpType(None), + mIsInThread(TRUE) +{ +} + +PerspectiveWarp::PerspectiveWarp(WORD width,WORD height,double wRow,double wCol,Operation colOp,double colIncr,Operation rowOp,double rowIncr,UHUGE *hpImageInvert) +: mWidth(width), mHeight(height), mwRow(wRow), mwCol(wCol), + mColOp(colOp), mColIncr(colIncr), mRowOp(rowOp), mRowIncr(rowIncr), + mhpImageInvert(hpImageInvert), mWarpType(Incremental), + mIsInThread(TRUE) +{ +} + +PerspectiveWarp::~PerspectiveWarp() +{ +} + +HGLOBAL PerspectiveWarp::performPerspectiveWarp(void) +{ + if(Incremental==mWarpType)return incrementalWarp(); + return nonIncrementalWarp(); +} + +HGLOBAL PerspectiveWarp::incrementalWarp(void) +{ + int maxCol, maxRow; + double newRow, newCol, tempColFactor, tempRowFactor; + LONG rowMult, colMult, row, col; + HGLOBAL hGlobal, hGlobalTemp, hGlobalSource; + UHUGE *ptr; + UHUGE *ptrSource; + + maxCol=maxRow=0L; + hGlobalSource=Main::upsideDown(mWidth,mHeight,mhpImageInvert); + ptrSource=(UHUGE*)::GlobalLock(hGlobalSource); + hGlobal=::GlobalAlloc(GMEM_FIXED,(LONG)mHeight*(LONG)mWidth); + ptr=(UHUGE*)::GlobalLock(hGlobal); + Main::hmemset(ptr,0,(LONG)mHeight*(LONG)mWidth); + tempRowFactor=mwRow; + for(row=0;rowmaxRow)maxRow=(int)newRow; + if(newCol>maxCol)maxCol=(int)newCol; + if(Add==mColOp)mwCol+=mColIncr; + else if(Subtract==mColOp)mwCol=(mwCol-mColIncr<0?0:mwCol-mColIncr); + else if(Multiply==mColOp)mwCol*=mColIncr; + else mwCol/=(mColIncr?mColIncr:1); + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + mwCol=tempColFactor; + if(Add==mRowOp)mwRow+=mRowIncr; + else if(Subtract==mRowOp)mwRow=(mwRow-mRowIncr<0?0:mwRow-mRowIncr); + else if(Multiply==mRowOp)mwRow*=mRowIncr; + else mwRow/=(mRowIncr?mRowIncr:1); + } + rowMult=(mHeight/(maxRow?maxRow:1)); + colMult=(mWidth/(maxCol?maxCol:1)); + mwRow=tempRowFactor; + for(row=0;row=(LONG)mWidth*(LONG)mHeight) + continue; + *(ptr+((LONG)newRow*(LONG)mWidth)+(LONG)newCol)= + *(ptrSource+(row*(LONG)mWidth)+col); + if(Add==mColOp)mwCol+=mColIncr; + else if(Subtract==mColOp)mwCol=(mwCol-mColIncr<0?0:mwCol-mColIncr); + else if(Multiply==mColOp)mwCol*=mColIncr; + else mwCol/=(mColIncr?mColIncr:1); + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + mwCol=tempColFactor; + if(Add==mRowOp)mwRow+=mRowIncr; + else if(Subtract==mRowOp)mwRow=(mwRow-mRowIncr<0?0:mwRow-mRowIncr); + else if(Multiply==mRowOp)mwRow*=mRowIncr; + else mwRow/=(mRowIncr?mRowIncr:1); + } + ::GlobalUnlock(hGlobalSource); + ::GlobalFree(hGlobalSource); + hGlobalTemp=Main::upsideDown(mWidth,mHeight,ptr); + ::GlobalUnlock(hGlobal); + ::GlobalFree(hGlobal); + return hGlobalTemp; +} + +HGLOBAL PerspectiveWarp::nonIncrementalWarp(void) +{ + int maxCol, maxRow; + double newRow, newCol; + LONG rowMult, colMult, row, col; + HGLOBAL hGlobal, hGlobalTemp, hGlobalSource; + UHUGE *ptr; + UHUGE *ptrSource; + + maxCol=maxRow=0L; + hGlobalSource=Main::upsideDown(mWidth,mHeight,mhpImageInvert); + ptrSource=(UHUGE*)::GlobalLock(hGlobalSource); + hGlobal=::GlobalAlloc(GMEM_FIXED,(LONG)mHeight*(LONG)mWidth); + ptr=(UHUGE*)::GlobalLock(hGlobal); + Main::hmemset(ptr,0,(LONG)mHeight*(LONG)mWidth); + for(row=0;rowmaxRow)maxRow=(int)newRow; + if(newCol>maxCol)maxCol=(int)newCol; + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + } + rowMult=(mHeight/(maxRow?maxRow:1)); + colMult=(mWidth/(maxCol?maxCol:1)); + for(row=0;row=(LONG)mWidth*(LONG)mHeight) + continue; + *(ptr+((LONG)newRow*(LONG)mWidth)+(LONG)newCol)= + *(ptrSource+(row*(LONG)mWidth)+col); + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + } + ::GlobalUnlock(hGlobalSource); + ::GlobalFree(hGlobalSource); + hGlobalTemp=Main::upsideDown(mWidth,mHeight,ptr); + ::GlobalUnlock(hGlobal); + ::GlobalFree(hGlobal); + return hGlobalTemp; +} + +WORD PerspectiveWarp::yieldTask(void)const +{ + MSG msg; + + while(::PeekMessage((MSG far *)&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + return mIsInThread; +} + +WORD PerspectiveWarp::emergencyCleanup(HGLOBAL hGlobalSource,HGLOBAL hGlobal)const +{ + ::GlobalUnlock(hGlobalSource); + ::GlobalFree(hGlobalSource); + ::GlobalUnlock(hGlobal); + ::GlobalFree(hGlobal); + return FALSE; +} + diff --git a/mdiwin/PWARP.HPP b/mdiwin/PWARP.HPP new file mode 100644 index 0000000..8cbd486 --- /dev/null +++ b/mdiwin/PWARP.HPP @@ -0,0 +1,46 @@ +#ifndef _PERSPECTIVEWARP_HPP_ +#define _PERSPECTIVEWARP_HPP_ +#include + +class PerspectiveWarp +{ +public: + enum Type{Incremental,None}; + enum Operation{Add,Subtract,Multiply,Divide}; + PerspectiveWarp(WORD width,WORD height,UHUGE *hpImageInvert, + double wRow,double wCol); + PerspectiveWarp(WORD width,WORD height, + double wRow,double wCol, + Operation colOp,double colIncr, + Operation rowOp,double rowIncr,UHUGE *hpImageInvert); + ~PerspectiveWarp(); + HGLOBAL performPerspectiveWarp(void); + void cancelThread(void); + WORD isCancelled(void)const; +private: + HGLOBAL incrementalWarp(void); + HGLOBAL nonIncrementalWarp(void); + WORD yieldTask(void)const; + WORD emergencyCleanup(HGLOBAL hGlobalSource,HGLOBAL hGlobal)const; + + double mwRow, mwCol; + double mRowIncr, mColIncr; + Operation mRowOp, mColOp; + WORD mWidth, mHeight; + WORD mIsInThread; + Type mWarpType; + UHUGE *mhpImageInvert; +}; + +inline +void PerspectiveWarp::cancelThread(void) +{ + mIsInThread=FALSE; +} + +inline +WORD PerspectiveWarp::isCancelled(void)const +{ + return !mIsInThread; +} +#endif \ No newline at end of file diff --git a/mdiwin/QSORT.HPP b/mdiwin/QSORT.HPP new file mode 100644 index 0000000..9c7f576 --- /dev/null +++ b/mdiwin/QSORT.HPP @@ -0,0 +1,27 @@ +#ifndef _QUICKSORT_HPP_ +#define _QUICKSORT_HPP_ + +#ifdef _EXPAND_QSORT_TEMPLATES_ +#pragma option -Jgd +#endif + +class SortOptions +{ +public: + enum SortOrder{Ascending,Descending}; +}; + +template +class QuickSort +{ +public: + QuickSort(void); + ~QuickSort(); + void sortItems(T HUGE *lpItemList,long itemCount,SortOptions::SortOrder sortOrder=SortOptions::Ascending); +private: + void quickSort(long left,long right); + void quickSortDescending(long left,long right); + T HUGE *mlpItemList; +}; +#include +#endif diff --git a/mdiwin/QSORT.TPP b/mdiwin/QSORT.TPP new file mode 100644 index 0000000..21230c0 --- /dev/null +++ b/mdiwin/QSORT.TPP @@ -0,0 +1,72 @@ +#ifndef _QUICKSORT_HPP_ +#error QSORT.HPP must precede QSORT.TPP +#endif + +template +QuickSort::QuickSort(void) +: mlpItemList(0) +{ +} + +template +QuickSort::~QuickSort() +{ +} + +template +void QuickSort::sortItems(T HUGE *lpItemList,long itemCount,SortOptions::SortOrder sortOrder) +{ + mlpItemList=lpItemList; + if(SortOptions::Ascending==sortOrder)quickSort(0,itemCount); + else quickSortDescending(0,itemCount); +} + +template +void QuickSort::quickSort(long left,long right) +{ + long tempLeft(left); + long tempRight(right); + T tempItem; + T swapItem; + + tempItem=*((T FAR*)(mlpItemList+((left+right)/2L))); + do{ + while(*(mlpItemList+tempLeft) +void QuickSort::quickSortDescending(long left,long right) +{ + long tempLeft(left); + long tempRight(right); + T tempItem; + T swapItem; + + tempItem=*((T FAR*)(mlpItemList+((left+right)/2L))); + do{ + while(*(mlpItemList+tempLeft)>tempItem)tempLeft++; + while(tempItem>*((T FAR*)(mlpItemList+tempRight)))tempRight--; + if(tempLeft<=tempRight) + { + swapItem=*((T FAR*)(mlpItemList+tempLeft)); + *((T FAR*)(mlpItemList+tempLeft))=*((T FAR*)(mlpItemList+tempRight)); + *((T FAR*)(mlpItemList+tempRight))=swapItem; + tempLeft++; + tempRight--; + } + }while(tempLeft<=tempRight); + if(left +#include + +Resize::Resize(int width,int height, const RECT ©Rect,HGLOBAL hGlobalImage) +: mIsCopyRect(TRUE), mCopyRect(copyRect), mhGlobalImage(hGlobalImage), + mOldWidth(width), mOldHeight(height), mNewWidth((copyRect.right-copyRect.left)+1), + mNewHeight((copyRect.bottom-copyRect.top)+1) +{ +} + +Resize::Resize(int width,int height,int newWidth, int newHeight, HGLOBAL hGlobalImage) +: mIsCopyRect(FALSE), mhGlobalImage(hGlobalImage), mOldWidth(width), + mOldHeight(height), mNewWidth(newWidth), mNewHeight(newHeight) +{ +} + +Resize::~Resize() +{ +} + +HGLOBAL Resize::resizeImage(void) +{ + HGLOBAL hGlobalTemp; + HGLOBAL hGlobalCopy; + HGLOBAL hGlobalRegion; + UHUGE *ptrCopy; + UHUGE *ptrImage; + UHUGE *ptrRegion; + UHUGE *ptrTemp; + int destRow; + int srcRow; + Index i; + + if(!mhGlobalImage)return mhGlobalImage; + if(!mIsCopyRect)::SetRect(&mCopyRect,0,0,mNewWidth-1,mNewHeight-1); + if(mCopyRect.right>=mOldWidth || mCopyRect.bottom>=mOldHeight)return FALSE; + hGlobalCopy=::GlobalAlloc(GMEM_FIXED,(LONG)mOldWidth*(LONG)mOldHeight); + if(!hGlobalCopy)return hGlobalCopy; + ptrCopy=(UHUGE *)::GlobalLock(hGlobalCopy); + ptrImage=(UHUGE *)::GlobalLock(mhGlobalImage); + for(i=0;i +class Resize +{ +public: + Resize(int width,int height, const RECT ©Rect,HGLOBAL hGlobalImage); + Resize(int width,int height,int newWidth,int newHeight,HGLOBAL hGlobalImage); + ~Resize(void); + HGLOBAL resizeImage(void); +private: + typedef long Index; + int mOldWidth; + int mOldHeight; + int mNewWidth; + int mNewHeight; + HGLOBAL mhGlobalImage; + RECT mCopyRect; + WORD mIsCopyRect; +}; +#endif diff --git a/mdiwin/RGB.HPP b/mdiwin/RGB.HPP new file mode 100644 index 0000000..1a44b0b --- /dev/null +++ b/mdiwin/RGB.HPP @@ -0,0 +1,87 @@ +#ifndef _RGB_HPP_ +#define _RGB_HPP_ +#include + +class RGBStruct +{ +public: + RGBStruct(unsigned char red,unsigned char green,unsigned char blue); + RGBStruct(void); + void Red(unsigned char red); + unsigned char Red(void)const; + void Green(unsigned char green); + unsigned char Green(void)const; + void Blue(unsigned char blue); + unsigned char Blue(void)const; + WORD operator==(const RGBStruct &someRGBStruct)const; + void operator=(const RGBStruct &someRGBStruct); +private: + unsigned char mRed; + unsigned char mGreen; + unsigned char mBlue; +}; + +inline +RGBStruct::RGBStruct(unsigned char red,unsigned char green,unsigned char blue) +: mRed(red), mGreen(green), mBlue(blue) +{ +} + +inline +RGBStruct::RGBStruct() +: mRed(0), mGreen(0), mBlue(0) +{ +} + +inline +void RGBStruct::Red(unsigned char red) +{ + mRed=red; +} + +inline +unsigned char RGBStruct::Red(void)const +{ + return mRed; +} + +inline +void RGBStruct::Green(unsigned char green) +{ + mGreen=green; +} + +inline +unsigned char RGBStruct::Green(void)const +{ + return mGreen; +} + +inline +void RGBStruct::Blue(unsigned char blue) +{ + mBlue=blue; +} + +inline +unsigned char RGBStruct::Blue(void)const +{ + return mBlue; +} + +inline +void RGBStruct::operator=(const RGBStruct &someRGBStruct) +{ + mRed=someRGBStruct.mRed; + mGreen=someRGBStruct.mGreen; + mBlue=someRGBStruct.mBlue; +} + +inline +WORD RGBStruct::operator==(const RGBStruct &someRGBStruct)const +{ + return (mRed==someRGBStruct.mRed && + mGreen==someRGBStruct.mGreen && + mBlue==someRGBStruct.mBlue); +} +#endif diff --git a/mdiwin/ROUNDEL2.001 b/mdiwin/ROUNDEL2.001 new file mode 100644 index 0000000..b82e41e Binary files /dev/null and b/mdiwin/ROUNDEL2.001 differ diff --git a/mdiwin/ROUNDEL2.002 b/mdiwin/ROUNDEL2.002 new file mode 100644 index 0000000..dc60099 Binary files /dev/null and b/mdiwin/ROUNDEL2.002 differ diff --git a/mdiwin/ROUNDEL2.003 b/mdiwin/ROUNDEL2.003 new file mode 100644 index 0000000..0a1946c Binary files /dev/null and b/mdiwin/ROUNDEL2.003 differ diff --git a/mdiwin/ROUNDEL2.004 b/mdiwin/ROUNDEL2.004 new file mode 100644 index 0000000..9aa1f6e Binary files /dev/null and b/mdiwin/ROUNDEL2.004 differ diff --git a/mdiwin/ROUNDEL2.005 b/mdiwin/ROUNDEL2.005 new file mode 100644 index 0000000..8a7d6e8 Binary files /dev/null and b/mdiwin/ROUNDEL2.005 differ diff --git a/mdiwin/ROUNDEL2.006 b/mdiwin/ROUNDEL2.006 new file mode 100644 index 0000000..9fa26d6 Binary files /dev/null and b/mdiwin/ROUNDEL2.006 differ diff --git a/mdiwin/ROUNDEL2.007 b/mdiwin/ROUNDEL2.007 new file mode 100644 index 0000000..f1f6d7a Binary files /dev/null and b/mdiwin/ROUNDEL2.007 differ diff --git a/mdiwin/ROUNDEL2.008 b/mdiwin/ROUNDEL2.008 new file mode 100644 index 0000000..cf8e037 Binary files /dev/null and b/mdiwin/ROUNDEL2.008 differ diff --git a/mdiwin/ROUNDEL2.009 b/mdiwin/ROUNDEL2.009 new file mode 100644 index 0000000..71fbc11 Binary files /dev/null and b/mdiwin/ROUNDEL2.009 differ diff --git a/mdiwin/ROUNDEL2.MSH b/mdiwin/ROUNDEL2.MSH new file mode 100644 index 0000000..bbc1f92 Binary files /dev/null and b/mdiwin/ROUNDEL2.MSH differ diff --git a/mdiwin/ROUNDEL2.PRJ b/mdiwin/ROUNDEL2.PRJ new file mode 100644 index 0000000..37472de --- /dev/null +++ b/mdiwin/ROUNDEL2.PRJ @@ -0,0 +1,11 @@ +PRJV1.00 +C:\work\Mdiwin\ROUNDEL2.000 +C:\work\Mdiwin\ROUNDEL2.001 +C:\work\Mdiwin\ROUNDEL2.002 +C:\work\Mdiwin\ROUNDEL2.003 +C:\work\Mdiwin\ROUNDEL2.004 +C:\work\Mdiwin\ROUNDEL2.005 +C:\work\Mdiwin\ROUNDEL2.006 +C:\work\Mdiwin\ROUNDEL2.007 +C:\work\Mdiwin\ROUNDEL2.008 +C:\work\Mdiwin\ROUNDEL2.009 diff --git a/mdiwin/ROUNDEL3.000 b/mdiwin/ROUNDEL3.000 new file mode 100644 index 0000000..ff29550 Binary files /dev/null and b/mdiwin/ROUNDEL3.000 differ diff --git a/mdiwin/ROUNDEL3.001 b/mdiwin/ROUNDEL3.001 new file mode 100644 index 0000000..52a4137 Binary files /dev/null and b/mdiwin/ROUNDEL3.001 differ diff --git a/mdiwin/ROUNDEL3.002 b/mdiwin/ROUNDEL3.002 new file mode 100644 index 0000000..9d39130 Binary files /dev/null and b/mdiwin/ROUNDEL3.002 differ diff --git a/mdiwin/ROUNDEL3.003 b/mdiwin/ROUNDEL3.003 new file mode 100644 index 0000000..d91f1ee Binary files /dev/null and b/mdiwin/ROUNDEL3.003 differ diff --git a/mdiwin/ROUNDEL3.004 b/mdiwin/ROUNDEL3.004 new file mode 100644 index 0000000..bdb8ccb Binary files /dev/null and b/mdiwin/ROUNDEL3.004 differ diff --git a/mdiwin/ROUNDEL3.005 b/mdiwin/ROUNDEL3.005 new file mode 100644 index 0000000..e0b7316 Binary files /dev/null and b/mdiwin/ROUNDEL3.005 differ diff --git a/mdiwin/ROUNDEL3.006 b/mdiwin/ROUNDEL3.006 new file mode 100644 index 0000000..c3bfefc Binary files /dev/null and b/mdiwin/ROUNDEL3.006 differ diff --git a/mdiwin/ROUNDEL3.007 b/mdiwin/ROUNDEL3.007 new file mode 100644 index 0000000..59fcded Binary files /dev/null and b/mdiwin/ROUNDEL3.007 differ diff --git a/mdiwin/ROUNDEL3.008 b/mdiwin/ROUNDEL3.008 new file mode 100644 index 0000000..1d2bc36 Binary files /dev/null and b/mdiwin/ROUNDEL3.008 differ diff --git a/mdiwin/ROUNDEL3.009 b/mdiwin/ROUNDEL3.009 new file mode 100644 index 0000000..14c5c2c Binary files /dev/null and b/mdiwin/ROUNDEL3.009 differ diff --git a/mdiwin/ROUNDEL3.MSH b/mdiwin/ROUNDEL3.MSH new file mode 100644 index 0000000..bbc1f92 Binary files /dev/null and b/mdiwin/ROUNDEL3.MSH differ diff --git a/mdiwin/ROUNDEL3.PRJ b/mdiwin/ROUNDEL3.PRJ new file mode 100644 index 0000000..d7bb8a4 --- /dev/null +++ b/mdiwin/ROUNDEL3.PRJ @@ -0,0 +1,11 @@ +PRJV1.00 +C:\work\Mdiwin\ROUNDEL3.000 +C:\work\Mdiwin\ROUNDEL3.001 +C:\work\Mdiwin\ROUNDEL3.002 +C:\work\Mdiwin\ROUNDEL3.003 +C:\work\Mdiwin\ROUNDEL3.004 +C:\work\Mdiwin\ROUNDEL3.005 +C:\work\Mdiwin\ROUNDEL3.006 +C:\work\Mdiwin\ROUNDEL3.007 +C:\work\Mdiwin\ROUNDEL3.008 +C:\work\Mdiwin\ROUNDEL3.009 diff --git a/mdiwin/SCHEDULE.CPP b/mdiwin/SCHEDULE.CPP new file mode 100644 index 0000000..1bfbf09 --- /dev/null +++ b/mdiwin/SCHEDULE.CPP @@ -0,0 +1,24 @@ +#include + +void Schedule::createSchedule(Block &someSchedule,WORD nFrames) +{ + float dstPercent(0.00); + float srcPercent(1.00); + float incremental(1.00); + + someSchedule.remove(); + if(1==nFrames) + { + someSchedule.insert(&Schedule(srcPercent,dstPercent,Schedule::DefaultCount)); + return; + } + incremental=(100.00/((float)nFrames-1.00))/100.00; + for(int i=0;i +#include +#include + +class Schedule +{ +public: + Schedule(void); + Schedule(float srcWeight,float dstWeight,WORD count); + Schedule(const Schedule &someSchedule); + virtual ~Schedule(); + static void createSchedule(Block &someSchedule,WORD nFrames); + WORD operator==(const Schedule &someSchedule)const; + Schedule &operator=(const Schedule &someSchedule); + float srcWeight(void)const; + void srcWeight(float newSrcWeight); + float dstWeight(void)const; + void dstWeight(float newDstWeight); + WORD count(void)const; + void count(WORD newCount); + WORD isValid(void)const; +private: + enum {DefaultCount=1}; + float mSrcWeight; + float mDstWeight; + WORD mCount; +}; + +inline +Schedule::Schedule(void) +: mSrcWeight(0.00), mDstWeight(0.00), mCount(DefaultCount) +{ +} + +inline +Schedule::Schedule(float srcWeight,float dstWeight,WORD count) +: mSrcWeight(srcWeight), mDstWeight(dstWeight), mCount(count) +{ +} + +inline +Schedule::Schedule(const Schedule &someSchedule) +: mSrcWeight(someSchedule.mSrcWeight), mDstWeight(someSchedule.mDstWeight), + mCount(someSchedule.mCount) +{ +} + +inline +Schedule::~Schedule() +{ +} + +inline +WORD Schedule::operator==(const Schedule &someSchedule)const +{ + return (mCount==someSchedule.mCount&& + mSrcWeight==someSchedule.mSrcWeight&& + mDstWeight==someSchedule.mDstWeight); +} + +inline +Schedule &Schedule::operator=(const Schedule &someSchedule) +{ + mSrcWeight=someSchedule.mSrcWeight; + mDstWeight=someSchedule.mDstWeight; + mCount=someSchedule.mCount; + return *this; +} + +inline +float Schedule::srcWeight(void)const +{ + return mSrcWeight; +} + +inline +void Schedule::srcWeight(float newSrcWeight) +{ + mSrcWeight=newSrcWeight; +} + +inline +float Schedule::dstWeight(void)const +{ + return mDstWeight; +} + +inline +void Schedule::dstWeight(float newDstWeight) +{ + mDstWeight=newDstWeight; +} + +inline +WORD Schedule::count(void)const +{ + return mCount; +} + +inline +void Schedule::count(WORD newCount) +{ + mCount=newCount; +} + +inline +WORD Schedule::isValid(void)const +{ + float result=mSrcWeight+mDstWeight; + return (result==1.00); +} +#endif diff --git a/mdiwin/SEGMENT.BAK b/mdiwin/SEGMENT.BAK new file mode 100644 index 0000000..5683092 --- /dev/null +++ b/mdiwin/SEGMENT.BAK @@ -0,0 +1,74 @@ +#include + +Segment::Segment() +{ +} + +Segment::~Segment() +{ +} + +Segment::Segment(const Point &firstPoint,const Point &secondPoint,WORD vectorIndex) +{ + mFirstPoint=firstPoint; + mSecondPoint=secondPoint; + mVectorIndex=vectorIndex; +} + +Segment::Segment(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +WORD Segment::operator==(const Segment &someSegment)const +{ + return ((mFirstPoint==someSegment.mFirstPoint && + mSecondPoint==someSegment.mSecondPoint)|| + (mFirstPoint==someSegment.mSecondPoint && + mSecondPoint==someSegment.mFirstPoint)); +} + +void Segment::operator=(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +#if 0 +void Segment::drawSegment(HDC hDC,HPEN hPen)const +{ + DWORD currentPosition; + HPEN hOldPen(0); + int saveMode; + + saveMode=::SetROP2(hDC,R2_NOT); + if(hPen)hOldPen=(HPEN)::SelectObject(hDC,hPen); + currentPosition=::GetCurrentPosition(hDC); + ::MoveTo(hDC,mFirstPoint.xPoint(),mFirstPoint.yPoint()); + ::LineTo(hDC,mSecondPoint.xPoint(),mSecondPoint.yPoint()); + ::MoveTo(hDC,LOWORD(currentPosition),HIWORD(currentPosition)); + if(hOldPen)::SelectObject(hDC,hOldPen); + ::SetROP2(hDC,saveMode); +} +#endif + +void Segment::drawSegment(HDC hDC,HPEN hPen)const +{ + Point currentPosition; + HPEN hOldPen(0); + int saveMode; + + saveMode=::SetROP2(hDC,R2_NOT); + if(hPen)hOldPen=(HPEN)::SelectObject(hDC,hPen); + ::GetCurrentPositionEx(hDC,(POINT FAR*)¤tPosition); + ::MoveToEx(hDC,mFirstPoint.xPoint(),mFirstPoint.yPoint(),(POINT FAR*)¤tPosition); + ::LineTo(hDC,mSecondPoint.xPoint(),mSecondPoint.yPoint()); + ::MoveToEx(hDC,currentPosition.xPoint(),currentPosition.yPoint(),(POINT FAR*)&mSecondPoint); + if(hOldPen)::SelectObject(hDC,hOldPen); + ::SetROP2(hDC,saveMode); +} + + \ No newline at end of file diff --git a/mdiwin/SEGMENT.CPP b/mdiwin/SEGMENT.CPP new file mode 100644 index 0000000..5683092 --- /dev/null +++ b/mdiwin/SEGMENT.CPP @@ -0,0 +1,74 @@ +#include + +Segment::Segment() +{ +} + +Segment::~Segment() +{ +} + +Segment::Segment(const Point &firstPoint,const Point &secondPoint,WORD vectorIndex) +{ + mFirstPoint=firstPoint; + mSecondPoint=secondPoint; + mVectorIndex=vectorIndex; +} + +Segment::Segment(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +WORD Segment::operator==(const Segment &someSegment)const +{ + return ((mFirstPoint==someSegment.mFirstPoint && + mSecondPoint==someSegment.mSecondPoint)|| + (mFirstPoint==someSegment.mSecondPoint && + mSecondPoint==someSegment.mFirstPoint)); +} + +void Segment::operator=(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +#if 0 +void Segment::drawSegment(HDC hDC,HPEN hPen)const +{ + DWORD currentPosition; + HPEN hOldPen(0); + int saveMode; + + saveMode=::SetROP2(hDC,R2_NOT); + if(hPen)hOldPen=(HPEN)::SelectObject(hDC,hPen); + currentPosition=::GetCurrentPosition(hDC); + ::MoveTo(hDC,mFirstPoint.xPoint(),mFirstPoint.yPoint()); + ::LineTo(hDC,mSecondPoint.xPoint(),mSecondPoint.yPoint()); + ::MoveTo(hDC,LOWORD(currentPosition),HIWORD(currentPosition)); + if(hOldPen)::SelectObject(hDC,hOldPen); + ::SetROP2(hDC,saveMode); +} +#endif + +void Segment::drawSegment(HDC hDC,HPEN hPen)const +{ + Point currentPosition; + HPEN hOldPen(0); + int saveMode; + + saveMode=::SetROP2(hDC,R2_NOT); + if(hPen)hOldPen=(HPEN)::SelectObject(hDC,hPen); + ::GetCurrentPositionEx(hDC,(POINT FAR*)¤tPosition); + ::MoveToEx(hDC,mFirstPoint.xPoint(),mFirstPoint.yPoint(),(POINT FAR*)¤tPosition); + ::LineTo(hDC,mSecondPoint.xPoint(),mSecondPoint.yPoint()); + ::MoveToEx(hDC,currentPosition.xPoint(),currentPosition.yPoint(),(POINT FAR*)&mSecondPoint); + if(hOldPen)::SelectObject(hDC,hOldPen); + ::SetROP2(hDC,saveMode); +} + + \ No newline at end of file diff --git a/mdiwin/SEGMENT.HPP b/mdiwin/SEGMENT.HPP new file mode 100644 index 0000000..2b5ab22 --- /dev/null +++ b/mdiwin/SEGMENT.HPP @@ -0,0 +1,90 @@ +#ifndef _SEGMENT_HPP_ +#define _SEGMENT_HPP_ +#include +#include +class Segment +{ +public: + Segment(void); + Segment(const Point &firstPoint,const Point &secondPoint,WORD vectorIndex); + Segment(const Segment &someSegment); + WORD operator==(const Segment &someSegment)const; + void operator=(const Segment &someSegment); + void drawSegment(HDC hDC,HPEN hPen=0)const; + WORD vectorIndex(void)const; + WORD xFirst(void)const; + WORD xSecond(void)const; + WORD yFirst(void)const; + WORD ySecond(void)const; + Point firstPoint(void)const; + Point secondPoint(void)const; + Point leadingPoint(void)const; + void firstPoint(const Point &somePoint); + void secondPoint(const Point &somePoint); + ~Segment(void); +private: + Point mFirstPoint; + Point mSecondPoint; + WORD mVectorIndex; +}; + +inline +WORD Segment::xFirst(void)const +{ + return mFirstPoint.xPoint(); +} + +inline +WORD Segment::xSecond(void)const +{ + return mSecondPoint.xPoint(); +} + +inline +WORD Segment::yFirst(void)const +{ + return mFirstPoint.yPoint(); +} + +inline +WORD Segment::ySecond(void)const +{ + return mSecondPoint.yPoint(); +} + +inline +Point Segment::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +Point Segment::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void Segment::firstPoint(const Point &somePoint) +{ + mFirstPoint=somePoint; +} + +inline +void Segment::secondPoint(const Point &somePoint) +{ + mSecondPoint=somePoint; +} + +inline +Point Segment::leadingPoint(void)const +{ + return (mFirstPoint.yPoint() +#include +#include +#include + +HGLOBAL Shear::performShear(WORD &width,WORD &height,double hFraction,double gFraction,UHUGE *lpImage) +{ + POINT workPoint; + HGLOBAL hGlobalImage; + HGLOBAL hGlobalSource; + UHUGE *ptrSource; + UHUGE *ptrImage; + double tempxPoint; + double tempyPoint; + double tempFraction; + + mSourceWidth=width; + mSourceHeight=height; + mxSourceHalf=mSourceWidth/2; + mySourceHalf=mSourceHeight/2; + calculateDimensions(width,height,hFraction,gFraction); + hGlobalSource=Main::upsideDown(width,height,lpImage); + ptrSource=(UHUGE*)::GlobalLock(hGlobalSource); + hGlobalImage=::GlobalAlloc(GMEM_FIXED,(LONG)mDestWidth*(LONG)mDestHeight); + ptrImage=(UHUGE *)::GlobalLock(hGlobalImage); + Main::hmemset(ptrImage,0,(LONG)mDestWidth*(LONG)mDestHeight); + for(int row=0;row +#include +class Shear +{ +public: + Shear(void); + ~Shear(); + HGLOBAL performShear(WORD &width,WORD &height,double hFraction,double gFraction,UHUGE *lpImage); +private: + void calculateDimensions(WORD width,WORD height,double hFactor,double gFactor); + void cartesianPoint(POINT &imagePoint)const; + void imagePoint(POINT &cartesianPoint)const; + void setPoint(int x,int y,POINT &point)const; + WORD mSourceWidth; + WORD mSourceHeight; + WORD mxSourceHalf; + WORD mySourceHalf; + WORD mDestWidth; + WORD mDestHeight; + WORD mxDestHalf; + WORD myDestHalf; +}; + +inline +Shear::Shear(void) +{ +} + +inline +Shear::~Shear() +{ +} + +inline +void Shear::cartesianPoint(POINT &imagePoint)const +{ + imagePoint.x-=mxSourceHalf; + imagePoint.y=mSourceHeight-(mySourceHalf+imagePoint.y)+1; +} + +inline +void Shear::imagePoint(POINT &cartesianPoint)const +{ + double tempyFactor; + cartesianPoint.x+=mxDestHalf; + tempyFactor=(((double)mDestHeight/2.00)-1.00); + cartesianPoint.y=mDestHeight-(cartesianPoint.y+tempyFactor); +} + +inline +void Shear::setPoint(int x,int y,POINT &point)const +{ + point.x=x; + point.y=y; +} +#endif diff --git a/mdiwin/SLIDE.CPP b/mdiwin/SLIDE.CPP new file mode 100644 index 0000000..615dd75 --- /dev/null +++ b/mdiwin/SLIDE.CPP @@ -0,0 +1,209 @@ +#include +#include +#include +#include +#include +#include + +char SlideWindow::szClassName[]="SlideShow"; +char SlideWindow::szMenuName[]=""; +HINSTANCE SlideWindow::smhInstance=0; + +SlideWindow::SlideWindow() +: mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), mpStatusBar(0), + mhSystemMenu(0), mhFrameMenu(0), mhSlideMenu(0), mlpToolBar(0), + mCurrentFrame(0), mToolbarVisibility(TRUE), mIsRunning(TRUE) +{ +} + +SlideWindow::SlideWindow(const SlideWindow &/*someViewWindow*/) +: mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), mpStatusBar(0), + mhSystemMenu(0), mhFrameMenu(0), mhSlideMenu(0), mlpToolBar(0), + mCurrentFrame(0), mToolbarVisibility(TRUE), mIsRunning(TRUE) +{ +} + +SlideWindow::~SlideWindow() +{ + if(mhSlideMenu)::DestroyMenu(mhSlideMenu); + if(!mIsDestroyed&&GetHandle()) + ::SendMessage(mhClientWindow,WM_MDIDESTROY,(WPARAM)GetHandle(),0L); + if(mlpToolBar)delete mlpToolBar; +} + +void SlideWindow::Register(HINSTANCE hInstance) +{ + WNDCLASS wndclass; + + smhInstance=hInstance; + wndclass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndclass.lpfnWndProc =(WNDPROC)MDIWindow::MDIWndProc; + wndclass.cbClsExtra =0; + wndclass.cbWndExtra =sizeof(SlideWindow*); + wndclass.hInstance =hInstance; + wndclass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndclass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndclass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndclass.lpszMenuName =szMenuName; + wndclass.lpszClassName =szClassName; + ::RegisterClass(&wndclass); +} + +void SlideWindow::showWindow(HWND hClientWindow,Block &pathFileNames,BWindow *statusBar,HMENU hFrameMenu) +{ + size_t size((int)pathFileNames.size()); + + mBitmaps.size(size); + waitCursor(TRUE); + for(int i=0;iaddBitmap(String(STRING_LITERALEJECT,Main::processInstance()),WM_COMMAND,MENU_TBEJECT,0L); + mlpToolBar->addBitmap(String(STRING_LITERALPAUSE,Main::processInstance()),WM_COMMAND,MENU_TBPAUSE,0L); + mlpToolBar->addBitmap(String(STRING_LITERALPLAY,Main::processInstance()),WM_COMMAND,MENU_TBPLAY,0L); + mlpToolBar->addBitmap(String(STRING_LITERALTIME,Main::processInstance()),WM_COMMAND,MENU_TBTIME,0L); + mlpToolBar->showWindow(); +} + +void SlideWindow::handleDestroyEvent() +{ + mIsDestroyed=TRUE; + return; +} + +void SlideWindow::handleActivateEvent(WPARAM wParam,LPARAM /*lParam*/) +{ + if(wParam) + { + ::SetTimer(GetHandle(),idTimer,TimeOut,0); + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhSlideMenu,::GetSubMenu(mhSlideMenu,0))); + if(mToolbarVisibility && mlpToolBar && !mlpToolBar->isVisible())mlpToolBar->showWindow(); + else if(!mToolbarVisibility && mlpToolBar && mlpToolBar->isVisible())mlpToolBar->showWindow(FALSE); + ::SendMessage(mhFrameWindow,WM_COMMAND,IDM_INVALIDATEMDIWINDOWS,MAKELPARAM(GetHandle(),0)); + } + else + { + ::KillTimer(GetHandle(),idTimer); + if(mlpToolBar && mlpToolBar->isVisible())mlpToolBar->showWindow(FALSE); + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhFrameMenu,0)); + } + ::DrawMenuBar(mhFrameWindow); + return; +} + +long SlideWindow::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + return FALSE; + case WM_TIMER : + handleTimerEvent(); + return FALSE; + case WM_PAINT : + Paint(); + return FALSE; + case WM_MDIACTIVATE : + handleActivateEvent(wParam,lParam); + return FALSE; + case WM_QUERYENDSESSION : + break; + case WM_DESTROY : + handleDestroyEvent(); + return FALSE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDM_TOOLBAR : + handleToolbarToggle(); + return FALSE; + case MENU_TBEJECT : + ::SendMessage(GetHandle(),WM_CLOSE,0,0L); + return FALSE; + case MENU_TBPAUSE : + mIsRunning=FALSE; + return FALSE; + case MENU_TBPLAY : + mIsRunning=TRUE; + return FALSE; + case MENU_TBTIME : + return FALSE; + default : + break; + } + } + return ::DefMDIChildProc(GetHandle(),message,wParam,lParam); +} + +void SlideWindow::handleToolbarToggle(void) +{ + String showToolbarString(STRING_SHOWTOOLBAR,Main::processInstance()); + String hideToolbarString(STRING_HIDETOOLBAR,Main::processInstance()); + String menuString; + + ::GetMenuString(mhSlideMenu,IDM_TOOLBAR,menuString,String::MaxString,MF_BYCOMMAND); + if(showToolbarString==menuString) + { + ::ModifyMenu(mhSlideMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)hideToolbarString); + mlpToolBar->showWindow(TRUE); + mToolbarVisibility=TRUE; + } + else + { + ::ModifyMenu(mhSlideMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)showToolbarString); + mlpToolBar->showWindow(FALSE); + mToolbarVisibility=FALSE; + } + ::DrawMenuBar(GetHandle()); +} + +void SlideWindow::Paint(void) +{ + PAINTSTRUCT ps; + int isActiveWindow; + ::BeginPaint(GetHandle(),&ps); + isActiveWindow=GetHandle()==(HWND)LOWORD(::SendMessage(mhClientWindow,WM_MDIGETACTIVE,0,0L)); + isActiveWindow=FALSE; + mBitmaps[mCurrentFrame].displayBitmap(GetHandle(),0,isActiveWindow,FALSE); + ::EndPaint(GetHandle(),&ps); +} + +void SlideWindow::handleTimerEvent(void) +{ + if(mIsRunning) + { + int isActiveWindow(GetHandle()==(HWND)LOWORD(::SendMessage(mhClientWindow,WM_MDIGETACTIVE,0,0L))); + isActiveWindow=FALSE; + mBitmaps[mCurrentFrame++].displayBitmap(GetHandle(),0,isActiveWindow,FALSE); + if(mCurrentFrame>=mBitmaps.size())mCurrentFrame=0; + } +} diff --git a/mdiwin/SLIDE.HPP b/mdiwin/SLIDE.HPP new file mode 100644 index 0000000..288f6fe --- /dev/null +++ b/mdiwin/SLIDE.HPP @@ -0,0 +1,77 @@ +#ifndef _SLIDEWINDOW_HPP_ +#define _SLIDEWINDOW_HPP_ +#include +#include +#include +#include +#include + +class SlideWindow : public MDIWindow +{ +public: + SlideWindow(void); + SlideWindow(const SlideWindow &someSlideWindow); + void showWindow(HWND hClientWindow,Block &pathFileNames,BWindow *statusBar,HMENU hFrameMenu); + virtual ~SlideWindow(); + static void Register(HINSTANCE hInstance); + int operator==(const SlideWindow &someSlideWindow)const; + static char far *className(void); + WORD isDestroyed(void)const; + HWND handle(void)const; +private: + enum{idTimer=0x01}; + enum{TimeOut=250}; + void Paint(void); + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + + void handleDestroyEvent(void); + void handleActivateEvent(WPARAM wParam,LPARAM lParam); + void handleTimerEvent(void); + void handleToolbarToggle(void); + void createMDIChildWindow(void); + void createToolBarWindow(void); + + static char szClassName[]; + static char szMenuName[]; + static HINSTANCE smhInstance; + + HWND mhClientWindow; + HWND mhFrameWindow; + WORD mIsDestroyed; + HMENU mhSystemMenu; + HMENU mhFrameMenu; + HMENU mhSlideMenu; + WORD mToolbarVisibility; + WORD mCurrentFrame; + WORD mIsRunning; + Vector mBitmaps; + BWindow *mpStatusBar; + ToolBar *mlpToolBar; +}; + +inline +char far *SlideWindow::className(void) +{ + return szClassName; +} + +inline +int SlideWindow::operator==(const SlideWindow &someSlideWindow)const +{ + return (GetHandle()==someSlideWindow.GetHandle()); +} + +inline +WORD SlideWindow::isDestroyed(void)const +{ + return mIsDestroyed; +} + +inline +HWND SlideWindow::handle(void)const +{ + return GetHandle(); +} +#endif + + \ No newline at end of file diff --git a/mdiwin/SLIDESEL.CPP b/mdiwin/SLIDESEL.CPP new file mode 100644 index 0000000..7058283 --- /dev/null +++ b/mdiwin/SLIDESEL.CPP @@ -0,0 +1,216 @@ +#include +#include +#include +#include +#include +#include + +SlideSelect::SlideSelect(HWND hParent) +: mhParent(hParent) +{ +} + +SlideSelect::~SlideSelect() +{ +} + +WORD SlideSelect::selectSlides(Block &pathFileNames) +{ + HINSTANCE hInstance; + int retCode; + + pathFileNames.remove(); + mPathFileNames.remove(); + +#if defined(__FLAT__) + hInstance=(HINSTANCE)::GetWindowLong(mhParent,GWL_HINSTANCE); +#else + hInstance=(HINSTANCE)::GetWindowWord(mhParent,GWW_HINSTANCE); +#endif + retCode=::DialogBoxParam(hInstance,(LPSTR)"SlideShow",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); + if(retCode)retCode=(int)mPathFileNames.size(); + if(retCode)copyList(pathFileNames); + return retCode; +} + +int SlideSelect::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,Main::processInstance()), + String(STRING_BITMAPOKNOFUP,Main::processInstance()), + String(STRING_BITMAPOKFOCUSDN,Main::processInstance()), + OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,Main::processInstance()), + String(STRING_BITMAPCANOFUP,Main::processInstance()), + String(STRING_BITMAPCAFOCUSDN,Main::processInstance()), + OwnerDraw::NOFOCUS); + ::SendDlgItemMessage(GetHandle(),SS_BITMAP,BM_SETCHECK,TRUE,0L); + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + break; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + break; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case SS_BITMAP : + handleBitmapEvent(); + return FALSE; + case SS_PROJECT : + handleProjectEvent(); + return FALSE; + case SS_LIST : + handleListBoxEvent(lParam); + return FALSE; + case SS_SELECT : + handleSelectEvent(lParam); + return FALSE; + case IDOK : + retrieveItemList(); + freeBitmaps(); + ::EndDialog(GetHandle(),TRUE); + return TRUE; + case IDCANCEL : + freeBitmaps(); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + +void SlideSelect::freeBitmaps(void)const +{ + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + return; +} + +void SlideSelect::copyList(Block &pathFileNames) +{ + size_t listSize((int)mPathFileNames.size()); + + for(int index=0;index> tempString; + if(tempString.isNull())continue; + if(selectedBitmap.isValidBitmap(tempString)) + ::SendDlgItemMessage(GetHandle(),SS_LIST,LB_ADDSTRING,0,(LPARAM)(LPCSTR)tempString); + else errorCount++; + } + waitCursor(FALSE); + ::SendMessage(::GetDlgItem(GetHandle(),SS_LIST),WM_SETREDRAW,TRUE,0L); + if(errorCount) + ::MessageBox(GetHandle(),(LPSTR)errorItemsNotPresent,(LPSTR)"Error loading project",MB_OK); +} \ No newline at end of file diff --git a/mdiwin/SLIDESEL.HPP b/mdiwin/SLIDESEL.HPP new file mode 100644 index 0000000..f9d0950 --- /dev/null +++ b/mdiwin/SLIDESEL.HPP @@ -0,0 +1,30 @@ +#ifndef _SLIDESELECT_HPP_ +#define _SLIDESELECT_HPP_ +#include +#include +#include +#include + +class SlideSelect : public DWindow +{ +public: + SlideSelect(HWND hParent); + virtual ~SlideSelect(); + WORD selectSlides(Block &pathFileNames); +private: + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void handleBitmapEvent(void)const; + void handleProjectEvent(void)const; + void handleSelectEvent(LPARAM lParam); + void handleListBoxEvent(LPARAM lParam)const; + void freeBitmaps(void)const; + void retrieveItemList(void); + void copyList(Block &pathFileNames); + void handleFileSelection(String &pathFileName); + void parseProjectFile(String &pathFileNameString); + + HWND mhParent; + Block mPathFileNames; +}; +#endif + \ No newline at end of file diff --git a/mdiwin/SPACIAL.BAK b/mdiwin/SPACIAL.BAK new file mode 100644 index 0000000..534f1db --- /dev/null +++ b/mdiwin/SPACIAL.BAK @@ -0,0 +1,155 @@ +//#include +#include +#include +#include +#include + +SpacialTransform::SpacialTransform(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height,WORD sizeFactor) +: mSizeFactor(sizeFactor), mSrcWidth(width), mSrcHeight(height), + mInverseFactor(((float)100.00/(float)sizeFactor)*100.00), + mSrcExtent(mSrcWidth*mSrcHeight), mhpImage(hpImage), + mhPalette(hPalette), mIsInThread(TRUE) +{ + loadPaletteEntries(); +} + +SpacialTransform::~SpacialTransform() +{ +} + +HGLOBAL SpacialTransform::resizeImage(void) +{ + HGLOBAL hGlobalTemp; + + DWORD startTime(::GetTickCount()); + DWORD elapsedTime; + String timeBuffer; + + mDstWidth=mSrcWidth*((float)mSizeFactor/100.00); + mDstHeight=mSrcHeight; + mDstExtent=mDstWidth*mDstHeight; + mhGlobal=::GlobalAlloc(GMEM_FIXED,mDstExtent); + if(!mhGlobal)return FALSE; + mhpDestinationImage=(UHUGE *)::GlobalLock(mhGlobal); + processTransform(); + if(!mIsInThread) + { + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + return FALSE; + } + hGlobalTemp=Main::rotateRight(mhpDestinationImage,(WORD)mDstWidth,(WORD)mDstHeight); + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + if(!hGlobalTemp)return FALSE; + mhpImage=(UHUGE *)::GlobalLock(hGlobalTemp); + mSrcWidth=mDstHeight; + mSrcHeight=mDstWidth; + mSrcExtent=mSrcWidth*mSrcHeight; + mDstWidth=mSrcWidth*((float)mSizeFactor/100.00); + mDstHeight=mSrcHeight; + mDstExtent=mDstWidth*mDstHeight; + mhGlobal=::GlobalAlloc(GMEM_FIXED,mDstExtent); + if(!mhGlobal) + { + ::GlobalUnlock(hGlobalTemp); + ::GlobalFree(hGlobalTemp); + return FALSE; + } + mhpDestinationImage=(UHUGE *)::GlobalLock(mhGlobal); + processTransform(); + ::GlobalUnlock(hGlobalTemp); + ::GlobalFree(hGlobalTemp); + hGlobalTemp=Main::rotateLeft(mhpDestinationImage,(WORD)mDstWidth,(WORD)mDstHeight); + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + Main::smlpStatusBar->setText(""); + elapsedTime=(::GetTickCount()-startTime)/1000L; + ::sprintf(timeBuffer,"Total seconds :%ld , Total minutes :%ld", + elapsedTime,elapsedTime/60L); + ::MessageBox(::GetFocus(),(LPSTR)timeBuffer,(LPSTR)"TIME",MB_OK); + return hGlobalTemp; +} + +void SpacialTransform::processTransform(void) +{ + mInSegment=100; + mOutSegment=mInverseFactor; + mNextPixelIndex=-1; + mNextDestinationIndex=0; + mRedAccumulator=mGreenAccumulator=mBlueAccumulator=0L; + if(!nextPixel())return; + while(TRUE) + { + if(mOutSegment<=mInSegment) + { + mRedAccumulator+=((mInSegment*mCurrentRed)+((100L-mInSegment)*mNextRed))*mOutSegment; + mGreenAccumulator+=((mInSegment*mCurrentGreen)+((100L-mInSegment)*mNextGreen))*mOutSegment; + mBlueAccumulator+=((mInSegment*mCurrentBlue)+((100L-mInSegment)*mNextBlue))*mOutSegment; + mInSegment-=mOutSegment; + mOutSegment=mInverseFactor; + mRedAccumulator*=((float)mSizeFactor*.000001); + mGreenAccumulator*=((float)mSizeFactor*.000001); + mBlueAccumulator*=((float)mSizeFactor *.000001); + putPixel(); + mRedAccumulator=mGreenAccumulator=mBlueAccumulator=0L; + } + else + { + mRedAccumulator+=((mInSegment*mCurrentRed)+((100L-mInSegment)*mNextRed))*mInSegment; + mGreenAccumulator+=((mInSegment*mCurrentGreen)+((100L-mInSegment)*mNextGreen))*mInSegment; + mBlueAccumulator+=((mInSegment*mCurrentBlue)+((100L-mInSegment)*mNextBlue))*mInSegment; + mOutSegment-=mInSegment; + mInSegment=100; + if(!nextPixel())break; + } + } + return; +} + +UINT SpacialTransform::nextPixel(void) +{ + UINT paletteIndex; + UINT nextPaletteIndex; + char Buffer[50]; + + if(!mIsInThread)return FALSE; + if(++mNextPixelIndex>=mSrcExtent)return FALSE; + paletteIndex=*(mhpImage+mNextPixelIndex); + if(mNextPixelIndex+1L>=mSrcExtent)nextPaletteIndex=paletteIndex; + else nextPaletteIndex=*(mhpImage+mNextPixelIndex+1L); + mCurrentRed=mPaletteData[paletteIndex].peRed; + mCurrentGreen=mPaletteData[paletteIndex].peGreen; + mCurrentBlue=mPaletteData[paletteIndex].peBlue; + if(paletteIndex==nextPaletteIndex) + { + mNextRed=mCurrentRed; + mNextGreen=mCurrentGreen; + mNextBlue=mCurrentBlue; + } + else + { + mNextRed=mPaletteData[nextPaletteIndex].peRed; + mNextGreen=mPaletteData[nextPaletteIndex].peGreen; + mNextBlue=mPaletteData[nextPaletteIndex].peBlue; + } + if(!(mNextPixelIndex%1000L)) + { + ::sprintf(Buffer,"Processing Line %ld",mNextPixelIndex); + Main::smlpStatusBar->setText(Buffer); + } + return TRUE; +} + +void SpacialTransform::putPixel() +{ + Byte nearestIndex; + if(mNextDestinationIndex>=mDstExtent)return; + if(!mSimpleCache.locateItem(RGBStruct((BYTE)mRedAccumulator,(BYTE)mGreenAccumulator,(BYTE)mBlueAccumulator),nearestIndex)) + { + *(mhpDestinationImage+mNextDestinationIndex)=nearestIndex=::GetNearestPaletteIndex(mhPalette,RGB((BYTE)mRedAccumulator,(BYTE)mGreenAccumulator,(BYTE)mBlueAccumulator)); + mSimpleCache.insertItem(RGBStruct((BYTE)mRedAccumulator,(BYTE)mGreenAccumulator,(BYTE)mBlueAccumulator),nearestIndex); + } + else *(mhpDestinationImage+mNextDestinationIndex)=nearestIndex; + mNextDestinationIndex++; +} diff --git a/mdiwin/SPACIAL.CPP b/mdiwin/SPACIAL.CPP new file mode 100644 index 0000000..534f1db --- /dev/null +++ b/mdiwin/SPACIAL.CPP @@ -0,0 +1,155 @@ +//#include +#include +#include +#include +#include + +SpacialTransform::SpacialTransform(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height,WORD sizeFactor) +: mSizeFactor(sizeFactor), mSrcWidth(width), mSrcHeight(height), + mInverseFactor(((float)100.00/(float)sizeFactor)*100.00), + mSrcExtent(mSrcWidth*mSrcHeight), mhpImage(hpImage), + mhPalette(hPalette), mIsInThread(TRUE) +{ + loadPaletteEntries(); +} + +SpacialTransform::~SpacialTransform() +{ +} + +HGLOBAL SpacialTransform::resizeImage(void) +{ + HGLOBAL hGlobalTemp; + + DWORD startTime(::GetTickCount()); + DWORD elapsedTime; + String timeBuffer; + + mDstWidth=mSrcWidth*((float)mSizeFactor/100.00); + mDstHeight=mSrcHeight; + mDstExtent=mDstWidth*mDstHeight; + mhGlobal=::GlobalAlloc(GMEM_FIXED,mDstExtent); + if(!mhGlobal)return FALSE; + mhpDestinationImage=(UHUGE *)::GlobalLock(mhGlobal); + processTransform(); + if(!mIsInThread) + { + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + return FALSE; + } + hGlobalTemp=Main::rotateRight(mhpDestinationImage,(WORD)mDstWidth,(WORD)mDstHeight); + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + if(!hGlobalTemp)return FALSE; + mhpImage=(UHUGE *)::GlobalLock(hGlobalTemp); + mSrcWidth=mDstHeight; + mSrcHeight=mDstWidth; + mSrcExtent=mSrcWidth*mSrcHeight; + mDstWidth=mSrcWidth*((float)mSizeFactor/100.00); + mDstHeight=mSrcHeight; + mDstExtent=mDstWidth*mDstHeight; + mhGlobal=::GlobalAlloc(GMEM_FIXED,mDstExtent); + if(!mhGlobal) + { + ::GlobalUnlock(hGlobalTemp); + ::GlobalFree(hGlobalTemp); + return FALSE; + } + mhpDestinationImage=(UHUGE *)::GlobalLock(mhGlobal); + processTransform(); + ::GlobalUnlock(hGlobalTemp); + ::GlobalFree(hGlobalTemp); + hGlobalTemp=Main::rotateLeft(mhpDestinationImage,(WORD)mDstWidth,(WORD)mDstHeight); + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + Main::smlpStatusBar->setText(""); + elapsedTime=(::GetTickCount()-startTime)/1000L; + ::sprintf(timeBuffer,"Total seconds :%ld , Total minutes :%ld", + elapsedTime,elapsedTime/60L); + ::MessageBox(::GetFocus(),(LPSTR)timeBuffer,(LPSTR)"TIME",MB_OK); + return hGlobalTemp; +} + +void SpacialTransform::processTransform(void) +{ + mInSegment=100; + mOutSegment=mInverseFactor; + mNextPixelIndex=-1; + mNextDestinationIndex=0; + mRedAccumulator=mGreenAccumulator=mBlueAccumulator=0L; + if(!nextPixel())return; + while(TRUE) + { + if(mOutSegment<=mInSegment) + { + mRedAccumulator+=((mInSegment*mCurrentRed)+((100L-mInSegment)*mNextRed))*mOutSegment; + mGreenAccumulator+=((mInSegment*mCurrentGreen)+((100L-mInSegment)*mNextGreen))*mOutSegment; + mBlueAccumulator+=((mInSegment*mCurrentBlue)+((100L-mInSegment)*mNextBlue))*mOutSegment; + mInSegment-=mOutSegment; + mOutSegment=mInverseFactor; + mRedAccumulator*=((float)mSizeFactor*.000001); + mGreenAccumulator*=((float)mSizeFactor*.000001); + mBlueAccumulator*=((float)mSizeFactor *.000001); + putPixel(); + mRedAccumulator=mGreenAccumulator=mBlueAccumulator=0L; + } + else + { + mRedAccumulator+=((mInSegment*mCurrentRed)+((100L-mInSegment)*mNextRed))*mInSegment; + mGreenAccumulator+=((mInSegment*mCurrentGreen)+((100L-mInSegment)*mNextGreen))*mInSegment; + mBlueAccumulator+=((mInSegment*mCurrentBlue)+((100L-mInSegment)*mNextBlue))*mInSegment; + mOutSegment-=mInSegment; + mInSegment=100; + if(!nextPixel())break; + } + } + return; +} + +UINT SpacialTransform::nextPixel(void) +{ + UINT paletteIndex; + UINT nextPaletteIndex; + char Buffer[50]; + + if(!mIsInThread)return FALSE; + if(++mNextPixelIndex>=mSrcExtent)return FALSE; + paletteIndex=*(mhpImage+mNextPixelIndex); + if(mNextPixelIndex+1L>=mSrcExtent)nextPaletteIndex=paletteIndex; + else nextPaletteIndex=*(mhpImage+mNextPixelIndex+1L); + mCurrentRed=mPaletteData[paletteIndex].peRed; + mCurrentGreen=mPaletteData[paletteIndex].peGreen; + mCurrentBlue=mPaletteData[paletteIndex].peBlue; + if(paletteIndex==nextPaletteIndex) + { + mNextRed=mCurrentRed; + mNextGreen=mCurrentGreen; + mNextBlue=mCurrentBlue; + } + else + { + mNextRed=mPaletteData[nextPaletteIndex].peRed; + mNextGreen=mPaletteData[nextPaletteIndex].peGreen; + mNextBlue=mPaletteData[nextPaletteIndex].peBlue; + } + if(!(mNextPixelIndex%1000L)) + { + ::sprintf(Buffer,"Processing Line %ld",mNextPixelIndex); + Main::smlpStatusBar->setText(Buffer); + } + return TRUE; +} + +void SpacialTransform::putPixel() +{ + Byte nearestIndex; + if(mNextDestinationIndex>=mDstExtent)return; + if(!mSimpleCache.locateItem(RGBStruct((BYTE)mRedAccumulator,(BYTE)mGreenAccumulator,(BYTE)mBlueAccumulator),nearestIndex)) + { + *(mhpDestinationImage+mNextDestinationIndex)=nearestIndex=::GetNearestPaletteIndex(mhPalette,RGB((BYTE)mRedAccumulator,(BYTE)mGreenAccumulator,(BYTE)mBlueAccumulator)); + mSimpleCache.insertItem(RGBStruct((BYTE)mRedAccumulator,(BYTE)mGreenAccumulator,(BYTE)mBlueAccumulator),nearestIndex); + } + else *(mhpDestinationImage+mNextDestinationIndex)=nearestIndex; + mNextDestinationIndex++; +} diff --git a/mdiwin/SPACIAL.HPP b/mdiwin/SPACIAL.HPP new file mode 100644 index 0000000..38c7101 --- /dev/null +++ b/mdiwin/SPACIAL.HPP @@ -0,0 +1,73 @@ +#ifndef _SPACIAL_HPP_ +#define _SPACIAL_HPP_ +//#include +#include +//#include +//#include +#include +#include +#include + +class SpacialTransform +{ +public: + SpacialTransform(HPALETTE hPalette,UHUGE *hpImage,WORD width,WORD height,WORD sizeFactor); + virtual ~SpacialTransform(); + HGLOBAL resizeImage(void); + void cancelThread(void); + WORD isCancelled(void)const; +private: + enum {MaxColors=256}; + UINT nextPixel(void); + void putPixel(void); + void loadPaletteEntries(void); + void processTransform(void); + + LONG mRedAccumulator; + LONG mGreenAccumulator; + LONG mBlueAccumulator; + WORD mSizeFactor; + WORD mInverseFactor; + UINT mInSegment; + UINT mOutSegment; + LONG mSrcWidth; + LONG mSrcHeight; + LONG mSrcExtent; + LONG mDstWidth; + LONG mDstHeight; + LONG mDstExtent; + LONG mCurrentRed; + LONG mCurrentGreen; + LONG mCurrentBlue; + LONG mNextRed; + LONG mNextGreen; + LONG mNextBlue; + LONG mNextPixelIndex; + LONG mNextDestinationIndex; + HGLOBAL mhGlobal; + UHUGE *mhpImage; + UHUGE *mhpDestinationImage; + HPALETTE mhPalette; + PALETTEENTRY mPaletteData[MaxColors]; + WORD mIsInThread; + Cache mSimpleCache; +}; + +inline +void SpacialTransform::loadPaletteEntries(void) +{ + ::GetPaletteEntries(mhPalette,0,MaxColors,(PALETTEENTRY FAR *)&mPaletteData); +} + +inline +void SpacialTransform::cancelThread(void) +{ + mIsInThread=FALSE; +} + +inline +WORD SpacialTransform::isCancelled(void)const +{ + return !mIsInThread; +} +#endif diff --git a/mdiwin/STATIC.CPP b/mdiwin/STATIC.CPP new file mode 100644 index 0000000..03956b0 --- /dev/null +++ b/mdiwin/STATIC.CPP @@ -0,0 +1,6 @@ +#include + +void FAR *operator new(size_t /*size*/,int /*n*/,void FAR *lpData) +{ + return lpData; +} diff --git a/mdiwin/STDTMPLA.BAK b/mdiwin/STDTMPLA.BAK new file mode 100644 index 0000000..8f801b8 --- /dev/null +++ b/mdiwin/STDTMPLA.BAK @@ -0,0 +1,21 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef Block b; +typedef Block c; + + +class Foo +{ +public: + typedef enum Params{This=1,That=1,Other}; +private: +}; + \ No newline at end of file diff --git a/mdiwin/STDTMPLA.CPP b/mdiwin/STDTMPLA.CPP new file mode 100644 index 0000000..3e8e48d --- /dev/null +++ b/mdiwin/STDTMPLA.CPP @@ -0,0 +1,13 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef Block b; +typedef Block c; + diff --git a/mdiwin/STDTMPLB.CPP b/mdiwin/STDTMPLB.CPP new file mode 100644 index 0000000..c04c938 --- /dev/null +++ b/mdiwin/STDTMPLB.CPP @@ -0,0 +1,12 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef Block b; +typedef Block c; + \ No newline at end of file diff --git a/mdiwin/STDTMPLC.CPP b/mdiwin/STDTMPLC.CPP new file mode 100644 index 0000000..ccf8c8a --- /dev/null +++ b/mdiwin/STDTMPLC.CPP @@ -0,0 +1,13 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef Block b; + + + \ No newline at end of file diff --git a/mdiwin/STDTMPLD.CPP b/mdiwin/STDTMPLD.CPP new file mode 100644 index 0000000..33062de --- /dev/null +++ b/mdiwin/STDTMPLD.CPP @@ -0,0 +1,13 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef Block b; + + + \ No newline at end of file diff --git a/mdiwin/STDTMPLE.CPP b/mdiwin/STDTMPLE.CPP new file mode 100644 index 0000000..7a63bde --- /dev/null +++ b/mdiwin/STDTMPLE.CPP @@ -0,0 +1,11 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include + +typedef Block a; +typedef Block > b; + + \ No newline at end of file diff --git a/mdiwin/STDTMPLF.CPP b/mdiwin/STDTMPLF.CPP new file mode 100644 index 0000000..dd3b77e --- /dev/null +++ b/mdiwin/STDTMPLF.CPP @@ -0,0 +1,9 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include + +typedef Block a; + \ No newline at end of file diff --git a/mdiwin/STDTMPLG.CPP b/mdiwin/STDTMPLG.CPP new file mode 100644 index 0000000..60992f1 --- /dev/null +++ b/mdiwin/STDTMPLG.CPP @@ -0,0 +1,10 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include + +typedef Block a; + + \ No newline at end of file diff --git a/mdiwin/STDTMPLH.CPP b/mdiwin/STDTMPLH.CPP new file mode 100644 index 0000000..bd79ff4 --- /dev/null +++ b/mdiwin/STDTMPLH.CPP @@ -0,0 +1,7 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include + +typedef Block a; diff --git a/mdiwin/STDTMPLI.CPP b/mdiwin/STDTMPLI.CPP new file mode 100644 index 0000000..574c340 --- /dev/null +++ b/mdiwin/STDTMPLI.CPP @@ -0,0 +1,7 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include + +typedef Block a; diff --git a/mdiwin/STDTMPLJ.CPP b/mdiwin/STDTMPLJ.CPP new file mode 100644 index 0000000..13dff3e --- /dev/null +++ b/mdiwin/STDTMPLJ.CPP @@ -0,0 +1,8 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include + +typedef Block a; diff --git a/mdiwin/STDTMPLK.CPP b/mdiwin/STDTMPLK.CPP new file mode 100644 index 0000000..3dbfe39 --- /dev/null +++ b/mdiwin/STDTMPLK.CPP @@ -0,0 +1,32 @@ +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_GIFDECODER_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Vector a; +typedef Vector b; +typedef Vector c; +typedef Vector d; +typedef Vector e; +typedef Vector f; +typedef Vector g; +typedef Vector h; +typedef Vector i; +typedef Vector j; +typedef GIFDecoder k; +typedef Vector l; + + \ No newline at end of file diff --git a/mdiwin/STDTMPLL.CPP b/mdiwin/STDTMPLL.CPP new file mode 100644 index 0000000..cb3f0d9 --- /dev/null +++ b/mdiwin/STDTMPLL.CPP @@ -0,0 +1,10 @@ +#define _EXPAND_QSORT_TEMPLATES_ +#include +#include +#include +#include +#include + +typedef QuickSort a; +typedef QuickSort b; + diff --git a/mdiwin/STDTMPLM.CPP b/mdiwin/STDTMPLM.CPP new file mode 100644 index 0000000..a3c666f --- /dev/null +++ b/mdiwin/STDTMPLM.CPP @@ -0,0 +1,9 @@ +#define _EXPAND_CACHE_TEMPLATES_ +#include +#include +#include +#include + +typedef Cache a; + + \ No newline at end of file diff --git a/mdiwin/STREAM.CPP b/mdiwin/STREAM.CPP new file mode 100644 index 0000000..c79e04f --- /dev/null +++ b/mdiwin/STREAM.CPP @@ -0,0 +1,47 @@ +#include + +IStream::IStream(const char *pathFileName) +: mFileDescriptor(-1), mCurrentWord(0), mCurrentChar(0), mhGlobalBuffer(0), + mlpBuffer(0), mBufferIndex(0), mlpBufferPointer(0) +{ + if(-1==(mFileDescriptor=::open(pathFileName,O_RDONLY|O_BINARY,0,SH_DENYWR)))return; + mhGlobalBuffer=::GlobalAlloc(GMEM_FIXED,MaxInputBuffer); + if(!mhGlobalBuffer)return; + mlpBuffer=(UCHAR FAR *)::GlobalLock(mhGlobalBuffer); +} + +IStream::~IStream() +{ + if(-1!=mFileDescriptor)::close(mFileDescriptor); + if(mhGlobalBuffer) + { + ::GlobalUnlock(mhGlobalBuffer); + ::GlobalFree(mhGlobalBuffer); + } +} + +WORD IStream::getChar(void) +{ + if(-1==mFileDescriptor)return FALSE; + if(!mBufferIndex) + { + mBufferIndex=::read(mFileDescriptor,(VPTR)mlpBuffer,MaxInputBuffer); + if(!mBufferIndex)return FALSE; + mlpBufferPointer=mlpBuffer; + } + mCurrentChar=*(mlpBufferPointer); + mlpBufferPointer++; + mBufferIndex--; + return TRUE; +} + +WORD IStream::getWord(void) +{ + if(-1==mFileDescriptor)return FALSE; + mCurrentWord=0; + if(!getChar())return FALSE; + mCurrentWord=mCurrentChar; + if(!getChar())return FALSE; + mCurrentWord|=((short)mCurrentChar)<<8; + return TRUE; +} diff --git a/mdiwin/STREAM.HPP b/mdiwin/STREAM.HPP new file mode 100644 index 0000000..efb0595 --- /dev/null +++ b/mdiwin/STREAM.HPP @@ -0,0 +1,64 @@ +#ifndef _ISTREAM_HPP_ +#define _ISTREAM_HPP_ +#include +#include +#include +#include +#include +#include + +class IStream +{ +public: +#if defined(__FLAT__) + typedef void * VPTR; +#else + typedef void far * VPTR; +#endif + IStream(const char *pathFileName); + virtual ~IStream(); + WORD isOpen(void)const; + WORD getChar(void); + WORD getWord(void); + UCHAR currentChar(void)const; + USHORT currentWord(void)const; + void closeFile(void); +private: + enum{MaxInputBuffer=6400}; + HGLOBAL mhGlobalBuffer; + UCHAR FAR *mlpBuffer; + UCHAR FAR *mlpBufferPointer; + USHORT mBufferIndex; + + short mFileDescriptor; + USHORT mCurrentWord; + UCHAR mCurrentChar; +}; + +inline +UCHAR IStream::currentChar(void)const +{ + return mCurrentChar; +} + +inline +USHORT IStream::currentWord(void)const +{ + return mCurrentWord; +} + +inline +void IStream::closeFile(void) +{ + if(-1!=mFileDescriptor)::close(mFileDescriptor); + mFileDescriptor=-1; +} + +inline +WORD IStream::isOpen(void)const +{ + if(-1==mFileDescriptor)return FALSE; + return TRUE; +} +#endif + \ No newline at end of file diff --git a/mdiwin/STRING.CPP b/mdiwin/STRING.CPP new file mode 100644 index 0000000..8e54f2c --- /dev/null +++ b/mdiwin/STRING.CPP @@ -0,0 +1,134 @@ +#include +#include + +String::String(int resourceID,HINSTANCE hInstance) +{ + mnpStr=new char[MaxResourceString]; + ::memset(mnpStr,0,MaxResourceString); + ::LoadString(hInstance,resourceID,(LPSTR)mnpStr,MaxResourceString); +} + +int String::operator!=(const String &someString)const +{ + if(!mnpStr && !someString.mnpStr)return 0; + if(!mnpStr || !someString.mnpStr)return 1; + return (::strcmp(mnpStr,someString.mnpStr)); +} + +int String::operator==(const String &someString)const +{ + if(!mnpStr && !someString.mnpStr)return 1; + if(!mnpStr || !someString.mnpStr)return 0; + return (!::strcmp(mnpStr,someString.mnpStr)); +} + +int String::operator<(const String &someString)const +{ + if(!mnpStr||!someString.mnpStr)return FALSE; + return (::strcmp(mnpStr,someString.mnpStr)<0); +} + +int String::operator<=(const String &someString)const +{ + if(!mnpStr||!someString.mnpStr)return FALSE; + if(*this +#include +class String +{ +public: + enum{MaxResourceString=128}; + enum{MaxString=128}; + String(void); + String(const char *npStr); + String(const String &newString); + String(int resourceID,HINSTANCE hInstance); + virtual ~String(); + int operator!=(const String &someString)const; + int operator==(const String &someString)const; + int operator<(const String &someString)const; + int operator<=(const String &someString)const; + int operator=(const String &someString); + int operator=(const char *someCharStar); + int operator+=(const String &someString); + int operator+=(const char *someStr); + operator char *(); + int reserve(unsigned nBytes); + int token(const char *token); + void upper(void); + int strstr(const char *string)const; + int isNull(void)const; +private: + char *mnpStr; +}; + +inline +String::String() +: mnpStr(0) +{ + reserve(MaxString); +} + +inline +String::String(const char *npStr) +: mnpStr(0) +{ + if(!::strlen(npStr))return; + mnpStr=new char[::strlen(npStr)+1]; + ::strcpy(mnpStr,npStr); +} + +inline +String::String(const String &newString) +: mnpStr(0) +{ + if(!::strlen(newString.mnpStr))return; + mnpStr=new char[::strlen(newString.mnpStr)+1]; + ::strcpy(mnpStr,newString.mnpStr); +} + +inline +String::~String() +{ + if(mnpStr)delete mnpStr; +} + +inline +String::operator char *() +{ + return mnpStr; +} + +inline +int String::isNull(void)const +{ + if(!mnpStr||(mnpStr&&!*mnpStr))return 1; + return 0; +} +#endif + \ No newline at end of file diff --git a/mdiwin/TDCONFIG.TDW b/mdiwin/TDCONFIG.TDW new file mode 100644 index 0000000..dd2f2da Binary files /dev/null and b/mdiwin/TDCONFIG.TDW differ diff --git a/mdiwin/TDW.TRW b/mdiwin/TDW.TRW new file mode 100644 index 0000000..9ac741b Binary files /dev/null and b/mdiwin/TDW.TRW differ diff --git a/mdiwin/TOOLBAR.BAK b/mdiwin/TOOLBAR.BAK new file mode 100644 index 0000000..6c0fc54 --- /dev/null +++ b/mdiwin/TOOLBAR.BAK @@ -0,0 +1,232 @@ +#include +#include + +char ToolBar::szClassName[]="Rocinante"; +char ToolBar::szMenuName[]={'\0'}; + +ToolBar::ToolBar(HWND hParent,String caption) +: mButtons(0), mButtonDown(FALSE), mIsDestroyed(FALSE), + mWindowWidth(0), mCaption(caption), mhParent(hParent), + mhInstance(Main::processInstance()) +{ + registerClass(); + ::CreateWindow((LPSTR)szClassName,(LPSTR)mCaption, + WS_CHILD|WS_CAPTION, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,WindowHeight, + mhParent,(HMENU)0x01,mhInstance,(LPSTR)this); + synchronizeToolBar(); + Show(SW_HIDE); + Update(); +} + +ToolBar::~ToolBar() +{ + for(int i=0;iMaxButtons)return FALSE; + if(0==(mButton[mButtons].mhBitmap=::LoadBitmap(mhInstance,(LPSTR)bmpString)))return FALSE; + mButton[mButtons].mMessage=message; + mButton[mButtons].mwParam=wParam; + mButton[mButtons].mlParam=lParam; + ::GetObject(mButton[mButtons].mhBitmap,sizeof(BITMAP),(LPSTR)&bitmapInfo); + if(!mButtons) + ::SetRect((RECT FAR *)&mButton[mButtons].mRect,0,0,bitmapInfo.bmWidth,bitmapInfo.bmHeight); + else + SetRect((RECT FAR *)&mButton[mButtons].mRect,mButton[mButtons-1].mRect.right,0,mButton[mButtons-1].mRect.right+bitmapInfo.bmWidth,bitmapInfo.bmHeight); + setWidth(LastVisible); + if(::IsWindowVisible(GetHandle()))::InvalidateRect(GetHandle(),&mButton[mButtons].mRect,FALSE); + mButtons++; + return TRUE; +} + +void ToolBar::LeftButtonDown(WORD xPos,WORD yPos) +{ + mButtonDown=isInButton(xPos,yPos); + if(!HIWORD(mButtonDown))return; + Paint(LOWORD(mButtonDown)); + ::SetCapture(GetHandle()); +} + +void ToolBar::LeftButtonUp() +{ + if(!HIWORD(mButtonDown))return; + ::InvalidateRect(GetHandle(),&mButton[LOWORD(mButtonDown)].mRect,FALSE); + ::UpdateWindow(GetHandle()); + ::PostMessage(GetParent(GetHandle()),mButton[LOWORD(mButtonDown)].mMessage, + mButton[LOWORD(mButtonDown)].mwParam,mButton[LOWORD(mButtonDown)].mlParam); + mButtonDown=FALSE; + ::ReleaseCapture(); +} + +void ToolBar::mouseMove(WORD xPos,WORD yPos) +{ + DWORD mouseOverButton; + + if(!mButtonDown)return; + mouseOverButton=isInButton(xPos,yPos); + if(!HIWORD(mouseOverButton)) + { + ::InvalidateRect(GetHandle(),&mButton[LOWORD(mButtonDown)].mRect,FALSE); + mButtonDown=FALSE; + ::ReleaseCapture(); + } + else if(LOWORD(mouseOverButton)!=LOWORD(mButtonDown)) + { + ::InvalidateRect(GetHandle(),&mButton[LOWORD(mButtonDown)].mRect,FALSE); + mButtonDown=FALSE; + ::ReleaseCapture(); + } +} + +DWORD ToolBar::isInButton(WORD xPos,WORD yPos)const +{ + for(int i=0;i= mButton[i].mRect.left && xPos<=mButton[i].mRect.right) + && (yPos>=mButton[i].mRect.top && yPos<=mButton[i].mRect.bottom)) + return (i+0x10000UL); + } + return 0; +} + +void ToolBar::setWidth(Position position) +{ + RECT parentRect; + POINT cP; + + mWindowWidth=0; + for(int i=0;i +#include + +char ToolBar::szClassName[]="Rocinante"; +char ToolBar::szMenuName[]={'\0'}; + +ToolBar::ToolBar(HWND hParent,String caption) +: mButtons(0), mButtonDown(FALSE), mIsDestroyed(FALSE), + mWindowWidth(0), mCaption(caption), mhParent(hParent), + mhInstance(Main::processInstance()) +{ + registerClass(); + ::CreateWindow((LPSTR)szClassName,(LPSTR)mCaption, + WS_CHILD|WS_CAPTION, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,WindowHeight, + mhParent,(HMENU)0x01,mhInstance,(LPSTR)this); + synchronizeToolBar(); + Show(SW_HIDE); + Update(); +} + +ToolBar::~ToolBar() +{ + for(int i=0;iMaxButtons)return FALSE; + if(0==(mButton[mButtons].mhBitmap=::LoadBitmap(mhInstance,(LPSTR)bmpString)))return FALSE; + mButton[mButtons].mMessage=message; + mButton[mButtons].mwParam=wParam; + mButton[mButtons].mlParam=lParam; + ::GetObject(mButton[mButtons].mhBitmap,sizeof(BITMAP),(LPSTR)&bitmapInfo); + if(!mButtons) + ::SetRect((RECT FAR *)&mButton[mButtons].mRect,0,0,bitmapInfo.bmWidth,bitmapInfo.bmHeight); + else + SetRect((RECT FAR *)&mButton[mButtons].mRect,mButton[mButtons-1].mRect.right,0,mButton[mButtons-1].mRect.right+bitmapInfo.bmWidth,bitmapInfo.bmHeight); + setWidth(LastVisible); + if(::IsWindowVisible(GetHandle()))::InvalidateRect(GetHandle(),&mButton[mButtons].mRect,FALSE); + mButtons++; + return TRUE; +} + +void ToolBar::LeftButtonDown(WORD xPos,WORD yPos) +{ + mButtonDown=isInButton(xPos,yPos); + if(!HIWORD(mButtonDown))return; + Paint(LOWORD(mButtonDown)); + ::SetCapture(GetHandle()); +} + +void ToolBar::LeftButtonUp() +{ + if(!HIWORD(mButtonDown))return; + ::InvalidateRect(GetHandle(),&mButton[LOWORD(mButtonDown)].mRect,FALSE); + ::UpdateWindow(GetHandle()); + ::PostMessage(GetParent(GetHandle()),mButton[LOWORD(mButtonDown)].mMessage, + mButton[LOWORD(mButtonDown)].mwParam,mButton[LOWORD(mButtonDown)].mlParam); + mButtonDown=FALSE; + ::ReleaseCapture(); +} + +void ToolBar::mouseMove(WORD xPos,WORD yPos) +{ + DWORD mouseOverButton; + + if(!mButtonDown)return; + mouseOverButton=isInButton(xPos,yPos); + if(!HIWORD(mouseOverButton)) + { + ::InvalidateRect(GetHandle(),&mButton[LOWORD(mButtonDown)].mRect,FALSE); + mButtonDown=FALSE; + ::ReleaseCapture(); + } + else if(LOWORD(mouseOverButton)!=LOWORD(mButtonDown)) + { + ::InvalidateRect(GetHandle(),&mButton[LOWORD(mButtonDown)].mRect,FALSE); + mButtonDown=FALSE; + ::ReleaseCapture(); + } +} + +DWORD ToolBar::isInButton(WORD xPos,WORD yPos)const +{ + for(int i=0;i= mButton[i].mRect.left && xPos<=mButton[i].mRect.right) + && (yPos>=mButton[i].mRect.top && yPos<=mButton[i].mRect.bottom)) + return (i+0x10000UL); + } + return 0; +} + +void ToolBar::setWidth(Position position) +{ + RECT parentRect; + POINT cP; + + mWindowWidth=0; + for(int i=0;i +#include + +class Buttons +{ + friend class ToolBar; +private: + RECT mRect; + HBITMAP mhBitmap; + UINT mMessage; + WPARAM mwParam; + LPARAM mlParam; + Buttons(){return;} + ~Buttons(){return;} +}; + +class ToolBar : public Window +{ +public: + ToolBar(HWND hParent,String caption); + virtual ~ToolBar(); + void showWindow(int visible=TRUE); + WORD addBitmap(String bmpString,UINT Message,WPARAM wParam,LPARAM lParam); + WORD isVisible(void)const; +private: + enum {MaxCaption=50}; + enum {WindowHeight=44,MaxButtons=25}; + enum Position {UpperLeft,LastVisible}; + void registerClass(void); + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + void handleDestroyEvent(void); + void Paint(void); + void Paint(WORD BitMap); + void LeftButtonUp(); + void LeftButtonDown(WORD xPos,WORD yPos); + void mouseMove(WORD xPos,WORD yPos); + void setWidth(Position=UpperLeft); + void synchronizeToolBar(void); + DWORD isInButton(WORD xPos,WORD yPos)const; + + static char szClassName[]; + static char szMenuName[]; + + int mButtons; + POINT mLastOffset; + WORD mWindowWidth; + WORD mIsDestroyed; + DWORD mButtonDown; + HWND mhParent; + HINSTANCE mhInstance; + String mCaption; + Buttons mButton[MaxButtons]; +}; + +inline +void ToolBar::handleDestroyEvent(void) +{ + mIsDestroyed=TRUE; +} + +inline +WORD ToolBar::isVisible(void)const +{ + return ::IsWindowVisible(GetHandle()); +} +#endif + diff --git a/mdiwin/TXLMTRX.CPP b/mdiwin/TXLMTRX.CPP new file mode 100644 index 0000000..ad60c64 --- /dev/null +++ b/mdiwin/TXLMTRX.CPP @@ -0,0 +1,28 @@ +#include + +int TranslationMatrix::smTransformMatrix[][2]={{1,0},{0,1}}; + +void TranslationMatrix::performTranslation(void) +{ + int newx; + int newy; + + if(mOffsetRows>=mRows)mOffsetRows%=mRows; + if(mOffsetCols>=mCols)mOffsetCols%=mCols; + if(mOffsetRows<=(-mRows))mOffsetRows%=mRows; + if(mOffsetCols<=(-mCols))mOffsetCols%=mCols; + for(int row=0;row=mRows)newx-=mRows; + if(newy>=mCols)newy-=mCols; + *(((*mOutputPtr)+((LONG)mCols*(LONG)newx)+(LONG)newy))= + *(((*mInputPtr)+((LONG)mCols*(LONG)row)+(LONG)col)); + } + } +} diff --git a/mdiwin/TXLMTRX.HPP b/mdiwin/TXLMTRX.HPP new file mode 100644 index 0000000..fdc8f83 --- /dev/null +++ b/mdiwin/TXLMTRX.HPP @@ -0,0 +1,32 @@ +#ifndef _TXLMTRX_HPP_ +#define _TXLMTRX_HPP_ +#include +#include +class TranslationMatrix +{ +public: + TranslationMatrix(int rows,int cols,int offsetRows,int offsetCols,UHUGE **inputPtr,UHUGE **outputPtr); + ~TranslationMatrix(); + void performTranslation(void); +private: + UHUGE **mInputPtr; + UHUGE **mOutputPtr; + int mRows; + int mCols; + int mOffsetRows; + int mOffsetCols; + static smTransformMatrix[][2]; +}; + +inline +TranslationMatrix::TranslationMatrix(int rows,int cols,int offsetRows,int offsetCols,UHUGE **inputPtr,UHUGE **outputPtr) +: mInputPtr(inputPtr), mOutputPtr(outputPtr), mRows(rows), mCols(cols), + mOffsetRows(offsetRows), mOffsetCols(offsetCols) +{ +} + +inline +TranslationMatrix::~TranslationMatrix() +{ +} +#endif \ No newline at end of file diff --git a/mdiwin/TYPES.HPP b/mdiwin/TYPES.HPP new file mode 100644 index 0000000..a1d173f --- /dev/null +++ b/mdiwin/TYPES.HPP @@ -0,0 +1,25 @@ +#ifndef _TYPES_HPP_ +#define _TYPES_HPP_ +typedef unsigned char UCHAR; +typedef char CHAR; +typedef unsigned short USHORT; +typedef short SHORT; +typedef short Index; +#if defined(__FLAT__) +#define CHUGE char +#define UHUGE unsigned char +#define LHUGE unsigned long +#else +#define CHUGE char huge +#define UHUGE unsigned char huge +#define LHUGE unsigned long huge +#endif +#ifndef HUGE +#if defined(__FLAT__) +#define HUGE FAR +#else +#define HUGE huge +#endif +#endif +#endif + diff --git a/mdiwin/VECTOR.HPP b/mdiwin/VECTOR.HPP new file mode 100644 index 0000000..9bf8638 --- /dev/null +++ b/mdiwin/VECTOR.HPP @@ -0,0 +1,51 @@ +#ifndef _VECTOR_HPP_ +#define _VECTOR_HPP_ +#include +#include +#include +#include +#include +#include + +#ifndef HUGE +#ifdef __FLAT__ +#define HUGE FAR +#else +#define HUGE huge +#endif +#endif + +#ifdef _EXPAND_VECTOR_TEMPLATES_ +//#pragma option -Jgd +#endif + +#if defined(_MSC_VER) +#pragma warning(disable:4291) +#endif + +void FAR *operator new(size_t size,int n,void FAR*lpData); + +template +class Vector +{ +public: + Vector(void); + virtual ~Vector(); + LONG size(LONG newSize); + LONG size(void)const; + T &operator[](LONG itemIndex); + WORD operator=(Block &someBlock); + WORD operator==(const Vector &someVector)const; + WORD operator=(const Vector &someVector); +// operator T*(); +private: + typedef LONG Index; + void vectorNew(void); + void vectorDelete(void); + + LONG mEntries; + T HUGE * HUGE *mlpVectorTable; + T HUGE *mlpMemPool; +}; +#include +#endif diff --git a/mdiwin/VECTOR.TPP b/mdiwin/VECTOR.TPP new file mode 100644 index 0000000..271825d --- /dev/null +++ b/mdiwin/VECTOR.TPP @@ -0,0 +1,120 @@ +template +Vector::Vector(void) +: mEntries(0), mlpVectorTable(0), mlpMemPool(0) +{ +} + +template +Vector::~Vector() +{ + vectorDelete(); +} + +void FAR *operator new(size_t /*size*/,int /*n*/,void FAR *lpData) +{ + return lpData; +} + +template +LONG Vector::size(void)const +{ + return mEntries; +} + +template +LONG Vector::size(LONG numEntries) +{ + vectorDelete(); + if(0==(mEntries=numEntries))return 0L; + vectorNew(); + return mEntries; +} + +template +T &Vector::operator[](LONG itemIndex) +{ + assert(itemIndex=mEntries)return *((T*)0); + return *((T FAR *)*(mlpVectorTable+itemIndex)); +} + +template +WORD Vector::operator==(const Vector &someVector)const +{ + if(mEntries!=someVector.mEntries)return FALSE; + for(Index i=0;i +WORD Vector::operator=(const Vector &someVector) +{ + vectorDelete(); + if(0==(mEntries=someVector.mEntries))return FALSE; + vectorNew(); + for(Index i=0;i +WORD Vector::operator=(Block &someBlock) +{ + LONG blockSize(someBlock.size()); + + if(!blockSize)return FALSE; + size(blockSize); + for(Index i=0;i +//Vector::operator T*() +//{ +// return (T FAR *)mlpMemPool; +//} + +template +void Vector::vectorNew(void) +{ + mlpVectorTable=(T HUGE **)::GlobalLock(::GlobalAlloc(GMEM_ZEROINIT|GMEM_FIXED,mEntries*sizeof(T FAR *))); + assert(0!=mlpVectorTable); + mlpMemPool=(T HUGE *)::GlobalLock(::GlobalAlloc(GMEM_ZEROINIT|GMEM_FIXED,mEntries*sizeof(T))); + assert(0!=mlpMemPool); + for(Index i=0;i +void Vector::vectorDelete(void) +{ + if(!mlpVectorTable)return; + if(!mlpMemPool)return; + for(Index i=0;i~T(); +#if defined(__FLAT__) + ::GlobalUnlock(::GlobalHandle(mlpMemPool)); + ::GlobalFree(::GlobalHandle(mlpMemPool)); + ::GlobalUnlock(::GlobalHandle(mlpVectorTable)); + ::GlobalFree(mlpVectorTable); +#else + ::GlobalUnlock((HGLOBAL)(FP_SEG(mlpMemPool)-1)); + ::GlobalFree((HGLOBAL)(FP_SEG(mlpMemPool)-1)); + ::GlobalUnlock((HGLOBAL)(FP_SEG(mlpVectorTable)-1)); + ::GlobalFree((HGLOBAL)(FP_SEG(mlpVectorTable)-1)); +#endif + mlpVectorTable=0; + mlpMemPool=0; +} + + \ No newline at end of file diff --git a/mdiwin/VIEW.BAK b/mdiwin/VIEW.BAK new file mode 100644 index 0000000..aa22de9 --- /dev/null +++ b/mdiwin/VIEW.BAK @@ -0,0 +1,994 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char ViewWindow::szClassName[]="GIFView"; +char ViewWindow::szMenuName[]=""; +HINSTANCE ViewWindow::smhInstance=0; + +ViewWindow::ViewWindow() +: mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), + mMaxColors(0), mWidth(0), mHeight(0), mhPalette(0), + mhGlobalInvert(0), mhGlobal(0), mhBMPGlobal(0), mpStatusBar(0), + mpProcessImage(0), mpBI(0), mhpImageInvert(0), mhpImage(0), + mhSystemMenu(0), mhFrameMenu(0), mhViewMenu(0), mpSpacial(0), + mpPerspectiveWarp(0), mlpClipboard(0), mlpToolBar(0), mlpGridMesh(0), + mlpConvexTransform(0), mToolbarVisibility(TRUE), mCurrentMeshFrames(DefaultFrames) +{ + mPathFileName[0]=0; +} + +ViewWindow::ViewWindow(const ViewWindow &/*someViewWindow*/) +: mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), + mMaxColors(0), mWidth(0), mHeight(0), mhPalette(0), + mhGlobalInvert(0), mhGlobal(0), mhBMPGlobal(0), mpStatusBar(0), + mpProcessImage(0), mpBI(0), mhpImageInvert(0), mhpImage(0), + mhSystemMenu(0), mhFrameMenu(0), mhViewMenu(0), mpSpacial(0), + mpPerspectiveWarp(0), mlpClipboard(0), mlpToolBar(0), mlpGridMesh(0), + mlpConvexTransform(0), mToolbarVisibility(TRUE), mCurrentMeshFrames(DefaultFrames) +{ + mPathFileName[0]=0; +} + +ViewWindow::~ViewWindow() +{ + if(mhPalette)::DeleteObject(mhPalette); + if(mhGlobalInvert) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + } + if(mhBMPGlobal) + { + ::GlobalUnlock(mhBMPGlobal); + ::GlobalFree(mhBMPGlobal); + } + if(mhViewMenu)::DestroyMenu(mhViewMenu); + if(!mIsDestroyed && GetHandle()) + ::SendMessage(mhClientWindow,WM_MDIDESTROY,(WPARAM)GetHandle(),0L); + if(mlpToolBar)delete mlpToolBar; + if(mlpGridMesh)delete mlpGridMesh; +} + +void ViewWindow::Register(HINSTANCE hInstance) +{ + WNDCLASS wndclass; + + smhInstance=hInstance; + wndclass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndclass.lpfnWndProc =(WNDPROC)MDIWindow::MDIWndProc; + wndclass.cbClsExtra =0; + wndclass.cbWndExtra =sizeof(ViewWindow*); + wndclass.hInstance =hInstance; + wndclass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndclass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndclass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndclass.lpszMenuName =szMenuName; + wndclass.lpszClassName =szClassName; + ::RegisterClass(&wndclass); +} +// *************** GIF DECODER IMAGE ENTRY POINTS ************** + +void ViewWindow::paletteHandler(const UCHAR FAR *paletteData,USHORT numColors) +{ + RGBStruct FAR *pRGB; + int i; + + mMaxColors=numColors; + for(i=0;ibmiHeader.biSize=sizeof(BITMAPINFOHEADER); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + mpBI->bmiHeader.biPlanes=1; + mpBI->bmiHeader.biBitCount=MaxGifBitsPerPixel; + mpBI->bmiHeader.biCompression=BI_RGB; + mpBI->bmiHeader.biSizeImage=0; + mpBI->bmiHeader.biXPelsPerMeter=0; + mpBI->bmiHeader.biYPelsPerMeter=0; + mpBI->bmiHeader.biClrUsed=mMaxColors; + mpBI->bmiHeader.biClrImportant=mMaxColors; + for(i=0;ibmiColors[i]; + pRGBQuad->rgbRed=mPaletteData[i].Red(); + pRGBQuad->rgbGreen=mPaletteData[i].Green(); + pRGBQuad->rgbBlue=mPaletteData[i].Blue(); + pRGBQuad->rgbReserved=0; + } + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + mhGlobal=0; + return; +} + +void ViewWindow::showHandler(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation) +{ + if(!mhGlobal) + { + mWidth=imageWide; + mHeight=imageDeep; + mhGlobal=::GlobalAlloc(GMEM_FIXED,(long)mWidth*(long)mHeight); + mhpImage=(UHUGE *)::GlobalLock(mhGlobal); + } + Main::hmemcpy(mhpImage+((long)yLocation*(long)mWidth),(UHUGE*)lpRowData,mWidth); + return; +} + +void ViewWindow::errorHandler(const CHAR FAR *errorMessage) +{ + ::MessageBox(GetHandle(),(LPSTR)errorMessage,(LPSTR)"ERROR",MB_ICONASTERISK|MB_OK); + return; +} + +// ************************************************************** + +void ViewWindow::showWindow(HWND hClientWindow,const char *pathFileName,BWindow *statusBar,HMENU hFrameMenu) +{ + mhFrameMenu=hFrameMenu; + mhViewMenu=::LoadMenu(smhInstance,(LPSTR)"viewMenu"); + mhClientWindow=hClientWindow; + mhFrameWindow=::GetParent(mhClientWindow); + mpStatusBar=statusBar; + ::strcpy(mPathFileName,pathFileName); + decodeMDIImage(); + createMDIChildWindow(); + createToolBarWindow(); +} + +void ViewWindow::decodeMDIImage(void) +{ + WORD resultCode; + GIFDecoder *lpGIFDecoder; + + mpStatusBar->setText("Decoding Image."); + waitCursor(TRUE); + lpGIFDecoder=new GIFDecoder(mPathFileName); + assert(0!=lpGIFDecoder); + lpGIFDecoder->setPaletteHandler(this,&ViewWindow::paletteHandler); + lpGIFDecoder->setBackgroundHandler(this,&ViewWindow::backgroundHandler); + lpGIFDecoder->setImageHandler(this,&ViewWindow::imageHandler); + lpGIFDecoder->setShowHandler(this,&ViewWindow::showHandler); + lpGIFDecoder->setErrorHandler(this,&ViewWindow::errorHandler); + resultCode=lpGIFDecoder->unpackImage(); + delete lpGIFDecoder; + if(!resultCode) + { + Bitmap bitmapImage; + bitmapImage=mPathFileName; + if(bitmapImage.isOkay())*this=bitmapImage; + } + waitCursor(FALSE); + mpStatusBar->setText(""); +} + +void ViewWindow::operator=(Bitmap &someBitmap) +{ + RGBQUAD FAR *pRGBQuad; + RGBStruct rgbStruct; + DWORD sizeBitmapInfo; + DWORD sizeImage; + HGLOBAL hGlobalSourceBitmapInfo; + HGLOBAL hGlobalSourceImage; + BITMAPINFO FAR *lpSourceBitmapInfo; + UHUGE *lpSourceImage; + + hGlobalSourceBitmapInfo=someBitmap.lockedBitmapInfo(); +#if defined(__FLAT__) + sizeBitmapInfo=::GlobalSize(hGlobalSourceBitmapInfo); +#else + sizeBitmapInfo=::GetSelectorLimit((UINT)hGlobalSourceBitmapInfo)+1L; +#endif + mhBMPGlobal=::GlobalAlloc(GMEM_FIXED,sizeBitmapInfo); + mpBI=(BITMAPINFO FAR *)::GlobalLock(mhBMPGlobal); + lpSourceBitmapInfo=(BITMAPINFO *)::GlobalLock(hGlobalSourceBitmapInfo); + Main::hmemcpy((UHUGE *)mpBI,(UHUGE *)lpSourceBitmapInfo,sizeBitmapInfo); + ::GlobalUnlock(hGlobalSourceBitmapInfo); + sizeImage=((((mpBI->bmiHeader.biWidth* + mpBI->bmiHeader.biBitCount)+31)&~31)>>3)* + mpBI->bmiHeader.biHeight; + mhGlobalInvert=::GlobalAlloc(GMEM_FIXED,sizeImage); + mhpImageInvert=(UHUGE*)::GlobalLock(mhGlobalInvert); + hGlobalSourceImage=someBitmap.lockedImageData(); + lpSourceImage=(UHUGE*)::GlobalLock(hGlobalSourceImage); + Main::hmemcpy(mhpImageInvert,lpSourceImage,sizeImage); + ::GlobalUnlock(hGlobalSourceImage); + mWidth=(WORD)mpBI->bmiHeader.biWidth; + mHeight=(WORD)mpBI->bmiHeader.biHeight; + if(!(mMaxColors=(WORD)mpBI->bmiHeader.biClrUsed)) + mMaxColors=1 << mpBI->bmiHeader.biBitCount; + for(int i=0;ibmiColors[i]; + rgbStruct.Red(pRGBQuad->rgbRed); + rgbStruct.Green(pRGBQuad->rgbGreen); + rgbStruct.Blue(pRGBQuad->rgbBlue); + mPaletteData.insert(&rgbStruct); + } + createPalette(); +} + +void ViewWindow::createMDIChildWindow(void) +{ + MDICREATESTRUCT createStruct; + + createStruct.szClass=(LPSTR)szClassName; + createStruct.szTitle=(LPSTR)szClassName; + createStruct.hOwner=smhInstance; + createStruct.x=CW_USEDEFAULT; + createStruct.y=CW_USEDEFAULT; + createStruct.cx=CW_USEDEFAULT; + createStruct.cy=CW_USEDEFAULT; + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE|WS_CLIPCHILDREN; + createStruct.lParam=(LONG)this; + ::SendMessage(mhClientWindow,WM_MDICREATE,0,(LONG)(LPMDICREATESTRUCT)&createStruct); + Show(SW_SHOW); + Update(); +} + +void ViewWindow::createToolBarWindow(void) +{ + mlpToolBar=new ToolBar(GetHandle(),String(STRING_LITERALTOOLBAR,Main::processInstance())); + mlpToolBar->addBitmap(String(STRING_LITERALMESH,Main::processInstance()),WM_COMMAND,MENU_TBMESH,0L); + mlpToolBar->addBitmap(String(STRING_LITERALCLIP,Main::processInstance()),WM_COMMAND,MENU_TBCLIP,0L); + mlpToolBar->addBitmap(String(STRING_LITERALBLOAD,Main::processInstance()),WM_COMMAND,MENU_TBLOAD,0L); + mlpToolBar->addBitmap(String(STRING_LITERALBSAVE,Main::processInstance()),WM_COMMAND,MENU_TBSAVE,0L); + mlpToolBar->addBitmap(String(STRING_LITERALTRANSFORMB,Main::processInstance()),WM_COMMAND,MENU_TBTRANSFORMB,0L); + mlpToolBar->addBitmap(String(STRING_LITERALTRANSFORMA,Main::processInstance()),WM_COMMAND,MENU_TBTRANSFORMA,0L); + mlpToolBar->addBitmap(String(STRING_LITERALSIGMA,Main::processInstance()),WM_COMMAND,MENU_TBSIGMA,0L); + mlpToolBar->addBitmap(String(STRING_LITERALDISSOLVE,Main::processInstance()),WM_COMMAND,MENU_DISSOLVE,0L); + mlpToolBar->showWindow(); +} + +void ViewWindow::createPalette(void) +{ + PALETTEENTRY FAR *pPaletteEntry; + LOGPALETTE FAR *pLogPalette; + HGLOBAL hPALGlobal; + + if(mhPalette)::DeleteObject(mhPalette); + hPALGlobal=::GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE,sizeof(LOGPALETTE)+(mMaxColors*sizeof(PALETTEENTRY))); + pLogPalette=(LOGPALETTE FAR *)::GlobalLock(hPALGlobal); + pLogPalette->palNumEntries=mMaxColors; + pLogPalette->palVersion=0x300; + for(int i=0;ipalPalEntry[i]; + pPaletteEntry->peRed=mPaletteData[i].Red(); + pPaletteEntry->peGreen=mPaletteData[i].Green(); + pPaletteEntry->peBlue=mPaletteData[i].Blue(); + pPaletteEntry->peFlags=0; + } + mhPalette=::CreatePalette((LOGPALETTE FAR *)pLogPalette); + ::GlobalUnlock(hPALGlobal); + ::GlobalFree(hPALGlobal); +} + +void ViewWindow::Paint(void) +{ + RECT rect; + PAINTSTRUCT ps; + HDC hDC; + HPALETTE hOldPalette; + HWND activeWindow; + WORD menuState; + WORD errorCount=0; + + ::GetClientRect(GetHandle(),(RECT FAR *)&rect); + activeWindow=(HWND)LOWORD(::SendMessage(mhClientWindow,WM_MDIGETACTIVE,0,0L)); + hDC=::BeginPaint(GetHandle(),&ps); + if(GetHandle()==activeWindow)hOldPalette=::SelectPalette(hDC,mhPalette,FALSE); + else hOldPalette=::SelectPalette(hDC,mhPalette,TRUE); + ::RealizePalette(hDC); + menuState=::GetMenuState(mhSystemMenu,MenuConform,MF_BYCOMMAND); + if(!(menuState&MF_CHECKED)) + ::StretchDIBits(hDC,0,0,rect.right,rect.bottom,0,0,mWidth,mHeight,mhpImageInvert,(BITMAPINFO *)mpBI,DIB_RGB_COLORS,SRCCOPY); + else + { + while(!::StretchDIBits(hDC,0,0,mWidth,mHeight,0,0,mWidth,mHeight,mhpImageInvert,(BITMAPINFO *)mpBI,DIB_RGB_COLORS,SRCCOPY)) + { + errorCount++; + ::MessageBeep(0); + mWidth--; + mHeight--; + if((int)mWidth-1<0 || (int)mHeight-1<0)break; + ::GlobalUnlock(mhGlobalInvert); + Resize resizeImage(mWidth+1,mHeight+1,mWidth,mHeight,mhGlobalInvert); + HGLOBAL hGlobalTemp=resizeImage.resizeImage(); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE *)::GlobalLock(hGlobalTemp); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + } + if(errorCount)updateCaption(); + } + if(GetHandle()==activeWindow)::SelectPalette(hDC,hOldPalette,FALSE); + else ::SelectPalette(hDC,hOldPalette,TRUE); + ::EndPaint(GetHandle(),&ps); + if(mlpGridMesh)mlpGridMesh->suspendMesh(FALSE); +} + +void ViewWindow::updateCaption(void)const +{ + char Buffer[MaxFileName]; + char *ptr; + + ::GetWindowText(GetHandle(),(LPSTR)Buffer,sizeof(Buffer)); + ptr=Buffer+::strlen(Buffer)-1; + while(*ptr!='-')ptr--; + ptr+=2; + ::sprintf(ptr,"%dx%dx%d",mWidth,mHeight,mMaxColors); + ::SetWindowText(GetHandle(),(LPSTR)Buffer); +} + +void ViewWindow::modifySystemMenu(void) +{ + if(mhSystemMenu)return; + + mhSystemMenu=::GetSystemMenu(GetHandle(),FALSE); + ::AppendMenu(mhSystemMenu,MF_SEPARATOR,0,0); + ::AppendMenu(mhSystemMenu,MF_STRING|MF_CHECKED,MenuConform,(LPSTR)"Non-Conforming"); + ::DrawMenuBar(GetHandle()); +} + +void ViewWindow::handleDestroyEvent() +{ + if(mpProcessImage)mpProcessImage->cancelThread(); + if(mpSpacial)mpSpacial->cancelThread(); + if(mpPerspectiveWarp)mpPerspectiveWarp->cancelThread(); + if(mlpConvexTransform)mlpConvexTransform->cancelThread(); + if(mlpClipboard)delete mlpClipboard; + mIsDestroyed=TRUE; + return; +} + +void ViewWindow::handleActivateEvent(WPARAM wParam,LPARAM /*lParam*/) +{ + if(wParam) + { + if(mlpGridMesh)mlpGridMesh->suspendMesh(TRUE); + HDC inhDC(::GetDC(GetHandle())); + ::SelectPalette(inhDC,mhPalette,FALSE); + ::SendMessage(mhFrameWindow,WM_COMMAND,IDM_INVALIDATEMDIWINDOWS,MAKELPARAM(0,0)); + if(::RealizePalette(inhDC)>0)::InvalidateRect(GetHandle(),0,TRUE); + ::ReleaseDC(GetHandle(),inhDC); +#if defined(__FLAT__) + ::SendMessage(mhClientWindow,WM_MDISETMENU,(WPARAM)mhViewMenu,(LPARAM)::GetSubMenu(mhViewMenu,0)); +#else + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhViewMenu,::GetSubMenu(mhViewMenu,0))); +#endif + if(mToolbarVisibility&&mlpToolBar&&!mlpToolBar->isVisible())mlpToolBar->showWindow(); + } + else + { + if(mlpToolBar&&mlpToolBar->isVisible())mlpToolBar->showWindow(FALSE); + if(mlpGridMesh)mlpGridMesh->showWindow(TRUE); +#if defined(__FLAT__) + ::SendMessage(mhClientWindow,WM_MDISETMENU,(WPARAM)mhFrameMenu,(LPARAM)0); +#else + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhFrameMenu,0)); +#endif + } + ::DrawMenuBar(mhFrameWindow); + return; +} + +long ViewWindow::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + { + char buffer[100]; + + mlpClipboard=new Clipboard(GetHandle()); + assert(0!=mlpClipboard); + ::SetWindowText(GetHandle(),(LPSTR)mPathFileName); + ::sprintf(buffer,"%s - %dx%dx%d",mPathFileName,mWidth,mHeight,mMaxColors); + ::SetWindowText(GetHandle(),(LPSTR)buffer); + modifySystemMenu(); + mCapture=GetHandle(); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + } + return FALSE; + case WM_CHANGECBCHAIN : + if(!mlpClipboard)break; + mlpClipboard->changeClipboardChain(message,wParam,lParam); + return FALSE; + case WM_DRAWCLIPBOARD : + if(!mlpClipboard)break; + if(mlpClipboard->drawClipboard(message,wParam,lParam)) + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_ENABLED); + return FALSE; + case WM_LBUTTONDOWN : + mCapture.leftButtonDown(lParam); + return FALSE; + case WM_MOUSEMOVE : + mCapture.mouseMove(lParam); + return FALSE; + case WM_LBUTTONUP : + mCapture.leftButtonUp(); + return FALSE; + case WM_PAINT : + Paint(); + return FALSE; + case WM_MDIACTIVATE : +#if defined(__FLAT__) + handleActivateEvent((WPARAM)lParam,(LPARAM)wParam); +#else + handleActivateEvent(wParam,lParam); +#endif + return FALSE; + case WM_QUERYENDSESSION : + break; + case WM_DESTROY : + handleDestroyEvent(); + return FALSE; + case WM_SYSCOMMAND : + handleSystemMenuEvent(wParam); + break; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case MenuConform : + ::SendMessage(GetHandle(),WM_SYSCOMMAND,MenuConform,0L); + return FALSE; + case MENU_SMOOTHING : + imageProcessing(); + return FALSE; + case MENU_RESIZE : + resizeImage(); + return FALSE; + case MENU_TRANSLATE : + translateMatrix(); + return FALSE; + case MENU_SHEAR : + shearTransform(); + return FALSE; + case MENU_WARP_PERSPECTIVE : + warpPerspective(); + return FALSE; + case MENU_WARP_CONVEX : + warpConvex(); + return FALSE; + case MENU_CLIP : + menuClip(); + return FALSE; + case MENU_DISSOLVE : + { + AdjustDissolve adjustDissolve(GetHandle()); + adjustDissolve.adjustDissolve(mDissolveSchedule,mCurrentMeshFrames); + } + return FALSE; + case MENU_TBSIGMA : + { + FrameDialog frameDialog(GetHandle()); + frameDialog.performFrameDialog(mCurrentMeshFrames); + } + return FALSE; + case MENU_TBLOAD : + case MENU_TBSAVE : + case MENU_TBTRANSFORMB : + case MENU_TBTRANSFORMA : + case IDM_WINLIST : + handleMeshRequest(wParam,lParam); + return FALSE; + case MENU_TBCLIP : + mCapture.reset(); + if(mlpGridMesh) + { + delete mlpGridMesh; + mlpGridMesh=0; + } + return FALSE; + case MENU_TBMESH : + if(!mlpGridMesh)mlpGridMesh=new GridMesh(GetHandle(),mWidth,mHeight); + else mlpGridMesh->newMesh(mlpGridMesh->gridLines()+2); + return FALSE; + case MENU_FILE_SAVEBITMAP : + saveBitmap(); + return FALSE; + case MENU_PALETTE_VIEW : + { + PaletteDialog viewPalette(GetHandle(),mhPalette); + viewPalette.showPalette(); + return FALSE; + } + case IDM_TOOLBAR : + handleToolbarToggle(); + break; + default : + return FALSE; + } + } + return ::DefMDIChildProc(GetHandle(),message,wParam,lParam); +} + +// ************************************************************** + +void ViewWindow::handleToolbarToggle(void) +{ + String showToolbarString(STRING_SHOWTOOLBAR,Main::processInstance()); + String hideToolbarString(STRING_HIDETOOLBAR,Main::processInstance()); + String menuString; + + ::GetMenuString(mhViewMenu,IDM_TOOLBAR,menuString,String::MaxString,MF_BYCOMMAND); + if(showToolbarString==menuString) + { + ::ModifyMenu(mhViewMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)hideToolbarString); + mlpToolBar->showWindow(TRUE); + mToolbarVisibility=TRUE; + } + else + { + ::ModifyMenu(mhViewMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)showToolbarString); + mlpToolBar->showWindow(FALSE); + mToolbarVisibility=FALSE; + } + ::DrawMenuBar(GetHandle()); +} + +void ViewWindow::handleMeshRequest(WPARAM wParam,LPARAM lParam) +{ + String meshFileName(mPathFileName); + String meshPathFileName; + + IniFile iniSettings; + iniSettings.makeFileName(meshFileName); + meshFileName.token(".\0"); + meshFileName+=".MSH"; + meshPathFileName=iniSettings.meshDirectory(); + meshPathFileName+=meshFileName; + switch(wParam) + { + case MENU_TBLOAD : + if(!mlpGridMesh)mlpGridMesh=new GridMesh(GetHandle(),mWidth,mHeight,GridMesh::NoShow); + mlpGridMesh->loadMesh(meshPathFileName); + break; + case MENU_TBTRANSFORMA : + if(!mlpGridMesh){::MessageBeep(0);break;} + meshWarp(); + break; + case MENU_TBTRANSFORMB : + if(!mlpGridMesh){::MessageBeep(0);break;} + ::PostMessage(mhFrameWindow,WM_COMMAND,IDM_GETWINLIST,MAKELPARAM(GetHandle(),0)); + break; + case IDM_WINLIST : + { + WORD itemIndex; + Block *lpViewBlock=(Block*)(lParam); + if(!lpViewBlock||!lpViewBlock->size()){::MessageBeep(0);break;} + ViewSelect selectView(GetHandle()); + if(selectView.selectView(*lpViewBlock,itemIndex,mWidth,mHeight))meshWarp((*lpViewBlock)[itemIndex].windowPtr()); + delete lpViewBlock; + } + break; + case MENU_TBSAVE : + if(!mlpGridMesh)break; + mlpGridMesh->saveMesh(meshPathFileName); + break; + } + return; +} + +void ViewWindow::handleSystemMenuEvent(WPARAM wParam)const +{ + WORD menuState; + + switch(wParam) + { + case MenuConform : + menuState=::GetMenuState(mhSystemMenu,MenuConform,MF_BYCOMMAND); + ::CheckMenuItem(mhSystemMenu,MenuConform,MF_BYCOMMAND | + (menuState&MF_CHECKED?MF_UNCHECKED:MF_CHECKED)); + ::DrawMenuBar(GetHandle()); + ::InvalidateRect(GetHandle(),NULL,TRUE); + } +} + +void ViewWindow::enableMenu(const char isEnabled)const +{ + if(isEnabled) + { + ::EnableMenuItem(mhViewMenu,MENU_CUT,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_COPY,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_SMOOTHING,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_RESIZE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_TRANSLATE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_WARP_PERSPECTIVE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_FILE_SAVEBITMAP,MF_BYCOMMAND|MF_ENABLED); + } + else + { + ::EnableMenuItem(mhViewMenu,MENU_CUT,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_COPY,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_SMOOTHING,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_RESIZE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_TRANSLATE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_WARP_PERSPECTIVE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_FILE_SAVEBITMAP,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + } +} + +void ViewWindow::imageProcessing(void) +{ + enableMenu(FALSE); + mpProcessImage=new Process(mhPalette,mhpImageInvert,mWidth,mHeight); + if(mpProcessImage->showProcess(GetHandle(),mPathFileName) && !mIsDestroyed) + ::InvalidateRect(GetHandle(),NULL,TRUE); + if(!mIsDestroyed)enableMenu(TRUE); + delete mpProcessImage; + mpProcessImage=0; +} + +void ViewWindow::resizeImage(void) +{ + HGLOBAL hGlobal; + double sizeFactor; + + Factor resizeFactor(GetHandle(),"Resize Factor"); + if(!resizeFactor.showFactor(sizeFactor,sizeFactor)||!sizeFactor)return; + enableMenu(FALSE); + mpSpacial=new SpacialTransform(mhPalette,mhpImageInvert,mWidth,mHeight,sizeFactor); + hGlobal=mpSpacial->resizeImage(); + if(mpSpacial->isCancelled()) + { + delete mpSpacial; + mpSpacial=0; + return; + } + delete mpSpacial; + mpSpacial=0; + if(hGlobal) + { + mWidth*=(sizeFactor/100.00); + mHeight*=(sizeFactor/100.00); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobal; + mhpImageInvert=(UHUGE *)::GlobalLock(mhGlobalInvert); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + } + ::InvalidateRect(GetHandle(),NULL,TRUE); + enableMenu(TRUE); + updateCaption(); +} + +void ViewWindow::menuClip(void) +{ + RECT copyRect; + HGLOBAL hGlobalResizedImage; + UHUGE *ptrResizedImage; + + if(!mCapture.hasRectangle())return; + mCapture.boundedRect(copyRect); + enableMenu(FALSE); + ::GlobalUnlock(mhGlobalInvert); + Resize resizeImage(mWidth,mHeight,copyRect,mhGlobalInvert); + if(0!=(hGlobalResizedImage=resizeImage.resizeImage())) + { + ::GlobalFree(mhGlobalInvert); + ptrResizedImage=(UHUGE *)::GlobalLock(hGlobalResizedImage); + mhGlobalInvert=hGlobalResizedImage; + mhpImageInvert=ptrResizedImage; + mpBI->bmiHeader.biWidth=mWidth=(copyRect.right-copyRect.left)+1; + mpBI->bmiHeader.biHeight=mHeight=(copyRect.bottom-copyRect.top)+1; + ::InvalidateRect(GetHandle(),NULL,TRUE); + } + else ::GlobalLock(mhGlobalInvert); + updateCaption(); + enableMenu(TRUE); +} + +void ViewWindow::saveBitmap(void) +{ + char bitmapName[MaxFileName]; + + SelectFile selector(GetHandle(),SelectFile::Write); + selector.SetFileSpec(String(STRING_ASTERISKDOTBMP,Main::processInstance())); + if(selector.GetFileName(bitmapName,sizeof(bitmapName))) + { + waitCursor(TRUE); + Bitmap bitmapImage(bitmapName,mhGlobalInvert,mhBMPGlobal); + bitmapImage.saveBitmap(); + waitCursor(FALSE); + } +} + +void ViewWindow::translateMatrix(void) +{ + UHUGE *ptr; + double xFactor; + double yFactor; + + Factor resizeFactor(GetHandle(),"Translate Factor"); + if(!resizeFactor.showFactor(yFactor,xFactor))return; + if(!yFactor && !xFactor)return; + enableMenu(FALSE); + waitCursor(TRUE); + yFactor*=-1; + xFactor*=-1; + HGLOBAL hGlobal=::GlobalAlloc(GMEM_FIXED,(LONG)mWidth*(LONG)mHeight); + ptr=(UHUGE*)::GlobalLock(hGlobal); + TranslationMatrix translation(mHeight,mWidth,(int)xFactor,(int)yFactor,&mhpImageInvert,&ptr); + translation.performTranslation(); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobal; + mhpImageInvert=ptr; + ::InvalidateRect(GetHandle(),NULL,TRUE); + waitCursor(FALSE); + enableMenu(TRUE); +} + +void ViewWindow::shearTransform(void) +{ + HGLOBAL hGlobalTemp; + WORD width(mWidth); + WORD height(mHeight); + double xFactor(0.3); + double yFactor(0.00); + + Factor shearFactor(GetHandle(),"Shear Factors"); + if(!shearFactor.showFactor(xFactor,yFactor))return; + Shear shearTransform; + hGlobalTemp=shearTransform.performShear + (width,height,xFactor,yFactor,mhpImageInvert); + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mpBI->bmiHeader.biWidth=mWidth=width; + mpBI->bmiHeader.biHeight=mHeight=height; + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); +} + +void ViewWindow::warpPerspective(void) +{ + HGLOBAL hGlobalTemp; + Factor::Operation widthOperation; + Factor::Operation heightOperation; + double widthIncremental; + double heightIncremental; + double wRow; + double wCol; + WORD isCancelled; + + Factor resizeFactor(GetHandle(),"Perpective Warp"); + if(!resizeFactor.showFactor( + wRow,wCol, + widthIncremental,widthOperation, + heightIncremental,heightOperation + ))return; + enableMenu(FALSE); + if(Factor::None==widthOperation&&Factor::None==heightOperation) + mpPerspectiveWarp=new PerspectiveWarp(mWidth,mHeight,mhpImageInvert,wRow,wCol); + else + mpPerspectiveWarp=new PerspectiveWarp(mWidth,mHeight,wRow,wCol, + (PerspectiveWarp::Operation)widthOperation,widthIncremental, + (PerspectiveWarp::Operation)heightOperation,heightIncremental,mhpImageInvert); + hGlobalTemp=mpPerspectiveWarp->performPerspectiveWarp(); + isCancelled=mpPerspectiveWarp->isCancelled(); + delete mpPerspectiveWarp; + mpPerspectiveWarp=0; + enableMenu(TRUE); + if(isCancelled)return; + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); +} + +void ViewWindow::warpConvex(void) +{ + HGLOBAL hGlobalTemp; + WORD isCancelled; + + mlpConvexTransform=new Convex; + hGlobalTemp=mlpConvexTransform->performConvex(mWidth,mHeight,mhpImageInvert); + isCancelled=mlpConvexTransform->isCancelled(); + delete mlpConvexTransform; + mlpConvexTransform=0; + if(isCancelled)return; + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); +} + +// ********************************************************************************* + +void ViewWindow::meshWarp(Direction warpDirection) +{ + Vector sourcePairs; + Vector destPairs; + Vector meshFrames; + Vector sourcePoints; + Vector destPoints; + Block intermediatePathFileNames; + HGLOBAL hGlobalOriginal; + UHUGE *lpOriginal; + int originalWidth; + int originalHeight; + HGLOBAL hGlobalTemp(0); + MeshFrames meshFrame; + int newWidth; + int newHeight; + size_t size; + + mlpGridMesh->retrieveMesh(sourcePoints,destPoints); + if((size=(int)sourcePoints.size())!=destPoints.size())return; + sourcePairs.size(destPairs.size(size)); + for(int i=0;irowCols(),newWidth,newHeight); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + if(!hGlobalTemp)break; + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + mpBI->bmiHeader.biWidth=mWidth=newWidth; + mpBI->bmiHeader.biHeight=mHeight=newHeight; + ::InvalidateRect(GetHandle(),NULL,TRUE); + ::UpdateWindow(GetHandle()); + Bitmap bitmapImage(intermediatePathFileNames[i+1],mhGlobalInvert,mhBMPGlobal); + bitmapImage.saveBitmap(); + } + if(!hGlobalTemp) + { + String tempString; + ::sprintf(tempString,"Warp failed at %d",i); + ::MessageBox(GetHandle(),(LPSTR)tempString,(LPSTR)"WARP ERROR",MB_ICONASTERISK); + mhGlobalInvert=hGlobalOriginal; + mhpImageInvert=lpOriginal; + mpBI->bmiHeader.biWidth=mWidth=originalWidth; + mpBI->bmiHeader.biHeight=mHeight=originalHeight; + } + else + { + ::GlobalUnlock(hGlobalOriginal); + ::GlobalFree(hGlobalOriginal); + } + if(WarpForward==warpDirection)createProjectFile(intermediatePathFileNames); + ::InvalidateRect(GetHandle(),NULL,TRUE); + mlpGridMesh->showWindow(); +} + +void ViewWindow::meshWarp(ViewWindow *lpTargetView) +{ + Block intermediateSrcImage; + Block intermediateDstImage; + CrossDissolve crossDissolve; + WORD currentTargetFrames; + + meshWarp(); + currentTargetFrames=lpTargetView->mCurrentMeshFrames; + lpTargetView->mCurrentMeshFrames=mCurrentMeshFrames; + lpTargetView->meshWarp(WarpReverse); + sequentialNames(mPathFileName,intermediateSrcImage,mCurrentMeshFrames); + lpTargetView->sequentialNames(lpTargetView->mPathFileName,intermediateDstImage,lpTargetView->mCurrentMeshFrames); + if(mDissolveSchedule.size()) + crossDissolve.crossDissolve(intermediateSrcImage,intermediateDstImage,mDissolveSchedule); + else crossDissolve.crossDissolve(intermediateSrcImage,intermediateDstImage); + lpTargetView->mCurrentMeshFrames=currentTargetFrames; +} + +void ViewWindow::createProjectFile(Block &pathFileNames) +{ + String projectIDString(STRING_PROJECTIDSTRING,Main::processInstance()); + String projectExtension(STRING_PROJECTEXTENSION,Main::processInstance()); + String carriageReturn(STRING_CRLF,Main::processInstance()); + String dotString(STRING_DOT,Main::processInstance()); + String fileNameString; + size_t size((int)pathFileNames.size()); + + if(!size)return; + fileNameString=pathFileNames[0]; + fileNameString.token(dotString); + fileNameString+=projectExtension; + ofstream outputProject(fileNameString); + if(!outputProject.fail()&&!outputProject.bad()) + { + outputProject << (LPSTR)projectIDString << (LPSTR)carriageReturn; + for(int i=0;i &pathFileNames,int nFrames) +{ + IniFile iniSettings; + String currentExtension(STRING_MESHEXTENSION,Main::processInstance()); + String dotString(STRING_DOT,Main::processInstance()); + String tempString(pathFileName); + String intermediatePathFileName; + + pathFileNames.remove(); + iniSettings.makeFileName(tempString); + intermediatePathFileName=iniSettings.projectDirectory(); + intermediatePathFileName+=tempString; + for(int i=0;i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char ViewWindow::szClassName[]="GIFView"; +char ViewWindow::szMenuName[]=""; +HINSTANCE ViewWindow::smhInstance=0; + +ViewWindow::ViewWindow() +: mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), + mMaxColors(0), mWidth(0), mHeight(0), mhPalette(0), + mhGlobalInvert(0), mhGlobal(0), mhBMPGlobal(0), mpStatusBar(0), + mpProcessImage(0), mpBI(0), mhpImageInvert(0), mhpImage(0), + mhSystemMenu(0), mhFrameMenu(0), mhViewMenu(0), mpSpacial(0), + mpPerspectiveWarp(0), mlpClipboard(0), mlpToolBar(0), mlpGridMesh(0), + mlpConvexTransform(0), mToolbarVisibility(TRUE), mCurrentMeshFrames(DefaultFrames) +{ + mPathFileName[0]=0; +} + +ViewWindow::ViewWindow(const ViewWindow &/*someViewWindow*/) +: mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), + mMaxColors(0), mWidth(0), mHeight(0), mhPalette(0), + mhGlobalInvert(0), mhGlobal(0), mhBMPGlobal(0), mpStatusBar(0), + mpProcessImage(0), mpBI(0), mhpImageInvert(0), mhpImage(0), + mhSystemMenu(0), mhFrameMenu(0), mhViewMenu(0), mpSpacial(0), + mpPerspectiveWarp(0), mlpClipboard(0), mlpToolBar(0), mlpGridMesh(0), + mlpConvexTransform(0), mToolbarVisibility(TRUE), mCurrentMeshFrames(DefaultFrames) +{ + mPathFileName[0]=0; +} + +ViewWindow::~ViewWindow() +{ + if(mhPalette)::DeleteObject(mhPalette); + if(mhGlobalInvert) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + } + if(mhBMPGlobal) + { + ::GlobalUnlock(mhBMPGlobal); + ::GlobalFree(mhBMPGlobal); + } + if(mhViewMenu)::DestroyMenu(mhViewMenu); + if(!mIsDestroyed && GetHandle()) + ::SendMessage(mhClientWindow,WM_MDIDESTROY,(WPARAM)GetHandle(),0L); + if(mlpToolBar)delete mlpToolBar; + if(mlpGridMesh)delete mlpGridMesh; +} + +void ViewWindow::Register(HINSTANCE hInstance) +{ + WNDCLASS wndclass; + + smhInstance=hInstance; + wndclass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndclass.lpfnWndProc =(WNDPROC)MDIWindow::MDIWndProc; + wndclass.cbClsExtra =0; + wndclass.cbWndExtra =sizeof(ViewWindow*); + wndclass.hInstance =hInstance; + wndclass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndclass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndclass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndclass.lpszMenuName =szMenuName; + wndclass.lpszClassName =szClassName; + ::RegisterClass(&wndclass); +} +// *************** GIF DECODER IMAGE ENTRY POINTS ************** + +void ViewWindow::paletteHandler(const UCHAR FAR *paletteData,USHORT numColors) +{ + RGBStruct FAR *pRGB; + int i; + + mMaxColors=numColors; + for(i=0;ibmiHeader.biSize=sizeof(BITMAPINFOHEADER); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + mpBI->bmiHeader.biPlanes=1; + mpBI->bmiHeader.biBitCount=MaxGifBitsPerPixel; + mpBI->bmiHeader.biCompression=BI_RGB; + mpBI->bmiHeader.biSizeImage=0; + mpBI->bmiHeader.biXPelsPerMeter=0; + mpBI->bmiHeader.biYPelsPerMeter=0; + mpBI->bmiHeader.biClrUsed=mMaxColors; + mpBI->bmiHeader.biClrImportant=mMaxColors; + for(i=0;ibmiColors[i]; + pRGBQuad->rgbRed=mPaletteData[i].Red(); + pRGBQuad->rgbGreen=mPaletteData[i].Green(); + pRGBQuad->rgbBlue=mPaletteData[i].Blue(); + pRGBQuad->rgbReserved=0; + } + ::GlobalUnlock(mhGlobal); + ::GlobalFree(mhGlobal); + mhGlobal=0; + return; +} + +void ViewWindow::showHandler(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation) +{ + if(!mhGlobal) + { + mWidth=imageWide; + mHeight=imageDeep; + mhGlobal=::GlobalAlloc(GMEM_FIXED,(long)mWidth*(long)mHeight); + mhpImage=(UHUGE *)::GlobalLock(mhGlobal); + } + Main::hmemcpy(mhpImage+((long)yLocation*(long)mWidth),(UHUGE*)lpRowData,mWidth); + return; +} + +void ViewWindow::errorHandler(const CHAR FAR *errorMessage) +{ + ::MessageBox(GetHandle(),(LPSTR)errorMessage,(LPSTR)"ERROR",MB_ICONASTERISK|MB_OK); + return; +} + +// ************************************************************** + +void ViewWindow::showWindow(HWND hClientWindow,const char *pathFileName,BWindow *statusBar,HMENU hFrameMenu) +{ + mhFrameMenu=hFrameMenu; + mhViewMenu=::LoadMenu(smhInstance,(LPSTR)"viewMenu"); + mhClientWindow=hClientWindow; + mhFrameWindow=::GetParent(mhClientWindow); + mpStatusBar=statusBar; + ::strcpy(mPathFileName,pathFileName); + decodeMDIImage(); + createMDIChildWindow(); + createToolBarWindow(); +} + +void ViewWindow::decodeMDIImage(void) +{ + WORD resultCode; + GIFDecoder *lpGIFDecoder; + + mpStatusBar->setText("Decoding Image."); + waitCursor(TRUE); + lpGIFDecoder=new GIFDecoder(mPathFileName); + assert(0!=lpGIFDecoder); + lpGIFDecoder->setPaletteHandler(this,&ViewWindow::paletteHandler); + lpGIFDecoder->setBackgroundHandler(this,&ViewWindow::backgroundHandler); + lpGIFDecoder->setImageHandler(this,&ViewWindow::imageHandler); + lpGIFDecoder->setShowHandler(this,&ViewWindow::showHandler); + lpGIFDecoder->setErrorHandler(this,&ViewWindow::errorHandler); + resultCode=lpGIFDecoder->unpackImage(); + delete lpGIFDecoder; + if(!resultCode) + { + Bitmap bitmapImage; + bitmapImage=mPathFileName; + if(bitmapImage.isOkay())*this=bitmapImage; + } + waitCursor(FALSE); + mpStatusBar->setText(""); +} + +void ViewWindow::operator=(Bitmap &someBitmap) +{ + RGBQUAD FAR *pRGBQuad; + RGBStruct rgbStruct; + DWORD sizeBitmapInfo; + DWORD sizeImage; + HGLOBAL hGlobalSourceBitmapInfo; + HGLOBAL hGlobalSourceImage; + BITMAPINFO FAR *lpSourceBitmapInfo; + UHUGE *lpSourceImage; + + hGlobalSourceBitmapInfo=someBitmap.lockedBitmapInfo(); +#if defined(__FLAT__) + sizeBitmapInfo=::GlobalSize(hGlobalSourceBitmapInfo); +#else + sizeBitmapInfo=::GetSelectorLimit((UINT)hGlobalSourceBitmapInfo)+1L; +#endif + mhBMPGlobal=::GlobalAlloc(GMEM_FIXED,sizeBitmapInfo); + mpBI=(BITMAPINFO FAR *)::GlobalLock(mhBMPGlobal); + lpSourceBitmapInfo=(BITMAPINFO *)::GlobalLock(hGlobalSourceBitmapInfo); + Main::hmemcpy((UHUGE *)mpBI,(UHUGE *)lpSourceBitmapInfo,sizeBitmapInfo); + ::GlobalUnlock(hGlobalSourceBitmapInfo); + sizeImage=((((mpBI->bmiHeader.biWidth* + mpBI->bmiHeader.biBitCount)+31)&~31)>>3)* + mpBI->bmiHeader.biHeight; + mhGlobalInvert=::GlobalAlloc(GMEM_FIXED,sizeImage); + mhpImageInvert=(UHUGE*)::GlobalLock(mhGlobalInvert); + hGlobalSourceImage=someBitmap.lockedImageData(); + lpSourceImage=(UHUGE*)::GlobalLock(hGlobalSourceImage); + Main::hmemcpy(mhpImageInvert,lpSourceImage,sizeImage); + ::GlobalUnlock(hGlobalSourceImage); + mWidth=(WORD)mpBI->bmiHeader.biWidth; + mHeight=(WORD)mpBI->bmiHeader.biHeight; + if(!(mMaxColors=(WORD)mpBI->bmiHeader.biClrUsed)) + mMaxColors=1 << mpBI->bmiHeader.biBitCount; + for(int i=0;ibmiColors[i]; + rgbStruct.Red(pRGBQuad->rgbRed); + rgbStruct.Green(pRGBQuad->rgbGreen); + rgbStruct.Blue(pRGBQuad->rgbBlue); + mPaletteData.insert(&rgbStruct); + } + createPalette(); +} + +void ViewWindow::createMDIChildWindow(void) +{ + MDICREATESTRUCT createStruct; + + createStruct.szClass=(LPSTR)szClassName; + createStruct.szTitle=(LPSTR)szClassName; + createStruct.hOwner=smhInstance; + createStruct.x=CW_USEDEFAULT; + createStruct.y=CW_USEDEFAULT; + createStruct.cx=CW_USEDEFAULT; + createStruct.cy=CW_USEDEFAULT; + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE|WS_CLIPCHILDREN; + createStruct.lParam=(LONG)this; + ::SendMessage(mhClientWindow,WM_MDICREATE,0,(LONG)(LPMDICREATESTRUCT)&createStruct); + Show(SW_SHOW); + Update(); +} + +void ViewWindow::createToolBarWindow(void) +{ + mlpToolBar=new ToolBar(GetHandle(),String(STRING_LITERALTOOLBAR,Main::processInstance())); + mlpToolBar->addBitmap(String(STRING_LITERALMESH,Main::processInstance()),WM_COMMAND,MENU_TBMESH,0L); + mlpToolBar->addBitmap(String(STRING_LITERALCLIP,Main::processInstance()),WM_COMMAND,MENU_TBCLIP,0L); + mlpToolBar->addBitmap(String(STRING_LITERALBLOAD,Main::processInstance()),WM_COMMAND,MENU_TBLOAD,0L); + mlpToolBar->addBitmap(String(STRING_LITERALBSAVE,Main::processInstance()),WM_COMMAND,MENU_TBSAVE,0L); + mlpToolBar->addBitmap(String(STRING_LITERALTRANSFORMB,Main::processInstance()),WM_COMMAND,MENU_TBTRANSFORMB,0L); + mlpToolBar->addBitmap(String(STRING_LITERALTRANSFORMA,Main::processInstance()),WM_COMMAND,MENU_TBTRANSFORMA,0L); + mlpToolBar->addBitmap(String(STRING_LITERALSIGMA,Main::processInstance()),WM_COMMAND,MENU_TBSIGMA,0L); + mlpToolBar->addBitmap(String(STRING_LITERALDISSOLVE,Main::processInstance()),WM_COMMAND,MENU_DISSOLVE,0L); + mlpToolBar->showWindow(); +} + +void ViewWindow::createPalette(void) +{ + PALETTEENTRY FAR *pPaletteEntry; + LOGPALETTE FAR *pLogPalette; + HGLOBAL hPALGlobal; + + if(mhPalette)::DeleteObject(mhPalette); + hPALGlobal=::GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE,sizeof(LOGPALETTE)+(mMaxColors*sizeof(PALETTEENTRY))); + pLogPalette=(LOGPALETTE FAR *)::GlobalLock(hPALGlobal); + pLogPalette->palNumEntries=mMaxColors; + pLogPalette->palVersion=0x300; + for(int i=0;ipalPalEntry[i]; + pPaletteEntry->peRed=mPaletteData[i].Red(); + pPaletteEntry->peGreen=mPaletteData[i].Green(); + pPaletteEntry->peBlue=mPaletteData[i].Blue(); + pPaletteEntry->peFlags=0; + } + mhPalette=::CreatePalette((LOGPALETTE FAR *)pLogPalette); + ::GlobalUnlock(hPALGlobal); + ::GlobalFree(hPALGlobal); +} + +void ViewWindow::Paint(void) +{ + RECT rect; + PAINTSTRUCT ps; + HDC hDC; + HPALETTE hOldPalette; + HWND activeWindow; + WORD menuState; + WORD errorCount=0; + + ::GetClientRect(GetHandle(),(RECT FAR *)&rect); + activeWindow=(HWND)LOWORD(::SendMessage(mhClientWindow,WM_MDIGETACTIVE,0,0L)); + hDC=::BeginPaint(GetHandle(),&ps); + if(GetHandle()==activeWindow)hOldPalette=::SelectPalette(hDC,mhPalette,FALSE); + else hOldPalette=::SelectPalette(hDC,mhPalette,TRUE); + ::RealizePalette(hDC); + menuState=::GetMenuState(mhSystemMenu,MenuConform,MF_BYCOMMAND); + if(!(menuState&MF_CHECKED)) + ::StretchDIBits(hDC,0,0,rect.right,rect.bottom,0,0,mWidth,mHeight,mhpImageInvert,(BITMAPINFO *)mpBI,DIB_RGB_COLORS,SRCCOPY); + else + { + while(!::StretchDIBits(hDC,0,0,mWidth,mHeight,0,0,mWidth,mHeight,mhpImageInvert,(BITMAPINFO *)mpBI,DIB_RGB_COLORS,SRCCOPY)) + { + errorCount++; + ::MessageBeep(0); + mWidth--; + mHeight--; + if((int)mWidth-1<0 || (int)mHeight-1<0)break; + ::GlobalUnlock(mhGlobalInvert); + Resize resizeImage(mWidth+1,mHeight+1,mWidth,mHeight,mhGlobalInvert); + HGLOBAL hGlobalTemp=resizeImage.resizeImage(); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE *)::GlobalLock(hGlobalTemp); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + } + if(errorCount)updateCaption(); + } + if(GetHandle()==activeWindow)::SelectPalette(hDC,hOldPalette,FALSE); + else ::SelectPalette(hDC,hOldPalette,TRUE); + ::EndPaint(GetHandle(),&ps); + if(mlpGridMesh)mlpGridMesh->suspendMesh(FALSE); +} + +void ViewWindow::updateCaption(void)const +{ + char Buffer[MaxFileName]; + char *ptr; + + ::GetWindowText(GetHandle(),(LPSTR)Buffer,sizeof(Buffer)); + ptr=Buffer+::strlen(Buffer)-1; + while(*ptr!='-')ptr--; + ptr+=2; + ::sprintf(ptr,"%dx%dx%d",mWidth,mHeight,mMaxColors); + ::SetWindowText(GetHandle(),(LPSTR)Buffer); +} + +void ViewWindow::modifySystemMenu(void) +{ + if(mhSystemMenu)return; + + mhSystemMenu=::GetSystemMenu(GetHandle(),FALSE); + ::AppendMenu(mhSystemMenu,MF_SEPARATOR,0,0); + ::AppendMenu(mhSystemMenu,MF_STRING|MF_CHECKED,MenuConform,(LPSTR)"Non-Conforming"); + ::DrawMenuBar(GetHandle()); +} + +void ViewWindow::handleDestroyEvent() +{ + if(mpProcessImage)mpProcessImage->cancelThread(); + if(mpSpacial)mpSpacial->cancelThread(); + if(mpPerspectiveWarp)mpPerspectiveWarp->cancelThread(); + if(mlpConvexTransform)mlpConvexTransform->cancelThread(); + if(mlpClipboard)delete mlpClipboard; + mIsDestroyed=TRUE; + return; +} + +void ViewWindow::handleActivateEvent(WPARAM wParam,LPARAM /*lParam*/) +{ + if(wParam) + { + if(mlpGridMesh)mlpGridMesh->suspendMesh(TRUE); + HDC inhDC(::GetDC(GetHandle())); + ::SelectPalette(inhDC,mhPalette,FALSE); + ::SendMessage(mhFrameWindow,WM_COMMAND,IDM_INVALIDATEMDIWINDOWS,MAKELPARAM(0,0)); + if(::RealizePalette(inhDC)>0)::InvalidateRect(GetHandle(),0,TRUE); + ::ReleaseDC(GetHandle(),inhDC); +#if defined(__FLAT__) + ::SendMessage(mhClientWindow,WM_MDISETMENU,(WPARAM)mhViewMenu,(LPARAM)::GetSubMenu(mhViewMenu,0)); +#else + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhViewMenu,::GetSubMenu(mhViewMenu,0))); +#endif + if(mToolbarVisibility&&mlpToolBar&&!mlpToolBar->isVisible())mlpToolBar->showWindow(); + } + else + { + if(mlpToolBar&&mlpToolBar->isVisible())mlpToolBar->showWindow(FALSE); + if(mlpGridMesh)mlpGridMesh->showWindow(TRUE); +#if defined(__FLAT__) + ::SendMessage(mhClientWindow,WM_MDISETMENU,(WPARAM)mhFrameMenu,(LPARAM)0); +#else + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhFrameMenu,0)); +#endif + } + ::DrawMenuBar(mhFrameWindow); + return; +} + +long ViewWindow::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + { + char buffer[100]; + + mlpClipboard=new Clipboard(GetHandle()); + assert(0!=mlpClipboard); + ::SetWindowText(GetHandle(),(LPSTR)mPathFileName); + ::sprintf(buffer,"%s - %dx%dx%d",mPathFileName,mWidth,mHeight,mMaxColors); + ::SetWindowText(GetHandle(),(LPSTR)buffer); + modifySystemMenu(); + mCapture=GetHandle(); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + } + return FALSE; + case WM_CHANGECBCHAIN : + if(!mlpClipboard)break; + mlpClipboard->changeClipboardChain(message,wParam,lParam); + return FALSE; + case WM_DRAWCLIPBOARD : + if(!mlpClipboard)break; + if(mlpClipboard->drawClipboard(message,wParam,lParam)) + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_ENABLED); + return FALSE; + case WM_LBUTTONDOWN : + mCapture.leftButtonDown(lParam); + return FALSE; + case WM_MOUSEMOVE : + mCapture.mouseMove(lParam); + return FALSE; + case WM_LBUTTONUP : + mCapture.leftButtonUp(); + return FALSE; + case WM_PAINT : + Paint(); + return FALSE; + case WM_MDIACTIVATE : +#if defined(__FLAT__) + handleActivateEvent((WPARAM)lParam,(LPARAM)wParam); +#else + handleActivateEvent(wParam,lParam); +#endif + return FALSE; + case WM_QUERYENDSESSION : + break; + case WM_DESTROY : + handleDestroyEvent(); + return FALSE; + case WM_SYSCOMMAND : + handleSystemMenuEvent(wParam); + break; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case MenuConform : + ::SendMessage(GetHandle(),WM_SYSCOMMAND,MenuConform,0L); + return FALSE; + case MENU_SMOOTHING : + imageProcessing(); + return FALSE; + case MENU_RESIZE : + resizeImage(); + return FALSE; + case MENU_TRANSLATE : + translateMatrix(); + return FALSE; + case MENU_SHEAR : + shearTransform(); + return FALSE; + case MENU_WARP_PERSPECTIVE : + warpPerspective(); + return FALSE; + case MENU_WARP_CONVEX : + warpConvex(); + return FALSE; + case MENU_CLIP : + menuClip(); + return FALSE; + case MENU_DISSOLVE : + { + AdjustDissolve adjustDissolve(GetHandle()); + adjustDissolve.adjustDissolve(mDissolveSchedule,mCurrentMeshFrames); + } + return FALSE; + case MENU_TBSIGMA : + { + FrameDialog frameDialog(GetHandle()); + frameDialog.performFrameDialog(mCurrentMeshFrames); + } + return FALSE; + case MENU_TBLOAD : + case MENU_TBSAVE : + case MENU_TBTRANSFORMB : + case MENU_TBTRANSFORMA : + case IDM_WINLIST : + handleMeshRequest(wParam,lParam); + return FALSE; + case MENU_TBCLIP : + mCapture.reset(); + if(mlpGridMesh) + { + delete mlpGridMesh; + mlpGridMesh=0; + } + return FALSE; + case MENU_TBMESH : + if(!mlpGridMesh)mlpGridMesh=new GridMesh(GetHandle(),mWidth,mHeight); + else mlpGridMesh->newMesh(mlpGridMesh->gridLines()+2); + return FALSE; + case MENU_FILE_SAVEBITMAP : + saveBitmap(); + return FALSE; + case MENU_PALETTE_VIEW : + { + PaletteDialog viewPalette(GetHandle(),mhPalette); + viewPalette.showPalette(); + return FALSE; + } + case IDM_TOOLBAR : + handleToolbarToggle(); + break; + default : + return FALSE; + } + } + return ::DefMDIChildProc(GetHandle(),message,wParam,lParam); +} + +// ************************************************************** + +void ViewWindow::handleToolbarToggle(void) +{ + String showToolbarString(STRING_SHOWTOOLBAR,Main::processInstance()); + String hideToolbarString(STRING_HIDETOOLBAR,Main::processInstance()); + String menuString; + + ::GetMenuString(mhViewMenu,IDM_TOOLBAR,menuString,String::MaxString,MF_BYCOMMAND); + if(showToolbarString==menuString) + { + ::ModifyMenu(mhViewMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)hideToolbarString); + mlpToolBar->showWindow(TRUE); + mToolbarVisibility=TRUE; + } + else + { + ::ModifyMenu(mhViewMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)showToolbarString); + mlpToolBar->showWindow(FALSE); + mToolbarVisibility=FALSE; + } + ::DrawMenuBar(GetHandle()); +} + +void ViewWindow::handleMeshRequest(WPARAM wParam,LPARAM lParam) +{ + String meshFileName(mPathFileName); + String meshPathFileName; + + IniFile iniSettings; + iniSettings.makeFileName(meshFileName); + meshFileName.token(".\0"); + meshFileName+=".MSH"; + meshPathFileName=iniSettings.meshDirectory(); + meshPathFileName+=meshFileName; + switch(wParam) + { + case MENU_TBLOAD : + if(!mlpGridMesh)mlpGridMesh=new GridMesh(GetHandle(),mWidth,mHeight,GridMesh::NoShow); + mlpGridMesh->loadMesh(meshPathFileName); + break; + case MENU_TBTRANSFORMA : + if(!mlpGridMesh){::MessageBeep(0);break;} + meshWarp(); + break; + case MENU_TBTRANSFORMB : + if(!mlpGridMesh){::MessageBeep(0);break;} + ::PostMessage(mhFrameWindow,WM_COMMAND,IDM_GETWINLIST,MAKELPARAM(GetHandle(),0)); + break; + case IDM_WINLIST : + { + WORD itemIndex; + Block *lpViewBlock=(Block*)(lParam); + if(!lpViewBlock||!lpViewBlock->size()){::MessageBeep(0);break;} + ViewSelect selectView(GetHandle()); + if(selectView.selectView(*lpViewBlock,itemIndex,mWidth,mHeight))meshWarp((*lpViewBlock)[itemIndex].windowPtr()); + delete lpViewBlock; + } + break; + case MENU_TBSAVE : + if(!mlpGridMesh)break; + mlpGridMesh->saveMesh(meshPathFileName); + break; + } + return; +} + +void ViewWindow::handleSystemMenuEvent(WPARAM wParam)const +{ + WORD menuState; + + switch(wParam) + { + case MenuConform : + menuState=::GetMenuState(mhSystemMenu,MenuConform,MF_BYCOMMAND); + ::CheckMenuItem(mhSystemMenu,MenuConform,MF_BYCOMMAND | + (menuState&MF_CHECKED?MF_UNCHECKED:MF_CHECKED)); + ::DrawMenuBar(GetHandle()); + ::InvalidateRect(GetHandle(),NULL,TRUE); + } +} + +void ViewWindow::enableMenu(const char isEnabled)const +{ + if(isEnabled) + { + ::EnableMenuItem(mhViewMenu,MENU_CUT,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_COPY,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_SMOOTHING,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_RESIZE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_TRANSLATE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_WARP_PERSPECTIVE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_FILE_SAVEBITMAP,MF_BYCOMMAND|MF_ENABLED); + } + else + { + ::EnableMenuItem(mhViewMenu,MENU_CUT,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_COPY,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_SMOOTHING,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_RESIZE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_TRANSLATE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_WARP_PERSPECTIVE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_FILE_SAVEBITMAP,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + } +} + +void ViewWindow::imageProcessing(void) +{ + enableMenu(FALSE); + mpProcessImage=new Process(mhPalette,mhpImageInvert,mWidth,mHeight); + if(mpProcessImage->showProcess(GetHandle(),mPathFileName) && !mIsDestroyed) + ::InvalidateRect(GetHandle(),NULL,TRUE); + if(!mIsDestroyed)enableMenu(TRUE); + delete mpProcessImage; + mpProcessImage=0; +} + +void ViewWindow::resizeImage(void) +{ + HGLOBAL hGlobal; + double sizeFactor; + + Factor resizeFactor(GetHandle(),"Resize Factor"); + if(!resizeFactor.showFactor(sizeFactor,sizeFactor)||!sizeFactor)return; + enableMenu(FALSE); + mpSpacial=new SpacialTransform(mhPalette,mhpImageInvert,mWidth,mHeight,sizeFactor); + hGlobal=mpSpacial->resizeImage(); + if(mpSpacial->isCancelled()) + { + delete mpSpacial; + mpSpacial=0; + return; + } + delete mpSpacial; + mpSpacial=0; + if(hGlobal) + { + mWidth*=(sizeFactor/100.00); + mHeight*=(sizeFactor/100.00); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobal; + mhpImageInvert=(UHUGE *)::GlobalLock(mhGlobalInvert); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + } + ::InvalidateRect(GetHandle(),NULL,TRUE); + enableMenu(TRUE); + updateCaption(); +} + +void ViewWindow::menuClip(void) +{ + RECT copyRect; + HGLOBAL hGlobalResizedImage; + UHUGE *ptrResizedImage; + + if(!mCapture.hasRectangle())return; + mCapture.boundedRect(copyRect); + enableMenu(FALSE); + ::GlobalUnlock(mhGlobalInvert); + Resize resizeImage(mWidth,mHeight,copyRect,mhGlobalInvert); + if(0!=(hGlobalResizedImage=resizeImage.resizeImage())) + { + ::GlobalFree(mhGlobalInvert); + ptrResizedImage=(UHUGE *)::GlobalLock(hGlobalResizedImage); + mhGlobalInvert=hGlobalResizedImage; + mhpImageInvert=ptrResizedImage; + mpBI->bmiHeader.biWidth=mWidth=(copyRect.right-copyRect.left)+1; + mpBI->bmiHeader.biHeight=mHeight=(copyRect.bottom-copyRect.top)+1; + ::InvalidateRect(GetHandle(),NULL,TRUE); + } + else ::GlobalLock(mhGlobalInvert); + updateCaption(); + enableMenu(TRUE); +} + +void ViewWindow::saveBitmap(void) +{ + char bitmapName[MaxFileName]; + + SelectFile selector(GetHandle(),SelectFile::Write); + selector.SetFileSpec(String(STRING_ASTERISKDOTBMP,Main::processInstance())); + if(selector.GetFileName(bitmapName,sizeof(bitmapName))) + { + waitCursor(TRUE); + Bitmap bitmapImage(bitmapName,mhGlobalInvert,mhBMPGlobal); + bitmapImage.saveBitmap(); + waitCursor(FALSE); + } +} + +void ViewWindow::translateMatrix(void) +{ + UHUGE *ptr; + double xFactor; + double yFactor; + + Factor resizeFactor(GetHandle(),"Translate Factor"); + if(!resizeFactor.showFactor(yFactor,xFactor))return; + if(!yFactor && !xFactor)return; + enableMenu(FALSE); + waitCursor(TRUE); + yFactor*=-1; + xFactor*=-1; + HGLOBAL hGlobal=::GlobalAlloc(GMEM_FIXED,(LONG)mWidth*(LONG)mHeight); + ptr=(UHUGE*)::GlobalLock(hGlobal); + TranslationMatrix translation(mHeight,mWidth,(int)xFactor,(int)yFactor,&mhpImageInvert,&ptr); + translation.performTranslation(); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobal; + mhpImageInvert=ptr; + ::InvalidateRect(GetHandle(),NULL,TRUE); + waitCursor(FALSE); + enableMenu(TRUE); +} + +void ViewWindow::shearTransform(void) +{ + HGLOBAL hGlobalTemp; + WORD width(mWidth); + WORD height(mHeight); + double xFactor(0.3); + double yFactor(0.00); + + Factor shearFactor(GetHandle(),"Shear Factors"); + if(!shearFactor.showFactor(xFactor,yFactor))return; + Shear shearTransform; + hGlobalTemp=shearTransform.performShear + (width,height,xFactor,yFactor,mhpImageInvert); + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mpBI->bmiHeader.biWidth=mWidth=width; + mpBI->bmiHeader.biHeight=mHeight=height; + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); +} + +void ViewWindow::warpPerspective(void) +{ + HGLOBAL hGlobalTemp; + Factor::Operation widthOperation; + Factor::Operation heightOperation; + double widthIncremental; + double heightIncremental; + double wRow; + double wCol; + WORD isCancelled; + + Factor resizeFactor(GetHandle(),"Perpective Warp"); + if(!resizeFactor.showFactor( + wRow,wCol, + widthIncremental,widthOperation, + heightIncremental,heightOperation + ))return; + enableMenu(FALSE); + if(Factor::None==widthOperation&&Factor::None==heightOperation) + mpPerspectiveWarp=new PerspectiveWarp(mWidth,mHeight,mhpImageInvert,wRow,wCol); + else + mpPerspectiveWarp=new PerspectiveWarp(mWidth,mHeight,wRow,wCol, + (PerspectiveWarp::Operation)widthOperation,widthIncremental, + (PerspectiveWarp::Operation)heightOperation,heightIncremental,mhpImageInvert); + hGlobalTemp=mpPerspectiveWarp->performPerspectiveWarp(); + isCancelled=mpPerspectiveWarp->isCancelled(); + delete mpPerspectiveWarp; + mpPerspectiveWarp=0; + enableMenu(TRUE); + if(isCancelled)return; + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); +} + +void ViewWindow::warpConvex(void) +{ + HGLOBAL hGlobalTemp; + WORD isCancelled; + + mlpConvexTransform=new Convex; + hGlobalTemp=mlpConvexTransform->performConvex(mWidth,mHeight,mhpImageInvert); + isCancelled=mlpConvexTransform->isCancelled(); + delete mlpConvexTransform; + mlpConvexTransform=0; + if(isCancelled)return; + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); +} + +// ********************************************************************************* + +void ViewWindow::meshWarp(Direction warpDirection) +{ + Vector sourcePairs; + Vector destPairs; + Vector meshFrames; + Vector sourcePoints; + Vector destPoints; + Block intermediatePathFileNames; + HGLOBAL hGlobalOriginal; + UHUGE *lpOriginal; + int originalWidth; + int originalHeight; + HGLOBAL hGlobalTemp(0); + MeshFrames meshFrame; + int newWidth; + int newHeight; + size_t size; + + mlpGridMesh->retrieveMesh(sourcePoints,destPoints); + if((size=(int)sourcePoints.size())!=destPoints.size())return; + sourcePairs.size(destPairs.size(size)); + for(int i=0;irowCols(),newWidth,newHeight); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + if(!hGlobalTemp)break; + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + mpBI->bmiHeader.biWidth=mWidth=newWidth; + mpBI->bmiHeader.biHeight=mHeight=newHeight; + ::InvalidateRect(GetHandle(),NULL,TRUE); + ::UpdateWindow(GetHandle()); + Bitmap bitmapImage(intermediatePathFileNames[i+1],mhGlobalInvert,mhBMPGlobal); + bitmapImage.saveBitmap(); + } + if(!hGlobalTemp) + { + String tempString; + ::sprintf(tempString,"Warp failed at %d",i); + ::MessageBox(GetHandle(),(LPSTR)tempString,(LPSTR)"WARP ERROR",MB_ICONASTERISK); + mhGlobalInvert=hGlobalOriginal; + mhpImageInvert=lpOriginal; + mpBI->bmiHeader.biWidth=mWidth=originalWidth; + mpBI->bmiHeader.biHeight=mHeight=originalHeight; + } + else + { + ::GlobalUnlock(hGlobalOriginal); + ::GlobalFree(hGlobalOriginal); + } + if(WarpForward==warpDirection)createProjectFile(intermediatePathFileNames); + ::InvalidateRect(GetHandle(),NULL,TRUE); + mlpGridMesh->showWindow(); +} + +void ViewWindow::meshWarp(ViewWindow *lpTargetView) +{ + Block intermediateSrcImage; + Block intermediateDstImage; + CrossDissolve crossDissolve; + WORD currentTargetFrames; + + meshWarp(); + currentTargetFrames=lpTargetView->mCurrentMeshFrames; + lpTargetView->mCurrentMeshFrames=mCurrentMeshFrames; + lpTargetView->meshWarp(WarpReverse); + sequentialNames(mPathFileName,intermediateSrcImage,mCurrentMeshFrames); + lpTargetView->sequentialNames(lpTargetView->mPathFileName,intermediateDstImage,lpTargetView->mCurrentMeshFrames); + if(mDissolveSchedule.size()) + crossDissolve.crossDissolve(intermediateSrcImage,intermediateDstImage,mDissolveSchedule); + else crossDissolve.crossDissolve(intermediateSrcImage,intermediateDstImage); + lpTargetView->mCurrentMeshFrames=currentTargetFrames; +} + +void ViewWindow::createProjectFile(Block &pathFileNames) +{ + String projectIDString(STRING_PROJECTIDSTRING,Main::processInstance()); + String projectExtension(STRING_PROJECTEXTENSION,Main::processInstance()); + String carriageReturn(STRING_CRLF,Main::processInstance()); + String dotString(STRING_DOT,Main::processInstance()); + String fileNameString; + size_t size((int)pathFileNames.size()); + + if(!size)return; + fileNameString=pathFileNames[0]; + fileNameString.token(dotString); + fileNameString+=projectExtension; + ofstream outputProject(fileNameString); + if(!outputProject.fail()&&!outputProject.bad()) + { + outputProject << (LPSTR)projectIDString << (LPSTR)carriageReturn; + for(int i=0;i &pathFileNames,int nFrames) +{ + IniFile iniSettings; + String currentExtension(STRING_MESHEXTENSION,Main::processInstance()); + String dotString(STRING_DOT,Main::processInstance()); + String tempString(pathFileName); + String intermediatePathFileName; + + pathFileNames.remove(); + iniSettings.makeFileName(tempString); + intermediatePathFileName=iniSettings.projectDirectory(); + intermediatePathFileName+=tempString; + for(int i=0;i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class ViewWindow : public MDIWindow +{ +public: + ViewWindow(void); + ViewWindow(const ViewWindow &someViewWindow); + void showWindow(HWND hClientWindow,const char *pathFileName,BWindow *statusBar,HMENU hFrameMenu); + virtual ~ViewWindow(); + int operator==(const ViewWindow &someViewWindow)const; + static void Register(HINSTANCE hInstance); + static char far *className(void); + WORD isDestroyed(void)const; + WORD hasMesh(void)const; + HWND handle(void)const; + WORD width(void)const; + WORD height(void)const; + void showMesh(void)const; +private: + typedef long Index; + enum {MaxFileName=70,MaxGifBitsPerPixel=8,DefaultFrames=3}; + enum {MenuConform=0x0F}; + enum Direction{WarpForward,WarpReverse}; + void Paint(void); + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + void paletteHandler(const UCHAR FAR *paletteData,USHORT numColors); + void backgroundHandler(USHORT backgroundColor); + void imageHandler(void); + void showHandler(USHORT imageWide,USHORT imageDeep,const UCHAR FAR *lpRowData,USHORT yLocation); + void errorHandler(const CHAR FAR *errorMessage); + + void handleMeshRequest(WPARAM wParam,LPARAM lParam); + void handleDestroyEvent(void); + void handleActivateEvent(WPARAM wParam,LPARAM lParam); + void handleSystemMenuEvent(WPARAM wParam)const; + void handleToolbarToggle(void); + void enableMenu(const char isEnabled)const; + void modifySystemMenu(void); + void updateCaption(void)const; + void createMDIChildWindow(void); + void createToolBarWindow(void); + void createPalette(void); + void decodeMDIImage(void); + void operator=(Bitmap &someBitmap); + + void imageProcessing(void); + void menuClip(void); + void resizeImage(void); + void meshWarp(Direction warpDirection=WarpForward); + void meshWarp(ViewWindow *lpTargetView); + void warpPerspective(void); + void warpConvex(void); + void translateMatrix(void); + void shearTransform(void); + void saveBitmap(void); + void sequentialNames(const String &pathFileName,Block &pathFileNames,int nFrames); + void createProjectFile(Block &pathFileNames); + + static char szClassName[]; + static char szMenuName[]; + static HINSTANCE smhInstance; + + int mCurrentMeshFrames; + WORD mToolbarVisibility; + WORD mMaxColors; + WORD mWidth; + WORD mHeight; + char mPathFileName[MaxFileName+1]; + Capture mCapture; + HWND mhClientWindow; + HWND mhFrameWindow; + WORD mIsDestroyed; + HMENU mhSystemMenu; + HMENU mhFrameMenu; + HMENU mhViewMenu; + HPALETTE mhPalette; + HGLOBAL mhGlobalInvert; + HGLOBAL mhGlobal; + HGLOBAL mhBMPGlobal; + Clipboard *mlpClipboard; + BWindow *mpStatusBar; + Process *mpProcessImage; + SpacialTransform *mpSpacial; + PerspectiveWarp *mpPerspectiveWarp; + Convex *mlpConvexTransform; + BITMAPINFO FAR *mpBI; + UHUGE *mhpImageInvert; + UHUGE *mhpImage; + ToolBar *mlpToolBar; + GridMesh *mlpGridMesh; + Block mPaletteData; + Block mDissolveSchedule; +}; +#include +#endif + + \ No newline at end of file diff --git a/mdiwin/VIEW.IPP b/mdiwin/VIEW.IPP new file mode 100644 index 0000000..eecca78 --- /dev/null +++ b/mdiwin/VIEW.IPP @@ -0,0 +1,51 @@ +#ifndef _VIEW_HPP_ +#error VIEW.HPP must precede VIEW.IPP +#endif +inline +char far *ViewWindow::className(void) +{ + return szClassName; +} + +inline +int ViewWindow::operator==(const ViewWindow &someViewWindow)const +{ + return (GetHandle()==someViewWindow.GetHandle()); +} + +inline +WORD ViewWindow::isDestroyed(void)const +{ + return mIsDestroyed; +} + +inline +HWND ViewWindow::handle(void)const +{ + return GetHandle(); +} + +inline +WORD ViewWindow::hasMesh(void)const +{ + return (mlpGridMesh?TRUE:FALSE); +} + +inline +WORD ViewWindow::width(void)const +{ + return mWidth; +} + +inline +WORD ViewWindow::height(void)const +{ + return mHeight; +} + +inline +void ViewWindow::showMesh(void)const +{ + if(mlpGridMesh)mlpGridMesh->showWindow(); +} + \ No newline at end of file diff --git a/mdiwin/VIEWCNTR.HPP b/mdiwin/VIEWCNTR.HPP new file mode 100644 index 0000000..bde768e --- /dev/null +++ b/mdiwin/VIEWCNTR.HPP @@ -0,0 +1,54 @@ +#ifndef _VIEWCONTAINER_HPP_ +#define _VIEWCONTAINER_HPP_ +#include +#include + +class ViewContainer +{ +public: + ViewContainer(void); + ViewContainer(ViewWindow *lpViewWindow); + ViewContainer(const ViewContainer &someViewContainer); + ~ViewContainer(void); + WORD operator==(const ViewContainer &someViewContainer)const; + ViewWindow *windowPtr(void); +private: + ViewWindow *mlpViewWindow; +}; + +inline +ViewContainer::ViewContainer(void) +: mlpViewWindow(0) +{ +} + +inline +ViewContainer::ViewContainer(ViewWindow *lpViewWindow) +: mlpViewWindow(lpViewWindow) +{ +} + +inline +ViewContainer::ViewContainer(const ViewContainer &someViewContainer) +: mlpViewWindow(someViewContainer.mlpViewWindow) +{ +} + +inline +ViewContainer::~ViewContainer() +{ +} + +inline +WORD ViewContainer::operator==(const ViewContainer &someViewContainer)const +{ + return (mlpViewWindow==someViewContainer.mlpViewWindow?TRUE:FALSE); +} + +inline +ViewWindow *ViewContainer::windowPtr(void) +{ + return mlpViewWindow; +} +#endif + \ No newline at end of file diff --git a/mdiwin/VIEWSEL.CPP b/mdiwin/VIEWSEL.CPP new file mode 100644 index 0000000..96a0774 --- /dev/null +++ b/mdiwin/VIEWSEL.CPP @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +ViewSelect::ViewSelect(HWND hParent) +: mhParent(hParent) +{ +} + +ViewSelect::~ViewSelect() +{ +} + +WORD ViewSelect::selectView(Block &viewContainer,WORD &itemIndex,WORD width,WORD height) +{ + HINSTANCE hInstance; + WORD returnCode; + + if(!copyBlock(viewContainer))return FALSE; + mWidth=width; + mHeight=height; +#if defined(__FLAT__) + hInstance=(HINSTANCE)::GetWindowLong(mhParent,GWL_HINSTANCE); +#else + hInstance=(HINSTANCE)::GetWindowWord(mhParent,GWW_HINSTANCE); +#endif + if(0!=(returnCode=::DialogBoxParam(hInstance,(LPSTR)"ViewSelect",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)))) + itemIndex=mItemIndex; + return returnCode; +} + +int ViewSelect::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,Main::processInstance()), + String(STRING_BITMAPCANOFUP,Main::processInstance()), + String(STRING_BITMAPCAFOCUSDN,Main::processInstance()), + OwnerDraw::NOFOCUS); + loadItemData(); + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + break; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case VIEWSEL_LIST : + if(handleListBoxEvent(lParam)) + { + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + } + break; + case IDCANCEL : + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + +WORD ViewSelect::copyBlock(Block &viewContainer) +{ + size_t size((int)viewContainer.size()); + + if(!size)return FALSE; + mViewContainer.remove(); + for(int i=0;ihandle(),tempString,String::MaxString-1); + iniProfile.makeFileName(tempString); + for(int i=0;i +#include +#include + +class ViewSelect : public DWindow +{ +public: + ViewSelect(HWND hParent); + ~ViewSelect(); + WORD selectView(Block &viewContainer,WORD &itemIndex,WORD width,WORD height); +private: + enum{NumTabs=10}; + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + WORD copyBlock(Block &viewContainer); + void loadItemData(void); + WORD handleListBoxEvent(LPARAM lParam); + + HWND mhParent; + Block mViewContainer; + WORD mWidth; + WORD mHeight; + WORD mItemIndex; +}; +#endif diff --git a/mdiwin/WINDOW.CPP b/mdiwin/WINDOW.CPP new file mode 100644 index 0000000..c1dabc6 --- /dev/null +++ b/mdiwin/WINDOW.CPP @@ -0,0 +1,40 @@ +#include + +Window::Window() +: mhWnd(0) +{ +} + +Window::~Window() +{ + if(GetHandle())::DestroyWindow(GetHandle()); +} + +LONG FAR PASCAL Window::WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) +{ + Window *pWindow=Window::GetPointer(hWnd); + + if(pWindow) + { + long retCode=pWindow->WndProc(message,wParam,lParam); + if(WM_NCDESTROY==message) + { + Window::SetPointer(hWnd,0); + pWindow->SetHandle(0); + } + return retCode; + } + if(message==WM_NCCREATE) + { + ::DefWindowProc(hWnd,message,wParam,lParam); + LPCREATESTRUCT lpcs=(LPCREATESTRUCT)lParam; + pWindow=(Window *)lpcs->lpCreateParams; + if(!pWindow)return FALSE; + Window::SetPointer(hWnd,pWindow); + pWindow->SetHandle(hWnd); + return pWindow->WndProc(message,wParam,lParam); + } + return ::DefWindowProc(hWnd,message,wParam,lParam); +} + + diff --git a/mdiwin/WINDOW.HPP b/mdiwin/WINDOW.HPP new file mode 100644 index 0000000..c952198 --- /dev/null +++ b/mdiwin/WINDOW.HPP @@ -0,0 +1,82 @@ +#ifndef _WINDOW_HPP_ +#define _WINDOW_HPP_ +#include +#include + +class Window : public CursorControl +{ +public: + Window(); + ~Window(); + HWND GetHandle(void)const; + int Show(int nCmdShow); + void Update(void); +#if defined (__SMALL__) || defined (__MEDIUM__) + static Window *Window::GetPointer(HWND hWnd); + static void Window::SetPointer(HWND hWnd,Window *pWindow); +#else + static Window *Window::GetPointer(HWND hWnd); + static void Window::SetPointer(HWND hWnd,Window *pWindow); +#endif + void SetHandle(HWND hWnd); + virtual long WndProc(UINT message,WPARAM wParam,LPARAM lParam)=0; +protected: + +private: + +// friend long FAR PASCAL _export WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); + __declspec(dllexport) static LONG FAR PASCAL WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); + HWND mhWnd; +}; + +inline +HWND Window::GetHandle(void)const +{ + if(::IsWindow(mhWnd))return mhWnd; + return 0; +} + +inline void Window::SetHandle(HWND hWnd) +{ + mhWnd=hWnd; +} + +inline +int Window::Show(int nCmdShow) +{ + if(!GetHandle())return FALSE; + return ::ShowWindow(GetHandle(),nCmdShow); +} + +inline +void Window::Update(void) +{ + if(!GetHandle())return; + ::UpdateWindow(GetHandle()); +} + +#if defined (__SMALL__) || defined (__MEDIUM__) +inline +Window *Window::GetPointer(HWND hWnd) +{ + return (Window*)GetWindowWord(hWnd,0); + +} +inline +void Window::SetPointer(HWND hWnd,Window *pWindow) +{ + SetWindowWord(hWnd,0,(WORD)pWindow); +} +#else +inline +Window *Window::GetPointer(HWND hWnd) +{ + return (Window*)::GetWindowLong(hWnd,0); +} +inline +void Window::SetPointer(HWND hWnd,Window *pWindow) +{ + ::SetWindowLong(hWnd,0,(LONG)pWindow); +} +#endif +#endif \ No newline at end of file diff --git a/mdiwin/WINDOWS.BAK b/mdiwin/WINDOWS.BAK new file mode 100644 index 0000000..bd5a8dc --- /dev/null +++ b/mdiwin/WINDOWS.BAK @@ -0,0 +1,15 @@ +#ifndef _COMMON_WINDOWS_HPP_ +#define _COMMON_WINDOWS_HPP_ +#define WIN32_LEAN_AND_MEAN +#define NOSERVICE +#define NOKANJI +#define NOCRYPT +#define NOMCX +#include +typedef unsigned short USHORT; +#ifndef DS_3DLOOK +#define DS_3DLOOK 0x0004L +#endif +#endif + + \ No newline at end of file diff --git a/mdiwin/WINDOWS.HPP b/mdiwin/WINDOWS.HPP new file mode 100644 index 0000000..bd5a8dc --- /dev/null +++ b/mdiwin/WINDOWS.HPP @@ -0,0 +1,15 @@ +#ifndef _COMMON_WINDOWS_HPP_ +#define _COMMON_WINDOWS_HPP_ +#define WIN32_LEAN_AND_MEAN +#define NOSERVICE +#define NOKANJI +#define NOCRYPT +#define NOMCX +#include +typedef unsigned short USHORT; +#ifndef DS_3DLOOK +#define DS_3DLOOK 0x0004L +#endif +#endif + + \ No newline at end of file diff --git a/mdiwin/WINDOWSX.HPP b/mdiwin/WINDOWSX.HPP new file mode 100644 index 0000000..a804e4f --- /dev/null +++ b/mdiwin/WINDOWSX.HPP @@ -0,0 +1,8 @@ +#ifndef _WINDOWSX_HPP_ +#define _WINDOWSX_HPP_ +#include +#if defined(__FLAT__) +#undef hmemcpy +#define hmemcpy hmemcpy +#endif +#endif diff --git a/mdiwin/roundel2.bmp b/mdiwin/roundel2.bmp new file mode 100644 index 0000000..b5f6aeb Binary files /dev/null and b/mdiwin/roundel2.bmp differ diff --git a/mdiwin/safe/FILEHELP.CPP b/mdiwin/safe/FILEHELP.CPP new file mode 100644 index 0000000..1828275 --- /dev/null +++ b/mdiwin/safe/FILEHELP.CPP @@ -0,0 +1,349 @@ +#include +#include +//#include +#include +#include +#include +#include +#include + +SelectFile::SelectFile(HWND hParent,Mode readWrite) +: mwFileAttribute((WORD)DefaultAttribute), mhParent(hParent), + mMode(readWrite), mhInstance(Main::processInstance(mhParent)) +{ + mszFileName[0]='\0'; + ::strcpy(mszDefExt,".DAT"); + ::strcpy(mszFileSpec,"*.*"); + mLastDrive=::getdisk(); + ::getcwd(mszDirectory,sizeof(mszDirectory)); +} +SelectFile::~SelectFile() +{ + char Path[132]; + ::wsprintf(Path,"%c:\\",mLastDrive+65); + ::setdisk(mLastDrive); + ::strcat(Path,mszDirectory); + ::chdir(Path); +} + +int SelectFile::GetFileName(char *szNameBuf,WORD nMaxChars) +{ + WORD returnCode; + + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"FileSelect",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this)); + if(returnCode) + ::strncpy(szNameBuf,mszFileName,nMaxChars>sizeof(mszFileName)?sizeof(mszFileName):nMaxChars); + return returnCode; +} + +void SelectFile::Initialize() +{ + ::SendDlgItemMessage(GetHandle(),IDS_FNAME,EM_LIMITTEXT,80,0L); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + ::DlgDirList(GetHandle(),mszFileSpec,IDS_FLIST,IDS_FPATH,mwFileAttribute); + waitCursor(FALSE); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SendMessage(GetDlgItem(GetHandle(),IDS_FLIST),LB_GETTEXT,0,(LONG)mszFileName); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETCURSEL,0,0L); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::SelChange() +{ +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::DoubleClick() +{ + waitCursor(TRUE); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + { + ::lstrcat(mszFileName,mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + ::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else + { + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); + ::SendMessage(GetHandle(),WM_COMMAND,IDOK,0L); + } + waitCursor(FALSE); +} + +int SelectFile::CheckFileNameSpec() +{ + ::GetDlgItemText(GetHandle(),IDS_FNAME,mszFileName,sizeof(mszFileName)); + mnEditLen=::lstrlen(mszFileName); + mcLastChar=*::AnsiPrev(mszFileName,mszFileName+mnEditLen); + if(mcLastChar=='\\'||mcLastChar==':')::lstrcat(mszFileName,mszFileSpec); + if(lstrchr(mszFileName,'*')||lstrchr(mszFileName,'?')) + { + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else ::MessageBeep(0); + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + return FALSE; + } + ::lstrcat(lstrcat(mszFileName,"\\"),mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + waitCursor(FALSE); + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + return FALSE; + } + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + mszFileName[mnEditLen]='\0'; + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + if(Write==mMode) + { + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_WRITE|OF_CREATE))) + { + ::MessageBeep(0); + return FALSE; + } + ::_lclose(mfd); + ::unlink(mszFileName); + return TRUE; + } + ::lstrcat(mszFileName,mszDefExt); + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + ::MessageBeep(0); + return FALSE; + } + else ::_lclose(mfd); + } + else ::_lclose(mfd); + ::strcpy(mszFileName,mPof.szPathName); + ::OemToAnsi(mszFileName,mszFileName); + if(Write==mMode) + { + ::MessageBeep(0); + switch( + ::MessageBox(GetHandle(),(LPSTR)"Overwrite this file?",(LPSTR)mszFileName,MB_OKCANCEL)) + { + case IDOK : + return TRUE; + case IDCANCEL : + return FALSE; + } + } + return TRUE; +} + +LPSTR SelectFile::lstrchr(LPSTR str,char ch) +{ + while(*str) + { + if(ch==*str)return str; + str=::AnsiNext(str); + } + return NULL; +} + +LPSTR SelectFile::lstrrchr(LPSTR str,char ch) +{ + LPSTR strl=str+lstrlen(str); + + do + { + if(ch==*strl)return strl; + strl=::AnsiPrev(str,strl); + }while(strl>str); + return NULL; +} + +int SelectFile::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + { + int TabStopList[3]; + WORD DlgWidthUnits; + String windowText; + + DlgWidthUnits=LOWORD(::GetDialogBaseUnits())/4; + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,mhInstance), + String(STRING_BITMAPOKNOFUP,mhInstance), + String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,mhInstance), + String(STRING_BITMAPCANOFUP,mhInstance), + String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Initialize(); + TabStopList[0]=DlgWidthUnits*13*2; + TabStopList[1]=DlgWidthUnits*28*2; + TabStopList[2]=DlgWidthUnits*38*2; + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETTABSTOPS,3,(LONG)(LPSTR)TabStopList); + ::GetDlgItemText(GetHandle(),(Write==mMode?IDS_FILESAVE:IDS_FILEOPEN),windowText,String::MaxString); + ::SetWindowText(GetHandle(),windowText); + } + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + return TRUE; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + return TRUE; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDS_FLIST : + switch(GET_WM_COMMAND_CMD(wParam,lParam)) + { + case LBN_SELCHANGE : + SelChange(); + return TRUE; + case LBN_DBLCLK : + DoubleClick(); + return TRUE; + } + break; + case IDS_FNAME : + if(GET_WM_COMMAND_CMD(wParam,lParam)==EN_CHANGE) + ::EnableWindow(::GetDlgItem(GetHandle(),IDOK), + (BOOL)::SendMessage(GET_WM_COMMAND_HWND(wParam,lParam), + WM_GETTEXTLENGTH,0,0L)); + return TRUE; + case IDOK : + if(CheckFileNameSpec()) + { + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + } + return TRUE; + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + +void SelectFile::SetExtended() +{ + HCURSOR hCursor; + ffblk mffblk; + char szBuffer[100]; + char szFormat[100]; + char minBuf[5]; + char hrBuf[5]; + char moBuf[5]; + char dayBuf[5]; + int nIndex=0; + unsigned Year; + unsigned Month; + unsigned Day; + unsigned Hour; + unsigned Minute; + char cAmPm; + + int nItems=(int)::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_GETCOUNT,0,0L); + if(!nItems)return; + hCursor=::SetCursor(::LoadCursor(NULL,IDC_WAIT)); + ::ShowCursor(TRUE); + for(nIndex=0;nIndex>9)+1980; + Month=(mffblk.ff_fdate>>5)&0x0F; + Day=mffblk.ff_fdate&0x1F; + Hour=(mffblk.ff_ftime>>11)&0x1F; + Minute=(mffblk.ff_ftime>>5)&0x3F; + if(Hour>=12 && Minute) + { + Hour=Hour==12?1:Hour-12; + if(Hour==12)cAmPm='a'; + else cAmPm='p'; + } + else + { + if(!Hour)Hour=12; + cAmPm='a'; + } + ::wsprintf(minBuf,"%d",Minute); + if(1==::lstrlen(minBuf)) + { + minBuf[2]='\0'; + minBuf[1]=minBuf[0]; + minBuf[0]='0'; + } + ::wsprintf(hrBuf,"%d",Hour); + if(1==::lstrlen(hrBuf)) + { + hrBuf[3]='\0'; + hrBuf[2]=hrBuf[0]; + hrBuf[1]=' '; + hrBuf[0]=' '; + } + ::wsprintf(moBuf,"%d",Month); + if(1==::lstrlen(moBuf)) + { + moBuf[2]='\0'; + moBuf[1]=moBuf[0]; + moBuf[0]='0'; + } + ::wsprintf(dayBuf,"%d",Day); + if(1==::lstrlen(dayBuf)) + { + dayBuf[2]='\0'; + dayBuf[1]=dayBuf[0]; + dayBuf[0]='0'; + } + ::wsprintf(szFormat,"\t%s-%s-%d\t%9ld\t%s:%s%c", + (LPSTR)moBuf,(LPSTR)dayBuf,Year,mffblk.ff_fsize,(LPSTR)hrBuf,(LPSTR)minBuf,cAmPm); + ::lstrcat(szBuffer,szFormat); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_DELETESTRING,nIndex,0L); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_INSERTSTRING,nIndex,(LPARAM)(LPCSTR)szBuffer); + } + } + ::ShowCursor(FALSE); + ::SetCursor(hCursor); +} + \ No newline at end of file diff --git a/mdiwin/safe/FILEHELP.HPP b/mdiwin/safe/FILEHELP.HPP new file mode 100644 index 0000000..f0f4fec --- /dev/null +++ b/mdiwin/safe/FILEHELP.HPP @@ -0,0 +1,67 @@ +#ifndef _FILEHELP_HPP +#define _FILEHELP_HPP +#include +#include +#include +#include +#include + +class SelectFile : public DWindow +{ +public: + enum Mode{Read,Write}; + SelectFile(HWND hParent,Mode readWrite=Read); + ~SelectFile(); + void SetAttribute(WORD attribute); + void SetExtension(const char * extension); + void SetFileSpec(const char * fileSpec); + int GetFileName(char *buffer,WORD length); +private: + enum {MaxTextLength=96}; + enum {DefaultAttribute=0x4010}; + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void Initialize(); + void SelChange(); + void DoubleClick(); + void SetExtended(); + int CheckFileNameSpec(); + LPSTR lstrrchr(LPSTR,char); + LPSTR lstrchr(LPSTR,char); + + + char mszDefExt[MaxTextLength]; + char mszFileName[MaxTextLength]; + char mszFileSpec[MaxTextLength]; + char mszDirectory[MaxTextLength]; + char mcLastChar; + short mnEditLen; + int mLastDrive; + WORD mwFileAttribute; + OFSTRUCT mPof; + HFILE mfd; + HWND mhParent; + HINSTANCE mhInstance; + Mode mMode; +}; + +inline +void SelectFile::SetAttribute(WORD nAttribute) +{ + mwFileAttribute=nAttribute; +} + +inline +void SelectFile::SetExtension(const char *szExtension) +{ + ::strncpy(mszDefExt,szExtension,sizeof(mszDefExt)-1); + mszDefExt[sizeof(mszDefExt)-1]='\0'; +} + +inline +void SelectFile::SetFileSpec(const char *szFileSpec) +{ + ::strncpy(mszFileSpec,szFileSpec,sizeof(mszFileSpec)-1); + mszFileSpec[sizeof(mszFileSpec)-1]='\0'; +} +#endif + \ No newline at end of file diff --git a/mdiwin/scraps.txt b/mdiwin/scraps.txt new file mode 100644 index 0000000..0f5c65f --- /dev/null +++ b/mdiwin/scraps.txt @@ -0,0 +1,541 @@ +CLIP BITMAP +{ +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 00 88 80 F8 88 88 88 88 88 88 00 80 FF' +'08 80 F8 88 88 88 88 88 88 0F 0F FF 08 80 F8 88' +'88 88 88 88 88 0F FF F0 88 80 F8 80 08 00 80 08' +'00 0F FF 08 88 80 F8 80 88 88 88 88 88 0F FF F0' +'88 80 F8 88 88 88 88 88 88 00 00 00 88 80 F8 80' +'88 88 88 88 88 88 08 88 88 80 F8 80 88 88 88 88' +'88 88 08 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 80 88 88 88 88 88 88 08 88 88 80 F8 80' +'88 88 88 88 88 88 08 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 80 88 88 88 88 88 88 08 88' +'88 80 F8 80 88 88 88 88 88 88 08 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 80 88 88 88 88' +'88 88 08 88 88 80 F8 80 08 00 80 08 00 80 08 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF FF' +} + +MESH BITMAP +{ +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 80 00 00' +'00 00 08 88 88 80 F8 88 80 0F 00 F0 0F 00 F0 08' +'88 80 F8 88 00 F0 0F 00 F0 0F 00 F0 88 80 F8 88' +'0F 00 F0 0F 00 F0 0F 00 88 80 F8 80 F0 0F 00 F0' +'0F 00 F0 0F 08 80 F8 80 00 F0 0F 00 F0 0F 00 F0' +'08 80 F8 80 0F 00 F0 0F 00 F0 0F 00 08 80 F8 80' +'F0 0F 00 F0 0F 00 F0 0F 08 80 F8 80 00 F0 0F 00' +'F0 0F 00 F0 08 80 F8 80 0F 00 F0 0F 00 F0 0F 00' +'08 80 F8 80 F0 0F 00 F0 0F 00 F0 0F 08 80 F8 80' +'00 F0 0F 00 F0 0F 00 F0 08 80 F8 80 0F 00 F0 0F' +'00 F0 0F 00 08 80 F8 80 F0 0F 00 F0 0F 00 F0 0F' +'08 80 F8 88 00 F0 0F 00 F0 0F 00 F0 88 80 F8 88' +'0F 00 F0 0F 00 F0 0F 00 88 80 F8 88 80 0F 00 F0' +'0F 00 F0 08 88 80 F8 88 88 80 00 00 00 00 08 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF F8' +} + + +CUT BITMAP +{ +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 80 00 88 88' +'88 88 00 08 88 80 F8 88 00 80 08 88 88 80 08 00' +'88 80 F8 88 08 88 00 88 88 00 88 80 88 80 F8 88' +'00 88 80 88 88 08 88 00 88 80 F8 88 80 08 80 88' +'88 08 80 08 88 80 F8 88 88 00 00 08 80 00 00 88' +'88 80 F8 88 88 88 00 00 00 00 88 88 88 80 F8 88' +'88 88 80 0F F0 08 88 88 88 80 F8 88 88 88 88 00' +'00 88 88 88 88 80 F8 88 88 88 80 FF F0 08 88 88' +'88 80 F8 88 88 88 0F F0 0F F0 88 88 88 80 F8 88' +'88 80 FF 08 80 FF 08 88 88 80 F8 88 88 0F F0 88' +'88 0F F0 88 88 80 F8 88 80 FF 08 88 88 80 FF 08' +'88 80 F8 88 0F F0 88 88 88 88 0F F0 88 80 F8 80' +'FF 08 88 88 88 88 80 FF 08 80 F8 80 F0 88 88 88' +'88 88 88 0F 08 80 F8 80 08 88 88 88 88 88 88 80' +'08 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF F8' +} + + +ARROWD BITMAP LOADONCALL MOVEABLE +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 80' + '08 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 80 FF FF 08 88 88 88 80 F8 88' + '88 88 0F FF FF F0 88 88 88 80 F8 88 88 88 00 0F' + 'F0 00 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 00 00 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +} + +ARROWU BITMAP LOADONCALL MOVEABLE +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 00' + '00 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 0F F0 88 88 88' + '88 80 F8 88 88 88 88 0F F0 88 88 88 88 80 F8 88' + '88 88 88 0F F0 88 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 00 0F F0 00 88 88' + '88 80 F8 88 88 88 0F FF FF F0 88 88 88 80 F8 88' + '88 88 80 FF FF 08 88 88 88 80 F8 88 88 88 88 0F' + 'F0 88 88 88 88 80 F8 88 88 88 88 80 08 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +} + +ARROWR BITMAP LOADONCALL MOVEABLE +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 00 88' + '88 80 F8 88 88 88 88 88 88 88 0F 08 88 80 F8 80' + '00 00 00 00 00 00 0F F0 88 80 F8 80 FF FF FF FF' + 'FF FF FF FF 08 80 F8 80 FF FF FF FF FF FF FF FF' + '08 80 F8 80 00 00 00 00 00 00 0F F0 88 80 F8 88' + '88 88 88 88 88 88 0F 08 88 80 F8 88 88 88 88 88' + '88 88 00 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +} + +ARROWL BITMAP LOADONCALL MOVEABLE +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 00 88 88 88 88 88 88' + '88 80 F8 88 80 F0 88 88 88 88 88 88 88 80 F8 88' + '0F F0 00 00 00 00 00 00 08 80 F8 80 FF FF FF FF' + 'FF FF FF FF 08 80 F8 80 FF FF FF FF FF FF FF FF' + '08 80 F8 88 0F F0 00 00 00 00 00 00 08 80 F8 88' + '80 F0 88 88 88 88 88 88 88 80 F8 88 88 00 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F8' +} + +BSAVE BITMAP +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 77 7F FF FF FF' + '77 70 F8 88 88 88 88 77 7F FF 11 1F 77 70 F8 88' + '88 88 88 77 7F FF 11 1F 77 70 F8 88 88 88 88 77' + '7F FF 11 1F 77 70 F8 88 80 88 88 77 7F FF FF FF' + '77 70 F8 88 80 08 88 77 77 77 77 77 77 70 F8 88' + '80 00 88 77 77 77 77 77 77 70 F0 00 00 00 08 77' + '77 77 77 77 77 70 F0 00 00 00 00 77 00 00 00 00' + '00 70 F0 00 00 00 08 77 0F FF FF FF F0 70 F8 88' + '80 00 88 77 00 00 00 00 00 70 F8 88 80 08 88 77' + '0F FF FF FF F0 70 F8 88 80 88 88 77 00 00 00 00' + '00 70 F8 88 88 88 88 77 0F FF FF FF F0 70 F8 88' + '88 88 88 77 00 00 00 00 00 70 F8 88 88 88 88 77' + '77 77 77 77 77 70 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +} + +BLOAD BITMAP +{ + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F7 77 FF FF FF F7 77 88 88 88' + '88 80 F7 77 F1 11 FF F7 77 88 88 88 88 80 F7 77' + 'F1 11 FF F7 77 88 88 88 88 80 F7 77 F1 11 FF F7' + '77 88 88 88 88 80 F7 77 FF FF FF F7 77 88 88 08' + '88 80 F7 77 77 77 77 77 77 88 88 00 88 80 F7 77' + '77 77 77 77 77 88 88 00 08 80 F7 77 77 77 77 77' + '77 00 00 00 00 80 F7 70 00 00 00 00 07 00 00 00' + '00 00 F7 70 FF FF FF FF 07 00 00 00 00 80 F7 70' + '00 00 00 00 07 88 88 00 08 80 F7 70 FF FF FF FF' + '07 88 88 00 88 80 F7 70 00 00 00 00 07 88 88 08' + '88 80 F7 70 FF FF FF FF 07 88 88 88 88 80 F7 70' + '00 00 00 00 07 88 88 88 88 80 F7 77 77 77 77 77' + '77 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +} + +TRANSFORMB BITMAP +{ +'42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' +'00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' +'00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' +'00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' +'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' +'00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' +'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' +'00 00 FF FF FF 00 80 00 00 00 00 00 00 00 00 00' +'00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 00 88 00 88 88 08 88 00 00 88 80 F8 08' +'88 80 88 88 80 88 80 88 08 80 F8 80 00 08 80 00' +'88 08 80 88 08 80 F8 80 88 08 88 88 80 88 80 00' +'88 80 F8 88 00 88 88 88 08 88 80 88 08 80 F8 88' +'00 88 88 88 88 88 00 00 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' +'88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' +'88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' +'88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' +'FF FF FF FF FF F8' +} + +TRANSFORMA BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 BF 00 00 BF' + '00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF' + '00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 00 77 00 77 77 07 77 00 77 00 70 F7 07' + '77 70 77 77 70 77 07 77 70 70 F7 70 00 07 70 00' + '77 07 70 00 07 70 F7 70 77 07 77 77 70 77 70 77' + '07 70 F7 77 00 77 77 77 07 77 77 00 77 70 F7 77' + '00 77 77 77 77 77 77 00 77 70 F7 77 77 77 77 77' + '77 77 77 77 70 70 F7 77 77 77 77 77 77 77 77 77' + '70 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +END + +SIGMA BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 BF 00 00 BF' + '00 00 00 BF BF 00 BF 00 00 00 BF 00 BF 00 BF BF' + '00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 70 00 00' + '00 07 77 77 77 70 F7 77 77 77 00 77 70 07 77 77' + '77 70 F7 77 77 77 70 07 77 77 77 77 77 70 F7 77' + '77 77 77 00 77 77 77 77 77 70 F7 77 77 77 77 70' + '07 77 77 77 77 70 F7 77 77 77 77 70 07 77 77 77' + '77 70 F7 77 77 77 77 00 77 77 77 77 77 70 F7 77' + '77 77 70 07 77 77 77 77 77 70 F7 77 77 77 00 77' + '70 07 77 77 77 70 F7 77 77 70 00 00 00 07 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 77 77' + '77 77 77 77 77 70 F7 77 77 77 77 77 77 77 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +END + +VIEW BITMAP LOADONCALL MOVEABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 F7 77 77 77' + '77 77 77 77 88 80 F8 88 F0 00 00 00 00 00 00 07' + '88 80 F8 88 F0 00 00 00 00 00 00 07 88 80 F8 88' + 'F0 07 87 00 00 77 70 07 88 80 F8 88 F0 77 77 70' + '07 87 87 07 88 80 F8 88 F0 E7 87 87 77 77 7E 07' + '88 80 F8 88 FE EE 77 77 77 87 EE E7 88 80 F8 88' + 'FE EE E7 87 F7 FE EE E7 88 80 F8 88 FE EE EE FF' + 'FF EE EE E7 88 80 F8 88 FE EE EE EF FE EE EE E7' + '88 80 F8 88 FE EE EE EE EE EE EE E7 88 80 F8 88' + 'F0 EE EE EE EE EE EE 07 88 80 F8 88 F0 EE EE E0' + '0E EE EE 07 88 80 F8 88 F0 0E EE 00 00 EE E0 07' + '88 80 F8 88 F0 00 00 00 00 00 00 07 88 80 F8 88' + 'F0 00 00 00 00 00 00 07 88 80 F8 88 FF FF FF FF' + 'FF FF FF FF 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF FF' +END + +TIME BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 70 00 00 00 00 00 00 00 00 00' + '00 00 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 F7 77 77 77 7F FF' + 'FF F7 77 77 77 70 F7 77 77 7F F0 00 00 0F F7 77' + '77 70 F7 77 77 F0 00 00 70 00 0F 77 77 70 F7 77' + '7F 00 70 00 00 07 00 F7 77 70 F7 77 F0 00 00 00' + '00 00 00 0F 77 70 F7 77 F0 70 00 00 00 00 00 0F' + '77 70 F7 7F 00 00 00 00 00 00 07 00 77 70 F7 7F' + '00 00 00 00 00 00 00 00 F7 70 F7 7F 00 00 00 00' + '00 00 00 00 F7 70 F7 7F 07 00 00 00 FF FF F0 70' + 'F7 70 F7 7F 00 00 00 00 F0 00 00 00 F7 70 F7 7F' + '00 00 00 00 F0 00 00 00 F7 70 F7 77 F0 70 00 00' + 'F0 00 07 0F 77 70 F7 77 F0 00 00 00 F0 00 00 07' + '77 70 F7 77 7F 00 70 00 00 00 70 F7 77 70 F7 77' + '77 F0 00 00 70 00 0F 77 77 70 F7 77 77 7F F0 00' + '00 0F F7 77 77 70 F7 77 77 77 7F FF FF F7 77 77' + '77 70 F7 77 77 77 77 77 77 77 77 77 77 70 F7 77' + '77 77 77 77 77 77 77 77 77 70 FF FF FF FF FF FF' + 'FF FF FF FF FF F7' +END + +PLAY BITMAP PRELOAD MOVEABLE DISCARDABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 BA AA AA AA AA AA AA AA AA AA' + 'AA AB A7 77 77 77 77 77 77 77 77 77 77 7A AF 77' + '77 77 77 77 77 77 77 77 77 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 08 88' + '88 88 88 88 87 7A AF 88 88 88 00 88 88 88 88 88' + '87 7A AF 88 88 88 00 08 88 88 88 88 87 7A AF 88' + '88 88 00 00 88 88 88 88 87 7A AF 88 88 88 00 00' + '08 88 88 88 87 7A AF 88 88 88 00 00 00 88 88 88' + '87 7A AF 88 88 88 00 00 00 08 88 88 87 7A AF 88' + '88 88 00 00 00 88 88 88 87 7A AF 88 88 88 00 00' + '08 88 88 88 87 7A AF 88 88 88 00 00 88 88 88 88' + '87 7A AF 88 88 88 00 08 88 88 88 88 87 7A AF 88' + '88 88 00 88 88 88 88 88 87 7A AF 88 88 88 08 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF FF' + 'FF FF FF FF FF FF FF FF FF 7A BA AA AA AA AA AA' + 'AA AA AA AA AA AB' +END + +PAUSE BITMAP PRELOAD MOVEABLE DISCARDABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 BA AA AA AA AA AA AA AA AA AA' + 'AA AB A7 77 77 77 77 77 77 77 77 77 77 7A AF 77' + '77 77 77 77 77 77 77 77 77 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 00 00 88 00 00 88 88' + '87 7A AF 88 88 00 00 88 00 00 88 88 87 7A AF 88' + '88 00 00 88 00 00 88 88 87 7A AF 88 88 00 00 88' + '00 00 88 88 87 7A AF 88 88 00 00 88 00 00 88 88' + '87 7A AF 88 88 00 00 88 00 00 88 88 87 7A AF 88' + '88 00 00 88 00 00 88 88 87 7A AF 88 88 00 00 88' + '00 00 88 88 87 7A AF 88 88 00 00 88 00 00 88 88' + '87 7A AF 88 88 00 00 88 00 00 88 88 87 7A AF 88' + '88 00 00 88 00 00 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF FF' + 'FF FF FF FF FF FF FF FF FF 7A BA AA AA AA AA AA' + 'AA AA AA AA AA AB' +END + +EJECT BITMAP PRELOAD MOVEABLE DISCARDABLE +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 BA AA AA AA AA AA AA AA AA AA' + 'AA AB A7 77 77 77 77 77 77 77 77 77 77 7A AF 77' + '77 77 77 77 77 77 77 77 77 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 80 00 00 00 00 00 00 88' + '87 7A AF 88 80 00 00 00 00 00 00 88 87 7A AF 88' + '88 88 88 88 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 80 00 00 00 00 00 00 88' + '87 7A AF 88 88 00 00 00 00 00 08 88 87 7A AF 88' + '88 80 00 00 00 00 88 88 87 7A AF 88 88 88 00 00' + '00 08 88 88 87 7A AF 88 88 88 80 00 00 88 88 88' + '87 7A AF 88 88 88 88 00 08 88 88 88 87 7A AF 88' + '88 88 88 80 88 88 88 88 87 7A AF 88 88 88 88 88' + '88 88 88 88 87 7A AF 88 88 88 88 88 88 88 88 88' + '87 7A AF 88 88 88 88 88 88 88 88 88 87 7A AF FF' + 'FF FF FF FF FF FF FF FF FF 7A BA AA AA AA AA AA' + 'AA AA AA AA AA AB' +END + +XDISSOLVE BITMAP +BEGIN + '42 4D 96 01 00 00 00 00 00 00 76 00 00 00 28 00' + '00 00 18 00 00 00 18 00 00 00 01 00 04 00 00 00' + '00 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00' + '00 00 10 00 00 00 00 00 00 00 00 00 80 00 00 80' + '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80' + '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF' + '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF' + '00 00 FF FF FF 00 F0 00 00 00 00 00 00 00 00 00' + '00 00 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 08 88 88 80 88 88 88 80 F8 88 88 88 00 88' + '88 00 88 88 88 80 F8 88 88 88 80 08 80 08 88 88' + '88 80 F8 88 88 88 88 08 80 88 88 88 88 80 F8 88' + '88 88 88 08 80 88 88 88 88 80 F8 88 88 88 00 00' + '00 00 88 88 88 80 F8 88 88 88 00 00 00 00 88 88' + '88 80 F8 88 88 88 88 08 80 88 88 88 88 80 F8 88' + '88 88 88 08 80 88 88 88 88 80 F8 88 88 88 80 08' + '80 08 88 88 88 80 F8 88 88 88 00 88 88 00 88 88' + '88 80 F8 88 88 88 08 88 88 80 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 F8 88 88 88 88 88' + '88 88 88 88 88 80 F8 88 88 88 88 88 88 88 88 88' + '88 80 F8 88 88 88 88 88 88 88 88 88 88 80 F8 88' + '88 88 88 88 88 88 88 88 88 80 FF FF FF FF FF FF' + 'FF FF FF FF FF FF' +END diff --git a/mediapak/ENTRYINF.HPP b/mediapak/ENTRYINF.HPP new file mode 100644 index 0000000..754d361 --- /dev/null +++ b/mediapak/ENTRYINF.HPP @@ -0,0 +1,85 @@ +#ifndef _MEDIAPAK_ENTRYINFO_HPP_ +#define _MEDIAPAK_ENTRYINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MEDIAPAK_PAKENTRY_HPP_ +#include +#endif + +class EntryInfo +{ +public: + EntryInfo(void); + EntryInfo(const EntryInfo &someEntryInfo); + virtual ~EntryInfo(); + EntryInfo &operator=(const EntryInfo &someEntryInfo); + BOOL operator==(const EntryInfo &someEntryInfo); + const String &name(void)const; + void name(const String &entryName); + PakEntry::EntryType type(void)const; + void type(PakEntry::EntryType entryType); +private: + String mEntryName; + PakEntry::EntryType mEntryType; +}; + +inline +EntryInfo::EntryInfo(void) +: mEntryType(PakEntry::Invalid) +{ +} + +inline +EntryInfo::EntryInfo(const EntryInfo &someEntryInfo) +{ + *this=someEntryInfo; +} + +inline +EntryInfo::~EntryInfo() +{ +} + +inline +EntryInfo &EntryInfo::operator=(const EntryInfo &someEntryInfo) +{ + name(someEntryInfo.name()); + type(someEntryInfo.type()); + return *this; +} + +inline +BOOL EntryInfo::operator==(const EntryInfo &someEntryInfo) +{ + return (name()==someEntryInfo.name()&& + type()==someEntryInfo.type()); +} + +inline +const String &EntryInfo::name(void)const +{ + return mEntryName; +} + +inline +void EntryInfo::name(const String &entryName) +{ + mEntryName=entryName; +} + +inline +PakEntry::EntryType EntryInfo::type(void)const +{ + return mEntryType; +} + +inline +void EntryInfo::type(PakEntry::EntryType entryType) +{ + mEntryType=entryType; +} +#endif \ No newline at end of file diff --git a/mediapak/MAIN.CPP b/mediapak/MAIN.CPP new file mode 100644 index 0000000..04ab561 --- /dev/null +++ b/mediapak/MAIN.CPP @@ -0,0 +1,179 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +// create(mediapakfilename) +// add(mediapak,filename,type,id) +// remove(mediapak,id) +// display(mediapakfilename) + +void displayUsage(void); +BOOL handleAdd(const String &strCommand); +BOOL handleRemove(const String &strCommand); +BOOL handleList(const String &strCommand); +BOOL handleCreate(const String &strCommand); + +//int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +void main(int argc,char **argv) +{ + MediaPak mediaPak; + Array entryInfoArray; + String strDebug; + + if(!mediaPak.open("mediapak.pak",MediaPak::OpenAlways))return; +// mediaPak.add("c:\\work\\scene\\media\\bmp\\tie1.bmp"); + ::sprintf(strDebug,"%d\n",mediaPak.entries()); + ::OutputDebugString(strDebug); + mediaPak.getInfo(entryInfoArray); + for(int index=0;index mediaData; + FileHandle openFile; + + strPathMediaPak=strCommand.betweenString('(',','); + strPathFileName=strCommand.betweenString(',',','); + strType=strCommand.betweenString(',',')').betweenString(',',','); + strID=strCommand.betweenString(',',')').betweenString(',',0).betweenString(',',0); + if(strPathMediaPak.isNull())return FALSE; + if(strPathFileName.isNull())return FALSE; + if(strID.isNull())return FALSE; + if(strType.isNull())return FALSE; + mediaPak.open(strPathMediaPak); + if(strType==String("SOUND"))pakEntry.type(PakEntry::Sound); + else if(strType==String("BITMAP"))pakEntry.type(PakEntry::Bitmap); + else pakEntry.type(PakEntry::Blob); + openFile.open(strPathFileName); + mediaData.size(openFile.size()); + openFile.read((BYTE*)&mediaData[0],mediaData.size()); + pakEntry.name(strPathFileName); + pakEntry.id(::atoi(strID)); + pakEntry.rawData(mediaData); + mediaPak.add(pakEntry); + return TRUE; +} + +BOOL handleRemove(const String &strCommand) +{ + return FALSE; +} + +BOOL handleList(const String &strCommand) +{ + String pathMediaPak; + String strType; + MediaPak mediaPak; + PakEntry pakEntry; + + pathMediaPak=strCommand.betweenString('(',')'); + if(pathMediaPak.isNull())return FALSE; + if(!mediaPak.open(pathMediaPak))return FALSE; + for(int index=0;index soundData; + FileHandle openFile; + WaveForm waveForm; + + mediaPak.open("c:\\multimed.pak",TRUE); + pakEntry.type(PakEntry::Sound); + + openFile.open("C:\\GAMES\\DOOM2\\DSTELEPT.WAV"); + soundData.size(openFile.size()); + openFile.read((BYTE*)soundData,soundData.size()); + + pakEntry.name("DSTELEPT"); + pakEntry.id(0); + pakEntry.rawData(soundData); + mediaPak.add(pakEntry); + + openFile.open("C:\\GAMES\\DOOM2\\DSPISTOL.WAV"); + soundData.size(openFile.size()); + openFile.read((BYTE*)soundData,soundData.size()); + + pakEntry.name("DSPISTOL"); + pakEntry.id(0); + pakEntry.rawData(soundData); + mediaPak.add(pakEntry); + + + mediaPak.open("c:\\multimed.pak"); + if(!mediaPak.getEntry(waveForm,0))return FALSE; + PureWave pureWave; + pureWave.play(waveForm,DeviceHandler::Wait); + mediaPak.close(); + + +#endif \ No newline at end of file diff --git a/mediapak/MEDIAPAK.BAK b/mediapak/MEDIAPAK.BAK new file mode 100644 index 0000000..791d3f9 --- /dev/null +++ b/mediapak/MEDIAPAK.BAK @@ -0,0 +1,251 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=mediapak - Win32 Debug +!MESSAGE No configuration specified. Defaulting to mediapak - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "mediapak - Win32 Release" && "$(CFG)" !=\ + "mediapak - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mediapak.mak" CFG="mediapak - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mediapak - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "mediapak - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "mediapak - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "mediapak - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\mediapak.lib" + +CLEAN : + -@erase "$(INTDIR)\mediapak.obj" + -@erase "$(OUTDIR)\mediapak.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/mediapak.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/mediapak.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/mediapak.lib" +LIB32_OBJS= \ + "$(INTDIR)\mediapak.obj" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\mediapak.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\mediapak.lib" + +CLEAN : + -@erase "$(INTDIR)\mediapak.obj" + -@erase "..\exe\mediapak.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /MLd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/mediapak.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/mediapak.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mediapak.lib" +LIB32_FLAGS=/nologo /out:"..\exe\mediapak.lib" +LIB32_OBJS= \ + "$(INTDIR)\mediapak.obj" \ + "..\Exe\mscommon.lib" + +"..\exe\mediapak.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "mediapak - Win32 Release" +# Name "mediapak - Win32 Debug" + +!IF "$(CFG)" == "mediapak - Win32 Release" + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\mediapak.cpp + +!IF "$(CFG)" == "mediapak - Win32 Release" + +DEP_CPP_MEDIA=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\mediapak.obj" : $(SOURCE) $(DEP_CPP_MEDIA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +DEP_CPP_MEDIA=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sample\puresmpl.hpp"\ + {$(INCLUDE)}"\sample\wave.hpp"\ + + +"$(INTDIR)\mediapak.obj" : $(SOURCE) $(DEP_CPP_MEDIA) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "mediapak - Win32 Release" + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/mediapak/MEDIAPAK.DSW b/mediapak/MEDIAPAK.DSW new file mode 100644 index 0000000..8467905 --- /dev/null +++ b/mediapak/MEDIAPAK.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "mediapak"=.\mediapak.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/mediapak/MEDIAPAK.MAK b/mediapak/MEDIAPAK.MAK new file mode 100644 index 0000000..791d3f9 --- /dev/null +++ b/mediapak/MEDIAPAK.MAK @@ -0,0 +1,251 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=mediapak - Win32 Debug +!MESSAGE No configuration specified. Defaulting to mediapak - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "mediapak - Win32 Release" && "$(CFG)" !=\ + "mediapak - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mediapak.mak" CFG="mediapak - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mediapak - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "mediapak - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "mediapak - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "mediapak - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\mediapak.lib" + +CLEAN : + -@erase "$(INTDIR)\mediapak.obj" + -@erase "$(OUTDIR)\mediapak.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/mediapak.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/mediapak.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/mediapak.lib" +LIB32_OBJS= \ + "$(INTDIR)\mediapak.obj" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\mediapak.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\mediapak.lib" + +CLEAN : + -@erase "$(INTDIR)\mediapak.obj" + -@erase "..\exe\mediapak.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /MLd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/mediapak.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/mediapak.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mediapak.lib" +LIB32_FLAGS=/nologo /out:"..\exe\mediapak.lib" +LIB32_OBJS= \ + "$(INTDIR)\mediapak.obj" \ + "..\Exe\mscommon.lib" + +"..\exe\mediapak.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "mediapak - Win32 Release" +# Name "mediapak - Win32 Debug" + +!IF "$(CFG)" == "mediapak - Win32 Release" + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\mediapak.cpp + +!IF "$(CFG)" == "mediapak - Win32 Release" + +DEP_CPP_MEDIA=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\mediapak.obj" : $(SOURCE) $(DEP_CPP_MEDIA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +DEP_CPP_MEDIA=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sample\puresmpl.hpp"\ + {$(INCLUDE)}"\sample\wave.hpp"\ + + +"$(INTDIR)\mediapak.obj" : $(SOURCE) $(DEP_CPP_MEDIA) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "mediapak - Win32 Release" + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/mediapak/MEDIAPAK.MDP b/mediapak/MEDIAPAK.MDP new file mode 100644 index 0000000..fb5ca5c Binary files /dev/null and b/mediapak/MEDIAPAK.MDP differ diff --git a/mediapak/MEDIAPAK.PLG b/mediapak/MEDIAPAK.PLG new file mode 100644 index 0000000..7172b28 --- /dev/null +++ b/mediapak/MEDIAPAK.PLG @@ -0,0 +1,23 @@ +--------------------Configuration: mediapak - Win32 Debug-------------------- +Begining build with project "E:\work\MEDIAPAK\mediapak.dsp", at root. +Active configuration is Win32 (x86) Static Library (based on Win32 (x86) Static Library) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/mediapak.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" " " /c " + "Browser Database Maker" with flags "/nologo /o".\msvcobj/mediapak.bsc" " + "Library Manager" with flags "/nologo /out:"..\exe\mediapak.lib" " + "Custom Build" with flags "" + "" with flags "" + +Creating temp file "E:\WINDOWS\TEMP\RSPF270.TMP" with contents +Creating command line "cl.exe @E:\WINDOWS\TEMP\RSPF270.TMP" +Creating command line "link.exe -lib /nologo /out:"..\exe\mediapak.lib" .\msvcobj\mediapak.obj ..\Exe\mscommon.lib" +Compiling... +mediapak.cpp +Creating library... + + + +mediapak.lib - 0 error(s), 0 warning(s) diff --git a/mediapak/Mediapak.cpp b/mediapak/Mediapak.cpp new file mode 100644 index 0000000..34d03d6 --- /dev/null +++ b/mediapak/Mediapak.cpp @@ -0,0 +1,270 @@ +#include +#include +#include +#include + +MediaPak::MediaPak(void) +: mEntries(0), mOffsetEntries(0) +{ +} + +MediaPak::MediaPak(const MediaPak &mediaPak) +{ + *this=mediaPak; +} + +MediaPak::~MediaPak() +{ + close(); +} + +MediaPak &MediaPak::operator=(const MediaPak &/*mediaPak*/) +{ // private implementation + return *this; +} + +BOOL MediaPak::open(const String &pathFileName,Mode openMode) +{ + DWORD magic; + + mPakFile.close(); + mEntries=0; + if(CreateAlways==openMode) + { + mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Overwrite); + if(!mPakFile.isOkay())return FALSE; + magic=HeaderMagic; + mEntries=0; + mPakFile.write((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + mPakFile.write((unsigned char*)&mEntries,sizeof(mEntries)); + } + else if(OpenExisting==openMode) + { + mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Open); + if(!mPakFile.isOkay())return FALSE; + mPakFile.read((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + if(magic!=HeaderMagic){mPakFile.close();return FALSE;} + mPakFile.read((unsigned char*)&mEntries,sizeof(mEntries)); + } + else // OpenAlways + { + if(mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Open)) + { + if(!mPakFile.isOkay())return FALSE; + mPakFile.read((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + if(magic!=HeaderMagic){mPakFile.close();return FALSE;} + mPakFile.read((unsigned char*)&mEntries,sizeof(mEntries)); + } + else + { + mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Mode(FileHandle::Create)); + if(!mPakFile.isOkay())return FALSE; + magic=HeaderMagic; + mEntries=0; + mPakFile.write((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + mPakFile.write((unsigned char*)&mEntries,sizeof(mEntries)); + } + } + return TRUE; +} + +void MediaPak::close(void) +{ + if(!mPakFile.isOkay())return; + mPakFile.close(); +} + +BOOL MediaPak::add(const String &strPathFileName) +{ + PakEntry::EntryType entryType; + PakEntry pakEntry; + String strExtension; + String strName; + FileHandle inFile; + Profile iniProfile; + + if(!isOkay()||strPathFileName.isNull())return FALSE; + strExtension=strPathFileName.betweenString('.',0); + if(strExtension.isNull())return FALSE; + inFile.open(strPathFileName); + if(!inFile.isOkay())return FALSE; + strExtension.upper(); + if(strExtension==String("BMP"))pakEntry.type(PakEntry::Bitmap); + else if(strExtension==String("WAV"))pakEntry.type(PakEntry::Sound); + else pakEntry.type(PakEntry::Blob); + strName=strPathFileName; + iniProfile.makeFileName(strName); + pakEntry.name(strName); + pakEntry.id(entries()+1); + pakEntry.rawData().size(inFile.size()); + inFile.read((BYTE*)&(pakEntry.rawData()[0]),pakEntry.rawData().size()); + inFile.close(); + return add(pakEntry); +} + +BOOL MediaPak::add(const PakEntry &pakEntry) +{ + DWORD entryLength; + + if(!isOkay())return FALSE; + mPakFile.seek(mOffsetEntries,FileHandle::SeekBegin); + mPakFile.read((unsigned char*)&mEntries,sizeof(mEntries)); + for(int index=0;index=mEntries)return FALSE; + for(int index=0;index=mEntries)return FALSE; + for(int index=0;index=mEntries)return FALSE; + for(int index=0;index &entryInfoArray) +{ + String entryName; + int entryLength; + int workData; + + if(!mPakFile.isOkay())return FALSE; + mPakFile.seek(mOffsetEntries,FileHandle::SeekBegin); + mPakFile.read((unsigned char*)&mEntries,sizeof(mEntries)); + if(!mEntries)return FALSE; + entryInfoArray.size(mEntries); + for(int index=0;index +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _MEDIAPAK_PAKENTRY_HPP_ +#include +#endif + +class EntryInfo; + +class MediaPak +{ +public: + enum Mode{CreateAlways,OpenExisting,OpenAlways}; + MediaPak(void); + virtual ~MediaPak(); + BOOL open(const String &pathFileName,Mode openMode=OpenExisting); + void close(void); + BOOL add(const PakEntry &pakEntry); + BOOL add(const String &strPathFileName); + BOOL getEntry(PakEntry &pakEntry,DWORD entryIndex); + BOOL getEntry(WaveForm &waveForm,DWORD entryIndex); + BOOL getInfo(Array &entryInfoArray); + BOOL getInfo(EntryInfo &entryInfo,DWORD entryIndex); + DWORD entries(void)const; + BOOL isOkay(void)const; +private: + enum {HeaderMagic=0x4050414E}; + MediaPak(const MediaPak &mediaPak); + MediaPak &operator=(const MediaPak &mediaPak); + + FileHandle mPakFile; + DWORD mEntries; + DWORD mOffsetEntries; +}; +#endif \ No newline at end of file diff --git a/mediapak/PAKTEST.MAK b/mediapak/PAKTEST.MAK new file mode 100644 index 0000000..49ea4cf --- /dev/null +++ b/mediapak/PAKTEST.MAK @@ -0,0 +1,416 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=paktest - Win32 Debug +!MESSAGE No configuration specified. Defaulting to paktest - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "paktest - Win32 Release" && "$(CFG)" !=\ + "paktest - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "paktest.mak" CFG="paktest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "paktest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "paktest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "paktest - Win32 Debug" +RSC=rc.exe +MTL=mktyplib.exe +CPP=cl.exe + +!IF "$(CFG)" == "paktest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\paktest.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\mediapak.obj" + -@erase "$(OUTDIR)\paktest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/paktest.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/paktest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/paktest.pdb" /machine:I386 /out:"$(OUTDIR)/paktest.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\mediapak.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\sample.lib" + +"$(OUTDIR)\paktest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "paktest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\paktest.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\mediapak.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\paktest.exe" + -@erase "$(OUTDIR)\paktest.ilk" + -@erase "$(OUTDIR)\paktest.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/paktest.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/paktest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\ + /subsystem:console /incremental:yes /pdb:"$(OUTDIR)/paktest.pdb" /debug\ + /machine:I386 /out:"$(OUTDIR)/paktest.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\mediapak.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\sample.lib" + +"$(OUTDIR)\paktest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "paktest - Win32 Release" +# Name "paktest - Win32 Debug" + +!IF "$(CFG)" == "paktest - Win32 Release" + +!ELSEIF "$(CFG)" == "paktest - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\mediapak.cpp + +!IF "$(CFG)" == "paktest - Win32 Release" + +DEP_CPP_MEDIA=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sample\wave.hpp"\ + + +"$(INTDIR)\mediapak.obj" : $(SOURCE) $(DEP_CPP_MEDIA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "paktest - Win32 Debug" + +DEP_CPP_MEDIA=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\fileio.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\intel.hpp"\ + {$(INCLUDE)}"\common\iobuff.hpp"\ + {$(INCLUDE)}"\common\memfile.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\sample\chunkid.hpp"\ + {$(INCLUDE)}"\sample\datachnk.hpp"\ + {$(INCLUDE)}"\sample\fmtchnk.hpp"\ + {$(INCLUDE)}"\sample\genchnk.hpp"\ + {$(INCLUDE)}"\sample\puresmpl.hpp"\ + {$(INCLUDE)}"\sample\wave.hpp"\ + {$(INCLUDE)}"\sys\stat.h"\ + {$(INCLUDE)}"\sys\types.h"\ + + +"$(INTDIR)\mediapak.obj" : $(SOURCE) $(DEP_CPP_MEDIA) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\main.cpp + +!IF "$(CFG)" == "paktest - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\fileio.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\intel.hpp"\ + {$(INCLUDE)}"\common\iobuff.hpp"\ + {$(INCLUDE)}"\common\memfile.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\sample\chunkid.hpp"\ + {$(INCLUDE)}"\sample\devhndlr.hpp"\ + {$(INCLUDE)}"\sample\fmtchnk.hpp"\ + {$(INCLUDE)}"\sample\incaps.hpp"\ + {$(INCLUDE)}"\sample\outcaps.hpp"\ + {$(INCLUDE)}"\sample\pcmform.hpp"\ + {$(INCLUDE)}"\sample\purewave.hpp"\ + {$(INCLUDE)}"\sample\wave.hpp"\ + {$(INCLUDE)}"\sample\wavefmex.hpp"\ + {$(INCLUDE)}"\sample\wavehdr.hpp"\ + {$(INCLUDE)}"\sample\wavein.hpp"\ + {$(INCLUDE)}"\sample\waveout.hpp"\ + {$(INCLUDE)}"\sys\stat.h"\ + {$(INCLUDE)}"\sys\types.h"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "paktest - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\entryinf.hpp"\ + {$(INCLUDE)}"\.\mediapak.hpp"\ + {$(INCLUDE)}"\.\pakentry.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\fileio.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\intel.hpp"\ + {$(INCLUDE)}"\common\iobuff.hpp"\ + {$(INCLUDE)}"\common\memfile.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\openfile.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\sample\chunkid.hpp"\ + {$(INCLUDE)}"\sample\datachnk.hpp"\ + {$(INCLUDE)}"\sample\devhndlr.hpp"\ + {$(INCLUDE)}"\sample\fmtchnk.hpp"\ + {$(INCLUDE)}"\sample\genchnk.hpp"\ + {$(INCLUDE)}"\sample\puresmpl.hpp"\ + {$(INCLUDE)}"\sample\purewave.hpp"\ + {$(INCLUDE)}"\sample\wave.hpp"\ + {$(INCLUDE)}"\sample\wavein.hpp"\ + {$(INCLUDE)}"\sys\stat.h"\ + {$(INCLUDE)}"\sys\types.h"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "paktest - Win32 Release" + +!ELSEIF "$(CFG)" == "paktest - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\sample.lib + +!IF "$(CFG)" == "paktest - Win32 Release" + +!ELSEIF "$(CFG)" == "paktest - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/mediapak/PAKTEST.MDP b/mediapak/PAKTEST.MDP new file mode 100644 index 0000000..feeba85 Binary files /dev/null and b/mediapak/PAKTEST.MDP differ diff --git a/mediapak/Pakentry.hpp b/mediapak/Pakentry.hpp new file mode 100644 index 0000000..44b118b --- /dev/null +++ b/mediapak/Pakentry.hpp @@ -0,0 +1,117 @@ +#ifndef _MEDIAPAK_PAKENTRY_HPP_ +#define _MEDIAPAK_PAKENTRY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class PakEntry +{ +public: + enum EntryType{Invalid,Sound,Bitmap,Blob}; + PakEntry(void); + PakEntry(const PakEntry &pakEntry); + virtual ~PakEntry(); + PakEntry &operator=(const PakEntry &pakEntry); + BOOL operator==(const PakEntry &pakEntry)const; + EntryType type(void)const; + void type(EntryType entryType); + const String &name(void)const; + void name(const String &name); + int id(void)const; + void id(int id); + GlobalData &rawData(void); + void rawData(GlobalData &rawData); +private: + EntryType mEntryType; + int mID; + String mName; + GlobalData mRawData; +}; + +inline +PakEntry::PakEntry(void) +{ +} + +inline +PakEntry::PakEntry(const PakEntry &pakEntry) +{ + *this=pakEntry; +} + +inline +PakEntry::~PakEntry() +{ +} + +inline +PakEntry &PakEntry::operator=(const PakEntry &pakEntry) +{ + type(pakEntry.type()); + name(pakEntry.name()); + rawData(((PakEntry&)pakEntry).rawData()); + return *this; +} + +inline +BOOL PakEntry::operator==(const PakEntry &pakEntry)const +{ + return (type()==pakEntry.type()&& + name()==pakEntry.name()&& + ((PakEntry&)*this).rawData()==((PakEntry&)pakEntry).rawData()); +} + +inline +PakEntry::EntryType PakEntry::type(void)const +{ + return mEntryType; +} + +inline +void PakEntry::type(EntryType entryType) +{ + mEntryType=entryType; +} + +inline +const String &PakEntry::name(void)const +{ + return mName; +} + +inline +void PakEntry::name(const String &name) +{ + mName=name; +} + +inline +int PakEntry::id(void)const +{ + return mID; +} + +inline +void PakEntry::id(int id) +{ + mID=id; +} + +inline +GlobalData &PakEntry::rawData(void) +{ + return mRawData; +} + +inline +void PakEntry::rawData(GlobalData &rawData) +{ + mRawData=rawData; +} +#endif \ No newline at end of file diff --git a/mediapak/Release/mediapak.lib b/mediapak/Release/mediapak.lib new file mode 100644 index 0000000..d52a04a Binary files /dev/null and b/mediapak/Release/mediapak.lib differ diff --git a/mediapak/Release/vc60.idb b/mediapak/Release/vc60.idb new file mode 100644 index 0000000..2cc9457 Binary files /dev/null and b/mediapak/Release/vc60.idb differ diff --git a/mediapak/SCRAPS.TXT b/mediapak/SCRAPS.TXT new file mode 100644 index 0000000..25de64b --- /dev/null +++ b/mediapak/SCRAPS.TXT @@ -0,0 +1,29 @@ +#if 0 +BOOL MediaPak::open(const String &pathFileName,BOOL creationFlag) +{ + DWORD magic; + + mPakFile.close(); + mEntries=0; + if(creationFlag) + { + mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Overwrite); + magic=HeaderMagic; + mEntries=0; + mPakFile.write((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + mPakFile.write((unsigned char*)&mEntries,sizeof(mEntries)); + } + else + { + mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Open); + if(!mPakFile.isOkay())return FALSE; + mPakFile.read((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + if(magic!=HeaderMagic){mPakFile.close();return FALSE;} + mPakFile.read((unsigned char*)&mEntries,sizeof(mEntries)); + } + return TRUE; +} +#endif + diff --git a/mediapak/entryhdr.hpp b/mediapak/entryhdr.hpp new file mode 100644 index 0000000..4774457 --- /dev/null +++ b/mediapak/entryhdr.hpp @@ -0,0 +1,129 @@ +#ifndef _MEDIAPAK_ENTRYHEADER_HPP_ +#define _MEDIAPAK_ENTRYHEADER_HPP_ +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif + +class EntryHeader +{ +public: + EntryHeader(void); + EntryHeader(const EntryHeader &someEntryHeader); + virtual ~EntryHeader(); + EntryHeader &operator=(const EntryHeader &someEntryHeader); + bool operator==(const EntryHeader &someEntryHeader)const; + bool read(FileHandle &someFileHandle); + bool write(FileHandle &someFileHandle); + int entryLength(void)const; + void entryLength(int entryLength); + int entryType(void)const; + void entryType(int entryType); + int entryID(void)const; + void entryID(int entryID); + int entryNameLength(void)const; + void entryNameLength(int entryNameLength); +private: + int mEntryLength; + int mEntryType; + int mEntryID; + int mEntryNameLength; +}; + +inline +EntryHeader::EntryHeader(void) +: mEntryLength(0), mEntryType(0), mEntryID(0), mEntryNameLength(0) +{ +} + +inline +EntryHeader::EntryHeader(const EntryHeader &someEntryHeader) +{ + *this=someEntryHeader; +} + +inline +EntryHeader::~EntryHeader() +{ +} + +inline +EntryHeader &EntryHeader::operator=(const EntryHeader &someEntryHeader) +{ + entryLength(someEntryHeader.entryLength()); + entryType(someEntryHeader.entryType()); + entryID(someEntryHeader.entryID()); + entryNameLength(someEntryHeader.entryNameLength()); + return *this; +} + +inline +bool EntryHeader::operator==(const EntryHeader &someEntryHeader)const +{ + return (entryLength()==someEntryHeader.entryLength()&& + entryType()==someEntryHeader.entryType()&& + entryID()==someEntryHeader.entryID()&& + entryNameLength()==someEntryHeader.entryNameLength()); +} + +inline +bool EntryHeader::read(FileHandle &someFileHandle) +{ + if(!someFileHandle.isOkay())return false; + return someFileHandle.read((unsigned char*)&mEntryLength,sizeof(mEntryLength)+sizeof(mEntryType)+sizeof(mEntryID)+sizeof(mEntryNameLength)); +} + +inline +bool EntryHeader::write(FileHandle &someFileHandle) +{ + if(!someFileHandle.isOkay())return false; + return someFileHandle.write((unsigned char*)&mEntryLength,sizeof(mEntryLength)+sizeof(mEntryType)+sizeof(mEntryID)+sizeof(mEntryNameLength)); +} + +inline +int EntryHeader::entryLength(void)const +{ + return mEntryLength; +} + +inline +void EntryHeader::entryLength(int entryLength) +{ + mEntryLength=entryLength; +} + +inline +int EntryHeader::entryType(void)const +{ + return mEntryType; +} + +inline +void EntryHeader::entryType(int entryType) +{ + mEntryType=entryType; +} + +inline +int EntryHeader::entryID(void)const +{ + return mEntryID; +} + +inline +void EntryHeader::entryID(int entryID) +{ + mEntryID=entryID; +} + +inline +int EntryHeader::entryNameLength(void)const +{ + return mEntryNameLength; +} + +inline +void EntryHeader::entryNameLength(int entryNameLength) +{ + mEntryNameLength=entryNameLength; +} +#endif \ No newline at end of file diff --git a/mediapak/mediapak.001 b/mediapak/mediapak.001 new file mode 100644 index 0000000..0906522 --- /dev/null +++ b/mediapak/mediapak.001 @@ -0,0 +1,110 @@ +# Microsoft Developer Studio Project File - Name="mediapak" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=mediapak - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mediapak.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mediapak.mak" CFG="mediapak - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mediapak - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "mediapak - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "mediapak - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /I "/work" /I "/parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mediapak.lib" + +!ENDIF + +# Begin Target + +# Name "mediapak - Win32 Release" +# Name "mediapak - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\mediapak.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\entryinf.hpp +# End Source File +# Begin Source File + +SOURCE=.\mediapak.hpp +# End Source File +# Begin Source File + +SOURCE=.\pakentry.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/mediapak/mediapak.dsp b/mediapak/mediapak.dsp new file mode 100644 index 0000000..4987b9d --- /dev/null +++ b/mediapak/mediapak.dsp @@ -0,0 +1,116 @@ +# Microsoft Developer Studio Project File - Name="mediapak" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=mediapak - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mediapak.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mediapak.mak" CFG="mediapak - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mediapak - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "mediapak - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mediapak - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "mediapak - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /YX /FD /I /work" /I /parts" " " /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mediapak.lib" + +!ENDIF + +# Begin Target + +# Name "mediapak - Win32 Release" +# Name "mediapak - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\mediapak.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\entryinf.hpp +# End Source File +# Begin Source File + +SOURCE=.\mediapak.hpp +# End Source File +# Begin Source File + +SOURCE=.\pakentry.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/mesh/MESH.DSW b/mesh/MESH.DSW new file mode 100644 index 0000000..bfce04a --- /dev/null +++ b/mesh/MESH.DSW @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mesh"=.\Mesh.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/mesh/MESH.MAK b/mesh/MESH.MAK new file mode 100644 index 0000000..e4e9f74 --- /dev/null +++ b/mesh/MESH.MAK @@ -0,0 +1,430 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=mesh - Win32 Debug +!MESSAGE No configuration specified. Defaulting to mesh - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "mesh - Win32 Release" && "$(CFG)" != "mesh - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Mesh.mak" CFG="mesh - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mesh - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mesh - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "mesh - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mesh - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Mesh.exe" + +CLEAN : + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Mesh.obj" + -@erase "$(INTDIR)\Polypnt.obj" + -@erase "$(INTDIR)\Segment.obj" + -@erase "$(OUTDIR)\Mesh.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Mesh.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mesh.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Mesh.pdb" /machine:I386 /out:"$(OUTDIR)/Mesh.exe" +LINK32_OBJS= \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Mesh.obj" \ + "$(INTDIR)\Polypnt.obj" \ + "$(INTDIR)\Segment.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Mesh.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "mesh - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Mesh.exe" + +CLEAN : + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Mesh.obj" + -@erase "$(INTDIR)\Polypnt.obj" + -@erase "$(INTDIR)\Segment.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Mesh.exe" + -@erase "$(OUTDIR)\Mesh.ilk" + -@erase "$(OUTDIR)\Mesh.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Mesh.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mesh.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/Mesh.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Mesh.exe" +LINK32_OBJS= \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Mesh.obj" \ + "$(INTDIR)\Polypnt.obj" \ + "$(INTDIR)\Segment.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Mesh.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "mesh - Win32 Release" +# Name "mesh - Win32 Debug" + +!IF "$(CFG)" == "mesh - Win32 Release" + +!ELSEIF "$(CFG)" == "mesh - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Segment.cpp +DEP_CPP_SEGME=\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Segment.obj" : $(SOURCE) $(DEP_CPP_SEGME) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp + +!IF "$(CFG)" == "mesh - Win32 Release" + +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mesh - Win32 Debug" + +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mesh.cpp + +!IF "$(CFG)" == "mesh - Win32 Release" + +DEP_CPP_MESH_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Mesh.obj" : $(SOURCE) $(DEP_CPP_MESH_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mesh - Win32 Debug" + +DEP_CPP_MESH_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mesh.hpp"\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\.\Segment.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Mesh.obj" : $(SOURCE) $(DEP_CPP_MESH_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Polypnt.cpp +DEP_CPP_POLYP=\ + {$(INCLUDE)}"\.\Polypnt.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Polypnt.obj" : $(SOURCE) $(DEP_CPP_POLYP) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "mesh - Win32 Release" + +!ELSEIF "$(CFG)" == "mesh - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/mesh/MESH.MDP b/mesh/MESH.MDP new file mode 100644 index 0000000..0689d95 Binary files /dev/null and b/mesh/MESH.MDP differ diff --git a/mesh/MESH.PLG b/mesh/MESH.PLG new file mode 100644 index 0000000..22d8905 --- /dev/null +++ b/mesh/MESH.PLG @@ -0,0 +1,46 @@ + + +
+

Build Log

+

+--------------------Configuration: mesh - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP21.tmp" with contents +[ +/nologo /Gz /Zp8 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/Mesh.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\mesh\Main.cpp" +"D:\work\mesh\Mainwnd.cpp" +"D:\work\mesh\Mesh.cpp" +"D:\work\mesh\Polypnt.cpp" +"D:\work\mesh\Segment.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP21.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP22.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/Mesh.pdb" /debug /machine:I386 /out:".\msvcobj/Mesh.exe" +.\msvcobj\Main.obj +.\msvcobj\Mainwnd.obj +.\msvcobj\Mesh.obj +.\msvcobj\Polypnt.obj +.\msvcobj\Segment.obj +\work\exe\mscommon.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP22.tmp" +

Output Window

+Compiling... +Main.cpp +Mainwnd.cpp +Mesh.cpp +Polypnt.cpp +Segment.cpp +Linking... + Creating library .\msvcobj/Mesh.lib and object .\msvcobj/Mesh.exp + + + +

Results

+Mesh.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/mesh/MESH.opt b/mesh/MESH.opt new file mode 100644 index 0000000..b74af29 Binary files /dev/null and b/mesh/MESH.opt differ diff --git a/mesh/Mesh.001 b/mesh/Mesh.001 new file mode 100644 index 0000000..e655e5b --- /dev/null +++ b/mesh/Mesh.001 @@ -0,0 +1,144 @@ +# Microsoft Developer Studio Project File - Name="mesh" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=mesh - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Mesh.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Mesh.mak" CFG="mesh - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mesh - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mesh - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mesh - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "mesh - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "mesh - Win32 Release" +# Name "mesh - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mesh.cpp +# End Source File +# Begin Source File + +SOURCE=..\exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=.\Polypnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Segment.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mesh.hpp +# End Source File +# Begin Source File + +SOURCE=.\Polypnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Segment.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/mesh/Mesh.dsp b/mesh/Mesh.dsp new file mode 100644 index 0000000..6bae8da --- /dev/null +++ b/mesh/Mesh.dsp @@ -0,0 +1,141 @@ +# Microsoft Developer Studio Project File - Name="mesh" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=mesh - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Mesh.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Mesh.mak" CFG="mesh - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mesh - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mesh - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mesh - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "mesh - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /Zp8 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "mesh - Win32 Release" +# Name "mesh - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mesh.cpp +# End Source File +# Begin Source File + +SOURCE=.\Polypnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Segment.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mesh.hpp +# End Source File +# Begin Source File + +SOURCE=.\Polypnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Segment.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/mesh/SCRAPS.TXT b/mesh/SCRAPS.TXT new file mode 100644 index 0000000..7ac5f76 --- /dev/null +++ b/mesh/SCRAPS.TXT @@ -0,0 +1,85 @@ +#if 0 +void Segment::drawSegment(HDC hDC,HPEN hPen)const +{ + DWORD currentPosition; + HPEN hOldPen(0); + int saveMode; + + saveMode=::SetROP2(hDC,R2_NOT); + if(hPen)hOldPen=(HPEN)::SelectObject(hDC,hPen); + currentPosition=::GetCurrentPosition(hDC); + ::MoveTo(hDC,mFirstPoint.xPoint(),mFirstPoint.yPoint()); + ::LineTo(hDC,mSecondPoint.xPoint(),mSecondPoint.yPoint()); + ::MoveTo(hDC,LOWORD(currentPosition),HIWORD(currentPosition)); + if(hOldPen)::SelectObject(hDC,hOldPen); + ::SetROP2(hDC,saveMode); +} +#endif + + +// getBoundingRect(mCurrentIntersection,boundingRect); +// invalidate(boundingRect,FALSE); + + + +void GridMesh::drawBoundingRect(const Rect &boundingRect) +{ + Pen drawingPen(RGBColor(0,255,0),1); + PureDevice displayDevice(*this); + + displayDevice.line(Point(boundingRect.left(),boundingRect.top()),Point(boundingRect.right(),boundingRect.top()),drawingPen); + displayDevice.line(Point(boundingRect.right(),boundingRect.top()),Point(boundingRect.right(),boundingRect.bottom()),drawingPen); + displayDevice.line(Point(boundingRect.right(),boundingRect.bottom()),Point(boundingRect.left(),boundingRect.bottom()),drawingPen); + displayDevice.line(Point(boundingRect.left(),boundingRect.bottom()),Point(boundingRect.left(),boundingRect.top()),drawingPen); + +} + +/* +void GridMesh::mouseUp(int x,int y) +{ + Rect boundingRect; + GDIPoint swapPoint; + GDIPoint mousePoint; + size_t size; + int index; + + if(InActive==mStatus)return; + mStatus=InActive; + mousePoint.setPoint(x,y); + size=(int)mCurrentIntersection.size(); + for(index=0;index::operator[](mCurrentIntersection[index].vectorIndex())=mCurrentIntersection[index]; + PureDevice displayDevice(*this); + size=(int)PureVector::size(); + for(int i=0;i::operator[](i)).drawSegment(displayDevice,mDrawingPen); + invalidate(); + update(); +} */ + + + +void GridMesh::mouseUp(int x,int y) +{ + Rect boundingRect; + GDIPoint swapPoint; + GDIPoint mousePoint; + size_t size; + int index; + + if(InActive==mStatus)return; + mStatus=InActive; + mousePoint.setPoint(x,y); + size=(int)mCurrentIntersection.size(); + for(index=0;index::operator[](mCurrentIntersection[index].vectorIndex())=mCurrentIntersection[index]; + PureDevice displayDevice(*this); + size=(int)PureVector::size(); +// for(int i=0;i::operator[](i)).drawSegment(displayDevice,mDrawingPen,true); + getBoundingRect(mCurrentIntersection,boundingRect); + +// invalidate(FALSE); + + +// drawBoundingRect(boundingRect); + +// invalidate(boundingRect,FALSE); + update(); +} diff --git a/mesh/main.cpp b/mesh/main.cpp new file mode 100644 index 0000000..faa2241 --- /dev/null +++ b/mesh/main.cpp @@ -0,0 +1,14 @@ +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + MainWindow applicationWindow; + return applicationWindow.messageLoop(); +} diff --git a/mesh/main.hpp b/mesh/main.hpp new file mode 100644 index 0000000..1c07a02 --- /dev/null +++ b/mesh/main.hpp @@ -0,0 +1,67 @@ +#ifndef _MESH_MAIN_HPP_ +#define _MESH_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/mesh/mainwnd.cpp b/mesh/mainwnd.cpp new file mode 100644 index 0000000..785506e --- /dev/null +++ b/mesh/mainwnd.cpp @@ -0,0 +1,101 @@ +#include +#include +#include + +char MainWindow::smszClassName[]="Proto"; +char MainWindow::smszMenuName[]=""; + +MainWindow::MainWindow(void) +{ + mPaintHandler.setCallback(this,&MainWindow::paintHandler); + mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); + mCommandHandler.setCallback(this,&MainWindow::commandHandler); + mSizeHandler.setCallback(this,&MainWindow::sizeHandler); + mCreateHandler.setCallback(this,&MainWindow::createHandler); + insertHandlers(); + registerClass(); + ::CreateWindow(smszClassName,smszClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); + mGridMesh=new GridMesh(*this,width(),height(),GridMesh::Show); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + Window::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + Window::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + Window::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + Window::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + Window::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); +} + +void MainWindow::removeHandlers(void) +{ + Window::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + Window::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + Window::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + Window::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + Window::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); +} + +void MainWindow::registerClass(void)const +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,smszClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.lpszMenuName =smszMenuName; + wndClass.lpszClassName =smszClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,smszClassName,(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + diff --git a/mesh/mainwnd.hpp b/mesh/mainwnd.hpp new file mode 100644 index 0000000..e8551d0 --- /dev/null +++ b/mesh/mainwnd.hpp @@ -0,0 +1,43 @@ +#ifndef _MESH_MAINWINDOW_HPP_ +#define _MESH_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif + +class GridMesh; + +class MainWindow : public Window +{ +public: + MainWindow(void); + virtual ~MainWindow(); + int messageLoop(void)const; +private: + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mSizeHandler; + Callback mCreateHandler; + SmartPointer mGridMesh; + static char smszClassName[]; + static char smszMenuName[]; +}; + +inline +int MainWindow::messageLoop(void)const +{ + return Window::messageLoop(); +} +#endif diff --git a/mesh/mesh.cpp b/mesh/mesh.cpp new file mode 100644 index 0000000..5d5391a --- /dev/null +++ b/mesh/mesh.cpp @@ -0,0 +1,495 @@ +#include +#include +#include +#include +#include +#include + +char GridMesh::szClassName[]="MESH97A"; +char GridMesh::szMenuName[]={'\0'}; + +GridMesh::GridMesh(HWND hParent,int width,int height,GridShow visibility) +: mhParent(hParent), mStatus(InActive), mGridLines(GridLines), + mIsSuspended(FALSE), mhInstance(Main::processInstance()), + mDrawingPen(RGBColor(0,0,0),1) +{ + mCreateHandler.setCallback(this,&GridMesh::createHandler); + mPaintHandler.setCallback(this,&GridMesh::paintHandler); + mLeftButtonUpHandler.setCallback(this,&GridMesh::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&GridMesh::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&GridMesh::mouseMoveHandler); + mDestroyHandler.setCallback(this,&GridMesh::destroyHandler); + insertHandlers(); + mVersionInfo=szClassName; + registerClass(); + Rect winRect(CW_USEDEFAULT,CW_USEDEFAULT,width,height); + createWindow(WS_EX_TRANSPARENT,szClassName,String(),WS_CHILD|WS_CLIPSIBLINGS,winRect,mhParent,(HMENU)0,processInstance(),(LPSTR)(Window*)this); + if(GridMesh::Show!=visibility)return; + show(SW_SHOW); + update(); +} + +GridMesh::~GridMesh() +{ + Window::destroy(); + removeHandlers(); +} + +void GridMesh::insertHandlers(void) +{ + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +void GridMesh::removeHandlers(void) +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +void GridMesh::registerClass(void) +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,szClassName,(WNDCLASS FAR *)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(GridMesh*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =0; + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);; + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +CallbackData::ReturnType GridMesh::createHandler(CallbackData &/*someCallbackData*/) +{ + sendMessage(WM_NCACTIVATE,TRUE,0L); + newMesh(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::paintHandler(CallbackData &someCallbackData) +{ + int segmentCount((int)Array::size()); + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=*pPaintInfo; + for(int itemIndex=0;itemIndex::operator[](itemIndex)).drawSegment((PureDevice&)*pPaintInfo,mDrawingPen); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::leftButtonUpHandler(CallbackData &someCallbackData) +{ + mouseUp(someCallbackData.loWord(),someCallbackData.hiWord()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::leftButtonDownHandler(CallbackData &someCallbackData) +{ + mouseDown(someCallbackData.loWord(),someCallbackData.hiWord()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::mouseMoveHandler(CallbackData &someCallbackData) +{ + mouseMove(someCallbackData.loWord(),someCallbackData.hiWord()); + return FALSE; +} + +CallbackData::ReturnType GridMesh::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void GridMesh::showWindow(int visible) +{ + show(visible?SW_SHOW:SW_HIDE); + invalidate(); +} + +void GridMesh::newMesh(WORD gridLines) +{ + createMesh(gridLines,(Array&)*this); + ::InvalidateRect(mhParent,0,TRUE); + invalidate(); +} + +void GridMesh::createMesh(WORD gridLines,Array &someSegmentVector) +{ + RECT clientRect; + WORD xLength; + WORD yLength; + GDIPoint tempFirstPoint; + GDIPoint tempSecondPoint; + WORD vectorSize(0); + Index vectorIndex(0); + + if(gridLines>MaxGridLines)mGridLines=GridLines; + else mGridLines=gridLines; + ::GetClientRect(*this,(RECT FAR *)&clientRect); + xLength=clientRect.right/(mGridLines+1); + yLength=clientRect.bottom/(mGridLines+1); + for(int x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++)vectorSize+=2; + someSegmentVector.size(vectorSize); + for(x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + { + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++) + { + tempFirstPoint.setPoint(x+xLength,y+yLength); + tempSecondPoint.setPoint(x+xLength,y); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + tempSecondPoint.setPoint(x,y+yLength); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + } + } +} + +void GridMesh::mouseDown(int x,int y) +{ + GDIPoint mousePoint; + size_t size; + + if(mIsSuspended)return; + mCurrentIntersection.remove(); + mousePoint.setPoint(x,y); + if(!closestIntersection(mCurrentIntersection,mousePoint)) + { + mStatus=InActive; + ::MessageBeep(-1); + return; + } + mStatus=Active; + PureDevice displayDevice(*this); + size=(int)mCurrentIntersection.size(); + for(int i=0;i::operator[](mCurrentIntersection[index].vectorIndex())=mCurrentIntersection[index]; +} + +WORD GridMesh::closestIntersection(Block &filterBlock,GDIPoint &mousePoint) +{ + size_t size((int)Array::size()); + DWORD tempDistance; + DWORD leastDistance; + Segment tempSegment; + Segment minSegment; + + if(!size)return FALSE; + filterBlock.remove(); + while(IntersectionSegments!=filterBlock.size()) + { + for(int index=0;index::operator[](index); + while(isInBlock(filterBlock,tempSegment))tempSegment=Array::operator[](++index); + leastDistance=minDistance(tempSegment,mousePoint); + } + else + { + tempDistance=minDistance(Array::operator[](index),mousePoint); + if(tempDistance::operator[](index); + if(!isInBlock(filterBlock,minSegment)) + { + tempSegment=minSegment; + leastDistance=tempDistance; + } + } + } + } + filterBlock.insert(&tempSegment); + } + return orderIntersection(filterBlock); +} + +WORD GridMesh::orderIntersection(Block &intersection) +{ + GDIPoint tempPoint; + GDIPoint swapPoint; + size_t size((int)intersection.size()); + int firstSection(0); + int secondSection(0); + int index; + + if(IntersectionSegments!=size)return FALSE; + tempPoint=intersection[0].firstPoint(); + firstSection=(tempPoint==intersection[1].firstPoint()); + if(!firstSection)firstSection=(tempPoint==intersection[1].secondPoint()); + if(!firstSection) + { + tempPoint=intersection[0].secondPoint(); + secondSection=tempPoint==intersection[1].firstPoint(); + if(!secondSection)secondSection=tempPoint==intersection[1].secondPoint(); + } + if(!firstSection && !secondSection)return FALSE; + for(index=1;index &source,Segment &someSegment) +{ + size_t size((int)source.size()); + + for(int i=0;i::size()); + + if(!size)return FALSE; + if(0==(fp=::fopen((LPSTR)pathFileName,"wb")))return FALSE; + ::fwrite((void*)(LPSTR)mVersionInfo,::strlen(mVersionInfo),1,fp); + ::fwrite((void*)&size,sizeof(size),1,fp); + ::fwrite((void*)&mGridLines,sizeof(mGridLines),1,fp); + for(int i=0;i::operator[](i).firstPoint(); + ::fwrite((void *)&tempPoint,sizeof(GDIPoint),1,fp); + tempPoint=Array::operator[](i).secondPoint(); + ::fwrite((void*)&tempPoint,sizeof(Point),1,fp); + } + ::fclose(fp); + return TRUE; +} + +WORD GridMesh::loadMesh(String &pathFileName) +{ + FILE *fp; + GDIPoint firstPoint; + GDIPoint secondPoint; + String versionString; + int vectorIndex(0); + size_t size; + + if(0==(fp=::fopen((LPSTR)pathFileName,"rb")))return upgradeStatus(FALSE); + versionString.reserve(String::MaxString); + ::fread((void*)(LPSTR)versionString,::strlen(mVersionInfo),1,fp); + if(versionString!=mVersionInfo) + { + ::fclose(fp); + return upgradeStatus(FALSE); + } + ::fread((void*)&size,sizeof(size),1,fp); + ::fread((void*)&mGridLines,sizeof(mGridLines),1,fp); + Array::size(size); + for(int i=0;i::operator[](vectorIndex)=Segment(firstPoint,secondPoint,vectorIndex); + vectorIndex++; + } + ::fclose(fp); + return upgradeStatus(TRUE); +} + +WORD GridMesh::upgradeStatus(WORD retCode)const +{ + if(!isVisible())show(SW_SHOW); + ::InvalidateRect(mhParent,0,TRUE); + invalidate(); + return retCode; +} + +WORD GridMesh::retrieveMesh(Array &sourcePoints,Array &destPoints) +{ + Array sourceSegments; + createMesh(mGridLines,sourceSegments); + retrieveMesh(sourcePoints,sourceSegments); + retrieveMesh(destPoints,(Array&)*this); + if(sourcePoints.size()!=destPoints.size())return FALSE; + return (WORD)sourcePoints.size(); +} + +WORD GridMesh::retrieveMesh(Array &meshPoints,Array &someSegmentVector)const +{ + Segment tempSegment; + int vectorIndex; + int pointIndex(0); + size_t vectorSize((int)someSegmentVector.size()); + int haveFirstColumn(FALSE); + Array dummyPoint; + + meshPoints.size(0); + meshPoints.size((mGridLines+2)*(mGridLines+2)); + for(vectorIndex=0;vectorIndex ¤tIntersection,Rect &boundingRect) +{ + for(int itemIndex=0;itemIndexsecondPoint.x()?firstPoint.x():secondPoint.x()); + boundingRect.bottom(firstPoint.y()secondPoint.x()?firstPoint.x():secondPoint.x()); + maxPoint.y(firstPoint.y()>secondPoint.y()?firstPoint.y():secondPoint.y()); + if(minPoint.x()boundingRect.right())boundingRect.right(maxPoint.x()); + if(maxPoint.y()>boundingRect.bottom())boundingRect.bottom(maxPoint.y()); + } + } +} diff --git a/mesh/mesh.hpp b/mesh/mesh.hpp new file mode 100644 index 0000000..2cbf321 --- /dev/null +++ b/mesh/mesh.hpp @@ -0,0 +1,110 @@ +#ifndef _MESH_MESH_HPP_ +#define _MESH_MESH_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _MESH_SEGMENT_HPP_ +#include +#endif +#ifndef _MESH_POLYPOINT_HPP_ +#include +#endif + +class GridMesh : public Array, public Window +{ +public: + enum GridShow{Show,NoShow}; + GridMesh(HWND hParent,int width,int height,GridShow visibility=Show); + ~GridMesh(void); + void newMesh(WORD gridLines=GridLines); + WORD saveMesh(String &pathFileName); + WORD loadMesh(String &pathFileName); + WORD retrieveMesh(Array &sourcePoints,Array &destPoints); + WORD rowCols(void)const; + WORD gridLines(void)const; + WORD upgradeStatus(WORD retCode)const; +// WORD isVisible(void)const; + void showWindow(int visible=TRUE); + void suspendMesh(WORD suspend); +private: + typedef LONG Index; + enum Status{InActive,Active}; + enum {IntersectionSegments=4}; + enum {GridLines=8,MaxGridLines=16}; + void registerClass(void); + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + void mouseUp(int x,int y); + void mouseDown(int x,int y); + void mouseMove(int x,int y); + DWORD minDistance(const Segment &someSegment,const GDIPoint &mousePoint); + WORD closestIntersection(Block &filterSegment,GDIPoint &mousePoint); + WORD orderIntersection(Block &intersection); + WORD isInBlock(Block &source,Segment &someSegment); + void createMesh(WORD gridLines,Array &someSegmentVector); + WORD retrieveMesh(Array &meshPoints,Array &meshSegments)const; + void getBoundingRect(Block ¤tIntersection,Rect &boundingRect); + void drawBoundingRect(const Rect &boundingRect); + + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + void insertHandlers(void); + void removeHandlers(void); + + Callback mCreateHandler; + Callback mPaintHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mDestroyHandler; + Pen mDrawingPen; + + + static char szClassName[]; + static char szMenuName[]; + Block mCurrentIntersection; + int mGridLines; + Status mStatus; + String mVersionInfo; + WORD mIsSuspended; + HWND mhParent; + HINSTANCE mhInstance; +}; + +inline +WORD GridMesh::gridLines(void)const +{ + return mGridLines; +} + +inline +WORD GridMesh::rowCols(void)const +{ + return mGridLines+2; +} + +inline +void GridMesh::suspendMesh(WORD suspend) +{ + if(suspend)mIsSuspended=TRUE; + else mIsSuspended=FALSE; +} +#endif diff --git a/mesh/polypnt.cpp b/mesh/polypnt.cpp new file mode 100644 index 0000000..ca63574 --- /dev/null +++ b/mesh/polypnt.cpp @@ -0,0 +1,6 @@ +#include + +PolyPoint::PolyPoint(const PolyPoint &somePolyPoint) +{ + for(int pointIndex=0;pointIndex +#endif + +class PolyPoint +{ +public: + enum {MaxPoint=4}; + PolyPoint(void); + PolyPoint(const PolyPoint &somePolyPoint); + virtual ~PolyPoint(); + GDIPoint &operator[](unsigned point); +private: + GDIPoint mPolyPoint[MaxPoint]; +}; + +inline +PolyPoint::PolyPoint(void) +{ +} + +inline +PolyPoint::~PolyPoint() +{ +} + +inline +GDIPoint &PolyPoint::operator[](unsigned point) +{ + if(point>=MaxPoint)return mPolyPoint[MaxPoint-1]; + return mPolyPoint[point]; +} +#endif \ No newline at end of file diff --git a/mesh/segment.cpp b/mesh/segment.cpp new file mode 100644 index 0000000..1a53273 --- /dev/null +++ b/mesh/segment.cpp @@ -0,0 +1,55 @@ +#include +#include + +Segment::Segment() +{ +} + +Segment::~Segment() +{ +} + +Segment::Segment(const GDIPoint &firstPoint,const GDIPoint &secondPoint,WORD vectorIndex) +{ + mFirstPoint=firstPoint; + mSecondPoint=secondPoint; + mVectorIndex=vectorIndex; +} + +Segment::Segment(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +WORD Segment::operator==(const Segment &someSegment)const +{ + return ((mFirstPoint==someSegment.mFirstPoint && + mSecondPoint==someSegment.mSecondPoint)|| + (mFirstPoint==someSegment.mSecondPoint && + mSecondPoint==someSegment.mFirstPoint)); +} + +void Segment::operator=(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +void Segment::drawSegment(PureDevice &displayDevice,HPEN hPen,bool setROP)const +{ + GDIPoint currentPosition; + HPEN hOldPen(0); + int saveMode; + + if(setROP)saveMode=::SetROP2(displayDevice,R2_NOT); + if(hPen)hOldPen=(HPEN)::SelectObject(displayDevice,hPen); + ::GetCurrentPositionEx(displayDevice,(POINT FAR*)¤tPosition); + ::MoveToEx(displayDevice,mFirstPoint.x(),mFirstPoint.y(),(POINT FAR*)¤tPosition); + ::LineTo(displayDevice,mSecondPoint.x(),mSecondPoint.y()); + ::MoveToEx(displayDevice,currentPosition.x(),currentPosition.y(),(POINT FAR*)&mSecondPoint); + if(hOldPen)::SelectObject(displayDevice,hOldPen); + if(setROP)::SetROP2(displayDevice,saveMode); +} diff --git a/mesh/segment.hpp b/mesh/segment.hpp new file mode 100644 index 0000000..e174001 --- /dev/null +++ b/mesh/segment.hpp @@ -0,0 +1,97 @@ +#ifndef _MESH_SEGMENT_HPP_ +#define _MESH_SEGMENT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif + +class PureDevice; + +class Segment +{ +public: + Segment(void); + Segment(const GDIPoint &firstPoint,const GDIPoint &secondPoint,WORD vectorIndex); + Segment(const Segment &someSegment); + virtual ~Segment(void); + WORD operator==(const Segment &someSegment)const; + void operator=(const Segment &someSegment); + void drawSegment(PureDevice &displayDevice,HPEN hPen=0,bool setROP=true)const; + WORD vectorIndex(void)const; + WORD xFirst(void)const; + WORD xSecond(void)const; + WORD yFirst(void)const; + WORD ySecond(void)const; + const GDIPoint &firstPoint(void)const; + const GDIPoint &secondPoint(void)const; + void firstPoint(const GDIPoint &somePoint); + void secondPoint(const GDIPoint &somePoint); + GDIPoint leadingPoint(void)const; +private: + GDIPoint mFirstPoint; + GDIPoint mSecondPoint; + WORD mVectorIndex; +}; + +inline +WORD Segment::xFirst(void)const +{ + return mFirstPoint.x(); +} + +inline +WORD Segment::xSecond(void)const +{ + return mSecondPoint.x(); +} + +inline +WORD Segment::yFirst(void)const +{ + return mFirstPoint.y(); +} + +inline +WORD Segment::ySecond(void)const +{ + return mSecondPoint.y(); +} + +inline +const GDIPoint &Segment::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +const GDIPoint &Segment::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void Segment::firstPoint(const GDIPoint &somePoint) +{ + mFirstPoint=somePoint; +} + +inline +void Segment::secondPoint(const GDIPoint &somePoint) +{ + mSecondPoint=somePoint; +} + +inline +GDIPoint Segment::leadingPoint(void)const +{ + return (mFirstPoint.y() +#include +#include +#include +#include + +Convex::Convex() +: mWidth(0), mHeight(0), mxHalf(0), myHalf(0) +{ +} + +Convex::~Convex() +{ +} + +Image Convex::performConvex(Image &srcImage,GUIWindow &window) +{ + RGB888 rgb888; + Image dstImage; + POINT tempPoint; + double scaleFactor; + double tempFactor; + + mWidth=srcImage.width(); + mHeight=srcImage.height(); + mxHalf=mWidth/2; + myHalf=mHeight/2; + dstImage.newImage(mWidth,mHeight,window); + for(int y=0;y=mWidth)continue; + if(tempPoint.y>=mHeight)continue; + srcImage.getAt(y,x,rgb888); + dstImage.setAt(tempPoint.y,tempPoint.x,rgb888); + } + } + return dstImage; +} diff --git a/meshwrp/convex.hpp b/meshwrp/convex.hpp new file mode 100644 index 0000000..0d1ae9d --- /dev/null +++ b/meshwrp/convex.hpp @@ -0,0 +1,47 @@ +#ifndef _MESHWRP_CONVEX_HPP_ +#define _MESHWRP_CONVEX_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Image; +class GUIWindow; + +class Convex +{ +public: + Convex(void); + virtual ~Convex(void); + Image performConvex(Image &srcImage,GUIWindow &window); +private: + void cartesianPoint(POINT &imagePoint)const; + void imagePoint(POINT &cartesianPoint)const; + void setPoint(int x,int y,POINT &somePoint)const; + + unsigned long mxHalf; + unsigned long myHalf; + unsigned long mWidth; + unsigned long mHeight; +}; + +inline +void Convex::cartesianPoint(POINT &imagePoint)const +{ + imagePoint.x-=mxHalf; + imagePoint.y=(mHeight-1)-(myHalf+imagePoint.y); +} + +inline +void Convex::imagePoint(POINT &cartesianPoint)const +{ + cartesianPoint.x+=mxHalf; + cartesianPoint.y=(mHeight-1)-(myHalf+cartesianPoint.y); +} + +inline +void Convex::setPoint(int x,int y,POINT &point)const +{ + point.x=x; + point.y=y; +} +#endif diff --git a/meshwrp/cut.bmp b/meshwrp/cut.bmp new file mode 100644 index 0000000..6345e05 Binary files /dev/null and b/meshwrp/cut.bmp differ diff --git a/meshwrp/eject.bmp b/meshwrp/eject.bmp new file mode 100644 index 0000000..6dcbf0b Binary files /dev/null and b/meshwrp/eject.bmp differ diff --git a/meshwrp/factor.cpp b/meshwrp/factor.cpp new file mode 100644 index 0000000..ec342dc --- /dev/null +++ b/meshwrp/factor.cpp @@ -0,0 +1,169 @@ +#include +#include + +Factor::Factor(GUIWindow &parent,const String &strCaption) +: mhParent(parent), mWidthFactor(0.00), mWidthIncremental(0.00), + mWidthOperation(None), mHeightFactor(0.00), mHeightIncremental(0.00), + mHeightOperation(None), mhInstance(parent.processInstance()) +{ + mInitHandler.setCallback(this,&Factor::initHandler); + mCommandHandler.setCallback(this,&Factor::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + mCaption=strCaption; +} + +Factor::~Factor() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); +} + +bool Factor::showFactor(double &widthFactor,double &heightFactor,double &widthIncremental,Operation &widthOperation,double &heightIncremental,Operation &heightOperation) +{ + bool returnCode; + mFactorType=Incremental; + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Factor",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + if(!returnCode)return false; + widthFactor=mWidthFactor; + widthIncremental=mWidthIncremental; + widthOperation=mWidthOperation; + heightFactor=mHeightFactor; + heightIncremental=mHeightIncremental; + heightOperation=mHeightOperation; + return true; +} + +bool Factor::showFactor(double &widthFactor,double &heightFactor) +{ + bool returnCode; + + mFactorType=NonIncremental; + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Factor",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + if(!returnCode)return false; + widthFactor=mWidthFactor; + heightFactor=mHeightFactor; + return true; +} + +void Factor::initializeStrings(void) +{ + mWidthStringIndex=0; + mHeightStringIndex=0; + mWidthStrings.insert(&String("+=")); + mWidthStrings.insert(&String("-=")); + mWidthStrings.insert(&String("\\=")); + mWidthStrings.insert(&String("*=")); + mHeightStrings.insert(&mWidthStrings[0]); + mHeightStrings.insert(&mWidthStrings[1]); + mHeightStrings.insert(&mWidthStrings[2]); + mHeightStrings.insert(&mWidthStrings[3]); +} + +void Factor::currentOperation(WORD stringIndex,Operation &operation)const +{ + switch(stringIndex) + { + case 0 : + operation=Add; + break; + case 1 : + operation=Subtract; + break; + case 2 : + operation=Divide; + break; + case 3 : + operation=Multiply; + break; + } +} + +CallbackData::ReturnType Factor::initHandler(CallbackData &callbackData) +{ + mWidthStrings.remove(); + mHeightStrings.remove(); + if(Incremental==mFactorType) + { + Rect cRect; + windowRect(cRect); + moveWindow(Rect(cRect.left(),cRect.top(),407,148),true); + initializeStrings(); + currentOperation(mWidthStringIndex,mWidthOperation); + currentOperation(mHeightStringIndex,mHeightOperation); + setText(FACTOR_WOPSTRING,mWidthStrings[mWidthStringIndex]); + setText(FACTOR_HOPSTRING,mHeightStrings[mHeightStringIndex]); + } + setCaption(mCaption); + return true; +} + +CallbackData::ReturnType Factor::commandHandler(CallbackData &callbackData) +{ + switch(callbackData.wmCommandID()) + { + case FACTOR_WIDTHOP : + handleWidth(callbackData); + break; + case FACTOR_HEIGHTOP : + handleHeight(callbackData); + break; + case IDOK : + handleOk(callbackData); + break; + case IDCANCEL : + handleCancel(); + break; + } + return true; +} + +void Factor::handleWidth(CallbackData &callbackData) +{ + LRESULT checkState; + + if(!(BN_CLICKED==HIWORD(callbackData.lParam())))return; + if(!mWidthStrings.size())return; + if(++mWidthStringIndex>=mWidthStrings.size())mWidthStringIndex=0; + checkState=sendMessage(FACTOR_WIDTHOP,BM_GETCHECK,0,0L); + sendMessage(FACTOR_WIDTHOP,BM_SETCHECK,!checkState,0L); + setText(FACTOR_WOPSTRING,mWidthStrings[mWidthStringIndex]); + sendMessage(FACTOR_WIDTHOP,BM_SETCHECK,!(!checkState),0L); + currentOperation(mWidthStringIndex,mWidthOperation); +} + +void Factor::handleHeight(CallbackData &callbackData) +{ + LRESULT checkState; + + if(!(BN_CLICKED==HIWORD(callbackData.lParam())))return; + if(!mHeightStrings.size())return; + + if(++mHeightStringIndex>=mHeightStrings.size())mHeightStringIndex=0; + checkState=sendMessage(FACTOR_HEIGHTOP,BM_GETCHECK,0,0L); + sendMessage(FACTOR_HEIGHTOP,BM_SETCHECK,!checkState,0L); + setText(FACTOR_HOPSTRING,mHeightStrings[mHeightStringIndex]); + sendMessage(FACTOR_HEIGHTOP,BM_SETCHECK,!(!checkState),0L); + currentOperation(mHeightStringIndex,mHeightOperation); +} + +void Factor::handleOk(CallbackData &callackData) +{ + String itemText; + + getText(FACTOR_WIDTH,itemText); + mWidthFactor=itemText.toDouble(); + getText(FACTOR_HEIGHT,itemText); + mHeightFactor=itemText.toDouble(); + getText(FACTOR_WIDTHINCR,itemText); + mWidthIncremental=itemText.toDouble(); + getText(FACTOR_HEIGHTINCR,itemText); + mHeightIncremental=itemText.toDouble(); + endDialog(true); +} + +void Factor::handleCancel() +{ + endDialog(false); +} + diff --git a/meshwrp/factor.hpp b/meshwrp/factor.hpp new file mode 100644 index 0000000..449c40d --- /dev/null +++ b/meshwrp/factor.hpp @@ -0,0 +1,55 @@ +#ifndef _MESHWRP_FACTOR_HPP_ +#define _MESHWRP_FACTOR_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Factor : public DWindow +{ +public: + enum Type{Incremental,NonIncremental}; + enum Operation{Add,Subtract,Multiply,Divide,None}; + Factor(GUIWindow &parent,const String &strCaption); + virtual ~Factor(); + bool showFactor(double &widthFactor,double &heightFactor); + bool showFactor(double &widthFactor,double &heightFactor, + double &widthIncremental,Operation &widthOperation, + double &heightIncremental, Operation &heightOperation); +private: + CallbackData::ReturnType initHandler(CallbackData &callbackData); + CallbackData::ReturnType commandHandler(CallbackData &callbackData); + void handleWidth(CallbackData &callackData); + void handleHeight(CallbackData &callbackData); + void handleOk(CallbackData &callbackData); + void handleCancel(void); + +// virtual int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void initializeStrings(void); + void currentOperation(WORD stringIndex,Operation &operation)const; + + HWND mhParent; + HINSTANCE mhInstance; + String mCaption; + Callback mInitHandler; + Callback mCommandHandler; + +// char mCaption[MaxCaption]; + double mWidthFactor; + double mWidthIncremental; + Operation mWidthOperation; + double mHeightFactor; + double mHeightIncremental; + Operation mHeightOperation; + Type mFactorType; + Block mWidthStrings; + Block mHeightStrings; + WORD mWidthStringIndex; + WORD mHeightStringIndex; +}; +#endif diff --git a/meshwrp/filehelp.bmp b/meshwrp/filehelp.bmp new file mode 100644 index 0000000..2d94727 Binary files /dev/null and b/meshwrp/filehelp.bmp differ diff --git a/meshwrp/filenew.bmp b/meshwrp/filenew.bmp new file mode 100644 index 0000000..f4e7be7 Binary files /dev/null and b/meshwrp/filenew.bmp differ diff --git a/meshwrp/fileopen.bmp b/meshwrp/fileopen.bmp new file mode 100644 index 0000000..aced52d Binary files /dev/null and b/meshwrp/fileopen.bmp differ diff --git a/meshwrp/filesave.bmp b/meshwrp/filesave.bmp new file mode 100644 index 0000000..bbc7e73 Binary files /dev/null and b/meshwrp/filesave.bmp differ diff --git a/meshwrp/frame.bmp b/meshwrp/frame.bmp new file mode 100644 index 0000000..2f0b243 Binary files /dev/null and b/meshwrp/frame.bmp differ diff --git a/meshwrp/framedlg.cpp b/meshwrp/framedlg.cpp new file mode 100644 index 0000000..0fae0b6 --- /dev/null +++ b/meshwrp/framedlg.cpp @@ -0,0 +1,75 @@ +#include +#include + +FrameDialog::FrameDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&FrameDialog::initDialogHandler); + mCommandHandler.setCallback(this,&FrameDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +FrameDialog::FrameDialog(const FrameDialog &someFrameDialog) +: mhParent(someFrameDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&FrameDialog::initDialogHandler); + mCommandHandler.setCallback(this,&FrameDialog::commandHandler); +} + +FrameDialog::~FrameDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +FrameDialog &FrameDialog::operator=(const FrameDialog &/*someEntryDialog*/) +{ // no implementation + return *this; +} + +WORD FrameDialog::perform(DWORD &meshFrames) +{ + mMeshFrames=meshFrames; + WORD resultCode(::DialogBoxParam(processInstance(),(LPSTR)"Frame",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this))); + if(resultCode)meshFrames=mMeshFrames; + return resultCode; +} + +CallbackData::ReturnType FrameDialog::initDialogHandler(CallbackData &/*someCallbackData*/) +{ + setFrameCount(mMeshFrames); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType FrameDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + mMeshFrames=getFrameCount(); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(FALSE); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +DWORD FrameDialog::getFrameCount(void) +{ + String strControlText; + getText(FRAME_FRAMES,strControlText); + return strControlText.toInt(); +} + +void FrameDialog::setFrameCount(DWORD frameCount) +{ + String strControlText; + + strControlText.fromInt(frameCount); + setText(FRAME_FRAMES,strControlText); +} + + diff --git a/meshwrp/framedlg.hpp b/meshwrp/framedlg.hpp new file mode 100644 index 0000000..e14425a --- /dev/null +++ b/meshwrp/framedlg.hpp @@ -0,0 +1,32 @@ +#ifndef _MESHWRP_FRAMEDLG_HPP_ +#define _MESHWRP_FRAMEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class FrameDialog : private DWindow +{ +public: + FrameDialog(const GUIWindow &parentWindow); + virtual ~FrameDialog(); + WORD perform(DWORD &meshFrames); +private: + FrameDialog(const FrameDialog &someFrameDialog); + FrameDialog &operator=(const FrameDialog &someFrameDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + DWORD getFrameCount(void); + void setFrameCount(DWORD frameCount); + + Callback mInitDialogHandler; + Callback mCommandHandler; + DWORD mMeshFrames; + HWND mhParent; +}; +#endif \ No newline at end of file diff --git a/meshwrp/image.cpp b/meshwrp/image.cpp new file mode 100644 index 0000000..3be01a9 --- /dev/null +++ b/meshwrp/image.cpp @@ -0,0 +1,112 @@ +#include +#include +#include + +Image::Image() +{ +} + +Image::~Image() +{ +} + +bool Image::open(String strPathFileName,GUIWindow &window) +{ + CursorControl cursorControl; + PureDevice pureDevice; + bool returnCode=false; + + if(strPathFileName.isNull())return false; + strPathFileName.lower(); + pureDevice=window; + cursorControl.waitCursor(true); + if(0!=strPathFileName.strstr(".gif"))returnCode=handleOpenGIF(strPathFileName,pureDevice); + else if(0!=strPathFileName.strstr(".jpg"))returnCode=handleOpenJPG(strPathFileName,pureDevice); + else if(0!=strPathFileName.strstr(".bmp"))returnCode=handleOpenBMP(strPathFileName,pureDevice); + cursorControl.waitCursor(false); + return returnCode; +} + +bool Image::newImage(LONG width,LONG height,GUIWindow &window) +{ + PureDevice pureDevice; + + pureDevice=window; + create(width,height,pureDevice); + if(!isOkay())return false; + for(int row=0;row +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_GUIWINDOW_HPP_ +#include +#endif +#ifndef _JPGIMG_DIB24_HPP_ +#include +#endif + +class Image : public DIB24 +{ +public: + Image(void); + virtual ~Image(); + Image &operator=(const Image &image); + bool open(String strPathFileName,GUIWindow &window); + bool newImage(LONG width,LONG height,GUIWindow &window); + bool display(GUIWindow &window,const Rect &dstRect,const Point &srcPoint); + bool display(GUIWindow &window); +private: + bool handleOpenGIF(const String &strPathFileName,PureDevice &pureDevice); + bool handleOpenJPG(const String &strPathFileName,PureDevice &pureDevice); + bool handleOpenBMP(const String &strPathFileName,PureDevice &pureDevice); +}; + +inline +Image &Image::operator=(const Image &image) +{ + (DIB24&)*this=(DIB24&)image; + return *this; +} +#endif + diff --git a/meshwrp/imageview.cpp b/meshwrp/imageview.cpp new file mode 100644 index 0000000..bea04f6 --- /dev/null +++ b/meshwrp/imageview.cpp @@ -0,0 +1,992 @@ +#include +#include +#include +#include +#include + +/* +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include */ + +//char ImageView::szClassName[]="GIFView"; +//char ImageView::szMenuName[]=""; +//HINSTANCE ImageView::smhInstance=0; + +ImageView::ImageView() +/* : mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), + mMaxColors(0), mWidth(0), mHeight(0), mhPalette(0), + mhGlobalInvert(0), mhGlobal(0), mhBMPGlobal(0), mpStatusBar(0), + mpProcessImage(0), mpBI(0), mhpImageInvert(0), mhpImage(0), + mhSystemMenu(0), mhFrameMenu(0), mhViewMenu(0), mpSpacial(0), + mpPerspectiveWarp(0), mlpClipboard(0), mlpToolBar(0), mlpGridMesh(0), + mlpConvexTransform(0), mToolbarVisibility(TRUE), mCurrentMeshFrames(DefaultFrames) */ +: mCurrentMeshFrames(DefaultFrames) +{ + mBkBrush.createHatchBrush(Brush::HDiagCross,RGBColor(128,128,128)); + mPaintHandler.setCallback(this,&ImageView::paintHandler); + mCreateHandler.setCallback(this,&ImageView::createHandler); + mSizeHandler.setCallback(this,&ImageView::sizeHandler); + mVerticalScrollHandler.setCallback(this,&ImageView::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&ImageView::horizontalScrollHandler); + mEraseBackgroundHandler.setCallback(this,&ImageView::eraseBackgroundHandler); + + + installHandlers(); +// mPathFileName[0]=0; +} + +ImageView::ImageView(const ImageView &/*someImageView*/) +: mCurrentMeshFrames(DefaultFrames) +/*: mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), + mMaxColors(0), mWidth(0), mHeight(0), mhPalette(0), + mhGlobalInvert(0), mhGlobal(0), mhBMPGlobal(0), mpStatusBar(0), + mpProcessImage(0), mpBI(0), mhpImageInvert(0), mhpImage(0), + mhSystemMenu(0), mhFrameMenu(0), mhViewMenu(0), mpSpacial(0), + mpPerspectiveWarp(0), mlpClipboard(0), mlpToolBar(0), mlpGridMesh(0), + mlpConvexTransform(0), mToolbarVisibility(TRUE), mCurrentMeshFrames(DefaultFrames) */ +{ + mBkBrush.createHatchBrush(Brush::HDiagCross,RGBColor(128,128,128)); + mPaintHandler.setCallback(this,&ImageView::paintHandler); + mCreateHandler.setCallback(this,&ImageView::createHandler); + mSizeHandler.setCallback(this,&ImageView::sizeHandler); + mVerticalScrollHandler.setCallback(this,&ImageView::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&ImageView::horizontalScrollHandler); + mEraseBackgroundHandler.setCallback(this,&ImageView::eraseBackgroundHandler); + installHandlers(); +} + +ImageView::~ImageView() +{ + removeHandlers(); +/* if(mhPalette)::DeleteObject(mhPalette); + if(mhGlobalInvert) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + } + if(mhBMPGlobal) + { + ::GlobalUnlock(mhBMPGlobal); + ::GlobalFree(mhBMPGlobal); + } + if(mhViewMenu)::DestroyMenu(mhViewMenu); + if(!mIsDestroyed && GetHandle()) + ::SendMessage(mhClientWindow,WM_MDIDESTROY,(WPARAM)GetHandle(),0L); + if(mlpToolBar)delete mlpToolBar; + if(mlpGridMesh)delete mlpGridMesh; */ +} + +void ImageView::installHandlers() +{ + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + insertHandler(VectorHandler::EraseBackgroundHandler,&mHorizontalScrollHandler); +} + +void ImageView::removeHandlers() +{ + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + removeHandler(VectorHandler::EraseBackgroundHandler,&mHorizontalScrollHandler); +} + +CallbackData::ReturnType ImageView::createHandler(CallbackData &callbackData) +{ + mScrollInfo.hwndOwner(*this); + return FALSE; +} + +CallbackData::ReturnType ImageView::sizeHandler(CallbackData &callbackData) +{ + mScrollInfo.handleSize(callbackData); + return FALSE; +} + +CallbackData::ReturnType ImageView::horizontalScrollHandler(CallbackData &callbackData) +{ + mScrollInfo.handleHorizontalScroll(callbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ImageView::verticalScrollHandler(CallbackData &callbackData) +{ + mScrollInfo.handleVerticalScroll(callbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ImageView::eraseBackgroundHandler(CallbackData &callbackData) +{ + return TRUE; +} + +CallbackData::ReturnType ImageView::paintHandler(CallbackData &callbackData) +{ + PaintInformation &paintInfo=*((PaintInformation*)callbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + clearEmptyRegion(paintDevice); + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + mImage.draw(paintDevice,Rect(0,0,mImage.width(),mImage.height()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom(paintRect.bottom()-paintRect.top()); + mImage.draw(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return (CallbackData::ReturnType)FALSE; +} + +void ImageView::clearEmptyRegion(PureDevice &pureDevice) +{ + Rect imgRect; + Rect winRect; + Rect rtRect; + Rect btRect; + + imgRect.right(mImage.width()); + imgRect.bottom(mImage.height()); + clientRect(winRect); + rtRect.left(winRect.right()>imgRect.right()?imgRect.right():winRect.right()); + rtRect.right(winRect.right()>imgRect.right()?winRect.right():imgRect.right()); + rtRect.bottom(winRect.bottom()>imgRect.bottom()?winRect.bottom():imgRect.bottom()); + btRect.top(imgRect.bottom()); + btRect.right(rtRect.left()); + btRect.bottom(winRect.bottom()); + pureDevice.fillRect(rtRect,mBkBrush); + pureDevice.fillRect(btRect,mBkBrush); +} + +bool ImageView::open(const String &strPathFileName) +{ + if(!mImage.open(strPathFileName,*this)){destroy();return false;} + mScrollInfo.scrollableObjectDimensions(mImage.width(),mImage.height()); + show(SW_SHOW); + setTitle(strPathFileName); + invalidate(false); + setFocus(); + return true; +} + +void ImageView::operator=(Bitmap &someBitmap) +{ +/* RGBQUAD FAR *pRGBQuad; + RGBStruct rgbStruct; + DWORD sizeBitmapInfo; + DWORD sizeImage; + HGLOBAL hGlobalSourceBitmapInfo; + HGLOBAL hGlobalSourceImage; + BITMAPINFO FAR *lpSourceBitmapInfo; + UHUGE *lpSourceImage; + + hGlobalSourceBitmapInfo=someBitmap.lockedBitmapInfo(); +#if defined(__FLAT__) + sizeBitmapInfo=::GlobalSize(hGlobalSourceBitmapInfo); +#else + sizeBitmapInfo=::GetSelectorLimit((UINT)hGlobalSourceBitmapInfo)+1L; +#endif + mhBMPGlobal=::GlobalAlloc(GMEM_FIXED,sizeBitmapInfo); + mpBI=(BITMAPINFO FAR *)::GlobalLock(mhBMPGlobal); + lpSourceBitmapInfo=(BITMAPINFO *)::GlobalLock(hGlobalSourceBitmapInfo); + Main::hmemcpy((UHUGE *)mpBI,(UHUGE *)lpSourceBitmapInfo,sizeBitmapInfo); + ::GlobalUnlock(hGlobalSourceBitmapInfo); + sizeImage=((((mpBI->bmiHeader.biWidth* + mpBI->bmiHeader.biBitCount)+31)&~31)>>3)* + mpBI->bmiHeader.biHeight; + mhGlobalInvert=::GlobalAlloc(GMEM_FIXED,sizeImage); + mhpImageInvert=(UHUGE*)::GlobalLock(mhGlobalInvert); + hGlobalSourceImage=someBitmap.lockedImageData(); + lpSourceImage=(UHUGE*)::GlobalLock(hGlobalSourceImage); + Main::hmemcpy(mhpImageInvert,lpSourceImage,sizeImage); + ::GlobalUnlock(hGlobalSourceImage); + mWidth=(WORD)mpBI->bmiHeader.biWidth; + mHeight=(WORD)mpBI->bmiHeader.biHeight; + if(!(mMaxColors=(WORD)mpBI->bmiHeader.biClrUsed)) + mMaxColors=1 << mpBI->bmiHeader.biBitCount; + for(int i=0;ibmiColors[i]; + rgbStruct.Red(pRGBQuad->rgbRed); + rgbStruct.Green(pRGBQuad->rgbGreen); + rgbStruct.Blue(pRGBQuad->rgbBlue); + mPaletteData.insert(&rgbStruct); + } + createPalette(); */ +} + +/*void ImageView::Paint(void) +{ + RECT rect; + PAINTSTRUCT ps; + HDC hDC; + HPALETTE hOldPalette; + HWND activeWindow; + WORD menuState; + WORD errorCount=0; + + ::GetClientRect(GetHandle(),(RECT FAR *)&rect); + activeWindow=(HWND)LOWORD(::SendMessage(mhClientWindow,WM_MDIGETACTIVE,0,0L)); + hDC=::BeginPaint(GetHandle(),&ps); + if(GetHandle()==activeWindow)hOldPalette=::SelectPalette(hDC,mhPalette,FALSE); + else hOldPalette=::SelectPalette(hDC,mhPalette,TRUE); + ::RealizePalette(hDC); + menuState=::GetMenuState(mhSystemMenu,MenuConform,MF_BYCOMMAND); + if(!(menuState&MF_CHECKED)) + ::StretchDIBits(hDC,0,0,rect.right,rect.bottom,0,0,mWidth,mHeight,mhpImageInvert,(BITMAPINFO *)mpBI,DIB_RGB_COLORS,SRCCOPY); + else + { + while(!::StretchDIBits(hDC,0,0,mWidth,mHeight,0,0,mWidth,mHeight,mhpImageInvert,(BITMAPINFO *)mpBI,DIB_RGB_COLORS,SRCCOPY)) + { + errorCount++; + ::MessageBeep(0); + mWidth--; + mHeight--; + if((int)mWidth-1<0 || (int)mHeight-1<0)break; + ::GlobalUnlock(mhGlobalInvert); + Resize resizeImage(mWidth+1,mHeight+1,mWidth,mHeight,mhGlobalInvert); + HGLOBAL hGlobalTemp=resizeImage.resizeImage(); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE *)::GlobalLock(hGlobalTemp); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + } + if(errorCount)updateCaption(); + } + if(GetHandle()==activeWindow)::SelectPalette(hDC,hOldPalette,FALSE); + else ::SelectPalette(hDC,hOldPalette,TRUE); + ::EndPaint(GetHandle(),&ps); + if(mlpGridMesh)mlpGridMesh->suspendMesh(FALSE); +} */ + +void ImageView::updateCaption(void)const +{ +/* char Buffer[MaxFileName]; + char *ptr; + + ::GetWindowText(GetHandle(),(LPSTR)Buffer,sizeof(Buffer)); + ptr=Buffer+::strlen(Buffer)-1; + while(*ptr!='-')ptr--; + ptr+=2; + ::sprintf(ptr,"%dx%dx%d",mWidth,mHeight,mMaxColors); + ::SetWindowText(GetHandle(),(LPSTR)Buffer); */ +} + +void ImageView::modifySystemMenu(void) +{ +/* if(mhSystemMenu)return; + + mhSystemMenu=::GetSystemMenu(GetHandle(),FALSE); + ::AppendMenu(mhSystemMenu,MF_SEPARATOR,0,0); + ::AppendMenu(mhSystemMenu,MF_STRING|MF_CHECKED,MenuConform,(LPSTR)"Non-Conforming"); + ::DrawMenuBar(GetHandle()); */ +} + +void ImageView::handleDestroyEvent() +{ +/* if(mpProcessImage)mpProcessImage->cancelThread(); + if(mpSpacial)mpSpacial->cancelThread(); + if(mpPerspectiveWarp)mpPerspectiveWarp->cancelThread(); + if(mlpConvexTransform)mlpConvexTransform->cancelThread(); + if(mlpClipboard)delete mlpClipboard; + mIsDestroyed=TRUE; */ + return; +} + +void ImageView::handleActivateEvent(WPARAM wParam,LPARAM /*lParam*/) +{ +/* if(wParam) + { + if(mlpGridMesh)mlpGridMesh->suspendMesh(TRUE); + HDC inhDC(::GetDC(GetHandle())); + ::SelectPalette(inhDC,mhPalette,FALSE); + ::SendMessage(mhFrameWindow,WM_COMMAND,IDM_INVALIDATEMDIWINDOWS,MAKELPARAM(0,0)); + if(::RealizePalette(inhDC)>0)::InvalidateRect(GetHandle(),0,TRUE); + ::ReleaseDC(GetHandle(),inhDC); +#if defined(__FLAT__) + ::SendMessage(mhClientWindow,WM_MDISETMENU,(WPARAM)mhViewMenu,(LPARAM)::GetSubMenu(mhViewMenu,0)); +#else + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhViewMenu,::GetSubMenu(mhViewMenu,0))); +#endif + if(mToolbarVisibility&&mlpToolBar&&!mlpToolBar->isVisible())mlpToolBar->showWindow(); + } + else + { + if(mlpToolBar&&mlpToolBar->isVisible())mlpToolBar->showWindow(FALSE); + if(mlpGridMesh)mlpGridMesh->showWindow(TRUE); +#if defined(__FLAT__) + ::SendMessage(mhClientWindow,WM_MDISETMENU,(WPARAM)mhFrameMenu,(LPARAM)0); +#else + ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhFrameMenu,0)); +#endif + } + ::DrawMenuBar(mhFrameWindow); */ + return; +} + +/* long ImageView::WndProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_CREATE : + { + char buffer[100]; + + mlpClipboard=new Clipboard(GetHandle()); + assert(0!=mlpClipboard); + ::SetWindowText(GetHandle(),(LPSTR)mPathFileName); + ::sprintf(buffer,"%s - %dx%dx%d",mPathFileName,mWidth,mHeight,mMaxColors); + ::SetWindowText(GetHandle(),(LPSTR)buffer); + modifySystemMenu(); + mCapture=GetHandle(); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + } + return FALSE; + case WM_CHANGECBCHAIN : + if(!mlpClipboard)break; + mlpClipboard->changeClipboardChain(message,wParam,lParam); + return FALSE; + case WM_DRAWCLIPBOARD : + if(!mlpClipboard)break; + if(mlpClipboard->drawClipboard(message,wParam,lParam)) + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_ENABLED); + return FALSE; + case WM_LBUTTONDOWN : + mCapture.leftButtonDown(lParam); + return FALSE; + case WM_MOUSEMOVE : + mCapture.mouseMove(lParam); + return FALSE; + case WM_LBUTTONUP : + mCapture.leftButtonUp(); + return FALSE; + case WM_PAINT : + Paint(); + return FALSE; + case WM_MDIACTIVATE : +#if defined(__FLAT__) + handleActivateEvent((WPARAM)lParam,(LPARAM)wParam); +#else + handleActivateEvent(wParam,lParam); +#endif + return FALSE; + case WM_QUERYENDSESSION : + break; + case WM_DESTROY : + handleDestroyEvent(); + return FALSE; + case WM_SYSCOMMAND : + handleSystemMenuEvent(wParam); + break; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case MenuConform : + ::SendMessage(GetHandle(),WM_SYSCOMMAND,MenuConform,0L); + return FALSE; + case MENU_SMOOTHING : + imageProcessing(); + return FALSE; + case MENU_RESIZE : + resizeImage(); + return FALSE; + case MENU_TRANSLATE : + translateMatrix(); + return FALSE; + case MENU_SHEAR : + shearTransform(); + return FALSE; + case MENU_WARP_PERSPECTIVE : + warpPerspective(); + return FALSE; + case MENU_WARP_CONVEX : + warpConvex(); + return FALSE; + case MENU_CLIP : + menuClip(); + return FALSE; + case MENU_DISSOLVE : + { + AdjustDissolve adjustDissolve(GetHandle()); + adjustDissolve.adjustDissolve(mDissolveSchedule,mCurrentMeshFrames); + } + return FALSE; + case MENU_TBSIGMA : + { + FrameDialog frameDialog(GetHandle()); + frameDialog.performFrameDialog(mCurrentMeshFrames); + } + return FALSE; + case MENU_TBLOAD : + case MENU_TBSAVE : + case MENU_TBTRANSFORMB : + case MENU_TBTRANSFORMA : + case IDM_WINLIST : + handleMeshRequest(wParam,lParam); + return FALSE; + case MENU_TBCLIP : + mCapture.reset(); + if(mlpGridMesh) + { + delete mlpGridMesh; + mlpGridMesh=0; + } + return FALSE; + case MENU_TBMESH : + if(!mlpGridMesh)mlpGridMesh=new GridMesh(GetHandle(),mWidth,mHeight); + else mlpGridMesh->newMesh(mlpGridMesh->gridLines()+2); + return FALSE; + case MENU_FILE_SAVEBITMAP : + saveBitmap(); + return FALSE; + case MENU_PALETTE_VIEW : + { + PaletteDialog viewPalette(GetHandle(),mhPalette); + viewPalette.showPalette(); + return FALSE; + } + case IDM_TOOLBAR : + handleToolbarToggle(); + break; + default : + return FALSE; + } + } + return ::DefMDIChildProc(GetHandle(),message,wParam,lParam); +} */ + +// ************************************************************** + +void ImageView::handleToolbarToggle(void) +{ +/* String showToolbarString(STRING_SHOWTOOLBAR,Main::processInstance()); + String hideToolbarString(STRING_HIDETOOLBAR,Main::processInstance()); + String menuString; + + ::GetMenuString(mhViewMenu,IDM_TOOLBAR,menuString,String::MaxString,MF_BYCOMMAND); + if(showToolbarString==menuString) + { + ::ModifyMenu(mhViewMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)hideToolbarString); + mlpToolBar->showWindow(TRUE); + mToolbarVisibility=TRUE; + } + else + { + ::ModifyMenu(mhViewMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)showToolbarString); + mlpToolBar->showWindow(FALSE); + mToolbarVisibility=FALSE; + } + ::DrawMenuBar(GetHandle()); */ +} + +void ImageView::handleMeshRequest(WPARAM wParam,LPARAM lParam) +{ +/* String meshFileName(mPathFileName); + String meshPathFileName; + + IniFile iniSettings; + iniSettings.makeFileName(meshFileName); + meshFileName.token(".\0"); + meshFileName+=".MSH"; + meshPathFileName=iniSettings.meshDirectory(); + meshPathFileName+=meshFileName; + switch(wParam) + { + case MENU_TBLOAD : + if(!mlpGridMesh)mlpGridMesh=new GridMesh(GetHandle(),mWidth,mHeight,GridMesh::NoShow); + mlpGridMesh->loadMesh(meshPathFileName); + break; + case MENU_TBTRANSFORMA : + if(!mlpGridMesh){::MessageBeep(0);break;} + meshWarp(); + break; + case MENU_TBTRANSFORMB : + if(!mlpGridMesh){::MessageBeep(0);break;} + ::PostMessage(mhFrameWindow,WM_COMMAND,IDM_GETWINLIST,MAKELPARAM(GetHandle(),0)); + break; + case IDM_WINLIST : + { + WORD itemIndex; + Block *lpViewBlock=(Block*)(lParam); + if(!lpViewBlock||!lpViewBlock->size()){::MessageBeep(0);break;} + ViewSelect selectView(GetHandle()); + if(selectView.selectView(*lpViewBlock,itemIndex,mWidth,mHeight))meshWarp((*lpViewBlock)[itemIndex].windowPtr()); + delete lpViewBlock; + } + break; + case MENU_TBSAVE : + if(!mlpGridMesh)break; + mlpGridMesh->saveMesh(meshPathFileName); + break; + } */ + return; +} + +void ImageView::handleSystemMenuEvent(WPARAM wParam)const +{ +/* WORD menuState; + + switch(wParam) + { + case MenuConform : + menuState=::GetMenuState(mhSystemMenu,MenuConform,MF_BYCOMMAND); + ::CheckMenuItem(mhSystemMenu,MenuConform,MF_BYCOMMAND | + (menuState&MF_CHECKED?MF_UNCHECKED:MF_CHECKED)); + ::DrawMenuBar(GetHandle()); + ::InvalidateRect(GetHandle(),NULL,TRUE); + } */ +} + +void ImageView::enableMenu(const char isEnabled)const +{ +/* if(isEnabled) + { + ::EnableMenuItem(mhViewMenu,MENU_CUT,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_COPY,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_SMOOTHING,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_RESIZE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_TRANSLATE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_WARP_PERSPECTIVE,MF_BYCOMMAND|MF_ENABLED); + ::EnableMenuItem(mhViewMenu,MENU_FILE_SAVEBITMAP,MF_BYCOMMAND|MF_ENABLED); + } + else + { + ::EnableMenuItem(mhViewMenu,MENU_CUT,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_COPY,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_PASTE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_SMOOTHING,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_RESIZE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_TRANSLATE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_WARP_PERSPECTIVE,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + ::EnableMenuItem(mhViewMenu,MENU_FILE_SAVEBITMAP,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); + } */ +} + +void ImageView::imageProcessing(void) +{ +/* enableMenu(FALSE); + mpProcessImage=new Process(mhPalette,mhpImageInvert,mWidth,mHeight); + if(mpProcessImage->showProcess(GetHandle(),mPathFileName) && !mIsDestroyed) + ::InvalidateRect(GetHandle(),NULL,TRUE); + if(!mIsDestroyed)enableMenu(TRUE); + delete mpProcessImage; + mpProcessImage=0; */ +} + +void ImageView::resizeImage(void) +{ + double sizeFactor; + Factor resizeFactor(*this,"Resize Factor"); + if(!resizeFactor.showFactor(sizeFactor,sizeFactor)||0.00==sizeFactor)return; + + +/* HGLOBAL hGlobal; + double sizeFactor; + + Factor resizeFactor(GetHandle(),"Resize Factor"); + if(!resizeFactor.showFactor(sizeFactor,sizeFactor)||!sizeFactor)return; + enableMenu(FALSE); + mpSpacial=new SpacialTransform(mhPalette,mhpImageInvert,mWidth,mHeight,sizeFactor); + hGlobal=mpSpacial->resizeImage(); + if(mpSpacial->isCancelled()) + { + delete mpSpacial; + mpSpacial=0; + return; + } + delete mpSpacial; + mpSpacial=0; + if(hGlobal) + { + mWidth*=(sizeFactor/100.00); + mHeight*=(sizeFactor/100.00); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobal; + mhpImageInvert=(UHUGE *)::GlobalLock(mhGlobalInvert); + mpBI->bmiHeader.biWidth=mWidth; + mpBI->bmiHeader.biHeight=mHeight; + } + ::InvalidateRect(GetHandle(),NULL,TRUE); + enableMenu(TRUE); + updateCaption(); */ +} + +void ImageView::menuClip(void) +{ +/* RECT copyRect; + HGLOBAL hGlobalResizedImage; + UHUGE *ptrResizedImage; + + if(!mCapture.hasRectangle())return; + mCapture.boundedRect(copyRect); + enableMenu(FALSE); + ::GlobalUnlock(mhGlobalInvert); + Resize resizeImage(mWidth,mHeight,copyRect,mhGlobalInvert); + if(0!=(hGlobalResizedImage=resizeImage.resizeImage())) + { + ::GlobalFree(mhGlobalInvert); + ptrResizedImage=(UHUGE *)::GlobalLock(hGlobalResizedImage); + mhGlobalInvert=hGlobalResizedImage; + mhpImageInvert=ptrResizedImage; + mpBI->bmiHeader.biWidth=mWidth=(copyRect.right-copyRect.left)+1; + mpBI->bmiHeader.biHeight=mHeight=(copyRect.bottom-copyRect.top)+1; + ::InvalidateRect(GetHandle(),NULL,TRUE); + } + else ::GlobalLock(mhGlobalInvert); + updateCaption(); + enableMenu(TRUE); */ +} + +void ImageView::saveBitmap(void) +{ +/* char bitmapName[MaxFileName]; + + SelectFile selector(GetHandle(),SelectFile::Write); + selector.SetFileSpec(String(STRING_ASTERISKDOTBMP,Main::processInstance())); + if(selector.GetFileName(bitmapName,sizeof(bitmapName))) + { + waitCursor(TRUE); + Bitmap bitmapImage(bitmapName,mhGlobalInvert,mhBMPGlobal); + bitmapImage.saveBitmap(); + waitCursor(FALSE); + } */ +} + +void ImageView::translateMatrix(void) +{ +/* UHUGE *ptr; + double xFactor; + double yFactor; + + Factor resizeFactor(GetHandle(),"Translate Factor"); + if(!resizeFactor.showFactor(yFactor,xFactor))return; + if(!yFactor && !xFactor)return; + enableMenu(FALSE); + waitCursor(TRUE); + yFactor*=-1; + xFactor*=-1; + HGLOBAL hGlobal=::GlobalAlloc(GMEM_FIXED,(LONG)mWidth*(LONG)mHeight); + ptr=(UHUGE*)::GlobalLock(hGlobal); + TranslationMatrix translation(mHeight,mWidth,(int)xFactor,(int)yFactor,&mhpImageInvert,&ptr); + translation.performTranslation(); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobal; + mhpImageInvert=ptr; + ::InvalidateRect(GetHandle(),NULL,TRUE); + waitCursor(FALSE); + enableMenu(TRUE); */ +} + +void ImageView::shearTransform(void) +{ +/* HGLOBAL hGlobalTemp; + WORD width(mWidth); + WORD height(mHeight); + double xFactor(0.3); + double yFactor(0.00); + + Factor shearFactor(GetHandle(),"Shear Factors"); + if(!shearFactor.showFactor(xFactor,yFactor))return; + Shear shearTransform; + hGlobalTemp=shearTransform.performShear + (width,height,xFactor,yFactor,mhpImageInvert); + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mpBI->bmiHeader.biWidth=mWidth=width; + mpBI->bmiHeader.biHeight=mHeight=height; + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); */ +} + +void ImageView::warpPerspective(void) +{ +/* HGLOBAL hGlobalTemp; + Factor::Operation widthOperation; + Factor::Operation heightOperation; + double widthIncremental; + double heightIncremental; + double wRow; + double wCol; + WORD isCancelled; + + Factor resizeFactor(GetHandle(),"Perpective Warp"); + if(!resizeFactor.showFactor( + wRow,wCol, + widthIncremental,widthOperation, + heightIncremental,heightOperation + ))return; + enableMenu(FALSE); + if(Factor::None==widthOperation&&Factor::None==heightOperation) + mpPerspectiveWarp=new PerspectiveWarp(mWidth,mHeight,mhpImageInvert,wRow,wCol); + else + mpPerspectiveWarp=new PerspectiveWarp(mWidth,mHeight,wRow,wCol, + (PerspectiveWarp::Operation)widthOperation,widthIncremental, + (PerspectiveWarp::Operation)heightOperation,heightIncremental,mhpImageInvert); + hGlobalTemp=mpPerspectiveWarp->performPerspectiveWarp(); + isCancelled=mpPerspectiveWarp->isCancelled(); + delete mpPerspectiveWarp; + mpPerspectiveWarp=0; + enableMenu(TRUE); + if(isCancelled)return; + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); */ +} + +void ImageView::handleWarpConvex(void) +{ + Convex convex; + Image image; + mImage=convex.performConvex(mImage,*this); + invalidate(false); +/* HGLOBAL hGlobalTemp; + WORD isCancelled; + + mlpConvexTransform=new Convex; + hGlobalTemp=mlpConvexTransform->performConvex(mWidth,mHeight,mhpImageInvert); + isCancelled=mlpConvexTransform->isCancelled(); + delete mlpConvexTransform; + mlpConvexTransform=0; + if(isCancelled)return; + if(hGlobalTemp) + { + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + } + ::InvalidateRect(GetHandle(),NULL,TRUE); */ +} + +// ********************************************************************************* + +void ImageView::meshWarp(Direction warpDirection) +{ +/* Vector sourcePairs; + Vector destPairs; + Vector meshFrames; + Vector sourcePoints; + Vector destPoints; + Block intermediatePathFileNames; + HGLOBAL hGlobalOriginal; + UHUGE *lpOriginal; + int originalWidth; + int originalHeight; + HGLOBAL hGlobalTemp(0); + MeshFrames meshFrame; + int newWidth; + int newHeight; + size_t size; + + mlpGridMesh->retrieveMesh(sourcePoints,destPoints); + if((size=(int)sourcePoints.size())!=destPoints.size())return; + sourcePairs.size(destPairs.size(size)); + for(int i=0;irowCols(),newWidth,newHeight); + ::GlobalUnlock(mhGlobalInvert); + ::GlobalFree(mhGlobalInvert); + if(!hGlobalTemp)break; + mhGlobalInvert=hGlobalTemp; + mhpImageInvert=(UHUGE*)::GlobalLock(hGlobalTemp); + mpBI->bmiHeader.biWidth=mWidth=newWidth; + mpBI->bmiHeader.biHeight=mHeight=newHeight; + ::InvalidateRect(GetHandle(),NULL,TRUE); + ::UpdateWindow(GetHandle()); + Bitmap bitmapImage(intermediatePathFileNames[i+1],mhGlobalInvert,mhBMPGlobal); + bitmapImage.saveBitmap(); + } + if(!hGlobalTemp) + { + String tempString; + ::sprintf(tempString,"Warp failed at %d",i); + ::MessageBox(GetHandle(),(LPSTR)tempString,(LPSTR)"WARP ERROR",MB_ICONASTERISK); + mhGlobalInvert=hGlobalOriginal; + mhpImageInvert=lpOriginal; + mpBI->bmiHeader.biWidth=mWidth=originalWidth; + mpBI->bmiHeader.biHeight=mHeight=originalHeight; + } + else + { + ::GlobalUnlock(hGlobalOriginal); + ::GlobalFree(hGlobalOriginal); + } + if(WarpForward==warpDirection)createProjectFile(intermediatePathFileNames); + ::InvalidateRect(GetHandle(),NULL,TRUE); + mlpGridMesh->showWindow(); */ +} + +void ImageView::meshWarp(ImageView *lpTargetView) +{ +/* Block intermediateSrcImage; + Block intermediateDstImage; + CrossDissolve crossDissolve; + WORD currentTargetFrames; + + meshWarp(); + currentTargetFrames=lpTargetView->mCurrentMeshFrames; + lpTargetView->mCurrentMeshFrames=mCurrentMeshFrames; + lpTargetView->meshWarp(WarpReverse); + sequentialNames(mPathFileName,intermediateSrcImage,mCurrentMeshFrames); + lpTargetView->sequentialNames(lpTargetView->mPathFileName,intermediateDstImage,lpTargetView->mCurrentMeshFrames); + if(mDissolveSchedule.size()) + crossDissolve.crossDissolve(intermediateSrcImage,intermediateDstImage,mDissolveSchedule); + else crossDissolve.crossDissolve(intermediateSrcImage,intermediateDstImage); + lpTargetView->mCurrentMeshFrames=currentTargetFrames; */ +} + +void ImageView::createProjectFile(Block &pathFileNames) +{ +/* String projectIDString(STRING_PROJECTIDSTRING,Main::processInstance()); + String projectExtension(STRING_PROJECTEXTENSION,Main::processInstance()); + String carriageReturn(STRING_CRLF,Main::processInstance()); + String dotString(STRING_DOT,Main::processInstance()); + String fileNameString; + size_t size((int)pathFileNames.size()); + + if(!size)return; + fileNameString=pathFileNames[0]; + fileNameString.token(dotString); + fileNameString+=projectExtension; + ofstream outputProject(fileNameString); + if(!outputProject.fail()&&!outputProject.bad()) + { + outputProject << (LPSTR)projectIDString << (LPSTR)carriageReturn; + for(int i=0;i &pathFileNames,int nFrames) +{ +/* IniFile iniSettings; + String currentExtension(STRING_MESHEXTENSION,Main::processInstance()); + String dotString(STRING_DOT,Main::processInstance()); + String tempString(pathFileName); + String intermediatePathFileName; + + pathFileNames.remove(); + iniSettings.makeFileName(tempString); + intermediatePathFileName=iniSettings.projectDirectory(); + intermediatePathFileName+=tempString; + for(int i=0;inewMesh(mGridMesh->gridLines()+2); + else + { + mGridMesh.destroy(); + mGridMesh=::new GridMesh(*this,mImage.width(),mImage.height()); + mGridMesh.disposition(PointerDisposition::Delete); + mGridMesh->showWindow(); + } +} + +void ImageView::noMesh(void) +{ + if(!mGridMesh.isOkay())return; + mGridMesh.destroy(); +} + +void ImageView::handleFrames(void) +{ + FrameDialog frameDialog(*this); + frameDialog.perform(mCurrentMeshFrames); +} + +// ***** virtual overloads + +void ImageView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(GRAY_BRUSH); +} + +void ImageView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VSCROLL|WS_HSCROLL; +} diff --git a/meshwrp/imageview.hpp b/meshwrp/imageview.hpp new file mode 100644 index 0000000..53f8506 --- /dev/null +++ b/meshwrp/imageview.hpp @@ -0,0 +1,176 @@ +#ifndef _MESHWRP_IMAGEVIEW_HPP_ +#define _MESHWRP_IMAGEVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif +#ifndef _MESHWRP_MESH_HPP_ +#include +#endif +#ifndef _MESHWRP_SCROLLINFO_HPP_ +#include +#endif +#ifndef _MESHWRP_IMAGE_HPP_ +#include +#endif + +/* +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include +*/ + + +class BWindow; + + +class ImageView : public MDIWindow +{ +public: + enum Direction{WarpForward,WarpReverse}; + ImageView(void); + ImageView(const ImageView &someImageView); + virtual ~ImageView(); + bool open(const String &strPathFileName); + bool operator==(const ImageView &imageView)const; + bool hasMesh(void)const; + void showMesh(void); + void noMesh(void); + void handleFrames(void); + void resizeImage(void); + void handleWarpConvex(void); + void meshWarp(Direction warpDirection=WarpForward); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {DefaultFrames=3}; + enum {MenuConform=0x0F}; + CallbackData::ReturnType paintHandler(CallbackData &callbackData); + CallbackData::ReturnType sizeHandler(CallbackData &callbackData); + CallbackData::ReturnType createHandler(CallbackData &callbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &callbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &callbackData); + CallbackData::ReturnType eraseBackgroundHandler(CallbackData &callbackData); + void clearEmptyRegion(PureDevice &pureDevice); + + ImageView &operator=(const ImageView &imageView); + void setTitle(const String &strTitle); + void installHandlers(void); + void removeHandlers(void); + + + void handleMeshRequest(WPARAM wParam,LPARAM lParam); + void handleDestroyEvent(void); + void handleActivateEvent(WPARAM wParam,LPARAM lParam); + void handleSystemMenuEvent(WPARAM wParam)const; + void handleToolbarToggle(void); + void enableMenu(const char isEnabled)const; + void modifySystemMenu(void); + void updateCaption(void)const; + + + void operator=(Bitmap &someBitmap); + + void imageProcessing(void); + void menuClip(void); + void meshWarp(ImageView *lpTargetView); + void warpPerspective(void); + void warpConvex(void); + void translateMatrix(void); + void shearTransform(void); + void saveBitmap(void); + void sequentialNames(const String &pathFileName,Block &pathFileNames,int nFrames); + void createProjectFile(Block &pathFileNames); + + Image mImage; + ScrollInfo mScrollInfo; + Brush mBkBrush; + SmartPointer mGridMesh; + SmartPointer mToolControl; + + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mEraseBackgroundHandler; + DWORD mCurrentMeshFrames; + +// static char szClassName[]; +// static char szMenuName[]; +// static HINSTANCE smhInstance; + +/* int mCurrentMeshFrames; + WORD mToolbarVisibility; + WORD mMaxColors; + WORD mWidth; + WORD mHeight; + char mPathFileName[MaxFileName+1]; + Capture mCapture; + HWND mhClientWindow; + HWND mhFrameWindow; + WORD mIsDestroyed; + HMENU mhSystemMenu; + HMENU mhFrameMenu; + HMENU mhViewMenu; + HPALETTE mhPalette; + HGLOBAL mhGlobalInvert; + HGLOBAL mhGlobal; + HGLOBAL mhBMPGlobal; + Clipboard *mlpClipboard; + BWindow *mpStatusBar; + Process *mpProcessImage; + SpacialTransform *mpSpacial; + PerspectiveWarp *mpPerspectiveWarp; + Convex *mlpConvexTransform; + BITMAPINFO FAR *mpBI; + UHUGE *mhpImageInvert; + UHUGE *mhpImage; + ToolBar *mlpToolBar; + GridMesh *mlpGridMesh; + Block mPaletteData; + Block mDissolveSchedule; */ +}; + +inline +bool ImageView::hasMesh(void)const +{ + return mGridMesh.isOkay(); +} +#endif diff --git a/meshwrp/img.pal b/meshwrp/img.pal new file mode 100644 index 0000000..d7de25f --- /dev/null +++ b/meshwrp/img.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +191 0 0 +0 191 0 +191 191 0 +0 0 191 +191 0 191 +0 191 191 +192 192 192 +128 128 128 +255 0 0 +0 255 0 +255 255 0 +0 0 255 +255 0 255 +0 255 255 +255 255 255 diff --git a/meshwrp/io.jpg b/meshwrp/io.jpg new file mode 100644 index 0000000..db1ad1c Binary files /dev/null and b/meshwrp/io.jpg differ diff --git a/meshwrp/main.cpp b/meshwrp/main.cpp new file mode 100644 index 0000000..2fc80de --- /dev/null +++ b/meshwrp/main.cpp @@ -0,0 +1,9 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; + frameWindow.createWindow("MeshWarp",String(STRING_APPNAME)+String(" ")+String(STRING_APPVERSION),"mdiMainMenu","P944"); + return ((FrameWindow&)frameWindow).messageLoop(); +} diff --git a/meshwrp/main.hpp b/meshwrp/main.hpp new file mode 100644 index 0000000..5e7a819 --- /dev/null +++ b/meshwrp/main.hpp @@ -0,0 +1,67 @@ +#ifndef _MESHWRP_MAIN_HPP_ +#define _MESHWRP_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/meshwrp/mainfrm.cpp b/meshwrp/mainfrm.cpp new file mode 100644 index 0000000..d369aa8 --- /dev/null +++ b/meshwrp/mainfrm.cpp @@ -0,0 +1,424 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case IDM_CASCADE : + cascade(); + break; + case IDM_TILE : + tile(); + break; + case IDM_ARRANGE : + arrange(); + break; + case IDM_CLOSEALL : + closeAll(); + break; + case IDM_MINIMIZEALL : + minimizeAll(); + break; + case IDM_RESTOREALL : + restoreAll(); + break; + case MENU_FILE_OPEN : + handleFileOpen(); + break; + case MENU_FILE_SAVEBITMAP : + handleSaveBitmap(); + break; + case MENU_FILE_EXIT : + handleExit(); + break; + case MENU_SLIDE_SELECT : + handleSlideSelect(); + break; + case MENU_TBMESH : + handleMesh(); + break; + case MENU_TBNOMESH : + handleNoMesh(); + break; + case MENU_TBSIGMA : + handleSigma(); + break; + case MENU_TBTRANSFORMA : + handleTransforma(); + break; + case MENU_TBTRANSFORMB : + handleTransformb(); + break; + case MENU_TBDISSOLVE : + handleCrossDissolve(); + break; + case MENU_RESIZE : + handleResize(); + break; + case MENU_WARP_CONVEX : + handleWarpConvex(); + break; +/* case NNTP_FILE_OPEN : + handleFileOpen(); + break; + case NNTP_FILE_BROWSE : + handleFileBrowse(); + break; + case NNTP_FILE_EXIT : + FrameWindow::postMessage(*this,WM_CLOSE,0,0L); + break; + case NNTP_NEWS_GETNEWS : + mNewsOption.option((NewsOption::Option)someCallbackData.wParam()); + handleRetrieve(); + break; + case NNTP_NEWS_GETGROUPS : + mNewsOption.option((NewsOption::Option)someCallbackData.wParam()); + handleRetrieve(); + break; + case NNTP_NEWSGROUPS_SUBSCRIBE : + handleSubscribe(); + break; + case NNTP_IMAGE_FITTOWINDOW : + handleImageFitToWindow(); + break; + case NNTP_OPTIONS_NEWSSERVER : + handleNewsServer(); + break; + case NNTP_OPTIONS_GENERALOPTIONS : + handleGeneralOptions(); + break; + case NNTP_OPTIONS_RASSETTINGS : + handleRasSettings(); + break; + case NNTP_OPTIONS_CLEARLOG : + handleClearLog(); + break; + case NNTP_NEWS_CANCEL : + handleCancelNews(); + break; + case NNTP_VIEW_LOG : + handleViewLog(); + break; */ + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/) +{ + createControls(); + show(SW_SHOW); + update(); + mStatusControl->setText("Ready."); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::closeHandler(CallbackData &someCallbackData) +{ + destroy(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/) +{ +// cancel(); + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData) +{ + Rect statusRect; + Rect toolRect; + Rect cRect; + + mToolControl->windowRect(toolRect); + mStatusControl->windowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top()))); + return (CallbackData::ReturnType)FALSE; +} + +// ************************************************************************************************** + +void MainFrame::handleSlideSelect() +{ +} + +void MainFrame::handleSaveBitmap() +{ +} + +void MainFrame::handleExit() +{ + close(); +} + +void MainFrame::createControls(void) +{ + Rect controlRect; + Rect statusRect; + + createToolBar(); + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mStatusControl->clientRect(statusRect); + controlRect.bottom(height()/2-statusRect.bottom()); +} + +void MainFrame::handleFileOpen(void) +{ + String strCurrentDirectory; + DiskInfo diskInfo; + BOOL openResult(FALSE); + OpenDialog openFileName; + + diskInfo.getCurrentDirectory(strCurrentDirectory); + openFileName.owner(*this); + openFileName.instance(processInstance()); + openFileName.filter("Jpg;Gif;Bmp"); + openFileName.filterPattern("*.jpg"); + openFileName.fileName("*.JPG"); + openFileName.fileTitle(""); + openFileName.initialDirectory(mLastOpenDirectory.isNull()?strCurrentDirectory:mLastOpenDirectory); + openFileName.title("Open File"); + openFileName.creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST); + openResult=openFileName.getOpenFileName(); + diskInfo.getCurrentDirectory(mLastOpenDirectory); + diskInfo.setCurrentDirectory(strCurrentDirectory); + if(!openResult)return; + openDocument(openFileName.fileName()); +} + +bool MainFrame::openDocument(const String &strPathFileName) +{ + ImageView &imageView=createDocumentView(); + imageView.open(strPathFileName); + return false; +} + +ImageView &MainFrame::createDocumentView(void) +{ + SmartPointer mdiWindow; + ImageView *pImageView; + + pImageView=::new ImageView; + pImageView->createWindow(*this,String(STRING_DOCUMENTVIEWCLASSNAME),"ImageView","viewMenu","PAINT"); + insert(*pImageView); + return *pImageView; +} + +void MainFrame::createToolBar(void) +{ + mBitmaps.size(10); + mBitmaps[0].loadBitmap("MESH"); + mBitmaps[1].loadBitmap("NOMESH"); + mBitmaps[2].loadBitmap("SIGMA"); + mBitmaps[3].loadBitmap("TRANSFORMA"); + mBitmaps[4].loadBitmap("TRANSFORMB"); + mBitmaps[5].loadBitmap("XDISSOLVE"); + mBitmaps[6].loadBitmap("FILENEW"); + mBitmaps[7].loadBitmap("FILEOPEN"); + mBitmaps[8].loadBitmap("FILESAVE"); + mBitmaps[9].loadBitmap("FILEHELP"); + + mToolControl=::new ToolBar(); + mToolControl.disposition(PointerDisposition::Delete); + mToolControl->create(*this,ToolBarID); + + mToolControl->setButtonSize(24,24); + mToolControl->setBitmapSize(22,24); + + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[0].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[1].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[2].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[3].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[4].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[5].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[6].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[7].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[8].getHBITMAP(),0)); + mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[9].getHBITMAP(),0)); + + mToolControl->addButton(ToolBarButton(6,0,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(7,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(8,MENU_FILE_SAVEBITMAP,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(9,0,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(0,MENU_TBMESH,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(1,MENU_TBNOMESH,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(2,MENU_TBSIGMA,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(3,MENU_TBTRANSFORMA,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(4,MENU_TBTRANSFORMB,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(5,MENU_TBDISSOLVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + + mToolControl->enableButton(MENU_TBMESH,false); + mToolControl->enableButton(MENU_TBNOMESH,false); + mToolControl->enableButton(MENU_TBSIGMA,false); + mToolControl->enableButton(MENU_TBTRANSFORMA,false); + mToolControl->enableButton(MENU_TBTRANSFORMB,false); + mToolControl->enableButton(MENU_TBDISSOLVE,false); +} + +void MainFrame::handleResize() +{ + SmartPointer imageView; + + getActive(imageView); + if(!imageView.isOkay())return; + ((ImageView&)*imageView).resizeImage(); +} + +void MainFrame::handleMesh() +{ + SmartPointer imageView; + + getActive(imageView); + if(!imageView.isOkay())return; + ((ImageView&)*imageView).showMesh(); +} + +void MainFrame::handleNoMesh() +{ + SmartPointer imageView; + + getActive(imageView); + if(!imageView.isOkay())return; + ((ImageView&)*imageView).noMesh(); +} + +void MainFrame::handleTransforma() +{ + SmartPointer imageView; + + getActive(imageView); + if(!imageView.isOkay())return; + ((ImageView&)*imageView).meshWarp(); +} + +void MainFrame::handleTransformb() +{ +} + +void MainFrame::handleSigma() +{ + SmartPointer imageView; + + getActive(imageView); + if(!imageView.isOkay())return; + ((ImageView&)*imageView).handleFrames(); +} + +void MainFrame::handleCrossDissolve() +{ +} + +void MainFrame::handleWarpConvex(void) +{ + PMDIWindow imageView; + + getActive(imageView); + if(!imageView.isOkay())return; + ((ImageView&)*imageView).handleWarpConvex(); +} + + +// ** virtuals + +void MainFrame::mdiDestroy(MDIWindow &mdiWindow) +{ +// if(mLogViewWinCache.isOkay()&&*mLogViewWinCache==mdiWindow)mLogViewWinCache.destroy(); +} + +void MainFrame::mdiActivate(MDIWindow &mdiWindow) +{ + mToolControl->enableButton(MENU_TBMESH,true); + mToolControl->enableButton(MENU_TBNOMESH,true); + mToolControl->enableButton(MENU_TBSIGMA,true); + mToolControl->enableButton(MENU_TBTRANSFORMA,true); + mToolControl->enableButton(MENU_TBTRANSFORMB,true); + mToolControl->enableButton(MENU_TBDISSOLVE,true); +} + +void MainFrame::mdiDeactivate(MDIWindow &mdiWindow) +{ + if(1==size()) + { + mToolControl->enableButton(MENU_TBMESH,false); + mToolControl->enableButton(MENU_TBNOMESH,false); + mToolControl->enableButton(MENU_TBSIGMA,false); + mToolControl->enableButton(MENU_TBTRANSFORMA,false); + mToolControl->enableButton(MENU_TBTRANSFORMB,false); + mToolControl->enableButton(MENU_TBDISSOLVE,false); + } +} + + diff --git a/meshwrp/mainfrm.hpp b/meshwrp/mainfrm.hpp new file mode 100644 index 0000000..d314d69 --- /dev/null +++ b/meshwrp/mainfrm.hpp @@ -0,0 +1,89 @@ +#ifndef _MESHWRP_MAINWINDOW_HPP_ +#define _MESHWRP_MAINWINDOW_HPP_ +#ifndef _COMMON_MDIFRM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_POINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_LINKEDBITMAP_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#include +#endif + +class ImageView; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101,ToolBarID=102}; + + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + bool openDocument(const String &strPathFileName); + ImageView &createDocumentView(void); + + void handleFileOpen(void); + void insertHandlers(void); + void removeHandlers(void); + void createControls(void); + void createToolBar(void); + void handleResize(void); + void handleMesh(void); + void handleNoMesh(void); + + void handleSigma(void); + void handleTransforma(void); + void handleTransformb(void); + void handleCrossDissolve(void); + void handleWarpConvex(void); + + void handleLoadGIF(void); + void handleLoadBitmap(void); + void handleSlideSelect(void); + void handleSaveBitmap(void); + void handleExit(void); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mBrowseSelectHandler; + Array mBitmaps; + SmartPointer mStatusControl; + SmartPointer mToolControl; + String mLastOpenDirectory; +}; +#endif diff --git a/meshwrp/mesh.bmp b/meshwrp/mesh.bmp new file mode 100644 index 0000000..0ef837b Binary files /dev/null and b/meshwrp/mesh.bmp differ diff --git a/meshwrp/mesh.cpp b/meshwrp/mesh.cpp new file mode 100644 index 0000000..a1b188d --- /dev/null +++ b/meshwrp/mesh.cpp @@ -0,0 +1,495 @@ +#include +#include +#include +#include +#include +#include + +char GridMesh::szClassName[]="MESH97A"; +char GridMesh::szMenuName[]={'\0'}; + +GridMesh::GridMesh(HWND hParent,int width,int height,GridShow visibility) +: mhParent(hParent), mStatus(InActive), mGridLines(GridLines), + mIsSuspended(FALSE), mhInstance(::GetModuleHandle(0)), + mDrawingPen(RGBColor(0,0,0),1) +{ + mCreateHandler.setCallback(this,&GridMesh::createHandler); + mPaintHandler.setCallback(this,&GridMesh::paintHandler); + mLeftButtonUpHandler.setCallback(this,&GridMesh::leftButtonUpHandler); + mLeftButtonDownHandler.setCallback(this,&GridMesh::leftButtonDownHandler); + mMouseMoveHandler.setCallback(this,&GridMesh::mouseMoveHandler); + mDestroyHandler.setCallback(this,&GridMesh::destroyHandler); + insertHandlers(); + mVersionInfo=szClassName; + registerClass(); + Rect winRect(CW_USEDEFAULT,CW_USEDEFAULT,width,height); + createWindow(WS_EX_TRANSPARENT,szClassName,String(),WS_CHILD|WS_CLIPSIBLINGS,winRect,mhParent,(HMENU)0,processInstance(),(LPSTR)(Window*)this); + if(GridMesh::Show!=visibility)return; + show(SW_SHOW); + update(); +} + +GridMesh::~GridMesh() +{ + GUIWindow::destroy(); + removeHandlers(); +} + +void GridMesh::insertHandlers(void) +{ + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +void GridMesh::removeHandlers(void) +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +void GridMesh::registerClass(void) +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,szClassName,(WNDCLASS FAR *)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(GridMesh*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =0; + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);; + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +CallbackData::ReturnType GridMesh::createHandler(CallbackData &/*someCallbackData*/) +{ + sendMessage(WM_NCACTIVATE,TRUE,0L); + newMesh(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::paintHandler(CallbackData &someCallbackData) +{ + int segmentCount((int)Array::size()); + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=*pPaintInfo; + for(int itemIndex=0;itemIndex::operator[](itemIndex)).drawSegment((PureDevice&)*pPaintInfo,mDrawingPen); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::leftButtonUpHandler(CallbackData &someCallbackData) +{ + mouseUp(someCallbackData.loWord(),someCallbackData.hiWord()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::leftButtonDownHandler(CallbackData &someCallbackData) +{ + mouseDown(someCallbackData.loWord(),someCallbackData.hiWord()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GridMesh::mouseMoveHandler(CallbackData &someCallbackData) +{ + mouseMove(someCallbackData.loWord(),someCallbackData.hiWord()); + return FALSE; +} + +CallbackData::ReturnType GridMesh::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void GridMesh::showWindow(int visible) +{ + show(visible?SW_SHOW:SW_HIDE); + invalidate(); +} + +void GridMesh::newMesh(WORD gridLines) +{ + createMesh(gridLines,(Array&)*this); + ::InvalidateRect(mhParent,0,TRUE); + invalidate(); +} + +void GridMesh::createMesh(WORD gridLines,Array &someSegmentVector) +{ + RECT clientRect; + WORD xLength; + WORD yLength; + GDIPoint tempFirstPoint; + GDIPoint tempSecondPoint; + WORD vectorSize(0); + Index vectorIndex(0); + + if(gridLines>MaxGridLines)mGridLines=GridLines; + else mGridLines=gridLines; + ::GetClientRect(*this,(RECT FAR *)&clientRect); + xLength=clientRect.right/(mGridLines+1); + yLength=clientRect.bottom/(mGridLines+1); + for(int x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++)vectorSize+=2; + someSegmentVector.size(vectorSize); + for(x=0,xCount=0;xCount<=mGridLines;x+=xLength,xCount++) + { + for(int y=0,yCount=0;yCount<=mGridLines;y+=yLength,yCount++) + { + tempFirstPoint.setPoint(x+xLength,y+yLength); + tempSecondPoint.setPoint(x+xLength,y); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + tempSecondPoint.setPoint(x,y+yLength); + someSegmentVector[vectorIndex]=Segment(tempFirstPoint,tempSecondPoint,(WORD)vectorIndex); + vectorIndex++; + } + } +} + +void GridMesh::mouseDown(int x,int y) +{ + GDIPoint mousePoint; + size_t size; + + if(mIsSuspended)return; + mCurrentIntersection.remove(); + mousePoint.setPoint(x,y); + if(!closestIntersection(mCurrentIntersection,mousePoint)) + { + mStatus=InActive; + ::MessageBeep(-1); + return; + } + mStatus=Active; + PureDevice displayDevice(*this); + size=(int)mCurrentIntersection.size(); + for(int i=0;i::operator[](mCurrentIntersection[index].vectorIndex())=mCurrentIntersection[index]; +} + +WORD GridMesh::closestIntersection(Block &filterBlock,GDIPoint &mousePoint) +{ + size_t size((int)Array::size()); + DWORD tempDistance; + DWORD leastDistance; + Segment tempSegment; + Segment minSegment; + + if(!size)return FALSE; + filterBlock.remove(); + while(IntersectionSegments!=filterBlock.size()) + { + for(int index=0;index::operator[](index); + while(isInBlock(filterBlock,tempSegment))tempSegment=Array::operator[](++index); + leastDistance=minDistance(tempSegment,mousePoint); + } + else + { + tempDistance=minDistance(Array::operator[](index),mousePoint); + if(tempDistance::operator[](index); + if(!isInBlock(filterBlock,minSegment)) + { + tempSegment=minSegment; + leastDistance=tempDistance; + } + } + } + } + filterBlock.insert(&tempSegment); + } + return orderIntersection(filterBlock); +} + +WORD GridMesh::orderIntersection(Block &intersection) +{ + GDIPoint tempPoint; + GDIPoint swapPoint; + size_t size((int)intersection.size()); + int firstSection(0); + int secondSection(0); + int index; + + if(IntersectionSegments!=size)return FALSE; + tempPoint=intersection[0].firstPoint(); + firstSection=(tempPoint==intersection[1].firstPoint()); + if(!firstSection)firstSection=(tempPoint==intersection[1].secondPoint()); + if(!firstSection) + { + tempPoint=intersection[0].secondPoint(); + secondSection=tempPoint==intersection[1].firstPoint(); + if(!secondSection)secondSection=tempPoint==intersection[1].secondPoint(); + } + if(!firstSection && !secondSection)return FALSE; + for(index=1;index &source,Segment &someSegment) +{ + size_t size((int)source.size()); + + for(int i=0;i::size()); + + if(!size)return FALSE; + if(0==(fp=::fopen((LPSTR)pathFileName,"wb")))return FALSE; + ::fwrite((void*)(LPSTR)mVersionInfo,::strlen(mVersionInfo),1,fp); + ::fwrite((void*)&size,sizeof(size),1,fp); + ::fwrite((void*)&mGridLines,sizeof(mGridLines),1,fp); + for(int i=0;i::operator[](i).firstPoint(); + ::fwrite((void *)&tempPoint,sizeof(GDIPoint),1,fp); + tempPoint=Array::operator[](i).secondPoint(); + ::fwrite((void*)&tempPoint,sizeof(Point),1,fp); + } + ::fclose(fp); + return TRUE; +} + +WORD GridMesh::loadMesh(String &pathFileName) +{ + FILE *fp; + GDIPoint firstPoint; + GDIPoint secondPoint; + String versionString; + int vectorIndex(0); + size_t size; + + if(0==(fp=::fopen((LPSTR)pathFileName,"rb")))return upgradeStatus(FALSE); + versionString.reserve(String::MaxString); + ::fread((void*)(LPSTR)versionString,::strlen(mVersionInfo),1,fp); + if(versionString!=mVersionInfo) + { + ::fclose(fp); + return upgradeStatus(FALSE); + } + ::fread((void*)&size,sizeof(size),1,fp); + ::fread((void*)&mGridLines,sizeof(mGridLines),1,fp); + Array::size(size); + for(int i=0;i::operator[](vectorIndex)=Segment(firstPoint,secondPoint,vectorIndex); + vectorIndex++; + } + ::fclose(fp); + return upgradeStatus(TRUE); +} + +WORD GridMesh::upgradeStatus(WORD retCode)const +{ + if(!isVisible())show(SW_SHOW); + ::InvalidateRect(mhParent,0,TRUE); + invalidate(); + return retCode; +} + +WORD GridMesh::retrieveMesh(Array &sourcePoints,Array &destPoints) +{ + Array sourceSegments; + createMesh(mGridLines,sourceSegments); + retrieveMesh(sourcePoints,sourceSegments); + retrieveMesh(destPoints,(Array&)*this); + if(sourcePoints.size()!=destPoints.size())return FALSE; + return (WORD)sourcePoints.size(); +} + +WORD GridMesh::retrieveMesh(Array &meshPoints,Array &someSegmentVector)const +{ + Segment tempSegment; + int vectorIndex; + int pointIndex(0); + size_t vectorSize((int)someSegmentVector.size()); + int haveFirstColumn(FALSE); + Array dummyPoint; + + meshPoints.size(0); + meshPoints.size((mGridLines+2)*(mGridLines+2)); + for(vectorIndex=0;vectorIndex ¤tIntersection,Rect &boundingRect) +{ + for(int itemIndex=0;itemIndexsecondPoint.x()?firstPoint.x():secondPoint.x()); + boundingRect.bottom(firstPoint.y()secondPoint.x()?firstPoint.x():secondPoint.x()); + maxPoint.y(firstPoint.y()>secondPoint.y()?firstPoint.y():secondPoint.y()); + if(minPoint.x()boundingRect.right())boundingRect.right(maxPoint.x()); + if(maxPoint.y()>boundingRect.bottom())boundingRect.bottom(maxPoint.y()); + } + } +} diff --git a/meshwrp/mesh.hpp b/meshwrp/mesh.hpp new file mode 100644 index 0000000..9e9cb6a --- /dev/null +++ b/meshwrp/mesh.hpp @@ -0,0 +1,110 @@ +#ifndef _MESHWRP_MESH_HPP_ +#define _MESHWRP_MESH_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _MESHWRP_SEGMENT_HPP_ +#include +#endif +#ifndef _MESHWRP_POLYPOINT_HPP_ +#include +#endif + +class GridMesh : public Array, public Window +{ +public: + enum GridShow{Show,NoShow}; + GridMesh(HWND hParent,int width,int height,GridShow visibility=Show); + virtual ~GridMesh(void); + void newMesh(WORD gridLines=GridLines); + WORD saveMesh(String &pathFileName); + WORD loadMesh(String &pathFileName); + WORD retrieveMesh(Array &sourcePoints,Array &destPoints); + WORD rowCols(void)const; + WORD gridLines(void)const; + WORD upgradeStatus(WORD retCode)const; +// WORD isVisible(void)const; + void showWindow(int visible=TRUE); + void suspendMesh(WORD suspend); +private: + typedef LONG Index; + enum Status{InActive,Active}; + enum {IntersectionSegments=4}; + enum {GridLines=8,MaxGridLines=16}; + void registerClass(void); + long WndProc(UINT message,WPARAM wParam,LPARAM lParam); + void mouseUp(int x,int y); + void mouseDown(int x,int y); + void mouseMove(int x,int y); + DWORD minDistance(const Segment &someSegment,const GDIPoint &mousePoint); + WORD closestIntersection(Block &filterSegment,GDIPoint &mousePoint); + WORD orderIntersection(Block &intersection); + WORD isInBlock(Block &source,Segment &someSegment); + void createMesh(WORD gridLines,Array &someSegmentVector); + WORD retrieveMesh(Array &meshPoints,Array &meshSegments)const; + void getBoundingRect(Block ¤tIntersection,Rect &boundingRect); + void drawBoundingRect(const Rect &boundingRect); + + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + void insertHandlers(void); + void removeHandlers(void); + + Callback mCreateHandler; + Callback mPaintHandler; + Callback mLeftButtonUpHandler; + Callback mLeftButtonDownHandler; + Callback mMouseMoveHandler; + Callback mDestroyHandler; + Pen mDrawingPen; + + + static char szClassName[]; + static char szMenuName[]; + Block mCurrentIntersection; + int mGridLines; + Status mStatus; + String mVersionInfo; + WORD mIsSuspended; + HWND mhParent; + HINSTANCE mhInstance; +}; + +inline +WORD GridMesh::gridLines(void)const +{ + return mGridLines; +} + +inline +WORD GridMesh::rowCols(void)const +{ + return mGridLines+2; +} + +inline +void GridMesh::suspendMesh(WORD suspend) +{ + if(suspend)mIsSuspended=TRUE; + else mIsSuspended=FALSE; +} +#endif diff --git a/meshwrp/meshwrp.aps b/meshwrp/meshwrp.aps new file mode 100644 index 0000000..82f2d79 Binary files /dev/null and b/meshwrp/meshwrp.aps differ diff --git a/meshwrp/meshwrp.dsp b/meshwrp/meshwrp.dsp new file mode 100644 index 0000000..9c537ff --- /dev/null +++ b/meshwrp/meshwrp.dsp @@ -0,0 +1,154 @@ +# Microsoft Developer Studio Project File - Name="meshwrp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=meshwrp - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "meshwrp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "meshwrp.mak" CFG="meshwrp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "meshwrp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "meshwrp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "meshwrp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "meshwrp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "meshwrp - Win32 Release" +# Name "meshwrp - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\convex.cpp +# End Source File +# Begin Source File + +SOURCE=.\factor.cpp +# End Source File +# Begin Source File + +SOURCE=.\framedlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\image.cpp +# End Source File +# Begin Source File + +SOURCE=.\imageview.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\mesh.cpp +# End Source File +# Begin Source File + +SOURCE=.\meshwrp.rc +# End Source File +# Begin Source File + +SOURCE=.\polypnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\segment.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\944.ICO +# End Source File +# Begin Source File + +SOURCE=.\PAINT.ICO +# End Source File +# End Group +# End Target +# End Project diff --git a/meshwrp/meshwrp.dsw b/meshwrp/meshwrp.dsw new file mode 100644 index 0000000..0738e83 --- /dev/null +++ b/meshwrp/meshwrp.dsw @@ -0,0 +1,149 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\BSPTREE\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "gif"=..\GIF\gif.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpeg6b"="..\..\parts\jpeg-6b\jpeg6b.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "meshwrp"=.\meshwrp.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name toolbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name gif + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpeg6b + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency + Begin Project Dependency + Project_Dep_Name tooltip + End Project Dependency +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "toolbar"=..\TOOLBAR\Toolbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "tooltip"=..\TOOLTIP\TOOLTIP.DSP - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/meshwrp/meshwrp.ncb b/meshwrp/meshwrp.ncb new file mode 100644 index 0000000..efcbb7b Binary files /dev/null and b/meshwrp/meshwrp.ncb differ diff --git a/meshwrp/meshwrp.opt b/meshwrp/meshwrp.opt new file mode 100644 index 0000000..b7a0ab7 Binary files /dev/null and b/meshwrp/meshwrp.opt differ diff --git a/meshwrp/meshwrp.plg b/meshwrp/meshwrp.plg new file mode 100644 index 0000000..4044688 --- /dev/null +++ b/meshwrp/meshwrp.plg @@ -0,0 +1,43 @@ + + +
+

Build Log

+

+--------------------Configuration: statbar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSPF.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"\work\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\STATBAR\Popup.cpp" +"F:\STATBAR\Statbar.cpp" +"F:\STATBAR\statbarx.cpp" +"F:\STATBAR\Statinfo.cpp" +"F:\STATBAR\statlogo.cpp" +"F:\STATBAR\Statmenu.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSPF.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\statbar.lib" .\msvcobj\Popup.obj .\msvcobj\Statbar.obj .\msvcobj\statbarx.obj .\msvcobj\Statinfo.obj .\msvcobj\statlogo.obj .\msvcobj\Statmenu.obj " +

Output Window

+Compiling... +Popup.cpp +F:\STATBAR\Popup.cpp(3) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Statbar.cpp +F:\STATBAR\Statbar.cpp(4) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +statbarx.cpp +F:\STATBAR\statbarx.cpp(3) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Statinfo.cpp +F:\STATBAR\Statinfo.cpp(5) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +statlogo.cpp +F:\STATBAR\statlogo.cpp(3) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Statmenu.cpp +F:\STATBAR\Statmenu.cpp(5) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Error executing cl.exe. + + + +

Results

+meshwrp.exe - 6 error(s), 0 warning(s) +
+ + diff --git a/meshwrp/meshwrp.rc b/meshwrp/meshwrp.rc new file mode 100644 index 0000000..e0a7f66 --- /dev/null +++ b/meshwrp/meshwrp.rc @@ -0,0 +1,448 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resrc1.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +#include "resource.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +P944 ICON DISCARDABLE "944.ICO" +PAINT ICON DISCARDABLE "PAINT.ICO" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +ARROWD BITMAP MOVEABLE PURE "ARROWD.BMP" +ARROWL BITMAP MOVEABLE PURE "ARROWL.BMP" +ARROWR BITMAP MOVEABLE PURE "ARROWR.BMP" +ARROWU BITMAP MOVEABLE PURE "ARROWU.BMP" +BLOAD BITMAP MOVEABLE PURE "BLOAD.BMP" +BSAVE BITMAP MOVEABLE PURE "BSAVE.BMP" +CLIP BITMAP MOVEABLE PURE "CLIP.BMP" +CUT BITMAP MOVEABLE PURE "CUT.BMP" +EJECT BITMAP MOVEABLE PURE "EJECT.BMP" +PAUSE BITMAP MOVEABLE PURE "PAUSE.BMP" +PLAY BITMAP MOVEABLE PURE "PLAY.BMP" +VIEW BITMAP MOVEABLE PURE "VIEW.BMP" +TIME BITMAP MOVEABLE PURE "TIME.BMP" +MESH BITMAP MOVEABLE PURE "MESH.BMP" +SIGMA BITMAP MOVEABLE PURE "SIGMA.BMP" +TRANSFORMA BITMAP MOVEABLE PURE "TRANSFORMA.BMP" +TRANSFORMB BITMAP MOVEABLE PURE "TRANSFORMB.BMP" +XDISSOLVE BITMAP MOVEABLE PURE "XDISSOLVE.BMP" +FILENEW BITMAP MOVEABLE PURE "FILENEW.BMP" +FILEOPEN BITMAP MOVEABLE PURE "FILEOPEN.BMP" +FILESAVE BITMAP MOVEABLE PURE "FILESAVE.BMP" +FILEHELP BITMAP MOVEABLE PURE "FILEHELP.BMP" +NOMESH BITMAP MOVEABLE PURE "NOMESH.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MDIMAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", MENU_FILE_OPEN + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM "E&xit", MENU_FILE_EXIT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", MENU_FILE_OPEN + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM SEPARATOR + MENUITEM "&Save Bitmap...", MENU_FILE_SAVEBITMAP + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Edit" + BEGIN + MENUITEM "Cu&t\tCtrl+X", MENU_CUT + MENUITEM "&Copy\tCtrl+C", MENU_COPY + MENUITEM "P&aste\tCtrl+V", MENU_PASTE + MENUITEM "Cli&p\tCtrl+P", MENU_CLIP + END + POPUP "E&nhancement" + BEGIN + MENUITEM "&Smoothing", MENU_SMOOTHING + MENUITEM "&Resize", MENU_RESIZE + MENUITEM "&Translate", MENU_TRANSLATE + MENUITEM "S&hear", MENU_SHEAR + END + POPUP "War&ping" + BEGIN + MENUITEM "&Perspective Warp", MENU_WARP_PERSPECTIVE + MENUITEM "&Convex Warp", MENU_WARP_CONVEX + END + POPUP "Pale&tte" + BEGIN + MENUITEM "&View Palette...", MENU_PALETTE_VIEW + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM "&Hide Toolbar", IDM_TOOLBAR + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END +END + +SLIDEMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", MENU_FILE_OPEN + MENUITEM "Slide S&how...", MENU_SLIDE_SELECT + MENUITEM SEPARATOR + MENUITEM "&Save Bitmap...", MENU_FILE_SAVEBITMAP + MENUITEM "E&xit", MENU_FILE_EXIT + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM "&Hide Toolbar", IDM_TOOLBAR + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +FILESELECT DIALOG DISCARDABLE 31, 27, 211, 145 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 6, "Helv" +BEGIN + LISTBOX IDS_FLIST,5,53,201,88,LBS_SORT | LBS_USETABSTOPS | + WS_VSCROLL | WS_TABSTOP + EDITTEXT IDS_FNAME,42,6,84,12,ES_AUTOHSCROLL + CONTROL "Ok",IDOK,"Button",BS_OWNERDRAW | WS_TABSTOP,131,3,36,24 + CONTROL "Cancel",IDCANCEL,"Button",BS_OWNERDRAW | WS_TABSTOP,170, + 3,36,24 + LTEXT "File Name:",-1,2,8,38,8 + LTEXT "Path:",-1,4,24,17,8 + LTEXT "",IDS_FPATH,25,24,98,9 + LTEXT "File",-1,20,38,16,8 + LTEXT "Date",-1,68,38,16,8 + LTEXT "Size",-1,129,38,16,8 + LTEXT "Time",-1,159,38,16,8 + LTEXT "File Save",IDS_FILESAVE,90,155,38,8 + LTEXT "File Open",IDS_FILEOPEN,90,168,34,8 +END + +VIEWSELECT DIALOG DISCARDABLE 11, 26, 130, 55 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Select Mesh Target" +FONT 6, "Helv" +BEGIN + CONTROL "Cancel",IDCANCEL,"Button",BS_OWNERDRAW | WS_TABSTOP,92, + 5,36,24 + LISTBOX VIEWSEL_LIST,5,4,82,48,LBS_SORT | LBS_USETABSTOPS | + WS_VSCROLL +END + +PROCESSING DIALOG DISCARDABLE 20, 36, 153, 190 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Image Processing" +FONT 6, "Helv" +BEGIN + CHECKBOX "3x3 Matrix Averaging",IP_AVERAGING,7,55,82,12 + CHECKBOX "Low Pass Filter",IP_LOWPASS,7,70,77,12 + CHECKBOX "High Pass Filter",IP_HIGHPASS,7,85,65,12 + EDITTEXT IP_33R1C1,104,57,14,12 + EDITTEXT IP_33R1C2,118,57,14,12 + EDITTEXT IP_33R1C3,132,57,14,12 + EDITTEXT IP_33R2C1,104,69,14,12 + EDITTEXT IP_33R2C2,118,69,14,12 + EDITTEXT IP_33R2C3,132,69,14,12 + EDITTEXT IP_33R3C1,104,81,14,12 + EDITTEXT IP_33R3C2,118,81,14,12 + EDITTEXT IP_33R3C3,132,81,14,12 + CHECKBOX "Sobel Transform",IP_SOBEL,7,124,87,12 + CHECKBOX "Smoothed Transform",IP_SMOOTHED,7,136,84,12 + CHECKBOX "Laplace Transform",IP_LAPLACE,7,148,80,12 + CHECKBOX "Isotropic Transform",IP_ISOTROPIC,7,160,75,12 + CHECKBOX "Stochastic Transform",IP_STOCHASTIC,7,172,85,12 + CONTROL "Ok",IDOK,"Button",BS_OWNERDRAW | WS_TABSTOP,77,2,36,24 + CONTROL "Cancel",IDCANCEL,"Button",BS_OWNERDRAW | WS_TABSTOP,115, + 2,36,24 + GROUPBOX "Smoothing Algorithms",IP_SMOOTHING,3,37,148,68 + LTEXT "Matrix",-1,109,47,24,7 + GROUPBOX "Edge Detection Algorithms",IP_EDGE,3,111,148,76 +END + +SLIDESHOW DIALOG DISCARDABLE 20, 30, 208, 128 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Slide Show" +FONT 6, "Helv" +BEGIN + CONTROL "Ok",IDOK,"Button",BS_OWNERDRAW | WS_TABSTOP,132,4,36,24 + CONTROL "Cancel",IDCANCEL,"Button",BS_OWNERDRAW | WS_TABSTOP,169, + 4,36,24 + RADIOBUTTON "Select Files",SS_SELECT,5,29,51,12,WS_TABSTOP +END + +FACTOR DIALOG DISCARDABLE 10, 27, 90, 72 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 6, "Helv" +BEGIN + EDITTEXT FACTOR_WIDTH,56,40,32,12 + EDITTEXT FACTOR_HEIGHT,56,54,32,12 + EDITTEXT FACTOR_WIDTHINCR,140,40,40,12 + EDITTEXT FACTOR_HEIGHTINCR,140,54,40,12 + RADIOBUTTON "Op :",FACTOR_WIDTHOP,182,41,28,12,WS_TABSTOP + RADIOBUTTON "Op :",FACTOR_HEIGHTOP,182,54,27,12,WS_TABSTOP + PUSHBUTTON "Ok",IDOK,1,1,36,24 + PUSHBUTTON "Cancel",IDCANCEL,40,1,36,24 + LTEXT "Width Factor :",-1,4,42,48,8 + LTEXT "Height Factor :",-1,4,55,51,8 + LTEXT "Incremental :",-1,93,42,45,8 + LTEXT "Incremental :",-1,93,55,44,8 + LTEXT "",FACTOR_WOPSTRING,211,43,9,8 + LTEXT "",FACTOR_HOPSTRING,211,55,9,8 +END + +FRAME DIALOG DISCARDABLE 10, 27, 172, 77 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Mesh Frames" +FONT 6, "Helv" +BEGIN + LTEXT "Number of Frames:",-1,4,45,67,8 + EDITTEXT FRAME_FRAMES,70,43,37,12 + PUSHBUTTON "Ok",IDOK,114,4,50,14 + PUSHBUTTON "Cancel",IDCANCEL,114,19,50,14 +END + +PALETTE DIALOG DISCARDABLE 30, 0, 142, 105 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Palette" +FONT 6, "Helv" +BEGIN + CONTROL "",PALETTE_COLORS,"Button",BS_OWNERDRAW,1,34,140,68 + CONTROL "Ok",IDOK,"Button",BS_OWNERDRAW | WS_TABSTOP,103,3,36,24 +END + +DISSOLVE DIALOG DISCARDABLE 19, 25, 143, 137 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Cross Dissolve Schedule" +FONT 6, "Helv" +BEGIN + LISTBOX DSLV_LIST,3,54,137,79,LBS_HASSTRINGS | LBS_USETABSTOPS | + WS_VSCROLL | WS_TABSTOP + CONTROL "",IDOK,"Button",BS_OWNERDRAW | WS_TABSTOP,105,2,36,24 + CONTROL "",IDCANCEL,"Button",BS_OWNERDRAW | WS_TABSTOP,68,2,36, + 24 + LTEXT "Frame",-1,5,42,20,8 + LTEXT "Source",-1,36,42,26,8 + LTEXT "Repeat",-1,102,42,25,8 + LTEXT "Destination",-1,62,42,38,8 +END + +EDITDISSOLVE DIALOG DISCARDABLE 21, 35, 117, 74 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Edit Item" +FONT 8, "Helv" +BEGIN + LTEXT "Source :",-1,4,39,29,8 + LTEXT "Destination :",-1,4,51,45,8 + LTEXT "Repeat :",-1,4,63,34,8 + EDITTEXT EDITITEM_SOURCE,50,35,32,12 + EDITTEXT EDITITEM_DESTINATION,50,47,32,12 + EDITTEXT EDITITEM_REPEAT,50,59,16,12 + CONTROL "",IDOK,"Button",BS_OWNERDRAW | WS_TABSTOP,80,2,36,24 + CONTROL "",IDCANCEL,"Button",BS_OWNERDRAW | WS_TABSTOP,43,2,36, + 24 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +MDIACCEL ACCELERATORS MOVEABLE PURE +BEGIN + VK_F5, IDM_CASCADE, VIRTKEY, SHIFT + VK_F4, IDM_TILE, VIRTKEY, SHIFT + "X", MENU_CUT, VIRTKEY, CONTROL + "C", MENU_COPY, VIRTKEY, CONTROL + "V", MENU_PASTE, VIRTKEY, CONTROL + "P", MENU_CLIP, VIRTKEY, CONTROL +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resrc1.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""resource.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "FRAME", DIALOG + BEGIN + RIGHTMARGIN, 81 + BOTTOMMARGIN, 65 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_HIDETOOLBAR "&Hide Toolbar" + STRING_SHOWTOOLBAR "&Show Toolbar" + STRING_ASTERISKDOTBMP "*.BMP" + STRING_ASTERISKDOTGIF "*.GIF" + STRING_BITMAPOKFOCUSUP "OKFOCUSUP" + STRING_BITMAPOKNOFUP "OKNOFUP" + STRING_BITMAPOKFOCUSDN "OKFOCUSDN" + STRING_BITMAPCAFOCUSUP "CAFOCUSUP" + STRING_BITMAPCANOFUP "CANOFUP" + STRING_BITMAPCAFOCUSDN "CAFOCUSDN" + STRING_LITERALCLIP "CLIP" + STRING_LITERALMESH "MESH" + STRING_LITERALCUT "CUT" + STRING_LITERALARROWD "ARROWD" + STRING_LITERALARROWU "ARROWU" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_PROJECTEXTENSION ".PRJ" + STRING_DOT "." + STRING_CRLF "\n" + STRING_ASTERISKDOTPRJ "*.PRJ" + STRING_PROJECTIDSTRING "PRJV1.00" + STRING_UNKNOWNFILETYPE "Dont know how to handle this file." + STRING_UNKNOWNREFERENCE "Project references missing or invalid items." + STRING_ERRORLOADINGPRJ "Error loading project" + STRING_LITERALSIGMA "SIGMA" + STRING_INIFILENAME "MDIWIN.INI" + STRING_UNSET "UNSET" + STRING_INISETTINGS "SETTINGS" + STRING_INIPROJDIR "ProjDir" + STRING_INIMESHDIR "MeshDir" + STRING_TABSTRING "\t" + STRING_LITERALDISSOLVE "XDISSOLVE" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_LITERALARROWR "ARROWR" + STRING_LITERALARROWL "ARROWL" + STRING_LITERALTEST "TEST" + STRING_LITERALBSAVE "BSAVE" + STRING_LITERALBLOAD "BLOAD" + STRING_LITERALTRANSFORMA "TRANSFORMA" + STRING_LITERALTRANSFORMB "TRANSFORMB" + STRING_LITERALVIEW "VIEW" + STRING_LITERALTIME "TIME" + STRING_LITERALPLAY "PLAY" + STRING_LITERALPAUSE "PAUSE" + STRING_LITERALEJECT "EJECT" + STRING_LITERALTOOLBAR "ToolBar" + STRING_LITERAL944 "P944" + STRING_MESHEXTENSION ".000" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_APPNAME "MeshWarp" + STRING_APPVERSION "1.0" + STRING_DOCUMENTVIEWCLASSNAME "ImageView" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/meshwrp/mot.gif b/meshwrp/mot.gif new file mode 100644 index 0000000..f6367d0 Binary files /dev/null and b/meshwrp/mot.gif differ diff --git a/meshwrp/nomesh.bmp b/meshwrp/nomesh.bmp new file mode 100644 index 0000000..c03d36a Binary files /dev/null and b/meshwrp/nomesh.bmp differ diff --git a/meshwrp/pause.bmp b/meshwrp/pause.bmp new file mode 100644 index 0000000..1c09b7a Binary files /dev/null and b/meshwrp/pause.bmp differ diff --git a/meshwrp/play.bmp b/meshwrp/play.bmp new file mode 100644 index 0000000..e06b9dd Binary files /dev/null and b/meshwrp/play.bmp differ diff --git a/meshwrp/polypnt.cpp b/meshwrp/polypnt.cpp new file mode 100644 index 0000000..ca63574 --- /dev/null +++ b/meshwrp/polypnt.cpp @@ -0,0 +1,6 @@ +#include + +PolyPoint::PolyPoint(const PolyPoint &somePolyPoint) +{ + for(int pointIndex=0;pointIndex +#endif + +class PolyPoint +{ +public: + enum {MaxPoint=4}; + PolyPoint(void); + PolyPoint(const PolyPoint &somePolyPoint); + virtual ~PolyPoint(); + GDIPoint &operator[](unsigned point); +private: + GDIPoint mPolyPoint[MaxPoint]; +}; + +inline +PolyPoint::PolyPoint(void) +{ +} + +inline +PolyPoint::~PolyPoint() +{ +} + +inline +GDIPoint &PolyPoint::operator[](unsigned point) +{ + if(point>=MaxPoint)return mPolyPoint[MaxPoint-1]; + return mPolyPoint[point]; +} +#endif \ No newline at end of file diff --git a/meshwrp/pwarp.cpp b/meshwrp/pwarp.cpp new file mode 100644 index 0000000..eb26d4f --- /dev/null +++ b/meshwrp/pwarp.cpp @@ -0,0 +1,166 @@ +#include + +PerspectiveWarp::PerspectiveWarp() +: mWidth(0), mHeight(0), mwRow(0), mwCol(0), mWarpType(Incremental), mColOp(Add), mRowOp(Add), mRowIncr(0), mColIncr(0) +{ +} + +/*PerspectiveWarp::PerspectiveWarp(WORD width,WORD height,UHUGE *hpImageInvert,double wRow,double wCol) +: mWidth(width), mHeight(height),mwRow(wRow), mwCol(wCol), + mhpImageInvert(hpImageInvert), mWarpType(None), + mIsInThread(TRUE) +{ +} + +PerspectiveWarp::PerspectiveWarp(WORD width,WORD height,double wRow,double wCol,Operation colOp,double colIncr,Operation rowOp,double rowIncr,UHUGE *hpImageInvert) +: mWidth(width), mHeight(height), mwRow(wRow), mwCol(wCol), + mColOp(colOp), mColIncr(colIncr), mRowOp(rowOp), mRowIncr(rowIncr), + mhpImageInvert(hpImageInvert), mWarpType(Incremental), + mIsInThread(TRUE) +{ +} +*/ + +PerspectiveWarp::~PerspectiveWarp() +{ +} + +Image PerspectiveWarp::performPerspectiveWarp(Image &image,double wRow,double wCol,Operation colOp,double colIncr,Operation rowOp,double rowIncr) +{ + mWidth=image.width(); + mHeight=image.height(); + mwRow=wRow; + mwCol=wCol; + mColOp=colOp; + mRopOp=rowOp; + mColIncr=colIncr; + mRowIncr=rowIncr; + + return Image(); +} + +/* HGLOBAL PerspectiveWarp::performPerspectiveWarp(void) +{ + if(Incremental==mWarpType)return incrementalWarp(); + return nonIncrementalWarp(); +} */ + +HGLOBAL PerspectiveWarp::incrementalWarp(void) +{ + int maxCol, maxRow; + double newRow, newCol, tempColFactor, tempRowFactor; + LONG rowMult, colMult, row, col; + HGLOBAL hGlobal, hGlobalTemp, hGlobalSource; + UHUGE *ptr; + UHUGE *ptrSource; + + maxCol=maxRow=0L; + hGlobalSource=Main::upsideDown(mWidth,mHeight,mhpImageInvert); + ptrSource=(UHUGE*)::GlobalLock(hGlobalSource); + hGlobal=::GlobalAlloc(GMEM_FIXED,(LONG)mHeight*(LONG)mWidth); + ptr=(UHUGE*)::GlobalLock(hGlobal); + Main::hmemset(ptr,0,(LONG)mHeight*(LONG)mWidth); + tempRowFactor=mwRow; + for(row=0;rowmaxRow)maxRow=(int)newRow; + if(newCol>maxCol)maxCol=(int)newCol; + if(Add==mColOp)mwCol+=mColIncr; + else if(Subtract==mColOp)mwCol=(mwCol-mColIncr<0?0:mwCol-mColIncr); + else if(Multiply==mColOp)mwCol*=mColIncr; + else mwCol/=(mColIncr?mColIncr:1); + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + mwCol=tempColFactor; + if(Add==mRowOp)mwRow+=mRowIncr; + else if(Subtract==mRowOp)mwRow=(mwRow-mRowIncr<0?0:mwRow-mRowIncr); + else if(Multiply==mRowOp)mwRow*=mRowIncr; + else mwRow/=(mRowIncr?mRowIncr:1); + } + rowMult=(mHeight/(maxRow?maxRow:1)); + colMult=(mWidth/(maxCol?maxCol:1)); + mwRow=tempRowFactor; + for(row=0;row=(LONG)mWidth*(LONG)mHeight) + continue; + *(ptr+((LONG)newRow*(LONG)mWidth)+(LONG)newCol)= + *(ptrSource+(row*(LONG)mWidth)+col); + if(Add==mColOp)mwCol+=mColIncr; + else if(Subtract==mColOp)mwCol=(mwCol-mColIncr<0?0:mwCol-mColIncr); + else if(Multiply==mColOp)mwCol*=mColIncr; + else mwCol/=(mColIncr?mColIncr:1); + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + mwCol=tempColFactor; + if(Add==mRowOp)mwRow+=mRowIncr; + else if(Subtract==mRowOp)mwRow=(mwRow-mRowIncr<0?0:mwRow-mRowIncr); + else if(Multiply==mRowOp)mwRow*=mRowIncr; + else mwRow/=(mRowIncr?mRowIncr:1); + } + ::GlobalUnlock(hGlobalSource); + ::GlobalFree(hGlobalSource); + hGlobalTemp=Main::upsideDown(mWidth,mHeight,ptr); + ::GlobalUnlock(hGlobal); + ::GlobalFree(hGlobal); + return hGlobalTemp; +} + +HGLOBAL PerspectiveWarp::nonIncrementalWarp(void) +{ + int maxCol, maxRow; + double newRow, newCol; + LONG rowMult, colMult, row, col; + HGLOBAL hGlobal, hGlobalTemp, hGlobalSource; + UHUGE *ptr; + UHUGE *ptrSource; + + maxCol=maxRow=0L; + hGlobalSource=Main::upsideDown(mWidth,mHeight,mhpImageInvert); + ptrSource=(UHUGE*)::GlobalLock(hGlobalSource); + hGlobal=::GlobalAlloc(GMEM_FIXED,(LONG)mHeight*(LONG)mWidth); + ptr=(UHUGE*)::GlobalLock(hGlobal); + Main::hmemset(ptr,0,(LONG)mHeight*(LONG)mWidth); + for(row=0;rowmaxRow)maxRow=(int)newRow; + if(newCol>maxCol)maxCol=(int)newCol; + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + } + rowMult=(mHeight/(maxRow?maxRow:1)); + colMult=(mWidth/(maxCol?maxCol:1)); + for(row=0;row=(LONG)mWidth*(LONG)mHeight) + continue; + *(ptr+((LONG)newRow*(LONG)mWidth)+(LONG)newCol)= + *(ptrSource+(row*(LONG)mWidth)+col); + if(!yieldTask())return (HGLOBAL)emergencyCleanup(hGlobalSource,hGlobal); + } + } + ::GlobalUnlock(hGlobalSource); + ::GlobalFree(hGlobalSource); + hGlobalTemp=Main::upsideDown(mWidth,mHeight,ptr); + ::GlobalUnlock(hGlobal); + ::GlobalFree(hGlobal); + return hGlobalTemp; +} diff --git a/meshwrp/pwarp.hpp b/meshwrp/pwarp.hpp new file mode 100644 index 0000000..6d09528 --- /dev/null +++ b/meshwrp/pwarp.hpp @@ -0,0 +1,31 @@ +#ifndef _MESHWRP_PERSPECTIVEWARP_HPP_ +#define _MESHWRP_PERSPECTIVEWARP_HPP_ +//#include + +class PerspectiveWarp +{ +public: + enum Type{Incremental,None}; + enum Operation{Add,Subtract,Multiply,Divide}; + PerspectiveWarp(void); +// PerspectiveWarp(WORD width,WORD height,UHUGE *hpImageInvert,double wRow,double wCol); +// PerspectiveWarp(WORD width,WORD height,double wRow,double wCol,Operation colOp,double colIncr,Operation rowOp,double rowIncr,UHUGE *hpImageInvert); + virtual ~PerspectiveWarp(); +// Image performPerspectiveWarp(Image &image,double wRow,double wCol,Operation colOp,double colIncr,Operation rowOp,double rowIncr); +// HGLOBAL performPerspectiveWarp(void); +private: + HGLOBAL incrementalWarp(void); + HGLOBAL nonIncrementalWarp(void); + + double mwRow; + double mwCol; + double mRowIncr; + double mColIncr; + Operation mRowOp; + Operation mColOp; + WORD mWidth; + WORD mHeight; + Type mWarpType; + UHUGE *mhpImageInvert; +}; +#endif diff --git a/meshwrp/resource.h b/meshwrp/resource.h new file mode 100644 index 0000000..d378a0a --- /dev/null +++ b/meshwrp/resource.h @@ -0,0 +1,162 @@ +#ifndef _MESHWRP_RESOURCE_H_ +#define _MESHWRP_RESOURCE_H_ + +#define EDITITEM_SOURCE 102 +#define EDITITEM_DESTINATION 103 +#define EDITITEM_REPEAT 104 + +// defines for dissolve schedule dialog +#define DSLV_LIST 101 + +// defines for ViewSelect Dialog +#define VIEWSEL_LIST 101 + +// defines for FrameDialog +#define FRAME_FRAMES 101 + +// defines for Main Menu +#define MENU_FILE_OPEN 0x01 +#define MENU_FILE_EXIT 0x03 +#define MENU_PALETTE_VIEW 0x04 +#define MENU_CUT 0x05 +#define MENU_COPY 0x06 +#define MENU_PASTE 0x07 +#define MENU_SMOOTHING 0x08 +#define MENU_RESIZE 0x09 +#define MENU_TRANSLATE 0x0A +#define MENU_WARP_PERSPECTIVE 0x0B +#define MENU_CLIP 0x0C +#define MENU_FILE_SAVEBITMAP 0x0D +#define MENU_SHEAR 0x0E +#define MENU_WARP_CONVEX 0x10 + +#define MENU_TBMESH 0x20 +#define MENU_TBCLIP 0x21 +#define MENU_TBARROWL 0x23 +#define MENU_TBARROWR 0x24 +#define MENU_TBARROWU 0x25 +#define MENU_TBARROWD 0x26 +#define MENU_TBSAVE 0x27 +#define MENU_TBLOAD 0x28 +#define MENU_TBTRANSFORMA 0x29 +#define MENU_TBTRANSFORMB 0x2A +#define MENU_TBSIGMA 0x2B +#define MENU_TBPLAY 0x2C +#define MENU_TBEJECT 0x2D +#define MENU_TBPAUSE 0x2E +#define MENU_TBTIME 0x2F +#define MENU_SLIDE_SELECT 0x30 +#define MENU_TBDISSOLVE 0x31 +#define MENU_TBNOMESH 0x32 + + +// defines for file selection dialog +#define IDS_FLIST 0x0B +#define IDS_FNAME 0x0C +#define IDS_FPATH 0x0D +#define IDS_FILEOPEN 0x0E +#define IDS_FILESAVE 0x0F + +// defines for factor dialog window +#define FACTOR_WIDTH 101 +#define FACTOR_HEIGHT 102 +#define FACTOR_WIDTHINCR 103 +#define FACTOR_HEIGHTINCR 104 +#define FACTOR_WIDTHOP 105 +#define FACTOR_HEIGHTOP 106 +#define FACTOR_WOPSTRING 107 +#define FACTOR_HOPSTRING 108 + +// defines for enhancement dialog +#define IP_SMOOTHING 104 +#define IP_EDGE 114 +#define IP_SMDEFAULTS 120 +#define IP_AVERAGING 101 +#define IP_LOWPASS 102 +#define IP_HIGHPASS 103 +#define IP_33R1C1 105 +#define IP_33R1C2 106 +#define IP_33R1C3 107 +#define IP_33R2C1 108 +#define IP_33R2C2 109 +#define IP_33R2C3 110 +#define IP_33R3C1 111 +#define IP_33R3C2 112 +#define IP_33R3C3 113 +#define IP_SOBEL 115 +#define IP_SMOOTHED 116 +#define IP_LAPLACE 117 +#define IP_ISOTROPIC 118 +#define IP_STOCHASTIC 119 + +// defines for palette dialog +#define PALETTE_COLORS 101 + +// defines for slide select dialog +#define SS_LIST 101 +#define SS_SELECT 102 +#define SS_BMP 103 +#define SS_PROJECT 104 + +// defines for string table +#define STRING_HIDETOOLBAR 0x0001 +#define STRING_SHOWTOOLBAR 0x0002 +#define STRING_ASTERISKDOTBMP 0x0003 +#define STRING_ASTERISKDOTGIF 0x0004 +#define STRING_BITMAPOKFOCUSUP 0x0005 +#define STRING_BITMAPOKNOFUP 0x0006 +#define STRING_BITMAPOKFOCUSDN 0x0007 +#define STRING_BITMAPCAFOCUSUP 0x0008 +#define STRING_BITMAPCANOFUP 0x0009 +#define STRING_BITMAPCAFOCUSDN 0x000A +#define STRING_LITERALCLIP 0x000B +#define STRING_LITERALMESH 0x000C +#define STRING_LITERALCUT 0x000D +#define STRING_LITERALARROWD 0x000E +#define STRING_LITERALARROWU 0x000F +#define STRING_LITERALARROWR 0x0010 +#define STRING_LITERALARROWL 0x0011 +#define STRING_LITERALTEST 0x0012 +#define STRING_LITERALBSAVE 0x0013 +#define STRING_LITERALBLOAD 0x0014 +#define STRING_LITERALTRANSFORMA 0x0015 +#define STRING_LITERALTRANSFORMB 0x0016 +#define STRING_LITERALVIEW 0x0017 +#define STRING_LITERALTIME 0x0018 +#define STRING_LITERALPLAY 0x0019 +#define STRING_LITERALSTOP 0x001A +#define STRING_LITERALPAUSE 0x001B +#define STRING_LITERALEJECT 0x001C +#define STRING_LITERALTOOLBAR 0x001D +#define STRING_LITERAL944 0x001E +#define STRING_MESHEXTENSION 0x001F +#define STRING_PROJECTEXTENSION 0x0020 +#define STRING_DOT 0x0021 +#define STRING_CRLF 0x0022 +#define STRING_ASTERISKDOTPRJ 0x0023 +#define STRING_PROJECTIDSTRING 0x0024 +#define STRING_UNKNOWNFILETYPE 0x0025 +#define STRING_UNKNOWNREFERENCE 0x0026 +#define STRING_ERRORLOADINGPRJ 0x0027 +#define STRING_LITERALSIGMA 0x0028 +#define STRING_INIFILENAME 0x0029 +#define STRING_UNSET 0x002A +#define STRING_INISETTINGS 0x002B +#define STRING_INIPROJDIR 0x002C +#define STRING_INIMESHDIR 0x002D +#define STRING_TABSTRING 0x002E +#define STRING_LITERALDISSOLVE 0x002F + +#define STRING_APPNAME 0x0030 +#define STRING_APPVERSION 0x0031 +#define STRING_DOCUMENTVIEWCLASSNAME 0x0032 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 +#define IDM_TOOLBAR 10020 + +#endif diff --git a/meshwrp/resource.hpp b/meshwrp/resource.hpp new file mode 100644 index 0000000..b6c484a --- /dev/null +++ b/meshwrp/resource.hpp @@ -0,0 +1,4 @@ +#ifndef _MESHWRP_RESOURCE_HPP_ +#define _MESHWRP_RESOURCE_HPP_ +#include +#endif diff --git a/meshwrp/resrc1.h b/meshwrp/resrc1.h new file mode 100644 index 0000000..ce96a4a --- /dev/null +++ b/meshwrp/resrc1.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by meshwrp.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1002 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/meshwrp/scraps.txt b/meshwrp/scraps.txt new file mode 100644 index 0000000..95c9b62 --- /dev/null +++ b/meshwrp/scraps.txt @@ -0,0 +1,42 @@ + + +void ImageView::createToolBar(void) +{ +/* Block addBitmaps; + + mToolControl=::new ToolBar(); + mToolControl.disposition(PointerDisposition::Delete); + mToolControl->create(*this,101); + addBitmaps.insert(&AddBitmap(0,HINST_COMMCTRL)); + if(!mToolControl->addBitmaps(addBitmaps))return; +// mToolControl->addButton(ToolBarButton(STD_FILENEW,MenuFileNew,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(STD_FILEOPEN,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); + mToolControl->addButton(ToolBarButton(STD_FILESAVE,500,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolControl->addButton(ToolBarButton(STD_PRINT,500,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolControl->addButton(ToolBarButton(STD_CUT,500,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolControl->addButton(ToolBarButton(STD_COPY,500,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolControl->addButton(ToolBarButton(STD_PASTE,500,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolControl->addButton(ToolBarButton(STD_FIND,500,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); +// mToolControl->addButton(ToolBarButton(STD_PRINT,500,ToolBarButton::StateEnabled,ToolBarButton::StyleButton)); */ +} + + + PureToolInfo pureToolInfo; + Rect itemRect; + +// mToolControl->getItemRect(0,itemRect); + clientRect(itemRect); + pureToolInfo.flags(PureToolInfo::None); + +// pureToolInfo.hwnd(*mToolControl); + pureToolInfo.hwnd(getClient()); +// pureToolInfo.resInst(processInstance()); + pureToolInfo.rect(itemRect); + pureToolInfo.szText("This is an edit control."); + mToolTipControl->addTool(pureToolInfo); + + + + SmartPointer mToolTipControl; + mToolTipControl=::new ToolTip(*this); + mToolTipControl.disposition(PointerDisposition::Delete); diff --git a/meshwrp/scroll.hpp b/meshwrp/scroll.hpp new file mode 100644 index 0000000..64a8a40 --- /dev/null +++ b/meshwrp/scroll.hpp @@ -0,0 +1,362 @@ +#ifndef _MESHWRP_SCROLLINFO_HPP_ +#define _MESHWRP_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +inline +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#include +#include + +Segment::Segment() +{ +} + +Segment::~Segment() +{ +} + +Segment::Segment(const GDIPoint &firstPoint,const GDIPoint &secondPoint,WORD vectorIndex) +{ + mFirstPoint=firstPoint; + mSecondPoint=secondPoint; + mVectorIndex=vectorIndex; +} + +Segment::Segment(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +WORD Segment::operator==(const Segment &someSegment)const +{ + return ((mFirstPoint==someSegment.mFirstPoint && + mSecondPoint==someSegment.mSecondPoint)|| + (mFirstPoint==someSegment.mSecondPoint && + mSecondPoint==someSegment.mFirstPoint)); +} + +void Segment::operator=(const Segment &someSegment) +{ + mFirstPoint=someSegment.mFirstPoint; + mSecondPoint=someSegment.mSecondPoint; + mVectorIndex=someSegment.mVectorIndex; +} + +void Segment::drawSegment(PureDevice &displayDevice,HPEN hPen,bool setROP)const +{ + GDIPoint currentPosition; + HPEN hOldPen(0); + int saveMode; + + if(setROP)saveMode=::SetROP2(displayDevice,R2_NOT); + if(hPen)hOldPen=(HPEN)::SelectObject(displayDevice,hPen); + ::GetCurrentPositionEx(displayDevice,(POINT FAR*)¤tPosition); + ::MoveToEx(displayDevice,mFirstPoint.x(),mFirstPoint.y(),(POINT FAR*)¤tPosition); + ::LineTo(displayDevice,mSecondPoint.x(),mSecondPoint.y()); + ::MoveToEx(displayDevice,currentPosition.x(),currentPosition.y(),(POINT FAR*)&mSecondPoint); + if(hOldPen)::SelectObject(displayDevice,hOldPen); + if(setROP)::SetROP2(displayDevice,saveMode); +} diff --git a/meshwrp/segment.hpp b/meshwrp/segment.hpp new file mode 100644 index 0000000..23d6884 --- /dev/null +++ b/meshwrp/segment.hpp @@ -0,0 +1,97 @@ +#ifndef _MESHWRP_SEGMENT_HPP_ +#define _MESHWRP_SEGMENT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif + +class PureDevice; + +class Segment +{ +public: + Segment(void); + Segment(const GDIPoint &firstPoint,const GDIPoint &secondPoint,WORD vectorIndex); + Segment(const Segment &someSegment); + virtual ~Segment(void); + WORD operator==(const Segment &someSegment)const; + void operator=(const Segment &someSegment); + void drawSegment(PureDevice &displayDevice,HPEN hPen=0,bool setROP=true)const; + WORD vectorIndex(void)const; + WORD xFirst(void)const; + WORD xSecond(void)const; + WORD yFirst(void)const; + WORD ySecond(void)const; + const GDIPoint &firstPoint(void)const; + const GDIPoint &secondPoint(void)const; + void firstPoint(const GDIPoint &somePoint); + void secondPoint(const GDIPoint &somePoint); + GDIPoint leadingPoint(void)const; +private: + GDIPoint mFirstPoint; + GDIPoint mSecondPoint; + WORD mVectorIndex; +}; + +inline +WORD Segment::xFirst(void)const +{ + return mFirstPoint.x(); +} + +inline +WORD Segment::xSecond(void)const +{ + return mSecondPoint.x(); +} + +inline +WORD Segment::yFirst(void)const +{ + return mFirstPoint.y(); +} + +inline +WORD Segment::ySecond(void)const +{ + return mSecondPoint.y(); +} + +inline +const GDIPoint &Segment::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +const GDIPoint &Segment::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void Segment::firstPoint(const GDIPoint &somePoint) +{ + mFirstPoint=somePoint; +} + +inline +void Segment::secondPoint(const GDIPoint &somePoint) +{ + mSecondPoint=somePoint; +} + +inline +GDIPoint Segment::leadingPoint(void)const +{ + return (mFirstPoint.y() +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif + +class MidiHeader : public PureHeader +{ +public: + MidiHeader(void); + virtual ~MidiHeader(); + WORD readHeader(FileIO &fileIO); +private: +}; + +inline +MidiHeader::MidiHeader(void) +{ +} + +inline +MidiHeader::~MidiHeader() +{ +} + +inline +WORD MidiHeader::readHeader(FileIO &fileIO) +{ + return PureHeader::readHeader(fileIO); +} +#endif + + + + + + + + + + diff --git a/midiseq/ChannelModeMessage.hpp b/midiseq/ChannelModeMessage.hpp new file mode 100644 index 0000000..215fae2 --- /dev/null +++ b/midiseq/ChannelModeMessage.hpp @@ -0,0 +1,58 @@ +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#define _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class ChannelModeMessage +{ +public: + typedef enum ChannelMessage{AllNotesOff,LocalControlOff,LocalControlOn, + Modulation,MainVolume,Pan,Expression,Sustain,ResetAllControllers}; + ChannelModeMessage(ChannelMessage channelMessage=AllNotesOff); + virtual ~ChannelModeMessage(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0,BYTE value=0); +private: + ChannelMessage mChannelMessage; +}; + +inline +ChannelModeMessage::ChannelModeMessage(ChannelMessage channelMessage) +: mChannelMessage(channelMessage) +{ +} + +inline +ChannelModeMessage::~ChannelModeMessage() +{ +} + +inline +PureEvent ChannelModeMessage::getEvent(BYTE deltaTime,BYTE channel,BYTE value) +{ + switch(mChannelMessage) + { + case AllNotesOff : + return PureEvent(MIDIParameter,deltaTime,channel,123,0); + case LocalControlOff : + return PureEvent(MIDIParameter,deltaTime,channel,122,0); + case LocalControlOn : + return PureEvent(MIDIParameter,deltaTime,channel,122,127); + case Modulation : + return PureEvent(MIDIParameter,deltaTime,channel,1,value); + case MainVolume : + return PureEvent(MIDIParameter,deltaTime,channel,7,value); + case Pan : + return PureEvent(MIDIParameter,deltaTime,channel,10,value); + case Expression : + return PureEvent(MIDIParameter,deltaTime,channel,11,value); + case Sustain : + return PureEvent(MIDIParameter,deltaTime,channel,64,value); + case ResetAllControllers : + return PureEvent(MIDIParameter,deltaTime,channel,121,0); + default : + return PureEvent(MIDIParameter,deltaTime,channel,123,0); // default is all notes off + } +} +#endif + diff --git a/midiseq/DOCS/GENERAL.TXT b/midiseq/DOCS/GENERAL.TXT new file mode 100644 index 0000000..3cc756b --- /dev/null +++ b/midiseq/DOCS/GENERAL.TXT @@ -0,0 +1,259 @@ + +Date: Tue, 14 Jan 92 23:01:16 EST +From: jeff@millie.loc.gov (Jeff Mallory) +Subject: General MIDI Level Spec + + +**** Brief Overview of Proposed General MIDI Level 1 Spec **** + + The heart of General MIDI (GM) is the _Instrument Patch Map_, shown in +Table 1 (see below). This is a list of 128 sounds, with corresponding +MIDI program numbers. Most of these are imitative sounds, though the +list includes synth sounds, ethnic instruments and a handful of sound +effects. + The sounds fall roughtly into sixteen families of eight variations +each. Grouping sounds makes it easy to re-orchestrate a piece using +similar sounds. The Instrument Map isn't the final word on musical +instruments of the world, but it's pretty complete + General MIDI also includes a _Percusssion Key Map_, show in Table 2 +(see below). This mapping derives from the Roland/Sequential mapping +used on early drum machines. As with the Instrument Map, it doesn't +cover every percussive instrument in the world, but it's more than +adequate as a basic set. + To avoid concerns with channels, GM restricts percussion to MIDI +Channel 10. Theoretically, the lower nine channels are for the +instruments, but the GM spec states that a sound module must respond +to all sixteen MIDI channels, with dynamic voice allocation and a +minimum of 24 voices. + General MIDI doesn't mention sound quality of synthesis methods. +Discussions are under way on standardizing sound parameters such as +playable range and envelope times. This will ensure that an arrangement +that relies on phrsing and balance can play back on a variety of +modules. + Other requirements for a GM sound module include response to velocity, +mod wheel, aftertouch, sustain and expression pedal, main volume and +pan, and the All Notes Off and Reset All Controllers messages. The +module also must respond to both Pitch Bend and Pitch Bend Sensitivity +(a MIDI registered parameter). The default pitch bend range is +-2 +semitones. + Middle C (C3) corresponds to MIDI key 60, and master tuning must be +adjustable. Finally, the MIDI Manufacturers Association (MMA) created a +new Universal System Exclusive message to turn General MIDI on and off +(for devices that might have "consumer" and "programmable" settings). +Table 3 (see below) summarizes these requirements. + General MIDI has room for future expansion, including additional drum +and instrument assignments and more required controllers. Also under +discussion is an "authorizing document" that would standardize things +such as channel assignments (e.g., lead on 1, bass on 2, etc.) and setup +information in a MIDI file. + +Copies of the Level 1 Specification documents for General MIDI ($5 each +at last notice) are available from the Internation MIDI Association, +5316 West 57th Street Los Angeles, CA 90056, (213) 649-6434. The first +issue of the Journal of the MMA (back issues, $15 each) contains an +article by PassPort Designs and Stanley Junglieb about General MIDI. + + +Roland's GS Standard + + When Warner New Media first proposed a General MIDI standard, most MMA +members gave it little thought. As discussions proceeded, Roland +listened and developed a sound module to meet the proposed +specification. At the same NAMM show where the MMA ratified General MIDI +Level 1, Roland showed their Sound Brush and Sound Canvas, a Standard +MIDI File player and GM-compatible sound module. + Some companies feel that General MIDI doesn't go far enough, so Roland +created a superset of General MIDI Level 1, which they call GS Standard. +It obeys all the protocols and sound maps of General MIDI and adds many +extra controllers and sounds. Some of the controllers use Unregistered +Parameter Numbers to give macro control over synth parameters such as +envelope attack and decay rates. + The new MIDI Bank Select message provides access to extra sounds +(including variations on the stock sounds and a re-creation of the MT-32 +factory patches). The programs in each bank align with the original 128 +in General MIDI's Instrument Patch Map, with eight banks housing related +families. The GS Standard includes a "fall back" system. If the Sound +Canvas receives a request for a bank/program number combination that +does not exist, it will reassign it to the master instrument in that +family. A set of Roland System Exclusive messages allows reconfiguration +and customization of the sound module. + This means that a Roland GS Standard sound module will correctly play +back any song designed for General MIDI. In addition, if the song's +creator wants to create some extra nuance, they can include the GS +Standard extensions in their sequence. None of these extensions are so +radical as to make the song unplayable on a normal GM sound module. +After all, compatibility is what MIDI - and especially General MIDI - is +all about. + Music authors interested in the GS Standard should contact Tom White +at RolandCorp USA, 7200 Dominion Circle, Los Angeles, CA 90040, (213) +685-5141. + +**** TABLE 1 - General MIDI Instrument Patch Map **** +(groups sounds into sixteen families, w/8 instruments in each family) + +Prog# Instrument Prog# Instrument + + (1-8 PIANO) (9-16 CHROM PERCUSSION) +1 Acoustic Grand 9 Celesta +2 Bright Acoustic 10 Glockenspiel +3 Electric Grand 11 Music Box +4 Honky-Tonk 12 Vibraphone +5 Electric Piano 1 13 Marimba +6 Electric Piano 2 14 Xylophone +7 Harpsichord 15 Tubular Bells +8 Clav 16 Dulcimer + + (17-24 ORGAN) (25-32 GUITAR) +17 Drawbar Organ 25 Acoustic Guitar(nylon) +18 Percussive Organ 26 Acoustic Guitar(steel) +19 Rock Organ 27 Electric Guitar(jazz) +20 Church Organ 28 Electric Guitar(clean) +21 Reed Organ 29 Electric Guitar(muted) +22 Accoridan 30 Overdriven Guitar +23 Harmonica 31 Distortion Guitar +24 Tango Accordian 32 Guitar Harmonics + + (33-40 BASS) (41-48 STRINGS) +33 Acoustic Bass 41 Violin +34 Electric Bass(finger) 42 Viola +35 Electric Bass(pick) 43 Cello +36 Fretless Bass 44 Contrabass +37 Slap Bass 1 45 Tremolo Strings +38 Slap Bass 2 46 Pizzicato Strings +39 Synth Bass 1 47 Orchestral Strings +40 Synth Bass 2 48 Timpani + + (49-56 ENSEMBLE) (57-64 BRASS) +49 String Ensemble 1 57 Trumpet +50 String Ensemble 2 58 Trombone +51 SynthStrings 1 59 Tuba +52 SynthStrings 2 60 Muted Trumpet +53 Choir Aahs 61 French Horn +54 Voice Oohs 62 Brass Section +55 Synth Voice 63 SynthBrass 1 +56 Orchestra Hit 64 SynthBrass 2 + + (65-72 REED) (73-80 PIPE) +65 Soprano Sax 73 Piccolo +66 Alto Sax 74 Flute +67 Tenor Sax 75 Recorder +68 Baritone Sax 76 Pan Flute +69 Oboe 77 Blown Bottle +70 English Horn 78 Skakuhachi +71 Bassoon 79 Whistle +72 Clarinet 80 Ocarina + + (81-88 SYNTH LEAD) (89-96 SYNTH PAD) +81 Lead 1 (square) 89 Pad 1 (new age) +82 Lead 2 (sawtooth) 90 Pad 2 (warm) +83 Lead 3 (calliope) 91 Pad 3 (polysynth) +84 Lead 4 (chiff) 92 Pad 4 (choir) +85 Lead 5 (charang) 93 Pad 5 (bowed) +86 Lead 6 (voice) 94 Pad 6 (metallic) +87 Lead 7 (fifths) 95 Pad 7 (halo) +88 Lead 8 (bass+lead) 96 Pad 8 (sweep) + + (97-104 SYNTH EFFECTS) (105-112 ETHNIC) + 97 FX 1 (rain) 105 Sitar + 98 FX 2 (soundtrack) 106 Banjo + 99 FX 3 (crystal) 107 Shamisen +100 FX 4 (atmosphere) 108 Koto +101 FX 5 (brightness) 109 Kalimba +102 FX 6 (goblins) 110 Bagpipe +103 FX 7 (echoes) 111 Fiddle +104 FX 8 (sci-fi) 112 Shanai + + (113-120 PERCUSSIVE) (121-128 SOUND EFFECTS) +113 Tinkle Bell 121 Guitar Fret Noise +114 Agogo 122 Breath Noise +115 Steel Drums 123 Seashore +116 Woodblock 124 Bird Tweet +117 Taiko Drum 125 Telephone Ring +118 Melodic Tom 126 Helicopter +119 Synth Drum 127 Applause +120 Reverse Cymbal 128 Gunshot + + +**** TABLE 2 - General MIDI Percussion Key Map **** +(assigns drum sounds to note numbers. MIDI Channel 10 is for percussion) + +MIDI Drum Sound MIDI Drum Sound +Key Key + +35 Acoustic Bass Drum 59 Ride Cymbal 2 +36 Bass Drum 1 60 Hi Bongo +37 Side Stick 61 Low Bongo +38 Acoustic Snare 62 Mute Hi Conga +39 Hand Clap 63 Open Hi Conga +40 Electric Snare 64 Low Conga +41 Low Floor Tom 65 High Timbale +42 Closed Hi-Hat 66 Low Timbale +43 High Floor Tom 67 High Agogo +44 Pedal Hi-Hat 68 Low Agogo +45 Low Tom 69 Cabasa +46 Open Hi-Hat 70 Maracas +47 Low-Mid Tom 71 Short Whistle +48 Hi-Mid Tom 72 Long Whistle +49 Crash Cymbal 1 73 Short Guiro +50 High Tom 74 Long Guiro +51 Ride Cymbal 1 75 Claves +52 Chinese Cymbal 76 Hi Wood Block +53 Ride Bell 77 Low Wood Block +54 Tambourine 78 Mute Cuica +55 Splash Cymbal 79 Open Cuica +56 Cowbell 80 Mute Triangle +57 Crash Cymbal 2 81 Open Triangle +58 Vibraslap + + +**** TABLE 3 - General MIDI minimum sound module specs **** + +Voices: +A minimum of either 24 fully dynamically allocated voices +available simultaneously for both melodic and percussive sounds or 16 +dynamically allocated voices for melody plus eight for percussion. + +Channels: +General MIDI mode supports all sixteen MIDI channels. Each channel can +play a variable number of voices (polyphony). Each channel can play a +different instrument (timbre). Keybased Percussion is always on +Channel 10. + +Instruments: +A minimum of sixteen different timbres playing various instrument +sounds. A minimum of 128 preset for Intruments (MIDI program numbers). + +Note on/Note off: +Octabe Registration: Middle C(C3) = MIDI key 60. All Voices including +percussion respond to velocity. + +Controllers: +Controller # Description + 1 Modulation + 7 Main Volume + 10 Pan + 11 Expression + 64 Sustain +121 Reset All Controllers +123 All Notes Off + +Registered Description +Parameter # +0 Pitch Bend Sensitivity +1 Fine Tuning +2 Coarse Tuning + +Additional Channel Messages: +Channel Pressure (Aftertouch) +Pitch Bend + +Power-Up Defaults: +Pitch Bend Amount = 0 +Pitch Bend Sensitivity = +-2 semitones +Volume = 90 +All Other Controllers = reset + +(after Electronic Musician, 8/91 issue) + + + diff --git a/midiseq/DOCS/MIDI-ARC.TXT b/midiseq/DOCS/MIDI-ARC.TXT new file mode 100644 index 0000000..7333e53 --- /dev/null +++ b/midiseq/DOCS/MIDI-ARC.TXT @@ -0,0 +1,342 @@ +--------------------------------------------- +Version: $Id: archives,v 1.121 1995/02/24 14:44:20 piet Exp $ + +Note: the latest version of this file is available from the ftp.cs.ruu.nl +archive as MIDI/DOC/archives (see below how to access the archive) and +on the various news.answers archives. This archive also contains a lot of +midi music and programs. Mirrors of the MIDI/SONGS directory or the whole +archive can be found on the following sites: +ftp.cis.nctu.edu.tw /MIDI/SONGS/ +ftp.pu-toyama.ac.jp /pub/ftpmail/ftp.cs.ruu.nl/pub/MIDI/SONGS +ftp.monash.edu.au /pub/midi/SONGS +ftp.funet.fi /pub/sounds/midi +ftp.ibp.fr /pub/midi +------------------------------------------------------------------------ +A large collection of midifiles can be found on wuarchive.wustl.edu, in +/systems/ibmpc/ultrasound/sound/midi/files. Some of these files are +specific for the Gravis Ultrasound card but most are also usable for other +synthesizers. + +There is an FTP archive at ftp.ucsd.edu [128.54.16.7] . It contains a.o. MIDI +files, patches and a few programs. See the directory 'midi'. This archive +looks rather out of date, by the way. + +There is a demo of Symbolic Composer at media-lab.media.mit.edu [18.85.0.2] +(directory 'music/midi') and on sumex.stanford.edu [171.65.4.3] in +/info-mac/Application/ (symbolic-composer-*). It can probably also be found +on other info-mac archives. More Symbolic Composer stuff can be obtained +from Fokke de Boer by e-mail to Fokke.de.Boer@rivm.nl a message with Subject: +retrieve directory and following the instructions that you will receive. + +atari.archive.umich.edu [141.211.120.11] contains Atari stuff in directory +'/atari/Music'. + +scam.berkeley.edu [128.32.138.1] contains netjam submissions on midifiles +in directory '/pub/misc/netjam/submissions/'. + +Sites for MIDI Sample Dump Standard programs and samples: +alf.uib.no [129.177.30.3], directory /pub/sds +sweaty.palm.cri.nz [161.66.1.11], directory sds + +wagner.musicnet.ua.edu [130.160.156.75] is a site that just started to +collect music stuff. It has patches for Roland JV-80/880/1000 in directory +/pub/music/patches/jv80. + +oak.oakland.edu [141.210.10.117] has EPS/EPS-16+/ASR samples in +/pub/eps/samples. More EPS info is in pub/eps/docs/. There are some +programs for the EPS in /pub/eps/utils (Atari ST, Amiga, MAC, MSDOS). See +pub/eps/docs/utils for info. Feel free to access oak.oakland.edu using +Gopher (gopher.acs.oakland.edu, port 70) or WWW (Mosaic/Lynx URL: +http://www.acs.oakland.edu). + +Ftp sites for the Kurzweil K2000: + 1) ftp.uwp.edu:/pub/music/lists/kurzweil (maintained by jbuckman@aas.org) + 2) bach.nevada.edu:/pub/k2000 (maintained by johann@nevada.edu) + +bach.nevada.edu also contains christian music midi files in /pub/midi. + +qiclab.scn.rain.com in /pub/music contains various conversion programs. + +Roland Samplers: +There is an FTP archive that includes introductory information, useful +utilities (read Roland disks on your computer), archives of the mailing +list, and some samples. The archive is on lotus.UWaterloo.ca in the +pub/sgroup directory. + +There also is a ftp-site with TX16W samples, maintained by one of the TX16W +list-members. FTP to ftp.informatik.uni-freiburg.de [132.230.150.1], the +samples are in the directory "pub/sounds/tx16w/samples". There are also +back issues of the TX-16W newsletter in pub/sounds/tx16w/mail. A WWW entry +is http://ls7-www.informatik.uni-dortmund.de/html/tx16w.html + +Archives of the Music-Research Digest can be found at +cattell.psych.upenn.edu [12128.91.2.173] in directory pub/Music.Research + +impaqt1.mem.drexel.edu [129.25.10.1] has a couple of msdos files in +'pub/files/ibm/midi' + +There is an EMAX (I and II) FTP site at sweaty.palm.cri.nz (161.66.1.11) +some samples, FAQ, archives of mailing list and some software to allow +sample interchange for PC compatibles +---------------------------------------------------------------------------- +Cakewalk files can be found at ftp.funet.fi [128.214.6.100] in +'pub/msdos/sound/cakewalk' and also on ucsd.edu (see above). More cakewalk +stuff (including archives of the Cakewalk mailing list) can be found at: +ftp.cs.colorado.edu:/users/mccreary/archive/cakewalk or on WWW as +http://www.cs.colorado.edu/~mccreary/archive/cakewalk +There is a VFX archive in the parallel directory mccreary/archive/vfx. +Another site for Cakewalk is mort.isvr.soton.ac.uk:/pub/pc/cakewalk (ftp) or +http://www.isvr.soton.ac.uk/People/ccb/Cakewalk (WWW) +---------------------------------------------------------------------------- +There are several MIDI programs for MS Windows in +ftp.cica.indiana.edu:pub/pc/win3/sounds. + +OS/2 programs can be found on ftp-os2.cdrom.com [192.153.46.2]. Directories +/pub/os2/2_x/mmedia and /pub/os2/2_1/mmedia contain the bulk of the +MIDI-related files for OS/2. (There is a specific ftp site for OS/2 +multimedia in the formative stages right now, but it is not yet in +operation.) For a full index of OS/2 files at that site, retrieve +/pub/os2/00index.txt. Submissions may be placed in /pub/os2/incoming. + +mac.archive.umich.edu [141.211.165.41] has a Macintosh midi archive in +mac/sound/midi + +Other Macintosh sites: See the file Mac-archives in this directory. + +An FTP site for predominantly D-70-related files: /pub/D70 on +kilroy.jpl.nasa.gov. + +ftp.neuroinformatik.ruhr-uni-bochum.de in directory +/pub/outgoing/heja/sy-list there are several infos/sounds/programs of +interest for Yamaha SY users (this is the "inofficial" ftp-site of the +sy-list). IMPORTANT NOTE: go directly to the above mentioned directory! +Access via WWW: +http://www.neuroinformatik.ruhr-uni-bochum.de/ini/PEOPLE/heja/sy-list.html + +The site contains mostly original material and is not a mirror of the big +music archives. + +ftp.ecn.nl:/pub/RP-1: DIGITECH RP-1 MIDI guitar effect pedals and some +other midi stuff. + +Apple 2 MIDI Synth archives can be found on cco.caltech.edu [131.215.6.10] +in the pub/apple2/music/synthlab/ directory. They are mirrored on +grind.isca.uiowa.edu [128.255.21.233] + +Amiga users can get some things by mail from mrcserv@janus.mtroyal.ab.ca +(send a HELP message first) + +For amiga see also the aminet sites: + +litamiga.epfl.ch 128.178.151.32 +ftp.luth.se 130.240.18.2 +ftp.uni-kl.de 131.246.9.95 +ftp.uni-erlangen.de 131.188.1.43 +ftp.cs.tu-berlin.de 130.149.17.7 +ftp.uni-paderborn.de 131.234.2.32 +ftp.wustl.edu 128.252.135.4 +ftp.cdrom.com 192.153.46.2 +merlin.etsu.edu 192.43.199.20 + +There is a listserv containing e-music related stuff at American +University. +Send a message to listserv@auvm.bitnet containing the line: +get emusic filelist +------------------------------------------------------------------------ +IRCAM: + IRCAM operates an anonymous ftp site, ftp.ircam.fr, with programs and + information on music, DSP, multimedia, infosystems, networking, etc., + for unix platforms, macintoshes and PC. + +(amongst others:) +/pub/ + music/ Computer music software and info + databases/ Music databases + doc/ Documentation + FAQ/ FAQ about audio, dsp, etc... + MIDI/ MIDI standard definition + programs/ Repository of public domain computer music programs + snd/ +It also has a WWW server on similar resources, http://www.ircam.fr. +This includes a MIDI archive (programs, sounds, patches, docs) +------------------------------------------------------------------------ +Computer Music Journal Internet Archive and World-Wide Web Home Page: + +mitpress.mit.edu:/pub/Computer-Music-Journal and +ccrma-ftp.stanford.edu:/pub/Publications/cmj + +Tables of contents, abstracts, and editor's notes of several volumes of +CMJ. + +World-Wide Web (WWW) home page in the file CMJ.html (e.g. URL +ftp://mitpress.mit.edu/pub/Computer-Music-Journal/CMJ.html) +------------------------------------------------------------------------ +ftp.mcc.ac.uk /pub/cubase Cubase archive. Contains Atari, Mac and + MSWindows demos +------------------------------------------------------------------------ +ftp.waldorf-gmbh.de: A site with information, patches etc. of Waldorf +products, contains also a lot of other Midi stuff. Also reachable by email +to archive-server@waldorf-gmbh.de (send a HELP message). See also mailing +list section below. +------------------------------------------------------------------------ +You'll find some NoiseTracker/SoundTracker MOD files, and Soundblaster +things on the following FTP sites: + + Garbo.Uwasa.fi /pc/sb and /pc/music + Wuarchive.Wustl.Edu + Simtel20.Army.Mil + ftp.funet.fi /pub/amiga/audio + /pub/atari/sound + /pub/unix/sound + /pub/msdos/sound + ux1.cso.uiuc.edu /amiga/mirror/mods + ftp.brad.ac.uk /misc/mods /incoming/mods + ftp.uni-kl.de /pub/amiga/mods + /pub/amiga/ianet/mods +------------------------------------------------------------------------ +/ftp.eng.ufl.edu:/pub/msdos/demos/music/ contains several music files, +demos etc. (hardly any MIDI, but mostly MODs etc). +------------------------------------------------------------------------ +The demo version of QSEQ, a complete sequencer for MSDOS/SoundBlaster, is +available by email automatic server. Just send a message to +qseqmail@h2o.cad.cea.fr with the following line in the body of the message: +sendqseqto or sendhelpto + , if you just want an help file about the +mailer and QSEQ. QSEQ is also available on SIMTEL mirrors +(oak.oakland.edu, etc...). And from +ftp.cs.ruu.nl:/pub/MIDI/PROGRAMS/MSDOS. +------------------------------------------------------------------------- +ella.mills.edu in /ccm/tuning contains files about alternative tunings, +a.o. back issues of the Alternate Tuning mailing list, software to put +synths in alternate tunings and a bibliography on the subject. You can also +acess this archive by sending a message to listproc@varese.mills.edu. See +the file /ccm/README for more info about this archive. +------------------------------------------------------------------------- +ftp.und.ac.za (University of Natal, Durban) contains midifiles and programs +for the Sound Canvas and MT-32 in directory: /pub/pc/midi/ +------------------------------------------------------------------------- +The EMUSIC-L mailing list (see below) archives can be found on the WWW +http://sunsite.unc.edu/mcmahon/emusic-l/welcome.html. Ftp access will be +available soon. +------------------------------------------------------------------------ A +ftp.mcc.ac.uk contains the archives of the Emagic Logic mailing list in +pub/emagic/ListArchive and other MIDI stuff in pub/MIDIMISC. +There is also a WWW page on http://www.mcc.ac.uk/~emagic/emagic_page.html +------------------------------------------------------------------------ +Sound Canvas User's Group WWW Homepage - +http://www.eeb.ele.tue.nl/midi/scgroup/index.html +------------------------------------------------------------------------ +WWW archive of the Korg Wavestation Mailing List can be found at: +http://anjovis.tky.hut.fi/~ws/ +------------------------------------------------------------------------ +There is a large collection of patches for the Korg DW/EX8000 at +loose.apana.org.au in the directory pub/dw8000 +------------------------------------------------------------------------ +Korg X3-FTP - ftp.netcom.com in /pub/jo/jonin/midi/x3 + The Korg X3 ftp site for patches and various programs relating + to and supporting the Korg X3. (editors, utilitys, cakewalk + ini settings, documents, etc..) +------------------------------------------------------------------------ +/musie.phlab.missouri.edu:/pub/korg/ +contains info related to Korg electronic music products, +particularly the "0" (01/W, 03, 05) and X synthesizers. +Anon ftp upload is available in subdirectory submissions. +WWW access is via http://musie.phlab.missouri.edu/pub/korg/ +------------------------------------------------------------------------ +SHARC Timbre Database: ftp.ep.susx.ac.uk:pub/sandell (Web users: +ftp://ftp.ep.susx.ac.uk/pub/sandell/README.html). This is a database with +timbre information of musical instruments. +------------------------------------------------------------------------ +heinous.isca.uiowa.edu://kahless/ftp/pub: MAX programming language (for the +Macintosh): subdir max. Algorithmic composition: subdir algo-comp. +------------------------------------------------------------------------ +WWW Archives of Classical Midi Sequences: http://www.hk.net/~prs/midi.html +------------------------------------------------------------------------ +MAILING LISTS: + +NOTE: The adresses mentioned are those where you can subscribe or get info +about the list. The lists themselves usually have the name without the +-request if that part is present, or LISTNAME@HOST if the command to +subscribe is SUBSCRIBE LISTNAME sent to LISTSERV@HOST. +If appears in the following it has to be replaced by your +real name (like Piet van Oostrum for me). + +Algorithmic composition majordom@heinous.isca.uiowa.edu + message: subscribe ALGO-COMP +Alternate Tunings LISTPROC@VARESE.MILLS.EDU + message: A blank line followed by: + SUBSCRIBE TUNING + (Greg Higgs at higgs@mills.edu) +Analogue Heaven analogue-request@magnus.acs.ohio-state.edu +Cakewalk LISTSERV@LISTS.COLORADO.EDU + message: SUBS CAKEWALK +Casio synths casio-request@cadsi.com +Cubase cubase-users-request@mcc.ac.uk +DIGITECH RP-1/RP-10 MAILSERV@ECN.NL (Marcel Bernards ) + Guitar effect users message: subscribe RP-1-L +Finale LISTSERV@SHSU.edu + normal: message: SUBSCRIBE Finale "Your Full Name in Quotes" + digest: SUBSCRIBE Finale-Digest "Your Full Name in Quotes" +DX-7 xeno@iastate.edu (Gary L Snethen) +EMU Emax emax-request@flobalob.hpl.hp.com +K2000 LISTSERV@jhuvm.hcf.jhu.edu + message: SUBSCRIBE K2000 +Korg 01/W korget-request@sonata.fipnet.fi + 'ADD
' in the message body +Korg X3 majordomo@io.rdc.puc-rio.br + message: subscribe x3-list +MAX Interactive music/ listserv@vm1.mcgill.ca +multimedia environment message: SUBSCRIBE MAX +netjam netjam-request@xcf.berkeley.edu + with Subject: request for info +EMagic's Logic automatic: majordomo@mcc.ac.uk + (formerly Notator) message: subscribe logic-users +For its digest: subscribe logic-users-digest + human: logic-users-request@mcc.ac.uk + logic-users-digest-request@mcc.ac.uk +Ensoniq VFX vfx-request@digibd.com +EPS eps-request@oak.oakland.edu + message: subscribe +Roland Samplers sgroup-request@lotus.UWaterloo.ca +Roland D-70 cyamamot@kilroy.Jpl.Nasa.Gov (Clifford Yamamoto) +Roland JV-80/880 jv80-request@burner.com + message: #SUBSCRIBE + +Roland JV-1080 majordomo@teleport.com + message: subscribe jv-1080 +Roland U20/U220 now a Usenet newsgroup alt.music.synth.roland.u20 +TX16W majordomo@lists.eunet.fi + message: subscribe tx16w +Yamaha SY sy-request@chorus.fr +EMUSIC-L LISTSERV@AUVM.AMERICAN.EDU (LISTSERV@AUVM.BITNET) +(Discussions on message: SUBS EMUSIC-L +electronic Music) Digest form: SUBS EMUSIC-D +Sound Canvas FAQ - scug-faq@preference.north.net + User's Group Music - scug-music@preference.north.net +SYNTH-L LISTSERV@AUVM.AMERICAN.EDU (LISTSERV@AUVM.BITNET) + message: SUBS SYNTH-L +SQ-x/KS-32 ks32-request@cygnus.com +Waldorf (+other) users user-forum-request@waldorf-gmbh.de + Subject: subscribe +Korg Wavestation listserver@otax.tky.hut.fi + message: SUBSCRIBE WAVESTATION Your Full Name +Women's issues in music LISTSERV@IUBVM.UCS.INDIANA.EDU (LISTSERV@IUBVM.BITNET) + message: SUBSCRIBE WIML-L +------------------------------------------------------------------------ +NOTE: I am setting up a midi archive on our machine, so if you have info +about PD stuff (programs and midifiles) please share with me. And if you +want to share some of your own things that will be appreciated. +The archive is available with ftp from ftp.cs.ruu.nl [131.211.80.17], +directory MIDI. Also by a mail-server - send mail to mail-server@cs.ruu.nl +with the following contents: +BEGIN +PATH +HELP +send MIDI/INDEX +END +Note: specify a correct address (e.g. user@host.univ.edu or user@host.BITNET) +------------------------------------------------------------------------ +Piet* van Oostrum, Dept of Computer Science, Utrecht University, (*`Pete') +Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands. +Telephone: +31 30 531806 Telefax: +31 30 513791 Internet: piet@cs.ruu.nl +PGP public key by finger or WWW http://www.cs.ruu.nl/~piet diff --git a/midiseq/DOCS/MIDI-BBS.TXT b/midiseq/DOCS/MIDI-BBS.TXT new file mode 100644 index 0000000..519fbec --- /dev/null +++ b/midiseq/DOCS/MIDI-BBS.TXT @@ -0,0 +1,15 @@ + +BBS Name City Number +------------------------------------------------------------------- +Joel Sampson's Engineering Dallas, TX 214-328-6909 +San Francisco MIDI Users San Francisco, CA 415-771-1788 +Video-Pro Virginia 703-455-1873 +Yamaha C1 BBS Los Angeles, CA 714-522-9464 +Sound Management Mundelien, IL Dave Nosek SNDMGMT 708-949-MIDI (708)949-6434 +MIDI User's Group St. Louis, MO Rik Brown TRAVEL 314-973-4073 +Union Lake Millville, NJ George Cuccia UNION 609-327-5553 +Music Quest Dallas, TX Paul Messick MQUEST 214-881-7311 +HyperLinc West Albany, CA Jake Essl HYPER 510-524-9330 O +H-O-T BBS Nashville, TN Larry Reeves HOT 615-890-8715 +PGH-MIDI Music Pittsburg, PA Art Doud MUSIC 412-882-3703 + diff --git a/midiseq/DOCS/MIDI-CAB.TXT b/midiseq/DOCS/MIDI-CAB.TXT new file mode 100644 index 0000000..1696eb2 --- /dev/null +++ b/midiseq/DOCS/MIDI-CAB.TXT @@ -0,0 +1,132 @@ +From: ttl@aura.cs.wisc.edu (Tony Laundrie) +Subject: Re: Radio Shack Secret? (Midi cables) +Date: 8 Aug 91 17:38:55 GMT + +> (From Bob McQueer's MIDI Spec Primer) +> +> The standard connectors used for MIDI are 5 pin DIN. Separate sockets +> are used for input and output, clearly marked on a given device. The +> spec. gives 50 feet as the maximum cable length. Cables are to be +> shielded twisted pair, with the shield connecting pin 2 at both ends. +> The pair is pins 4 and 5, pins 1 and 3 being unconnected: +> +> 2 +> 5 4 +> 3 1 + +If you buy a generic cable, it probably looks like: + + /\ ################# /\ + 1 -|------#################---|------ 1 + | | ################# | | + 2 -|------#################---|------ 2 + | | ################# | | + 3 -|------#################---|------ 3 + | | ################# | | + 4 -|------#################---|------ 4 + | | ################# | | + 5 -|------#################---|----- 5 + | | ################# | | + \/ ################# \/ + \___/ SHIELD \___/ Metal Shell of DIN Connector + +This probably works, but it might be electrically noisy, and perhaps not +reliable for long distances. If you make your own cables with 2-conductor +shielded wire as described in the SPEC, do it as shown below: + + /\ /\ + /\ / ################# \ /\ + 1 -|- | | ################# | | ----- 1 + | | | ################# | | | + 2 -|-----/ ################# \--|------ 2 + | | ################# | | + 3 -|- | ################# | ----- 3 + | | ################# | | + 4 -|----------#################-------|------ 4 + | | ################# | | + 5 -|----------#################-------|----- 5 + | | ################# | | + \/ ################# \/ + \_ SHIELD _/ Metal shell of DIN Connector + +Connect the wire shield to pin 2, and connect pins 4 and 5 with the other +wires. Do NOT connect the metal shell of the DIN connector to the wire +shield (pin 2) -- I had pin 2 shorted with the shell at first and that +didn't work with my setup. + + ttl@cs.wisc.edu + +From: janin@v785.stanley.co.jp (chan" Janin) +Subject: Re: MIDI DIN connector pin-out needed +Date: 7 Jan 92 10:18:06 GMT + +************************************************************************ +* Please Please, Refrain from "Email"-ing me... Look at my Signature ! * +************************************************************************ + +In article <311@ittc.wec.com> simmons@ittc.wec.com (Gary Simmons) writes: +>A friend got a Soundblaster for Xmas and wants to make his own cable +>to go between the 15 pin connector on the SB card to a MIDI connector +>on the other. What pins do what on the MIDI end? I remember a bit of +>discussion on this a while back, but didn't save any of it... +> +>Thanks, +> +>Garry Simmons +>simmons@ittc.wec.com + +I hope nodoby replied you before me... + +This is the TRUE pin assignment for MIDI plugs. +I know it "by heart" because I used to make my own interfaces +for my computers... + +MIDI IN : 1- n.c. + 4- anode of optocoupler + 2- n.c. <<<--- !!!! Different for MIDI OUT + 5- cathode of optocoupler + 3- n.c. + +MIDI OUT/THRU: 1- n.c. + 4- +5v thru resistor + 2- local ground + 5- TTL open collector ouput + 3- n.c. + +The pin numbers are usually printed into the plastic of the plug, +in that order (or the reversed one). + +Don't connect MIDI IN pin 2... it preserves OPTOISOLATION from +MIDI OUT device to MIDI IN device. + +To make your own MIDI cable, wire pin 4 to 4, pin 5 to 5, pin 2 to 2 +and to the shield of your cable. + +------------------------------------------------------------------------ +Pascal JANIN -Amiga & Anime Addict Forever | "Buki! Buki!" Pi-chan says +< STANLEY ELECTRIC CO. LTD, R&D LAB 71G > | // My 1st computer: DAI +< Fax: 81+ 45-9110007 (045-... from Japan> | \ // My current 2nd:Amiga +*** I can r/w E-mail ONLY inside Japan *** | \X/ ...ONLY the bests !! +*** Sorry, you'd fax or use "F" option *** | Discard all Pee-Cee users ! +------------------------------------------------------------------------ + +From: smill@polari.online.com +Subject: Re: Now what? (MIDI) + +As stated in the MIDI 1.0 Spec: + + "The cable shall be twisted pair, with the shield connected to +pin 2 at both ends." + ^^^^^^^^^^^^ + + The ground loop problem is dealt with in the fact that MIDI +jacks on instruments are specified as pin 2 (ground) being connected +only at the transmitting ends, not at receiving end. This allows cables +to be used in any situation, with the ground connection taken care of +in the hardware specification. + +-- +Steven M. Miller "The history of music evolution is +smill@polari.online.com not the history of nice guys" + -- Anthony Braxton +Electronic Music Coordinator - Cornish College of the Arts, Seattle WA diff --git a/midiseq/DOCS/MIDI-INT.TXT b/midiseq/DOCS/MIDI-INT.TXT new file mode 100644 index 0000000..19a65cb --- /dev/null +++ b/midiseq/DOCS/MIDI-INT.TXT @@ -0,0 +1,360 @@ + + HOW MUCH FOR JUST THE MIDI? + +By Eric Lipscomb (BITNET: LIPS@UNTVAX). This article appeared in the +October 1989 issue of North Texas Computing Center Newsletter, +"Benchmarks". + + Computer retailers are hearing about it. Music store sales +people are buying and selling it. Musicians and students are +talking about it. Professional writers are publishing articles +about it. Entire magazines are devoted to it. Students at the +Massachusetts Institute of Technology are receiving large grants +to research it. Joe "Keys" Manzotti uses it when he plays with his +band at the Holiday Inn on weekends. Just what IS this MIDI thing +anyway? + + MIDI stands for Musical Instrument Digital Interface and has +been the rage among electronic musicians throughout its six year +existence. It is a powerful tool for composers and teachers alike. +It allows musicians to be more creative on stage and in the studio. +It allows composers to write music that no human could ever +perform. But it is NOT a tangible object, a thing to be had. MIDI +is a communications protocol that allows electronic musical +instruments to interact with each other. + + + A Method, Not An Object + + + All too often I have seen misinformed customers browsing +through a music store: "Where do you keep your MIDIs?" "I'd like +to get a MIDI for my home computer." "I need to get two MIDIs so +they can talk to each other, right?" Explaining to customers that +they cannot just get a MIDI becomes frustrating to the salesman. +Fortunately, the average consumer is learning more about the +concept of MIDI through articles such as this one. To have a +complete understanding of how MIDI works, though, one should learn +its history. + + +The Saga of MIDI + + + The combined advances and cost-efficiency in synthesizer +technology caught the music world by storm. At times, a musician +could not get a new synthesizer home before it had been outdated +by a new product. One major factor in the increased popularity in +synthesizers, and the increased push for research and design of +these units, was the development of new sound generation methods. +Musicians were creating new and different sounds worldwide. +Eventually, the musical world began to recognize the synthesizer +as a legitimate musical instrument. + + Musicians were physically limited, though, because they had +only two hands. Popular and avant-garde performers alike desired +to "layer" their new sound creations, to play two sounds together +to create a "larger" sound. Though this was possible to some +extent in a multi-track recording studio, layering could not be +realized on the road. A few synthesizer design technicians from +different manufacturers then got together to discuss an idea they +shared. Surely, they said, there had to be a way to play one +keyboard and have another one sound simultaneously. They jotted +a few notes, considered a few options, and scuttled back to their +design labs to create this communication method. + + They revealed their results at the first North American Music +Manufacturers show in Los Angeles in 1983. The simple +demonstration connected two synthesizers, not manufactured by the +same company, with two cables. A representative from one company +then played one of the synthesizers while an amazed audience heard +both sound. The process was then reversed to demonstrate the +two-way nature of the communication. Other variations were +illustrated, and the rest is music history. + + +The Method of MIDI + + + Much in the same way that two computers communicate via +modems, two synthesizers communicate via MIDI. The information +exchanged between two MIDI devices is musical in nature. MIDI +information tells a synthesizer, in its most basic mode, when to +start and stop playing a specific note. Other information shared +includes the volume and modulation of the note, if any. MIDI +information can also be more hardware specific. It can tell a +synthesizer to change sounds, master volume, modulation devices, +and even how to receive information. In more advanced uses, MIDI +information can to indicate the starting and stopping points of a +song or the metric position within a song. More recent +applications include using the interface between computers and +synthesizers to edit and store sound information for the +synthesizer on the computer. + + The basis for MIDI communication is the byte. Through a +combination of bytes a vast amount of information can be +transferred. Each MIDI command has a specific byte sequence. The +first byte is the status byte, which tells the MIDI device what +function to perform. Encoded in the status byte is the MIDI +channel. MIDI operates on 16 different channels, numbered 0 +through 15. MIDI units will accept or ignore a status byte +depending on what channel the machine is set to receive. Only the +status byte has the MIDI channel number encoded. All other bytes +are assumed to be on the channel indicated by the status byte until +another status byte is received. + + Some of these functions indicated in the status byte are Note +On, Note Off, System Exclusive (SysEx), Patch Change, and so on. +Depending on the status byte, a number of different byte patterns +will follow. The Note On status byte tells the MIDI device to +begin sounding a note. Two additional bytes are required, a pitch +byte, which tells the MIDI device which note to play, and a +velocity byte, which tells the device how loud to play the note. +Even though not all MIDI devices recognize the velocity byte, it +is still required to complete the Note On transmission. + + The command to stop playing a note is not part of the Note On +command; instead there is a separate Note Off command. This +command also requires two additional bytes with the same functions +as the Note On byte. Most people are confused at first by this +approach to Note On and Note Off, but after further thought they +realize the necessity of the structure. + + Another important status byte is the Patch Change byte. This +requires only one additional byte: the number corresponding to the +program number on the synthesizer. The patch number information +is different for each synthesizer, and the standards have been set +by the International MIDI Association (IMA). Channel selection is +extremely helpful when sending Patch Change commands to a +synthesizer. + + The SysEx status byte is the most powerful and least +understood of all the status bytes because it can instigate a +variety of functions. Briefly, the SysEx byte requires at least +three additional bytes. The first is a manufacturer's ID number +or timing byte, the second is a data format or function byte, and +the third is generally an "end of transmission" (EOX) byte. There +are a number of books that have been written on the topic of System +Exclusive messages, so this article will not deal with it further. + + + The INs and OUTs of MIDI + + + The closest most people ever care to get to the heart of the +MIDI interface are the three 5-pin ports found on the back of every +MIDI unit. Labeled IN, OUT, and THRU, these ports control all of +the information routing in a MIDI system. The IN port accepts MIDI +data, data coming "in" to the unit from an external source. This +is the data that controls the sound generators of the synthesizer. +The OUT port sends MIDI data "out" to the rest of the MIDI setup. +This data results from activity of the synthesizer, such as key +presses, patch changes, and so on. The THRU port also sends data +out to the MIDI system, but not in the same manner as the OUT port. +The data coming from the THRU port is an exact copy of the data +received at the synthesizer's IN port. There is no change made to +the data from the time it arrives at the IN port to the time is +leaves the THRU port (which is a very, VERY small amount of time). + + MIDI makes use of special five conductor cable to connect the +synthesizer ports. Curiously though, only three of the conductors +are actually used. Data is carried through the cable on pins 1 and +3, and pin 2 is shielded and connected to common. Pins 4 and 5 +remain unused. Not just any cable will suffice for the exactness +of the MIDI system, either. MIDI cable is specially grounded and +shielded to ensure efficient data transmission. This means that +MIDI cable is a little more expensive than standard 5-conductor +cable, but reliable data transmission is absolutely necessary for +MIDI. + + The length of the cable is critical as well. IMA +specifications suggest an absolute maximum cable length of 50 feet +because of the method of data transmission through the cable. The +entire length of a MIDI chain (discussed below) is unlimited, +however, provided that none of the links are longer than 50 feet. +The optimal maximum length for cable is about 20 feet, and most +commercially manufactured cable comes in five to ten foot lengths. + + +MIDI Chains and Loops + + + A MIDI chain describes a series of one-way connections in a +MIDI setup. The elemental chain is a single-link chain. The MIDI +OUT port of one device is connected to the MIDI IN port of a +second. In this configuration, a key pressed on the first unit +will cause both units to sound. Pressing a key on the second unit, +however, only causes the second unit to sound. Many instruments +may be chained together using a series of single links to connect +the units. In this case, the OUT of the first unit is connected +to the second, the THRU of the second is connected to the IN of a +third, and so on. If all the units are set to receive on the same +channel, pressing a key on the first one will cause all the units +to sound. Pressing a key on any of the other units will only +activate the sound of that unit. + + A MIDI loop is a special configuration of a MIDI chain. The +single element loop is made of two interconnecting links. This was +the configuration used in the debut of the MIDI system. The OUT +port of the first unit is connected to the IN port of the second, +and the OUT port of the second is connected to the IN port of the +first. In this case, as described earlier, a key pressed on either +unit causes both units to sound, provided they are on the same +channel. A MIDI feedback loop does NOT exist here, as the data +going into the second unit from the first is not duplicated in the +OUT port of the second going back into the first. Here, we have +two one-way links connected, not a multi-link chain. + + MIDI loops connecting several devices using all three ports +can become complex very quickly. As a brief example, imagine four +synthesizers named A, B, C, and D for convenience. A's OUT is +connected to B's IN and consequently to C's IN via B's THRU. B's +OUT connects to D's IN, whose THRU connects to A's IN. A key +pressed on A sounds A, B and C. A key pressed on C sounds C and +C alone. A key pressed on B sounds B, D, and A, while a key +pressed on D sounds D only. C does not sound when B is pressed +because there is no direct connection between B and C, and B's +note, which does route through D, does not route through A into C +because A's THRU is not connected to C, or anything else for that +matter. A note played on A does not sound on D for the same +reason. You get the idea. + + + Computers and MIDI + + + Computer manufacturers soon realized that the computer would +be a fantastic tool for MIDI, since MIDI devices and computers +speak the same language. Since the MIDI data transmission rate +(31.5 kBaud) is different from ANY computer data rate, +manufacturers had to design a MIDI interface to allow the computer +to talk at MIDI's speed. Apple Computers, with the Macintosh and +Apple ][ series, and Commodore were the first companies to jump on +the MIDI computer bandwagon [pun intended]. Roland designed an +interface for the IBM series of compatible computers a few years +later, and Atari designed a completely new computer, the ST series, +with fully operable MIDI ports built in. Today, there are many +different interfaces available for almost all types of computer +system. + + As great as the number of available interfaces may be, the +availability of software packages is almost beyond belief. +Virtually everything that can be done via MIDI has a software +package to do it. First came the sequencers. Based on a hardware +device that simply recorded and replayed MIDI data, the software +sequencer allowed the computer to record, store, replay, and edit +MIDI data into "songs." Though the first sequencers were somewhat +primitive, the packages available today provide very thorough +editing capabilities as well as intricate synchronization methods, +such as MTC (MIDI Time Code) and SMPTE. + + Various patch editors and librarians are also available for +computers. These programs allow the user to edit sounds away from +the synthesizer and often in a much friendlier environment than +what the synthesizer interface offers. The more advanced +librarians permit groups or banks of sounds to be edited, stored +on disk, or moved back and forth from the synthesizer's memory. +They also allow for rearranging sounds within banks or groups of +banks for customized libraries. These programs are generally small +and can be incorporated into some sequencing packages for ease of +use. On the other hand, each synthesizer requires a different +editor/librarian since internal data formats are unique for each. +Some packages offer editor groups for a specific manufacturer's +line as some of the internal data structure may be similar between +the units. But, there is not yet a universal librarian that covers +all makes and models of sound modules; it would just be too large. + + +Computers in MIDI Chains + + + Basically, the computer functions the same as any other unit +in a MIDI chain or loop. Most interfaces have the same three ports +as other MIDI devices. The computer's main job in a chain, though, +would be as a MIDI data driver, meaning it would supply the MIDI +data for the rest of the chain. Very rarely is a device connected +to the IN port of a computer MIDI interface except to provide input +for synchronization signals or data to edit. Even more rare is a +connection to the computer's THRU port, although it can be used. + + In this scope the implementation of MIDI channels is most +effective. The computer can send data out on all 16 MIDI channels +simultaneously. For example, sixteen MIDI devices, each set up for +a different MIDI channel, could be connected to the computer. Each +unit could be playing a separate line in a song from the sequencer, +creating an electronic orchestra. This implementation is being +used more and more in today's music scenes: the recording studio, +major orchestras, opera, and film scoring. + + + The Future of MIDI + + + The MIDI specifications set out by the initial design team +have not changed drastically since its creation. The current data +structure is as it was originally designed, the only exception +being that some of the initial status bytes were not initially +defined. As it stands, the architecture of MIDI does not allow for +any further expansion. To enhance MIDI further would take a +complete redesign of the system. The IMA has been discussing new +MIDI designs, but industry and the general public will prevent any +real action from taking place because the new design would not be +backwards compatible: none of the current MIDI hardware would +operate in the new environment. + + But MIDI does continue to hold promise. The extent of the +SysEx applications has not yet been fully realized. MIDI is by no +means about to become outdated or abandoned by the musical world, +and as technology becomes more and more affordable, a greater +number of non-technical people will invest in their own personal +MIDI systems. There may in fact be a day where the average +American family has a home, two cars, three kids, and their own +MIDI in the garage. + + + References + +Arnell, Billy. "McScope: System." Music, Computers, and Software + April 1988: 58-60. + +Conger, Jim. C Programming for MIDI. Redwood City: M & T Books, + 1988. + +Cooper, Jim. "Mind Over MIDI: Information Sources and + System-exclusive Data Formats." Keyboard October, 1986: + 110-11. + +Enders, Bernd and Wolfgang Klemme. MIDI and Sound Book for the + Atari ST. Redwood City: M & T Books, 1989. + +Matzkin, Jonathan. "A MIDI Musical Offering." PC Magazine 29 Nov. + 1988: 229+. + +Peters, Constantine. "Reading up on MIDI for the Novice and the + Pro." PC Magazine 29 Nov. 1988: 258. + + + +ABOUT THE AUTHOR: Eric Lipscomb is a Vice President of the +International Electronic Musicians User's Group, an organization +devoted to the advancement of knowledge about MIDI and other +aspects of electronic music In his spare time he writes for and +performs with the comedy group "Green Chili Burp and the +Aftertaste." + +*************************************************************************** +CCNEWS Copyright Notice + +If you use this article, in whole or in part, in printed or electronic +form, you are legally and morally obligated to credit the author and the +original publication name, date, and page(s). We suggest that you also +inform the author of your intention to use this article, in case there are +updates or corrections that he or she might wish to suggest. + +If space and format permit, we would appreciate your crediting the "Articles +database of CCNEWS, the Electronic Forum for Campus Computing Newsletter +Editors, a BITNET-based service of EDUCOM." We would also appreciate your +informing us (via e-mail to CCNEWS@EDUCOM) when you use an article, so we +will know which articles have proven most useful. + +*************************************************************************** diff --git a/midiseq/DOCS/MIDI-SPE.TXT b/midiseq/DOCS/MIDI-SPE.TXT new file mode 100644 index 0000000..ca8ab9b --- /dev/null +++ b/midiseq/DOCS/MIDI-SPE.TXT @@ -0,0 +1,683 @@ +From mf Mon Sep 24 21:20:06 1990 +Received: by nadia.ircam.fr, Mon, 24 Sep 90 22:20:02 GMT +Date: Mon, 24 Sep 90 22:20:02 GMT +From: Michel Fingerhut +Message-Id: <9009242220.AA21452@nadia.ircam.fr> +To: mf@nadia +Status: RO +Path: ircam!inria!mcsun!uunet!aplcen!news +From: gwe@aplvax.jhuapl.edu (Garry Elliott) +Newsgroups: comp.music +Subject: MIDI 1.0 Spec +Keywords: MIDI Spec +Message-ID: <6636@aplcen.apl.jhu.edu> +Date: 24 Sep 90 16:24:27 GMT +Sender: news@aplcen.apl.jhu.edu +Reply-To: gwe@aplvax.jhuapl.edu (Garry Elliott) +Organization: Johns Hopkins University Applied Physics Lab +Lines: 662 +Nntp-Posting-Host: std-gwe-mac.jhuapl.edu + + + There have been two requests in the last week for the MIDI 1.0 Spec., one +from Holland and the other from Western Australia (both places I'd love to +visit). I am not an expert on MIDI but I do have a copy of the spec, reprocuded +below. I hope that this is what you are looking for. +-------------------------------------------------------------------- + + (Call IMA and order your copy of this + specification, which offers + additional information NOT contained in + this file, to include important + diagrams and graphs,...etc.) + + +MIDI +MUSICAL INSTRUMENT DIGITAL INTERFACE + +Specification 1.0 +INTRODUCTION + +MIDI is the acronym for Musical Instrument Digital Interface. + +MIDI enables synthesizers, sequencers, home computers, rhythm machines, etc. +to be intercon- nected through a standard interface. + +Each MIDI-equipped instrument usually contains a receiver and a transmitter. +Some instruments may contain only a receiver or transmitter. The receiver +receives messages in MIDI format and executes MIDI commands. It consists of an +optoisolator, Universal Asynchronous Receiver/Transmitter (UART), and other +hardware needed to perform the intended functions. The transmitter originates +messages in MIDI format, and transmits them by way of a UART and line driver. + +The MIDI standard hardware and data format are defined in this specification. + + +CONVENTIONS + +Status and Data bytes given in Tables I through VI are given in binary. + +Numbers followed by an "H" are in hexadecimal. + +All other numbers are in decimal. + + +HARDWARE + +The interface operates at 31.25 (+/- 1%) Kbaud, asynchronous, with a start +bit, 8 data bits (D0 to D7), and a stop bit. This makes a total of 10 bits for +a period of 320 microseconds per serial byte. + +Circuit: 5 mA current loop type. Logical 0 is current ON. One output shall +drive one and only one input. The receiver shall be opto-isolated and require +less than 5 mA to turn on. Sharp PC-900 and HP 6N138 optoisolators have been +found acceptable. Other high-speed optoisolators may be satisfactory. Rise +and fall times should be less than 2 microseconds. + +Connectors: DIN 5 pin (180 degree) female panel mount receptacle. An example +is the SWITCHCRAFT 57 GB5F. The connectors shall be labelled "MIDI IN" and +"MIDI OUT". Note that pins 1 and 3 are not used, and should be left +unconnected in the receiver and transmitter. + +NOTES: + +1. Optoisolator is Sharp PC-900. + (HP 6N138 or other optoisolator can be used with appropriate changes.) + +2. Gates "A" are IC or transistor. + +3. Resistors are 5% + + +Cables shall have a maximum length of fifty feet (15 meters), and shall be +terminated on each end by a corresponding 5-pin DIN male plug, such as the +SWITCHCRAFT 05GM5M. The cable shall be shielded twisted pair, with the shield +connected to pin 2 at both ends. + +A "MIDI THRU" output may be provided if needed, which provides a direct copy +of data coming in MIDI IN. For very long chain lengths (more than three +instruments), higher-speed optoisolators must be used to avoid additive +rise/fall time errors which affect pulse width duty cycle. + + +DATA FORMAT + +All MIDI communication is acheived through multi-byte "messages" consisting of +one Status byte followed by one or two Data bytes, except Real-Time and +Exclusive messages (see below). + +MESSAGE TYPES + +Messages are divided into two main categories: Channel and System. + +Channel + +Channel messages contain a four-bit number in the Status byte which address +the message specifically to one of sixteen channels. These messages are +thereby intended for any units in a system whose channel number matches the +channel number encoded into the Status byte. + +There are two types of Channel messages: Voice and Mode. + + Voice + To control the instrument's voices, Voice messages are sent + over the Voice Channels. + + Mode + To define the instrument's response to Voice messages, Mode + messages are sent over the instument's Basic Channel. + + +System +System messages are not encoded with channel numbers. + +There are three types of System messages: Common, Real-Time, and Exclusive. + + Common + Common messages are intended for all units in a system. + + Real-Time + Real-Time messages are intended for all units in a system. + They contain Status bytes only -- no Data bytes. Real-Time + messages may be sent at any time -- even between bytes of a + message which has a different status. In such cases the + Real-Time message is either ignored or acted upon, after which + the receiving process resumes under the previous status. + + Exclusive + Exclusive messages can contain any number of Data bytes, and + are terminated by an End of Exclusive (EOX) or any other Status + byte. These messages include a Manufacturer's Identification + (ID) code. If the receiver does not recognize the ID code, it + should ignore the ensuing data. + + So that other users can fully access MIDI instruments, manufacturers + should publish the format of data following their ID code. Only the + manufacturer can update the format following their ID. + +DATA TYPES + +Status Bytes + +Status bytes are eight-bit binary numbers in which the Most Significant Bit +(MSB) is set (binary 1). Status bytes serve to identify the message type, that +is, the purpose of the Data bytes which follow the Status byte. + +Except for Real-Time messages, new Status bytes will always command the +receiver to adopt their status, even if the new Status is received before the +last message was completed. + + Running Status + For Voice and Mode messages only, when a Status byte is + received and processed, the receiver will remain in that status + until a different Status byte is received. Therefore, if the same + Status byte would be repeated, it may (optionally) be omitted so + that only the correct number of Data bytes need be sent. Under + Running Status, then, a complete message need only consist of + specified Data bytes sent in the specified order. + + The Running Status feature is especially useful for + communicating long strings of Note On/Off messages, where + "Note On with Velocity of 0" is used for Note Off. (A separate + Note Off Status byte is also available.) + + Running Status will be stopped when any other Status byte + intervenes, except that Real-Time messges will only interrupt + the Running Status temporarily. + + Unimplemented Status + Any status bytes received for functions which the receiver has not + implemented should be ignored, and subsequent data bytes ignored. + + Undefined Status + Undefined Status bytes must not be used. Care should be taken to + prevent illegal messages from being sent during power-up or + power-down. If undefined Status bytes are received, they + should be ignored, as should subsequent Data bytes. + +Data Bytes +Following the Status byte, there are (except for Real-Time messages) one or +two Data bytes which carry the content of the message. Data bytes are +eight-bit binary numbers in which the MSB is reset (binary 0). The number and +range of Data bytes which must follow each Status byte are specified in the +tables which follow. For each Status byte the correct number of Data bytes +must always be sent. Inside the receiver, action on the message should wait +until all Data bytes required under the current status are received. Receivers +should ignore Data bytes which have not been properly preceeded by a valid +Status byte (with the exception of "Running Status," above). + + +CHANNEL MODES + +Synthesizers contain sound generation elements called voices. Voice +assignment is the algorithmic process of routing Note On/Off data from the +keyboard to the voices so that the musical notes are correctly played with +accurate timing. + +When MIDI is implemented, the relationship between the sixteen available MIDI +channels and the synthesizer's voice assignment must be defined. Several Mode +messages are available for this purpose (see Table III). They are Omni +(On/Off), Poly, and Mono. Poly and Mono are mutually exclusive, i.e., Poly +Select disables Mono, and vice versa. Omni, when on, enables the receiver to +receive Voice messages in all voice Channels without discrimination. When Omni +is off, the receiver will accept Voice messages from only the selected Voice +Channel(s). Mono, when on, restricts the assignment of Voices to just one +voice per Voice Channel (Monophonic.) When Mono is off (=Poly On), any number +of voices may be allocated by the Receiver's normal voice assignment algorithm +(Polyphonic.) + +For a receiver assigned to Basic Channel "N," the four possible modes arising +from the two Mode messages are: + + Mode Omni + + +1 On Poly Voice messages are received from all Voice + channels and assigned to voices polyphonically. + +2 On Mono Voice messages are received from all Voice + Channels, and control only one voice, + monophonically. + +3 Off Poly Voice messages are received in Voice channel N + only, and are assigned to voices polyphonically. + +4 Off Mono Voice messages are received in Voice channels + N thru N+M-1, and assigned monophonically to + voices 1 thru M, respectively. The number of + voices M is specified + by the third byte of the Mono Mode Message. + +Four modes are applied to transmitters (also assigned to Basic Channel N). +Transmitters with no channel selection capability will normally transmit on +Basic Channel 1 (N=0). + +Mode Omni + + +1 On Poly All voice messages are transmitted in Channel N. + +2 On Mono Voice messages for one voice are sent in Channel N. + +3 Off Poly Voice messages for all voices are sent in Channel N. + +4 Off Mono Voice messages for voices 1 thru M are + transmitted in Voice Channels N thru N+M-1, + respectively. (Single voice per channel). + +A MIDI receiver or transmitter can operate under one and only one mode at a +time. Usually the receiver and transmitter will be in the same mode. If a +mode cannot be honored by the receiver, it may ignore the message (and any +subsequent data bytes), or it may switch to an alternate mode (usually Mode 1, +Omni On/Poly). + +Mode messages will be recognized by a receiver only when sent in the Basic +Channel to which the receiver has been assigned, regardless of the current +mode. Voice messages may be received in the Basic Channel and in other +channels (which are all called Voice Channels), which are related specifically +to the Basic channel by the rules above, depending on which mode has been +selected. + +A MIDI receiver may be assigned to one or more Basic Channels by default or by +user control. For example, an eight-voice synthesizer might be assigned to +Basic Channel 1 on power-up. The user could then switch the instrument to be +configured as two four-voice synthesizers, each assigned to its own Basic +Channel. Separate Mode messages would then be sent to each four-voice +synthesizer, just as if they were physically separate instruments. + +POWER-UP DEFAULT CONDITIONS + +On power-up all instruments should default to Mode #1. Except for Note On/Off +Status, all Voice messages should be disabled. Spurious or undefined +transmissions must be suppressed. + + + TABLE I + +SUMMARY OF STATUS BYTES + + +STATUS # OF DATA DESCRIPTION +D7---D0 BYTES + +Channel Voice Messages + +1000nnnn 2 Note Off event + +1001nnnn 2 Note On event (velocity=0: Note Off) + +1010nnnn 2 Polyphonic key pressure/after touch + +1011nnnn 2 Control change + +1100nnnn 1 Program change + +1101nnnn 1 Channel pressure/after touch + +1110nnnn 2 Pitch bend change + + +Channel Mode Messages + +1011nnnn 2 Selects Channel Mode + + +System Messages + +11110000 ***** System Exclusive + +11110sss 0 to 2 System Common + +11111ttt 0 System Real Time + + +NOTES: + nnnn: N-1, where N = Channel #, + i.e. 0000 is Channel 1. + 0001 is Channel 2. + . + . + . + 1111 is Channel 16. + *****: 0iiiiiii, data, ..., EOX + iiiiiii: Identification + sss: 1 to 7 + ttt: 0 to 7 + + +TABLE II + +CHANNEL VOICE MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +1000nnnn 0kkkkkkk Note Off (see notes 1-4) + 0vvvvvvv vvvvvvv: note off velocity + +1001nnnn 0kkkkkkk Note On (see notes 1-4) + 0vvvvvvv vvvvvvv - 0: velocity + vvvvvvv = 0: note off + +1010nnnn 0kkkkkkk Polyphonic Key Pressure (After-Touch) + 0vvvvvvv vvvvvvv: pressure value + +1011nnnn 0ccccccc Control Change + 0vvvvvvv ccccccc: control # (0-121) (see notes 5-8) + vvvvvvv: control value + + ccccccc = 122 thru 127: Reserved. + (See Table III) + +1100nnnn 0ppppppp Program Change + ppppppp: program number (0-127) + +1101nnnn 0vvvvvvv Channel Pressure (After-Touch) + vvvvvvv: pressure value + +1110nnnn 0vvvvvvv Pitch Bend Change LSB (see note 10) + 0vvvvvvv Pitch Bend Change MSB + + + +NOTES: + +1. nnnn: Voice Channel # (1-16, coded as defined in Table I notes) + +2. kkkkkkk: note # (0 - 127) + kkkkkkk = 60: Middle C of keyboard + + 0 12 24 36 48 60 72 84 96 108 120 + 127 + ----------------------------------------------------------------- + ac c c c c c +c c + |-------------- piano range -------------------| + + +3. vvvvvvv: key velocity + A logarithmic scale would be advisable. + + 0 1 64 + 127 + ------------------------------------------------------------------- + off ppp pp p mp mf f + ff fff + + vvvvvvv = 64: in case of no velocity sensors + vvvvvvv = 0: Note Off, with velocity = 64 + + +4. Any Note On message sent should be balanced by sending a Note Off message +for that note in that channel at some later time. + + +5. ccccccc: control number + + + ccccccc Description + + + 0 Continuous Controller 0 MSB + 1 Continuous Controller 1 MSB (MODULATION BENDER) + 2 Continuous Controller 2 MSB + 3 Continuous Controller 3 MSB + 4-31 Continuous Controllers 4-31 MSB + 32 Continuous Controller 0 LSB + 33 Continuous Controller 1 LSB (MODULATION BENDER) + 34 Continuous Controller 2 LSB + 35 Continuous Controller 3 LSB + 36-63 Continuous Controllers 4-31 LSB + 64-95 Switches (On/Off) + 96-121 Undefined + 122-127 Reserved for Channel Mode messages (see Table III). + + +6. All controllers are specifically defined by agreement of the MIDI +Manufacturers Association (MMA) and the Japan MIDI Standards Committee (JMSC). +Manufacturers can request throught the MMA or JMSC that logical controllers be +assigned to physical ones as necessary. The controller allocation table must +be provided in the user's operation manual. + +7. Continuous controllers are divided into Most Significant and Least +Significant Bytes. If only seven bits of resolution are needed for any +particular controllers, only the MSB is sent. It is not necessary to send the +LSB. If more resolution is needed, then both are sent, first the MSB, then the +LSB. If only the LSB has changed in value, the LSB may be sent without +re-sending the MSB. + +8. vvvvvvv: control value (MSB) + + (for controllers) + + 0 + 127 + |-----------------------------------------------------------------| + min + max + + (for switches) + + 0 + 127 +| - - - - - - - - + - - - | + off + on + + Numbers 1 through 126, inclusive, are ignored. + + +9. Any messages (e.g. Note On), which are sent successively under the same +status, can be sent without a Status byte until a different Status byte is +needed. + +10. Sensitivity of the pitch bender is selected in the receiver. Center +position value (no pitch change) is 2000H, which would be transmitted +EnH-00H-40H. +TABLE III + +CHANNEL MODE MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +1011nnnn 0ccccccc Mode Messages + 0vvvvvvv + ccccccc = 122: Local Control + vvvvvvv = 0, Local Control Off + vvvvvvv = 127, Local Control On + + ccccccc = 123: All Notes Off + vvvvvvv = 0 + + ccccccc = 124: Omni Mode Off (All Notes Off) + vvvvvvv = 0 + + ccccccc = 125: Omni Mode On (All Notes Off) + vvvvvvv = 0 + + ccccccc = 126: Mono Mode On (Poly Mode Off) + (All Notes Off) + vvvvvvv = M, where M is the number of channels. + vvvvvvv = 0, the number of channels equals the number + of voices in the receiver. + + ccccccc = 127: Poly Mode On (Mono Mode Off) + vvvvvvv = 0 (All Notes Off) + + +NOTES: + +1. nnnn: Basic Channel # (1-16, coded as defined in Table I) + +2. Messages 123 thru 127 function as All Notes Off messages. They will turn +off all voices controlled by the assigned Basic Channel. Except for message +123, All Notes Off, they should not be sent periodically, but only for a +specific purpose. In no case should they be used in lieu of Note Off commands +to turn off notes which have been previously turned on. Therefore any All +Notes Off command (123-127) may be ignored by receiver with no possibility of +notes staying on, since any Note On command must have a corresonding specific +Note Off command. + +3. Control Change #122, Local Control, is optionally used to interrupt the +internal control path between the keyboard, for example, and the +sound-generating circuitry. If 0 (Local Off mesage) is received, the path is +disconnected: the keyboard data goes only to MIDI and the sound-generating +circuitry is controlled only by incoming MIDI data. If a 7FH (Local On +message) is received, normal operation is restored. + +4. The third byte of "Mono" specifies the number of channels in which +Monophonic Voice messages are to be sent. This number, "M", is a number +between 1 and 16. The channel(s) being used, then, will be the current Basic +Channel (=N) thru N+M-1 up to a maximum of 16. If M=0, this is a special case +directing the receiver to assign all its voices, one per channel, from the +Basic Channel N through 16. + + +TABLE IV + +SYSTEM COMMON MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +11110001 Undefined + +11110010 Song Position Pointer + 0lllllll lllllll: (Least significant) + 0hhhhhhh hhhhhhh: (Most significant) + +11110011 0sssssss Song Select + sssssss: Song # + +11110100 Undefined + +11110101 Undefined + +11110110 none Tune Request + +11110111 none EOX: "End of System Exclusive" flag + + +1. Song Position Pointer: Is an internal register which holds the number of +MIDI beats (1 beat = 6 MIDI clocks) since the start of the song. Normally it +is set to 0 when the START switch is pressed, which starts sequence playback. +It then increments with every sixth MIDI clock receipt, until STOP is pressed. +If CONTINUE is pressed, it continues to increment. It can be arbitrarily +preset (to a resolution of 1 beat) by the SONG POSITION POINTER message. + +2. Song Select: Specifies which song or sequence is to be played upon +receipt of a Start (Real-Time) message. + +3. Tune Request: Used with analog synthesizers to request them to tune their +oscillators. + +4. EOX: Used as a flag to indicate the end of a System Exclusive +transmission (see Table VI). + + +TABLE V + +SYSTEM REAL TIME MESSAGES + + +STATUS DATA BYTES DESCRIPTION + +11111000 Timing Clock +11111001 Undefined +11111010 Start +11111011 Continue +11111100 Stop +11111101 Undefined +11111110 Active Sensing +11111111 System Reset + + +NOTES: + +1. The System Real Time messages are for synchronizing all of the system in +real time. + +2. The System Real Time messages can be sent at any time. Any messages which +consist of two or more bytes may be split to insert Real Time messages. + +3. Timing clock (F8H) +The system is synchronized with this clock, which is sent at a rate of 24 +clocks/quarter note. + +4. Start (from the beginning of song) (FAH) +This byte is immediately sent when the PLAY switch on the master (e.g. +sequencer or rhythm unit) is pressed. + +5. Continue (FBH) +This is sent when the CONTINUE switch is hit. A sequence will continue at the +time of the next clock. + +6. Stop (FCH) +This byte is immediately sent when the STOP switch is hit. It will stop the +sequence. + +7. Active Sensing (FEH) +Use of this message is optional, for either receivers or transmitters. This +is a "dummy" Status byte that is sent every 300 ms (max), whenever there is no +other activity on MIDI. The receiver will operate normally if it never +receives FEH. Otherwise, if FEH is ever received, the receiver will expect to +receive FEH or a transmission of any type every 300 ms (max). If a period of +300 ms passes with no activity, the receiver will turn off the voices and +return to normal operation. + +8. System Reset (FFH) +This message initializes all of the system to the condition of just having +turned on power. The system Reset message should be used sparingly, preferably +under manual command only. In particular, it should not be sent automatically +on power up. + + +TABLE VI + +SYSTEM EXCLUSIVE MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +11110000 Bulk dump etc. + 0iiiiiii iiiiiii: identification + . + (0*******) + . Any number of bytes may be sent here, for any +purpose, as long as they all have a zero in the most significant bit. + (0*******) + . + 11110111 EOX: "End of System Exclusive" + + +NOTES: + +1. iiiiiii: identification ID (0-127) + +2. All bytes between the System Exclusive Status byte and EOX or the next +Status byte must have zeroes in the MSB. + +3. The ID number can be obtained from the MMA or JMSC. + +4. In no case should other Status or Data bytes (except Real-Time) be +interleaved with System Exclusive, regardless of whether or not the ID code is +recognized. + +5. EOX or any other Status byte, except Real-Time, will terminate a System +Exclusive message, and should be sent immediately at its conclusion. + +**** END of Spec. **** + + +-- +Thanks, + Garry Elliott + gwe@aplvax.jhuapl.edu (128.244.176.104) + in Maryland + diff --git a/midiseq/DOCS/MIDICONT.TXT b/midiseq/DOCS/MIDICONT.TXT new file mode 100644 index 0000000..d155a53 --- /dev/null +++ b/midiseq/DOCS/MIDICONT.TXT @@ -0,0 +1,143 @@ + Table 3: Status Bytes 176-191; Control and Mode Changes (per channel) + (adapted from "MIDI by the Numbers" by D. Valenti-Electronic Musician 2/88) + +------------------------------------------------------------------------------ + 2nd Byte Value | Function | 3rd Byte + Binary |Hex|Dec | | Value | Use + - - - - -|- -|- - | - - - - - - - - - - - - - - - - - - - -|- - - - | - - - - + 00000000= 00= 0 | Continuous controller #0 | 0-127 | MSB + 00000001= 01= 1 | Modulation wheel | 0-127 | MSB + 00000010= 02= 2 | Breath control | 0-127 | MSB + 00000011= 03= 3 | Continuous controller #3 | 0-127 | MSB + 00000100= 04= 4 | Foot controller | 0-127 | MSB + 00000101= 05= 5 | Portamento time | 0-127 | MSB + 00000110= 06= 6 | Data Entry | 0-127 | MSB + 00000111= 07= 7 | Main Volume | 0-127 | MSB + 00001000= 08= 8 | Continuous controller #8 | 0-127 | MSB + 00001001= 09= 9 | Continuous controller #9 | 0-127 | MSB + 00001010= 0A= 10 | Continuous controller #10 | 0-127 | MSB + 00001011= 0B= 11 | Continuous controller #11 | 0-127 | MSB + 00001100= 0C= 12 | Continuous controller #12 | 0-127 | MSB + 00001101= 0D= 13 | Continuous controller #13 | 0-127 | MSB + 00001110= 0E= 14 | Continuous controller #14 | 0-127 | MSB + 00001111= 0F= 15 | Continuous controller #15 | 0-127 | MSB + 00010000= 10= 16 | Continuous controller #16 | 0-127 | MSB + 00010001= 11= 17 | Continuous controller #17 | 0-127 | MSB + 00010010= 12= 18 | Continuous controller #18 | 0-127 | MSB + 00010011= 13= 19 | Continuous controller #19 | 0-127 | MSB + 00010100= 14= 20 | Continuous controller #20 | 0-127 | MSB + 00010101= 15= 21 | Continuous controller #21 | 0-127 | MSB + 00010110= 16= 22 | Continuous controller #22 | 0-127 | MSB + 00010111= 17= 23 | Continuous controller #23 | 0-127 | MSB + 00011000= 18= 24 | Continuous controller #24 | 0-127 | MSB + 00011001= 19= 25 | Continuous controller #25 | 0-127 | MSB + 00011010= 1A= 26 | Continuous controller #26 | 0-127 | MSB + 00011011= 1B= 27 | Continuous controller #27 | 0-127 | MSB + 00011100= 1C= 28 | Continuous controller #28 | 0-127 | MSB + 00011101= 1D= 29 | Continuous controller #29 | 0-127 | MSB + 00011110= 1E= 30 | Continuous controller #30 | 0-127 | MSB + 00011111= 1F= 31 | Continuous controller #31 | 0-127 | MSB + 00100000= 20= 32 | Continuous controller #0 | 0-127 | LSB + 00100001= 21= 33 | Modulation wheel | 0-127 | LSB + 00100010= 22= 34 | Breath control | 0-127 | LSB + 00100011= 23= 35 | Continuous controller #3 | 0-127 | LSB + 00100100= 24= 36 | Foot controller | 0-127 | LSB + 00100101= 25= 37 | Portamento time | 0-127 | LSB + 00100110= 26= 38 | Data entry | 0-127 | LSB + 00100111= 27= 39 | Main volume | 0-127 | LSB + 00101000= 28= 40 | Continuous controller #8 | 0-127 | LSB + 00101001= 29= 41 | Continuous controller #9 | 0-127 | LSB + 00101010= 2A= 42 | Continuous controller #10 | 0-127 | LSB + 00101011= 2B= 43 | Continuous controller #11 | 0-127 | LSB + 00101100= 2C= 44 | Continuous controller #12 | 0-127 | LSB + 00101101= 2D= 45 | Continuous controller #13 | 0-127 | LSB + 00101110= 2E= 46 | Continuous controller #14 | 0-127 | LSB + 00101111= 2F= 47 | Continuous controller #15 | 0-127 | LSB + 00110000= 30= 48 | Continuous controller #16 | 0-127 | LSB + 00110001= 31= 49 | Continuous controller #17 | 0-127 | LSB + 00110010= 32= 50 | Continuous controller #18 | 0-127 | LSB + 00110011= 33= 51 | Continuous controller #19 | 0-127 | LSB + 00110100= 34= 52 | Continuous controller #20 | 0-127 | LSB + 00110101= 35= 53 | Continuous controller #21 | 0-127 | LSB + 00110110= 36= 54 | Continuous controller #22 | 0-127 | LSB + 00110111= 37= 55 | Continuous controller #23 | 0-127 | LSB + 00111000= 38= 56 | Continuous controller #24 | 0-127 | LSB + 00111001= 39= 57 | Continuous controller #25 | 0-127 | LSB + 00111010= 3A= 58 | Continuous controller #26 | 0-127 | LSB + 00111011= 3B= 59 | Continuous controller #27 | 0-127 | LSB + 00111100= 3C= 60 | Continuous controller #28 | 0-127 | LSB + 00111101= 3D= 61 | Continuous controller #29 | 0-127 | LSB + 00111110= 3E= 62 | Continuous controller #30 | 0-127 | LSB + 00111111= 3F= 63 | Continuous controller #31 | 0-127 | LSB + 01000000= 40= 64 | Damper pedal on/off (Sustain) | 0=off | 127=on + 01000001= 41= 65 | Portamento on/off | 0=off | 127=on + 01000010= 42= 66 | Sustenuto on/off | 0=off | 127=on + 01000011= 43= 67 | Soft pedal on/off | 0=off | 127=on + 01000100= 44= 68 | Undefined on/off | 0=off | 127=on + 01000101= 45= 69 | Undefined on/off | 0=off | 127=on + 01000110= 46= 70 | Undefined on/off | 0=off | 127=on + 01000111= 47= 71 | Undefined on/off | 0=off | 127=on + 01001000= 48= 72 | Undefined on/off | 0=off | 127=on + 01001001= 49= 73 | Undefined on/off | 0=off | 127=on + 01001010= 4A= 74 | Undefined on/off | 0=off | 127=on + 01001011= 4B= 75 | Undefined on/off | 0=off | 127=on + 01001100= 4C= 76 | Undefined on/off | 0=off | 127=on + 01001101= 4D= 77 | Undefined on/off | 0=off | 127=on + 01001110= 4E= 78 | Undefined on/off | 0=off | 127=on + 01001111= 4F= 79 | Undefined on/off | 0=off | 127=on + 01010000= 50= 80 | Undefined on/off | 0=off | 127=on + 01010001= 51= 81 | Undefined on/off | 0=off | 127=on + 01010010= 52= 82 | Undefined on/off | 0=off | 127=on + 01010011= 53= 83 | Undefined on/off | 0=off | 127=on + 01010100= 54= 84 | Undefined on/off | 0=off | 127=on + 01010101= 55= 85 | Undefined on/off | 0=off | 127=on + 01010110= 56= 86 | Undefined on/off | 0=off | 127=on + 01010111= 57= 87 | Undefined on/off | 0=off | 127=on + 01011000= 58= 88 | Undefined on/off | 0=off | 127=on + 01011001= 59= 89 | Undefined on/off | 0=off | 127=on + 01011010= 5A= 90 | Undefined on/off | 0=off | 127=on + 01011011= 5B= 91 | Undefined on/off | 0=off | 127=on + 01011100= 5C= 92 | Undefined on/off | 0=off | 127=on + 01011101= 5D= 93 | Undefined on/off | 0=off | 127=on + 01011110= 5E= 94 | Undefined on/off | 0=off | 127=on + 01011111= 5F= 95 | Undefined on/off | 0=off | 127=on + ----------------- + 01100000= 60= 96 | Data entry +1 | 127 + 01100001= 61= 97 | Data entry -1 | 127 + 01100010= 62= 98 | Undefined | ? + 01100011= 63= 99 | Undefined | ? + 01100100= 64= 100 | Undefined | ? + 01100101= 65= 101 | Undefined | ? + 01100110= 66= 102 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01101000= 68= 104 | Undefined | ? + 01101001= 69= 105 | Undefined | ? + 01101010= 6A= 106 | Undefined | ? + 01101011= 6B= 107 | Undefined | ? + 01101100= 6C= 108 | Undefined | ? + 01101101= 6D= 109 | Undefined | ? + 01101110= 6E= 110 | Undefined | ? + 01101111= 6F= 111 | Undefined | ? + 01110000= 70= 112 | Undefined | ? + 01110001= 71= 113 | Undefined | ? + 01110010= 72= 114 | Undefined | ? + 01110011= 73= 115 | Undefined | ? + 01110100= 74= 116 | Undefined | ? + 01110101= 75= 117 | Undefined | ? + 01110110= 76= 118 | Undefined | ? + 01110111= 77= 119 | Undefined | ? + 01111000= 78= 120 | Undefined | ? + 01111001= 79= 121 | Undefined | ? + 01111010= 7A= 122 | Local control on/off | 0=off 127=on + 01111011= 7B= 123 | All notes off (!!) | 0 + 01111100= 7C= 124 | Omni mode off (includes all notes off) | 0 + 01111101= 7D= 125 | Omni mode on (includes all notes off) | 0 + 01111110= 7E= 126 | Poly mode on/off(includes all notes off)| ** + 01111111= 7F= 127 | Poly mode on(incl mono=off&all notes off)| 0 + + **Note: This equals the number of channels, or zero if the number of channels + equals the number of voices in the receiver. diff --git a/midiseq/DOCS/MIDIDUMP.TXT b/midiseq/DOCS/MIDIDUMP.TXT new file mode 100644 index 0000000..312d12a --- /dev/null +++ b/midiseq/DOCS/MIDIDUMP.TXT @@ -0,0 +1,214 @@ + MIDI SAMPLE DUMP STANDARD + +1) INTRODUCTION + + The MIDI SDS was adopted in January 1986 by the MIDI +Manufacturers Association and the Japanese MIDI Standards Committee. +The SDS defines the standard method for transfer of sound sample data +between MIDI-equipped devices. Sample dumps may be accomplished with +either an 'open loop' or 'closed loop' system. The open loop method +simply involves the straight dump of all sample data from its source +to the destination, with no timeouts, packet acknowledgements, or any +other form of handshaking, much as in the manner of a sysex bulk dump, +usually intiated at the source. The closed loop method allows the use +of handshaking messages between the dump source and destination, and +usually places the dump process under the control of the slave, to +allow it time to process the incoming data as necessary. As with any +standard, it can not be assumed that a device adheres to it unless the +accompanying documentation specifically indicates it. Even then, it is +best to check its conformity with non-critical data. + +2) SPEC: SAMPLE DUMP FORMATS + + DUMP HEADER: + +F0 7E cc 01 ss ss ee ff ff ff gg gg gg hh hh hh ii ii ii jj F7 + +where + +cc = channel number +ss ss = sample number (LSB first) +ee = sample format (number of significant bits; 8->28) +ff ff ff = sample period (1/sample rate) in nanoseconds (LSB first) +gg gg gg = sample length, in words +hh hh hh = sustain loop start point (word number) (LSB first) +ii ii ii = sustain loop end point (word number) (LSB first) +jj = loop type (00:forwards only; 01:alternating) + + DATA PACKET: + +F0 7E cc 02 kk <120 bytes> mm F7 + +where + +cc = channel number +kk = running packet count (00->7F) +mm = checksum (XOR of 7E, cc, 02, kk <120 bytes>) + + The total size of a data packet is 127 bytes. This is to avoid +overflow of the MIDI input buffer of a device that may want to receive +an entire packet before processing it. + A data packet consists of its own header, a packet number, 120 +bytes of data, a checksum, and an EOX. The packet number begins at 00 +and increments with each new packet. It resets to 00 after it reaches +7F, and continues counting. The packet number is used by the receiver +to distinguish between a new data packet, or a resend of a previous +packet. The packet number is followed by 120 bytes of data, which form +60, 40, or 30 words (MSB first for multiword samples), depending on +the length of a single data sample. + Each data byte hold seven bits, with the msb in each byte set to +0, in order to conform to the requirements of MIDI data transmission. +Information is left justified within the 7-bit bytes, and unused bits +are filled with 0. + Example: Assume a data point in the memory of a 16-bit sampler, +with the value 87E5. In binary, that would be + + 1000 0111 1110 0101 + +and would be encoded as the following MIDI data stream: + + 01000011 01111001 00100000 + + The checksum is the running XOR of all the data after the SYSEX +byte, up to but not including the checksum itself. + +3) SPEC: SAMPLE DUMP MESSAGES + + DUMP REQUEST: + +F0 7E cc 03 ss ss F7 + +where + +cc = channel number +ss ss = sample number requested (LSB first) + + Upon receiving the request, the sampler checks the sample number +to see if it is within legal range. If it is not, the request is +ignored. If it is, the sample dump is started. One packet at a time is +sent, under control of the handshaking messages outlined below. + + HANDSHAKING MESSAGES: + + For all below: + +cc = channel number +pp = packet number + + Packet numbers are included in the handshaking messages to +accomodate machines that have the intelligence to re-transmit specific +packets after an entire dump is finished, or if synchronization is +lost. + + ACK : F0 7E cc 7F pp F7 + + Means last packet was recieved correctly (checksum OK, etc), +please send next one. Packet number is packet being acknowledged as +correct. + + NAK : F0 7E cc 7E pp F7 + + Means last packet not received correctly, please send again. +Packet number is packet being rejected. + + CANCEL : F0 7E cc 7D pp F7 + + Means abort dump immediately. Packet number is packet on which +abort occurs. + + WAIT : F0 7E cc 7C pp F7 + + Means pause dump indefinitely, until next message is sent. Allows +the unit recieving the dump to perform other functions (disk access, +etc), before receiving the remainder of the dump. The next message it +sends (eg ACK, ABORT) will determine if the dump continues or aborts. + +4) DUMP PROCEDURE: MASTER (DUMP SOURCE) + + Once a dump has been requested, either via MIDI or through the +front panel, the DUMP HEADER is sent. After sending the header, the +master must time out for at least two seconds, to allow the receiver +to decide if it will accept this sample (has enough memory, etc). + If it receives a CANCEL, within this time, it should abort +immediately. If it receives an CAK, it will start sending packets +immediately. If it receives a WAIT, it pauses until another message is +received, and then processes that mesage normally. If nothing is +recieved within the timeout, an open loop is assumed, and the dump +starts with the first packet. + After sending each packet, the master should time out for at +least 20 milliseconds and watch its MIDI In. If an ACK is received, it +sends the next packet immediately. If it receives an NAK, and the +packet number matches the number of the last packet sent, it resend +that packet If the packet numbers don't match, and the device is +incapable of sending packets out of order, the NAK will be ignored. + If a WAIT is received, the master should watch its MIDI In port +indefinitely for another ACK, NAK, or CANCEL message, which it should +then process normally. + If no messages are received within 20 milliseconds of the +transmission of a packet, the master may assume an open loop +configuration, and send the next packet. + This process continues until there are less than 121 data bytes +to send. The final packet will still consist of 120n bytes, regardless +of how many significant bytes actually remain, and the unused bytes +will be filled with zeroes. The receiver should handshake after +receiving the last packet. + +5) DUMP PROCEDURE: SLAVE (DUMP DESTINATION) + + When receiving a sample dump, a device should keep a running +checksum during reception. If its checksum matches the checksum in the +data packet, it will send an ACK and wait for the next packet. If it +does not match, it will send an NAK containing the number of the +packet that caused the error, and wait for the next packet. If, after +sending an NAK, the packet number of the next packet doesn't match the +previous packet number (the one that was NAK'd), and the unit is not +capable of accepting packets out of order, the error is ignored and +the dump continues as if the checksums had matched. + If a receiver runs out of memory before the dumpo is completed, +it should send a CANCEL to stop the dump. + +6) SDS OVERVIEW + + SAMPLE DUMP DATA FORMAT: DUMP HEADER: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: Header + Sample Number (2 bytes, LSB first) + Sample Format + Sample Period (3 bytes, LSB first) + Sample Length (3 bytes, LSB first) + Sustain Loop Start Point (3 bytes, LSB first) + Sustain Loop End Point (3 bytes, LSB first) + Loop Type + Eox + + SAMPLE DUMP DATA FORMAT: DATA PACKET: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: Data Packet + Packet Number + Sample Data (120 bytes) + Checksum + Eox + + SAMPLE DUMP MESSAGES: DUMP REQUEST: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: Dump Request + Sample Number (2 bytes, LSB first) + Eox + + SAMPLE DUMP MESSAGES: HANDSHAKING FLAGS: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: ACK or NAK or CANCEL or WAIT + Packet Number + Eox diff --git a/midiseq/DOCS/MIDIFILE.TXT b/midiseq/DOCS/MIDIFILE.TXT new file mode 100644 index 0000000..1869023 --- /dev/null +++ b/midiseq/DOCS/MIDIFILE.TXT @@ -0,0 +1,641 @@ +To get your copy of the 1.0 spec, send a $2 check to: + +International Midi Association +5316 West 57th Street +Los Angeles, CA 90056 +(415) 321-MIDI + +Make your checks payable to the IMA. BYW, the 1.0 spec is technically +identical to the .06 spec, but the description has been re-written. +Since the spec has been offically approved, there shouldn't be any +problem with posting this summary of the .06 spec: + + +[This document is Dave Oppenheim's current version of the MIDI file +specification, as sent to those who have participated in its +development. The consensus seems to be to submit this to the MIDI +Manufacturers' Association as version 1.0. I apologize for any loss of +clarity that might have occurred in the conversion from a Microsoft Word +document to this pure text file. I have removed some of the discussion +about recent changes to the specification in order to keep the file size +reasonable.--Doug Wyatt] + +Standard MIDI Files 0.06 March 1, 1988 + + +0 Introduction + +This describes a proposed standard MIDI file format. MIDI files contain +one or more MIDI streams, with time information for each event. Song, +sequence, and track structures, tempo and time signature information, +are all supported. Track names and other descriptive information may be +stored with the MIDI data. This format supports multiple tracks and +multiple sequences so that if the user of a program which supports +multiple tracks intends to move a file to another one, this format can +allow that to happen. + +This spec defines the 8-bit binary data stream used in the file. The +data can be stored in a binary file, nibbleized, 7-bit-ized for +efficient MIDI transmission, converted to Hex ASCII, or translated +symbolically to a printable text file. This spec addresses what's in +the 8-bit stream. + + +1 Sequences, Tracks, Chunks: File Block Structure + +Sequence files are made up of chunks. Each chunk has a 4-character type +and a 32-bit length, which is the number of bytes in the chunk. On the +Macintosh, data is passed either in the data fork of a file, or on the +Clipboard. (The file type on the Macintosh for a file in this format +will be "Midi".) On any other computer, the data is simply the contents +of the file. This structure allows future chunk types to be designed +which may easily be ignored if encountered by a program written before +the chunk type is introduced. Your programs should expect alien chunks +and treat them as if they weren't there. + +This proposal defines two types of chunks: a header chunk and a track +chunk. A header chunk provides a minimal amount of information +pertaining to the entire MIDI file. A track chunk contains a sequential +stream of MIDI data which may contain information for up to 16 MIDI +channels. The concepts of multiple tracks, multiple MIDI outputs, +patterns, sequences, and songs may all be implemented using several +track chunks. + +A MIDI file always starts with a header chunk, and is followed by one or +more track chunks. + +MThd +
+MTrk + +MTrk + + ... + +Track Data Format (MTrk chunk type) + +The MTrk chunk type is where actual song data is stored. It is simply a +stream of MIDI events (and non-MIDI events), preceded by delta-time +values. + +Some numbers in MTrk chunks are represented in a form called a variable- +length quantity. These numbers are represented 7 bits per byte, most +significant bits first. All bytes except the last have bit 7 set, and +the last byte has bit 7 clear. If the number is between 0 and 127, it +is thus represented exactly as one byte. + +Here are some examples of numbers represented as variable-length +quantities: + + Number (hex) Representation (hex) + 00000000 00 + 00000040 40 + 0000007F 7F + 00000080 81 00 + 00002000 C0 00 + 00003FFF FF 7F + 00004000 81 80 00 + 00100000 C0 80 00 + 001FFFFF FF FF 7F + 00200000 81 80 80 00 + 08000000 C0 80 80 00 + 0FFFFFFF FF FF FF 7F + + +The largest number which is allowed is 0FFFFFFF so that the variable- +length representation must fit in 32 bits in a routine to write +variable-length numbers. Theoretically, larger numbers are possible, +but 2 x 108 96ths of a beat at a fast tempo of 500 beats per minute is +four days, long enough for any delta-time! + +Here is the syntax of an MTrk chunk: + + = + + + = + + is stored as a variable-length quantity. It represents the +amount of time before the following event. If the first event in a +track occurs at the very beginning of a track, or if two events occur +simultaneously, a delta-time of zero is used. Delta-times are always +present. (Not storing delta-times of 0 requires at least two bytes for +any other value, and most delta-times aren't zero.) Delta-time is in +some fraction of a beat (or a second, for recording a track with SMPTE +times), as specified in the header chunk. + + = | | + + is any MIDI channel message. Running status is used: +status bytes may be omitted after the first byte. The first event in a +file must specify status. Delta-time is not considered an event +itself: it is an integral part of the specification. Notice that +running status occurs across delta-times. + + specifies non-MIDI information useful to this format or to +sequencers, with this syntax: + + FF + +All meta-events begin with FF, then have an event type byte (which is +always less than 128), and then have the length of the data stored as a +variable-length quantity, and then the data itself. If there is no +data, the length is 0. As with sysex events, running status is not +allowed. As with chunks, future meta-events may be designed which may +not be known to existing programs, so programs must properly ignore +meta-events which they do not recognize, and indeed, should expect to +see them. New for 0.06: programs must never ignore the length of a +meta-event which they do recognize, and they shouldn't be surprised if +it's bigger than they expected. If so, they must ignore everything past +what they know about. However, they must not add anything of their own +to the end of a meta-event. + + is used to specify a MIDI system exclusive message, or as +an "escape" to specify any arbitrary bytes to be transmitted. +Unfortunately, some synthesizer manufacturers specify that their system +exclusive messages are to be transmitted as little packets. Each packet +is only part of an entire syntactical system exclusive message, but the +times they are transmitted at are important. Examples of this are the +bytes sent in a CZ patch dump, or the FB-01's "system exclusive mode" in +which microtonal data can be transmitted. To be able to handle +situations like these, two forms of are provided: + + F0 + F7 + +In both cases, is stored as a variable-length quantity. It is +equal to the number of bytes following it, not including itself or the +message type (F0 or F7), but all the bytes which follow, including any +F7 at the end which is intended to be transmitted. The first form, with +the F0 code, is used for syntactically complete system exclusive +messages, or the first packet an a series Q that is, messages in which +the F0 should be transmitted. The second form is used for the remainder +of the packets within a syntactic sysex message, which do not begin with +F0. Of course, the F7 is not considered part of the system exclusive +message. Of course, just as in MIDI, running status is not allowed, in +this case because the length is stored as a variable-length quantity +which may or may not start with bit 7 set. + +(New to 0.06) A syntactic system exclusive message must always end with +an F7, even if the real-life device didn't send one, so that you know +when you've reached the end of an entire sysex message without looking +ahead to the next event in the MIDI file. This principle is repeated +and illustrated in the paragraphs below. + +The vast majority of system exclusive messages will just use the F0 +format. For instance, the transmitted message F0 43 12 00 07 F7 would +be stored in a MIDI file as F0 05 43 12 00 07 F7. As mentioned above, +it is required to include the F7 at the end so that the reader of the +MIDI file knows that it has read the entire message. + +For special situations when a single system exclusive message is split +up, with parts of it being transmitted at different times, such as in a +Casio CZ patch transfer, or the FB-01's "system exclusive mode", the F7 +form of sysex event is used for each packet except the first. None of +the packets would end with an F7 except the last one, which must end +with an F7. There also must not be any transmittable MIDI events in- +between the packets of a multi-packet system exclusive message. Here is +an example: suppose the bytes F0 43 12 00 were to be sent, followed by +a 200-tick delay, followed by the bytes 43 12 00 43 12 00, followed by +a 100-tick delay, followed by the bytes 43 12 00 F7, this would be in +the MIDI File: + + F0 03 43 12 00 + 81 48 200-tick delta-time + F7 06 43 12 00 43 12 00 + 64 100-tick delta-time + F7 04 43 12 00 F7 + +The F7 event may also be used as an "escape" to transmit any bytes +whatsoever, including real-time bytes, song pointer, or MIDI Time Code, +which are not permitted normally in this specification. No effort +should be made to interpret the bytes used in this way. Since a system +exclusive message is not being transmitted, it is not necessary or +appropriate to end the F7 event with an F7 in this case. + + +2 Header Chunk + +The header chunk at the beginning of the file specifies some basic +information about the data in the file. The data section contains three +16-bit words, stored high byte first (of course). Here's the syntax of +the complete chunk: + + + +As described above, is the four ASCII characters 'MThd'; + is a 32-bit representation of the number 6 (high byte first). +The first word, format, specifies the overall organization of the file. +Only three values of format are specified: + + 0 the file contains a single multi-channel track + 1 the file contains one or more simultaneous tracks (or MIDI +outputs) of a sequence + 2 the file contains one or more sequentially independent +single-track patterns + +The next word, ntrks, is the number of track chunks in the file. The +third word, division, is the division of a quarter-note represented by +the delta-times in the file. (If division is negative, it represents +the division of a second represented by the delta-times in the file, so +that the track can represent events occurring in actual time instead of +metrical time. It is represented in the following way: the upper byte +is one of the four values -24, -25, -29, or -30, corresponding to the +four standard SMPTE and MIDI time code formats, and represents the +number of frames per second. The second byte (stored positive) is the +resolution within a frame: typical values may be 4 (MIDI time code +resolution), 8, 10, 80 (bit resolution), or 100. This system allows +exact specification of time-code-based tracks, but also allows +millisecond-based tracks by specifying 25 frames/sec and a resolution of +40 units per frame.) + +Format 0, that is, one multi-channel track, is the most interchangeable +representation of data. One application of MIDI files is a simple +single-track player in a program which needs to make synthesizers make +sounds, but which is primarily concerned with something else such as +mixers or sound effect boxes. It is very desirable to be able to +produce such a format, even if your program is track-based, in order to +work with these simple programs. On the other hand, perhaps someone +will write a format conversion from format 1 to format 0 which might be +so easy to use in some setting that it would save you the trouble of +putting it into your program. + +Programs which support several simultaneous tracks should be able to +save and read data in format 1, a vertically one-dimensional form, that +is, as a collection of tracks. Programs which support several +independent patterns should be able to save and read data in format 2, a +horizontally one-dimensional form. Providing these minimum capabilities +will ensure maximum interchangeability. + +MIDI files can express tempo and time signature, and they have been +chosen to do so for transferring tempo maps from one device to another. +For a format 0 file, the tempo will be scattered through the track and +the tempo map reader should ignore the intervening events; for a format +1 file, the tempo map must (starting in 0.04) be stored as the first +track. It is polite to a tempo map reader to offer your user the +ability to make a format 0 file with just the tempo, unless you can use +format 1. + +All MIDI files should specify tempo and time signature. If they don't, +the time signature is assumed to be 4/4, and the tempo 120 beats per +minute. In format 0, these meta-events should occur at least at the +beginning of the single multi-channel track. In format 1, these meta- +events should be contained in the first track. In format 2, each of the +temporally independent patterns should contain at least initial time +signature and tempo information. + +We may decide to define other format IDs to support other structures. A +program reading an unfamiliar format ID should return an error to the +user rather than trying to read further. + +3 Meta-Events + +A few meta-events are defined herein. It is not required for every +program to support every meta-event. Meta-events initially defined +include: + +FF 00 02 ssss Sequence Number +This optional event, which must occur at the beginning of a track, +before any nonzero delta-times, and before any transmittable MIDI +events, specifies the number of a sequence. The number in this track +corresponds to the sequence number in the new Cue message discussed at +the summer 1987 MMA meeting. In a format 2 MIDI file, it is used to +identify each "pattern" so that a "song" sequence using the Cue message +to refer to the patterns. If the ID numbers are omitted, the sequences' +locations in order in the file are used as defaults. In a format 0 or 1 +MIDI file, which only contain one sequence, this number should be +contained in the first (or only) track. If transfer of several +multitrack sequences is required, this must be done as a group of format +1 files, each with a different sequence number. + +FF 01 len text Text Event +Any amount of text describing anything. It is a good idea to put a text +event right at the beginning of a track, with the name of the track, a +description of its intended orchestration, and any other information +which the user wants to put there. Text events may also occur at other +times in a track, to be used as lyrics, or descriptions of cue points. +The text in this event should be printable ASCII characters for maximum +interchange. However, other character codes using the high-order bit +may be used for interchange of files between different programs on the +same computer which supports an extended character set. Programs on a +computer which does not support non-ASCII characters should ignore those +characters. + +(New for 0.06 ). Meta event types 01 through 0F are reserved for +various types of text events, each of which meets the specification of +text events(above) but is used for a different purpose: + +FF 02 len text Copyright Notice +Contains a copyright notice as printable ASCII text. The notice should +contain the characters (C), the year of the copyright, and the owner of +the copyright. If several pieces of music are in the same MIDI file, +all of the copyright notices should be placed together in this event so +that it will be at the beginning of the file. This event should be the +first event in the first track chunk, at time 0. + + +FF 03 len text Sequence/Track Name +If in a format 0 track, or the first track in a format 1 file, the name +of the sequence. Otherwise, the name of the track. + +FF 04 len text Instrument Name +A description of the type of instrumentation to be used in that track. +May be used with the MIDI Prefix meta-event to specify which MIDI +channel the description applies to, or the channel may be specified as +text in the event itself. + +FF 05 len text Lyric +A lyric to be sung. Generally, each syllable will be a separate lyric +event which begins at the event's time. + +FF 06 len text Marker +Normally in a format 0 track, or the first track in a format 1 file. +The name of that point in the sequence, such as a rehearsal letter or +section name ("First Verse", etc.). + + +FF 07 len text Cue Point +A description of something happening on a film or video screen or stage +at that point in the musical score ("Car crashes into house", "curtain +opens", "she slaps his face", etc.) + +FF 2F 00 End of Track +This event is not optional. It is included so that an exact ending +point may be specified for the track, so that it has an exact length, +which is necessary for tracks which are looped or concatenated. + +FF 51 03 tttttt Set Tempo, in microseconds per MIDI quarter-note +This event indicates a tempo change. Another way of putting +"microseconds per quarter-note" is "24ths of a microsecond per MIDI +clock". Representing tempos as time per beat instead of beat per time +allows absolutely exact long-term synchronization with a time-based sync +protocol such as SMPTE time code or MIDI time code. This amount of +accuracy provided by this tempo resolution allows a four-minute piece at +120 beats per minute to be accurate within 500 usec at the end of the +piece. Ideally, these events should only occur where MIDI clocks would +be located Q this convention is intended to guarantee, or at least +increase the likelihood, of compatibility with other synchronization +devices so that a time signature/tempo map stored in this format may +easily be transferred to another device. + +FF 54 05 hr mn se fr ff SMPTE Offset (New in 0.06 - SMPTE Format +specification) +This event, if present, designates the SMPTE time at which the track +chunk is supposed to start. It should be present at the beginning of +the track, that is, before any nonzero delta-times, and before any +transmittable MIDI events. The hour must be encoded with the SMPTE +format, just as it is in MIDI Time Code. In a format 1 file, the SMPTE +Offset must be stored with the tempo map, and has no meaning in any of +the other tracks. The ff field contains fractional frames, in 100ths of +a frame, even in SMPTE-based tracks which specify a different frame +subdivision for delta-times. + +FF 58 04 nn dd cc bb Time Signature +The time signature is expressed as four numbers. nn and dd represent +the numerator and denominator of the time signature as it would be +notated. The denominator is a negative power of two: 2 represents a +quarter-note, 3 represents an eighth-note, etc. The cc parameter +expresses the number of MIDI clocks in a metronome click. The bb +parameter expresses the number of notated 32nd-notes in a MIDI quarter- +note (24 MIDI Clocks). This was added because there are already +multiple programs which allow the user to specify that what MIDI thinks +of as a quarter-note (24 clocks) is to be notated as, or related to in +terms of, something else. + +Therefore, the complete event for 6/8 time, where the metronome clicks +every three eighth-notes, but there are 24 clocks per quarter-note, 72 +to the bar, would be (in hex): + + FF 58 04 06 03 24 08 + +That is, 6/8 time (8 is 2 to the 3rd power, so this is 06 03), 32 MIDI +clocks per dotted-quarter (24 hex!), and eight notated 32nd-notes per +MIDI quarter note. + +FF 59 02 sf mi Key Signature + sf = -7: 7 flats + sf = -1: 1 flat + sf = 0: key of C + sf = 1: 1 sharp + sf = 7: 7 sharps + + mi = 0: major key + mi = 1: minor key + +FF 7F len data Sequencer-Specific Meta-Event + + Special requirements for particular sequencers may use this +event type: the first byte or bytes of data is a manufacturer ID. +However, as this is an interchange format, growth of the spec proper is +preferred to use of this event type. This type of event may be used by +a sequencer which elects to use this as its only file format; +sequencers with their established feature-specific formats should +probably stick to the standard features when using this format. + +4 Program Fragments and Example MIDI Files + +Here are some of the routines to read and write variable-length numbers +in MIDI Files. These routines are in C, and use getc and putc, which +read and write single 8-bit characters from/to the files infile and +outfile. + +WriteVarLen (value) +register long value; +{ + register long buffer; + + buffer = value & 0x7f; + while ((value >>= 7) > 0) + { + buffer <<= 8; + buffer |= 0x80; + buffer += (value & 0x7f); + } + + while (TRUE) + { + putc(buffer,outfile); + if (buffer & 0x80) + buffer >>= 8; + else + break; + } +} + +doubleword ReadVarLen () +{ + register doubleword value; + register byte c; + + if ((value = getc(infile)) & 0x80) + { + value &= 0x7f; + do + { + value = (value << 7) + ((c = getc(infile)) & 0x7f); + } while (c & 0x80); + } + return (value); +} + +As an example, MIDI Files for the following excerpt are shown below. +First, a format 0 file is shown, with all information intermingled; +then, a format 1 file is shown with all data separated into four tracks: +one for tempo and time signature, and three for the notes. A resolution +of 96 "ticks" per quarter note is used. A time signature of 4/4 and a +tempo of 120, though implied, are explicitly stated. + + + + +The contents of the MIDI stream represented by this example are broken +down here: + +Delta Time(decimal) Event Code (hex) Other Bytes (decimal) + Comment + 0 FF 58 04 04 02 24 08 4 bytes: 4/4 time, 24 MIDI +clocks/click, + 8 32nd notes/24 MIDI clocks + 0 FF 51 03 500000 3 bytes: 500,000 5sec per quarter-note + 0 C0 5 Ch. 1, Program Change 5 + 0 C0 5 Ch. 1, Program Change 5 + 0 C1 46 Ch. 2, Program Change 46 + 0 C2 70 Ch. 3, Program Change 70 + 0 92 48 96 Ch. 3 Note On C2, forte + 0 92 60 96 Ch. 3 Note On C3, forte + 96 91 67 64 Ch. 2 Note On G3, mezzo-forte + 96 90 76 32 Ch. 1 Note On E4, piano + 192 82 48 64 Ch. 3 Note Off C2, standard + 0 82 60 64 Ch. 3 Note Off C3, standard + 0 81 67 64 Ch. 2 Note Off G3, standard + 0 80 76 64 Ch. 1 Note Off E4, standard + 0 FF 2F 00 Track End + +The entire format 0 MIDI file contents in hex follow. First, the header +chunk: + + 4D 54 68 64 MThd + 00 00 00 06 chunk length + 00 00 format 0 + 00 01 one track + 00 60 96 per quarter-note + +Then, the track chunk. Its header, followed by the events (notice that +running status is used in places): + + 4D 54 72 6B MTrk + 00 00 00 3B chunk length (59) + + Delta-time Event Comments + 00 FF 58 04 04 02 18 08 time signature + 00 FF 51 03 07 A1 20 tempo + 00 C0 05 + 00 C1 2E + 00 C2 46 + 00 92 30 60 + 00 3C 60 running status + 60 91 43 40 + 60 90 4C 20 + 81 40 82 30 40 two-byte delta-time + 00 3C 40 running status + 00 81 43 40 + 00 80 4C 40 + 00 FF 2F 00 end of track + +A format 1 representation of the file is slightly different. Its header +chunk: + + 4D 54 68 64 MThd + 00 00 00 06 chunk length + 00 01 format 1 + 00 04 four tracks + 00 60 96 per quarter-note + +First, the track chunk for the time signature/tempo track. Its header, +followed by the events: + + 4D 54 72 6B MTrk + 00 00 00 14 chunk length (20) + + Delta-time Event Comments + 00 FF 58 04 04 02 18 08 time signature + 00 FF 51 03 07 A1 20 tempo + 83 00 FF 2F 00 end of track + +Then, the track chunk for the first music track. The MIDI convention +for note on/off running status is used in this example: + + 4D 54 72 6B MTrk + 00 00 00 10 chunk length (16) + + Delta-time Event Comments + 00 C0 05 + 81 40 90 4C 20 + 81 40 4C 00 Running status: note on, vel = 0 + 00 FF 2F 00 end of track + +Then, the track chunk for the second music track: + + 4D 54 72 6B MTrk + 00 00 00 0F chunk length (15) + + Delta-time Event Comments + 00 C1 2E + 60 91 43 40 + 82 20 43 00 running status + 00 FF 2F 00 end of track + +Then, the track chunk for the third music track: + + 4D 54 72 6B MTrk + 00 00 00 15 chunk length (21) + + Delta-time Event Comments + 00 C2 46 + 00 92 30 60 + 00 3C 60 running status + 83 00 30 00 two-byte delta-time, running status + 00 3C 00 running status + 00 FF 2F 00 end of track + +5 MIDI Transmission of MIDI Files + +Since it is inconvenient to exchange disks between different computers, +and since many computers which will use this format will have a MIDI +interface anyway, MIDI seems like a perfect way to send these files from +one computer to another. And, while we're going through all the trouble +to make a way of sending MIDI Files, it would be nice if they could send +any files (like sampled sound files, text files, etc.) + +Goals +The transmission protocol for MIDI files should be reasonably efficient, +should support fast transmission for computers which are capable of it, +and slower transmission for less powerful ones. It should not be +impossible to convert a MIDI File to or from an arbitrary internal +representation on the fly as it is transmitted, but, as long as it is +not too difficult, it is very desirable to use a generic method so that +any file type could be accommodated. + +To make the protocol efficient, the MIDI transmission of these files +will take groups of seven 8-bit bytes and transmit them as eight 7-bit +MIDI data bytes. This is certainly in the spirit of the rest of this +format (keep it small, because it's not that hard to do). To +accommodate a wide range of transmission speeds, files will be +transmitted in packets with acknowledge -- this allows data to be stored +to disk as it is received. If the sender does not receive a response +from a reader in a certain amount of time, it can assume an open-loop +situation, and then just continue. + +The last edition of MIDI Files contained a specialized protocol for +sending just MIDI Files. To meet a deadline, unfortunately I don't have +time right now to propose a new generalized protocol. This will be done +within the next couple of months. I would welcome any proposals anyone +else has, and would direct your attention to the proposal from Ralph +Muha of Kurzweil, available in a recent MMA bulletin, and also directly +from him. + + +-- +Michael S. Czeiszperger | "The only good composer is a dead composer" +Systems Analyst | Snail: 2015 Neil Avenue (614) +The Ohio State University | Columbus, OH 43210 292- +ARPA:czei@accelerator.eng.ohio-state.edu PAN:CZEI 0161 diff --git a/midiseq/DOCS/MIDIMERG.TXT b/midiseq/DOCS/MIDIMERG.TXT new file mode 100644 index 0000000..0964b98 --- /dev/null +++ b/midiseq/DOCS/MIDIMERG.TXT @@ -0,0 +1,989 @@ +############# +# The following is 'midimerge' from the midi-archive. +############# + +This is a collection of MMML messages concerning MIDI merging. +It's sorted chronologically, mostly. +=============================================================== +>From uucp Mon Feb 13 14:15 EST 1989 +>From rft Mon Feb 13 13:20 EST 1989 remote from cblpe + +To: All MMMLers +Subject: Merging MIDI sources together + +I need to merge two (possibly more) MIDI out signals together. +Any recommendations? + +Rick Taylor +cblpe!rft +CB 1D343 +614-860-2006 + +>From uucp Mon Feb 13 16:08 EST 1989 +>From wbf Mon Feb 13 16:04 EST 1989 remote from cbema +Subject: MIDI Merging + +Rick, + + Come see my Digital Music MX-8 to see if it is what you want. If +you don't really need merging, a swith box is all you need. These are less +expensive to buy and you can build your own if you like. + +Bill Fox cbema!wbf + + +>From tjt Mon Feb 13 23:32 EST 1989 +To: midi +Subject: Re: MIDI Merging + +>From mosc Mon Feb 13 22:41:17 1989 remote from aloft +From: aloft!mosc (52232-H. S. Moscovitz) + +I have read some comments on midi-mergers on the MMML. I will share +my experience on the subject. Understanding these devices is fairly +simple, not quite as tricky as microcode programming a floating point +DSP chip. + +I have the J. L. Cooper MSB Plus midi-merge/router/filter/transposer +box. It provides 8X8 midi routing and switching, and id can merge any +two inputs to any of 8 outputs. It is very programmable and stores +about 64 settings (I use only two). It has two independent midi +processors that can do channel bumping, transposition and midi +filtering. You can filter note, pitch bend, controller, after-touch, +program changes, real time, and/or systems exclusive/systems common +commands. + +The MSB is hard to beat in the user friendliness department. This unit +is sure to please any macho-hard-core-techno electronic musician. You +won't find any whimpy graphical liquid crystal displays on this +device. Here's the scoop on one of the refreshing highlights of the user +interface directly from the owners manual: "The program memory and +display of the MSB Plus use a modified Octal from, rather than the +normal decimal due to the 8 select push buttons. That is, instead of +showing (and selecting) patches 1 thru 64, you will use 11 thru 88. In +this system, for example, patch 21 is directly after 18." After +careful study, I have determined that the modified octal system is +very much like the conventional octal system, except that the 0 digit +is not used, but 8 is. Pretty nice huh? But wait, there's more: +For the sake of consistency, the MSB Plus uses the modified hexidecimal +number system for representing midi channels. I am pleased to see the +manufacturer boldly offer a novel new number system where 'F'==15, +and '0'==16. + +An unexpected feature is the red panic button. It is a momentary +on/off switch that generates a very complex sequence of midi events to +intended to turn off all stuck-on notes in your midi network. It +starts off with a simple midi "all notes off" message and then sends a +complex sequence of midi events on all channels for five seconds, or +until you release the button. This sequence is a paranoid midi +musician's dream. + +When I first got the unit home I was curious, so I began setting up +various pathological midi hook-ups to see if I could find the panic +button's limitations. The MSB's flexible routing capabilities made it +easy to set up variations on infinite midi loops, even with automatic +transposition! The waves of sound generated by my synthesizers were +electrifying. (I'm sure Jimi Hendrix would have switched to keyboards +had he heard this.) The MSB has shown me there are vast new musical +horizons. The panic button does its assigned job flawlessly. + + Howard Moscovitz + att!aloft!mosc + +>From uucp Tue Feb 14 12:12 EST 1989 +>From gjm Tue Feb 14 11:50:10 EST 1989 remote from coma +Subject: Re: JLCooper MSB+ + +I can second Howard Moscovitz's recommendation of the MSB+. I have found +it essential for coordinating many synths and dealing with various pieces +of software (different provisions for echo, etc.). If you have two devices +that are the same (e.g. TX81Z's, or TF1 modules in a TX rack), it is useful +for configuring them separately (e.g. separating them out of lock-step with +the same system channel to different system channels). + +I regularly use the midi merge capability, but have experienced data loss +under heavy load (sequencer + keyboard), so be forwarned. The KX88 merges +its input to its output port -- this is the most common merging that I want +(sequencer + KX88 keyboard) and it seems to be able to handle the merge +with fewer problems than the MSB+. Both can run into problems with large +data dumps (an obvious midi merge problem). + +How well do some of the other midi switch/merge boxes behave under heavy +load or sysex dump conditions? + +-Gary + +P.S. Sorry about the duplicate article (Research mailer vs. BSD Mail confusion). + +>From tjt Tue Feb 14 12:38 EST 1989 +To: midi +Subject: Re: JLCooper MSB+ + +> >From gjm Tue Feb 14 11:50:10 EST 1989 remote from coma +> I regularly use the midi merge capability, but have experienced data loss +> under heavy load (sequencer + keyboard), so be forwarned. The KX88 merges +> its input to its output port .... and it seems to be able to handle the merge +> with fewer problems than the MSB+. Both can run into problems with large +> data dumps (an obvious midi merge problem). + +The reaction of the KX88 to large data dumps is pretty amusing - on mine, +at least, it just goes completely bananas, LED's blinking wildly, and refuses +to do anything unless you power cycle it. Does the MSB+ react in the +same catastrophic way? ...Tim... + +>From tjt Tue Feb 14 13:30 EST 1989 +To: midi +Subject: re: COoPer OctAl pAnic + +>From mosc Tue Feb 14 13:13:54 1989 remote from aloft +From: aloft!mosc (52232-H. S. Moscovitz) + +In response to Andy McDonough: + + do they charge money for this? are they available? + +Yes one can purchase a Cooper MPU Plus for somewhere around $350 (if +my memory serves me well, which it usually doen't). It really is a +very nice box that makes it much easier to manage a midi network with +several possible controllers and many sound generators. It is really +overkill if all that is needed is a midi merger. + +I have been told that nobody makes a merger that can mix more than +two midi inputs. Does anybody know for sure the correctness of this +statement? + +>From uucp Mon Feb 20 16:19 EST 1989 +>From gjm Mon Feb 20 16:14:21 EST 1989 remote from coma +Subject: RE: JLCooper MSB+ + +I haven't observed catastrophic failure with the MSB+ due to overloading +the merge function. I have observed lost data, mostly audible by loosing +a Note Off (On 0) message which results in stuck notes (time to hit the +panic button). + +-Gary + +>From uucp Thu Jan 4 13:42 EST 1990 +>From nsw Thu Jan 4 13:41:50 1990 remote from cord +Received: by cord.garage.att.com; 9001041841 +Date: 4 Jan 90 13:41:50 EST (Thu) +From: Neil Weinstock +Subject: Re: MIDI Thru +Message-Id: <9001041841.AA12828@cord.garage.att.com> +To: twitch!midi + + +A MIDI thru is essentially just a straight through connection from the MIDI +input. No processor or UART gets involved; it's just a very simple +bit of wiring. That's why so-called "MIDI Thru boxes" are very cheap. + +A more appropriate place for a device's internally generated MIDI data to be +merged with the input data would be at a MIDI output, though this function +is seldom seen on synthesizers. It is found on some MIDI master controllers, +which may (as in the Roland A-80) perform some massaging of the input data +before merging it into the output. + +If you want this function but your synth doesn't support it, you could +get a similar effect by placing the synth's MIDI out and thru into a merger +(e.g., Pocket Merge). + + ________________ __________________ _________________________ +//// \\// \\// \\\\ +\\\\ Neil Weinstock //\\ att!cord!nsw or //\\ "Your hair is so... //// +//// AT&T Bell Labs \\// nsw@cord.att.com \\// lustre-laden." - Moss \\\\ +\\\\________________//\\__________________//\\_________________________//// + +>From tjt Fri Aug 4 16:03 EDT 1989 +To: midi +Subject: re: Midi Masters and Slaves + +>From arpa!STONY-BROOK.SCRC.Symbolics.COM!ESC Fri Aug 4 13:15 EDT 1989 remote from att +From: Eric S. Crawley + + Date: Thu, 3 Aug 89 19:35 EDT + From: twitch!midi-request@att.att.com + + #### Forwarded from the Mostly MIDI mailing list (twitch!midi) #### + >From uucp Thu Aug 3 18:22 EDT 1989 + >From srm Thu Aug 3 17:21 CDT 1989 remote from ihlpm + To: twitch!midi + Subject: re: Midi Masters and Slaves + + If you want to get fancier, there are a variety of MIDI patch bay/merger/processor + boxes which cost much more. I haven't really investigated these much further + since all I really want is a cheap switcher. Anyone care to comment here? + + Sam Mullins + +Sure, I'll comment: + +I have been using a JLCooper MSB+ switcher as the center of my MIDI +network for almost a year and can't live without. I initally bought a +DMC MX-8 switcher/processor and actually liked it better than the MSB+ +but I needed the 2 extra inputs provided by the MSB+. + +Both units allow switching (MSB+ is 8x8 and the MX-8 is 6x8) and both +have 2 "processors" that allow you to process data from 2 separate +inputs by filtering out unwanted data (SYSEX, realtime, program change, +aftertouch, etc.) and by changing the channel of the data. The MX-8 +goes much further by allowing you to do velocity cross-switching, delay +and MIDI echo, and keyboard range mapping. The MX-8 was also cheaper at +the time. Both units allow the outputs of the "processors" to be merged +at any output. + +Both units are programmable and allow you to select an input and channel +to send program change commands that change the program of the switcher. +Each program can send a number of program change commands to every +output on various channels. So, you could have the switcher set up +every slave when you select a program on the switcher. + +I have my MSB+ set up so it responds to program change commands from my +master controller keyboard. I just select different programs on the +controller to select different configurations. I leave the MIDI +transmit channel of both of my controllers set to channel 1 and use the +MSB+ to change the channel for a particular slave. That way, I don't +have to worry about changing things on my controllers. + +A switcher is a must if you use a computer as a sequencer and patch +editor. You would have to recable every time you wanted 2 way +communication between a slave module and the computer if the slave +doesn't have a keyboard on it. + +I could go on, but I think this is a good summary. If anyone wants more +details, I would be happy to provide them. + +>From uucp Mon Aug 7 09:06 EDT 1989 +>From gfd Mon Aug 7 09:00:38 1989 remote from mtdca +FROM: g.f.demarest +TO: twitch!midi +DATE: 7 Aug 1989 9:00 EDT +SUBJECT: switcher + +> I have been using a JLCooper MSB+ switcher as the center of my MIDI +> network for almost a year and can't live without. I initally bought a +> DMC MX-8 switcher/processor and actually liked it better than the MSB+ +> but I needed the 2 extra inputs provided by the MSB+. + + +Any prices on these boxes? Is that 6 in 8 out? Thrus? Merging? + +>From uucp Thu Mar 1 23:02 EST 1990 +>From upheisei!rick Fri Mar 2 12:04 JST 1990 remote from attunix +To: upheisei!attunix!twitch!midi +Date: 1990 Feb 24 Thu 1.27.82 EMT +Subject: midi boxes + +One quick item: I bought a "midi through" box and quickly discovered to +my chagrin that it can't merge MIDI channels. I recommend against buying +any box that can't merge channels. When I bought it, I wasn't thinking about +that eventuality, but I turned out to really need it; now I flip knobs all +the time because I don't have it. + Rick + +>From uucp Mon Aug 7 17:16 EDT 1989 +>From STONY-BROOK.SCRC.Symbolics.COM!ESC Mon Aug 7 15:21 EDT 1989 remote from arpa +Received: from DJINN.SCRC.Symbolics.COM by STONY-BROOK.SCRC.Symbolics.COM via CHAOS with CHAOS-MAIL id 637653; 7 Aug 89 15:31:47 EDT +Date: Mon, 7 Aug 89 15:21 EDT +From: Eric S. Crawley +To: midi@twitch.att.com +In-Reply-To: The message of 7 Aug 89 10:14 EDT from twitch!midi-request@att.att.com +Message-ID: <19890807192135.0.ESC@DJINN.SCRC.Symbolics.COM> + + Date: Mon, 7 Aug 89 10:14 EDT + From: twitch!midi-request@att.att.com + + #### Forwarded from the Mostly MIDI mailing list (twitch!midi) #### + >From uucp Mon Aug 7 09:06 EDT 1989 + >From gfd Mon Aug 7 09:00:38 1989 remote from mtdca + FROM: g.f.demarest + TO: twitch!midi + DATE: 7 Aug 1989 9:00 EDT + SUBJECT: switcher + + > I have been using a JLCooper MSB+ switcher as the center of my MIDI + > network for almost a year and can't live without. I initally bought a + > DMC MX-8 switcher/processor and actually liked it better than the MSB+ + > but I needed the 2 extra inputs provided by the MSB+. + + + Any prices on these boxes? Is that 6 in 8 out? Thrus? Merging? + +As I recall, they were around $350+ or so but my memory isn't too great. +The MSB+ was closer to $400. The MX-8 is 6 in, 8 out and the MSB+ is 8 +in, 8 out. There are no MIDI-Thrus and if you think about it for a +minute, you realize that a thru on a switcher is not a good idea. Both +units will merge any two inputs to any number of outputs (that is one of +the most important features!). + +>From uucp Sun Jun 17 20:00 EDT 1990 +>From westmark!s4mjs!mjs Sun Jun 17 18:33:24 1990 remote from att +Received: by westmark.UUCP (smail2.5) + id AA17184; 17 Jun 90 18:33:24 EDT (Sun) +Received: by s4mjs.uucp (/\=-/\ Smail3.1.16.1 #16.20) + id ; Sun, 17 Jun 90 18:11 EDT +Message-Id: +Date: Sun, 17 Jun 90 18:11 EDT +From: mjs@s4mjs.uucp (M. J. Shannon) +To: midi@twitch.att.com +Subject: Confusion? + +Here's my current setup: + + (Computer) (drums) (tones) ++---------+ +------------+ +------------+ +| out|--------->|in HR-16 out|--------->|in FB-01 out|--\ +| MQX-16S | +------------+ +------------+ | +| in|<-------------------------------------------------/ ++---------+ + +No matter which order I put the modules in, I lose the capability of +getting system exclusive responses from *one* of them! Surely I'm not +the first person in the world to come to this conclusion, so I guess my +question is: what piece of hardware do I need to get *both* sets of +system exclusive responses (and more, if/as/when I manage to expand my +setup)? + +I assume my setup must change to: + ++---------+ +------------+ +------------+ +| out|--------->|in HR-16 out|--------->|in FB-01 out|--\ +| MQX-16S | +------------+ +------------+ | +| | |thru | +| in|<---------------------------\ inV | ++---------+ \ +------------+ | + \---|out MAGIC in|<-/ + +------------+ + +or (I guess this is preferable): + ++---------+ +-------------+ +------------+ +| out|--------->|in FB-01 thru|-------->|in HR-16 out|--\ +| MQX-16S | +-------------+ +------------+ | +| | |out | +| in|<----\ inV | ++---------+ \ +------------+ | + \---|out MAGIC in|<------------------------/ + +------------+ + +Now, given that such a MAGIC box exists, it would probably come in two +different flavors: merger (always merges its inputs) and switch (allows +reception of a single input). For each flavor, how many inputs could I +get merged/switched, and what's it gonna cost me? Do any of you have +such a beasty that you would recommend (for or against!)? + +For the record, it is *not* critical the way I currently use the setup, +but it will be in the forseeable future. + + Thanks for any advice, + Marty Shannon + +P.S. Them pictures are a pain to draw! + +>From uucp Mon Jun 18 00:40 EDT 1990 +>From upheisei!rick Mon Jun 18 11:24 JST 1990 remote from attunix +To: upheisei!attunix!twitch!midi +Date: 1990 Mai 24 Thu 1.00.56 EMT (90/06/18 Mon 02:24 GMT) +Subject: merge? + +Marty Shannon: While I don't have a merge box myself, it sounds like +you need one. I don't know of any that can merge > 2 inputs, but then +I haven't looked very closely. I do continue to kick myself for NOT +getting a merge box (I got a switch box). + +Drawing diagrams. Sounds like you need a more powerful text editor. +I happen to know that the AT&T Toolchest has a version of EMACS that +has an over-write mode. Makes it much easier to draw such pictures. +There are probably other editors out there as well that can do it... + + Rick + +>From uucp Mon Jun 18 12:14 EDT 1990 +>From wbf Mon Jun 18 11:13 EDT 1990 remote from cbema +Subject: Marty Shannon's Confusion + +/-----------\ /---------\ /---------\ /---------------\ +| SEQUENCER | | DRUMS | | TONES | | YOUR NEXT TOY | +| in out | | in out | | in out | | in out | +\-----------/ \---------/ \---------/ \---------------/ + | | | | | | | | + | | | | | | | | +/--------------------------------------------------------------\ +| out in out in out in out in | +| ONE HECKUVA MAGIC BOX! | +\--------------------------------------------------------------/ + +The above figure is what it sounds like you need, Marty. The magic box +could be a Digital Music MX-8 or a KMX MIDI Central (15 in/16 out) or some +equivalent box. I'm not familiar with the KMX, but the add says it does +merging. From the picture, it looks like only inputs 1 and 2 can be merged +but that may be misleading. Better check that out for yourself. I have +the Digital Music and it includes two "processors." Each processor can do +many types of operations like merging, filtering, keyboard splitting, +re-channelizing, etc., and accepts data from any two inputs. It is, +however, only 6 in by 8 out... or is that 8 x 6? I forget which way it is. + +Note that no THRUs are shown in the diagram above. You can add things like +and Alesis Midiverb II so that it gets program change commands sent to its +input from the thru output of the drum machine, for example. Since this +reverb doesn't do bulk dumps (it's not programmable) you won't have to +waste an input/output pair on the switch/merger/magic box. + +Bill Fox cbema!wbf + + +>From tjt Mon Jun 18 11:52 EST 1990 +To: midi +Subject: Re: Confusion? + +> > THRU boxes are also a potential solution. They give you +> Do they exist with multiple INs and a single OUT? + +You definitely need at least a merger. Simple ones can be gotten +for under a hundred dollars (I have a J.B.Cooper one that looks ugly +but has various dip switches for filtering things separately on each +of the 2 input channels). How much are those tiny Anadek (sp?) ones? +I've never seen a merger with more than 2 inputs, but I assume you +could gang them together - anyone have a system where they need to do +that? ...Tim... + +>From uucp Mon Jun 18 15:48 EDT 1990 +>From nsw Mon Jun 18 14:47:52 1990 remote from edsel +Received: by edsel.garage.att.com; 9006181847 +Date: 18 Jun 90 14:47:52 EDT (Mon) +From: Neil Weinstock +Subject: Mergers and Acquisitions (of mergers) +Message-Id: <9006181847.AA13558@edsel.garage.att.com> +To: twitch!midi + +Tim asked if anyone has a system where they need to have ganged mergers, +or many lines merged into one. Well, consider a system (similar to mine, not +so coincidentally ;-) where the computer is used for sequencing and sys-ex +storage, and there are several slave instruments plus a keyboard or two. +*Everything* needs to have input to the computer (for librarian purposes), +and this implies a many->one merger. I think this is similar to the +configuration that started this thread. + +The obvious alternative is to take some MIDI switcher (a la MX8), and use +different patches to allow various instruments to send data to the computer. +That's not too bad, as it only requires some button pushing (infinitely better +than cable-jockeying.) + +However, it sure would be nice to have all the outs plugged into a mega-merger, +with the merger output going to the computer. Even though a single MIDI line couldn't handle 4 instruments doing sys-ex dumps at the same time, I doubt that would ever happen. Typically, you'd be doing serious sys-ex work with +only one box at a time, or at least you could restrict yourself to that in +order to avoid blowing away the merger. + + - Neil + +--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-- +Neil Weinstock @ AT&T Bell Labs // What was sliced bread +att!edsel!nsw or nsw@garage.att.com \X/ the greatest thing since? + +>From uucp Mon Jun 18 18:06 EDT 1990 +>From rft Mon Jun 18 16:01 EDT 1990 remote from cblpe + +To: midi +Subject: merge boxes + + +I have an Anatek merge box that merges two inputs to a single output. +The list price is $100, but the discount price is about $90. +It does not require batteries (it steals power from the MIDI circuit) +and it is very small, about 3x2x2. + +I use it to merge the output of two keyboards. +The merged output is used as input to my sequencer. +I have not noticed any lost data. +I am happy with the Anatek merge box and it seems to suit my needs +just fine. + +I am sure there is an upper limit on the box's capacity to merge two +simultaneous data streams, but I am not sure what the limit is. +There may be problems if you are trying to dump the memory of one synth +while trying the play notes/dump data on/from another synth. +You may lose data. +If you just want to do dumps from one synth at a time, everything +should be fine. + +You can gang the Anatek mergers if more merging capability is needed. +I seem to recall they recommend using a maximum of 4 before plugging into +some type of MIDI gear. +This would allow you to merge 5 units into one MIDI data stream. +Also I seem to recall that Anatek uses some sort of data compression +when the two MIDI data streams are merged. +I think the Anatek merge box outputs a data stream that uses running status. +This may cause problems for some applications. +I will try to check on this sometime this week. + +Running status is where the only the first message of a data stream targeted +to a given channel includes the status byte. +The status byte includes the message type, e.g. note on , note off, and +the channel number. +The status byte is then sent only when the message type changes. + +Anatek also has a new "studio" version that can merge 7 or 8 inputs (I don't +remember which, I have a spec sheet at home and I can post more info if anyone +wants more details) and also includes some sort of patch bay facilities. +I don't know the price. + + +Rick Taylor + + +>From tjt Mon Jun 18 16:32 EST 1990 +To: midi +Subject: re: Mergers and Acquisitions (of mergers) + +> *Everything* needs to have input to the computer (for librarian purposes), +> and this implies a many->one merger. + .... +> The obvious alternative is to take some MIDI switcher (a la MX8), and use +> different patches to allow various instruments to send data to the computer. +> That's not too bad, as it only requires some button pushing (infinitely better +> than cable-jockeying.) +> However, it sure would be nice to have all the outs plugged into a +> mega-merger, with the merger output going to the computer. + +I agree. Makes me wonder why we haven't seen such things. I guess one +reason might be that if you have 2 identical synths (not unusual - I have +a small setup, but still have 2 TX81Zs), and you send a sysex message +that requests a dump to be sent to the computer, how do you identify +which one you want to send the dump? Guess we need synth id's something +like SCSI id's. ...Tim... + +>From uucp Mon Jun 18 17:29 EDT 1990 +>From gjm Mon Jun 18 16:29:17 EDT 1990 remote from coma +To: twitch!midi +Subject: Re: Mergers and Acquisitions (of mergers) + + +I second what Neil said about using different patches on your MIDI switch +box. The JLCooper MSB+ accepts program change commands to switch patches, +I'm sure that the other boxes do to. So your program should be able to +switch patches to talk to appropriate devices as needed, one (or two at +most) at a time. I haven't tried any switch box patch changes which do +anything that is time critical, so if you're interested in sw.box patch +changes during a performance, you'll probably have to construct your own +tests and try out a box before you buy it. + +-Gary + +>From uucp Mon Jun 18 19:51 EDT 1990 +>From greg Mon Jun 18 17:48 CDT 1990 remote from iwtgp +From: iwtgp!greg (Gregory A Youngdahl +1 708 979 0013) +To: twitch!midi +Subject: Midi Switcher Construction + +Hi all, + + Just thought I'd add my 2 cents worth and remind everyone about +the Electronic Musician article in the Aug. '87 issue called "MIDI +Switcher Primer". Its not a merger, and it sounds like that is what +is required to satisfy the need that started this thread, but if a +switch would suffice, and build-it-yourself intrigues you, this article +describes how to do it. It is an electronic switch, complete with +opto-isolation per the MIDI standard. It also wouldn't be too hard to +wire up a MIDI version of the RS-232 or Parallel 'T' switches that +select various serial or parallel devices to connect to computer ports. +I'm sure parts for a 'T' switch solution would be available at the local +Parts-R-Us (Radio Shack) for much less than the $100 merger. + + I can supply copies of the Electronic Musician article (reprinted +without permission) if anyone is interested. + +Greg Youngdahl AT&T Bell Laboratories Naperville, IL +att!iwtgp!greg + +>From uucp Mon Jun 18 22:52 EDT 1990 +>From druwy!mab Mon Jun 18 19:44:46 1990 remote from mtuxo +FROM: druwy!mab +TO: mtuxo!twitch!midi +DATE: 18 Jun 1990 19:44 MDT +SUBJECT: re: Mergers and Acquisitions (of mergers) + +> reason might be that if you have 2 identical synths (not unusual - I have +> a small setup, but still have 2 TX81Zs), and you send a sysex message +> that requests a dump to be sent to the computer, how do you identify +> which one you want to send the dump? Guess we need synth id's something +> like SCSI id's. ...Tim... + +Most of the synths I've played with include a system channel in their +sysex messages. If you have two identical synths, you can set them to +different system channels so that you can control them separately. I've +seen this on several Kawai synths, FB-01, and CZ-1000. All of them with +the possible exception of the CZ would remember their system channel when +powered off, although that blasted K5 requires you to manually enable +receipt of sysex messages after power-up. Same for FB-01. Maybe someday +the designers will realize we want hands-off MIDI control of all of our +toys. + +Alan + +>From uucp Tue Jun 19 10:10 EDT 1990 +>From honet4!dob Tue Jun 19 09:02 EDT 1990 remote from att +From: honet4!dob (Duane O Bowker +1 201 949 2607) +To: att!twitch!midi +Subject: Mergers, etc. + +Hi. Just wanted to add two cents to Neil's comments RE: MX8. That looks +like the way to go for many inputs to PC in librarian situations. You CAN +get by without any button pushes since the MX8 is itself switchable via +MIDI program change commands, if you configure it to be. So you would have +an MX8 set for librarian/editor A, another for librarian/editor B, another +for playing MIDI guitar into synth module C, et cetera...then build into +your librarian/editors appropriate program change commands to MX8 to switch +among the MIDI configurations. Other cool trick that I use in my lab at +work quite a bit: MX8 set-ups can include up to 8 program change commands +sent to MIDI outputs of MX8. In other words, I can send one program change +to the MX8 and that will configure essentially all the MIDI stuff in the lab. +(The MX8 holds the "macro set-ups", if you will, for the laboratory). + + Duane Bowker + att!honet4!dob + +>From tjt Tue Jun 19 09:43 EST 1990 +To: midi +Subject: Re: Mergers and Acquisitions (of mergers) + +>From mosc Tue Jun 19 08:16:09 1990 remote from aloft +From: aloft!mosc (52842-H. S. Moscovitz) + +This is a comment on real time patch changes on the JLCooper MSB+. +I have one of these devices and you can do this sometimes. It is +not repeatable. The safest think is don't send midi information +on your network for about 1 second after you told the MSB+ to +change patches. Maybe they should have called this box the MSB-. + Howard Moscovitz + aloft!mosc + +>From uucp Tue Jun 19 14:40 EDT 1990 +>From billb Tue Jun 19 13:39:42 1990 remote from mtunj +Received: by mtunj.ATT.COM (smail2.6) + id AA02897; 19 Jun 90 13:39:42 EDT (Tue) +To: twitch!midi +Subject: Re: Mergers and Acquisitions (of mergers) +Message-Id: <9006191339.AA02897@mtunj.ATT.COM> +Date: 19 Jun 90 13:39:42 EDT (Tue) +From: billb@mtunj.ATT.COM (William Burnette) + + +>> This is a comment on real time patch changes on the JLCooper MSB+. +>> I have one of these devices and you can do this sometimes. It is +>> not repeatable. The safest think is don't send midi information +>> on your network for about 1 second after you told the MSB+ to +>> change patches. Maybe they should have called this box the MSB-. +>> Howard Moscovitz +>> aloft!mosc +>> +There is a bug in the MSB+, probably in the implementation of +running status. If a program change directed to the MSB+ +is followed by sysex to anywhere, the MSB+ changes patches +again, probably to some number found in the sysex data. +I've found that a workaround is to follow the MSB+ patch +change by a patch change or note off to some channel +other than the MSB system channel. This seems to allow +speedy MSB+ patch changes. I haven't used this method +in a song sequence, only in a patch editor. + + Bill Burnette + mtunj!billb + + +>From uucp Wed Aug 9 11:26 EDT 1989 +>From srm Wed Aug 9 10:25 CDT 1989 remote from ihlpm +To: twitch!midi +Subject: MIDI switcher revisited + + + +Hi Midi-mailers: + +Last week I had said that I had been looking for a cheap MIDI switcher +for some time but had not found anything. My equipment consists of +a Casio CZ-1 keyboard, a Roland MT-32, a Roland MKS-100 sampler and +an Atari ST. Because I need to have 2-way communication between +each synth and the computer, I need at least 4-in switcher/thru box. +(I won't bore you with all of the possible configurations.) +I thought that I had a lead on a realtively cheap +Sonus box but that turned out to be only 2-in. So I was back to the +cheapest alternative being a Kawai 4-in 8-out for about $125. +Keep in mind that this buys you no memory or processing. I guess +I don't understand why these things are so expensive. + +I had toyed with the idea of building my own but really didn't want to +spend time to deal with all the active electronics necessary for the +"thru" part of the box. The switching part is easy. + +Finally I arrived at a compromise. I realized that I don't have many +delay problems by daisy chaining using the thru ports on my synths. +The real problem I was trying to solve was that I need to have any of +the synth's outputs feed the Atari's input. So, last night I just built a +simple switcher. A project box, 4 5-pin DIN connectors, a double-pole +quadruple-throw switch and some wire. About $9 at Radio Schlock. It +took me about 2.5 hours and I'm really not too swift with a soldering +iron. + +Here is my current setup (I tried to draw a picture but it was getting +frustrating.) + +ST out ---> CZ-1 in +CZ-1 thru ---> MT-32 in +MT-32 thru ---> MKS-100 in + +CZ-1 out ---> switch input 1 +MT-32 out ---> switch input 2 +MKS-100 out ---> switch input 3 +Switch output ---> ST in + +This allows me to run patch librarians for the Roland things which have +a 2-way protocol for bulk transfers. + +If I decide that I can't live with the delays on the thru ports, then I will +buy one of those MIDIMIX 6 thru devices for $35. I still have one switch +position open if I want to add one more input. + +I realize that this is NOT practical for those of you with a much larger +setup but for me it is great. It did exactly what I wanted and I saved +at least $100. I don't really need merging or a thru capability.... yet :-) + +Sam Mullins + +>From att!messy.bellcore.com!mo Thu Aug 2 19:01:19 0700 1990 +Received: by att.att.com; Thu Aug 2 19:03:29 1990 +Received: by messy.bellcore.com (5.61/1.34) + id AA08681; Thu, 2 Aug 90 19:01:19 -0700 +Date: Thu, 2 Aug 90 19:01:19 -0700 +From: mo@messy.bellcore.com (Michael O'Dell) +Message-Id: <9008030201.AA08681@messy.bellcore.com> +To: midi@twitch.att.com +Subject: KMX Midi Central... + +I have two and love them. + +The KMX only costs a bit more than the others and you get +a completely general cross-bar - one gozoutta and one gozinna +per midithing back to the KMX. works like a dream.... + +oh yes - has a merger in 1 & 2, which I route to outputs 14 & 15 +so I can run anything into the merger and through as well. + +quality stuff! + -Mike +>From att!media-lab.media.mit.edu!joe Thu Aug 9 16:41:45 EDT 1990 +Received: by att.att.com; Thu Aug 9 16:40:58 1990 +Received: by media-lab.media.mit.edu (5.57/DA1.0.2) + id AA28488; Thu, 9 Aug 90 16:41:45 EDT +Date: Thu, 9 Aug 90 16:41:45 EDT +From: Joe Chung +Message-Id: <9008092041.AA28488@media-lab.media.mit.edu> +To: midi@twitch.att.com +Subject: Opcode Studio 3 + + +I think someone on this list asked about this box & I replied more or less +in favor of it... I've changed my mind!! + +IT STINKS!!! + +I found that it has *massive* problems dealing with slightly flaky +time code when used as a SMPTE to MIDI Time Code converter. I found +that when a SMPTE dropout occurs, the box can end up mis-synched by +over 15 frames, and remain mis-synched after good SMPTE is available. + +I called a not-very-well-informed tech person at Opcode who seemed to +think that this behavior was part of the box's algorithm to jam +through dropouts (known as non-continous jam synch). I explained to +him *very* vocally that non-continous jam synch mode is something +which you *have* to be able to turn off, and that in any case, you +rarely want it for Midi Time Code conversion. You almost always want +the real numbers even if there's a drop out or discontinuity, since +good software can theoretically correct for errors. (note that this +stuff has nothing to do with the "Jam" button on the front of the +box... That seems to be for SMPTE copying only. + +One factor may have been that I was using 25fps SMPTE... They may have +a bug at this rate which they haven't noticed so far. I'm going to try +to talk to someone who had something to do with building the thing. +(The guy I talked to said "25 FRAMES PER SECOND???" ... I said "yeah, +that's the European standard." He said "no it isn't, it's 24!" Guess +who was right.) + +Conclusion: Be extremely careful if you want to use this thing. It +will probably behave OK as long as your SMPTE is flawless, but in my +experience, you always get a few little glitches here and there. +Winding up miss-synched is so incredibly annoying (and in my case +unusable) that the dangers of this box should be carefully considered. + +On the other hand, I bought it from Sam Ash for $300, and it is +currently the only rack-mount MIDI interface. It also has a built-in +power supply & detachable cord instead of an external transformer & +flimsy little cable. + +The only SMPTE->MTC converter that I would be caught dead with is the +Adam Smith Zeta-3. It is a way-pro device & costs it (~$2500)... It is +also one of the best two-transport tape synchronizers around. + +I also messed a bit with the Tascam MIDIizer. I dont' recomend it. We +had a bunch of flakiness, also featuring random miss-synchs. It's a +real pain in the butt to use as a straight SMPTE->MTC converter as +well. + +By the way... Anyone mess with the Roland A-880 MIDI patch bay? I had +huge problems with this thing when I used it's merge function. Ever +notice that Roland equipment is very cavalier about sending random +sustain/omni-mode/whatever offs? Why don't they ever let you defeat +these "features?" + +>From keyhole!tjt Mon Dec 3 21:05 EST 1990 +To: twitch!midi +Subject: re: Midi Cabling + +> I just want to be able to: +> 1) Drive the Korg from either the Keyboard or +> the computer WITHOUT messing with cables. + +You need a 'merger', a box with 2 MIDI in's and 1 MIDI out. +Anadek (sp?) makes a 'pocket merger' for < $100. The November 1990 +Electronic Musician magazine has a do-it-yourself project for building +a merger. + +> Can two 3-wire midi cables be "wire-or'ed"? + +In some situations it can work (if the 2 inputs are never +simultaneously active), but occasionally still produces garbage. +Anyone know if there are cases when it can actually damage +the equipment? ...Tim... + +>From homxb!gabin Tue Dec 4 08:21 EST 1990 +From: homxb!gabin (Jay Gabin +1 201 615 2830) +To: twitch!midi +Subject: re: Midi Cabling + + +About using merger cables and such... + +I had the same problem of wanting to drive my set-up from +my main keyboard or my computer without fooling with +cables. I bought a MIDI patch-bay (I think it's J. L. Cooper +and cost $80 mailorder). This has 3 inputs and 8 outputs. +With switches on the front, you can make each of the +outputs receive any of the 3 inputs. So, with a flick of +these switches I can bring the computer into or out of +the loop. + +Jay + +>From tjt Tue Dec 4 10:49 EST 1990 +To: midi +Subject: Re: Midi Cabling + +>From att!ifi.uib.no!gunnars Tue Dec 4 08:47:10 +0100 1990 +From: gunnars@ifi.uib.no (Stud. Gunnar Sylthe) + +James Fischer says: + +=> Can I do this? +=> +=> Keyboard M3R +=> Out ---------->----+-------> In +=> ^ +=> Computer | +=> Out ---------->----+ +=> +=> Computer M3R +=> In <------------------------ Out +=> +=> ... by soldering up a custom cable? Can two 3-wire midi +=> cables be "wire-or'ed"? +=> +=> Or must I buy a "Thru box" to do this? + +I think what you need is some kind of MIDI merge box. If I were you +I'd look into the Anatek PocketMerge. I've never used it myself, and +my sole "experience" with it is from reading the ads and a test in a +Norwegian musician's mag, but it is supposedly a cheap, simple and +reliable gadget which does one thing (merging to midi ins to one +midi thru) and does it well. + +If you do try it out, why not post some "test results" to the list? +I, for one, would be interested. + +--Gunnar Sylthe +gunnars@ifi.uib.no + +>From mtuxo!druco!mab Tue Dec 4 10:15 MST 1990 +To: mtuxo!twitch!midi +Subject: Anatek PocketMerge + +I bought the Anatek PocketMerge a while back and it works as advertised. +It has two INs that are merged into one OUT. I haven't stress-tested it, +so I don't know how well it would handle lots of simultaneous data from +both INs. My main use is to minimize cable swapping, so I rarely have +both INs feeding data at the same time. + + Alan Bland +>From mvgpl!mvcrg Tue Dec 4 15:50 EST 1990 +From: mvgpl!mvcrg (Christopher R Gayle +1 508 960 2904) +To: twitch!midi +Subject: merge box + +Did read in recent MMML items somewhere that there is a build-it-yourself +merge box? I'd like to know where to get the info to build one... has +anyone out there done this? If so, how did it perform? + +How about switchboxes? Are they too complicated for reliable hand-wired +projects? Any experience with these? + +- Topher Gayle x2904 mvcrg@mvgpl.att.com +>From keyhole!tjt Tue Dec 4 19:11 EST 1990 +To: twitch!midi +Subject: do-it-yourself merge box + +> From: mvgpl!mvcrg (Christopher R Gayle +1 508 960 2904) +> Did read in recent MMML items somewhere that there is a build-it-yourself +> merge box? I'd like to know where to get the info to build one... has + +The November 1990 issue of Electronic Musician magazine had an article +that showed how to build one. You can buy the PC board and programmed +EPROMS from the author of the article, for $28 and $10, respectively. + + ...Tim... + +>From tjt Tue Dec 4 19:19 EST 1990 +To: midi +Subject: Re: merge box + +From: ihlpe!greg (Gregory A Youngdahl +1 708 979 0013) + +Topher, + + The build-it-yourself box you are referring to may be the MIDI +switch box that I had mentioned a while back. This is an electronic +switch circuit described in an article in the Aug. '87 issue of +Electronic Musician. This circuit may be a solution to James' need +to avoid physically switching cables, but it is not a merger. I have +a copy of the article that I could send out if you are interested in +it. I have not built this unit, but I don't see why it wouldn't do +the job it is intended for. Of course the job could also be accomplished +with a mechanical switch. + +-- +Greg Youngdahl AT&T Bell Laboratories Naperville, IL +att!ihlpe!greg +>From tjt Wed Dec 5 11:48 EST 1990 +To: midi +Subject: Re: do-it-yourself merge box + +>From ihlpm!srm Wed Dec 5 09:37 CST 1990 + +>The November 1990 issue of Electronic Musician magazine had an article +>that showed how to build one. You can buy the PC board and programmed +>EPROMS from the author of the article, for $28 and $10, respectively. +> +> ...Tim... + +Before anyone goes to a lot of trouble....My brother just bought a Pocket +Merge for $59 for DJ's in ChicagoLand. At that price it may not be worth +building a kit for $38+. Of course, if you enjoy that kind of thing go ahead. + +Sam diff --git a/midiseq/DOCS/MIDINOTE.TXT b/midiseq/DOCS/MIDINOTE.TXT new file mode 100644 index 0000000..f050e9b --- /dev/null +++ b/midiseq/DOCS/MIDINOTE.TXT @@ -0,0 +1,19 @@ + Table 2: Summary of MIDI Note Numbers for Different Octaves + (adapted from "MIDI by the Numbers" by D. Valenti - Electronic Musician 2/88) + + +Octave|| Note Numbers + # || + || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +------------------------------------------------------------------------------ + 0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 + 1 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 + 2 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 + 3 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 + 4 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + 5 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 + 6 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 + 7 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 + 8 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 + 9 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 + 10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | diff --git a/midiseq/DOCS/MIDIPRIM.TXT b/midiseq/DOCS/MIDIPRIM.TXT new file mode 100644 index 0000000..b2426b7 --- /dev/null +++ b/midiseq/DOCS/MIDIPRIM.TXT @@ -0,0 +1,593 @@ + The USENET MIDI Primer + Bob McQueer + +PURPOSE + +It seems as though many people in the USENET community have an interest +in the Musical Instrument Digital Interface (MIDI), but for one reason +or another have only obtained word of mouth or fragmentary descriptions +of the specification. Basic questions such as "what's the baud rate?", +"is it EIA?" and the like seem to keep surfacing in about half a dozen +newsgroups. This article is an attempt to provide the basic data to +the readers of the net. + +REFERENCE + +The major written reference for this article is version 1.0 of the MIDI +specification, published by the International MIDI Association, copyright +1983. There exists an expanded document. This document, which I have not +seen, is simply an expansion of the 1.0 spec. to contain more explanatory +material, and fill in some areas of hazy explanation. There are no +radical departures from 1.0 in it. I have also heard of a "2.0" spec., +but the IMA claims no such animal exists. In any event, backwards +compatibility with the information I am presenting here should be +maintained. + +CONVENTIONS + +I will give constants in C syntax, ie. 0x for hexadecimal. If I +refer to bits by number, I number them starting with 0 for the low +order (1's place) bit. The following notation: + +>> + +text + +<< + +will be used to delimit commentary which is not part of the "bare- +bones" specification. A sentence or paragraph marked with a question +mark in column 1 is a point I would kind of like to hear something +about myself. + +OK, let's give it a shot. + +PHYSICAL CONNECTOR SPECIFICATION + +The standard connectors used for MIDI are 5 pin DIN. Separate sockets +are used for input and output, clearly marked on a given device. The +spec. gives 50 feet as the maximum cable length. Cables are to be +shielded twisted pair, with the shield connecting pin 2 at both ends. +The pair is pins 4 and 5, pins 1 and 3 being unconnected: + + 2 + 5 4 + 3 1 + +A device may also be equipped with a "MIDI-THRU" socket which is used +to pass the input of one device directly to output. + +>> + I think this arrangement shows some of the original conception + of MIDI more as a way of allowing keyboardists to control + multiple boxes than an instrument to computer interface. The + "daisy-chain" arrangement probably has advantages for a performing + musician who wants to play "stacked" synthesizers for a desired + sound, and has to be able to set things up on the road. +<< + +ELECTRICAL SPECIFICATION + +Asynchronous serial interface. The baud rate is 31.25 Kbaud (+/- 1%). +There are 8 data bits, with 1 start bit and 1 stop bit, for 320 +microseconds per serial byte. + +MIDI is current loop, 5 mA. Logic 0 is current ON. The specification +states that input is to be opto-isolated, and points out that Sharp +PC-900 and HP 6N138 optoisolators are satisfactory devices. Rise and +fall time for the optoisolator should be less than 2 microseconds. + +The specification shows a little circuit diagram for the connections +to a UART. I am not going to reproduce it here. There's not much +to it - I think the important thing it shows is +5 volt connection +to pin 4 of the MIDI out with pin 5 going to the UART, through 220 +ohm load resistors. It also shows that you're supposed to connect +to the "in" side of the UART through an optoisolator, and to the +MIDI-THRU on the UART side of the isolator. + +>> + I'm not much of a hardware person, and don't really know what + I'm talking about in paragraphs like the three above. I DO + recognize that this is a "non-standard" specification, which + won't work over serial ports intended for anything else. People + who do know about such things seem to either have giggling + or gagging fits when they see it, depending on their dispos- + itions, saying things like "I haven't seen current loop since + the days of the old teletypes". I also know the fast 31.25 + Kbaud pushes the edge for clocking commonly available UART's. +<< + +DATA FORMAT + +For standard MIDI messages, there is a clear concept that one device +is a "transmitter" or "master", and the other a "receiver" or "slave". +Messages take the form of opcode bytes, followed by data bytes. +Opcode bytes are commonly called "status" bytes, so we shall use +this term. + +>> + very similar to handling a terminal via escape sequences. There + aren't ACK's or other handshaking mechanisms in the protocol. +<< + +Status bytes are marked by bit 7 being 1. All data bytes must +contain a 0 in bit 7, and thus lie in the range 0 - 127. + +MIDI has a logical channel concept. There are 16 logical channels, +encoded into bits 0 - 3 of the status bytes of messages for +which a channel number is significant. Since bit 7 is taken over +for marking the status byte, this leaves 3 opcode bits for message +types with a logical channel. 7 of the possible 8 opcodes are +used in this fashion, reserving the status bytes containing all +1's in the high nibble for "system" messages which don't have a +channel number. The low order nibble in these remaining messages +is really further opcode. + +>> + If you are interested in receiving MIDI input, look over the + SYSTEM messages even if you wish to ignore them. Especially the + "system exclusive" and "real time" messages. The real time + messages may be legally inserted in the middle of other data, + and you should be aware of them, even though many devices won't + use them. +<< + +VOICE MESSAGES + +I will cover the message with channel numbers first. The opcode determines +the number of data bytes for a single message (see "running status byte", +below). The specification divides these into "voice" and "mode" messages. +The "mode" messages are for control of the logical channels, and the control +opcodes are piggybacked onto the data bytes for the "parameter" message. +I will go into this after describing the "voice messages". These messages are: + +status byte meaning data bytes + +0x80-0x8f note off 2 - 1 byte pitch, followed by 1 byte velocity +0x90-0x9f note on 2 - 1 byte pitch, followed by 1 byte velocity +0xa0-0xaf key pressure 2 - 1 byte pitch, 1 byte pressure (after-touch) +0xb0-0xbf parameter 2 - 1 byte parameter number, 1 byte setting +0xc0-0xcf program 1 byte program selected +0xd0-0xdf chan. pressure 1 byte channel pressure (after-touch) +0xe0-0xef pitch wheel 2 bytes gives a 14 bit value, least significant + 7 bits first + +Many explanations are necessary here: + +For all of these messages, a convention called the "running status +byte" may be used. If the transmitter wishes to send another message +of the same type on the same channel, thus the same status byte, the +status byte need not be resent. + +Also, a "note on" message with a velocity of zero is to be synonymous +with a "note off". Combined with the previous feature, this is intended +to allow long strings of notes to be sent without repeating status bytes. + +>> + From what I've seen, the "zero velocity note on" feature is very + heavily used. My six-trak sends these, even though it sends + status bytes on every note anyway. Roland stuff uses it. +<< + +The pitch bytes of notes are simply number of half-steps, with middle C = 60. + +>> + On keyboard synthesizers, this usually simply means which + physical key corresponds, since the patch selection will + change the actual pitch range of the keyboard. Most keyboards + have one C key which is unmistakably in the middle of the + keyboard. This is probably note 60. +<< + +The velocity bytes for velocity sensing keyboards are supposed +to represent a logarithmic scale. "advisable" in the words +of the spec. Non-velocity sensing devices are supposed to +send velocity 64. + +The pitch wheel value is an absolute setting, 0 - 0x3FFF. The +1.0 spec. says that the increment is determined by the receiver. +0x2000 is to correspond to a centered pitch wheel (unmodified notes) + +>> + I believe standard scale steps are one of the things discussed + in expansions. The six-trak pitch wheel is up/down about a third. + I believe several makers have used this value, but I may be wrong. + + The "pressure" messages are for keyboards which sense the amount + of pressure placed on an already depressed key, as opposed to + velocity, which is how fast it is depressed or released. + +? I'm not really certain of how "channel" pressure works. Yamaha + is one maker that uses these messages, I know. +<< + +Now, about those parameter messages. + +Instruments are so fundamentally different in the various controls +they have that no attempt was made to define a standard set, like +say 9 for "Filter Resonance". Instead, it was simply assumed that +these messages allow you to set "controller" dials, whose purposes +are left to the given device, except as noted below. The first data +bytes correspond to these "controllers" as follows: + +data byte + +0 - 31 continuous controllers 0 - 31, most significant byte +32 - 63 continuous controllers 0 - 31, least significant byte +64 - 95 on / off switches +96 - 121 unspecified, reserved for future. +122 - 127 the "channel mode" messages I alluded to above. See below. + +The second data byte contains the seven bit setting for the controller. +The switches have data byte 0 = OFF, 127 = ON with 1 - 126 undefined. +If a controller only needs seven bits of resolution, it is supposed to +use the most significant byte. If both are needed, the order is +specified as most significant followed by least significant. With a +14 bit controller, it is to be legal to send only the least significant +byte if the most significant doesn't need to be changed. + +>> + This may of, course, wind up stretched a bit by a given manufacturer. + The Six-Trak, for instance, uses only single byte values (LEFT + justified within the 7 bits at that), and recognizes >32 parameters +<< + +Controller number 1 IS standardized to be the modulation wheel. + +? Are there any other standardizations which are being followed by most + manufacturers? + +MODE MESSAGES + +These are messages with status bytes 0xb0 through 0xbf, and leading data +bytes 122 - 127. In reality, these data bytes function as further +opcode data for a group of messages which control the combination of +voices and channels to be accepted by a receiver. + +An important point is that there is an implicit "basic" channel over which +a given device is to receive these messages. The receiver is to ignore +mode messages over any other channels, no matter what mode it might be in. +The basic channel for a given device may be fixed or set in some manner +outside the scope of the MIDI standard. + +The meaning of the values 122 through 127 is as follows: + +data byte second data byte +122 local control 0 = local control off, 127 = on +123 all notes off 0 +124 omni mode off 0 +125 omni mode on 0 +126 monophonic mode number of monophonic channels, or 0 + for a number equal to receivers voices +127 polyphonic mode 0 + +124 - 127 also turn all notes off. + +Local control refers to whether or not notes played on an instruments +keyboard play on the instrument or not. With local control off, the +host is still supposed to be able to read input data if desired, as +well as sending notes to the instrument. Very much like "local echo" +on a terminal, or "half duplex" vs. "full duplex". + +The mode setting messages control what channels / how many voices the +receiver recognizes. The "basic channel" must be kept in mind. "Omni" +refers to the ability to receive voice messages on all channels. "Mono" +and "Poly" refer to whether multiple voices are allowed. The rub is +that the omni on/off state and the mono/poly state interact with each +other. We will go over each of the four possible settings, called "modes" +and given numbers in the specification: + +mode 1 - Omni on / Poly - voice messages received on all channels and + assigned polyphonically. Basically, any notes it gets, it + plays, up to the number of voices it's capable of. + +mode 2 - Omni on / Mono - monophonic instrument which will receive + notes to play in one voice on all channels. + +mode 3 - Omni off / Poly - polyphonic instrument which will receive + voice messages on only the basic channel. + +mode 4 - Omni off / Mono - A useful mode, but "mono" is a misnomer. + To operate in this mode a receiver is supposed to receive + one voice per channel. The number channels recognized will be + given by the second data byte, or the maximum number of possible + voices if this byte is zero. The set of channels thus defined + is a sequential set, starting with the basic channel. + +The spec. states that a receiver may ignore any mode that it cannot +honor, or switch to an alternate - "usually" mode 1. Receivers are +supposed to default to mode 1 on power up. It is also stated that +power up conditions are supposed to place a receiver in a state where +it will only respond to note on / note off messages, requiring a +setting of some sort to enable the other message types. + +>> + I think this shows the desire to "daisy-chain" devices for + performance from a single master again. We can set a series + of instruments to different basic channels, tie 'em together, + and let them pass through the stuff they're not supposed to + play to someone down the line. + + This suffers greatly from lack of acknowledgement concerning + modes and usable channels by a receiver. You basically have + to know your device, what it can do, and what channels it can + do it on. + + I think most makers have used the "system exclusive" message + (see below) to handle channels in a more sophisticated manner, + as well as changing "basic channel" and enabling receipt of + different message types under host control rather than by + adjustment on the device alone. + + The "parameters" may also be usurped by a manufacturer for + mode control, since their purposes are undefined. + + Another HUGE problem with the "daisy-chain" mental set of MIDI + is that most devices ALWAYS shovel whatever they play to their + MIDI outs, whether they got it from the keyboard or MIDI in. + This means that you have to cope with the instrument echoing + input back at you if you're trying to do an interactive session + with the synthesizer. There is DRASTIC need for some MIDI flag + which specifically means that only locally generated data is to + go to MIDI out. From device to device there are ways of coping + with this, none of them good. +<< + +SYSTEM MESSAGES + +The status bytes 0x80 - 0x8f do not have channel numbers in the +lower nibble. These bytes are used as follows: + +byte purpose data bytes + +0xf0 system exclusive variable length +0xf1 undefined +0xf2 song position 2 - 14 bit value, least significant byte first +0xf3 song select 1 - song number +0xf4 undefined +0xf5 undefined +0xf6 tune request 0 +0xf7 EOX (terminator) 0 + +The status bytes 0xf8 - 0xff are the so-called "real-time" messages. +I will discuss these after the accumulated notes concerning the +first bunch. + +Song position / song select are for control of sequencers. The +song position is in beats, which are to be interpreted as every +6 MIDI clock pulses. These messages determine what is to be played +upon receipt of a "start" real-time message (see below). + +The "tune request" is a command to analog synthesizers to tune their +oscillators. + +The system exclusive message is intended for manufacturers to use +to insert any specific messages they want to which apply to their +own product. The following data bytes are all to be "data" bytes, +that is they are all to be in the range 0 - 127. The system exclusive +is to be terminated by the 0xf7 terminator byte. The first data byte +is also supposed to be a "manufacturer's id", assigned by a MIDI +standards committee. THE TERMINATOR BYTE IS OPTIONAL - a system +exclusive may also be "terminated" by the status byte of the next +message. + +>> + Yamaha, in particular, caused problems by not sending terminator + bytes. As I understand it, the DX-7 sends a system exclusive + at something like 80 msec. intervals when it has nothing better + to do, just so you know it's still there, I guess. The messages + aren't explicitly terminated, so if you want to handle the + protocol (esp. in hardware), you should be aware that a DX-7 + will leave you in "waiting for EOX" state a lot, and be sending + data even when it isn't doing anything. This is all word of + mouth, since I've never personally played with a DX-7. +<< + +some MIDI ID's: + + Sequential Circuits 1 Bon Tempi 0x20 Kawai 0x40 + Big Briar 2 S.I.E.L. 0x21 Roland 0x41 + Octave / Plateau 3 Korg 0x42 + Moog 4 SyntheAxe 0x23 Yamaha 0x43 + Passport Designs 5 + Lexicon 6 + PAIA 0x11 + Simmons 0x12 + Gentle Electric 0x13 + Fairlight 0x14 + +>> + Note the USA / Europe / Japan grouping of codes. Also note + that Sequential Circuits snarfed id number 1 - Sequential + Circuits was one of the earliest participators in MIDI, some + people claim its originator. + + Two large makers missing from the original lineup were Casio + and Oberheim. I know Oberheim is on the bandwagon now, and + Casio also, I believe. Oberheim had their own protocol previous + to MIDI, and when MIDI first came out they were reluctant to +? go along with it. I wonder what we'd be looking at if Oberheim + had pushed their ideas and made them the standard. From what I + understand they thought THEIRS was better, and kind of sulked + for a while until the market forced them to go MIDI. + +? Nobody seems to care much about these ID numbers. I can only + imagine them becoming useful if additions to the standard message + set are placed into system exclusives, with the ID byte to let + you know what added protocol is being used. Are any groups of + manufacturers considering consolidating their efforts in a + standard extension set via system exclusives? +<< + +REAL TIME MESSAGES. + +This is the final group of status bytes, 0xf8 - 0xff. These bytes +are reserved for messages which are called "real-time" messages +because they are allowed to be sent ANYPLACE. This includes in +between data bytes of other messages. A receiver is supposed to +be able to receive and process (or ignore) these messages and +resume collection of the remaining data bytes for the message +which was in progress. Realtime messages do not affect the +"running status byte" which might be in effect. + +? Do any devices REALLY insert these things in the middle of + other messages? + +All of these messages have no data bytes following (or they could +get interrupted themselves, obviously). The messages: + +0xf8 timing clock +0xf9 undefined +0xfa start +0xfb continue +0xfc stop +0xfd undefined +0xfe active sensing +0xff system reset + +The timing clock message is to be sent at the rate of 24 clocks +per quarter note, and is used to sync. devices, especially drum +machines. + +Start / continue / stop are for control of sequencers and drum +machines. The continue message causes a device to pick up at the +next clock mark. + +>> + These things are also designed for performance, allowing control + of sequencers and drum machines from a "master" unit which + sends the messages down the line when its buttons are pushed. + + I can't tell you much about the trials and tribulations of drum + machines. Other folks can, I am sure. +<< + +The active sensing byte is to be sent every 300 ms. or more often, +if it is used. Its purpose is to implement a timeout mechanism +for a receiver to revert to a default state. A receiver is to +operate normally if it never gets one of these, activating the +timeout mechanism from the receipt of the first one. + +>> + My impression is that active sensing is largely unused. +<< + +The system reset initializes to power up conditions. The spec. says +that it should be used "sparingly" and in particular not sent +automatically on power up. + +AND NOW, CLIMBING TO THE PULPIT .... + +>> - from here on out. + +There are many deficiencies with MIDI, but it IS a standard. As such, +it will have to be grappled with. + +The electrical specification leaves me with only one question - WHY? +What was wanted was a serial interface, and a perfectly good RS232 +specification was to be had. WHY wasn't it used? The baud rate is +too fast to simply convert into something you can feed directly to +your serial port via fairly dumb hardware, also. The "standard" +baud rate step you would have to use would be 38.4 Kbaud which very +few hardware interfaces accept. The other alternative is to buffer +messages and send them out a slower baud rate - in fact buffering +of characters by some kind of I/O processor is very helpful. Hence +units like the MPU-401, which does a lot of other stuff, too of course. + +The fast baud rate with MIDI was set for two reasons I believe: + + 1) to allow daisy-chaining of a few devices with no noticeable + end to end lag. + + 2) to allow chords to be played by just sending all the notes down + the pipe, the baud rate being fast enough that they will + sound simultaneous. + +It doesn't exactly work - I've heard gripes concerning end to end lag +on three instrument chains. And consider chords - at two bytes (running +status byte being used) per note, there will be a ten character lag +between the trailing edges of the first and last notes of a six note +chord. That's 3.2 ms., assuming no "dead air" between characters. It's +still pretty fast, but on large chords with voices possessing distinctive +attack characteristics, you may hear separate note beginnings. + +I think MIDI could have used some means of packetizing chords, or having +transaction markers. If a "chord" message were specified, you could +easily +break even on byte count with a few notes, given that we assume all notes +of a chord at the same velocity. Transaction markers might be useful in +any case, although I don't know if it would be worth taking over the +remaining system message space for them. I would say yes. I would +see having "start" and "end" transaction bytes. On receipt of a "start" +a receiver buffers up but does not act on messages until receipt of the +"end" byte. You could then do chords by sending the notes ahead of time, +and precisely timing the "end" marker. Of course, the job of the hardware +in the receiver has been complicated considerably. + +The protocol is VERY keyboard oriented - take a look at the use of TWO +of the opcodes in the limited opcode space for "pressure" messages, +and the inability to specify semitones or glissando effects except +through the pitch wheel (which took up yet ANOTHER of the opcodes). +All keyboards I know of modify ALL playing notes when they receive +pitch wheel data. Also, you have to use a continuous stream of +pitch wheel messages to effect a slide, the pitch wheel step isn't +standardized, and on a slide of a large number of tones you will +overrun the range of the wheel. + +? Some of these problems would be addressed by a device which allowed + its pitch wheel to have selective control - say modifying only + the notes playing on the channel the pitch wheel message is + received in, for instance. The thing for a guitar synthesizer + to do, then, would be to use mode 4, one channel per string, and + bends would only affect the one note. You could play a chord + on a voice with a lot of release, then bend a note and not have + the entire still sounding chord bend. Any such devices? + +I think some of the deficiencies in MIDI might be addressed by +different communities of interest developing a standard set of +system exclusives which answer the problem. One perfect area +for this, I think, is a standard set for representation of "non- +keyboard / drum machine" instruments which have continuous pitch +capabilities. Like a pedal steel, for instance. Or non-western +intervals. Like a sitar. + +There is a crying need to do SOMETHING about the "loopback" problem. +I would even vote for usurping a few more bytes in the mode messages +to allow you to TURN OFF input echo by the receiver. With the +local control message, you could then at least deal with something +that would act precisely like a half or full duplex terminal. +Several patchwork solutions exist to this problem, but there OUGHT +to be a standard way of doing it within the protocol. Another +thought is to allow data bytes of other than 0 or 127 to control +echo on the existing local control message. + +The lack of acknowledgement is a problem. Another candidate for a +standard system exclusive set would be a series of messages for +mode setting with acknowledgement. This set could then also +take care of the loopback problem. + +The complete lack of ability to specify standardized waveforms is +probably another source of intense disappointment to many readers. +Trouble is, the standard lingo used by the synthesizer industry and +most working musicians is something which hails back to the first +days of synthesizer design, deals with envelope generators and +filters and VCO / LFO hardware parameters, and is very damn difficult +to relate to Fourier series expressing the harmonic content or any other +abstractions some people interested in doing computer composition +would like. The parameter set used by the average synthesizer +manufacturer isn't anyplace close to orthogonal in any sense, and is bound +to vary wildly in comparison to anybody elses. There are essentially no +abstractions made by most of the industry from underlying hardware +parameters. What standardization exists reflects only the similarity +in hardware. This is one quagmire that we have a long way to go to +get out of, I think. It might be possible, eventually, to come up +with translation tables describing the best way to approximate a +desired sound on a given device in terms of its parameter set, but +the difficulties are enormous. MIDI has chosen to punt on this one, folks. + +Well, that's about it. Good luck with talking to your synthesizer. + +Bob McQueer +22 Bcy, 3151 + +All rites reversed. Reprint what you like. diff --git a/midiseq/DOCS/MIDISPEC.TXT b/midiseq/DOCS/MIDISPEC.TXT new file mode 100644 index 0000000..ba13492 --- /dev/null +++ b/midiseq/DOCS/MIDISPEC.TXT @@ -0,0 +1,171 @@ + MIDI 1.0 Specification: + +Status Data Byte(s) Description +D7----D0 D7----D0 +------------------------------------------------------------------------- +Channel Voice Messages +------------------------------------------------------------------------- +1000cccc 0nnnnnnn Note Off event. + 0vvvvvvv This message is sent when a + note is released (ended). + (nnnnnnn) is the note number. + (vvvvvvv) is the velocity. + +1001cccc 0nnnnnnn Note On event. + 0vvvvvvv This message is sent when a + note is depressed (start). + (nnnnnnn) is the note number. + (vvvvvvv) is the velocity. + +1010cccc 0nnnnnnn Polyphonic Key Pressure (After-touch). + 0vvvvvvv This message is sent when the pressure + (velocity) of a previously + triggered note changes. + (nnnnnnn) is the note number. + (vvvvvvv) is the new velocity. + +1011cccc 0ccccccc Control Change. + 0vvvvvvv This message is sent when a controller + value changes. Controllers include devices + such as pedals and levers. + Certain controller numbers are reserved + for specific purposes. See Channel Mode Messages. + (ccccccc) is the controller number. + (vvvvvvv) is the new value. + +1100cccc 0ppppppp Program Change. + This message sent when the patch number changes. + (ppppppp) is the new program number. + +1101nnnn 0ccccccc Channel Pressure (After-touch). + This message is sent when the channel pressure + changes. Some velocity-sensing keyboards do not + support polyphonic after-touch. Use this + message to send the single greatest velocity + (of all te current depressed keys). + (ccccccc) is the channel number. + +1110nnnn 0lllllll Pitch Wheel Change. + 0mmmmmmm This message is sent to indicate a change in the + pitch wheel. The pitch wheel is measured by a + fourteen bit value. Center (no pitch change) is + 2000H. Sensitivity is a function of the + transmitter. + (llllll) are the least significant 7 bits. + (mmmmmm) are the most significant 7 bits. +------------------------------------------------------------------------- +Channel Mode Messages (See also Control Change, above) +------------------------------------------------------------------------- +1011nnnn 0ccccccc Channel Mode Messages. + 0vvvvvvv This the same code as the Control + Change (above), but implements Mode + control by using reserved controller + numbers. The numbers are: + + Local Control. + When Local Control is Off, all devices + on a given channel will respond only to + data received over MIDI. Played data, etc. + will be ignored. Local Control On + restores the functions of the normal + controllers. + c = 122, v = 0: Local Control Off + c = 122, v = 127: Local Control On + + All Notes Off. + When an All Notes Off is received, + all oscillators will turn off. + c = 123, v = 0: All Notes Off + + (See text for description of actual + mode commands.) + c = 124, v = 0: Omni Mode Off + c = 125, v = 0: Omni Mode On + c = 126, v = M: Mono Mode On (Poly Off) + where M is the number of channels + (Omni Off) or 0 (Omni On) + c = 127, v = 0: Poly Mode On (Mono Off) + (Note: These four messages also cause + All Notes Off) +.pa +------------------------------------------------------------------------- +System Common Messages +------------------------------------------------------------------------- +11110000 0iiiiiii System Exclusive. + 0ddddddd This message makes up for all that MIDI + .. doesn't support. (iiiiiii) is a seven + .. bit Manufacturer's I.D. code. If the + 0ddddddd synthesizer recognizes the I.D. code as + 11110111 its own, it will listen to the rest of + the message (ddddddd). Otherwise, the + message will be ignored. System Exclusive + is used to send bulk dumps such as patch + parameters and other non-spec data. + (Note: Real-Time messages ONLY may be + interleaved with a System Exclusive.) + +11110001 Undefined. + +11110010 0lllllll Song Position Pointer. + 0mmmmmmm This is an internal 14 bit register that + holds the number of MIDI beats (1 beat= + six MIDI clocks) since the start of + the song. l is the LSB, m the MSB. + +11110011 0sssssss Song Select. + The Song Select specifies which sequence + or song is to be played. + +11110100 Undefined. + +11110101 Undefined. + +11110110 Tune Request. + Upon receiving a Tune Request, all analog + sythesizers should tune their oscillators. + +11110111 End of Exclusive. + Used to terminate a System Exclusive + dump (see above). +.pa +------------------------------------------------------------------------- +System Real-Time Messages +------------------------------------------------------------------------- +11111000 Timing Clock. + Sent 24 times per quarter note when + synchronization is required (see text). + +11111001 Undefined. + +11111010 Start. + Start the current sequence playing. + (This message will be followed with + Timing Clocks). + +11111011 Continue. + Continue at the point the sequence was + Stopped. + +11111100 Stop. + Stop the current sequence. + +11111101 Undefined. + +11111110 Active Sensing. + Use of this message is optional. When + initially sent, the receiver will expect + to receive another Active Sensing message + each 300ms (max), or it will be assume + that the connection has been terminated. + At termination, the receiver will turn off + all voices and return to normal (non- + active sensing) operation. + +11111111 Reset. + Reset all receivers in the system to + power-up status. This should be used + sparingly, preferably under manual + control. In particular, it should not + be sent on power-up. + + -- Greg, lee@uhccux.uhcc.hawaii.edu diff --git a/midiseq/DOCS/MIDISTAT.TXT b/midiseq/DOCS/MIDISTAT.TXT new file mode 100644 index 0000000..4cff01c --- /dev/null +++ b/midiseq/DOCS/MIDISTAT.TXT @@ -0,0 +1,140 @@ + TABLE 1: Summary of MIDI Status & Data Bytes + (adapted from "MIDI by the Numbers" by D. Valenti, Elec Musician mag 2/88) + + STATUS BYTE | DATA BYTES +------------------------------------------------------------------------------ + 1st Byte Value | Function | 2nd | 3rd + - - - - - - - - -| | Byte | Byte + Binary |Hex| Dec| | | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 10000000= 80= 128| Chan 1 Note off | Note Number | Note Velocity + 10000001= 81= 129| Chan 2 " | (0-127) | (0-127) + 10000010= 82= 130| Chan 3 " | see | " + 10000011= 83= 131| Chan 4 " | Table | " + 10000100= 84= 132| Chan 5 " | 2 | " + 10000101= 85= 133| Chan 6 " | " | " + 10000110= 86= 134| Chan 7 " | " | " + 10000111= 87= 135| Chan 8 " | " | " + 10001000= 88= 136| Chan 9 " | " | " + 10001001= 89= 137| Chan 10 " | " | " + 10001010= 8A= 138| Chan 11 " | " | " + 10001011= 8B= 139| Chan 12 " | " | " + 10001100= 8C= 140| Chan 13 " | " | " + 10001101= 8D= 141| Chan 14 " | " | " + 10001110= 8E= 142| Chan 15 " | " | " + 10001111= 8F= 143| Chan 16 " | " | " + 10010000= 90= 144| Chan 1 Note on | " | " + 10010001= 91= 145| Chan 2 " | " | " + 10010010= 92= 146| Chan 3 " | " | " + 10010011= 93= 147| Chan 4 " | " | " + 10010100= 94= 148| Chan 5 " | " | " + 10010101= 95= 149| Chan 6 " | " | " + 10010110= 96= 150| Chan 7 " | " | " + 10010111= 97= 151| Chan 8 " | " | " + 10011000= 98= 152| Chan 9 " | " | " + 10011001= 99= 153| Chan 10 " | " | " + 10011010= 9A= 154| Chan 11 " | " | " + 10011011= 9B= 155| Chan 12 " | " | " + 10011100= 9C= 156| Chan 13 " | " | " + 10011101= 9D= 157| Chan 14 " | " | " + 10011110= 9E= 158| Chan 15 " | " | " + 10011111= 9F= 159| Chan 16 " | " | " + 10100000= A0= 160| Chan 1 Polyphonic | " | Aftertouch + 10100001= A1= 161| Chan 2 aftertouch | " | pressure + 10100010= A2= 162| Chan 3 " | " | (0-127) + 10100011= A3= 163| Chan 4 " | " | " + 10100100= A4= 164| Chan 5 " | " | " + 10100101= A5= 165| Chan 6 " | " | " + 10100110= A6= 166| Chan 7 " | " | " + 10100111= A7= 167| Chan 8 " | " | " + 10101000= A8= 168| Chan 9 " | " | " + 10101001= A9= 169| Chan 10 " | " | " + 10101010= AA= 170| Chan 11 " | " | " + 10101011= AB= 171| Chan 12 " | " | " + 10101100= AC= 172| Chan 13 " | " | " + 10101101= AD= 173| Chan 14 " | " | " + 10101110= AE= 174| Chan 15 " | " | " + 10101111= AF= 175| Chan 16 " | " | " + 10110000= B0= 176| Chan 1 Control/ | See | See + 10110001= B1= 177| Chan 2 Mode change | Table | Table + 10110010= B2= 178| Chan 3 " | three | three + 10110011= B3= 179| Chan 4 " | " | " + 10110100= B4= 180| Chan 5 " | " | " + 10110101= B5= 181| Chan 6 " | " | " + 10110110= B6= 182| Chan 7 " | " | " + 10110111= B7= 183| Chan 8 " | " | " + 10111000= B8= 184| Chan 9 " | " | " + 10111001= B9= 185| Chan 10 " | " | " + 10111010= BA= 186| Chan 11 " | " | " + 10111011= BB= 187| Chan 12 " | " | " + 10111100= BC= 188| Chan 13 " | " | " + 10111101= BD= 189| Chan 14 " | " | " + 10111110= BE= 190| Chan 15 " | " | " + 10111111= BF= 191| Chan 16 " | " | " + 11000000= C0= 192| Chan 1 Program | Program # | NONE + 11000001= C1= 193| Chan 2 change | (0-127) | " + 11000010= C2= 194| Chan 3 " | " | " + 11000011= C3= 195| Chan 4 " | " | " + 11000100= C4= 196| Chan 5 " | " | " + 11000101= C5= 197| Chan 6 " | " | " + 11000110= C6= 198| Chan 7 " | " | " + 11000111= C7= 199| Chan 8 " | " | " + 11001000= C8= 200| Chan 9 " | " | " + 11001001= C9= 201| Chan 10 " | " | " + 11001010= CA= 202| Chan 11 " | " | " + 11001011= CB= 203| Chan 12 " | " | " + 11001100= CC= 204| Chan 13 " | " | " + 11001101= CD= 205| Chan 14 " | " | " + 11001110= CE= 206| Chan 15 " | " | " + 11001111= CF= 207| Chan 16 " | " | " + 11010000= D0= 208| Chan 1 Channel | Aftertouch | " + 11010001= D1= 209| Chan 2 aftertouch | pressure | " + 11010010= D2= 210| Chan 3 " | (0-127) | " + 11010011= D3= 211| Chan 4 " | " | " + 11010100= D4= 212| Chan 5 " | " | " + 11010101= D5= 213| Chan 6 " | " | " + 11010110= D6= 214| Chan 7 " | " | " + 11010111= D7= 215| Chan 8 " | " | " + 11011000= D8= 216| Chan 9 " | " | " + 11011001= D9= 217| Chan 10 " | " | " + 11011010= DA= 218| Chan 11 " | " | " + 11011011= DB= 219| Chan 12 " | " | " + 11011100= DC= 220| Chan 13 " | " | " + 11011101= DD= 221| Chan 14 " | " | " + 11011110= DE= 222| Chan 15 " | " | " + 11011111= DF= 223| Chan 16 " | " | " + 11100000= E0= 224| Chan 1 Pitch | Pitch | Pitch + 11100001= E1= 225| Chan 2 wheel | wheel | wheel + 11100010= E2= 226| Chan 3 range | LSB | MSB + 11100011= E3= 227| Chan 4 " | (0-127) | (0-127) + 11100100= E4= 228| Chan 5 " | " | " + 11100101= E5= 229| Chan 6 " | " | " + 11100110= E6= 230| Chan 7 " | " | " + 11100111= E7= 231| Chan 8 " | " | " + 11101000= E8= 232| Chan 9 " | " | " + 11101001= E9= 233| Chan 10 " | " | " + 11101010= EA= 234| Chan 11 " | " | " + 11101011= EB= 235| Chan 12 " | " | " + 11101100= EC= 236| Chan 13 " | " | " + 11101101= ED= 237| Chan 14 " | " | " + 11101110= EE= 238| Chan 15 " | " | " + 11101111= EF= 239| Chan 16 " | " | " + 11110000= F0= 240| System Exclusive | ** | ** + 11110001= F1= 241| System Common - undefined | ? | ? + 11110010= F2= 242| Sys Com Song Position Pntr | LSB | MSB + 11110011= F3= 243| Sys Com Song Select(Song #)| (0-127) | NONE + 11110100= F4= 244| System Common - undefined | ? | ? + 11110101= F5= 245| System Common - undefined | ? | ? + 11110110= F6= 246| Sys Com tune request | NONE | NONE + 11110111= F7= 247| Sys Com-end of SysEx (EOX) | " | " + 11111000= F8= 248| Sys real time timing clock | " | " + 11111001= F9= 249| Sys real time undefined | " | " + 11111010= FA= 250| Sys real time start | " | " + 11111011= FB= 251| Sys real time continue | " | " + 11111100= FC= 252| Sys real time stop | " | " + 11111101= FD= 253| Sys real time undefined | " | " + 11111110= FE= 254| Sys real time active sensing| " | " + 11111111= FF= 255| Sys real time sys reset | " | " + + ** Note: System Exclusive (data dump) 2nd byte= Vendor ID followed by more + data bytes and ending with EOX. diff --git a/midiseq/DOCS/MIDITIME b/midiseq/DOCS/MIDITIME new file mode 100644 index 0000000..d3c6a00 --- /dev/null +++ b/midiseq/DOCS/MIDITIME @@ -0,0 +1,95 @@ + +From dirk@diaspar.fb10.TU-Berlin.DEMon Feb 27 20:22:36 1995 +Date: Mon, 27 Feb 95 16:43:59 +0100 +From: Dirk Schwarzhans +Reply to: dirk@kalium.physik.TU-Berlin.DE +To: sean@cnct.com +Subject: Re: MIDI TIME DATA + +Hello, + +in alt.binaries.sounds.midi you asked for info about MIDI timing. +I had the same problems too some time ago. + +Here is the solution: +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + +deltaRealtime = tempo * deltaTime / division + +gives you the difference between two midi events (which are +separated by the deltaTime value specified in the file) in micro +seconds. "division" is from the midi file header. + +But you CANNOT use this formula because of accumulating errors, +even if you use double precision floating points calculations. + +The way to prevent this is: +--------------------------- + +1) You calculate a quantity called "midiTime" for every event by +adding the deltaTimes of the previous events. + +2) Then you use this times for merging the events from different tracks. + +3) Then you calculate the realTime of every event like this: + +-initialize the following variables: +long midiOffset = 0; +long realOffset = 0; +long division; /* = from file header */ +long tempo = 5000000; /* default value from midi file spec. */ + +-for every event do: +realTime = realOffset + (long)((double)(midiTime - midiOffset) * + (double)tempo / (double)division); + +-for every tempo change do: +tempo = newTempo; /* newTempo specified in SET TEMPO command */ +realOffset = realtime; /* calculated above */ +midiOffset = midiTime; +-------------------------------- + +Now rounding errors only accumulate on tempo changes which don't +occure as often as midi events. + +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + +For the case of negative division in the file header someone sent +me the following text: + +If "division" is negative then its high byte is minus the number +of frames per second, and its low byte is the number of ticks per +frame. So if you multiply the two bytes together and negate the +result, you have the number of ticks per second (1000 is a typical +value - gives millisecond timing). Then, divide each Delta-Time by +this number to get the length in seconds between each two events. +This will give non-integer results!! so be sure to use real number +division. If ticks per second=1000 then the conversion of Delta-Times +is unnecessary - they're already in units of milliseconds, which +is useful enough. + +The purpose of a tempo change in this environment is not to alter +the rate at which the music plays, but to change the rate at which +it is represented as quarter notes, eighth notes, etc. You can also +use it to derive a value for the number of ticks per quarter note += (Tempo change value) * (ticks per second) / 1000000, because +the tempo change value is in microseconds per quarter note. + +There is another factor that (rarely) affects timing: at the end +of a time signature meta-event (FF 58 04 nn dd cc bb) the bb is +the number of notated 32nd notes in every MIDI quarter note. I have +never seen this be anything other than 8, but if it's different, +a program which deals with measures, beats, or notation has to +convert the MIDI timing info to useful notation info. The way to +do that would be to get a new value for the number of ticks per +quarter note: + new value = 8 * (old value) / (bb) +This new value should then be used to recalculate the relevant +timing data: either the number of microseconds per tick if "division" +is positive or the number of ticks per second if "division" is +negative. + + +Hope this helps, + +Dirk Schwarzhans diff --git a/midiseq/DOCS/MIDITIME.TXT b/midiseq/DOCS/MIDITIME.TXT new file mode 100644 index 0000000..dae471d --- /dev/null +++ b/midiseq/DOCS/MIDITIME.TXT @@ -0,0 +1,989 @@ +MIDI Time Code and Cueing + +Detailed Specification + +(Supplement to MIDI 1.0) + +12 February 1987 + +Justification For MIDI Time Code and Cueing + + + + The merit of implementing the MIDI Time Code proposal within the current +MIDI specification is as follows: + + SMPTE has become the de facto timing reference standard in the +professional audio world and in almost the entire video world. SMPTE is also +seeing more and more use in the semi-professional audio area. We hope to +combine this universal timing reference, SMPTE, with the de facto standard +for controlling musical equipment, MIDI. + + Encoding SMPTE over MIDI allows a person to work with one timing +reference throughout the entire system. For example, studio engineers are +more familiar with the idea of telling a multitrack recorder to punch in and +out of record mode at specific SMPTE times, as opposed to a specific beat in a +specific bar. To force a musician or studio engineer to convert back and +forth between a SMPTE time and a specific bar number is tedious and should not +be necessary (one would have to take into account tempo and tempo changes, +etc.). + + Also, some operations are referenced only as SMPTE times, as opposed to +beats in a bar. For example, creating audio and sound effects for video +requires that certain sounds and sequences be played at specific SMPTE times. +There is no other easy way to do this with Song Position Pointers, etc., and +even if there was, it would be an unnatural way for a video or recording +engineer to work. + + MIDI Time Code is an absolute timing reference, whereas MIDI Clock and +Song Position Pointer are relative timing references. In virtually all audio +for film/video work, SMPTE is already being used as the main time base, and +any musical passages which need to be recorded are usually done by getting a +MIDI-based sequencer to start at a pre-determined SMPTE time code. In most +cases, though, it is SMPTE which is the Master timing reference being used. +In order for MIDI-based devices to operate on an absolute time code which is +independent of tempo, MIDI Time Code must be used. Existing devices merely +translate SMPTE into MIDI Clocks and Song Position Pointers based upon a given +tempo. This is not absolute time, but relative time, and all of the SMPTE cue +points will change if the tempo changes. The majority of sound effects work +for film and video does not involve musical passages with tempos, rather it +involves individual sound effect "events" which must occur at specific, +absolute times, not relative to any "tempo". + + + +MIDI Time Code System Components + + + +SMPTE to MTC Converter + + This box would either convert longitudinal (audio-type) or vertical +(video-type) SMPTE time code from a master timing device into MTC. The +function could be integrated into video tape recorders (VTRs) or +syncronization units that control audio tape recorders (ATRs). Alternately, a +stand-alone box would do the conversion, or simply generate MTC directly. +Note that conversion from MTC to SMPTE time code is not envisioned, as it is +of little practical value. + + + +Cue List Manager + + This would be a device or computer program that would maintain a cue list +of desired events, and send the list to the slaves. For performance, the +manager might pass the Time Code from the SMPTE-MTC converter through to the +slaves, or, in a stand-alone system it might generate Time Code itself. This +"central controller" would presumably also contain all library functions for +downloading sound programs, samples, sequences, patterns, and so on, to the +slaves. A Cue List Manager would pre-load intelligent MTC peripherals (see +below) with this data. + + + +MTC Sequencer + + To control existing equipment or any device which does not recognize MTC +in an MTC system, this device would be needed. It would receive the cue list +from the manager, and convert the cues into normal MIDI commands. At the +specified SMPTE times, the sequencer would then send the MIDI commands to the +specific devices. For example, for existing MIDI equipment it might provide +MIDI messages such as Note On, Note Off, Song Select, Start, Stop, Program +Changes, etc. Non-MIDI equipment (such as CD players, mixing consoles, +lighting, sound effects cartridge units and ATRs) may also be controlled if +such a device had relay controls. + + + +Intelligent MTC Peripheral + + In this category belong devices capable of receiving an MTC Cue List from +the manager, and triggering themselves appropriately when the correct Time +Code (SMPTE or MIDI) has been received. Above this minimum, the device might +be able to change its programming in response to the Cue List, or prepare +itself for ensuing events. + + For example, an intelligent MTC-equipped analog multitrack tape machine +might read in a list of punch in/punch out cues from the Cue List Manager, and +then alter then to internally compensate for its bias current rise and fall +times. A sampling-based sound effects device might preload samples from its +own disk drive into a RAM buffer, in anticipation of needing them for cues +later on in the cue list. + + It should be mentioned that while these functions are separately +described, actual devices may incorporate a mixture of these functions, suited +to specific applications in their market. + + +A MIDI Time Code System + + The MIDI Time Code format contains two parts: Time Code and Set Up. Time +Code is relatively straightforward: hours, minutes, seconds and frame numbers +(approximately 1/30 of a second) are encoded and distributed throughout the +MIDI system so that all the units know exactly what time it is. + + Set Up, however, is where MTC gains its power. It is a format for +informing MIDI devices of events to be performed at specific times. +Ultimately, this aspect of MTC will lead to the creation of an entirely new +class of production equipment. Before getting into the nuts and bolts of the +spec itself, let's talk about some of the uses and features of forthcoming +devices that have been envisioned. + + Set Up begins with the concept of a cue list. In video editing, for +example, it is customary to transfer the video master source tapes, which may +be on expensive, two-inch recorders, to less-expensive recorders. The editing +team then works over this copy, making a list of all the segments that they +want to piece together as they are defined by their SMPTE times. + + For example, the first scene starts at time A and ends at time B, the +next scene starts at time C and ends at time D. A third scene may even lie +between the first two. When done, they feed this cue list time information +into the editing system of the master recorder(s) or just give the cue list to +an editor who does the work manually. The editing system or editor then +locates the desired segments and assembles them in the proper sequence. + + + + Now suppose that instead of one or two video recorders, we have twenty +devices that will play a part in our audio/video or film production: special +effects generators for fades and superimpositions, additional decks with +background scenery, live cameras, MIDI sequencers, drum machines, +synthesizers, samplers, DDLs, soundtrack decks, CDs, effects devices, and so +on. As it stands now, each of these devices must be handled more or less +separately, with painstaking and time-consuming assembly editing or multitrack +overdubs. And when a change in the program occurs (which always happens), +anywhere from just a few items to the whole system may need to be reprogrammed +by hand. + + + + This is where MIDI Time Code comes in. It can potentially control all of +these individual production elements so that they function together from a +single cue list. The master controller which would handle this function is +described as a Cue List Manager. On such a console, you would list what you +want each device to do, and when to do it. The manager would then send the cue +list to the various machines via the MTC Set Up protocol. Each unit would then +react as programmed when the designated MIDI Time Code (or conventional SMPTE +Time Code) appears. Changes? No problem. Simply edit the cue list using simple +word-processing functions, then run the tape again. + + + MTC thus integrates into a manageable system all of the diverse tools at +our disposal. It would drastically reduce the time, money and frustration +needed to produce a film or video. + + + Having covered the basic aspects of a MIDI Time Code system, as well as +examples of how an overall system might function, we will now take a look at +the actual MIDI specification itself. + + +MIDI Time Code + + + + For device synchronization, MIDI Time Code uses two basic types of +messages, described as Quarter Frame and Full. There is also a third, optional +message for encoding SMPTE user bits. + + +Quarter Frame Messages + + + + Quarter Frame messages are used only while the system is running. They +are rather like the PPQN or MIDI clocks to which we are accustomed. But there +are several important ways in which Quarter Frame messages differ from the +other systems. + + + As their name implies, they have fine resolution. If we assume 30 frames +per second, there will be 120 Quarter Frame messages per second. This +corresponds to a maximum latency of 8.3 milliseconds (at 30 frames per +second), with accuracy greater than this possible within the specific device +(which may interpolate inbetween quarter frames to "bit" resolution). Quarter +Frame messages serve a dual purpose: besides providing the basic timing pulse +for the system, each message contains a unique nibble (four bits) defining a +digit of a specific field of the current SMPTE time. + + + + Quarter frames messages should be thought of as groups of eight messages. +One of these groups encodes the SMPTE time in hours, minutes, seconds, and +frames. Since it takes eight quarter frames for a complete time code message, +the complete SMPTE time is updated every two frames. Each quarter frame +message contains two bytes. The first byte is F1, the Quarter Frame System +Common byte. The second byte contains a nibble that represents the message +number (0 through 7), and a nibble for one of the digits of a time field +(hours, minutes, seconds or frames). + + + + + +Quarter Frame Messages (2 bytes): + + + + F1 + + + + F1 = Currently unused and undefined System Common status byte + + = 0nnn dddd + + + + dddd = 4 bits of binary data for this Message Type + + nnn = Message Type: + + 0 = Frame count LS nibble + + 1 = Frame count MS nibble + + 2 = Seconds count LS nibble + + 3 = Seconds count MS nibble + + 4 = Minutes count LS nibble + + 5 = Minutes count MS nibble + + 6 = Hours count LS nibble + + 7 = Hours count MS nibble and SMPTE Type + + + + After both the MS nibble and the LS nibble of the above counts are +assembled, their bit fields are assigned as follows: + + + +FRAME COUNT: xxx yyyyy + + + + xxx = undefined and reserved for future use. Transmitter + + must set these bits to 0 and receiver should ignore! + + yyyyy = Frame number (0-29) + + + +SECONDS COUNT: xx yyyyyy + + + + xx = undefined and reserved for future use. Transmitter + + must set these bits to 0 and receiver should ignore! + + yyyyyy = Seconds Count (0-59) + + + +MINUTES COUNT: xx yyyyyy + + + + xx = undefined and reserved for future use. Transmitter + + must set these bits to 0 and receiver should ignore! + + yyyyyy = Minutes Count (0-59) + + + +HOURS COUNT: x yy zzzzz + + + + x = undefined and reserved for future use. Transmitter + + must set this bit to 0 and receiver should ignore! + + + + yy = Time Code Type: + + 0 = 24 Frames/Second + + 1 = 25 Frames/Second + + 2 = 30 Frames/Second (Drop-Frame) + + 3 = 30 Frames/Second (Non-Drop) + + + + zzzzz = Hours Count (0-23) + + +Quarter Frame Message Implementation + + + + When time code is running in the forward direction, the device producing +the MIDI Time Code will send Quarter Frame messages at quarter frame intervals +in the following order: + + + + F1 0X + + F1 1X + + F1 2X + + F1 3X + + F1 4X + + F1 5X + + F1 6X + + F1 7X + + + +after which the sequence repeats itself, at a rate of one complete 8-message +sequence every 2 frames (8 quarter frames). When time code is running in +reverse, the quarter frame messages are sent in reverse order, starting with +F1 7X and ending with F1 0X. Again, at least 8 quarter frame messages must be +sent. The arrival of the F1 0X and F1 4X messages always denote frame +boundaries. + + + + Since 8 quarter frame messages are required to definitely establish the +actual SMPTE time, timing lock cannot be achieved until the reader has read a +full sequence of 8 messages, from first message to last. This will take from +2 to 4 frames to do, depending on when the reader comes on line. + + + During fast forward, rewind or shuttle modes, the time code generator +should stop sending quarter frame messages, and just send a Full Message once +the final destination has been reached. The generator can then pause for any +devices to shuttle to that point, and resume by sending quarter frame messages +when play mode is resumed. Time is considered to be "running" upon receipt of +the first quarter frame message after a Full Message. + + + Do not send quarter frame messages continuously in a shuttle mode at high +speed, since this unnecessarily clogs the MIDI data lines. If you must +periodically update a device's time code during a long shuttle, then send a +Full Message every so often. + + + The quarter frame message F1 0X (Frame Count LS nibble) must be sent on a +frame boundary. The frame number indicated by the frame count is the number +of the frame which starts on that boundary. This follows the same convention +as normal SMPTE longitudinal time code, where bit 00 of the 80-bit message +arrives at the precise time that the frame it represents is actually starting. +The SMPTE time will be incremented by 2 frames for each 8-message sequence, +since an 8-message sequence will take 2 frames to send. + + + + Another way to look at it is: When the last quarter frame message (F1 +7X) arrives and the time can be fully assembled, the information is now +actually 2 frames old. A receiver of this time must keep an internal offset +of +2 frames for displaying. This may seem unusual, but it is the way normal +SMPTE is received and also makes backing up (running time code backwards) less +confusing - when receiving the 8 quarter frame messages backwards, the F1 0X +message still falls on the boundary of the frame it represents. + + + + + + Each quarter frame message number (0->7) indicates which of the 8 quarter +frames of the 2-frame sequence we are on. For example, message 0 (F1 0X) +indicates quarter frame 0 of frame #1 in the sequence, and message 4 (F1 4X) +indicates quarter frame 1 of frame #2 in the sequence. If a reader receives +these message numbers in descending sequence, then it knows that time code is +being sent in the reverse direction. Also, a reader can come on line at any +time and know exactly where it is in relation to the 2-frame sequence, down to +a quarter frame accuracy. + + + + It is the responsibility of the time code reader to insure that MTC is +being properly interpreted. This requires waiting a sufficient amount of time +in order to achieve time code lock, and maintaining that lock until +synchronization is dropped. Although each passing quarter frame message could +be interpreted as a relative quarter frame count, the time code reader should +always verify the actual complete time code after every 8-message sequence (2 +frames) in order to guarantee a proper lock. + + + + For example, let's assume the time is 01:37:52:16 (30 frames per second, +non-drop). Since the time is sent from least to most significant digit, the +first two Quarter Frame messages will contain the data 16 (frames), the second +two will contain the data 52 (seconds), the third two will represent 37 +(minutes), and the final two encode the 1 (hours and SMPTE Type). The Quarter +Frame Messages description defines how the binary data for each time field is +spread across two nibbles. This scheme (as opposed to simple BCD) leaves some +extra bits for encoding the SMPTE type (and for future use). + + + + Now, let's convert our example time of 01:37:52:16 into Quarter Frame +format, putting in the correct hexadecimal conversions: + + + + F1 00 + + F1 11 10H = 16 decimal + + + + F1 24 + + F1 33 34H = 52 decimal + + + + F1 45 + + F1 52 25H = 37 decimal + + + + F1 61 + + F1 76 01H = 01 decimal (SMPTE Type is 30 frames/non-drop) + + + + (note: the value transmitted is "6" because the SMPTE Type (11 binary) is +encoded in bits 5 and 6) + + + + For SMPTE Types of 24, 30 drop frame, and 30 non-drop frame, the frame +number will always be even. For SMPTE Type of 25, the frame number may be +even or odd, depending on which frame number the 8-message sequence had +started. In this case, you can see where the MIDI Time Code frame number +would alternate between even and odd every second. + + + + MIDI Time Code will take a very small percentage of the MIDI bandwidth. +The fastest SMPTE time rate is 30 frames per second. The specification is to +send 4 messages per frame - in other words, a 2-byte message (640 +microseconds) every 8.333 milliseconds. This takes 7.68 % of the MIDI +bandwidth - a reasonably small amount. Also, in the typical MIDI Time Code +systems we have imagined, it would be rare that normal MIDI and MIDI Time Code +would share the same MIDI bus at the same time. + + +Full Message + + + + Quarter Frame messages handle the basic running work of the system. But +they are not suitable for use when equipment needs to be fast-forwarded or +rewound, located or cued to a specific time, as sending them continuously at +accelerated speeds would unnecessarily clog up or outrun the MIDI data lines. +For these cases, Full Messages are used, which encode the complete time into a +single message. After sending a Full Message, the time code generator can +pause for any mechanical devices to shuttle (or "autolocate") to that point, +and then resume running by sending quarter frame messages. + + + +Full Message - (10 bytes) + + + + F0 7F 01 hr mn sc fr F7 + + + + F0 7F = Real Time Universal System Exclusive Header + + = 7F (message intended for entire system) + + 01 = , 'MIDI Time Code' + + = 01, Full Time Code Message + + hr = hours and type: 0 yy zzzzz + + yy = type: + + 00 = 24 Frames/Second + + 01 = 25 Frames/Second + + 10 = 30 Frames/Second (drop frame) + + 11 = 30 Frames/Second (non-drop frame) + + zzzzz = Hours (00->23) + + mn = Minutes (00->59) + + sc = Seconds (00->59) + + fr = Frames (00->29) + + F7 = EOX + + + + + + Time is considered to be "running" upon receipt of the first Quarter +Frame message after a Full Message. + + +User Bits + + + + "User Bits" are 32 bits provided by SMPTE for special functions which +vary with the application, and which can be programmed only from equipment +especially designed for this purpose. Up to four characters or eight digits +can be written. Examples of use are adding a date code or reel number to the +tape. The User Bits tend not to change throughout a run of time code. + + + +User Bits Message - (15 bytes) + + + + F0 7F 01 u1 u2 u3 u4 u5 u6 u7 u8 u9 F7 + + + + F0 7F = Real Time Universal System Exclusive Header + + = 7F (message intended for entire system) + + 01 = , MIDI TIme Code + + = 02, User Bits Message + + u1 = 0000aaaa + + u2 = 0000bbbb + + u3 = 0000cccc + + u4 = 0000dddd + + u5 = 0000eeee + + u6 = 0000ffff + + u7 = 0000gggg + + u8 = 0000hhhh + + u9 = 000000ii + + F7 = EOX + + + + These nibble fields decode in an 8-bit format: aaaabbbb ccccdddd +eeeeffff gggghhhh ii. It forms 4 8-bit characters, and a 2 bit Format Code. +u1 through u8 correspond to SMPTE Binary Groups 1 through 8. u9 are the two +Binary Group Flag Bits, as defined by SMPTE. + + + + This message can be sent whenever the User Bits values must be +transferred to any devices down the line. Note that the User Bits Message may +be sent by the MIDI Time Code Converter at any time. It is not sensitive to +any mode. + + + + + +MIDI Cueing + + + + MIDI Cueing uses Set-Up Messages to address individual units in a system. +(A "unit" can be be a multitrack tape deck, a VTR, a special effects +generator, MIDI sequencer, etc.) + + + + Of 128 possible event types, 19 are currently defined. + + + + + +Set-Up Messages (13 bytes plus any additional information): + + + + F0 7E 04 hr mn sc fr ff sl sm F7 + + + + F0 7E = Non-Real Time Universal System Exclusive Header + + = Channel number + 04 = , MIDI Time Code + + = Set-Up Type + 00 = Special + 01 = Punch In points + 02 = Punch Out points + 03 = Delete Punch In point + 04 = Delete Punch Out point + 05 = Event Start points + 06 = Event Stop points + 07 = Event Start points with additional info. + 08 = Event Stop points with additional info. + 09 = Delete Event Start point + 0A = Delete Event Stop point + 0B = Cue points + 0C = Cue points with additional info + 0D = Delete Cue point + 0E = Event Name in additional info + + hr = hours and type: 0 yy zzzzz + + yy = type: + 00 = 24 Frames/Second + 01 = 25 Frames/Second + 10 = 30 Frames/Second drop frame + 11 = 30 Frames/Second non-drop frame + zzzzz = Hours (00-23) + + mn = Minutes (00-59) + + sc = Seconds (00-59) + + fr = Frames (00-29) + + ff = Fractional Frames (00-99) + + sl, sm = Event Number (LSB first) + + + + F7 = EOX + + +Description of Set-Up Types: + + + + + + 00 Special refers to the set-up information that affects a unit + globally (as opposed to individual tracks, sounds, programs, + sequences, etc.). In this case, the Special Type takes the + place of the Event Number. Five are defined. Note that types + 01 00 through 04 00 ignore the event time field. + + + + 00 00 Time Code Offset refers to a relative Time Code offset for +each unit. For example, a piece of video and a piece of music that are +supposed to go together may be created at different times, and more than +likely have different absolute time code positions - therefore, one must be +offset from the other so that they will match up. Just like there is one +master time code for an entire system, each unit only +needs one offset value per unit. + + + + 01 00 Enable Event List means for a unit to enable execution of +events in its list if the appropriate MTC or SMPTE time occurs. + + + + 02 00 Disable Event List means for a unit to disable execution +of its event list but not to erase it. This facilitates an MTC Event Manager +in muting particular devices in order to concentrate on others in a complex +system where many events occur simultaneously. + + + + 03 00 Clear Event List means for a unit to erase its entire +event list. + + + + 04 00 System Stop refers to a time when the unit may shut down. +This serves as a protection against Event Starts without matching Event Stops, +tape machines running past the end of the reel, and so on. + + + 05 00 Event List Request is sent by a master to an MTC +peripheral. If the device ID (Channel Number) matches that of the peripheral, +the peripheral responds by transmitting its entire cue list as a sequence of +Set Up Messages, starting from the SMPTE time indicated in the Event List +Request message. + + + + 01/02 Punch In and Punch Out refer to the enabling and disabling of +record mode on a unit. The Event Number refers to the track to be recorded. +Multiple punch in/punch out points (and any of the other event types below) +may be specified by sending multiple Set-Up messages with different times. + + + + 03/04 Delete Punch In or Out deletes the matching point (time and +event number) from the Cue List. + + + + 05/06 Event Start and Stop refer to the running or playback of an +event, and imply that a large sequence of events or a continuous event is to +be started or stopped. The event number refers to which event on the targeted +slave is to be played. A single event (ie. playback of a specific sample, a +fader movement on an automated console, etc.) may occur several times +throughout a given list of cues. These events will be represented by the same +event number, with different Start and Stop times. + + + + 07/08 Event Start and Stop with Additional Information refer to an +event (as above) with additional parameters transmitted in the Set Up message +between the Time and EOX. The additional parameters may take the form of an +effects unit's internal parameters, the volume level of a sound effect, etc. +See below for a description of additional information. + + + 09/0A Delete Event Start/Stop means to delete the matching (event +number and time) event (with or without additional information) from the Cue +List. + + + + 0B Cue Point refers to individual event occurences, such as +marking "hit" points for sound effects, reference points for editing, and so +on. Each Cue number may be assigned to a specific reaction, such as a +specific one-shot sound event (as opposed to a continuous event, which is +handled by Start/Stop). A single cue may occur several times throughout a +given list of cues. These events will be represented by the same event +number, with different Start and Stop times. + + + + 0C Cue Point with Additional Information is exactly like Event +Start/Stop with Additional Information, except that the event represents a Cue +Point rather than a Start/Stop Point. + + + + 0D Delete Cue Point means to Delete the matching (event number +and time) Cue Event with or without additional information from the Cue List. + + + + 0E Event Name in Additional Information. This merely assigns a +name to a given event number. It is for human logging purposes. See +Additional Information description. + + + + + +Event Time + + + + This is the SMPTE/MIDI Time Code time at which the given event is +supposed to occur. Actual time is in 1/100th frame resoultion, for those +units capable of handling bits or some other form of sub-frame resolution, and +should otherwise be self-explanatory. + + + +Event Number + + + + This is a fourteen-bit value, enabling 16,384 of each of the above types +to be individually addressed. "sl" is the 7 LS bits, and "sm" is the 7 MS +bits. + + + +Additional Information description + + + + Additional information consists of a nibblized MIDI data stream, LS +nibble first. The exception is Set-Up Type OE, where the additional +information is nibblized ASCII, LS nibble first. An ASCII newline is +accomplished by sending CR and LF in the ASCII. CR alone functions solely as a +carriage return, and LF alone functions solely as a Line-Feed. + + + + For example, a MIDI Note On message such as 91 46 7F would be nibblized +and sent as 01 09 06 04 0F 07. In this way, any device can decode any +message regardless of who it was intended for. Device-specific messages +should be sent as nibblized MIDI System Exclusive messages. + + +Potential Problems + + + + There is a possible problem with MIDI merger boxes improperly handling +the F1 message, since they do not currently know how many bytes are +following. However, in typical MIDI Time Code systems, we do not anticipate +applications where the MIDI Time Code must be merged with other MIDI signals +occuring at the same time. + + + + Please note that there is plenty of room for additional set-up types, +etc., to cover unanticipated situations and configurations. + + + + It is recommended that each MTC peripheral power up with its MIDI +Manufacturer's System Exclusive ID number as its default channel/device ID. +Obviously, it would be preferable to allow the user to change this number from +the device's front panel, so that several peripherals from the same +manufacturer may have unique IDs within the same MTC system. + + + + + +Signal Path Summary + + + + Data sent between the Master Time Code Source (which may be, for example, +a Multitrack Tape Deck with a SMPTE Synchronizer) and the MIDI Time Code +Converter is always SMPTE Time Code. + + + + Data sent from the MIDI Time Code Converter to the Master Control/Cue +Sheet (note that this may be a MTC-equipped tape deck or mixing console as +well as a cue-sheet) is always MIDI Time Code. The specific MIDI Time Code +messages which are used depend on the current operating mode, as explained +below: + + + Play Mode: The Master Time Code Source (tape deck) is in normal PLAY + MODE at normal or vari-speed rates. The MIDI Time Code + Converter is transmitting Quarter Frame ("F1") messages to + the Master Control/Cue Sheet. The frame messages are in + ASCENDING order, starting with "F1 0X" and ending with "F1 + 7X". If the tape machine is capable of play mode in REVERSE, + then the frame messages will be transmitted in REVERSE + sequence, starting with "F1 7X" and ending with "F1 0X". + + + + Cue Mode: The Master Time Code Source is being "rocked", or "cued" by + hand. The tape is still contacting the playback head so + that the listener can cue, or preview the contents of the + tape slowly. The MIDI Time Code Converter is transmitting + FRAME ("F1") messages to the Master Control/Cue Sheet. If + the tape is being played in the FORWARD direction, the frame + messages are sent in ASCENDING order, starting with "F1 0X" + and ending with "F1 7X". If the tape machine is played in + the REVERSE direction, then the frame messages will be + transmitted in REVERSE sequence, starting with "F1 7X" and + ending with "F1 0X". + + + + Because the tape is being moved by hand in Cue Mode, the + tape direction can change quickly and often. The order of + the Frame Message sequence must change along with the tape + direction. + + + + Fast-Forward/Rewind Mode: In this mode, the tape is in a + high-speed wind or rewind, and is not touching the playback + head. No "cueing" of the taped material is going on. Since + this is a "search" mode, synchronization of the Master + Control/Cue Sheet is not as important as in the Play or Cue + Mode. Thus, in this mode, the MIDI Time Code Converter only + needs to send a "Full Message" every so often to the Cue + Sheet. This acts as a rough indicator of the Master's + position. The SMPTE time indicated by the "Full Message" + actually takes effect upon the reception of the next "F1" + quarter frame message (when "Play Mode" has resumed). + + + + Shuttle Mode: This is just another expression for "Fast-Forward/Rewind + Mode". + + + + + + +References and Credits + + + + SMPTE 12M (ANSI V98.12M-1981). + + + + MIDI Time Code specification created by Chris Meyer and Evan Brooks of +Digidesign. Thanks to Stanley Jungleib of Sequential for additional text. +Also many thanks to all of the MMA and JMSC members for their suggestions and +contributions to the spec. + + + +*********** Addition: MIDI bar numbers ******************** + + +F0 7F ni 01 aa aa F7 + + FO 7F Universal real-time sys-ex header + ID of target device (default=7f=all) + ni sub ID #1 = Notation information (03) + 01 sub ID #2 = Bar Marker Message + aa aa bar number; LSB first + [00 40] = not running + [01 40] .. [00 00] = count in + [01 00] .. [7E 3F] = bar number in song + F7 End of sys-ex + +A maximum neg number indicates not running +A maximum positive value indicates running (but no idea about bar number) + + + +F0 7F ni ts ln nn dd cc bb [nn dd ...] F7 + + F0 7F Universal real-time sys-ex header + ID of target machine (see above) + ni SUB ID #1 = Notation info (03) + ts SUB ID #2 = Time signature message + 02=change now; 42=change next bar + ln Number of data bytes following + nn Numerator of time signature + dd Denumiroator (neg. power of 2) + cc Number of notated 32 notes in a MIDI quarter note + [nn cc..] Additional pairs of num/denom (to define a + compound time signature within the same bar) + F7 End of sys-ex + diff --git a/midiseq/DOCS/SEQUENCE.TXT b/midiseq/DOCS/SEQUENCE.TXT new file mode 100644 index 0000000..fcf16d0 --- /dev/null +++ b/midiseq/DOCS/SEQUENCE.TXT @@ -0,0 +1,381 @@ + +From ircam!corton!loria!loria.crin.fr!eker Fri Aug 21 15:29:34 MET DST 1992 +Article: 5837 of comp.music +Xref: ircam comp.music:5837 rec.music.synth:33200 +Path: ircam!corton!loria!loria.crin.fr!eker +From: eker@loria.crin.fr (Steven Eker) +Newsgroups: comp.music,rec.music.synth +Subject: Sequencer algorithm article (long) +Message-ID: <450@muller.loria.fr> +Date: 19 Aug 92 19:41:39 GMT +Sender: news@news.loria.fr +Followup-To: comp.music +Organization: CRIN (CNRS) Nancy - INRIA Lorraine +Lines: 375 + +I'm posting this article which I wrote for a MIDI mag a while ago in the hope +that MIDI programmers will find it useful (I saw a posting a week ago asking +about how to write a sequencer). + +Appologies in advance to music reseach people: +This article is (very) "dumbed down" because it is written for an audience +who were (for eg) treated to a lengthy explaination of binary and hex notation +in a previous issue. + +A couple of questions: + +(1) How is the "one point" vs "two point" representation of on/off pairs +handled in top pro/reseach music software? Do you use binary heaps or something +more advanced (eg f-heaps)? + +(2) I've cross posted to comp.music & rec.music.synth (followups to +comp.music) but considering the recent discussion, which group is most +appropriate for MIDI programming articles? I know this is MIDI +and hence an anathema to some (most?) music research people but +rec.music.synth strikes me as user/musician orientated rather than programmer +orinetated. + +Steven + + +MIDI I/O ALGORITHMS +=================== + +by Steven Eker (eker@loria.fr) + + +To a musician, a note is an single object possessing (among other +characteristics) a starting point and a length. However to MIDI equipment +a note consists of two distinct events - a Note On message and a Note Off +message. It is easy to see why MIDI had to be implemented this way: suppose +you press a key on a synth, then the synth must immediately transmit a +message telling any connected modules to play a note, however there is +no way the synth could transmit the length of the note as it hasn't +been determined until you release the key. + +This dichotomy causes a real headache for sequencer designers: how best +to store sequences of notes inside the sequencer? The most obvious +answer is the so called "two point" format where the notes are stored +as a sequence of Note On and Off events, in the order they arrive from +the synth. This format is fine when you simply want to store and replay +sequences unmodified and is the format chosen for the MIDI file standard - +presumably to make life easy for simple-minded sequencers. The problems +start when you want to edit sequences. + +Whenever you move insert or delete a +Note On event you have to move insert or delete the corresponding Note Off +event otherwise you will end up with the notes which change length unexpectedly +or even worse hang indefinitely. Of course a decent sequencer should keep +track of the Note On/Off pairs and present the user with notes as single +entities. With the two point format a Note On event and its matching +Note Off event may be separated by arbitrarily many other events and manipulating such +a sequence consistently requires a lot of searching for matching Note On/Off +pairs. + +It is much simpler if sequences of notes are stored in the "one point" +format where each Note On/Off pair is combined as a single item in a sequence. +This format also saves memory. The big drawback of the one point format +is that it has to be converted to and from the two point format for input +and output. This has to be done in real time and any lengthly computations +will reduce the accuracy of the sequencer. + +In his book "MIDI sequencing in C", Jim Conger suggests storing MIDI sequences +in two point format and then converting them to and from one point format +as required for note level editing by the user. This solution has a number of +disadvantages. Firstly block move/copy routines (and any other routines that +have to manipulate sequences in the two point format) are complicated by the +the need to avoid separating Note On and Note Off events. Secondly +there is no way the user can edit events during playback and hear the +changes as they are being made. Thirdly there is no saving in memory +as is possible with the one point format. + +The method I will explain in this article allows you to have the best of +all worlds and even solves two other MIDI I/O headaches at the same time: + +(1) When a sequencer is replaying a large number of tracks simultaneously + the naive approach of sequentially scanning the active tracks to see + which should be next to output an event can cause timing inaccuracies + and (if interrupts are blocked during this process) cause + incomming MIDI messages to be lost. + +(2) When the user clicks on the stop button, all currently playing notes + must be terminated. One naive method is to send an All Notes Off message + on each MIDI channel. This method fails when the receiving + MIDI device does not implement All Notes Off. Another naive method + is to send Note Off messages for every pitch on every channel. Apart + from taking a little over 1.3 seconds (with running status) this + method can also cause problems if the sequencer output is being merged with + another MIDI source. A rather clever idea used by one well known + sequencer vendor is to send a single Active Sensing message + causing the receiving device to reset itself when no further + Active Sensing messages arrive. Unfortunately even this method + causes problems with certain synths. The right thing to do is to transmit Note + Off messages for just those notes that are actually playing, but + this means keeping track of which these are which can be very + time consuming (affecting sequencer accuracy) if done in a naive way. + +Overview of the solution +======================== + +The basic idea is to keep the sequence(s) in one point format and use fast +algorithms to convert to and from two point format in real time for +input and output. + +Actually converting incoming data from two point format into one point format +is fairly straight-forward. We simply keep a 128x16 entry table. There +is one entry for every pitch/channel combination. When a Note On message +arrives it is stored in a record in the appropriate sequence and a pointer to this +record is stored in the corresponding table entry. When a Note Off message +arrives we look at the appropriate entry in the table. If it is null +then we have a stray Note Off event and we discard it. Otherwise we +have a pointer to the record containing the matching Note On event and we +add the extra information, release time and possibly release velocity to this +record and place a null in the table entry. + +There are a couple of subtle points to cope with missing Note Off messages. +If when we come to write a pointer in to the table we find that the entry +is already filled by a non-null pointer then this pointer points to +a record containing a Note On message which (for some reason) has lost its +Note Off message. In this case we can use the current time as the release +time and 64 as the default release velocity to replace the missing information. +At the end of recording we check through the table looking for non-null entries. If +we find any then these are pointers to records containing Note On messages without +Note Off messages. This can easily happen if the user clicks on the stop +button without releasing all the synth keys. Once again we can use the +current time and the release velocity 64 to fill in the missing data. + +The reverse process, converting from one point format into two point format +for playback is not so simple. We need to use a computer science concept called +a priority queue. + +Priority Queues +=============== + +A priority queue is a collection of items ordered by some property - in our +case time. There are several operations that may be performed on a priority +queue - for our purposes the following four are sufficient. + +(1) Inspect the least item +(2) Remove the least item +(3) Insert a new item +(4) Flush the queue - remove all items. + +Now for playback we keep two priority queues: The first contains the +next note/event for each active track. The second contains all of the +pending Note Off events. + +Now when we come to transmit an event we compare the time stamps of +the least items in the two priority queues. There are two possibilities/steps: + +(1) If the time stamp on the least item in the note/event queue was + the lesser (or the Note Off queue was empty) we output this event. We remove + this item from the note/event queue and insert the next item on the same track + into the note/event queue. Also if this item was a note we insert + a corresponding Note Off event into the Note Off queue. + +(2) If the time stamp on the least item in the Note Off queue was the + lesser (or equal) we output this Note Off event and remove this + Note Off event from the Note Off queue. + +Actually this explanation is oversimplified since we also should take into +account the sequencer clock but I'll come to that later. +The reason for giving Note Off events precedence when the least items in +each queue have the same time stamp is simply that MIDI devices have +limited polyphony and this reduces the likelihood of the polyphony +limit being exceeded and notes being arbitrarily cut off. + +When the user presses the stop button then the Note Off queue contains +a Note Off event for every note playing note so we can simply +flush this queue (i.e. remove and transmit all the Note Off events +in any convenient order) to terminate all currently playing notes. + +Binary Heaps +============ + +Up to now I haven't said anything about how the priority queues are +actually implemented. An obvious solution is to store them as arrays. +There is a snag however: Typically the number of tracks in a sequencer +that could be active will be rather large - say 64 and each will have +an event in the note/event queue. Also the number of pending Note Offs +that might have to be stored in the Note Off queue could be equal to the +total polyphony of all the user's synths/modules. +Now when we have to find the least item in a queue, in the worst case we +might have to check all the items. This is not a good solution. + +Suppose we kept the array in sorted order - now getting at the least +element is easy. However this time we might have to move all the items +already in the queue whenever we insert a new item. A sorted linked +list is also a poor implementation of a priority queue because +we might have to check every item already in the queue to find +out where to insert a new item. + +A better way to implement priority queues is a data structure called a +binary heap. This is an array which is "half-sorted" in a very special +way that allows both the removal of the least item and the insertion +of new items to be performed efficiently. Binary heaps are explained +in detail in any decent book on data structures so I will not go into +technical details here. A particularly good account of binary heaps +for the practising programmer is Chapter 12 of "Programming Pearls" +by Jon Bentley. + +If sequences are stored in one point format, reading and writing them to +and from MIDI files (which remember use the two point format) requires +the same sort of conversion as that required for MIDI I/O and similar +algorithms can be used. The situation for one point format to two point +format conversion is somewhat simpler since only one track is written at +a time so only a Note Off heap is required. Also speed is not so critical +however a binary heap is still a good way to organise the conversion. + +To illustrate how easily binary heaps can be programmed Figure 1 +contains the heap manipulation code (written in 'C') from the MIDI file +save module of my own sequencer. + +------------------------------------------------------------------------------- + +typedef struct heap_struct { + long time; + char byte1, byte2, byte3; +} HEAP; + +static HEAP midi_heap[256]; +static int heap_size; + +ins_heap(time, byte1, byte2, byte3) +register long time; +char byte1, byte2, byte3; +{ + register int empty = ++heap_size, new; + + for(;;){ + new = empty / 2; + if(new == 0 || midi_heap[new].time <= time) + break; + midi_heap[empty] = midi_heap[new]; + empty = new; + } + midi_heap[empty].time = time; + midi_heap[empty].byte1 = byte1; + midi_heap[empty].byte2 = byte2; + midi_heap[empty].byte3 = byte3; +} + +del_heap() +{ + register int empty = 1, new; + register long time = midi_heap[heap_size--].time; + + for(;;){ + new = 2 * empty; + if(new > heap_size) + break; + if(new < heap_size && + midi_heap[new + 1].time < midi_heap[new].time) + new++; + if(midi_heap[new].time >= time) + break; + midi_heap[empty] = midi_heap[new]; + empty = new; + } + midi_heap[empty] = midi_heap[heap_size + 1]; +} + + Figure 1: Heap manipulation code +------------------------------------------------------------------------------- + +How the code is used is a follows. Initially the heap is empty and +heap_size = 0. The least element (if the heap is not empty) +in the heap is always in midi_heap[1]. +(Yes - I know 'C' arrays start at 0 but here it is convenient to not use +the first element.) Each event in the sequence being written to +a MIDI file has its time stamp compared +with that of the Note Off event in midi_heap[1] (if the heap is not empty). +If the Note Off event in midi_heap[1] has the lesser time stamp it +is written to the MIDI file and del_heap() is called to remove it from +the heap and the comparison step is repeated with the new occupant of +midi_heap[1] (assuming the heap is still not empty). + +Whenever the current event in the sequence has the lesser time stamp +(or the heap is empty) this event is written to the MIDI file. Also if +this event was a Note On event, ins_heap is called to put the corresponding +Note Off event in the Note Off heap. + +At the end of the sequence the Note Off events remaining in the +heap are written to the MIDI file and removed from the heap in the +order least time stamp first. +In this way the Note Off events are slotted into their correct places in the +MIDI file. + +Subtle points +============= + +There are a number of subtle points and refinements when it comes to +implementing the above ideas. + +First off, during playback we need to compare +time stamps of events against the current sequencer clock to see if they +are due to be output as well as against each other to determine the order. + +One way of organising this is that we first compare the least +element of the Note Off heap against the sequencer clock - if it is +less than or equal we take step (2) above. Otherwise we compare the least +element of the note/event heap against the sequencer clock - if it is +less than or equal we take step (1) above. Otherwise we know that the time +stamps on all the next events in all the active tracks and all the pending +Note Off events are greater than the current music time and nothing is due +to be output until the sequencer clock is next incremented. + +Doing the tests this way around means that Note Off events can actually +be transmitted in before other events with earlier time stamps - however +this can only happen when there is a backlog of events due to be transmitted +and prioritising Note Off messages under these circumstances may be a good +thing. + +The alternative arrangement is to compare the time stamps of the least +elements on the two heaps first and then compare the lesser of these +against the sequencer clock. + +Notice that during playback the Note Off heap starts off as empty and is +filled on the fly. To set up the note/event heap at the beginning of playback +we simply call the heap insert item routine to insert the first event +of each track (or more efficiently a pointer to the first event on each track) +into the note/event heap. + +Also notice that testing the least item in a heap just means testing the item +in the first location of the array used to store the heap. So no real +work has to be done rearranging the heaps unless a MIDI message is actually +transmitted and items have to be inserted and/or deleted from the heaps. + +Now in a professional sequencer the MIDI output code is interrupt driven +and written in assembler both for accuracy and to allow it to run as a +background task. Now even though the heap insert and delete item algorithms +are very fast and can be coded in very tight assembler (the division and +multiplication in the above code are done by shifting) it is +possible for that for very large heaps they may not complete their task +in the 320us between MIDI output bytes (or input bytes). +Thus MIDI bandwidth could be wasted and accuracy impaired (and incomming MIDI +data could be lost). + +A neat (but tricky) way of getting around this problem is allow the +code that rearranges the heaps (running in an interrupt routine) +to itself be interrupted by other interrupt routines to output and input +MIDI bytes. In this way incomming MIDI data will not be lost. Also we +have complete timing accuracy (up to sequencer clock resolution and MIDI +bandwidth) as long as the heap rearrangement can be done in the +640us or 960us between output messages (Okay some messages +can be transmitted in one byte using running status +- but these are not Note On messages so we only have to rearrange one heap). +Needless to say there has be be some kind of synchronisation +between the various layers of interrupts and this is a tricky topic which +I will not go into here. + +A nice refinement is to allow the user to activate and deactivate tracks +while the sequencer is playing. This is done using slightly modified +versions of the heap insert and delete item routines to insert(remove) +the next event of the activated(deactivated) track in the +note/event heap. Another refinement is to allow the user to edit (or block +copy/move) sequences while they are being played. Both of these +refinements require synchronisation between the main program code which is +making the change and the interrupt routines that are modifying the heaps and +accessing the track sequences. + + diff --git a/midiseq/MIDI.DSW b/midiseq/MIDI.DSW new file mode 100644 index 0000000..8e53373 Binary files /dev/null and b/midiseq/MIDI.DSW differ diff --git a/midiseq/MIDI32.DSW b/midiseq/MIDI32.DSW new file mode 100644 index 0000000..a2b9508 Binary files /dev/null and b/midiseq/MIDI32.DSW differ diff --git a/midiseq/MIDI32.IDE b/midiseq/MIDI32.IDE new file mode 100644 index 0000000..14efdfe Binary files /dev/null and b/midiseq/MIDI32.IDE differ diff --git a/midiseq/MIDIDATA/GENERAL.TXT b/midiseq/MIDIDATA/GENERAL.TXT new file mode 100644 index 0000000..3cc756b --- /dev/null +++ b/midiseq/MIDIDATA/GENERAL.TXT @@ -0,0 +1,259 @@ + +Date: Tue, 14 Jan 92 23:01:16 EST +From: jeff@millie.loc.gov (Jeff Mallory) +Subject: General MIDI Level Spec + + +**** Brief Overview of Proposed General MIDI Level 1 Spec **** + + The heart of General MIDI (GM) is the _Instrument Patch Map_, shown in +Table 1 (see below). This is a list of 128 sounds, with corresponding +MIDI program numbers. Most of these are imitative sounds, though the +list includes synth sounds, ethnic instruments and a handful of sound +effects. + The sounds fall roughtly into sixteen families of eight variations +each. Grouping sounds makes it easy to re-orchestrate a piece using +similar sounds. The Instrument Map isn't the final word on musical +instruments of the world, but it's pretty complete + General MIDI also includes a _Percusssion Key Map_, show in Table 2 +(see below). This mapping derives from the Roland/Sequential mapping +used on early drum machines. As with the Instrument Map, it doesn't +cover every percussive instrument in the world, but it's more than +adequate as a basic set. + To avoid concerns with channels, GM restricts percussion to MIDI +Channel 10. Theoretically, the lower nine channels are for the +instruments, but the GM spec states that a sound module must respond +to all sixteen MIDI channels, with dynamic voice allocation and a +minimum of 24 voices. + General MIDI doesn't mention sound quality of synthesis methods. +Discussions are under way on standardizing sound parameters such as +playable range and envelope times. This will ensure that an arrangement +that relies on phrsing and balance can play back on a variety of +modules. + Other requirements for a GM sound module include response to velocity, +mod wheel, aftertouch, sustain and expression pedal, main volume and +pan, and the All Notes Off and Reset All Controllers messages. The +module also must respond to both Pitch Bend and Pitch Bend Sensitivity +(a MIDI registered parameter). The default pitch bend range is +-2 +semitones. + Middle C (C3) corresponds to MIDI key 60, and master tuning must be +adjustable. Finally, the MIDI Manufacturers Association (MMA) created a +new Universal System Exclusive message to turn General MIDI on and off +(for devices that might have "consumer" and "programmable" settings). +Table 3 (see below) summarizes these requirements. + General MIDI has room for future expansion, including additional drum +and instrument assignments and more required controllers. Also under +discussion is an "authorizing document" that would standardize things +such as channel assignments (e.g., lead on 1, bass on 2, etc.) and setup +information in a MIDI file. + +Copies of the Level 1 Specification documents for General MIDI ($5 each +at last notice) are available from the Internation MIDI Association, +5316 West 57th Street Los Angeles, CA 90056, (213) 649-6434. The first +issue of the Journal of the MMA (back issues, $15 each) contains an +article by PassPort Designs and Stanley Junglieb about General MIDI. + + +Roland's GS Standard + + When Warner New Media first proposed a General MIDI standard, most MMA +members gave it little thought. As discussions proceeded, Roland +listened and developed a sound module to meet the proposed +specification. At the same NAMM show where the MMA ratified General MIDI +Level 1, Roland showed their Sound Brush and Sound Canvas, a Standard +MIDI File player and GM-compatible sound module. + Some companies feel that General MIDI doesn't go far enough, so Roland +created a superset of General MIDI Level 1, which they call GS Standard. +It obeys all the protocols and sound maps of General MIDI and adds many +extra controllers and sounds. Some of the controllers use Unregistered +Parameter Numbers to give macro control over synth parameters such as +envelope attack and decay rates. + The new MIDI Bank Select message provides access to extra sounds +(including variations on the stock sounds and a re-creation of the MT-32 +factory patches). The programs in each bank align with the original 128 +in General MIDI's Instrument Patch Map, with eight banks housing related +families. The GS Standard includes a "fall back" system. If the Sound +Canvas receives a request for a bank/program number combination that +does not exist, it will reassign it to the master instrument in that +family. A set of Roland System Exclusive messages allows reconfiguration +and customization of the sound module. + This means that a Roland GS Standard sound module will correctly play +back any song designed for General MIDI. In addition, if the song's +creator wants to create some extra nuance, they can include the GS +Standard extensions in their sequence. None of these extensions are so +radical as to make the song unplayable on a normal GM sound module. +After all, compatibility is what MIDI - and especially General MIDI - is +all about. + Music authors interested in the GS Standard should contact Tom White +at RolandCorp USA, 7200 Dominion Circle, Los Angeles, CA 90040, (213) +685-5141. + +**** TABLE 1 - General MIDI Instrument Patch Map **** +(groups sounds into sixteen families, w/8 instruments in each family) + +Prog# Instrument Prog# Instrument + + (1-8 PIANO) (9-16 CHROM PERCUSSION) +1 Acoustic Grand 9 Celesta +2 Bright Acoustic 10 Glockenspiel +3 Electric Grand 11 Music Box +4 Honky-Tonk 12 Vibraphone +5 Electric Piano 1 13 Marimba +6 Electric Piano 2 14 Xylophone +7 Harpsichord 15 Tubular Bells +8 Clav 16 Dulcimer + + (17-24 ORGAN) (25-32 GUITAR) +17 Drawbar Organ 25 Acoustic Guitar(nylon) +18 Percussive Organ 26 Acoustic Guitar(steel) +19 Rock Organ 27 Electric Guitar(jazz) +20 Church Organ 28 Electric Guitar(clean) +21 Reed Organ 29 Electric Guitar(muted) +22 Accoridan 30 Overdriven Guitar +23 Harmonica 31 Distortion Guitar +24 Tango Accordian 32 Guitar Harmonics + + (33-40 BASS) (41-48 STRINGS) +33 Acoustic Bass 41 Violin +34 Electric Bass(finger) 42 Viola +35 Electric Bass(pick) 43 Cello +36 Fretless Bass 44 Contrabass +37 Slap Bass 1 45 Tremolo Strings +38 Slap Bass 2 46 Pizzicato Strings +39 Synth Bass 1 47 Orchestral Strings +40 Synth Bass 2 48 Timpani + + (49-56 ENSEMBLE) (57-64 BRASS) +49 String Ensemble 1 57 Trumpet +50 String Ensemble 2 58 Trombone +51 SynthStrings 1 59 Tuba +52 SynthStrings 2 60 Muted Trumpet +53 Choir Aahs 61 French Horn +54 Voice Oohs 62 Brass Section +55 Synth Voice 63 SynthBrass 1 +56 Orchestra Hit 64 SynthBrass 2 + + (65-72 REED) (73-80 PIPE) +65 Soprano Sax 73 Piccolo +66 Alto Sax 74 Flute +67 Tenor Sax 75 Recorder +68 Baritone Sax 76 Pan Flute +69 Oboe 77 Blown Bottle +70 English Horn 78 Skakuhachi +71 Bassoon 79 Whistle +72 Clarinet 80 Ocarina + + (81-88 SYNTH LEAD) (89-96 SYNTH PAD) +81 Lead 1 (square) 89 Pad 1 (new age) +82 Lead 2 (sawtooth) 90 Pad 2 (warm) +83 Lead 3 (calliope) 91 Pad 3 (polysynth) +84 Lead 4 (chiff) 92 Pad 4 (choir) +85 Lead 5 (charang) 93 Pad 5 (bowed) +86 Lead 6 (voice) 94 Pad 6 (metallic) +87 Lead 7 (fifths) 95 Pad 7 (halo) +88 Lead 8 (bass+lead) 96 Pad 8 (sweep) + + (97-104 SYNTH EFFECTS) (105-112 ETHNIC) + 97 FX 1 (rain) 105 Sitar + 98 FX 2 (soundtrack) 106 Banjo + 99 FX 3 (crystal) 107 Shamisen +100 FX 4 (atmosphere) 108 Koto +101 FX 5 (brightness) 109 Kalimba +102 FX 6 (goblins) 110 Bagpipe +103 FX 7 (echoes) 111 Fiddle +104 FX 8 (sci-fi) 112 Shanai + + (113-120 PERCUSSIVE) (121-128 SOUND EFFECTS) +113 Tinkle Bell 121 Guitar Fret Noise +114 Agogo 122 Breath Noise +115 Steel Drums 123 Seashore +116 Woodblock 124 Bird Tweet +117 Taiko Drum 125 Telephone Ring +118 Melodic Tom 126 Helicopter +119 Synth Drum 127 Applause +120 Reverse Cymbal 128 Gunshot + + +**** TABLE 2 - General MIDI Percussion Key Map **** +(assigns drum sounds to note numbers. MIDI Channel 10 is for percussion) + +MIDI Drum Sound MIDI Drum Sound +Key Key + +35 Acoustic Bass Drum 59 Ride Cymbal 2 +36 Bass Drum 1 60 Hi Bongo +37 Side Stick 61 Low Bongo +38 Acoustic Snare 62 Mute Hi Conga +39 Hand Clap 63 Open Hi Conga +40 Electric Snare 64 Low Conga +41 Low Floor Tom 65 High Timbale +42 Closed Hi-Hat 66 Low Timbale +43 High Floor Tom 67 High Agogo +44 Pedal Hi-Hat 68 Low Agogo +45 Low Tom 69 Cabasa +46 Open Hi-Hat 70 Maracas +47 Low-Mid Tom 71 Short Whistle +48 Hi-Mid Tom 72 Long Whistle +49 Crash Cymbal 1 73 Short Guiro +50 High Tom 74 Long Guiro +51 Ride Cymbal 1 75 Claves +52 Chinese Cymbal 76 Hi Wood Block +53 Ride Bell 77 Low Wood Block +54 Tambourine 78 Mute Cuica +55 Splash Cymbal 79 Open Cuica +56 Cowbell 80 Mute Triangle +57 Crash Cymbal 2 81 Open Triangle +58 Vibraslap + + +**** TABLE 3 - General MIDI minimum sound module specs **** + +Voices: +A minimum of either 24 fully dynamically allocated voices +available simultaneously for both melodic and percussive sounds or 16 +dynamically allocated voices for melody plus eight for percussion. + +Channels: +General MIDI mode supports all sixteen MIDI channels. Each channel can +play a variable number of voices (polyphony). Each channel can play a +different instrument (timbre). Keybased Percussion is always on +Channel 10. + +Instruments: +A minimum of sixteen different timbres playing various instrument +sounds. A minimum of 128 preset for Intruments (MIDI program numbers). + +Note on/Note off: +Octabe Registration: Middle C(C3) = MIDI key 60. All Voices including +percussion respond to velocity. + +Controllers: +Controller # Description + 1 Modulation + 7 Main Volume + 10 Pan + 11 Expression + 64 Sustain +121 Reset All Controllers +123 All Notes Off + +Registered Description +Parameter # +0 Pitch Bend Sensitivity +1 Fine Tuning +2 Coarse Tuning + +Additional Channel Messages: +Channel Pressure (Aftertouch) +Pitch Bend + +Power-Up Defaults: +Pitch Bend Amount = 0 +Pitch Bend Sensitivity = +-2 semitones +Volume = 90 +All Other Controllers = reset + +(after Electronic Musician, 8/91 issue) + + + diff --git a/midiseq/MIDIDATA/MIDI-ARC.TXT b/midiseq/MIDIDATA/MIDI-ARC.TXT new file mode 100644 index 0000000..7333e53 --- /dev/null +++ b/midiseq/MIDIDATA/MIDI-ARC.TXT @@ -0,0 +1,342 @@ +--------------------------------------------- +Version: $Id: archives,v 1.121 1995/02/24 14:44:20 piet Exp $ + +Note: the latest version of this file is available from the ftp.cs.ruu.nl +archive as MIDI/DOC/archives (see below how to access the archive) and +on the various news.answers archives. This archive also contains a lot of +midi music and programs. Mirrors of the MIDI/SONGS directory or the whole +archive can be found on the following sites: +ftp.cis.nctu.edu.tw /MIDI/SONGS/ +ftp.pu-toyama.ac.jp /pub/ftpmail/ftp.cs.ruu.nl/pub/MIDI/SONGS +ftp.monash.edu.au /pub/midi/SONGS +ftp.funet.fi /pub/sounds/midi +ftp.ibp.fr /pub/midi +------------------------------------------------------------------------ +A large collection of midifiles can be found on wuarchive.wustl.edu, in +/systems/ibmpc/ultrasound/sound/midi/files. Some of these files are +specific for the Gravis Ultrasound card but most are also usable for other +synthesizers. + +There is an FTP archive at ftp.ucsd.edu [128.54.16.7] . It contains a.o. MIDI +files, patches and a few programs. See the directory 'midi'. This archive +looks rather out of date, by the way. + +There is a demo of Symbolic Composer at media-lab.media.mit.edu [18.85.0.2] +(directory 'music/midi') and on sumex.stanford.edu [171.65.4.3] in +/info-mac/Application/ (symbolic-composer-*). It can probably also be found +on other info-mac archives. More Symbolic Composer stuff can be obtained +from Fokke de Boer by e-mail to Fokke.de.Boer@rivm.nl a message with Subject: +retrieve directory and following the instructions that you will receive. + +atari.archive.umich.edu [141.211.120.11] contains Atari stuff in directory +'/atari/Music'. + +scam.berkeley.edu [128.32.138.1] contains netjam submissions on midifiles +in directory '/pub/misc/netjam/submissions/'. + +Sites for MIDI Sample Dump Standard programs and samples: +alf.uib.no [129.177.30.3], directory /pub/sds +sweaty.palm.cri.nz [161.66.1.11], directory sds + +wagner.musicnet.ua.edu [130.160.156.75] is a site that just started to +collect music stuff. It has patches for Roland JV-80/880/1000 in directory +/pub/music/patches/jv80. + +oak.oakland.edu [141.210.10.117] has EPS/EPS-16+/ASR samples in +/pub/eps/samples. More EPS info is in pub/eps/docs/. There are some +programs for the EPS in /pub/eps/utils (Atari ST, Amiga, MAC, MSDOS). See +pub/eps/docs/utils for info. Feel free to access oak.oakland.edu using +Gopher (gopher.acs.oakland.edu, port 70) or WWW (Mosaic/Lynx URL: +http://www.acs.oakland.edu). + +Ftp sites for the Kurzweil K2000: + 1) ftp.uwp.edu:/pub/music/lists/kurzweil (maintained by jbuckman@aas.org) + 2) bach.nevada.edu:/pub/k2000 (maintained by johann@nevada.edu) + +bach.nevada.edu also contains christian music midi files in /pub/midi. + +qiclab.scn.rain.com in /pub/music contains various conversion programs. + +Roland Samplers: +There is an FTP archive that includes introductory information, useful +utilities (read Roland disks on your computer), archives of the mailing +list, and some samples. The archive is on lotus.UWaterloo.ca in the +pub/sgroup directory. + +There also is a ftp-site with TX16W samples, maintained by one of the TX16W +list-members. FTP to ftp.informatik.uni-freiburg.de [132.230.150.1], the +samples are in the directory "pub/sounds/tx16w/samples". There are also +back issues of the TX-16W newsletter in pub/sounds/tx16w/mail. A WWW entry +is http://ls7-www.informatik.uni-dortmund.de/html/tx16w.html + +Archives of the Music-Research Digest can be found at +cattell.psych.upenn.edu [12128.91.2.173] in directory pub/Music.Research + +impaqt1.mem.drexel.edu [129.25.10.1] has a couple of msdos files in +'pub/files/ibm/midi' + +There is an EMAX (I and II) FTP site at sweaty.palm.cri.nz (161.66.1.11) +some samples, FAQ, archives of mailing list and some software to allow +sample interchange for PC compatibles +---------------------------------------------------------------------------- +Cakewalk files can be found at ftp.funet.fi [128.214.6.100] in +'pub/msdos/sound/cakewalk' and also on ucsd.edu (see above). More cakewalk +stuff (including archives of the Cakewalk mailing list) can be found at: +ftp.cs.colorado.edu:/users/mccreary/archive/cakewalk or on WWW as +http://www.cs.colorado.edu/~mccreary/archive/cakewalk +There is a VFX archive in the parallel directory mccreary/archive/vfx. +Another site for Cakewalk is mort.isvr.soton.ac.uk:/pub/pc/cakewalk (ftp) or +http://www.isvr.soton.ac.uk/People/ccb/Cakewalk (WWW) +---------------------------------------------------------------------------- +There are several MIDI programs for MS Windows in +ftp.cica.indiana.edu:pub/pc/win3/sounds. + +OS/2 programs can be found on ftp-os2.cdrom.com [192.153.46.2]. Directories +/pub/os2/2_x/mmedia and /pub/os2/2_1/mmedia contain the bulk of the +MIDI-related files for OS/2. (There is a specific ftp site for OS/2 +multimedia in the formative stages right now, but it is not yet in +operation.) For a full index of OS/2 files at that site, retrieve +/pub/os2/00index.txt. Submissions may be placed in /pub/os2/incoming. + +mac.archive.umich.edu [141.211.165.41] has a Macintosh midi archive in +mac/sound/midi + +Other Macintosh sites: See the file Mac-archives in this directory. + +An FTP site for predominantly D-70-related files: /pub/D70 on +kilroy.jpl.nasa.gov. + +ftp.neuroinformatik.ruhr-uni-bochum.de in directory +/pub/outgoing/heja/sy-list there are several infos/sounds/programs of +interest for Yamaha SY users (this is the "inofficial" ftp-site of the +sy-list). IMPORTANT NOTE: go directly to the above mentioned directory! +Access via WWW: +http://www.neuroinformatik.ruhr-uni-bochum.de/ini/PEOPLE/heja/sy-list.html + +The site contains mostly original material and is not a mirror of the big +music archives. + +ftp.ecn.nl:/pub/RP-1: DIGITECH RP-1 MIDI guitar effect pedals and some +other midi stuff. + +Apple 2 MIDI Synth archives can be found on cco.caltech.edu [131.215.6.10] +in the pub/apple2/music/synthlab/ directory. They are mirrored on +grind.isca.uiowa.edu [128.255.21.233] + +Amiga users can get some things by mail from mrcserv@janus.mtroyal.ab.ca +(send a HELP message first) + +For amiga see also the aminet sites: + +litamiga.epfl.ch 128.178.151.32 +ftp.luth.se 130.240.18.2 +ftp.uni-kl.de 131.246.9.95 +ftp.uni-erlangen.de 131.188.1.43 +ftp.cs.tu-berlin.de 130.149.17.7 +ftp.uni-paderborn.de 131.234.2.32 +ftp.wustl.edu 128.252.135.4 +ftp.cdrom.com 192.153.46.2 +merlin.etsu.edu 192.43.199.20 + +There is a listserv containing e-music related stuff at American +University. +Send a message to listserv@auvm.bitnet containing the line: +get emusic filelist +------------------------------------------------------------------------ +IRCAM: + IRCAM operates an anonymous ftp site, ftp.ircam.fr, with programs and + information on music, DSP, multimedia, infosystems, networking, etc., + for unix platforms, macintoshes and PC. + +(amongst others:) +/pub/ + music/ Computer music software and info + databases/ Music databases + doc/ Documentation + FAQ/ FAQ about audio, dsp, etc... + MIDI/ MIDI standard definition + programs/ Repository of public domain computer music programs + snd/ +It also has a WWW server on similar resources, http://www.ircam.fr. +This includes a MIDI archive (programs, sounds, patches, docs) +------------------------------------------------------------------------ +Computer Music Journal Internet Archive and World-Wide Web Home Page: + +mitpress.mit.edu:/pub/Computer-Music-Journal and +ccrma-ftp.stanford.edu:/pub/Publications/cmj + +Tables of contents, abstracts, and editor's notes of several volumes of +CMJ. + +World-Wide Web (WWW) home page in the file CMJ.html (e.g. URL +ftp://mitpress.mit.edu/pub/Computer-Music-Journal/CMJ.html) +------------------------------------------------------------------------ +ftp.mcc.ac.uk /pub/cubase Cubase archive. Contains Atari, Mac and + MSWindows demos +------------------------------------------------------------------------ +ftp.waldorf-gmbh.de: A site with information, patches etc. of Waldorf +products, contains also a lot of other Midi stuff. Also reachable by email +to archive-server@waldorf-gmbh.de (send a HELP message). See also mailing +list section below. +------------------------------------------------------------------------ +You'll find some NoiseTracker/SoundTracker MOD files, and Soundblaster +things on the following FTP sites: + + Garbo.Uwasa.fi /pc/sb and /pc/music + Wuarchive.Wustl.Edu + Simtel20.Army.Mil + ftp.funet.fi /pub/amiga/audio + /pub/atari/sound + /pub/unix/sound + /pub/msdos/sound + ux1.cso.uiuc.edu /amiga/mirror/mods + ftp.brad.ac.uk /misc/mods /incoming/mods + ftp.uni-kl.de /pub/amiga/mods + /pub/amiga/ianet/mods +------------------------------------------------------------------------ +/ftp.eng.ufl.edu:/pub/msdos/demos/music/ contains several music files, +demos etc. (hardly any MIDI, but mostly MODs etc). +------------------------------------------------------------------------ +The demo version of QSEQ, a complete sequencer for MSDOS/SoundBlaster, is +available by email automatic server. Just send a message to +qseqmail@h2o.cad.cea.fr with the following line in the body of the message: +sendqseqto or sendhelpto + , if you just want an help file about the +mailer and QSEQ. QSEQ is also available on SIMTEL mirrors +(oak.oakland.edu, etc...). And from +ftp.cs.ruu.nl:/pub/MIDI/PROGRAMS/MSDOS. +------------------------------------------------------------------------- +ella.mills.edu in /ccm/tuning contains files about alternative tunings, +a.o. back issues of the Alternate Tuning mailing list, software to put +synths in alternate tunings and a bibliography on the subject. You can also +acess this archive by sending a message to listproc@varese.mills.edu. See +the file /ccm/README for more info about this archive. +------------------------------------------------------------------------- +ftp.und.ac.za (University of Natal, Durban) contains midifiles and programs +for the Sound Canvas and MT-32 in directory: /pub/pc/midi/ +------------------------------------------------------------------------- +The EMUSIC-L mailing list (see below) archives can be found on the WWW +http://sunsite.unc.edu/mcmahon/emusic-l/welcome.html. Ftp access will be +available soon. +------------------------------------------------------------------------ A +ftp.mcc.ac.uk contains the archives of the Emagic Logic mailing list in +pub/emagic/ListArchive and other MIDI stuff in pub/MIDIMISC. +There is also a WWW page on http://www.mcc.ac.uk/~emagic/emagic_page.html +------------------------------------------------------------------------ +Sound Canvas User's Group WWW Homepage - +http://www.eeb.ele.tue.nl/midi/scgroup/index.html +------------------------------------------------------------------------ +WWW archive of the Korg Wavestation Mailing List can be found at: +http://anjovis.tky.hut.fi/~ws/ +------------------------------------------------------------------------ +There is a large collection of patches for the Korg DW/EX8000 at +loose.apana.org.au in the directory pub/dw8000 +------------------------------------------------------------------------ +Korg X3-FTP - ftp.netcom.com in /pub/jo/jonin/midi/x3 + The Korg X3 ftp site for patches and various programs relating + to and supporting the Korg X3. (editors, utilitys, cakewalk + ini settings, documents, etc..) +------------------------------------------------------------------------ +/musie.phlab.missouri.edu:/pub/korg/ +contains info related to Korg electronic music products, +particularly the "0" (01/W, 03, 05) and X synthesizers. +Anon ftp upload is available in subdirectory submissions. +WWW access is via http://musie.phlab.missouri.edu/pub/korg/ +------------------------------------------------------------------------ +SHARC Timbre Database: ftp.ep.susx.ac.uk:pub/sandell (Web users: +ftp://ftp.ep.susx.ac.uk/pub/sandell/README.html). This is a database with +timbre information of musical instruments. +------------------------------------------------------------------------ +heinous.isca.uiowa.edu://kahless/ftp/pub: MAX programming language (for the +Macintosh): subdir max. Algorithmic composition: subdir algo-comp. +------------------------------------------------------------------------ +WWW Archives of Classical Midi Sequences: http://www.hk.net/~prs/midi.html +------------------------------------------------------------------------ +MAILING LISTS: + +NOTE: The adresses mentioned are those where you can subscribe or get info +about the list. The lists themselves usually have the name without the +-request if that part is present, or LISTNAME@HOST if the command to +subscribe is SUBSCRIBE LISTNAME sent to LISTSERV@HOST. +If appears in the following it has to be replaced by your +real name (like Piet van Oostrum for me). + +Algorithmic composition majordom@heinous.isca.uiowa.edu + message: subscribe ALGO-COMP +Alternate Tunings LISTPROC@VARESE.MILLS.EDU + message: A blank line followed by: + SUBSCRIBE TUNING + (Greg Higgs at higgs@mills.edu) +Analogue Heaven analogue-request@magnus.acs.ohio-state.edu +Cakewalk LISTSERV@LISTS.COLORADO.EDU + message: SUBS CAKEWALK +Casio synths casio-request@cadsi.com +Cubase cubase-users-request@mcc.ac.uk +DIGITECH RP-1/RP-10 MAILSERV@ECN.NL (Marcel Bernards ) + Guitar effect users message: subscribe RP-1-L +Finale LISTSERV@SHSU.edu + normal: message: SUBSCRIBE Finale "Your Full Name in Quotes" + digest: SUBSCRIBE Finale-Digest "Your Full Name in Quotes" +DX-7 xeno@iastate.edu (Gary L Snethen) +EMU Emax emax-request@flobalob.hpl.hp.com +K2000 LISTSERV@jhuvm.hcf.jhu.edu + message: SUBSCRIBE K2000 +Korg 01/W korget-request@sonata.fipnet.fi + 'ADD
' in the message body +Korg X3 majordomo@io.rdc.puc-rio.br + message: subscribe x3-list +MAX Interactive music/ listserv@vm1.mcgill.ca +multimedia environment message: SUBSCRIBE MAX +netjam netjam-request@xcf.berkeley.edu + with Subject: request for info +EMagic's Logic automatic: majordomo@mcc.ac.uk + (formerly Notator) message: subscribe logic-users +For its digest: subscribe logic-users-digest + human: logic-users-request@mcc.ac.uk + logic-users-digest-request@mcc.ac.uk +Ensoniq VFX vfx-request@digibd.com +EPS eps-request@oak.oakland.edu + message: subscribe +Roland Samplers sgroup-request@lotus.UWaterloo.ca +Roland D-70 cyamamot@kilroy.Jpl.Nasa.Gov (Clifford Yamamoto) +Roland JV-80/880 jv80-request@burner.com + message: #SUBSCRIBE + +Roland JV-1080 majordomo@teleport.com + message: subscribe jv-1080 +Roland U20/U220 now a Usenet newsgroup alt.music.synth.roland.u20 +TX16W majordomo@lists.eunet.fi + message: subscribe tx16w +Yamaha SY sy-request@chorus.fr +EMUSIC-L LISTSERV@AUVM.AMERICAN.EDU (LISTSERV@AUVM.BITNET) +(Discussions on message: SUBS EMUSIC-L +electronic Music) Digest form: SUBS EMUSIC-D +Sound Canvas FAQ - scug-faq@preference.north.net + User's Group Music - scug-music@preference.north.net +SYNTH-L LISTSERV@AUVM.AMERICAN.EDU (LISTSERV@AUVM.BITNET) + message: SUBS SYNTH-L +SQ-x/KS-32 ks32-request@cygnus.com +Waldorf (+other) users user-forum-request@waldorf-gmbh.de + Subject: subscribe +Korg Wavestation listserver@otax.tky.hut.fi + message: SUBSCRIBE WAVESTATION Your Full Name +Women's issues in music LISTSERV@IUBVM.UCS.INDIANA.EDU (LISTSERV@IUBVM.BITNET) + message: SUBSCRIBE WIML-L +------------------------------------------------------------------------ +NOTE: I am setting up a midi archive on our machine, so if you have info +about PD stuff (programs and midifiles) please share with me. And if you +want to share some of your own things that will be appreciated. +The archive is available with ftp from ftp.cs.ruu.nl [131.211.80.17], +directory MIDI. Also by a mail-server - send mail to mail-server@cs.ruu.nl +with the following contents: +BEGIN +PATH +HELP +send MIDI/INDEX +END +Note: specify a correct address (e.g. user@host.univ.edu or user@host.BITNET) +------------------------------------------------------------------------ +Piet* van Oostrum, Dept of Computer Science, Utrecht University, (*`Pete') +Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands. +Telephone: +31 30 531806 Telefax: +31 30 513791 Internet: piet@cs.ruu.nl +PGP public key by finger or WWW http://www.cs.ruu.nl/~piet diff --git a/midiseq/MIDIDATA/MIDI-BBS.TXT b/midiseq/MIDIDATA/MIDI-BBS.TXT new file mode 100644 index 0000000..519fbec --- /dev/null +++ b/midiseq/MIDIDATA/MIDI-BBS.TXT @@ -0,0 +1,15 @@ + +BBS Name City Number +------------------------------------------------------------------- +Joel Sampson's Engineering Dallas, TX 214-328-6909 +San Francisco MIDI Users San Francisco, CA 415-771-1788 +Video-Pro Virginia 703-455-1873 +Yamaha C1 BBS Los Angeles, CA 714-522-9464 +Sound Management Mundelien, IL Dave Nosek SNDMGMT 708-949-MIDI (708)949-6434 +MIDI User's Group St. Louis, MO Rik Brown TRAVEL 314-973-4073 +Union Lake Millville, NJ George Cuccia UNION 609-327-5553 +Music Quest Dallas, TX Paul Messick MQUEST 214-881-7311 +HyperLinc West Albany, CA Jake Essl HYPER 510-524-9330 O +H-O-T BBS Nashville, TN Larry Reeves HOT 615-890-8715 +PGH-MIDI Music Pittsburg, PA Art Doud MUSIC 412-882-3703 + diff --git a/midiseq/MIDIDATA/MIDI-CAB.TXT b/midiseq/MIDIDATA/MIDI-CAB.TXT new file mode 100644 index 0000000..1696eb2 --- /dev/null +++ b/midiseq/MIDIDATA/MIDI-CAB.TXT @@ -0,0 +1,132 @@ +From: ttl@aura.cs.wisc.edu (Tony Laundrie) +Subject: Re: Radio Shack Secret? (Midi cables) +Date: 8 Aug 91 17:38:55 GMT + +> (From Bob McQueer's MIDI Spec Primer) +> +> The standard connectors used for MIDI are 5 pin DIN. Separate sockets +> are used for input and output, clearly marked on a given device. The +> spec. gives 50 feet as the maximum cable length. Cables are to be +> shielded twisted pair, with the shield connecting pin 2 at both ends. +> The pair is pins 4 and 5, pins 1 and 3 being unconnected: +> +> 2 +> 5 4 +> 3 1 + +If you buy a generic cable, it probably looks like: + + /\ ################# /\ + 1 -|------#################---|------ 1 + | | ################# | | + 2 -|------#################---|------ 2 + | | ################# | | + 3 -|------#################---|------ 3 + | | ################# | | + 4 -|------#################---|------ 4 + | | ################# | | + 5 -|------#################---|----- 5 + | | ################# | | + \/ ################# \/ + \___/ SHIELD \___/ Metal Shell of DIN Connector + +This probably works, but it might be electrically noisy, and perhaps not +reliable for long distances. If you make your own cables with 2-conductor +shielded wire as described in the SPEC, do it as shown below: + + /\ /\ + /\ / ################# \ /\ + 1 -|- | | ################# | | ----- 1 + | | | ################# | | | + 2 -|-----/ ################# \--|------ 2 + | | ################# | | + 3 -|- | ################# | ----- 3 + | | ################# | | + 4 -|----------#################-------|------ 4 + | | ################# | | + 5 -|----------#################-------|----- 5 + | | ################# | | + \/ ################# \/ + \_ SHIELD _/ Metal shell of DIN Connector + +Connect the wire shield to pin 2, and connect pins 4 and 5 with the other +wires. Do NOT connect the metal shell of the DIN connector to the wire +shield (pin 2) -- I had pin 2 shorted with the shell at first and that +didn't work with my setup. + + ttl@cs.wisc.edu + +From: janin@v785.stanley.co.jp (chan" Janin) +Subject: Re: MIDI DIN connector pin-out needed +Date: 7 Jan 92 10:18:06 GMT + +************************************************************************ +* Please Please, Refrain from "Email"-ing me... Look at my Signature ! * +************************************************************************ + +In article <311@ittc.wec.com> simmons@ittc.wec.com (Gary Simmons) writes: +>A friend got a Soundblaster for Xmas and wants to make his own cable +>to go between the 15 pin connector on the SB card to a MIDI connector +>on the other. What pins do what on the MIDI end? I remember a bit of +>discussion on this a while back, but didn't save any of it... +> +>Thanks, +> +>Garry Simmons +>simmons@ittc.wec.com + +I hope nodoby replied you before me... + +This is the TRUE pin assignment for MIDI plugs. +I know it "by heart" because I used to make my own interfaces +for my computers... + +MIDI IN : 1- n.c. + 4- anode of optocoupler + 2- n.c. <<<--- !!!! Different for MIDI OUT + 5- cathode of optocoupler + 3- n.c. + +MIDI OUT/THRU: 1- n.c. + 4- +5v thru resistor + 2- local ground + 5- TTL open collector ouput + 3- n.c. + +The pin numbers are usually printed into the plastic of the plug, +in that order (or the reversed one). + +Don't connect MIDI IN pin 2... it preserves OPTOISOLATION from +MIDI OUT device to MIDI IN device. + +To make your own MIDI cable, wire pin 4 to 4, pin 5 to 5, pin 2 to 2 +and to the shield of your cable. + +------------------------------------------------------------------------ +Pascal JANIN -Amiga & Anime Addict Forever | "Buki! Buki!" Pi-chan says +< STANLEY ELECTRIC CO. LTD, R&D LAB 71G > | // My 1st computer: DAI +< Fax: 81+ 45-9110007 (045-... from Japan> | \ // My current 2nd:Amiga +*** I can r/w E-mail ONLY inside Japan *** | \X/ ...ONLY the bests !! +*** Sorry, you'd fax or use "F" option *** | Discard all Pee-Cee users ! +------------------------------------------------------------------------ + +From: smill@polari.online.com +Subject: Re: Now what? (MIDI) + +As stated in the MIDI 1.0 Spec: + + "The cable shall be twisted pair, with the shield connected to +pin 2 at both ends." + ^^^^^^^^^^^^ + + The ground loop problem is dealt with in the fact that MIDI +jacks on instruments are specified as pin 2 (ground) being connected +only at the transmitting ends, not at receiving end. This allows cables +to be used in any situation, with the ground connection taken care of +in the hardware specification. + +-- +Steven M. Miller "The history of music evolution is +smill@polari.online.com not the history of nice guys" + -- Anthony Braxton +Electronic Music Coordinator - Cornish College of the Arts, Seattle WA diff --git a/midiseq/MIDIDATA/MIDI-INT.TXT b/midiseq/MIDIDATA/MIDI-INT.TXT new file mode 100644 index 0000000..19a65cb --- /dev/null +++ b/midiseq/MIDIDATA/MIDI-INT.TXT @@ -0,0 +1,360 @@ + + HOW MUCH FOR JUST THE MIDI? + +By Eric Lipscomb (BITNET: LIPS@UNTVAX). This article appeared in the +October 1989 issue of North Texas Computing Center Newsletter, +"Benchmarks". + + Computer retailers are hearing about it. Music store sales +people are buying and selling it. Musicians and students are +talking about it. Professional writers are publishing articles +about it. Entire magazines are devoted to it. Students at the +Massachusetts Institute of Technology are receiving large grants +to research it. Joe "Keys" Manzotti uses it when he plays with his +band at the Holiday Inn on weekends. Just what IS this MIDI thing +anyway? + + MIDI stands for Musical Instrument Digital Interface and has +been the rage among electronic musicians throughout its six year +existence. It is a powerful tool for composers and teachers alike. +It allows musicians to be more creative on stage and in the studio. +It allows composers to write music that no human could ever +perform. But it is NOT a tangible object, a thing to be had. MIDI +is a communications protocol that allows electronic musical +instruments to interact with each other. + + + A Method, Not An Object + + + All too often I have seen misinformed customers browsing +through a music store: "Where do you keep your MIDIs?" "I'd like +to get a MIDI for my home computer." "I need to get two MIDIs so +they can talk to each other, right?" Explaining to customers that +they cannot just get a MIDI becomes frustrating to the salesman. +Fortunately, the average consumer is learning more about the +concept of MIDI through articles such as this one. To have a +complete understanding of how MIDI works, though, one should learn +its history. + + +The Saga of MIDI + + + The combined advances and cost-efficiency in synthesizer +technology caught the music world by storm. At times, a musician +could not get a new synthesizer home before it had been outdated +by a new product. One major factor in the increased popularity in +synthesizers, and the increased push for research and design of +these units, was the development of new sound generation methods. +Musicians were creating new and different sounds worldwide. +Eventually, the musical world began to recognize the synthesizer +as a legitimate musical instrument. + + Musicians were physically limited, though, because they had +only two hands. Popular and avant-garde performers alike desired +to "layer" their new sound creations, to play two sounds together +to create a "larger" sound. Though this was possible to some +extent in a multi-track recording studio, layering could not be +realized on the road. A few synthesizer design technicians from +different manufacturers then got together to discuss an idea they +shared. Surely, they said, there had to be a way to play one +keyboard and have another one sound simultaneously. They jotted +a few notes, considered a few options, and scuttled back to their +design labs to create this communication method. + + They revealed their results at the first North American Music +Manufacturers show in Los Angeles in 1983. The simple +demonstration connected two synthesizers, not manufactured by the +same company, with two cables. A representative from one company +then played one of the synthesizers while an amazed audience heard +both sound. The process was then reversed to demonstrate the +two-way nature of the communication. Other variations were +illustrated, and the rest is music history. + + +The Method of MIDI + + + Much in the same way that two computers communicate via +modems, two synthesizers communicate via MIDI. The information +exchanged between two MIDI devices is musical in nature. MIDI +information tells a synthesizer, in its most basic mode, when to +start and stop playing a specific note. Other information shared +includes the volume and modulation of the note, if any. MIDI +information can also be more hardware specific. It can tell a +synthesizer to change sounds, master volume, modulation devices, +and even how to receive information. In more advanced uses, MIDI +information can to indicate the starting and stopping points of a +song or the metric position within a song. More recent +applications include using the interface between computers and +synthesizers to edit and store sound information for the +synthesizer on the computer. + + The basis for MIDI communication is the byte. Through a +combination of bytes a vast amount of information can be +transferred. Each MIDI command has a specific byte sequence. The +first byte is the status byte, which tells the MIDI device what +function to perform. Encoded in the status byte is the MIDI +channel. MIDI operates on 16 different channels, numbered 0 +through 15. MIDI units will accept or ignore a status byte +depending on what channel the machine is set to receive. Only the +status byte has the MIDI channel number encoded. All other bytes +are assumed to be on the channel indicated by the status byte until +another status byte is received. + + Some of these functions indicated in the status byte are Note +On, Note Off, System Exclusive (SysEx), Patch Change, and so on. +Depending on the status byte, a number of different byte patterns +will follow. The Note On status byte tells the MIDI device to +begin sounding a note. Two additional bytes are required, a pitch +byte, which tells the MIDI device which note to play, and a +velocity byte, which tells the device how loud to play the note. +Even though not all MIDI devices recognize the velocity byte, it +is still required to complete the Note On transmission. + + The command to stop playing a note is not part of the Note On +command; instead there is a separate Note Off command. This +command also requires two additional bytes with the same functions +as the Note On byte. Most people are confused at first by this +approach to Note On and Note Off, but after further thought they +realize the necessity of the structure. + + Another important status byte is the Patch Change byte. This +requires only one additional byte: the number corresponding to the +program number on the synthesizer. The patch number information +is different for each synthesizer, and the standards have been set +by the International MIDI Association (IMA). Channel selection is +extremely helpful when sending Patch Change commands to a +synthesizer. + + The SysEx status byte is the most powerful and least +understood of all the status bytes because it can instigate a +variety of functions. Briefly, the SysEx byte requires at least +three additional bytes. The first is a manufacturer's ID number +or timing byte, the second is a data format or function byte, and +the third is generally an "end of transmission" (EOX) byte. There +are a number of books that have been written on the topic of System +Exclusive messages, so this article will not deal with it further. + + + The INs and OUTs of MIDI + + + The closest most people ever care to get to the heart of the +MIDI interface are the three 5-pin ports found on the back of every +MIDI unit. Labeled IN, OUT, and THRU, these ports control all of +the information routing in a MIDI system. The IN port accepts MIDI +data, data coming "in" to the unit from an external source. This +is the data that controls the sound generators of the synthesizer. +The OUT port sends MIDI data "out" to the rest of the MIDI setup. +This data results from activity of the synthesizer, such as key +presses, patch changes, and so on. The THRU port also sends data +out to the MIDI system, but not in the same manner as the OUT port. +The data coming from the THRU port is an exact copy of the data +received at the synthesizer's IN port. There is no change made to +the data from the time it arrives at the IN port to the time is +leaves the THRU port (which is a very, VERY small amount of time). + + MIDI makes use of special five conductor cable to connect the +synthesizer ports. Curiously though, only three of the conductors +are actually used. Data is carried through the cable on pins 1 and +3, and pin 2 is shielded and connected to common. Pins 4 and 5 +remain unused. Not just any cable will suffice for the exactness +of the MIDI system, either. MIDI cable is specially grounded and +shielded to ensure efficient data transmission. This means that +MIDI cable is a little more expensive than standard 5-conductor +cable, but reliable data transmission is absolutely necessary for +MIDI. + + The length of the cable is critical as well. IMA +specifications suggest an absolute maximum cable length of 50 feet +because of the method of data transmission through the cable. The +entire length of a MIDI chain (discussed below) is unlimited, +however, provided that none of the links are longer than 50 feet. +The optimal maximum length for cable is about 20 feet, and most +commercially manufactured cable comes in five to ten foot lengths. + + +MIDI Chains and Loops + + + A MIDI chain describes a series of one-way connections in a +MIDI setup. The elemental chain is a single-link chain. The MIDI +OUT port of one device is connected to the MIDI IN port of a +second. In this configuration, a key pressed on the first unit +will cause both units to sound. Pressing a key on the second unit, +however, only causes the second unit to sound. Many instruments +may be chained together using a series of single links to connect +the units. In this case, the OUT of the first unit is connected +to the second, the THRU of the second is connected to the IN of a +third, and so on. If all the units are set to receive on the same +channel, pressing a key on the first one will cause all the units +to sound. Pressing a key on any of the other units will only +activate the sound of that unit. + + A MIDI loop is a special configuration of a MIDI chain. The +single element loop is made of two interconnecting links. This was +the configuration used in the debut of the MIDI system. The OUT +port of the first unit is connected to the IN port of the second, +and the OUT port of the second is connected to the IN port of the +first. In this case, as described earlier, a key pressed on either +unit causes both units to sound, provided they are on the same +channel. A MIDI feedback loop does NOT exist here, as the data +going into the second unit from the first is not duplicated in the +OUT port of the second going back into the first. Here, we have +two one-way links connected, not a multi-link chain. + + MIDI loops connecting several devices using all three ports +can become complex very quickly. As a brief example, imagine four +synthesizers named A, B, C, and D for convenience. A's OUT is +connected to B's IN and consequently to C's IN via B's THRU. B's +OUT connects to D's IN, whose THRU connects to A's IN. A key +pressed on A sounds A, B and C. A key pressed on C sounds C and +C alone. A key pressed on B sounds B, D, and A, while a key +pressed on D sounds D only. C does not sound when B is pressed +because there is no direct connection between B and C, and B's +note, which does route through D, does not route through A into C +because A's THRU is not connected to C, or anything else for that +matter. A note played on A does not sound on D for the same +reason. You get the idea. + + + Computers and MIDI + + + Computer manufacturers soon realized that the computer would +be a fantastic tool for MIDI, since MIDI devices and computers +speak the same language. Since the MIDI data transmission rate +(31.5 kBaud) is different from ANY computer data rate, +manufacturers had to design a MIDI interface to allow the computer +to talk at MIDI's speed. Apple Computers, with the Macintosh and +Apple ][ series, and Commodore were the first companies to jump on +the MIDI computer bandwagon [pun intended]. Roland designed an +interface for the IBM series of compatible computers a few years +later, and Atari designed a completely new computer, the ST series, +with fully operable MIDI ports built in. Today, there are many +different interfaces available for almost all types of computer +system. + + As great as the number of available interfaces may be, the +availability of software packages is almost beyond belief. +Virtually everything that can be done via MIDI has a software +package to do it. First came the sequencers. Based on a hardware +device that simply recorded and replayed MIDI data, the software +sequencer allowed the computer to record, store, replay, and edit +MIDI data into "songs." Though the first sequencers were somewhat +primitive, the packages available today provide very thorough +editing capabilities as well as intricate synchronization methods, +such as MTC (MIDI Time Code) and SMPTE. + + Various patch editors and librarians are also available for +computers. These programs allow the user to edit sounds away from +the synthesizer and often in a much friendlier environment than +what the synthesizer interface offers. The more advanced +librarians permit groups or banks of sounds to be edited, stored +on disk, or moved back and forth from the synthesizer's memory. +They also allow for rearranging sounds within banks or groups of +banks for customized libraries. These programs are generally small +and can be incorporated into some sequencing packages for ease of +use. On the other hand, each synthesizer requires a different +editor/librarian since internal data formats are unique for each. +Some packages offer editor groups for a specific manufacturer's +line as some of the internal data structure may be similar between +the units. But, there is not yet a universal librarian that covers +all makes and models of sound modules; it would just be too large. + + +Computers in MIDI Chains + + + Basically, the computer functions the same as any other unit +in a MIDI chain or loop. Most interfaces have the same three ports +as other MIDI devices. The computer's main job in a chain, though, +would be as a MIDI data driver, meaning it would supply the MIDI +data for the rest of the chain. Very rarely is a device connected +to the IN port of a computer MIDI interface except to provide input +for synchronization signals or data to edit. Even more rare is a +connection to the computer's THRU port, although it can be used. + + In this scope the implementation of MIDI channels is most +effective. The computer can send data out on all 16 MIDI channels +simultaneously. For example, sixteen MIDI devices, each set up for +a different MIDI channel, could be connected to the computer. Each +unit could be playing a separate line in a song from the sequencer, +creating an electronic orchestra. This implementation is being +used more and more in today's music scenes: the recording studio, +major orchestras, opera, and film scoring. + + + The Future of MIDI + + + The MIDI specifications set out by the initial design team +have not changed drastically since its creation. The current data +structure is as it was originally designed, the only exception +being that some of the initial status bytes were not initially +defined. As it stands, the architecture of MIDI does not allow for +any further expansion. To enhance MIDI further would take a +complete redesign of the system. The IMA has been discussing new +MIDI designs, but industry and the general public will prevent any +real action from taking place because the new design would not be +backwards compatible: none of the current MIDI hardware would +operate in the new environment. + + But MIDI does continue to hold promise. The extent of the +SysEx applications has not yet been fully realized. MIDI is by no +means about to become outdated or abandoned by the musical world, +and as technology becomes more and more affordable, a greater +number of non-technical people will invest in their own personal +MIDI systems. There may in fact be a day where the average +American family has a home, two cars, three kids, and their own +MIDI in the garage. + + + References + +Arnell, Billy. "McScope: System." Music, Computers, and Software + April 1988: 58-60. + +Conger, Jim. C Programming for MIDI. Redwood City: M & T Books, + 1988. + +Cooper, Jim. "Mind Over MIDI: Information Sources and + System-exclusive Data Formats." Keyboard October, 1986: + 110-11. + +Enders, Bernd and Wolfgang Klemme. MIDI and Sound Book for the + Atari ST. Redwood City: M & T Books, 1989. + +Matzkin, Jonathan. "A MIDI Musical Offering." PC Magazine 29 Nov. + 1988: 229+. + +Peters, Constantine. "Reading up on MIDI for the Novice and the + Pro." PC Magazine 29 Nov. 1988: 258. + + + +ABOUT THE AUTHOR: Eric Lipscomb is a Vice President of the +International Electronic Musicians User's Group, an organization +devoted to the advancement of knowledge about MIDI and other +aspects of electronic music In his spare time he writes for and +performs with the comedy group "Green Chili Burp and the +Aftertaste." + +*************************************************************************** +CCNEWS Copyright Notice + +If you use this article, in whole or in part, in printed or electronic +form, you are legally and morally obligated to credit the author and the +original publication name, date, and page(s). We suggest that you also +inform the author of your intention to use this article, in case there are +updates or corrections that he or she might wish to suggest. + +If space and format permit, we would appreciate your crediting the "Articles +database of CCNEWS, the Electronic Forum for Campus Computing Newsletter +Editors, a BITNET-based service of EDUCOM." We would also appreciate your +informing us (via e-mail to CCNEWS@EDUCOM) when you use an article, so we +will know which articles have proven most useful. + +*************************************************************************** diff --git a/midiseq/MIDIDATA/MIDI-SPE.TXT b/midiseq/MIDIDATA/MIDI-SPE.TXT new file mode 100644 index 0000000..ca8ab9b --- /dev/null +++ b/midiseq/MIDIDATA/MIDI-SPE.TXT @@ -0,0 +1,683 @@ +From mf Mon Sep 24 21:20:06 1990 +Received: by nadia.ircam.fr, Mon, 24 Sep 90 22:20:02 GMT +Date: Mon, 24 Sep 90 22:20:02 GMT +From: Michel Fingerhut +Message-Id: <9009242220.AA21452@nadia.ircam.fr> +To: mf@nadia +Status: RO +Path: ircam!inria!mcsun!uunet!aplcen!news +From: gwe@aplvax.jhuapl.edu (Garry Elliott) +Newsgroups: comp.music +Subject: MIDI 1.0 Spec +Keywords: MIDI Spec +Message-ID: <6636@aplcen.apl.jhu.edu> +Date: 24 Sep 90 16:24:27 GMT +Sender: news@aplcen.apl.jhu.edu +Reply-To: gwe@aplvax.jhuapl.edu (Garry Elliott) +Organization: Johns Hopkins University Applied Physics Lab +Lines: 662 +Nntp-Posting-Host: std-gwe-mac.jhuapl.edu + + + There have been two requests in the last week for the MIDI 1.0 Spec., one +from Holland and the other from Western Australia (both places I'd love to +visit). I am not an expert on MIDI but I do have a copy of the spec, reprocuded +below. I hope that this is what you are looking for. +-------------------------------------------------------------------- + + (Call IMA and order your copy of this + specification, which offers + additional information NOT contained in + this file, to include important + diagrams and graphs,...etc.) + + +MIDI +MUSICAL INSTRUMENT DIGITAL INTERFACE + +Specification 1.0 +INTRODUCTION + +MIDI is the acronym for Musical Instrument Digital Interface. + +MIDI enables synthesizers, sequencers, home computers, rhythm machines, etc. +to be intercon- nected through a standard interface. + +Each MIDI-equipped instrument usually contains a receiver and a transmitter. +Some instruments may contain only a receiver or transmitter. The receiver +receives messages in MIDI format and executes MIDI commands. It consists of an +optoisolator, Universal Asynchronous Receiver/Transmitter (UART), and other +hardware needed to perform the intended functions. The transmitter originates +messages in MIDI format, and transmits them by way of a UART and line driver. + +The MIDI standard hardware and data format are defined in this specification. + + +CONVENTIONS + +Status and Data bytes given in Tables I through VI are given in binary. + +Numbers followed by an "H" are in hexadecimal. + +All other numbers are in decimal. + + +HARDWARE + +The interface operates at 31.25 (+/- 1%) Kbaud, asynchronous, with a start +bit, 8 data bits (D0 to D7), and a stop bit. This makes a total of 10 bits for +a period of 320 microseconds per serial byte. + +Circuit: 5 mA current loop type. Logical 0 is current ON. One output shall +drive one and only one input. The receiver shall be opto-isolated and require +less than 5 mA to turn on. Sharp PC-900 and HP 6N138 optoisolators have been +found acceptable. Other high-speed optoisolators may be satisfactory. Rise +and fall times should be less than 2 microseconds. + +Connectors: DIN 5 pin (180 degree) female panel mount receptacle. An example +is the SWITCHCRAFT 57 GB5F. The connectors shall be labelled "MIDI IN" and +"MIDI OUT". Note that pins 1 and 3 are not used, and should be left +unconnected in the receiver and transmitter. + +NOTES: + +1. Optoisolator is Sharp PC-900. + (HP 6N138 or other optoisolator can be used with appropriate changes.) + +2. Gates "A" are IC or transistor. + +3. Resistors are 5% + + +Cables shall have a maximum length of fifty feet (15 meters), and shall be +terminated on each end by a corresponding 5-pin DIN male plug, such as the +SWITCHCRAFT 05GM5M. The cable shall be shielded twisted pair, with the shield +connected to pin 2 at both ends. + +A "MIDI THRU" output may be provided if needed, which provides a direct copy +of data coming in MIDI IN. For very long chain lengths (more than three +instruments), higher-speed optoisolators must be used to avoid additive +rise/fall time errors which affect pulse width duty cycle. + + +DATA FORMAT + +All MIDI communication is acheived through multi-byte "messages" consisting of +one Status byte followed by one or two Data bytes, except Real-Time and +Exclusive messages (see below). + +MESSAGE TYPES + +Messages are divided into two main categories: Channel and System. + +Channel + +Channel messages contain a four-bit number in the Status byte which address +the message specifically to one of sixteen channels. These messages are +thereby intended for any units in a system whose channel number matches the +channel number encoded into the Status byte. + +There are two types of Channel messages: Voice and Mode. + + Voice + To control the instrument's voices, Voice messages are sent + over the Voice Channels. + + Mode + To define the instrument's response to Voice messages, Mode + messages are sent over the instument's Basic Channel. + + +System +System messages are not encoded with channel numbers. + +There are three types of System messages: Common, Real-Time, and Exclusive. + + Common + Common messages are intended for all units in a system. + + Real-Time + Real-Time messages are intended for all units in a system. + They contain Status bytes only -- no Data bytes. Real-Time + messages may be sent at any time -- even between bytes of a + message which has a different status. In such cases the + Real-Time message is either ignored or acted upon, after which + the receiving process resumes under the previous status. + + Exclusive + Exclusive messages can contain any number of Data bytes, and + are terminated by an End of Exclusive (EOX) or any other Status + byte. These messages include a Manufacturer's Identification + (ID) code. If the receiver does not recognize the ID code, it + should ignore the ensuing data. + + So that other users can fully access MIDI instruments, manufacturers + should publish the format of data following their ID code. Only the + manufacturer can update the format following their ID. + +DATA TYPES + +Status Bytes + +Status bytes are eight-bit binary numbers in which the Most Significant Bit +(MSB) is set (binary 1). Status bytes serve to identify the message type, that +is, the purpose of the Data bytes which follow the Status byte. + +Except for Real-Time messages, new Status bytes will always command the +receiver to adopt their status, even if the new Status is received before the +last message was completed. + + Running Status + For Voice and Mode messages only, when a Status byte is + received and processed, the receiver will remain in that status + until a different Status byte is received. Therefore, if the same + Status byte would be repeated, it may (optionally) be omitted so + that only the correct number of Data bytes need be sent. Under + Running Status, then, a complete message need only consist of + specified Data bytes sent in the specified order. + + The Running Status feature is especially useful for + communicating long strings of Note On/Off messages, where + "Note On with Velocity of 0" is used for Note Off. (A separate + Note Off Status byte is also available.) + + Running Status will be stopped when any other Status byte + intervenes, except that Real-Time messges will only interrupt + the Running Status temporarily. + + Unimplemented Status + Any status bytes received for functions which the receiver has not + implemented should be ignored, and subsequent data bytes ignored. + + Undefined Status + Undefined Status bytes must not be used. Care should be taken to + prevent illegal messages from being sent during power-up or + power-down. If undefined Status bytes are received, they + should be ignored, as should subsequent Data bytes. + +Data Bytes +Following the Status byte, there are (except for Real-Time messages) one or +two Data bytes which carry the content of the message. Data bytes are +eight-bit binary numbers in which the MSB is reset (binary 0). The number and +range of Data bytes which must follow each Status byte are specified in the +tables which follow. For each Status byte the correct number of Data bytes +must always be sent. Inside the receiver, action on the message should wait +until all Data bytes required under the current status are received. Receivers +should ignore Data bytes which have not been properly preceeded by a valid +Status byte (with the exception of "Running Status," above). + + +CHANNEL MODES + +Synthesizers contain sound generation elements called voices. Voice +assignment is the algorithmic process of routing Note On/Off data from the +keyboard to the voices so that the musical notes are correctly played with +accurate timing. + +When MIDI is implemented, the relationship between the sixteen available MIDI +channels and the synthesizer's voice assignment must be defined. Several Mode +messages are available for this purpose (see Table III). They are Omni +(On/Off), Poly, and Mono. Poly and Mono are mutually exclusive, i.e., Poly +Select disables Mono, and vice versa. Omni, when on, enables the receiver to +receive Voice messages in all voice Channels without discrimination. When Omni +is off, the receiver will accept Voice messages from only the selected Voice +Channel(s). Mono, when on, restricts the assignment of Voices to just one +voice per Voice Channel (Monophonic.) When Mono is off (=Poly On), any number +of voices may be allocated by the Receiver's normal voice assignment algorithm +(Polyphonic.) + +For a receiver assigned to Basic Channel "N," the four possible modes arising +from the two Mode messages are: + + Mode Omni + + +1 On Poly Voice messages are received from all Voice + channels and assigned to voices polyphonically. + +2 On Mono Voice messages are received from all Voice + Channels, and control only one voice, + monophonically. + +3 Off Poly Voice messages are received in Voice channel N + only, and are assigned to voices polyphonically. + +4 Off Mono Voice messages are received in Voice channels + N thru N+M-1, and assigned monophonically to + voices 1 thru M, respectively. The number of + voices M is specified + by the third byte of the Mono Mode Message. + +Four modes are applied to transmitters (also assigned to Basic Channel N). +Transmitters with no channel selection capability will normally transmit on +Basic Channel 1 (N=0). + +Mode Omni + + +1 On Poly All voice messages are transmitted in Channel N. + +2 On Mono Voice messages for one voice are sent in Channel N. + +3 Off Poly Voice messages for all voices are sent in Channel N. + +4 Off Mono Voice messages for voices 1 thru M are + transmitted in Voice Channels N thru N+M-1, + respectively. (Single voice per channel). + +A MIDI receiver or transmitter can operate under one and only one mode at a +time. Usually the receiver and transmitter will be in the same mode. If a +mode cannot be honored by the receiver, it may ignore the message (and any +subsequent data bytes), or it may switch to an alternate mode (usually Mode 1, +Omni On/Poly). + +Mode messages will be recognized by a receiver only when sent in the Basic +Channel to which the receiver has been assigned, regardless of the current +mode. Voice messages may be received in the Basic Channel and in other +channels (which are all called Voice Channels), which are related specifically +to the Basic channel by the rules above, depending on which mode has been +selected. + +A MIDI receiver may be assigned to one or more Basic Channels by default or by +user control. For example, an eight-voice synthesizer might be assigned to +Basic Channel 1 on power-up. The user could then switch the instrument to be +configured as two four-voice synthesizers, each assigned to its own Basic +Channel. Separate Mode messages would then be sent to each four-voice +synthesizer, just as if they were physically separate instruments. + +POWER-UP DEFAULT CONDITIONS + +On power-up all instruments should default to Mode #1. Except for Note On/Off +Status, all Voice messages should be disabled. Spurious or undefined +transmissions must be suppressed. + + + TABLE I + +SUMMARY OF STATUS BYTES + + +STATUS # OF DATA DESCRIPTION +D7---D0 BYTES + +Channel Voice Messages + +1000nnnn 2 Note Off event + +1001nnnn 2 Note On event (velocity=0: Note Off) + +1010nnnn 2 Polyphonic key pressure/after touch + +1011nnnn 2 Control change + +1100nnnn 1 Program change + +1101nnnn 1 Channel pressure/after touch + +1110nnnn 2 Pitch bend change + + +Channel Mode Messages + +1011nnnn 2 Selects Channel Mode + + +System Messages + +11110000 ***** System Exclusive + +11110sss 0 to 2 System Common + +11111ttt 0 System Real Time + + +NOTES: + nnnn: N-1, where N = Channel #, + i.e. 0000 is Channel 1. + 0001 is Channel 2. + . + . + . + 1111 is Channel 16. + *****: 0iiiiiii, data, ..., EOX + iiiiiii: Identification + sss: 1 to 7 + ttt: 0 to 7 + + +TABLE II + +CHANNEL VOICE MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +1000nnnn 0kkkkkkk Note Off (see notes 1-4) + 0vvvvvvv vvvvvvv: note off velocity + +1001nnnn 0kkkkkkk Note On (see notes 1-4) + 0vvvvvvv vvvvvvv - 0: velocity + vvvvvvv = 0: note off + +1010nnnn 0kkkkkkk Polyphonic Key Pressure (After-Touch) + 0vvvvvvv vvvvvvv: pressure value + +1011nnnn 0ccccccc Control Change + 0vvvvvvv ccccccc: control # (0-121) (see notes 5-8) + vvvvvvv: control value + + ccccccc = 122 thru 127: Reserved. + (See Table III) + +1100nnnn 0ppppppp Program Change + ppppppp: program number (0-127) + +1101nnnn 0vvvvvvv Channel Pressure (After-Touch) + vvvvvvv: pressure value + +1110nnnn 0vvvvvvv Pitch Bend Change LSB (see note 10) + 0vvvvvvv Pitch Bend Change MSB + + + +NOTES: + +1. nnnn: Voice Channel # (1-16, coded as defined in Table I notes) + +2. kkkkkkk: note # (0 - 127) + kkkkkkk = 60: Middle C of keyboard + + 0 12 24 36 48 60 72 84 96 108 120 + 127 + ----------------------------------------------------------------- + ac c c c c c +c c + |-------------- piano range -------------------| + + +3. vvvvvvv: key velocity + A logarithmic scale would be advisable. + + 0 1 64 + 127 + ------------------------------------------------------------------- + off ppp pp p mp mf f + ff fff + + vvvvvvv = 64: in case of no velocity sensors + vvvvvvv = 0: Note Off, with velocity = 64 + + +4. Any Note On message sent should be balanced by sending a Note Off message +for that note in that channel at some later time. + + +5. ccccccc: control number + + + ccccccc Description + + + 0 Continuous Controller 0 MSB + 1 Continuous Controller 1 MSB (MODULATION BENDER) + 2 Continuous Controller 2 MSB + 3 Continuous Controller 3 MSB + 4-31 Continuous Controllers 4-31 MSB + 32 Continuous Controller 0 LSB + 33 Continuous Controller 1 LSB (MODULATION BENDER) + 34 Continuous Controller 2 LSB + 35 Continuous Controller 3 LSB + 36-63 Continuous Controllers 4-31 LSB + 64-95 Switches (On/Off) + 96-121 Undefined + 122-127 Reserved for Channel Mode messages (see Table III). + + +6. All controllers are specifically defined by agreement of the MIDI +Manufacturers Association (MMA) and the Japan MIDI Standards Committee (JMSC). +Manufacturers can request throught the MMA or JMSC that logical controllers be +assigned to physical ones as necessary. The controller allocation table must +be provided in the user's operation manual. + +7. Continuous controllers are divided into Most Significant and Least +Significant Bytes. If only seven bits of resolution are needed for any +particular controllers, only the MSB is sent. It is not necessary to send the +LSB. If more resolution is needed, then both are sent, first the MSB, then the +LSB. If only the LSB has changed in value, the LSB may be sent without +re-sending the MSB. + +8. vvvvvvv: control value (MSB) + + (for controllers) + + 0 + 127 + |-----------------------------------------------------------------| + min + max + + (for switches) + + 0 + 127 +| - - - - - - - - + - - - | + off + on + + Numbers 1 through 126, inclusive, are ignored. + + +9. Any messages (e.g. Note On), which are sent successively under the same +status, can be sent without a Status byte until a different Status byte is +needed. + +10. Sensitivity of the pitch bender is selected in the receiver. Center +position value (no pitch change) is 2000H, which would be transmitted +EnH-00H-40H. +TABLE III + +CHANNEL MODE MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +1011nnnn 0ccccccc Mode Messages + 0vvvvvvv + ccccccc = 122: Local Control + vvvvvvv = 0, Local Control Off + vvvvvvv = 127, Local Control On + + ccccccc = 123: All Notes Off + vvvvvvv = 0 + + ccccccc = 124: Omni Mode Off (All Notes Off) + vvvvvvv = 0 + + ccccccc = 125: Omni Mode On (All Notes Off) + vvvvvvv = 0 + + ccccccc = 126: Mono Mode On (Poly Mode Off) + (All Notes Off) + vvvvvvv = M, where M is the number of channels. + vvvvvvv = 0, the number of channels equals the number + of voices in the receiver. + + ccccccc = 127: Poly Mode On (Mono Mode Off) + vvvvvvv = 0 (All Notes Off) + + +NOTES: + +1. nnnn: Basic Channel # (1-16, coded as defined in Table I) + +2. Messages 123 thru 127 function as All Notes Off messages. They will turn +off all voices controlled by the assigned Basic Channel. Except for message +123, All Notes Off, they should not be sent periodically, but only for a +specific purpose. In no case should they be used in lieu of Note Off commands +to turn off notes which have been previously turned on. Therefore any All +Notes Off command (123-127) may be ignored by receiver with no possibility of +notes staying on, since any Note On command must have a corresonding specific +Note Off command. + +3. Control Change #122, Local Control, is optionally used to interrupt the +internal control path between the keyboard, for example, and the +sound-generating circuitry. If 0 (Local Off mesage) is received, the path is +disconnected: the keyboard data goes only to MIDI and the sound-generating +circuitry is controlled only by incoming MIDI data. If a 7FH (Local On +message) is received, normal operation is restored. + +4. The third byte of "Mono" specifies the number of channels in which +Monophonic Voice messages are to be sent. This number, "M", is a number +between 1 and 16. The channel(s) being used, then, will be the current Basic +Channel (=N) thru N+M-1 up to a maximum of 16. If M=0, this is a special case +directing the receiver to assign all its voices, one per channel, from the +Basic Channel N through 16. + + +TABLE IV + +SYSTEM COMMON MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +11110001 Undefined + +11110010 Song Position Pointer + 0lllllll lllllll: (Least significant) + 0hhhhhhh hhhhhhh: (Most significant) + +11110011 0sssssss Song Select + sssssss: Song # + +11110100 Undefined + +11110101 Undefined + +11110110 none Tune Request + +11110111 none EOX: "End of System Exclusive" flag + + +1. Song Position Pointer: Is an internal register which holds the number of +MIDI beats (1 beat = 6 MIDI clocks) since the start of the song. Normally it +is set to 0 when the START switch is pressed, which starts sequence playback. +It then increments with every sixth MIDI clock receipt, until STOP is pressed. +If CONTINUE is pressed, it continues to increment. It can be arbitrarily +preset (to a resolution of 1 beat) by the SONG POSITION POINTER message. + +2. Song Select: Specifies which song or sequence is to be played upon +receipt of a Start (Real-Time) message. + +3. Tune Request: Used with analog synthesizers to request them to tune their +oscillators. + +4. EOX: Used as a flag to indicate the end of a System Exclusive +transmission (see Table VI). + + +TABLE V + +SYSTEM REAL TIME MESSAGES + + +STATUS DATA BYTES DESCRIPTION + +11111000 Timing Clock +11111001 Undefined +11111010 Start +11111011 Continue +11111100 Stop +11111101 Undefined +11111110 Active Sensing +11111111 System Reset + + +NOTES: + +1. The System Real Time messages are for synchronizing all of the system in +real time. + +2. The System Real Time messages can be sent at any time. Any messages which +consist of two or more bytes may be split to insert Real Time messages. + +3. Timing clock (F8H) +The system is synchronized with this clock, which is sent at a rate of 24 +clocks/quarter note. + +4. Start (from the beginning of song) (FAH) +This byte is immediately sent when the PLAY switch on the master (e.g. +sequencer or rhythm unit) is pressed. + +5. Continue (FBH) +This is sent when the CONTINUE switch is hit. A sequence will continue at the +time of the next clock. + +6. Stop (FCH) +This byte is immediately sent when the STOP switch is hit. It will stop the +sequence. + +7. Active Sensing (FEH) +Use of this message is optional, for either receivers or transmitters. This +is a "dummy" Status byte that is sent every 300 ms (max), whenever there is no +other activity on MIDI. The receiver will operate normally if it never +receives FEH. Otherwise, if FEH is ever received, the receiver will expect to +receive FEH or a transmission of any type every 300 ms (max). If a period of +300 ms passes with no activity, the receiver will turn off the voices and +return to normal operation. + +8. System Reset (FFH) +This message initializes all of the system to the condition of just having +turned on power. The system Reset message should be used sparingly, preferably +under manual command only. In particular, it should not be sent automatically +on power up. + + +TABLE VI + +SYSTEM EXCLUSIVE MESSAGES + + +STATUS DATA BYTES DESCRIPTION + + +11110000 Bulk dump etc. + 0iiiiiii iiiiiii: identification + . + (0*******) + . Any number of bytes may be sent here, for any +purpose, as long as they all have a zero in the most significant bit. + (0*******) + . + 11110111 EOX: "End of System Exclusive" + + +NOTES: + +1. iiiiiii: identification ID (0-127) + +2. All bytes between the System Exclusive Status byte and EOX or the next +Status byte must have zeroes in the MSB. + +3. The ID number can be obtained from the MMA or JMSC. + +4. In no case should other Status or Data bytes (except Real-Time) be +interleaved with System Exclusive, regardless of whether or not the ID code is +recognized. + +5. EOX or any other Status byte, except Real-Time, will terminate a System +Exclusive message, and should be sent immediately at its conclusion. + +**** END of Spec. **** + + +-- +Thanks, + Garry Elliott + gwe@aplvax.jhuapl.edu (128.244.176.104) + in Maryland + diff --git a/midiseq/MIDIDATA/MIDICONT.TXT b/midiseq/MIDIDATA/MIDICONT.TXT new file mode 100644 index 0000000..d155a53 --- /dev/null +++ b/midiseq/MIDIDATA/MIDICONT.TXT @@ -0,0 +1,143 @@ + Table 3: Status Bytes 176-191; Control and Mode Changes (per channel) + (adapted from "MIDI by the Numbers" by D. Valenti-Electronic Musician 2/88) + +------------------------------------------------------------------------------ + 2nd Byte Value | Function | 3rd Byte + Binary |Hex|Dec | | Value | Use + - - - - -|- -|- - | - - - - - - - - - - - - - - - - - - - -|- - - - | - - - - + 00000000= 00= 0 | Continuous controller #0 | 0-127 | MSB + 00000001= 01= 1 | Modulation wheel | 0-127 | MSB + 00000010= 02= 2 | Breath control | 0-127 | MSB + 00000011= 03= 3 | Continuous controller #3 | 0-127 | MSB + 00000100= 04= 4 | Foot controller | 0-127 | MSB + 00000101= 05= 5 | Portamento time | 0-127 | MSB + 00000110= 06= 6 | Data Entry | 0-127 | MSB + 00000111= 07= 7 | Main Volume | 0-127 | MSB + 00001000= 08= 8 | Continuous controller #8 | 0-127 | MSB + 00001001= 09= 9 | Continuous controller #9 | 0-127 | MSB + 00001010= 0A= 10 | Continuous controller #10 | 0-127 | MSB + 00001011= 0B= 11 | Continuous controller #11 | 0-127 | MSB + 00001100= 0C= 12 | Continuous controller #12 | 0-127 | MSB + 00001101= 0D= 13 | Continuous controller #13 | 0-127 | MSB + 00001110= 0E= 14 | Continuous controller #14 | 0-127 | MSB + 00001111= 0F= 15 | Continuous controller #15 | 0-127 | MSB + 00010000= 10= 16 | Continuous controller #16 | 0-127 | MSB + 00010001= 11= 17 | Continuous controller #17 | 0-127 | MSB + 00010010= 12= 18 | Continuous controller #18 | 0-127 | MSB + 00010011= 13= 19 | Continuous controller #19 | 0-127 | MSB + 00010100= 14= 20 | Continuous controller #20 | 0-127 | MSB + 00010101= 15= 21 | Continuous controller #21 | 0-127 | MSB + 00010110= 16= 22 | Continuous controller #22 | 0-127 | MSB + 00010111= 17= 23 | Continuous controller #23 | 0-127 | MSB + 00011000= 18= 24 | Continuous controller #24 | 0-127 | MSB + 00011001= 19= 25 | Continuous controller #25 | 0-127 | MSB + 00011010= 1A= 26 | Continuous controller #26 | 0-127 | MSB + 00011011= 1B= 27 | Continuous controller #27 | 0-127 | MSB + 00011100= 1C= 28 | Continuous controller #28 | 0-127 | MSB + 00011101= 1D= 29 | Continuous controller #29 | 0-127 | MSB + 00011110= 1E= 30 | Continuous controller #30 | 0-127 | MSB + 00011111= 1F= 31 | Continuous controller #31 | 0-127 | MSB + 00100000= 20= 32 | Continuous controller #0 | 0-127 | LSB + 00100001= 21= 33 | Modulation wheel | 0-127 | LSB + 00100010= 22= 34 | Breath control | 0-127 | LSB + 00100011= 23= 35 | Continuous controller #3 | 0-127 | LSB + 00100100= 24= 36 | Foot controller | 0-127 | LSB + 00100101= 25= 37 | Portamento time | 0-127 | LSB + 00100110= 26= 38 | Data entry | 0-127 | LSB + 00100111= 27= 39 | Main volume | 0-127 | LSB + 00101000= 28= 40 | Continuous controller #8 | 0-127 | LSB + 00101001= 29= 41 | Continuous controller #9 | 0-127 | LSB + 00101010= 2A= 42 | Continuous controller #10 | 0-127 | LSB + 00101011= 2B= 43 | Continuous controller #11 | 0-127 | LSB + 00101100= 2C= 44 | Continuous controller #12 | 0-127 | LSB + 00101101= 2D= 45 | Continuous controller #13 | 0-127 | LSB + 00101110= 2E= 46 | Continuous controller #14 | 0-127 | LSB + 00101111= 2F= 47 | Continuous controller #15 | 0-127 | LSB + 00110000= 30= 48 | Continuous controller #16 | 0-127 | LSB + 00110001= 31= 49 | Continuous controller #17 | 0-127 | LSB + 00110010= 32= 50 | Continuous controller #18 | 0-127 | LSB + 00110011= 33= 51 | Continuous controller #19 | 0-127 | LSB + 00110100= 34= 52 | Continuous controller #20 | 0-127 | LSB + 00110101= 35= 53 | Continuous controller #21 | 0-127 | LSB + 00110110= 36= 54 | Continuous controller #22 | 0-127 | LSB + 00110111= 37= 55 | Continuous controller #23 | 0-127 | LSB + 00111000= 38= 56 | Continuous controller #24 | 0-127 | LSB + 00111001= 39= 57 | Continuous controller #25 | 0-127 | LSB + 00111010= 3A= 58 | Continuous controller #26 | 0-127 | LSB + 00111011= 3B= 59 | Continuous controller #27 | 0-127 | LSB + 00111100= 3C= 60 | Continuous controller #28 | 0-127 | LSB + 00111101= 3D= 61 | Continuous controller #29 | 0-127 | LSB + 00111110= 3E= 62 | Continuous controller #30 | 0-127 | LSB + 00111111= 3F= 63 | Continuous controller #31 | 0-127 | LSB + 01000000= 40= 64 | Damper pedal on/off (Sustain) | 0=off | 127=on + 01000001= 41= 65 | Portamento on/off | 0=off | 127=on + 01000010= 42= 66 | Sustenuto on/off | 0=off | 127=on + 01000011= 43= 67 | Soft pedal on/off | 0=off | 127=on + 01000100= 44= 68 | Undefined on/off | 0=off | 127=on + 01000101= 45= 69 | Undefined on/off | 0=off | 127=on + 01000110= 46= 70 | Undefined on/off | 0=off | 127=on + 01000111= 47= 71 | Undefined on/off | 0=off | 127=on + 01001000= 48= 72 | Undefined on/off | 0=off | 127=on + 01001001= 49= 73 | Undefined on/off | 0=off | 127=on + 01001010= 4A= 74 | Undefined on/off | 0=off | 127=on + 01001011= 4B= 75 | Undefined on/off | 0=off | 127=on + 01001100= 4C= 76 | Undefined on/off | 0=off | 127=on + 01001101= 4D= 77 | Undefined on/off | 0=off | 127=on + 01001110= 4E= 78 | Undefined on/off | 0=off | 127=on + 01001111= 4F= 79 | Undefined on/off | 0=off | 127=on + 01010000= 50= 80 | Undefined on/off | 0=off | 127=on + 01010001= 51= 81 | Undefined on/off | 0=off | 127=on + 01010010= 52= 82 | Undefined on/off | 0=off | 127=on + 01010011= 53= 83 | Undefined on/off | 0=off | 127=on + 01010100= 54= 84 | Undefined on/off | 0=off | 127=on + 01010101= 55= 85 | Undefined on/off | 0=off | 127=on + 01010110= 56= 86 | Undefined on/off | 0=off | 127=on + 01010111= 57= 87 | Undefined on/off | 0=off | 127=on + 01011000= 58= 88 | Undefined on/off | 0=off | 127=on + 01011001= 59= 89 | Undefined on/off | 0=off | 127=on + 01011010= 5A= 90 | Undefined on/off | 0=off | 127=on + 01011011= 5B= 91 | Undefined on/off | 0=off | 127=on + 01011100= 5C= 92 | Undefined on/off | 0=off | 127=on + 01011101= 5D= 93 | Undefined on/off | 0=off | 127=on + 01011110= 5E= 94 | Undefined on/off | 0=off | 127=on + 01011111= 5F= 95 | Undefined on/off | 0=off | 127=on + ----------------- + 01100000= 60= 96 | Data entry +1 | 127 + 01100001= 61= 97 | Data entry -1 | 127 + 01100010= 62= 98 | Undefined | ? + 01100011= 63= 99 | Undefined | ? + 01100100= 64= 100 | Undefined | ? + 01100101= 65= 101 | Undefined | ? + 01100110= 66= 102 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01100111= 67= 103 | Undefined | ? + 01101000= 68= 104 | Undefined | ? + 01101001= 69= 105 | Undefined | ? + 01101010= 6A= 106 | Undefined | ? + 01101011= 6B= 107 | Undefined | ? + 01101100= 6C= 108 | Undefined | ? + 01101101= 6D= 109 | Undefined | ? + 01101110= 6E= 110 | Undefined | ? + 01101111= 6F= 111 | Undefined | ? + 01110000= 70= 112 | Undefined | ? + 01110001= 71= 113 | Undefined | ? + 01110010= 72= 114 | Undefined | ? + 01110011= 73= 115 | Undefined | ? + 01110100= 74= 116 | Undefined | ? + 01110101= 75= 117 | Undefined | ? + 01110110= 76= 118 | Undefined | ? + 01110111= 77= 119 | Undefined | ? + 01111000= 78= 120 | Undefined | ? + 01111001= 79= 121 | Undefined | ? + 01111010= 7A= 122 | Local control on/off | 0=off 127=on + 01111011= 7B= 123 | All notes off (!!) | 0 + 01111100= 7C= 124 | Omni mode off (includes all notes off) | 0 + 01111101= 7D= 125 | Omni mode on (includes all notes off) | 0 + 01111110= 7E= 126 | Poly mode on/off(includes all notes off)| ** + 01111111= 7F= 127 | Poly mode on(incl mono=off&all notes off)| 0 + + **Note: This equals the number of channels, or zero if the number of channels + equals the number of voices in the receiver. diff --git a/midiseq/MIDIDATA/MIDIDUMP.TXT b/midiseq/MIDIDATA/MIDIDUMP.TXT new file mode 100644 index 0000000..312d12a --- /dev/null +++ b/midiseq/MIDIDATA/MIDIDUMP.TXT @@ -0,0 +1,214 @@ + MIDI SAMPLE DUMP STANDARD + +1) INTRODUCTION + + The MIDI SDS was adopted in January 1986 by the MIDI +Manufacturers Association and the Japanese MIDI Standards Committee. +The SDS defines the standard method for transfer of sound sample data +between MIDI-equipped devices. Sample dumps may be accomplished with +either an 'open loop' or 'closed loop' system. The open loop method +simply involves the straight dump of all sample data from its source +to the destination, with no timeouts, packet acknowledgements, or any +other form of handshaking, much as in the manner of a sysex bulk dump, +usually intiated at the source. The closed loop method allows the use +of handshaking messages between the dump source and destination, and +usually places the dump process under the control of the slave, to +allow it time to process the incoming data as necessary. As with any +standard, it can not be assumed that a device adheres to it unless the +accompanying documentation specifically indicates it. Even then, it is +best to check its conformity with non-critical data. + +2) SPEC: SAMPLE DUMP FORMATS + + DUMP HEADER: + +F0 7E cc 01 ss ss ee ff ff ff gg gg gg hh hh hh ii ii ii jj F7 + +where + +cc = channel number +ss ss = sample number (LSB first) +ee = sample format (number of significant bits; 8->28) +ff ff ff = sample period (1/sample rate) in nanoseconds (LSB first) +gg gg gg = sample length, in words +hh hh hh = sustain loop start point (word number) (LSB first) +ii ii ii = sustain loop end point (word number) (LSB first) +jj = loop type (00:forwards only; 01:alternating) + + DATA PACKET: + +F0 7E cc 02 kk <120 bytes> mm F7 + +where + +cc = channel number +kk = running packet count (00->7F) +mm = checksum (XOR of 7E, cc, 02, kk <120 bytes>) + + The total size of a data packet is 127 bytes. This is to avoid +overflow of the MIDI input buffer of a device that may want to receive +an entire packet before processing it. + A data packet consists of its own header, a packet number, 120 +bytes of data, a checksum, and an EOX. The packet number begins at 00 +and increments with each new packet. It resets to 00 after it reaches +7F, and continues counting. The packet number is used by the receiver +to distinguish between a new data packet, or a resend of a previous +packet. The packet number is followed by 120 bytes of data, which form +60, 40, or 30 words (MSB first for multiword samples), depending on +the length of a single data sample. + Each data byte hold seven bits, with the msb in each byte set to +0, in order to conform to the requirements of MIDI data transmission. +Information is left justified within the 7-bit bytes, and unused bits +are filled with 0. + Example: Assume a data point in the memory of a 16-bit sampler, +with the value 87E5. In binary, that would be + + 1000 0111 1110 0101 + +and would be encoded as the following MIDI data stream: + + 01000011 01111001 00100000 + + The checksum is the running XOR of all the data after the SYSEX +byte, up to but not including the checksum itself. + +3) SPEC: SAMPLE DUMP MESSAGES + + DUMP REQUEST: + +F0 7E cc 03 ss ss F7 + +where + +cc = channel number +ss ss = sample number requested (LSB first) + + Upon receiving the request, the sampler checks the sample number +to see if it is within legal range. If it is not, the request is +ignored. If it is, the sample dump is started. One packet at a time is +sent, under control of the handshaking messages outlined below. + + HANDSHAKING MESSAGES: + + For all below: + +cc = channel number +pp = packet number + + Packet numbers are included in the handshaking messages to +accomodate machines that have the intelligence to re-transmit specific +packets after an entire dump is finished, or if synchronization is +lost. + + ACK : F0 7E cc 7F pp F7 + + Means last packet was recieved correctly (checksum OK, etc), +please send next one. Packet number is packet being acknowledged as +correct. + + NAK : F0 7E cc 7E pp F7 + + Means last packet not received correctly, please send again. +Packet number is packet being rejected. + + CANCEL : F0 7E cc 7D pp F7 + + Means abort dump immediately. Packet number is packet on which +abort occurs. + + WAIT : F0 7E cc 7C pp F7 + + Means pause dump indefinitely, until next message is sent. Allows +the unit recieving the dump to perform other functions (disk access, +etc), before receiving the remainder of the dump. The next message it +sends (eg ACK, ABORT) will determine if the dump continues or aborts. + +4) DUMP PROCEDURE: MASTER (DUMP SOURCE) + + Once a dump has been requested, either via MIDI or through the +front panel, the DUMP HEADER is sent. After sending the header, the +master must time out for at least two seconds, to allow the receiver +to decide if it will accept this sample (has enough memory, etc). + If it receives a CANCEL, within this time, it should abort +immediately. If it receives an CAK, it will start sending packets +immediately. If it receives a WAIT, it pauses until another message is +received, and then processes that mesage normally. If nothing is +recieved within the timeout, an open loop is assumed, and the dump +starts with the first packet. + After sending each packet, the master should time out for at +least 20 milliseconds and watch its MIDI In. If an ACK is received, it +sends the next packet immediately. If it receives an NAK, and the +packet number matches the number of the last packet sent, it resend +that packet If the packet numbers don't match, and the device is +incapable of sending packets out of order, the NAK will be ignored. + If a WAIT is received, the master should watch its MIDI In port +indefinitely for another ACK, NAK, or CANCEL message, which it should +then process normally. + If no messages are received within 20 milliseconds of the +transmission of a packet, the master may assume an open loop +configuration, and send the next packet. + This process continues until there are less than 121 data bytes +to send. The final packet will still consist of 120n bytes, regardless +of how many significant bytes actually remain, and the unused bytes +will be filled with zeroes. The receiver should handshake after +receiving the last packet. + +5) DUMP PROCEDURE: SLAVE (DUMP DESTINATION) + + When receiving a sample dump, a device should keep a running +checksum during reception. If its checksum matches the checksum in the +data packet, it will send an ACK and wait for the next packet. If it +does not match, it will send an NAK containing the number of the +packet that caused the error, and wait for the next packet. If, after +sending an NAK, the packet number of the next packet doesn't match the +previous packet number (the one that was NAK'd), and the unit is not +capable of accepting packets out of order, the error is ignored and +the dump continues as if the checksums had matched. + If a receiver runs out of memory before the dumpo is completed, +it should send a CANCEL to stop the dump. + +6) SDS OVERVIEW + + SAMPLE DUMP DATA FORMAT: DUMP HEADER: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: Header + Sample Number (2 bytes, LSB first) + Sample Format + Sample Period (3 bytes, LSB first) + Sample Length (3 bytes, LSB first) + Sustain Loop Start Point (3 bytes, LSB first) + Sustain Loop End Point (3 bytes, LSB first) + Loop Type + Eox + + SAMPLE DUMP DATA FORMAT: DATA PACKET: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: Data Packet + Packet Number + Sample Data (120 bytes) + Checksum + Eox + + SAMPLE DUMP MESSAGES: DUMP REQUEST: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: Dump Request + Sample Number (2 bytes, LSB first) + Eox + + SAMPLE DUMP MESSAGES: HANDSHAKING FLAGS: + + Sysex + ID: Universal Non-Real Time + Channel Number + Sub ID: ACK or NAK or CANCEL or WAIT + Packet Number + Eox diff --git a/midiseq/MIDIDATA/MIDIFILE.TXT b/midiseq/MIDIDATA/MIDIFILE.TXT new file mode 100644 index 0000000..1869023 --- /dev/null +++ b/midiseq/MIDIDATA/MIDIFILE.TXT @@ -0,0 +1,641 @@ +To get your copy of the 1.0 spec, send a $2 check to: + +International Midi Association +5316 West 57th Street +Los Angeles, CA 90056 +(415) 321-MIDI + +Make your checks payable to the IMA. BYW, the 1.0 spec is technically +identical to the .06 spec, but the description has been re-written. +Since the spec has been offically approved, there shouldn't be any +problem with posting this summary of the .06 spec: + + +[This document is Dave Oppenheim's current version of the MIDI file +specification, as sent to those who have participated in its +development. The consensus seems to be to submit this to the MIDI +Manufacturers' Association as version 1.0. I apologize for any loss of +clarity that might have occurred in the conversion from a Microsoft Word +document to this pure text file. I have removed some of the discussion +about recent changes to the specification in order to keep the file size +reasonable.--Doug Wyatt] + +Standard MIDI Files 0.06 March 1, 1988 + + +0 Introduction + +This describes a proposed standard MIDI file format. MIDI files contain +one or more MIDI streams, with time information for each event. Song, +sequence, and track structures, tempo and time signature information, +are all supported. Track names and other descriptive information may be +stored with the MIDI data. This format supports multiple tracks and +multiple sequences so that if the user of a program which supports +multiple tracks intends to move a file to another one, this format can +allow that to happen. + +This spec defines the 8-bit binary data stream used in the file. The +data can be stored in a binary file, nibbleized, 7-bit-ized for +efficient MIDI transmission, converted to Hex ASCII, or translated +symbolically to a printable text file. This spec addresses what's in +the 8-bit stream. + + +1 Sequences, Tracks, Chunks: File Block Structure + +Sequence files are made up of chunks. Each chunk has a 4-character type +and a 32-bit length, which is the number of bytes in the chunk. On the +Macintosh, data is passed either in the data fork of a file, or on the +Clipboard. (The file type on the Macintosh for a file in this format +will be "Midi".) On any other computer, the data is simply the contents +of the file. This structure allows future chunk types to be designed +which may easily be ignored if encountered by a program written before +the chunk type is introduced. Your programs should expect alien chunks +and treat them as if they weren't there. + +This proposal defines two types of chunks: a header chunk and a track +chunk. A header chunk provides a minimal amount of information +pertaining to the entire MIDI file. A track chunk contains a sequential +stream of MIDI data which may contain information for up to 16 MIDI +channels. The concepts of multiple tracks, multiple MIDI outputs, +patterns, sequences, and songs may all be implemented using several +track chunks. + +A MIDI file always starts with a header chunk, and is followed by one or +more track chunks. + +MThd +
+MTrk + +MTrk + + ... + +Track Data Format (MTrk chunk type) + +The MTrk chunk type is where actual song data is stored. It is simply a +stream of MIDI events (and non-MIDI events), preceded by delta-time +values. + +Some numbers in MTrk chunks are represented in a form called a variable- +length quantity. These numbers are represented 7 bits per byte, most +significant bits first. All bytes except the last have bit 7 set, and +the last byte has bit 7 clear. If the number is between 0 and 127, it +is thus represented exactly as one byte. + +Here are some examples of numbers represented as variable-length +quantities: + + Number (hex) Representation (hex) + 00000000 00 + 00000040 40 + 0000007F 7F + 00000080 81 00 + 00002000 C0 00 + 00003FFF FF 7F + 00004000 81 80 00 + 00100000 C0 80 00 + 001FFFFF FF FF 7F + 00200000 81 80 80 00 + 08000000 C0 80 80 00 + 0FFFFFFF FF FF FF 7F + + +The largest number which is allowed is 0FFFFFFF so that the variable- +length representation must fit in 32 bits in a routine to write +variable-length numbers. Theoretically, larger numbers are possible, +but 2 x 108 96ths of a beat at a fast tempo of 500 beats per minute is +four days, long enough for any delta-time! + +Here is the syntax of an MTrk chunk: + + = + + + = + + is stored as a variable-length quantity. It represents the +amount of time before the following event. If the first event in a +track occurs at the very beginning of a track, or if two events occur +simultaneously, a delta-time of zero is used. Delta-times are always +present. (Not storing delta-times of 0 requires at least two bytes for +any other value, and most delta-times aren't zero.) Delta-time is in +some fraction of a beat (or a second, for recording a track with SMPTE +times), as specified in the header chunk. + + = | | + + is any MIDI channel message. Running status is used: +status bytes may be omitted after the first byte. The first event in a +file must specify status. Delta-time is not considered an event +itself: it is an integral part of the specification. Notice that +running status occurs across delta-times. + + specifies non-MIDI information useful to this format or to +sequencers, with this syntax: + + FF + +All meta-events begin with FF, then have an event type byte (which is +always less than 128), and then have the length of the data stored as a +variable-length quantity, and then the data itself. If there is no +data, the length is 0. As with sysex events, running status is not +allowed. As with chunks, future meta-events may be designed which may +not be known to existing programs, so programs must properly ignore +meta-events which they do not recognize, and indeed, should expect to +see them. New for 0.06: programs must never ignore the length of a +meta-event which they do recognize, and they shouldn't be surprised if +it's bigger than they expected. If so, they must ignore everything past +what they know about. However, they must not add anything of their own +to the end of a meta-event. + + is used to specify a MIDI system exclusive message, or as +an "escape" to specify any arbitrary bytes to be transmitted. +Unfortunately, some synthesizer manufacturers specify that their system +exclusive messages are to be transmitted as little packets. Each packet +is only part of an entire syntactical system exclusive message, but the +times they are transmitted at are important. Examples of this are the +bytes sent in a CZ patch dump, or the FB-01's "system exclusive mode" in +which microtonal data can be transmitted. To be able to handle +situations like these, two forms of are provided: + + F0 + F7 + +In both cases, is stored as a variable-length quantity. It is +equal to the number of bytes following it, not including itself or the +message type (F0 or F7), but all the bytes which follow, including any +F7 at the end which is intended to be transmitted. The first form, with +the F0 code, is used for syntactically complete system exclusive +messages, or the first packet an a series Q that is, messages in which +the F0 should be transmitted. The second form is used for the remainder +of the packets within a syntactic sysex message, which do not begin with +F0. Of course, the F7 is not considered part of the system exclusive +message. Of course, just as in MIDI, running status is not allowed, in +this case because the length is stored as a variable-length quantity +which may or may not start with bit 7 set. + +(New to 0.06) A syntactic system exclusive message must always end with +an F7, even if the real-life device didn't send one, so that you know +when you've reached the end of an entire sysex message without looking +ahead to the next event in the MIDI file. This principle is repeated +and illustrated in the paragraphs below. + +The vast majority of system exclusive messages will just use the F0 +format. For instance, the transmitted message F0 43 12 00 07 F7 would +be stored in a MIDI file as F0 05 43 12 00 07 F7. As mentioned above, +it is required to include the F7 at the end so that the reader of the +MIDI file knows that it has read the entire message. + +For special situations when a single system exclusive message is split +up, with parts of it being transmitted at different times, such as in a +Casio CZ patch transfer, or the FB-01's "system exclusive mode", the F7 +form of sysex event is used for each packet except the first. None of +the packets would end with an F7 except the last one, which must end +with an F7. There also must not be any transmittable MIDI events in- +between the packets of a multi-packet system exclusive message. Here is +an example: suppose the bytes F0 43 12 00 were to be sent, followed by +a 200-tick delay, followed by the bytes 43 12 00 43 12 00, followed by +a 100-tick delay, followed by the bytes 43 12 00 F7, this would be in +the MIDI File: + + F0 03 43 12 00 + 81 48 200-tick delta-time + F7 06 43 12 00 43 12 00 + 64 100-tick delta-time + F7 04 43 12 00 F7 + +The F7 event may also be used as an "escape" to transmit any bytes +whatsoever, including real-time bytes, song pointer, or MIDI Time Code, +which are not permitted normally in this specification. No effort +should be made to interpret the bytes used in this way. Since a system +exclusive message is not being transmitted, it is not necessary or +appropriate to end the F7 event with an F7 in this case. + + +2 Header Chunk + +The header chunk at the beginning of the file specifies some basic +information about the data in the file. The data section contains three +16-bit words, stored high byte first (of course). Here's the syntax of +the complete chunk: + + + +As described above, is the four ASCII characters 'MThd'; + is a 32-bit representation of the number 6 (high byte first). +The first word, format, specifies the overall organization of the file. +Only three values of format are specified: + + 0 the file contains a single multi-channel track + 1 the file contains one or more simultaneous tracks (or MIDI +outputs) of a sequence + 2 the file contains one or more sequentially independent +single-track patterns + +The next word, ntrks, is the number of track chunks in the file. The +third word, division, is the division of a quarter-note represented by +the delta-times in the file. (If division is negative, it represents +the division of a second represented by the delta-times in the file, so +that the track can represent events occurring in actual time instead of +metrical time. It is represented in the following way: the upper byte +is one of the four values -24, -25, -29, or -30, corresponding to the +four standard SMPTE and MIDI time code formats, and represents the +number of frames per second. The second byte (stored positive) is the +resolution within a frame: typical values may be 4 (MIDI time code +resolution), 8, 10, 80 (bit resolution), or 100. This system allows +exact specification of time-code-based tracks, but also allows +millisecond-based tracks by specifying 25 frames/sec and a resolution of +40 units per frame.) + +Format 0, that is, one multi-channel track, is the most interchangeable +representation of data. One application of MIDI files is a simple +single-track player in a program which needs to make synthesizers make +sounds, but which is primarily concerned with something else such as +mixers or sound effect boxes. It is very desirable to be able to +produce such a format, even if your program is track-based, in order to +work with these simple programs. On the other hand, perhaps someone +will write a format conversion from format 1 to format 0 which might be +so easy to use in some setting that it would save you the trouble of +putting it into your program. + +Programs which support several simultaneous tracks should be able to +save and read data in format 1, a vertically one-dimensional form, that +is, as a collection of tracks. Programs which support several +independent patterns should be able to save and read data in format 2, a +horizontally one-dimensional form. Providing these minimum capabilities +will ensure maximum interchangeability. + +MIDI files can express tempo and time signature, and they have been +chosen to do so for transferring tempo maps from one device to another. +For a format 0 file, the tempo will be scattered through the track and +the tempo map reader should ignore the intervening events; for a format +1 file, the tempo map must (starting in 0.04) be stored as the first +track. It is polite to a tempo map reader to offer your user the +ability to make a format 0 file with just the tempo, unless you can use +format 1. + +All MIDI files should specify tempo and time signature. If they don't, +the time signature is assumed to be 4/4, and the tempo 120 beats per +minute. In format 0, these meta-events should occur at least at the +beginning of the single multi-channel track. In format 1, these meta- +events should be contained in the first track. In format 2, each of the +temporally independent patterns should contain at least initial time +signature and tempo information. + +We may decide to define other format IDs to support other structures. A +program reading an unfamiliar format ID should return an error to the +user rather than trying to read further. + +3 Meta-Events + +A few meta-events are defined herein. It is not required for every +program to support every meta-event. Meta-events initially defined +include: + +FF 00 02 ssss Sequence Number +This optional event, which must occur at the beginning of a track, +before any nonzero delta-times, and before any transmittable MIDI +events, specifies the number of a sequence. The number in this track +corresponds to the sequence number in the new Cue message discussed at +the summer 1987 MMA meeting. In a format 2 MIDI file, it is used to +identify each "pattern" so that a "song" sequence using the Cue message +to refer to the patterns. If the ID numbers are omitted, the sequences' +locations in order in the file are used as defaults. In a format 0 or 1 +MIDI file, which only contain one sequence, this number should be +contained in the first (or only) track. If transfer of several +multitrack sequences is required, this must be done as a group of format +1 files, each with a different sequence number. + +FF 01 len text Text Event +Any amount of text describing anything. It is a good idea to put a text +event right at the beginning of a track, with the name of the track, a +description of its intended orchestration, and any other information +which the user wants to put there. Text events may also occur at other +times in a track, to be used as lyrics, or descriptions of cue points. +The text in this event should be printable ASCII characters for maximum +interchange. However, other character codes using the high-order bit +may be used for interchange of files between different programs on the +same computer which supports an extended character set. Programs on a +computer which does not support non-ASCII characters should ignore those +characters. + +(New for 0.06 ). Meta event types 01 through 0F are reserved for +various types of text events, each of which meets the specification of +text events(above) but is used for a different purpose: + +FF 02 len text Copyright Notice +Contains a copyright notice as printable ASCII text. The notice should +contain the characters (C), the year of the copyright, and the owner of +the copyright. If several pieces of music are in the same MIDI file, +all of the copyright notices should be placed together in this event so +that it will be at the beginning of the file. This event should be the +first event in the first track chunk, at time 0. + + +FF 03 len text Sequence/Track Name +If in a format 0 track, or the first track in a format 1 file, the name +of the sequence. Otherwise, the name of the track. + +FF 04 len text Instrument Name +A description of the type of instrumentation to be used in that track. +May be used with the MIDI Prefix meta-event to specify which MIDI +channel the description applies to, or the channel may be specified as +text in the event itself. + +FF 05 len text Lyric +A lyric to be sung. Generally, each syllable will be a separate lyric +event which begins at the event's time. + +FF 06 len text Marker +Normally in a format 0 track, or the first track in a format 1 file. +The name of that point in the sequence, such as a rehearsal letter or +section name ("First Verse", etc.). + + +FF 07 len text Cue Point +A description of something happening on a film or video screen or stage +at that point in the musical score ("Car crashes into house", "curtain +opens", "she slaps his face", etc.) + +FF 2F 00 End of Track +This event is not optional. It is included so that an exact ending +point may be specified for the track, so that it has an exact length, +which is necessary for tracks which are looped or concatenated. + +FF 51 03 tttttt Set Tempo, in microseconds per MIDI quarter-note +This event indicates a tempo change. Another way of putting +"microseconds per quarter-note" is "24ths of a microsecond per MIDI +clock". Representing tempos as time per beat instead of beat per time +allows absolutely exact long-term synchronization with a time-based sync +protocol such as SMPTE time code or MIDI time code. This amount of +accuracy provided by this tempo resolution allows a four-minute piece at +120 beats per minute to be accurate within 500 usec at the end of the +piece. Ideally, these events should only occur where MIDI clocks would +be located Q this convention is intended to guarantee, or at least +increase the likelihood, of compatibility with other synchronization +devices so that a time signature/tempo map stored in this format may +easily be transferred to another device. + +FF 54 05 hr mn se fr ff SMPTE Offset (New in 0.06 - SMPTE Format +specification) +This event, if present, designates the SMPTE time at which the track +chunk is supposed to start. It should be present at the beginning of +the track, that is, before any nonzero delta-times, and before any +transmittable MIDI events. The hour must be encoded with the SMPTE +format, just as it is in MIDI Time Code. In a format 1 file, the SMPTE +Offset must be stored with the tempo map, and has no meaning in any of +the other tracks. The ff field contains fractional frames, in 100ths of +a frame, even in SMPTE-based tracks which specify a different frame +subdivision for delta-times. + +FF 58 04 nn dd cc bb Time Signature +The time signature is expressed as four numbers. nn and dd represent +the numerator and denominator of the time signature as it would be +notated. The denominator is a negative power of two: 2 represents a +quarter-note, 3 represents an eighth-note, etc. The cc parameter +expresses the number of MIDI clocks in a metronome click. The bb +parameter expresses the number of notated 32nd-notes in a MIDI quarter- +note (24 MIDI Clocks). This was added because there are already +multiple programs which allow the user to specify that what MIDI thinks +of as a quarter-note (24 clocks) is to be notated as, or related to in +terms of, something else. + +Therefore, the complete event for 6/8 time, where the metronome clicks +every three eighth-notes, but there are 24 clocks per quarter-note, 72 +to the bar, would be (in hex): + + FF 58 04 06 03 24 08 + +That is, 6/8 time (8 is 2 to the 3rd power, so this is 06 03), 32 MIDI +clocks per dotted-quarter (24 hex!), and eight notated 32nd-notes per +MIDI quarter note. + +FF 59 02 sf mi Key Signature + sf = -7: 7 flats + sf = -1: 1 flat + sf = 0: key of C + sf = 1: 1 sharp + sf = 7: 7 sharps + + mi = 0: major key + mi = 1: minor key + +FF 7F len data Sequencer-Specific Meta-Event + + Special requirements for particular sequencers may use this +event type: the first byte or bytes of data is a manufacturer ID. +However, as this is an interchange format, growth of the spec proper is +preferred to use of this event type. This type of event may be used by +a sequencer which elects to use this as its only file format; +sequencers with their established feature-specific formats should +probably stick to the standard features when using this format. + +4 Program Fragments and Example MIDI Files + +Here are some of the routines to read and write variable-length numbers +in MIDI Files. These routines are in C, and use getc and putc, which +read and write single 8-bit characters from/to the files infile and +outfile. + +WriteVarLen (value) +register long value; +{ + register long buffer; + + buffer = value & 0x7f; + while ((value >>= 7) > 0) + { + buffer <<= 8; + buffer |= 0x80; + buffer += (value & 0x7f); + } + + while (TRUE) + { + putc(buffer,outfile); + if (buffer & 0x80) + buffer >>= 8; + else + break; + } +} + +doubleword ReadVarLen () +{ + register doubleword value; + register byte c; + + if ((value = getc(infile)) & 0x80) + { + value &= 0x7f; + do + { + value = (value << 7) + ((c = getc(infile)) & 0x7f); + } while (c & 0x80); + } + return (value); +} + +As an example, MIDI Files for the following excerpt are shown below. +First, a format 0 file is shown, with all information intermingled; +then, a format 1 file is shown with all data separated into four tracks: +one for tempo and time signature, and three for the notes. A resolution +of 96 "ticks" per quarter note is used. A time signature of 4/4 and a +tempo of 120, though implied, are explicitly stated. + + + + +The contents of the MIDI stream represented by this example are broken +down here: + +Delta Time(decimal) Event Code (hex) Other Bytes (decimal) + Comment + 0 FF 58 04 04 02 24 08 4 bytes: 4/4 time, 24 MIDI +clocks/click, + 8 32nd notes/24 MIDI clocks + 0 FF 51 03 500000 3 bytes: 500,000 5sec per quarter-note + 0 C0 5 Ch. 1, Program Change 5 + 0 C0 5 Ch. 1, Program Change 5 + 0 C1 46 Ch. 2, Program Change 46 + 0 C2 70 Ch. 3, Program Change 70 + 0 92 48 96 Ch. 3 Note On C2, forte + 0 92 60 96 Ch. 3 Note On C3, forte + 96 91 67 64 Ch. 2 Note On G3, mezzo-forte + 96 90 76 32 Ch. 1 Note On E4, piano + 192 82 48 64 Ch. 3 Note Off C2, standard + 0 82 60 64 Ch. 3 Note Off C3, standard + 0 81 67 64 Ch. 2 Note Off G3, standard + 0 80 76 64 Ch. 1 Note Off E4, standard + 0 FF 2F 00 Track End + +The entire format 0 MIDI file contents in hex follow. First, the header +chunk: + + 4D 54 68 64 MThd + 00 00 00 06 chunk length + 00 00 format 0 + 00 01 one track + 00 60 96 per quarter-note + +Then, the track chunk. Its header, followed by the events (notice that +running status is used in places): + + 4D 54 72 6B MTrk + 00 00 00 3B chunk length (59) + + Delta-time Event Comments + 00 FF 58 04 04 02 18 08 time signature + 00 FF 51 03 07 A1 20 tempo + 00 C0 05 + 00 C1 2E + 00 C2 46 + 00 92 30 60 + 00 3C 60 running status + 60 91 43 40 + 60 90 4C 20 + 81 40 82 30 40 two-byte delta-time + 00 3C 40 running status + 00 81 43 40 + 00 80 4C 40 + 00 FF 2F 00 end of track + +A format 1 representation of the file is slightly different. Its header +chunk: + + 4D 54 68 64 MThd + 00 00 00 06 chunk length + 00 01 format 1 + 00 04 four tracks + 00 60 96 per quarter-note + +First, the track chunk for the time signature/tempo track. Its header, +followed by the events: + + 4D 54 72 6B MTrk + 00 00 00 14 chunk length (20) + + Delta-time Event Comments + 00 FF 58 04 04 02 18 08 time signature + 00 FF 51 03 07 A1 20 tempo + 83 00 FF 2F 00 end of track + +Then, the track chunk for the first music track. The MIDI convention +for note on/off running status is used in this example: + + 4D 54 72 6B MTrk + 00 00 00 10 chunk length (16) + + Delta-time Event Comments + 00 C0 05 + 81 40 90 4C 20 + 81 40 4C 00 Running status: note on, vel = 0 + 00 FF 2F 00 end of track + +Then, the track chunk for the second music track: + + 4D 54 72 6B MTrk + 00 00 00 0F chunk length (15) + + Delta-time Event Comments + 00 C1 2E + 60 91 43 40 + 82 20 43 00 running status + 00 FF 2F 00 end of track + +Then, the track chunk for the third music track: + + 4D 54 72 6B MTrk + 00 00 00 15 chunk length (21) + + Delta-time Event Comments + 00 C2 46 + 00 92 30 60 + 00 3C 60 running status + 83 00 30 00 two-byte delta-time, running status + 00 3C 00 running status + 00 FF 2F 00 end of track + +5 MIDI Transmission of MIDI Files + +Since it is inconvenient to exchange disks between different computers, +and since many computers which will use this format will have a MIDI +interface anyway, MIDI seems like a perfect way to send these files from +one computer to another. And, while we're going through all the trouble +to make a way of sending MIDI Files, it would be nice if they could send +any files (like sampled sound files, text files, etc.) + +Goals +The transmission protocol for MIDI files should be reasonably efficient, +should support fast transmission for computers which are capable of it, +and slower transmission for less powerful ones. It should not be +impossible to convert a MIDI File to or from an arbitrary internal +representation on the fly as it is transmitted, but, as long as it is +not too difficult, it is very desirable to use a generic method so that +any file type could be accommodated. + +To make the protocol efficient, the MIDI transmission of these files +will take groups of seven 8-bit bytes and transmit them as eight 7-bit +MIDI data bytes. This is certainly in the spirit of the rest of this +format (keep it small, because it's not that hard to do). To +accommodate a wide range of transmission speeds, files will be +transmitted in packets with acknowledge -- this allows data to be stored +to disk as it is received. If the sender does not receive a response +from a reader in a certain amount of time, it can assume an open-loop +situation, and then just continue. + +The last edition of MIDI Files contained a specialized protocol for +sending just MIDI Files. To meet a deadline, unfortunately I don't have +time right now to propose a new generalized protocol. This will be done +within the next couple of months. I would welcome any proposals anyone +else has, and would direct your attention to the proposal from Ralph +Muha of Kurzweil, available in a recent MMA bulletin, and also directly +from him. + + +-- +Michael S. Czeiszperger | "The only good composer is a dead composer" +Systems Analyst | Snail: 2015 Neil Avenue (614) +The Ohio State University | Columbus, OH 43210 292- +ARPA:czei@accelerator.eng.ohio-state.edu PAN:CZEI 0161 diff --git a/midiseq/MIDIDATA/MIDIMERG.TXT b/midiseq/MIDIDATA/MIDIMERG.TXT new file mode 100644 index 0000000..0964b98 --- /dev/null +++ b/midiseq/MIDIDATA/MIDIMERG.TXT @@ -0,0 +1,989 @@ +############# +# The following is 'midimerge' from the midi-archive. +############# + +This is a collection of MMML messages concerning MIDI merging. +It's sorted chronologically, mostly. +=============================================================== +>From uucp Mon Feb 13 14:15 EST 1989 +>From rft Mon Feb 13 13:20 EST 1989 remote from cblpe + +To: All MMMLers +Subject: Merging MIDI sources together + +I need to merge two (possibly more) MIDI out signals together. +Any recommendations? + +Rick Taylor +cblpe!rft +CB 1D343 +614-860-2006 + +>From uucp Mon Feb 13 16:08 EST 1989 +>From wbf Mon Feb 13 16:04 EST 1989 remote from cbema +Subject: MIDI Merging + +Rick, + + Come see my Digital Music MX-8 to see if it is what you want. If +you don't really need merging, a swith box is all you need. These are less +expensive to buy and you can build your own if you like. + +Bill Fox cbema!wbf + + +>From tjt Mon Feb 13 23:32 EST 1989 +To: midi +Subject: Re: MIDI Merging + +>From mosc Mon Feb 13 22:41:17 1989 remote from aloft +From: aloft!mosc (52232-H. S. Moscovitz) + +I have read some comments on midi-mergers on the MMML. I will share +my experience on the subject. Understanding these devices is fairly +simple, not quite as tricky as microcode programming a floating point +DSP chip. + +I have the J. L. Cooper MSB Plus midi-merge/router/filter/transposer +box. It provides 8X8 midi routing and switching, and id can merge any +two inputs to any of 8 outputs. It is very programmable and stores +about 64 settings (I use only two). It has two independent midi +processors that can do channel bumping, transposition and midi +filtering. You can filter note, pitch bend, controller, after-touch, +program changes, real time, and/or systems exclusive/systems common +commands. + +The MSB is hard to beat in the user friendliness department. This unit +is sure to please any macho-hard-core-techno electronic musician. You +won't find any whimpy graphical liquid crystal displays on this +device. Here's the scoop on one of the refreshing highlights of the user +interface directly from the owners manual: "The program memory and +display of the MSB Plus use a modified Octal from, rather than the +normal decimal due to the 8 select push buttons. That is, instead of +showing (and selecting) patches 1 thru 64, you will use 11 thru 88. In +this system, for example, patch 21 is directly after 18." After +careful study, I have determined that the modified octal system is +very much like the conventional octal system, except that the 0 digit +is not used, but 8 is. Pretty nice huh? But wait, there's more: +For the sake of consistency, the MSB Plus uses the modified hexidecimal +number system for representing midi channels. I am pleased to see the +manufacturer boldly offer a novel new number system where 'F'==15, +and '0'==16. + +An unexpected feature is the red panic button. It is a momentary +on/off switch that generates a very complex sequence of midi events to +intended to turn off all stuck-on notes in your midi network. It +starts off with a simple midi "all notes off" message and then sends a +complex sequence of midi events on all channels for five seconds, or +until you release the button. This sequence is a paranoid midi +musician's dream. + +When I first got the unit home I was curious, so I began setting up +various pathological midi hook-ups to see if I could find the panic +button's limitations. The MSB's flexible routing capabilities made it +easy to set up variations on infinite midi loops, even with automatic +transposition! The waves of sound generated by my synthesizers were +electrifying. (I'm sure Jimi Hendrix would have switched to keyboards +had he heard this.) The MSB has shown me there are vast new musical +horizons. The panic button does its assigned job flawlessly. + + Howard Moscovitz + att!aloft!mosc + +>From uucp Tue Feb 14 12:12 EST 1989 +>From gjm Tue Feb 14 11:50:10 EST 1989 remote from coma +Subject: Re: JLCooper MSB+ + +I can second Howard Moscovitz's recommendation of the MSB+. I have found +it essential for coordinating many synths and dealing with various pieces +of software (different provisions for echo, etc.). If you have two devices +that are the same (e.g. TX81Z's, or TF1 modules in a TX rack), it is useful +for configuring them separately (e.g. separating them out of lock-step with +the same system channel to different system channels). + +I regularly use the midi merge capability, but have experienced data loss +under heavy load (sequencer + keyboard), so be forwarned. The KX88 merges +its input to its output port -- this is the most common merging that I want +(sequencer + KX88 keyboard) and it seems to be able to handle the merge +with fewer problems than the MSB+. Both can run into problems with large +data dumps (an obvious midi merge problem). + +How well do some of the other midi switch/merge boxes behave under heavy +load or sysex dump conditions? + +-Gary + +P.S. Sorry about the duplicate article (Research mailer vs. BSD Mail confusion). + +>From tjt Tue Feb 14 12:38 EST 1989 +To: midi +Subject: Re: JLCooper MSB+ + +> >From gjm Tue Feb 14 11:50:10 EST 1989 remote from coma +> I regularly use the midi merge capability, but have experienced data loss +> under heavy load (sequencer + keyboard), so be forwarned. The KX88 merges +> its input to its output port .... and it seems to be able to handle the merge +> with fewer problems than the MSB+. Both can run into problems with large +> data dumps (an obvious midi merge problem). + +The reaction of the KX88 to large data dumps is pretty amusing - on mine, +at least, it just goes completely bananas, LED's blinking wildly, and refuses +to do anything unless you power cycle it. Does the MSB+ react in the +same catastrophic way? ...Tim... + +>From tjt Tue Feb 14 13:30 EST 1989 +To: midi +Subject: re: COoPer OctAl pAnic + +>From mosc Tue Feb 14 13:13:54 1989 remote from aloft +From: aloft!mosc (52232-H. S. Moscovitz) + +In response to Andy McDonough: + + do they charge money for this? are they available? + +Yes one can purchase a Cooper MPU Plus for somewhere around $350 (if +my memory serves me well, which it usually doen't). It really is a +very nice box that makes it much easier to manage a midi network with +several possible controllers and many sound generators. It is really +overkill if all that is needed is a midi merger. + +I have been told that nobody makes a merger that can mix more than +two midi inputs. Does anybody know for sure the correctness of this +statement? + +>From uucp Mon Feb 20 16:19 EST 1989 +>From gjm Mon Feb 20 16:14:21 EST 1989 remote from coma +Subject: RE: JLCooper MSB+ + +I haven't observed catastrophic failure with the MSB+ due to overloading +the merge function. I have observed lost data, mostly audible by loosing +a Note Off (On 0) message which results in stuck notes (time to hit the +panic button). + +-Gary + +>From uucp Thu Jan 4 13:42 EST 1990 +>From nsw Thu Jan 4 13:41:50 1990 remote from cord +Received: by cord.garage.att.com; 9001041841 +Date: 4 Jan 90 13:41:50 EST (Thu) +From: Neil Weinstock +Subject: Re: MIDI Thru +Message-Id: <9001041841.AA12828@cord.garage.att.com> +To: twitch!midi + + +A MIDI thru is essentially just a straight through connection from the MIDI +input. No processor or UART gets involved; it's just a very simple +bit of wiring. That's why so-called "MIDI Thru boxes" are very cheap. + +A more appropriate place for a device's internally generated MIDI data to be +merged with the input data would be at a MIDI output, though this function +is seldom seen on synthesizers. It is found on some MIDI master controllers, +which may (as in the Roland A-80) perform some massaging of the input data +before merging it into the output. + +If you want this function but your synth doesn't support it, you could +get a similar effect by placing the synth's MIDI out and thru into a merger +(e.g., Pocket Merge). + + ________________ __________________ _________________________ +//// \\// \\// \\\\ +\\\\ Neil Weinstock //\\ att!cord!nsw or //\\ "Your hair is so... //// +//// AT&T Bell Labs \\// nsw@cord.att.com \\// lustre-laden." - Moss \\\\ +\\\\________________//\\__________________//\\_________________________//// + +>From tjt Fri Aug 4 16:03 EDT 1989 +To: midi +Subject: re: Midi Masters and Slaves + +>From arpa!STONY-BROOK.SCRC.Symbolics.COM!ESC Fri Aug 4 13:15 EDT 1989 remote from att +From: Eric S. Crawley + + Date: Thu, 3 Aug 89 19:35 EDT + From: twitch!midi-request@att.att.com + + #### Forwarded from the Mostly MIDI mailing list (twitch!midi) #### + >From uucp Thu Aug 3 18:22 EDT 1989 + >From srm Thu Aug 3 17:21 CDT 1989 remote from ihlpm + To: twitch!midi + Subject: re: Midi Masters and Slaves + + If you want to get fancier, there are a variety of MIDI patch bay/merger/processor + boxes which cost much more. I haven't really investigated these much further + since all I really want is a cheap switcher. Anyone care to comment here? + + Sam Mullins + +Sure, I'll comment: + +I have been using a JLCooper MSB+ switcher as the center of my MIDI +network for almost a year and can't live without. I initally bought a +DMC MX-8 switcher/processor and actually liked it better than the MSB+ +but I needed the 2 extra inputs provided by the MSB+. + +Both units allow switching (MSB+ is 8x8 and the MX-8 is 6x8) and both +have 2 "processors" that allow you to process data from 2 separate +inputs by filtering out unwanted data (SYSEX, realtime, program change, +aftertouch, etc.) and by changing the channel of the data. The MX-8 +goes much further by allowing you to do velocity cross-switching, delay +and MIDI echo, and keyboard range mapping. The MX-8 was also cheaper at +the time. Both units allow the outputs of the "processors" to be merged +at any output. + +Both units are programmable and allow you to select an input and channel +to send program change commands that change the program of the switcher. +Each program can send a number of program change commands to every +output on various channels. So, you could have the switcher set up +every slave when you select a program on the switcher. + +I have my MSB+ set up so it responds to program change commands from my +master controller keyboard. I just select different programs on the +controller to select different configurations. I leave the MIDI +transmit channel of both of my controllers set to channel 1 and use the +MSB+ to change the channel for a particular slave. That way, I don't +have to worry about changing things on my controllers. + +A switcher is a must if you use a computer as a sequencer and patch +editor. You would have to recable every time you wanted 2 way +communication between a slave module and the computer if the slave +doesn't have a keyboard on it. + +I could go on, but I think this is a good summary. If anyone wants more +details, I would be happy to provide them. + +>From uucp Mon Aug 7 09:06 EDT 1989 +>From gfd Mon Aug 7 09:00:38 1989 remote from mtdca +FROM: g.f.demarest +TO: twitch!midi +DATE: 7 Aug 1989 9:00 EDT +SUBJECT: switcher + +> I have been using a JLCooper MSB+ switcher as the center of my MIDI +> network for almost a year and can't live without. I initally bought a +> DMC MX-8 switcher/processor and actually liked it better than the MSB+ +> but I needed the 2 extra inputs provided by the MSB+. + + +Any prices on these boxes? Is that 6 in 8 out? Thrus? Merging? + +>From uucp Thu Mar 1 23:02 EST 1990 +>From upheisei!rick Fri Mar 2 12:04 JST 1990 remote from attunix +To: upheisei!attunix!twitch!midi +Date: 1990 Feb 24 Thu 1.27.82 EMT +Subject: midi boxes + +One quick item: I bought a "midi through" box and quickly discovered to +my chagrin that it can't merge MIDI channels. I recommend against buying +any box that can't merge channels. When I bought it, I wasn't thinking about +that eventuality, but I turned out to really need it; now I flip knobs all +the time because I don't have it. + Rick + +>From uucp Mon Aug 7 17:16 EDT 1989 +>From STONY-BROOK.SCRC.Symbolics.COM!ESC Mon Aug 7 15:21 EDT 1989 remote from arpa +Received: from DJINN.SCRC.Symbolics.COM by STONY-BROOK.SCRC.Symbolics.COM via CHAOS with CHAOS-MAIL id 637653; 7 Aug 89 15:31:47 EDT +Date: Mon, 7 Aug 89 15:21 EDT +From: Eric S. Crawley +To: midi@twitch.att.com +In-Reply-To: The message of 7 Aug 89 10:14 EDT from twitch!midi-request@att.att.com +Message-ID: <19890807192135.0.ESC@DJINN.SCRC.Symbolics.COM> + + Date: Mon, 7 Aug 89 10:14 EDT + From: twitch!midi-request@att.att.com + + #### Forwarded from the Mostly MIDI mailing list (twitch!midi) #### + >From uucp Mon Aug 7 09:06 EDT 1989 + >From gfd Mon Aug 7 09:00:38 1989 remote from mtdca + FROM: g.f.demarest + TO: twitch!midi + DATE: 7 Aug 1989 9:00 EDT + SUBJECT: switcher + + > I have been using a JLCooper MSB+ switcher as the center of my MIDI + > network for almost a year and can't live without. I initally bought a + > DMC MX-8 switcher/processor and actually liked it better than the MSB+ + > but I needed the 2 extra inputs provided by the MSB+. + + + Any prices on these boxes? Is that 6 in 8 out? Thrus? Merging? + +As I recall, they were around $350+ or so but my memory isn't too great. +The MSB+ was closer to $400. The MX-8 is 6 in, 8 out and the MSB+ is 8 +in, 8 out. There are no MIDI-Thrus and if you think about it for a +minute, you realize that a thru on a switcher is not a good idea. Both +units will merge any two inputs to any number of outputs (that is one of +the most important features!). + +>From uucp Sun Jun 17 20:00 EDT 1990 +>From westmark!s4mjs!mjs Sun Jun 17 18:33:24 1990 remote from att +Received: by westmark.UUCP (smail2.5) + id AA17184; 17 Jun 90 18:33:24 EDT (Sun) +Received: by s4mjs.uucp (/\=-/\ Smail3.1.16.1 #16.20) + id ; Sun, 17 Jun 90 18:11 EDT +Message-Id: +Date: Sun, 17 Jun 90 18:11 EDT +From: mjs@s4mjs.uucp (M. J. Shannon) +To: midi@twitch.att.com +Subject: Confusion? + +Here's my current setup: + + (Computer) (drums) (tones) ++---------+ +------------+ +------------+ +| out|--------->|in HR-16 out|--------->|in FB-01 out|--\ +| MQX-16S | +------------+ +------------+ | +| in|<-------------------------------------------------/ ++---------+ + +No matter which order I put the modules in, I lose the capability of +getting system exclusive responses from *one* of them! Surely I'm not +the first person in the world to come to this conclusion, so I guess my +question is: what piece of hardware do I need to get *both* sets of +system exclusive responses (and more, if/as/when I manage to expand my +setup)? + +I assume my setup must change to: + ++---------+ +------------+ +------------+ +| out|--------->|in HR-16 out|--------->|in FB-01 out|--\ +| MQX-16S | +------------+ +------------+ | +| | |thru | +| in|<---------------------------\ inV | ++---------+ \ +------------+ | + \---|out MAGIC in|<-/ + +------------+ + +or (I guess this is preferable): + ++---------+ +-------------+ +------------+ +| out|--------->|in FB-01 thru|-------->|in HR-16 out|--\ +| MQX-16S | +-------------+ +------------+ | +| | |out | +| in|<----\ inV | ++---------+ \ +------------+ | + \---|out MAGIC in|<------------------------/ + +------------+ + +Now, given that such a MAGIC box exists, it would probably come in two +different flavors: merger (always merges its inputs) and switch (allows +reception of a single input). For each flavor, how many inputs could I +get merged/switched, and what's it gonna cost me? Do any of you have +such a beasty that you would recommend (for or against!)? + +For the record, it is *not* critical the way I currently use the setup, +but it will be in the forseeable future. + + Thanks for any advice, + Marty Shannon + +P.S. Them pictures are a pain to draw! + +>From uucp Mon Jun 18 00:40 EDT 1990 +>From upheisei!rick Mon Jun 18 11:24 JST 1990 remote from attunix +To: upheisei!attunix!twitch!midi +Date: 1990 Mai 24 Thu 1.00.56 EMT (90/06/18 Mon 02:24 GMT) +Subject: merge? + +Marty Shannon: While I don't have a merge box myself, it sounds like +you need one. I don't know of any that can merge > 2 inputs, but then +I haven't looked very closely. I do continue to kick myself for NOT +getting a merge box (I got a switch box). + +Drawing diagrams. Sounds like you need a more powerful text editor. +I happen to know that the AT&T Toolchest has a version of EMACS that +has an over-write mode. Makes it much easier to draw such pictures. +There are probably other editors out there as well that can do it... + + Rick + +>From uucp Mon Jun 18 12:14 EDT 1990 +>From wbf Mon Jun 18 11:13 EDT 1990 remote from cbema +Subject: Marty Shannon's Confusion + +/-----------\ /---------\ /---------\ /---------------\ +| SEQUENCER | | DRUMS | | TONES | | YOUR NEXT TOY | +| in out | | in out | | in out | | in out | +\-----------/ \---------/ \---------/ \---------------/ + | | | | | | | | + | | | | | | | | +/--------------------------------------------------------------\ +| out in out in out in out in | +| ONE HECKUVA MAGIC BOX! | +\--------------------------------------------------------------/ + +The above figure is what it sounds like you need, Marty. The magic box +could be a Digital Music MX-8 or a KMX MIDI Central (15 in/16 out) or some +equivalent box. I'm not familiar with the KMX, but the add says it does +merging. From the picture, it looks like only inputs 1 and 2 can be merged +but that may be misleading. Better check that out for yourself. I have +the Digital Music and it includes two "processors." Each processor can do +many types of operations like merging, filtering, keyboard splitting, +re-channelizing, etc., and accepts data from any two inputs. It is, +however, only 6 in by 8 out... or is that 8 x 6? I forget which way it is. + +Note that no THRUs are shown in the diagram above. You can add things like +and Alesis Midiverb II so that it gets program change commands sent to its +input from the thru output of the drum machine, for example. Since this +reverb doesn't do bulk dumps (it's not programmable) you won't have to +waste an input/output pair on the switch/merger/magic box. + +Bill Fox cbema!wbf + + +>From tjt Mon Jun 18 11:52 EST 1990 +To: midi +Subject: Re: Confusion? + +> > THRU boxes are also a potential solution. They give you +> Do they exist with multiple INs and a single OUT? + +You definitely need at least a merger. Simple ones can be gotten +for under a hundred dollars (I have a J.B.Cooper one that looks ugly +but has various dip switches for filtering things separately on each +of the 2 input channels). How much are those tiny Anadek (sp?) ones? +I've never seen a merger with more than 2 inputs, but I assume you +could gang them together - anyone have a system where they need to do +that? ...Tim... + +>From uucp Mon Jun 18 15:48 EDT 1990 +>From nsw Mon Jun 18 14:47:52 1990 remote from edsel +Received: by edsel.garage.att.com; 9006181847 +Date: 18 Jun 90 14:47:52 EDT (Mon) +From: Neil Weinstock +Subject: Mergers and Acquisitions (of mergers) +Message-Id: <9006181847.AA13558@edsel.garage.att.com> +To: twitch!midi + +Tim asked if anyone has a system where they need to have ganged mergers, +or many lines merged into one. Well, consider a system (similar to mine, not +so coincidentally ;-) where the computer is used for sequencing and sys-ex +storage, and there are several slave instruments plus a keyboard or two. +*Everything* needs to have input to the computer (for librarian purposes), +and this implies a many->one merger. I think this is similar to the +configuration that started this thread. + +The obvious alternative is to take some MIDI switcher (a la MX8), and use +different patches to allow various instruments to send data to the computer. +That's not too bad, as it only requires some button pushing (infinitely better +than cable-jockeying.) + +However, it sure would be nice to have all the outs plugged into a mega-merger, +with the merger output going to the computer. Even though a single MIDI line couldn't handle 4 instruments doing sys-ex dumps at the same time, I doubt that would ever happen. Typically, you'd be doing serious sys-ex work with +only one box at a time, or at least you could restrict yourself to that in +order to avoid blowing away the merger. + + - Neil + +--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-- +Neil Weinstock @ AT&T Bell Labs // What was sliced bread +att!edsel!nsw or nsw@garage.att.com \X/ the greatest thing since? + +>From uucp Mon Jun 18 18:06 EDT 1990 +>From rft Mon Jun 18 16:01 EDT 1990 remote from cblpe + +To: midi +Subject: merge boxes + + +I have an Anatek merge box that merges two inputs to a single output. +The list price is $100, but the discount price is about $90. +It does not require batteries (it steals power from the MIDI circuit) +and it is very small, about 3x2x2. + +I use it to merge the output of two keyboards. +The merged output is used as input to my sequencer. +I have not noticed any lost data. +I am happy with the Anatek merge box and it seems to suit my needs +just fine. + +I am sure there is an upper limit on the box's capacity to merge two +simultaneous data streams, but I am not sure what the limit is. +There may be problems if you are trying to dump the memory of one synth +while trying the play notes/dump data on/from another synth. +You may lose data. +If you just want to do dumps from one synth at a time, everything +should be fine. + +You can gang the Anatek mergers if more merging capability is needed. +I seem to recall they recommend using a maximum of 4 before plugging into +some type of MIDI gear. +This would allow you to merge 5 units into one MIDI data stream. +Also I seem to recall that Anatek uses some sort of data compression +when the two MIDI data streams are merged. +I think the Anatek merge box outputs a data stream that uses running status. +This may cause problems for some applications. +I will try to check on this sometime this week. + +Running status is where the only the first message of a data stream targeted +to a given channel includes the status byte. +The status byte includes the message type, e.g. note on , note off, and +the channel number. +The status byte is then sent only when the message type changes. + +Anatek also has a new "studio" version that can merge 7 or 8 inputs (I don't +remember which, I have a spec sheet at home and I can post more info if anyone +wants more details) and also includes some sort of patch bay facilities. +I don't know the price. + + +Rick Taylor + + +>From tjt Mon Jun 18 16:32 EST 1990 +To: midi +Subject: re: Mergers and Acquisitions (of mergers) + +> *Everything* needs to have input to the computer (for librarian purposes), +> and this implies a many->one merger. + .... +> The obvious alternative is to take some MIDI switcher (a la MX8), and use +> different patches to allow various instruments to send data to the computer. +> That's not too bad, as it only requires some button pushing (infinitely better +> than cable-jockeying.) +> However, it sure would be nice to have all the outs plugged into a +> mega-merger, with the merger output going to the computer. + +I agree. Makes me wonder why we haven't seen such things. I guess one +reason might be that if you have 2 identical synths (not unusual - I have +a small setup, but still have 2 TX81Zs), and you send a sysex message +that requests a dump to be sent to the computer, how do you identify +which one you want to send the dump? Guess we need synth id's something +like SCSI id's. ...Tim... + +>From uucp Mon Jun 18 17:29 EDT 1990 +>From gjm Mon Jun 18 16:29:17 EDT 1990 remote from coma +To: twitch!midi +Subject: Re: Mergers and Acquisitions (of mergers) + + +I second what Neil said about using different patches on your MIDI switch +box. The JLCooper MSB+ accepts program change commands to switch patches, +I'm sure that the other boxes do to. So your program should be able to +switch patches to talk to appropriate devices as needed, one (or two at +most) at a time. I haven't tried any switch box patch changes which do +anything that is time critical, so if you're interested in sw.box patch +changes during a performance, you'll probably have to construct your own +tests and try out a box before you buy it. + +-Gary + +>From uucp Mon Jun 18 19:51 EDT 1990 +>From greg Mon Jun 18 17:48 CDT 1990 remote from iwtgp +From: iwtgp!greg (Gregory A Youngdahl +1 708 979 0013) +To: twitch!midi +Subject: Midi Switcher Construction + +Hi all, + + Just thought I'd add my 2 cents worth and remind everyone about +the Electronic Musician article in the Aug. '87 issue called "MIDI +Switcher Primer". Its not a merger, and it sounds like that is what +is required to satisfy the need that started this thread, but if a +switch would suffice, and build-it-yourself intrigues you, this article +describes how to do it. It is an electronic switch, complete with +opto-isolation per the MIDI standard. It also wouldn't be too hard to +wire up a MIDI version of the RS-232 or Parallel 'T' switches that +select various serial or parallel devices to connect to computer ports. +I'm sure parts for a 'T' switch solution would be available at the local +Parts-R-Us (Radio Shack) for much less than the $100 merger. + + I can supply copies of the Electronic Musician article (reprinted +without permission) if anyone is interested. + +Greg Youngdahl AT&T Bell Laboratories Naperville, IL +att!iwtgp!greg + +>From uucp Mon Jun 18 22:52 EDT 1990 +>From druwy!mab Mon Jun 18 19:44:46 1990 remote from mtuxo +FROM: druwy!mab +TO: mtuxo!twitch!midi +DATE: 18 Jun 1990 19:44 MDT +SUBJECT: re: Mergers and Acquisitions (of mergers) + +> reason might be that if you have 2 identical synths (not unusual - I have +> a small setup, but still have 2 TX81Zs), and you send a sysex message +> that requests a dump to be sent to the computer, how do you identify +> which one you want to send the dump? Guess we need synth id's something +> like SCSI id's. ...Tim... + +Most of the synths I've played with include a system channel in their +sysex messages. If you have two identical synths, you can set them to +different system channels so that you can control them separately. I've +seen this on several Kawai synths, FB-01, and CZ-1000. All of them with +the possible exception of the CZ would remember their system channel when +powered off, although that blasted K5 requires you to manually enable +receipt of sysex messages after power-up. Same for FB-01. Maybe someday +the designers will realize we want hands-off MIDI control of all of our +toys. + +Alan + +>From uucp Tue Jun 19 10:10 EDT 1990 +>From honet4!dob Tue Jun 19 09:02 EDT 1990 remote from att +From: honet4!dob (Duane O Bowker +1 201 949 2607) +To: att!twitch!midi +Subject: Mergers, etc. + +Hi. Just wanted to add two cents to Neil's comments RE: MX8. That looks +like the way to go for many inputs to PC in librarian situations. You CAN +get by without any button pushes since the MX8 is itself switchable via +MIDI program change commands, if you configure it to be. So you would have +an MX8 set for librarian/editor A, another for librarian/editor B, another +for playing MIDI guitar into synth module C, et cetera...then build into +your librarian/editors appropriate program change commands to MX8 to switch +among the MIDI configurations. Other cool trick that I use in my lab at +work quite a bit: MX8 set-ups can include up to 8 program change commands +sent to MIDI outputs of MX8. In other words, I can send one program change +to the MX8 and that will configure essentially all the MIDI stuff in the lab. +(The MX8 holds the "macro set-ups", if you will, for the laboratory). + + Duane Bowker + att!honet4!dob + +>From tjt Tue Jun 19 09:43 EST 1990 +To: midi +Subject: Re: Mergers and Acquisitions (of mergers) + +>From mosc Tue Jun 19 08:16:09 1990 remote from aloft +From: aloft!mosc (52842-H. S. Moscovitz) + +This is a comment on real time patch changes on the JLCooper MSB+. +I have one of these devices and you can do this sometimes. It is +not repeatable. The safest think is don't send midi information +on your network for about 1 second after you told the MSB+ to +change patches. Maybe they should have called this box the MSB-. + Howard Moscovitz + aloft!mosc + +>From uucp Tue Jun 19 14:40 EDT 1990 +>From billb Tue Jun 19 13:39:42 1990 remote from mtunj +Received: by mtunj.ATT.COM (smail2.6) + id AA02897; 19 Jun 90 13:39:42 EDT (Tue) +To: twitch!midi +Subject: Re: Mergers and Acquisitions (of mergers) +Message-Id: <9006191339.AA02897@mtunj.ATT.COM> +Date: 19 Jun 90 13:39:42 EDT (Tue) +From: billb@mtunj.ATT.COM (William Burnette) + + +>> This is a comment on real time patch changes on the JLCooper MSB+. +>> I have one of these devices and you can do this sometimes. It is +>> not repeatable. The safest think is don't send midi information +>> on your network for about 1 second after you told the MSB+ to +>> change patches. Maybe they should have called this box the MSB-. +>> Howard Moscovitz +>> aloft!mosc +>> +There is a bug in the MSB+, probably in the implementation of +running status. If a program change directed to the MSB+ +is followed by sysex to anywhere, the MSB+ changes patches +again, probably to some number found in the sysex data. +I've found that a workaround is to follow the MSB+ patch +change by a patch change or note off to some channel +other than the MSB system channel. This seems to allow +speedy MSB+ patch changes. I haven't used this method +in a song sequence, only in a patch editor. + + Bill Burnette + mtunj!billb + + +>From uucp Wed Aug 9 11:26 EDT 1989 +>From srm Wed Aug 9 10:25 CDT 1989 remote from ihlpm +To: twitch!midi +Subject: MIDI switcher revisited + + + +Hi Midi-mailers: + +Last week I had said that I had been looking for a cheap MIDI switcher +for some time but had not found anything. My equipment consists of +a Casio CZ-1 keyboard, a Roland MT-32, a Roland MKS-100 sampler and +an Atari ST. Because I need to have 2-way communication between +each synth and the computer, I need at least 4-in switcher/thru box. +(I won't bore you with all of the possible configurations.) +I thought that I had a lead on a realtively cheap +Sonus box but that turned out to be only 2-in. So I was back to the +cheapest alternative being a Kawai 4-in 8-out for about $125. +Keep in mind that this buys you no memory or processing. I guess +I don't understand why these things are so expensive. + +I had toyed with the idea of building my own but really didn't want to +spend time to deal with all the active electronics necessary for the +"thru" part of the box. The switching part is easy. + +Finally I arrived at a compromise. I realized that I don't have many +delay problems by daisy chaining using the thru ports on my synths. +The real problem I was trying to solve was that I need to have any of +the synth's outputs feed the Atari's input. So, last night I just built a +simple switcher. A project box, 4 5-pin DIN connectors, a double-pole +quadruple-throw switch and some wire. About $9 at Radio Schlock. It +took me about 2.5 hours and I'm really not too swift with a soldering +iron. + +Here is my current setup (I tried to draw a picture but it was getting +frustrating.) + +ST out ---> CZ-1 in +CZ-1 thru ---> MT-32 in +MT-32 thru ---> MKS-100 in + +CZ-1 out ---> switch input 1 +MT-32 out ---> switch input 2 +MKS-100 out ---> switch input 3 +Switch output ---> ST in + +This allows me to run patch librarians for the Roland things which have +a 2-way protocol for bulk transfers. + +If I decide that I can't live with the delays on the thru ports, then I will +buy one of those MIDIMIX 6 thru devices for $35. I still have one switch +position open if I want to add one more input. + +I realize that this is NOT practical for those of you with a much larger +setup but for me it is great. It did exactly what I wanted and I saved +at least $100. I don't really need merging or a thru capability.... yet :-) + +Sam Mullins + +>From att!messy.bellcore.com!mo Thu Aug 2 19:01:19 0700 1990 +Received: by att.att.com; Thu Aug 2 19:03:29 1990 +Received: by messy.bellcore.com (5.61/1.34) + id AA08681; Thu, 2 Aug 90 19:01:19 -0700 +Date: Thu, 2 Aug 90 19:01:19 -0700 +From: mo@messy.bellcore.com (Michael O'Dell) +Message-Id: <9008030201.AA08681@messy.bellcore.com> +To: midi@twitch.att.com +Subject: KMX Midi Central... + +I have two and love them. + +The KMX only costs a bit more than the others and you get +a completely general cross-bar - one gozoutta and one gozinna +per midithing back to the KMX. works like a dream.... + +oh yes - has a merger in 1 & 2, which I route to outputs 14 & 15 +so I can run anything into the merger and through as well. + +quality stuff! + -Mike +>From att!media-lab.media.mit.edu!joe Thu Aug 9 16:41:45 EDT 1990 +Received: by att.att.com; Thu Aug 9 16:40:58 1990 +Received: by media-lab.media.mit.edu (5.57/DA1.0.2) + id AA28488; Thu, 9 Aug 90 16:41:45 EDT +Date: Thu, 9 Aug 90 16:41:45 EDT +From: Joe Chung +Message-Id: <9008092041.AA28488@media-lab.media.mit.edu> +To: midi@twitch.att.com +Subject: Opcode Studio 3 + + +I think someone on this list asked about this box & I replied more or less +in favor of it... I've changed my mind!! + +IT STINKS!!! + +I found that it has *massive* problems dealing with slightly flaky +time code when used as a SMPTE to MIDI Time Code converter. I found +that when a SMPTE dropout occurs, the box can end up mis-synched by +over 15 frames, and remain mis-synched after good SMPTE is available. + +I called a not-very-well-informed tech person at Opcode who seemed to +think that this behavior was part of the box's algorithm to jam +through dropouts (known as non-continous jam synch). I explained to +him *very* vocally that non-continous jam synch mode is something +which you *have* to be able to turn off, and that in any case, you +rarely want it for Midi Time Code conversion. You almost always want +the real numbers even if there's a drop out or discontinuity, since +good software can theoretically correct for errors. (note that this +stuff has nothing to do with the "Jam" button on the front of the +box... That seems to be for SMPTE copying only. + +One factor may have been that I was using 25fps SMPTE... They may have +a bug at this rate which they haven't noticed so far. I'm going to try +to talk to someone who had something to do with building the thing. +(The guy I talked to said "25 FRAMES PER SECOND???" ... I said "yeah, +that's the European standard." He said "no it isn't, it's 24!" Guess +who was right.) + +Conclusion: Be extremely careful if you want to use this thing. It +will probably behave OK as long as your SMPTE is flawless, but in my +experience, you always get a few little glitches here and there. +Winding up miss-synched is so incredibly annoying (and in my case +unusable) that the dangers of this box should be carefully considered. + +On the other hand, I bought it from Sam Ash for $300, and it is +currently the only rack-mount MIDI interface. It also has a built-in +power supply & detachable cord instead of an external transformer & +flimsy little cable. + +The only SMPTE->MTC converter that I would be caught dead with is the +Adam Smith Zeta-3. It is a way-pro device & costs it (~$2500)... It is +also one of the best two-transport tape synchronizers around. + +I also messed a bit with the Tascam MIDIizer. I dont' recomend it. We +had a bunch of flakiness, also featuring random miss-synchs. It's a +real pain in the butt to use as a straight SMPTE->MTC converter as +well. + +By the way... Anyone mess with the Roland A-880 MIDI patch bay? I had +huge problems with this thing when I used it's merge function. Ever +notice that Roland equipment is very cavalier about sending random +sustain/omni-mode/whatever offs? Why don't they ever let you defeat +these "features?" + +>From keyhole!tjt Mon Dec 3 21:05 EST 1990 +To: twitch!midi +Subject: re: Midi Cabling + +> I just want to be able to: +> 1) Drive the Korg from either the Keyboard or +> the computer WITHOUT messing with cables. + +You need a 'merger', a box with 2 MIDI in's and 1 MIDI out. +Anadek (sp?) makes a 'pocket merger' for < $100. The November 1990 +Electronic Musician magazine has a do-it-yourself project for building +a merger. + +> Can two 3-wire midi cables be "wire-or'ed"? + +In some situations it can work (if the 2 inputs are never +simultaneously active), but occasionally still produces garbage. +Anyone know if there are cases when it can actually damage +the equipment? ...Tim... + +>From homxb!gabin Tue Dec 4 08:21 EST 1990 +From: homxb!gabin (Jay Gabin +1 201 615 2830) +To: twitch!midi +Subject: re: Midi Cabling + + +About using merger cables and such... + +I had the same problem of wanting to drive my set-up from +my main keyboard or my computer without fooling with +cables. I bought a MIDI patch-bay (I think it's J. L. Cooper +and cost $80 mailorder). This has 3 inputs and 8 outputs. +With switches on the front, you can make each of the +outputs receive any of the 3 inputs. So, with a flick of +these switches I can bring the computer into or out of +the loop. + +Jay + +>From tjt Tue Dec 4 10:49 EST 1990 +To: midi +Subject: Re: Midi Cabling + +>From att!ifi.uib.no!gunnars Tue Dec 4 08:47:10 +0100 1990 +From: gunnars@ifi.uib.no (Stud. Gunnar Sylthe) + +James Fischer says: + +=> Can I do this? +=> +=> Keyboard M3R +=> Out ---------->----+-------> In +=> ^ +=> Computer | +=> Out ---------->----+ +=> +=> Computer M3R +=> In <------------------------ Out +=> +=> ... by soldering up a custom cable? Can two 3-wire midi +=> cables be "wire-or'ed"? +=> +=> Or must I buy a "Thru box" to do this? + +I think what you need is some kind of MIDI merge box. If I were you +I'd look into the Anatek PocketMerge. I've never used it myself, and +my sole "experience" with it is from reading the ads and a test in a +Norwegian musician's mag, but it is supposedly a cheap, simple and +reliable gadget which does one thing (merging to midi ins to one +midi thru) and does it well. + +If you do try it out, why not post some "test results" to the list? +I, for one, would be interested. + +--Gunnar Sylthe +gunnars@ifi.uib.no + +>From mtuxo!druco!mab Tue Dec 4 10:15 MST 1990 +To: mtuxo!twitch!midi +Subject: Anatek PocketMerge + +I bought the Anatek PocketMerge a while back and it works as advertised. +It has two INs that are merged into one OUT. I haven't stress-tested it, +so I don't know how well it would handle lots of simultaneous data from +both INs. My main use is to minimize cable swapping, so I rarely have +both INs feeding data at the same time. + + Alan Bland +>From mvgpl!mvcrg Tue Dec 4 15:50 EST 1990 +From: mvgpl!mvcrg (Christopher R Gayle +1 508 960 2904) +To: twitch!midi +Subject: merge box + +Did read in recent MMML items somewhere that there is a build-it-yourself +merge box? I'd like to know where to get the info to build one... has +anyone out there done this? If so, how did it perform? + +How about switchboxes? Are they too complicated for reliable hand-wired +projects? Any experience with these? + +- Topher Gayle x2904 mvcrg@mvgpl.att.com +>From keyhole!tjt Tue Dec 4 19:11 EST 1990 +To: twitch!midi +Subject: do-it-yourself merge box + +> From: mvgpl!mvcrg (Christopher R Gayle +1 508 960 2904) +> Did read in recent MMML items somewhere that there is a build-it-yourself +> merge box? I'd like to know where to get the info to build one... has + +The November 1990 issue of Electronic Musician magazine had an article +that showed how to build one. You can buy the PC board and programmed +EPROMS from the author of the article, for $28 and $10, respectively. + + ...Tim... + +>From tjt Tue Dec 4 19:19 EST 1990 +To: midi +Subject: Re: merge box + +From: ihlpe!greg (Gregory A Youngdahl +1 708 979 0013) + +Topher, + + The build-it-yourself box you are referring to may be the MIDI +switch box that I had mentioned a while back. This is an electronic +switch circuit described in an article in the Aug. '87 issue of +Electronic Musician. This circuit may be a solution to James' need +to avoid physically switching cables, but it is not a merger. I have +a copy of the article that I could send out if you are interested in +it. I have not built this unit, but I don't see why it wouldn't do +the job it is intended for. Of course the job could also be accomplished +with a mechanical switch. + +-- +Greg Youngdahl AT&T Bell Laboratories Naperville, IL +att!ihlpe!greg +>From tjt Wed Dec 5 11:48 EST 1990 +To: midi +Subject: Re: do-it-yourself merge box + +>From ihlpm!srm Wed Dec 5 09:37 CST 1990 + +>The November 1990 issue of Electronic Musician magazine had an article +>that showed how to build one. You can buy the PC board and programmed +>EPROMS from the author of the article, for $28 and $10, respectively. +> +> ...Tim... + +Before anyone goes to a lot of trouble....My brother just bought a Pocket +Merge for $59 for DJ's in ChicagoLand. At that price it may not be worth +building a kit for $38+. Of course, if you enjoy that kind of thing go ahead. + +Sam diff --git a/midiseq/MIDIDATA/MIDINOTE.TXT b/midiseq/MIDIDATA/MIDINOTE.TXT new file mode 100644 index 0000000..f050e9b --- /dev/null +++ b/midiseq/MIDIDATA/MIDINOTE.TXT @@ -0,0 +1,19 @@ + Table 2: Summary of MIDI Note Numbers for Different Octaves + (adapted from "MIDI by the Numbers" by D. Valenti - Electronic Musician 2/88) + + +Octave|| Note Numbers + # || + || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +------------------------------------------------------------------------------ + 0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 + 1 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 + 2 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 + 3 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 + 4 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + 5 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 + 6 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 + 7 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 + 8 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 + 9 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 + 10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | diff --git a/midiseq/MIDIDATA/MIDIPRIM.TXT b/midiseq/MIDIDATA/MIDIPRIM.TXT new file mode 100644 index 0000000..b2426b7 --- /dev/null +++ b/midiseq/MIDIDATA/MIDIPRIM.TXT @@ -0,0 +1,593 @@ + The USENET MIDI Primer + Bob McQueer + +PURPOSE + +It seems as though many people in the USENET community have an interest +in the Musical Instrument Digital Interface (MIDI), but for one reason +or another have only obtained word of mouth or fragmentary descriptions +of the specification. Basic questions such as "what's the baud rate?", +"is it EIA?" and the like seem to keep surfacing in about half a dozen +newsgroups. This article is an attempt to provide the basic data to +the readers of the net. + +REFERENCE + +The major written reference for this article is version 1.0 of the MIDI +specification, published by the International MIDI Association, copyright +1983. There exists an expanded document. This document, which I have not +seen, is simply an expansion of the 1.0 spec. to contain more explanatory +material, and fill in some areas of hazy explanation. There are no +radical departures from 1.0 in it. I have also heard of a "2.0" spec., +but the IMA claims no such animal exists. In any event, backwards +compatibility with the information I am presenting here should be +maintained. + +CONVENTIONS + +I will give constants in C syntax, ie. 0x for hexadecimal. If I +refer to bits by number, I number them starting with 0 for the low +order (1's place) bit. The following notation: + +>> + +text + +<< + +will be used to delimit commentary which is not part of the "bare- +bones" specification. A sentence or paragraph marked with a question +mark in column 1 is a point I would kind of like to hear something +about myself. + +OK, let's give it a shot. + +PHYSICAL CONNECTOR SPECIFICATION + +The standard connectors used for MIDI are 5 pin DIN. Separate sockets +are used for input and output, clearly marked on a given device. The +spec. gives 50 feet as the maximum cable length. Cables are to be +shielded twisted pair, with the shield connecting pin 2 at both ends. +The pair is pins 4 and 5, pins 1 and 3 being unconnected: + + 2 + 5 4 + 3 1 + +A device may also be equipped with a "MIDI-THRU" socket which is used +to pass the input of one device directly to output. + +>> + I think this arrangement shows some of the original conception + of MIDI more as a way of allowing keyboardists to control + multiple boxes than an instrument to computer interface. The + "daisy-chain" arrangement probably has advantages for a performing + musician who wants to play "stacked" synthesizers for a desired + sound, and has to be able to set things up on the road. +<< + +ELECTRICAL SPECIFICATION + +Asynchronous serial interface. The baud rate is 31.25 Kbaud (+/- 1%). +There are 8 data bits, with 1 start bit and 1 stop bit, for 320 +microseconds per serial byte. + +MIDI is current loop, 5 mA. Logic 0 is current ON. The specification +states that input is to be opto-isolated, and points out that Sharp +PC-900 and HP 6N138 optoisolators are satisfactory devices. Rise and +fall time for the optoisolator should be less than 2 microseconds. + +The specification shows a little circuit diagram for the connections +to a UART. I am not going to reproduce it here. There's not much +to it - I think the important thing it shows is +5 volt connection +to pin 4 of the MIDI out with pin 5 going to the UART, through 220 +ohm load resistors. It also shows that you're supposed to connect +to the "in" side of the UART through an optoisolator, and to the +MIDI-THRU on the UART side of the isolator. + +>> + I'm not much of a hardware person, and don't really know what + I'm talking about in paragraphs like the three above. I DO + recognize that this is a "non-standard" specification, which + won't work over serial ports intended for anything else. People + who do know about such things seem to either have giggling + or gagging fits when they see it, depending on their dispos- + itions, saying things like "I haven't seen current loop since + the days of the old teletypes". I also know the fast 31.25 + Kbaud pushes the edge for clocking commonly available UART's. +<< + +DATA FORMAT + +For standard MIDI messages, there is a clear concept that one device +is a "transmitter" or "master", and the other a "receiver" or "slave". +Messages take the form of opcode bytes, followed by data bytes. +Opcode bytes are commonly called "status" bytes, so we shall use +this term. + +>> + very similar to handling a terminal via escape sequences. There + aren't ACK's or other handshaking mechanisms in the protocol. +<< + +Status bytes are marked by bit 7 being 1. All data bytes must +contain a 0 in bit 7, and thus lie in the range 0 - 127. + +MIDI has a logical channel concept. There are 16 logical channels, +encoded into bits 0 - 3 of the status bytes of messages for +which a channel number is significant. Since bit 7 is taken over +for marking the status byte, this leaves 3 opcode bits for message +types with a logical channel. 7 of the possible 8 opcodes are +used in this fashion, reserving the status bytes containing all +1's in the high nibble for "system" messages which don't have a +channel number. The low order nibble in these remaining messages +is really further opcode. + +>> + If you are interested in receiving MIDI input, look over the + SYSTEM messages even if you wish to ignore them. Especially the + "system exclusive" and "real time" messages. The real time + messages may be legally inserted in the middle of other data, + and you should be aware of them, even though many devices won't + use them. +<< + +VOICE MESSAGES + +I will cover the message with channel numbers first. The opcode determines +the number of data bytes for a single message (see "running status byte", +below). The specification divides these into "voice" and "mode" messages. +The "mode" messages are for control of the logical channels, and the control +opcodes are piggybacked onto the data bytes for the "parameter" message. +I will go into this after describing the "voice messages". These messages are: + +status byte meaning data bytes + +0x80-0x8f note off 2 - 1 byte pitch, followed by 1 byte velocity +0x90-0x9f note on 2 - 1 byte pitch, followed by 1 byte velocity +0xa0-0xaf key pressure 2 - 1 byte pitch, 1 byte pressure (after-touch) +0xb0-0xbf parameter 2 - 1 byte parameter number, 1 byte setting +0xc0-0xcf program 1 byte program selected +0xd0-0xdf chan. pressure 1 byte channel pressure (after-touch) +0xe0-0xef pitch wheel 2 bytes gives a 14 bit value, least significant + 7 bits first + +Many explanations are necessary here: + +For all of these messages, a convention called the "running status +byte" may be used. If the transmitter wishes to send another message +of the same type on the same channel, thus the same status byte, the +status byte need not be resent. + +Also, a "note on" message with a velocity of zero is to be synonymous +with a "note off". Combined with the previous feature, this is intended +to allow long strings of notes to be sent without repeating status bytes. + +>> + From what I've seen, the "zero velocity note on" feature is very + heavily used. My six-trak sends these, even though it sends + status bytes on every note anyway. Roland stuff uses it. +<< + +The pitch bytes of notes are simply number of half-steps, with middle C = 60. + +>> + On keyboard synthesizers, this usually simply means which + physical key corresponds, since the patch selection will + change the actual pitch range of the keyboard. Most keyboards + have one C key which is unmistakably in the middle of the + keyboard. This is probably note 60. +<< + +The velocity bytes for velocity sensing keyboards are supposed +to represent a logarithmic scale. "advisable" in the words +of the spec. Non-velocity sensing devices are supposed to +send velocity 64. + +The pitch wheel value is an absolute setting, 0 - 0x3FFF. The +1.0 spec. says that the increment is determined by the receiver. +0x2000 is to correspond to a centered pitch wheel (unmodified notes) + +>> + I believe standard scale steps are one of the things discussed + in expansions. The six-trak pitch wheel is up/down about a third. + I believe several makers have used this value, but I may be wrong. + + The "pressure" messages are for keyboards which sense the amount + of pressure placed on an already depressed key, as opposed to + velocity, which is how fast it is depressed or released. + +? I'm not really certain of how "channel" pressure works. Yamaha + is one maker that uses these messages, I know. +<< + +Now, about those parameter messages. + +Instruments are so fundamentally different in the various controls +they have that no attempt was made to define a standard set, like +say 9 for "Filter Resonance". Instead, it was simply assumed that +these messages allow you to set "controller" dials, whose purposes +are left to the given device, except as noted below. The first data +bytes correspond to these "controllers" as follows: + +data byte + +0 - 31 continuous controllers 0 - 31, most significant byte +32 - 63 continuous controllers 0 - 31, least significant byte +64 - 95 on / off switches +96 - 121 unspecified, reserved for future. +122 - 127 the "channel mode" messages I alluded to above. See below. + +The second data byte contains the seven bit setting for the controller. +The switches have data byte 0 = OFF, 127 = ON with 1 - 126 undefined. +If a controller only needs seven bits of resolution, it is supposed to +use the most significant byte. If both are needed, the order is +specified as most significant followed by least significant. With a +14 bit controller, it is to be legal to send only the least significant +byte if the most significant doesn't need to be changed. + +>> + This may of, course, wind up stretched a bit by a given manufacturer. + The Six-Trak, for instance, uses only single byte values (LEFT + justified within the 7 bits at that), and recognizes >32 parameters +<< + +Controller number 1 IS standardized to be the modulation wheel. + +? Are there any other standardizations which are being followed by most + manufacturers? + +MODE MESSAGES + +These are messages with status bytes 0xb0 through 0xbf, and leading data +bytes 122 - 127. In reality, these data bytes function as further +opcode data for a group of messages which control the combination of +voices and channels to be accepted by a receiver. + +An important point is that there is an implicit "basic" channel over which +a given device is to receive these messages. The receiver is to ignore +mode messages over any other channels, no matter what mode it might be in. +The basic channel for a given device may be fixed or set in some manner +outside the scope of the MIDI standard. + +The meaning of the values 122 through 127 is as follows: + +data byte second data byte +122 local control 0 = local control off, 127 = on +123 all notes off 0 +124 omni mode off 0 +125 omni mode on 0 +126 monophonic mode number of monophonic channels, or 0 + for a number equal to receivers voices +127 polyphonic mode 0 + +124 - 127 also turn all notes off. + +Local control refers to whether or not notes played on an instruments +keyboard play on the instrument or not. With local control off, the +host is still supposed to be able to read input data if desired, as +well as sending notes to the instrument. Very much like "local echo" +on a terminal, or "half duplex" vs. "full duplex". + +The mode setting messages control what channels / how many voices the +receiver recognizes. The "basic channel" must be kept in mind. "Omni" +refers to the ability to receive voice messages on all channels. "Mono" +and "Poly" refer to whether multiple voices are allowed. The rub is +that the omni on/off state and the mono/poly state interact with each +other. We will go over each of the four possible settings, called "modes" +and given numbers in the specification: + +mode 1 - Omni on / Poly - voice messages received on all channels and + assigned polyphonically. Basically, any notes it gets, it + plays, up to the number of voices it's capable of. + +mode 2 - Omni on / Mono - monophonic instrument which will receive + notes to play in one voice on all channels. + +mode 3 - Omni off / Poly - polyphonic instrument which will receive + voice messages on only the basic channel. + +mode 4 - Omni off / Mono - A useful mode, but "mono" is a misnomer. + To operate in this mode a receiver is supposed to receive + one voice per channel. The number channels recognized will be + given by the second data byte, or the maximum number of possible + voices if this byte is zero. The set of channels thus defined + is a sequential set, starting with the basic channel. + +The spec. states that a receiver may ignore any mode that it cannot +honor, or switch to an alternate - "usually" mode 1. Receivers are +supposed to default to mode 1 on power up. It is also stated that +power up conditions are supposed to place a receiver in a state where +it will only respond to note on / note off messages, requiring a +setting of some sort to enable the other message types. + +>> + I think this shows the desire to "daisy-chain" devices for + performance from a single master again. We can set a series + of instruments to different basic channels, tie 'em together, + and let them pass through the stuff they're not supposed to + play to someone down the line. + + This suffers greatly from lack of acknowledgement concerning + modes and usable channels by a receiver. You basically have + to know your device, what it can do, and what channels it can + do it on. + + I think most makers have used the "system exclusive" message + (see below) to handle channels in a more sophisticated manner, + as well as changing "basic channel" and enabling receipt of + different message types under host control rather than by + adjustment on the device alone. + + The "parameters" may also be usurped by a manufacturer for + mode control, since their purposes are undefined. + + Another HUGE problem with the "daisy-chain" mental set of MIDI + is that most devices ALWAYS shovel whatever they play to their + MIDI outs, whether they got it from the keyboard or MIDI in. + This means that you have to cope with the instrument echoing + input back at you if you're trying to do an interactive session + with the synthesizer. There is DRASTIC need for some MIDI flag + which specifically means that only locally generated data is to + go to MIDI out. From device to device there are ways of coping + with this, none of them good. +<< + +SYSTEM MESSAGES + +The status bytes 0x80 - 0x8f do not have channel numbers in the +lower nibble. These bytes are used as follows: + +byte purpose data bytes + +0xf0 system exclusive variable length +0xf1 undefined +0xf2 song position 2 - 14 bit value, least significant byte first +0xf3 song select 1 - song number +0xf4 undefined +0xf5 undefined +0xf6 tune request 0 +0xf7 EOX (terminator) 0 + +The status bytes 0xf8 - 0xff are the so-called "real-time" messages. +I will discuss these after the accumulated notes concerning the +first bunch. + +Song position / song select are for control of sequencers. The +song position is in beats, which are to be interpreted as every +6 MIDI clock pulses. These messages determine what is to be played +upon receipt of a "start" real-time message (see below). + +The "tune request" is a command to analog synthesizers to tune their +oscillators. + +The system exclusive message is intended for manufacturers to use +to insert any specific messages they want to which apply to their +own product. The following data bytes are all to be "data" bytes, +that is they are all to be in the range 0 - 127. The system exclusive +is to be terminated by the 0xf7 terminator byte. The first data byte +is also supposed to be a "manufacturer's id", assigned by a MIDI +standards committee. THE TERMINATOR BYTE IS OPTIONAL - a system +exclusive may also be "terminated" by the status byte of the next +message. + +>> + Yamaha, in particular, caused problems by not sending terminator + bytes. As I understand it, the DX-7 sends a system exclusive + at something like 80 msec. intervals when it has nothing better + to do, just so you know it's still there, I guess. The messages + aren't explicitly terminated, so if you want to handle the + protocol (esp. in hardware), you should be aware that a DX-7 + will leave you in "waiting for EOX" state a lot, and be sending + data even when it isn't doing anything. This is all word of + mouth, since I've never personally played with a DX-7. +<< + +some MIDI ID's: + + Sequential Circuits 1 Bon Tempi 0x20 Kawai 0x40 + Big Briar 2 S.I.E.L. 0x21 Roland 0x41 + Octave / Plateau 3 Korg 0x42 + Moog 4 SyntheAxe 0x23 Yamaha 0x43 + Passport Designs 5 + Lexicon 6 + PAIA 0x11 + Simmons 0x12 + Gentle Electric 0x13 + Fairlight 0x14 + +>> + Note the USA / Europe / Japan grouping of codes. Also note + that Sequential Circuits snarfed id number 1 - Sequential + Circuits was one of the earliest participators in MIDI, some + people claim its originator. + + Two large makers missing from the original lineup were Casio + and Oberheim. I know Oberheim is on the bandwagon now, and + Casio also, I believe. Oberheim had their own protocol previous + to MIDI, and when MIDI first came out they were reluctant to +? go along with it. I wonder what we'd be looking at if Oberheim + had pushed their ideas and made them the standard. From what I + understand they thought THEIRS was better, and kind of sulked + for a while until the market forced them to go MIDI. + +? Nobody seems to care much about these ID numbers. I can only + imagine them becoming useful if additions to the standard message + set are placed into system exclusives, with the ID byte to let + you know what added protocol is being used. Are any groups of + manufacturers considering consolidating their efforts in a + standard extension set via system exclusives? +<< + +REAL TIME MESSAGES. + +This is the final group of status bytes, 0xf8 - 0xff. These bytes +are reserved for messages which are called "real-time" messages +because they are allowed to be sent ANYPLACE. This includes in +between data bytes of other messages. A receiver is supposed to +be able to receive and process (or ignore) these messages and +resume collection of the remaining data bytes for the message +which was in progress. Realtime messages do not affect the +"running status byte" which might be in effect. + +? Do any devices REALLY insert these things in the middle of + other messages? + +All of these messages have no data bytes following (or they could +get interrupted themselves, obviously). The messages: + +0xf8 timing clock +0xf9 undefined +0xfa start +0xfb continue +0xfc stop +0xfd undefined +0xfe active sensing +0xff system reset + +The timing clock message is to be sent at the rate of 24 clocks +per quarter note, and is used to sync. devices, especially drum +machines. + +Start / continue / stop are for control of sequencers and drum +machines. The continue message causes a device to pick up at the +next clock mark. + +>> + These things are also designed for performance, allowing control + of sequencers and drum machines from a "master" unit which + sends the messages down the line when its buttons are pushed. + + I can't tell you much about the trials and tribulations of drum + machines. Other folks can, I am sure. +<< + +The active sensing byte is to be sent every 300 ms. or more often, +if it is used. Its purpose is to implement a timeout mechanism +for a receiver to revert to a default state. A receiver is to +operate normally if it never gets one of these, activating the +timeout mechanism from the receipt of the first one. + +>> + My impression is that active sensing is largely unused. +<< + +The system reset initializes to power up conditions. The spec. says +that it should be used "sparingly" and in particular not sent +automatically on power up. + +AND NOW, CLIMBING TO THE PULPIT .... + +>> - from here on out. + +There are many deficiencies with MIDI, but it IS a standard. As such, +it will have to be grappled with. + +The electrical specification leaves me with only one question - WHY? +What was wanted was a serial interface, and a perfectly good RS232 +specification was to be had. WHY wasn't it used? The baud rate is +too fast to simply convert into something you can feed directly to +your serial port via fairly dumb hardware, also. The "standard" +baud rate step you would have to use would be 38.4 Kbaud which very +few hardware interfaces accept. The other alternative is to buffer +messages and send them out a slower baud rate - in fact buffering +of characters by some kind of I/O processor is very helpful. Hence +units like the MPU-401, which does a lot of other stuff, too of course. + +The fast baud rate with MIDI was set for two reasons I believe: + + 1) to allow daisy-chaining of a few devices with no noticeable + end to end lag. + + 2) to allow chords to be played by just sending all the notes down + the pipe, the baud rate being fast enough that they will + sound simultaneous. + +It doesn't exactly work - I've heard gripes concerning end to end lag +on three instrument chains. And consider chords - at two bytes (running +status byte being used) per note, there will be a ten character lag +between the trailing edges of the first and last notes of a six note +chord. That's 3.2 ms., assuming no "dead air" between characters. It's +still pretty fast, but on large chords with voices possessing distinctive +attack characteristics, you may hear separate note beginnings. + +I think MIDI could have used some means of packetizing chords, or having +transaction markers. If a "chord" message were specified, you could +easily +break even on byte count with a few notes, given that we assume all notes +of a chord at the same velocity. Transaction markers might be useful in +any case, although I don't know if it would be worth taking over the +remaining system message space for them. I would say yes. I would +see having "start" and "end" transaction bytes. On receipt of a "start" +a receiver buffers up but does not act on messages until receipt of the +"end" byte. You could then do chords by sending the notes ahead of time, +and precisely timing the "end" marker. Of course, the job of the hardware +in the receiver has been complicated considerably. + +The protocol is VERY keyboard oriented - take a look at the use of TWO +of the opcodes in the limited opcode space for "pressure" messages, +and the inability to specify semitones or glissando effects except +through the pitch wheel (which took up yet ANOTHER of the opcodes). +All keyboards I know of modify ALL playing notes when they receive +pitch wheel data. Also, you have to use a continuous stream of +pitch wheel messages to effect a slide, the pitch wheel step isn't +standardized, and on a slide of a large number of tones you will +overrun the range of the wheel. + +? Some of these problems would be addressed by a device which allowed + its pitch wheel to have selective control - say modifying only + the notes playing on the channel the pitch wheel message is + received in, for instance. The thing for a guitar synthesizer + to do, then, would be to use mode 4, one channel per string, and + bends would only affect the one note. You could play a chord + on a voice with a lot of release, then bend a note and not have + the entire still sounding chord bend. Any such devices? + +I think some of the deficiencies in MIDI might be addressed by +different communities of interest developing a standard set of +system exclusives which answer the problem. One perfect area +for this, I think, is a standard set for representation of "non- +keyboard / drum machine" instruments which have continuous pitch +capabilities. Like a pedal steel, for instance. Or non-western +intervals. Like a sitar. + +There is a crying need to do SOMETHING about the "loopback" problem. +I would even vote for usurping a few more bytes in the mode messages +to allow you to TURN OFF input echo by the receiver. With the +local control message, you could then at least deal with something +that would act precisely like a half or full duplex terminal. +Several patchwork solutions exist to this problem, but there OUGHT +to be a standard way of doing it within the protocol. Another +thought is to allow data bytes of other than 0 or 127 to control +echo on the existing local control message. + +The lack of acknowledgement is a problem. Another candidate for a +standard system exclusive set would be a series of messages for +mode setting with acknowledgement. This set could then also +take care of the loopback problem. + +The complete lack of ability to specify standardized waveforms is +probably another source of intense disappointment to many readers. +Trouble is, the standard lingo used by the synthesizer industry and +most working musicians is something which hails back to the first +days of synthesizer design, deals with envelope generators and +filters and VCO / LFO hardware parameters, and is very damn difficult +to relate to Fourier series expressing the harmonic content or any other +abstractions some people interested in doing computer composition +would like. The parameter set used by the average synthesizer +manufacturer isn't anyplace close to orthogonal in any sense, and is bound +to vary wildly in comparison to anybody elses. There are essentially no +abstractions made by most of the industry from underlying hardware +parameters. What standardization exists reflects only the similarity +in hardware. This is one quagmire that we have a long way to go to +get out of, I think. It might be possible, eventually, to come up +with translation tables describing the best way to approximate a +desired sound on a given device in terms of its parameter set, but +the difficulties are enormous. MIDI has chosen to punt on this one, folks. + +Well, that's about it. Good luck with talking to your synthesizer. + +Bob McQueer +22 Bcy, 3151 + +All rites reversed. Reprint what you like. diff --git a/midiseq/MIDIDATA/MIDISPEC.TXT b/midiseq/MIDIDATA/MIDISPEC.TXT new file mode 100644 index 0000000..ba13492 --- /dev/null +++ b/midiseq/MIDIDATA/MIDISPEC.TXT @@ -0,0 +1,171 @@ + MIDI 1.0 Specification: + +Status Data Byte(s) Description +D7----D0 D7----D0 +------------------------------------------------------------------------- +Channel Voice Messages +------------------------------------------------------------------------- +1000cccc 0nnnnnnn Note Off event. + 0vvvvvvv This message is sent when a + note is released (ended). + (nnnnnnn) is the note number. + (vvvvvvv) is the velocity. + +1001cccc 0nnnnnnn Note On event. + 0vvvvvvv This message is sent when a + note is depressed (start). + (nnnnnnn) is the note number. + (vvvvvvv) is the velocity. + +1010cccc 0nnnnnnn Polyphonic Key Pressure (After-touch). + 0vvvvvvv This message is sent when the pressure + (velocity) of a previously + triggered note changes. + (nnnnnnn) is the note number. + (vvvvvvv) is the new velocity. + +1011cccc 0ccccccc Control Change. + 0vvvvvvv This message is sent when a controller + value changes. Controllers include devices + such as pedals and levers. + Certain controller numbers are reserved + for specific purposes. See Channel Mode Messages. + (ccccccc) is the controller number. + (vvvvvvv) is the new value. + +1100cccc 0ppppppp Program Change. + This message sent when the patch number changes. + (ppppppp) is the new program number. + +1101nnnn 0ccccccc Channel Pressure (After-touch). + This message is sent when the channel pressure + changes. Some velocity-sensing keyboards do not + support polyphonic after-touch. Use this + message to send the single greatest velocity + (of all te current depressed keys). + (ccccccc) is the channel number. + +1110nnnn 0lllllll Pitch Wheel Change. + 0mmmmmmm This message is sent to indicate a change in the + pitch wheel. The pitch wheel is measured by a + fourteen bit value. Center (no pitch change) is + 2000H. Sensitivity is a function of the + transmitter. + (llllll) are the least significant 7 bits. + (mmmmmm) are the most significant 7 bits. +------------------------------------------------------------------------- +Channel Mode Messages (See also Control Change, above) +------------------------------------------------------------------------- +1011nnnn 0ccccccc Channel Mode Messages. + 0vvvvvvv This the same code as the Control + Change (above), but implements Mode + control by using reserved controller + numbers. The numbers are: + + Local Control. + When Local Control is Off, all devices + on a given channel will respond only to + data received over MIDI. Played data, etc. + will be ignored. Local Control On + restores the functions of the normal + controllers. + c = 122, v = 0: Local Control Off + c = 122, v = 127: Local Control On + + All Notes Off. + When an All Notes Off is received, + all oscillators will turn off. + c = 123, v = 0: All Notes Off + + (See text for description of actual + mode commands.) + c = 124, v = 0: Omni Mode Off + c = 125, v = 0: Omni Mode On + c = 126, v = M: Mono Mode On (Poly Off) + where M is the number of channels + (Omni Off) or 0 (Omni On) + c = 127, v = 0: Poly Mode On (Mono Off) + (Note: These four messages also cause + All Notes Off) +.pa +------------------------------------------------------------------------- +System Common Messages +------------------------------------------------------------------------- +11110000 0iiiiiii System Exclusive. + 0ddddddd This message makes up for all that MIDI + .. doesn't support. (iiiiiii) is a seven + .. bit Manufacturer's I.D. code. If the + 0ddddddd synthesizer recognizes the I.D. code as + 11110111 its own, it will listen to the rest of + the message (ddddddd). Otherwise, the + message will be ignored. System Exclusive + is used to send bulk dumps such as patch + parameters and other non-spec data. + (Note: Real-Time messages ONLY may be + interleaved with a System Exclusive.) + +11110001 Undefined. + +11110010 0lllllll Song Position Pointer. + 0mmmmmmm This is an internal 14 bit register that + holds the number of MIDI beats (1 beat= + six MIDI clocks) since the start of + the song. l is the LSB, m the MSB. + +11110011 0sssssss Song Select. + The Song Select specifies which sequence + or song is to be played. + +11110100 Undefined. + +11110101 Undefined. + +11110110 Tune Request. + Upon receiving a Tune Request, all analog + sythesizers should tune their oscillators. + +11110111 End of Exclusive. + Used to terminate a System Exclusive + dump (see above). +.pa +------------------------------------------------------------------------- +System Real-Time Messages +------------------------------------------------------------------------- +11111000 Timing Clock. + Sent 24 times per quarter note when + synchronization is required (see text). + +11111001 Undefined. + +11111010 Start. + Start the current sequence playing. + (This message will be followed with + Timing Clocks). + +11111011 Continue. + Continue at the point the sequence was + Stopped. + +11111100 Stop. + Stop the current sequence. + +11111101 Undefined. + +11111110 Active Sensing. + Use of this message is optional. When + initially sent, the receiver will expect + to receive another Active Sensing message + each 300ms (max), or it will be assume + that the connection has been terminated. + At termination, the receiver will turn off + all voices and return to normal (non- + active sensing) operation. + +11111111 Reset. + Reset all receivers in the system to + power-up status. This should be used + sparingly, preferably under manual + control. In particular, it should not + be sent on power-up. + + -- Greg, lee@uhccux.uhcc.hawaii.edu diff --git a/midiseq/MIDIDATA/MIDISTAT.TXT b/midiseq/MIDIDATA/MIDISTAT.TXT new file mode 100644 index 0000000..4cff01c --- /dev/null +++ b/midiseq/MIDIDATA/MIDISTAT.TXT @@ -0,0 +1,140 @@ + TABLE 1: Summary of MIDI Status & Data Bytes + (adapted from "MIDI by the Numbers" by D. Valenti, Elec Musician mag 2/88) + + STATUS BYTE | DATA BYTES +------------------------------------------------------------------------------ + 1st Byte Value | Function | 2nd | 3rd + - - - - - - - - -| | Byte | Byte + Binary |Hex| Dec| | | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 10000000= 80= 128| Chan 1 Note off | Note Number | Note Velocity + 10000001= 81= 129| Chan 2 " | (0-127) | (0-127) + 10000010= 82= 130| Chan 3 " | see | " + 10000011= 83= 131| Chan 4 " | Table | " + 10000100= 84= 132| Chan 5 " | 2 | " + 10000101= 85= 133| Chan 6 " | " | " + 10000110= 86= 134| Chan 7 " | " | " + 10000111= 87= 135| Chan 8 " | " | " + 10001000= 88= 136| Chan 9 " | " | " + 10001001= 89= 137| Chan 10 " | " | " + 10001010= 8A= 138| Chan 11 " | " | " + 10001011= 8B= 139| Chan 12 " | " | " + 10001100= 8C= 140| Chan 13 " | " | " + 10001101= 8D= 141| Chan 14 " | " | " + 10001110= 8E= 142| Chan 15 " | " | " + 10001111= 8F= 143| Chan 16 " | " | " + 10010000= 90= 144| Chan 1 Note on | " | " + 10010001= 91= 145| Chan 2 " | " | " + 10010010= 92= 146| Chan 3 " | " | " + 10010011= 93= 147| Chan 4 " | " | " + 10010100= 94= 148| Chan 5 " | " | " + 10010101= 95= 149| Chan 6 " | " | " + 10010110= 96= 150| Chan 7 " | " | " + 10010111= 97= 151| Chan 8 " | " | " + 10011000= 98= 152| Chan 9 " | " | " + 10011001= 99= 153| Chan 10 " | " | " + 10011010= 9A= 154| Chan 11 " | " | " + 10011011= 9B= 155| Chan 12 " | " | " + 10011100= 9C= 156| Chan 13 " | " | " + 10011101= 9D= 157| Chan 14 " | " | " + 10011110= 9E= 158| Chan 15 " | " | " + 10011111= 9F= 159| Chan 16 " | " | " + 10100000= A0= 160| Chan 1 Polyphonic | " | Aftertouch + 10100001= A1= 161| Chan 2 aftertouch | " | pressure + 10100010= A2= 162| Chan 3 " | " | (0-127) + 10100011= A3= 163| Chan 4 " | " | " + 10100100= A4= 164| Chan 5 " | " | " + 10100101= A5= 165| Chan 6 " | " | " + 10100110= A6= 166| Chan 7 " | " | " + 10100111= A7= 167| Chan 8 " | " | " + 10101000= A8= 168| Chan 9 " | " | " + 10101001= A9= 169| Chan 10 " | " | " + 10101010= AA= 170| Chan 11 " | " | " + 10101011= AB= 171| Chan 12 " | " | " + 10101100= AC= 172| Chan 13 " | " | " + 10101101= AD= 173| Chan 14 " | " | " + 10101110= AE= 174| Chan 15 " | " | " + 10101111= AF= 175| Chan 16 " | " | " + 10110000= B0= 176| Chan 1 Control/ | See | See + 10110001= B1= 177| Chan 2 Mode change | Table | Table + 10110010= B2= 178| Chan 3 " | three | three + 10110011= B3= 179| Chan 4 " | " | " + 10110100= B4= 180| Chan 5 " | " | " + 10110101= B5= 181| Chan 6 " | " | " + 10110110= B6= 182| Chan 7 " | " | " + 10110111= B7= 183| Chan 8 " | " | " + 10111000= B8= 184| Chan 9 " | " | " + 10111001= B9= 185| Chan 10 " | " | " + 10111010= BA= 186| Chan 11 " | " | " + 10111011= BB= 187| Chan 12 " | " | " + 10111100= BC= 188| Chan 13 " | " | " + 10111101= BD= 189| Chan 14 " | " | " + 10111110= BE= 190| Chan 15 " | " | " + 10111111= BF= 191| Chan 16 " | " | " + 11000000= C0= 192| Chan 1 Program | Program # | NONE + 11000001= C1= 193| Chan 2 change | (0-127) | " + 11000010= C2= 194| Chan 3 " | " | " + 11000011= C3= 195| Chan 4 " | " | " + 11000100= C4= 196| Chan 5 " | " | " + 11000101= C5= 197| Chan 6 " | " | " + 11000110= C6= 198| Chan 7 " | " | " + 11000111= C7= 199| Chan 8 " | " | " + 11001000= C8= 200| Chan 9 " | " | " + 11001001= C9= 201| Chan 10 " | " | " + 11001010= CA= 202| Chan 11 " | " | " + 11001011= CB= 203| Chan 12 " | " | " + 11001100= CC= 204| Chan 13 " | " | " + 11001101= CD= 205| Chan 14 " | " | " + 11001110= CE= 206| Chan 15 " | " | " + 11001111= CF= 207| Chan 16 " | " | " + 11010000= D0= 208| Chan 1 Channel | Aftertouch | " + 11010001= D1= 209| Chan 2 aftertouch | pressure | " + 11010010= D2= 210| Chan 3 " | (0-127) | " + 11010011= D3= 211| Chan 4 " | " | " + 11010100= D4= 212| Chan 5 " | " | " + 11010101= D5= 213| Chan 6 " | " | " + 11010110= D6= 214| Chan 7 " | " | " + 11010111= D7= 215| Chan 8 " | " | " + 11011000= D8= 216| Chan 9 " | " | " + 11011001= D9= 217| Chan 10 " | " | " + 11011010= DA= 218| Chan 11 " | " | " + 11011011= DB= 219| Chan 12 " | " | " + 11011100= DC= 220| Chan 13 " | " | " + 11011101= DD= 221| Chan 14 " | " | " + 11011110= DE= 222| Chan 15 " | " | " + 11011111= DF= 223| Chan 16 " | " | " + 11100000= E0= 224| Chan 1 Pitch | Pitch | Pitch + 11100001= E1= 225| Chan 2 wheel | wheel | wheel + 11100010= E2= 226| Chan 3 range | LSB | MSB + 11100011= E3= 227| Chan 4 " | (0-127) | (0-127) + 11100100= E4= 228| Chan 5 " | " | " + 11100101= E5= 229| Chan 6 " | " | " + 11100110= E6= 230| Chan 7 " | " | " + 11100111= E7= 231| Chan 8 " | " | " + 11101000= E8= 232| Chan 9 " | " | " + 11101001= E9= 233| Chan 10 " | " | " + 11101010= EA= 234| Chan 11 " | " | " + 11101011= EB= 235| Chan 12 " | " | " + 11101100= EC= 236| Chan 13 " | " | " + 11101101= ED= 237| Chan 14 " | " | " + 11101110= EE= 238| Chan 15 " | " | " + 11101111= EF= 239| Chan 16 " | " | " + 11110000= F0= 240| System Exclusive | ** | ** + 11110001= F1= 241| System Common - undefined | ? | ? + 11110010= F2= 242| Sys Com Song Position Pntr | LSB | MSB + 11110011= F3= 243| Sys Com Song Select(Song #)| (0-127) | NONE + 11110100= F4= 244| System Common - undefined | ? | ? + 11110101= F5= 245| System Common - undefined | ? | ? + 11110110= F6= 246| Sys Com tune request | NONE | NONE + 11110111= F7= 247| Sys Com-end of SysEx (EOX) | " | " + 11111000= F8= 248| Sys real time timing clock | " | " + 11111001= F9= 249| Sys real time undefined | " | " + 11111010= FA= 250| Sys real time start | " | " + 11111011= FB= 251| Sys real time continue | " | " + 11111100= FC= 252| Sys real time stop | " | " + 11111101= FD= 253| Sys real time undefined | " | " + 11111110= FE= 254| Sys real time active sensing| " | " + 11111111= FF= 255| Sys real time sys reset | " | " + + ** Note: System Exclusive (data dump) 2nd byte= Vendor ID followed by more + data bytes and ending with EOX. diff --git a/midiseq/MIDIDATA/MIDITIME b/midiseq/MIDIDATA/MIDITIME new file mode 100644 index 0000000..d3c6a00 --- /dev/null +++ b/midiseq/MIDIDATA/MIDITIME @@ -0,0 +1,95 @@ + +From dirk@diaspar.fb10.TU-Berlin.DEMon Feb 27 20:22:36 1995 +Date: Mon, 27 Feb 95 16:43:59 +0100 +From: Dirk Schwarzhans +Reply to: dirk@kalium.physik.TU-Berlin.DE +To: sean@cnct.com +Subject: Re: MIDI TIME DATA + +Hello, + +in alt.binaries.sounds.midi you asked for info about MIDI timing. +I had the same problems too some time ago. + +Here is the solution: +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + +deltaRealtime = tempo * deltaTime / division + +gives you the difference between two midi events (which are +separated by the deltaTime value specified in the file) in micro +seconds. "division" is from the midi file header. + +But you CANNOT use this formula because of accumulating errors, +even if you use double precision floating points calculations. + +The way to prevent this is: +--------------------------- + +1) You calculate a quantity called "midiTime" for every event by +adding the deltaTimes of the previous events. + +2) Then you use this times for merging the events from different tracks. + +3) Then you calculate the realTime of every event like this: + +-initialize the following variables: +long midiOffset = 0; +long realOffset = 0; +long division; /* = from file header */ +long tempo = 5000000; /* default value from midi file spec. */ + +-for every event do: +realTime = realOffset + (long)((double)(midiTime - midiOffset) * + (double)tempo / (double)division); + +-for every tempo change do: +tempo = newTempo; /* newTempo specified in SET TEMPO command */ +realOffset = realtime; /* calculated above */ +midiOffset = midiTime; +-------------------------------- + +Now rounding errors only accumulate on tempo changes which don't +occure as often as midi events. + +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + +For the case of negative division in the file header someone sent +me the following text: + +If "division" is negative then its high byte is minus the number +of frames per second, and its low byte is the number of ticks per +frame. So if you multiply the two bytes together and negate the +result, you have the number of ticks per second (1000 is a typical +value - gives millisecond timing). Then, divide each Delta-Time by +this number to get the length in seconds between each two events. +This will give non-integer results!! so be sure to use real number +division. If ticks per second=1000 then the conversion of Delta-Times +is unnecessary - they're already in units of milliseconds, which +is useful enough. + +The purpose of a tempo change in this environment is not to alter +the rate at which the music plays, but to change the rate at which +it is represented as quarter notes, eighth notes, etc. You can also +use it to derive a value for the number of ticks per quarter note += (Tempo change value) * (ticks per second) / 1000000, because +the tempo change value is in microseconds per quarter note. + +There is another factor that (rarely) affects timing: at the end +of a time signature meta-event (FF 58 04 nn dd cc bb) the bb is +the number of notated 32nd notes in every MIDI quarter note. I have +never seen this be anything other than 8, but if it's different, +a program which deals with measures, beats, or notation has to +convert the MIDI timing info to useful notation info. The way to +do that would be to get a new value for the number of ticks per +quarter note: + new value = 8 * (old value) / (bb) +This new value should then be used to recalculate the relevant +timing data: either the number of microseconds per tick if "division" +is positive or the number of ticks per second if "division" is +negative. + + +Hope this helps, + +Dirk Schwarzhans diff --git a/midiseq/MIDIDATA/MIDITIME.TXT b/midiseq/MIDIDATA/MIDITIME.TXT new file mode 100644 index 0000000..dae471d --- /dev/null +++ b/midiseq/MIDIDATA/MIDITIME.TXT @@ -0,0 +1,989 @@ +MIDI Time Code and Cueing + +Detailed Specification + +(Supplement to MIDI 1.0) + +12 February 1987 + +Justification For MIDI Time Code and Cueing + + + + The merit of implementing the MIDI Time Code proposal within the current +MIDI specification is as follows: + + SMPTE has become the de facto timing reference standard in the +professional audio world and in almost the entire video world. SMPTE is also +seeing more and more use in the semi-professional audio area. We hope to +combine this universal timing reference, SMPTE, with the de facto standard +for controlling musical equipment, MIDI. + + Encoding SMPTE over MIDI allows a person to work with one timing +reference throughout the entire system. For example, studio engineers are +more familiar with the idea of telling a multitrack recorder to punch in and +out of record mode at specific SMPTE times, as opposed to a specific beat in a +specific bar. To force a musician or studio engineer to convert back and +forth between a SMPTE time and a specific bar number is tedious and should not +be necessary (one would have to take into account tempo and tempo changes, +etc.). + + Also, some operations are referenced only as SMPTE times, as opposed to +beats in a bar. For example, creating audio and sound effects for video +requires that certain sounds and sequences be played at specific SMPTE times. +There is no other easy way to do this with Song Position Pointers, etc., and +even if there was, it would be an unnatural way for a video or recording +engineer to work. + + MIDI Time Code is an absolute timing reference, whereas MIDI Clock and +Song Position Pointer are relative timing references. In virtually all audio +for film/video work, SMPTE is already being used as the main time base, and +any musical passages which need to be recorded are usually done by getting a +MIDI-based sequencer to start at a pre-determined SMPTE time code. In most +cases, though, it is SMPTE which is the Master timing reference being used. +In order for MIDI-based devices to operate on an absolute time code which is +independent of tempo, MIDI Time Code must be used. Existing devices merely +translate SMPTE into MIDI Clocks and Song Position Pointers based upon a given +tempo. This is not absolute time, but relative time, and all of the SMPTE cue +points will change if the tempo changes. The majority of sound effects work +for film and video does not involve musical passages with tempos, rather it +involves individual sound effect "events" which must occur at specific, +absolute times, not relative to any "tempo". + + + +MIDI Time Code System Components + + + +SMPTE to MTC Converter + + This box would either convert longitudinal (audio-type) or vertical +(video-type) SMPTE time code from a master timing device into MTC. The +function could be integrated into video tape recorders (VTRs) or +syncronization units that control audio tape recorders (ATRs). Alternately, a +stand-alone box would do the conversion, or simply generate MTC directly. +Note that conversion from MTC to SMPTE time code is not envisioned, as it is +of little practical value. + + + +Cue List Manager + + This would be a device or computer program that would maintain a cue list +of desired events, and send the list to the slaves. For performance, the +manager might pass the Time Code from the SMPTE-MTC converter through to the +slaves, or, in a stand-alone system it might generate Time Code itself. This +"central controller" would presumably also contain all library functions for +downloading sound programs, samples, sequences, patterns, and so on, to the +slaves. A Cue List Manager would pre-load intelligent MTC peripherals (see +below) with this data. + + + +MTC Sequencer + + To control existing equipment or any device which does not recognize MTC +in an MTC system, this device would be needed. It would receive the cue list +from the manager, and convert the cues into normal MIDI commands. At the +specified SMPTE times, the sequencer would then send the MIDI commands to the +specific devices. For example, for existing MIDI equipment it might provide +MIDI messages such as Note On, Note Off, Song Select, Start, Stop, Program +Changes, etc. Non-MIDI equipment (such as CD players, mixing consoles, +lighting, sound effects cartridge units and ATRs) may also be controlled if +such a device had relay controls. + + + +Intelligent MTC Peripheral + + In this category belong devices capable of receiving an MTC Cue List from +the manager, and triggering themselves appropriately when the correct Time +Code (SMPTE or MIDI) has been received. Above this minimum, the device might +be able to change its programming in response to the Cue List, or prepare +itself for ensuing events. + + For example, an intelligent MTC-equipped analog multitrack tape machine +might read in a list of punch in/punch out cues from the Cue List Manager, and +then alter then to internally compensate for its bias current rise and fall +times. A sampling-based sound effects device might preload samples from its +own disk drive into a RAM buffer, in anticipation of needing them for cues +later on in the cue list. + + It should be mentioned that while these functions are separately +described, actual devices may incorporate a mixture of these functions, suited +to specific applications in their market. + + +A MIDI Time Code System + + The MIDI Time Code format contains two parts: Time Code and Set Up. Time +Code is relatively straightforward: hours, minutes, seconds and frame numbers +(approximately 1/30 of a second) are encoded and distributed throughout the +MIDI system so that all the units know exactly what time it is. + + Set Up, however, is where MTC gains its power. It is a format for +informing MIDI devices of events to be performed at specific times. +Ultimately, this aspect of MTC will lead to the creation of an entirely new +class of production equipment. Before getting into the nuts and bolts of the +spec itself, let's talk about some of the uses and features of forthcoming +devices that have been envisioned. + + Set Up begins with the concept of a cue list. In video editing, for +example, it is customary to transfer the video master source tapes, which may +be on expensive, two-inch recorders, to less-expensive recorders. The editing +team then works over this copy, making a list of all the segments that they +want to piece together as they are defined by their SMPTE times. + + For example, the first scene starts at time A and ends at time B, the +next scene starts at time C and ends at time D. A third scene may even lie +between the first two. When done, they feed this cue list time information +into the editing system of the master recorder(s) or just give the cue list to +an editor who does the work manually. The editing system or editor then +locates the desired segments and assembles them in the proper sequence. + + + + Now suppose that instead of one or two video recorders, we have twenty +devices that will play a part in our audio/video or film production: special +effects generators for fades and superimpositions, additional decks with +background scenery, live cameras, MIDI sequencers, drum machines, +synthesizers, samplers, DDLs, soundtrack decks, CDs, effects devices, and so +on. As it stands now, each of these devices must be handled more or less +separately, with painstaking and time-consuming assembly editing or multitrack +overdubs. And when a change in the program occurs (which always happens), +anywhere from just a few items to the whole system may need to be reprogrammed +by hand. + + + + This is where MIDI Time Code comes in. It can potentially control all of +these individual production elements so that they function together from a +single cue list. The master controller which would handle this function is +described as a Cue List Manager. On such a console, you would list what you +want each device to do, and when to do it. The manager would then send the cue +list to the various machines via the MTC Set Up protocol. Each unit would then +react as programmed when the designated MIDI Time Code (or conventional SMPTE +Time Code) appears. Changes? No problem. Simply edit the cue list using simple +word-processing functions, then run the tape again. + + + MTC thus integrates into a manageable system all of the diverse tools at +our disposal. It would drastically reduce the time, money and frustration +needed to produce a film or video. + + + Having covered the basic aspects of a MIDI Time Code system, as well as +examples of how an overall system might function, we will now take a look at +the actual MIDI specification itself. + + +MIDI Time Code + + + + For device synchronization, MIDI Time Code uses two basic types of +messages, described as Quarter Frame and Full. There is also a third, optional +message for encoding SMPTE user bits. + + +Quarter Frame Messages + + + + Quarter Frame messages are used only while the system is running. They +are rather like the PPQN or MIDI clocks to which we are accustomed. But there +are several important ways in which Quarter Frame messages differ from the +other systems. + + + As their name implies, they have fine resolution. If we assume 30 frames +per second, there will be 120 Quarter Frame messages per second. This +corresponds to a maximum latency of 8.3 milliseconds (at 30 frames per +second), with accuracy greater than this possible within the specific device +(which may interpolate inbetween quarter frames to "bit" resolution). Quarter +Frame messages serve a dual purpose: besides providing the basic timing pulse +for the system, each message contains a unique nibble (four bits) defining a +digit of a specific field of the current SMPTE time. + + + + Quarter frames messages should be thought of as groups of eight messages. +One of these groups encodes the SMPTE time in hours, minutes, seconds, and +frames. Since it takes eight quarter frames for a complete time code message, +the complete SMPTE time is updated every two frames. Each quarter frame +message contains two bytes. The first byte is F1, the Quarter Frame System +Common byte. The second byte contains a nibble that represents the message +number (0 through 7), and a nibble for one of the digits of a time field +(hours, minutes, seconds or frames). + + + + + +Quarter Frame Messages (2 bytes): + + + + F1 + + + + F1 = Currently unused and undefined System Common status byte + + = 0nnn dddd + + + + dddd = 4 bits of binary data for this Message Type + + nnn = Message Type: + + 0 = Frame count LS nibble + + 1 = Frame count MS nibble + + 2 = Seconds count LS nibble + + 3 = Seconds count MS nibble + + 4 = Minutes count LS nibble + + 5 = Minutes count MS nibble + + 6 = Hours count LS nibble + + 7 = Hours count MS nibble and SMPTE Type + + + + After both the MS nibble and the LS nibble of the above counts are +assembled, their bit fields are assigned as follows: + + + +FRAME COUNT: xxx yyyyy + + + + xxx = undefined and reserved for future use. Transmitter + + must set these bits to 0 and receiver should ignore! + + yyyyy = Frame number (0-29) + + + +SECONDS COUNT: xx yyyyyy + + + + xx = undefined and reserved for future use. Transmitter + + must set these bits to 0 and receiver should ignore! + + yyyyyy = Seconds Count (0-59) + + + +MINUTES COUNT: xx yyyyyy + + + + xx = undefined and reserved for future use. Transmitter + + must set these bits to 0 and receiver should ignore! + + yyyyyy = Minutes Count (0-59) + + + +HOURS COUNT: x yy zzzzz + + + + x = undefined and reserved for future use. Transmitter + + must set this bit to 0 and receiver should ignore! + + + + yy = Time Code Type: + + 0 = 24 Frames/Second + + 1 = 25 Frames/Second + + 2 = 30 Frames/Second (Drop-Frame) + + 3 = 30 Frames/Second (Non-Drop) + + + + zzzzz = Hours Count (0-23) + + +Quarter Frame Message Implementation + + + + When time code is running in the forward direction, the device producing +the MIDI Time Code will send Quarter Frame messages at quarter frame intervals +in the following order: + + + + F1 0X + + F1 1X + + F1 2X + + F1 3X + + F1 4X + + F1 5X + + F1 6X + + F1 7X + + + +after which the sequence repeats itself, at a rate of one complete 8-message +sequence every 2 frames (8 quarter frames). When time code is running in +reverse, the quarter frame messages are sent in reverse order, starting with +F1 7X and ending with F1 0X. Again, at least 8 quarter frame messages must be +sent. The arrival of the F1 0X and F1 4X messages always denote frame +boundaries. + + + + Since 8 quarter frame messages are required to definitely establish the +actual SMPTE time, timing lock cannot be achieved until the reader has read a +full sequence of 8 messages, from first message to last. This will take from +2 to 4 frames to do, depending on when the reader comes on line. + + + During fast forward, rewind or shuttle modes, the time code generator +should stop sending quarter frame messages, and just send a Full Message once +the final destination has been reached. The generator can then pause for any +devices to shuttle to that point, and resume by sending quarter frame messages +when play mode is resumed. Time is considered to be "running" upon receipt of +the first quarter frame message after a Full Message. + + + Do not send quarter frame messages continuously in a shuttle mode at high +speed, since this unnecessarily clogs the MIDI data lines. If you must +periodically update a device's time code during a long shuttle, then send a +Full Message every so often. + + + The quarter frame message F1 0X (Frame Count LS nibble) must be sent on a +frame boundary. The frame number indicated by the frame count is the number +of the frame which starts on that boundary. This follows the same convention +as normal SMPTE longitudinal time code, where bit 00 of the 80-bit message +arrives at the precise time that the frame it represents is actually starting. +The SMPTE time will be incremented by 2 frames for each 8-message sequence, +since an 8-message sequence will take 2 frames to send. + + + + Another way to look at it is: When the last quarter frame message (F1 +7X) arrives and the time can be fully assembled, the information is now +actually 2 frames old. A receiver of this time must keep an internal offset +of +2 frames for displaying. This may seem unusual, but it is the way normal +SMPTE is received and also makes backing up (running time code backwards) less +confusing - when receiving the 8 quarter frame messages backwards, the F1 0X +message still falls on the boundary of the frame it represents. + + + + + + Each quarter frame message number (0->7) indicates which of the 8 quarter +frames of the 2-frame sequence we are on. For example, message 0 (F1 0X) +indicates quarter frame 0 of frame #1 in the sequence, and message 4 (F1 4X) +indicates quarter frame 1 of frame #2 in the sequence. If a reader receives +these message numbers in descending sequence, then it knows that time code is +being sent in the reverse direction. Also, a reader can come on line at any +time and know exactly where it is in relation to the 2-frame sequence, down to +a quarter frame accuracy. + + + + It is the responsibility of the time code reader to insure that MTC is +being properly interpreted. This requires waiting a sufficient amount of time +in order to achieve time code lock, and maintaining that lock until +synchronization is dropped. Although each passing quarter frame message could +be interpreted as a relative quarter frame count, the time code reader should +always verify the actual complete time code after every 8-message sequence (2 +frames) in order to guarantee a proper lock. + + + + For example, let's assume the time is 01:37:52:16 (30 frames per second, +non-drop). Since the time is sent from least to most significant digit, the +first two Quarter Frame messages will contain the data 16 (frames), the second +two will contain the data 52 (seconds), the third two will represent 37 +(minutes), and the final two encode the 1 (hours and SMPTE Type). The Quarter +Frame Messages description defines how the binary data for each time field is +spread across two nibbles. This scheme (as opposed to simple BCD) leaves some +extra bits for encoding the SMPTE type (and for future use). + + + + Now, let's convert our example time of 01:37:52:16 into Quarter Frame +format, putting in the correct hexadecimal conversions: + + + + F1 00 + + F1 11 10H = 16 decimal + + + + F1 24 + + F1 33 34H = 52 decimal + + + + F1 45 + + F1 52 25H = 37 decimal + + + + F1 61 + + F1 76 01H = 01 decimal (SMPTE Type is 30 frames/non-drop) + + + + (note: the value transmitted is "6" because the SMPTE Type (11 binary) is +encoded in bits 5 and 6) + + + + For SMPTE Types of 24, 30 drop frame, and 30 non-drop frame, the frame +number will always be even. For SMPTE Type of 25, the frame number may be +even or odd, depending on which frame number the 8-message sequence had +started. In this case, you can see where the MIDI Time Code frame number +would alternate between even and odd every second. + + + + MIDI Time Code will take a very small percentage of the MIDI bandwidth. +The fastest SMPTE time rate is 30 frames per second. The specification is to +send 4 messages per frame - in other words, a 2-byte message (640 +microseconds) every 8.333 milliseconds. This takes 7.68 % of the MIDI +bandwidth - a reasonably small amount. Also, in the typical MIDI Time Code +systems we have imagined, it would be rare that normal MIDI and MIDI Time Code +would share the same MIDI bus at the same time. + + +Full Message + + + + Quarter Frame messages handle the basic running work of the system. But +they are not suitable for use when equipment needs to be fast-forwarded or +rewound, located or cued to a specific time, as sending them continuously at +accelerated speeds would unnecessarily clog up or outrun the MIDI data lines. +For these cases, Full Messages are used, which encode the complete time into a +single message. After sending a Full Message, the time code generator can +pause for any mechanical devices to shuttle (or "autolocate") to that point, +and then resume running by sending quarter frame messages. + + + +Full Message - (10 bytes) + + + + F0 7F 01 hr mn sc fr F7 + + + + F0 7F = Real Time Universal System Exclusive Header + + = 7F (message intended for entire system) + + 01 = , 'MIDI Time Code' + + = 01, Full Time Code Message + + hr = hours and type: 0 yy zzzzz + + yy = type: + + 00 = 24 Frames/Second + + 01 = 25 Frames/Second + + 10 = 30 Frames/Second (drop frame) + + 11 = 30 Frames/Second (non-drop frame) + + zzzzz = Hours (00->23) + + mn = Minutes (00->59) + + sc = Seconds (00->59) + + fr = Frames (00->29) + + F7 = EOX + + + + + + Time is considered to be "running" upon receipt of the first Quarter +Frame message after a Full Message. + + +User Bits + + + + "User Bits" are 32 bits provided by SMPTE for special functions which +vary with the application, and which can be programmed only from equipment +especially designed for this purpose. Up to four characters or eight digits +can be written. Examples of use are adding a date code or reel number to the +tape. The User Bits tend not to change throughout a run of time code. + + + +User Bits Message - (15 bytes) + + + + F0 7F 01 u1 u2 u3 u4 u5 u6 u7 u8 u9 F7 + + + + F0 7F = Real Time Universal System Exclusive Header + + = 7F (message intended for entire system) + + 01 = , MIDI TIme Code + + = 02, User Bits Message + + u1 = 0000aaaa + + u2 = 0000bbbb + + u3 = 0000cccc + + u4 = 0000dddd + + u5 = 0000eeee + + u6 = 0000ffff + + u7 = 0000gggg + + u8 = 0000hhhh + + u9 = 000000ii + + F7 = EOX + + + + These nibble fields decode in an 8-bit format: aaaabbbb ccccdddd +eeeeffff gggghhhh ii. It forms 4 8-bit characters, and a 2 bit Format Code. +u1 through u8 correspond to SMPTE Binary Groups 1 through 8. u9 are the two +Binary Group Flag Bits, as defined by SMPTE. + + + + This message can be sent whenever the User Bits values must be +transferred to any devices down the line. Note that the User Bits Message may +be sent by the MIDI Time Code Converter at any time. It is not sensitive to +any mode. + + + + + +MIDI Cueing + + + + MIDI Cueing uses Set-Up Messages to address individual units in a system. +(A "unit" can be be a multitrack tape deck, a VTR, a special effects +generator, MIDI sequencer, etc.) + + + + Of 128 possible event types, 19 are currently defined. + + + + + +Set-Up Messages (13 bytes plus any additional information): + + + + F0 7E 04 hr mn sc fr ff sl sm F7 + + + + F0 7E = Non-Real Time Universal System Exclusive Header + + = Channel number + 04 = , MIDI Time Code + + = Set-Up Type + 00 = Special + 01 = Punch In points + 02 = Punch Out points + 03 = Delete Punch In point + 04 = Delete Punch Out point + 05 = Event Start points + 06 = Event Stop points + 07 = Event Start points with additional info. + 08 = Event Stop points with additional info. + 09 = Delete Event Start point + 0A = Delete Event Stop point + 0B = Cue points + 0C = Cue points with additional info + 0D = Delete Cue point + 0E = Event Name in additional info + + hr = hours and type: 0 yy zzzzz + + yy = type: + 00 = 24 Frames/Second + 01 = 25 Frames/Second + 10 = 30 Frames/Second drop frame + 11 = 30 Frames/Second non-drop frame + zzzzz = Hours (00-23) + + mn = Minutes (00-59) + + sc = Seconds (00-59) + + fr = Frames (00-29) + + ff = Fractional Frames (00-99) + + sl, sm = Event Number (LSB first) + + + + F7 = EOX + + +Description of Set-Up Types: + + + + + + 00 Special refers to the set-up information that affects a unit + globally (as opposed to individual tracks, sounds, programs, + sequences, etc.). In this case, the Special Type takes the + place of the Event Number. Five are defined. Note that types + 01 00 through 04 00 ignore the event time field. + + + + 00 00 Time Code Offset refers to a relative Time Code offset for +each unit. For example, a piece of video and a piece of music that are +supposed to go together may be created at different times, and more than +likely have different absolute time code positions - therefore, one must be +offset from the other so that they will match up. Just like there is one +master time code for an entire system, each unit only +needs one offset value per unit. + + + + 01 00 Enable Event List means for a unit to enable execution of +events in its list if the appropriate MTC or SMPTE time occurs. + + + + 02 00 Disable Event List means for a unit to disable execution +of its event list but not to erase it. This facilitates an MTC Event Manager +in muting particular devices in order to concentrate on others in a complex +system where many events occur simultaneously. + + + + 03 00 Clear Event List means for a unit to erase its entire +event list. + + + + 04 00 System Stop refers to a time when the unit may shut down. +This serves as a protection against Event Starts without matching Event Stops, +tape machines running past the end of the reel, and so on. + + + 05 00 Event List Request is sent by a master to an MTC +peripheral. If the device ID (Channel Number) matches that of the peripheral, +the peripheral responds by transmitting its entire cue list as a sequence of +Set Up Messages, starting from the SMPTE time indicated in the Event List +Request message. + + + + 01/02 Punch In and Punch Out refer to the enabling and disabling of +record mode on a unit. The Event Number refers to the track to be recorded. +Multiple punch in/punch out points (and any of the other event types below) +may be specified by sending multiple Set-Up messages with different times. + + + + 03/04 Delete Punch In or Out deletes the matching point (time and +event number) from the Cue List. + + + + 05/06 Event Start and Stop refer to the running or playback of an +event, and imply that a large sequence of events or a continuous event is to +be started or stopped. The event number refers to which event on the targeted +slave is to be played. A single event (ie. playback of a specific sample, a +fader movement on an automated console, etc.) may occur several times +throughout a given list of cues. These events will be represented by the same +event number, with different Start and Stop times. + + + + 07/08 Event Start and Stop with Additional Information refer to an +event (as above) with additional parameters transmitted in the Set Up message +between the Time and EOX. The additional parameters may take the form of an +effects unit's internal parameters, the volume level of a sound effect, etc. +See below for a description of additional information. + + + 09/0A Delete Event Start/Stop means to delete the matching (event +number and time) event (with or without additional information) from the Cue +List. + + + + 0B Cue Point refers to individual event occurences, such as +marking "hit" points for sound effects, reference points for editing, and so +on. Each Cue number may be assigned to a specific reaction, such as a +specific one-shot sound event (as opposed to a continuous event, which is +handled by Start/Stop). A single cue may occur several times throughout a +given list of cues. These events will be represented by the same event +number, with different Start and Stop times. + + + + 0C Cue Point with Additional Information is exactly like Event +Start/Stop with Additional Information, except that the event represents a Cue +Point rather than a Start/Stop Point. + + + + 0D Delete Cue Point means to Delete the matching (event number +and time) Cue Event with or without additional information from the Cue List. + + + + 0E Event Name in Additional Information. This merely assigns a +name to a given event number. It is for human logging purposes. See +Additional Information description. + + + + + +Event Time + + + + This is the SMPTE/MIDI Time Code time at which the given event is +supposed to occur. Actual time is in 1/100th frame resoultion, for those +units capable of handling bits or some other form of sub-frame resolution, and +should otherwise be self-explanatory. + + + +Event Number + + + + This is a fourteen-bit value, enabling 16,384 of each of the above types +to be individually addressed. "sl" is the 7 LS bits, and "sm" is the 7 MS +bits. + + + +Additional Information description + + + + Additional information consists of a nibblized MIDI data stream, LS +nibble first. The exception is Set-Up Type OE, where the additional +information is nibblized ASCII, LS nibble first. An ASCII newline is +accomplished by sending CR and LF in the ASCII. CR alone functions solely as a +carriage return, and LF alone functions solely as a Line-Feed. + + + + For example, a MIDI Note On message such as 91 46 7F would be nibblized +and sent as 01 09 06 04 0F 07. In this way, any device can decode any +message regardless of who it was intended for. Device-specific messages +should be sent as nibblized MIDI System Exclusive messages. + + +Potential Problems + + + + There is a possible problem with MIDI merger boxes improperly handling +the F1 message, since they do not currently know how many bytes are +following. However, in typical MIDI Time Code systems, we do not anticipate +applications where the MIDI Time Code must be merged with other MIDI signals +occuring at the same time. + + + + Please note that there is plenty of room for additional set-up types, +etc., to cover unanticipated situations and configurations. + + + + It is recommended that each MTC peripheral power up with its MIDI +Manufacturer's System Exclusive ID number as its default channel/device ID. +Obviously, it would be preferable to allow the user to change this number from +the device's front panel, so that several peripherals from the same +manufacturer may have unique IDs within the same MTC system. + + + + + +Signal Path Summary + + + + Data sent between the Master Time Code Source (which may be, for example, +a Multitrack Tape Deck with a SMPTE Synchronizer) and the MIDI Time Code +Converter is always SMPTE Time Code. + + + + Data sent from the MIDI Time Code Converter to the Master Control/Cue +Sheet (note that this may be a MTC-equipped tape deck or mixing console as +well as a cue-sheet) is always MIDI Time Code. The specific MIDI Time Code +messages which are used depend on the current operating mode, as explained +below: + + + Play Mode: The Master Time Code Source (tape deck) is in normal PLAY + MODE at normal or vari-speed rates. The MIDI Time Code + Converter is transmitting Quarter Frame ("F1") messages to + the Master Control/Cue Sheet. The frame messages are in + ASCENDING order, starting with "F1 0X" and ending with "F1 + 7X". If the tape machine is capable of play mode in REVERSE, + then the frame messages will be transmitted in REVERSE + sequence, starting with "F1 7X" and ending with "F1 0X". + + + + Cue Mode: The Master Time Code Source is being "rocked", or "cued" by + hand. The tape is still contacting the playback head so + that the listener can cue, or preview the contents of the + tape slowly. The MIDI Time Code Converter is transmitting + FRAME ("F1") messages to the Master Control/Cue Sheet. If + the tape is being played in the FORWARD direction, the frame + messages are sent in ASCENDING order, starting with "F1 0X" + and ending with "F1 7X". If the tape machine is played in + the REVERSE direction, then the frame messages will be + transmitted in REVERSE sequence, starting with "F1 7X" and + ending with "F1 0X". + + + + Because the tape is being moved by hand in Cue Mode, the + tape direction can change quickly and often. The order of + the Frame Message sequence must change along with the tape + direction. + + + + Fast-Forward/Rewind Mode: In this mode, the tape is in a + high-speed wind or rewind, and is not touching the playback + head. No "cueing" of the taped material is going on. Since + this is a "search" mode, synchronization of the Master + Control/Cue Sheet is not as important as in the Play or Cue + Mode. Thus, in this mode, the MIDI Time Code Converter only + needs to send a "Full Message" every so often to the Cue + Sheet. This acts as a rough indicator of the Master's + position. The SMPTE time indicated by the "Full Message" + actually takes effect upon the reception of the next "F1" + quarter frame message (when "Play Mode" has resumed). + + + + Shuttle Mode: This is just another expression for "Fast-Forward/Rewind + Mode". + + + + + + +References and Credits + + + + SMPTE 12M (ANSI V98.12M-1981). + + + + MIDI Time Code specification created by Chris Meyer and Evan Brooks of +Digidesign. Thanks to Stanley Jungleib of Sequential for additional text. +Also many thanks to all of the MMA and JMSC members for their suggestions and +contributions to the spec. + + + +*********** Addition: MIDI bar numbers ******************** + + +F0 7F ni 01 aa aa F7 + + FO 7F Universal real-time sys-ex header + ID of target device (default=7f=all) + ni sub ID #1 = Notation information (03) + 01 sub ID #2 = Bar Marker Message + aa aa bar number; LSB first + [00 40] = not running + [01 40] .. [00 00] = count in + [01 00] .. [7E 3F] = bar number in song + F7 End of sys-ex + +A maximum neg number indicates not running +A maximum positive value indicates running (but no idea about bar number) + + + +F0 7F ni ts ln nn dd cc bb [nn dd ...] F7 + + F0 7F Universal real-time sys-ex header + ID of target machine (see above) + ni SUB ID #1 = Notation info (03) + ts SUB ID #2 = Time signature message + 02=change now; 42=change next bar + ln Number of data bytes following + nn Numerator of time signature + dd Denumiroator (neg. power of 2) + cc Number of notated 32 notes in a MIDI quarter note + [nn cc..] Additional pairs of num/denom (to define a + compound time signature within the same bar) + F7 End of sys-ex + diff --git a/midiseq/MIDIDATA/SEQUENCE.TXT b/midiseq/MIDIDATA/SEQUENCE.TXT new file mode 100644 index 0000000..fcf16d0 --- /dev/null +++ b/midiseq/MIDIDATA/SEQUENCE.TXT @@ -0,0 +1,381 @@ + +From ircam!corton!loria!loria.crin.fr!eker Fri Aug 21 15:29:34 MET DST 1992 +Article: 5837 of comp.music +Xref: ircam comp.music:5837 rec.music.synth:33200 +Path: ircam!corton!loria!loria.crin.fr!eker +From: eker@loria.crin.fr (Steven Eker) +Newsgroups: comp.music,rec.music.synth +Subject: Sequencer algorithm article (long) +Message-ID: <450@muller.loria.fr> +Date: 19 Aug 92 19:41:39 GMT +Sender: news@news.loria.fr +Followup-To: comp.music +Organization: CRIN (CNRS) Nancy - INRIA Lorraine +Lines: 375 + +I'm posting this article which I wrote for a MIDI mag a while ago in the hope +that MIDI programmers will find it useful (I saw a posting a week ago asking +about how to write a sequencer). + +Appologies in advance to music reseach people: +This article is (very) "dumbed down" because it is written for an audience +who were (for eg) treated to a lengthy explaination of binary and hex notation +in a previous issue. + +A couple of questions: + +(1) How is the "one point" vs "two point" representation of on/off pairs +handled in top pro/reseach music software? Do you use binary heaps or something +more advanced (eg f-heaps)? + +(2) I've cross posted to comp.music & rec.music.synth (followups to +comp.music) but considering the recent discussion, which group is most +appropriate for MIDI programming articles? I know this is MIDI +and hence an anathema to some (most?) music research people but +rec.music.synth strikes me as user/musician orientated rather than programmer +orinetated. + +Steven + + +MIDI I/O ALGORITHMS +=================== + +by Steven Eker (eker@loria.fr) + + +To a musician, a note is an single object possessing (among other +characteristics) a starting point and a length. However to MIDI equipment +a note consists of two distinct events - a Note On message and a Note Off +message. It is easy to see why MIDI had to be implemented this way: suppose +you press a key on a synth, then the synth must immediately transmit a +message telling any connected modules to play a note, however there is +no way the synth could transmit the length of the note as it hasn't +been determined until you release the key. + +This dichotomy causes a real headache for sequencer designers: how best +to store sequences of notes inside the sequencer? The most obvious +answer is the so called "two point" format where the notes are stored +as a sequence of Note On and Off events, in the order they arrive from +the synth. This format is fine when you simply want to store and replay +sequences unmodified and is the format chosen for the MIDI file standard - +presumably to make life easy for simple-minded sequencers. The problems +start when you want to edit sequences. + +Whenever you move insert or delete a +Note On event you have to move insert or delete the corresponding Note Off +event otherwise you will end up with the notes which change length unexpectedly +or even worse hang indefinitely. Of course a decent sequencer should keep +track of the Note On/Off pairs and present the user with notes as single +entities. With the two point format a Note On event and its matching +Note Off event may be separated by arbitrarily many other events and manipulating such +a sequence consistently requires a lot of searching for matching Note On/Off +pairs. + +It is much simpler if sequences of notes are stored in the "one point" +format where each Note On/Off pair is combined as a single item in a sequence. +This format also saves memory. The big drawback of the one point format +is that it has to be converted to and from the two point format for input +and output. This has to be done in real time and any lengthly computations +will reduce the accuracy of the sequencer. + +In his book "MIDI sequencing in C", Jim Conger suggests storing MIDI sequences +in two point format and then converting them to and from one point format +as required for note level editing by the user. This solution has a number of +disadvantages. Firstly block move/copy routines (and any other routines that +have to manipulate sequences in the two point format) are complicated by the +the need to avoid separating Note On and Note Off events. Secondly +there is no way the user can edit events during playback and hear the +changes as they are being made. Thirdly there is no saving in memory +as is possible with the one point format. + +The method I will explain in this article allows you to have the best of +all worlds and even solves two other MIDI I/O headaches at the same time: + +(1) When a sequencer is replaying a large number of tracks simultaneously + the naive approach of sequentially scanning the active tracks to see + which should be next to output an event can cause timing inaccuracies + and (if interrupts are blocked during this process) cause + incomming MIDI messages to be lost. + +(2) When the user clicks on the stop button, all currently playing notes + must be terminated. One naive method is to send an All Notes Off message + on each MIDI channel. This method fails when the receiving + MIDI device does not implement All Notes Off. Another naive method + is to send Note Off messages for every pitch on every channel. Apart + from taking a little over 1.3 seconds (with running status) this + method can also cause problems if the sequencer output is being merged with + another MIDI source. A rather clever idea used by one well known + sequencer vendor is to send a single Active Sensing message + causing the receiving device to reset itself when no further + Active Sensing messages arrive. Unfortunately even this method + causes problems with certain synths. The right thing to do is to transmit Note + Off messages for just those notes that are actually playing, but + this means keeping track of which these are which can be very + time consuming (affecting sequencer accuracy) if done in a naive way. + +Overview of the solution +======================== + +The basic idea is to keep the sequence(s) in one point format and use fast +algorithms to convert to and from two point format in real time for +input and output. + +Actually converting incoming data from two point format into one point format +is fairly straight-forward. We simply keep a 128x16 entry table. There +is one entry for every pitch/channel combination. When a Note On message +arrives it is stored in a record in the appropriate sequence and a pointer to this +record is stored in the corresponding table entry. When a Note Off message +arrives we look at the appropriate entry in the table. If it is null +then we have a stray Note Off event and we discard it. Otherwise we +have a pointer to the record containing the matching Note On event and we +add the extra information, release time and possibly release velocity to this +record and place a null in the table entry. + +There are a couple of subtle points to cope with missing Note Off messages. +If when we come to write a pointer in to the table we find that the entry +is already filled by a non-null pointer then this pointer points to +a record containing a Note On message which (for some reason) has lost its +Note Off message. In this case we can use the current time as the release +time and 64 as the default release velocity to replace the missing information. +At the end of recording we check through the table looking for non-null entries. If +we find any then these are pointers to records containing Note On messages without +Note Off messages. This can easily happen if the user clicks on the stop +button without releasing all the synth keys. Once again we can use the +current time and the release velocity 64 to fill in the missing data. + +The reverse process, converting from one point format into two point format +for playback is not so simple. We need to use a computer science concept called +a priority queue. + +Priority Queues +=============== + +A priority queue is a collection of items ordered by some property - in our +case time. There are several operations that may be performed on a priority +queue - for our purposes the following four are sufficient. + +(1) Inspect the least item +(2) Remove the least item +(3) Insert a new item +(4) Flush the queue - remove all items. + +Now for playback we keep two priority queues: The first contains the +next note/event for each active track. The second contains all of the +pending Note Off events. + +Now when we come to transmit an event we compare the time stamps of +the least items in the two priority queues. There are two possibilities/steps: + +(1) If the time stamp on the least item in the note/event queue was + the lesser (or the Note Off queue was empty) we output this event. We remove + this item from the note/event queue and insert the next item on the same track + into the note/event queue. Also if this item was a note we insert + a corresponding Note Off event into the Note Off queue. + +(2) If the time stamp on the least item in the Note Off queue was the + lesser (or equal) we output this Note Off event and remove this + Note Off event from the Note Off queue. + +Actually this explanation is oversimplified since we also should take into +account the sequencer clock but I'll come to that later. +The reason for giving Note Off events precedence when the least items in +each queue have the same time stamp is simply that MIDI devices have +limited polyphony and this reduces the likelihood of the polyphony +limit being exceeded and notes being arbitrarily cut off. + +When the user presses the stop button then the Note Off queue contains +a Note Off event for every note playing note so we can simply +flush this queue (i.e. remove and transmit all the Note Off events +in any convenient order) to terminate all currently playing notes. + +Binary Heaps +============ + +Up to now I haven't said anything about how the priority queues are +actually implemented. An obvious solution is to store them as arrays. +There is a snag however: Typically the number of tracks in a sequencer +that could be active will be rather large - say 64 and each will have +an event in the note/event queue. Also the number of pending Note Offs +that might have to be stored in the Note Off queue could be equal to the +total polyphony of all the user's synths/modules. +Now when we have to find the least item in a queue, in the worst case we +might have to check all the items. This is not a good solution. + +Suppose we kept the array in sorted order - now getting at the least +element is easy. However this time we might have to move all the items +already in the queue whenever we insert a new item. A sorted linked +list is also a poor implementation of a priority queue because +we might have to check every item already in the queue to find +out where to insert a new item. + +A better way to implement priority queues is a data structure called a +binary heap. This is an array which is "half-sorted" in a very special +way that allows both the removal of the least item and the insertion +of new items to be performed efficiently. Binary heaps are explained +in detail in any decent book on data structures so I will not go into +technical details here. A particularly good account of binary heaps +for the practising programmer is Chapter 12 of "Programming Pearls" +by Jon Bentley. + +If sequences are stored in one point format, reading and writing them to +and from MIDI files (which remember use the two point format) requires +the same sort of conversion as that required for MIDI I/O and similar +algorithms can be used. The situation for one point format to two point +format conversion is somewhat simpler since only one track is written at +a time so only a Note Off heap is required. Also speed is not so critical +however a binary heap is still a good way to organise the conversion. + +To illustrate how easily binary heaps can be programmed Figure 1 +contains the heap manipulation code (written in 'C') from the MIDI file +save module of my own sequencer. + +------------------------------------------------------------------------------- + +typedef struct heap_struct { + long time; + char byte1, byte2, byte3; +} HEAP; + +static HEAP midi_heap[256]; +static int heap_size; + +ins_heap(time, byte1, byte2, byte3) +register long time; +char byte1, byte2, byte3; +{ + register int empty = ++heap_size, new; + + for(;;){ + new = empty / 2; + if(new == 0 || midi_heap[new].time <= time) + break; + midi_heap[empty] = midi_heap[new]; + empty = new; + } + midi_heap[empty].time = time; + midi_heap[empty].byte1 = byte1; + midi_heap[empty].byte2 = byte2; + midi_heap[empty].byte3 = byte3; +} + +del_heap() +{ + register int empty = 1, new; + register long time = midi_heap[heap_size--].time; + + for(;;){ + new = 2 * empty; + if(new > heap_size) + break; + if(new < heap_size && + midi_heap[new + 1].time < midi_heap[new].time) + new++; + if(midi_heap[new].time >= time) + break; + midi_heap[empty] = midi_heap[new]; + empty = new; + } + midi_heap[empty] = midi_heap[heap_size + 1]; +} + + Figure 1: Heap manipulation code +------------------------------------------------------------------------------- + +How the code is used is a follows. Initially the heap is empty and +heap_size = 0. The least element (if the heap is not empty) +in the heap is always in midi_heap[1]. +(Yes - I know 'C' arrays start at 0 but here it is convenient to not use +the first element.) Each event in the sequence being written to +a MIDI file has its time stamp compared +with that of the Note Off event in midi_heap[1] (if the heap is not empty). +If the Note Off event in midi_heap[1] has the lesser time stamp it +is written to the MIDI file and del_heap() is called to remove it from +the heap and the comparison step is repeated with the new occupant of +midi_heap[1] (assuming the heap is still not empty). + +Whenever the current event in the sequence has the lesser time stamp +(or the heap is empty) this event is written to the MIDI file. Also if +this event was a Note On event, ins_heap is called to put the corresponding +Note Off event in the Note Off heap. + +At the end of the sequence the Note Off events remaining in the +heap are written to the MIDI file and removed from the heap in the +order least time stamp first. +In this way the Note Off events are slotted into their correct places in the +MIDI file. + +Subtle points +============= + +There are a number of subtle points and refinements when it comes to +implementing the above ideas. + +First off, during playback we need to compare +time stamps of events against the current sequencer clock to see if they +are due to be output as well as against each other to determine the order. + +One way of organising this is that we first compare the least +element of the Note Off heap against the sequencer clock - if it is +less than or equal we take step (2) above. Otherwise we compare the least +element of the note/event heap against the sequencer clock - if it is +less than or equal we take step (1) above. Otherwise we know that the time +stamps on all the next events in all the active tracks and all the pending +Note Off events are greater than the current music time and nothing is due +to be output until the sequencer clock is next incremented. + +Doing the tests this way around means that Note Off events can actually +be transmitted in before other events with earlier time stamps - however +this can only happen when there is a backlog of events due to be transmitted +and prioritising Note Off messages under these circumstances may be a good +thing. + +The alternative arrangement is to compare the time stamps of the least +elements on the two heaps first and then compare the lesser of these +against the sequencer clock. + +Notice that during playback the Note Off heap starts off as empty and is +filled on the fly. To set up the note/event heap at the beginning of playback +we simply call the heap insert item routine to insert the first event +of each track (or more efficiently a pointer to the first event on each track) +into the note/event heap. + +Also notice that testing the least item in a heap just means testing the item +in the first location of the array used to store the heap. So no real +work has to be done rearranging the heaps unless a MIDI message is actually +transmitted and items have to be inserted and/or deleted from the heaps. + +Now in a professional sequencer the MIDI output code is interrupt driven +and written in assembler both for accuracy and to allow it to run as a +background task. Now even though the heap insert and delete item algorithms +are very fast and can be coded in very tight assembler (the division and +multiplication in the above code are done by shifting) it is +possible for that for very large heaps they may not complete their task +in the 320us between MIDI output bytes (or input bytes). +Thus MIDI bandwidth could be wasted and accuracy impaired (and incomming MIDI +data could be lost). + +A neat (but tricky) way of getting around this problem is allow the +code that rearranges the heaps (running in an interrupt routine) +to itself be interrupted by other interrupt routines to output and input +MIDI bytes. In this way incomming MIDI data will not be lost. Also we +have complete timing accuracy (up to sequencer clock resolution and MIDI +bandwidth) as long as the heap rearrangement can be done in the +640us or 960us between output messages (Okay some messages +can be transmitted in one byte using running status +- but these are not Note On messages so we only have to rearrange one heap). +Needless to say there has be be some kind of synchronisation +between the various layers of interrupts and this is a tricky topic which +I will not go into here. + +A nice refinement is to allow the user to activate and deactivate tracks +while the sequencer is playing. This is done using slightly modified +versions of the heap insert and delete item routines to insert(remove) +the next event of the activated(deactivated) track in the +note/event heap. Another refinement is to allow the user to edit (or block +copy/move) sequences while they are being played. Both of these +refinements require synchronisation between the main program code which is +making the change and the interrupt routines that are modifying the heaps and +accessing the track sequences. + + diff --git a/midiseq/MIDISEQ.DSW b/midiseq/MIDISEQ.DSW new file mode 100644 index 0000000..8e7180d Binary files /dev/null and b/midiseq/MIDISEQ.DSW differ diff --git a/midiseq/MIDISQ16.DEF b/midiseq/MIDISQ16.DEF new file mode 100644 index 0000000..1589539 --- /dev/null +++ b/midiseq/MIDISQ16.DEF @@ -0,0 +1,11 @@ +LIBRARY MIDISQ16 + +DESCRIPTION 'MIDI SEQUENCER ALPHA v1.00' + +EXPORTS + @PLAY$Q6STRING @3 ; play(string) + @STOP$QV @4 ; stop() + @ISINPLAY$QV @5 ; isinplay() + WEP @1 + LIBMAIN @2 + @MMTimer@timerProc$quiuiululul @6 ; MMTimer::timerProc(unsigned int,unsigned int,unsigned long,unsigned long,unsigned long) diff --git a/midiseq/MIDISQ16.DSW b/midiseq/MIDISQ16.DSW new file mode 100644 index 0000000..b8af230 Binary files /dev/null and b/midiseq/MIDISQ16.DSW differ diff --git a/midiseq/MIDISQ16.IDE b/midiseq/MIDISQ16.IDE new file mode 100644 index 0000000..5932861 Binary files /dev/null and b/midiseq/MIDISQ16.IDE differ diff --git a/midiseq/MIDISQ32.001 b/midiseq/MIDISQ32.001 new file mode 100644 index 0000000..dda12c2 --- /dev/null +++ b/midiseq/MIDISQ32.001 @@ -0,0 +1,691 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +!IF "$(CFG)" == "" +CFG=midisq32 - Win32 Debug +!MESSAGE No configuration specified. Defaulting to midisq32 - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "midisq32 - Win32 Release" && "$(CFG)" !=\ + "midisq32 - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Midisq32.mak" CFG="midisq32 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "midisq32 - Win32 Release" (based on\ + "Win32 (x86) Dynamic-Link Library") +!MESSAGE "midisq32 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "midisq32 - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Midisq32.dll" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Midiseq.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\Midisq32.dll" + -@erase "$(OUTDIR)\Midisq32.exp" + -@erase "$(OUTDIR)\Midisq32.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Midisq32.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Midisq32.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/Midisq32.pdb" /machine:I386 /out:"$(OUTDIR)/Midisq32.dll"\ + /implib:"$(OUTDIR)/Midisq32.lib" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Midiseq.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Midisq32.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msmidisq.dll" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Midiseq.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\msmidisq.exp" + -@erase "$(OUTDIR)\msmidisq.lib" + -@erase "..\exe\msmidisq.dll" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Midisq32.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /dll /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\msmidisq.dll" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /dll\ + /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\msmidisq.dll"\ + /implib:"$(OUTDIR)/msmidisq.lib" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Midiseq.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"..\exe\msmidisq.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "midisq32 - Win32 Release" +# Name "midisq32 - Win32 Debug" + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Timeblck.cpp + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +DEP_CPP_TIMEB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Timeblck.obj" : $(SOURCE) $(DEP_CPP_TIMEB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +DEP_CPP_TIMEB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Timeblck.obj" : $(SOURCE) $(DEP_CPP_TIMEB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mididata.cpp +DEP_CPP_MIDID=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Mididata.obj" : $(SOURCE) $(DEP_CPP_MIDID) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiout.cpp +DEP_CPP_MIDIO=\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiout.obj" : $(SOURCE) $(DEP_CPP_MIDIO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiseq.cpp +DEP_CPP_MIDIS=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Midiseq.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Midiseq.obj" : $(SOURCE) $(DEP_CPP_MIDIS) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Miditrck.cpp +DEP_CPP_MIDIT=\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Miditrck.obj" : $(SOURCE) $(DEP_CPP_MIDIT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Purehdr.cpp +DEP_CPP_PUREH=\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Purehdr.obj" : $(SOURCE) $(DEP_CPP_PUREH) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiblck.cpp +DEP_CPP_MIDIB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiblck.obj" : $(SOURCE) $(DEP_CPP_MIDIB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\pureevnt.cpp +DEP_CPP_PUREE=\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\pureevnt.obj" : $(SOURCE) $(DEP_CPP_PUREE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\evnttmr.cpp +DEP_CPP_EVNTT=\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\evnttmr.obj" : $(SOURCE) $(DEP_CPP_EVNTT) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/midiseq/MIDISQ32.DEF b/midiseq/MIDISQ32.DEF new file mode 100644 index 0000000..97bfc2a --- /dev/null +++ b/midiseq/MIDISQ32.DEF @@ -0,0 +1,6 @@ +LIBRARY MIDISQ32.DLL + +EXPORTS + @isInPlay$qv @5 ; isInPlay() + @play$q6String @3 ; play(String) + @stop$qv @4 ; stop() diff --git a/midiseq/MIDISQ32.DSP b/midiseq/MIDISQ32.DSP new file mode 100644 index 0000000..d81004f --- /dev/null +++ b/midiseq/MIDISQ32.DSP @@ -0,0 +1,231 @@ +# Microsoft Developer Studio Project File - Name="midisq32" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=midisq32 - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MIDISQ32.MAK". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MIDISQ32.MAK" CFG="midisq32 - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "midisq32 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "midisq32 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /dll /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\msmidisq.dll" + +!ENDIF + +# Begin Target + +# Name "midisq32 - Win32 Release" +# Name "midisq32 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\evnttmr.cpp +# End Source File +# Begin Source File + +SOURCE=.\Midiblck.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mididata.cpp +# End Source File +# Begin Source File + +SOURCE=.\Midiout.cpp +# End Source File +# Begin Source File + +SOURCE=.\Midiseq.cpp +# End Source File +# Begin Source File + +SOURCE=.\Miditrck.cpp +# End Source File +# Begin Source File + +SOURCE=.\pureevnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Purehdr.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Timeblck.cpp +# End Source File +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Evntblck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Evnttmr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Evnttype.hpp +# End Source File +# Begin Source File + +SOURCE=.\Metaevnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midiblck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midicaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mididata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midihdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midimsg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midiout.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midiseq.hpp +# End Source File +# Begin Source File + +SOURCE=.\Miditrck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Note.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pureevnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Purehdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Purenote.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smpte.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tempo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Timeblck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Timeinfo.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/midiseq/MIDISQ32.DSW b/midiseq/MIDISQ32.DSW new file mode 100644 index 0000000..93449d5 --- /dev/null +++ b/midiseq/MIDISQ32.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "midisq32"=.\MIDISQ32.DSP - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/midiseq/MIDISQ32.IDE b/midiseq/MIDISQ32.IDE new file mode 100644 index 0000000..2f3b2f3 Binary files /dev/null and b/midiseq/MIDISQ32.IDE differ diff --git a/midiseq/MIDISQ32.MAK b/midiseq/MIDISQ32.MAK new file mode 100644 index 0000000..dda12c2 --- /dev/null +++ b/midiseq/MIDISQ32.MAK @@ -0,0 +1,691 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +!IF "$(CFG)" == "" +CFG=midisq32 - Win32 Debug +!MESSAGE No configuration specified. Defaulting to midisq32 - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "midisq32 - Win32 Release" && "$(CFG)" !=\ + "midisq32 - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Midisq32.mak" CFG="midisq32 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "midisq32 - Win32 Release" (based on\ + "Win32 (x86) Dynamic-Link Library") +!MESSAGE "midisq32 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "midisq32 - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Midisq32.dll" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Midiseq.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\Midisq32.dll" + -@erase "$(OUTDIR)\Midisq32.exp" + -@erase "$(OUTDIR)\Midisq32.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Midisq32.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Midisq32.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/Midisq32.pdb" /machine:I386 /out:"$(OUTDIR)/Midisq32.dll"\ + /implib:"$(OUTDIR)/Midisq32.lib" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Midiseq.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Midisq32.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msmidisq.dll" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Midiseq.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\msmidisq.exp" + -@erase "$(OUTDIR)\msmidisq.lib" + -@erase "..\exe\msmidisq.dll" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Midisq32.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /dll /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\msmidisq.dll" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /dll\ + /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\msmidisq.dll"\ + /implib:"$(OUTDIR)/msmidisq.lib" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Midiseq.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"..\exe\msmidisq.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "midisq32 - Win32 Release" +# Name "midisq32 - Win32 Debug" + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Timeblck.cpp + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +DEP_CPP_TIMEB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Timeblck.obj" : $(SOURCE) $(DEP_CPP_TIMEB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +DEP_CPP_TIMEB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Timeblck.obj" : $(SOURCE) $(DEP_CPP_TIMEB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mididata.cpp +DEP_CPP_MIDID=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Mididata.obj" : $(SOURCE) $(DEP_CPP_MIDID) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiout.cpp +DEP_CPP_MIDIO=\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiout.obj" : $(SOURCE) $(DEP_CPP_MIDIO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiseq.cpp +DEP_CPP_MIDIS=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Midiseq.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Midiseq.obj" : $(SOURCE) $(DEP_CPP_MIDIS) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Miditrck.cpp +DEP_CPP_MIDIT=\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Miditrck.obj" : $(SOURCE) $(DEP_CPP_MIDIT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Purehdr.cpp +DEP_CPP_PUREH=\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Purehdr.obj" : $(SOURCE) $(DEP_CPP_PUREH) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiblck.cpp +DEP_CPP_MIDIB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiblck.obj" : $(SOURCE) $(DEP_CPP_MIDIB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\pureevnt.cpp +DEP_CPP_PUREE=\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\pureevnt.obj" : $(SOURCE) $(DEP_CPP_PUREE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib + +!IF "$(CFG)" == "midisq32 - Win32 Release" + +!ELSEIF "$(CFG)" == "midisq32 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\evnttmr.cpp +DEP_CPP_EVNTT=\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\evnttmr.obj" : $(SOURCE) $(DEP_CPP_EVNTT) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/midiseq/MIDISQ32.MDP b/midiseq/MIDISQ32.MDP new file mode 100644 index 0000000..ccff507 Binary files /dev/null and b/midiseq/MIDISQ32.MDP differ diff --git a/midiseq/MIDISQ32.OPT b/midiseq/MIDISQ32.OPT new file mode 100644 index 0000000..ec86f0c Binary files /dev/null and b/midiseq/MIDISQ32.OPT differ diff --git a/midiseq/MIDISQ32.PLG b/midiseq/MIDISQ32.PLG new file mode 100644 index 0000000..6d91b5b --- /dev/null +++ b/midiseq/MIDISQ32.PLG @@ -0,0 +1,39 @@ + + +
+

Build Log

+

+--------------------Configuration: midisq32 - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP16.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /dll /pdb:none /debug /debugtype:both /machine:I386 /out:"..\exe\msmidisq.dll" /implib:".\msvcobj/msmidisq.lib" +.\msvcobj\evnttmr.obj +.\msvcobj\Midiblck.obj +.\msvcobj\Mididata.obj +.\msvcobj\Midiout.obj +.\msvcobj\Midiseq.obj +.\msvcobj\Miditrck.obj +.\msvcobj\pureevnt.obj +.\msvcobj\Purehdr.obj +.\msvcobj\Stdtmpl.obj +.\msvcobj\Timeblck.obj +..\Exe\mscommon.lib +..\Exe\msthread.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP16.tmp" +

Output Window

+Linking... + Creating library .\msvcobj/msmidisq.lib and object .\msvcobj/msmidisq.exp +CVPACK : fatal error CK1024: .\msvcobj\Stdtmpl.obj cannot use program database d:\work\midiseq\msvcobj\vc60.pdb : signatures do not match +LINK : warning LNK4027: CVPACK error +Error executing link.exe. + + + +

Results

+msmidisq.dll - 1 error(s), 1 warning(s) +
+ + diff --git a/midiseq/MIDISQ32.~DE b/midiseq/MIDISQ32.~DE new file mode 100644 index 0000000..2e14278 Binary files /dev/null and b/midiseq/MIDISQ32.~DE differ diff --git a/midiseq/MIDISequencer.cpp b/midiseq/MIDISequencer.cpp new file mode 100644 index 0000000..437f655 --- /dev/null +++ b/midiseq/MIDISequencer.cpp @@ -0,0 +1,31 @@ +#include +#include + +MIDISequencer::MIDISequencer() +{ +} + +MIDISequencer::~MIDISequencer() +{ +} + +bool MIDISequencer::sequence(MIDIOutputDevice &midiDevice) +{ + DWORD currTime(MMTimer::getSystemTime()); + int currentTrack; + bool eligibleTracks; + + eligibleTracks=false; + for(currentTrack=0;currentTrack=((*mMIDIData)[currentTrack]).size())continue; + eligibleTracks=true; + while(((*mMIDIData)[currentTrack])[mTrackIndices[currentTrack]].playTime()<=currTime) + { + if(!midiDevice.midiEvent(((*mMIDIData)[currentTrack])[mTrackIndices[currentTrack]]))return false; + mTrackIndices[currentTrack]=mTrackIndices[currentTrack]+1; + if(mTrackIndices[currentTrack]>=((*mMIDIData)[currentTrack]).size())break; + } + } + return eligibleTracks; +} diff --git a/midiseq/MIDISequencer.hpp b/midiseq/MIDISequencer.hpp new file mode 100644 index 0000000..2d6a439 --- /dev/null +++ b/midiseq/MIDISequencer.hpp @@ -0,0 +1,31 @@ +#ifndef _MIDISEQ_SEQUENCER_HPP_ +#define _MIDISEQ_SEQUENCER_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIBLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +class MIDISequencer +{ +public: + MIDISequencer(); + virtual ~MIDISequencer(); + void setData(MIDIBlock &midiData); + bool sequence(MIDIOutputDevice &midiDevice); +private: + SmartPointer mMIDIData; + DWORD mTrackIndices[MIDIBlock::MaxTracks]; +}; + +inline +void MIDISequencer::setData(MIDIBlock &midiData) +{ + mMIDIData=&midiData; + ::memset(&mTrackIndices,0,sizeof(mTrackIndices)); +} +#endif diff --git a/midiseq/MSTEST.001 b/midiseq/MSTEST.001 new file mode 100644 index 0000000..4972d16 --- /dev/null +++ b/midiseq/MSTEST.001 @@ -0,0 +1,765 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=mstest - Win32 Debug +!MESSAGE No configuration specified. Defaulting to mstest - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "mstest - Win32 Release" && "$(CFG)" != "mstest - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Mstest.mak" CFG="mstest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mstest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mstest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "mstest - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mstest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Mstest.exe" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\Mstest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Mstest.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mstest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Mstest.pdb" /machine:I386 /out:"$(OUTDIR)/Mstest.exe" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Mstest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Mstest.exe" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\Mstest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mstest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows\ + /pdb:none /debug /debugtype:both /machine:I386 /out:"$(OUTDIR)/Mstest.exe" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Mstest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "mstest - Win32 Release" +# Name "mstest - Win32 Debug" + +!IF "$(CFG)" == "mstest - Win32 Release" + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Timeblck.cpp +DEP_CPP_TIMEB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Timeblck.obj" : $(SOURCE) $(DEP_CPP_TIMEB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiblck.cpp +DEP_CPP_MIDIB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiblck.obj" : $(SOURCE) $(DEP_CPP_MIDIB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mididata.cpp + +!IF "$(CFG)" == "mstest - Win32 Release" + +DEP_CPP_MIDID=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Mididata.obj" : $(SOURCE) $(DEP_CPP_MIDID) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +DEP_CPP_MIDID=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Mididata.obj" : $(SOURCE) $(DEP_CPP_MIDID) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiout.cpp +DEP_CPP_MIDIO=\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiout.obj" : $(SOURCE) $(DEP_CPP_MIDIO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Miditrck.cpp +DEP_CPP_MIDIT=\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Miditrck.obj" : $(SOURCE) $(DEP_CPP_MIDIT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Purehdr.cpp +DEP_CPP_PUREH=\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Purehdr.obj" : $(SOURCE) $(DEP_CPP_PUREH) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "mstest - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "mstest - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "mstest - Win32 Release" + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\pureevnt.cpp +DEP_CPP_PUREE=\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\pureevnt.obj" : $(SOURCE) $(DEP_CPP_PUREE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\evnttmr.cpp +DEP_CPP_EVNTT=\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\evnttmr.obj" : $(SOURCE) $(DEP_CPP_EVNTT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib + +!IF "$(CFG)" == "mstest - Win32 Release" + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/midiseq/MSTEST.DSP b/midiseq/MSTEST.DSP new file mode 100644 index 0000000..a71bf70 --- /dev/null +++ b/midiseq/MSTEST.DSP @@ -0,0 +1,223 @@ +# Microsoft Developer Studio Project File - Name="mstest" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=mstest - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MSTEST.MAK". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MSTEST.MAK" CFG="mstest - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mstest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mstest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mstest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /FD /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 + +!ENDIF + +# Begin Target + +# Name "mstest - Win32 Release" +# Name "mstest - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\evnttmr.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Midiblck.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mididata.cpp +# End Source File +# Begin Source File + +SOURCE=.\Midiout.cpp +# End Source File +# Begin Source File + +SOURCE=.\midiseq.cpp +# End Source File +# Begin Source File + +SOURCE=.\MIDISequencer.cpp +# End Source File +# Begin Source File + +SOURCE=.\Miditrck.cpp +# End Source File +# Begin Source File + +SOURCE=.\pureevnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Purehdr.cpp +# End Source File +# Begin Source File + +SOURCE=.\Timeblck.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Evntblck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Evnttmr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Evnttype.hpp +# End Source File +# Begin Source File + +SOURCE=.\Metaevnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midiblck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midicaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mididata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midihdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midimsg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Midiout.hpp +# End Source File +# Begin Source File + +SOURCE=.\Miditrck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Note.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pureevnt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Purehdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Purenote.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smpte.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tempo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Timeblck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Timeinfo.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/midiseq/MSTEST.DSW b/midiseq/MSTEST.DSW new file mode 100644 index 0000000..c0146c4 --- /dev/null +++ b/midiseq/MSTEST.DSW @@ -0,0 +1,59 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mstest"=.\MSTEST.DSP - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency +}}} + +############################################################################### + +Project: "thread"=..\THREAD\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/midiseq/MSTEST.MAK b/midiseq/MSTEST.MAK new file mode 100644 index 0000000..4972d16 --- /dev/null +++ b/midiseq/MSTEST.MAK @@ -0,0 +1,765 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=mstest - Win32 Debug +!MESSAGE No configuration specified. Defaulting to mstest - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "mstest - Win32 Release" && "$(CFG)" != "mstest - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Mstest.mak" CFG="mstest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mstest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mstest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "mstest - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mstest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Mstest.exe" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\Mstest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Mstest.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mstest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Mstest.pdb" /machine:I386 /out:"$(OUTDIR)/Mstest.exe" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Mstest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Mstest.exe" + +CLEAN : + -@erase "$(INTDIR)\evnttmr.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Midiblck.obj" + -@erase "$(INTDIR)\Mididata.obj" + -@erase "$(INTDIR)\Midiout.obj" + -@erase "$(INTDIR)\Miditrck.obj" + -@erase "$(INTDIR)\pureevnt.obj" + -@erase "$(INTDIR)\Purehdr.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Timeblck.obj" + -@erase "$(OUTDIR)\Mstest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Mstest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows\ + /pdb:none /debug /debugtype:both /machine:I386 /out:"$(OUTDIR)/Mstest.exe" +LINK32_OBJS= \ + "$(INTDIR)\evnttmr.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Midiblck.obj" \ + "$(INTDIR)\Mididata.obj" \ + "$(INTDIR)\Midiout.obj" \ + "$(INTDIR)\Miditrck.obj" \ + "$(INTDIR)\pureevnt.obj" \ + "$(INTDIR)\Purehdr.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Timeblck.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Mstest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "mstest - Win32 Release" +# Name "mstest - Win32 Debug" + +!IF "$(CFG)" == "mstest - Win32 Release" + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Timeblck.cpp +DEP_CPP_TIMEB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Timeblck.obj" : $(SOURCE) $(DEP_CPP_TIMEB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiblck.cpp +DEP_CPP_MIDIB=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiblck.obj" : $(SOURCE) $(DEP_CPP_MIDIB) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mididata.cpp + +!IF "$(CFG)" == "mstest - Win32 Release" + +DEP_CPP_MIDID=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Mididata.obj" : $(SOURCE) $(DEP_CPP_MIDID) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +DEP_CPP_MIDID=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Mididata.obj" : $(SOURCE) $(DEP_CPP_MIDID) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Midiout.cpp +DEP_CPP_MIDIO=\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Midiout.obj" : $(SOURCE) $(DEP_CPP_MIDIO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Miditrck.cpp +DEP_CPP_MIDIT=\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Math.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Miditrck.obj" : $(SOURCE) $(DEP_CPP_MIDIT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Purehdr.cpp +DEP_CPP_PUREH=\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + + +"$(INTDIR)\Purehdr.obj" : $(SOURCE) $(DEP_CPP_PUREH) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "mstest - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Qsort.hpp"\ + {$(INCLUDE)}"\Common\Qsort.tpp"\ + {$(INCLUDE)}"\Common\Sortopt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Wintimer.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "mstest - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Evntblck.hpp"\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\.\Evnttype.hpp"\ + {$(INCLUDE)}"\.\Metaevnt.hpp"\ + {$(INCLUDE)}"\.\Midiblck.hpp"\ + {$(INCLUDE)}"\.\Midicaps.hpp"\ + {$(INCLUDE)}"\.\Mididata.hpp"\ + {$(INCLUDE)}"\.\Midihdr.hpp"\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Midiout.hpp"\ + {$(INCLUDE)}"\.\Miditrck.hpp"\ + {$(INCLUDE)}"\.\Note.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\.\Purehdr.hpp"\ + {$(INCLUDE)}"\.\Purenote.hpp"\ + {$(INCLUDE)}"\.\Smpte.hpp"\ + {$(INCLUDE)}"\.\Tempo.hpp"\ + {$(INCLUDE)}"\.\Timeblck.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Fileio.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Intel.hpp"\ + {$(INCLUDE)}"\Common\Iobuff.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Sys\Stat.h"\ + {$(INCLUDE)}"\Sys\Types.h"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "mstest - Win32 Release" + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\pureevnt.cpp +DEP_CPP_PUREE=\ + {$(INCLUDE)}"\.\Midimsg.hpp"\ + {$(INCLUDE)}"\.\Pureevnt.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\pureevnt.obj" : $(SOURCE) $(DEP_CPP_PUREE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\evnttmr.cpp +DEP_CPP_EVNTT=\ + {$(INCLUDE)}"\.\Evnttmr.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + + +"$(INTDIR)\evnttmr.obj" : $(SOURCE) $(DEP_CPP_EVNTT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib + +!IF "$(CFG)" == "mstest - Win32 Release" + +!ELSEIF "$(CFG)" == "mstest - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/midiseq/MSTEST.MDP b/midiseq/MSTEST.MDP new file mode 100644 index 0000000..33dffef Binary files /dev/null and b/midiseq/MSTEST.MDP differ diff --git a/midiseq/MSTEST.PLG b/midiseq/MSTEST.PLG new file mode 100644 index 0000000..ff1c332 --- /dev/null +++ b/midiseq/MSTEST.PLG @@ -0,0 +1,361 @@ + + +
+

Build Log

+

+--------------------Configuration: common - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP5E.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"D:\work\COMMON\accelerator.cpp" +"D:\work\COMMON\Bitmap.cpp" +"D:\work\COMMON\Bminfo.cpp" +"D:\work\COMMON\Bmplnk.cpp" +"D:\work\COMMON\Brush.cpp" +"D:\work\COMMON\Btnlnk.cpp" +"D:\work\COMMON\calendar.cpp" +"D:\work\COMMON\Catmull.cpp" +"D:\work\COMMON\Cbdata.cpp" +"D:\work\COMMON\Cbdatahk.cpp" +"D:\work\COMMON\Clipbrd.cpp" +"D:\work\COMMON\Console.cpp" +"D:\work\COMMON\Control.cpp" +"D:\work\COMMON\Crsctrl.cpp" +"D:\work\COMMON\Ddemsg.cpp" +"D:\work\COMMON\Dib.cpp" +"D:\work\COMMON\Diskinfo.cpp" +"D:\work\COMMON\Drawbmp.cpp" +"D:\work\COMMON\Dwindow.cpp" +"D:\work\COMMON\elastic.cpp" +"D:\work\COMMON\errormsg.cpp" +"D:\work\COMMON\File.cpp" +"D:\work\COMMON\Fileio.cpp" +"D:\work\COMMON\Filemap.cpp" +"D:\work\COMMON\Finddata.cpp" +"D:\work\COMMON\Font.cpp" +"D:\work\COMMON\gdipoint.cpp" +"D:\work\COMMON\Guiwnd.cpp" +"D:\work\COMMON\Hookproc.cpp" +"D:\work\COMMON\Iconfrm.cpp" +"D:\work\COMMON\Infowin.cpp" +"D:\work\COMMON\Intel.cpp" +"D:\work\COMMON\Iobuff.cpp" +"D:\work\COMMON\Logowin.cpp" +"D:\work\COMMON\Macro.cpp" +"D:\work\COMMON\Math.cpp" +"D:\work\COMMON\Mdifrm.cpp" +"D:\work\COMMON\Mdiwin.cpp" +"D:\work\COMMON\Memfile.cpp" +"D:\work\COMMON\Mmtimer.cpp" +"D:\work\COMMON\Odbutton.cpp" +"D:\work\COMMON\Odlist.cpp" +"D:\work\COMMON\Odlstalt.cpp" +"D:\work\COMMON\Odlstchk.cpp" +"D:\work\COMMON\opendlg.Cpp" +"D:\work\COMMON\Openfile.cpp" +"D:\work\COMMON\opndlgex.cpp" +"D:\work\COMMON\Owner.cpp" +"D:\work\COMMON\Pathfnd.cpp" +"D:\work\COMMON\Point.cpp" +"D:\work\COMMON\Process.cpp" +"D:\work\COMMON\Profile.cpp" +"D:\work\COMMON\Progress.cpp" +"D:\work\COMMON\Purebmp.cpp" +"D:\work\COMMON\Purebyte.cpp" +"D:\work\COMMON\puredbl.cpp" +"D:\work\COMMON\Puredwrd.cpp" +"D:\work\COMMON\Purehdc.cpp" +"D:\work\COMMON\puremenu.Cpp" +"D:\work\COMMON\Purepal.cpp" +"D:\work\COMMON\purewrd.cpp" +"D:\work\COMMON\Pview.cpp" +"D:\work\COMMON\Regkey.cpp" +"D:\work\COMMON\resbmp.cpp" +"D:\work\COMMON\Richedit.cpp" +"D:\work\COMMON\rubber.cpp" +"D:\work\COMMON\Sdate.cpp" +"D:\work\COMMON\Smrtstrm.cpp" +"D:\work\COMMON\snapshot.cpp" +"D:\work\COMMON\static.cpp" +"D:\work\COMMON\String.cpp" +"D:\work\COMMON\Systime.cpp" +"D:\work\COMMON\Vhandler.cpp" +"D:\work\COMMON\Vxdctrl.cpp" +"D:\work\COMMON\widestr.Cpp" +"D:\work\COMMON\Window.cpp" +"D:\work\COMMON\Wintimer.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP5E.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP5F.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fp"msvcobj/common.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"D:\work\COMMON\Bmdata.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP5F.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP60.tmp" with contents +[ +/nologo /out:"..\exe\mscommon.lib" +.\msvcobj\accelerator.obj +.\msvcobj\Bitmap.obj +.\msvcobj\Bmdata.obj +.\msvcobj\Bminfo.obj +.\msvcobj\Bmplnk.obj +.\msvcobj\Brush.obj +.\msvcobj\Btnlnk.obj +.\msvcobj\calendar.obj +.\msvcobj\Catmull.obj +.\msvcobj\Cbdata.obj +.\msvcobj\Cbdatahk.obj +.\msvcobj\Clipbrd.obj +.\msvcobj\Console.obj +.\msvcobj\Control.obj +.\msvcobj\Crsctrl.obj +.\msvcobj\Ddemsg.obj +.\msvcobj\Dib.obj +.\msvcobj\Diskinfo.obj +.\msvcobj\Drawbmp.obj +.\msvcobj\Dwindow.obj +.\msvcobj\elastic.obj +.\msvcobj\errormsg.obj +.\msvcobj\File.obj +.\msvcobj\Fileio.obj +.\msvcobj\Filemap.obj +.\msvcobj\Finddata.obj +.\msvcobj\Font.obj +.\msvcobj\gdipoint.obj +.\msvcobj\Guiwnd.obj +.\msvcobj\Hookproc.obj +.\msvcobj\Iconfrm.obj +.\msvcobj\Infowin.obj +.\msvcobj\Intel.obj +.\msvcobj\Iobuff.obj +.\msvcobj\Logowin.obj +.\msvcobj\Macro.obj +.\msvcobj\Math.obj +.\msvcobj\Mdifrm.obj +.\msvcobj\Mdiwin.obj +.\msvcobj\Memfile.obj +.\msvcobj\Mmtimer.obj +.\msvcobj\Odbutton.obj +.\msvcobj\Odlist.obj +.\msvcobj\Odlstalt.obj +.\msvcobj\Odlstchk.obj +.\msvcobj\opendlg.obj +.\msvcobj\Openfile.obj +.\msvcobj\opndlgex.obj +.\msvcobj\Owner.obj +.\msvcobj\Pathfnd.obj +.\msvcobj\Point.obj +.\msvcobj\Process.obj +.\msvcobj\Profile.obj +.\msvcobj\Progress.obj +.\msvcobj\Purebmp.obj +.\msvcobj\Purebyte.obj +.\msvcobj\puredbl.obj +.\msvcobj\Puredwrd.obj +.\msvcobj\Purehdc.obj +.\msvcobj\puremenu.obj +.\msvcobj\Purepal.obj +.\msvcobj\purewrd.obj +.\msvcobj\Pview.obj +.\msvcobj\Regkey.obj +.\msvcobj\resbmp.obj +.\msvcobj\Richedit.obj +.\msvcobj\rubber.obj +.\msvcobj\Sdate.obj +.\msvcobj\Smrtstrm.obj +.\msvcobj\snapshot.obj +.\msvcobj\static.obj +.\msvcobj\String.obj +.\msvcobj\Systime.obj +.\msvcobj\Vhandler.obj +.\msvcobj\Vxdctrl.obj +.\msvcobj\widestr.obj +.\msvcobj\Window.obj +.\msvcobj\Wintimer.obj +] +Creating command line "link.exe -lib @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP60.tmp" +

Output Window

+Compiling... +accelerator.cpp +Bitmap.cpp +Bminfo.cpp +Bmplnk.cpp +Brush.cpp +Btnlnk.cpp +calendar.cpp +Catmull.cpp +Cbdata.cpp +Cbdatahk.cpp +Clipbrd.cpp +Console.cpp +Control.cpp +Crsctrl.cpp +Ddemsg.cpp +Dib.cpp +Diskinfo.cpp +Drawbmp.cpp +Dwindow.cpp +elastic.cpp +Generating Code... +Compiling... +errormsg.cpp +File.cpp +Fileio.cpp +Filemap.cpp +Finddata.cpp +Font.cpp +gdipoint.cpp +Guiwnd.cpp +Hookproc.cpp +Iconfrm.cpp +Infowin.cpp +Intel.cpp +Iobuff.cpp +Logowin.cpp +Macro.cpp +Math.cpp +Mdifrm.cpp +Mdiwin.cpp +Memfile.cpp +Mmtimer.cpp +Generating Code... +Compiling... +Odbutton.cpp +Odlist.cpp +Odlstalt.cpp +Odlstchk.cpp +opendlg.Cpp +Openfile.cpp +opndlgex.cpp +Owner.cpp +Pathfnd.cpp +Point.cpp +Process.cpp +Profile.cpp +Progress.cpp +Purebmp.cpp +Purebyte.cpp +puredbl.cpp +Puredwrd.cpp +Purehdc.cpp +puremenu.Cpp +Purepal.cpp +Generating Code... +Compiling... +purewrd.cpp +Pview.cpp +Regkey.cpp +resbmp.cpp +Richedit.cpp +rubber.cpp +Sdate.cpp +Smrtstrm.cpp +snapshot.cpp +static.cpp +String.cpp +Systime.cpp +Vhandler.cpp +Vxdctrl.cpp +widestr.Cpp +Window.cpp +Wintimer.cpp +Generating Code... +Compiling... +Bmdata.cpp +Creating library... +

+--------------------Configuration: thread - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP61.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\THREAD\Event.cpp" +"D:\work\THREAD\Msgqueue.cpp" +"D:\work\THREAD\Mthread.cpp" +"D:\work\THREAD\Mutex.cpp" +"D:\work\THREAD\Ptcllbck.cpp" +"D:\work\THREAD\Qthread.cpp" +"D:\work\THREAD\Stdtmpl.cpp" +"D:\work\THREAD\Thread.cpp" +"D:\work\THREAD\thtimer.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP61.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msthread.lib" .\msvcobj\Event.obj .\msvcobj\Msgqueue.obj .\msvcobj\Mthread.obj .\msvcobj\Mutex.obj .\msvcobj\Ptcllbck.obj .\msvcobj\Qthread.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Thread.obj .\msvcobj\thtimer.obj " +

Output Window

+Compiling... +Event.cpp +Msgqueue.cpp +Mthread.cpp +Mutex.cpp +Ptcllbck.cpp +Qthread.cpp +Stdtmpl.cpp +Thread.cpp +thtimer.cpp +Creating library... +

+--------------------Configuration: mstest - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP62.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\midiseq\evnttmr.cpp" +"D:\work\midiseq\Main.cpp" +"D:\work\midiseq\Midiblck.cpp" +"D:\work\midiseq\Mididata.cpp" +"D:\work\midiseq\Midiout.cpp" +"D:\work\midiseq\MIDISequencer.cpp" +"D:\work\midiseq\Miditrck.cpp" +"D:\work\midiseq\pureevnt.cpp" +"D:\work\midiseq\Purehdr.cpp" +"D:\work\midiseq\Timeblck.cpp" +"D:\work\midiseq\midiseq.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP62.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP63.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib winmm.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 /out:".\msvcobj/MSTEST.exe" +.\msvcobj\evnttmr.obj +.\msvcobj\Main.obj +.\msvcobj\Midiblck.obj +.\msvcobj\Mididata.obj +.\msvcobj\Midiout.obj +.\msvcobj\MIDISequencer.obj +.\msvcobj\Miditrck.obj +.\msvcobj\pureevnt.obj +.\msvcobj\Purehdr.obj +.\msvcobj\Timeblck.obj +.\msvcobj\midiseq.obj +\work\exe\mscommon.lib +\work\exe\msthread.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP63.tmp" +

Output Window

+Compiling... +evnttmr.cpp +Main.cpp +Midiblck.cpp +Mididata.cpp +Midiout.cpp +MIDISequencer.cpp +Miditrck.cpp +pureevnt.cpp +Purehdr.cpp +Timeblck.cpp +midiseq.cpp +Generating Code... +Linking... + Creating library .\msvcobj/MSTEST.lib and object .\msvcobj/MSTEST.exp + + + +

Results

+MSTEST.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/midiseq/MSTEST.ncb b/midiseq/MSTEST.ncb new file mode 100644 index 0000000..4735459 Binary files /dev/null and b/midiseq/MSTEST.ncb differ diff --git a/midiseq/MSTEST.opt b/midiseq/MSTEST.opt new file mode 100644 index 0000000..aafb37a Binary files /dev/null and b/midiseq/MSTEST.opt differ diff --git a/midiseq/MUS.DSW b/midiseq/MUS.DSW new file mode 100644 index 0000000..b682779 Binary files /dev/null and b/midiseq/MUS.DSW differ diff --git a/midiseq/ProgramChange.hpp b/midiseq/ProgramChange.hpp new file mode 100644 index 0000000..cd20ad1 --- /dev/null +++ b/midiseq/ProgramChange.hpp @@ -0,0 +1,35 @@ +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#define _MIDISEQ_PROGRAMCHANGE_HPP_ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class ProgramChange +{ +public: + ProgramChange(); + ProgramChange(BYTE programNumber); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: + BYTE mProgramNumber; +}; + +inline +ProgramChange::ProgramChange() +: mProgramNumber(0) +{ +} + +inline +ProgramChange::ProgramChange(BYTE programNumber) +: mProgramNumber(programNumber) +{ +} + +inline +PureEvent ProgramChange::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDIProgramChange,deltaTime,channel,mProgramNumber,0); + return pureEvent; +} +#endif diff --git a/midiseq/SCRAPS.TXT b/midiseq/SCRAPS.TXT new file mode 100644 index 0000000..8d57f98 --- /dev/null +++ b/midiseq/SCRAPS.TXT @@ -0,0 +1,402 @@ + + PureEvent pureEvent(eventBlock[eventIndex]); + switch(pureEvent.eventType()&0xF0) + { + case MIDIChannelPressure : {eventString="MIDIChannelPressure(0xD0)";break;} + case MIDIProgramChange : {eventString="MIDIProgramChange(0xC0)";break;} + case MIDIKeyPressure : {eventString="MIDIKeyPressure(0xA0)";break;} + case MIDIParameter : {eventString="MIDIParameter(0xB0)";break;} + case MIDIPitchBend : {eventString="MIDIPitchBend(0xE0)";break;} + case MIDINoteOff : {eventString="MIDINoteOff(0x80)";break;} + case MIDINoteOn : {eventString="MIDINoteOn(0x90)";break;} + default : {eventString="UNKNOWN";break;} + } + ::fprintf(lpFilePointer,"eventType:%3d [% 20s] deltaTime:%5ld playTime:%10ld channel:%2d firstData:%4d secondData:%4d midiTime:%10ld\n", + (short)pureEvent.eventType(), + (LPSTR)eventString, + pureEvent.deltaTime(), + pureEvent.playTime(), + (short)pureEvent.channel(), + (short)pureEvent.firstData(), + (short)pureEvent.secondData(), + pureEvent.midiTime()); + + + || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +------------------------------------------------------------------------------ + 0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 + 1 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 + 2 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 + 3 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 + 4 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + 5 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 + 6 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 + 7 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 + 8 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 + 9 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 + 10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | + + +} + + + static int pitchArray[11][12]; + int size=sizeof(pitchArray)/sizeof(int); + + for(int octave=0;octave<11;octave++) + { + for(int note=0;note<12;note++) + { + if(10==octave&¬e>127)break; + pitchArray[octave][note]=(octave*12)+note; + } + } + + + || C | C# | D | D# | E | F | F# | G | G# | A | A# | B +------------------------------------------------------------------------------ + 0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 + 1 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 + 2 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 + 3 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 + 4 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 + 5 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 + 6 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 + 7 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 + 8 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 + 9 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 + 10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | +*/ + + + + +// ChannelModeMessage channelModeMessage(ChannelModeMessage::Sustain); +// mMIDIDevice->midiEvent(channelModeMessage.getEvent(0)); +// mMIDIDevice->midiEvent(PureEvent(MIDIChannelPressure,0,0,50,0)); + +// PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData); + + +/* +1010nnnn 2 Polyphonic key pressure/after touch + +1011nnnn 2 Control change + +1100nnnn 1 Program change + +1101nnnn 1 Channel pressure/after touch +*/ + + + +inline +WORD PureEvent::operator==(const PureEvent &somePureEvent)const +{ + return mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType(); +/* return (mEventType==somePureEvent.mEventType&& + mChannel==somePureEvent.mChannel&& + mFirstData==somePureEvent.mFirstData&& + mSecondData==somePureEvent.mSecondData&& + mDeltaTime==somePureEvent.mDeltaTime&& + mPlayTime==somePureEvent.mPlayTime&& + mMIDITime==somePureEvent.mMIDITime); +*/ +} + + + + + + +class PitchBend +{ +public: + enum {MinPitch=0x0000,MaxPitch=0x3FFF,CenterPitch=0x2000}; + PitchBend(void); + PureEvent getEvent(void)const; + void setPitch(WORD pitch); + WORD getPitch(void)const; + void centerWheel(void); +private: + BYTE getLo(void)const; + BYTE getHi(void)const; + + WORD mPitch; +}; + +inline +PitchBend::PitchBend() +: mPitch(CenterPitch) +{ +} + +inline +void PitchBend::setPitch(WORD pitch) +{ + if(pitch>MaxPitch)pitch=MaxPitch; + mPitch=pitch; +} + +inline +WORD PitchBend::getPitch(void)const +{ + return mPitch; +} + +inline +void PitchBend::centerWheel(void) +{ + mPitch=CenterPitch; +} + +inline +BYTE PitchBend::getLo(void)const +{ + return mPitch&0xFF; +} + +inline +BYTE PitchBend::getHi(void)const +{ + return mPitch>>8; +} + +inline +PureEvent PitchBend::getEvent(void)const +{ + String strPitch; + ::sprintf(strPitch.str(),"lo:0x%04lx hi:0x%04lx\n",getLo(),getHi()); + ::OutputDebugString(strPitch.str()); + PureEvent pureEvent(MIDIPitchBend,0,0,getHi(),getLo()); + return pureEvent; +} + +void testNotes(void) +{ + MIDIOutputDevice midiOut; + + NoteOn noteOn(PureNote(70,60)); + PitchBend pitchBend; + pitchBend.setPitch(0x0); + pitchBend.setPitch(0x2000+128); + +// pitchBend.setPitch(0x3FFF); + NoteOff noteOff(PureNote(70,60)); + + if(!midiOut.openDevice())return; + + midiOut.midiEvent(noteOn.getEvent()); + midiOut.midiEvent(pitchBend.getEvent()); + pitchBend.setPitch(0x2000); + midiOut.midiEvent(pitchBend.getEvent()); + + midiOut.midiEvent(noteOn.getEvent()); + + midiOut.midiEvent(noteOff.getEvent()); + + midiOut.closeDevice(); + return; +} + + + + +void testEvent(void) +{ + String musicFileName("D:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); + int requiredChannel=0; + + + MidiData midiData(musicFileName); + midiData.makeRealTime(); + ::OutputDebugString(String("MIDI events=")+String().fromInt(midiData.getEventCount())); + for(int index=0;index=mMIDIEventVector.size())return closeDevice(); + } + return (CallbackData::ReturnType)TRUE; +} +*/ + + + + + +#ifndef _MIDISEQ_TIMEBLOCK_HPP_ +#define _MIDISEQ_TIMEBLOCK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#include +#endif + +class MIDIBlock; + +class TimeBlock +{ +public: + TimeBlock(void); + virtual ~TimeBlock(); + void setStartTime(DWORD startTime); +// void setTempo(DWORD tempo); + void setDivision(DWORD division); + void fixTimeBlock(MIDIBlock &midiEvents,Array &sortedEvents); + void printBlock(String pathFileName,Array &eventVector); +private: + void fixTimeBlock(EventBlock &midiEventBlock); + void sortBlocks(MIDIBlock &midiEventBlocks,Array &sortedEvents); + void calculateRealTime(Array &eventBlock); + void calculateRealTime(MIDIBlock &midiEventBlocks); + + void dumpTimeVector(Array &eventBlock,String pathFileName); + void operator=(const TimeBlock &someTimeBlock); + +// DWORD mTempo; + DWORD mDivision; + DWORD mStartTime; +}; + +inline +TimeBlock::TimeBlock(void) +: mStartTime(0L), mDivision(136L) // , mTempo(5000000L), +{ +} + +inline +TimeBlock::~TimeBlock() +{ +} + +inline +void TimeBlock::setStartTime(DWORD startTime) +{ + mStartTime=startTime; +} + +/* +inline +void TimeBlock::setTempo(DWORD tempo) +{ + mTempo=tempo; +} +*/ + +inline +void TimeBlock::setDivision(DWORD division) +{ + mDivision=division; +} + +inline +void TimeBlock::operator=(const TimeBlock &/*someTimeBlock*/) +{ + return; +} +#endif + + + +// realTime=((((double)midiEvent.tempo()*(double)midiEvent.playTime())/(double)mDivision)/1000.00)+(double)mStartTime; + + +void TimeBlock::calculateRealTime(Array &eventBlock) +{ + DWORD numEvents(eventBlock.size()); + double realTime; + + if(!numEvents)return; + for(DWORD eventIndex=0;eventIndex &tracks) +{ + return mMIDIEvents.getTracks(tracks); +} +*/ + + + +// DWORD getEventCount(int track); +// bool getTracks(Block &tracks); + + + + +bool MIDIOutputDevice::openDevice(int deviceID) +{ + UINT numDevs; + + closeDevice(); + if(-1==deviceID) + { + mMIDIDeviceID=MIDIMAPPER; + return openDevice(); + } + if(!(numDevs=::midiOutGetNumDevs()))return false; + if(deviceID>=numDevs)return false; +// if(::midiOutOpen(&mhMIDIOutput,mMIDIDeviceID,0,0,0))return false; + if(::midiOutOpen(&mhMIDIOutput,deviceID,0,0,0))return false; + mMIDIDeviceID=deviceID; + hasDevice(true); + getDeviceCapabilities(); + return true; +} diff --git a/midiseq/TDCONFIG.TDW b/midiseq/TDCONFIG.TDW new file mode 100644 index 0000000..40ac47c Binary files /dev/null and b/midiseq/TDCONFIG.TDW differ diff --git a/midiseq/TDW.TRW b/midiseq/TDW.TRW new file mode 100644 index 0000000..e3273ab Binary files /dev/null and b/midiseq/TDW.TRW differ diff --git a/midiseq/TrackInfo.hpp b/midiseq/TrackInfo.hpp new file mode 100644 index 0000000..42d4f3d --- /dev/null +++ b/midiseq/TrackInfo.hpp @@ -0,0 +1,65 @@ +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#define _MIDISEQ_TRACKINFO_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class TrackInfo; +typedef Block TrackInfos; + +class TrackInfo +{ +public: + TrackInfo(); + TrackInfo(int trackNo,int eventCount); + virtual ~TrackInfo(); + int getTrackNo(void)const; + void setTrackNo(int trackNo); + int getEventCount(void)const; + void setEventCount(int eventCount); +private: + int mTrackNo; + int mEventCount; +}; + +inline +TrackInfo::TrackInfo() +: mTrackNo(0), mEventCount(0) +{ +} + +inline +TrackInfo::TrackInfo(int trackNo,int eventCount) +: mTrackNo(0), mEventCount(0) +{ +} + +inline +TrackInfo::~TrackInfo() +{ +} + +inline +int TrackInfo::getTrackNo(void)const +{ + return mTrackNo; +} + +inline +void TrackInfo::setTrackNo(int trackNo) +{ + mTrackNo=trackNo; +} + +inline +int TrackInfo::getEventCount(void)const +{ + return mEventCount; +} + +inline +void TrackInfo::setEventCount(int eventCount) +{ + mEventCount=eventCount; +} +#endif diff --git a/midiseq/evntblck.hpp b/midiseq/evntblck.hpp new file mode 100644 index 0000000..15399f9 --- /dev/null +++ b/midiseq/evntblck.hpp @@ -0,0 +1,8 @@ +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#define _MIDISEQ_EVENTBLOCK_HPP_ +class PureEvent; +template +class Block; +typedef Block EventBlock; +#endif + diff --git a/midiseq/evnttmr.cpp b/midiseq/evnttmr.cpp new file mode 100644 index 0000000..2b56904 --- /dev/null +++ b/midiseq/evnttmr.cpp @@ -0,0 +1,11 @@ +#include + +void EventTimer::timerStarted(void) +{ + resetEvent(); +} + +void EventTimer::timerStopped(void) +{ + setEvent(); +} diff --git a/midiseq/evnttmr.hpp b/midiseq/evnttmr.hpp new file mode 100644 index 0000000..6386100 --- /dev/null +++ b/midiseq/evnttmr.hpp @@ -0,0 +1,43 @@ +#ifndef _MIDISEQ_EVENTTIMER_HPP_ +#define _MIDISEQ_EVENTTIMER_HPP_ +#ifndef _COMMON_MMTIMER_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif + +class EventTimer : public Event, public MMTimer +{ +public: + EventTimer(void); + virtual ~EventTimer(); +protected: + EventTimer(const EventTimer &someEventTimer); + EventTimer &operator=(const EventTimer &someEventTimer); + virtual void timerStarted(void); + virtual void timerStopped(void); +private: +}; + +inline +EventTimer::EventTimer(void) +{ +} + +inline +EventTimer::~EventTimer() +{ +} + +inline +EventTimer::EventTimer(const EventTimer &/*someEventTimer*/) +{ // no implementation +} + +inline +EventTimer &EventTimer::operator=(const EventTimer &/*someEventTimer*/) +{ // no implementation + return *this; +} +#endif diff --git a/midiseq/evnttype.hpp b/midiseq/evnttype.hpp new file mode 100644 index 0000000..42e13cb --- /dev/null +++ b/midiseq/evnttype.hpp @@ -0,0 +1,6 @@ +#ifndef _MIDISEQ_EVENTTYPE_HPP_ +#define _MIDISEQ_EVENTTYPE_HPP_ + +enum EventType{MetaEvent=0xFF,SystemExclusiveOne=0xF0,SystemExclusiveTwo=0xF7,NullEvent=0x00}; + +#endif diff --git a/midiseq/hold/#MIDIHDR.HPP b/midiseq/hold/#MIDIHDR.HPP new file mode 100644 index 0000000..b754c5a --- /dev/null +++ b/midiseq/hold/#MIDIHDR.HPP @@ -0,0 +1,44 @@ +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#define _MIDISEQ_MIDIHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif + +class MidiHeader : public PureHeader +{ +public: + MidiHeader(void); + virtual ~MidiHeader(); + WORD readHeader(FileIO &fileIO); +private: +}; + +inline +MidiHeader::MidiHeader(void) +{ +} + +inline +MidiHeader::~MidiHeader() +{ +} + +inline +WORD MidiHeader::readHeader(FileIO &fileIO) +{ + return PureHeader::readHeader(fileIO); +} +#endif + + + + + + + + + + diff --git a/midiseq/hold/ChannelModeMessage.hpp b/midiseq/hold/ChannelModeMessage.hpp new file mode 100644 index 0000000..215fae2 --- /dev/null +++ b/midiseq/hold/ChannelModeMessage.hpp @@ -0,0 +1,58 @@ +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#define _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class ChannelModeMessage +{ +public: + typedef enum ChannelMessage{AllNotesOff,LocalControlOff,LocalControlOn, + Modulation,MainVolume,Pan,Expression,Sustain,ResetAllControllers}; + ChannelModeMessage(ChannelMessage channelMessage=AllNotesOff); + virtual ~ChannelModeMessage(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0,BYTE value=0); +private: + ChannelMessage mChannelMessage; +}; + +inline +ChannelModeMessage::ChannelModeMessage(ChannelMessage channelMessage) +: mChannelMessage(channelMessage) +{ +} + +inline +ChannelModeMessage::~ChannelModeMessage() +{ +} + +inline +PureEvent ChannelModeMessage::getEvent(BYTE deltaTime,BYTE channel,BYTE value) +{ + switch(mChannelMessage) + { + case AllNotesOff : + return PureEvent(MIDIParameter,deltaTime,channel,123,0); + case LocalControlOff : + return PureEvent(MIDIParameter,deltaTime,channel,122,0); + case LocalControlOn : + return PureEvent(MIDIParameter,deltaTime,channel,122,127); + case Modulation : + return PureEvent(MIDIParameter,deltaTime,channel,1,value); + case MainVolume : + return PureEvent(MIDIParameter,deltaTime,channel,7,value); + case Pan : + return PureEvent(MIDIParameter,deltaTime,channel,10,value); + case Expression : + return PureEvent(MIDIParameter,deltaTime,channel,11,value); + case Sustain : + return PureEvent(MIDIParameter,deltaTime,channel,64,value); + case ResetAllControllers : + return PureEvent(MIDIParameter,deltaTime,channel,121,0); + default : + return PureEvent(MIDIParameter,deltaTime,channel,123,0); // default is all notes off + } +} +#endif + diff --git a/midiseq/hold/EVNTBLCK.HPP b/midiseq/hold/EVNTBLCK.HPP new file mode 100644 index 0000000..15399f9 --- /dev/null +++ b/midiseq/hold/EVNTBLCK.HPP @@ -0,0 +1,8 @@ +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#define _MIDISEQ_EVENTBLOCK_HPP_ +class PureEvent; +template +class Block; +typedef Block EventBlock; +#endif + diff --git a/midiseq/hold/EVNTTMR.CPP b/midiseq/hold/EVNTTMR.CPP new file mode 100644 index 0000000..2b56904 --- /dev/null +++ b/midiseq/hold/EVNTTMR.CPP @@ -0,0 +1,11 @@ +#include + +void EventTimer::timerStarted(void) +{ + resetEvent(); +} + +void EventTimer::timerStopped(void) +{ + setEvent(); +} diff --git a/midiseq/hold/EVNTTMR.HPP b/midiseq/hold/EVNTTMR.HPP new file mode 100644 index 0000000..6386100 --- /dev/null +++ b/midiseq/hold/EVNTTMR.HPP @@ -0,0 +1,43 @@ +#ifndef _MIDISEQ_EVENTTIMER_HPP_ +#define _MIDISEQ_EVENTTIMER_HPP_ +#ifndef _COMMON_MMTIMER_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif + +class EventTimer : public Event, public MMTimer +{ +public: + EventTimer(void); + virtual ~EventTimer(); +protected: + EventTimer(const EventTimer &someEventTimer); + EventTimer &operator=(const EventTimer &someEventTimer); + virtual void timerStarted(void); + virtual void timerStopped(void); +private: +}; + +inline +EventTimer::EventTimer(void) +{ +} + +inline +EventTimer::~EventTimer() +{ +} + +inline +EventTimer::EventTimer(const EventTimer &/*someEventTimer*/) +{ // no implementation +} + +inline +EventTimer &EventTimer::operator=(const EventTimer &/*someEventTimer*/) +{ // no implementation + return *this; +} +#endif diff --git a/midiseq/hold/EVNTTYPE.HPP b/midiseq/hold/EVNTTYPE.HPP new file mode 100644 index 0000000..42e13cb --- /dev/null +++ b/midiseq/hold/EVNTTYPE.HPP @@ -0,0 +1,6 @@ +#ifndef _MIDISEQ_EVENTTYPE_HPP_ +#define _MIDISEQ_EVENTTYPE_HPP_ + +enum EventType{MetaEvent=0xFF,SystemExclusiveOne=0xF0,SystemExclusiveTwo=0xF7,NullEvent=0x00}; + +#endif diff --git a/midiseq/hold/MAIN.CPP b/midiseq/hold/MAIN.CPP new file mode 100644 index 0000000..d720d12 --- /dev/null +++ b/midiseq/hold/MAIN.CPP @@ -0,0 +1,127 @@ +#include + +void testNotes(void); +void testFile(void); + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + testFile(); +// testNotes(); + return 0; +} + +void testFile(void) +{ + String musicFileName("D:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); +// String musicFileName("C:\\WINNT\\MEDIA\\PASSPORT.MID"); + +// String musicFileName("C:\\WINNT\\MEDIA\\CANYON.MID"); +// String musicFileName("E:\\work\\SCENE\\MEDIA\\BMP\\E1M2.MID"); + + MidiData midiData(musicFileName); + midiData.play(); + while(midiData.isInPlay()); + midiData.stop(); + ::MessageBox(::GetFocus(),(LPSTR)musicFileName,(LPSTR)"End Play",MB_OK); + return; +} + +class PitchBend +{ +public: + enum {MinPitch=0x0000,MaxPitch=0x3FFF,CenterPitch=0x2000}; + PitchBend(void); + PureEvent getEvent(void)const; + void setPitch(WORD pitch); + WORD getPitch(void)const; + void centerWheel(void); +private: + BYTE getLo(void)const; + BYTE getHi(void)const; + + WORD mPitch; +}; + +inline +PitchBend::PitchBend() +: mPitch(CenterPitch) +{ +} + +inline +void PitchBend::setPitch(WORD pitch) +{ + if(pitch>MaxPitch)pitch=MaxPitch; + mPitch=pitch; +} + +inline +WORD PitchBend::getPitch(void)const +{ + return mPitch; +} + +inline +void PitchBend::centerWheel(void) +{ + mPitch=CenterPitch; +} + +inline +BYTE PitchBend::getLo(void)const +{ + return mPitch&0xFF; +} + +inline +BYTE PitchBend::getHi(void)const +{ + return mPitch>>8; +} + +inline +PureEvent PitchBend::getEvent(void)const +{ + String strPitch; + ::sprintf(strPitch.str(),"lo:0x%04lx hi:0x%04lx\n",getLo(),getHi()); + ::OutputDebugString(strPitch.str()); + PureEvent pureEvent(MIDIPitchBend,0,0,getHi(),getLo()); + return pureEvent; +} + +void testNotes(void) +{ + MIDIOutputDevice midiOut; + + NoteOn noteOn(PureNote(70,60)); + PitchBend pitchBend; + pitchBend.setPitch(0x0); + pitchBend.setPitch(0x2000+128); + +// pitchBend.setPitch(0x3FFF); + NoteOff noteOff(PureNote(70,60)); + + if(!midiOut.openDevice())return; + + midiOut.midiEvent(noteOn.getEvent()); + midiOut.midiEvent(pitchBend.getEvent()); + pitchBend.setPitch(0x2000); + midiOut.midiEvent(pitchBend.getEvent()); + + midiOut.midiEvent(noteOn.getEvent()); + + midiOut.midiEvent(noteOff.getEvent()); + + midiOut.closeDevice(); + return; +} + +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\WALTHIUS\\DEMON21T.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\CYBRBEAT.MID"); +// String musicFileName("C:\\WINDOWS\\CANYON.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\MID\\D_STALKS.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\MID\\E1M9.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\EXORCIST.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\YYZ.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\K330-1.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\K330-2.MID"); diff --git a/midiseq/hold/METAEVNT.HPP b/midiseq/hold/METAEVNT.HPP new file mode 100644 index 0000000..ffc1919 --- /dev/null +++ b/midiseq/hold/METAEVNT.HPP @@ -0,0 +1,8 @@ +#ifndef _MIDISEQ_METAEVENTTYPE_HPP_ +#define _MIDISEQ_METAEVENTTYPE_HPP_ + +enum MetaEventType{SequenceNumberEvent=0x00,TextEvent=0x01,CopyrightNotice=0x02, + SequenceTrackName=0x03,InstrumentName=0x04,Lyric=0x05,Marker=0x06,CuePoint=0x07, + ChannelPrefix=0x20,EndOfTrack=0x2F,SetTempo=0x51,SMPTEFormatSpec=0x54, + TimeSignature=0x58,KeySignature=0x59,SequencerSpecificMetaEvent=0x7F}; +#endif diff --git a/midiseq/hold/MIDIBLCK.CPP b/midiseq/hold/MIDIBLCK.CPP new file mode 100644 index 0000000..1299af8 --- /dev/null +++ b/midiseq/hold/MIDIBLCK.CPP @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include + +MIDIBlock &MIDIBlock::operator=(const MIDIBlock &someMIDIBlock) +{ + for(short itemIndex=0;itemIndex +#endif +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#include +#endif + +class String; + +class MIDIBlock +{ +public: + enum{MaxChannels=16}; + MIDIBlock(void); + MIDIBlock(const MIDIBlock &someMIDIBlock); + virtual ~MIDIBlock(); + EventBlock &operator[](WORD itemIndex); + MIDIBlock &operator=(const MIDIBlock &someMIDIBlock); + void printBlock(const String &pathFileName); +private: + EventBlock mMIDIBlock[MaxChannels]; +}; + +inline +MIDIBlock::MIDIBlock(void) +{ +} + +inline +MIDIBlock::MIDIBlock(const MIDIBlock &someMIDIBlock) +{ + *this=someMIDIBlock; +} + +inline +MIDIBlock::~MIDIBlock() +{ +} + +inline +EventBlock &MIDIBlock::operator[](WORD itemIndex) +{ + return mMIDIBlock[itemIndex]; +} +#endif + diff --git a/midiseq/hold/MIDICAPS.HPP b/midiseq/hold/MIDICAPS.HPP new file mode 100644 index 0000000..14b41ea --- /dev/null +++ b/midiseq/hold/MIDICAPS.HPP @@ -0,0 +1,120 @@ +#ifndef _MIDISEQ_MIDIOUTCAPS_HPP_ +#define _MIDISEQ_MIDIOUTCAPS_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class MIDIOutCaps : private MIDIOUTCAPS +{ +public: + enum Type{MIDIPort=MOD_MIDIPORT,SQSynth=MOD_SQSYNTH,FMSynth=MOD_FMSYNTH,Mapper=MOD_MAPPER}; + enum Channel{Channel0=0x0001,Channel1=0x0002,Channel2=0x0004,Channel3=0x0008, + Channel4=0x0010,Channel5=0x0020,Channel6=0x0040,Channel7=0x0080,Channel8=0x0100, + Channel9=0x0200,Channel10=0x0400,Channel11=0x0800,Channel12=0x1000, + Channel13=0x2000,Channel14=0x4000,Channel15=0x8000,ChannelAll=0xFFFF}; + MIDIOutCaps(void); + ~MIDIOutCaps(); + UINT deviceID(void)const; + UINT productID(void)const; + WORD driverVersion(void)const; + String productName(void)const; + Type technology(void)const; + WORD numVoices(void)const; + WORD numNotes(void)const; + WORD hasChannel(MIDIOutCaps::Channel channel)const; + WORD hasPatchCache(void)const; + WORD hasLeftRightVolume(void)const; + WORD hasVolume(void)const; + operator MIDIOUTCAPS*(void); +private: +}; + +inline +MIDIOutCaps::MIDIOutCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +MIDIOutCaps::~MIDIOutCaps() +{ +} + +inline +MIDIOutCaps::operator MIDIOUTCAPS*(void) +{ + return this; +} + +inline +UINT MIDIOutCaps::deviceID(void)const +{ + return wMid; +} + +inline +UINT MIDIOutCaps::productID(void)const +{ + return wPid; +} + +inline +WORD MIDIOutCaps::driverVersion(void)const +{ + return vDriverVersion; +} + +inline +String MIDIOutCaps::productName(void)const +{ + return szPname; +} + +inline +MIDIOutCaps::Type MIDIOutCaps::technology(void)const +{ + return (Type)wTechnology; +} + +inline +WORD MIDIOutCaps::numVoices(void)const +{ + return wVoices; +} + +inline +WORD MIDIOutCaps::numNotes(void)const +{ + return wNotes; +} + +inline +WORD MIDIOutCaps::hasChannel(MIDIOutCaps::Channel channel)const +{ + return (channel&wChannelMask); +} + +inline +WORD MIDIOutCaps::hasVolume(void)const +{ + return (WORD)(dwSupport&MIDICAPS_VOLUME); +} + +inline +WORD MIDIOutCaps::hasLeftRightVolume(void)const +{ + return (WORD)(dwSupport&MIDICAPS_LRVOLUME); +} + +inline +WORD MIDIOutCaps::hasPatchCache(void)const +{ + return (WORD)(dwSupport&MIDICAPS_CACHE); +} +#endif diff --git a/midiseq/hold/MIDIDATA.CPP b/midiseq/hold/MIDIDATA.CPP new file mode 100644 index 0000000..e846454 --- /dev/null +++ b/midiseq/hold/MIDIDATA.CPP @@ -0,0 +1,86 @@ +#include + +MidiData::MidiData(const String &midiPathFileName) +: mTimerCallback(this,&MidiData::timerEvent), + mMidiFile(midiPathFileName,FileIO::BigEndian), MidiTrack(mMidiFile) +{ + insertHandler(&mTimerCallback); + if(!readHeader(mMidiFile))return; + ::OutputDebugString(String(MidiHeader::toString()+String("\n")).str()); + setMethod(timingMethod()); +} + +MidiData::~MidiData() +{ + stopTimer(); + mMIDIOutDevice.closeDevice(); + mMIDIEventVector.size(0); +} + +WORD MidiData::play(WORD blocking) +{ + mPlayIndex=0; + mTempoChange.remove(); + if(!tracks())return FALSE; + while(readTrack()); + if(!makeRealTime())return FALSE; + startTimer(TimerDelay); + if(blocking)waitEvent(); + return TRUE; +} + +WORD MidiData::makeRealTime(void) +{ + TimeBlock timeBlock; + + if(!mTempoChange.size())return FALSE; + timeBlock.setTempo(mTempoChange[0].microsecsPerQtrNote()); + timeBlock.setDivision(method()); + timeBlock.setStartTime(getSystemTime()+TwoSecs); + timeBlock.fixTimeBlock(mMIDIEvents,mMIDIEventVector); + return TRUE; +} + +CallbackData::ReturnType MidiData::timerEvent(CallbackData &/*someCallbackData*/) +{ + DWORD currTime(getSystemTime()); + + if(!mMIDIOutDevice.hasDevice()||!mMIDIEventVector.size())return closeDevice(); + while(mMIDIEventVector[mPlayIndex].playTime()<=currTime) + { + if(!mMIDIOutDevice.midiEvent(mMIDIEventVector[mPlayIndex]))return closeDevice(); + if(++mPlayIndex>=mMIDIEventVector.size())return closeDevice(); + } + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType MidiData::closeDevice(void) +{ + mMIDIOutDevice.closeDevice(); + return (CallbackData::ReturnType)FALSE; +} + +// virtual overloads + +void MidiData::midiChannelMessage(PureEvent &midiEvent) +{ + mMIDIEvents[midiEvent.channel()].insert(&midiEvent); + return; +} + +void MidiData::setTempo(DWORD microsecsPerQtrNote) +{ + mTempoChange.insert(&TempoChange(microsecsPerQtrNote,0L)); + return; +} + +void MidiData::smpteFormat(const SMPTEFormat &someSMPTEFormat) +{ + mSMPTEFormat=someSMPTEFormat; + return; +} + +void MidiData::timeSignature(const TimeInfo &/*someTimeInfo*/) +{ + return; +} diff --git a/midiseq/hold/MIDIDATA.HPP b/midiseq/hold/MIDIDATA.HPP new file mode 100644 index 0000000..82b76c1 --- /dev/null +++ b/midiseq/hold/MIDIDATA.HPP @@ -0,0 +1,105 @@ +#ifndef _MIDISEQ_MIDIDATA_HPP_ +#define _MIDISEQ_MIDIDATA_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_PUREVECTOR_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDITRACK_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEBLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#include +#endif +#ifndef _MIDISEQ_TEMPOCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIBLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTTIMER_HPP_ +#include +#endif + +class String; + +class MidiData : public MidiHeader, public MidiTrack, public EventTimer +{ +public: + MidiData(const String &midiPathFileName); + virtual ~MidiData(); + WORD play(WORD blocking=TRUE); + WORD stop(void); + WORD isInPlay(void)const; +protected: + void setTempo(DWORD microsecsPerQtrNote); + void midiChannelMessage(PureEvent &channelEvent); + void smpteFormat(const SMPTEFormat &someSMPTEFormat); + void timeSignature(const TimeInfo &someTimeInfo); +private: + enum {TimerDelay=10,ThreeSecs=3000,TwoSecs=2000,OneSec=1000}; + WORD timerEvent(void); + WORD readTrack(void); + WORD makeRealTime(void); + void operator=(const MidiData &someMidiData); + CallbackData::ReturnType timerEvent(CallbackData &someCallbackData); + CallbackData::ReturnType closeDevice(void); + + Callback mTimerCallback; + PureVector mMIDIEventVector; + Block mTempoChange; + MIDIBlock mMIDIEvents; + MIDIOutputDevice mMIDIOutDevice; + FileIO mMidiFile; + SMPTEFormat mSMPTEFormat; + DWORD mPlayIndex; +}; + +inline +void MidiData::operator=(const MidiData &/*someMidiData*/) +{ + return; +} + +inline +WORD MidiData::readTrack(void) +{ + return MidiTrack::readTrack(); +} + +inline +WORD MidiData::stop(void) +{ + if(!isRunning())return TRUE; + return stopTimer(); +} + +inline +WORD MidiData::isInPlay(void)const +{ + return isRunning(); +} +#endif + diff --git a/midiseq/hold/MIDIHDR.HPP b/midiseq/hold/MIDIHDR.HPP new file mode 100644 index 0000000..6cd72c3 --- /dev/null +++ b/midiseq/hold/MIDIHDR.HPP @@ -0,0 +1,34 @@ +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#define _MIDISEQ_MIDIHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif + +class MidiHeader : public PureHeader +{ +public: + MidiHeader(void); + virtual ~MidiHeader(); + WORD readHeader(FileIO &fileIO); +private: +}; + +inline +MidiHeader::MidiHeader(void) +{ +} + +inline +MidiHeader::~MidiHeader() +{ +} + +inline +WORD MidiHeader::readHeader(FileIO &fileIO) +{ + return PureHeader::readHeader(fileIO); +} +#endif diff --git a/midiseq/hold/MIDIMSG.HPP b/midiseq/hold/MIDIMSG.HPP new file mode 100644 index 0000000..a232b0c --- /dev/null +++ b/midiseq/hold/MIDIMSG.HPP @@ -0,0 +1,7 @@ +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#define _MIDISEQ_MIDICHANNELMESSAGE_HPP_ + +enum MidiChannelMsg{MIDIProgramChange=0xC0,MIDINoteOff=0x80,MIDINoteOn=0x90, + MIDIKeyPressure=0xA0,MIDIParameter=0xB0,MIDIPitchBend=0xE0, + MIDIChannelPressure=0xD0}; +#endif diff --git a/midiseq/hold/MIDIOUT.CPP b/midiseq/hold/MIDIOUT.CPP new file mode 100644 index 0000000..b547c46 --- /dev/null +++ b/midiseq/hold/MIDIOUT.CPP @@ -0,0 +1,119 @@ +#include +#include + +MIDIOutputDevice::MIDIOutputDevice(void) +: mHasDevice(FALSE), mMIDIDeviceID(MIDIMAPPER) +{ + openDevice(); +} + +WORD MIDIOutputDevice::openDevice(void) +{ + closeDevice(); + if(!::midiOutGetNumDevs())return FALSE; + if(::midiOutOpen(&mhMIDIOutput,mMIDIDeviceID,0,0,0))return FALSE; + hasDevice(TRUE); + getDeviceCapabilities(); + return TRUE; +} + +void MIDIOutputDevice::closeDevice(void) +{ + if(!hasDevice())return; + ::midiOutReset(mhMIDIOutput); + ::midiOutClose(mhMIDIOutput); + hasDevice(FALSE); +} + +WORD MIDIOutputDevice::getDeviceCapabilities(void) +{ + if(!hasDevice())return FALSE; + ::memset(&mMIDIOutDevCaps,0,sizeof(MIDIOutCaps)); + if(::midiOutGetDevCaps(mMIDIDeviceID,mMIDIOutDevCaps,sizeof(MIDIOutCaps)))return FALSE; + return TRUE; +} + +WORD MIDIOutputDevice::midiEvent(const PureEvent &somePureEvent) +{ + union{DWORD dwData;BYTE bData[4];}unionData; + +// String str=(String)((PureEvent&)somePureEvent)+String("\n");; +// ::OutputDebugString(str.str()); + if(!hasDevice())return FALSE; + unionData.bData[0]=somePureEvent.eventType(); + unionData.bData[1]=somePureEvent.firstData(); + unionData.bData[2]=somePureEvent.secondData(); + unionData.bData[3]=0; + if(::midiOutShortMsg(mhMIDIOutput,unionData.dwData))return FALSE; + return TRUE; +} + +WORD MIDIOutputDevice::getLeftVolume(void)const +{ + DWORD volumeLevel; + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; +#if WINVER>=0x0400 + if(::midiOutGetVolume(mhMIDIOutput,&volumeLevel))return FALSE; +#else + if(::midiOutGetVolume(mMIDIDeviceID,&volumeLevel))return FALSE; +#endif + return LOWORD(volumeLevel); +} + +WORD MIDIOutputDevice::getRightVolume(void)const +{ + DWORD volumeLevel; + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; +#if WINVER>=0x0400 + if(::midiOutGetVolume(mhMIDIOutput,&volumeLevel))return FALSE; +#else + if(::midiOutGetVolume(mMIDIDeviceID,&volumeLevel))return FALSE; +#endif + if(!mMIDIOutDevCaps.hasLeftRightVolume())return LOWORD(volumeLevel); + return HIWORD(volumeLevel); +} + +WORD MIDIOutputDevice::setRightVolume(WORD volumeRight) +{ + DWORD volumeLevel; + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; + volumeLevel=volumeRight; + if(mMIDIOutDevCaps.hasLeftRightVolume()) + { + volumeLevel<<=8; + volumeLevel+=getLeftVolume(); + } +#if WINVER>=0x0400 + if(::midiOutSetVolume(mhMIDIOutput,volumeLevel))return FALSE; +#else + if(::midiOutSetVolume(mMIDIDeviceID,volumeLevel))return FALSE; +#endif + return TRUE; +} + +WORD MIDIOutputDevice::setLeftVolume(WORD volumeLeft) +{ + DWORD volumeLevel(0L); + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; + if(mMIDIOutDevCaps.hasLeftRightVolume()) + { + volumeLevel=getRightVolume(); + volumeLevel<<=8; + } + volumeLevel+=volumeLeft; +#if WINVER>=0x0400 + if(::midiOutSetVolume(mhMIDIOutput,volumeLevel))return FALSE; +#else + if(::midiOutSetVolume(mMIDIDeviceID,volumeLevel))return FALSE; +#endif + return TRUE; +} + diff --git a/midiseq/hold/MIDIOUT.HPP b/midiseq/hold/MIDIOUT.HPP new file mode 100644 index 0000000..af90b94 --- /dev/null +++ b/midiseq/hold/MIDIOUT.HPP @@ -0,0 +1,57 @@ +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#define _MIDISEQ_MIDIOUTDEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTCAPS_HPP_ +#include +#endif + +class MIDIOutputDevice +{ +public: + MIDIOutputDevice(void); + virtual ~MIDIOutputDevice(); + WORD midiEvent(const PureEvent &somePureEvent); + WORD hasDevice(void)const; + void closeDevice(void); + WORD openDevice(void); + WORD getRightVolume(void)const; + WORD getLeftVolume(void)const; + WORD setRightVolume(WORD volumeLevel); + WORD setLeftVolume(WORD volumeLevel); +private: + typedef HMIDIOUT MIDIHandle; + void hasDevice(WORD hasDevice); + WORD getDeviceCapabilities(void); + + UINT mMIDIDeviceID; + WORD mHasDevice; + MIDIHandle mhMIDIOutput; + MIDIOutCaps mMIDIOutDevCaps; +}; + +inline +MIDIOutputDevice::~MIDIOutputDevice(void) +{ + closeDevice(); +} + +inline +WORD MIDIOutputDevice::hasDevice(void)const +{ + return mHasDevice; +} + +inline +void MIDIOutputDevice::hasDevice(WORD hasDevice) +{ + mHasDevice=hasDevice; +} +#endif diff --git a/midiseq/hold/MIDISEQ.CPP b/midiseq/hold/MIDISEQ.CPP new file mode 100644 index 0000000..45f379c --- /dev/null +++ b/midiseq/hold/MIDISEQ.CPP @@ -0,0 +1,73 @@ +#include +#include +#include + +MidiData *lpMidiData=0; + +#if defined(__FLAT__) +#if defined(_MSC_VER) +BOOL _stdcall DllMain(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +#else +BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +#endif +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : + lpMidiData=0; + break; + case DLL_PROCESS_DETACH : + stop(); + break; + } + return TRUE; +} +#else +int CALLBACK _export LibMain(HINSTANCE /*hInstance*/,WORD /*wDataSeg*/,WORD /*wHeapSize*/,LPSTR /*lpszCmdLine*/) +{ + lpMidiData=0; + return TRUE; +} + +int CALLBACK _export WEP(int /*nExitType*/) +{ + return stop(); +} +#endif + +#if defined(_MSC_VER) +short _stdcall play(String midiPathFileName) +#else +short CALLBACK _export play(String midiPathFileName) +#endif +{ + if(lpMidiData)stop(); + lpMidiData=new MidiData(midiPathFileName); + if(!lpMidiData)return FALSE; + lpMidiData->play(); + return TRUE; +} + +#if defined(_MSC_VER) +short _stdcall stop(void) +#else +short CALLBACK _export stop(void) +#endif +{ + if(!lpMidiData)return FALSE; + lpMidiData->stop(); + delete lpMidiData; + lpMidiData=0; + return TRUE; +} + +#if defined(_MSC_VER) +short _stdcall isInPlay(void) +#else +short CALLBACK _export isInPlay(void) +#endif +{ + if(!lpMidiData)return FALSE; + return lpMidiData->isInPlay(); +} + diff --git a/midiseq/hold/MIDISEQ.HPP b/midiseq/hold/MIDISEQ.HPP new file mode 100644 index 0000000..a011f35 --- /dev/null +++ b/midiseq/hold/MIDISEQ.HPP @@ -0,0 +1,30 @@ +#ifndef _MIDISEQ_MIDISEQ_HPP_ +#define _MIDISEQ_MIDISEQ_HPP_ + +#if defined(__FLAT__) +extern "C" +{ +#if defined(_MSC_VER) +__declspec(dllexport) BOOL _stdcall DllMain(HINSTANCE hInstance,DWORD reasonCode,LPVOID lpvReserved); +#else +BOOL WINAPI DllEntryPoint(HINSTANCE hInstance,DWORD reasonCode,LPVOID lpvReserved); +#endif +} +#else +extern "C" +{ +int CALLBACK _export LibMain(HINSTANCE hInstance,WORD wDataSeg,WORD wHeapSize,LPSTR lpszCmdLine); +int CALLBACK _export WEP(int nExitType); +} +#endif + +#if defined(_MSC_VER) +__declspec(dllexport) short _stdcall play(String midiPathFileName); +__declspec(dllexport) short _stdcall stop(void); +__declspec(dllexport) short _stdcall isInPlay(void); +#else +short CALLBACK _export play(String midiPathFileName); +short CALLBACK _export stop(void); +short CALLBACK _export isInPlay(void); +#endif +#endif diff --git a/midiseq/hold/MIDITRCK.CPP b/midiseq/hold/MIDITRCK.CPP new file mode 100644 index 0000000..2535692 --- /dev/null +++ b/midiseq/hold/MIDITRCK.CPP @@ -0,0 +1,338 @@ +#include +#include + +WORD MidiTrack::readTrack(void) +{ + mBytesRead=0; + if(PureHeader::Unset==mTimingMethod)return FALSE; + if(!mMidiFile.read(mTrack,sizeof(mTrack)))return FALSE; + if(::strncmp(mTrack,"MTrk",sizeof(mTrack)))return FALSE; + if(!mMidiFile.read(mLengthData))return FALSE; + if(!mLengthData)return FALSE; + readTime(); + while(mBytesRead=mLengthData)break; + if(NullEvent==mRunningEvent){readTime();mLastEventType=mEventType;} + else mLastEventType=mRunningEvent; + } + return TRUE; +} + +void MidiTrack::readTime(void) +{ + switch(mTimingMethod) + { + case PureHeader::DeltaTime : + case PureHeader::TimeCode : + mDeltaTime=readVarLength(); + break; + } +} + +WORD MidiTrack::handleEvent(void) +{ + WORD returnCode; + + switch(mEventType) + { + case MetaEvent : + mRunningEvent=NullEvent; + returnCode=handleMetaEvent(); + break; + case SystemExclusiveOne : + case SystemExclusiveTwo : + mRunningEvent=NullEvent; + returnCode=handleSystemExclusiveEvent(); + break; + default : + returnCode=handleMIDIChannelMessage(); + break; + } + return returnCode; +} + +WORD MidiTrack::isChannelMessage(BYTE eventType)const +{ + BYTE status((eventType>>4)&0x0F); + + if((status<=0x07)||(0x0F==status))return FALSE; + if((status>=0x08&&status<=0x0B)||(status==0x0E))return 2; + return 1; +} + +WORD MidiTrack::handleMIDIChannelMessage(void) +{ + WORD returnCode; + + if(isRunningStatus(mEventType)) + { + if(NullEvent==mRunningEvent)mRunningEvent=mLastEventType; + mEventType=mLastEventType; + } + else mRunningEvent=NullEvent; + if(isChannelMessage(mEventType))returnCode=processMIDIChannelMessage(); + else returnCode=FALSE; + return returnCode; +} + +WORD MidiTrack::handleMetaEvent(void) +{ + BYTE entryType; + WORD returnCode(TRUE); + + if(!mMidiFile.read(entryType))return FALSE; + mBytesRead++; + switch(entryType) + { + case SequenceNumberEvent : + returnCode=handleMetaSequenceNumberEvent(); + break; + case TextEvent : + returnCode=handleMetaTextEvent(); + break; + case CopyrightNotice : + returnCode=handleMetaTextEvent(); + break; + case SequenceTrackName : + handleGenericMetaEvent(); + break; + case InstrumentName : + handleGenericMetaEvent(); + break; + case Lyric : + handleGenericMetaEvent(); + break; + case Marker : + handleGenericMetaEvent(); + break; + case CuePoint : + handleGenericMetaEvent(); + break; + case ChannelPrefix : + handleChannelPrefix(); + break; + case EndOfTrack : + handleGenericMetaEvent(); + returnCode=FALSE; + break; + case SetTempo : + handleSetTempoEvent(); + break; + case SMPTEFormatSpec : + handleSMPTEFormatEvent(); + break; + case TimeSignature : + handleTimeSignatureEvent(); + break; + case KeySignature : + handleGenericMetaEvent(); + break; + case SequencerSpecificMetaEvent : + handleGenericMetaEvent(); + break; + default : + handleGenericMetaEvent(); + break; + } + return returnCode; +} + +WORD MidiTrack::handleSystemExclusiveEvent(void) +{ + return handleGenericMetaEvent(); +} + +WORD MidiTrack::handleMetaSequenceNumberEvent(void) +{ + WORD sequenceNumber; + + if(!mMidiFile.read(sequenceNumber))return FALSE; + mBytesRead++; + return TRUE; +} + +WORD MidiTrack::handleMetaTextEvent(void) +{ + BYTE textLength; + BYTE textByte; + + if(!mMidiFile.read(textLength))return FALSE; + mBytesRead++; + for(short index=0;index +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTTYPE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_METAEVENTTYPE_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#include +#endif +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTE_HPP_ +#include +#endif + +class MidiTrack +{ +public: + MidiTrack(FileIO &someMidiFile); + virtual ~MidiTrack(); + void setMethod(PureHeader::Method timingMethod); + WORD readTrack(void); + DWORD lengthData(void)const; +protected: + virtual void midiChannelMessage(PureEvent &channelEvent); + virtual void setTempo(DWORD microsecondsPerQtrNote); + virtual void smpteFormat(const SMPTEFormat &someSMPTEFormat); + virtual void timeSignature(const TimeInfo &someTimeInfo); +private: + enum {TrackIDLen=4,TempoEventLength=3,TimeSignatureEventLength=4}; + void readTime(void); + WORD handleEvent(void); + WORD handleMetaEvent(void); + WORD handleMIDIChannelMessage(void); + WORD handleGenericMetaEvent(void); + WORD handleSystemExclusiveEvent(void); + WORD handleMetaTextEvent(void); + WORD handleMetaSequenceNumberEvent(void); + WORD handleTimeSignatureEvent(void); + WORD handleSetTempoEvent(void); + WORD handleSMPTEFormatEvent(void); + WORD handleChannelPrefix(void); + WORD processMIDIChannelMessage(void); + WORD isChannelMessage(BYTE eventType)const; + WORD isRunningStatus(BYTE eventType)const; + DWORD readVarLength(void); + void lengthData(DWORD lengthData); + void operator=(const MidiTrack &someMidiTrack); + + char mTrack[TrackIDLen]; + DWORD mLengthData; + BYTE mEventType; + BYTE mLastEventType; + BYTE mRunningEvent; + DWORD mEventLength; + DWORD mBytesRead; + DWORD mDeltaTime; + FileIO &mMidiFile; + PureHeader::Method mTimingMethod; + NoteOn mNoteOn; + NoteOff mNoteOff; +}; + +inline +MidiTrack::MidiTrack(FileIO &someMidiFile) +: mLengthData(0), mEventType(NullEvent), mLastEventType(NullEvent), + mRunningEvent(NullEvent), mEventLength(0), mMidiFile(someMidiFile), + mTimingMethod(PureHeader::Unset), mDeltaTime(0) +{ +} + +inline +MidiTrack::~MidiTrack() +{ +} + +inline +void MidiTrack::setMethod(PureHeader::Method timingMethod) +{ + mTimingMethod=timingMethod; +} + +inline +DWORD MidiTrack::lengthData(void)const +{ + return mLengthData; +} + +inline +void MidiTrack::lengthData(DWORD lengthData) +{ + mLengthData=lengthData; +} + +inline +WORD MidiTrack::isRunningStatus(BYTE eventType)const +{ + return (!(eventType&0x80)); +} + +inline +void MidiTrack::operator=(const MidiTrack &/*someMidiTrack*/) +{ + return; +} +#endif diff --git a/midiseq/hold/MIDITRK.CPP b/midiseq/hold/MIDITRK.CPP new file mode 100644 index 0000000..f80b1e3 --- /dev/null +++ b/midiseq/hold/MIDITRK.CPP @@ -0,0 +1,4 @@ + +WORD readTrack(FILE *lpFilePointer); + + diff --git a/midiseq/hold/NOTE.HPP b/midiseq/hold/NOTE.HPP new file mode 100644 index 0000000..89525e3 --- /dev/null +++ b/midiseq/hold/NOTE.HPP @@ -0,0 +1,12 @@ +#ifndef _MIDISEQ_NOTE_HPP_ +#define _MIDISEQ_NOTE_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTEON_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTEOFF_HPP_ +#include +#endif +#endif \ No newline at end of file diff --git a/midiseq/hold/PUREEVNT.CPP b/midiseq/hold/PUREEVNT.CPP new file mode 100644 index 0000000..c0dac26 --- /dev/null +++ b/midiseq/hold/PUREEVNT.CPP @@ -0,0 +1,32 @@ +#include +#include + +PureEvent::operator String(void) +{ + String pureEventString; + String eventString; + + pureEventString.reserve(1024); + switch(eventType()&0xF0) + { + case MIDIChannelPressure : {eventString="MIDIChannelPressure";break;} + case MIDIProgramChange : {eventString="MIDIProgramChange";break;} + case MIDIKeyPressure : {eventString="MIDIKeyPressure";break;} + case MIDIParameter : {eventString="MIDIParameter";break;} + case MIDIPitchBend : {eventString="MIDIPitchBend";break;} + case MIDINoteOff : {eventString="MIDINoteOff";break;} + case MIDINoteOn : {eventString="MIDINoteOn";break;} + default : {eventString="UNKNOWN MIDICHANNEL MESSAGE";break;} + } + ::sprintf(pureEventString, + "eventType:%3d [% 20s] deltaTime:%5ld playTime:%10ld channel:%2d byteOne:%3d byteTwo:%3d midiTime:%10ld", + (short)eventType(), + (LPSTR)eventString, + deltaTime(), + playTime(), + (short)channel(), + (short)firstData(), + (short)secondData(), + midiTime()); + return pureEventString; +} diff --git a/midiseq/hold/PUREEVNT.HPP b/midiseq/hold/PUREEVNT.HPP new file mode 100644 index 0000000..7fa89ad --- /dev/null +++ b/midiseq/hold/PUREEVNT.HPP @@ -0,0 +1,204 @@ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#define _MIDISEQ_PUREEVENT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif + +class PureEvent +{ +public: + PureEvent(void); + PureEvent(const PureEvent &somePureEvent); + PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData); + virtual ~PureEvent(); + BYTE eventType(void)const; + DWORD deltaTime(void)const; + DWORD playTime(void)const; + BYTE channel(void)const; + BYTE firstData(void)const; + BYTE secondData(void)const; + DWORD midiTime(void)const; + void eventType(BYTE eventType); + void deltaTime(DWORD deltaTime); + void playTime(DWORD playTime); + void channel(BYTE channel); + void firstData(BYTE firstData); + void secondData(BYTE secondData); + void midiTime(DWORD midiTime); + WORD operator==(const PureEvent &somePureEvent)const; + WORD operator<(const PureEvent &somePureEvent)const; + WORD operator>(const PureEvent &somePureEvent)const; + operator String(void); + PureEvent &operator=(const PureEvent &somePureEvent); +private: + BYTE mEventType; + DWORD mDeltaTime; + BYTE mChannel; + BYTE mFirstData; + BYTE mSecondData; + DWORD mPlayTime; + DWORD mMIDITime; +}; + +inline +PureEvent::PureEvent(void) +: mEventType(0), mDeltaTime(0L), mChannel(0), mFirstData(0), mSecondData(0), + mPlayTime(0L), mMIDITime(0L) +{ +} + +inline +PureEvent::PureEvent(const PureEvent &somePureEvent) +: mEventType(somePureEvent.mEventType), mDeltaTime(somePureEvent.mDeltaTime), + mPlayTime(somePureEvent.mPlayTime), mChannel(somePureEvent.mChannel), + mFirstData(somePureEvent.mFirstData), mSecondData(somePureEvent.mSecondData), + mMIDITime(somePureEvent.mMIDITime) +{ +} + +inline +PureEvent::PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData) +: mEventType(eventType), mDeltaTime(deltaTime), mChannel(channel), mFirstData(firstData), + mSecondData(secondData), mPlayTime(0L), mMIDITime(0L) +{ +} + +inline +PureEvent::~PureEvent() +{ +} + +// accessors + +inline +BYTE PureEvent::eventType(void)const +{ + return mEventType; +} + +inline +DWORD PureEvent::deltaTime(void)const +{ + return mDeltaTime; +} + +inline +DWORD PureEvent::playTime(void)const +{ + return mPlayTime; +} + +inline +DWORD PureEvent::midiTime(void)const +{ + return mMIDITime; +} + +inline +BYTE PureEvent::channel(void)const +{ + return mChannel; +} + +inline +BYTE PureEvent::firstData(void)const +{ + return mFirstData; +} + +inline +BYTE PureEvent::secondData(void)const +{ + return mSecondData; +} + +// mutators + +inline +void PureEvent::eventType(BYTE eventType) +{ + mEventType=eventType; +} + +inline +void PureEvent::deltaTime(DWORD deltaTime) +{ + mDeltaTime=deltaTime; +} + +inline +void PureEvent::playTime(DWORD playTime) +{ + mPlayTime=playTime; +} + +inline +void PureEvent::midiTime(DWORD midiTime) +{ + mMIDITime=midiTime; +} + +inline +void PureEvent::channel(BYTE channel) +{ + mChannel=channel; +} + +inline +void PureEvent::firstData(BYTE firstData) +{ + mFirstData=firstData; +} + +inline +void PureEvent::secondData(BYTE secondData) +{ + mSecondData=secondData; +} + +// comparators + +inline +WORD PureEvent::operator==(const PureEvent &somePureEvent)const +{ + return (mEventType==somePureEvent.mEventType&& + mChannel==somePureEvent.mChannel&& + mFirstData==somePureEvent.mFirstData&& + mSecondData==somePureEvent.mSecondData&& + mDeltaTime==somePureEvent.mDeltaTime&& + mPlayTime==somePureEvent.mPlayTime&& + mMIDITime==somePureEvent.mMIDITime); +} + +inline +PureEvent &PureEvent::operator=(const PureEvent &somePureEvent) +{ + eventType(somePureEvent.eventType()); + deltaTime(somePureEvent.deltaTime()); + playTime(somePureEvent.playTime()); + midiTime(somePureEvent.midiTime()); + channel(somePureEvent.channel()); + firstData(somePureEvent.firstData()); + secondData(somePureEvent.secondData()); + return *this; +} + +inline +WORD PureEvent::operator<(const PureEvent &somePureEvent)const +{ + return (mPlayTime(const PureEvent &somePureEvent)const +{ + return (mPlayTime>somePureEvent.mPlayTime); +} +#endif + diff --git a/midiseq/hold/PUREHDR.CPP b/midiseq/hold/PUREHDR.CPP new file mode 100644 index 0000000..9a43c4c --- /dev/null +++ b/midiseq/hold/PUREHDR.CPP @@ -0,0 +1,29 @@ +#include + +WORD PureHeader::readHeader(FileIO &midiFile) +{ + if(!midiFile.read(mHeader,sizeof(mHeader)))return FALSE; + if(!midiFile.read(mLengthData))return FALSE; + if(!midiFile.read(mSMFType))return FALSE; + if(!midiFile.read(mTracks))return FALSE; + if(!midiFile.read(mMethod))return FALSE; + return TRUE; +} + +String PureHeader::toString()const +{ + String strHeader; + strHeader+=mHeader; + strHeader+="\nLength:"; + strHeader+=String().fromInt(mLengthData); + strHeader+="\nType:"; + if(SingleMultiChannel==MIDIFormat(mSMFType))strHeader+="SingleMultiChannel"; + else if(SimultaneousTracks==MIDIFormat(mSMFType))strHeader+="SimultaneousTracks"; + else if(SequentialTracks==MIDIFormat(mSMFType))strHeader+="Sequential"; + else strHeader+="Unknown"; + strHeader+="\nTracks:"; + strHeader+=String().fromInt(mTracks); + strHeader+="\nMethod:"; + strHeader+=String().fromInt(mMethod); + return strHeader; +} diff --git a/midiseq/hold/PUREHDR.HPP b/midiseq/hold/PUREHDR.HPP new file mode 100644 index 0000000..f45d823 --- /dev/null +++ b/midiseq/hold/PUREHDR.HPP @@ -0,0 +1,135 @@ +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#define _MIDISEQ_PUREHEADER_HPP_ +#include +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class PureHeader +{ +public: + enum Method{TimeCode,DeltaTime,Unset}; + enum MIDIFormat{SingleMultiChannel,SimultaneousTracks,SequentialTracks}; + PureHeader(void); + PureHeader(const PureHeader &somePureHeader); + virtual ~PureHeader(); + PureHeader &operator=(const PureHeader &somePureHeader); + WORD operator==(const PureHeader &somePureHeader); + DWORD lengthData(void)const; + MIDIFormat smfType(void)const; + USHORT tracks(void)const; + USHORT method(void)const; + Method timingMethod(void)const; + String toString(void)const; +protected: + WORD readHeader(FileIO &midiFile); +private: + enum {MaxHeaderIDLength=4}; + void method(USHORT method); + void lengthData(DWORD lengthData); + void smfType(USHORT smfType); + void tracks(USHORT smfType); + + char mHeader[MaxHeaderIDLength]; + DWORD mLengthData; + USHORT mSMFType; + USHORT mTracks; + USHORT mMethod; +}; + +inline +PureHeader::PureHeader(void) +: mLengthData(0L), mSMFType(0), mTracks(0), mMethod(0) +{ + ::memset(mHeader,0,sizeof(mHeader)); +} + +inline +PureHeader::PureHeader(const PureHeader &somePureHeader) +{ + *this=somePureHeader; +} + +inline +PureHeader::~PureHeader() +{ +} + +inline +PureHeader &PureHeader::operator=(const PureHeader &somePureHeader) +{ + lengthData(somePureHeader.lengthData()); + smfType(somePureHeader.smfType()); + tracks(somePureHeader.tracks()); + method(somePureHeader.method()); + ::memcpy(mHeader,somePureHeader.mHeader,sizeof(mHeader)); + return *this; +} + +inline +WORD PureHeader::operator==(const PureHeader &somePureHeader) +{ + return (lengthData()==somePureHeader.lengthData()&& + smfType()==somePureHeader.smfType()&& + tracks()==somePureHeader.tracks()&& + method()==somePureHeader.method()&& + (0==::memcmp(mHeader,somePureHeader.mHeader,sizeof(mHeader)))); +} + +inline +DWORD PureHeader::lengthData(void)const +{ + return mLengthData; +} + +inline +void PureHeader::lengthData(DWORD lengthData) +{ + mLengthData=lengthData; +} + +inline +PureHeader::MIDIFormat PureHeader::smfType(void)const +{ + return (MIDIFormat)mSMFType; +} + +inline +void PureHeader::smfType(USHORT smfType) +{ + mSMFType=smfType; +} + +inline +USHORT PureHeader::tracks(void)const +{ + return mTracks; +} + +inline +void PureHeader::tracks(USHORT tracks) +{ + mTracks=tracks; +} + +inline +USHORT PureHeader::method(void)const +{ + return mMethod; +} + +inline +void PureHeader::method(USHORT method) +{ + mMethod=method; +} + +inline +PureHeader::Method PureHeader::timingMethod(void)const +{ + return ((mMethod>>15)?TimeCode:DeltaTime); +} +#endif diff --git a/midiseq/hold/PURENOTE.HPP b/midiseq/hold/PURENOTE.HPP new file mode 100644 index 0000000..bd418f8 --- /dev/null +++ b/midiseq/hold/PURENOTE.HPP @@ -0,0 +1,93 @@ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#define _MIDISEQ_PURENOTE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class PureNote +{ +public: + enum {PureNoteLength=2}; + PureNote(void); + PureNote(BYTE pitch,BYTE velocity); + virtual ~PureNote(); + BYTE pitch(void)const; + void pitch(BYTE pitch); + BYTE velocity(void)const; + void velocity(BYTE velocity); + PureNote &operator=(const PureNote &somePureNote); + WORD operator==(const PureNote &somePureNote)const; + FileIO &operator<<(FileIO &someFileIO); +private: + BYTE mPitch; + BYTE mVelocity; +}; + +inline +PureNote::PureNote(void) +: mPitch(0), mVelocity(0) +{ +} + +inline +PureNote::PureNote(BYTE pitch,BYTE velocity) +: mPitch(pitch), mVelocity(velocity) +{ +} + +inline +PureNote::~PureNote() +{ +} + +inline +BYTE PureNote::pitch(void)const +{ + return mPitch; +} + +inline +BYTE PureNote::velocity(void)const +{ + return mVelocity; +} + +inline +void PureNote::pitch(BYTE pitch) +{ + mPitch=pitch; +} + +inline +void PureNote::velocity(BYTE velocity) +{ + mVelocity=velocity; +} + +inline +PureNote &PureNote::operator=(const PureNote &somePureNote) +{ + pitch(somePureNote.pitch()); + velocity(somePureNote.velocity()); + return *this; +} + +inline +WORD PureNote::operator==(const PureNote &somePureNote)const +{ + return (pitch()==somePureNote.pitch()&& + velocity()==somePureNote.velocity()); +} + +inline +FileIO &PureNote::operator<<(FileIO &someFileIO) +{ + someFileIO.read(mPitch); + someFileIO.read(mVelocity); + return someFileIO; +} +#endif + diff --git a/midiseq/hold/ProgramChange.hpp b/midiseq/hold/ProgramChange.hpp new file mode 100644 index 0000000..cd20ad1 --- /dev/null +++ b/midiseq/hold/ProgramChange.hpp @@ -0,0 +1,35 @@ +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#define _MIDISEQ_PROGRAMCHANGE_HPP_ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class ProgramChange +{ +public: + ProgramChange(); + ProgramChange(BYTE programNumber); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: + BYTE mProgramNumber; +}; + +inline +ProgramChange::ProgramChange() +: mProgramNumber(0) +{ +} + +inline +ProgramChange::ProgramChange(BYTE programNumber) +: mProgramNumber(programNumber) +{ +} + +inline +PureEvent ProgramChange::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDIProgramChange,deltaTime,channel,mProgramNumber,0); + return pureEvent; +} +#endif diff --git a/midiseq/hold/SMPTE.HPP b/midiseq/hold/SMPTE.HPP new file mode 100644 index 0000000..f8b7341 --- /dev/null +++ b/midiseq/hold/SMPTE.HPP @@ -0,0 +1,146 @@ +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#define _MIDISEQ_SMPTEFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class SMPTEFormat +{ +public: + enum {SMPTEFormatLength=5}; + SMPTEFormat(void); + SMPTEFormat(const SMPTEFormat &someSMPTEFormat); + virtual ~SMPTEFormat(); + SMPTEFormat &operator=(const SMPTEFormat &someSMPTEFormat); + WORD operator==(const SMPTEFormat &someSMPTEFormat)const; + FileIO &operator<<(FileIO &midiFile); + BYTE hours(void)const; + void hours(BYTE hours); + BYTE minutes(void)const; + void minutes(BYTE minutes); + BYTE seconds(void)const; + void seconds(BYTE seconds); + BYTE frames(void)const; + void frames(BYTE frames); + BYTE hundredthFrames(void)const; + void hundredthFrames(BYTE hundredthFrames); +private: + BYTE mHours; + BYTE mMinutes; + BYTE mSeconds; + BYTE mFrames; + BYTE mHundredthFrames; +}; + +inline +SMPTEFormat::SMPTEFormat(void) +: mHours(0), mMinutes(0), mSeconds(0), mFrames(0), mHundredthFrames(0) +{ +} + +inline +SMPTEFormat::SMPTEFormat(const SMPTEFormat &someSMPTEFormat) +{ + *this=someSMPTEFormat; +} + +inline +SMPTEFormat::~SMPTEFormat() +{ +} + +inline +SMPTEFormat &SMPTEFormat::operator=(const SMPTEFormat &someSMPTEFormat) +{ + hours(someSMPTEFormat.hours()); + minutes(someSMPTEFormat.minutes()); + seconds(someSMPTEFormat.seconds()); + frames(someSMPTEFormat.frames()); + hundredthFrames(someSMPTEFormat.hundredthFrames()); + return *this; +} + +inline +WORD SMPTEFormat::operator==(const SMPTEFormat &someSMPTEFormat)const +{ + return (hours()==someSMPTEFormat.hours()&& + minutes()==someSMPTEFormat.minutes()&& + seconds()==someSMPTEFormat.seconds()&& + frames()==someSMPTEFormat.frames()&& + hundredthFrames()==someSMPTEFormat.hundredthFrames()); +} + +inline +BYTE SMPTEFormat::hours(void)const +{ + return mHours; +} + +inline +void SMPTEFormat::hours(BYTE hours) +{ + mHours=hours; +} + +inline +BYTE SMPTEFormat::minutes(void)const +{ + return mMinutes; +} + +inline +void SMPTEFormat::minutes(BYTE minutes) +{ + mMinutes=minutes; +} + +inline +BYTE SMPTEFormat::seconds(void)const +{ + return mSeconds; +} + +inline +void SMPTEFormat::seconds(BYTE seconds) +{ + mSeconds=seconds; +} + +inline +BYTE SMPTEFormat::frames(void)const +{ + return mFrames; +} + +inline +void SMPTEFormat::frames(BYTE frames) +{ + mFrames=frames; +} + +inline +BYTE SMPTEFormat::hundredthFrames(void)const +{ + return mHundredthFrames; +} + +inline +void SMPTEFormat::hundredthFrames(BYTE hundredthFrames) +{ + mHundredthFrames=hundredthFrames; +} + +inline +FileIO &SMPTEFormat::operator<<(FileIO &midiFile) +{ + midiFile.read(mHours); + midiFile.read(mMinutes); + midiFile.read(mSeconds); + midiFile.read(mFrames); + midiFile.read(mHundredthFrames); + return midiFile; +} +#endif diff --git a/midiseq/hold/STDTMPL.CPP b/midiseq/hold/STDTMPL.CPP new file mode 100644 index 0000000..f1357b7 --- /dev/null +++ b/midiseq/hold/STDTMPL.CPP @@ -0,0 +1,20 @@ +#ifndef _MSC_VER +#define _EXPAND_BLOCK_TEMPLATES_ +#define _EXPAND_VECTOR_TEMPLATES_ +//#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Block a; +//typedef PureVector b; +typedef QuickSort c; +typedef Callback d; +#endif \ No newline at end of file diff --git a/midiseq/hold/TEMPO.HPP b/midiseq/hold/TEMPO.HPP new file mode 100644 index 0000000..1103fdc --- /dev/null +++ b/midiseq/hold/TEMPO.HPP @@ -0,0 +1,87 @@ +#ifndef _MIDISEQ_TEMPOCHANGE_HPP_ +#define _MIDISEQ_TEMPOCHANGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class TempoChange +{ +public: + TempoChange(void); + TempoChange(DWORD microsecsPerQtrNote,DWORD eventIndex); + TempoChange(const TempoChange &someTempoChange); + virtual ~TempoChange(); + TempoChange &operator=(const TempoChange &someTempoChange); + WORD operator==(const TempoChange &someTempoChange)const; + DWORD microsecsPerQtrNote(void)const; + void microsecsPerQtrNote(DWORD microsecsPerQtrNote); + DWORD eventIndex(void)const; + void eventIndex(DWORD eventIndex); +private: + DWORD mMicrosecsPerQtrNote; + DWORD mEventIndex; +}; + +inline +TempoChange::TempoChange(void) +: mMicrosecsPerQtrNote(0), mEventIndex(0) +{ +} + +inline +TempoChange::TempoChange(DWORD microsecsPerQtrNote,DWORD eventIndex) +: mMicrosecsPerQtrNote(microsecsPerQtrNote), mEventIndex(eventIndex) +{ +} + +inline +TempoChange::TempoChange(const TempoChange &someTempoChange) +{ + *this=someTempoChange; +} + +inline +TempoChange::~TempoChange() +{ +} + +inline +TempoChange &TempoChange::operator=(const TempoChange &someTempoChange) +{ + microsecsPerQtrNote(someTempoChange.microsecsPerQtrNote()); + eventIndex(someTempoChange.eventIndex()); + return *this; +} + +inline +WORD TempoChange::operator==(const TempoChange &someTempoChange)const +{ + return (microsecsPerQtrNote()==someTempoChange.microsecsPerQtrNote()&& + eventIndex()==someTempoChange.eventIndex()); + +} + +inline +DWORD TempoChange::microsecsPerQtrNote(void)const +{ + return mMicrosecsPerQtrNote; +} + +inline +void TempoChange::microsecsPerQtrNote(DWORD microsecsPerQtrNote) +{ + mMicrosecsPerQtrNote=microsecsPerQtrNote; +} + +inline +DWORD TempoChange::eventIndex(void)const +{ + return mEventIndex; +} + +inline +void TempoChange::eventIndex(DWORD eventIndex) +{ + mEventIndex=eventIndex; +} +#endif diff --git a/midiseq/hold/TIMEBLCK.CPP b/midiseq/hold/TIMEBLCK.CPP new file mode 100644 index 0000000..0a675e3 --- /dev/null +++ b/midiseq/hold/TIMEBLCK.CPP @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include + +void TimeBlock::fixTimeBlock(MIDIBlock &midiEventBlocks,PureVector &sortedEvents) +{ + for(short index=0;index &sortedEvents) +{ + DWORD maxEvents(0L); + DWORD runningCount(0L); + DWORD eventCount; + QuickSort eventSorter; + + for(DWORD index=0;index &eventBlock) +{ + DWORD numEvents(eventBlock.size()); + DWORD playTime; + double realTime; + + if(!numEvents)return; + for(DWORD eventIndex=0;eventIndex &eventVector) +{ + FileHandle writeFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + WORD eventCount((WORD)eventVector.size()); + String lineBuffer; + + ::sprintf(lineBuffer,"start time:%ld",mStartTime); + writeFile.writeLine(lineBuffer); + for(short itemIndex=0;itemIndex +#endif +#ifndef _COMMON_PUREVECTOR_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#include +#endif + +class MIDIBlock; + +class TimeBlock +{ +public: + TimeBlock(void); + virtual ~TimeBlock(); + void setStartTime(DWORD startTime); + void setTempo(DWORD tempo); + void setDivision(DWORD division); + void fixTimeBlock(MIDIBlock &midiEvents,PureVector &sortedEvents); + void printBlock(String pathFileName,PureVector &eventVector); +private: + void fixTimeBlock(EventBlock &midiEventBlock); + void sortBlocks(MIDIBlock &midiEventBlocks,PureVector &sortedEvents); + void calculateRealTime(PureVector &eventBlock); + void dumpTimeVector(PureVector &eventBlock,String pathFileName); + void operator=(const TimeBlock &someTimeBlock); + + DWORD mTempo; + DWORD mDivision; + DWORD mStartTime; +}; + +inline +TimeBlock::TimeBlock(void) +: mStartTime(0L), mTempo(5000000L), mDivision(136L) +{ +} + +inline +TimeBlock::~TimeBlock() +{ +} + +inline +void TimeBlock::setStartTime(DWORD startTime) +{ + mStartTime=startTime; +} + +inline +void TimeBlock::setTempo(DWORD tempo) +{ + mTempo=tempo; +} + +inline +void TimeBlock::setDivision(DWORD division) +{ + mDivision=division; +} + +inline +void TimeBlock::operator=(const TimeBlock &/*someTimeBlock*/) +{ + return; +} +#endif + diff --git a/midiseq/hold/TIMEINFO.HPP b/midiseq/hold/TIMEINFO.HPP new file mode 100644 index 0000000..831adb3 --- /dev/null +++ b/midiseq/hold/TIMEINFO.HPP @@ -0,0 +1,125 @@ +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#define _MIDISEQ_TIMEINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class TimeInfo +{ +public: + enum {LengthTimeInfo=4}; + TimeInfo(void); + TimeInfo(const TimeInfo &someTimeInfo); + TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote); + virtual ~TimeInfo(); + TimeInfo &operator=(const TimeInfo &someTimeInfo); + WORD operator==(const TimeInfo &someTimeInfo)const; + BYTE numerator(void)const; + void numerator(BYTE numerator); + BYTE denominator(void)const; + void denominator(BYTE denominator); + BYTE midiClocksPerMetronome(void)const; + void midiClocksPerMetronome(BYTE midiClocksPerMetronome); + BYTE thirtySecondNotesPerQtrNote(void)const; + void thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote); +private: + enum{MidiClocksPerQtrNote=24}; + BYTE mNumerator; + BYTE mDenominator; + BYTE mMidiClocksPerMetronome; + BYTE mThirtySecondNotesPerQtrNote; +}; + +inline +TimeInfo::TimeInfo(void) +: mNumerator(0), mDenominator(0), mMidiClocksPerMetronome(0), + mThirtySecondNotesPerQtrNote(0) +{ +} + +inline +TimeInfo::TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote) +: mNumerator(numerator), mDenominator(denominator), + mMidiClocksPerMetronome(midiClocksPerMetronome), + mThirtySecondNotesPerQtrNote(thirtySecondNotesPerQtrNote) +{ +} + +inline +TimeInfo::TimeInfo(const TimeInfo &someTimeInfo) +{ + *this=someTimeInfo; +} + +inline +TimeInfo::~TimeInfo() +{ +} + +inline +TimeInfo &TimeInfo::operator=(const TimeInfo &someTimeInfo) +{ + numerator(someTimeInfo.numerator()); + denominator(someTimeInfo.denominator()); + midiClocksPerMetronome(someTimeInfo.midiClocksPerMetronome()); + thirtySecondNotesPerQtrNote(someTimeInfo.thirtySecondNotesPerQtrNote()); + return *this; +} + +inline +WORD TimeInfo::operator==(const TimeInfo &someTimeInfo)const +{ + return (numerator()==someTimeInfo.numerator()&& + denominator()==someTimeInfo.denominator()&& + midiClocksPerMetronome()==someTimeInfo.midiClocksPerMetronome()&& + thirtySecondNotesPerQtrNote()==someTimeInfo.thirtySecondNotesPerQtrNote()); +} + +inline +BYTE TimeInfo::numerator(void)const +{ + return mNumerator; +} + +inline +void TimeInfo::numerator(BYTE numerator) +{ + mNumerator=numerator; +} + +inline +BYTE TimeInfo::denominator(void)const +{ + return mDenominator; +} + +inline +void TimeInfo::denominator(BYTE denominator) +{ + mDenominator=denominator; +} + +inline +BYTE TimeInfo::midiClocksPerMetronome(void)const +{ + return mMidiClocksPerMetronome; +} + +inline +void TimeInfo::midiClocksPerMetronome(BYTE midiClocksPerMetronome) +{ + mMidiClocksPerMetronome=midiClocksPerMetronome; +} + +inline +BYTE TimeInfo::thirtySecondNotesPerQtrNote(void)const +{ + return mThirtySecondNotesPerQtrNote; +} + +inline +void TimeInfo::thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote) +{ + mThirtySecondNotesPerQtrNote=thirtySecondNotesPerQtrNote; +} +#endif diff --git a/midiseq/hold/noteoff.hpp b/midiseq/hold/noteoff.hpp new file mode 100644 index 0000000..6f78dcf --- /dev/null +++ b/midiseq/hold/noteoff.hpp @@ -0,0 +1,50 @@ +#ifndef _MIDISEQ_NOTEOFF_HPP_ +#define _MIDISEQ_NOTEOFF_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class NoteOff : public PureNote +{ +public: + NoteOff(void); + NoteOff(const PureNote &pureNote); + NoteOff &operator=(const PureNote &pureNote); + virtual ~NoteOff(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: +}; + +inline +NoteOff::NoteOff(void) +{ +} + +inline +NoteOff::NoteOff(const PureNote &pureNote) +{ + *this=pureNote; +} + +inline +NoteOff &NoteOff::operator=(const PureNote &pureNote) +{ + (PureNote&)*this=pureNote; + return *this; +} + +inline +NoteOff::~NoteOff() +{ +} + +inline +PureEvent NoteOff::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDINoteOff,deltaTime,channel,pitch(),velocity()); + return pureEvent; +} +#endif diff --git a/midiseq/hold/noteon.hpp b/midiseq/hold/noteon.hpp new file mode 100644 index 0000000..beb0292 --- /dev/null +++ b/midiseq/hold/noteon.hpp @@ -0,0 +1,50 @@ +#ifndef _MIDISEQ_NOTEON_HPP_ +#define _MIDISEQ_NOTEON_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class NoteOn : public PureNote +{ +public: + NoteOn(void); + NoteOn(const PureNote &pureNote); + NoteOn &operator=(const PureNote &pureNote); + virtual ~NoteOn(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: +}; + +inline +NoteOn::NoteOn(void) +{ +} + +inline +NoteOn::NoteOn(const PureNote &pureNote) +{ + *this=pureNote; +} + +inline +NoteOn::~NoteOn() +{ +} + +inline +NoteOn &NoteOn::operator=(const PureNote &pureNote) +{ + (PureNote&)*this=pureNote; + return *this; +} + +inline +PureEvent NoteOn::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDINoteOn,deltaTime,channel,pitch(),velocity()); + return pureEvent; +} +#endif diff --git a/midiseq/main.cpp b/midiseq/main.cpp new file mode 100644 index 0000000..b26c6bb --- /dev/null +++ b/midiseq/main.cpp @@ -0,0 +1,46 @@ +#include +#include +#include + +void testNotes(void); +void testFile(void); + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + testFile(); + return 0; +} + +void testFile(void) +{ + Block deviceNames; + MIDIOutputDevice::getDeviceNames(deviceNames); + for(int index=0;index continue'ed system exclusives are */ + /* not collapsed. */ + long Mf_currtime; /* current time in delta-time units */ + +/* private stuff */ + long Mf_toberead; + long Mf_numbyteswritten; + + char *Msgbuff; /* message buffer */ + int Msgsize; /* Size of currently allocated Msg */ + int Msgindex; /* index of next available location in Msg */ + +}; + +float mf_ticks2sec(unsigned long ticks,int division,unsigned int tempo); +unsigned long mf_sec2ticks(float secs,int division, unsigned int tempo); + +void mferror(struct MF * mf, char * s); + +/*void mfwrite(); */ + + +/* MIDI status commands most significant bit is 1 */ +#define note_off 0x80 +#define note_on 0x90 +#define poly_aftertouch 0xa0 +#define control_change 0xb0 +#define program_chng 0xc0 +#define channel_aftertouch 0xd0 +#define pitch_wheel 0xe0 +#define system_exclusive 0xf0 +#define delay_packet (1111) + +/* 7 bit controllers */ +#define damper_pedal 0x40 +#define portamento 0x41 +#define sostenuto 0x42 +#define soft_pedal 0x43 +#define general_4 0x44 +#define hold_2 0x45 +#define general_5 0x50 +#define general_6 0x51 +#define general_7 0x52 +#define general_8 0x53 +#define tremolo_depth 0x5c +#define chorus_depth 0x5d +#define detune 0x5e +#define phaser_depth 0x5f + +/* parameter values */ +#define data_inc 0x60 +#define data_dec 0x61 + +/* parameter selection */ +#define non_reg_lsb 0x62 +#define non_reg_msb 0x63 +#define reg_lsb 0x64 +#define reg_msb 0x65 + +/* Standard MIDI Files meta event definitions */ +#define meta_event 0xFF +#define sequence_number 0x00 +#define text_event 0x01 +#define copyright_notice 0x02 +#define sequence_name 0x03 +#define instrument_name 0x04 +#define lyric 0x05 +#define marker 0x06 +#define cue_point 0x07 +#define channel_prefix 0x20 +#define end_of_track 0x2f +#define set_tempo 0x51 +#define smpte_offset 0x54 +#define time_signature 0x58 +#define key_signature 0x59 +#define sequencer_specific 0x74 + +/* Manufacturer's ID number */ +#define Seq_Circuits (0x01) /* Sequential Circuits Inc. */ +#define Big_Briar (0x02) /* Big Briar Inc. */ +#define Octave (0x03) /* Octave/Plateau */ +#define Moog (0x04) /* Moog Music */ +#define Passport (0x05) /* Passport Designs */ +#define Lexicon (0x06) /* Lexicon */ +#define Tempi (0x20) /* Bon Tempi */ +#define Siel (0x21) /* S.I.E.L. */ +#define Kawai (0x41) +#define Roland (0x42) +#define Korg (0x42) +#define Yamaha (0x43) + +/* miscellaneous definitions */ +#define MThd 0x4d546864 +#define MTrk 0x4d54726b +#define lowerbyte(x) ((unsigned char)(x & 0xff)) +#define upperbyte(x) ((unsigned char)((x & 0xff00)>>8)) + +/* the midifile interface */ +void midifile(struct MF * mf); + +/***** midifile.c ******/ + +/* + * midifile 1.11 + * + * Read and write a MIDI file. Externally-assigned function pointers are + * called upon recognizing things in the file. + * + * Original release ? + * June 1989 - Added writing capability, M. Czeiszperger. + * + * The file format implemented here is called + * Standard MIDI Files, and is part of the Musical + * instrument Digital Interface specification. + * The spec is avaiable from: + * + * International MIDI Association + * 5316 West 57th Street + * Los Angeles, CA 90056 + * + * An in-depth description of the spec can also be found + * in the article "Introducing Standard MIDI Files", published + * in Electronic Musician magazine, April, 1989. + * + */ + +#include +#include +#include +#include +//#include + +#define NULLFUNC NULL + +static void readheader(struct MF * mf); +static int readtrack(struct MF * mf); +static void chanmessage(struct MF * mf,int status,int c1,int c2); +static void msginit(struct MF * mf); +static void msgadd(struct MF * mf,int c); +static void metaevent(struct MF * mf, int type); +static void sysex(struct MF * mf); +static int msgleng(struct MF * mf); +static void badbyte(struct MF * mf,int c); +static void biggermsg(struct MF * mf); + + +static long readvarinum(struct MF * mf); +static long read32bit(struct MF * mf); +static long to32bit(int, int, int, int); +static int read16bit(struct MF * mf); +static int to16bit(int, int); +static char * msg(struct MF * mf); + +/* The only non-static function in this file. */ +void mfread(struct MF * mf) +{ + if ( mf->Mf_getc == NULLFUNC ) + mferror(mf, "mfread() called without setting Mf_getc"); + + readheader(mf); + while ( readtrack(mf) ) + ; +} + +/* for backward compatibility with the original lib */ +void midifile(struct MF * mf) +{ + mfread(mf); +} + +/* read through the "MThd" or "MTrk" header string */ +static int readmt(struct MF * mf, char * s) +{ + int n = 0; + char *p = s; + int c; + + while ( n++<4 && (c=mf->Mf_getc(mf)) != EOF ) { + if ( c != *p++ ) { + char buff[32]; + (void) strcpy(buff, "expecting "); + (void) strcat(buff, s); + mferror(mf, buff); + } + } + return c; +} + +/* read a single character and abort on EOF */ +static int egetc(struct MF * mf) +{ + int c = mf->Mf_getc(mf); + + if ( c == EOF ) + mferror(mf, "premature EOF"); + mf->Mf_toberead--; + return c; +} + +/* read a header chunk */ +static void readheader(struct MF * mf) +{ + int format, ntrks, division; + + if ( readmt(mf, "MThd") == EOF ) + return; + + mf->Mf_toberead = read32bit(mf); + format = read16bit(mf); + ntrks = read16bit(mf); + division = read16bit(mf); + + if ( mf->Mf_header ) + (*mf->Mf_header)(mf, format,ntrks,division); + + /* flush any extra stuff, in case the length of header is not 6 */ + while ( mf->Mf_toberead > 0 ) + (void) egetc(mf); +} + +static int readtrack(struct MF * mf) /* read a track chunk */ +{ + /* This array is indexed by the high half of a status byte. It's */ + /* value is either the number of bytes needed (1 or 2) for a channel */ + /* message, or 0 (meaning it's not a channel message). */ + static int chantype[] = { + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 through 0x70 */ + 2, 2, 2, 2, 1, 1, 2, 0 /* 0x80 through 0xf0 */ + }; + long lookfor; + int c, c1, type; + int sysexcontinue = 0; /* 1 if last message was an unfinished sysex */ + int running = 0; /* 1 when running status used */ + int status = 0; /* status value (e.g. 0x90==note-on) */ + int needed; + + if ( readmt(mf, "MTrk") == EOF ) + return(0); + + mf->Mf_toberead = read32bit(mf); + mf->Mf_currtime = 0; + + if ( mf->Mf_trackstart ) + (*mf->Mf_trackstart)(mf); + + while ( mf->Mf_toberead > 0 ) { + + mf->Mf_currtime += readvarinum(mf); /* delta time */ + + c = egetc(mf); + + if ( sysexcontinue && c != 0xf7 ) + mferror(mf, "didn't find expected continuation of a sysex"); + + if ( (c & 0x80) == 0 ) { /* running status? */ + if ( status == 0 ) + mferror(mf, "unexpected running status"); + running = 1; + } + else { + status = c; + running = 0; + } + + needed = chantype[ (status>>4) & 0xf ]; + + if ( needed ) { /* ie. is it a channel message? */ + + if ( running ) + c1 = c; + else + c1 = egetc(mf); + chanmessage(mf, status, c1, (needed>1)? egetc(mf): 0); + continue;; + } + + switch ( c ) { + + case 0xff: /* meta event */ + + type = egetc(mf); + lookfor = mf->Mf_toberead - readvarinum(mf); + msginit(mf); + + while ( mf->Mf_toberead > lookfor ) + msgadd(mf, egetc(mf)); + + metaevent(mf, type); + break; + + case 0xf0: /* start of system exclusive */ + + lookfor = mf->Mf_toberead - readvarinum(mf); + msginit(mf); + msgadd(mf, 0xf0); + + while ( mf->Mf_toberead > lookfor ) + msgadd(mf, c=egetc(mf)); + + if ( c==0xf7 || mf->Mf_nomerge==0 ) + sysex(mf); + else + sysexcontinue = 1; /* merge into next msg */ + break; + + case 0xf7: /* sysex continuation or arbitrary stuff */ + + lookfor = mf->Mf_toberead - readvarinum(mf); + + if ( ! sysexcontinue ) + msginit(mf); + + while ( mf->Mf_toberead > lookfor ) + msgadd(mf, c=egetc(mf)); + + if ( ! sysexcontinue ) { + if ( mf->Mf_arbitrary ) + (*mf->Mf_arbitrary)(mf, msgleng(mf),msg(mf)); + } + else if ( c == 0xf7 ) { + sysex(mf); + sysexcontinue = 0; + } + break; + default: + badbyte(mf, c); + break; + } + } + if ( mf->Mf_trackend ) + (*mf->Mf_trackend)(mf); + return(1); +} + +static void badbyte(struct MF * mf,int c) +{ + char buff[32]; + + (void) sprintf(buff,"unexpected byte: 0x%02x",c); + mferror(mf, buff); +} + +static void metaevent(struct MF * mf, int type) +{ + int leng = msgleng(mf); + char *m = msg(mf); + + switch ( type ) { + case 0x00: + if ( mf->Mf_seqnum ) + (*mf->Mf_seqnum)(mf, to16bit(m[0],m[1])); + break; + case 0x01: /* Text event */ + case 0x02: /* Copyright notice */ + case 0x03: /* Sequence/Track name */ + case 0x04: /* Instrument name */ + case 0x05: /* Lyric */ + case 0x06: /* Marker */ + case 0x07: /* Cue point */ + case 0x08: + case 0x09: + case 0x0a: + case 0x0b: + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + /* These are all text events */ + if ( mf->Mf_text ) + (*mf->Mf_text)(mf, type,leng,m); + break; + case 0x2f: /* End of Track */ + if ( mf->Mf_eot ) + (*mf->Mf_eot)(mf); + break; + case 0x51: /* Set tempo */ + if ( mf->Mf_tempo ) + (*mf->Mf_tempo)(mf, to32bit(0,m[0],m[1],m[2])); + break; + case 0x54: + if ( mf->Mf_smpte ) + (*mf->Mf_smpte)(mf, m[0],m[1],m[2],m[3],m[4]); + break; + case 0x58: + if ( mf->Mf_timesig ) + (*mf->Mf_timesig)(mf, m[0],m[1],m[2],m[3]); + break; + case 0x59: + if ( mf->Mf_keysig ) + (*mf->Mf_keysig)(mf, m[0],m[1]); + break; + case 0x7f: + if ( mf->Mf_seqspecific ) + (*mf->Mf_seqspecific)(mf, type, leng, m); + break; + default: + if ( mf->Mf_metamisc ) + (*mf->Mf_metamisc)(mf, type,leng,m); + } +} + +static void sysex(struct MF * mf) +{ + if ( mf->Mf_sysex ) + (*mf->Mf_sysex)(mf, msgleng(mf),msg(mf)); +} + +static void chanmessage(struct MF * mf,int status,int c1,int c2) +{ + int chan = status & 0xf; + + switch ( status & 0xf0 ) { + case 0x80: + if ( mf->Mf_noteoff ) + (*mf->Mf_noteoff)(mf, chan,c1,c2); + break; + case 0x90: + if ( mf->Mf_noteon ) + (*mf->Mf_noteon)(mf, chan,c1,c2); + break; + case 0xa0: + if ( mf->Mf_pressure ) + (*mf->Mf_pressure)(mf, chan,c1,c2); + break; + case 0xb0: + if ( mf->Mf_parameter ) + (*mf->Mf_parameter)(mf, chan,c1,c2); + break; + case 0xe0: + if ( mf->Mf_pitchbend ) + (*mf->Mf_pitchbend)(mf, chan,c1,c2); + break; + case 0xc0: + if ( mf->Mf_program ) + (*mf->Mf_program)(mf, chan,c1); + break; + case 0xd0: + if ( mf->Mf_chanpressure ) + (*mf->Mf_chanpressure)(mf, chan,c1); + break; + } +} + +/* readvarinum - read a varying-length number, and return the */ +/* number of characters it took. */ + +static long readvarinum(struct MF * mf) +{ + long value; + int c; + + c = egetc(mf); + value = c; + if ( c & 0x80 ) { + value &= 0x7f; + do { + c = egetc(mf); + value = (value << 7) + (c & 0x7f); + } while (c & 0x80); + } + return (value); +} + +static long to32bit(int c1,int c2,int c3,int c4) +{ + long value = 0L; + + value = (c1 & 0xff); + value = (value<<8) + (c2 & 0xff); + value = (value<<8) + (c3 & 0xff); + value = (value<<8) + (c4 & 0xff); + return (value); +} + +static int to16bit(int c1,int c2) +{ + return ((c1 & 0xff ) << 8) + (c2 & 0xff); +} + +static long read32bit(struct MF * mf) +{ + int c1, c2, c3, c4; + + c1 = egetc(mf); + c2 = egetc(mf); + c3 = egetc(mf); + c4 = egetc(mf); + return to32bit(c1,c2,c3,c4); +} + +static int read16bit(struct MF * mf) +{ + int c1, c2; + c1 = egetc(mf); + c2 = egetc(mf); + return to16bit(c1,c2); +} + +/* static */ +void mferror(struct MF * mf, char * s) +{ + if ( mf->Mf_error ) + (*mf->Mf_error)(mf, s); + exit(1); +} + +/* The code below allows collection of a system exclusive message of */ +/* arbitrary length. The Msgbuff is expanded as necessary. The only */ +/* visible data/routines are msginit(), msgadd(), msg(), msgleng(). */ + +#define MSGINCREMENT 128 + +static void msginit(struct MF * mf) +{ + mf->Msgindex = 0; +} + +static char * msg(struct MF * mf) +{ + return(mf->Msgbuff); +} + +static int msgleng(struct MF * mf) +{ + return(mf->Msgindex); +} + +static void msgadd(struct MF * mf,int c) +{ + /* If necessary, allocate larger message buffer. */ + if ( mf->Msgindex >= mf->Msgsize ) + biggermsg(mf); + mf->Msgbuff[mf->Msgindex++] = c; +} + +static void biggermsg(struct MF * mf) +{ + char *newmess; + char *oldmess = mf->Msgbuff; + int oldleng = mf->Msgsize; + + mf->Msgsize += MSGINCREMENT; + newmess = (char *) malloc( (unsigned)(sizeof(char) * mf->Msgsize) ); + + if(newmess == NULL) + mferror(mf, "malloc error!"); + + /* copy old message into larger new one */ + if ( oldmess != NULL ) { + register char *p = newmess; + register char *q = oldmess; + register char *endq = &oldmess[oldleng]; + + for ( ; q!=endq ; p++,q++ ) + *p = *q; + free(oldmess); + } + mf->Msgbuff = newmess; +} + +#if 0 /* saving time not converting write function at this time + */ +/* + * mfwrite() - The only fuction you'll need to call to write out + * a midi file. + * + * format 0 - Single multi-channel track + * 1 - Multiple simultaneous tracks + * 2 - One or more sequentially independent + * single track patterns + * ntracks The number of tracks in the file. + * division This is kind of tricky, it can represent two + * things, depending on whether it is positive or negative + * (bit 15 set or not). If bit 15 of division is zero, + * bits 14 through 0 represent the number of delta-time + * "ticks" which make up a quarter note. If bit 15 of + * division is a one, delta-times in a file correspond to + * subdivisions of a second similiar to SMPTE and MIDI + * time code. In this format bits 14 through 8 contain + * one of four values - 24, -25, -29, or -30, + * corresponding to the four standard SMPTE and MIDI + * time code frame per second formats, where -29 + * represents 30 drop frame. The second byte + * consisting of bits 7 through 0 corresponds the the + * resolution within a frame. Refer the Standard MIDI + * Files 1.0 spec for more details. + * fp This should be the open file pointer to the file you + * want to write. It will have be a global in order + * to work with Mf_putc. + */ +void +mfwrite(format,ntracks,division,fp) +int format,ntracks,division; +FILE *fp; +{ + int i; void mf_write_track_chunk(), mf_write_header_chunk(); + + if ( mf->Mf_putc == NULLFUNC ) + mferror(mf, "mfmf_write() called without setting Mf_putc"); + + if ( mf->Mf_writetrack == NULLFUNC ) + mferror(mf, "mfmf_write() called without setting Mf_mf_writetrack"); + + /* every MIDI file starts with a header */ + mf_write_header_chunk(format,ntracks,division); + + /* In format 1 files, the first track is a tempo map */ + if(format == 1 && ( mf->Mf_writetempotrack )) + { + (*mf->Mf_writetempotrack)(); + } + + /* The rest of the file is a series of tracks */ + for(i = 0; i < ntracks; i++) + mf_write_track_chunk(i,fp); +} + +void +mf_write_track_chunk(which_track,fp) +int which_track; +FILE *fp; +{ + unsigned long trkhdr,trklength; + long offset, place_marker; + void write16bit(),write32bit(); + + + trkhdr = MTrk; + trklength = 0; + + /* Remember where the length was written, because we don't + know how long it will be until we've finished writing */ + offset = ftell(fp); + +#ifdef DEBUG + printf("offset = %d\n",(int) offset); +#endif + + /* Write the track chunk header */ + write32bit(trkhdr); + write32bit(trklength); + + mf->Mf_numbyteswritten = 0L; /* the header's length doesn't count */ + + if( mf->Mf_writetrack ) + { + (*mf->Mf_writetrack)(which_track); + } + + /* mf_write End of track meta event */ + eputc(mf, 0); + eputc(mf, meta_event); + eputc(mf, end_of_track); + + eputc(mf, 0); + + /* It's impossible to know how long the track chunk will be beforehand, + so the position of the track length data is kept so that it can + be written after the chunk has been generated */ + place_marker = ftell(fp); + + /* This method turned out not to be portable because the + parameter returned from ftell is not guaranteed to be + in bytes on every machine */ + /* track.length = place_marker - offset - (long) sizeof(track); */ + +#ifdef DEBUG +printf("length = %d\n",(int) trklength); +#endif + + if(fseek(fp,offset,0) < 0) + mferror(mf, "error seeking during final stage of write"); + + trklength = mf->Mf_numbyteswritten; + + /* Re-mf_write the track chunk header with right length */ + write32bit(trkhdr); + write32bit(trklength); + + fseek(fp,place_marker,0); +} /* End gen_track_chunk() */ + + +void +mf_write_header_chunk(format,ntracks,division) +int format,ntracks,division; +{ + unsigned long ident,length; + void write16bit(),write32bit(); + + ident = MThd; /* Head chunk identifier */ + length = 6; /* Chunk length */ + + /* individual bytes of the header must be written separately + to preserve byte order across cpu types :-( */ + write32bit(ident); + write32bit(length); + write16bit(format); + write16bit(ntracks); + write16bit(division); +} /* end gen_header_chunk() */ + + +#ifdef WHENISTHISNEEDED +/* + * mf_write_midi_event() + * + * Library routine to mf_write a single MIDI track event in the standard MIDI + * file format. The format is: + * + * + * + * In this case, event can be any multi-byte midi message, such as + * "note on", "note off", etc. + * + * delta_time - the time in ticks since the last event. + * type - the type of meta event. + * chan - The midi channel. + * data - A pointer to a block of chars containing the META EVENT, + * data. + * size - The length of the meta-event data. + */ +int +mf_write_midi_event(delta_time, type, chan, data, size) +unsigned long delta_time; +unsigned int chan,type; +unsigned long size; +unsigned char *data; +{ + int i; + void WriteVarLen(); + unsigned char c; + + WriteVarLen(delta_time); + + /* all MIDI events start with the type in the first four bits, + and the channel in the lower four bits */ + c = type | chan; + + if(chan > 15) + perror("error: MIDI channel greater than 16\n"); + + eputc(mf, c); + + /* write out the data bytes */ + for(i = 0; i < size; i++) + eputc(mf, data[i]); + + return(size); +} /* end mf_write MIDI event */ + +/* + * mf_write_meta_event() + * + * Library routine to mf_write a single meta event in the standard MIDI + * file format. The format of a meta event is: + * + * + * + * delta_time - the time in ticks since the last event. + * type - the type of meta event. + * data - A pointer to a block of chars containing the META EVENT, + * data. + * size - The length of the meta-event data. + */ +int +mf_write_meta_event(delta_time, type, data, size) +unsigned long delta_time; +unsigned char *data,type; +unsigned long size; +{ + int i; + + WriteVarLen(delta_time); + + /* This marks the fact we're writing a meta-event */ + eputc(mf, meta_event); + + /* The type of meta event */ + eputc(mf, type); + + /* The length of the data bytes to follow */ + WriteVarLen(size); + + for(i = 0; i < size; i++) + { + if(eputc(mf, data[i]) != data[i]) + return(-1); + } + return(size); +} /* end mf_write_meta_event */ + +void +mf_write_tempo(tempo) +unsigned long tempo; +{ + /* Write tempo */ + /* all tempos are written as 120 beats/minute, */ + /* expressed in microseconds/quarter note */ + eputc(mf, 0); + eputc(mf, meta_event); + eputc(mf, set_tempo); + + eputc(mf, 3); + eputc(mf, (unsigned)(0xff & (tempo >> 16))); + eputc(mf, (unsigned)(0xff & (tempo >> 8))); + eputc(mf, (unsigned)(0xff & tempo)); +} + +#endif +/* + * Write multi-length bytes to MIDI format files + */ +void +WriteVarLen(value) +unsigned long value; +{ + unsigned long buffer; + + buffer = value & 0x7f; + while((value >>= 7) > 0) + { + buffer <<= 8; + buffer |= 0x80; + buffer += (value & 0x7f); + } + while(1){ + eputc(mf, (unsigned)(buffer & 0xff)); + + if(buffer & 0x80) + buffer >>= 8; + else + return; + } +}/* end of WriteVarLen */ + + +/* + * write32bit() + * write16bit() + * + * These routines are used to make sure that the byte order of + * the various data types remains constant between machines. This + * helps make sure that the code will be portable from one system + * to the next. It is slightly dangerous that it assumes that longs + * have at least 32 bits and ints have at least 16 bits, but this + * has been true at least on PCs, UNIX machines, and Macintosh's. + * + */ +void +write32bit(data) +unsigned long data; +{ + eputc(mf, x(unsigned)((data >> 24) & 0xff)); + eputc(mf, (unsigned)((data >> 16) & 0xff)); + eputc(mf, (unsigned)((data >> 8 ) & 0xff)); + eputc(mf, (unsigned)(data & 0xff)); +} + +void +write16bit(data) +int data; +{ + eputc(mf, (unsigned)((data & 0xff00) >> 8)); + eputc(mf, (unsigned)(data & 0xff)); +} + +/* write a single character and abort on error */ +eputc(mf, c) +unsigned char c; +{ + int return_val; + + if((mf->Mf_putc) == NULLFUNC) + { + mferror(mf, "Mf_putc undefined"); + return(-1); + } + + return_val = (mf->Mf_putc)(mf, c); + + if ( return_val == EOF ) + mferror(mf, "error writing"); + + mf->Mf_numbyteswritten++; + return(return_val); +} + +#endif + +unsigned long mf_sec2ticks(float secs,int division, unsigned int tempo) +{ + return (long)(((secs * 1000.0) / 4.0 * division) / tempo); +} + + +/* + * This routine converts delta times in ticks into seconds. The + * else statement is needed because the formula is different for tracks + * based on notes and tracks based on SMPTE times. + * + */ +float mf_ticks2sec(unsigned long ticks,int division,unsigned int tempo) +{ + float smpte_format, smpte_resolution; + + if(division > 0) + return ((float) (((float)(ticks) * (float)(tempo)) / ((float)(division) * 1000000.0))); + else + { + smpte_format = upperbyte(division); + smpte_resolution = lowerbyte(division); + return (float) ((float) ticks / (smpte_format * smpte_resolution * 1000000.0)); + } +} /* end of ticks2sec() */ + +/* code to utilize the interface */ + +#define TRACE(x, y) do { if (x) printf y; } while (0) + + +typedef unsigned long ulg; +typedef unsigned char uch; +typedef unsigned int ui; + +#ifndef MIDI2RTTTL + +#include "readmidi.h" + +#else /* MIDI2RTTTL */ + +struct NoteInfo +{ + int beats; + int nrnotes; + struct Notes { + ui note : 4; + ui scale : 4; + ui length : 4; + ui lextra : 4; + } note[1]; +}; + +#endif /* MIDI2RTTTL */ + +#define IBUFSIZE 1024 +struct MFX +{ + struct MF mfi; + struct NoteInfo * ni; + int allocated; + + int division; + int trackstate; + + int prevnoteonpitch; /* -1, nothing, 0 pause, 1-x note. */ + ulg prevnoteontime; + + struct { + int fd; + uch buf[IBUFSIZE]; + int len; + int p; + } istrm; +}; + +enum { TRK_NONE, TRK_READING, TRK_FINISHED }; + +#define ALLOCSIZE 256 + +#define NIALLOC(size) (struct NoteInfo *)malloc(sizeof (struct NoteInfo) + ((size) - 1) * sizeof (struct Notes)) + +#define NIREALLOC(ni, size) (struct NoteInfo *)realloc((ni), sizeof (struct NoteInfo) + ((size) - 1) * sizeof (struct Notes)) + + +static void lm_error(struct MF * mf, char * s); + +static int lm_getc(struct MF * mf); +static void lm_header(struct MF * mf, int, int, int); +static void lm_trackstart(struct MF * mf); +static void lm_trackend(struct MF * mf); +static void lm_tempo(struct MF *, long); +static void lm_noteon(struct MF *, int, int, int); +static void lm_noteoff(struct MF *, int, int, int); + + +struct NoteInfo * readmidi(int fd) +{ + struct MFX mfxi = { { 0 } }; + struct MF * mf = (struct MF *)&mfxi; + + mfxi.ni = NIALLOC(ALLOCSIZE); + mfxi.allocated = ALLOCSIZE; + + /* set variables to their initial values */ + mfxi.division = 0; + mfxi.trackstate = TRK_NONE; + mfxi.prevnoteonpitch = -1; + mfxi.ni->nrnotes = 0; + mfxi.ni->beats = 120; + + mfxi.istrm.fd = fd; + mfxi.istrm.p = mfxi.istrm.len = 0; + mf->Mf_getc = lm_getc; + + mf->Mf_header = lm_header; + mf->Mf_tempo = lm_tempo; + mf->Mf_trackstart = lm_trackstart; + mf->Mf_trackend = lm_trackend; + mf->Mf_noteon = lm_noteon; + mf->Mf_noteoff = lm_noteoff; + + mf->Mf_error = lm_error; + + midifile(mf); + + return mfxi.ni; +} + +static void lm_error(struct MF * mf, char * s) +{ + fprintf(stderr, "%s\n", s); +} + +static int lm_getc(struct MF * mf) +{ + struct MFX * mfx = (struct MFX *)mf; + + /* printf("p %d, len %d\n", mfx->istrm.p, mfx->istrm.len); */ + if (mfx->istrm.p == mfx->istrm.len) + { + mfx->istrm.len = read(mfx->istrm.fd, mfx->istrm.buf, IBUFSIZE); + /* printf("readlen %d\n", mfx->istrm.len); */ + if (mfx->istrm.len <= 0) + return -1; + + mfx->istrm.p = 1; + return mfx->istrm.buf[0]; + } + /* else */ + return mfx->istrm.buf[mfx->istrm.p++]; +} + +static void lm_header(struct MF * mf, int format, int ntrks, int division) +{ + struct MFX * mfx = (struct MFX *)mf; + + TRACE(0, ("lm_header(%p, %d, %d, %d)\n", mf, format, ntrks, division)); + + mfx->division = division; +} + +/* this is just a quess */ +static void lm_tempo(struct MF * mf, long tempo) +{ + struct MFX * mfx = (struct MFX *)mf; + + TRACE(0, ("lm_tempo(%p, %ld)\n", mf, tempo)); + + if (mfx->trackstate != TRK_FINISHED) + mfx->ni->beats = 60000000 / tempo; +} + + +static void addnote(struct MFX * mfx, int pitch, int duration, int special) +{ + int nr, p, s; + struct NoteInfo * ni; + + if (mfx->ni->nrnotes == mfx->allocated) + { + mfx->allocated += ALLOCSIZE; + mfx->ni = NIREALLOC(mfx->ni, mfx->allocated); + if (mfx->ni == NULL) + exit(1); + } + ni = mfx->ni; /* mfx->ni pointer value may have changed above */ + nr = ni->nrnotes++; + + + if (pitch == 0) { p = 0; s = 0; } + else { pitch--; p = (pitch % 12) + 1; s = pitch / 12; } + + ni->note[nr].note = p; + ni->note[nr].scale = s; + + ni->note[nr].length = duration; + ni->note[nr].lextra = special; +} + +/* currently supported */ +static /* N 32 32. 16 16. 8 8. 4 4. 2 2. 1 1. */ +int vals[] = { 15, 38, 54, 78, 109, 156, 218, 312, 437, 625, 875, 1250 }; + +static void writenote(struct MFX * mfx, int delta) +{ + ulg millinotetime = delta * 250 / mfx->division; + int i; + int duration; + int special; + + for(i = 0; i < sizeof vals / sizeof vals[0]; i++) + { + if (millinotetime < vals[i]) + break; + } + + if (i == 0) + return; + + i--; + duration = i / 2; + special = i & 1; + + addnote(mfx, mfx->prevnoteonpitch, duration, special); /* XXX think this */ +} + + +static void lm_trackstart(struct MF * mf) +{ + struct MFX * mfx = (struct MFX *)mf; + + TRACE(0, ("lm_trackstart(%p)\n", mf)); + + if (mfx->trackstate == TRK_NONE) + mfx->trackstate = TRK_READING; + + mfx->prevnoteonpitch = -1; +} + +static void lm_trackend(struct MF * mf) +{ + struct MFX * mfx = (struct MFX *)mf; + long time = mf->Mf_currtime; + + TRACE(0, ("lm_trackend(%p)\n", mf)); + + if (mfx->trackstate == TRK_READING && mfx->ni->nrnotes > 0) + mfx->trackstate = TRK_FINISHED; + + if (mfx->prevnoteonpitch >= 0) + writenote(mfx, time - mfx->prevnoteontime); + + mfx->prevnoteonpitch = -1; +} + +static void lm_noteon(struct MF * mf, int chan, int pitch, int vol) +{ + struct MFX * mfx = (struct MFX *)mf; + long time = mf->Mf_currtime; + + TRACE(0, ("lm_noteon(%p, %d, %d, %d)\n", mf, chan, pitch, vol)); + + if (vol == 0) /* kludge? to handle some (format 1? midi files) */ + return; + + if (mfx->trackstate != TRK_READING) + return; + + if (mfx->prevnoteonpitch >= 0) + writenote(mfx, time - mfx->prevnoteontime); + + if (vol == 0) + mfx->prevnoteonpitch = 0; + else + mfx->prevnoteonpitch = pitch + 1; + + mfx->prevnoteontime = time; +} + +static void lm_noteoff(struct MF * mf, int chan, int pitch, int vol) +{ + struct MFX * mfx = (struct MFX *)mf; + long time = mf->Mf_currtime; + + TRACE(0, ("lm_noteoff(%p, %d, %d, %d)\n", mf, chan, pitch, vol)); + + if (mfx->prevnoteonpitch >= 0) + { + writenote(mfx, time - mfx->prevnoteontime); + mfx->prevnoteonpitch = -1; + } + mfx->prevnoteonpitch = 0; + mfx->prevnoteontime = time; +} + + +#ifdef MIDI2RTTTL + +char * notes[] = +{ "p", "c", "c#", "d", "d#", "e", "f", "f#", "g", "g#", "a", "a#", "h" }; + +char * lengths[] = { "32", "16", "8", "4", "2", "1" }; + +static void countdefaults(struct NoteInfo * ni, int * length_p, int * scale_p) +{ + int lengths[15] = { 0 }; + int scales[15] = { 0 }; + int maxlenval = 0; /* (*) */ + int maxscaleval = 0; + int i; + + for (i = 0; i < ni->nrnotes; i++) + { + struct Notes * note = &ni->note[i]; + + lengths[note->length]++; + scales[note->scale]++; + } + + maxlenval = lengths[0]; /* (*) smart compiler eliminates dead code */ + *length_p = 0; + + for (i = 1; i < 15; i++) /* `p' incremented scales[0], therefore ignored */ + { + TRACE(0, ("%d - len: %d, scale: %d\n", i, lengths[i], scales[i])); + + if (lengths[i] > maxlenval) { + *length_p = i; + maxlenval = lengths[i]; + } + if (scales[i] > maxscaleval) { + *scale_p = i; + maxscaleval = scales[i]; + } + } +} + +int main(int argc, char * argv[]) +{ + int fd; + struct NoteInfo * ni; + int i; + int deflen, defscale; + char buf[1024]; + + if (argv[1] == NULL) + return 0; + + if ((fd = open(argv[1], O_RDONLY)) < 0) + { + perror("open"); + return 0; + } + + + ni = readmidi(fd); + + if (ni == NULL) + return 0; + + countdefaults(ni, &deflen, &defscale); + + /* patch argv[1]; */ +#if 1 + { + char * p = strrchr(argv[1], '/'); + if (p) argv[1] = p + 1; + p = strchr(argv[1], '.'); + if (p) *p = '\0'; + } +#endif + sprintf(buf, "%.10s:d=%s,o=%d,b=%d:", + argv[1], lengths[deflen], defscale, ni->beats); + write(1, buf, strlen(buf)); + + for (i = 0; i < ni->nrnotes; i++) + { + char * p = buf; + struct Notes * note = &ni->note[i]; + + if (i) + *p++ = ','; + + if (note->length != deflen) { + strcpy(p, lengths[note->length]); + p+= strlen(p); + } + strcpy(p , notes[note->note]); + p+= strlen(p); + + if (note->note && note->scale != defscale) + *p++ = note->scale + '0'; /* supports scales up to 9 */ + if (note->lextra) + *p++ = '.'; + + write(1, buf, p - buf); + } + write(1, "\n", 1); + return 0; +} + +#endif /* MIDI2RTTTL */ + diff --git a/midiseq/midiblck.cpp b/midiseq/midiblck.cpp new file mode 100644 index 0000000..11e8128 --- /dev/null +++ b/midiseq/midiblck.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include + +MIDIBlock &MIDIBlock::operator=(const MIDIBlock &someMIDIBlock) +{ + for(short itemIndex=0;itemIndex &tracks) +{ + tracks.remove(); + for(int trackIndex=0;trackIndex +#endif +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#include +#endif +#ifndef _COMMON_PUREWORD_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class String; + +class MIDIBlock +{ +public: + enum{MaxTracks=16}; + MIDIBlock(void); + MIDIBlock(const MIDIBlock &someMIDIBlock); + virtual ~MIDIBlock(); + EventBlock &operator[](WORD itemIndex); + MIDIBlock &operator=(const MIDIBlock &someMIDIBlock); + void printBlock(const String &pathFileName); +// bool getTracks(Block &tracks); + bool getTrackInfo(TrackInfos &trackInfo); +private: + EventBlock mMIDIBlock[MaxTracks]; +}; + +inline +MIDIBlock::MIDIBlock(void) +{ +} + +inline +MIDIBlock::MIDIBlock(const MIDIBlock &someMIDIBlock) +{ + *this=someMIDIBlock; +} + +inline +MIDIBlock::~MIDIBlock() +{ +} + +inline +EventBlock &MIDIBlock::operator[](WORD itemIndex) +{ + return mMIDIBlock[itemIndex]; +} +#endif + diff --git a/midiseq/midicaps.hpp b/midiseq/midicaps.hpp new file mode 100644 index 0000000..58b2f9a --- /dev/null +++ b/midiseq/midicaps.hpp @@ -0,0 +1,127 @@ +#ifndef _MIDISEQ_MIDIOUTCAPS_HPP_ +#define _MIDISEQ_MIDIOUTCAPS_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class MIDIOutCaps : private MIDIOUTCAPS +{ +public: + enum Type{MIDIPort=MOD_MIDIPORT,SQSynth=MOD_SQSYNTH,FMSynth=MOD_FMSYNTH,Mapper=MOD_MAPPER}; + enum Channel{Channel0=0x0001,Channel1=0x0002,Channel2=0x0004,Channel3=0x0008, + Channel4=0x0010,Channel5=0x0020,Channel6=0x0040,Channel7=0x0080,Channel8=0x0100, + Channel9=0x0200,Channel10=0x0400,Channel11=0x0800,Channel12=0x1000, + Channel13=0x2000,Channel14=0x4000,Channel15=0x8000,ChannelAll=0xFFFF}; + MIDIOutCaps(void); + ~MIDIOutCaps(); + UINT deviceID(void)const; + UINT productID(void)const; + WORD driverVersion(void)const; + String productName(void)const; + Type technology(void)const; + WORD numVoices(void)const; + WORD numNotes(void)const; + WORD hasChannel(MIDIOutCaps::Channel channel)const; + WORD hasPatchCache(void)const; + WORD hasLeftRightVolume(void)const; + WORD hasVolume(void)const; + MIDIOUTCAPS &getMIDIOUTCAPS(void); + operator MIDIOUTCAPS*(void); +private: +}; + +inline +MIDIOutCaps::MIDIOutCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +MIDIOutCaps::~MIDIOutCaps() +{ +} + +inline +MIDIOutCaps::operator MIDIOUTCAPS*(void) +{ + return this; +} + +inline +MIDIOUTCAPS &MIDIOutCaps::getMIDIOUTCAPS(void) +{ + return *this; +} + +inline +UINT MIDIOutCaps::deviceID(void)const +{ + return wMid; +} + +inline +UINT MIDIOutCaps::productID(void)const +{ + return wPid; +} + +inline +WORD MIDIOutCaps::driverVersion(void)const +{ + return vDriverVersion; +} + +inline +String MIDIOutCaps::productName(void)const +{ + return szPname; +} + +inline +MIDIOutCaps::Type MIDIOutCaps::technology(void)const +{ + return (Type)wTechnology; +} + +inline +WORD MIDIOutCaps::numVoices(void)const +{ + return wVoices; +} + +inline +WORD MIDIOutCaps::numNotes(void)const +{ + return wNotes; +} + +inline +WORD MIDIOutCaps::hasChannel(MIDIOutCaps::Channel channel)const +{ + return (channel&wChannelMask); +} + +inline +WORD MIDIOutCaps::hasVolume(void)const +{ + return (WORD)(dwSupport&MIDICAPS_VOLUME); +} + +inline +WORD MIDIOutCaps::hasLeftRightVolume(void)const +{ + return (WORD)(dwSupport&MIDICAPS_LRVOLUME); +} + +inline +WORD MIDIOutCaps::hasPatchCache(void)const +{ + return (WORD)(dwSupport&MIDICAPS_CACHE); +} +#endif diff --git a/midiseq/mididata.cpp b/midiseq/mididata.cpp new file mode 100644 index 0000000..eacaca6 --- /dev/null +++ b/midiseq/mididata.cpp @@ -0,0 +1,79 @@ +#include + +MidiData::MidiData(const String &midiPathFileName) +: mTimerCallback(this,&MidiData::timerEvent), + mMidiFile(midiPathFileName,FileIO::BigEndian), MidiTrack(mMidiFile) +{ + insertHandler(&mTimerCallback); + if(!readHeader(mMidiFile))return; + ::OutputDebugString(String("[MidiData::MidiData]MIDI header=")+String(MidiHeader::toString()+String("\n")).str()); + setMethod(timingMethod()); + mStartOfTracks=mMidiFile.tell(); +} + +MidiData::~MidiData() +{ + stopTimer(); + mMIDIOutDevice.closeDevice(); +} + +bool MidiData::play(WORD blocking) +{ + if(!makeRealTime())return false; + startTimer(TimerDelay); + if(blocking)waitEvent(); + return true; +} + +bool MidiData::makeRealTime(void) +{ + TimeBlock timeBlock; + + if(!tracks())return false; + mCurrentTrack=0; + mMidiFile.seek(mStartOfTracks,FileIO::SeekBeginning); + while(readTrack())mCurrentTrack++; + timeBlock.setDivision(method()); + timeBlock.setStartTime(getSystemTime()+TwoSecs); + timeBlock.fixTimeBlock(mMIDIEvents); + mMIDISequencer.setData(mMIDIEvents); + return true; +} + +CallbackData::ReturnType MidiData::timerEvent(CallbackData &/*someCallbackData*/) +{ + if(!mMIDISequencer.sequence(mMIDIOutDevice))return closeDevice(); + return true; +} + +CallbackData::ReturnType MidiData::closeDevice(void) +{ + mMIDIOutDevice.closeDevice(); + return (CallbackData::ReturnType)FALSE; +} + +// virtual overloads + +void MidiData::midiChannelMessage(PureEvent &midiEvent) +{ + midiEvent.tempo(mCurrentTempo.microsecsPerQtrNote()); + mMIDIEvents[mCurrentTrack].insert(&midiEvent); + return; +} + +void MidiData::setTempo(DWORD microsecsPerQtrNote) +{ + mCurrentTempo.microsecsPerQtrNote(microsecsPerQtrNote); + return; +} + +void MidiData::smpteFormat(const SMPTEFormat &someSMPTEFormat) +{ + mSMPTEFormat=someSMPTEFormat; + return; +} + +void MidiData::timeSignature(const TimeInfo &/*someTimeInfo*/) +{ + return; +} diff --git a/midiseq/mididata.hpp b/midiseq/mididata.hpp new file mode 100644 index 0000000..c1c248a --- /dev/null +++ b/midiseq/mididata.hpp @@ -0,0 +1,137 @@ +#ifndef _MIDISEQ_MIDIDATA_HPP_ +#define _MIDISEQ_MIDIDATA_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDITRACK_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEBLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#include +#endif +#ifndef _MIDISEQ_TEMPOCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIBLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTTIMER_HPP_ +#include +#endif +#ifndef _MIDISEQ_SEQUENCER_HPP_ +#include +#endif +#ifndef _MIDISEQ_TRACKINFO_HPP_ +#include +#endif + +class String; + +class MidiData : public MidiHeader, public MidiTrack, public EventTimer +{ +public: + MidiData(const String &midiPathFileName); + virtual ~MidiData(); + bool play(WORD blocking=TRUE); + bool stop(void); + bool isInPlay(void)const; + bool makeRealTime(void); + PureEvent &getEventAt(int track,int index); + bool getTrackInfo(TrackInfos &trackInfos); + bool combineTracks(Array &eventBlock); +protected: + void setTempo(DWORD microsecsPerQtrNote); + void midiChannelMessage(PureEvent &channelEvent); + void smpteFormat(const SMPTEFormat &someSMPTEFormat); + void timeSignature(const TimeInfo &someTimeInfo); +private: + enum {TimerDelay=10,ThreeSecs=3000,TwoSecs=2000,OneSec=1000}; + WORD timerEvent(void); + bool readTrack(void); + void operator=(const MidiData &someMidiData); + CallbackData::ReturnType timerEvent(CallbackData &someCallbackData); + CallbackData::ReturnType closeDevice(void); + + Callback mTimerCallback; + TempoChange mCurrentTempo; + WORD mCurrentTrack; + MIDIBlock mMIDIEvents; + MIDIOutputDevice mMIDIOutDevice; + FileIO mMidiFile; + DWORD mStartOfTracks; + SMPTEFormat mSMPTEFormat; + MIDISequencer mMIDISequencer; +}; + +inline +void MidiData::operator=(const MidiData &/*someMidiData*/) +{ + return; +} + +inline +bool MidiData::readTrack(void) +{ + return MidiTrack::readTrack(); +} + +inline +PureEvent &MidiData::getEventAt(int track,int eventIndex) +{ + return (mMIDIEvents[track])[eventIndex]; +} + +inline +bool MidiData::stop(void) +{ + if(!isRunning())return true; + return stopTimer(); +} + +inline +bool MidiData::isInPlay(void)const +{ + return isRunning(); +} + +inline +bool MidiData::combineTracks(Array &eventBlock) +{ + TimeBlock timeBlock; + timeBlock.fixTimeBlock(mMIDIEvents); + timeBlock.sortBlocks(mMIDIEvents,eventBlock); + return eventBlock.size()?true:false; +} + +inline +bool MidiData::getTrackInfo(TrackInfos &trackInfos) +{ + if(!makeRealTime())return false; + return mMIDIEvents.getTrackInfo(trackInfos); +} +#endif + diff --git a/midiseq/midihdr.hpp b/midiseq/midihdr.hpp new file mode 100644 index 0000000..6cd72c3 --- /dev/null +++ b/midiseq/midihdr.hpp @@ -0,0 +1,34 @@ +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#define _MIDISEQ_MIDIHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif + +class MidiHeader : public PureHeader +{ +public: + MidiHeader(void); + virtual ~MidiHeader(); + WORD readHeader(FileIO &fileIO); +private: +}; + +inline +MidiHeader::MidiHeader(void) +{ +} + +inline +MidiHeader::~MidiHeader() +{ +} + +inline +WORD MidiHeader::readHeader(FileIO &fileIO) +{ + return PureHeader::readHeader(fileIO); +} +#endif diff --git a/midiseq/midimsg.hpp b/midiseq/midimsg.hpp new file mode 100644 index 0000000..a232b0c --- /dev/null +++ b/midiseq/midimsg.hpp @@ -0,0 +1,7 @@ +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#define _MIDISEQ_MIDICHANNELMESSAGE_HPP_ + +enum MidiChannelMsg{MIDIProgramChange=0xC0,MIDINoteOff=0x80,MIDINoteOn=0x90, + MIDIKeyPressure=0xA0,MIDIParameter=0xB0,MIDIPitchBend=0xE0, + MIDIChannelPressure=0xD0}; +#endif diff --git a/midiseq/midiout.cpp b/midiseq/midiout.cpp new file mode 100644 index 0000000..31d05d3 --- /dev/null +++ b/midiseq/midiout.cpp @@ -0,0 +1,251 @@ +#include +#include +#include +#include + +/* +* Constructor +* @param deviceName - name of device to open, if null then opens default device +* @return return +*/ +MIDIOutputDevice::MIDIOutputDevice(const String &deviceName) +: mHasDevice(false), mMIDIDeviceID(MIDIMAPPER) +{ + if(deviceName.isNull())openDevice(); + else openDevice(deviceName); +} + +/* +* openDevice - opens the default MIDI output device +* @param none +* @return bool true - if device was opened, false otherwise +*/ +bool MIDIOutputDevice::openDevice(void) +{ + closeDevice(); + if(!::midiOutGetNumDevs())return false; + if(::midiOutOpen(&mhMIDIOutput,mMIDIDeviceID,0,0,0))return false; + hasDevice(TRUE); + getDeviceCapabilities(); + return true; +} + +/* +* openDevice - opens the named MIDI output device +* @param deviceName - Name of the device to open +* @return bool true - if device was opened, false otherwise +*/ +bool MIDIOutputDevice::openDevice(const String &deviceName) +{ + Block deviceNames; + + closeDevice(); + if(deviceName=="MIDIMAPPER") + { + mMIDIDeviceID=MIDIMAPPER; + return openDevice(); + } + if(!getDeviceNames(deviceNames))return false; + for(int index=0;index=deviceNames.size())return false; + return openDevice(index); +} + +/* +* openDevice - opens the device with the given id +* @param deviceID - The ID of the device to open +* @return bool true - if device was opened, false otherwise +*/ +bool MIDIOutputDevice::openDevice(int deviceID) +{ + UINT numDevs; + + closeDevice(); + if(-1==deviceID) + { + mMIDIDeviceID=MIDIMAPPER; + return openDevice(); + } + if(!(numDevs=::midiOutGetNumDevs()))return false; + if(deviceID>=numDevs)return false; + if(::midiOutOpen(&mhMIDIOutput,deviceID,0,0,0))return false; + mMIDIDeviceID=deviceID; + hasDevice(true); + getDeviceCapabilities(); + return true; +} + +/* +* closeDevice - closes the device +* @param none +* @return none +*/ +void MIDIOutputDevice::closeDevice(void) +{ + if(!hasDevice())return; + ::midiOutReset(mhMIDIOutput); + ::midiOutClose(mhMIDIOutput); + hasDevice(false); + mMIDIDeviceID=MIDIMAPPER; +} + +/* +* getDeviceCapabilities - Gets Caps for current device +* @param none +* @return bool true=success, false otherwise +*/ +bool MIDIOutputDevice::getDeviceCapabilities(void) +{ + if(!hasDevice())return false; + ::memset(&mMIDIOutDevCaps,0,sizeof(MIDIOutCaps)); + if(::midiOutGetDevCaps(mMIDIDeviceID,mMIDIOutDevCaps,sizeof(MIDIOutCaps)))return false; + return true; +} + +/* +* getNumDevs - Get number of devices in system +* @param none +* @return UINT number of devices in system (this is related to device ID) +*/ +UINT MIDIOutputDevice::getNumDevs(void) +{ + return midiOutGetNumDevs(); +} + +/* +* getDeviceNames - Get names of devices currently in system +* @param Block & that will be populated with the device names +* @return bool true if success. +*/ +bool MIDIOutputDevice::getDeviceNames(Block &deviceNames) +{ + UINT numDevs; + MIDIOutCaps midiOutCaps; + + deviceNames.remove(); + numDevs=getNumDevs(); + for(int index=0;index=0x0400 + if(::midiOutGetVolume(mhMIDIOutput,&volumeLevel))return FALSE; +#else + if(::midiOutGetVolume(mMIDIDeviceID,&volumeLevel))return FALSE; +#endif + return LOWORD(volumeLevel); +} + +/* +* getRightVolume - Get right volume level of current device +* @param none +* @return unsigned short - volume level +*/ + +WORD MIDIOutputDevice::getRightVolume(void)const +{ + DWORD volumeLevel; + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; +#if WINVER>=0x0400 + if(::midiOutGetVolume(mhMIDIOutput,&volumeLevel))return FALSE; +#else + if(::midiOutGetVolume(mMIDIDeviceID,&volumeLevel))return FALSE; +#endif + if(!mMIDIOutDevCaps.hasLeftRightVolume())return LOWORD(volumeLevel); + return HIWORD(volumeLevel); +} + +/* +* setRightVolume - Set right volume level of current device +* @param unsigned short volume level +* @return bool true is success +*/ + +bool MIDIOutputDevice::setRightVolume(WORD volumeRight) +{ + DWORD volumeLevel; + + if(!hasDevice())return false; + if(!mMIDIOutDevCaps.hasVolume())return false; + volumeLevel=volumeRight; + if(mMIDIOutDevCaps.hasLeftRightVolume()) + { + volumeLevel<<=8; + volumeLevel+=getLeftVolume(); + } +#if WINVER>=0x0400 + if(::midiOutSetVolume(mhMIDIOutput,volumeLevel))return false; +#else + if(::midiOutSetVolume(mMIDIDeviceID,volumeLevel))return false; +#endif + return true; +} + +/* +* setLeftVolume - Set left volume level of current device +* @param unsigned short volume level +* @return bool true is success +*/ + +bool MIDIOutputDevice::setLeftVolume(WORD volumeLeft) +{ + DWORD volumeLevel(0L); + + if(!hasDevice())return false; + if(!mMIDIOutDevCaps.hasVolume())return false; + if(mMIDIOutDevCaps.hasLeftRightVolume()) + { + volumeLevel=getRightVolume(); + volumeLevel<<=8; + } + volumeLevel+=volumeLeft; +#if WINVER>=0x0400 + if(::midiOutSetVolume(mhMIDIOutput,volumeLevel))return false; +#else + if(::midiOutSetVolume(mMIDIDeviceID,volumeLevel))return false; +#endif + return TRUE; +} + diff --git a/midiseq/midiout.hpp b/midiseq/midiout.hpp new file mode 100644 index 0000000..bb839b4 --- /dev/null +++ b/midiseq/midiout.hpp @@ -0,0 +1,61 @@ +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#define _MIDISEQ_MIDIOUTDEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTCAPS_HPP_ +#include +#endif + +class MIDIOutputDevice +{ +public: + MIDIOutputDevice(const String &deviceName=String()); + virtual ~MIDIOutputDevice(); + bool midiEvent(const PureEvent &somePureEvent); + bool hasDevice(void)const; + void closeDevice(void); + bool openDevice(void); + bool openDevice(const String &deviceName); + bool openDevice(int deviceID); + WORD getRightVolume(void)const; + WORD getLeftVolume(void)const; + bool setRightVolume(WORD volumeLevel); + bool setLeftVolume(WORD volumeLevel); + static bool getDeviceNames(Block &deviceNames); + static UINT getNumDevs(void); +private: + typedef HMIDIOUT MIDIHandle; + void hasDevice(bool hasDevice); + bool getDeviceCapabilities(void); + + UINT mMIDIDeviceID; + bool mHasDevice; + MIDIHandle mhMIDIOutput; + MIDIOutCaps mMIDIOutDevCaps; +}; + +inline +MIDIOutputDevice::~MIDIOutputDevice(void) +{ + closeDevice(); +} + +inline +bool MIDIOutputDevice::hasDevice(void)const +{ + return mHasDevice; +} + +inline +void MIDIOutputDevice::hasDevice(bool hasDevice) +{ + mHasDevice=hasDevice; +} +#endif diff --git a/midiseq/midiseq.cpp b/midiseq/midiseq.cpp new file mode 100644 index 0000000..45f379c --- /dev/null +++ b/midiseq/midiseq.cpp @@ -0,0 +1,73 @@ +#include +#include +#include + +MidiData *lpMidiData=0; + +#if defined(__FLAT__) +#if defined(_MSC_VER) +BOOL _stdcall DllMain(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +#else +BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +#endif +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : + lpMidiData=0; + break; + case DLL_PROCESS_DETACH : + stop(); + break; + } + return TRUE; +} +#else +int CALLBACK _export LibMain(HINSTANCE /*hInstance*/,WORD /*wDataSeg*/,WORD /*wHeapSize*/,LPSTR /*lpszCmdLine*/) +{ + lpMidiData=0; + return TRUE; +} + +int CALLBACK _export WEP(int /*nExitType*/) +{ + return stop(); +} +#endif + +#if defined(_MSC_VER) +short _stdcall play(String midiPathFileName) +#else +short CALLBACK _export play(String midiPathFileName) +#endif +{ + if(lpMidiData)stop(); + lpMidiData=new MidiData(midiPathFileName); + if(!lpMidiData)return FALSE; + lpMidiData->play(); + return TRUE; +} + +#if defined(_MSC_VER) +short _stdcall stop(void) +#else +short CALLBACK _export stop(void) +#endif +{ + if(!lpMidiData)return FALSE; + lpMidiData->stop(); + delete lpMidiData; + lpMidiData=0; + return TRUE; +} + +#if defined(_MSC_VER) +short _stdcall isInPlay(void) +#else +short CALLBACK _export isInPlay(void) +#endif +{ + if(!lpMidiData)return FALSE; + return lpMidiData->isInPlay(); +} + diff --git a/midiseq/midiseq.hpp b/midiseq/midiseq.hpp new file mode 100644 index 0000000..a011f35 --- /dev/null +++ b/midiseq/midiseq.hpp @@ -0,0 +1,30 @@ +#ifndef _MIDISEQ_MIDISEQ_HPP_ +#define _MIDISEQ_MIDISEQ_HPP_ + +#if defined(__FLAT__) +extern "C" +{ +#if defined(_MSC_VER) +__declspec(dllexport) BOOL _stdcall DllMain(HINSTANCE hInstance,DWORD reasonCode,LPVOID lpvReserved); +#else +BOOL WINAPI DllEntryPoint(HINSTANCE hInstance,DWORD reasonCode,LPVOID lpvReserved); +#endif +} +#else +extern "C" +{ +int CALLBACK _export LibMain(HINSTANCE hInstance,WORD wDataSeg,WORD wHeapSize,LPSTR lpszCmdLine); +int CALLBACK _export WEP(int nExitType); +} +#endif + +#if defined(_MSC_VER) +__declspec(dllexport) short _stdcall play(String midiPathFileName); +__declspec(dllexport) short _stdcall stop(void); +__declspec(dllexport) short _stdcall isInPlay(void); +#else +short CALLBACK _export play(String midiPathFileName); +short CALLBACK _export stop(void); +short CALLBACK _export isInPlay(void); +#endif +#endif diff --git a/midiseq/midisqlib.dsp b/midiseq/midisqlib.dsp new file mode 100644 index 0000000..0d3f9f2 --- /dev/null +++ b/midiseq/midisqlib.dsp @@ -0,0 +1,133 @@ +# Microsoft Developer Studio Project File - Name="midisqlib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=midisqlib - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "midisqlib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "midisqlib.mak" CFG="midisqlib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "midisqlib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "midisqlib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "midisqlib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "midisqlib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"msvcobj\midisq.lib" + +!ENDIF + +# Begin Target + +# Name "midisqlib - Win32 Release" +# Name "midisqlib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\EVNTTMR.CPP +# End Source File +# Begin Source File + +SOURCE=.\MIDIBLCK.CPP +# End Source File +# Begin Source File + +SOURCE=.\MIDIDATA.CPP +# End Source File +# Begin Source File + +SOURCE=.\MIDIOUT.CPP +# End Source File +# Begin Source File + +SOURCE=.\MIDISEQ.CPP +# End Source File +# Begin Source File + +SOURCE=.\MIDISequencer.cpp +# End Source File +# Begin Source File + +SOURCE=.\MIDITRCK.CPP +# End Source File +# Begin Source File + +SOURCE=.\PUREEVNT.CPP +# End Source File +# Begin Source File + +SOURCE=.\PUREHDR.CPP +# End Source File +# Begin Source File + +SOURCE=.\TIMEBLCK.CPP +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/midiseq/midisqlib.dsw b/midiseq/midisqlib.dsw new file mode 100644 index 0000000..8510c9b --- /dev/null +++ b/midiseq/midisqlib.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "midisqlib"=.\midisqlib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/midiseq/midisqlib.opt b/midiseq/midisqlib.opt new file mode 100644 index 0000000..5d2360b Binary files /dev/null and b/midiseq/midisqlib.opt differ diff --git a/midiseq/midisqlib.plg b/midiseq/midisqlib.plg new file mode 100644 index 0000000..4f4db68 --- /dev/null +++ b/midiseq/midisqlib.plg @@ -0,0 +1,16 @@ + + +
+

Build Log

+

+--------------------Configuration: midisqlib - Win32 Debug-------------------- +

+

Command Lines

+ + + +

Results

+midisq.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/midiseq/miditrck.cpp b/midiseq/miditrck.cpp new file mode 100644 index 0000000..1a34836 --- /dev/null +++ b/midiseq/miditrck.cpp @@ -0,0 +1,448 @@ +#include +#include + +bool MidiTrack::readTrack(void) +{ + mBytesRead=0; + if(PureHeader::Unset==mTimingMethod)return false; + if(!mMidiFile.read(mTrack,sizeof(mTrack)))return false; + if(::strncmp(mTrack,"MTrk",sizeof(mTrack)))return false; + if(!mMidiFile.read(mLengthData))return false; + if(!mLengthData)return false; + readTime(); + + while(mBytesRead=mLengthData)break; + readTime(); + if(NullEvent==mRunningEvent)mLastEventType=mEventType; + else mLastEventType=mRunningEvent; + } + return true; +} + +void MidiTrack::readTime(void) +{ + switch(mTimingMethod) + { + case PureHeader::DeltaTime : + case PureHeader::TimeCode : + mDeltaTime=readVarLength(); + break; + } +} + +WORD MidiTrack::handleEvent(void) +{ + WORD returnCode; + + switch(mEventType) + { + case MetaEvent : + mRunningEvent=NullEvent; + returnCode=handleMetaEvent(); + break; + case SystemExclusiveOne : + case SystemExclusiveTwo : + mRunningEvent=NullEvent; + returnCode=handleSystemExclusiveEvent(); + break; + default : + returnCode=handleMIDIChannelMessage(); + break; + } + return returnCode; +} + +WORD MidiTrack::isChannelMessage(BYTE eventType)const +{ + BYTE status((eventType>>4)&0x0F); + + if((status<=0x07)||(0x0F==status)) + { + outDebug("[isChannelMessage] FAIL",eventType); + return false; + } + if((status>=0x08&&status<=0x0B)||(status==0x0E))return 2; + return 1; +} + +WORD MidiTrack::handleMIDIChannelMessage(void) +{ + WORD returnCode; + + if(isRunningStatus(mEventType)) + { + if(NullEvent==mRunningEvent)mRunningEvent=mLastEventType; + mLastData=mEventType; + mEventType=mLastEventType; + } + else mRunningEvent=NullEvent; + if(isChannelMessage(mEventType))returnCode=processMIDIChannelMessage(); + else returnCode=FALSE; + return returnCode; +} + +WORD MidiTrack::handleMetaEvent(void) +{ + BYTE entryType; + WORD returnCode(TRUE); + + if(!mMidiFile.read(entryType))return FALSE; + mBytesRead++; + switch(entryType) + { + case SequenceNumberEvent : + outDebug("[handleMetaEvent]SequenceNumberEvent"); + returnCode=handleMetaSequenceNumberEvent(); + break; + case TextEvent : + outDebug("[handleMetaEvent]TextEvent"); + returnCode=handleMetaTextEvent(); + break; + case CopyrightNotice : + outDebug("[handleMetaEvent]CopyrightNotice"); + returnCode=handleMetaTextEvent(); + break; + case SequenceTrackName : + outDebug("[handleMetaEvent]SequenceTrackName"); + handleGenericMetaEvent(); + break; + case InstrumentName : + outDebug("[handleMetaEvent]InstrumentName"); + handleGenericMetaEvent(); + break; + case Lyric : + outDebug("[handleMetaEvent]Lyric"); + handleGenericMetaEvent(); + break; + case Marker : + outDebug("[handleMetaEvent]Marker"); + handleGenericMetaEvent(); + break; + case CuePoint : + outDebug("[handleMetaEvent]CuePoint"); + handleGenericMetaEvent(); + break; + case ChannelPrefix : + outDebug("[handleMetaEvent]ChannelPrefix"); + handleChannelPrefix(); + break; + case EndOfTrack : + outDebug("[handleMetaEvent]EndOfTrack"); + handleGenericMetaEvent(); + endOfTrack(); + returnCode=FALSE; + break; + case SetTempo : + outDebug("[handleMetaEvent]SetTempo"); + handleSetTempoEvent(); + break; + case SMPTEFormatSpec : + outDebug("[handleMetaEvent]SMTPFormatSpec"); + handleSMPTEFormatEvent(); + break; + case TimeSignature : + outDebug("[handleMetaEvent]TimeSignature"); + handleTimeSignatureEvent(); + break; + case KeySignature : + outDebug("[handleMetaEvent]KeySignature"); + handleGenericMetaEvent(); + break; + case SequencerSpecificMetaEvent : + outDebug("[handleMetaEvent]SequencerSpecificMetaEvent"); + handleGenericMetaEvent(); + break; + default : + handleGenericMetaEvent(); + break; + } + return returnCode; +} + +WORD MidiTrack::handleSystemExclusiveEvent(void) +{ + return handleGenericMetaEvent(); +} + +WORD MidiTrack::handleMetaSequenceNumberEvent(void) +{ + WORD sequenceNumber; + + if(!mMidiFile.read(sequenceNumber))return FALSE; + mBytesRead++; + return TRUE; +} + +WORD MidiTrack::handleMetaTextEvent(void) +{ + BYTE textLength; + BYTE textByte; + String strText; + + if(!mMidiFile.read(textLength))return FALSE; + mBytesRead++; + for(short index=0;index +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTTYPE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_METAEVENTTYPE_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#include +#endif +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTE_HPP_ +#include +#endif + +class MidiTrack +{ +public: + MidiTrack(FileIO &someMidiFile); + virtual ~MidiTrack(); + void setMethod(PureHeader::Method timingMethod); + bool readTrack(void); + DWORD lengthData(void)const; +protected: + virtual void midiChannelMessage(PureEvent &channelEvent); + virtual void setTempo(DWORD microsecondsPerQtrNote); + virtual void smpteFormat(const SMPTEFormat &someSMPTEFormat); + virtual void timeSignature(const TimeInfo &someTimeInfo); + virtual void textMessage(const String &strText); + virtual void endOfTrack(void); +private: + enum {TrackIDLen=4,TempoEventLength=3,TimeSignatureEventLength=4}; + void readTime(void); + WORD handleEvent(void); + WORD handleMetaEvent(void); + WORD handleMIDIChannelMessage(void); + WORD handleGenericMetaEvent(void); + WORD handleSystemExclusiveEvent(void); + WORD handleMetaTextEvent(void); + WORD handleMetaSequenceNumberEvent(void); + WORD handleTimeSignatureEvent(void); + WORD handleSetTempoEvent(void); + WORD handleSMPTEFormatEvent(void); + WORD handleChannelPrefix(void); + WORD processMIDIChannelMessage(void); + WORD isChannelMessage(BYTE eventType)const; + WORD isRunningStatus(BYTE eventType)const; + DWORD readVarLength(void); + void lengthData(DWORD lengthData); + void operator=(const MidiTrack &someMidiTrack); + void outDebug(const String &message,BYTE data)const; + void outDebug(const String &message)const; + + char mTrack[TrackIDLen]; + DWORD mLengthData; + BYTE mEventType; + BYTE mLastEventType; + BYTE mLastChannel; + BYTE mLastData; + BYTE mRunningEvent; + DWORD mEventLength; + DWORD mBytesRead; + DWORD mDeltaTime; + FileIO &mMidiFile; + PureHeader::Method mTimingMethod; + NoteOn mNoteOn; + NoteOff mNoteOff; + bool mIsDebug; +}; + +inline +MidiTrack::MidiTrack(FileIO &someMidiFile) +: mLengthData(0), mEventType(NullEvent), mLastEventType(NullEvent), + mRunningEvent(NullEvent), mEventLength(0), mMidiFile(someMidiFile), + mTimingMethod(PureHeader::Unset), mDeltaTime(0), mIsDebug(false) +{ +} + +inline +MidiTrack::~MidiTrack() +{ +} + +inline +void MidiTrack::setMethod(PureHeader::Method timingMethod) +{ + mTimingMethod=timingMethod; +} + +inline +DWORD MidiTrack::lengthData(void)const +{ + return mLengthData; +} + +inline +void MidiTrack::lengthData(DWORD lengthData) +{ + mLengthData=lengthData; +} + +inline +WORD MidiTrack::isRunningStatus(BYTE eventType)const +{ + return (!(eventType&0x80)); +} + +inline +void MidiTrack::operator=(const MidiTrack &/*someMidiTrack*/) +{ + return; +} +#endif diff --git a/midiseq/note.hpp b/midiseq/note.hpp new file mode 100644 index 0000000..89525e3 --- /dev/null +++ b/midiseq/note.hpp @@ -0,0 +1,12 @@ +#ifndef _MIDISEQ_NOTE_HPP_ +#define _MIDISEQ_NOTE_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTEON_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTEOFF_HPP_ +#include +#endif +#endif \ No newline at end of file diff --git a/midiseq/noteoff.hpp b/midiseq/noteoff.hpp new file mode 100644 index 0000000..6f78dcf --- /dev/null +++ b/midiseq/noteoff.hpp @@ -0,0 +1,50 @@ +#ifndef _MIDISEQ_NOTEOFF_HPP_ +#define _MIDISEQ_NOTEOFF_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class NoteOff : public PureNote +{ +public: + NoteOff(void); + NoteOff(const PureNote &pureNote); + NoteOff &operator=(const PureNote &pureNote); + virtual ~NoteOff(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: +}; + +inline +NoteOff::NoteOff(void) +{ +} + +inline +NoteOff::NoteOff(const PureNote &pureNote) +{ + *this=pureNote; +} + +inline +NoteOff &NoteOff::operator=(const PureNote &pureNote) +{ + (PureNote&)*this=pureNote; + return *this; +} + +inline +NoteOff::~NoteOff() +{ +} + +inline +PureEvent NoteOff::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDINoteOff,deltaTime,channel,pitch(),velocity()); + return pureEvent; +} +#endif diff --git a/midiseq/noteon.hpp b/midiseq/noteon.hpp new file mode 100644 index 0000000..beb0292 --- /dev/null +++ b/midiseq/noteon.hpp @@ -0,0 +1,50 @@ +#ifndef _MIDISEQ_NOTEON_HPP_ +#define _MIDISEQ_NOTEON_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class NoteOn : public PureNote +{ +public: + NoteOn(void); + NoteOn(const PureNote &pureNote); + NoteOn &operator=(const PureNote &pureNote); + virtual ~NoteOn(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: +}; + +inline +NoteOn::NoteOn(void) +{ +} + +inline +NoteOn::NoteOn(const PureNote &pureNote) +{ + *this=pureNote; +} + +inline +NoteOn::~NoteOn() +{ +} + +inline +NoteOn &NoteOn::operator=(const PureNote &pureNote) +{ + (PureNote&)*this=pureNote; + return *this; +} + +inline +PureEvent NoteOn::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDINoteOn,deltaTime,channel,pitch(),velocity()); + return pureEvent; +} +#endif diff --git a/midiseq/pureevnt.cpp b/midiseq/pureevnt.cpp new file mode 100644 index 0000000..5791189 --- /dev/null +++ b/midiseq/pureevnt.cpp @@ -0,0 +1,33 @@ +#include +#include + +//PureEvent::operator String(void) +String PureEvent::toString(void)const +{ + String pureEventString; + String eventString; + + pureEventString.reserve(1024); + switch(eventType()&0xF0) + { + case MIDIChannelPressure : {eventString="MIDIChannelPressure";break;} + case MIDIProgramChange : {eventString="MIDIProgramChange";break;} + case MIDIKeyPressure : {eventString="MIDIKeyPressure";break;} + case MIDIParameter : {eventString="MIDIParameter";break;} + case MIDIPitchBend : {eventString="MIDIPitchBend";break;} + case MIDINoteOff : {eventString="MIDINoteOff";break;} + case MIDINoteOn : {eventString="MIDINoteOn";break;} + default : {eventString="UNKNOWN MIDICHANNEL MESSAGE";break;} + } + ::sprintf(pureEventString, + "eventType:%3d [% 20s] deltaTime:%5ld playTime:%d channel:%2d byteOne:%3d byteTwo:%3d tempo:%d", + (short)eventType(), + (LPSTR)eventString, + deltaTime(), + playTime(), + (short)channel(), + (short)firstData(), + (short)secondData(), + tempo()); + return pureEventString; +} diff --git a/midiseq/pureevnt.hpp b/midiseq/pureevnt.hpp new file mode 100644 index 0000000..e5a5c7f --- /dev/null +++ b/midiseq/pureevnt.hpp @@ -0,0 +1,201 @@ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#define _MIDISEQ_PUREEVENT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif + +class PureEvent +{ +public: + PureEvent(void); + PureEvent(const PureEvent &somePureEvent); + PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData,DWORD tempo=0); + virtual ~PureEvent(); + BYTE eventType(void)const; + void eventType(BYTE eventType); + DWORD deltaTime(void)const; + void deltaTime(DWORD deltaTime); + DWORD playTime(void)const; + void playTime(DWORD playTime); + BYTE channel(void)const; + void channel(BYTE channel); + BYTE firstData(void)const; + void firstData(BYTE firstData); + BYTE secondData(void)const; + void secondData(BYTE secondData); + DWORD tempo(void)const; + void tempo(DWORD tempo); + WORD operator==(const PureEvent &somePureEvent)const; + WORD operator<(const PureEvent &somePureEvent)const; + WORD operator>(const PureEvent &somePureEvent)const; + String toString(void)const; + PureEvent &operator=(const PureEvent &somePureEvent); +private: + BYTE mEventType; + DWORD mDeltaTime; + BYTE mChannel; + BYTE mFirstData; + BYTE mSecondData; + DWORD mPlayTime; + DWORD mTempo; +}; + +inline +PureEvent::PureEvent(void) +: mEventType(0), mDeltaTime(0L), mChannel(0), mFirstData(0), mSecondData(0), + mPlayTime(0L), mTempo(0) +{ +} + +inline +PureEvent::PureEvent(const PureEvent &somePureEvent) +: mEventType(somePureEvent.mEventType), mDeltaTime(somePureEvent.mDeltaTime), + mPlayTime(somePureEvent.mPlayTime), mChannel(somePureEvent.mChannel), + mFirstData(somePureEvent.mFirstData), mSecondData(somePureEvent.mSecondData), + mTempo(somePureEvent.mTempo) +{ +} + +inline +PureEvent::PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData,DWORD tempo) +: mEventType(eventType), mDeltaTime(deltaTime), mChannel(channel), mFirstData(firstData), + mSecondData(secondData), mPlayTime(0L), mTempo(0) +{ +} + +inline +PureEvent::~PureEvent() +{ +} + +inline +BYTE PureEvent::eventType(void)const +{ + return mEventType; +} + +inline +void PureEvent::eventType(BYTE eventType) +{ + mEventType=eventType; +} + +inline +DWORD PureEvent::deltaTime(void)const +{ + return mDeltaTime; +} + +inline +void PureEvent::deltaTime(DWORD deltaTime) +{ + mDeltaTime=deltaTime; +} + +inline +DWORD PureEvent::playTime(void)const +{ + return mPlayTime; +} + +inline +void PureEvent::playTime(DWORD playTime) +{ + mPlayTime=playTime; +} + +inline +BYTE PureEvent::channel(void)const +{ + return mChannel; +} + +inline +void PureEvent::channel(BYTE channel) +{ + mChannel=channel; +} + +inline +BYTE PureEvent::firstData(void)const +{ + return mFirstData; +} + +inline +void PureEvent::firstData(BYTE firstData) +{ + mFirstData=firstData; +} + + +inline +BYTE PureEvent::secondData(void)const +{ + return mSecondData; +} + +inline +void PureEvent::secondData(BYTE secondData) +{ + mSecondData=secondData; +} + +inline +DWORD PureEvent::tempo(void)const +{ + return mTempo; +} + +inline +void PureEvent::tempo(DWORD tempo) +{ + mTempo=tempo; +} + +// comparators + +inline +WORD PureEvent::operator==(const PureEvent &somePureEvent)const +{ + return mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType(); +} + +inline +PureEvent &PureEvent::operator=(const PureEvent &somePureEvent) +{ + eventType(somePureEvent.eventType()); + deltaTime(somePureEvent.deltaTime()); + playTime(somePureEvent.playTime()); + channel(somePureEvent.channel()); + firstData(somePureEvent.firstData()); + secondData(somePureEvent.secondData()); + tempo(somePureEvent.tempo()); + return *this; +} + +inline +WORD PureEvent::operator<(const PureEvent &somePureEvent)const +{ + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType())return false; + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==MIDINoteOff)return true; + else if(mPlayTime==somePureEvent.mPlayTime)return false; + return (mPlayTime(const PureEvent &somePureEvent)const +{ + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType())return false; + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==MIDINoteOn)return true; + else if(mPlayTime==somePureEvent.mPlayTime)return false; + return (mPlayTime>somePureEvent.mPlayTime); +} +#endif + diff --git a/midiseq/purehdr.cpp b/midiseq/purehdr.cpp new file mode 100644 index 0000000..9583e16 --- /dev/null +++ b/midiseq/purehdr.cpp @@ -0,0 +1,31 @@ +#include + +WORD PureHeader::readHeader(FileIO &midiFile) +{ + if(!midiFile.read(mHeader,sizeof(mHeader)))return FALSE; + if(!midiFile.read(mLengthData))return FALSE; + if(!midiFile.read(mSMFType))return FALSE; + if(!midiFile.read(mTracks))return FALSE; + if(!midiFile.read(mMethod))return FALSE; + return TRUE; +} + +String PureHeader::toString()const +{ + String strWork; + String strHeader; + strHeader+=mHeader; + strHeader+="\nLength:"; + strHeader+=String().fromInt(mLengthData); + strHeader+="\nType:"; + if(SingleMultiChannel==MIDIFormat(mSMFType))strHeader+="SingleMultiChannel"; + else if(SimultaneousTracks==MIDIFormat(mSMFType))strHeader+="SimultaneousTracks"; + else if(SequentialTracks==MIDIFormat(mSMFType))strHeader+="Sequential"; + else strHeader+="Unknown"; + strHeader+="\nTracks:"; + strHeader+=String().fromInt(mTracks); + strHeader+="\nMethod:"; + ::sprintf(strWork," Hi:0x%04lx Lo:0x%04lx",(mMethod>>8)&0xFF,mMethod&0xFF); + strHeader+=String().fromInt(mMethod)+strWork; + return strHeader; +} diff --git a/midiseq/purehdr.hpp b/midiseq/purehdr.hpp new file mode 100644 index 0000000..f45d823 --- /dev/null +++ b/midiseq/purehdr.hpp @@ -0,0 +1,135 @@ +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#define _MIDISEQ_PUREHEADER_HPP_ +#include +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class PureHeader +{ +public: + enum Method{TimeCode,DeltaTime,Unset}; + enum MIDIFormat{SingleMultiChannel,SimultaneousTracks,SequentialTracks}; + PureHeader(void); + PureHeader(const PureHeader &somePureHeader); + virtual ~PureHeader(); + PureHeader &operator=(const PureHeader &somePureHeader); + WORD operator==(const PureHeader &somePureHeader); + DWORD lengthData(void)const; + MIDIFormat smfType(void)const; + USHORT tracks(void)const; + USHORT method(void)const; + Method timingMethod(void)const; + String toString(void)const; +protected: + WORD readHeader(FileIO &midiFile); +private: + enum {MaxHeaderIDLength=4}; + void method(USHORT method); + void lengthData(DWORD lengthData); + void smfType(USHORT smfType); + void tracks(USHORT smfType); + + char mHeader[MaxHeaderIDLength]; + DWORD mLengthData; + USHORT mSMFType; + USHORT mTracks; + USHORT mMethod; +}; + +inline +PureHeader::PureHeader(void) +: mLengthData(0L), mSMFType(0), mTracks(0), mMethod(0) +{ + ::memset(mHeader,0,sizeof(mHeader)); +} + +inline +PureHeader::PureHeader(const PureHeader &somePureHeader) +{ + *this=somePureHeader; +} + +inline +PureHeader::~PureHeader() +{ +} + +inline +PureHeader &PureHeader::operator=(const PureHeader &somePureHeader) +{ + lengthData(somePureHeader.lengthData()); + smfType(somePureHeader.smfType()); + tracks(somePureHeader.tracks()); + method(somePureHeader.method()); + ::memcpy(mHeader,somePureHeader.mHeader,sizeof(mHeader)); + return *this; +} + +inline +WORD PureHeader::operator==(const PureHeader &somePureHeader) +{ + return (lengthData()==somePureHeader.lengthData()&& + smfType()==somePureHeader.smfType()&& + tracks()==somePureHeader.tracks()&& + method()==somePureHeader.method()&& + (0==::memcmp(mHeader,somePureHeader.mHeader,sizeof(mHeader)))); +} + +inline +DWORD PureHeader::lengthData(void)const +{ + return mLengthData; +} + +inline +void PureHeader::lengthData(DWORD lengthData) +{ + mLengthData=lengthData; +} + +inline +PureHeader::MIDIFormat PureHeader::smfType(void)const +{ + return (MIDIFormat)mSMFType; +} + +inline +void PureHeader::smfType(USHORT smfType) +{ + mSMFType=smfType; +} + +inline +USHORT PureHeader::tracks(void)const +{ + return mTracks; +} + +inline +void PureHeader::tracks(USHORT tracks) +{ + mTracks=tracks; +} + +inline +USHORT PureHeader::method(void)const +{ + return mMethod; +} + +inline +void PureHeader::method(USHORT method) +{ + mMethod=method; +} + +inline +PureHeader::Method PureHeader::timingMethod(void)const +{ + return ((mMethod>>15)?TimeCode:DeltaTime); +} +#endif diff --git a/midiseq/purenote.hpp b/midiseq/purenote.hpp new file mode 100644 index 0000000..a05c969 --- /dev/null +++ b/midiseq/purenote.hpp @@ -0,0 +1,104 @@ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#define _MIDISEQ_PURENOTE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class PureNote +{ +public: + enum {PureNoteLength=2}; + PureNote(void); + PureNote(BYTE pitch,BYTE velocity); + virtual ~PureNote(); + BYTE pitch(void)const; + void pitch(BYTE pitch); + BYTE velocity(void)const; + void velocity(BYTE velocity); + PureNote &operator=(const PureNote &somePureNote); + WORD operator==(const PureNote &somePureNote)const; + FileIO &operator<<(FileIO &someFileIO); + String toString(void)const; +private: + BYTE mPitch; + BYTE mVelocity; +}; + +inline +PureNote::PureNote(void) +: mPitch(0), mVelocity(0) +{ +} + +inline +PureNote::PureNote(BYTE pitch,BYTE velocity) +: mPitch(pitch), mVelocity(velocity) +{ +} + +inline +PureNote::~PureNote() +{ +} + +inline +BYTE PureNote::pitch(void)const +{ + return mPitch; +} + +inline +BYTE PureNote::velocity(void)const +{ + return mVelocity; +} + +inline +void PureNote::pitch(BYTE pitch) +{ + mPitch=pitch; +} + +inline +void PureNote::velocity(BYTE velocity) +{ + mVelocity=velocity; +} + +inline +PureNote &PureNote::operator=(const PureNote &somePureNote) +{ + pitch(somePureNote.pitch()); + velocity(somePureNote.velocity()); + return *this; +} + +inline +WORD PureNote::operator==(const PureNote &somePureNote)const +{ + return (pitch()==somePureNote.pitch()&& + velocity()==somePureNote.velocity()); +} + +inline +FileIO &PureNote::operator<<(FileIO &someFileIO) +{ + someFileIO.read(mPitch); + someFileIO.read(mVelocity); + return someFileIO; +} + +inline +String PureNote::toString(void)const +{ + String str; + ::sprintf(str,"pitch:%d velocity:%d",mPitch,mVelocity); + return str; +} + + +#endif + diff --git a/midiseq/rnm.bat b/midiseq/rnm.bat new file mode 100644 index 0000000..5419774 --- /dev/null +++ b/midiseq/rnm.bat @@ -0,0 +1,32 @@ +rename EVNTBLCK.HPP evntblck.hpp +rename EVNTTMR.CPP evnttmr.cpp +rename EVNTTMR.HPP evnttmr.hpp +rename EVNTTYPE.HPP evnttype.hpp +rename MAIN.CPP main.cpp +rename METAEVNT.HPP metaevnt.hpp +rename MIDIBLCK.CPP midiblck.cpp +rename MIDIBLCK.HPP midiblck.hpp +rename MIDICAPS.HPP midicaps.hpp +rename MIDIDATA.CPP mididata.cpp +rename MIDIDATA.HPP mididata.hpp +rename MIDIHDR.HPP midihdr.hpp +rename MIDIMSG.HPP midimsg.hpp +rename MIDIOUT.CPP midiout.cpp +rename MIDIOUT.HPP midiout.hpp +rename MIDISEQ.CPP midiseq.cpp +rename MIDISEQ.HPP midiseq.hpp +rename MIDITRCK.CPP miditrck.cpp +rename MIDITRCK.HPP miditrck.hpp +rename MIDITRK.CPP miditrck.cpp +rename NOTE.HPP note.hpp +rename PUREEVNT.CPP pureevnt.cpp +rename PUREEVNT.HPP pureevnt.hpp +rename PUREHDR.CPP purehdr.cpp +rename PUREHDR.HPP purehdr.hpp +rename PURENOTE.HPP purenote.hpp +rename SMPTE.HPP smpte.hpp +rename STDTMPL.CPP stdtmpl.cpp +rename TEMPO.HPP tempo.hpp +rename TIMEBLCK.CPP timeblck.cpp +rename TIMEBLCK.HPP timeblck.hpp +rename TIMEINFO.HPP timeinfo.hpp diff --git a/midiseq/safe/#MIDIHDR.HPP b/midiseq/safe/#MIDIHDR.HPP new file mode 100644 index 0000000..b754c5a --- /dev/null +++ b/midiseq/safe/#MIDIHDR.HPP @@ -0,0 +1,44 @@ +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#define _MIDISEQ_MIDIHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif + +class MidiHeader : public PureHeader +{ +public: + MidiHeader(void); + virtual ~MidiHeader(); + WORD readHeader(FileIO &fileIO); +private: +}; + +inline +MidiHeader::MidiHeader(void) +{ +} + +inline +MidiHeader::~MidiHeader() +{ +} + +inline +WORD MidiHeader::readHeader(FileIO &fileIO) +{ + return PureHeader::readHeader(fileIO); +} +#endif + + + + + + + + + + diff --git a/midiseq/safe/ChannelModeMessage.hpp b/midiseq/safe/ChannelModeMessage.hpp new file mode 100644 index 0000000..215fae2 --- /dev/null +++ b/midiseq/safe/ChannelModeMessage.hpp @@ -0,0 +1,58 @@ +#ifndef _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#define _MIDISEQ_CHANNELMODEMESSAGE_HPP_ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class ChannelModeMessage +{ +public: + typedef enum ChannelMessage{AllNotesOff,LocalControlOff,LocalControlOn, + Modulation,MainVolume,Pan,Expression,Sustain,ResetAllControllers}; + ChannelModeMessage(ChannelMessage channelMessage=AllNotesOff); + virtual ~ChannelModeMessage(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0,BYTE value=0); +private: + ChannelMessage mChannelMessage; +}; + +inline +ChannelModeMessage::ChannelModeMessage(ChannelMessage channelMessage) +: mChannelMessage(channelMessage) +{ +} + +inline +ChannelModeMessage::~ChannelModeMessage() +{ +} + +inline +PureEvent ChannelModeMessage::getEvent(BYTE deltaTime,BYTE channel,BYTE value) +{ + switch(mChannelMessage) + { + case AllNotesOff : + return PureEvent(MIDIParameter,deltaTime,channel,123,0); + case LocalControlOff : + return PureEvent(MIDIParameter,deltaTime,channel,122,0); + case LocalControlOn : + return PureEvent(MIDIParameter,deltaTime,channel,122,127); + case Modulation : + return PureEvent(MIDIParameter,deltaTime,channel,1,value); + case MainVolume : + return PureEvent(MIDIParameter,deltaTime,channel,7,value); + case Pan : + return PureEvent(MIDIParameter,deltaTime,channel,10,value); + case Expression : + return PureEvent(MIDIParameter,deltaTime,channel,11,value); + case Sustain : + return PureEvent(MIDIParameter,deltaTime,channel,64,value); + case ResetAllControllers : + return PureEvent(MIDIParameter,deltaTime,channel,121,0); + default : + return PureEvent(MIDIParameter,deltaTime,channel,123,0); // default is all notes off + } +} +#endif + diff --git a/midiseq/safe/EVNTBLCK.HPP b/midiseq/safe/EVNTBLCK.HPP new file mode 100644 index 0000000..15399f9 --- /dev/null +++ b/midiseq/safe/EVNTBLCK.HPP @@ -0,0 +1,8 @@ +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#define _MIDISEQ_EVENTBLOCK_HPP_ +class PureEvent; +template +class Block; +typedef Block EventBlock; +#endif + diff --git a/midiseq/safe/EVNTTMR.CPP b/midiseq/safe/EVNTTMR.CPP new file mode 100644 index 0000000..2b56904 --- /dev/null +++ b/midiseq/safe/EVNTTMR.CPP @@ -0,0 +1,11 @@ +#include + +void EventTimer::timerStarted(void) +{ + resetEvent(); +} + +void EventTimer::timerStopped(void) +{ + setEvent(); +} diff --git a/midiseq/safe/EVNTTMR.HPP b/midiseq/safe/EVNTTMR.HPP new file mode 100644 index 0000000..6386100 --- /dev/null +++ b/midiseq/safe/EVNTTMR.HPP @@ -0,0 +1,43 @@ +#ifndef _MIDISEQ_EVENTTIMER_HPP_ +#define _MIDISEQ_EVENTTIMER_HPP_ +#ifndef _COMMON_MMTIMER_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif + +class EventTimer : public Event, public MMTimer +{ +public: + EventTimer(void); + virtual ~EventTimer(); +protected: + EventTimer(const EventTimer &someEventTimer); + EventTimer &operator=(const EventTimer &someEventTimer); + virtual void timerStarted(void); + virtual void timerStopped(void); +private: +}; + +inline +EventTimer::EventTimer(void) +{ +} + +inline +EventTimer::~EventTimer() +{ +} + +inline +EventTimer::EventTimer(const EventTimer &/*someEventTimer*/) +{ // no implementation +} + +inline +EventTimer &EventTimer::operator=(const EventTimer &/*someEventTimer*/) +{ // no implementation + return *this; +} +#endif diff --git a/midiseq/safe/EVNTTYPE.HPP b/midiseq/safe/EVNTTYPE.HPP new file mode 100644 index 0000000..42e13cb --- /dev/null +++ b/midiseq/safe/EVNTTYPE.HPP @@ -0,0 +1,6 @@ +#ifndef _MIDISEQ_EVENTTYPE_HPP_ +#define _MIDISEQ_EVENTTYPE_HPP_ + +enum EventType{MetaEvent=0xFF,SystemExclusiveOne=0xF0,SystemExclusiveTwo=0xF7,NullEvent=0x00}; + +#endif diff --git a/midiseq/safe/MAIN.CPP b/midiseq/safe/MAIN.CPP new file mode 100644 index 0000000..0d2b697 --- /dev/null +++ b/midiseq/safe/MAIN.CPP @@ -0,0 +1,280 @@ +#include +#include + +void testNotes(void); +void testFile(void); +void testEvent(void); + +void testSort(); + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ +// testEvent(); +// testSort(); + testFile(); +// testNotes(); + return 0; +} + +void testFile(void) +{ +// String musicFileName("E:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); +// String musicFileName("E:\\WORK\\GUITAR\\MIDI\\DIANA.MID"); // OK +// String musicFileName("E:\\WORK\\GUITAR\\MIDI\\JESU_1.MID"); // OK +// String musicFileName("E:\\WORK\\GUITAR\\MIDI\\paco.MID"); // OK + + + String musicFileName("E:\\WORK\\GUITAR\\MIDI\\zapatead.mid"); +// String musicFileName("C:\\WINNT\\MEDIA\\PASSPORT.MID"); +// String musicFileName("E:\\WORK\\GUITAR\\MIDI\\BUMBLEBEE.MID"); // OK +// String musicFileName("C:\\WINNT\\MEDIA\\CANYON.MID"); + + + + MidiData midiData(musicFileName); + midiData.play(); + while(midiData.isInPlay()); + midiData.stop(); + ::MessageBox(::GetFocus(),(LPSTR)musicFileName,(LPSTR)"End Play",MB_OK); + return; +} + +void testEvent(void) +{ + String musicFileName("D:\\WORK\\SCENE\\MEDIA\\BMP\\E1M2.MID"); + int requiredChannel=0; + + + MidiData midiData(musicFileName); + midiData.makeRealTime(); + ::OutputDebugString(String("MIDI events=")+String().fromInt(midiData.getEventCount())); + for(int index=0;index + +void testSort() +{ + + +/* + list lst; + PureEvent p1; + PureEvent p2; + PureEvent p3; + PureEvent p4; + PureEvent p5; + PureEvent p6; + PureEvent p7; + PureEvent p8; + PureEvent p9; + + p1.eventType(128); + p2.eventType(128); + p3.eventType(128); + p4.eventType(144); + p5.eventType(128); + p6.eventType(128); + p7.eventType(128); + p8.eventType(128); + p9.eventType(144); + + lst.push_back(p1); + lst.push_back(p2); + lst.push_back(p3); + lst.push_back(p4); + lst.push_back(p5); + lst.push_back(p6); + lst.push_back(p7); + lst.push_back(p8); + lst.push_back(p9); + lst.sort(); + + list::iterator p=lst.begin(); + while(p!=lst.end()) + { + ::OutputDebugString((*p).toString()+String("\n")); + p++; + } + +*/ + + + Array pureEvents; + QuickSort eventSorter; + PureEvent pureEvent; + + pureEvents.size(9); + pureEvent.eventType(128); + pureEvents[0]=pureEvent; + pureEvent.eventType(128); + pureEvents[1]=pureEvent; + pureEvent.eventType(128); + pureEvents[2]=pureEvent; + pureEvent.eventType(144); + pureEvents[3]=pureEvent; + pureEvent.eventType(128); + pureEvents[4]=pureEvent; + pureEvent.eventType(128); + pureEvents[5]=pureEvent; + pureEvent.eventType(128); + pureEvents[6]=pureEvent; + pureEvent.eventType(128); + pureEvents[7]=pureEvent; + pureEvent.eventType(144); + pureEvents[8]=pureEvent; + + eventSorter.sortItems(pureEvents); + ::OutputDebugString("\n"); + for(int index=0;indexMaxPitch)pitch=MaxPitch; + mPitch=pitch; +} + +inline +WORD PitchBend::getPitch(void)const +{ + return mPitch; +} + +inline +void PitchBend::centerWheel(void) +{ + mPitch=CenterPitch; +} + +inline +BYTE PitchBend::getLo(void)const +{ + return mPitch&0xFF; +} + +inline +BYTE PitchBend::getHi(void)const +{ + return mPitch>>8; +} + +inline +PureEvent PitchBend::getEvent(void)const +{ + String strPitch; + ::sprintf(strPitch.str(),"lo:0x%04lx hi:0x%04lx\n",getLo(),getHi()); + ::OutputDebugString(strPitch.str()); + PureEvent pureEvent(MIDIPitchBend,0,0,getHi(),getLo()); + return pureEvent; +} + +void testNotes(void) +{ + MIDIOutputDevice midiOut; + + NoteOn noteOn(PureNote(70,60)); + PitchBend pitchBend; + pitchBend.setPitch(0x0); + pitchBend.setPitch(0x2000+128); + +// pitchBend.setPitch(0x3FFF); + NoteOff noteOff(PureNote(70,60)); + + if(!midiOut.openDevice())return; + + midiOut.midiEvent(noteOn.getEvent()); + midiOut.midiEvent(pitchBend.getEvent()); + pitchBend.setPitch(0x2000); + midiOut.midiEvent(pitchBend.getEvent()); + + midiOut.midiEvent(noteOn.getEvent()); + + midiOut.midiEvent(noteOff.getEvent()); + + midiOut.closeDevice(); + return; +} + +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\WALTHIUS\\DEMON21T.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\CYBRBEAT.MID"); +// String musicFileName("C:\\WINDOWS\\CANYON.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\MID\\D_STALKS.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\MID\\E1M9.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\EXORCIST.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\YYZ.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\K330-1.MID"); +// String musicFileName("C:\\WORK\\SCENE\\MEDIA\\K330-2.MID"); diff --git a/midiseq/safe/METAEVNT.HPP b/midiseq/safe/METAEVNT.HPP new file mode 100644 index 0000000..ffc1919 --- /dev/null +++ b/midiseq/safe/METAEVNT.HPP @@ -0,0 +1,8 @@ +#ifndef _MIDISEQ_METAEVENTTYPE_HPP_ +#define _MIDISEQ_METAEVENTTYPE_HPP_ + +enum MetaEventType{SequenceNumberEvent=0x00,TextEvent=0x01,CopyrightNotice=0x02, + SequenceTrackName=0x03,InstrumentName=0x04,Lyric=0x05,Marker=0x06,CuePoint=0x07, + ChannelPrefix=0x20,EndOfTrack=0x2F,SetTempo=0x51,SMPTEFormatSpec=0x54, + TimeSignature=0x58,KeySignature=0x59,SequencerSpecificMetaEvent=0x7F}; +#endif diff --git a/midiseq/safe/MIDIBLCK.CPP b/midiseq/safe/MIDIBLCK.CPP new file mode 100644 index 0000000..1917aa5 --- /dev/null +++ b/midiseq/safe/MIDIBLCK.CPP @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include + +MIDIBlock &MIDIBlock::operator=(const MIDIBlock &someMIDIBlock) +{ + for(short itemIndex=0;itemIndex +#endif +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#include +#endif + +class String; + +class MIDIBlock +{ +public: + enum{MaxChannels=16}; + MIDIBlock(void); + MIDIBlock(const MIDIBlock &someMIDIBlock); + virtual ~MIDIBlock(); + EventBlock &operator[](WORD itemIndex); + MIDIBlock &operator=(const MIDIBlock &someMIDIBlock); + void printBlock(const String &pathFileName); +private: + EventBlock mMIDIBlock[MaxChannels]; +}; + +inline +MIDIBlock::MIDIBlock(void) +{ +} + +inline +MIDIBlock::MIDIBlock(const MIDIBlock &someMIDIBlock) +{ + *this=someMIDIBlock; +} + +inline +MIDIBlock::~MIDIBlock() +{ +} + +inline +EventBlock &MIDIBlock::operator[](WORD itemIndex) +{ + return mMIDIBlock[itemIndex]; +} +#endif + diff --git a/midiseq/safe/MIDICAPS.HPP b/midiseq/safe/MIDICAPS.HPP new file mode 100644 index 0000000..14b41ea --- /dev/null +++ b/midiseq/safe/MIDICAPS.HPP @@ -0,0 +1,120 @@ +#ifndef _MIDISEQ_MIDIOUTCAPS_HPP_ +#define _MIDISEQ_MIDIOUTCAPS_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class MIDIOutCaps : private MIDIOUTCAPS +{ +public: + enum Type{MIDIPort=MOD_MIDIPORT,SQSynth=MOD_SQSYNTH,FMSynth=MOD_FMSYNTH,Mapper=MOD_MAPPER}; + enum Channel{Channel0=0x0001,Channel1=0x0002,Channel2=0x0004,Channel3=0x0008, + Channel4=0x0010,Channel5=0x0020,Channel6=0x0040,Channel7=0x0080,Channel8=0x0100, + Channel9=0x0200,Channel10=0x0400,Channel11=0x0800,Channel12=0x1000, + Channel13=0x2000,Channel14=0x4000,Channel15=0x8000,ChannelAll=0xFFFF}; + MIDIOutCaps(void); + ~MIDIOutCaps(); + UINT deviceID(void)const; + UINT productID(void)const; + WORD driverVersion(void)const; + String productName(void)const; + Type technology(void)const; + WORD numVoices(void)const; + WORD numNotes(void)const; + WORD hasChannel(MIDIOutCaps::Channel channel)const; + WORD hasPatchCache(void)const; + WORD hasLeftRightVolume(void)const; + WORD hasVolume(void)const; + operator MIDIOUTCAPS*(void); +private: +}; + +inline +MIDIOutCaps::MIDIOutCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +MIDIOutCaps::~MIDIOutCaps() +{ +} + +inline +MIDIOutCaps::operator MIDIOUTCAPS*(void) +{ + return this; +} + +inline +UINT MIDIOutCaps::deviceID(void)const +{ + return wMid; +} + +inline +UINT MIDIOutCaps::productID(void)const +{ + return wPid; +} + +inline +WORD MIDIOutCaps::driverVersion(void)const +{ + return vDriverVersion; +} + +inline +String MIDIOutCaps::productName(void)const +{ + return szPname; +} + +inline +MIDIOutCaps::Type MIDIOutCaps::technology(void)const +{ + return (Type)wTechnology; +} + +inline +WORD MIDIOutCaps::numVoices(void)const +{ + return wVoices; +} + +inline +WORD MIDIOutCaps::numNotes(void)const +{ + return wNotes; +} + +inline +WORD MIDIOutCaps::hasChannel(MIDIOutCaps::Channel channel)const +{ + return (channel&wChannelMask); +} + +inline +WORD MIDIOutCaps::hasVolume(void)const +{ + return (WORD)(dwSupport&MIDICAPS_VOLUME); +} + +inline +WORD MIDIOutCaps::hasLeftRightVolume(void)const +{ + return (WORD)(dwSupport&MIDICAPS_LRVOLUME); +} + +inline +WORD MIDIOutCaps::hasPatchCache(void)const +{ + return (WORD)(dwSupport&MIDICAPS_CACHE); +} +#endif diff --git a/midiseq/safe/MIDIDATA.CPP b/midiseq/safe/MIDIDATA.CPP new file mode 100644 index 0000000..9b71661 --- /dev/null +++ b/midiseq/safe/MIDIDATA.CPP @@ -0,0 +1,86 @@ +#include + +MidiData::MidiData(const String &midiPathFileName) +: mTimerCallback(this,&MidiData::timerEvent), + mMidiFile(midiPathFileName,FileIO::BigEndian), MidiTrack(mMidiFile) +{ + insertHandler(&mTimerCallback); + if(!readHeader(mMidiFile))return; + ::OutputDebugString(String("[MidiData::MidiData]MIDI header=")+String(MidiHeader::toString()+String("\n")).str()); + setMethod(timingMethod()); +} + +MidiData::~MidiData() +{ + stopTimer(); + mMIDIOutDevice.closeDevice(); + mMIDIEventVector.size(0); +} + +bool MidiData::play(WORD blocking) +{ + mPlayIndex=0; + if(!makeRealTime())return false; + startTimer(TimerDelay); + if(blocking)waitEvent(); + return true; +} + +bool MidiData::makeRealTime(void) +{ + TimeBlock timeBlock; + + mTempoChange.remove(); + if(!tracks())return false; + while(readTrack()); + if(!mTempoChange.size())return false; + timeBlock.setTempo(mTempoChange[0].microsecsPerQtrNote()); + timeBlock.setDivision(method()); + timeBlock.setStartTime(getSystemTime()+TwoSecs); + timeBlock.fixTimeBlock(mMIDIEvents,mMIDIEventVector); + return true; +} + +CallbackData::ReturnType MidiData::timerEvent(CallbackData &/*someCallbackData*/) +{ + DWORD currTime(getSystemTime()); + + if(!mMIDIOutDevice.hasDevice()||!mMIDIEventVector.size())return closeDevice(); + while(mMIDIEventVector[mPlayIndex].playTime()<=currTime) + { + if(!mMIDIOutDevice.midiEvent(mMIDIEventVector[mPlayIndex]))return closeDevice(); + if(++mPlayIndex>=mMIDIEventVector.size())return closeDevice(); + } + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType MidiData::closeDevice(void) +{ + mMIDIOutDevice.closeDevice(); + return (CallbackData::ReturnType)FALSE; +} + +// virtual overloads + +void MidiData::midiChannelMessage(PureEvent &midiEvent) +{ + mMIDIEvents[midiEvent.channel()].insert(&midiEvent); + return; +} + +void MidiData::setTempo(DWORD microsecsPerQtrNote) +{ + mTempoChange.insert(&TempoChange(microsecsPerQtrNote,0L)); + return; +} + +void MidiData::smpteFormat(const SMPTEFormat &someSMPTEFormat) +{ + mSMPTEFormat=someSMPTEFormat; + return; +} + +void MidiData::timeSignature(const TimeInfo &/*someTimeInfo*/) +{ + return; +} diff --git a/midiseq/safe/MIDIDATA.HPP b/midiseq/safe/MIDIDATA.HPP new file mode 100644 index 0000000..11b08ff --- /dev/null +++ b/midiseq/safe/MIDIDATA.HPP @@ -0,0 +1,126 @@ +#ifndef _MIDISEQ_MIDIDATA_HPP_ +#define _MIDISEQ_MIDIDATA_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +//#ifndef _COMMON_PUREVECTOR_HPP_ +//#include +//#endif + +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + + +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDITRACK_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEBLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#include +#endif +#ifndef _MIDISEQ_TEMPOCHANGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIBLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTTIMER_HPP_ +#include +#endif + +class String; + +class MidiData : public MidiHeader, public MidiTrack, public EventTimer +{ +public: + MidiData(const String &midiPathFileName); + virtual ~MidiData(); + bool play(WORD blocking=TRUE); + bool stop(void); + bool isInPlay(void)const; + bool makeRealTime(void); + PureEvent &getEventAt(int index); + DWORD getEventCount(void)const; +protected: + void setTempo(DWORD microsecsPerQtrNote); + void midiChannelMessage(PureEvent &channelEvent); + void smpteFormat(const SMPTEFormat &someSMPTEFormat); + void timeSignature(const TimeInfo &someTimeInfo); +private: + enum {TimerDelay=10,ThreeSecs=3000,TwoSecs=2000,OneSec=1000}; + WORD timerEvent(void); + bool readTrack(void); + void operator=(const MidiData &someMidiData); + CallbackData::ReturnType timerEvent(CallbackData &someCallbackData); + CallbackData::ReturnType closeDevice(void); + + Callback mTimerCallback; +// PureVector mMIDIEventVector; + Array mMIDIEventVector; + Block mTempoChange; + MIDIBlock mMIDIEvents; + MIDIOutputDevice mMIDIOutDevice; + FileIO mMidiFile; + SMPTEFormat mSMPTEFormat; + DWORD mPlayIndex; +}; + +inline +void MidiData::operator=(const MidiData &/*someMidiData*/) +{ + return; +} + +inline +bool MidiData::readTrack(void) +{ + return MidiTrack::readTrack(); +} + +inline +PureEvent &MidiData::getEventAt(int index) +{ + return mMIDIEventVector[index]; +} + +inline +DWORD MidiData::getEventCount(void)const +{ + return mMIDIEventVector.size(); +} + +inline +bool MidiData::stop(void) +{ + if(!isRunning())return true; + return stopTimer(); +} + +inline +bool MidiData::isInPlay(void)const +{ + return isRunning(); +} +#endif + diff --git a/midiseq/safe/MIDIHDR.HPP b/midiseq/safe/MIDIHDR.HPP new file mode 100644 index 0000000..6cd72c3 --- /dev/null +++ b/midiseq/safe/MIDIHDR.HPP @@ -0,0 +1,34 @@ +#ifndef _MIDISEQ_MIDIHEADER_HPP_ +#define _MIDISEQ_MIDIHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif + +class MidiHeader : public PureHeader +{ +public: + MidiHeader(void); + virtual ~MidiHeader(); + WORD readHeader(FileIO &fileIO); +private: +}; + +inline +MidiHeader::MidiHeader(void) +{ +} + +inline +MidiHeader::~MidiHeader() +{ +} + +inline +WORD MidiHeader::readHeader(FileIO &fileIO) +{ + return PureHeader::readHeader(fileIO); +} +#endif diff --git a/midiseq/safe/MIDIMSG.HPP b/midiseq/safe/MIDIMSG.HPP new file mode 100644 index 0000000..a232b0c --- /dev/null +++ b/midiseq/safe/MIDIMSG.HPP @@ -0,0 +1,7 @@ +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#define _MIDISEQ_MIDICHANNELMESSAGE_HPP_ + +enum MidiChannelMsg{MIDIProgramChange=0xC0,MIDINoteOff=0x80,MIDINoteOn=0x90, + MIDIKeyPressure=0xA0,MIDIParameter=0xB0,MIDIPitchBend=0xE0, + MIDIChannelPressure=0xD0}; +#endif diff --git a/midiseq/safe/MIDIOUT.CPP b/midiseq/safe/MIDIOUT.CPP new file mode 100644 index 0000000..b547c46 --- /dev/null +++ b/midiseq/safe/MIDIOUT.CPP @@ -0,0 +1,119 @@ +#include +#include + +MIDIOutputDevice::MIDIOutputDevice(void) +: mHasDevice(FALSE), mMIDIDeviceID(MIDIMAPPER) +{ + openDevice(); +} + +WORD MIDIOutputDevice::openDevice(void) +{ + closeDevice(); + if(!::midiOutGetNumDevs())return FALSE; + if(::midiOutOpen(&mhMIDIOutput,mMIDIDeviceID,0,0,0))return FALSE; + hasDevice(TRUE); + getDeviceCapabilities(); + return TRUE; +} + +void MIDIOutputDevice::closeDevice(void) +{ + if(!hasDevice())return; + ::midiOutReset(mhMIDIOutput); + ::midiOutClose(mhMIDIOutput); + hasDevice(FALSE); +} + +WORD MIDIOutputDevice::getDeviceCapabilities(void) +{ + if(!hasDevice())return FALSE; + ::memset(&mMIDIOutDevCaps,0,sizeof(MIDIOutCaps)); + if(::midiOutGetDevCaps(mMIDIDeviceID,mMIDIOutDevCaps,sizeof(MIDIOutCaps)))return FALSE; + return TRUE; +} + +WORD MIDIOutputDevice::midiEvent(const PureEvent &somePureEvent) +{ + union{DWORD dwData;BYTE bData[4];}unionData; + +// String str=(String)((PureEvent&)somePureEvent)+String("\n");; +// ::OutputDebugString(str.str()); + if(!hasDevice())return FALSE; + unionData.bData[0]=somePureEvent.eventType(); + unionData.bData[1]=somePureEvent.firstData(); + unionData.bData[2]=somePureEvent.secondData(); + unionData.bData[3]=0; + if(::midiOutShortMsg(mhMIDIOutput,unionData.dwData))return FALSE; + return TRUE; +} + +WORD MIDIOutputDevice::getLeftVolume(void)const +{ + DWORD volumeLevel; + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; +#if WINVER>=0x0400 + if(::midiOutGetVolume(mhMIDIOutput,&volumeLevel))return FALSE; +#else + if(::midiOutGetVolume(mMIDIDeviceID,&volumeLevel))return FALSE; +#endif + return LOWORD(volumeLevel); +} + +WORD MIDIOutputDevice::getRightVolume(void)const +{ + DWORD volumeLevel; + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; +#if WINVER>=0x0400 + if(::midiOutGetVolume(mhMIDIOutput,&volumeLevel))return FALSE; +#else + if(::midiOutGetVolume(mMIDIDeviceID,&volumeLevel))return FALSE; +#endif + if(!mMIDIOutDevCaps.hasLeftRightVolume())return LOWORD(volumeLevel); + return HIWORD(volumeLevel); +} + +WORD MIDIOutputDevice::setRightVolume(WORD volumeRight) +{ + DWORD volumeLevel; + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; + volumeLevel=volumeRight; + if(mMIDIOutDevCaps.hasLeftRightVolume()) + { + volumeLevel<<=8; + volumeLevel+=getLeftVolume(); + } +#if WINVER>=0x0400 + if(::midiOutSetVolume(mhMIDIOutput,volumeLevel))return FALSE; +#else + if(::midiOutSetVolume(mMIDIDeviceID,volumeLevel))return FALSE; +#endif + return TRUE; +} + +WORD MIDIOutputDevice::setLeftVolume(WORD volumeLeft) +{ + DWORD volumeLevel(0L); + + if(!hasDevice())return FALSE; + if(!mMIDIOutDevCaps.hasVolume())return FALSE; + if(mMIDIOutDevCaps.hasLeftRightVolume()) + { + volumeLevel=getRightVolume(); + volumeLevel<<=8; + } + volumeLevel+=volumeLeft; +#if WINVER>=0x0400 + if(::midiOutSetVolume(mhMIDIOutput,volumeLevel))return FALSE; +#else + if(::midiOutSetVolume(mMIDIDeviceID,volumeLevel))return FALSE; +#endif + return TRUE; +} + diff --git a/midiseq/safe/MIDIOUT.HPP b/midiseq/safe/MIDIOUT.HPP new file mode 100644 index 0000000..af90b94 --- /dev/null +++ b/midiseq/safe/MIDIOUT.HPP @@ -0,0 +1,57 @@ +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#define _MIDISEQ_MIDIOUTDEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTCAPS_HPP_ +#include +#endif + +class MIDIOutputDevice +{ +public: + MIDIOutputDevice(void); + virtual ~MIDIOutputDevice(); + WORD midiEvent(const PureEvent &somePureEvent); + WORD hasDevice(void)const; + void closeDevice(void); + WORD openDevice(void); + WORD getRightVolume(void)const; + WORD getLeftVolume(void)const; + WORD setRightVolume(WORD volumeLevel); + WORD setLeftVolume(WORD volumeLevel); +private: + typedef HMIDIOUT MIDIHandle; + void hasDevice(WORD hasDevice); + WORD getDeviceCapabilities(void); + + UINT mMIDIDeviceID; + WORD mHasDevice; + MIDIHandle mhMIDIOutput; + MIDIOutCaps mMIDIOutDevCaps; +}; + +inline +MIDIOutputDevice::~MIDIOutputDevice(void) +{ + closeDevice(); +} + +inline +WORD MIDIOutputDevice::hasDevice(void)const +{ + return mHasDevice; +} + +inline +void MIDIOutputDevice::hasDevice(WORD hasDevice) +{ + mHasDevice=hasDevice; +} +#endif diff --git a/midiseq/safe/MIDISEQ.CPP b/midiseq/safe/MIDISEQ.CPP new file mode 100644 index 0000000..45f379c --- /dev/null +++ b/midiseq/safe/MIDISEQ.CPP @@ -0,0 +1,73 @@ +#include +#include +#include + +MidiData *lpMidiData=0; + +#if defined(__FLAT__) +#if defined(_MSC_VER) +BOOL _stdcall DllMain(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +#else +BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +#endif +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : + lpMidiData=0; + break; + case DLL_PROCESS_DETACH : + stop(); + break; + } + return TRUE; +} +#else +int CALLBACK _export LibMain(HINSTANCE /*hInstance*/,WORD /*wDataSeg*/,WORD /*wHeapSize*/,LPSTR /*lpszCmdLine*/) +{ + lpMidiData=0; + return TRUE; +} + +int CALLBACK _export WEP(int /*nExitType*/) +{ + return stop(); +} +#endif + +#if defined(_MSC_VER) +short _stdcall play(String midiPathFileName) +#else +short CALLBACK _export play(String midiPathFileName) +#endif +{ + if(lpMidiData)stop(); + lpMidiData=new MidiData(midiPathFileName); + if(!lpMidiData)return FALSE; + lpMidiData->play(); + return TRUE; +} + +#if defined(_MSC_VER) +short _stdcall stop(void) +#else +short CALLBACK _export stop(void) +#endif +{ + if(!lpMidiData)return FALSE; + lpMidiData->stop(); + delete lpMidiData; + lpMidiData=0; + return TRUE; +} + +#if defined(_MSC_VER) +short _stdcall isInPlay(void) +#else +short CALLBACK _export isInPlay(void) +#endif +{ + if(!lpMidiData)return FALSE; + return lpMidiData->isInPlay(); +} + diff --git a/midiseq/safe/MIDISEQ.HPP b/midiseq/safe/MIDISEQ.HPP new file mode 100644 index 0000000..a011f35 --- /dev/null +++ b/midiseq/safe/MIDISEQ.HPP @@ -0,0 +1,30 @@ +#ifndef _MIDISEQ_MIDISEQ_HPP_ +#define _MIDISEQ_MIDISEQ_HPP_ + +#if defined(__FLAT__) +extern "C" +{ +#if defined(_MSC_VER) +__declspec(dllexport) BOOL _stdcall DllMain(HINSTANCE hInstance,DWORD reasonCode,LPVOID lpvReserved); +#else +BOOL WINAPI DllEntryPoint(HINSTANCE hInstance,DWORD reasonCode,LPVOID lpvReserved); +#endif +} +#else +extern "C" +{ +int CALLBACK _export LibMain(HINSTANCE hInstance,WORD wDataSeg,WORD wHeapSize,LPSTR lpszCmdLine); +int CALLBACK _export WEP(int nExitType); +} +#endif + +#if defined(_MSC_VER) +__declspec(dllexport) short _stdcall play(String midiPathFileName); +__declspec(dllexport) short _stdcall stop(void); +__declspec(dllexport) short _stdcall isInPlay(void); +#else +short CALLBACK _export play(String midiPathFileName); +short CALLBACK _export stop(void); +short CALLBACK _export isInPlay(void); +#endif +#endif diff --git a/midiseq/safe/MIDITRCK.CPP b/midiseq/safe/MIDITRCK.CPP new file mode 100644 index 0000000..0f682d6 --- /dev/null +++ b/midiseq/safe/MIDITRCK.CPP @@ -0,0 +1,378 @@ +#include +#include + +bool MidiTrack::readTrack(void) +{ + mBytesRead=0; + if(PureHeader::Unset==mTimingMethod)return false; + if(!mMidiFile.read(mTrack,sizeof(mTrack)))return false; + if(::strncmp(mTrack,"MTrk",sizeof(mTrack)))return false; + if(!mMidiFile.read(mLengthData))return false; + if(!mLengthData)return false; + readTime(); + while(mBytesRead=mLengthData)break; + if(NullEvent==mRunningEvent){readTime();mLastEventType=mEventType;} + else mLastEventType=mRunningEvent; + } + return true; +} + +void MidiTrack::readTime(void) +{ + switch(mTimingMethod) + { + case PureHeader::DeltaTime : + case PureHeader::TimeCode : + mDeltaTime=readVarLength(); + break; + } +} + +WORD MidiTrack::handleEvent(void) +{ + WORD returnCode; + + outDebug("[handleEvent]Event Type",mEventType); + switch(mEventType) + { + case MetaEvent : + mRunningEvent=NullEvent; + returnCode=handleMetaEvent(); + break; + case SystemExclusiveOne : + case SystemExclusiveTwo : + mRunningEvent=NullEvent; + returnCode=handleSystemExclusiveEvent(); + break; + default : + returnCode=handleMIDIChannelMessage(); + break; + } + return returnCode; +} + +WORD MidiTrack::isChannelMessage(BYTE eventType)const +{ + BYTE status((eventType>>4)&0x0F); + + outDebug("[isChannelMessage]eventType",eventType); + if((status<=0x07)||(0x0F==status)) + { + outDebug("[isChannelMessage] FAIL",eventType); + return false; + } + if((status>=0x08&&status<=0x0B)||(status==0x0E))return 2; + return 1; +} + +WORD MidiTrack::handleMIDIChannelMessage(void) +{ + WORD returnCode; + + if(isRunningStatus(mEventType)) + { + if(NullEvent==mRunningEvent)mRunningEvent=mLastEventType; + mEventType=mLastEventType; + } + else mRunningEvent=NullEvent; + if(isChannelMessage(mEventType))returnCode=processMIDIChannelMessage(); + else returnCode=FALSE; + return returnCode; +} + +WORD MidiTrack::handleMetaEvent(void) +{ + BYTE entryType; + WORD returnCode(TRUE); + + if(!mMidiFile.read(entryType))return FALSE; + mBytesRead++; + switch(entryType) + { + case SequenceNumberEvent : + outDebug("[handleMetaEvent]SequenceNumberEvent"); + returnCode=handleMetaSequenceNumberEvent(); + break; + case TextEvent : + outDebug("[handleMetaEvent]TextEvent"); + returnCode=handleMetaTextEvent(); + break; + case CopyrightNotice : + outDebug("[handleMetaEvent]CopyrightNotice"); + returnCode=handleMetaTextEvent(); + break; + case SequenceTrackName : + outDebug("[handleMetaEvent]SequenceTrackName"); + handleGenericMetaEvent(); + break; + case InstrumentName : + outDebug("[handleMetaEvent]InstrumentName"); + handleGenericMetaEvent(); + break; + case Lyric : + outDebug("[handleMetaEvent]Lyric"); + handleGenericMetaEvent(); + break; + case Marker : + outDebug("[handleMetaEvent]Marker"); + handleGenericMetaEvent(); + break; + case CuePoint : + outDebug("[handleMetaEvent]CuePoint"); + handleGenericMetaEvent(); + break; + case ChannelPrefix : + outDebug("[handleMetaEvent]ChannelPrefix"); + handleChannelPrefix(); + break; + case EndOfTrack : + outDebug("[handleMetaEvent]EndOfTrack"); + handleGenericMetaEvent(); + returnCode=FALSE; + break; + case SetTempo : + outDebug("[handleMetaEvent]SetTempo"); + handleSetTempoEvent(); + break; + case SMPTEFormatSpec : + outDebug("[handleMetaEvent]SMTPFormatSpec"); + handleSMPTEFormatEvent(); + break; + case TimeSignature : + outDebug("[handleMetaEvent]TimeSignature"); + handleTimeSignatureEvent(); + break; + case KeySignature : + outDebug("[handleMetaEvent]KeySignature"); + handleGenericMetaEvent(); + break; + case SequencerSpecificMetaEvent : + outDebug("[handleMetaEvent]SequencerSpecificMetaEvent"); + handleGenericMetaEvent(); + break; + default : + handleGenericMetaEvent(); + break; + } + return returnCode; +} + +WORD MidiTrack::handleSystemExclusiveEvent(void) +{ + return handleGenericMetaEvent(); +} + +WORD MidiTrack::handleMetaSequenceNumberEvent(void) +{ + WORD sequenceNumber; + + if(!mMidiFile.read(sequenceNumber))return FALSE; + mBytesRead++; + return TRUE; +} + +WORD MidiTrack::handleMetaTextEvent(void) +{ + BYTE textLength; + BYTE textByte; + + if(!mMidiFile.read(textLength))return FALSE; + mBytesRead++; + for(short index=0;index +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTTYPE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif +#ifndef _MIDISEQ_METAEVENTTYPE_HPP_ +#include +#endif +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#include +#endif +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTE_HPP_ +#include +#endif + +class MidiTrack +{ +public: + MidiTrack(FileIO &someMidiFile); + virtual ~MidiTrack(); + void setMethod(PureHeader::Method timingMethod); + bool readTrack(void); + DWORD lengthData(void)const; +protected: + virtual void midiChannelMessage(PureEvent &channelEvent); + virtual void setTempo(DWORD microsecondsPerQtrNote); + virtual void smpteFormat(const SMPTEFormat &someSMPTEFormat); + virtual void timeSignature(const TimeInfo &someTimeInfo); +private: + enum {TrackIDLen=4,TempoEventLength=3,TimeSignatureEventLength=4}; + void readTime(void); + WORD handleEvent(void); + WORD handleMetaEvent(void); + WORD handleMIDIChannelMessage(void); + WORD handleGenericMetaEvent(void); + WORD handleSystemExclusiveEvent(void); + WORD handleMetaTextEvent(void); + WORD handleMetaSequenceNumberEvent(void); + WORD handleTimeSignatureEvent(void); + WORD handleSetTempoEvent(void); + WORD handleSMPTEFormatEvent(void); + WORD handleChannelPrefix(void); + WORD processMIDIChannelMessage(void); + WORD isChannelMessage(BYTE eventType)const; + WORD isRunningStatus(BYTE eventType)const; + DWORD readVarLength(void); + void lengthData(DWORD lengthData); + void operator=(const MidiTrack &someMidiTrack); + void outDebug(const String &message,BYTE data)const; + void outDebug(const String &message)const; + + char mTrack[TrackIDLen]; + DWORD mLengthData; + BYTE mEventType; + BYTE mLastEventType; + BYTE mRunningEvent; + DWORD mEventLength; + DWORD mBytesRead; + DWORD mDeltaTime; + FileIO &mMidiFile; + PureHeader::Method mTimingMethod; + NoteOn mNoteOn; + NoteOff mNoteOff; + bool mIsDebug; +}; + +inline +MidiTrack::MidiTrack(FileIO &someMidiFile) +: mLengthData(0), mEventType(NullEvent), mLastEventType(NullEvent), + mRunningEvent(NullEvent), mEventLength(0), mMidiFile(someMidiFile), + mTimingMethod(PureHeader::Unset), mDeltaTime(0) ,mIsDebug(true) +{ +} + +inline +MidiTrack::~MidiTrack() +{ +} + +inline +void MidiTrack::setMethod(PureHeader::Method timingMethod) +{ + mTimingMethod=timingMethod; +} + +inline +DWORD MidiTrack::lengthData(void)const +{ + return mLengthData; +} + +inline +void MidiTrack::lengthData(DWORD lengthData) +{ + mLengthData=lengthData; +} + +inline +WORD MidiTrack::isRunningStatus(BYTE eventType)const +{ + return (!(eventType&0x80)); +} + +inline +void MidiTrack::operator=(const MidiTrack &/*someMidiTrack*/) +{ + return; +} +#endif diff --git a/midiseq/safe/MIDITRK.CPP b/midiseq/safe/MIDITRK.CPP new file mode 100644 index 0000000..f80b1e3 --- /dev/null +++ b/midiseq/safe/MIDITRK.CPP @@ -0,0 +1,4 @@ + +WORD readTrack(FILE *lpFilePointer); + + diff --git a/midiseq/safe/NOTE.HPP b/midiseq/safe/NOTE.HPP new file mode 100644 index 0000000..89525e3 --- /dev/null +++ b/midiseq/safe/NOTE.HPP @@ -0,0 +1,12 @@ +#ifndef _MIDISEQ_NOTE_HPP_ +#define _MIDISEQ_NOTE_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTEON_HPP_ +#include +#endif +#ifndef _MIDISEQ_NOTEOFF_HPP_ +#include +#endif +#endif \ No newline at end of file diff --git a/midiseq/safe/PUREEVNT.CPP b/midiseq/safe/PUREEVNT.CPP new file mode 100644 index 0000000..f42d1ee --- /dev/null +++ b/midiseq/safe/PUREEVNT.CPP @@ -0,0 +1,33 @@ +#include +#include + +//PureEvent::operator String(void) +String PureEvent::toString(void)const +{ + String pureEventString; + String eventString; + + pureEventString.reserve(1024); + switch(eventType()&0xF0) + { + case MIDIChannelPressure : {eventString="MIDIChannelPressure";break;} + case MIDIProgramChange : {eventString="MIDIProgramChange";break;} + case MIDIKeyPressure : {eventString="MIDIKeyPressure";break;} + case MIDIParameter : {eventString="MIDIParameter";break;} + case MIDIPitchBend : {eventString="MIDIPitchBend";break;} + case MIDINoteOff : {eventString="MIDINoteOff";break;} + case MIDINoteOn : {eventString="MIDINoteOn";break;} + default : {eventString="UNKNOWN MIDICHANNEL MESSAGE";break;} + } + ::sprintf(pureEventString, + "eventType:%3d [% 20s] deltaTime:%5ld playTime:%d channel:%2d byteOne:%3d byteTwo:%3d midiTime:%10ld", + (short)eventType(), + (LPSTR)eventString, + deltaTime(), + playTime(), + (short)channel(), + (short)firstData(), + (short)secondData(), + midiTime()); + return pureEventString; +} diff --git a/midiseq/safe/PUREEVNT.HPP b/midiseq/safe/PUREEVNT.HPP new file mode 100644 index 0000000..731eed3 --- /dev/null +++ b/midiseq/safe/PUREEVNT.HPP @@ -0,0 +1,212 @@ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#define _MIDISEQ_PUREEVENT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ +#include +#endif + +class PureEvent +{ +public: + PureEvent(void); + PureEvent(const PureEvent &somePureEvent); + PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData); + virtual ~PureEvent(); + BYTE eventType(void)const; + DWORD deltaTime(void)const; + DWORD playTime(void)const; + BYTE channel(void)const; + BYTE firstData(void)const; + BYTE secondData(void)const; + DWORD midiTime(void)const; + void eventType(BYTE eventType); + void deltaTime(DWORD deltaTime); + void playTime(DWORD playTime); + void channel(BYTE channel); + void firstData(BYTE firstData); + void secondData(BYTE secondData); + void midiTime(DWORD midiTime); + WORD operator==(const PureEvent &somePureEvent)const; + WORD operator<(const PureEvent &somePureEvent)const; + WORD operator>(const PureEvent &somePureEvent)const; + String toString(void)const; + PureEvent &operator=(const PureEvent &somePureEvent); +private: + BYTE mEventType; + DWORD mDeltaTime; + BYTE mChannel; + BYTE mFirstData; + BYTE mSecondData; + DWORD mPlayTime; + DWORD mMIDITime; +}; + +inline +PureEvent::PureEvent(void) +: mEventType(0), mDeltaTime(0L), mChannel(0), mFirstData(0), mSecondData(0), + mPlayTime(0L), mMIDITime(0L) +{ +} + +inline +PureEvent::PureEvent(const PureEvent &somePureEvent) +: mEventType(somePureEvent.mEventType), mDeltaTime(somePureEvent.mDeltaTime), + mPlayTime(somePureEvent.mPlayTime), mChannel(somePureEvent.mChannel), + mFirstData(somePureEvent.mFirstData), mSecondData(somePureEvent.mSecondData), + mMIDITime(somePureEvent.mMIDITime) +{ +} + +inline +PureEvent::PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData) +: mEventType(eventType), mDeltaTime(deltaTime), mChannel(channel), mFirstData(firstData), + mSecondData(secondData), mPlayTime(0L), mMIDITime(0L) +{ +} + +inline +PureEvent::~PureEvent() +{ +} + +// accessors + +inline +BYTE PureEvent::eventType(void)const +{ + return mEventType; +} + +inline +DWORD PureEvent::deltaTime(void)const +{ + return mDeltaTime; +} + +inline +DWORD PureEvent::playTime(void)const +{ + return mPlayTime; +} + +inline +DWORD PureEvent::midiTime(void)const +{ + return mMIDITime; +} + +inline +BYTE PureEvent::channel(void)const +{ + return mChannel; +} + +inline +BYTE PureEvent::firstData(void)const +{ + return mFirstData; +} + +inline +BYTE PureEvent::secondData(void)const +{ + return mSecondData; +} + +// mutators + +inline +void PureEvent::eventType(BYTE eventType) +{ + mEventType=eventType; +} + +inline +void PureEvent::deltaTime(DWORD deltaTime) +{ + mDeltaTime=deltaTime; +} + +inline +void PureEvent::playTime(DWORD playTime) +{ + mPlayTime=playTime; +} + +inline +void PureEvent::midiTime(DWORD midiTime) +{ + mMIDITime=midiTime; +} + +inline +void PureEvent::channel(BYTE channel) +{ + mChannel=channel; +} + +inline +void PureEvent::firstData(BYTE firstData) +{ + mFirstData=firstData; +} + +inline +void PureEvent::secondData(BYTE secondData) +{ + mSecondData=secondData; +} + +// comparators + +inline +WORD PureEvent::operator==(const PureEvent &somePureEvent)const +{ + return mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType(); +/* return (mEventType==somePureEvent.mEventType&& + mChannel==somePureEvent.mChannel&& + mFirstData==somePureEvent.mFirstData&& + mSecondData==somePureEvent.mSecondData&& + mDeltaTime==somePureEvent.mDeltaTime&& + mPlayTime==somePureEvent.mPlayTime&& + mMIDITime==somePureEvent.mMIDITime); +*/ +} + +inline +PureEvent &PureEvent::operator=(const PureEvent &somePureEvent) +{ + eventType(somePureEvent.eventType()); + deltaTime(somePureEvent.deltaTime()); + playTime(somePureEvent.playTime()); + midiTime(somePureEvent.midiTime()); + channel(somePureEvent.channel()); + firstData(somePureEvent.firstData()); + secondData(somePureEvent.secondData()); + return *this; +} + +inline +WORD PureEvent::operator<(const PureEvent &somePureEvent)const +{ + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType())return false; + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==MIDINoteOff)return true; + else if(mPlayTime==somePureEvent.mPlayTime)return false; + return (mPlayTime(const PureEvent &somePureEvent)const +{ + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType())return false; + if(mPlayTime==somePureEvent.mPlayTime&&eventType()==MIDINoteOn)return true; + else if(mPlayTime==somePureEvent.mPlayTime)return false; + return (mPlayTime>somePureEvent.mPlayTime); +} +#endif + diff --git a/midiseq/safe/PUREHDR.CPP b/midiseq/safe/PUREHDR.CPP new file mode 100644 index 0000000..9583e16 --- /dev/null +++ b/midiseq/safe/PUREHDR.CPP @@ -0,0 +1,31 @@ +#include + +WORD PureHeader::readHeader(FileIO &midiFile) +{ + if(!midiFile.read(mHeader,sizeof(mHeader)))return FALSE; + if(!midiFile.read(mLengthData))return FALSE; + if(!midiFile.read(mSMFType))return FALSE; + if(!midiFile.read(mTracks))return FALSE; + if(!midiFile.read(mMethod))return FALSE; + return TRUE; +} + +String PureHeader::toString()const +{ + String strWork; + String strHeader; + strHeader+=mHeader; + strHeader+="\nLength:"; + strHeader+=String().fromInt(mLengthData); + strHeader+="\nType:"; + if(SingleMultiChannel==MIDIFormat(mSMFType))strHeader+="SingleMultiChannel"; + else if(SimultaneousTracks==MIDIFormat(mSMFType))strHeader+="SimultaneousTracks"; + else if(SequentialTracks==MIDIFormat(mSMFType))strHeader+="Sequential"; + else strHeader+="Unknown"; + strHeader+="\nTracks:"; + strHeader+=String().fromInt(mTracks); + strHeader+="\nMethod:"; + ::sprintf(strWork," Hi:0x%04lx Lo:0x%04lx",(mMethod>>8)&0xFF,mMethod&0xFF); + strHeader+=String().fromInt(mMethod)+strWork; + return strHeader; +} diff --git a/midiseq/safe/PUREHDR.HPP b/midiseq/safe/PUREHDR.HPP new file mode 100644 index 0000000..f45d823 --- /dev/null +++ b/midiseq/safe/PUREHDR.HPP @@ -0,0 +1,135 @@ +#ifndef _MIDISEQ_PUREHEADER_HPP_ +#define _MIDISEQ_PUREHEADER_HPP_ +#include +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class PureHeader +{ +public: + enum Method{TimeCode,DeltaTime,Unset}; + enum MIDIFormat{SingleMultiChannel,SimultaneousTracks,SequentialTracks}; + PureHeader(void); + PureHeader(const PureHeader &somePureHeader); + virtual ~PureHeader(); + PureHeader &operator=(const PureHeader &somePureHeader); + WORD operator==(const PureHeader &somePureHeader); + DWORD lengthData(void)const; + MIDIFormat smfType(void)const; + USHORT tracks(void)const; + USHORT method(void)const; + Method timingMethod(void)const; + String toString(void)const; +protected: + WORD readHeader(FileIO &midiFile); +private: + enum {MaxHeaderIDLength=4}; + void method(USHORT method); + void lengthData(DWORD lengthData); + void smfType(USHORT smfType); + void tracks(USHORT smfType); + + char mHeader[MaxHeaderIDLength]; + DWORD mLengthData; + USHORT mSMFType; + USHORT mTracks; + USHORT mMethod; +}; + +inline +PureHeader::PureHeader(void) +: mLengthData(0L), mSMFType(0), mTracks(0), mMethod(0) +{ + ::memset(mHeader,0,sizeof(mHeader)); +} + +inline +PureHeader::PureHeader(const PureHeader &somePureHeader) +{ + *this=somePureHeader; +} + +inline +PureHeader::~PureHeader() +{ +} + +inline +PureHeader &PureHeader::operator=(const PureHeader &somePureHeader) +{ + lengthData(somePureHeader.lengthData()); + smfType(somePureHeader.smfType()); + tracks(somePureHeader.tracks()); + method(somePureHeader.method()); + ::memcpy(mHeader,somePureHeader.mHeader,sizeof(mHeader)); + return *this; +} + +inline +WORD PureHeader::operator==(const PureHeader &somePureHeader) +{ + return (lengthData()==somePureHeader.lengthData()&& + smfType()==somePureHeader.smfType()&& + tracks()==somePureHeader.tracks()&& + method()==somePureHeader.method()&& + (0==::memcmp(mHeader,somePureHeader.mHeader,sizeof(mHeader)))); +} + +inline +DWORD PureHeader::lengthData(void)const +{ + return mLengthData; +} + +inline +void PureHeader::lengthData(DWORD lengthData) +{ + mLengthData=lengthData; +} + +inline +PureHeader::MIDIFormat PureHeader::smfType(void)const +{ + return (MIDIFormat)mSMFType; +} + +inline +void PureHeader::smfType(USHORT smfType) +{ + mSMFType=smfType; +} + +inline +USHORT PureHeader::tracks(void)const +{ + return mTracks; +} + +inline +void PureHeader::tracks(USHORT tracks) +{ + mTracks=tracks; +} + +inline +USHORT PureHeader::method(void)const +{ + return mMethod; +} + +inline +void PureHeader::method(USHORT method) +{ + mMethod=method; +} + +inline +PureHeader::Method PureHeader::timingMethod(void)const +{ + return ((mMethod>>15)?TimeCode:DeltaTime); +} +#endif diff --git a/midiseq/safe/PURENOTE.HPP b/midiseq/safe/PURENOTE.HPP new file mode 100644 index 0000000..bd418f8 --- /dev/null +++ b/midiseq/safe/PURENOTE.HPP @@ -0,0 +1,93 @@ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#define _MIDISEQ_PURENOTE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class PureNote +{ +public: + enum {PureNoteLength=2}; + PureNote(void); + PureNote(BYTE pitch,BYTE velocity); + virtual ~PureNote(); + BYTE pitch(void)const; + void pitch(BYTE pitch); + BYTE velocity(void)const; + void velocity(BYTE velocity); + PureNote &operator=(const PureNote &somePureNote); + WORD operator==(const PureNote &somePureNote)const; + FileIO &operator<<(FileIO &someFileIO); +private: + BYTE mPitch; + BYTE mVelocity; +}; + +inline +PureNote::PureNote(void) +: mPitch(0), mVelocity(0) +{ +} + +inline +PureNote::PureNote(BYTE pitch,BYTE velocity) +: mPitch(pitch), mVelocity(velocity) +{ +} + +inline +PureNote::~PureNote() +{ +} + +inline +BYTE PureNote::pitch(void)const +{ + return mPitch; +} + +inline +BYTE PureNote::velocity(void)const +{ + return mVelocity; +} + +inline +void PureNote::pitch(BYTE pitch) +{ + mPitch=pitch; +} + +inline +void PureNote::velocity(BYTE velocity) +{ + mVelocity=velocity; +} + +inline +PureNote &PureNote::operator=(const PureNote &somePureNote) +{ + pitch(somePureNote.pitch()); + velocity(somePureNote.velocity()); + return *this; +} + +inline +WORD PureNote::operator==(const PureNote &somePureNote)const +{ + return (pitch()==somePureNote.pitch()&& + velocity()==somePureNote.velocity()); +} + +inline +FileIO &PureNote::operator<<(FileIO &someFileIO) +{ + someFileIO.read(mPitch); + someFileIO.read(mVelocity); + return someFileIO; +} +#endif + diff --git a/midiseq/safe/ProgramChange.hpp b/midiseq/safe/ProgramChange.hpp new file mode 100644 index 0000000..cd20ad1 --- /dev/null +++ b/midiseq/safe/ProgramChange.hpp @@ -0,0 +1,35 @@ +#ifndef _MIDISEQ_PROGRAMCHANGE_HPP_ +#define _MIDISEQ_PROGRAMCHANGE_HPP_ +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class ProgramChange +{ +public: + ProgramChange(); + ProgramChange(BYTE programNumber); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: + BYTE mProgramNumber; +}; + +inline +ProgramChange::ProgramChange() +: mProgramNumber(0) +{ +} + +inline +ProgramChange::ProgramChange(BYTE programNumber) +: mProgramNumber(programNumber) +{ +} + +inline +PureEvent ProgramChange::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDIProgramChange,deltaTime,channel,mProgramNumber,0); + return pureEvent; +} +#endif diff --git a/midiseq/safe/SMPTE.HPP b/midiseq/safe/SMPTE.HPP new file mode 100644 index 0000000..dee5e84 --- /dev/null +++ b/midiseq/safe/SMPTE.HPP @@ -0,0 +1,159 @@ +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#define _MIDISEQ_SMPTEFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class SMPTEFormat +{ +public: + enum {SMPTEFormatLength=5}; + SMPTEFormat(void); + SMPTEFormat(const SMPTEFormat &someSMPTEFormat); + virtual ~SMPTEFormat(); + SMPTEFormat &operator=(const SMPTEFormat &someSMPTEFormat); + WORD operator==(const SMPTEFormat &someSMPTEFormat)const; + FileIO &operator<<(FileIO &midiFile); + BYTE hours(void)const; + void hours(BYTE hours); + BYTE minutes(void)const; + void minutes(BYTE minutes); + BYTE seconds(void)const; + void seconds(BYTE seconds); + BYTE frames(void)const; + void frames(BYTE frames); + BYTE hundredthFrames(void)const; + void hundredthFrames(BYTE hundredthFrames); + String toString(void)const; +private: + BYTE mHours; + BYTE mMinutes; + BYTE mSeconds; + BYTE mFrames; + BYTE mHundredthFrames; +}; + +inline +SMPTEFormat::SMPTEFormat(void) +: mHours(0), mMinutes(0), mSeconds(0), mFrames(0), mHundredthFrames(0) +{ +} + +inline +SMPTEFormat::SMPTEFormat(const SMPTEFormat &someSMPTEFormat) +{ + *this=someSMPTEFormat; +} + +inline +SMPTEFormat::~SMPTEFormat() +{ +} + +inline +SMPTEFormat &SMPTEFormat::operator=(const SMPTEFormat &someSMPTEFormat) +{ + hours(someSMPTEFormat.hours()); + minutes(someSMPTEFormat.minutes()); + seconds(someSMPTEFormat.seconds()); + frames(someSMPTEFormat.frames()); + hundredthFrames(someSMPTEFormat.hundredthFrames()); + return *this; +} + +inline +WORD SMPTEFormat::operator==(const SMPTEFormat &someSMPTEFormat)const +{ + return (hours()==someSMPTEFormat.hours()&& + minutes()==someSMPTEFormat.minutes()&& + seconds()==someSMPTEFormat.seconds()&& + frames()==someSMPTEFormat.frames()&& + hundredthFrames()==someSMPTEFormat.hundredthFrames()); +} + +inline +BYTE SMPTEFormat::hours(void)const +{ + return mHours; +} + +inline +void SMPTEFormat::hours(BYTE hours) +{ + mHours=hours; +} + +inline +BYTE SMPTEFormat::minutes(void)const +{ + return mMinutes; +} + +inline +void SMPTEFormat::minutes(BYTE minutes) +{ + mMinutes=minutes; +} + +inline +BYTE SMPTEFormat::seconds(void)const +{ + return mSeconds; +} + +inline +void SMPTEFormat::seconds(BYTE seconds) +{ + mSeconds=seconds; +} + +inline +BYTE SMPTEFormat::frames(void)const +{ + return mFrames; +} + +inline +void SMPTEFormat::frames(BYTE frames) +{ + mFrames=frames; +} + +inline +BYTE SMPTEFormat::hundredthFrames(void)const +{ + return mHundredthFrames; +} + +inline +void SMPTEFormat::hundredthFrames(BYTE hundredthFrames) +{ + mHundredthFrames=hundredthFrames; +} + +inline +FileIO &SMPTEFormat::operator<<(FileIO &midiFile) +{ + midiFile.read(mHours); + midiFile.read(mMinutes); + midiFile.read(mSeconds); + midiFile.read(mFrames); + midiFile.read(mHundredthFrames); + return midiFile; +} + +inline +String SMPTEFormat::toString(void)const +{ + String string; + String sep(", "); + + ::sprintf(string,"%02d:%02d.%02d",mHours,mMinutes,mSeconds); + string+=" Frames="+String().fromInt(mFrames)+sep; + string+=" HFrames="+String().fromInt(mHundredthFrames); + return string; +} +#endif diff --git a/midiseq/safe/STDTMPL.CPP b/midiseq/safe/STDTMPL.CPP new file mode 100644 index 0000000..85b5bb9 --- /dev/null +++ b/midiseq/safe/STDTMPL.CPP @@ -0,0 +1,20 @@ +#ifndef _MSC_VER +#define _EXPAND_BLOCK_TEMPLATES_ +#define _EXPAND_VECTOR_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef PureVector b; +typedef QuickSort c; +typedef Callback d; +#endif \ No newline at end of file diff --git a/midiseq/safe/TEMPO.HPP b/midiseq/safe/TEMPO.HPP new file mode 100644 index 0000000..1103fdc --- /dev/null +++ b/midiseq/safe/TEMPO.HPP @@ -0,0 +1,87 @@ +#ifndef _MIDISEQ_TEMPOCHANGE_HPP_ +#define _MIDISEQ_TEMPOCHANGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class TempoChange +{ +public: + TempoChange(void); + TempoChange(DWORD microsecsPerQtrNote,DWORD eventIndex); + TempoChange(const TempoChange &someTempoChange); + virtual ~TempoChange(); + TempoChange &operator=(const TempoChange &someTempoChange); + WORD operator==(const TempoChange &someTempoChange)const; + DWORD microsecsPerQtrNote(void)const; + void microsecsPerQtrNote(DWORD microsecsPerQtrNote); + DWORD eventIndex(void)const; + void eventIndex(DWORD eventIndex); +private: + DWORD mMicrosecsPerQtrNote; + DWORD mEventIndex; +}; + +inline +TempoChange::TempoChange(void) +: mMicrosecsPerQtrNote(0), mEventIndex(0) +{ +} + +inline +TempoChange::TempoChange(DWORD microsecsPerQtrNote,DWORD eventIndex) +: mMicrosecsPerQtrNote(microsecsPerQtrNote), mEventIndex(eventIndex) +{ +} + +inline +TempoChange::TempoChange(const TempoChange &someTempoChange) +{ + *this=someTempoChange; +} + +inline +TempoChange::~TempoChange() +{ +} + +inline +TempoChange &TempoChange::operator=(const TempoChange &someTempoChange) +{ + microsecsPerQtrNote(someTempoChange.microsecsPerQtrNote()); + eventIndex(someTempoChange.eventIndex()); + return *this; +} + +inline +WORD TempoChange::operator==(const TempoChange &someTempoChange)const +{ + return (microsecsPerQtrNote()==someTempoChange.microsecsPerQtrNote()&& + eventIndex()==someTempoChange.eventIndex()); + +} + +inline +DWORD TempoChange::microsecsPerQtrNote(void)const +{ + return mMicrosecsPerQtrNote; +} + +inline +void TempoChange::microsecsPerQtrNote(DWORD microsecsPerQtrNote) +{ + mMicrosecsPerQtrNote=microsecsPerQtrNote; +} + +inline +DWORD TempoChange::eventIndex(void)const +{ + return mEventIndex; +} + +inline +void TempoChange::eventIndex(DWORD eventIndex) +{ + mEventIndex=eventIndex; +} +#endif diff --git a/midiseq/safe/TIMEBLCK.CPP b/midiseq/safe/TIMEBLCK.CPP new file mode 100644 index 0000000..bc977ab --- /dev/null +++ b/midiseq/safe/TIMEBLCK.CPP @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include + +void TimeBlock::fixTimeBlock(MIDIBlock &midiEventBlocks,Array &sortedEvents) +{ + midiEventBlocks.printBlock("MIDIEvents.DAT"); + + for(short index=0;index &sortedEvents) +{ + DWORD maxEvents(0L); + DWORD runningCount(0L); + DWORD eventCount; + QuickSort eventSorter; + + for(DWORD index=0;index &eventBlock) +{ + DWORD numEvents(eventBlock.size()); + DWORD playTime; + double realTime; + + if(!numEvents)return; + for(DWORD eventIndex=0;eventIndex &eventVector) +{ + FileHandle writeFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + WORD eventCount((WORD)eventVector.size()); + String lineBuffer; + + ::sprintf(lineBuffer,"start time:%ld",mStartTime); + writeFile.writeLine(lineBuffer); + for(short itemIndex=0;itemIndex +#endif + +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#include +#endif + +class MIDIBlock; + +class TimeBlock +{ +public: + TimeBlock(void); + virtual ~TimeBlock(); + void setStartTime(DWORD startTime); + void setTempo(DWORD tempo); + void setDivision(DWORD division); + void fixTimeBlock(MIDIBlock &midiEvents,Array &sortedEvents); + void printBlock(String pathFileName,Array &eventVector); +private: + void fixTimeBlock(EventBlock &midiEventBlock); + void sortBlocks(MIDIBlock &midiEventBlocks,Array &sortedEvents); + void calculateRealTime(Array &eventBlock); + void dumpTimeVector(Array &eventBlock,String pathFileName); + void operator=(const TimeBlock &someTimeBlock); + + DWORD mTempo; + DWORD mDivision; + DWORD mStartTime; +}; + +inline +TimeBlock::TimeBlock(void) +: mStartTime(0L), mTempo(5000000L), mDivision(136L) +{ +} + +inline +TimeBlock::~TimeBlock() +{ +} + +inline +void TimeBlock::setStartTime(DWORD startTime) +{ + mStartTime=startTime; +} + +inline +void TimeBlock::setTempo(DWORD tempo) +{ + mTempo=tempo; +} + +inline +void TimeBlock::setDivision(DWORD division) +{ + mDivision=division; +} + +inline +void TimeBlock::operator=(const TimeBlock &/*someTimeBlock*/) +{ + return; +} +#endif + diff --git a/midiseq/safe/TIMEINFO.HPP b/midiseq/safe/TIMEINFO.HPP new file mode 100644 index 0000000..d5ae0c6 --- /dev/null +++ b/midiseq/safe/TIMEINFO.HPP @@ -0,0 +1,138 @@ +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#define _MIDISEQ_TIMEINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class TimeInfo +{ +public: + enum {LengthTimeInfo=4}; + TimeInfo(void); + TimeInfo(const TimeInfo &someTimeInfo); + TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote); + virtual ~TimeInfo(); + TimeInfo &operator=(const TimeInfo &someTimeInfo); + WORD operator==(const TimeInfo &someTimeInfo)const; + BYTE numerator(void)const; + void numerator(BYTE numerator); + BYTE denominator(void)const; + void denominator(BYTE denominator); + BYTE midiClocksPerMetronome(void)const; + void midiClocksPerMetronome(BYTE midiClocksPerMetronome); + BYTE thirtySecondNotesPerQtrNote(void)const; + void thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote); + String toString(void)const; +private: + enum{MidiClocksPerQtrNote=24}; + BYTE mNumerator; + BYTE mDenominator; + BYTE mMidiClocksPerMetronome; + BYTE mThirtySecondNotesPerQtrNote; +}; + +inline +TimeInfo::TimeInfo(void) +: mNumerator(0), mDenominator(0), mMidiClocksPerMetronome(0), + mThirtySecondNotesPerQtrNote(0) +{ +} + +inline +TimeInfo::TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote) +: mNumerator(numerator), mDenominator(denominator), + mMidiClocksPerMetronome(midiClocksPerMetronome), + mThirtySecondNotesPerQtrNote(thirtySecondNotesPerQtrNote) +{ +} + +inline +TimeInfo::TimeInfo(const TimeInfo &someTimeInfo) +{ + *this=someTimeInfo; +} + +inline +TimeInfo::~TimeInfo() +{ +} + +inline +TimeInfo &TimeInfo::operator=(const TimeInfo &someTimeInfo) +{ + numerator(someTimeInfo.numerator()); + denominator(someTimeInfo.denominator()); + midiClocksPerMetronome(someTimeInfo.midiClocksPerMetronome()); + thirtySecondNotesPerQtrNote(someTimeInfo.thirtySecondNotesPerQtrNote()); + return *this; +} + +inline +WORD TimeInfo::operator==(const TimeInfo &someTimeInfo)const +{ + return (numerator()==someTimeInfo.numerator()&& + denominator()==someTimeInfo.denominator()&& + midiClocksPerMetronome()==someTimeInfo.midiClocksPerMetronome()&& + thirtySecondNotesPerQtrNote()==someTimeInfo.thirtySecondNotesPerQtrNote()); +} + +inline +BYTE TimeInfo::numerator(void)const +{ + return mNumerator; +} + +inline +void TimeInfo::numerator(BYTE numerator) +{ + mNumerator=numerator; +} + +inline +BYTE TimeInfo::denominator(void)const +{ + return mDenominator; +} + +inline +void TimeInfo::denominator(BYTE denominator) +{ + mDenominator=denominator; +} + +inline +BYTE TimeInfo::midiClocksPerMetronome(void)const +{ + return mMidiClocksPerMetronome; +} + +inline +void TimeInfo::midiClocksPerMetronome(BYTE midiClocksPerMetronome) +{ + mMidiClocksPerMetronome=midiClocksPerMetronome; +} + +inline +BYTE TimeInfo::thirtySecondNotesPerQtrNote(void)const +{ + return mThirtySecondNotesPerQtrNote; +} + +inline +void TimeInfo::thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote) +{ + mThirtySecondNotesPerQtrNote=thirtySecondNotesPerQtrNote; +} + +inline +String TimeInfo::toString(void)const +{ + String string; + String sep(", "); + + string+=String().fromInt(mNumerator)+String("/")+String().fromInt(mDenominator)+String(" time")+sep; + string+=String("MIDIClocksPerMetronome=")+String().fromInt(mMidiClocksPerMetronome)+sep; + string+=String("32nd notes per 1/4 note=")+String().fromInt(mThirtySecondNotesPerQtrNote); + return string; +} +#endif diff --git a/midiseq/safe/noteoff.hpp b/midiseq/safe/noteoff.hpp new file mode 100644 index 0000000..6f78dcf --- /dev/null +++ b/midiseq/safe/noteoff.hpp @@ -0,0 +1,50 @@ +#ifndef _MIDISEQ_NOTEOFF_HPP_ +#define _MIDISEQ_NOTEOFF_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class NoteOff : public PureNote +{ +public: + NoteOff(void); + NoteOff(const PureNote &pureNote); + NoteOff &operator=(const PureNote &pureNote); + virtual ~NoteOff(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: +}; + +inline +NoteOff::NoteOff(void) +{ +} + +inline +NoteOff::NoteOff(const PureNote &pureNote) +{ + *this=pureNote; +} + +inline +NoteOff &NoteOff::operator=(const PureNote &pureNote) +{ + (PureNote&)*this=pureNote; + return *this; +} + +inline +NoteOff::~NoteOff() +{ +} + +inline +PureEvent NoteOff::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDINoteOff,deltaTime,channel,pitch(),velocity()); + return pureEvent; +} +#endif diff --git a/midiseq/safe/noteon.hpp b/midiseq/safe/noteon.hpp new file mode 100644 index 0000000..beb0292 --- /dev/null +++ b/midiseq/safe/noteon.hpp @@ -0,0 +1,50 @@ +#ifndef _MIDISEQ_NOTEON_HPP_ +#define _MIDISEQ_NOTEON_HPP_ +#ifndef _MIDISEQ_PURENOTE_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif + +class NoteOn : public PureNote +{ +public: + NoteOn(void); + NoteOn(const PureNote &pureNote); + NoteOn &operator=(const PureNote &pureNote); + virtual ~NoteOn(); + PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +private: +}; + +inline +NoteOn::NoteOn(void) +{ +} + +inline +NoteOn::NoteOn(const PureNote &pureNote) +{ + *this=pureNote; +} + +inline +NoteOn::~NoteOn() +{ +} + +inline +NoteOn &NoteOn::operator=(const PureNote &pureNote) +{ + (PureNote&)*this=pureNote; + return *this; +} + +inline +PureEvent NoteOn::getEvent(BYTE deltaTime,BYTE channel)const +{ + PureEvent pureEvent(MIDINoteOn,deltaTime,channel,pitch(),velocity()); + return pureEvent; +} +#endif diff --git a/midiseq/smpte.hpp b/midiseq/smpte.hpp new file mode 100644 index 0000000..dee5e84 --- /dev/null +++ b/midiseq/smpte.hpp @@ -0,0 +1,159 @@ +#ifndef _MIDISEQ_SMPTEFORMAT_HPP_ +#define _MIDISEQ_SMPTEFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif + +class SMPTEFormat +{ +public: + enum {SMPTEFormatLength=5}; + SMPTEFormat(void); + SMPTEFormat(const SMPTEFormat &someSMPTEFormat); + virtual ~SMPTEFormat(); + SMPTEFormat &operator=(const SMPTEFormat &someSMPTEFormat); + WORD operator==(const SMPTEFormat &someSMPTEFormat)const; + FileIO &operator<<(FileIO &midiFile); + BYTE hours(void)const; + void hours(BYTE hours); + BYTE minutes(void)const; + void minutes(BYTE minutes); + BYTE seconds(void)const; + void seconds(BYTE seconds); + BYTE frames(void)const; + void frames(BYTE frames); + BYTE hundredthFrames(void)const; + void hundredthFrames(BYTE hundredthFrames); + String toString(void)const; +private: + BYTE mHours; + BYTE mMinutes; + BYTE mSeconds; + BYTE mFrames; + BYTE mHundredthFrames; +}; + +inline +SMPTEFormat::SMPTEFormat(void) +: mHours(0), mMinutes(0), mSeconds(0), mFrames(0), mHundredthFrames(0) +{ +} + +inline +SMPTEFormat::SMPTEFormat(const SMPTEFormat &someSMPTEFormat) +{ + *this=someSMPTEFormat; +} + +inline +SMPTEFormat::~SMPTEFormat() +{ +} + +inline +SMPTEFormat &SMPTEFormat::operator=(const SMPTEFormat &someSMPTEFormat) +{ + hours(someSMPTEFormat.hours()); + minutes(someSMPTEFormat.minutes()); + seconds(someSMPTEFormat.seconds()); + frames(someSMPTEFormat.frames()); + hundredthFrames(someSMPTEFormat.hundredthFrames()); + return *this; +} + +inline +WORD SMPTEFormat::operator==(const SMPTEFormat &someSMPTEFormat)const +{ + return (hours()==someSMPTEFormat.hours()&& + minutes()==someSMPTEFormat.minutes()&& + seconds()==someSMPTEFormat.seconds()&& + frames()==someSMPTEFormat.frames()&& + hundredthFrames()==someSMPTEFormat.hundredthFrames()); +} + +inline +BYTE SMPTEFormat::hours(void)const +{ + return mHours; +} + +inline +void SMPTEFormat::hours(BYTE hours) +{ + mHours=hours; +} + +inline +BYTE SMPTEFormat::minutes(void)const +{ + return mMinutes; +} + +inline +void SMPTEFormat::minutes(BYTE minutes) +{ + mMinutes=minutes; +} + +inline +BYTE SMPTEFormat::seconds(void)const +{ + return mSeconds; +} + +inline +void SMPTEFormat::seconds(BYTE seconds) +{ + mSeconds=seconds; +} + +inline +BYTE SMPTEFormat::frames(void)const +{ + return mFrames; +} + +inline +void SMPTEFormat::frames(BYTE frames) +{ + mFrames=frames; +} + +inline +BYTE SMPTEFormat::hundredthFrames(void)const +{ + return mHundredthFrames; +} + +inline +void SMPTEFormat::hundredthFrames(BYTE hundredthFrames) +{ + mHundredthFrames=hundredthFrames; +} + +inline +FileIO &SMPTEFormat::operator<<(FileIO &midiFile) +{ + midiFile.read(mHours); + midiFile.read(mMinutes); + midiFile.read(mSeconds); + midiFile.read(mFrames); + midiFile.read(mHundredthFrames); + return midiFile; +} + +inline +String SMPTEFormat::toString(void)const +{ + String string; + String sep(", "); + + ::sprintf(string,"%02d:%02d.%02d",mHours,mMinutes,mSeconds); + string+=" Frames="+String().fromInt(mFrames)+sep; + string+=" HFrames="+String().fromInt(mHundredthFrames); + return string; +} +#endif diff --git a/midiseq/stdtmpl.cpp b/midiseq/stdtmpl.cpp new file mode 100644 index 0000000..85b5bb9 --- /dev/null +++ b/midiseq/stdtmpl.cpp @@ -0,0 +1,20 @@ +#ifndef _MSC_VER +#define _EXPAND_BLOCK_TEMPLATES_ +#define _EXPAND_VECTOR_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef PureVector b; +typedef QuickSort c; +typedef Callback d; +#endif \ No newline at end of file diff --git a/midiseq/tempo.hpp b/midiseq/tempo.hpp new file mode 100644 index 0000000..bc207c0 --- /dev/null +++ b/midiseq/tempo.hpp @@ -0,0 +1,70 @@ +#ifndef _MIDISEQ_TEMPOCHANGE_HPP_ +#define _MIDISEQ_TEMPOCHANGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class TempoChange +{ +public: + TempoChange(void); + TempoChange(DWORD microsecsPerQtrNote); + TempoChange(const TempoChange &someTempoChange); + virtual ~TempoChange(); + TempoChange &operator=(const TempoChange &someTempoChange); + WORD operator==(const TempoChange &someTempoChange)const; + DWORD microsecsPerQtrNote(void)const; + void microsecsPerQtrNote(DWORD microsecsPerQtrNote); +private: + DWORD mMicrosecsPerQtrNote; +}; + +inline +TempoChange::TempoChange(void) +: mMicrosecsPerQtrNote(0) +{ +} + +inline +TempoChange::TempoChange(DWORD microsecsPerQtrNote) +: mMicrosecsPerQtrNote(microsecsPerQtrNote) +{ +} + + +inline +TempoChange::TempoChange(const TempoChange &someTempoChange) +{ + *this=someTempoChange; +} + +inline +TempoChange::~TempoChange() +{ +} + +inline +TempoChange &TempoChange::operator=(const TempoChange &someTempoChange) +{ + microsecsPerQtrNote(someTempoChange.microsecsPerQtrNote()); + return *this; +} + +inline +WORD TempoChange::operator==(const TempoChange &someTempoChange)const +{ + return microsecsPerQtrNote()==someTempoChange.microsecsPerQtrNote(); +} + +inline +DWORD TempoChange::microsecsPerQtrNote(void)const +{ + return mMicrosecsPerQtrNote; +} + +inline +void TempoChange::microsecsPerQtrNote(DWORD microsecsPerQtrNote) +{ + mMicrosecsPerQtrNote=microsecsPerQtrNote; +} +#endif diff --git a/midiseq/timeblck.cpp b/midiseq/timeblck.cpp new file mode 100644 index 0000000..aaede12 --- /dev/null +++ b/midiseq/timeblck.cpp @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include +#include + +void TimeBlock::fixTimeBlock(MIDIBlock &midiEventBlocks) +{ + for(short index=0;index &sortedEvents) +{ + DWORD maxEvents(0L); + DWORD runningCount(0L); + DWORD eventCount; + QuickSort eventSorter; + + for(DWORD index=0;index &eventVector) +{ + FileHandle writeFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + WORD eventCount((WORD)eventVector.size()); + String lineBuffer; + + ::sprintf(lineBuffer,"start time:%ld",mStartTime); + writeFile.writeLine(lineBuffer); + for(short itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _MIDISEQ_PUREEVENT_HPP_ +#include +#endif +#ifndef _MIDISEQ_EVENTBLOCK_HPP_ +#include +#endif + +class MIDIBlock; +class Array; + +class TimeBlock +{ +public: + TimeBlock(void); + virtual ~TimeBlock(); + void setStartTime(DWORD startTime); + void setDivision(DWORD division); + void fixTimeBlock(MIDIBlock &midiEvents); + void printBlock(String pathFileName,Array &eventVector); + void sortBlocks(MIDIBlock &midiEventBlocks,Array &sortedEvents); +private: + void fixTimeBlock(EventBlock &midiEventBlock); + void calculateRealTime(MIDIBlock &midiEventBlocks); + void operator=(const TimeBlock &someTimeBlock); + + DWORD mDivision; + DWORD mStartTime; +}; + +inline +TimeBlock::TimeBlock(void) +: mStartTime(0L), mDivision(136L) +{ +} + +inline +TimeBlock::~TimeBlock() +{ +} + +inline +void TimeBlock::setStartTime(DWORD startTime) +{ + mStartTime=startTime; +} + +inline +void TimeBlock::setDivision(DWORD division) +{ + mDivision=division; +} + +inline +void TimeBlock::operator=(const TimeBlock &/*someTimeBlock*/) +{ + return; +} +#endif + diff --git a/midiseq/timeinfo.hpp b/midiseq/timeinfo.hpp new file mode 100644 index 0000000..d5ae0c6 --- /dev/null +++ b/midiseq/timeinfo.hpp @@ -0,0 +1,138 @@ +#ifndef _MIDISEQ_TIMEINFO_HPP_ +#define _MIDISEQ_TIMEINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class TimeInfo +{ +public: + enum {LengthTimeInfo=4}; + TimeInfo(void); + TimeInfo(const TimeInfo &someTimeInfo); + TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote); + virtual ~TimeInfo(); + TimeInfo &operator=(const TimeInfo &someTimeInfo); + WORD operator==(const TimeInfo &someTimeInfo)const; + BYTE numerator(void)const; + void numerator(BYTE numerator); + BYTE denominator(void)const; + void denominator(BYTE denominator); + BYTE midiClocksPerMetronome(void)const; + void midiClocksPerMetronome(BYTE midiClocksPerMetronome); + BYTE thirtySecondNotesPerQtrNote(void)const; + void thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote); + String toString(void)const; +private: + enum{MidiClocksPerQtrNote=24}; + BYTE mNumerator; + BYTE mDenominator; + BYTE mMidiClocksPerMetronome; + BYTE mThirtySecondNotesPerQtrNote; +}; + +inline +TimeInfo::TimeInfo(void) +: mNumerator(0), mDenominator(0), mMidiClocksPerMetronome(0), + mThirtySecondNotesPerQtrNote(0) +{ +} + +inline +TimeInfo::TimeInfo(BYTE numerator,BYTE denominator,BYTE midiClocksPerMetronome,BYTE thirtySecondNotesPerQtrNote) +: mNumerator(numerator), mDenominator(denominator), + mMidiClocksPerMetronome(midiClocksPerMetronome), + mThirtySecondNotesPerQtrNote(thirtySecondNotesPerQtrNote) +{ +} + +inline +TimeInfo::TimeInfo(const TimeInfo &someTimeInfo) +{ + *this=someTimeInfo; +} + +inline +TimeInfo::~TimeInfo() +{ +} + +inline +TimeInfo &TimeInfo::operator=(const TimeInfo &someTimeInfo) +{ + numerator(someTimeInfo.numerator()); + denominator(someTimeInfo.denominator()); + midiClocksPerMetronome(someTimeInfo.midiClocksPerMetronome()); + thirtySecondNotesPerQtrNote(someTimeInfo.thirtySecondNotesPerQtrNote()); + return *this; +} + +inline +WORD TimeInfo::operator==(const TimeInfo &someTimeInfo)const +{ + return (numerator()==someTimeInfo.numerator()&& + denominator()==someTimeInfo.denominator()&& + midiClocksPerMetronome()==someTimeInfo.midiClocksPerMetronome()&& + thirtySecondNotesPerQtrNote()==someTimeInfo.thirtySecondNotesPerQtrNote()); +} + +inline +BYTE TimeInfo::numerator(void)const +{ + return mNumerator; +} + +inline +void TimeInfo::numerator(BYTE numerator) +{ + mNumerator=numerator; +} + +inline +BYTE TimeInfo::denominator(void)const +{ + return mDenominator; +} + +inline +void TimeInfo::denominator(BYTE denominator) +{ + mDenominator=denominator; +} + +inline +BYTE TimeInfo::midiClocksPerMetronome(void)const +{ + return mMidiClocksPerMetronome; +} + +inline +void TimeInfo::midiClocksPerMetronome(BYTE midiClocksPerMetronome) +{ + mMidiClocksPerMetronome=midiClocksPerMetronome; +} + +inline +BYTE TimeInfo::thirtySecondNotesPerQtrNote(void)const +{ + return mThirtySecondNotesPerQtrNote; +} + +inline +void TimeInfo::thirtySecondNotesPerQtrNote(BYTE thirtySecondNotesPerQtrNote) +{ + mThirtySecondNotesPerQtrNote=thirtySecondNotesPerQtrNote; +} + +inline +String TimeInfo::toString(void)const +{ + String string; + String sep(", "); + + string+=String().fromInt(mNumerator)+String("/")+String().fromInt(mDenominator)+String(" time")+sep; + string+=String("MIDIClocksPerMetronome=")+String().fromInt(mMidiClocksPerMetronome)+sep; + string+=String("32nd notes per 1/4 note=")+String().fromInt(mThirtySecondNotesPerQtrNote); + return string; +} +#endif diff --git a/midiwrt/CNVTDN.BMP b/midiwrt/CNVTDN.BMP new file mode 100644 index 0000000..f3bd1bf Binary files /dev/null and b/midiwrt/CNVTDN.BMP differ diff --git a/midiwrt/CNVTUP.BMP b/midiwrt/CNVTUP.BMP new file mode 100644 index 0000000..37e8482 Binary files /dev/null and b/midiwrt/CNVTUP.BMP differ diff --git a/midiwrt/DNARDN.BMP b/midiwrt/DNARDN.BMP new file mode 100644 index 0000000..603f9aa Binary files /dev/null and b/midiwrt/DNARDN.BMP differ diff --git a/midiwrt/DNARUP.BMP b/midiwrt/DNARUP.BMP new file mode 100644 index 0000000..54c3955 Binary files /dev/null and b/midiwrt/DNARUP.BMP differ diff --git a/midiwrt/INSTRMNT.CPP b/midiwrt/INSTRMNT.CPP new file mode 100644 index 0000000..4a45a24 --- /dev/null +++ b/midiwrt/INSTRMNT.CPP @@ -0,0 +1,74 @@ +#include +#include + +Instruments::Instruments(WORD startOrdinal,WORD endOrdinal) +{ + loadInstruments(startOrdinal,endOrdinal); +} + +Instruments::~Instruments() +{ +} + +WORD Instruments::loadInstruments(WORD startOrdinal,WORD endOrdinal) +{ + String semicolonString(";"); + String nullString("\\0"); + String ordinalString; + String categoryString; + String nameString; + char *lpBuffer; + BYTE lineFeed; + + size((endOrdinal-startOrdinal)+1); + for(short index=startOrdinal,offset=0;index<=endOrdinal;index++,offset++) + { + String tempString(index); + lpBuffer=::strtok(tempString,semicolonString); + if(!lpBuffer)continue; + ordinalString=lpBuffer; + lpBuffer=::strtok(0,semicolonString); + if(!lpBuffer)continue; + categoryString=lpBuffer; + lpBuffer=::strtok(0,nullString); + if(!lpBuffer)continue; + nameString=lpBuffer; + operator[](offset)=PureInstrument(::atoi(ordinalString),categoryString,nameString); + } + return (WORD)size(); +} + +WORD Instruments::getInstruments(PureVector &vectoredInstruments) +{ + vectoredInstruments.size(0); + if(!size())return FALSE; + vectoredInstruments.size(size()); + for(int i=0;i +#include +#include +#include + +class Instruments : public PureVector +{ +public: + Instruments(WORD startOrdinal,WORD endOrdinal); + ~Instruments(); + WORD getInstruments(PureVector &vectoredInstruments); + WORD locateInstrument(WORD ordinalValue,PureInstrument &somePureInstrument); +private: + WORD binarySearch(WORD ordinalValue,short &itemIndex); + enum {Semicolon=';'}; + WORD loadInstruments(WORD startOrdinal,WORD endOrdinal); +}; +#endif + \ No newline at end of file diff --git a/midiwrt/LED.BMP b/midiwrt/LED.BMP new file mode 100644 index 0000000..bb2cbb0 Binary files /dev/null and b/midiwrt/LED.BMP differ diff --git a/midiwrt/LED.CPP b/midiwrt/LED.CPP new file mode 100644 index 0000000..be79dfc --- /dev/null +++ b/midiwrt/LED.CPP @@ -0,0 +1,52 @@ +#include +#include + +void LedDisplay::paint(void) +{ + HBITMAP hOldBitmap; + HDC hDisplayDC; + HDC hMemDC; + WORD firstOffset; + WORD secondOffset; + WORD thirdOffset; + WORD fourthOffset; + + hDisplayDC=::GetDC(mhDisplayWindow); + hMemDC=::CreateCompatibleDC(hDisplayDC); + hOldBitmap=(HBITMAP)::SelectObject(hMemDC,mhFilm); + positions(firstOffset,secondOffset,thirdOffset,fourthOffset); + ::BitBlt(hDisplayDC,mWindowPoint.x(),mWindowPoint.y(),Width,Height, + hMemDC,0,firstOffset*Height,SRCCOPY); + ::BitBlt(hDisplayDC,mWindowPoint.x()+Width,mWindowPoint.y(),Width,Height, + hMemDC,0,secondOffset*Height,SRCCOPY); + ::BitBlt(hDisplayDC,mWindowPoint.x()+(Width*2),mWindowPoint.y(),Width,Height, + hMemDC,0,thirdOffset*Height,SRCCOPY); + ::BitBlt(hDisplayDC,mWindowPoint.x()+(Width*3),mWindowPoint.y(),Width,Height, + hMemDC,0,fourthOffset*Height,SRCCOPY); + ::SelectObject(hMemDC,hOldBitmap); + ::DeleteObject(hMemDC); + ::ReleaseDC(mhDisplayWindow,hDisplayDC); +} + +void LedDisplay::positions(WORD &firstOffset,WORD &secondOffset,WORD &thirdOffset,WORD &fourthOffset)const +{ + String numberString; + + if(mHasSpecialChar) + { + if(BlankChar==mCurrentSpecialChar) + firstOffset=secondOffset=thirdOffset=fourthOffset=OffsetBlankChar; + else + firstOffset=secondOffset=thirdOffset=fourthOffset=OffsetDashChar; + } + else + { + ::sprintf(numberString,"%04d",mCurrentNumber); + firstOffset=charPosition(*(numberString)); + secondOffset=charPosition(*((char*)numberString+1)); + thirdOffset=charPosition(*((char*)numberString+2)); + fourthOffset=charPosition(*((char*)numberString+3)); + } +} + + \ No newline at end of file diff --git a/midiwrt/LED.HPP b/midiwrt/LED.HPP new file mode 100644 index 0000000..f7ee94e --- /dev/null +++ b/midiwrt/LED.HPP @@ -0,0 +1,75 @@ +#ifndef _LEDDISPLAY_HPP_ +#define _LEDDISPLAY_HPP_ +#include +#include +#include + +class LedDisplay +{ +public: + enum SpecialChar{BlankChar,DashChar}; + LedDisplay(HWND hDisplayWindow,Point windowPoint); + virtual ~LedDisplay(); + void setNumber(short someNumber); + void setNumber(SpecialChar specialChar); + short getNumber(void)const; + void paint(void); +private: + enum {Width=13,Height=23,Frames=12}; + enum {OffsetDashChar,OffsetBlankChar}; + WORD charPosition(char someDisplayChar)const; + void positions(WORD &firstOffset,WORD &secondOffset,WORD &thirdOffset,WORD &fourthOffset)const; + HBITMAP mhFilm; + short mCurrentNumber; + SpecialChar mCurrentSpecialChar; + WORD mHasSpecialChar; + Point mWindowPoint; + HWND mhDisplayWindow; +}; + +inline +LedDisplay::LedDisplay(HWND hDisplayWindow,Point windowPoint) +: mWindowPoint(windowPoint), mhDisplayWindow(hDisplayWindow), mCurrentNumber(-1), + mHasSpecialChar(TRUE), mCurrentSpecialChar(DashChar), +#if defined(__FLAT__) + mhFilm(::LoadBitmap((HINSTANCE)::GetWindowWord(hDisplayWindow,GWL_HINSTANCE),"LED")) +#else + mhFilm(::LoadBitmap((HINSTANCE)::GetWindowWord(hDisplayWindow,GWW_HINSTANCE),"LED")) +#endif +{ +} + +inline +LedDisplay::~LedDisplay() +{ + if(mhFilm){::DeleteObject(mhFilm);mhFilm=0;} +} + +inline +WORD LedDisplay::charPosition(char someChar)const +{ + return ((Frames-1)-((int)someChar-'0')); +} + +inline +short LedDisplay::getNumber(void)const +{ + return mCurrentNumber; +} + +inline +void LedDisplay::setNumber(SpecialChar specialChar) +{ + mHasSpecialChar=TRUE; + mCurrentSpecialChar=specialChar; + paint(); +} + +inline +void LedDisplay::setNumber(short someNumber) +{ + mHasSpecialChar=FALSE; + mCurrentNumber=someNumber; + paint(); +} +#endif diff --git a/midiwrt/MIDI.DSW b/midiwrt/MIDI.DSW new file mode 100644 index 0000000..5bd78ba Binary files /dev/null and b/midiwrt/MIDI.DSW differ diff --git a/midiwrt/MIDI.IDE b/midiwrt/MIDI.IDE new file mode 100644 index 0000000..7a1830d Binary files /dev/null and b/midiwrt/MIDI.IDE differ diff --git a/midiwrt/MIDI.OBR b/midiwrt/MIDI.OBR new file mode 100644 index 0000000..53b4a79 Binary files /dev/null and b/midiwrt/MIDI.OBR differ diff --git a/midiwrt/MIDI32.DSW b/midiwrt/MIDI32.DSW new file mode 100644 index 0000000..36934aa Binary files /dev/null and b/midiwrt/MIDI32.DSW differ diff --git a/midiwrt/MIDI32.IDE b/midiwrt/MIDI32.IDE new file mode 100644 index 0000000..0d0165f Binary files /dev/null and b/midiwrt/MIDI32.IDE differ diff --git a/midiwrt/MIDI32.OBR b/midiwrt/MIDI32.OBR new file mode 100644 index 0000000..6f05c15 Binary files /dev/null and b/midiwrt/MIDI32.OBR differ diff --git a/midiwrt/MIDIDATA.HPP b/midiwrt/MIDIDATA.HPP new file mode 100644 index 0000000..9838644 --- /dev/null +++ b/midiwrt/MIDIDATA.HPP @@ -0,0 +1,66 @@ +#ifndef _MIDIDATA_HPP_ +#define _MIDIDATA_HPP_ +#include +#include +#include +#include +#include + +class MidiData +{ +public: + MidiData(String midiPathFileName); + ~MidiData(); + operator MemFile&(void); + WORD writeHeader(MidiHeader &midiHeader); + WORD readHeader(MidiHeader &midiHeader); + WORD flush(void); + WORD isOkay(void)const; +private: + MemFile mMidiFile; +}; + +inline +MidiData::MidiData(String midiPathFileName) +: mMidiFile(midiPathFileName,100000L,MemFile::BigEndian) +{ +} + +inline +MidiData::~MidiData() +{ +} + +inline +WORD MidiData::writeHeader(MidiHeader &midiHeader) +{ + if(!mMidiFile.isOkay())return FALSE; + return midiHeader.writeHeader(mMidiFile); +} + +inline +WORD MidiData::readHeader(MidiHeader &midiHeader) +{ + if(!mMidiFile.isOkay())return FALSE; + return midiHeader.readHeader(mMidiFile); +} + +inline +WORD MidiData::flush(void) +{ + if(!isOkay())return FALSE; + return mMidiFile.flushBuffer(); +} + +inline +MidiData::operator MemFile&(void) +{ + return mMidiFile; +} + +inline +WORD MidiData::isOkay(void)const +{ + return mMidiFile.isOkay(); +} +#endif diff --git a/midiwrt/MIDIDEF.H b/midiwrt/MIDIDEF.H new file mode 100644 index 0000000..c2b64bc --- /dev/null +++ b/midiwrt/MIDIDEF.H @@ -0,0 +1,197 @@ + +/* defines for MUS convert window */ +#define MUS_TEMPOBUTTONUP 5000 +#define MUS_TEMPOBUTTONDN 5001 +#define MUS_CVTBUTTON 5002 +#define MUS_CONVERTFILE 5003 +#define MUS_LISTBOX 5004 +#define MUS_STATIC 5005 + +/* string defines */ +#define STRING_BUTTONSTRING 5006 +#define STRING_LISTBOXSTRING 5007 +#define STRING_STATICSTRING 5008 +#define STRING_BITMAPUPARUP 5009 +#define STRING_BITMAPUPARDN 5010 +#define STRING_BITMAPDNARUP 5011 +#define STRING_BITMAPDNARDN 5012 +#define STRING_BITMAPCNVTUP 5013 +#define STRING_BITMAPCNVTDN 5014 + +/* defines for instrument categories and types */ +#define STRING_MUSINST1 5020 +#define STRING_MUSINST2 5021 +#define STRING_MUSINST3 5022 +#define STRING_MUSINST4 5023 +#define STRING_MUSINST5 5024 +#define STRING_MUSINST6 5025 +#define STRING_MUSINST7 5026 +#define STRING_MUSINST8 5027 +#define STRING_MUSINST9 5028 +#define STRING_MUSINST10 5029 +#define STRING_MUSINST11 5030 +#define STRING_MUSINST12 5031 +#define STRING_MUSINST13 5032 +#define STRING_MUSINST14 5033 +#define STRING_MUSINST15 5034 +#define STRING_MUSINST16 5035 +#define STRING_MUSINST17 5036 +#define STRING_MUSINST18 5037 +#define STRING_MUSINST19 5038 +#define STRING_MUSINST20 5039 +#define STRING_MUSINST21 5040 +#define STRING_MUSINST22 5041 +#define STRING_MUSINST23 5042 +#define STRING_MUSINST24 5043 +#define STRING_MUSINST25 5044 +#define STRING_MUSINST26 5045 +#define STRING_MUSINST27 5046 +#define STRING_MUSINST28 5047 +#define STRING_MUSINST29 5048 +#define STRING_MUSINST30 5049 +#define STRING_MUSINST31 5050 +#define STRING_MUSINST32 5051 +#define STRING_MUSINST33 5052 +#define STRING_MUSINST34 5053 +#define STRING_MUSINST35 5054 +#define STRING_MUSINST36 5055 +#define STRING_MUSINST37 5056 +#define STRING_MUSINST38 5057 +#define STRING_MUSINST39 5058 +#define STRING_MUSINST40 5059 +#define STRING_MUSINST41 5060 +#define STRING_MUSINST42 5061 +#define STRING_MUSINST43 5062 +#define STRING_MUSINST44 5063 +#define STRING_MUSINST45 5064 +#define STRING_MUSINST46 5065 +#define STRING_MUSINST47 5066 +#define STRING_MUSINST48 5067 +#define STRING_MUSINST49 5068 +#define STRING_MUSINST50 5069 +#define STRING_MUSINST51 5070 +#define STRING_MUSINST52 5071 +#define STRING_MUSINST53 5072 +#define STRING_MUSINST54 5073 +#define STRING_MUSINST55 5074 +#define STRING_MUSINST56 5075 +#define STRING_MUSINST57 5076 +#define STRING_MUSINST58 5077 +#define STRING_MUSINST59 5078 +#define STRING_MUSINST60 5079 +#define STRING_MUSINST61 5080 +#define STRING_MUSINST62 5081 +#define STRING_MUSINST63 5082 +#define STRING_MUSINST64 5083 +#define STRING_MUSINST65 5084 +#define STRING_MUSINST66 5085 +#define STRING_MUSINST67 5086 +#define STRING_MUSINST68 5087 +#define STRING_MUSINST69 5088 +#define STRING_MUSINST70 5089 +#define STRING_MUSINST71 5090 +#define STRING_MUSINST72 5091 +#define STRING_MUSINST73 5092 +#define STRING_MUSINST74 5093 +#define STRING_MUSINST75 5094 +#define STRING_MUSINST76 5095 +#define STRING_MUSINST77 5096 +#define STRING_MUSINST78 5097 +#define STRING_MUSINST79 5098 +#define STRING_MUSINST80 5099 +#define STRING_MUSINST81 5100 +#define STRING_MUSINST82 5101 +#define STRING_MUSINST83 5102 +#define STRING_MUSINST84 5103 +#define STRING_MUSINST85 5104 +#define STRING_MUSINST86 5105 +#define STRING_MUSINST87 5106 +#define STRING_MUSINST88 5107 +#define STRING_MUSINST89 5108 +#define STRING_MUSINST90 5109 +#define STRING_MUSINST91 5110 +#define STRING_MUSINST92 5111 +#define STRING_MUSINST93 5112 +#define STRING_MUSINST94 5113 +#define STRING_MUSINST95 5114 +#define STRING_MUSINST96 5115 +#define STRING_MUSINST97 5116 +#define STRING_MUSINST98 5117 +#define STRING_MUSINST99 5118 +#define STRING_MUSINST100 5119 +#define STRING_MUSINST101 5120 +#define STRING_MUSINST102 5121 +#define STRING_MUSINST103 5122 +#define STRING_MUSINST104 5123 +#define STRING_MUSINST105 5124 +#define STRING_MUSINST106 5125 +#define STRING_MUSINST107 5126 +#define STRING_MUSINST108 5127 +#define STRING_MUSINST109 5128 +#define STRING_MUSINST110 5129 +#define STRING_MUSINST111 5130 +#define STRING_MUSINST112 5131 +#define STRING_MUSINST113 5132 +#define STRING_MUSINST114 5133 +#define STRING_MUSINST115 5134 +#define STRING_MUSINST116 5135 +#define STRING_MUSINST117 5136 +#define STRING_MUSINST118 5137 +#define STRING_MUSINST119 5138 +#define STRING_MUSINST120 5139 +#define STRING_MUSINST121 5140 +#define STRING_MUSINST122 5141 +#define STRING_MUSINST123 5142 +#define STRING_MUSINST124 5143 +#define STRING_MUSINST125 5144 +#define STRING_MUSINST126 5145 +#define STRING_MUSINST127 5146 +#define STRING_MUSINST128 5147 +#define STRING_MUSINST129 5148 +#define STRING_MUSINST130 5149 +#define STRING_MUSINST131 5150 +#define STRING_MUSINST132 5151 +#define STRING_MUSINST133 5152 +#define STRING_MUSINST134 5153 +#define STRING_MUSINST135 5154 +#define STRING_MUSINST136 5155 +#define STRING_MUSINST137 5156 +#define STRING_MUSINST138 5157 +#define STRING_MUSINST139 5158 +#define STRING_MUSINST140 5159 +#define STRING_MUSINST141 5160 +#define STRING_MUSINST142 5161 +#define STRING_MUSINST143 5162 +#define STRING_MUSINST144 5163 +#define STRING_MUSINST145 5164 +#define STRING_MUSINST146 5165 +#define STRING_MUSINST147 5166 +#define STRING_MUSINST148 5167 +#define STRING_MUSINST149 5168 +#define STRING_MUSINST150 5169 +#define STRING_MUSINST151 5170 +#define STRING_MUSINST152 5171 +#define STRING_MUSINST153 5172 +#define STRING_MUSINST154 5173 +#define STRING_MUSINST155 5174 +#define STRING_MUSINST156 5175 +#define STRING_MUSINST157 5176 +#define STRING_MUSINST158 5177 +#define STRING_MUSINST159 5178 +#define STRING_MUSINST160 5179 +#define STRING_MUSINST161 5180 +#define STRING_MUSINST162 5181 +#define STRING_MUSINST163 5182 +#define STRING_MUSINST164 5183 +#define STRING_MUSINST165 5184 +#define STRING_MUSINST166 5185 +#define STRING_MUSINST167 5186 +#define STRING_MUSINST168 5187 +#define STRING_MUSINST169 5188 +#define STRING_MUSINST170 5189 +#define STRING_MUSINST171 5190 +#define STRING_MUSINST172 5191 +#define STRING_MUSINST173 5192 +#define STRING_MUSINST174 5193 +#define STRING_MUSINST175 5194 + diff --git a/midiwrt/MIDIDEF.HPP b/midiwrt/MIDIDEF.HPP new file mode 100644 index 0000000..48128d7 --- /dev/null +++ b/midiwrt/MIDIDEF.HPP @@ -0,0 +1,4 @@ +#ifndef _MIDIDEF_HPP_ +#define _MIDIDEF_HPP_ +#include +#endif diff --git a/midiwrt/MIDIHDR.CPP b/midiwrt/MIDIHDR.CPP new file mode 100644 index 0000000..c14ab41 --- /dev/null +++ b/midiwrt/MIDIHDR.CPP @@ -0,0 +1,36 @@ +#include +#include + +MidiHeader &MidiHeader::operator=(const MidiHeader &someMidiHeader) +{ + ::memcpy(mHeader,someMidiHeader.mHeader,sizeof(mHeader)); + mLengthData=someMidiHeader.mLengthData; + mSMFType=someMidiHeader.mSMFType; + mTracks=someMidiHeader.mTracks; + mDeltaTempo=someMidiHeader.mDeltaTempo; + mHeaderString=someMidiHeader.mHeaderString; + return *this; +} + +WORD MidiHeader::writeHeader(MemFile &midiFile) +{ + if(!midiFile.rewind())return FALSE; + if(!midiFile.write(mHeaderString,mHeaderString.length()))return FALSE; + if(!midiFile.write(mLengthData))return FALSE; + if(!midiFile.write(mSMFType))return FALSE; + if(!midiFile.write(mTracks))return FALSE; + if(!midiFile.write(mDeltaTempo))return FALSE; + return TRUE; +} + +WORD MidiHeader::readHeader(MemFile &midiFile) +{ + if(!midiFile.rewind())return FALSE; + if(!midiFile.read(mHeader,sizeof(mHeader)))return FALSE; + if(!midiFile.read(mLengthData))return FALSE; + if(!midiFile.read(mSMFType))return FALSE; + if(!midiFile.read(mTracks))return FALSE; + if(!midiFile.read(mDeltaTempo))return FALSE; + return TRUE; +} + diff --git a/midiwrt/MIDIHDR.HPP b/midiwrt/MIDIHDR.HPP new file mode 100644 index 0000000..952cdc2 --- /dev/null +++ b/midiwrt/MIDIHDR.HPP @@ -0,0 +1,93 @@ +#ifndef _MIDIHEADER_HPP_ +#define _MIDIHEADER_HPP_ +#include +#include +#include + +class MidiHeader +{ +public: + MidiHeader(void); + MidiHeader(const MidiHeader &someMidiHeader); + ~MidiHeader(); + MidiHeader &operator=(const MidiHeader &someMidiHeader); + WORD readHeader(MemFile &midiFile); + WORD writeHeader(MemFile &midiFile); + DWORD lengthData(void)const; + void smfType(USHORT smfType); + USHORT smfType(void)const; + USHORT tracks(void)const; + void tracks(USHORT tracks); + void deltaTempo(USHORT deltaTempo); + USHORT deltaTempo(void)const; +private: + enum {MaxHeaderIDLength=4,SingleTrack=0,MultiTrack=1,Sequential=2,DefaultTempo=136}; + char mHeader[MaxHeaderIDLength]; + DWORD mLengthData; + USHORT mSMFType; + USHORT mTracks; + USHORT mDeltaTempo; + String mHeaderString; +}; + +inline +MidiHeader::MidiHeader(void) +: mLengthData(0L), mSMFType(MultiTrack), mTracks(0), mDeltaTempo(DefaultTempo), + mHeaderString("MThd") +{ + mLengthData=sizeof(*this)-(sizeof(mLengthData)+sizeof(mHeader)+sizeof(mHeaderString)); +} + +inline +MidiHeader::~MidiHeader() +{ +} + +inline +DWORD MidiHeader::lengthData(void)const +{ + return mLengthData; +} + +inline +USHORT MidiHeader::smfType(void)const +{ + return mSMFType; +} + +inline +void MidiHeader::smfType(USHORT smfType) +{ + mSMFType=smfType; +} + +inline +USHORT MidiHeader::tracks(void)const +{ + return mTracks; +} + +inline +void MidiHeader::tracks(USHORT tracks) +{ + mTracks=tracks; +} + +inline +USHORT MidiHeader::deltaTempo(void)const +{ + return mDeltaTempo; +} + +inline +void MidiHeader::deltaTempo(USHORT deltaTempo) +{ + mDeltaTempo=deltaTempo; +} + +inline +MidiHeader::MidiHeader(const MidiHeader &someMidiHeader) +{ + *this=someMidiHeader; +} +#endif diff --git a/midiwrt/MIDIPTCH.HPP b/midiwrt/MIDIPTCH.HPP new file mode 100644 index 0000000..6c8a35f --- /dev/null +++ b/midiwrt/MIDIPTCH.HPP @@ -0,0 +1,51 @@ +#ifndef _MIDIPITCH_HPP_ +#define _MIDIPITCH_HPP_ +#include +#include + +class MidiPitchBend +{ +public: + enum {PitchBendDataLength=2}; + MidiPitchBend(void); + MidiPitchBend(BYTE musPitchBend); + void setPitchBend(BYTE musPitchBend); + operator BYTE*(void); +private: + void operator=(const MidiPitchBend &someMidiPitchBend); + BYTE mlpMidiPitchBend[PitchBendDataLength]; +}; + +inline +MidiPitchBend::MidiPitchBend(void) +{ + setPitchBend(0); +} + +inline +MidiPitchBend::MidiPitchBend(BYTE musPitchBend) +{ + setPitchBend(musPitchBend); +} + +inline +void MidiPitchBend::setPitchBend(BYTE musPitchBend) +{ + WORD midiPitchBend(musPitchBend*64); + + *(mlpMidiPitchBend)=(BYTE)(midiPitchBend&0x7F); + *(mlpMidiPitchBend+1)=(BYTE)((midiPitchBend>>7)&0x7F); +} + +inline +MidiPitchBend::operator BYTE*(void) +{ + return mlpMidiPitchBend; +} + +inline +void MidiPitchBend::operator=(const MidiPitchBend &someMidiPitchBend) +{ + return; +} +#endif diff --git a/midiwrt/MIDITIME.HPP b/midiwrt/MIDITIME.HPP new file mode 100644 index 0000000..569c871 --- /dev/null +++ b/midiwrt/MIDITIME.HPP @@ -0,0 +1,50 @@ +#ifndef _MIDITIME_HPP_ +#define _MIDITIME_HPP_ +#include + +class MidiDeltaTime +{ +public: + MidiDeltaTime(void); + ~MidiDeltaTime(); + void resetTime(void); + DWORD deltaTime(void)const; + MidiDeltaTime &operator+=(DWORD musDeltaTime); +private: + DWORD mDeltaTime; + DWORD mPrevDeltaTime; +}; + +inline +MidiDeltaTime::MidiDeltaTime(void) +{ + resetTime(); +} + +inline +MidiDeltaTime::~MidiDeltaTime() +{ +} + +inline +DWORD MidiDeltaTime::deltaTime(void)const +{ + return mDeltaTime; +} + +inline +MidiDeltaTime &MidiDeltaTime::operator+=(DWORD musDeltaTime) +{ + musDeltaTime/=.6; + mDeltaTime=(musDeltaTime-mPrevDeltaTime); + mPrevDeltaTime+=mDeltaTime; + return *this; +} + +inline +void MidiDeltaTime::resetTime(void) +{ + mDeltaTime=0L; + mPrevDeltaTime=0L; +} +#endif diff --git a/midiwrt/MIDITRCK.CPP b/midiwrt/MIDITRCK.CPP new file mode 100644 index 0000000..fe91028 --- /dev/null +++ b/midiwrt/MIDITRCK.CPP @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include + +WORD MidiTrack::readHeader(void) +{ + if(!mMidiFile.isOkay())return FALSE; + if(!mMidiFile.seek(mHeaderPosition,MemFile::SeekBeginning))return FALSE; + if(!mMidiFile.read(mTrack,sizeof(mTrack)))return FALSE; + if(!mMidiFile.read(mLengthData))return FALSE; + return TRUE; +} + +WORD MidiTrack::writeHeader(void) +{ + if(!mMidiFile.isOkay())return FALSE; + if(!mMidiFile.seek(mHeaderPosition,MemFile::SeekBeginning))return FALSE; + if(!mMidiFile.write(mTrack,sizeof(mTrack)))return FALSE; + if(!mMidiFile.write(mLengthData))return FALSE; + return TRUE; +} + +WORD MidiTrack::writeMetaEvent(MetaEventType metaEventType,void *lpData,BYTE lengthData) +{ + BYTE eventType(MetaEvent); + + if(!mMidiFile.isOkay())return FALSE; + if(!writeTimeValue(mDeltaTime))return FALSE; + if(!mMidiFile.write(eventType))return FALSE; + if(!mMidiFile.write((BYTE)metaEventType))return FALSE; + if(!mMidiFile.write(lengthData))return FALSE; + if(!mMidiFile.write((char*)lpData,lengthData))return FALSE; + mByteCount+=(3+lengthData); + if(!flushTrack())return FALSE; + return TRUE; +} + +WORD MidiTrack::writeMidiChannelMessage(MidiChannelMsg midiChannelMessage,BYTE channel,void *lpData,BYTE lengthData) +{ + BYTE midiMessage(midiChannelMessage|channel); + + if(!mMidiFile.isOkay())return FALSE; + if(!writeTimeValue(mDeltaTime))return FALSE; + if(!mMidiFile.write(midiMessage))return FALSE; + if(!mMidiFile.write((char*)lpData,lengthData))return FALSE; + mByteCount+=(lengthData+1); + if(!flushTrack())return FALSE; + return TRUE; +} + +WORD MidiTrack::writeEndTrack(void) +{ + BYTE eventType(MetaEvent); + BYTE metaEventType(EndOfTrack); + BYTE nullByte(0); + + if(!mMidiFile.isOkay())return FALSE; + if(!writeTimeValue(mDeltaTime))return FALSE; + if(!mMidiFile.write(eventType))return FALSE; + if(!mMidiFile.write(metaEventType))return FALSE; + if(!mMidiFile.write(nullByte))return FALSE; + mByteCount+=3; + if(!flushTrack())return FALSE; + return TRUE; +} + +WORD MidiTrack::flushTrack(void) +{ + DWORD currPos(mMidiFile.tell()); + + if(!readHeader())return FALSE; + mLengthData=mByteCount; + if(!writeHeader())return FALSE; + if(!mMidiFile.seek(currPos,MemFile::SeekBeginning))return FALSE; + return TRUE; +} + +WORD MidiTrack::writeTimeValue(DWORD value) +{ + DWORD tempValue; + + tempValue=(value&0x7F); + while((value>>=7)>0) + { + tempValue<<=8; + tempValue|=0x80; + tempValue+=(value&0x7F); + } + while(TRUE) + { + if(!mMidiFile.write((BYTE)(tempValue&0xFF)))return FALSE; + mByteCount++; + if(!(tempValue&0x80))break; + tempValue>>=8; + } + return TRUE; +} + diff --git a/midiwrt/MIDITRCK.HPP b/midiwrt/MIDITRCK.HPP new file mode 100644 index 0000000..60c63c5 --- /dev/null +++ b/midiwrt/MIDITRCK.HPP @@ -0,0 +1,87 @@ +#ifndef _MIDITRACK_HPP_ +#define _MIDITRACK_HPP_ +#include +#include +#include +#include + +class MidiTrack +{ +public: + enum EventType{MetaEvent=0xFF,SystemExclusiveOne=0xF0,SystemExclusiveTwo=0xF7,NullEvent=0x00}; + enum MidiChannelMsg{MIDIProgramChange=0xC0,MIDINoteOff=0x80,MIDINoteOn=0x90, + MIDIKeyPressure=0xA0,MIDIParameter=0xB0,MIDIPitchBend=0xE0,MIDIProgram=0xC0, + MIDIChannelPressure=0xD0}; + enum MetaEventType{SequenceNumberEvent=0x00,TextEvent=0x01,CopyrightNotice=0x02, + SequenceTrackName=0x03,InstrumentName=0x04,Lyric=0x05,Marker=0x06,CuePoint=0x07, + EndOfTrack=0x2F,SetTempo=0x51,SMPTEFormatSpec=0x54,TimeSignature=0x58, + KeySignature=0x59,SequencerSpecificMetaEvent=0x7F}; + MidiTrack(MemFile &midiFile); + ~MidiTrack(); + WORD writeHeader(void); + WORD readHeader(void); + WORD rewind(void); + void setDeltaTime(DWORD eventTime); + WORD writeMetaEvent(MetaEventType metaEventType,void *lpData,BYTE lengthData); + WORD writeMidiChannelMessage(MidiChannelMsg midiChannelMessage,BYTE channel,void *lpData,BYTE lengthData); + WORD writeEndTrack(void); + DWORD length(void)const; + void setLocation(MemFile &midiFile); +private: + enum {TrackIDLen=4}; + void length(DWORD lengthData); + WORD flushTrack(void); + WORD writeTimeValue(DWORD longValue); + + char mTrack[TrackIDLen]; + DWORD mLengthData; + DWORD mDeltaTime; + DWORD mHeaderPosition; + DWORD mByteCount; + MemFile &mMidiFile; +}; + +inline +MidiTrack::MidiTrack(MemFile &midiFile) +: mLengthData(0), mDeltaTime(0), mHeaderPosition(0L), mMidiFile(midiFile), mByteCount(0) +{ + ::memcpy(mTrack,"MTrk",sizeof(mTrack)); +} + +inline +MidiTrack::~MidiTrack() +{ +} + +inline +void MidiTrack::setDeltaTime(DWORD eventTime) +{ + mDeltaTime=eventTime; +} + +inline +DWORD MidiTrack::length(void)const +{ + return mLengthData; +} + +inline +void MidiTrack::length(DWORD lengthData) +{ + mLengthData=lengthData; +} + +inline +WORD MidiTrack::rewind(void) +{ + if(!mMidiFile.seek(mHeaderPosition,MemFile::SeekBeginning))return FALSE; + return TRUE; +} + +inline +void MidiTrack::setLocation(MemFile &midiFile) +{ + mLengthData=mDeltaTime=mByteCount=0; + mHeaderPosition=midiFile.tell(); +} +#endif diff --git a/midiwrt/MIDIWRT.DEF b/midiwrt/MIDIWRT.DEF new file mode 100644 index 0000000..c9c690f --- /dev/null +++ b/midiwrt/MIDIWRT.DEF @@ -0,0 +1,15 @@ +NAME MUS +DESCRIPTION 'MUS FILE CONVERTER' +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE +HEAPSIZE 8191 +STACKSIZE 8191 +EXPORTS CONVERTFILE + + + + + + + + \ No newline at end of file diff --git a/midiwrt/MIDIWRT.RC b/midiwrt/MIDIWRT.RC new file mode 100644 index 0000000..5d86eae --- /dev/null +++ b/midiwrt/MIDIWRT.RC @@ -0,0 +1,212 @@ +#include +#include + +UPARUP BITMAP UPARUP.BMP +UPARDN BITMAP UPARDN.BMP +DNARUP BITMAP DNARUP.BMP +DNARDN BITMAP DNARDN.BMP +CNVTUP BITMAP CNVTUP.BMP +CNVTDN BITMAP CNVTDN.BMP +OPENUP BITMAP OPENUP.BMP +OPENDN BITMAP OPENDN.BMP +SELUP BITMAP SELUP.BMP +SELDN BITMAP SELDN.BMP +WND BITMAP WND.BMP +LED BITMAP LED.BMP + +STRINGTABLE +{ + STRING_MUSINST1, "0;PIANO;Acoustic Grand Piano" + STRING_MUSINST2, "1;PIANO;Bright Acoustic Piano" + STRING_MUSINST3, "2;PIANO;Electric Grand Piano" + STRING_MUSINST4, "3;PIANO;Honky-tonk Piano" + STRING_MUSINST5, "4;PIANO;Rhodes Piano" + STRING_MUSINST6, "5;PIANO;Chorused Piano" + STRING_MUSINST7, "6;PIANO;Harpsichord" + STRING_MUSINST8, "7;PIANO;Clavinet" + STRING_MUSINST9, "8;CHROM PERCUSSION;Celesta" + STRING_MUSINST10, "9;CHROM PERCUSSION;Glockenspiel" + STRING_MUSINST11, "10;CHROM PERCUSSION;Music Box" + STRING_MUSINST12, "11;CHROM PERCUSSION;Vibraphone" + STRING_MUSINST13, "12;CHROM PERCUSSION;Marimba" + STRING_MUSINST14, "13;CHROM PERCUSSION;Xylophone" + STRING_MUSINST15, "14;CHROM PERCUSSION;Tubular-bell" + STRING_MUSINST16, "15;CHROM PERCUSSION;Dulcimer" + STRING_MUSINST17, "16;ORGAN;Hammond Organ" + STRING_MUSINST18, "17;ORGAN;Percussive Organ" + STRING_MUSINST19, "18;ORGAN;Rock Organ" + STRING_MUSINST20, "19;ORGAN;Church Organ" + STRING_MUSINST21, "20;ORGAN;Reed Organ" + STRING_MUSINST22, "21;ORGAN;Accordion" + STRING_MUSINST23, "22;ORGAN;Harmonica" + STRING_MUSINST24, "23;ORGAN;Tango Accordion" + STRING_MUSINST25, "24;GUITAR;Acoustic Guitar(nylon)" + STRING_MUSINST26, "25;GUITAR;Acoustic Guitar(steel)" + STRING_MUSINST27, "26;GUITAR;Electric Guitar(jazz)" + STRING_MUSINST28, "27;GUITAR;Electric Guitar(clean)" + STRING_MUSINST29, "28;GUITAR;Electric Guitar(muted)" + STRING_MUSINST30, "29;GUITAR;Overdriven Guitar" + STRING_MUSINST31, "30;GUITAR;Distortion Guitar" + STRING_MUSINST32, "31;GUITAR;Guitar Harmonics" + STRING_MUSINST33, "32;BASS;Acoustic Bass" + STRING_MUSINST34, "33;BASS;Electric Bass(finger)" + STRING_MUSINST35, "34;BASS;Electric Bass(pick)" + STRING_MUSINST36, "35;BASS;Fretless Bass" + STRING_MUSINST37, "36;BASS;Slap Bass 1" + STRING_MUSINST38, "37;BASS;Slap Bass 2" + STRING_MUSINST39, "38;BASS;Synth Bass 1" + STRING_MUSINST40, "39;BASS;Synth Bass 2" + STRING_MUSINST41, "40;STRINGS;Violin" + STRING_MUSINST42, "41;STRINGS;Viola" + STRING_MUSINST43, "42;STRINGS;Cello" + STRING_MUSINST44, "43;STRINGS;Contrabass" + STRING_MUSINST45, "44;STRINGS;Tremolo Strings" + STRING_MUSINST46, "45;STRINGS;Pizzicato Strings" + STRING_MUSINST47, "46;STRINGS;Orchestral Harp" + STRING_MUSINST48, "47;STRINGS;Timpani" + STRING_MUSINST49, "48;ENSEMBLE;String Ensemble 1" + STRING_MUSINST50, "49;ENSEMBLE;String Ensemble 2" + STRING_MUSINST51, "50;ENSEMBLE;Synth Strings 1" + STRING_MUSINST52, "51;ENSEMBLE;Synth Strings 2" + STRING_MUSINST53, "52;ENSEMBLE;Choir Aahs" + STRING_MUSINST54, "53;ENSEMBLE;Voice Oohs" + STRING_MUSINST55, "54;ENSEMBLE;Synth Voice" + STRING_MUSINST56, "55;ENSEMBLE;Orchestra Hit" + STRING_MUSINST57, "56;BRASS;Trumpet" + STRING_MUSINST58, "57;BRASS;Trombone" + STRING_MUSINST59, "58;BRASS;Tuba" + STRING_MUSINST60, "59;BRASS;Muted Trumpet" + STRING_MUSINST61, "60;BRASS;French Horn" + STRING_MUSINST62, "61;BRASS;Brass Section" + STRING_MUSINST63, "62;BRASS;Synth Brass 1" + STRING_MUSINST64, "63;BRASS;Synth Brass 2" + STRING_MUSINST65, "64;REED;Soprano Sax" + STRING_MUSINST66, "65;REED;Alto Sax" + STRING_MUSINST67, "66;REED;Tenor Sax" + STRING_MUSINST68, "67;REED;Baritone Sax" + STRING_MUSINST69, "68;REED;Oboe" + STRING_MUSINST70, "69;REED;English Horn" + STRING_MUSINST71, "70;REED;Bassoon" + STRING_MUSINST72, "71;REED;Clarinet" + STRING_MUSINST73, "72;PIPE;Piccolo" + STRING_MUSINST74, "73;PIPE;Flute" + STRING_MUSINST75, "74;PIPE;Recorder" + STRING_MUSINST76, "75;PIPE;Pan Flute" + STRING_MUSINST77, "76;PIPE;Bottle Blow" + STRING_MUSINST78, "77;PIPE;Shakuhachi" + STRING_MUSINST79, "78;PIPE;Whistle" + STRING_MUSINST80, "79;PIPE;Ocarina" + STRING_MUSINST81, "80;SYNTH LEAD;Lead 1(square)" + STRING_MUSINST82, "81;SYNTH LEAD;Lead 2(sawtooth)" + STRING_MUSINST83, "82;SYNTH LEAD;Lead 3(calliope)" + STRING_MUSINST84, "83;SYNTH LEAD;Lead 4(chiffer)" + STRING_MUSINST85, "84;SYNTH LEAD;Lead 5(charang)" + STRING_MUSINST86, "85;SYNTH LEAD;Lead 6(voice)" + STRING_MUSINST87, "86;SYNTH LEAD;Lead 7(5th sawtooth)" + STRING_MUSINST88, "87;SYNTH LEAD;Lead 8(bass&lead)" + STRING_MUSINST89, "88;SYNTH PAD;Pad 1(new age)" + STRING_MUSINST90, "89;SYNTH PAD;Pad 2(warm)" + STRING_MUSINST91, "90;SYNTH PAD;Pad 3(polysynth)" + STRING_MUSINST92, "91;SYNTH PAD;Pad 4(choir)" + STRING_MUSINST93, "92;SYNTH PAD;Pad 5(bowed glass)" + STRING_MUSINST94, "93;SYNTH PAD;Pad 6(metal)" + STRING_MUSINST95, "94;SYNTH PAD;Pad 7(halo)" + STRING_MUSINST96, "95;SYNTH PAD;Pad 8(sweep)" + STRING_MUSINST97, "96;SYNTH EFFECTS;FX 1(rain)" + STRING_MUSINST98, "97;SYNTH EFFECTS;FX 2(soundtrack)" + STRING_MUSINST99, "98;SYNTH EFFECTS;FX 3(crystal)" + STRING_MUSINST100, "99;SYNTH EFFECTS;FX 4(atmosphere)" + STRING_MUSINST101, "100;SYNTH EFFECTS;FX 5(brightness)" + STRING_MUSINST102, "101;SYNTH EFFECTS;FX 6(goblin)" + STRING_MUSINST103, "102;SYNTH EFFECTS;FX 7(echo drops)" + STRING_MUSINST104, "103;SYNTH EFFECTS;FX 8(star-theme)" + STRING_MUSINST105, "104;ETHNIC;Sitar" + STRING_MUSINST106, "105;ETHNIC;Banjo" + STRING_MUSINST107, "106;ETHNIC;Shamisen" + STRING_MUSINST108, "107;ETHNIC;Koto" + STRING_MUSINST109, "108;ETHNIC;Kalimba" + STRING_MUSINST110, "109;ETHNIC;Bag Pipe" + STRING_MUSINST111, "110;ETHNIC;Fiddle" + STRING_MUSINST112, "111;ETHNIC;Shanai" + STRING_MUSINST113, "112;PERCUSSIVE;Tinkle Bell" + STRING_MUSINST114, "113;PERCUSSIVE;Agogo" + STRING_MUSINST115, "114;PERCUSSIVE;Steel Drums" + STRING_MUSINST116, "115;PERCUSSIVE;Woodblock" + STRING_MUSINST117, "116;PERCUSSIVE;Taiko Drum" + STRING_MUSINST118, "117;PERCUSSIVE;Melodic Tom" + STRING_MUSINST119, "118;PERCUSSIVE;Synth Drum" + STRING_MUSINST120, "119;PERCUSSIVE;Reverse Cymbal" + STRING_MUSINST121, "120;SOUND EFFECTS;Guitar Fret Noise" + STRING_MUSINST122, "121;SOUND EFFECTS;Breath Noise" + STRING_MUSINST123, "122;SOUND EFFECTS;Seashore" + STRING_MUSINST124, "123;SOUND EFFECTS;Bird Tweet" + STRING_MUSINST125, "124;SOUND EFFECTS;Telephone Ring" + STRING_MUSINST126, "125;SOUND EFFECTS;Helicopter" + STRING_MUSINST127, "126;SOUND EFFECTS;Applause" + STRING_MUSINST128, "127;SOUND EFFECTS;Gun Shot" + STRING_MUSINST129, "135;MIDI PERCUSSION;Acoustic Bass Drum" + STRING_MUSINST130, "136;MIDI PERCUSSION;Bass Drum" + STRING_MUSINST131, "137;MIDI PERCUSSION;Slide Stick" + STRING_MUSINST132, "138;MIDI PERCUSSION;Acoustic Snare" + STRING_MUSINST133, "139;MIDI PERCUSSION;Hand Clap" + STRING_MUSINST134, "140;MIDI PERCUSSION;Electric Snare" + STRING_MUSINST135, "141;MIDI PERCUSSION;Low Floor Tom" + STRING_MUSINST136, "142;MIDI PERCUSSION;Closed High-Hat" + STRING_MUSINST137, "143;MIDI PERCUSSION;High Floor Tom" + STRING_MUSINST138, "144;MIDI PERCUSSION;Pedal High Hat" + STRING_MUSINST139, "145;MIDI PERCUSSION;Low Tom" + STRING_MUSINST140, "146;MIDI PERCUSSION;Open High Hat" + STRING_MUSINST141, "147;MIDI PERCUSSION;Low-Mid Tom" + STRING_MUSINST142, "148;MIDI PERCUSSION;High-Mid Tom" + STRING_MUSINST143, "149;MIDI PERCUSSION;Crash Cymbal 1" + STRING_MUSINST144, "150;MIDI PERCUSSION;High Tom" + STRING_MUSINST145, "151;MIDI PERCUSSION;Ride Cymbal 1" + STRING_MUSINST146, "152;MIDI PERCUSSION;Chinese Cymbal" + STRING_MUSINST147, "153;MIDI PERCUSSION;Ride Bell" + STRING_MUSINST148, "154;MIDI PERCUSSION;Tambourine" + STRING_MUSINST149, "155;MIDI PERCUSSION;Splash Cymbal" + STRING_MUSINST150, "156;MIDI PERCUSSION;Cowbell" + STRING_MUSINST151, "157;MIDI PERCUSSION;Crash Cymbal 2" + STRING_MUSINST152, "158;MIDI PERCUSSION;Vibraslap" + STRING_MUSINST153, "159;MIDI PERCUSSION;Ride Cymbal 2" + STRING_MUSINST154, "160;MIDI PERCUSSION;High Bongo" + STRING_MUSINST155, "161;MIDI PERCUSSION;Low Bongo" + STRING_MUSINST156, "162;MIDI PERCUSSION;Mute High Conga" + STRING_MUSINST157, "163;MIDI PERCUSSION;Open High Conga" + STRING_MUSINST158, "164;MIDI PERCUSSION;Low Conga" + STRING_MUSINST159, "165;MIDI PERCUSSION;High Timbale" + STRING_MUSINST160, "166;MIDI PERCUSSION;Low Timbale" + STRING_MUSINST161, "167;MIDI PERCUSSION;High Agogo" + STRING_MUSINST162, "168;MIDI PERCUSSION;Low Agogo" + STRING_MUSINST163, "169;MIDI PERCUSSION;Cabasa" + STRING_MUSINST164, "170;MIDI PERCUSSION;Maracas" + STRING_MUSINST165, "171;MIDI PERCUSSION;Short Whistle" + STRING_MUSINST166, "172;MIDI PERCUSSION;Long Whistle" + STRING_MUSINST167, "173;MIDI PERCUSSION;Short Guiro" + STRING_MUSINST168, "174;MIDI PERCUSSION;Long Guiro" + STRING_MUSINST169, "175;MIDI PERCUSSION;Claves" + STRING_MUSINST170, "176;MIDI PERCUSSION;High Wood Block" + STRING_MUSINST171, "177;MIDI PERCUSSION;Low Wood Block" + STRING_MUSINST172, "178;MIDI PERCUSSION;Mute Cuica" + STRING_MUSINST173, "179;MIDI PERCUSSION;Open Cuica" + STRING_MUSINST174, "180;MIDI PERCUSSION;Mute Triangle" + STRING_MUSINST175, "181;MIDI PERCUSSION;Open Triangle" +} + +STRINGTABLE +{ + STRING_BITMAPUPARUP, "UPARUP" + STRING_BITMAPUPARDN, "UPARDN" + STRING_BITMAPDNARUP, "DNARUP" + STRING_BITMAPDNARDN, "DNARDN" + STRING_BITMAPCNVTUP, "CNVTUP" + STRING_BITMAPCNVTDN, "CNVTDN" +} + +STRINGTABLE +{ + STRING_BUTTONSTRING, "BUTTON" + STRING_LISTBOXSTRING, "LISTBOX" + STRING_STATICSTRING, "STATIC" +} + diff --git a/midiwrt/MUS.DSW b/midiwrt/MUS.DSW new file mode 100644 index 0000000..b682779 Binary files /dev/null and b/midiwrt/MUS.DSW differ diff --git a/midiwrt/MUSCNV.CPP b/midiwrt/MUSCNV.CPP new file mode 100644 index 0000000..7678109 --- /dev/null +++ b/midiwrt/MUSCNV.CPP @@ -0,0 +1,205 @@ +#include +#include +#include + +MUSConverter::MUSConverter(String midiPathFileName,String musPathFileName) +: MUSFile(musPathFileName), mMidiData(midiPathFileName), + mNumTracks(0), mMidiTrack((MemFile&)mMidiData) +{ +} + +MUSConverter::~MUSConverter() +{ +} + +WORD MUSConverter::convertFile(void) +{ + if(!isOkay())return FALSE; + if(!writeInfoTrack())return FALSE; + if(!readMUSFile())return FALSE; + if(!updateTrackInfo())return FALSE; + return TRUE; +} + +WORD MUSConverter::updateTrackInfo(void) +{ + if(!mNumTracks)return FALSE; + mMidiHeader.tracks(mNumTracks); + if(!mMidiData.writeHeader(mMidiHeader))return FALSE; + if(!mMidiData.flush())return FALSE; + return TRUE; +} + +WORD MUSConverter::writeInfoTrack(void) +{ + String copyRightNotice("(c) Copyright 1995 Sean M. Kessler."); + String textEventOne("WINMUS v1.00 Beta."); + char timeSignature[]={0x04,0x02,0x60,0x08}; + char setTempo[]={0x09,0xA3,0x1A}; + + if(!mMidiData.isOkay()||!MUSFile::isOkay())return FALSE; + if(!mMidiData.writeHeader(mMidiHeader))return FALSE; + mMidiTrack.setLocation((MemFile&)mMidiData); + if(!mMidiTrack.writeHeader())return FALSE; + if(!mMidiTrack.writeMetaEvent(MidiTrack::TimeSignature,(void*)timeSignature,sizeof(timeSignature)))return FALSE; + mMidiTrack.setDeltaTime(0); + if(!mMidiTrack.writeMetaEvent(MidiTrack::SetTempo,(void*)setTempo,sizeof(setTempo)))return FALSE; + mMidiTrack.setDeltaTime(0); + if(!mMidiTrack.writeMetaEvent(MidiTrack::CopyrightNotice,(void*)(LPSTR)copyRightNotice,copyRightNotice.length()))return FALSE; + mMidiTrack.setDeltaTime(0); + if(!mMidiTrack.writeMetaEvent(MidiTrack::TextEvent,(void*)(LPSTR)textEventOne,textEventOne.length()))return FALSE; + mMidiTrack.setDeltaTime(0); + if(!mMidiTrack.writeEndTrack())return FALSE; + mNumTracks++; + return TRUE; +} + +WORD MUSConverter::handleScoreStart(void) +{ + mMidiTrack.setLocation((MemFile&)mMidiData); + if(!mMidiTrack.writeHeader())return FALSE; + mDeltaTime.resetTime(); + return TRUE; +} + +WORD MUSConverter::handleReleaseNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &releaseNote,BYTE trackNumber) +{ + fixChannel(pureEvent,trackNumber); + mDeltaTime+=pureDelay.deltaTicks(); + mMidiTrack.setDeltaTime(mDeltaTime.deltaTime()); + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDINoteOff,pureEvent.channel(),(void*)&releaseNote,PureNote::DataLength); + return FALSE; +} + +WORD MUSConverter::handlePlayNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &playNote,BYTE trackNumber) +{ + fixChannel(pureEvent,trackNumber); + mDeltaTime+=pureDelay.deltaTicks(); + mMidiTrack.setDeltaTime(mDeltaTime.deltaTime()); + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDINoteOn,pureEvent.channel(),(void*)&playNote,PureNote::DataLength); + return FALSE; +} + +WORD MUSConverter::handlePitchBend(PureEvent &pureEvent,PureDelay &pureDelay,BYTE pitchBenderValue,BYTE trackNumber) +{ + fixChannel(pureEvent,trackNumber); + MidiPitchBend midiPitchBend(pitchBenderValue); + mDeltaTime+=pureDelay.deltaTicks(); + mMidiTrack.setDeltaTime(mDeltaTime.deltaTime()); + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDIPitchBend,pureEvent.channel(),(BYTE*)midiPitchBend,MidiPitchBend::PitchBendDataLength); + return FALSE; +} + +WORD MUSConverter::handleReset(PureEvent &pureEvent,PureDelay &pureDelay,BYTE tempoValue,BYTE trackNumber) +{ + BYTE resetData[2]; + + fixChannel(pureEvent,trackNumber); + mDeltaTime+=pureDelay.deltaTicks(); + mMidiTrack.setDeltaTime(mDeltaTime.deltaTime()); + resetData[1]=0; + switch(tempoValue) + { + case 0x0A : + resetData[0]=0x78; + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDIParameter,pureEvent.channel(),resetData,sizeof(resetData)); + break; + case 0x0B : + resetData[0]=0x7B; + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDIParameter,pureEvent.channel(),resetData,sizeof(resetData)); + break; + case 0x0C : + resetData[0]=0x7E; + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDIParameter,pureEvent.channel(),resetData,sizeof(resetData)); + break; + case 0x0D : + resetData[0]=0x7F; + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDIParameter,pureEvent.channel(),resetData,sizeof(resetData)); + break; + case 0x0E : + resetData[0]=0x79; + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDIParameter,pureEvent.channel(),resetData,sizeof(resetData)); + break; + default : + resetData[0]=0; + mMidiTrack.writeMidiChannelMessage(MidiTrack::MIDIParameter,pureEvent.channel(),resetData,1); + break; + } + return TRUE; +} + +WORD MUSConverter::handleController(PureEvent &pureEvent,PureDelay &pureDelay,PureController &pureController,BYTE trackNumber) +{ + MidiTrack::MidiChannelMsg midiChannelMessage; + BYTE midiData[2]; + + fixChannel(pureEvent,trackNumber); + mDeltaTime+=pureDelay.deltaTicks(); + mMidiTrack.setDeltaTime(mDeltaTime.deltaTime()); + if(0==pureController.controllerNumber())midiChannelMessage=MidiTrack::MIDIProgram; + else midiChannelMessage=MidiTrack::MIDIParameter; + switch(pureController.controllerNumber()) + { + case 0x00 : + midiData[0]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,1); + break; + case 0x01 : + midiData[0]=0x00; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x02 : + midiData[0]=0x01; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x03 : + midiData[0]=0x07; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x04 : + midiData[0]=0x0A; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x05 : + midiData[0]=0x0B; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x06 : + midiData[0]=0x5B; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x07 : + midiData[0]=0x5D; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x08 : + midiData[0]=0x40; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + case 0x09 : + midiData[0]=0x43; + midiData[1]=pureController.controllerValue(); + mMidiTrack.writeMidiChannelMessage(midiChannelMessage,pureEvent.channel(),midiData,sizeof(midiData)); + break; + } + return TRUE; +} + +WORD MUSConverter::handleScoreEnd(PureDelay &pureDelay) +{ + if(!mMidiTrack.length()){mMidiTrack.rewind();return TRUE;} + mDeltaTime+=pureDelay.deltaTicks(); + mMidiTrack.setDeltaTime(mDeltaTime.deltaTime()); + mMidiTrack.writeEndTrack(); + mNumTracks++; + return TRUE; +} + diff --git a/midiwrt/MUSCNV.HPP b/midiwrt/MUSCNV.HPP new file mode 100644 index 0000000..fa8ba7d --- /dev/null +++ b/midiwrt/MUSCNV.HPP @@ -0,0 +1,62 @@ +#ifndef _MUSCONVERTER_HPP_ +#define _MUSCONVERTER_HPP_ +#include +#include +#include +#include +#include +#include + +class MUSConverter : private MUSFile +{ +public: + MUSConverter(String midiPathFileName,String musPathFileName); + ~MUSConverter(); + WORD convertFile(void); + void setTempo(USHORT midiTempo); + USHORT getTempo(void)const; + WORD isOkay(void)const; + WORD updateTrackInfo(void); +protected: + WORD virtual handleScoreStart(void); + WORD virtual handleReleaseNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &releaseNote,BYTE trackNumber); + WORD virtual handlePlayNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &playNote,BYTE trackNumber); + WORD virtual handlePitchBend(PureEvent &pureEvent,PureDelay &pureDelay,BYTE pitchBenderValue,BYTE trackNumber); + WORD virtual handleReset(PureEvent &pureEvent,PureDelay &pureDelay,BYTE tempoValue,BYTE trackNumber); + WORD virtual handleController(PureEvent &pureEvent,PureDelay &pureDelay,PureController &pureController,BYTE trackNumber); + WORD virtual handleScoreEnd(PureDelay &pureDelay); +private: + void fixChannel(PureEvent &pureEvent,BYTE trackNumber); + WORD writeInfoTrack(void); + MidiData mMidiData; + MidiTrack mMidiTrack; + MidiHeader mMidiHeader; + MidiDeltaTime mDeltaTime; + WORD mNumTracks; +}; + +inline +WORD MUSConverter::isOkay(void)const +{ + return (mMidiData.isOkay()&&MUSFile::isOkay()); +} + +inline +void MUSConverter::setTempo(WORD midiTempo) +{ + mMidiHeader.deltaTempo(midiTempo); +} + +inline +USHORT MUSConverter::getTempo(void)const +{ + return mMidiHeader.deltaTempo(); +} + +inline +void MUSConverter::fixChannel(PureEvent &pureEvent,BYTE trackNumber) +{ + if(15==trackNumber)pureEvent.channel(9); + if(9==trackNumber)pureEvent.channel(15); +} +#endif diff --git a/midiwrt/MUSDLG.CPP b/midiwrt/MUSDLG.CPP new file mode 100644 index 0000000..00af637 --- /dev/null +++ b/midiwrt/MUSDLG.CPP @@ -0,0 +1,322 @@ +#include +#include +#include +#include + +char MUSDlg::szClassName[]={"MUSConverter"}; +char MUSDlg::szMenuName[]={""}; + +MUSDlg::MUSDlg(Window &parentWindow,String midiPathFileName,String musPathFileName) +: MUSConverter(midiPathFileName,musPathFileName), + mCommandHandler(this,&MUSDlg::commandHandler), + mCreateHandler(this,&MUSDlg::createHandler), + mDrawItemHandler(this,&MUSDlg::drawItemHandler), + mPaintHandler(this,&MUSDlg::paintHandler), + mDestroyHandler(this,&MUSDlg::destroyHandler), + mCloseHandler(this,&MUSDlg::closeHandler), + mControlColorHandler(this,&MUSDlg::controlColorHandler), + mlpLedTrackDisplay(0), mlpLedTempoDisplay(0), + mOwnerDraw(OwnerDraw::UseInstance), mhButtonCvtWnd(0), mhButtonUpWnd(0), + mhGrayBrush(::CreateSolidBrush(RGB(btnRed,btnGreen,btnBlue))), + mhButtonDnWnd(0), mhListBoxWnd(0), mhStaticWnd(0), + mLinkedBitmap(0,String("WND"),parentWindow.processInstance()), + mOutputPathFileName(midiPathFileName), mhInstance(parentWindow.processInstance()), + mhParentWnd(parentWindow) +{ + registerClass(); + insertHandlers(); +} + +MUSDlg::MUSDlg(DWindow &parentWindow,String midiPathFileName,String musPathFileName) +: MUSConverter(midiPathFileName,musPathFileName), + mCommandHandler(this,&MUSDlg::commandHandler), + mCreateHandler(this,&MUSDlg::createHandler), + mDrawItemHandler(this,&MUSDlg::drawItemHandler), + mPaintHandler(this,&MUSDlg::paintHandler), + mDestroyHandler(this,&MUSDlg::destroyHandler), + mCloseHandler(this,&MUSDlg::closeHandler), + mControlColorHandler(this,&MUSDlg::controlColorHandler), + mlpLedTrackDisplay(0), mlpLedTempoDisplay(0), + mOwnerDraw(OwnerDraw::UseInstance), mhButtonCvtWnd(0), mhButtonUpWnd(0), + mhGrayBrush(::CreateSolidBrush(RGB(btnRed,btnGreen,btnBlue))), + mhButtonDnWnd(0), mhListBoxWnd(0), mhStaticWnd(0), + mLinkedBitmap(0,String("WND"),parentWindow.processInstance()), + mOutputPathFileName(midiPathFileName), mhInstance(parentWindow.processInstance()), + mhParentWnd(parentWindow) +{ + registerClass(); + insertHandlers(); +} + +MUSDlg::~MUSDlg() +{ + if(mlpLedTrackDisplay){delete mlpLedTrackDisplay;mlpLedTrackDisplay=0;} + if(mlpLedTempoDisplay){delete mlpLedTempoDisplay;mlpLedTempoDisplay=0;} + if(::IsWindow(mhButtonUpWnd))::DestroyWindow(mhButtonUpWnd); + if(::IsWindow(mhButtonDnWnd))::DestroyWindow(mhButtonDnWnd); + if(::IsWindow(mhButtonCvtWnd))::DestroyWindow(mhButtonCvtWnd); + if(::IsWindow(mhListBoxWnd))::DestroyWindow(mhListBoxWnd); + if(::IsWindow(mhStaticWnd))::DestroyWindow(mhStaticWnd); + if(mhGrayBrush)::DeleteObject(mhGrayBrush); + if((HWND)*this)destroy(); + removeHandlers(); +} + +void MUSDlg::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WindowWndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MUSDlg*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +WORD MUSDlg::performDialog(void) +{ + createDialogControls(); + loadInstruments(); + while(::IsWindow((HWND)*this))yieldTask(); + return FALSE; +} + +void MUSDlg::loadInstruments(void) +{ + Instruments midiInstruments(StartOrdinal,EndOrdinal); + PureVector vectoredInstruments; + String itemString; + + midiInstruments.getInstruments(vectoredInstruments); + ::SendMessage(mhListBoxWnd,WM_SETREDRAW,FALSE,0L); + for(int index=0;indexsetNumber(getTempo()); +} + +void MUSDlg::handleTempoDnEvent(void) +{ + setTempo(getTempo()-1); + mlpLedTempoDisplay->setNumber(getTempo()); +} + +void MUSDlg::handleConvertFileEvent(void) +{ + String convertMessageString("writing "); + + convertMessageString+=mOutputPathFileName; + setMessage(convertMessageString); + if(!convertFile())setMessage("Error converting file..."); + else setMessage("Complete..."); +} + +CallbackData::ReturnType MUSDlg::createHandler(CallbackData &/*someCallbackData*/) +{ + mOwnerDraw.associate(MUS_TEMPOBUTTONUP,String(STRING_BITMAPUPARUP),String(STRING_BITMAPUPARUP),String(STRING_BITMAPUPARDN),OwnerDraw::NOFOCUS); + mOwnerDraw.associate(MUS_TEMPOBUTTONDN,String(STRING_BITMAPDNARUP),String(STRING_BITMAPDNARUP),String(STRING_BITMAPDNARDN),OwnerDraw::NOFOCUS); + mOwnerDraw.associate(MUS_CVTBUTTON,String(STRING_BITMAPCNVTUP),String(STRING_BITMAPCNVTUP),String(STRING_BITMAPCNVTDN),OwnerDraw::NOFOCUS); + mlpLedTrackDisplay=new LedDisplay(*this,Point(xTrack,yTrack)); + mlpLedTempoDisplay=new LedDisplay(*this,Point(xTempo,yTempo)); + mlpLedTempoDisplay->setNumber(getTempo()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MUSDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + mOwnerDraw.freeBitmap(MUS_TEMPOBUTTONUP); + mOwnerDraw.freeBitmap(MUS_TEMPOBUTTONDN); + mOwnerDraw.freeBitmap(MUS_CVTBUTTON); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MUSDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + destroy(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MUSDlg::controlColorHandler(CallbackData &someCallbackData) +{ + ::SetBkColor((HDC)someCallbackData.wParam(),RGB(btnRed,btnGreen,btnBlue)); + return (CallbackData::ReturnType)mhGrayBrush; +} + +CallbackData::ReturnType MUSDlg::drawItemHandler(CallbackData &someCallbackData) +{ + if(MUS_TEMPOBUTTONUP==((LPDRAWITEMSTRUCT)someCallbackData.lParam())->CtlID) + mOwnerDraw.handleOwnerButton(MUS_TEMPOBUTTONUP,someCallbackData.lParam()); + else if(MUS_TEMPOBUTTONDN==((LPDRAWITEMSTRUCT)someCallbackData.lParam())->CtlID) + mOwnerDraw.handleOwnerButton(MUS_TEMPOBUTTONDN,someCallbackData.lParam()); + else if(MUS_CVTBUTTON==((LPDRAWITEMSTRUCT)someCallbackData.lParam())->CtlID) + mOwnerDraw.handleOwnerButton(MUS_CVTBUTTON,someCallbackData.lParam()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MUSDlg::paintHandler(CallbackData &someCallbackData) +{ + RECT windowRect; + + PaintInformation *lpPaintInformation((PaintInformation*)someCallbackData.lParam()); + ::SetRect(&windowRect,0,0,mLinkedBitmap.width(),mLinkedBitmap.height()+CaptionHeight); + mLinkedBitmap.drawBitmap((PureDevice)(*lpPaintInformation),windowRect); + if(mlpLedTrackDisplay)mlpLedTrackDisplay->paint(); + if(mlpLedTempoDisplay)mlpLedTempoDisplay->paint(); + return (CallbackData::ReturnType)0; +} + +void MUSDlg::yieldTask(void)const +{ + MSG msg; + + while(::IsWindow((HWND)*this)&&::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + if(WM_PAINT==msg.message||isComponentWnd(msg.hwnd)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + } +} + +WORD MUSDlg::isComponentWnd(HWND hWnd)const +{ + if(!::IsWindow(hWnd)||!::IsWindow((HWND)*this))return FALSE; + if(hWnd==(HWND)*this)return TRUE; + if(mhButtonUpWnd==hWnd)return TRUE; + if(mhButtonDnWnd==hWnd)return TRUE; + if(mhButtonCvtWnd==hWnd)return TRUE; + if(mhListBoxWnd==hWnd)return TRUE; + if(mhStaticWnd==hWnd)return TRUE; + return FALSE; +} + +WORD MUSDlg::handleScoreStart(void) +{ + return MUSConverter::handleScoreStart(); +} + +WORD MUSDlg::handleReleaseNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &releaseNote,BYTE trackNumber) +{ + if(trackNumber!=mlpLedTrackDisplay->getNumber()) + mlpLedTrackDisplay->setNumber(trackNumber); + return MUSConverter::handleReleaseNote(pureEvent,pureDelay,releaseNote,trackNumber); +} + +WORD MUSDlg::handlePlayNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &playNote,BYTE trackNumber) +{ + if(trackNumber!=mlpLedTrackDisplay->getNumber()) + mlpLedTrackDisplay->setNumber(trackNumber); + return MUSConverter::handlePlayNote(pureEvent,pureDelay,playNote,trackNumber); +} + +WORD MUSDlg::handlePitchBend(PureEvent &pureEvent,PureDelay &pureDelay,BYTE pitchBenderValue,BYTE trackNumber) +{ + if(trackNumber!=mlpLedTrackDisplay->getNumber()) + mlpLedTrackDisplay->setNumber(trackNumber); + return MUSConverter::handlePitchBend(pureEvent,pureDelay,pitchBenderValue,trackNumber); +} + +WORD MUSDlg::handleReset(PureEvent &pureEvent,PureDelay &pureDelay,BYTE tempoValue,BYTE trackNumber) +{ + if(trackNumber!=mlpLedTrackDisplay->getNumber()) + mlpLedTrackDisplay->setNumber(trackNumber); + return MUSConverter::handleReset(pureEvent,pureDelay,tempoValue,trackNumber); +} + +WORD MUSDlg::handleController(PureEvent &pureEvent,PureDelay &pureDelay,PureController &pureController,BYTE trackNumber) +{ + if(trackNumber!=mlpLedTrackDisplay->getNumber()) + mlpLedTrackDisplay->setNumber(trackNumber); + return MUSConverter::handleController(pureEvent,pureDelay,pureController,trackNumber); +} + +WORD MUSDlg::handleScoreEnd(PureDelay &pureDelay) +{ + return MUSConverter::handleScoreEnd(pureDelay); +} + diff --git a/midiwrt/MUSDLG.HPP b/midiwrt/MUSDLG.HPP new file mode 100644 index 0000000..d570b6e --- /dev/null +++ b/midiwrt/MUSDLG.HPP @@ -0,0 +1,79 @@ +#ifndef _MUSDIALOG_HPP_ +#define _MUSDIALOG_HPP_ +#include +#include +#include +#include +#include +#include +#include + +class MUSDlg : public Window, private MUSConverter +{ +public: + MUSDlg(Window &parentWindow,String midiPathFileName,String musPathFileName); + MUSDlg(DWindow &parentWindow,String midiPathFileName,String musPathFileName); + ~MUSDlg(); + WORD performDialog(void); +protected: + WORD virtual handleScoreStart(void); + WORD virtual handleReleaseNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &releaseNote,BYTE trackNumber); + WORD virtual handlePlayNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &playNote,BYTE trackNumber); + WORD virtual handlePitchBend(PureEvent &pureEvent,PureDelay &pureDelay,BYTE pitchBenderValue,BYTE trackNumber); + WORD virtual handleReset(PureEvent &pureEvent,PureDelay &pureDelay,BYTE tempoValue,BYTE trackNumber); + WORD virtual handleController(PureEvent &pureEvent,PureDelay &pureDelay,PureController &pureController,BYTE trackNumber); + WORD virtual handleScoreEnd(PureDelay &pureDelay); +private: + enum{xTrack=35,yTrack=40,xTempo=98,yTempo=40}; + enum{btnRed=192,btnGreen=192,btnBlue=192}; + enum{CaptionHeight=20,StartOrdinal=5020,EndOrdinal=5194}; + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType drawItemHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType controlColorHandler(CallbackData &someCallbackData); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void createDialogControls(void); + void handleTempoDnEvent(void); + void handleTempoUpEvent(void); + void handleConvertFileEvent(void); + void loadInstruments(void); + void setMessage(String messageString)const; + void yieldTask(void)const; + WORD isComponentWnd(HWND hWnd)const; + + Callback mCommandHandler; + Callback mCreateHandler; + Callback mDrawItemHandler; + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCloseHandler; + Callback mControlColorHandler; + OwnerDraw mOwnerDraw; + LedDisplay *mlpLedTrackDisplay; + LedDisplay *mlpLedTempoDisplay; + LinkedBitmap mLinkedBitmap; + HWND mhButtonUpWnd; + HWND mhButtonDnWnd; + HWND mhButtonCvtWnd; + HWND mhListBoxWnd; + HWND mhStaticWnd; + HWND mhParentWnd; + HBRUSH mhGrayBrush; + String mOutputPathFileName; + HINSTANCE mhInstance; + static char szClassName[]; + static char szMenuName[]; +}; + +inline +void MUSDlg::setMessage(String messageString)const +{ + ::SendMessage(mhStaticWnd,WM_SETTEXT,0,(LPARAM)(LPSTR)messageString); +} +#endif + diff --git a/midiwrt/MUSFILE.CPP b/midiwrt/MUSFILE.CPP new file mode 100644 index 0000000..d035eb8 --- /dev/null +++ b/midiwrt/MUSFILE.CPP @@ -0,0 +1,131 @@ +#include +#include +#include +#include + +MUSFile::MUSFile(String musPathFileName) +: mMusFile(musPathFileName), mlpMUSInstruments(0), mhGlobalMUSInstruments(0), + mIsOkay(FALSE), mPitchBenderValue(0), mTempoValue(0) +{ + String musIDString("MUS"); + + if(!mMusFile.isOkay())return; + if(!readHeader(mMusFile))return; + if(!(musIDString==headerID()))return; + if(!instruments())return; + mhGlobalMUSInstruments=::GlobalAlloc(GMEM_FIXED,instruments()*sizeof(WORD)); + mlpMUSInstruments=(WORD FAR *)::GlobalLock(mhGlobalMUSInstruments); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MUSFile : public MUSHeader +{ +public: + MUSFile(String musPathFileName); + ~MUSFile(); + WORD readMUSFile(void); + WORD isOkay(void)const; +protected: + virtual WORD handleScoreStart(void); + virtual WORD handleReleaseNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &releaseNote,BYTE trackNumber); + virtual WORD handlePlayNote(PureEvent &pureEvent,PureDelay &pureDelay,PureNote &playNote,BYTE trackNumber); + virtual WORD handlePitchBend(PureEvent &pureEvent,PureDelay &pureDelay,BYTE pitchBenderValue,BYTE trackNumber); + virtual WORD handleReset(PureEvent &pureEvent,PureDelay &pureDelay,BYTE tempoValue,BYTE trackNumber); + virtual WORD handleController(PureEvent &pureEvent,PureDelay &pureDelay,PureController &pureController,BYTE trackNumber); + virtual WORD handleScoreEnd(PureDelay &pureDelay); +private: + enum{MaxTracks=15,MaxChannel=16}; + WORD FAR *mlpMUSInstruments; + HGLOBAL mhGlobalMUSInstruments; + WORD mIsOkay; + PureVector mChannelNotes; + PureController mPureController; + BYTE mPitchBenderValue; + BYTE mTempoValue; + FileIO mMusFile; +}; + +inline +WORD MUSFile::isOkay(void)const +{ + return mIsOkay; +} +#endif diff --git a/midiwrt/MUSHDR.CPP b/midiwrt/MUSHDR.CPP new file mode 100644 index 0000000..2045fb0 --- /dev/null +++ b/midiwrt/MUSHDR.CPP @@ -0,0 +1,12 @@ +#include + +String MUSHeader::headerID(void)const +{ + String headerIDString; + + headerIDString.reserve(sizeof(mID)); + ::memset(headerIDString,0,sizeof(mID)); + ::memcpy(headerIDString,mID,sizeof(mID)-1); + return headerIDString; +} + diff --git a/midiwrt/MUSHDR.HPP b/midiwrt/MUSHDR.HPP new file mode 100644 index 0000000..5151b42 --- /dev/null +++ b/midiwrt/MUSHDR.HPP @@ -0,0 +1,72 @@ +#ifndef _MUSHEADER_HPP_ +#define _MUSHEADER_HPP_ +#include +#include +#include +#include + +class MUSHeader +{ +public: + MUSHeader(void); + ~MUSHeader(); + WORD readHeader(FileIO &musFileIO); + String headerID(void)const; + WORD scoreLength(void)const; + WORD scoreStart(void)const; + WORD channels(void)const; + WORD instruments(void)const; +private: + enum {MaxIDLength=4}; + char mID[MaxIDLength]; + WORD mScoreLength; + WORD mScoreStart; + WORD mChannels; + WORD mDummyOne; + WORD mInstruments; + WORD mDummyTwo; +}; + +inline +MUSHeader::MUSHeader(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +MUSHeader::~MUSHeader() +{ +} + +inline +WORD MUSHeader::readHeader(FileIO &musFileIO) +{ + if(!musFileIO.read((char*)this,sizeof(*this)))return FALSE; + return TRUE; +} + + +inline +WORD MUSHeader::scoreLength(void)const +{ + return mScoreLength; +} + +inline +WORD MUSHeader::scoreStart(void)const +{ + return mScoreStart; +} + +inline +WORD MUSHeader::channels(void)const +{ + return mChannels; +} + +inline +WORD MUSHeader::instruments(void)const +{ + return mInstruments; +} +#endif diff --git a/midiwrt/OPENDN.BMP b/midiwrt/OPENDN.BMP new file mode 100644 index 0000000..7a34f79 Binary files /dev/null and b/midiwrt/OPENDN.BMP differ diff --git a/midiwrt/OPENUP.BMP b/midiwrt/OPENUP.BMP new file mode 100644 index 0000000..03b742b Binary files /dev/null and b/midiwrt/OPENUP.BMP differ diff --git a/midiwrt/PURECNTL.HPP b/midiwrt/PURECNTL.HPP new file mode 100644 index 0000000..02cb285 --- /dev/null +++ b/midiwrt/PURECNTL.HPP @@ -0,0 +1,57 @@ +#ifndef _PURECONTROLLER_HPP_ +#define _PURECONTROLLER_HPP_ +#include +#include + +class PureController +{ +public: + PureController(void); + ~PureController(); + WORD readController(FileIO &musFile); + BYTE controllerNumber(void)const; + BYTE controllerValue(void)const; +private: + void operator=(const PureController &somePureController); + BYTE mControllerNumber; + BYTE mControllerValue; +}; + +inline +PureController::PureController(void) +: mControllerNumber(0), mControllerValue(0) +{ +} + +inline +PureController::~PureController() +{ +} + +inline +BYTE PureController::controllerNumber(void)const +{ + return mControllerNumber; +} + +inline +BYTE PureController::controllerValue(void)const +{ + return mControllerValue; +} + +inline +WORD PureController::readController(FileIO &musFile) +{ + if(!musFile.isOkay())return FALSE; + if(!musFile.read(mControllerNumber))return FALSE; + if(!musFile.read(mControllerValue))return FALSE; + return TRUE; +} + +inline +void PureController::operator=(const PureController &/*somePureController*/) +{ + return; +} +#endif diff --git a/midiwrt/PUREDLY.CPP b/midiwrt/PUREDLY.CPP new file mode 100644 index 0000000..2035535 --- /dev/null +++ b/midiwrt/PUREDLY.CPP @@ -0,0 +1,18 @@ +#include + +DWORD PureDelay::readDelay(FileIO &musFile) +{ + BYTE valueByte; + + mCurrentTimeDelay=0L; + while(TRUE) + { + if(!musFile.read(valueByte))return 0L; + mCurrentTimeDelay=(mCurrentTimeDelay*128)+(valueByte&127); + if(!(valueByte&128))break; + } + mDeltaTicks+=mCurrentTimeDelay; + return mCurrentTimeDelay; +} + + diff --git a/midiwrt/PUREDLY.HPP b/midiwrt/PUREDLY.HPP new file mode 100644 index 0000000..05d1624 --- /dev/null +++ b/midiwrt/PUREDLY.HPP @@ -0,0 +1,49 @@ +#ifndef _PUREDELAY_HPP_ +#define _PUREDELAY_HPP_ +#include +#include + +class PureDelay +{ +public: + PureDelay(void); + ~PureDelay(); + DWORD readDelay(FileIO &musFile); + DWORD currentTimeDelay(void)const; + DWORD deltaTicks(void)const; + void resetDelay(void); +private: + DWORD mCurrentTimeDelay; + DWORD mDeltaTicks; +}; + +inline +PureDelay::PureDelay(void) +: mCurrentTimeDelay(0L), mDeltaTicks(0L) +{ +} + +inline +PureDelay::~PureDelay() +{ +} + +inline +DWORD PureDelay::currentTimeDelay(void)const +{ + return mCurrentTimeDelay; +} + +inline +DWORD PureDelay::deltaTicks(void)const +{ + return mDeltaTicks; +} + +inline +void PureDelay::resetDelay(void) +{ + mCurrentTimeDelay=0; + mDeltaTicks=0; +} +#endif diff --git a/midiwrt/PUREEVNT.HPP b/midiwrt/PUREEVNT.HPP new file mode 100644 index 0000000..945587b --- /dev/null +++ b/midiwrt/PUREEVNT.HPP @@ -0,0 +1,72 @@ +#ifndef _PUREVENT_HPP_ +#define _PUREVENT_HPP_ +#include + +class PureEvent +{ +public: + enum EventType{ReleaseNote=0x00,PlayNote=0x01,PitchWheel=0x02,Tempo=0x03, + ChangeController=0x04,UnknownOne=0x05,ScoreEnd=0x06,UnknownTwo=0x07}; + PureEvent(void); + PureEvent(BYTE eventByte); + ~PureEvent(); + void setEvent(BYTE eventByte); + EventType eventType(void)const; + BYTE hasTimeInfo(void)const; + WORD channel(void)const; + void channel(WORD channel); +private: + EventType mEventType; + BYTE mHasTimeInfo; + WORD mChannel; +}; + +inline +PureEvent::PureEvent(void) +{ + setEvent(0); +} + +inline +PureEvent::PureEvent(BYTE eventByte) +{ + setEvent(eventByte); +} + +inline +PureEvent::~PureEvent() +{ +} + +inline +void PureEvent::setEvent(BYTE eventByte) +{ + mHasTimeInfo=(eventByte>>7); + mEventType=(EventType)((eventByte>>4)&0x07); + mChannel=eventByte&0x0F; +} + +inline +PureEvent::EventType PureEvent::eventType(void)const +{ + return mEventType; +} + +inline +BYTE PureEvent::hasTimeInfo(void)const +{ + return mHasTimeInfo; +} + +inline +WORD PureEvent::channel(void)const +{ + return mChannel; +} + +inline +void PureEvent::channel(WORD channel) +{ + mChannel=channel; +} +#endif diff --git a/midiwrt/PUREINST.HPP b/midiwrt/PUREINST.HPP new file mode 100644 index 0000000..1d5defd --- /dev/null +++ b/midiwrt/PUREINST.HPP @@ -0,0 +1,104 @@ +#ifndef _PUREINSTRUMENT_HPP_ +#define _PUREINSTRUMENT_HPP_ +#include +#include + +class PureInstrument +{ +public: + PureInstrument(void); + PureInstrument(const PureInstrument &somePureInstrument); + PureInstrument(WORD ordinal,String category,String name); + ~PureInstrument(); + WORD operator==(const PureInstrument &somePureInstrument)const; + PureInstrument &operator=(const PureInstrument &somePureInstrument); + WORD ordinal(void)const; + String category(void)const; + String name(void)const; + void ordinal(WORD ordinal); + void category(String category); + void name(String name); +private: + enum {Semicolon=';'}; + WORD mOrdinal; + String mCategory; + String mName; +}; + +inline +PureInstrument::PureInstrument(void) +: mOrdinal(0) +{ +} + +inline +PureInstrument::PureInstrument(const PureInstrument &somePureInstrument) +: mOrdinal(somePureInstrument.mOrdinal), mCategory(somePureInstrument.mCategory), + mName(somePureInstrument.mName) +{ +} + +inline +PureInstrument::PureInstrument(WORD ordinal,String category,String name) +: mOrdinal(ordinal), mCategory(category), mName(name) +{ +} + +inline +PureInstrument::~PureInstrument() +{ +} + +inline +WORD PureInstrument::ordinal(void)const +{ + return mOrdinal; +} + +inline +String PureInstrument::category(void)const +{ + return mCategory; +} + +inline +String PureInstrument::name(void)const +{ + return mName; +} + +inline +void PureInstrument::ordinal(WORD ordinal) +{ + mOrdinal=ordinal; +} + +inline +void PureInstrument::category(String category) +{ + mCategory=category; +} + +inline +void PureInstrument::name(String name) +{ + mName=name; +} + +inline +WORD PureInstrument::operator==(const PureInstrument &somePureInstrument)const +{ + return (mOrdinal==somePureInstrument.mOrdinal&& + mCategory==somePureInstrument.mCategory&& + mName==somePureInstrument.mName); +} + +inline +PureInstrument &PureInstrument::operator=(const PureInstrument &somePureInstrument) +{ + mOrdinal=somePureInstrument.mOrdinal; + mCategory=somePureInstrument.mCategory; + mName=somePureInstrument.mName; + return *this; +} +#endif diff --git a/midiwrt/PURENOTE.CPP b/midiwrt/PURENOTE.CPP new file mode 100644 index 0000000..a43f872 --- /dev/null +++ b/midiwrt/PURENOTE.CPP @@ -0,0 +1,14 @@ +#include + +WORD PureNote::readNote(FileIO &musFile) +{ + BYTE byteValue; + + if(!musFile.read(byteValue))return FALSE; + mNoteNumber=(byteValue&0x7F); + if(!(mHasVolume=(byteValue&0x80)))return TRUE;; + if(!musFile.read(byteValue))return FALSE; + mNoteVolume=(byteValue&0x7F); + return TRUE; +} + diff --git a/midiwrt/PURENOTE.HPP b/midiwrt/PURENOTE.HPP new file mode 100644 index 0000000..4b76561 --- /dev/null +++ b/midiwrt/PURENOTE.HPP @@ -0,0 +1,77 @@ +#ifndef _PURENOTE_HPP_ +#define _PURENOTE_HPP_ +#include +#include + +class PureNote +{ +public: + enum{DataLength=2}; + PureNote(void); + PureNote(const PureNote &somePureNote); + ~PureNote(); + PureNote &operator=(const PureNote &somePureNote); + WORD operator==(const PureNote &somePureNote); + WORD readNote(FileIO &musFile); + BYTE noteNumber(void)const; + BYTE noteVolume(void)const; + BYTE hasVolume(void)const; +private: + BYTE mNoteNumber; + BYTE mNoteVolume; + BYTE mHasVolume; +}; + +inline +PureNote::PureNote(const PureNote &somePureNote) +: mNoteNumber(somePureNote.mNoteNumber), mNoteVolume(somePureNote.mNoteVolume), + mHasVolume(somePureNote.mHasVolume) +{ +} + +inline +PureNote &PureNote::operator=(const PureNote &somePureNote) +{ + mNoteNumber=somePureNote.mNoteNumber; + mNoteVolume=somePureNote.mNoteVolume; + mHasVolume=somePureNote.mHasVolume; + return *this; +} + +inline +PureNote::PureNote(void) +: mNoteNumber(0), mNoteVolume(0), mHasVolume(0) +{ +} + +inline +PureNote::~PureNote() +{ +} + +inline +BYTE PureNote::noteNumber(void)const +{ + return mNoteNumber; +} + +inline +BYTE PureNote::noteVolume(void)const +{ + return mNoteVolume; +} + +inline +BYTE PureNote::hasVolume(void)const +{ + return mHasVolume; +} + +inline +WORD PureNote::operator==(const PureNote &somePureNote) +{ + return (mNoteNumber==somePureNote.mNoteNumber&& + mNoteVolume==somePureNote.mNoteVolume&& + mHasVolume==somePureNote.mHasVolume); +} +#endif diff --git a/midiwrt/SELDN.BMP b/midiwrt/SELDN.BMP new file mode 100644 index 0000000..49a79db Binary files /dev/null and b/midiwrt/SELDN.BMP differ diff --git a/midiwrt/SELUP.BMP b/midiwrt/SELUP.BMP new file mode 100644 index 0000000..30166f6 Binary files /dev/null and b/midiwrt/SELUP.BMP differ diff --git a/midiwrt/STDTMPL.CPP b/midiwrt/STDTMPL.CPP new file mode 100644 index 0000000..226c3bf --- /dev/null +++ b/midiwrt/STDTMPL.CPP @@ -0,0 +1,20 @@ +#define _EXPAND_BLOCK_TEMPLATES_ +#define _EXPAND_VECTOR_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Callback a; +typedef Block b; +typedef Block c; +typedef Block d; +typedef PureVector e; +typedef PureVector f; + diff --git a/midiwrt/TDW.TRW b/midiwrt/TDW.TRW new file mode 100644 index 0000000..70b7226 Binary files /dev/null and b/midiwrt/TDW.TRW differ diff --git a/midiwrt/UPARDN.BMP b/midiwrt/UPARDN.BMP new file mode 100644 index 0000000..7532b4c Binary files /dev/null and b/midiwrt/UPARDN.BMP differ diff --git a/midiwrt/UPARUP.BMP b/midiwrt/UPARUP.BMP new file mode 100644 index 0000000..34869a7 Binary files /dev/null and b/midiwrt/UPARUP.BMP differ diff --git a/midiwrt/WND.BMP b/midiwrt/WND.BMP new file mode 100644 index 0000000..3d8f243 Binary files /dev/null and b/midiwrt/WND.BMP differ diff --git a/mixer/ChannelCtrlMgr.cpp b/mixer/ChannelCtrlMgr.cpp new file mode 100644 index 0000000..e13b163 --- /dev/null +++ b/mixer/ChannelCtrlMgr.cpp @@ -0,0 +1,103 @@ +#include +#include + +char ChannelControlManager::szClassName[]="ChannelControlManager"; + +ChannelControlManager::ChannelControlManager(GUIWindow &parentWindow,const Rect &creationRect,UINT controlID) +{ + + mPaintHandler.setCallback(this,&ChannelControlManager::paintHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + registerClass(); + createWindow(parentWindow,creationRect,controlID); + mListBox=new OwnerDrawListControl(*this,Rect(0,0,parentWindow.width()-4,parentWindow.height()-4),110); + mListBox->show(SW_SHOW); + mListBox->insertString(" "); +} + +ChannelControlManager::~ChannelControlManager() +{ + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); +} + +void ChannelControlManager::registerClass() +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(ChannelControlManager*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +void ChannelControlManager::createWindow(GUIWindow &parentWindow,const Rect &creationRect,UINT controlID) +{ + ::CreateWindow(szClassName,szClassName,WS_CHILDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,creationRect.left(),creationRect.top(),creationRect.width(),creationRect.height(),parentWindow,NULL,processInstance(),(LPSTR)this); +} + +CallbackData::ReturnType ChannelControlManager::paintHandler(CallbackData &someCallbackData) +{ +// Rect winRect; +// if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE; +// windowRect(winRect); +// mDIBitmapBkGnd->copyBits(mBitmapBkGnd->ptrData(),mBitmapBkGnd->imageExtent()); +// mDIBitmapBkGnd->usePalette(*mPureDevice,TRUE); +// mDIBitmapBkGnd->stretchBlt(*mPureDevice,Rect(0,0,(winRect.right()-winRect.left())+mxBorder,height()-mStatusBar->statusBarHeight())); +// mDIBitmapBkGnd->stretchBlt(*mPureDevice,Rect(0,0,(winRect.right()-winRect.left())+mxBorder,height())); +// mDIBitmapBkGnd->usePalette(*mPureDevice,FALSE); + return (CallbackData::ReturnType)FALSE; +} + +// ******************************************************************************************************************* + +#include +#include +#include +#include + +OwnerDrawListControl::OwnerDrawListControl(GUIWindow &parentWnd,const Rect &initRect,UINT controlID,DWORD style) +: OwnerDrawList(parentWnd,initRect,controlID,style) +{ + mButtonUp=new ResBitmap("BUTTONUP"); + mButtonUp.disposition(PointerDisposition::Delete); + mButtonDown=new ResBitmap("BUTTONDN"); + mButtonDown.disposition(PointerDisposition::Delete); + mSelectOff=new ResBitmap("SELOFF"); + mSelectOff.disposition(PointerDisposition::Delete); + mSelectOn=new ResBitmap("SELON"); + mSelectOn.disposition(PointerDisposition::Delete); + mMaxHeight=mSelectOff->height(); +} + +OwnerDrawListControl::~OwnerDrawListControl() +{ +} + + +void OwnerDrawListControl::drawEntire(const DrawItem &drawItem) +{ + int xLoc=0; + PureDevice pureDevice(drawItem.deviceContext()); + Rect rectItem(drawItem.rectItem()); + DIBitmap bitmap(pureDevice,rectItem.width(),mMaxHeight,*mSelectOff); +/* bitmap.overlay(*mButtonUp,Point(xLoc,0)); + xLoc+=mButtonUp->width()+1; */ + bitmap.overlay(*mSelectOff,Point(xLoc,0)); + xLoc+=mSelectOff->width()+1; +/* bitmap.overlay(*mSelectOff,Point(xLoc,0)); + xLoc+=mSelectOff->width()+1; + bitmap.overlay(*mSelectOff,Point(xLoc,0)); + xLoc+=mSelectOff->width()+1; + bitmap.overlay(*mSelectOff,Point(xLoc,0)); + xLoc+=mSelectOff->width()+1; */ + bitmap.stretchBlt(pureDevice,rectItem); +} diff --git a/mixer/ChannelCtrlMgr.hpp b/mixer/ChannelCtrlMgr.hpp new file mode 100644 index 0000000..a1adfed --- /dev/null +++ b/mixer/ChannelCtrlMgr.hpp @@ -0,0 +1,44 @@ +#ifndef _MIXER_CHANNELCTRLMGR_HPP_ +#define _MIXER_CHANNELCTRLMGR_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLIST_HPP_ +#include +#endif + +class ResBitmap; + +class OwnerDrawListControl : public OwnerDrawList +{ +public: + OwnerDrawListControl(GUIWindow &parentWnd,const Rect &initRect,UINT controlID,DWORD style=LBS_NOTIFY|LBS_HASSTRINGS|LBS_USETABSTOPS|LBS_OWNERDRAWFIXED|WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME); + virtual ~OwnerDrawListControl(); +protected: + virtual void drawEntire(const DrawItem &drawItem); +private: + SmartPointer mButtonUp; + SmartPointer mButtonDown; + SmartPointer mSelectOn; + SmartPointer mSelectOff; + int mMaxHeight; +}; + +class ChannelControlManager : public Window +{ +public: + ChannelControlManager(GUIWindow &parentWindow,const Rect &creationRect,UINT controlID); + virtual ~ChannelControlManager(); +private: + void createWindow(GUIWindow &parentWindow,const Rect &creationRect,UINT controlID); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + void registerClass(); + + static char szClassName[]; + Callback mPaintHandler; + SmartPointer mListBox; +}; +#endif diff --git a/mixer/Debug/mixer.exe b/mixer/Debug/mixer.exe new file mode 100644 index 0000000..cce98ec Binary files /dev/null and b/mixer/Debug/mixer.exe differ diff --git a/mixer/Debug/mixer.exp b/mixer/Debug/mixer.exp new file mode 100644 index 0000000..da520f1 Binary files /dev/null and b/mixer/Debug/mixer.exp differ diff --git a/mixer/Debug/mixer.ilk b/mixer/Debug/mixer.ilk new file mode 100644 index 0000000..97564c2 Binary files /dev/null and b/mixer/Debug/mixer.ilk differ diff --git a/mixer/Debug/mixer.lib b/mixer/Debug/mixer.lib new file mode 100644 index 0000000..aac8059 Binary files /dev/null and b/mixer/Debug/mixer.lib differ diff --git a/mixer/Debug/mixer.pdb b/mixer/Debug/mixer.pdb new file mode 100644 index 0000000..ede4e79 Binary files /dev/null and b/mixer/Debug/mixer.pdb differ diff --git a/mixer/Debug/mixer.res b/mixer/Debug/mixer.res new file mode 100644 index 0000000..195d789 Binary files /dev/null and b/mixer/Debug/mixer.res differ diff --git a/mixer/Debug/vc60.idb b/mixer/Debug/vc60.idb new file mode 100644 index 0000000..a464167 Binary files /dev/null and b/mixer/Debug/vc60.idb differ diff --git a/mixer/Debug/vc60.pdb b/mixer/Debug/vc60.pdb new file mode 100644 index 0000000..cdc5145 Binary files /dev/null and b/mixer/Debug/vc60.pdb differ diff --git a/mixer/Graphic.cpp b/mixer/Graphic.cpp new file mode 100644 index 0000000..5448ffd --- /dev/null +++ b/mixer/Graphic.cpp @@ -0,0 +1,134 @@ +#include +#include +#include + +char Graphic::szClassName[]="Graphic"; + +Graphic::Graphic(GUIWindow &parentWnd,const String &strBitmapName,UINT controlID,UINT extraStyles,const Rect &initRect,const Font &bannerFont) +: mBannerFont(bannerFont), mParentWnd(parentWnd), mxIndent(Indent), + myBorder(::GetSystemMetrics(SM_CYDLGFRAME)<<1), mInitRect(initRect) +{ + mRibbonBitmap=new ResBitmap(strBitmapName); + mRibbonBitmap.disposition(PointerDisposition::Delete); + mPaintHandler.setCallback(this,&Graphic::paintHandler); + mCreateHandler.setCallback(this,&Graphic::createHandler); + mDestroyHandler.setCallback(this,&Graphic::destroyHandler); + mSizeHandler.setCallback(this,&Graphic::sizeHandler); + mEraseBackgroundHandler.setCallback(this,&Graphic::eraseBackgroundHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); + mParentWnd.insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + registerClass(); + createWindow(parentWnd,controlID,extraStyles); +} + +Graphic::~Graphic() +{ + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); + mParentWnd.removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +Graphic &Graphic::operator=(const Graphic &/*someGraphic*/) +{ // private implementation + return *this; +} + +void Graphic::registerClass(void) +{ + HINSTANCE hProcessInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hProcessInstance,szClassName,(WNDCLASS FAR *)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(Graphic*); + wndClass.hInstance =hProcessInstance; + wndClass.hIcon =0; + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +void Graphic::createWindow(GUIWindow &parentWindow,UINT controlID,UINT extraStyles) +{ + if(!mInitRect.right())mInitRect.right(mRibbonBitmap->width()); + if(!mInitRect.bottom())mInitRect.bottom(mRibbonBitmap->height()); + ::CreateWindowEx(0,(LPSTR)szClassName,(LPSTR)0, + WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|extraStyles,mInitRect.left(),mInitRect.top(),mInitRect.right(),mInitRect.bottom(), + + + parentWindow,(HMENU)controlID,processInstance(),(LPSTR)(Window*)this); +} + +CallbackData::ReturnType Graphic::createHandler(CallbackData &someCallbackData) +{ + if(!mRibbonBitmap->isOkay())return (CallbackData::ReturnType)FALSE; + myIndent=mBannerFont.charHeight()/4; + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIBitmap(*mPureDevice,*mRibbonBitmap,*mRibbonBitmap); + mDIBitmap.disposition(PointerDisposition::Delete); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType Graphic::destroyHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType Graphic::eraseBackgroundHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType Graphic::sizeHandler(CallbackData &someCallbackData) +{ + if(!mInitRect.right())width(mParentWnd.width()); + myIndent=mBannerFont.charHeight()/4; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType Graphic::paintHandler(CallbackData &someCallbackData) +{ + if(!mRibbonBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + mDIBitmap->copyBits(mRibbonBitmap->ptrData(),mRibbonBitmap->imageExtent()); + mDIBitmap->usePalette(*mPureDevice,TRUE); + mDIBitmap->stretchBlt(*mPureDevice,Rect(0,0,width(),height())); + mDIBitmap->usePalette(*mPureDevice,FALSE); + mPureDevice->select((GDIObj)mBannerFont,TRUE); + mPureDevice->setTextColor(RGBColor(255,255,255)); + mPureDevice->setBkMode(PureDevice::Transparent); + mPureDevice->textOut(indent(),myIndent,mCaptionString); + mPureDevice->select((GDIObj)mBannerFont,FALSE); + postPaint(*mPureDevice); + return (CallbackData::ReturnType)FALSE; +} + +BOOL Graphic::setCaption(const String &captionString) +{ + mCaptionString=captionString; + invalidate(FALSE); + return TRUE; +} + +const String &Graphic::getCaption(void)const +{ + return mCaptionString; +} + +// ************************************************************************************************** +// virtuals + +void Graphic::postPaint(PureDevice &pureDevice) +{ +} + diff --git a/mixer/Graphic.hpp b/mixer/Graphic.hpp new file mode 100644 index 0000000..7f27e62 --- /dev/null +++ b/mixer/Graphic.hpp @@ -0,0 +1,85 @@ +#ifndef _MIXER_GRAPHIC_HPP_ +#define _MIXER_GRAPHIC_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif + +class ResBitmap; +class DIBitmap; +class PureDevice; + +class Graphic : public Window +{ +public: + Graphic(GUIWindow &parentWnd,const String &strBitmapName,UINT controlID,UINT extraStyles=0,const Rect &initRect=Rect(1,1,0,0),const Font &bannerFont=Font("Times New Roman",20,Font::PitchVariable|Font::FamilySwiss,Font::WeightNormal)); + virtual ~Graphic(); + BOOL setCaption(const String &captionString); + const String &getCaption(void)const; + WORD indent(void)const; + void indent(WORD indent); + const Rect &initRect(void)const; + GUIWindow &getParent(void); +protected: + virtual void postPaint(PureDevice &pureDevice); +private: + enum {Indent=15}; + Graphic &operator=(const Graphic &someGraphic); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType eraseBackgroundHandler(CallbackData &someCallbackData); + void registerClass(void); + void createWindow(GUIWindow &parentWindow,UINT controlID,UINT extraStyles); + + static char szClassName[]; + Callback mCreateHandler; + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mSizeHandler; + Callback mEraseBackgroundHandler; + SmartPointer mRibbonBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + GUIWindow &mParentWnd; + String mCaptionString; + Font mBannerFont; + Rect mInitRect; + WORD mxIndent; + WORD myIndent; + WORD myBorder; +}; + +inline +WORD Graphic::indent(void)const +{ + return mxIndent; +} + +inline +void Graphic::indent(WORD indent) +{ + mxIndent=indent; +} + +inline +GUIWindow &Graphic::getParent(void) +{ + return mParentWnd; +} + +inline +const Rect &Graphic::initRect(void)const +{ + return mInitRect; +} +#endif \ No newline at end of file diff --git a/mixer/Main.cpp b/mixer/Main.cpp new file mode 100644 index 0000000..c928952 --- /dev/null +++ b/mixer/Main.cpp @@ -0,0 +1,274 @@ +#include +#include + +#include + + + +/* +//#include +//#include +//#include + +typedef struct _SAMPLE_DATA +{ + union + { + int b4:4; + int b8:8; + int b16:16; + int b32:32; + }; +}SAMPLE_DATA; + +typedef SAMPLE_DATA SampleData; + +class PureSampleEx +{ +public: + typedef enum BitsPerSample{Bit4=4,Bit8=8,Bit16=16,Bit32=32}; + enum{BitsPerByte=8}; + PureSampleEx(); + virtual ~PureSampleEx(); + PureSampleEx &operator=(const PureSampleEx &pureSampleEx); + bool operator==(const PureSampleEx &pureSampleEx); + bool convert(BitsPerSample bitsPerSample); + bool convert(PureSampleEx &pureSampleEx,BitsPerSample bitsPerSample); + bool initialize(BitsPerSample bitsPerSample,int numSamples); + bool getAt(int sampleIndex,SampleData &sampleData); + bool setAt(int sampleIndex,SampleData &sampleData); + bool isOkay(void)const; + DWORD getSizeBytes(void)const; + DWORD getNumSamples(void)const; +private: + static int getRequiredLength(BitsPerSample bitsPerSample,int numSamples); + static void translate(SampleData &srcData,BitsPerSample srcBitsPerSample,SampleData &dstData,BitsPerSample &dstBitsPerSample); + + Array mSampleData; + BitsPerSample mBitsPerSample; + DWORD mNumSamples; +}; + +inline +PureSampleEx::PureSampleEx() +: mBitsPerSample(Bit8), mNumSamples(0) +{ +} + +inline +PureSampleEx::~PureSampleEx() +{ +} + +inline +bool PureSampleEx::initialize(BitsPerSample bitsPerSample,int numSamples) +{ + mBitsPerSample=bitsPerSample; + mNumSamples=numSamples; + mSampleData.size(getRequiredLength(bitsPerSample,numSamples)); + return true; +} + +inline +int PureSampleEx::getRequiredLength(BitsPerSample bitsPerSample,int numSamples) +{ + return ((float)bitsPerSample/(float)BitsPerByte)*numSamples; +} + +inline +PureSampleEx &PureSampleEx::operator=(const PureSampleEx &pureSampleEx) +{ + mSampleData=pureSampleEx.mSampleData; + mBitsPerSample=pureSampleEx.mBitsPerSample; + mNumSamples=pureSampleEx.mNumSamples; + return *this; +} + +inline +bool PureSampleEx::operator==(const PureSampleEx &pureSampleEx) +{ + if(mBitsPerSample!=pureSampleEx.mBitsPerSample || mNumSamples!=pureSampleEx.mNumSamples)return false; + return mSampleData==pureSampleEx.mSampleData; +} + +bool PureSampleEx::convert(BitsPerSample bitsPerSample) +{ + PureSampleEx pureSampleEx; + + convert(pureSampleEx,bitsPerSample); + *this=pureSampleEx; + return true; +} + +bool PureSampleEx::convert(PureSampleEx &pureSampleEx,BitsPerSample bitsPerSample) +{ + SampleData srcData; + SampleData dstData; + + if(!isOkay())return false; + pureSampleEx.initialize(bitsPerSample,getNumSamples()); + for(int index=0;index=mNumSamples)return false; + index=((float)mBitsPerSample/(float)BitsPerByte)*(float)sampleIndex; + byteIndex=index; + if(Bit4==mBitsPerSample) + { + BYTE b=mSampleData[byteIndex]; + if(0.00==(float)byteIndex-index)sampleData.b4=b; + else sampleData.b4=(b>>4); + } + else if(Bit8==mBitsPerSample) + { + sampleData.b8=mSampleData[byteIndex]; + } + else if(Bit16==mBitsPerSample) + { + sampleData.b16=*((WORD*)&mSampleData[byteIndex]); + } + else if(Bit32==mBitsPerSample) + { + sampleData.b32=*((DWORD*)&mSampleData[byteIndex]); + } + return true; +} + +inline +bool PureSampleEx::setAt(int sampleIndex,SampleData &sampleData) +{ + float index; + int byteIndex; + + if(sampleIndex>=mNumSamples)return false; + index=((float)mBitsPerSample/(float)BitsPerByte)*(float)sampleIndex; + byteIndex=index; + if(Bit4==mBitsPerSample) + { + BYTE b=mSampleData[byteIndex]; + if(0.00==(float)byteIndex-index)mSampleData[byteIndex]=(b&0xF0)|sampleData.b4; + else mSampleData[byteIndex]=(b&0x0F)|(((BYTE)sampleData.b4)<<4); + } + else if(Bit8==mBitsPerSample) + { + mSampleData[byteIndex]=sampleData.b8; + } + else if(Bit16==mBitsPerSample) + { + *((WORD*)&mSampleData[byteIndex])=sampleData.b16; + } + else if(Bit32==mBitsPerSample) + { + *((DWORD*)&mSampleData[byteIndex])=sampleData.b32; + } + return true; +} + +inline +DWORD PureSampleEx::getSizeBytes(void)const +{ + return getRequiredLength(mBitsPerSample,getNumSamples()); +} + +inline +DWORD PureSampleEx::getNumSamples(void)const +{ + return mNumSamples; +} + +inline +bool PureSampleEx::isOkay(void)const +{ + return mNumSamples?true:false; +} +*/ + +// ************************************************************************************************* + + +/* + PureSampleEx bm; + PureSampleEx bm2; + PureSampleEx bm3; + SampleData sampleData; + + bm.initialize(PureSampleEx::Bit4,1000000); + for(int index=0;index sample; + + if(!wave.open("D:\\Program Files\\FruityLoops3\\Samples\\Packs\\Basic\\Kicks\\Kick.wav"))return 0; + FormatChunk &formatChunk=wave.getFormatChunk(); + PureSample &pureSample=wave.getPureSample(); + + if(16==formatChunk.bitsPerSample()) + { + UHUGE *sampleData=pureSample.sampleData(); + } + else if(8==formatChunk.bitsPerSample()) + { + UHUGE *sampleData=pureSample.sampleData(); + } +*/ + + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MainWindow mainWindow; + return mainWindow.messageLoop(); +} \ No newline at end of file diff --git a/mixer/Mainwnd.cpp b/mixer/Mainwnd.cpp new file mode 100644 index 0000000..bf45f51 --- /dev/null +++ b/mixer/Mainwnd.cpp @@ -0,0 +1,185 @@ +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +char MainWindow::szClassName[]="Mixer [v1.00]"; +char MainWindow::szMenuName[]="Mixer"; + +MainWindow::MainWindow(void) +: mxBorder(0) +{ + mPaintHandler.setCallback(this,&MainWindow::paintHandler); + mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); + mCommandHandler.setCallback(this,&MainWindow::commandHandler); + mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler); + mSizeHandler.setCallback(this,&MainWindow::sizeHandler); + mCreateHandler.setCallback(this,&MainWindow::createHandler); + mUserHandler.setCallback(this,&MainWindow::userHandler); + mEraseBackgroundHandler.setCallback(this,&MainWindow::eraseBackgroundHandler); + insertHandlers(); + registerClass(); +// ::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this); + ::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_CLIPCHILDREN|WS_MINIMIZEBOX|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this); + mStatusBar=new StatusBar(*this); + mStatusBar.disposition(PointerDisposition::Delete); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); + insertHandler(VectorHandler::UserHandler,&mUserHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); + removeHandler(VectorHandler::UserHandler,&mUserHandler); +} + +void MainWindow::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(processInstance(),"MIXER"); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::eraseBackgroundHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case MIXERMENU_FILE_OPEN : + handleFileOpen(); + break; + case MIXERMENU_FILE_EXIT : + sendMessage(WM_CLOSE,0,0L); + break; + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + Block stopArray; + + mxBorder=::GetSystemMetrics(SM_CXDLGFRAME)<<1; + mBitmapBkGnd=new ResBitmap("BACKGROUND"); + mBitmapBkGnd.disposition(PointerDisposition::Delete); + if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE; + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmapBkGnd=new DIBitmap(*mPureDevice,*mBitmapBkGnd,*mBitmapBkGnd); + mDIBitmapBkGnd.disposition(PointerDisposition::Delete); + + mMixerScope=new MixerScope(*this,Scope1ID,0,Rect(xBorder,Scope1y,300,130),Font("Times New Roman",10,Font::PitchVariable|Font::FamilySwiss,Font::WeightNormal)); + mMixerScope.disposition(PointerDisposition::Delete); + mMixerScope->show(SW_SHOW); + mMixerScope->update(); + mMixerScope->bringWindowToTop(); + + mChannelControlManager=new ChannelControlManager(*this,Rect(xBorder,140,625,400),110); + mChannelControlManager.disposition(PointerDisposition::Delete); + mChannelControlManager->show(SW_SHOW); + mChannelControlManager->update(); + + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) +{ + Rect winRect; + if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE; + windowRect(winRect); + mDIBitmapBkGnd->copyBits(mBitmapBkGnd->ptrData(),mBitmapBkGnd->imageExtent()); + mDIBitmapBkGnd->usePalette(*mPureDevice,TRUE); + mDIBitmapBkGnd->stretchBlt(*mPureDevice,Rect(0,0,(winRect.right()-winRect.left())+mxBorder,height()-mStatusBar->statusBarHeight())); + mDIBitmapBkGnd->usePalette(*mPureDevice,FALSE); + + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::userHandler(CallbackData &someCallbackData) +{ +/* switch(someCallbackData.wParam()) + { + case WM_USER +1 : + modifyPayment(); + break; + } */ + return (CallbackData::ReturnType)FALSE; +} + +void MainWindow::handleFileOpen() +{ + OpenDialog openDialog; + String strPathFileName; + + if(!openDialog.getOpenFileName(*this,"*.wav","Open File","*.wav",strPathFileName))return; + mMixerScope->setData(WaveForm(strPathFileName)); +} + + diff --git a/mixer/Mainwnd.hpp b/mixer/Mainwnd.hpp new file mode 100644 index 0000000..8b3d5ac --- /dev/null +++ b/mixer/Mainwnd.hpp @@ -0,0 +1,75 @@ +#ifndef _MIXER_MAINWINDOW_HPP_ +#define _MIXER_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _STATBAR_STATBAR_HPP_ +#include +#endif + +class ResBitmap; +class DIBitmap; +class MixerScope; +class ChannelControlManager; + +class MainWindow : public Window +{ +public: + MainWindow(void); + virtual ~MainWindow(); + static String className(void); +private: + enum{InitialWidth=640,InitialHeight=480}; + enum{xBorder=5,Scope1y=5}; + enum{Scope1ID=101}; + + void insertHandlers(void); + void removeHandlers(void); + void registerClass(void); + void handleFileOpen(void); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType eraseBackgroundHandler(CallbackData &someCallbackData); + CallbackData::ReturnType userHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mEraseBackgroundHandler; + Callback mUserHandler; + SmartPointer mBitmapBkGnd; + SmartPointer mDIBitmapBkGnd; + SmartPointer mPureDevice; + + SmartPointer mMixerScope; + SmartPointer mChannelControlManager; + + SmartPointer mStatusBar; + WORD mxBorder; + static char szClassName[]; + static char szMenuName[]; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif diff --git a/mixer/MixerScope.cpp b/mixer/MixerScope.cpp new file mode 100644 index 0000000..ad195f0 --- /dev/null +++ b/mixer/MixerScope.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +MixerScope::MixerScope(GUIWindow &parentWnd,UINT controlID,UINT extraStyles,const Rect &initRect,const Font &bannerFont) +: Graphic(parentWnd,"SCOPE",controlID,extraStyles,initRect,bannerFont) +{ +} + +MixerScope::~MixerScope() +{ +} + +bool MixerScope::setData(WaveForm &waveForm) +{ + mWaveForm=waveForm; + FormatChunk &formatChunk=mWaveForm.getFormatChunk(); + String strCaption=String("Ch:")+String().fromInt(formatChunk.channels())+String(" Bps:")+String().fromInt(formatChunk.bitsPerSample())+String(" Sps:")+String().fromInt(formatChunk.samplesPerSecond()); + setCaption(strCaption); + invalidate(true); + return true; +} + +// ************************************************************************************************** +// virtuals + +void MixerScope::postPaint(PureDevice &pureDevice) +{ + int penWidth=2; + PureSampleEx &pureSampleEx=mWaveForm.getPureSample(); + Pen pen(RGBColor(0,128,0)); + Pen outlinePen(RGBColor(255,255,255),Pen::PSolid,penWidth); + int max=0; + float factor; + int x=0; + + SampleData sample; + for(int index=0;indexmax)max=sample.b16; + } + factor=(float)height()/(float)max; + for(index=0;index +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif + +class MixerScope : public Graphic +{ +public: + MixerScope(GUIWindow &parentWnd,UINT controlID,UINT extraStyles=0,const Rect &initRect=Rect(1,1,0,0),const Font &bannerFont=Font("Times New Roman",20,Font::PitchVariable|Font::FamilySwiss,Font::WeightNormal)); + virtual ~MixerScope(); + bool setData(WaveForm &waveForm); +protected: + virtual void postPaint(PureDevice &pureDevice); +private: + WaveForm mWaveForm; +}; +#endif diff --git a/mixer/SSPRView.bmp b/mixer/SSPRView.bmp new file mode 100644 index 0000000..c16d346 Binary files /dev/null and b/mixer/SSPRView.bmp differ diff --git a/mixer/SampleData.hpp b/mixer/SampleData.hpp new file mode 100644 index 0000000..f0c2545 --- /dev/null +++ b/mixer/SampleData.hpp @@ -0,0 +1,50 @@ +#ifndef _MIXER_SAMPLEDATA_HPP_ +#define _MIXER_SAMPLEDATA_HPP_ +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class SampleData : protected Array +{ +public: + friend class SampleDataByte; + friend class SampleDataWord; + typedef enum BitsPerSample{Bit16=16,Bit8=8}; + BitsPerSample getBitsPerSample(void)const; + void setNumSamples(int numSamples); + int getNumSamples(void)const; + virtual ~SampleData(); +private: + SampleData(BitsPerSample bitsPerSample=Bit16); + BitsPerSample mBitsPerSample; +}; + +inline +SampleData::SampleData(BitsPerSample bitsPerSample) +: mBitsPerSample(bitsPerSample) +{ +} + +inline +SampleData::~SampleData() +{ +} + +inline +SampleData::BitsPerSample SampleData::getBitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +void SampleData::setNumSamples(int numSamples) +{ + size(numSamples*(mBitsPerSample>>3)); +} + +inline +int SampleData::getNumSamples(void)const +{ + return size()/(mBitsPerSample>>3); +} +#endif diff --git a/mixer/SampleDataImpl.hpp b/mixer/SampleDataImpl.hpp new file mode 100644 index 0000000..01d4ab8 --- /dev/null +++ b/mixer/SampleDataImpl.hpp @@ -0,0 +1,78 @@ +#ifndef _MIXER_SAMPLEDATAIMPL_HPP_ +#define _MIXER_SAMPLEDATAIMPL_HPP_ +#ifndef _MIXER_SAMPLEDATA_HPP_ +#include +#endif +#ifndef _MIXER_SAMPLEDATAINTERFACE_HPP_ +#include +#endif + +class SampleDataByte : public SampleDataInterface, public SampleData +{ +public: + SampleDataByte(); + virtual ~SampleDataByte(); + virtual void setAt(DWORD index,BYTE sample); + virtual BYTE getAt(DWORD index); +private: +}; + +inline +SampleDataByte::SampleDataByte() +: SampleData((SampleData::BitsPerSample)SampleDataInterface::getBitsPerSample()) +{ +} + +inline +SampleDataByte::~SampleDataByte() +{ +} + +inline +void SampleDataByte::setAt(DWORD index,BYTE sample) +{ + operator[](index)=sample; +} + +inline +BYTE SampleDataByte::getAt(DWORD index) +{ + return operator[](index); +} + +// *************************************************************************************************** +// *************************************************************************************************** +class SampleDataWord : public SampleDataInterface, public SampleData +{ +public: + SampleDataWord(); + virtual ~SampleDataWord(); + virtual void setAt(DWORD index,WORD sample); + virtual WORD getAt(DWORD index); +private: +}; + +inline +SampleDataWord::SampleDataWord() +: SampleData((SampleData::BitsPerSample)SampleDataInterface::getBitsPerSample()) +{ +} + +inline +SampleDataWord::~SampleDataWord() +{ +} + +inline +void SampleDataWord::setAt(DWORD index,WORD sample) +{ + ((WORD*)&operator[](0))[index]=sample; +} + +inline +WORD SampleDataWord::getAt(DWORD index) +{ + return ((WORD*)&operator[](0))[index]; +} + +#endif diff --git a/mixer/SampleDataInterface.hpp b/mixer/SampleDataInterface.hpp new file mode 100644 index 0000000..1dae5b2 --- /dev/null +++ b/mixer/SampleDataInterface.hpp @@ -0,0 +1,39 @@ +#ifndef _MIXER_SAMPLEDATAINTERFACE_HPP_ +#define _MIXER_SAMPLEDATAINTERFACE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +template +class SampleDataInterface +{ +public: + SampleDataInterface(); + virtual ~SampleDataInterface(); + static int getBitsPerSample(void); +protected: + virtual void setAt(DWORD index,T sample)=0; + virtual T getAt(DWORD index)=0; +private: +}; + +template +inline +SampleDataInterface::SampleDataInterface() +{ +} + +template +inline +SampleDataInterface::~SampleDataInterface() +{ +} + +template +inline +int SampleDataInterface::getBitsPerSample(void) +{ + return sizeof(T)*8; +} + +#endif diff --git a/mixer/ScopeBack.bmp b/mixer/ScopeBack.bmp new file mode 100644 index 0000000..68bd4ec Binary files /dev/null and b/mixer/ScopeBack.bmp differ diff --git a/mixer/SelOff.bmp b/mixer/SelOff.bmp new file mode 100644 index 0000000..9133d7e Binary files /dev/null and b/mixer/SelOff.bmp differ diff --git a/mixer/SelOff.bmp.saf b/mixer/SelOff.bmp.saf new file mode 100644 index 0000000..3f9496d Binary files /dev/null and b/mixer/SelOff.bmp.saf differ diff --git a/mixer/SelOn.bmp b/mixer/SelOn.bmp new file mode 100644 index 0000000..e612d72 Binary files /dev/null and b/mixer/SelOn.bmp differ diff --git a/mixer/Texture.bmp b/mixer/Texture.bmp new file mode 100644 index 0000000..a89a783 Binary files /dev/null and b/mixer/Texture.bmp differ diff --git a/mixer/buttondn.bmp b/mixer/buttondn.bmp new file mode 100644 index 0000000..3a67e23 Binary files /dev/null and b/mixer/buttondn.bmp differ diff --git a/mixer/buttonup.bmp b/mixer/buttonup.bmp new file mode 100644 index 0000000..0ded21b Binary files /dev/null and b/mixer/buttonup.bmp differ diff --git a/mixer/mixer.aps b/mixer/mixer.aps new file mode 100644 index 0000000..4893e41 Binary files /dev/null and b/mixer/mixer.aps differ diff --git a/mixer/mixer.dsp b/mixer/mixer.dsp new file mode 100644 index 0000000..eb3d0ee --- /dev/null +++ b/mixer/mixer.dsp @@ -0,0 +1,133 @@ +# Microsoft Developer Studio Project File - Name="mixer" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=mixer - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mixer.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mixer.mak" CFG="mixer - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mixer - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "mixer - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mixer - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "mixer - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "mixer - Win32 Release" +# Name "mixer - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\ChannelCtrlMgr.cpp +# End Source File +# Begin Source File + +SOURCE=.\Graphic.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\mixer.rc +# End Source File +# Begin Source File + +SOURCE=.\MixerScope.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\buttondn.bmp +# End Source File +# Begin Source File + +SOURCE=.\Texture.bmp +# End Source File +# End Group +# End Target +# End Project diff --git a/mixer/mixer.dsw b/mixer/mixer.dsw new file mode 100644 index 0000000..ab6c4b1 --- /dev/null +++ b/mixer/mixer.dsw @@ -0,0 +1,104 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mixer"=.\mixer.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name sample + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency +}}} + +############################################################################### + +Project: "sample"=..\sample\sample.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\statbar\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/mixer/mixer.h b/mixer/mixer.h new file mode 100644 index 0000000..5ead91f --- /dev/null +++ b/mixer/mixer.h @@ -0,0 +1,9 @@ +#ifndef _MIXER_MIXER_H_ +#define _MIXER_MIXER_H_ + +#define MIXERMENU_FILE_OPEN 1000 +#define MIXERMENU_FILE_EXIT 1001 + +#endif + + diff --git a/mixer/mixer.hpp b/mixer/mixer.hpp new file mode 100644 index 0000000..6fe8fd4 --- /dev/null +++ b/mixer/mixer.hpp @@ -0,0 +1,4 @@ +#ifndef _MIXER_MIXER_HPP_ +#define _MIXER_MIXER_HPP_ +#include +#endif diff --git a/mixer/mixer.opt b/mixer/mixer.opt new file mode 100644 index 0000000..0f309b1 Binary files /dev/null and b/mixer/mixer.opt differ diff --git a/mixer/mixer.plg b/mixer/mixer.plg new file mode 100644 index 0000000..e293104 --- /dev/null +++ b/mixer/mixer.plg @@ -0,0 +1,42 @@ + + +
+

Build Log

+

+--------------------Configuration: mixer - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP50.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"Debug/mixer.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"D:\work\mixer\ChannelCtrlMgr.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP50.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP51.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/mixer.pdb" /debug /machine:I386 /out:"Debug/mixer.exe" /pdbtype:sept +.\Debug\ChannelCtrlMgr.obj +.\Debug\Graphic.obj +.\Debug\Main.obj +.\Debug\Mainwnd.obj +.\Debug\MixerScope.obj +.\Debug\mixer.res +\work\exe\mscommon.lib +\work\exe\msbsp.lib +\work\exe\sample.lib +\work\exe\statbar.lib +\work\exe\jpgimg.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP51.tmp" +

Output Window

+Compiling... +ChannelCtrlMgr.cpp +Linking... + + + +

Results

+mixer.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/mixer/mixer.rc b/mixer/mixer.rc new file mode 100644 index 0000000..b9ae669 --- /dev/null +++ b/mixer/mixer.rc @@ -0,0 +1,24 @@ + + + +BACKGROUND BITMAP "TEXTURE.BMP" +SCOPE BITMAP "SCOPEBACK.BMP" +SSPRVIEW BITMAP "SSPRVIEW.BMP" +BUTTONUP BITMAP "BUTTONUP.BMP" +BUTTONDN BITMAP "BUTTONDN.BMP" +SELON BITMAP "SELON.BMP" +SELOFF BITMAP "SELOFF.BMP" + + +#include +#include + +MIXER MENU +{ + POPUP "&File" + { + MENUITEM "&Open...", MIXERMENU_FILE_OPEN + MENUITEM "E&xit", MIXERMENU_FILE_EXIT + } +} + diff --git a/mixer/scraps.txt b/mixer/scraps.txt new file mode 100644 index 0000000..d40c847 --- /dev/null +++ b/mixer/scraps.txt @@ -0,0 +1,129 @@ +/* + Block > samples; + + samples.insert(&SmartPointer()); + samples.insert(&SmartPointer()); + samples[0]=new SampleDataWord(); + samples[0].disposition(PointerDisposition::Delete); + samples[1]=new SampleDataByte(); + samples[1].disposition(PointerDisposition::Delete); + + for(int index=0;indexsetNumSamples(2); + + SampleData &sampleData=*samples[index]; + ::OutputDebugString(String("BitsPerSample=")+String().fromInt(sampleData.getBitsPerSample())+String("\n")); + if(SampleData::Bit8==sampleData.getBitsPerSample()) + { + SampleDataByte &sampleDataByte=(SampleDataByte&)sampleData; + int numSamples=sampleDataByte.getNumSamples(); + ::OutputDebugString(String("NumSamples=")+String().fromInt(numSamples)+String("\n")); + BYTE sample; + for(int index=0;index > samples; + + samples.insert(&SmartPointer()); + samples.insert(&SmartPointer()); + samples[0]=new SampleDataWord(); + samples[0].disposition(PointerDisposition::Delete); + samples[1]=new SampleDataByte(); + samples[1].disposition(PointerDisposition::Delete); + + for(int index=0;indexsetNumSamples(2); + + SampleData &sampleData=*samples[index]; + ::OutputDebugString(String("BitsPerSample=")+String().fromInt(sampleData.getBitsPerSample())+String("\n")); + if(SampleData::Bit8==sampleData.getBitsPerSample()) + { + SampleDataByte &sampleDataByte=(SampleDataByte&)sampleData; + int numSamples=sampleDataByte.getNumSamples(); + ::OutputDebugString(String("NumSamples=")+String().fromInt(numSamples)+String("\n")); + BYTE sample; + for(int index=0;index +#endif + +class AeolianScale; +typedef AeolianScale NaturalMinorScale; + +class AeolianScale : public Scale +{ +public: + AeolianScale(Note root=Note::E,const String &description="AeolianScale"); + virtual ~AeolianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +AeolianScale::AeolianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +AeolianScale::~AeolianScale() +{ +} + +inline +void AeolianScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif + diff --git a/music/AlteredScale.hpp b/music/AlteredScale.hpp new file mode 100644 index 0000000..252c010 --- /dev/null +++ b/music/AlteredScale.hpp @@ -0,0 +1,56 @@ +#ifndef _MUSIC_ALTEREDSCALE_HPP_ +#define _MUSIC_ALTEREDSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class AlteredScale; +typedef AlteredScale DiminishedWholeToneScale; + +class AlteredScale : public Scale +{ +public: + AlteredScale(Note root=Note::A,const String &description="AlteredScale(DiminishedWholeToneScale)"); + AlteredScale(const IonianScale &ionianScale); + AlteredScale &operator=(const IonianScale &ionianScale); + virtual ~AlteredScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +AlteredScale::AlteredScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +AlteredScale::~AlteredScale() +{ +} + +inline +void AlteredScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/BaroqueScale.hpp b/music/BaroqueScale.hpp new file mode 100644 index 0000000..6e4c5cd --- /dev/null +++ b/music/BaroqueScale.hpp @@ -0,0 +1,56 @@ +#ifndef _MUSIC_BAROQUESCALE_HPP_ +#define _MUSIC_BAROQUESCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class BaroqueScale : public Scale +{ +public: + BaroqueScale(Note root=Note::A,const String &description="BaroqueScale"); + BaroqueScale(const IonianScale &ionianScale); + BaroqueScale &operator=(const IonianScale &ionianScale); + virtual ~BaroqueScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +BaroqueScale::BaroqueScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +BaroqueScale::~BaroqueScale() +{ +} + +// W H W W H 1+ H + +inline +void BaroqueScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/BeBopDominantScale.hpp b/music/BeBopDominantScale.hpp new file mode 100644 index 0000000..0e3c9fa --- /dev/null +++ b/music/BeBopDominantScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_BEBOPDOMINANTSCALE_HPP_ +#define _MUSIC_BEBOPDOMINANTSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class BeBopDominantScale : public Scale +{ +public: + BeBopDominantScale(Note root=Note::A,const String &description="BeBopDominantScale"); + BeBopDominantScale(const IonianScale &ionianScale); + BeBopDominantScale &operator=(const IonianScale &ionianScale); + virtual ~BeBopDominantScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +BeBopDominantScale::BeBopDominantScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +BeBopDominantScale::~BeBopDominantScale() +{ +} + +inline +void BeBopDominantScale::createScale() +{ + Note root(getRoot()); // W W H W W H H H + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/BeBopMajorScale.hpp b/music/BeBopMajorScale.hpp new file mode 100644 index 0000000..69fcd59 --- /dev/null +++ b/music/BeBopMajorScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_BEBOPMAJORSCALE_HPP_ +#define _MUSIC_BEBOPMAJORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class BeBopMajorScale : public Scale +{ +public: + BeBopMajorScale(Note root=Note::A,const String &description="BeBopMajorScale"); + BeBopMajorScale(const IonianScale &ionianScale); + BeBopMajorScale &operator=(const IonianScale &ionianScale); + virtual ~BeBopMajorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +BeBopMajorScale::BeBopMajorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +BeBopMajorScale::~BeBopMajorScale() +{ +} + +inline +void BeBopMajorScale::createScale() +{ + Note root(getRoot()); // W W H W H H W H + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/BeBopMinorScale.hpp b/music/BeBopMinorScale.hpp new file mode 100644 index 0000000..cbad27b --- /dev/null +++ b/music/BeBopMinorScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_BEBOPMINORSCALE_HPP_ +#define _MUSIC_BEBOPMINORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class BeBopMinorScale : public Scale +{ +public: + BeBopMinorScale(Note root=Note::A,const String &description="BeBopMinorScale"); + BeBopMinorScale(const IonianScale &ionianScale); + BeBopMinorScale &operator=(const IonianScale &ionianScale); + virtual ~BeBopMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +BeBopMinorScale::BeBopMinorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +BeBopMinorScale::~BeBopMinorScale() +{ +} + +inline +void BeBopMinorScale::createScale() +{ + Note root(getRoot()); // W H W W H H H W + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/BeBopTonicMinorScale.hpp b/music/BeBopTonicMinorScale.hpp new file mode 100644 index 0000000..341b21a --- /dev/null +++ b/music/BeBopTonicMinorScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_BEBOPTONICMINORSCALE_HPP_ +#define _MUSIC_BEBOPTONICMINORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class BeBopTonicMinorScale : public Scale +{ +public: + BeBopTonicMinorScale(Note root=Note::A,const String &description="BeBopTonicMinorScale"); + BeBopTonicMinorScale(const IonianScale &ionianScale); + BeBopTonicMinorScale &operator=(const IonianScale &ionianScale); + virtual ~BeBopTonicMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +BeBopTonicMinorScale::BeBopTonicMinorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +BeBopTonicMinorScale::~BeBopTonicMinorScale() +{ +} + +inline +void BeBopTonicMinorScale::createScale() +{ + Note root(getRoot()); // W H W W H H W H + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/Chord.cpp b/music/Chord.cpp new file mode 100644 index 0000000..95de84b --- /dev/null +++ b/music/Chord.cpp @@ -0,0 +1,181 @@ +#include +#include +#include + +using namespace Music; + +bool Chord::play(MIDIOutputDevice &device,bool noteOffAfterPlay) +{ + if(!device.hasDevice())return false; + for(int index=0;index +#endif +#ifndef _MUSIC_DEGREE_HPP_ +#include +#endif +#ifndef _MIDISEQ_MIDIOUTDEVICE_HPP_ +#include +#endif + +namespace Music +{ +class Chord : public Notes +{ +public: + typedef enum ChordType{MajorTriad,MinorTriad,DiminishedTriad,AugmentedTriad,MajorSeventh,DiminishedSeventh, + HalfDiminishedSeventh,MinorSixth,MinorSeventh,MinorMajorSeventh,DominantSixth,DominantSeventh}; + Chord(); + virtual ~Chord(); + bool play(MIDIOutputDevice &device,bool noteOffAfterPlay=true); + void create(const Note &root=Note(Note::C),ChordType chordType=MajorTriad); + Note getRoot(void)const; +private: + void handleMajorTriad(Note root); + void handleMajorSeventh(Note root); + void handleMinorTriad(Note root); + void handleDiminishedTriad(Note root); + void handleAugmentedTriad(Note root); + void handleDiminishedSeventh(Note note); + void handleHalfDiminishedSeventh(Note note); + void handleMinorSixth(Note note); + void handleMinorSeventh(Note note); + void handleMinorMajorSeventh(Note note); + void handleDominantSixth(Note note); + void handleDominantSeventh(Note note); +}; + +inline +Chord::Chord() +{ +} + +inline +Chord::~Chord() +{ +} +} + +inline +Note Music::Chord::getRoot(void)const +{ + return ((Notes&)*this).operator[](0); +} +#endif + diff --git a/music/ChordCompiler.hpp b/music/ChordCompiler.hpp new file mode 100644 index 0000000..2b5d739 --- /dev/null +++ b/music/ChordCompiler.hpp @@ -0,0 +1,41 @@ +#ifndef _MUSIC_CHORDCOMPILER_HPP_ +#define _MUSIC_CHORDCOMPILER_HPP_ +#ifndef _MUSIC_SCANNER_HPP_ +#include +#endif +#ifndef _MUSIC_PARSER_HPP_ +#include +#endif + +namespace Music +{ +class ChordCompiler +{ +public: + ChordCompiler(); + virtual ~ChordCompiler(); + bool compile(const String &strChord,Music::Chord &chord); +private: + Scanner mScanner; + Parser mParser; +}; + +inline +ChordCompiler::ChordCompiler() +{ +} + +inline +ChordCompiler::~ChordCompiler() +{ +} + +inline +bool ChordCompiler::compile(const String &strChord,Music::Chord &chord) +{ + if(!mScanner.scan(strChord))return false; + if(!mParser.parse(mScanner,chord))return false; + return true; +} +}; +#endif diff --git a/music/Debug/Chord.obj b/music/Debug/Chord.obj new file mode 100644 index 0000000..0071396 Binary files /dev/null and b/music/Debug/Chord.obj differ diff --git a/music/Debug/DorianScale.obj b/music/Debug/DorianScale.obj new file mode 100644 index 0000000..cd0f736 Binary files /dev/null and b/music/Debug/DorianScale.obj differ diff --git a/music/Debug/Notes.obj b/music/Debug/Notes.obj new file mode 100644 index 0000000..639b106 Binary files /dev/null and b/music/Debug/Notes.obj differ diff --git a/music/Debug/emitter.obj b/music/Debug/emitter.obj new file mode 100644 index 0000000..259750d Binary files /dev/null and b/music/Debug/emitter.obj differ diff --git a/music/Debug/music.pch b/music/Debug/music.pch new file mode 100644 index 0000000..fd6424a Binary files /dev/null and b/music/Debug/music.pch differ diff --git a/music/Debug/musicexe.exe b/music/Debug/musicexe.exe new file mode 100644 index 0000000..2cc15af Binary files /dev/null and b/music/Debug/musicexe.exe differ diff --git a/music/Debug/musicexe.ilk b/music/Debug/musicexe.ilk new file mode 100644 index 0000000..92c8aba Binary files /dev/null and b/music/Debug/musicexe.ilk differ diff --git a/music/Debug/musicexe.pdb b/music/Debug/musicexe.pdb new file mode 100644 index 0000000..37bf9d8 Binary files /dev/null and b/music/Debug/musicexe.pdb differ diff --git a/music/Debug/note.obj b/music/Debug/note.obj new file mode 100644 index 0000000..888ae18 Binary files /dev/null and b/music/Debug/note.obj differ diff --git a/music/Debug/parser.obj b/music/Debug/parser.obj new file mode 100644 index 0000000..9af1b02 Binary files /dev/null and b/music/Debug/parser.obj differ diff --git a/music/Debug/scale.obj b/music/Debug/scale.obj new file mode 100644 index 0000000..5297bdc Binary files /dev/null and b/music/Debug/scale.obj differ diff --git a/music/Debug/scanner.obj b/music/Debug/scanner.obj new file mode 100644 index 0000000..b02c322 Binary files /dev/null and b/music/Debug/scanner.obj differ diff --git a/music/Debug/vc60.idb b/music/Debug/vc60.idb new file mode 100644 index 0000000..4bd911c Binary files /dev/null and b/music/Debug/vc60.idb differ diff --git a/music/Debug/vc60.pdb b/music/Debug/vc60.pdb new file mode 100644 index 0000000..fc0de33 Binary files /dev/null and b/music/Debug/vc60.pdb differ diff --git a/music/DiminishedHalfScale.hpp b/music/DiminishedHalfScale.hpp new file mode 100644 index 0000000..147168d --- /dev/null +++ b/music/DiminishedHalfScale.hpp @@ -0,0 +1,56 @@ +#ifndef _MUSIC_DIMINISHEDHALFSCALE_HPP_ +#define _MUSIC_DIMINISHEDHALFSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class DiminishedHalfScale : public Scale +{ +public: + DiminishedHalfScale(Note root=Note::A,const String &description="DiminishedHalfScale"); + DiminishedHalfScale(const IonianScale &ionianScale); + DiminishedHalfScale &operator=(const IonianScale &ionianScale); + virtual ~DiminishedHalfScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +DiminishedHalfScale::DiminishedHalfScale(Note root,const String &description) +: Scale(root,description) +{ + size(CNotes+1); + createScale(); +} + +inline +DiminishedHalfScale::~DiminishedHalfScale() +{ +} + +inline +void DiminishedHalfScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; + root+=Note::WholeStep; + Notes::operator[](8)=root; +} +#endif \ No newline at end of file diff --git a/music/DiminishedWholeScale.hpp b/music/DiminishedWholeScale.hpp new file mode 100644 index 0000000..1c3bfcf --- /dev/null +++ b/music/DiminishedWholeScale.hpp @@ -0,0 +1,56 @@ +#ifndef _MUSIC_DIMINISHEDWHOLESCALE_HPP_ +#define _MUSIC_DIMINISHEDWHOLESCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class DiminishedWholeScale : public Scale +{ +public: + DiminishedWholeScale(Note root=Note::A,const String &description="DiminishedWholeScale"); + DiminishedWholeScale(const IonianScale &ionianScale); + DiminishedWholeScale &operator=(const IonianScale &ionianScale); + virtual ~DiminishedWholeScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +DiminishedWholeScale::DiminishedWholeScale(Note root,const String &description) +: Scale(root,description) +{ + size(CNotes+1); + createScale(); +} + +inline +DiminishedWholeScale::~DiminishedWholeScale() +{ +} + +inline +void DiminishedWholeScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; + root+=Note::HalfStep; + Notes::operator[](8)=root; +} +#endif \ No newline at end of file diff --git a/music/DorianIIScale.hpp b/music/DorianIIScale.hpp new file mode 100644 index 0000000..8fef81f --- /dev/null +++ b/music/DorianIIScale.hpp @@ -0,0 +1,56 @@ +#ifndef _MUSIC_DORIANIISCALE_HPP_ +#define _MUSIC_DORIANIISCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class DorianIIScale; +typedef DorianIIScale SusFlat9Scale; + +class DorianIIScale : public Scale +{ +public: + DorianIIScale(Note root=Note::A,const String &description="SusFlat9(DorianIIScale)"); + DorianIIScale(const IonianScale &ionianScale); + DorianIIScale &operator=(const IonianScale &ionianScale); + virtual ~DorianIIScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +DorianIIScale::DorianIIScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +DorianIIScale::~DorianIIScale() +{ +} + +inline +void DorianIIScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/DorianScale.cpp b/music/DorianScale.cpp new file mode 100644 index 0000000..29904ae --- /dev/null +++ b/music/DorianScale.cpp @@ -0,0 +1,2 @@ +#include + diff --git a/music/DorianScale.hpp b/music/DorianScale.hpp new file mode 100644 index 0000000..8375ba8 --- /dev/null +++ b/music/DorianScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_DORIANSCALE_HPP_ +#define _MUSIC_DORIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class DorianScale : public Scale +{ +public: + DorianScale(Note root=Note::A,const String &description="DorianScale"); + DorianScale(const IonianScale &ionianScale); + DorianScale &operator=(const IonianScale &ionianScale); + virtual ~DorianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +DorianScale::DorianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +DorianScale::~DorianScale() +{ +} + +inline +void DorianScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/EightToneSpanishScale.hpp b/music/EightToneSpanishScale.hpp new file mode 100644 index 0000000..291e7b0 --- /dev/null +++ b/music/EightToneSpanishScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_EIGHTTONESPANISHSCALE_HPP_ +#define _MUSIC_EIGHTTONESPANISHSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class EightToneSpanishScale : public Scale +{ +public: + EightToneSpanishScale(Note root=Note::A,const String &description="EightToneSpanishScale"); + EightToneSpanishScale(const IonianScale &ionianScale); + EightToneSpanishScale &operator=(const IonianScale &ionianScale); + virtual ~EightToneSpanishScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +EightToneSpanishScale::EightToneSpanishScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +EightToneSpanishScale::~EightToneSpanishScale() +{ +} + +inline +void EightToneSpanishScale::createScale() +{ + Note root(getRoot()); // H W H H H W W W + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/Emitter.hpp b/music/Emitter.hpp new file mode 100644 index 0000000..9afe147 --- /dev/null +++ b/music/Emitter.hpp @@ -0,0 +1,47 @@ +#ifndef _MUSIC_EMITTER_HPP_ +#define _MUSIC_EMITTER_HPP_ +#ifndef _COMMON_PUREBYTE_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +namespace Music +{ + +typedef PureBYTE Byte; + +class Emitter : public Block +{ +public: + Emitter(); + virtual ~Emitter(); + void emit(const Byte &key,const Byte &value); + void emit(const Byte &key,const String &value); + void emit(const Byte &key); + String toString(void)const; +private: +}; + +inline +Emitter::Emitter() +{ +} + +inline +Emitter::~Emitter() +{ +} + +inline +void Emitter::emit(const Byte &byte,const Byte &value) +{ + insert(&byte); + insert(&value); +} +}; +#endif diff --git a/music/EnigmaticScale.hpp b/music/EnigmaticScale.hpp new file mode 100644 index 0000000..dac5b7b --- /dev/null +++ b/music/EnigmaticScale.hpp @@ -0,0 +1,54 @@ +#ifndef _MUSIC_ENIGMATICSCALE_HPP_ +#define _MUSIC_ENIGMATICSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class EnigmaticScale : public Scale +{ +public: + EnigmaticScale(Note root=Note::A,const String &description="EnigmaticScale"); + EnigmaticScale(const IonianScale &ionianScale); + EnigmaticScale &operator=(const IonianScale &ionianScale); + virtual ~EnigmaticScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +EnigmaticScale::EnigmaticScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +EnigmaticScale::~EnigmaticScale() +{ +} + +inline +void EnigmaticScale::createScale() +{ + Note root(getRoot()); // H W1/2 W W W H H + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/GypsyScale.hpp b/music/GypsyScale.hpp new file mode 100644 index 0000000..5f3cee8 --- /dev/null +++ b/music/GypsyScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_GYPSYSCALE_HPP_ +#define _MUSIC_GYPSYSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class GypsyScale : public Scale +{ +public: + GypsyScale(Note root=Note::A,const String &description="GypsyScale"); + GypsyScale(const IonianScale &ionianScale); + GypsyScale &operator=(const IonianScale &ionianScale); + virtual ~GypsyScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +GypsyScale::GypsyScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +GypsyScale::~GypsyScale() +{ +} + +inline +void GypsyScale::createScale() +{ + Note root(getRoot()); // W H W H H W W + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/HarmonicMinorScale.hpp b/music/HarmonicMinorScale.hpp new file mode 100644 index 0000000..7910c56 --- /dev/null +++ b/music/HarmonicMinorScale.hpp @@ -0,0 +1,38 @@ +#ifndef _MUSIC_HARMONICMINORSCALE_HPP_ +#define _MUSIC_HARMONICMINORSCALE_HPP_ +#ifndef _MUSIC_AEOLIANSCALE_HPP_ +#include +#endif + +class HarmonicMinorScale : public AeolianScale +{ +public: + HarmonicMinorScale(Note root=Note::E); + virtual ~HarmonicMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +HarmonicMinorScale::HarmonicMinorScale(Note root) +: AeolianScale(root,"HarmonicMinorScale") +{ + createScale(); +} + +inline +HarmonicMinorScale::~HarmonicMinorScale() +{ +} + +inline +void HarmonicMinorScale::createScale() +{ + AeolianScale::createScale(); + Note note=getDegree(Degree::VII); + note++; // HarmonicMinor sharps the 7th of the minor scale + setDegree(Degree::VII,note); +} +#endif + diff --git a/music/HungarianMinorScale.hpp b/music/HungarianMinorScale.hpp new file mode 100644 index 0000000..b2fdc6d --- /dev/null +++ b/music/HungarianMinorScale.hpp @@ -0,0 +1,55 @@ +#ifndef _MUSIC_HUNGARIANMINORSCALE_HPP_ +#define _MUSIC_HUNGARIANMINORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class HungarianMinorScale : public Scale +{ +public: + HungarianMinorScale(Note root=Note::A,const String &description="HungarianMinorScale"); + HungarianMinorScale(const IonianScale &ionianScale); + HungarianMinorScale &operator=(const IonianScale &ionianScale); + virtual ~HungarianMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +HungarianMinorScale::HungarianMinorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +HungarianMinorScale::~HungarianMinorScale() +{ +} + +inline +void HungarianMinorScale::createScale() +{ + Note root(getRoot()); // W H 1 1/2 H H 1 1/2 H + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/HungarianScale.hpp b/music/HungarianScale.hpp new file mode 100644 index 0000000..abb7136 --- /dev/null +++ b/music/HungarianScale.hpp @@ -0,0 +1,54 @@ +#ifndef _MUSIC_HUNGARIANSCALE_HPP_ +#define _MUSIC_HUNGARIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class HungarianScale : public Scale +{ +public: + HungarianScale(Note root=Note::A,const String &description="HungarianScale"); + HungarianScale(const IonianScale &ionianScale); + HungarianScale &operator=(const IonianScale &ionianScale); + virtual ~HungarianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +HungarianScale::HungarianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +HungarianScale::~HungarianScale() +{ +} + +inline +void HungarianScale::createScale() +{ + Note root(getRoot()); // 1 1/2 H W H W H W + Notes::operator[](0)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/IonianScale.hpp b/music/IonianScale.hpp new file mode 100644 index 0000000..96da521 --- /dev/null +++ b/music/IonianScale.hpp @@ -0,0 +1,416 @@ +#ifndef _MUSIC_IONIANSCALE_HPP_ +#define _MUSIC_IONIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif +#ifndef _MUSIC_SCALES_HPP_ +#include +#endif +#ifndef _MUSIC_DORIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DORIANIISCALE_HPP_ +#include +#endif +#ifndef _MUSIC_PHRYGIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MIXOLYDIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_AEOLIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LOCRIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MINORPENTATONICSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_PENTATONICMINORBLUESSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_HARMONICMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MELODICMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANAUGMENTEDSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANDOMINANTSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LOCRIAN2SCALE_HPP_ +#include +#endif +#ifndef _MUSIC_ALTEREDSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DIMINISHEDWHOLESCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DIMINISHEDHALFSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_WHOLETONESCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPDOMINANTSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPMAJORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPTONICMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_EIGHTTONESPANISHSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_ENIGMATICSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_GYPSYSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_HUNGARIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_HUNGARIANMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LEADINGWHOLETONESCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MAJORLOCRIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_NEAPOLITANMAJORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_NEAPOLITANMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_ORIENTALSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_TODISCALE_HPP_ +#include +#endif +#ifndef _MUSIC_SUPERLCORIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BAROQUESCALE_HPP_ +#include +#endif + + +class IonianScale; +typedef IonianScale MajorScale; + +class IonianScale : public Scale +{ +public: + IonianScale(Note root=Note::G,const String &description="IonianScale"); + virtual ~IonianScale(); + DorianScale getDorianScale(void)const; // get Dorian mode + PhrygianScale getPhrygianScale(void)const; // get Phrygian mode + LydianScale getLydianScale(void)const; // get Lydian mode + MixolydianScale getMixolydianScale(void)const; // get Mixolydian mode + AeolianScale getAeolianScale(void)const; // get Aeolian mode + LocrianScale getLocrianScale(void)const; // get Locrian mode + PentatonicMinorScale getPentatonicMinorScale(void)const; // get Pentatonic Minor mode + PentatonicMinorBluesScale getPentatonicMinorBluesScale(void)const; // get Pentatonic Minor Blues + HarmonicMinorScale getHarmonicMinorScale(void)const; // get Harmonic Minor mode + MelodicMinorScale getMelodicMinorScale(void)const; // get Melodic Minor mode + DorianIIScale getDorianIIScale(void)const; // get DorianII Mode + LydianAugmentedScale getLydianAugmentedScale(void)const; // get Lydian Augmented + LydianDominantScale getLydianDominantScale(void)const; // get Lydian Dominant + Locrian2Scale getLocrian2Scale(void)const; // get Locrian2 + AlteredScale getAlteredScale(void)const; // get AlteredScale + DiminishedWholeScale getDiminishedWholeScale(void)const; // get Diminished Whole + DiminishedHalfScale getDiminishedHalfScale(void)const; // get Diminished Half + WholeToneScale getWholeToneScale(void)const; // get WholeTone + BeBopDominantScale getBeBopDominantScale(void)const; // get BeBop Dominant + BeBopMajorScale getBeBopMajorScale(void)const; + BeBopTonicMinorScale getBeBopTonicMinorScale(void)const; + BeBopMinorScale getBeBopMinorScale(void)const; + EightToneSpanishScale getEightToneSpanishScale(void)const; + EnigmaticScale getEnigmaticScale(void)const; + GypsyScale getGypsyScale(void)const; + HungarianScale getHungarianScale(void)const; + HungarianMinorScale getHungarianMinorScale(void)const; + LeadingWholeToneScale getLeadingWholeToneScale(void)const; + LydianMinorScale getLydianMinorScale(void)const; + MajorLocrianScale getMajorLocrianScale(void)const; + NeapolitanMajorScale getNeapolitanMajorScale(void)const; + NeapolitanMinorScale getNeapolitanMinorScale(void)const; + OrientalScale getOrientalScale(void)const; + TodiScale getTodiScale(void)const; + SuperLocrianScale getSuperLocrianScale(void)const; + BaroqueScale getBaroqueScale(void)const; +protected: + virtual void createScale(void); +private: +}; + +inline +IonianScale::IonianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +IonianScale::~IonianScale() +{ +} + +inline +DorianScale IonianScale::getDorianScale(void)const +{ + return DorianScale(getDegree(Degree::II)); +} + +inline +PhrygianScale IonianScale::getPhrygianScale(void)const +{ + return PhrygianScale(getDegree(Degree::III)); +} + +inline +LydianScale IonianScale::getLydianScale(void)const +{ + return LydianScale(getDegree(Degree::IV)); +} + +inline +MixolydianScale IonianScale::getMixolydianScale(void)const +{ + return MixolydianScale(getDegree(Degree::V)); +} + +inline +AeolianScale IonianScale::getAeolianScale(void)const +{ + return AeolianScale(getDegree(Degree::VI)); +} + +inline +HarmonicMinorScale IonianScale::getHarmonicMinorScale(void)const +{ + return HarmonicMinorScale(getDegree(Degree::VI)); +} + +inline +MelodicMinorScale IonianScale::getMelodicMinorScale(void)const +{ + return MelodicMinorScale(getDegree(Degree::VI)); +} + +inline +LocrianScale IonianScale::getLocrianScale(void)const +{ + return LocrianScale(getDegree(Degree::VII)); +} + +inline +PentatonicMinorScale IonianScale::getPentatonicMinorScale(void)const +{ + return PentatonicMinorScale(getDegree(Degree::I)); +} + +inline +PentatonicMinorBluesScale IonianScale::getPentatonicMinorBluesScale(void)const +{ + return PentatonicMinorBluesScale(getDegree(Degree::I)); +} + +inline +DorianIIScale IonianScale::getDorianIIScale(void)const +{ + return DorianIIScale(getDegree(Degree::I)); +} + +inline +LydianAugmentedScale IonianScale::getLydianAugmentedScale(void)const +{ + return LydianAugmentedScale(getDegree(Degree::I)); +} + +inline +LydianDominantScale IonianScale::getLydianDominantScale(void)const +{ + return LydianDominantScale(getDegree(Degree::I)); +} + +inline +Locrian2Scale IonianScale::getLocrian2Scale(void)const +{ + return Locrian2Scale(getDegree(Degree::I)); +} + +inline +AlteredScale IonianScale::getAlteredScale(void)const +{ + return AlteredScale(getDegree(Degree::I)); +} + +inline +DiminishedWholeScale IonianScale::getDiminishedWholeScale(void)const +{ + return DiminishedWholeScale(getDegree(Degree::I)); +} + +inline +DiminishedHalfScale IonianScale::getDiminishedHalfScale(void)const +{ + return DiminishedHalfScale(getDegree(Degree::I)); +} + +inline +WholeToneScale IonianScale::getWholeToneScale(void)const +{ + return WholeToneScale(getDegree(Degree::I)); +} + +inline +BeBopDominantScale IonianScale::getBeBopDominantScale(void)const +{ + return BeBopDominantScale(getDegree(Degree::I)); +} + +inline +BeBopMajorScale IonianScale::getBeBopMajorScale(void)const +{ + return BeBopMajorScale(getDegree(Degree::I)); +} + +inline +BeBopTonicMinorScale IonianScale::getBeBopTonicMinorScale(void)const +{ + return BeBopTonicMinorScale(getDegree(Degree::I)); +} + +inline +BeBopMinorScale IonianScale::getBeBopMinorScale(void)const +{ + return BeBopMinorScale(getDegree(Degree::I)); +} + +inline +EightToneSpanishScale IonianScale::getEightToneSpanishScale(void)const +{ + return EightToneSpanishScale(getDegree(Degree::I)); +} + +inline +EnigmaticScale IonianScale::getEnigmaticScale(void)const +{ + return EnigmaticScale(getDegree(Degree::I)); +} + +inline +GypsyScale IonianScale::getGypsyScale(void)const +{ + return GypsyScale(getDegree(Degree::I)); +} + +inline +HungarianScale IonianScale::getHungarianScale(void)const +{ + return HungarianScale(getDegree(Degree::I)); +} + +inline +HungarianMinorScale IonianScale::getHungarianMinorScale(void)const +{ + return HungarianMinorScale(getDegree(Degree::I)); +} + +inline +LeadingWholeToneScale IonianScale::getLeadingWholeToneScale(void)const +{ + return LeadingWholeToneScale(getDegree(Degree::I)); +} + +inline +LydianMinorScale IonianScale::getLydianMinorScale(void)const +{ + return LydianMinorScale(getDegree(Degree::I)); +} + +inline +MajorLocrianScale IonianScale::getMajorLocrianScale(void)const +{ + return MajorLocrianScale(getDegree(Degree::I)); +} + +inline +NeapolitanMajorScale IonianScale::getNeapolitanMajorScale(void)const +{ + return NeapolitanMajorScale(getDegree(Degree::I)); +} + +inline +NeapolitanMinorScale IonianScale::getNeapolitanMinorScale(void)const +{ + return NeapolitanMinorScale(getDegree(Degree::I)); +} + +inline +OrientalScale IonianScale::getOrientalScale(void)const +{ + return OrientalScale(getDegree(Degree::I)); +} + +inline +TodiScale IonianScale::getTodiScale(void)const +{ + return TodiScale(getDegree(Degree::I)); +} + +inline +SuperLocrianScale IonianScale::getSuperLocrianScale(void)const +{ + return SuperLocrianScale(getDegree(Degree::I)); +} + +inline +BaroqueScale IonianScale::getBaroqueScale(void)const +{ + return BaroqueScale(getDegree(Degree::I)); +} + +inline +void IonianScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/LeadingWholeToneScale.hpp b/music/LeadingWholeToneScale.hpp new file mode 100644 index 0000000..c1ea9ee --- /dev/null +++ b/music/LeadingWholeToneScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_LEADINGWHOLETONESCALE_HPP_ +#define _MUSIC_LEADINGWHOLETONESCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class LeadingWholeToneScale : public Scale +{ +public: + LeadingWholeToneScale(Note root=Note::A,const String &description="LeadingWholeToneScale"); + LeadingWholeToneScale(const IonianScale &ionianScale); + LeadingWholeToneScale &operator=(const IonianScale &ionianScale); + virtual ~LeadingWholeToneScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +LeadingWholeToneScale::LeadingWholeToneScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +LeadingWholeToneScale::~LeadingWholeToneScale() +{ +} + +inline +void LeadingWholeToneScale::createScale() +{ + Note root(getRoot()); // W W W W W H H + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/Locrian2Scale.hpp b/music/Locrian2Scale.hpp new file mode 100644 index 0000000..b253d7c --- /dev/null +++ b/music/Locrian2Scale.hpp @@ -0,0 +1,55 @@ +#ifndef _MUSIC_LOCRIAN2SCALE_HPP_ +#define _MUSIC_LOCRIAN2SCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; +class Locrian2Scale; +typedef Locrian2Scale HalfDiminishedScale; + +class Locrian2Scale : public Scale +{ +public: + Locrian2Scale(Note root=Note::A,const String &description="Locrian2Scale(HalfDiminishedScale)"); + Locrian2Scale(const IonianScale &ionianScale); + Locrian2Scale &operator=(const IonianScale &ionianScale); + virtual ~Locrian2Scale(); +protected: + virtual void createScale(void); +private: +}; + +inline +Locrian2Scale::Locrian2Scale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +Locrian2Scale::~Locrian2Scale() +{ +} + +inline +void Locrian2Scale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/LocrianScale.hpp b/music/LocrianScale.hpp new file mode 100644 index 0000000..73ffbc1 --- /dev/null +++ b/music/LocrianScale.hpp @@ -0,0 +1,49 @@ +#ifndef _MUSIC_LOCRIANSCALE_HPP_ +#define _MUSIC_LOCRIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class LocrianScale : public Scale +{ +public: + LocrianScale(Note root=Note::FSh,const String &description="LocrianScale"); + virtual ~LocrianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +LocrianScale::LocrianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +LocrianScale::~LocrianScale() +{ +} + +inline +void LocrianScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif diff --git a/music/LydianAugmentedScale.hpp b/music/LydianAugmentedScale.hpp new file mode 100644 index 0000000..af9898f --- /dev/null +++ b/music/LydianAugmentedScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_LYDIANAUGMENTEDSCALE_HPP_ +#define _MUSIC_LYDIANAUGMENTEDSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class LydianAugmentedScale : public Scale +{ +public: + LydianAugmentedScale(Note root=Note::A,const String &description="LydianAugmentedScale"); + LydianAugmentedScale(const IonianScale &ionianScale); + LydianAugmentedScale &operator=(const IonianScale &ionianScale); + virtual ~LydianAugmentedScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +LydianAugmentedScale::LydianAugmentedScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +LydianAugmentedScale::~LydianAugmentedScale() +{ +} + +inline +void LydianAugmentedScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/LydianDominantScale.hpp b/music/LydianDominantScale.hpp new file mode 100644 index 0000000..fb4a9d2 --- /dev/null +++ b/music/LydianDominantScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_LYDIANDOMINANTSCALE_HPP_ +#define _MUSIC_LYDIANDOMINANTSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class LydianDominantScale : public Scale +{ +public: + LydianDominantScale(Note root=Note::A,const String &description="LydianDominantScale"); + LydianDominantScale(const IonianScale &ionianScale); + LydianDominantScale &operator=(const IonianScale &ionianScale); + virtual ~LydianDominantScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +LydianDominantScale::LydianDominantScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +LydianDominantScale::~LydianDominantScale() +{ +} + +inline +void LydianDominantScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/LydianMinorScale.hpp b/music/LydianMinorScale.hpp new file mode 100644 index 0000000..87c89c4 --- /dev/null +++ b/music/LydianMinorScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_LYDIANMINORSCALE_HPP_ +#define _MUSIC_LYDIANMINORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class LydianMinorScale : public Scale +{ +public: + LydianMinorScale(Note root=Note::A,const String &description="LydianMinorScale"); + LydianMinorScale(const IonianScale &ionianScale); + LydianMinorScale &operator=(const IonianScale &ionianScale); + virtual ~LydianMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +LydianMinorScale::LydianMinorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +LydianMinorScale::~LydianMinorScale() +{ +} + +inline +void LydianMinorScale::createScale() +{ + Note root(getRoot()); // W W W H H W W + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/LydianScale.hpp b/music/LydianScale.hpp new file mode 100644 index 0000000..542833e --- /dev/null +++ b/music/LydianScale.hpp @@ -0,0 +1,50 @@ +#ifndef _MUSIC_LYDIANSCALE_HPP_ +#define _MUSIC_LYDIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class LydianScale : public Scale +{ +public: + LydianScale(Note root=Note::C,const String &description="LydianScale"); + virtual ~LydianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +LydianScale::LydianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +LydianScale::~LydianScale() +{ +} + +inline +void LydianScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif + diff --git a/music/MajorLocrianScale.hpp b/music/MajorLocrianScale.hpp new file mode 100644 index 0000000..4a46065 --- /dev/null +++ b/music/MajorLocrianScale.hpp @@ -0,0 +1,10 @@ +#ifndef _MUSIC_MAJORLOCRIANSCALE_HPP_ +#define _MUSIC_MAJORLOCRIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +typedef LydianMinorScale MajorLocrianScale; +#endif \ No newline at end of file diff --git a/music/MelodicMinorScale.hpp b/music/MelodicMinorScale.hpp new file mode 100644 index 0000000..83270ae --- /dev/null +++ b/music/MelodicMinorScale.hpp @@ -0,0 +1,44 @@ +#ifndef _MUSIC_MELODICMINORSCALE_HPP_ +#define _MUSIC_MELODICMINORSCALE_HPP_ +#ifndef _MUSIC_AEOLIANSCALE_HPP_ +#include +#endif + +class MelodicMinorScale; +typedef MelodicMinorScale MinorMajorScale; + +class MelodicMinorScale : public AeolianScale +{ +public: + MelodicMinorScale(Note root=Note::E); + virtual ~MelodicMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +MelodicMinorScale::MelodicMinorScale(Note root) +: AeolianScale(root,"MinorMajorScale(MelodicMinorScale)") +{ + createScale(); +} + +inline +MelodicMinorScale::~MelodicMinorScale() +{ +} + +inline +void MelodicMinorScale::createScale() +{ + AeolianScale::createScale(); + Note note=getDegree(Degree::VI); // MelodicMinor sharps the 5th degree of the natural minor scale + note++; + setDegree(Degree::VI,note); + note=getDegree(Degree::VII); + note++; // MelodicMinor sharps the 7th of the natural minor scale + setDegree(Degree::VII,note); +} +#endif + diff --git a/music/MixolydianScale.hpp b/music/MixolydianScale.hpp new file mode 100644 index 0000000..7aab9f7 --- /dev/null +++ b/music/MixolydianScale.hpp @@ -0,0 +1,49 @@ +#ifndef _MUSIC_MIXOLYDIANSCALE_HPP_ +#define _MUSIC_MIXOLYDIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class MixolydianScale : public Scale +{ +public: + MixolydianScale(Note root=Note::D,const String &description="MixolydianScale"); + virtual ~MixolydianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +MixolydianScale::MixolydianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +MixolydianScale::~MixolydianScale() +{ +} + +inline +void MixolydianScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif diff --git a/music/NeapolitanMajorScale.hpp b/music/NeapolitanMajorScale.hpp new file mode 100644 index 0000000..898387f --- /dev/null +++ b/music/NeapolitanMajorScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_NEAPOLITANMAJORSCALE_HPP_ +#define _MUSIC_NEAPOLITANMAJORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class NeapolitanMajorScale : public Scale +{ +public: + NeapolitanMajorScale(Note root=Note::A,const String &description="NeapolitanMajorScale"); + NeapolitanMajorScale(const IonianScale &ionianScale); + NeapolitanMajorScale &operator=(const IonianScale &ionianScale); + virtual ~NeapolitanMajorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +NeapolitanMajorScale::NeapolitanMajorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +NeapolitanMajorScale::~NeapolitanMajorScale() +{ +} + +inline +void NeapolitanMajorScale::createScale() +{ + Note root(getRoot()); // H W W W W W H + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/NeapolitanMinorScale.hpp b/music/NeapolitanMinorScale.hpp new file mode 100644 index 0000000..0dd5cab --- /dev/null +++ b/music/NeapolitanMinorScale.hpp @@ -0,0 +1,54 @@ +#ifndef _MUSIC_NEAPOLITANMINORSCALE_HPP_ +#define _MUSIC_NEAPOLITANMINORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class NeapolitanMinorScale : public Scale +{ +public: + NeapolitanMinorScale(Note root=Note::A,const String &description="NeapolitanMinorScale"); + NeapolitanMinorScale(const IonianScale &ionianScale); + NeapolitanMinorScale &operator=(const IonianScale &ionianScale); + virtual ~NeapolitanMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +NeapolitanMinorScale::NeapolitanMinorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +NeapolitanMinorScale::~NeapolitanMinorScale() +{ +} + +inline +void NeapolitanMinorScale::createScale() +{ + Note root(getRoot()); // H W W W H 1-1/2 H + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/Notes.cpp b/music/Notes.cpp new file mode 100644 index 0000000..bdef4af --- /dev/null +++ b/music/Notes.cpp @@ -0,0 +1,77 @@ +#include +#include +#include +#include +#include + +bool Notes::remove(const Note ¬e) +{ + int count=0; + for(int index=0;index::remove(index); + index=-1; + count++; + continue; + } + } + return count?true:false; +} + +void Notes::sort(void) +{ + QuickSort sorter; + sorter.sortItems(*this); +} + +void Notes::off(MIDIOutputDevice &device)const +{ + for(int index=0;index&)*this).operator[](index).noteOff(device); + } +} + +bool Notes::play(MIDIOutputDevice &device,int interNoteDelay,bool noteOffAfterPlay)const +{ + if(!device.hasDevice())return false; + for(int index=0;index&)*this).operator[](index).noteOn(device); + ::Sleep(interNoteDelay); + if(noteOffAfterPlay)((Block&)*this).operator[](index).noteOff(device); + } + return true; +} + +bool Notes::playBack(MIDIOutputDevice &device,bool noteOffAfterPlay)const +{ + if(!device.hasDevice())return false; + for(int index=size()-1;index>=0;index--) + { + ((Block&)*this).operator[](index).noteOn(device); + ::Sleep(getDelay()/1); + if(noteOffAfterPlay)((Block&)*this).operator[](index).noteOff(device); + } + return true; +} + +String Notes::toString(void)const +{ + String str; + for(int index=0;index +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif + +class MIDIOutputDevice; + +class Notes : public Block +{ +public: + enum {DefaultDelay=150}; + Notes(); + virtual ~Notes(); + void off(MIDIOutputDevice &device)const; + bool play(MIDIOutputDevice &device,int interNoteDelay=DefaultDelay,bool noteOffAfterPlay=true)const; + bool playBack(MIDIOutputDevice &device,bool noteOffAfterPlay=true)const; + String toString(void)const; + void sort(void); + void pause(int msecs=DefaultDelay*2); + DWORD size(void)const; + void size(DWORD size); + bool remove(const Note ¬e); + void remove(void); +protected: + virtual int getDelay()const; +private: +}; + +inline +Notes::Notes() +{ +} + +inline +Notes::~Notes() +{ +} + +inline +void Notes::pause(int msecs) +{ + ::Sleep(msecs); +} + +inline +DWORD Notes::size(void)const +{ + return Block::size(); +} + +inline +void Notes::size(DWORD size) +{ + Block::remove(); + for(int index=0;index::remove(); +} +#endif diff --git a/music/OrientalScale.hpp b/music/OrientalScale.hpp new file mode 100644 index 0000000..8e184c9 --- /dev/null +++ b/music/OrientalScale.hpp @@ -0,0 +1,55 @@ +#ifndef _MUSIC_ORIENTALSCALE_HPP_ +#define _MUSIC_ORIENTALSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class OrientalScale : public Scale +{ +public: + OrientalScale(Note root=Note::A,const String &description="OrientalScale"); + OrientalScale(const IonianScale &ionianScale); + OrientalScale &operator=(const IonianScale &ionianScale); + virtual ~OrientalScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +OrientalScale::OrientalScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +OrientalScale::~OrientalScale() +{ +} + +inline +void OrientalScale::createScale() +{ + Note root(getRoot()); // H 1-1/2 H H 1-1/2 H W + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/PentatonicMinorBluesScale.hpp b/music/PentatonicMinorBluesScale.hpp new file mode 100644 index 0000000..d63bd6a --- /dev/null +++ b/music/PentatonicMinorBluesScale.hpp @@ -0,0 +1,49 @@ +#ifndef _MUSIC_PENTATONICMINORBLUESSCALE_HPP_ +#define _MUSIC_PENTATONICMINORBLUESSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class PentatonicMinorBluesScale : public Scale +{ +public: + enum{CNotes=6}; + PentatonicMinorBluesScale(Note root=Note::A,const String &description="PentatonicMinorBluesScale"); + virtual ~PentatonicMinorBluesScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +PentatonicMinorBluesScale::PentatonicMinorBluesScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +PentatonicMinorBluesScale::~PentatonicMinorBluesScale() +{ +} + +inline +void PentatonicMinorBluesScale::createScale() +{ + size(CNotes); + Note root(getRoot()); + Notes::operator[](0)=root; // I + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](1)=root; // IIIb + root+=Note::WholeStep; + Notes::operator[](2)=root; // IV + root+=Note::HalfStep; + Notes::operator[](3)=root; // Vb + root+=Note::HalfStep; + Notes::operator[](4)=root; // V + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](5)=root; // VIIb +} +#endif \ No newline at end of file diff --git a/music/PentatonicMinorScale.hpp b/music/PentatonicMinorScale.hpp new file mode 100644 index 0000000..f7b1d71 --- /dev/null +++ b/music/PentatonicMinorScale.hpp @@ -0,0 +1,47 @@ +#ifndef _MUSIC_PENTATONICMINORSCALE_HPP_ +#define _MUSIC_PENTATONICMINORSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class PentatonicMinorScale : public Scale +{ +public: + enum{CNotes=5}; + PentatonicMinorScale(Note root=Note::A,const String &description="PentatonicMinorScale"); + virtual ~PentatonicMinorScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +PentatonicMinorScale::PentatonicMinorScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +PentatonicMinorScale::~PentatonicMinorScale() +{ +} + +inline +void PentatonicMinorScale::createScale() +{ + size(5); + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](4)=root; +} +#endif \ No newline at end of file diff --git a/music/PhrygianDominantScale.hpp b/music/PhrygianDominantScale.hpp new file mode 100644 index 0000000..97aa7a7 --- /dev/null +++ b/music/PhrygianDominantScale.hpp @@ -0,0 +1,54 @@ +#ifndef _MUSIC_PHRYGIANDOMINANTSCALE_HPP_ +#define _MUSIC_PHRYGIANDOMINANTSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class PhrygianDominantScale : public Scale +{ +public: + PhrygianDominantScale(Note root=Note::A,const String &description="PhrygianDominantScale"); + PhrygianDominantScale(const IonianScale &ionianScale); + PhrygianDominantScale &operator=(const IonianScale &ionianScale); + virtual ~PhrygianDominantScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +PhrygianDominantScale::PhrygianDominantScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +PhrygianDominantScale::~PhrygianDominantScale() +{ +} + +inline +void PhrygianDominantScale::createScale() +{ + Note root(getRoot()); // H 1-1/2 H W H W W + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/PhrygianScale.hpp b/music/PhrygianScale.hpp new file mode 100644 index 0000000..9881887 --- /dev/null +++ b/music/PhrygianScale.hpp @@ -0,0 +1,49 @@ +#ifndef _GUITAR_PHRYGIANSCALE_HPP_ +#define _GUITAR_PHRYGIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class PhrygianScale : public Scale +{ +public: + PhrygianScale(Note root=Note::B,const String &description="PhrygianScale"); + virtual ~PhrygianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +PhrygianScale::PhrygianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +PhrygianScale::~PhrygianScale() +{ +} + +inline +void PhrygianScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/Progression.hpp b/music/Progression.hpp new file mode 100644 index 0000000..7cc7025 --- /dev/null +++ b/music/Progression.hpp @@ -0,0 +1,118 @@ +#ifndef _MUSIC_PROGRESSION_HPP_ +#define _MUSIC_PROGRESSION_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _MUSIC_SCALES_HPP_ +#include +#endif + +namespace Music +{ +class Progression : public Block +{ +public: + typedef enum ProgressionType{PII_V_I,PV_V,PI_VI_II_V,PIII_VI_II_V}; + void createProgression(ProgressionType progressionType,const Note &rootNote); + void play(MIDIOutputDevice &midiOut); +private: + void handleIII_VI_II_V(const Note &rootNote); + void handleII_V_I(const Note &rootNote); + void handleI_VI_II_V(const Note &rootNote); + void handleV_V(const Note &rootNote); +}; + +void Progression::createProgression(ProgressionType progressionType,const Note &rootNote) +{ + remove(); + switch(progressionType) + { + case PII_V_I : + handleII_V_I(rootNote); + break; + case PV_V : + handleV_V(rootNote); + break; + case PI_VI_II_V : + handleI_VI_II_V(rootNote); + break; + case PIII_VI_II_V : + handleIII_VI_II_V(rootNote); + break; + } +} + +inline +void Progression::handleII_V_I(const Note &rootNote) +{ + LydianScale lydianScale; + MixolydianScale mixolydianScale; + DorianScale dorianScale; + + lydianScale.setRoot(rootNote); + dorianScale.setRoot(rootNote.getSecond()); + mixolydianScale.setRoot(rootNote.getFifth()); + insert(&dorianScale.getI7Chord()); // insert the minor7/II chord + insert(&mixolydianScale.getI7Chord()); // insert the dominant/V chord + insert(&lydianScale.getI7Chord()); // insert the maj7th/I chord +} + + +inline +void Progression::handleI_VI_II_V(const Note &rootNote) +{ + LydianScale lydianScale; + MixolydianScale mixolydianScale; + DorianScale dorianScale; + + lydianScale.setRoot(rootNote); + mixolydianScale.setRoot(rootNote.getSixth()); + dorianScale.setRoot(rootNote.getSecond()); + insert(&lydianScale.getI7Chord()); + insert(&mixolydianScale.getI7Chord()); + insert(&dorianScale.getI7Chord()); + mixolydianScale.setRoot(rootNote.getFifth()); + insert(&mixolydianScale.getI7Chord()); +} + +inline +void Progression::handleIII_VI_II_V(const Note &rootNote) +{ + DorianScale dorianScale; + PhrygianScale phrygianScale; + MixolydianScale mixolydianScale; + phrygianScale.setRoot(rootNote.getThird()); + insert(&phrygianScale.getI7Chord()); + mixolydianScale.setRoot(rootNote.getSixth()); + insert(&mixolydianScale.getI7Chord()); + dorianScale.setRoot(rootNote.getSecond()); + insert(&dorianScale.getI7Chord()); + mixolydianScale.setRoot(rootNote.getFifth()); + insert(&mixolydianScale.getI7Chord()); +} + +inline +void Progression::handleV_V(const Note &rootNote) +{ + MixolydianScale mixolydianScale; + mixolydianScale.setRoot(rootNote.getFifth()); + insert(&mixolydianScale.getI7Chord()); // insert the dominant7/V chord + mixolydianScale.setRoot(rootNote); + insert(&mixolydianScale.getI7Chord()); // insert the dominant7/I chord +} + +inline +void Progression::play(MIDIOutputDevice &midiOut) +{ + for(int index=0;index +#endif + +class Random +{ +public: + Random(int maxNum=10); + virtual ~Random(); + void setMax(int maxNum); + int random(void)const; +private: + float mMax; +}; + +inline +Random::Random(int maxNum) +: mMax(maxNum) +{ +} + +inline +Random::~Random() +{ +} + +inline +void Random::setMax(int maxNum) +{ + mMax=maxNum; +} + +inline +int Random::random(void)const +{ + return ((float)mMax/RAND_MAX)*(float)rand(); +} +#endif \ No newline at end of file diff --git a/music/ScanSymbols.hpp b/music/ScanSymbols.hpp new file mode 100644 index 0000000..de099db --- /dev/null +++ b/music/ScanSymbols.hpp @@ -0,0 +1,14 @@ +#ifndef _MUSIC_SCANSYMBOLS_HPP_ +#define _MUSIC_SCANSYMBOLS_HPP_ + +namespace Music +{ + class ScanSymbols + { + public: + typedef enum ScanSymbol{Note1,Degree1,Alter1,Verb1,Slash1,Sharp1,Flat1,Major71,Minor1, + HalfDiminished1,Diminished1,MinorMajor71,Stop1}; + private: + }; +}; +#endif \ No newline at end of file diff --git a/music/SuperLocrianScale.hpp b/music/SuperLocrianScale.hpp new file mode 100644 index 0000000..76f8f69 --- /dev/null +++ b/music/SuperLocrianScale.hpp @@ -0,0 +1,53 @@ +#ifndef _MUSIC_SUPERLCORIANSCALE_HPP_ +#define _MUSIC_SUPERLOCRIANSCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class SuperLocrianScale : public Scale +{ +public: + SuperLocrianScale(Note root=Note::A,const String &description="SuperLocrianScale"); + SuperLocrianScale(const IonianScale &ionianScale); + SuperLocrianScale &operator=(const IonianScale &ionianScale); + virtual ~SuperLocrianScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +SuperLocrianScale::SuperLocrianScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +SuperLocrianScale::~SuperLocrianScale() +{ +} + +inline +void SuperLocrianScale::createScale() +{ + Note root(getRoot()); // H W H W W W W + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; + root+=Note::WholeStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/TodiScale.hpp b/music/TodiScale.hpp new file mode 100644 index 0000000..af8d0e2 --- /dev/null +++ b/music/TodiScale.hpp @@ -0,0 +1,55 @@ +#ifndef _MUSIC_TODISCALE_HPP_ +#define _MUSIC_TODISCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class TodiScale : public Scale +{ +public: + TodiScale(Note root=Note::A,const String &description="TodiScale"); + TodiScale(const IonianScale &ionianScale); + TodiScale &operator=(const IonianScale &ionianScale); + virtual ~TodiScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +TodiScale::TodiScale(Note root,const String &description) +: Scale(root,description) +{ + createScale(); +} + +inline +TodiScale::~TodiScale() +{ +} + +inline +void TodiScale::createScale() +{ + Note root(getRoot()); // H W 1-1/2 H H 1-1/2 H + Notes::operator[](0)=root; + root+=Note::HalfStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](3)=root; + root+=Note::HalfStep; + Notes::operator[](4)=root; + root+=Note::HalfStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + root+=Note::HalfStep; + Notes::operator[](6)=root; + root+=Note::HalfStep; + Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/WholeToneScale.hpp b/music/WholeToneScale.hpp new file mode 100644 index 0000000..8307f69 --- /dev/null +++ b/music/WholeToneScale.hpp @@ -0,0 +1,54 @@ +#ifndef _MUSIC_WHOLETONESCALE_HPP_ +#define _MUSIC_WHOLETONESCALE_HPP_ +#ifndef _MUSIC_SCALE_HPP_ +#include +#endif + +class IonianScale; + +class WholeToneScale : public Scale +{ +public: + WholeToneScale(Note root=Note::A,const String &description="WholeToneScale"); + WholeToneScale(const IonianScale &ionianScale); + WholeToneScale &operator=(const IonianScale &ionianScale); + virtual ~WholeToneScale(); +protected: + virtual void createScale(void); +private: +}; + +inline +WholeToneScale::WholeToneScale(Note root,const String &description) +: Scale(root,description) +{ + size(CNotes-1); + createScale(); +} + +inline +WholeToneScale::~WholeToneScale() +{ +} + +inline +void WholeToneScale::createScale() +{ + Note root(getRoot()); + Notes::operator[](0)=root; + root+=Note::WholeStep; + Notes::operator[](1)=root; + root+=Note::WholeStep; + Notes::operator[](2)=root; + root+=Note::WholeStep; + Notes::operator[](3)=root; + root+=Note::WholeStep; + Notes::operator[](4)=root; + root+=Note::WholeStep; + Notes::operator[](5)=root; + root+=Note::WholeStep; + Notes::operator[](6)=root; +// root+=Note::WholeStep; +// Notes::operator[](7)=root; +} +#endif \ No newline at end of file diff --git a/music/degree.hpp b/music/degree.hpp new file mode 100644 index 0000000..356d1dd --- /dev/null +++ b/music/degree.hpp @@ -0,0 +1,47 @@ +#ifndef _MUSIC_DEGREE_HPP_ +#define _MUSIC_DEGREE_HPP_ + +class Degree +{ +public: + typedef enum Interval{I,II,III,IV,V,VI,VII,None}; // Tonic,Supertonic,Mediant,Subdominant,Dominant,Submediant,Subtonic,None + Degree(Interval interval); + Degree(); + virtual ~Degree(); + Interval getInterval(void)const; + bool operator==(Degree::Interval interval)const; +private: + Interval mInterval; +}; + +inline +Degree::Degree() +{ +} + +inline +Degree::Degree(Interval interval) +: mInterval(interval) +{ +} + +inline +Degree::~Degree() +{ +} + +inline +Degree::Interval Degree::getInterval(void)const +{ + return mInterval; +} + +inline +bool Degree::operator==(Degree::Interval interval)const +{ + return mInterval==interval; +} + + + +#endif diff --git a/music/emitter.cpp b/music/emitter.cpp new file mode 100644 index 0000000..e8a8896 --- /dev/null +++ b/music/emitter.cpp @@ -0,0 +1,80 @@ +#include +#include +#include + +namespace Music +{ + +void Emitter::emit(const Byte &byte,const String &value) +{ + int length(value.length()); + insert(&byte); + insert(&Byte(length)); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include + + +/* +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include includee +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +*/ + +#include + +Console winConsole; + +Notes getNotes(String strLine); +void findScale(Notes ¬es); + +using namespace Music; +void main(int argc,char **argv) +{ + + winConsole.writeLine("Scale v1.00"); + if(2!=argc) + { + winConsole.writeLine("(ie) Scale C,E,G"); + return; + } + Notes notes=getNotes(argv[1]); + findScale(notes); +} + +Notes getNotes(String strLine) +{ + Notes notes; + char *pLine=::strtok(strLine.str(),",\0"); + while(pLine) + { + notes.insert(&Note(pLine)); + pLine=::strtok(0,",\0"); + } + winConsole.writeLine(notes.toString()); + return notes; +} + +void findScale(Notes ¬es) +{ + Block > scales; + + scales.insert(&SmartPointer()); + scales[0]=new IonianScale(); + scales[0].disposition(PointerDisposition::Delete); + + scales.insert(&SmartPointer()); + scales[1]=new DorianScale(); + scales[1].disposition(PointerDisposition::Delete); + + scales.insert(&SmartPointer()); + scales[2]=new DorianIIScale(); + scales[2].disposition(PointerDisposition::Delete); + + scales.insert(&SmartPointer()); + scales[3]=new PhrygianScale(); + scales[3].disposition(PointerDisposition::Delete); + + scales.insert(&SmartPointer()); + scales[4]=new LydianScale(); + scales[4].disposition(PointerDisposition::Delete); + + scales.insert(&SmartPointer()); + scales[5]=new MixolydianScale(); + scales[5].disposition(PointerDisposition::Delete); + + scales.insert(&SmartPointer()); + scales[6]=new AeolianScale(); + scales[6].disposition(PointerDisposition::Delete); + + for(int index=0;indexsetRoot(notes[noteIndex]); + if(scales[index]->contains(notes)) + { + winConsole.writeLine(scales[index]->getDescription()); + winConsole.writeLine(scales[index]->toString()); + winConsole.writeLine(" "); + } + } + } + +/* +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include includee +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +*/ + + +} \ No newline at end of file diff --git a/music/main.cpp b/music/main.cpp new file mode 100644 index 0000000..9ac8b86 --- /dev/null +++ b/music/main.cpp @@ -0,0 +1,346 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +// ********************************************* +// "D-7","G7","C^","Eb-7","Ab7","B-7","E7","Bb-7","Bb7","Db^","C7#9","D7alt","C^#4","Gb^#4","G7#11","F7#11", +// "Gsus","Ebsus","Dsusb9","F#susb9","Ebsusb9","Ab/Eb","G-","" + +/* +ABCDEFG +#b +- +^ + +Note (A-G) +Degree(^,7,9,None) +Inflection(Sharp,Flat,None) +Verb(sus,aug,alt,None) +Inflection(Sharp,Flat,None) +Degree(^,4,7,9,11,None) + +(note1,value) +(degree1,value) +(inflection1,value) +(verb1,value) +*/ + +void testCompiler(); +Notes getNotes(Scale &scale,int noteCount); +Notes getNotes(Music::Chord &chord,int noteCount); +int getCount(void); +int getDelay(int cNotes); + +using namespace Music; +void main() +{ +// testCompiler(); + MIDIOutputDevice midiOut; + + Block chords; + Notes notes; + Music::Chord chord; + Note root; + Note third; + Note fifth; + Note seventh; + + DiminishedHalfScale diminishedScale(Note::E); + + root=diminishedScale.getDegree(Degree::I); + third=diminishedScale.getDegree(Degree::III); + fifth=diminishedScale.getDegree(Degree::V); + + chord.create(root,Chord::ChordType::DominantSeventh); + ::OutputDebugString(chord.toString()+String("\n")); + chords.insert(&chord); + chord.create(third,Chord::ChordType::DominantSeventh); + ::OutputDebugString(chord.toString()+String("\n")); + chords.insert(&chord); + chord.create(fifth,Chord::ChordType::DominantSeventh); + ::OutputDebugString(chord.toString()+String("\n")); + chords.insert(&chord); + chord.create(seventh,Chord::ChordType::DominantSeventh); + ::OutputDebugString(chord.toString()+String("\n")); + chords.insert(&chord); + + int octave=3; + + while(true) + { + DiminishedHalfScale diminishedScale(Note(Note::E,octave)); + + for(int index=0;index chords; + + IonianScale ionianScale; + Note note(Note::GSh); + Degree degree; + + degree=ionianScale.getDegree(note); + if(degree==Degree::None)::OutputDebugString("No degree."); + else ::OutputDebugString("Found degree."); + + + + + + +// chords.insert(&String("C^")); +// chords.insert(&String("Db^")); +// chords.insert(&String("C^#4")); +// chords.insert(&String("D7")); +// chords.insert(&String("D-7")); +// chords.insert(&String("Cb7#9")); +// chords.insert(&String("D-7")); +// chords.insert(&String("G7")); +// chords.insert(&String("Eb-7")); +// chords.insert(&String("G-")); +// chords.insert(&String("Ab7")); +// chords.insert(&String("B-7")); +// chords.insert(&String("F#7")); +// chords.insert(&String("E7")); +// chords.insert(&String("Bb-7")); +// chords.insert(&String("Bb7")); +// chords.insert(&String("C7#9")); +// chords.insert(&String("Gb^#4")); +// chords.insert(&String("G7#11")); +// chords.insert(&String("F7#11")); +// chords.insert(&String("Ebsus")); +// chords.insert(&String("Gsus")); +// chords.insert(&String("E#sus")); +// chords.insert(&String("Dsusb9")); +// chords.insert(&String("F#susb9")); +// chords.insert(&String("Ebsusb9")); +// chords.insert(&String("A-")); +// chords.insert(&String("A-b6")); +// chords.insert(&String("Ah")); for lack of a better system, this is half-diminished, can also do "A-7b5" +// chords.insert(&String("Ao")); diminished + + +// chords.insert(&String("C-^")); // C MinorMajor + +// chords.insert(&String("C-#7")); // C Minor - Sharp 7 a.k.a C Minor Major + +// chords.insert(&String("C7b9")); // C Minor - Sharp 7 a.k.a C Minor Major + + +// chords.insert(&String("D7alt")); // this is based on melodic minor scale +// chords.insert(&String("Ab/Eb")); +// chords.insert(&String("")); + + +// chords.insert(&String("Aalt")); +// chords.insert(&String("A7alt")); + +// Scanner scanner; +// Parser parser; +// scanner.scan(chords[0]); +// Music::Chord chord; +// ::OutputDebugString(scanner.toString()); +// parser.parse(scanner,chord); + +// chords.insert(&String("Esusb9")); + +// chords.insert(&String("E6")); + + + + + + ChordCompiler chordCompiler; + Music::Chord chord; + + chords.insert(&String("Am7")); + + +// chords.insert(&String("A-6")); // A minor 6 +// chords.insert(&String("A-7b5")); // A-half diminished a.k.a "B-7b5" + +// chords.insert(&String("Ah")); // A-half diminished a.k.a "B-7b5" +// chords.insert(&String("A-7b5")); // A-half diminished a.k.a "B-7b5" + + + + for(int index=0;index +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=music - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "music.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "music.mak" CFG="music - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "music - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "music - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "music - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "music - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"../exe/music.lib" + +!ENDIF + +# Begin Target + +# Name "music - Win32 Release" +# Name "music - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\Chord.cpp + +!IF "$(CFG)" == "music - Win32 Release" + +!ELSEIF "$(CFG)" == "music - Win32 Debug" + +# ADD CPP /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\DorianScale.cpp + +!IF "$(CFG)" == "music - Win32 Release" + +!ELSEIF "$(CFG)" == "music - Win32 Debug" + +# ADD CPP /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\emitter.cpp +# End Source File +# Begin Source File + +SOURCE=.\note.cpp + +!IF "$(CFG)" == "music - Win32 Release" + +!ELSEIF "$(CFG)" == "music - Win32 Debug" + +# ADD CPP /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Notes.cpp + +!IF "$(CFG)" == "music - Win32 Release" + +!ELSEIF "$(CFG)" == "music - Win32 Debug" + +# ADD CPP /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\parser.cpp +# End Source File +# Begin Source File + +SOURCE=.\scale.cpp + +!IF "$(CFG)" == "music - Win32 Release" + +!ELSEIF "$(CFG)" == "music - Win32 Debug" + +# ADD CPP /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\scanner.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/music/music.dsw b/music/music.dsw new file mode 100644 index 0000000..a55773a --- /dev/null +++ b/music/music.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "music"=.\music.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/music/music.ncb b/music/music.ncb new file mode 100644 index 0000000..e109997 Binary files /dev/null and b/music/music.ncb differ diff --git a/music/music.opt b/music/music.opt new file mode 100644 index 0000000..06bc44f Binary files /dev/null and b/music/music.opt differ diff --git a/music/music.plg b/music/music.plg new file mode 100644 index 0000000..9a6c147 --- /dev/null +++ b/music/music.plg @@ -0,0 +1,16 @@ + + +
+

Build Log

+

+--------------------Configuration: music - Win32 Debug-------------------- +

+

Command Lines

+ + + +

Results

+music.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/music/musicexe.dsp b/music/musicexe.dsp new file mode 100644 index 0000000..2717db4 --- /dev/null +++ b/music/musicexe.dsp @@ -0,0 +1,182 @@ +# Microsoft Developer Studio Project File - Name="musicexe" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=musicexe - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "musicexe.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "musicexe.mak" CFG="musicexe - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "musicexe - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "musicexe - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "musicexe - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "musicexe - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "musicexe___Win32_Debug" +# PROP BASE Intermediate_Dir "musicexe___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "musicexe - Win32 Release" +# Name "musicexe - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\Chord.cpp + +!IF "$(CFG)" == "musicexe - Win32 Release" + +!ELSEIF "$(CFG)" == "musicexe - Win32 Debug" + +# ADD CPP /Gz /MTd /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\DorianScale.cpp + +!IF "$(CFG)" == "musicexe - Win32 Release" + +!ELSEIF "$(CFG)" == "musicexe - Win32 Debug" + +# ADD CPP /Gz /MTd /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\emitter.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\note.cpp + +!IF "$(CFG)" == "musicexe - Win32 Release" + +!ELSEIF "$(CFG)" == "musicexe - Win32 Debug" + +# ADD CPP /Gz /MTd /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Notes.cpp + +!IF "$(CFG)" == "musicexe - Win32 Release" + +!ELSEIF "$(CFG)" == "musicexe - Win32 Debug" + +# ADD CPP /Gz /MTd /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\parser.cpp +# End Source File +# Begin Source File + +SOURCE=.\scale.cpp + +!IF "$(CFG)" == "musicexe - Win32 Release" + +!ELSEIF "$(CFG)" == "musicexe - Win32 Debug" + +# ADD CPP /Gz /MTd /W1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\scanner.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\Progression.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/music/musicexe.dsw b/music/musicexe.dsw new file mode 100644 index 0000000..15e792b --- /dev/null +++ b/music/musicexe.dsw @@ -0,0 +1,74 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "midisqlib"=..\midiseq\midisqlib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "musicexe"=.\musicexe.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name midisqlib + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/music/musicexe.ncb b/music/musicexe.ncb new file mode 100644 index 0000000..4d02326 Binary files /dev/null and b/music/musicexe.ncb differ diff --git a/music/musicexe.opt b/music/musicexe.opt new file mode 100644 index 0000000..6b5ef35 Binary files /dev/null and b/music/musicexe.opt differ diff --git a/music/musicexe.plg b/music/musicexe.plg new file mode 100644 index 0000000..5c8e5d1 --- /dev/null +++ b/music/musicexe.plg @@ -0,0 +1,44 @@ + + +
+

Build Log

+

+--------------------Configuration: musicexe - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP5.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"debug/musicexe.pch" /YX /Fo"debug/" /Fd"debug/" /FD /GZ /c +"D:\work\music\main.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP5.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP6.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib /nologo /subsystem:console /incremental:yes /pdb:"debug/musicexe.pdb" /debug /machine:I386 /out:"debug/musicexe.exe" /pdbtype:sept +.\debug\Chord.obj +.\debug\DorianScale.obj +.\debug\emitter.obj +.\debug\main.obj +.\debug\note.obj +.\debug\Notes.obj +.\debug\parser.obj +.\debug\scale.obj +.\debug\scanner.obj +\work\exe\msbsp.lib +\work\exe\mscommon.lib +\work\midiseq\msvcobj\midisq.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP6.tmp" +

Output Window

+Compiling... +main.cpp +Linking... +LINK : LNK6004: debug/musicexe.exe not found or not built by the last incremental link; performing full link + + + +

Results

+musicexe.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/music/note.cpp b/music/note.cpp new file mode 100644 index 0000000..07cc250 --- /dev/null +++ b/music/note.cpp @@ -0,0 +1,473 @@ +#include +#include +#include +#include + +// Pitch array for translation to standard guitar tuning +unsigned char Note::pitchArray[Note::Octaves][Note::NotesPerOctave]= +{ +{0,1,2,3,4,5,6,7,8,9,10,11}, +{12,13,14,15,16,17,18,19,20,21,22,23}, +{24,25,26,27,28,29,30,31,32,33,34,35}, +{36,37,38,39,40,41,42,43,44,45,46,47}, +{48,49,50,51,52,53,54,55,56,57,58,59}, +{60,61,62,63,64,65,66,67,68,69,70,71}, +{72,73,74,75,76,77,78,79,80,81,82,83}, +{84,85,86,87,88,89,90,91,92,93,94,95}, +{96,97,98,99,100,101,102,103,104,105,106,107}, +{108,109,110,111,112,113,114,115,116,117,118,119}, +{120,121,122,123,124,125,126,127,0,1,2,3} +}; + +/* Increments the current note 1/2 step +* @param None +* @return None +*/ +const Note &Note::operator++() +{ + mNote++; + if(mNote>B) + { + mNote=C; + mOctave++; + } + return *this; +} + +/* Decrements the current note 1/2 step +* @param None +* @return None +*/ +const Note &Note::operator--() +{ + mNote--; + if(mNoteB) + { + mNote=C+(mNote-B)-1; + mOctave++; + } + return *this; +} + +/* Decrements a Step from the current note +* @param step - step decrement +*/ +const Note &Note::operator-=(Step step) +{ + if(HalfStep==step)return --(*this); + mNote-=step; + if(mNote +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class PureNote; +class MIDIOutputDevice; + +class Note +{ +public: + enum {Octave=4,Octaves=11,NotesPerOctave=12}; + typedef enum NoteType{C,CSh,D,DSh,E,F,FSh,G,GSh,A,ASh,B,None}; + typedef enum Step{HalfStep=1,WholeStep=2}; + Note(); + Note(const Note &pureNote); + Note(const PureNote &pureNote); + Note(const String &strNote,int octave=Octave); + Note(NoteType note,int octave=Octave); + virtual ~Note(); + Note &operator=(const Note ¬e); + bool operator==(const Note ¬e)const; + bool operator<(const Note ¬e)const; + bool operator>(const Note ¬e)const; + const Note &operator++(); // increment by half step + const Note &operator--(); // decrement by half step + Note operator++(int postFixDummy); // postfix increment by half step + Note operator--(int postFixDummy); // postfix decrement by half step + const Note &operator+=(Step step); // increment by step + const Note &operator-=(Step step); // decrement by step + Note getSecond(void)const; + Note getThird(void)const; + Note getMinorThird(void)const; + Note getFourth(void)const; + Note getFifth(void)const; + Note getDiminishedFifth(void)const; + Note getAugmentedFifth(void)const; + Note getSixth(void)const; + Note getSeventh(void)const; + Note getNinth(void)const; + Note getEleventh(void)const; + Note getThirteenth(void)const; + Note getMinorSeventh(void)const; + Note getParentSecond(void)const; // get's the parent who's second is this note + Note getParentFifth(void)const; // get's the parent who's fifth is this note + NoteType getNote(void)const; + void setNote(NoteType noteType); + void setNote(const Note ¬e); + int getOctave(void)const; + void setOctave(int octave); + String toString(void)const; + String toStringWithOctave(void)const; + PureNote toMIDINote(void)const; + bool fromMIDINote(const PureNote &pureNote); + bool noteOn(MIDIOutputDevice &midiDevice); + bool noteOff(MIDIOutputDevice &midiDevice); + static NoteType getNoteType(String note); +private: + BYTE lookupPitch(void)const; + bool lookupNote(int pitch,Note &refNote)const; + + int mNote; + int mOctave; + static unsigned char pitchArray[11][12]; +}; + +inline +Note::Note() +: mNote(A), mOctave(Octave) +{ +} + +inline +Note::Note(const PureNote &pureNote) +{ + fromMIDINote(pureNote); +} + +inline +Note::Note(const String ¬e,int octave) +: mNote(getNoteType(note)), mOctave(octave) +{ +} + +inline +Note::Note(NoteType note,int octave) +: mNote(note), mOctave(octave) +{ +} + +inline +Note::Note(const Note &pureNote) +{ + *this=pureNote; +} + +inline +Note::~Note() +{ +} + +inline +Note &Note::operator=(const Note ¬e) +{ + setNote(note.getNote()); + setOctave(note.getOctave()); + return *this; +} + +inline +bool Note::operator==(const Note ¬e)const +{ + return mNote==note.mNote; +} + +inline +bool Note::operator<(const Note ¬e)const +{ + return mNote(const Note ¬e)const +{ + return mNote>note.mNote; +} + +inline +void Note::setNote(const Note ¬e) +{ + mNote=note.mNote; + mOctave=note.mOctave; +} +#endif diff --git a/music/parser.cpp b/music/parser.cpp new file mode 100644 index 0000000..e8d6b79 --- /dev/null +++ b/music/parser.cpp @@ -0,0 +1,522 @@ +#include +#include +#include + +namespace Music +{ +bool Parser::parse(Emitter &emitter,Music::Chord &chord) +{ + mEmitter=&emitter; + mIndex=0; + Byte peekSymbol; + + mNotes.remove(); + chord.size(0); + mIsInError=false; + while(true) + { + insertSymbols(ScanSymbols::Note1); + if(!nextSymbol())break; // this needs to be removed + if(symbolIn(ScanSymbols::Note1)) + { + parseNote(); + if(!nextSymbol())break; + } + removeSymbols(ScanSymbols::Note1); + if(symbolIn(ScanSymbols::Verb1)) + { + if(!parseVerb())break; + if(!nextSymbol())break; + } + if(symbolIn(ScanSymbols::HalfDiminished1)) + { + parseHalfDiminished(); + if(!nextSymbol())break; + } + if(symbolIn(ScanSymbols::Diminished1)) + { + parseDiminished(); + if(!nextSymbol())break; + } + if(symbolIn(ScanSymbols::MinorMajor71)) + { + parseMinorMajor(); + if(!nextSymbol())break; + } + if(symbolIn(ScanSymbols::Minor1)) // parseMinor looks for minor-degree + { + parseMinor(); + if(!nextSymbol())break; + } + if(symbolIn(ScanSymbols::Major71)) + { + parseMajorSeventh(); + } + if(symbolIn(ScanSymbols::Degree1)) + { + parseDegree(); + if(!nextSymbol())break; + } + if(symbolIn(ScanSymbols::Alter1)) + { + parseAlteration(); + if(!nextSymbol())break; + } + } + if(mIsInError)return false; + if(!mNotes.size()) + { + chord.create(mRootNote,Music::Chord::MajorTriad); + } + else + { + Notes ¬es=(Notes&)chord; + notes.size(mNotes.size()+1); + notes[0]=mRootNote; + for(int index=0;indexpeekSymbol(); + + if(ScanSymbols::Degree1!=peekSymbol) + { + Note minorThird; + Note perfectFifth; + minorThird=mRootNote.getThird(); + minorThird--; + mNotes.insert(&minorThird); + perfectFifth=mRootNote.getFifth(); + mNotes.insert(&perfectFifth); + } + else if(ScanSymbols::Degree1==peekSymbol) + { + expect(ScanSymbols::Degree1); + if(3==mByteValue.value()) + { + Note minorThird=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + minorThird--; + if(!haveNote(minorThird))mNotes.insert(&minorThird); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + } + else if(4==mByteValue.value()) + { + Note minorFourth=mRootNote.getFourth(); + Note perfectFifth=mRootNote.getFifth(); + minorFourth--; + if(!haveNote(minorFourth))mNotes.insert(&minorFourth); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + } + else if(5==mByteValue.value()) + { + Note minorFifth=mRootNote.getFifth(); + Note minorThird=mRootNote.getThird(); + minorFifth--; + minorThird--; + if(!haveNote(minorFifth))mNotes.insert(&minorFifth); + if(!haveNote(minorThird))mNotes.insert(&minorThird); + } + else if(6==mByteValue.value()) + { + Note perfectFifth=mRootNote.getFifth(); + Note minorThird=mRootNote.getThird(); + Note majorSixth=mRootNote.getSixth(); + minorThird--; + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(minorThird))mNotes.insert(&minorThird); + if(!haveNote(majorSixth))mNotes.insert(&majorSixth); + } + else if(7==mByteValue.value()) + { + Note minorThird=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + Note minorSeventh=mRootNote.getSeventh(); + minorSeventh--; + minorThird--; + if(!haveNote(minorThird))mNotes.insert(&minorThird); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(minorSeventh))mNotes.insert(&minorSeventh); + } + else if(9==mByteValue.value()) + { + Note minorThird=mRootNote.getThird(); + Note minorNinth=mRootNote.getNinth(); + Note perfectFifth=mRootNote.getFifth(); + minorNinth--; + minorThird--; + if(!haveNote(minorThird))mNotes.insert(&minorThird); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(minorNinth))mNotes.insert(&minorNinth); + } + else if(11==mByteValue.value()) + { + Note minorThird=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + Note minorEleventh=mRootNote.getEleventh(); + minorThird--; + minorEleventh--; + + if(!haveNote(minorThird))mNotes.insert(&minorThird); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(minorEleventh))mNotes.insert(&minorEleventh); + } + else if(13==mByteValue.value()) + { + Note minorThird=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + Note minorThirteenth=mRootNote.getThirteenth(); + + minorThirteenth--; + minorThird--; + if(!haveNote(minorThird))mNotes.insert(&minorThird); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(minorThirteenth))mNotes.insert(&minorThirteenth); + } + } + return true; +} + +bool Parser::parseMinorMajor(void) // minor major is basically a minor chord with a #7 +{ + Note minorThird; + Note perfectFifth; + Note majorSeventh; + minorThird=mRootNote.getThird(); + minorThird--; + mNotes.insert(&minorThird); + perfectFifth=mRootNote.getFifth(); + mNotes.insert(&perfectFifth); + majorSeventh=mRootNote.getSeventh(); + mNotes.insert(&majorSeventh); + return true; +} + +bool Parser::parseDegree(void) +{ + if(3==mByteValue.value()) + { + Note third=mRootNote.getThird(); + if(!haveNote(third))mNotes.insert(&third); + } + else if(4==mByteValue.value()) + { + Note fourth=mRootNote.getFourth(); + if(!haveNote(fourth))mNotes.insert(&fourth); + } + else if(5==mByteValue.value()) + { + Note fifth=mRootNote.getFifth(); + if(!haveNote(fifth))mNotes.insert(&fifth); + } + else if(6==mByteValue.value()) + { + Note sixth=mRootNote.getSixth(); + Note third=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + if(!haveNote(sixth))mNotes.insert(&sixth); + if(!haveNote(third))mNotes.insert(&third); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + } + else if(7==mByteValue.value()) + { + Note third=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + Note minorSeventh=mRootNote.getSeventh(); + minorSeventh--; + if(!haveNote(third))mNotes.insert(&third); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(minorSeventh))mNotes.insert(&minorSeventh); + } + else if(9==mByteValue.value()) + { + Note third=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + Note ninth=mRootNote.getNinth(); + if(!haveNote(third))mNotes.insert(&third); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(ninth))mNotes.insert(&ninth); + } + else if(11==mByteValue.value()) + { + Note third=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + Note eleventh=mRootNote.getEleventh(); + if(!haveNote(third))mNotes.insert(&third); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(eleventh))mNotes.insert(&eleventh); + } + else if(13==mByteValue.value()) + { + Note third=mRootNote.getThird(); + Note perfectFifth=mRootNote.getFifth(); + Note thirteenth=mRootNote.getThirteenth(); + if(!haveNote(third))mNotes.insert(&third); + if(!haveNote(perfectFifth))mNotes.insert(&perfectFifth); + if(!haveNote(thirteenth))mNotes.insert(&thirteenth); + } + return false; +} + +bool Parser::parseAlteration(void) +{ + Byte inflection=mByteValue; + expect(ScanSymbols::Degree1); + Note note(mRootNote.getNinth()); + if(3==mByteValue.value()) + { + note=mRootNote.getThird(); + } + else if(4==mByteValue.value()) + { + note=mRootNote.getFourth(); + } + else if(5==mByteValue.value()) + { + note=mRootNote.getFifth(); + } + else if(6==mByteValue.value()) + { + note=mRootNote.getSixth(); + } + else if(7==mByteValue.value()) + { + note=mRootNote.getSeventh(); + } + else if(9==mByteValue.value()) + { + note=mRootNote.getNinth(); + } + else if(11==mByteValue.value()) + { + note=mRootNote.getEleventh(); + } + else if(13==mByteValue.value()) + { + note=mRootNote.getThirteenth(); + } + mNotes.remove(note); // if the note already exists then remove it because we're altering it. + if(ScanSymbols::Sharp1==inflection)note++; + else note--; + mNotes.insert(¬e); + return true; +} + +bool Parser::parseNote(void) +{ + switch(mByteValue.value()) + { + case 'A' : + mRootNote=Note(Note::A); + mRootNote.setOctave(mRootNote.getOctave()-1); + break; + case 'B' : + mRootNote=Note(Note::B); + mRootNote.setOctave(mRootNote.getOctave()-1); + break; + case 'C' : + mRootNote=Note(Note::C); + mRootNote.setOctave(mRootNote.getOctave()-1); + break; + case 'D' : + mRootNote=Note(Note::D); + mRootNote.setOctave(mRootNote.getOctave()-1); + break; + case 'E' : + mRootNote=Note(Note::E); + mRootNote.setOctave(mRootNote.getOctave()-1); + break; + case 'F' : + mRootNote=Note(Note::F); + mRootNote.setOctave(mRootNote.getOctave()-1); + break; + case 'G' : + mRootNote=Note(Note::G); + mRootNote.setOctave(mRootNote.getOctave()-1); + break; + } + if(ScanSymbols::Alter1==peekSymbol()) + { + expect(ScanSymbols::Alter1); + if(mByteValue.value()==ScanSymbols::Sharp1)mRootNote++; + else mRootNote--; + } + return true; +} + +ScanSymbols::ScanSymbol Parser::peekSymbol(void) +{ + if(mIndex>=mEmitter->size())return ScanSymbols::Stop1; + return (ScanSymbols::ScanSymbol)(*mEmitter)[mIndex].value(); +} + +bool Parser::nextSymbol() +{ + int length; + int index; + bool returnCode; + + if(mIndex+1>=mEmitter->size())return false; + returnCode=true; + mKey=(ScanSymbols::ScanSymbol)(*mEmitter)[mIndex++].value(); + switch(mKey) + { + case ScanSymbols::Note1 : + mByteValue=(*mEmitter)[mIndex++].value(); + break; + case ScanSymbols::Degree1 : + mByteValue=(*mEmitter)[mIndex++].value(); + break; + case ScanSymbols::Alter1 : + mByteValue=(*mEmitter)[mIndex++].value(); + break; + case ScanSymbols::Verb1 : + length=(*mEmitter)[mIndex++].value(); + mStrValue.reserve(length+1); + for(index=0;index &symbols) +{ + for(int index=0;index &symbols) +{ + for(int index=0;index &symbols) +{ + for(int index=0;index&)mNotes)[0]==third)return false; + return true; +} +}; \ No newline at end of file diff --git a/music/parser.hpp b/music/parser.hpp new file mode 100644 index 0000000..8583a75 --- /dev/null +++ b/music/parser.hpp @@ -0,0 +1,78 @@ +#ifndef _MUSIC_PARSER_HPP_ +#define _MUSIC_PARSER_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _MUSIC_NOTE_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif +#ifndef _MUSIC_EMITTER_HPP_ +#include +#endif +#ifndef _MUSIC_SCANSYMBOLS_HPP_ +#include +#endif + +namespace Music +{ + +class Parser +{ +public: + Parser(); + virtual ~Parser(); + bool parse(Emitter &input,Music::Chord &chord); +private: + bool nextSymbol(); + ScanSymbols::ScanSymbol peekSymbol(void); + void insertSymbols(ScanSymbols::ScanSymbol symbol); + void insertSymbols(Block &symbols); + void removeSymbols(ScanSymbols::ScanSymbol symbol); + void removeSymbols(Block &symbols); + bool symbolIn(Block &symbols); + bool symbolIn(Byte &symbol); + bool symbolIn(ScanSymbols::ScanSymbol symbol); + bool checkSymbol(void); + bool expect(ScanSymbols::ScanSymbol symbol); + bool parseNote(void); + bool parseDegree(void); + bool parseAlteration(void); + bool parseMinor(void); + bool parseVerb(void); + bool parseMajorSeventh(void); + bool parseHalfDiminished(void); + bool parseDiminished(void); + bool parseMinorMajor(void); + bool haveNote(const Note ¬e); + bool isMinor(void)const; + + Block mNoteSymbols; + Block mSharpFlatSymbols; + Block mSymbols; + SmartPointer mEmitter; + ScanSymbols::ScanSymbol mKey; + Byte mByteValue; + String mStrValue; + Note mRootNote; + Notes mNotes; + int mIndex; + bool mIsInError; +}; + +inline +Parser::Parser() +{ + mNoteSymbols.insert(&Byte(ScanSymbols::Note1)); + mSharpFlatSymbols.insert(&Byte(ScanSymbols::Sharp1)); + mSharpFlatSymbols.insert(&Byte(ScanSymbols::Flat1)); +} + +inline +Parser::~Parser() +{ +} +}; +#endif diff --git a/music/scale.cpp b/music/scale.cpp new file mode 100644 index 0000000..e5f1a41 --- /dev/null +++ b/music/scale.cpp @@ -0,0 +1,77 @@ +#include + +Music::Chord Scale::getIChord(void)const +{ + Music::Chord iChord; + iChord.size(3); + iChord[0]=((Notes&)*this).operator[](0); + iChord[1]=((Notes&)*this).operator[](2); + iChord[2]=((Notes&)*this).operator[](4); + return iChord; +} + +Music::Chord Scale::getI7Chord(void)const +{ + Music::Chord iChord; + iChord.size(4); + iChord[0]=((Notes&)*this).operator[](0); + iChord[1]=((Notes&)*this).operator[](2); + iChord[2]=((Notes&)*this).operator[](4); + iChord[3]=size()<7?iChord[0]:((Notes&)*this).operator[](6); + return iChord; +} + +Music::Chord Scale::getIVChord(void)const +{ + Music::Chord ivChord; + ivChord.size(3); + ivChord[0]=((Notes&)*this).operator[](0); + ivChord[1]=((Notes&)*this).operator[](3); + ivChord[2]=((Notes&)*this).operator[](5); + return ivChord; +} + +Music::Chord Scale::getV7Chord(void)const +{ + Music::Chord v7Chord; + v7Chord.size(3); + v7Chord[0]=((Notes&)*this).operator[](3); + v7Chord[1]=((Notes&)*this).operator[](4); + Note note(((Notes&)*this).operator[](0)); + note--; + v7Chord[2]=note; + return v7Chord; +} + +Degree Scale::getDegree(const Note ¬e) +{ + for(int index=0;index +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=scale - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "scale.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "scale.mak" CFG="scale - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "scale - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "scale - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "scale - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "scale - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "scale___Win32_Debug" +# PROP BASE Intermediate_Dir "scale___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "scale - Win32 Release" +# Name "scale - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\findscale.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/music/scale.dsw b/music/scale.dsw new file mode 100644 index 0000000..4d47c97 --- /dev/null +++ b/music/scale.dsw @@ -0,0 +1,74 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "midisqlib"=..\midiseq\midisqlib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "music"=.\music.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "scale"=.\scale.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name music + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name midisqlib + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/music/scale.hpp b/music/scale.hpp new file mode 100644 index 0000000..c537e2c --- /dev/null +++ b/music/scale.hpp @@ -0,0 +1,117 @@ +#ifndef _MUSIC_SCALE_HPP_ +#define _MUSIC_SCALE_HPP_ +#ifndef _MUSIC_NOTES_HPP_ +#include +#endif +#ifndef _MUSIC_DEGREE_HPP_ +#include +#endif +#ifndef _MUSIC_CHORD_HPP_ +#include +#endif + +class Scale : public Notes +{ +public: + enum{CNotes=8}; + enum{Delay=200}; + Scale(Note root=Note::G,const String &description=String()); + Scale(Note root=Note::G,int octave=Note::Octave,const String &description=String()); + virtual ~Scale(); + const String &getDescription(void)const; + void setDescription(const String &description); + const Note &getRoot(void)const; + void setRoot(const Note &root); + Music::Chord getIChord(void)const; + Music::Chord getI7Chord(void)const; + Music::Chord getIVChord(void)const; + Music::Chord getV7Chord(void)const; + const Note &getDegree(Degree degree)const; + Degree getDegree(const Note ¬e); + bool has(Degree degree)const; + void setDegree(Degree degree,const Note ¬e); + void setDelay(int Delay); + bool contains(const Notes ¬es)const; +protected: + virtual void createScale()=0; + virtual int getDelay(void)const; +private: + Note mRoot; + String mDescription; + int mDelay; +}; + +inline +Scale::Scale(Note root,const String &description) +: mRoot(root), mDescription(description), mDelay(Delay) +{ + size(CNotes); +} + +inline +Scale::Scale(Note root,int octave,const String &description) +: mRoot(root.getNote(),octave), mDescription(description), mDelay(Delay) +{ +} + +inline +Scale::~Scale() +{ +} + +inline +const String &Scale::getDescription(void)const +{ + return mDescription; +} + +inline +void Scale::setDescription(const String &description) +{ + mDescription=description; +} + +inline +const Note &Scale::getRoot(void)const +{ + return mRoot; +} + +inline +void Scale::setRoot(const Note &root) +{ + mRoot=root; + createScale(); +} + +inline +int Scale::getDelay(void)const +{ + return mDelay; +} + +inline +void Scale::setDelay(int delay) +{ + mDelay=delay; +} + +inline +const Note &Scale::getDegree(Degree degree)const +{ + return ((Notes&)*this).operator[](degree.getInterval()); +} + +inline +bool Scale::has(Degree degree)const +{ + if((int)size()>=degree.getInterval())return true; + return false; +} + +inline +void Scale::setDegree(Degree degree,const Note ¬e) +{ + operator[](degree.getInterval())=note; +} +#endif diff --git a/music/scale.ncb b/music/scale.ncb new file mode 100644 index 0000000..4dfc5d3 Binary files /dev/null and b/music/scale.ncb differ diff --git a/music/scale.opt b/music/scale.opt new file mode 100644 index 0000000..cbe2969 Binary files /dev/null and b/music/scale.opt differ diff --git a/music/scale.plg b/music/scale.plg new file mode 100644 index 0000000..05f0f84 --- /dev/null +++ b/music/scale.plg @@ -0,0 +1,35 @@ + + +
+

Build Log

+

+--------------------Configuration: scale - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP65.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/scale.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /GZ /c +"D:\work\music\findscale.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP65.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP66.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib winmm.lib /nologo /subsystem:console /incremental:yes /pdb:"msvcobj/scale.pdb" /debug /machine:I386 /out:"msvcobj/scale.exe" /pdbtype:sept +.\msvcobj\findscale.obj +\work\exe\music.lib +\work\exe\mscommon.lib +\work\midiseq\msvcobj\midisq.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP66.tmp" +

Output Window

+Compiling... +findscale.cpp +Linking... + + + +

Results

+scale.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/music/scales.hpp b/music/scales.hpp new file mode 100644 index 0000000..a991b1a --- /dev/null +++ b/music/scales.hpp @@ -0,0 +1,118 @@ +#ifndef _MUSIC_SCALES_HPP_ +#define _MUSIC_SCALES_HPP_ +#ifndef _MUSIC_IONIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DORIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DORIANIISCALE_HPP_ +#include +#endif +#ifndef _MUSIC_PHRYGIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MIXOLYDIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_AEOLIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LOCRIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MINORPENTATONICSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_HARMONICMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MELODICMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DORIANIISCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANAUGMENTEDSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANDOMINANTSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LOCRIAN2SCALE_HPP_ +#include +#endif +#ifndef _MUSIC_ALTEREDSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DIMINISHEDWHOLESCALE_HPP_ +#include +#endif +#ifndef _MUSIC_DIMINISHEDHALFSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_WHOLETONESCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPDOMINANTSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPMAJORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPTONICMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BEBOPMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_EIGHTTONESPANISHSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_ENIGMATICSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_GYPSYSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_HUNGARIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_HUNGARIANMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LEADINGWHOLETONESCALE_HPP_ +#include +#endif +#ifndef _MUSIC_LYDIANMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_MAJORLOCRIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_NEAPOLITANMAJORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_NEAPOLITANMINORSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_ORIENTALSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_TODISCALE_HPP_ +#include +#endif +#ifndef _MUSIC_SUPERLOCRIANSCALE_HPP_ +#include +#endif +#ifndef _MUSIC_BAROQUESCALE_HPP_ +#include +#endif +#ifndef _MUSIC_PHRYGIANDOMINANTSCALE_HPP_ +#include +#endif +#endif + diff --git a/music/scanner.cpp b/music/scanner.cpp new file mode 100644 index 0000000..2e11b26 --- /dev/null +++ b/music/scanner.cpp @@ -0,0 +1,175 @@ +#include +#include + +namespace Music +{ + +void Scanner::init(const String &chordSymbol) +{ + remove(); + mIndex=0; + mLength=chordSymbol.length(); + if(!mLength)return; + mSymbol=chordSymbol; +} + +char Scanner::peekChar(void) +{ + if(mIndex>=mLength)return -1; + return mSymbol.charAt(mIndex); +} + +char Scanner::nextChar() +{ + if(mIndex+1>mLength)return -1; + return mSymbol.charAt(mIndex++); +} + +void Scanner::pushBack(void) +{ + if(!mIndex)return; + mIndex--; +} + +bool Scanner::scan(const String &chordSymbol) +{ + char symbol; + init(chordSymbol); + while(-1!=(symbol=nextChar())) + { + if(isInflection(symbol)) + scanInflection(symbol); + else if('/'==symbol) + scanSlash(); + else if(isdigit(symbol)) + scanDegree(symbol); + else if('^'==symbol||'-'==symbol) + scanMnemonic(symbol); + else if(isalpha(symbol)) + scanAlpha(symbol); + else + return false; + } + emit(ScanSymbols::Stop1); + if(size()<=1)return false; + return true; +} + +void Scanner::scanAlpha(char symbol) +{ + char nextChar; + + if(isNote(symbol)) + { + emit(ScanSymbols::Note1,Byte(symbol)); + } + else if(isalpha(symbol)&&!isInflection(symbol)&&!isHalfDiminished(symbol)&&!isDiminished(symbol)) + { + string verb; + verb+=tolower(symbol); + while(-1!=(nextChar=this->nextChar())) + { + if(!isalpha(nextChar)||isInflection(nextChar)) + { + pushBack(); + break; + } + verb+=tolower(nextChar); + } + emit(ScanSymbols::Verb1,verb); + } + else if(isalpha(symbol)&&isInflection(symbol)) + { + string verb; + emit(ScanSymbols::Note1,Byte(symbol)); + symbol=this->nextChar(); + scanInflection(symbol); + while(-1!=(nextChar=this->nextChar())) + { + if(!isalpha(nextChar)||isInflection(nextChar)) + { + pushBack(); + break; + } + verb+=tolower(nextChar); + } + emit(ScanSymbols::Verb1,verb); + } + else if(isalpha(symbol)&&isHalfDiminished(symbol)) + { + emit(ScanSymbols::HalfDiminished1); + } + else if(isalpha(symbol)&&isDiminished(symbol)) + { + emit(ScanSymbols::Diminished1); + } + else emit(ScanSymbols::Note1,Byte(symbol)); +} + +bool Scanner::isNote(char symbol) +{ + if('A'==symbol||'B'==symbol||'C'==symbol||'D'==symbol||'E'==symbol||'F'==symbol||'G'==symbol)return true; + return false; +} + +bool Scanner::isInflection(char symbol) +{ + if('b'==symbol||'#'==symbol)return true; + return false; +} + +bool Scanner::isHalfDiminished(char symbol) +{ + if('h'==symbol)return true; + return false; +} + +bool Scanner::isDiminished(char symbol) +{ + if('o'==symbol)return true; + return false; +} + +void Scanner::scanDegree(char symbol) +{ + String str; + + str+=symbol; + while(-1!=(symbol=peekChar())&&isdigit(symbol)) + { + symbol=nextChar(); + str+=symbol; + } + emit(ScanSymbols::Degree1,Byte(str.toInt())); +} + +void Scanner::scanMnemonic(char symbol) +{ + char nextSymbol; + + nextSymbol=peekChar(); + if(symbol=='-' && nextSymbol=='^') + { + emit(ScanSymbols::MinorMajor71); + nextChar(); + } + else if(symbol=='^')emit(ScanSymbols::Major71); + else if(symbol=='-')emit(ScanSymbols::Minor1); +} + +void Scanner::scanInflection(char symbol) +{ + if('b'==symbol)emit(ScanSymbols::Alter1,Byte(ScanSymbols::Flat1)); + else if('#'==symbol)emit(ScanSymbols::Alter1,Byte(ScanSymbols::Sharp1)); +} + +void Scanner::scanSlash() +{ + emit(ScanSymbols::Slash1); +} + +String Scanner::toString(void)const +{ + return Emitter::toString(); +} +}; diff --git a/music/scanner.hpp b/music/scanner.hpp new file mode 100644 index 0000000..ad843ca --- /dev/null +++ b/music/scanner.hpp @@ -0,0 +1,51 @@ +#ifndef _MUSIC_SCANNER_HPP_ +#define _MUSIC_SCANNER_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _MUSIC_EMITTER_HPP_ +#include +#endif + +namespace Music +{ + +class Scanner : public Emitter +{ +public: + Scanner(); + virtual ~Scanner(); + bool scan(const String &chordSymbol); + String toString(void)const; +private: + char peekChar(void); + char nextChar(void); + void pushBack(void); + void init(const String &symbol); + void scanAlpha(char symbol); + void scanDegree(char symbol); + void scanInflection(char symbol); + void scanSlash(char symbol); + void scanMnemonic(char sybmol); + void scanSlash(void); + bool isNote(char symbol); + bool isInflection(char symbol); + bool isHalfDiminished(char symbol); + bool isDiminished(char symbol); + + int mIndex; + int mLength; + String mSymbol; +}; + +inline +Scanner::Scanner() +{ +} + +inline +Scanner::~Scanner() +{ +} +}; +#endif diff --git a/music/scraps.txt b/music/scraps.txt new file mode 100644 index 0000000..d5a71ac --- /dev/null +++ b/music/scraps.txt @@ -0,0 +1,303 @@ +W W H W W W H +C D E F G A B +I II III IV V VI VII + + +inline +void MelodicMinorScale::createScale() +{ + AeolianScale::createScale(); +// Note note=getDegree(Degree::VI); +// note++; // MelodicMinor sharps the 6th of the minor scale + Note note=getDegree(Degree::V); // MelodicMinor sharps the 5th degree of the natural minor scale + note++; + setDegree(Degree::VI,note); + note=getDegree(Degree::VII); + note++; // MelodicMinor sharps the 7th of the natural minor scale + setDegree(Degree::VII,note); +} + + +class Progression +{ +public: + typedef enum Mode{Ionian,Dorian,Phrygian,Lydian,Mixolydian,Aeolian,Locrian}; + Progression(); + virtual ~Progression(); + bool create(Mode mode,Note::NoteType key); +private: + void handleIonian(Note::NoteType key); + void handleDorian(Note::NoteType key); + void handlePhrygian(Note::NoteType key); + void handleLydian(Note::NoteType key); + void handleMixolydian(Note::NoteType key); + void handleAeolian(Note::NoteType key); + void handleLocrian(Note::NoteType key); + + Array mChords; +}; + +Progression::Progression() +{ +} + +Progression::~Progression() +{ +} + +bool Progression::create(Mode mode,Note::NoteType key) +{ + switch(mode) + { + case Ionian : + handleIonian(key); + break; + case Dorian : + handleDorian(key); + break; + case Phrygian : + handlePhrygian(key); + break; + case Lydian : + handleLydian(key); + break; + case Mixolydian : + handleMixolydian(key); + break; + case Aeolian : + handleAeolian(key); + break; + case Locrian : + handleLocrian(key); + break; + } + return false; +} + +void Progression::handleIonian(Note::NoteType key) +{ +} + +void Progression::handleDorian(Note::NoteType key) +{ +} + +void Progression::handlePhrygian(Note::NoteType key) +{ +} + +void Progression::handleLydian(Note::NoteType key) +{ + LydianScale lydianScale(key); +} + +void Progression::handleMixolydian(Note::NoteType key) +{ +} + +void Progression::handleAeolian(Note::NoteType key) +{ +} + +void Progression::handleLocrian(Note::NoteType key) +{ +} + +/* +void main() +{ + MIDIOutputDevice midiOut; + + if(!midiOut.openDevice())return; + Music::Chord chord; + + chord.create(Note::C,Music::Chord::MajorTriad); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::MajorSeventh); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::MinorTriad); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::DiminishedTriad); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::AugmentedTriad); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::DiminishedSeventh); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::HalfDiminishedSeventh); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::MinorSixth); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::MinorSeventh); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::MinorMajorSeventh); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::DominantSixth); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::DominantSeventh); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + + chord.create(Note::C,Music::Chord::MajorSeventh); + ::OutputDebugString(chord.toString()+String("\n")); +// chord.play(midiOut); + +} +*/ + + + class ChordParser + { + public: + static Chord parse(const string &strChord); + private: + ChordParser(); + virtual ~ChordParser(); + }; + +Music::Chord Music::ChordParser::parse(const string &strChordRep) +{ + string strChord(strChordRep); + string strRoot; + bool isSharp; + bool isFlat; + bool isMinor; + int length; + Chord chord; + Chord::ChordType chordType; + Note rootNote; + + isSharp=false; + isFlat=false; + isMinor=false; + chordType=Chord::MajorTriad; + strChord.upper(); + length=strChord.length(); + if(strChord.isNull()||0==length)return Chord(); + strRoot=strChord.substr(0,0); + rootNote=strRoot; + if(1==length) + { + chord.create(rootNote,chordType); + return chord; + } + isSharp=strChord.charAt(1)=='#'; + isFlat=strChord.charAt(1)=='B'; + if(isFlat)rootNote-=Note::HalfStep; + else if(isSharp)rootNote+=Note::HalfStep; + if(isFlat || isSharp)isMinor=strChord.charAt(2)=='-'; + else isMinor=strChord.charAt(1)=='-'; + if(isMinor) + { + chordType=Chord::MinorTriad; // "G-","G-7","Gb-7","Gb-" + if(length==2) + { + chord.create(rootNote,chordType); + return chord; + } + if(strChord.substr(length-1,length-1)=='7') + { + chordType=Chord::MinorSeventh; + chord.create(rootNote,chordType); + return chord; + } + } + else + { + chordType=Chord::MajorTriad; + if(length==2) + { + if(strChord.substr(length-1,length-1)=='^')chordType=Chord::MajorSeventh; + else if(strChord.substr(length-1,length-1)=='7')chordType=Chord::DominantSeventh; + chord.create(rootNote,chordType); + return chord; + } + } + + +// typedef enum ChordType{MajorTriad,MinorTriad,DiminishedTriad,AugmentedTriad,MajorSeventh,DiminishedSeventh, +// HalfDiminishedSeventh,MinorSixth,MinorSeventh,MinorMajorSeventh,DominantSixth,DominantSeventh}; +// void create(const Note &root=Note(Note::C),ChordType chordType=MajorTriad); + + +// void create(const Note &root=Note(Note::C),ChordType chordType=MajorTriad); + + +// if(length>1) + return chord; +} + + +// Music::Chord chord=ChordParser::parse("Gb-7"); +// Music::Chord chord=ChordParser::parse("G-7"); +// Music::Chord chord=ChordParser::parse("G-"); +// Music::Chord chord=ChordParser::parse("G^"); +// Music::Chord chord=ChordParser::parse("G7"); + +// Music::Chord chord=ChordParser::parse("Gb7"); +// ::OutputDebugString(chord.toString()+String("\n")); + + +// insertSymbols(mSharpFlatSymbols); + // if(!nextSymbol())break; +// while(symbolIn(mSharpFlatSymbols)) +// { +// parseSharpsFlats(); +// nextSymbol(); +// } +// removeSymbols(mSharpFlatSymbols); + + if(symbolIn(ScanSymbols::Degree1)) + { + parseDegree(); + nextSymbol(); + } + +// insertSymbols(mSharpFlatSymbols); +// if(!nextSymbol())break; + while(symbolIn(ScanSymbols::Inflection1)) + { + parseSharpsFlats(); + nextSymbol(); + } +// removeSymbols(mSharpFlatSymbols); + + +// if(symbolIn(ScanSymbols::Inflection1)) +// { +// parseInflection(); +// nextSymbol(); +// } + + + if(!nextSymbol())break; + } + return returnCode; + + +/* ::OutputDebugString(mRootNote.toString()+String("\n")); + for(int index=0;index +#include +#include +#include +#include +#include +#include + +BrowseView::BrowseView(void) +{ + mCreateHandler.setCallback(this,&BrowseView::createHandler); + mSizeHandler.setCallback(this,&BrowseView::sizeHandler); + mPaintHandler.setCallback(this,&BrowseView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&BrowseView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&BrowseView::verticalScrollHandler); + mLeftButtonDoubleHandler.setCallback(this,&BrowseView::leftButtonDoubleHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +BrowseView::~BrowseView() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); +} + +CallbackData::ReturnType BrowseView::createHandler(CallbackData &someCallbackData) +{ + mScrollInfo.hwndOwner(*this); + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType BrowseView::sizeHandler(CallbackData &someCallbackData) +{ + if(mThumbPage.rowItems()!=mThumbPage.rowItems(*this)) + { + CursorControl cursorControl; + cursorControl.waitCursor(true); + mThumbPage.isDirty(true); + mThumbPage.update(*this); + mScrollInfo.scrollableObjectDimensions(mThumbPage.width(),mThumbPage.height()); + cursorControl.waitCursor(false); + } + mScrollInfo.handleSize(someCallbackData); + return FALSE; +} + +CallbackData::ReturnType BrowseView::paintHandler(CallbackData &someCallbackData) +{ + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + mThumbPage.draw(paintDevice,Rect(0,0,mThumbPage.width(),mThumbPage.height()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom((paintRect.bottom()-paintRect.top())); + mThumbPage.draw(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType BrowseView::verticalScrollHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleVerticalScroll(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType BrowseView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleHorizontalScroll(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType BrowseView::leftButtonDoubleHandler(CallbackData &someCallbackData) +{ + Point clickPoint(someCallbackData.loWord(),someCallbackData.hiWord()); + CallbackData callbackData; + String strPathFileName; + String strItemName; + + clickPoint.x(clickPoint.x()+mScrollInfo.currScrollx()); + clickPoint.y(clickPoint.y()+mScrollInfo.currScrolly()); + if(!mThumbPage.hitTest(*this,clickPoint,strItemName))return (CallbackData::ReturnType)FALSE; + strPathFileName=getTitle()+String("\\")+strItemName; + callbackData.lParam(int((char*)strPathFileName)); + mSelectHandler.callback(callbackData); + return (CallbackData::ReturnType)FALSE; +} + +bool BrowseView::browse(const String &strPathDirectory) +{ + CursorControl cursorControl; + Block strPathFileNames; + PureDevice pureDevice(*this); + Progress progress(*this); + PakEntry pakEntry; + + setTitle(strPathDirectory); + if(strPathDirectory.isNull())return FALSE; + cursorControl.waitCursor(true); + getDirectoryFileNames(strPathDirectory,strPathFileNames); + mMediaPak.open(strPathDirectory+String(".pak"),MediaPak::OpenAlways); + if(mMediaPak.entries()) + { + PakEntry pakEntry; + DWORD pakEntries; + + pakEntries=mMediaPak.entries(); + progress.setCaption("Reading Thumbnails..."); + progress.range(pakEntries); + progress.show(true); + for(int index=0;index rawData; + PakEntry pakEntry; + + String &strPathFileName=strPathFileNames[index]; + progress.setText(String("Reading '")+strPathFileName+String("'...")); + progress++; + mThumbPage.insert(strPathFileName); + mThumbPage[mThumbPage.entries()-1].getRawData(rawData); + pakEntry.type(PakEntry::Blob); + pakEntry.name(strPathFileName); + pakEntry.id(mMediaPak.entries()); + pakEntry.rawData(rawData); + mMediaPak.add(pakEntry); + } + } + mThumbPage.update(*this); + mScrollInfo.scrollableObjectDimensions(mThumbPage.width(),mThumbPage.height()); + cursorControl.waitCursor(false); + invalidate(false); + return TRUE; +} + +void BrowseView::merge(Progress &progress,MediaPak &mediaPak,Block &strPathDirFileNames,const String &strPathDirectory) +{ + BTree strPathFileNames; + EntryInfo entryInfo; + String strFound; + int index; + + progress.setCaption("Scanning for updates..."); + progress.range(mediaPak.entries()); + progress.setPosition(0); + for(index=0;index rawData; + PakEntry pakEntry; + + String &strFileName=strPathDirFileNames[index]; + progress.setPosition(index); + progress.setText(String("Adding '")+strFileName+String("'...")); + strPathFileNames.insert(strPathDirFileNames[index]); + String strPathFileName(strPathDirectory+String("\\")+strFileName); + mThumbPage.insert(strPathFileName); + mThumbPage[mThumbPage.entries()-1].getRawData(rawData); + pakEntry.type(PakEntry::Blob); + pakEntry.name(strFileName); + pakEntry.id(mMediaPak.entries()); + pakEntry.rawData(rawData); + mMediaPak.add(pakEntry); + progress++; + } + } +} + +bool BrowseView::getDirectoryFileNames(const String &strDirectory,Block &strPathFileNames) +{ + PathFind pathFind; + + strPathFileNames.remove(); + pathFind.fileList(strDirectory+String("\\")+String("*.jpg"),strPathFileNames); + return strPathFileNames.size()?true:false; +} + +void BrowseView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +String BrowseView::getTitle(void)const +{ + String strCaption; + + windowText(strCaption); + return strCaption.betweenString('[',']'); +} + +// *** virtuals + +void BrowseView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void BrowseView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; +} + diff --git a/nntp/BRWSVIEW.HPP b/nntp/BRWSVIEW.HPP new file mode 100644 index 0000000..6e1eeaf --- /dev/null +++ b/nntp/BRWSVIEW.HPP @@ -0,0 +1,67 @@ +#ifndef _NNTP_BROWSEVIEW_HPP_ +#define _NNTP_BROWSEVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif +#ifndef _NNTP_THUMBPAGE_HPP_ +#include +#endif +#ifndef _JPGIMG_SCROLLINFO_HPP_ +#include +#endif +#ifndef _MEDIAPAK_MEDIAPAK_HPP_ +#include +#endif + +class Progress; + +class BrowseView : public MDIWindow +{ +public: + BrowseView(void); + virtual ~BrowseView(); + bool browse(const String &strPathDirectoryName); + void setHandler(PureCallback *pCallback); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonDoubleHandler(CallbackData &someCallbackData); + bool getDirectoryFileNames(const String &strDirectory,Block &strPathFileNames); + void merge(Progress &progress,MediaPak &mediaPak,Block &strPathDirFileNames,const String &strPathDirectory); + void setTitle(const String &strTitle); + String getTitle(void)const; + void analyze(PakEntry &pakEntry); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mLeftButtonDoubleHandler; + ScrollInfo mScrollInfo; + MediaPak mMediaPak; + ThumbPage mThumbPage; + CallbackPointer mSelectHandler; +}; + +inline +void BrowseView::setHandler(PureCallback *pCallback) +{ + mSelectHandler=CallbackPointer(pCallback); +} +#endif diff --git a/nntp/BUILD.BAT b/nntp/BUILD.BAT new file mode 100644 index 0000000..422480a --- /dev/null +++ b/nntp/BUILD.BAT @@ -0,0 +1,43 @@ +SET INCLUDE=C:\PARTS\MSDEV\INCLUDE;C:\PARTS;.;.. +SET LIB=C:\PARTS\MSDEV\LIB +cd.. +cd bsptree +nmake -fbsptree.mak +if errorlevel 1 goto done +cd.. +cd common +nmake -fcommon.mak +if errorlevel 1 goto done +cd.. +cd display +nmake -fdisplay.mak +if errorlevel 1 goto done +cd.. +cd socket +nmake -fsocket.mak +if errorlevel 1 goto done +cd.. +cd rasapi +nmake -frasapi.mak +if errorlevel 1 goto done +cd.. +cd uudecode +nmake -fdecode.mak +if errorlevel 1 goto done +cd.. +cd imagelst +nmake -fimagelst.mak +if errorlevel 1 goto done +cd.. +cd thread +nmake -fthread.mak +if errorlevel 1 goto done +cd.. +cd nntp +nmake -fnntp.mak +cd .. +@echo build complete +goto success +:done +cd.. +:success diff --git a/nntp/CBOX.BMP b/nntp/CBOX.BMP new file mode 100644 index 0000000..f84b19d Binary files /dev/null and b/nntp/CBOX.BMP differ diff --git a/nntp/CBOXC.BMP b/nntp/CBOXC.BMP new file mode 100644 index 0000000..68e432b Binary files /dev/null and b/nntp/CBOXC.BMP differ diff --git a/nntp/DIRENTRY.HPP b/nntp/DIRENTRY.HPP new file mode 100644 index 0000000..b07a2af --- /dev/null +++ b/nntp/DIRENTRY.HPP @@ -0,0 +1,125 @@ +#ifndef _NNTP_DIRENTRY_HPP_ +#define _NNTP_DIRENTRY_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _NNTP_DIRITEM_HPP_ +#include +#endif +#ifndef _IMAGELIST_HANDLETREE_HPP_ +#include +#endif + +class DirEntry : public Block +{ +public: + DirEntry(void); + DirEntry(const DirEntry &someDirEntry); + DirEntry(const String &pathEntryName,const String &entryName,HandleTreeItem handleTreeItem=0,DWORD extraInfo=0); + virtual ~DirEntry(); + DirEntry &operator=(const DirEntry &someDirEntry); + WORD operator==(const DirEntry &someDirEntry)const; + const String &entryName(void)const; + void entryName(const String &entryName); + const String &pathEntryName(void)const; + void pathEntryName(const String &pathEntryName); + HandleTreeItem handleTreeItem(void)const; + void handleTreeItem(HandleTreeItem handleTreeItem); + DWORD extraInfo(void)const; + void extraInfo(DWORD extraInfo); +private: + HandleTreeItem mTreeItem; + String mEntryName; + String mPathEntryName; + DWORD mExtraInfo; +}; + +inline +DirEntry::DirEntry(void) +: mExtraInfo(0) +{ +} + +inline +DirEntry::DirEntry(const DirEntry &someDirEntry) +{ + *this=someDirEntry; +} + +inline +DirEntry::DirEntry(const String &pathEntryName,const String &entryName,HandleTreeItem handleTreeItem,DWORD extraInfo) +: mEntryName(entryName), mPathEntryName(pathEntryName), mTreeItem(handleTreeItem), mExtraInfo(extraInfo) +{ +} + +inline +DirEntry::~DirEntry() +{ +} + +inline +DirEntry &DirEntry::operator=(const DirEntry &someDirEntry) +{ + entryName(someDirEntry.entryName()); + pathEntryName(someDirEntry.pathEntryName()); + handleTreeItem(someDirEntry.handleTreeItem()); + extraInfo(someDirEntry.extraInfo()); + return *this; +} + +inline +WORD DirEntry::operator==(const DirEntry &someDirEntry)const +{ + return (entryName()==someDirEntry.entryName()&& + pathEntryName()==someDirEntry.pathEntryName()&& + handleTreeItem()==someDirEntry.handleTreeItem()); +} + +inline +const String &DirEntry::entryName(void)const +{ + return mEntryName; +} + +inline +void DirEntry::entryName(const String &entryName) +{ + mEntryName=entryName; +} + +inline +const String &DirEntry::pathEntryName(void)const +{ + return mPathEntryName; +} + +inline +void DirEntry::pathEntryName(const String &pathEntryName) +{ + mPathEntryName=pathEntryName; +} + +inline +HandleTreeItem DirEntry::handleTreeItem(void)const +{ + return mTreeItem; +} + +inline +void DirEntry::handleTreeItem(HandleTreeItem handleTreeItem) +{ + mTreeItem=handleTreeItem; +} + +inline +DWORD DirEntry::extraInfo(void)const +{ + return mExtraInfo; +} + +inline +void DirEntry::extraInfo(DWORD extraInfo) +{ + mExtraInfo=extraInfo; +} +#endif diff --git a/nntp/DIRITEM.HPP b/nntp/DIRITEM.HPP new file mode 100644 index 0000000..19825b7 --- /dev/null +++ b/nntp/DIRITEM.HPP @@ -0,0 +1,101 @@ +#ifndef _NNTP_DIRITEM_HPP_ +#define _NNTP_DIRITEM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _IMAGELIST_HANDLETREE_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class DirItem +{ +public: + DirItem(void); + DirItem(const String &itemName,HandleTreeItem handleTreeItem=(HandleTreeItem)0,DWORD extraInfo=0); + virtual ~DirItem(); + DirItem &operator=(const DirItem &someDirItem); + WORD operator==(const DirItem &someDirItem)const; + const String &itemName(void)const; + void itemName(const String &itemName); + HandleTreeItem handleTreeItem(void)const; + void handleTreeItem(HandleTreeItem handleTreeItem); + DWORD extraInfo(void)const; + void extraInfo(DWORD extraInfo); +private: + String mItemName; + HandleTreeItem mTreeItem; + DWORD mExtraInfo; +}; + +inline +DirItem::DirItem(void) +: mTreeItem(0), mExtraInfo(0) +{ +} + +inline +DirItem::DirItem(const String &itemName,HandleTreeItem handleTreeItem,DWORD extraInfo) +: mItemName(itemName), mTreeItem(handleTreeItem), mExtraInfo(extraInfo) +{ + +} + +inline +DirItem::~DirItem() +{ +} + +inline +DirItem &DirItem::operator=(const DirItem &someDirItem) +{ + itemName(someDirItem.itemName()); + handleTreeItem(someDirItem.handleTreeItem()); + extraInfo(someDirItem.extraInfo()); + return *this; +} + +inline +WORD DirItem::operator==(const DirItem &someDirItem)const +{ + return (itemName()==someDirItem.itemName()&& + handleTreeItem()==someDirItem.handleTreeItem()); +} + +inline +const String &DirItem::itemName(void)const +{ + return mItemName; +} + +inline +void DirItem::itemName(const String &itemName) +{ + mItemName=itemName; +} + +inline +HandleTreeItem DirItem::handleTreeItem(void)const +{ + return mTreeItem; +} + +inline +void DirItem::handleTreeItem(HandleTreeItem handleTreeItem) +{ + mTreeItem=handleTreeItem; +} + +inline +DWORD DirItem::extraInfo(void)const +{ + return mExtraInfo; +} + +void DirItem::extraInfo(DWORD extraInfo) +{ + mExtraInfo=extraInfo; +} +#endif \ No newline at end of file diff --git a/nntp/ENTRYDLG.CPP b/nntp/ENTRYDLG.CPP new file mode 100644 index 0000000..e68ef24 --- /dev/null +++ b/nntp/ENTRYDLG.CPP @@ -0,0 +1,35 @@ +#include + +WORD EntryDialog::performDialog(String &entryText) +{ + if(!entryText.isNull())mEditControlText=entryText; + WORD resultCode(::DialogBoxParam(processInstance(),(LPSTR)"NewsGroup",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this))); + if(resultCode)entryText=mEditControlText; + return resultCode; +} + +CallbackData::ReturnType EntryDialog::initDialogHandler(CallbackData &/*someCallbackData*/) +{ + if(!mEditControlText.isNull())setText(EditText,mEditControlText); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType EntryDialog::dialogCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +CallbackData::ReturnType EntryDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + getText(EditText,mEditControlText); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(FALSE); + break; + } + return (CallbackData::ReturnType)FALSE; +} diff --git a/nntp/ENTRYDLG.HPP b/nntp/ENTRYDLG.HPP new file mode 100644 index 0000000..e565741 --- /dev/null +++ b/nntp/ENTRYDLG.HPP @@ -0,0 +1,74 @@ +#ifndef _NNTP_ENTRYDLG_HPP_ +#define _NNTP_ENTRYDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif + +class OwnerDrawList; + +class EntryDialog : private DWindow +{ +public: + EntryDialog(const DWindow &parentWindow); + virtual ~EntryDialog(); + WORD performDialog(String &entryText); +private: + enum{EditText=NG_NEWSGROUP}; + EntryDialog(const EntryDialog &someEntryDialog); + EntryDialog &operator=(const EntryDialog &someEntryDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + + Callback mInitDialogHandler; + Callback mCommandHandler; + Callback mDialogCodeHandler; + String mEditControlText; + OwnerDrawList *mlpOwnerDrawList; + HWND mhParent; +}; + +inline +EntryDialog::EntryDialog(const DWindow &parentWindow) +: mhParent(parentWindow), mlpOwnerDrawList(0) +{ + mInitDialogHandler.setCallback(this,&EntryDialog::initDialogHandler); + mCommandHandler.setCallback(this,&EntryDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&EntryDialog::dialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +EntryDialog::EntryDialog(const EntryDialog &someEntryDialog) +: mhParent(someEntryDialog.mhParent), mlpOwnerDrawList() +{ // no implementation + mInitDialogHandler.setCallback(this,&EntryDialog::initDialogHandler); + mCommandHandler.setCallback(this,&EntryDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&EntryDialog::dialogCodeHandler); +} + +inline +EntryDialog::~EntryDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +EntryDialog &EntryDialog::operator=(const EntryDialog &/*someEntryDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/nntp/GROUPDLG.CPP b/nntp/GROUPDLG.CPP new file mode 100644 index 0000000..e220b1c --- /dev/null +++ b/nntp/GROUPDLG.CPP @@ -0,0 +1,169 @@ +#include +#include +#include +#include + +GroupDialog::GroupDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow), mlpOwnerDrawList(0), mRGBGray(192,192,192), + mBrush(mRGBGray) +{ + mInitDialogHandler.setCallback(this,&GroupDialog::initDialogHandler); + mCommandHandler.setCallback(this,&GroupDialog::commandHandler); + mTimerHandler.setCallback(this,&GroupDialog::timerHandler); + mMeasureItemHandler.setCallback(this,&GroupDialog::measureItemHandler); + mControlColorHandler.setCallback(this,&GroupDialog::controlColorHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::ControlColorHandler,&mControlColorHandler); +} + +GroupDialog::GroupDialog(const GroupDialog &someGroupDialog) +: mhParent(someGroupDialog.mhParent), mlpOwnerDrawList(0), mRGBGray(192,192,192), + mBrush(mRGBGray) +{ // no implementation + mInitDialogHandler.setCallback(this,&GroupDialog::initDialogHandler); + mCommandHandler.setCallback(this,&GroupDialog::commandHandler); + mTimerHandler.setCallback(this,&GroupDialog::timerHandler); + mMeasureItemHandler.setCallback(this,&GroupDialog::measureItemHandler); + mControlColorHandler.setCallback(this,&GroupDialog::controlColorHandler); +} + +GroupDialog::~GroupDialog() +{ + if(mlpOwnerDrawList)delete mlpOwnerDrawList; + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::ControlColorHandler,&mControlColorHandler); +} + +WORD GroupDialog::performDialog(void) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"GroupDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType GroupDialog::initDialogHandler(CallbackData &/*someCallbackData*/) +{ + setTimer(TimerID,100); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GroupDialog::timerHandler(CallbackData &/*someCallbackData*/) +{ + killTimer(TimerID); + mlpOwnerDrawList=new OwnerDrawListCheck(*this,getItem(NewsGroupList),NewsGroupList,PureBitmap("CHECKBOXC",processInstance()),PureBitmap("CHECKBOX",processInstance())); + getNewsGroups(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType GroupDialog::measureItemHandler(CallbackData &someCallbackData) +{ + LPMEASUREITEMSTRUCT lpmis((LPMEASUREITEMSTRUCT)someCallbackData.lParam()); + lpmis->itemHeight=20; + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType GroupDialog::controlColorHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)(GDIObj)mBrush; +} + +CallbackData::ReturnType GroupDialog::drawItemHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType GroupDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(FALSE); + break; + case AddButton : + handleAdd(); + break; + case DeleteButton : + handleDelete(); + break; + case NewsGroupList : + if(LBN_DBLCLK==someCallbackData.wmCommandCommand())handleModify(); + else if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChange(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void GroupDialog::handleAdd(void) +{ + EntryDialog entryDialog(*this); + String entryText; + + if(entryDialog.performDialog(entryText)&&mNewsReg.addGroup(entryText,FALSE)) + mlpOwnerDrawList->insertString(entryText); +} + +void GroupDialog::handleModify(void) +{ + LRESULT currSelection(mlpOwnerDrawList->getCurrent()); + String selString; + String modString; + + if(LB_ERR==currSelection){::MessageBeep(0);return;} + mlpOwnerDrawList->getText(selString,currSelection); + modString=selString; + EntryDialog entryDialog(*this); + if(entryDialog.performDialog(modString)) + { + mNewsReg.removeGroup(selString); + mNewsReg.addGroup(modString); + mlpOwnerDrawList->deleteString(currSelection); + mlpOwnerDrawList->insertString(modString); + } +} + +void GroupDialog::handleDelete(void) +{ + LRESULT currSelection(sendMessage(NewsGroupList,LB_GETCURSEL,0,0L)); + String selString; + + if(LB_ERR==currSelection){::MessageBeep(0);return;} + mlpOwnerDrawList->getText(selString,currSelection); + if(mNewsReg.removeGroup(selString))mlpOwnerDrawList->deleteString(currSelection); +} + +void GroupDialog::getNewsGroups(void) +{ + Block subscriberList; + + mNewsReg.queryGroups(subscriberList); + mlpOwnerDrawList->setRedraw(FALSE); + mlpOwnerDrawList->resetContent(); + for(int itemIndex=0;itemIndexinsertString(subscriberList[itemIndex].newsGroup()); + if(subscriberList[itemIndex].active())mlpOwnerDrawList->setSelection(itemIndex,TRUE); + } + mlpOwnerDrawList->setRedraw(TRUE); +} + +void GroupDialog::handleChange(void) +{ + GDIPoint cursorPoint; + String groupName; + LONG itemIndex; + LONG selState; + + ::GetCursorPos(&((POINT&)cursorPoint)); + ::ScreenToClient(getItem(NewsGroupList),&((POINT&)cursorPoint)); + itemIndex=mlpOwnerDrawList->itemFromPoint(cursorPoint); + if(LB_ERR==itemIndex)return; + mlpOwnerDrawList->getText(groupName,itemIndex); + selState=mlpOwnerDrawList->getSel(itemIndex); + mNewsReg.setGroup(groupName,selState); +} diff --git a/nntp/GROUPDLG.HPP b/nntp/GROUPDLG.HPP new file mode 100644 index 0000000..08392fc --- /dev/null +++ b/nntp/GROUPDLG.HPP @@ -0,0 +1,67 @@ +#ifndef _NNTP_GROUPDLG_HPP_ +#define _NNTP_GROUPDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif +#ifndef _NNTP_NEWSREG_HPP_ +#include +#endif +#ifndef _COMMON_OWNERDRAWLISTCHECK_HPP_ +#include +#endif + +class String; +class OwnerDrawList; + +class GroupDialog : private DWindow +{ +public: + GroupDialog(const GUIWindow &parentWindow); + virtual ~GroupDialog(); + WORD performDialog(void); +private: + enum {NewsGroupList=NG_NEWSGROUPS,AddButton=NG_ADD,DeleteButton=NG_DELETE}; + enum {TimerID=0}; + GroupDialog(const GroupDialog &someGroupDialog); + GroupDialog &operator=(const GroupDialog &someGroupDialog); + void handleAdd(void); + void handleModify(void); + void handleDelete(void); + void getNewsGroups(void); + void handleChange(void); + + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType measureItemHandler(CallbackData &someCallbackData); + CallbackData::ReturnType controlColorHandler(CallbackData &someCallbackData); + CallbackData::ReturnType drawItemHandler(CallbackData &someCallbackData); + + Callback mInitDialogHandler; + Callback mCommandHandler; + Callback mTimerHandler; + Callback mMeasureItemHandler; + Callback mControlColorHandler; + Callback mDrawItemHandler; + NewsReg mNewsReg; + OwnerDrawListCheck *mlpOwnerDrawList; + HWND mhParent; + RGBColor mRGBGray; + Brush mBrush; +}; + +inline +GroupDialog &GroupDialog::operator=(const GroupDialog &/*someGroupDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/nntp/GRPITEM.HPP b/nntp/GRPITEM.HPP new file mode 100644 index 0000000..86a9c4e --- /dev/null +++ b/nntp/GRPITEM.HPP @@ -0,0 +1,150 @@ +#ifndef _NNTP_GROUPITEM_HPP_ +#define _NNTP_GROUPITEM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class GroupItem +{ +public: + GroupItem(void); + GroupItem(const GroupItem &someGroupItem); + GroupItem(const String &newsGroup); + virtual ~GroupItem(); + GroupItem &operator=(const GroupItem &someGroupItem); + GroupItem &operator<<(String lineString); + DWORD articlesInGroup(void)const; + void articlesInGroup(DWORD articlesInGroup); + DWORD firstArticle(void)const; + void firstArticle(DWORD firstArticle); + DWORD lastArticle(void)const; + void lastArticle(DWORD lastArticle); + const String &groupName(void)const; + void groupName(const String &groupName); + String toString(void)const; +private: + DWORD mArticlesInGroup; + DWORD mFirstArticle; + DWORD mLastArticle; + String mGroupName; +}; + +inline +GroupItem::GroupItem(void) +: mArticlesInGroup(0), mFirstArticle(0), mLastArticle(0) +{ +} + +inline +GroupItem::GroupItem(const String &newsGroup) +: mGroupName(newsGroup), mArticlesInGroup(0), mFirstArticle(0), mLastArticle(0) +{ +} + +inline +GroupItem::GroupItem(const GroupItem &someGroupItem) +{ + *this=someGroupItem; +} + +inline +GroupItem::~GroupItem() +{ +} + +inline +GroupItem &GroupItem::operator=(const GroupItem &someGroupItem) +{ + articlesInGroup(someGroupItem.articlesInGroup()); + firstArticle(someGroupItem.firstArticle()); + lastArticle(someGroupItem.lastArticle()); + groupName(someGroupItem.groupName()); + return *this; +} + +inline +GroupItem &GroupItem::operator<<(String lineString) +{ + char *strPtr=(LPSTR)lineString; + + strPtr=::strtok(strPtr," "); + if(!strPtr)return *this; + strPtr=::strtok(0," "); + if(!strPtr)return *this; + articlesInGroup(::atoi(strPtr)); + strPtr=::strtok(0," "); + if(!strPtr)return *this; + firstArticle(::atoi(strPtr)); + strPtr=::strtok(0," "); + if(!strPtr)return *this; + lastArticle(::atoi(strPtr)); + strPtr=::strtok(0,"\0"); + if(!strPtr)return *this; + groupName(strPtr); + return *this; +} + +inline +DWORD GroupItem::articlesInGroup(void)const +{ + return mArticlesInGroup; +} + +inline +void GroupItem::articlesInGroup(DWORD articlesInGroup) +{ + mArticlesInGroup=articlesInGroup; +} + +inline +DWORD GroupItem::firstArticle(void)const +{ + return mFirstArticle; +} + +inline +void GroupItem::firstArticle(DWORD firstArticle) +{ + mFirstArticle=firstArticle; +} + +inline +DWORD GroupItem::lastArticle(void)const +{ + return mLastArticle; +} + +inline +void GroupItem::lastArticle(DWORD lastArticle) +{ + mLastArticle=lastArticle; +} + +inline +const String &GroupItem::groupName(void)const +{ + return mGroupName; +} + +inline +void GroupItem::groupName(const String &groupName) +{ + mGroupName=groupName; +} + +inline +String GroupItem::toString(void)const +{ + String strItem; + String space(" "); + + strItem=String().fromInt(mArticlesInGroup)+space; + strItem+=String().fromInt(mFirstArticle)+space; + strItem+=String().fromInt(mLastArticle)+space; + strItem+=mGroupName; + return strItem; +} +#endif \ No newline at end of file diff --git a/nntp/HEADER.CPP b/nntp/HEADER.CPP new file mode 100644 index 0000000..3f9f105 --- /dev/null +++ b/nntp/HEADER.CPP @@ -0,0 +1,117 @@ +#include +#include +#include +#include +#include + +Header &Header::operator=(const Header &someHeader) +{ + path(someHeader.path()); + from(someHeader.from()); + newsGroups(someHeader.newsGroups()); + subject(someHeader.subject()); + date(someHeader.date()); + organization(someHeader.organization()); + lines(someHeader.lines()); + messageID(someHeader.messageID()); + replyTo(someHeader.replyTo()); + postingHost(someHeader.postingHost()); + newsReader(someHeader.newsReader()); + crossReference(someHeader.crossReference()); + contentType(someHeader.contentType()); + xMailer(someHeader.xMailer()); + return *this; +} + +Header &Header::operator=(Block &headerLines) +{ + UINT lineCount(headerLines.size()); + for(int lineIndex=0;lineIndex +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif + +template +class Block; + +class Header +{ +public: + Header(void); + Header(Block &headerLines); + Header(const Header &someHeader); + Header(const String &pathFileName); + virtual ~Header(); + Header &operator=(const Header &someHeader); + Header &operator=(Block &headerLines); + Header &operator=(const String &pathFileName); + const String &path(void)const; + const String &from(void)const; + const String &newsGroups(void)const; + const String &subject(void)const; + const String &date(void)const; + SystemTime systemTime(void); + const String &organization(void)const; + const String &lines(void)const; + const String &messageID(void)const; + const String &replyTo(void)const; + const String &postingHost(void)const; + const String &newsReader(void)const; + const String &crossReference(void)const; + const String &contentType(void)const; + const String &xMailer(void)const; +private: + void path(const String &path); + void from(const String &from); + void newsGroups(const String &newsGroups); + void subject(const String &subject); + void date(const String &date); + void organization(const String &organization); + void lines(const String &lines); + void messageID(const String &messageID); + void replyTo(const String &replyTo); + void postingHost(const String &postingHost); + void newsReader(const String &newsReader); + void crossReference(const String &crossReference); + void contentType(const String &contentType); + void xMailer(const String &xMailer); + WORD isPath(const String &stringLine)const; + WORD isFrom(const String &stringLine)const; + WORD isNewsGroups(const String &stringLine)const; + WORD isSubject(const String &stringLine)const; + WORD isDate(const String &stringLine)const; + WORD isOrganization(const String &stringLine)const; + WORD isLines(const String &stringLine)const; + WORD isMessageID(const String &stringLine)const; + WORD isReplyTo(const String &stringLine)const; + WORD isNNTPPostingHost(const String &stringLine)const; + WORD isNewsReader(const String &stringLine)const; + WORD isCrossReference(const String &stringLine)const; + WORD isContentType(const String &stringLine)const; + WORD isMailer(const String &stringLine)const; + + String mPath; + String mFrom; + String mNewsGroups; + String mSubject; + String mDate; + String mOrganization; + String mLines; + String mMessageID; + String mReplyTo; + String mPostingHost; + String mContentType; + String mXMailer; + String mNewsReader; + String mCrossReference; +}; + +inline +Header::Header(void) +{ +} + +inline +Header::Header(Block &headerLines) +{ + *this=headerLines; +} + +inline +Header::Header(const Header &someHeader) +{ + *this=someHeader; +} + +inline +Header::Header(const String &pathFileName) +{ + *this=pathFileName; +} + +inline +Header::~Header() +{ +} + +inline +const String &Header::path(void)const +{ + return mPath; +} + +inline +void Header::path(const String &path) +{ + mPath=path; +} + +inline +const String &Header::from(void)const +{ + return mFrom; +} + +inline +void Header::from(const String &from) +{ + mFrom=from; +} + +inline +const String &Header::newsGroups(void)const +{ + return mNewsGroups; +} + +inline +void Header::newsGroups(const String &newsGroups) +{ + mNewsGroups=newsGroups; +} + +inline +const String &Header::subject(void)const +{ + return mSubject; +} + +inline +void Header::subject(const String &subject) +{ + mSubject=subject; +} + +inline +const String &Header::date(void)const +{ + return mDate; +} + +inline +void Header::date(const String &date) +{ + mDate=date; +} + +inline +const String &Header::organization(void)const +{ + return mOrganization; +} + +inline +void Header::organization(const String &organization) +{ + mOrganization=organization; +} + +inline +const String &Header::lines(void)const +{ + return mLines; +} + +inline +void Header::lines(const String &lines) +{ + mLines=lines; +} + +inline +const String &Header::messageID(void)const +{ + return mMessageID; +} + +inline +void Header::messageID(const String &messageID) +{ + mMessageID=messageID; +} + +inline +const String &Header::replyTo(void)const +{ + return mReplyTo; +} + +inline +void Header::replyTo(const String &replyTo) +{ + mReplyTo=replyTo; +} + +inline +const String &Header::postingHost(void)const +{ + return mPostingHost; +} + +inline +void Header::postingHost(const String &postingHost) +{ + mPostingHost=postingHost; +} + +inline +const String &Header::newsReader(void)const +{ + return mNewsReader; +} + +inline +void Header::newsReader(const String &newsReader) +{ + mNewsReader=newsReader; +} + +inline +const String &Header::crossReference(void)const +{ + return mCrossReference; +} + +inline +void Header::crossReference(const String &crossReference) +{ + mCrossReference=crossReference; +} + +inline +const String &Header::contentType(void)const +{ + return mContentType; +} + +inline +void Header::contentType(const String &contentType) +{ + mContentType=contentType; +} + +inline +const String &Header::xMailer(void)const +{ + return mXMailer; +} + +inline +void Header::xMailer(const String &xMailer) +{ + mXMailer=xMailer; +} + +inline +WORD Header::isPath(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Path: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isFrom(const String &stringLine)const +{ + return (!::strncmp(stringLine,"From: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isNewsGroups(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Newsgroups: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isSubject(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Subject: ",9)?TRUE:FALSE); +} + +inline +WORD Header::isDate(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Date: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isOrganization(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Organization: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isLines(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Lines: ",7)?TRUE:FALSE); +} + +inline +WORD Header::isMessageID(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Message-ID: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isReplyTo(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Reply-To: ",10)?TRUE:FALSE); +} + +inline +WORD Header::isNNTPPostingHost(const String &stringLine)const +{ + return (!::strncmp(stringLine,"NNTP-Posting-Host",17)?TRUE:FALSE); +} + +inline +WORD Header::isNewsReader(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Newsreader: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isCrossReference(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Xref: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isContentType(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Content-Type: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isMailer(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Mailer: ",10)?TRUE:FALSE); +} +#endif + + diff --git a/nntp/IMGVIEW.CPP b/nntp/IMGVIEW.CPP new file mode 100644 index 0000000..b65aaa5 --- /dev/null +++ b/nntp/IMGVIEW.CPP @@ -0,0 +1,144 @@ +#include +#include +#include + +ImageView::ImageView(void) +{ + mCreateHandler.setCallback(this,&ImageView::createHandler); + mSizeHandler.setCallback(this,&ImageView::sizeHandler); + mPaintHandler.setCallback(this,&ImageView::paintHandler); + mHorizontalScrollHandler.setCallback(this,&ImageView::horizontalScrollHandler); + mVerticalScrollHandler.setCallback(this,&ImageView::verticalScrollHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); +} + +ImageView::~ImageView() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); +} + +CallbackData::ReturnType ImageView::createHandler(CallbackData &someCallbackData) +{ + mScrollInfo.hwndOwner(*this); + setTitle("None"); + return FALSE; +} + +CallbackData::ReturnType ImageView::sizeHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleSize(someCallbackData); + return FALSE; +} + +CallbackData::ReturnType ImageView::paintHandler(CallbackData &someCallbackData) +{ + CursorControl cursorControl; + + cursorControl.waitCursor(TRUE); + mMutex.requestMutex(); + if(!mJPGImage.isOkay()) + { + mMutex.releaseMutex(); + cursorControl.waitCursor(FALSE); + return (CallbackData::ReturnType)FALSE; + } + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + mJPGImage.draw(paintDevice,Rect(0,0,mJPGImage.width(),mJPGImage.height()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom(paintRect.bottom()-paintRect.top()); + mJPGImage.draw(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + mMutex.releaseMutex(); + cursorControl.waitCursor(FALSE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ImageView::verticalScrollHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleVerticalScroll(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType ImageView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleHorizontalScroll(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +BOOL ImageView::open(const String &strPathFileName) +{ + String strString; + CursorControl cursorControl; + BOOL result; + + if(strPathFileName.isNull())return FALSE; + cursorControl.waitCursor(TRUE); + mMutex.requestMutex(); + PureDevice pureDevice(*this); + result=mJPGImage.decode(strPathFileName,pureDevice); + mMutex.releaseMutex(); + cursorControl.waitCursor(FALSE); + if(!result)return FALSE; + mScrollInfo.scrollableObjectDimensions(mJPGImage.width(),mJPGImage.height()); + setTitle(strPathFileName); + ::sprintf(strString,"%s (%dx%d)",(LPSTR)strPathFileName,mJPGImage.width(),mJPGImage.height()); + invalidate(); + return TRUE; +} + +void ImageView::setTitle(const String &strTitle) +{ + String strCaption; + String strString; + + windowText(strCaption); + strString=strCaption; + strCaption=strCaption.betweenString(0,' '); + if(strCaption.isNull())strCaption=strString; + strCaption+=String(" - [")+strTitle+String("]"); + setCaption(strCaption); +} + +BOOL ImageView::fitToWindow(void) +{ + PureDevice pureDevice(*this); + CursorControl cursorControl; + + if(!mJPGImage.isOkay())return false; + cursorControl.waitCursor(true); + mJPGImage.resample(pureDevice,width()); + mScrollInfo.scrollableObjectDimensions(mJPGImage.width(),mJPGImage.height()); + cursorControl.waitCursor(false); + invalidate(); + return true; +} + +// *** virtuals + +void ImageView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); +} + +void ImageView::preCreate(MDICREATESTRUCT &createStruct) +{ + createStruct.style|=WS_VSCROLL|WS_HSCROLL; +} diff --git a/nntp/IMGVIEW.HPP b/nntp/IMGVIEW.HPP new file mode 100644 index 0000000..44a7bfc --- /dev/null +++ b/nntp/IMGVIEW.HPP @@ -0,0 +1,50 @@ +#ifndef _NNTP_IMAGEVIEW_HPP_ +#define _NNTP_IMAGEVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif +#ifndef _JPGIMG_SCROLLINFO_HPP_ +#include +#endif +#ifndef _JPGIMG_JPGIMAGE_HPP_ +#include +#endif + +class StatusBarEx; + +class ImageView : public MDIWindow +{ +public: + ImageView(void); + virtual ~ImageView(); + BOOL open(const String &strPathFileName); + BOOL fitToWindow(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + void setTitle(const String &strTitle); + + Callback mCreateHandler; + Callback mSizeHandler; + Callback mPaintHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + SmartPointer mStatusBar; + ScrollInfo mScrollInfo; + JPGImage mJPGImage; + Mutex mMutex; +}; +#endif \ No newline at end of file diff --git a/nntp/ITERATOR.HPP b/nntp/ITERATOR.HPP new file mode 100644 index 0000000..c009d55 --- /dev/null +++ b/nntp/ITERATOR.HPP @@ -0,0 +1,98 @@ +#ifndef _NNTP_GROUPITERATOR_HPP_ +#define _NNTP_GROUPITERATOR_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _NNTP_MESSAGEID_HPP_ +#include +#endif + +class GroupIterator +{ +public: + GroupIterator(void); + GroupIterator(const GroupIterator &someGroupIterator); + virtual ~GroupIterator(); + GroupIterator &operator=(const GroupIterator &someGroupIterator); + GroupIterator &operator<<(String lineString); + const MsgID &messageID(void)const; + void messageID(const MsgID &messageID); + DWORD articleNumber(void)const; + void articleNumber(DWORD articleNumber); + String toString(void)const; +private: + MsgID mMessageID; + DWORD mArticleNumber; +}; + +inline +GroupIterator::GroupIterator(void) +: mArticleNumber(0) +{ +} + +inline +GroupIterator::GroupIterator(const GroupIterator &someGroupIterator) +{ + *this=someGroupIterator; +} + +inline +GroupIterator::~GroupIterator() +{ +} + +inline +GroupIterator &GroupIterator::operator=(const GroupIterator &someGroupIterator) +{ + messageID(someGroupIterator.messageID()); + articleNumber(someGroupIterator.articleNumber()); + return *this; +} + +inline +const MsgID &GroupIterator::messageID(void)const +{ + return mMessageID; +} + +inline +void GroupIterator::messageID(const MsgID &messageID) +{ + mMessageID=messageID; +} + +inline +DWORD GroupIterator::articleNumber(void)const +{ + return mArticleNumber; +} + +inline +void GroupIterator::articleNumber(DWORD articleNumber) +{ + mArticleNumber=articleNumber; +} + +inline +GroupIterator &GroupIterator::operator<<(String lineString) +{ + char *strPtr=(LPSTR)lineString; + + strPtr=::strtok(strPtr," "); + if(!strPtr)return *this; + strPtr=::strtok(0," "); + if(!strPtr)return *this; + articleNumber(::atoi(strPtr)); + strPtr=::strtok(0," \0"); + if(!strPtr)return *this; + messageID(strPtr); + return *this; +} + +inline +String GroupIterator::toString(void)const +{ + return String().fromInt(mArticleNumber)+String(" ")+mMessageID; +} +#endif \ No newline at end of file diff --git a/nntp/LISTITEM.HPP b/nntp/LISTITEM.HPP new file mode 100644 index 0000000..843c9d1 --- /dev/null +++ b/nntp/LISTITEM.HPP @@ -0,0 +1,165 @@ +#ifndef _NNTP_LISTITEM_HPP_ +#define _NNTP_LISTITEM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class ListItem +{ +public: + ListItem(void); + ListItem(const ListItem &someListItem); + ListItem(const String &listItemString); + ListItem(const String &groupName,DWORD first,DWORD last,BYTE posting); + virtual ~ListItem(); + ListItem &operator=(const ListItem &someListItem); + WORD operator==(const ListItem &someListItem)const; + ListItem &operator<<(String lineString); + const String &groupName(void)const; + void groupName(const String &groupName); + DWORD first(void)const; + void first(DWORD first); + DWORD last(void)const; + void last(DWORD last); + BYTE posting(void)const; + void posting(BYTE posting); + String toString(void)const; +private: + String mGroupName; + DWORD mFirst; + DWORD mLast; + BYTE mPosting; +}; + +inline +ListItem::ListItem(void) +: mFirst(0), mLast(0), mPosting('n') +{ +} + +inline +ListItem::ListItem(const ListItem &someListItem) +{ + *this=someListItem; +} + +inline +ListItem::ListItem(const String &listItemString) +{ + *this< +#include +#include +#include + +ListItems &ListItems::operator=(const String &pathListFileName) +{ + FileHandle listFile(pathListFileName,FileHandle::Read,FileHandle::ShareRead); + FileMap listMap(listFile); + PureViewOfFile listView(listMap); + String lineItem; + + remove(); + while(TRUE) + { + if(!listView.getLine(lineItem))break; + insert(&ListItem(lineItem)); + } + return *this; +} + +ListItems &ListItems::operator=(Block &listItemStrings) +{ + int listItems(listItemStrings.size()); + + remove(); + for(int listIndex=0;listIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class ListItems : public Block +{ +public: + ListItems(void); + ListItems(const ListItems &someListItems); + ListItems(const String &pathListFileName); + virtual ~ListItems(); + ListItems &operator=(const String &pathListFileName); + ListItems &operator=(Block &listItemStrings); + ListItems &operator+=(const String &listItemString); +private: +}; + +inline +ListItems::ListItems(void) +{ +} + +inline +ListItems::ListItems(const ListItems &someListItems) +{ + *this=someListItems; +} + +inline +ListItems::ListItems(const String &pathListFileName) +{ + *this=pathListFileName; +} + +inline +ListItems::~ListItems() +{ +} + +inline +ListItems &ListItems::operator+=(const String &listItemString) +{ + ListItem listItem(listItemString); + insert(&listItem); + return *this; +} +#endif \ No newline at end of file diff --git a/nntp/LOG.ICO b/nntp/LOG.ICO new file mode 100644 index 0000000..0c44b73 Binary files /dev/null and b/nntp/LOG.ICO differ diff --git a/nntp/LOGVIEW.CPP b/nntp/LOGVIEW.CPP new file mode 100644 index 0000000..de738a7 --- /dev/null +++ b/nntp/LOGVIEW.CPP @@ -0,0 +1,113 @@ +#include +#include +#include +#include +#include +#include + +LogView::LogView(void) +{ + mCreateHandler.setCallback(this,&LogView::createHandler); + mSizeHandler.setCallback(this,&LogView::sizeHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +LogView::~LogView() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +CallbackData::ReturnType LogView::createHandler(CallbackData &someCallbackData) +{ + Rect winRect; + Rect statRect; + + clientRect(winRect); + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + mStatusBar->clientRect(statRect); + winRect.bottom(winRect.bottom()-(statRect.bottom())); + mListBox=new OwnerDrawListAltColor(*this,winRect,ListBoxID,RGBColor(255,255,232),RGBColor(192,220,192),RGBColor(0,255,255)); + mListBox.disposition(PointerDisposition::Delete); + mListBox->show(SW_SHOW); + return FALSE; +} + +CallbackData::ReturnType LogView::sizeHandler(CallbackData &someCallbackData) +{ + Rect winRect; + Rect statRect; + + if(SIZE_RESTORED==someCallbackData.wParam())mListBox->show(SW_SHOWNORMAL); + clientRect(winRect); + mStatusBar->clientRect(statRect); + winRect.bottom(winRect.bottom()-statRect.bottom()); + mListBox->moveWindow(winRect,TRUE); + return FALSE; +} + +void LogView::setText(const String &strLine) +{ + if(!mListBox.isOkay())return; + mMutex.requestMutex(); + if(LB_ERR==mListBox->insertString(strLine)){clear();mListBox->insertString(strLine);} + mListBox->setCurrent(mListBox->getCount()-1); + mMutex.releaseMutex(); +} + +DWORD LogView::getText(Block &strLines) +{ + String strLine; + DWORD lineCount; + + strLines.remove(); + if(!mListBox.isOkay())return FALSE; + mMutex.requestMutex(); + lineCount=mListBox->getCount(); + for(int index=0;indexgetText(strLine,index); + strLines.insert(&strLine); + } + mMutex.releaseMutex(); + return strLines.size(); +} + +void LogView::clear(void) +{ + if(!mListBox.isOkay())return; + mMutex.requestMutex(); + mListBox->setRedraw(FALSE); + mListBox->resetContent(); + mListBox->setRedraw(TRUE); + mMutex.releaseMutex(); +} + +void LogView::print(void) +{ + PrintManager printManager; + String strPrinter; + Block pageLines; + Font pageFont("Helv",36); + + if(!printManager.choosePrinter((GUIWindow&)(*getFrame()),strPrinter))return; + if(!printManager.openPrinter(strPrinter,*this,"NewsCrawler Log"))return; + mStatusBar->setText("Sending document to printer..."); + getText(pageLines); + if(!pageLines.size())return; + printManager.printLines(pageLines,pageFont,Point(10,10)); + printManager.endDoc(); + mStatusBar->setText(" "); +} + +// *** virtuals + +void LogView::preRegister(WNDCLASS &wndClass) +{ +} + +void LogView::preCreate(MDICREATESTRUCT &/*createStruct*/) +{ +} diff --git a/nntp/LOGVIEW.HPP b/nntp/LOGVIEW.HPP new file mode 100644 index 0000000..541cedf --- /dev/null +++ b/nntp/LOGVIEW.HPP @@ -0,0 +1,39 @@ +#ifndef _NNTP_LOGVIEW_HPP_ +#define _NNTP_LOGVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif + +class OwnerDrawList; +class StatusBarEx; + +class LogView : public MDIWindow +{ +public: + LogView(void); + virtual ~LogView(); + void setText(const String &strLine); + void clear(void); + void print(void); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {ListBoxID=100,StatusBarID=101}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + DWORD getText(Block &strLines); + + Callback mCreateHandler; + Callback mSizeHandler; + SmartPointer mListBox; + SmartPointer mStatusBar; + Mutex mMutex; +}; +#endif \ No newline at end of file diff --git a/nntp/MAIN.CPP b/nntp/MAIN.CPP new file mode 100644 index 0000000..d4fbc30 --- /dev/null +++ b/nntp/MAIN.CPP @@ -0,0 +1,12 @@ +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; + + frameWindow.createWindow("NNTP",String(STRING_NNTP)+String(" ")+String(STRING_VERSION),"mainMenu","NNTP"); + return ((FrameWindow&)frameWindow).messageLoop(); +} + diff --git a/nntp/MAIN.HPP b/nntp/MAIN.HPP new file mode 100644 index 0000000..7fde02e --- /dev/null +++ b/nntp/MAIN.HPP @@ -0,0 +1,67 @@ +#ifndef _NNTP_MAIN_HPP_ +#define _NNTP_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/nntp/MAINFRM.HPP b/nntp/MAINFRM.HPP new file mode 100644 index 0000000..87f2a1a --- /dev/null +++ b/nntp/MAINFRM.HPP @@ -0,0 +1,127 @@ +#ifndef _NNTP_MAINWINDOW_HPP_ +#define _NNTP_MAINWINDOW_HPP_ +#ifndef _COMMON_MDIFRM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SOCKET_WSADATA_HPP_ +#include +#endif +#ifndef _NNTP_NNTPTHREAD_HPP_ +#include +#endif +#ifndef _NNTP_NEWSGROUP_HPP_ +#include +#endif +#ifndef _NNTP_NEWSOPTION_HPP_ +#include +#endif +#ifndef _NNTP_HEADER_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _COMMON_POINTER_HPP_ +#include +#endif +#ifndef _THREAD_MONITOR_HPP_ +#include +#endif + +class RasInterface; +class EditWindow; +class StatusBarEx; +class LogView; +class ImageView; +class BrowseView; + +class MainFrame : public FrameWindow, private NNTPThread +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); + virtual void moreWindows(void); +private: + enum{StatusBarID=101}; + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType browseSelectHandler(CallbackData &someCallbackData); + + BrowseView &createBrowseView(void); + LogView &createLogView(void); + ImageView &createImageView(void); + ImageView &createDocumentView(void); + BOOL openDocument(const String &strPathFileName); + BOOL openImage(const String &strPathFileName); + void createControls(void); + void insertHandlers(void); + void removeHandlers(void); + void getParams(String &hostName,String &userName,String &password); + void handleRetrieve(void); + void message(String messageString); + void message(Block &messageStrings); + void handleCancelNews(void); + void decode(const String &pathFileName,String &strPathImageFile); + void loadFilterList(void); + WORD retrieveNews(const String &newsGroup); + WORD retrieveNews(void); + WORD retrieveGroups(void); + WORD saveBlock(const String &pathFileName,Block &stringBlock); + WORD dialHost(void); + DWORD getSubscriberList(Block &subscriberList); + BOOL getArticles(const String &newGroup,Block &msgIDs); + bool inSubject(Block &headText); + DWORD priorDays(void)const; + void verifyNewsDirectory(void); + void handleFileOpen(void); + void handleViewLog(void); + void handleFileBrowse(void); + void handleSubscribe(void); + void handleNewsServer(void); + void handleGeneralOptions(void); + void handleRasSettings(void); + void handleClearLog(void); + void handleImageFitToWindow(void); + DWORD openHandler(ThreadMessage &someThreadMessage); + DWORD preOpenHandler(ThreadMessage &someThreadMessage); + DWORD postOpenHandler(ThreadMessage &someThreadMessage); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mBrowseSelectHandler; + ThreadCallback mOpenHandler; + ThreadCallback mPreOpenHandler; + ThreadCallback mPostOpenHandler; + + SmartPointer mRasInterface; + SmartPointer mStatusControl; + SmartPointer mLogViewWinCache; + Block mSubscriberList; + Block mFilterList; + String mLastOpenDirectory; + BTree mMasterList; + WSASystem mWSASystem; + NewsOption mNewsOption; + bool mIsCancelled; +}; +#endif diff --git a/nntp/MAINWND.BAK b/nntp/MAINWND.BAK new file mode 100644 index 0000000..d6c7a57 --- /dev/null +++ b/nntp/MAINWND.BAK @@ -0,0 +1,116 @@ +#ifndef _NNTP_MAINWINDOW_HPP_ +#define _NNTP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _DISPLAY_EDITWINDOW_HPP_ +#include +#endif +#ifndef _SOCKET_WSADATA_HPP_ +#include +#endif +#ifndef _NNTP_NNTPCLIENT_HPP_ +#include +#endif +#ifndef _NNTP_NNTPTHREAD_HPP_ +#include +#endif +#ifndef _NNTP_NEWSGROUP_HPP_ +#include +#endif +#ifndef _NNTP_NEWSOPTION_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif +#ifndef _COMMON_POINTER_HPP_ +#include +#endif + +class RasInterface; +class DirTree; + +class MainWindow : public Window, private NNTPThread +{ +public: + MainWindow(void); + virtual ~MainWindow(); + int messageLoop(void)const; + static String className(void); +private: + enum{TimerID=0}; + void createControls(void); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void getHostName(String &hostName); + void handleRetrieve(void); + void message(String messageString); + void message(Block &messageStrings); + void handleCancelNews(void); + WORD retrieveNews(const String &newsGroup); + WORD retrieveNews(void); + WORD retrieveGroups(void); + WORD saveBlock(const String &pathFileName,Block &stringBlock); + WORD waitForScheduledEvent(void); + WORD dialHost(void); + DWORD getSubscriberList(Block &subscriberList); + DWORD priorDays(void)const; + void handleSubscribe(void); + void handleNewsServer(void); + void handleNewsDir(void); + void handleNewsDirRefresh(void); + void handleGeneralOptions(void); + void handleRasSettings(void); + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + DWORD openHandler(ThreadMessage &someThreadMessage); + DWORD preOpenHandler(ThreadMessage &someThreadMessage); + DWORD postOpenHandler(ThreadMessage &someThreadMessage); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mLineHandler; + Callback mTimerHandler; + ThreadCallback mOpenHandler; + ThreadCallback mPreOpenHandler; + ThreadCallback mPostOpenHandler; + static char szClassName[]; + static char szMenuName[]; + RasInterface *mlpRasInterface; + SmartPointer mDirTree; + SmartPointer mEditWindow; + Block mSubscriberList; + BTree mMasterList; + WSASystem mWSASystem; + WORD mCancelWait; + NewsOption mNewsOption; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} + +inline +int MainWindow::messageLoop(void)const +{ + return Window::messageLoop(); +} +#endif diff --git a/nntp/MSGID.HPP b/nntp/MSGID.HPP new file mode 100644 index 0000000..3409bff --- /dev/null +++ b/nntp/MSGID.HPP @@ -0,0 +1,7 @@ +#ifndef _NNTP_MESSAGEID_HPP_ +#define _NNTP_MESSAGEID_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +typedef String MsgID; +#endif \ No newline at end of file diff --git a/nntp/MSGLOG.CPP b/nntp/MSGLOG.CPP new file mode 100644 index 0000000..cfa65b3 --- /dev/null +++ b/nntp/MSGLOG.CPP @@ -0,0 +1,64 @@ +#include +#include +#include + +MessageLog::MessageLog(void) +: mStrMessageLogPostFix(STRING_MESSAGELOGPOSTFIX) +{ + mFileIO=::new FileIO; + mFileIO.disposition(PointerDisposition::Delete); +} + +MessageLog::~MessageLog() +{ + close(); +} + +BOOL MessageLog::setLog(const String &pathFileName) +{ + String strLine; + + mFileIO->close(); + mMasterList.remove(); + if(pathFileName.isNull())return FALSE; + mPathFileName=pathFileName+strMessageLogPostFix(); + mFileIO->open(mPathFileName,FileIO::GenericRead,FileIO::FileShareRead,FileIO::OpenAlways,FileIO::Archive); + if(!mFileIO->isOkay())return FALSE; + while(mFileIO->readLine(strLine))mMasterList.insert(strLine); + mFileIO->close(); + return TRUE; +} + +void MessageLog::close(void) +{ + flush(); + mMasterList.remove(); +} + +void MessageLog::flush(void) +{ + Block msgIDBlock; + + mFileIO->close(); + if(!mMasterList.leaves())return; + mFileIO->open(mPathFileName,FileIO::GenericWrite,FileIO::FileShareWrite,FileIO::CreateAlways,FileIO::Normal); + mMasterList.treeItems(msgIDBlock); + for(int itemIndex=0;itemIndexwriteLine(msgIDBlock[itemIndex]); + mFileIO->flush(); + mFileIO->close(); +} + +BOOL MessageLog::searchItem(MsgID &someMsgID) +{ + return mMasterList.searchItem(someMsgID); +} + +void MessageLog::insert(const MsgID &someMsgID) +{ + mMasterList.insert(someMsgID); +} + +BOOL MessageLog::isOkay(void) +{ + return mFileIO->isOkay(); +} diff --git a/nntp/MSGLOG.HPP b/nntp/MSGLOG.HPP new file mode 100644 index 0000000..88a3b12 --- /dev/null +++ b/nntp/MSGLOG.HPP @@ -0,0 +1,39 @@ +#ifndef _NNTP_MESSAGELOG_HPP_ +#define _NNTP_MESSAGELOG_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _NNTP_MESSAGEID_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif + +class FileIO; + +class MessageLog +{ +public: + MessageLog(void); + virtual ~MessageLog(); + BOOL setLog(const String &pathFileName); + BOOL searchItem(MsgID &someMsgID); + void insert(const MsgID &someMsgID); + void flush(void); + void close(void); + BOOL isOkay(void); +private: + const String &strMessageLogPostFix(void)const; + SmartPointer mFileIO; + BTree mMasterList; + String mPathFileName; + String mStrMessageLogPostFix; +}; + +inline +const String &MessageLog::strMessageLogPostFix(void)const +{ + return mStrMessageLogPostFix; +} +#endif diff --git a/nntp/MVC.TMP b/nntp/MVC.TMP new file mode 100644 index 0000000..e69de29 diff --git a/nntp/MWDLG.CPP b/nntp/MWDLG.CPP new file mode 100644 index 0000000..dc826e3 --- /dev/null +++ b/nntp/MWDLG.CPP @@ -0,0 +1,54 @@ +#include +#include + +WORD MoreWindowsDialog::performDialog(Block &strLines,String &strWindowText) +{ + mStrLines=strLines; + WORD resultCode(::DialogBoxParam(processInstance(),(LPSTR)"MoreWindows",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this))); + if(resultCode)strWindowText=mSelText; + return resultCode; +} + +CallbackData::ReturnType MoreWindowsDialog::initDialogHandler(CallbackData &/*someCallbackData*/) +{ + mListBox=new OwnerDrawListAltColor(*this,getItem(ListBoxID),ListBoxID,RGBColor(255,255,232),RGBColor(192,220,192),RGBColor(0,255,255)); + mListBox.disposition(PointerDisposition::Delete); + mListBox->show(SW_SHOW); + setListBoxList(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MoreWindowsDialog::dialogCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +CallbackData::ReturnType MoreWindowsDialog::commandHandler(CallbackData &someCallbackData) +{ + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()) + { + mListBox->getText(mSelText,mListBox->getCurrent()); + endDialog(TRUE); + return (CallbackData::ReturnType)FALSE; + } + switch(someCallbackData.wmCommandID()) + { + case IDOK : + mListBox->getText(mSelText,mListBox->getCurrent()); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(FALSE); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void MoreWindowsDialog::setListBoxList(void) +{ + mListBox->setRedraw(FALSE); + mListBox->resetContent(); + for(int index=0;indexinsertString(mStrLines[index]); + mListBox->setCurrent(0); + mListBox->setRedraw(TRUE); +} diff --git a/nntp/MWDLG.HPP b/nntp/MWDLG.HPP new file mode 100644 index 0000000..424661d --- /dev/null +++ b/nntp/MWDLG.HPP @@ -0,0 +1,79 @@ +#ifndef _NNTP_MOREWINDOWS_HPP_ +#define _NNTP_MOREWINDOWS_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif + +class OwnerDrawListAltColor; + +class MoreWindowsDialog : private DWindow +{ +public: + MoreWindowsDialog(const GUIWindow &parentWindow); + virtual ~MoreWindowsDialog(); + WORD performDialog(Block &strLines,String &entryText); +private: + enum{ListBoxID=MW_LISTBOX}; + MoreWindowsDialog(const MoreWindowsDialog &someMoreWindowsDialog); + MoreWindowsDialog &operator=(const MoreWindowsDialog &someMoreWindowsDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + void setListBoxList(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + Callback mDialogCodeHandler; + SmartPointer mListBox; + Block mStrLines; + String mSelText; + HWND mhParent; +}; + +inline +MoreWindowsDialog::MoreWindowsDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&MoreWindowsDialog::initDialogHandler); + mCommandHandler.setCallback(this,&MoreWindowsDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&MoreWindowsDialog::dialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +MoreWindowsDialog::MoreWindowsDialog(const MoreWindowsDialog &someMoreWindowsDialog) +: mhParent(someMoreWindowsDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&MoreWindowsDialog::initDialogHandler); + mCommandHandler.setCallback(this,&MoreWindowsDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&MoreWindowsDialog::dialogCodeHandler); +} + +inline +MoreWindowsDialog::~MoreWindowsDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +MoreWindowsDialog &MoreWindowsDialog::operator=(const MoreWindowsDialog &/*someMoreWindowsDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/nntp/Mainfrm.cpp b/nntp/Mainfrm.cpp new file mode 100644 index 0000000..6cfc4cd --- /dev/null +++ b/nntp/Mainfrm.cpp @@ -0,0 +1,805 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +: mIsCancelled(false) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mOpenHandler.setCallback(this,&MainFrame::openHandler); + mPreOpenHandler.setCallback(this,&MainFrame::preOpenHandler); + mPostOpenHandler.setCallback(this,&MainFrame::postOpenHandler); + mBrowseSelectHandler.setCallback(this,&MainFrame::browseSelectHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + NNTPThread::insertHandler(&mOpenHandler,NNTPThread::MsgOpen); + NNTPThread::insertHandler(&mPreOpenHandler,NNTPThread::MsgPreOpen); + NNTPThread::insertHandler(&mPostOpenHandler,NNTPThread::MsgPostOpen); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + NNTPThread::removeHandler(NNTPThread::MsgOpen); + NNTPThread::removeHandler(NNTPThread::MsgPreOpen); + NNTPThread::removeHandler(NNTPThread::MsgPostOpen); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case IDM_CASCADE : + cascade(); + break; + case IDM_TILE : + tile(); + break; + case IDM_ARRANGE : + arrange(); + break; + case IDM_CLOSEALL : + closeAll(); + break; + case IDM_MINIMIZEALL : + minimizeAll(); + break; + case IDM_RESTOREALL : + restoreAll(); + break; + case NNTP_FILE_OPEN : + handleFileOpen(); + break; + case NNTP_FILE_BROWSE : + handleFileBrowse(); + break; + case NNTP_FILE_EXIT : + FrameWindow::postMessage(*this,WM_CLOSE,0,0L); + break; + case NNTP_NEWS_GETNEWS : + mNewsOption.option((NewsOption::Option)someCallbackData.wParam()); + handleRetrieve(); + break; + case NNTP_NEWS_GETGROUPS : + mNewsOption.option((NewsOption::Option)someCallbackData.wParam()); + handleRetrieve(); + break; + case NNTP_NEWSGROUPS_SUBSCRIBE : + handleSubscribe(); + break; + case NNTP_IMAGE_FITTOWINDOW : + handleImageFitToWindow(); + break; + case NNTP_OPTIONS_NEWSSERVER : + handleNewsServer(); + break; + case NNTP_OPTIONS_GENERALOPTIONS : + handleGeneralOptions(); + break; + case NNTP_OPTIONS_RASSETTINGS : + handleRasSettings(); + break; + case NNTP_OPTIONS_CLEARLOG : + handleClearLog(); + break; + case NNTP_NEWS_CANCEL : + handleCancelNews(); + break; + case NNTP_VIEW_LOG : + handleViewLog(); + break; + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/) +{ + createControls(); + show(SW_SHOW); + update(); + createLogView(); + createImageView(); + mStatusControl->setText("Ready."); + PureMenu mainMenu(::GetMenu(*this)); + mainMenu.enableMenuItem(NNTP_NEWS_CANCEL,PureMenu::ByCommand,(PureMenu::InsertFlags)(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + message(mWSASystem.description()); + message(mWSASystem.systemStatus()); + loadFilterList(); + message("to run from command line use 'nntp -host: -user: -password:'"); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::closeHandler(CallbackData &someCallbackData) +{ + destroy(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/) +{ + cancel(); + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData) +{ + Rect statusRect; + Rect cRect; + + mStatusControl->windowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,0,cRect.right(),cRect.bottom()-(statusRect.bottom()-statusRect.top())); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::browseSelectHandler(CallbackData &someCallbackData) +{ + Array > mdiWindows; + String strPathFileName; + String strCaption; + bool haveImage(false); + + strPathFileName=(char*)someCallbackData.lParam(); + getDocuments(mdiWindows); + for(int index=0;index &mdiWindow=mdiWindows[index]; + mdiWindow->windowText(strCaption); + strCaption=strCaption.betweenString('[',']'); + if(!strCaption.isNull()&&strCaption==strPathFileName) + { + mdiWindow->bringWindowToTop(); + haveImage=true; + } + } + if(haveImage)return (CallbackData::ReturnType)FALSE; + if(!openDocument(strPathFileName))::MessageBox(::GetFocus(),"NNTP:Error opening document",(LPSTR)strPathFileName,MB_OK); + return (CallbackData::ReturnType)FALSE; +} + +void MainFrame::createControls(void) +{ + Rect controlRect; + Rect statusRect; + + mStatusControl=::new StatusBarEx(*this,StatusBarID); + mStatusControl.disposition(PointerDisposition::Delete); + mStatusControl->clientRect(statusRect); + controlRect.bottom(height()/2-statusRect.bottom()); +} + +void MainFrame::getParams(String &hostName,String &userName,String &password) +{ + String lineString; + + lineString=::GetCommandLine(); + lineString=lineString.betweenString(' ',0); + if(!lineString.isNull()) + { + hostName=lineString.betweenString('-',' '); + hostName=hostName.betweenString(':',0); + userName=lineString.betweenString('-',0); + userName=userName.betweenString('-',' '); + userName=userName.betweenString(':',0); + password=lineString.betweenString('-',0); + password=password.betweenString('-',0); + password=password.betweenString('-',0); + password=password.betweenString(':',0); + } + if(hostName.isNull()) + { + OptionsReg optionsReg; + hostName=optionsReg.serverName(); + userName=optionsReg.userName(); + password=optionsReg.password(); + } +} + +void MainFrame::handleFileOpen(void) +{ + String strCurrentDirectory; + DiskInfo diskInfo; + BOOL openResult(FALSE); + OpenDialog openFileName; + + diskInfo.getCurrentDirectory(strCurrentDirectory); + openFileName.owner(*this); + openFileName.instance(processInstance()); + openFileName.filter("Jpg"); + openFileName.filterPattern("*.jpg"); + openFileName.fileName("*.JPG"); + openFileName.fileTitle(""); + openFileName.initialDirectory(mLastOpenDirectory.isNull()?strCurrentDirectory:mLastOpenDirectory); + openFileName.title("Open File"); + openFileName.creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST); + openResult=openFileName.getOpenFileName(); + diskInfo.getCurrentDirectory(mLastOpenDirectory); + diskInfo.setCurrentDirectory(strCurrentDirectory); + if(!openResult)return; + openDocument(openFileName.fileName()); +} + +void MainFrame::handleSubscribe(void) +{ + GroupDialog groupDialog(*this); + groupDialog.performDialog(); +} + +void MainFrame::handleNewsServer(void) +{ + String serverName; + ServerDialog serverDialog(*this); + serverDialog.performDialog(serverName); +} + +void MainFrame::handleGeneralOptions(void) +{ + OptionsDialog optionsDialog(*this); + optionsDialog.performDialog(); +} + +void MainFrame::handleRasSettings(void) +{ + RasDialog rasDialog(*this); + rasDialog.performDialog(); +} + +void MainFrame::handleCancelNews(void) +{ + mIsCancelled=true; + cancel(); + message("Cancelled"); +} + +void MainFrame::handleRetrieve(void) +{ + String hostName; + String userName; + String password; + + mIsCancelled=false; + createLogView(); + createImageView(); + mMasterList.remove(); + if(NewsOption::GetNews==mNewsOption.option()) + { + if(!getSubscriberList(mSubscriberList)) + { + message("No newsgroups in subscriber list, nothing to do!"); + return; + } + verifyNewsDirectory(); + } + getParams(hostName,userName,password); + if(hostName.isNull()){message("Invalid host, check settings/command line and restart.");return;} + if(!userName.isNull()&&!password.isNull())open(hostName,userName,password); + else + { + message("NNTP is not using AUTHENTICATION."); + open(hostName); + } +} + +void MainFrame::verifyNewsDirectory(void) +{ + DiskInfo diskInfo; + String strNewsDir; + String strCurrentDirectory; + OptionsReg optionsReg; + + strNewsDir=optionsReg.newsDir(); + diskInfo.getCurrentDirectory(strCurrentDirectory); + if(strNewsDir.isNull()){strNewsDir=strCurrentDirectory;optionsReg.newsDir(strNewsDir);} + if(!diskInfo.setCurrentDirectory(strNewsDir)) + { + diskInfo.createDirectory(strNewsDir); + diskInfo.setCurrentDirectory(strNewsDir); + } +} + +void MainFrame::handleViewLog(void) +{ + createLogView(); +} + +void MainFrame::handleClearLog(void) +{ + if(mLogViewWinCache.isOkay())((LogView&)*mLogViewWinCache).clear(); +} + +void MainFrame::handleFileBrowse(void) +{ + OpenDirectory openDir; + OptionsReg optionsReg; + String strDirectory; + + if(!openDir.getOpenDirectory(*this,"Choose Folder",optionsReg.newsDir(),strDirectory))return; + BrowseView &browseView=createBrowseView(); + browseView.browse(strDirectory); +} + +void MainFrame::handleImageFitToWindow(void) +{ + SmartPointer mdiWindow; + + if(!getActive(mdiWindow))return; + if(!(mdiWindow->className()==String(STRING_DOCUMENTVIEWCLASSNAME)))return; + ((ImageView&)*mdiWindow).fitToWindow(); +} + +// **************************************************************************************************** + +WORD MainFrame::dialHost(void) +{ + RasOptions rasOptions; + + if(mRasInterface.isOkay()){::MessageBeep(0);return FALSE;} + if(!rasOptions.rasState())return TRUE; + mRasInterface=::new RasInterface; + mRasInterface.disposition(PointerDisposition::Delete); + if(!mRasInterface->isOkay()){mRasInterface.destroy();return FALSE;} + if(!mRasInterface->login(rasOptions.rasUserName(),rasOptions.rasPassword(),rasOptions.rasEntryName())){mRasInterface.destroy();return FALSE;} + return TRUE; +} + +DWORD MainFrame::priorDays(void)const +{ + OptionsReg optionsReg; + return optionsReg.priorDays(); +} + +DWORD MainFrame::getSubscriberList(Block &subscriberList) +{ + NewsReg newsReg; + + subscriberList.remove(); + newsReg.queryGroups(subscriberList,NewsReg::QueryActive); + return subscriberList.size(); +} + +BOOL MainFrame::openDocument(const String &strPathFileName) +{ + ImageView &imageView=createDocumentView(); + return imageView.open(strPathFileName); +} + +BOOL MainFrame::openImage(const String &strPathFileName) +{ + BOOL result(FALSE); + SmartPointer mdiWindow; + + if(!getDocumentClass(String(STRING_IMAGEVIEWCLASSNAME),mdiWindow)) + { + ImageView &imageView=createImageView(); + result=imageView.open(strPathFileName); + } + else result=((ImageView&)*mdiWindow).open(strPathFileName); + return result; +} + +LogView &MainFrame::createLogView(void) +{ + SmartPointer mdiWindow; + LogView *pLogView; + + if(getDocumentClass(String(STRING_LOGVIEWCLASSNAME),mdiWindow)){mdiWindow->top();return (LogView&)*mdiWindow;} + pLogView=::new LogView; + pLogView->createWindow(*this,String(STRING_LOGVIEWCLASSNAME),"LogView","logMenu","LOG"); + insert(*pLogView); + return *pLogView; +} + +ImageView &MainFrame::createImageView(void) +{ + SmartPointer mdiWindow; + ImageView *pImageView; + + if(getDocumentClass(String(STRING_IMAGEVIEWCLASSNAME),mdiWindow)){mdiWindow->top();return (ImageView&)*mdiWindow;} + pImageView=::new ImageView; + pImageView->createWindow(*this,String(STRING_IMAGEVIEWCLASSNAME),"ImageView","imgMenu","PAINT"); + insert(*pImageView); + return *pImageView; +} + +ImageView &MainFrame::createDocumentView(void) +{ + SmartPointer mdiWindow; + ImageView *pImageView; + + pImageView=::new ImageView; + pImageView->createWindow(*this,String(STRING_DOCUMENTVIEWCLASSNAME),"DocView","imgMenu","PAINT"); + insert(*pImageView); + return *pImageView; +} + +BrowseView &MainFrame::createBrowseView(void) +{ + SmartPointer mdiWindow; + BrowseView *pBrowseView; + + pBrowseView=::new BrowseView; + pBrowseView->createWindow(*this,String(STRING_BROWSEVIEWCLASSNAME),"BrowseView","brwMenu","PAINT"); + insert(*pBrowseView); + pBrowseView->setHandler(&mBrowseSelectHandler); + return *pBrowseView; +} + +// ************************** THREAD CALLBACKS ******************************* + +DWORD MainFrame::preOpenHandler(ThreadMessage &/*someThreadMessage*/) +{ + String retryMsg; + RasOptions rasOptions; + DWORD maxRetries(rasOptions.rasMaxRetries()); + + if(dialHost())return FALSE; + ::sprintf(retryMsg,"Could not contact host."); + message(retryMsg); + for(int retryCount=0;retryCount messageIDStrings; + String msgString; + String strNewsDir; + String strPathNewsGroupDirectory; + String strPreviousDirectory; + OptionsReg optionsReg; + + strNewsDir=optionsReg.newsDir(); + strPathNewsGroupDirectory=strNewsDir+String("\\")+newsGroup; + if(!diskInfo.setCurrentDirectory(strPathNewsGroupDirectory)) + { + diskInfo.createDirectory(strPathNewsGroupDirectory); + diskInfo.setCurrentDirectory(strPathNewsGroupDirectory); + } + message(String("Retrieving message headers for ")+newsGroup); + if(recoverLog.haveLog(newsGroup)) + { + message(String("using recovery file.")); + recoverLog.getEntries(newsGroup,messageIDStrings); + } + else + { + listGroup(newsGroup,messageIDStrings); + recoverLog.setEntries(newsGroup,messageIDStrings); + } + ::sprintf(msgString,"%s has %ld articles.",(LPSTR)newsGroup,messageIDStrings.size()); + message(msgString); + getArticles(newsGroup,messageIDStrings); + if(!mIsCancelled)recoverLog.removeLog(newsGroup); + diskInfo.setCurrentDirectory(strNewsDir); + return TRUE; +} + +BOOL MainFrame::getArticles(const String &newsGroup,Block &msgIDs) +{ + MessageLog messageLog; + DWORD alreadyHavesInARow(0); + BOOL okResult; + long elapsedTime; + + messageLog.setLog(newsGroup); + alreadyHavesInARow=0; + group(GroupItem(newsGroup)); + for(int itemIndex=0;itemIndex articleText; + Block headText; + String pathFileName; + String messageID; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=msgIDs[itemIndex]; + if(messageLog.searchItem(msgID)) + { + message(String("Already have ")+msgID); + alreadyHavesInARow++; + if(alreadyHavesInARow>250) + { + String messageID; + message("...ping server..."); + head(msgID,headText,messageID); + alreadyHavesInARow=0; + } + continue; + } + else + { + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + alreadyHavesInARow=0; + } + head(msgID,headText,messageID); + if(!inSubject(headText))continue; + messageLog.insert(msgID); + elapsedTime=::GetTickCount(); + okResult=article(msgID,articleText,messageID); + elapsedTime=::GetTickCount()-elapsedTime; + if(okResult) + { + String strPathImageFile; + saveBlock(pathFileName,articleText); + message(String("Retrieved message in ")+String().fromInt(elapsedTime)+String(" (ms)")); + message("Decoding '"+pathFileName+"'..."); + decode(pathFileName,strPathImageFile); + if(!strPathImageFile.isNull()&&openImage(strPathImageFile)) + { + ::unlink(pathFileName); + } + } + okResult=FALSE; + messageLog.flush(); + } + messageLog.close(); + return TRUE; +} + +void MainFrame::loadFilterList(void) +{ + File inFile; + String strLine; + + mFilterList.remove(); + if(!inFile.open("filter.txt","rb"))return; + message("Loading filter list from 'filter.txt'"); + while(true) + { + if(!inFile.readLine(strLine))break; + if(!strLine.length())continue; + mFilterList.insert(&strLine); + } + inFile.close(); +} + +bool MainFrame::inSubject(Block &headText) +{ + String strSubject; + if(!mFilterList.size()||!headText.size())return true; + for(int index=0;index &stringBlock) +{ + DiskInfo diskInfo; + String strCurrDir; + + if(!stringBlock.size())return FALSE; + FileHandle saveFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + if(!saveFile.isOkay()) + { + int errorCode(::GetLastError()); + String strMessage; + + strMessage.reserve(1024); + ::sprintf(strMessage,"Save file returned error code:%d 0x%08lx, attempting to save'%s'",errorCode,errorCode,(char*)(String&)pathFileName); + message(strMessage); + return FALSE; + } + for(int itemIndex=0;itemIndex &messageStrings) +{ + for(short itemIndex=0;itemIndex > mdiWindows; + String windowText; + String strSelText; + Block strTitles; + + getDocuments(mdiWindows); + for(int index=0;index &mdiWindow=mdiWindows[index]; + mdiWindow->windowText(windowText); + strTitles.insert(&windowText); + } + MoreWindowsDialog moreWindows(*this); + if(!moreWindows.performDialog(strTitles,strSelText))return; + + for(index=0;index &mdiWindow=mdiWindows[index]; + mdiWindow->windowText(windowText); + if(windowText==strSelText){mdiWindow->top();break;} + } +} + diff --git a/nntp/NCB b/nntp/NCB new file mode 100644 index 0000000..2fbfac7 Binary files /dev/null and b/nntp/NCB differ diff --git a/nntp/NEWSGRP.HPP b/nntp/NEWSGRP.HPP new file mode 100644 index 0000000..b279ca4 --- /dev/null +++ b/nntp/NEWSGRP.HPP @@ -0,0 +1,89 @@ +#ifndef _NNTP_NEWSGROUP_HPP_ +#define _NNTP_NEWSGROUP_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class NewsGroup +{ +public: + NewsGroup(void); + NewsGroup(const NewsGroup &someNewsGroup); + NewsGroup(const String &groupName,DWORD active); + virtual ~NewsGroup(); + NewsGroup &operator=(const NewsGroup &someNewsGroup); + WORD operator==(const NewsGroup &someNewsGroup)const; + const String &newsGroup(void)const; + void newsGroup(const String &newsGroup); + DWORD active(void)const; + void active(DWORD active); +private: + String mNewsGroup; + DWORD mIsActive; +}; + +inline +NewsGroup::NewsGroup(void) +: mIsActive(FALSE) +{ +} + +inline +NewsGroup::NewsGroup(const NewsGroup &someNewsGroup) +{ + *this=someNewsGroup; +} + +inline +NewsGroup::NewsGroup(const String &groupName,DWORD active) +{ + mNewsGroup=groupName; + mIsActive=active; +} + +inline +NewsGroup::~NewsGroup() +{ +} + +inline +NewsGroup &NewsGroup::operator=(const NewsGroup &someNewsGroup) +{ + newsGroup(someNewsGroup.newsGroup()); + active(someNewsGroup.active()); + return *this; +} + +inline +WORD NewsGroup::operator==(const NewsGroup &someNewsGroup)const +{ + return (newsGroup()==someNewsGroup.newsGroup()); +} + +inline +const String &NewsGroup::newsGroup(void)const +{ + return mNewsGroup; +} + +inline +void NewsGroup::newsGroup(const String &newsGroup) +{ + mNewsGroup=newsGroup; +} + +inline +DWORD NewsGroup::active(void)const +{ + return mIsActive; +} + +inline +void NewsGroup::active(DWORD isActive) +{ + mIsActive=isActive; +} +#endif diff --git a/nntp/NEWSITEM.CPP b/nntp/NEWSITEM.CPP new file mode 100644 index 0000000..a369ba8 --- /dev/null +++ b/nntp/NEWSITEM.CPP @@ -0,0 +1,35 @@ +#include + +NewsItem &NewsItem::operator=(const String &pathFileName) +{ + (Header&)*this=pathFileName; + this->pathFileName(pathFileName); + *this=(Header&)*this; + return *this; +} + +NewsItem &NewsItem::operator=(const Header &someHeader) +{ + String strName(subject()); + char *ptrString; + + String partString(subject().betweenString('(',')')); + if(partString.isNull())return *this; + ptrString=(LPSTR)partString; + ptrString=::strtok(ptrString,"/"); + if(!ptrString)return *this; + part(::atoi(ptrString)); + ptrString=::strtok(0,"\0"); + if(!ptrString)return *this; + parts(::atoi(ptrString)); + partString=subject(); + ptrString=(LPSTR)partString+partString.length(); + while(*ptrString!='('&&ptrString>(LPSTR)partString)ptrString--; + if(ptrString==(LPSTR)partString&&*ptrString!='(')return *this; + *(--ptrString)=0; + while(*ptrString!=' '&&ptrString>(LPSTR)partString)ptrString--; + if(ptrString==(LPSTR)partString&&*ptrString!=' ')return *this; + ptrString++; + name(ptrString); + return *this; +} diff --git a/nntp/NEWSITEM.HPP b/nntp/NEWSITEM.HPP new file mode 100644 index 0000000..47372f4 --- /dev/null +++ b/nntp/NEWSITEM.HPP @@ -0,0 +1,151 @@ +#ifndef _NNTP_NEWSITEM_HPP_ +#define _NNTP_NEWSITEM_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _NNTP_HEADER_HPP_ +#include +#endif + +class NewsItem : public Header +{ +public: + NewsItem(void); + NewsItem(const NewsItem &someNewsItem); + NewsItem(const String &pathFileName); + virtual ~NewsItem(); + NewsItem &operator=(const NewsItem &someNewsItem); + NewsItem &operator=(const String &pathFileName); + NewsItem &operator=(const Header &someHeader); + WORD operator<(const NewsItem &someNewsItem)const; + WORD operator>(const NewsItem &someNewsItem)const; + WORD operator==(const NewsItem &someNewsItem)const; + const String &name(void)const; + void name(const String &name); + DWORD part(void)const; + void part(DWORD part); + DWORD parts(void)const; + void parts(DWORD parts); + const String &pathFileName(void)const; + void pathFileName(const String &pathFileName); + WORD isOkay(void)const; +private: + String mName; + DWORD mPart; + DWORD mParts; + String mPathFileName; +}; + +inline +NewsItem::NewsItem(void) +: mPart(0), mParts(0) +{ +} + +inline +NewsItem::NewsItem(const NewsItem &someNewsItem) +: mPart(0), mParts(0) +{ + *this=someNewsItem; +} + +inline +NewsItem::NewsItem(const String &pathFileName) +: mPart(0), mParts(0) +{ + *this=pathFileName; +} + +inline +NewsItem::~NewsItem() +{ +} + +inline +NewsItem &NewsItem::operator=(const NewsItem &someNewsItem) +{ + name(someNewsItem.name()); + part(someNewsItem.part()); + parts(someNewsItem.parts()); + pathFileName(someNewsItem.pathFileName()); + return *this; +} + +inline +WORD NewsItem::operator==(const NewsItem &someNewsItem)const +{ + return (name()==someNewsItem.name()&& + part()==someNewsItem.part()&& + parts()==someNewsItem.parts()); +} + +inline +WORD NewsItem::operator<(const NewsItem &someNewsItem)const +{ + return (part()(const NewsItem &someNewsItem)const +{ + return (part()>someNewsItem.part()); +} + +inline +const String &NewsItem::name(void)const +{ + return mName; +} + +inline +void NewsItem::name(const String &name) +{ + mName=name; +} + +inline +DWORD NewsItem::part(void)const +{ + return mPart; +} + +inline +void NewsItem::part(DWORD part) +{ + mPart=part; +} + +inline +DWORD NewsItem::parts(void)const +{ + return mParts; +} + +inline +void NewsItem::parts(DWORD parts) +{ + mParts=parts; +} + +inline +const String &NewsItem::pathFileName(void)const +{ + return mPathFileName; +} + +inline +void NewsItem::pathFileName(const String &pathFileName) +{ + mPathFileName=pathFileName; +} + +inline +WORD NewsItem::isOkay(void)const +{ + if(!part()&&!parts())return FALSE; + return TRUE; +} +#endif \ No newline at end of file diff --git a/nntp/NEWSNODE.HPP b/nntp/NEWSNODE.HPP new file mode 100644 index 0000000..8266173 --- /dev/null +++ b/nntp/NEWSNODE.HPP @@ -0,0 +1,26 @@ +#ifndef _NNTP_NEWSTREE_HPP_ +#define _NNTP_NEWSTREE_HPP_ + +class NewsNode +{ +public: + NewsNode(void); + NewsNode(const NewsNode &someNewsNode); + virtual ~NewsNode(); + +private: + String mNodeName; + Block mNewsItems; + SmartPointer mNextNode; +}; + +class NewsTree +{ +public: + NewsTree(void); + virtual ~NewsTree(); + BOOL insertNode(const String &strNodeName); +private: + Block mNewsNodes; +}; +#endif \ No newline at end of file diff --git a/nntp/NEWSOPT.HPP b/nntp/NEWSOPT.HPP new file mode 100644 index 0000000..3b4337e --- /dev/null +++ b/nntp/NEWSOPT.HPP @@ -0,0 +1,59 @@ +#ifndef _NNTP_NEWSOPTION_HPP_ +#define _NNTP_NEWSOPTION_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif + +class NewsOption +{ +public: + enum Option{GetNews=NNTP_NEWS_GETNEWS,GetGroups=NNTP_NEWS_GETGROUPS}; + NewsOption(void); + NewsOption(const NewsOption &someNewsOption); + virtual ~NewsOption(); + NewsOption &operator=(const NewsOption &someNewsOption); + Option option(void)const; + void option(Option option); +private: + Option mOption; +}; + +inline +NewsOption::NewsOption(void) +: mOption(GetNews) +{ +} + +inline +NewsOption::NewsOption(const NewsOption &someNewsOption) +{ + *this=someNewsOption; +} + +inline +NewsOption::~NewsOption() +{ +} + +inline +NewsOption &NewsOption::operator=(const NewsOption &someNewsOption) +{ + option(someNewsOption.option()); + return *this; +} + +inline +NewsOption::Option NewsOption::option(void)const +{ + return mOption; +} + +inline +void NewsOption::option(Option option) +{ + mOption=option; +} +#endif \ No newline at end of file diff --git a/nntp/NEWSREG.CPP b/nntp/NEWSREG.CPP new file mode 100644 index 0000000..bb71304 --- /dev/null +++ b/nntp/NEWSREG.CPP @@ -0,0 +1,74 @@ +#include +#include +#include + +WORD NewsReg::queryGroups(Block &subscriberList,QueryType queryType) +{ + RegKey regKey(RegKey::CurrentUser); + String groupName; + DWORD status; + DWORD groupIndex(0); + + subscriberList.remove(); + if(!regKey.openKey(mNewsGroupsKeyName))return FALSE; + while(regKey.enumValue(groupIndex++,groupName,status)) + { + if(QueryActive==queryType&&!status)continue; + subscriberList.insert(&NewsGroup(groupName,status)); + } + return (subscriberList.size()?TRUE:FALSE); +} + +WORD NewsReg::addGroup(const String &groupName,DWORD active) +{ + RegKey regKey(RegKey::CurrentUser); + Block subscriberList; + + if(groupName.isNull())return FALSE; + if(!regKey.openKey(mNewsGroupsKeyName)) + { + regKey.createKey(mNewsGroupsKeyName,""); + if(!regKey.openKey(mNewsGroupsKeyName))return FALSE; + } + queryGroups(subscriberList); + for(int itemIndex=0;itemIndex subscriberList; + int prefixValue(0); + + if(groupName.isNull())return FALSE; + if(!regKey.openKey(RegKey::CurrentUser,mNewsGroupsKeyName))return false; + queryGroups(subscriberList); + regKey.closeKey(); + if(!regKey.openKey(RegKey::CurrentUser,mApplicationKeyName))return false; + regKey.deleteKey(mNewsGroupsShortName); + regKey.closeKey(); + if(!regKey.createKey(RegKey::CurrentUser,mNewsGroupsKeyName))return false; + if(!regKey.openKey(RegKey::CurrentUser,mNewsGroupsKeyName))return false; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif +#ifndef _NNTP_NEWSGROUP_HPP_ +#include +#endif + +class NewsGroup; + +class NewsReg +{ +public: + enum QueryType{QueryActive,QueryAll}; + NewsReg(void); + virtual ~NewsReg(); + WORD queryGroups(Block &subscriberList,QueryType queryType=QueryAll); + WORD addGroup(const String &groupName,DWORD active=TRUE); + WORD addGroup(const NewsGroup &someNewsGroup); + WORD setGroup(const String &newsGroup,DWORD active); + WORD removeGroup(const String &groupName); +private: + NewsReg(const NewsReg &someNewsReg); + String mNewsGroupsKeyName; + String mNewsGroupsKeyValuePrefix; + String mApplicationKeyName; + String mNewsGroupsShortName; +}; + +inline +NewsReg::NewsReg(void) +: mNewsGroupsKeyValuePrefix(STRING_NEWSGROUPSKEYVALUEPREFIX), + mNewsGroupsKeyName(STRING_NEWSGROUPSKEYNAME), + mApplicationKeyName(STRING_NNTPKEYNAME), + mNewsGroupsShortName(STRING_NEWSGROUPSSHORTNAME) +{ +} + +inline +NewsReg::~NewsReg() +{ +} + +inline +NewsReg::NewsReg(const NewsReg &someNewsReg) +: mNewsGroupsKeyValuePrefix(STRING_NEWSGROUPSKEYVALUEPREFIX), + mNewsGroupsKeyName(STRING_NEWSGROUPSKEYNAME) +{ // no implementation +} + +inline +WORD NewsReg::addGroup(const NewsGroup &someNewsGroup) +{ + return addGroup(someNewsGroup.newsGroup(),someNewsGroup.active()); +} +#endif \ No newline at end of file diff --git a/nntp/NEWSSRC b/nntp/NEWSSRC new file mode 100644 index 0000000..40ff73d --- /dev/null +++ b/nntp/NEWSSRC @@ -0,0 +1,25784 @@ +0.test +01alt.test +1.a +1.a.bovine +1.aardvark +1.at.the.top.of.the.list +1.beginners.a +1.binaries.pictures.erotica +12hr +12hr.sex.abnormal +12hr.sex.oral +1a +1a.greenville.goal +24hoursupport.helpdesk +3b.config +3b.misc +3b.tech +3dfx +3dfx.3d3.drivers +3dfx.d3d +3dfx.d3d.driver +3dfx.d3d.drivers +3dfx.d3d.drivers.diamond +3dfx.d3d.drivers.orchid +3dfx.events +3dfx.game +3dfx.game.discussion +3dfx.game.glquake +3dfx.game.requests +3dfx.game.support +3dfx.game.titles +3dfx.game.titles.glquake +3dfx.game.upcoming +3dfx.games +3dfx.games.discussion +3dfx.games.glquake +3dfx.games.titles +3dfx.glide +3dfx.glide.linue +3dfx.glide.linux +3dfx.oem +3dfx.oem.products +3dfx.oem.products.canopus.pure3d +3dfx.oem.products.diamond +3dfx.oem.products.diamond.monster.3d +3dfx.oem.products.diamond.monster3D +3dfx.oem.products.diamond.monster3d +3dfx.oem.products.hercules.stingray128-3d +3dfx.oem.products.intergraph +3dfx.oem.products.intergraph.i3dv +3dfx.oem.products.jazz.adrenaline_rush +3dfx.oem.products.orchid +3dfx.oem.products.orchid.righteous.3d +3dfx.oem.products.orchid.righteous3d +3dfx.oem.products.quantum3d.obsidian +3dfx.oem.products.realvision.flash3d +3dfx.oem.products.skywell.magic3d +3dfx.oem.products.techworks.power3d +3dfx.opengl +3dfx.products +3dfx.products.voodoo2 +3dfx.products.voodoo3 +3dfx.products.voodoo5 +3dfx.products.voodoobanshee +3dfx.products.voodoographics +3dfx.products.voodoorush +3dfx.support +3dfx.test +3do.bad-attitude +3do.software.tools +5col +5col.announce +5col.forsale +5col.general +5col.housing +5col.org.womens-studies.announce +5col.politics +5col.rides +97comp.jobs +ALT.BUSINESS.MISC +ALT.MAKE.MONEY +ALT.TEST +Alt.Mush +Alt.binaries.pictures.erotica.gaymen +Alt.gothic +Alt.sex +Alt.test +Soc.Penpals +TalkNet.forum +a.bsu.programming +a.bsu.religion +a.bsu.talk +a.business +a.business.internet +a.jobs +a.marketplace +a1.robin +a2000.beeld +a2000.beeld.binaries +a2000.binaries +a2000.comp.software.geluid.binaries +a2000.discussie +a2000.erotica.binaries +a2000.games +a2000.games.binaries +a2000.geluid.binaries +a2000.markt +a2000.test +a2000.vraag-en-antwoord +a2i.ba.jobs +a2i.ba.jobs.offered +a2i.ba.jobs.offered.hivol +a2i.general +a2i.outgoing +a2i.test +aaa.inu-chan +aaaustin.jobs +aapg.general +ab.general +adobe.acrobat.ebook.reader +adobe.acrobat.macintosh +adobe.acrobat.reader +adobe.acrobat.reader.pocketpc +adobe.acrobat.sdk +adobe.acrobat.windows +adobe.activeshare.windows +adobe.after.effects +adobe.animation.tips +adobe.atm.type.macintosh +adobe.atm.type.windows +adobe.atmosphere +adobe.colormanagement +adobe.createPDF.online +adobe.framemaker +adobe.framemaker.sgml +adobe.golive.featurerequests +adobe.golive.macintosh +adobe.golive.windows +adobe.illustrator.featurerequests +adobe.illustrator.macintosh +adobe.illustrator.windows +adobe.indesign.macintosh +adobe.indesign.sdk +adobe.indesign.windows +adobe.livemotion +adobe.pagemaker.macintosh +adobe.pagemaker.windows +adobe.pdf.workflow +adobe.photodeluxe.business +adobe.photodeluxe.homeedition +adobe.photoshop.elements +adobe.photoshop.elements.featurerequests +adobe.photoshop.le +adobe.photoshop.macintosh +adobe.photoshop.windows +adobe.photoshop.windows.faq +adobe.postscript.programming +adobe.premiere.macintosh +adobe.premiere.windows +adobe.scripting.indesign +adobe.typography +air.unix +airmail.analog +airmail.announce +airmail.flame +airmail.general +airmail.isdn +airmail.support +airnews.alt.announce +airnews.alt.binaries.fan.letterman +airnews.alt.company.wsps +airnews.alt.culture.etiquette +airnews.alt.paranoia.black.helicopters +airnews.alt.travel.air.airports.bicker +airnews.announce +airnews.dupes +airnews.flame +airnews.general +airnews.support +airnews.test +al.business +al.jobs +al.sex +alabama.announce +alabama.birmingham +alabama.birmingham.forsale +alabama.birmingham.general +alabama.birmingham.jobs +alabama.birmingham.radio.amateur +alabama.birmingham.sports +alabama.birmingham.students +alabama.config +alabama.decatur.general +alabama.education +alabama.general +alabama.jobs +alabama.mobile.general +alabama.politics +alabama.shoals.general +alabama.sports +alabama.sports.alabama +alabama.sports.auburn +alabama.sports.misc +alabama.test +alabama.tuscaloosa.general +alc.alc.bier.pils +alc.alc.c2h5oh +alc.archive +alc.general +alc.market +alc.stat +alc.suicide +alc.test +alc.tools.clearcase +alc.tools.misc +alc.tools.ovw +algonet.diverse +algonet.pc +algonet.pc.windows95 +algonet.test +alive +alive.announce +alive.art +alive.art.paintings +alive.art.poems +alive.bbs +alive.complaints +alive.complaints.flaming +alive.complaints.spamming +alive.computers +alive.computers.hardware +alive.computers.hardware.harddisks +alive.computers.hardware.modems +alive.computers.hardware.systems +alive.computers.hardware.systems.apple +alive.computers.hardware.systems.ast +alive.computers.hardware.systems.commodore +alive.computers.hardware.systems.compaq +alive.computers.hardware.systems.g2 +alive.computers.hardware.systems.hp +alive.computers.hardware.systems.ibm +alive.computers.hardware.systems.laser +alive.computers.hardware.systems.sun +alive.computers.hardware.systems.tulip +alive.computers.software +alive.computers.software.compression +alive.computers.software.compression.arj +alive.computers.software.compression.lzh +alive.computers.software.compression.rar +alive.computers.software.compression.zip +alive.computers.software.ms-access +alive.computers.software.ms-office +alive.computers.software.ms-word +alive.computers.software.netware +alive.computers.software.os +alive.computers.software.os.freebsd +alive.computers.software.os.linux +alive.computers.software.os.msdos +alive.computers.software.os.os2 +alive.computers.software.os.unix +alive.computers.software.os.windows +alive.computers.software.os.windows.nt +alive.computers.software.visual-dbase +alive.computers.software.wordperfect +alive.culture +alive.culture.christmas +alive.culture.nl +alive.culture.us.halloween +alive.culture.us.thanksgiving +alive.current-issues +alive.current-issues.nl +alive.diary +alive.entertainment +alive.entertainment.games +alive.entertainment.games.doom +alive.entertainment.games.quake +alive.entertainment.games.quakeworld +alive.entertainment.movies +alive.entertainment.movies.toy-story +alive.internet +alive.internet.domain +alive.internet.domain.market +alive.internet.domain.registration +alive.internet.domain.top-level +alive.internet.domain.top-level.alive +alive.internet.domain.top-level.auto +alive.internet.domain.top-level.biz +alive.internet.domain.top-level.com +alive.internet.domain.top-level.earth +alive.internet.domain.top-level.edu +alive.internet.domain.top-level.info +alive.internet.domain.top-level.org +alive.internet.domain.top-level.xxx +alive.internet.ftp +alive.internet.ftp.cuteftp +alive.internet.ftp.wsftp +alive.internet.irc +alive.internet.irc.bots +alive.internet.irc.mirc +alive.internet.irc.wsirc +alive.internet.lang +alive.internet.lang.html +alive.internet.lang.java +alive.internet.lang.javascript +alive.internet.lang.perl +alive.internet.mail +alive.internet.mail.eudora +alive.internet.mail.pegasus +alive.internet.mail.zmail +alive.internet.news +alive.internet.news.agent +alive.internet.news.dejanews +alive.internet.news.newsxpress +alive.internet.off-line +alive.internet.off-line.bbs +alive.internet.off-line.fmail +alive.internet.off-line.golded +alive.internet.off-line.timed +alive.internet.organizations +alive.internet.organizations.alternic +alive.internet.organizations.iesg +alive.internet.organizations.ietf +alive.internet.organizations.internic +alive.internet.organizations.isoc +alive.internet.organizations.nrc +alive.internet.organizations.nsf +alive.internet.organizations.nsi +alive.internet.providers +alive.internet.providers.aol +alive.internet.providers.aw +alive.internet.providers.aw.setarnet +alive.internet.providers.be +alive.internet.providers.be.eunet +alive.internet.providers.be.globe +alive.internet.providers.be.net4all +alive.internet.providers.compuserve +alive.internet.providers.demon +alive.internet.providers.free +alive.internet.providers.free.angelfire +alive.internet.providers.free.dds +alive.internet.providers.free.geocities +alive.internet.providers.free.tripod +alive.internet.providers.globalxs +alive.internet.providers.gnn +alive.internet.providers.netcom +alive.internet.providers.nl +alive.internet.providers.us +alive.internet.providers.worldnet +alive.internet.providers.xs4all +alive.internet.uucp +alive.internet.www +alive.internet.www.browsers +alive.internet.www.browsers.ariadne +alive.internet.www.browsers.lynx +alive.internet.www.browsers.msie +alive.internet.www.browsers.netscape +alive.internet.www.search-engines +alive.internet.www.search-engines.altavista +alive.internet.www.search-engines.bigfoot +alive.internet.www.search-engines.infoseek +alive.internet.www.search-engines.lycos +alive.internet.www.search-engines.nrc +alive.internet.www.search-engines.quickseek +alive.internet.www.search-engines.whowhere +alive.internet.www.search-engines.yahoo +alive.internet.www.search-engines.yellow-pages +alive.local +alive.local.aw +alive.local.be +alive.local.de +alive.local.dk +alive.local.il +alive.local.nl +alive.local.uk +alive.local.us +alive.local.us.la +alive.local.us.new-york +alive.local.us.texas +alive.market +alive.market.forsale +alive.market.forsale.computers +alive.market.forsale.computers.hardware +alive.market.forsale.music +alive.market.forsale.music.boots +alive.market.wanted +alive.market.wanted.serialnumbers +alive.media +alive.media.internet +alive.media.magazines +alive.media.magazines.electronic +alive.media.magazines.playboy +alive.media.magazines.wired +alive.media.radio +alive.media.radio.nl +alive.media.tv +alive.media.tv.abc +alive.media.tv.bbc +alive.media.tv.be +alive.media.tv.be.brtn +alive.media.tv.be.rtbf +alive.media.tv.be.tvm +alive.media.tv.bnn +alive.media.tv.cartoon +alive.media.tv.cnn +alive.media.tv.discovery +alive.media.tv.filmnet +alive.media.tv.fox +alive.media.tv.mtv +alive.media.tv.mtve +alive.media.tv.mtve.dial +alive.media.tv.mtve.select +alive.media.tv.nbc +alive.media.tv.nickelodeon +alive.media.tv.nl +alive.media.tv.sky +alive.media.tv.soap +alive.media.tv.talk-shows +alive.media.tv.talk-shows.jerry +alive.media.tv.talk-shows.oprah +alive.media.tv.talk-shows.ricky +alive.media.tv.veronica +alive.media.tv.veronica.call-tv +alive.media.tv.veronica.now-tv +alive.music +alive.music.1960s +alive.music.alanis +alive.music.bjork +alive.music.charts +alive.music.charts.nl +alive.music.genres.rap +alive.music.hard-rock +alive.music.hard-rock.bon-jovi +alive.music.hard-rock.guns-n-roses +alive.music.hard-rock.hard-rock-cafe +alive.music.house +alive.music.house.total-touch +alive.music.house.total-touch.trijntje +alive.music.instruments +alive.music.instruments.guitar +alive.music.instruments.piano +alive.music.instruments.sax +alive.music.jazz +alive.music.jungle +alive.music.metal +alive.music.organizations +alive.music.organizations.buma-stemra +alive.music.paradiso +alive.music.record-labels +alive.music.record-labels.geffen +alive.music.rock-n-roll +alive.music.stones +alive.music.tivoli +alive.nature +alive.nature.rainforrest +alive.news +alive.news.entertainment +alive.news.local +alive.news.local.aw +alive.news.local.be +alive.news.local.be.antwerpen +alive.news.local.be.brussel +alive.news.local.be.bruxelles +alive.news.local.be.gent +alive.news.local.be.luik +alive.news.local.nl +alive.news.local.uk +alive.news.local.uk.london +alive.news.local.usa +alive.news.local.usa.dallas +alive.news.local.usa.hollywood +alive.news.local.usa.lasvegas +alive.news.local.usa.miami +alive.news.local.usa.neworleans +alive.news.local.usa.newyork +alive.news.local.usa.washington +alive.news.sports +alive.news.technology +alive.news.world +alive.news.world.headlines +alive.organizations +alive.organizations.greenpeace +alive.organizations.nl +alive.people.akasha +alive.products +alive.products.drinks +alive.products.drinks.7up +alive.products.drinks.cocacola +alive.products.drinks.pepsi +alive.products.food +alive.products.food.bbq +alive.products.food.chips +alive.products.food.recipies +alive.religion +alive.requests +alive.school +alive.school.campus +alive.school.college +alive.school.college.art +alive.school.college.drama +alive.school.college.english +alive.school.college.history +alive.school.college.spanish +alive.school.preschool +alive.school.university +alive.sport +alive.sport.baseball +alive.sport.basketball +alive.sport.formula1 +alive.sport.hockey +alive.sport.soccer +alive.sport.soccer.ajax +alive.sport.soccer.barcelona +alive.sport.soccer.feyenoord +alive.sport.soccer.inter +alive.sport.soccer.local +alive.sport.soccer.local.nl +alive.sport.soccer.milan +alive.sport.soccer.uefa +alive.sport.soccer.utrecht +alive.sports +alive.statistics +alive.technology +alive.test +alive.transportation +alive.transportation.bus +alive.transportation.car +alive.transportation.car.citroen +alive.transportation.car.citroen.2cv +alive.transportation.car.honda +alive.transportation.car.renault +alive.transportation.car.saab +alive.transportation.car.volvo +alive.transportation.car.vw +alive.transportation.car.vw.beatie +alive.transportation.heli +alive.transportation.metro +alive.transportation.plain +alive.transportation.train +alive.transportation.tram +alive.unmoderated +allt.sex +allt.sex.fetish +alt +alt.-1d +alt.0.infinity.squared +alt.1.000.tickle.me.uni-grouper +alt.1.aardvark +alt.12hr +alt.1d +alt.23is.strange +alt.260.crackz +alt.260.hackerz +alt.260.programz +alt.260.warez +alt.2600 +alt.2600.414 +alt.2600.AOL +alt.2600.QnA +alt.2600.anti-archangel +alt.2600.aol +alt.2600.archangel +alt.2600.cardz +alt.2600.codez +alt.2600.crack +alt.2600.cracks +alt.2600.crackz +alt.2600.crakz +alt.2600.debate +alt.2600.fake-id +alt.2600.hackers +alt.2600.hackers.programming +alt.2600.hackerz +alt.2600.hope +alt.2600.hope.announce +alt.2600.hope.d +alt.2600.hope.tech +alt.2600.moderated +alt.2600.phreakz +alt.2600.programz +alt.2600.warez +alt.2600.warez.newbie-school +alt.2600.warez.requests +alt.2600d +alt.2600hz +alt.2610.crackz +alt.266 +alt.2d +alt.2eggs.sausage.beans.tomatoes.2toast.largetea.cheerslove +alt.3d +alt.3d.forensic.animation +alt.3d.misc +alt.3d.rhino +alt.3d.sirds +alt.3d.stereograms +alt.3d.studio +alt.3djam-tv +alt.8z76 +alt.BINARIES.PICTURES.EROTICA.FISTING +alt.Cajun +alt.Cajun.info +alt.Mirc +alt.a +alt.a.ff +alt.a.ja.jestem.glupi +alt.a.r.of.kyfolwvtpfk.q.teej.usgq +alt.a.s +alt.aaaaaa +alt.aac +alt.aamerican.olympians.choke.choke.choke +alt.aapg.announce +alt.aapg.general +alt.aardvark +alt.aber +alt.abg.maxwell +alt.abg.mexwall +alt.abide +alt.ablecommerce +alt.abortion +alt.abortion.inequity +alt.abp.cosmodeipita +alt.abuse +alt.abuse-recovery +alt.abuse.howard.knight +alt.abuse.minton +alt.abuse.offender +alt.abuse.offender.recovery +alt.abuse.recovery +alt.abuse.transcendence +alt.abyss.arthra +alt.accounting +alt.acme.exploding.newsgroup +alt.acorn.adverts +alt.acorn.demos +alt.acting +alt.activeserverpages +alt.activism +alt.activism.age-restrictions +alt.activism.children +alt.activism.children.cps-issues +alt.activism.children.cps-reform +alt.activism.children.molesters +alt.activism.children.whatisa-pedophile +alt.activism.community +alt.activism.d +alt.activism.death-penalty +alt.activism.drug-war +alt.activism.drug-war.mj-millennium +alt.activism.eco-action +alt.activism.groups.1998-nostalgia-club +alt.activism.groups.crossposters-league +alt.activism.latino-youth +alt.activism.microsoft.public.de.sqlserver +alt.activism.noise-pollution +alt.activism.noise.pollution +alt.activism.nuclear-test.news +alt.activism.peacefire +alt.activism.student +alt.activism.youth-rights +alt.actor.dustin-hoffman +alt.actor.paul-stacey +alt.actor.paul.stacey +alt.ad +alt.adam-hotz +alt.adam-learn-to-read +alt.adam-learn-to-read.headers +alt.adc +alt.addell.news +alt.adjective +alt.adjective.noun.verb.verb +alt.adjective.noun.verb.verb.verb +alt.adopt.latvian.babies +alt.adoption +alt.adoption.adoption-world +alt.adoption.adoptive +alt.adoption.adoptive.parenting +alt.adoption.agency +alt.adoption.agency.losninos +alt.adoption.issues +alt.adoption.korean +alt.adoption.searching +alt.adoptive.parenting +alt.ads +alt.ads.for.sale +alt.ads.forsale +alt.ads.forsale.computers +alt.adult.stories.text +alt.advanced.placed.or.honors.chemistry.2 +alt.advocacy.pico +alt.aeffle +alt.aeffle.und +alt.aeffle.und.pferdle +alt.afilcm +alt.agff-reg.daveg +alt.agff-reg.iwa13 +alt.aggta +alt.aggta.peter-thomas +alt.agnosticism +alt.agoracast.wwx +alt.agricultural.sustainable +alt.agriculture +alt.agriculture.beef +alt.agriculture.commodities +alt.agriculture.dean-stark +alt.agriculture.fruit +alt.agriculture.misc +alt.agriculture.ratite +alt.agriculture.technology +alt.ahbqs.com.sucks +alt.airbrush.art +alt.airline.class.action.lawsuit +alt.airline.schedules +alt.airports +alt.airports.uk.edinburgh +alt.airstream +alt.airwarrior.squads.black-roses +alt.alala +alt.alchemy +alt.alcohol +alt.alcohol.jack-daniels +alt.aldus +alt.aldus.freehand +alt.aldus.misc +alt.aldus.pagemaker +alt.alex +alt.alex.argues +alt.alex.argues.with +alt.alex.argues.with.maximum +alt.algebra +alt.algebra.help +alt.algonetics +alt.alien +alt.alien.research +alt.alien.vampire +alt.alien.vampire.flonk.flonk.flonk +alt.alien.visitor +alt.alien.visitors +alt.alien.wanderers +alt.aliens +alt.aliens.imprisoned +alt.aliens.they-are-here +alt.allsysop +alt.als +alt.als.zelfhulpgroep.be +alt.alt +alt.alt.alt +alt.alt.alt.alt +alt.alt.alt.alt.alt +alt.alt.binaries.pictures.erotica +alt.alt.binaries.pictures.plaatjes +alt.alt.binaries.pictures.wallpaper.tiles +alt.alt.life.the-universe.and-everything +alt.alt.maxwell +alt.alt.mexwall +alt.alt.music.g-fibbers +alt.alt.pinwheel.is.the.man +alt.alt.sex +alt.alt.sex.spanking +alt.alt.spamtrap +alt.alt.test +alt.alt2600 +alt.alternative.health.drrush +alt.altopia +alt.altopia-news-server +alt.altopia-news-server.going-going-gone +alt.altopia-news-server.please-sale-it-cc +alt.altopia-news-server.was-the-best +alt.altopia-news-server.was-the-best.now-sucks-like +alt.altopia-news-server.was-the-best.now-sucks-like.the-rest +alt.altopia.please.crosspost +alt.altopia.please.crosspost.responsibly +alt.alumni.bronx-science +alt.alumni.warwick +alt.amanda.g.is.a.superstar +alt.amateur-comp +alt.amazon-women +alt.amazon-women.admirers +alt.amber +alt.america +alt.america.online +alt.america.online.alt.business +alt.american +alt.american.automobile +alt.american.automobile.breakdown +alt.american.caribbean +alt.american.olympians.choke.choke.choke +alt.ameritech.jim.bayless.must.perish +alt.amiga +alt.amiga.demos +alt.amiga.slip +alt.ammonia.refrigeration +alt.amsoil +alt.amtgard +alt.amusements-forsale.uk +alt.amusements.uk +alt.anagrams +alt.anal.retentive.freddie-holtz +alt.anarchism +alt.anarchism.communist +alt.anarchism.syndicalist +alt.anarchy.rules +alt.and +alt.angels +alt.anger +alt.angst +alt.angst.shut.the.fuck +alt.angst.shut.the.fuck.up +alt.angst.shut.the.fuck.up.pinkboy +alt.angst.upc +alt.angst.xibo.sex +alt.angst.xibo.sexalt.magick.sex +alt.animals +alt.animals.badgers +alt.animals.bear +alt.animals.bears +alt.animals.breeders.rabbits +alt.animals.cat +alt.animals.crab +alt.animals.dog +alt.animals.dogs.collies.open-forum +alt.animals.dolphins +alt.animals.eagle.bald +alt.animals.ethics.vegetarian +alt.animals.falcon +alt.animals.felines +alt.animals.felines.diseases +alt.animals.felines.lions +alt.animals.felines.snowleopards +alt.animals.foxes +alt.animals.furtrapping +alt.animals.gibbon +alt.animals.giraffes +alt.animals.goats +alt.animals.goats.pygmy +alt.animals.gorilla +alt.animals.gull +alt.animals.hawk +alt.animals.horses +alt.animals.horses.breeding +alt.animals.horses.icelandic +alt.animals.humans +alt.animals.humans.dishonesty.ubiquitous +alt.animals.lampreys +alt.animals.lemur +alt.animals.lion +alt.animals.llama +alt.animals.mules +alt.animals.otters +alt.animals.pandas +alt.animals.paul-hendry +alt.animals.peacock +alt.animals.ponies +alt.animals.rabbit +alt.animals.raccoons +alt.animals.rights.promotion +alt.animals.scorpion +alt.animals.sealion +alt.animals.tiger +alt.animals.whales +alt.animals.wombat +alt.animals.zebu +alt.animation +alt.animation.batman +alt.animation.mainframe +alt.animation.mike-judge +alt.animation.nick-park +alt.animation.spumco +alt.animation.warner-bros +alt.anime +alt.anime.cardcaptor-sakura +alt.anime.escaflowne +alt.anime.gundam +alt.anime.shoujo +alt.anime.techi-muyo +alt.anime.tenchi-muyo +alt.annelies +alt.anonmailnet.messages +alt.anonymous +alt.anonymous.domains +alt.anonymous.email +alt.anonymous.message +alt.anonymous.messages +alt.anonymous.messages.luciferslegion +alt.anonymous.messages.skuznet +alt.anonymous.servers.cotse-com +alt.answers +alt.answers.human-sexuality +alt.antarctica.cool.cool.cool +alt.anthony-ciolli +alt.anthrax.binaries +alt.anthrax.binaries.pictures +alt.anthrax.chat +alt.anthrax.comp +alt.anti-ebay +alt.antichristnet +alt.antiques +alt.antiques.delaware.joe +alt.antonio.sabato.jr +alt.anybody +alt.anygroup +alt.anyone.can.make.a.group +alt.anyone.can.make.a.group.part.deux +alt.anything +alt.aol +alt.aol-sucks +alt.aol-sucks.rejects +alt.aol.cypher +alt.aol.isp-list +alt.aol.overbilling +alt.aol.rejects +alt.aol.should.have.crossposting +alt.aol.sucks +alt.aol.tricks +alt.apache.configuration +alt.apocalypse +alt.apocalypso +alt.appalachian +alt.appalachian.literature +alt.april +alt.april.fool +alt.aquaria +alt.aquaria.guppy +alt.aquaria.killies +alt.aquaria.marketplace +alt.aquaria.oscars +alt.aquaria.tropical.fish.hobbist +alt.aquaria.whitecloud +alt.arabic +alt.arabic.comp +alt.arabic.flying +alt.arabic.general +alt.arabic.politics +alt.archaeology +alt.archeology +alt.archery +alt.archery.traditional +alt.archimedes-bugs +alt.archimedes.bugs +alt.architecture +alt.architecture.alternative +alt.architecture.int-design +alt.argen +alt.argentina.adolecentes +alt.argus +alt.armourers +alt.aromatherapy +alt.arriflex.sucks +alt.art +alt.art-bell +alt.art.bodypainting +alt.art.caricature +alt.art.colleges +alt.art.hirez +alt.art.illustration +alt.art.jobs +alt.art.marketplace +alt.art.pyrotechnic +alt.art.pyrotechnics +alt.art.scene +alt.art.video +alt.art.virtual-beret +alt.artcom +alt.artcrime +alt.arthritis.spondy.risg.info +alt.artificial +alt.arts +alt.arts.anthro +alt.arts.ballet +alt.arts.ballet-dance.uk +alt.arts.bujinkan +alt.arts.bujinkan-sucks +alt.arts.bujinkan.hayes_is_gay +alt.arts.caricature +alt.arts.contortion +alt.arts.dark-erotica +alt.arts.limericks +alt.arts.murky-pond +alt.arts.nomad +alt.arts.origami +alt.arts.poetry +alt.arts.poetry.comments +alt.arts.poetry.urban +alt.arts.storytelling +alt.artsenkeuze.nl +alt.ascii +alt.ascii-art +alt.ascii-art.animation +alt.ascii-art.endless-blabla +alt.ascii.hellas +alt.ascoli.calcio +alt.asenbo.robd +alt.asian-image +alt.asian-movies +alt.asian.american.chat +alt.asian.women +alt.ask.phred +alt.ass.assinate.me +alt.assassination.jfk +alt.assassination.jfk.uncensored +alt.asshole-factory.hackers.malicious +alt.asshole.al-gore +alt.asshole.factory.hackers.malicious +alt.asshole.george-w-bush +alt.asshole.george.w.bush +alt.asshole.montgomery-wood +alt.asshole.reinhold.aman +alt.astra.accounting +alt.astrology +alt.astrology.asian +alt.astrology.marketplace +alt.astrology.metapsych +alt.astrology.moderated +alt.astrology.mundane +alt.astrology.scam +alt.astrology.toadology +alt.astrology.tropical +alt.astronomy +alt.astronomy.solar +alt.at.fido.startrek +alt.atari +alt.atari-jaguar.discussion +alt.atari.2600 +alt.atari.2600.programming +alt.atari.2600.vcs +alt.atari.2600vcs +alt.atheism +alt.atheism.holysmoke +alt.atheism.illogical-fuckwits +alt.atheism.moderated +alt.atheism.satire +alt.athiesm +alt.atl.maxwell +alt.atl.mexwall +alt.atl.test +alt.atlanta +alt.att.g +alt.atv +alt.auctions.uk.online +alt.audio.dts +alt.audio.equipment +alt.audio.minidisc +alt.audio.pro.live-sound +alt.audio.theatre-sound +alt.august +alt.auletta.auletta +alt.auricchio +alt.authors.clive-cussler +alt.authors.margit-sandemo +alt.authors.raymond-carver +alt.authorware +alt.auto +alt.auto.bmw +alt.auto.dodge.suv.durango +alt.auto.ferrari +alt.auto.ford.pickups +alt.auto.karting +alt.auto.mercedes +alt.auto.parts +alt.auto.parts.wanted +alt.autographs +alt.autographs.transactions +alt.autos +alt.autos.4x4.chevy-trucks +alt.autos.acura +alt.autos.alfa-romeo +alt.autos.antique +alt.autos.audi +alt.autos.bmw +alt.autos.cadillac +alt.autos.cadillac.deville +alt.autos.camaro +alt.autos.camaro.firebird +alt.autos.chevelle +alt.autos.chevrolet.malibu +alt.autos.chrysler.sebring +alt.autos.classic-trucks +alt.autos.corvette +alt.autos.daewoo +alt.autos.daihatsu +alt.autos.dean-stark +alt.autos.dodge +alt.autos.dodge.trucks +alt.autos.dsm +alt.autos.dutton +alt.autos.ferrari +alt.autos.fiat +alt.autos.fiat.punto +alt.autos.fiero +alt.autos.ford +alt.autos.ford.bronco +alt.autos.ford.cdw-27 +alt.autos.ford.escort +alt.autos.ford.festiva +alt.autos.ford.flathead +alt.autos.ford.focus +alt.autos.fuel-injection +alt.autos.german +alt.autos.gm +alt.autos.gm.j-body +alt.autos.gm.monza-hspecial +alt.autos.gm.olds-cutlass +alt.autos.grand +alt.autos.grand-national +alt.autos.grand.national +alt.autos.honda +alt.autos.honda.type-r +alt.autos.hyundai +alt.autos.infiniti.q45 +alt.autos.isuzu +alt.autos.italian +alt.autos.jaguar +alt.autos.karting +alt.autos.kia +alt.autos.kitcars +alt.autos.lamborghini +alt.autos.lancia +alt.autos.lexus +alt.autos.lincoln +alt.autos.lincoln.ls +alt.autos.macho-trucks +alt.autos.mercury.cougar +alt.autos.microcars +alt.autos.mini +alt.autos.mini-truck +alt.autos.mitsubishi +alt.autos.neon +alt.autos.nissan +alt.autos.nissan.Z-car +alt.autos.nissan.altima +alt.autos.nissan.maxima +alt.autos.nissan.z-car +alt.autos.oldsmobile +alt.autos.parts.wanted +alt.autos.performance-cars +alt.autos.peugeot +alt.autos.peugeot.sucks +alt.autos.police-vehicle +alt.autos.pontiac +alt.autos.pontiac.firebird +alt.autos.porsche +alt.autos.porsche.911 +alt.autos.porsche.944 +alt.autos.porsche928 +alt.autos.rod-n-custom +alt.autos.rolls-royce-bentley +alt.autos.rover +alt.autos.saab +alt.autos.sport +alt.autos.sport.nhra +alt.autos.sport.rally +alt.autos.studebaker +alt.autos.subaru +alt.autos.t-buckets +alt.autos.toyota +alt.autos.toyota.camry +alt.autos.toyota.trucks +alt.autos.turbocharged +alt.autos.volvo +alt.aviation.fun +alt.aviation.jobs +alt.aviation.kooks +alt.aviation.roswell.wannabe.wannabe.wannabe +alt.aviation.safety +alt.aviation.virtualairlines +alt.avq.vfsgymf.bp.crtblb +alt.awe32.files +alt.awelch.maxwell +alt.awelch.mexwall +alt.awelch.test +alt.awty.cps.cksbs.bje +alt.awulh +alt.babe-land.com +alt.babs.bunny.boink.boink.boink +alt.babylon5 +alt.babylon5.uk +alt.bacchus +alt.backrubs +alt.backup-software +alt.backyard-wrestling +alt.bad-breath.hawk +alt.bad-breath.ray-vanlandingham +alt.bad.clams +alt.bad.personal-hygiene.jay-denebeim +alt.bainaries.games.encrypted +alt.bainaries.pictures.babies +alt.bainaries.pictures.black.erotic +alt.bainaries.pictures.black.erotic.females +alt.bainaries.pictures.black.erotic.femalesr +alt.bainaries.pictures.boys.barefoot +alt.bainaries.pictures.cemetaries +alt.bainaries.pictures.child.erotica.female +alt.bainaries.pictures.child.erotica.male +alt.bainaries.pictures.comix +alt.bainaries.pictures.erotica.amateur.female +alt.bainaries.pictures.erotica.amateur.male +alt.bainaries.pictures.erotica.ani +alt.bainaries.pictures.erotica.animals +alt.bainaries.pictures.erotica.anime +alt.bainaries.pictures.erotica.art.pin-up +alt.bainaries.pictures.erotica.asian-indian +alt.bainaries.pictures.erotica.asian-indianr +alt.bainaries.pictures.erotica.asian.male +alt.bainaries.pictures.erotica.asian.male. +alt.bainaries.pictures.erotica.autos +alt.bainaries.pictures.erotica.autosr +alt.bainaries.pictures.erotica.babies +alt.bainaries.pictures.erotica.balls +alt.bainaries.pictures.erotica.ballsu +alt.bainaries.pictures.erotica.bears +alt.bainaries.pictures.erotica.bearsa +alt.bainaries.pictures.erotica.bestiality +alt.bainaries.pictures.erotica.bestiality.hamster.duct-tape +alt.bainaries.pictures.erotica.bestiality.hamster.duct-tapee +alt.bainaries.pictures.erotica.big-folks +alt.bainaries.pictures.erotica.black.female +alt.bainaries.pictures.erotica.black.male +alt.bainaries.pictures.erotica.black.malet +alt.bainaries.pictures.erotica.blondes +alt.bainaries.pictures.erotica.breasts +alt.bainaries.pictures.erotica.breastsg +alt.bainaries.pictures.erotica.butts +alt.bainaries.pictures.erotica.buttsh +alt.bainaries.pictures.erotica.cartoons +alt.bainaries.pictures.erotica.cheerleaders +alt.bainaries.pictures.erotica.child +alt.bainaries.pictures.erotica.child.female +alt.bainaries.pictures.erotica.child.male +alt.bainaries.pictures.erotica.children +alt.bainaries.pictures.erotica.close-up +alt.bainaries.pictures.erotica.d +alt.bainaries.pictures.erotica.d.moderated +alt.bainaries.pictures.erotica.denise-lester +alt.bainaries.pictures.erotica.disney +alt.bainaries.pictures.erotica.empty-nest +alt.bainaries.pictures.erotica.facials +alt.bainaries.pictures.erotica.female +alt.bainaries.pictures.erotica.female.anal +alt.bainaries.pictures.erotica.fetish +alt.bainaries.pictures.erotica.fetish.barbie +alt.bainaries.pictures.erotica.fetish.diapers +alt.bainaries.pictures.erotica.fetish.feet +alt.bainaries.pictures.erotica.fetish.hair +alt.bainaries.pictures.erotica.fetish.latex +alt.bainaries.pictures.erotica.fetish.leather +alt.bainaries.pictures.erotica.furry +alt.bainaries.pictures.erotica.gaymen +alt.bainaries.pictures.erotica.gaymene +alt.bainaries.pictures.erotica.groupsex +alt.bainaries.pictures.erotica.gymnast-girls +alt.bainaries.pictures.erotica.high-heels +alt.bainaries.pictures.erotica.hornyrob +alt.bainaries.pictures.erotica.indian-asian +alt.bainaries.pictures.erotica.interracial +alt.bainaries.pictures.erotica.istar.diapers +alt.bainaries.pictures.erotica.koo.sisters +alt.bainaries.pictures.erotica.kwakiutl +alt.bainaries.pictures.erotica.latimo +alt.bainaries.pictures.erotica.latina +alt.bainaries.pictures.erotica.latino +alt.bainaries.pictures.erotica.lesbians +alt.bainaries.pictures.erotica.lolita +alt.bainaries.pictures.erotica.male +alt.bainaries.pictures.erotica.male.chubby +alt.bainaries.pictures.erotica.marcusvilliers +alt.bainaries.pictures.erotica.mardi-gres +alt.bainaries.pictures.erotica.midgets +alt.bainaries.pictures.erotica.moderated +alt.bainaries.pictures.erotica.oral +alt.bainaries.pictures.erotica.oriental +alt.bainaries.pictures.erotica.orientals +alt.bainaries.pictures.erotica.panties +alt.bainaries.pictures.erotica.plushies +alt.bainaries.pictures.erotica.pornstar +alt.bainaries.pictures.erotica.pornstars +alt.bainaries.pictures.erotica.pre-teen +alt.bainaries.pictures.erotica.redheads +alt.bainaries.pictures.erotica.scanmater +alt.bainaries.pictures.erotica.schoolgirls +alt.bainaries.pictures.erotica.spanking +alt.bainaries.pictures.erotica.spatch +alt.bainaries.pictures.erotica.tasteless +alt.bainaries.pictures.erotica.teen +alt.bainaries.pictures.erotica.teen.d +alt.bainaries.pictures.erotica.teen.female +alt.bainaries.pictures.erotica.teens +alt.bainaries.pictures.erotica.uniform +alt.bainaries.pictures.fine-art.d +alt.bainaries.pictures.fine-art.digitized +alt.bainaries.pictures.fine-art.graphics +alt.bainaries.pictures.fine-art.misc +alt.bainaries.pictures.fractals +alt.bainaries.pictures.furniture +alt.bainaries.pictures.furry +alt.bainaries.pictures.girlfriend +alt.bainaries.pictures.girlfriends +alt.bainaries.pictures.groupsex +alt.bainaries.pictures.horny.nurses +alt.bainaries.pictures.leek +alt.bainaries.pictures.lesbians +alt.bainaries.pictures.lingerie +alt.bainaries.pictures.lingerie.bigbutts +alt.bainaries.pictures.lolita.fucking +alt.bainaries.pictures.lolita.misc +alt.bainaries.pictures.misc +alt.bainaries.pictures.misc.d +alt.bainaries.pictures.nude.celebrities +alt.bainaries.pictures.nudism +alt.bainaries.pictures.nudism.celebrities +alt.bainaries.pictures.nylons +alt.bainaries.pictures.pantyhouse +alt.bainaries.pictures.personal +alt.bainaries.pictures.photo-modeling +alt.bainaries.pictures.sex +alt.bainaries.pictures.sex.fetish +alt.bainaries.pictures.sex.fetish.fish +alt.bainaries.pictures.supe +alt.bainaries.pictures.supermodels +alt.bainaries.pictures.supermodels.kate-moss +alt.bainaries.pictures.tasteless +alt.bainaries.pictures.teen-idols +alt.bainaries.pictures.teen-starlets +alt.bainaries.pictures.tools +alt.bainaries.pictures.utilities +alt.bainaries.pictures.vehicles +alt.bainaries.pictures.victoria.secret +alt.bainaries.pictures.voyeurism +alt.balbriggan +alt.baldspot +alt.baldspot.ernietalk +alt.baldurs-gate +alt.balkan-papci +alt.balloon.pop.pop.pop +alt.balordi.it +alt.bananas +alt.banjo +alt.banjo.clawhammer +alt.banjo.minstrel +alt.bankruptcy +alt.barb +alt.barb.sucks +alt.barcodes +alt.barefoot +alt.barefoot.children +alt.barney +alt.barney.dinosaur +alt.barney.dinosaur.die +alt.barney.dinosaur.die.die.die +alt.barney.sponge-minions.die.die.die +alt.barnsley.hilliterates +alt.barter +alt.base-jumping.sheep.bounce.bounce.bounce +alt.basement +alt.basement.graveyard +alt.basketball.nba.sa-spurs +alt.bass +alt.bastard.strayhorn +alt.bastards.stinky.schult +alt.bathroom +alt.battlestar-galactica +alt.beadworld +alt.beadwrld +alt.bedwetters.james-spoon +alt.bedwetters.mikey-clifford +alt.beenz +alt.beeotch.jay-denebeim +alt.beer +alt.beer.alt +alt.beer.breweriana +alt.beer.cbc.drink.drink.drink +alt.beer.home-brewing +alt.beer.like-molson-eh +alt.beograd +alt.bermuda.triangle +alt.bermuda.triangle.billing +alt.best +alt.best.of +alt.best.of.internet +alt.best.thoughtful +alt.bestjobsusa +alt.bestjobsusa.arizona.jobs +alt.bestjobsusa.atlanta.jobs +alt.bestjobsusa.austin.jobs +alt.bestjobsusa.boston.jobs +alt.bestjobsusa.california.jobs +alt.bestjobsusa.career.events.jobs +alt.bestjobsusa.carolinas.jobs +alt.bestjobsusa.chicago.jobs +alt.bestjobsusa.cincinnati.jobs +alt.bestjobsusa.cleveland.jobs +alt.bestjobsusa.colorado.jobs +alt.bestjobsusa.computer +alt.bestjobsusa.computer.jobs +alt.bestjobsusa.conn.jobs +alt.bestjobsusa.dallas.jobs +alt.bestjobsusa.denver.jobs +alt.bestjobsusa.detroit +alt.bestjobsusa.detroit.jobs +alt.bestjobsusa.diversity.jobs +alt.bestjobsusa.engineering.jobs +alt.bestjobsusa.healthcare.jobs +alt.bestjobsusa.houston.jobs +alt.bestjobsusa.jobs.offered +alt.bestjobsusa.kansas.jobs +alt.bestjobsusa.kentucky.jobs +alt.bestjobsusa.la.jobs +alt.bestjobsusa.management.jobs +alt.bestjobsusa.minneapolis.jobs +alt.bestjobsusa.nashville.jobs +alt.bestjobsusa.nebraska.jobs +alt.bestjobsusa.newjersey.jobs +alt.bestjobsusa.nflorida.jobs +alt.bestjobsusa.norleans.jobs +alt.bestjobsusa.ny.jobs +alt.bestjobsusa.pennsylvania.jobs +alt.bestjobsusa.philly.jobs +alt.bestjobsusa.phoenix.jobs +alt.bestjobsusa.pittsburgh.jobs +alt.bestjobsusa.retail.jobs +alt.bestjobsusa.sales.jobs +alt.bestjobsusa.sandiego.jobs +alt.bestjobsusa.seattle.jobs +alt.bestjobsusa.sflorida +alt.bestjobsusa.sflorida.jobs +alt.bestjobsusa.sfrancisco.jobs +alt.bestjobsusa.sfransisco.jobs +alt.bestjobsusa.stlouis.jobs +alt.bestjobsusa.texas.jobs +alt.bestjobsusa.ustah.jobs +alt.bestjobsusa.wvirginia.jobs +alt.bestjobusa +alt.bestjobusa.computer.jobs +alt.bfg.q.k +alt.bianries.amateur.female +alt.bianries.pictures.erotica +alt.bible +alt.bible-errancy +alt.bible.errancy +alt.bible.memorize +alt.bible.prophecy +alt.bible.rapture +alt.bible.rapture.mod +alt.biblesoft.users +alt.bidon +alt.bigfoot +alt.bigfoot.research +alt.biinaries.warez.ibm-pc +alt.bikermice +alt.bikes.spills-mason.ouch +alt.bill-gates.kind.benificent.loving.big-brother +alt.bin.emu.sega +alt.bin.pictures.child.pornography +alt.bin.sex +alt.bin.warez +alt.bin.warez.ibm-pc-games +alt.binaires.erotica +alt.binaires.games +alt.binaires.games.squaresoft +alt.binaires.pictures +alt.binaires.pictures.anime +alt.binaires.pictures.erotica +alt.binaires.pictures.erotica.amateur +alt.binaires.pictures.erotica.amatuer.female +alt.binaires.pictures.erotica.anime +alt.binaires.pictures.erotica.butts +alt.binaires.pictures.erotica.exhibitionism +alt.binaires.pictures.erotica.gaymen +alt.binaires.pictures.erotica.male +alt.binaires.pictures.erotica.moderated +alt.binaires.pictures.erotica.teen +alt.binaires.pictures.erotica.teen.female +alt.binaires.pictures.erotica.teens +alt.binaires.pictures.monsters +alt.binares.erotica +alt.binares.erotica.scheherazade +alt.binares.pictures.erotica.female +alt.binari +alt.binaries +alt.binaries.3d.bryce +alt.binaries.3d.bryce.larger-posts +alt.binaries.3d.lightwave +alt.binaries.3d.mojoworld +alt.binaries.3d.poser +alt.binaries.3d.truespace +alt.binaries.3dstudio +alt.binaries.activism.militia +alt.binaries.actvism.radical-left +alt.binaries.adolescents +alt.binaries.adolescents.off-topic +alt.binaries.agff +alt.binaries.agff.hentai +alt.binaries.ahm +alt.binaries.allmanbrothers +alt.binaries.alt.binaries.pictures.erotica +alt.binaries.alt.binaries.pictures.erotica.high-heels +alt.binaries.alt5 +alt.binaries.amp +alt.binaries.andrew.lloyd-webber +alt.binaries.andy-kaufman +alt.binaries.anime +alt.binaries.anime.tenchi +alt.binaries.anime.vcd +alt.binaries.anna-kournikova +alt.binaries.anna-nicole-smith +alt.binaries.aoi +alt.binaries.apophalation +alt.binaries.appalachian +alt.binaries.applications.mac +alt.binaries.asianscans +alt.binaries.asianscans.icyscans +alt.binaries.atari +alt.binaries.atari.cancelbots +alt.binaries.atari.d +alt.binaries.atari.dead +alt.binaries.athome.ware-z +alt.binaries.audio.minidisc +alt.binaries.audio.warez +alt.binaries.autographs +alt.binaries.automobiles +alt.binaries.automobiles.carshows +alt.binaries.automobiles.carshows.babes +alt.binaries.autos.performance-cars +alt.binaries.band.in.a.box +alt.binaries.barbarella +alt.binaries.basement.graveyard +alt.binaries.bass +alt.binaries.bathroom +alt.binaries.bbs +alt.binaries.beatles +alt.binaries.beavis-n-butthead +alt.binaries.bisexuals +alt.binaries.blueyonder +alt.binaries.bnb +alt.binaries.boneless +alt.binaries.britney-spears +alt.binaries.butthedd +alt.binaries.buttnuggets +alt.binaries.buttnuggets.for +alt.binaries.buttnuggets.for.jesus +alt.binaries.buttnuggets.for.klaas +alt.binaries.c.w +alt.binaries.calc-ti +alt.binaries.cancelbots +alt.binaries.casema +alt.binaries.catherine.zeta.jones +alt.binaries.cathybarry +alt.binaries.cbt +alt.binaries.cbts +alt.binaries.cbts.repost +alt.binaries.cd +alt.binaries.cd-image +alt.binaries.cd-r +alt.binaries.cd.games +alt.binaries.cd.genealogy +alt.binaries.cd.genealogy.d +alt.binaries.cd.genealogy.parts +alt.binaries.cd.genealogy.reposts +alt.binaries.cd.image +alt.binaries.cd.image.0-day +alt.binaries.cd.image.0-day.akulas.playground +alt.binaries.cd.image.clonecd +alt.binaries.cd.image.d +alt.binaries.cd.image.discussion.tools +alt.binaries.cd.image.dreamcast +alt.binaries.cd.image.dreamcast.highspeed +alt.binaries.cd.image.dreamcast.repost +alt.binaries.cd.image.games +alt.binaries.cd.image.highspeed +alt.binaries.cd.image.iso_unlimited +alt.binaries.cd.image.linux +alt.binaries.cd.image.other +alt.binaries.cd.image.other.d +alt.binaries.cd.image.other.parts +alt.binaries.cd.image.other.req +alt.binaries.cd.image.parts +alt.binaries.cd.image.playstation +alt.binaries.cd.image.playstation.d +alt.binaries.cd.image.playstation.reposts +alt.binaries.cd.image.playstation2 +alt.binaries.cd.image.playstation2.dvdiso +alt.binaries.cd.image.playstation2.repost +alt.binaries.cd.image.reposts +alt.binaries.cd.image.sega-saturn +alt.binaries.cd.image.tools.d +alt.binaries.cd.image.xbox +alt.binaries.cd.image.xbox.repost +alt.binaries.cd.images.dreamcast +alt.binaries.cd.images.dreamcast.d +alt.binaries.cd.images.dreamcast.highspeed +alt.binaries.cd.images.highspeed +alt.binaries.cd.other +alt.binaries.celebrities +alt.binaries.celebrities.bikini +alt.binaries.celebrities.fake.moderated +alt.binaries.celebrities.nude +alt.binaries.centrifuge +alt.binaries.checkmate +alt.binaries.checkmate.mp3 +alt.binaries.cheer.dance +alt.binaries.chello.nl +alt.binaries.christy-turlington +alt.binaries.circus +alt.binaries.cleannews.test +alt.binaries.clip-art +alt.binaries.collections.hotbox +alt.binaries.comp +alt.binaries.comp-graphics +alt.binaries.comp.atari8bit +alt.binaries.comp.databases.omnis +alt.binaries.comp.sinclair +alt.binaries.comp.virus +alt.binaries.cores +alt.binaries.countries.scotland +alt.binaries.crack +alt.binaries.cracked +alt.binaries.cracks +alt.binaries.cracks.akula +alt.binaries.cracks.discussion +alt.binaries.cracks.encrypted +alt.binaries.cracks.phrozen-crew +alt.binaries.crafts +alt.binaries.crafts.pictures +alt.binaries.culture.african.american.gangsta +alt.binaries.culture.african.american.gangsta.wannabe +alt.binaries.custard +alt.binaries.cv.image.playstation2.dvdiso +alt.binaries.d +alt.binaries.dankitti +alt.binaries.dawsons-creek +alt.binaries.dcisozpsx +alt.binaries.demo-scene.ibm-pc +alt.binaries.demos +alt.binaries.demos.ibm-pc +alt.binaries.descent +alt.binaries.dominion +alt.binaries.dominion.abuse +alt.binaries.dominion.cabal +alt.binaries.dominion.classact.kissass.join +alt.binaries.dominion.cracks +alt.binaries.dominion.dads.account +alt.binaries.dominion.dads.computer +alt.binaries.dominion.discussion +alt.binaries.dominion.dominoes.pizza +alt.binaries.dominion.dongles +alt.binaries.dominion.ego-strokes +alt.binaries.dominion.erotica +alt.binaries.dominion.erotica.everything-else +alt.binaries.dominion.erotica.female +alt.binaries.dominion.erotica.femalet +alt.binaries.dominion.erotica.furry-little-creatures +alt.binaries.dominion.erotica.male +alt.binaries.dominion.erotica.malel +alt.binaries.dominion.erotica.mydick +alt.binaries.dominion.erotica.mydick.ishard +alt.binaries.dominion.erotica.mydick.isharde +alt.binaries.dominion.games +alt.binaries.dominion.mail +alt.binaries.dominion.moms.account +alt.binaries.dominion.moms.computer +alt.binaries.dominion.mydick +alt.binaries.dominion.mydick.ishard +alt.binaries.dominion.request +alt.binaries.dominion.serial-nums +alt.binaries.dominion.shareware +alt.binaries.dominion.silly-group +alt.binaries.dominion.slackware +alt.binaries.dominion.spam-moderated +alt.binaries.dominion.support +alt.binaries.dominion.traders +alt.binaries.dominion.tripp +alt.binaries.dominion.troll +alt.binaries.dominion.warez +alt.binaries.dominion.warez.decrypted +alt.binaries.dominion.warez.in.here +alt.binaries.dominion.with.fries.on.the.side +alt.binaries.doom +alt.binaries.dr.biff +alt.binaries.dragonball +alt.binaries.dragonz +alt.binaries.dragonz.chimerical +alt.binaries.dragonz.elusive +alt.binaries.dragonz.ephemeral +alt.binaries.dreamcast +alt.binaries.drew-barrymore +alt.binaries.drwho +alt.binaries.drwho.pictures +alt.binaries.dvd +alt.binaries.dvd.erotica +alt.binaries.dvd2svcd +alt.binaries.dvdr +alt.binaries.e-book +alt.binaries.e-book.d +alt.binaries.e-book.flood +alt.binaries.e-book.mathmad +alt.binaries.e-book.palm +alt.binaries.e-book.rpg +alt.binaries.e-book.technical +alt.binaries.e-books +alt.binaries.ebooks +alt.binaries.education.distance +alt.binaries.electric-veh +alt.binaries.emerg-services +alt.binaries.emerg-sevices +alt.binaries.eminem +alt.binaries.emulator +alt.binaries.emulators +alt.binaries.emulators.amiga +alt.binaries.emulators.arcade +alt.binaries.emulators.atari +alt.binaries.emulators.cbm +alt.binaries.emulators.gameboy +alt.binaries.emulators.gameboy.advance +alt.binaries.emulators.gameboy.color +alt.binaries.emulators.mame +alt.binaries.emulators.misc +alt.binaries.emulators.neogeo +alt.binaries.emulators.nintendo +alt.binaries.emulators.nintendo-64 +alt.binaries.emulators.nintendo-64.d +alt.binaries.emulators.nintendo.d +alt.binaries.emulators.pinball +alt.binaries.emulators.playstation +alt.binaries.emulators.sega +alt.binaries.emulators.tg16 +alt.binaries.engines +alt.binaries.erocitca.cheerleaders +alt.binaries.erotic +alt.binaries.erotic.amateur.facials +alt.binaries.erotic.centerfolds +alt.binaries.erotic.children +alt.binaries.erotic.cowgirls +alt.binaries.erotic.female +alt.binaries.erotic.preteen +alt.binaries.erotic.senior-citizens +alt.binaries.erotic.senior.citizens +alt.binaries.erotica +alt.binaries.erotica.50 +alt.binaries.erotica.amateur +alt.binaries.erotica.amateur.female +alt.binaries.erotica.amateur.male +alt.binaries.erotica.amateur.pictures +alt.binaries.erotica.anime +alt.binaries.erotica.anna +alt.binaries.erotica.balls +alt.binaries.erotica.beanie-babies +alt.binaries.erotica.beanie-babieso +alt.binaries.erotica.beastiality +alt.binaries.erotica.big-folks +alt.binaries.erotica.bigfolks +alt.binaries.erotica.biker-chicks +alt.binaries.erotica.black +alt.binaries.erotica.black.females +alt.binaries.erotica.black.male +alt.binaries.erotica.blondes +alt.binaries.erotica.bondage +alt.binaries.erotica.bondage.male +alt.binaries.erotica.breast +alt.binaries.erotica.breasts +alt.binaries.erotica.breasts.saggy +alt.binaries.erotica.breasts.small +alt.binaries.erotica.breasts3 +alt.binaries.erotica.bukkake.d +alt.binaries.erotica.butts +alt.binaries.erotica.buttse +alt.binaries.erotica.cartoons +alt.binaries.erotica.centerfolds +alt.binaries.erotica.cheerleaders +alt.binaries.erotica.christy-canyon +alt.binaries.erotica.close-up +alt.binaries.erotica.coprophilia.scott-abraham +alt.binaries.erotica.cypress +alt.binaries.erotica.cypress.stumps +alt.binaries.erotica.d +alt.binaries.erotica.dicks +alt.binaries.erotica.dicksi +alt.binaries.erotica.dima-safonov +alt.binaries.erotica.divx +alt.binaries.erotica.duff +alt.binaries.erotica.duffk +alt.binaries.erotica.eD.De.eD.De.eD.De +alt.binaries.erotica.ed.de.ed.de.ed.de +alt.binaries.erotica.erotica +alt.binaries.erotica.erotica.bisexuals +alt.binaries.erotica.exhibitionism +alt.binaries.erotica.facesitting +alt.binaries.erotica.feet +alt.binaries.erotica.female +alt.binaries.erotica.female.anal +alt.binaries.erotica.female.plumpers +alt.binaries.erotica.female.plumpersi +alt.binaries.erotica.female.plumping +alt.binaries.erotica.fetish +alt.binaries.erotica.fetish.feet +alt.binaries.erotica.fetish.wet-and-messy +alt.binaries.erotica.fetish.wet-any-messy +alt.binaries.erotica.fetish.wetandmessy +alt.binaries.erotica.fetishs +alt.binaries.erotica.fettish +alt.binaries.erotica.fettish.alt +alt.binaries.erotica.fettish.alt.binaries +alt.binaries.erotica.fettish.alt.binaries.erotica +alt.binaries.erotica.fettish.alt.binaries.erotica.pornstar +alt.binaries.erotica.fettish.wet-and-messy +alt.binaries.erotica.gaymen +alt.binaries.erotica.gaymen.moderated +alt.binaries.erotica.groupsex +alt.binaries.erotica.gymnast-girls +alt.binaries.erotica.hornyrob +alt.binaries.erotica.latino +alt.binaries.erotica.lesbians +alt.binaries.erotica.lesbians.kissing +alt.binaries.erotica.male +alt.binaries.erotica.male.anal +alt.binaries.erotica.male.chubby +alt.binaries.erotica.multimedia.bondage +alt.binaries.erotica.nixpix +alt.binaries.erotica.nospam.creampie +alt.binaries.erotica.nospam.snowballing +alt.binaries.erotica.oriental +alt.binaries.erotica.p +alt.binaries.erotica.pictures +alt.binaries.erotica.pictures.35-plus-repost +alt.binaries.erotica.pictures.blondes +alt.binaries.erotica.pictures.blondesalt.binaries.nude +alt.binaries.erotica.pictures.bondage +alt.binaries.erotica.pictures.brunettes-short-hair.reposts +alt.binaries.erotica.pictures.cheerleaders +alt.binaries.erotica.pictures.d +alt.binaries.erotica.pictures.redheads +alt.binaries.erotica.pornstar +alt.binaries.erotica.pornstars +alt.binaries.erotica.pornstars.80s +alt.binaries.erotica.pre-teen +alt.binaries.erotica.pregnant +alt.binaries.erotica.redheads +alt.binaries.erotica.redheads.telephone-amber +alt.binaries.erotica.schoolgirls +alt.binaries.erotica.senior-citizens +alt.binaries.erotica.sex +alt.binaries.erotica.sex.in +alt.binaries.erotica.sex.in.the +alt.binaries.erotica.sex.in.the.morning +alt.binaries.erotica.sex.in.the.morninge +alt.binaries.erotica.sheherazade +alt.binaries.erotica.spanking +alt.binaries.erotica.teen +alt.binaries.erotica.teen.female +alt.binaries.erotica.teen.female.masturbation +alt.binaries.erotica.teen.female.nonude +alt.binaries.erotica.teen.male +alt.binaries.erotica.toys +alt.binaries.erotica.uncut +alt.binaries.erotica.vcd +alt.binaries.erotica.vcd.repost +alt.binaries.erotica.voyeurism +alt.binaries.erotica.voyeurism.hidden-camera +alt.binaries.erotica.wet-and-messy +alt.binaries.eroticaa +alt.binaries.erotics.breasts +alt.binaries.esada +alt.binaries.esada.butt-steak +alt.binaries.faces.thomas-nunn +alt.binaries.fan.robert-jordan +alt.binaries.fashion.magazines +alt.binaries.faxmaster +alt.binaries.fetish +alt.binaries.fetish.diapers +alt.binaries.fetish.parakeets +alt.binaries.fetish.parakeets.stockings +alt.binaries.fetish.scat +alt.binaries.fetish.scat.roger +alt.binaries.final-fantasy.hentai +alt.binaries.fisting +alt.binaries.fitness +alt.binaries.fitness.centerfolds +alt.binaries.florida.sarasota +alt.binaries.fonts +alt.binaries.fonts.floods +alt.binaries.fonts.identify +alt.binaries.fontscomp +alt.binaries.food +alt.binaries.food.sushi +alt.binaries.fr.humour +alt.binaries.fractal-art +alt.binaries.frans.bauer.r-mod +alt.binaries.free.box.office +alt.binaries.freemasonry +alt.binaries.freeware +alt.binaries.frogs +alt.binaries.fukengruven +alt.binaries.full.post.verified.playboy +alt.binaries.fullpost.magscans.collectors +alt.binaries.fullpost.magscans.repost +alt.binaries.fz +alt.binaries.fz-reposts +alt.binaries.fz-video +alt.binaries.games +alt.binaries.games-sports +alt.binaries.games.adult +alt.binaries.games.adult.repost +alt.binaries.games.adventures +alt.binaries.games.anime +alt.binaries.games.aquazone +alt.binaries.games.battlezone +alt.binaries.games.champ-man +alt.binaries.games.civ2 +alt.binaries.games.command-n-conq +alt.binaries.games.command-n-conq.tiberian-sun +alt.binaries.games.creatures +alt.binaries.games.delta-force +alt.binaries.games.discussion +alt.binaries.games.empire-deluxe +alt.binaries.games.encrypted +alt.binaries.games.final-fantasy.hentai +alt.binaries.games.golf +alt.binaries.games.grand-theft-auto +alt.binaries.games.half-life +alt.binaries.games.half-life.counterstrike +alt.binaries.games.homm-maps +alt.binaries.games.int-fiction +alt.binaries.games.kidstuff +alt.binaries.games.kidstuff.highspeed +alt.binaries.games.lucas-arts +alt.binaries.games.microprose +alt.binaries.games.microsoft +alt.binaries.games.microsoft.age-of-empires +alt.binaries.games.microsoft.age-of-kings +alt.binaries.games.microsoft.rise-of-rome +alt.binaries.games.moo2 +alt.binaries.games.operation-flashpoint +alt.binaries.games.petz +alt.binaries.games.quake +alt.binaries.games.rainbow-six +alt.binaries.games.rctycoon +alt.binaries.games.redalert2 +alt.binaries.games.reposts +alt.binaries.games.sierra.swat +alt.binaries.games.simcity +alt.binaries.games.ski-resort-tycoon +alt.binaries.games.squaresoft +alt.binaries.games.starcraft +alt.binaries.games.thesims +alt.binaries.games.unreal +alt.binaries.games.vga-planets +alt.binaries.games.worms +alt.binaries.gdead +alt.binaries.gdead.d +alt.binaries.gdead.highspeed +alt.binaries.george-reeves +alt.binaries.girlfriends +alt.binaries.global.quake +alt.binaries.gloria-estefan +alt.binaries.goat +alt.binaries.goonies +alt.binaries.gothic +alt.binaries.great +alt.binaries.great.ass +alt.binaries.great.ass.paulina +alt.binaries.guitar.tab +alt.binaries.hacking.beginner +alt.binaries.hacking.computers +alt.binaries.hacking.talentless.troll-haven +alt.binaries.hacking.talentless.troll_haven +alt.binaries.hacking.the.saint.is.braindead +alt.binaries.hacking.utilities +alt.binaries.hacking.websites +alt.binaries.hebrew +alt.binaries.hebrew.fonts +alt.binaries.hebrew.mac +alt.binaries.hentai +alt.binaries.hentai.sailor-moon +alt.binaries.howard-stern +alt.binaries.howard-stern.repost +alt.binaries.hudson-leick +alt.binaries.humanoidifarmi +alt.binaries.humor.skewed +alt.binaries.ibm-pc +alt.binaries.ibm-pc.games +alt.binaries.icons +alt.binaries.images +alt.binaries.images.afos-fans +alt.binaries.images.afos.fans +alt.binaries.images.fun +alt.binaries.images.outdoor.erotica +alt.binaries.images.repost +alt.binaries.images.suntan +alt.binaries.images.underwater +alt.binaries.images.underwater.non-violent.moderated +alt.binaries.ipl.audio.encrypted +alt.binaries.iron-chef +alt.binaries.jacklyn-lick +alt.binaries.james-bond +alt.binaries.janet-jackson +alt.binaries.japanese-cimema +alt.binaries.jennifer-love-hewitt +alt.binaries.jeri-ryan +alt.binaries.jethro-tull +alt.binaries.jethro.tull +alt.binaries.jfkjr.plane.pictures +alt.binaries.jiffy-club +alt.binaries.joker +alt.binaries.jph +alt.binaries.karaoke +alt.binaries.katies-world +alt.binaries.kenpsx +alt.binaries.kisekae +alt.binaries.korea +alt.binaries.korea.movies +alt.binaries.lara.croft +alt.binaries.latino +alt.binaries.leagueofgentlemen +alt.binaries.liberalminded +alt.binaries.lingerie +alt.binaries.lingeriealt.sex +alt.binaries.lingeriealt.sex.erotica +alt.binaries.lolita +alt.binaries.lucas-arts +alt.binaries.mac +alt.binaries.mac.applications +alt.binaries.mac.applications.retro +alt.binaries.mac.apps +alt.binaries.mac.cd-images +alt.binaries.mac.cd-images.d +alt.binaries.mac.cd-images.parts +alt.binaries.mac.fonts +alt.binaries.mac.games +alt.binaries.mac.games.adult +alt.binaries.mac.hebrew +alt.binaries.mac.osx.apps +alt.binaries.mac.playstation +alt.binaries.mac.playstation.d +alt.binaries.mac.playstation.parts +alt.binaries.mac.serial.numbers +alt.binaries.macamp +alt.binaries.macast +alt.binaries.madcow.highspeed +alt.binaries.magic +alt.binaries.maps +alt.binaries.matrix +alt.binaries.menwhoswallow +alt.binaries.midibeep.denmark.files +alt.binaries.misc.xxx +alt.binaries.missing-adults +alt.binaries.missing-kids +alt.binaries.models +alt.binaries.models.petite +alt.binaries.models.rockets +alt.binaries.models.scale +alt.binaries.moderated +alt.binaries.moderated.pinup-art +alt.binaries.moesart2000 +alt.binaries.monkey-movies +alt.binaries.monter-movies +alt.binaries.movies +alt.binaries.movies.d +alt.binaries.movies.divx +alt.binaries.movies.divx.repost +alt.binaries.movies.divx.sucks.the.sweat.from.shadowrealms.balls +alt.binaries.movies.erotica +alt.binaries.movies.kidstuff +alt.binaries.movies.mirage-mrg +alt.binaries.movies.purity +alt.binaries.movies.repost +alt.binaries.movies.shadowrealm +alt.binaries.movies.shadowrealm.repost +alt.binaries.movies.spanish +alt.binaries.movies.zeromovies +alt.binaries.mp3 +alt.binaries.mp3.audiobooks +alt.binaries.mp3.audiobooks.highspeed +alt.binaries.mp3.bootlegs +alt.binaries.mp3.macast.skins-plugins +alt.binaries.mp3.throttle.news.and.piss.off.sabrina +alt.binaries.mp3.top40 +alt.binaries.mp3.zappa +alt.binaries.mpeg +alt.binaries.mpeg.mp3 +alt.binaries.mpeg.video.music +alt.binaries.mpeg.videos +alt.binaries.mpeg.videos.alt +alt.binaries.mpeg.videos.country +alt.binaries.mpeg.videos.metal +alt.binaries.mpeg.videos.pop +alt.binaries.mpeg.videos.rap +alt.binaries.mpeg.videos.rock +alt.binaries.mpeg.videos.the-corrs +alt.binaries.mplayer.girls +alt.binaries.mrcpu +alt.binaries.mtv.animation +alt.binaries.multimedia +alt.binaries.multimedia.3-stooges +alt.binaries.multimedia.alias +alt.binaries.multimedia.andromeda +alt.binaries.multimedia.anime +alt.binaries.multimedia.anime.raws +alt.binaries.multimedia.anime.repost +alt.binaries.multimedia.aviation +alt.binaries.multimedia.babylon5 +alt.binaries.multimedia.babylon5.repost +alt.binaries.multimedia.bdsm +alt.binaries.multimedia.bollywood +alt.binaries.multimedia.boys +alt.binaries.multimedia.boys.repost +alt.binaries.multimedia.britney-spears +alt.binaries.multimedia.buffy-v-slayer +alt.binaries.multimedia.buffy-v-slayer.repost +alt.binaries.multimedia.cartoons +alt.binaries.multimedia.cartoons.looneytunes +alt.binaries.multimedia.cartoons.repost +alt.binaries.multimedia.celebrities.female.nonude +alt.binaries.multimedia.chinese +alt.binaries.multimedia.chris-morris +alt.binaries.multimedia.comedy +alt.binaries.multimedia.d +alt.binaries.multimedia.darkangel +alt.binaries.multimedia.darkangel.repost +alt.binaries.multimedia.debbie-gibson +alt.binaries.multimedia.disney +alt.binaries.multimedia.dixie-chicks +alt.binaries.multimedia.elvispresley +alt.binaries.multimedia.erotic +alt.binaries.multimedia.erotic.female +alt.binaries.multimedia.erotic.playboy +alt.binaries.multimedia.erotic.tickling +alt.binaries.multimedia.erotica +alt.binaries.multimedia.erotica. +alt.binaries.multimedia.erotica.amateur +alt.binaries.multimedia.erotica.amateur.d +alt.binaries.multimedia.erotica.anime +alt.binaries.multimedia.erotica.asian +alt.binaries.multimedia.erotica.black +alt.binaries.multimedia.erotica.d +alt.binaries.multimedia.erotica.de +alt.binaries.multimedia.erotica.discussion +alt.binaries.multimedia.erotica.interracial +alt.binaries.multimedia.erotica.jana +alt.binaries.multimedia.erotica.lesbians +alt.binaries.multimedia.erotica.lesbianss +alt.binaries.multimedia.erotica.male +alt.binaries.multimedia.erotica.oops-video +alt.binaries.multimedia.erotica.rebeccalord +alt.binaries.multimedia.erotica.repost +alt.binaries.multimedia.erotica.rm +alt.binaries.multimedia.erotica.strap-on-sex +alt.binaries.multimedia.erotica.tickling +alt.binaries.multimedia.erotica.ticklings +alt.binaries.multimedia.erotica.transsexuals +alt.binaries.multimedia.erotica.vidcaps +alt.binaries.multimedia.erotica.voyeurism +alt.binaries.multimedia.eroticai +alt.binaries.multimedia.faith-hill +alt.binaries.multimedia.family-guy +alt.binaries.multimedia.farscape +alt.binaries.multimedia.filipino +alt.binaries.multimedia.firefly +alt.binaries.multimedia.flonk +alt.binaries.multimedia.futurama +alt.binaries.multimedia.gloves +alt.binaries.multimedia.help +alt.binaries.multimedia.horror +alt.binaries.multimedia.japanese +alt.binaries.multimedia.japanese.repost +alt.binaries.multimedia.jessica-alba +alt.binaries.multimedia.jessica-alba.repost +alt.binaries.multimedia.naturism +alt.binaries.multimedia.netscape-fun +alt.binaries.multimedia.nude.celebrities +alt.binaries.multimedia.osmonds +alt.binaries.multimedia.pantyhose +alt.binaries.multimedia.prince +alt.binaries.multimedia.queer-as-folk +alt.binaries.multimedia.rail +alt.binaries.multimedia.rap +alt.binaries.multimedia.repost +alt.binaries.multimedia.reposts +alt.binaries.multimedia.roswell +alt.binaries.multimedia.sailor-moon +alt.binaries.multimedia.scifi +alt.binaries.multimedia.sd-6 +alt.binaries.multimedia.sentai +alt.binaries.multimedia.shania-twain +alt.binaries.multimedia.sitcoms +alt.binaries.multimedia.space-ghost +alt.binaries.multimedia.sports +alt.binaries.multimedia.startrek +alt.binaries.multimedia.teen-idols +alt.binaries.multimedia.the-bundys +alt.binaries.multimedia.utilities +alt.binaries.multimedia.vintage-film +alt.binaries.multimedia.vintage-film.d +alt.binaries.multimedia.vintage-film.post-1960 +alt.binaries.multimedia.xena-herc +alt.binaries.multimediia.erotica.amateur +alt.binaries.music +alt.binaries.music.alanis-morissette +alt.binaries.music.b-witched +alt.binaries.music.classical +alt.binaries.music.educational +alt.binaries.music.faith.and.wisdom +alt.binaries.music.garbage +alt.binaries.music.greek +alt.binaries.music.heavy-metal +alt.binaries.music.jungle +alt.binaries.music.makers.samples +alt.binaries.music.manics +alt.binaries.music.mike-keneally +alt.binaries.music.mp3 +alt.binaries.music.nin +alt.binaries.music.numan +alt.binaries.music.oasis +alt.binaries.music.radiohead +alt.binaries.music.rebirth +alt.binaries.music.santangelo +alt.binaries.music.shn +alt.binaries.music.shn.dmb +alt.binaries.music.shn.dylan +alt.binaries.music.shn.howie-day +alt.binaries.music.shn.repost +alt.binaries.music.springsteen +alt.binaries.music.steve-vai +alt.binaries.music.the-doors +alt.binaries.music.the-doors.d +alt.binaries.natasha +alt.binaries.natnl-secrets +alt.binaries.netscape.test.multimedia +alt.binaries.news-server-comparison +alt.binaries.nine.inch.nails +alt.binaries.nirpaia +alt.binaries.nospam.adult.female +alt.binaries.nospam.adult.female.d +alt.binaries.nospam.amateur.female +alt.binaries.nospam.analfem +alt.binaries.nospam.analfem.repost +alt.binaries.nospam.breasts.natural +alt.binaries.nospam.britbabes +alt.binaries.nospam.cc +alt.binaries.nospam.cd-r +alt.binaries.nospam.cheerleaders +alt.binaries.nospam.coed +alt.binaries.nospam.coed.d +alt.binaries.nospam.coed.repost +alt.binaries.nospam.creampie +alt.binaries.nospam.danni-ashe +alt.binaries.nospam.denim +alt.binaries.nospam.denim.shorts +alt.binaries.nospam.facials +alt.binaries.nospam.female.bodyhair +alt.binaries.nospam.female.bodyhair.pubes +alt.binaries.nospam.female.celebrities.butts +alt.binaries.nospam.female.forearm-hair +alt.binaries.nospam.female.panties.seethru +alt.binaries.nospam.female.panty-lines.seethru +alt.binaries.nospam.indexes +alt.binaries.nospam.julia-hayes +alt.binaries.nospam.multimedia.erotica +alt.binaries.nospam.multimedia.facials +alt.binaries.nospam.panties +alt.binaries.nospam.plumpers +alt.binaries.nospam.plumpers.amateur +alt.binaries.nospam.plumpers.breasts.large +alt.binaries.nospam.pst +alt.binaries.nospam.pst.d +alt.binaries.nospam.sappho +alt.binaries.nospam.scanners-post +alt.binaries.nospam.scanners-post.d +alt.binaries.nospam.scanners-post.repost +alt.binaries.nospam.sex-xes +alt.binaries.nospam.skinny +alt.binaries.nospam.spandex.nation +alt.binaries.nospam.teenfeem.repost +alt.binaries.nospam.teenfem +alt.binaries.nospam.teenfem.d +alt.binaries.nospam.teenfem.nonude +alt.binaries.nospam.teenfem.nonude.repost +alt.binaries.nospam.teenfem.repost +alt.binaries.nospam.teenfem.reposts +alt.binaries.nospam.televisionx +alt.binaries.nospam.toons +alt.binaries.nude +alt.binaries.nude.celebraties.female +alt.binaries.nude.celebrites +alt.binaries.nude.celebrities +alt.binaries.nude.celebrities.female +alt.binaries.nude.celebrities.male +alt.binaries.nude.celebrities.male.moderated +alt.binaries.nude.celebrities.malea +alt.binaries.nude.celebrity +alt.binaries.nude.celebrity.female +alt.binaries.nude.clelbrities.male +alt.binaries.nudecelebrities +alt.binaries.nudes +alt.binaries.nudism +alt.binaries.old.games +alt.binaries.old.games.reposts +alt.binaries.opie-and-anthony +alt.binaries.ozdebate +alt.binaries.pam-anderson +alt.binaries.pandora +alt.binaries.paranormal +alt.binaries.partycaps +alt.binaries.patricia-ford +alt.binaries.patterns.plastic-canvas +alt.binaries.paxer +alt.binaries.pearl-jam +alt.binaries.pens-pencils +alt.binaries.penthouse +alt.binaries.pgp +alt.binaries.phish +alt.binaries.phish.d +alt.binaries.phoenix +alt.binaries.phonecards +alt.binaries.photo.modeling +alt.binaries.photography.glamour +alt.binaries.photography.people +alt.binaries.photos.nude-art +alt.binaries.photos.nude-art.moderated +alt.binaries.photos.original +alt.binaries.photos.original.n-c +alt.binaries.picitures.erotica.amateur +alt.binaries.pics.kodomos.mankos.musyuuseis +alt.binaries.pics.musumes.mankos.musyuuseis +alt.binaries.pics.otonas.mankos.musyuuseis +alt.binaries.pics.paipans.mankos.musyuuseis +alt.binaries.pics.shoujos.mankos.musyuuseis +alt.binaries.pictuers.erotica.male +alt.binaries.pictues.erotica.fetish +alt.binaries.picture +alt.binaries.picture.erotica +alt.binaries.picture.erotica.amateur +alt.binaries.picture.erotica.amature +alt.binaries.picture.erotica.asian.male +alt.binaries.picture.erotica.balls +alt.binaries.picture.erotica.bondage +alt.binaries.picture.erotica.breasts.natural +alt.binaries.picture.erotica.facials +alt.binaries.picture.erotica.gaymale +alt.binaries.picture.erotica.lesbians +alt.binaries.picture.erotica.male +alt.binaries.picture.erotica.nicky-watt +alt.binaries.picture.erotica.spoon-fetish +alt.binaries.picturea.erotica +alt.binaries.picturea.erotica.amateur +alt.binaries.picturea.erotica.amateur.females +alt.binaries.picturer.erotica.scanmaster +alt.binaries.pictures +alt.binaries.pictures.12hr +alt.binaries.pictures.abba +alt.binaries.pictures.adele +alt.binaries.pictures.alex-taylor +alt.binaries.pictures.alley-baggett +alt.binaries.pictures.alt.binaries.pictures.erotica +alt.binaries.pictures.alt.binaries.pictures.erotica.male +alt.binaries.pictures.alyssa-milano +alt.binaries.pictures.amateur +alt.binaries.pictures.amateur.female +alt.binaries.pictures.amateur.male +alt.binaries.pictures.amatuer.male +alt.binaries.pictures.angel-veil +alt.binaries.pictures.animals +alt.binaries.pictures.animated.gifs +alt.binaries.pictures.animations +alt.binaries.pictures.anime +alt.binaries.pictures.anime.giant-robo +alt.binaries.pictures.art.bodyart +alt.binaries.pictures.art.pin-up +alt.binaries.pictures.artpics +alt.binaries.pictures.arts +alt.binaries.pictures.arts.bodyart +alt.binaries.pictures.ascii +alt.binaries.pictures.asparagus +alt.binaries.pictures.astro +alt.binaries.pictures.attila +alt.binaries.pictures.automobile +alt.binaries.pictures.autos +alt.binaries.pictures.autos.4x4 +alt.binaries.pictures.autos.oldtimers +alt.binaries.pictures.aviation +alt.binaries.pictures.babies +alt.binaries.pictures.ballbusting +alt.binaries.pictures.barefoot.children +alt.binaries.pictures.bath +alt.binaries.pictures.bathing +alt.binaries.pictures.bc-series +alt.binaries.pictures.bc-series.d +alt.binaries.pictures.bigbutts +alt.binaries.pictures.bigbutts.alt.binaries.pictures.erotica +alt.binaries.pictures.bigbutts.alt.binaries.pictures.erotica.breast +alt.binaries.pictures.bigbutts.alt.binaries.pictures.erotica.breast.saggy +alt.binaries.pictures.bikini.central +alt.binaries.pictures.bisexual +alt.binaries.pictures.bisexuals +alt.binaries.pictures.bisexualsl +alt.binaries.pictures.black +alt.binaries.pictures.black.erotic +alt.binaries.pictures.black.erotic.female +alt.binaries.pictures.black.erotic.females +alt.binaries.pictures.black.erotic.males +alt.binaries.pictures.black.erotica +alt.binaries.pictures.black.erotica.females +alt.binaries.pictures.black.erotica.males +alt.binaries.pictures.black.female.teen +alt.binaries.pictures.blasphemous-sex +alt.binaries.pictures.blondes +alt.binaries.pictures.bluebird +alt.binaries.pictures.bluebird.reposts +alt.binaries.pictures.bodyart +alt.binaries.pictures.bondage +alt.binaries.pictures.boy.spank +alt.binaries.pictures.boys +alt.binaries.pictures.boys.barefoot +alt.binaries.pictures.boys.bondage +alt.binaries.pictures.boys.d +alt.binaries.pictures.boys.kidspank +alt.binaries.pictures.boys.punishment +alt.binaries.pictures.boys.retromod +alt.binaries.pictures.boys.spam +alt.binaries.pictures.boys.spank +alt.binaries.pictures.boysa +alt.binaries.pictures.boyss +alt.binaries.pictures.bras +alt.binaries.pictures.breasts +alt.binaries.pictures.breasts.small +alt.binaries.pictures.bruce-lloyd +alt.binaries.pictures.brunette +alt.binaries.pictures.brunettes +alt.binaries.pictures.candid.beach +alt.binaries.pictures.candid.girls +alt.binaries.pictures.cartoons +alt.binaries.pictures.cartoons.cancel +alt.binaries.pictures.cd-covers +alt.binaries.pictures.celebrities +alt.binaries.pictures.celebrities.collectors +alt.binaries.pictures.celebrities.nude +alt.binaries.pictures.celebrities.portraits.large +alt.binaries.pictures.celine-dion +alt.binaries.pictures.cemetaries +alt.binaries.pictures.centerfolds.playboy +alt.binaries.pictures.cheerleaders +alt.binaries.pictures.cheerleaders.professional +alt.binaries.pictures.child.erotica +alt.binaries.pictures.child.erotica.female +alt.binaries.pictures.child.erotica.male +alt.binaries.pictures.child.starlets +alt.binaries.pictures.children +alt.binaries.pictures.chimera +alt.binaries.pictures.christina-ricci +alt.binaries.pictures.civil-war.usa +alt.binaries.pictures.climbing +alt.binaries.pictures.clip-art +alt.binaries.pictures.clocks +alt.binaries.pictures.club-seventeen +alt.binaries.pictures.cocks +alt.binaries.pictures.comic-strips +alt.binaries.pictures.comic-strips.online +alt.binaries.pictures.comics +alt.binaries.pictures.comics.complete +alt.binaries.pictures.comics.reposts +alt.binaries.pictures.contortion.nude +alt.binaries.pictures.cops +alt.binaries.pictures.cori-nadine +alt.binaries.pictures.crafts +alt.binaries.pictures.d +alt.binaries.pictures.dark-fantasy +alt.binaries.pictures.david-bowie +alt.binaries.pictures.disabled-dev +alt.binaries.pictures.disabled-devo +alt.binaries.pictures.dita +alt.binaries.pictures.diva +alt.binaries.pictures.dorks +alt.binaries.pictures.drag-racing +alt.binaries.pictures.ecotic +alt.binaries.pictures.eotica.pre-teens +alt.binaries.pictures.eritoca.teen +alt.binaries.pictures.eroctica +alt.binaries.pictures.eroctica.bondage +alt.binaries.pictures.eroctica.breast.small +alt.binaries.pictures.eroctica.butts +alt.binaries.pictures.eroctica.teen.fuck +alt.binaries.pictures.eroica.teen.females +alt.binaries.pictures.erotic +alt.binaries.pictures.erotic.amateur +alt.binaries.pictures.erotic.amateur.female +alt.binaries.pictures.erotic.amateur.male +alt.binaries.pictures.erotic.animated +alt.binaries.pictures.erotic.animated.gifs +alt.binaries.pictures.erotic.animated.gifsm +alt.binaries.pictures.erotic.anime +alt.binaries.pictures.erotic.butts +alt.binaries.pictures.erotic.centerfolds +alt.binaries.pictures.erotic.childen +alt.binaries.pictures.erotic.children +alt.binaries.pictures.erotic.cowgirls +alt.binaries.pictures.erotic.female +alt.binaries.pictures.erotic.filipinas +alt.binaries.pictures.erotic.g-string +alt.binaries.pictures.erotic.groupsex +alt.binaries.pictures.erotic.hermaphrodites +alt.binaries.pictures.erotic.male.bodybuilder +alt.binaries.pictures.erotic.pre-teen +alt.binaries.pictures.erotic.senior-citize +alt.binaries.pictures.erotic.senior-citizen +alt.binaries.pictures.erotic.senior-citizens +alt.binaries.pictures.erotic.young +alt.binaries.pictures.erotica +alt.binaries.pictures.erotica. +alt.binaries.pictures.erotica.13-17 +alt.binaries.pictures.erotica.D +alt.binaries.pictures.erotica.Gillian-Andersons-head-on-other-womens-bodies +alt.binaries.pictures.erotica.a +alt.binaries.pictures.erotica.abortion +alt.binaries.pictures.erotica.admiralkrag +alt.binaries.pictures.erotica.admirlkrag +alt.binaries.pictures.erotica.ads +alt.binaries.pictures.erotica.adsl +alt.binaries.pictures.erotica.age.13-17 +alt.binaries.pictures.erotica.alex-taylor +alt.binaries.pictures.erotica.als +alt.binaries.pictures.erotica.alt +alt.binaries.pictures.erotica.alt.sex +alt.binaries.pictures.erotica.alt.sex.pictures +alt.binaries.pictures.erotica.amateur +alt.binaries.pictures.erotica.amateur-action +alt.binaries.pictures.erotica.amateur-action.gifs +alt.binaries.pictures.erotica.amateur-female +alt.binaries.pictures.erotica.amateur.black.male +alt.binaries.pictures.erotica.amateur.d +alt.binaries.pictures.erotica.amateur.de +alt.binaries.pictures.erotica.amateur.digicam +alt.binaries.pictures.erotica.amateur.exhibitionism +alt.binaries.pictures.erotica.amateur.facials +alt.binaries.pictures.erotica.amateur.femal +alt.binaries.pictures.erotica.amateur.female +alt.binaries.pictures.erotica.amateur.females +alt.binaries.pictures.erotica.amateur.jay-denebeim.and-his.sheep +alt.binaries.pictures.erotica.amateur.lolita +alt.binaries.pictures.erotica.amateur.male +alt.binaries.pictures.erotica.amateur.malee +alt.binaries.pictures.erotica.amateurs +alt.binaries.pictures.erotica.amateurs.female +alt.binaries.pictures.erotica.amatuer +alt.binaries.pictures.erotica.amatuer.black +alt.binaries.pictures.erotica.amatuer.black.females +alt.binaries.pictures.erotica.amatuer.female +alt.binaries.pictures.erotica.amature +alt.binaries.pictures.erotica.amature.female +alt.binaries.pictures.erotica.amature.lolita +alt.binaries.pictures.erotica.ametuer.female +alt.binaries.pictures.erotica.amkingdom +alt.binaries.pictures.erotica.anal +alt.binaries.pictures.erotica.ani +alt.binaries.pictures.erotica.animal +alt.binaries.pictures.erotica.animals +alt.binaries.pictures.erotica.animalss +alt.binaries.pictures.erotica.anime +alt.binaries.pictures.erotica.anime.yaoi +alt.binaries.pictures.erotica.anna +alt.binaries.pictures.erotica.anna-nicole-smith +alt.binaries.pictures.erotica.annao +alt.binaries.pictures.erotica.anything +alt.binaries.pictures.erotica.anything.but +alt.binaries.pictures.erotica.anything.but.tuna +alt.binaries.pictures.erotica.art +alt.binaries.pictures.erotica.art.book-cover +alt.binaries.pictures.erotica.art.pin-up +alt.binaries.pictures.erotica.art.pinup +alt.binaries.pictures.erotica.asian +alt.binaries.pictures.erotica.asian-indian +alt.binaries.pictures.erotica.asian.female +alt.binaries.pictures.erotica.asian.male +alt.binaries.pictures.erotica.asian.malei +alt.binaries.pictures.erotica.asianc +alt.binaries.pictures.erotica.australian.female +alt.binaries.pictures.erotica.australians +alt.binaries.pictures.erotica.australians.dropbears +alt.binaries.pictures.erotica.australians.dropbearse +alt.binaries.pictures.erotica.auto +alt.binaries.pictures.erotica.autos +alt.binaries.pictures.erotica.babies +alt.binaries.pictures.erotica.babiesi +alt.binaries.pictures.erotica.badpuppy +alt.binaries.pictures.erotica.balck.male +alt.binaries.pictures.erotica.balls +alt.binaries.pictures.erotica.ballse +alt.binaries.pictures.erotica.barefoot +alt.binaries.pictures.erotica.barefootd +alt.binaries.pictures.erotica.bears +alt.binaries.pictures.erotica.bears.moderated +alt.binaries.pictures.erotica.beastiality +alt.binaries.pictures.erotica.beasts +alt.binaries.pictures.erotica.bestiality +alt.binaries.pictures.erotica.bestiality.hamster +alt.binaries.pictures.erotica.bestiality.hamster.d +alt.binaries.pictures.erotica.bestiality.hamster.duct-tape +alt.binaries.pictures.erotica.bestiality.hamster.duct-tape.d +alt.binaries.pictures.erotica.bestiality.pre-teen +alt.binaries.pictures.erotica.betharnold +alt.binaries.pictures.erotica.betharnoldalt +alt.binaries.pictures.erotica.betharnoldalt.binaries.pictures.erotica.big-folks +alt.binaries.pictures.erotica.betharnoldr +alt.binaries.pictures.erotica.big-folks +alt.binaries.pictures.erotica.big-folksNude +alt.binaries.pictures.erotica.big-folksl +alt.binaries.pictures.erotica.big-folksnude +alt.binaries.pictures.erotica.bike-chics +alt.binaries.pictures.erotica.biker-chicks +alt.binaries.pictures.erotica.biker-chics +alt.binaries.pictures.erotica.bisexuals +alt.binaries.pictures.erotica.black +alt.binaries.pictures.erotica.black.amateurs +alt.binaries.pictures.erotica.black.female +alt.binaries.pictures.erotica.black.females +alt.binaries.pictures.erotica.black.females- +alt.binaries.pictures.erotica.black.mail +alt.binaries.pictures.erotica.black.male +alt.binaries.pictures.erotica.black.male.feet +alt.binaries.pictures.erotica.black.male.feete +alt.binaries.pictures.erotica.black.male.moderated +alt.binaries.pictures.erotica.black.male.teen +alt.binaries.pictures.erotica.black.males +alt.binaries.pictures.erotica.black.pre-teen +alt.binaries.pictures.erotica.blacku +alt.binaries.pictures.erotica.blackwomen +alt.binaries.pictures.erotica.blonde +alt.binaries.pictures.erotica.blondes +alt.binaries.pictures.erotica.blondesl +alt.binaries.pictures.erotica.blonds +alt.binaries.pictures.erotica.blones +alt.binaries.pictures.erotica.bluebird +alt.binaries.pictures.erotica.bob +alt.binaries.pictures.erotica.bob.hoalt +alt.binaries.pictures.erotica.bob.hoalt.games +alt.binaries.pictures.erotica.bob.hoalt.games.kali +alt.binaries.pictures.erotica.bob.houston +alt.binaries.pictures.erotica.bobby-sox +alt.binaries.pictures.erotica.bodybuilders +alt.binaries.pictures.erotica.bondage +alt.binaries.pictures.erotica.bondage.male +alt.binaries.pictures.erotica.bondage.moderated +alt.binaries.pictures.erotica.bondage.pedophilia.ornithophilia +alt.binaries.pictures.erotica.bondes +alt.binaries.pictures.erotica.bondesi +alt.binaries.pictures.erotica.bookstores +alt.binaries.pictures.erotica.boys +alt.binaries.pictures.erotica.boysu +alt.binaries.pictures.erotica.breast +alt.binaries.pictures.erotica.breast.small +alt.binaries.pictures.erotica.breasts +alt.binaries.pictures.erotica.breasts.large +alt.binaries.pictures.erotica.breasts.natural +alt.binaries.pictures.erotica.breasts.naturali +alt.binaries.pictures.erotica.breasts.saggy +alt.binaries.pictures.erotica.breasts.small +alt.binaries.pictures.erotica.breasts.smalla +alt.binaries.pictures.erotica.british +alt.binaries.pictures.erotica.britney-spears-nude +alt.binaries.pictures.erotica.brunette +alt.binaries.pictures.erotica.brunettes +alt.binaries.pictures.erotica.bukkake +alt.binaries.pictures.erotica.buttnuggets +alt.binaries.pictures.erotica.butts +alt.binaries.pictures.erotica.buttsa +alt.binaries.pictures.erotica.bymnasts-girls +alt.binaries.pictures.erotica.cancel +alt.binaries.pictures.erotica.carolyn-meinel +alt.binaries.pictures.erotica.cartoons +alt.binaries.pictures.erotica.cartoons.moderated +alt.binaries.pictures.erotica.cartoons.mythical-creatures +alt.binaries.pictures.erotica.cartoons.original-art +alt.binaries.pictures.erotica.cartoons.sex +alt.binaries.pictures.erotica.celebrities +alt.binaries.pictures.erotica.centerfolds +alt.binaries.pictures.erotica.centerfoldse +alt.binaries.pictures.erotica.charmaine +alt.binaries.pictures.erotica.chastity-belt +alt.binaries.pictures.erotica.cheerleaders +alt.binaries.pictures.erotica.cheerleders +alt.binaries.pictures.erotica.child +alt.binaries.pictures.erotica.child.female +alt.binaries.pictures.erotica.child.femalealt +alt.binaries.pictures.erotica.child.femalealt.binaries +alt.binaries.pictures.erotica.child.femalealt.binaries.pictures +alt.binaries.pictures.erotica.child.femalealt.binaries.pictures.erotica +alt.binaries.pictures.erotica.child.male +alt.binaries.pictures.erotica.children +alt.binaries.pictures.erotica.chloe-vevrier +alt.binaries.pictures.erotica.chubby +alt.binaries.pictures.erotica.clits +alt.binaries.pictures.erotica.close-up +alt.binaries.pictures.erotica.close-upn +alt.binaries.pictures.erotica.closeup +alt.binaries.pictures.erotica.cock +alt.binaries.pictures.erotica.comics +alt.binaries.pictures.erotica.commercial-website +alt.binaries.pictures.erotica.commercial-website. +alt.binaries.pictures.erotica.commercial-websites +alt.binaries.pictures.erotica.commercial-websites.discussion +alt.binaries.pictures.erotica.commerical-websites +alt.binaries.pictures.erotica.cornfed-cuties.moo +alt.binaries.pictures.erotica.corset +alt.binaries.pictures.erotica.cpath +alt.binaries.pictures.erotica.creampie +alt.binaries.pictures.erotica.cypher +alt.binaries.pictures.erotica.d +alt.binaries.pictures.erotica.d.moderated +alt.binaries.pictures.erotica.dark-fantasy +alt.binaries.pictures.erotica.dark-fantasyg +alt.binaries.pictures.erotica.david-crocker +alt.binaries.pictures.erotica.dbg +alt.binaries.pictures.erotica.dean-stark +alt.binaries.pictures.erotica.dean-starks +alt.binaries.pictures.erotica.denise-lester +alt.binaries.pictures.erotica.denise-lesterw +alt.binaries.pictures.erotica.denise.lester +alt.binaries.pictures.erotica.diabloscans +alt.binaries.pictures.erotica.digitas +alt.binaries.pictures.erotica.disney +alt.binaries.pictures.erotica.dita +alt.binaries.pictures.erotica.dolly-buster +alt.binaries.pictures.erotica.e +alt.binaries.pictures.erotica.early-teens +alt.binaries.pictures.erotica.early-teens.firsthair +alt.binaries.pictures.erotica.early-teens.hardcore +alt.binaries.pictures.erotica.early-teenss +alt.binaries.pictures.erotica.earty-teens +alt.binaries.pictures.erotica.empty-nest +alt.binaries.pictures.erotica.emptynest +alt.binaries.pictures.erotica.enemas +alt.binaries.pictures.erotica.enhanced-photos +alt.binaries.pictures.erotica.erotic +alt.binaries.pictures.erotica.erotica +alt.binaries.pictures.erotica.erotica.gaymen +alt.binaries.pictures.erotica.erotica.gaymen.twinks +alt.binaries.pictures.erotica.esada +alt.binaries.pictures.erotica.ex-erols +alt.binaries.pictures.erotica.ex-erolsm +alt.binaries.pictures.erotica.exhibitionism +alt.binaries.pictures.erotica.exhibitionism.public +alt.binaries.pictures.erotica.exhibitionism.public-nudity +alt.binaries.pictures.erotica.exhibitionism.publicr +alt.binaries.pictures.erotica.exhibitionismw +alt.binaries.pictures.erotica.f +alt.binaries.pictures.erotica.facial +alt.binaries.pictures.erotica.facials +alt.binaries.pictures.erotica.facialsi +alt.binaries.pictures.erotica.fat +alt.binaries.pictures.erotica.female +alt.binaries.pictures.erotica.female-ejaculation +alt.binaries.pictures.erotica.female.anal +alt.binaries.pictures.erotica.female.bodybuilder +alt.binaries.pictures.erotica.female.bodybuilderr +alt.binaries.pictures.erotica.female.cosmetic +alt.binaries.pictures.erotica.female.cosmetics +alt.binaries.pictures.erotica.female.crying +alt.binaries.pictures.erotica.female.ejaculation +alt.binaries.pictures.erotica.female.genitalia +alt.binaries.pictures.erotica.female.genitalia.large +alt.binaries.pictures.erotica.female.genitalia.larget +alt.binaries.pictures.erotica.female.gym +alt.binaries.pictures.erotica.female.gymg +alt.binaries.pictures.erotica.female.masturbation +alt.binaries.pictures.erotica.female.orgasm +alt.binaries.pictures.erotica.female.plumpers +alt.binaries.pictures.erotica.female.scanmaster +alt.binaries.pictures.erotica.female.spreadwide +alt.binaries.pictures.erotica.female.toys +alt.binaries.pictures.erotica.female.ugly +alt.binaries.pictures.erotica.female.young.moderated +alt.binaries.pictures.erotica.females +alt.binaries.pictures.erotica.femdom +alt.binaries.pictures.erotica.feti +alt.binaries.pictures.erotica.fetish +alt.binaries.pictures.erotica.fetish.Latex +alt.binaries.pictures.erotica.fetish.armpits +alt.binaries.pictures.erotica.fetish.balletboots +alt.binaries.pictures.erotica.fetish.balloons +alt.binaries.pictures.erotica.fetish.barbie +alt.binaries.pictures.erotica.fetish.diapers +alt.binaries.pictures.erotica.fetish.diapersb +alt.binaries.pictures.erotica.fetish.feet +alt.binaries.pictures.erotica.fetish.feet.female +alt.binaries.pictures.erotica.fetish.female.socks +alt.binaries.pictures.erotica.fetish.glasses +alt.binaries.pictures.erotica.fetish.hair +alt.binaries.pictures.erotica.fetish.hairs +alt.binaries.pictures.erotica.fetish.latex +alt.binaries.pictures.erotica.fetish.latexn +alt.binaries.pictures.erotica.fetish.leather +alt.binaries.pictures.erotica.fetish.leatherk +alt.binaries.pictures.erotica.fetish.neck +alt.binaries.pictures.erotica.fetish.necke +alt.binaries.pictures.erotica.fetish.plastic +alt.binaries.pictures.erotica.fetish.tongue +alt.binaries.pictures.erotica.fetish.wet-and-messy +alt.binaries.pictures.erotica.fetish.wet-n-messy +alt.binaries.pictures.erotica.fetishe +alt.binaries.pictures.erotica.filipina +alt.binaries.pictures.erotica.filipinas +alt.binaries.pictures.erotica.filipinasr +alt.binaries.pictures.erotica.final-fantasy +alt.binaries.pictures.erotica.firesign +alt.binaries.pictures.erotica.firesignd +alt.binaries.pictures.erotica.fisting +alt.binaries.pictures.erotica.fitness +alt.binaries.pictures.erotica.fitness.centerfolds +alt.binaries.pictures.erotica.fitness.female +alt.binaries.pictures.erotica.flashers +alt.binaries.pictures.erotica.frank-sinatra.dead.dead.dead +alt.binaries.pictures.erotica.frank.sinatra.dead.dead.dead +alt.binaries.pictures.erotica.freckles +alt.binaries.pictures.erotica.fuck +alt.binaries.pictures.erotica.fuck.betharnold +alt.binaries.pictures.erotica.fuckpix +alt.binaries.pictures.erotica.fullbush +alt.binaries.pictures.erotica.furby +alt.binaries.pictures.erotica.furry +alt.binaries.pictures.erotica.furryn +alt.binaries.pictures.erotica.fuzzy +alt.binaries.pictures.erotica.g-string +alt.binaries.pictures.erotica.g-stringe +alt.binaries.pictures.erotica.garters-and-heels +alt.binaries.pictures.erotica.gay +alt.binaries.pictures.erotica.gayman +alt.binaries.pictures.erotica.gaymen +alt.binaries.pictures.erotica.gaymen.moderated +alt.binaries.pictures.erotica.gaymen.twinks +alt.binaries.pictures.erotica.gaymen.twinkss +alt.binaries.pictures.erotica.gillian-andersons-head-on-other-womens-bodies +alt.binaries.pictures.erotica.girlfriend +alt.binaries.pictures.erotica.girlfriends +alt.binaries.pictures.erotica.girlfriendse +alt.binaries.pictures.erotica.girls +alt.binaries.pictures.erotica.gothic +alt.binaries.pictures.erotica.gothicp +alt.binaries.pictures.erotica.group +alt.binaries.pictures.erotica.group.sex +alt.binaries.pictures.erotica.groupsex +alt.binaries.pictures.erotica.gwar +alt.binaries.pictures.erotica.gymnast-girls +alt.binaries.pictures.erotica.gymnast-girlsn +alt.binaries.pictures.erotica.gymnasts-girls +alt.binaries.pictures.erotica.gymnist-girls +alt.binaries.pictures.erotica.gynecologist +alt.binaries.pictures.erotica.hair +alt.binaries.pictures.erotica.hanson +alt.binaries.pictures.erotica.hard-core.pre-teen +alt.binaries.pictures.erotica.hardcore +alt.binaries.pictures.erotica.hermaphrodites +alt.binaries.pictures.erotica.hermaphroditesi +alt.binaries.pictures.erotica.hidden-camera +alt.binaries.pictures.erotica.high-heel +alt.binaries.pictures.erotica.high-heels +alt.binaries.pictures.erotica.high-heelsc +alt.binaries.pictures.erotica.high-school +alt.binaries.pictures.erotica.highheels +alt.binaries.pictures.erotica.hjn +alt.binaries.pictures.erotica.honey-b-sweet +alt.binaries.pictures.erotica.hookers +alt.binaries.pictures.erotica.hornyrob +alt.binaries.pictures.erotica.hornyrob.d +alt.binaries.pictures.erotica.hubbs-is-a-dick +alt.binaries.pictures.erotica.incest +alt.binaries.pictures.erotica.indian-asain +alt.binaries.pictures.erotica.indian-asia +alt.binaries.pictures.erotica.indian-asian +alt.binaries.pictures.erotica.indian-asianr +alt.binaries.pictures.erotica.inter-racial +alt.binaries.pictures.erotica.interacial +alt.binaries.pictures.erotica.intercourse +alt.binaries.pictures.erotica.interracial +alt.binaries.pictures.erotica.interracial.amateurs +alt.binaries.pictures.erotica.interracials +alt.binaries.pictures.erotica.istar +alt.binaries.pictures.erotica.istar.diapers +alt.binaries.pictures.erotica.istar.diapersn +alt.binaries.pictures.erotica.jana +alt.binaries.pictures.erotica.janna +alt.binaries.pictures.erotica.janna.pudding +alt.binaries.pictures.erotica.jap.schoolgirl +alt.binaries.pictures.erotica.jap.schoolgirls +alt.binaries.pictures.erotica.jay-denebeim.and.his.pet.pig +alt.binaries.pictures.erotica.jay.t.carrigan.wife +alt.binaries.pictures.erotica.jennicam +alt.binaries.pictures.erotica.karl-malden.nose +alt.binaries.pictures.erotica.kerri-maskol +alt.binaries.pictures.erotica.kibology +alt.binaries.pictures.erotica.kibology.pgp +alt.binaries.pictures.erotica.kmart +alt.binaries.pictures.erotica.koo +alt.binaries.pictures.erotica.koo.sisters +alt.binaries.pictures.erotica.koo.sistersc +alt.binaries.pictures.erotica.krystal +alt.binaries.pictures.erotica.kwakitual +alt.binaries.pictures.erotica.kwakiutl +alt.binaries.pictures.erotica.kwakiutla +alt.binaries.pictures.erotica.lame +alt.binaries.pictures.erotica.latex +alt.binaries.pictures.erotica.latina +alt.binaries.pictures.erotica.latinad +alt.binaries.pictures.erotica.latine +alt.binaries.pictures.erotica.latino +alt.binaries.pictures.erotica.latino.male +alt.binaries.pictures.erotica.latinom +alt.binaries.pictures.erotica.latinos +alt.binaries.pictures.erotica.legs +alt.binaries.pictures.erotica.legsalt +alt.binaries.pictures.erotica.legsalt.binaries +alt.binaries.pictures.erotica.legsalt.binaries.pictures +alt.binaries.pictures.erotica.legsalt.binaries.pictures.erotica +alt.binaries.pictures.erotica.legsalt.binaries.pictures.erotica.exhibitionism +alt.binaries.pictures.erotica.lesbian +alt.binaries.pictures.erotica.lesbianr +alt.binaries.pictures.erotica.lesbians +alt.binaries.pictures.erotica.lesbians.french-kiss +alt.binaries.pictures.erotica.lesbiansc +alt.binaries.pictures.erotica.lingerie +alt.binaries.pictures.erotica.linsey-dawn-mckenzie +alt.binaries.pictures.erotica.ll-series +alt.binaries.pictures.erotica.lolita +alt.binaries.pictures.erotica.lolita.fucking +alt.binaries.pictures.erotica.lolitat +alt.binaries.pictures.erotica.lycra +alt.binaries.pictures.erotica.lycra.female +alt.binaries.pictures.erotica.lycra.male +alt.binaries.pictures.erotica.male +alt.binaries.pictures.erotica.male.anal +alt.binaries.pictures.erotica.male.anala +alt.binaries.pictures.erotica.male.asian +alt.binaries.pictures.erotica.male.bodybuilder +alt.binaries.pictures.erotica.male.bodybuilder.moderated +alt.binaries.pictures.erotica.male.burly +alt.binaries.pictures.erotica.male.chubby +alt.binaries.pictures.erotica.male.hardon +alt.binaries.pictures.erotica.male.military +alt.binaries.pictures.erotica.male.ora +alt.binaries.pictures.erotica.male.oral +alt.binaries.pictures.erotica.male.oral.cums +alt.binaries.pictures.erotica.male.oral.cumshots +alt.binaries.pictures.erotica.male.oral.cumshotss +alt.binaries.pictures.erotica.male.oraly +alt.binaries.pictures.erotica.male.piercing +alt.binaries.pictures.erotica.male.russian +alt.binaries.pictures.erotica.male.shirt-and-tie +alt.binaries.pictures.erotica.male.tattoos +alt.binaries.pictures.erotica.male.underwear +alt.binaries.pictures.erotica.marcusvilliers +alt.binaries.pictures.erotica.mardi +alt.binaries.pictures.erotica.mardi-gras +alt.binaries.pictures.erotica.mardi.gras +alt.binaries.pictures.erotica.mclt +alt.binaries.pictures.erotica.mf-action +alt.binaries.pictures.erotica.midgets +alt.binaries.pictures.erotica.moderated +alt.binaries.pictures.erotica.molly +alt.binaries.pictures.erotica.nativeamerican +alt.binaries.pictures.erotica.nativeamericanp +alt.binaries.pictures.erotica.nipples +alt.binaries.pictures.erotica.nipples.large +alt.binaries.pictures.erotica.nose +alt.binaries.pictures.erotica.nude +alt.binaries.pictures.erotica.nude.celebrities +alt.binaries.pictures.erotica.nude.runaway-girls +alt.binaries.pictures.erotica.nudism +alt.binaries.pictures.erotica.nudist-camp +alt.binaries.pictures.erotica.nuns +alt.binaries.pictures.erotica.nurses +alt.binaries.pictures.erotica.older-women +alt.binaries.pictures.erotica.oldermen +alt.binaries.pictures.erotica.oldermene +alt.binaries.pictures.erotica.oral +alt.binaries.pictures.erotica.oralp +alt.binaries.pictures.erotica.orgasm +alt.binaries.pictures.erotica.oriental +alt.binaries.pictures.erotica.oriental.spread-wide +alt.binaries.pictures.erotica.orientald +alt.binaries.pictures.erotica.orientals +alt.binaries.pictures.erotica.orientals.bdsm +alt.binaries.pictures.erotica.orientals.spread-wide +alt.binaries.pictures.erotica.orientalsd +alt.binaries.pictures.erotica.orl +alt.binaries.pictures.erotica.pacific-islanders +alt.binaries.pictures.erotica.panties +alt.binaries.pictures.erotica.panties.sheer +alt.binaries.pictures.erotica.panty-lines +alt.binaries.pictures.erotica.pantyhose +alt.binaries.pictures.erotica.party-girls +alt.binaries.pictures.erotica.partygirls +alt.binaries.pictures.erotica.peachfuzz +alt.binaries.pictures.erotica.perl-geeks +alt.binaries.pictures.erotica.personal +alt.binaries.pictures.erotica.photoimpcom +alt.binaries.pictures.erotica.pickaninnies +alt.binaries.pictures.erotica.pictures +alt.binaries.pictures.erotica.pigtails +alt.binaries.pictures.erotica.pin-up +alt.binaries.pictures.erotica.pinups +alt.binaries.pictures.erotica.pirate +alt.binaries.pictures.erotica.pirate.mag +alt.binaries.pictures.erotica.plushies +alt.binaries.pictures.erotica.plushiest +alt.binaries.pictures.erotica.porn +alt.binaries.pictures.erotica.pornstar +alt.binaries.pictures.erotica.pornstar-trading +alt.binaries.pictures.erotica.pornstar.cameo +alt.binaries.pictures.erotica.pornstar.jenna-jameson +alt.binaries.pictures.erotica.pornstar.jenna-jameson.mpgs +alt.binaries.pictures.erotica.pornstar.marilyn +alt.binaries.pictures.erotica.pornstar.marilyn.chambers +alt.binaries.pictures.erotica.pornstarnews +alt.binaries.pictures.erotica.pornstars +alt.binaries.pictures.erotica.pornstars.ariana +alt.binaries.pictures.erotica.pornstars.arianae +alt.binaries.pictures.erotica.pornstars.janine +alt.binaries.pictures.erotica.pornstars.janine.moderated +alt.binaries.pictures.erotica.pornstars.jenna-jameson +alt.binaries.pictures.erotica.pre-teen +alt.binaries.pictures.erotica.pre-teen.chatter +alt.binaries.pictures.erotica.pre-teens +alt.binaries.pictures.erotica.pre-teent +alt.binaries.pictures.erotica.pree-teen +alt.binaries.pictures.erotica.pregnant +alt.binaries.pictures.erotica.pregnantu +alt.binaries.pictures.erotica.prostitutes.amsterdam +alt.binaries.pictures.erotica.public-nudity +alt.binaries.pictures.erotica.puffies +alt.binaries.pictures.erotica.puffiesu +alt.binaries.pictures.erotica.pussy +alt.binaries.pictures.erotica.pussy.firsthair +alt.binaries.pictures.erotica.pussy.tattoo +alt.binaries.pictures.erotica.pw-series +alt.binaries.pictures.erotica.pw-seriese +alt.binaries.pictures.erotica.rape +alt.binaries.pictures.erotica.rape.loki +alt.binaries.pictures.erotica.readheads +alt.binaries.pictures.erotica.redhead +alt.binaries.pictures.erotica.redheads +alt.binaries.pictures.erotica.redheadsing +alt.binaries.pictures.erotica.rocki-roads +alt.binaries.pictures.erotica.russian +alt.binaries.pictures.erotica.rutabaga +alt.binaries.pictures.erotica.safetyvest +alt.binaries.pictures.erotica.sarah-young +alt.binaries.pictures.erotica.scanmaster +alt.binaries.pictures.erotica.scanmasters +alt.binaries.pictures.erotica.scat +alt.binaries.pictures.erotica.scheherazade +alt.binaries.pictures.erotica.schoolgirls +alt.binaries.pictures.erotica.senior-citizen +alt.binaries.pictures.erotica.senior-citizens +alt.binaries.pictures.erotica.sensualamateurs +alt.binaries.pictures.erotica.series +alt.binaries.pictures.erotica.sex +alt.binaries.pictures.erotica.sex.in.the.morning +alt.binaries.pictures.erotica.shave +alt.binaries.pictures.erotica.shave- +alt.binaries.pictures.erotica.sheep +alt.binaries.pictures.erotica.shelleyrene +alt.binaries.pictures.erotica.sistas.charmaine +alt.binaries.pictures.erotica.sistas.dominique +alt.binaries.pictures.erotica.sistas.ebony-ayes +alt.binaries.pictures.erotica.sistas.jeannie-pepper +alt.binaries.pictures.erotica.sistas.kamali +alt.binaries.pictures.erotica.sistas.melissa-sade +alt.binaries.pictures.erotica.small.breasts +alt.binaries.pictures.erotica.smoking +alt.binaries.pictures.erotica.spactch +alt.binaries.pictures.erotica.spam +alt.binaries.pictures.erotica.spankin +alt.binaries.pictures.erotica.spankin.damian-j-anderson +alt.binaries.pictures.erotica.spanking +alt.binaries.pictures.erotica.spanking-teen +alt.binaries.pictures.erotica.spanking.damian-j-anderson +alt.binaries.pictures.erotica.spanking.schoolgirl +alt.binaries.pictures.erotica.spanking.teen +alt.binaries.pictures.erotica.spanking.teeni +alt.binaries.pictures.erotica.spanking.teens +alt.binaries.pictures.erotica.spatch +alt.binaries.pictures.erotica.sports +alt.binaries.pictures.erotica.sports.male +alt.binaries.pictures.erotica.spread-open +alt.binaries.pictures.erotica.sprintlink +alt.binaries.pictures.erotica.stacey-owen +alt.binaries.pictures.erotica.stockingsex +alt.binaries.pictures.erotica.supermodels +alt.binaries.pictures.erotica.swollen-nubbins +alt.binaries.pictures.erotica.tasteless +alt.binaries.pictures.erotica.teen +alt.binaries.pictures.erotica.teen.d +alt.binaries.pictures.erotica.teen.fe +alt.binaries.pictures.erotica.teen.female +alt.binaries.pictures.erotica.teen.female.amateur +alt.binaries.pictures.erotica.teen.female.fuck +alt.binaries.pictures.erotica.teen.female.lesbian +alt.binaries.pictures.erotica.teen.female.lesbians +alt.binaries.pictures.erotica.teen.female.livasm +alt.binaries.pictures.erotica.teen.female.masterbation +alt.binaries.pictures.erotica.teen.female.masturbating +alt.binaries.pictures.erotica.teen.female.masturbation +alt.binaries.pictures.erotica.teen.female.nonude +alt.binaries.pictures.erotica.teen.female.oral +alt.binaries.pictures.erotica.teen.female.orgasm +alt.binaries.pictures.erotica.teen.female.orgasmy +alt.binaries.pictures.erotica.teen.female.ruasm +alt.binaries.pictures.erotica.teen.female.toys +alt.binaries.pictures.erotica.teen.female.webasm +alt.binaries.pictures.erotica.teen.female.xxxasm +alt.binaries.pictures.erotica.teen.fen +alt.binaries.pictures.erotica.teen.fuck +alt.binaries.pictures.erotica.teen.male +alt.binaries.pictures.erotica.teen.male.anal +alt.binaries.pictures.erotica.teen.male.hardon +alt.binaries.pictures.erotica.teen.male.masturbation +alt.binaries.pictures.erotica.teen.malee +alt.binaries.pictures.erotica.teen.masturbation +alt.binaries.pictures.erotica.teen.nonude +alt.binaries.pictures.erotica.teen.orgasm +alt.binaries.pictures.erotica.teenboys +alt.binaries.pictures.erotica.teene +alt.binaries.pictures.erotica.teenfemale +alt.binaries.pictures.erotica.teens +alt.binaries.pictures.erotica.teensex +alt.binaries.pictures.erotica.teensexa +alt.binaries.pictures.erotica.teensf +alt.binaries.pictures.erotica.terry +alt.binaries.pictures.erotica.terry.agar +alt.binaries.pictures.erotica.thai +alt.binaries.pictures.erotica.the-fan +alt.binaries.pictures.erotica.thigh-highs +alt.binaries.pictures.erotica.tickling.moderated +alt.binaries.pictures.erotica.toasters +alt.binaries.pictures.erotica.torture +alt.binaries.pictures.erotica.torture.alt +alt.binaries.pictures.erotica.torture.alt.binaries +alt.binaries.pictures.erotica.torture.alt.binaries.pictures +alt.binaries.pictures.erotica.traci-lords +alt.binaries.pictures.erotica.transevestites +alt.binaries.pictures.erotica.transexual +alt.binaries.pictures.erotica.transexual.action +alt.binaries.pictures.erotica.transgendered +alt.binaries.pictures.erotica.transsexual +alt.binaries.pictures.erotica.transvestite +alt.binaries.pictures.erotica.transvestites +alt.binaries.pictures.erotica.transvestitesr +alt.binaries.pictures.erotica.unconscious +alt.binaries.pictures.erotica.uncut +alt.binaries.pictures.erotica.uncut.moderated +alt.binaries.pictures.erotica.uncut.moderated.moderated +alt.binaries.pictures.erotica.uniform +alt.binaries.pictures.erotica.uniform.male +alt.binaries.pictures.erotica.uniform.male.moderated +alt.binaries.pictures.erotica.uniformn +alt.binaries.pictures.erotica.uniforms +alt.binaries.pictures.erotica.unix +alt.binaries.pictures.erotica.unixe +alt.binaries.pictures.erotica.upskirt +alt.binaries.pictures.erotica.urine +alt.binaries.pictures.erotica.urined +alt.binaries.pictures.erotica.victoria +alt.binaries.pictures.erotica.victoria.secret +alt.binaries.pictures.erotica.vintage +alt.binaries.pictures.erotica.violence +alt.binaries.pictures.erotica.voyerism +alt.binaries.pictures.erotica.voyeuris +alt.binaries.pictures.erotica.voyeurism +alt.binaries.pictures.erotica.voyeurism.hid +alt.binaries.pictures.erotica.voyeurism.hidden-camara +alt.binaries.pictures.erotica.voyeurism.hidden-camera +alt.binaries.pictures.erotica.voyeurism.neighbor +alt.binaries.pictures.erotica.voyeurism.neighbor.nospam +alt.binaries.pictures.erotica.wet-t-shirt +alt.binaries.pictures.erotica.wetspot +alt.binaries.pictures.erotica.wetspota +alt.binaries.pictures.erotica.wives +alt.binaries.pictures.erotica.xxx-action +alt.binaries.pictures.erotica.yong +alt.binaries.pictures.erotica.yonge +alt.binaries.pictures.erotica.young +alt.binaries.pictures.erotica.young.australian.female +alt.binaries.pictures.erotica.young.orientals +alt.binaries.pictures.erotica.yuism +alt.binaries.pictures.erotica.zig +alt.binaries.pictures.erotica.zig.and +alt.binaries.pictures.erotica.zig.and.zag +alt.binaries.pictures.erotica.zig.and.zagx +alt.binaries.pictures.erotical +alt.binaries.pictures.erotical.male +alt.binaries.pictures.erotical.oral +alt.binaries.pictures.erotical.teen.fuck +alt.binaries.pictures.erotics +alt.binaries.pictures.erotics.breasts +alt.binaries.pictures.exhibitionism +alt.binaries.pictures.exhibitionism.public +alt.binaries.pictures.fan.televisionx +alt.binaries.pictures.fantasy-sci-fi +alt.binaries.pictures.fashion.youth +alt.binaries.pictures.fashion.youth.d +alt.binaries.pictures.fashion.youth.oldies-repost +alt.binaries.pictures.female +alt.binaries.pictures.female.combat-sports +alt.binaries.pictures.female.genitalia +alt.binaries.pictures.female.genitalia.large +alt.binaries.pictures.females +alt.binaries.pictures.fetish +alt.binaries.pictures.fetish.latex +alt.binaries.pictures.fetish.urine +alt.binaries.pictures.fine-art +alt.binaries.pictures.fine-art.d +alt.binaries.pictures.fine-art.digitized +alt.binaries.pictures.fine-art.graphics +alt.binaries.pictures.fine-art.misc +alt.binaries.pictures.fine-art.photos +alt.binaries.pictures.finger-nails.keroi +alt.binaries.pictures.firemen +alt.binaries.pictures.fishing +alt.binaries.pictures.flags.desecrated +alt.binaries.pictures.flashers +alt.binaries.pictures.fractals +alt.binaries.pictures.fun +alt.binaries.pictures.furniture +alt.binaries.pictures.furry +alt.binaries.pictures.fuzzy-sweaters.female +alt.binaries.pictures.gardens +alt.binaries.pictures.gardens.haworthia +alt.binaries.pictures.genitalia.fauna +alt.binaries.pictures.genitalia.flora +alt.binaries.pictures.gi-joe +alt.binaries.pictures.gill-anderson +alt.binaries.pictures.girlfriend +alt.binaries.pictures.girlfriend.ex +alt.binaries.pictures.girlfriends +alt.binaries.pictures.girlfriends.ex +alt.binaries.pictures.girlfriendse +alt.binaries.pictures.girls +alt.binaries.pictures.girlss +alt.binaries.pictures.graffiti +alt.binaries.pictures.grotesque +alt.binaries.pictures.group.sex +alt.binaries.pictures.groupsex +alt.binaries.pictures.guns +alt.binaries.pictures.hannigan +alt.binaries.pictures.hard-core.pre-teen +alt.binaries.pictures.high-heels +alt.binaries.pictures.hockey +alt.binaries.pictures.honey-b-sweet +alt.binaries.pictures.horney.nurses +alt.binaries.pictures.horny +alt.binaries.pictures.horny.nurses +alt.binaries.pictures.horses +alt.binaries.pictures.humor.babies +alt.binaries.pictures.hussy +alt.binaries.pictures.isla-fisher +alt.binaries.pictures.jamie-lee-curtis +alt.binaries.pictures.jetski +alt.binaries.pictures.jfowler +alt.binaries.pictures.joanne-guest +alt.binaries.pictures.joder.burros +alt.binaries.pictures.kid +alt.binaries.pictures.kid.punishment +alt.binaries.pictures.kid.spam +alt.binaries.pictures.kid.spank +alt.binaries.pictures.kids +alt.binaries.pictures.lacey-chabert +alt.binaries.pictures.landscapes.amateur +alt.binaries.pictures.lara-fabian +alt.binaries.pictures.leek +alt.binaries.pictures.lesbains +alt.binaries.pictures.lesbian +alt.binaries.pictures.lesbians +alt.binaries.pictures.lesbiansm +alt.binaries.pictures.lexx +alt.binaries.pictures.lingerie +alt.binaries.pictures.lingerie.bigbutts +alt.binaries.pictures.lingerie.panties.sheer +alt.binaries.pictures.lingeriea +alt.binaries.pictures.lolita +alt.binaries.pictures.lolita.fucking +alt.binaries.pictures.lolita.misc +alt.binaries.pictures.madonna +alt.binaries.pictures.male +alt.binaries.pictures.male.chubby +alt.binaries.pictures.manga +alt.binaries.pictures.melissa-j-hart +alt.binaries.pictures.military +alt.binaries.pictures.misc +alt.binaries.pictures.misc.d +alt.binaries.pictures.models +alt.binaries.pictures.models.sex-xes +alt.binaries.pictures.moi +alt.binaries.pictures.monster.movies +alt.binaries.pictures.monsters +alt.binaries.pictures.motorcycles +alt.binaries.pictures.motorcycles.harley +alt.binaries.pictures.motorcycles.sportbike +alt.binaries.pictures.movie-posters +alt.binaries.pictures.movieboys +alt.binaries.pictures.multimedia.erotica +alt.binaries.pictures.n0rp +alt.binaries.pictures.n0rp.raver +alt.binaries.pictures.nature +alt.binaries.pictures.naturism.family +alt.binaries.pictures.nicki-lewis +alt.binaries.pictures.nospam.post-yourself-nude +alt.binaries.pictures.nude +alt.binaries.pictures.nude.celebrities +alt.binaries.pictures.nude.celebrities.fake +alt.binaries.pictures.nude.celebrities.fake.repost +alt.binaries.pictures.nude.celebrities.hwest +alt.binaries.pictures.nude.celebrities.male +alt.binaries.pictures.nude.female +alt.binaries.pictures.nude.female.bodybuilders +alt.binaries.pictures.nudism +alt.binaries.pictures.nudism.adult +alt.binaries.pictures.nudism.adults +alt.binaries.pictures.nudism.celebrities +alt.binaries.pictures.nudism.wolfpack +alt.binaries.pictures.nudism.wolfpack.erotica +alt.binaries.pictures.nudism.wolfpack.floodgates +alt.binaries.pictures.nudism.wolfpack.gay-lesbian-bi +alt.binaries.pictures.nudism.wolfpack.preteen +alt.binaries.pictures.nudism.wolfpack.repost +alt.binaries.pictures.nudism.youth.and.families +alt.binaries.pictures.numismatic +alt.binaries.pictures.nylons +alt.binaries.pictures.olsen-twins +alt.binaries.pictures.oral +alt.binaries.pictures.orchids +alt.binaries.pictures.origami +alt.binaries.pictures.pantyhose +alt.binaries.pictures.pantyhouse +alt.binaries.pictures.pantylines +alt.binaries.pictures.personal +alt.binaries.pictures.personal.moderated +alt.binaries.pictures.petra-verkaik +alt.binaries.pictures.phedz +alt.binaries.pictures.phil-oliver +alt.binaries.pictures.photo-modeling +alt.binaries.pictures.pictures.erotica +alt.binaries.pictures.pink-floyd +alt.binaries.pictures.plaatjes +alt.binaries.pictures.plgpics.uni +alt.binaries.pictures.plushies +alt.binaries.pictures.poodles.grep +alt.binaries.pictures.porncaps +alt.binaries.pictures.pornstars +alt.binaries.pictures.powersports +alt.binaries.pictures.racequeens +alt.binaries.pictures.radio +alt.binaries.pictures.radio.control.models +alt.binaries.pictures.raik +alt.binaries.pictures.rail +alt.binaries.pictures.railroad +alt.binaries.pictures.raquel-welch +alt.binaries.pictures.realestate.fsbo +alt.binaries.pictures.realestate.realtors +alt.binaries.pictures.reanna +alt.binaries.pictures.redheads +alt.binaries.pictures.rika-nishimura +alt.binaries.pictures.russian +alt.binaries.pictures.sailor-moon +alt.binaries.pictures.salma-hayek +alt.binaries.pictures.sarenna-lee +alt.binaries.pictures.scanmaster +alt.binaries.pictures.scenic +alt.binaries.pictures.scenic.amateur +alt.binaries.pictures.sex +alt.binaries.pictures.sex.fetish +alt.binaries.pictures.sex.fetish.fish +alt.binaries.pictures.sex.fetish.fishu +alt.binaries.pictures.sex.fetishn +alt.binaries.pictures.sexi +alt.binaries.pictures.sistas.charmaine +alt.binaries.pictures.spam +alt.binaries.pictures.spanking.boys +alt.binaries.pictures.spankingboys +alt.binaries.pictures.spice-girls +alt.binaries.pictures.sports +alt.binaries.pictures.sports.gymnastics +alt.binaries.pictures.sports.ocean +alt.binaries.pictures.sports.ocean.surfing +alt.binaries.pictures.sports.ocean.windsurfing +alt.binaries.pictures.sports.pictures.ocean +alt.binaries.pictures.stereo +alt.binaries.pictures.strippers +alt.binaries.pictures.strippersm +alt.binaries.pictures.sung-hi-lee +alt.binaries.pictures.sunshineboys +alt.binaries.pictures.supermodels +alt.binaries.pictures.supermodels.cindy-crawford +alt.binaries.pictures.supermodels.claudia-schiffer +alt.binaries.pictures.supermodels.elle-macpherson +alt.binaries.pictures.supermodels.kate-moss +alt.binaries.pictures.supermodels.kathy-ireland +alt.binaries.pictures.supermodels.laetitia-casta +alt.binaries.pictures.supermodels.siiri.angerkoski +alt.binaries.pictures.suze +alt.binaries.pictures.suze.repost +alt.binaries.pictures.tall-ships +alt.binaries.pictures.tanks +alt.binaries.pictures.tasteless +alt.binaries.pictures.tasteless.dedman-sisters +alt.binaries.pictures.tease +alt.binaries.pictures.teen-idols +alt.binaries.pictures.teen-idols.princewilliam +alt.binaries.pictures.teen-idols.shirtless +alt.binaries.pictures.teen-starlets +alt.binaries.pictures.teen.female +alt.binaries.pictures.teen.female.masturbation +alt.binaries.pictures.teen.fuck +alt.binaries.pictures.the-bob +alt.binaries.pictures.tiffany.towers +alt.binaries.pictures.tinygirls +alt.binaries.pictures.tools +alt.binaries.pictures.trading +alt.binaries.pictures.turds +alt.binaries.pictures.tv.scifi-fantasy +alt.binaries.pictures.unauthorized +alt.binaries.pictures.underage.admirers +alt.binaries.pictures.underwater +alt.binaries.pictures.utilities +alt.binaries.pictures.vehicles +alt.binaries.pictures.vfd.noid +alt.binaries.pictures.victoria +alt.binaries.pictures.victoria.secret +alt.binaries.pictures.voyeuerism +alt.binaries.pictures.voyeurism +alt.binaries.pictures.wallpaper +alt.binaries.pictures.warzone +alt.binaries.pictures.weapons +alt.binaries.pictures.weather +alt.binaries.pictures.webcamteens +alt.binaries.pictures.woodworking +alt.binaries.pictures.young +alt.binaries.pictures.young.celebrities.retromod +alt.binaries.pictures.youth-and-beauty +alt.binaries.pictures.youth-wrestling +alt.binaries.pictures.youth.and.families +alt.binaries.pictures.zips +alt.binaries.picures.erotica +alt.binaries.picures.erotica.tasteless +alt.binaries.picutes.nude +alt.binaries.picutes.nude.celebrities +alt.binaries.picutres.erotica.pantyhose +alt.binaries.picutures.erotica.amateur +alt.binaries.pinups +alt.binaries.pitcures.amateur.female +alt.binaries.pitcures.erotica +alt.binaries.playgirl +alt.binaries.pokemon +alt.binaries.pokemon.pikachu +alt.binaries.pop.will.eat.itself +alt.binaries.pot +alt.binaries.privatestock +alt.binaries.pro-wrestling +alt.binaries.pro-wrestling.divas +alt.binaries.programming +alt.binaries.project-object +alt.binaries.ps +alt.binaries.puctures.erotica +alt.binaries.puctures.erotica.black +alt.binaries.puctures.erotica.black.females +alt.binaries.puerile +alt.binaries.punk +alt.binaries.quake +alt.binaries.quake3uk +alt.binaries.radio-control +alt.binaries.radio-scanner +alt.binaries.radio.keprf +alt.binaries.radio.paranormal +alt.binaries.radio.pictures +alt.binaries.radio.scanner +alt.binaries.railroad.twofoot +alt.binaries.rebecca-lord +alt.binaries.rec.photo.equipment +alt.binaries.remixes.mp3 +alt.binaries.rgvc +alt.binaries.riz.ranger +alt.binaries.rock-n-roll +alt.binaries.roel-hemkes.london +alt.binaries.roel_hemeks.london +alt.binaries.roger +alt.binaries.rustic-woodworkers +alt.binaries.rutabaga +alt.binaries.sabrina-lloyd +alt.binaries.samantha-fox +alt.binaries.sarah-m-gellar +alt.binaries.satellite-tv +alt.binaries.scanmaster +alt.binaries.scary.exe-files +alt.binaries.scary.exe.files +alt.binaries.schematics.electronic +alt.binaries.scientology +alt.binaries.scooter +alt.binaries.screen-savers +alt.binaries.screen-savers.mac +alt.binaries.sea-monkeys +alt.binaries.sex +alt.binaries.sex.in +alt.binaries.sex.in.the +alt.binaries.sex.in.the.morning +alt.binaries.sex.pictures +alt.binaries.sex.pictures.female +alt.binaries.sex.pictures.teen.female.oral +alt.binaries.shareware +alt.binaries.shareware.ibm.pc +alt.binaries.shdwknght.jail.sex.pics +alt.binaries.sheet-music +alt.binaries.shn.howie-day +alt.binaries.simpsons +alt.binaries.simulators +alt.binaries.simulators.autos +alt.binaries.skewed +alt.binaries.slack +alt.binaries.sliders +alt.binaries.smallville +alt.binaries.smash-pumpkins +alt.binaries.smokers.glamour.cigars +alt.binaries.snuh +alt.binaries.soccer +alt.binaries.soccer.images +alt.binaries.sonic-hedgehog +alt.binaries.sophie-marceau +alt.binaries.sound.mp3 +alt.binaries.sound.radio.oldtime +alt.binaries.sounds +alt.binaries.sounds-armpit +alt.binaries.sounds-armpit.noises +alt.binaries.sounds.1940s.mp3 +alt.binaries.sounds.1950s.mp3 +alt.binaries.sounds.1960s.mp3 +alt.binaries.sounds.1970s.mp3 +alt.binaries.sounds.1980s.mp3 +alt.binaries.sounds.1990s.mp3 +alt.binaries.sounds.78rpm-era +alt.binaries.sounds.78rpm-era.d +alt.binaries.sounds.aac +alt.binaries.sounds.aac.d +alt.binaries.sounds.anime +alt.binaries.sounds.answering-machines +alt.binaries.sounds.audiobooks +alt.binaries.sounds.cartoons +alt.binaries.sounds.country.mp3 +alt.binaries.sounds.d +alt.binaries.sounds.dts +alt.binaries.sounds.erotica +alt.binaries.sounds.jefferson-airplane +alt.binaries.sounds.jpop +alt.binaries.sounds.karaoke +alt.binaries.sounds.korean +alt.binaries.sounds.led-zeppelin +alt.binaries.sounds.lossless +alt.binaries.sounds.m +alt.binaries.sounds.macintosh +alt.binaries.sounds.midi +alt.binaries.sounds.midi-tools +alt.binaries.sounds.midi-utilities +alt.binaries.sounds.midi.alternative +alt.binaries.sounds.midi.beatles +alt.binaries.sounds.midi.blues +alt.binaries.sounds.midi.classical +alt.binaries.sounds.midi.classical.sequencing +alt.binaries.sounds.midi.country +alt.binaries.sounds.midi.d +alt.binaries.sounds.midi.ethnic +alt.binaries.sounds.midi.final-fantasy +alt.binaries.sounds.midi.funk +alt.binaries.sounds.midi.games +alt.binaries.sounds.midi.jazz +alt.binaries.sounds.midi.originals +alt.binaries.sounds.midi.pop +alt.binaries.sounds.midi.rap +alt.binaries.sounds.midi.requests +alt.binaries.sounds.midi.rock +alt.binaries.sounds.midi.soul +alt.binaries.sounds.midi.themes +alt.binaries.sounds.midi.to.wav +alt.binaries.sounds.midnightoil +alt.binaries.sounds.misc +alt.binaries.sounds.misc.d +alt.binaries.sounds.mod +alt.binaries.sounds.mods +alt.binaries.sounds.mods.d +alt.binaries.sounds.mods.techno +alt.binaries.sounds.moesart2000 +alt.binaries.sounds.monty-python +alt.binaries.sounds.movies +alt.binaries.sounds.mp3 +alt.binaries.sounds.mp3.1940s +alt.binaries.sounds.mp3.1950s +alt.binaries.sounds.mp3.1960s +alt.binaries.sounds.mp3.1970s +alt.binaries.sounds.mp3.1980s +alt.binaries.sounds.mp3.1980s.venice-beach +alt.binaries.sounds.mp3.1990s +alt.binaries.sounds.mp3.2000s +alt.binaries.sounds.mp3.alternative-rock +alt.binaries.sounds.mp3.audiobooks +alt.binaries.sounds.mp3.avant-garde +alt.binaries.sounds.mp3.beach-boys +alt.binaries.sounds.mp3.beatles +alt.binaries.sounds.mp3.black-gospel +alt.binaries.sounds.mp3.blackened +alt.binaries.sounds.mp3.bluegrass +alt.binaries.sounds.mp3.blues +alt.binaries.sounds.mp3.bob-dylan +alt.binaries.sounds.mp3.books +alt.binaries.sounds.mp3.bootlegs +alt.binaries.sounds.mp3.brazil +alt.binaries.sounds.mp3.brazilian +alt.binaries.sounds.mp3.british +alt.binaries.sounds.mp3.cajun +alt.binaries.sounds.mp3.celtic +alt.binaries.sounds.mp3.chinese +alt.binaries.sounds.mp3.christian +alt.binaries.sounds.mp3.christmas +alt.binaries.sounds.mp3.classic-rock +alt.binaries.sounds.mp3.classical +alt.binaries.sounds.mp3.comedy +alt.binaries.sounds.mp3.complete_cd +alt.binaries.sounds.mp3.country +alt.binaries.sounds.mp3.d +alt.binaries.sounds.mp3.dance +alt.binaries.sounds.mp3.dancehall +alt.binaries.sounds.mp3.easy-listening +alt.binaries.sounds.mp3.folk +alt.binaries.sounds.mp3.full_albums +alt.binaries.sounds.mp3.gothic-industrial +alt.binaries.sounds.mp3.heavy-metal +alt.binaries.sounds.mp3.hellyousinnation +alt.binaries.sounds.mp3.hit-explosion +alt.binaries.sounds.mp3.house +alt.binaries.sounds.mp3.hymns +alt.binaries.sounds.mp3.indian.bhangra +alt.binaries.sounds.mp3.indian.movies +alt.binaries.sounds.mp3.indian.movies.old +alt.binaries.sounds.mp3.indian.pop +alt.binaries.sounds.mp3.indian.remixes +alt.binaries.sounds.mp3.indian.requests +alt.binaries.sounds.mp3.indie +alt.binaries.sounds.mp3.irish-traditional +alt.binaries.sounds.mp3.irish-traditional.requests +alt.binaries.sounds.mp3.jay-denebeim.taking-a-shit +alt.binaries.sounds.mp3.jazz +alt.binaries.sounds.mp3.jethro-tull +alt.binaries.sounds.mp3.karaoke +alt.binaries.sounds.mp3.kcuf +alt.binaries.sounds.mp3.latin +alt.binaries.sounds.mp3.m +alt.binaries.sounds.mp3.metal.full-albums +alt.binaries.sounds.mp3.minneapolis +alt.binaries.sounds.mp3.modern-composers +alt.binaries.sounds.mp3.new-age +alt.binaries.sounds.mp3.newcleus +alt.binaries.sounds.mp3.ninja.music +alt.binaries.sounds.mp3.nospam +alt.binaries.sounds.mp3.pop +alt.binaries.sounds.mp3.praise.worship +alt.binaries.sounds.mp3.prog +alt.binaries.sounds.mp3.rap-hiphop +alt.binaries.sounds.mp3.rap-hiphop.full-albums +alt.binaries.sounds.mp3.rap-hiphop.mixtapes +alt.binaries.sounds.mp3.reggae +alt.binaries.sounds.mp3.remix +alt.binaries.sounds.mp3.repost +alt.binaries.sounds.mp3.requests +alt.binaries.sounds.mp3.rock +alt.binaries.sounds.mp3.rock.full-album +alt.binaries.sounds.mp3.russian +alt.binaries.sounds.mp3.secular +alt.binaries.sounds.mp3.singing-cowboy +alt.binaries.sounds.mp3.soul-rhythm-and-blues +alt.binaries.sounds.mp3.sound-effects +alt.binaries.sounds.mp3.soundtracks +alt.binaries.sounds.mp3.southern-gospel +alt.binaries.sounds.mp3.speeches +alt.binaries.sounds.mp3.spoken-word +alt.binaries.sounds.mp3.spoken-word.d +alt.binaries.sounds.mp3.taral-hicks +alt.binaries.sounds.mp3.themes +alt.binaries.sounds.mp3.tramaine-hawkins +alt.binaries.sounds.mp3.utility +alt.binaries.sounds.mp3.video-games +alt.binaries.sounds.mp3.world-music +alt.binaries.sounds.mp3.zappa +alt.binaries.sounds.music +alt.binaries.sounds.music.amateur +alt.binaries.sounds.music.classical +alt.binaries.sounds.music.rock.metal +alt.binaries.sounds.netjam.mp3 +alt.binaries.sounds.ninja +alt.binaries.sounds.pac +alt.binaries.sounds.patches +alt.binaries.sounds.radio.bbc +alt.binaries.sounds.radio.british +alt.binaries.sounds.radio.misc +alt.binaries.sounds.radio.oldtime +alt.binaries.sounds.radio.oldtime.d +alt.binaries.sounds.radio.oldtime.highspeed +alt.binaries.sounds.radio.paranormal +alt.binaries.sounds.radio.repost +alt.binaries.sounds.realaudio +alt.binaries.sounds.realaudio.rush-limbaugh +alt.binaries.sounds.samples +alt.binaries.sounds.samples.music +alt.binaries.sounds.spoken-word +alt.binaries.sounds.tv +alt.binaries.sounds.tv-commercials +alt.binaries.sounds.tv-themes +alt.binaries.sounds.twinvq +alt.binaries.sounds.twinvq.d +alt.binaries.sounds.utilities +alt.binaries.sounds.utilities.d +alt.binaries.sounds.vqf +alt.binaries.sounds.vqf.d +alt.binaries.sounds.wav +alt.binaries.sounds.wav.music.1950s +alt.binaries.sounds.wav.music.1960s +alt.binaries.sounds.wav.music.1970s +alt.binaries.southpark +alt.binaries.spanking +alt.binaries.squaresoft +alt.binaries.stargate-sg1 +alt.binaries.stargatesg-1 +alt.binaries.startrek +alt.binaries.startrek.adult +alt.binaries.starwars +alt.binaries.stories.sex +alt.binaries.stories.sexy +alt.binaries.strip-poker +alt.binaries.superman +alt.binaries.svcd +alt.binaries.swnet.diverse +alt.binaries.swnet.mp3 +alt.binaries.swnet.prostitution +alt.binaries.swnet.pryltorg +alt.binaries.teri-weigel +alt.binaries.test +alt.binaries.the-sopranos +alt.binaries.thebird +alt.binaries.this.needs.cracking +alt.binaries.tiffany-towers +alt.binaries.tori-amos +alt.binaries.torture.moderated +alt.binaries.toy-cars +alt.binaries.transcender.exams +alt.binaries.transexual.sri +alt.binaries.triballs +alt.binaries.tv.aus +alt.binaries.tv.big-brother +alt.binaries.tv.er +alt.binaries.tv.farscape +alt.binaries.tv.friends +alt.binaries.tv.gold-monkey +alt.binaries.tv.millennium +alt.binaries.tv.shaggable.babes +alt.binaries.tv.simpsons +alt.binaries.tv.teletubbies +alt.binaries.tv.us-sitcoms +alt.binaries.ufo.files +alt.binaries.unoffical.global.chat +alt.binaries.vcd +alt.binaries.vcd.d +alt.binaries.vcd.dvd-rip +alt.binaries.vcd.highspeed +alt.binaries.vcd.other +alt.binaries.vcd.other.repost +alt.binaries.vcd.repost +alt.binaries.vcd.svcd +alt.binaries.vcd.svcd.repost +alt.binaries.vcd.xxx +alt.binaries.vcdz +alt.binaries.vcdz.repost +alt.binaries.verified.photoshoots +alt.binaries.w-software +alt.binaries.wallacegromit +alt.binaries.warcraft +alt.binaries.wares.ibm-pc-graphic +alt.binaries.warex.ibm-pc.fumbles-harem +alt.binaries.warez +alt.binaries.warez-pc +alt.binaries.warez.0-day +alt.binaries.warez.0-day.games +alt.binaries.warez.adolescent +alt.binaries.warez.amiga +alt.binaries.warez.atari +alt.binaries.warez.autocad +alt.binaries.warez.certification +alt.binaries.warez.commodore64 +alt.binaries.warez.consoles +alt.binaries.warez.crypto +alt.binaries.warez.educational +alt.binaries.warez.games +alt.binaries.warez.games.adolescent +alt.binaries.warez.ibm-pc +alt.binaries.warez.ibm-pc.0-day +alt.binaries.warez.ibm-pc.cable2 +alt.binaries.warez.ibm-pc.d +alt.binaries.warez.ibm-pc.dos +alt.binaries.warez.ibm-pc.encrypted +alt.binaries.warez.ibm-pc.fills +alt.binaries.warez.ibm-pc.games +alt.binaries.warez.ibm-pc.insomniac +alt.binaries.warez.ibm-pc.kidnapd-harem +alt.binaries.warez.ibm-pc.ms-beta +alt.binaries.warez.ibm-pc.old +alt.binaries.warez.ibm-pc.os +alt.binaries.warez.insomniac +alt.binaries.warez.internet.video.phones.ibm.pc +alt.binaries.warez.linux +alt.binaries.warez.mac +alt.binaries.warez.mac.req +alt.binaries.warez.macintosh +alt.binaries.warez.newbies +alt.binaries.warez.nt +alt.binaries.warez.nt.d +alt.binaries.warez.os2 +alt.binaries.warez.palmpilot +alt.binaries.warez.pocketpc +alt.binaries.warez.ps.filters +alt.binaries.warez.riscos +alt.binaries.warez.sega-genesis +alt.binaries.warez.snes +alt.binaries.warez.steganography +alt.binaries.warez.win-me +alt.binaries.warez.win2000 +alt.binaries.warez.win95 +alt.binaries.warez.win95-3d +alt.binaries.warez.win95-apps +alt.binaries.warez.win95-fonts +alt.binaries.warez.win95-games +alt.binaries.warez.win95-graphics +alt.binaries.warez.win95-internet +alt.binaries.warez.windows31 +alt.binaries.warez.windowsce +alt.binaries.warez.your +alt.binaries.warez.your.mammy +alt.binaries.webcam.babetv +alt.binaries.webcam.pictures +alt.binaries.webcam.videos +alt.binaries.wifey +alt.binaries.win95-graphic +alt.binaries.witchblade +alt.binaries.world-languages +alt.binaries.x +alt.binaries.x-files +alt.binaries.x-files.ga +alt.binaries.x-men +alt.binaries.x.upper-case +alt.binaries.xbox +alt.binaries.zines +alt.binaries.zoogz-rift +alt.binary.carring-female +alt.binary.pictures.erotica +alt.binary.pictures.erotica.inter-racial +alt.bio +alt.bio.hackers +alt.bio.minority +alt.bio.technology +alt.bio.technology.cloning +alt.bio.technology.gene-testing +alt.bio.technology.misc +alt.biology +alt.birdlung.finance +alt.birdlung.kayak-repair +alt.birthright +alt.bisness.import-export +alt.biso.non-tromba +alt.bitch +alt.bitch.at.mortica +alt.bitch.at.morticia +alt.bitch.ewokie +alt.bitch.pork +alt.bitch.to.a.chimp.montgomery-wood +alt.bite +alt.bite-me +alt.bite.my.butt +alt.bitoparty +alt.bitterness +alt.bixesi +alt.biz +alt.biz.accounting +alt.biz.chiselling +alt.biz.infighting +alt.biz.marketplace +alt.biz.marketplace.international +alt.biz.misc +alt.bizarre +alt.bjczklf +alt.blackbayou +alt.blah +alt.blake-isms +alt.blasphemy +alt.ble +alt.bloaf +alt.blobbi.veteran-cunt +alt.bloodletters +alt.bloopers +alt.blueyonder +alt.blueyonder.mp3s +alt.blueyonder.users +alt.bmx +alt.boats-anchoring-rights +alt.bob.bring-me-a-goathead +alt.bobbiespage.com +alt.bobby +alt.bobflamingo +alt.bobflamingo.isa +alt.bobflamingo.isa.asshole +alt.bogus +alt.bogus.group +alt.bondage +alt.bonehead +alt.bonehead.andy-banta +alt.bonehead.anti-rush +alt.bonehead.bill-palmer +alt.bonehead.brian-mc-clellan +alt.bonehead.bruce-watson +alt.bonehead.captain-bligh +alt.bonehead.chris.caputo.censorious.bastard +alt.bonehead.chris.caputo.censorious.cretin +alt.bonehead.clayton-oneill +alt.bonehead.dr-turi +alt.bonehead.edmond-wollmann +alt.bonehead.gary.burnore +alt.bonehead.geoff-miller +alt.bonehead.gruppenschnitzer +alt.bonehead.gwbush +alt.bonehead.hangnail +alt.bonehead.hannigan.whack +alt.bonehead.head-librarian +alt.bonehead.higby +alt.bonehead.irish-republicans +alt.bonehead.jai-maharaj +alt.bonehead.james-koput +alt.bonehead.jay-denebeim +alt.bonehead.jesse-garon +alt.bonehead.jim-dutton +alt.bonehead.john-corliss +alt.bonehead.john-grubor +alt.bonehead.john-henry +alt.bonehead.john-siwinski +alt.bonehead.john-weir +alt.bonehead.john.boyd +alt.bonehead.joseph-holl +alt.bonehead.josh-kramer +alt.bonehead.kevin-mitnick +alt.bonehead.kevin.cannon +alt.bonehead.klaas.suck.checkmates.dick +alt.bonehead.kristian-tanner +alt.bonehead.lee-latham +alt.bonehead.oliver1 +alt.bonehead.paedophile.barry-bouwsma +alt.bonehead.phil-lawlor +alt.bonehead.phil-oliver +alt.bonehead.ralph.reed.sucks +alt.bonehead.rick.mather.no.pecker.colostomy.australia +alt.bonehead.sander.von.minnen +alt.bonehead.sandy-wallace +alt.bonehead.scott-abraham +alt.bonehead.self-immolation.morely-dotes +alt.bonehead.steve-crisp +alt.bonehead.steve-day +alt.bonehead.steve-lake +alt.bonehead.suzanne.thompson.sucks.cock +alt.bonehead.teddy-bear +alt.bonehead.waldby +alt.bonehead.walt-rines +alt.bonhead.johnny-grubor +alt.bonsai +alt.boofhead +alt.booger +alt.booger.misc +alt.book +alt.book.reviews +alt.books +alt.books.anne-rice +alt.books.arthur-clarke +alt.books.august-derleth +alt.books.beatgeneration +alt.books.bernard-cornwell +alt.books.bernard.cornwell +alt.books.brian-lumley +alt.books.bukowski +alt.books.cait-r-kiernan +alt.books.carl-sagan +alt.books.chesterton +alt.books.christa-faust +alt.books.clive-barker +alt.books.crichton +alt.books.cs-lewis +alt.books.dan-simmons +alt.books.david-gemmell +alt.books.david-weber +alt.books.dean-koontz +alt.books.deryni +alt.books.destroyer +alt.books.dylan-thomas +alt.books.electronic +alt.books.george-behe +alt.books.george-fraser +alt.books.george-orwell +alt.books.ghost-fiction +alt.books.gor +alt.books.h-g-wells +alt.books.harry-turtledove +alt.books.iain-banks +alt.books.inklings +alt.books.isaac-asimov +alt.books.jack-chalker +alt.books.jack-london +alt.books.james-joyce +alt.books.jean-auel +alt.books.jerry-chavez +alt.books.john-cheever +alt.books.john-grisham +alt.books.julian-may +alt.books.kurt-vonnegut +alt.books.larry-niven +alt.books.lars-eighner +alt.books.left-behind +alt.books.louis-lamour +alt.books.m-lackey +alt.books.moorcock +alt.books.mysteries +alt.books.nabokov +alt.books.nancy-drew +alt.books.orson-s-card +alt.books.outlander +alt.books.pat-conroy +alt.books.patrick-jones +alt.books.peter-straub +alt.books.phil-k-dick +alt.books.philip-pullman +alt.books.poppy-z-brite +alt.books.pratchett +alt.books.purefiction +alt.books.ray-bradbury +alt.books.raymond-feist +alt.books.reviews +alt.books.robert-rankin +alt.books.roger-zelazny +alt.books.sebar +alt.books.sf +alt.books.sf.melanie-rawn +alt.books.stephen-king +alt.books.tanya-huff +alt.books.technical +alt.books.terry-brooks +alt.books.terry-goodkind +alt.books.the-waste-land.jug.jug.jug +alt.books.thomas-ligotti +alt.books.thomas-pynchon +alt.books.thomasbernhard +alt.books.toffler +alt.books.tom-clancy +alt.books.tom-holt +alt.books.valdemar.fanfic +alt.books.vc-andrews +alt.books.wilbur-smith +alt.books.wizard-of-oz +alt.books.zogoiby +alt.boomerang +alt.bored +alt.bork +alt.boston.moderated +alt.boston.unmoderated +alt.bot.bctv.vo.b +alt.boxer-shorts +alt.bozoes +alt.braces +alt.brad.jesness.die.die.die +alt.brain +alt.brain.teasers +alt.brallen +alt.brandon +alt.bread.recipes +alt.breakdancing +alt.breast-implant.moderated +alt.brewing +alt.brhuk.cajbm.hpcvltso.y.h +alt.brian.edmonds.lucky.day +alt.bristol +alt.bristols +alt.brittsbabes.com +alt.brittspage.com +alt.brooklyn-crew.pimps +alt.brother-jed +alt.brown-cow-moo +alt.bru +alt.bruravagebeast +alt.bruravagebeast.flame +alt.bruravagebeast.troll +alt.brykins +alt.bs.i.p.g.p.g.fnomlb +alt.bubba-love.el-caminoville +alt.bucky-fuller +alt.buddha +alt.buddha.short.fat.guy +alt.buds +alt.buffy.europe +alt.bugger-all +alt.building +alt.building.announcements +alt.building.architecture +alt.building.construction +alt.building.consulting-specialty +alt.building.contractors +alt.building.distributor-dealer +alt.building.earth +alt.building.education +alt.building.elevators +alt.building.engineering +alt.building.environment +alt.building.finance +alt.building.gov-issues +alt.building.harrison-towers +alt.building.health-safety +alt.building.insurance-bonding-surety +alt.building.interior-design +alt.building.jobs +alt.building.landscape +alt.building.law +alt.building.manufacturing +alt.building.mining +alt.building.planning-preservation +alt.building.realestate +alt.building.recycle +alt.building.research +alt.building.resumes +alt.building.survey-mapping +alt.buisness.misc +alt.bullshit +alt.bumbling.idiots.the.fbi +alt.burning-man +alt.burningman +alt.businerss.career-opportunities.executives +alt.business +alt.business-majors +alt.business-majors.die.die.die +alt.business.accountability +alt.business.ads +alt.business.biz.newsgroup +alt.business.business +alt.business.career-opportunites +alt.business.career-opportunites.executives +alt.business.career-opportunities +alt.business.career-opportunities.executives +alt.business.consultants +alt.business.consulting +alt.business.consulting.utilities +alt.business.entrepreneurs +alt.business.export +alt.business.export-import +alt.business.export.import +alt.business.franchise +alt.business.home +alt.business.home-pc +alt.business.home.multilevel +alt.business.home.pc +alt.business.home.pcalt.business +alt.business.home.pcmisc.entrepreneurs +alt.business.hospitality +alt.business.import +alt.business.import-export +alt.business.import-export.biz.marketplace.international +alt.business.import-export.computer +alt.business.import-export.computers +alt.business.import-export.consumables +alt.business.import-export.food +alt.business.import-export.only +alt.business.import-export.raw-material +alt.business.import-export.services +alt.business.import-export.vehicles +alt.business.import-exportalt.business +alt.business.import.export +alt.business.import.export.services +alt.business.importexport +alt.business.insurance +alt.business.insurance.indonesia +alt.business.internal-audit +alt.business.international +alt.business.manchester-united +alt.business.marketeplace +alt.business.marketing +alt.business.marketplace +alt.business.misc +alt.business.misc.entrepreneurs +alt.business.mlm +alt.business.multi-lev +alt.business.multi-level +alt.business.multi-level.com +alt.business.multi-level.exceltel +alt.business.multi-level.finl +alt.business.multi-level.imagic +alt.business.multi-level.moderated +alt.business.multi-level.scam +alt.business.multi-level.scam.scam +alt.business.multi-level.scam.scam.scam +alt.business.multi-level.scan.scam.scam +alt.business.multi-level.watkins +alt.business.multi.level +alt.business.multilevel +alt.business.mutli-level +alt.business.offshore +alt.business.pornpig.industries +alt.business.propertry +alt.business.property +alt.business.seminars +alt.business.services +alt.business.six-sigma +alt.business.telecommunication +alt.business.telecommunication.services +alt.business.telemarketing +alt.businessmisc.entrepreneurs +alt.butt +alt.butt.flame.karl-malden.cascade +alt.butt.harp +alt.butt.harp.die.die.die +alt.butthead.religion.sue.sue.sue +alt.butthole.jay-denebeim +alt.buttholes +alt.butts +alt.buyers.ebay +alt.bxcrmjc.yhh.uqim.lwiuxwgcoixg +alt.bytebrothers +alt.c0deboy +alt.c64 +alt.cable-ip +alt.cable-tv +alt.cable-tv.disney +alt.cable-tv.re-regulate +alt.cable-tv.tci-digital +alt.cable.wanadoo.angers +alt.cable.wanadoo.montpellier +alt.cad +alt.cad.archicad +alt.cad.arkey +alt.cad.autocad +alt.cad.cadkey +alt.cad.cadvance +alt.cad.chiefarchitect +alt.cad.helix +alt.cad.inquire-design +alt.cad.intellicad +alt.cad.minicad +alt.cafe-vortex +alt.cake +alt.calculator +alt.calculator.casio +alt.california +alt.california.illegals +alt.california.state-fair +alt.callahans +alt.calvinball +alt.camel.lovers +alt.camillo +alt.campaign +alt.campaign.greyfox +alt.can.creat.whatever.news.group.i.want +alt.canadian +alt.canadian.beaver +alt.cancel.bots +alt.cancer.support +alt.cannabis.seed-banks +alt.captain.busternaut +alt.captain.sarcastic +alt.car.boot.sales +alt.cardgame.magic +alt.cardgame.netrunner +alt.cardgame.spellfire +alt.cardgames.magic +alt.cardgames.magic.get-a-life +alt.carers +alt.carlos-n-jen +alt.carnaval +alt.carnival +alt.carrot.stuck.in.ass.jay-denebeim +alt.cars +alt.cars.Ford-Probe +alt.cars.clubgti +alt.cars.ferrari +alt.cars.ford-probe +alt.cars.lotus +alt.cars.lotus.elan +alt.cartoon +alt.cartoon.reboot +alt.cartoonsex +alt.cascade +alt.cascade.faggot.jeffypetersen +alt.cascade.faggot.raydixon +alt.cascade.fuckhead +alt.cascade.fuckhead.buzzard +alt.cascade.fuckhead.diato +alt.cascade.fuckhead.ramalane +alt.cascade.fuckhead.rikijo +alt.cascade.fuckhead.singh +alt.cascade.fuckhead.vinny +alt.cascade.shut-up-cunter +alt.cascade.vest.sweater.vest +alt.casema.binaries +alt.casema.kinderachtig.gedoe +alt.casinos.chequers.chips.tokens +alt.casio.calculator +alt.castlenet +alt.catastrophism +alt.catles +alt.cats +alt.cats.ginger +alt.cats.world.domination +alt.caving +alt.cbdrhp +alt.cbs-sucks +alt.ccn.sucks +alt.ccwmop +alt.cd-r +alt.cd-rom +alt.cd-rom.reviews +alt.cdc +alt.cdr.panasonic +alt.cdrom +alt.cds.bobm.vybs +alt.cdworld.marketplace +alt.celebrities +alt.cell-phone +alt.cell-phone.tech +alt.cellular +alt.cellular-phone-tech +alt.cellular.alltel +alt.cellular.attws +alt.cellular.bluetooth +alt.cellular.cdma +alt.cellular.cingular +alt.cellular.clearnet +alt.cellular.data +alt.cellular.ericsson +alt.cellular.fido +alt.cellular.gsm +alt.cellular.gsm.carriers.voicestream +alt.cellular.motorola +alt.cellular.nextel +alt.cellular.nokia +alt.cellular.nokia.groupgraphics +alt.cellular.nokia.operatorlogos +alt.cellular.nokia.ringtones +alt.cellular.oki.900 +alt.cellular.sprintpcs +alt.cellular.tech +alt.cellular.telephones +alt.cellular.umts +alt.cellular.verizon +alt.cellular.vinny.didnt.call +alt.censor +alt.censorship +alt.censorship.canada +alt.censorship.canada.dumb +alt.centipede +alt.central.illinois.pagan.alliance +alt.cereal +alt.certification +alt.certification.a-plus +alt.certification.cisco +alt.certification.citrix +alt.certification.cne +alt.certification.i-net-plus +alt.certification.mcsd +alt.certification.mcse +alt.certification.network-plus +alt.certification.redhat +alt.cesium +alt.chameleon +alt.chandra-levy +alt.change +alt.change.lightbulb +alt.chaos +alt.charlie.rules.rules.rules +alt.chat-programs.icq +alt.chat-programs.icq.dating +alt.cheat.cheat.cheat +alt.cheater +alt.check.her.miss-jesus +alt.checkmate +alt.cheese +alt.cheese.flavoured.elephants +alt.chello.binaries +alt.chess +alt.chess.ics +alt.chfpz.cn +alt.child-support +alt.child.molester.mongrel-mind +alt.childcare +alt.childfree +alt.childfree.bridgebuilding +alt.childfree.discussion +alt.childfree.support +alt.childrens.rights +alt.childsafety.kidprotection-network +alt.chinchilla +alt.chips +alt.chips.salt-n-vinegar +alt.choad +alt.chocobo +alt.chocobo.wark +alt.chocobo.wark.wark.wark +alt.choice.cd-rom +alt.chris-caputo +alt.chris-caputo.usenet-abuser +alt.chris-caputo.usenet-abuser.but-no-cascades +alt.christ +alt.christian +alt.christian.businessmen +alt.christian.personals +alt.christian.religion +alt.christnet +alt.christnet.atheism +alt.christnet.beanie-babies +alt.christnet.bible +alt.christnet.bible-thumpers +alt.christnet.bible-thumpers.convert +alt.christnet.bible-thumpers.convert.convert.convert +alt.christnet.calvinist +alt.christnet.christianlife +alt.christnet.christnews +alt.christnet.comp.dcom +alt.christnet.comp.dcom.telecom +alt.christnet.demonology +alt.christnet.dinosaur +alt.christnet.ethics +alt.christnet.evangelical +alt.christnet.games +alt.christnet.games.ibm-pc +alt.christnet.holy-spirit +alt.christnet.hypocrisy +alt.christnet.nudism +alt.christnet.philosophy +alt.christnet.prayer +alt.christnet.public +alt.christnet.public-school +alt.christnet.racism +alt.christnet.religion +alt.christnet.rightwing.loonies +alt.christnet.satanism +alt.christnet.second-coming.real-soon-now +alt.christnet.sex +alt.christnet.sex.etish.fat.furry.asian.watersports +alt.christnet.sex.fetish +alt.christnet.sex.fetish.fat +alt.christnet.sex.fetish.fat.furry.asian.watersports +alt.christnet.sex.irritable.bowel.syndrome +alt.christnet.sexi +alt.christnet.sodomy +alt.christnet.songwriters +alt.christnet.theology +alt.chrome +alt.chrome.the.moon +alt.cic.sfsu.edu +alt.cinquecento.sport.rulez +alt.circumcision +alt.circus.arts +alt.citadel.alumni +alt.cities.amsterdam +alt.cities.chicago +alt.cities.dublin +alt.cities.london +alt.cities.moscow +alt.cities.new-york +alt.cities.paris +alt.cities.portland +alt.cities.poznan +alt.cities.rome +alt.cities.toronto +alt.cities.washington +alt.citserv.talk +alt.city.ideafarm +alt.civil-liberty +alt.ck.pw.mndiwb.amhhe.bo.mbte.bw.ff +alt.clans.asskickers +alt.clearing +alt.clearing.aquaria +alt.clearing.avatar +alt.clearing.scam +alt.clearing.technology +alt.clerks +alt.clerks.binaries +alt.clip-joint +alt.clnis.daily.club +alt.clnis.daily.club.b +alt.cloned-sheep.bah.bah.bah +alt.cloning +alt.clothes.custom-tailored +alt.clothes.designer +alt.clothes.designer.versace +alt.clothing +alt.clothing.lingerie +alt.clothing.sneakers +alt.cloudshapes +alt.clowningaround +alt.club.arabian-gulf +alt.club.merlino +alt.club.raaf +alt.clubs +alt.clubs.club-anime.toronto +alt.clubs.compsci +alt.clubs.emperorshammer +alt.clubs.just-for-fun +alt.clueless +alt.clueless.newbie.whine.whine.whine +alt.cmm +alt.cmnnx +alt.cmsg.test +alt.cna +alt.cnd.canada +alt.co-evolution +alt.co-ops +alt.coast-guard +alt.coatings.paint +alt.cobol +alt.coccinella.alexa.zepher.maltrattamenti +alt.coffee +alt.coffee.clutch +alt.collecting +alt.collecting.8-track-tapes +alt.collecting.autographs +alt.collecting.autographs.vintage +alt.collecting.barbie +alt.collecting.barbies +alt.collecting.beanie-babies +alt.collecting.beanie-babies.charlie-witt +alt.collecting.beanie-babies.discussion.moderated +alt.collecting.beanie-babies.forsale +alt.collecting.beanie-babies.tradingcards +alt.collecting.beanie-babies.uk +alt.collecting.beannie-babies +alt.collecting.bicycles +alt.collecting.breweriana +alt.collecting.casino-tokens +alt.collecting.gameroom +alt.collecting.hockey-pucks +alt.collecting.honeypots +alt.collecting.juke-boxes +alt.collecting.magazines +alt.collecting.mcd-bk.toys +alt.collecting.pens-pencils +alt.collecting.pens-pencils.binaries +alt.collecting.pens-pencils.binary +alt.collecting.pez +alt.collecting.pokemon +alt.collecting.police-patches +alt.collecting.postcard +alt.collecting.records +alt.collecting.sports-figures +alt.collecting.stamp +alt.collecting.stamps +alt.collecting.stamps.david.ross.sucks +alt.collecting.stamps.jay.carrigan.blackmail +alt.collecting.stamps.software +alt.collecting.stamps.us +alt.collecting.stamps.worldwide +alt.collecting.teddy-bears +alt.collecting.topper-dawn +alt.collecting.toy-robot +alt.collecting.vendorware +alt.collecting.warner-bros +alt.college +alt.college.bromley-uk +alt.college.bromley-uk.announce +alt.college.bromley-uk.events +alt.college.bromley-uk.misc +alt.college.college-bowl +alt.college.college-meow +alt.college.democrats +alt.college.food +alt.college.fraternities +alt.college.fraternities.delta-sigma-pi +alt.college.fraternities.dlta-sigma-phi +alt.college.fraternities.sigma-alpha-epsilon +alt.college.fraternities.sigma-pi +alt.college.greek +alt.college.greek.organizations +alt.college.republicans +alt.college.sororities +alt.college.tunnels +alt.college.us +alt.colllecting.hockey-pucks +alt.colorado.queers.jay-denebeim +alt.colorguard +alt.com +alt.comedy +alt.comedy.air-farce +alt.comedy.bill-hicks +alt.comedy.british.blackadder +alt.comedy.british.fast-show +alt.comedy.british.leagueofgentlemen +alt.comedy.codas +alt.comedy.firesgn-thtre +alt.comedy.george-carlin +alt.comedy.improvisation +alt.comedy.jerrylewis +alt.comedy.laurel-hardy +alt.comedy.marx-bros +alt.comedy.paul-reubens +alt.comedy.slapstick +alt.comedy.slapstick.3-stooges +alt.comedy.standup +alt.comedy.vaudeville +alt.comics +alt.comics.2000ad +alt.comics.alan-moore +alt.comics.alternative +alt.comics.archie +alt.comics.batman +alt.comics.classic +alt.comics.dilbert +alt.comics.elfquest +alt.comics.fan-fiction +alt.comics.fandom +alt.comics.green-lantern +alt.comics.gunnm +alt.comics.image +alt.comics.jack-chick +alt.comics.jack-kirby +alt.comics.joe-the-circle +alt.comics.justice-league +alt.comics.lnh +alt.comics.marketplace +alt.comics.mwagner +alt.comics.peanuts +alt.comics.pokey +alt.comics.sip +alt.comics.sluggy-freelance +alt.comics.spacemoose +alt.comics.spider-man +alt.comics.strips.footrot-flats +alt.comics.super-villains +alt.comics.superman +alt.comics.the-phantom +alt.comics.user-friendly +alt.commahead +alt.commerce.misc-ads +alt.commercial-hit-radio.must.die +alt.comms.lounge +alt.comms.powerline +alt.community.intentional +alt.community.local-money +alt.commuter +alt.commuter.students +alt.comp +alt.comp.4d +alt.comp.abb.nl +alt.comp.acad-freedom +alt.comp.acad-freedom.news +alt.comp.acad-freedom.talk +alt.comp.accessibility +alt.comp.adware +alt.comp.anti-virus +alt.comp.appserver +alt.comp.baan +alt.comp.binaries.clipart +alt.comp.bios +alt.comp.blind-user +alt.comp.blind-users +alt.comp.bmcpatrol +alt.comp.boo.boo.broke.puter +alt.comp.borland-delphi +alt.comp.cableboyz +alt.comp.cancel +alt.comp.case-mods +alt.comp.casewise +alt.comp.clipart +alt.comp.compression +alt.comp.convergence +alt.comp.databases +alt.comp.databases.omnis +alt.comp.databases.xbase +alt.comp.databases.xbase+ +alt.comp.databases.xbase++ +alt.comp.databases.xbase.clipper +alt.comp.datacore +alt.comp.dcom.modems +alt.comp.dcom.sys.xyplex +alt.comp.ddns.clients.dynsite-for-windows +alt.comp.ddns.clients.windows.dynsite +alt.comp.dragon +alt.comp.dymax +alt.comp.dynamic-dns.clients.dynsite-for-windows +alt.comp.dynamic-dns.clients.windows.dynsite +alt.comp.eai +alt.comp.editors.batch +alt.comp.emulators.executor +alt.comp.ewriters.homebased +alt.comp.freeware +alt.comp.freeware.discussion +alt.comp.freeware.games +alt.comp.freeware.gdp +alt.comp.goldmine +alt.comp.hardware +alt.comp.hardware.amd.thunderbird +alt.comp.hardware.aptiva +alt.comp.hardware.buz +alt.comp.hardware.deals +alt.comp.hardware.homebuilt +alt.comp.hardware.homedesigned +alt.comp.hardware.overclocking +alt.comp.hardware.overclocking.amd +alt.comp.hardware.pc-homebuilt +alt.comp.hardware.scratchbuilt +alt.comp.hardware.stampanti +alt.comp.hardware.superdisk +alt.comp.hello-world +alt.comp.illegal-operations.poetry +alt.comp.intercal.cancelbots +alt.comp.jdedwards +alt.comp.jgaa +alt.comp.jgaa.binaries +alt.comp.lang +alt.comp.lang.applescript +alt.comp.lang.borland-delphi +alt.comp.lang.coldfusion +alt.comp.lang.java-games +alt.comp.lang.learn.c-c+ +alt.comp.lang.learn.c-c++ +alt.comp.lang.php +alt.comp.lang.reportsmith +alt.comp.lang.scriptease +alt.comp.lang.superlang +alt.comp.lang.visualbasic.ver.3 +alt.comp.lang.visualbasic.ver3 +alt.comp.lang.visulabasic.ver3 +alt.comp.lego-mindstorms +alt.comp.linguistics +alt.comp.linux +alt.comp.linux.isp +alt.comp.linux.xxx +alt.comp.mail.exim +alt.comp.mail.misc +alt.comp.mail.postfix +alt.comp.mail.qmail +alt.comp.mainboards.abit +alt.comp.malaysia +alt.comp.mdaemon +alt.comp.msx +alt.comp.opensource +alt.comp.opensource.cms +alt.comp.opensource.cms.typo3 +alt.comp.pacnet.support +alt.comp.periphs +alt.comp.periphs.cdr +alt.comp.periphs.cdr.mac +alt.comp.periphs.dcameras +alt.comp.periphs.gigabyte +alt.comp.periphs.hdd +alt.comp.periphs.keyboard +alt.comp.periphs.mainboard +alt.comp.periphs.mainboard.abit +alt.comp.periphs.mainboard.aopen +alt.comp.periphs.mainboard.asus +alt.comp.periphs.mainboard.chaintech +alt.comp.periphs.mainboard.elitegroup +alt.comp.periphs.mainboard.epox +alt.comp.periphs.mainboard.fic +alt.comp.periphs.mainboard.giga-byte +alt.comp.periphs.mainboard.gigabyte +alt.comp.periphs.mainboard.iwill +alt.comp.periphs.mainboard.m-tech +alt.comp.periphs.mainboard.msi-microstar +alt.comp.periphs.mainboard.octek +alt.comp.periphs.mainboard.qdi +alt.comp.periphs.mainboard.shuttle +alt.comp.periphs.mainboard.soyo +alt.comp.periphs.mainboard.supermicro +alt.comp.periphs.mainboard.tacos +alt.comp.periphs.mainboard.tyan +alt.comp.periphs.motherboard +alt.comp.periphs.multifunctions +alt.comp.periphs.scanner +alt.comp.periphs.scanners +alt.comp.periphs.soundcard.avm +alt.comp.periphs.soundcard.pulsar +alt.comp.periphs.soundcard.sblive +alt.comp.periphs.storage.syquest +alt.comp.periphs.videocards.ati +alt.comp.periphs.videocards.elsa +alt.comp.periphs.videocards.matrox +alt.comp.periphs.videocards.nvidia +alt.comp.periphs.videocards.nvidia.programming +alt.comp.periphs.videocards.programming +alt.comp.periphs.videocards.s3-via +alt.comp.periphs.webcam +alt.comp.perlcgi.freelance +alt.comp.pheriphs.mainboard.supermicro +alt.comp.programming +alt.comp.programming.anti-oop +alt.comp.programming.calculators +alt.comp.programming.calculators.assembly +alt.comp.project-management +alt.comp.sesoft +alt.comp.sfdm.ug +alt.comp.shareware +alt.comp.shareware.authors +alt.comp.shareware.for-kids +alt.comp.shareware.nettamer +alt.comp.shareware.programmer +alt.comp.software.design.inquire-design +alt.comp.software.easter-eggs +alt.comp.software.energy +alt.comp.software.financial +alt.comp.software.financial.peachtree +alt.comp.software.financial.quickbooks +alt.comp.software.financial.quicken +alt.comp.software.njdm +alt.comp.software.tools +alt.comp.software.www +alt.comp.symix +alt.comp.sys.as400 +alt.comp.sys.iopener +alt.comp.sys.laptops.alcam +alt.comp.sys.mainboard.macintosh +alt.comp.sys.palmtops.hp +alt.comp.sys.palmtops.pilot +alt.comp.tandem-users +alt.comp.tandem-users.sigs +alt.comp.tess +alt.comp.trialware.authors +alt.comp.virus +alt.comp.virus.binaries +alt.comp.virus.pro-virus +alt.comp.virus.source.code +alt.comp.viruses +alt.comp.webdev.freelance +alt.comp.windows.ipf-gpf-errors +alt.comp.wingate +alt.comp.zinc +alt.complainers.bitch-n-moan +alt.compusa.employees +alt.compuserve-sucks +alt.computer +alt.computer.consultant.ads +alt.computer.consultants +alt.computer.consultants.ads +alt.computer.consultants.ads.norecruiters +alt.computer.consultants.moderated +alt.computer.drivers +alt.computer.drivers.wanted +alt.computer.homepage.test +alt.computer.security +alt.computer.security.web-of-trust +alt.computer.trades +alt.computer.workshop +alt.computer.workshop.live +alt.computerlink.online +alt.computers +alt.computers.amiga +alt.confag +alt.conference-ctr +alt.config +alt.config.agff +alt.config.are-wankers +alt.config.cypher +alt.config.cypher-abuse +alt.config.delete-me.jays-bitch +alt.config.faq +alt.config.fishing +alt.config.flame +alt.config.frogbutt +alt.config.groupies.scott-doofus-hawk +alt.config.hawk.sucks.cock +alt.config.ingrid +alt.config.is.a.joke.group +alt.config.jay.benebeim +alt.config.jays.fan-boys +alt.config.jeffery-d-hunt +alt.config.liberalminded.rules.it-now +alt.config.loves.pikachu +alt.config.maxwell +alt.config.mexwall +alt.config.moderated +alt.config.newgroup +alt.config.newtons +alt.config.phil-oliver +alt.config.rmgroup.maniacs.david.guntner +alt.config.stupid-fucking-ng +alt.config.troll-owned +alt.config.unmoderated +alt.confusion +alt.confusion.at-its-finest +alt.connecticut +alt.consciousness +alt.consciousness.4th-way +alt.consciousness.abstinence +alt.consciousness.jancox +alt.consciousness.mysticism +alt.consciousness.near-death-exp +alt.consciousness.slyman +alt.consciousness.slyman.flame +alt.conspiracy +alt.conspiracy.abe-lincoln +alt.conspiracy.abiola +alt.conspiracy.alt-config +alt.conspiracy.antichrist +alt.conspiracy.area51 +alt.conspiracy.beyondweird +alt.conspiracy.black.helicopters +alt.conspiracy.cabal +alt.conspiracy.coventry.morph +alt.conspiracy.dean-stark +alt.conspiracy.fbi.karczewski-files +alt.conspiracy.finast +alt.conspiracy.im-taking.over-the.world.starting.with-alt.config +alt.conspiracy.im-taking.over-the.world.starting.with-aol +alt.conspiracy.im-taking.over-the.world.starting.with-christmas +alt.conspiracy.im-taking.over-the.world.starting.with-usenet +alt.conspiracy.im-taking.over-the.world.starting.with-yalta +alt.conspiracy.im.taking.over.the.world.starting.with.usenet +alt.conspiracy.jeffery-hunt +alt.conspiracy.jfk +alt.conspiracy.jfk.moderated +alt.conspiracy.kunm +alt.conspiracy.kynes.deop.deop.deop +alt.conspiracy.lady-di +alt.conspiracy.microsoft +alt.conspiracy.mlk +alt.conspiracy.netcom +alt.conspiracy.new-world-order +alt.conspiracy.princess-diana +alt.conspiracy.right-wing +alt.conspiracy.solo +alt.conspiracy.spy +alt.conspiracy.syndicate +alt.conspiracy.timo-salami +alt.conspiracy.usenet-cabal +alt.conspiracy.waco +alt.conspiracy.yak.worshippers +alt.construction +alt.consultancy.marriage-help +alt.consumer.free-stuff +alt.consumers +alt.consumers.auto-service +alt.consumers.experiences +alt.consumers.free-stuff +alt.consumers.free-stuff.nospam +alt.consumers.pest-control +alt.consumers.sweepstakes +alt.contact.be +alt.contest.addiction +alt.contest.recovery +alt.contraceptives +alt.control +alt.control-theory +alt.control.bladder +alt.control.cabal +alt.control.cabal.bladder +alt.control.delete +alt.control.gruppenschnitzer +alt.control.maxwell +alt.control.mexwall +alt.control.moderated +alt.control.oooops.bot.broke +alt.control.test +alt.control.test.test.test +alt.cookies.yum.yum.yum +alt.cooking-chat +alt.cooking-chien +alt.cooking.chefs +alt.cool.home-pages +alt.coolcomp +alt.coptic.australia +alt.corel +alt.corel.graphics +alt.corn.sucks-polenta.rules-do.the.butt.dance-man +alt.corporate.accountability +alt.costam +alt.cosuard +alt.counterstrike +alt.coupons +alt.coven +alt.coven.binaries +alt.coven.cthulhu +alt.coven.humor +alt.coven.moderated +alt.coven.test +alt.cover.the.world.with.snow +alt.cow.tipping +alt.cows +alt.cows.are.nice +alt.cows.moo.moo +alt.cows.moo.moo.moo +alt.crack +alt.crack.dealer.montgomery-wood +alt.crack.nl +alt.crack.this +alt.crackerjack +alt.crackers +alt.crackhead.jay-denebeim +alt.cracks +alt.crackz +alt.crafts +alt.crafts.beads +alt.crafts.blacksmithing +alt.crafts.candlemaking.soapmaking +alt.crafts.candlemaking.soapmaking.moderated +alt.crafts.crafttown +alt.crafts.plastic-canvas +alt.crafts.print-artist +alt.crafts.professional +alt.crafts.scrapbooks +alt.crazy.people +alt.creamsickle.pie.eating +alt.creamsickle.smoking +alt.creative+cooking +alt.creative-cook +alt.creative-cooking +alt.creative.writing +alt.creative_cooking +alt.creativecooking +alt.cretin.nik-warrensson +alt.cretinous.reprobate.jay-denebeim +alt.cretinous.reprobate.scott-abraham +alt.crime +alt.crime.bail-enforce +alt.crime.peacemaking.criminology +alt.crime.tax-evasion.bert-hoff +alt.crossover +alt.crqyh.d.pxwg +alt.crusade.anti-pornography +alt.crybaby.dg-devin +alt.csoupkid +alt.csvca +alt.cthulhu.cabinet.sombrero.buenos-dias.coffee.slam +alt.cthulhu.fridge.zool.did-i-mention +alt.cty +alt.cuddle +alt.cuddle.rebels +alt.cuddlebot +alt.cult-movies +alt.cult-movies.alien +alt.cult-movies.clue +alt.cult-movies.cronenberg +alt.cult-movies.eros +alt.cult-movies.erotica +alt.cult-movies.evil-deads +alt.cult-movies.phantasm +alt.cult-movies.rhps +alt.cult-movies.rocky-horror +alt.cult-movies.spaghetti-westerns +alt.cult-movies.zombies +alt.cult.jeff-mcdonald +alt.cult.maharaji +alt.cult.movies.rocky-horror +alt.cult.nudism +alt.cultura.allevamento.lombrichi +alt.cultura.frappe +alt.cultura.linguistica.italiano.pirotti +alt.cultura.linguistica.pirottologia +alt.cultura.lusitania +alt.cultura.stamink +alt.culture.1989-nostalgia +alt.culture.african.american.arts +alt.culture.african.american.business +alt.culture.african.american.history +alt.culture.african.american.issues +alt.culture.alaska +alt.culture.anthropomorphics +alt.culture.arab-league +alt.culture.arabic.friends +alt.culture.arabic.non-politics +alt.culture.argentina +alt.culture.armenian +alt.culture.assam +alt.culture.australia +alt.culture.austrian +alt.culture.azerbaijan +alt.culture.beaches +alt.culture.bullfight +alt.culture.bullfighting.sucks +alt.culture.cacophony +alt.culture.cajun +alt.culture.caucasia +alt.culture.chechnya +alt.culture.china +alt.culture.crete +alt.culture.crimea +alt.culture.cyber-psychos +alt.culture.cyprus +alt.culture.dagestan +alt.culture.egyptian +alt.culture.epirus +alt.culture.euskalherria +alt.culture.fabulous +alt.culture.fil-am.relationships +alt.culture.french-polynesia +alt.culture.friesland.frysk +alt.culture.fyrom +alt.culture.gard-trask +alt.culture.gods +alt.culture.groovy +alt.culture.hawaii +alt.culture.hawaii.ask-kahuna +alt.culture.hessian +alt.culture.hongkong +alt.culture.indonesia +alt.culture.internet +alt.culture.internet.codes +alt.culture.james-koput +alt.culture.jesse-garon +alt.culture.jollyroger +alt.culture.karnataka +alt.culture.kashmir +alt.culture.kazakhstan +alt.culture.kerala +alt.culture.knights +alt.culture.kuwait +alt.culture.local-people +alt.culture.lounge +alt.culture.luddites +alt.culture.macedonia +alt.culture.macedonia-is-greek +alt.culture.macedonia.moderated +alt.culture.malawi +alt.culture.maldives +alt.culture.malta +alt.culture.military-brats +alt.culture.mobydick +alt.culture.morocco +alt.culture.net-viking +alt.culture.ny-upstate +alt.culture.ny.upstate +alt.culture.openair-market +alt.culture.oregon +alt.culture.orientalism +alt.culture.outerspace +alt.culture.rhodes +alt.culture.riot-grrrls +alt.culture.saudi +alt.culture.somalia +alt.culture.swahili +alt.culture.taiwan +alt.culture.tamil +alt.culture.tamil-eelam +alt.culture.tanzania +alt.culture.tasmanian +alt.culture.thrace +alt.culture.tibet +alt.culture.true-russian.alcoholics +alt.culture.tunisia +alt.culture.turkestan +alt.culture.turkish +alt.culture.turkish.azerbaijan +alt.culture.turkish.cyprus +alt.culture.turkish.diaspora +alt.culture.turkish.history +alt.culture.turkish.internet +alt.culture.turkish.media +alt.culture.turkish.politics +alt.culture.turkish.publications +alt.culture.turkish.religions +alt.culture.turkish.travel +alt.culture.turkmenistan +alt.culture.tuva +alt.culture.uganda +alt.culture.ukc.misc +alt.culture.underwear +alt.culture.us +alt.culture.us.1960s +alt.culture.us.1970s +alt.culture.us.1980s +alt.culture.us.1990s +alt.culture.us.asian-indian +alt.culture.us.hispanics +alt.culture.us.southwest +alt.culture.usenet +alt.culture.valddracula +alt.culture.vampires +alt.culture.virtual.oceania +alt.culture.vlad-dracula +alt.culture.warrior-women +alt.culture.welsh +alt.culture.wo9ld.culture +alt.culture.www +alt.culture.zaire +alt.culture.zambia +alt.culture.zippies +alt.curly-town +alt.current-affairs.muslims +alt.current-events +alt.current-events.amfb-explosion +alt.current-events.blizzard-of-93 +alt.current-events.blizzard-of-93.agff-cowards +alt.current-events.bosnia +alt.current-events.cc-news +alt.current-events.cebit +alt.current-events.cia.crack-dealing +alt.current-events.clinton +alt.current-events.clinton.whitewater +alt.current-events.earth-changes +alt.current-events.epidemics +alt.current-events.haiti +alt.current-events.korean-crisis +alt.current-events.massacre.columbine +alt.current-events.massacre.high-school +alt.current-events.net-abuse +alt.current-events.net-abuse.mongrel-mind +alt.current-events.net-abuse.spam +alt.current-events.russia +alt.current-events.terror-war +alt.current-events.ukraine +alt.current-events.usa +alt.cuss.usenet.fools +alt.cv.hzo.gbjepix.snuw.uqwh +alt.cx +alt.cxi.hk +alt.cyber2 +alt.cyber2.binaries +alt.cyber2.binaries.1960s +alt.cyber2.binaries.1970s +alt.cyber2.binaries.1980s +alt.cyber2.binaries.1990s +alt.cyber2.binaries.apps +alt.cyber2.binaries.games +alt.cyber2.binaries.mp3 +alt.cyber2.cola +alt.cyber2.de-bus +alt.cyber2.duh +alt.cyber2.lief +alt.cyberangels +alt.cybercafes +alt.cybergoth +alt.cyberjockey +alt.cyberpromo.com.spammers.revenge +alt.cyberpromo.spammers.revenge +alt.cyberpunk +alt.cyberpunk.chatsubo +alt.cyberpunk.cypher +alt.cyberpunk.movement +alt.cyberpunk.tech +alt.cyberspace +alt.cyberspace.construction.busines +alt.cyberspace.construction.business +alt.cyberspace.rebels +alt.cyberspace.rebels.kai.kai.kai +alt.cyberwitness +alt.cyberworld +alt.cymru +alt.cynicism +alt.cynics +alt.cypher +alt.cypherpunks +alt.cypherpunks.announce +alt.cypherpunks.social +alt.cypherpunks.technical +alt.cyphertube +alt.cz.b +alt.czapw.eps.bwnnoy.m.niweqpi.v +alt.d +alt.d.ae +alt.d.qu +alt.d.ucokxc +alt.dads-rights +alt.dads-rights.unmoderated +alt.damians.lovely.pants +alt.damonhill +alt.dan +alt.dan-southwick.hamster.duct-tape +alt.dan.loves.ninou +alt.dana-phillips +alt.dana-phillips.socks-he-uses +alt.dance-for-me +alt.dance.breaking +alt.dare.sucks +alt.darkside +alt.darkside.takes.over +alt.dash +alt.data +alt.databasux +alt.databasux.udp-udp-udp +alt.databasux.udp-udp-udp.die-die-die +alt.databasux.udp-udp-udp.die-die-die.blowinda-bunghole +alt.databasux.udp-udp-udp.die-die-die.gary-bunghole +alt.databasux.udp-udp-udp.die-die-die.gary-bunhole +alt.databasux.udp-udp-udp.die-die-die.kotagor-assholes +alt.databasux.udp-udp-udp.die-die-die.sergi-bunghole +alt.date-rapist.jay-denebeim +alt.dating.uk.north-west +alt.dating.uk.south-east +alt.dave-wheeler.usenet.troll +alt.dave.loves.bj +alt.david +alt.david-guntner.die.die.die +alt.david.is.an.idiot +alt.david.lawrence.no.right +alt.david.lawrence.tale.censor.censor.censor +alt.dbs.canada +alt.dbs.echostar +alt.dbs.echostar.hack +alt.dbs.primestar +alt.dcom.slip-emulators +alt.dcom.telecom +alt.dcom.telecom.ip +alt.dcom.telecom.radius +alt.ddd.ddd +alt.de.maxwell +alt.de.mexwall +alt.dead.porn.stars +alt.deadmolly.woodchipper +alt.dear.whitehouse +alt.death +alt.debord.collectors +alt.december +alt.deepfix +alt.deism +alt.delete.this.newsgroup +alt.dementia +alt.demogroups +alt.demogroups.paranoids +alt.dentella +alt.deposit +alt.depressed.as.fuck +alt.desert +alt.desert-storm +alt.desert.restoration +alt.design.graphics +alt.design.product +alt.despair +alt.despair3 +alt.destroy.microsoft +alt.destroy.ssg +alt.destroy.the.christian.coaltiion +alt.destroy.the.earth +alt.destroy.the.internet +alt.dev.null +alt.developers.realestate +alt.devilbunnies +alt.dgi +alt.diablo-rh +alt.diablo.rh +alt.diamonds +alt.diamonds.marketplace +alt.dick-weasel.michael-zander +alt.dick-weasel.phil-oliver +alt.dicuss.test +alt.digi +alt.digitiser +alt.digitiser.bigflaps +alt.digitiser.binaries +alt.digitiser.config +alt.digitiser.digi-98boyz +alt.digitiser.fools.fools.fools +alt.digitiser.hashdigi +alt.digitiser.moderated +alt.digitiser.mr-t +alt.digitiser.nick-mooney.we.cuss.him.bad +alt.digitiser.ottar +alt.digitiser.snakes +alt.digitiser.spoon-fetish +alt.digitiser.sucks.cheesy.nobs +alt.digitiser.whinging-kids +alt.dingodebate +alt.dinkle-dance +alt.dinosaur +alt.dipshit.montgomery-wood +alt.dis.information +alt.disability.blind.social +alt.disasters.aviation +alt.disasters.dean-stark +alt.disasters.drought +alt.disasters.earthquake +alt.disasters.misc +alt.disasters.planning +alt.discordia +alt.discordian +alt.discovery +alt.discrimination +alt.discuss.4-webtv +alt.discuss.about.gozilla +alt.discuss.announce +alt.discuss.config +alt.discuss.convention +alt.discuss.family.talk +alt.discuss.gay +alt.discuss.genealogy +alt.discuss.god-talk.catholic +alt.discuss.homepage +alt.discuss.html +alt.discuss.improve.webtv +alt.discuss.katzenjammer +alt.discuss.mpegs +alt.discuss.n2play +alt.discuss.native-american +alt.discuss.phreaking +alt.discuss.programming.html +alt.discuss.sex.pics +alt.discuss.sex.pics.asian +alt.discuss.sex.pics.lesbians +alt.discuss.singles +alt.discuss.test +alt.discuss.webtv.hacking +alt.discuss.webtv.mafia +alt.discuss.webtv.tricks +alt.discuss.webtv.users +alt.discuss.webtv.watchtower +alt.discuss.webtvplus +alt.discuss.young-at-heart +alt.discussioni.citta.genova +alt.discussioni.cretine +alt.discussioni.droghe +alt.discussioni.figa-gratis +alt.discussioni.fogne +alt.discussioni.intelligenti +alt.discussioni.vittoriosgarbi +alt.disgusting.stories.my-imagination +alt.dislocated.ass +alt.disney +alt.disney.beanies +alt.disney.beauty+beast +alt.disney.beautybeast +alt.disney.collecting +alt.disney.criticism +alt.disney.cruise +alt.disney.dca +alt.disney.dinseyland +alt.disney.disneyland +alt.disney.disneyworld +alt.disney.imagineering +alt.disney.secrets +alt.disney.sucks +alt.disney.tech +alt.disney.vacation-club +alt.disowned.by.his.parents.jay-denebeim +alt.dita +alt.divination +alt.dj +alt.dj.virtual-turntables +alt.djrud.mxttfm.ywj +alt.dk +alt.dk.helbred.handicap +alt.dk.katolik +alt.dk.psykologi.moderated +alt.dk.sjat +alt.dk.snak +alt.dk.warez +alt.dkwtmva +alt.dl.wj.pt.u.dp.n +alt.dmc +alt.dnarsh +alt.do-not +alt.do-not.and-i-mean-that +alt.do-not.and-i-mean-that.ever-post-here +alt.do-not.and-i-mean-that.ever-post-here.or-iwill-be-pissed +alt.do-not.and-i-mean-that.ever-post-here.or-iwill-be-pissed.and-willbe-forced +alt.do.skasowania +alt.dobbins.milkbaby +alt.dodo.bergman.binaries.vcd +alt.dodo.bergman.binaries.vcd.d +alt.dog.cock.in.mouth.jay-denebeim +alt.doki +alt.dolcett +alt.domain-names.disputes +alt.domain-names.forsale +alt.domain-names.registries +alt.domain-names.wanted +alt.donny +alt.dont-ask-dont-tell.peter-thorpe +alt.dont.get.even.get.odd +alt.doobry +alt.doomsday.machine +alt.dork.coder1 +alt.dorks +alt.dot.dot.dot.lets.use.square.brackets.in.cascades +alt.dotnet.discussion +alt.doug-bashford.spank.spank.spank +alt.dragon-net +alt.dragons-inn +alt.dratu +alt.drc +alt.drdoom +alt.dreams +alt.dreams.castaneda +alt.dreams.edgar-cayce +alt.dreams.impero.nascosto +alt.dreams.lucid +alt.dreams.lucid.entities +alt.dreams.mythic +alt.dreams.prophetic +alt.dreams.recurring +alt.dreams.sexual +alt.dreams.toltec +alt.drinks +alt.drinks.beer +alt.drinks.irish-whiskey +alt.drinks.jolt +alt.drinks.kool-aid +alt.drinks.mtn.dew +alt.drinks.scotch-whisky +alt.drinks.snapple +alt.drivers.wanted +alt.drugs +alt.drugs.abuse +alt.drugs.anticholinergics +alt.drugs.antihistamines +alt.drugs.busts +alt.drugs.caffeine +alt.drugs.caffeine.ctl +alt.drugs.cannabis.nl +alt.drugs.chemistry +alt.drugs.cocaine +alt.drugs.codeine +alt.drugs.crack +alt.drugs.culture +alt.drugs.cypher +alt.drugs.dare-sucks +alt.drugs.datura +alt.drugs.dealers.playground.bert-hoff +alt.drugs.dmt +alt.drugs.dmx +alt.drugs.drano +alt.drugs.drug-testing +alt.drugs.dxm +alt.drugs.dxm.enema.enema.enema +alt.drugs.ecstasy +alt.drugs.frogbutt +alt.drugs.ghb +alt.drugs.hard +alt.drugs.hard.gary +alt.drugs.hard.grey +alt.drugs.hard.harryworld +alt.drugs.hard.noise +alt.drugs.hashish +alt.drugs.heroin +alt.drugs.jaguar +alt.drugs.jay-denebeim +alt.drugs.ketamine +alt.drugs.kim67 +alt.drugs.leri +alt.drugs.lsd +alt.drugs.melatonin +alt.drugs.mescaline +alt.drugs.meth +alt.drugs.morphine +alt.drugs.mushrooms +alt.drugs.nitrous +alt.drugs.opium +alt.drugs.pcp +alt.drugs.pot +alt.drugs.pot.cultivation +alt.drugs.pot.cultivation.hydroponics +alt.drugs.pot.cultivation.no-spooks +alt.drugs.pot.hydro +alt.drugs.psychedelics +alt.drugs.psychedelics.dmt +alt.drugs.psychedelics.moderated +alt.drugs.religon +alt.drugs.rfg +alt.drugs.salvia +alt.drugs.sedahdrol +alt.drugs.trip-reports +alt.drugs.uk +alt.drugs.uk-shroommap +alt.drugs.usenet +alt.drugs.valium +alt.drugs.viagra +alt.drugs.webtv +alt.drumcorps +alt.drunk.frog.frogbutt +alt.drunken.bastards +alt.drunken.bastards.camp-gumby +alt.drunken.bastards.cypher +alt.drunken.bastards.richard-healey +alt.drunken.bastards.ruediger-landmann +alt.drutasi.miebened.yaj +alt.drwho +alt.drwho.creative +alt.drwho.creative.ia +alt.dry.w.dl.moh.w.ujwrf.opp +alt.dss +alt.dss.hack +alt.dss.tech +alt.dtm.dynarc +alt.duab +alt.duck.quack.quack.quack +alt.dude +alt.duffman.was.here +alt.duh +alt.duh-ceichels +alt.dumbass.hex-troll +alt.dumbass.tim-thorne +alt.dumbfucks.troll-inc +alt.dumpster +alt.dur.dusagg-oldgits +alt.dur.fortran-is-evil +alt.dur.general +alt.dur.maxwell +alt.dur.mexwall +alt.dur.test +alt.dutch.eppie +alt.dvbo.xnhqf.fj.v +alt.dvcq +alt.dvd.video +alt.dvhsfc.rv +alt.dwjo.xnvf.fcolsy +alt.dwkw +alt.dx.tropical +alt.dy.l.kgt +alt.e-mail +alt.e-mail.lists +alt.e-smith.documentation.fr +alt.e.csseerr.b.ne.sn.x.vp.oly.s +alt.e.gxrkj.ke.i.s.beb.uq.leapp.gjhoqzjc +alt.e.n.vr +alt.e.p.zk.uu.knhldt.eyureqatr +alt.e.t.i.kz.us.lhodm.nh.e.lngjg.ddow +alt.e.t.m +alt.e.x.p +alt.earth +alt.earth.confederation +alt.earth.crisis +alt.earth.system.science +alt.earth_summit +alt.eb.jm +alt.ebay.sucks +alt.ebonics.b.fun.yo.yo.yo +alt.ecbl.ws.l.h.h.bucyx.kppnqg.unbk +alt.echange.visa.d +alt.eckankar +alt.ecommerce +alt.ecommerce.intershop +alt.economics.austrian-school +alt.economics.miroslav-verbic +alt.edgar +alt.education +alt.education.alternative +alt.education.bangkok +alt.education.bangkok.databases +alt.education.bangkok.planning +alt.education.bangkok.research +alt.education.bangkok.student +alt.education.bangkok.theory +alt.education.business +alt.education.disabled +alt.education.distance +alt.education.distance.teaching +alt.education.email-project +alt.education.higher.stu-affairs +alt.education.home-school +alt.education.home-school.christian +alt.education.home-school.disabilities +alt.education.ib +alt.education.ib.phil +alt.education.industry.comp +alt.education.lancing +alt.education.management +alt.education.nontrad-degree +alt.education.research +alt.education.student.government +alt.education.tip +alt.education.university +alt.education.university.vision2020 +alt.ee.no.s.f.q +alt.egb.fzdlbpo.ztm.qssk.io +alt.egyptians.copts +alt.eh.fd.te.t +alt.eif +alt.ekce +alt.electronics +alt.electronics.analog.vlsi +alt.electronics.manufacture.circuitboard +alt.electronics.maplin-electronics +alt.elf-chicks.rule +alt.ellenbrook +alt.elmuf.qycr.pfxv.i +alt.elpigo +alt.eluyegxvgg.yv.l.cpe.kryyef +alt.elvis +alt.elvis.impersonators +alt.elvis.king +alt.elvis.sighting +alt.emcct.s.l +alt.emergency.services.dispatcher +alt.empire.of.perv +alt.empire.of.perv.perv +alt.empire.of.perv.perv.perv +alt.empire.of.perv.retard-emmoth +alt.empire.of.perv.swnet.diverse +alt.employees.compusa +alt.emulator.bleem +alt.emulators +alt.emulators.amiga +alt.emulators.classic-arcade +alt.emulators.freemware +alt.emulators.ibmpc.apple2 +alt.emulators.uae +alt.emusic +alt.energy.automobile +alt.energy.high-voltage +alt.energy.homepower +alt.energy.hydrogen +alt.energy.nuclear +alt.energy.over-unity +alt.energy.renewable +alt.engineering +alt.engineering.electrical +alt.engineering.electrical.jobs +alt.engineering.fire-alarm +alt.engineering.fire-protection +alt.engineering.maintenance +alt.engineering.nuclear +alt.england.sux.scotland.and.wales.rule.the.world +alt.england.sux.wales.and.scotland.rule.the.world +alt.english.usage +alt.engr +alt.engr.explosives +alt.ensign.wesley.die.die.die +alt.entertainment.king-of-the-hill +alt.entrepreneurs +alt.enve +alt.enviro-p2 +alt.environment-p2 +alt.environment.collapse +alt.environment.p2 +alt.eo +alt.eo.m +alt.eod.tech +alt.ep.un.x.esy.l.mzm.mg.lpmfdz +alt.epix.sucks +alt.equamour.lunatic +alt.equestrian.draft +alt.equestrian.wild-mustangs +alt.er.sex +alt.er.sexn +alt.eric-the-frenchie +alt.ernic +alt.erotica +alt.erotica.fettish +alt.espn.sucks +alt.espresso-fiction +alt.etc.passwd +alt.etext +alt.etpoezo.mwmd +alt.eunuchs.questions +alt.euro.hydro +alt.euro2000.nl +alt.evil +alt.evil.hfw-dipshits +alt.evy +alt.ex-con.john-grubor +alt.exchange.visa.d +alt.exe +alt.exhibitionism +alt.existence.is.futile.rob.cypher.is.your.only.hope +alt.exotic-music +alt.exploding-monkey +alt.exploding-monkey.rob-cypher +alt.export.worldwide +alt.extramarital.affair +alt.extropians +alt.extropians.forbidden +alt.ezines +alt.ezines.rad +alt.ezines.set +alt.ezines.spire +alt.f.ilm.c.vyq.twtg.nj.nbbqs.x +alt.f.otqg.g.ut.ruisclbtj +alt.f.w.gt.ksv.akgq +alt.f.yuxz.mpsqlmfzdb +alt.fa.tim-henman +alt.fabioefiamma +alt.face.is.discusting.zit.covered.mess.montgomery-wood +alt.fag-lamer.tj.spark-miller.fuckhead +alt.faires.renaissance +alt.fairs.renaissance +alt.fairs.renaissance.livingchess +alt.falconry +alt.falseidols.com.damian.spriggs.uses.freebsd +alt.familiy-names.harperink +alt.family-name.goodpaster +alt.family-name.luquette +alt.family-name.skomp +alt.family-name.snider +alt.family-name.stokley +alt.family-name.walter +alt.family-name.whitlow +alt.family-names +alt.family-names.abair +alt.family-names.achterhoff +alt.family-names.adair +alt.family-names.anderson +alt.family-names.armand +alt.family-names.bever +alt.family-names.bicknell +alt.family-names.boddie +alt.family-names.boettcher +alt.family-names.broyles +alt.family-names.brujo +alt.family-names.casada +alt.family-names.cavolack +alt.family-names.cavolick +alt.family-names.charnock +alt.family-names.chumbley +alt.family-names.clark +alt.family-names.clinton +alt.family-names.cole +alt.family-names.collingridge +alt.family-names.collins +alt.family-names.comito +alt.family-names.cooper +alt.family-names.cronkite +alt.family-names.crusan +alt.family-names.cullop +alt.family-names.cypher +alt.family-names.dailey +alt.family-names.daily +alt.family-names.daley +alt.family-names.daly +alt.family-names.daniels +alt.family-names.daugherty +alt.family-names.davis +alt.family-names.deveau +alt.family-names.dewald +alt.family-names.dews +alt.family-names.doolittle +alt.family-names.duff +alt.family-names.dunnegan +alt.family-names.durman +alt.family-names.eichenberg +alt.family-names.elliott +alt.family-names.engler +alt.family-names.etenbaum +alt.family-names.forsberg +alt.family-names.frught +alt.family-names.gabriel +alt.family-names.ganson +alt.family-names.gates +alt.family-names.gee +alt.family-names.gendreau +alt.family-names.goodpaster +alt.family-names.gould +alt.family-names.gramling +alt.family-names.hackley +alt.family-names.hangnail +alt.family-names.hemson +alt.family-names.henderson +alt.family-names.hendren +alt.family-names.hendricks +alt.family-names.higby +alt.family-names.hittle +alt.family-names.hodges +alt.family-names.hoffman +alt.family-names.huband +alt.family-names.hughes +alt.family-names.isbell +alt.family-names.jackson +alt.family-names.jacobi +alt.family-names.jacoby +alt.family-names.jansen +alt.family-names.jenkins +alt.family-names.jensen +alt.family-names.johnson +alt.family-names.jones +alt.family-names.julian +alt.family-names.kahle +alt.family-names.konde +alt.family-names.kressel +alt.family-names.lane +alt.family-names.leger +alt.family-names.lenard +alt.family-names.lloyd +alt.family-names.lucas +alt.family-names.luquette +alt.family-names.mac_gregor +alt.family-names.makemson +alt.family-names.manson +alt.family-names.mars +alt.family-names.martin +alt.family-names.mattix +alt.family-names.meyer +alt.family-names.miller +alt.family-names.muellerleile +alt.family-names.norton +alt.family-names.oneill +alt.family-names.palmjob +alt.family-names.pruitt +alt.family-names.putnam +alt.family-names.raynes +alt.family-names.reedy +alt.family-names.rice +alt.family-names.rosenthal +alt.family-names.roush +alt.family-names.schauss +alt.family-names.schleck +alt.family-names.shouse +alt.family-names.shows +alt.family-names.sims +alt.family-names.skomp +alt.family-names.smith +alt.family-names.snider +alt.family-names.soderberg +alt.family-names.speirs +alt.family-names.starr +alt.family-names.stephenson +alt.family-names.stevens +alt.family-names.strong +alt.family-names.supak +alt.family-names.teachout +alt.family-names.thijssen +alt.family-names.thompson +alt.family-names.tietsoort +alt.family-names.treloar +alt.family-names.vanminnen +alt.family-names.vannorman +alt.family-names.varner +alt.family-names.von_gausig +alt.family-names.warren +alt.family-names.webb +alt.family-names.welch +alt.family-names.weldon +alt.family-names.wilhite +alt.family-names.wood +alt.family-names.wooten +alt.family-names.wright +alt.family-names.xemblinosky +alt.family-names.xemblinosky.yes.its.a.real.name +alt.family-names.yeltsin +alt.family-names.yu +alt.family-names.zadvinskis +alt.family-names.zerbe +alt.family.mark +alt.family.robinson +alt.family.santangelo +alt.fan +alt.fan-chris-roe +alt.fan-club.horrorcomix +alt.fan.555rgne +alt.fan.TinyTIM +alt.fan.aaron-carter +alt.fan.aaron-cypher +alt.fan.aavfff +alt.fan.abbie-hoffman +alt.fan.abstinence +alt.fan.actors +alt.fan.actors.dead +alt.fan.adam-allard +alt.fan.adam-sandler +alt.fan.adam-walshs.severed-head +alt.fan.adam-wurtzel +alt.fan.addams.family +alt.fan.addams.pugsley +alt.fan.addams.wednesday +alt.fan.adie +alt.fan.adjective-army +alt.fan.admiral-twin +alt.fan.adolf-hitler +alt.fan.adolf-hitler.and.crumpets +alt.fan.afda +alt.fan.ahmet-zappa +alt.fan.aimee-lortskel +alt.fan.air +alt.fan.akaroth +alt.fan.alan-keyes +alt.fan.alan-shearer +alt.fan.alan.tam +alt.fan.alans +alt.fan.alare +alt.fan.alarm-clocks +alt.fan.albedo +alt.fan.albert-silverman +alt.fan.albert.bolink +alt.fan.alchemist +alt.fan.ali-g.booyashaka +alt.fan.alicia-silverstone +alt.fan.alicia-slvrstone +alt.fan.all-blacks +alt.fan.all-things-weird +alt.fan.alley-baggett +alt.fan.allman-brothers +alt.fan.alt.digitiser +alt.fan.aly-walansky +alt.fan.alyssa-milano +alt.fan.ami-dolenz +alt.fan.amiga-action.die.die.die +alt.fan.amiga-power +alt.fan.amis +alt.fan.amy-fisher +alt.fan.amy.jo.johnson +alt.fan.an.spinal-tap +alt.fan.ana-voog +alt.fan.ananova +alt.fan.andrew-lloyd-webber +alt.fan.andrew.fenton +alt.fan.andrew.lloyd-webber +alt.fan.andy-j-partridge +alt.fan.andy-kaufman +alt.fan.andy-kyle +alt.fan.andy-mabbett +alt.fan.angylina +alt.fan.anita.mui +alt.fan.anka-radakovich +alt.fan.anna-nicole-smith +alt.fan.anna-paquin +alt.fan.anna.nicole.smith +alt.fan.annie-lennox +alt.fan.anthony-gaza +alt.fan.antti +alt.fan.arale +alt.fan.arctic.diving-ducks +alt.fan.arek.paterek +alt.fan.ariana +alt.fan.arianarichards +alt.fan.ariel +alt.fan.arnold.buzdygan +alt.fan.art-bell +alt.fan.artelevision +alt.fan.arthur.bouwman.fucks.sheeps +alt.fan.ashley-judd +alt.fan.ashley-lauren +alt.fan.ashlyn-gere +alt.fan.asia-argento +alt.fan.asia-carrera +alt.fan.asprin +alt.fan.atico.manca +alt.fan.audrey-hepburn +alt.fan.austin-powers +alt.fan.authors.stephen-king +alt.fan.ayal-wolf +alt.fan.bababooey +alt.fan.babe-ruth +alt.fan.backstreet.boys +alt.fan.bahamut-zero +alt.fan.banacek +alt.fan.barbara-crampton +alt.fan.barbra.streisand +alt.fan.barry-manilow +alt.fan.bas +alt.fan.battlefield-earth +alt.fan.battlefieldearth +alt.fan.battletank +alt.fan.beable +alt.fan.beautiful-brat4u +alt.fan.beavis-n-basshole +alt.fan.beekay +alt.fan.beep +alt.fan.belldandy +alt.fan.bemsha +alt.fan.ben-adams +alt.fan.ben-camp +alt.fan.ben-morss +alt.fan.ben-polen +alt.fan.berlusconi +alt.fan.berry-smit +alt.fan.bertie-the-bunyip +alt.fan.bettie-page +alt.fan.bettina.fink +alt.fan.bettino-craxi +alt.fan.bgcrisis +alt.fan.bgcrisis.hentai +alt.fan.bgcrisis.linna +alt.fan.bgcrisis.nene +alt.fan.big-funchy +alt.fan.bill-bell +alt.fan.bill-clinton +alt.fan.bill-fenner +alt.fan.bill-gates +alt.fan.bill-nye +alt.fan.bill.cheek +alt.fan.billie-piper +alt.fan.billy-idol +alt.fan.billy.gilman +alt.fan.billynose +alt.fan.binaries.pictures.plaatjes +alt.fan.binaries.theadultchannel +alt.fan.bjork +alt.fan.blabla +alt.fan.blackskull +alt.fan.blade-runner +alt.fan.blair-witch +alt.fan.blakes-7 +alt.fan.blessid-union +alt.fan.bloemkool +alt.fan.blues-brothers +alt.fan.bob +alt.fan.bob-abraham +alt.fan.bob-dole +alt.fan.bob-jensen +alt.fan.bob-larson +alt.fan.bob.abraham +alt.fan.bobby-sherman +alt.fan.bobo +alt.fan.bobo-vieri +alt.fan.bonzo-dog +alt.fan.brad-pitt +alt.fan.brad.tripp +alt.fan.brady-bunch +alt.fan.brandon-cotton +alt.fan.bread.whole-wheat +alt.fan.brent-gore +alt.fan.brent-spiner +alt.fan.brian-ellis +alt.fan.bridget +alt.fan.bridget-maasland +alt.fan.british-accent +alt.fan.british-actors +alt.fan.britney-spears +alt.fan.britney-spears.anal-sex +alt.fan.britney-spears.binaries +alt.fan.britney-spears.blow-job +alt.fan.britney-spears.boob-job +alt.fan.britney-spears.sex +alt.fan.broken-gizmo +alt.fan.brooke-shields +alt.fan.brrd +alt.fan.bruce-campbell +alt.fan.bruce-kettler +alt.fan.bruce-willis +alt.fan.bryan.shea +alt.fan.bubba +alt.fan.buckaroo-banzai +alt.fan.buddy-holly +alt.fan.bugtown +alt.fan.buster-n-missy +alt.fan.buttxxx +alt.fan.caesar-geezer +alt.fan.calista-flockhart +alt.fan.calvin-schenkel +alt.fan.cameron-diaz +alt.fan.camille-paglia +alt.fan.cappy-hamper +alt.fan.capt-beefheart +alt.fan.capt-tractor +alt.fan.carl-johnson +alt.fan.carly-shea +alt.fan.carmen-electra +alt.fan.carmen-grasso +alt.fan.carolyn-dawn-johnson +alt.fan.cat-gonk +alt.fan.cate-blanchett.binaries +alt.fan.cathybarry +alt.fan.cattlovrr +alt.fan.catwoman +alt.fan.cbc.urban-peasant +alt.fan.cecil-adams +alt.fan.cfny +alt.fan.charles-manson +alt.fan.charlie.liberal +alt.fan.chastity +alt.fan.chaz.beastiality +alt.fan.chaz.jerry +alt.fan.che-guevara +alt.fan.checkmate +alt.fan.chin-slaves +alt.fan.china +alt.fan.chinese-pop +alt.fan.chloe-vevrier +alt.fan.chocobo +alt.fan.chow-yun-fat +alt.fan.chris-buckley +alt.fan.chris-cornell +alt.fan.chris-elliott +alt.fan.chris-morris +alt.fan.chris-randall +alt.fan.chris-stokoe +alt.fan.chris.abraham +alt.fan.christi +alt.fan.christina-aguilera +alt.fan.christina-applegate +alt.fan.christina-ricci +alt.fan.christopher.walken +alt.fan.christy-canyon +alt.fan.christy-turlington +alt.fan.cisco +alt.fan.claire-danes +alt.fan.clara-bow +alt.fan.clare +alt.fan.classic.movies +alt.fan.cliff.at.ihop +alt.fan.clint-eastwood +alt.fan.clintf +alt.fan.cock-sucking +alt.fan.coco-lee +alt.fan.coli2 +alt.fan.colleen.card.hot.hot.hot +alt.fan.conan-obrien +alt.fan.conlan +alt.fan.conwaysteckler +alt.fan.cooler +alt.fan.coondog +alt.fan.cootey +alt.fan.corey-feldman +alt.fan.countires.afghanistan +alt.fan.countires.canada +alt.fan.countires.england +alt.fan.countires.france +alt.fan.countires.netherlands +alt.fan.countires.russia +alt.fan.countries.afghanistan +alt.fan.countries.albania +alt.fan.countries.algeria +alt.fan.countries.andorra +alt.fan.countries.angola +alt.fan.countries.anguilla +alt.fan.countries.antigua +alt.fan.countries.argentina +alt.fan.countries.armenia +alt.fan.countries.aruba +alt.fan.countries.australia +alt.fan.countries.austria +alt.fan.countries.azerbaijan +alt.fan.countries.bahamas +alt.fan.countries.bahrain +alt.fan.countries.bangladesh +alt.fan.countries.barbados +alt.fan.countries.belarus +alt.fan.countries.belgium +alt.fan.countries.belize +alt.fan.countries.benin +alt.fan.countries.bermuda +alt.fan.countries.bhutan +alt.fan.countries.bolivia +alt.fan.countries.bosnia +alt.fan.countries.botswana +alt.fan.countries.brazil +alt.fan.countries.brunei +alt.fan.countries.bulgaria +alt.fan.countries.burkina-faso +alt.fan.countries.burma +alt.fan.countries.burundi +alt.fan.countries.cambodia +alt.fan.countries.cameroon +alt.fan.countries.canada +alt.fan.countries.cape-verde +alt.fan.countries.cayman-islands +alt.fan.countries.chad +alt.fan.countries.chile +alt.fan.countries.china +alt.fan.countries.colombia +alt.fan.countries.comoros +alt.fan.countries.congo +alt.fan.countries.costa-rica +alt.fan.countries.croatia +alt.fan.countries.cuba +alt.fan.countries.czech-republic +alt.fan.countries.denmark +alt.fan.countries.djibouti +alt.fan.countries.dominica +alt.fan.countries.dominican-republic +alt.fan.countries.ecuador +alt.fan.countries.egypt +alt.fan.countries.el-salvador +alt.fan.countries.england +alt.fan.countries.equatorial-guinea +alt.fan.countries.estonia +alt.fan.countries.fiji +alt.fan.countries.finland +alt.fan.countries.france +alt.fan.countries.gabon +alt.fan.countries.gambia +alt.fan.countries.georgia +alt.fan.countries.germany +alt.fan.countries.ghana +alt.fan.countries.greece +alt.fan.countries.grenada +alt.fan.countries.guadeloupe +alt.fan.countries.guatemala +alt.fan.countries.guinea +alt.fan.countries.guinea-bissau +alt.fan.countries.guyana +alt.fan.countries.haiti +alt.fan.countries.honduras +alt.fan.countries.hungary +alt.fan.countries.iceland +alt.fan.countries.india +alt.fan.countries.indonesia +alt.fan.countries.iran +alt.fan.countries.iraq +alt.fan.countries.ireland +alt.fan.countries.ireland.northern +alt.fan.countries.israel +alt.fan.countries.italy +alt.fan.countries.ivory-coast +alt.fan.countries.jamaica +alt.fan.countries.japan +alt.fan.countries.jordan +alt.fan.countries.kazakhstan +alt.fan.countries.kenya +alt.fan.countries.kiribati +alt.fan.countries.kosovo +alt.fan.countries.kuwait +alt.fan.countries.kuwaito +alt.fan.countries.kyrgyzstan +alt.fan.countries.labanon +alt.fan.countries.laos +alt.fan.countries.latvia +alt.fan.countries.lebanon +alt.fan.countries.lesotho +alt.fan.countries.liberia +alt.fan.countries.libya +alt.fan.countries.liechtenstein +alt.fan.countries.lithuania +alt.fan.countries.luxembourg +alt.fan.countries.macedonia +alt.fan.countries.madagascar +alt.fan.countries.malasia +alt.fan.countries.malawi +alt.fan.countries.malaysia +alt.fan.countries.maldives +alt.fan.countries.maldova +alt.fan.countries.mali +alt.fan.countries.malta +alt.fan.countries.martinique +alt.fan.countries.mauritania +alt.fan.countries.mauritius +alt.fan.countries.mexico +alt.fan.countries.moldova +alt.fan.countries.monaco +alt.fan.countries.mongolia +alt.fan.countries.montserrat +alt.fan.countries.morocco +alt.fan.countries.mozambique +alt.fan.countries.nambia +alt.fan.countries.nauru +alt.fan.countries.nepal +alt.fan.countries.netherlands +alt.fan.countries.new-zealand +alt.fan.countries.niger +alt.fan.countries.nigeria +alt.fan.countries.niue +alt.fan.countries.north-korea +alt.fan.countries.norway +alt.fan.countries.oman +alt.fan.countries.pakistan +alt.fan.countries.palau +alt.fan.countries.palestine +alt.fan.countries.panama +alt.fan.countries.papua-new-guinea +alt.fan.countries.paraguay +alt.fan.countries.peru +alt.fan.countries.phillippines +alt.fan.countries.poland +alt.fan.countries.portugal +alt.fan.countries.qatar +alt.fan.countries.romania +alt.fan.countries.russia +alt.fan.countries.rwanda +alt.fan.countries.saint-kitts +alt.fan.countries.saint-lucia +alt.fan.countries.saint-vincent +alt.fan.countries.san-marino +alt.fan.countries.saudi-arabia +alt.fan.countries.scotland +alt.fan.countries.senegal +alt.fan.countries.seychelles +alt.fan.countries.singapore +alt.fan.countries.slovakia +alt.fan.countries.slovenia +alt.fan.countries.south-africa +alt.fan.countries.south-korea +alt.fan.countries.spain +alt.fan.countries.sweden +alt.fan.countries.switzerland +alt.fan.countries.syria +alt.fan.countries.togo +alt.fan.countries.tonga +alt.fan.countries.tunisia +alt.fan.countries.turkey +alt.fan.countries.tuvalu +alt.fan.countries.uganda +alt.fan.countries.ukraine +alt.fan.countries.united-arab-emirates +alt.fan.countries.uruguay +alt.fan.countries.uzbekistan +alt.fan.countries.vanuatu +alt.fan.countries.vatican-city +alt.fan.countries.venezuela +alt.fan.countries.vietnam +alt.fan.countries.wales +alt.fan.countries.western-sahara +alt.fan.countries.yemen +alt.fan.countries.yugoslavia +alt.fan.countries.zaire +alt.fan.countries.zambia +alt.fan.countries.zimbabwe +alt.fan.courteney-cox +alt.fan.courtney-love +alt.fan.crack-the-sky +alt.fan.created-worlds +alt.fan.crispin-glover +alt.fan.cristi +alt.fan.cristian-redferne +alt.fan.croats +alt.fan.cronan-thompson +alt.fan.cropcircles +alt.fan.culo +alt.fan.culo.bjork +alt.fan.culo.lega +alt.fan.culo.max_adamo +alt.fan.culo.vittoriosgarbi +alt.fan.cult-dead-cow +alt.fan.cult-evil-dave +alt.fan.custard-men +alt.fan.cv +alt.fan.cyberchicken +alt.fan.cybill-shepherd +alt.fan.cybill.shepherd +alt.fan.cyndi-lauper +alt.fan.cypher +alt.fan.cypher.cypher.cypher +alt.fan.cypher.owns.rec.arts.tv.mst3k.misc +alt.fan.d-hamilton +alt.fan.daeron +alt.fan.daisy-fuentes +alt.fan.dame-mildred +alt.fan.dan-jimenez +alt.fan.dan-quayle +alt.fan.dan-scott +alt.fan.dan-shaolin +alt.fan.danica-mckellar +alt.fan.danica.mckellar +alt.fan.danielle-fishel +alt.fan.danielle-myuutsu +alt.fan.danielle.myuutsu +alt.fan.dank.strut +alt.fan.dankitti +alt.fan.danni-ashe +alt.fan.dannii-minogue +alt.fan.danny.gatton +alt.fan.daphnes-corner +alt.fan.dave +alt.fan.dave-foley +alt.fan.dave-taira +alt.fan.dave_barry +alt.fan.david-bowie +alt.fan.david-cassidy +alt.fan.david-duchovny +alt.fan.david-gallagher +alt.fan.david-peel +alt.fan.david-reynolds.alien.vampire.flonk.flonk.flonk +alt.fan.david-reynolds.asswipe +alt.fan.david-reynolds.buttface +alt.fan.david-reynolds.fartknocker +alt.fan.david-reynolds.goatfucker +alt.fan.david-reynolds.wanker +alt.fan.david-starr +alt.fan.david.barker +alt.fan.david.duchovny +alt.fan.de-kast +alt.fan.dean-cain +alt.fan.dean-erickson +alt.fan.dean-stark +alt.fan.dean-stark.advice.legal +alt.fan.dean-stark.alcoholism +alt.fan.dean-stark.alt.peeves.ex-girlfriends +alt.fan.dean-stark.alt.support.migraines +alt.fan.dean-stark.alt.support.molestation +alt.fan.dean-stark.alt.tasteless.childhood +alt.fan.dean-stark.and.laura-lemay +alt.fan.dean-stark.apparatus +alt.fan.dean-stark.bed-wetting +alt.fan.dean-stark.broken.arm +alt.fan.dean-stark.brother.insane +alt.fan.dean-stark.brother.loves.cats +alt.fan.dean-stark.canceling +alt.fan.dean-stark.cant.own.gun +alt.fan.dean-stark.cant.play.piano.anymore +alt.fan.dean-stark.chips-ahoy +alt.fan.dean-stark.comp.lang.forth +alt.fan.dean-stark.conspiracy +alt.fan.dean-stark.cripple +alt.fan.dean-stark.cypher +alt.fan.dean-stark.death-threats +alt.fan.dean-stark.diaper-play +alt.fan.dean-stark.enclave +alt.fan.dean-stark.failed.photography.class +alt.fan.dean-stark.fast-typist +alt.fan.dean-stark.fired.from.novell +alt.fan.dean-stark.first.girlfriend +alt.fan.dean-stark.flying-saucer.hard-drives +alt.fan.dean-stark.garret +alt.fan.dean-stark.glock.owner.wanna-be +alt.fan.dean-stark.goths +alt.fan.dean-stark.hearing.voices +alt.fan.dean-stark.high-school.dropout +alt.fan.dean-stark.hourly-rate +alt.fan.dean-stark.insanity.is.hereditary +alt.fan.dean-stark.killfile.artist +alt.fan.dean-stark.kkk.member +alt.fan.dean-stark.laxative-abuse +alt.fan.dean-stark.lying +alt.fan.dean-stark.many.female.friends +alt.fan.dean-stark.mediocrity +alt.fan.dean-stark.memories +alt.fan.dean-stark.missing-kim +alt.fan.dean-stark.more-for-you +alt.fan.dean-stark.my-gang +alt.fan.dean-stark.nambla-member +alt.fan.dean-stark.no-dad.calling.in.sick +alt.fan.dean-stark.no-dad.do.mom.instead +alt.fan.dean-stark.no-dad.ouch.stop +alt.fan.dean-stark.no-dad.please.dont +alt.fan.dean-stark.no.dates.in.five.years +alt.fan.dean-stark.perpetual.victim +alt.fan.dean-stark.poor +alt.fan.dean-stark.professional.unemployed.writer +alt.fan.dean-stark.psychotic.little.wanker +alt.fan.dean-stark.punkchild +alt.fan.dean-stark.quality.assurance +alt.fan.dean-stark.ranting +alt.fan.dean-stark.ranting.endlessly +alt.fan.dean-stark.restraining.order +alt.fan.dean-stark.retromoderator +alt.fan.dean-stark.rmgroup-expert +alt.fan.dean-stark.scsi.not.ide +alt.fan.dean-stark.software.tester +alt.fan.dean-stark.spamming +alt.fan.dean-stark.stalk.stalk.stalk +alt.fan.dean-stark.stalking.victim +alt.fan.dean-stark.suitcase.of.pills +alt.fan.dean-stark.tech-writer.bad +alt.fan.dean-stark.vampyres +alt.fan.dean-stark.viscera +alt.fan.dean-stark.walking-papers +alt.fan.dean-stark.wheezing.chevy +alt.fan.dean-stark.white.cockade.reject +alt.fan.dean-stark.worth.his.salt +alt.fan.dean-stark.writing +alt.fan.dean-stark.writing.poorly +alt.fan.debbie.gibson +alt.fan.debi-diamond +alt.fan.debi.diamond +alt.fan.dejanews +alt.fan.del.charles +alt.fan.demon-local.sig-wars +alt.fan.den-van.outen +alt.fan.denise-richards +alt.fan.dennis-miller +alt.fan.department-of-meowing-and-violence +alt.fan.depeche-mode +alt.fan.derek.dugger +alt.fan.dermot-mulroney +alt.fan.devo +alt.fan.dexters-lab +alt.fan.diane-witt.hair.hair.hair +alt.fan.dice-man +alt.fan.digi +alt.fan.digimon +alt.fan.dima +alt.fan.dimitri-vulis +alt.fan.dirk-hine +alt.fan.dirk-pitt +alt.fan.dirty-whores +alt.fan.disguising.godiva +alt.fan.disney.afternoon +alt.fan.disney.gargoyles +alt.fan.dixie-chicks +alt.fan.dm +alt.fan.dmitri-vulis +alt.fan.doc-savage +alt.fan.doc-thompson +alt.fan.doctor.bashir.grind.thrust.drool +alt.fan.docwatson +alt.fan.doki +alt.fan.dolemite +alt.fan.dolly-buster +alt.fan.dominique +alt.fan.don-and-mike +alt.fan.don-cherry +alt.fan.don-imus +alt.fan.don-n-mike +alt.fan.don.baker-fupa +alt.fan.don.no-soul.simmons +alt.fan.donnas-nipples +alt.fan.doofer-mouse +alt.fan.dopefish +alt.fan.doron-sajet +alt.fan.doug-mackall +alt.fan.douglas-adams +alt.fan.douglas-adams.forty-two +alt.fan.dpk +alt.fan.dr-koehler +alt.fan.dr-pepper +alt.fan.dragonball +alt.fan.dragonball.us +alt.fan.dragonlance +alt.fan.dragonlance.italia +alt.fan.dragons +alt.fan.drew-barrymore +alt.fan.drew-carey +alt.fan.drmellow +alt.fan.dudikoff +alt.fan.dune +alt.fan.dunkahn +alt.fan.e-t-b +alt.fan.eaglewing +alt.fan.earl-curley +alt.fan.echo-johnson +alt.fan.ed-conrad +alt.fan.ed-wood +alt.fan.eddie-izzard +alt.fan.eddie.slupski +alt.fan.eddings +alt.fan.eddings.creative +alt.fan.eddings.erotica +alt.fan.edge102 +alt.fan.edward-furlong +alt.fan.edward.furlong +alt.fan.egon-schiele +alt.fan.eiffel65 +alt.fan.elchupacabra +alt.fan.elevator +alt.fan.elite +alt.fan.elite.project +alt.fan.ellen-degeneres +alt.fan.ellen.steketee +alt.fan.elrond.di.it-fan-culo +alt.fan.elton-john +alt.fan.elvis-costello +alt.fan.elvis-presley +alt.fan.emma-bunton +alt.fan.emmanuel-lewis.where.is.he.now +alt.fan.emmanuelle-beart +alt.fan.emmett-gulley +alt.fan.emo.philips +alt.fan.empee +alt.fan.enya +alt.fan.eric-cantona +alt.fan.erik +alt.fan.erik-mouse +alt.fan.erik.max.francis.is.mc2 +alt.fan.errol-flynn +alt.fan.esmeralda +alt.fan.eugene.novikov +alt.fan.eva-habermann +alt.fan.eva-ionesco.moderated +alt.fan.exotic-weapons +alt.fan.f-e-o +alt.fan.fabdisbabe +alt.fan.fabienne +alt.fan.fabio +alt.fan.fairuza-balk +alt.fan.faith.hill +alt.fan.fan +alt.fan.fan-man +alt.fan.father.flannigan +alt.fan.felix-p-thomas +alt.fan.femus +alt.fan.fenrir +alt.fan.fica +alt.fan.figment +alt.fan.finnish.booty.shakers +alt.fan.fiona-apple +alt.fan.firesgn-thtre +alt.fan.firesign-theatre +alt.fan.firked +alt.fan.flat-eric +alt.fan.flintstone.fred +alt.fan.fog +alt.fan.foobar +alt.fan.frank-dimant +alt.fan.frank-sinatra +alt.fan.frank-zappa +alt.fan.frank.mccoy +alt.fan.fransbauer +alt.fan.fratellibros +alt.fan.fred-perry +alt.fan.fucking +alt.fan.fucking-pigs +alt.fan.fucking.chickens.whilst.wearing.rubber.knickers +alt.fan.fucko.the +alt.fan.fugs +alt.fan.funky.buttlovin +alt.fan.funny.man +alt.fan.furry +alt.fan.furry.adult +alt.fan.furry.bleachers +alt.fan.furry.fleas +alt.fan.furry.moderated +alt.fan.furry.muck +alt.fan.furry.politics +alt.fan.furry.sny-windstrup +alt.fan.g-gordon-liddy +alt.fan.g-kontostanos +alt.fan.gabbi-glickman +alt.fan.gail-porter +alt.fan.games.chrono-trigger +alt.fan.garrynewman +alt.fan.gary-oldman +alt.fan.gary.johnson.control-freak +alt.fan.gary.spell +alt.fan.gburnore +alt.fan.geezer-seeger +alt.fan.gene-poole +alt.fan.gene-scott +alt.fan.geoduder +alt.fan.geoduder.rob-cypher.rip-off +alt.fan.geoff.miller +alt.fan.george-clooney +alt.fan.george-kennedy +alt.fan.george-maharis +alt.fan.george-michael +alt.fan.george-reeves +alt.fan.geri-halliwell +alt.fan.gg-allin +alt.fan.ggkay +alt.fan.gill-anderson +alt.fan.gillian-anderson +alt.fan.ginger-lynn +alt.fan.gloria-estefan +alt.fan.gloriamundi +alt.fan.gnarled-gnu-direct +alt.fan.goat +alt.fan.godzilla +alt.fan.goons +alt.fan.gordun +alt.fan.grady-ward +alt.fan.grand-vizier +alt.fan.grande-toro +alt.fan.graveyard +alt.fan.greaseman +alt.fan.greg-kinnear +alt.fan.greg-procter +alt.fan.greg_gardner +alt.fan.gregorsamsa +alt.fan.gryn +alt.fan.guk-dukat +alt.fan.gul-dukat +alt.fan.guusje +alt.fan.guybrush-the-troll +alt.fan.gwyn-paltrow +alt.fan.habanec +alt.fan.hall-and-oates +alt.fan.hannigan +alt.fan.hanson +alt.fan.hanson.die.die.die +alt.fan.hanson.discussion +alt.fan.hanson.sexuality-discussion +alt.fan.hanson.they-are-girls +alt.fan.hanson.www-hansonfans-org +alt.fan.happyvic +alt.fan.harlan-ellison +alt.fan.harrison-ford +alt.fan.harry-connick-jr +alt.fan.harry-potter +alt.fan.havawanks.downfall +alt.fan.hawaii-five-o +alt.fan.haye-lau +alt.fan.head-librarian +alt.fan.headkase +alt.fan.heather-donahue +alt.fan.heather-graham +alt.fan.heather-locklear +alt.fan.heavy-metal +alt.fan.hedgehog +alt.fan.heinlein +alt.fan.helen-hunt +alt.fan.helen-sewell +alt.fan.hell-flame-wars +alt.fan.hello-kitty +alt.fan.heman-shera +alt.fan.henry-rollins +alt.fan.hofstadter +alt.fan.holmes +alt.fan.horrorcomix +alt.fan.howard-stern +alt.fan.howard-stern.fartman +alt.fan.howard-stern.humor.suffering +alt.fan.howard-stern.jew.jew.jew +alt.fan.howard-stern.kip-kinkel.lovetoy +alt.fan.howard-stern.shit-pussy-negro +alt.fan.howard-stern.subtle-racism +alt.fan.hudson-leick +alt.fan.hydrocodone +alt.fan.icarus +alt.fan.icky-shuffle +alt.fan.icy-hotpoison +alt.fan.idiots-delight +alt.fan.il.maestro.re.del.bakkaglio +alt.fan.inspector-morse +alt.fan.isla-fisher +alt.fan.ivan +alt.fan.ivor-cutler +alt.fan.j-garofalo +alt.fan.jackie-chan +alt.fan.jackie-jokeman +alt.fan.jackie-tokeman +alt.fan.jacqie +alt.fan.jacque.merde +alt.fan.jadzia.dax.slug.slug.slug +alt.fan.jai-maharaj +alt.fan.james-bond +alt.fan.james-burke +alt.fan.james-clavell +alt.fan.james-fearon.14-years-old +alt.fan.james-koput.net-god +alt.fan.james-rothaar +alt.fan.james-worthington +alt.fan.james.cameron +alt.fan.james.walker.die.die.die +alt.fan.jammo +alt.fan.jan +alt.fan.jane-krankowski +alt.fan.janet-jackson +alt.fan.janina-frostell +alt.fan.janis +alt.fan.jason-currell +alt.fan.jason-miller +alt.fan.jason.black +alt.fan.jay-denebeim +alt.fan.jay-leno +alt.fan.jay.denebeim +alt.fan.jean-auel +alt.fan.jean-harlow +alt.fan.jean-tiberi +alt.fan.jean_auel +alt.fan.jeff-goldblum +alt.fan.jeff-workman +alt.fan.jeffrey-graham +alt.fan.jello-biafra +alt.fan.jen-aniston +alt.fan.jen-coolest +alt.fan.jeniffer-lopez +alt.fan.jenn.dolari.wedding-proposals +alt.fan.jenni.goddess.goddess.goddess +alt.fan.jennicam +alt.fan.jennifer-connelly +alt.fan.jennifer-lopez +alt.fan.jennifer-love-hewitt +alt.fan.jenny-mccarthy +alt.fan.jeremy-reimer +alt.fan.jeri-ryan +alt.fan.jerkcity +alt.fan.jerky-boys +alt.fan.jerry-howe +alt.fan.jerry-springer +alt.fan.jesse.ventura +alt.fan.jesse.ventura.gov +alt.fan.jessica-alba +alt.fan.jessica-folcker +alt.fan.jesus-christ +alt.fan.jet +alt.fan.jethro-tull +alt.fan.jewel +alt.fan.jguinea-pigs.osiris-jr +alt.fan.jhammond +alt.fan.jigglypuff +alt.fan.jim-carrey +alt.fan.jim-carroll +alt.fan.jim-dove +alt.fan.jim-rome +alt.fan.jim-rose +alt.fan.jim-ryan.the.inept.stalker +alt.fan.jim.dove +alt.fan.jimi-hendrix +alt.fan.jimmy-buffet +alt.fan.jimmy-buffett +alt.fan.jiro +alt.fan.jismro +alt.fan.jmallett +alt.fan.jmjarre +alt.fan.jodie-foster +alt.fan.joe-crummey +alt.fan.joe-crummy +alt.fan.joe-satriani +alt.fan.joebob.briggs +alt.fan.joel-furr +alt.fan.joey-deacon +alt.fan.john-cusack +alt.fan.john-d +alt.fan.john-denver +alt.fan.john-edward +alt.fan.john-gary +alt.fan.john-norquist +alt.fan.john-travolta +alt.fan.john-turmel +alt.fan.john-winston +alt.fan.john-woo +alt.fan.john.mackey +alt.fan.johnny-depp +alt.fan.johnny-winter +alt.fan.johnwolfe +alt.fan.jon-nadelberg +alt.fan.jon-stewart +alt.fan.jools-holland +alt.fan.josef-mengele +alt.fan.joseph-holl +alt.fan.joseph-joyce +alt.fan.joshua-kramer +alt.fan.jph +alt.fan.juli-ashton +alt.fan.julia-hayes +alt.fan.julia-roberts +alt.fan.julia-stiles +alt.fan.julian.macassey +alt.fan.julie-delpy +alt.fan.juliette.lewis +alt.fan.julius +alt.fan.jwz +alt.fan.kake.nice-boots +alt.fan.kali.astarte.inanna +alt.fan.karenmcdougal +alt.fan.karl-malden.cypher +alt.fan.karl-malden.kidneys +alt.fan.karl-malden.nose +alt.fan.karl-malden.nose.agff +alt.fan.karl-malden.nose.fan.karl-malden.nose +alt.fan.karla-homolka +alt.fan.kate +alt.fan.kate-moss +alt.fan.kate-winslet +alt.fan.katerena.eiermann +alt.fan.katherine-harris +alt.fan.kathy-jo +alt.fan.katie-holmes +alt.fan.katie-holmes.binaries +alt.fan.katzwinkel.com +alt.fan.kay-dekker +alt.fan.kd-lang +alt.fan.keanu-reeves +alt.fan.keanu-reeves.moderated +alt.fan.keatonfox +alt.fan.keegan +alt.fan.kellie-martin +alt.fan.kerri-kendall +alt.fan.kevin-gilbert +alt.fan.kevin-lyons +alt.fan.kevin-mitnick +alt.fan.kevin-spacey +alt.fan.kevin-tom.slackers +alt.fan.kevin_kline +alt.fan.kia-mennie +alt.fan.kid-rock +alt.fan.kieran-snyder +alt.fan.kim-bach.cheater +alt.fan.kim-bach.depraved +alt.fan.kim-bach.forger +alt.fan.kim-bach.slut.slut.slut +alt.fan.kim-stanley-robinson +alt.fan.kimberlie-hanson +alt.fan.kingnorris +alt.fan.kinks +alt.fan.kipland-kinkel +alt.fan.kipland-kinkel.shootist +alt.fan.kirin-landsgaard +alt.fan.kirsten-dunst +alt.fan.kit-is-god +alt.fan.kournikova +alt.fan.kristiina.johansson +alt.fan.kristy-swanson +alt.fan.kroq +alt.fan.krystal +alt.fan.krzos +alt.fan.kubrick +alt.fan.kurt-busiek +alt.fan.la-femme.nikita +alt.fan.la-radio +alt.fan.labin +alt.fan.labu +alt.fan.lacey-chabert +alt.fan.lakshmi +alt.fan.landmark +alt.fan.landrover +alt.fan.lara-croft +alt.fan.larisa-oleynik +alt.fan.laura-hall +alt.fan.laura-harris +alt.fan.laura-love +alt.fan.laurie.anderson +alt.fan.lava.lamps +alt.fan.laz +alt.fan.lea-salonga +alt.fan.lea-thompson +alt.fan.leann-rimes +alt.fan.leeza-gibbons +alt.fan.lemurs +alt.fan.leningrad.cowboys +alt.fan.leo-dicaprio +alt.fan.leonardo-serni +alt.fan.leonredbone +alt.fan.letter.a +alt.fan.letter.b +alt.fan.letter.c +alt.fan.letter.d +alt.fan.letter.e +alt.fan.letter.f +alt.fan.letter.g +alt.fan.letter.h +alt.fan.letter.i +alt.fan.letter.j +alt.fan.letter.k +alt.fan.letter.l +alt.fan.letter.m +alt.fan.letter.n +alt.fan.letter.o +alt.fan.letter.p +alt.fan.letter.q +alt.fan.letter.r +alt.fan.letter.s +alt.fan.letter.t +alt.fan.letter.u +alt.fan.letter.v +alt.fan.letter.w +alt.fan.letter.x +alt.fan.letter.y +alt.fan.letter.z +alt.fan.letterman +alt.fan.letterman.guests.female +alt.fan.letterman.top-ten +alt.fan.lexington-blues +alt.fan.lightbulbs +alt.fan.lila-feng +alt.fan.linda-hamilton +alt.fan.lindsay-hamm +alt.fan.linux +alt.fan.lion-king +alt.fan.lisa-boyle +alt.fan.lisa-kudrow +alt.fan.listener +alt.fan.lite +alt.fan.little-puff-puff +alt.fan.liv-tyler +alt.fan.liz-phair +alt.fan.lizard-king +alt.fan.longest-thread +alt.fan.lorian +alt.fan.louise +alt.fan.louise-brooks +alt.fan.love-phones +alt.fan.loveline +alt.fan.ltte +alt.fan.lucy-liu +alt.fan.lupin +alt.fan.lyle-gardiner +alt.fan.lynne-russell +alt.fan.lynrd +alt.fan.m.d.adamcurzon +alt.fan.m.d.davedowns +alt.fan.mac-wisler +alt.fan.machnhead +alt.fan.macross +alt.fan.mad-rmgroupers +alt.fan.madonna +alt.fan.madredeus +alt.fan.major.kira.pant.pant.pant +alt.fan.mancow +alt.fan.mandy-patinkin +alt.fan.manfredmann +alt.fan.mangoat +alt.fan.mara +alt.fan.marc-anthony +alt.fan.marcgregoire +alt.fan.marcia-clark +alt.fan.marco-ditri +alt.fan.marcus-yu +alt.fan.maria-callas +alt.fan.marieke +alt.fan.marijane-blaine +alt.fan.mark-brian +alt.fan.mark-falzmann +alt.fan.mark-harrison +alt.fan.marloes.and.rene +alt.fan.martin-amis +alt.fan.martin-donovan +alt.fan.marty.the.gay.pigboy +alt.fan.marv-albert +alt.fan.marys-danish +alt.fan.matchbox20 +alt.fan.mauro.da-spinea +alt.fan.mduell +alt.fan.me-no-baby-me-ook +alt.fan.meat-plow +alt.fan.meg-ryan +alt.fan.megahal +alt.fan.mel-brooks +alt.fan.melanie-brown +alt.fan.melanie-chisholm +alt.fan.melinda.messenger +alt.fan.melissa-j-hart +alt.fan.melissa-paro +alt.fan.melody-perkins +alt.fan.mentski +alt.fan.mercaturnet +alt.fan.metal +alt.fan.metal.burzum +alt.fan.metal.demilich +alt.fan.metal.graveland +alt.fan.metal.monstrosity +alt.fan.metal.suffocation +alt.fan.mich-pfeiffer +alt.fan.michael-ball +alt.fan.michael-biehn +alt.fan.michael-bolton +alt.fan.michael-owen +alt.fan.michael.hannigan +alt.fan.michaela.strachan +alt.fan.michelle +alt.fan.michelle-pfeiffer +alt.fan.michelle-williams +alt.fan.mijke-van-wijk +alt.fan.mike-bullard +alt.fan.mike-dahmus +alt.fan.mike-jittlov +alt.fan.mike-myers +alt.fan.mike.dumas-is-an-asshole +alt.fan.mikeh +alt.fan.milla-jovovich +alt.fan.milosevic +alt.fan.mira-furlan +alt.fan.miriam-gonzalez +alt.fan.miss-manners +alt.fan.mk-flynn +alt.fan.moesart2000 +alt.fan.mogul +alt.fan.momus +alt.fan.monica-potter +alt.fan.monkeylove +alt.fan.monkeylove.rikijo +alt.fan.monty-python +alt.fan.monty-python.silliness +alt.fan.morganna.queen.of.the.damned +alt.fan.morpheus +alt.fan.morpheus.hunter +alt.fan.mousehead +alt.fan.movie.willy-wonka +alt.fan.moxy.fruvous +alt.fan.mozilla +alt.fan.mr-biffo +alt.fan.mr-kabc +alt.fan.mr-kfi +alt.fan.mr.oizo +alt.fan.mr.tribe +alt.fan.mrclean +alt.fan.mrpsb +alt.fan.mrs.tribe +alt.fan.mst3k +alt.fan.muchmusic +alt.fan.muchmusic.bill-welychka +alt.fan.mugabe +alt.fan.mustafio +alt.fan.my-big-hairy-penis +alt.fan.naked-guy +alt.fan.naked.dancing.llama +alt.fan.nance +alt.fan.nanochrist +alt.fan.nastassja-kinski +alt.fan.natalie +alt.fan.natalie-portman +alt.fan.natalieportman.binaries +alt.fan.natasha +alt.fan.nathan.brazil +alt.fan.neil-gaiman +alt.fan.netcom.hack.hack.hack +alt.fan.neve +alt.fan.neve-campbell +alt.fan.newgroupers +alt.fan.news-admins +alt.fan.newsmaster-iol +alt.fan.newt-gingrich +alt.fan.newt-gingrich.fist.fist.fist +alt.fan.nick-humphrey +alt.fan.nick-mooney +alt.fan.nicki-lewis +alt.fan.nicole-kidman +alt.fan.nietzsche +alt.fan.niina.reiju +alt.fan.nike +alt.fan.nikita-borisov +alt.fan.nikki-dial +alt.fan.nikola-tesla +alt.fan.nina-hagen +alt.fan.ninja +alt.fan.ninja-turtles +alt.fan.nitallica +alt.fan.no-doubt +alt.fan.noah-wyle +alt.fan.noam-chomsky +alt.fan.noodles +alt.fan.norm-macdonald +alt.fan.nsync +alt.fan.nutella +alt.fan.nyarth +alt.fan.oingo-boingo +alt.fan.oj-simpson +alt.fan.oj-simpson.and.cypher +alt.fan.oj-simpson.hang-him-by-his-balls +alt.fan.ok-soda +alt.fan.okies +alt.fan.oksana-bayul.small-tits +alt.fan.oksana.bayul +alt.fan.oldfart +alt.fan.oliver-stone +alt.fan.oliver1 +alt.fan.olsen-twins +alt.fan.opie-and-anthony +alt.fan.oppy.music +alt.fan.orbitz +alt.fan.ornella-muti +alt.fan.oskana-bayul.small-tits +alt.fan.outsiders +alt.fan.outspoken +alt.fan.pallindromes.racecar.semordnillap.naf.tla +alt.fan.pam-anderson +alt.fan.pamwatch +alt.fan.pandiyan +alt.fan.papa +alt.fan.pat-richardson +alt.fan.pat-robertson +alt.fan.patricia +alt.fan.patrick-oonk +alt.fan.patsy-kensit +alt.fan.patty-smyth +alt.fan.patty.smyth +alt.fan.paul-bernardo +alt.fan.paul-clapman +alt.fan.paul-crissy +alt.fan.paul.bradley +alt.fan.paula-abdul +alt.fan.pauline.hanson +alt.fan.pearl-jam +alt.fan.pegas +alt.fan.penn-n-teller +alt.fan.penny-hardaway +alt.fan.pere-ubu +alt.fan.pern +alt.fan.perry-rhodan +alt.fan.peter-david +alt.fan.peter-hammill +alt.fan.peter.hammill +alt.fan.petra-verkaik +alt.fan.phehm +alt.fan.phiberoptik +alt.fan.phil-cox +alt.fan.philip-dick +alt.fan.philippa.forrester +alt.fan.phoebe-cates +alt.fan.pierce-brosnan +alt.fan.piers +alt.fan.piers-anthony +alt.fan.piete.brooks +alt.fan.piglow +alt.fan.pikachu +alt.fan.pimp +alt.fan.pine +alt.fan.pingu.marp.marp +alt.fan.pinkkky-butt +alt.fan.pirotti.prospero +alt.fan.pirotti.prospero.net-abuse +alt.fan.pizza.frankj.frankj.frankj +alt.fan.pj-orourke +alt.fan.plushies +alt.fan.pokebaby +alt.fan.pokemon.pikachu +alt.fan.police +alt.fan.pooh +alt.fan.poopie-pants +alt.fan.porkwoman +alt.fan.pornstar.darrian +alt.fan.pornstar.janine +alt.fan.pornstar.shane +alt.fan.pornstar.xxxena +alt.fan.potato +alt.fan.power-rangers +alt.fan.pratchett +alt.fan.pratchett.announce +alt.fan.pratchett.bofh +alt.fan.pratchett.old-farts +alt.fan.pravin.apu +alt.fan.presidentissimo +alt.fan.prettyboy +alt.fan.prettyboy.sex +alt.fan.prettyboy.spam +alt.fan.prince +alt.fan.princess +alt.fan.princess-diana +alt.fan.project-object +alt.fan.prozac +alt.fan.pst +alt.fan.pst.d +alt.fan.pszemol +alt.fan.publius +alt.fan.punti.fa.il.servizio.civile +alt.fan.punti.ha.deciso.di.disertare +alt.fan.puntomaupunto +alt.fan.q +alt.fan.quasar +alt.fan.quythulg +alt.fan.qwert +alt.fan.r-takahashi +alt.fan.rachael-l-cook +alt.fan.rachel-leigh-cook +alt.fan.rachel-perkins.bah.bah.bah +alt.fan.rachel.stanley +alt.fan.radioactivecat +alt.fan.ralph.bailey +alt.fan.ralph.fiennes +alt.fan.ram-samudrala +alt.fan.randy-rhoads +alt.fan.randy_pepe +alt.fan.raps +alt.fan.raquel-welch +alt.fan.raweekends +alt.fan.rawilson +alt.fan.ray-cobb +alt.fan.ray-taliaferro +alt.fan.rdm +alt.fan.really-big-button +alt.fan.reboot +alt.fan.red.green +alt.fan.reece-shearsmith +alt.fan.regular-guys +alt.fan.remarq +alt.fan.ren-and-stimpy +alt.fan.rene.scheffer +alt.fan.renee-oconnor +alt.fan.riana +alt.fan.ricci.christina +alt.fan.rich-conaty +alt.fan.richard-gaywood +alt.fan.richard-hoaxland +alt.fan.richard-nixon +alt.fan.richard-silver +alt.fan.ricky-martin +alt.fan.ritchie-valens +alt.fan.rmimulvex +alt.fan.road-work +alt.fan.roadrunner +alt.fan.rob-bartlett +alt.fan.rob-cypher +alt.fan.robby-rat +alt.fan.robert-beltran +alt.fan.robert-cray +alt.fan.robert-ghostwolf +alt.fan.robert-jordan +alt.fan.robert-speirs +alt.fan.robert-tilton +alt.fan.robert-wagner +alt.fan.robert-whaley +alt.fan.robert.franzone +alt.fan.robert.ghostwolf +alt.fan.roberta.hatch +alt.fan.robin-williams +alt.fan.robotech +alt.fan.rocki-roads +alt.fan.rockpalast +alt.fan.rod-speed +alt.fan.roelf.renkema +alt.fan.rolf-harris +alt.fan.ronald-reagan +alt.fan.ronnie-obrien +alt.fan.rosalina +alt.fan.rosieodonnell +alt.fan.rosy-bindi +alt.fan.route +alt.fan.rowan-atkinson +alt.fan.roy-batty +alt.fan.roya +alt.fan.rspwwcw +alt.fan.rudy-perpich +alt.fan.rumpole +alt.fan.run-dmc +alt.fan.rush-limbaugh +alt.fan.rush-limbaugh.tv-show +alt.fan.russ-hamner +alt.fan.rycooder +alt.fan.saber +alt.fan.sabrina-lloyd +alt.fan.sabu424 +alt.fan.sacramento.music +alt.fan.sade +alt.fan.sailor-moon +alt.fan.sally-ann.huckstepp +alt.fan.sallymae.hogsby +alt.fan.salma-hayek +alt.fan.salmonella +alt.fan.sam-raimi +alt.fan.samantha-fox +alt.fan.samanthamathis +alt.fan.samuel-johnson-iii +alt.fan.sana-chan +alt.fan.sandi-toksvig +alt.fan.sandra-bullock +alt.fan.sandra-bullock.binaries +alt.fan.sandy-duncan.eye-on-rmt +alt.fan.sara.di-scienze-politiche +alt.fan.sarah-m-gellar +alt.fan.sarah-young +alt.fan.sarah.jessica.parker +alt.fan.satan +alt.fan.sati +alt.fan.scarecrow +alt.fan.scarlette.nice.ass +alt.fan.schanien-graf +alt.fan.schlanger.sports-monster +alt.fan.schwarzenegger +alt.fan.scott-cohen +alt.fan.scream +alt.fan.sean-obrien +alt.fan.secret.org +alt.fan.semolina +alt.fan.sergi +alt.fan.sexy-wings +alt.fan.sexy-wingss +alt.fan.shania-twain +alt.fan.shannen-doherty +alt.fan.sheldon +alt.fan.sherilyn-fenn +alt.fan.shigeru-miyamoto +alt.fan.shirley-manson +alt.fan.shostakovich +alt.fan.sifl-olly +alt.fan.sigur-ros +alt.fan.silentbob +alt.fan.silly-pillows +alt.fan.silverraven +alt.fan.simon-nash +alt.fan.sinner +alt.fan.sister-pooh +alt.fan.skidmore.catherine +alt.fan.skinny +alt.fan.snopes +alt.fan.snornl +alt.fan.snowleopard +alt.fan.snuffles +alt.fan.sodomy +alt.fan.sodomy.christian +alt.fan.sodomy.uncontrollable +alt.fan.soft-targets +alt.fan.soledad-obrien +alt.fan.sonic-hedgehog +alt.fan.sonic-hedgehog.cypher +alt.fan.sonic-hedgehog.sucks.sucks.sucks +alt.fan.sonieee +alt.fan.sophie-marceau +alt.fan.southpark +alt.fan.southpark.chef +alt.fan.southpark.kenny.die.die.die +alt.fan.space-ghost +alt.fan.space-ghost.binaries +alt.fan.spalding-gray +alt.fan.spanky_the_verbose +alt.fan.sparky +alt.fan.spastics +alt.fan.speedbump +alt.fan.spencer-soloway +alt.fan.spice-girls +alt.fan.spinal-tap +alt.fan.spinnwebe +alt.fan.spooge +alt.fan.staben-1999 +alt.fan.stamink +alt.fan.stamp.collecting +alt.fan.starwars +alt.fan.starwars.galactic-empire +alt.fan.starwars.jar-jar-binks.die.die.die +alt.fan.starwars.jarjarbinks.die.die.die +alt.fan.states.alabama +alt.fan.states.alaska +alt.fan.states.arizona +alt.fan.states.arkansas +alt.fan.states.california +alt.fan.states.colorado +alt.fan.states.connecticut +alt.fan.states.delaware +alt.fan.states.florida +alt.fan.states.georgia +alt.fan.states.hawaii +alt.fan.states.idaho +alt.fan.states.illinois +alt.fan.states.indiana +alt.fan.states.iowa +alt.fan.states.kansas +alt.fan.states.kentucky +alt.fan.states.louisiana +alt.fan.states.maine +alt.fan.states.maryland +alt.fan.states.maryland.cities.cockeysville +alt.fan.states.massachusetts +alt.fan.states.michigan +alt.fan.states.minnesota +alt.fan.states.mississippi +alt.fan.states.missouri +alt.fan.states.montana +alt.fan.states.nebraska +alt.fan.states.nevada +alt.fan.states.new-hampshire +alt.fan.states.new-jersey +alt.fan.states.new-mexico +alt.fan.states.new-york +alt.fan.states.north-carolina +alt.fan.states.north-dakota +alt.fan.states.ohio +alt.fan.states.oklahoma +alt.fan.states.oregon +alt.fan.states.pennslvania +alt.fan.states.rhode-island +alt.fan.states.south-carolina +alt.fan.states.south-dakota +alt.fan.states.tennessee +alt.fan.states.texas +alt.fan.states.utah +alt.fan.states.vermont +alt.fan.states.virginia +alt.fan.states.washington +alt.fan.states.west-virginia +alt.fan.states.wisconsin +alt.fan.states.wyoming +alt.fan.static +alt.fan.steffi-graf +alt.fan.steggy +alt.fan.stephen-fry +alt.fan.stephen-king +alt.fan.steve-williams +alt.fan.steve-winter +alt.fan.steve.gielda.cotse.rocks +alt.fan.steve.ward.gr8roc.records.desperate.loser +alt.fan.steven-britton +alt.fan.steven.algieri +alt.fan.stevie-ray-vaughan +alt.fan.sting +alt.fan.stonage +alt.fan.stonecutters +alt.fan.stretchpants +alt.fan.strokrace +alt.fan.stuttering-john +alt.fan.suckdotcom +alt.fan.sung-hi-lee +alt.fan.supermodel.alex.lundqvst +alt.fan.supernaut +alt.fan.supernews-filters.outbound +alt.fan.surak +alt.fan.susan +alt.fan.susan-golding +alt.fan.susan-thunder +alt.fan.swear-words +alt.fan.sysadmin +alt.fan.sysero +alt.fan.taneli.suikkanen +alt.fan.tank-girl +alt.fan.tankslappa +alt.fan.tanya-harding +alt.fan.tanya-mur +alt.fan.tarantino +alt.fan.tastic +alt.fan.tazerfish +alt.fan.tea-leoni +alt.fan.team-rocket +alt.fan.teamatog +alt.fan.ted-hudson +alt.fan.ted-neeley +alt.fan.teddy-ruxpin +alt.fan.teemoney.what.is.k00l +alt.fan.teen +alt.fan.teen.idols +alt.fan.teen.idols.JTT +alt.fan.teen.idols.jtt +alt.fan.teen.idols.paul-jones +alt.fan.teen.idols.princewilliam +alt.fan.teen.starlets +alt.fan.televisionx +alt.fan.televisionx.charmaine +alt.fan.televisionx.linda-leigh +alt.fan.televisionx.lynda-leigh +alt.fan.televisionx.sammi +alt.fan.teresa-may +alt.fan.terhi.rama +alt.fan.teri-weigel +alt.fan.terri.disisto +alt.fan.terry-venables +alt.fan.the-bob +alt.fan.the-bob.goblin +alt.fan.the-company +alt.fan.the-crow +alt.fan.the-producer +alt.fan.the-saint +alt.fan.the-spelling-troll +alt.fan.the.clockwork.orange +alt.fan.the.cure +alt.fan.the.legend.of.oliver1.the.mad.newsgrouper +alt.fan.the_nerd +alt.fan.theadultchannel +alt.fan.thebigshow +alt.fan.thecrow +alt.fan.thecure +alt.fan.thedavid +alt.fan.theo-fokkema +alt.fan.thewurm +alt.fan.thomas-conner +alt.fan.thomas-pynchon +alt.fan.thorntonwilder +alt.fan.throut.and.neck +alt.fan.thunder-thumbs +alt.fan.thundercats +alt.fan.thursday +alt.fan.tibo +alt.fan.tiffani-amber-thiessen +alt.fan.tiffany-smith +alt.fan.tigger +alt.fan.tim-is-gay +alt.fan.tim-sutter +alt.fan.timi-isden +alt.fan.timotio +alt.fan.tito +alt.fan.tlc +alt.fan.toby-smith +alt.fan.tod +alt.fan.toiletduk +alt.fan.toiya-prather +alt.fan.toki +alt.fan.tolkien +alt.fan.tom-clancy +alt.fan.tom-leykis +alt.fan.tom-robbins +alt.fan.tom-servo +alt.fan.tom-snyder +alt.fan.tomsq +alt.fan.tonester +alt.fan.tonya-harding +alt.fan.tonya-harding.whack.whack.whack +alt.fan.tori-amos +alt.fan.torok.urine-soaked-rags +alt.fan.toronto.maple.leafs +alt.fan.toto +alt.fan.traci-lords +alt.fan.traci-poole +alt.fan.tractors +alt.fan.tradespace +alt.fan.travis-mcgee +alt.fan.trenchcoat-mafia +alt.fan.trinity-loren +alt.fan.trisha.yearwood +alt.fan.tsca +alt.fan.tuan.god.god.god +alt.fan.tupac.dead.dead.dead +alt.fan.turboslug +alt.fan.tv.digimon +alt.fan.twister +alt.fan.u.pornpig.ass +alt.fan.u2 +alt.fan.uck +alt.fan.uff +alt.fan.uma-thurman +alt.fan.unabomber +alt.fan.underley +alt.fan.unigrouper +alt.fan.unknownj +alt.fan.usandwilbur +alt.fan.usenet +alt.fan.usenetserver.support +alt.fan.ushi.van.dijk +alt.fan.utb +alt.fan.utb.bubba +alt.fan.utb.cappy-hamper +alt.fan.utb.celeste +alt.fan.utb.comments.4u +alt.fan.utb.comments4u +alt.fan.utb.fijjit +alt.fan.utb.frogbutt +alt.fan.utb.joseb +alt.fan.utb.momolio +alt.fan.utb.morticia +alt.fan.utb.naughty-boy +alt.fan.utb.twitch +alt.fan.utb.wild-bill +alt.fan.ute-lemper +alt.fan.utena +alt.fan.val-kilmer +alt.fan.van-damme +alt.fan.vanessa-angel +alt.fan.velocity.girl +alt.fan.veronika-moser +alt.fan.vesa.ahonen +alt.fan.vic-reeves +alt.fan.victoria-adams +alt.fan.victoria-paris +alt.fan.villetti +alt.fan.villetti.maiuscolo +alt.fan.vind +alt.fan.vinny +alt.fan.vittoriosgarbi +alt.fan.voltron +alt.fan.vore +alt.fan.wacky-crackheads +alt.fan.wacky.crackheads +alt.fan.wally-george +alt.fan.wang-chung +alt.fan.warlord +alt.fan.webcomics +alt.fan.webgod +alt.fan.wedge +alt.fan.wednesday +alt.fan.weird-al +alt.fan.weird-store +alt.fan.weird.actors +alt.fan.wesley-willis +alt.fan.whitevampire +alt.fan.wickedsamurai +alt.fan.wil-wheaton +alt.fan.wilkinsons +alt.fan.will-smith +alt.fan.william-k +alt.fan.wim.stoltenberg +alt.fan.wings +alt.fan.winnie-the-pooh +alt.fan.winona-ryder +alt.fan.wodehouse +alt.fan.women.australian +alt.fan.woody-allen +alt.fan.woody_allen +alt.fan.xaonon +alt.fan.xlock-rotor +alt.fan.y2t.rocks +alt.fan.yanni +alt.fan.yardbird +alt.fan.yardbirds +alt.fan.yasmine-bleeth +alt.fan.yati +alt.fan.yazoo +alt.fan.yoda-agnp +alt.fan.young.celebrities.retromod +alt.fan.youth-in-asia +alt.fan.zagadka +alt.fan.zathras +alt.fan.zelong +alt.fan.zenwolf +alt.fan.zerodragon +alt.fan.zmienna.wiadomokto +alt.fan.zobo-kolone +alt.fan.zobo-kolonie +alt.fan.zoe-ball +alt.fan.zoogz-rift +alt.fan.zsazsa +alt.fan.zygotes +alt.fandom.cons +alt.fandom.dragoncon +alt.fandom.misc +alt.fans.chat2 +alt.fans.danhoffman +alt.fans.ginevra +alt.fans.kant.navel-gazing +alt.fans.maw +alt.fans.prof.roscio.da.ugly +alt.fans.southpark.chef +alt.fans.tim_skirvin.die.die.die +alt.fans.uiuc.spank.spank.spank +alt.fans.vampifangs +alt.fantasy +alt.fantasy.conan +alt.fantasy.er-burroughs +alt.fashion +alt.fashion.corsetry +alt.fashion.craig-oldfield.cheap-suit +alt.fashion.crossdresing +alt.fashion.crossdressing +alt.fashion.crossdressing.jay-denebeim +alt.fashion.men +alt.fashion.mens-alternative +alt.fashion.open +alt.fashion.petite +alt.fashion.tacky.polyester.leisure-suits.bert-hoff +alt.fat.fucking.weirdo.scott-abraham +alt.fat.unemployed.slob.scott-abraham +alt.father.is.an.ax.murderer.montgomery-wood +alt.favus +alt.fax +alt.fax.bondage +alt.fax.snappy-fax +alt.faxmail.com +alt.fc +alt.fc.kjgf.oxhjiha.bnrs.iq.bfbd +alt.fcs +alt.fdsqyk.f.ory.jlq.a.ow.s +alt.february +alt.feedme +alt.felixstowe.elite +alt.feminazis +alt.feminism +alt.feminism.individualism +alt.fenphen +alt.ferrets +alt.fetish +alt.fetish.beatrix-potter +alt.fetish.discussion.moderated +alt.fetish.feet +alt.fetish.furry.roope_ritvos +alt.fetish.glasses +alt.fetish.long-nails.male +alt.fetish.sit-on-my-face +alt.fetish.sit-on-my-face.and-pee-in-my-mouth +alt.fetish.sit-on-my-face.and-poop-in-my-mouth +alt.fetish.tongue +alt.feudalism +alt.fexs.w +alt.fff.fff +alt.fib +alt.fiction.interactive +alt.fiction.original +alt.fidoflame +alt.fiesta-bowl.irish +alt.fifty-plus.friends +alt.fiftyplus +alt.filesystems.afs +alt.film-editing +alt.film-festivals +alt.film-festivals.sciff +alt.film-festivals.sundance +alt.filtration.dust +alt.final.conflict +alt.final.test.i.promise +alt.final.test.i.promise2 +alt.finals.suicide +alt.find.a.friend.for.aaron.welch +alt.firefighter.firetrucks +alt.firefighters +alt.firefighters.binaries +alt.firefighters.mike-austin +alt.fishing +alt.fishing.catfish +alt.fishing.minnesota +alt.fishing.walleye +alt.fitness.marketplace +alt.fjapljbxlo.g.bhsp.k +alt.fkbybwbvkjo.ucwnyms +alt.fkib.xvik.p.ocvxl.uivs.s.kpf +alt.flaagg.sucks.sucks.sucks +alt.flame +alt.flame.abcdi +alt.flame.abortion +alt.flame.agff +alt.flame.airlines +alt.flame.amusement-park +alt.flame.andrew-defaria +alt.flame.baja-rat +alt.flame.bannerservices +alt.flame.bass-laffer +alt.flame.bertrand-meyer +alt.flame.betsy-geffert +alt.flame.bill-clinton.abortion.partial-birth +alt.flame.bill-clinton.humor +alt.flame.bill-clinton.misc +alt.flame.bon-giovanni +alt.flame.cats +alt.flame.chinese +alt.flame.cincinnati +alt.flame.dan.rusen +alt.flame.david-beckham.thick.english.football.player +alt.flame.dean-stark +alt.flame.dejanews +alt.flame.det-redwings +alt.flame.dr-tom.4d.vamps.acid +alt.flame.dykes +alt.flame.faggots +alt.flame.feminazis +alt.flame.fine.killing.liberty +alt.flame.football +alt.flame.football.notre-dame +alt.flame.frogs +alt.flame.fucking.faggots +alt.flame.fwli +alt.flame.girlfriend +alt.flame.graham-newsham +alt.flame.gypsies +alt.flame.hall-of-flame +alt.flame.hammer +alt.flame.hamsters +alt.flame.hispanics +alt.flame.howard.knight +alt.flame.ic +alt.flame.icanect.net +alt.flame.inner-circle +alt.flame.irish.republican.cunts +alt.flame.james-koput +alt.flame.james.ngygook +alt.flame.james.tiberius.kirk +alt.flame.java +alt.flame.jay-denebeim +alt.flame.jay-stevens +alt.flame.jesus.christ +alt.flame.jews +alt.flame.john.boatright +alt.flame.kevin-keegan +alt.flame.kosovo-war +alt.flame.landlord +alt.flame.lorian +alt.flame.macintosh +alt.flame.macintosh.flame.todd +alt.flame.mandor.sawall +alt.flame.marshal.perlman.weenie +alt.flame.michael-hirtes +alt.flame.montgomery-wood.churlish-bum-boil +alt.flame.montgomery-wood.putrid-mincing-clown +alt.flame.montgomery-wood.rank-and-fetid-clown +alt.flame.montgomery-wood.sopapheaded-buffoon +alt.flame.montreal.canadiens +alt.flame.ms-windows +alt.flame.napster +alt.flame.nerds.jn +alt.flame.net-abuse +alt.flame.net-cops +alt.flame.net.illiterates +alt.flame.nice-people +alt.flame.nick-mooney +alt.flame.niggers +alt.flame.oldguyteck +alt.flame.operating-systems +alt.flame.pakis +alt.flame.parents +alt.flame.patricia-butler +alt.flame.pedophiles +alt.flame.pizza +alt.flame.pizza.greasy +alt.flame.porn.sites +alt.flame.preps +alt.flame.psychiatry +alt.flame.quiggers.big.red.self.destruct.button +alt.flame.rspw +alt.flame.rush-limbaugh +alt.flame.sandberg +alt.flame.sean.wussboy.conley +alt.flame.serbs +alt.flame.spanks +alt.flame.spelling +alt.flame.spice-girls +alt.flame.sports-suck.moderated +alt.flame.suburbanazis +alt.flame.tachy +alt.flame.tcs.die.die.die +alt.flame.telemarketers +alt.flame.terry-hicks +alt.flame.tim-law +alt.flame.tripp.snitch.snitch.snitch +alt.flame.tsr +alt.flame.unigrouper +alt.flame.uunet +alt.flame.wankadia +alt.flame.whites +alt.flame.windoze95 +alt.flamelords +alt.flamelords.suck.shit +alt.flamenet +alt.flamenet.lame.lame.lame +alt.flarf.fnord +alt.flarf.parp +alt.flarf.rulez.the.net +alt.flashback +alt.flightsims +alt.flightsims.sqaudrons +alt.flmd.dq.xljsi.qn.fnswvkci +alt.flp.xtplimzuj.mejnekn +alt.fluff +alt.fluff.ownz.jay-denebeim +alt.fluffycat +alt.flute +alt.flyfishing +alt.flying.cows +alt.folklore +alt.folklore.aromatherapy +alt.folklore.college +alt.folklore.computer +alt.folklore.computers +alt.folklore.faery +alt.folklore.gemstones +alt.folklore.ghost-stories +alt.folklore.ghost-stories.binaries +alt.folklore.ghost-stories.flame-wars +alt.folklore.herbs +alt.folklore.info +alt.folklore.internet +alt.folklore.military +alt.folklore.music +alt.folklore.peter-dubuque +alt.folklore.science +alt.folklore.snuh +alt.folklore.suburban +alt.folklore.turban +alt.folklore.unit +alt.folklore.urban +alt.folklore.urban.aghltfc +alt.folklore.urban.spank +alt.folklore.urban.spank.spank +alt.folklore.urban.spank.spank.spank +alt.fondle.vomit +alt.foo +alt.foo.bar +alt.foo.bar.qux.xyzxyz +alt.food +alt.food.asian +alt.food.barbecue +alt.food.biltong +alt.food.burgerchef +alt.food.bw3 +alt.food.cajun +alt.food.canine-feces.bert-hoff +alt.food.champagne +alt.food.chocolate +alt.food.coca-cola +alt.food.cocacola +alt.food.coffee +alt.food.crackers +alt.food.dennys +alt.food.diabetic +alt.food.fast-food +alt.food.fat-free +alt.food.grits +alt.food.hamburger +alt.food.ice-cream +alt.food.low-fat +alt.food.lutefisk +alt.food.mcdonalds +alt.food.mentos +alt.food.mexican +alt.food.mexican-cooking +alt.food.olestra +alt.food.olives-or-olive-oil +alt.food.pancakes +alt.food.peeps +alt.food.pez +alt.food.professionals +alt.food.puke.mongrel-mind +alt.food.pussy +alt.food.ramen +alt.food.recipes.the.aflac.duck +alt.food.red-lobster +alt.food.safety +alt.food.seman +alt.food.semen +alt.food.sushi +alt.food.taco-bell +alt.food.vegan +alt.food.vegan.science +alt.food.waffle-house +alt.food.wine +alt.foodl.authentic-only +alt.fool.aaron-welch +alt.foot.fat-free +alt.football.pro.ch +alt.ford.falcon +alt.foreplay +alt.forestry +alt.forsale +alt.forsale.children +alt.forsale.computing +alt.forsale.grandjunction +alt.forsale.nutrition +alt.forsale.seattle +alt.forsale.spam +alt.fozzybear.wokka.wokka.wokka +alt.fractal-design.painter +alt.fractals +alt.fractals.pictures +alt.frank.magazine +alt.frank.sanders.is.a.woman.beater +alt.frankv +alt.fraternity +alt.fraternity.sorority +alt.fraud +alt.freaks +alt.free.jamjar +alt.free.men +alt.free.money +alt.free.newsservers +alt.free.nntp +alt.free.party-lines +alt.free.proxies +alt.free.proxyservers +alt.free.unix-shell-accounts +alt.freedom +alt.freedom.jbpe +alt.freedom.jbpe.d +alt.freedom.jbpe.gam +alt.freedom.jbpe.i-colla +alt.freedom.jbpe.sm +alt.freedom.jbpel +alt.freedom.jbpel-s +alt.freedom.of.alt +alt.freedom.of.information +alt.freedom.of.information.act +alt.freedom.of.speech.moderated +alt.freedomain.discuss +alt.freedomain.registry +alt.freemasonry +alt.freemasonry.binaries +alt.freemasonry.handshakes +alt.freenet +alt.freespeech +alt.freewebhosting +alt.freewebhosting.support +alt.french +alt.fresh.steamy.dog-turds.jay-denebeim +alt.friday +alt.friend.emoji +alt.friends.sterno +alt.frisco +alt.frisco.personals +alt.fritz-the-cat +alt.frogbutt +alt.frogbutt.for.president +alt.frogbutt.newgroup.announce +alt.frogbutt.newgroup.requests +alt.frogbutt.rmgroup.requests +alt.fruits.apples +alt.fruits.bananas +alt.fruits.oranges +alt.fruits.pears +alt.fsjbncdoch +alt.ftgid +alt.ftims.is.the.best +alt.ftp-servers +alt.ftpsearch.com +alt.fuck +alt.fuck.fuck.fuck.fuck.fuck +alt.fuck.imran.up.the.ass.with.a.chainsaw +alt.fuck.jay-denebeim.up.the.ass.with.a.chainsaw +alt.fuck.jay.t.carrigan.stamps +alt.fuck.klaas.hump.hump.hump +alt.fuck.menjy.in.the.ass +alt.fuck.niggers +alt.fuck.paedophile.barry-bouwsma.binariez.retromod +alt.fuck.racists +alt.fuck.the.skull.of.alan.bstard +alt.fuck.the.skull.of.jesus.binaries.pictures.erotica +alt.fuck.the.skull.of.jesus.binaries.pictures.erotica.d +alt.fuck.you.jay-denebeim +alt.fuck.you.suzanne.thompson.ahahahahaha +alt.fuckchop +alt.fucked.alt.fan.prettyboy +alt.fucked.rec.gardens.roses +alt.fuckhead.frogbutt +alt.fuckhead.guy-polis.thinks.everyone.is.dmitri-vulis +alt.fuckhead.jay-denebeim +alt.fuckhead.mao-tse-tung +alt.fuckhead.menjy +alt.fuckhead.montgomery-wood +alt.fuckin.rowin.mate +alt.fucking.moron.montgomery-wood +alt.fucks.donkeys.don-quichotte +alt.fucks.everything.madonna +alt.fuckwit +alt.fuckwit.derek.struyk +alt.fuckwit.mad-hatter +alt.fuckwits +alt.fuckwits.bill-sands +alt.fudge-packer.peter-thorpe +alt.fuhw +alt.fukengruven +alt.fun +alt.fun-pizza.frankj.frankj.frankj +alt.fun.with.court +alt.fun.with.luc +alt.fun.with.steve +alt.fun.with.tob +alt.funk-you +alt.funk.the.funk +alt.funnytown +alt.furniture.mid-century-modern +alt.furniture.moroccan +alt.furry +alt.future.millennium +alt.fxkgw.i.m +alt.fysh +alt.g-ming.connectivity.stopdying.stopdying.stopdying +alt.g.bbxs +alt.g.cxuy.gc.qwv +alt.g.twm +alt.g.u.jg.g.yim.s +alt.g.v.kcp.mivxv.m.k.g.t.c.ah.fa.p.u.s +alt.g.wg.vb.n.imn.j.tnwvz.of.q.rrsdg.es.me.vkpnk +alt.g.z.ehr.idonn.klh.hnbs.ykckko +alt.gadgetfan +alt.galactic-guide +alt.galactically.pointless +alt.galaxy.smr +alt.gambia.linux +alt.gambling +alt.game.starcraft.battlenet.cheat +alt.gamecube +alt.gamepoint +alt.gamera.is.friend.to.all.children +alt.games +alt.games-the-sims +alt.games.10six +alt.games.3dfx +alt.games.3dfx.brother +alt.games.3dtt +alt.games.70sthrowback +alt.games.abandonware +alt.games.adnd +alt.games.adnd.forgotten-realms +alt.games.air-warrior +alt.games.alice +alt.games.all.games +alt.games.ambrosiasw +alt.games.anarchy-online +alt.games.announce.new +alt.games.apba +alt.games.apogee +alt.games.aquazone +alt.games.asherons-call +alt.games.atari +alt.games.atr +alt.games.atr.rpg +alt.games.axisandallies +alt.games.baldurs-gate +alt.games.basketball.pro.fantasy.topofthekey +alt.games.battlezone +alt.games.bc3000ad +alt.games.bitmap-brothers +alt.games.black-white +alt.games.blackandwhite +alt.games.bladerunner +alt.games.blood +alt.games.btech.muse.munchkins +alt.games.builder.dcgames +alt.games.carmageddon +alt.games.castlevania +alt.games.champ-man +alt.games.champ-man.regs +alt.games.champmanonline +alt.games.cheats +alt.games.civ-call-to-power +alt.games.civ2 +alt.games.civ3 +alt.games.civnet +alt.games.clanlord +alt.games.classic-crpgs +alt.games.cm3 +alt.games.combat-mission +alt.games.command-n-conq +alt.games.command-n-conq.red-alert +alt.games.command-n-conq.redalert +alt.games.command.and.conquer +alt.games.commandos +alt.games.cosmic-wimpout +alt.games.creatures +alt.games.creatures.moderated +alt.games.creekys-cafe +alt.games.daggerfall +alt.games.dark-age-of-camelot +alt.games.dark-colony +alt.games.dark-forces +alt.games.dark-reign +alt.games.darkstone +alt.games.dead-pools +alt.games.dean-stark +alt.games.delta-force +alt.games.descent +alt.games.descent.flame +alt.games.diablo +alt.games.diablo2 +alt.games.diablo2.moderated +alt.games.diablo2.tboh +alt.games.dice +alt.games.dominos +alt.games.doom +alt.games.doom.announce +alt.games.doom.ii +alt.games.doom.newplayers +alt.games.down-economy +alt.games.drakan +alt.games.draughts +alt.games.duke3d +alt.games.duke3d.binaries +alt.games.duke3d.editing +alt.games.dune-2000 +alt.games.dune-ii.virgin-games +alt.games.dungeon-keeper +alt.games.dungeon-siege +alt.games.dungeon.keeper +alt.games.dur-trs-trap +alt.games.dust +alt.games.ea.bullfrog +alt.games.ea.bullfrog.dungeon-keeper +alt.games.ea.bullfrog.gene-wars +alt.games.ea.bullfrog.high-octane +alt.games.ea.bullfrog.magic-carpet +alt.games.ea.bullfrog.populous +alt.games.ea.bullfrog.syndicate-wars +alt.games.ea.bullfrog.theme-hospital +alt.games.ea.bullfrog.theme-park +alt.games.ea.ea-studio.strike-series +alt.games.ea.janes.688i +alt.games.ea.janes.fighter-anth +alt.games.ea.janes.longbow +alt.games.ea.maxis +alt.games.ea.maxis.full-tilt +alt.games.ea.maxis.marble-drop +alt.games.ea.maxis.sim-ant +alt.games.ea.maxis.sim-city +alt.games.ea.maxis.sim-earth +alt.games.ea.maxis.sim-farm +alt.games.ea.maxis.sim-golf +alt.games.ea.maxis.sim-isle +alt.games.ea.maxis.sim-life +alt.games.ea.maxis.sim-park +alt.games.ea.maxis.sim-safari +alt.games.ea.maxis.sim-tower +alt.games.ea.maxis.sim-town +alt.games.ea.origin +alt.games.ea.origin.abuse +alt.games.ea.origin.bioforge +alt.games.ea.origin.crusader +alt.games.ea.origin.cybermage +alt.games.ea.origin.privateer +alt.games.ea.origin.shadowcaster +alt.games.ea.origin.strike-command +alt.games.ea.origin.system-shock +alt.games.ea.origin.ultima +alt.games.ea.origin.wing-commander +alt.games.ea.origin.wings-of-glory +alt.games.ea.square-ea +alt.games.ea.square-ea.brave-fencer +alt.games.ea.square-ea.bushido-blade +alt.games.ea.square-ea.final-fantasy +alt.games.ea.square-ea.parasite-eve +alt.games.ea.square-ea.xenogears +alt.games.ea.starflight +alt.games.ea.westwood +alt.games.ea.westwood.blade-runner +alt.games.ea.westwood.command-n-conq +alt.games.ea.westwood.dune +alt.games.ea.westwood.games-ppl-play +alt.games.ea.westwood.kyrandia +alt.games.ea.westwood.lands-of-lore +alt.games.ea.westwood.monopoly +alt.games.ea.westwood.tiberian-sun +alt.games.eamon +alt.games.earth2025 +alt.games.elder-scrolls +alt.games.empire-deluxe +alt.games.enix +alt.games.europa +alt.games.everquest +alt.games.everquest.binaries +alt.games.everquest.class-balance +alt.games.everquest.guilds +alt.games.everquest.misc +alt.games.everquest.quests +alt.games.everquest.spell-casters +alt.games.everquest.tips +alt.games.everquest.trade-skills +alt.games.f1rs +alt.games.fallout +alt.games.fighting-fantasy +alt.games.final-fantasy +alt.games.final-fantasy.aeris.boo.hoo.hoo +alt.games.final-fantasy.aggta +alt.games.final-fantasy.config +alt.games.final-fantasy.cypher +alt.games.final-fantasy.edwynsvoice +alt.games.final-fantasy.fiction +alt.games.final-fantasy.hentai +alt.games.final-fantasy.inner.flame +alt.games.final-fantasy.inner.troll +alt.games.final-fantasy.meow +alt.games.final-fantasy.moderated +alt.games.final-fantasy.music +alt.games.final-fantasy.outer.exchange +alt.games.final-fantasy.people.humor.heh +alt.games.final-fantasy.pwi +alt.games.final-fantasy.research +alt.games.final-fantasy.rpg +alt.games.final-fantasy.tech-support +alt.games.final-fantasy.test +alt.games.firaxis.alpha-centauri +alt.games.firaxis.gettysburg +alt.games.forsaken +alt.games.fps-football +alt.games.freecell +alt.games.freeciv +alt.games.frp +alt.games.frp.dnd-util +alt.games.frp.gammaworld +alt.games.frp.live-action +alt.games.frp.nurpg +alt.games.frp.tekumel +alt.games.frp.verge +alt.games.fucking +alt.games.galileo +alt.games.gamesnetwork +alt.games.gangsters +alt.games.gazillionaire +alt.games.gb +alt.games.ghost-recon +alt.games.glider-pro +alt.games.glquake +alt.games.grand-prix-3 +alt.games.grand-prix-3.track-editing +alt.games.grand-theft-auto +alt.games.granturismo +alt.games.gunman +alt.games.half-life +alt.games.half-life.counterstrike +alt.games.half-life.counterstrike.cheats +alt.games.half-life.counterstrike.pcs +alt.games.half-life.editing +alt.games.half-life.modifications +alt.games.half-life.tfc +alt.games.half-life.tfclassic +alt.games.halo +alt.games.haven +alt.games.heavy-gear +alt.games.heretic +alt.games.hexen +alt.games.homeworld +alt.games.homm +alt.games.hyperiums +alt.games.ibmpc +alt.games.icewind-dale +alt.games.ideas +alt.games.illuminati +alt.games.interplay +alt.games.interplay.freespace +alt.games.irps +alt.games.jagged-alliance +alt.games.jedi-knight +alt.games.jediknight +alt.games.jyhad +alt.games.kali +alt.games.kesmai-legends +alt.games.ki +alt.games.killer-instinct +alt.games.kingpin +alt.games.kof +alt.games.lands-of-lore +alt.games.lanparty.fraglan +alt.games.longestjourney +alt.games.lucas-arts +alt.games.lucas-arts.afterlife +alt.games.lucas-arts.battlehawks +alt.games.lucas-arts.day-tentacle +alt.games.lucas-arts.finest-hour +alt.games.lucas-arts.full-throttle +alt.games.lucas-arts.grim-fandango +alt.games.lucas-arts.indiana-jones +alt.games.lucas-arts.indiana-jones.desktop-advent +alt.games.lucas-arts.indiana-jones.fate-atlantis +alt.games.lucas-arts.indiana-jones.infernal +alt.games.lucas-arts.indiana-jones.last-crusade +alt.games.lucas-arts.loom +alt.games.lucas-arts.maniac-mansion +alt.games.lucas-arts.monkey-island +alt.games.lucas-arts.mortimer +alt.games.lucas-arts.outlaws +alt.games.lucas-arts.secret-weapons +alt.games.lucas-arts.star-wars +alt.games.lucas-arts.star-wars.behind-magic +alt.games.lucas-arts.star-wars.dark-forces +alt.games.lucas-arts.star-wars.flight-school +alt.games.lucas-arts.star-wars.jedi-knight +alt.games.lucas-arts.star-wars.mysteries-sith +alt.games.lucas-arts.star-wars.rebel-assault +alt.games.lucas-arts.star-wars.rebellion +alt.games.lucas-arts.star-wars.rogue-squadron +alt.games.lucas-arts.star-wars.shadows-empire +alt.games.lucas-arts.star-wars.tie-fighter +alt.games.lucas-arts.star-wars.x-wing +alt.games.lucas-arts.star-wars.x-wing-vs-tie +alt.games.lucas-arts.star-wars.yoda-stories +alt.games.lucas-arts.the-dig +alt.games.lucas-arts.zak-mckraken +alt.games.lunar +alt.games.lynx +alt.games.mac.escape-velocity +alt.games.mame +alt.games.marathon +alt.games.mdestiny +alt.games.mechcommander +alt.games.mechwarrior2 +alt.games.mechwarrior3 +alt.games.mechwarroir3 +alt.games.megaman +alt.games.metal-gear-solid +alt.games.metal-knights +alt.games.microprose +alt.games.microprose.7th-legion +alt.games.microprose.addict-pinball +alt.games.microprose.breakthru +alt.games.microprose.cheat-codes +alt.games.microprose.civilization +alt.games.microprose.colonization +alt.games.microprose.dark-earth +alt.games.microprose.european-air +alt.games.microprose.falcon +alt.games.microprose.final-unity +alt.games.microprose.fleet-defender +alt.games.microprose.generations +alt.games.microprose.grand-prix +alt.games.microprose.gunship +alt.games.microprose.klingon-honor +alt.games.microprose.knight-moves +alt.games.microprose.m1-tank +alt.games.microprose.master-magic +alt.games.microprose.master-orion +alt.games.microprose.mech-commander +alt.games.microprose.old +alt.games.microprose.pirates-gold +alt.games.microprose.playstation +alt.games.microprose.qwirks +alt.games.microprose.railroad-tyc +alt.games.microprose.tetris +alt.games.microprose.the-gathering +alt.games.microprose.top-gun +alt.games.microprose.transport-tyc +alt.games.microprose.ultimate-race +alt.games.microprose.websites +alt.games.microprose.worms +alt.games.microprose.x-com +alt.games.microsift +alt.games.microsoft +alt.games.microsoft.age-of-empires +alt.games.microsoft.age-of-kings +alt.games.microsoft.ants +alt.games.microsoft.arcade +alt.games.microsoft.barney +alt.games.microsoft.baseball-3d +alt.games.microsoft.bridge-too-far +alt.games.microsoft.cart-racing +alt.games.microsoft.cfs +alt.games.microsoft.chaos-island +alt.games.microsoft.cheat-codes +alt.games.microsoft.close-combat +alt.games.microsoft.combat-flight +alt.games.microsoft.dilbert +alt.games.microsoft.fighter-ace +alt.games.microsoft.flight-sim +alt.games.microsoft.flight-sim.efis98 +alt.games.microsoft.golf +alt.games.microsoft.input-devices +alt.games.microsoft.macintosh +alt.games.microsoft.monster-truck +alt.games.microsoft.motocross-mad +alt.games.microsoft.neverhood +alt.games.microsoft.old +alt.games.microsoft.pinball-arcade +alt.games.microsoft.rise-of-rome +alt.games.microsoft.tanarus +alt.games.microsoft.urban-assault +alt.games.microsoft.websites +alt.games.microsoft.windows-ce +alt.games.microsoft.zone +alt.games.midtown-madness +alt.games.milkcaps.pogs +alt.games.mk +alt.games.mk.mk3 +alt.games.mk2 +alt.games.monkey-island +alt.games.moo2 +alt.games.mordor +alt.games.mornington.crescent +alt.games.mornington.cresent +alt.games.mortal-kombat +alt.games.mtrek +alt.games.mule +alt.games.myst +alt.games.myst.3exile +alt.games.myth +alt.games.n64 +alt.games.need-for-speed +alt.games.neopets +alt.games.netrek.paradise +alt.games.nettvshows.gamasutratv +alt.games.nettvshows.game.time.prime.time +alt.games.nettvshows.gametime +alt.games.nettvshows.inside.the.pgl +alt.games.nettvshows.newsexpress +alt.games.nettvshows.quakecast +alt.games.nintendo.gamegwatch +alt.games.nintendo.pokemon +alt.games.nintendo.pokemon.anti-team-rocket +alt.games.nintendo.pokemon.cypher +alt.games.nintendo.pokemon.goldgsilver +alt.games.nintendo.pokemon.hentai +alt.games.nintendo.zelda +alt.games.oddworld +alt.games.omega +alt.games.operation-flashpoint +alt.games.outlaws +alt.games.pc-calcio-7 +alt.games.persistent-world +alt.games.petz +alt.games.phantasy-star +alt.games.ping-pong +alt.games.planetarion +alt.games.play-by-mail.quest +alt.games.playmaker-football +alt.games.playstation +alt.games.pokemon +alt.games.pokemon.cards +alt.games.powervr +alt.games.programming +alt.games.project-igi +alt.games.quake +alt.games.quake.future-vs-fantasy +alt.games.quake2 +alt.games.quake3 +alt.games.quake3.whining +alt.games.quakeworld.ukcml +alt.games.rac-rally +alt.games.rainbow-six +alt.games.rainbow-six.aggression +alt.games.rctycoon +alt.games.re-volt +alt.games.re-volt.cars +alt.games.re-volt.tracks +alt.games.redalert +alt.games.redalert2 +alt.games.redbaron +alt.games.reinventing.help +alt.games.resident-evil +alt.games.riddler +alt.games.riven +alt.games.rpg +alt.games.rpg.club.qfg +alt.games.rpg.ix +alt.games.rpg.live-action.high-fantasy +alt.games.rpg.quadrant +alt.games.rpg.spacequest +alt.games.rpg.startrek.quadrant +alt.games.rpg.ufa +alt.games.schoolboysixes +alt.games.screlics +alt.games.sensi-soccer +alt.games.sf2 +alt.games.shadow-warrior +alt.games.shadowrun +alt.games.shared-reality.fed-frontier +alt.games.shared-world.nexus +alt.games.shogo-mad +alt.games.sierra.swat +alt.games.sierra.therealm +alt.games.simcity +alt.games.simcity2000 +alt.games.simcity2000.SimPosium +alt.games.simutrans +alt.games.sin +alt.games.soccer +alt.games.soccer.cihf +alt.games.sony-playstation +alt.games.sony.yaroze +alt.games.soul.reaver +alt.games.spiritwars +alt.games.sports-leagues +alt.games.spy-vs-spy +alt.games.squaresoft.chrono +alt.games.sshock2 +alt.games.star-ocean +alt.games.starcraft +alt.games.starcraft.broodwars +alt.games.starshield +alt.games.starsiege.tribes +alt.games.startrek.ssg +alt.games.stellar-civ +alt.games.stunt-island +alt.games.subspace +alt.games.system-shock-2 +alt.games.system-shock2 +alt.games.ta-kingdoms +alt.games.tanarus +alt.games.tetrinet +alt.games.the-sims +alt.games.the-sloan +alt.games.the-yow +alt.games.thief-dark-project +alt.games.thol-far +alt.games.tiberian-sun +alt.games.tie-fighter +alt.games.tie-fighters +alt.games.tolkien.rpg +alt.games.tombraider +alt.games.torg +alt.games.total-annihil +alt.games.total-annihil.editing +alt.games.treasurequest +alt.games.twinsens.odyssey +alt.games.ultima-online +alt.games.ultima-online.norworld +alt.games.ultima.dragons +alt.games.unidom +alt.games.unreal +alt.games.unreal.ed +alt.games.unreal.fortress +alt.games.unreal.tournament +alt.games.unreal.tournament.clans +alt.games.unreal.tournament2003 +alt.games.upcoming-3d +alt.games.utiopia +alt.games.utopia +alt.games.v2000 +alt.games.vampire.the.masquerade +alt.games.vampire.tremere +alt.games.vga-planets +alt.games.vgaplanets4 +alt.games.video +alt.games.video.alien-trilogy +alt.games.video.classic +alt.games.video.coming-soon +alt.games.video.digitiser +alt.games.video.emulation +alt.games.video.fps +alt.games.video.game-boy +alt.games.video.historic +alt.games.video.import.japanese +alt.games.video.n64links +alt.games.video.nintendo-64 +alt.games.video.nintendo-64.faqs +alt.games.video.nintendo-64.zelda.hwest +alt.games.video.nintendo.gameboy.advance +alt.games.video.nintendo.gamecube +alt.games.video.playstation +alt.games.video.sega-dreamcast +alt.games.video.sega-saturn +alt.games.video.sega-saturn.faqs +alt.games.video.shooters +alt.games.video.sony +alt.games.video.sony-playstation +alt.games.video.sony-playstation.faqs +alt.games.video.sony-playstation2 +alt.games.video.sony.playstation.faqs +alt.games.video.super-nintendo +alt.games.video.tiger.game-com +alt.games.video.xbox +alt.games.warcraft +alt.games.warcraft.draenor +alt.games.wargames +alt.games.warlords3 +alt.games.wavecatcher +alt.games.wc3 +alt.games.web.hsx +alt.games.whitewolf +alt.games.whitewolf.mage +alt.games.whitewolf.rage +alt.games.wing-commander +alt.games.wireplay +alt.games.wolfenstein +alt.games.worms +alt.games.wrestling +alt.games.wwf-smackdown +alt.games.x-com +alt.games.x-wing +alt.games.x-wing.alliance +alt.games.xband +alt.games.xpilot +alt.games.xtrek +alt.gameshark.codes +alt.gammaforce +alt.gammaforce.irc +alt.gammaforce.warez +alt.gangs +alt.gangs.bloods +alt.gap.international.chat +alt.gap.international.enquiries +alt.gap.international.sales +alt.gap.international.support +alt.garden.commando +alt.garden.mine.is.better.than.yours +alt.garden.pond.chat +alt.garet +alt.garetjax +alt.gathering.rainbow +alt.gathering.woodstock +alt.gave.head.to.a.moose.montgomery-wood +alt.gays.jay-denebeim +alt.gayteen +alt.gayteen.personals +alt.gaza +alt.gaza.strip +alt.gaza.strip.search +alt.gbbqy.kmoipsiua +alt.gd.c.bltcu.mwv.oeh.j.eajoydimp +alt.gdkdeisqdsd +alt.gdz.fkv.omop +alt.geek +alt.geek.supremacy +alt.gehirn.los +alt.geld +alt.genealogy +alt.genealogy.surnames.collingridge +alt.genius.alan-bstard +alt.genius.anus +alt.genius.big-daddy-zeus +alt.genius.bill-palmer +alt.genius.bill-palmer.moderated +alt.genius.cuchulain +alt.genius.cypher +alt.genius.dave-ratcliffe +alt.genius.doom +alt.genius.musical.ward-hog +alt.genius.only-sane-man +alt.genius.panikovsky +alt.genius.pat-burke +alt.genius.rupert-hangnail +alt.genius.tom-harden +alt.geo-software +alt.gerbil.stuck.in.ass.jay-denebeim +alt.get.a.life +alt.get.a.life.jay-denebeim +alt.get.a.life.nintendo +alt.get.a.life.nintendo.addicts +alt.gf.s.xn.t +alt.ggj.z +alt.ghost.hunters +alt.gib +alt.gibraltar +alt.gicho +alt.gin +alt.girlie.crybaby.booty +alt.gjach.x.oxtux.xw.atag.jecxz.d.m.jfee.esdpg.iosp +alt.gk.hx.m.i +alt.gkha +alt.gkytj.g.w.zktqwmxn.x.lw.ashxkw.se.zd.z.f.lu.b +alt.global-warming +alt.global.chat +alt.global.quake +alt.global.quake.2 +alt.global.quake.team-fortress +alt.global.unreal +alt.gm +alt.gn.p.y.o.zh +alt.gnashing-teeth +alt.gnn.exodus +alt.gnutella +alt.go.go.nancy +alt.go.to.hell.j.a.y-d.e.n.e.b.e.i.m +alt.goat +alt.goat.boy +alt.goat.cypher +alt.goats.run.from.jay-denebeim +alt.gobment.lones +alt.gobshite +alt.god +alt.god.cypher +alt.god.grubor +alt.god.timothy.sutter +alt.goddess.ayla +alt.goddess.finkelstein +alt.goddess.timothy.sutter +alt.gods +alt.golf.forsale +alt.golfing-with-orson-beene +alt.good.morning +alt.good.news +alt.goodpaster +alt.goohead +alt.gopher +alt.gossip.celeberties +alt.gossip.celebrities +alt.gossip.chs97 +alt.gossip.non-celebrities +alt.gossip.royalty +alt.gothic +alt.gothic.announce +alt.gothic.architecture +alt.gothic.convergence +alt.gothic.culture +alt.gothic.cybergoth +alt.gothic.fashion +alt.gothic.francophone +alt.gothic.imperia +alt.gothic.music +alt.gothic.nightclubs +alt.gothic.nights +alt.gothic.parenting +alt.gothic.pretentions +alt.gothic.suicide +alt.gourmand +alt.gov.meeting.techgoal +alt.government.abuse +alt.government.employees +alt.government.ssd-benefits.moderated +alt.government.ssdi-benefits +alt.government.ssdi-benefits.moderated +alt.government.ssdi.benefits +alt.gqeer.m.yg.bs.oc.rcdyjgj +alt.grad-student.tenured +alt.grad.skool.sux +alt.graffiti +alt.grant +alt.graphics +alt.graphics.bryce +alt.graphics.cthugha +alt.graphics.electrogig.ex-worker +alt.graphics.electrogig.users +alt.graphics.gifanimation +alt.graphics.illustrator +alt.graphics.mojoworld +alt.graphics.photoshop +alt.graphics.pixutils +alt.graphics.tablet +alt.graphics.tablets +alt.graphics.truespace +alt.great-lakes +alt.great.ass +alt.great.ass.paulina +alt.great.ass.wheaton +alt.greece +alt.greek-lawyers +alt.greg.is.snoopy +alt.greggy +alt.grelb +alt.grep +alt.grok +alt.groppi +alt.groppi.die.die.die +alt.gsw.m.i +alt.guernsey +alt.guess-whats.in-my-pants +alt.guinea.pig.conspiracy +alt.guitar +alt.guitar.amplifiers +alt.guitar.amps +alt.guitar.bass +alt.guitar.beginner +alt.guitar.effects +alt.guitar.lap-pedal +alt.guitar.rickenbacker +alt.guitar.tab +alt.guns +alt.gx.e +alt.h +alt.h.fxk.wt.e.p.p.cjg.u +alt.h.fy.b.q.v.cvbu +alt.h.gjjfekpxdl.pse.fvtl.iv.zg.kcxsaqr.vd.oi.npu.n +alt.h.gs.gtbqar.dec +alt.h.gzzou.vx.fo.mxf.nknjd.q.l +alt.h.ksn.q.klr.m +alt.h.le +alt.h.oikp.pjpgrazvgo +alt.h.p +alt.h.y.c.mpjile.s.xd.m +alt.h0e +alt.hack +alt.hack.nl +alt.hack.tr +alt.hacker +alt.hacker.avatar +alt.hacker.org-gcf +alt.hacker.slime_molds +alt.hackers +alt.hackers.anti-pedo +alt.hackers.anti-pedos +alt.hackers.aol.sucks +alt.hackers.attila_hack +alt.hackers.cough.cough +alt.hackers.cough.cough.cough +alt.hackers.cough.cough.cough1 +alt.hackers.crybabies +alt.hackers.debate +alt.hackers.discuss +alt.hackers.groups +alt.hackers.groups.lod +alt.hackers.groups.moderated +alt.hackers.hackerzlair +alt.hackers.malicious +alt.hackers.wicked-samurai +alt.hackers.wickedsamuria +alt.hacking +alt.hacking.advanced +alt.hacking.in.progress +alt.hackintosh +alt.hackintosh.mp0werd +alt.hackintosh.serials +alt.hacknirvana +alt.hahaha +alt.hahsdigi +alt.hair-removal +alt.hairinfo.ernie.fiction +alt.hale-bobb +alt.halfbakery +alt.halloween.boo +alt.ham-radio +alt.ham-radio.amtor +alt.ham-radio.binaries +alt.ham-radio.dxing +alt.ham-radio.hf +alt.ham-radio.marketplace +alt.ham-radio.mods +alt.ham-radio.morse +alt.ham-radio.packet +alt.ham-radio.rtty +alt.ham-radio.slowscan +alt.ham-radio.uwave +alt.ham-radio.vhf-uhf +alt.hangover +alt.happy +alt.happy.birthday +alt.happy.birthday.to +alt.happy.birthday.to.me +alt.happy.valley +alt.happyclown +alt.hard-drive +alt.hard-drive.lesbian +alt.hardcore +alt.hardware-theft.compaq.zed +alt.harpa +alt.hash.house.harriers +alt.hate.a2000 +alt.hate.areku +alt.hate.kelvinmckenzie +alt.hate.lemonhead +alt.hate.sheilagreen +alt.hate.shilo +alt.haunting.hoax +alt.haunting.investigation +alt.haunting.serious +alt.hawk.is.a.dyke +alt.hawk.sucks.dick +alt.hcstuik.jxs +alt.head.made.of.wood.montgomery-wood +alt.head.stuck.in.ass.montgomery-wood +alt.healing.flower-essence +alt.healing.reiki +alt.health +alt.health.ayurveda +alt.health.barleygreen +alt.health.biofeedback +alt.health.cfids-action +alt.health.cfs +alt.health.dental-amalgam +alt.health.diabetes +alt.health.fasting +alt.health.hemochromatosis +alt.health.herpes.moderated +alt.health.hmo +alt.health.massage-therapy +alt.health.oxygen-therapy +alt.health.policy.drug-approval +alt.health.smoking.advocacy +alt.health.systems +alt.health.virus.cure.alternatives +alt.hektors-hadeaway +alt.help +alt.help.businesscalc +alt.help.me.get.out.of.trouble.trouble.trouble-please +alt.help.wanted +alt.help.webspace-users +alt.help.with.homework +alt.help.with.homework.compsci +alt.hemp +alt.hemp.octa +alt.hemp.politics +alt.hemp.recreational +alt.hentai.sailor-moon +alt.heraldry +alt.heraldry.sca +alt.heritage.front +alt.herp +alt.herp.med +alt.herpes +alt.herpes.personals +alt.hey.quad.nice.ass +alt.hf.sycy +alt.hg.fnf.nkhu.pm +alt.hgo +alt.hi-po.big-block-ford-mercury +alt.hi-po.mopar +alt.hi-po.mopars +alt.hi.are.you.cute +alt.hi.im.a.babe +alt.highfields.school +alt.hillary-c.newt-g.binaries.pictures.erotica +alt.hilliterate.noarthern.bastards +alt.hindu +alt.history +alt.history.abe-lincoln +alt.history.american +alt.history.american.ap-exam +alt.history.ancient-egypt +alt.history.ancient-worlds +alt.history.british +alt.history.colonial +alt.history.costuming +alt.history.exile +alt.history.future +alt.history.hannigan.liar +alt.history.living +alt.history.ocean-liner.titanic +alt.history.ocean-liners +alt.history.ocean-liners.titanic +alt.history.punitive.expedition +alt.history.richard-iii +alt.history.what-if +alt.hitler.reincarnated.jay-denebeim +alt.hjbs.wuyp +alt.hnnc.m +alt.hobbies.beekeeping +alt.hobbies.boyscouts +alt.hobbies.boyscouts.oa +alt.hobbies.candlemaking +alt.hobbies.racing-pigeons +alt.hobbies.reenactor +alt.hobbies.serial-murder +alt.hobbies.slotcars +alt.hoc.s +alt.hocom +alt.hollow-earth +alt.hollywood +alt.holocaust.cypher +alt.holocaust.kpn +alt.holoworld.rpg +alt.holoworld.rpg.startrek +alt.holy.ofm +alt.hom.mfz.w +alt.home +alt.home-theater +alt.home-theater.announce +alt.home-theater.marketplace +alt.home-theater.misc +alt.home.automation +alt.home.cleaning +alt.home.lawn.garden +alt.home.repair +alt.homebrewing +alt.homeless.hetnet +alt.homepages +alt.homepages.designtips +alt.homepages.designtips.uk +alt.homepages.geocities +alt.homepages.xoom +alt.homosexual +alt.homosexual.falimortis +alt.homosexual.jay-denebeim +alt.homosexual.lesbian +alt.homosexual.music +alt.homosexuality +alt.homosexuality.death-metal +alt.homosexuals +alt.honda +alt.honesty +alt.hoogbegaafd.nl +alt.hoovers +alt.horology +alt.horrible.table-manners.scott-abraham +alt.horror +alt.horror.creative +alt.horror.cthulhu +alt.horror.cypher +alt.horror.elmstreet +alt.horror.shub-internet +alt.horror.video.collectable +alt.horror.werewolves +alt.horrorcomix +alt.horseback.riding +alt.horsecare.basics +alt.hotel666 +alt.hotels.wyndham-sucks +alt.hotrod +alt.housing +alt.housing.nontrad +alt.houston.westside.recovery +alt.how-to +alt.how.to.create.a.newsgroup +alt.how.to.have.a.newsgroup.created +alt.how.to.have.a.newsgroup.deleted +alt.how.to.join.the.mafia +alt.how.to.moderate.a.newsgroup +alt.hp.r.quwuumf.ejb +alt.hq.no.m +alt.ht.knvrjo.s.kivzh.do.g +alt.html +alt.html.critique +alt.html.dhtml +alt.html.editors.enhanced-html +alt.html.editors.evrsoft +alt.html.editors.toppage +alt.html.editors.webedit +alt.html.server-side +alt.html.tags +alt.html.web-accessibility +alt.html.webedit +alt.html.writers +alt.hufwoo.v.noqsphc.b.edjc.j.sfiley.f +alt.human-brain +alt.humor +alt.humor.best-of-usenet +alt.humor.best-of-usenet.d +alt.humor.bluesman +alt.humor.catbox-litter +alt.humor.dutch +alt.humor.dutch.terrace +alt.humor.holocaust +alt.humor.jewish +alt.humor.jewish.anti-goy +alt.humor.jewish.genocide +alt.humor.jewish.mendacious +alt.humor.jewish.netcop +alt.humor.lists +alt.humor.mad-magazine +alt.humor.mylarcity +alt.humor.net-abuse +alt.humor.oracle +alt.humor.parodies +alt.humor.puns +alt.hurricane +alt.hurricane.andrew +alt.huya +alt.huyt.d.mt.fjf.oh +alt.hvac +alt.hvac.design +alt.hvuwpa.b.ipwx.cp +alt.hx.c +alt.hydrogen.research +alt.hydroponics +alt.hygiene.male +alt.hypertext +alt.hyperwave +alt.hypnosis +alt.hypnosis.hypnotherapy +alt.hypnotherapy +alt.hyxi.gu.zb.ur +alt.i-love-you +alt.i-love-you.zvjezdana +alt.i.also.like.to.fuck.chickens.whilst.wearing.rubber.knickers +alt.i.am.drunk.and.i.have.to.take.shit +alt.i.cant.get.laid.so.i.rmgroup.jay-denebeim +alt.i.cant.type +alt.i.cuss.you.bad +alt.i.dunno.what.do.you.feel.like.doing +alt.i.gbxt.daylzqkwwmwudvtgcvg.xk.i.ld.sv.fze.d.lpuw +alt.i.hate.myself.and.want.to.die +alt.i.ijb +alt.i.just.felt.like.making.this.group +alt.i.lcq.zmh +alt.i.like.to.fuck.chickens.whilst.wearing.rubber.knickers +alt.i.love.abbie.cummings +alt.i.love.rabbit.grrl +alt.i.odhhs.tz.oqwupowlg.oormh +alt.i.pd.s.fjixh +alt.i.rexw +alt.i.rmgroup.because.i.am.a.penis.montgomery-wood +alt.i.rmgroup.because.i.was.born.without.a.brain.montgomery-wood +alt.i.rmgroup.because.i.was.born.without.a.penis.montgomery-wood +alt.i.rmgroup.therefore.i.am.jay-denebeim +alt.i.s.onx.khs.dhtlyqf.s +alt.i.still.love.my.ex +alt.i.want.to.fuck.dima.safonov +alt.i.want.to.fuck.dima.safonov.in.his.sweet.little.ass +alt.i.x +alt.i.xifknegrpxpwkyv.ytti.et.n.ys.cxpy.vebwoxyppp.hqsb.ba.lnm +alt.ian.is.mean.to.poor.amber +alt.iatse.forum +alt.ibc +alt.ibc.guide.badge.trading +alt.ibc.scout.badge.trading +alt.ibk +alt.iblejni.s.lf.b +alt.ibm.warez +alt.ibsm.hi.m.qqg.mzqc +alt.icc +alt.icelandic +alt.icelandic.waif.bjork.bjork.bjork +alt.iceman +alt.icq +alt.icy.is.a.fag +alt.idc.h.wmw +alt.identify-theft +alt.identify-theft.cypher +alt.idesk +alt.idiot.andrew-gierth +alt.idiot.avraham-leibovitch +alt.idiot.avraham-leibovitch.fucks.boys +alt.idiot.david-farrar +alt.idiot.edmond-bunny +alt.idiot.hannigan.rikijo.thorne.spank +alt.idiot.howard-knight +alt.idiot.illogical-menace +alt.idiot.jay-denebeim +alt.idiot.jay-denebeim.eats.mice +alt.idiot.jay-denebeim.eats.spiders +alt.idiot.jerry-brenner +alt.idiot.jon-perry +alt.idiot.kalisch +alt.idiot.ktulu +alt.idiot.louis-epstein +alt.idiot.marsrules +alt.idiot.montgomery-wood +alt.idiot.moo2 +alt.idiot.nazi +alt.idiot.nazi.fuckstick.hawk +alt.idiot.richard-the-stupid +alt.idiot.shut-up-cunter +alt.idiot.sputers +alt.idiot.swallow +alt.idiot.w-van-heusden +alt.idiot.wolf-moonchild +alt.idiots +alt.ie.ftc +alt.ietu-trolls +alt.igclick +alt.igclick.chat +alt.igclick.mutual.support +alt.igclick.sw +alt.iglou.maxwell +alt.igy.at.altavista.com +alt.ihlq +alt.illinois.schools.highschools.niles-west +alt.illuminati +alt.illustration +alt.im.angry +alt.im.having.a.rotten.day +alt.imag.test3 +alt.image.medical +alt.imbecile.capt-kundalini.nazi-troll +alt.imbecile.capt-kundalini.stalker +alt.imbecile.paedophile.barry-bouwsma.binariez +alt.imbecile.uriel-and-poetta.sleazoids +alt.imbecilli.falliti +alt.imbecilli.plurinick +alt.immersion +alt.immersion.d +alt.immersion.duffman +alt.immortal +alt.immortal.super-grover +alt.impeach +alt.impeach.bush +alt.impeach.clinton +alt.impero +alt.impotence.jay-denebeim +alt.impotence.jay-denebeim.denial +alt.imsck +alt.incompetence.phil-oliver +alt.individualism +alt.industrial +alt.industrial.computing +alt.inet-providers.canada.channel1 +alt.infertility +alt.infertility.alternatives +alt.infertility.parenting +alt.infertility.pregnancy +alt.infertility.primary +alt.infertility.secondary +alt.infertility.surrogacy +alt.info-science +alt.info-science.seti +alt.insane.person.montgomery-wood +alt.insight +alt.intel +alt.intenet.services +alt.interlabs +alt.internet +alt.internet.access +alt.internet.access-wanted +alt.internet.access.wanted +alt.internet.appliances +alt.internet.bbs +alt.internet.commerce +alt.internet.forsale +alt.internet.free-services +alt.internet.guru +alt.internet.i-box +alt.internet.klaas.poop.stick +alt.internet.media-coverage +alt.internet.newservers +alt.internet.p2p +alt.internet.pop.culture +alt.internet.providers +alt.internet.providers.africa +alt.internet.providers.america +alt.internet.providers.asia-oceany +alt.internet.providers.canada.channel1 +alt.internet.providers.europe +alt.internet.providers.europe.relcom-sucks +alt.internet.providers.igclick +alt.internet.providers.redhotant +alt.internet.providers.screaming.net +alt.internet.providers.uk +alt.internet.providers.uk.aol +alt.internet.providers.uk.breathe +alt.internet.providers.uk.btinternet +alt.internet.providers.uk.free +alt.internet.providers.uk.igclick +alt.internet.providers.usa.dsl +alt.internet.radio +alt.internet.research +alt.internet.resellers +alt.internet.search +alt.internet.search-engines +alt.internet.services +alt.internet.stuff +alt.internet.talk +alt.internet.talk-radio +alt.internet.talk.bizarre +alt.internet.talk.haven +alt.internet.talk.radio +alt.internet.wap +alt.internet.wireless +alt.internet.worldsaway +alt.internet.yokota.general +alt.internic.billing.problems +alt.intsec +alt.inventors +alt.inventorworld +alt.invest +alt.invest.fsbo +alt.invest.market +alt.invest.market.crash +alt.invest.penny +alt.invest.penny-stock +alt.invest.penny-stocks +alt.invest.real-estate +alt.invest.real-estate.methods +alt.invest.technical-analysis.omega +alt.investors +alt.io +alt.iomega.zip +alt.iomega.zip.jaz +alt.iomega.zip.jazz +alt.iopener +alt.ip.ng +alt.ipl.business +alt.ipl.discussion +alt.ipl.messages +alt.ipl.mp3.encrypted +alt.ipl.passwords +alt.ipl.req +alt.iq.endless-discussion +alt.iqwjdg +alt.irc +alt.irc-progs.megaliths.virc +alt.irc-progs.virc +alt.irc.agcm +alt.irc.alt.games.champ-man +alt.irc.announce +alt.irc.bartender +alt.irc.bitchx +alt.irc.bots +alt.irc.bots.eggdrop +alt.irc.brasirc +alt.irc.camelot +alt.irc.channel.fortress +alt.irc.channel.macintosh +alt.irc.channel.scuba +alt.irc.channels.lucca +alt.irc.corruption +alt.irc.corruption.log.log.log +alt.irc.cuss +alt.irc.dal-net.tiny-toons +alt.irc.dalnet +alt.irc.dalnet.channels.windows95 +alt.irc.digi-98 +alt.irc.efnet +alt.irc.fan.slackie +alt.irc.fan.slackie.nude +alt.irc.fan.slackie.nudeo +alt.irc.fefnet +alt.irc.gamez.net +alt.irc.hackers_uk +alt.irc.hacking +alt.irc.hacku +alt.irc.hottub +alt.irc.ircii +alt.irc.jeopardy +alt.irc.jungle +alt.irc.kewl +alt.irc.lamer.redknapp.die.die.die +alt.irc.mirc +alt.irc.mirc.scripts +alt.irc.mirc.scripts.pizza +alt.irc.network.wwfin +alt.irc.networks +alt.irc.ops +alt.irc.ops.kiss.my.ass +alt.irc.peacefull +alt.irc.pirch +alt.irc.psycloud +alt.irc.questions +alt.irc.raptornet +alt.irc.ratsnest +alt.irc.recovery +alt.irc.romance +alt.irc.scripts +alt.irc.servers +alt.irc.sex +alt.irc.sirc +alt.irc.starlink +alt.irc.subcrew.hackers +alt.irc.superchat +alt.irc.undernet +alt.irc.undernet.30plus +alt.irc.undernet.authors +alt.irc.undernet.channels +alt.irc.undernet.channels.new2irc +alt.irc.undernet.ska +alt.irc.undernet.warcraft +alt.irc.virc +alt.irc.webnet +alt.irc.za +alt.irish +alt.irish.democrats +alt.irish.republican +alt.irj.u.jwbdjvjpl +alt.ironfist +alt.irony +alt.irs.class-action +alt.irs.general +alt.is +alt.is.bill.gates.satan +alt.is.doomed +alt.is.too +alt.isd.net +alt.islam.sufism +alt.ispge +alt.issues.bogus.rmgroups.montgomery-wood +alt.ita.anime.info +alt.ita.anime.manga +alt.italia +alt.italian.anime-manga +alt.itil.nl +alt.iuie +alt.ivogmg +alt.ivorytower +alt.iyknwrs.mfx +alt.iyl +alt.j +alt.j.ghz +alt.j.mvx.gx.ftgj +alt.j.np.ib.n +alt.jacek +alt.jacek.dyskusje +alt.january +alt.javawoman +alt.jay-denebime.hitler.reincarnated +alt.jaybuzin +alt.jays-bitch.curtis-desjardins +alt.jays-parrot.hawk +alt.jedi-of-ro0t +alt.jedi-of-root +alt.jeep-l +alt.jeff.dr +alt.jell-o.fetish +alt.jen-is-beavis +alt.jerk.george.w.bush +alt.jerry.kuntz.cool.dude +alt.jerzu +alt.jesse-helms.sucks +alt.jewq +alt.jfif.rose.leaf.club +alt.jg.i +alt.jh.pivlx.cwfvji.y +alt.jjj.jjj +alt.jjs.uuqb +alt.jncreativethinking +alt.jnj +alt.job +alt.job.3 +alt.job.3.14 +alt.job.gooley +alt.job.ken-johnson +alt.jobs +alt.jobs.as400 +alt.jobs.gis.offered +alt.jobs.gis.resumes +alt.jobs.jobsearch +alt.jobs.nw-arkansas +alt.jobs.offered +alt.jobs.overseas +alt.jobs.spam +alt.john-denver.dead.dead.dead +alt.john-oneill +alt.john.pics +alt.jokes +alt.jokes.limericks +alt.jokes.pentium +alt.journalism +alt.journalism.criticism +alt.journalism.drudge +alt.journalism.drudgereport +alt.journalism.freelance +alt.journalism.gay-press +alt.journalism.gonzo +alt.journalism.gsn +alt.journalism.music +alt.journalism.newspapers +alt.journalism.newspapers.wkly-worldnews +alt.journalism.photo +alt.journalism.print +alt.journalism.students +alt.jraxis +alt.juddians +alt.juddians.bbb +alt.july +alt.june +alt.junk +alt.just-a-student.like-you +alt.just.testing +alt.just.trolling +alt.justin.what.are.you.doing.tonight +alt.justnormal +alt.juttu.homma +alt.jvhg.a +alt.jx.o +alt.jyotish +alt.k +alt.k.ibyn +alt.k.iig +alt.k.vtg +alt.k12.chat.junior +alt.k12.hat.junior +alt.kaazmann-sucks-cock +alt.kalbo +alt.kaoz.the.crybaby +alt.karaoke +alt.karate.shotokan +alt.karen +alt.katala +alt.kate.is-a-whore +alt.kawaly +alt.kazema.binaries +alt.kc.bbs +alt.kdq +alt.kelly-havel +alt.kem +alt.ketchup +alt.key.west +alt.ki.u +alt.kids-talk +alt.kids-talk.penpals +alt.kidstalk +alt.kill +alt.kill-dave-zero +alt.kill.usenet +alt.killers.mass +alt.killers.serial +alt.kimbihugs.bsb +alt.kiqp.butf.f +alt.kitesurfing +alt.klagen.athome.nl +alt.kmart +alt.knightshadow +alt.knijper +alt.knoxfreevoice +alt.koby.wuz.here +alt.kook.of.month.phil-oliver +alt.kook.ron-reaugh +alt.kooky.scientists +alt.korea.puppy-killers.curtis-desjardins +alt.kos.qf.gk.u.nvmqthk.rmpsdr.v.ffpfceofbkc.h.p.desg.r.k.gg.bg.wws.hvn +alt.kosovo-relief +alt.kosovo-relief.missing.persons.register.yourself +alt.kotagor +alt.kotagor.fan.loaf-head +alt.kotagor.sports.kook-hunting +alt.kp.txuutxaazuy.hy +alt.kq.p +alt.krecik.berecik +alt.krunk +alt.ku86s6 +alt.kui +alt.kuryakin.abh-council +alt.kuwait +alt.kuwait.icq +alt.kuwait.irc +alt.kuwait.news +alt.kxqr.ij.yq +alt.kxwgimkku +alt.kzrqoj +alt.l.ei.mg +alt.l.hrpw +alt.l.k.p.mvjtv +alt.l.l +alt.l.nnbucs +alt.l.tctwp.fl.qcy +alt.l.v.atnlaj +alt.lacrosse +alt.lambda.education +alt.lamers.atma +alt.lamers.james-koput.net-abuser +alt.lamers.janet-reno +alt.lamers.netcop +alt.lamers.netcop.david-farrar +alt.lamers.news.admin.net-abuse.misc +alt.lamers.news.admin.net-abuse.usenet +alt.lamers.pagan.donal +alt.lamers.rage-machine +alt.lamers.usa.janet-reno +alt.lameys-lair +alt.lampiao +alt.landscape.architecture +alt.lang +alt.lang.4gl +alt.lang.asm +alt.lang.basic +alt.lang.basic.compiler +alt.lang.ca-realizer +alt.lang.clarion +alt.lang.databus +alt.lang.delphi +alt.lang.design +alt.lang.euphoria +alt.lang.gfa-basic +alt.lang.intercal +alt.lang.layout +alt.lang.powerbasic +alt.lang.radix +alt.lang.s-lang +alt.lang.vb5.rumors +alt.lang.vrml +alt.language +alt.language.artificial +alt.language.artificial.ngl +alt.language.balita-business +alt.language.balita-news +alt.language.cebuano +alt.language.cebunews +alt.language.ebonics +alt.language.english.spelling.reform +alt.language.eubonics +alt.language.hindi +alt.language.kapampangan +alt.language.latin +alt.language.patterns +alt.language.poetry.pure-silk +alt.language.spanish +alt.language.tanji +alt.language.telugu.literature +alt.language.urdu.poetry +alt.languages.afrikaans +alt.languages.albanian +alt.languages.alsatain +alt.languages.amdo +alt.languages.arabic +alt.languages.arapaho +alt.languages.asturian +alt.languages.bai +alt.languages.basque +alt.languages.bengali +alt.languages.bhojpuri +alt.languages.breton +alt.languages.bulgarian +alt.languages.caddo +alt.languages.cajun +alt.languages.calo +alt.languages.catalan +alt.languages.chechen +alt.languages.cornish +alt.languages.corsican +alt.languages.czech +alt.languages.danish +alt.languages.deccan +alt.languages.dutch +alt.languages.emok +alt.languages.english +alt.languages.estonian +alt.languages.eyak +alt.languages.fala +alt.languages.faroese +alt.languages.farsi +alt.languages.finnish +alt.languages.french +alt.languages.frisian +alt.languages.german +alt.languages.greek +alt.languages.gujarati +alt.languages.han +alt.languages.hani +alt.languages.hawaiian +alt.languages.hindi +alt.languages.hungarian +alt.languages.icelandic +alt.languages.igbo +alt.languages.ingush +alt.languages.irish +alt.languages.italian +alt.languages.japanese +alt.languages.javanese +alt.languages.jinyu +alt.languages.jutish +alt.languages.kadar +alt.languages.kannada +alt.languages.kiribati +alt.languages.kombio +alt.languages.lakota +alt.languages.laro +alt.languages.latin +alt.languages.latvian +alt.languages.lithuanian +alt.languages.luxembourgeois +alt.languages.maca +alt.languages.macedonian +alt.languages.magahi +alt.languages.malay +alt.languages.malayalam +alt.languages.maltese +alt.languages.mandarin +alt.languages.manx +alt.languages.marathi +alt.languages.marwari +alt.languages.moksha +alt.languages.napali +alt.languages.norwegian +alt.languages.nowegian +alt.languages.oriya +alt.languages.panjabi +alt.languages.polari +alt.languages.polish +alt.languages.portuguese +alt.languages.provencal +alt.languages.romanian +alt.languages.russian +alt.languages.saami +alt.languages.saxon +alt.languages.scots +alt.languages.serbo-croatian +alt.languages.shelta +alt.languages.sindhi +alt.languages.slovak +alt.languages.slovenian +alt.languages.spanish +alt.languages.swedish +alt.languages.tamil +alt.languages.tatar +alt.languages.telugu +alt.languages.tewa +alt.languages.thai +alt.languages.toba +alt.languages.turkish +alt.languages.ukrainian +alt.languages.urdu +alt.languages.venetian +alt.languages.welsh +alt.languages.wu +alt.languages.xiang +alt.languages.yakut +alt.languages.yiddish +alt.languages.yue +alt.languages.zulu +alt.languages.zuni +alt.lara-fabian +alt.larryville +alt.las-vegas +alt.las-vegas.gambling +alt.lasers +alt.lasertag +alt.lasertag.zonegods +alt.lasik-eyes +alt.law-enforcement +alt.law-enforcement.corruption +alt.law-enforcement.lethal-force +alt.law-enforcement.london-ontario +alt.law-enforcement.london_ontario +alt.law-enforcement.toronto_ontario +alt.law-enforcement.traffic +alt.law.enforcement.wurk +alt.law.war-crimes.tribunals +alt.lawyers +alt.lawyers.sue +alt.lawyers.sue.sue.sue +alt.leaks +alt.learning-to-lead +alt.lederhosen +alt.left-handed +alt.lefthanders +alt.legal +alt.legend.atlantis +alt.legend.king-arthur +alt.legend.the-bob.rock +alt.legends.atlantis +alt.legio-darkyard +alt.legs +alt.lemmings +alt.lemons +alt.lenny +alt.lesbian +alt.lesbian.feminist.poetry +alt.lesbian.robyn-owens-esq +alt.lets.kill.yuri.rutman +alt.letzebuerger +alt.liar.brian-campos +alt.liar.john.vogel +alt.liar.kent-prescott +alt.liar.tim-thorne +alt.liberalminded +alt.liberalminded.please-troll-me +alt.liberty-vs.conspiracy +alt.licker +alt.licker.store +alt.lies +alt.life +alt.life-mars +alt.life.afterlife +alt.life.internet +alt.life.itself +alt.life.sucks +alt.life.sucks.cypher +alt.life.sucks.moderated +alt.life.sucks.pets +alt.life.sucks.spork +alt.life.universe.everything +alt.lifestyle.all-faiths +alt.lifestyle.barefoot +alt.lifestyle.cypher +alt.lifestyle.earth-based +alt.lifestyle.freethinkers +alt.lifestyle.furry +alt.lifestyle.gorean +alt.lifestyle.lycanthropy +alt.lifestyle.master-slave +alt.lifestyle.master-slave.personal-ads +alt.lifestyle.shirtless +alt.lifestyle.simplicity +alt.lifestyle.substance-free +alt.lighters +alt.limpdick.james-koput +alt.limpdick.paul-zanca +alt.linkmenu +alt.linux +alt.linux.redhat +alt.linux.slakware +alt.linux.storage.moderated +alt.linux.stormix +alt.linux.sucks +alt.linux.suse +alt.linux.sux +alt.lit.asle +alt.lite.bulb +alt.literacy.adult +alt.literature +alt.litterbox +alt.little.lost.boy +alt.little.miss.naughty.flood.flood.flood +alt.live.forever +alt.loafhead +alt.loafhead.maryanne-kehoe +alt.local.village.idiot +alt.localmusic.chi +alt.locksmithing +alt.lonworks.controls +alt.look.at.me.i.am.a.fish +alt.loopy.fungus +alt.loser.ron-echeverri +alt.loser.wolf-moonchild +alt.lotto.players +alt.louise.beaudoin.nazi.bitch +alt.love +alt.love.areku +alt.love.clare-amoe +alt.love.jolly-trolly.fenix +alt.loves.hitler.montgomery-wood +alt.lpctgdcxd.lttnyvt +alt.lucid-emacs.help +alt.lunatics +alt.luser.recovery +alt.lycra +alt.lycra.pictures +alt.lynn +alt.lzr +alt.m +alt.m.ebxdvxnmx.n.u.uww.mu +alt.mac +alt.mac.bin.req.only +alt.mac.copy-protect.kdt-terminator +alt.mac.games.binaries +alt.mac.games.marathon +alt.mac.updates +alt.macamp +alt.machines +alt.machines.cnc +alt.machines.misc +alt.machinists.homepage +alt.macintosh +alt.macintosh.kaleidoscope +alt.macintosh.warez +alt.macintosh.warez.applications +alt.macintosh.warez.games +alt.macintosh.warez.sitez +alt.macintosh.warez.utilities +alt.macomb.college +alt.macromedia.director +alt.macromedia.flash +alt.mad-newgrouper.who.newgroups.at.midnight +alt.mad.testers.united.to.rule.the.world +alt.madcrew.usenet-hoeren +alt.madhousebbs +alt.madonna.is.a.whore +alt.madonna.sucks.cock +alt.mag.high-society +alt.mag.hustler +alt.mag.penthouse +alt.mag.playboy +alt.mag.playboy.pussy +alt.mag.playgirl +alt.mag.puritan +alt.mag.yt +alt.magazine.2600hz +alt.magazine.oneworld +alt.magazines.pornographic +alt.magic +alt.magic.cards +alt.magic.history +alt.magic.marketplace +alt.magic.secrets +alt.magick +alt.magick.chaos +alt.magick.commercial +alt.magick.ethics +alt.magick.folk +alt.magick.goetia +alt.magick.jinn +alt.magick.marketplace +alt.magick.order +alt.magick.scam +alt.magick.serious +alt.magick.sex +alt.magick.sex.angst +alt.magick.sex.angsta +alt.magick.tantra +alt.magick.theurgia +alt.magick.tyagi +alt.magick.virtual-adepts +alt.mahesh.duitser +alt.make +alt.make.fast.cash +alt.make.friends.around.the.world +alt.make.friends.within.bahrain +alt.make.money +alt.make.money-fast +alt.make.money.aol.commerce.mlm.announce +alt.make.money.fas +alt.make.money.fast +alt.make.your.own.spam +alt.makemoney +alt.maldives +alt.malta +alt.man-of-steel.jay-denebeim +alt.man.diary +alt.management +alt.management.tech-support +alt.managing +alt.managing.techsupport +alt.mandrake-security.fr +alt.manga +alt.manufacturing +alt.manufacturing.misc +alt.march +alt.marching-band.texas +alt.marek +alt.mark-atwood.die.die.die +alt.marketing +alt.marketing.issues +alt.marketing.online.ebay +alt.marketplace +alt.marketplace.books +alt.marketplace.books-on-tape +alt.marketplace.books.sf +alt.marketplace.cassettes +alt.marketplace.collectables +alt.marketplace.compact-disc +alt.marketplace.crack-corner +alt.marketplace.funky-stuff +alt.marketplace.funky-stuff.forsale +alt.marketplace.online.ebay +alt.marketplace.videotapes +alt.marriage-minded.foreign-brides-fsu +alt.marriage-minded.women +alt.married +alt.married.lonely +alt.marshmellow.peeps +alt.marsscan +alt.martial-art.kenjustu +alt.martial-arts.aikido +alt.martial-arts.config +alt.martial-arts.iaido +alt.martial-arts.ju-jitsu +alt.martial-arts.judo +alt.martial-arts.karate +alt.martial-arts.karate.kyokushin +alt.martial-arts.karate.semi-contact +alt.martial-arts.karate.shito-ryu +alt.martial-arts.karate.shorin-ryu +alt.martial-arts.karate.shotokan +alt.martial-arts.karate.shotokan.announcements +alt.martial-arts.karate.uechi-ryu +alt.martial-arts.karate.wado-ryu +alt.martial-arts.kempo +alt.martial-arts.kendo +alt.martial-arts.kenjustu +alt.martial-arts.kung-fu +alt.martial-arts.kung-fu.shaolin +alt.martial-arts.marketplace +alt.martial-arts.ninjitsu +alt.martial-arts.ninjtsu +alt.martial-arts.tae-kwon-do +alt.martial-arts.tae-kwon.do +alt.marty.is.a.fat.stupid.gay.pigboy +alt.marty.the.pigboy.sucks.cocks +alt.masonic.members +alt.masturbation +alt.masturbation.female +alt.masturbation.male +alt.masturbation.mental +alt.materials +alt.math +alt.math.cypher +alt.math.iams +alt.math.moderated +alt.math.recreational +alt.math.undergrad +alt.matthew-davies +alt.mauritius +alt.maxwell +alt.may +alt.mayday-mayday +alt.mbone +alt.mcdonalds +alt.mcdonalds.beef +alt.mcdonalds.cheese +alt.mcdonalds.crew +alt.mcdonalds.crew.crew-trainer +alt.mcdonalds.crew.management +alt.mcdonalds.flame +alt.mcdonalds.fries +alt.mcdonalds.gripes +alt.mcdonalds.ketchup +alt.mcdonalds.kissimmee.heavyg +alt.mcdonalds.promotions +alt.mcdonalds.smut +alt.mckinstry.pencil-dick +alt.me +alt.me.advocacy +alt.me.more.advocacy +alt.me.so.horny +alt.meaningless +alt.meaningless.shit +alt.mechanical.engineering +alt.mechwarrior2 +alt.med +alt.med.allergy +alt.med.behavioral +alt.med.cfs +alt.med.cfs.chat +alt.med.cfs.info +alt.med.cfs.open +alt.med.cure-paralysis +alt.med.dentistry.dutch +alt.med.ems +alt.med.endometriosis +alt.med.equipment +alt.med.fibromyalgia +alt.med.fibromyalgia.guaifenisin +alt.med.fibromyalgia.recovery-info +alt.med.fibromyalgia.recovery.info +alt.med.pain.rsd +alt.med.phys-assts +alt.med.podiatry +alt.med.software +alt.med.veterinary +alt.med.vision.improve +alt.media.dvd.cracked +alt.media.magazine.dotnet +alt.media.simpsons +alt.media.studies +alt.media.tv.mediamente +alt.medical +alt.medical.sales.jobs.offered +alt.medical.sales.jobs.resumes +alt.medien.fernsehen +alt.meditation +alt.meditation.moderated +alt.meditation.qigong +alt.meditation.quanyin +alt.meditation.shabda +alt.meditation.silva +alt.meditation.transcendental +alt.meeh.caheeh +alt.meeh.cypher +alt.mega-ego.yonderboy +alt.megazine +alt.megs-bru +alt.memetics +alt.memoriam.princess-di +alt.men.alpha +alt.men.politics +alt.men.support +alt.mens-rights +alt.mensa +alt.mentski +alt.menwhoswallow +alt.meow +alt.meridian.rpg +alt.mert +alt.messianic +alt.messianic.jewish-orthodox +alt.messianic.yeshua +alt.metaphysics.a-a-bailey +alt.metaphysics.alchemy +alt.metaphysics.lightwork +alt.metaphysics.rebirthing +alt.metaphysics.sacred-geometry +alt.meter-maid.lovely.rita +alt.mex.paranormal +alt.mexico +alt.mexwall +alt.mfgl +alt.mg +alt.mgk +alt.michael.l.kilbourn +alt.microcontrollers.8bit +alt.microsoft +alt.microsoft.crash.crash.crash +alt.microsoft.sucks +alt.midden +alt.mikey.gwar +alt.military +alt.military.aas.area2 +alt.military.air-cadets +alt.military.army-cadet +alt.military.cadet +alt.military.cap +alt.military.collecting +alt.military.collecting.medals +alt.military.police +alt.military.retired +alt.military.seacadets +alt.military.uk +alt.military.uk.agc +alt.military.uk.aviation +alt.mind.bending +alt.mindcontrol +alt.mindcontrol.kids-help-kids +alt.mindmachine +alt.mining.recreational +alt.minion +alt.minion.control-theory +alt.minion.training +alt.mink.grrr +alt.minneapolis +alt.minneapolis.the-other-minnesota +alt.minnesota.connection +alt.minnesota.forsale +alt.minolta.support +alt.mirc +alt.misanthropy +alt.misanthropy.thedavid +alt.misc +alt.misc.forsale +alt.misc.forteana +alt.misc.friends +alt.misc.friends.cybrvillangel +alt.misogyny +alt.missing-adults +alt.missing-kids +alt.missing-kids.want-ads +alt.missing.adults +alt.missouri.clinton +alt.missouri.clinton.hillbilly-town +alt.miva.mag +alt.ml.i.jvpih.i +alt.mlhin.j.y.ux.a.dsucymd.kg +alt.mll.fiy +alt.mlm +alt.mmmmm.beer +alt.mnbroaw.bn.ftqgbbbe.krq +alt.mobilehome +alt.models +alt.models.petite +alt.models.railroad.ho +alt.models.railroad.n +alt.modpol.discussion +alt.modpol.discusssion +alt.mof +alt.mohh.bt +alt.moja.maxwell +alt.moja.mexwall +alt.moja.test +alt.monarchy.america +alt.monday +alt.mongrel.impregnated.his.sister +alt.mongrelmind.going-down-bigtime +alt.monique.maxwell +alt.monique.mexwall +alt.monster.is.the.place.to.be +alt.monsthers +alt.moocow.delicious +alt.moogles +alt.moogles.cypher +alt.moose.rights +alt.moped +alt.morlxqm +alt.moron.capt-kundalini.nazi-troll +alt.moron.martin.hannigan.spank.spank +alt.moron.patrick.murtha.fuckwit +alt.moron.phil-oliver +alt.moron.uriel-and-poetta.troll +alt.morons +alt.motd +alt.motherfucker.jay-denebeim +alt.motherjones +alt.mothers +alt.mothersuperior +alt.motorcycle +alt.motorcycle.aprilia +alt.motorcycle.honda.nighthawk +alt.motorcycle.kawasaki.gpz +alt.motorcycle.north-carolina +alt.motorcycle.ride-well +alt.motorcycle.sportbike +alt.motorcycles +alt.motorcycles.abate +alt.motorcycles.ducati +alt.motorcycles.harley +alt.motorcycles.marketplace +alt.motorcycles.mrf +alt.motorcycles.nimbus +alt.motorcycles.triumph +alt.motorcycles.yamaha +alt.motorcyles.harley +alt.motss +alt.motss.bisexua-l +alt.mottola +alt.mountain-bike +alt.mountain-bike.van-delay +alt.move.michelle.regina +alt.movie-kull +alt.movies +alt.movies.12monkeys +alt.movies.2001spaceoddysey +alt.movies.armageddon +alt.movies.beautiful-thing +alt.movies.bergman +alt.movies.blair-witch-project +alt.movies.branagh-thmpsn +alt.movies.bridget-fonda +alt.movies.bruce-lee +alt.movies.chainsaw-massacre +alt.movies.chaplin +alt.movies.christian-bale +alt.movies.cinematography +alt.movies.cinematography.16mm +alt.movies.cinematography.super8 +alt.movies.coen-brothers +alt.movies.coppola +alt.movies.david-lynch +alt.movies.deep-impact +alt.movies.empire-records +alt.movies.filmmakers-amateur +alt.movies.get-real +alt.movies.ghostbusters +alt.movies.goonies +alt.movies.gore-films +alt.movies.gore-films.d +alt.movies.gore-films.reposts +alt.movies.grease +alt.movies.hitchcock +alt.movies.independent +alt.movies.independent.carrott-productions +alt.movies.indian +alt.movies.indiana-jones +alt.movies.jackie-chan +alt.movies.james-cameron +alt.movies.joe-vs-volcano +alt.movies.john-carpenter +alt.movies.jurassic-park +alt.movies.kevin-smith +alt.movies.kitano +alt.movies.kubrick +alt.movies.labyrinth +alt.movies.legionnaires +alt.movies.luis-bunuel +alt.movies.marilyn-monroe +alt.movies.monster +alt.movies.mortal-kombat +alt.movies.oliver-stone +alt.movies.orson-welles +alt.movies.phantasm +alt.movies.piss-on-critics +alt.movies.robert-deniro +alt.movies.scorsese +alt.movies.scream-trilogy +alt.movies.sergio-leone +alt.movies.serials +alt.movies.sig-weaver +alt.movies.silent +alt.movies.siskel+ebert +alt.movies.siskelebert +alt.movies.slapshot +alt.movies.spielberg +alt.movies.spike-lee +alt.movies.terry-gilliam +alt.movies.tim-burton +alt.movies.titanic +alt.movies.truffaut +alt.movies.truman-show +alt.movies.uk +alt.movies.visual-effects +alt.movies.wim-wenders +alt.movies.wizard-of-oz +alt.mpbygpywcwxrk.hr.v +alt.mqjhdwn.f +alt.mr-men +alt.mrz +alt.msdos +alt.msdos.batch +alt.msdos.batch.nt +alt.msdos.programmer +alt.mtb.q.apgpdng +alt.mtv-sucks +alt.mud +alt.mud.british +alt.mud.cellars +alt.mud.crystal-shard +alt.mud.eos2 +alt.mud.island +alt.mud.lp +alt.mud.majormud +alt.mud.moo +alt.mud.programming +alt.mud.sex +alt.mudders.anonymous +alt.muff +alt.mullethead.reb-ruster +alt.multimedia.cu-seeme +alt.multimedia.director +alt.multimedia.emblaze +alt.multimedia.mpeg +alt.multimedia.tk +alt.multimedia.tk.terri-disisto +alt.multimedia.toolbook +alt.multimedia.vadz +alt.music +alt.music-dire-straits +alt.music-lover.audiophile +alt.music-lover.audiophile.hardware +alt.music.+live+ +alt.music.2-belo +alt.music.2-step-garage +alt.music.311 +alt.music.4-track +alt.music.4ad +alt.music.a-cappella +alt.music.a-ha +alt.music.a-perfect-circle +alt.music.abba +alt.music.acid-jazz +alt.music.adiemus +alt.music.adjective-army +alt.music.aerosmith +alt.music.african +alt.music.aghora.nospam +alt.music.air-supply +alt.music.alabama +alt.music.alanis +alt.music.alanis.morissette +alt.music.alice-cooper +alt.music.aliceinchains +alt.music.all-saints +alt.music.alternative +alt.music.alternative-sucks +alt.music.alternative.female +alt.music.america +alt.music.amorphis +alt.music.amy-grant +alt.music.anita-meijer +alt.music.anthrax +alt.music.anti-teenybopper +alt.music.aor +alt.music.aphex-twin +alt.music.aqua +alt.music.arabic +alt.music.army-of-lovers +alt.music.ash +alt.music.atlanta +alt.music.autechre +alt.music.b-52s +alt.music.b-witched +alt.music.babybird +alt.music.bad-religion +alt.music.badlydrawnboy +alt.music.banana-truffle +alt.music.band-director +alt.music.barenaked-ladies +alt.music.baroque +alt.music.beach-boys +alt.music.beastie-boys +alt.music.beastie-boys.punk-liar +alt.music.beatles +alt.music.beautiful-south +alt.music.beck +alt.music.beckley-bunnel +alt.music.bedroom.producers +alt.music.bee-gees +alt.music.beethoven +alt.music.bela-fleck +alt.music.bellegsebastian +alt.music.ben-folds-five +alt.music.ben-harper +alt.music.betterthanezra +alt.music.big-band +alt.music.big-leaves +alt.music.bill-laswell +alt.music.bill-miller +alt.music.billy-joe.winghead +alt.music.billy-joel +alt.music.bis +alt.music.bjork +alt.music.black-crowes +alt.music.black-metal +alt.music.black-metal.nazi +alt.music.black-sabbath +alt.music.black47 +alt.music.blink-182 +alt.music.bloem +alt.music.bloodhound-gang +alt.music.bloodhound.gang +alt.music.blue-rodeo +alt.music.bluegrass +alt.music.blueoystercult +alt.music.blues +alt.music.blues-traveler +alt.music.blues.delta +alt.music.blues.lexington-blues +alt.music.bluetones +alt.music.blur +alt.music.bob-mould +alt.music.bob-wiseman +alt.music.bodeans +alt.music.boedans +alt.music.bon-jovi +alt.music.bonepony +alt.music.bootlegs +alt.music.bosstones +alt.music.boyz-2-men +alt.music.boyzone +alt.music.breakbeat +alt.music.brian-eno +alt.music.bruce-cockburn +alt.music.bruce-springsteen +alt.music.bryan-adams +alt.music.bugtussle +alt.music.built-to-spill +alt.music.bush +alt.music.bush.sux +alt.music.butholesurfers +alt.music.butthole.surfers +alt.music.buzzpoets +alt.music.byrds +alt.music.caca-volante +alt.music.cake +alt.music.canada +alt.music.canadian +alt.music.candy-dulfer +alt.music.cardiacs +alt.music.carnival +alt.music.carolinashag +alt.music.cat-stevens +alt.music.catatonia +alt.music.category-freak +alt.music.cavedogs +alt.music.ccr +alt.music.celine-dion +alt.music.chad-n-jeremy +alt.music.chameleons +alt.music.chapel-hill +alt.music.charlatans +alt.music.charlottechurch +alt.music.cheap-trick +alt.music.chemical-bros +alt.music.cher +alt.music.chicago +alt.music.chinese-pop +alt.music.chinese.pop +alt.music.christian +alt.music.christian.rock +alt.music.clannad +alt.music.clarinet +alt.music.clash +alt.music.classical +alt.music.cliff-richard +alt.music.coldplay +alt.music.colorado +alt.music.complex-arrang +alt.music.corrs +alt.music.counting-crows +alt.music.country +alt.music.country.classic +alt.music.cracker-cvb +alt.music.cranberries +alt.music.cranes +alt.music.cravin-melon +alt.music.creeker +alt.music.crocketts +alt.music.ct-dummies +alt.music.culture-club +alt.music.dan-bern +alt.music.dan-fogelberg +alt.music.dance +alt.music.dance.euro +alt.music.dance.freestyle +alt.music.dance.made-in-italy +alt.music.dance.mp3.binaries +alt.music.dance.mp3.remixes +alt.music.dandy-warhols +alt.music.danzig +alt.music.darkwave +alt.music.dave-hawkins +alt.music.dave-matthews +alt.music.dave-matthews.tapetrading +alt.music.dave-matthews.trading +alt.music.david-byrne +alt.music.david-devant-hsw +alt.music.dead-c +alt.music.dead-kennedys +alt.music.dead-milkmen +alt.music.deep-purple +alt.music.def-leppard +alt.music.deftones +alt.music.deftones.moderated +alt.music.delirious +alt.music.delphines +alt.music.depeche-mode +alt.music.derrero +alt.music.detox +alt.music.diana-ross +alt.music.dio +alt.music.dire-straits +alt.music.disney +alt.music.diva +alt.music.divine-comedy +alt.music.doors +alt.music.doris-dragovic +alt.music.dr-feelgood +alt.music.drain +alt.music.dream-theater +alt.music.duke-ellington +alt.music.duran-duran +alt.music.dutch +alt.music.eagles +alt.music.ear-training +alt.music.early +alt.music.ebm +alt.music.echoing-green +alt.music.education +alt.music.eels +alt.music.eighties +alt.music.elastica +alt.music.electronic +alt.music.electronic-organ +alt.music.ellectrika +alt.music.elo +alt.music.embo +alt.music.embrace +alt.music.eminem +alt.music.emo +alt.music.enigma-dcd-etc +alt.music.enya +alt.music.enya.puke.puke.puke +alt.music.erasure +alt.music.eric-clapton +alt.music.eurovision +alt.music.everclear +alt.music.exit52 +alt.music.ezra +alt.music.faith-no-more +alt.music.falconjones +alt.music.fatboy-slim +alt.music.fates-warning +alt.music.fatwreckchords +alt.music.feeder +alt.music.feelers +alt.music.female-vocalists +alt.music.festivals +alt.music.festivals.paleo +alt.music.filk +alt.music.fish +alt.music.flamenco +alt.music.flaming-lips +alt.music.fleetwood-mac +alt.music.flute +alt.music.foetus +alt.music.folklore +alt.music.foo-fighters +alt.music.france +alt.music.frank-zappa +alt.music.franticdogpadl +alt.music.from.the.hearts.of.alt.config +alt.music.fuel +alt.music.funkpoparoll +alt.music.g-fibbers +alt.music.gabber +alt.music.galactic.cowboys +alt.music.galaxie-500 +alt.music.gangsta.rap +alt.music.garage +alt.music.garbage +alt.music.garth-brooks +alt.music.gay-dad +alt.music.gene +alt.music.genesis +alt.music.girlgroups +alt.music.glen-ballard +alt.music.gnawa +alt.music.golden-earring +alt.music.gomez +alt.music.goo-goo-dolls +alt.music.goo-goo-dolls.adjectivized +alt.music.gospel.southern +alt.music.gossip +alt.music.greek +alt.music.green-day +alt.music.green-day.sucks +alt.music.green-day.vacant5150.aka.kayte +alt.music.grindcore +alt.music.guidedbyvoices +alt.music.guitar +alt.music.guitar.resonator +alt.music.guster +alt.music.guthrie +alt.music.gwar +alt.music.gzm +alt.music.h-blockx +alt.music.h-h-hippeaux +alt.music.hafabra +alt.music.hammond-organ +alt.music.hamsters +alt.music.hard-house +alt.music.hardcore +alt.music.harmonica +alt.music.harry-chapin +alt.music.hawaiian +alt.music.heath +alt.music.helloween +alt.music.hertz +alt.music.highllamas +alt.music.hip-hop.dj +alt.music.hole +alt.music.holly-cole +alt.music.hootie +alt.music.house +alt.music.hunter-mott +alt.music.idlewild +alt.music.iggy-pop +alt.music.incubus +alt.music.independent +alt.music.independent.ads +alt.music.indigo-girls +alt.music.industrial +alt.music.info-society +alt.music.insane-clown-posse +alt.music.inxs +alt.music.ipecac-loop +alt.music.iron-maiden +alt.music.j-s-bach +alt.music.j-tull.moderated +alt.music.jacar +alt.music.jackpot +alt.music.jacques-brel +alt.music.jade-warrior +alt.music.jamc +alt.music.james-taylor +alt.music.jamiroquai +alt.music.jamiroquai.trading-post +alt.music.janes-addictn +alt.music.jazz.squirrel-nut-zippers +alt.music.jeff-buckley +alt.music.jenn-harmer +alt.music.jessica.simpson +alt.music.jesus-lizard +alt.music.jethro-tull +alt.music.jethro-tull.moderated +alt.music.jewish +alt.music.jim-croce +alt.music.jimi.hendrix +alt.music.joan-jett +alt.music.joan-osborne +alt.music.joe-carta-band +alt.music.john-mellencamp +alt.music.john-tesh +alt.music.jon-spencer +alt.music.joni-mitchell +alt.music.journalism +alt.music.journey +alt.music.joydivision +alt.music.jpop +alt.music.judas-priest +alt.music.julie-masse +alt.music.jungle +alt.music.karaoke +alt.music.kelani +alt.music.kenickie +alt.music.kenny-wayne-shepherd +alt.music.kerbdog +alt.music.kiss +alt.music.klaus-schulze +alt.music.kmfdm +alt.music.korn +alt.music.korn.sucks +alt.music.kraftwerk +alt.music.kreviazuk +alt.music.kron +alt.music.kula-shaker +alt.music.kyle-vincent +alt.music.kylie-minogue +alt.music.la-guns +alt.music.lara-fabian +alt.music.led-zeppelin +alt.music.lene-marlin +alt.music.lennon +alt.music.leonard-cohen +alt.music.lesley-rankine +alt.music.level-42 +alt.music.levellers +alt.music.lightfoot +alt.music.lighthouse-family +alt.music.lilith-fair +alt.music.limp-bizkit +alt.music.linkin-park +alt.music.lisa-loeb +alt.music.live+ +alt.music.live.the.band +alt.music.lloyd-webber +alt.music.lo-fi +alt.music.local-h +alt.music.london-am +alt.music.lor-mckennitt +alt.music.lords-of-acid +alt.music.losprophets +alt.music.lost-prophets +alt.music.lostprophets +alt.music.lou-reed +alt.music.louise-nurding +alt.music.luis-miguel +alt.music.luna +alt.music.luscious-jackson +alt.music.lyle-lovett +alt.music.lynyrd-skynyrd +alt.music.lyrics +alt.music.lyrics.spanish +alt.music.machine-head +alt.music.machines.of.loving.grace +alt.music.madness +alt.music.makers +alt.music.makers.available-wanted +alt.music.makers.christian +alt.music.makers.dj +alt.music.makers.dj.bedroom +alt.music.makers.electric-piano +alt.music.makers.electronic +alt.music.makers.marketplace +alt.music.makers.mpeg +alt.music.makers.nederland +alt.music.makers.nederland.markt +alt.music.makers.sampling +alt.music.makers.soloact +alt.music.makers.synth +alt.music.makers.theremin +alt.music.makers.ukulele +alt.music.makers.woodwind +alt.music.man +alt.music.mandolin +alt.music.manics +alt.music.manowar +alt.music.mansun +alt.music.manuel +alt.music.mariah.carey +alt.music.marillion +alt.music.marilyn-manson +alt.music.marys-danish +alt.music.massive-attack +alt.music.matthew-good-band +alt.music.maxwell +alt.music.mazzy-star +alt.music.mcb +alt.music.mccartney +alt.music.mdfmk +alt.music.meat-loaf +alt.music.mecano +alt.music.mercyful-fate +alt.music.metallica.songs.turn-the-page +alt.music.methods-mayhem +alt.music.mexican +alt.music.mgb +alt.music.michael-english +alt.music.michael-franks +alt.music.michael-jackson +alt.music.mid-evil +alt.music.midi +alt.music.midi.keydisk-terminator +alt.music.midiweb +alt.music.mike-keneally +alt.music.mike-oldfield +alt.music.mike.keneally +alt.music.ministry +alt.music.miocene +alt.music.misc +alt.music.misfits +alt.music.mixfreaks +alt.music.mixman +alt.music.mmw +alt.music.mobile-djs +alt.music.moby +alt.music.modern +alt.music.modern-rock +alt.music.mods +alt.music.moffatts +alt.music.mogwai +alt.music.monaco +alt.music.monkees +alt.music.moody-blues +alt.music.morcheeba +alt.music.morrissey +alt.music.motley-crue +alt.music.motorhead +alt.music.moxy-fruvous +alt.music.mp3 +alt.music.mp3.hardware +alt.music.mp3.morpheus +alt.music.mp3.napster +alt.music.mp3.sonique +alt.music.mp3.winamp +alt.music.mp3.winmx +alt.music.mr-bungle +alt.music.mudhoney +alt.music.muse +alt.music.mxpx +alt.music.my-life-story +alt.music.mylene-farmer +alt.music.nailbomb +alt.music.naked-barbies +alt.music.napster.banned +alt.music.nat-imbruglia +alt.music.natalie-merchant +alt.music.nataliemerchant +alt.music.neil-diamond +alt.music.neil-young +alt.music.new-order +alt.music.new-wave +alt.music.nick-cave +alt.music.night-ranger +alt.music.nils-lofgren +alt.music.nin +alt.music.nirvana +alt.music.nirvana.murder-theory +alt.music.nirvana.wasteland.useless.personal.flames +alt.music.nits +alt.music.no-depression +alt.music.no-doubt +alt.music.no-wave +alt.music.nofx +alt.music.nomeansno +alt.music.nork +alt.music.novelty +alt.music.nrbq +alt.music.nrok +alt.music.nsync +alt.music.oasis +alt.music.ocs +alt.music.offspring +alt.music.old-97s +alt.music.one-minute-silence +alt.music.operation-ivy +alt.music.orb +alt.music.orbital +alt.music.orgy +alt.music.osmonds +alt.music.ourladypeace +alt.music.outspoken +alt.music.oxygum +alt.music.ozzy +alt.music.pantera +alt.music.paradise-lost +alt.music.pat-mccurdy +alt.music.pat-mcgee-band +alt.music.pat-metheny +alt.music.pat-metheny.moderated +alt.music.paul-colman-trio +alt.music.paul-simon +alt.music.paul-weller +alt.music.paul-westerberg +alt.music.pavement +alt.music.pearl-jam +alt.music.pearl-jam.crushed +alt.music.pennywise +alt.music.pere-ubu +alt.music.performance.band.high-school +alt.music.pet-shop-boys +alt.music.pet-shop.boys +alt.music.peter-gabriel +alt.music.peter-murphy +alt.music.peter-n-gordon +alt.music.phil-collins +alt.music.philip-glass +alt.music.pink-floyd +alt.music.pink-floyd.publius +alt.music.pipeorgan +alt.music.pixies +alt.music.pj-harvey +alt.music.placebo +alt.music.planet-gong +alt.music.plasmatics +alt.music.poe +alt.music.pogues +alt.music.police +alt.music.polkas +alt.music.pop +alt.music.pop-eat-itself +alt.music.portishead +alt.music.post-punk +alt.music.posterkids +alt.music.power-pop +alt.music.primal-scream +alt.music.primus +alt.music.prince +alt.music.prodigy-the +alt.music.prodigy-the.lyrics +alt.music.producer +alt.music.producer.reggae +alt.music.progressive +alt.music.progressive-house +alt.music.psychedelic +alt.music.pulp +alt.music.pus +alt.music.pusa +alt.music.queen +alt.music.rachelstamp +alt.music.rachid +alt.music.radiators +alt.music.radiohead +alt.music.radiohead.what.does.the.guy.say.at.the.end.of.the.just.video +alt.music.rage-machine +alt.music.rammstein +alt.music.ramones +alt.music.rap-metal +alt.music.rat-pack +alt.music.rat-salad +alt.music.ratsalad +alt.music.ratt +alt.music.red-hot-chili-peppers +alt.music.redd-kross +alt.music.reef +alt.music.reel-big-fish +alt.music.refreshments +alt.music.replacements +alt.music.riaa.suck +alt.music.richard-butler +alt.music.rick-derringer +alt.music.riot-grrl +alt.music.roadie +alt.music.rob-zombie +alt.music.robbie-williams +alt.music.rock-n-roll +alt.music.rockabilly +alt.music.roger-waters +alt.music.romantic +alt.music.rory-gallagher +alt.music.roxette +alt.music.ruby +alt.music.runrig +alt.music.rush +alt.music.rvamusic +alt.music.s-mclachlan +alt.music.s7g +alt.music.sarah-mclachlan +alt.music.sarah_mclachlan +alt.music.savage-garden +alt.music.savoy-brown +alt.music.saxon +alt.music.saxophone +alt.music.scorpions +alt.music.seal +alt.music.searchers +alt.music.seven-seconds +alt.music.sex-pistols +alt.music.sex.pistols +alt.music.shamen +alt.music.sheryl-crow +alt.music.shoegazing +alt.music.shonen-knife +alt.music.silverchair +alt.music.sinaed +alt.music.sinead-oconnor +alt.music.ska +alt.music.ska-core +alt.music.skeg +alt.music.skinny-puppy +alt.music.skratch-picklz +alt.music.skunk-anansie +alt.music.slayer +alt.music.slipknot +alt.music.sloan +alt.music.small-faces +alt.music.small-world +alt.music.smash-pumpkins +alt.music.smash-pumpkins.dead-carmance +alt.music.smash-pumpkins.wrestling +alt.music.smithereens +alt.music.smiths +alt.music.smiths.lesbians +alt.music.sneaker-pimps +alt.music.sondheim +alt.music.sonic-youth +alt.music.sophie-hawkins +alt.music.soul +alt.music.soul.asylum +alt.music.soulcoughing +alt.music.soundgarden +alt.music.southern-rock +alt.music.space +alt.music.spacerock +alt.music.spanish.lyrics +alt.music.speedmcqueen +alt.music.spice-girls +alt.music.squarepusher +alt.music.squeeze +alt.music.squirrel-nut-zippers +alt.music.static-x +alt.music.status-quo +alt.music.steely-dan +alt.music.steps +alt.music.stereolab +alt.music.stereophonics +alt.music.steve-harley +alt.music.steve-miller +alt.music.steve-vai +alt.music.steve.vai +alt.music.stone-roses +alt.music.stone-temple +alt.music.strange +alt.music.stranglers +alt.music.string-cheese-incident +alt.music.string.cheese.incident +alt.music.suede +alt.music.sultans-of-ping +alt.music.sunnydayrealestate +alt.music.superchunk +alt.music.superfurries +alt.music.supergrass +alt.music.supersuckers +alt.music.swedish-pop +alt.music.swing +alt.music.sylvian +alt.music.symposium +alt.music.synth +alt.music.synth.kurzweil +alt.music.synth.roland +alt.music.synth.roland.tb303 +alt.music.synth.roland.u20 +alt.music.synthpop +alt.music.t-rex +alt.music.t-trent-darby +alt.music.tangerine-dream +alt.music.tango +alt.music.tape-culture +alt.music.tea-party +alt.music.tea-party.moderated +alt.music.techno +alt.music.terrorvision +alt.music.testament +alt.music.texas +alt.music.that-dog +alt.music.the-band +alt.music.the-cardigans +alt.music.the-church +alt.music.the-corrs +alt.music.the-crash +alt.music.the-crystal-method +alt.music.the-damned +alt.music.the-doors +alt.music.the-fall +alt.music.the-mods +alt.music.the-pist +alt.music.the-residents +alt.music.the-strokes +alt.music.the-sweet +alt.music.the-tubes +alt.music.the-verve +alt.music.the.police +alt.music.the.whisky.priests +alt.music.thecars +alt.music.thecure +alt.music.themepark +alt.music.therapy +alt.music.thunder +alt.music.tiffany-darwish +alt.music.tlc +alt.music.tmbg +alt.music.toadies +alt.music.todd-rundgren +alt.music.tom-petty +alt.music.tom-waits +alt.music.tonic +alt.music.tool +alt.music.topper +alt.music.total-touch +alt.music.toten-hosen +alt.music.touch-and-go +alt.music.toy-dolls +alt.music.trading.dat +alt.music.tragically-hip +alt.music.trance +alt.music.travis +alt.music.tricky +alt.music.trombone +alt.music.tuba +alt.music.tune-inn +alt.music.turinbrakes +alt.music.turninbrakes +alt.music.twisted-sister +alt.music.type-o-negative +alt.music.tystion +alt.music.u2 +alt.music.ub40 +alt.music.uk +alt.music.ukgarage +alt.music.ultimate-fakebook +alt.music.underground.grindcore +alt.music.underground.metal +alt.music.underground.metal.ambient +alt.music.underground.metal.black +alt.music.underground.metal.death +alt.music.underground.metal.doom +alt.music.underground.metal.nihilism +alt.music.underground.metal.philosophy +alt.music.underground.metal.satanism +alt.music.underworld +alt.music.utah-saints +alt.music.vacuum +alt.music.van-halen +alt.music.van-halen.gary-sucks +alt.music.van-halen.sammy-sucks +alt.music.vangelis +alt.music.vanhalen +alt.music.velvet-underground +alt.music.velvets +alt.music.vengaboys +alt.music.veruca-salt +alt.music.video-games +alt.music.vivian-lai +alt.music.voivod +alt.music.w-carlos +alt.music.w.a.s.p +alt.music.wales +alt.music.warehouse.of.hate +alt.music.warp-records +alt.music.wasp +alt.music.ween +alt.music.weezer +alt.music.weird +alt.music.weird-al +alt.music.wesley-willis +alt.music.white-power +alt.music.white.town +alt.music.whitesnake +alt.music.who +alt.music.wierd-al +alt.music.wilco +alt.music.wilderness +alt.music.wildhearts +alt.music.woodwind.players +alt.music.world +alt.music.worsethanezra +alt.music.wu-tang-clan +alt.music.x +alt.music.xtc +alt.music.yes +alt.music.yngwie +alt.music.yngwie-malmsteen +alt.music.zakk-wylde +alt.music.zevon +alt.music.zz-top +alt.musica.outspoken +alt.my.dick.big.big.big +alt.my.farts.smell.bad +alt.my.farts.smell.nice +alt.my.job.sucks +alt.my.name.is.jay-denebeim.and.i.rmgroup.for.sexual.gratification +alt.mysteries +alt.mythology +alt.mythology.jinn +alt.mythology.mythic-animals +alt.mythology.mythic-animals.gryphons +alt.n +alt.n.da +alt.n.dex.de +alt.n.rp.jzgq.tislstv +alt.naggamanteh +alt.namaste +alt.nambla.jay-denebeim.president +alt.name +alt.nanny.helpme.help.help.help +alt.nanu.troll-owned +alt.natall +alt.natasha.hates +alt.natasha.hates.chris +alt.natasha.hates.chris.caputo +alt.natasha.isa-special +alt.natasha.movie +alt.natasha.movie.reviews +alt.native +alt.native.law +alt.nature.mushrooms +alt.naughty.pictures +alt.nazi.mongrel-mind +alt.nbest +alt.neal-feldman +alt.nealfeldmen +alt.nealfeldmen.flame +alt.necromicon +alt.necronomicon +alt.necropolis.plock +alt.neo-tech +alt.nep.sucks +alt.nerd.obsessive +alt.nespoli +alt.net +alt.net-kook.jay.denebeim +alt.net.and +alt.net.and.modem +alt.net.and.modem.games +alt.net.nazis.must.die +alt.net.personalities +alt.netcom +alt.netcom.emeritus +alt.netcom.sucks +alt.netcop.vman-sucks +alt.netgames +alt.netgames.bolo +alt.netheism +alt.netkkkop.blade +alt.netscape +alt.netscape.buggy-products +alt.netscape.expatriates +alt.netscape.sucks +alt.nettime +alt.netzilla.die.die.die +alt.never.been.laid.montgomery-wood +alt.new-age-messiah.cypher +alt.new-england +alt.new-hampshire +alt.new.cracks +alt.newage.angels +alt.newage.astrology +alt.newage.dreamwork +alt.newage.healingcircle +alt.newage.oracles +alt.newbie +alt.newbies +alt.newgroup +alt.newgroup.a +alt.newgroup.dean-stark +alt.newgroup.for.fun.fun.fun +alt.newgroupers +alt.newgrouping +alt.newlywed +alt.news +alt.news-admins.japan.fascist.fascist.fascist +alt.news-media +alt.news.boys +alt.news.cyprus +alt.news.fyrom +alt.news.hannigan.stalker +alt.news.macedonia +alt.news.microsoft +alt.news.newusers-mac +alt.newsangels +alt.newsangels.lamers +alt.newsbear +alt.newsgroup.for.fun.fun.fun +alt.newsgroup.moderators +alt.newsgroupname +alt.newsgroups.propagation +alt.nfa.collectors.spareparts.accessories +alt.nice-wons.russell-b +alt.nigeria +alt.niggers +alt.night-club.review.uk +alt.night-life.bradford.uk +alt.nijntje +alt.nintendo.perfect-dark +alt.nintendo64.goldeneye +alt.nintendo64.mariokart +alt.nintendo64.perfect-dark +alt.nintendo64.pokemon +alt.nintendo64.zelda +alt.nipples.cypher +alt.niteclub.alternative +alt.niteclub.commercial +alt.niteclub.independent +alt.nitwit.john-grubor +alt.nn +alt.nnk +alt.no-advertising +alt.no-advertising.files +alt.no-advertising.files.audio +alt.no-advertising.files.audio.midi +alt.no-advertising.files.audio.mod +alt.no-advertising.files.audio.mp3 +alt.no-advertising.files.audio.mp3.bebop +alt.no-advertising.files.audio.mp3.big-band +alt.no-advertising.files.audio.mp3.bluegrass +alt.no-advertising.files.audio.mp3.blues +alt.no-advertising.files.audio.mp3.classical +alt.no-advertising.files.audio.mp3.comedy +alt.no-advertising.files.audio.mp3.country +alt.no-advertising.files.audio.mp3.dancehall +alt.no-advertising.files.audio.mp3.hip-hop +alt.no-advertising.files.audio.mp3.jazz +alt.no-advertising.files.audio.mp3.latin +alt.no-advertising.files.audio.mp3.metal +alt.no-advertising.files.audio.mp3.minneapolis +alt.no-advertising.files.audio.mp3.opera +alt.no-advertising.files.audio.mp3.pop +alt.no-advertising.files.audio.mp3.ragtime +alt.no-advertising.files.audio.mp3.rap +alt.no-advertising.files.audio.mp3.reggae +alt.no-advertising.files.audio.mp3.requests +alt.no-advertising.files.audio.mp3.rock +alt.no-advertising.files.audio.mp3.rock.acid +alt.no-advertising.files.audio.mp3.rock.alternative +alt.no-advertising.files.audio.mp3.rock.classic +alt.no-advertising.files.audio.mp3.rock.metal +alt.no-advertising.files.audio.mp3.rock.punk +alt.no-advertising.files.audio.mp3.rock.soft +alt.no-advertising.files.audio.mp3.singing-cowboy +alt.no-advertising.files.audio.mp3.soul--and-funk +alt.no-advertising.files.audio.mp3.soul-and-funk +alt.no-advertising.files.audio.mp3.sound-effects +alt.no-advertising.files.audio.mp3.speeches +alt.no-advertising.files.audio.mp3.swing +alt.no-advertising.files.audio.mp3.techno +alt.no-advertising.files.audio.mp3.themes +alt.no-advertising.files.audio.real +alt.no-advertising.files.audio.realaudio +alt.no-advertising.files.images +alt.no-advertising.files.images.non-nude.pen-pals +alt.no-advertising.files.images.non-nude.personals +alt.no-advertising.files.images.non-nude.personals.asians +alt.no-advertising.files.images.non-nude.personals.black +alt.no-advertising.files.images.non-nude.personals.born-again +alt.no-advertising.files.images.non-nude.personals.intergen +alt.no-advertising.files.images.non-nude.personals.interracial +alt.no-advertising.files.images.non-nude.personals.latin +alt.no-advertising.files.images.non-nude.personals.teen +alt.no-advertising.files.images.non-nude.personals.whites +alt.no-advertising.files.images.nude +alt.no-advertising.files.images.nude.africans +alt.no-advertising.files.images.nude.asians +alt.no-advertising.files.images.nude.celebrities +alt.no-advertising.files.images.nude.latin +alt.no-advertising.files.images.nude.personals +alt.no-advertising.files.images.nude.preteens +alt.no-advertising.files.images.nude.whites +alt.no-advertising.files.images.sex +alt.no-advertising.files.images.sex.africans +alt.no-advertising.files.images.sex.asians +alt.no-advertising.files.images.sex.bestiality +alt.no-advertising.files.images.sex.bondage +alt.no-advertising.files.images.sex.food +alt.no-advertising.files.images.sex.gay-men +alt.no-advertising.files.images.sex.gay-women +alt.no-advertising.files.images.sex.intergen +alt.no-advertising.files.images.sex.interracial +alt.no-advertising.files.images.sex.latin +alt.no-advertising.files.images.sex.necrophilia +alt.no-advertising.files.images.sex.orgies +alt.no-advertising.files.images.sex.preteens +alt.no-advertising.files.shareware +alt.no-advertising.files.shareware.win-95 +alt.no-advertising.files.shareware.win-95.apps +alt.no-advertising.files.warez +alt.no-advertising.files.warez.apps +alt.no-advertising.files.warez.atari +alt.no-advertising.files.warez.atari-8-bit +alt.no-advertising.files.warez.atari-st +alt.no-advertising.files.warez.commadore-64 +alt.no-advertising.files.warez.commadore-amiga +alt.no-advertising.files.warez.cray +alt.no-advertising.files.warez.irc +alt.no-advertising.files.warez.mac +alt.no-advertising.files.warez.office-utilities +alt.no-advertising.files.warez.sinclair +alt.no-advertising.files.warez.sun +alt.no-advertising.files.warez.system-75 +alt.no-advertising.files.warez.tandy-coco +alt.no-advertising.files.warez.unix +alt.no-advertising.files.warez.unix.hack-phreak +alt.no-advertising.files.warez.win-95 +alt.no-advertising.files.warez.win-95.audio +alt.no-advertising.files.warez.win-95.bbs +alt.no-advertising.files.warez.win-95.browsers +alt.no-advertising.files.warez.win-95.c-a-d +alt.no-advertising.files.warez.win-95.disk-utilities +alt.no-advertising.files.warez.win-95.graphics +alt.no-advertising.files.warez.win-95.hack-phreak +alt.no-advertising.files.warez.win-95.plugins +alt.no-advertising.files.warez.win-95.programming +alt.no-advertising.files.warez.win-95.security +alt.no-advertising.files.warez.win-95.ssh-shp-ssl +alt.no-advertising.files.warez.win-95.tcp-ip +alt.no-advertising.files.warez.win-95.telnet-ftp +alt.no-advertising.files.warez.win-95.voice-bbs +alt.no-advertising.files.warez.win-95.voice-mail +alt.no-advertising.hack-phreak.system-75 +alt.no-quoting +alt.no-spaces +alt.no.means.no.montgomery-wood +alt.nocem.maxwell +alt.nocem.mexwall +alt.nocem.policy +alt.nocne.polakow.rozmowy.dk_i_dp +alt.noise +alt.non.racism +alt.non.sequitur +alt.nonags +alt.norway.fishhead +alt.nosebeeping +alt.november +alt.npractitioners +alt.nswpp +alt.ntia.privacy +alt.nttk.bu +alt.nu.ct +alt.nudism.moderated +alt.nudist +alt.nudist.pussy +alt.nuke.albania +alt.nuke.american-sitcoms +alt.nuke.amerikkka +alt.nuke.de.alt.flame +alt.nuke.denmark +alt.nuke.europe +alt.nuke.france +alt.nuke.jay-denebeim +alt.nuke.muckdonalds +alt.nuke.norway +alt.nuke.paxnet +alt.nuke.telia +alt.nuke.the.USA +alt.nuke.the.british-empire +alt.nuke.the.kadaitcha +alt.nuke.the.usa +alt.nuke.thomas-nord +alt.null +alt.null.bandwagons +alt.null.xi +alt.numberfinder.com +alt.numbskull +alt.numnut.john-grubor +alt.nurd.leeb +alt.nv.personals +alt.ny.gruppe +alt.nyk +alt.nyulfsuldn +alt.nzjnet +alt.nzwa +alt.o.clkuw.y.r +alt.o.x.i.tba +alt.o.xyrmd.h +alt.ob.ty +alt.obi-wan.kenobi.is.dead +alt.obituaries +alt.oblivion +alt.obsessive.nerd +alt.occult.methods +alt.ocn.ghrrbgf +alt.october +alt.off-topic +alt.office.management +alt.og.m.tf.yml +alt.oh.shit +alt.ohiqla.lk +alt.old-west +alt.olympic.studies +alt.olympics.housing.low-cost +alt.omnivore +alt.omnivore.knows-best +alt.omnivore.thegrouch +alt.omnivore.wearsa +alt.omnivore.wearsa.dress-onhis-homepage +alt.online-service +alt.online-service.america-online +alt.online-service.att-worldnet +alt.online-service.att-worldnet.alumni +alt.online-service.att-worldnet.ex-users +alt.online-service.compuserve +alt.online-service.cyberpromo +alt.online-service.delphi +alt.online-service.dennon-online +alt.online-service.freenet +alt.online-service.genie +alt.online-service.gnn +alt.online-service.imagination +alt.online-service.internetmci +alt.online-service.microsoft +alt.online-service.msn-0wns-j00 +alt.online-service.pacbell +alt.online-service.prodigy +alt.online-service.ten +alt.online-service.webtv +alt.online-service.webtv.abuse +alt.online-service.webtv.sucks +alt.online-services.roadrunner +alt.online.service +alt.online.services +alt.only.test222 +alt.ontario.north-bay +alt.onzin +alt.oobe +alt.ooga.booga +alt.opel.norge +alt.open-servers.news.west-tech.com +alt.opengroup.org.kaleb.keithley +alt.oqfbc +alt.oregonghost +alt.org.audubon +alt.org.beta-sigma-phi +alt.org.clan-macdude +alt.org.data-proc-mgmt +alt.org.db-nl.misc +alt.org.earth-first +alt.org.earth-first.eco-terrorists +alt.org.food-not-bombs +alt.org.homes-not-jails +alt.org.iww +alt.org.jaycees +alt.org.legio-darkyard +alt.org.mtg-broker +alt.org.natl-assn-mortgage-brokers +alt.org.natl-assn.mtg-brokers +alt.org.pla +alt.org.promisekeepers +alt.org.royal-rangers +alt.org.scoutnet +alt.org.sierra-club +alt.org.ski-patrol +alt.org.starfleet +alt.org.team-os2 +alt.org.toastmasters +alt.org.triple9 +alt.org.young-enterprise +alt.org.young-enterprise.mesmerize +alt.org.zencor +alt.orgonomy +alt.os +alt.os.assembly +alt.os.beos +alt.os.cerberos +alt.os.citrix +alt.os.development +alt.os.free-dos +alt.os.free_dos +alt.os.free_dos.hacking +alt.os.freedows +alt.os.linux +alt.os.linux.best +alt.os.linux.caldera +alt.os.linux.corel +alt.os.linux.dial-up +alt.os.linux.madrake +alt.os.linux.mandrake +alt.os.linux.projects +alt.os.linux.redhat +alt.os.linux.slackware +alt.os.linux.smoothwall +alt.os.linux.storm +alt.os.linux.suse +alt.os.linux.turbolinux +alt.os.multics +alt.os.mvix.w +alt.os.nachos +alt.os.openbsd +alt.os.security +alt.os.tlerll +alt.os.windows-xp +alt.os.windows.xp +alt.os.windows2000 +alt.os.windows95 +alt.os.windows95.crash +alt.os.windows95.crash.crash +alt.os.windows95.crash.crash.crash +alt.os.xmach +alt.os2.vs.win.zeikerd +alt.osho +alt.oto +alt.ou.njlbr +alt.out-of-body +alt.out-of-body.cypher +alt.outdoor.photo.chat +alt.ov.xvyksla.ryz +alt.overlords +alt.overweight.trailer-trash.jay-denebeim +alt.owl.wxzl +alt.ox +alt.ox.n.p +alt.oxford.talk +alt.oyp +alt.oyp.alumni +alt.oyp.announce +alt.oyp.corp +alt.oyp.eoryp +alt.oyp.norp +alt.oyp.scopy +alt.ozdebate +alt.ozdebate.dingo-ate-my-baby +alt.ozdebate.jokes +alt.ozemail +alt.p +alt.p.bbsbjakx +alt.p.gasrpvgd +alt.paedophile.jerry-brenner +alt.pagan +alt.pagan.conacts +alt.pagan.contacts +alt.pagan.howard.knight +alt.pagan.magick +alt.palm.springs.ca +alt.pantyhose +alt.pantyhose.as.a.mask.doesnt.work +alt.parallel.universes +alt.paranet.abduct +alt.paranet.esp-help +alt.paranet.metaphysics +alt.paranet.paranormal +alt.paranet.psi +alt.paranet.science +alt.paranet.skeptic +alt.paranet.ufo +alt.paranoia +alt.paranoia.damned-fish +alt.paranoia.delusional +alt.paranoia.rampant +alt.paranoia.spambots +alt.paranormal +alt.paranormal.channeling +alt.paranormal.crop-circles +alt.paranormal.moderated +alt.paranormal.pyramid +alt.paranormal.reincarnation +alt.paranormal.spells.hexes.magic +alt.parenting +alt.parenting.attachment +alt.parenting.formula-feeding +alt.parenting.grandparents +alt.parenting.paranormal +alt.parenting.solutions +alt.parenting.spanking +alt.parenting.spanking.moderated +alt.parenting.spouse-says-no +alt.parenting.twins-triplets +alt.parents +alt.parents-teens +alt.parents.stupid +alt.park.avenue.festival.pizza.choke +alt.party +alt.party.stag-nigh +alt.party.stag-night +alt.pastel.developer.forum +alt.patent-pending +alt.paulus.pietsma.quotes +alt.pave.the.earth +alt.pave.the.earth.with.asphalt +alt.pave.waldon.pond +alt.payroll +alt.pbem.blackfuture +alt.pbem.ryn +alt.pbi.premier +alt.pc.kelt +alt.pcdos +alt.pcnews +alt.pcusenet +alt.peace +alt.peace-corps +alt.peanut-butter.electricity +alt.pedophile.bruce-ediger +alt.pedophile.martin-hannigan +alt.pedophile.richard-bullis +alt.pedophile.roger-wemyss +alt.pedophilia.announce +alt.pedophilia.boys +alt.pedophilia.girls +alt.pedophilia.pictures +alt.pedophilia.swaps +alt.peepsk +alt.peer-to-peer +alt.peer-to-peer.napster +alt.peeves +alt.penguin-fetish.recovery +alt.penguins.bondage.latex.springs.bounce.bounce.bounce +alt.penpals +alt.penpals.50-plus +alt.penpals.college +alt.penpals.erotic +alt.penpals.forty-plus-yrs +alt.penpals.rejects +alt.pens.bic +alt.pens.montblanc +alt.penthouse.sex.anal +alt.penthouse.sex.breast +alt.penthouse.sex.breasts +alt.penthouse.sex.enemas +alt.penthouse.sex.erotica +alt.penthouse.sex.europe +alt.penthouse.sex.fat +alt.penthouse.sex.fetish.fashion +alt.penthouse.sex.fetish.feet +alt.penthouse.sex.fetish.panties +alt.penthouse.sex.fetish.scat +alt.penthouse.sex.fetish.size +alt.penthouse.sex.fetish.tongue +alt.penthouse.sex.fetish.waifs +alt.penthouse.sex.fetish.wet-and-messy +alt.penthouse.sex.gangbang +alt.penthouse.sex.gaymen.porn +alt.penthouse.sex.homosexual +alt.penthouse.sex.intergen +alt.penthouse.sex.international +alt.penthouse.sex.internet +alt.penthouse.sex.jp +alt.penthouse.sex.magazines +alt.penthouse.sex.masterbation +alt.penthouse.sex.masterbation.pictures.female +alt.penthouse.sex.masturbation +alt.penthouse.sex.movies +alt.penthouse.sex.oral +alt.penthouse.sex.orgy +alt.penthouse.sex.phone +alt.penthouse.sex.pictures +alt.penthouse.sex.prostitution +alt.penthouse.sex.safe +alt.penthouse.sex.services +alt.penthouse.sex.sissy +alt.penthouse.sex.sissy.slut +alt.penthouse.sex.sm.fig +alt.penthouse.sex.sounds +alt.penthouse.sex.spanking +alt.penthouse.sex.stories +alt.penthouse.sex.stories.bondage +alt.penthouse.sex.stories.cuckold +alt.penthouse.sex.stories.gay +alt.penthouse.sex.stories.hetero +alt.penthouse.sex.strip-clubs +alt.penthouse.sex.strippers.jobs +alt.penthouse.sex.swingers.uk +alt.penthouse.sex.tasteless +alt.penthouse.sex.telephone +alt.penthouse.sex.testeless +alt.penthouse.sex.voyeurism +alt.penthouse.sex.wanted +alt.penthouse.sex.wanted.escorts.ads +alt.penthouse.sex.wanted.models +alt.perfume +alt.periodismo +alt.periphs +alt.periphs.multifunctions +alt.periphs.pcmcia +alt.perl +alt.perl.flame +alt.perl.sockets +alt.permaculture +alt.personal +alt.personal.ads +alt.personal.bondage +alt.personals +alt.personals.abbotsford +alt.personals.ad +alt.personals.ads +alt.personals.aliens +alt.personals.asian +alt.personals.bi +alt.personals.bi.newjersey +alt.personals.big-folk +alt.personals.big-folks +alt.personals.big-people.uk +alt.personals.black +alt.personals.bodyart +alt.personals.bondage +alt.personals.bondage.gay +alt.personals.calgary +alt.personals.d +alt.personals.edmonton +alt.personals.fags +alt.personals.fat +alt.personals.fetish +alt.personals.fetish.coprophagy +alt.personals.fetish.mucophagy +alt.personals.fetish.urophilia +alt.personals.furry +alt.personals.gay +alt.personals.gothic +alt.personals.herpes +alt.personals.hiv-positive +alt.personals.homosexual +alt.personals.intercultural +alt.personals.intergen +alt.personals.interracial +alt.personals.jewish +alt.personals.martin.hannigan.stalker.boi +alt.personals.menage-a-trois +alt.personals.misc +alt.personals.montreal +alt.personals.motss +alt.personals.motss.women +alt.personals.nanaimo +alt.personals.new-zealand +alt.personals.newsgroup-creators.wanted +alt.personals.ottawa +alt.personals.phone +alt.personals.poly +alt.personals.psychedelic +alt.personals.sanfrancisco.married-attach +alt.personals.slavery +alt.personals.spanking +alt.personals.spanking.punishment +alt.personals.spanking.the.monkey +alt.personals.sudbury +alt.personals.tall +alt.personals.teen +alt.personals.toronto +alt.personals.transgendered +alt.personals.universities +alt.personals.universities.csu.sacramento +alt.personals.vancouver +alt.personals.vegetarian +alt.personals.viagra-users +alt.personals.where-are-you-now +alt.personals.where.are.you.now +alt.personals.whites-only +alt.personas +alt.personas.marketplace +alt.personas.marketplace.discounted +alt.personas.marketplace.free +alt.personas.marketplace.trolls-only +alt.perv.christer-dufvenberg +alt.perv.roland-rytterbrant +alt.perv.ynf-ylva +alt.pessimism +alt.pet.products.evaluate +alt.pets +alt.pets.arachnids +alt.pets.barbecue +alt.pets.barbecue.cats +alt.pets.barbecue.hamsters +alt.pets.birds.dutch +alt.pets.birds.softbills +alt.pets.birds.softbills.crows +alt.pets.birds.softbills.starlings +alt.pets.cats +alt.pets.chia +alt.pets.degus +alt.pets.dogs.amstaff +alt.pets.dogs.aussies +alt.pets.dogs.flame-wars +alt.pets.dogs.labrador +alt.pets.dogs.pitbull +alt.pets.dogs.pomeranians +alt.pets.dogs.sharpei +alt.pets.dogs.telepathic.yogi +alt.pets.dogs.vizsla +alt.pets.ferrets +alt.pets.gerbils +alt.pets.guinea-pigs +alt.pets.hamsters +alt.pets.hedgehogs +alt.pets.mice +alt.pets.parrots.african-grey +alt.pets.parrots.amazons +alt.pets.parrots.breeding +alt.pets.parrots.budgerigars +alt.pets.parrots.cockatiels +alt.pets.parrots.cockatoo +alt.pets.parrots.jardines +alt.pets.parrots.macaws +alt.pets.parrots.marketplace +alt.pets.parrots.misc +alt.pets.parrots.parrotlets +alt.pets.pet-rights +alt.pets.prairie-dogs +alt.pets.rabbits +alt.pets.reptiles.lizards +alt.pets.reptiles.lizards.gecko +alt.pets.reptiles.lizards.iguana +alt.pets.reptiles.snakes +alt.pets.reptiles.snakes.pythons +alt.pets.reptiles.snakes.pythons.ball +alt.pets.reptiles.snakes.pythons.burmese +alt.pets.reptiles.snakes.pythons.reticulated +alt.pets.rodents +alt.pets.rodents.degus +alt.pets.rodents.rats +alt.pets.skunks +alt.pets.sugar-glider +alt.pets.tamagotchi +alt.petz +alt.ph.uk +alt.ph.uk.binaries +alt.ph.uk.lamers +alt.ph.uk.newbies +alt.ph.za +alt.pharm.indust +alt.phat.jay-denebeim +alt.phil-oliver.bambi.bambi.bambi +alt.phil-oliver.die.die.die +alt.phil-oliver.gehzober.gehzober.gehzober +alt.phil-oliver.has.no.life +alt.phil-oliver.roar.roar.roar +alt.philatelic.com +alt.philez +alt.philips.cdr.discussion +alt.philosophy +alt.philosophy.checkmate +alt.philosophy.debate +alt.philosophy.jarf +alt.philosophy.kant +alt.philosophy.law +alt.philosophy.objectivism +alt.philosophy.taoism +alt.philosophy.taosim.tzaddiks-wayonly +alt.philosophy.zen +alt.phonelosers +alt.photography +alt.php +alt.php-nuke.fr +alt.php.sql +alt.phreak.nl +alt.phreaking +alt.phylum-chordata.is.a.paedophile +alt.pictues.binaries.erotica +alt.pictures +alt.pictures.ana-voog +alt.pictures.fuzzy.animals +alt.pictures.lara-fabian +alt.pictures.monsters +alt.pictures.sex +alt.pigs-can-fly +alt.pigwalk +alt.pimpsup.hozdown +alt.pimpz.org +alt.pinch +alt.pinecone +alt.pink.floyd +alt.pinky.the.ferret.dork.dork.dork +alt.pirate.radio +alt.pissed.federal.employees +alt.pizza.delivery.drivers +alt.pizza.delivery.drivers.malicious +alt.pizza.delivery.drivers.no-netcop +alt.pizza.face.jay-denebeim +alt.places.tybee.island +alt.plague +alt.planetarion +alt.planets.asteroid-belt +alt.planets.earth +alt.planets.earth.moon +alt.planets.jupiter +alt.planets.jupiter.moons.adrastea +alt.planets.jupiter.moons.amalthea +alt.planets.jupiter.moons.ananke +alt.planets.jupiter.moons.callisto +alt.planets.jupiter.moons.carme +alt.planets.jupiter.moons.elara +alt.planets.jupiter.moons.europa +alt.planets.jupiter.moons.ganymede +alt.planets.jupiter.moons.himalia +alt.planets.jupiter.moons.io +alt.planets.jupiter.moons.leda +alt.planets.jupiter.moons.lysithea +alt.planets.jupiter.moons.metis +alt.planets.jupiter.moons.pasiphae +alt.planets.jupiter.moons.sinope +alt.planets.jupiter.moons.thebe +alt.planets.mars +alt.planets.mars.moons.deimos +alt.planets.mars.moons.phobos +alt.planets.mercury +alt.planets.misc +alt.planets.neptune +alt.planets.neptune.moons.despina +alt.planets.neptune.moons.galatea +alt.planets.neptune.moons.larissa +alt.planets.neptune.moons.naiad +alt.planets.neptune.moons.nereid +alt.planets.neptune.moons.proteus +alt.planets.neptune.moons.thalassa +alt.planets.neptune.moons.triton +alt.planets.pluto +alt.planets.pluto.moons.charon +alt.planets.saturn +alt.planets.saturn.moons.atlas +alt.planets.saturn.moons.calypso +alt.planets.saturn.moons.dione +alt.planets.saturn.moons.enceladus +alt.planets.saturn.moons.epimetheus +alt.planets.saturn.moons.helene +alt.planets.saturn.moons.hyperion +alt.planets.saturn.moons.iapetus +alt.planets.saturn.moons.janus +alt.planets.saturn.moons.mimas +alt.planets.saturn.moons.pan +alt.planets.saturn.moons.pandora +alt.planets.saturn.moons.phoebe +alt.planets.saturn.moons.prometheus +alt.planets.saturn.moons.rhea +alt.planets.saturn.moons.telesto +alt.planets.saturn.moons.tethys +alt.planets.saturn.moons.titan +alt.planets.uranus +alt.planets.uranus.moons.ariel +alt.planets.uranus.moons.belinda +alt.planets.uranus.moons.bianca +alt.planets.uranus.moons.calibran +alt.planets.uranus.moons.cordelia +alt.planets.uranus.moons.cressidia +alt.planets.uranus.moons.desdemona +alt.planets.uranus.moons.juliet +alt.planets.uranus.moons.miranda +alt.planets.uranus.moons.oberon +alt.planets.uranus.moons.ophelia +alt.planets.uranus.moons.portia +alt.planets.uranus.moons.puck +alt.planets.uranus.moons.rosalind +alt.planets.uranus.moons.sycorax +alt.planets.uranus.moons.titania +alt.planets.uranus.moons.umbriel +alt.planets.venus +alt.planning.internet +alt.planning.transportation +alt.planning.urban +alt.plastic +alt.plastic.utensils.spork.spork.spork +alt.pocket-rocket +alt.podiatry.misc +alt.podiatry.surgery +alt.poetry +alt.poetry.doggerel +alt.police.canada +alt.politics +alt.politics.british +alt.politics.bush +alt.politics.carlos-may +alt.politics.clinton +alt.politics.communism +alt.politics.communism.jay-denebeim +alt.politics.correct +alt.politics.datahighway +alt.politics.democrats +alt.politics.democrats.clinton +alt.politics.democrats.d +alt.politics.democrats.house +alt.politics.democrats.senate +alt.politics.drinking-age +alt.politics.ec +alt.politics.economics +alt.politics.elections +alt.politics.england.euro +alt.politics.england.misc +alt.politics.equality +alt.politics.europe +alt.politics.europe.misc +alt.politics.fans.izquierdaunida +alt.politics.gossip +alt.politics.green.party +alt.politics.greens +alt.politics.gw-bush +alt.politics.harry-browne +alt.politics.homosexual +alt.politics.homosexuality +alt.politics.homosexuality.hatemongers.phelps +alt.politics.homosexuality.hatemongers.rev-white +alt.politics.immigration +alt.politics.india.progressive +alt.politics.italy +alt.politics.jaffo +alt.politics.jaffo.dammit +alt.politics.jason-steiner +alt.politics.korea +alt.politics.liberal.bleed.bleed.bleed +alt.politics.liberalism +alt.politics.libertarian +alt.politics.libertarian.creative +alt.politics.libertarian.gay +alt.politics.marijuana +alt.politics.media +alt.politics.metal.anti-christian +alt.politics.micronations +alt.politics.national-socialist.texas +alt.politics.nationalism +alt.politics.nationalism.black +alt.politics.nationalism.texas +alt.politics.nationalism.white +alt.politics.nationalism.white.announce +alt.politics.neil-simpson +alt.politics.nyarth-for-president +alt.politics.org.batf +alt.politics.org.cia +alt.politics.org.covert +alt.politics.org.fbi +alt.politics.org.misc +alt.politics.org.nsa +alt.politics.org.nsa.echelon +alt.politics.org.suopo +alt.politics.org.un +alt.politics.os2 +alt.politics.perot +alt.politics.radical-left +alt.politics.reform +alt.politics.religion +alt.politics.republic-of.texas +alt.politics.republicans +alt.politics.rightgrrl +alt.politics.satanism +alt.politics.sex +alt.politics.socialism +alt.politics.socialism.binaries +alt.politics.socialism.democratic +alt.politics.socialism.libertarian +alt.politics.socialism.mao +alt.politics.socialism.trotsky +alt.politics.socialist.nazi +alt.politics.the-revolution +alt.politics.turn-left +alt.politics.uk +alt.politics.united-we-stand +alt.politics.unix +alt.politics.usa +alt.politics.usa.congress +alt.politics.usa.constitution +alt.politics.usa.constitution.gun-rights +alt.politics.usa.death-metal +alt.politics.usa.misc +alt.politics.usa.republican +alt.politics.usa.usa-parliament +alt.politics.vietnamese +alt.politics.white-power +alt.politics.winnt +alt.politics.world.federalism +alt.politics.youth +alt.politics.yugoslavia +alt.politiek.corruptie +alt.poltics.socialism.democratic +alt.polyamory +alt.poopy-pants +alt.pootergeek.lesbian +alt.popcollectief.denbosch +alt.popularbooks +alt.porno.images +alt.porno.images.homosex +alt.porno.images.lesbo +alt.positief.athome.nl +alt.possessive.its.has.no.apostrophe +alt.post-in-html +alt.post-in-html.binaries +alt.post-in-html.flame +alt.post-in-html.only +alt.postalguys +alt.postmodern +alt.pot.kettle.black +alt.pota +alt.pothead.john-grubor +alt.pouting.sandwich +alt.poverty +alt.power.zone.assemblies +alt.power.zone.rob-cypher +alt.power.zone.service-corps +alt.prank-calls +alt.preferedalt +alt.prehensile +alt.prehospital-care +alt.president.clinton +alt.president.clinton.important.work.to.do.blowjob.blowjob.mrph.blowjob +alt.president.clinton.penis.intern +alt.previdenza.it +alt.previdenza.sociale +alt.primenet.recovery +alt.prince.of.plankton +alt.prison.reform +alt.prisoner.rights +alt.prisoners.wives +alt.prisons +alt.prisons.moderated +alt.prisons.officer +alt.prisons.waltyisms +alt.privacy +alt.privacy.anon-server +alt.privacy.clipper +alt.privacy.spyware +alt.private.investigator +alt.pro-wrestling +alt.pro-wrestling.dx +alt.pro-wrestling.ecw +alt.pro-wrestling.nostalgia +alt.pro-wrestling.nwo +alt.pro-wrestling.wcw +alt.pro-wrestling.wolfpac +alt.pro-wrestling.women +alt.pro-wrestling.wwe +alt.pro-wrestling.wwf +alt.pro-wrestling.wwf.masturbation +alt.proba +alt.probably.talk +alt.product-management +alt.programmazione-spp +alt.project.mayhem +alt.projectmng +alt.prophecies.cayce +alt.prophecies.drturi +alt.prophecies.karl-maldens.nose +alt.prophecies.nostradamus +alt.prophecies.sloggy +alt.prose +alt.prose.memoir +alt.prose.postmodern +alt.prose.sharewords +alt.provider.aol +alt.provider.earthlink +alt.provider.flashnet +alt.provider.ibm +alt.provider.mci +alt.provider.tin +alt.provider.uunet +alt.providers.flashnet.not-bad +alt.providers.iol.sucks +alt.providers.tin.sucks +alt.prowling-for-gay-sex.alex-cain +alt.prowling-for-gay-sex.jay-denebeim +alt.prueba +alt.prueba2 +alt.psfsw +alt.psst.hoy +alt.psycho +alt.psychoactives +alt.psychology +alt.psychology.adlerian +alt.psychology.behavior.internet +alt.psychology.dramatherapy +alt.psychology.help +alt.psychology.jung +alt.psychology.mindmachine +alt.psychology.mistake-theory +alt.psychology.nlp +alt.psychology.personality +alt.psychology.psychoanalysis +alt.psychology.synchronicity +alt.psychology.transpersonal +alt.psychotic +alt.psychotic.roommates +alt.pt.groups.funex +alt.pub.brykins-place +alt.pub.coffeehouse +alt.pub.coffeehouse.amethyst +alt.pub.dragons-inn +alt.pub.kacees +alt.pub.oddbins +alt.pub.wills-place +alt.publish.books +alt.publish.newspaper +alt.pud +alt.pulp +alt.pumpkin.militia +alt.pumpkins +alt.punk +alt.punk.europe +alt.punk.straight-edge +alt.punk.uk +alt.pyrotechnics +alt.q +alt.qdm.iknt +alt.qed.u +alt.qiiwwnff +alt.ql.creative +alt.quake2 +alt.queen-of-cans +alt.queenfan.irc +alt.quit.smoking-uk +alt.quit.smoking.support +alt.quit.smoking.thru.sex +alt.quizes.and.riddles.and.jokes +alt.quotations +alt.r +alt.racist.mongrel-mind +alt.radio +alt.radio.amateur +alt.radio.amateur.club.clarc +alt.radio.amateur.club.taparc +alt.radio.broadcasting +alt.radio.broadcasting.open +alt.radio.cb.crunch +alt.radio.cb.skip +alt.radio.college +alt.radio.digital +alt.radio.family +alt.radio.free +alt.radio.free.hawaii +alt.radio.highschool +alt.radio.international +alt.radio.internet +alt.radio.internet.kcuf +alt.radio.internet.shoutcast +alt.radio.networks +alt.radio.networks.cbc +alt.radio.networks.npr +alt.radio.oldtime +alt.radio.online-tonight +alt.radio.paranormal +alt.radio.parg +alt.radio.paul-harvey +alt.radio.pirate +alt.radio.scanner +alt.radio.scanner.flame_fest +alt.radio.scanner.uk +alt.radio.stations.wsia +alt.radio.talk +alt.radio.talk.dr-laura +alt.radio.talk.kmpc +alt.radio.talk.richard-dolce +alt.radio.talk.wattenburg +alt.radio.uk +alt.radio.uk.talk-radio +alt.radio.uk.talk-sport +alt.radio.whadya-know +alt.radio.wktu +alt.railroad +alt.railroad.steam +alt.railroad.twofoot +alt.railway.locomotives.uk.class37 +alt.railway.rail-gen.follow-up +alt.rainwoman6 +alt.ranch.uncle-tex +alt.random.noise +alt.randompostcinema +alt.rap +alt.rap-gdead +alt.rap.cypher +alt.rap.lyrics +alt.rap.sucks +alt.rape.best-movies +alt.rapes.little.boys.trippy +alt.rasap +alt.ravage +alt.ravage.sucks +alt.rave +alt.ray +alt.rc.ltgk.j +alt.rcn.edb.zd +alt.real-estate +alt.real-estate-agents +alt.real-estate.aust +alt.real-estate.commercial.az +alt.real-estate.commercial.ca-central +alt.real-estate.commercial.ca-north +alt.real-estate.commercial.ca-south +alt.real-estate.commercial.co +alt.real-estate.commercial.fl-central +alt.real-estate.commercial.fl-north +alt.real-estate.commercial.fl-south +alt.real-estate.commercial.ga +alt.real-estate.commercial.ma +alt.real-estate.commercial.md +alt.real-estate.commercial.mn +alt.real-estate.commercial.mo +alt.real-estate.commercial.nc +alt.real-estate.commercial.nh +alt.real-estate.commercial.nj +alt.real-estate.commercial.nm +alt.real-estate.commercial.ny +alt.real-estate.commercial.oh +alt.real-estate.commercial.or +alt.real-estate.commercial.pa +alt.real-estate.commercial.tx-northeast +alt.real-estate.commercial.tx-northwest +alt.real-estate.commercial.tx-southeast +alt.real-estate.commercial.tx-southwest +alt.real-estate.multilisting-service +alt.realestate.fsob +alt.realtor.relocation +alt.reap +alt.rec +alt.rec.bicycles.fatcity +alt.rec.bicycles.recumbent +alt.rec.brucetrail +alt.rec.camping +alt.rec.collecting.stamps.discuss +alt.rec.collecting.stamps.flame +alt.rec.collecting.stamps.marketplace +alt.rec.crafts.metalworking +alt.rec.guns +alt.rec.hiking +alt.rec.hovercraft +alt.rec.robotica +alt.rec.robotica.es +alt.rec.spot +alt.recipes +alt.recipes.babies +alt.recipes.hawaii +alt.reciprocity +alt.recortes +alt.recovery +alt.recovery.aa +alt.recovery.aa_germany +alt.recovery.addiction +alt.recovery.addiction.alcoholism +alt.recovery.addiction.gambling +alt.recovery.addiction.sexual +alt.recovery.adult-children +alt.recovery.altconfig +alt.recovery.altconfig.dethroned +alt.recovery.brainwash.telia.employees +alt.recovery.catholicism +alt.recovery.christian.abuse +alt.recovery.clutter +alt.recovery.codependency +alt.recovery.compulsive-eat +alt.recovery.cow-fetish +alt.recovery.dean-stark +alt.recovery.disease.muppet-crotch +alt.recovery.dorothy +alt.recovery.from-12-steps +alt.recovery.fundamentalism +alt.recovery.job.min-wage +alt.recovery.lipbalm +alt.recovery.mania.beanie-babies +alt.recovery.mlm +alt.recovery.mormonism +alt.recovery.na +alt.recovery.na.hardcore-action +alt.recovery.nettalk +alt.recovery.nicotine +alt.recovery.online-journal +alt.recovery.panic-anxiety.self-help +alt.recovery.procrastinate +alt.recovery.rational +alt.recovery.religion +alt.recovery.rmgroup +alt.recovery.rmgroup.addict +alt.recovery.sexual-addiction +alt.recovery.small-town +alt.recovery.unitarian-univ +alt.recruiters.splits +alt.reddingsbrigade +alt.redheads +alt.redhotant.support +alt.redhotant.top.posters +alt.redline-design +alt.redneck.brian-stumm +alt.reform.fresh-start +alt.regional.usa.fl.west-volusia +alt.relationships.deaf-hearing +alt.religio.konfuceo +alt.religion +alt.religion.africa +alt.religion.afterburner +alt.religion.afterlife +alt.religion.all-worlds +alt.religion.amiga +alt.religion.amos +alt.religion.angels +alt.religion.anthony-ciolli +alt.religion.anticrust +alt.religion.apologetics +alt.religion.apparitions +alt.religion.asatru +alt.religion.autos.yugo +alt.religion.ayse-sercan +alt.religion.bahai +alt.religion.broadcast +alt.religion.buddhism +alt.religion.buddhism.nichiren +alt.religion.buddhism.nichiren.shoshu.news +alt.religion.buddhism.nkt +alt.religion.buddhism.ris-med +alt.religion.buddhism.theravada +alt.religion.buddhism.tibetan +alt.religion.christian +alt.religion.christian-teen +alt.religion.christian.20-something +alt.religion.christian.adventist +alt.religion.christian.amish +alt.religion.christian.anabaptist.brethren +alt.religion.christian.baptist +alt.religion.christian.biblestudy +alt.religion.christian.boston-church +alt.religion.christian.calvary-chapel +alt.religion.christian.campus-crusade +alt.religion.christian.charismatic +alt.religion.christian.chinese +alt.religion.christian.east-orthodox +alt.religion.christian.elbrujo +alt.religion.christian.episcopal +alt.religion.christian.home-church +alt.religion.christian.hypocrisy +alt.religion.christian.intervarsity +alt.religion.christian.jesus-connect +alt.religion.christian.jesus-connection +alt.religion.christian.last-days +alt.religion.christian.lutheran +alt.religion.christian.methodist +alt.religion.christian.pentecostal +alt.religion.christian.plymouth.brethren +alt.religion.christian.presbyterian +alt.religion.christian.roman-catholic +alt.religion.christian.romman-catholic +alt.religion.christian.vineyard +alt.religion.christian.youth-ministry +alt.religion.christian.ywam +alt.religion.christianity +alt.religion.christianity.hypocrisy +alt.religion.churchofjesuschrist +alt.religion.cjc +alt.religion.clergy +alt.religion.clue +alt.religion.computers +alt.religion.course-miracle +alt.religion.cult-defense +alt.religion.cypherology +alt.religion.cypherology.high-priest.ryan-grant +alt.religion.dake-bonoism +alt.religion.dean-stark +alt.religion.deism +alt.religion.dishwashing +alt.religion.drew-hamilton +alt.religion.druid +alt.religion.eckankar +alt.religion.emacs +alt.religion.end-times.prophecies +alt.religion.extinct +alt.religion.fishisim +alt.religion.frogbuttology +alt.religion.gay-les-bi-tran +alt.religion.getuology +alt.religion.gnostic +alt.religion.gnostic.orders +alt.religion.goddess +alt.religion.gods +alt.religion.h2o +alt.religion.hindu +alt.religion.islam +alt.religion.islam.arabic +alt.religion.islam.shia +alt.religion.jaffo +alt.religion.jain +alt.religion.jedi +alt.religion.jehovahs-witn +alt.religion.jewish.daf-discuss +alt.religion.judaism +alt.religion.judaism.orthodox +alt.religion.kibology +alt.religion.kibology.is.dead.dead.dead +alt.religion.liet.santoy +alt.religion.louis-nick +alt.religion.macarena +alt.religion.monica +alt.religion.mormon +alt.religion.mormon.fellowship +alt.religion.orisha +alt.religion.pagan.evil +alt.religion.pagan.nazi +alt.religion.pagan.texas +alt.religion.paulo-dimas +alt.religion.paulo-dimas.deveras +alt.religion.paulo-dimas.misc +alt.religion.paulo-dimas.newcomers +alt.religion.paulo-dimas.philosophy +alt.religion.paulo-dimas.study +alt.religion.paulo-dimas.temples +alt.religion.paulo-dimas.worship +alt.religion.psychedelic.moderated +alt.religion.quackzar +alt.religion.rabbet +alt.religion.raelian +alt.religion.ray-karczewski +alt.religion.roy-masters +alt.religion.sabaean +alt.religion.sabbath-keeper +alt.religion.salvation-army +alt.religion.santaism +alt.religion.satanism +alt.religion.scientology +alt.religion.scientology-sucks +alt.religion.scientology.new-church +alt.religion.scientology.squick.squick.squick +alt.religion.scientology.xenu +alt.religion.sexuality +alt.religion.shamanism +alt.religion.simpsons +alt.religion.smerpology +alt.religion.spangles +alt.religion.spiritism.spiritualism.moderated +alt.religion.spiritualism +alt.religion.stupid.asatru +alt.religion.subgenius.is.lame +alt.religion.tantra +alt.religion.the-last-church +alt.religion.thelastchurch +alt.religion.tolkienology +alt.religion.totology +alt.religion.triplegoddess +alt.religion.ubergenetics +alt.religion.unification +alt.religion.unifier.flash-inc +alt.religion.unitarian-univ +alt.religion.universal-life +alt.religion.urantia-book +alt.religion.vaisnava +alt.religion.vim +alt.religion.voodoo +alt.religion.voodoo.scott-abraham +alt.religion.vran +alt.religion.w-w-chuch-god +alt.religion.w-w-church-god +alt.religion.watchtower +alt.religion.watchtower.judicial +alt.religion.watchtower.reform +alt.religion.wicca +alt.religion.wicca.moderated +alt.religion.yuism +alt.religion.zakkology +alt.religion.zoroastrianism +alt.relocate +alt.ren-faire +alt.renewing.american.civilization +alt.republican +alt.research.monroe-inst +alt.restaurants +alt.restaurants.professionals +alt.resumes +alt.retail.category.management +alt.retribution +alt.revenge +alt.revenge.loveaffairs +alt.revenge.roommates +alt.revisionism +alt.revolution.american.second +alt.revolution.counter +alt.rhode_island +alt.roastbeef.curtains +alt.robert +alt.robot.alien +alt.robot.dog +alt.robot.evil +alt.robot.home +alt.robot.space +alt.robot.war +alt.robotica +alt.robotica.es +alt.robots +alt.robots.cartoon +alt.robots.giant +alt.robots.sex +alt.robots.small +alt.robotwars +alt.roc-n-roll.metal.metallica +alt.rock-n-roll +alt.rock-n-roll.acdc +alt.rock-n-roll.aerosmith +alt.rock-n-roll.asia +alt.rock-n-roll.classic +alt.rock-n-roll.hard +alt.rock-n-roll.metal +alt.rock-n-roll.metal.bad-grrrl +alt.rock-n-roll.metal.black +alt.rock-n-roll.metal.black.nazi +alt.rock-n-roll.metal.bruce-dickinson +alt.rock-n-roll.metal.death +alt.rock-n-roll.metal.doom +alt.rock-n-roll.metal.drain +alt.rock-n-roll.metal.gnr +alt.rock-n-roll.metal.groove +alt.rock-n-roll.metal.hard +alt.rock-n-roll.metal.heavy +alt.rock-n-roll.metal.ironmaiden +alt.rock-n-roll.metal.megadeth +alt.rock-n-roll.metal.metallica +alt.rock-n-roll.metal.metallica.boycott +alt.rock-n-roll.metal.motley-crue +alt.rock-n-roll.metal.nihilism +alt.rock-n-roll.metal.oldschool +alt.rock-n-roll.metal.personalities +alt.rock-n-roll.metal.personalities.airmaster +alt.rock-n-roll.metal.personalities.brandubh +alt.rock-n-roll.metal.personalities.daemonic +alt.rock-n-roll.metal.personalities.goden +alt.rock-n-roll.metal.personalities.gortician +alt.rock-n-roll.metal.personalities.hatred +alt.rock-n-roll.metal.personalities.pimpbot-5000 +alt.rock-n-roll.metal.philosophy +alt.rock-n-roll.metal.philosophy.evil +alt.rock-n-roll.metal.progressive +alt.rock-n-roll.metal.slayer +alt.rock-n-roll.moderated.crue +alt.rock-n-roll.motley.crue.m +alt.rock-n-roll.motorhead +alt.rock-n-roll.oldies +alt.rock-n-roll.psychedelic +alt.rock-n-roll.stones +alt.rock-n-roll.ufo +alt.rocksu +alt.rodney-king +alt.rodney.dangerfield +alt.romance +alt.romance.chat +alt.romance.chat.indiana.barf.barf.barf +alt.romance.checkmate +alt.romance.chinese +alt.romance.conflict-of-interest +alt.romance.conflict-of-interest.poetry +alt.romance.latinas +alt.romance.mail-order-brides +alt.romance.mail-order-brides.former-soviet-union +alt.romance.mailorderbrides +alt.romance.mature-adult +alt.romance.online +alt.romance.teen +alt.romance.unhappy +alt.romath +alt.rosalina.love.love.love +alt.rosalina.will.you.marry.me +alt.roundtable +alt.royalty +alt.rpg.chesley +alt.rpg.imperia +alt.rpg.imperia.imperium +alt.rpg.infinity +alt.rpg.juanolia +alt.rpg.secfenia +alt.rpg.wizardry +alt.rush-limbaugh +alt.russell-b +alt.russia +alt.russian-club +alt.rv +alt.rv.nash +alt.rv.pop-up-trailers +alt.sabmag +alt.sad-people.microsoft.lovers +alt.sad-people.vidders +alt.sadistic +alt.sadistic.dentists +alt.sadistic.dentists.drill.drill.drill +alt.sadomasochist.beth-baxter +alt.safe.sex +alt.sage.john-grubor +alt.sailing +alt.sailing.asa +alt.sailing.boats.crew +alt.sailing.boats.crew.shared +alt.sailing.pbsa +alt.sailing.tall-ships +alt.sailing.yacht-charter +alt.saladpuncher +alt.sandy.claws +alt.santas.mailbag +alt.satan.stoned.stoned.stoned +alt.satanism +alt.satanism.art +alt.satanism.murder +alt.satanism.sex +alt.satannet +alt.satanville +alt.satellite +alt.satellite.direcpc +alt.satellite.direcpc.stupid.moron.dpc-dealers +alt.satellite.direcpc.stupid.moron.dpc-dealers.2k-networks +alt.satellite.expressvu +alt.satellite.gps +alt.satellite.gps.binaries +alt.satellite.internet +alt.satellite.radio.europe +alt.satellite.starband +alt.satellite.tv +alt.satellite.tv.australasia +alt.satellite.tv.binaries +alt.satellite.tv.cracked.canalplus +alt.satellite.tv.crypt +alt.satellite.tv.europe +alt.satellite.tv.europe.dvb2000 +alt.satellite.tv.europe.hacks +alt.satellite.tv.europe.sky +alt.satellite.tv.forsale +alt.satellite.tv.hexfiles +alt.satellite.tv.script +alt.saturday +alt.save.the.bandwidth.for.me +alt.save.the.earth +alt.sb.programmer +alt.sca.combat.archer +alt.sca.yenta +alt.scandal.amarillo +alt.scarborough +alt.scary.exe.files +alt.scatology +alt.scenereview +alt.schlock +alt.school.homework-help +alt.school.mates +alt.school.violence +alt.schools.lhhs +alt.sci +alt.sci.amateur +alt.sci.astro +alt.sci.astro.eclipses +alt.sci.astro.hale.bopp +alt.sci.criminology +alt.sci.geology.jobs +alt.sci.joe-bay +alt.sci.math.combinatorics +alt.sci.math.design_theory +alt.sci.math.galois_fields +alt.sci.math.probability +alt.sci.math.statistics.prediction +alt.sci.mbe +alt.sci.multi-d +alt.sci.nanotech +alt.sci.natural.phenomena.unusual +alt.sci.nmr +alt.sci.physics +alt.sci.physics.acoustics +alt.sci.physics.new-theories +alt.sci.physics.spam +alt.sci.planetary +alt.sci.proof-of-god +alt.sci.seti +alt.sci.sociology +alt.sci.tech.indonesian +alt.sci.time-travel +alt.scientology.sucks +alt.scooter +alt.scooter.classic +alt.scooter.moped +alt.scottish.clans +alt.scouting +alt.screw.interlink +alt.sculpture +alt.scum +alt.scuola.itis_cassino +alt.seafarers +alt.seafarers.deck +alt.seafarers.engineroom +alt.seafarers.ratings +alt.sect.ahmadiyya +alt.sect.telecom +alt.security +alt.security.alarms +alt.security.announce +alt.security.dealers +alt.security.dealers.ads +alt.security.doityourself +alt.security.doityourself.ads +alt.security.espionage +alt.security.index +alt.security.keydist +alt.security.neighborhood +alt.security.nl +alt.security.pgp +alt.security.scramdisk +alt.security.terrorism +alt.security.terrorism.atlanta +alt.security.terrorism.cointel +alt.security.terrorism.counter +alt.security.terrorism.flight800 +alt.security.tscm +alt.seduction.fast +alt.seduction.outfoxing +alt.seduction.pickup-artist +alt.sega +alt.sega.genesis +alt.self-esteem +alt.self-help-law +alt.self-improve +alt.self-reliance +alt.september +alt.serbu +alt.sergi.burnore +alt.sewing +alt.sewing.extraspecial.fabric.and.custom.sewing +alt.sewing.mach-embroider +alt.sex +alt.sex-god.jay-denebeim +alt.sex.EROTICA.MARKETPLACE +alt.sex.NOT +alt.sex.abstinance +alt.sex.addiction.recovery.moderated +alt.sex.advocacy +alt.sex.algore.lick.the.wet.toad +alt.sex.algore.little.wooden.boy +alt.sex.aliens +alt.sex.aliensi +alt.sex.alt +alt.sex.alt.romance +alt.sex.alt.romance.chat +alt.sex.alt.sex +alt.sex.alt.sex.erotica +alt.sex.alt.sex.erotica.marketplace +alt.sex.alt.syntax +alt.sex.alt.syntax.tactical +alt.sex.alt.syntax.tacticaln +alt.sex.aluminum +alt.sex.aluminum.basebal +alt.sex.aluminum.baseball +alt.sex.aluminum.baseball.bat +alt.sex.amputee +alt.sex.anal +alt.sex.anall +alt.sex.animals +alt.sex.animals.monica-lewinsky +alt.sex.animalss +alt.sex.asphix +alt.sex.asphyx +alt.sex.asphyxe +alt.sex.babies +alt.sex.balls +alt.sex.ballsp +alt.sex.bdragon +alt.sex.bdragon.and +alt.sex.bdragon.and.jimdana +alt.sex.bdragon.and.jimdanan +alt.sex.bears +alt.sex.bears- +alt.sex.beastial +alt.sex.beastiality +alt.sex.beastiality.barney +alt.sex.beastiality.jay-denebeim +alt.sex.beastiality.kazzmann +alt.sex.beastiality.with.chickens.whilst.wearing.rubber.knickers +alt.sex.beastilaity +alt.sex.beer-bottle +alt.sex.ben-mesander +alt.sex.ben-mesandera +alt.sex.bestiality +alt.sex.bestiality.alix +alt.sex.bestiality.alix.piantadosi +alt.sex.bestiality.alix.piantadosii +alt.sex.bestiality.barney +alt.sex.bestiality.barneye +alt.sex.bestiality.hamster +alt.sex.bestiality.hamster.duct-tape +alt.sex.bestiality.hamster.duct-tape.mikey-clifford +alt.sex.bestiality.hamster.duct-tapee +alt.sex.bestiality.hedgehog.ouch.ouch.ouch +alt.sex.bestiality.pictures +alt.sex.bestiality.picturesa +alt.sex.bestideo-swap +alt.sex.bi +alt.sex.bible +alt.sex.biblical +alt.sex.binaries +alt.sex.binaries.erotica +alt.sex.binaries.erotica.teen +alt.sex.binaries.pictures.erotica.fetish.barbie +alt.sex.blondes +alt.sex.bondage +alt.sex.bondage.bdsm +alt.sex.bondage.ctl +alt.sex.bondage.female-admins-nntp +alt.sex.bondage.female-amins-nntp +alt.sex.bondage.furtoonia +alt.sex.bondage.furtooniae +alt.sex.bondage.futoonia +alt.sex.bondage.golden +alt.sex.bondage.golden.showers +alt.sex.bondage.golden.showers.sheep +alt.sex.bondage.jay-denebeim +alt.sex.bondage.particle +alt.sex.bondage.particle.physics +alt.sex.bondage.personals +alt.sex.bondage.sco +alt.sex.bondage.sco.unix +alt.sex.bondage.sco.unix- +alt.sex.bondage.stories +alt.sex.bondage.tiffany-bridget +alt.sex.boredom +alt.sex.boys +alt.sex.bragon.an.jimdana +alt.sex.breast +alt.sex.breast.alt +alt.sex.breast.alt.sex +alt.sex.breast.alt.sex.breasts +alt.sex.breaste +alt.sex.breasts +alt.sex.breathless +alt.sex.britney-spears +alt.sex.brittsbabes.com +alt.sex.brothels +alt.sex.brunette +alt.sex.buttworld +alt.sex.buxom +alt.sex.cancel +alt.sex.car-crash +alt.sex.car-crash- +alt.sex.carasso +alt.sex.carasso.snuggles +alt.sex.carl +alt.sex.carl.loves.kernal +alt.sex.carl.loves.kernel +alt.sex.carl.loves.kernelt +alt.sex.cd-rom +alt.sex.cd-romu +alt.sex.children +alt.sex.chris_schaefer.onhold +alt.sex.chris_schaefer.onholds +alt.sex.clinton +alt.sex.clinton.bill +alt.sex.clinton.billn +alt.sex.clinton.chelsa +alt.sex.clinton.chelsao +alt.sex.clinton.hillary +alt.sex.colostomy +alt.sex.commercial-sites +alt.sex.commercial-sites.password-exchange +alt.sex.conflict-of-interest +alt.sex.cory-tobin.and.tomek +alt.sex.couples +alt.sex.couples.hetero +alt.sex.couples.hetero.interchange +alt.sex.couples.hetero.interchange.amateur +alt.sex.couples.hetero.interchange.amateur.all-gratis +alt.sex.couples.hetero.interchange.amateurl +alt.sex.cthulhu +alt.sex.cthulhua +alt.sex.cu-seeme +alt.sex.cu-seemen +alt.sex.cuseeme +alt.sex.cuseeme.dallas-reflector +alt.sex.cypher +alt.sex.cyphere +alt.sex.d +alt.sex.dan-southwick.hamster.duct-tape +alt.sex.derbeker +alt.sex.disney +alt.sex.disneys +alt.sex.doof +alt.sex.doofn +alt.sex.doom +alt.sex.doom.with-sound +alt.sex.doom.with-soundo +alt.sex.drew-barrymore +alt.sex.drew-hamiltonm +alt.sex.drysart.and.kenbellen +alt.sex.dyaln +alt.sex.dyalne +alt.sex.dylan +alt.sex.dylany +alt.sex.ehibitionism +alt.sex.electrostim +alt.sex.enemas +alt.sex.enemasr +alt.sex.erotica +alt.sex.erotica.exhibitionism +alt.sex.erotica.female +alt.sex.erotica.female.plumpers +alt.sex.erotica.market +alt.sex.erotica.market.place +alt.sex.erotica.market.places +alt.sex.erotica.marketplace +alt.sex.erotica.marketplacen +alt.sex.erotica.stories +alt.sex.erotica.teen +alt.sex.erotical +alt.sex.eroticca +alt.sex.eroticca.marketplace +alt.sex.escort +alt.sex.escort.ads +alt.sex.escorts +alt.sex.escorts.ads +alt.sex.escorts.ads.d +alt.sex.escorts.ads.ds +alt.sex.escorts.wanted +alt.sex.exhibitionishm +alt.sex.exhibitionism +alt.sex.exhibitionismalt +alt.sex.exhibitionismalt.sex +alt.sex.exhibitionismalt.sex.fetish +alt.sex.exhibitionismalt.sex.fetish.watersports +alt.sex.exhibitionismi +alt.sex.exhibitionist +alt.sex.exhibitonism +alt.sex.ext +alt.sex.extensions.natural.penis +alt.sex.extraterrestrial +alt.sex.extropians +alt.sex.extropiansr +alt.sex.face-sitting +alt.sex.fat +alt.sex.fatb +alt.sex.female +alt.sex.femdom +alt.sex.femdom.alt +alt.sex.femdom.alt.sex +alt.sex.femdom.alt.sex.bondage +alt.sex.femdomr +alt.sex.fencing +alt.sex.fencingo +alt.sex.fetich +alt.sex.fetich.orientals +alt.sex.fetish +alt.sex.fetish. +alt.sex.fetish.agriculture +alt.sex.fetish.amputee +alt.sex.fetish.amputeep +alt.sex.fetish.ansir +alt.sex.fetish.balloons +alt.sex.fetish.barbie +alt.sex.fetish.beans +alt.sex.fetish.beanse +alt.sex.fetish.big-folks +alt.sex.fetish.biting +alt.sex.fetish.biting.marv-albert +alt.sex.fetish.biting.marv-albertt +alt.sex.fetish.blonds +alt.sex.fetish.boyfeet +alt.sex.fetish.boyfeete +alt.sex.fetish.branding +alt.sex.fetish.breastmilk +alt.sex.fetish.britney-spears +alt.sex.fetish.calihankls-nose +alt.sex.fetish.cost +alt.sex.fetish.cost.benefit +alt.sex.fetish.cost.benefit.analysis +alt.sex.fetish.cost.benefit.analysisd +alt.sex.fetish.cost.benifit.analysis +alt.sex.fetish.custard +alt.sex.fetish.custards +alt.sex.fetish.dfp +alt.sex.fetish.diapers +alt.sex.fetish.dirty +alt.sex.fetish.dirty.used +alt.sex.fetish.dirty.used.q-tips +alt.sex.fetish.dirty.used.q-tipst +alt.sex.fetish.dolari +alt.sex.fetish.dolari.ven +alt.sex.fetish.dollari +alt.sex.fetish.dollari.ven +alt.sex.fetish.drew-barrymore +alt.sex.fetish.drew-barrymores +alt.sex.fetish.drmellow +alt.sex.fetish.drmellowi +alt.sex.fetish.fa +alt.sex.fetish.fac +alt.sex.fetish.fashion +alt.sex.fetish.fashioni +alt.sex.fetish.feet +alt.sex.fetish.feet.toes +alt.sex.fetish.feet.toes.opps +alt.sex.fetish.giants +alt.sex.fetish.giantsv +alt.sex.fetish.hair +alt.sex.fetish.haira +alt.sex.fetish.head-librarian +alt.sex.fetish.hermunen +alt.sex.fetish.hermunene +alt.sex.fetish.internet +alt.sex.fetish.jello +alt.sex.fetish.jelloa +alt.sex.fetish.kitty +alt.sex.fetish.kitty.litter +alt.sex.fetish.lacing +alt.sex.fetish.ladies.short-track.speed-skaters +alt.sex.fetish.ladies.short-track.speed-skaterse +alt.sex.fetish.linux +alt.sex.fetish.linuxs +alt.sex.fetish.motorcycles +alt.sex.fetish.motorcyclesa +alt.sex.fetish.news-servers +alt.sex.fetish.news-serverss +alt.sex.fetish.oriental +alt.sex.fetish.orientals +alt.sex.fetish.panties +alt.sex.fetish.pekka_aakko +alt.sex.fetish.peterds +alt.sex.fetish.peterds.momma +alt.sex.fetish.potato +alt.sex.fetish.potato.salad +alt.sex.fetish.potato.salad.and.beer +alt.sex.fetish.poulosio +alt.sex.fetish.poulosio.gday +alt.sex.fetish.poulosio.gday.gday +alt.sex.fetish.power-rangers +alt.sex.fetish.power-rangers.kimberly.tight-spandex +alt.sex.fetish.rena-mero +alt.sex.fetish.rmgroup +alt.sex.fetish.rmgroup.jay-denebeim +alt.sex.fetish.rmgroupo +alt.sex.fetish.robot +alt.sex.fetish.robots +alt.sex.fetish.robotsl +alt.sex.fetish.sailor-moon +alt.sex.fetish.sailor-moonk +alt.sex.fetish.scat +alt.sex.fetish.size +alt.sex.fetish.sleepy +alt.sex.fetish.sleepys +alt.sex.fetish.smee +alt.sex.fetish.smoking +alt.sex.fetish.smokingc +alt.sex.fetish.sportswear +alt.sex.fetish.sportsweari +alt.sex.fetish.startrek +alt.sex.fetish.supersize +alt.sex.fetish.the-bob +alt.sex.fetish.thedavid +alt.sex.fetish.thedavidf +alt.sex.fetish.tickling +alt.sex.fetish.ticklinga +alt.sex.fetish.tinygirls +alt.sex.fetish.tinygirlsh +alt.sex.fetish.tongue +alt.sex.fetish.trent-reznor +alt.sex.fetish.trent-reznorc +alt.sex.fetish.waifs +alt.sex.fetish.waifs.spinners +alt.sex.fetish.waifss +alt.sex.fetish.waterports +alt.sex.fetish.watersports +alt.sex.fetish.wednesday +alt.sex.fetish.wet +alt.sex.fetish.wet-and-messy +alt.sex.fetish.wet-and-messye +alt.sex.fetish.wet-walrus +alt.sex.fetish.wet-walrust +alt.sex.fetish.wet.messy +alt.sex.fetish.white-mommas +alt.sex.fetish.white-mommasa +alt.sex.fetish.wrestling +alt.sex.fetish.wrestling.male +alt.sex.fetish.wrestlinge +alt.sex.fetish.x-men +alt.sex.fetish.x-mena +alt.sex.fetishes +alt.sex.fetishes.sleepy +alt.sex.fettishes +alt.sex.fettishes.sleepy +alt.sex.filipina-wives +alt.sex.first +alt.sex.first-time +alt.sex.first-timer +alt.sex.first.time +alt.sex.fish +alt.sex.fishp +alt.sex.flasher4scully +alt.sex.furry +alt.sex.furrye +alt.sex.games +alt.sex.games.human-darts +alt.sex.gangbang +alt.sex.gangbangm +alt.sex.gay +alt.sex.gaymen.porn +alt.sex.girl +alt.sex.girl.watchers +alt.sex.girl.watchersq +alt.sex.girls +alt.sex.glamor +alt.sex.glory-hole +alt.sex.glory-hole.sites +alt.sex.glory-hole.siteso +alt.sex.glory-holes +alt.sex.glory-holes.sites +alt.sex.glory-holes.siteso +alt.sex.graphics +alt.sex.graphicsl +alt.sex.gspot +alt.sex.gspot.experiences +alt.sex.guns +alt.sex.gunsa +alt.sex.head +alt.sex.hello-kitty +alt.sex.hello-kittyk +alt.sex.historical +alt.sex.historicals +alt.sex.ho +alt.sex.homosexual +alt.sex.homosexuals +alt.sex.homosexualu +alt.sex.incest +alt.sex.incest.stories +alt.sex.inergen +alt.sex.insane +alt.sex.insane.drunken +alt.sex.insane.drunken.bastards +alt.sex.insect +alt.sex.intergen +alt.sex.intergene +alt.sex.irc +alt.sex.jbinoche +alt.sex.jbinochec +alt.sex.jeff-cantwell +alt.sex.jeff-cantwellr +alt.sex.jesus +alt.sex.joey +alt.sex.joey.loves +alt.sex.joey.loves.sheep +alt.sex.joey.loves.sheepu +alt.sex.jp +alt.sex.jpa +alt.sex.kids +alt.sex.kinky +alt.sex.kinky.chicago +alt.sex.kinky.chicagos +alt.sex.leri +alt.sex.leris +alt.sex.lesbian +alt.sex.lesbian.antirush +alt.sex.lesbian.antirush.squick +alt.sex.lesbian.antirush.squick.squick +alt.sex.lesbian.antirush.squick.squick.squ +alt.sex.lesbian.antirush.squick.squick.squawk +alt.sex.live +alt.sex.lt +alt.sex.lt.sex +alt.sex.lt.sex.femdom +alt.sex.magazines +alt.sex.magazines.pornographic +alt.sex.male +alt.sex.market +alt.sex.market.place +alt.sex.marketplace +alt.sex.marketplace.erotica +alt.sex.marsha-clark +alt.sex.marsha-clarkd +alt.sex.masterbation +alt.sex.masterbation.pictures.female.teen +alt.sex.masterbatione +alt.sex.masturbate +alt.sex.masturbation +alt.sex.masturbation.bill-palmer +alt.sex.masturbation.edmond.wollmann.and.the.old.man +alt.sex.masturbation.pictures +alt.sex.masturbation.pictures.female +alt.sex.masturbation.pictures.female.teen +alt.sex.masturbation.pictures.female.teenl +alt.sex.masturbation.pictures.females.teen +alt.sex.masturbation.techniques +alt.sex.masturbationt +alt.sex.men +alt.sex.mens +alt.sex.menstruation +alt.sex.menstruations +alt.sex.midgets +alt.sex.midgetsc +alt.sex.miguel-lopes +alt.sex.miguel-lopes.necrophilia +alt.sex.miguel-lopes.necrophiliai +alt.sex.modem-kamikaze +alt.sex.moss +alt.sex.motss +alt.sex.motss.bisexua-l +alt.sex.motss.clamato +alt.sex.motss.clamatom +alt.sex.motss.women +alt.sex.movies +alt.sex.movies.alt +alt.sex.mud +alt.sex.mud.darkover +alt.sex.mud.darkover.asmodean +alt.sex.mud.sojourn-diku +alt.sex.music.body +alt.sex.music.body.hair +alt.sex.mythical +alt.sex.nasal-hair +alt.sex.necrophilia +alt.sex.necrophilia.mother-theresa +alt.sex.necrophilia.princess-diana +alt.sex.necrophilia.royal-family +alt.sex.necrophilia.royal-familyr +alt.sex.nfs +alt.sex.nfsa +alt.sex.nigelw +alt.sex.nigelw.loves +alt.sex.nigelw.loves.sheep +alt.sex.nigelw.loves.sheepd +alt.sex.nikita-borisov +alt.sex.not +alt.sex.nudels +alt.sex.nudels.me +alt.sex.nudels.me.too +alt.sex.nudels.me.toot +alt.sex.oral +alt.sex.orals +alt.sex.orgy +alt.sex.orientals +alt.sex.panties +alt.sex.pantyhose +alt.sex.parper +alt.sex.password +alt.sex.passwords +alt.sex.passwordsg +alt.sex.patitas-al-hombro +alt.sex.pedo.moderated +alt.sex.pedophilia +alt.sex.pedophilia.boys +alt.sex.pedophilia.girls +alt.sex.pedophilia.glenn.webb +alt.sex.pedophilia.jim-kennemur +alt.sex.pedophilia.pictures +alt.sex.pedophilia.swaps +alt.sex.pedophilia.yakanoh +alt.sex.personals +alt.sex.personals.bi +alt.sex.phone +alt.sex.phone.ads +alt.sex.phone.ads. +alt.sex.phone.uk +alt.sex.phonealt +alt.sex.phonealt.binaries +alt.sex.phonealt.binaries.pictures +alt.sex.phonealt.binaries.pictures.erotica +alt.sex.phonealt.binaries.pictures.erotica.fetish +alt.sex.pictu +alt.sex.pictues.female +alt.sex.picture +alt.sex.picture.d +alt.sex.picture.female +alt.sex.pictures +alt.sex.pictures.d +alt.sex.pictures.female +alt.sex.pictures.females +alt.sex.pictures.male +alt.sex.pictures.malet +alt.sex.pictures.misc +alt.sex.pictures.nospam +alt.sex.pictures.oral +alt.sex.pictures.pavement +alt.sex.pictures.teen +alt.sex.pictures.thedavid +alt.sex.picturest +alt.sex.picturres.male +alt.sex.picvures +alt.sex.picvures.mane +alt.sex.pinner +alt.sex.pinner.pepper +alt.sex.pinner.pepper.nelson +alt.sex.pinner.pepper.nelson.staple +alt.sex.pinner.pepper.nelson.staple.gun +alt.sex.plushies +alt.sex.plushiese +alt.sex.politics +alt.sex.poly +alt.sex.power-rangers +alt.sex.power-rangers.kimberly +alt.sex.power-rangers.kimberly.tight-spandex +alt.sex.pre-teen +alt.sex.pre-teens +alt.sex.preteen +alt.sex.prevost +alt.sex.prevost-derbecker +alt.sex.prevost.derbecker +alt.sex.prevosti +alt.sex.prom +alt.sex.prome +alt.sex.prostitution +alt.sex.prostitution.amsterdam +alt.sex.prostitution.tijuana +alt.sex.prostitution.tijuanao +alt.sex.prostitutions +alt.sex.provost +alt.sex.queening +alt.sex.raj +alt.sex.raj.not +alt.sex.ramsey +alt.sex.ramsey.forum +alt.sex.rape-the-wires +alt.sex.realdoll +alt.sex.reggie-white.hamster.duct-tape +alt.sex.reggie-white.hamster.duct-tapeo +alt.sex.reptiles +alt.sex.reptilest +alt.sex.royalty +alt.sex.ruy +alt.sex.sadurski +alt.sex.safe +alt.sex.safen +alt.sex.scat +alt.sex.selfbondage +alt.sex.senator-exon +alt.sex.senator-exona +alt.sex.service +alt.sex.services +alt.sex.servicesa +alt.sex.sexfeed.com +alt.sex.sexfeed.com.oral +alt.sex.sexyweb +alt.sex.sexyweb.com +alt.sex.sexzilla +alt.sex.sexzilla.com +alt.sex.sexzilla.com.bizarre +alt.sex.sexzilla.com.teen +alt.sex.sexzillae +alt.sex.sgml +alt.sex.sheep +alt.sex.sheep.baaa.baaa +alt.sex.sheep.baaa.baaa.baaa.moo +alt.sex.sheep.heavyg.glenn +alt.sex.sheep.heavyg.glenns +alt.sex.significant-other +alt.sex.sissy +alt.sex.sissy.slut +alt.sex.sissyp +alt.sex.skydiving +alt.sex.skydiving.bondage +alt.sex.skydiving.bondagew +alt.sex.sleeping-girls +alt.sex.sleeping.girls +alt.sex.sm +alt.sex.sm.fig +alt.sex.sm.fige +alt.sex.snakes +alt.sex.snakesr +alt.sex.snuff +alt.sex.snuff.cannibalism +alt.sex.snuff.cannibalismt +alt.sex.society +alt.sex.society.indonesia +alt.sex.society.indonesiar +alt.sex.software +alt.sex.software.dumpsite +alt.sex.software.dumpsite.sex +alt.sex.software.dumpsite.sex.leather +alt.sex.software.dumpsite.sex.leather.boink +alt.sex.sonja +alt.sex.sonjap +alt.sex.sounds +alt.sex.soundsx +alt.sex.spam +alt.sex.spanking +alt.sex.spanking.adult +alt.sex.spanking.moderated +alt.sex.spankings +alt.sex.sportswear +alt.sex.startrek +alt.sex.stories +alt.sex.stories.babies +alt.sex.stories.bondage +alt.sex.stories.bondageh +alt.sex.stories.cuckold +alt.sex.stories.cuckoldb +alt.sex.stories.d +alt.sex.stories.erotic +alt.sex.stories.gay +alt.sex.stories.gay.moderated +alt.sex.stories.hetero +alt.sex.stories.heteroe +alt.sex.stories.hetro +alt.sex.stories.incest +alt.sex.stories.incesti +alt.sex.stories.m +alt.sex.stories.moderated +alt.sex.stories.so +alt.sex.stories.soy +alt.sex.stories.tah +alt.sex.stories.tg +alt.sex.storiess +alt.sex.strip-clubs +alt.sex.strip-clubss +alt.sex.strip_clubs +alt.sex.stripclubs +alt.sex.strippers +alt.sex.strippers.jobs +alt.sex.strippers.jobsi +alt.sex.sugardaddy.available +alt.sex.sugardaddy.wanted +alt.sex.super-size +alt.sex.super-sizea +alt.sex.supersize +alt.sex.swingers +alt.sex.swingers.thedavid +alt.sex.swingers.uk +alt.sex.swingers.uka +alt.sex.swingersalt +alt.sex.swingersalt.binaries +alt.sex.swingersalt.binaries.pictures +alt.sex.swingersalt.binaries.pictures.erotica +alt.sex.swingersu +alt.sex.swinging +alt.sex.tasteless +alt.sex.tastelessu +alt.sex.teddy-ruxpin +alt.sex.teddy-ruxpind +alt.sex.teens +alt.sex.teensi +alt.sex.tel-bailliet +alt.sex.tel-bailliets +alt.sex.telephon +alt.sex.telephone +alt.sex.telephone.ads +alt.sex.telephone.ads. +alt.sex.telephone.alt +alt.sex.telephone.alt.sex +alt.sex.telephone.alt.sex.services +alt.sex.telephone.alt.sex.wanted +alt.sex.telephones +alt.sex.telephonet +alt.sex.teleplhone +alt.sex.testeless +alt.sex.toilet-training +alt.sex.toonces +alt.sex.tooncesy +alt.sex.toons +alt.sex.toonsp +alt.sex.torture +alt.sex.toupee +alt.sex.toupeeb +alt.sex.trabs +alt.sex.trans +alt.sex.transh +alt.sex.trio +alt.sex.trio.hetero +alt.sex.trio.hetero.for-she +alt.sex.trio.hetero.for-she.amateur +alt.sex.trio.hetero.for-she.amateur.all-gratis +alt.sex.trio.hetero.for-she.amateura +alt.sex.ugly +alt.sex.uglyr +alt.sex.uncut +alt.sex.uncutp +alt.sex.unisfa +alt.sex.unnatural-acts +alt.sex.unnatural-acts.jesse-helms +alt.sex.unnatural-acts.jesse-helmsi +alt.sex.video +alt.sex.video-swap +alt.sex.virtual +alt.sex.virtual.internet +alt.sex.virtual.internet.tele-coitus +alt.sex.voxmeet +alt.sex.voxmeetm +alt.sex.voyerism +alt.sex.voyeurism +alt.sex.voyeurismn +alt.sex.wanted +alt.sex.wanted.alt +alt.sex.wanted.alt.sex +alt.sex.wanted.alt.sex.strip-clubs +alt.sex.wanted.escort.ads +alt.sex.wanted.escorts +alt.sex.wanted.escorts.ads +alt.sex.wanted.escorts.ads.d +alt.sex.wanted.escorts.ads.d- +alt.sex.wanted.escorts.adsc +alt.sex.wanted.me +alt.sex.wanted.me-too +alt.sex.wanted.models +alt.sex.wanted.thedavid +alt.sex.wanted.thedavidt +alt.sex.wanteds +alt.sex.watersport +alt.sex.watersports +alt.sex.watersportsl +alt.sex.wednesday +alt.sex.weight-gain +alt.sex.weight.gain +alt.sex.wet-and-messy +alt.sex.with.chickens +alt.sex.with.chickens.whilst.wearing.rubber.knickers +alt.sex.wizards +alt.sex.women +alt.sex.womenw +alt.sex.woody-adlen +alt.sex.woody-allen +alt.sex.worldaccess +alt.sex.wrestling +alt.sex.www +alt.sex.www.bobbiespage.com +alt.sex.www.brittspage.com +alt.sex.www.sexzilla +alt.sex.www.sexzilla.com +alt.sex.www.sexzilla.come +alt.sex.young +alt.sex.young-women.foroldermen +alt.sex.zoophile +alt.sex.zoophilia +alt.sex.zoophiliac +alt.sexalt.personals +alt.sexfeed.com +alt.sexfeed.com.analsex +alt.sexfeed.com.freepics +alt.sexfeed.com.oralsex +alt.sexo.relatos +alt.sexo.relatosu +alt.sexosexosexo.com +alt.sexual +alt.sexual.abuse +alt.sexual.abuse.recovery +alt.sexual.abuse.recovery.d +alt.sexual.abuse.recovery.moderated +alt.sexuality.spanking +alt.sexy +alt.sexy.bald +alt.sexy.bald.captain +alt.sexy.bald.captains +alt.sexzilla +alt.sexzilla.com +alt.sf.creative +alt.sf.scale-models +alt.sf4m +alt.sg.drmv +alt.shared-reality.startrek.cardassian +alt.shared-reality.x-files +alt.sharesniffer +alt.sheep.baa +alt.shenanigans +alt.shoe.lesbians +alt.shoe.lesbians.moderated +alt.shoutcast +alt.showbiz +alt.showbiz.gossip +alt.shrinky.dinks +alt.shut.the.hell.up.geek +alt.sigma2.penis +alt.sigs.and.quotes +alt.sigsnip.recovery +alt.silly +alt.silly-group.im-matt +alt.silly-group.persian +alt.silly.group.names.d +alt.silly.little.newsgroup +alt.simpsons +alt.sinner +alt.siol.test +alt.sixtyplus +alt.skanky.slut.mariah-carey +alt.skate +alt.skate-board +alt.skate.figure +alt.skateboard +alt.skeezewockers +alt.skeptic.magazine +alt.skeptic.society +alt.skiing +alt.skincare +alt.skincare.acne +alt.skinheads +alt.skinheads.are.sexxxy +alt.skinheads.are.sexxxy.bastards +alt.skinheads.are.sexxxy.bastardsw +alt.skinheads.personals +alt.skullfuck.charles-eicher +alt.skuznet.general +alt.slack +alt.slack.BoB +alt.slack.devo +alt.slack.eraserhead +alt.slack.mid-atlantic.crusades +alt.slack.midatlantic.crusades +alt.slack.sputum +alt.slak +alt.sleazy-weasel +alt.smack +alt.smack.talk +alt.smee +alt.smelly.smelts +alt.smokers +alt.smokers.are.addicts +alt.smokers.camel +alt.smokers.camel.filters.100s +alt.smokers.cigars +alt.smokers.cigars-rectal +alt.smokers.cigars.clubhouse +alt.smokers.cigars.cuban +alt.smokers.cigars.flame +alt.smokers.cigars.marketplace +alt.smokers.cigars.reviews +alt.smokers.cigars.smoking +alt.smokers.glamour +alt.smokers.glamour.cigars +alt.smokers.herfers +alt.smokers.marlboro +alt.smokers.pipes +alt.smoking.mooses +alt.smouldering.dog.zone +alt.smouldering.frat.house +alt.snail-mail +alt.snetter +alt.snizzlebucket +alt.snl +alt.snorky +alt.snowmobiles +alt.snowmobiles.old +alt.snuh +alt.snuh-made-cascades +alt.snuh-made-cascades.are-the-best +alt.soc.germans.overseas.tw +alt.soc.indonesia.mature +alt.soc.reformation +alt.social-security-disability +alt.society.anarchy +alt.society.arab-american.studies +alt.society.boomers +alt.society.civil-disob +alt.society.civil-liberties +alt.society.civil-liberty +alt.society.conservatism +alt.society.deaf +alt.society.economic-dev +alt.society.eric-davis.nosegroup +alt.society.foia +alt.society.fruitopia +alt.society.futures +alt.society.generation-x +alt.society.generation-x.ls-bumgarner +alt.society.homeless +alt.society.kindness +alt.society.labor-unions +alt.society.liberalism +alt.society.mental-health +alt.society.modern-life +alt.society.monarchy +alt.society.netizens +alt.society.neutopia +alt.society.nottingham +alt.society.outsiders.uk +alt.society.philbert.bad-breath +alt.society.philbert.breath +alt.society.resistance +alt.society.revolution +alt.society.rockunion +alt.society.scapegoating +alt.society.sovereign +alt.society.sustainable +alt.society.underwear +alt.society.youth-spandex +alt.society.zeitgeist +alt.sockpuppet.david-gannon +alt.soda.moxie +alt.sodomizziamo.la.debora +alt.soft-sys.avantgo +alt.soft-sys.corel +alt.soft-sys.corel.draw +alt.soft-sys.corel.misc +alt.softax +alt.solar.photovoltaic +alt.solar.thermal +alt.solaris +alt.solaris.x86 +alt.solipsism +alt.solly +alt.something.good +alt.sophie-evans +alt.soulmates +alt.sounds.answering.machines +alt.sounds.midi.originals +alt.sounds.moderated +alt.source-code.mac +alt.sources +alt.sources.crypto +alt.sources.d +alt.sources.mac +alt.sources.patches +alt.sources.wanted +alt.southampton.goth.commandoes +alt.spacebastards +alt.spam +alt.spambot +alt.spamhaus +alt.spamhaus.audio +alt.spamhaus.video +alt.spammer.identification +alt.spank.tonya.harding +alt.spanking.reality +alt.spanking.reality.moderated +alt.spanners +alt.spartacus.netscape.bologna +alt.spatch.finger.hole.autoerotica +alt.speech.debate +alt.speech.misc +alt.spippolatori +alt.spiritual-energy +alt.spiritual.energy +alt.spiritual.enhancement +alt.spirituality.circle +alt.spirituality.druid +alt.spleen +alt.spooky +alt.sport.adv-racing +alt.sport.adventure-racing +alt.sport.air-guns +alt.sport.air-hockey +alt.sport.airsoft +alt.sport.baseball.az-diamondbacks +alt.sport.basketball +alt.sport.basketball.coaching +alt.sport.basketball.nba +alt.sport.basketball.nba.orl-magic +alt.sport.basketball.pro.fantasy +alt.sport.bicycles.offroad +alt.sport.bodybuilding +alt.sport.bowling +alt.sport.bungee +alt.sport.croquet +alt.sport.darts +alt.sport.dean-stark +alt.sport.dive.rebreather +alt.sport.dragracing +alt.sport.falconry +alt.sport.foosball +alt.sport.go-ped +alt.sport.gymnast.moceanu +alt.sport.hockey.women +alt.sport.horse-racing +alt.sport.horse-racing.systems +alt.sport.icehockey.women +alt.sport.jaywalking +alt.sport.jet-ski +alt.sport.korfball +alt.sport.lacrosse +alt.sport.lasertag +alt.sport.lasertag.laserquest +alt.sport.lasertag.zone +alt.sport.littleleague.admin +alt.sport.llama-tipping +alt.sport.motorized-scooter +alt.sport.officiating +alt.sport.paintball +alt.sport.photon +alt.sport.pool +alt.sport.qzar +alt.sport.racquetball +alt.sport.roller-derby +alt.sport.shooting +alt.sport.shooting.silhouette +alt.sport.snooker +alt.sport.soccer +alt.sport.soccer.brazil +alt.sport.soccer.brazil.80s +alt.sport.soccer.indoor +alt.sport.squash +alt.sport.street-hockey +alt.sport.synchro +alt.sport.table-tennis +alt.sport.table-tennis.espanol +alt.sport.table-tennis.francais +alt.sport.table-tennis.german.deutsch +alt.sport.table-tennis.italiano +alt.sport.table-tennis.nederlands.dutch +alt.sport.table-tennis.portuguese +alt.sport.table-tennis.suomeksi +alt.sport.track-field +alt.sport.tractorpulling +alt.sport.weightlifting +alt.sport.weightlifting.eas.12week.contest +alt.sport.weightlifting.vegetarian +alt.sport.wrestling.amateur +alt.sport.wrestling.amateur.gay +alt.sport.yo-yo +alt.sport.zappy +alt.sports +alt.sports.badminton +alt.sports.baseball +alt.sports.baseball.atlanta-braves +alt.sports.baseball.az-diamondbacks +alt.sports.baseball.balt-orioles +alt.sports.baseball.bos-redsox +alt.sports.baseball.calif-angels +alt.sports.baseball.card-traders +alt.sports.baseball.chi-whitesox +alt.sports.baseball.chicago-cubs +alt.sports.baseball.cinci-reds +alt.sports.baseball.cleve-indians +alt.sports.baseball.col-rockies +alt.sports.baseball.detroit-tigers +alt.sports.baseball.fantasy +alt.sports.baseball.fla-marlins +alt.sports.baseball.houston-astros +alt.sports.baseball.kc-royals +alt.sports.baseball.la-dodgers +alt.sports.baseball.memorabilia +alt.sports.baseball.minor-leagues +alt.sports.baseball.mke-brewers +alt.sports.baseball.mn-twins +alt.sports.baseball.montreal-expos +alt.sports.baseball.ny-mets +alt.sports.baseball.ny-yankees +alt.sports.baseball.oakland-as +alt.sports.baseball.phila-phillies +alt.sports.baseball.pitt-pirates +alt.sports.baseball.sd-padres +alt.sports.baseball.sea-mariners +alt.sports.baseball.sf-giants +alt.sports.baseball.stl-cardinals +alt.sports.baseball.tb-devilrays +alt.sports.baseball.texas-rangers +alt.sports.baseball.tor-bluejays +alt.sports.basketball +alt.sports.basketball.big8.kansas +alt.sports.basketball.college.big-5 +alt.sports.basketball.ivy.penn +alt.sports.basketball.nba +alt.sports.basketball.nba.atlanta-hawks +alt.sports.basketball.nba.boston-celtics +alt.sports.basketball.nba.char-hornets +alt.sports.basketball.nba.chicago-bulls +alt.sports.basketball.nba.clev-cavaliers +alt.sports.basketball.nba.dallas-mavs +alt.sports.basketball.nba.denver-nuggets +alt.sports.basketball.nba.det-pistons +alt.sports.basketball.nba.gs-warriors +alt.sports.basketball.nba.hou-rockets +alt.sports.basketball.nba.ind-pacers +alt.sports.basketball.nba.la-clippers +alt.sports.basketball.nba.la-lakers +alt.sports.basketball.nba.miami-heat +alt.sports.basketball.nba.mil-bucks +alt.sports.basketball.nba.mn-wolves +alt.sports.basketball.nba.nj-nets +alt.sports.basketball.nba.orlando-magic +alt.sports.basketball.nba.phila-76ers +alt.sports.basketball.nba.phx-suns +alt.sports.basketball.nba.port-blazers +alt.sports.basketball.nba.sa-spurs +alt.sports.basketball.nba.sac-kings +alt.sports.basketball.nba.seattle-sonics +alt.sports.basketball.nba.tor-raptors +alt.sports.basketball.nba.utah-jazz +alt.sports.basketball.nba.vanc-grizzlies +alt.sports.basketball.nba.wash-bullets +alt.sports.basketball.pro.ny-knicks +alt.sports.basketball.sec.arkansas +alt.sports.college +alt.sports.college.acc +alt.sports.college.acc.unc +alt.sports.college.america-east +alt.sports.college.atl10 +alt.sports.college.big-10 +alt.sports.college.big-12 +alt.sports.college.big-east +alt.sports.college.big10 +alt.sports.college.conference-usa +alt.sports.college.hawgball +alt.sports.college.ivy-league +alt.sports.college.lsu +alt.sports.college.michigan +alt.sports.college.mwc +alt.sports.college.nc-state +alt.sports.college.nebraska +alt.sports.college.nebraska.sucks.sucks.sucks +alt.sports.college.notre-dame +alt.sports.college.ohio-state +alt.sports.college.ohio-state.football +alt.sports.college.pac-10 +alt.sports.college.sec +alt.sports.college.sec.kentucky +alt.sports.college.sec.tennessee +alt.sports.college.seton-hall +alt.sports.college.syracuse +alt.sports.college.utexas +alt.sports.darts +alt.sports.football +alt.sports.football.arena +alt.sports.football.college +alt.sports.football.college.fla-gators +alt.sports.football.college.fsu-seminoles +alt.sports.football.mn-vikings +alt.sports.football.nfl +alt.sports.football.nfl.chicago-bears +alt.sports.football.oak-raiders +alt.sports.football.pro +alt.sports.football.pro.ariz-cardinals +alt.sports.football.pro.atl-falcons +alt.sports.football.pro.baltimore +alt.sports.football.pro.buffalo-bills +alt.sports.football.pro.car-panthers +alt.sports.football.pro.chicago-bears +alt.sports.football.pro.cinci-bengals +alt.sports.football.pro.cleve-browns +alt.sports.football.pro.dallas-cowboys +alt.sports.football.pro.dallas-cowboys.erik.williams.rape.rape.rape +alt.sports.football.pro.denver-broncos +alt.sports.football.pro.detroit-lions +alt.sports.football.pro.gb-packers +alt.sports.football.pro.houston-oilers +alt.sports.football.pro.indy-colts +alt.sports.football.pro.jville-jaguars +alt.sports.football.pro.kc-chiefs +alt.sports.football.pro.la-raiders +alt.sports.football.pro.la-rams +alt.sports.football.pro.miami-dolphins +alt.sports.football.pro.ne-patriots +alt.sports.football.pro.no-saints +alt.sports.football.pro.ny-giants +alt.sports.football.pro.ny-jets +alt.sports.football.pro.oak-raiders +alt.sports.football.pro.phila-eagles +alt.sports.football.pro.phoe-cardinals +alt.sports.football.pro.pitt-steelers +alt.sports.football.pro.sd-chargers +alt.sports.football.pro.sea-seahawks +alt.sports.football.pro.sf-49ers +alt.sports.football.pro.stl-rams +alt.sports.football.pro.tampabay-Bucs +alt.sports.football.pro.tampabay-bucs +alt.sports.football.pro.tennessee +alt.sports.football.pro.wash-redskins +alt.sports.football.uk.darlington-fc +alt.sports.football.xfl +alt.sports.gaelic-games +alt.sports.greed +alt.sports.gymnastics +alt.sports.hocket.nhl +alt.sports.hocket.nhl.det-redwings +alt.sports.hockey +alt.sports.hockey.ahl +alt.sports.hockey.cohl +alt.sports.hockey.echl +alt.sports.hockey.fantasy +alt.sports.hockey.hclugano +alt.sports.hockey.ihl +alt.sports.hockey.ihl.manitoba-moose +alt.sports.hockey.junior +alt.sports.hockey.nhl +alt.sports.hockey.nhl.Que-Nordiques +alt.sports.hockey.nhl.ana-mighty-ducks +alt.sports.hockey.nhl.atl-thrashers +alt.sports.hockey.nhl.boston-bruins +alt.sports.hockey.nhl.buffalo-sabres +alt.sports.hockey.nhl.chat +alt.sports.hockey.nhl.chi-blackhawks +alt.sports.hockey.nhl.clgry-flames +alt.sports.hockey.nhl.col-avalanche +alt.sports.hockey.nhl.columbus-bluejackets +alt.sports.hockey.nhl.dallas-stars +alt.sports.hockey.nhl.det-redwings +alt.sports.hockey.nhl.edm-oilers +alt.sports.hockey.nhl.fla-panthers +alt.sports.hockey.nhl.hford-whalers +alt.sports.hockey.nhl.la-kings +alt.sports.hockey.nhl.mn-wild +alt.sports.hockey.nhl.mtl-canadiens +alt.sports.hockey.nhl.nash-predators +alt.sports.hockey.nhl.nj-devils +alt.sports.hockey.nhl.ny-islanders +alt.sports.hockey.nhl.ny-rangers +alt.sports.hockey.nhl.ott-senators +alt.sports.hockey.nhl.phila-flyers +alt.sports.hockey.nhl.phx-coyotes +alt.sports.hockey.nhl.pit-penguins +alt.sports.hockey.nhl.pitt-penguins +alt.sports.hockey.nhl.que-nordiques +alt.sports.hockey.nhl.sj-sharks +alt.sports.hockey.nhl.stl-blues +alt.sports.hockey.nhl.tb-lightning +alt.sports.hockey.nhl.tor-mapleleafs +alt.sports.hockey.nhl.vanc-canucks +alt.sports.hockey.nhl.wash-capitals +alt.sports.hockey.nhl.winnipeg-jets +alt.sports.hockey.rhi +alt.sports.kayak +alt.sports.kitesurfing +alt.sports.nba.basketball.wash-wizards +alt.sports.paintball +alt.sports.radio.jim-rome +alt.sports.radio.jim_rome +alt.sports.radio.the-ticket +alt.sports.soccer +alt.sports.soccer.aberdeen +alt.sports.soccer.arsenal +alt.sports.soccer.celtic +alt.sports.soccer.chelseafc +alt.sports.soccer.coventry-city +alt.sports.soccer.derby.county +alt.sports.soccer.euronet.tournament +alt.sports.soccer.european +alt.sports.soccer.european.uk +alt.sports.soccer.european.uk.league.division1-2-3 +alt.sports.soccer.european.uk.no-bigotry +alt.sports.soccer.european.uk.no-scots +alt.sports.soccer.european.uk.premiership +alt.sports.soccer.everton +alt.sports.soccer.hearts +alt.sports.soccer.liverpool +alt.sports.soccer.manchester.united +alt.sports.soccer.manchester.united.scum-haters +alt.sports.soccer.middlesbrough +alt.sports.soccer.mls +alt.sports.soccer.non-league +alt.sports.soccer.nottingham-forest +alt.sports.soccer.portsmouth.footbll.club +alt.sports.soccer.sunderland +alt.sports.soccer.toon-army +alt.sports.soccer.usa +alt.sports.soccer.worldcup.england +alt.sports.soccer.worldcup2002 +alt.sports.soccer.worldcup98 +alt.sports.spurs +alt.sports.spurs.prediction +alt.stagecraft +alt.stamps +alt.stamps.www.philatelic.com +alt.stan-kalisch.no-ethics +alt.standard.examiner +alt.star-chamber +alt.staralliance +alt.starfleet +alt.starfleet.primedirective.rpg +alt.starfleet.rpg +alt.starfleet.rpg.german +alt.startrek +alt.startrek.animated +alt.startrek.bajoran +alt.startrek.books +alt.startrek.borg +alt.startrek.cardassian +alt.startrek.creative +alt.startrek.creative.all-ages +alt.startrek.creative.erotica +alt.startrek.creative.erotica.moderated +alt.startrek.deep-space-9 +alt.startrek.imperial +alt.startrek.klingon +alt.startrek.lcars +alt.startrek.people +alt.startrek.role-playing +alt.startrek.romulan +alt.startrek.rpg.gsc +alt.startrek.soul.rpg +alt.startrek.steg +alt.startrek.teroknor +alt.startrek.the-next-gen +alt.startrek.the-old-gen +alt.startrek.trill +alt.startrek.uss-amagosa +alt.startrek.voyager +alt.startrek.vs.babylon5 +alt.startrek.vs.battlestar-galactica +alt.startrek.vs.dr-who +alt.startrek.vs.starwars +alt.startrek.vulcan +alt.startrek.writing-staff +alt.starwars.leagues.euro-fighter +alt.starwars.xvt +alt.steinberg.cubase +alt.steiner.coffee.bar +alt.stereo +alt.stereo.awareness +alt.stereo.bigot-enabler +alt.stereo.buddha +alt.stereo.caesium +alt.stereo.caesium.toast +alt.stereo.canadian.humour +alt.stereo.crescent.oblong-juice +alt.stereo.cuddly.subgenii +alt.stereo.curveball.halogen +alt.stereo.dennon-online +alt.stereo.embargo.bill-palmer +alt.stereo.golf-stains +alt.stereo.gordita +alt.stereo.grape-shuttle.rant +alt.stereo.grape-shuttle.sanctum +alt.stereo.grape-shuttle.silence +alt.stereo.guest.sheep +alt.stereo.hard-boiled.planets +alt.stereo.heebie-jeebies +alt.stereo.kia +alt.stereo.liquid-moamo +alt.stereo.love-removal.machine +alt.stereo.meow +alt.stereo.mexico.bandwidth +alt.stereo.nuke.tasmania +alt.stereo.second.sakura +alt.stereo.soybean +alt.stereo.spin +alt.stereo.spork +alt.stereo.stoopid.cn-tower +alt.stereo.therapy-slime +alt.stereo.thursday.evening +alt.stereo.toast +alt.stereo.toast.with-cheese +alt.stereo.viagra +alt.steve-walter +alt.stink +alt.stolen.property +alt.stomps +alt.stonecarvers +alt.stonemasons +alt.stop.spamming +alt.stories.amateur +alt.stories.erotic +alt.stories.incest +alt.stories.transformation +alt.stories.urban-harvest +alt.stormfront.bbs +alt.strange.days +alt.student.affairs.net +alt.students.aberdeen +alt.students.exchange +alt.students.highschool +alt.students.nontraditional +alt.stupid +alt.stupid.morons +alt.stupid.religion.asatru +alt.stupidass +alt.stupidity +alt.stupidity.hackers.malicious +alt.stupidity.me-too +alt.stupidity.spatch +alt.sublime +alt.sublime.d +alt.subspace +alt.sucks.cocks.montgomery-wood +alt.sufi +alt.suicide +alt.suicide.finals +alt.suicide.holiday +alt.suicide.methods +alt.suicide.recovery +alt.sunday +alt.super.nes +alt.superhelp +alt.supermodels +alt.supermodels.cindy-crawford +alt.supermodels.claudia-schiffer +alt.superphone +alt.superphone.australia +alt.superphone.cambodia +alt.superphone.canada +alt.superphone.china +alt.superphone.cuba +alt.superphone.france +alt.superphone.germany +alt.superphone.india +alt.superphone.mexico +alt.superphone.net +alt.superphone.net.australia +alt.superphone.net.cambodia +alt.superphone.net.canada +alt.superphone.net.china +alt.superphone.net.cuba +alt.superphone.net.france +alt.superphone.net.germany +alt.superphone.net.india +alt.superphone.net.mexico +alt.superphone.net.newzealand +alt.superphone.net.pakistan +alt.superphone.net.russia +alt.superphone.net.uk +alt.superphone.net.vietnam +alt.superphone.newzealand +alt.superphone.pakistan +alt.superphone.russia +alt.superphone.uk +alt.superphone.vietnam +alt.superstar.jigsey +alt.support +alt.support-heart +alt.support.abortion +alt.support.abortion.moderated +alt.support.abuse-partners +alt.support.acre-shifting +alt.support.addiction +alt.support.addisons +alt.support.adoption.advocacy +alt.support.agoraphobia +alt.support.aids.partners +alt.support.altopia.ex-users +alt.support.alzheimers +alt.support.amputee +alt.support.anal-itching +alt.support.angioplasty +alt.support.anhedonia +alt.support.anxiety-panic +alt.support.anxiety-panic.drugfree +alt.support.anxiety-panic.moderated +alt.support.arthritis +alt.support.arthritis.risg-spondy.info +alt.support.arthritis.spondyloarthro.moderated +alt.support.artists-way +alt.support.asthma +alt.support.asthma.buteyko +alt.support.ataxia +alt.support.atguard +alt.support.attn-deficit +alt.support.attn-deficit.doesnt-exist +alt.support.attn-deficit.mates +alt.support.attn-deficit.uk +alt.support.autism +alt.support.becky-internet-mail +alt.support.bells-palsy +alt.support.big-folks +alt.support.birth-parent +alt.support.boy-lovers +alt.support.breast-implant +alt.support.breast-implant.moderated +alt.support.breastfeeding +alt.support.bruderhof +alt.support.cancer +alt.support.cancer.breast +alt.support.cancer.prostate +alt.support.cancer.testicular +alt.support.celiac +alt.support.cerebral-palsy +alt.support.child-protective-services +alt.support.childfree +alt.support.childfree.moderated +alt.support.childfree.moderated.sucks +alt.support.chronic-hives +alt.support.chronic-pain +alt.support.constipation +alt.support.crohns-colitis +alt.support.crossdressing +alt.support.crossliving +alt.support.crossposting +alt.support.csm +alt.support.dental-phobia +alt.support.depression +alt.support.depression.crisis +alt.support.depression.flame +alt.support.depression.manic +alt.support.depression.manic.moderated +alt.support.depression.medication +alt.support.depression.recovery +alt.support.depression.recovery.sanctuary +alt.support.depression.seasonal +alt.support.depression.teens +alt.support.desupernet +alt.support.dev-delays +alt.support.diabetes +alt.support.diabetes.kids +alt.support.diabetes.uk +alt.support.diet +alt.support.diet.fit-for-life +alt.support.diet.low-calorie +alt.support.diet.low-carb +alt.support.diet.low-fat +alt.support.diet.paleolithic +alt.support.diet.rx +alt.support.diet.weightwatchers +alt.support.diet.zone +alt.support.disabled.artists +alt.support.disabled.caregivers +alt.support.disabled.intimate-relations +alt.support.disabled.sexuality +alt.support.dislocated.ass +alt.support.disorders.neurological +alt.support.dissociation +alt.support.divorce +alt.support.divorce.jewish +alt.support.domestic-violence +alt.support.drug-abuse +alt.support.dwarfism +alt.support.dying-well +alt.support.dying-well.moderated +alt.support.dyslexia +alt.support.dyspraxia +alt.support.dystonia +alt.support.eating-disord +alt.support.endometriosis +alt.support.epilepsy +alt.support.ex-cult +alt.support.ex-cult.siddha-yoga +alt.support.fart-acceptance +alt.support.fluffy +alt.support.food-allergies +alt.support.foster-parents +alt.support.gallbladder +alt.support.gerd +alt.support.girl-lovers +alt.support.glaucoma +alt.support.grief +alt.support.grief.pet-loss +alt.support.grief.suicide +alt.support.headaches.migraine +alt.support.hearing-loss +alt.support.heart-children +alt.support.heart-defects +alt.support.heartburn +alt.support.hemophilia +alt.support.hepatitis-c +alt.support.herpes +alt.support.hiatal-hernia +alt.support.hightech-industry.burned-out +alt.support.hightech-industry.widows +alt.support.hospice +alt.support.host-u-internet +alt.support.hypermobility +alt.support.hypoglycemia +alt.support.ibs +alt.support.icy-holic +alt.support.impotence +alt.support.impotence.mates +alt.support.incest +alt.support.incontinence +alt.support.inter-cystitis +alt.support.intergendered +alt.support.invertebrate +alt.support.ipl-recovery +alt.support.ipl-recovery.its.his.fault.no.its.his +alt.support.jaw-disorders +alt.support.jock-strap +alt.support.kidney-disease +alt.support.kidney-failure +alt.support.learning-difficulties +alt.support.learning-disab +alt.support.leprosy +alt.support.loneliness +alt.support.loneliness.lighthouse-keepers +alt.support.lupus +alt.support.marfan +alt.support.marriage +alt.support.marriagefree +alt.support.martin.hannigan.weight.loss +alt.support.mcs +alt.support.menopause +alt.support.menopause.husbands +alt.support.mindless.nazis.klaas +alt.support.ms-recovery +alt.support.mult-sclerosis +alt.support.mult-sclerosis.alternatives +alt.support.musc-dystrophy +alt.support.myasthe-gravis +alt.support.narcolepsy +alt.support.nasty-habits.intern-fucking +alt.support.non-smokers +alt.support.non-smokers.moderated +alt.support.norplant +alt.support.nutty.as.a.fruitcake +alt.support.obesity +alt.support.ocd +alt.support.ocd.moderated +alt.support.opp-defiant +alt.support.ostomy +alt.support.parents.with-custody +alt.support.pco +alt.support.perilymph-fistula +alt.support.personality +alt.support.personality.schizoid +alt.support.phobia +alt.support.post-polio +alt.support.premature-baby +alt.support.pro-life.moderated +alt.support.programming +alt.support.prostate.prostatitis +alt.support.psoriasis +alt.support.pulmonary +alt.support.rape-survivors +alt.support.relationships +alt.support.relationships.long-distance +alt.support.religion.islam.taliban +alt.support.road-rage +alt.support.rsd +alt.support.schizoaffective +alt.support.schizophrenia +alt.support.schizophrenia.de +alt.support.scleroderma +alt.support.self-esteem +alt.support.self-harm +alt.support.sex-workers +alt.support.sexreassign +alt.support.short +alt.support.shyness +alt.support.sids +alt.support.single-parents +alt.support.sinusitis +alt.support.skin-diseases +alt.support.skin-diseases.hidradenitis +alt.support.skin-diseases.psoriasis +alt.support.skin-diseases.vitiligo +alt.support.sleep-disorder +alt.support.social-phobia +alt.support.spina-bifida +alt.support.srs +alt.support.srs.celeste +alt.support.srs.f-to-m +alt.support.srs.m-to-f +alt.support.srs.misc +alt.support.step-parents +alt.support.stop-smoking +alt.support.student-nurse +alt.support.stuttering +alt.support.survivors.prozac +alt.support.tall +alt.support.telecommute +alt.support.thalassemia +alt.support.the-fear +alt.support.thyroid +alt.support.tinnitus +alt.support.tourette +alt.support.tourette.moderated +alt.support.trauma-ptsd +alt.support.troll-acceptance +alt.support.tuberculosis +alt.support.turner-syndrom +alt.support.vasectomy +alt.support.warez.recovery +alt.support.wheat.intolerance +alt.support.wheelchairs +alt.support.withdrawal +alt.support.withdrawal.benzo +alt.surfing +alt.surfing.ausnz +alt.surfing.bodyboard +alt.surfing.europe +alt.surfing.europe.uk +alt.surfing.hawaii +alt.surfing.longboard +alt.surfing.luddite.homophobe +alt.surfing.usa +alt.surrealism +alt.surveyor +alt.survival +alt.survival.millenium +alt.survival.year2000 +alt.sustainable.agriculture +alt.sven +alt.svens +alt.svens.house +alt.svens.house.of +alt.svens.house.of.12.year-old.lust +alt.swedish +alt.swedish.chef.bork.bork.bork +alt.swedish.nightlife +alt.sweepstakes +alt.swine +alt.swingers +alt.swingers.california +alt.swingers.couples +alt.swingers.cypher +alt.swingers.moderated +alt.swingers.moderated.moderated +alt.swingers.wisconsin.wssc +alt.swnet +alt.swnet.biltrafik +alt.swnet.comp.text.tex +alt.swnet.datorforeningar +alt.swnet.flame +alt.swnet.knark +alt.swnet.knark.svamp +alt.swnet.kontakt +alt.swnet.kontakt.gay +alt.swnet.kontakt.hetro +alt.swnet.kontakt.lesbisk +alt.swnet.kontakt.permobiler +alt.swnet.media +alt.swnet.media.baren +alt.swnet.media.galdiatorerna +alt.swnet.media.nya-tider +alt.swnet.media.rederiet +alt.swnet.media.vita-logner +alt.swnet.musik +alt.swnet.news.diskussion +alt.swnet.perv +alt.swnet.porr +alt.swnet.president +alt.swnet.programmering +alt.swnet.rave +alt.swnet.snuh +alt.swnet.sup-dej-snygg +alt.swnet.trolls +alt.sy.emkktd.i.gd.lag.kjp +alt.sylvia-saint +alt.sylvia-saint.multimedia +alt.syncronys +alt.syntax.tactical +alt.syntax.tactical.hitler +alt.syquest +alt.sys +alt.sys.abox +alt.sys.alpha-micro +alt.sys.amiga.blitz +alt.sys.amiga.demos +alt.sys.amiga.e +alt.sys.amiga.miami +alt.sys.amiga.thor +alt.sys.intergraph +alt.sys.mac.newuser-help +alt.sys.pc-clone +alt.sys.pc-clone.acer +alt.sys.pc-clone.compaq +alt.sys.pc-clone.compaq.servers +alt.sys.pc-clone.dell +alt.sys.pc-clone.gateway2000 +alt.sys.pc-clone.micron +alt.sys.pc-clone.packardbell +alt.sys.pc-clone.quantex +alt.sys.pc-clone.zeos +alt.sys.pdp10 +alt.sys.pdp11 +alt.sys.pdp8 +alt.sys.perq +alt.sys.sun +alt.sysadmin.bofh +alt.sysadmin.recovery +alt.sysadmin.recovery.moneyworld +alt.table-tennis.mike-lewis +alt.taima-technicians +alt.taiwan.republic +alt.taker +alt.talk.bestiality +alt.talk.bfd +alt.talk.bollocks +alt.talk.car-free +alt.talk.charlie-witt +alt.talk.college.and.uni.students +alt.talk.commonwealth +alt.talk.creationism +alt.talk.esperanto +alt.talk.grandparents +alt.talk.korean +alt.talk.mended-drum +alt.talk.miet.mp.g3 +alt.talk.pollard-affair +alt.talk.prisons.moderated +alt.talk.royalty +alt.talk.smack +alt.talk.ulster +alt.talk.weather +alt.talk.weather.snow +alt.talk.year2000 +alt.talk.zoophilia +alt.talkers.cruise +alt.talkers.dwts +alt.talkers.ewtoo +alt.talkers.jeamland +alt.talkers.joot +alt.talkers.ncohafmuta +alt.talkers.nuts +alt.talkers.programming +alt.talkers.snowplains +alt.tall-women.admirers +alt.tamsyn.die.die.die +alt.tanya.shalayeva +alt.tarot +alt.tarot.friendly +alt.tartans +alt.tasteless +alt.tasteless.bottomfeeders +alt.tasteless.hank-becker +alt.tasteless.humor +alt.tasteless.jokes +alt.tasteless.penis +alt.tasteless.pictures +alt.tastless.jokes +alt.taxi.world +alt.tea +alt.teachers.lesson-planning +alt.team11.techtips +alt.tech-gadgets +alt.tech-support.recovery +alt.tech.digital-tv.select401 +alt.techno-shamanism +alt.technology.misc +alt.technology.obsolete +alt.technology.smartcards +alt.teenage.network.nerds +alt.teenbeat.records +alt.teens +alt.teens.16-18 +alt.teens.advice +alt.teens.anti-idiot +alt.teens.email-lists +alt.teens.gay +alt.teens.girls +alt.teens.intelligent-insanity +alt.teens.intelligent.insanity +alt.teens.lesbian +alt.teens.parents +alt.teens.penpals +alt.teens.penpals.canada +alt.teens.penpals.icq +alt.teens.poetry +alt.teens.poetry.and.stuff +alt.teens.sexuality +alt.teens.unity +alt.teens.void +alt.teenstation.bollywood +alt.telaviv +alt.telecom.phones.plain-tariff +alt.telecom.uk.marketplace +alt.telehealth.test +alt.telescopes.meade +alt.telescopes.meade.lx200 +alt.teletext.megazine +alt.telia-suger +alt.ten98 +alt.tennis +alt.tequilla +alt.terror.hsm +alt.terrorism.world-trade-center +alt.terry.knab.is.a.twat +alt.tesco.trainees +alt.tesla-coils +alt.test +alt.test.a +alt.test.aaronw +alt.test.binaries +alt.test.clienttest +alt.test.clienttest2 +alt.test.clienttest3 +alt.test.cmsg +alt.test.control-header-test +alt.test.control.approved.header +alt.test.cypher +alt.test.cztery +alt.test.d +alt.test.dwa +alt.test.fbc +alt.test.fishing +alt.test.glump +alt.test.gruppenschnitzer +alt.test.headers +alt.test.ignore.yes.its.that.easy +alt.test.jeden +alt.test.my +alt.test.not-r +alt.test.ohmy +alt.test.one +alt.test.only +alt.test.paratransit +alt.test.pope-john-paul-ii +alt.test.qqxw +alt.test.rob-cypher +alt.test.stuphs +alt.test.test +alt.test.test.a +alt.test.test.test.c +alt.test.test.test.d +alt.test.test.wow +alt.test.tickle +alt.test.trzy +alt.test.tsetse +alt.test.ug1 +alt.test.wombat +alt.test.yeah +alt.test.yer.posts +alt.testing +alt.testosterone +alt.tests.high-school.new-york.regents +alt.tfn.flame +alt.tfn.flame.dork +alt.thanatos +alt.thanksgiving.turkey.cockadoodledoo +alt.the-chaps +alt.the.lame-troll +alt.thebird +alt.thebird.copwatch +alt.thebird.copwatch.trolls +alt.thebird.hippie +alt.thebird.liberal +alt.thedavid +alt.theft.sign-stealing +alt.theosophy +alt.thief.george.w.bush +alt.think.tank +alt.thinking +alt.thinking.hurts +alt.thinkquest +alt.this.is.a.cmsg.test +alt.this.is.yet.another.test +alt.this.sucks +alt.thought.southern +alt.thrash +alt.thursday +alt.tickling +alt.tiernan +alt.time-travel +alt.time-travel.cypher +alt.timewasters +alt.timothy.sutter +alt.tira +alt.tits +alt.tits.big +alt.tits.fake +alt.tits.real +alt.tits.small +alt.titty.fuck.the.skull.of.oliver1 +alt.tmo +alt.toilet-paper.1-ply +alt.toilet-paper.2-ply +alt.toilet-paper.3-ply +alt.toilet-paper.leaves +alt.toilet-paper.shirtsleeve +alt.tony-net +alt.tony-sutton +alt.tonya-harding +alt.tools.repair+advice +alt.tools.repairadvice +alt.toon-pics +alt.topper.pantscat.spank.spank.spank +alt.toronto +alt.toronto-jews +alt.toronto.internet.co-op +alt.toronto.internet.co-op.d +alt.torture +alt.tos.members.d +alt.total-loser +alt.totosaid +alt.townhouse.phillip-st +alt.toxiccrisko.net +alt.toys +alt.toys.bombs.napalm +alt.toys.furby +alt.toys.gi-joe +alt.toys.gi-joe.1980s +alt.toys.hi-tech +alt.toys.lego +alt.toys.low-tech +alt.toys.marbles.bc +alt.toys.micronauts +alt.toys.my-little-pony +alt.toys.transformers +alt.toys.transformers.classic.moderated +alt.toys.transformers.fanfic +alt.toys.transformers.marketplace +alt.toys.virtual-pets +alt.trade.compact-disc +alt.trade.spareparts +alt.trades.building.construction.canada +alt.trades.construction.canadian +alt.trades.construction.us +alt.traditional.witchcraft +alt.trainersplace +alt.training.technology +alt.transformation.stories +alt.transgendered +alt.transgendered.jeffy-boyd +alt.trapped +alt.travel +alt.travel.canada +alt.travel.canada.ontario +alt.travel.canada.ontario.toronto +alt.travel.eurail.youth-hostels +alt.travel.florida +alt.travel.greece +alt.travel.lighthouse +alt.travel.marketplace +alt.travel.misc +alt.travel.rides +alt.travel.road-trip +alt.travel.trip-reports +alt.travel.uk.air +alt.travel.uk.marketplace +alt.travel.usa-canada +alt.travel.vacation-reports +alt.treasure.hunting +alt.treasurequest.com +alt.trebel +alt.trebel.country +alt.trebel.country.france +alt.trebel.country.netherlands +alt.trebel.demos +alt.trebel.diskmag +alt.trebel.music +alt.trebel.party +alt.tree-of-knowledge +alt.trees +alt.triballs.announce +alt.trini.alla.frutta +alt.trold +alt.troll +alt.troll-busters +alt.troll-news-reports +alt.troll-news-reports.config +alt.troll-news-reports.sunny +alt.troll.buster +alt.troll.john-corliss +alt.trouser.monster +alt.trucks.chevy +alt.trucks.ford +alt.true-crime +alt.true.crime +alt.true.ghost +alt.truntfest +alt.tt +alt.tuesday +alt.turin-shroud +alt.turismo.camper +alt.tv +alt.tv.3djam-tv +alt.tv.3rd-rock +alt.tv.7th-heaven +alt.tv.90210 +alt.tv.a-team +alt.tv.aaron-spelling +alt.tv.ab-fab +alt.tv.absolutely_fabulous +alt.tv.adam-12 +alt.tv.aeon-flux +alt.tv.airwolf +alt.tv.alf +alt.tv.alias +alt.tv.all-my-children +alt.tv.ally-mcbeal +alt.tv.ally-mcbeal.uk +alt.tv.amer-gothic +alt.tv.andromeda +alt.tv.angel +alt.tv.animaniacs +alt.tv.animaniacs.pinky-brain +alt.tv.another-world +alt.tv.avengers +alt.tv.babylon-5 +alt.tv.bakersfield-pd +alt.tv.barney +alt.tv.batman +alt.tv.baywatch +alt.tv.beakmans-world +alt.tv.beauty+beast +alt.tv.beautybeast +alt.tv.beavis-n-butthead +alt.tv.beverly-hillbillies +alt.tv.bewitched +alt.tv.bh90210 +alt.tv.big-brother +alt.tv.big-brother.australia +alt.tv.big-brother.uk +alt.tv.blues-clues +alt.tv.bnn +alt.tv.bob-the-builder +alt.tv.bold-beautiful +alt.tv.boston-common +alt.tv.boy-meets-world +alt.tv.brady-bunch +alt.tv.brimstone +alt.tv.brisco-county +alt.tv.broadcasting +alt.tv.buddy-faro +alt.tv.buffy-v-slayer +alt.tv.buffy-v-slayer.creative +alt.tv.buffy-v-slayer.spoilers +alt.tv.california-dreams +alt.tv.caroline-city +alt.tv.cartoon-network +alt.tv.cartoon-network.toonami +alt.tv.cell-block-h +alt.tv.charmed +alt.tv.chicago-hope +alt.tv.china-beach +alt.tv.chips +alt.tv.christy +alt.tv.clueless +alt.tv.comedy-central +alt.tv.comedy-central.daily-show +alt.tv.commercials +alt.tv.cow-n-chicken +alt.tv.crime-drama +alt.tv.csi +alt.tv.cupid +alt.tv.dallas +alt.tv.daria +alt.tv.dark-angel +alt.tv.dark-skies +alt.tv.dark_shadows +alt.tv.dawsons-creek +alt.tv.dawsons-creek.sucks +alt.tv.days-of-our-lives +alt.tv.daytime-shows +alt.tv.dean-stark +alt.tv.degrassi +alt.tv.dexters-lab +alt.tv.dharma-greg +alt.tv.dinosaurs +alt.tv.dinosaurs.barney.die.die.die +alt.tv.discovery.canada +alt.tv.dr-katz +alt.tv.dr-quinn +alt.tv.dragnet +alt.tv.dragonball-z +alt.tv.duckman +alt.tv.due-south +alt.tv.due-south.creative +alt.tv.dungeon-dragon +alt.tv.early-edition +alt.tv.earth-final-conflict +alt.tv.earth2 +alt.tv.eek-the-cat +alt.tv.emergency +alt.tv.er +alt.tv.er.creative +alt.tv.expedientes-x +alt.tv.family-guy +alt.tv.familyguy +alt.tv.farscape +alt.tv.father-ted +alt.tv.father_ted +alt.tv.felicity +alt.tv.fifteen +alt.tv.first-wave +alt.tv.fishmasters +alt.tv.food-network +alt.tv.fools-and-horses +alt.tv.forever-knight +alt.tv.forever-knight.spoilers +alt.tv.foxab +alt.tv.frasier +alt.tv.freakazoid +alt.tv.friends +alt.tv.friends.fanfic +alt.tv.friends.northamerica +alt.tv.futurama +alt.tv.game-shows +alt.tv.game-shows.price-is-right +alt.tv.general-hospital +alt.tv.gerbert +alt.tv.gilligans-island +alt.tv.gilligans.island +alt.tv.gilmore-girls +alt.tv.gold-monkey +alt.tv.green-acres +alt.tv.gummi-bears +alt.tv.gunsmoke +alt.tv.gvse +alt.tv.happy-hour +alt.tv.harsh-realm +alt.tv.hbo +alt.tv.heartbreakhigh +alt.tv.hercules +alt.tv.hercules-legendary-journeys +alt.tv.hermans-head +alt.tv.hey-arnold +alt.tv.highlander +alt.tv.highlander.creative +alt.tv.hogans-heroes +alt.tv.home-and-away +alt.tv.home-imprvment +alt.tv.hometime +alt.tv.homicide +alt.tv.house-of-elliot +alt.tv.ilovelucy +alt.tv.infomercials +alt.tv.internet-slutts +alt.tv.invisible-man +alt.tv.iron-chef +alt.tv.jackass +alt.tv.jag +alt.tv.jerry-springer +alt.tv.junkyard-wars +alt.tv.just-shoot-me +alt.tv.kids-in-hall +alt.tv.kids-inc +alt.tv.kindred +alt.tv.king-of-hill +alt.tv.knight-rider +alt.tv.kungfu +alt.tv.lafemme-nikita +alt.tv.lathe-of-heaven +alt.tv.law-and-order +alt.tv.lexx +alt.tv.liquid-tv +alt.tv.lois-n-clark +alt.tv.lois-n-clark.fanfic +alt.tv.lost-in-space.danger.will-robinson.danger.danger.danger +alt.tv.macgyver +alt.tv.macross +alt.tv.mad-about-you +alt.tv.mad-tv +alt.tv.magnificent-7 +alt.tv.magnum-pi +alt.tv.malcolm-in-themiddle +alt.tv.man-from-uncle +alt.tv.mannix +alt.tv.martha-stewart +alt.tv.martial-law +alt.tv.mash +alt.tv.mathnet +alt.tv.max-headroom +alt.tv.melrose-place +alt.tv.miami-vice +alt.tv.millenium +alt.tv.millenium.uk +alt.tv.millennium +alt.tv.millennium.uk +alt.tv.mission-imposs +alt.tv.models-inc +alt.tv.mork-n-mindy +alt.tv.mortal-kombat +alt.tv.mr-belvedere +alt.tv.mst3k +alt.tv.mst3k.mstings +alt.tv.mtv +alt.tv.mtv-europe +alt.tv.muppets +alt.tv.murder-one +alt.tv.mwc +alt.tv.my-s-c-life +alt.tv.my-so-called-life +alt.tv.nash-bridges +alt.tv.nbc-sucks +alt.tv.neighbours +alt.tv.networks.cbc +alt.tv.networks.tvfood +alt.tv.news-shows +alt.tv.newsradio +alt.tv.nick-at-nite +alt.tv.nickelodeon +alt.tv.night-tracks +alt.tv.northern-exp +alt.tv.nowhere-man +alt.tv.ny-news +alt.tv.nypd-blue +alt.tv.ocean-girl +alt.tv.one-life-to-live +alt.tv.oprah +alt.tv.oprah-winfrey +alt.tv.oreilly-factor +alt.tv.outer-limits +alt.tv.oz +alt.tv.party-of-five +alt.tv.party-of-five.puke.puke.puke +alt.tv.passions +alt.tv.pattlestar-gayactica +alt.tv.pee-wee-herman +alt.tv.perfect-strangers +alt.tv.pete-and-pete +alt.tv.pi +alt.tv.picket-fences +alt.tv.pingu +alt.tv.pirate +alt.tv.pizzacats +alt.tv.pol-incorrect +alt.tv.popstars +alt.tv.popular +alt.tv.port-charles +alt.tv.powerpuff-girls +alt.tv.pretender +alt.tv.pretender.creative +alt.tv.pretender.rpg +alt.tv.prisoner +alt.tv.profiler +alt.tv.providence +alt.tv.psi-factor +alt.tv.public-access +alt.tv.quantum-leap.creative +alt.tv.queerasfolk.uk +alt.tv.quincy-me +alt.tv.raw +alt.tv.rca.dss +alt.tv.real-world +alt.tv.reality +alt.tv.reboot +alt.tv.red-dwarf +alt.tv.red-dwarf.discussion +alt.tv.red-dwarf.fans +alt.tv.red-dwarf.fans-only +alt.tv.red-dwarf.moderated +alt.tv.red-dwarf.series8 +alt.tv.remember-wenn +alt.tv.ren-n-stimpy +alt.tv.rescue-77 +alt.tv.road-rules +alt.tv.roar +alt.tv.robot-wars +alt.tv.robotech +alt.tv.rockford-files +alt.tv.roseanne +alt.tv.roswell +alt.tv.rugrats +alt.tv.sabrina +alt.tv.sabrina.salem.sucks +alt.tv.saved-bell +alt.tv.saved-by-the-bell +alt.tv.scifi.channel +alt.tv.scott-bakula +alt.tv.sctv +alt.tv.seaquest +alt.tv.seaquest.creative +alt.tv.seinfeld +alt.tv.sentai +alt.tv.sentinel +alt.tv.sesame-street +alt.tv.sevendays +alt.tv.sexandthecity +alt.tv.shaggable.babes +alt.tv.showtime +alt.tv.silk-stalkings +alt.tv.silk-stockings +alt.tv.simpsons +alt.tv.simpsons.itchy-scratchy +alt.tv.simpsons.simpsons +alt.tv.simpsons.snuh +alt.tv.sinbad +alt.tv.singled-out +alt.tv.sitcom +alt.tv.six-feet-under +alt.tv.sliders +alt.tv.sliders.creative +alt.tv.sliders.cypher +alt.tv.sliders.motard.rides.the.short.bus.to.school +alt.tv.smallville +alt.tv.smk +alt.tv.snl +alt.tv.sopranos +alt.tv.southpark +alt.tv.southpark.creative +alt.tv.space-a-n-b +alt.tv.space-cases +alt.tv.spin-city +alt.tv.sports +alt.tv.star-trek +alt.tv.star-trek.ds9 +alt.tv.star-trek.enterprise +alt.tv.star-trek.jeffery-hunt +alt.tv.star-trek.next-gen +alt.tv.star-trek.tng +alt.tv.star-trek.tos +alt.tv.star-trek.voyager +alt.tv.stargate-sg1 +alt.tv.stars.d-fishel +alt.tv.strange-luck +alt.tv.sunset-beach +alt.tv.superman-adventures +alt.tv.survivor +alt.tv.survivor-series +alt.tv.survivor-series.sucks +alt.tv.svengoolie +alt.tv.swamp-thing +alt.tv.swatkats +alt.tv.tales-crypt +alt.tv.talkshows +alt.tv.talkshows.daytime +alt.tv.talkshows.late +alt.tv.taz-mania +alt.tv.tech.hdtv +alt.tv.tech.misc +alt.tv.tech.plain-tv +alt.tv.teletubbies +alt.tv.tellytubbies.hardcore.binaries +alt.tv.tgif +alt.tv.the-bill +alt.tv.the-critic +alt.tv.the-goodies +alt.tv.the-jeffersons +alt.tv.the-jihad +alt.tv.the-lone-gunmen +alt.tv.the-mole +alt.tv.the-net +alt.tv.the-practice +alt.tv.the-state +alt.tv.the-tick +alt.tv.the-view +alt.tv.the-west-wing +alt.tv.thebox +alt.tv.thepractice +alt.tv.third-rock +alt.tv.thirdwatch +alt.tv.this-old-house +alt.tv.threes-company +alt.tv.thundercats +alt.tv.tiny-toon +alt.tv.tiny-toon.babs-bunny +alt.tv.tiny-toon.babs-bunny.isadyke +alt.tv.tiny-toon.buster-bunny +alt.tv.tiny-toon.fandom +alt.tv.tiny-toon.sex +alt.tv.tiny-toon.sext +alt.tv.tiny-toon.ttbssex +alt.tv.tmf +alt.tv.tom-green +alt.tv.touched-by-an-angel +alt.tv.toute-fabienne +alt.tv.traders +alt.tv.trading-spaces +alt.tv.tv-funhouse +alt.tv.tv-nation +alt.tv.tweenies +alt.tv.twilight.zone +alt.tv.twin-peaks +alt.tv.v +alt.tv.viper +alt.tv.voice-artists +alt.tv.vr5 +alt.tv.weird-science +alt.tv.whose-line +alt.tv.will-and-grace +alt.tv.wings +alt.tv.wiseguy +alt.tv.wnn +alt.tv.wonder-years +alt.tv.working +alt.tv.world-news-now +alt.tv.world-news-now.moderated +alt.tv.x-files +alt.tv.x-files.analysis +alt.tv.x-files.creative +alt.tv.x-files.creative.mature +alt.tv.x-files.x-ville +alt.tv.xena +alt.tv.xena-subtext +alt.tv.xena-subtext.misc +alt.tv.xena.creative +alt.tv.xena.creative.mature +alt.tv.xena.creative.subtext +alt.tv.xena.rob-cypher.likes.dykes +alt.tv.xena.subtext.creative +alt.tv.xfiles +alt.tv.xuxa +alt.tv.younggrestless +alt.tv.ytv +alt.twit +alt.two.zero.four +alt.twosixhundred.uk +alt.twx.test +alt.ubergene +alt.ucb.class.suicide.c169 +alt.ufc +alt.ufo.reports +alt.uhaul.good.bad.ugly +alt.ultra-conservatives.crazies-with-guns +alt.umist.computer.users.society +alt.umr.student.babble +alt.underground +alt.underground.yalta +alt.unemployed.bum.montgomery-wood +alt.union.iatse +alt.union.natl-writers +alt.unitednations +alt.unitednations.killtaig +alt.univ.collegiate.uk +alt.unix +alt.unix.geeks +alt.unix.geeks.moderated +alt.unix.interix +alt.unix.wizards +alt.unix.wizards.free +alt.unpopularbooks +alt.up-your-gi-gi-with.a-woo-woo-brush +alt.upa +alt.urban.folklore +alt.urokosodoji +alt.us.bonehead.henrietta-thomas +alt.us.prisons +alt.usa-sucks +alt.usage.chinese +alt.usage.english +alt.usage.german +alt.usage.icelandic +alt.usage.italiano +alt.usage.names +alt.usage.spanish +alt.useless.newsgroup.delete.me +alt.usenet.abusers.databasix +alt.usenet.addict +alt.usenet.goodbye +alt.usenet.kooks +alt.usenet.legends +alt.usenet.legends.duab +alt.usenet.manifestoes +alt.usenet.newbies +alt.usenet.offline-reader +alt.usenet.offline-reader.forte-agent +alt.usenet.offline-reader.forte-agent.jehad +alt.usenet.offline-reader.forte-agent.modified +alt.usenet.pigwalk +alt.usenet.pirated.agent +alt.usenet.recovery +alt.usenet.reposts +alt.usenet.satellite +alt.usenet.software +alt.usenet.supernews-talk +alt.usenet.surveys +alt.usenet.troll-buster +alt.usenet.worthless.group +alt.usenetmud +alt.utensils.spork +alt.uu.announce +alt.uu.comp.os.linux.questions +alt.uu.future +alt.uu.lang.esperanto.misc +alt.uu.lang.russian +alt.uu.lang.russian.misc +alt.uu.math.misc +alt.uu.misc.misc +alt.uunet.anti-trust +alt.vacation +alt.vacation.branson +alt.vacation.las-vegas +alt.vampire.tremere +alt.vampyres +alt.vampyres.flap.flap.flap +alt.vancouver.white.pride +alt.vegas.personals +alt.verio +alt.verio.recovery +alt.video +alt.video.avid-editors +alt.video.avid_editors +alt.video.digital-tv +alt.video.divx +alt.video.divx.bloatedsack +alt.video.dvd +alt.video.dvd.authoring +alt.video.dvd.complain +alt.video.dvd.friends-of-joe +alt.video.dvd.non-anamorphic +alt.video.dvd.software +alt.video.dvd.tech +alt.video.dvdr +alt.video.equipment.broadcast +alt.video.games +alt.video.games.reviews +alt.video.games.sony-playstation +alt.video.laserdisc +alt.video.laserdisc.marketplace +alt.video.letterbox +alt.video.letterbox.bernie-faber.moron-freak +alt.video.ptv.replaytv +alt.video.ptv.tivo +alt.video.ptv.ultimatetv +alt.video.satellite.4dtv +alt.video.satellite.mpeg-dvb +alt.video.sound +alt.video.tape-trading +alt.video.tape-trading.pal +alt.video.tv-sets +alt.video.vcr +alt.videogames +alt.videogames.3d0.sucks.hard +alt.videogames.hacking +alt.videogames.neo-geo +alt.videos.bootlegs +alt.videotron.general +alt.vietnam.veterans +alt.vigilantes +alt.vinocur.replies +alt.virasoft.info +alt.virasoft.vso +alt.virtual-adepts +alt.virtualmars +alt.visa.australia +alt.visa.us +alt.visa.us.marriage-based +alt.visio +alt.vitamins +alt.volkswagen.beetle +alt.voodoo +alt.voodoo.studmuffin +alt.voodoo.superhero +alt.voyage.merlin_1 +alt.vrouwen.nl +alt.vunzzz +alt.vvm +alt.vvm.helpdesk +alt.w3life +alt.wais +alt.wally +alt.walmart +alt.walmart.censor.censor.censor +alt.wanadoo.forum +alt.want.sex +alt.wanted +alt.wanted.large.breasted.women +alt.wanted.moslem.gay +alt.wap.phones +alt.war +alt.war.civil.usa +alt.war.cypher +alt.war.enduring-freedom +alt.war.korea +alt.war.mercenary +alt.war.nuclear +alt.war.pow-mia +alt.war.vietnam +alt.war.yugoslavia +alt.warez +alt.warez.amiga +alt.warez.apps +alt.warez.apps.ibm-pc.games +alt.warez.borje-hagsten +alt.warez.burnout +alt.warez.consoles +alt.warez.g0ff +alt.warez.godz +alt.warez.ibm-pc +alt.warez.ibm-pc.apps +alt.warez.ibm-pc.games +alt.warez.ibm-pc.old +alt.warez.uk +alt.wastewater +alt.waukesha.schools.meadowbrook +alt.wavcatcher +alt.waves +alt.wears +alt.wears.his.mothers.bra.and.panties.montgomery-wood +alt.web-accessability +alt.webcam.camgirls +alt.webcam.gaycams +alt.webcom.form-users +alt.webcom.users +alt.webedit +alt.webgod +alt.webhosting +alt.webrings.announce +alt.website.pluto +alt.websites +alt.wedding +alt.wedding.marketplace +alt.wednesday +alt.wee +alt.wee.goaway.goaway.goaway +alt.weemba +alt.welch-family +alt.wesley.crusher +alt.wesley.crusher.die.die.die +alt.west-virginia +alt.west-virginia.bluefieldnet +alt.wh +alt.what-the +alt.what.the.hell +alt.wheel.of.time +alt.wheres.the.possum +alt.whine +alt.whiny +alt.whistleblowing +alt.whitepower +alt.who.is.bob +alt.who.the.hell.is.making.all.these.stupid.newsgroups +alt.wholesale +alt.wibby +alt.wiccan.cypher +alt.wicware +alt.wigg +alt.wilcom.com +alt.wild.sex +alt.wild.sex.with +alt.wild.sex.with.cute.nonaidsinfected.interesting +alt.wild.sex.with.cute.nonaidsinfected.interesting.sonsofbitches +alt.wildland.firefighting +alt.windows +alt.windows-XP +alt.windows-me +alt.windows-w2k +alt.windows-xp +alt.windows.cde +alt.windows.text +alt.windows95 +alt.windows95.beta +alt.windows98 +alt.winnetou +alt.winsock +alt.winsock.programming +alt.winsock.trumpet +alt.wipe.my-pooper +alt.wired +alt.wisdom +alt.witchcraft +alt.wolves +alt.wolves.hybrid +alt.women +alt.women.attitudes +alt.women.disabled +alt.women.health +alt.women.petite +alt.women.relcom.marriage +alt.women.shesaid +alt.women.supremacy +alt.women.want.sex +alt.women.want.sex.with +alt.women.want.sex.with.joebob +alt.workingholiday +alt.worldsaway +alt.worms.out.of.a.hot.cheese-log +alt.worship.cypher +alt.worship.goddish +alt.worst.of.usenet +alt.wrestling.wwf +alt.writing +alt.writing.scams +alt.wwa.chat +alt.www +alt.www.authoring +alt.www.authoring.homesite +alt.www.imdb.us +alt.www.marketing +alt.www.marketing.adverts +alt.www.sexzilla.com +alt.www.sites +alt.www.stupid-idiots.com +alt.www.webguild +alt.www.webmaster +alt.www.webmaster.ads +alt.www.webmaster.no-ads +alt.www.webmaster.xxx +alt.www.wedding-service.co.uk +alt.x +alt.x-files.rpg +alt.x.y +alt.xlmx +alt.xyzzy +alt.y2trolls +alt.yang.suxor +alt.year +alt.year.1976 +alt.yerevan +alt.ygdrasil +alt.ygdrasil.film +alt.yo-yo +alt.yoga +alt.yogananda +alt.yowie +alt.zen +alt.zencor +alt.zer0.test +alt.zer0.test.test +alt.zerotest +alt.zezon +alt.zima +alt.zines +alt.zines.ballsout-squeegee +alt.ziopino +alt.zombie +alt.zoom +alt.zuzu +alt.zx.dp +americast.latimes.money +americast.usa-today.money +americast.ushead.money +amiga.general +amiga.hardware +anarchy.rules +ann.agenda +ann.exjoego +announce.singles +aol.announce +aol.books.lars-eighner +aol.buy.and.sell +aol.chat +aol.commerce +aol.commerce.computers.forsale +aol.commerce.computers.wanted +aol.commerce.general +aol.commerce.misc-ads +aol.commerce.misc.ads +aol.commerce.mlm +aol.commerce.mlm.announce +aol.commerce.mlm.discussion +aol.computer +aol.computers +aol.disabled +aol.internet +aol.misc +aol.neighborhood.ak.anchorage.singles +aol.neighborhood.ak.jobs +aol.neighborhood.az.jobs +aol.neighborhood.az.phoenix.general +aol.neighborhood.bco.vancouver.jobs +aol.neighborhood.bco.vancouver.singles +aol.neighborhood.bco.victoria.singles +aol.neighborhood.ca.bay-area.jobs +aol.neighborhood.ca.calabasas.jobs +aol.neighborhood.ca.jobs +aol.neighborhood.ca.pasadena.jobs +aol.neighborhood.ca.san-diego.jobs +aol.neighborhood.ca.san-francisco.jobs +aol.neighborhood.ca.san-jose.jobs +aol.neighborhood.ca.santa-ana.jobs +aol.neighborhood.ca.west-hollywood.jobs +aol.neighborhood.fl.fort-lauderdale.jobs +aol.neighborhood.fl.gainesville.jobs +aol.neighborhood.fl.orlando.jobs +aol.neighborhood.fl.tampa.jobs +aol.neighborhood.fl.tampa.marketplace +aol.neighborhood.fl.tampa.motss +aol.neighborhood.fl.tampa.singles +aol.neighborhood.ga.jobs +aol.neighborhood.il.chicago.jobs +aol.neighborhood.il.chicago.marketplace +aol.neighborhood.il.jobs +aol.neighborhood.in.indianapolis.general +aol.neighborhood.la.jobs +aol.neighborhood.ma.jobs +aol.neighborhood.md.gaithersburg.jobs +aol.neighborhood.md.jobs +aol.neighborhood.nation.germany +aol.neighborhood.nation.greece +aol.neighborhood.nbr.jobs +aol.neighborhood.nc.burlington.jobs +aol.neighborhood.nc.charlotte.jobs +aol.neighborhood.nc.greensboro.jobs +aol.neighborhood.nc.jobs +aol.neighborhood.nc.raleigh.jobs +aol.neighborhood.nd.jobs +aol.neighborhood.ne.jobs +aol.neighborhood.nh.jobs +aol.neighborhood.nj +aol.neighborhood.nj.jersey-city.jobs +aol.neighborhood.nj.jobs +aol.neighborhood.nm.jobs +aol.neighborhood.ny.albany.jobs +aol.neighborhood.ny.buffalo.jobs +aol.neighborhood.ny.jobs +aol.neighborhood.ny.manhattan.jobs +aol.neighborhood.ny.new-york.general +aol.neighborhood.ny.new-york.jobs +aol.neighborhood.ny.rochester.jobs +aol.neighborhood.ny.saratoga.jobs +aol.neighborhood.ny.staten-island.jobs +aol.neighborhood.ny.staten-island.singles +aol.neighborhood.ny.syracuse.jobs +aol.neighborhood.ny.the-bronx.jobs +aol.neighborhood.oh.jobs +aol.neighborhood.ok.jobs +aol.neighborhood.ont.hamilton.jobs +aol.neighborhood.ont.jobs +aol.neighborhood.ont.london.jobs +aol.neighborhood.ont.toronto.jobs +aol.neighborhood.or.jobs +aol.neighborhood.or.portland.jobs +aol.neighborhood.pa.jobs +aol.neighborhood.pa.pittsburgh +aol.neighborhood.pa.state-college.marketplace +aol.neighborhood.pr.san-juan.jobs +aol.neighborhood.que.montreal.jobs +aol.neighborhood.ri.jobs +aol.neighborhood.sc.jobs +aol.neighborhood.tn.chattanooga.jobs +aol.neighborhood.tn.chattanooga.singles +aol.neighborhood.tn.jobs +aol.neighborhood.tx.dallas-ftworth.jobs +aol.neighborhood.tx.houston.jobs +aol.neighborhood.tx.jobs +aol.neighborhood.va.alexandria.jobs +aol.neighborhood.va.arlington.jobs +aol.neighborhood.va.chesapeake.jobs +aol.neighborhood.va.jobs +aol.neighborhood.va.lynchburg.jobs +aol.neighborhood.va.mclean.jobs +aol.neighborhood.va.newport-news.jobs +aol.neighborhood.va.norfolk.jobs +aol.neighborhood.va.richmond +aol.neighborhood.va.richmond.jobs +aol.neighborhood.wa.jobs +aol.neighborhood.wa.seattle.jobs +aol.neighborhood.wa.tacoma.jobs +aol.neighborhood.wi.jobs +aol.news.business.automotive +aol.news.business.health-medicine +aol.news.sports.golf +aol.newsgroups.help +aol.newsgroups.test +aol.questions.and.answers +aol.techchat +aol.test +aone.announce +aone.general +apana.lists.music.the-beloved +ar.anuncios +ar.ciencia-ficcion +ar.joda +ar.personales +ar.pruebas +arc.ccf.services +arc.ccf.super +arc.ccf.unix +arc.news.aar +argonet.acorn.assist +argonet.acorn.binaries +argonet.acorn.misc +argonet.acorn.voyager +argonet.mac.binaries +argonet.pc.binaries +argonet.zfc +arkane.announce +arkane.answers +arkane.cancel +arkane.comp.bastardry +arkane.config +arkane.control +arkane.fan.breasts.lara-beaton +arkane.fan.kate-nepveu +arkane.fan.widderslainte +arkane.flame.incompetent-fsckers +arkane.flame.whiny-lusers +arkane.misc +arkane.personal.alistair-young +arkane.policy +arkane.sci.ether +arkane.test +arnet.general +artware +ascii-netz.mailbox.mailboxwerbung +asia +asia.ads +asia.ads.big +asus.support.english.multimedia +asymetrix.toolbook.assistant +asymetrix.toolbook.cbt +asymetrix.toolbook.scripting +athena.announcements +athena.forsale +athena.gamit +athena.housing +athena.misc +athena.test +atl.arno +atl.autos.forsale +atl.forsale +atl.general +atl.housing +atl.jobs +atl.olympics +atl.resumes +atl.singles +atl.test +ats.dos.resnet +ats.homenet.misc +ats.mac.resnet +ats.windows.resnet +att.forsale +att.ham-radio +att.lang.c++ +att.talk.guns +au.jobs +aurora.general +austin.announce +austin.autos +austin.flame +austin.food +austin.forsale +austin.freenet +austin.gardening +austin.general +austin.internet +austin.jobs +austin.jobs.resumes +austin.music +austin.news +austin.news.stats +austin.org.sca +austin.personals +austin.politics +austin.talk +austin.test +austin.usenet.config +austin.usenet.stats +autodesk.aec.arch-desktop.customization +autodesk.aec.arch-desktop2 +autodesk.aec.arch-desktop3 +autodesk.aec.arch-desktop3-dt +autodesk.aec.cadoverlayr14 +autodesk.aec.land-desktop.customization +autodesk.aec.land-desktop.wishes +autodesk.aec.land-desktop2 +autodesk.aec.s8civil-survey +autodesk.autocad.2000general +autodesk.autocad.2002general +autodesk.autocad.connectivity +autodesk.autocad.customer-files +autodesk.autocad.customization +autodesk.autocad.customization.vba +autodesk.autocad.digitize-display +autodesk.autocad.drafting +autodesk.autocad.marketing +autodesk.autocad.network +autodesk.autocad.objectarx +autodesk.autocad.print-plot +autodesk.autocad.r12general +autodesk.autocad.r13general +autodesk.autocad.r14general +autodesk.autocad.render-walkthru +autodesk.autocadlt.2000general +autodesk.autocadlt.2002general +autodesk.autocadlt.97general +autodesk.autocadlt.win95 +autodesk.autocadmap.general +autodesk.building.mechanical +autodesk.expresstools +autodesk.forum.utilisateurs.fr +autodesk.gis.training +autodesk.internet +autodesk.inventor.customization +autodesk.inventor.support +autodesk.land-desktop3 +autodesk.map.developer +autodesk.mapguide.developer +autodesk.mapguide.general +autodesk.mcad.marketing +autodesk.mcad.mdt5.support +autodesk.mcad.mdt6.support +autodesk.mcad.powerpack.support +autodesk.mcad.support +autodesk.viphq.general +autodesk.voloview.general +autodesk.workcenter.view +av.avid +av.computer +av.config +av.dining +av.forsale +av.general +av.jobs +av.mug +av.news +av.personals +av.qnet +av.seminars +av.test +av.user +av.wanted +az.config +az.forsale +az.general +az.internet +az.jobs +az.politics +az.sf +az.swusrgrp +az.teens +az.test +az.wanted +b20.3322 +ba.announce +ba.art +ba.bicycles +ba.broadcast +ba.config +ba.consumers +ba.dance +ba.food +ba.forsale +ba.gardens +ba.general +ba.helping-hand +ba.housing +ba.internet +ba.jobs +ba.jobs.agency +ba.jobs.contract +ba.jobs.contract.agency +ba.jobs.contract.direct +ba.jobs.direct +ba.jobs.discussion +ba.jobs.misc +ba.jobs.offerd +ba.jobs.offered +ba.jobs.resumes +ba.market +ba.market.computer +ba.market.computers +ba.market.forsale +ba.market.housing +ba.market.misc +ba.market.vehicles +ba.marketplace +ba.marketplace.computers +ba.misc.forsale +ba.motorcycles +ba.motss +ba.mountain-folk +ba.music +ba.music.drumming +ba.news.config +ba.news.group +ba.news.stats +ba.personals +ba.politics +ba.seminars +ba.singles +ba.smartvalley +ba.sports +ba.startup +ba.test +ba.transportation +ba.wanted +ba.weather +backbone.general +backbone.test +balt.config +balt.forsale +balt.general +balt.jobs +balt.misc +balt.music +bash.commerce +basicworld.public.basicpro +basicworld.public.vb.allgemein +basicworld.public.vb.datenbank +basicworld.public.vb.netzwerk +basicworld.public.vb.tools +basicworld.public.vb.winapi +basicworld.public.wildsite +basis.bbj-developer +basis.bbx-list +basis.support.pro5 +basis.support.visualpro5 +bburg.forsale +bburg.general +bc.bcnet +bc.cycling +bc.general +bc.jobs +bc.news.stats +bc.politics +bc.unix +bc.wantads +bc.weather +bcs.activists +bcs.announce +bcs.announce.d +bcs.answers +bcs.config +bcs.misc +bcs.olsc +bcs.sig.mac +bcs.sig.misc +bcs.test +bda.config +bda.forum.bda +bda.forum.hfa +bda.forum.zeit.feuilleton +bda.forum.zeit.job +bda.forum.zeit.jobs +bda.forum.zeit.kolumnen +bda.forum.zeit.thema +bda.news +bda.test +beirdo.fido.swo.sex +belnet.wg-lib +belwue +belwue.sw +belwue.test +bend.jobs.offered +bermuda.business.financial +bermuda.business.insurance +bermuda.forsale +bermuda.jobs.offered +bermuda.sports +bestjobs.usa.offered +bigpond.broadband.tech.lans +bionet.agroforestry +bionet.announce +bionet.audiology +bionet.biology +bionet.biology.cardiovascular +bionet.biology.computational +bionet.biology.deepsea +bionet.biology.grasses +bionet.biology.n2-fixation +bionet.biology.symbiosis +bionet.biology.tropical +bionet.biology.vectors +bionet.biophysics +bionet.celegans +bionet.cellbiol +bionet.cellbiol.cytonet +bionet.cellbiol.insulin +bionet.chlamydomonas +bionet.diagnostics +bionet.diagnostics.prenatal +bionet.drosophila +bionet.ecology.physiology +bionet.emf-bio +bionet.general +bionet.genome.arabidopsis +bionet.genome.autosequencing +bionet.genome.chromosomes +bionet.genome.gene-structure +bionet.genomes.markers +bionet.glycosci +bionet.immunology +bionet.info-theory +bionet.jobs +bionet.jobs.offered +bionet.jobs.wanted +bionet.journals.contents +bionet.journals.letters.biotechniques +bionet.journals.letters.tibs +bionet.journals.note +bionet.maize +bionet.metabolic-reg +bionet.microbiology +bionet.microbiology.biofilms +bionet.molbio.ageing +bionet.molbio.bio-matrix +bionet.molbio.embldatabank +bionet.molbio.evolution +bionet.molbio.gdb +bionet.molbio.genbank +bionet.molbio.genbank.updates +bionet.molbio.gene-linkage +bionet.molbio.genearrays +bionet.molbio.genome-program +bionet.molbio.hiv +bionet.molbio.methds-reagnts +bionet.molbio.molluscs +bionet.molbio.proteins +bionet.molbio.proteins.7tms_r +bionet.molbio.proteins.fluorescent +bionet.molbio.rapd +bionet.molbio.recombination +bionet.molbio.yeast +bionet.molec-model +bionet.molecules.free-radicals +bionet.molecules.p450 +bionet.molecules.peptides +bionet.molecules.repertoires +bionet.mycology +bionet.neuroscience +bionet.neuroscience.amyloid +bionet.organisms.pseudomonas +bionet.organisms.schistosoma +bionet.organisms.urodeles +bionet.organisms.zebrafish +bionet.parasitology +bionet.photosynthesis +bionet.plants +bionet.plants.education +bionet.plants.signaltransduc +bionet.population-bio +bionet.prof-society.afcr +bionet.prof-society.aibs +bionet.prof-society.biophysics +bionet.prof-society.cfbs +bionet.prof-society.csm +bionet.prof-society.navbo +bionet.protista +bionet.sci-resources +bionet.software +bionet.software.acedb +bionet.software.gcg +bionet.software.pc +bionet.software.sources +bionet.software.srs +bionet.software.staden +bionet.software.www +bionet.software.x-plor +bionet.structural-nmr +bionet.toxicology +bionet.users.addresses +bionet.virology +bionet.women-in-bio +bionet.xtallography +birmingham.misc +bit.admin +bit.databases.mssql-l +bit.general +bit.lang.neder-l +bit.listproc.stockphoto +bit.listserv.2000ad-l +bit.listserv.3com-l +bit.listserv.9370-l +bit.listserv.ada-law +bit.listserv.advise-l +bit.listserv.aect-l +bit.listserv.aera +bit.listserv.aix-l +bit.listserv.albanian +bit.listserv.allmusic +bit.listserv.arlis-l +bit.listserv.ashe-l +bit.listserv.asis-l +bit.listserv.asm370 +bit.listserv.atlas-l +bit.listserv.authorware +bit.listserv.autism +bit.listserv.autocat +bit.listserv.axslib-l +bit.listserv.banyan-l +bit.listserv.basque-l +bit.listserv.berita +bit.listserv.berita.d +bit.listserv.bgrass-l +bit.listserv.big-lan +bit.listserv.billing +bit.listserv.biomch-l +bit.listserv.bisexu-l +bit.listserv.blindnws +bit.listserv.blues-l +bit.listserv.bosnet +bit.listserv.buslib-l +bit.listserv.c370-l +bit.listserv.calc-ti +bit.listserv.candle-l +bit.listserv.catala +bit.listserv.catholic +bit.listserv.celiac +bit.listserv.cfs.newsletter +bit.listserv.christia +bit.listserv.cics-l +bit.listserv.cinema-l +bit.listserv.circplus +bit.listserv.clayart +bit.listserv.cloaks-daggers +bit.listserv.cmspip-l +bit.listserv.coco +bit.listserv.commodor +bit.listserv.confocal +bit.listserv.conyers +bit.listserv.croatia +bit.listserv.cumrec-l +bit.listserv.cw-email +bit.listserv.cwis-l +bit.listserv.cyber-l +bit.listserv.dasig +bit.listserv.db2-l +bit.listserv.deaf-l +bit.listserv.dectei-l +bit.listserv.devel-l +bit.listserv.devmedia +bit.listserv.disarm-l +bit.listserv.dorothyl +bit.listserv.down-syn +bit.listserv.dsshe-l +bit.listserv.e-europe +bit.listserv.easi +bit.listserv.edi-l +bit.listserv.edpolyan +bit.listserv.edtech +bit.listserv.edusig-l +bit.listserv.envbeh-l +bit.listserv.ethics-l +bit.listserv.euearn-l +bit.listserv.fnord-l +bit.listserv.frac-l +bit.listserv.free-l +bit.listserv.freemasonry +bit.listserv.games-l +bit.listserv.gaynet +bit.listserv.gddm-l +bit.listserv.geodesic +bit.listserv.geograph +bit.listserv.govdoc-l +bit.listserv.graph-ti +bit.listserv.hdesk-l +bit.listserv.helix-l +bit.listserv.hellas +bit.listserv.help-net +bit.listserv.history +bit.listserv.hrvatska +bit.listserv.humage-l +bit.listserv.hungary +bit.listserv.hytel-l +bit.listserv.i-amiga +bit.listserv.ibm-hesc +bit.listserv.ibm-main +bit.listserv.ibmtcp-l +bit.listserv.idms-l +bit.listserv.idmsappl-l +bit.listserv.imagelib +bit.listserv.innopac +bit.listserv.ioob-l +bit.listserv.ipct-l +bit.listserv.iso9000 +bit.listserv.ispf-l +bit.listserv.japan +bit.listserv.jes2-l +bit.listserv.jnet-l +bit.listserv.l-hcap +bit.listserv.l-vmctr +bit.listserv.labmgr +bit.listserv.lawsch-l +bit.listserv.lawsch.internships +bit.listserv.liaison +bit.listserv.libref-l +bit.listserv.libres +bit.listserv.linkfail +bit.listserv.lis-l +bit.listserv.literary +bit.listserv.lsoft-announce +bit.listserv.mail-l +bit.listserv.mailbook +bit.listserv.makedon +bit.listserv.mba-l +bit.listserv.mbu-l +bit.listserv.mdphd-l +bit.listserv.medforum +bit.listserv.medlib-l +bit.listserv.mexico-l +bit.listserv.mideur-l +bit.listserv.mla-l +bit.listserv.movie.memorabilia +bit.listserv.museum-l +bit.listserv.muslims +bit.listserv.nettrain +bit.listserv.new-list +bit.listserv.nodmgt-l +bit.listserv.notis-l +bit.listserv.novell +bit.listserv.nppa-l +bit.listserv.opers-l +bit.listserv.os2-l +bit.listserv.pacs-l +bit.listserv.page-l +bit.listserv.pagemakr +bit.listserv.pakistan +bit.listserv.pchealth +bit.listserv.pmail +bit.listserv.pmdf-l +bit.listserv.pns-l +bit.listserv.politics +bit.listserv.postcard +bit.listserv.powerh-l +bit.listserv.psycgrad +bit.listserv.quaker-p +bit.listserv.quality +bit.listserv.qualrs-l +bit.listserv.radio-l +bit.listserv.railroad +bit.listserv.rcath-l +bit.listserv.relusr-l +bit.listserv.rra-l +bit.listserv.rscs-l +bit.listserv.rscsmods +bit.listserv.screen-l +bit.listserv.script-l +bit.listserv.scuba-l +bit.listserv.seasia-l +bit.listserv.seds-l +bit.listserv.sfs-l +bit.listserv.sganet +bit.listserv.simula +bit.listserv.skeptic +bit.listserv.skywarn +bit.listserv.slart-l +bit.listserv.slovak-l +bit.listserv.snamgt-l +bit.listserv.snurse-l +bit.listserv.sos-data +bit.listserv.spires-l +bit.listserv.sportpsy +bit.listserv.sqlinfo +bit.listserv.superguy +bit.listserv.tbi-support +bit.listserv.techwr-l +bit.listserv.tesl-l +bit.listserv.test +bit.listserv.tn3270-l +bit.listserv.toolb-l +bit.listserv.transplant +bit.listserv.travel-l +bit.listserv.tsorexx +bit.listserv.urep-l +bit.listserv.vfort-l +bit.listserv.vm-util +bit.listserv.vmesa-l +bit.listserv.vmxa-l +bit.listserv.vnews-l +bit.listserv.vocnet +bit.listserv.vpiej-l +bit.listserv.vse-l +bit.listserv.wac-l +bit.listserv.words-l +bit.listserv.wpcorp-l +bit.listserv.wpwin-l +bit.listserv.www-vm +bit.listserv.wx-chase +bit.listserv.wx-talk +bit.listserv.x400-l +bit.listserv.xedit-l +bit.listserv.xmailer +bit.listserv.xtropy-l +bit.mailing-list.cni-copyright +bit.mailing-list.net-happenings +bit.mailserv.word-pc +bit.med.mxdiag-l +bit.med.resp-care.world +bit.org.peace-corps +bit.sci.purposive-behavior +bit.tech.africana +biz +biz.americast +biz.americast.samples +biz.books +biz.books.technical +biz.caucus +biz.clarinet +biz.clarinet.sample +biz.clarinet.web.sample +biz.clarinet.web.xcache.large +biz.clarinet.web.xcache.small +biz.clarinet.webnews.biz +biz.clarinet.webnews.living +biz.clarinet.webnews.sports +biz.clarinet.webnews.techwire +biz.clarinet.webnews.top +biz.clarinet.webnews.usa +biz.clarinet.webnews.world +biz.comp +biz.comp.accounting +biz.comp.hardware +biz.comp.jobs.offered +biz.comp.mcs +biz.comp.misc +biz.comp.services +biz.comp.software +biz.comp.software.demos +biz.comp.telebit +biz.comp.telebit.netblazer +biz.config +biz.control +biz.dec.ip +biz.dec.workstations +biz.digex.announce +biz.digital.announce +biz.digital.articles +biz.ecommerce +biz.entrepreneurs +biz.general +biz.generalbiz.marketplace.non-computer +biz.healthcare +biz.jobs +biz.jobs.offered +biz.market.misc +biz.marketplace +biz.marketplace.comptuers +biz.marketplace.comptuers.workstation +biz.marketplace.computers +biz.marketplace.computers.discussion +biz.marketplace.computers.mac +biz.marketplace.computers.other +biz.marketplace.computers.pc-clone +biz.marketplace.computers.workstation +biz.marketplace.discussion +biz.marketplace.international +biz.marketplace.international.discussion +biz.marketplace.investors +biz.marketplace.non-computer +biz.marketplace.real-estate +biz.marketplace.services +biz.marketplace.services.computers +biz.marketplace.services.discussion +biz.marketplace.services.non-computer +biz.marketplace.web-design +biz.marketplaces +biz.misc +biz.mlm +biz.newgroup +biz.newprod +biz.next +biz.next.newprod +biz.oreilly.announce +biz.pagesat +biz.pagesat.weather +biz.sco +biz.sco.general +biz.stolen +biz.tadpole.sparcbook +biz.test +biz.tpm +biz.univel +biz.univel.misc +biz.zeos +biz.zeos.general +blgtn.arts +blgtn.business +blgtn.cohorts +blgtn.education +blgtn.forsale +blgtn.government +borland.public.attachments +borland.public.bde +borland.public.bes.appserver.console-ddeditor +borland.public.bes.appserver.ejb-cmp +borland.public.bes.appserver.transactions-jdbc-connectors +borland.public.bes.visibroker +borland.public.codecentral +borland.public.conference +borland.public.corba +borland.public.cpp.borlandcpp +borland.public.cpp.commandlinetools +borland.public.cpp.ide +borland.public.cpp.jobs +borland.public.cpp.language +borland.public.cpp.non-technical +borland.public.cpp.owl +borland.public.cpp.thirdpartytools +borland.public.cpp.winapi +borland.public.cppbuilder.activex +borland.public.cppbuilder.commandlinetools +borland.public.cppbuilder.database +borland.public.cppbuilder.database.ado +borland.public.cppbuilder.database.desktop +borland.public.cppbuilder.database.interbaseexpress +borland.public.cppbuilder.database.sqlservers +borland.public.cppbuilder.graphics +borland.public.cppbuilder.ide +borland.public.cppbuilder.internet +borland.public.cppbuilder.jobs +borland.public.cppbuilder.language +borland.public.cppbuilder.non-technical +borland.public.cppbuilder.students +borland.public.cppbuilder.thirdpartytools +borland.public.cppbuilder.upgrade +borland.public.cppbuilder.vcl +borland.public.cppbuilder.vcl.components.using +borland.public.cppbuilder.vcl.components.writing +borland.public.cppbuilder.winapi +borland.public.datagateway +borland.public.datasnap +borland.public.delphi +borland.public.delphi.activex.controls.using +borland.public.delphi.activex.controls.writing +borland.public.delphi.basm +borland.public.delphi.clx.components.using +borland.public.delphi.clx.components.writing +borland.public.delphi.database +borland.public.delphi.database.ado +borland.public.delphi.database.desktop +borland.public.delphi.database.interbaseexpress +borland.public.delphi.database.multi-tier +borland.public.delphi.database.sqlservers +borland.public.delphi.deployment +borland.public.delphi.graphics +borland.public.delphi.ide +borland.public.delphi.internationalization +borland.public.delphi.internet +borland.public.delphi.internet.isapi-webbroker +borland.public.delphi.internet.websnap +borland.public.delphi.internet.winsock +borland.public.delphi.jobs +borland.public.delphi.non-technical +borland.public.delphi.objectpascal +borland.public.delphi.oleautomation +borland.public.delphi.oodesign +borland.public.delphi.opentoolsapi +borland.public.delphi.reporting-charting +borland.public.delphi.rtl +borland.public.delphi.students +borland.public.delphi.thirdparty-tools +borland.public.delphi.vcl.components.using +borland.public.delphi.vcl.components.writing +borland.public.delphi.webservices.soap +borland.public.delphi.winapi +borland.public.delphi.xml +borland.public.install.bcpp +borland.public.install.cppbuilder +borland.public.install.delphi +borland.public.install.intrabuilder +borland.public.install.jbuilder +borland.public.install.kylix +borland.public.install.vdbase +borland.public.interbase.general +borland.public.interbase.ibconsole +borland.public.interbase.opensource +borland.public.intrabuilder.forms +borland.public.intrabuilder.javascript +borland.public.intrabuilder.jobs +borland.public.intrabuilder.server +borland.public.jbuilder.applet-issues +borland.public.jbuilder.compiler +borland.public.jbuilder.corba-rmi +borland.public.jbuilder.database +borland.public.jbuilder.debugger +borland.public.jbuilder.deployment +borland.public.jbuilder.documentation +borland.public.jbuilder.enterprise +borland.public.jbuilder.ide +borland.public.jbuilder.java +borland.public.jbuilder.java.api +borland.public.jbuilder.java.language +borland.public.jbuilder.java.swing +borland.public.jbuilder.javabeans.using +borland.public.jbuilder.javabeans.writing +borland.public.jbuilder.jbcl +borland.public.jbuilder.jdatastore +borland.public.jbuilder.jobs +borland.public.jbuilder.linux +borland.public.jbuilder.macintosh +borland.public.jbuilder.multi-lingual-apps +borland.public.jbuilder.non-technical +borland.public.jbuilder.opentools +borland.public.jbuilder.servlets-jsp +borland.public.jbuilder.students +borland.public.jbuilder.team-development +borland.public.jbuilder.thirdpartytools +borland.public.jbuilder.xml +borland.public.kylix.clx.components.using +borland.public.kylix.database.dbexpress +borland.public.kylix.ide +borland.public.kylix.internet.web +borland.public.kylix.jobs +borland.public.kylix.non-technical +borland.public.kylix.thirdpartytools +borland.public.off-topic +borland.public.tasm +borland.public.test +borland.public.turbopascal +borland.public.vdbase.16bit +borland.public.vdbase.data.bde +borland.public.vdbase.data.sql +borland.public.vdbase.deployment +borland.public.vdbase.forms +borland.public.vdbase.non-technical +borland.public.vdbase.non_windows +borland.public.vdbase.programming +borland.public.vdbase.reports +boulder.ads +boulder.general +boulder.pk +boulder.test +business +business.misc +business.multi-level +byu.news +c20.0056 +ca.answers +ca.driving +ca.earthquakes +ca.environment +ca.environment.earthquakes +ca.forsale +ca.forsale.misc +ca.general +ca.jobs +ca.news +ca.news.group +ca.politics +ca.san-jose.jobs +ca.seminars +ca.test +ca.unix +ca.usenet +ca.wanted +ca.water +cableinet.cable_modems +cableinet.chatter +cakewalk.audio +cakewalk.beginners +cakewalk.coffeehouse +cakewalk.general +calgary.announce +cam.announce +cam.misc +cam.net.announce +cam.sug +cam.test +cam.transport +can.ai +can.arts.sf +can.atlantic.biz +can.atlantic.forsale +can.atlantic.general +can.aviation.misc +can.aviation.rgs +can.canet.stats +can.com.ad-agencies +can.com.misc +can.community.asian +can.community.military +can.config +can.construction +can.consumers +can.domain +can.english +can.foresale +can.forsale +can.general +can.gov.announce +can.infobahn +can.infohighway +can.internet.highspeed +can.jobs +can.jobs.gov +can.legal +can.med.misc +can.media.radio +can.military-brats +can.motss +can.newprod +can.org.cata +can.org.cips +can.org.cusen +can.org.misc +can.politics +can.rec.boating +can.rec.fishing +can.rec.hunting +can.rsc.discussion.etudiants +can.schoolnet +can.schoolnet.arts.drama +can.schoolnet.chat.students +can.schoolnet.chat.teachers +can.schoolnet.chem.jr +can.schoolnet.chem.sr +can.schoolnet.firefighters +can.schoolnet.phys.jr +can.schoolnet.phys.sr +can.schoolnet.projects.discuss +can.scout-guide +can.shad-valley +can.sun-stroke +can.talk +can.talk.bilingualism +can.talk.guns +can.talk.smoking +can.taxes +can.test +can.travel.citc +can.university.grad +can.usrgroup +can.uucp +can.uucp.maps +can.vlsi +canb.general +capdist.admin +capdist.announce +capdist.general +capdist.misc +capdist.seminars +capdist.test +cbd.awards +cbd.procurements +cc.general +ccc.battletech +chip.gry +chip.hardware +chip.software +christnet.admin +christnet.bible +christnet.bible.revelation +christnet.christianlife +christnet.christnews +christnet.ethics +christnet.evangelical +christnet.general +christnet.healing.herbs +christnet.ladies +christnet.philosophy +christnet.poetry +christnet.prayer +christnet.religion +christnet.theology +christnet.writers +clari.biz.briefs +clari.biz.currencies +clari.biz.currencies.euro +clari.biz.currencies.misc +clari.biz.currencies.us_dollar +clari.biz.earnings +clari.biz.earnings.releases +clari.biz.economy +clari.biz.economy.usa +clari.biz.economy.world +clari.biz.features +clari.biz.front_page +clari.biz.headlines +clari.biz.industry +clari.biz.industry.agriculture +clari.biz.industry.agriculture.releases +clari.biz.industry.automotive +clari.biz.industry.automotive.cbd +clari.biz.industry.automotive.releases +clari.biz.industry.aviation +clari.biz.industry.aviation.releases +clari.biz.industry.banking +clari.biz.industry.banking.releases +clari.biz.industry.conglomerates +clari.biz.industry.construction.cbd.acquisition +clari.biz.industry.construction.cbd.architect+eng +clari.biz.industry.construction.cbd.architecteng +clari.biz.industry.construction.cbd.hardware +clari.biz.industry.construction.cbd.maintenance +clari.biz.industry.construction.cbd.misc +clari.biz.industry.construction.cbd.supplies +clari.biz.industry.energy +clari.biz.industry.energy.releases +clari.biz.industry.food +clari.biz.industry.food.cbd +clari.biz.industry.food.releases +clari.biz.industry.food.retail.releases +clari.biz.industry.health +clari.biz.industry.health.care +clari.biz.industry.health.care.releases +clari.biz.industry.health.cbd +clari.biz.industry.health.pharma +clari.biz.industry.health.pharma.releases +clari.biz.industry.household +clari.biz.industry.household.cbd +clari.biz.industry.information.cbd +clari.biz.industry.insurance +clari.biz.industry.insurance.releases +clari.biz.industry.machinery +clari.biz.industry.machinery.cbd.components +clari.biz.industry.machinery.cbd.engines +clari.biz.industry.machinery.cbd.misc +clari.biz.industry.manufacturing.releases +clari.biz.industry.media +clari.biz.industry.media.entertainment +clari.biz.industry.media.entertainment.releases +clari.biz.industry.media.releases +clari.biz.industry.metals+mining +clari.biz.industry.metals+mining.cbd +clari.biz.industry.metalsmining +clari.biz.industry.metalsmining.cbd +clari.biz.industry.misc +clari.biz.industry.misc.cbd.electric +clari.biz.industry.misc.cbd.equip_maint +clari.biz.industry.misc.cbd.equip_services +clari.biz.industry.misc.cbd.housekeeping +clari.biz.industry.misc.cbd.lab_supplies +clari.biz.industry.misc.cbd.management +clari.biz.industry.misc.cbd.misc_services +clari.biz.industry.misc.cbd.misc_supplies +clari.biz.industry.misc.cbd.research +clari.biz.industry.misc.cbd.studies +clari.biz.industry.misc.releases +clari.biz.industry.others +clari.biz.industry.retail +clari.biz.industry.retail.releases +clari.biz.industry.textiles +clari.biz.industry.textiles.cbd +clari.biz.industry.transportation +clari.biz.industry.transportation.cbd +clari.biz.industry.transportation.releases +clari.biz.industry.travel+leisure.cbd +clari.biz.industry.travel+leisure.releases +clari.biz.industry.travelleisure.cbd +clari.biz.industry.travelleisure.releases +clari.biz.industry.utilities +clari.biz.market.commodities +clari.biz.market.commodities.agricultural +clari.biz.market.commodities.misc +clari.biz.market.misc +clari.biz.mergers +clari.biz.mergers.releases +clari.biz.misc +clari.biz.misc.releases +clari.biz.personnel.releases +clari.biz.privatization +clari.biz.stocks +clari.biz.stocks.corporate_news +clari.biz.stocks.dividend.releases +clari.biz.stocks.report.asia +clari.biz.stocks.report.elsewhere +clari.biz.stocks.report.europe.eastern +clari.biz.stocks.report.europe.western +clari.biz.stocks.report.top +clari.biz.stocks.report.usa +clari.biz.stocks.report.usa.misc +clari.biz.stocks.report.usa.nyse +clari.biz.top +clari.biz.tradeshows.releases +clari.biz.world_trade +clari.editorial.cartoons.toles +clari.editorial.cartoons.worldviews +clari.editorial.commentary.misc +clari.editorial.commentary.political +clari.editorial.essays +clari.feature.dave_barry +clari.feature.dilbert +clari.feature.experimental +clari.feature.forbetter +clari.feature.mike_royko +clari.hot.a +clari.hot.b +clari.hot.c +clari.hot.d +clari.hot.e +clari.hot.f +clari.hot.g +clari.hot.h +clari.hot.i +clari.hot.j +clari.hot.k +clari.hot.l +clari.hot.m +clari.hot.n +clari.hot.o +clari.living +clari.living.animals +clari.living.arts +clari.living.bizarre +clari.living.books +clari.living.celebrities +clari.living.columns.joebob +clari.living.columns.lipton +clari.living.columns.miss_manners +clari.living.comics.bizarro +clari.living.comics.cafe_angst +clari.living.comics.doonesbury +clari.living.comics.forbetter +clari.living.comics.foxtrot +clari.living.comics.ozone_patrol +clari.living.consumer +clari.living.entertainment +clari.living.entertainment.briefs +clari.living.entertainment.misc +clari.living.fashion +clari.living.history +clari.living.history.today +clari.living.human_interest +clari.living.leisure +clari.living.misc +clari.living.movies +clari.living.music +clari.living.royalty +clari.living.top +clari.living.tv +clari.local.alabama +clari.local.alaska +clari.local.arizona +clari.local.arkansas +clari.local.california.briefs +clari.local.california.gov +clari.local.california.los_angeles +clari.local.california.lottery +clari.local.california.misc +clari.local.california.northern +clari.local.california.sfbay.biz +clari.local.california.sfbay.briefs +clari.local.california.sfbay.crime +clari.local.california.sfbay.education +clari.local.california.sfbay.fire +clari.local.california.sfbay.gov +clari.local.california.sfbay.health +clari.local.california.sfbay.law +clari.local.california.sfbay.living +clari.local.california.sfbay.misc +clari.local.california.sfbay.transport +clari.local.california.sfbay.transport.conditions +clari.local.california.sfbay.trouble +clari.local.california.sfbay.weather +clari.local.california.southern +clari.local.california.southern.misc +clari.local.colorado +clari.local.connecticut +clari.local.delaware +clari.local.florida +clari.local.georgia +clari.local.hawaii +clari.local.idaho +clari.local.illinois.chicago +clari.local.illinois.misc +clari.local.indiana +clari.local.iowa +clari.local.kansas +clari.local.kentucky +clari.local.louisiana +clari.local.maine +clari.local.maryland +clari.local.massachusetts +clari.local.michigan +clari.local.minnesota +clari.local.mississippi +clari.local.missouri +clari.local.montana +clari.local.nebraska +clari.local.nevada +clari.local.new_hampshire +clari.local.new_jersey +clari.local.new_mexico +clari.local.new_york.misc +clari.local.new_york.nyc +clari.local.north_carolina +clari.local.north_dakota +clari.local.ohio +clari.local.oklahoma +clari.local.oregon +clari.local.pennsylvania +clari.local.rhode_island +clari.local.south_carolina +clari.local.south_dakota +clari.local.tennessee +clari.local.texas +clari.local.utah +clari.local.vermont +clari.local.washington +clari.local.west_virginia +clari.local.wisconsin +clari.local.wyoming +clari.net.admin +clari.net.announce +clari.net.info +clari.net.newusers +clari.net.newusers.group_info.edu +clari.net.newusers.group_info.four-star +clari.net.newusers.group_info.three-star +clari.net.newusers.group_info.two-star +clari.net.talk +clari.news.aging +clari.news.blacks +clari.news.briefs +clari.news.childrn+family +clari.news.childrnfamily +clari.news.conflict +clari.news.conflict.misc +clari.news.conflict.peace_talks +clari.news.conflict.peacekeeping +clari.news.corruption +clari.news.crime +clari.news.crime.abductions +clari.news.crime.assaults +clari.news.crime.general +clari.news.crime.hate +clari.news.crime.juvenile +clari.news.crime.misc +clari.news.crime.murders +clari.news.crime.murders.misc +clari.news.crime.murders.political +clari.news.crime.organized +clari.news.crime.sex +clari.news.crime.theft +clari.news.crime.top +clari.news.crime.war +clari.news.disabilities +clari.news.education +clari.news.education.higher +clari.news.education.misc +clari.news.education.releases +clari.news.features +clari.news.flash +clari.news.front_page +clari.news.gays +clari.news.immigration +clari.news.immigration.misc +clari.news.issues +clari.news.issues.censorship +clari.news.issues.death_penalty +clari.news.issues.guns +clari.news.issues.human_rights +clari.news.issues.misc +clari.news.issues.poverty +clari.news.issues.reproduction +clari.news.issues.smoking +clari.news.jews +clari.news.labor +clari.news.labor.employment +clari.news.labor.misc +clari.news.labor.strike +clari.news.law_enforce +clari.news.minorities +clari.news.minorities.misc +clari.news.misc.releases +clari.news.obituaries +clari.news.photos +clari.news.protests +clari.news.refugees +clari.news.religion +clari.news.sex +clari.news.trouble +clari.news.trouble.accidents +clari.news.trouble.disaster +clari.news.trouble.misc +clari.news.usa.terrorism +clari.news.weather +clari.news.women +clari.sports.baseball +clari.sports.baseball.major +clari.sports.baseball.major.al.games +clari.sports.baseball.major.al.stats +clari.sports.baseball.major.nl.games +clari.sports.baseball.major.nl.stats +clari.sports.baseball.minor +clari.sports.basketball +clari.sports.basketball.college +clari.sports.basketball.college.men +clari.sports.basketball.college.men.games +clari.sports.basketball.college.men.stats +clari.sports.basketball.college.women +clari.sports.basketball.minor +clari.sports.basketball.nba +clari.sports.basketball.nba.games +clari.sports.basketball.nba.stats +clari.sports.bowling +clari.sports.boxing +clari.sports.briefs +clari.sports.championships +clari.sports.features +clari.sports.football +clari.sports.football.cfl +clari.sports.football.college +clari.sports.football.college.games +clari.sports.football.college.stats +clari.sports.football.nfl +clari.sports.football.nfl.games +clari.sports.football.nfl.stats +clari.sports.golf +clari.sports.hockey +clari.sports.hockey.ahl +clari.sports.hockey.ihl +clari.sports.hockey.nhl +clari.sports.hockey.nhl.games +clari.sports.hockey.nhl.stats +clari.sports.horse_racing +clari.sports.local.canada.atlantic_provs +clari.sports.local.canada.brit_columbia +clari.sports.local.canada.eastern +clari.sports.local.canada.ontario +clari.sports.local.canada.ontario.misc +clari.sports.local.canada.ontario.toronto +clari.sports.local.canada.prairie_provs +clari.sports.local.canada.quebec +clari.sports.local.mid-atlantic.new_jersey +clari.sports.local.mid-atlantic.new_york +clari.sports.local.mid-atlantic.new_york.nyc +clari.sports.local.mid-atlantic.pennsylvania +clari.sports.local.mid-atlantic.pennsylvania.philadelphia +clari.sports.local.midwest +clari.sports.local.midwest.illinois +clari.sports.local.midwest.indiana +clari.sports.local.midwest.michigan +clari.sports.local.midwest.minnesota +clari.sports.local.midwest.misc +clari.sports.local.midwest.missouri +clari.sports.local.midwest.ohio +clari.sports.local.midwest.wisconsin +clari.sports.local.new_england +clari.sports.local.new_england.connecticut +clari.sports.local.new_england.massachusetts +clari.sports.local.new_england.misc +clari.sports.local.northwest +clari.sports.local.northwest.misc +clari.sports.local.northwest.washington +clari.sports.local.south +clari.sports.local.south.florida +clari.sports.local.south.florida.miami +clari.sports.local.south.florida.misc +clari.sports.local.south.florida.tampa_bay +clari.sports.local.south.georgia +clari.sports.local.south.maryland +clari.sports.local.south.maryland+dc +clari.sports.local.south.marylanddc +clari.sports.local.south.north_carolina +clari.sports.local.south.washington_dc +clari.sports.local.southwest +clari.sports.local.southwest.arizona +clari.sports.local.southwest.california +clari.sports.local.southwest.california.los_angeles +clari.sports.local.southwest.california.sfbay +clari.sports.local.southwest.colorado +clari.sports.local.southwest.misc +clari.sports.local.southwest.texas.dallas-fw +clari.sports.local.southwest.texas.misc +clari.sports.local.southwest.utah +clari.sports.misc +clari.sports.motor +clari.sports.olympic +clari.sports.others +clari.sports.photos +clari.sports.releases +clari.sports.schedules +clari.sports.skiing +clari.sports.soccer +clari.sports.tennis +clari.sports.top +clari.usa.briefs +clari.usa.gov +clari.usa.gov.briefs +clari.usa.gov.general +clari.usa.gov.misc +clari.usa.gov.personalities +clari.usa.gov.policy.biz +clari.usa.gov.policy.financial +clari.usa.gov.policy.foreign +clari.usa.gov.policy.foreign.mideast +clari.usa.gov.policy.foreign.misc +clari.usa.gov.policy.misc +clari.usa.gov.policy.social +clari.usa.gov.politics +clari.usa.gov.releases +clari.usa.gov.state+local +clari.usa.gov.white_house +clari.usa.hot.election.clinton +clari.usa.hot.election.congress +clari.usa.hot.election.dole +clari.usa.law +clari.usa.law.misc +clari.usa.law.supreme +clari.usa.military +clari.usa.misc +clari.usa.politics +clari.usa.politics.personalities +clari.usa.terrorism +clari.usa.top +clari.web.biz.currencies.euro +clari.web.editorial.essays +clari.web.hot.a +clari.web.hot.b +clari.web.hot.c +clari.web.hot.d +clari.web.hot.e +clari.web.hot.f +clari.web.hot.g +clari.web.hot.h +clari.web.hot.i +clari.web.hot.j +clari.web.hot.k +clari.web.hot.l +clari.web.hot.m +clari.web.hot.n +clari.web.hot.o +clari.web.living.top +clari.web.sports.olympic +clari.web.sports.skiing +clari.web.world.gov.politics.personalities +clari.world.africa.eastern +clari.world.africa.northwestern +clari.world.africa.south_africa +clari.world.africa.southern +clari.world.africa.western +clari.world.americas +clari.world.americas.argentina +clari.world.americas.brazil +clari.world.americas.canada +clari.world.americas.canada.biz +clari.world.americas.canada.briefs +clari.world.americas.canada.general +clari.world.americas.caribbean +clari.world.americas.central +clari.world.americas.meso +clari.world.americas.mexico +clari.world.americas.peru +clari.world.americas.south +clari.world.americas.south.misc +clari.world.asia+oceania +clari.world.asia.central +clari.world.asia.central+south +clari.world.asia.centralsouth +clari.world.asia.china +clari.world.asia.china.biz +clari.world.asia.hong_kong +clari.world.asia.india +clari.world.asia.indochina +clari.world.asia.indochina.misc +clari.world.asia.japan +clari.world.asia.japan.biz +clari.world.asia.koreas +clari.world.asia.philippines +clari.world.asia.south +clari.world.asia.southeast +clari.world.asia.taiwan +clari.world.asia.vietnam +clari.world.briefs +clari.world.europe +clari.world.europe.alpine +clari.world.europe.balkans +clari.world.europe.benelux +clari.world.europe.british_isles +clari.world.europe.british_isles.biz +clari.world.europe.british_isles.ireland +clari.world.europe.british_isles.uk +clari.world.europe.british_isles.uk.biz +clari.world.europe.british_isles.uk.n-ireland +clari.world.europe.central +clari.world.europe.eastern +clari.world.europe.france +clari.world.europe.france.biz +clari.world.europe.germany +clari.world.europe.germany.biz +clari.world.europe.greece +clari.world.europe.iberia +clari.world.europe.italy +clari.world.europe.northern +clari.world.europe.russia +clari.world.europe.union +clari.world.gov.budgets +clari.world.gov.intl.relations +clari.world.gov.intl_relations +clari.world.gov.politics +clari.world.gov.politics.personalities +clari.world.law +clari.world.mideast +clari.world.mideast+africa +clari.world.mideast.arabia +clari.world.mideast.egypt +clari.world.mideast.iran +clari.world.mideast.iraq +clari.world.mideast.israel +clari.world.mideast.kuwait +clari.world.mideast.misc +clari.world.mideast.palestine +clari.world.mideast.turkey +clari.world.military +clari.world.oceania +clari.world.oceania.australia +clari.world.oceania.new_zealand +clari.world.organizations +clari.world.organizations.misc +clari.world.organizations.un +clari.world.organizations.un.conferences +clari.world.terrorism +clari.world.top +co.general +co.jobs +co.test +codewarrior.embedded +codewarrior.games +codewarrior.linux +codewarrior.mac +codewarrior.palm +codewarrior.unix +codewarrior.windows +combustion.general.discussion +comp.admin.policy +comp.ai +comp.ai.alife +comp.ai.doc-analysis.misc +comp.ai.doc-analysis.ocr +comp.ai.edu +comp.ai.fuzzy +comp.ai.games +comp.ai.genetic +comp.ai.jair.announce +comp.ai.jair.papers +comp.ai.nat-lang +comp.ai.neural-nets +comp.ai.nlang-know-rep +comp.ai.philosophy +comp.ai.shells +comp.ai.vision +comp.answers +comp.apps.spreadsheets +comp.arch +comp.arch.arithmetic +comp.arch.bus.vmebus +comp.arch.embedded +comp.arch.embedded.picbasic +comp.arch.embedded.piclist +comp.arch.fpga +comp.arch.hobbyist +comp.arch.storage +comp.archives +comp.archives.admin +comp.archives.ms-windows.announce +comp.archives.ms-windows.discuss +comp.archives.msdos.announce +comp.archives.msdos.d +comp.benchmarks +comp.binaries.acorn +comp.binaries.amiga +comp.binaries.apple2 +comp.binaries.cbm +comp.binaries.geos +comp.binaries.ibm.pc +comp.binaries.ibm.pc.d +comp.binaries.ibm.pc.wanted +comp.binaries.mac +comp.binaries.ms-windows +comp.binaries.newton +comp.binaries.os2 +comp.binaries.psion +comp.bugs.2bsd +comp.bugs.4bsd +comp.bugs.4bsd.ucb-fixes +comp.bugs.misc +comp.bugs.sys5 +comp.cad +comp.cad.autocad +comp.cad.cadence +comp.cad.compass +comp.cad.i-deas +comp.cad.microstation +comp.cad.microstation.programmer +comp.cad.pro-engineer +comp.cad.solidworks +comp.cad.synthesis +comp.client-server +comp.cog-eng +comp.compilers +comp.compilers.lcc +comp.compilers.tools +comp.compilers.tools.javacc +comp.compilers.tools.pccts +comp.compression +comp.compression.research +comp.constraints +comp.data.administration +comp.database +comp.database.ms-access +comp.database.oracle +comp.databases +comp.databases.adabas +comp.databases.btrieve +comp.databases.filemaker +comp.databases.gupta +comp.databases.ibm-db2 +comp.databases.informix +comp.databases.ingres +comp.databases.ms-access +comp.databases.ms-sqlserver +comp.databases.object +comp.databases.olap +comp.databases.oracle +comp.databases.oracle.marketplace +comp.databases.oracle.misc +comp.databases.oracle.server +comp.databases.oracle.tools +comp.databases.paradox +comp.databases.pick +comp.databases.postgresql.admin +comp.databases.postgresql.bugs +comp.databases.postgresql.docs +comp.databases.postgresql.general +comp.databases.postgresql.hackers +comp.databases.postgresql.interfaces +comp.databases.postgresql.interfaces.jdbc +comp.databases.postgresql.interfaces.php +comp.databases.postgresql.novice +comp.databases.postgresql.patches +comp.databases.postgresql.ports.cygwin +comp.databases.postgresql.questions +comp.databases.postgresql.sql +comp.databases.progress +comp.databases.rdb +comp.databases.revelation +comp.databases.sybase +comp.databases.theory +comp.databases.visual-dbase +comp.databases.xbase.codebase +comp.databases.xbase.fox +comp.databases.xbase.misc +comp.dcom.cabling +comp.dcom.cell-relay +comp.dcom.fax +comp.dcom.frame-relay +comp.dcom.isdn +comp.dcom.isdn.capi +comp.dcom.lans.ethernet +comp.dcom.lans.fddi +comp.dcom.lans.hyperchannel +comp.dcom.lans.misc +comp.dcom.lans.novell +comp.dcom.lans.token-ring +comp.dcom.modem +comp.dcom.modems +comp.dcom.modems.cable +comp.dcom.net-analysis +comp.dcom.net-management +comp.dcom.sdh-sonet +comp.dcom.servers +comp.dcom.sys.bay-networks +comp.dcom.sys.cisco +comp.dcom.sys.nortel +comp.dcom.sys.wellfleet +comp.dcom.telecom +comp.dcom.telecom.tech +comp.dcom.videoconf +comp.dcom.voice-over-ip +comp.dcom.vpn +comp.dcom.wan +comp.dcom.xdsl +comp.doc.management +comp.doc.techreports +comp.dsp +comp.editors +comp.edu +comp.edu.composition +comp.edu.languages.natural +comp.emacs +comp.emacs.xemacs +comp.emulators +comp.emulators.announce +comp.emulators.apple2 +comp.emulators.cbm +comp.emulators.freemware +comp.emulators.game-consoles +comp.emulators.mac.executor +comp.emulators.misc +comp.emulators.ms-windows.wine +comp.fonts +comp.forsale +comp.forsale.computer +comp.forsale.computers +comp.forsale.computers.mac +comp.forsale.computers.wanted +comp.forsale.hardware +comp.games.development.art +comp.games.development.audio +comp.games.development.design +comp.games.development.industry +comp.games.development.programming.algorithms +comp.games.development.programming.misc +comp.graphics +comp.graphics.algorithms +comp.graphics.animation +comp.graphics.api.inventor +comp.graphics.api.misc +comp.graphics.api.opengl +comp.graphics.api.pexlib +comp.graphics.apps.alias +comp.graphics.apps.avs +comp.graphics.apps.cinema4d +comp.graphics.apps.corel +comp.graphics.apps.data-explorer +comp.graphics.apps.freehand +comp.graphics.apps.gimp +comp.graphics.apps.gnuplot +comp.graphics.apps.iris-explorer +comp.graphics.apps.lightwave +comp.graphics.apps.pagemaker +comp.graphics.apps.paint-shop-pro +comp.graphics.apps.photoshop +comp.graphics.apps.softimage +comp.graphics.apps.ulead +comp.graphics.apps.wavefront +comp.graphics.misc +comp.graphics.opengl +comp.graphics.packages.3dstudio +comp.graphics.packages.lightwave +comp.graphics.raytracing +comp.graphics.rendering.misc +comp.graphics.rendering.raytracing +comp.graphics.rendering.renderman +comp.graphics.visualization +comp.groupware +comp.groupware.groupwise +comp.groupware.lotus-notes +comp.groupware.lotus-notes.admin +comp.groupware.lotus-notes.apps +comp.groupware.lotus-notes.misc +comp.groupware.lotus-notes.programmer +comp.hackers +comp.hardware +comp.home.automation +comp.home.misc +comp.human-factors +comp.ibm +comp.ibm.pc.hardware +comp.infosystems +comp.infosystems.announce +comp.infosystems.gis +comp.infosystems.gopher +comp.infosystems.harvest +comp.infosystems.hyperg +comp.infosystems.interpedia +comp.infosystems.intranet +comp.infosystems.kiosks +comp.infosystems.search +comp.infosystems.wais +comp.infosystems.www.advocacy +comp.infosystems.www.announce +comp.infosystems.www.authoring +comp.infosystems.www.authoring.cgi +comp.infosystems.www.authoring.html +comp.infosystems.www.authoring.images +comp.infosystems.www.authoring.misc +comp.infosystems.www.authoring.site-design +comp.infosystems.www.authoring.stylesheets +comp.infosystems.www.authoring.tools +comp.infosystems.www.browsers.mac +comp.infosystems.www.browsers.misc +comp.infosystems.www.browsers.ms-windows +comp.infosystems.www.browsers.x +comp.infosystems.www.databases +comp.infosystems.www.misc +comp.infosystems.www.servers +comp.infosystems.www.servers.mac +comp.infosystems.www.servers.misc +comp.infosystems.www.servers.ms-windows +comp.infosystems.www.servers.unix +comp.internet.library +comp.internet.net-happenings +comp.ivideodisc +comp.job +comp.jobs +comp.jobs.computer +comp.jobs.computers +comp.jobs.contract +comp.jobs.misc +comp.jobs.offered +comp.jobs.programming +comp.lang.JavaScript +comp.lang.ada +comp.lang.apl +comp.lang.asm +comp.lang.asm.x86 +comp.lang.asm370 +comp.lang.awk +comp.lang.basic.misc +comp.lang.basic.powerbasic +comp.lang.basic.realbasic +comp.lang.basic.visual +comp.lang.basic.visual.3rdparty +comp.lang.basic.visual.announce +comp.lang.basic.visual.database +comp.lang.basic.visual.misc +comp.lang.beta +comp.lang.c +comp.lang.c++ +comp.lang.c++.leda +comp.lang.c++.moderated +comp.lang.c.moderated +comp.lang.clarion +comp.lang.clipper +comp.lang.clipper.visual-objects +comp.lang.clos +comp.lang.clu +comp.lang.cobol +comp.lang.dylan +comp.lang.eiffel +comp.lang.forth +comp.lang.forth.mac +comp.lang.fortran +comp.lang.functional +comp.lang.hermes +comp.lang.icon +comp.lang.idl +comp.lang.idl-pvwave +comp.lang.java +comp.lang.java.3d +comp.lang.java.advocacy +comp.lang.java.announce +comp.lang.java.api +comp.lang.java.beans +comp.lang.java.corba +comp.lang.java.databases +comp.lang.java.developer +comp.lang.java.gui +comp.lang.java.help +comp.lang.java.javascript +comp.lang.java.machine +comp.lang.java.misc +comp.lang.java.programmer +comp.lang.java.security +comp.lang.java.setup +comp.lang.java.softwaretools +comp.lang.java.tech +comp.lang.javascript +comp.lang.labview +comp.lang.limbo +comp.lang.lisp +comp.lang.lisp.franz +comp.lang.lisp.mcl +comp.lang.lisp.x +comp.lang.logo +comp.lang.misc +comp.lang.ml +comp.lang.modula2 +comp.lang.modula3 +comp.lang.mumps +comp.lang.oberon +comp.lang.objective-c +comp.lang.pascal +comp.lang.pascal.ansi-iso +comp.lang.pascal.borland +comp.lang.pascal.delphi +comp.lang.pascal.delphi.advocacy +comp.lang.pascal.delphi.announce +comp.lang.pascal.delphi.components +comp.lang.pascal.delphi.components.misc +comp.lang.pascal.delphi.components.usage +comp.lang.pascal.delphi.components.writing +comp.lang.pascal.delphi.databases +comp.lang.pascal.delphi.misc +comp.lang.pascal.mac +comp.lang.pascal.misc +comp.lang.perl +comp.lang.perl.announce +comp.lang.perl.misc +comp.lang.perl.moderated +comp.lang.perl.modules +comp.lang.perl.tk +comp.lang.pl1 +comp.lang.pop +comp.lang.postscript +comp.lang.prograph +comp.lang.prolog +comp.lang.python +comp.lang.python.announce +comp.lang.rexx +comp.lang.ruby +comp.lang.sather +comp.lang.scheme +comp.lang.scheme.c +comp.lang.scheme.scsh +comp.lang.smalltalk +comp.lang.smalltalk.advocacy +comp.lang.smalltalk.dolphin +comp.lang.tcl +comp.lang.tcl.announce +comp.lang.verilog +comp.lang.vhdl +comp.lang.visual +comp.lang.visual.basic +comp.lang.vrml +comp.languages.visual-basic +comp.laptops +comp.laser-printers +comp.lsi +comp.lsi.cad +comp.lsi.testing +comp.mac.misc +comp.mail.elm +comp.mail.eudora +comp.mail.eudora.mac +comp.mail.eudora.ms-windows +comp.mail.headers +comp.mail.imap +comp.mail.list-admin.policy +comp.mail.list-admin.software +comp.mail.mh +comp.mail.mime +comp.mail.misc +comp.mail.multi-media +comp.mail.mush +comp.mail.mutt +comp.mail.pegasus-mail.misc +comp.mail.pegasus-mail.ms-windows +comp.mail.pine +comp.mail.sendmail +comp.mail.smail +comp.mail.uucp +comp.mail.zmail +comp.misc +comp.misc.forsale +comp.modems +comp.msdos +comp.msdos.programmer +comp.multimedia +comp.music +comp.music.cd +comp.music.midi +comp.music.misc +comp.music.research +comp.networks +comp.networks.noctools.announce +comp.networks.noctools.bugs +comp.networks.noctools.d +comp.networks.noctools.submissions +comp.networks.noctools.tools +comp.networks.noctools.wanted +comp.newprod +comp.next.marketplace +comp.object +comp.object.corba +comp.object.logic +comp.object.moderated +comp.org.acm +comp.org.cauce +comp.org.cpsr.announce +comp.org.cpsr.talk +comp.org.decus +comp.org.eff.news +comp.org.eff.talk +comp.org.fidonet +comp.org.ieee +comp.org.isoc.interest +comp.org.issnnet +comp.org.lisp-users +comp.org.sug +comp.org.team-os2 +comp.org.uniforum +comp.org.usenix +comp.org.usenix.roomshare +comp.org.user-groups.apcug +comp.org.user-groups.management +comp.org.user-groups.meetings +comp.org.user-groups.misc +comp.org.user-groups.newsletters +comp.os.aos +comp.os.chorus +comp.os.coherent +comp.os.cpm +comp.os.cpm.amethyst +comp.os.geos.misc +comp.os.geos.programmer +comp.os.inferno +comp.os.lantastic +comp.os.linux +comp.os.linux.admin +comp.os.linux.advocacy +comp.os.linux.alpha +comp.os.linux.announce +comp.os.linux.answers +comp.os.linux.development +comp.os.linux.development.apps +comp.os.linux.development.system +comp.os.linux.embedded +comp.os.linux.hardware +comp.os.linux.help +comp.os.linux.m68k +comp.os.linux.misc +comp.os.linux.network +comp.os.linux.networking +comp.os.linux.portable +comp.os.linux.powerpc +comp.os.linux.questions +comp.os.linux.redhat +comp.os.linux.security +comp.os.linux.setup +comp.os.linux.x +comp.os.lynx +comp.os.mach +comp.os.magic-cap +comp.os.minix +comp.os.misc +comp.os.ms-windows +comp.os.ms-windows.advocacy +comp.os.ms-windows.announce +comp.os.ms-windows.apps +comp.os.ms-windows.apps.comm +comp.os.ms-windows.apps.compatibility.win95 +comp.os.ms-windows.apps.financial +comp.os.ms-windows.apps.misc +comp.os.ms-windows.apps.utilities +comp.os.ms-windows.apps.utilities.win3x +comp.os.ms-windows.apps.utilities.win95 +comp.os.ms-windows.apps.winsock.mail +comp.os.ms-windows.apps.winsock.misc +comp.os.ms-windows.apps.winsock.news +comp.os.ms-windows.apps.word-proc +comp.os.ms-windows.ce +comp.os.ms-windows.misc +comp.os.ms-windows.networking +comp.os.ms-windows.networking.misc +comp.os.ms-windows.networking.ras +comp.os.ms-windows.networking.tcp-ip +comp.os.ms-windows.networking.win95 +comp.os.ms-windows.networking.windows +comp.os.ms-windows.nt +comp.os.ms-windows.nt.admin +comp.os.ms-windows.nt.admin.misc +comp.os.ms-windows.nt.admin.networking +comp.os.ms-windows.nt.admin.networks +comp.os.ms-windows.nt.admin.security +comp.os.ms-windows.nt.advocacy +comp.os.ms-windows.nt.announce +comp.os.ms-windows.nt.misc +comp.os.ms-windows.nt.pre-release +comp.os.ms-windows.nt.setup +comp.os.ms-windows.nt.setup.hardware +comp.os.ms-windows.nt.setup.misc +comp.os.ms-windows.nt.software +comp.os.ms-windows.nt.software.backoffice +comp.os.ms-windows.nt.software.compatibility +comp.os.ms-windows.nt.software.services +comp.os.ms-windows.pre-release +comp.os.ms-windows.programmer +comp.os.ms-windows.programmer.controls +comp.os.ms-windows.programmer.drivers +comp.os.ms-windows.programmer.graphics +comp.os.ms-windows.programmer.memory +comp.os.ms-windows.programmer.misc +comp.os.ms-windows.programmer.multimedia +comp.os.ms-windows.programmer.networks +comp.os.ms-windows.programmer.nt +comp.os.ms-windows.programmer.nt.kernel-mode +comp.os.ms-windows.programmer.ole +comp.os.ms-windows.programmer.tools.mfc +comp.os.ms-windows.programmer.tools.misc +comp.os.ms-windows.programmer.tools.owl +comp.os.ms-windows.programmer.tools.winsock +comp.os.ms-windows.programmer.vxd +comp.os.ms-windows.programmer.win32 +comp.os.ms-windows.programmer.winhelp +comp.os.ms-windows.setup +comp.os.ms-windows.setup.win3x +comp.os.ms-windows.setup.win95 +comp.os.ms-windows.video +comp.os.ms-windows.win95 +comp.os.ms-windows.win95.misc +comp.os.ms-windows.win95.moderated +comp.os.ms-windows.win95.registry +comp.os.ms-windows.win95.setup +comp.os.msdos +comp.os.msdos.4dos +comp.os.msdos.apps +comp.os.msdos.desqview +comp.os.msdos.djgpp +comp.os.msdos.mail-news +comp.os.msdos.misc +comp.os.msdos.programmer +comp.os.msdos.programmer.turbovision +comp.os.netware +comp.os.netware.announce +comp.os.netware.connectivity +comp.os.netware.misc +comp.os.netware.security +comp.os.os2 +comp.os.os2.advocacy +comp.os.os2.announce +comp.os.os2.apps +comp.os.os2.beta +comp.os.os2.bugs +comp.os.os2.comm +comp.os.os2.games +comp.os.os2.mail-news +comp.os.os2.marketplace +comp.os.os2.misc +comp.os.os2.moderated +comp.os.os2.multimedia +comp.os.os2.networking.misc +comp.os.os2.networking.server +comp.os.os2.networking.tcp-ip +comp.os.os2.networking.www +comp.os.os2.programmer.misc +comp.os.os2.programmer.oop +comp.os.os2.programmer.porting +comp.os.os2.programmer.tools +comp.os.os2.scitech +comp.os.os2.setup +comp.os.os2.setup.misc +comp.os.os2.setup.storage +comp.os.os2.setup.video +comp.os.os2.utilities +comp.os.os9 +comp.os.parix +comp.os.plan9 +comp.os.psos +comp.os.qnx +comp.os.research +comp.os.rsts +comp.os.tpf +comp.os.v +comp.os.vms +comp.os.vxworks +comp.os.xinu +comp.parallel +comp.parallel.mpi +comp.parallel.pvm +comp.patents +comp.periphs +comp.periphs.printers +comp.periphs.scanners +comp.periphs.scsi +comp.programming +comp.programming.contests +comp.programming.literate +comp.programming.threads +comp.protocols.appletalk +comp.protocols.dicom +comp.protocols.dns.bind +comp.protocols.dns.ops +comp.protocols.dns.std +comp.protocols.ibm +comp.protocols.iso +comp.protocols.iso.dev-environ +comp.protocols.iso.x400 +comp.protocols.iso.x400.gateway +comp.protocols.kerberos +comp.protocols.kermit.announce +comp.protocols.kermit.misc +comp.protocols.misc +comp.protocols.nfs +comp.protocols.novell +comp.protocols.pcnet +comp.protocols.ppp +comp.protocols.smb +comp.protocols.snmp +comp.protocols.tcp-ip +comp.protocols.tcp-ip.domains +comp.protocols.tcp-ip.ibmpc +comp.protocols.time.ntp +comp.publish.cdrom +comp.publish.cdrom.hardware +comp.publish.cdrom.multimedia +comp.publish.cdrom.software +comp.publish.electronic.developer +comp.publish.electronic.end-user +comp.publish.electronic.misc +comp.publish.prepress +comp.realtime +comp.research.japan +comp.risks +comp.robotics +comp.robotics.misc +comp.robotics.research +comp.security +comp.security.announce +comp.security.firewalls +comp.security.gss-api +comp.security.misc +comp.security.pgp +comp.security.pgp.announce +comp.security.pgp.discuss +comp.security.pgp.resources +comp.security.pgp.tech +comp.security.pgp.test +comp.security.ssh +comp.security.unix +comp.sex +comp.simulation +comp.society +comp.society.cu-digest +comp.society.development +comp.society.folklore +comp.society.futures +comp.society.privacy +comp.society.women +comp.soft-sys.ace +comp.soft-sys.andrew +comp.soft-sys.app-builder.appware +comp.soft-sys.app-builder.dynasty +comp.soft-sys.app-builder.forte +comp.soft-sys.app-builder.uniface +comp.soft-sys.business.sap +comp.soft-sys.dce +comp.soft-sys.gis.esri +comp.soft-sys.khoros +comp.soft-sys.math.maple +comp.soft-sys.math.mathematica +comp.soft-sys.math.scilab +comp.soft-sys.matlab +comp.soft-sys.middleware.bea-tuxedo +comp.soft-sys.middleware.opendoc +comp.soft-sys.nextstep +comp.soft-sys.powerbuilder +comp.soft-sys.powerbuilder.webdevelopment +comp.soft-sys.ptolemy +comp.soft-sys.sas +comp.soft-sys.shazam +comp.soft-sys.stat.spss +comp.soft-sys.stat.systat +comp.soft-sys.wxwindows +comp.software +comp.software-eng +comp.software.arabic +comp.software.config-mgmt +comp.software.extreme-programming +comp.software.international +comp.software.licensing +comp.software.measurement +comp.software.patterns +comp.software.shareware.announce +comp.software.shareware.authors +comp.software.shareware.users +comp.software.testing +comp.software.year-2000 +comp.software.year-2000.tech +comp.sources.acorn +comp.sources.amiga +comp.sources.apple2 +comp.sources.bugs +comp.sources.d +comp.sources.delphi +comp.sources.games +comp.sources.games.bugs +comp.sources.hp48 +comp.sources.mac +comp.sources.misc +comp.sources.postscript +comp.sources.reviewed +comp.sources.sun +comp.sources.testers +comp.sources.unix +comp.sources.wanted +comp.sources.x +comp.specification.larch +comp.specification.misc +comp.specification.z +comp.speech +comp.speech.research +comp.speech.users +comp.std.announce +comp.std.c +comp.std.c++ +comp.std.internat +comp.std.lisp +comp.std.misc +comp.std.unix +comp.std.wireless +comp.sw.components +comp.sys +comp.sys.3b1 +comp.sys.acorn.advocacy +comp.sys.acorn.announce +comp.sys.acorn.apps +comp.sys.acorn.extra-cpu +comp.sys.acorn.games +comp.sys.acorn.hardware +comp.sys.acorn.misc +comp.sys.acorn.networking +comp.sys.acorn.programmer +comp.sys.aix +comp.sys.alliant +comp.sys.amiga +comp.sys.amiga.advocacy +comp.sys.amiga.announce +comp.sys.amiga.applications +comp.sys.amiga.audio +comp.sys.amiga.cd32 +comp.sys.amiga.datacomm +comp.sys.amiga.emulations +comp.sys.amiga.games +comp.sys.amiga.graphics +comp.sys.amiga.hardware +comp.sys.amiga.introduction +comp.sys.amiga.marketplace +comp.sys.amiga.misc +comp.sys.amiga.morphos +comp.sys.amiga.multimedia +comp.sys.amiga.networking +comp.sys.amiga.pirate +comp.sys.amiga.programmer +comp.sys.amiga.reviews +comp.sys.amiga.uucp +comp.sys.amstrad.8bit +comp.sys.apollo +comp.sys.apple +comp.sys.apple2 +comp.sys.apple2.comm +comp.sys.apple2.gno +comp.sys.apple2.marketplace +comp.sys.apple2.programmer +comp.sys.apple2.usergroups +comp.sys.arm +comp.sys.atari.8bit +comp.sys.atari.advocacy +comp.sys.atari.announce +comp.sys.atari.programmer +comp.sys.atari.st +comp.sys.atari.st.tech +comp.sys.att +comp.sys.be.advocacy +comp.sys.be.announce +comp.sys.be.help +comp.sys.be.misc +comp.sys.be.programmer +comp.sys.cbm +comp.sys.cdc +comp.sys.computers.marketplace +comp.sys.concurrent +comp.sys.convex +comp.sys.dec +comp.sys.dec.micro +comp.sys.encore +comp.sys.handhelds +comp.sys.harris +comp.sys.hp +comp.sys.hp.apps +comp.sys.hp.hardware +comp.sys.hp.hpux +comp.sys.hp.misc +comp.sys.hp.mpe +comp.sys.hp48 +comp.sys.ibm.as400 +comp.sys.ibm.as400.misc +comp.sys.ibm.hardware +comp.sys.ibm.pc-hardware +comp.sys.ibm.pc.classic +comp.sys.ibm.pc.demos +comp.sys.ibm.pc.digest +comp.sys.ibm.pc.games +comp.sys.ibm.pc.games.action +comp.sys.ibm.pc.games.adventure +comp.sys.ibm.pc.games.announce +comp.sys.ibm.pc.games.flight-sim +comp.sys.ibm.pc.games.marketplace +comp.sys.ibm.pc.games.misc +comp.sys.ibm.pc.games.naval +comp.sys.ibm.pc.games.rpg +comp.sys.ibm.pc.games.space-sim +comp.sys.ibm.pc.games.sports +comp.sys.ibm.pc.games.strategic +comp.sys.ibm.pc.games.war-historical +comp.sys.ibm.pc.hardware +comp.sys.ibm.pc.hardware.cd-rom +comp.sys.ibm.pc.hardware.chips +comp.sys.ibm.pc.hardware.comm +comp.sys.ibm.pc.hardware.misc +comp.sys.ibm.pc.hardware.networking +comp.sys.ibm.pc.hardware.storage +comp.sys.ibm.pc.hardware.systems +comp.sys.ibm.pc.hardware.video +comp.sys.ibm.pc.misc +comp.sys.ibm.pc.programmer +comp.sys.ibm.pc.rt +comp.sys.ibm.pc.software +comp.sys.ibm.pc.soundcard +comp.sys.ibm.pc.soundcard.advocacy +comp.sys.ibm.pc.soundcard.games +comp.sys.ibm.pc.soundcard.misc +comp.sys.ibm.pc.soundcard.music +comp.sys.ibm.pc.soundcard.tech +comp.sys.ibm.pc.soundcards +comp.sys.ibm.ps2 +comp.sys.ibm.ps2.hardware +comp.sys.ibm.sys3x.misc +comp.sys.intel +comp.sys.intel.ipsc310 +comp.sys.intergraph +comp.sys.isis +comp.sys.lang.c++ +comp.sys.laptops +comp.sys.m6809 +comp.sys.m68k +comp.sys.m88k +comp.sys.mac +comp.sys.mac.advocacy +comp.sys.mac.announce +comp.sys.mac.apps +comp.sys.mac.comm +comp.sys.mac.databases +comp.sys.mac.digest +comp.sys.mac.forsale +comp.sys.mac.games.action +comp.sys.mac.games.adventure +comp.sys.mac.games.announce +comp.sys.mac.games.flight-sim +comp.sys.mac.games.marketplace +comp.sys.mac.games.misc +comp.sys.mac.games.strategic +comp.sys.mac.general +comp.sys.mac.graphics +comp.sys.mac.hardware +comp.sys.mac.hardware.misc +comp.sys.mac.hardware.storage +comp.sys.mac.hardware.video +comp.sys.mac.hypercard +comp.sys.mac.misc +comp.sys.mac.oop.macapp3 +comp.sys.mac.oop.misc +comp.sys.mac.oop.powerplant +comp.sys.mac.oop.tcl +comp.sys.mac.portables +comp.sys.mac.powerpc +comp.sys.mac.printing +comp.sys.mac.programmer.codewarrior +comp.sys.mac.programmer.games +comp.sys.mac.programmer.help +comp.sys.mac.programmer.info +comp.sys.mac.programmer.misc +comp.sys.mac.programmer.tools +comp.sys.mac.scitech +comp.sys.mac.system +comp.sys.mac.wanted +comp.sys.mac.wantedmisc.forsale.computers.mac +comp.sys.macintosh +comp.sys.mentor +comp.sys.mips +comp.sys.misc +comp.sys.msx +comp.sys.ncr +comp.sys.net-computer.advocacy +comp.sys.net-computer.announce +comp.sys.net-computer.misc +comp.sys.newton +comp.sys.newton.announce +comp.sys.newton.marketplace +comp.sys.newton.misc +comp.sys.newton.programmer +comp.sys.next.advocacy +comp.sys.next.announce +comp.sys.next.bugs +comp.sys.next.hardware +comp.sys.next.marketplace +comp.sys.next.misc +comp.sys.next.programmer +comp.sys.next.software +comp.sys.next.sysadmin +comp.sys.northstar +comp.sys.novell +comp.sys.nsc.32k +comp.sys.oric +comp.sys.palmtops +comp.sys.palmtops.pilot +comp.sys.pen +comp.sys.powerpc.advocacy +comp.sys.powerpc.misc +comp.sys.powerpc.tech +comp.sys.prime +comp.sys.proteon +comp.sys.psion +comp.sys.psion.announce +comp.sys.psion.apps +comp.sys.psion.comm +comp.sys.psion.marketplace +comp.sys.psion.misc +comp.sys.psion.programmer +comp.sys.psion.reviews +comp.sys.pyramid +comp.sys.ridge +comp.sys.sequent +comp.sys.sgi.admin +comp.sys.sgi.announce +comp.sys.sgi.apps +comp.sys.sgi.audio +comp.sys.sgi.bugs +comp.sys.sgi.graphics +comp.sys.sgi.hardware +comp.sys.sgi.marketplace +comp.sys.sgi.misc +comp.sys.sinclair +comp.sys.stratus +comp.sys.sun.admin +comp.sys.sun.announce +comp.sys.sun.apps +comp.sys.sun.hardware +comp.sys.sun.misc +comp.sys.sun.wanted +comp.sys.super +comp.sys.tahoe +comp.sys.tandem +comp.sys.tandy +comp.sys.ti +comp.sys.ti.explorer +comp.sys.transputer +comp.sys.unisys +comp.sys.wearables +comp.sys.xerox +comp.sys.zenith +comp.sys.zenith.z100 +comp.terminals +comp.terminals.bitgraph +comp.terminals.tty5620 +comp.test +comp.text +comp.text.desktop +comp.text.frame +comp.text.interleaf +comp.text.pdf +comp.text.sgml +comp.text.tex +comp.text.xml +comp.theory +comp.theory.cell-automata +comp.theory.dynamic-sys +comp.theory.info-retrieval +comp.theory.self-org-sys +comp.unix +comp.unix.admin +comp.unix.advocacy +comp.unix.aix +comp.unix.amiga +comp.unix.aux +comp.unix.bsd.386bsd.announce +comp.unix.bsd.386bsd.misc +comp.unix.bsd.bsdi.announce +comp.unix.bsd.bsdi.misc +comp.unix.bsd.freebsd +comp.unix.bsd.freebsd.announce +comp.unix.bsd.freebsd.misc +comp.unix.bsd.misc +comp.unix.bsd.netbsd.announce +comp.unix.bsd.netbsd.misc +comp.unix.bsd.openbsd.announce +comp.unix.bsd.openbsd.misc +comp.unix.cde +comp.unix.cray +comp.unix.dos-under-unix +comp.unix.internals +comp.unix.large +comp.unix.machten +comp.unix.misc +comp.unix.msdos +comp.unix.osf.misc +comp.unix.osf.osf1 +comp.unix.pc-clone.16bit +comp.unix.pc-clone.32bit +comp.unix.programmer +comp.unix.questions +comp.unix.sco +comp.unix.sco.announce +comp.unix.sco.misc +comp.unix.sco.programmer +comp.unix.shell +comp.unix.shell.misc +comp.unix.solaris +comp.unix.sys3 +comp.unix.sys5.misc +comp.unix.sys5.r3 +comp.unix.sys5.r4 +comp.unix.tru64 +comp.unix.ultrix +comp.unix.unixware.announce +comp.unix.unixware.misc +comp.unix.user-friendly +comp.unix.xenix +comp.unix.xenix.misc +comp.unix.xenix.sco +comp.virus +comp.windows +comp.windows.garnet +comp.windows.interviews +comp.windows.misc +comp.windows.ms +comp.windows.ms.programmer +comp.windows.news +comp.windows.open-look +comp.windows.suit +comp.windows.ui-builders.teleuse +comp.windows.ui-builders.uimx +comp.windows.x +comp.windows.x.announce +comp.windows.x.apps +comp.windows.x.i386unix +comp.windows.x.intrinsics +comp.windows.x.kde +comp.windows.x.motif +comp.windows95.problem +conn.jobs +conn.jobs.offered +control +control.cancel +control.checkgroups +control.newgroup +control.rmgroup +control.sendsys +corel.general.chat +corel.international.dutch.wpoffice +corel.international.german.graphics +corel.support.wordperfect7 +corel.support.wordperfect8suite.wordperfect +corel.wpoffice.paradox-web +corel.wpoffice.paradox9 +corel.wpoffice.quattropro9 +corel.wpoffice.wordperfect10 +corel.wpoffice.wordperfect9 +coreldevelopers.draw +coreldevelopers.paradox +coreldevelopers.presentations +coreldevelopers.ventura +coreldevelopers.wordperfect +corelsupport.draw-script +corelsupport.draw3 +corelsupport.draw4 +corelsupport.draw5 +corelsupport.draw6 +corelsupport.draw6-mac +corelsupport.draw7 +corelsupport.draw8-draw +corelsupport.draw8-dream8 +corelsupport.draw8-import-export +corelsupport.draw8-install +corelsupport.draw8-other_apps +corelsupport.draw8-photo-paint +corelsupport.draw8-printing_scanning_color-management +corelsupport.gallery_magic +corelsupport.other +corelsupport.other.mac +corelsupport.paradox-dos +corelsupport.paradox8 +corelsupport.photo-paint5and6 +corelsupport.photo-paint7plus +corelsupport.printhouse +corelsupport.printhouse-magic +corelsupport.printhouse-photohouse +corelsupport.printoffice +corelsupport.ventura7 +corelsupport.ventura8 +corelsupport.web-other +corelsupport.webmastersuite-graphicsapps +corelsupport.webmastersuite-webdesigner +corelsupport.wordperfect7_16bit-other +corelsupport.wordperfect7_16bit-quattropro +corelsupport.wordperfect7_32bit +corelsupport.wordperfect7_32bit-other +corelsupport.wordperfect7_32bit-presentations +corelsupport.wordperfect7_32bit-quattropro +corelsupport.wordperfect8suite-corelcentral +corelsupport.wordperfect8suite-other +corelsupport.wordperfect8suite-presentations +corelsupport.wordperfect8suite-quattropro +corelsupport.wordperfect8suite-webpublishing +corelsupport.wordperfect8suite-wordperfect +corelsupport.wordperfectoffice2000-wordperfect_troubleshooting +corelsupport.wordperfectsuite-accessibility +corelsupport.wordperfectsuite-dictation +corelsupport.wordperfectsuite-international +corelsupport.wordperfectsuite-legal +corelsupport.wordperfectsuite-other +corelsupport.wordperfectsuite-sgml +corelsupport.xara +courts.usa +creative.products.dvd.encore +creative.products.nomad +creative.products.sound_blaster.audigy +creative.products.sound_blaster.live +creative.products.video_blaster.webcam +cyberenet.general +cybergate.miami +dal.general +dal.news +dal.test +dbase.bug-reports +dbase.dde-ole-dll-winapi +dbase.deutsch +dbase.dos +dbase.getting-started +dbase.install-config +dbase.internet +dbase.native-tables +dbase.portugues +dbase.programming +dbase.third-party-tools +dbase.version5 +dbase.watercooler +dbase.wishlist +dc.biking +dc.config +dc.dining +dc.driving +dc.forsale +dc.forsale.computers +dc.forsale.misc +dc.general +dc.housing +dc.jobs +dc.media +dc.music +dc.org.linux-users +dc.politics +dc.redskins +dc.romance +dc.smithsonian +dc.talk.guns +dc.test +dc.urban-planning +delaware.forsale +delaware.nerds +demon.adverts +demon.adverts.d +demon.announce +demon.answers +demon.archives.announce +demon.archives.d +demon.games +demon.homepages.adverts +demon.homepages.authoring +demon.ip.cppnews +demon.ip.developers +demon.ip.discoveries +demon.ip.support +demon.ip.support.amiga +demon.ip.support.archimedes +demon.ip.support.atari +demon.ip.support.ie4 +demon.ip.support.mac +demon.ip.support.newuser +demon.ip.support.nt +demon.ip.support.os2 +demon.ip.support.other +demon.ip.support.pc +demon.ip.support.pc.announce +demon.ip.support.turnpike +demon.ip.support.unix +demon.ip.support.win95 +demon.ip.winsock +demon.ip.winsock.dics +demon.ip.www +demon.local +demon.news +demon.pops +demon.sales +demon.sales.d +demon.security +demon.security.keys +demon.service +demon.service.homepages +demon.service.isdn +demon.tech.amiga +demon.tech.mac +demon.tech.modems +demon.tech.pc +demon.tech.unix +demon.test +demos.local.statistics +demoshield.support +denton.general +digital-metaphors.public.reportbuilder.datapipelines +digital-metaphors.public.reportbuilder.devices +digital-metaphors.public.reportbuilder.end-user +digital-metaphors.public.reportbuilder.general +digital-metaphors.public.reportbuilder.subreports +discussion.epoc.Java +discussion.epoc.hardware +disney.misc.forsale +disney.misc.general +dn.supers +dn.supers.disc +dod.jobs +donbass.anet.commerce +donbass.commerce +dorsai.helpdesk +dsl.banen +dsl.help +dsm.network +dwitten.general +earth.general +easynews.test +edit.general.discussion +ee.auto +ee.test +ernmc.firewall-1 +fa.alpha-osf-managers +fa.analytic-philosophy +fa.caml +fa.disney-comics +fa.eapls +fa.edupage +fa.fiction-of-philosophy +fa.firewall +fa.gaelic-l +fa.haskell +fa.hylafax +fa.iaido +fa.ietf-smtp +fa.info-cvs +fa.ingres +fa.linux.680x0 +fa.linux.debian +fa.linux.ibcs2 +fa.linux.kernel +fa.linux.sparc +fa.lout +fa.modesty-blaise +fa.music.ecto +fa.music.eddi-reader +fa.music.sugarcubes +fa.netbsd.bugs +fa.netbsd.current-users +fa.netbsd.help +fa.netbsd.ports.alpha +fa.netbsd.source-changes +fa.netbsd.tech.kern +fa.netbsd.tech.net +fa.netbsd.users +fa.openbsd.announce +fa.openbsd.source-changes +fa.openbsd.tech +fa.openbsd.www +fa.philos-l +fa.pro-cite +fa.psyche.d +fa.shogi +fa.sun-manager +fa.thinknet.autopoiesis +fa.typography +fido7.humor.filtered +fido7.ru.socionic +fido7.ru.syntone.club +fido7.ru.unix.bsd +fido7.ru.unix.prog +fido7.russian.z1 +fido7.su.c-cpp +fire.firefighters +firearms.ca +fishnet.users +fl.announce +fl.attractions +fl.biz +fl.config +fl.config.control +fl.environment +fl.forsale +fl.forsale.auto +fl.gardening +fl.general +fl.jobs +fl.jobs.computers +fl.jobs.computers.application +fl.jobs.computers.misc +fl.jobs.computers.programming +fl.jobs.misc +fl.jobs.resumes +fl.jobs.telecommute +fl.jobs.www +fl.mail +fl.media.radio +fl.media.tv +fl.news +fl.politics +fl.real-estate +fl.restaurant +fl.sources +fl.test +fl.travel +fl.uug +forsale +forum.centura.team.developer +forum.sqlbase +forum.sqlwindows +free.activism.walmart +free.adjective-army +free.advice +free.alex-brown.is.super-dooper +free.alex-brown.sucks +free.alex.boaretto +free.alt.config +free.alt.fan.gloria-estefan +free.alt.freedom.japan.repost +free.alt.freedom.japan.sm +free.alt.freedom.jbpe.gam +free.alt.iran.irc +free.americans.suck +free.answers +free.aquaria +free.arabic.friends +free.art.12hr +free.association +free.autos.alfa-romeo +free.autos.aston-martin +free.autos.audi +free.autos.bmw +free.autos.citroen +free.autos.ferrari +free.autos.honda +free.autos.jaguar +free.autos.lamborghini +free.autos.mazda +free.autos.mercedes-benz +free.autos.mg +free.autos.mitsubishi +free.autos.nissan +free.autos.porsche +free.autos.renault +free.autos.subaru +free.autos.tvr +free.baba.naga +free.beenz +free.beer +free.beer.tomorrow +free.bharat +free.binaries.first.one.so.there.nah.nah.nah.nah.nah +free.binaries.fullpost.magscans.collectors +free.binaries.software +free.biz.config +free.blurgh +free.bonehead.david-proctor +free.brian-baird +free.brookfield.connecticut.education +free.cacao.it +free.chicken.tika.masala +free.chicken.vindaloo +free.clinton.and.assholes.who.like.to.trash.him +free.clinton.bombed.sudan.afghanistan +free.clinton.china.scandals +free.clinton.fbi.files.blackmail +free.cobalt.raq2 +free.comics +free.comp +free.comp.dns +free.computertemple +free.control +free.correggio +free.country.usa +free.cthulhu +free.culture.asia +free.cyberpunk.literature +free.darkambient.italia +free.dick.morris.fans +free.discussioni.citta.genova +free.discussioni.terroni.merde +free.divx-sucks +free.dj.hmwb +free.dom +free.dom.amsterdam.contact.hetero +free.dom.amsterdam.contact.homo +free.dom.amsterdam.cool +free.dom.amsterdam.desperately-seeking +free.dom.amsterdam.for-sale +free.dom.amsterdam.singles +free.dom.litestep +free.dom.upc.general +free.dom.upc.sucks +free.dom.upc.telephone.helpdesk +free.dom.upc.tv +free.drugs +free.east-timor +free.ebooks-2000 +free.ebooks.emanuals +free.email +free.fan.abietto +free.fan.bisonontromba +free.fan.brunelleschi +free.fan.circusboy +free.fan.culo.cecchigori +free.fan.cuore +free.fan.free +free.fan.karl-malden.nose +free.fan.redwordsmith +free.fan.rupert-hangnail +free.fan.supreme-webmaster +free.fan.supreme-webmaster.bye.bye.bye +free.fan.topa +free.fanculo.gcn +free.fantozzi.filini.gay.confessi +free.fishface +free.footy +free.fr.config +free.fr.fan.cagoles +free.fr.homos.annonces +free.fr.rec.chasse.newbies +free.fr.rec.genealogie.logiciels +free.fr.rec.jeux.jdr.imw +free.fr.rec.sport.basketball +free.fr.satellite.tv.crypt +free.fr.sci.cogni.incognito +free.fr.test +free.free +free.free.free +free.free.free.free +free.free.not.free +free.free.stuff +free.fuckhead.jerry-brenner.grandma.stalk.stalk.stalk +free.fucking.erik-mouse.edmond-bunny.squeak.squeak.sqeak +free.fuckwit.scrappy +free.granturismo +free.grubor +free.hackers +free.hackers.italia +free.hackintosh +free.haggis +free.hetnet.algemeen +free.hetnet.hk +free.hetnet.vrouwen +free.hipcrime +free.hobby.fancazzismo +free.hobby.seghe +free.ie.auto.maintenance +free.ie.computers +free.ie.fishing +free.ie.gaeilge +free.ie.jobs +free.ie.martial-arts +free.ie.media.film +free.ie.music.bad-religion +free.ie.telecom.eircom +free.ie.telecom.esat +free.ie.tv.late-late-show +free.ie.tv.stations.rte +free.ie.tv.stations.tv3 +free.milwaukee +free.money +free.mumia +free.music.manics +free.music.misc +free.music.mixfreax +free.music.pink.floyd +free.music.richard-butler +free.music.rif +free.music.the-rabid-yaks +free.napster +free.naturism.wales +free.news.answers.why-free +free.nin +free.nudist +free.odps +free.pisshead.david-proctor +free.pokemon +free.politics.arena1 +free.porno +free.porno.flicks +free.pt +free.pt.gay +free.pt.gay-les-bi-tr.jovens +free.pt.lesbica +free.pt.transgender +free.radical +free.radish.therapy +free.rec.iran.kungfu-toa +free.rec.juggling +free.rock-n-roll +free.rumors +free.sardigna.trasportos +free.sci.config +free.sci.iran +free.sesso.tanto.sesso +free.sex +free.sex.bestiality.erik-mcdarby +free.sexfeed.com +free.shit +free.shopping.online +free.sinner +free.slack.bring.me.an.imac +free.slave +free.soc.config +free.soc.culture.english +free.software.proxomitron +free.spam +free.spirit +free.sport.alpinismo +free.sport.handball +free.sports.soccer +free.sports.soccer.english +free.sports.soccer.man-united +free.sports.soccer.scottish +free.talk.jr-state +free.talk.persian.politics +free.tanga.tv +free.test.prova.prova.prova +free.this-is-a-test +free.tibet +free.two.one.blast-off +free.two.one.contact +free.unclothed.chinese.kooks +free.us.co.denver +free.vanity.ashley-yakeley +free.w.la.padania.libera.e.federale +free.war.on.drugs +free.whales +free.your-mind +free.za +freebsd.questions +freeserve.announce +freeserve.chat +freeserve.discuss +freeserve.faq +freeserve.games.quake +freeserve.help.acorn +freeserve.help.amiga +freeserve.help.isdn +freeserve.help.mac +freeserve.help.misc +freeserve.help.modems +freeserve.help.unix +freeserve.help.webspace +freeserve.help.windows.browser +freeserve.help.windows.mail +freeserve.help.windows.misc +freeserve.help.windows.news +freeserve.webspace.announce +freeserve.webspace.authoring +fsu.freenet.kayaking +fsu.freenet.pubforum.miscellanea +fsu.freenet.scuba +fsu.freenet.senior +fsu.freenet.sig.writers +fsu.freenet.youth.discuss.christianity +fsu.freenet.youth.serious +fsu.freenet.youth.the.cafe +fsu.freenet.youth.the.gallery +fsu.weather +fub.general +fur.artwork.erotica +fur.comics +fur.stories.erotica +fur.stories.writers +fx.test +ga.atl-braves +ga.forsale +ga.general +ga.jobs +ga.motss +ga.test +gay-net +gay-net.aids +gay-net.allgemein +gay-net.artikel +gay-net.behinderte +gay-net.btx-ecke +gay-net.buchtips +gay-net.coming-out +gay-net.computer +gay-net.dfue +gay-net.diskussionen +gay-net.erotic-stories +gay-net.erotic-storys +gay-net.fundgrube +gay-net.general +gay-net.gruppen.general +gay-net.guide +gay-net.guide.bundesweit +gay-net.guide.weltweit +gay-net.haushalt +gay-net.heteros +gay-net.international +gay-net.labern +gay-net.lederecke +gay-net.lesben +gay-net.mailboxen +gay-net.medien +gay-net.recht +gay-net.spiele +gay-net.sprachen +gay-net.sysop-mail +gay-net.werbung +gay-net.witze +general +geometry.announcements +geometry.college +geometry.forum +geometry.institutes +geometry.pre-college +geometry.puzzles +geometry.research +geometry.software.dynamic +georgia.announce +gnu.announce +gnu.bash.bug +gnu.cfengine.bug +gnu.cfengine.help +gnu.chess +gnu.chess.bug +gnu.cvs.bug +gnu.cvs.help +gnu.emacs +gnu.emacs.announce +gnu.emacs.bug +gnu.emacs.gnews +gnu.emacs.gnus +gnu.emacs.help +gnu.emacs.sources +gnu.emacs.vm.bug +gnu.emacs.vm.info +gnu.emacs.vms +gnu.epoch.misc +gnu.g++.bug +gnu.g++.help +gnu.g++.lib.bug +gnu.gcc +gnu.gcc.announce +gnu.gcc.bug +gnu.gcc.help +gnu.gdb.bug +gnu.ghostscript.bug +gnu.glibc.bug +gnu.gnats.bug +gnu.gnusenet.config +gnu.gnusenet.test +gnu.gnustep.announce +gnu.gnustep.bug +gnu.gnustep.discuss +gnu.gnustep.help +gnu.groff.bug +gnu.misc.discuss +gnu.smalltalk.bug +gnu.utils.bug +gnu.utils.help +gnus.ding +gov.org.admin.financenet +gov.org.g7.announce +gov.org.g7.environment +gov.org.g7.misc +gov.topic.admin.finance.accounting +gov.topic.admin.finance.asset-liab-mgt +gov.topic.admin.finance.audits +gov.topic.admin.finance.budgeting +gov.topic.admin.finance.calendar +gov.topic.admin.finance.int-controls +gov.topic.admin.finance.misc +gov.topic.admin.finance.municipalities +gov.topic.admin.finance.news +gov.topic.admin.finance.payroll +gov.topic.admin.finance.perf-measures +gov.topic.admin.finance.policy +gov.topic.admin.finance.procurement +gov.topic.admin.finance.reporting +gov.topic.admin.finance.state-county +gov.topic.admin.finance.systems +gov.topic.admin.finance.training +gov.topic.admin.finance.travel-admin +gov.topic.admin.privatization +gov.topic.finance.banks +gov.topic.finance.securities +gov.topic.forsale.misc +gov.topic.info.systems.epub +gov.topic.info.systems.year2000 +gov.topic.telecom.announce +gov.topic.telecom.misc +gov.topic.transport.air +gov.topic.transport.misc +gov.topic.transport.navigation +gov.topic.transport.rail +gov.topic.transport.road +gov.topic.transport.shipping +gov.topic.transport.water +gov.us.fed.cia.announce +gov.us.fed.congress.announce +gov.us.fed.congress.bills.house +gov.us.fed.congress.bills.senate +gov.us.fed.congress.calendar.house +gov.us.fed.congress.calendar.senate +gov.us.fed.congress.discuss +gov.us.fed.congress.documents +gov.us.fed.congress.gao.announce +gov.us.fed.congress.gao.decisions +gov.us.fed.congress.gao.discuss +gov.us.fed.congress.gao.reports +gov.us.fed.congress.record.digest +gov.us.fed.congress.record.extensions +gov.us.fed.congress.record.house +gov.us.fed.congress.record.index +gov.us.fed.congress.record.senate +gov.us.fed.congress.reports +gov.us.fed.courts.announce +gov.us.fed.dhhs.announce +gov.us.fed.dhhs.fda.announce +gov.us.fed.dhhs.ssa.announce +gov.us.fed.doc.announce +gov.us.fed.doc.cbd.awards +gov.us.fed.doc.cbd.forsale +gov.us.fed.doc.cbd.notices +gov.us.fed.doc.cbd.solicitations +gov.us.fed.doc.cbd.standards +gov.us.fed.doc.census.announce +gov.us.fed.doc.noaa.announce +gov.us.fed.dod.announce +gov.us.fed.dod.army.announce +gov.us.fed.dod.army.reserve +gov.us.fed.dod.navy.announce +gov.us.fed.dod.usaf.announce +gov.us.fed.doe.announce +gov.us.fed.doi.announce +gov.us.fed.doj.announce +gov.us.fed.dol.announce +gov.us.fed.dot.announce +gov.us.fed.dot.faa.announce +gov.us.fed.dot.nhtsa.announce +gov.us.fed.dot.uscg.announce +gov.us.fed.ed.announce +gov.us.fed.eop.announce +gov.us.fed.eop.white-house.announce +gov.us.fed.epa.announce +gov.us.fed.fcc.announce +gov.us.fed.fdic.announce +gov.us.fed.fema.announce +gov.us.fed.ferc.announce +gov.us.fed.fmc.announce +gov.us.fed.frs.announce +gov.us.fed.gsa.announce +gov.us.fed.hud.announce +gov.us.fed.nara.announce +gov.us.fed.nara.fed-register.announce +gov.us.fed.nara.fed-register.authoring +gov.us.fed.nara.fed-register.contents +gov.us.fed.nara.fed-register.corrections +gov.us.fed.nara.fed-register.notices +gov.us.fed.nara.fed-register.presidential +gov.us.fed.nara.fed-register.proposed-rules +gov.us.fed.nara.fed-register.rules +gov.us.fed.nasa.announce +gov.us.fed.nasa.ksc.announce +gov.us.fed.nrc.announce +gov.us.fed.nsf.announce +gov.us.fed.nsf.documents +gov.us.fed.nsf.grants +gov.us.fed.opm.announce +gov.us.fed.sba.announce +gov.us.fed.sec.announce +gov.us.fed.state.announce +gov.us.fed.treasury.announce +gov.us.fed.treasury.irs.announce +gov.us.fed.usaid.announce +gov.us.fed.usaid.pib +gov.us.fed.usda.announce +gov.us.fed.va.announce +gov.us.org.admin.aga +gov.us.org.admin.fasab +gov.us.org.admin.gfoa +gov.us.org.info.ace +gov.us.org.info.ala +gov.us.topic.agri.farms +gov.us.topic.agri.food +gov.us.topic.agri.misc +gov.us.topic.agri.statistics +gov.us.topic.ecommerce.announce +gov.us.topic.ecommerce.misc +gov.us.topic.ecommerce.standards +gov.us.topic.emergency.alerts +gov.us.topic.emergency.misc +gov.us.topic.energy.misc +gov.us.topic.energy.nuclear +gov.us.topic.energy.utilities +gov.us.topic.environment.air +gov.us.topic.environment.announce +gov.us.topic.environment.misc +gov.us.topic.environment.toxics +gov.us.topic.environment.waste +gov.us.topic.environment.water +gov.us.topic.finance.banks +gov.us.topic.finance.securities +gov.us.topic.foreign.news +gov.us.topic.foreign.trade.leads +gov.us.topic.foreign.trade.misc +gov.us.topic.foreign.trade.statistics +gov.us.topic.gov-jobs.employee.issues +gov.us.topic.gov-jobs.employee.news +gov.us.topic.gov-jobs.hr-admin +gov.us.topic.gov-jobs.offered.admin +gov.us.topic.gov-jobs.offered.admin.finance +gov.us.topic.gov-jobs.offered.admin.ses +gov.us.topic.gov-jobs.offered.announce +gov.us.topic.gov-jobs.offered.clerical +gov.us.topic.gov-jobs.offered.engineering +gov.us.topic.gov-jobs.offered.foreign +gov.us.topic.gov-jobs.offered.health +gov.us.topic.gov-jobs.offered.law-enforce +gov.us.topic.gov-jobs.offered.math-comp +gov.us.topic.gov-jobs.offered.misc +gov.us.topic.gov-jobs.offered.questions +gov.us.topic.gov-jobs.offered.science +gov.us.topic.gov-jobs.offered.technical +gov.us.topic.grants.research +gov.us.topic.info.abstracts.cdrom +gov.us.topic.info.abstracts.epub +gov.us.topic.info.abstracts.infosystems +gov.us.topic.info.abstracts.print +gov.us.topic.info.libraries.govdocs +gov.us.topic.info.libraries.technology +gov.us.topic.info.policy.announce +gov.us.topic.info.policy.misc +gov.us.topic.law.pub-contract +gov.us.topic.nat-resources.forests +gov.us.topic.nat-resources.land +gov.us.topic.nat-resources.marine +gov.us.topic.nat-resources.minerals +gov.us.topic.nat-resources.oil-gas +gov.us.topic.nat-resources.parks +gov.us.topic.nat-resources.wildlife +gov.us.topic.statistics.announce +gov.us.topic.statistics.reports +gov.us.topic.telecom.announce +gov.us.topic.telecom.misc +gov.us.topic.transport.air +gov.us.topic.transport.misc +gov.us.topic.transport.rail +gov.us.topic.transport.road +gov.us.topic.transport.shipping +gov.us.topic.transport.water +gov.us.usenet.admin +gov.us.usenet.announce +gov.us.usenet.answers +gov.us.usenet.control +gov.us.usenet.groups +gov.us.usenet.lists +gov.us.usenet.questions +gov.us.usenet.software +gov.us.usenet.test +gov.usenet.admin +gov.usenet.announce +gov.usenet.answers +gov.usenet.control +gov.usenet.groups +gov.usenet.lists +gov.usenet.questions +gov.usenet.software +gov.usenet.test +hackercorp.statistics +hacktic.general +hacktic.hack +hacktic.phreak +hacktic.virus +hamilton.jobs +hawaii.ads.forsale +hawaii.ads.misc +hawaii.ads.wanted +hawaii.announce +hawaii.binaries.pictures +hawaii.config +hawaii.education +hawaii.expatriates +hawaii.gardening +hawaii.inet-providers +hawaii.military +hawaii.misc +hawaii.nortle +hawaii.politics +hawaii.sports +hawaii.test +help +hiv.aids.arc +hiv.aids.data +hiv.aids.de +hiv.aids.denews +hiv.aids.dialogue +hiv.aids.drugs +hiv.aids.fr +hiv.aids.hiv +hiv.aids.issues +hiv.aids.law +hiv.aids.nl +hiv.aids.sp +hiv.aids.spiritual +hiv.aids.sysop +hiv.aids.trials +hiv.aids.women +hiv.alt-treatments +hiv.config +hiv.informal.conversations +hiv.internet +hiv.med.questions +hiv.test +hiv.women +hk +hk.binaries +hk.binaries.photo +hk.binaries.photo.photograph +hk.binaries.photo.photography +hk.biz +hk.biz.general +hk.c +hk.chinese +hk.co +hk.comp +hk.comp.hacker +hk.comp.hardware +hk.comp.hardware.datacomm +hk.comp.mac +hk.comp.mpp +hk.comp.o +hk.comp.os +hk.comp.os.linux +hk.comp.os.linuxhk.rec.travel +hk.comp.os.unix +hk.comp.s +hk.comp.software +hk.culture.hongkong.entertainment +hk.frsale +hk.g +hk.genera +hk.general +hk.general.hk.chinese +hk.hkstar.com +hk.j +hk.jo +hk.jobs +hk.networks +hk.networks.techn +hk.networks.technology +hk.newsgr +hk.newsgroups +hk.newsgroups.discuss +hk.r +hk.re +hk.rec +hk.rec.alt-music +hk.rec.audio-visual +hk.rec.book +hk.rec.books +hk.rec.cars +hk.rec.co +hk.rec.comics +hk.rec.h +hk.rec.horse-racing +hk.rec.movies +hk.rec.music +hk.rec.music.classical +hk.rec.photo +hk.rec.sport +hk.rec.sport.soccer +hk.rec.t +hk.rec.tv +hk.rec.tv.x-files +hk.rec.v +hk.rec.videog +hk.rec.videogame +hk.se +hk.seminars +hk.soc.rel +hk.soc.religion.chris +hk.soc.religion.christian +hk.soc.religion.christianity +hk.star.general +hk.super.net +hk.super.nethk.jobs.recruit +hk.ta +hk.talk +hk.talk.f +hk.talk.fe +hk.talk.feelings +hk.talk.l +hk.talk.love +hk.talk.se +hk.talk.sex +hk.talk.sexhk.rec.photo +hk.usene +hk.usenet.project +hn.market +houston +houston.eats +houston.efh.talk +houston.forsale +houston.general +houston.internet.providers +houston.jobs +houston.jobs.offered +houston.jobs.wanted +houston.music +houston.news +houston.personals +houston.politics +houston.singles +houston.sports +houston.swingers +houston.usenet.config +houston.usenet.stats +houston.usenet.test +houston.wanted +houston.weather +humanities.answers +humanities.classics +humanities.design.misc +humanities.language.sanskrit +humanities.lit.authors.shakespeare +humanities.misc +humanities.music.composers.wagner +humanities.philosophy.objectivism +humanityquest.addiction +humanityquest.admin +humanityquest.admin.announce +humanityquest.admin.config +humanityquest.admin.misc +humanityquest.alienation +humanityquest.anger +humanityquest.angst +humanityquest.anxiety +humanityquest.beauty +humanityquest.civility +humanityquest.community +humanityquest.compassion +humanityquest.confession +humanityquest.control +humanityquest.courage +humanityquest.creativity +humanityquest.curiosity +humanityquest.cynicism +humanityquest.death +humanityquest.desire +humanityquest.diversity +humanityquest.education +humanityquest.empathy +humanityquest.failure +humanityquest.fairness +humanityquest.faith +humanityquest.fear +humanityquest.forgiveness +humanityquest.freedom +humanityquest.friendship +humanityquest.gratefulness +humanityquest.greed +humanityquest.grief +humanityquest.guilt +humanityquest.happiness +humanityquest.hate +humanityquest.honesty +humanityquest.honor +humanityquest.hope +humanityquest.humanity +humanityquest.humility +humanityquest.hypocrisy +humanityquest.impatience +humanityquest.inspiration +humanityquest.integrity +humanityquest.jealously +humanityquest.joy +humanityquest.kindness +humanityquest.laziness +humanityquest.leadership +humanityquest.loneliness +humanityquest.love +humanityquest.loyalty +humanityquest.luck +humanityquest.lust +humanityquest.mindfulness +humanityquest.optimism +humanityquest.passion +humanityquest.peace +humanityquest.perseverance +humanityquest.pessimism +humanityquest.prejudice +humanityquest.privacy +humanityquest.procrastination +humanityquest.regret +humanityquest.responsibility +humanityquest.revenge +humanityquest.romance +humanityquest.sarcasm +humanityquest.security +humanityquest.self-doubt +humanityquest.self-esteem +humanityquest.selfishness +humanityquest.sensuality +humanityquest.shyness +humanityquest.simplicity +humanityquest.soul +humanityquest.spirituality +humanityquest.success +humanityquest.trust +humanityquest.values +humanityquest.virtue +humanityquest.wisdom +humanityquest.worry +hw.general +hwfn.announce +hwfn.buysell +hy.puhe.musiikki +ia.jobs +ibm.globenet.laptop.pccbbs +ibm.ibmmvs.mvsesa.cforum +ibm.ibmpc.aptiva +ibm.ibmpc.printer +ibm.ibmpc.thinkpad +ibm.servers.mvs.racf +ibm.software.assemblr +ibm.software.code400 +ibm.software.db2.dmtools +ibm.software.db2.mvs +ibm.software.db2.nt +ibm.software.db2.udb.eee +ibm.software.db2.udb.windows2000 +ibm.software.hostondemand +ibm.software.hotmedia +ibm.software.ispf +ibm.software.mqwf +ibm.software.speech.directtalk.dtbeans +ibm.software.vacpp.openclass +ibm.software.vacpp.os390.compiler +ibm.software.vagen +ibm.software.vajava.beans +ibm.software.vajava.beta +ibm.software.vajava.enterprise +ibm.software.vajava.enterprise.wte +ibm.software.vajava.ide +ibm.software.vajava.install +ibm.software.vajava.language +ibm.software.vajava.non-technical +ibm.software.vajava.sap +ibm.software.vame +ibm.software.varpg +ibm.software.vasmalltalk +ibm.software.websphere.application-server +ibm.software.websphere.application-server.as400 +ibm.software.websphere.commerce-suite +ibm.software.websphere.components +ibm.software.websphere.everyplace +ibm.software.websphere.http-servers +ibm.software.websphere.mq +ibm.software.websphere.mq.programming +ibm.software.websphere.mqeveryplace +ibm.software.websphere.mqintegrator +ibm.software.websphere.personalization +ibm.software.websphere.portal-server +ibm.software.websphere.studio.application-site-developer +ibm.software.websphere.studio.j2ee +ibm.software.websphere.studio.web-services +ibm.software.websphere.studio.web-tools +ibm.software.websphere.studio.workbench +ibm.software.websphere.studio.xml-tools +ibm.software.websphere.studio400 +ibm.software.websphere.voice-server.voicetoolkit +ibm.software.websphere.win2000 +ic.orgs.shp +icm.ogloszenia +iconz.general +icq +id.sex +ie.announce +ie.checkgroups +ie.comp +ie.forsale +ie.general +ie.indigo.forsale +ie.jobs +ie.news.group +ie.politics +ie.test +ieee.announce +ieee.ces.audio-visual +ieee.ces.broadcast-cable +ieee.ces.home-automation +ieee.config +ieee.eab.announce +ieee.eab.general +ieee.general +ieee.pcnfs +ieee.pcs.general +ieee.pub.announce +ieee.pub.general +ieee.rab.announce +ieee.rab.general +ieee.region1 +ieee.stds.announce +ieee.stds.general +ieee.students +ieee.tab.announce +ieee.tab.general +ieee.tcos +ieee.usab.announce +ieee.usab.general +il.ads +il.forsale +il.israel-mideast +il.jobs +il.jobs.misc +il.jobs.offered +il.jobs.resumes +il.novell +il.test +imsi.mail.framers +imsi.mail.www-talk +imsi.mail.x.prv.fontwork +imsi.mail.x.prv.mtserver +imsi.mail.x.prv.trackers +in.bizarre +in.forsale +in.general +in.ham-radio +in.jobs +in.misc +in.pc.mac +in.test +in.unix +info +info.admin +info.big-internet +info.bind +info.bsdi.users +info.bytecounters +info.firearms +info.firearms.politics +info.firewalls +info.gated +info.grass.programmer +info.grass.user +info.ietf +info.ietf.hosts +info.ietf.isoc +info.ietf.njm +info.ietf.smtp +info.inet.access +info.isode +info.jethro-tull +info.labmgr +info.mach +info.mh.workers +info.ncsa-telnet +info.nets +info.nsf.grants +info.nsfnet.cert +info.nsfnet.status +info.nupop +info.nysersnmp +info.ph +info.rfc +info.slug +info.snmp +info.solbourne +info.sun-managers +info.sun-nets +info.theorynt +info.unix-sw +info.wisenet +infoweb.test +ingr.general +inprise.public.sap.delphi +installshield.express.delphi +installshield.express.general +installshield.express.vb +installshield.is5.general +installshield.is6.general +installshield.is6.installscript +installshield.iswi.general +installshield.news +intel.create_share_camera_pack +intel.inbusiness +intel.internet_connections.internet_phone +intel.microprocessors.celeron +intel.microprocessors.pentium +intel.microprocessors.pentium_ii +intel.microprocessors.pentium_iii +intel.microprocessors.pentium_pro +intel.mmx_technology +intel.motherboards +intel.motherboards.boxed_server_motherboards +intel.motherboards.other +intel.motherboards.pentium +intel.motherboards.pentium_ii +intel.motherboards.pentium_mmx +intel.motherboards.pentium_pro +intel.network +intel.network.adapters +intel.network.hubs_switches_routers +intel.network.management +intel.networking_and_communications.landesk_products.landesk_management +intel.other_components.pci_chipsets +intel.other_products.video_capture +interaccess.help +interbase.public.general +interbase.public.non-technical +interlog.eye +intershop.public.enfinity +intershop.public.is3g4 +isp.linux +isp.tech +japan.actress +japan.ad.announce +japan.ad.exhibition +japan.ad.misc +japan.ad.personal +japan.ad.products +japan.admin.abuse +japan.admin.abuse.lists +japan.admin.announce +japan.admin.feed +japan.admin.feed-check +japan.admin.groups +japan.admin.lists +japan.admin.misc +japan.admin.policy +japan.aisatsu +japan.animal +japan.animal.cat +japan.animal.dog +japan.animal.penguin +japan.anime +japan.anime.evangelion +japan.anime.evangelion.asuka +japan.anime.evangelion.ayanami +japan.anime.evangelion.nerv +japan.anime.galaxy-express-999 +japan.anime.gundam +japan.anime.pretty +japan.app.macromedia +japan.app.postpet +japan.asia.china +japan.asia.korea +japan.asia.nippon.koushitsu +japan.audio +japan.autos.bike +japan.autos.enthu +japan.bar.loft-plus-one +japan.bbs +japan.bbs.asciinet +japan.bbs.nifty-serve +japan.bbs.pc-van +japan.binaries.anime +japan.binaries.pictures +japan.binaries.pictures.anime +japan.binaries.pictures.cosplay +japan.binaries.pictures.erotica +japan.binaries.pictures.erotica.aidoruotakaragazou +japan.binaries.pictures.erotica.anime +japan.binaries.pictures.erotica.boyoyon +japan.binaries.pictures.erotica.lol +japan.binaries.pictures.erotica.lolita +japan.binaries.pictures.erotica.loose-socks +japan.binaries.pictures.erotica.repost +japan.binaries.pictures.erotica.shota +japan.binaries.pictures.fine-arts +japan.binaries.pictures.lolita +japan.binaries.pictures.misc +japan.binaries.pictures.under-water +japan.binaries.pictures.vow +japan.books +japan.budo.judo +japan.budo.kyudo +japan.camp +japan.ch +japan.chacha-jokes +japan.chacha-jokes.hneta +japan.chat +japan.chat.hneta +japan.chat.military +japan.chat.mukashi-banashi +japan.club.clubasia +japan.co +japan.comics.dilbert +japan.comike.chat +japan.comike.info +japan.comp +japan.comp.be +japan.comp.cd-r +japan.comp.emulators.fusion +japan.comp.emulators.misc +japan.comp.freebsd +japan.comp.gnu +japan.comp.hpux +japan.comp.lang.basic +japan.comp.lang.c +japan.comp.lang.delphi +japan.comp.lang.javascript +japan.comp.lang.misc +japan.comp.lang.perl +japan.comp.lang.postscript +japan.comp.lang.rexx +japan.comp.lang.s +japan.comp.lang.visual-basic +japan.comp.lang.visual-c++ +japan.comp.lang.visual.c++ +japan.comp.lang.vrml +japan.comp.lang.xml +japan.comp.linux +japan.comp.mac +japan.comp.macosx +japan.comp.mobile +japan.comp.mobile.ruputer +japan.comp.mp3 +japan.comp.next +japan.comp.open-gl +japan.comp.os2 +japan.comp.pc98 +japan.comp.rc5-64 +japan.comp.rdb +japan.comp.sgi +japan.comp.skk +japan.comp.sony +japan.comp.sony-news +japan.comp.sun +japan.comp.sys.intel +japan.comp.sys.motorola +japan.comp.toshiba +japan.comp.un +japan.comp.windows-ce +japan.comp.windows-me +japan.comp.windows-nt +japan.comp.windows2000 +japan.comp.windows95 +japan.comp.windows98 +japan.comp.wnn +japan.comp.x11 +japan.config +japan.cooking +japan.cosplay +japan.dajare +japan.disney +japan.engeki +japan.engineering.kenchiku +japan.enkai +japan.enkai.yoin +japan.environment.nature-watch +japan.fan.announcer.women +japan.fan.artists.maywa-denki +japan.fan.netnews-people +japan.fan.netnews-people.void +japan.fetish +japan.fetish.lolita +japan.fetish.pantyhose +japan.fetish.rubber +japan.fetish.tights +japan.finance.invest +japan.finance.virtual-stock +japan.fishing +japan.fishing.fly +japan.fishing.lure +japan.food +japan.food.rahmen +japan.food.softdrink +japan.foreign-student.cambodia +japan.foreign-student.chinese +japan.fusigi +japan.gakkou.chuugaku +japan.gakkou.highschool +japan.gakkou.kyouiku +japan.games.go +japan.games.shogi +japan.gardening +japan.gegebo.food-drink +japan.guchi +japan.haiku-waka +japan.ham-radio +japan.ham-radio.dxcc +japan.handmade.comp +japan.handmade.electronics +japan.handmade.photo +japan.happy +japan.herbs-spices +japan.id +japan.idobata.highschool.kunitachi +japan.idobata.hitotsu-bashi +japan.idobata.jaist +japan.idobata.kyoto-u +japan.idobata.nagoya-u +japan.idobata.naist +japan.idobata.osaka-u +japan.idol +japan.idol.cona-milk +japan.idol.enomoto-kanako +japan.idol.gravure-idols +japan.idol.hinagata +japan.idol.hirosue +japan.idol.johnnys +japan.idol.kato.noriko +japan.idol.male +japan.idol.max +japan.idol.mediagirls +japan.idol.mizuki +japan.idol.morning-musume +japan.idol.okina +japan.idol.sakai.noriko +japan.idol.speed +japan.idol.takahashi.yumiko +japan.idol.tomosaka +japan.idol.uchida.yuki +japan.internet.future +japan.internet.personal +japan.internet.phone +japan.internet.providers +japan.irc +japan.jiei-tai +japan.jiji +japan.kakutou-gi +japan.karaoke +japan.kissa +japan.kissa.mountain +japan.lang.english.communication +japan.lang.japanese +japan.lang.kansai +japan.lang.klingon +japan.lang.latina +japan.life +japan.life.abroad.america +japan.life.abroad.asia +japan.life.abroad.europe +japan.life.abroad.misc +japan.life.abroad.oseania +japan.life.denka-seihin +japan.life.family +japan.life.health +japan.life.health.atopy +japan.life.kango +japan.life.kekkon +japan.life.single +japan.life.sumai +japan.mail-friends +japan.mail.mailing-lists +japan.mail.reader +japan.mail.system +japan.netnews +japan.netnews.beginners +japan.netnews.crime +japan.netnews.groups-idea +japan.netnews.html +japan.netnews.new-category +japan.netnews.reader.gnus +japan.netnews.reader.mnews +japan.netnews.reader.msin +japan.netnews.reader.others +japan.netnews.reader.outlook-express +japan.netnews.reader.slrn +japan.netnews.usage +japan.owarai +japan.owarai.2chome +japan.personality.yamamoto-masayuki +japan.pets.hamster +japan.photo.book +japan.photo.camera +japan.photo.exhibition +japan.photo.technique +japan.photo.www +japan.pictures.binaries.erotica.lolita +japan.poem +japan.pokemon +japan.psycology.lolita-complex +japan.puzzle.cube +japan.puzzle.misc +japan.puzzle.slither-link +japan.soc.crime.internet +japan.soc.cult +japan.soc.denjiha +japan.soc.kaikyo +japan.soc.qualifications +japan.soc.transgender +japan.soramimi +japan.soramimi.d +japan.sport +japan.sumo +japan.support.anxiety-panic +japan.test +japan.tickets +japan.tmp.announce +japan.tmp.usage +japan.tokusatsu +japan.town +japan.town.akiba +japan.town.kyoto +japan.town.nagoya +japan.town.nara +japan.town.new-york +japan.town.oosu +japan.town.osaka +japan.town.ponbashi +japan.town.sapporo +japan.town.shinjuku +japan.town.tama +japan.town.yokohama +japan.travel.abroad +japan.travel.domestic +japan.video.hardware +japan.video.soft +japan.videogames +japan.videogames.datsui-mahjong +japan.videogames.diablo +japan.videogames.finalfantasy +japan.videogames.gals +japan.videogames.h +japan.videogames.ibm-pc +japan.videogames.kusoge +japan.videogames.leaf +japan.videogames.nintendo +japan.videogames.pc-fx +japan.videogames.playstation +japan.videogames.saturn +japan.videogames.ultimaonline +japan.videogames.win95 +japan.www.browser +japan.www.browser.lynx +japan.www.browser.mozilla +japan.www.browser.msie +japan.www.css +japan.www.design +japan.www.link.favorite-pages +japan.www.proxy.squid +japan.www.server.apache +japan.www.server.cern +japan.www.server.ms-iis +japan.yoso +japan2nd.binaries.pictures.erotica.lolita +jaring.general +jaring.marketplace +jaring.members +jaring.outdoors.fishing +jaring.pcbase +jccs.kyoto.news +jlug.ml.users +jobs.misc +jobs.misc.jobs +jobs.offered +joelnet.config +junk +k12.chat.elementary +k12.chat.junior +k12.chat.senior +k12.chat.teacher +k12.ed +k12.ed.art +k12.ed.business +k12.ed.comp +k12.ed.comp.literacy +k12.ed.health-pe +k12.ed.lang +k12.ed.life-skills +k12.ed.math +k12.ed.music +k12.ed.science +k12.ed.soc-studies +k12.ed.special +k12.ed.tag +k12.ed.tech +k12.lang.art +k12.lang.deutsch-eng +k12.lang.esp-eng +k12.lang.francais +k12.lang.japanese +k12.lang.russian +k12.library +k12.news +k12.sys.channel0 +k12.sys.channel1 +k12.sys.channel10 +k12.sys.channel11 +k12.sys.channel12 +k12.sys.channel2 +k12.sys.channel3 +k12.sys.channel4 +k12.sys.channel5 +k12.sys.channel6 +k12.sys.channel7 +k12.sys.channel8 +k12.sys.channel9 +k12.sys.projects +karoo.answers +karoo.local +kingston.bbs +kingston.forsale +kingston.general +kingston.jobs +kingston.os.linux +kingston.test +kingston.wanted +knox.forsale +korea.binaries +korea.binaries.animations +korea.binaries.d +korea.binaries.erotica +korea.binaries.games +korea.binaries.movies +korea.binaries.music.mp3 +korea.binaries.music.mp3.high-quality +korea.binaries.music.videos +korea.binaries.novel.korean +korea.binaries.tv +korea.config +ks.admin +ks.misc +kso.tnetz.sex +kw.ads.business +kw.ads.events +kw.bb.sale +kw.birthdays +kw.config +kw.eats +kw.events +kw.forsale +kw.general +kw.housing +kw.jobs +kw.networks +kw.news.stats +kw.reviews +kw.theatre +kwnet.general +kwnet.ops +kwnet.tech +ky.motorcycles +ky.weather +ky.weather.d +la.config +la.eats +la.forsale +la.general +la.jobs +la.media +la.news +la.personals +la.seminars +la.test +la.transportation +la.wanted +laf.forsale +latech.stis +laurentian.list.pmail-updates +law.court.federal +law.listserv.election-law +law.listserv.net-lawyers +law.school.admin +law.school.anti-trust +law.school.antitrust +law.school.clinic.info-law +law.school.corps +law.school.gradtax.partner +law.school.gradtax.s-corp +law.school.legal-prof +law.school.tax.basic +law.school.tax.business +law.school.tax.busiplan +lehigh.valley.for-sale +lex.general +lexicon.gamers +lexicon.general +li.events +li.forsale +li.jobs +li.misc +li.politics +li.wanted +lickme +linux.act.kernel +linux.act.scsi +linux.admin.isp +linux.admin.news +linux.apps.cdwrite +linux.debian.68k +linux.debian.alpha +linux.debian.announce +linux.debian.announce.devel +linux.debian.announce.security +linux.debian.beowulf +linux.debian.bugs.closed +linux.debian.bugs.dist +linux.debian.bugs.forwarded +linux.debian.changes +linux.debian.changes.devel +linux.debian.commercial +linux.debian.consultants +linux.debian.curiosa +linux.debian.devel +linux.debian.devel.announce +linux.debian.devel.autobuild +linux.debian.devel.cd +linux.debian.devel.changes +linux.debian.devel.games +linux.debian.devel.mentors +linux.debian.devel.qa +linux.debian.devel.release +linux.debian.devel.snapshots +linux.debian.devel.testing +linux.debian.doc +linux.debian.faq +linux.debian.i18n +linux.debian.isp +linux.debian.italian +linux.debian.l10n.dutch +linux.debian.l10n.portuguese +linux.debian.l10n.spanish +linux.debian.laptop +linux.debian.legal +linux.debian.maint.admintool +linux.debian.maint.boot +linux.debian.maint.dpkg +linux.debian.maint.emacsen +linux.debian.maint.firewall +linux.debian.maint.glibc +linux.debian.maint.gtk.gnome +linux.debian.maint.hams +linux.debian.maint.i18n +linux.debian.maint.ipv6 +linux.debian.maint.java +linux.debian.maint.jr +linux.debian.maint.ocaml.maint +linux.debian.maint.perl +linux.debian.maint.pilot +linux.debian.maint.python +linux.debian.maint.sgml +linux.debian.maint.tetex +linux.debian.maint.toolchain +linux.debian.maint.x +linux.debian.mirrors +linux.debian.news +linux.debian.policy +linux.debian.ports.68k +linux.debian.ports.alpha +linux.debian.ports.arm +linux.debian.ports.hppa +linux.debian.ports.hurd +linux.debian.ports.ia64 +linux.debian.ports.mips +linux.debian.ports.powerpc +linux.debian.ports.s390 +linux.debian.ports.sparc +linux.debian.ports.superh +linux.debian.powerpc +linux.debian.project +linux.debian.publicity +linux.debian.qa +linux.debian.security +linux.debian.spanish +linux.debian.sparc +linux.debian.user +linux.debian.user.chinese.big5 +linux.debian.user.italian +linux.debian.user.japanese +linux.debian.user.portuguese +linux.debian.user.russian +linux.debian.user.spanish +linux.debian.user.swedish +linux.debian.vote +linux.debian.www +linux.dev.680x0 +linux.dev.admin +linux.dev.c-programming +linux.dev.diald +linux.dev.ipx +linux.dev.isdn +linux.dev.japanese +linux.dev.kernel +linux.dev.laptop +linux.dev.msdos +linux.dev.newbie +linux.dev.ppp +linux.dev.raid +linux.dev.svgalib +linux.dev.x11 +linux.help +linux.jobs +linux.kernel +linux.ldp.announce +linux.ldp.discuss +linux.ldp.docbook +linux.local.chicago +linux.net +linux.net.atm +linux.news +linux.news.groups +linux.postgres +linux.redhat +linux.redhat.announce +linux.redhat.applixware +linux.redhat.axp +linux.redhat.devel +linux.redhat.development +linux.redhat.digest +linux.redhat.install +linux.redhat.list +linux.redhat.misc +linux.redhat.pam +linux.redhat.ppp +linux.redhat.rpm +linux.redhat.sparc +linux.samba +linux.samba.announce +linux.test +linuxfr.linuxfr-news +list.com-priv +list.comp.software.adobe.acrobat +list.emailer-talk +list.freebsd.current +list.freebsd.hackers +list.freebsd.isp +list.freebsd.net +list.freebsd.questions +list.freebsd.stable +list.linguist +list.linux-activists.laptops +list.linux-activists.newbie +list.linux-activists.wabi +list.stumedia +list.telecomreg +list.tpc-rp +list.wwfs +local.test +lon.misc +lon.test +lou.config +lou.general +lou.lft.config +lou.lft.forsale +lou.lft.general +lou.lft.jobs +lou.sun +lrz.aktuell +lrz.netz +ls.amnesty +ls.olnews +ls.ussr +lt.internet.commerce +lt.tv.20-four +lucky.freebsd.alpha +lucky.freebsd.alpha.digest +lucky.freebsd.arch +lucky.freebsd.bugs +lucky.freebsd.chat +lucky.freebsd.current +lucky.freebsd.doc +lucky.freebsd.hackers +lucky.freebsd.hubs +lucky.freebsd.isdn +lucky.freebsd.isp +lucky.freebsd.multimedia +lucky.freebsd.net +lucky.freebsd.newbies +lucky.freebsd.ports +lucky.freebsd.qa +lucky.freebsd.questions +lucky.freebsd.small +lucky.freebsd.smp +lucky.freebsd.stable +lucky.linux.8086 +lucky.linux.admin +lucky.linux.arm +lucky.linux.c.programming +lucky.linux.hams +lucky.linux.kernel +lucky.linux.net +lucky.linux.raid +lucky.linux.scsi +lucky.linux.svgalib +lucky.openbsd.misc +lucky.openbsd.tech +macromedia.authorware +macromedia.backstage +macromedia.coldfusion.cfml_general_discussion +macromedia.coldfusion.getting_started +macromedia.deck +macromedia.director.basics +macromedia.director.exportforjava +macromedia.director.lingo +macromedia.director.multiuser +macromedia.dreamweaver +macromedia.dynamic.html +macromedia.exchange.extensions.dreamweaver +macromedia.exchange.extensions.flash +macromedia.exchange.extensions.ultradev +macromedia.extreme3d +macromedia.feedback.www-macromedia-com +macromedia.fireworks +macromedia.flash +macromedia.flash.handhelds +macromedia.flash.sitedesign +macromedia.fontographer +macromedia.freehand +macromedia.general.announcements +macromedia.general.info +macromedia.general.international +macromedia.general.job.opportunities +macromedia.general.usergroups +macromedia.generator +macromedia.homesite.general_discussion +macromedia.open-swf +macromedia.pathware +macromedia.plug-ins +macromedia.sitespring +macromedia.soundedit16 +macromedia.test +macromedia.ultradev +macromedia.web.production.management +macromedia.xres +mail.christian-music +mail.cypherpunks +mail.dog-rescue +mail.ednet +mail.email +mail.firewalls +mail.golden +mail.info-nets +mail.k12admin +mail.net-happenings +mail.netscape +mail.ovforum +mail.phish +mail.psx +mail.screenwriters +mail.sun-managers +mail.sun-nets +mail.vetmed +mailing-list.isdn4linux +mailing.comp.cdwrite +mailing.comp.coda-linux +mailing.comp.jgaa +mailing.database.msql-mysql-modules +mailing.database.myodbc +mailing.database.mysql +mailing.database.mysql-java +mailing.database.mysql-win32 +mailing.database.pgsql-bugs +mailing.database.pgsql-docs +mailing.database.pgsql-ports +mailing.freebsd.aic7xxx +mailing.freebsd.announce +mailing.freebsd.bugs +mailing.freebsd.cvs +mailing.freebsd.cvs-ports +mailing.freebsd.database +mailing.freebsd.doc +mailing.freebsd.hackers +mailing.freebsd.net +mailing.freebsd.questions +mailing.freebsd.security +mailing.freebsd.smp +mailing.freebsd.stable +mailing.netbsd.bugs +mailing.netbsd.help +mailing.netbsd.tech.install +mailing.netbsd.tech.kern +mailing.netbsd.tech.userlevel +mailing.openbsd.announce +mailing.openbsd.bugs +mailing.openbsd.misc +mailing.openbsd.tech +mailing.openbsd.www +mailing.openssl.users +mailing.postfix.users +mailing.rec.music.jpop +mailing.unix.bind-users +mailing.unix.inn-bugs +mailing.unix.inn-workers +mailing.unix.ipfilter +mailing.unix.mutt-users +mailing.unix.rsync +mailing.unix.samba-ntdom +mailing.unix.samba-technical +mailing.unix.snort +mailing.unix.socks +mailing.unix.squid-users +mailing.unix.stunnel-users +mailing.unix.tin-bugs +mailing.unix.tin-dev +mailing.unix.xcin +mailing.www.horde-bugs +mailing.www.horde-cvs +mailing.www.horde-imp +mailing.www.horde-turba +mailing.www.php-dev +maine.forsale +maine.jobs +man.education +man.forsale +man.freenet +man.jobs.offered +marfa.general +market.internet +market.internet.free +md.jobs +me.general +mensa.talk.misc +microsft.public.windowsxp +microsoft.a.test +microsoft.beta.iis4.ftp +microsoft.beta.iis4.mmc +microsoft.beta.iis4.msmq +microsoft.beta.iis4.remotesvc +microsoft.private.mvp.access +microsoft.public +microsoft.public.Frontpage.client +microsoft.public.USASalesInfo.Developer.VisualBasic +microsoft.public.USASalesInfo.Developer.VisualC++ +microsoft.public.USASalesInfo.SQLServer +microsoft.public.access +microsoft.public.access.3rdpartyusergroups +microsoft.public.access.3rdpartyusrgrp +microsoft.public.access.activexcontrol +microsoft.public.access.adp.sqlserver +microsoft.public.access.chat +microsoft.public.access.commandbarsui +microsoft.public.access.conversion +microsoft.public.access.customcontrols +microsoft.public.access.dataaccess.pages +microsoft.public.access.developers.toolkitode +microsoft.public.access.developerstoolkit +microsoft.public.access.developerstoolkitode +microsoft.public.access.devtoolkits +microsoft.public.access.externaldata +microsoft.public.access.forms +microsoft.public.access.formscoding +microsoft.public.access.formsprogramming +microsoft.public.access.gettingstarted +microsoft.public.access.importexportlink +microsoft.public.access.internet +microsoft.public.access.interopoledde +microsoft.public.access.macros +microsoft.public.access.modulesdaovba +microsoft.public.access.modulesdaovba.ado +microsoft.public.access.multiuser +microsoft.public.access.multiusernetworks +microsoft.public.access.odbcclientserver +microsoft.public.access.odbcclientsvr +microsoft.public.access.queries +microsoft.public.access.replication +microsoft.public.access.reports +microsoft.public.access.reportsprinting +microsoft.public.access.security +microsoft.public.access.setupconfig +microsoft.public.access.setupconfiguration +microsoft.public.access.tablesdbdesign +microsoft.public.accessibility.axa +microsoft.public.accessibility.developer +microsoft.public.accessibility.ieaccess +microsoft.public.accessibility.issues +microsoft.public.active.directory.interfaces +microsoft.public.activex +microsoft.public.activex.controls.chatcontrol +microsoft.public.activex.programming.control.dev +microsoft.public.activex.programming.control.webdc +microsoft.public.activex.programming.control.webwiz +microsoft.public.activex.programming.java.afc +microsoft.public.activex.programming.java.cab +microsoft.public.activex.programming.java.sdk +microsoft.public.activex.programming.java.visualj +microsoft.public.activex.programming.java.vm +microsoft.public.activex.programming.scripting.jscript +microsoft.public.activex.programming.scripting.vbscript +microsoft.public.adc +microsoft.public.adcbeta +microsoft.public.ado +microsoft.public.ado.wincebeta +microsoft.public.ado.windowsce +microsoft.public.adsi.general +microsoft.public.ageofempires +microsoft.public.applicationcenter.admin +microsoft.public.applicationcenter.healthmonitor +microsoft.public.applicationcenter.setup +microsoft.public.automap +microsoft.public.backoffice.server +microsoft.public.backoffice.smallbiz +microsoft.public.backoffice.smallbiz2000 +microsoft.public.backofficesvr.setupconfig +microsoft.public.basic.dos +microsoft.public.basic.other +microsoft.public.biztalk.accelerator.rosettanet +microsoft.public.biztalk.appintegration +microsoft.public.biztalk.general +microsoft.public.biztalk.jumpstart +microsoft.public.biztalk.nonxml +microsoft.public.biztalk.orchestration +microsoft.public.biztalk.server +microsoft.public.biztalk.setup +microsoft.public.bookshelf +microsoft.public.br.design.gallery +microsoft.public.br.ie30 +microsoft.public.br.ie4 +microsoft.public.carpoint +microsoft.public.catapult.beta +microsoft.public.cert.exam.mcsa +microsoft.public.cert.exam.mcsd +microsoft.public.cert.exam.mcse +microsoft.public.cert.mcdba +microsoft.public.cert.mct +microsoft.public.certification +microsoft.public.certification.mcp +microsoft.public.certification.mcse +microsoft.public.certification.networking +microsoft.public.certification.visualstudio +microsoft.public.certification.winnt-9x +microsoft.public.ch.outlookexpress +microsoft.public.childcare +microsoft.public.cinemania +microsoft.public.clip.gallery +microsoft.public.cmserver.evaluation +microsoft.public.cmserver.general +microsoft.public.cn.ie40 +microsoft.public.cn.inetexplorer.ie5 +microsoft.public.cn.inetexplorer.ie55beta +microsoft.public.cn.inetexplorer.ie5beta +microsoft.public.cn.mcspmember.technical +microsoft.public.color +microsoft.public.commerceserver.campaigns_csf +microsoft.public.commerceserver.datawarehousing +microsoft.public.commerceserver.general +microsoft.public.commerceserver.setup.deploymentoperations +microsoft.public.consumer.products +microsoft.public.cryptoapi +microsoft.public.cs.ie30 +microsoft.public.cs.ie4 +microsoft.public.cs.ie4_win31 +microsoft.public.cts +microsoft.public.data.ado +microsoft.public.data.ado.rds +microsoft.public.data.odbc +microsoft.public.data.oledb +microsoft.public.data.oledb.olap +microsoft.public.ddk.win2000.acpi +microsoft.public.ddk.win2000.bus.technologies +microsoft.public.ddk.win2000.comm +microsoft.public.ddk.win2000.debugging +microsoft.public.ddk.win2000.display +microsoft.public.ddk.win2000.general +microsoft.public.ddk.win2000.input +microsoft.public.ddk.win2000.modem +microsoft.public.ddk.win2000.multimedia +microsoft.public.ddk.win2000.network +microsoft.public.ddk.win2000.printer.video +microsoft.public.ddk.win2000.printers +microsoft.public.ddk.win2000.setup +microsoft.public.ddk.win2000.storage +microsoft.public.ddk.win9x.modem +microsoft.public.ddk.win9x.mouse +microsoft.public.ddk.win9x.network +microsoft.public.ddk.win9x.power_mgmt +microsoft.public.ddk.win9x.printer.drivers +microsoft.public.ddk.win9x.printer.subsystems +microsoft.public.ddk.win9x.still_image +microsoft.public.ddk.win9x.storage +microsoft.public.ddk.win9x.stream_class +microsoft.public.ddk.win9x.usb +microsoft.public.ddk.win9x.vcomm +microsoft.public.ddk.win9x.video_capture +microsoft.public.design.gallery +microsoft.public.development.device.drivers +microsoft.public.digitaldashboard +microsoft.public.dimensionx.liquidreality +microsoft.public.dimensionx.lmpro +microsoft.public.directx +microsoft.public.directx.graphics +microsoft.public.dotnet.academic +microsoft.public.dotnet.csharp.general +microsoft.public.dotnet.distributed_apps +microsoft.public.dotnet.faqs +microsoft.public.dotnet.framework +microsoft.public.dotnet.framework.adonet +microsoft.public.dotnet.framework.aspnet +microsoft.public.dotnet.framework.aspnet.mobile +microsoft.public.dotnet.framework.aspnet.webservices +microsoft.public.dotnet.framework.clr +microsoft.public.dotnet.framework.component_services +microsoft.public.dotnet.framework.interop +microsoft.public.dotnet.framework.performance +microsoft.public.dotnet.framework.remoting +microsoft.public.dotnet.framework.sdk +microsoft.public.dotnet.framework.windowsforms +microsoft.public.dotnet.general +microsoft.public.dotnet.languages.csharp +microsoft.public.dotnet.languages.jscript +microsoft.public.dotnet.languages.vb +microsoft.public.dotnet.languages.vc +microsoft.public.dotnet.languages.vc.libraries +microsoft.public.dotnet.scripting +microsoft.public.dotnet.xml +microsoft.public.dxmanimation +microsoft.public.enable.developer +microsoft.public.enable.issues +microsoft.public.encarta +microsoft.public.excel +microsoft.public.excel.crashesGPFs +microsoft.public.excel.crashesgpfs +microsoft.public.excel.datamap +microsoft.public.excel.interopoledde +microsoft.public.excel.links +microsoft.public.excel.macintosh +microsoft.public.excel.misc +microsoft.public.excel.printing +microsoft.public.excel.programming +microsoft.public.excel.querydao +microsoft.public.excel.sdk +microsoft.public.excel.setup +microsoft.public.excel.templates +microsoft.public.excel.worksheet.functions +microsoft.public.excel.worksheetfunctions +microsoft.public.exchange +microsoft.public.exchange.admin +microsoft.public.exchange.application.conversion +microsoft.public.exchange.applications +microsoft.public.exchange.clients +microsoft.public.exchange.connectivity +microsoft.public.exchange.misc +microsoft.public.exchange.setup +microsoft.public.exchange2000.active.directory.integration +microsoft.public.exchange2000.admin +microsoft.public.exchange2000.applications +microsoft.public.exchange2000.beta.active.directory.integration +microsoft.public.exchange2000.beta.administration +microsoft.public.exchange2000.beta.announcements +microsoft.public.exchange2000.beta.clients +microsoft.public.exchange2000.beta.clustering +microsoft.public.exchange2000.beta.development +microsoft.public.exchange2000.beta.documentation +microsoft.public.exchange2000.beta.general +microsoft.public.exchange2000.beta.information.store +microsoft.public.exchange2000.beta.interop +microsoft.public.exchange2000.beta.kms +microsoft.public.exchange2000.beta.protocols +microsoft.public.exchange2000.beta.realtime.collaboration +microsoft.public.exchange2000.beta.setup.installation +microsoft.public.exchange2000.beta.transport +microsoft.public.exchange2000.beta.win2000 +microsoft.public.exchange2000.clients +microsoft.public.exchange2000.connectivity +microsoft.public.exchange2000.development +microsoft.public.exchange2000.general +microsoft.public.exchange2000.information.store +microsoft.public.exchange2000.interop +microsoft.public.exchange2000.misc +microsoft.public.exchange2000.protocols +microsoft.public.exchange2000.realtime.collaboration +microsoft.public.exchange2000.setup.installation +microsoft.public.exchange2000.transport +microsoft.public.exchange2000.win2000 +microsoft.public.fi.ie4 +microsoft.public.flightsim +microsoft.public.fortran +microsoft.public.fox.3rdparty +microsoft.public.fox.books +microsoft.public.fox.chatter +microsoft.public.fox.events +microsoft.public.fox.fox2x +microsoft.public.fox.fox2x.browse +microsoft.public.fox.fox2x.language-menus +microsoft.public.fox.fox2x.lck-api +microsoft.public.fox.fox2x.mac-specific +microsoft.public.fox.fox2x.queries-sql +microsoft.public.fox.fox2x.screens +microsoft.public.fox.fox2x.setup-environment +microsoft.public.fox.fox2x.setup.environment +microsoft.public.fox.fox2x.xplat +microsoft.public.fox.helpwanted +microsoft.public.fox.internet +microsoft.public.fox.programmer.exchange +microsoft.public.fox.vfp.3rdparty +microsoft.public.fox.vfp.dbc +microsoft.public.fox.vfp.forms +microsoft.public.fox.vfp.grids +microsoft.public.fox.vfp.language-menus +microsoft.public.fox.vfp.lck-api +microsoft.public.fox.vfp.mac-specific +microsoft.public.fox.vfp.oop +microsoft.public.fox.vfp.queries-sql +microsoft.public.fox.vfp.reports-printing +microsoft.public.fox.vfp.reports.printing +microsoft.public.fox.vfp.setup-environment +microsoft.public.fox.vfp.setup.environment +microsoft.public.fox.vfp.web +microsoft.public.fox.vfp.xplat +microsoft.public.fox.vfp.yellowpages +microsoft.public.frontpage +microsoft.public.frontpage.client +microsoft.public.frontpage.extensions.unix +microsoft.public.frontpage.extensions.windowsnt +microsoft.public.frontpage.mac +microsoft.public.frontpage.programming +microsoft.public.frontpage.programming.com_addins +microsoft.public.frontpage.programming.vba +microsoft.public.frontpage98 +microsoft.public.frontpage98.eval +microsoft.public.games +microsoft.public.games.ageofkings +microsoft.public.games.discussion +microsoft.public.games.zone +microsoft.public.games.zone.action +microsoft.public.games.zone.allegiance +microsoft.public.games.zone.asherons_call +microsoft.public.games.zone.beta +microsoft.public.games.zone.board +microsoft.public.games.zone.bridgeclub +microsoft.public.games.zone.card +microsoft.public.games.zone.chess +microsoft.public.games.zone.fighterace +microsoft.public.games.zone.fighterace.flightschool +microsoft.public.games.zone.fighterace.wishes +microsoft.public.games.zone.leagues +microsoft.public.games.zone.links200 +microsoft.public.games.zone.mindaerobics +microsoft.public.games.zone.puzzles +microsoft.public.games.zone.role_playing +microsoft.public.games.zone.simulation +microsoft.public.games.zone.sport +microsoft.public.games.zone.strategy +microsoft.public.games.zone.tanarus +microsoft.public.games.zone.ultracorps +microsoft.public.games.zone.zonelan +microsoft.public.gifanimator.discussion +microsoft.public.greetings.workshop +microsoft.public.handheldpc +microsoft.public.hardware +microsoft.public.helpauthoring +microsoft.public.hiserver.general +microsoft.public.home.publishing +microsoft.public.iis4.beta.administration +microsoft.public.iis4.beta.certificatesvr +microsoft.public.iis4.beta.database +microsoft.public.iis4.beta.frontpageextns +microsoft.public.iis4.beta.ftp +microsoft.public.iis4.beta.general +microsoft.public.iis4.beta.indexserver20 +microsoft.public.iis4.beta.internetras +microsoft.public.iis4.beta.mcis +microsoft.public.iis4.beta.mmc +microsoft.public.iis4.beta.msmq +microsoft.public.iis4.beta.nntpserver +microsoft.public.iis4.beta.remotesvc +microsoft.public.iis4.beta.setup +microsoft.public.iis4.beta.smtpserver +microsoft.public.iis4.beta.tools +microsoft.public.iis4.beta.transactionsvr +microsoft.public.iis4.beta.webpost +microsoft.public.imagecomposer.discussion +microsoft.public.in.mcs.onlinefaq +microsoft.public.in.win2k.discforum +microsoft.public.industry.accounting +microsoft.public.industry.banking.wosa-xfs +microsoft.public.industry.health +microsoft.public.industry.insurance +microsoft.public.industry.manufacturing +microsoft.public.industry.retailpos +microsoft.public.inetexplore.ie4.outlookexpress.stationery +microsoft.public.inetexplorer.ie3 +microsoft.public.inetexplorer.ie4 +microsoft.public.inetexplorer.ie4.OutlookExpress +microsoft.public.inetexplorer.ie4.active_desktop +microsoft.public.inetexplorer.ie4.activex_contrl +microsoft.public.inetexplorer.ie4.announcements +microsoft.public.inetexplorer.ie4.app_compat +microsoft.public.inetexplorer.ie4.browser +microsoft.public.inetexplorer.ie4.channels +microsoft.public.inetexplorer.ie4.connect_wizard +microsoft.public.inetexplorer.ie4.connectionmgr +microsoft.public.inetexplorer.ie4.docs_help +microsoft.public.inetexplorer.ie4.favorites +microsoft.public.inetexplorer.ie4.feedback +microsoft.public.inetexplorer.ie4.frontpad +microsoft.public.inetexplorer.ie4.java_applets +microsoft.public.inetexplorer.ie4.mschat +microsoft.public.inetexplorer.ie4.multimedia_con +microsoft.public.inetexplorer.ie4.netmeeting +microsoft.public.inetexplorer.ie4.outlookexpress +microsoft.public.inetexplorer.ie4.outlookexpress.msagent +microsoft.public.inetexplorer.ie4.outlookexpress.stationery +microsoft.public.inetexplorer.ie4.printing +microsoft.public.inetexplorer.ie4.scripting +microsoft.public.inetexplorer.ie4.security +microsoft.public.inetexplorer.ie4.setup +microsoft.public.inetexplorer.ie4.shell +microsoft.public.inetexplorer.ie4.taskscheduler +microsoft.public.inetexplorer.ie4.web_delivery +microsoft.public.inetexplorer.ie4.web_publishing +microsoft.public.inetexplorer.ie4.web_server +microsoft.public.inetexplorer.ie5.outlookexpress.stationery +microsoft.public.inetexplorer.ie5beta.add_ons +microsoft.public.inetexplorer.ie5beta.browser +microsoft.public.inetexplorer.ie5beta.info_delivery +microsoft.public.inetexplorer.ie5beta.netmeetingchat +microsoft.public.inetexplorer.ie5beta.onlineservices +microsoft.public.inetexplorer.ie5beta.outlookexpress +microsoft.public.inetexplorer.ie5beta.programming.active_desktop +microsoft.public.inetexplorer.ie5beta.programming.activexcontrol +microsoft.public.inetexplorer.ie5beta.programming.codedownload +microsoft.public.inetexplorer.ie5beta.programming.components.dhtml_editing +microsoft.public.inetexplorer.ie5beta.programming.components.webbrowser_ctl +microsoft.public.inetexplorer.ie5beta.programming.databinding +microsoft.public.inetexplorer.ie5beta.programming.dhtml.authoring +microsoft.public.inetexplorer.ie5beta.programming.dhtml.behaviors +microsoft.public.inetexplorer.ie5beta.programming.dhtml.scripting +microsoft.public.inetexplorer.ie5beta.programming.dhtml.scriptlets +microsoft.public.inetexplorer.ie5beta.programming.misc +microsoft.public.inetexplorer.ie5beta.programming.multimedia +microsoft.public.inetexplorer.ie5beta.programming.offline +microsoft.public.inetexplorer.ie5beta.programming.sbnworkshop +microsoft.public.inetexplorer.ie5beta.programming.urlmonikers +microsoft.public.inetexplorer.ie5beta.programming.wininet +microsoft.public.inetexplorer.ie5beta.programming.xml +microsoft.public.inetexplorer.ie5beta.setup +microsoft.public.inetexplorer.ie5beta.shell +microsoft.public.inetexplorer.ieak5.general +microsoft.public.inetexplorer.ieak5.wishlist +microsoft.public.inetexplorer.mac +microsoft.public.inetexplorer.nt +microsoft.public.inetexplorer.scripting +microsoft.public.inetexplorer.unix +microsoft.public.inetexplorer.win3 +microsoft.public.inetsdk.announcements +microsoft.public.inetsdk.control_pad +microsoft.public.inetsdk.doc_errors +microsoft.public.inetsdk.html_authoring +microsoft.public.inetsdk.programming.active_desktop +microsoft.public.inetsdk.programming.active_scrptng +microsoft.public.inetsdk.programming.comctl32 +microsoft.public.inetsdk.programming.components.design_time +microsoft.public.inetsdk.programming.components.dev +microsoft.public.inetsdk.programming.components.packaging +microsoft.public.inetsdk.programming.components.usage +microsoft.public.inetsdk.programming.data_awareness +microsoft.public.inetsdk.programming.dhtml_editing +microsoft.public.inetsdk.programming.docobjects +microsoft.public.inetsdk.programming.html_objmodel +microsoft.public.inetsdk.programming.hyperlnkng_api +microsoft.public.inetsdk.programming.info_delivery +microsoft.public.inetsdk.programming.mshtml_hosting +microsoft.public.inetsdk.programming.mstask +microsoft.public.inetsdk.programming.multimedia +microsoft.public.inetsdk.programming.scripting.jscript +microsoft.public.inetsdk.programming.scripting.vbscript +microsoft.public.inetsdk.programming.shell_objmodel +microsoft.public.inetsdk.programming.urlmonikers +microsoft.public.inetsdk.programming.webbrowser_ctl +microsoft.public.inetsdk.programming.wininet +microsoft.public.inetsdk.sdk_setup +microsoft.public.inetserver.asp.components +microsoft.public.inetserver.asp.db +microsoft.public.inetserver.asp.general +microsoft.public.inetserver.dbweb +microsoft.public.inetserver.iis +microsoft.public.inetserver.iis.activeserverpages +microsoft.public.inetserver.iis.security +microsoft.public.inetserver.iis.tripoli +microsoft.public.inetserver.indexserver +microsoft.public.inetserver.misc +microsoft.public.inetserver.webtool +microsoft.public.internet.activex.conferencing.sdk +microsoft.public.internet.activexconferencing.sdk +microsoft.public.internet.cm_cmak +microsoft.public.internet.cps +microsoft.public.internet.explorer.ieak +microsoft.public.internet.explorer.java +microsoft.public.internet.mail +microsoft.public.internet.mail.mac +microsoft.public.internet.mschat +microsoft.public.internet.netmeeting +microsoft.public.internet.netmeeting.beta +microsoft.public.internet.news +microsoft.public.internet.news.mac +microsoft.public.internet.news.reader.software +microsoft.public.internet.outlookexpress.mac +microsoft.public.internet.personalwebserv +microsoft.public.internet.personwebserv +microsoft.public.internet.personwebserv.mac +microsoft.public.internet.radius +microsoft.public.internetexplorer +microsoft.public.internetexplorer.ie4 +microsoft.public.internetexplorer.ieak +microsoft.public.internetexplorer.java +microsoft.public.internetexplorer.mac +microsoft.public.internetexplorer.nt +microsoft.public.internetexplorer.win95 +microsoft.public.investor +microsoft.public.investor.discussions +microsoft.public.investor40.beta +microsoft.public.isa +microsoft.public.isa.enterprise +microsoft.public.isa.sdk-dev +microsoft.public.isaserver +microsoft.public.ja.inetexplorer.ie55beta +microsoft.public.java.activex +microsoft.public.java.afc +microsoft.public.java.cab +microsoft.public.java.directxj +microsoft.public.java.jdirect +microsoft.public.java.macvm +microsoft.public.java.sdk +microsoft.public.java.security +microsoft.public.java.vm +microsoft.public.java.win16vm +microsoft.public.kids +microsoft.public.knowledgemgmt +microsoft.public.liquidmotion +microsoft.public.liquidmotion.beta +microsoft.public.liquidmotion.discuss +microsoft.public.lrn +microsoft.public.mac.explorer +microsoft.public.mac.messenger +microsoft.public.mac.office +microsoft.public.mac.office.entourage +microsoft.public.mac.office.excel +microsoft.public.mac.office.word +microsoft.public.mac.otherproducts +microsoft.public.macintosh.general +microsoft.public.magazines.mind +microsoft.public.magazines.msj +microsoft.public.mail.admin +microsoft.public.mail.connectivity +microsoft.public.mail.misc +microsoft.public.management.mmc +microsoft.public.mappoint +microsoft.public.masm +microsoft.public.mcis +microsoft.public.mcis.addressbook +microsoft.public.mcis.announcements +microsoft.public.mcis.beta.crs.sdk +microsoft.public.mcis.beta.webmapper.issues +microsoft.public.mcis.chatserver +microsoft.public.mcis.crs +microsoft.public.mcis.locatorserver +microsoft.public.mcis.mailserver +microsoft.public.mcis.membership +microsoft.public.mcis.mps +microsoft.public.mcis.newserver +microsoft.public.mcis.suggestions +microsoft.public.mdac +microsoft.public.mediamanager.discussion +microsoft.public.merchantserver +microsoft.public.messaging.misc +microsoft.public.metadirectory +microsoft.public.microsoft.transaction.server.administration.security +microsoft.public.microsoft.transaction.server.announcements +microsoft.public.microsoft.transaction.server.integration +microsoft.public.microsoft.transaction.server.programming +microsoft.public.microsofthardware.products +microsoft.public.microsofttransactionserver.programming +microsoft.public.mifst.client +microsoft.public.mifst.gateway +microsoft.public.mobility.miserver +microsoft.public.mom +microsoft.public.money +microsoft.public.moneycentral +microsoft.public.msaccess.chat +microsoft.public.msagent +microsoft.public.msdn.drgui.drguidotnet.discussion +microsoft.public.msdn.duwamish +microsoft.public.msdn.general +microsoft.public.msdn.soaptoolkit +microsoft.public.msdn.webservices +microsoft.public.msdn.win98.beta.unmonitored.discussion +microsoft.public.msdntraining.trainer.discussion +microsoft.public.mshardware.product +microsoft.public.msinvester +microsoft.public.msmq.deployment +microsoft.public.msmq.interop +microsoft.public.msmq.networking +microsoft.public.msmq.performance +microsoft.public.msmq.programming +microsoft.public.msmq.security +microsoft.public.msmq.setup +microsoft.public.msn.discussion +microsoft.public.msn.netnews.discussion +microsoft.public.mts.administration.security +microsoft.public.mts.programming +microsoft.public.mts.server.integration +microsoft.public.multimedia +microsoft.public.multimedia.directx.danimation.controls +microsoft.public.multimedia.directx.danimation.programming +microsoft.public.multimedia.directx.dshow.activemovie +microsoft.public.multimedia.directx.dshow.programming +microsoft.public.multimedia.directx.dtransform +microsoft.public.multimedia.windows.mediaplayer +microsoft.public.music.products +microsoft.public.musicproducer.discussion +microsoft.public.netiquette +microsoft.public.netshow +microsoft.public.netshow.beta +microsoft.public.netshow.live +microsoft.public.netshow.ondemand +microsoft.public.netspeechsdk +microsoft.public.news.server +microsoft.public.news.server.lists +microsoft.public.no.ie4 +microsoft.public.nordic.ie30 +microsoft.public.nordic.ie40 +microsoft.public.nordic.win98.beta +microsoft.public.objectspaces +microsoft.public.odbc.sdk +microsoft.public.ofc +microsoft.public.office +microsoft.public.office.access.activexcontrol +microsoft.public.office.access.devtoolkits +microsoft.public.office.access.forms +microsoft.public.office.access.formscoding +microsoft.public.office.binders +microsoft.public.office.developer.active.documents +microsoft.public.office.developer.automation +microsoft.public.office.developer.binary.file_format +microsoft.public.office.developer.clipboard.dde +microsoft.public.office.developer.com.add_ins +microsoft.public.office.developer.hosting.controls +microsoft.public.office.developer.internet_other +microsoft.public.office.developer.office.sdks +microsoft.public.office.developer.officedev.other +microsoft.public.office.developer.outlook.forms +microsoft.public.office.developer.outlook.vba +microsoft.public.office.developer.vba +microsoft.public.office.developer.web.components +microsoft.public.office.intranets +microsoft.public.office.mac +microsoft.public.office.mac.entourage +microsoft.public.office.misc +microsoft.public.office.officeresourcekit +microsoft.public.office.setup +microsoft.public.office.shortcutbar +microsoft.public.office97 +microsoft.public.officedev +microsoft.public.officeupdate +microsoft.public.oledb +microsoft.public.oledb.olap +microsoft.public.oledb.providers +microsoft.public.oledb.sdk +microsoft.public.oledb.specification +microsoft.public.oleds.beta +microsoft.public.opk.millennium +microsoft.public.opk.windows2000 +microsoft.public.opk.windows9x +microsoft.public.opk.windowsnt +microsoft.public.outlook +microsoft.public.outlook.addin_utility +microsoft.public.outlook.calendaring +microsoft.public.outlook.configuration +microsoft.public.outlook.contacts +microsoft.public.outlook.environment +microsoft.public.outlook.fax +microsoft.public.outlook.general +microsoft.public.outlook.imep +microsoft.public.outlook.installation +microsoft.public.outlook.interop +microsoft.public.outlook.mac +microsoft.public.outlook.migration +microsoft.public.outlook.printing +microsoft.public.outlook.program_addins +microsoft.public.outlook.program_forms +microsoft.public.outlook.program_vba +microsoft.public.outlook.teamfolders +microsoft.public.outlook.thirdpartyutil +microsoft.public.outlook.usage +microsoft.public.outlook97 +microsoft.public.outlook97.addin_utility +microsoft.public.outlook97.configuration +microsoft.public.outlook97.environment +microsoft.public.outlook97.imep +microsoft.public.outlook97.installation +microsoft.public.outlook97.interop +microsoft.public.outlook97.migration +microsoft.public.outlook97.program_forms +microsoft.public.outlook97.usage +microsoft.public.outlook98 +microsoft.public.photodraw.discussion +microsoft.public.pictureit +microsoft.public.platformsdk.active.directory +microsoft.public.platformsdk.adsi +microsoft.public.platformsdk.adsi.iis-admin +microsoft.public.platformsdk.base +microsoft.public.platformsdk.broadcast_arch +microsoft.public.platformsdk.com_ole +microsoft.public.platformsdk.complus_mts +microsoft.public.platformsdk.component_svcs +microsoft.public.platformsdk.database +microsoft.public.platformsdk.directx +microsoft.public.platformsdk.dist_svcs +microsoft.public.platformsdk.gdi +microsoft.public.platformsdk.graphics_mm +microsoft.public.platformsdk.graphics_mm.directx +microsoft.public.platformsdk.internet.client +microsoft.public.platformsdk.internet.server +microsoft.public.platformsdk.internet.server.isapi-dev +microsoft.public.platformsdk.localization +microsoft.public.platformsdk.mapi +microsoft.public.platformsdk.messaging +microsoft.public.platformsdk.msi +microsoft.public.platformsdk.mslayerforunicode +microsoft.public.platformsdk.multimedia +microsoft.public.platformsdk.networking +microsoft.public.platformsdk.networking.ipv6 +microsoft.public.platformsdk.sdk_install +microsoft.public.platformsdk.security +microsoft.public.platformsdk.shell +microsoft.public.platformsdk.telephony.tapi_2 +microsoft.public.platformsdk.telephony.tapi_3 +microsoft.public.platformsdk.telephony.tsp +microsoft.public.platformsdk.telephony.wte +microsoft.public.platformsdk.tools +microsoft.public.platformsdk.ui +microsoft.public.platformsdk.ui_shell +microsoft.public.platformsdk.win16 +microsoft.public.platformsdk.win_base_svcs +microsoft.public.plus +microsoft.public.pocketpc +microsoft.public.pocketpc.developer +microsoft.public.pocketpc.developer.networking +microsoft.public.pocketpc.marketplace +microsoft.public.pocketpc.multimedia +microsoft.public.powerpoint +microsoft.public.powerpoint.mac +microsoft.public.pptp95.beta.discussion +microsoft.public.producer +microsoft.public.project +microsoft.public.project.vba +microsoft.public.project2000 +microsoft.public.project2000.beta +microsoft.public.project2000.projectcentral +microsoft.public.proxy +microsoft.public.pt.ie30 +microsoft.public.pt.ie4 +microsoft.public.publisher +microsoft.public.publisher.prepress +microsoft.public.publisher.webdesign +microsoft.public.repository +microsoft.public.sapi5.beta +microsoft.public.sbk.millennium +microsoft.public.sbk.windows2000 +microsoft.public.sbk.windows9x +microsoft.public.sbk.windowsnt +microsoft.public.sbs.pre-rel.general +microsoft.public.scripting.debugger +microsoft.public.scripting.hosting +microsoft.public.scripting.jscript +microsoft.public.scripting.remote +microsoft.public.scripting.scriptlets +microsoft.public.scripting.vbscript +microsoft.public.scripting.virus.discussion +microsoft.public.scripting.wsh +microsoft.public.security +microsoft.public.security.hfnetchk +microsoft.public.serverappliance +microsoft.public.servicesforunix.general +microsoft.public.sfn5.beta +microsoft.public.sfu20.beta +microsoft.public.sharepoint.portalserver +microsoft.public.sharepoint.portalserver.development +microsoft.public.sharepoint.teamservices +microsoft.public.sharepoint.teamservices.caml +microsoft.public.sharepointportalserver.docmgmt.portal.eng +microsoft.public.sharepointportalserver.installation.eng +microsoft.public.sharepointportalserver.portal.config.eng +microsoft.public.sharepointportalserver.portal.search.eng +microsoft.public.sharepointportalserver.scenarios.extranet +microsoft.public.sharepointportalserver.sdk.eng +microsoft.public.simulators +microsoft.public.site-server.commerce +microsoft.public.site-server.postingacceptr +microsoft.public.site-server.site-mgmt +microsoft.public.site-server.webpost +microsoft.public.siteserver.analysis +microsoft.public.siteserver.commerce +microsoft.public.siteserver.css +microsoft.public.siteserver.general +microsoft.public.siteserver.knowledgemgr +microsoft.public.siteserver.per-mbr +microsoft.public.siteserver.publishing +microsoft.public.siteserver.push +microsoft.public.siteserver.sdk +microsoft.public.siteserver.search +microsoft.public.sk.ie4 +microsoft.public.sl.ie30 +microsoft.public.sl.ie4 +microsoft.public.smallbiz.sbsisp +microsoft.public.sms.admin +microsoft.public.sms.installer +microsoft.public.sms.inventory +microsoft.public.sms.misc +microsoft.public.sms.netmon +microsoft.public.sms.rcdiags +microsoft.public.sms.setup +microsoft.public.sms.sharedapps +microsoft.public.sms.sitecomm +microsoft.public.sms.swdist +microsoft.public.sms.tools +microsoft.public.sms.win2k +microsoft.public.snaserver.administration +microsoft.public.snaserver.aftp +microsoft.public.snaserver.applets +microsoft.public.snaserver.client.unix +microsoft.public.snaserver.comti +microsoft.public.snaserver.misc +microsoft.public.snaserver.odbcdrda +microsoft.public.snaserver.oledb +microsoft.public.snaserver.programming +microsoft.public.snaserver.programming.lu62 +microsoft.public.snaserver.programming.lua +microsoft.public.snaserver.programming.other +microsoft.public.snaserver.setup +microsoft.public.snaserver.setup.as400 +microsoft.public.snaserver.setup.client +microsoft.public.snaserver.setup.host +microsoft.public.snaserver.setup.other +microsoft.public.snaserver.snaras +microsoft.public.snaserver.thirdparty +microsoft.public.snaserver.tn3270 +microsoft.public.sourcesafe +microsoft.public.speech_tech +microsoft.public.speech_tech.sdk +microsoft.public.sphinx.msdss +microsoft.public.sqlserver +microsoft.public.sqlserver.ce +microsoft.public.sqlserver.clients +microsoft.public.sqlserver.clustering +microsoft.public.sqlserver.connect +microsoft.public.sqlserver.datamining +microsoft.public.sqlserver.datawarehouse +microsoft.public.sqlserver.dts +microsoft.public.sqlserver.fulltext +microsoft.public.sqlserver.jdbcdriver +microsoft.public.sqlserver.misc +microsoft.public.sqlserver.mseq +microsoft.public.sqlserver.odbc +microsoft.public.sqlserver.olap +microsoft.public.sqlserver.programming +microsoft.public.sqlserver.replication +microsoft.public.sqlserver.security +microsoft.public.sqlserver.server +microsoft.public.sqlserver.setup +microsoft.public.sqlserver.tools +microsoft.public.sqlserver.workshop +microsoft.public.sqlserver.xml +microsoft.public.sqlxml.viewmapper +microsoft.public.standard.iso15740 +microsoft.public.streets-trips +microsoft.public.sv.ie4 +microsoft.public.sv.inetexplorer.ie5beta +microsoft.public.taxsaver +microsoft.public.teammanager +microsoft.public.technet +microsoft.public.technet.howtofeedback +microsoft.public.technet.howtoneeds +microsoft.public.test +microsoft.public.th.products +microsoft.public.theater +microsoft.public.uddi.programming +microsoft.public.usageanalyst +microsoft.public.usasalesinfo.backoffice +microsoft.public.usasalesinfo.developer.foxpro +microsoft.public.usasalesinfo.developer.internet +microsoft.public.usasalesinfo.developer.multimedia +microsoft.public.usasalesinfo.developer.sdk-ddk +microsoft.public.usasalesinfo.developer.visualbasic +microsoft.public.usasalesinfo.developer.visualtools +microsoft.public.usasalesinfo.exchange +microsoft.public.usasalesinfo.internetserver +microsoft.public.usasalesinfo.msmail +microsoft.public.usasalesinfo.sna-sms +microsoft.public.usasalesinfo.sqlserver +microsoft.public.vb +microsoft.public.vb.3rdparty +microsoft.public.vb.6.webdevelopment +microsoft.public.vb.addins +microsoft.public.vb.bugs +microsoft.public.vb.com +microsoft.public.vb.controls +microsoft.public.vb.controls.creation +microsoft.public.vb.controls.databound +microsoft.public.vb.controls.internet +microsoft.public.vb.crystal +microsoft.public.vb.database +microsoft.public.vb.database.ado +microsoft.public.vb.database.dao +microsoft.public.vb.database.odbc +microsoft.public.vb.database.rdo +microsoft.public.vb.dataenvreport +microsoft.public.vb.deployment +microsoft.public.vb.directx +microsoft.public.vb.dos +microsoft.public.vb.enterprise +microsoft.public.vb.general +microsoft.public.vb.general.discussion +microsoft.public.vb.installation +microsoft.public.vb.ole +microsoft.public.vb.ole.automation +microsoft.public.vb.ole.cdk +microsoft.public.vb.ole.servers +microsoft.public.vb.ownersarea +microsoft.public.vb.setupwiz +microsoft.public.vb.syntax +microsoft.public.vb.vbce +microsoft.public.vb.visual_modeler +microsoft.public.vb.webclasses +microsoft.public.vb.winapi +microsoft.public.vb.winapi.graphics +microsoft.public.vb.winapi.networks +microsoft.public.vb.yellowpages +microsoft.public.vc +microsoft.public.vc.3rdparty +microsoft.public.vc.activex.templatelib +microsoft.public.vc.activextemplatelib +microsoft.public.vc.atl +microsoft.public.vc.database +microsoft.public.vc.debugger +microsoft.public.vc.etk +microsoft.public.vc.events +microsoft.public.vc.ide_general +microsoft.public.vc.language +microsoft.public.vc.language.macintosh +microsoft.public.vc.mfc +microsoft.public.vc.mfc.docview +microsoft.public.vc.mfc.macintosh +microsoft.public.vc.mfcdatabase +microsoft.public.vc.mfcole +microsoft.public.vc.online_help +microsoft.public.vc.project_mgt +microsoft.public.vc.res_editing +microsoft.public.vc.source_editing +microsoft.public.vc.stl +microsoft.public.vc.utilities +microsoft.public.vc.vcce +microsoft.public.vc.yellowpages +microsoft.public.vcbeta.tech_preview +microsoft.public.vchat +microsoft.public.vi.debugging +microsoft.public.vi.dtc +microsoft.public.vi.general +microsoft.public.vi.setup +microsoft.public.vinterdev +microsoft.public.visio +microsoft.public.visio.createshapes +microsoft.public.visio.database.modeling +microsoft.public.visio.developer.diagrams +microsoft.public.visio.developer.shapesheet +microsoft.public.visio.developer.vba +microsoft.public.visio.developer.vc +microsoft.public.visio.feedback +microsoft.public.visio.filters +microsoft.public.visio.general +microsoft.public.visio.installation +microsoft.public.visio.networkdesign.documentation +microsoft.public.visio.printing +microsoft.public.visio.productnews +microsoft.public.visio.software.modeling +microsoft.public.visio.troubleshoot +microsoft.public.visio.wizards +microsoft.public.vision_tech.sdk +microsoft.public.visual.sourcesafe +microsoft.public.visualj.com-support +microsoft.public.visualj.compiler +microsoft.public.visualj.debugger +microsoft.public.visualj.dev-environment +microsoft.public.visualj.discussion +microsoft.public.visualj.installation +microsoft.public.visualj.misc-tools +microsoft.public.visualtest +microsoft.public.vizact2000 +microsoft.public.vsnet.act +microsoft.public.vsnet.documentation +microsoft.public.vsnet.general +microsoft.public.vsnet.ide +microsoft.public.vsnet.setup +microsoft.public.vsnet.vss +microsoft.public.vstudio.development +microsoft.public.vstudio.general +microsoft.public.vstudio.helpauthoring +microsoft.public.vstudio.repository +microsoft.public.vstudio.setup +microsoft.public.vstudio.sourcesafe +microsoft.public.wallet.discussion +microsoft.public.wbem +microsoft.public.wce21.preview +microsoft.public.webdesign.html +microsoft.public.webservices +microsoft.public.webservices.toolkit +microsoft.public.webstoragesystem.development +microsoft.public.webstoragesystem.sdk.eng +microsoft.public.whistler.advanced-server.general +microsoft.public.win16.programmer.gdi +microsoft.public.win16.programmer.kernel +microsoft.public.win16.programmer.networks +microsoft.public.win16.programmer.pen +microsoft.public.win16.programmer.tools +microsoft.public.win16.programmer.ui +microsoft.public.win2000 +microsoft.public.win2000.active_directory +microsoft.public.win2000.advanced_server +microsoft.public.win2000.applications +microsoft.public.win2000.cmdprompt.admin +microsoft.public.win2000.developer +microsoft.public.win2000.dns +microsoft.public.win2000.enable +microsoft.public.win2000.fax +microsoft.public.win2000.file_system +microsoft.public.win2000.games +microsoft.public.win2000.general +microsoft.public.win2000.group_policy +microsoft.public.win2000.hardware +microsoft.public.win2000.macintosh +microsoft.public.win2000.msi +microsoft.public.win2000.multimedia +microsoft.public.win2000.netware +microsoft.public.win2000.networking +microsoft.public.win2000.new_user +microsoft.public.win2000.printing +microsoft.public.win2000.ras_routing +microsoft.public.win2000.registry +microsoft.public.win2000.security +microsoft.public.win2000.setup +microsoft.public.win2000.setup_deployment +microsoft.public.win2000.setup_upgrade +microsoft.public.win2000.termserv.apps +microsoft.public.win2000.termserv.clients +microsoft.public.win2000.windows_update +microsoft.public.win32.programmer +microsoft.public.win32.programmer.3rdparty +microsoft.public.win32.programmer.directx +microsoft.public.win32.programmer.directx.audio +microsoft.public.win32.programmer.directx.graphics +microsoft.public.win32.programmer.directx.misc +microsoft.public.win32.programmer.directx.networking +microsoft.public.win32.programmer.directx.sdk +microsoft.public.win32.programmer.directx.video +microsoft.public.win32.programmer.gdi +microsoft.public.win32.programmer.installwizard.beta +microsoft.public.win32.programmer.international +microsoft.public.win32.programmer.kernel +microsoft.public.win32.programmer.mapi +microsoft.public.win32.programmer.messaging +microsoft.public.win32.programmer.mmedia +microsoft.public.win32.programmer.networks +microsoft.public.win32.programmer.ole +microsoft.public.win32.programmer.pen +microsoft.public.win32.programmer.rtc +microsoft.public.win32.programmer.tapi +microsoft.public.win32.programmer.tapi.beta +microsoft.public.win32.programmer.tools +microsoft.public.win32.programmer.ui +microsoft.public.win32.programmer.wince +microsoft.public.win32.programmer.wmi +microsoft.public.win32.programmer.yellowpages +microsoft.public.win3x_wfw_dos +microsoft.public.win95 +microsoft.public.win95.coffeehouse.chat +microsoft.public.win95.commtelephony +microsoft.public.win95.dialupnetwork +microsoft.public.win95.dialupnetworking +microsoft.public.win95.exchangefax +microsoft.public.win95.filediskmanage +microsoft.public.win95.filediskmanagement +microsoft.public.win95.general +microsoft.public.win95.general.discussion +microsoft.public.win95.msdosapps +microsoft.public.win95.multimedia +microsoft.public.win95.networking +microsoft.public.win95.printfontvideo +microsoft.public.win95.printingfontsvideo +microsoft.public.win95.setup +microsoft.public.win95.shellui +microsoft.public.win95.win95applets +microsoft.public.win98 +microsoft.public.win98.apps +microsoft.public.win98.comm.dun +microsoft.public.win98.comm.modem +microsoft.public.win98.disks.general +microsoft.public.win98.display.general +microsoft.public.win98.display.multi_monitor +microsoft.public.win98.fat32 +microsoft.public.win98.gen_discussion +microsoft.public.win98.internet +microsoft.public.win98.internet.active_desktop +microsoft.public.win98.internet.browser +microsoft.public.win98.internet.netmeeting +microsoft.public.win98.internet.outlookexpress +microsoft.public.win98.internet.windows_update +microsoft.public.win98.msinfo32 +microsoft.public.win98.multimedia +microsoft.public.win98.multimedia.directx5 +microsoft.public.win98.networking +microsoft.public.win98.performance +microsoft.public.win98.pnp +microsoft.public.win98.power_mgmt +microsoft.public.win98.pptp +microsoft.public.win98.printing +microsoft.public.win98.pws_4 +microsoft.public.win98.scanreg +microsoft.public.win98.setup +microsoft.public.win98.setup.win31 +microsoft.public.win98.shell +microsoft.public.win98.sys_file_check +microsoft.public.win98.taskscheduler +microsoft.public.win98.webtv +microsoft.public.windbg +microsoft.public.windna.components +microsoft.public.windna.deployment +microsoft.public.windna.general +microsoft.public.windna.security +microsoft.public.windows.chromeffects +microsoft.public.windows.inetexplorer.ie5.add_ons +microsoft.public.windows.inetexplorer.ie5.browser +microsoft.public.windows.inetexplorer.ie5.gen.discussion +microsoft.public.windows.inetexplorer.ie5.icw +microsoft.public.windows.inetexplorer.ie5.info_delivery +microsoft.public.windows.inetexplorer.ie5.msn +microsoft.public.windows.inetexplorer.ie5.netmeeting.chat +microsoft.public.windows.inetexplorer.ie5.onlineservices +microsoft.public.windows.inetexplorer.ie5.outlookexpress +microsoft.public.windows.inetexplorer.ie5.outlookexpress.stationery +microsoft.public.windows.inetexplorer.ie5.programming.active_desktop +microsoft.public.windows.inetexplorer.ie5.programming.activexcontrol +microsoft.public.windows.inetexplorer.ie5.programming.codedownload +microsoft.public.windows.inetexplorer.ie5.programming.components.dhtml_editing +microsoft.public.windows.inetexplorer.ie5.programming.components.webbrowser_ctl +microsoft.public.windows.inetexplorer.ie5.programming.databinding +microsoft.public.windows.inetexplorer.ie5.programming.dhtml +microsoft.public.windows.inetexplorer.ie5.programming.dhtml.authoring +microsoft.public.windows.inetexplorer.ie5.programming.dhtml.behaviors +microsoft.public.windows.inetexplorer.ie5.programming.dhtml.scripting +microsoft.public.windows.inetexplorer.ie5.programming.dhtml.scriptlets +microsoft.public.windows.inetexplorer.ie5.programming.htmlgtime +microsoft.public.windows.inetexplorer.ie5.programming.misc +microsoft.public.windows.inetexplorer.ie5.programming.multimedia +microsoft.public.windows.inetexplorer.ie5.programming.offline +microsoft.public.windows.inetexplorer.ie5.programming.sbnworkshop +microsoft.public.windows.inetexplorer.ie5.programming.urlmonikers +microsoft.public.windows.inetexplorer.ie5.programming.wininet +microsoft.public.windows.inetexplorer.ie5.programming.xml +microsoft.public.windows.inetexplorer.ie5.setup +microsoft.public.windows.inetexplorer.ie5.shell +microsoft.public.windows.inetexplorer.ie5.win31 +microsoft.public.windows.inetexplorer.ie55.add_ons +microsoft.public.windows.inetexplorer.ie55.browser +microsoft.public.windows.inetexplorer.ie55.outlookexpress +microsoft.public.windows.inetexplorer.ie55.outlookexpress.stationery +microsoft.public.windows.inetexplorer.ie55.programming +microsoft.public.windows.inetexplorer.ie55.programming.css +microsoft.public.windows.inetexplorer.ie55.programming.dhtml +microsoft.public.windows.inetexplorer.ie55.programming.dhtml.authoring +microsoft.public.windows.inetexplorer.ie55.programming.dhtml.behaviors +microsoft.public.windows.inetexplorer.ie55.programming.dhtml.scripting +microsoft.public.windows.inetexplorer.ie55.programming.webbrowser_ctl +microsoft.public.windows.inetexplorer.ie55.setup +microsoft.public.windows.inetexplorer.ie55beta.browser +microsoft.public.windows.inetexplorer.ie55beta.ieak +microsoft.public.windows.inetexplorer.ie55beta.outlookexpress +microsoft.public.windows.inetexplorer.ie55beta.setup +microsoft.public.windows.inetexplorer.ie6.browser +microsoft.public.windows.inetexplorer.ie6.ieak +microsoft.public.windows.inetexplorer.ie6.outlookexpress +microsoft.public.windows.inetexplorer.ie6.outlookexpress.wishlist +microsoft.public.windows.inetexplorer.ie6.setup +microsoft.public.windows.inetexplorer.ie6_outlookexpress +microsoft.public.windows.inetexplorer.ie6_outlookexpress.stationery +microsoft.public.windows.inetexplorer.ie6beta.browser +microsoft.public.windows.mediacenter +microsoft.public.windows95 +microsoft.public.windows95.oemdsp.preinstall +microsoft.public.windowscard +microsoft.public.windowsce +microsoft.public.windowsce.app.development +microsoft.public.windowsce.beta.msmq +microsoft.public.windowsce.beta.webserver +microsoft.public.windowsce.developer.betas +microsoft.public.windowsce.developer.embedded.beta +microsoft.public.windowsce.embedded +microsoft.public.windowsce.embedded.vb +microsoft.public.windowsce.embedded.vc +microsoft.public.windowsce.platbuilder +microsoft.public.windowsce.platbuilder.beta +microsoft.public.windowsce.talisker.techpreview +microsoft.public.windowsce.targeted.device +microsoft.public.windowsdnafs.discussion +microsoft.public.windowsme.display +microsoft.public.windowsme.games +microsoft.public.windowsme.general +microsoft.public.windowsme.hardware +microsoft.public.windowsme.internet +microsoft.public.windowsme.moviemaker +microsoft.public.windowsme.multimedia +microsoft.public.windowsme.networking +microsoft.public.windowsme.new-user +microsoft.public.windowsme.powermgmt +microsoft.public.windowsme.printing +microsoft.public.windowsme.setup +microsoft.public.windowsme.software +microsoft.public.windowsme.systemtools +microsoft.public.windowsmedia +microsoft.public.windowsmedia.drm +microsoft.public.windowsmedia.encoder +microsoft.public.windowsmedia.player +microsoft.public.windowsmedia.player.mac +microsoft.public.windowsmedia.player.skins +microsoft.public.windowsmedia.player.visualizations +microsoft.public.windowsmedia.player.web +microsoft.public.windowsmedia.server +microsoft.public.windowsmedia.technologies +microsoft.public.windowsmedia.technologies.beta +microsoft.public.windowsmedia.tools +microsoft.public.windowsnt +microsoft.public.windowsnt.apps +microsoft.public.windowsnt.dfs +microsoft.public.windowsnt.dns +microsoft.public.windowsnt.domain +microsoft.public.windowsnt.dsmnfpnw +microsoft.public.windowsnt.embedded +microsoft.public.windowsnt.fsft +microsoft.public.windowsnt.gsnw-csnw +microsoft.public.windowsnt.mac +microsoft.public.windowsnt.mail +microsoft.public.windowsnt.misc +microsoft.public.windowsnt.oemdsp.preinstall +microsoft.public.windowsnt.personalfax +microsoft.public.windowsnt.print +microsoft.public.windowsnt.protocol.ipx +microsoft.public.windowsnt.protocol.misc +microsoft.public.windowsnt.protocol.ras +microsoft.public.windowsnt.protocol.routing +microsoft.public.windowsnt.protocol.tcpip +microsoft.public.windowsnt.registry +microsoft.public.windowsnt.setup +microsoft.public.windowsnt.steelhead +microsoft.public.windowsnt.terminalserver.applications +microsoft.public.windowsnt.terminalserver.client +microsoft.public.windowsnt.terminalserver.connectivity +microsoft.public.windowsnt.terminalserver.domain +microsoft.public.windowsnt.terminalserver.hardware +microsoft.public.windowsnt.terminalserver.misc +microsoft.public.windowsnt.terminalserver.protocols.rdp +microsoft.public.windowsnt.terminalserver.protocols.tcpip +microsoft.public.windowsnt.terminalserver.setup +microsoft.public.windowsnt.terminalserver.user +microsoft.public.windowsnt.wntsee +microsoft.public.windowsnt.wolfpack +microsoft.public.windowsnt.wolfpack.sdk +microsoft.public.windowsxp +microsoft.public.windowsxp.accessibility +microsoft.public.windowsxp.basics +microsoft.public.windowsxp.beta.general +microsoft.public.windowsxp.customize +microsoft.public.windowsxp.device_driver.dev +microsoft.public.windowsxp.device_drivers +microsoft.public.windowsxp.embedded +microsoft.public.windowsxp.games +microsoft.public.windowsxp.general +microsoft.public.windowsxp.hardware +microsoft.public.windowsxp.help_and_support +microsoft.public.windowsxp.messenger +microsoft.public.windowsxp.music +microsoft.public.windowsxp.network_web +microsoft.public.windowsxp.newusers +microsoft.public.windowsxp.perform_maintain +microsoft.public.windowsxp.photos +microsoft.public.windowsxp.print_fax +microsoft.public.windowsxp.security_admin +microsoft.public.windowsxp.setup_deployment +microsoft.public.windowsxp.video +microsoft.public.windowsxp.work_remotely +microsoft.public.winnt50.beta.administration +microsoft.public.winnt50.beta.applications +microsoft.public.winnt50.beta.dial_up.networking +microsoft.public.winnt50.beta.directory.services +microsoft.public.winnt50.beta.distributed.file_system +microsoft.public.winnt50.beta.file_system +microsoft.public.winnt50.beta.general +microsoft.public.winnt50.beta.hardware +microsoft.public.winnt50.beta.internet.iexplorer +microsoft.public.winnt50.beta.internet.server +microsoft.public.winnt50.beta.macintosh.interop +microsoft.public.winnt50.beta.netware.interop +microsoft.public.winnt50.beta.networking +microsoft.public.winnt50.beta.networking.protocols +microsoft.public.winnt50.beta.other +microsoft.public.winnt50.beta.pnp_powermgmt +microsoft.public.winnt50.beta.printing +microsoft.public.winnt50.beta.ras_routing +microsoft.public.winnt50.beta.security +microsoft.public.winnt50.beta.setup.installation +microsoft.public.winnt50.beta.setup.installation.deployment +microsoft.public.winnt50.beta.setup.installation.drivers +microsoft.public.winnt50.beta.setup.installation.other +microsoft.public.winnt50.beta.setup.installation.plug_and_play +microsoft.public.winnt50.beta.setup.installation.upgrade +microsoft.public.winnt50.beta.setup.installation.upgrade.windows95 +microsoft.public.winnt50.beta.user_interface +microsoft.public.winnt50.beta.zero_admin +microsoft.public.wmp.beta.mac +microsoft.public.word +microsoft.public.word.application.errors +microsoft.public.word.applicationerrors +microsoft.public.word.conversions +microsoft.public.word.customization.menustoolbars +microsoft.public.word.docmanagement +microsoft.public.word.drawing.graphics +microsoft.public.word.formatting.longdocs +microsoft.public.word.formattinglongdocs +microsoft.public.word.general +microsoft.public.word.international.features +microsoft.public.word.internet.assistant +microsoft.public.word.internetassistant +microsoft.public.word.mac +microsoft.public.word.macword200 +microsoft.public.word.macword5-6 +microsoft.public.word.macword98 +microsoft.public.word.mail +microsoft.public.word.mailmerge.fields +microsoft.public.word.mailmergefields +microsoft.public.word.newusers +microsoft.public.word.nonwindows +microsoft.public.word.numbering +microsoft.public.word.oleinterop +microsoft.public.word.pagelayout +microsoft.public.word.printingfonts +microsoft.public.word.programming +microsoft.public.word.setup.networking +microsoft.public.word.setupnetworking +microsoft.public.word.spelling.grammar +microsoft.public.word.tables +microsoft.public.word.vba +microsoft.public.word.vba.addins +microsoft.public.word.vba.beginners +microsoft.public.word.vba.customization +microsoft.public.word.vba.general +microsoft.public.word.vba.userforms +microsoft.public.word.web.authoring +microsoft.public.word.word6-7macros +microsoft.public.word.word97vba +microsoft.public.word.wordbasic +microsoft.public.works.dos +microsoft.public.works.mac +microsoft.public.works.win +microsoft.public.xbox +microsoft.public.xbox.amped +microsoft.public.xbox.azurik +microsoft.public.xbox.bloodwake +microsoft.public.xbox.doa3 +microsoft.public.xbox.games +microsoft.public.xbox.halo +microsoft.public.xbox.munchsoddysee +microsoft.public.xbox.nbainsidedrive +microsoft.public.xbox.nflfever2002 +microsoft.public.xbox.projectgothamracing +microsoft.public.xml +microsoft.public.xml.msxml-webrelease +microsoft.public.xml.soap +microsoft.public.xml.soapsdk +microsoft.public.xml.xmlsqlwebrelease +microsoft.public.xsl +microsoft.public.year2000 +microsoft.public.zone.beta +microsoft.windows +microsoft.windows.crash.crash.crash +midlands.adverts +mindspring.marketplace.forsale +mindspring.marketplace.misc +mindspring.www +misc +misc.activism.anti-fascism.announce +misc.activism.anti-fascism.tactics +misc.activism.anti-porn +misc.activism.cannabis +misc.activism.militia +misc.activism.progressive +misc.answers +misc.biz +misc.books +misc.books.technical +misc.business +misc.business.consulting +misc.business.credit +misc.business.facilitators +misc.business.marketing +misc.business.marketing.moderated +misc.business.moderated +misc.business.product-dev +misc.business.records-mgmt +misc.comp.forsale +misc.computer.forsale +misc.computers +misc.computers.forsale +misc.computers.forsale.other +misc.computers.forsale.pc-clone +misc.consumer.house +misc.consumers +misc.consumers.frugal-living +misc.consumers.house +misc.consumers.house.homeowner-assn +misc.creativity +misc.education +misc.education.adult +misc.education.home-school +misc.education.home-school.christian +misc.education.home-school.misc +misc.education.language.english +misc.education.medical +misc.education.multimedia +misc.education.science +misc.emerg-services +misc.entrepeneurs +misc.entrepreneur +misc.entrepreneurs +misc.entrepreneurs.moderated +misc.facts.straight-dope +misc.fitness +misc.fitness.aerobic +misc.fitness.misc +misc.fitness.walking +misc.fitness.weights +misc.for-sale +misc.for.sale +misc.foresale +misc.foresale.computers +misc.foresale.wanted +misc.forsale +misc.forsale-computers +misc.forsale.comp +misc.forsale.computer +misc.forsale.computer.mac +misc.forsale.computer.other +misc.forsale.computer.pc-clone +misc.forsale.computers +misc.forsale.computers.d +misc.forsale.computers.discussion +misc.forsale.computers.mac +misc.forsale.computers.mac-specific.cards +misc.forsale.computers.mac-specific.cards.misc +misc.forsale.computers.mac-specific.cards.video +misc.forsale.computers.mac-specific.misc +misc.forsale.computers.mac-specific.portables +misc.forsale.computers.mac-specific.software +misc.forsale.computers.mac-specific.systems +misc.forsale.computers.memory +misc.forsale.computers.misc +misc.forsale.computers.modems +misc.forsale.computers.monitors +misc.forsale.computers.net-hardware +misc.forsale.computers.other +misc.forsale.computers.other.misc +misc.forsale.computers.other.software +misc.forsale.computers.other.systems +misc.forsale.computers.others +misc.forsale.computers.pc +misc.forsale.computers.pc-clone +misc.forsale.computers.pc-specific +misc.forsale.computers.pc-specific.audio +misc.forsale.computers.pc-specific.cards.misc +misc.forsale.computers.pc-specific.cards.video +misc.forsale.computers.pc-specific.misc +misc.forsale.computers.pc-specific.motherboards +misc.forsale.computers.pc-specific.portables +misc.forsale.computers.pc-specific.software +misc.forsale.computers.pc-specific.systems +misc.forsale.computers.printers +misc.forsale.computers.storage +misc.forsale.computers.wanted +misc.forsale.computers.workstation +misc.forsale.computers.workstations +misc.forsale.misc +misc.forsale.non-computer +misc.forsale.other +misc.forsale.pc-clone +misc.forsale.wanted +misc.fosale +misc.handicap +misc.headlines +misc.health +misc.health.aids +misc.health.alternative +misc.health.arthritis +misc.health.diabetes +misc.health.infertility +misc.health.injuries.rsi.misc +misc.health.injuries.rsi.moderated +misc.health.therapy.occupational +misc.immigration +misc.immigration.canada +misc.immigration.misc +misc.immigration.usa +misc.industry +misc.industry.electronics.marketplace +misc.industry.insurance +misc.industry.printing +misc.industry.pulp-and-paper +misc.industry.quality +misc.industry.safety.personal +misc.industry.utilities.electric +misc.int-property +misc.invest +misc.invest.canada +misc.invest.financial-plan +misc.invest.forex +misc.invest.funds +misc.invest.futures +misc.invest.index-futures +misc.invest.marketplace +misc.invest.misc +misc.invest.mutual-funds +misc.invest.options +misc.invest.precious-metals +misc.invest.real-estate +misc.invest.stocks +misc.invest.stocks.penny +misc.invest.technical +misc.job.offered +misc.jobs +misc.jobs.contract +misc.jobs.contract.resumes +misc.jobs.contracts +misc.jobs.cotract +misc.jobs.entrepeneurs +misc.jobs.entry +misc.jobs.fields.chemistry +misc.jobs.misc +misc.jobs.offered +misc.jobs.offered.entry +misc.jobs.offerred +misc.jobs.offers +misc.jobs.resumes +misc.jobs.wanted +misc.kids +misc.kids.breastfeeding +misc.kids.computer +misc.kids.consumers +misc.kids.health +misc.kids.info +misc.kids.moderated +misc.kids.pregnancy +misc.kids.vacation +misc.legal +misc.legal.computing +misc.legal.moderated +misc.misc +misc.news.bosnia +misc.news.east-europe.rferl +misc.news.internet.announce +misc.news.internet.discuss +misc.news.southasia +misc.predictions.registry +misc.rural +misc.sheep +misc.stocks.invest +misc.survivalism +misc.talk.politics +misc.taxes +misc.taxes.moderated +misc.test +misc.test.moderated +misc.transport.air-industry +misc.transport.air-industry.cargo +misc.transport.marine +misc.transport.misc +misc.transport.rail.americas +misc.transport.rail.australia-nz +misc.transport.rail.europe +misc.transport.rail.misc +misc.transport.road +misc.transport.trucking +misc.transport.urban-transit +misc.wanted +misc.writing +misc.writing.moderated +misc.writing.screenplays +miscjobs.offered +mit.aero.unified +mit.bboard +mit.eecs.discuss +mit.evat +mit.lcs.announce +mit.lcs.ciis-building.announce +mit.lcs.ciis-building.misc +mit.lcs.misc +mit.lcs.seminar +mit.media-lab.mas001 +mit.test +mlist.linux.8086 +mlist.linux.admin +mlist.linux.arm +mlist.linux.c-programming +mlist.linux.hams +mlist.linux.kernel +mlist.linux.msdos +mlist.linux.net +mlist.linux.raid +mlist.net-happenings +mlist.nfs-valinux +mobile.community.speakout.current_affairs +moldova.business +monterey.config +monterey.events +monterey.forsale +monterey.general +monterey.test +mot.forsale +mpc.lists.freebsd.questions +mtl +mtl.activism +mtl.forsale-vendre +mtl.freenet.org +mtl.general +mtl.jobs +mtl.musique.midi +mtl.test +mtl.vendre-forsale +muc.admin +muc.announce +muc.archive.admin +muc.archive.general +musicmakers.marketplace +mv.stat.simtel.news +mx.anuncios +na.forsale +nanaimo.forsale +nasa.infosystems.www.webmasters +nashville.general +nashville.scene +nb.biz +nb.forsale +nb.francais +nb.general +nb.jobs +nbg.config +nbg.flame +nbg.hack +nbg.lists +nbg.markt +nbg.motorrad +nbg.online +nbg.sonstiges +nbg.test +nbg.veranstaltungen +nbn.housing +nbn.market +nbn.misc +nbn.novato +nbn.westmarin +nbnet.forsale +nbnet.francais +nbu.free +nc.charlotte.entertainment +nc.charlotte.forsale +nc.charlotte.forsale.comp +nc.charlotte.general +nc.charlotte.sports +nc.config +nc.fayetteville.online +nc.forsale +nc.general +nc.jobs +nc.western +ncar.weather +nccu.jour.univnews +ne.weather +net.announce +net.aquaria +net.aquaria.config +net.aquaria.marine +net.aviation.aerobatics +net.aviation.announcements +net.aviation.homebuilt +net.aviation.ifr +net.aviation.marketplace +net.aviation.military +net.aviation.piloting +net.aviation.rotorcraft +net.aviation.simulators +net.aviation.students +net.aviation.ultralight +net.bicycles.activism +net.bicycles.config +net.bicycles.general +net.bicycles.marketplace +net.bizarre +net.computers.datacom +net.computers.email.qmail +net.computers.embedded +net.computers.os.other +net.computers.os.unix.linux +net.computers.os.unix.rhapsody +net.computers.os.unix.solaris +net.computers.other +net.computers.telecom +net.config +net.config.feed-requests +net.config.leaks +net.config.unsound-sites +net.control +net.crafts.general +net.crafts.general.marketplace.commercial +net.crafts.general.marketplace.private +net.crafts.metalworking.general +net.crafts.textiles.general +net.crafts.textiles.marketplace.commercial +net.crafts.textiles.marketplace.private +net.crafts.woodworking.general +net.crafts.zymurgy.general +net.current-events.general +net.education.general +net.food.advocacy +net.food.announce +net.food.asian +net.food.bread +net.food.chocolate +net.food.coffee-klatch +net.food.desserts +net.food.drink.beer +net.food.drink.liquor +net.food.drink.wine +net.food.healthy +net.food.japanese +net.food.pizza +net.food.spicy +net.food.veg.cookery +net.food.veg.lifestyle +net.games.roleplaying.advocacy +net.games.roleplaying.announce +net.games.roleplaying.general +net.games.roleplaying.marketplace +net.games.roleplaying.theory +net.general +net.genre.config +net.genre.other +net.genre.sf.babylon5 +net.genre.sf.config +net.genre.sf.fandom +net.genre.sf.movies +net.genre.sf.other +net.genre.sf.star-trek +net.genre.sf.star-wars +net.genre.sf.tv +net.genre.sf.written +net.history.general +net.humour.bawdy +net.humour.config +net.humour.funny +net.humour.off-colour +net.humour.religion +net.internet.dns.names +net.internet.dns.policy +net.lycanthropy +net.media.electronic +net.media.film-industry +net.media.movies +net.media.other +net.media.print +net.media.tv +net.medicine.clinical.general +net.medicine.education.general +net.medicine.policy.general +net.medicine.public-health.drugs +net.medicine.public-health.general +net.medicine.research.general +net.medicine.support.general +net.medicine.veterinary.general +net.music.classical.general +net.music.general +net.music.style.metal +net.music.style.ska +net.music.world.general +net.origins +net.religion.announce +net.religion.flame +net.religion.interfaith +net.religion.policy +net.science.biology.evolution +net.science.biology.misc +net.science.chemistry.misc +net.science.geology.misc +net.science.misc +net.science.physics.misc +net.sexuality +net.sexuality.bondage +net.sexuality.general +net.sexuality.motss +net.sexuality.stories +net.sexuality.stories.discuss +net.sport.config +net.sport.football.ncaa +net.sport.football.nfl +net.sport.general +net.sport.hockey +net.subculture.gothic +net.subculture.tasteless +net.subculture.usenet +net.support.abuse.sexual +net.support.addiction.misc +net.support.announce +net.support.config +net.support.grief +net.support.psych.misc +net.test +net.theatre.acting +net.theatre.announce +net.theatre.musicals +net.theatre.plays +net.theatre.stagecraft +net.writing.general +net.writing.roleplaying.in-character.announce +net.writing.roleplaying.in-character.misc +net157.chat157 +net157.region11 +netbeans.modules.javacvs.dev +netbeans.modules.openide.dev +netbeans.modules.projects.dev +netbeans.nbdev +netbeans.nbui +netbeans.nbusers +netbsd.current-users +netbsd.netbsd-bugs +netbsd.source-changes +netcom.general +netcom.netcruiser.general +netcom.shell.general +netcom.shell.mail +netcom.shell.software.nuglops +netlink.announce +netlink.service +netlink.support +netlink.talk +netlink.users +netobjects.components.asp +netobjects.fusion20.general-discussion-windows +netobjects.fusion30 +netobjects.fusion30.databases +netobjects.fusion30.gen-discussion-macintosh +netobjects.fusion30.gen-discussion-windows +netobjects.fusion30.publishing +netobjects.fusion30.rich-media +netobjects.fusion30.web-design +netobjects.fusion40.web-design +netobjects.fusion50.general-discussion +netobjects.fusion50.web-design +netobjects.fusionmx.actions +netobjects.fusionmx.gen-discuss +netobjects.fusionmx.publishing +netobjects.fusionmx.third-party-components +netobjects.fusionmx.web-design +netobjects.new-sites +netscape.communicator +netscape.dev +netscape.public.admin +netscape.public.beta.feedback.browser +netscape.public.beta.feedback.cck +netscape.public.beta.feedback.editor +netscape.public.beta.feedback.general +netscape.public.beta.feedback.i18n +netscape.public.beta.feedback.install +netscape.public.beta.feedback.javascript +netscape.public.beta.feedback.mail +netscape.public.beta.feedback.nim +netscape.public.beta.feedback.pagelayout +netscape.public.beta.feedback.security +netscape.public.beta.feedback.sidebar +netscape.public.beta.feedback.themes +netscape.public.dev.css +netscape.public.dev.dom +netscape.public.dev.html +netscape.public.dev.mysidebar +netscape.public.dev.plugin-upgrade +netscape.public.dev.rdf +netscape.public.dev.skins +netscape.public.dev.xml +netscape.public.dev.xul +netscape.public.general +netscape.public.iws +netscape.public.iws.linux +netscape.public.marketmaker +netscape.public.mozilla.accessibility +netscape.public.mozilla.announce +netscape.public.mozilla.beos +netscape.public.mozilla.browser +netscape.public.mozilla.builds +netscape.public.mozilla.calendar +netscape.public.mozilla.calendar.checkins +netscape.public.mozilla.crypto +netscape.public.mozilla.crypto.checkins +netscape.public.mozilla.directory +netscape.public.mozilla.documentation +netscape.public.mozilla.dom +netscape.public.mozilla.editor +netscape.public.mozilla.embedding +netscape.public.mozilla.general +netscape.public.mozilla.gtk +netscape.public.mozilla.i18n +netscape.public.mozilla.java +netscape.public.mozilla.jobs +netscape.public.mozilla.jseng +netscape.public.mozilla.l10n +netscape.public.mozilla.layout +netscape.public.mozilla.layout.checkins +netscape.public.mozilla.layout.xslt +netscape.public.mozilla.license +netscape.public.mozilla.mac +netscape.public.mozilla.macosx +netscape.public.mozilla.mail-news +netscape.public.mozilla.mathml +netscape.public.mozilla.mstone +netscape.public.mozilla.netlib +netscape.public.mozilla.newsclips +netscape.public.mozilla.nspr +netscape.public.mozilla.oji +netscape.public.mozilla.os2 +netscape.public.mozilla.patches +netscape.public.mozilla.performance +netscape.public.mozilla.platform +netscape.public.mozilla.plugins +netscape.public.mozilla.porkjockeys +netscape.public.mozilla.prefs +netscape.public.mozilla.qa.browser +netscape.public.mozilla.qa.editor +netscape.public.mozilla.qa.general +netscape.public.mozilla.qt +netscape.public.mozilla.rdf +netscape.public.mozilla.reviewers +netscape.public.mozilla.rhapsody +netscape.public.mozilla.rt-messaging +netscape.public.mozilla.seamonkey +netscape.public.mozilla.security +netscape.public.mozilla.style +netscape.public.mozilla.svg +netscape.public.mozilla.ui +netscape.public.mozilla.unix +netscape.public.mozilla.unix.checkins +netscape.public.mozilla.webtools +netscape.public.mozilla.win32 +netscape.public.mozilla.wishlist +netscape.public.mozilla.xbl +netscape.public.mozilla.xml +netscape.public.mozilla.xpcom +netscape.public.mozilla.xpfe +netscape.public.mozilla.xpfe.checkins +netscape.public.mozilla.xpinstall +netscape.public.test +netscape.test +netwin.dnews +nevada.forsale +nevada.jobs +neworleans +neworleans.general +neworleans.info +neworleans.jobs +neworleans.personals +news +news.admin.announce +news.admin.censorship +news.admin.hierarchies +news.admin.misc +news.admin.net-abuse.bulletins +news.admin.net-abuse.email +news.admin.net-abuse.misc +news.admin.net-abuse.policy +news.admin.net-abuse.sightings +news.admin.net-abuse.usenet +news.admin.nocem +news.admin.technical +news.announce +news.announce.conferences +news.announce.important +news.announce.newgroups +news.announce.newusers +news.answers +news.groups +news.groups.questions +news.groups.reviews +news.lists.misc +news.misc +news.newsites +news.newusers +news.newusers.questions +news.software +news.software.anu-news +news.software.b +news.software.misc +news.software.nn +news.software.nntp +news.software.readers +news.test +news.test_messages +news.us.jobs +newsguy.addgroup.propose +newsguy.announce +newsguy.backbone.notices +newsguy.biz.industry.agriculture.forestry +newsguy.biz.industry.energy +newsguy.financial.stocks +newsguy.financial.stocks.dow-jones +newsguy.general +newsguy.pub.biz.headlines +newsguy.pub.headlines +newsguy.pub.sports.headlines +newsguy.pub.us.gov.contracts.budgets +newsguy.pub.us.gov.defense +newsguy.pub.us.gov.faa +newsguy.pub.us.gov.fcc +newsguy.pub.us.gov.fda +newsguy.pub.us.gov.federal.reserve.fdic +newsguy.pub.us.gov.finance +newsguy.pub.us.gov.ftc +newsguy.pub.us.gov.military +newsguy.pub.us.gov.nasa +newsguy.pub.us.gov.society +newsguy.pub.us.gov.supreme-court +newsguy.pub.us.politics +newsguy.pub.world.africa.gov +newsguy.pub.world.asia.gov +newsguy.pub.world.australia.nz.oceania.gov +newsguy.pub.world.canada.gov +newsguy.pub.world.europe.russia-cis.gov +newsguy.pub.world.gov +newsguy.pub.world.gov.analysis +newsguy.pub.world.gov.democracy.human-rights +newsguy.pub.world.gov.diplomatic.security +newsguy.pub.world.gov.economic +newsguy.pub.world.gov.fire.police +newsguy.pub.world.gov.global.communications +newsguy.pub.world.gov.press-review +newsguy.pub.world.gov.public-service +newsguy.pub.world.gov.summary.48hours +newsguy.pub.world.gov.summary.russian +newsguy.pub.world.gov.summary.spanish +newsguy.pub.world.latin-american.caribbean.gov +newsguy.pub.world.mid-east.nafrica.sasia.gov +newsguy.pub.world.politics +newsguy.spam.sightings +newsguy.spamhippo.top100 +newsguy.test +newsguy.us.state.alabama +newsguy.us.state.arizona +newsguy.us.state.arkansas +newsguy.us.state.california +newsguy.us.state.colorado +newsguy.us.state.connecticut +newsguy.us.state.delaware +newsguy.us.state.florida +newsguy.us.state.hawaii +newsguy.us.state.illinois +newsguy.us.state.indiana +newsguy.us.state.iowa +newsguy.us.state.louisiana +newsguy.us.state.maryland +newsguy.us.state.massachusetts +newsguy.us.state.michigan +newsguy.us.state.minnesota +newsguy.us.state.mississippi +newsguy.us.state.missouri +newsguy.us.state.montana +newsguy.us.state.nevada +newsguy.us.state.new-jersey +newsguy.us.state.new-york +newsguy.us.state.ohio +newsguy.us.state.pennsylvania +newsguy.us.state.south-carolina +newsguy.us.state.south-dakota +newsguy.us.state.texas +newsguy.us.state.washington +newsguy.us.state.wyoming +newsguy.weather.forecasts +newsguy.weather.severe +newsguy.world.europe.southern +newsguy.world.europe.western +niagara.announce +niagara.arts +niagara.config +niagara.falls +niagara.falls.barrel +niagara.falls.cam +niagara.forsale +niagara.freenet +niagara.general +niagara.jobs +niagara.personals +niagara.police +niagara.test +niagara.wine +nj.config +nj.events +nj.forsale +nj.forsale.computers +nj.general +nj.housing +nj.jobs +nj.jobs.offered +nj.jobs.resumes +nj.market +nj.market.autos +nj.market.computers +nj.market.housing +nj.market.misc +nj.misc +nj.politics +nj.test +nj.wanted +nj.weather +nm.config +nm.forsale +nm.general +nm.jobs +nm.test +novell.community.brainshare +novell.community.chat +novell.devsup.activex +novell.devsup.beans +novell.devsup.cldap +novell.devsup.clib.clib +novell.devsup.clib.xplatnlm +novell.devsup.clib.xplatwin +novell.devsup.consoleone +novell.devsup.delphilib +novell.devsup.dirxml +novell.devsup.gwadmin +novell.devsup.gwobjapi +novell.devsup.jdbc +novell.devsup.jssl +novell.devsup.jvm +novell.devsup.ldap_j +novell.devsup.mediamanager +novell.devsup.modapach +novell.devsup.ndk_feedback +novell.devsup.nds_client +novell.devsup.njcl +novell.devsup.nks +novell.devsup.nwsnut +novell.devsup.odbc +novell.devsup.smscomp +novell.devsup.transport +novell.devsup.ucs +novell.devsup.webserver +novell.netware5.serverbackup +novell.netwareforsaa +novell.support.collaboration.groupwise-gateways.async +novell.support.collaboration.groupwise-gateways.internet-agent +novell.support.collaboration.groupwise5.administration +novell.support.collaboration.groupwise5.clients +novell.support.collaboration.groupwise5.connectivity +novell.support.collaboration.groupwise5.installation +novell.support.collaboration.groupwise5.library +novell.support.collaboration.groupwise5.message-servers +novell.support.collaboration.groupwise5.web-access +novell.support.collaboration.groupwise6.administration +novell.support.collaboration.groupwise6.clients +novell.support.collaboration.groupwise6.connectivity +novell.support.collaboration.groupwise6.gwia +novell.support.collaboration.groupwise6.installation +novell.support.collaboration.groupwise6.nntp-pop3-imap4 +novell.support.collaboration.groupwise6.web-access +novell.support.collaboration.groupwise6.wireless +novell.support.collaboration.internet-messaging-system +novell.support.ds.ldap +novell.support.ds.nds-general +novell.support.ds.nds.netware +novell.support.ds.nds.win2000 +novell.support.ds.nmas +novell.support.high-availability.cluster-services +novell.support.high-availability.standby-server +novell.support.host-connectivity.nw-for-saa +novell.support.internet.bordermanager.access-rules +novell.support.internet.bordermanager.install-setup +novell.support.internet.bordermanager.nat +novell.support.internet.bordermanager.packet-filtering +novell.support.internet.bordermanager.proxies-fastcache +novell.support.internet.bordermanager.vpn-services +novell.support.internet.ichain +novell.support.internet.ifolder +novell.support.internet.portal-services +novell.support.internet.webserver +novell.support.management.managewise.console +novell.support.management.zenworks.desktops.app-launcher +novell.support.management.zenworks.desktops.imaging +novell.support.management.zenworks.desktops.install +novell.support.management.zenworks.desktops.inventory +novell.support.management.zenworks.desktops.wsmanager.win9x +novell.support.management.zenworks.desktops.wsmanager.winnt +novell.support.management.zenworks.servers +novell.support.newsflash +novell.support.os.client.dos-win3x +novell.support.os.client.win9x +novell.support.os.client.winnt-2k-xp +novell.support.os.server.dns-dhcp +novell.support.os.server.lan.cards-drivers +novell.support.os.server.lan.protocols +novell.support.os.server.native-file-access +novell.support.os.server.netware-smallbusiness +novell.support.os.server.netware3x.abends-hangs +novell.support.os.server.netware3x.install-upgrade +novell.support.os.server.netware3x.other +novell.support.os.server.netware4x.abends-hangs +novell.support.os.server.netware4x.install-upgrade +novell.support.os.server.netware4x.server-backup +novell.support.os.server.netware4x.storage-media +novell.support.os.server.netware4x.utilities +novell.support.os.server.netware5x.abends-hangs +novell.support.os.server.netware5x.install-upgrade +novell.support.os.server.netware5x.novell-storage-services +novell.support.os.server.netware5x.nw51.oracle +novell.support.os.server.netware5x.preinstall-planning +novell.support.os.server.netware5x.server-backup +novell.support.os.server.netware5x.storage-media +novell.support.os.server.netware5x.utilities +novell.support.os.server.netware6x.abends-hangs +novell.support.os.server.netware6x.admin-tools +novell.support.os.server.netware6x.install-upgrade +novell.support.os.server.netware6x.preinstall-planning +novell.support.os.server.netware6x.server-backup +novell.support.os.server.netware6x.storage +novell.support.os.server.nias +novell.support.os.server.printing.iprint +novell.support.os.server.printing.ndps-neps +novell.support.os.server.printing.queue-based +novell.support.other.discontinued-products +novell.support.other.telephony-services +novell.zenworks.inventory +ns.announce +ns.biz.adiac +ns.education +ns.education.faculty +ns.electronic.commerce +ns.events +ns.forsale +ns.general +ns.jobs +ns.nstn.usergroup +nsysu.art_program.hsinchu_city.dancing +ntu.agri.horticulture +ntu.club.cie +ntu.med.dentistry +ntu.med.nursing +ntu.talk +nv.bi +nv.config +nv.forsale +nv.general +nv.jobs +nv.motss +nv.personals +nv.personals.fsf +nv.personals.fsm +nv.personals.msf +nv.personals.msm +nv.personals.swingers +nv.singles +nv.test +nwt.general +nwu.comp.news +nwu.comp.security +nwu.forsale +nwu.general +nwu.jobs +nwu.org.library +ny.config +ny.forsale +ny.general +ny.jobs +ny.nysernet +ny.nysernet.map +ny.nysernet.maps +ny.nysernet.nic +ny.nysernet.nysertech +ny.politics +ny.seminars +ny.syr +ny.syr.educators +ny.test +ny.wanted +nyc +nyc.announce +nyc.bicycles +nyc.config +nyc.food +nyc.forsale +nyc.general +nyc.jobs +nyc.jobs.contract +nyc.jobs.misc +nyc.jobs.offered +nyc.jobs.wanted +nyc.market.housing +nyc.motorcycles +nyc.personals +nyc.politics +nyc.seminars +nyc.singles +nyc.test +nyc.transit +nynex.trd.eslab +nyu.comp-priv +nyu.nupop +nyu.pmail +nyu.pop +nyx.forsale +oar.noc +oar.tech +oar.users +oau.biz +oau.config +oau.forsale +oau.news +oau.sources +oau.test +oc.acm +oc.eats +oc.forsale +oc.general +oc.jobs +oc.test +oc.wanted +ochota.ogloszenia +ocn.test +ods.claimfacts.interface +oecher.flohmarkt +oecher.kommerz +oecher.newfiles +oecher.talk +oecher.test +oecher.wohnungsmarkt +ogi.general +oh.acad-sci +oh.biz +oh.cast +oh.chem +oh.forsale +oh.general +oh.jobs +oh.k12 +oh.news +oh.newsadmin +oh.osc.software +oh.test +ok.admin +ok.announce +ok.edmond.online +ok.general +ok.jobs +ok.marketplace +ok.test +ok.tulsa.general +oma.general +on-line.air-warrior.666th-etal +onramp.internal.support.grant +ont.archives +ont.bicycle +ont.conditions +ont.events +ont.jobs +ool.discussion +openbsd.tech +opera.beta +opera.deutsch +opera.francais +opera.general +opera.linux +opera.off-topic +opera.promote +opera.tech +opera.test +opera.tools +or.forsale +or.forsale.pdx.forsale +or.general +or.jobs +or.ojgse.cis641 +or.politics +or.test +orst.forsale +othernet.demi-monde.sex-talk +othernet.fidonet.nz.buy-sell +othernet.spacenet.star-trek +oy.myydaan +pa.admin +pa.berks.chat +pa.config +pa.environment +pa.forsale +pa.general +pa.hbg.forsale +pa.hbg.general +pa.hbg.wanted +pa.jobs +pa.jobs.offered +pa.jobs.wanted +pa.lv.forsale +pa.lv.general +pa.lv.wanted +pa.motorcycle +pa.motss +pa.ne.forsale +pa.ne.general +pa.ne.politics +pa.ne.wanted +pa.politics +pa.rdg.forsale +pa.rdg.general +pa.rdg.wanted +pa.religion.pagan +pa.smallbusiness +pa.test +pa.wanted +pagesat.stats +pavilion.misc +pbinet.general +pbinfo.amiga +pbinfo.jobs +pbinfo.markt +pbsx.traffic-ops.distrib-rpts +pdaxs.arts.auditions +pdaxs.arts.museums +pdaxs.arts.music +pdaxs.arts.print +pdaxs.arts.radio +pdaxs.arts.tv +pdaxs.calendar.art +pdaxs.calendar.business +pdaxs.calendar.computers +pdaxs.calendar.misc +pdaxs.calendar.music +pdaxs.calendar.volunteers +pdaxs.games.board +pdaxs.games.bridge +pdaxs.games.chess +pdaxs.games.misc +pdaxs.games.rpg +pdaxs.issues.democrats +pdaxs.issues.education +pdaxs.issues.portland +pdaxs.issues.republicans +pdaxs.jobs +pdaxs.jobs.clerical +pdaxs.jobs.computers +pdaxs.jobs.construction +pdaxs.jobs.delivery +pdaxs.jobs.domestic +pdaxs.jobs.engineering +pdaxs.jobs.engineers +pdaxs.jobs.management +pdaxs.jobs.misc +pdaxs.jobs.restaurants +pdaxs.jobs.resumes +pdaxs.jobs.retail +pdaxs.jobs.sales +pdaxs.jobs.secretary +pdaxs.jobs.temporary +pdaxs.jobs.volunteers +pdaxs.jobs.wanted +pdaxs.religion.christian +pdaxs.religion.jewish +pdaxs.religion.misc +pdaxs.religion.moslem +pdaxs.religion.newage +pdaxs.schools.acting +pdaxs.schools.cooking +pdaxs.schools.dance +pdaxs.schools.fitness +pdaxs.schools.kids +pdaxs.schools.martial +pdaxs.schools.misc +pdaxs.schools.music +pdaxs.schools.sports +pdaxs.services.accounting +pdaxs.services.appliance +pdaxs.services.carpentry +pdaxs.services.children +pdaxs.services.cleaning +pdaxs.services.computers +pdaxs.services.consulting +pdaxs.services.counseling +pdaxs.services.electrical +pdaxs.services.financial +pdaxs.services.fitness +pdaxs.services.gardening +pdaxs.services.graphics +pdaxs.services.insurance +pdaxs.services.int_design +pdaxs.services.landscaping +pdaxs.services.legal +pdaxs.services.massage +pdaxs.services.misc +pdaxs.services.moving +pdaxs.services.music +pdaxs.services.painting +pdaxs.services.pets +pdaxs.services.photo +pdaxs.services.plumbing +pdaxs.services.roofing +pdaxs.services.security +pdaxs.services.storage +pdaxs.services.wordproc +pdaxs.sports.baseball +pdaxs.sports.basketball +pdaxs.sports.football +pdaxs.sports.golf +pdaxs.sports.rotisserie +pdx +pdx.arts +pdx.books +pdx.computing +pdx.consumer +pdx.forsale +pdx.games +pdx.general +pdx.golf +pdx.jobs +pdx.movies +pdx.music +pdx.online +pdx.running +pdx.singles +pdx.slug +pdx.soc +pdx.sports +pdx.telecom +pdx.test +pdx.utek +pdx.weather +pei.crafts +pei.general +pensacola.forsale +pensacola.restaurants +perl.64bit +perl.advocacy +perl.agents +perl.ai +perl.beginners +perl.beginners.cgi +perl.books.workers +perl.bootstrap +perl.bugmongers +perl.committers.parrot +perl.copenhagen +perl.cpan.cluster +perl.cpan.interface +perl.cpan.testers +perl.cpan.workers +perl.crypto +perl.cvs.mod_parrot +perl.cvs.p5ee +perl.cvs.parrot +perl.cvs.pdp +perl.cvs.perlfaq +perl.cvs.qpsmtpd +perl.daily-build +perl.daily-build.reports +perl.daily.news +perl.datetime +perl.dbi.announce +perl.dbi.dev +perl.dbi.oracle-oci +perl.dbi.users +perl.dist +perl.documentation +perl.foundation.newsletter +perl.fwp +perl.golf +perl.gov +perl.i18n +perl.inline +perl.ithreads +perl.javascript +perl.jobs +perl.jobs.discuss +perl.jpl +perl.ldap +perl.libnet +perl.libwww +perl.loop +perl.mac.toolbox +perl.macosx +perl.macperl +perl.macperl.announce +perl.macperl.anyperl +perl.macperl.forum +perl.macperl.modules +perl.macperl.porters +perl.macperl.scribes +perl.macperl.toolbox +perl.macperl.webcgi +perl.makemaker +perl.midi +perl.module-authors +perl.modules +perl.mvs +perl.nordic.workshop +perl.ok +perl.p5ee +perl.packrats +perl.par +perl.perl1.porters +perl.perl4lib +perl.perl5.build +perl.perl5.changes +perl.perl5.changes.mac +perl.perl5.summary +perl.perl6.announce +perl.perl6.announce.rfc +perl.perl6.build +perl.perl6.documentation +perl.perl6.internals +perl.perl6.internals.api.embed +perl.perl6.internals.api.parser +perl.perl6.internals.bignum +perl.perl6.internals.unicode +perl.perl6.language +perl.perl6.language.data +perl.perl6.language.datetime +perl.perl6.language.errors +perl.perl6.language.flow +perl.perl6.language.io +perl.perl6.language.mlc +perl.perl6.language.objects +perl.perl6.language.regex +perl.perl6.language.strict +perl.perl6.language.subs +perl.perl6.licenses +perl.perl6.meta +perl.perl6.porters +perl.perl6.source.control +perl.perl6.stdlib +perl.perlfaq.workers +perl.perlpoint +perl.pod-people +perl.poe +perl.porters-gw +perl.ppt +perl.qa +perl.qa.cvs +perl.qa.metrics +perl.qpsmtpd +perl.recdescent +perl.release-announce +perl.riscos +perl.rtos +perl.scripts +perl.sdk +perl.test +perl.tips +perl.trainers +perl.unicode +perl.xs +perm.commerce +pgh.apartments +pgh.config +pgh.cpsr +pgh.food +pgh.forsale +pgh.freenet +pgh.general +pgh.jobs +pgh.jobs.offered +pgh.jobs.wanted +pgh.motss +pgh.next-users +pgh.opinion +pgh.org.cnbc +pgh.org.sca +pgh.org.uccp +pgh.singles +pgh.test +ph.chat +phl.announce +phl.bicycles +phl.config +phl.dance +phl.food +phl.forsale +phl.housing +phl.internet +phl.jobs +phl.jobs.offered +phl.jobs.wanted +phl.media +phl.misc +phl.motss +phl.music +phl.outdoors +phl.pagan +phl.scanner +phl.singles +phl.sports +phl.test +phl.theatre +phl.transportation +phl.wanted +phl.weather +phoenix.chat +phoenix.help +phoenix.update +php.db +php.dev +php.doc +php.general +php.install +php.windows +phri.general +phx.buy-sell-trade +phx.eats +phx.general +phx.indirect.announce +phx.indirect.bud +phx.indirect.help +phx.indirect.help.mac +phx.indirect.help.pc +phx.indirect.techsuport +phx.indirect.test +phx.jobs.wanted +phx.onramp.announce +phx.onramp.general +phx.onramp.help +phx.onramp.support +phx.test +pictures.erotica.lesbians +pilot.programmer +pilot.programmer.codewarrior +pilot.programmer.gcc +pilot.programmer.jump +pilot.programmer.pila +pilot.programmer.waba +pipex.admin +pipex.dialup +pipex.info +pipex.news +pipex.techs +pipex.tickets +pipex.users.betanews +pitt.comp.general +pitt.comp.sys.ibm-pc +pitt.comp.sys.mac +pitt.comp.sys.unix +pitt.comp.sys.vms +pitt.config +pitt.forsale +pitt.general +pnet.community.gardens +pnet.community.habitat +pnet.consumer.forsale.real-estate +pnet.local.politics.talk +pnet.rec.antiques +pnet.rec.astrology +pnet.rec.fishing +pnet.rec.genealogy.announce +pnet.rec.genealogy.talk +pnet.religion.pagan +pnet.www.talk +pnw.education +pnw.forsale +pnw.general +pnw.motss +pnw.news +pnw.personals +pnw.sys.sun +pnw.test +portland.jobs.offered +posc.announce +posc.application.views +posc.change_request +posc.change_request.bcs +posc.change_request.browser +posc.change_request.data_access +posc.change_request.data_model +posc.change_request.ref_entity +posc.change_request.si +posc.change_request.ui +posc.migration +posc.sysadm +posc.test +powersoft.public.infomaker.general +powersoft.public.jaguar.cts +powersoft.public.powerbuilder.connectivity +powersoft.public.powerbuilder.database +powersoft.public.powerbuilder.datawindow +powersoft.public.powerbuilder.distributed +powersoft.public.powerbuilder.general +powersoft.public.powerbuilder.inet-dev-toolkit +powersoft.public.powerbuilder.mac-unix +powersoft.public.powerbuilder.objects +powersoft.public.powerbuilder.ole-ocx-activex +powersoft.public.powerbuilder.pfc +powersoft.public.powerbuilder.powerscript +powersoft.public.powerbuilder.web-pb +powersoft.public.powerdesigner.general +powersoft.public.powerj.general +powersoft.public.watcom_fortran_77.general +pppl.news.aps +pppl.news.ersug +pppl.news.infomac +pppl.news.tex +prg.jobs +prima.flohmarkt +primenet.help.news +princeton.forsale +princeton.general +princeton.grad +private.lab.lcs +private.localposts +private.wmnst01.bulletin.board +prodigynet.computing.htmlhelp +pronet.kneipe +psi.general +psi.nrg +psi.nwg +psi.psilink +psi.psinet +psi.stats +psi.test +psi.tickets +psion.chat +purdue.forsale +purdue.general +qc.general +qc.jobs +qc.jobs.wanted +qc.politique +qdn.public.qnx4 +qdn.public.qnx4.photon +qdn.public.qnxrtp.applications +qdn.public.qnxrtp.devtools +qdn.public.qnxrtp.embedded +qdn.public.qnxrtp.installation +qdn.public.qnxrtp.newuser +qdn.public.qnxrtp.os +qdn.public.qnxrtp.photon +qdn.public.test +qtp.bulletin +qtp.general +queens.forsale +rabbit.config +rabbit.customers +rabbit.maps +rabbit.net-config +rabbit.q-and-a +rabbit.tech-info +rain.bsdi-users +rain.firewalls +rain.smail3 +rain.sources +rain.sources.d +ral.services.csf +realtynet.canada-intl +realtynet.commercial +realtynet.commercial.ak-northern +realtynet.commercial.ak-southern +realtynet.commercial.al +realtynet.commercial.az +realtynet.commercial.ca-central +realtynet.commercial.ca-northern +realtynet.commercial.ca-southern +realtynet.commercial.co +realtynet.commercial.ct +realtynet.commercial.dc +realtynet.commercial.de +realtynet.commercial.fl-central +realtynet.commercial.fl-northern +realtynet.commercial.fl-southern +realtynet.commercial.ga +realtynet.commercial.hi +realtynet.commercial.ia +realtynet.commercial.id +realtynet.commercial.il +realtynet.commercial.in +realtynet.commercial.ks +realtynet.commercial.ky +realtynet.commercial.ma +realtynet.commercial.md +realtynet.commercial.me +realtynet.commercial.mi +realtynet.commercial.mn +realtynet.commercial.mo +realtynet.commercial.ms +realtynet.commercial.mt +realtynet.commercial.nc +realtynet.commercial.nd +realtynet.commercial.ne +realtynet.commercial.nh +realtynet.commercial.nj +realtynet.commercial.nm +realtynet.commercial.ny +realtynet.commercial.oh +realtynet.commercial.ok +realtynet.commercial.or +realtynet.commercial.pa +realtynet.commercial.ri +realtynet.commercial.sc +realtynet.commercial.sd +realtynet.commercial.tn +realtynet.commercial.tx-northeast +realtynet.commercial.tx-northwest +realtynet.commercial.tx-southeast +realtynet.commercial.tx-southwest +realtynet.commercial.ut +realtynet.commercial.va +realtynet.commercial.vi +realtynet.commercial.vt +realtynet.commercial.wa +realtynet.commercial.wi +realtynet.commercial.wv +realtynet.commercial.wy +realtynet.east +realtynet.general +realtynet.government +realtynet.invest +realtynet.lending +realtynet.mid +realtynet.qa +realtynet.residential +realtynet.south +realtynet.west +rec.animals +rec.animals.wildlife +rec.answers +rec.antiques +rec.antiques.bottles +rec.antiques.marketplace +rec.antiques.radio+phono +rec.aquaria +rec.aquaria.freshwater.cichlids +rec.aquaria.freshwater.goldfish +rec.aquaria.freshwater.misc +rec.aquaria.freshwater.plants +rec.aquaria.marine.misc +rec.aquaria.marine.reefs +rec.aquaria.marketplace +rec.aquaria.misc +rec.aquaria.tech +rec.arts.animation +rec.arts.anime +rec.arts.anime.creative +rec.arts.anime.fandom +rec.arts.anime.games +rec.arts.anime.info +rec.arts.anime.marketpl +rec.arts.anime.marketplace +rec.arts.anime.misc +rec.arts.anime.models +rec.arts.anime.moderated +rec.arts.anime.music +rec.arts.ascii +rec.arts.bodyart +rec.arts.bonsai +rec.arts.books +rec.arts.books.childrens +rec.arts.books.hist-fiction +rec.arts.books.marketplace +rec.arts.books.reviews +rec.arts.books.tolkien +rec.arts.comics +rec.arts.comics.alternative +rec.arts.comics.creative +rec.arts.comics.dc.lsh +rec.arts.comics.dc.universe +rec.arts.comics.dc.vertigo +rec.arts.comics.elfquest +rec.arts.comics.european +rec.arts.comics.info +rec.arts.comics.marketplace +rec.arts.comics.marvel.universe +rec.arts.comics.marvel.xbooks +rec.arts.comics.misc +rec.arts.comics.other-media +rec.arts.comics.reviews +rec.arts.comics.strips +rec.arts.comics.xbooks +rec.arts.dance +rec.arts.disney +rec.arts.disney.animation +rec.arts.disney.announce +rec.arts.disney.merchandise +rec.arts.disney.misc +rec.arts.disney.parks +rec.arts.drwho +rec.arts.drwho.info +rec.arts.drwho.moderated +rec.arts.erotica +rec.arts.fine +rec.arts.horror.marketplace +rec.arts.horror.misc +rec.arts.horror.movies +rec.arts.horror.tv +rec.arts.horror.written +rec.arts.int-fiction +rec.arts.manga +rec.arts.marching +rec.arts.marching.band +rec.arts.marching.band.college +rec.arts.marching.band.high-school +rec.arts.marching.colorguard +rec.arts.marching.drumcorps +rec.arts.marching.etc +rec.arts.marching.misc +rec.arts.marching.percussion +rec.arts.misc +rec.arts.movies +rec.arts.movies.announce +rec.arts.movies.current-films +rec.arts.movies.erotica +rec.arts.movies.international +rec.arts.movies.local.indian +rec.arts.movies.misc +rec.arts.movies.movie-going +rec.arts.movies.past-films +rec.arts.movies.people +rec.arts.movies.production +rec.arts.movies.production.sound +rec.arts.movies.reviews +rec.arts.movies.tech +rec.arts.music.marketplace +rec.arts.mystery +rec.arts.origami +rec.arts.poems +rec.arts.poetry +rec.arts.prose +rec.arts.puppetry +rec.arts.sf.announce +rec.arts.sf.composition +rec.arts.sf.fandom +rec.arts.sf.marketplace +rec.arts.sf.misc +rec.arts.sf.movies +rec.arts.sf.reviews +rec.arts.sf.science +rec.arts.sf.starwars +rec.arts.sf.starwars.collecting +rec.arts.sf.starwars.collecting.customizing +rec.arts.sf.starwars.collecting.misc +rec.arts.sf.starwars.collecting.vintage +rec.arts.sf.starwars.games +rec.arts.sf.starwars.info +rec.arts.sf.starwars.misc +rec.arts.sf.superman +rec.arts.sf.tv +rec.arts.sf.tv.babylon5 +rec.arts.sf.tv.babylon5.info +rec.arts.sf.tv.babylon5.moderated +rec.arts.sf.tv.quantum-leap +rec.arts.sf.written +rec.arts.sf.written.robert-jordan +rec.arts.stained-glass +rec.arts.startrek +rec.arts.startrek.current +rec.arts.startrek.fandom +rec.arts.startrek.info +rec.arts.startrek.misc +rec.arts.startrek.reviews +rec.arts.startrek.tech +rec.arts.theater +rec.arts.theatre.misc +rec.arts.theatre.musicals +rec.arts.theatre.plays +rec.arts.theatre.stagecraft +rec.arts.tv +rec.arts.tv.interactive +rec.arts.tv.mst3k +rec.arts.tv.mst3k.announce +rec.arts.tv.mst3k.misc +rec.arts.tv.rush-limbaugh +rec.arts.tv.soaps.abc +rec.arts.tv.soaps.cbs +rec.arts.tv.soaps.misc +rec.arts.tv.uk +rec.arts.tv.uk.comedy +rec.arts.tv.uk.coronation-st +rec.arts.tv.uk.eastenders +rec.arts.tv.uk.emmerdale +rec.arts.tv.uk.misc +rec.arts.wobegon +rec.audio +rec.audio.car +rec.audio.high-end +rec.audio.marketplace +rec.audio.misc +rec.audio.opinion +rec.audio.pro +rec.audio.tech +rec.audio.tubes +rec.auto +rec.auto.makers.alpha-romeo +rec.auto.makers.audi +rec.auto.makers.toyota +rec.auto.tech +rec.auto.vw +rec.autos +rec.autos.4x4 +rec.autos.antique +rec.autos.driving +rec.autos.jeep +rec.autos.makers.bmw +rec.autos.makers.chrysler +rec.autos.makers.ford +rec.autos.makers.ford.explorer +rec.autos.makers.ford.mustang +rec.autos.makers.honda +rec.autos.makers.jeep+willys +rec.autos.makers.mazda +rec.autos.makers.mazda.miata +rec.autos.makers.mg +rec.autos.makers.saturn +rec.autos.makers.vw +rec.autos.makers.vw.aircooled +rec.autos.makers.vw.watercooled +rec.autos.marketplace +rec.autos.misc +rec.autos.rod-n-custom +rec.autos.rotary +rec.autos.simulators +rec.autos.sport +rec.autos.sport.cart +rec.autos.sport.f1 +rec.autos.sport.f1.moderated +rec.autos.sport.indy +rec.autos.sport.info +rec.autos.sport.misc +rec.autos.sport.nascar +rec.autos.sport.nascar.moderated +rec.autos.sport.rally +rec.autos.sport.tech +rec.autos.subaru +rec.autos.tech +rec.autos.vw +rec.aviation +rec.aviation.aerobatics +rec.aviation.announce +rec.aviation.answers +rec.aviation.balloon +rec.aviation.hang-gliding +rec.aviation.homebuilt +rec.aviation.ifr +rec.aviation.marketplace +rec.aviation.military +rec.aviation.military.naval +rec.aviation.misc +rec.aviation.owning +rec.aviation.piloting +rec.aviation.powerchutes +rec.aviation.products +rec.aviation.questions +rec.aviation.restoration +rec.aviation.rotorcraft +rec.aviation.simulators +rec.aviation.soaring +rec.aviation.stories +rec.aviation.student +rec.aviation.ultralight +rec.backcountry +rec.basketball.nude +rec.beer +rec.bicycles +rec.bicycles.marketplace +rec.bicycles.misc +rec.bicycles.off-road +rec.bicycles.racing +rec.bicycles.rides +rec.bicycles.soc +rec.bicycles.tech +rec.birds +rec.boats +rec.boats.building +rec.boats.cruising +rec.boats.electronics +rec.boats.marketplace +rec.boats.paddle +rec.boats.paddle.touring +rec.boats.paddle.whitewater +rec.boats.racing +rec.boats.racing.power +rec.cards.non-sports.marketplace +rec.climbing +rec.collecting +rec.collecting.books +rec.collecting.cards +rec.collecting.cards.discuss +rec.collecting.cards.non-sports +rec.collecting.coins +rec.collecting.dolls +rec.collecting.military.insignia +rec.collecting.military.vehicles +rec.collecting.misc +rec.collecting.ornaments +rec.collecting.paper-money +rec.collecting.phonecards +rec.collecting.pins +rec.collecting.postal-history +rec.collecting.sport.baseball +rec.collecting.sport.basketball +rec.collecting.sport.football +rec.collecting.sport.hockey +rec.collecting.sport.misc +rec.collecting.stamps +rec.collecting.stamps.discuss +rec.collecting.stamps.marketplace +rec.collecting.teddy-bears +rec.collecting.villages +rec.collecting.vinyl +rec.crafts +rec.crafts.beads +rec.crafts.brewing +rec.crafts.carving +rec.crafts.dollhouses +rec.crafts.glass +rec.crafts.jewelry +rec.crafts.knots +rec.crafts.marketplace +rec.crafts.meadmaking +rec.crafts.metalworking +rec.crafts.misc +rec.crafts.polymer-clay +rec.crafts.pottery +rec.crafts.quilting +rec.crafts.rubberstamps +rec.crafts.scrapbooks +rec.crafts.sewing +rec.crafts.textiles +rec.crafts.textiles.machine-knit +rec.crafts.textiles.marketplace +rec.crafts.textiles.misc +rec.crafts.textiles.needlework +rec.crafts.textiles.quilting +rec.crafts.textiles.sewing +rec.crafts.textiles.yarn +rec.crafts.winemaking +rec.crafts.woodturning +rec.drugs.announce +rec.drugs.cannabis +rec.drugs.chemistry +rec.drugs.misc +rec.drugs.psychedelic +rec.drugs.smart +rec.equestrian +rec.fag-bashing +rec.fart +rec.fitness +rec.folk-dancing +rec.food +rec.food.baking +rec.food.chocolate +rec.food.cooking +rec.food.cuisine.jewish +rec.food.drink +rec.food.drink.beer +rec.food.drink.coffee +rec.food.drink.tea +rec.food.equipment +rec.food.historic +rec.food.marketplace +rec.food.preserving +rec.food.recipes +rec.food.restaurants +rec.food.sourdough +rec.food.veg +rec.food.veg.cooking +rec.gambling +rec.gambling.blackjack +rec.gambling.blackjack.moderated +rec.gambling.craps +rec.gambling.lottery +rec.gambling.misc +rec.gambling.other-games +rec.gambling.poker +rec.gambling.racing +rec.gambling.sports +rec.games +rec.games.abstract +rec.games.backgammon +rec.games.board +rec.games.board.ce +rec.games.board.marketplace +rec.games.bolo +rec.games.bridge +rec.games.bridge.okbridge +rec.games.chess +rec.games.chess.analysis +rec.games.chess.computer +rec.games.chess.misc +rec.games.chess.play-by-email +rec.games.chess.politics +rec.games.chinese-chess +rec.games.computer +rec.games.computer.doom +rec.games.computer.doom.announce +rec.games.computer.doom.editing +rec.games.computer.doom.help +rec.games.computer.doom.misc +rec.games.computer.doom.playing +rec.games.computer.everquest +rec.games.computer.planetarion +rec.games.computer.puzzle +rec.games.computer.quake.announce +rec.games.computer.quake.editing +rec.games.computer.quake.misc +rec.games.computer.quake.playing +rec.games.computer.quake.quake-c +rec.games.computer.quake.servers +rec.games.computer.stars +rec.games.computer.ultima.dragons +rec.games.computer.ultima.online +rec.games.computer.ultima.series +rec.games.computer.xpilot +rec.games.corewar +rec.games.deckmaster +rec.games.deckmaster.marketplace +rec.games.design +rec.games.diplomacy +rec.games.empire +rec.games.frp +rec.games.frp.advocacy +rec.games.frp.announce +rec.games.frp.archives +rec.games.frp.cyber +rec.games.frp.dnd +rec.games.frp.gurps +rec.games.frp.industry +rec.games.frp.live-action +rec.games.frp.marketplace +rec.games.frp.misc +rec.games.frp.moderated +rec.games.frp.storyteller +rec.games.frp.super-heroes +rec.games.go +rec.games.int-fiction +rec.games.mahjong +rec.games.mecha +rec.games.miniature.warhammer +rec.games.miniatures.historical +rec.games.miniatures.misc +rec.games.miniatures.warhammer +rec.games.misc +rec.games.mud +rec.games.mud.admin +rec.games.mud.announce +rec.games.mud.diku +rec.games.mud.lp +rec.games.mud.misc +rec.games.mud.tiny +rec.games.netrek +rec.games.pbm +rec.games.pinball +rec.games.playing-cards +rec.games.programmer +rec.games.roguelike.adom +rec.games.roguelike.angband +rec.games.roguelike.announce +rec.games.roguelike.development +rec.games.roguelike.misc +rec.games.roguelike.moria +rec.games.roguelike.nethack +rec.games.roguelike.rogue +rec.games.rpg +rec.games.trading-cards +rec.games.trading-cards.announce +rec.games.trading-cards.jyhad +rec.games.trading-cards.magic +rec.games.trading-cards.magic.marketplace +rec.games.trading-cards.magic.misc +rec.games.trading-cards.magic.rules +rec.games.trading-cards.magic.sales +rec.games.trading-cards.magic.strategy +rec.games.trading-cards.marketplace +rec.games.trading-cards.marketplace.magic +rec.games.trading-cards.marketplace.magic.auction +rec.games.trading-cards.marketplace.magic.auctions +rec.games.trading-cards.marketplace.magic.sales +rec.games.trading-cards.marketplace.magic.trades +rec.games.trading-cards.marketplace.misc +rec.games.trading-cards.misc +rec.games.trading-cards.startrek +rec.games.tradingcards.marketplace +rec.games.trivia +rec.games.vectrex +rec.games.video +rec.games.video.3do +rec.games.video.advocacy +rec.games.video.arcade +rec.games.video.arcade.collecting +rec.games.video.arcade.marketplace +rec.games.video.atari +rec.games.video.cd-i +rec.games.video.cd32 +rec.games.video.classic +rec.games.video.colecovision +rec.games.video.intellivision +rec.games.video.marketplace +rec.games.video.misc +rec.games.video.nintendo +rec.games.video.nintendo.n64 +rec.games.video.sega +rec.games.video.sony +rec.games.video.sony-playstation +rec.games.xtank.play +rec.games.xtank.programmer +rec.gardens +rec.gardens.bamboo +rec.gardens.ecosystems +rec.gardens.edible +rec.gardens.hydroponic +rec.gardens.orchids +rec.gardens.roses +rec.golf +rec.guns +rec.ham-radio +rec.ham-radio.swap +rec.heraldry +rec.humor +rec.humor.d +rec.humor.funny +rec.humor.funny.reruns +rec.humor.jewish +rec.humor.oracle +rec.humor.oracle.d +rec.hunting +rec.hunting.dogs +rec.juggling +rec.kites +rec.knives +rec.mag +rec.mag.dargon +rec.martial-arts +rec.martial-arts.moderated +rec.martial.arts +rec.misc +rec.misc.forsale +rec.models +rec.models.railroad +rec.models.rc +rec.models.rc.air +rec.models.rc.helicopter +rec.models.rc.land +rec.models.rc.misc +rec.models.rc.soaring +rec.models.rc.water +rec.models.rockets +rec.models.scale +rec.motorcycle +rec.motorcycles +rec.motorcycles.dirt +rec.motorcycles.harley +rec.motorcycles.racing +rec.motorcycles.tech +rec.motorcycles.yamaha +rec.music +rec.music.a-cappella +rec.music.afro-latin +rec.music.alternative +rec.music.ambient +rec.music.arabic +rec.music.artists.amy-grant +rec.music.artists.ani-difranco +rec.music.artists.beach-boys +rec.music.artists.bruce-hornsby +rec.music.artists.danny-elfman +rec.music.artists.debbie-gibson +rec.music.artists.emmylou-harris +rec.music.artists.extreme +rec.music.artists.kings-x +rec.music.artists.kiss +rec.music.artists.little-feat +rec.music.artists.mariah-carey +rec.music.artists.neil-young +rec.music.artists.paul-mccartney +rec.music.artists.queensryche +rec.music.artists.reb-st-james +rec.music.artists.rick-springfield +rec.music.artists.springsteen +rec.music.artists.stevie-nicks +rec.music.artists.wallflowers +rec.music.barbershop +rec.music.beatles +rec.music.beatles.bootlegs +rec.music.beatles.info +rec.music.beatles.moderated +rec.music.bluenote +rec.music.bluenote.blues +rec.music.brazilian +rec.music.cd +rec.music.celtic +rec.music.christian +rec.music.classical +rec.music.classical.contemporary +rec.music.classical.guitar +rec.music.classical.performing +rec.music.classical.recordings +rec.music.collecting +rec.music.collecting.cd +rec.music.collecting.misc +rec.music.collecting.vinyl +rec.music.compose +rec.music.country +rec.music.country.old-time +rec.music.country.western +rec.music.dementia +rec.music.dylan +rec.music.early +rec.music.experimental +rec.music.filipino +rec.music.filk +rec.music.folk +rec.music.folk.tablature +rec.music.funky +rec.music.gaffa +rec.music.gdead +rec.music.hip-hop +rec.music.indian.classical +rec.music.indian.misc +rec.music.industrial +rec.music.info +rec.music.iranian +rec.music.jazz +rec.music.king-crimson +rec.music.makers +rec.music.makers.bagpipe +rec.music.makers.bands +rec.music.makers.bass +rec.music.makers.bowed-strings +rec.music.makers.builders +rec.music.makers.chamber-music +rec.music.makers.choral +rec.music.makers.dulcimer +rec.music.makers.french-horn +rec.music.makers.guitar +rec.music.makers.guitar.acoustic +rec.music.makers.guitar.jazz +rec.music.makers.guitar.tablature +rec.music.makers.jazz +rec.music.makers.marketplace +rec.music.makers.percussion +rec.music.makers.percussion.hand-drum +rec.music.makers.piano +rec.music.makers.saxophone +rec.music.makers.songwriting +rec.music.makers.squeezebox +rec.music.makers.synth +rec.music.makers.trumpet +rec.music.marketplace +rec.music.marketplace.cd +rec.music.marketplace.misc +rec.music.marketplace.vinyl +rec.music.misc +rec.music.movies +rec.music.neil-young +rec.music.newage +rec.music.opera +rec.music.phish +rec.music.progressive +rec.music.promotional +rec.music.ragtime +rec.music.reggae +rec.music.rem +rec.music.reviews +rec.music.rock-pop-r+b.1950s +rec.music.rock-pop-r+b.1960s +rec.music.rock-pop-r+b.1970s +rec.music.rush +rec.music.synth +rec.music.theory +rec.music.tori-amos +rec.music.video +rec.nude +rec.org.mensa +rec.org.sca +rec.outdoors +rec.outdoors.camping +rec.outdoors.fishing +rec.outdoors.fishing.bass +rec.outdoors.fishing.fly +rec.outdoors.fishing.fly.tying +rec.outdoors.fishing.saltwater +rec.outdoors.marketplace +rec.outdoors.national-parks +rec.outdoors.rv-travel +rec.parks.theme +rec.pet.dogs +rec.pets +rec.pets.birds +rec.pets.birds.pigeons +rec.pets.cats +rec.pets.cats.anecdotes +rec.pets.cats.announce +rec.pets.cats.community +rec.pets.cats.health +rec.pets.cats.health+behav +rec.pets.cats.healthbehav +rec.pets.cats.misc +rec.pets.cats.rescue +rec.pets.dogs +rec.pets.dogs.activities +rec.pets.dogs.behavior +rec.pets.dogs.breeds +rec.pets.dogs.health +rec.pets.dogs.info +rec.pets.dogs.misc +rec.pets.dogs.rescue +rec.pets.ferrets +rec.pets.herp +rec.pets.rabbits +rec.photo +rec.photo.advanced +rec.photo.darkroom +rec.photo.digital +rec.photo.equipment.35mm +rec.photo.equipment.aps +rec.photo.equipment.large-format +rec.photo.equipment.medium-format +rec.photo.equipment.misc +rec.photo.film+labs +rec.photo.help +rec.photo.marketplace +rec.photo.marketplace.35mm +rec.photo.marketplace.darkroom +rec.photo.marketplace.digital +rec.photo.marketplace.large-format +rec.photo.marketplace.medium-format +rec.photo.marketplace.misc +rec.photo.misc +rec.photo.moderated +rec.photo.technique.art +rec.photo.technique.misc +rec.photo.technique.nature +rec.photo.technique.people +rec.ponds +rec.puzzles +rec.puzzles.crosswords +rec.pyrotechnics +rec.radio +rec.radio.amateur +rec.radio.amateur.antenna +rec.radio.amateur.boatanchors +rec.radio.amateur.digital.misc +rec.radio.amateur.dx +rec.radio.amateur.equipment +rec.radio.amateur.homebrew +rec.radio.amateur.misc +rec.radio.amateur.policy +rec.radio.amateur.space +rec.radio.amateur.swap +rec.radio.broadcasting +rec.radio.cb +rec.radio.info +rec.radio.lmr-commercial +rec.radio.noncomm +rec.radio.scanner +rec.radio.shortwave +rec.radio.swap +rec.railroad +rec.roller-coaster +rec.running +rec.scouting +rec.scouting.guide+girl +rec.scouting.issues +rec.scouting.misc +rec.scouting.usa +rec.scuba +rec.scuba.equipment +rec.scuba.locations +rec.skiing +rec.skiing.alpine +rec.skiing.announce +rec.skiing.backcountry +rec.skiing.marketplace +rec.skiing.nordic +rec.skiing.resorts.europe +rec.skiing.resorts.misc +rec.skiing.resorts.north-america +rec.skiing.snowboard +rec.skydiving +rec.sport +rec.sport.archery +rec.sport.baseball +rec.sport.baseball.analysis +rec.sport.baseball.college +rec.sport.baseball.data +rec.sport.baseball.fantasy +rec.sport.baseball.misc +rec.sport.basketball.college +rec.sport.basketball.europe +rec.sport.basketball.misc +rec.sport.basketball.pro +rec.sport.basketball.women +rec.sport.billiard +rec.sport.boxing +rec.sport.cricket +rec.sport.cricket.info +rec.sport.curling +rec.sport.disc +rec.sport.fencing +rec.sport.footbag +rec.sport.football +rec.sport.football.australian +rec.sport.football.canadian +rec.sport.football.college +rec.sport.football.fantasy +rec.sport.football.misc +rec.sport.football.pro +rec.sport.football.pro.liverpool +rec.sport.golf +rec.sport.hockey +rec.sport.hockey.field +rec.sport.jetski +rec.sport.midget.tossing +rec.sport.misc +rec.sport.officiating +rec.sport.olympics +rec.sport.orienteering +rec.sport.paintball +rec.sport.pro-wrestling +rec.sport.pro-wrestling.fantasy +rec.sport.pro-wrestling.info +rec.sport.pro-wrestling.moderated +rec.sport.pro-wrestling.news +rec.sport.rodeo +rec.sport.rowing +rec.sport.rugby +rec.sport.rugby.league +rec.sport.rugby.union +rec.sport.skating.ice +rec.sport.skating.ice.figure +rec.sport.skating.ice.recreational +rec.sport.skating.inline +rec.sport.skating.misc +rec.sport.skating.racing +rec.sport.skating.roller +rec.sport.snowboarding +rec.sport.snowmobiles +rec.sport.soccer +rec.sport.softball +rec.sport.squash +rec.sport.sumo +rec.sport.swimming +rec.sport.table-soccer +rec.sport.table-tennis +rec.sport.tennis +rec.sport.triathlon +rec.sport.unicycling +rec.sport.volleyball +rec.sport.water-polo +rec.sport.waterski +rec.sports.baseball +rec.sports.soccer +rec.test +rec.toys +rec.toys.action-figures +rec.toys.action-figures.discuss +rec.toys.action-figures.marketplace +rec.toys.cars +rec.toys.lego +rec.toys.misc +rec.toys.transformers.marketplace +rec.toys.transformers.moderated +rec.toys.vintage +rec.travel +rec.travel.africa +rec.travel.air +rec.travel.asia +rec.travel.australia+nz +rec.travel.australianz +rec.travel.bed+breakfast +rec.travel.bedbreakfast +rec.travel.budget.backpack +rec.travel.caribbean +rec.travel.cruises +rec.travel.europe +rec.travel.latin-america +rec.travel.marketplace +rec.travel.misc +rec.travel.resorts.all-inclusive +rec.travel.usa-canada +rec.tv.seinfeld +rec.video +rec.video.cable-tv +rec.video.desktop +rec.video.desktop.toaster +rec.video.dvd +rec.video.dvd.advocacy +rec.video.dvd.marketplace +rec.video.dvd.misc +rec.video.dvd.players +rec.video.dvd.tech +rec.video.dvd.titles +rec.video.marketplace +rec.video.production +rec.video.professional +rec.video.releases +rec.video.satellite +rec.video.satellite.dbs +rec.video.satellite.europe +rec.video.satellite.misc +rec.video.satellite.tvro +rec.windsurfing +rec.woodworking +redhat.config +redhat.general +redhat.kernel.general +redhat.networking.general +redhat.servers.general +redhat.x.general +relcom.comp.os.windows.nt +relcom.humor +relcom.jobs +relcom.politics +relcom.religion +relcom.sci.philosophy +relcom.skeptik +relcom.talk +revue.rrze.test +rhein.markt +rhein.test +rhein.unibn.rhrz.aktuelles +rhein.unibn.rhrz.misc +ri.admin +ri.general +ri.k12.experiences +ri.k12.providers.funding +ri.k12.providers.staff +ri.k12.providers.tech +ri.k12.socialstudies +ri.politics +ri.test +rich.buysell +rno.jobs.offered +rno.jobs.offered.computer +roanoke.community-news +roanoke.news-talk +roanoke.talk +robin.advocacy +robin.bla +robin.gate +robin.logs +robin.lsmpf +robin.lyrik +robin.main +robin.maps +robin.spiele +robin.test +robin.uni +rose.internet.support +rpi.culture.chinese +rpi.forsale +rpi.mail.bisexu-l +ruhr.fundgrube.biete +ruhr.fundgrube.suche +ruhr.infos.mailboxen +ruhr.infosystems +ruhr.szene.kneipen +ruhr.test +rwth.general +rwth.test +rwth.wohnheime +sabbath.adult.pics.asia-girls +sabbath.adult.pics.extrem-sex +sac.announce +sacramento.announce +sacramento.jobs +sacramento.music +sacramento.singles +sacramento.sports +sae.lists.news +sae.lists.saelist +saga-u.beginners +saga-u.forsale +salem.forsale +salem.general +san_antonio.forsale.computers +sanet.radio.packet +sat.announce +sat.eff +sat.food +sat.forsale +sat.general +sat.jobs +sat.music +sat.personals +sat.test +sat.usenet.config +sb.forsale +sbay.education +sbay.forsale +sbay.general +sbay.hams +sbay.health +sbay.housing +sbay.linux +sbay.networking +sbay.news.config +sbay.news.group +sbay.news.stats +sbay.politics +sbay.sports +sbay.test +sbay.transportation +sbay.waffle +schl.kids.kidcafe +schl.kids.kidforum +schl.kids.kidleadr +schl.kids.kidlink +schl.kids.kidplan +schl.kids.kidproj +schl.kids.response +schl.news.edupage +schl.news.nethappen +schl.proj.channel4 +schl.sig.chatback +schl.sig.cosn +schl.sig.edtech +schl.sig.k12admin +schl.sig.lmnet +schl.sig.tag +school.config +school.general +school.project.esp +school.project.pluto +school.pupils +school.subjects.humanities +school.subjects.languages +school.subjects.science +school.teachers +school.test +sci.aeronautic +sci.aeronautics +sci.aeronautics.airliners +sci.aeronautics.simulation +sci.agriculture +sci.agriculture.beekeeping +sci.agriculture.fruit +sci.agriculture.poultry +sci.agriculture.ratites +sci.answers +sci.anthropology +sci.anthropology.paleo +sci.aquaria +sci.archaeology +sci.archaeology.mesoamerican +sci.archaeology.moderated +sci.astro +sci.astro.amateur +sci.astro.ccd-imaging +sci.astro.fits +sci.astro.hubble +sci.astro.planetarium +sci.astro.research +sci.astro.satellites.visual-observe +sci.astro.seti +sci.bio +sci.bio.botany +sci.bio.conservation +sci.bio.ecology +sci.bio.entomology.homoptera +sci.bio.entomology.lepidoptera +sci.bio.entomology.misc +sci.bio.ethology +sci.bio.evolution +sci.bio.fisheries +sci.bio.food-science +sci.bio.herp +sci.bio.immunocytochem +sci.bio.microbiology +sci.bio.misc +sci.bio.paleontology +sci.bio.phytopathology +sci.bio.systematics +sci.bio.technology +sci.chem +sci.chem.analytical +sci.chem.coatings +sci.chem.electrochem +sci.chem.electrochem.battery +sci.chem.labware +sci.chem.organic.synthesis +sci.chem.organomet +sci.chemistry +sci.cognitive +sci.comp-aided +sci.cryonics +sci.crypt +sci.crypt.random-numbers +sci.crypt.research +sci.data.formats +sci.econ +sci.econ.research +sci.edu +sci.electronics +sci.electronics.basics +sci.electronics.cad +sci.electronics.components +sci.electronics.design +sci.electronics.equipment +sci.electronics.misc +sci.electronics.repair +sci.energy +sci.energy.hydrogen +sci.engr +sci.engr.analysis +sci.engr.biomed +sci.engr.chem +sci.engr.civil +sci.engr.coastal +sci.engr.color +sci.engr.control +sci.engr.electrical.compliance +sci.engr.electrical.sys-protection +sci.engr.geomechanics +sci.engr.heat-vent-ac +sci.engr.joining.misc +sci.engr.joining.welding +sci.engr.lighting +sci.engr.manufacturing +sci.engr.marine.hydrodynamics +sci.engr.mech +sci.engr.metallurgy +sci.engr.micromachining +sci.engr.mining +sci.engr.radargsonar +sci.engr.safety +sci.engr.semiconductors +sci.engr.surveying +sci.engr.television.advanced +sci.engr.television.broadcast +sci.environment +sci.environment.waste +sci.finance.abstracts +sci.fractals +sci.geo.earthquakes +sci.geo.eos +sci.geo.fluids +sci.geo.geology +sci.geo.hydrology +sci.geo.meteorology +sci.geo.mineralogy +sci.geo.oceanography +sci.geo.petroleum +sci.geo.rivers+lakes +sci.geo.satellite-nav +sci.horology +sci.image.processing +sci.lang +sci.lang.japan +sci.lang.translation +sci.lang.translation.marketplace +sci.life-extension +sci.logic +sci.materials +sci.materials.ceramics +sci.math +sci.math.num-analysis +sci.math.research +sci.math.stat +sci.math.symbolic +sci.mech.fluids +sci.med +sci.med.aids +sci.med.cannabis +sci.med.cardiology +sci.med.dentistry +sci.med.diseases.als +sci.med.diseases.cancer +sci.med.diseases.hepatitis +sci.med.diseases.lyme +sci.med.diseases.mental.autism +sci.med.diseases.osteoporosis +sci.med.immunology +sci.med.informatics +sci.med.laboratory +sci.med.midwifery +sci.med.nursing +sci.med.nutrition +sci.med.obgyn +sci.med.occupational +sci.med.orthopedics +sci.med.pathology +sci.med.pharmacy +sci.med.physics +sci.med.prostate.bph +sci.med.prostate.cancer +sci.med.prostate.prostatitis +sci.med.psychobiology +sci.med.radiology +sci.med.radiology.interventional +sci.med.telemedicine +sci.med.transcription +sci.med.vision +sci.military.moderated +sci.military.naval +sci.misc +sci.nanotech +sci.nonlinear +sci.op-research +sci.optics +sci.optics.fiber +sci.philosophy.meta +sci.philosophy.tech +sci.physics +sci.physics.accelerators +sci.physics.computational.fluid-dynamics +sci.physics.cond-matter +sci.physics.electromag +sci.physics.fusion +sci.physics.particle +sci.physics.plasma +sci.physics.relativity +sci.physics.research +sci.polymers +sci.psychology +sci.psychology.announce +sci.psychology.consciousness +sci.psychology.digest +sci.psychology.journals.psyche +sci.psychology.journals.psycoloquy +sci.psychology.misc +sci.psychology.personality +sci.psychology.psychotherapy +sci.psychology.psychotherapy.moderated +sci.psychology.research +sci.psychology.theory +sci.research +sci.research.careers +sci.research.postdoc +sci.skeptic +sci.space +sci.space.history +sci.space.news +sci.space.policy +sci.space.science +sci.space.shuttle +sci.space.station +sci.space.tech +sci.stat.consult +sci.stat.edu +sci.stat.math +sci.systems +sci.techniques.mag-resonance +sci.techniques.mass-spec +sci.techniques.microscopy +sci.techniques.spectroscopy +sci.techniques.testing.misc +sci.techniques.testing.nondestructive +sci.techniques.xtallography +sci.test +sci.virtual-worlds +sco.forsale +sco.opendesktop +scot.announce +scot.bairns +scot.birds +scot.business +scot.business.internet +scot.environment +scot.followup +scot.general +scot.jobs +scot.legal +scot.newsgroups.announce +scot.newsgroups.discuss +scot.politics +scot.scots +scot.sports.soccer +scot.test +scot.tld +sdnet.books +sdnet.cablemodems +sdnet.computing +sdnet.config +sdnet.crl +sdnet.eats +sdnet.events +sdnet.forsale +sdnet.freenet +sdnet.gardening +sdnet.general +sdnet.hemp +sdnet.housing +sdnet.internet.high-speed +sdnet.internet.providers +sdnet.jobs +sdnet.jobs.discuss +sdnet.jobs.offered +sdnet.jobs.services +sdnet.jobs.wanted +sdnet.linux +sdnet.lit +sdnet.misc +sdnet.motss +sdnet.movies +sdnet.music +sdnet.next +sdnet.personals +sdnet.pets +sdnet.politics +sdnet.real-estate +sdnet.real-estate.agents +sdnet.resources.health +sdnet.rideshare +sdnet.seminars +sdnet.singles +sdnet.sports +sdnet.test +sdnet.theatre +sdnet.tv +sdnet.waffle +sdnet.wanted +sdnet.weather +sdnet.wireless.pcs +sdnet.writing +seattle.admin +seattle.business +seattle.eats +seattle.forrent.housing +seattle.forsale +seattle.forsale.computers +seattle.forsale.housing +seattle.forsale.misc +seattle.forsale.transportation +seattle.freenet.scn +seattle.gay.news +seattle.general +seattle.internet +seattle.jobs +seattle.jobs.offered +seattle.jobs.wanted +seattle.politics +seattle.seatimes.ptech +seattle.test +seattle.users.macintosh +seismic.general +sex +sex.binaries +sex.binaries.oral +sexzilla.com +sexzilla.com.anal +sexzilla.com.bizarre +sexzilla.com.teen +sff.games.antares.moo2.strategy +sff.games.antares.universe.talk +sff.people.sherwood +sff.writing.business +sh.admin +shout.general +shout.help +simflight.fs2002 +simflight.fsnav4 +simflight.hardware +simflight.satco-ivpa +simflight.vatsim +simflight.vatsim-sa +simflight.vatsim-uk +simflight.vatsim-usa +slipnet.general +soc.adoption.adoptees +soc.adoption.parenting +soc.answers +soc.atheism +soc.bi +soc.college +soc.college.admissions +soc.college.financial-aid +soc.college.grad +soc.college.gradinfo +soc.college.org.aiesec +soc.college.teaching-asst +soc.couples +soc.couples.intercultural +soc.couples.wedding +soc.cultural.netherlands +soc.culture +soc.culture.afghanistan +soc.culture.african +soc.culture.african-american +soc.culture.african.american +soc.culture.african.american.moderated +soc.culture.albanian +soc.culture.algeria +soc.culture.arabic +soc.culture.argentina +soc.culture.asean +soc.culture.asian +soc.culture.asian.american +soc.culture.assyrian +soc.culture.asturies +soc.culture.australia +soc.culture.australian +soc.culture.austria +soc.culture.baltics +soc.culture.bangladesh +soc.culture.basque +soc.culture.belarus +soc.culture.belgium +soc.culture.bengali +soc.culture.berber +soc.culture.bolivia +soc.culture.bosna-herzgvna +soc.culture.brazil +soc.culture.breton +soc.culture.british +soc.culture.bulgaria +soc.culture.burma +soc.culture.cambodia +soc.culture.canada +soc.culture.caribbean +soc.culture.catalan +soc.culture.celtic +soc.culture.chile +soc.culture.china +soc.culture.colombia +soc.culture.cornish +soc.culture.costa-rica +soc.culture.croatia +soc.culture.cuba +soc.culture.czecho-slovak +soc.culture.dominican-rep +soc.culture.ecuador +soc.culture.egyptian +soc.culture.el-salvador +soc.culture.esperanto +soc.culture.estonia +soc.culture.ethiopia.misc +soc.culture.ethiopia.moderated +soc.culture.europe +soc.culture.filipino +soc.culture.france +soc.culture.french +soc.culture.galiza +soc.culture.german +soc.culture.greek +soc.culture.guinea-conakry +soc.culture.haiti +soc.culture.hawaii +soc.culture.hmong +soc.culture.honduras +soc.culture.hongkong +soc.culture.hongkong.entertainment +soc.culture.india +soc.culture.indian +soc.culture.indian.american +soc.culture.indian.delhi +soc.culture.indian.gujarati +soc.culture.indian.info +soc.culture.indian.jammu-kashmir +soc.culture.indian.karnataka +soc.culture.indian.kerala +soc.culture.indian.marathi +soc.culture.indian.telugu +soc.culture.indonesia +soc.culture.intercultural +soc.culture.iranian +soc.culture.iraq +soc.culture.irish +soc.culture.israel +soc.culture.italian +soc.culture.jamaican +soc.culture.japan +soc.culture.japan.moderated +soc.culture.jewish +soc.culture.jewish.holocaust +soc.culture.jewish.moderated +soc.culture.jewish.parenting +soc.culture.jordan +soc.culture.kenya +soc.culture.korean +soc.culture.kurdish +soc.culture.kuwait +soc.culture.kuwait.moderated +soc.culture.laos +soc.culture.latin-america +soc.culture.latin-american +soc.culture.lebanon +soc.culture.liberia +soc.culture.lithuanian +soc.culture.maghreb +soc.culture.magyar +soc.culture.malagasy +soc.culture.malaysia +soc.culture.mexican +soc.culture.mexican.american +soc.culture.misc +soc.culture.mongolian +soc.culture.native +soc.culture.native.american +soc.culture.nepal +soc.culture.netherlands +soc.culture.new-zealand +soc.culture.nicaragua +soc.culture.nigeria +soc.culture.nordic +soc.culture.occitan +soc.culture.pacific-island +soc.culture.pakistan +soc.culture.pakistan.education +soc.culture.pakistan.history +soc.culture.pakistan.moderated +soc.culture.pakistan.politics +soc.culture.pakistan.religion +soc.culture.pakistan.sports +soc.culture.palestine +soc.culture.peru +soc.culture.polish +soc.culture.portuguese +soc.culture.puerto-rico +soc.culture.punjab +soc.culture.quebec +soc.culture.rep-of-georgia +soc.culture.romanian +soc.culture.russia +soc.culture.russian +soc.culture.russian.moderated +soc.culture.scientists +soc.culture.scottish +soc.culture.sierra-leone +soc.culture.singapore +soc.culture.singapore.moderated +soc.culture.slovenia +soc.culture.somalia +soc.culture.south-africa +soc.culture.south-africa.afrikaans +soc.culture.soviet +soc.culture.spain +soc.culture.sri-lanka +soc.culture.swiss +soc.culture.syria +soc.culture.taiwan +soc.culture.tamil +soc.culture.thai +soc.culture.turkish +soc.culture.turkish.moderated +soc.culture.ukrainian +soc.culture.uruguay +soc.culture.usa +soc.culture.venezuela +soc.culture.vietnamese +soc.culture.welsh +soc.culture.yugoslavia +soc.culture.zimbabwe +soc.feminism +soc.gender-issues +soc.genealogy +soc.genealogy.african +soc.genealogy.australia+nz +soc.genealogy.benelux +soc.genealogy.britain +soc.genealogy.computing +soc.genealogy.german +soc.genealogy.hispanic +soc.genealogy.ireland +soc.genealogy.italian +soc.genealogy.jewish +soc.genealogy.marketplace +soc.genealogy.medieval +soc.genealogy.methods +soc.genealogy.misc +soc.genealogy.nordic +soc.genealogy.slavic +soc.genealogy.surnames +soc.genealogy.surnames.britain +soc.genealogy.surnames.canada +soc.genealogy.surnames.german +soc.genealogy.surnames.global +soc.genealogy.surnames.ireland +soc.genealogy.surnames.misc +soc.genealogy.surnames.usa +soc.genealogy.west-indies +soc.history +soc.history.african.biafra +soc.history.ancient +soc.history.early-modern +soc.history.living +soc.history.medieval +soc.history.moderated +soc.history.science +soc.history.war.misc +soc.history.war.us-civil-war +soc.history.war.us-revolution +soc.history.war.vietnam +soc.history.war.world-war-ii +soc.history.what-if +soc.libraries.talk +soc.men +soc.misc +soc.motss +soc.net-people +soc.org.freemasonry +soc.org.freemasons +soc.org.nonprofit +soc.org.service-clubs.misc +soc.penpals +soc.personals +soc.politics +soc.politics.anti-fascism +soc.politics.arms-d +soc.politics.marxism +soc.religion +soc.religion.bahai +soc.religion.christian +soc.religion.christian.bible-study +soc.religion.christian.promisekeepers +soc.religion.christian.youth-work +soc.religion.eastern +soc.religion.gnosis +soc.religion.hindu +soc.religion.islam +soc.religion.mormon +soc.religion.paganism +soc.religion.quaker +soc.religion.shamanism +soc.religion.sikhism +soc.religion.unitarian-univ +soc.religion.vaishnava +soc.retirement +soc.rights +soc.rights.human +soc.senior.health+fitness +soc.senior.healthfitness +soc.senior.issues +soc.sexuality +soc.sexuality.general +soc.sexuality.spanking +soc.singles +soc.singles.moderated +soc.subculture.bondage-bdsm +soc.subculture.bondage-bdsm.femdom +soc.subculture.expatriate +soc.support.aids-hiv+ +soc.support.depression.crisis +soc.support.depression.family +soc.support.depression.manic +soc.support.depression.misc +soc.support.depression.seasonal +soc.support.depression.treatment +soc.support.fat-acceptance +soc.support.fat-acceptance.moderated +soc.support.loneliness +soc.support.pregnancy.loss +soc.support.transgendered +soc.support.youth.gay-lesbian-bi +soc.veterans +soc.woman +soc.women +soc.women.lesbian-and-bi +soc.woof-woof-woof +sol.forsale +sol.games.quake +sol.games.quake2 +sol.general +sol.help +sol.info +sol.lists.freebsd.advocacy +sol.lists.freebsd.afs +sol.lists.freebsd.afs.digest +sol.lists.freebsd.aic7xxx +sol.lists.freebsd.alpha +sol.lists.freebsd.alpha.digest +sol.lists.freebsd.announce +sol.lists.freebsd.announce.digest +sol.lists.freebsd.arch +sol.lists.freebsd.atm +sol.lists.freebsd.bounces +sol.lists.freebsd.bugs +sol.lists.freebsd.chat +sol.lists.freebsd.chat.digest +sol.lists.freebsd.commit +sol.lists.freebsd.config +sol.lists.freebsd.ctm.announce +sol.lists.freebsd.ctm.cvs.cur +sol.lists.freebsd.ctm.cvs.cur.fast +sol.lists.freebsd.ctm.gnats +sol.lists.freebsd.ctm.ports.cur +sol.lists.freebsd.ctm.src.cur +sol.lists.freebsd.ctm.src.cur.fast +sol.lists.freebsd.current +sol.lists.freebsd.current.digest +sol.lists.freebsd.cvs.bin +sol.lists.freebsd.cvs.committers +sol.lists.freebsd.cvs.contrib +sol.lists.freebsd.cvs.cvsroot +sol.lists.freebsd.cvs.distrib +sol.lists.freebsd.cvs.doc +sol.lists.freebsd.cvs.etc +sol.lists.freebsd.cvs.games +sol.lists.freebsd.cvs.gnu +sol.lists.freebsd.cvs.include +sol.lists.freebsd.cvs.lib +sol.lists.freebsd.cvs.libexec +sol.lists.freebsd.cvs.lkm +sol.lists.freebsd.cvs.other +sol.lists.freebsd.cvs.ports +sol.lists.freebsd.cvs.release +sol.lists.freebsd.cvs.sbin +sol.lists.freebsd.cvs.share +sol.lists.freebsd.cvs.sys +sol.lists.freebsd.cvs.user +sol.lists.freebsd.cvs.usrbin +sol.lists.freebsd.cvs.usrsbin +sol.lists.freebsd.cvs.www +sol.lists.freebsd.database +sol.lists.freebsd.database.digest +sol.lists.freebsd.doc +sol.lists.freebsd.emulation +sol.lists.freebsd.fs +sol.lists.freebsd.hackers +sol.lists.freebsd.hackers.digest +sol.lists.freebsd.hardware +sol.lists.freebsd.hubs +sol.lists.freebsd.install +sol.lists.freebsd.isdn +sol.lists.freebsd.isdn.digest +sol.lists.freebsd.isp +sol.lists.freebsd.java +sol.lists.freebsd.java.digest +sol.lists.freebsd.jobs +sol.lists.freebsd.lite2 +sol.lists.freebsd.mobile +sol.lists.freebsd.mozilla +sol.lists.freebsd.multimedia +sol.lists.freebsd.net +sol.lists.freebsd.newbies +sol.lists.freebsd.platforms +sol.lists.freebsd.ports +sol.lists.freebsd.questions +sol.lists.freebsd.questions.digest +sol.lists.freebsd.realtime +sol.lists.freebsd.scsi +sol.lists.freebsd.security +sol.lists.freebsd.security.digest +sol.lists.freebsd.security.notifications +sol.lists.freebsd.small +sol.lists.freebsd.smp +sol.lists.freebsd.sparc +sol.lists.freebsd.sparc.digest +sol.lists.freebsd.stable +sol.lists.freebsd.stable.digest +sol.lists.freebsd.test +sol.lists.freebsd.tokenring +sol.lists.freebsd.tz +sol.lists.freebsd.user.groups +sol.lists.freebsd.www +sol.lists.netbsd.current-users +sol.stats +sol.stats.dsrs +sol.stats.news +sol.talk +sol.test +solent.announce +solent.forsale +solid.rec.keiba +sonoma.general +spb.business.computers +spb.business.other +spb.fido.business +spb.fido.job +spb.test +sqnt-public.forsale +srcc.local.statistics +srg.drs1 +srg.drs2 +srg.drs3 +srg.info +srg.programme +srg.ticker +srg.tvdrs +sri.market +sta.general +sta.test +stamps.worldwide +staroffice.admin +staroffice.com.chat +staroffice.com.feature +staroffice.com.support.announce +staroffice.com.support.install.linux +staroffice.com.support.install.os2 +staroffice.com.support.install.solaris +staroffice.com.support.install.windows +staroffice.com.support.misc +staroffice.com.support.starbase +staroffice.com.support.starbasic +staroffice.com.support.starcalc +staroffice.com.support.starchart +staroffice.com.support.stardesktop +staroffice.com.support.stardiscussion +staroffice.com.support.stardraw +staroffice.com.support.starimage +staroffice.com.support.starimpress +staroffice.com.support.starmail +staroffice.com.support.starmath +staroffice.com.support.starschedule +staroffice.com.support.starwriter +staroffice.com.support.starwriter-web +staroffice.com.test +stben.admin +stben.anciens +stben.chat +stben.cours +stben.occases +stben.test +stl.config +stl.dining +stl.forsale +stl.general +stl.jobs +stl.jobs.resumes +stl.news +stl.rec +stl.test +sub.jokes.d +sub.market +sub.security +sub.sex +sudbury.misc +sun.forsale.misc +sunet.biomed.neurosci.motorctrl.clin +sunet.biomed.neurosci.neurophysiol.clin +sunet.doktorand +sunet.humfak.engelska.doktorander +supernews.general +sura.announce +sura.config +sura.noc.status +sura.security +sura.techs +surfnet.announce +surfnet.cwis-nl +swbell.discussion +swbell.general +swbell.homepages +swbell.newusers +swbell.test +swipnet.announce +switch.backup +sybase.private.asa.linux +sybase.public.ase.administration +sybase.public.ase.general +sybase.public.ase.performance+tuning +sybase.public.connectivity.odbc +sybase.public.connectivity.open_client +sybase.public.iq +sybase.public.jconnect +sybase.public.jconnect30 +sybase.public.powerdynamo +sybase.public.rep-server +sybase.public.sqlanywhere.general +sybase.public.sqlanywhere.replication +sybase.public.sqlserver.general +sybase.public.sqlserver.unix +sybase.server.bugnews.oahu +symantec +symantec.customerservice +symantec.customerservice.general +symantec.support.devtools.pc.cafe.java +symantec.support.devtools.pc.cafe.using +symantec.support.devtools.pc.dbanywhere.using +symantec.support.devtools.pc.visual-cafe.java +symantec.support.devtools.windows.vcafe4java.other +symantec.support.dos.nortonutilities.general +symantec.support.dos.pca.general +symantec.support.dos.qa.database.general +symantec.support.mac.nortonutilities.general +symantec.support.network.ghost.general +symantec.support.network.nortonantivirus.firewalls +symantec.support.network.nortonantivirus.netware +symantec.support.network.winfax.general +symantec.support.pda.act.psion.general +symantec.support.sdk.winfax.talkworks +symantec.support.win3x.nortonantivirus.general +symantec.support.win95.act3.general +symantec.support.win95.crashguard.general +symantec.support.win95.nortonantivirus.definitionupdates +symantec.support.win95.nortonantivirus.general +symantec.support.win95.nortonantivirus.liveupdate +symantec.support.win95.nortonutilities.diskdoctor +symantec.support.win95.nortonutilities.general +symantec.support.win95.nortonutilities.speeddisk +symantec.support.win95.pca.modem +symantec.support.win95.safeontheweb.general +symantec.support.win95.your_eyes_only.general +symantec.support.winnt.nortonantivirus.general +symantec.support.winnt.nortonantivirus.virusrepair_info +symantec.support.winnt.nttools.general +symantec.support.winnt.pca.general +symantec.support.winnt.winfax8.general +symantec.support.winnt.your_eyes_only.general +tacoma.events +tacoma.general +tacoma.politics +tahoe.general +talk.abortion +talk.animals.politics +talk.answers +talk.atheism +talk.bizarre +talk.bizarre.nice +talk.environment +talk.euthanasia +talk.origins +talk.philosophy.humanism +talk.philosophy.misc +talk.politics +talk.politics.animals +talk.politics.china +talk.politics.crypto +talk.politics.drugs +talk.politics.european-union +talk.politics.guns +talk.politics.libertarian +talk.politics.medicine +talk.politics.mideast +talk.politics.misc +talk.politics.soviet +talk.politics.theory +talk.politics.tibet +talk.rape +talk.religion +talk.religion.bahai +talk.religion.buddhism +talk.religion.christian.anglican +talk.religion.course-miracle +talk.religion.misc +talk.religion.newage +talk.religion.pantheism +talk.rumors +tamu.forsale +test.post +tnn.comm.pager +tnn.jobs +tnn.religion.catholic +to +tohoku.talk +tor +tor.bizarre +tor.buysell +tor.config +tor.eats +tor.forsale +tor.forsale.computers +tor.forsale.misc +tor.general +tor.housing +tor.ieee +tor.jobs +tor.jobs.offered +tor.journalism +tor.news.stats +tor.pagan +tor.uucp +tor.www.commerce +tor.www.misc +torfree.fccs.news.misc +torfree.for-sale +torfree.general +torfree.housing +torfree.stats +torfree.test +torfree.writers +trial.misc.legal.software +triangle.arts +triangle.config +triangle.decus +triangle.dining +triangle.forsale +triangle.freenet +triangle.gamers +triangle.gardens +triangle.general +triangle.graphics +triangle.java +triangle.jobs +triangle.libsci +triangle.motss +triangle.movies +triangle.neural-nets +triangle.personals.bi +triangle.personals.w-seeking-m +triangle.politics +triangle.radio +triangle.realty +triangle.singles +triangle.sports +triangle.sun +triangle.systems +triangle.talks +triangle.transport +triangle.vlsi +triangle.wanted +triangle.wizards +trumpet.announce +trumpet.bugs +trumpet.feedback +trumpet.questions +trumpet.test +tsukuba.living +tsukuba.wanted +tub.general +tucson.general +turbopower.public.support.asyncpro +tvontario.teleguide +uark.asg +uark.config +uark.forsale +uark.general +uark.jobs +uark.orgs +uark.sports +ubc.ads.for-sale +ubc.general +uberlin.general +uc.bearcats +uc.general +uc.test +uk.local.cumbria +uk.people.sf-fans +uk.radio.amateur +ukr.nodes +ukr.politics +unisys.csg.ideas +uniwue.test +unix-pc.general +uottawa.crf-wrc.anti-sexism +uottawa.forsale +uq.forsale +us.arts +us.arts.poetry +us.arts.tv.soaps +us.config +us.events.ok-explosion +us.forsale +us.forsale.computers +us.forsale.d +us.forsale.misc +us.issues +us.issues.abortion +us.issues.occupations.computer-programmers +us.issues.statehood.upstate-ny +us.jobs +us.jobs.contract +us.jobs.misc +us.jobs.offered +us.jobs.offered.contract +us.jobs.resumes +us.jobs.wanted +us.legal +us.legal.self-represent +us.marketplace.computers.hardware +us.marketplace.computers.software +us.marketplace.games +us.marketplace.other +us.military.army +us.military.history +us.military.national-guard +us.misc +us.misc.family-radio +us.org.bicycle-greenways.nbg +us.politics +us.politics.abortion +us.politics.elections +us.rec.scouting +us.sc.charleston.business +us.sc.charleston.forsale +us.sc.charleston.personals +us.sc.charleston.politics +us.sc.charleston.talk +us.sc.chester.employment +us.sc.columbia.business +us.sc.columbia.employment +us.sc.columbia.forsale +us.sc.columbia.politics +us.sc.florence.business +us.sc.florence.employment +us.sc.florence.forsale +us.sc.gsp.business +us.sc.gsp.forsale +us.sc.gsp.politics +us.sc.lancaster.business +us.sc.rockhill.business +us.sc.rockhill.personals +us.sport +us.sport.baseball +us.sport.baseball.college +us.sport.basketball +us.sport.football +us.sport.football.college +us.sport.football.pro +us.state.iowa +us.taxes +us.test +us.wanted +us.wanted.misc +usa-today.health +usa-today.insur +usa-today.sports +usa.forsale +usask.forsale +usc.forsale +ut.jobs +utah.forsale +utah.general +utah.jobs +utah.linux +utah.religion +utah.valley.forsale +utah.valley.jobs +uunet.alternet +uunet.announce +uunet.forum +uunet.products +uunet.status +uunet.tech +va.config +va.forsale +va.general +va.jobs +va.politics +va.test +van.4sale +van.chatter +van.forsale +van.general +van.jobs +van.test +van.vpcus.announce +van.vpcus.general +van.vpcus.sigs.internet +vatech.forsale +vatech.sys.sun +vegas.bi +vegas.config +vegas.food +vegas.for-sale +vegas.general +vegas.jobs +vegas.motss +vegas.personals +vegas.personals.fsf +vegas.personals.fsm +vegas.personals.msf +vegas.personals.msm +vegas.personals.swingers +vegas.singles +vegas.test +veritas.backupexec.windowsnt.english +video.laserdisc.marketplace +vmsnet.alpha +vmsnet.announce +vmsnet.announce.newusers +vmsnet.decus.journal +vmsnet.decus.lugs +vmsnet.employment +vmsnet.epsilon-cd +vmsnet.groups +vmsnet.infosystems.gopher +vmsnet.infosystems.misc +vmsnet.internals +vmsnet.mail.misc +vmsnet.mail.mx +vmsnet.mail.pmdf +vmsnet.misc +vmsnet.networks.desktop.misc +vmsnet.networks.desktop.pathworks +vmsnet.networks.management.decmcc +vmsnet.networks.management.misc +vmsnet.networks.misc +vmsnet.networks.tcp-ip.cmu-tek +vmsnet.networks.tcp-ip.misc +vmsnet.networks.tcp-ip.multinet +vmsnet.networks.tcp-ip.tcpware +vmsnet.networks.tcp-ip.ucx +vmsnet.networks.tcp-ip.wintcp +vmsnet.pdp-11 +vmsnet.sdk.openvms.fieldtest +vmsnet.sources +vmsnet.sources.d +vmsnet.sources.games +vmsnet.sysmgt +vmsnet.test +vmsnet.tpu +vmsnet.uucp +vmsnet.vms-posix +vmware.esx-server +vmware.for-linux.configuration +vmware.for-linux.experimental +vmware.for-linux.general +vmware.for-windowsnt.configuration +vmware.for-windowsnt.experimental +vmware.for-windowsnt.general +vmware.gsx-server.for-linux +vmware.gsx-server.for-windows +vmware.guest.linux +vmware.guest.misc +vmware.guest.netware +vmware.guest.windows2000 +vmware.guest.windows98 +vnet.general +volga.commerce +vpro.tv +vt.4sale +vt.forsale +vt.general +vu.org.mac101 +vuw.general +vyatka.commerce +wa.ads.commercial +wa.ads.forsale +wa.general +wadai.talk.books +wash +wash.assistive-tech +wash.everett.forsale +wash.everett.general +wash.general +wash.politics +wash.test +webgain.support.studio.v4.wls +webgain.support.visualcafe.v4.debugging +weblogic.developer.interest.clustering +weblogic.developer.interest.clustering.in-memory-replication +weblogic.developer.interest.commerce +weblogic.developer.interest.connector +weblogic.developer.interest.ejb +weblogic.developer.interest.ejb.cmp +weblogic.developer.interest.ejb.ejb20 +weblogic.developer.interest.ejb.tools +weblogic.developer.interest.environment +weblogic.developer.interest.general +weblogic.developer.interest.jdbc +weblogic.developer.interest.jms +weblogic.developer.interest.jndi +weblogic.developer.interest.jsp +weblogic.developer.interest.management +weblogic.developer.interest.performance +weblogic.developer.interest.personalization +weblogic.developer.interest.plug-in +weblogic.developer.interest.portal +weblogic.developer.interest.rmi-iiop +weblogic.developer.interest.security +weblogic.developer.interest.servlet +weblogic.developer.interest.transaction +weblogic.developer.interest.xml +weblogic.support.install +well.general +wesley.general +west-virginia.config +west-virginia.general +wgtn.chat +wi.forsale +wi.general +wi.jobs +wi.madison +wi.madison.forsale +wi.madison.general +wi.northeastern.talk +wi.transit +winnipeg.general +witten.flohmarkt +wiz.bmw +wiz.mopar +wiz.motorace +wny.events +wny.freenet.genealogy.general +wny.freenet.questions +wny.geneology.general +wny.motss +wny.news +wny.rochester.freenet +wny.rocslug +wny.test +wny.wbfo +wolfhh.general +women.health +world +worldnet.test +wpg.computers.help +wpg.forsale +wpg.forsale.computers +wpg.forsale.misc +wpg.general +wpg.politics +wpi.spanish +wpi.techwriting +wpi.test +wtby.announce +wu.cs.general +wyo.education +wyo.energy +wyo.internet +xmission.announce +xmission.test +zoom.cheesedog +zoomnet.general +zyxel.test diff --git a/nntp/NNTP.BAK b/nntp/NNTP.BAK new file mode 100644 index 0000000..fc17191 --- /dev/null +++ b/nntp/NNTP.BAK @@ -0,0 +1,2042 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=nntp - Win32 Debug +!MESSAGE No configuration specified. Defaulting to nntp - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "nntp - Win32 Release" && "$(CFG)" != "nntp - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Nntp.mak" CFG="nntp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "nntp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "nntp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "nntp - Win32 Debug" +RSC=rc.exe +MTL=mktyplib.exe +CPP=cl.exe + +!IF "$(CFG)" == "nntp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Nntp.exe" + +CLEAN : + -@erase "$(INTDIR)\entrydlg.obj" + -@erase "$(INTDIR)\groupdlg.obj" + -@erase "$(INTDIR)\Header.obj" + -@erase "$(INTDIR)\imgview.obj" + -@erase "$(INTDIR)\jpgimg.obj" + -@erase "$(INTDIR)\listitms.obj" + -@erase "$(INTDIR)\logview.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\msglog.obj" + -@erase "$(INTDIR)\mwdlg.obj" + -@erase "$(INTDIR)\Newsitem.obj" + -@erase "$(INTDIR)\newsreg.obj" + -@erase "$(INTDIR)\nntp.obj" + -@erase "$(INTDIR)\nntp.res" + -@erase "$(INTDIR)\nntpthrd.obj" + -@erase "$(INTDIR)\optnsdlg.obj" + -@erase "$(INTDIR)\optnsreg.obj" + -@erase "$(INTDIR)\rasdlg.obj" + -@erase "$(INTDIR)\rasiface.obj" + -@erase "$(INTDIR)\rcvrlog.obj" + -@erase "$(INTDIR)\srvrdlg.obj" + -@erase "$(OUTDIR)\Nntp.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /c +CPP_PROJ=/nologo /ML /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "__FLAT__"\ + /D "STRICT" /Fp"$(INTDIR)/Nntp.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/nntp.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Nntp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Nntp.pdb" /machine:I386 /out:"$(OUTDIR)/Nntp.exe" +LINK32_OBJS= \ + "$(INTDIR)\entrydlg.obj" \ + "$(INTDIR)\groupdlg.obj" \ + "$(INTDIR)\Header.obj" \ + "$(INTDIR)\imgview.obj" \ + "$(INTDIR)\jpgimg.obj" \ + "$(INTDIR)\listitms.obj" \ + "$(INTDIR)\logview.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\msglog.obj" \ + "$(INTDIR)\mwdlg.obj" \ + "$(INTDIR)\Newsitem.obj" \ + "$(INTDIR)\newsreg.obj" \ + "$(INTDIR)\nntp.obj" \ + "$(INTDIR)\nntp.res" \ + "$(INTDIR)\nntpthrd.obj" \ + "$(INTDIR)\optnsdlg.obj" \ + "$(INTDIR)\optnsreg.obj" \ + "$(INTDIR)\rasdlg.obj" \ + "$(INTDIR)\rasiface.obj" \ + "$(INTDIR)\rcvrlog.obj" \ + "$(INTDIR)\srvrdlg.obj" \ + "..\..\Parts\jpeg-6b\lib\jpeg6b.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\msrasapi.lib" \ + "..\Exe\mssocket.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\uulib.lib" + +"$(OUTDIR)\Nntp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Nntp.exe" + +CLEAN : + -@erase "$(INTDIR)\entrydlg.obj" + -@erase "$(INTDIR)\groupdlg.obj" + -@erase "$(INTDIR)\Header.obj" + -@erase "$(INTDIR)\imgview.obj" + -@erase "$(INTDIR)\jpgimg.obj" + -@erase "$(INTDIR)\listitms.obj" + -@erase "$(INTDIR)\logview.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\msglog.obj" + -@erase "$(INTDIR)\mwdlg.obj" + -@erase "$(INTDIR)\Newsitem.obj" + -@erase "$(INTDIR)\newsreg.obj" + -@erase "$(INTDIR)\nntp.obj" + -@erase "$(INTDIR)\nntpthrd.obj" + -@erase "$(INTDIR)\optnsdlg.obj" + -@erase "$(INTDIR)\optnsreg.obj" + -@erase "$(INTDIR)\rasdlg.obj" + -@erase "$(INTDIR)\rasiface.obj" + -@erase "$(INTDIR)\rcvrlog.obj" + -@erase "$(INTDIR)\srvrdlg.obj" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Nntp.exe" + -@erase ".\nntp.res" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo"nntp.res" /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"nntp.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Nntp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib wsock32.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 +# SUBTRACT LINK32 /map +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib comctl32.lib uuid.lib wsock32.lib /nologo\ + /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386\ + /out:"$(OUTDIR)/Nntp.exe" +LINK32_OBJS= \ + "$(INTDIR)\entrydlg.obj" \ + "$(INTDIR)\groupdlg.obj" \ + "$(INTDIR)\Header.obj" \ + "$(INTDIR)\imgview.obj" \ + "$(INTDIR)\jpgimg.obj" \ + "$(INTDIR)\listitms.obj" \ + "$(INTDIR)\logview.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\msglog.obj" \ + "$(INTDIR)\mwdlg.obj" \ + "$(INTDIR)\Newsitem.obj" \ + "$(INTDIR)\newsreg.obj" \ + "$(INTDIR)\nntp.obj" \ + "$(INTDIR)\nntpthrd.obj" \ + "$(INTDIR)\optnsdlg.obj" \ + "$(INTDIR)\optnsreg.obj" \ + "$(INTDIR)\rasdlg.obj" \ + "$(INTDIR)\rasiface.obj" \ + "$(INTDIR)\rcvrlog.obj" \ + "$(INTDIR)\srvrdlg.obj" \ + "..\..\Parts\jpeg-6b\lib\jpeg6b.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\msrasapi.lib" \ + "..\Exe\mssocket.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\uulib.lib" \ + ".\nntp.res" + +"$(OUTDIR)\Nntp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "nntp - Win32 Release" +# Name "nntp - Win32 Debug" + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Grpitem.hpp"\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\Iterator.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Newsgrp.hpp"\ + {$(INCLUDE)}"\.\Newsopt.hpp"\ + {$(INCLUDE)}"\.\Nntp.hpp"\ + {$(INCLUDE)}"\.\Nntpthrd.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdifrm.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Grpitem.hpp"\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\Iterator.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Newsgrp.hpp"\ + {$(INCLUDE)}"\.\Newsopt.hpp"\ + {$(INCLUDE)}"\.\Nntp.hpp"\ + {$(INCLUDE)}"\.\Nntpthrd.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdifrm.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mssocket.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\nntp.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_NNTP_=\ + {$(INCLUDE)}"\.\Grpitem.hpp"\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\Iterator.hpp"\ + {$(INCLUDE)}"\.\Listitem.hpp"\ + {$(INCLUDE)}"\.\Listitms.hpp"\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Nntp.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\nntp.obj" : $(SOURCE) $(DEP_CPP_NNTP_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_NNTP_=\ + {$(INCLUDE)}"\.\Grpitem.hpp"\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\Iterator.hpp"\ + {$(INCLUDE)}"\.\Listitem.hpp"\ + {$(INCLUDE)}"\.\Listitms.hpp"\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Nntp.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\nntp.obj" : $(SOURCE) $(DEP_CPP_NNTP_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\listitms.cpp +DEP_CPP_LISTI=\ + {$(INCLUDE)}"\.\Listitem.hpp"\ + {$(INCLUDE)}"\.\Listitms.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\listitms.obj" : $(SOURCE) $(DEP_CPP_LISTI) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\newsreg.cpp +DEP_CPP_NEWSR=\ + {$(INCLUDE)}"\.\Newsgrp.hpp"\ + {$(INCLUDE)}"\.\Newsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\newsreg.obj" : $(SOURCE) $(DEP_CPP_NEWSR) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\nntp.rc +DEP_RSC_NNTP_R=\ + ".\Cbox.bmp"\ + ".\CBOXC.BMP"\ + ".\LOG.ICO"\ + ".\NNTP.ICO"\ + ".\PAINT.ICO"\ + ".\Strip.bmp"\ + {$(INCLUDE)}"\.\Resource.h"\ + + +!IF "$(CFG)" == "nntp - Win32 Release" + + +"$(INTDIR)\nntp.res" : $(SOURCE) $(DEP_RSC_NNTP_R) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + + +".\nntp.res" : $(SOURCE) $(DEP_RSC_NNTP_R) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\srvrdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_SRVRD=\ + {$(INCLUDE)}"\.\Optnsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_SRVRD=\ + {$(INCLUDE)}"\.\Optnsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\groupdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_GROUP=\ + {$(INCLUDE)}"\.\Entrydlg.hpp"\ + {$(INCLUDE)}"\.\Groupdlg.hpp"\ + {$(INCLUDE)}"\.\Newsgrp.hpp"\ + {$(INCLUDE)}"\.\Newsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Odlstchk.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\groupdlg.obj" : $(SOURCE) $(DEP_CPP_GROUP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_GROUP=\ + {$(INCLUDE)}"\.\Entrydlg.hpp"\ + {$(INCLUDE)}"\.\Groupdlg.hpp"\ + {$(INCLUDE)}"\.\Newsgrp.hpp"\ + {$(INCLUDE)}"\.\Newsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Odlstchk.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\groupdlg.obj" : $(SOURCE) $(DEP_CPP_GROUP) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\entrydlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_ENTRY=\ + {$(INCLUDE)}"\.\Entrydlg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\entrydlg.obj" : $(SOURCE) $(DEP_CPP_ENTRY) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_ENTRY=\ + {$(INCLUDE)}"\.\Entrydlg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\entrydlg.obj" : $(SOURCE) $(DEP_CPP_ENTRY) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\nntpthrd.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_NNTPT=\ + {$(INCLUDE)}"\.\Grpitem.hpp"\ + {$(INCLUDE)}"\.\Iterator.hpp"\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Nntp.hpp"\ + {$(INCLUDE)}"\.\Nntpthrd.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\nntpthrd.obj" : $(SOURCE) $(DEP_CPP_NNTPT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_NNTPT=\ + {$(INCLUDE)}"\.\Grpitem.hpp"\ + {$(INCLUDE)}"\.\Iterator.hpp"\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Nntp.hpp"\ + {$(INCLUDE)}"\.\Nntpthrd.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\nntpthrd.obj" : $(SOURCE) $(DEP_CPP_NNTPT) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msrasapi.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\rasdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_RASDL=\ + {$(INCLUDE)}"\.\Rasdlg.hpp"\ + {$(INCLUDE)}"\.\Rasiface.hpp"\ + {$(INCLUDE)}"\.\Rasoptns.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Ras.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Rasapi\Connstat.hpp"\ + {$(INCLUDE)}"\Rasapi\Cstate.hpp"\ + {$(INCLUDE)}"\Rasapi\Dialparm.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasapi.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasentry.hpp"\ + {$(INCLUDE)}"\Rasapi\Rassrv.hpp"\ + + +"$(INTDIR)\rasdlg.obj" : $(SOURCE) $(DEP_CPP_RASDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_RASDL=\ + {$(INCLUDE)}"\.\Rasdlg.hpp"\ + {$(INCLUDE)}"\.\Rasiface.hpp"\ + {$(INCLUDE)}"\.\Rasoptns.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Ras.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Rasapi\Connstat.hpp"\ + {$(INCLUDE)}"\Rasapi\Cstate.hpp"\ + {$(INCLUDE)}"\Rasapi\Dialparm.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasapi.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasentry.hpp"\ + {$(INCLUDE)}"\Rasapi\Rassrv.hpp"\ + + +"$(INTDIR)\rasdlg.obj" : $(SOURCE) $(DEP_CPP_RASDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\rasiface.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_RASIF=\ + {$(INCLUDE)}"\.\Rasiface.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Ras.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Rasapi\Connstat.hpp"\ + {$(INCLUDE)}"\Rasapi\Cstate.hpp"\ + {$(INCLUDE)}"\Rasapi\Dialparm.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasapi.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasentry.hpp"\ + {$(INCLUDE)}"\Rasapi\Rassrv.hpp"\ + + +"$(INTDIR)\rasiface.obj" : $(SOURCE) $(DEP_CPP_RASIF) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_RASIF=\ + {$(INCLUDE)}"\.\Rasiface.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Ras.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Rasapi\Connstat.hpp"\ + {$(INCLUDE)}"\Rasapi\Cstate.hpp"\ + {$(INCLUDE)}"\Rasapi\Dialparm.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasapi.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasentry.hpp"\ + {$(INCLUDE)}"\Rasapi\Rassrv.hpp"\ + + +"$(INTDIR)\rasiface.obj" : $(SOURCE) $(DEP_CPP_RASIF) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\optnsdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_OPTNS=\ + {$(INCLUDE)}"\.\Optnsdlg.hpp"\ + {$(INCLUDE)}"\.\Optnsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\optnsdlg.obj" : $(SOURCE) $(DEP_CPP_OPTNS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_OPTNS=\ + {$(INCLUDE)}"\.\Optnsdlg.hpp"\ + {$(INCLUDE)}"\.\Optnsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\optnsdlg.obj" : $(SOURCE) $(DEP_CPP_OPTNS) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\optnsreg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_OPTNSR=\ + {$(INCLUDE)}"\.\Optnsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\optnsreg.obj" : $(SOURCE) $(DEP_CPP_OPTNSR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_OPTNSR=\ + {$(INCLUDE)}"\.\Optnsreg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\optnsreg.obj" : $(SOURCE) $(DEP_CPP_OPTNSR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Header.cpp +DEP_CPP_HEADE=\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Header.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Newsitem.cpp +DEP_CPP_NEWSI=\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\Newsitem.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Newsitem.obj" : $(SOURCE) $(DEP_CPP_NEWSI) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\msfileio.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\msglog.cpp +DEP_CPP_MSGLO=\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Msglog.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Fileio\Fileio.hpp"\ + + +"$(INTDIR)\msglog.obj" : $(SOURCE) $(DEP_CPP_MSGLO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\uulib.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\statbar.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mainfrm.cpp +DEP_CPP_MAINF=\ + {$(INCLUDE)}"\.\Groupdlg.hpp"\ + {$(INCLUDE)}"\.\Grpitem.hpp"\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\imgview.hpp"\ + {$(INCLUDE)}"\.\Iterator.hpp"\ + {$(INCLUDE)}"\.\jpgimg.hpp"\ + {$(INCLUDE)}"\.\Listitem.hpp"\ + {$(INCLUDE)}"\.\Listitms.hpp"\ + {$(INCLUDE)}"\.\logview.hpp"\ + {$(INCLUDE)}"\.\mainfrm.hpp"\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\Msglog.hpp"\ + {$(INCLUDE)}"\.\mwdlg.hpp"\ + {$(INCLUDE)}"\.\Newsgrp.hpp"\ + {$(INCLUDE)}"\.\Newsopt.hpp"\ + {$(INCLUDE)}"\.\Newsreg.hpp"\ + {$(INCLUDE)}"\.\Nntp.hpp"\ + {$(INCLUDE)}"\.\Nntpthrd.hpp"\ + {$(INCLUDE)}"\.\Optnsdlg.hpp"\ + {$(INCLUDE)}"\.\Optnsreg.hpp"\ + {$(INCLUDE)}"\.\Rasdlg.hpp"\ + {$(INCLUDE)}"\.\Rasiface.hpp"\ + {$(INCLUDE)}"\.\Rasoptns.hpp"\ + {$(INCLUDE)}"\.\rcvrlog.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\.\rgb888.hpp"\ + {$(INCLUDE)}"\.\scroll.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdifrm.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Odlstchk.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Ras.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Display\Editwnd.hpp"\ + {$(INCLUDE)}"\Display\Guibrdr.hpp"\ + {$(INCLUDE)}"\Display\Guichar.hpp"\ + {$(INCLUDE)}"\Display\Guiline.hpp"\ + {$(INCLUDE)}"\Display\Keyctrl.hpp"\ + {$(INCLUDE)}"\Display\Vcaret.hpp"\ + {$(INCLUDE)}"\Display\Virtdisp.hpp"\ + {$(INCLUDE)}"\Fileio\Fileio.hpp"\ + {$(INCLUDE)}"\Rasapi\Connstat.hpp"\ + {$(INCLUDE)}"\Rasapi\Cstate.hpp"\ + {$(INCLUDE)}"\Rasapi\Dialparm.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasapi.hpp"\ + {$(INCLUDE)}"\Rasapi\Rasentry.hpp"\ + {$(INCLUDE)}"\Rasapi\Rassrv.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Resolve.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Monitor.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + {$(INCLUDE)}"\Uudecode\Decode.hpp"\ + + +"$(INTDIR)\mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\logview.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_LOGVI=\ + {$(INCLUDE)}"\.\logview.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Odlstalt.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Fileio\Fileio.hpp"\ + {$(INCLUDE)}"\printman\Abortdlg.hpp"\ + {$(INCLUDE)}"\printman\Printer.hpp"\ + {$(INCLUDE)}"\printman\Printman.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + + +"$(INTDIR)\logview.obj" : $(SOURCE) $(DEP_CPP_LOGVI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_LOGVI=\ + {$(INCLUDE)}"\.\logview.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Odlstalt.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Fileio\Fileio.hpp"\ + {$(INCLUDE)}"\printman\Abortdlg.hpp"\ + {$(INCLUDE)}"\printman\Printer.hpp"\ + {$(INCLUDE)}"\printman\Printman.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + + +"$(INTDIR)\logview.obj" : $(SOURCE) $(DEP_CPP_LOGVI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\printman.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msdialog.lib + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\rcvrlog.cpp +DEP_CPP_RCVRL=\ + {$(INCLUDE)}"\.\Msgid.hpp"\ + {$(INCLUDE)}"\.\rcvrlog.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Fileio\Fileio.hpp"\ + + +"$(INTDIR)\rcvrlog.obj" : $(SOURCE) $(DEP_CPP_RCVRL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\imgview.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_IMGVI=\ + {$(INCLUDE)}"\.\imgview.hpp"\ + {$(INCLUDE)}"\.\jpgimg.hpp"\ + {$(INCLUDE)}"\.\rgb888.hpp"\ + {$(INCLUDE)}"\.\scroll.hpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + + +"$(INTDIR)\imgview.obj" : $(SOURCE) $(DEP_CPP_IMGVI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_IMGVI=\ + {$(INCLUDE)}"\.\imgview.hpp"\ + {$(INCLUDE)}"\.\jpgimg.hpp"\ + {$(INCLUDE)}"\.\rgb888.hpp"\ + {$(INCLUDE)}"\.\scroll.hpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Mdiwin.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\status.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\statbarx.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + + +"$(INTDIR)\imgview.obj" : $(SOURCE) $(DEP_CPP_IMGVI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE="\Parts\jpeg-6b\lib\jpeg6b.lib" + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\jpgimg.cpp +DEP_CPP_JPGIM=\ + {$(INCLUDE)}"\.\jpgimg.hpp"\ + {$(INCLUDE)}"\.\rgb888.hpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Dib.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\jpeg-6b\jconfig.hpp"\ + {$(INCLUDE)}"\jpeg-6b\jerror.hpp"\ + {$(INCLUDE)}"\jpeg-6b\jexcept.hpp"\ + {$(INCLUDE)}"\jpeg-6b\jmorecfg.hpp"\ + {$(INCLUDE)}"\jpeg-6b\jpeg6b.hpp"\ + {$(INCLUDE)}"\jpeg-6b\jpegint.hpp"\ + {$(INCLUDE)}"\jpeg-6b\jpeglib.hpp"\ + + +"$(INTDIR)\jpgimg.obj" : $(SOURCE) $(DEP_CPP_JPGIM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mwdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_MWDLG=\ + {$(INCLUDE)}"\.\mwdlg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Odlstalt.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\mwdlg.obj" : $(SOURCE) $(DEP_CPP_MWDLG) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_MWDLG=\ + {$(INCLUDE)}"\.\mwdlg.hpp"\ + {$(INCLUDE)}"\.\Resource.h"\ + {$(INCLUDE)}"\.\Resource.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Odlist.hpp"\ + {$(INCLUDE)}"\Common\Odlstalt.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rubber.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\mwdlg.obj" : $(SOURCE) $(DEP_CPP_MWDLG) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/nntp/NNTP.CPP b/nntp/NNTP.CPP new file mode 100644 index 0000000..fd82103 --- /dev/null +++ b/nntp/NNTP.CPP @@ -0,0 +1,711 @@ +#include +#include +#include +#include +#include +#include +#include + +bool NNTPClient::open(const String &hostName,const String &user,const String &password) +{ + Block responseLines; + String strLastResponse; + HostEnt hostEntry; + ServEnt serverEntry; + + if(isConnected())cancel(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return false;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return false;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return false;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + INETSocketAddress::internetAddress((hostEntry.addresses())[0]); + if(!serverEntry.serviceByName("nntp","tcp")){message("cannot determine port number for nntp daemon.");return FALSE;} + if(!mNNTPControl.create()){message("unable to create socket.");return FALSE;} + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(serverEntry.port()); + if(!mNNTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to nntp server");return FALSE;} + if(!isConnected())return false; + receiveStrings(responseLines); + message(responseLines); + if(responseLines.size()) + { + strLastResponse=responseLines[responseLines.size()-1]; + if(isInResponse(strLastResponse.betweenString(0,' '),mNakConnectStrings))mNNTPControl.destroy(); + else if(!authenticate(user,password))mNNTPControl.destroy(); + } + return mNNTPControl.isConnected(); +} + +bool NNTPClient::open(const String &hostName) +{ + Block responseLines; + String strLastResponse; + HostEnt hostEntry; + ServEnt serverEntry; + + if(isConnected())cancel(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return false;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return false;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return false;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + INETSocketAddress::internetAddress((hostEntry.addresses())[0]); + if(!serverEntry.serviceByName("nntp","tcp")){message("cannot determine port number for nntp daemon.");return false;} + if(!mNNTPControl.create()){message("unable to create socket.");return false;} + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(serverEntry.port()); + if(!mNNTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to nntp server");return false;} + if(!isConnected())return false; + receiveStrings(responseLines); + return mNNTPControl.isConnected(); +} + +bool NNTPClient::quit(void) +{ + String controlData; + String responseLine; + + if(!isConnected())return false; + controlData=mNNTPCmds[Quit]; + if(!putControlData(controlData,false))return false; + if(!mNNTPControl.receive(responseLine))return false; + message(responseLine); + if(!isInResponse(responseLine.betweenString(0,' '),mAckQuitResponseStrings))return false; + return true; +} + +bool NNTPClient::slave(void) +{ + String controlData; + String responseLine; + + if(!isConnected())return false; + controlData=mNNTPCmds[Slave]; + if(!putControlData(controlData,false))return false; + if(!mNNTPControl.receive(responseLine))return false; + message(responseLine); + if(!isInResponse(responseLine.betweenString(0,' '),mAckSlaveResponseStrings))return false; + return true; +} + +bool NNTPClient::group(GroupItem &groupItem) +{ + String controlData; + String responseLine; + + if(!isConnected())return false; + if(groupItem.groupName().isNull())return false; + controlData.reserve(String::MaxString); + ::sprintf(controlData,"%s %s",(LPSTR)mNNTPCmds[Group],(LPSTR)groupItem.groupName()); + if(!putControlData(controlData,false))return false; + if(!mNNTPControl.receive(responseLine))return false; + if(!isInResponse(responseLine.betweenString(0,' '),mAckGroupResponseStrings))return false; + groupItem< &articleText,String &messageID) +{ + String controlData; + bool returnCode; + + ::sprintf(controlData,"%s %ld",(LPSTR)mNNTPCmds[Article],articleNumber); + returnCode=retrieveBlock(controlData,articleText,messageID,mAckArticleResponseStrings,mNackArticleResponseStrings); + messageID=messageID.betweenString('<','>'); + return returnCode; +} + +bool NNTPClient::article(const MsgID &msgID,Block &articleText,String &messageID) +{ + String controlData; + + controlData=mNNTPCmds[Article]+mSpace+msgID; + return retrieveBlock(controlData,articleText,messageID,mAckArticleResponseStrings,mNackArticleResponseStrings); +} + +bool NNTPClient::body(DWORD articleNumber,Block &bodyText,String &messageID) +{ + String controlData; + + ::sprintf(controlData,"%s %d",(LPSTR)mNNTPCmds[Body],articleNumber); + return retrieveBlock(controlData,bodyText,messageID,mAckArticleResponseStrings,mNackArticleResponseStrings); +} + +bool NNTPClient::body(const MsgID &msgID,Block &bodyText,String &messageID) +{ + String controlData; + + controlData=mNNTPCmds[Body]; + controlData+=mSpace+msgID; + return retrieveBlock(controlData,bodyText,messageID,mAckArticleResponseStrings,mNackArticleResponseStrings); +} + +bool NNTPClient::head(DWORD articleNumber,Block &headText,String &messageID) +{ + String controlData; + + ::sprintf(controlData,"%s %ld",(LPSTR)mNNTPCmds[Head],articleNumber); + return retrieveBlock(controlData,headText,mAckArticleResponseStrings,mNackArticleResponseStrings); +} + +bool NNTPClient::head(const MsgID &msgID,Block &headText,String &messageID) +{ + String controlData; + + controlData=mNNTPCmds[Head]+mSpace+msgID; + return retrieveBlock(controlData,headText,mAckArticleResponseStrings,mNackArticleResponseStrings); +} + +bool NNTPClient::stat(DWORD articleNumber,MsgID &msgID) +{ + String controlData; + String responseLine; + + if(!isConnected())return false; + ::sprintf(controlData,"%s %ld",(LPSTR)mNNTPCmds[Stat],articleNumber); + if(!putControlData(controlData,false))return false; + if(!mNNTPControl.receive(responseLine))return false; + if(isInResponse(responseLine.betweenString(0,' '),mNackArticleResponseStrings))return false; + responseLine=responseLine.betweenString(' ',0); + msgID=responseLine.betweenString(' ',0); + return (!msgID.isNull()); +} + +bool NNTPClient::stat(const MsgID &msgID,MsgID &msgFound) +{ + String controlData; + String responseLine; + + if(!isConnected())return false; + controlData=mNNTPCmds[Stat]+mSpace+msgID; + if(!putControlData(controlData,false))return false; + if(!mNNTPControl.receive(responseLine))return false; + if(isInResponse(responseLine.betweenString(0,' '),mNackArticleResponseStrings))return false; + responseLine=responseLine.betweenString(' ',0); + msgFound=responseLine.betweenString(' ',0); + return (!msgFound.isNull()); +} + +bool NNTPClient::listGroup(const String &newsGroup,Block &messageIDStrings) +{ + DWORD responseLines(0L); + String controlData; + String responseLine; + + messageIDStrings.remove(); + if(!isConnected())return false; + controlData=mNNTPCmds[ListGroup]; + controlData+=mSpace; + controlData+=newsGroup; + if(!putControlData(controlData,false))return false; + if(!mNNTPControl.receive(responseLine))return false; + if(isInResponse(responseLine.betweenString(0,' '),mNackGroupResponseStrings))return false; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + messageIDStrings.insert(&responseLine); + } + return (messageIDStrings.size()?true:false); +} + +bool NNTPClient::newNews(Block &newsGroups,Block &distributionGroups,Block &messageIDStrings,const SystemTime &systemTime,WORD isGMT) +{ + DWORD responseLines(0L); + String controlData; + String timeDateString; + String responseLine; + + messageIDStrings.remove(); + if(!isConnected())return false; + controlData=mNNTPCmds[NewNews]; + controlData+=mSpace; + for(int itemIndex=0;itemIndex &messageIDStrings,short pastDays) +{ + String messageID; + SystemTime systemTime; + GroupItem groupItem; + int badArticles(0); + int goodArticles(0); + int maxBadArticles(100); + int maxGoodArticlesToOffsetBad(10); + + messageIDStrings.remove(); + if(!isConnected())return false; + daysPast(systemTime,pastDays); + groupItem.groupName(newsGroup); + group(groupItem); + for(int articleIndex=groupItem.lastArticle();articleIndex>=groupItem.firstArticle();articleIndex--) + { + Block headerText; + head(articleIndex,headerText,messageID); + if(!headerText.size()) + { + String msgString; + ::sprintf(msgString,"article #:%d is not available, %d of %d",articleIndex,++badArticles,maxBadArticles); + message(msgString); + if(badArticles>=maxBadArticles)break; + continue; + } + else goodArticles++; + if(goodArticles>maxGoodArticlesToOffsetBad){badArticles=0;goodArticles=0;} + Header articleHeader(headerText); + message(String("examining ")+articleHeader.messageID()+String(", ")+articleHeader.date()); + if(articleHeader.systemTime() &messageIDStrings,short pastDays) +{ + DWORD responseLines(0L); + String controlData; + String responseLine; + String timeDateString; + SystemTime systemTime; + + messageIDStrings.remove(); + if(!isConnected())return false; + daysPast(systemTime,pastDays); + controlData=mNNTPCmds[NewNews]; + controlData+=mSpace; + controlData+=newsGroup; + makeTimeDateString(timeDateString,systemTime); + controlData+=mSpace; + controlData+=timeDateString; + if(!putControlData(controlData))return false; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + if(isInResponse(responseString,mAckNewNewsResponseStrings))continue; + } + messageIDStrings.insert(&responseLine); + } + return (messageIDStrings.size()?true:false); +} + +bool NNTPClient::newGroups(ListItems &listItems,short pastDays) +{ + SystemTime systemTime; + Block distributionGroups; + + listItems.remove(); + daysPast(systemTime,pastDays); + return newGroups(listItems,distributionGroups,systemTime,false); +} + +bool NNTPClient::newGroups(ListItems &listItems,Block &distributionGroups,const SystemTime &systemTime,bool isGMT) +{ + String controlData; + String responseLine; + String timeDateString; + DWORD responseLines(0); + + listItems.remove(); + if(!isConnected())return false; + controlData=mNNTPCmds[NewGroups]; + controlData+=mSpace; + makeTimeDateString(timeDateString,systemTime); + controlData+=timeDateString; + if(isGMT)controlData+=" [GMT]"; + if(distributionGroups.size()) + { + controlData+=mSpace+mLeftAngle; + for(int itemIndex=0;itemIndex &overview) +{ + DWORD responseLines(0); + String controlData; + String responseLine; + + overview.remove(); + if(!isConnected())return false; + controlData=mNNTPCmds[XOver]+String(" ")+String().fromInt(first)+String("-")+String().fromInt(last); + if(!putControlData(controlData))return false; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + if(isInResponse(responseString,mAckXOverResponseStrings))continue; + } + overview.insert(&responseLine); + } + return true; +} + +bool NNTPClient::help(Block &cmdLines) +{ + DWORD responseLines(0); + String controlData; + String responseLine; + + cmdLines.remove(); + if(!isConnected())return false; + controlData=mNNTPCmds[Help]; + if(!putControlData(controlData))return false; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + if(isInResponse(responseString,mAckHelpResponseStrings))continue; + } + cmdLines.insert(&responseLine); + } + return true; +} + +bool NNTPClient::post(Block &articleLines) +{ + String responseLine; + String controlData; + String postString; + int lineCount; + + if(!isConnected())return false; + controlData=mNNTPCmds[Post]; + if(!putControlData(controlData))return false; + if(!mNNTPControl.receive(responseLine))return false; + responseLine=responseLine.betweenString(0,' '); + if(!isInResponse(responseLine,mAckPostResponseStrings))return false; + lineCount=articleLines.size(); + for(int lineIndex=0;lineIndex &stringBlock,Block &ackResponse,Block &nackResponse) +{ + String extraInfo; + return retrieveBlock(controlData,stringBlock,extraInfo,ackResponse,nackResponse); +} + +bool NNTPClient::retrieveBlock(const String &controlData,Block &stringBlock,String &extraInfo,Block &ackResponse,Block &nackResponse) +{ + String responseLine; + DWORD responseLines(0); + + stringBlock.remove(); + if(!isConnected())return false; + if(!putControlData(controlData,false))return false; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + extraInfo=responseLine.betweenString(' ','\0'); + if(nackResponse.size()&&isInResponse(responseString,nackResponse))break; + if(ackResponse.size()&&isInResponse(responseString,ackResponse))continue; + } + stringBlock.insert(&responseLine); + } + return (stringBlock.size()?true:false); +} + +bool NNTPClient::putControlData(const String &stringData,bool waitForResponse) +{ + if(!mNNTPControl.isConnected())return false; + if(!mNNTPControl.send(stringData)) + { + mNNTPControl.destroy(); + String errorString(String("error sending '")+stringData+String("' to NNTP server.")); + message(errorString); + return false; + } + if(waitForResponse&&!getControlData()) + { + mNNTPControl.destroy(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + return false; + } + return true; +} + +bool NNTPClient::getControlData(void) +{ + Block responseStrings; + mNNTPControl.receive(responseStrings); + return responseStrings.size()?true:false; +} + +void NNTPClient::receiveStrings(WORD displayStrings) +{ + Block receiveStrings; + + if(!mNNTPControl.isConnected())return; + if(!mNNTPControl.receive(receiveStrings))return; + if(!displayStrings||!receiveStrings.size())return; + message(receiveStrings); +} + +void NNTPClient::receiveStrings(Block &receiveStrings) +{ + receiveStrings.remove(); + if(!mNNTPControl.isConnected())return; + if(!mNNTPControl.receive(receiveStrings))return; + if(!receiveStrings.size())return; + message(receiveStrings); +} + +void NNTPClient::createCmds(void) +{ + mNNTPCmds.insert(&String("ARTICLE")); + mNNTPCmds.insert(&String("BODY")); + mNNTPCmds.insert(&String("GROUP")); + mNNTPCmds.insert(&String("HEAD")); + mNNTPCmds.insert(&String("HELP")); + mNNTPCmds.insert(&String("IHAVE")); + mNNTPCmds.insert(&String("LAST")); + mNNTPCmds.insert(&String("LIST")); + mNNTPCmds.insert(&String("NEWGROUPS")); + mNNTPCmds.insert(&String("NEWNEWS")); + mNNTPCmds.insert(&String("NEXT")); + mNNTPCmds.insert(&String("POST")); + mNNTPCmds.insert(&String("QUIT")); + mNNTPCmds.insert(&String("SLAVE")); + mNNTPCmds.insert(&String("STAT")); + mNNTPCmds.insert(&String("LISTGROUP")); + mNNTPCmds.insert(&String("AUTHINFO USER")); + mNNTPCmds.insert(&String("AUTHINFO PASS")); + mNNTPCmds.insert(&String("XOVER")); +} + +bool NNTPClient::isInResponse(const String &responseString,Block &responseStrings) +{ + if(responseString.isNull())return false; + for(int itemIndex=0;itemIndex2000?2000-systemTime.year():systemTime.year()-1900, + systemTime.month(), + systemTime.day(), + systemTime.hour(), + systemTime.minute(), + systemTime.second()); +} + +void NNTPClient::daysPast(SystemTime &systemTime,short pastDays) +{ + systemTime.daysAdd360(-pastDays); + systemTime.hour(0); + systemTime.minute(0); + systemTime.second(0); +} + +// virtual overloads +void NNTPClient::message(String messageString) +{ +} + +void NNTPClient::message(Block &messageStrings) +{ +} diff --git a/nntp/NNTP.DSW b/nntp/NNTP.DSW new file mode 100644 index 0000000..0bae7d6 --- /dev/null +++ b/nntp/NNTP.DSW @@ -0,0 +1,269 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\BSPTREE\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dialog"=..\DIALOG\Dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "fileio"=..\FILEIO\fileio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "hookproc"=..\HOOKPROC\hookproc.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpeg6b"="..\..\parts\jpeg-6b\jpeg6b.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mediapak"=..\MEDIAPAK\mediapak.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "nntp"=.\nntp.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name dialog + End Project Dependency + Begin Project Dependency + Project_Dep_Name fileio + End Project Dependency + Begin Project Dependency + Project_Dep_Name hookproc + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency + Begin Project Dependency + Project_Dep_Name mediapak + End Project Dependency + Begin Project Dependency + Project_Dep_Name printman + End Project Dependency + Begin Project Dependency + Project_Dep_Name rasapi + End Project Dependency + Begin Project Dependency + Project_Dep_Name sample + End Project Dependency + Begin Project Dependency + Project_Dep_Name socket + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name uulib + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpeg6b + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name ydecode + End Project Dependency +}}} + +############################################################################### + +Project: "printman"=..\printman\Printman.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "rasapi"=..\RASAPI\Rasapi.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "sample"=..\SAMPLE\sample.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "socket"=..\SOCKET\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\THREAD\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "uulib"=..\UUDECODE\Uulib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "ydecode"=..\yproxy\ydecode.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/nntp/NNTP.HPP b/nntp/NNTP.HPP new file mode 100644 index 0000000..6c90764 --- /dev/null +++ b/nntp/NNTP.HPP @@ -0,0 +1,145 @@ +#ifndef _NNTP_NNTPCLIENT_HPP_ +#define _NNTP_NNTPCLIENT_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SOCKET_INETSOCKETADDRESS_HPP_ +#include +#endif +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _NNTP_MESSAGEID_HPP_ +#include +#endif +#ifndef _NNTP_GROUPITERATOR_HPP_ +#include +#endif + +class ListItems; +class GroupItem; +class SystemTime; + +class NNTPClient : private INETSocketAddress +{ +public: + NNTPClient(void); + virtual ~NNTPClient(); + bool open(const String &hostName); + bool open(const String &hostName,const String &user,const String &password); + bool isConnected(void)const; + bool listGroup(const String &newsGroup,Block &messageIDStrings); + bool list(void); + bool list(ListItems &listItems); + bool quit(void); + bool slave(void); + bool group(GroupItem &groupItem); + bool xover(DWORD first,DWORD last,Block &overview); + bool article(DWORD articleNumber,Block &articleText,String &messageID); + bool article(const MsgID &msgID,Block &articleText,String &messageID); + bool body(DWORD articleNumber,Block &bodyText,String &messageID); + bool body(const MsgID &msgID,Block &bodyText,String &messageID); + bool head(DWORD articleNumber,Block &headText,String &messageID); + bool head(const MsgID &msgID,Block &headText,String &messageID); + bool stat(DWORD articleNumber,MsgID &msgID); + bool stat(const MsgID &msgID,MsgID &msgFound); + bool simulateNewNews(const String &newsGroup,Block &messageIDStrings,short pastDays); + bool newNews(Block &newsGroups,Block &distributionGroups,Block &messageIDStrings,const SystemTime &systemTime,WORD isGMT); + bool newNews(const String &newsGroup,Block &messageIDStrings,short pastDays=0); + bool newGroups(ListItems &listItems,Block &distributionGroups,const SystemTime &systemTime,bool isGMT); + bool newGroups(ListItems &listItems,short pastDays=0); + bool next(GroupIterator &groupIterator); + bool last(GroupIterator &groupIterator); + bool iHave(const MsgID &msgID); + bool help(Block &cmdLines); + bool post(Block &articleLines); + void cancel(void); +protected: + virtual void message(String messageString); + virtual void message(Block &messageStrings); +private: + enum NNTPCmd{Article,Body,Group,Head,Help,IHave,Last,List,NewGroups,NewNews,Next,Post,Quit,Slave,Stat,ListGroup,AuthInfoUser,AuthInfoPass,XOver}; + NNTPClient(const NNTPClient &someNNTPClient); + NNTPClient &operator=(const NNTPClient &someNNTPClient); + void createCmds(void); + void createResponseStrings(void); + void receiveStrings(WORD displayStrings=FALSE); + void receiveStrings(Block &receiveStrings); + void daysPast(SystemTime &systemTime,short pastDays); + void makeTimeDateString(String &timeDateString,const SystemTime &systemTime); + bool retrieveBlock(const String &controlData,Block &stringBlock,Block &ackResponse,Block &nackResponse); + bool retrieveBlock(const String &controlData,Block &stringBlock,String &extraInfo,Block &ackResponse,Block &nackResponse); + bool isInResponse(const String &responseString,Block &responseStrings); + bool putControlData(const String &stringData,bool waitForResponse=true); + bool authenticate(const String &user,const String &pass); + bool getControlData(void); + + Block mNNTPCmds; + Block mAckArticleResponseStrings; + Block mNackArticleResponseStrings; + Block mAckSlaveResponseStrings; + Block mAckGroupResponseStrings; + Block mNackGroupResponseStrings; + Block mAckListResponseStrings; + Block mAckQuitResponseStrings; + Block mAckNewNewsResponseStrings; + Block mAckNewGroupsResponseStrings; + Block mAckNextResponseStrings; + Block mAckIHaveResponseStrings; + Block mAckHelpResponseStrings; + Block mAckPostResponseStrings; + Block mAckAuthResponseStrings; + Block mAckXOverResponseStrings; + Block mNakConnectStrings; + String mPeriod; + String mSpace; + String mComma; + String mLeftAngle; + String mRightAngle; + Socket mNNTPControl; + WSASystem mWSASystem; +}; + +inline +NNTPClient::NNTPClient(void) +: mPeriod("."), mSpace(" "), mComma(","), mLeftAngle("<"), mRightAngle(">") +{ + createCmds(); + createResponseStrings(); +} + +inline +NNTPClient::NNTPClient(const NNTPClient &/*someNNTPClient*/) +: mPeriod("."), mSpace(" "), mComma(","), mLeftAngle("<"), mRightAngle(">") +{ // no implementation +} + +inline +NNTPClient::~NNTPClient() +{ + quit(); + mNNTPControl.destroy(); +} + +inline +NNTPClient &NNTPClient::operator=(const NNTPClient &/*someNNTPClient*/) +{ // no implementation + return *this; +} + +inline +bool NNTPClient::isConnected(void)const +{ + return mNNTPControl.isConnected(); +} + +inline +void NNTPClient::cancel(void) +{ + if(isConnected())quit(); + mNNTPControl.destroy(); +} +#endif diff --git a/nntp/NNTP.ICO b/nntp/NNTP.ICO new file mode 100644 index 0000000..f6f762a Binary files /dev/null and b/nntp/NNTP.ICO differ diff --git a/nntp/NNTP.IDE b/nntp/NNTP.IDE new file mode 100644 index 0000000..302fc7f Binary files /dev/null and b/nntp/NNTP.IDE differ diff --git a/nntp/NNTP.MAK b/nntp/NNTP.MAK new file mode 100644 index 0000000..cbaf244 --- /dev/null +++ b/nntp/NNTP.MAK @@ -0,0 +1,2414 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on nntp.dsp +!IF "$(CFG)" == "" +CFG=nntp - Win32 Release +!MESSAGE No configuration specified. Defaulting to nntp - Win32 Release. +!ENDIF + +!IF "$(CFG)" != "nntp - Win32 Release" && "$(CFG)" != "nntp - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "nntp.mak" CFG="nntp - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "nntp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "nntp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "nntp - Win32 Release" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj +# Begin Custom Macros +OutDir=.\.\msvcobj +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\nntp.exe" + +!ELSE + +ALL : "$(OUTDIR)\nntp.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\brwsview.obj" + -@erase "$(INTDIR)\Dib24.obj" + -@erase "$(INTDIR)\entrydlg.obj" + -@erase "$(INTDIR)\groupdlg.obj" + -@erase "$(INTDIR)\Header.obj" + -@erase "$(INTDIR)\imgview.obj" + -@erase "$(INTDIR)\jpgimg.obj" + -@erase "$(INTDIR)\listitms.obj" + -@erase "$(INTDIR)\logview.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\msglog.obj" + -@erase "$(INTDIR)\mwdlg.obj" + -@erase "$(INTDIR)\Newsitem.obj" + -@erase "$(INTDIR)\newsreg.obj" + -@erase "$(INTDIR)\nntp.obj" + -@erase "$(INTDIR)\nntp.res" + -@erase "$(INTDIR)\nntpthrd.obj" + -@erase "$(INTDIR)\opendir.obj" + -@erase "$(INTDIR)\optnsdlg.obj" + -@erase "$(INTDIR)\optnsreg.obj" + -@erase "$(INTDIR)\rasdlg.obj" + -@erase "$(INTDIR)\rasiface.obj" + -@erase "$(INTDIR)\Rawimg.obj" + -@erase "$(INTDIR)\rcvrlog.obj" + -@erase "$(INTDIR)\srvrdlg.obj" + -@erase "$(INTDIR)\thmbnail.obj" + -@erase "$(INTDIR)\thmbpage.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\nntp.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "__FLAT__"\ + /D "STRICT" /Fp"$(INTDIR)\nntp.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD\ + /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\nntp.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\nntp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\nntp.pdb" /machine:I386 /out:"$(OUTDIR)\nntp.exe" +LINK32_OBJS= \ + "$(INTDIR)\brwsview.obj" \ + "$(INTDIR)\Dib24.obj" \ + "$(INTDIR)\entrydlg.obj" \ + "$(INTDIR)\groupdlg.obj" \ + "$(INTDIR)\Header.obj" \ + "$(INTDIR)\imgview.obj" \ + "$(INTDIR)\jpgimg.obj" \ + "$(INTDIR)\listitms.obj" \ + "$(INTDIR)\logview.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\msglog.obj" \ + "$(INTDIR)\mwdlg.obj" \ + "$(INTDIR)\Newsitem.obj" \ + "$(INTDIR)\newsreg.obj" \ + "$(INTDIR)\nntp.obj" \ + "$(INTDIR)\nntp.res" \ + "$(INTDIR)\nntpthrd.obj" \ + "$(INTDIR)\opendir.obj" \ + "$(INTDIR)\optnsdlg.obj" \ + "$(INTDIR)\optnsreg.obj" \ + "$(INTDIR)\rasdlg.obj" \ + "$(INTDIR)\rasiface.obj" \ + "$(INTDIR)\Rawimg.obj" \ + "$(INTDIR)\rcvrlog.obj" \ + "$(INTDIR)\srvrdlg.obj" \ + "$(INTDIR)\thmbnail.obj" \ + "$(INTDIR)\thmbpage.obj" \ + "..\..\Parts\jpeg-6b\lib\jpeg6b.lib" \ + "..\Exe\mediapak.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\mshook.lib" \ + "..\Exe\msrasapi.lib" \ + "..\Exe\mssocket.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\sample.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\uulib.lib" + +"$(OUTDIR)\nntp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj +# Begin Custom Macros +OutDir=.\.\msvcobj +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\nntp.exe" + +!ELSE + +ALL : "$(OUTDIR)\nntp.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\brwsview.obj" + -@erase "$(INTDIR)\Dib24.obj" + -@erase "$(INTDIR)\entrydlg.obj" + -@erase "$(INTDIR)\groupdlg.obj" + -@erase "$(INTDIR)\Header.obj" + -@erase "$(INTDIR)\imgview.obj" + -@erase "$(INTDIR)\jpgimg.obj" + -@erase "$(INTDIR)\listitms.obj" + -@erase "$(INTDIR)\logview.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\mainfrm.obj" + -@erase "$(INTDIR)\msglog.obj" + -@erase "$(INTDIR)\mwdlg.obj" + -@erase "$(INTDIR)\Newsitem.obj" + -@erase "$(INTDIR)\newsreg.obj" + -@erase "$(INTDIR)\nntp.obj" + -@erase "$(INTDIR)\nntpthrd.obj" + -@erase "$(INTDIR)\opendir.obj" + -@erase "$(INTDIR)\optnsdlg.obj" + -@erase "$(INTDIR)\optnsreg.obj" + -@erase "$(INTDIR)\rasdlg.obj" + -@erase "$(INTDIR)\rasiface.obj" + -@erase "$(INTDIR)\Rawimg.obj" + -@erase "$(INTDIR)\rcvrlog.obj" + -@erase "$(INTDIR)\srvrdlg.obj" + -@erase "$(INTDIR)\thmbnail.obj" + -@erase "$(INTDIR)\thmbpage.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "$(OUTDIR)\nntp.exe" + -@erase ".\nntp.res" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /Zp1 /MTd /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 +RSC_PROJ=/l 0x409 /fo".\nntp.res" /d "_DEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\nntp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib comctl32.lib uuid.lib wsock32.lib /nologo\ + /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386\ + /out:"$(OUTDIR)\nntp.exe" +LINK32_OBJS= \ + "$(INTDIR)\brwsview.obj" \ + "$(INTDIR)\Dib24.obj" \ + "$(INTDIR)\entrydlg.obj" \ + "$(INTDIR)\groupdlg.obj" \ + "$(INTDIR)\Header.obj" \ + "$(INTDIR)\imgview.obj" \ + "$(INTDIR)\jpgimg.obj" \ + "$(INTDIR)\listitms.obj" \ + "$(INTDIR)\logview.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\mainfrm.obj" \ + "$(INTDIR)\msglog.obj" \ + "$(INTDIR)\mwdlg.obj" \ + "$(INTDIR)\Newsitem.obj" \ + "$(INTDIR)\newsreg.obj" \ + "$(INTDIR)\nntp.obj" \ + "$(INTDIR)\nntpthrd.obj" \ + "$(INTDIR)\opendir.obj" \ + "$(INTDIR)\optnsdlg.obj" \ + "$(INTDIR)\optnsreg.obj" \ + "$(INTDIR)\rasdlg.obj" \ + "$(INTDIR)\rasiface.obj" \ + "$(INTDIR)\Rawimg.obj" \ + "$(INTDIR)\rcvrlog.obj" \ + "$(INTDIR)\srvrdlg.obj" \ + "$(INTDIR)\thmbnail.obj" \ + "$(INTDIR)\thmbpage.obj" \ + "..\..\Parts\jpeg-6b\lib\jpeg6b.lib" \ + "..\Exe\mediapak.lib" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msdialog.lib" \ + "..\Exe\msfileio.lib" \ + "..\Exe\mshook.lib" \ + "..\Exe\msrasapi.lib" \ + "..\Exe\mssocket.lib" \ + "..\Exe\msthread.lib" \ + "..\Exe\printman.lib" \ + "..\Exe\sample.lib" \ + "..\Exe\statbar.lib" \ + "..\Exe\uulib.lib" \ + ".\Asmutil.obj" \ + ".\nntp.res" + +"$(OUTDIR)\nntp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "nntp - Win32 Release" || "$(CFG)" == "nntp - Win32 Debug" +SOURCE=.\Asmutil.asm + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +InputPath=.\Asmutil.asm +InputName=Asmutil + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + tasm32 /t /zi /ml /m5 $(InputName).asm + +!ENDIF + +SOURCE=.\brwsview.cpp +DEP_CPP_BRWSV=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\bsptree\btree.hpp"\ + "..\bsptree\btree.tpp"\ + "..\bsptree\treenode.hpp"\ + "..\bsptree\treenode.tpp"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\bminfo.hpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\commctrl.hpp"\ + "..\common\control.hpp"\ + "..\common\crsctrl.hpp"\ + "..\common\dib.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\fileio.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\intel.hpp"\ + "..\common\iobuff.hpp"\ + "..\common\mdiwin.hpp"\ + "..\common\memfile.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\mmsystem.hpp"\ + "..\common\openfile.hpp"\ + "..\common\overlap.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pathfnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\status.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\mediapak\entryinf.hpp"\ + "..\mediapak\mediapak.hpp"\ + "..\mediapak\pakentry.hpp"\ + "..\sample\chunkid.hpp"\ + "..\sample\datachnk.hpp"\ + "..\sample\fmtchnk.hpp"\ + "..\sample\genchnk.hpp"\ + "..\sample\puresmpl.hpp"\ + "..\sample\wave.hpp"\ + "..\statbar\popup.hpp"\ + "..\statbar\statbarx.hpp"\ + "..\statbar\statmenu.hpp"\ + "..\thread\mutex.hpp"\ + ".\brwsview.hpp"\ + ".\dib24.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + ".\scroll.hpp"\ + ".\thmbnail.hpp"\ + ".\thmbpage.hpp"\ + + +"$(INTDIR)\brwsview.obj" : $(SOURCE) $(DEP_CPP_BRWSV) "$(INTDIR)" + + +SOURCE=.\Dib24.cpp +DEP_CPP_DIB24=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\bminfo.hpp"\ + "..\common\dib.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + ".\asmutil.hpp"\ + ".\dib24.hpp"\ + ".\imginfo.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + + +"$(INTDIR)\Dib24.obj" : $(SOURCE) $(DEP_CPP_DIB24) "$(INTDIR)" + + +SOURCE=.\entrydlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_ENTRY=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\rect.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Entrydlg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\entrydlg.obj" : $(SOURCE) $(DEP_CPP_ENTRY) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_ENTRY=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\rect.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Entrydlg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\entrydlg.obj" : $(SOURCE) $(DEP_CPP_ENTRY) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\groupdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_GROUP=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\control.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\font.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\odlist.hpp"\ + "..\common\odlstchk.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rubber.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Entrydlg.hpp"\ + ".\Groupdlg.hpp"\ + ".\Newsgrp.hpp"\ + ".\Newsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\groupdlg.obj" : $(SOURCE) $(DEP_CPP_GROUP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_GROUP=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\control.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\font.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\odlist.hpp"\ + "..\common\odlstchk.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rubber.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Entrydlg.hpp"\ + ".\Groupdlg.hpp"\ + ".\Newsgrp.hpp"\ + ".\Newsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\groupdlg.obj" : $(SOURCE) $(DEP_CPP_GROUP) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Header.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_HEADE=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filemap.hpp"\ + "..\common\filetime.hpp"\ + "..\common\openfile.hpp"\ + "..\common\overlap.hpp"\ + "..\common\puredwrd.hpp"\ + "..\common\pview.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Header.hpp"\ + + +"$(INTDIR)\Header.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_HEADE=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filemap.hpp"\ + "..\common\filetime.hpp"\ + "..\common\openfile.hpp"\ + "..\common\overlap.hpp"\ + "..\common\puredwrd.hpp"\ + "..\common\pview.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Header.hpp"\ + + +"$(INTDIR)\Header.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\imgview.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_IMGVI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\bminfo.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\commctrl.hpp"\ + "..\common\control.hpp"\ + "..\common\crsctrl.hpp"\ + "..\common\dib.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\mdiwin.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\status.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\statbar\popup.hpp"\ + "..\statbar\statbarx.hpp"\ + "..\statbar\statmenu.hpp"\ + "..\thread\mutex.hpp"\ + ".\imgview.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + ".\scroll.hpp"\ + + +"$(INTDIR)\imgview.obj" : $(SOURCE) $(DEP_CPP_IMGVI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_IMGVI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\bminfo.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\commctrl.hpp"\ + "..\common\control.hpp"\ + "..\common\crsctrl.hpp"\ + "..\common\dib.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\mdiwin.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\status.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\statbar\popup.hpp"\ + "..\statbar\statbarx.hpp"\ + "..\statbar\statmenu.hpp"\ + "..\thread\mutex.hpp"\ + ".\imgview.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + ".\scroll.hpp"\ + + +"$(INTDIR)\imgview.obj" : $(SOURCE) $(DEP_CPP_IMGVI) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\jpgimg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_JPGIM=\ + "..\..\parts\jpeg-6b\jconfig.hpp"\ + "..\..\parts\jpeg-6b\jexcept.hpp"\ + "..\..\parts\jpeg-6b\jmorecfg.hpp"\ + "..\..\parts\jpeg-6b\jpeg6b.hpp"\ + "..\..\parts\jpeg-6b\jpeglib.hpp"\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\bminfo.hpp"\ + "..\common\dib.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + ".\asmutil.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + + +"$(INTDIR)\jpgimg.obj" : $(SOURCE) $(DEP_CPP_JPGIM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_JPGIM=\ + "..\..\parts\jpeg-6b\jconfig.hpp"\ + "..\..\parts\jpeg-6b\jexcept.hpp"\ + "..\..\parts\jpeg-6b\jmorecfg.hpp"\ + "..\..\parts\jpeg-6b\jpeg6b.hpp"\ + "..\..\parts\jpeg-6b\jpeglib.hpp"\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\bminfo.hpp"\ + "..\common\dib.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + ".\asmutil.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + + +"$(INTDIR)\jpgimg.obj" : $(SOURCE) $(DEP_CPP_JPGIM) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\listitms.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_LISTI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filemap.hpp"\ + "..\common\filetime.hpp"\ + "..\common\openfile.hpp"\ + "..\common\overlap.hpp"\ + "..\common\puredwrd.hpp"\ + "..\common\pview.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Listitem.hpp"\ + ".\Listitms.hpp"\ + + +"$(INTDIR)\listitms.obj" : $(SOURCE) $(DEP_CPP_LISTI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_LISTI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filemap.hpp"\ + "..\common\filetime.hpp"\ + "..\common\openfile.hpp"\ + "..\common\overlap.hpp"\ + "..\common\puredwrd.hpp"\ + "..\common\pview.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Listitem.hpp"\ + ".\Listitms.hpp"\ + + +"$(INTDIR)\listitms.obj" : $(SOURCE) $(DEP_CPP_LISTI) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\logview.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_LOGVI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\commctrl.hpp"\ + "..\common\control.hpp"\ + "..\common\crsctrl.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\font.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\mdiwin.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\odlist.hpp"\ + "..\common\odlstalt.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rubber.hpp"\ + "..\common\status.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\dialog\dlgitem.hpp"\ + "..\dialog\dlgtmpl.hpp"\ + "..\dialog\dyndlg.hpp"\ + "..\fileio\fileio.hpp"\ + "..\printman\abortdlg.hpp"\ + "..\printman\printer.hpp"\ + "..\printman\printman.hpp"\ + "..\statbar\popup.hpp"\ + "..\statbar\statbarx.hpp"\ + "..\statbar\statmenu.hpp"\ + "..\thread\mutex.hpp"\ + ".\logview.hpp"\ + + +"$(INTDIR)\logview.obj" : $(SOURCE) $(DEP_CPP_LOGVI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_LOGVI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\commctrl.hpp"\ + "..\common\control.hpp"\ + "..\common\crsctrl.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\font.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\mdiwin.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\odlist.hpp"\ + "..\common\odlstalt.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rubber.hpp"\ + "..\common\status.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\dialog\dlgitem.hpp"\ + "..\dialog\dlgtmpl.hpp"\ + "..\dialog\dyndlg.hpp"\ + "..\fileio\fileio.hpp"\ + "..\printman\abortdlg.hpp"\ + "..\printman\printer.hpp"\ + "..\printman\printman.hpp"\ + "..\statbar\popup.hpp"\ + "..\statbar\statbarx.hpp"\ + "..\statbar\statmenu.hpp"\ + "..\thread\mutex.hpp"\ + ".\logview.hpp"\ + + +"$(INTDIR)\logview.obj" : $(SOURCE) $(DEP_CPP_LOGVI) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_MAIN_=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\bsptree\btree.hpp"\ + "..\bsptree\btree.tpp"\ + "..\bsptree\treenode.hpp"\ + "..\bsptree\treenode.tpp"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\mdifrm.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\common\winnt.hpp"\ + "..\common\winsock.hpp"\ + "..\socket\cache.hpp"\ + "..\socket\inaddr.hpp"\ + "..\socket\intsaddr.hpp"\ + "..\socket\socket.hpp"\ + "..\socket\timeinfo.hpp"\ + "..\socket\wsadata.hpp"\ + "..\thread\context.hpp"\ + "..\thread\event.hpp"\ + "..\thread\monitor.hpp"\ + "..\thread\msgqueue.hpp"\ + "..\thread\mthread.hpp"\ + "..\thread\mutex.hpp"\ + "..\thread\ptcllbck.hpp"\ + "..\thread\qthread.hpp"\ + "..\thread\savearea.hpp"\ + "..\thread\tcallbck.hpp"\ + "..\thread\tcallbck.tpp"\ + "..\thread\thmsg.hpp"\ + "..\thread\thread.hpp"\ + ".\Grpitem.hpp"\ + ".\Header.hpp"\ + ".\Iterator.hpp"\ + ".\mainfrm.hpp"\ + ".\Msgid.hpp"\ + ".\Newsgrp.hpp"\ + ".\Newsopt.hpp"\ + ".\Nntp.hpp"\ + ".\Nntpthrd.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_MAIN_=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\bsptree\btree.hpp"\ + "..\bsptree\btree.tpp"\ + "..\bsptree\treenode.hpp"\ + "..\bsptree\treenode.tpp"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\mdifrm.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\common\winnt.hpp"\ + "..\common\winsock.hpp"\ + "..\socket\cache.hpp"\ + "..\socket\inaddr.hpp"\ + "..\socket\intsaddr.hpp"\ + "..\socket\socket.hpp"\ + "..\socket\timeinfo.hpp"\ + "..\socket\wsadata.hpp"\ + "..\thread\context.hpp"\ + "..\thread\event.hpp"\ + "..\thread\monitor.hpp"\ + "..\thread\msgqueue.hpp"\ + "..\thread\mthread.hpp"\ + "..\thread\mutex.hpp"\ + "..\thread\ptcllbck.hpp"\ + "..\thread\qthread.hpp"\ + "..\thread\savearea.hpp"\ + "..\thread\tcallbck.hpp"\ + "..\thread\tcallbck.tpp"\ + "..\thread\thmsg.hpp"\ + "..\thread\thread.hpp"\ + ".\Grpitem.hpp"\ + ".\Header.hpp"\ + ".\Iterator.hpp"\ + ".\mainfrm.hpp"\ + ".\Msgid.hpp"\ + ".\Newsgrp.hpp"\ + ".\Newsopt.hpp"\ + ".\Nntp.hpp"\ + ".\Nntpthrd.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\mainfrm.cpp +DEP_CPP_MAINF=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\bsptree\btree.hpp"\ + "..\bsptree\btree.tpp"\ + "..\bsptree\treenode.hpp"\ + "..\bsptree\treenode.tpp"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\bminfo.hpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\commctrl.hpp"\ + "..\common\commdlg.hpp"\ + "..\common\control.hpp"\ + "..\common\dib.hpp"\ + "..\common\diskinfo.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\fixup.hpp"\ + "..\common\font.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\mdifrm.hpp"\ + "..\common\mdiwin.hpp"\ + "..\common\menuitem.hpp"\ + "..\common\odlist.hpp"\ + "..\common\odlstchk.hpp"\ + "..\common\opendlg.hpp"\ + "..\common\openfile.hpp"\ + "..\common\overlap.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\puremenu.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\ras.hpp"\ + "..\common\rect.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\rubber.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\status.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\common\winnt.hpp"\ + "..\common\winsock.hpp"\ + "..\display\editwnd.hpp"\ + "..\display\guibrdr.hpp"\ + "..\display\guichar.hpp"\ + "..\display\guiline.hpp"\ + "..\display\keyctrl.hpp"\ + "..\display\vcaret.hpp"\ + "..\display\virtdisp.hpp"\ + "..\fileio\fileio.hpp"\ + "..\rasapi\connstat.hpp"\ + "..\rasapi\cstate.hpp"\ + "..\rasapi\dialparm.hpp"\ + "..\rasapi\rasapi.hpp"\ + "..\rasapi\rasentry.hpp"\ + "..\rasapi\rassrv.hpp"\ + "..\socket\cache.hpp"\ + "..\socket\inaddr.hpp"\ + "..\socket\intsaddr.hpp"\ + "..\socket\resolve.hpp"\ + "..\socket\socket.hpp"\ + "..\socket\timeinfo.hpp"\ + "..\socket\wsadata.hpp"\ + "..\statbar\popup.hpp"\ + "..\statbar\statbarx.hpp"\ + "..\statbar\statmenu.hpp"\ + "..\thread\context.hpp"\ + "..\thread\event.hpp"\ + "..\thread\monitor.hpp"\ + "..\thread\msgqueue.hpp"\ + "..\thread\mthread.hpp"\ + "..\thread\mutex.hpp"\ + "..\thread\ptcllbck.hpp"\ + "..\thread\qthread.hpp"\ + "..\thread\savearea.hpp"\ + "..\thread\tcallbck.hpp"\ + "..\thread\tcallbck.tpp"\ + "..\thread\thmsg.hpp"\ + "..\thread\thread.hpp"\ + "..\uudecode\decode.hpp"\ + ".\Groupdlg.hpp"\ + ".\Grpitem.hpp"\ + ".\Header.hpp"\ + ".\imgview.hpp"\ + ".\Iterator.hpp"\ + ".\jpgimg.hpp"\ + ".\Listitem.hpp"\ + ".\Listitms.hpp"\ + ".\logview.hpp"\ + ".\mainfrm.hpp"\ + ".\Msgid.hpp"\ + ".\Msglog.hpp"\ + ".\mwdlg.hpp"\ + ".\Newsgrp.hpp"\ + ".\Newsopt.hpp"\ + ".\Newsreg.hpp"\ + ".\Nntp.hpp"\ + ".\Nntpthrd.hpp"\ + ".\Optnsdlg.hpp"\ + ".\Optnsreg.hpp"\ + ".\Rasdlg.hpp"\ + ".\Rasiface.hpp"\ + ".\Rasoptns.hpp"\ + ".\rawimg.hpp"\ + ".\rcvrlog.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + ".\rgb888.hpp"\ + ".\scroll.hpp"\ + ".\Srvrdlg.hpp"\ + + +"$(INTDIR)\mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +SOURCE=.\msglog.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_MSGLO=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\bsptree\btree.hpp"\ + "..\bsptree\btree.tpp"\ + "..\bsptree\treenode.hpp"\ + "..\bsptree\treenode.tpp"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\pointer.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + "..\fileio\fileio.hpp"\ + ".\Msgid.hpp"\ + ".\Msglog.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\msglog.obj" : $(SOURCE) $(DEP_CPP_MSGLO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_MSGLO=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\bsptree\btree.hpp"\ + "..\bsptree\btree.tpp"\ + "..\bsptree\treenode.hpp"\ + "..\bsptree\treenode.tpp"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\pointer.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + "..\fileio\fileio.hpp"\ + ".\Msgid.hpp"\ + ".\Msglog.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\msglog.obj" : $(SOURCE) $(DEP_CPP_MSGLO) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\mwdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_MWDLG=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\control.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\font.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\odlist.hpp"\ + "..\common\odlstalt.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rubber.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\mwdlg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\mwdlg.obj" : $(SOURCE) $(DEP_CPP_MWDLG) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_MWDLG=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\brush.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\control.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\font.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\odlist.hpp"\ + "..\common\odlstalt.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rubber.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\mwdlg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\mwdlg.obj" : $(SOURCE) $(DEP_CPP_MWDLG) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Newsitem.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_NEWSI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\filetime.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Header.hpp"\ + ".\Newsitem.hpp"\ + + +"$(INTDIR)\Newsitem.obj" : $(SOURCE) $(DEP_CPP_NEWSI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_NEWSI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\filetime.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Header.hpp"\ + ".\Newsitem.hpp"\ + + +"$(INTDIR)\Newsitem.obj" : $(SOURCE) $(DEP_CPP_NEWSI) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\newsreg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_NEWSR=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\windows.hpp"\ + ".\Newsgrp.hpp"\ + ".\Newsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\newsreg.obj" : $(SOURCE) $(DEP_CPP_NEWSR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_NEWSR=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\windows.hpp"\ + ".\Newsgrp.hpp"\ + ".\Newsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\newsreg.obj" : $(SOURCE) $(DEP_CPP_NEWSR) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\nntp.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_NNTP_=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + "..\common\winsock.hpp"\ + "..\socket\cache.hpp"\ + "..\socket\hostent.hpp"\ + "..\socket\inaddr.hpp"\ + "..\socket\intsaddr.hpp"\ + "..\socket\servent.hpp"\ + "..\socket\socket.hpp"\ + "..\socket\timeinfo.hpp"\ + "..\socket\wsadata.hpp"\ + ".\Grpitem.hpp"\ + ".\Header.hpp"\ + ".\Iterator.hpp"\ + ".\Listitem.hpp"\ + ".\Listitms.hpp"\ + ".\Msgid.hpp"\ + ".\Nntp.hpp"\ + + +"$(INTDIR)\nntp.obj" : $(SOURCE) $(DEP_CPP_NNTP_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_NNTP_=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + "..\common\winsock.hpp"\ + "..\socket\cache.hpp"\ + "..\socket\hostent.hpp"\ + "..\socket\inaddr.hpp"\ + "..\socket\intsaddr.hpp"\ + "..\socket\servent.hpp"\ + "..\socket\socket.hpp"\ + "..\socket\timeinfo.hpp"\ + "..\socket\wsadata.hpp"\ + ".\Grpitem.hpp"\ + ".\Header.hpp"\ + ".\Iterator.hpp"\ + ".\Listitem.hpp"\ + ".\Listitms.hpp"\ + ".\Msgid.hpp"\ + ".\Nntp.hpp"\ + + +"$(INTDIR)\nntp.obj" : $(SOURCE) $(DEP_CPP_NNTP_) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\nntp.rc +DEP_RSC_NNTP_R=\ + ".\Cbox.bmp"\ + ".\CBOXC.BMP"\ + ".\LOG.ICO"\ + ".\NNTP.ICO"\ + ".\PAINT.ICO"\ + ".\Resource.h"\ + ".\Strip.bmp"\ + + +!IF "$(CFG)" == "nntp - Win32 Release" + + +"$(INTDIR)\nntp.res" : $(SOURCE) $(DEP_RSC_NNTP_R) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + + +".\nntp.res" : $(SOURCE) $(DEP_RSC_NNTP_R) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ENDIF + +SOURCE=.\nntpthrd.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_NNTPT=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + "..\common\winnt.hpp"\ + "..\common\winsock.hpp"\ + "..\socket\cache.hpp"\ + "..\socket\inaddr.hpp"\ + "..\socket\intsaddr.hpp"\ + "..\socket\socket.hpp"\ + "..\socket\timeinfo.hpp"\ + "..\socket\wsadata.hpp"\ + "..\thread\context.hpp"\ + "..\thread\event.hpp"\ + "..\thread\msgqueue.hpp"\ + "..\thread\mthread.hpp"\ + "..\thread\mutex.hpp"\ + "..\thread\ptcllbck.hpp"\ + "..\thread\qthread.hpp"\ + "..\thread\savearea.hpp"\ + "..\thread\tcallbck.hpp"\ + "..\thread\tcallbck.tpp"\ + "..\thread\thmsg.hpp"\ + "..\thread\thread.hpp"\ + ".\Grpitem.hpp"\ + ".\Iterator.hpp"\ + ".\Msgid.hpp"\ + ".\Nntp.hpp"\ + ".\Nntpthrd.hpp"\ + + +"$(INTDIR)\nntpthrd.obj" : $(SOURCE) $(DEP_CPP_NNTPT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_NNTPT=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + "..\common\winnt.hpp"\ + "..\common\winsock.hpp"\ + "..\socket\cache.hpp"\ + "..\socket\inaddr.hpp"\ + "..\socket\intsaddr.hpp"\ + "..\socket\socket.hpp"\ + "..\socket\timeinfo.hpp"\ + "..\socket\wsadata.hpp"\ + "..\thread\context.hpp"\ + "..\thread\event.hpp"\ + "..\thread\msgqueue.hpp"\ + "..\thread\mthread.hpp"\ + "..\thread\mutex.hpp"\ + "..\thread\ptcllbck.hpp"\ + "..\thread\qthread.hpp"\ + "..\thread\savearea.hpp"\ + "..\thread\tcallbck.hpp"\ + "..\thread\tcallbck.tpp"\ + "..\thread\thmsg.hpp"\ + "..\thread\thread.hpp"\ + ".\Grpitem.hpp"\ + ".\Iterator.hpp"\ + ".\Msgid.hpp"\ + ".\Nntp.hpp"\ + ".\Nntpthrd.hpp"\ + + +"$(INTDIR)\nntpthrd.obj" : $(SOURCE) $(DEP_CPP_NNTPT) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\opendir.cpp +DEP_CPP_OPEND=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\codegen.hpp"\ + "..\common\commdlg.hpp"\ + "..\common\diskinfo.hpp"\ + "..\common\except.hpp"\ + "..\common\filemap.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\opendlg.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\puredwrd.hpp"\ + "..\common\pview.hpp"\ + "..\common\rect.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\hookproc\apientry.hpp"\ + "..\hookproc\ofnhook.hpp"\ + "..\hookproc\procaddr.hpp"\ + "..\hookproc\procaddr.tpp"\ + ".\opendir.hpp"\ + + +"$(INTDIR)\opendir.obj" : $(SOURCE) $(DEP_CPP_OPEND) "$(INTDIR)" + + +SOURCE=.\optnsdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_OPTNS=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\diskinfo.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\rect.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Optnsdlg.hpp"\ + ".\Optnsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\optnsdlg.obj" : $(SOURCE) $(DEP_CPP_OPTNS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_OPTNS=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\diskinfo.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\rect.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Optnsdlg.hpp"\ + ".\Optnsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\optnsdlg.obj" : $(SOURCE) $(DEP_CPP_OPTNS) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\optnsreg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_OPTNSR=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\diskinfo.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Optnsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\optnsreg.obj" : $(SOURCE) $(DEP_CPP_OPTNSR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_OPTNSR=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\diskinfo.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\windows.hpp"\ + ".\Optnsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\optnsreg.obj" : $(SOURCE) $(DEP_CPP_OPTNSR) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\rasdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_RASDL=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\ras.hpp"\ + "..\common\rect.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\rasapi\connstat.hpp"\ + "..\rasapi\cstate.hpp"\ + "..\rasapi\dialparm.hpp"\ + "..\rasapi\rasapi.hpp"\ + "..\rasapi\rasentry.hpp"\ + "..\rasapi\rassrv.hpp"\ + ".\Rasdlg.hpp"\ + ".\Rasiface.hpp"\ + ".\Rasoptns.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\rasdlg.obj" : $(SOURCE) $(DEP_CPP_RASDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_RASDL=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\ras.hpp"\ + "..\common\rect.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\rasapi\connstat.hpp"\ + "..\rasapi\cstate.hpp"\ + "..\rasapi\dialparm.hpp"\ + "..\rasapi\rasapi.hpp"\ + "..\rasapi\rasentry.hpp"\ + "..\rasapi\rassrv.hpp"\ + ".\Rasdlg.hpp"\ + ".\Rasiface.hpp"\ + ".\Rasoptns.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\rasdlg.obj" : $(SOURCE) $(DEP_CPP_RASDL) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\rasiface.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_RASIF=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\ras.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\windows.hpp"\ + "..\rasapi\connstat.hpp"\ + "..\rasapi\cstate.hpp"\ + "..\rasapi\dialparm.hpp"\ + "..\rasapi\rasapi.hpp"\ + "..\rasapi\rasentry.hpp"\ + "..\rasapi\rassrv.hpp"\ + ".\Rasiface.hpp"\ + + +"$(INTDIR)\rasiface.obj" : $(SOURCE) $(DEP_CPP_RASIF) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_RASIF=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\ras.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\windows.hpp"\ + "..\rasapi\connstat.hpp"\ + "..\rasapi\cstate.hpp"\ + "..\rasapi\dialparm.hpp"\ + "..\rasapi\rasapi.hpp"\ + "..\rasapi\rasentry.hpp"\ + "..\rasapi\rassrv.hpp"\ + ".\Rasiface.hpp"\ + + +"$(INTDIR)\rasiface.obj" : $(SOURCE) $(DEP_CPP_RASIF) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Rawimg.cpp +DEP_CPP_RAWIM=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\bminfo.hpp"\ + "..\common\dib.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + + +"$(INTDIR)\Rawimg.obj" : $(SOURCE) $(DEP_CPP_RAWIM) "$(INTDIR)" + + +SOURCE=.\rcvrlog.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_RCVRL=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\windows.hpp"\ + "..\fileio\fileio.hpp"\ + ".\Msgid.hpp"\ + ".\rcvrlog.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\rcvrlog.obj" : $(SOURCE) $(DEP_CPP_RCVRL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_RCVRL=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\except.hpp"\ + "..\common\stdio.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\windows.hpp"\ + "..\fileio\fileio.hpp"\ + ".\Msgid.hpp"\ + ".\rcvrlog.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + + +"$(INTDIR)\rcvrlog.obj" : $(SOURCE) $(DEP_CPP_RCVRL) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\srvrdlg.cpp + +!IF "$(CFG)" == "nntp - Win32 Release" + +DEP_CPP_SRVRD=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\diskinfo.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\rect.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Optnsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + ".\Srvrdlg.hpp"\ + + +"$(INTDIR)\srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +DEP_CPP_SRVRD=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\diskinfo.hpp"\ + "..\common\dwindow.hpp"\ + "..\common\except.hpp"\ + "..\common\filetime.hpp"\ + "..\common\finddata.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\point.hpp"\ + "..\common\rect.hpp"\ + "..\common\regkey.hpp"\ + "..\common\regsam.hpp"\ + "..\common\shellapi.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\systime.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\window.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + ".\Optnsreg.hpp"\ + ".\Resource.h"\ + ".\Resource.hpp"\ + ".\Srvrdlg.hpp"\ + + +"$(INTDIR)\srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\thmbnail.cpp +DEP_CPP_THMBN=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\bminfo.hpp"\ + "..\common\dib.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\windows.hpp"\ + "..\mediapak\pakentry.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + ".\thmbnail.hpp"\ + + +"$(INTDIR)\thmbnail.obj" : $(SOURCE) $(DEP_CPP_THMBN) "$(INTDIR)" + + +SOURCE=.\thmbpage.cpp +DEP_CPP_THMBP=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\common\array.hpp"\ + "..\common\assert.hpp"\ + "..\common\block.hpp"\ + "..\common\block.tpp"\ + "..\common\bminfo.hpp"\ + "..\common\callback.hpp"\ + "..\common\callback.tpp"\ + "..\common\cbdata.hpp"\ + "..\common\cbptr.hpp"\ + "..\common\dib.hpp"\ + "..\common\except.hpp"\ + "..\common\fixup.hpp"\ + "..\common\gdata.hpp"\ + "..\common\gdata.tpp"\ + "..\common\gdiobj.hpp"\ + "..\common\gdipoint.hpp"\ + "..\common\guiwnd.hpp"\ + "..\common\palentry.hpp"\ + "..\common\pcallbck.hpp"\ + "..\common\pen.hpp"\ + "..\common\point.hpp"\ + "..\common\pointer.hpp"\ + "..\common\purebmp.hpp"\ + "..\common\purehdc.hpp"\ + "..\common\purepal.hpp"\ + "..\common\pvector.hpp"\ + "..\common\pvector.tpp"\ + "..\common\rect.hpp"\ + "..\common\rgbcolor.hpp"\ + "..\common\rgbquad.hpp"\ + "..\common\stdlib.hpp"\ + "..\common\string.hpp"\ + "..\common\types.hpp"\ + "..\common\vhandler.hpp"\ + "..\common\windows.hpp"\ + "..\common\windowsx.hpp"\ + "..\mediapak\pakentry.hpp"\ + ".\dib24.hpp"\ + ".\jpgimg.hpp"\ + ".\rawimg.hpp"\ + ".\rgb888.hpp"\ + ".\thmbnail.hpp"\ + ".\thmbpage.hpp"\ + + +"$(INTDIR)\thmbpage.obj" : $(SOURCE) $(DEP_CPP_THMBP) "$(INTDIR)" + + + +!ENDIF + diff --git a/nntp/NNTP.MDP b/nntp/NNTP.MDP new file mode 100644 index 0000000..833ceb7 Binary files /dev/null and b/nntp/NNTP.MDP differ diff --git a/nntp/NNTP.OPT b/nntp/NNTP.OPT new file mode 100644 index 0000000..860090a Binary files /dev/null and b/nntp/NNTP.OPT differ diff --git a/nntp/NNTP.PLG b/nntp/NNTP.PLG new file mode 100644 index 0000000..8cddc01 --- /dev/null +++ b/nntp/NNTP.PLG @@ -0,0 +1,893 @@ + + +
+

Build Log

+

+--------------------Configuration: common - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DA.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\COMMON\accelerator.cpp" +"F:\work\COMMON\Bitmap.cpp" +"F:\work\COMMON\Bminfo.cpp" +"F:\work\COMMON\Bmplnk.cpp" +"F:\work\COMMON\Brush.cpp" +"F:\work\COMMON\Btnlnk.cpp" +"F:\work\COMMON\calendar.cpp" +"F:\work\COMMON\Catmull.cpp" +"F:\work\COMMON\Cbdata.cpp" +"F:\work\COMMON\Cbdatahk.cpp" +"F:\work\COMMON\Clipbrd.cpp" +"F:\work\COMMON\Console.cpp" +"F:\work\COMMON\Control.cpp" +"F:\work\COMMON\Crsctrl.cpp" +"F:\work\COMMON\Ddemsg.cpp" +"F:\work\COMMON\Dib.cpp" +"F:\work\COMMON\Diskinfo.cpp" +"F:\work\COMMON\Drawbmp.cpp" +"F:\work\COMMON\Dwindow.cpp" +"F:\work\COMMON\elastic.cpp" +"F:\work\COMMON\errormsg.cpp" +"F:\work\COMMON\File.cpp" +"F:\work\COMMON\Fileio.cpp" +"F:\work\COMMON\Filemap.cpp" +"F:\work\COMMON\Finddata.cpp" +"F:\work\COMMON\Font.cpp" +"F:\work\COMMON\gdipoint.cpp" +"F:\work\COMMON\Guiwnd.cpp" +"F:\work\COMMON\Hookproc.cpp" +"F:\work\COMMON\Iconfrm.cpp" +"F:\work\COMMON\Infowin.cpp" +"F:\work\COMMON\Intel.cpp" +"F:\work\COMMON\Iobuff.cpp" +"F:\work\COMMON\Logowin.cpp" +"F:\work\COMMON\Macro.cpp" +"F:\work\COMMON\Math.cpp" +"F:\work\COMMON\Mdifrm.cpp" +"F:\work\COMMON\Mdiwin.cpp" +"F:\work\COMMON\Memfile.cpp" +"F:\work\COMMON\Mmtimer.cpp" +"F:\work\COMMON\Odbutton.cpp" +"F:\work\COMMON\Odlist.cpp" +"F:\work\COMMON\Odlstalt.cpp" +"F:\work\COMMON\Odlstchk.cpp" +"F:\work\COMMON\opendlg.Cpp" +"F:\work\COMMON\Openfile.cpp" +"F:\work\COMMON\opndlgex.cpp" +"F:\work\COMMON\Owner.cpp" +"F:\work\COMMON\Pathfnd.cpp" +"F:\work\COMMON\Point.cpp" +"F:\work\COMMON\Process.cpp" +"F:\work\COMMON\Profile.cpp" +"F:\work\COMMON\Progress.cpp" +"F:\work\COMMON\Purebmp.cpp" +"F:\work\COMMON\Purebyte.cpp" +"F:\work\COMMON\puredbl.cpp" +"F:\work\COMMON\Puredwrd.cpp" +"F:\work\COMMON\Purehdc.cpp" +"F:\work\COMMON\puremenu.Cpp" +"F:\work\COMMON\Purepal.cpp" +"F:\work\COMMON\purewrd.cpp" +"F:\work\COMMON\Pview.cpp" +"F:\work\COMMON\Regkey.cpp" +"F:\work\COMMON\resbmp.cpp" +"F:\work\COMMON\Richedit.cpp" +"F:\work\COMMON\rubber.cpp" +"F:\work\COMMON\Sdate.cpp" +"F:\work\COMMON\Smrtstrm.cpp" +"F:\work\COMMON\snapshot.cpp" +"F:\work\COMMON\static.cpp" +"F:\work\COMMON\String.cpp" +"F:\work\COMMON\Systime.cpp" +"F:\work\COMMON\Vhandler.cpp" +"F:\work\COMMON\Vxdctrl.cpp" +"F:\work\COMMON\widestr.Cpp" +"F:\work\COMMON\Window.cpp" +"F:\work\COMMON\Wintimer.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DA.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DB.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fp"msvcobj/common.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\COMMON\Bmdata.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DB.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DC.tmp" with contents +[ +/nologo /out:"..\exe\mscommon.lib" +.\msvcobj\accelerator.obj +.\msvcobj\Bitmap.obj +.\msvcobj\Bmdata.obj +.\msvcobj\Bminfo.obj +.\msvcobj\Bmplnk.obj +.\msvcobj\Brush.obj +.\msvcobj\Btnlnk.obj +.\msvcobj\calendar.obj +.\msvcobj\Catmull.obj +.\msvcobj\Cbdata.obj +.\msvcobj\Cbdatahk.obj +.\msvcobj\Clipbrd.obj +.\msvcobj\Console.obj +.\msvcobj\Control.obj +.\msvcobj\Crsctrl.obj +.\msvcobj\Ddemsg.obj +.\msvcobj\Dib.obj +.\msvcobj\Diskinfo.obj +.\msvcobj\Drawbmp.obj +.\msvcobj\Dwindow.obj +.\msvcobj\elastic.obj +.\msvcobj\errormsg.obj +.\msvcobj\File.obj +.\msvcobj\Fileio.obj +.\msvcobj\Filemap.obj +.\msvcobj\Finddata.obj +.\msvcobj\Font.obj +.\msvcobj\gdipoint.obj +.\msvcobj\Guiwnd.obj +.\msvcobj\Hookproc.obj +.\msvcobj\Iconfrm.obj +.\msvcobj\Infowin.obj +.\msvcobj\Intel.obj +.\msvcobj\Iobuff.obj +.\msvcobj\Logowin.obj +.\msvcobj\Macro.obj +.\msvcobj\Math.obj +.\msvcobj\Mdifrm.obj +.\msvcobj\Mdiwin.obj +.\msvcobj\Memfile.obj +.\msvcobj\Mmtimer.obj +.\msvcobj\Odbutton.obj +.\msvcobj\Odlist.obj +.\msvcobj\Odlstalt.obj +.\msvcobj\Odlstchk.obj +.\msvcobj\opendlg.obj +.\msvcobj\Openfile.obj +.\msvcobj\opndlgex.obj +.\msvcobj\Owner.obj +.\msvcobj\Pathfnd.obj +.\msvcobj\Point.obj +.\msvcobj\Process.obj +.\msvcobj\Profile.obj +.\msvcobj\Progress.obj +.\msvcobj\Purebmp.obj +.\msvcobj\Purebyte.obj +.\msvcobj\puredbl.obj +.\msvcobj\Puredwrd.obj +.\msvcobj\Purehdc.obj +.\msvcobj\puremenu.obj +.\msvcobj\Purepal.obj +.\msvcobj\purewrd.obj +.\msvcobj\Pview.obj +.\msvcobj\Regkey.obj +.\msvcobj\resbmp.obj +.\msvcobj\Richedit.obj +.\msvcobj\rubber.obj +.\msvcobj\Sdate.obj +.\msvcobj\Smrtstrm.obj +.\msvcobj\snapshot.obj +.\msvcobj\static.obj +.\msvcobj\String.obj +.\msvcobj\Systime.obj +.\msvcobj\Vhandler.obj +.\msvcobj\Vxdctrl.obj +.\msvcobj\widestr.obj +.\msvcobj\Window.obj +.\msvcobj\Wintimer.obj +] +Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DC.tmp" +

Output Window

+Compiling... +accelerator.cpp +Bitmap.cpp +Bminfo.cpp +Bmplnk.cpp +Brush.cpp +Btnlnk.cpp +calendar.cpp +Catmull.cpp +Cbdata.cpp +Cbdatahk.cpp +Clipbrd.cpp +Console.cpp +Control.cpp +Crsctrl.cpp +Ddemsg.cpp +Dib.cpp +Diskinfo.cpp +Drawbmp.cpp +Dwindow.cpp +elastic.cpp +Generating Code... +Compiling... +errormsg.cpp +File.cpp +Fileio.cpp +Filemap.cpp +Finddata.cpp +Font.cpp +gdipoint.cpp +Guiwnd.cpp +Hookproc.cpp +Iconfrm.cpp +Infowin.cpp +Intel.cpp +Iobuff.cpp +Logowin.cpp +Macro.cpp +Math.cpp +Mdifrm.cpp +Mdiwin.cpp +Memfile.cpp +Mmtimer.cpp +Generating Code... +Compiling... +Odbutton.cpp +Odlist.cpp +Odlstalt.cpp +Odlstchk.cpp +opendlg.Cpp +Openfile.cpp +opndlgex.cpp +Owner.cpp +Pathfnd.cpp +Point.cpp +Process.cpp +Profile.cpp +Progress.cpp +Purebmp.cpp +Purebyte.cpp +puredbl.cpp +Puredwrd.cpp +Purehdc.cpp +puremenu.Cpp +Purepal.cpp +Generating Code... +Compiling... +purewrd.cpp +Pview.cpp +Regkey.cpp +resbmp.cpp +Richedit.cpp +rubber.cpp +Sdate.cpp +Smrtstrm.cpp +snapshot.cpp +static.cpp +String.cpp +Systime.cpp +Vhandler.cpp +Vxdctrl.cpp +widestr.Cpp +Window.cpp +Wintimer.cpp +Generating Code... +Compiling... +Bmdata.cpp +Creating library... +

+--------------------Configuration: dialog - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DD.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\DIALOG\Dlgtmpl.cpp" +"F:\work\DIALOG\Dyndlg.cpp" +"F:\work\DIALOG\Stdtmpl.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DD.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msdialog.lib" .\msvcobj\Dlgtmpl.obj .\msvcobj\Dyndlg.obj .\msvcobj\Stdtmpl.obj " +

Output Window

+Compiling... +Dlgtmpl.cpp +Dyndlg.cpp +Stdtmpl.cpp +Creating library... +

+--------------------Configuration: fileio - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DE.bat" with contents +[ +@echo off +c:\masm32\bin\ml /c /Zi /coff cfile.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DE.bat" +Creating command line "link.exe -lib /nologo /out:"..\exe\msfileio.lib" .\cfile.obj " +Performing Custom Build Step on .\cfile.asm +Microsoft (R) Macro Assembler Version 6.14.8444 +Copyright (C) Microsoft Corp 1981-1997. All rights reserved. + + Assembling: cfile.asm +

Output Window

+Creating library... +

+--------------------Configuration: hookproc - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DF.tmp" with contents +[ +/nologo /Gz /MTd /GX /ZI /Od /I "\cortex" /I "\parts" /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/hookproc.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"F:\work\HOOKPROC\Apientry.cpp" +"F:\work\HOOKPROC\enumdesk.cpp" +"F:\work\HOOKPROC\enumstation.cpp" +"F:\work\HOOKPROC\enumwin.cpp" +"F:\work\HOOKPROC\Msghook.cpp" +"F:\work\HOOKPROC\ofnhook.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1DF.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mshook.lib" .\msvcobj\Apientry.obj .\msvcobj\enumdesk.obj .\msvcobj\enumstation.obj .\msvcobj\enumwin.obj .\msvcobj\Msghook.obj .\msvcobj\ofnhook.obj " +

Output Window

+Compiling... +Apientry.cpp +enumdesk.cpp +enumstation.cpp +enumwin.cpp +Msghook.cpp +ofnhook.cpp +Creating library... +

+--------------------Configuration: jpgimg - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E0.bat" with contents +[ +@echo off +c:\tasm32\TASM32 /t /ml Asmutil.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E0.bat" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E1.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /O2 /I "\work" /I "\parts" /I "\parts\jpeg-6b" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "_WINDOWS" /D "WIN32" /Fp"msvcobj/jpgimg.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"F:\work\jpgimg\Dib24.cpp" +"F:\work\jpgimg\Jpgimg.cpp" +"F:\work\jpgimg\Rawimg.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E1.tmp" +Performing Custom Build Step on .\Asmutil.asm +Creating command line "link.exe -lib /nologo /out:"..\exe\jpgimg.lib" .\msvcobj\Dib24.obj .\msvcobj\Jpgimg.obj .\msvcobj\Rawimg.obj .\Asmutil.obj " +

Output Window

+Compiling... +Dib24.cpp +Jpgimg.cpp +Rawimg.cpp +Creating library... +.\Asmutil.obj : warning LNK4033: converting object format from OMF to COFF +

+--------------------Configuration: mediapak - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E2.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp".\msvcobj/mediapak.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" " " /c +"F:\work\MEDIAPAK\mediapak.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E2.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mediapak.lib" .\msvcobj\mediapak.obj ..\Exe\mscommon.lib " +

Output Window

+Compiling... +mediapak.cpp +Creating library... +

+--------------------Configuration: printman - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E3.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/Printman.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"F:\work\printman\Abortdlg.cpp" +"F:\work\printman\pickdlg.cpp" +"F:\work\printman\Printman.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E3.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\printman.lib" .\msvcobj\Abortdlg.obj .\msvcobj\pickdlg.obj .\msvcobj\Printman.obj " +

Output Window

+Compiling... +Abortdlg.cpp +pickdlg.cpp +Printman.cpp +Creating library... +

+--------------------Configuration: rasapi - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E4.tmp" with contents +[ +/nologo /Gz /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\RASAPI\Connstat.cpp" +"F:\work\RASAPI\Rasentry.cpp" +"F:\work\RASAPI\Rassrv.cpp" +"F:\work\RASAPI\Stdtmpl.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E4.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msrasapi.lib" .\msvcobj\Connstat.obj .\msvcobj\Rasentry.obj .\msvcobj\Rassrv.obj .\msvcobj\Stdtmpl.obj " +

Output Window

+Compiling... +Connstat.cpp +Rasentry.cpp +Rassrv.cpp +Stdtmpl.cpp +Creating library... +

+--------------------Configuration: sample - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E5.tmp" with contents +[ +/nologo /Gz /MTd /Zi /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\SAMPLE\Datachnk.cpp" +"F:\work\SAMPLE\Devhndlr.cpp" +"F:\work\SAMPLE\fmtchnk.cpp" +"F:\work\SAMPLE\GenChnk.cpp" +"F:\work\SAMPLE\Puresmpl.cpp" +"F:\work\SAMPLE\Purewave.cpp" +"F:\work\SAMPLE\Wave.cpp" +"F:\work\SAMPLE\Wavein.cpp" +"F:\work\SAMPLE\Waveout.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E5.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\sample.lib" .\msvcobj\Datachnk.obj .\msvcobj\Devhndlr.obj .\msvcobj\fmtchnk.obj .\msvcobj\GenChnk.obj .\msvcobj\Puresmpl.obj .\msvcobj\Purewave.obj .\msvcobj\Wave.obj .\msvcobj\Wavein.obj .\msvcobj\Waveout.obj " +

Output Window

+Compiling... +Datachnk.cpp +Devhndlr.cpp +fmtchnk.cpp +GenChnk.cpp +Puresmpl.cpp +Purewave.cpp +Wave.cpp +Wavein.cpp +Waveout.cpp +Creating library... +

+--------------------Configuration: socket - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E6.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\SOCKET\cache.cpp" +"F:\work\SOCKET\hooker.cpp" +"F:\work\SOCKET\Hostent.cpp" +"F:\work\SOCKET\Resolve.cpp" +"F:\work\SOCKET\Servent.cpp" +"F:\work\SOCKET\Socket.cpp" +"F:\work\SOCKET\Stdtmpl.cpp" +"F:\work\SOCKET\Wsadata.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E6.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mssocket.lib" .\msvcobj\cache.obj .\msvcobj\hooker.obj .\msvcobj\Hostent.obj .\msvcobj\Resolve.obj .\msvcobj\Servent.obj .\msvcobj\Socket.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Wsadata.obj " +

Output Window

+Compiling... +cache.cpp +hooker.cpp +Hostent.cpp +Resolve.cpp +Servent.cpp +Socket.cpp +Stdtmpl.cpp +Wsadata.cpp +Creating library... +

+--------------------Configuration: statbar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E7.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"\work\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\STATBAR\Popup.cpp" +"F:\work\STATBAR\Statbar.cpp" +"F:\work\STATBAR\statbarx.cpp" +"F:\work\STATBAR\Statinfo.cpp" +"F:\work\STATBAR\statlogo.cpp" +"F:\work\STATBAR\Statmenu.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E7.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\statbar.lib" .\msvcobj\Popup.obj .\msvcobj\Statbar.obj .\msvcobj\statbarx.obj .\msvcobj\Statinfo.obj .\msvcobj\statlogo.obj .\msvcobj\Statmenu.obj " +

Output Window

+Compiling... +Popup.cpp +Statbar.cpp +statbarx.cpp +Statinfo.cpp +statlogo.cpp +Statmenu.cpp +Creating library... +

+--------------------Configuration: thread - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E8.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\THREAD\Event.cpp" +"F:\work\THREAD\Msgqueue.cpp" +"F:\work\THREAD\Mthread.cpp" +"F:\work\THREAD\Mutex.cpp" +"F:\work\THREAD\Ptcllbck.cpp" +"F:\work\THREAD\Qthread.cpp" +"F:\work\THREAD\Stdtmpl.cpp" +"F:\work\THREAD\Thread.cpp" +"F:\work\THREAD\thtimer.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E8.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msthread.lib" .\msvcobj\Event.obj .\msvcobj\Msgqueue.obj .\msvcobj\Mthread.obj .\msvcobj\Mutex.obj .\msvcobj\Ptcllbck.obj .\msvcobj\Qthread.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Thread.obj .\msvcobj\thtimer.obj " +

Output Window

+Compiling... +Event.cpp +Msgqueue.cpp +Mthread.cpp +Mutex.cpp +Ptcllbck.cpp +Qthread.cpp +Stdtmpl.cpp +Thread.cpp +thtimer.cpp +Creating library... +

+--------------------Configuration: uulib - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E9.bat" with contents +[ +@echo off +c:\masm32\bin\ml /c /Zi /coff masm\Decode64.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1E9.bat" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EA.bat" with contents +[ +@echo off +c:\masm32\bin\ml /c /Zi /coff masm\Cfile.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EA.bat" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EB.bat" with contents +[ +@echo off +c:\masm32\bin\ml /c /Zi /coff masm\Uudecode.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EB.bat" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EC.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/Uulib.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\UUDECODE\Decode.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EC.tmp" +Performing Custom Build Step on .\Masm\Decode64.asm +Microsoft (R) Macro Assembler Version 6.14.8444 +Copyright (C) Microsoft Corp 1981-1997. All rights reserved. + + Assembling: masm\Decode64.asm +Performing Custom Build Step on .\Masm\Cfile.asm +Microsoft (R) Macro Assembler Version 6.14.8444 +Copyright (C) Microsoft Corp 1981-1997. All rights reserved. + + Assembling: masm\Cfile.asm +Performing Custom Build Step on .\Masm\Uudecode.asm +Microsoft (R) Macro Assembler Version 6.14.8444 +Copyright (C) Microsoft Corp 1981-1997. All rights reserved. + + Assembling: masm\Uudecode.asm +Creating command line "link.exe -lib /nologo /out:"..\exe\uulib.lib" .\msvcobj\Decode.obj .\Uudecode.obj .\Cfile.obj .\Decode64.obj " +

Output Window

+Compiling... +Decode.cpp +Creating library... +

+--------------------Configuration: jpeg6b - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1ED.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /O2 /I "\parts" /I "\work" /I "\parts\jpeg-6b" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fp".\msvcobj/jpeg6b.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" " " /c +"F:\parts\jpeg-6b\bmpjpg.cpp" +"F:\parts\jpeg-6b\jcapimin.cpp" +"F:\parts\jpeg-6b\jcapistd.cpp" +"F:\parts\jpeg-6b\jccoefct.cpp" +"F:\parts\jpeg-6b\jccolor.cpp" +"F:\parts\jpeg-6b\jcdctmgr.cpp" +"F:\parts\jpeg-6b\jchuff.cpp" +"F:\parts\jpeg-6b\jcinit.cpp" +"F:\parts\jpeg-6b\jcmaintc.cpp" +"F:\parts\jpeg-6b\jcmarker.cpp" +"F:\parts\jpeg-6b\jcmaster.cpp" +"F:\parts\jpeg-6b\jcomapi.cpp" +"F:\parts\jpeg-6b\jcparam.cpp" +"F:\parts\jpeg-6b\jcphuff.cpp" +"F:\parts\jpeg-6b\jcprepct.cpp" +"F:\parts\jpeg-6b\jcsample.cpp" +"F:\parts\jpeg-6b\jctrans.cpp" +"F:\parts\jpeg-6b\jdapimin.cpp" +"F:\parts\jpeg-6b\jdapistd.cpp" +"F:\parts\jpeg-6b\jdatadst.cpp" +"F:\parts\jpeg-6b\jdatasrc.cpp" +"F:\parts\jpeg-6b\jdcoefct.cpp" +"F:\parts\jpeg-6b\jdcolor.cpp" +"F:\parts\jpeg-6b\jddctmgr.cpp" +"F:\parts\jpeg-6b\jdhuff.cpp" +"F:\parts\jpeg-6b\jdinput.cpp" +"F:\parts\jpeg-6b\jdmaint.cpp" +"F:\parts\jpeg-6b\jdmarker.cpp" +"F:\parts\jpeg-6b\jdmaster.cpp" +"F:\parts\jpeg-6b\jdmerge.cpp" +"F:\parts\jpeg-6b\jdphuff.cpp" +"F:\parts\jpeg-6b\jdpostct.cpp" +"F:\parts\jpeg-6b\jdsample.cpp" +"F:\parts\jpeg-6b\jdtrans.cpp" +"F:\parts\jpeg-6b\jerror.cpp" +"F:\parts\jpeg-6b\jfdctflt.cpp" +"F:\parts\jpeg-6b\jfdctfst.cpp" +"F:\parts\jpeg-6b\jfdctint.cpp" +"F:\parts\jpeg-6b\jidctflt.cpp" +"F:\parts\jpeg-6b\jidctfst.cpp" +"F:\parts\jpeg-6b\jidctint.cpp" +"F:\parts\jpeg-6b\jidctred.cpp" +"F:\parts\jpeg-6b\jmemmgr.cpp" +"F:\parts\jpeg-6b\jmemnobs.cpp" +"F:\parts\jpeg-6b\jquant1.cpp" +"F:\parts\jpeg-6b\jquant2.cpp" +"F:\parts\jpeg-6b\jutils.cpp" +"F:\parts\jpeg-6b\rdbmp.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1ED.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EE.tmp" with contents +[ +/nologo /out:".\lib\jpeg6b.lib" +".\msvcobj\bmpjpg.obj" +".\msvcobj\jcapimin.obj" +".\msvcobj\jcapistd.obj" +".\msvcobj\jccoefct.obj" +".\msvcobj\jccolor.obj" +".\msvcobj\jcdctmgr.obj" +".\msvcobj\jchuff.obj" +".\msvcobj\jcinit.obj" +".\msvcobj\jcmaintc.obj" +".\msvcobj\jcmarker.obj" +".\msvcobj\jcmaster.obj" +".\msvcobj\jcomapi.obj" +".\msvcobj\jcparam.obj" +".\msvcobj\jcphuff.obj" +".\msvcobj\jcprepct.obj" +".\msvcobj\jcsample.obj" +".\msvcobj\jctrans.obj" +".\msvcobj\jdapimin.obj" +".\msvcobj\jdapistd.obj" +".\msvcobj\jdatadst.obj" +".\msvcobj\jdatasrc.obj" +".\msvcobj\jdcoefct.obj" +".\msvcobj\jdcolor.obj" +".\msvcobj\jddctmgr.obj" +".\msvcobj\jdhuff.obj" +".\msvcobj\jdinput.obj" +".\msvcobj\jdmaint.obj" +".\msvcobj\jdmarker.obj" +".\msvcobj\jdmaster.obj" +".\msvcobj\jdmerge.obj" +".\msvcobj\jdphuff.obj" +".\msvcobj\jdpostct.obj" +".\msvcobj\jdsample.obj" +".\msvcobj\jdtrans.obj" +".\msvcobj\jerror.obj" +".\msvcobj\jfdctflt.obj" +".\msvcobj\jfdctfst.obj" +".\msvcobj\jfdctint.obj" +".\msvcobj\jidctflt.obj" +".\msvcobj\jidctfst.obj" +".\msvcobj\jidctint.obj" +".\msvcobj\jidctred.obj" +".\msvcobj\jmemmgr.obj" +".\msvcobj\jmemnobs.obj" +".\msvcobj\jquant1.obj" +".\msvcobj\jquant2.obj" +".\msvcobj\jutils.obj" +".\msvcobj\rdbmp.obj" +] +Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EE.tmp" +

Output Window

+Compiling... +bmpjpg.cpp +jcapimin.cpp +jcapistd.cpp +jccoefct.cpp +jccolor.cpp +jcdctmgr.cpp +jchuff.cpp +jcinit.cpp +jcmaintc.cpp +jcmarker.cpp +jcmaster.cpp +jcomapi.cpp +jcparam.cpp +jcphuff.cpp +jcprepct.cpp +jcsample.cpp +jctrans.cpp +jdapimin.cpp +jdapistd.cpp +jdatadst.cpp +jdatasrc.cpp +jdcoefct.cpp +jdcolor.cpp +jddctmgr.cpp +jdhuff.cpp +jdinput.cpp +jdmaint.cpp +jdmarker.cpp +jdmaster.cpp +jdmerge.cpp +jdphuff.cpp +jdpostct.cpp +jdsample.cpp +jdtrans.cpp +jerror.cpp +jfdctflt.cpp +jfdctfst.cpp +jfdctint.cpp +jidctflt.cpp +jidctfst.cpp +jidctint.cpp +jidctred.cpp +jmemmgr.cpp +jmemnobs.cpp +jquant1.cpp +jquant2.cpp +jutils.cpp +rdbmp.cpp +Creating library... +

+--------------------Configuration: bsptree - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EF.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /O2 /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "_WINDOWS" /D "WIN32" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\BSPTREE\Bsptmpl.cpp" +"F:\work\BSPTREE\Rgbtree.cpp" +"F:\work\BSPTREE\Stdtmpl.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1EF.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msbsp.lib" .\msvcobj\Bsptmpl.obj .\msvcobj\Rgbtree.obj .\msvcobj\Stdtmpl.obj " +

Output Window

+Compiling... +Bsptmpl.cpp +Rgbtree.cpp +Stdtmpl.cpp +Generating Code... +Creating library... +

+--------------------Configuration: ydecode - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1F0.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "__FLAT__" /D "STRICT" /Fp"msvcobj/ydecode.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /GZ /c +"F:\work\yproxy\crc.cpp" +"F:\work\yproxy\pdecode.cpp" +"F:\work\yproxy\ydecode.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1F0.tmp" +Creating command line "link.exe -lib /nologo /out:"msvcobj\ydecode.lib" .\msvcobj\crc.obj .\msvcobj\pdecode.obj .\msvcobj\ydecode.obj " +

Output Window

+Compiling... +crc.cpp +pdecode.cpp +ydecode.cpp +Creating library... +

+--------------------Configuration: nntp - Win32 Debug-------------------- +

+

Command Lines

+Creating command line "rc.exe /l 0x409 /fo".\nntp.res" /d "_DEBUG" "F:\work\nntp\nntp.rc"" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1F1.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\nntp\brwsview.cpp" +"F:\work\nntp\entrydlg.cpp" +"F:\work\nntp\groupdlg.cpp" +"F:\work\nntp\Header.cpp" +"F:\work\nntp\imgview.cpp" +"F:\work\nntp\listitms.cpp" +"F:\work\nntp\logview.cpp" +"F:\work\nntp\Main.cpp" +"F:\work\nntp\mainfrm.cpp" +"F:\work\nntp\msglog.cpp" +"F:\work\nntp\mwdlg.cpp" +"F:\work\nntp\Newsitem.cpp" +"F:\work\nntp\newsreg.cpp" +"F:\work\nntp\nntp.cpp" +"F:\work\nntp\nntpthrd.cpp" +"F:\work\nntp\opendir.cpp" +"F:\work\nntp\optnsdlg.cpp" +"F:\work\nntp\optnsreg.cpp" +"F:\work\nntp\rasdlg.cpp" +"F:\work\nntp\rasiface.cpp" +"F:\work\nntp\rcvrlog.cpp" +"F:\work\nntp\srvrdlg.cpp" +"F:\work\nntp\thmbnail.cpp" +"F:\work\nntp\thmbpage.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1F1.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1F2.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib wsock32.lib winmm.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/nntp.pdb" /debug /machine:I386 /out:".\msvcobj/nntp.exe" +.\msvcobj\brwsview.obj +.\msvcobj\entrydlg.obj +.\msvcobj\groupdlg.obj +.\msvcobj\Header.obj +.\msvcobj\imgview.obj +.\msvcobj\listitms.obj +.\msvcobj\logview.obj +.\msvcobj\Main.obj +.\msvcobj\mainfrm.obj +.\msvcobj\msglog.obj +.\msvcobj\mwdlg.obj +.\msvcobj\Newsitem.obj +.\msvcobj\newsreg.obj +.\msvcobj\nntp.obj +.\msvcobj\nntpthrd.obj +.\msvcobj\opendir.obj +.\msvcobj\optnsdlg.obj +.\msvcobj\optnsreg.obj +.\msvcobj\rasdlg.obj +.\msvcobj\rasiface.obj +.\msvcobj\rcvrlog.obj +.\msvcobj\srvrdlg.obj +.\msvcobj\thmbnail.obj +.\msvcobj\thmbpage.obj +.\nntp.res +..\Exe\mscommon.lib +\work\exe\msdialog.lib +\work\exe\msfileio.lib +\work\exe\mshook.lib +\work\exe\jpgimg.lib +\work\exe\mediapak.lib +\work\exe\printman.lib +\work\exe\msrasapi.lib +\work\exe\sample.lib +\work\exe\mssocket.lib +\work\exe\statbar.lib +\work\exe\msthread.lib +\work\exe\uulib.lib +"\parts\jpeg-6b\lib\jpeg6b.lib" +\work\exe\msbsp.lib +\work\yproxy\msvcobj\ydecode.lib +] +Creating command line "link.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1F2.tmp" +

Output Window

+Compiling resources... +Compiling... +brwsview.cpp +entrydlg.cpp +groupdlg.cpp +Header.cpp +imgview.cpp +listitms.cpp +logview.cpp +Main.cpp +mainfrm.cpp +msglog.cpp +mwdlg.cpp +Newsitem.cpp +newsreg.cpp +nntp.cpp +nntpthrd.cpp +opendir.cpp +optnsdlg.cpp +optnsreg.cpp +rasdlg.cpp +rasiface.cpp +rcvrlog.cpp +srvrdlg.cpp +thmbnail.cpp +thmbpage.cpp +Linking... + Creating library .\msvcobj/nntp.lib and object .\msvcobj/nntp.exp + + + +

Results

+nntp.exe - 0 error(s), 1 warning(s) +
+ + diff --git a/nntp/NNTP.RWS b/nntp/NNTP.RWS new file mode 100644 index 0000000..9abf223 Binary files /dev/null and b/nntp/NNTP.RWS differ diff --git a/nntp/NNTP.ncb b/nntp/NNTP.ncb new file mode 100644 index 0000000..121f2ea Binary files /dev/null and b/nntp/NNTP.ncb differ diff --git a/nntp/NNTP.~RC b/nntp/NNTP.~RC new file mode 100644 index 0000000..f37a1c7 --- /dev/null +++ b/nntp/NNTP.~RC @@ -0,0 +1,242 @@ +#include +#include + +APP ICON "NNTP.ICO" +NNTP ICON "NNTP.ICO" +LOG ICON "LOG.ICO" +PAINT ICON "PAINT.ICO" +CHECKBOXC BITMAP "CBOXC.BMP" +CHECKBOX BITMAP "CBOX.BMP" +LIST BITMAP "STRIP.BMP" + +mainMenu MENU +{ + POPUP "&File" + { + MENUITEM "&Open...", NNTP_FILE_OPEN + MENUITEM "E&xit", NNTP_FILE_EXIT + } + POPUP "&News" + { + MENUITEM "Get &News", NNTP_NEWS_GETNEWS + MENUITEM "Get News &Groups", NNTP_NEWS_GETGROUPS + MENUITEM "Ca&ncel", NNTP_NEWS_CANCEL + } + POPUP "&View" + { + MENUITEM "&Log" NNTP_VIEW_LOG + } + POPUP "&Groups" + { + MENUITEM "Subscribe...", NNTP_NEWSGROUPS_SUBSCRIBE + } + POPUP "&Options" + { + MENUITEM "News &Server...", NNTP_OPTIONS_NEWSSERVER + MENUITEM "&RAS Settings...", NNTP_OPTIONS_RASSETTINGS + MENUITEM "&General Options...", NNTP_OPTIONS_GENERALOPTIONS + } + POPUP "&Help" + { + MENUITEM "&Contents", NNTP_HELP_CONTENTS + MENUITEM "&Search", NNTP_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", NNTP_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...",NNTP_HELP_ABOUT + } +} + +logMenu MENU +{ + POPUP "&File" + { + MENUITEM "&Open...", NNTP_FILE_OPEN + MENUITEM "E&xit", NNTP_FILE_EXIT + } + POPUP "&News" + { + MENUITEM "Get &News", NNTP_NEWS_GETNEWS + MENUITEM "Get News &Groups", NNTP_NEWS_GETGROUPS + MENUITEM "Ca&ncel", NNTP_NEWS_CANCEL + } + POPUP "&Groups" + { + MENUITEM "Subscribe...", NNTP_NEWSGROUPS_SUBSCRIBE + } + POPUP "&Options" + { + MENUITEM "News &Server...", NNTP_OPTIONS_NEWSSERVER + MENUITEM "&RAS Settings...", NNTP_OPTIONS_RASSETTINGS + MENUITEM "&General Options...", NNTP_OPTIONS_GENERALOPTIONS + MENUITEM SEPARATOR + MENUITEM "&Clear Log", NNTP_OPTIONS_CLEARLOG + } + POPUP "&Window" + { + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + } + POPUP "&Help" + { + MENUITEM "&Contents", NNTP_HELP_CONTENTS + MENUITEM "&Search", NNTP_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", NNTP_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...",NNTP_HELP_ABOUT + } +} + +imgMenu MENU +{ + POPUP "&File" + { + MENUITEM "&Open...", NNTP_FILE_OPEN + MENUITEM "E&xit", NNTP_FILE_EXIT + } + POPUP "&News" + { + MENUITEM "Get &News", NNTP_NEWS_GETNEWS + MENUITEM "Get News &Groups", NNTP_NEWS_GETGROUPS + MENUITEM "Ca&ncel", NNTP_NEWS_CANCEL + } + POPUP "&Groups" + { + MENUITEM "Subscribe...", NNTP_NEWSGROUPS_SUBSCRIBE + } + POPUP "&Options" + { + MENUITEM "News &Server...", NNTP_OPTIONS_NEWSSERVER + MENUITEM "&RAS Settings...", NNTP_OPTIONS_RASSETTINGS + MENUITEM "&General Options...", NNTP_OPTIONS_GENERALOPTIONS + MENUITEM SEPARATOR + MENUITEM "&Clear Log", NNTP_OPTIONS_CLEARLOG + } + POPUP "&Window" + { + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + } + POPUP "&Help" + { + MENUITEM "&Contents", NNTP_HELP_CONTENTS + MENUITEM "&Search", NNTP_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", NNTP_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...",NNTP_HELP_ABOUT + } +} + +ServerDialog DIALOG 6, 15, 202, 49 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "News Server" +FONT 8, "MS Sans Serif" +{ + LTEXT "News Server:", -1, 6, 11, 49, 8 + EDITTEXT NS_SERVERNAME, 51, 10, 144, 12, ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 145, 27, 50, 14 +} + +GroupDialog DIALOG 6, 15, 209, 133 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "NewsGroups" +FONT 8, "MS Sans Serif" +{ + DEFPUSHBUTTON "Ok", IDOK, 106, 117, 50, 14 + LISTBOX NG_NEWSGROUPS, 10, 10, 190, 94, LBS_STANDARD | LBS_MULTIPLESEL | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_WANTKEYBOARDINPUT + PUSHBUTTON "Delete", NG_DELETE, 55, 117, 50, 14 + PUSHBUTTON "Add", NG_ADD, 4, 117, 50, 14 +} + +NewsGroup DIALOG 6, 15, 202, 49 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "News Group" +FONT 8, "MS Sans Serif" +{ + EDITTEXT NG_NEWSGROUP, 5, 10, 192, 12, WS_BORDER | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 144, 28, 50, 14 +} + +RasDialog DIALOG 8, 18, 207, 149 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "RAS Settings" +FONT 8, "MS Sans Serif" +{ + EDITTEXT RAS_USERNAME, 46, 21, 86, 12, WS_BORDER | WS_TABSTOP + EDITTEXT RAS_PASSWORD, 46, 34, 86, 12, ES_PASSWORD | WS_BORDER | WS_TABSTOP + EDITTEXT RAS_ENTRY, 46, 47, 86, 12, ES_READONLY | WS_BORDER | WS_TABSTOP + EDITTEXT RAS_MAXRETRIES, 46, 59, 27, 12 + PUSHBUTTON "Apply", IDOK, 154, 4, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 154, 19, 50, 14 + LISTBOX RAS_SERVERLIST, 5, 89, 171, 61, LBS_STANDARD + AUTOCHECKBOX "Enable RAS", RAS_ENABLE, 5, 4, 52, 12 + LTEXT "User Name:", -1, 3, 24, 40, 8 + LTEXT "Password:", -1, 3, 36, 34, 8 + CTEXT "Connection", -1, 64, 76, 42, 8 + LTEXT "Entry Name:", -1, 3, 49, 42, 8 + LTEXT "Max Retries:", -1, 3, 62, 40, 8 +} + +GenOptions DIALOG 10, 19, 250, 61 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "General Options" +FONT 8, "MS Sans Serif" +{ + LTEXT "DaysPrior:", -1, 2, 13, 33, 10 + EDITTEXT GENOPT_DAYSPRIOR, 37, 11, 19, 12, WS_BORDER | WS_TABSTOP + LTEXT "PostDate:", -1, 2, 27, 32, 9 + EDITTEXT GENOPT_POSTDATE, 37, 25, 135, 12, ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_TABSTOP + DEFPUSHBUTTON "O&k", IDOK, 196, 4, 50, 14 + LTEXT "Root:", -1, 2, 39, 25, 9 + EDITTEXT GENOPT_NEWSDIR, 37, 38, 135, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP + PUSHBUTTON "...", GENOPT_BROWSE, 172, 70, 15, 13 + PUSHBUTTON "Ca&ncel", IDCANCEL, 196, 18, 50, 14 +} + +STRINGTABLE +{ + STRING_SERVERKEYNAME, "ServerName" + STRING_NEWSGROUPSKEYNAME, "Software\\Diversified\\NewsCrawler\\NewsGroups" + STRING_NEWSGROUPSKEYVALUEPREFIX, "NG" + STRING_RASKEYOPTIONS, "Software\\Diversified\\NewsCrawler\\RasOptions" + STRING_RASKEYUSERNAME, "UserName" + STRING_RASKEYPASSWORD, "Password" + STRING_RASKEYENTRYNAME, "EntryName" + STRING_RASKEYSTATE, "RasState" + STRING_RASKEYMAXRETRIES, "MaxRetries" + STRING_OPTIONSKEYNAME, "Software\\Diversified\\NewsCrawler\\Options" + STRING_OPTIONSKEYNEWSDIR, "NewsDir" + STRING_OPTIONSKEYPRIORDAYS, "PriorDays" +} + +STRINGTABLE +{ + STRING_NNTP, "NewsCrawler" + STRING_VERSION, "v2.00" + STRING_LOGVIEWCLASSNAME, "LogView" + STRING_RECOVERLOGPOSTFIX, ".001" + STRING_MESSAGELOGPOSTFIX, ".002" + STRING_IMAGEVIEWCLASSNAME, "ImageView" + STRING_DOCUMENTVIEWCLASSNAME, "DocumentView" +} +MoreWindows DIALOG 6, 15, 280, 114 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "More Windows..." +FONT 8, "Helv" +{ + DEFPUSHBUTTON "OK", IDOK, 225, 3, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 225, 17, 50, 14 + LISTBOX MW_LISTBOX, 5, 4, 209, 109, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS +} diff --git a/nntp/NNTPTHRD.BAK b/nntp/NNTPTHRD.BAK new file mode 100644 index 0000000..d72b7df --- /dev/null +++ b/nntp/NNTPTHRD.BAK @@ -0,0 +1,34 @@ +#include + +DWORD NNTPThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(MsgOpen==someThreadMessage.userDataOne())handleOpen((String*)someThreadMessage.userDataTwo()); + break; + } + return FALSE; +} + +void NNTPThread::handleOpen(String *pServerName) +{ + ThreadMessage openMessage; + String serverName(*pServerName); + int currentPriority; + + delete pServerName; + currentPriority=::GetThreadPriority(::GetCurrentThread()); + ::SetThreadPriority(::GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL); + if(callHandler(openMessage,MsgPreOpen))return; + NNTPClient::open(serverName); + openMessage.userDataOne(isConnected()); + ::SetThreadPriority(::GetCurrentThread(),currentPriority); + callHandler(openMessage,MsgOpen); + callHandler(openMessage,MsgPostOpen); +} + diff --git a/nntp/NNTPTHRD.CPP b/nntp/NNTPTHRD.CPP new file mode 100644 index 0000000..77953da --- /dev/null +++ b/nntp/NNTPTHRD.CPP @@ -0,0 +1,106 @@ +#include + +typedef struct tagSERVERINFO +{ + String mServerName; + String mUserName; + String mPassword; +}SERVERINFO; + +NNTPThread::NNTPThread(void) +: mIsBlocking(FALSE) +{ + mThreadHandler.setCallback(this,&NNTPThread::threadHandler); + mEventHandlers.size((MsgPostOpen-MsgPreOpen)+1); + MessageThread::insertHandler(&mThreadHandler); +} + +NNTPThread::NNTPThread(const NNTPThread &someNNTPThread) +{ // private implementation + mThreadHandler.setCallback(this,&NNTPThread::threadHandler); + MessageThread::insertHandler(&mThreadHandler); +} + +NNTPThread::~NNTPThread() +{ + if(isBlocking())fatalThreadExit(); + else stop(); + MessageThread::removeHandler(&mThreadHandler); +} + +WORD NNTPThread::open(const String &serverName) +{ + SERVERINFO *pServerInfo=new SERVERINFO; + + pServerInfo->mServerName=serverName; + ThreadMessage openMessage(ThreadMessage::TM_USER,MsgOpen,(LONG)pServerInfo); + return postMessage(openMessage); +} + +WORD NNTPThread::open(const String &serverName,const String &userName,const String &password) +{ + SERVERINFO *pServerInfo=new SERVERINFO; + + pServerInfo->mServerName=serverName; + pServerInfo->mUserName=userName; + pServerInfo->mPassword=password; + ThreadMessage openMessage(ThreadMessage::TM_USER,MsgOpen,(LONG)pServerInfo); + return postMessage(openMessage); +} + +void NNTPThread::insertHandler(ThreadCallbackPointer pThreadCallback,HandlerType typeHandler) +{ + mEventHandlers[typeHandler]=ThreadCallbackPointer(pThreadCallback); +} + +void NNTPThread::removeHandler(HandlerType typeHandler) +{ + mEventHandlers[typeHandler]=ThreadCallbackPointer(); +} + +DWORD NNTPThread::callHandler(ThreadMessage &someThreadMessage,HandlerType typeHandler) +{ + return mEventHandlers[typeHandler].callback(someThreadMessage); +} + +DWORD NNTPThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(MsgOpen==someThreadMessage.userDataOne()) + { + SERVERINFO *pServerInfo=(SERVERINFO*)someThreadMessage.userDataTwo(); + String serverName(pServerInfo->mServerName); + String userName(pServerInfo->mUserName); + String password(pServerInfo->mPassword); + ::delete pServerInfo; + handleOpen(serverName,userName,password); + } + break; + } + return FALSE; +} + +void NNTPThread::handleOpen(const String &serverName,const String &userName,const String &password) +{ + ThreadMessage openMessage; + int currentPriority; + + currentPriority=::GetThreadPriority(::GetCurrentThread()); + ::SetThreadPriority(::GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL); + if(callHandler(openMessage,MsgPreOpen))return; + isBlocking(TRUE); + if(!userName.isNull()&&!password.isNull())NNTPClient::open(serverName,userName,password); + else NNTPClient::open(serverName); + openMessage.userDataOne(isConnected()); + ::SetThreadPriority(::GetCurrentThread(),currentPriority); + callHandler(openMessage,MsgOpen); + callHandler(openMessage,MsgPostOpen); + isBlocking(FALSE); +} + diff --git a/nntp/NNTPTHRD.HPP b/nntp/NNTPTHRD.HPP new file mode 100644 index 0000000..683a49c --- /dev/null +++ b/nntp/NNTPTHRD.HPP @@ -0,0 +1,56 @@ +#ifndef _NNTP_NNTPTHREAD_HPP_ +#define _NNTP_NNTPTHREAD_HPP_ +#ifndef _NNTP_NNTPCLIENT_HPP_ +#include +#endif +#ifndef _NNTP_GROUPITEM_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_THREADMESSAGE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class NNTPThread : private MessageThread, public NNTPClient +{ +public: + enum HandlerType{MsgPreOpen=0,MsgOpen=1,MsgPostOpen=2}; + NNTPThread(void); + virtual ~NNTPThread(); + WORD open(const String &serverName); + WORD open(const String &serverName,const String &userName,const String &password); + void insertHandler(ThreadCallbackPointer pThreadCallback,HandlerType typeHandler); + void removeHandler(HandlerType typeHandler); + BOOL isBlocking(void)const; +private: + NNTPThread(const NNTPThread &someNNTPThread); + void isBlocking(BOOL isBlocking); + void handleOpen(const String &serverName,const String &userName,const String &password); + DWORD callHandler(ThreadMessage &someThreadMessage,HandlerType typeHandler); + DWORD threadHandler(ThreadMessage &someThreadMessage); + + ThreadCallback mThreadHandler; + Array mEventHandlers; + BOOL mIsBlocking; +}; + +inline +BOOL NNTPThread::isBlocking(void)const +{ + return mIsBlocking; +} + +inline +void NNTPThread::isBlocking(BOOL isBlocking) +{ + mIsBlocking=isBlocking; +} +#endif \ No newline at end of file diff --git a/nntp/OPENDIR.CPP b/nntp/OPENDIR.CPP new file mode 100644 index 0000000..9ac789e --- /dev/null +++ b/nntp/OPENDIR.CPP @@ -0,0 +1,184 @@ +#include +#include +#include + +OpenDirectory::OpenDirectory(void) +{ +} + +OpenDirectory::~OpenDirectory() +{ +} + +bool OpenDirectory::getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory) +{ + DiskInfo diskInfo; + String strCurrentDirectory; + + if(strInitialDirectory.isNull())diskInfo.getCurrentDirectory(strCurrentDirectory); + else strCurrentDirectory=strInitialDirectory; + owner(parentWindow); + instance(parentWindow.processInstance()); + filter("..;."); + filterPattern("..;."); + fileName(""); + fileTitle(""); + initialDirectory(strCurrentDirectory); + title(titleString); + creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST|OpenDialog::ENABLEHOOK); + OpenDialog::hookProc((LPOFNHOOKPROC)getHookAddress()); + mLastFolderChange=String(""); + if(!getOpenFileName())return false; + strDirectory=mLastFolderChange; + return true; +} + +OpenDirectory::OpenDirectory(const OpenDirectory &someOpenDirectory) +{ // private implementation + *this=someOpenDirectory; +} + +OpenDirectory &OpenDirectory::operator=(const OpenDirectory &/*someOpenDirectory*/) +{ // private implementation + return *this; +} + +UINT OpenDirectory::hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam) +{ + UINT returnCode(false); + switch(uiMsg) + { + case WM_NOTIFY : + { + LPOFNOTIFY pNotify=(LPOFNOTIFY)lParam; + switch(pNotify->hdr.code) + { + case CDN_INITDONE : + ::EnableWindow(::GetDlgItem(getParent(),FileNameEditControlID),false); + returnCode=handleInitDone(); + break; + case CDN_SELCHANGE : + returnCode=handleSelChange(); + break; + case CDN_FOLDERCHANGE : + returnCode=handleFolderChange(); + break; + case CDN_SHAREVIOLATION : + returnCode=handleShareViolation(); + break; + case CDN_HELP : + returnCode=handleHelp(); + break; + case CDN_FILEOK : + returnCode=handleFileOk(); + break; + case CDN_TYPECHANGE : + returnCode=handleTypeChange(); + break; + } + } + } + return returnCode; +} + +// helpers + +bool OpenDirectory::getPathFileName(String &strPathFileName) +{ + if(!getHandle())return false; + strPathFileName.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETFILEPATH,MaxString,(LPARAM)(LPSTR)strPathFileName); +} + +bool OpenDirectory::getFileName(String &strFileName) +{ + if(!getHandle())return false; + strFileName.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETSPEC,MaxString,(LPARAM)(LPSTR)strFileName); +} + +bool OpenDirectory::getFolderPath(String &strFolderPath) +{ + if(!getHandle())return false; + strFolderPath.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETFOLDERPATH,MaxString,(LPARAM)(LPSTR)strFolderPath); +} + +bool OpenDirectory::hideControl(UINT controlID) +{ + if(!getHandle())return false; + return ::SendMessage(getParent(),CDM_HIDECONTROL,controlID,0); +} + +bool OpenDirectory::setControlText(UINT controlID,const String &strControlText)const +{ + if(!getHandle())return false; + return ::SendMessage(getParent(),CDM_SETCONTROLTEXT,controlID,(LPARAM)(LPSTR)(String&)strControlText); +} + +bool OpenDirectory::getControlText(UINT controlID,String &strControlText)const +{ + if(!getHandle())return false; + strControlText.reserve(MaxString); + return ::SendMessage(getParent(),WM_GETTEXT,MaxString,(LPARAM)(char*)strControlText); +} + +bool OpenDirectory::setDefaultExtension(const String &strDefaultExtension) +{ + if(!getHandle()||strDefaultExtension.isNull())return false; + return ::SendMessage(getParent(),CDM_SETDEFEXT,0,(LPARAM)(LPSTR)(String&)strDefaultExtension); +} + +// virtuals + +UINT OpenDirectory::handleInitDone(void) +{ + return false; +} + +UINT OpenDirectory::handleSelChange(void) +{ + String strFolderPath; + + getFolderPath(strFolderPath); + setControlText(FileNameEditControlID,strFolderPath); + return false; +} + +UINT OpenDirectory::handleFolderChange(void) +{ + String strFolderPath; + + getFolderPath(strFolderPath); + if(strFolderPath==mLastFolderChange) + { + setControlText(FileNameEditControlID,strFolderPath); + ::EndDialog(getParent(),TRUE); + } + else + { + mLastFolderChange=strFolderPath; + setControlText(FileNameEditControlID,strFolderPath); + } + return false; +} + +UINT OpenDirectory::handleShareViolation(void) +{ + return false; +} + +UINT OpenDirectory::handleFileOk(void) +{ + return false; +} + +UINT OpenDirectory::handleHelp(void) +{ + return false; +} + +UINT OpenDirectory::handleTypeChange(void) +{ + return false; +} diff --git a/nntp/OPENDIR.HPP b/nntp/OPENDIR.HPP new file mode 100644 index 0000000..5658e6e --- /dev/null +++ b/nntp/OPENDIR.HPP @@ -0,0 +1,42 @@ +#ifndef _NNTP_OPENDIRECTORY_HPP_ +#define _NNTP_OPENDIRECTORY_HPP_ +#ifndef _COMMON_OPENDIALOG_HPP_ +#include +#endif +#ifndef _HOOKPROC_OFNHOOK_HPP_ +#include +#endif + +class OpenDirectory : private OpenDialog, private OFNHook +{ +public: + OpenDirectory(void); + virtual ~OpenDirectory(); + bool getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory); +protected: + virtual UINT hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam); + virtual UINT handleInitDone(void); + virtual UINT handleSelChange(void); + virtual UINT handleFolderChange(void); + virtual UINT handleShareViolation(void); + virtual UINT handleFileOk(void); + virtual UINT handleHelp(void); + virtual UINT handleTypeChange(void); + + bool getPathFileName(String &strPathFileName); + bool getFileName(String &strFileName); + bool getFolderPath(String &strFolderPath); + bool hideControl(UINT controlID); + bool setDefaultExtension(const String &strDefaultExtension); + bool getControlText(UINT controlID,String &strControlText)const; + bool setControlText(UINT controlID,const String &strControlText)const; +private: + enum{FileNameEditControlID=0x480}; + enum{MaxString=256}; + OpenDirectory(const OpenDirectory &someOpenDirectory); + OpenDirectory &operator=(const OpenDirectory &someOpenDirectory); + + String mLastFolderChange; +}; +#endif + diff --git a/nntp/OPTNSDLG.CPP b/nntp/OPTNSDLG.CPP new file mode 100644 index 0000000..e32e5fc --- /dev/null +++ b/nntp/OPTNSDLG.CPP @@ -0,0 +1,93 @@ +#include +#include +#include +#include + +WORD OptionsDialog::performDialog(void) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"GenOptions",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType OptionsDialog::initDialogHandler(CallbackData &someCallbackData) +{ + setOptions(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType OptionsDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(handleApply()) + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(FALSE); + break; + case DaysPrior : + handleDaysPrior(someCallbackData); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void OptionsDialog::handleDaysPrior(CallbackData &someCallbackData) +{ + String priorDays; + + if(EN_KILLFOCUS!=HIWORD(someCallbackData.wParam()))return; + getText(DaysPrior,priorDays); + setOptions(::atoi(priorDays)); +} + +void OptionsDialog::setOptions(WORD priorDays)const +{ + SystemTime systemTime; + String strPriorDays; + + systemTime.daysAdd360(-((short)priorDays)); + ::sprintf(strPriorDays,"%d",priorDays); + SystemTime postDateTime(systemTime.year(),systemTime.month(),systemTime.day(),0,0,0); + setText(DaysPrior,strPriorDays); + setText(PostDate,postDateTime.toString()); +} + +void OptionsDialog::setOptions(void)const +{ + OptionsReg optionsReg; + setOptions((WORD)optionsReg.priorDays()); + setText(NewsDir,optionsReg.newsDir()); +} + +BOOL OptionsDialog::handleApply(void)const +{ + OptionsReg optionsReg; + String priorDays; + String strNewsDirectory; + String strCurrentDirectory; + DiskInfo diskInfo; + + getText(DaysPrior,priorDays); + optionsReg.priorDays(::atoi((LPSTR)priorDays)); + getText(NewsDir,strNewsDirectory); + if(strNewsDirectory.isNull()){::MessageBox(*this,(LPSTR)"Root directory cannot be null.",(LPSTR)"NewsCrawler",MB_OK);return FALSE;} + diskInfo.getCurrentDirectory(strCurrentDirectory); + if(!diskInfo.setCurrentDirectory(strNewsDirectory)) + { + if(IDOK==::MessageBox(*this,(LPSTR)"Directory does not exist, create?","NewsCrawler",MB_OKCANCEL)) + { + if(!diskInfo.createDirectory(strNewsDirectory)) + { + ::MessageBox(*this,(LPSTR)"Create directory!","NewsCrawler",MB_OK); + return FALSE; + } + } + else return FALSE; + } + optionsReg.newsDir(strNewsDirectory); + diskInfo.setCurrentDirectory(strCurrentDirectory); + return TRUE; +} + diff --git a/nntp/OPTNSDLG.HPP b/nntp/OPTNSDLG.HPP new file mode 100644 index 0000000..f2cade1 --- /dev/null +++ b/nntp/OPTNSDLG.HPP @@ -0,0 +1,68 @@ +#ifndef _NNTP_OPTIONSDLG_HPP_ +#define _NNTP_OPTIONSDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif + +class String; +class SystemTime; + +class OptionsDialog : private DWindow +{ +public: + OptionsDialog(const GUIWindow &parentWindow); + virtual ~OptionsDialog(); + WORD performDialog(void); +private: + enum{DaysPrior=GENOPT_DAYSPRIOR,PostDate=GENOPT_POSTDATE,NewsDir=GENOPT_NEWSDIR,Browse=GENOPT_BROWSE}; + OptionsDialog(const OptionsDialog &someOptionsDialog); + OptionsDialog &operator=(const OptionsDialog &someOptionsDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void handleDaysPrior(CallbackData &someCallbackData); + void setOptions(void)const; + void setOptions(WORD priorDays)const; + BOOL handleApply(void)const; + + Callback mInitDialogHandler; + Callback mCommandHandler; + HWND mhParent; +}; + +inline +OptionsDialog::OptionsDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&OptionsDialog::initDialogHandler); + mCommandHandler.setCallback(this,&OptionsDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +OptionsDialog::OptionsDialog(const OptionsDialog &someOptionsDialog) +: mhParent(someOptionsDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&OptionsDialog::initDialogHandler); + mCommandHandler.setCallback(this,&OptionsDialog::commandHandler); +} + +inline +OptionsDialog::~OptionsDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +OptionsDialog &OptionsDialog::operator=(const OptionsDialog &/*someOptionsDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/nntp/OPTNSREG.CPP b/nntp/OPTNSREG.CPP new file mode 100644 index 0000000..bfdde91 --- /dev/null +++ b/nntp/OPTNSREG.CPP @@ -0,0 +1,4 @@ +#include + + + diff --git a/nntp/OPTNSREG.HPP b/nntp/OPTNSREG.HPP new file mode 100644 index 0000000..f814022 --- /dev/null +++ b/nntp/OPTNSREG.HPP @@ -0,0 +1,166 @@ +#ifndef _NNTP_OPTIONSREG_HPP_ +#define _NNTP_OPTIONSREG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif +#ifndef _COMMON_DISKINFO_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif + +class OptionsReg +{ +public: + OptionsReg(void); + OptionsReg(const OptionsReg &someOptionsReg); + virtual ~OptionsReg(); + OptionsReg &operator=(const OptionsReg &someOptionsReg); + DWORD priorDays(void)const; + void priorDays(DWORD priorDays); + const String &serverName(void)const; + void serverName(const String &hostName); + const String &userName(void)const; + void userName(const String &userName); + const String &password(void)const; + void password(const String &password); + const String &newsDir(void)const; + void newsDir(const String &newsDirectory); +private: + RegKey mRegKey; + DWORD mPriorDays; + String mServerName; + String mUserName; + String mPassword; + String mNewsDir; + String mServerKeyServerName; + String mUserNameKeyUserName; + String mPasswordKeyPassword; + String mOptionsKeyNewsDir; + String mOptionsKeyPriorDays; + String mOptionsKeyName; +}; + +inline +OptionsReg::OptionsReg(void) +: mPriorDays(0), mRegKey(RegKey::CurrentUser), mOptionsKeyName(STRING_OPTIONSKEYNAME), + mOptionsKeyPriorDays(STRING_OPTIONSKEYPRIORDAYS), mServerKeyServerName(STRING_SERVERKEYNAME), + mOptionsKeyNewsDir(STRING_OPTIONSKEYNEWSDIR), mUserNameKeyUserName(STRING_USERNAMEKEY), + mPasswordKeyPassword(STRING_PASSWORDKEY) +{ + if(!mRegKey.openKey(mOptionsKeyName)) + { + SystemTime systemTime; + mRegKey.createKey(mOptionsKeyName,""); + mRegKey.openKey(mOptionsKeyName); + mRegKey.setValue(mOptionsKeyPriorDays,0L); + } + mRegKey.queryValue(mOptionsKeyNewsDir,mNewsDir); + if(mNewsDir.isNull()) + { + DiskInfo diskInfo; + diskInfo.getCurrentDirectory(mNewsDir); + mRegKey.setValue(mOptionsKeyNewsDir,mNewsDir); + } + mRegKey.queryValue(mOptionsKeyPriorDays,mPriorDays); + mRegKey.queryValue(mServerKeyServerName,mServerName); + mRegKey.queryValue(mUserNameKeyUserName,mUserName); + mRegKey.queryValue(mPasswordKeyPassword,mPassword); +} + +inline +OptionsReg::OptionsReg(const OptionsReg &someOptionsReg) +: mPriorDays(0), mRegKey(RegKey::CurrentUser), mOptionsKeyName(STRING_OPTIONSKEYNAME), + mOptionsKeyPriorDays(STRING_OPTIONSKEYPRIORDAYS), mServerKeyServerName(STRING_SERVERKEYNAME), + mOptionsKeyNewsDir(STRING_OPTIONSKEYNEWSDIR) +{ + *this=someOptionsReg; +} + +inline +OptionsReg::~OptionsReg() +{ +} + +inline +OptionsReg &OptionsReg::operator=(const OptionsReg &someOptionsReg) +{ + priorDays(someOptionsReg.priorDays()); + return *this; +} + +inline +DWORD OptionsReg::priorDays(void)const +{ + return mPriorDays; +} + +inline +void OptionsReg::priorDays(DWORD priorDays) +{ + mPriorDays=priorDays; + mRegKey.setValue(mOptionsKeyPriorDays,mPriorDays); +} + +inline +const String &OptionsReg::serverName(void)const +{ + return mServerName; +} + +inline +void OptionsReg::serverName(const String &serverName) +{ + mServerName=serverName; + mRegKey.setValue(mServerKeyServerName,mServerName); +} + +inline +const String &OptionsReg::userName(void)const +{ + return mUserName; +} + +inline +void OptionsReg::userName(const String &userName) +{ + mUserName=userName; + mRegKey.setValue(mUserNameKeyUserName,mUserName); +} + +inline +const String &OptionsReg::password(void)const +{ + return mPassword; +} + +inline +void OptionsReg::password(const String &password) +{ + mPassword=password; + mRegKey.setValue(mPasswordKeyPassword,password); +} + +inline +const String &OptionsReg::newsDir(void)const +{ + return mNewsDir; +} + +inline +void OptionsReg::newsDir(const String &newsDir) +{ + mNewsDir=newsDir; + mRegKey.setValue(mOptionsKeyNewsDir,mNewsDir); +} +#endif \ No newline at end of file diff --git a/nntp/PAINT.ICO b/nntp/PAINT.ICO new file mode 100644 index 0000000..6655e54 Binary files /dev/null and b/nntp/PAINT.ICO differ diff --git a/nntp/PSPBRWSE.JBF b/nntp/PSPBRWSE.JBF new file mode 100644 index 0000000..904a4fd Binary files /dev/null and b/nntp/PSPBRWSE.JBF differ diff --git a/nntp/RASDLG.CPP b/nntp/RASDLG.CPP new file mode 100644 index 0000000..6fac467 --- /dev/null +++ b/nntp/RASDLG.CPP @@ -0,0 +1,129 @@ +#include +#include + +WORD RasDialog::performDialog(void) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"RasDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType RasDialog::initDialogHandler(CallbackData &someCallbackData) +{ + queryRasSettings(); + queryRasEntryNames(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType RasDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(handleAccept())endDialog(TRUE); + break; + case IDCANCEL : + endDialog(TRUE); + break; + case RasEnable : + handleRasEnableEvent(); + case RasList : + handleRasListEvent(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void RasDialog::handleRasListEvent(void) +{ + LONG itemIndex; + String selString; + + itemIndex=sendMessage(RasList,LB_GETCURSEL,0,0L); + if(LB_ERR==itemIndex)return; + sendMessage(RasList,LB_GETTEXT,(WPARAM)itemIndex,(LPARAM)(LPCSTR)(LPSTR)selString); + setText(RasEntry,selString); +} + +void RasDialog::handleRasEnableEvent(void) +{ + if(sendMessage(RasEnable,BM_GETCHECK,0,0L)) + { + RasInterface rasInterface; + if(!rasInterface.isOkay()) + { + showRasError(); + sendMessage(RasEnable,BM_SETCHECK,FALSE,0L); + } + } + return; +} + +void RasDialog::queryRasSettings(void) +{ + if(!mRasOptions.rasUserName().isNull())setText(RasUserName,mRasOptions.rasUserName()); + if(!mRasOptions.rasPassword().isNull())setText(RasPassword,mRasOptions.rasPassword()); + if(!mRasOptions.rasEntryName().isNull())setText(RasEntry,mRasOptions.rasEntryName()); + setInt(RasMaxRetries,mRasOptions.rasMaxRetries()); + if(mRasOptions.rasState()) + { + if(!isRasOkay()) + { + sendMessage(RasEnable,BM_SETCHECK,FALSE,0L); + mRasOptions.rasState(FALSE); + showRasError(); + } + else sendMessage(RasEnable,BM_SETCHECK,TRUE,0L); + } +} + +WORD RasDialog::handleAccept(void) +{ + String rasUserName; + String rasPassword; + String rasEntryName; + int rasMaxRetries; + DWORD rasState; + + getText(RasUserName,rasUserName); + getText(RasPassword,rasPassword); + getText(RasEntry,rasEntryName); + getInt(RasMaxRetries,rasMaxRetries); + rasState=sendMessage(RasEnable,BM_GETCHECK,0,0L); + if(rasUserName.isNull()){::MessageBox(*this,(LPSTR)"UserName is a requred entry.",(LPSTR)"Error",MB_ICONHAND);return FALSE;} + if(rasPassword.isNull()){::MessageBox(*this,(LPSTR)"Password is a requred entry.",(LPSTR)"Error",MB_ICONHAND);return FALSE;} + mRasOptions.rasUserName(rasUserName); + mRasOptions.rasPassword(rasPassword); + mRasOptions.rasEntryName(rasEntryName); + mRasOptions.rasState(rasState); + mRasOptions.rasMaxRetries(rasMaxRetries); + return TRUE; +} + +void RasDialog::queryRasEntryNames(void) +{ + RasInterface rasInterface; + Block rasEntryNames; + + if(!rasInterface.isOkay())return; + sendMessage(RasList,WM_SETREDRAW,0,0L); + sendMessage(RasList,LB_RESETCONTENT,0,0L); + rasInterface.enumEntries(rasEntryNames); + if(!rasEntryNames.size())return; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif +#ifndef _NNTP_RASOPTIONS_HPP_ +#include +#endif + +class String; + +class RasDialog : private DWindow +{ +public: + RasDialog(const GUIWindow &parentWindow); + virtual ~RasDialog(); + WORD performDialog(void); +private: + enum{RasUserName=RAS_USERNAME,RasPassword=RAS_PASSWORD,RasEntry=RAS_ENTRY, + RasEnable=RAS_ENABLE,RasList=RAS_SERVERLIST,RasMaxRetries=RAS_MAXRETRIES}; + RasDialog(const RasDialog &someRasDialog); + RasDialog &operator=(const RasDialog &someRasDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + WORD handleAccept(void); + WORD isRasOkay(void)const; + void handleRasEnableEvent(void); + void handleRasListEvent(void); + void queryRasSettings(void); + void queryRasEntryNames(void); + void setCurrentEntry(const String &mRasEntryName); + void showRasError(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + RasOptions mRasOptions; + HWND mhParent; +}; + +inline +RasDialog::RasDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&RasDialog::initDialogHandler); + mCommandHandler.setCallback(this,&RasDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +RasDialog::RasDialog(const RasDialog &someRasDialog) +: mhParent(someRasDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&RasDialog::initDialogHandler); + mCommandHandler.setCallback(this,&RasDialog::commandHandler); +} + +inline +RasDialog::~RasDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +RasDialog &RasDialog::operator=(const RasDialog &/*someRasDialog*/) +{ // no implementation + return *this; +} + +inline +void RasDialog::showRasError(void) +{ + ::MessageBox(*this,(LPSTR)"Please make sure that Dial-Up Networking is properly installed.","Dial-Up Networking Error",MB_ICONHAND); +} +#endif \ No newline at end of file diff --git a/nntp/RASIFACE.CPP b/nntp/RASIFACE.CPP new file mode 100644 index 0000000..53285fb --- /dev/null +++ b/nntp/RASIFACE.CPP @@ -0,0 +1,39 @@ +#include + +WORD RasInterface::locateEntry(Block &rasEntryNames,RasEntryName &rasEntryName) +{ + for(short entryIndex=0;entryIndex entryNames; + + if(!mRemoteServerInterface.isOkay())return FALSE; + mRemoteServerInterface.rasEnumEntries(entryNames); + if(!entryNames.size())return FALSE; + rasEntryName.entryName(entryName); + if(!locateEntry(entryNames,rasEntryName))return FALSE; + rasDialParams.entryName(rasEntryName.entryName()); + rasDialParams.phoneNumber(""); + rasDialParams.callbackNumber(""); + rasDialParams.userName(userName); + rasDialParams.password(password); + rasDialParams.domain(""); + if(mRemoteServerInterface.rasDial(0,0,&((tagRASDIALPARAMSA&)rasDialParams),0,0,&mhRasConn)) + { + mRemoteServerInterface.rasHangUp(mhRasConn); + mhRasConn=0; + return FALSE; + } + mRemoteServerInterface.rasGetConnectStatus(mhRasConn,mRasConnectionStatus); + mRasConnectionState=mRasConnectionStatus.rasConnectionState(); + if(!mRasConnectionState.connected())return FALSE; + return TRUE; +} + + diff --git a/nntp/RASIFACE.HPP b/nntp/RASIFACE.HPP new file mode 100644 index 0000000..c7f3071 --- /dev/null +++ b/nntp/RASIFACE.HPP @@ -0,0 +1,58 @@ +#ifndef _NNTP_RASINTERFACE_HPP_ +#define _NNTP_RASINTERFACE_HPP_ +#ifndef _RASAPI_RASAPI_HPP_ +#include +#endif +#ifndef _RASAPI_REMOTEACCESSSERVER_HPP_ +#include +#endif +#ifndef _RASAPI_RASDIALPARAMS_HPP_ +#include +#endif + +class RasInterface +{ +public: + RasInterface(void); + virtual ~RasInterface(); + WORD login(const String &userName,const String &password,const String &entryName); + WORD enumEntries(Block &rasEntryNames); + WORD isOkay(void)const; +private: + WORD locateEntry(Block &rasEntryNames,RasEntryName &rasEntryName); + + RemoteAccessServer mRemoteServerInterface; + RasConnectionStatus mRasConnectionStatus; + RasConnectionState mRasConnectionState; + HRASCONN mhRasConn; +}; + +inline +RasInterface::RasInterface(void) +: mhRasConn(0) +{ +} + +inline +RasInterface::~RasInterface() +{ + if(!mhRasConn)return; + mRemoteServerInterface.rasHangUp(mhRasConn); + mhRasConn=0; +} + +inline +WORD RasInterface::enumEntries(Block &rasEntryNames) +{ + rasEntryNames.remove(); + if(!mRemoteServerInterface.isOkay())return FALSE; + mRemoteServerInterface.rasEnumEntries(rasEntryNames); + return (rasEntryNames.size()?TRUE:FALSE); +} + +inline +WORD RasInterface::isOkay(void)const +{ + return mRemoteServerInterface.isOkay(); +} +#endif diff --git a/nntp/RASOPTNS.HPP b/nntp/RASOPTNS.HPP new file mode 100644 index 0000000..34fce11 --- /dev/null +++ b/nntp/RASOPTNS.HPP @@ -0,0 +1,156 @@ +#ifndef _NNTP_RASOPTIONS_HPP_ +#define _NNTP_RASOPTIONS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif + +class RasOptions +{ +public: + RasOptions(void); + virtual ~RasOptions(); + String rasUserName(void)const; + void rasUserName(const String &rasUserName); + String rasPassword(void)const; + void rasPassword(const String &rasPassword); + String rasEntryName(void)const; + void rasEntryName(const String &rasEntryName); + DWORD rasState(void)const; + void rasState(DWORD rasState); + DWORD rasMaxRetries(void)const; + void rasMaxRetries(DWORD rasMaxRetries); +private: + RasOptions(const RasOptions &someRasOptions); + RasOptions &operator=(const RasOptions &someRasOptions); + String mRasUserName; + String mRasPassword; + String mRasEntryName; + DWORD mRasState; + DWORD mRasMaxRetries; + String mRasKeyUserName; + String mRasKeyPassword; + String mRasKeyEntryName; + String mRasKeyState; + String mRasKeyOptions; + String mRasKeyMaxRetries; + RegKey mRegKey; +}; + +inline +RasOptions::RasOptions(void) +: mRasKeyUserName(STRING_RASKEYUSERNAME), mRasKeyPassword(STRING_RASKEYPASSWORD), + mRasKeyEntryName(STRING_RASKEYENTRYNAME), mRasKeyState(STRING_RASKEYSTATE), + mRasKeyOptions(STRING_RASKEYOPTIONS), mRasKeyMaxRetries(STRING_RASKEYMAXRETRIES), + mRasState(0), mRegKey(RegKey::CurrentUser), mRasMaxRetries(0) +{ + if(!mRegKey.openKey(STRING_RASKEYOPTIONS)) + { + mRegKey.createKey(STRING_RASKEYOPTIONS,""); + mRegKey.openKey(STRING_RASKEYOPTIONS); + } + mRegKey.queryValue(mRasKeyUserName,mRasUserName); + mRegKey.queryValue(mRasKeyPassword,mRasPassword); + mRegKey.queryValue(mRasKeyState,mRasState); + mRegKey.queryValue(mRasKeyEntryName,mRasEntryName); + mRegKey.queryValue(mRasKeyMaxRetries,mRasMaxRetries); +} + +inline +RasOptions::RasOptions(const RasOptions &/*someRasOptions*/) +: mRasKeyUserName(STRING_RASKEYUSERNAME), mRasKeyPassword(STRING_RASKEYPASSWORD), + mRasKeyEntryName(STRING_RASKEYENTRYNAME), mRasKeyState(STRING_RASKEYSTATE), + mRasKeyOptions(STRING_RASKEYOPTIONS), mRasKeyMaxRetries(STRING_RASKEYMAXRETRIES), + mRasState(0), mRegKey(RegKey::CurrentUser) +{ // no implementation +} + + +inline +RasOptions::~RasOptions() +{ +} + + +inline +RasOptions &RasOptions::operator=(const RasOptions &/*someRasOptions*/) +{ // no implementation + return *this; +} + +inline +String RasOptions::rasUserName(void)const +{ + return mRasUserName; +} + +inline +void RasOptions::rasUserName(const String &rasUserName) +{ + if(rasUserName.isNull())return; + mRasUserName=rasUserName; + mRegKey.setValue(mRasKeyUserName,rasUserName); +} + +inline +String RasOptions::rasPassword(void)const +{ + return mRasPassword; +} + +inline +void RasOptions::rasPassword(const String &rasPassword) +{ + if(rasPassword.isNull())return; + mRasPassword=rasPassword; + mRegKey.setValue(mRasKeyPassword,mRasPassword); +} + +inline +String RasOptions::rasEntryName(void)const +{ + return mRasEntryName; +} + +inline +void RasOptions::rasEntryName(const String &rasEntryName) +{ + if(rasEntryName.isNull())return; + mRasEntryName=rasEntryName; + mRegKey.setValue(mRasKeyEntryName,mRasEntryName); +} + +inline +DWORD RasOptions::rasMaxRetries(void)const +{ + return mRasMaxRetries; +} + +inline +void RasOptions::rasMaxRetries(DWORD rasMaxRetries) +{ + mRasMaxRetries=rasMaxRetries; + mRegKey.setValue(mRasKeyMaxRetries,rasMaxRetries); +} + +inline +DWORD RasOptions::rasState(void)const +{ + return mRasState; +} + +inline +void RasOptions::rasState(DWORD rasState) +{ + mRasState=rasState; + mRegKey.setValue(mRasKeyState,mRasState); +} +#endif \ No newline at end of file diff --git a/nntp/RCVRLOG.CPP b/nntp/RCVRLOG.CPP new file mode 100644 index 0000000..016d789 --- /dev/null +++ b/nntp/RCVRLOG.CPP @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include + +RecoverLog::RecoverLog(void) +: mStrRecoverLogPostFix(STRING_RECOVERLOGPOSTFIX) +{ +} + +RecoverLog::RecoverLog(const RecoverLog &someRecoverLog) +: mStrRecoverLogPostFix(STRING_RECOVERLOGPOSTFIX) +{ // private implementation + *this=someRecoverLog; +} + +RecoverLog::~RecoverLog() +{ +} + +RecoverLog &RecoverLog::operator=(const RecoverLog &/*someRecoverLog*/) +{ // private implementation + return *this; +} + +BOOL RecoverLog::haveLog(const String &strNewsGroup) +{ + FileIO recoveryFile; + + if(strNewsGroup.isNull())return FALSE; + recoveryFile.open(strNewsGroup+strRecoverLogPostFix(),FileIO::GenericRead,FileIO::FileShareRead,FileIO::OpenExisting,FileIO::Archive); + return recoveryFile.isOkay(); +} + +DWORD RecoverLog::getEntries(const String &strNewsGroup,Block &msgIDs) +{ + FileIO recoveryFile; + MsgID msgID; + + msgIDs.remove(); + if(strNewsGroup.isNull())return FALSE; + recoveryFile.open(strNewsGroup+strRecoverLogPostFix(),FileIO::GenericRead,FileIO::FileShareRead,FileIO::OpenExisting,FileIO::Archive); + if(!recoveryFile.isOkay())return msgIDs.size(); + while(recoveryFile.readLine(msgID))msgIDs.insert(&msgID); + recoveryFile.close(); + return msgIDs.size(); +} + +BOOL RecoverLog::setEntries(const String &strNewsGroup,Block &msgIDs) +{ + FileIO recoveryFile; + + if(strNewsGroup.isNull()||!msgIDs.size())return FALSE; + recoveryFile.open(strNewsGroup+strRecoverLogPostFix(),FileIO::GenericWrite,FileIO::FileShareRead,FileIO::OpenAlways,FileIO::Archive); + if(!recoveryFile.isOkay())return FALSE; + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _NNTP_MESSAGEID_HPP_ +#include +#endif + +class RecoverLog +{ +public: + RecoverLog(void); + virtual ~RecoverLog(); + BOOL haveLog(const String &strNewGroup); + DWORD getEntries(const String &strNewsGroup,Block &msgIDs); + BOOL setEntries(const String &strNewsGroup,Block &msgIDs); + void removeLog(const String &strNewsGroup); +private: + RecoverLog(const RecoverLog &someRecoverLog); + RecoverLog &operator=(const RecoverLog &someRecoverLog); + const String &strRecoverLogPostFix(void)const; + + String mStrRecoverLogPostFix; +}; +#endif + diff --git a/nntp/RCa00152 b/nntp/RCa00152 new file mode 100644 index 0000000..0e2fc20 Binary files /dev/null and b/nntp/RCa00152 differ diff --git a/nntp/RESOURCE.H b/nntp/RESOURCE.H new file mode 100644 index 0000000..0f74379 --- /dev/null +++ b/nntp/RESOURCE.H @@ -0,0 +1,93 @@ +#ifndef _NNTP_RESOURCE_H_ +#define _NNTP_RESOURCE_H_ + +#define MW_LISTBOX 101 + +// string table defines +#define STRING_SERVERKEYNAME 1 +#define STRING_USERNAMEKEY 2 +#define STRING_PASSWORDKEY 3 +#define STRING_NEWSGROUPSKEYNAME 4 +#define STRING_NEWSGROUPSKEYVALUEPREFIX 5 +#define STRING_RASKEYOPTIONS 6 +#define STRING_RASKEYUSERNAME 7 +#define STRING_RASKEYPASSWORD 8 +#define STRING_RASKEYENTRYNAME 9 +#define STRING_RASKEYSTATE 10 +#define STRING_RASKEYMAXRETRIES 11 +#define STRING_NNTPKEYNAME 12 +#define STRING_NEWSGROUPSSHORTNAME 13 + +#define STRING_OPTIONSKEYNAME 50 +#define STRING_OPTIONSKEYPRIORDAYS 51 +#define STRING_OPTIONSKEYNEWSDIR 52 + +#define STRING_NNTP 500 +#define STRING_VERSION 501 +#define STRING_LOGVIEWCLASSNAME 502 +#define STRING_RECOVERLOGPOSTFIX 503 +#define STRING_MESSAGELOGPOSTFIX 504 +#define STRING_IMAGEVIEWCLASSNAME 505 +#define STRING_DOCUMENTVIEWCLASSNAME 506 +#define STRING_BROWSEVIEWCLASSNAME 507 + +// news groups dialog +#define NG_NEWSGROUPS 101 +#define NG_ADD 102 +#define NG_DELETE 103 + +// RasDialog +#define RAS_ENABLE 101 +#define RAS_MAXRETRIES 106 +#define RAS_USERNAME 102 +#define RAS_PASSWORD 103 +#define RAS_SERVERLIST 104 +#define RAS_ENTRY 105 + +// news group add/modify dialog +#define NG_NEWSGROUP 101 + +// server dialog +#define NS_SERVERNAME 1000 +#define NS_USERNAME 1001 +#define NS_PASSWORD 1002 + +// nntp menu items +#define NNTP_MENU 101 +#define NNTP_FILE_OPEN 40000 +#define NNTP_FILE_BROWSE 40001 +#define NNTP_FILE_EXIT 40002 + +#define NNTP_OPTIONS_NEWSSERVER 40003 + +#define NNTP_NEWSGROUPS_SUBSCRIBE 40004 + +#define NNTP_NEWS_GETNEWS 40005 +#define NNTP_NEWS_GETGROUPS 40006 +#define NNTP_NEWS_CANCEL 40007 + +#define NNTP_VIEW_LOG 40008 + +#define NNTP_OPTIONS_RASSETTINGS 40009 +#define NNTP_OPTIONS_GENERALOPTIONS 40010 +#define NNTP_OPTIONS_CLEARLOG 40011 + +#define NNTP_HELP_CONTENTS 40012 +#define NNTP_HELP_SEARCH 40013 +#define NNTP_REGISTRATION 40014 +#define NNTP_HELP_ABOUT 40015 + +#define NNTP_IMAGE_FITTOWINDOW 40016 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#define GENOPT_DAYSPRIOR 101 +#define GENOPT_POSTDATE 102 +#define GENOPT_NEWSDIR 103 +#define GENOPT_BROWSE 104 +#endif diff --git a/nntp/RESOURCE.HPP b/nntp/RESOURCE.HPP new file mode 100644 index 0000000..b01ed1c --- /dev/null +++ b/nntp/RESOURCE.HPP @@ -0,0 +1,4 @@ +#ifndef _NNTP_RESOURCE_HPP_ +#define _NNTP_RESOURCE_HPP_ +#include +#endif diff --git a/nntp/RESOURCE.~H b/nntp/RESOURCE.~H new file mode 100644 index 0000000..0b6eb30 --- /dev/null +++ b/nntp/RESOURCE.~H @@ -0,0 +1,81 @@ +#ifndef _NNTP_RESOURCE_H_ +#define _NNTP_RESOURCE_H_ + +#define MW_LISTBOX 101 + +// string table defines +#define STRING_SERVERKEYNAME 1 +#define STRING_NEWSGROUPSKEYNAME 2 +#define STRING_NEWSGROUPSKEYVALUEPREFIX 3 +#define STRING_RASKEYOPTIONS 4 +#define STRING_RASKEYUSERNAME 5 +#define STRING_RASKEYPASSWORD 6 +#define STRING_RASKEYENTRYNAME 7 +#define STRING_RASKEYSTATE 8 +#define STRING_RASKEYMAXRETRIES 9 + +#define STRING_OPTIONSKEYNAME 10 +#define STRING_OPTIONSKEYPRIORDAYS 11 +#define STRING_OPTIONSKEYNEWSDIR 20 + +#define STRING_NNTP 500 +#define STRING_VERSION 501 +#define STRING_LOGVIEWCLASSNAME 502 +#define STRING_RECOVERLOGPOSTFIX 503 +#define STRING_MESSAGELOGPOSTFIX 504 +#define STRING_IMAGEVIEWCLASSNAME 505 +#define STRING_DOCUMENTVIEWCLASSNAME 506 + +// news groups dialog +#define NG_NEWSGROUPS 101 +#define NG_ADD 102 +#define NG_DELETE 103 + +// RasDialog +#define RAS_ENABLE 101 +#define RAS_MAXRETRIES 106 +#define RAS_USERNAME 102 +#define RAS_PASSWORD 103 +#define RAS_SERVERLIST 104 +#define RAS_ENTRY 105 + +// news group add/modify dialog +#define NG_NEWSGROUP 101 + +// server dialog +#define NS_SERVERNAME 101 + +// nntp menu items +#define NNTP_MENU 101 +#define NNTP_FILE_OPEN 40000 +#define NNTP_FILE_EXIT 40001 + +#define NNTP_OPTIONS_NEWSSERVER 40002 + +#define NNTP_NEWSGROUPS_SUBSCRIBE 40003 + +#define NNTP_NEWS_GETNEWS 40005 +#define NNTP_NEWS_GETGROUPS 40006 +#define NNTP_NEWS_CANCEL 40007 + +#define NNTP_VIEW_LOG 40008 + +#define NNTP_OPTIONS_RASSETTINGS 40009 +#define NNTP_OPTIONS_GENERALOPTIONS 40010 +#define NNTP_OPTIONS_CLEARLOG 40011 + +#define NNTP_HELP_CONTENTS 40012 +#define NNTP_HELP_SEARCH 40013 +#define NNTP_REGISTRATION 40014 +#define NNTP_HELP_ABOUT 40015 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#define GENOPT_DAYSPRIOR 101 +#define GENOPT_POSTDATE 102 +#endif diff --git a/nntp/Release/NEWSSRC b/nntp/Release/NEWSSRC new file mode 100644 index 0000000..e69de29 diff --git a/nntp/Release/nntp.exe b/nntp/Release/nntp.exe new file mode 100644 index 0000000..d451e42 Binary files /dev/null and b/nntp/Release/nntp.exe differ diff --git a/nntp/Release/nntp.exp b/nntp/Release/nntp.exp new file mode 100644 index 0000000..fffbab1 Binary files /dev/null and b/nntp/Release/nntp.exp differ diff --git a/nntp/Release/nntp.lib b/nntp/Release/nntp.lib new file mode 100644 index 0000000..18cd874 Binary files /dev/null and b/nntp/Release/nntp.lib differ diff --git a/nntp/Release/nntp.res b/nntp/Release/nntp.res new file mode 100644 index 0000000..21a56c9 Binary files /dev/null and b/nntp/Release/nntp.res differ diff --git a/nntp/Release/vc60.idb b/nntp/Release/vc60.idb new file mode 100644 index 0000000..95fefbd Binary files /dev/null and b/nntp/Release/vc60.idb differ diff --git a/nntp/SCRAPS.TXT b/nntp/SCRAPS.TXT new file mode 100644 index 0000000..f30868e --- /dev/null +++ b/nntp/SCRAPS.TXT @@ -0,0 +1,1658 @@ +#if 0 +WORD NewsReg::queryGroups(Block &subscriberList) +{ + RegKey regKey(RegKey::CurrentUser); + String groupString; + String newsGroup; + DWORD groupNumber(1); + + subscriberList.remove(); + if(!regKey.openKey(mNewsGroupsKeyName))return FALSE; + while(TRUE) + { + ::sprintf(groupString,"%s%ld",(LPSTR)mNewsGroupsKeyValuePrefix,groupNumber++); + if(!regKey.queryValue(groupString,newsGroup))break; + subscriberList.insert(&newsGroup); + } + return (subscriberList.size()?TRUE:FALSE); +} +#endif +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + String hostName; + + killTimer(TimerID); + mlpEditWindow->setText(mWSASystem.description()); + mlpEditWindow->setText(mWSASystem.systemStatus()); + getHostName(hostName); + open(hostName); + mlpEditWindow->setFocus(); + if(!isConnected())return (CallbackData::ReturnType)FALSE; +// ListItems listItems("c:\\work\\nntp\\newssrc"); + Block articleText; + GroupItem groupItem; +// group(listItems[285].groupName(),groupItem); + group("alt.binaries.pictures.erotica.cheerleaders",groupItem); + article(NNTPClient::ByNumber,groupItem.firstArticle(),articleText); + message(articleText); +// if(isConnected())list(); + return (CallbackData::ReturnType)FALSE; +} + + + +WORD NNTPClient::article(SelectionType selectionType,DWORD selection,Block &articleText) +{ + String controlData; + String responseLine; + + if(!isConnected())return FALSE; + articleText.remove(); + controlData.reserve(String::MaxString); + ::sprintf(controlData,"%s %ld",(LPSTR)mNNTPCmds[Article],selection); + if(!putControlData(controlData,FALSE))return FALSE; +// if(!mNNTPControl.receive(responseLine))return FALSE; +// message(responseLine); + receiveStrings(articleText); + return TRUE; +} + + + + +// ******************* + + + + + + + +class MainWindow : public Window, private NNTPThread // private NNTPClient + + +// if(!isConnected())return; +// for(int itemIndex=0;itemIndex &articleText,SelectionType selectionType=ByNumber); + WORD body(void); + WORD head(void); + WORD help(void); + WORD iHave(void); + WORD last(void); + WORD newGroups(void); + WORD newNews(void); + WORD next(void); + WORD post(void); + WORD stat(void); + + + enum MsgID{MsgOpen,MsgIsConnected,MsgList,MsgQuit,MsgSlave,MsgGroup,MsgArticle,MsgBody, + MsgHead,MsgHelp,MsgIHave,MsgLast,MsgNewGroups,MsgNewNews,MsgNext,MsgPost,MsgStat,MsgShutDown}; + + + + + + void handleGroup(GroupItem *pGroupItem); + void handleList(void); + void handleList(ListItems *pListItems); + void handleShutDown(void); + void handleQuit(void); + void handleSlave(void); + void handleArticle(void); + void handleBody(void); + void handleHead(void); + void handleHelp(void); + void handleIHave(void); + void handleLast(void); + void handleNewGroups(void); + void handleNext(void); + void handlePost(void); + void handleStat(void); + + + + +inline +WORD NNTPThread::shutDown(void) +{ + ThreadMessage shutDownMessage(ThreadMessage::TM_USER,MsgShutDown,0L,ThreadMessage::PriorityHigh); + return sendMessage(shutDownMessage); +} + +inline +WORD NNTPThread::group(const GroupItem &groupItem) +{ + GroupItem *pGroupItem=new GroupItem(groupItem); + ThreadMessage groupMessage(ThreadMessage::TM_USER,MsgGroup,(LONG)pGroupItem); + return postMessage(groupMessage); +} + +inline +WORD NNTPThread::quit(void) +{ + ThreadMessage quitMessage(ThreadMessage::TM_USER,MsgPost,0L); + return postMessage(quitMessage); +} + +inline +WORD NNTPThread::slave(void) +{ + ThreadMessage slaveMessage(ThreadMessage::TM_USER,MsgSlave,0L); + return postMessage(slaveMessage); +} + +inline +WORD NNTPThread::article(DWORD selection,Block &articleText,SelectionType selectionType) +{ + ThreadMessage articleMessage(ThreadMessage::TM_USER,MsgArticle,0L); + return postMessage(articleMessage); +} + +inline +WORD NNTPThread::body(void) +{ + ThreadMessage bodyMessage(ThreadMessage::TM_USER,MsgBody,0L); + return postMessage(bodyMessage); +} + +inline +WORD NNTPThread::head(void) +{ + ThreadMessage headMessage(ThreadMessage::TM_USER,MsgHead,0L); + return postMessage(headMessage); +} + +inline +WORD NNTPThread::help(void) +{ + ThreadMessage helpMessage(ThreadMessage::TM_USER,MsgHelp,0L); + return postMessage(helpMessage); +} + +inline +WORD NNTPThread::iHave(void) +{ + ThreadMessage iHaveMessage(ThreadMessage::TM_USER,MsgIHave,0L); + return postMessage(iHaveMessage); +} + +inline +WORD NNTPThread::last(void) +{ + ThreadMessage lastMessage(ThreadMessage::TM_USER,MsgLast,0L); + return postMessage(lastMessage); +} + +inline +WORD NNTPThread::newGroups(void) +{ + ThreadMessage newGroupsMessage(ThreadMessage::TM_USER,MsgNewGroups,0L); + return postMessage(newGroupsMessage); +} + +inline +WORD NNTPThread::newNews(void) +{ + ThreadMessage newNewsMessage(ThreadMessage::TM_USER,MsgNewNews,0L); + return postMessage(newNewsMessage); +} + +inline +WORD NNTPThread::next(void) +{ + ThreadMessage nextMessage(ThreadMessage::TM_USER,MsgNext,0L); + return postMessage(nextMessage); +} + +inline +WORD NNTPThread::post(void) +{ + ThreadMessage postitMessage(ThreadMessage::TM_USER,MsgPost,0L); + return postMessage(postitMessage); +} + +inline +WORD NNTPThread::stat(void) +{ + ThreadMessage statMessage(ThreadMessage::TM_USER,MsgStat,0L); + return postMessage(statMessage); +} + + + + + case MsgGroup : + handleGroup((GroupItem*)userData); + break; + case MsgIsConnected : + break; + case MsgShutDown : + handleShutDown(); + break; + case MsgList : + handleList(); + break; + case MsgQuit : + handleQuit(); + break; + case MsgSlave : + handleSlave(); + break; + case MsgArticle : + handleArticle(); + break; + case MsgBody : + handleBody(); + break; + case MsgHead : + handleHead(); + break; + case MsgHelp : + handleHelp(); + break; + case MsgIHave : + handleIHave(); + break; + case MsgLast : + handleLast(); + break; + case MsgNewGroups : + handleNewGroups(); + break; + case MsgNext : + handleNext(); + break; + case MsgPost : + handlePost(); + break; + case MsgStat : + handleStat(); + break; + + +void NNTPThread::handleGroup(GroupItem *pGroupItem) +{ + ThreadMessage groupMessage; + ::OutputDebugString("[NNTPThread::handleGroup]\n"); + if(isConnected())NNTPClient::group(*pGroupItem); + else {delete pGroupItem;pGroupItem=0;} + groupMessage.userDataOne((LONG)pGroupItem); + callHandler(MsgGroup,groupMessage); + if(pGroupItem)delete pGroupItem; +} + +void NNTPThread::handleShutDown(void) +{ + ThreadMessage shutDownMessage; + ::OutputDebugString("[NNTPThread::handleShutDown]\n"); + if(!NNTPClient::isConnected())return; + closeSocket(); + callHandler(MsgShutDown,shutDownMessage); +} + +void NNTPThread::handleList(void) +{ + ThreadMessage listMessage; + ::OutputDebugString("[NNTPThread::handleList(void)]\n"); + callHandler(MsgList,listMessage); +} + +void NNTPThread::handleList(ListItems *pListItems) +{ + ThreadMessage listMessage; + ::OutputDebugString("[NNTPThread::handleList(ListItems *pListItems)\n"); + callHandler(MsgList,listMessage); +} + +void NNTPThread::handleQuit(void) +{ + ThreadMessage quitMessage; + ::OutputDebugString("[NNTPThread::handleQuit\n"); + callHandler(MsgQuit,quitMessage); +} + +void NNTPThread::handleSlave(void) +{ + ThreadMessage slaveMessage; + ::OutputDebugString("[NNTPThread::handleSlave]\n"); + callHandler(MsgSlave,slaveMessage); +} + +void NNTPThread::handleArticle(void) +{ + ThreadMessage articleMessage; + ::OutputDebugString("[NNTPThread::handleArticle]\n"); + callHandler(MsgArticle,articleMessage); +} + +void NNTPThread::handleBody(void) +{ + ThreadMessage bodyMessage; + ::OutputDebugString("[NNTPThread::handleBody]\n"); + callHandler(MsgBody,bodyMessage); +} + +void NNTPThread::handleHead(void) +{ + ThreadMessage headMessage; + ::OutputDebugString("[NNTPThread::handleHead]\n"); + callHandler(MsgHead,headMessage); +} + +void NNTPThread::handleHelp(void) +{ + ThreadMessage helpMessage; + ::OutputDebugString("[NNTPThread::handleHelp]\n"); + callHandler(MsgHelp,helpMessage); +} + +void NNTPThread::handleIHave(void) +{ + ThreadMessage iHaveMessage; + ::OutputDebugString("[NNTPThread::handleIHave]\n"); + callHandler(MsgIHave,iHaveMessage); +} + +void NNTPThread::handleLast(void) +{ + ThreadMessage lastMessage; + ::OutputDebugString("[NNTPThread::handleLast]\n"); + callHandler(MsgLast,lastMessage); +} + +void NNTPThread::handleNewGroups(void) +{ + ThreadMessage newGroupsMessage; + ::OutputDebugString("[NNTPThread::handleNewGroups]\n"); + callHandler(MsgNewGroups,newGroupsMessage); +} + +void NNTPThread::handleNext(void) +{ + ThreadMessage nextMessage; + ::OutputDebugString("[NNTPThread::handleNext]\n"); + callHandler(MsgNext,nextMessage); +} + +void NNTPThread::handlePost(void) +{ + ThreadMessage postingMessage; + ::OutputDebugString("[NNTPThread::handlePost]\n"); + callHandler(MsgPost,postingMessage); +} + +void NNTPThread::handleStat(void) +{ + ThreadMessage statMessage; + ::OutputDebugString("[NNTPThread::handleStat]\n"); + callHandler(MsgStat,statMessage); +} + + +//inline +//WORD NNTPThread::isConnected(void) +//{ +// return NNTPClient::isConnected(); +//} + + + + + +#if 0 +WORD NNTPClient::article(DWORD selection,Block &articleText,SelectionType selectionType) +{ + String controlData; + String responseLine; + DWORD responseLines(0); + + if(!isConnected())return FALSE; + articleText.remove(); + controlData.reserve(String::MaxString); + if(ByNumber==selectionType)::sprintf(controlData,"%s %ld",(LPSTR)mNNTPCmds[Article],selection); + else ::sprintf(controlData,"<%s> %ld",(LPSTR)mNNTPCmds[Article],selection); + if(!putControlData(controlData,FALSE))return FALSE; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + if(isInResponse(responseString,mNackArticleResponseStrings))break; + if(isInResponse(responseString,mAckArticleResponseStrings))continue; + } + articleText.insert(&responseLine); + } + return (articleText.size()?TRUE:FALSE); +} +#endif + + + +// WORD article(DWORD selection,Block &articleText,SelectionType selectionType=ByNumber); +// WORD article(DWORD msgNumber,Block &articleText); +// WORD article(const MsgID &msgID,Block &articleText); + + + +// WORD body(DWORD selection,Block &bodyText,SelectionType selectionType); +// WORD head(DWORD selection,Block &headText,SelectionType selectionType); + + +#if 0 +WORD NNTPClient::head(DWORD selection,Block &headText,SelectionType selectionType) +{ + String controlData; + String responseLine; + DWORD responseLines(0); + + if(!isConnected())return FALSE; + headText.remove(); + controlData.reserve(String::MaxString); + if(ByNumber==selectionType)::sprintf(controlData,"%s %ld",(LPSTR)mNNTPCmds[Head],selection); + else ::sprintf(controlData,"<%s> %ld",(LPSTR)mNNTPCmds[Head],selection); + if(!putControlData(controlData,FALSE))return FALSE; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine&&1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + if(isInResponse(responseString,mNackArticleResponseStrings))break; + if(isInResponse(responseString,mAckArticleResponseStrings))continue; + } + headText.insert(&responseLine); + } + return (headText.size()?TRUE:FALSE); +} +#endif +#if 0 +WORD MainWindow::getNewNews(void) +{ + Block messageIDStrings; + Block newsGroups; + Block distributionGroups; + SystemTime systemTime; + WORD isGMT(FALSE); + + systemTime.hour(0); + systemTime.minute(0); + systemTime.second(0); + newsGroups.insert(&String("alt.sounds")); + newsGroups.insert(&String("alt.sounds.samples")); + distributionGroups.insert(&String("rec.music")); + distributionGroups.insert(&String("rec.wav")); + isGMT=TRUE; + newNews(newsGroups,distributionGroups,messageIDStrings,systemTime,isGMT); + return FALSE; +} +#endif +WORD MainWindow::saveNews(const String &newsGroup) +{ + Block articleText; + GroupItem groupItem; + DiskInfo diskInfo; + WORD okResult; + + diskInfo.createDirectory(newsGroup); + diskInfo.setCurrentDirectory(newsGroup); + groupItem.groupName(newsGroup); + group(groupItem); + for(int articleNumber=groupItem.firstArticle();articleNumber<=groupItem.lastArticle();articleNumber++) + { + if(!isConnected())return FALSE; + String articleName; + ::sprintf(articleName,"n%ld.new",articleNumber++); + message(articleName); + okResult=article(articleNumber,articleText); + if(okResult) + { + FileHandle saveFile(articleName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + for(int itemIndex=0;itemIndexisOkay()){delete mlpRasInterface;mlpRasInterface=0;return FALSE;} + if(!mlpRasInterface->login(rasUserName,rasPassword,rasEntryName)){delete mlpRasInterface;mlpRasInterface=0;return FALSE;} + return TRUE; +#endif + + + + + + + sendMessage(NewsGroupList,WM_SETREDRAW,FALSE,0L); + sendMessage(NewsGroupList,LB_RESETCONTENT,0,0L); + for(int itemIndex=0;itemIndex &subscriberList) +{ + RegKey regKey(RegKey::CurrentUser); + String groupString; + String newsGroup; + String nameValue; + DWORD groupIndex(0); + + subscriberList.remove(); + if(!regKey.openKey(mNewsGroupsKeyName))return FALSE; + while(regKey.enumValue(groupIndex++,nameValue,newsGroup)) + subscriberList.insert(&newsGroup); + return (subscriberList.size()?TRUE:FALSE); +} +#endif + + + + +//inline +//void NNTPThread::insertOpenHandler(ThreadCallbackPointer pThreadCallback) +//{ +// mEventHandler=ThreadCallbackPointer(pThreadCallback); +//} + +//inline +//void NNTPThread::removeOpenHandler(void) +//{ +// mEventHandler=ThreadCallbackPointer(); +//} + + + + +// void insertOpenHandler(ThreadCallbackPointer pThreadCallback); +// void removeOpenHandler(void); + + + +// ThreadCallbackPointer mEventHandler; + + + + if(systemTime.month()>=optionsReg.month()&& + systemTime.day()>=optionsReg.day()&& + systemTime.year()>=optionsReg.year()&& + systemTime.hour()>=optionsReg.hour()&& + systemTime.minute()>=optionsReg.minute())break; + + + +#if 0 + // makeTimeDateString(postDate,systemTime); +// setText(PostDate,postDate); + SystemTime systemTime; + SystemTime someTime(1997,12,1,5,0,0); + String timeDateString((String)someTime); + timeDateString+="\n"; + ::OutputDebugString(timeDateString); +// message((String)someTime); +#endif + + +void OptionsDialog::makeTimeDateString(String &timeDateString,const SystemTime &systemTime)const +{ + timeDateString.reserve(String::MaxString); + ::sprintf(timeDateString,"%02d%02d%02d %02d%02d%02d", + systemTime.year()>2000?2000-systemTime.year():systemTime.year()-1900, + systemTime.month(), + systemTime.day(), + systemTime.hour(), + systemTime.minute(), + systemTime.second()); +} + + void makeTimeDateString(String &timeDateString,const SystemTime &systemTime)const; + + +// SystemTime postDateTime(systemTime.year(),systemTime.month(),systemTime.day(), +// systemTime.hour(),systemTime.minute(),systemTime.second()); + + +#if 0 +void MainWindow::handleRetrieveNews(void) +{ + String hostName; + + if(!getSubscriberList(mSubscriberList)){message("No newsgroups in subscriber list, nothing to do!");return;} + mlpEditWindow->setFocus(); + getHostName(hostName); + mCancelWait=FALSE; + open(hostName); +} +#endif + + + + addRootNode(FolderTree::FolderClosed,pathDir,makeItemID(RootNode,1)); + pathFind.dirList(pathDir,dirList); + if(dirList.size()<=2)return FALSE; + if(!makeFileName(dirList[0],entryName))return FALSE; + if(entryName!=String("."))return FALSE; + if(!makeFileName(dirList[1],entryName))return FALSE; + if(entryName!=String(".."))return FALSE; + for(int itemIndex=2;itemIndex dirEntries; + getList(pathEntryName,dirEntries,FileList); + { + for(int itemIndex=0;itemIndex::Delete); + controlRect.top(controlRect.bottom()+1); + controlRect.bottom(height()/2); + mEditWindow=new EditWindow(&((Window&)*this),controlRect); + mEditWindow->disposition(SmartPointer::Delete); + KeyControl keyControl; + keyControl.canScroll(TRUE); + mEditWindow->setKeyControl(keyControl); + mEditWindow->setLineHandler(&mLineHandler); + mDirTree->showDirList("e:\\download"); +#endif + + +WORD DirTree::showDirList(const String &pathDir,Block &dirEntries,NodeType nodeType) +{ + String entryName; + +// remove(); + if(!dirEntries.size())return FALSE; + if(DirNode==nodeType)addRootNode(FolderTree::FolderClosed,pathDir,makeItemID(RootNode,1)); + for(int itemIndex=0;itemIndex*)mEditMonitor))->setFocus(); + getHostName(hostName); + mCancelWait=FALSE; + open(hostName); +} + + +#if 0 +DWORD MainWindow::preOpenHandler(ThreadMessage &/*someThreadMessage*/) +{ + if(!waitForScheduledEvent())return TRUE; + if(!dialHost()) + { + message("Could not contact host."); + return TRUE; + } + return FALSE; +} +#endif + + + + +WORD MainWindow::retrieveNews(const String &newsGroup,Block &filterList,FilterReg::FilterMode mode) +{ + Block messageIDStrings; + DiskInfo diskInfo; + DWORD pastDays; + String msgString; + WORD okResult; + + diskInfo.createDirectory(newsGroup); + diskInfo.setCurrentDirectory(newsGroup); + message(String("Retrieving message headers for ")+newsGroup); + newNews(newsGroup,messageIDStrings,priorDays()); + ::sprintf(msgString,"%s has %ld articles.",(LPSTR)newsGroup,messageIDStrings.size()); + message(msgString); + for(int itemIndex=0;itemIndex articleText; + Block headerLines; + String pathFileName; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=messageIDStrings[itemIndex]; + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + if(mMasterList.searchItem(msgID)) + { + message(String("Already have ")+msgID); + continue; + } + mMasterList.insert(msgID); + okResult=head(msgID,headerLines); + Header articleHeader(headerLines); + if(isInFilter(articleHeader,filterList,mode)) + { + message(String("Skipping ")+msgID+String(" because article source is being filtered.")); + continue; + } + okResult=article(msgID,articleText); + if(okResult)saveBlock(pathFileName,articleText); + } + diskInfo.setCurrentDirectory(".."); + return TRUE; +} + + +WORD MainWindow::isInFilter(Header &articleHeader,Block &filterList,FilterReg::FilterMode mode) +{ + for(int itemIndex=0;itemIndex messageIDStrings; + DiskInfo diskInfo; + DWORD pastDays; + String msgString; + WORD okResult; + + diskInfo.createDirectory(newsGroup); + diskInfo.setCurrentDirectory(newsGroup); + message(String("Retrieving message headers for ")+newsGroup); + + simulateNewNews(newsGroup,messageIDStrings,priorDays()); + ::sprintf(msgString,"%s has %ld articles.",(LPSTR)newsGroup,messageIDStrings.size()); + message(msgString); + messageLog.setLog("MSGLOG.001"); + for(int itemIndex=0;itemIndex articleText; + String pathFileName; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=messageIDStrings[itemIndex]; + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + if(mMasterList.searchItem(msgID)) + { + message(String("Already have ")+msgID); + continue; + } + mMasterList.insert(msgID); + okResult=article(msgID,articleText); + if(okResult)saveBlock(pathFileName,articleText); + } + diskInfo.setCurrentDirectory(".."); + return TRUE; +} +#endif + + + +WORD MainWindow::retrieveNews(const String &newsGroup) +{ + Block messageIDStrings; + DiskInfo diskInfo; + GenDecode genericDecoder; + DWORD pastDays; + String msgString; + WORD okResult; + + diskInfo.createDirectory(newsGroup); + diskInfo.setCurrentDirectory(newsGroup); + message(String("Retrieving message headers for ")+newsGroup); + newNews(newsGroup,messageIDStrings,priorDays()); + ::sprintf(msgString,"%s has %ld articles.",(LPSTR)newsGroup,messageIDStrings.size()); + message(msgString); + for(int itemIndex=0;itemIndex articleText; + String pathFileName; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=messageIDStrings[itemIndex]; + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + if(mMasterList.searchItem(msgID)) + { + message(String("Already have ")+msgID); + continue; + } + mMasterList.insert(msgID); + okResult=article(msgID,articleText); + if(okResult) + { + saveBlock(pathFileName,articleText); + if(genericDecoder.decode(pathFileName))::unlink(pathFileName); + } + } + diskInfo.setCurrentDirectory(".."); + return TRUE; +} + + +WORD MainWindow::retrieveNewsSim(const String &newsGroup) +{ + MessageLog messageLog; + Block messageIDStrings; + GenDecode genericDecoder; + DiskInfo diskInfo; + DWORD pastDays; + String msgString; + WORD okResult; + + diskInfo.createDirectory(newsGroup); + diskInfo.setCurrentDirectory(newsGroup); + message(String("Retrieving message headers for ")+newsGroup); + String strRecover(newsGroup); + String strMsgLog(newsGroup); + strRecover+=".001"; + strMsgLog+=".002"; + FileIO msgIDFile; + msgIDFile.open(strRecover,FileIO::GenericRead,FileIO::FileShareRead,FileIO::OpenExisting,FileIO::Archive); + if(msgIDFile.isOkay()) + { + MsgID msgID; + message(String("using recovery file.")); + while(msgIDFile.readLine(msgID))messageIDStrings.insert(&msgID); + msgIDFile.close(); + } + else + { + simulateNewNews(newsGroup,messageIDStrings,priorDays()); + FileIO msgIDFile; + msgIDFile.open(strRecover,FileIO::GenericWrite,FileIO::FileShareRead,FileIO::OpenAlways,FileIO::Archive); + for(int itemIndex=0;itemIndex articleText; + String pathFileName; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=messageIDStrings[itemIndex]; + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + if(messageLog.searchItem(msgID)){message(String("Already have ")+msgID);continue;} + messageLog.insert(msgID); + okResult=article(msgID,articleText); + if(okResult) + { + saveBlock(pathFileName,articleText); + if(genericDecoder.decode(pathFileName))::unlink(pathFileName); + } + okResult=FALSE; + messageLog.flush(); + } + messageLog.close(); + diskInfo.setCurrentDirectory(".."); + return TRUE; +} + + + +//#include +//#include +//#include +// +//HINSTANCE Main::smhInstance=0; +//HINSTANCE Main::smhPrevInstance=0; +//int Main::smnCmdShow=0; +// +//int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +//{ +// Main::processInstance(hInstance); +// Main::previousProcessInstance(hPrevInstance); +// Main::cmdShow(nCmdShow); +// if(Main::previousProcessInstance()) +// { +// HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); +// if(!hWnd) +// { +// ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); +// return FALSE; +// } +// ::PostMessage(hWnd,WM_REACTIVATE,0,0L); +// return FALSE; +// } +// MainWindow applicationWindow; +// return ((GUIWindow&)applicationWindow).messageLoop(); +} + + + +void MainFrame::registerClass(void)const +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + + + + + messageLog.setLog(newsGroup); + for(int itemIndex=0;itemIndex articleText; + String pathFileName; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=messageIDStrings[itemIndex]; + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + if(messageLog.searchItem(msgID)){message(String("Already have ")+msgID);continue;} + messageLog.insert(msgID); + okResult=article(msgID,articleText); + if(okResult) + { + saveBlock(pathFileName,articleText); + if(genericDecoder.decode(pathFileName))::unlink(pathFileName); + } + okResult=FALSE; + messageLog.flush(); + } + messageLog.close(); + + + +// messageLog.setLog(newsGroup); +// for(int itemIndex=0;itemIndex articleText; +// String pathFileName; +// MsgID msgID; +// +// if(!isConnected())return FALSE; +// msgID=messageIDStrings[itemIndex]; +// ::sprintf(pathFileName,"n%ld.new",itemIndex); +// message(newsGroup+String("(")+msgID+String(")")); +// if(messageLog.searchItem(msgID)){message(String("Already have ")+msgID);continue;} +// messageLog.insert(msgID); +// okResult=article(msgID,articleText); +// if(okResult) +// { +// saveBlock(pathFileName,articleText); +// if(genericDecoder.decode(pathFileName))::unlink(pathFileName); +// } +// okResult=FALSE; +// messageLog.flush(); +// } +// messageLog.close(); + + + + +WORD MainFrame::retrieveNews(const String &newsGroup) +{ + RecoverLog recoverLog; + Block messageIDStrings; + DiskInfo diskInfo; + String msgString; + + diskInfo.createDirectory(newsGroup); + diskInfo.setCurrentDirectory(newsGroup); + message(String("Retrieving message headers for ")+newsGroup); + if(recoverLog.haveLog(newsGroup)) + { + message(String("using recovery file.")); + recoverLog.getEntries(newsGroup,messageIDStrings); + } + else + { + simulateNewNews(newsGroup,messageIDStrings,priorDays()); + recoverLog.setEntries(newsGroup,messageIDStrings); + } +// simulateNewNews(newsGroup,messageIDStrings,priorDays()); + ::sprintf(msgString,"%s has %ld articles.",(LPSTR)newsGroup,messageIDStrings.size()); + message(msgString); + getArticles(newsGroup,messageIDStrings); + diskInfo.setCurrentDirectory(".."); + return TRUE; +} + + +CallbackData::ReturnType ImageView::paintHandler(CallbackData &someCallbackData) +{ + CursorControl cursorControl; + + cursorControl.waitCursor(TRUE); + mMutex.requestMutex(); + if(!mJPGImage.isOkay()) + { + mMutex.releaseMutex(); + cursorControl.waitCursor(FALSE); + return (CallbackData::ReturnType)FALSE; + } + PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); + PureDevice &paintDevice=(PureDevice&)paintInfo; + + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(FALSE); + mJPGImage.draw(paintDevice,mScrollInfo.currScrollx(),mScrollInfo.currScrolly()); + } + if(mScrollInfo.scrollEvent()) + { + Rect paintRect(paintInfo.paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom(paintRect.bottom()-paintRect.top()); + mJPGImage.draw(paintDevice,,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } +// if(mJPGImage.width() &msgIDs) +{ + MessageLog messageLog; + GenDecode genericDecoder; + DWORD alreadyHavesInARow(0); + BOOL okResult; + + messageLog.setLog(newsGroup); + alreadyHavesInARow=0; + group(GroupItem(newsGroup)); + for(int itemIndex=0;itemIndex articleText; + String pathFileName; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=msgIDs[itemIndex]; + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + if(messageLog.searchItem(msgID)) + { + message(String("Already have ")+msgID); + alreadyHavesInARow++; + if(alreadyHavesInARow>250) + { + Block headText; + message("...1 second, I need to ping the News Server..."); + head(msgID,headText); + alreadyHavesInARow=0; + } + continue; + } + else alreadyHavesInARow=0; + messageLog.insert(msgID); + okResult=article(msgID,articleText); + if(okResult) + { + String strPathImageFile; + saveBlock(pathFileName,articleText); + genericDecoder.decode(pathFileName,strPathImageFile); + if(!strPathImageFile.isNull()&&openImage(strPathImageFile))::unlink(pathFileName); +// if(genericDecoder.decode(pathFileName,strPathImageFile)) +// { +// ::unlink(pathFileName); +// openImage(strPathImageFile); +// } + } + okResult=FALSE; + messageLog.flush(); + } + messageLog.close(); + return TRUE; +} + + +WORD MainFrame::retrieveNews(const String &newsGroup) +{ + DiskInfo diskInfo; + RecoverLog recoverLog; + Block messageIDStrings; + String msgString; + String strNewsDir; + String strPathNewsGroupDirectory; + String strPreviousDirectory; + OptionsReg optionsReg; + + strNewsDir=optionsReg.newsDir(); + strPathNewsGroupDirectory=strNewsDir+String("\\")+newsGroup; + if(!diskInfo.setCurrentDirectory(strPathNewsGroupDirectory)) + { + diskInfo.createDirectory(strPathNewsGroupDirectory); + diskInfo.setCurrentDirectory(strPathNewsGroupDirectory); + } + message(String("Retrieving message headers for ")+newsGroup); + if(recoverLog.haveLog(newsGroup)) + { + message(String("using recovery file.")); + recoverLog.getEntries(newsGroup,messageIDStrings); + } + else + { +// simulateNewNews(newsGroup,messageIDStrings,priorDays()); +// newNews(newsGroup,messageIDStrings,priorDays()); + listGroup(newsGroup,messageIDStrings); + recoverLog.setEntries(newsGroup,messageIDStrings); + } +// simulateNewNews(newsGroup,messageIDStrings,priorDays()); +// newNews(newsGroup,messageIDStrings,priorDays()); +// listGroup(newsGroup,messageIDStrings); + ::sprintf(msgString,"%s has %ld articles.",(LPSTR)newsGroup,messageIDStrings.size()); + message(msgString); + getArticles(newsGroup,messageIDStrings); + diskInfo.setCurrentDirectory(strNewsDir); + return TRUE; +} + + +void ImageView::preRegister(WNDCLASS &wndClass) +{ + wndClass.style|=CS_SAVEBITS|CS_OWNDC; + wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); + +// wndClass.hbrBackground=(HBRUSH)COLOR_APPWORKSPACE; +} + + + +void JPGImage::verifyDimensions(BitmapInfo &someBitmapInfo) +{ + DWORD desiredHeight(mBitmapInfo.height()<0?-mBitmapInfo.height():mBitmapInfo.height()); + DWORD desiredWidth(mBitmapInfo.width()); + DWORD imageExtent; + + imageExtent=(((((LONG)desiredWidth*8)+31)&~31)>>3)*(LONG)desiredHeight; + if(imageExtent==(LONG)desiredWidth*(LONG)desiredHeight)return; + else desiredWidth=(WORD)(imageExtent/(LONG)desiredHeight); + mBitmapInfo.width(desiredWidth); +} + + + + for(int index=0;index rawData; + PakEntry pakEntry; + +// String strPathFileName(strPathDirectory+String("\\")+strPathFileNames[index]); +// mThumbPage.insert(strPathFileName,pureDevice); + String &strPathFileName=strPathFileNames[index]; + mThumbPage.insert(strPathFileName,pureDevice); + mThumbPage[mThumbPage.entries()-1].getRawData(rawData); + pakEntry.type(PakEntry::Blob); + pakEntry.name(strPathFileName); + pakEntry.id(mMediaPak.entries()); + pakEntry.rawData(rawData); + mMediaPak.add(pakEntry); + } + } + + +// enum {DefaultWidth=96,DefaultHeight=96,DefaultResampleWidth=96,OffsetImage=(DefaultWidth-DefaultResampleWidth)/2,BottomBorderHeight=0}; + enum {DefaultWidth=72,DefaultHeight=72,DefaultResampleWidth=72,OffsetImage=(DefaultWidth-DefaultResampleWidth)/2,BottomBorderHeight=0}; + ThumbNail(const ThumbNail &someThumbNail); + ThumbNail &operator=(const ThumbNail &someThumbNail); + const RGBColor &light(void)const; + const RGBColor &dark(void)const; + + + for(index=0;index rawData; + PakEntry pakEntry; + + ::OutputDebugString(String("Adding ")+strPathDirFileNames[index]+String("\n")); + strPathFileNames.insert(strPathDirFileNames[index]); + String strPathFileName(strPathDirectory+String("\\")+strPathDirFileNames[index]); +// mThumbPage.insert(strPathFileName,pureDevice); + mThumbPage.insert(strPathFileName); + mThumbPage[mThumbPage.entries()-1].getRawData(rawData); + pakEntry.type(PakEntry::Blob); + pakEntry.name(strPathDirFileNames[index]); + pakEntry.id(mMediaPak.entries()); + pakEntry.rawData(rawData); + mMediaPak.add(pakEntry); + } + } + + + +void JPGImage::verifyDimensions(BitmapInfo &someBitmapInfo) +{ + DWORD desiredHeight(someBitmapInfo.height()<0?-someBitmapInfo.height():someBitmapInfo.height()); + DWORD desiredWidth(someBitmapInfo.width()); + DWORD imageExtent; + +// imageExtent=(((((LONG)desiredWidth*8)+31)&~31)>>3)*(LONG)desiredHeight; + imageExtent=(((((LONG)desiredWidth*24)+31)&~31)>>3)*(LONG)desiredHeight; + if(imageExtent==(LONG)desiredWidth*(LONG)desiredHeight)return; + else desiredWidth=(WORD)(imageExtent/(LONG)desiredHeight); + someBitmapInfo.width(desiredWidth); +} + + + + +/* +CallbackData::ReturnType MainFrame::browseSelectHandler(CallbackData &someCallbackData) +{ + SmartPointer mdiWindow; + String strPathFileName; + String strCaption; + bool haveImage(false); + + strPathFileName=(char*)someCallbackData.lParam(); + if(getFirstDocument(mdiWindow)) + { + mdiWindow->windowText(strCaption); + strCaption=strCaption.betweenString('[',']'); + if(!strCaption.isNull()&&strCaption==strPathFileName) + { + mdiWindow->bringWindowToTop(); + haveImage=true; + } + while(!haveImage&&getNextDocument(mdiWindow)) + { + mdiWindow->windowText(strCaption); + strCaption=strCaption.betweenString('[',']'); + if(!strCaption.isNull()&&strCaption==strPathFileName) + { + mdiWindow->bringWindowToTop(); + haveImage=true; + } + } + } + if(haveImage)return (CallbackData::ReturnType)FALSE; + if(!openDocument(strPathFileName))::MessageBox(::GetFocus(),"NNTP:Error opening document",(LPSTR)strPathFileName,MB_OK); + return (CallbackData::ReturnType)FALSE; +} +*/ + + + + String pathFileName; + for(int index=0;index<50;index++) + { + ::sprintf(pathFileName,"d:\\file_%02d.dat",index); + FileHandle saveFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + saveFile.writeLine(pathFileName); + } + ::Sleep(60000); + + + +BOOL MainFrame::getArticles(const String &newsGroup,Block &msgIDs) +{ + MessageLog messageLog; + GenDecode genericDecoder; + + DWORD alreadyHavesInARow(0); + BOOL okResult; + + messageLog.setLog(newsGroup); + alreadyHavesInARow=0; + group(GroupItem(newsGroup)); + for(int itemIndex=0;itemIndex articleText; + String pathFileName; + MsgID msgID; + + if(!isConnected())return FALSE; + msgID=msgIDs[itemIndex]; +// ::sprintf(pathFileName,"n%ld.new",itemIndex); +// message(newsGroup+String("(")+msgID+String(")")); + if(messageLog.searchItem(msgID)) + { +// message(String("Already have ")+msgID); + alreadyHavesInARow++; + if(alreadyHavesInARow>250) + { + Block headText; +// message("...1 second, I need to ping the News Server..."); + head(msgID,headText); + alreadyHavesInARow=0; + } + continue; + } + else + { + ::sprintf(pathFileName,"n%ld.new",itemIndex); + message(newsGroup+String("(")+msgID+String(")")); + alreadyHavesInARow=0; + } + messageLog.insert(msgID); + +/* okResult=head(msgID,articleText); + Header header(articleText); + message(header.subject()); + + String subject=header.subject(); + subject.upper(); + if(!subject.strstr("YENC")) + { + message(String("Skipping ")+header.subject()); + continue; + }*/ + + okResult=article(msgID,articleText); + if(okResult) + { + String strPathImageFile; + saveBlock(pathFileName,articleText); + try + { + if(!YDecoder::decode(pathFileName,strPathImageFile)) + { + genericDecoder.decode(pathFileName,strPathImageFile); + } + +// if(!genericDecoder.decode(pathFileName,strPathImageFile)) +// { +// YDecoder::decode(pathFileName,strPathImageFile); +// } + } + catch(...) + { + continue; + } + if(!strPathImageFile.isNull()&&openImage(strPathImageFile))::unlink(pathFileName); + } + okResult=FALSE; + messageLog.flush(); + } + messageLog.close(); + return TRUE; +} + + + +// if(!YDecoder::decode(pathFileName,strPathImageFile)) +// { +// if(!genericDecoder.decode(pathFileName,strPathImageFile)) +// } + +/* try + { + if(!YDecoder::decode(pathFileName,strPathImageFile)) + { + genericDecoder.decode(pathFileName,strPathImageFile); + } + } + catch(...) + { + continue; + } */ + + +//#if defined(_MSC_VER) +//#pragma warning(disable:4355) +//#endif + +class NNTPThread : private MessageThread, public NNTPClient + + +WORD NNTPClient::article(DWORD articleNumber,Block &articleText,String &messageID) +{ + String controlData; + String responseLine; + DWORD responseLines(0); + + ::sprintf(controlData,"%s %ld",(LPSTR)mNNTPCmds[Article],articleNumber); + articleText.remove(); + if(!isConnected())return FALSE; + if(!putControlData(controlData,FALSE))return FALSE; + while(mNNTPControl.receive(responseLine)) + { + if(mPeriod==responseLine && 1==responseLine.length())break; + if(!responseLines++) + { + String responseString(responseLine.betweenString(0,' ')); + messageID=responseLine.betweenString('<','>'); + if(mNackArticleResponseStrings.size() && isInResponse(responseString,mNackArticleResponseStrings))break; + if(mAckArticleResponseStrings.size() && isInResponse(responseString,mAckArticleResponseStrings))continue; + } + articleText.insert(&responseLine); + } + return (articleText.size()?TRUE:FALSE); +// return retrieveBlock(controlData,articleText,mAckArticleResponseStrings,mNackArticleResponseStrings); +} diff --git a/nntp/SCROLL.HPP b/nntp/SCROLL.HPP new file mode 100644 index 0000000..501e13d --- /dev/null +++ b/nntp/SCROLL.HPP @@ -0,0 +1,362 @@ +#ifndef _BROWSE_SCROLLINFO_HPP_ +#define _BROWSE_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +inline +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#include + +WORD ServerDialog::performDialog(String &serverName) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"ServerDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType ServerDialog::initDialogHandler(CallbackData &someCallbackData) +{ + if(!mOptionsReg.serverName().isNull())setText(ServerName,mOptionsReg.serverName()); + if(!mOptionsReg.userName().isNull())setText(UserName,mOptionsReg.userName()); + if(!mOptionsReg.password().isNull())setText(Password,mOptionsReg.password()); + return (CallbackData::ReturnType)FALSE; +} + +void ServerDialog::getParams(void) +{ + String serverName; + String userName; + String password; + + getText(ServerName,serverName); + getText(UserName,userName); + getText(Password,password); + if(!serverName.isNull())mOptionsReg.serverName(serverName); + if(userName.isNull()) + { + mOptionsReg.userName(String()); + mOptionsReg.password(String()); + } + else + { + mOptionsReg.userName(userName); + if(password.isNull())mOptionsReg.password(String()); + else mOptionsReg.password(password); + } +} + +CallbackData::ReturnType ServerDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + getParams(); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(TRUE); + break; + } + return (CallbackData::ReturnType)FALSE; +} diff --git a/nntp/SRVRDLG.HPP b/nntp/SRVRDLG.HPP new file mode 100644 index 0000000..36f6ca7 --- /dev/null +++ b/nntp/SRVRDLG.HPP @@ -0,0 +1,68 @@ +#ifndef _NNTP_SERVERDLG_HPP_ +#define _NNTP_SERVERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _NNTP_RESOURCE_HPP_ +#include +#endif +#ifndef _NNTP_OPTIONSREG_HPP_ +#include +#endif + +class String; + +class ServerDialog : private DWindow +{ +public: + ServerDialog(const GUIWindow &parentWindow); + virtual ~ServerDialog(); + WORD performDialog(String &serverName); +private: + enum{ServerName=NS_SERVERNAME,UserName=NS_USERNAME,Password=NS_PASSWORD}; + ServerDialog(const ServerDialog &someServerDialog); + ServerDialog &operator=(const ServerDialog &someServerDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void getParams(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + OptionsReg mOptionsReg; + HWND mhParent; +}; + +inline +ServerDialog::ServerDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog::ServerDialog(const ServerDialog &someServerDialog) +: mhParent(someServerDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); +} + +inline +ServerDialog::~ServerDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog &ServerDialog::operator=(const ServerDialog &/*someServerDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/nntp/STDTMPL.CPP b/nntp/STDTMPL.CPP new file mode 100644 index 0000000..2d5f4f4 --- /dev/null +++ b/nntp/STDTMPL.CPP @@ -0,0 +1,61 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class EditWindow; +class MainWindow; +class RasDialog; +class DirDialog; +class OptionsDialog; +class ServerDialog; +class GroupDialog; +class EntryDialog; + +typedef ThreadCallback a; +typedef ThreadCallback b; +typedef ThreadCallback c; +typedef Callback d; +typedef Callback e; +typedef Callback f; +typedef Callback g; +typedef Callback h; +typedef Callback i; +typedef Callback j; +typedef Block k; +typedef Block l; +typedef Block m; +typedef Block n; +typedef Block o; +typedef SmartPointer p; +typedef SmartPointer q; +typedef PureVector r; +typedef BTree s; +#endif + + + + + diff --git a/nntp/STRIP.BMP b/nntp/STRIP.BMP new file mode 100644 index 0000000..68746ea Binary files /dev/null and b/nntp/STRIP.BMP differ diff --git a/nntp/THMBNAIL.CPP b/nntp/THMBNAIL.CPP new file mode 100644 index 0000000..2c51c8f --- /dev/null +++ b/nntp/THMBNAIL.CPP @@ -0,0 +1,46 @@ +#include + +bool ThumbNail::setImage(PakEntry &pakEntry,PureDevice &pureDevice) +{ + mImage.setRawData(pakEntry.rawData(),pureDevice); + if(!mImage.isOkay())return false; + mStrPathFileName=pakEntry.name(); + return true; +} + +bool ThumbNail::setImage(PakEntry &pakEntry) +{ + mImage.setRawData(pakEntry.rawData()); + mStrPathFileName=pakEntry.name(); + return true; +} + +bool ThumbNail::setImage(const String &strPathFileName,PureDevice &pureDevice) +{ + mImage.decode(strPathFileName,pureDevice); + if(!mImage.isOkay())return false; + mStrPathFileName=strPathFileName; + mImage.resample(pureDevice,DefaultResampleWidth,DefaultResampleWidth); + return true; +} + +bool ThumbNail::setImage(const String &strPathFileName) +{ + mImage.decode(strPathFileName); + if(!mImage.getRGBArray().size())return false; + mStrPathFileName=strPathFileName; + mImage.resample(DefaultResampleWidth,DefaultResampleWidth); + return true; +} + +bool ThumbNail::draw(PureDevice &pureDevice,const Point &xyPoint) +{ + if(!isOkay())return false; + pureDevice.line(xyPoint,Point(xyPoint.x()+width(),xyPoint.y()),light()); + pureDevice.line(xyPoint,Point(xyPoint.x(),xyPoint.y()+height()),light()); + pureDevice.line(Point(xyPoint.x()+width(),xyPoint.y()),Point(xyPoint.x()+width(),xyPoint.y()+height()),dark()); + pureDevice.line(Point(xyPoint.x(),xyPoint.y()+height()),Point(xyPoint.x()+width(),xyPoint.y()+height()),dark()); + mImage.stretch(pureDevice,Point(xyPoint.x()+OffsetImage,xyPoint.y()+OffsetImage),DefaultResampleWidth,DefaultResampleWidth-BottomBorderHeight); + return true; +} + diff --git a/nntp/THMBNAIL.HPP b/nntp/THMBNAIL.HPP new file mode 100644 index 0000000..3ef1428 --- /dev/null +++ b/nntp/THMBNAIL.HPP @@ -0,0 +1,151 @@ +#ifndef _NNTP_THUMBNAIL_HPP_ +#define _NNTP_THUMBNAIL_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _MEDIAPAK_PAKENTRY_HPP_ +#include +#endif +#ifndef _JPGIMG_JPGIMAGE_HPP_ +#include +#endif + +class ThumbNail +{ +public: + ThumbNail(void); + virtual ~ThumbNail(); + bool draw(PureDevice &pureDevice,const Point &xyPoint); + bool setImage(const String &strPathFileName,PureDevice &pureDevice); + bool setImage(PakEntry &pakEntry); + bool setImage(PakEntry &pakEntry,PureDevice &pureDevice); + bool setImage(const String &strPathFileName); + int width(void)const; + void width(int width); + int height(void)const; + void height(int height); + void light(const RGBColor &lightColor); + void dark(const RGBColor &darkColor); + bool isOkay(void)const; + const String &pathFileName(void)const; + bool getRawData(GlobalData &rawData); + DWORD memoryUsage(void)const; + JPGImage &getImage(); +private: + enum {DefaultWidth=72,DefaultHeight=72,DefaultResampleWidth=72,OffsetImage=(DefaultWidth-DefaultResampleWidth)/2,BottomBorderHeight=0}; + ThumbNail(const ThumbNail &someThumbNail); + ThumbNail &operator=(const ThumbNail &someThumbNail); + const RGBColor &light(void)const; + const RGBColor &dark(void)const; + + String mStrPathFileName; + RGBColor mLight; + RGBColor mDark; + JPGImage mImage; + int mWidth; + int mHeight; +}; + +inline +ThumbNail::ThumbNail(void) +: mWidth(DefaultWidth), mHeight(DefaultHeight), mLight(128,128,128), mDark(0,0,0) +{ +} + +inline +ThumbNail::ThumbNail(const ThumbNail &someThumbNail) +{ // private implementation + *this=someThumbNail; +} + +inline +ThumbNail::~ThumbNail() +{ +} + +inline +ThumbNail &ThumbNail::operator=(const ThumbNail &/*someThumbNail*/) +{ // private implementation + return *this; +} + +inline +const RGBColor &ThumbNail::light(void)const +{ + return mLight; +} + +inline +void ThumbNail::light(const RGBColor &lightColor) +{ + mLight=lightColor; +} + +inline +const RGBColor &ThumbNail::dark(void)const +{ + return mDark; +} + +inline +void ThumbNail::dark(const RGBColor &darkColor) +{ + mDark=darkColor; +} + +inline +const String &ThumbNail::pathFileName(void)const +{ + return mStrPathFileName; +} + +inline +int ThumbNail::width(void)const +{ + return mWidth; +} + +inline +void ThumbNail::width(int width) +{ + mWidth=width; +} + +inline +int ThumbNail::height(void)const +{ + return mHeight; +} + +inline +void ThumbNail::height(int height) +{ + mHeight=height; +} + +inline +bool ThumbNail::getRawData(GlobalData &rawData) +{ + if(!isOkay())return false; + return mImage.getRawData(rawData); +} + +inline +JPGImage &ThumbNail::getImage(void) +{ + return mImage; +} + +inline +DWORD ThumbNail::memoryUsage(void)const +{ + return mImage.memoryUsage(); +} + +inline +bool ThumbNail::isOkay(void)const +{ + return ((ThumbNail&)*this).mImage.getRGBArray().size()?true:false; +} +#endif + diff --git a/nntp/THMBPAGE.CPP b/nntp/THMBPAGE.CPP new file mode 100644 index 0000000..c9bf47d --- /dev/null +++ b/nntp/THMBPAGE.CPP @@ -0,0 +1,199 @@ +#include +#include + +bool ThumbPage::insert(const String &strPathFileName,PureDevice &pureDevice) +{ + mThumbNails.insert(&SmartPointer()); + SmartPointer &ptrThumbNail=mThumbNails[mThumbNails.size()-1]; + ptrThumbNail=::new ThumbNail(); + ptrThumbNail.disposition(PointerDisposition::Delete); + if(!ptrThumbNail->setImage(strPathFileName,pureDevice)){mThumbNails.remove(mThumbNails.size()-1);return false;} + isDirty(true); + return true; +} + +bool ThumbPage::insert(PakEntry &pakEntry,PureDevice &pureDevice) +{ + mThumbNails.insert(&SmartPointer()); + SmartPointer &ptrThumbNail=mThumbNails[mThumbNails.size()-1]; + ptrThumbNail=::new ThumbNail; + ptrThumbNail.disposition(PointerDisposition::Delete); + if(!ptrThumbNail->setImage(pakEntry)){mThumbNails.remove(mThumbNails.size()-1);return false;} + isDirty(true); + return true; +} + +bool ThumbPage::insert(const String &strPathFileName) +{ + mThumbNails.insert(&SmartPointer()); + SmartPointer &ptrThumbNail=mThumbNails[mThumbNails.size()-1]; + ptrThumbNail=::new ThumbNail(); + ptrThumbNail.disposition(PointerDisposition::Delete); + if(!ptrThumbNail->setImage(strPathFileName)){mThumbNails.remove(mThumbNails.size()-1);return false;} + isDirty(true); + return true; +} + +void ThumbPage::remove(const String &strPathFileName) +{ + for(int index=0;indexpathFileName()==strPathFileName) + { + mThumbNails.remove(index); + index=-1; + } + } + isDirty(true); +} + +void ThumbPage::draw(GUIWindow &guiWindow) +{ + PureDevice pureDevice(guiWindow); + if(mDIB24.isOkay())mDIB24.draw(pureDevice,Rect(0,0,guiWindow.width(),guiWindow.height()),Point(0,0)); +} + +void ThumbPage::draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + if(mDIB24.isOkay())mDIB24.draw(pureDevice,dstRect,srcPoint); +} + +void ThumbPage::update(GUIWindow &guiWindow) +{ + if(!isDirty())return; + createBitmap(guiWindow); +} + +DWORD ThumbPage::memoryUsage(void)const +{ + DWORD memUsage(0); + for(int index=0;indexmemoryUsage(); + return memUsage; +} + +bool ThumbPage::createBitmap(GUIWindow &guiWindow) +{ + PureDevice pureDevice(guiWindow); + GDIPoint gdiPoint; + + if(!mThumbNails.size()||!guiWindow.isValid())return false; + if(!getDimensions(guiWindow,gdiPoint))return false; + mDIB24.create(gdiPoint.x(),-gdiPoint.y(),pureDevice); + mDIB24.setBits(BkColorBits); + drawThumbNails(guiWindow); + isDirty(false); + return mDIB24.isOkay(); +} + +bool ThumbPage::drawThumbNails(GUIWindow &guiWindow) +{ + Point xyPoint; + + if(!guiWindow.isValid()||!mThumbNails.size())return false; + for(int index=0;index &ptrThumbNail=mThumbNails[index]; + if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) + { + xyPoint.x(0); + xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); + } + mDIB24.setAtAsm(xyPoint.y(),xyPoint.x(),ptrThumbNail->getImage()); + xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); + } + return true; +} + +bool ThumbPage::drawThumbNails(PureDevice &pureDevice,GUIWindow &guiWindow) +{ + Point xyPoint; + + if(!pureDevice.isOkay()||!guiWindow.isValid()||!mThumbNails.size())return false; + for(int index=0;index &ptrThumbNail=mThumbNails[index]; + if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) + { + xyPoint.x(0); + xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); + } + ptrThumbNail->draw(pureDevice,xyPoint); + xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); + } + return true; +} + +DWORD ThumbPage::rowItems(GUIWindow &guiWindow)const +{ + Point xyPoint; + DWORD rowItems; + + rowItems=0; + if(!guiWindow.isValid()||!mThumbNails.size())return rowItems; + for(int index=0;index &ptrThumbNail=((Block >&)mThumbNails)[index]; + if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) + { + if(!rowItems)rowItems=index+1; + xyPoint.x(0); + xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); + } + xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); + } + if(!rowItems)rowItems=mThumbNails.size(); + return rowItems; +} + +int ThumbPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) +{ + Point xyPoint; + + gdiPoint=GDIPoint(); + rowItems(0); + if(!guiWindow.isValid()||!mThumbNails.size())return rowItems(); + for(int index=0;index &ptrThumbNail=mThumbNails[index]; + if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) + { + if(!rowItems()) + { + rowItems(index+1); + gdiPoint.x(xyPoint.x()); + } + xyPoint.x(0); + xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); + } + xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); + } + gdiPoint.y(xyPoint.y()+mThumbNails[index-1]->height()+Separator); + if(!gdiPoint.x())gdiPoint.x(xyPoint.x()); + if(!rowItems())rowItems(mThumbNails.size()); + return rowItems(); +} + +bool ThumbPage::hitTest(GUIWindow &guiWindow,const Point &clickPoint,String &strPathFileName) +{ + Point xyPoint; + if(!isOkay())return false; + + for(int index=0;index &ptrThumbNail=mThumbNails[index]; + if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) + { + xyPoint.x(0); + xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); + } + Rect rgnRect(xyPoint.x(),xyPoint.y(),xyPoint.x()+ptrThumbNail->width(),xyPoint.y()+ptrThumbNail->height()); + if(rgnRect.ptInRect(clickPoint)) + { + strPathFileName=ptrThumbNail->pathFileName(); + return true; + } + xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); + } + return false; +} + diff --git a/nntp/THMBPAGE.HPP b/nntp/THMBPAGE.HPP new file mode 100644 index 0000000..2a290f4 --- /dev/null +++ b/nntp/THMBPAGE.HPP @@ -0,0 +1,147 @@ +#ifndef _NNTP_THUMBPAGE_HPP_ +#define _NNTP_THUMBPAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _NNTP_THUMBNAIL_HPP_ +#include +#endif +#ifndef _JPGIMG_DIB24_HPP_ +#include +#endif + +class DIBitmap; +class GUIWindow; + +class ThumbPage +{ +public: + ThumbPage(void); + virtual ~ThumbPage(); + ThumbNail &operator[](UINT index); + void draw(GUIWindow &guiWindow); + void draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + bool insert(const String &strPathFileName,PureDevice &pureDevice); + bool insert(PakEntry &pakEntry,PureDevice &pureDevice); + bool insert(const String &strPathFileName); + void remove(const String &strPathFileName); + void update(GUIWindow &guiWindow); + DWORD width(void)const; + DWORD height(void)const; + DWORD widthThumbNail(void)const; + bool isDirty(void)const; + void isDirty(bool isDirty); + DWORD entries(void)const; + DWORD rowItems(GUIWindow &guiWindow)const; + DWORD rowItems(void)const; + DWORD memoryUsage(void)const; + bool hitTest(GUIWindow &guiWindow,const Point &clickPoint,String &strPathFileName); + bool isOkay(void)const; +private: + enum {Separator=5,BkColorBits=255}; + ThumbPage(const ThumbPage &someThumbPage); + ThumbPage &operator=(const ThumbPage &someThumbPage); + int getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint); + bool createBitmap(GUIWindow &someGUIWindow); + bool drawThumbNails(PureDevice &pureDevice,GUIWindow &guiWindow); + bool drawThumbNails(GUIWindow &guiWindow); + void rowItems(DWORD rowItems); + + Block > mThumbNails; + DIB24 mDIB24; + DWORD mRowItems; + bool mIsDirty; +}; + +inline +ThumbPage::ThumbPage(void) +: mIsDirty(false), mRowItems(0) +{ +} + +inline +ThumbPage::ThumbPage(const ThumbPage &/*someThumbPage*/) +{ // private implementation +} + +inline +ThumbPage::~ThumbPage() +{ +} + +inline +ThumbNail &ThumbPage::operator[](UINT index) +{ + return *(mThumbNails[index]); +} + +inline +ThumbPage &ThumbPage::operator=(const ThumbPage &/*someThumbPage*/) +{ // private implementation + return *this; +} + +inline +DWORD ThumbPage::entries(void)const +{ + return mThumbNails.size(); +} + +inline +DWORD ThumbPage::widthThumbNail(void)const +{ + if(!entries())return 0; + return ((Block >&)mThumbNails)[0]->width(); +} + +inline +DWORD ThumbPage::width(void)const +{ + return mDIB24.width(); +} + +inline +DWORD ThumbPage::height(void)const +{ + return mDIB24.height(); +} + +inline +bool ThumbPage::isDirty(void)const +{ + return mIsDirty; +} + +inline +void ThumbPage::isDirty(bool isDirty) +{ + mIsDirty=isDirty; +} + +inline +DWORD ThumbPage::rowItems(void)const +{ + return mRowItems; +} + +inline +void ThumbPage::rowItems(DWORD rowItems) +{ + mRowItems=rowItems; +} + +inline +bool ThumbPage::isOkay(void)const +{ + return mThumbNails.size()&&mDIB24.isOkay(); +} +#endif diff --git a/nntp/UUENCODE.TXT b/nntp/UUENCODE.TXT new file mode 100644 index 0000000..6982773 --- /dev/null +++ b/nntp/UUENCODE.TXT @@ -0,0 +1,920 @@ +begin 644 d3.jpg +M_]C_X``02D9)1@`!`0```0`!``#_VP!#``@&!@<&!0@'!P<)"0@*#!0-#`L+ +M#!D2$P\4'1H?'AT:'!P@)"XG("(L(QP<*#M/-;RQ0E(UU)C*X'WI%[XKY7#*XVRM`FWT:5+P2L_%@NO#D\ +MA;F#\N?>C76I9RCQY/7?#`>AI?3)+YT?!/0[9J:SS:P+B`L0,!BW3M5/NRK0 +M5;Q#;^%.P;^%\;'WHGANP)B.I"0>?(U".&&5R6&@$X*,H_O1J7%,JVQ^"Z*Q:3AM7+U%,BZ;3Y&(P,8.1]*HQ)'J\&6,QGHZY(! +M]J;7\1$#N,8\KCDVU2+<6*GC4E9=6UUY]]L[C>KGQETJ"^EN1WQ6,M)F2)E) +M&1N,U=07D;872I/+)I^++4J?DQYL/%KP:*.YB8A1(/*.0%KY"'!ZYT@"N +M(QE0.8R@;;SK$`#'U3A(B"01K;1&%'>90,`N`,>E>UK&#(S$IRY8QZ#M4,00)&8SJ'49WY_ +MDM#+LN/0J8$BB8K$`""OE& +M=^YJEO+7/#+J/5G8$`C8;BM7<)%/:O&D@)SDE.:U1/`5=BY=P!C7)N!]#_>K +M\<%7R4MYP^*]X48XX5;7%LV/3K69CX9--P[=_#D5RC(%W^M;"SM9HYC'%(?P +MTF6YX9.OZ-2FLX@&\&)>84D;LQ'(F@<%-7/K5?\`@YII2]V8D4[K$BDM^O>MEV`B): +M)HF.Q*#*GGG?I_.D^U*/3-2U<7^2$[>!PR_M3@#25P,'_-%N("\JL\*L@&G2 +MRA=9/]?>G;:QTKLBF(#.6Z_KO73$S.4P,G8C&,#IGU'>LCD[.7*;DVRD-I'$ +MDD?A*T8.N,:=\=L]Q49+&+:YCMQ(\9`5<8UCF.76KED1(G9R-#;LQ`W]_4&L +MTKW=YJD30$BDPJK(1L.6QYFFP;8L26+0)IGMCK\<'$@.5V.P_E3IL94MX)Q/ +M!'0![4Y9VUHV"PC1W(^48SMV[4G>6D,EW' +MB-8X/#&D,^D`]<'!ISAZPQ3"$R(XU#P]38).=Q3/\-HB3[+^7AUH;@.P@,4F +M`>_WK&?$'$O]H^)\);02B&!8BC@X/7OSWK;2L;DJ=*1R)VY8]<"OF?Q- +MQ!+OB;M^'C6120TBG/B=C]J9@^4N4.D[CRB[%O'QBUAT1QQ6L[J97YE>?E': +M@<>-NL*V%C"D-LB"29AS`Z#W-5/`N,S6D5S9C!65"R[XTN-_Z5>NUGQ2*.[* +M$PL1+-$IR9),:53'O4<7"?/0M&*ECT>;PF1&R5SU%6'"[R*"18YE55:0$S-D +ME1@CE3G'[<`F>XN3+>$A61%Q'%C]P'KCTV%4:C;>M2J<2)%YQZQAC2WNX3+( +MDH(+L!@]@/I5(%'+%:6U'^\\#DAD)$ML"P?Y410!CES.Q]:SF!DT.)NMK[0= +M'D1>@H@B3E_6O`410/ZXHVQL8G!$F.52$2$9P:DHP#GZU,`G:AL=&"(B%#TI +M@6Z&(X4D#&_2H+^A5WPQ$FX/Q6-ERZQI(A[88`__`/5!)T:L<(UT9_P$['WU +M46.V0GK[YJ>GS4S&H&":ML/#@BY$6Z7`83,N6`.Q;K64_P!/N*K`7M)WTHK:D8\@3G;ZXKZ-_NT; +MVR10'#K@AAR^]*R97'AG-R0N>ZNSY'/P&<_$D]G:1^!:K<%1*_([]_Z5M^'_ +M`.GUFD"F_=WF))(5L#>M';\*LHB)/#>64G40"6.20VMC,+>7!,P+C;<8]JQM +MY&@D"`Y447$KMEP[>=O7<4K(@$K`#"KTY8K3'A]B93BX +M\(:X7P]^(7MO'(%\)Y55FQOISO7V^3@G#X(3(966)$U$G&!@5\?LKGAT/AR+ +M%(T\;`\]R<]ZUG'?BB3BMB+2&*6*T*CQ9&&&;TY\J3-R;-+TJ=4[/GW&3%Q# +MCUS/G"/)Y">B]*T/P]QM;$B#B9,MOCRNN[+Z'N*S=W&[W;QQE0JG"86HI$0S +M%WT@C&.YIS5QHM88)OXF\^*X^"\0X5;3V%_'K63S`C<*1OMSK,W'#[72/PH9 +MF*8+%GH:K8/#B;(E89YC5S%647$&:2&-2=$9U9;]X]SBE24ET7'%%*FA +M4,NG6%TCF<^M,Q\"#1S`,-0\H!Q@^]/)/"LO[:7*C +M4-&PV/08'M0+)-L;BT<9NHHH/]J*2/%,NB0#;0`0>Q]JBO")9Y=;.$A+8)V! +M^@K61WAK +M2\/>&)1!9QN"`YRK#]J-B#G?ZUDZ-Z^@$?&+B#2 +MDB(RD?O#G]:(9K>Y<,08W(P03J'WHSV,3P21`YZ@9W'K51^&97(78#;2U4MK +MZ"Y3+N6"01`*6.!@'.:"MX1HBN%QG;5G^5!M.+Z;4>AK3#(<[)B:=&T_%6]JFN +M1B#T!ZTF;^>Z4R!8XHQDZ#S]S68./R`MYB/+XA&Y'KWI +M!X)FXP)F4K%'&0ATX!R/>F%G*`?B$."<%XR`#[U&1#P7]F49P".1"\OO2S6F +MFX%RA'C`],@.*9D=Y0#&I!`_>(Q0Q&L]4U82=$)]:,MR!I88 +M^8'GU],&AW=J;O$PF*P$>51SS^NM-J^E3&N'V&H,<@>]&F@D(5$52Q`T:#MC +M]=:6E39;=HIS$%A+/ +ME(/7_(IV3C,0NFA:<"/2"IP#YN>G568>^,5L_AJHF^8YZC)S67+E251*;+^0 +M%458^7+..M9J^XA%`%\/KVW\NX.U!3BMZCM^T,;YUQ*PU*1C)'?VJJN)U;0 +M=3OMD_2E>(6MQ96-P]Q;:K<*2QAD"D#'/>D1ES1:29EG5;Q9H"HC0DF,LN=/ +M>AQ\/>!PRL]-6CI((IDFD9<^574`D>]:`P*8M$^Z@95EZ&M._;PR +M0:3Y0E!*\B2QL='B+I8*1J&0>6:^=\9X<_#;]H68NA`9'.Q(KZ9Q/@D5OPZ. +M\6=YUE.D@+C&1Z&J7C'PC<<0X3;7G#Y#\"XB8I$MFT(F#AP-\D\S[=*3N^$7]B2+JSFB_^ZD#[TJH*,&W& +M#SK7)*:HJFB[XU'XFB"*/`C!9LG.`.9_/?UJ@`VK5\5D$?#6DC`(N%`UGKOR +M'IUK+Z<4&%_$LTWPL8'LN(0S3%0P&5/R@]:&@XR#@;=CTH@&WIU-#1LYH\8 +MR"YP?UBGN&^)^(,49RTJE,?Q9Y4IR)'Z%,V$[6U]#/'NT,!!).Q'2N$E0*T7'K6./B,LEN0;>Y"W$>.@;SDEBCGB>$(VI1L1L?M573X,N6:BK?D^'_"/#KCBG&OP,1TI +M(A\5_P"!1@Y'KD5]+@AFMI5MR!^R\H;;?MFG[;X.M_AN]GGX?DP3Q95N9DA,@V,C8U5R\^) +M>$V\966^MN7+Q5Y?>JWXYM$CX1>KG0\:^-$P_=(_6*^1V]Y]!":X_D+PNSMIS)XET(64[#).W2VQZ%G\*Y4HR>%)S&U!L",2"92Q5N1W&U%O`8(6*E=OXAR]J33 +MB;B/RJF1L6`Y&F)-K@YN:>#%F3R\-?IV6YBAEBPJ:5`Z"DV8L6?\`NJI5STS5EP\JC`&0%FP,$D;=OO02=+@Y<(7Q +M)V.3<=D>+PH(TBCQNF@`#L!7JJ_#"RDNR'))"J22-SC/2O55AJ"72+VQF=[5 +M68>(FG'J-J\WA&70`4SR/+Z5.UB3AX!UJ\;`#!Z5.:2VG7`=,C?9L$5GOG@: +MNA=_Q4*D`>*@_?ZB@17DDRM#X4U"C_%6,YDM])4^F15M')&PP_/;.V],-&H8 +M$-D'H1S^M5O^R]G!7)>33`F2&,YZHN,BJ^[*_B%*,=]]^E7^F-7P,`\_-M79 +M+6&7S!%<9W!PMK@S)X39 +M*G<#J*KKTM%<"-LG/('8D=Z*$.:(WP6]C?\`A1PPW&\1&G.>1Z&A7EXKR^$R +MZM)QENE+1*KK@\FYYZ'O2]U&T,PU#.1LAJIM//ENH&JG[=P68<\C;TJ2XZ)5\,T-IQ+4I\,X8X\_P##W-:"RNH+ +M=3;VSR3,,EF#$CEG;'?\MJ1X=<22".$0R^%TD.%'T&=Q +M3B1N`%`UX)T2ZL1K@9BN)E49_>7=318XV$; +M*V%SG)WP3W%*7*W+V5R@A&K1L5WU#;;&:IV143M&N)97F1<0#9$ZD;4[$BR? +M(ZYY['E$`T+UP.^^*3N;_`,)#(="AB0H; +M.2>?0UFU8I9G+\>BF^!-HF +MT/(4746_:1#ICJ/UZ562"-8I0(C)$8\'(P4.:)=7MU"\[!R2VZ@\C]:JY+]Y +MG6-<,-6"[C!WR3G[T..%\BP5TRE/PZ%944@J_(C8[9[4LZ:8O#D0/H!!(;<; +MFG(K5B!I8ER,X[M3/_I+XCNW66UX7=/$X&K*Z<8]\=*UPB$HF6$C1PC\)-.! +M$,G+:=&_I5CP(O\`C/"N)KN1F'BOH)\K'EJ^G\Q5E#_IU\1M.OXGALZQ,X+` +MD`8SWS5U;_`7%;"^?BG$;B*T5L@PJVIF';MRJ\M;6BW'@,D:+%EUDP&&&&[# +MIG;M[55<1L^*SQ>!"A%DK9)8$B3)W)/8=JTO#8M3M"4:16;RN#EAZX%:A^'S +MM`8WF#,%QI"9!['>LFGQ[K8%'RRWMVC21+VS#G.(S;G"D#T(JT@C::Q'[-AI +MSG)&WI5IQ"TD+%;BXTG.X`TX/L*JEB:U9X4=^8.<9W^]7^XMHXLT<5C/;2*3 +M&5RH`Y'TKG`9M3-;%L9&5SMO1+B(R!77PF9>8#[D^V*3O+&6RO5=-2!_,AQ] +MZN-AQD^RYNCH3]O,D98Z=+';-5-Q%:R6^6,<\8;90BL-MS]JT?"DLN-V6BZC +M#3Q'KS]"*A=<$\-52--,2QL%(.26/,GZ4VW5HT*;?1F;/A=M&(MO$@`RHP=OF]:N#3EE?DIP7@^!J"#1XWQRZU]KO_`(:X;-:!KBTB=R-QI`V]"-Q6 +M*XC_`*?3%))>$R>+IR?P[[,/8]:OW$^&'"X\HQP;_-$1B#L/85&>VN+5BL\, +MD9!P0ZD4-7P1WJZ-,,RODNX9A+;:&8G0N!GH.U(S@Z@*'#-@8!]/>KKX?LN' +M\4XQ':\0NUM86R2YVU'HN>E+_'DWO-&>.BE"LV`/L!7T'_3[XJG^'96LN(Q3 +M'ATYR'"D^$W?'4'K7T"QX'P3A$2"TLXM1&S!0S-ZYJ[AAEE&UJ0O_(@?E29Y +M?I&.1I\B5"X\`^)<"M..1NE\7,;#24C;3^ +M=4LO^G7`4MFAC@D12.DIR1[UJ?&\-]>EM)&#MOFOG'QY\4?%?#K=Q:<.-K9G +M9KM2)&_+Y:;!J7"*W-=]&#^,.'1?"G%OPMK>F56\QC.[)V!-9N/C-S=.8F4% +MFY8'3UI*YFEN;AYIY&EEU9$9Y5?<(O7EB%L3DKN.P%!/'2 +MM'0]-GCGG2R?Y?N7#)I12NVV3MC->5UC0EF`[DGG1`5/E8\MZ3FB65BS\N=( +M7ZGJ\C<5<1N.XLH+F*2\95B+F)J*LY&;2Y-7J+DJBJ%;)`J`@#_-.#&K4#@YJ*QJD +MCKC`/ZYT3(4'##;'.@;LZN&"A!(E<2!8P0H)-(C&>7*N7'$(5F"RLQ4'?0=P +M*K9+]1*P1V*`G!(`)JU!LXOJ.HA*:2ET6H*CT]Z9MI8H)#+,XP`1@$9)K-&^ +M8G8FAM>L)8X3@E66,0`-:G +M./F7?^M5DG$6AJTEJ/VD8<=\[?GRJ:<3M6;0R +M/#GOYEJM@XW#HPR.R$9&<,*ZMU`263=>9P.55L^T6I?1;S>&Z'Q(6,9^5T;( +MI=(A'\DAT\LU.UF0QYB.0=.U1@XR%DR9-2]^H]Z+VY=HIM'9;+\/DJ"R@].:TI +M-(6&F4!L?(X'>K::4F/QXFU+W&^*I;EDGS@Z2.W*FP;?8MJNB#:H<8.589R* +M]XOC0&(C4AY'^$T/QRB:9!J"G.1SQ4"_AD2Q$'N,\_2FI"VQNS8Q2$CI@C/: +MC2OX9$D9\NK/TH"SQ$`H<@C!4UV,ARZ>'V\)(C@C&.NG>@O$2T +MT?+9/A'BYMX6X@\4<4DPC1%2%B4/#P+N73:1H2V!(XV/S13H1*D>^-UR?Y5N8E`LH\G5JP"< +M8U4S!S84$9^VX/';7@EM9#"W53YE85:NPD)7MO79%"#GYARH<+9ST!--22X0 +MY(Z^(RF!N*FX&E)$VQ^5+DZCFC1DF%QORSFHF%0W-ID19<[@9R*G9G2[1$>5 +MAD`TJK%K9@.:G^M,IY;B,]"<428-<4%DLHG/G4-]-Q2\W"S)&J"!%`.0=B:L +M6\J.0,@"F(F/A+W`Q1T@;=%99\,CG+>,/F7DW2E[SA#6,JRP_)GZCZFK:*<_ +MB"W0'%.RQ)<0:6&<]ZK:FB;FF8OCGP_;\;X1-`RA6D&SAAJXVN@G+[/SX/]...L +MKF$02LHSI$F"WMD?AKQ'MV5@KAU.5[G%?I)[,VSE8CE5(QZ^]5W +M&>`F:^0<5_T[C,I:P=TR?EP6P>U:S_`$]^ +M%$X':W-U<`&[E;0I88TJ.GU-)<57`WE]F^E8S1_)D#[GZ546]W:3<1GL8;F* +M6>V`:6$9#+GEFB\8XU!P3@\]W*"[(ODC4$M(W05\K_TPXO/<_'G$&O,^+Q") +MV)8'Y@0V/M0/"I')N`6=^%S)!-X;$=F_P`@5@.!_P"HO'N"PK;^ +M,MW;)L(Y\DK[-SHX8..`7DJ7(Q_J#\%_[#E#FNN#K^ASQK,U+MK@=P<% +ML[7D*RV>L4:!%<'(&#R':IP9).1Y1T[U +M[5D`#ZU(*8QG!P=JLI+D#*`&)QN/SI.Y627A\JH/.1D4X[$@$;T.68QPNL97 +M6PP,]":)&?4N*A)2=*F9);>9CNN/K1!92'=G`]!5LE@3N\I__44U'PVWZEC] +M:<\R1Y*.F7DI!91#=G8D>M'CMH0?+"6)[Y-7T5G;(`?"4^^]-*H'E5<8["DR +MSFB&"*\%%%:RD#P[K1H<==O2O4IYG]#UC12('!_\K!MAG8FF4BEDR!< +M2EO4C%6BVG#;E"([A(Y?X'&/SH8X5.DHVR,[$]*CR+]A:@V!$G$+;8$NOOO] +MZKY+JV#$#YE^:N7!M+I&$4I20;:6YCZ9VRA&I>NXSV +M-!>>65`EPAU#DP_6]:X69Y4RQS?M5Z\QM1XE74"",] +M#RIK\+%.N)5R?R-%:3Y0'+Z`HPE7*G/4&H-"3EXFP>JD]$"AU)'('#`]*&8-2%D`RI\P +MJ[35,'E,LI0+BV;&S#?%+VR$AA^\IW]JG:/J\W4;,,_:I3?^WNTE0'PVVH%] +M!/[+JURR)&&QD@X)YD;_`-*T_!AQ6^6:WX=)$&&9'UMAL[L\+<1EY226!8_E5O: +MS1.><@TG.D]*FEPERJ)(-2/\N.FYWS2]THM"#*<(.3=_2M<9?1PI1:[+-F,C +MCPTU*>>V,?W]JG`!:,Y=HPA&5&KY364G^)TL8V-PR*C#`0'))H'"YN-?%-QH +MX?!^'LP<274HY=P.Y]**P5$U-M;GBMP!(Q9%.6!PP:6,@&QV^M!3SLI'7:H&OLL[*/PUY4WC:A1#2 +M/>C5!;.$9]JRUU8W3<7?-O\`BD\HCEE;!A&<[^19(4$JHY7;S#(!I63&IJBZL^76(\*0MJT#.`ZID +MYSVK82-HMHQDD`XR:IY;*>TXN%U;LQ(8C.H/IBC3J6VI.%-)V,@@,C9 +M`/O4>6`.@_S2=]?Q6<7[0DL?E4/>KED4>S=@TF3+S +M'K[+ZXXC9VC:9IU#F0PG&1S\/\`S5!';%6)*[D[DGG1'B1T +MQFDO/R=*/IF-+Y-FMX9Q*SOQ*+:=7RN<-O8\A4`=;-Z'%34$)JWW^6HB,'(NI=6W/F +M:'%"TF0@RO4XQ3,<(E^;<#I1V4@$(,`415B;6ZB)HU4`^E*JKX41G2Q(Z;4\ +M`1(V6)]ZE#``6?'/Y1Z4+29<9-%1=643.9)%U'D"V^/:EOP=M;&.YMX(UD1M +M>57!)ZC:KNXA5ETLV,TJUNJQZ5)(.2TEBNTYX^1OL=J^S2<,S*'0D$=,9!J1M9F7"P[\MAM51W +M1"FXR/S9=6-Q9N8[F!XF'1UQ0"@WY5^B.)<#%["8;^SUQG?!3/YUD[[_`$_X +M8Q)BBFAQT1C_`%S3%D^P/:3Z9\C\,]!4XO%B'X=P"#W4.+Z.MB]7U$(J,J9>MQ*&-Y`KDE?EVV:B0 +M<7@('BZAMG!&PK.UT'[U/:B$O6,ZE?!<3<3#DB->_F:ETGSG)Y[FJ\/]14U; +MM4V(1DUD\SN;+5)@0#SIB.0D;?>J=9,4RER!UZ]J7*!(S+='++UQ14/(XWR>?.O52_CF/+.:]5>TP_<0[PWA=UQ*[16=UA#9 +M=@,#'IZUMGEMX5"%&"_K2)Y-_ +M8_'!00K-=PXRK-IP.?Y[5.(J(B48&/L-BM0>P@X8'8Y'7' +M6CS2QQQ#IY=SGOTIJM"I%'(DI;(\OH=S7@Z:"DV#V/(URXBFO9/V+8.>2\Z! +M^"NHJMRJF1$EG.-+;'EGO4#(OFVY\O[U)T4`D'4A.".HJ/X?"\\C/,4*(04C +M42![^W>CD,DBR)N.3?WH4$15M\L5//NM/(@5&4#('+O4;HM"'#KB2#8;,#I(/2 +MM%PRX9)1&S'4%&E3RZU3SVWG+CD2#GUJ[^';07E_'<'E''IJ*I,ISV19K[*$ +MQ"WU'4>6:M9;".]26WF!*/CET/<4M9`23(,;)OBKF#`=B>I(S6N"I'+R2;=F +M'L/]-8;;BDESQ>Z>^C#9A3&,C_E_:M[$(8[46\"+&@PJHHP%'M1P05P1D=J& +MY,7[NM:*Q5MA(&C(\C`JFPQ4)LELGN-J\#"1\A3'\-1;2P\L@/\`Q;8_2B3! +MH8=!)&1_FEE8QC/K@TS&V!AMB-MZ%,FHN.XYU92/2H)(&VR"*J[4$NT9Y@U9 +M0/MH;8U7X,?$R-1&3RS5!1+A",!3S%$H2-J&#G4*(O+TJP#M>KU#,09V+`," +M!SZ5"B>!G^0J$H\K>U=3*EEW.,$$]JY)NIVZ5"T"/R`#J10+E1I50-]0S1X^ +M9/:@.-0]\9J!)3)S67XG?K"PDQD*"%7^([XJ_XU<:5,2'IDUA +M+^87-X<'*(-(/\S6?-/:N#HZ+3^[.GT`*O5M3NA3)P*L +M((^IZBN7.;;/1*HJD`6R#C'TS718#(QFK>.-0"S41'M5\WFI25<^U12:'0G]ECP'B*\1A:TNU5[J,9'(%QW'K +MWJU_VYHF!1]9`U%=@PK#F22SNXKJ$XDB8$8ZU](X=?Q75K%,AR'`/+E6['DM +M'']0TBQ2WP7#*JUV +MDLOV9RRL_P#Y.A_S6A3\'+HM+9\H,G<[T=[C;2FW:JM)2D6`.GV%1BN=3Y!I +MJEX`VEU;G3MGGUHI;?4,XQRZ>]5\,WB4(FD=>9J,AU:EJBK%)D5Y.?+;([4-8]3G&X48S174!CA1DG`HBIH3;? +MOWHB61$049;;'J:X9/+B,;]S475(F>"0Z)1 +MH9MO.,#[U=9)&,#E2T]G%.A5XU(-4T6G]E/+8QD%E09!V(ZU7W-C'(I1QG'6 +MK*XMY^'^?)>#N#NM0UEP"""#R.!_2AI#+,?Q#X;L[R%A)"'QD9(W]\U@N-_" +M9L(_&MWD>,G!4IG'U&U?8VA&E_+N>W2E39K,&TGS<\'K0\KH9&:7Y'P22T=$ +M+#S*.HZ4M@BOK/'OAV.6!YH80DHW)48U>_2OEW$K;\-/A1@-T[4<)6Z8_+CB +M\?NX^O*^A(G'*N>)7"I/*NB-CWIO!C39T.Q/(_>I@OGI]37DB8=A3$=LN=VV +M]!0MI#H1DP8UC][/TJ:@GFQI^*R@.-V)^U.16ENO*(9[G>DO*D:X8RH50>F_ +MWKU:2.%%`THHQV6O4OW_`-!ZQ(V1N%6)@=PO0:$V^RL-\Y4FHZVDE3&&"Y.`? +M3M4Y+EUE;5$BN>ISN*"6F72^B!EYY7G5()L#=W,MLZLR>0';?<5R[N7DMQ

BS1^-'A3E.Q.0:JT?\,9HBF +M1Y64^49(WZFFUB!)E&V@C;ZX-"OCI+28ZX`QS.:T)\BI="4<`C&1M_RSO1E% +MQ(P"NK]@=Z#$S,_[5/<:N5,2`LFF*./OY2:8)_8,#X0!>-HV'73L?U[5PO%< +M;,H##J-JG:-.P\.13MS#)M.&`TGTH)392HJUXN*I[KY(I(K6L +ME>YD\#?2,9[&O1V+QR%V!"#D?:F[9Y(8F`4EFR5$664EED4D8W(]N57; +MZ+\6>@(E5D(V(!!':K?X8;\-087O0O@;!6S*<>XCAV&@2Y-L(V!N!E.6U6OPGQ$I.UBSA0?-'GEG +MJ*JI1E:KV9X9ED3(=3D>AI^,=EPK-B<&?88)O$93(2<]C1)(4GC97`*'F#^5 +M4/`>+?[A8*PP#R<8R0U7H*.H\,$]^PK5%VCR67'+')I^"LN>%D1L('._)6W' +MT-("&2'9D*'KD5I9&9$T$#;F:BZ!ME.K-,4FA7:Y,X+C#!023GI5Q9/@:CS[ +M=JA+9Q0H-4)U9^=%`QZU,0]K&^_:FQG8+B6(D&D[XKCL`I/\`W56UR5.` +M*+%-K8`GWIJH4T.1HRE6#0QLF,:2=LBAJK)D$`D?8U5!6+O!%,,G#* +M>=?,_C#X3(NQ):$"&3)3.P1NH/8>M?5554WT;'Z4&\LHKJV8%<-S4[5&O*&8 +MLK@VO#/SO/PF\M[AH7B\Z\RC!E/L0:5\,J2K#<'KTK[7=?#=IQ"WE`013C)# +M(H&]?)>)VBZ9/*J^/()Q]Z861D[5GDK-$719(3C8C(KU("<[9->I>UC5(TCW$ +ML,;#&6&X!'.G(>*:X%+1J#@Y[?:O0B/"0.2TIW`7]W/2AWD<=I&6(U]%.,Y_ +MQ69M/BC2W3(7=X)X_)&ZL.JBJZ+B%Y#)@N<=,CI5I#B=)\`+GL];<*,V-*LR]6/*GQP^",C +MQ'QG8=S3L2*,Y(44C<1#!V`I:;0SAF$XE`MM,9`F2!L,X%EI,OU(^E>XLN +M)B`5'0AC0K0Z498WU.VVH;XK2I<)@;+31J7XRL)$4"^+(-B<^53_`%J(O>(3 +M\YB@[)M2?#;1=`VJ]AMARQ@=J#)J)M\,D--C@NK8@OXG&3/+[ZS14FOHQM/) +M[$YJU_"+7&M`>7\Z4LDUY+VXWX*Z+B<\4C--&DNKYBV=_J*8@XQ'#,)$1HU; +MYT.X/M4FM@1C`I>2Q',4<=3)=@2T^.1J(+Z"Y4&*92W8&IO))&"Z^=1S7J/: +ML8;9XSE68&F(N(WMN`"QD"[8;^]:X:M/LQST4E^+-9!>)/G0V#_">=&8.4W4 +MGMC>LG_N4+P3`!F'?G6B&6,N$S+/%./:+&P#!Y",XSC +M?H:L`<')SCOTJK28-(ICE5@1C#`&FTN&'E9-/8C>FIB6ARO5!'!7;\JEJ'>B +M`.T&;Y?K4RV:#.W4=ZA:7(`G<@5F_B&\BLXB20TI^4[E2?17*,DLV,D[D^M-Q#.-J#&O+E^C348VSBN5 +M)GI1J$;4X@Q2T-,K2A,@P.17"=LFN*VU<>K$IYQ-IWYU9WDFGK6 +M>7,U[Z`4S'&[;.EIH*FV6J_M%(/Y4G<)MGM3L>R6=Z\F)"7R$QRQ0\,[^'&Q<8@DT[$& +M926Q@D@=*4\7\)(04!!Y%>0]*@UW+*,`8%:8R35B)1=T//.D8.])S7A.=/*@ +MZ0=FRQ/5)9"1[&JYS)$2&;/N<4+=!)(=:12!CGF1@X-#M;_*Z).8V(-!+GAFO39GB;:5I]H^.WEFL>J6WU-&I&I2-T +MWQ]?>D6DTG=2#ZUM_C+\/-Q<>#H!\,:]`'S9)^]9[\)#/A9%W_,5%)>3J8]" +M\L-\.+\,J!<`'8?G71.S'8>VU,W7#O#0F,\MP<N3VR:]2W.)2C9KHHKB)6=4`!YN=LU$V]R[#7(2,]5.11 +M9KVY"#+(5'+I1+8M,I99CJZH&_H:Y]OLUN7/)&.(*N)51O?!_G74@MXCXBPE +M2/4"O2$N2H0(PVRHI*2T$D;,=,G7(;!^U1+]0;#37UR@*PV@(8G+'+?G55W5L3I4E!S..='MR+]=4Z!,;L5)`44Q+;S13YX0F$!M$P,$ +M`@?<8%8`8SGI5%O5N)8V6-L.QP6%5U +M]'%:>$8SJ*8RY/,T.)`3X+VTB!"YV`ZCK5]:(JX(%4-E(&T`$;@;U>V['`W^ +MM)R<,;%<%U;$`;?:FCC&V,4A!NM-H<\JJ+`DAE2*BY\NU>!R<9KS8`))`4;Y +M.V!1M"EPQ5EZ4M<+@9&U<6\-[.T=LP$2?-)C.3Z4*8.K8$SL#S#;C[TIJF/7 +M)DOB:$J4GTG=19` +M?:BYJ.V_6H6F+M%GI2SP#&PZ4^%`72,]L\ZY@-RWH:^@U(JFMM63B@F$@Y7( +MJV:/((%0,66;:H +M9#MT)_E6W%K(OB1CRZ%KF)]'UTM<2G.!SYUFN&?$XED$%UY)#RSSJQ;B4$Q+ +M:QC?K6OT>1FY`Y/TKY+)=>)?R3="Q^U:;XIXP/`DMTDP +M6.-.:Q88A@W?>LV7G@]+Z/@^$IOSP:.`94'.<[BG5%4MAU7<9P! +MC>N?--,W9(N+#1^E,"A)M[40)&.1B(9AI;K@]*J7W@LN)9<;@_)]BB8^# +MJC;+`9.#1`P1"'C!+;YS68^&>+&[M@CN!(@`;?\`.M*L@+@R`DYSD;9IB9X[ +M-BECFXR\$U(2,,DWF["N$C25<'7G(+&O,4UZ]6<\](Q@U$MJYYQUWYT5BDK. +MN-#>8AACH>=19\@:<8SD#^U"=E`!!RW6AC7*2J>9)9 +MM`!\IW--`;8W&:[%:+$H&-Z,J#&_2M4(J*HSRE;L"J*-SFI``<@<40@$U[2* +M,$@'`W(H@F3I4/#',US0.8'UJ%4@I*,.9-+SV:2@]SZ5+!'?%260C_-0A27/ +M#9(O,B9`[;[4L$RO;T*Y-:<,KC!.1TQL*!+:1ODHH!]!0[0U/[,\;=FSIR>^ +MP%!>U+#H!GW-7C1/&_($>U1>#4#E!]JK:7N*:-Y8,*WF3UH<]A;7>9(G"2'F +M.AJV:T7JN/I4?PJ\P-^]1QXIA1E3M'R+B]K);<:N8).C%LCJ#OFJYP%N&5CN +M!6H^+X"GQ!*1R,:G'*&3]$*321*I5SG +M/,>"*'Q*'Q;,2#F-\T<:)K,7O8FUVN4+)W:GQC%H"V +M>0F:]A\1M67SWR:M89EBG+JV`&(&/2J:!Q#Q")M)Y]3GO5BA#`YV"KDGEO5S +M1(,T$@Q9BXTZ0WF'H*SW%63_`&^*33K9I<`=!6@GF,O`%Y;#=R<`#^M9PW"/ +MPN>-AE5;*D\\TO"G=@Y.J+J*4*(G!\HPM:&TGD?&B(:<;%CC-9GA6FYC"!AO +MAJL.(#B-K;$VN-9P%;GCO4E!.5!)TK-">+"T?3<0,H/[R^8&K*VXA;W*:X9- +M0_E6'M.`2WA1[SB4TK.I8CQ-.D_?85?Q\)6TE9+:XE:(+\[M^MO>KGA48VF) +MAEH]FN@'.F8^>U+JH!VIA#C`%)79 +M4AE6ZUV@!R!M46D.,`YH[%;24DP&1D?4T`W:*P4NH/3-1>%9-V4'IN*6FLK3 +M0?$1,>HH+&**+..0.-CG;J:)]:R\/$5LKEH5#20_Q*-6FKRTOK:Y7,4BMCF! +MS%&N"I0KH:`&.>V*EI!'(5'4N,Y&*&954<\5.$!39,IMWJ'A@\O:H-=H#NR_ +M6NBYC<8U+R[U3H)*0-D\]!GAU$[;TX"#O7-(?)Y$4-!J5%!%5/(9(K631CGC([4C/:I-&0PS3L6>4"Y8H9%R?/VXFO$KEYES +MC5NQ]^E.+%XP9!EL'((Z5/B/#!8W1:,`1R;8'('G48&92,:E88Z8P.];)34E +M:.MHL?MX5%>`<;-"Y##D=ZN+.^*#!.5/WJO`MY"?%F978Y#D4 +M7P6).!24[9)^U&\8.OD.?8TI.PTD[?:@78O''DS?$SF8,>0-'M90`,&AW4R& +M=2H#A6R1SS5WAOC^2_U/J)R!'H"ZN60>=09B#@H#@YQWI.VO;>Z@$L5P#J.V +M^<"C1D2R%/$)(.338JW2/-M;>PJ+^(<[>4GETI^.)$`"@#M48HE1<"C=,5MC +M':J,M$"0QMVSS-<`!&Y-3`^E>U8;"C+=A4(1PH^E<^8^09 +M]>6*((]LN?ITKIZX&.PJR@6D9WW]!L*X1GF-O2B;@]Z\<$5"`"A!J8)Q@U)A +MBHY&>8Q4+//$)!N-^]+^&PV!ID>ASGO4&&!GEBH4@#*=/,FA,@(!Z&F@1G<[ +M$53@RP@>^"?[U +MFIH[S]/4OZ:*DJH7EC,<:RLY;)"@L#L0*%(H%K*A.V*NS9B^X1.T>SQMJT9WR +M._TJ@E)6#3S)-2+LTQFJDOHI([9VD900-SS]Z]3:Z86*N=\YKU,#SDHN+ +M:-!\/326R75@X.I6$B9Z#DW]#5S;W824QR(2&V!JK>.:#C:RPKDC4'Y;IR-6 +M,2+GQ6(POKBD9H)LTZ)K)B>[L;"0L6+S:<=LBHB&%?/&&E&<#!S4I(A+&&QT +MR#WJ@O5:&0&3."=E)S690;=!2@T6G$8O#LRXA5>@`WI18?Q5C%([#4H*MZXY +M5%N*BYA6W(T(HP-N=/I;L;-8XHRK-DD9(./6KYBJ8O@REU:3._BQ@C2QQGEM +M5P+)?P<31'4DBE8WHY9 +M&T4HJPMDHN.!Q(YPP^;T/*J_B-@J6P2,`Y.<@\ZM?P_A1.J'9SK`]N8KBPZX +M0,$>8[&EJ5.T3CIF9X---8WJH^=!(P1[[U](MVCN80#N,5D;ZQCEA5T(CE`! +M7U]*M."W_D57."NU'D>_Y(J"I;33P6(!SG;V%,M`5A(`PO7N:Y;2@J.QJ=W< +M@P.JMYB-CZTJ^.RFN2ML&47\@!R.M6)D6*X([,> +MM=.6+=.U"T'7-,LD:-1S'WH=PRTF<:`O(C8'M0B[E2"_@!8^;L7F):;T! +MJFX_P1>):-QS##^]76D*06/,TP8PR8QRYF@3E%VADDFJ92_"_$FX +MAPD)/('N[\(NTM?CCB$4,JJLDNEHV4YN-&",437T#&=%*UFD8PJTG-9@[@$,.1`(-7SQ;D8V/2E7A'I570U2LI@ET +MFRWIN+;*C\(J?/*Y)ZEL?TJ)MQSB +MG<>Y!_7^:L;JW\O+;OUJHE#1MY5.:).PE;186]W/;(1*3*J[ZL;U8VETLUNI +MSYB.1Y[U56SZQI//&Q[T>(".?;8-]LT+!<;'Y6!&1@BDY-MR/7E^N]-LAQ2T +MJX!H47`H>.G-IJ_>!&]4>KR@ECI)\K@9Q6FFTM*$?#*3RZ&@W'`&CU2V'F4G +M>$[X]JU8YI*F=#3YX1^$G11OF11&P5CR63T_E0?#49C+;^AR/2F&7PY>3PMR +M9X%0>2:3F#BC_C;A%RESD?PL0= +MJY'6`*WWP]+XW"("=]`TGTP?SK$22+I8) +MD$[D^OI6O^%0!P=5<;EB>>Y!J-G+]65X4W]CW$^#VW$T(D4>(!A9!LP_O6+O +M^&77"I-$ZDQGY9`-C7TC&H@@^]!O(4>U9)$5D.Q5AL15(Y6EUN3`Z[1\W1P: +M85QC^E$XUPP<.99HFQ%(<:6/+[U7QS$[@U3B>@Q989H[HCQ`P?6ARQ!AMM4$ +M=CUVIA1YH:#W5OQ=_7V?64.<'IBIU6<,OX;R`,D@8>AJQ8 +MZ=R=JW)V>7E%Q=,E7"0!OBHF0#E]Z!XV3D+GWJ611L.-3^B]^IHBX4'3M2K/ +M+GOZ5(2N`,I]C4LCBQC.`,5W8$]?K0Q(".QKQ.YP15@4$(ZG8>U!8Y.PKI8* +MI)8#',YQBJJ]^(N$6.?'OHM0_=0ZC^51M+L.&*[,,;;:8-B*4\T5T=+#Z1J65Y^E![[O@Z./T/'53DV_TZ-G\0_&\$MBT'#'D\5R/VN,$;YVK#W% +MS/Q6X>XNI6EGV!.-Z6"R*V3H(7F#UJ<%QX%UXGA@+S"$G&0=O>@;;Y.QIM)B +MTT:QQ_W!.C1%D.H,,Y5AR/(T=I\6ELJZ5*@Y(V))/6KBW>/B%O<-=6^KP82? +M$4X.?\` +M4^>\1$T7$IHG#`HV,8Y5ZKGB4%YQ;BL]\+81"5LA-6<#85ZGK)%*FSSCQRFW +M)OLUO%8V@O1,@)TMN!U'(U80P1&U8!"\978!22<\N5,<1B5KAD_B0XP/6A6L +MC0N55PP50>H(S_D5FS=C_3F]K(+!/:6X*KXD17IOBJ7B4/XQ2ZY#`[KG\\UJ +M=3-:##J9,$-I;&?I5%,C)=`JK#.Q'0BDQ>UV=&7S7)7VEH\*KE=39R21DK5L +M;KP[=A<2D1@?^-"!J]#UIBYC\/A^4&EF))/I6?8%WQN2=\;["J267Y,S;"<* +MB>Y$NG`!.FK*^4"!8/ER`3CI59:Q3^,LNDX4X4'I5HNA`6D7Q)#S[4N?Y9Z'H:9\4NNJ-,,/RJLO$:-_$ +M3(D<]-A4C&[13QR["\4:161(%U`#!'3%!LYV2?$@TDGGZ^M'C@=F7++AU!4M +MM[C-5_%W%O$8S^S<9.-N?<4R'/Q%M;>3;6-P^C2>=,WMP8(2[`Z1UWK!_#_Q +M2,+#?'0V=*RG96]#ZUNA>1W%H0<,IY^HI<\;A+E%QG&7*$K247N);:-I,9W4 +MC/\`.KF*UNUU.Z"!5P6>=P,5G[*V2RXPEQ#Y"6(QCGG_`*JXO@]Q\XEX<$X-JOS2:,%CD\O3UZU2W9YKJ4D?,2<`XVSC;GM6_C.%JNX)PV+A]IX2 +M.[N0`7=LDX[9Y#TJR5<`#M2LT]\N.@\<-D:9+`U;4:-O6AE:\K9Z_6D],)\C +MJG."*F5S08VZYYTPIV]*:A$N`93[4$P@GG3A%0""J:*4Z%?!&14A$!O36#7- +M(-3:B][$IH0Z'UJFE@*LV!A@*T97?:E+BV67?K0M#L>2N&4,"%&7<\Z +M1S&]=2U;Q=]M\T:9<+[4-CF^1I`'@U;4I,NY^]-6HS;+_P#44"<=:@N#Y*"< +ME;M!TYFKNU?R#;-4DQS?X!W4`_G5M:G]F"*8^B3[&KGA]G?[W$2LV,!N1^]4 +M-W\+S`$VLBOV##2M +M*!63Y&!YC!KZA@,"#@@TI/P3AMUDO;`$]4\M-CE^S=#U1?\`R1_@^?PV_AQ, +M[F)N7E)S1U"')T#0._\`BM6_PIPXY(DF'IG_`!4XOASAT!R4>0_\FVJ.:8Q^ +MH86KY_@R7#^&37DN0NF$$DOCI6SX+$(HV55V#X`]*G*J1)H10H'(`5+AV!#( +M=7-LXZ>]5&3E(YFNU4LT>>BT'(D#`!VSZ4.92R+N"/7>B1Y(Z`'Z[U,Q9)0] +MP#C>GT8SDGU%4<=LZKJ!V]ZU?QE:LKVDN/*"5.W4XJHMX5, +M?(T,I-(]%Z>TL"H0"D<^5-QDHNGYNE,>#CF:]I`\I'UI3=FSQ.-ZY:WUUPZ;7!*4.]+G^#Z1%Q*]G\QX9=*.@* +M@?S(H[W5[X#!+9T<@X#$#\\U5<%^,+6ZA6&\80S]-7RD^AJ]\2-NFH\ZTIVN +M&<#-CEBEME"OY,VO&./6$CK>6!N(\[&`ZL?2F8_C2U5U2:VG1F."-.X]QSK0 +M*(WWP*Z;:%GU,@+=_P!?6HHR\,CSX)?GC_AU_N4=Q\;<)BCD*&661=@H0C)' +MJ:RMY\><5F=A:K%;J3@!5R<>YKZ*>%V4C:WMXRQ).=(SFJV]^#N#WN6$'@2' +MDT9QO[54H9'Y-&EU&@QOYXW_`)\GS*ZXK?WY_P#>7T\H)^4L0/M2;,J*5C.. +M]77'?A>ZX(Q=QXUMG`E7E['M6>:,..F:SM.^3U.!X9P4L55^A)9XXX3'<*&0 +ML#@W;LOK#BD/^VK: +M\0A+S[&*7(P1TW'+%`CA5)A^'O8DRVXSEE]"O6J&.>6VG5AY@IV/<>E&M1%X +MS2.2`-QCF35-&?V=MN/D8N"#Q0P>!""3COG_`)9JO?3%<*,`E6PW8UJ;KAME +M>6BWN<+X7-Q&\C@C7S.<*3^N5?0^'_"0A +M>*XNY/%FA^11\HQRQ1QBV^#/J]9CTJY?+_DJ.%?",9X>D]U*Y8#!B`Y>E)_& +M\RB.PMHQA5U'2O0:$[%B'7Z\Z^5?%'$TN^/2QJX*0_LQ@]N='.*C +M'@\W'49=1EW9'T)1%B#D8'YUZAQW*X^8UZLC3.@FJ-MQ1S%F#O_2G..+B!FP3@9VHD+,]NLA'S*"WEVK3F_(S>G-[&Q`./ +M'=`XSJP0.^*(553YESWJNN8WL^-9B;RR(#@]#GGO3DE_:1/B4AI!@\]JS2B^ +MD=93^-L5:^6Z26.)OVB/R?(R/2JI$FBOP\K#0I.V.=,SWZ:W%N@CU');A",YR=J=X?P298,R:D +MD))P.6*[<6OX=@0Q96Y'K2^%PAV/9^*8*R@:2X,487)7.^VWUJ5Q`L7$TCD9 +M714+-CW]:6>X,%Q&Z`%D(;`ZTY<03WMS)-;P,J.`%+[>7%4UY)EM/O@4XFPA +MM2JII:)-:]^9ZUE+B-N-\15(B?,=R>G>M=0QO0?AOA6E9+ +MK(!?.E1T%,C-8X-F)Q4N/!G^/\.98H;6%3(P\JJJ_*.M7?`.`<2L[02'B&2` +M,PD%E'US3MM&;GB%V=&"%TG*[DU?\(A7\*N2HRO>@GFEM407CBI;BIMY5GXM +M"A/F3)8>PK3HD5W.NM])?H1R25HNYY$BB+;*H'M@5E;_X@X?;*T\]RH7.D!3DGT`K* +MW)^*_B%V@N"EK;@?*#I5OL)Q^4G;/"-HFRHV-,*-0 +MS7-6OG]:(@.:SI#&R.G8]ZCCS4QIR*]X7:K:`4B,>QWZ4PC?:@,FCD.521ZM +M<`M6-#>NF@H_K1-0Q1)BFJ)=*X:YFN9VVJ%4<(ZFAM]ZFS9S0FQUJAD0!'<4 +MIU-@XC^F:0N6TACT%1D +MAV9:]6:+BGXF/)7`5E[^U7UA<+)&&!R#M26C7G/4T6"%H6U1C8].AHW*T$XE +MZA[?2CKRQ2=M('4$4T#MWVV_7ZY4*%M!5-3%#!W.]3Y40MGB:`S^M$=L?WI1 +MVP35-A11"X;8U*V7"*H90QVW/+^U+RDOI`WSTH\6,!AYB>PW%.PKMB<\ND/1 +M%N6H*1MD^E-(YRH1LL>^U**S^*23ASN>X-%0:G`92/4'&:?1FL%Q*W%_P^2V +ME&8\[,#R;O60?AU[9DYB=T!_\B+J!]ZVT4+W#$*V5'[P-'>.2--*(=AC-,CA +MWJV.PZZ6G^*Y1\_U.=A'(6[:#4X^'<2G7*6CA?XGPO\`.ML'<'D0.YJ:AB<' +M)]Z):6*[9H?J\_\`#%'SZ2RXBL[0F',BC455@3U]:765HY2LBLK`[AA@BM'\ +M0>-PSBEKQ#!\!U\.0CH<\Z8ON'1<6MED5E$P'DD[C'7T-"\"Y2-6/U&24994 +MMLO*\&7<:U!%+R0YVZ=#3+K):S/#.I1QS'?U]:\V"NPWK-RF=:+35HJG7`() +M`K6?#''G#)87CY&,1.3N?2LS +M`BY`ZU/)ZU!6!]Z)CMM3#.Q:],7X&?Q]X=!U@\B.M?#"0KDKRR<=<"OI/QK\ +M0);6]+O`"#CRL.HVS1HP[`!$9AC/*@LS/L!Z5:LMM'A=7!B,3 +M,=('>G>&<#ON*,?PMO)(H.DLHV!QU-,6W`KNYM$DM;*>635EGT^4#TKZMP+A +MB<(X/%;`>?&J4\\L>=,A#<>>;R3?)\Y_U#^,/]EO#86L +M#-=F(,LN0`@.=_4U\=_%7+N68,6;?)WSO6K_`-0;EKSXSO2,E8M,8QZ#-9Q( +M';]UOM0VNS1CQ2KAG8[BZY*I%>IF.WDP?V3Y[XKU`W']#;''*NSZ_P`33Q(6 +M`&=JI(&D+*LTCNJXSN2!Z8K07)#C3G?M5?:QO^U94.K4FY% +M&,D+\343P6]V(S'%YD&1Z[?RJBD3QI&D)YMM_*M#Q*"=[-HV8@*-85L#EOR] +MJIK>/%@7SC"G<=]Z6CHM_P!N@<"B/$NE6//##F*U-M<120),B@(1G&,;]OO6 +M5C'[-?-D8VR.57/!9#J>'G@:P#R![TJ?V:LD%L31=EGT88@9W;&W_P"H]*`T +M:W",K,#J)\PJ4F2A._0=_K0Y)D@3+NJ9V&=\?:E",:KE`[2W_``@=G"%L +MGS$?*.E#/$`Q,:ZI)%Y*@U$^_:C1V,=T!(QEG+']\Z5/KI%2EB6.)@H$<9.% +M"C2?M5TBI2W2Y[*.[:Z:"3)$`88*_,QW[0I&S9XN)DQ_)+C(Y;@8S1R6Z#1&JY^R[MV$7%K@*-M0V]*=X078R*% +MSAR?IF@<)2/\9<-.WG8_ETJTMT%M<.Z``,E2>-'LDG,#D#7K34`-\T4OM!JFN"[C(YU[.,=?I08FVQOO154OOW_7] +M:472#Q;\J83EDC[T"-=O:BYP:M<"IIQ4N%*S+XC[NQW-5M_'XEU;P#?G:I&.Z1>"&YE@L>E'ECZU/3B+;MDFH*-+@?KK_`&JB,9*,G[6/ +M_T%*2W07)SL#5I6R^D6-JH>8ECL.E +M-R0*F&1<+UTYV/K6:LOB"R1M#S88GM6GL>(6TR#3*CCD1GI76AC2@HG(R9&Y +MN7@)X:-+OKTZ<\]_6FD@C=_#PVDYR"QQ[5Y[=QIDA;*>FY%-10^$B^W.@CB= +MTRWD5#$:+$@P!C;E7F(ZG/H*B26Y-GM4,S9P#C'I6I<<&?L(L08:9@.PVH@MA^\SM[YJRA*^LH+^RDM;C!1QOZ5BOP/&^".T<:&ZM5)P +M.N/YBOHHB5,Z0*[X8(P1D4,L:ER:<&K>%.+2E%^&?+[RZ@XFH#R"*=?W9A@J +M>V:3?AE^J^549#^\IR#7TV;AMK,Q\2&-QGDR`_TI8\!L2"$@\(_Q0,8_Y4IX +M6^S=B]1CB58[2^GRO\NF?-8N"\0E)\-4=NVK>B_['Q61PGX,Y)YY%;B6QNK) +M\VS^/@_+(,.?_P!AL?K]ZE!QZQ>V\1G5"I*N&."#V-#[V],4X05(Q_T>KU4W)QY?WP;N>2*",O(X3&^&T7Q6 +MW'B`["L=>\:ON)G_`-U*S*>079?M2(9.>,_;'\Z5/,WT=;2^BPA\L[M_069C +M=2R33OJ=SDFBM:V7PY\%2_BEN;^,Q1 +MIN(VQDGM6VX3PZ#A=@EK"H&D98XW8]Z>)K1##YD>0Y#'E@$$_2EA*%M)'.W.F3YED]3BLYQ[B2< +M+X#>73L`$#*H/5N0JFZ0R*W.CY5<2BYXC<3LCB:1O=P,75LGARM*)"QC* +MZG.W+:LO8%_!DB)!0'!U;\Q6IO6A:%Q(R%3G9C@'8UC(7\.=27/AYP0#@>AI +M%''F[@$ENF6QG)/S>F>] +M.6*I8V_AN=3.GI]*"70]Y5+'M78_(=(,C?+_`#/I5?*IG4LY4@].F*E< +M7?COI4:%390:4=&0:HV.ICNIY'UI=`8^%;#P7;1!@'/D&0IW)Z;G^M,1/*Z9 +MGTMJ\A6WL;H>5E8E2,>]( +MSXMO*`QSM]9N+RUL-.J'ETK,74)MYSD;-DBCD#B?@8M\L:L84VVJLMF!&QJ +MVA;R@TOR%)\$]'E]*Z(\;;X[FI!AG;ZU-1UHJ%6R(BZ=*EHQTWHZC&P&:Z1_ +M>BH7O%L=.5>T4734*H),$R&H$XV:C:_2HR+K3(^E4U]!)_8J\43\P#[T/\.F +M3IP!Z5&5M!))VKJRJ5.XP>U`-K@EX2K07(&<41GUC`.U+3R!(7;.,`[U$0KK +M=O'XE/(=POD'T_[J]@&!G;&:H."KKC+MC+DM]ZT$7R5&RG.Y\H^NU9[X;A5[Z'6K*-R&[D=*=B50< +MC7IX[<7Y?KT_7)",B#)S!HZC.?O]*7 +MCV7VP:*S^&NOMG(JT+D+7,\4>5?`/7)%)NF`3&^.XK-\5XR$XBVO.$YCNW\N=1DR]LRX9V?RX'.J6WXBER1 +MJ.S#?/YFM-PA!*^VY7`QC.>M-6/:T!.?QL>,]MJ>AP90FX['&,FFILPL%!:?A0([.:3 +M4/F8DD?GTIQ+_P##^68@?\@/+]J]H(1E4Z.E1U%,$'8]*41)T)958J>9=AOZT03`^5_P"G]*=&28IQH=!V +MRN_<48$$'H*2CD"N5;=3RHNHQ'_A16#0P1CVKF3O71N,@YKGJ,;40)`C)SMN +M*\,@CO71R/<&N,0BLV>6^:@14_$-XW#N%SW2'SJN$/9CL*^0J&D)=G))R36X +M^..,HULMBK>=G#L!T`_S6(4^'$"=RVZBLF5W(];Z-A>/3[WVW_H<*;>6H^(% +MV9/L*+&QVP=SON:;M.'77$9-%M`TK>@V%+_0ZKDHJY.D(HT3'9,GMBBJBL<: +M-ZV5C\"-E3?7"HI_,V]JAD`^>3S-^=,CAE+]#E9_6M/BX +MA\G^G1\[X9\,<5XD08;?PXB?_))Y1_>MCPOX$LK8K)>R&YD`&5Y*/IUK4[C< +M?:I*X-.C@BN^3AZGUG49N(O:OT_W!11)`@BBC14')5``Q4U;'L.8-3<:@#GV +MH1(V/7E]:<]`=@0#G]ZI.P_K2 +M\K'\/GJ3M4+2/1'4S$]S7RO_`%6O)?!M^&1$^>0RMOC(&P_/-?5+;:-F[U\7 +M^-''$_B>?$@T0*(QMVW/YF@E*E8_!CWSHPPLKG&<+C_[4>.VG_B`'H:MUX<# +MRF7'M1EX;I_^0?:D/.=2&G2^RK2.48R0>X%>JV/#<_\`R\O2O4'N)^1WM(^L +MO%JVQ[>M9KB,DOXQXXY&4(=.5/,?2MP\!SR(]#60OK>6WNY&FC(>1BRL!S&] +M.SITC!Z7**R/=]%>L3?A9'DU8"L0,G.<3.9)2$0E1G<8+QD@`Y9B1O]^=1IMBL?Q;O +MMAE,=UC7S7<#JIJ$UT(`4?2V!G"G?ZTC+<-,^(MF'.0;$TS:\+N60,I4=2H' +M+Z\^511^QDFX\O@"L=Q<7`GSDBE:07/M3LW#)_!"""7Q<8P$]?:BI^$)]V*=-F?MDDN!*TI!5<``577L&FVN0! +M^Y6YM_AGB!MP1&J`Y.&?!S]*A_Z5\1F%Y(N#SC7/F^M6H2OH7_4XE?)\XX9; +M9LXV`Z?UJS@:2V.P\AZ8ZUH.)<'M[%E6UB\-!S49YU6-!M[>E*RMJ5,+%..2 +M-H?LKD-MT(VJVB8]]ZS$3&"0[>4_E5Y;7&M`":QSC3M#$_#-':OXD>#S',4I +MQ2R%S;LO(\U/8U&SN`@.K84\A\9#DY-1.T*:<96?/;;X@CM.+OPVZ5X94.`S +M?*>W7K6LCNAHSJZ5\N^)N(3?^HKVZC+6A0M"20&8D`KC?D"":[P;X@NX9OPX +M:2:VWTLZXP-\8P>W2M<])<%*(G'J4Y[9'U.WNU=N>,58Q-D*@;5V +MVQ6IM;O4!OSK%3BZ9KG&^47"L">=2-!B?(HHY8HTS*U3(L`!FEIF.,;CUIH@ +MXI65"VXH9=!P$WN!$X+!F13Y@IW(ZTS-#;M9M/:WDA.G*J3S],&E)82P.#M2 +M<<5Q;,3"P*]48;9]*,>X*5-,A=07CK_YLL1U`VJO4<4MLJR+(O/*'I5X +MMSISXZ,/4#-'BD@N%RC!JM!MT9_\?.N0T+@]B*KKWB%Q*C0^`ZAFQJ8;5L6M +MXW!U*#]*6DL8CR0$=144DNT#PRKL`54`#"D8]*O`-,6QYC-"MK.-.2@>]$NY +M!$C?E0OD)NW1D?B>Y.8X`BVG!.,8T_O=Z6*Y/:G'7&U!" +MC-94,6TMS>/H7E@C(YT@."F1&,B;],;5OQYDH\B)8U)V +M9"T@E6<+@LH[':OI?P^5CLMB0SGZC:L_;<(-L&>0B +M>12Z`EC^%&[M'6W@\7`U$84=!FF(XLHK/EG<^4>O<^@JIM[M7=/$!*C>K>WN +M`^7+-IY'%1,RM-#"+%$"FEI&.3D;_6I#2S8!RP],8%>CE&&*GS-D$]O2NJZ0 +MR:7'F8=-S1`D3'K8ZWT],+N:7DBC_P#C274*=QJ`[>G:NDA0=*')]<59+$8R +M<%74J?L::B?(\-CG(V/K0)D+28"J#SP'W_.C!,ISW&V:="5\"I*@\4GAOX;\ +M^GK3!QL12H(F01R?,.1'\ZE'(T;F*7D?E)ZTQ,!JPI&&ST-4WQ!Q).'\-EE. +MY4>7U/2KHD'%8SXWX;?W@B:U020)DF-?FU=\4.1M1X-.BQPR9XQR.D?/G+7, +MSW%PY9F;+=2378_%NKC1%&SL3LJ[DUY89=?@>$=9.,$8/VKZ5\.<#BX?9\OV +MS`&1^N>P]!66$7)GK=9K(:2"=6_"*CA?P1,T"7%VRZLY_#[\O4]ZVEC;V\$6 +MBWB6(+L4``(^E$MW(R#S7:CE%E.0=+]"-JU0@H]'DM5K,VH?]QD&C`'+([?U +MKG/9QD?Q#G]J(&(VD&/7H:XR:=QN/3I3#(>61D&2=2?Q#I[U,2*3@D4$-V.E +ML<^]0.H%M1!`.=ARJ$VC@.!D?45%U5AD;[_*JB]XK;V\[:YHP%[L.?:J:XD.!'&6/T%?GL\1:XN99W.HR.7/UK['\:7[G@]Q;Q#4X320#S8\EKX-+' +M=6,NBXB=&_Y#8U32EP-P/9R_)HHKK(YY]*:2<$/*7*S`]5W$;47-NP7'BKO&:>52X!S +M]>8J?@[9U,?M1CU +M#U/&0,@@ +M^^U(S8MZM=FS39]CI]&.>(,M=MG:%@N-NE,/$T;%&4@C8TO<0&XM9D1BKLI" +ML#C![USJYVLZNZU:+>"X4+SK/?$_Q=%9V\EE;F3\4C*1S"L.V001M60O^+\3 +M@B>UNKBX5@I!C,8#$^IR-CON-ZI[J-C+.1)$P`4920GG^ZH;!('(^U:L.BJ6 +MZ3,6;67';%#*_P#O;V6=GF=4423R,09%&P8C.S=AO6^^$/ALK$U^T*&WG!>$ +MA]1QG;`_=VV(WWK(_#'!TXMQ.`R6;O8-Y92&(&K'//3&>76OM7#[:UL^'Q65 +MNNB&-=*KG.WK5ZK+2]M,'3XW?N,Q'$^"RVZA5CSI9[Y7!.=O +M>J^XN5U$#!.,GIM0M_1<,3\EG^(A8XVHGA!AMN#5;&Z^&I8]._.FX&"QDFAO +M[#<:7!&X0:?ZBE;%?VDW_%Q@#U%'GFR?#0:G/(=:-:VWX>/]HP9R`PO)>IH.AV/E8]`.=;]WVY[4>>7RH=KY-R4 +M2$KXR.]07N:B,R2=_:F4A*@%\^@%9Z,)R-)2Y<#!.QSO2\@YD"FSN*$8]62"!5MT1%/5( +MQD'GFM-X2XV'/O4&A#;XVJ*;70REY*B&YN83N=:_\A@_>K.RXBOB*"=)R-0; +MK7&MAD[4K+:D*X"FD@@[=!0 +M8'#1-(1C.PS1X^9`SN*;=B*I`"L0'EBV]1Z5.T,;Y08#)3.1LP;P +MG.X^4]Q1'195\VX]MZ@56>,$'##<'K78I"3H?9Q^=1%_JA"7A4#SK,T2-(IR +M'(W'UIZ-`BZ119-DSO0P&YD5:21;FY+E@W&F02#D>=%SL&&QKCIE,'G48CE2 +MIYU`0Z39V8>]2*X&4Y?P_P!J68'.QWJLXEQN/A5LQG<)MS/7TQ5-T%'&YNHK +MD-><2@AD:+4"Z@$IU'K5=-QZ*.)I#+@("=1&-JP/&/B::^N_%BR@7(5@<,15 +M!+=32ZM;N03D@L:3[C9WL/HLG%.;HU]Y\::I2883G.I)/OO62Y=:+#*JL0YQGJ.8H-S^SI_],TT8_B?0^*_%"CA$9@/[>8#0#^Z1 +MSS[5FH(1,YEF;Q)&.2S=35#',6N0NMBHSC._7>KB*=5"DY-"FX)'=6?A7"C2VP+'?/0@53S6\D+^+;N8W[J +M<&N1<2XG','\?4X&!XB@@5I4K.9/TV:_[;,[?VC<)OGMY%SI^4]QWH`O`/\` +MXZO[^VFXJ5:XTZ@28-,1R!QMD'J#S%`+$9\I.*"\I!R!@]Z +MUGE1TD'/>EW52<=Z5:X9?WF^E!:X<\@3[U"43EBYE:`1D<]^E<;\3)G`84$Q +MW"N&R3W[&JLLTW"[WQX0CGSC9J72F%<$8R:!+%OE3]C45<]>8J%U8VPVH;.*DKY&V*GM]/6H +M"+:!GE5==Q.)#@94@>GI5QC<]1GW_73[T"1`<^NPJ!)F1O>'1W*G`"R#O_*L +M_/;2VTI612&_G]:W5S!H.=.1]Z3DMH;B/PY4U+GGRQ6?+@4_W->'4.'['SCC +M'!H^*0ZT*1W2X"2,NH<^1%9>S^%^*07+G6$B8&%P7^>,GS?0_0U]1XAP6:WR +M\698N9QS`]:IV7[TA9,N);6:GCQ9GO03@-A:<)B:*V5@'8$Y;)K102$#8UFH +MI6C?TYU;VUQE1WK#DW;K9MBE5)%XI#IM09(@U.##Y[T*Y%OXE3<\/ +M25"'4$>U4=QPN>V)>U8D#]QC6P,?/(H$D*L&R,YJU:#C,QCC&,O-,9O-. +MKHHR3JQ4UF,@TEO#0=MS55`EWA5DAF^D9IY'BA(C>$Q.<>:48J>U+Z![G)#DQJ?*#G[T]P?X?>\C%QL$(8T\O\?8'X82*Q==9!6<9'([Y[UG.)\-%K +M!J@7]BO-1S7UI[X=X@UQ!X$ART8V]16?+\_F@<\(SQK)CZ7@O8D"`JHWYDT5 +M4'H>E14@#]?KO4]6!OS//-+HY]GB1[?K]?:A-NVU3+#-65!ZG?>IT51S0 +M-ML^O2O$9SBI+Z5T;'G0]A+@'X>!T]:]H[5(L`#7B>E,` +M;[UTA0I)(`'.HD0JKF...,O(P50,DG;%5=E\46]E=A`"T)."</T^,H?W?)]=LN)"X3,;JT9&K(.WH: +ML+:XW/,`"OCUAQ&\X7)F!BJ,=T;Y3]*W'!?B6WO%(/DEP`8V/Y@]: +MG3PW*/*-@LI<$-C.<;'G0'90=1)!U#GSQFEH[J.5,JP4Y^9=JY<['M1TD*\CD=JT(S-'9`8FS^Z: +MZZ^*-:'#CM1,K(,T##0OJYK5D06%Q*-+;,.8HL@.G8?XI=D\0>)&<..W6IPW +M`/D<88?G5IE->430;=P:$!IE(Z,*F_[(Y_=/Y5YV4^;/+>K(C/\`Q-QL<$X> +M'T>))(VA`=A[U\MXGQ:YXC,9+B1BH8Z5R2%K8_ZBF9I+;"-^'1&)<T'?UK+/F5'J_2L&.&%9:N1XL67(R0,9/05T'(_K49[A!%)' +M`#'$Q!(9LL2,XWQ_*E5NFTC3&7]]JE'56;_RX&COFAMD$$^U!UW,F-(\/OCG +M4UBE8CQ')`Z5*HIY4^$@D3$R%M]MJ<29EP,TNL>D``;41%R<'?:AE3!Y'HKE +MPO+(/:F5N,@;TK&O/>H."KMII-)@T/'#@_HTNT"YR!4HGT@YY8ZU"2Y5FV>H +MK\$J@PTA>6]>\554CE2,UVB`Y;%5DW&((\YD7[T2QN0$I1CS)T7IND16WSFO +M5DI./0G(U$>RUZFK`Q#UF!?XD?HQ@AR&S]*@8XC_`-TVT(.W>A^#&.U;:/%V +M+&%>P^@KHB`R<4;2J[`^X-1.W/GM^OO5%V#Y`_;]?KO4&P>='`U'(`Q7/!8] +M,>U6019-MLT>PN6MI<,?*34S`0#G'M2TB8-0AJ(I%D4#5M49(]\C8U46%X1^ +MS]11L^7 +M]&I=/UZ_Y_7.`B\B9Y[CI57/"8G)5/+[\JNR,GWH$D892"`1VJ!1E15KB0;$ +MYZU5<1X/%U"XJ2IC(R<7<3`7%M);RF. +M1<,/L:];SE&`S6NXAPR.[A(("N.3=JQL\,EM.T3C2P.,?UK!GP;?V.GI]0IK +M]2^MIPPJRADU`?TK-VDI&!G%6T,N,;^U8.F:VK1;9!&M!)+`)4WQ\V.>:Z.FS.2VR[,&IPJ+W1Z/2\!,1,G# +MI7B8;ZM'>.VO4T2H">G]Q6EQ3 +M,ZFT[9\LXEQ63AU\T"6TKH`,,_E.3TQ_6JV[XK/4 +MA]);.`%)P36WX39FSL51MF.21G84MP[AT-M&I.'<;ZNE6XW';M6/)/=P:-5J +M?<^,>B,JK)"R'DPQ63BF_P!IXJ"P.E2%;U'*M=IJGXUPTW$1EB4EU&"!S(H( +M-)T_(.DR1C)PETR[CGRH8';&1CKVJ0E)]ZRO!^+B%1;7;$`?(YY#T-:16&G* +ME6'IN*"47%TP,V"6.6UAU;)U$]$"CZ5X#D!RZU)1G>K)9'P]7/-9OXDXLD$;6,+%IF'[0 +MC]T5:\;XHO";#6N#,_E0?U/M6%\/Q?VLK&5I`Q(4\CZFF0AY9T-#I]_]V?2Z +M%)/`U+YF4#GMN=N=#P\;(2`<8*^HJ1C5I7R&`!`P#DYJ+1L(2S$[?+CD/2M1 +MVJ.R/K8G2<#H!L*A']6MQ();.("3Q#XNH>HQ6)M[7R^(PY\LT[:7L +MMC.C'5)&I^0GE[4,9K<<#5>GQ=O%_!N;>[5!I*D;=#M3L=Y$QP'QGH:JK._M +M[Z+Q(G#8^8'8CZ4R51]B!CO6Q/Z//R@XNI+DN8Y@=\\^U,:L^WM6:2>2S<(Q +M)C)V/.K6*Y!',`'E1)@.(UO`VH;IU':BN(ID4Y^HZ4IX^-C^=`>Y%N203X9Y +M_P#$U95#1G:+]G)N.C=Z2FO3;-@ME._;TJNXAQ>*WC8R,`@ZY_E62XA\4S3Y +MCM$"J=B[C<^PH)32->GT>3._@N#2\6XC"UNZSLOA,,-JQ@YKY3<1%IY4CE!B +MU85AGE5G(9;DZYG9SW)SBH"`+G;E27DY/0Z31_T\6MUW_!7Q66PYGWIE;3`W +MIM4QZ472>1Y4MY&;%2$A`,4=(D/)11F4?6N#;(-#N;+0-DV[T-04Z'%&!YY[ +M4(N=6E$U$\MLYJ(/QR$#;]C0WN$B!4[N>0ZT4<*XI/CP8#OMDL-J[P[X7OGX +MY##=QR+$'#M*#D$#M1QQWV9IZG%%-[EP0?AW$W>-983`)-U,AQMWJGNI3%*\ +M<];S_4&\6TA@6(8DG4J&WV7K]:^>I&K+1M;71S,>NRY5?17RP- +M<-E[F5OI@"@KPTD>5\^W_=7(MU/_`'1%MP1M5^\T+]N,GJ>\_L)8<7T?H#P)-O,=^6]0\%\X._K3Y!"YZ@U%O,-_H:V +M'F[%O`DQY`"3T+4+$@8!T"_6G,%>1^]<)##!&?2H2P:,H/+IN:D3O0VC./(W +MWJ&IU."OUJ%G9%)]J3D0_2G3*I&XQ07*=Q4(A$C20RFK2QO.A.,\QVI&1<\O +MRH.2CZEYCM4+[-2I#CW_`%_6AL@)`(YTE8W@E3!.#U%6!\PWY4-`]``3$3S* +MC;?F**KY!(-<9=(R>5"88.I,@]Q4"[&3N-AFAD[8Q44DR#JQ[YHI`9=AMVJ` +M@716&])RPLK:TY]?6GF&`>5"9=BJJ*4$>E +M'632:R&AHM%<,!WJ>*1BEWYD>U.QN&'\ZM`-4"D3(-0L&,5_X08J)!@8/4;T +MR<"D+@-'(LRY!0ALTS'+9-2!E'?%Q9?&)LG4WV%<$9TEABBE;G3DA'![[5`M +M*@SX+#O@YKL'(5DXKATV;=<5ZYMK2_A*31HZD;JPS2[3LI\T<@W_`(:AX[DY +M$3>AJMR+4>;*JXX$UDA-J6DA`SH)R5]NXI!6P^"#D=.5:(R7#C"C3[U5S\*, +MMR)#.XD_A09EFXIA\BL.AGA;YF3&V.5-IQN>V&=7BKGD:K8_`$]!-?@[-@K`G;?M^OM79 +M[B.UM9+B7`C0?>J*P^([6X<1RDPL>6IMF[TG\4<2,LBV,3KI`#,1U.^/M5Q@ +M[IB,>EG+*L4&*W(2$'!?EDTU;QQ?@YR +M[I@J47.QJM3QD`C\+)?Y=2\CZ4Z*7\'H(**^*\#T%MX,/XF16;?)//D>=*:$ +M`=Y(1S_E5]9VWAQ:C\S;GTH,F2NA.?+M7`%H!@;8`I +M26(]N=6[QXZ4M)$,4B,C%&14QO-:S"2"1D<=5-7MC\2`_L[P>&W+Q`-B/7M5 +M=)#MR]\TK)!SQFM./+0&;3XLZ^:Y^S;B:.XB&EPZD;$'(H,=U):/I8$I6*AF +MN+*0M#*R=QT/T-6]O\1(X\.]CTGD)$&1]1S%:8Y4SC9O3,F/F'R1KX[R.9,18Y8@A4_B]*J[FX@BM'O$F&A1G5&?FK&7-_-?W'C3R%FY`'D! +MZ4NZ`:\66HAB3RVH"'AY<]1[5T[G/Y5+3L,_0UQB-)JK)1$MBH-)@5!VI[A +M'")N+3X.8[93YY-.WL/6CC&RISACBYS=)"]C97/$K@16Z_\`V8C9:VG#?AN" +MSC5SEG/S/WJ[L+"SL;5888BB`( +M_P#LK(X(X0VA1Y<$?0[T=H=4BR#?'<D[[5ZNK(_8'Z?YKU +M#;#I'WA;I#S4@]B*()HSCO0FMP>OWJ/@D9P5X&1I89#5[2:65,GG@U/ +M1*O)C4(2*/W./3&:$T,G1B?>B"21=CBN^/MN#4+%&@?D5^HH;1.-\`^W.GO' +M3OCWJ+:3N/RJ$ME:2ZC;S#L10V8]5^U6+`-UH+P@[#GVJ%IB:2,C!U.*O+.\ +M2X0`C#CIWJFDB93E=QWJ*ED8,I(J%&I4Y.1^OU^NM0,88<\@TC97XE&ASAA5 +MBOF]:$H5:,H<@Y]:ZKD$C8>U,:0?KU_7Z_J-HE;<#ZU`K)@ACON>HJ)7?_%! +M4.AP&V[$[4PK%N8YGE4*`N@;I2DD9!Y58$%M^N,T)TVWWJR)E4ZZ?057<3X9 +M'?KJ&%G')\<_>KJ6/!Y$TLP(/(#TH9135,9&3B[1B98;FR?PYT9?7H:['=$8 +MK:/&KH5D0,O4,,BEQPJP9\BUCSU'+^1K%/1)OXLW0UU+Y(S*W@SO^1JQM[K4 +M0B[_>D)>!(KYMYRB_PL,XI4M'-=P[T6/2/N8$]7% +M?@/*V%`&,8KS218R3@^E"C0%23N.U3\)#D8&];^3GG/$CY!<^XKA.0<@8_.I +M-A.GTH9!?KCO4+!.KS9"'2!S-!6-H\J$'/J.?UIW6D,>D;'K4/$C8$9QZU7! +M:;*]HUD\LBX)V)[;TF]@`7RNVK>GKN\MT;&M"Z4B>"-]QEG7.?8\Z;:1E.._\6V:2O;B18V;R$XV! +M?`H7)4%%23M"D5I;QF2""YN[:0+Y-$I*GI\IVI::PXJA"V\]O.$_C32S>F1M +M2KQ7\KB2$@2AM08\JN+9[R&$"22V8D>8`G^=+<4Q\J>8B4*!GKBN122N1#J.DMDY&1GU/I3EE;HO$!)( +MF%T:AJP<^OI0_CRS>JA;D2X=!F"XO[D80(51>6_M5;&C3W/FR23D^U%NY_(4 +M\Y4MG=MJGPY-(+'KR]J+I-AI-)R?DM[2`22@9V',U;Z,;@4K8)HAU$;DT[SK +M'+EG,RRN0'1MRJ#1\J9P*\5H:%V5SQY&?SI:2#TQ5MX>:"T1QN,YHE(-2*5X +M,#<4K)!UJ]>'F,4H\(P=L4V,QL9E!+;Y1E&=)Z#D<4DULRYP*OW@WY&EVA4' +M)7<\S6B.4:J951K)RQO3`)!Q^OU_>K!;?5N`*B;?&05J/(F7P+H?K15YU[1I +MY5+IM[U39*.Y&,4)VVVJ988IGA?";GC%P4B7$2?^20\E']ZD8V^`9SCCBY3= +M)$.&<&N^*EGAB+1(?.Q//T]ZW_#[:YM[=(H[2-(UV`5MA3/"N'2M-2#4N< +M8']:7;Y6]-Q3##=BL@`8[XWY]JZS:!O^53(R-^1%")R&ST%4^"(^3_ZAJS?$ +MD1V_\('UR:H8%V&]:;_4!`W$[>0C?S+G[5F5V3:L\G9U=-C^*8RN0HYU(,=] +M_>E`[`\Q]JZ)G'5<4O::Z8WK;<9^E>I7QWYX%>JMK(?I(2$KDK@&NC(W.QH8 +MF&=P0?;-$#!MP:Z)YD[@,!D;CD:YEH_^0KQ8#8UX'?.?:H0FKJXKIC0]!]ZC +MI#^;DU>U-&PU;J?6H0X]LISL10&M"/E/VIS5MMO7,`<]S5$*UHW'S;^]1"LI +MY_K]?KM9LH.V-Z`8@3L:LEB6>*::,YSV[4&9P`1GWW_`,5" +MQ#)C<@-N.1JVL[_.$?>JENM0#JI^;ZU"=FN5E<`\^^:\01OGZU16G$&C8+(< +MKWJYBF5P#G.>1_7M544=(4YU#-#,14Y0@TQC4-CC(J&64[FJ+3!"4J1E<;U[ +M4"!THF59<,.=#,)7Y3]#O5E$'&H'&X]*`8BWRXH^&!W7([U(*#TQZBH6(E2I +MY5P9Y?XIYDR-C0C`<'?)J%V+_KG42-L`?449E('R_6N`>E0@$*>>?:C1G"G! +MV%F%WH37%W-S=8D_A0`G'O34<"#YU.]2-L0NI1E +M:&F6FA"2T\>/`)!7KVI5.!CQ/$[Z +M*A[*-`=6!WR*5DM(SG`VZ$"KEK24`L[$$M4U]\-V]PI8>5LDX&V3Z=JT;`%CZ'8XQ7 +M4V+874"-B3BEIC8S<>4SYS/PV2RE_8^)(6&XT$`>Q-)-*RR_M49)"NG<=*^F +MRP)(A\7"L5QAE&359>\"AE0B=))#U.4>,BO_`-GSF,'K2%N6@N0)%*X&1G:I+F/!UXZO'FA\&:2- +M_+@JM+@$<\>],++ZUD<3)M+'5L*ZK;<]Z263.V?:C+)]:#D%Q&1 +M\N]<*Y!SRH:R;"B*V:M,&@31`^]+/!L:?/*HE!4+3HIY8/2@&#;:K9X +M,X_.C4AT9"*(1S&U2>$8+"CE,<]MJB_RT5AIE=*N.5+$X)R:9N'QG.::X)P2 +M;C,Y8EH[9#YY,;GT'K_*GXXN7"+R9H8H.- +M0_<\KK==/4OCB/U_N%3E7-\8/TVQ7#&T?R'([=*[J##&=Z<<\BP#9&/>E7&A +M\9R"#@T8N_3<'UJBT)2'0=^5`?P#KES2,1.@GG7-RVF=S2_]M`VL +M8&YPK^O^Z$>&V_2$8IS?./USKRC!QVI2G)>352$O]IML`A3]#7J>%>J_38/;E4UC_C;GT!Q760'J6XKN'D4&$48_S4A&NXSB@!CL"^ +M/<44#K@?2J+)@:3L=JD8$`_P`ZA`Q'K^5>`VQT_E44;4=)V-$(WWJ$%YAA#C-5;@G)SRJX +MF7*$U5284G;D3RJ$0JRY..A[USP_-U-&*D#?:O=]/(GEWJ%@&\IZX]*8M[MX +M#Y6..HZ4-EP=]SZ]*&00N::.LHKE&U(<&K. +MUXH4PLGMD?K]9JJ*HM6().1CWVKNXVQ]?O7$>.=01@BO>$5Y$G^M0ATJ=\#^ +MM0\,<^1J2MC9MZG@`<\_K_O[U1`6GN*X5SFB^9>N2/U^OUCFWH??]?K/I5D! +M%,US0"*-M]#7@HQWJ%@#&/M40H&>_P#2F"OZQ0B,U1:!YQMC>O#GSH@T=6%< +MQ_""=^NU0NSH<*#D`8',U4JPO+UYV_\`#$<)ZG_%*<;XC=-=0<*L0HGN7T&8 +MC(C'4^^*T%KPZ"SMXX%4L$`&H[_6A[9:J(L/,W.H*C9(_A.-QG:K$A%'R*!] +MJ$\.1XL7;EW%1HN,UT*&,';3]QO4DC(.-\&F%`?!&1W[_6O:`1S&:JD78%HM +M'F%#"!<$+O3BKJ&,U`)I)!ZU*)N("+6HU\O6O&W0+E-L?O6.2^3-*?"$BF-\'`^_P"=MMR20"+&QWW!T_X^](-;7D#:3&7]8_,*W&A79@HW)Y#.]+/8(RG +M2V`IVT-L/ISH7%,V8];DCWR8Y+G!P0,\M^M'2?(SJJYN^#++E2H+9VQ@K]\Y +MJIFX1)`WEEVW!U#8?:EO&;<>MQ2[X"+-W-&6;'4&JJ03VK:)E*L.74&I+<`[ +M_F*6\9J525HN5EVY_6IA@PJI2XR?F!II+@`<\&@VM`.(X?;-`=-_6NK*-MZ[ +MK%0BX$YAI&W3UI`S!4;)V[?KZ4W>3HJD$Y!ZT'@W!YN,3^(P9+16\SC][T%. +MQ8W/A!2RPQ0WS=(YPG@LW&KDN28[1#YWQNQ["M]:6L=M"D$"!8E&`J[`"O6] +MO'!`D,$82)!A4&P`IJ-8UFMGJ9V^O"#1#``-3:(9U+LW\Z\@V +MQ4P-N_6F&(@DA`(88-=QOMO7F35V]*'DJ<5"$)!YB1RJ.>AY5-R#RZT)A@YY +M;51:!3;@D?6D!_Y,]\_:GG(8-GK_`#I$@ZM/;.]!(9$^??%0_P#R=NHY!2?S +MI.`94'-=^*KAEX\$0`A8_7N30+>[8@9C!`]:Y^5-]';TSJ"'<'!!/.O:=SG> +MH"Y3;*-]#4A<1$;ZP?;]>M9Z9K);UZH^-"3\Y^V*]54R6C[9K4\CO4<]M_0< +MZ!&S."5.1UU41?,V-P>6U=\\CT=+*-B#CU%=5T.=+BB(=65&9,<^OYU[P5E! +M)B4+UQTJB62R<9SG-1C`9P`/R +MHQ`4`8WKVE@V"-_2H99FP!ELG*O%3HU?NYQ +MFH0\S*82<[8YU7:]=&#OGG_G]?2O9Y +MY^N/U[U1#FWT[UT`D_K]?KWKW-MN=1'+Z?T_7V]*A#I!Q^OU_P!4)QD[CUHQ +MYL/7-#.,_3]?KUJ$1#2`.PJ,S8`0'<['THI8$G&YY9_7TH87+,WTJ%V55I:+ +M)\1Z\;0)D>A.15_*P2,L1RI6SC"O7.EM!4E6QGD>M,C5@0AM1UYT]Q0W4$Y!W9L%>U"PHLG+"@MTGCD*` +M*,X&=^]+%B59B6++@<^8]:("2IB#`*S`DGIO7I(9H,ABQR>0Y&K[Z(N.&`TB +M/<8.3L45X*YRS,-!."<=MJE$BLN!MNU5T_";:9CH98Y""6TG&/3M6IO62>8$<@,;=:3>U20%%"EL>;4.W +M:K:38<,DX#4TA"X7.^ +M^<*$^&,GK\\%PS+26W$(E7^9CONM,S[^XJNN)5C21WV"J232YNA +ML59\O^(7\;XCN3T7`_*AQ94=/O2,EV;F\EN&'_D-74J-'((G4\PRY +MH<7&)[0`6\4$8;8Z4_S75OR>39]1X3HR":^8IQJY_#R+X<.ELDKHV.1D]:[_`+O.5_#F +M*`PXSH*;;'WJ64?3H>*-?\`@#&6%)2\I82:3''K)4$G?ECZ596%RO$.#17(9 +MD$BK*NH@8QOO]MZ^0S<1>Z54N(()$3=59,@8^M/)QFY""/1%H`P%P<HI$ +M2-_)\0__`(VZXVAS&7>&!"?_`"9*JIQURW+T:B2W+\$X)%)RJ@'AQ8!!`()Q^=2R4;Z6ZE6_L.$ +M13-XCO\`BIB#DJ@P2#VRW(?\31[F[`XC'P:.1OVJR3ROG.A.F_?4=O\`ZU\] +M'$IA,UQH3Q2-.K?./O4AQ27/;ZUA!>-B+]G'A6#` +M8.`3G)YU")HXI99([:%7?`8@'S`]]ZED-PT-U'P&T:S9GOYH57Q#)A$&/F(S +MC^^PHL=N>'\$BC@DDNKQ$*)KG.-6?F8Y[U\]N!!%P+=+=TCNFA&@EM6DX.#GWH/#K6'ADL+SWT\MPZ +M':67Q&$@3!;)R1GD?2H0T?!KF47_`!,2REPLXP2?_P"M?RK0 +M:%EP5;#=#7S07EQ;EVBE9"YU-@XR>],IQ2^C^6YD_P#]&I99]%COIK=BDVZ= +M&%623I*H96`KYJO$+N2,:KB0YQ^\:%;\5ODE"+U:LY +M[?K^E?/%XOQ`IO=2[?\`*BCBE^<-^+ESCO5$-_G\_I^N=0=R`,#<]/ZUA6XK +M?G'_`+N7?UQ7/]UOQO\`BI,YQSJ60W">08)R>N>M3!"@MV&:PG^[7Y)'XIP` +M!R^M2;C/$-('XIR#@'E5-EFZ9O#M1G'+?^=5P8S3(.FE=)RW8]JP[<PV]J +MXO'N)*<"XV/_`!%7:*-V.7T_M_BN,,M@'/K6&C^(>).,&<8(S\HH@X_Q'=1, +MH`'\`_76I91LL8YUU<8K&?[_`,1SCQ5&/^`KJ_$/$-(/B)O@_(*EA(UP'I7. +MN/KRK'_^H>(#?6GRY^05+_U!?C]]/_\`-59#1W4?[4;Z01C/ON*A'DJA(RH7 +M&QWS69N..WKQX+1\OX/6A1@J.Z +MOK['._6LR_Q%Q#S99#J;!\O,5!OB"^4D?LN?\/K2?V&*7AFHG6/QA)&=*@`D +MJ-QWH>C*-)\Z:L8.Q-4=GQR[D5T=86`(.2F_7^U+)QJZ<29$>PR`%_S5UY(I +M>#1%3K(((ZX(R*[XA\-D;+`#*GJ.U9Y^/7B*$`BQ)@ME23R]ZXG&[MH@Q$>2 +MNKY3_>JIH*T^S1QVKS1YR`&YG/\`*HZ3&[(X`&>>-S_W6>3C][&-2>&"3OY3 +MO^=3'Q#>R2JS"'R\O)4I$W,OF@DC`#YPPSN,YKH>)+?4R+XA)*KG>J5_B.^9 +MC'B(`YW"G/\`.A?[I.'"A8\$$\C_`'JZKHB=KDLBF`.9&-AZUU0C+^U4(0`? +M#'[V/7%5@XA-(N2$!!R"`?[UTWTOX;Q=*:V4[[[?G0I!-D;E`2[*#I+=>]U5W#N)W$\6'";=ASK3AX;$97:1>:I1^^<=B +M*Z+AU.ZCZ'%5K7C@H1C(K-M)H)PB[>]%\5U!TLRX[$^O\` +M:K(:#1@>4?:N'5_`2/I5"M_X5#AI1X8(['G6NNU`&U?,_C:>1KNWB)\@#-CNJW!)L$73'/>O472I3.!G&>7M7JJRTV?__9 +` +end \ No newline at end of file diff --git a/nntp/VC40.IDB b/nntp/VC40.IDB new file mode 100644 index 0000000..c8c3b8f Binary files /dev/null and b/nntp/VC40.IDB differ diff --git a/nntp/n120.new b/nntp/n120.new new file mode 100644 index 0000000..7f1f28b --- /dev/null +++ b/nntp/n120.new @@ -0,0 +1,1020 @@ +From: fadddams@addams.net (UnCLe FeStEr) +Sender: fadddams@addams.net +Newsgroups: alt.binaries.nospam.denim +Subject: Denim (70+1) suzfj015.jpg yEnc (1/1) +Reply-To: faddams@addams.net +X-Newsposter: YENC-POWER-POST Build 3 (Modified POWER-POST www.CosmicWolf.com) +Message-ID: <3cef712c$1_1@news5.nntpserver.com> +Date: 25 May 2002 06:10:36 -0500 +Lines: 1006 +X-Abuse-Report: abuse@nntpserver.com +Organization: http://www.nntpserver.com +Path: news02.optonline.net!news01.optonline.net!jfk3-feed1.news.algx.net!dca6-feed2.news.algx.net!allegiance!newsfeed1.cidera.com!Cidera!newsfeed-west.nntpserver.com!hub1.meganetnews.com!nntpserver.com!news5.nntpserver.com!not-for-mail +Xref: news01.optonline.net alt.binaries.nospam.denim:159940 + + +=ybegin part=1 line=128 size=126321 name=suzfj015.jpg +=ypart begin=1 end=126321 +))=J*:tpsp*++**+*+**)(*vp“–J¡œ“žž˜J¡“ž’JmzsmR|SJWJz’™ž™Ž¢Jm™œš™œ‹ž“™˜JR’žžšdYY¡¡¡Xš’™ž™Ž¢X™—S)*®*/-...-/...///01621111955 +36;9<<;9;;=}@FA=}>D?;;BKBDGGIII=}ALNLHNFHIH+///1018228H>;>HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)ê*;2.*,Õ-+;*,;+-;+) +î*é**+/++++*********+*,-./0123:*,+--,/+.2-.02+7+,;*-K.<[/k=}L{‹›0\«»Ë12>MlÛëû| ?]ÝAamŒŸ@NO^œ¬­ÍP`o}½ÌÜÞ_€ +*-++++++******* +**+,-./210;++*,+.*/-.*..0-**+,;-.L\‹?›Ë MŒ»]l«Ûë}û)*6-+*,;-;*i*%FÚFþ‰2å(’–í¡F{’¢°6 Ó–f†ç<·´ƸPÒ—i×/=M)*p +î©YֵæqÝÑ i¢?¶ ÖÈ»˜»É¤ã<üüˆNkï{Y£C?Ø^—R]€0¯¿*Ò/jSËOkìÊô’/^N«ÊlËo^*Óü jÿ:zH©$wœd¸·‘µv×"M½Ó =Mïò=}?ûÑ;EÎ=@Â9î7´½¯è*,­ÌXZê^’àEó‚um‹ã®î»*°–‘´V.B¸qßW;s²GâÍq5Hxoc2áZMÄRGñÄ +„EWöZ8T®W÷ù”É‹l ázŸŒü0á’]„6À/ã›GËwî4ÔØ¼öüuÒ*Øcœ¶ž í±‘¨ž§q˜÷°þ'sDµá<÷êWL~¡€’a8úÌXŽ®ëP4¼x“ffÕ$•¦=M¦V“_Aä°åyÊàá^ ÔÿÁçœ +µœÖ…íXûžŠíŠ›8±"¯x†ý‰¢žã¡©¡ÏW@áÓÛý”ûŸ1‡Ÿ^à×Tuןâ·ÅºæŒP.løü‹þƒ(tùÎÉ&ÕàY”ßó’˜Þ^p'¿åŽãåšçՠ׋ª‡÷Ÿp=MJ¡îÄý½¼=MOÉ€†fBœ +ç5u©|Íç ×äÎâêܯÈà EŸåò,Pc.Sñóôë÷ë¹H<'yQÒgåáÖƒAØËÞ ^gSß Þ‡rÉ<*¹ _fÆã¿»¦ghc \ßÇÑ!^õ£YÇpß“žá­’hÄ¥¡…”tÀ4u½ßxÿ<ñ +çVciâ#d…™ ¤’Ÿ^øÄ ´´Ø—âá¤ïû—î¼á4†L/ Oô²qiì”)*©@©üœ©Ï•¤Ç˜È$…äÿþ××Åä¡o¤WÞŠG—ÖLÀŒmñ.VùÕ ýhÁœ %$Ñáþ˜`ì5 ¿õÕ0'gÏ…¼ +!*4wï*!\c€5‰þŒù$f)*Â#AñþXÙ¹ûßRBO«‹þaJEòÉðè¤"á¡$ù?)*#&I ˆgéÔù(Æ&ݨ¼^¹¤' è¯p]Æú7VjÂÏrÉè»»|œ¥{ÏN*V3ÂÑ7=M)*×3MŸ¢8!.(ŸcY.© +Õiƒý¶)*i?¶ £yYoÞ*¼8§TÌ„¤l4¡ÔTúÜ2{³Ö­ÔÀ~,Ê?38:¶zšP¯;ËeVzkk¶ú`q^7»,R+jY©”4æÆk$ÂLù×âFÇyáO=}UÓð=}I§/Ú«jÏjF²½ëÊ=J¡% +[cÓ+i§d^h%“¬C>+G³]jgqŠ/H«õ>àqÒ=J8“«­ë´+#*=}ªR+:§R16ŽR´*n§Ì³jó:phžÒ¶´{l9*F¤}Òºª¶«¹¤”+«ciüÀ«B¶­vèËHbCÏfÂî›ví1JÉÓJNCª¨$*k +o*Ý\n¹¤^R«Êøn¡ÊòÃL¹LA£Ä20J,fr&ÒgA:cøoxô68ŒgÒHêsöê^+‘GÓêlŒ7MHcf:kfD6Œ[òïrMM>';:Í&¯E'fÿ¢—\½æå ?…ºA¤E˜¶ÎÒj’Š@kT4=MÉ +AŸÁx¶c%›Ýš^$G€É}Ñÿÿ„ÝÒü°weÞ=M”]‘|ïõÃAŽZ‹4nþ(ñµäÙÌ•`óþpäPÓýzäÅ,$Iìâ/Úr©y¯–íÀ-Šª]}'i%‰¥)*}¨ÁØå%LÿY„üçÁu™ÏŒ¶Wá +–Í7(›ûŠ¥Ð`óÁ%IéÖ)*ôŸ(¼¤—ØÈ_TW¨ô^áy±VòHýôôúšw‡ ¼™ýVcåX€y”$`Í€!7Å!„¬™­ÛãÒàÒ‹¾rTCŠ2hÛ{¤£é?ÖY=@W ”Q€^! õ³“ó8“ +sN¼8V²ê%q_Ùu¿ôÛÆ=@‹ZÈ^˜Ásþž$—€Ç_|ä×LF·gïW«ŒxÊcN™?ÎÒƒ]¹)*áÉ#p ¹Ò†ç¤!ăÿˆ•¯'Ãàè=MÒ6­ùKt‡x¡šm-¤§óÑÕ˜çÖ‚GyxÏÿü¯Í +ŒòþJ[œ=MXáïìöA­fr/)*ÄÕ³´ÈÁÎçǘɆËþ‰Û–«yšMLá’05š@J°Oy²êÖDiÑ×Á¨¡Ù$èw'›^)*ܨº$HÁ¨)*1d˜²Âç¦vù‰@Ðéƒ É'V©V ¬&uõå–Y( +s#'N¦4'í}HcFÄ„0»îÃʲq‹"z-«**‘ü° =@·²'G‡;÷û'”œ‰B¨Ù=J©û™v¸"=@]Ü e›bb?{WwY,hâÏŽ*â×Q$t”ßk»lñç*ÒwT2Ò/k«^*Ê´ªJújT2ýjBÊê +ú)*ÎéaˆÞèÄ›i³×"¹Ó 09Îv›«Q=@7Wª=M«0ÂÏå¶ú*søzÜÂÃÊ*B½­j;*jËdKªJ~q3C1¹„ÎýêB\bÊH.¦{2g%89¤+ê¡Pv«ÍѪ^ .Bë-c"Ð1:JŒ¬]òI=}kºM +LTu,.» ßD\i§:à\bƤ\*$2´+[*ëCk•ój;-Êlh¿a·›ð+ĤKbë>=@™C¶ö~ÎsJñÊÓÜ9B"Ê>!=}÷0FcÑS;0NùïMΧ,ï*ÍÞ·7»GÍfz4M0[jÎqÑ÷>®ö#ýè«© ü +..rC-Ò:=J40ñüÁÝYŠbЈõ0v›kºù˜nzl.›pª¶9¸R.s ®ü!>7²¬›nbM²kº=Jp“—hÒ)*8b«y‘xîvûvÝ=}=}´<"ü]${±)*¬„)*¹¨è"ãÈYß¹ÅI³i^=M%ó$ +jê@h°]HÍRªür÷K.§ÃÈRM66+É„„E;¸e}H]$üÛi͵i Í$=@£Y·Q/üó#=@}¤7†²{ÕÏ%cJ=@®ûßE€e=@⼔ݱ ËojLŒ®ºÊ?..ú,ªŸ*Ò\Ê}’LÊ?*RZ]> +=}öés7i{*œ0ǨÄ  §ãªJnœ+] 0À«Ð¥½v‰lMJúŠNwt³²b=MÒ+=}ŒªJ«½´++¹Äz£bq* ÐfÆærC^QóF›nM®Â­~8=}÷rfB.ë^+;ê(~=JLšPPµt¾¡%·*.& +%z‘j²M¹ôª[Gåor*208”ª¼š’/G¯*2bò,Î y“#!Ì|Ëpðô3Ä6=@1B´0H9^hùÊ£L1ÖzoNX80R=}òjF$z¤Kf»jÌÚN¶û/VÈ6¸[q¯>ÓC»1ÔsFnF|΂iø·ªº¥Æ|g³N›Ä +0ôxLÇ-Ã^jNFïL«­;²÷{3.œ*Ê.Çìe|Ê M üÃz0Š=}uš²f}+,N3Ê2QÚêÓû’nê-Hß„TNùÑç1J³*¦z ÏiÍýQ(=Mß)*H'¦f‰•Iõa i<¨“ñ ½‡ßà*·=J +(?%ù•—Ì— Å)*R!ïDWͨËÑ­Aj¹€>Ö+(ûü+(#qË»q“…v˜ÏÎCaº¤£¯DZg}pQ!õi& ·1¸¨Ý„d¹ÊØ5xHX,Š­FþD‹Ñ$/ñáÎH#fÖÑÁÊ…ë0ØOÕϼÌ7~¯’ª*׎3±¤ +šðÓnw3Ïj¯l´Èº0ºRÊ{Ê÷÷.~,Ê?**}*¢ÎH‡$mOèÐâe5rh[‡f]í±Ó)*Qbš\U¡Vª2f ’@+.²ïTžb;>®Fñ0Ò²¶$úš6Âò½klJ'V®;¿ÓªP[´Rf62B´<œ.4ÌgèR/pu +È]SÞLyi¹¤5q;hã>’õFIvûf*<\y&ÓúšGóëÏ+0[º›jú=J›x*IÌ#-!½^ª¤2´^7N°øR$ ñ÷Ylj.%­ï[ʸŠú4›­0TµohµjLc_Jç[­Xîò"Ê–ÛáþúSk5»÷.†6=}Ä„:.ïb +2¸8’Ðiï«gÒ.*=J ’½ò,e3ÑÌH]G)*4V,NŽîÄ‘.ñ>l.7 _aê¯öjî!ÑÛ¦ÈÎI¸êa=}tB%/cÌlèr:1,·C¦9ÄŽ]ë=J¤~ê{ºT°°x*F›jJ]òùhÞ„CNj^ôhg'ž)*uБ)*  +é=M ÙÆ(X¦µ#&q y÷b(&ÜžE©rÎ*qƒù)*²%¿ÙÍ%›aê'LBOdã)*¹''XB«ü¨ºò%G‚)*#€(iâe‹8Ç$n‹0ù~hÉç™q5[s™Ì¨»Ø‹žvù×=@(¨xÛvÉv(¼…MqþÎ +)*"Ñ%û£Ò=@U-£$s„`ן—ò¥âi³ÓæÞ!MùûYq=@ž‰Êä™xƒ•„µjl\ÎÈT›({¿Ùu—«.4âÀÐÆ*è°Ø0¯Ö+ñ„ìüŠTö’{:Rw+jC!Ê–ÒJfúkEk¿.{Ä+¤z2÷*Ò,PÏj¢Ñs +ɉ½)*ÏA%#Wê)*ØØIyiÒ½ÈPnÃÄø*¶»j ,f¤=Mç,|< ËjkQ¸]l.>TA-C^ÏW;½DjŠ3Ä+‘*;IœŒÑ¯²»>ÞŒJ}Lñ*z4*븒DCê.Ĩk¤&¡ÏÝú›#ûS +™nk ejLMÍpCMé”+ê$Éx;;*Â%Ó4…³=Jýº{Fs;^îJPÎF+³Â"ÑÊ|+'S§k6ë?„1<1ù¤+ÕëQ[k“ΑÍýie‰ø©Ahï Û&ݨKQÆ©˜¨ƒh=M©Ñ–¶¿†D'è=J$T +~•úV:uÝqʃ«`=@’âì~d›º¬h$i–¡W‚À€8ë" Ñ•€¤o»hzg›uàkßdK–*e}âíxä™´œ-ÁyÂ[IÇc3˜ËÔk€;ß“f2ºH°’{zºPªz§’ûA>,ï0>;~?zT6ÒLÊ*^7ÆT +vE´Ì£y°¨Óþò(>)*$ož¤šŸI‚6›òáEMÚ²&71¦=}k²‚ï,:gå4.2²ï4SRyþ¹LR{Âc>Q\LÏqRL²9jM*ï| œêÆz8};kGðЧþ-.+,¥é÷wEb£GÒ=@µŠ‘«´?2Æ +pë,6¸ûpò»NBÊ’ãñ×*ÊBÔ[[f Ñn61šT¸+¶y˜”~:1¨›lj¡bÊ;Q<7*è“‰Š³0gÓ´†lª¬¢[jJ1Ð’J.›l uÞÆz^ZMÛh¿nIg Œ3 ÊAc¸’E=}Ãù´¨ò+&S²nùb_AìîCC +³hnüøc´ÜP³À 5«L]qË’­#{pî:hR­n±^t4*ö›ÃÌÀøZNL»¾ÇÚbÑ++\J¥|ÈïL0qGÔêb&S+:LqgÓ“[ÏIÍýM(=Mß)*H'¦f‰•Iõa I%kì!=}ymlWÒnª ×D1o‚­,¯?*Ò/;l’=}k/*+Þ,ÏÊm¯!ú5^,Ê?*Ôv9÷dyS$)*${Ô[i(»‡¦‰=MFG +q#€3=Mà•‘[ÑHþIÚP0[|g8n Ô+åF´`J=}"¥|­gÓ‚1Æw{”:ì¨$6ÄJbC>N½Èþ’H],’û6ðrÊFP.Hgozb.zRªs\§/¸LCÓEIÝïe=J:có¹´…1k)*ËpëÝM-&Ò-!² +^CyCÊ­eãû+x›ï?‹BÄ<}ù.üÈsv¢÷_:»÷3:e½-^–¥CHÍÍ”2Mf¸R/½w3ÏñïYÊJjòf ÌoAFYçiÌ‹œc*úÙÒF깤=}p2:+Ê@2=}Ä+úpiD+2MN2òñ^RÐü³=}Ügç’D6È( +ú’DV«¯CÔT 6^áܬ*Jk%Ãv³Lªn½.3#Ó1y£îŒ“lJ¿È7R.蔪3b%Ò,eÖŠú4k<ŽDzhg'žéqЩ é=M ÙÇhX¦µ#&i y÷b(&ܨ¼Ù^$VügoWN´ ÂWÍü»¾¥z„bŒ +Æz÷>AçJŠåú4ª}ª~,ZRw`¬T*½´*z4ª~,Êl«jRï*Ò/^2~*L0“}£Y.IÔŸ»Í)*?ÿï©ÇŒ¥xUh¬.v­l·[ö~Åãêï/Ì.¸qîþ'x+ë?tL÷;jRhþ+|[,RRœ"o0¤ª +il“ô‘^à^œ»ªN=MçgÀ¸îŒª e3Ô1­Bc´ºjò­j<ç"!Ìên §]j;¸o*å*kh¾¢.6y”6+Æï*ã«k6ß5P7ò?JQ<ÔwMHã²Ëk Fñ”{L3I>ðª+!Ä1ÌP¥¥üÚ:ô¦ýznF!Ór¶,N=J +n«r²<¢ÏÌ2fHÒÑ2s*Ž,“ÒkL®¤IÂÄ+31-L¹Ó®›ïU>MÑLnºn¥z*=M[¬L¿zÙ7~ob+CÍú¯»ï>–³i0ÂFú09*î8”žJKŽýÈ4ì¹”„bBC¸(Þ 1,n.¬jfûY¹i‡Y$û +É#OÙ"!yµÉc %‚(ƒé;"½xiáiVÉÎÿ%ðÉo¾z4º2Ð29¤^2jD+{Ê~,ÍŠè$`-Ì+Ô*x’w42Ò/jR^,ÊËsÊòD+~¬½~-ç/ÛÊò¥þª˜Súi×]`åiðQ?ïiß Ö³0à‹Ý +sTqÝvà¯2Lœ¨”½ÝòˆÿL:JH©DÏ@MÂÊ2ªh/*+ÊѽëkÆÜ+.ú8*=J­»jfj½i¢ÓRšhÍß~MÁÚ^?f&Òû–ªbÃĠ¬Z3i§E.ÑBª7T/Œ£¹t}ó²PL‘=}´Ê\¢{GÒªj0Ž{vÛòMH +ÞlRêJÆobjøy-ß,Ävœ6ÆÄ„/ê½Én´¦¥$©=@¹v)*ò©ñé‰d¦†#ùAñ÷"©îÉÄ›'ã#Ž'PÙÉo¿rT^4·,Ô/jT+z*4º^, +Ïjw^i%’²${Þú»ï*ã_n^*É„+›jSÊ6zo|‹~0ª‰'Þ,^-‚›j£9=@7åw,qJ(,ä")*ï©¿ùøT ê»_t6Þz…3‚ÊÊ;öúNú=}óËjy;|.Žÿ+0\qß*=Jp›>-«Âï,ý¾ +Qá^-þjI·S=}Û1.F}WÈ6´+ì¢pê¸=MÊ6!k¾Þ2;tÿ.´Q¬ œ½¶ýK,¨ûcÍŽF²iÇ0UGïRR=J1ï[7»¶Ž9„*ÈJj*1>ËüNMüÃlNF;´*X]-ü­ÍÈjÊç;.ÙÏ-j\M^kr9–4 ++ «nʳ¶ñ^2H)*§wg»¶|[ñM_{^vò^ô>3[lìqθPªLkb͓ڳ¯÷W«Éx¾®ŠŠñÊË^nÈq^|¾Êº.jJ3öÿ4ZŽï0uù0·º³^,,N-i§rR­¤ú…dw1ÜÈJ[ÿ,ÂÊ2]j¯|SÎòï{q¹ +§€ï(Ë<©r´=M)*A1Y#€u;›÷”êQüªBJ©„+æö»jú²MP¯;¬vÂÊ+M;³Ïj¹ƒ]n.3hrçHy ~‘Óª9ÑÏ*k,Šø”nh›â+´ÊJêJÄ=}¦È3BI·-l3Nk²Ínž(>SŠóI^Þ.=}P·C +,8L«8òB#ümê;Ä‹,¿g²ðg.û1Üë,[wk³ĺwùŒRS2B”œµ2î2%vçD©Éä´šÎ2CÓ]ÍÛÔ$¿Í²ÃÉ„.Y†(^kjqQCÊ®,\/*MèRúL*Hý«j—ïwg¹î½ÍBñZ‘´=}ÌÂë.ø +R{*]ûÎÊÈr´9Žq;¸L·@òòÏÍêJŽ$÷\I¤^šqëGk{«ùk|½÷z¬ÊƤD*x6!ÊF*"Q´+¦Æï/n¸eúšÊ6­vhf'žn¨¾¤Š)*=J é=M ÙÆèX¦µ#&i ÷b(&ݨ½yÌô +ª~,Ê?*Ô’SÎ4ª~–+̪#Ê+óËPúzŠãÄÄV|Gtðµw [9}x̼CÿèÛýÍ[.¥Æ¨?¿÷ÎìÚØ§¨WY÷â1iÇqY ¾Ø¨ºØ»“ìÝnIÄiž)*“¥m‘|VáWÖ½®ù=M]ÓâdˆÁ +ŒÜEÁÙ0v1€:~=@âàGWˆ$%'`_Dê62Kož¯[Õge¹Ñ_ÎWÈÍ“³b÷=}Syàä5„ÅaË×däÈ=J÷wwæ¦ý,Bo13¹¤4ýAU^@YE$ÇíŸ'›É%IÇŸ)*µ¹Á&ï®jÕ¶V0˜þlúrÔ@Af +S’0M³>ËNœ1^Ö*v¡ÏÎü1ÉøÇ{êïR^J >-¾øiÇzi¶òÈ’: B;¸Œ®²­³´Íâç3Ññà’K1ª1n.v§'™ó];x#S2BË‘-¶Ö=}lž|Q,RDSÆ´>]k¢S04(~9oH»¹ì¬,r,e~Ò +nî«~~N6jÊòªcËN2B*¯>ÆÈþ+g°.(~+*;¹ƒÊßÚ-B^5^nu6ï.k;«ïR-¶ý{Røw3=}Má lµÞ¨žQqscpþ“Ã;o,ex›nrª2î!ʲÞ2ö%þ‹ò0Q=@T¼šHc?„M®« +,ª5f«#zž°©ù´z±¸ût«Æ*j&R.1 £Ê9cC¸”ªð›0’>Âj­['“kIH¨ä‰Íýie‰øÉAhï Û&ݨIQÆ©˜¨ƒisÕ!ÑûjT+z4ª^+´jâÊ>É„*H#Ïjy=}pëÎ!>„½ƒÌÀóÉþŸ=@ +ÞÀˆüK.ïwäåc`yبÚ=@•ŸH7±4NìÙ_ùóóáxBbõ$µ0%˜’=JF©Çœ•[€ärwj‰I¿WÙt×Ôkµ€÷ù«>t^Š¡:•AW¸m¤€ÇïüˆD¥sӚ˶ÈTЀ]âo_'F^Ø Æðo¯ +ÞéåAN¤B´È%S ðj$Øuô–•Ød9=Jâs?Øf=@¥‘É>Ù‡$]ÇÊ ž'jؽ|v3%W!pFÇø–"edµ¡W°à ¾kº•wÜrDns´`WcyL¥ûpY:$´¦Æ¨ú)*)*{Øögb#©ómîHß›²Õ% +#{J:îò^ëý4ήnBËoºŒ’.Š4*¶ªƒc(ßD,6yÀÆ1óD ·FãîïW¹qÓò­~8óËh±¸R,Bª*užH×fòÌ:öï[R¸1ÒÊ2ò¿Q´¤[-FɤneÒ.‘Ûñ^Óº1²>ëx,¯?ec`‰bñ¤Ìå:rï4K +»=}j;I·3^+ñ×WÒ€*Jk^ô®=}¬h2Ì0¨”¦Ò¢ñ¨sÞ«g̬K­¹„8+=M1Óz6{ÊJ¶ª§«9ßñ™tQº*=Mý]tÎ=Jjx7/ÝÊê­kÄk–=MFþ­®ªidÊh»xNrïZZs(¿L +ÄQÔMÍþ´€7£=}ê,9ïJj¦+*›LŒÐ¬88”«y×RIH(ä©Ïýie‰øÉAf(Ýï Û&ݨIQÆ©˜¨ƒis•!ÑûjT+z4ª^;Ïkz,›j-}kÎ,Lº^Èsu“üØÜߎÝyÑïE;‰ÎÈä © +ŽÚ[¼¹½‚‘ÈͨfH‡¨=Jƒ2a厽&÷œáˆÞ×£=@ø‚Àâš1Ï+Ãþ_à^ ”²MÜ÷4ÈßÕþæ“—"Tg.{ÚÊYK¥؆¸›oòæ`W”˜”Vó‡ÖðE4§ñÏGÛÑ…ÁsóLSõÜû×ÿ;ÇÐ=J¹x7 +NaH=J˜=J¢(@Íû‚·Gþ·Ø=@F8]!öÔ\Ťy½©Ï‰wI| å¹:'Ï# !×(†)*9£ÇywØüXÑyšgá<2س â í°Q1_sÈUë$'‰„=Jëa)*&ðä"'c ÐXìÕÖøuâë# +Ä…úüoåcf»yŒoŠ¢CÕ¿dr6¶&ý-iŸ*«B,ÎGLk~2jLªN^©]_`«ˆL²9=}ö´Ê¢bÇÞ+1Û)*¿-qØc(ž-îœe ËL2¹RÏ+r¶vFÜŠ;¬Ñv¥ïEHò=}-^ç«IôÄò1Þ;t¬ˆñ ·«b +J£cÊ;²Ê>È¥9”=}6p0’HõÛ};²¶»òÔ>e ÊðsCøe|È|p›LÃ@2ÃJ´…[/ܨ”2J6¥þ+L¥ú.2BÔW»õ¡Ï6*-³´ŠŠ§&þ*=}Ãò;~9BC>à„LŒg’¬»C=JüöqçY“Ñ*©Y +tŒ;B^,ö=J;ÄÊJ9 ʰ+#üô§jλ4eÄ4¸šìcÔ/;­È-Úp.sÊhe'žî¨¾äŠ)*=J é=M ÙÆèW&µ#&i y÷b(&ܨ¼™Ìôª~,Ê?*Ô’,§z>èÊÝuб×W­y×W®¡E’Qf|8 +‰¸ÎV‚Sâ8”˜„B÷æaw§™}œ]Q1úIP…ØfŸCzƒà,ÆÛ=@…ý‡]_!}s’äIªÑXðÆÍO÷—å¥sO§¯W¯»Ñýþ˜shÆ(^–“x=MEß—êÈþØ|X›Ûüä§=M7Û®Tiœ`Æas_Ç +Xêõ6>64¾)*½%8Íy¾ÝQþ’'îˆDãÌåŸnˆÞ ß×À‚“Ë èÅ­£ã1ýÔ€¡? à~ª"›ë¸”óɘÇíwqoþ70Ø=M¨í›àÃi…%qH©qiXE!(Å×…á>°0nò\2 ØÃ†à“=J§u}åÒ +6›¹)*ö•ÑE ÷¾¯Ÿ=}?¥p¼× ¥pýÎ  Q?|ÐÑáš¶%ÿA¿µ™bð“ôÇF6örGÔ«ê#£BÊ2JÃF›>+.N~«PP·À¸î÷d‘-B÷Zš½³Ê9:jÉ”+ôŽ6Ã>.ÝurI–Èþ',.Âî+|‘,J=} +~¤?ù0o,"?QèM?h¶#ÓO*yÂ&ú.2òÊ>ŠxŒ¯>HJëªB=J¶ ËLnx„ú«.yn±ÚJ›>öÎ:£ï*q˃Ä=}=J»òñ>Råó†þ¬«7zKM½gÒrÛ[«>*ùhßT;;PMçdÇ*øi4^*ó}: +n 9áuü¸;êÐ2jîú5F=}]tlR<2ÐŒbôsñ=}yj Éé½xîº)*ít9Êò\jH¾ï,Œ.§þH²ª¥=@­<ŽŽ÷3º³P+gÒg’*ð1ï0P.fúÇ£*83ù Ó{¶æÿ,*npeú +~²F,§RÏ5¶—^R²òÊA:4­gÒ-)*P¥{Î@8eFúœ>8ql²*LcÏÊNùfýTB:c,¾ Jö*SÑûjª³/cvŠ›BÄÊ\8q[{Ь6ñ^ +¸bP´ŒPrgÔ«RP+"Ó,1“Ñ-ª1cÍŽ¡–FoZ‚L£^1ñ© +ØÂ¹üÁvI&8&¥ÉïùƧ֩V ±&s#ÑIÉÀyü„'ƒz4ª~,Ê?w0ÄÄ8Î7Î4´;ãªvî€x‰h̳%¿šu2ÓõS¶Úð¾'s›ß„ûfîGÔg­fà=Mñv爺Í7a+œ ç•‚$%–Ñz£ù +ïbÔñûkâ†Óe“rûD§öBÙÚ?eˆZž@7u»e:êÖ£]ýá±¹#žÀWÚ4Í_¯Øã¸ÁWP‚Œ­tW˜1?Mr„ûò=}´`V{éÑ7LcÕÃ]õ@Y|û-äq”ýDùV –„dW…JQ¥D=M÷ïõðü@‘öÕE)*=@ +•ÑFÆC „.åÎ=@«“NÞý/yÏ“\ÿ¾ú”a5®·­‡&£˜bcZÿpBÙ¤=@€S— M=}x|üÈ(y_ÎÓÛ¨ï ÄâøÙvo†Ó ã” Q1ßh Ñ€N6f¿›,P]p²=M=@º 80cF²Ð.«;|`¢ÂÔY‘VF½Ï6)*v÷[8.4+›¼›÷T½Ð£ Ñ-J«ZNŒÁÛP®F ·4š;v4›½¯>ñ1»l |ú4+<71,½Çìo|k®jÄ´8-æÄ”2[­¢ÊÒ +ö½÷,>­ÂB ÎõÈünÆrù¤‘pjñ”2®=}B÷4BoYj®k[v2ðy¤*nŽ’.eú½Ú£=J!ʲ=J}ª [1çM)*Ã3Bh¾£WÁãÔ,*\›N ­J¥yß.MFÄ»Üù[^zLx¢ð“%,b²«vhe'ž)*uÏ)* + ©=M‰ÙÆ(X¦µ#&i y÷b(&ܨ¼yÌôª~,Ê?xë|ÊÓz—J~,[uY:TW°Nï‹Á¯sá/7ú7ãe1㣠±‰@_ðwO€Õ{×É2GÝåOØÃ=J÷ÃkǬ‚ùW}ßb—l"äµ!Æ +°EÊíûWNÔ<£V &̿况eAE~®(¿ÇóØB؈ÈàÞ=MšõŽ`Ÿ ¸Í ðº—*¬ww’äÄbBÂHþà7…Bê%Òpž%Žq÷-”á=Jv6ÿ™ëŽùþ­SOUv•UFñ‚úîì+Fo†é€cwî§c­o– +¿NZÄíWæ–^ãÔÚ|F3J?ûY±?mÿ–,Ìšožù÷¸=MP *Ž›ÄB¶ñ ~¾ XëIôÔ~௵Ü+07†ÒÛÑÏäDP•s@YóBÔw†pç†wtÚg½Û†¡ñ_\4©"ÌÁÜHþ¹„:2È“êžñ ~. +:j­?e¤<\œi¿*bº¨”«š›kt‚W´6J¸S{ËÂ[vH6¤|.;,]´¥sì2¼Œ.q×[mž¹ml² ïS}ÍÎF«)*dT«r‚ï\Ï-¼x’[ë{¶úz³=Mc¸’Zƒ]&1›®®+ê%Ô Ë.-¸n,¢³_ +sV!I¯,;ÆËo^NpL­Þ*n¯çÇ1–ð7DEvÈ/4:6+ÆzDZÖDN°§R/1æ*’³ *xM¶ÿ-ð¦ÐR,ã«á&rkQ*|"^ó³(Ÿ¥8,P@Lή›;»yú*Jï:2bª[÷Jžñ¤œ¬«<›và"ý]$| +±)*«)*¹¨è"ãÈYß¹Å9³i^=M%ó$u‰çhµT+z4ªJÓ,ÏkÞ„.|ª=@ÓùûpQþdÛ”òà9ê1]†¦Æ¼d¢Ú Á5=@³§M; ºUùõg¨bMý…)*‘: i§ž#›!4·Èç›AkûØB'ùT +É€g%ÑMµ§;—‚{Vñi=@Çä“аÑj–Y°>š@Ñ‘LÝ‚AX„Ü*5e¹ï‘ÇŸ=J û“úRðPãÇäý‰u‹t³?‘¦YX—=JÄœQ’˜“v=J6·3Ø`1rSß,B*§4ÁzC.+TVŠe+º¸o~õx“« +ü•ÿ¬ô[÷™°xˆ–a`ã–hÇ2[,iߟtÄ~ÿR'ÆÓf¨$5À¢ãÔ.³¹ˆÀA›ë¾ÿlsÈ•nFØk:’5Ä•®jÄ¢=@ ^!²¬U–•g^+­T–’“-´ûdz¸ „dq=}>öQJ»{4ùÓy1 Ç=} +ó&rÔMãC=Mßr¬NŠF´{l3BcÑ=}Íþð”®gsz„:‘Nöý]ÑüLÇ12C´Šnj:”ž8+b^“M»"§+k¶¤úÌ:¥SyJ޹éÄŠyFÄ=}‹âZŒ­º=J³Êlºez^J­0s1BÓ»h˜¥ÿ,\bÀ°ò2 +=J=M¼R0rï@«|*)*†}WACQ¾\ñ˜ñ>ýÛ½ è8R>ªN=}\’D2)*}ulŠh§Ò‘Ûb^¥x´jîqÏ-m­Éä¯5H /3V¡’Ô>kgéd2sñøSrKRJ*9˜SÃ-Z2Ä2£Ãuj²«ù”úVš\’ª¾øT¯ +b+g·W+L0“±ñ‰ØÁ'’ù&¸&¥ÉïùƧ֩V ±&s#ÑIÉÀyü”'ƒz4ЬÎ4ª~ê_w+t¬Ñ,eŽ€F”H=}ŸñŸÕÐË»¢BQæØ– "Úôã’‰âàñ-?õXÅ=JoÛÒ=@„ÜÕ@VÉyk +x|°A=@š!ÞÄk»™ø&pÇÔ»mÑžçÔý².ÆÉ‹oè>Û^õC6,²Ö‚§Lù¹žM›ÚùQ©@d·%`ôj«?Hß^² ³IŸ{BJá÷~o “måQ ª‹ßãŽj˜pàC6~B0’üÏŽ‰Þì¦Ûk€`ÜR +n}¶Ü'ux4ÀNC?ξü!yâXlÚ½;‡b œ ÔËØœÑc-»…ŠÝíE|*e±ï¤fC¢š€M² ä† £3 iT,…ALNÄOTýüPU†•W“×ΜnDü]ÛÑГ«f$´âÄàÛ"nÆ9:hR1³]ûj«NŒ· +·¢fB=}>…μ.|Èkê£âi§c/Ñ7îjc!ÏŠÑ,šSê¢Â=MfûÊUH¨?jkÄ+êøkËq3sÓnkôù^-±ß{’jZ6ImnZ¸)*§s’›)*d`ŽbC¸þ,,‘h¾–6v=}ñCÔvJ*GÒ,Q0e ÓÛl2]~2 +gTnB1Lv}»O¸rb=}ïT˳.ÿ§+:Œ//S9X7RS;Z64žµ³³+úv¨^’t*ެoD@»êºezÍÁüS>+ñ×W,‹W1\’ü’î=M^ lJ£>˲. >|®No*šœÎÿ+*3!j=}«;óÓ/­º9çb2=J +¦ûjÆ6}+LM–úIH(ä©Ïýie‰ø©Ahï Û&ݨIUÆ©˜¨ƒés•!ÑûjT+~?J~,^,Ó0ý»T‡|ß‘FÈU±ÓõˆGGhGÿî•Lê‘»ãâÙIf×Ù…FŸ;ðQxXiXg“CÀ5‹Hs\9Ïvgc +×£—yzaF¬qÅïˆø_¤8Æa{â®z¬hP·ÇÏó2}x»N*nûœ•ï¸Têá—.kUÇ ¶þ•‰ZùcÔgÞÖ…fÎöœTÎxƒ“¨=@Éô?@AÁóÐê=MŸXýÃÄ—ª6Œ·IœÈØú42^ƒ …{ÿ“úËÂÂtŒÅ +½Ç ~,.o†ðÝãc ÓŠe€½>†á~¤8=MëòÔÈUÉÄ—A|h¢UÍ4 ô\YÇ=@=J™8xH‚Ò„jÈ å†¾>$;ôr#Ê¥’“˜I´YÀàÃÑ_΄ä‘=J÷“fLÙJ´â®ÊFýy.½p ^mG{ +§ÐRÏç<Â[à¾gîÈðTò¾Hü›|Sìc0ÒF6YÙ”+ìs%Ôk{½ÈÿoÛ{¸’Ecj(kk1,‘Ê*JüËJN š§¬c{HÞ@õÆ;ñßs¾)* ²ÍúJŽ ŒR1Z.xg"Ôú-M1=@¿-ðQ«]v2\mr!Ê1F +ß/8\bb&\½²J wT.y;i^«8ª}Å/­ÃÐ4r*!!ËdI­jú»j­gÍH4’.H[jgs*úÊÈfÛ^,NÉ´ L1Ö8)*§x¯;¬.®ŒLc̺ª\‘Ä+q*Œid*¹¨mɉèÎA<3Ê3ñÅ™qÚJp‚Œ +É»Ûb½vhe'ŸiuЩ é=M ÙÆ(X¦µ#&i y÷b(&ܨ¼yÌôª~,Ê?x«z5,ºT+Þ0IþAjêÄ$ö&å$vaGˆ#é£×ë¸QÚÙ]¥¤dþ”ÂX¸°%3iBÐ?ŸMÑ00‘^ÏDŒ{ÓãJ +/zéôسGIj“Èj‘iü¾@c™ÓßUÒ”k3´¶ݱGNÛ¨¯ÁóÍÄ‚äWd!{œ7õ€B rcÕÄ‘Àv ~Ÿ§c¾¸~›2•“¶ýU¿`ä†úÔù¦¹=}çß^©ˆÿ…½Ñ•Tâý/`#ëÒߤ{ +§sVµŽ»êÔÈ‹…Ñ9èÖÿ‚ ™x¦û¬.ï—¸h`ñfÑ$¹ÓóáÒâÔ¥ÞRÕå€Wž˜Ñ—Cß„ó™xoXȾ?™“¤ªuÖ2‹­uNÿ÷àáJkðg•vU¹¼]˜Åe±,åbØÆ†èÃøjNq? U±Y>>ÞûÊW +“B›i¦ÿ=M}‰t)*_ÖÖÕ‰tñ* ?ÍdüýÃCT}¬1ÑÜÑr]îz8l0jCÐ~’YqSB¿­qÊžÈñ P­ªg£«o¯Þ¬,ÈT«ìLªJ }ÛÍ«=}ɔʠçY‘˜Â*ÆD6š[}ÊjùU;jrÅe4› +^+¶vóÏß8Z”«*2&t#.èÝ=}v2FH2ÏÚ‚gÐÀë:24nz8²C÷zRNŠŒªj^×s6©7SÙ1 GÓ%,‚ª.{**cU]osvj[F}ER(V$zÌNªL›l ›«Éæ-l®k-¶z~n;*ût+Bð74góFz4ŽŠñï/ÑñÉØÃÉüÁv«I%8&¥ÉïùƧ֩V ²¦s#ÑIÉÀyü„'ƒz4ª~,Ê?rL’ÊÓ-FìwqO=@eR¨Ìèîã«, +éÉœ¥g`D¸D=}“»XwŒÕ¤e©’sÇÓÇÓ»8Ë!Ý}ˆÂAY!Ê–¬S¥1²’B1>'7Äð¥|<@ ²¤Fj¼’è<\Noc>rª©;r’±¢öz„gª0LÒø«îŒ¬îN=}qͦ¡$ +Ã'Sžù&¸&¥ÉïùƧ֩V ±&s#ÑIÉÀyü„'ƒz4ª~,Ê?w*>ªú:6ƒ‚‰fQÁA=@ެeºéÉ !b§c‡|/u€ê¼ ÇD P…HHÅ{žö½&Ô¬Aäi‘,‘¡×w†¶Uê×õµQö=J«i? +lp5ýÈ.—v¨??Îȃ)*y‚=M¸uüž QeK*=}T r Ÿ¤iä_A‚ñµ¢#ä¢èœ…gcøçÑ$hÑÒÛÿ_Á™ŽEe˜Å“Úû*øUý=M=MìùYQ½Á½¤·è­úØ$–ßDóŸØ:¬rŽ +"cب–›ÈLJ`ƒ —˜Ãý·×_äôï~:~ âY´hÁæóÐ<î?ǽ”ý¾'N„A×Õª‹„yוñ©°FâÓ¥¤u$Wo·‡®å•{•íÅŒc-=@äÚõà#þŒH­Öå¤ÿ×§dl°8‚¯Fl ØãþÑÇ'H… +eèÅ•Ó<µY“Ò~›°*¥=@cU͹° ÝÎ}vW‡œ½†Ã‡ä_Òù¥ÐøÙ[ ,6¦ú€3¸]!zŽ_^l-Ûï*²0§T«+½LªJð¥ +üº2WIcÐRS´*üÑj ¶ªrb^r2:N ´ÊM,§ÓzfÖ¿¬S¬«=}|ªÁ%}s62˜ÿjƒ%qÚ³ªq l±¶6²Ê<­-ô/*pZcfûOxò$xw12ÂF{t%=}»ñç/q°=Jÿ2‡ÌÏ‹g%úÄ]äMѰ1ØS• +pQâ=}"{ðó›Çé]n¯’»Ȫª“¬(FÓ ¬¹¸)*‡Y$û©#GÉ"!iµÉc %‚(ƒé:"½xiáiVÉÎÿ%ýÜÊ?*Ô 4·¬Ê+Î0¿4$Ý@B½ãã'U¸˜âèâûâîv4ã§çØE ­ÒßajCR¬Ûž—Ò +Y¯üH#nÌpWõÑ N»5=}tý´Ø¡‰àJk^ âåœ ]¼ûu•ï%¥žŠâ½sþÝÓýE¼ðŒÆÍ…¡õÑÅÞÁsõ?w¬÷L¨óŸ0iHU£õÀˆC¨¶Õ$u챪e8*ÏßÐfœ¤ˆÛÎä—— +¡K§gÕe[×W?Ù3j §UWÖï±§ÀdE¯Áâ×ây68µ‹¯ÌËmNó}„Ñ`[Û%_ÊÊÍdIp{àÄ`³£6…¸†l'¿wa­„‹±PšÇ¡õÙ1úÿŸ†%„úŠ2ï“UÅiUGtõ_ÝâuJgñ¤=J +ùñ÷­2‹L寀’=JïgÏOÐo<·^—4=@MPøºU‚õPøÄŒ””îŽDÓ¹;­ÄŒ´Ci^¥13,NÉ”º]ø¥,ò½öú.[Zb Ó¾AJ¶ÿ,†¶=}Ä+íÉå>+Qé¤+F ’*iÉÒÏG=}Ã;wOG«Â!Ê6 à ʖkh±Fü¬yÈí^ª³ŒÓde­¸=Mß43[«CuŠ¥+¹ì·Ñnx +P“ÆR«MLÒ®›?Ox;Z>H­F*QÆûÒfÀ6óü²S+C=}!}è2 1]r>¼*½öú2yLÒ–‚+*l’¶¹ì²4+ªx“’hf'žî¨¾¤Š)*=J é=M ÙÇhX¦µ#&q y÷b(&ܨ¼yÌôª~,ÓúTjÒ/ +o*£ÊU•iFYaÏ¥›G–, ¿L˜*7¢æõ znWÒ£–]ñÊØuž»yÕ‚WÊþø ÄÓ7òm£åUª9ï1?·òO‘çxÄr É|˜ží⛢´Ïù˜ÙÍ/D•”1*Œ·`”¾6eoBÆÔÄ·`xH¾(×[ÍÒúŸ +h—ʵÀ¯»7ÈÀʽ+çóÏ䤇åÐÝôßò-üÕ$p  ¤ÚÍãÏPÁ¹¯ˆßϧxúҪãÕðf½›õ¥=@äíÍþ2Eæ×…a`=MÈU×d]ÞZ4€U5‡|k—L*BPü]´OÅ^ñ ¬„’I¯™ñõ÷ffí]Ý +ESôçÒ&ÑQÇ•uÑl‰*¸û!{Q°C€Ðé…â.Ö;‡F{ùõ†ç÷Ѷ­ˆ¸hÆcBÑß^É—Ó¿üûÞÒMGv¦ÝóÝÍŒB€û¿˜“y¤ã{1)*W†k y ÏjØ1GÑĨ«ú9>-ê²Ã È´ü}Py |‘Ö¡FŒÁº¡ +Ö6n¸sB^{1bö|bMBÐ\±r=JiTÌd0/t®sfŽ4seªLÂcŽ3¶¤?S-EŠ»|ŒJóÄÌÍJðP­¯¥ΖŒ\h’/^,|]~S=Jj kÍŠ®êJà’W³!&PÀöŠHí^ëz2F©4„,g!Ð5ÚLw*k¶ +¼7:2­É”ˆë-G«N*¦ÍÓ;*'ɤ¤K«ñ và‡Ì§(S¾rÈP³HŒ·²;²Wb*i°ªjÈgy”Ì=}cZTpî8ŒŒÒEñ£Ê’¢êÄ/db«Èþ,,e©¿RIG(ä‰Íý]i%8&¥ÑïùƧ֩V ±&s +#ÑIÉÀyü”'ƒz4ª~,Ò/^*ɤ€«Ï§/wVÂ_÷õ¦¨‰{/ßE£¶½÷¸Ù@td–»*)*dÙUTç–ߘ'è"yBì×_ÎóI²"Øèf†Æ¿ùÝYË ØòÊ6Èo\u–´4Ù’¬fߢÌá^c¬+×Û¾˜’=JØ_ÐVÙ¯ÿ’ò +ÞÆ8L­ûî ½´W^MãÄO1Sb.öÆWG³ëÃÊFQ%|}ë;y¥S.›Œ­=@°9-I>¥>jÆ¥D9ŒÊeªš]R‘ü®²··3¶qkòp9FzˆµÌ4N'=JýÞ +ÎfVR=M í-MI§rKë³ÔTš[Jüªº[Ä¥,›>z\ «»k|.‘^ÞŽQ${+È&{k8úiT^.FsÐ-Þ¥ü³û*Œ7ep°¦Új&e|¾{0£(~þn Ä¥qÜùcøPöjC|mä1ÎHRÑ4v’,2ñÑÌ:J3J! +Ì´]¨“¬½Þ,é>ʦ¡$2'Rë)*ê©ñé‰d¦†#ùAñ÷"©îÉÄ›'ã#Ž'PÙÉo¿*Ò/jTº{u,S•sËP¼¿ßƒr_ùòýµ¹Å–„v™­æ(†¦eÖWxË^îAN*¡áêÙU½ü=MŸ øÝ' +ÝþŸAut9LÈ]qŒ8Ó€#Þã/H‘®uÔ$àâ„@Þü Ð…Ñ[—¸…×e·Gáൣfu¬l N;²ñšRwJy*s}ëìb-´Špe|UJ1à“üJ¸sq8õS«‚\+ +Î8GªˆSúšò=}[~ºp t½±«;,’LBëˆS%>¸6À®bøZLªn²IÇ-ëê¶8g-½ò0’ú­hÔ›n.Šòñ÷z;²Ã“’Ó:8pw[ܳ:.q^>:1P›uqÌ»H=M#}[Cñ’Ä=}Ë P“wRJjL[vG:Qá>< +L6+ñ=}rlb1Éä«rÄVI|Æ*€.qß4S«!ï:9æ-®6ÃëLRÚªî¶ú0gÓ%ªÚ£÷S6ÑÛ³"Í„:hÒ6p3 À´k«,q©ô²™¸)*‡Y$ûÉ#GÙ"!yµÉc %‚(ƒé9"½xiáiVÉÎÿ%ýÜÊ?*Ò +/z4ª0¿ÊTœè4SB/óMãÝ· …•°ÂA8+6L•½½ýݸ£› ƒ@á˕ԠÁj©×£fÈœ¤ÆˆÂ‰oŸ7ÀÈ*.ã^ ×õÓaßAy¿?è÷•Q°e£ùþäÁ˜Ôä¹:·óW½Ä=@lÛí•$¸áÑ'‡ý$¿ +wÀ­.ŠîºeB×›¼=MÏöÕX«ÕD·Oåê«NP¢ä"€»òj~=JTG50=MrPM¹´Ç‡äPk‚÷gÓ»¨GrÀ³Í˜„e{ÿš:AIÜØ”ÐLƒ_¤Ç'l܃ü•ªss[Òå›ñŽØ… · +?nHœàøS÷6Ýì§‚¤®ÕÐçÓ—Oí˜ü™œ§T¸˜vk©€á=@Y†áÑ6Šm=J#“œp¢£ŸÇtóÝÎ š)*7¹ßŸF·×`%AŸÁ¶A?ý·ÑYQÑ3B_!r2TUϦǔS.Bäb=MÁfÞa6VÐk +‡ù8VÓÝFë׃ LgÎPÜ3\7/„¤FñcÕïÇ–þ#n´pŸßÏJÖ¸7~‘€rÄâ½þîûç?eýNý=}‘V!hþ¤g³\Nþ/œb%ÓÇgPQ=@od~=J+"Î…:y!Ñ2ޏg”“=J§“íÚq’Õrîn¡÷x¾ +šZN×3Èï§’e8(l¬Cc«5cÄ+ê¥(j*b=}«}ÛÛN;>-¾Ét`Y«<ŠÈg“úƒfºh$„1¹”Ó=JѼ1=@¿[ˆ2ÃÍr8}L*NóÓ{‘ãÉè´0yN+òP¥>N…#{R¯òS¥{‘¸=Mç@+.6ó²Ï +*¸i¿b2CÃÂRc½k{Z8Rûl‹J3C̪QÞóÌGÑj³!̺¸gh$¨²çÑ>áv«I·c0ð*öëx"wb6¤|J¹Ý]> èd'ž²iÏHÃI!GÙ"!yµÉc %‚(ƒé9"½xiáiVÉÎÿ%ýÜÊ?*Ò/_Jåü/t­ +3{§0‚æà@PLehx¸aµ'£Ø¥$5G˪I_ëõ½å´Z(×â$Œ0CUI¿£#¥¤F¨Æ°½‰%1tâÐmâ¹t挜8ÅØSÏä³>J"ß$]¸¥Ù9Õ~ÆEMHÌŒÙ>îÁÔ’‰x ¡°R±ûñI¹>¬ü)* +oÇv ÀˆÉ@HŽŒÛ¸èTHǦ>oiôÛŸõàÀê’»|×­õS{N¤~µ†‰‡YÔ”WÌ嫘ÐrÂQ³„¥ÁÉu©tØÁÍýÝÖY=MºÏ†ªñš]‡|=MUíóÇÄØÔÉyßA˜†ýVàÊ᪠+œ§[}=M–#–=@ÿ)*ÎiÐoœßþ[Œr~ýÓÑÒQuóXö¨Ñ$µÕwuÈĵËü Ý=Jážxgnšo~Ä—'gÈÉÍ·?ÈÅÑ@׳ ðã#TÎÂ$—§…ÓlÅAâ´Z³øãXáÔwYs~«PäÚñõ{á™ +=}ÙApk&t -Ó¾L墦ñQ[宸UØcSSðUnH6=JÒÓ5¤š6£j^ •rÛ«Þð]×§<­*´Ç×§b:*BÔ ø×3C¼R¾­¸k-³ñÓË‘­È¼jê9>¢¬È°!´KHsÃM>ïšI¿|§² +N4­Þj]p®:0¥}]°QÚ>™j²ÂšM´šáÌ0]>ÔçÆÖ.¹„Jú³ò¶úz¶ØJo,F+«~YÜÈ%|¤JŽ2kF§nRHïŽ2U´Ë˺ì*Ê6Œ6Bfú4x›0¿,ZQ=@Ã{\\q k2]¸RzC™©äªf ª†=J + FûÚh¬e¨~Ël=J¶Ä j=M´`41/¹IÇWQާª^̳͹øÒ:h|x¬Ñk²j¯!ÀöÊ8obÄ{-›³ÑkŠŠ×Jc¶,’-¸.ýXx.ó«ÄW1,.¶ù×\›ï+ÎMÍý1)*-ß)*H'¦f‰•Iõa ) +*<¨“ñ ½Ä餧@~,Ê?*Ô+z7_c-s³÷’‰|h5S=} ?ÀwÚ£qÿDy@œæfÇö¢•5Ù°du}»M#8ˆ"¤£ùþµœ÷µOCŽ9”ý>˜¼ D•siìy Š™íb÷$»X­ã6**¤ªw€õvÅá +“û™OB¹?e¥»Z•ƒCe©ÐFG_ÀE¡ËÈ\D©µ(Ÿc=Màæ£“çE€Ø´òëÎy_óÇ"â^­…*Ã[´·×˜A¶»vÔßa´ÉÞbÌÈVqqÜæ2™{ÙFÞFÞÕÔúß—í‚…;„¡pàGn +@Þks ÷Gøp‡Â­|AÚ?QI`¥=@Õ%gÚôMüÐ÷ãe¿ä=@Îgú‚ö Äý2ùfÈñ~•ëm Û?æF†Á˜‹˜<ôîJ4œ[×ÇG)*PðƒmòØøcÑQOhÚºT;‡bõ>РבÀ¤g]~„‰ü +Ò[uB´=@üÒU“Cü2²i·”ùTÿÜJ´Ó_‹sf×efN cʹ1é^GeP*>òÎSGi[#û.r®jðTôÇCñ&|¾n­ÄÉʺ=JcÑ6çÎ|Ê6Fûkì’½ë–kgñ>knqLÈî¬g1×<–}«+V+i4+8õ¹è·ÎsO®;¸R Ë]!¹øÆw2J +ê>«rª2»~qscº[ïxö¢BÑÜ3áçHê¬gc>ð¸ò%]»t+î©dŒhe'žéqЩ é=M ÙÆ(X¦µ#&i ÷b(&ݨ½yÌôª~,Ê;Ò0üÓ0=M?Ȉ¾¸ Ý ß͸‰0V¸l7PÜb—Ÿßäî:g +M$IhEŸšÔ¤ºà¯ÿRý!¿Æÿ¤¦¡›íŸÈÄ'ml=@ײþO×ñQ?‚ÕR€àoà»Þ‘=@ßϵ¸ó”çú0=J©ÇT@9lüEkæS ±ɉ”ãÀ´ g9kؽýß²Xƒ³ßššQáëÕã–vŸ‡ap +h­zV†œz¤´íV¥Ç¢ (Í—ÿƒxe=@@aðú’Rúk»wƒWò“%Ó÷PBjZr¹¸þçMçÑ‘/Ûuq÷þ‚E²¹«5Tñ=@…q’Œ‘Ø\ÛÃ×èànHÿØ]˜–ØÆ‰ÿg =@·HðB~I _ÞĈ¥ +_ÐÒUC¢=}oÖVE–5L=}òñ÷“·pw¥6/ $š¥uÓRÏGmMœ7•›$Ü:x£|[1´æœ$~³Ó€òýupPQ^=Md=@ü³?Ö½‰pæŒÞ‘„À¾+÷€³ZyÏ^ .›ï*B³#ϧ-¾³ÑR +ûêr»÷>GÂù kHª2JIð¬èxg¶+BÊm¾+;¾±Û ¸ÔŒ[H„„®J!"üúEj¸/Zt§å}Dbk;NûÊJq-Ñf?Ìn6(>õñ´­ø~ðoilej³=}p° JH«ËL…H¾:³BLÈÊ=}f9t²f+«x +lèp.ù©´*ÈîCBϦÑqj=J³Íq-;Ä^Ž+\‘ À«üMF,ø´5n+,rÊøÆjÆú.%òöz2Š0h̲*Ã;g|úBQ*w:Ò+³c>ôÈNÆj«i^{8[çNÐ68w4R[¶ú«¬^Þ¥V»ò%2"}û9B=J +ûvn¸" Ðm¶‘L¾«Ï)*„g])*Mß)*H'¦f‰•Iõa )*<è“ñ ÅÄ餧@~,Ê?*·o7Ós¶ŒPÜô#€¿_D¿vm[hÿE“MÀáØ_ÑZ¢;}¶šçm‚àYx a΀fÈ… ÀÑxá-A€ +æØ£ÔbÜ=MäqÛÓ8Ñ–Â"]´ðyâð?XãØý­ Ì!€"×[ÖŠÝX²"KyéÏ’ÇYž㙓ŸRíõäe©Ù„¡ò¤×i®ô¹)*±á'Ó¤àŸjÌQô¥Я çÌü*X9Y=}ÐàÀñƒü +¤ìf* ĵ°ÁáuÌ…å¼=M,SHû­2-0¾~¾¿~eª%=JÜtõasH¬ÂäïÙ8=Jì/BÀx=}èÖćg¹šTÌõIt=MÅ£&Ãf}}X§m8¿Éœüýþ=@xõEÐ)*}âN™J=Mª +U>ÿî©'’Ò(BÕï¿·…dÎìò.€C“õÀE‰ßV--Lbض¸¦ÚÓV¥pŽñ›oè¦7¢…à—衘eA^Ü6¼9ï•·Û°{×Í­ë×ÑÀƒ`Þm²×MTüƒª/ˆº¾-ªJŒÈ²lx/JšM´W]±Î4ˆ°®IrI§E +b,.qðS»=J=M½]vHN¨žzœë«Œ²~Ž4qrø*.ðoe*î9¤ÊJîñ_e-½¸+1 à’1<ЍžNk:N¥}¾:-êÆ=}ï*È8S»ì[Q´g-¾=M=@º;S¹q--¶´`18w/x{öŽú^bZꦴ~î,xSÎÝò´„g²1Qé^`Krëï{{-ßx®B[yŠA=J{+ü¢³#Ð`fÆ +4*¶S.úObù™æüúv*h$js[­jK´Ên¡Ê4­,0wr;>,½Gö´* ßH«k5MÒ:b¶ö¤z1Ì| Pe+(žBª§c>Pº9-»nK:R\:c ²R+¶oMÍâfú ¾S´œ¹Qã>„l*ºb)*xT«‘Üü=@ +$ù'Ró'±•(g$#ý ø¢è=@iÀ™í(N&ý¹ùõQ_¨$VÒ/|4ª–Äs[¹cÖ\ÔüàÐ$L:÷0Ì=@ òþžkåÚ=Mè•e¾•[ØuØ—b6=}–ÃøÖV·Û á $É~އس)*í‚óU£í +‚éý”0Ôí«c?¿ø€½¸ñoÍÀß=@f¥VDpâØ˜v I* êã–³;¤€7vÕÊD÷Y°Ê˜†]ë_¢ÔÆæãgwÁzŸÜtIKi“E$¹´#lˆ½£û8Ä%¢àp-!‰»kïÜ ´àSôÚò^áß +rÙš¨õ£_²4Ð=JFY{¾“¯ Ä•µ©vÁ;®:PãŸvºÞÄuaWUHŽ}¤M{ú^a1¿ ½v}Ãþ Ý'h=@îþHîÿønƒ¡ä—H¥á6¥ÿ!MRùþ‚2ŠHýû´'N::>eÒó×"X܋ƣÑv + ü5x{áÕ¬ew¤cµCH±ü™ãÔ•sK×"µH°âhÍR—Pÿ¯s¼í›¸RžñäHÿ=J ¼0D’€Å§@X,ÖÛf´œÝôaמÚ:Ea,ÛùÉÉù„–hË|XM1C¸k"Ô’ÔWš»ïB‡?¼÷Uá¡x¦À!J +‡&†øXxI ¡oÔ-–#v˜FØV"ÕyÓ» °•Ì‘ágÀY„ââ]dÚÖ6:wH¼¢M̺« ±SFyçWÒ§¥!>ü`£^4¿§£hÞ’¯›.´+쥎z.Iñ´j*¥{ËÛ1ßb2y.ò´1úZ¥û<¡£Ôg +’ŽRBÊ’‘¹tÇÀ´bgÐÒ‚žv³Ïn+êG’2¶yù?jkù©t+ý¸þ,,0c(ž+0b#_d-]C«yúWê=MÚ ÍŠŠŠ-Ä`3y [0·¬¬2Ã’kî=M>–õf½ujŠ^‚5gÝv80Š',.Šø’.§ÍÌ#,Q¸ú. +*œp’¯Ë«,+g[È=J´=}w<\v)*¤g>±nkQ=JzŽ2È[nD:ŽÂ‰”gµ2y.:«óÉìªK³*oRghg'ž©qЩÀé=M ÙÇhX¦µ#&i y÷b(&ܨ½yÌôЬÏkrÍŠìn€ 'K“q…¦…ƒ5Vg +F¨f¡†©†Õ‹4ÀŒšeYQXÇÆ¦AYx]ÕŸgpÓryJbñQ@¦u¹Ï½P»ì2‰œ§•Ä„Æ|]ßä,+Œ0pg“v×Ì=MB ÛçáJàE¹ŒX<Ó]‰!©“ý[qmVÊ ¯~óȆ˜ÉÍŸÕdÅŒ:ÎuF +ÓjÓâ¾à/þ×:ëå¸9 _GÐò$±Ì$ÐÅšhHËZÙ•vœû1Õãÿ$0Ö¢àïïIK±Û׿ÇäI{úŸ•ˆ@Â"¡à÷÷]É÷9Ó₼ Âa^ÎäÎ-{˜ôIu•Ùâ$U±…e§fÍÍ4X +¢—6zËôŠ=@X¶”åMU¡ [æ©„0¿™EênФ_.ñaO«&•r¶ÍA„ÖñòJo•UEHŸ$oÝœx4¬tâN;_é7ÿ‹Æ›§g‡‡€Çïn$ˆ£tñx¥åd²‡lÔä7çÑ"k†þÖ’Ÿ×+ÛžoÛÞ7âÓáó¿¡v +CNRŒâhÛuâÎü‡XÀ¼Á–ó-hÆÏ›¡gK|®œË»°üÕ¤X 7NÚ;áM»F-Éœ¥^w˜Œê*yZb!ÑT–\Ü0B;'Tõrâ]Vg²(ýñò=MÝÐþÒòN;ò²Øh9Q=}qwÔ]‡Â‘^õ5 +D@Ÿ*ðUxÝâ×…šb_|@~˱Ñ>¤iË=J=J^’¹CøwZœð+PºrÐN<“±š«=}PÀ&7GLškšðy>ý¿ImjÄdb.6´Í;M]ï/oʸ*ÆvD.R=J,ÑtB]!z.+;ÈRUmCJ=Jzò7>~ + Tgn ÒÖ¤zq<¥n¤z4›*vz»0]Cl´03,R.Zho4‰s +Jš+Æ›>Êú­"ýÊœZâ÷:­-ºJÿ9q;f;Éô¬ñ«,7R™¹i‡=}iÏ8©"GÙ"!yµÉc %‚(ƒé9"¿xiáiV Îÿ%ýÜÓÊ9÷T-Ó4$ÕÌÜïÌUFØ¿°e›¥ÕßߊD7œœœ ç8XX ì¡þ•á +DŽÁ÷óœÙ‘µµÜC úÈj[,ãx³Þ°ûL*¹´OH¿Ÿ€~ÊÆý•8¿N-÷…f—?~ªÝSi^¾W•¥tð±›Æu‚èÃ$× ±‰7ã’:9xîƒáˆä@ΙA,[ç(e}×S7W·Ý”'央 +0©Xo=}š¡z$‹VDÈ¿¦â·ã{³EyÝ©¤ã¼ž‡~EiÛŸ¥—ÑÿÙ¾†›EùÖ!#ÓÜ„ü]ßó¡ÑNèé@@=JIîeZϾ6ljw=@ÿ“­À½†=@dÛå‚ã˜=@Rù‹|ût$Ó¼0§SÞóÿÌZN%=@» +Cp`ßj}GÕrôâÉÒžñzÖÖP¥4ü€cp¡ot¡þNÛ ÞÃ\âà½Íƒr•аH¾%ÞÓ­‰ëw˜½ëäq¹’lÛ(K'W nï%k9ÅôÏÞ}¤§Û*ѼŠý²ý•Ï—°6§“„’Úõ޼Jœq ÏËÐpÏ´- +Ûö¹¤ã ÅCÒä}‡‹H„t·XžáEôö˜S)*@ŒÆäoÅ–7gÅÊÀl2ÐU–c–‹ÁHó–5æíÝÙ Øh—â#bÞ¤ÅÀÄ…)*<Äñ¿óÁD÷·sëÄ F ñVÖˆ1Ã÷•CƒÏ¾âEcÑÞ¾a™ø·ÁÍë[­!ÿ +;ñi;rFâöoS}=JF20Õjn=J+²Ê2ë(~°¸çI$SÀB^õng4ï*³ÊGhƒ^–<ŽznŽ=Mé> 8½ö6},s³(~Ët"ú¹$z»)*›)*¹¨èž"ãÈY +ß¹Å9³i^=M%ó$y‰æ—‚D*HTW2Ø…l…-_Çùq¸eœÉ{Ÿ@ã˜=}ï{º.oœœœ—ññÒ=Já÷qPA.½æ˜w"¤&F„Ålµ4]_ñ•ånð< ºm4t‚sŠL]jþ˼h$=}žòÿ…®¸bÕ½Ä +„@õù¤ý@ƒc`Úˆ#}¬0qç}5„GelW¥Á*VjGÒÚä5Äå ˜…¸2%nšé³=Jÿ’ƒ üT—À.£ƒhúHèÿˆËÏà-!a€­1Mî‰éé xÜÙƒæ>J9LlÚó"! ÓÝu´ùÒߤß +žôöUH~$D`Ó^ÛÊþ¨ô¦eªñÍV  Fĵþ:·Ô)*'ß¿ïÞù‹%„^ h“ ÔÓ§ÿÝ'T —”ºÚe~=@ÓÇ!žÝÓ¼+´âµA^§g²Â,¥™oç™jîsI¯U¼Îtçg¸lë>å°¹w/ï½<ÑN©”}Ká™o˜ +²’óÑС9QØ·×JHLÙË ÉœXT„å—°2‚ÙeŒ·Ñßö_NEx­ç~Óüø¸ëÿ‚§ÌC9?ÞÖÖkËAV‰Or SdýÒ!¼ mÇ×ë[x]Õ¤Ç=}䵵߆›1ô ß=MõvÝðR¥–¾°²÷ Àà +Í}z®ªí“FºUÕFÞõGÖ„âzë—õpF¸¦Ú’‚è2<¨U˜ÛÛ›X-NÄ“‚€»Þýÿ¸nÄ…N¬rê¶pTÊbFw@«|  Ï*óJ«²ÑqÎÈÉ=@ºK¶»!úÅxI=}!›€©m®1,άn£±^30q”?ÛC\ÈL¬ßLÔ +À‹ä>8"i>–à–Hg“7¶ði¿‚J*ùØ’1B¶w/2nÂ,©×pöšTëC¶­^,ÉÄÇ,N+M³Ñ*=MÈɬÚkL.‘=@¿LI>ðøò^*ë(H’{B(Þ,ùÊhìÀꪅÐ-“Có>,ÃH(¾+0PbÌz›:bïd·£+¹½s +€¾­x]pý.kÃcn[ CÊ>x1 t JqÐJ}Kòë´6± ¨“ü¹¹é†iÏ8ÃÃ)*Àé=M ÙÇhX¦µ#&i y÷b(&ܨ½Ä' ‚=}}˜«¶›ƒ‹“y~ú¼¥ö&h˜¸cɃ•˜¬WË\ñÌAX„¤ +‡hEØ“„œš•÷øç¦N³W°}_¿”ÆTúyr“L]?²²Ñ,eêÇû!ýqà Ë8ðJwCqQÿµ° ?=JB×Û½IyÑAß4Ê+å6q›U5^ÿÿ…‡hÂæ›¯>í6…ÈMr¡añÏ+ÃÙ Eà^åŠHìµ-Uu¨°u% +B?[f˜ÔñNå8ÉÕ'ÝxøáB†‚LŠª¥I“ŽL÷=M˜ÀÒVt7{ÐÅühÇÖEéè¡q=}F×Ïu–­¤U9 Œ\T•s •“ÃÛ›±ÛòË¥üçðÿ…)*¢¼1ŸÍÞ„«ß³;Û«hÌÉ’e@×—œ“E}y’R=MÉ +”Ål«[¹t…[~zjPR«LJ[«r¹…m7>/¯ý¬Ok-ÆŠû=}Œ¹zúäÏà‹ëB_|Ì dÀª1OþZ)*BÔðÝâÙ§cÐ{šÊ³‹* hÿ؃Î$è¾ÁIœ÷á. îüw¬'ezà&¥j{7á#ÿ=M½e^ßÌÿ]J +ß› †FÕ9S×›ÛÀ{@â6»V[&u'„ÀV)*‡åìH÷‡=}Q`‚´ç÷^×ï» Lä¢È5 ë³.xCcÜñw7_'ûW…öÂé—6&%´à Qàꑾ^ÒQé>'N=JŠ=MÂ÷EK;«y›²Íjk +ñ^«ë¶BM>A«‚L9Hÿ‘=Jk§n³>:ÙÚÓ žª1]ë´ÌýB5P«Ý-gÔx;J»b̾?fœvÿG¬©}ÛJáÖ ÔK0j,šRD;ñÊG*J=M7´ÈGÓ’¥8q¤Ž¦s¼6úJ­L2BÔc ËIËýM(ß)*H'¦f‰•Iõa <è“ñ ÅÈé¡§@“Ð%0 +Æo‘ºÅåV[ˆj»ÄñixÈRøåÒŸ¯ÆlyÏñì²öÛ?í¿û»gã:©ûÖ ûHÔsz[M^³Tëà*f¸=JqƒG±çd´Ù¢tIôÄ•Ãà*þaÎrù„ ôÝdwªä'®9LGß…‹¼˜ÐÐÅ‹ ã#ÍI__ +¹Ó5‘wP¦Â#×L•\(ÆEkÉ=}ÂFÿzøþ®…WSIŠ=}n«Õå’‡ îË4g9_^Í‘‡áyúŸòí/%Îýð5‚ÀCŸ`¿{±·ŽtÈ5Ù!>Öˆ_åüd´ºÓ¦˜QÛ#Ówåo„,ºB Q7’~óU+ „pGÂo1Þa +žÀÃèò÷Eúþ] nB,PÀ÷TËm»t³€:°{4r!ÒÑÛSNtûSÈÓê,·ÆvÔ*K°S¼Ÿ;­[>sÜчàáWC*²xìȤlPŽ­ÃT \°žH7ïä®—Pv LÞ…DÛ–ä*:¹¤´¿Ç_Õ–¼Î¦”ÌV~=@“5Õ> +âËç6;"=@å‹1ÒUŽa—ÜZê‹\Uµh¬îp:p =J=@"œ“À¦¥UaÇ€ÅÊð-&FÎÄ¥´;€nC´=Mõ˜†ƒÛ¡“šk²_ý¸x–Û×gW#¹‰t=@€cp·Á7«„Lﯬ樞¥Mî*]yl´¸ð· +..ª ?e.2«PÒG*=M_`ðwפ“—<¢× +NFlÛX…HEU,N¦${›ýh=Jû0ßa:¼çó Á’¥$µ¡°¾NŽ×~Äqà§%òó=JŠíýÄ“ÛÉທþHrÔWHÓ——=MÉ”8uCñÞD×CÞA–¾Pn¥‘AMµhe:]àú…S¬§•ÝFá†ã ãÌé +[«s²²]¯> ³RDfHCÌ@²*gPÒ²É&[jÌ1›j;fjX¥¦zzM;-HGCF¸( +þ*C²N¸”Ší¸©9t+sî›~87Jqh¾jn»¶´2vj>,¼¥~úccIøÉâ42;É´ŠÚR,3cûÎýâºrÑr2«eÜ“B­R*‚oÍlÝë=M²1á[x;Fq^áõWÈ2ï>’-^ :1´Pí=M)*m(Þd‘(s +•(g$#ý ø¢è=@iÀ™í(N&ý¹ùõQW¨áûJwl¾¤·êÀ3PUV˜c‰~w÷”ý£@aI‰”#Ýýþmc]ˆ˜ fOßB¯óƒ€Wà=@°Æ¥ŒÎQJC«²ËPWÝ÷Ûß“õ ÚcÏtÍå–Ž´K +‰x…׆3ÖAMŽñ›„pŸz¾Œø±õœgÔÆ}|k@#Õ¹´Ò´¿†8sB¹”Q«ƒ¤ª‰—Ym8yÞÄ¥•uÊiÞÍø9×wÕì_Ÿ$}˜ö/?eˆ¾–„…$eäp{ã°Qþ›¶Ûý,x*ºó;î|ßö‚ä:ù Ö +%¥{Tœ“†¡àů{›­÷“;<„Œ>EÀæ!UÉî?v8²ó`ب%B;y…xü„ä²m…â=J­ïH¸‡Ù…æ.à eü ×_çlØ…ôg“ˆe%¼K=@Ÿ½Ì|Ÿgqu”cš-"wcë¿e÷¶$ãÍ$t$}rC€!¥„ +áä¨(U–¤u‚ÿr¤É¡l3'­Ð‡[&Õ¦dPCŸ–g‘Õ}=J“žà.²J@(ßޤѤ¹üIþ¤ª©ogÒ0ßÇX[ÇTÝ'“MÆ—m6>)*Ñï]ÈÖ“(Þ˜44 ˆ÷à2Òçf$XoûhÒAŠU +=J®†#‚½˜ùÌŸUvâ`BH·ðð½NÇ”øÕÐäžÁ5“˜œÊò‰ÖæÞÄÔµþ·ê/îiL·³=}T&’gY“m†HE*‚vI{}‚㿌õ¯E±ÁšÉ×âýÉf`ÑþpãR ‹«Øèh‰Xv"U +—×mSVÝùϤBœ—íó°ÄÄWvqçž ½ÅV…¤…˪È=M?Öõ––‡pE£ÂÔ}þ²*¹ÍŽ¢½óylÆM*´sñ xGÑ9©ÄÌÞkMP’DCÉ–¡ÏXðîCÂ>ê¬2 ­mIíðPΙŒ\9>7²gª#ÔL-ãÄÄÍ®H3Ôró +#Iøª|r=}î~·:L* GÔ«X0¥úW:q‹êÊ6Q´~6BÐ.IvêjSbÊ>FÃÊ;½JŒ¿-ÈûÄJ<y=Mw`¾)* Ä*­C=JŒÉÒ0‘MH¿å{˜F´|ÐÁb½xªBöw*0ozS«N4…/ñ´nQ“ Ì·²b,] +n1V­‚Í‹)*Ë)*„G])*Nß)*H'¦f‰•Iõa )*<¨“ñ ½»¶30éã©9ÌÞ³\,rI·œé=M¸Æ…ÿž8M²Ø˜vÕáµ7b8Ü=J/ºJ6á÷šœÕë´ªz§Û?ï½úïWË,q÷oú +N;ÉðÀ¬ž*³-fü.´ð2¿"ÌL½'ÙÜ ¢AG²³F€Âжãžêéˆ7TZüV¢² ó¹ìáñ¬\æôér)* +}ç=@þ×¼poÞ*9´ñÑïC„÷çi…ÿy§q|7â¬9ç—bVãTÐäé@YR<=M±IØ‹Le£²62"Õ³Ï[¿ó)*3Ð8z9Â`=@Ë`5¹Û¸pog@øV`#öy-p®Ê‡ê%o±f´`»Y?E +û¶¹âþ a‘Î'wþž…ta;y7bÖ=J¿ØfĤ¹ü郞(ÛÐgeƒšƒæqÁ£ë 0â£bVí»šæ=@*¶°F;†qpa•„evFR{Ä¿ÿ%@˜þU9Zc>Óoþ4 r!=}¶“† l"=@˜·=JVC×é +h{÷”hÃ÷÷etF»'Ué±gñ9PD_YîdöHqËØfƒŠä÷úPäÛóõÀWg÷íQÕdÚ3)*Ç{O.ÃÈþ ›]0g7H909f¤·2¸oTˆ¸.ÆùïO6«»1Ä4–|4<¥¶}кnðRr,9×>l‰¤Ï2Q³É +”5û›«|¨ù¬.¸þ —s¸7ZJBCCÊ3³&ú-MßvD;Fwz:2-I§*¢ª|’,¨£!ËizÃëcËqs=JtzEå;´¥-Q=@ez3s0›k}!qïD]kbb»ï3ú­‘æzg<=MéÞz`\ifúË.;1;ï26H¥ +ªL£0¥o@2šQâ Ì+Òhj'òiÏ8ÃI!OÙ"!yµéc %‚(ƒé9"½xiáiVÉΖê‰â†Åz„`—»  /È µ¸áCÿßt=}¥=}Lr=}«†õטD͹çšä†!\•öù£gÈ6Ÿ3 +xbÄè‡;R*›<””ùRDN$üs–?JH§w+\²°ë0®Æâ<>&¡Ñ-aÒ„h+JBT½Ñh©U@v¶û;¼e‹,ZâÊÕS€(Ÿ‚÷Z÷¹þZàrE›áß$[½õe›Žá£¥ZÒ×Lï…îd^d=J& ÌkTýc•`ù6* +òÑËUÑ•»ž˜-^^{É=@_¤wŃ›­+÷3ÖÅß$QØ —o×EǪNÙÏ£çy@Ø=MÙµWç™)*ÒÉx™…—ábI=@âG ^™xÇÕwàmeÎtnIâüGÜßr±›ˆ=MM߆Ìõùևݖµ}ùJ¤4ヸÿ˜•„– +hèÿ°„š®…ý‡?Á­»‡æ›ëóµÎ”´Â7?¯œ‘G€¿!J\j´$c„}]ÈRû~Ýwe>1ÍTjqN ÇK‰joZš»,q>2]"ú2n3%zš>ëìgpREV¥y÷*›³N¥z2-åÄ0l¢Qªž=J½«m +6þ­±¨ñ´š; 8g“¾3!´½ú¬Z9”¥=}Â=M´Š  p½Üªcö2>R³ªMü”j¡É”Êj¸¢Ê6!ÈoWЪÄxùk'2ŠvÉt2„kïEgª*H#ʸÂÂ>*\nÄÊ|n Ó 5›:Q>@ùòù’ÂÔbNù ª#1 +÷¹$y»)*œ„)*¹¨è"ãÈYß¹Å)*³i^=M%ó$mš¯ls é›ÙÍ[g{À¸ìÑý£‘Ñ=}=@ØwÎ1&pâ$å žŸÂÚœÝPæ¦Èh¹b²,ÜÕ±‘.«½}¦ÈøòîsÄÅ …g2JÂ÷=}ò>*Óìl +êëƒBÍnEœ£±Fÿnÿb%x¬`³Qþ€Û±M1×–D¨ruÇÑJïˆV\š!Ù1äAQ‹ŽN!÷•B„±4òÝB*üèpË¡zÙìî+­y„U¼¸â‡@Ø[pìJ{\y¤æ[VÜhÁ~²=@·À‹—¨ý=}‡B÷c’'xÍsý +ï…¦ìïûPgA牘ý߈Ìa€~†h=}+Rxr"ÏÕ9–ûØü…A0À‰þ¯ãÚ[îüšÁoÏ=@¯Ü7þ±™àPM ¿=M¥‰w=@¤€ ÛŸÂ?ªk²É䨛þ½‘qΉ™GkšÑe`â(¢ÔÛE¿PáwúŸ¤™0ÿÛQª +k,’ÁoÑiÕ$™Œ¢³ÒœµVÔN¥s ÞÁ†iþAÖMä±Ü3%€ÖÞî¡É‡BÌ㯆tà¥áMá®OÏ=}* 2!ÑÞÄÑc=J´`„ÏUâ²-æ}E_³¼k­&ƒï¾îŽüÁÊëñ‹oH¶­ë->Þ`šNR.9È–ôxn2 +j.h|PÒO$Áü•W”<òÖc›µì§QˆÄ×,‰Ü‘œ°¹¢ÙI¼ Ñͯ˜,!ÙJ`î8•5‡b ÿ³¹66ÆþöÁšd(¸ 3S üßÃMVF)*€áEŸŒv£±‡¦£™­É¸ù[@¬0>Û4ãÄ]å× +HÉš×úÈ7ž‹†ãåxÉšI?·œûà ºÕ¶z‚¤¶ ­gyš2ñ˜RW=JŽvÆ9q¶jMʱá¤4}Ð\bÊ T-L«nBîªf]^+½ë-Ä>[îúÄž«RsÌMÓ|yÃñ×z*›#Ê|²òñ¤+Š,QÄ+k# +jÞ² q |4y‹I>–’kfHþ „CFF}>«ezN!ÍŠÜ\/*9ZR,Ñ­t¥Tž:ûvè­ªé¿.ˆþ,*îöz1é´*Ž­ªMG¹>y,³ªT«û’ª«»´~hk'n¨½$‘(s•(g$#ý ø¢è=@iÀ™í(N&ý¹ +ùõQÓà,•!Qûbáž‹LÑçãHÚòPâ¤ñÓû£Ô²ïq- æ¶È=@[L«*½.=@_Ìj+ó^°ªU B__qÒZ2;LƪjN,‘ß\ûû#ÖºæÈ®²÷++éGazÊíB=}”=MÉi˜§‰«ËÛѼKu] +¤=}[„=MF#qIÐP‹r3 J„qgdõ—¡|Ò†,kC^ýÞÞhÉ—­=@ìiÑ™½u€µ‚‡uÒ‡Þåí¶êà-2IäZïùÇh ‡ÿOµÀ!à6ÝC-ØÓ­5žìþŸwj›Ó§…Ûƒ\pUs«„Äñ|ßÔà˜Û ) +*²­Þ¨HÞ†™ú\$™!¤€ëÀe²^Ñ?h=}ÿˆ ÊÞØ‚=JE±4g¯†=MÞ÷y³Òâs]fÓó(ÎìPüü7µÈO·mOë¿J»!rÔ'âO˜)*0݃Ðm˜'åD®cJ9[!Öé–¡]Y§w=@ó—hÙz® +ô¿‘b!0•sñ1 þ¯÷+šáïkaN¨[yße~þd(ú²ÀíŽR“I¹¤ü¢?CJ£|»^,JZñGª.=JnòÔTšŠv'þl½jÑ.+ 0²ÍG²—Îv¤!Íúe›‚\P\/*5=}³½óÊlvny j^Z0s|ˆêÚÂ> +Ù¿=MH¿$aYÔ ‹`]ö¿þ=M'ùm­YͨÈÔëtÙ?‡"du‡[?fó»ï‘…Ò”J e¡ÑWx{ù7@=@I?ûñÈÕ6¸ÓxÇÄS4‹ˆáyõã Ÿ†Gè‹ÄEíšø¢Ø&ˆˆ›=@÷nÒ+­Hz`š[Çãtj‚óf}-P**¥z1G#Ê6ujѺs"Ð2rc²?nM÷sü1,o.N=}~~ÑB%[ÂC˜þjbîû1ò‰ØƒQÇý3)*ãW©ñé‰c&†$ùAñ÷"©îÉÄ›'ã#Ž'<w@¡fk +Ùý†€â7ò*6sÎÑaÿ6ßÛ;æ(Ýþ¤§9ÿ60LQÙMQá¹®@Aš¬bÖ” úåÜQàSìê´~r*¸œÄKJ‹LŽ©”г¶;#ÿÏ@ÊU*éô²Àð˜ƒLoê=JT=MFÆ¡ÿÖ˜„›]5»…ŒíU ­ýÿ +ž'R©SãTÍþy_àb§†£‰V÷xÌ÷Ìž=J+´ƒ9ÌhËÏ÷°B³¨ ßíGÜùWbçxÔÁ ÌäBÕ2²H=M=@åZëù”Gwû øô»ZÂÝ„óÎÿ•—Àôp0J2×;ßG€Ý!•,®ˆ Èw=}GU¥ +{Vù[ÉôÞïaììnü¾z>vxîS¬ïÎ=}Mý=@³AÛäðm¶=}ò!ÊàÚ®ÜÅ´KÃkJ LªÙÒÀ—îí¸òÊLOyñÊÕ>슌g‘=@Îò¼g”p·ºB›P·3³@.·Ñ»bÏ¿G)*Ü=Mïì®#‚,gÕø§å¢Ir§KßÞíP1”¹mIx´ÝEª,gg•d IV'çõ0¼ØÂçmv‘ç†ÖÕÅdj>Ó=}‡¦c=MÃqOÖýè +¹zt'­»'Õ ¹$¸Hÿdë=}ɤìëÆŸ§a|Ø­iÇž•ÉV„”0/†ÒûòsêБÖÈ#´<»œ¥´4ÈÎÉ´0¸:hI˲LªšZ]^,I1,®ëáç1ËHΦzVe1;ul¢<]QÄÝX>­}k3F½|8HÉø +Ò1Ï*ÑZ.þ«b­Ä×+³PS’1F¡^’àš:*Э²!ËQš2c^*.BëÊ ñ½>@¬xû¹xRDdŠB=}ÄÇÈà“L+ µ¾´Æ Å Xs‹!Ĺñ#“%C Ëëþ«7"É}¢È ýh‹´æœ(;›Üñ¤¨úf³GDJjë +„Ê]fkïS*ùçZ#9ô)*ÖÅ)*¼)*¹¨è"ãÈYß¹Å)*³i^=M%ó$=}ÿwà­ó´'ü#§Efb̼¨ò:g÷@7ã(Ôý ÈMCØ8Ø¢¤‡8ˆž¹x¡BQ? !Õ,Z4Ý•¹×Ðજ”@“ànº +Ž{u‹—2ºs´/b9myQ{öq ~´°¿ó%·3ŸPUX×.îF鉥^ÏEõœ *ºex;óÇœ‡zEzVUÒÝ@+×=M±Y”§/d ÎÅ—|ÝÝ…-'Ô˜@ÕœnmuÖý†aß2(+iׯ™{UvgÜ +ø\èʉàxÊ_Õö0=J*™)*GÅ ­‡¢„Ø_D Él ËAW5. ×tÝY”_÷ÈMä-/…­!€Ü./«)*ÜHÑÄÔ*aer-=@²ÄнWéÚÑË H\8¨’^xêÒNsÍ…:)*I­Ý»ªy™„3ƒØÃÇú§¥Ä +6eʪ2!Ñp·ñ*ÆRv:NúùnÎ6~ª8Žù¤8ªEš2«÷c2rf­br ;cŒ§ŒÒ.<ÌrÉ”2Çø9á”^¼cɤ¿Dvº ðcÊkQõZr´Å=J±$T|àÙÛÆâ,âd¹XøI9Ðh»ÜµÌà.¶ÉäæÍéDX:A +€€“ÖÖ÷Ÿ ý›¬¢*{Ë•1ƒ› [45M|««=J=MtðQ{üO–Ùcò _ëõÔ$È8}ïü‰M_›uH9a?ñíˤ#-Z¥´ñWâïý’ßKª/Õ†•ÈïŠjöÿS:ð£ÄŠM>.ª¼-|³± +S+ÚÍLÃÈ¥´SÆ.!Ê4=MCÄ+ì¨þù”+b^+0c R,7*ãºL³LÚ*;ñL­ l2]´ˆö®=Má r4º'”¯b ¹’*+]j?-â&ez4sñ,R/Q¶jÊ+f³=MýçD0˜ò&T‘ÛÌ¥Ò*OªHcv¦=@š +Çþ²…€i«ƒÍ皨˰hÇ&‰ÐÁÚ…å°>.Â=Jw£&ÉÓ"¤¦‰ÎùÓñuŸîßñhî@§ £§ˆ±I¢'6§9—Ý‚)*É $vQÒ¸®Ò¿OsÔLjùX¹5gLaŸÄ˜Eî{ÜUå±6Û =J']FæòÅ +wþ®âèE¸ñ­ˆé1¹N¢ÇqmÁGÝ=M »‡¼Vm|b.§ ‡ßL1Kå›S‚ÂZU½¦µ$C'Qží)*ëW©ñé‰c&†#ùAñ÷"©îÉÄ›'ã#Ž%ùÖŸ‡,…¹Þ=J0¶B&!hè·œÄÏÌ• +‡¼0š ÈôÚdÁ|û‡2Àß@­'ºì•ÅÓÅïûŽÉt€q=Mˆ0™b (Ç+åaœîÞ­îz5îzsñFúŠ,öB%Ôkµ¢BùÚÑKê«.H&}D+ž I³ÊÙ­¦k.sL¹ +qSÏî=}R\jó>FT&SF¡Òó{iÌ÷Uè¼øúP=MóÙ]Ä# ›è·Ò§?ßg껆ƒe›ƒÿ”ïÞNá÷‘Ï$—ŸÂ½È ȵ’X[]ù›{„=M?tvó&ÃU…‘—Š=J€Â°}–HÏÏAzp2òh¿šœ +fGý–'\Úú†Ù8‰9AhWd8ÇÔŠ-pg¥qIMÅhdû”ð+Pr&•“ÆÖX?ÏŒÚGåÍe¸½±†Ité>¹0]!{=}Í6ñ^R‘¶ îÄ~FδL“ê¶:e}Mñl¸½ó(~+º¨RTm1ç<º³Bi¿*r1é +”>š:\x’xí*jCËo¹ Ê6êÉêz7º.Ä+˜,hRª59õß*=@Ÿ43Ï–Èøu§M§oÎ:…بxÑ6gyAsÈ©nLÂàåqÓÙYÉIÐY‰Ð'U¨”•„P¢‘O²ø•óø#Ù‰µÍí9Ì×6n¸ÿ÷ÁO xcA–þ +Œ+HßÇô=@½/ïüÒk5)*d…~[î/WÈϧR5îÂÑÜâÉÕý+NYBÕÓÇñ–G º3M1äâã˜a›õõï\Ä€w'ìu89×¥çY éÆdXõâœk=Jˆ¹ ‡ñu€ßµòN€½N‚å‘|B9^ÄœÌñô‰ +ØE˜'Oý])*Û—©ñé‰d&…#ùAñ÷"¡îÓÙÿb(&ݧI›ÁÞŠ.æyNp ‰âè·ü¿¤Ì¬â+]­)*T`›·ÔçÕý‰p…¡¦ØJê°#ÒÇûÙ@‡ß7„ ýÍBò&Uí탓'IyÈ=MÊá¯.Hÿõ› m +õUœ[twXm¾S¬.oYŒ­¿Q0·;è%ÓìÐŒŽw?xò0ŒÔP=@Öô^Èoˆhƒ†QþÔo±ŠŠ­…Œùýó¨Ï¬ rÿå Ã.¸Ž›‡æ=}Ÿëõ˜[™°j2z8N2ÄŽýÀΆµ¬üª+]ï®þýŸÅ=@» +ž½¬9™›ƒ.Ô§oµ¼ƒÎ®û„«†µŠœ9ç”.‡W™˜›#|2ë‹0§/ kSRØc;²#ÌRÿ–ri~;°+1géôªšH{îz4q]lž‚p’º+J!CËoV2. ¬Öí¹ì«;çï,sBù_¿ñ9 +ŸÙI@ƒ‰;-Ñ@¾É¨/›Ÿ (ÇÈ¡óËŸAèý—‰oÙYÅFÜHñ9â Œð¯pr#Ùah–Ü š ñ9{¨ÿ®‡Û.=@G™[’“ê66ÈþÕs¶‡u*ŒN)*TÉŒÖWªŠýºåÁв5waL•mªP·3Ä×%n8 +T•ƒ øþ.­Õ×[ä ÂóÕð¸¢÷ŸEz*$å¢]ââcâ}vUØã. š• ¹¤ÈH¼Zx‘çž=M½´ û!p£×Oe¸É^¨àÁfyüYx“É'¹’©#ÿïÉÆ›§Ö©V ®&v#ÙI +ÉÀ™ÌÓ+ÏT_@ëY:©±„§C{©ßE–B4‚,÷¼yÊËr‡oóXÀJ[fZ!ÏŠ³hÄU•‡o.R°pQ6gÕøâ(ÛfåWU±àè˜ÿÝ´Ø[ùs‘L#x¨ow]t8¢ÑÜ`¯°B>ü¸ .sF$ Ê‚Ï¡ +fŒÔ~“ÅØ*S¶Dü[÷î§sW“«#×ÈF#¢¦%§ dÕyæ«ç„e›ˆÉy°&æ(†æÜ3s²[É”=@Æ—ó6ýfý³NŒJjêÌê¥AJ=};¶ûK}m/ëZ8.}L€4sF;toC›éÛF-€}ëÖz\q^èÌí +u°árúÁ0Jºw| v²%Ó¤.À‡n9}pò”ü-S´š°|ø»jþi§=JNƒhÛt*WÒgã þ›PgN{Ê“D¸3J Ê’¦e=MP¦j?á¦ÞE±ü’KS§JEÂÏʤØÌr±é÷Z}Ò¬`X”xBîßb +=@Ò Ïàš3‚FHUfçYAé(²¤Çµ‡<÷Ü…²0ævVå {Ô{ÐnBï“·Œ<öóL¾î†æÅÎKkW{¼ÛÕ´¸•EGBµa=}|û=}ÎùC>§{þŸ€³ƒ-×ÛäÈVwË‚ºn‘H„š‹áe# +üøÈ=M[}M½I_›â#ZýËà ¦>å˜ ¡f¯™•¢ì÷VÕ=} ŠõeùÒ½…æ–RŒ"º>X¨¨7W·Pâ!6ÛŠò@tF:‘&ÓÞÉuÖ‘Þ¬ºÈ|ôüÈàV‚uä{ R¡.³1˜bî´¥GÑU0î»F² Ñ +T¥qñP=J£®*ûTå¨(9'Ñ~ÁÏõj:iìxœ~RÞ_ĵ ¿´…NÆs”é Ìnàäµ,‚ö4üÌqzÜÛK!;MBÑco=JÛWç¨Çé¶vvDãó·o Û\”Wf—š¥¶ÿ¡tµ¯rá>¸xg”е~¦k< +Sd-›§§cÏݽŸ?õò¬‚ýÄõ½Å6QÄ ¹ÐùiÌ@æ!Z´¢¿÷$¶ÈM)*táønÄ‘©]Û[ˆyQÀˆ "ÈLÇ^3«HõÀ¥ vžçŒêf*PÌÿ“œÿ¬.B´ÇØÞ=@Þ=JëJŠ ¿gXjZ/Y‘}|L +·Lþ=@ºT‘¿ƒ…’ï†ï·òƒ*îÄeu¥~ç–:q?a@"Tg­Þ¬‘Íw…Ž•Gº11ü¾äѦã¨ÕŠ C‡fƒ£ÁÁ7ã¸ÍÑOr¶¶´ä¨w‡¿þ!p{Œcç–˜=MìùEXÀžÄ­–„=MƒIi¨ÞAf‰ +Ùd¥y)*Ü—¹)*e è§"Û¸Y߹ʼn³Ý‰Ô'ã#!¢k~#Ãî9¤'†qÓä=@°ï~Jkê¼é«& ¿ÐP"沘Յ2fÓè)*è¿2^áù{ü 4{mÈö7=Mæ‡ÇX‡ãqÕžå%Ê7¶³¾ý$h +eâÞ%¾ºUPñ*pg”—/bJynùJêiÇ\ü1ºaD/}þZFÓ½€´ù=@ºzÕ@Cb©Òò‚FÄìcãU™×Â9Ô_/åqÙ‰ÐÈH`„Ö½Ò\4©øäÕX´N«GòЛRœò`²Ly÷*¡=}»™»1>4B{â +ñòËRï÷ì+½ut_˜zsòðR³°Íà~30]qþ{áÂöY¤Ž§çT½i<’Eüß“¦Ê»Èì«Sðÿà.ÜÆÄ+ŽJ"¸’­Œ:3.Cb>+-óI’­.DÂ…^K<çé°wd`RÎÓ}òI·[ÜE«;ëÊ–‡0üX¨hÞF +R*k]qL«ÍwêPFz^”Þ3[]î ÍŒt’çLk«é/u6qÑ_`Fo ÅÆÐŒŽ ÏÏ`(»ä€ä ±¦µv ~'ÿ±XE—ñ½è¹=@‡ÐàËë¿7÷š†fäõ“Y Æ$=@ Y“Þ5+P¥€£`ï—vjF!Ö\™·Ój +OnİÚ.Šª§¾Ö|é v€¼Üó»×wý¹íçž‹†ÂãˆçŽÔ{¾x7¡›#]Í5Á¬±Žá¡ä=}­g¹?·šµ˜=@pŽO½’XJ(}ò ÕÒ³^!¡NTWe~¼p1£=M,ªÅwÔæÁo㊎¯*˜z¨§RU^YÔ +šªÚà‚Ù¢'"[r“™L.››ášX?Z[ê]!´f´ÄýÅ%*7¯Q­ #!ÑÜ5ÁúÜàãn\È‘¶8)*pùóXèã~…º× c¼e»q›N)*“Eá½¢B:‘ÚÑÚàä¿<*3+Ž¥'(þ Vk•€´å4†áÞíjÉ +ïWÀÀˆÛ¤pæW/îñÔ‚Ÿ=@4Ø— 7Ýc ÑŶrÄÑŠ—P˾ÎB˜q’Ñ%À9¾—”ßÈzX0»¸g·o%gÕ8¸¤ýC©£4AaEH±1¤}Ûä5o£¦Çpƒ%¤&‡`F¨ÌåJŠö€G™P +À?WZ*Ó~sÏà=M‹>~=@·E@þ/=MHÞ°àÜÀõŠ3I_UÈ@{*{gÒ”jÝîjÔU}T«>]á“û1_œ\ßb¿¹rÔ¶çßóZ0Rß‚ù‡Ü¦ì¿—fy0d2ÒÕ¿ÇÕÚÖÑ_7§yx]´ý5У#d%Lv¸e +Cb#›ÂßZhõ3?#!Œ(©ÕíàË.¸UØ=}êi‚YàªÈX)*á• ´©Ö›'ã#&A ±÷â(&Ý¥çÛ—ÖÏÕr¡ÓÜ!±ûZ·Xï![Nó~òIŸ0±|¯œ‚öSONöþú×ÔW™—ñâß¿¾YÎ +!Ö#P—¤©jèD÷Ü]JDã§éÏ=Jå¸Ésšnùß‹‡s=@pûL¢ÓúPÁ¼ÌSÆp²¼+#ÏÚÙ¥ž;[!ýTÕÒÂ<ÊÂÐøÜßÖr„ðCbÙÓ„–BضgccIe§7XÏÑý#Ûý)*µó)*PÊ­’ð¢h¿ýÞ +wnÀÈüöà“Hî”W®+~¼iÇ/R5Å2°gŒ’E-<ˆq÷*Û–k[xRàIN6ó=Jû0¼Kš4ÔRÍx4VGå|T¨êÎB½~qìÂP@iT~IÞF2HÑ=@¹*+¬1f=}o0ŽøRcÃyÆv&ýx»çÿfbÊ +Bî,0kpÿÍX‰¿JñÊ“B•°.lËmÂ*¼PRW¹¬÷¬Œo-‘×ÊÚÎ$þ%Ec—Óð[Òà”ÒHŒ];ï4EàpBÓ|ÝUP‘^G)*ûQ‡¡þèÄ ï>—. ØXxga=MøgcŸ4êWÄžußÇ¢?.ÆDñb + 4=@ýº´óû·„ƒz3ƒá¶=M¾_•=@î£×MfÍe–#çU†•ÉiVHÙÐAÞ“¾?Šk?ý°xX†¡FoÇmßAW‡n ZEb¶2Ùm4ȇ­zžÐ=@7Þ;=}QúÈæÖ–ü=M·Ó—a,í˜Ã=}‘ +ß‚E7ÿñA;XBÎ3=}'T ˆùæó¡`»js4‘þ¶¤ êï/fLý×ðᖆ‼W½-G'RÛÑAع7cŠy[k}·xË{–ê4C˜`‚$´ˆðÓ„þÇò‹~R]ÃF§ñáuûÿÍoÜQàîñ¢ +y×]G_ლº¡â²-[É›qÌ À¾,AANºvÍÉ&yN·˜õjÚ2.Â1ÆI˜–Àÿ6„zøî§gÄÆãUñ´åÊAE—õCÁú¸7šœŸ©íû èßß•t>+,•±huÁáͱ8bî ù’?Àƒ_þu˜ +*`ÒߤƒÝ“¸LuuUÐAhüòg·E~µä§Y,MßWÔ÷WϯñÀ¿Gw˜ë=J$ ÏΆ ‹‘«L¥î-,·A›ôÎ2]"úWÆH]CÔ½ÝÀŽý˜Mä…ÄÙÓð.ë,´¥e’¬2 Ðì À¨Ú*6йøÜž ù +:\2Fk½Ásó=}÷Ÿ‹†æ»ôÛ¾™m?Á¤öƒ âEw¤]õñ¢9£—² ÍlFXBªQý#F:¹cÉ´½s YN›~8Êv6z9*IZÆ ÏΤ<+ê2,Âø³Zqg•ËC»² ·’î`œsÍŠ3‡Êóf| 7Vy7³"´¤0d¼rê^ªWÇ)*’»Gï{’¯¯\P +“’;–ZTŽ;­^ùŒ:T¿P2 ÁÌct;¿ùBÍpÁNs]F·¬X`ùB.¤ýD*mŠöFŠjÓ±Íu°«òòËp-8L·@º‡EÚgSY‡Y‰Ó‡lÙx¢qÏU¸=MX·¥aü)*{ƒfˆáš1BžÐâ=Mý +ݹgäȽÒ0+]†ãñ€cd‡?ë-çG¢ú .àU4ðÀ =@Ï…`/kgñ?Îptýâ?ξ•—ò²ÃضUÁb ÓA{8Ð/û0šN¡?÷ñYpÿàq³0šFºlvØvÍÐÝÕAWÜܰZOÍ©FC)*‡Õpu +ˆ_о…*fjT›!ýûnˆGÐ⃭[¬›á³&’ý¢ÛÞ/ÀTvBê ÌÒt¥ÁF^„c“E¡["Î,ÎSÛk6Wì`»hñé×:E ½1™¿°ü2!;¿35O­‡Š›2=J?7!ñ^’B´ðÓj;ÞBQ»ù”Œn3e +7×Ñ,Ly=M}˜çÆñ¡í…ÏžgpÜ æˆÿÝ0\B)*Ù„]{íüæÌ=@ž=@ÿMI·£ÆÆ!QÓïë¸=}ì'åjV¥=@@ý T„:+ºünÜu¡%Òc@“ÐNBÓ“V—:ezÏÕdœ‹»|…ü ƒ;Ĥ +X‘ªA»wh=@WÖ#ªë>=MVÒܺ›vϬ—¬Nýú`|e(^Ôjî9>_È·`Ö=}{ÛÝèվܵTì+cÕ‹‹ÁF ?`ÕFƒ$á0ŒÍ¥ž=M^¤¿û1üL³f¶ÆàÜ"Rô6ŽÄìcãFáãã¢]ˆÑu æ˜Ü +—ÆFï¤íñÛ=JÉÖc1w>©Ó)*@¦%F©˜¨ƒé-"˘iáiV l˜3Мq+¹3î¤Ä'yÌ7æAëK­º‹Üû#|»t=@!¯5EÀ*.­´~]@Çïý¢\ÕNCó& íÑ$XÇ?¾€NR³Q_Ÿbç¹Y +¡duÍŠ½Â æ$ψ…ênxq }к¢$vzœDZ wSn²õ«b>{¼àÔ=JTgÔÍFÂÇt¶D2ôâ¸ç {%$x;óó‰g§vë$ Ú­)*”©Ç¥f=}%ˆy_(§Ü›_Ô›‚zZ*ÃF}·^¼þ9V¡²¶}WNkEº¡ +IŸ0œ½¶rhN)*[lQ>,:.¹tÇ-¾½Ä+ôlªÊ²ÔJN s=M^,|÷²M~­²²Nù ïg,JœPpa{Ö6°QßEbvsÑßW¾°Á»;y‘‹eÇʯòÐ3Æ'ÜŒšy×*5F3Z›^9jJæ¸w-Ž~¶j]ï-š3. +pqßsü¶jWh}jQàú`![ð’´]ì‹QÞ «Þ†§ÏŠrÊ ×þfF÷3õGמxÑÒ„ïéÑœQ8ݰH°Ñf¥ÌZõàç¹xß•†;üp eyˆ©Q?ïñóá©ýÙ,ÅЕ¹fˆ±G“OI?ùÌ~ ç£[{s Gé +Çc5R×£xrGÕvƒC¤ÚŠ#¨•ÍDøbùÕž êz6ëf)*ÇŸ›1{hØ‘wš¶8¶û嚪h7 —íÒF–Vð9HñüÞÁíeE2=@ð0É•2Ž`eɉ~ø¢EŒ=M?Œ´zF™‚¶¤ú‚Þä²Úmª±I +s&ÔyÔ¥›<,7å2'’üt`êà6G®¯ë€HÝnb€×/ƒX_ÌÎ…¢J0{óÄÇ£T‰ß–¾OkZ1Ä1á“´¨9oÏüߤ¬äo æu™‚8PÜñ@&¦c‘¦eX³×`»DBM¯ ?Ÿ`"¹ÑN‡W +·boªÊI´ õWçC°æHWö©]{ßsÀnÂÑ×㯶þ³A^¨BÂ#Ê åJ+,RTݘö;³Ó»`Ö×Í*«[vàê“ÇõÅTø3 ·˜ÕéðÀñ-´ãµÈW–p¥›yÞÐr†:ZS_È”5®n½ƒ=@âÕãz›¶|• +L5°œR“³„š×t‡{¾÷åÅ·†õV:•™?.¶%~ÿ µQ§ªVk²ÏD—«þ=}ãóëÕ²óò™<÷1Äë÷òêÁ×~…Åæ÷²å$¤äÉtÓ–¹2°¶ñ"¯¤b¿›¹2'Œ—çÙמt QÐ…M=Mî㉪&~#ñI +ÉÀ™É(S÷¨ÙñÙ)*¸¨ƒè«ß—ÄýWÊWàŠKZqÑߨIm65¨MŠª:g%z:‡â0Âd‚Eµ£#IøÑ‘}~¸š†V ,Õ˜FLÆ_ ÍWÇ=@-<;ò]²ÙaÖð%¤'8¨^ÞÁ¡R»_ [ÕÓžBEÔ•ƒ}±’ª +e~Ô~å²zPy¢ÓEo]´¤wÔd±1Eâ&pƒ¢M²×¸†›‡€"âØêx8V±·§™üuØ'Û1Ãh÷ˆF=@[‘ÈÛøKsVq”~-;³{½ï[f­ÞºêB_MÈ4Ú +]»EÁ:œ0Â[O³¼idt_ØÛ+Âë²%_¡ãMJHñ>r?É“òï`ïŸirŸ0ý‡à =M˜€5{}ÝN¼hS7V +ý­8Uü „M_sÕ úq”ЃŽÃAº/<\ßTö‘»xpž1.ý ÇB÷1üÁÏìè1Q´ã¾¶GÊŸ5öüÃkbÔQèÎ)*¤Å½sñŒç«®,T——¸@KŸÒsÎÔñörQßx=@4¦‘´/w“å$ûX´#`"VogŒ +õq®]vœ§œ,Ê„Œ¶Õ½þÚ*$½‡bã£XÙþÄÐD€zøþVšxU嫟_Î…é+S¶óiŽ i? ¯£ãfm¿›¨Èí(áñI˜‰«¦}#ñIÉÀ™ÉhS&=M¹ùõa䂞a:ÔÕ¬…ŽC_% m +7 I"pe ÜS„Yß‚wÐü*Õ³+n|œÃŸ—çáo+*TîC “íО¥Ù‘Öè N‡jì•ÁÓñ›ûÕÑ¥Ëè7Û6•ðôgUmy¡¬y_¿Ä™T'å¼¼\/Y•r!*ˆeÀ¬U¶ìnœSÐÜt‚nCտȈ‚§tïü +BSf€"‘F=J $ÇÅ=@ál.v«´ìñ9P`qg=@¤§èËü²<€Û#Ùb&=MIù…]å£?yŒâÚòr!ÒèGB‡í¾=Mf|̤t·¸cФraHaw/Ó9€†.†¸74¼#ƒ*Ä»Íïß=}Eå¦N +;J»ùï4:ý¼Î¹tàˆj[¼y”qÊaXi¿’f7müûßù_OÞÔ´3.J=}n>`7ÎbNH=MßzcntÜ­F¥´5ú, +ö nH þýûk]ãœj^®L,üÑ;g¾šr.~ØU`½<9¨”ÛË|'ÀvÄ\ÅGO!ýdm.CÌþíüè¸W—•Ò%Iº01ç‹÷ñE›œ gEqÕ€¦ÖPææÛ›âäï`«÷œìÙ“¡VîrÄ÷Ï«œë, +w:Ö‘V¼Ú[cךó¸{øŸ§cRôí/•Õ¹iXh†ˆ‡ŸHÿ%=@ØÐ€K1¢HÉ?w}—ã Õ–¼v²i©”üOúž?3fî3-&Ô„ä¥ôG~>4çó0§ã Ù’Ó!„è¼åGÂÞ–Ã|Jñá¤0´î·²· +ã¶Taï?‚îäwPå‡ ƒuŠä6æŒgÛùÄŒ=M ãúèÇßÑ,=MÒã&wÂ"Ù]ÅÓáî¤ÆgNñ÷Ÿ„‡Jz*BFÉÀ…ˆ°b͘êªQÞþ—нOã¸ûrA*IÜ¢Î2„N¸É´>ß=@.ª’…àºJ4’ß_Õ +½~ùV½Ñ™W}T¤ºN)*d`Å3ØjÆýÂ-c%¥ÄxgÕÿ«\T˜w‘A¯•ä7øoxbûáz;!{ßvLÐÑÕOånÁ´€É–eÎI‚üʾq¼ôsEÚ2³ÕÅýÄ TÄ«,¥¥~ßð"L6ÛL’e|15ª¨$+á +ì—Nÿjñd²ÜyiøÆµ†±‚ãäŠ=@÷]ß÷•YTË=J+‡\cØPÖ˜=@â51²Èšy9UÒõŸþ”–“ûœmCe¾•Ü¢š¬¨ÜVy„oe¦ç`( (ß"9ïYÅ'ã##)* Ñ÷"(&Ý¥Ëa +4Øœn?b=}óÙ ‰kí7áåå…uÜ Ò¼þüÕU¶—8ô,æy“Î?&›—˜·ØiX)*^’Õe{Ó@_¥ó að·èûƒæ…šÀsþ0Ý_ œ=MÔ(±¹WðàÈ":Nãž½uš\þ¤“ßÎ,P¨’ +Zšp6ú?ØWÂùÖý”×J™ ^UM]ülCŽHðÞñ½ífâϸӧe­Es Ûò´b¤Û d¸­F&æ±ÐémÕ¨Ëí‡Ú)*—ºxýˆ°gxcæ&ä…­µm÷—Vè½afOq-’Q*ý|‰;¾#Œ3ð¢ÔWF +®06¨3>C c’yÞ­à88osºK¦êªV*0\T«:œ2P§Rsl4v;|nvFF¤z‹».rÄ¥,>»V ñ. ÍŠ=J3z?q)*]}W²2Áâ÷bÓg·ÞàÌ,-FHrÌ?r¡B¶HðÒø4r½ÃHÿN›‚ªyfaËÊçÅQ² +e幄¥€¸‚be¥qLÀõsÞćpÌ"áŒýâì0ïP¨ùXsµvšß=@ž™ûñþgw?Ås%WÝi8•ÉhØp„^ÉË>`ÝÔ?òà½#ÄõÕ—dŽá©nÇ_ޏÏÕɯÒ(ØÞÇeY…$ZÝ—rßþØòößÚ©¿€G„™ +x èÍ$eÓù ·ºNßÓ?ýñþõ¦Üõ±x\\riôäÐ|ãX`a(Ä5”Vâ Ðs¶¦ÿ]Ü yl‰ë©9ïAWݧ¼œh$ E ¢Ùr$}=ME‚Z»0æÈ˜gÙëóÞÓçy˜•¼åù¥°y noàÔç +º¦Ï¢^o¶©xºê1?ØcÛù7ñ¸§Îãý$=MÕ…â9M0‘iôçˆF!Hi{°ÕLïjàº=J¬‡±Q'4Y'—ë0í®îIlçî}³ÛéÍþUSC†iÂj"&” TÅ{%q¬‡"в*=}Ä v—¤9ýÙØ@” +—E@=@`ÊçùÏ›Ÿ\¢¹mјˆ•âúžåd¥’À®zZ/£†ÆTââ=}í…yÑ~Iüãx³¶‡Þªr‹Ñ”y=}*8SRz*,«ÍÃ+–^¥WOÝ–Æ;÷e4"„Þª|U}Jri¯†¶ Ä ?›CF",[xÐB‚RNÄ¿ +sÞAìëZT¥Ä=M­i{Ó«­ñ×qàýCB›0mn!Ëí`!|—ú…’b×Ö€„6†˜ g“r„üHÃÎÅ %¡VkìÆ]©¿Ë•ú$€·^ |*²,Ôwãã“Z›yx˜Óþ—”U¦>‚¬è ³>´=M¯< +]ÿ4ÕÔþ+ä\oSZŸ$Ól3¶ÿò´¤ðØ3EÌáì—ÀxYhЗ-÷ñ쫇¦¢â#ÝþާWϨ#–Ö8yÓ%ü=MÄ£†Ã—=@…è—ïÊÏáXrC„vÈ1$ïC$ýly%\&"á•I´©a=M%÷ï‰Æ +›'ã#!×q°$Ÿ¥¡frî-ñÎß>´0¹]â¢öÂ"ÏЪŸóE¦oo.=}›tüÔ¬OX‹&5%´SÚ$ÇÏËW‚õêóhÞBeyÏ_°(¬™Þf׈q}ñÔ!d–!E÷¢³?ñݤ—’_tz*Œ•VÛ +—·„õ¬Nœ”gØQ.ÆFÈP¼Ë®—†¡^5`@öôöûÛÍDê²­^jÑÔüx`÷†Òâ¹Ø“ /co•¹PÕFâÐ}yb$Ý‘Ì8$·BDUvÊ[!Iåâ$åF†ÇVÙR$­8ãû3§Â纛  Ã$§›ŸB=J +ï´´021?æÜÜ=@½…Š5[“üÝ‘­bî›^@¸|+.>|b-N9å¯Hª?=M^?@66¿BljëLŽ #ÏSŠ˜¿àr1=JDŽoì2P3F49kæ«4+Nú^š6rÀ[GÒ1T+óº[>–’`]}’ ¨<¨ùÑ +ÛÙ W·g%:ÝÈJ=}{£Ž Óñ••ЧE9{­ÑÁ á¡‚I\•FäÆMv¤¦Õލµ(Ð~ÁáЉsãN¨¯=M“ý€±u'AŸEÁz•Ø–s>–»"€Ôáýv¤¡Ø§Wáxຓ^ ¿Ía2Ièã]ßÿ±6¸ÃW@s? +¯õõxKç’+0N^¡Uv% ê»PSÞøþŠkƒ,ÆGØ¥Ó‚…ÝJ-„=MŸC‹Uö(Ù$|ðݧtV ÃVæaòØØX¥¹´ ¿$øÇÕ ‰‡Úš­ˆÀF½R ùHh¹¥yÑûÕZW›z;êÆ€ÝõÉWyYÌ åi +uÜ=@ß!AXÒa?ª5hʠؘٴv ã×ùw×=}+’F¨?=J'N»j»ëÎT͉µÊä Ç3.0™[}]( +ÐÆ7¸ÇÒß› ì8€ŠZªy_…¼=@ÿ(³$‡¼ÿ×ßNºC;±=JrÙiÓ¨»Y=@å'`Ã{‘—££œ¤"[Ćᖊ/ƒ—¤Éí«ïHîhò²Ï€Ç*+Iü³lŸá-³ÍjoÊœkÊàÚµ*ÑÎÃ>?0Ôp + KzjH¿r þs5ù”`„Ð=JÏß ÕâcbÒߨb]ßÁÎCЀÙ|lÂfý}¾§v…ã/÷=}GǶg÷¡æ}lèj‹ØÉÜSn$1üà–>éÓ1{¥Çù=J{Ëã ¤GDÌìÊI>eœœ^?`¶8Uw“õ˜ö +â+“…A¶zþàQçož_>Ydˬqé×1¦Ò‰åàŠöûËИܽªPÕB€öŸ·šu9çˆ]–Ø„¸QÓ•¦…øïæÊwž=MµÁf(ØA…ÕGqÔÔ×ÿ~àû1¬hUé±¹ãØ^ m¨x5³-UáCÑ@ˆ„s +ŸõÚ5%Ü+‚Iø]vÍëi‚Ü—CœÎÈÅ–#¢)*£œé+"ϨiáiV h&#ñIÉÀ™¡ãŒÿÚ‚½*ì˜G(U!$8i;©’XjC³¬QãÒÞïÿ=}îž5Œ0úæ9åCÍŽÔ%FI'ˆŠð.,h('´÷ -„¡…‘b +ZI¹”œFå„$q} ‰ãŽn[»Ã÷›b˜—žÆÄä¡J"ÀJ?‰?%Åam§†ÞÜ´ðä‡/ *©Tñw“„“%}0Ñüù³L›r—WÊZP¯nõ“œj;l”5ÀÎ=Jz;†üØúj0£ÍžÞÏ¥ÑÍ=}U?|a@iz=@ +˜S›a-²³Ä8uUVâÏ£ñÿÉÍ8Á× ¥n±o¦³'½iß €b#¤™ G©XÙûC·'e†ßi—¬õ!$Ëñþöͱh6Û,Ì3‡\[â C.º’Ålk©Jly–}^šaE0>%!Ôx®ÌÞ°N›bÏÛ +ÌX,#¥4tJ‡¶vB&’ 2„/k,§’3?jº+ÍsÑ)*0[S3<Þ!I—Õ–T³PÍXs¹ßöW iw¨¸hÌXÊ’‰w”Qîè4²ØˆxÙF§aíÑß©y(¯¤‡ÅŒ=@‡þ‡1e}#w›ŸÀ$Ÿ‹üéiržH¾ +µ%9wÛ–¶@3i£ØfãØÆbŽ“Ùy‚+fÊ Ö€ÞÂòiÚ„=JÖ&û^·àã,Éšú…4Ð-Œ¥þàœQVÐßWÈ¿Ÿ*»]"}Ö=JŽ;»#ÿt„0l´ÓtÜŸ€ør†¡×QÄÅ Óɇwé›éú0±æ&á +)*Rˆ¹yü&ÁþÂ"¹ˆ‰Ì¹Ì^9‰Ë_°K”—µ¶ñf§ÿí¸; Ÿc¦Pü(¹(Âè¨Ãú$ Â½\ÀA%€‹UYô%šé…”?$í“׈…Ôº‚« x¦ß&ý&'aÑÜ!7V¿¬›ˆ?©mé3Â*f + ;|tdõ' IìÙ>Ž„¥ÅÀBÃB÷iAõÉ$%ÑÇ‘ýÄßÞu†@õR!CظV߆AùЉå ÌÛP¡R†'ýˆðBHh„ð#–ž±ÿŸ–­wÐã“r:ù«Œc÷—¹8ùÁ`[Ik'5ÌúÔ”ßm Çqù2§¯Ÿ£øfž +æã—du4ÔN¦­È bÒâàê:Q=@Ý’»€*G¹^ç­ûs.wM»Œ÷â¶ï1}¯ H¿hlz¼0›`ÇLΜSîWÛê]~¶Ó¡j«Óik8b´…X 2â#|ÕðUçëïuƒ?_Aà¬kö¤ü†¶—˜Ò#°ø¯ +ŒäÙ{…rížjÑKaü$ÑÙŸK¤d’úñå)*¿‰Î Yy‡LðÄô„á’LY*~¥UŸGPÈüÒ,bÕ¸†ߟ=}™?θ¥ÀëÂë>×D€âow™´¸Ð!ZhT„ ½ÖçFjïD‡ ÿlÆ% Ó@·þ_å|u3LÆïAQ9=@ +ßž"rsNxB"Åf hË=@X½u 0'ë,c!ظV¥Õ½½W\ä@ÃXˆ…ôëq"9]"ͰYi½Q—ŽU–±æâŸMá’Hßæü0@ „ôp~$¹”t¢i<ïèÜsNå£Li˜=Ji>è™ñ Åù´ +éb=M%÷ÅÁoð|>n0f©„' 謻†‡ß£‡©¢æîQÏÍ/—¢8¶Öq7'çRS´‡;B5¼âÀ‰Yï<¯ˆÎ´zq;uÛB$wjüÞ‹«.>BJÄù¼¡w` õáQΞñAÖÍSë=}ˆQPdÙ¢Üî +àl ðT^ýý•ÏÚ¯.îŒÛóà_Ø®;Q´ø%”ÂÂ;À¬÷ÊMš[~@תõ-ço. îöú7…õ|ÊýŽC»»nHúˆý¼A’?oŒÀÍrHnVÈRÃ’ØV§¡q… ô¾}b²€“À¦|æ¹û™xADÃiæ¥H}UÙµ +Õâ%œœžÜæéÙ§/äh±u%º¨Æ=Mˆ±I\ ùÑÛø]Þï‚;FמöÛèÆ5+†Ý3;,oäxÞ¿rhŒæ¥ý®¢{ºkðkÔYJ,êVJ{’ º,z¢B Ϙ·Ð èáËüèîîT<•VãUñ5ÁÑÒ' +G$ED÷ÄÈݦ“–b½“véïšÄ=M—ˆå úéyutĘœS)*¥ž˜”œó±0bä¾àv*9_°ƒ™£¶³¼,3ÄÅ~šÜæ³>à+ûJ¶ûÚÓŸ¬sMÂ~äíÀŠy^î´Ùšk¯»R±2Íœ=J-=Jû´œ^pB2ÔÈþá×¢ä‚0nDü‡‡Íc^(Ïýi +ç¨ ¿–ÌS“l.t½‰üž£=MÀYäö\ña·˜”W ‡ëuZ ,å#cPB„âã‘Hµý^(Gºï~]C[‰òŸf!fÉž¦]6rM:@bØUˆ®½íU»b ºs–[*îü¿L÷ÅkåÄ7”üŠtªezÅ€?§j;x +]ëjz›~ÅyUJHRSxk,w|œd+*ùktÙ¢~=@âù2ƒëcf~ÞÂx7½1½€€á{VŠ(ž2¤Áz…’²´.¤—hÍÙŸ7²ïžà!·È/~`ȹÊáÏÛ˜ÿÞzJ4€¿žÒ,²;Ä¢ÛøÞVBŒ›„F +ÃŽº¼Ì‘?¨»:å¼§ÕfÕƒ>¬TU¦‘°hÝzÍ=}²ÌW±Øÿ¬r´ã;çZú0Q_¤oØÕGU†›¿Ðß±PÞ)*{·›Äl•$×ìîmÞ FŒãâ᤟åx¦\ÊV=}{×ÿ —yÓýÏÿ@ÑHQßx‰îH žÏçÌã`&ôÝL¾¶Ü¼ó†Ín:OÚ0ñfýÃ5¸þØX +mÙhÿ}YV3ì›àÔ#wÄ›ÉÎì=}k6sž­)*‡?=@›í=@yØýgJßÍÚ´Ì@ü­f½Îà²eÐ’E‚oîvp Ð5C¸ÿ–g03LS +îû=ME’=@¼~– ÎðMÐÎF3ÄÅ„>Ùâïqàâ"«ë;mpQzèÊF»o8uÙK“4SÀb-çc1ÐñûÇCÖ…‡xË‘{¥öî)*2Ì1ŸÍà>/,LÑ„¤šM_ÎÖ¸´üy8–Ò’*yáïeboGm¸sBÖ +•ÕCРÐ(ÿKy^ÐPá|]hÞÎagþŸ­•+V׋”YÝÞs×^ùTÖ~»NÄ“ÝvèÓӅй{„aƒ½ùdàÍ~—„ºÒj“F¡8D#݃$˜ b€PJ¼BqÏŸ=MF£ewKŠLÃ'aðáýWÉ—ÉÝS| +<§§+Ó[ä=@ÿõ5V‚ÇÖEZŒÂ¢I>MXÉ4i =J9(×&1 Á÷"(&ݦ#}&©˜¨ƒçì EÖµÞ¼ôvÒ=M$ùÊÌWË-5ª¬D2Ãù!ÓºZå˜jÔÖ3¼ÉˆûDÓ˜*‡?ú:‘Ð;ß½•'ï +Kî¿5%${Ît×gõ¼ž>TªgÐb>þùþ+•”ªxýEÀ›#P„× #ß‘ßZ‰ùCJ%|=@Wµ„xÒ—èLºÑFÇí=@FÆ|ñqA_¸½kÿCWõ¡-ËBLæ&"œ¹m¹È€­Ó=}.øUÁVGÂà ÁçqÅPÝâ +àÃXO8gXÕ¤¬E½}ÐÇõ ßpb÷W@=@—ˆŒ\’Û{gÕËÛ[H¾åwŠˆzå+%7Ïu´~3 ¯P8È&{ÊjR)*X¾u–FëPbÏÊŠÚËŽ=JÄ©koÖ 51³Ó0Çd»*sÑ„°àÄŽÜÆ4¥D¿?÷Gà:—÷Gòâ— +l)*rßä—°àñäÂÔÃQÛ‡–3qA 0È‘›Ú0ÞÑÀ_é»uoWß5›Áïø\ê=Mñ“ó[µ—ŽRW¥ƒÏÜ*¼Iz­I·Ÿ‹úŹhå6CádÑyß°ÿ…’F¶ÿ©íãi¬ÉÒ› Ô· Ó$t@,ñT]3„$‘Oo' +q3†ñÿ)*„à½sd;Úâ¿ †É´¤©üßQI{$À&Œxá‡ÓmÖ„Åä·ÞÏ-ç¨h½6fò#dÆÓÑ€\a`]½‡bñOåƒl˜­’YBN H߀O‹Aoýd—ø×þ2u`[–8˜ã ¨¥&~ÖOóÍéˆäȱ +×ý"„NéÒäCßZ Õ†ªÃ«:cÙUÁ¬‘äZÆ¢“ö'{8ÑoÌßÊ$§'Ö…¿Qýf½I?ÿ(b@=}%ÄIÔhÞˆÄ …ÑŬ*ä–#ÂnövyyFÜÑÀbpÁû•ÕŸ¸×Ï™m’¡{˜'Ë=}È=Máòñß +þ›=Må™ý‹\ø èÄ=@=@ªSláí´$ÍÓWµŽõ£€g•ѵGãcÜ»òÔ"Á3Ÿ6v½i__^Ü埧5qèù¿z>e¿ÂF=@ðCw”ÔÍKE²Oª%=J=@ó\=M +sP=Jkâ1ˆ©F›}ÊÈ0…²åªC0©Ï3ù=@Kt'™Ïƒºd¤kHW&1 Á÷"(&ݦ'}&©˜¨ƒçß9œmÕb²Zç%¶è kÌå˜~×éWìíòõ·Ðþ8ØŒ­ l­÷c>€—˜Ÿ§Å¶Gñ]~½w +à TÁk[ °Ã¹«}4›ÍP"à3…µ½Ã6§'R€þƒâÁƒ–«•&k~³Ñu”¨5… §ì£ùF¡Ñ9–õÔ¡ë•«ôFZB]ð¥zœåYÑž` Ê„§´ÖsêîAy¹NÿœŸC‹Á®Ð÷%0qÂ4=M©wâ#ï ë$®èT¹ÒÅ›â +Ét£d¥·"$þ˜d¬ä?óÀ8æ]¿Ë|¶a˜_Á•x¦2*ºy×U1œÅ}½{\‡ÝÒ}¸sà½O«ž6ó¸ìÑk_ÅþÄ„gÑu"Ã,Àø~¥öø*N ÌDïÕ´-]ö{~žë:’úrK¹”<£kL/Ršàp +£ÐpÚ75|›EÃQÑÝ_ÓrªŽ›nÒÔÄÇOà»5\wñ–—©ruÊ­“ àñ¼=M\ ÃyVµéxKÂjåÛ¹t 'm½IÕ­½fè´¡(Áÿ/hG B$åb)*~(±iüüÜ_§E‡ÏAŸDµh]T#€ú$Äb©z +ñUïõ$ ‚$šAƒ$±{µ=@ô¿“K®—%ÕüíÁF'f(xfÚ §ÿ'οÞA½¹ðམ¥xüWTxó6cÑK¥‡ûE{Ò~XlØ‚î/G%Oø§kÓáPæž óú¦ÄšA9 hg( )*™Áy±wÿIÑä´ýµ +!€ù®W,jzx5HúUVÜ“Ø8ÓüA^Ío`A¤ÒH,ô½b§oxc¡o•|ÄÅu”ýÜß“‹Å›ëf'ÿèBÜùW"žIÍ¥u©g_½˜ôÛȨ$ 'qW‹ˆÁ‚¼úÔôžVÊ+‰ò%Ù[¸…¿L ä#B¥ð9Ò> +cD¤ÑÀMN€q¿E‡õ[@×…½yI=@×ÄÙ~ŸAÑÚÏfµž°ðÑ˜ÃØLÈŠ“Èaô¹€^Y”H†àgÔ‹Üùc1Ó'…™kËŒNO;Ÿà!–eãísE2Ó2˜[þ©åŽ9:.&ÄÎËdƒâ=JÀ +¸÷¬©¿:=MH(·×ä¸Wöª6² ðRb(Äà÷úÞ#.ŽÇßžÝíùYÀ¯%sÞJ<2­_'ã¡Ç©ÑõgïN—è™ñ Å ´Éb=M%÷—"‹,î,=}H#- +?%W…Àþ…OŽÀf»j™¬÷Ðá À‡ì9ÉÍo”1á < ìäÚqe%o,~ ìÎ@­ßèò’[ö=MÌCExîß 0(^ë1gÔ¼¯ß5 Òß6šŽ&Bʵ|=@¡/@ƒt«]S¢W[ä¸Û@âí”cÉy¤ +¥~¸ý<™'_“áœ!Íü‰˜HÔ£™‡Þ.IZMPç3íØ„•ØOskg•žÕý× aN,fÚ¢I_¿»Ðc“qƒüþgÓzb¹ôã#b›õ ¹Ä õ噌Kµ+†fÇ0a=M\²)*¤·b/Ú"]†c(ÉGâ¨Ë‘ +Þ$©Ó²ACÀgo›ú‚íØ¿ÕÍ$Åqôä¯Piï†ÃqˆG†××Q†Þ½†#ž añÒ¿×Ð2iÇ¢Õ“ôûáÿ—Z.^oq·›µ€$¬<3”ùÛÙžÕàß ökó=JüâÉœï焬wGÑ\‡ý×ê{Ô•ÊÖ˜ +07H´ÎºŒe${ÜL‰–¶}¬’=@,ü0­T“SE™:í:hžDÅ/nïS,M’š™×\­Ûö—[x7–÷ˆ¾ˆýïõ‹‘ý´ãžÅ¶èH¥^ñsØÿÃ?ö0ˆñ%™1gñöšG`c"Ø…¯)*‘’=}ƒ‘Г=}{“³á +–ªp3=}B%Õ¤Á´(¡Ó'h c·:äL‘眄 QVñÄ bÈp¢ƒžèÊl>³\$€å‘ŠSâàôä,Žv3Ä‹hÉsÍèÐ9‚>Å=}õâßçk Ð }W^pÇ_ÇUw¡x²VÀJòâhÿܧe¹{ƒ'f +Jû8ÅÖµ¡¢ô2˜nÂJDšÃ›‡ÇH§æ»¤¿áüä…a‚­™›¢ï©SóñOþ©ëÉ eÙC$y¿üØ(Ñüß&<İd•¶fÖçî$öû'P —À‡ˆ=}W„þ$Ùhµýä¡¶d¯ÐAK}•xxRñÐõ"‘É}¯m +yþž)*µVÁ×çßàBÚŠk^yÁ}Óðy–8¿Qyéÿ™wwÜ–¬ÒÎ%ï—d–Ùû÷ɶ$Üdù|þŸ§od±áÐ{%ðÂWgÕúd9e󇡷ŒÐWXÅm˜ÿ¿Þ²ø*:LçöšÂ$¢ƒå×Ç‘$•€HójÊ[ +ŒZ‘¶©Öü=@ïHµ$aûÅ€ÃDüòÀXPBÉÉ´é±ã$pEàçay4Ìq”(“'?³ë»,o2b8T´ªN½¶z¡û<0sïssÜNÆ4ËP·‹J9};¼03ÏrØbGÓ€¼UˆägŒ“To5!ëB^YvpÌNŒªì„×ÒÌ +£;í§sÕ‘9XZo-þÿ=M5U¡‰sûËú“+NR¥û»ò´2¦}^ÓÒþ–.yß?@xÙ¬Qá]~¡í9‡Õ*=}ä›>¿$÷kgù_ζٿ…`Ä=Ms ÖÁ—2è¿PÍÙæ;c +*-xwÐbùÒ伌B=}÷ž› äùx;Ø"wŠ÷\scÉrÙm6ŸH˜¡äÞdgçð†M\mFÚ &Õ¦D$—Íü¬róLk-â´üp€ß<¯½!ŽáœŽñ›ÖçÇ•{ /å´G+¸L+(Œ¬üeÔKaUÊ*piû +ÓHÀ5CW…y»Ñ“­Pe)*øª#¶)*q©ÓLMhW&1 Éøb(&ݦ'}&©˜¨ƒçÿ*ÞÔåF˜]M.¤ùÊzƒax™þ#!IJ}äg´l$¼ ¦`æðl”jBâJtùéÊUç¡G„¡/; +ÉøªÓz/Zq-~¿1X~e1"n&ws?ÿÿRE~ÒÃ-¨÷5~þwcaX…+Σøofu˜G]“hÇý¶½ï¤§VýùXÌéŠÚ{N@&ÕèbœÐXº¾:º,ÖHU¢ùŒO‚áKØ[  >Ò¿G%4™¾|M’I +=J|~óq‡Ê}M“J¨Hí$=@£ŒüŽîÿ#»FÂ(ÛâáñPpÙÎØì4<§©Ï¢=Mó†!zÏFŸUÉhiû±W¿Ã¤éxÖ–”Ù…S(@_ùÁ0_û¹h}üùv$½Ù„Þ4¯ †¬G¥§ÿ¾óßW'a=@Ç|ôÓþ +û«NG®=MGV$3„ ·1``ðý”~Ù—¼1†ã¨É ñØ·AIj=J­Ò*ÀVÎoÉo–¤ó…DYü1tãÞ8Íѽºu«_¯\—¹U™mÀH@Ôÿù°0Ýç`w›ÍÌú§o“Ú˜-!h¦CañÈkÌ +þ*m8Z•U°Å€¬Z¦<§“’zŸJÆD2»Qô6|úÞˆêËÓéOÍ ¿Õ»ÃÒã-ÈSÁÕè1Q ªdàÒÔÚgTˤ)*x“ù~$±ðãßÐ=MýŸ‰Î¥Ù‚úƒ…‹]²ÖÄ ?lêJ3Î`ÚDe Êʈã:kïZ +ö=@NŽ=J{€@à#ôÑ1¹”Ò¶ØÂ¤åÑNÄæU ÐÀ„öëÕÓ’ÚW²1¸” Ÿ8Ü ÑB;öýÈ}áO_ú·Bך¶]õydäÄ}¢˜4R𚨕ú 툕÷~ߎèÌJÕb·Ë§çUÏù•Û‡dìo¥j3Ãf +­ ßð\ôà¯|Ðì¢n*NÃÎo…gÐà‚‚J¯/vÈE=MüªaQ¸¦yReæã1´`™±šè¼`㋺§Ri‘eàùݳ‡ôN~^9=@[i=@Ä1åá› ó­i á£!ÙÉ(S¦ ¹ùõaùé?¨›ñ ÅF +Zä~a5Þ#eHÿ-=}-ïáS¬5vÆ~ÀÿÆ‘Ai 2°«;!ú©kO˜….º+P ÿ>@Ðj.ÜJþÈý‚ßOƒÃ¶õ[*ÄÊ¢oý„A5Àâ¦Ð¨,ßÿ *T1À­qï+ÁÕá  6èàEªR¯¤±lß +V4K:9ôç¨3Öˆ‘_(½K ­­UÝAP\‚kXð?£NU¢øÃ•õŸÓÉXû1^êIêú‘¹ƒþÀû”VÀoz`<Š<Œ§S‰T¿¿Òü5¥²ô­]ö¸ ·ÀWšóm|Òàƒƒk=}.%!_ÈÄõácÕܯôGF×Ð) +*‚wWÅVD S‹[[†#ò Em΂ýŲ—‚<—5´q88N¥­{®üã\”Qj'Ïl14Á=J7ÂG=Mß•[ÒÕÒ€ÐÕÈw_ËHXöã1ÓÏÀ\U6Ž”^S©rXµ‰Üp®lQïGëF=@§Å !^òç ·ß¦Ó—Ž +«f4¬{'wªç7c•aHIîØoAÐð¶¤æÁÞùÒ$¦GazþéÝ` #=@cb€"ŸqÏ(¹èè=@XØ=@µÖ„2‰5ŸŽ-9?iÑ”˜ghÉ3–¿gQ‚Á˜lНó±—ý=Mø`þrZr÷„OnºRü`9[CÔ +bpJÂÓÑL_žzïÖ¡Í?£oÒX“XKæÁ+;­»ƒóŸäÈÒä§õK!TC0”ÐefÝü)*wèÄ÷ZèÊmš¢Ä¡E8‘Ýd¯ÊêIÜk¶˜°àçü$µÒžÄõ©èk](K…vß`ìv怩ˆÉyÅë0ÄŽçÙ +VÉ›ëØHÝhaÉþ(ÇñóW£ˆã}qÿ’=@ åÝ+±š•$xÁÄä(aÕ)*•WnöEŠE²—½öÆTðàñEr>Þg`¤€Ö”äq!ÈåKǪ=}œó=J¦ÓñëÖÜç—mÖLÕÞ×à ­Þ¸g¨$œíègU…+f +e”Ú>GÎìg” 5{¢?`²¸A¶ý+×ÞõÐáÑ{â‹ãÂtÓ`Î…ÚÀžòâ3Æ:“þÌù@^´%ÂFÄÆ®Äü×øÙÎÞWWî@õ/Qá÷C‰1f_ä‹!¨Ëà×Ñž+Û1´µ=M=}!ˆóÄ/úÖF@N:M=}&Õ"Ùþ +] XÉ(ǹ™>žà=MI·£ùlÑBMüÈûÌWî$–ÞšJ´3Gü>kË‚#N²ï7çNE.GÒpºâÍ]įòùþ”Ë ª§Rð˜ÌrI]pÞû¿ÓèAMÃpíI…Ó*½^rF©þd'à—c=JÞ»Èý¨¹ä“ýž +¥­!Áy²(ÜŒ¶ÔÚ¡ä{ê ,Ê$Š9VjïLLú:¯;vÍ=}ƒœ‘PTç?Ž”3“M>=MVØþû¦:”t·Zv«Ä€û×Lÿ‡@î-;÷;ca=@_ÔÊ«…µfÜéÒ$³O–ÔÝ™’’=},ä"¢!ë÷òðààõS=@ +kSùàiÇ¡y ë™Àpúßwìes²&Lßñ@£w•xWo¬àÂhV*1,h„y;È ÝÑäívÐ=Jº]KÒ~Ì Ç KŒêëM g'–’%M„♚/3,1é Ñ/±w_õÖzÕ,jhè­’îù/²/²£| +n2MG¬ù©Ö–©ð¸BÉ'Ø‘ÛXŒé+"ϨiáiV i¦~#éIÉÀ™›Þ/õ’¶~bN.F»!ú9ÊzJçÛÙ8Ï©²=JªRYÔEˆJ‘|í ]i]|Ô`Ö†uoÙè š#Š÷{CÑýµ¡ƒ© m²™^s#Ï5‘ˆž +߇l-à++Í Ç[þ¢€ƒE“rÞ Ä5r² à΄NÃ'mE§'9±7eŽÖÄ¢%uýdm+•1Ok­U )*Bc‘À¿å+—Úÿÿ¹ÑXqWí1hÑŸx¶•¶iÖ˜ð¥û‡Ë`?Œ3óN=MÍå‘Í…•² +E¨*\Rðçq€ÔÎ@Šêv ¸ìÑfÌÚÅœ„×Ìù4ìÀf¦&HƒñCL³Ç}‚ýz=@+c´¸LØáˆÃÏ}Òþ™ÿdÅ·^ØD€fÉì‡RûXÅyœìTà„–IŽ`q7x\–(×Õ„¿du¡õ/Þé–©:- +´Ùv'Ü$¸Ï=Jâýâr…*ôn=Jɤ_ä׺ôˆ˜ Áœ¥ ×PDoôúD¡hŒD8[ê?|M“n¯7æ`QĤ<ÎáÐ}:â0ErÑiÿ_åk½L\ä§WE×§k™x.ÜMÉ‚b?œ“¾çÿgErÀT¶ŒUfÕ£^ýLª1¤½‚SÞ—IŸ+39êvR²°€Êx5x”½~˜ÖòÄ΂ Èú%n½Fz½ +6WP=Jpq n?­þŸ+;ö¡×N¿ý¬$½ÔWãEªÆRÈwžäþš$Á埵me6Ú.¼ÑùäçF[¼f’ž—M†NÚHÏãñß•[¿ŸÄEŒ=@ÿâΆ–7ñ¹_ÖÄ”©>?‡c…±òv)*ǃ¤ikŸÀÔ„eJ +Õ,b)*¿r̘]Z@Y˜Frù$²Óû=@ („µÁ\j£=}T´×Já™ðnÛ*ïïªÍÃ1Ê?µ °64?z®°1þ(ž–h¦'Ž?½§4; ¤Ú[0f…æ=Ji>è™ñ Å ´Éb=M%÷ÁXg÷¯˜™4ìq +BÉøèª§/<„~â˜\†4xö«}d¶«ÝìX—ÂÝCÔN åW÷ì ª*JÂCÊM…€W—á˜ðð‚ri'íÐ.à^àæöðu^T2L“ú¸'à‡R~UIV¨LÄ{µ—7N…îÇãiÈR4„ܶ«? ¸©¿:eºa½ú +}hâÙ‰­þ£æ ýâ,Ò6Ûh¿ÿFÞ%…wÚ‘¦ ×gD=@Ç«N—¹p=J¡^å `³Y¿œ™…4.?«!©Çväèy…U~„ÜC¹”üux¥Ò×!*TpNï‹ÉÀ"¢uüÞu“md7îÝÂòå}•’L8nÉyŽhÐÿ +ÝÑ‘0.£Ý‚œ€"Œäwµ¤¥=}é“—ê=}M?Bo‘…˜ED©9¤ÅrJ:i]\T'Íý`÷;ÃŰBV£gs&LÊÚ@¡hˆpkÔè3˜)*B².RÔ5d¥“—¼ ± ‡ÉT«½tKs’•$Wå®þ/‘P©‘Ü# +‰½{_yúž@– Ã@0›#½Çî¡„åÎã©oÓAžª™C#Öc"QPdظ8¥ñÀ=MühÂ$È=@×z@›£|›_&ñûˆe 'qq=@vÁ©û 5OÊ­"Ûÿ¤Çûã£W7Sæ‚fÿ†ÂÇý÷¨ÛÈ/šÖ6pT +šíääX§Û'©w˜Ì–ãÛ©²­÷ž=MíFÃ8aÖŸÿõ˜=Jâê†ò‡bš…óÁh]‰þŸuÄÕ4ä§gýå­á?ØgX€Ûç€\¥‘÷a‡—$ßçv1+‰xÊÇ=J¤˱kæ¦â'mƒ¢¤0Å¥7ÍÒû”- +5Ü‘Øf)*yõ˜iþÛÁ5çmÙŸ[¤¥`:ìÖŠ3ç8½Îæ¡õödùýü“¿VÚ‘95àkÙ…CÒåÕ3—ÃÿmŠ ×R&GØ`%]'7xÒÏðEª¿:M=@¿bÖs€4ú3N4´âü†‡yvýÍ×ír)*Ý +ï8z¹ˆ=MÖÕsGüÀX—eNÈ"_Ð?CmÞ ôâm=}P‘¶+„Qˆz0äVƒà0=@â¡`g’@Pü¹AÒÞ¿êa:RUC£YµÔ4«?;¤þˆÄåD˜ã×u°‹ª‹¿èxwä)*͘‚ç ‡D½¥|5Q*B.( +?÷ÿí…ž!ŒÇJ4Ôͯ;‰íœ‡(=M°•BçêEy[´óÖy“®+{ÍßLÛ:LQÖ‰N…<6zNp¨ûN9|’X:šŠ48‡oÿ-–½r€Ÿ%Êó½Fnœ]_aê|xkƒdå 8pxkB‡q‚?2f}û„ ¨Ð +Ñàîá²,Þñ@ƒá•$Tá^$.ÿ<™”y´‘º2:S‘žèfˆÑÏÛ²=}ù?·–ç“n*1,ÎOàÊ#àÉtÒ´µz*{ᬓtòÿB´¤wyÑ^ý”5t„‚¸Sìt«c² ²Ãþ:ænrÄün‰8YÙO…xƒÊ¤÷ž‹ +¸æÃç‘€ŸáµÀ3cºiס›óH¡X¥]Ѯ㖘:jî&(_èÆøÅÊ‹¡‹mC.Œßð“Èx®Ålû4=J\«é¤ä¼Þpõ¹\B¸î¸7/ÎÝš‡6=}›M£Z¨yç3`¸ºÍ´˜oògòi=@·H + LïmKn3˜q©>’W]µÍ“\~¼3‹âa“>’¢5=@¿×’4‰.9xiDNúȉg(ÛŠÙDoP Fù'Ïô&1 Á÷"(&ݦ'F©˜¨ƒçèò<˜GT*´s‡â‹Ä'%™ÊwÅΪ{/àEêð¨i¿+fìÏê‚¿C +U»GԽߩW¼« ÀùÂúž Óqâ=@íBnmS1»´6â>uk}šUö%´º¼÷åÁ¾‚TåyÂ’¹›~ÄÙš—m%Ê2œ+ ©”^Bdž_ß0feWµ‚½'’±MûhÅäYž×WþŠm…{Mç¤ç_£æ%ž\3¼Lg +Øc–oÑ:’ÃBÕÈ=}|OÔûëTÛò¸‡Á»ÀBV¤¢Ó媞@21©:§ÐS¹WU†ûÊzs¼+iÇ‘š×P›CàÔjÂù÷‘›üÐ…Ç•†W_Çúš¨e€g`ñA§þ_ÖÅ”D8rHß°ƒ—®»=@§[ +ÐÿäuÁž­ðßÑ/ch®¥ª“¡“aGä´ìüÆR­hèßè]íÅY”=@ñ³¥“§Tóe„áœ{á×| “éš”/·\±þ+[¹Æ~Þã¸äá)*С֥‹¶&êIú_õŸà[½ÿ%çvlE„îeÙ7 +¹zÔgUvaÞ‘Ñ€nýÔGÅ‘ö§§ÕÑx§ÌæXh 3`q6T”ÛÑ•yÔüa@‡áKbÆQa@c÷y9`‚‡ñmÏ$üµ’3›+GÝ1é? žA¨Iú¨Ë_O•†'L•X“¦>uÁŽ©4ÃØƒú‘¦“ýÁ‡ñfï'kþ$É€j| +ýö³Éôåb©wóó÷$¾BGUÊèÄû‡xÔ Ï³NÁb=}ˆ¸G>ȧƒ¤‡wDOìàž °c3ä›=JñA`†#aÃn[hó×\\õU|]UÞÊ%±L×R˜ŒÚàÜš1×W·—-ellYÄ“ûXÏcâ²>-.Ù^ +%µlÒµœõ¬yH’´×²ÜäÊu¹[Pœ/gúÔÃvºÍ“”Ä6Ÿ~Ÿ¹^60ÐÔVeÓ¥ˆ 5/D¾S½H˜~ù=Mƒ€»”¨°ÍzáX3ÀWäy:¥ýìÀrÙ†~ú×Úëoü>;?×Öøàw'ŒJVïJ˜ÆŒÆ>—‡ã™ Çk8r +7NX[«t"YÔ¹súaµîÔ±/³.§bØÿعýÉÒ”Põåƒ^Õ %Ž!ÈìããW»éHljýï$'Rž·  Åá4Ö¤3!´×'ÔÎæÛ$wvØxé¸ (õ¹üÿµÐkº¨$÷Ùßõ¡ms>Ü0J˜÷ sÒ=Mù +uá˜ë’K[ë ÔPƒÊÚÀàÀœ:9`¡9„ð ßmˆ|àd‡*KÌJÇwsч@÷Ì‚$ ©ø²`D«›ÃŒæ‹=}M­v· ˆÇ@‚nR=Mf=M#{Þý=M‡ã£uÁzv2CŠÐ`ÿ@¼KGrZ3.k°N»­b(ûc +‡Ôp=@¬59–ú8d…%—I?‚·jZM«’0EôuQ­›˜kܨ( >0˜ÐvöÅÂaºmIÀôcøÞŸ=@¯¾wÑå¨L³fe û˜­˜ëª—[‚툱s½­ÓÈ ~쮌\LçB Þ=@â?ì«G·„ ¤™RB +b­>Ïx¯s8:kB=}f´ü‰KT2´Ó+蛄Ìí¯‚U\å±Þûh¿°Ç˜„šôèB‰‰mƒ®Û¢ÑMQnâ™5àŽÕ3J9Q?¿ñóUJ']Ñ‚b6c«N~x`á½q•YatoÜNjË%¹í¶"ðfÈÑ•¸V=J +?=J=@Â$‘ÁÞÀËõïƒQµá*üº_³&M=@”\ômÂàäAyß‹¥]àƒ=MN$¦€¡ùß—ÅÈÐ §ü¤¤oŽC.¯ñi\w‹¿=@wÚ)*?èßý_ÁŸhÏÏçëÜ«UChÿÿF'……–…ð²ëî&ÿ!“ +<–—ØÕ|l“–ìÛ%TNÄùXsg=@Â㑟ý%ýû×őؖäèSž‹üG™uþE‘ú„N§î2ئäiûdHnÀ¤\Oó è‘E×J²"N€¡6M‰"©O Æ·i¾Rèq Rª'êÛÓ)*³Ši ãýžÅO +,r™ß`úZ& Æ'y,)*°‘6¨³Ž2ß  6­=JÖ)*b^yþšArµ}û{êiäŸ(O㎰I;LßÉÒ‹ƒúœyÌÐÍÊá±çxÄÂHGì±€×ÚõíXÁ½IÍE…ýEyš\þV£‰îllÉ©tœ=M§['ågÜŸÄW +®—1z¦ö°©Þsó+E,fÑ#} YªNSG¹>–Þ< n3¸jëÑ\WB™®à.£Â£«>4øöu ÂBg²?T|wm`YM—•–Bf;ÑOq…œÕ亖"èG A5©3ƒ=M=JaÔ\„d§UÞ¾N#• +Ï3û™\âÎìSJñ¨þ•ìWiêç‘ÏíQ¾ë•·«G}õqË•^–ºänœéø*H }ñüœ ™läE õ—r'Ñ  N›F4øRCâ_¤î=@évu™›é¦­öýC÷›†ÿ$¦)*î¸vLþFÞö»‰ñœ‡ +æ¨À;ªLn É”ø^…ßšÒ0P“'uy:œsN!ÍtÈ7Aª À°ÿŸdÏ-1=}»^­]{Õ*î üÒ ÷þ•AN½¸(ÞsÜUƒÙz6Hÿ>ÂdÎ,¼…?}>†Æá‚2ÅààŒØwÜõaÉŸÖ$ÕÈ/мðcØÈhiו©l +évÈÅú×äééþ»Ÿö2:UÅÒÑ‘0dÅ¥8¼ðþ‚,q[†Åž—Ë“l=J¸Œ®„ÜÅŠ2ï~²Ð†ÈŒo]¶s³»G Àø€xÏÑbÐÅ¿°A'w/(ÿ_Ἷ6” —œÇˆ;B«ïˆb#À¨H™…TwÕ–w.9” íŸ +œãQ7šSä#–#Š˶þ£#äÇëo{–0+6o|„'T÷ ›F¯O¹N8‚¬àÉí7½0k_ÍTÞÀ&Lµ’2MFH&ú`½sŸ†Í… {»6 h»~~Æ((ˆY°‹‚1bÊt¸Åð%‡u­”CìÍ=J +ή¬6Ò=JÝ2+: ±ʹÚ~kj=J@ÌP8ɤÊÈ÷áHQö5p =}}ܹÉi‚í)*ೋªxÄ´-( ¨-u&©˜¨ƒè©"Õ¸iáiVÒ¥ÈE_ÑãžÕš+Hñç¨&$.iS%á\r<ïóM=J›j—h +Ægã•–Øæ°íB&Ô´ý»@=M”‚k¾î?%[䆭—D8ìñ#ÂÎ7!ý¬$¬ï²JÛ}LqŠc?kÉ©z=JÅ×é(SCÊ]ßAµæ—25rOš3%R:²¬ðí•O³XMÈ[t0Ùú ”:â\aºe‘âØÈÈ)*ÉĘ +eE×õ‹³_=J³_JR5ø vï—M^`ÉŸÛ-ög”˜1T~åEÊsij ÈàÛá†J36•™–tj‡ +xg%¿Oá á*nÀ‰ÃòÏ-UÒÕOîE8~qáבƈe zØHûJÛö=@C·Ð©õ½$ð=J÷Ýâø+ +´õU¦fã'HÙëÞÒí•Ù¾ÓBÑ·VÌÅ—Óž2¦Ts²!"Ì|`žGfe+\8] ¹×‘éTßžWXÉ çÕŠäšN¯CPÀ¨¦lȵҧMýdÁ‡é_6W}‘x׺·0B¹½ƒøiÔÑ`æ]ž`_1q‘q ã’—\N¡Ñ +óþ‹ïfÿ‰7§AoÞ¸á_Y H p7¢çq©vˆùy$†=@r…ŒüXþˆ?š/££¦Ã%¤âž¦¢'2ÓÔÿ;^’ +ß°húÑÌôþ´Æá”<ß½ÖQ“°=}„“aP8åÓ½c;Me½Â†ðÿ™MUźkš7_éHHƒ†¸'GžíhØýT„Ý gÊ;…©h9µ%ÕIÐÞU•vË€>n¥»Çþð”d×_×ÔNHLݯ”ìK:9 +?œ£pWï+J¤~u€÷¼šT•w\Ÿ˜†C‚=}?[_Å¢ØvÉyèÒ$åP6¤sÑLWŠŸˆËÚZÈÿØbȃf¨ß ƒWè‚Í=@äâÚ›œbuï„«œ¾à¨Äbý÷ùgúã•î*ºCt¬ƒ›-&~“¡s”# +Tz"=@º¦ûKqü)*”Õ–öjº&4ýBôá—Å Lµ—Þ³.œy ÔqÛq`oßsŠýÛ¸Jozûüј;9e­Æ¦¹”>Ú¹–„@ØRTö` ­Юo›|ÊU°’}eãMÞ¥DºŸç0ÇìËåÂZÖ£fòhÞ;€æ +ÇÖBGô§$ý{ðýÃy;Î-ªiô¬²øZ71“¯m;ysudÀ-˜!ΜÖ׊9]l¶ä‘Þ$üŸà§%1OB²6Ð2ظh¦Ú=JícÔ¤«XJÜ=@e¡îU¦$=}ë Ù™Ðe&±þ +9[ðUÞN¥w ­6FõKÙy6!`˜\T‡‡ÀíƒeúVÚ_ÐûŠS ððŠjæ¦pïß./>rð +hë:o•Ù6!ä¸=M¯yܧT”õÿPj0½ƒ \˜MHçÒ»_ÉÔæ:=}*§&ý»@ãÑ×wÎ-»³×PRàq7I…RãªiH•Í6XæÆ¼f{Òd'm‰èϪZÜú:øUû =Mþ£ÆÃ!Mä€壻³÷”óTRR=@ +„ó4ÃOãý^á:T"¥¾m2bQ$r´dÚøa,>‹Ñ.òÕ½r×:¸€ã“8¡9Z÷„y•iåz ¶ùÊ)*d~Ë¢n„N¢=M]fvŽ|ƒ  äÁWP6<±àŽ%{<Àð UžæPŽ«³gÒW/ù1}˜™Ü  +êF¥%ÿ7•òÉ/rÚ>å°f½”žšÿq{OùKáBN$zIi(ÚAW0ÿT9vàŠ)*˜=Ji>è™ñ Å ´Éb=M%÷8 ™“Àõ¼{khÐyáÙÊIjo§ ú…ß ‹à.œ”~ŸåµTÕ–LÕuT,u;·ÑûEÔ +$ªï`ݼZŠ‘³^RìØ=@*š´tÉê6ÿ-_¸;*€'!HO¾‚î‡|ðs4LÏ„ˆýňHúÎ,›P[~Ä»ꪜÂev­^S»¡tÀ™5!XGòfÜú3!ÑQºx½Ôã¡u’ˆ4‚ʈÙ7䣦ÝÏ—k6rB_ +ÿfcáW—|‘™"Õ–\ÀKá úuj­„™’è<_æ°«=}7}‹þek–:/v¨øVw²Ã˜h1?Ðhz7—4²©\#²TèÏ~äмõj\M™.ëÖ#Z“°¤›§ƒYêÕ‡Þns•µc› ‹v¸ÁÐûˆµ¶÷% +ÜXMS*;1Äõ¥“Á¤—ÌÖàþ«H%j(ß`#€æd/{Œüº\kçs 9Q#¦ÿséRáw72‘z++ЬçñÏ›Ÿ†=Mĸ(µÎæã¡‰w‡göŒU#˜xuÇ©}ííZĵÀŠGz=@ƒuÀô6Ûº§Uv\ÛÀ¢öçã¨ÑÏá›øÉ®Ža"F$;ª§•¤ÙÏ¢§‰s‘Â=J伆ú‰x=J +"rÙ‰Fàiô/þåŽF¼*LßpÄ^õŒìØä¢ª£zF¼¥ÄÅyI4Étˆ(Ú ƒ˜É|7‘¦_ =@/çÏÜ!>«—\0L§ÕˆBñ¿0È#ÝÍ¥îÜø0J€!ýCÃË}š±º¡¼tmÞäÃQzÄ›-ªLÐ#<`ž@Øáo¥R +râ öì=J4TÍÌ$}ëÛÑýÒR$«ÒwöЋ‘Ùi3èdXãMýWܺsNqç©GÉá ‚~aÙ7ÝJ$ïný–÷xÔ\x]Äœ5‚ç )*«Õ»eñÿ#ò´ã´Xv§ˆÞºn ƶv‡Ú1?„ýe½1…ÖºÔÞµ‚÷ +œJVöU†¢wØÑ§$e§‡§_gsY“d…7òõ±åñHcð¹´'Yõ³Í`žeaþÖ] ‡›•ÁXÑU¦eZÛ9ûµ’ Øû’5d§_ À*B54í½UÁÁy(¤Ø·`ÎöoŒ¶Ä@üŒo“¶È»²5+ +çÔ×nÈ~_8jc"Ö™gR•FN¨H¾ —±Óân½²˜¥ÔsŒÅå_ÐVÜØaØI8£ª×ñ˜˜vH‘=@d³D³Lü3%ƒÙmµµˆˆ‘YPª•¨j¡=}‚:e)*Ù„p3^Ýâ«éŠF¿%Qú¥ÏËüÞølŪ +:©œ¥D›`äxÉ’Õ]ðý¯]0Þ²ßߣ<ìžy„[=@1FÄú~–í¬ +/3û¶' Ñ5¤p6³"^¾´=J.k ËT!BÆIäªÙ›Ðr}´×Î/ ·!ú…üåÔëv&´Å?ݘ¶Â>!ÍwdˆÚ=@‚m3×ÚôðC=M\Ȇy|ýƒçÑãýß`ë=@®çi—‘Q)*:biŸ¥çY{_ˆ9ë¦c§ +[DPßtCë'a-fÉ„e ¢¹Ò•Y”Œ%c Jv ´¥WGÿûÔů@À²făH™Ÿ‰kµ¯³cQè£×â¦Z9é ¥€­á*¥=@àË_ªW’-™-*¦}<Ù••ˆ•ØÑ¡JB½{>Þ ^S˜/àôG³³b +ñØ7xˆø`(½•3Ëþ7Yu´›®ß@ŠÉVñ¤âÇ]ÙÀáºîÿÑôÃþºr[´€D‰:d·Ð¼zNÃ0¨R«ƒÆðq>nì=J=J«p¸ß¡‹³Ê Šôv|ûÔ +Á¹ÄÓ}·$ó_@^ G,Í”j‹K"º%;‡Çh¡FƇy>ù@1ÿ`Ö•( +ÅÛÿÞ=@ gÕr!ûNÔ[-"B`\Çã“õþ@üªr=J€å@£wüBØÜïòÞZ,gÓ_äõáBM‡á›ó<@J2×¢ÕɼXäY”Ø2‡ËŒäBý ×å¶Ïa[ªEP¿ÌlüÌã…`¼jNœ“s=Jä§îèõ +¶iå]ÂB?Ç~“§[×— Í}êž=@—E¶Ê3 Hß¹{eâˆUÖ=MýdÖ‰`˜@/´3&U"(–Ÿ½%H5挸ßî=}T‘Üý§Ûߘ〼LÛ_á¬Óò´×]ôãÍ×nËïg]éýgI‰‰‚xÉÌàëP˜‡¶RÏ +ñŸ1û ÌÉѤˆÇH(¯_¤Ï³åž˜]¸T¡™ÐáI˜=@ sÝÑ<†R-´ø=JýHsÙ7g_®àNÞo†Äœ„±Ò•<ïçê¶9„õVÞèVaîéÒ<=MgÜ *_ÉáˆbóAúÄ@wKæô©©ŸØ³G¹>“Ïä¸ ô—êx +qP£–¿ëÍúÈŸN^¸7o×Úõþcˆ‚Fü‡¶XÕÓ5âȧÔßÞâèçþtÍ3´3áhƒ“ÉŸÀX¥Q¿ùÚ(ïñáÉùò¬Õkè~ºŒB(çUäsM¬ÆV5Ôß½hjb?n½r®I7Â:J²0¡¤ýWßd—ÌOùº +¥ "ÑgÝóû’!Dë*²U䥛#€»Ç““»ê~š€f2½ÃNàÔÕ’c®’ ­NÿA»À3Ò…x9šø*e©|—õ+ß´ÛêZMew|½NÓ¾›ššp8r÷3nBÀS›„Ö¿¶°0gç”xm™_Ü/ÜM=}­pïtz +¢’„À0s‘J­~|¶çõvø‚áä§ÔpýZ• õ—´*€4ay×z¦!$ñq(Ä8Œ¤‡Üïvïå#ù)*>è™ñ Å´Éa=M%÷šfUªÛ ¦p4r•!誺ÉäÉS*Mn?“—ÙŸ‚ +òëò{fïdjàòOp=Jšj1M>ÞχöS+êZ"ÊÌNÛ—!Z3ÂÇÎ-*q>}wÐÚ×£p%¯Pf-G·+ŒøÇƒ[ÔJ°°WP¥Ž$}«G`V†ƒåç2óBù×Z×ÔÛ˜Пâtø,²;ly$›°Å€=@ÈA*Ê)*ɤ +=JäÖãÐ=MÌãÒáE˜7ÜUýÃb¥—uÎ=@Å.¬¦o \ŒÔ‘=}š•ŸÀ_*"[[»voìî E”j<ÛXæÝÜØ‹¤Oåšœ§UÑ6áB^T1± ¬r; èSÐnA,d™{=}1H°µ`ãׯÞj:vë;u„Aó¾ +‡Þ=@ÿ°5’úÈ?)*qÄHƨÔA$×åžÕ“Éíâ¨G± ˆ‰}¸{ž#¢‚$ÁÕéþé|aº…ú’‹–‚{4ѽþ¨d¤Iy À¯êE‰÷ÁŸ©y°]CÒⲩµö•EL‡ª«´|’à`ú¤…’ñÞ&úV„á +–¶+ĺÇW9Ï1aoÖsʺÞÊj07gµ>كû„v»=}‡’«/$îìÿXñh¤‘z…þë^ØM“âÃ÷sÊ¡.r=}jZ†1öeŒÒÞ6"nN Ùr¶ûÍ¿M;Ft4òRfêªmVC×äåÈe›ñ€áä åÎAW +œð`Ñ"LmqÙ¥Ïï&!{ñŰÞDT*ÂL¢Ø=@s4”~½¶ñà7U¼žçlP×&Qek¸c Þ ÒñíÊ¿:]:3ɽU§ã^€þâ4Õ«½p gP㛃ä*œ`JcóѧH[™Ë†`ÖgÜÊÝÊÈP”YÏy—Xµ +Ó•‡o—ˆÛÎh|V;X§óÖÿðï#ÀúßëWˆýó4¶t© ÙäÈg(ÕÎ3„ª|ЦVñx÷Ú$σ°ïc;¿GÒÔË÷…eƒ‡EÏŸYÔäçç1và‡ÇË ÜYœ§ÒBñÿIÍÙÌ)*wžµdeKˆz˜¶Ýj& +Õg¡€ýS®¡„‡UVGÊHßñ1QQVqþwË–Š˜Y™}ƒ¢1Ÿè§Z_‡‚ƒ}æ«¶´ì‡ áQÁAYþÀ—“‡ÇË1œ›ƒ—Žœiy×Ô¤ªå—‡d§àe2g±ßg’!åÑÚÇdƒýÌÒ*R*9toó¨·>Qý_{ù‹Á‰E +xLÌÕF]•0ö¡ÒسµÙþ…JñxocXã×àÔk˜ÿØb¸£IÊÔó–<r,åb¢ £ãž õã‘0Ãμ]!©Ç¤B=MÓ ¿ß-/Ž~@óš¦ýÔÓ÷¼u2MŒó%Q}º$—½—Âݼ ª¹}C +à–,mÙþ&iQ¾ûÕ…ýV†RI0øIŸ“Ð~ˆóAWÒæÖøNÓ)*ˆþÞš'R•¶mZ2\¶ñ ~ÎÖªÒ 2n+®ó0®¿ÁHu@‹el#~©©ô¯N*Á•å­…¥¥+fÈ)*¿+_×W=@‡à¬†ƒO„h¨”|˜ðIç +RÕ–IV;É©ƒÏ2 ÞüÓY—yÂÜó#Õ@NŽOï9œúå<,Âhûª Æ>þ䛚ê«â©”ÂÁ«¨ÜKq„jÕ-'Å™'ö=Ji>è™ñ Å9´Éa=M%÷óŠká’‘.qHñÃÙ Éj–RøfŠ®6Æ« +kÏqã™V^ÇÚM çE1Ú·[…Ï—ã+æÕýÈT¬Çïàí"€ #³B%·sm:]Ë‹–qEk=M­'ï{Ë{òZ4Âñï|~¿ôVØCulÎð¨R|mӌꅅ4j4¡Il{‡¥Ã€@›WBfú>ä¸Óú+™“•‰‹¾j  +Ì…/Ř… $¸¬DÿìKÌçˆ6Ð}õ±¼†§Oéûë씘siìŒo™%–‘L¼€Å{=M„„µ™™b˜§ÔYHÔ%àûŸÇwºA–ˆà1ÃúG ¯†¶ð€°½Ô“ÙI 0¢.ë&U†ýeðý8¶†Ù_ècôíVVUÎ +TÅËñiŠÙ’™dU†(Y ´gÒí›?&ÐkJ˜Íú‘l7ÕÀþ°u±MÞY}QØÈÉ¡WXw_õ„Š˜ºÆF½‰îŸ¦åõy¤HX˜ƒ0*?ˆ¾Ä†ß–Èn~Ys=@1Ï> nޣɴ7L„Q[Ù¶IU`hàJ¬NH”åwœ'KÂ3%sƒëéšÖq]xþNݦ¿%†þ 5gØ1Q_]òa©ËÕ.Bɹ¤…TŸá¸y=J”®ƒ…ÎÒ1>¯=@*œ§Tûa…Úž}{Öý +¯uáG©2c%=JÕû£g iCÕŠáµ'Ù:,h$ Mõß›úÀ[ùGÔ\è?L8ÅÕ=@Œ¡£%›y±YQÈhGA´ùß«“²*†Øe^üÛžWænÉðÔ]ÚßaÄîjrmN$ÉtÔnžÒáVfe£Óöo¯ÜÀ5¤ + Ï@ Á£0Ž$+ƒpßþß´ÄŤ¿|V‡Ez»­:[ˆY‰ñ  iyŒázÏOBq÷£¹‰˜•Ô¯ã-L®†Ãéw§gÿhÚËú©.Ɉ]ß1÷Aê¼èÇ'G§9ü(¿µÐûÅÖi§£èýÉ{œy<¢¤0´÷߆Œ/“® +›œ‘yþˆ~|AÄ]õs=Mì†Áƒ"¥à†E«Øf¥f†¤¸MÓEÁ˜c.=}î~aý¶`)*{çÑü¼ý¨=J|+êˆÒô˜çYx½Ð%¤¥T?}?c|“ü‚u’÷“‚nÿtðÕ œ]½?`ßì[äÀÌN-.wvè +„ãh××@ú¼#!ÕÂÈ£”f=Mäà­@â*=J‘ç ››í÷óÒu!™”Y§É¼ií'Õû=Mñ{œ‘Õ¤ÛÛ=@tágòÉ™t–ï€=J‹—….kšJÚ¸bËUdwe‡ãäýko.‚,gÄËà°øõô÷8GnÂN- +;‡9yÜLX>æDŒëI=@Þ»ÇÕ¨K2²Õ3«ïEU<Ť¡€ŽmK.a7È)*gÔµýßÛ ??êÀÀqihÿh°÷Þ7=@á‘ån,e:ÎØ÷ô=MôW½(çR2 ŽX=@ê`­¬E<6ú6u³”ø¬r%Mc%å©”jíÓ¥n5ŽjNdzPgv|Èþ´'§´ÓšªjyN)*T¥x½²ýSâDÀZfÚ=@Èì@æs¡Aa,\Ú]hþ–’¡ +ý•Ë—×ø;; Íåoס{Ï2¹RV+1·ÈÅIo” ý^m|×Q1–šUáÏùx˜ÍEÑvK€;K·¤õ­ŠäE²|ÊI½&Ñæ©œîM:9P“ k£TçÀïþÔÍ?f›‰âsÒ=@’‚U]kð +ò&”ŸŒæ€ÈÁ‰“m£B3ñ”Û‘ÀIìgàà°Ž*jHÿÞÜÜÝtùHB‚ŒB¯Õm—(".` iâÙa8˜øT)*x 'ørÿüÓU"x–åÜ%ÈV¥Ä A­&ÕÈáµ |“—urÆ*/xô¢f0B´>¤S† +D5sûj:qHÞHæF>’ê¾Ç“\ª;&Ó§Úâ±»ëÔ|À×fÐ9ïirÛ³Õ{ÚóÕ¶œ– -×[命½þ^H¢×™Ð’|$Ù¢ÖÙ¿n "T*^ÊIC£G¬AÍ´+=@¡Ã_…xÁ;9´|Ó@Ëö=}à”Þ(Ìzž +ÂÖ¹3«-ÆÏû%£Ç™ÑÅhTN23´ ¾¤¯ ˜ýÛ*¿FDùfæ^ð\d‡Á3ñâÓ=MõؘùÏ“Ÿ'à X L`"”y™”=M¹äñ \õ)*u§ròsĹ¼Û¹}'=}ÙÝèžÀýçx¯ ÐBn +[HÐÀgAµû&\™¢³Ÿ¼ ªpnk"…ø–\$ÛæC…è³Óû“Dª„ZëxŽ8§±I¯ASf³f”ßdã_'gòá:“úÜC»âšh$šÆÂáæ£ï…‡|(Ï)*Žá— z8ª<ý‰øe˜Éú ÁžÝ$y +ÿ¤çïþÀd‡^òÞh9©tµÀÄ=M°ùkûž—7ç`±u˜ïßFJ³ñ©„øàá‚äg_à›;*{fã#\½ô²WÊj¨$ýåxˆÁÄîDÿà6Æï‘›bHß×7›²™æ€h”Z؈vãb,¯X§]̧ˆÒØNL¬À +Μg’½“¾…á{“ Uä‘»E¥!ԶݵXn-€ôyV'Ÿ²v=J=@€à;ôŸÇ„ÒQŸ€]‘¿»)*~Ï¢´=Mí˜x˜sMõ¤á{—ˆÖgúBNT­ˆÉ@GèˆiaOóÄ÷“à…àÎZ}+g%§ÿåÉj!—ªöáE¯ +N6ùËÊ=@—- ‚e1{*¦¹y‰¤Î=@Ñw~/{ðñ*Z(éÏ~³××8¿Vqmâ»C%iŸ†²ß¦ô…8WCÉÞi® ñÑç„`©Ÿ©Cmc4=J¶¥ÉÓ|ïý þÀ*¯ŠÍôg¹{~Éß=@çßi ´xkø§]Î,wÝK # +O³Z‚©Øþ@ ndµ¤¥”qº=}5\c¹y”1ä ¹šÅ¹¡›¯5SöÒ“y”—Õ–âÎìcKs ^Ìè|VØV‰à=@¤ +=}‹q¨¹ =Mmy6ëð3]_&'p)*àiÏ'IÑþ”nV(&ð'VýýY-#€ŸÎ“‚Üš^/Ê«jMßs…=JaVHûk¸=J*EÊÉø¬ûÛ´8V«:[tGÅtµ­(^“h° ,º©Tžþß@=JŠ#}ŠŸ +‹Û6ï~o›g‰z5Ü=@ð£bøÙÖ….õªw€ˆ:òˆÓçà}š 4PÜ7WOèͨ4Ø*§›pÒ‡‡I{5WÐ~7é•'щ¿Ê?Õ=@­»ËÑçU!¡Ì;ÁÙ2P•v}†þþžõü xý=} çH¹£ÇŸ‘þ"€Ã£ˆ +þÎ9‡Ò•µÞÉÞŽï‹¿·Ûï‰Ìyûò@±}òÑÃß•·&Ž%1Y{ e"¢eçè¸$8­y˜½w˜ü*.T«ˆ©QWôçXh6›žàž@ù5f­‚Õ¨±{ýWÒÔ «1^ÐaB$ÁýGY‚÷%x±yšõ>0• +¦c︦Bù”ip§@ð•m{Ð1Å•œz%ëØÓ=@=MõÌìúû(´äÝQ}Ö¹µª9ò{¤Öü©Ìñ¥ )*x'=}û$§ùV×W \t·¹„ ùÀñï ’Þ€Ö²- •`ÃQЯ啹´¨Àý™@븓™ß +É—óÅþ_Õ”Œê¤=@C‘‡¦†…š'©Õ@~ã#=@¨•åC=MßäíõahÐÉÐÏø×ÔÝ%gݘñ}aé;‡L ±—;@:jHìÌÔ¢–/‹²ëÒWׂáÞk×Q°cÝ™5hÒôÕF‚§y€t\°Ò·gf%¸Î–±+ +ÌäšñŸ÷óÆÈˆ[a‚åÔéy”B§º¡©Aߤ†F}…£gqX°Vâ~VÕ*ÕŽ%ĸGÈÀàæëRBÞ=M&úßKܾD°áëšÑN¡ÊÀÞ$q7ç‚À†-ðK„ü“¿GX¼†­»íÄüPàé‘äÀË€`"c +ÄÒøÑƒ˜¬ÕQâî©ÖAÿPÇš«nÇc)*9Êàüî§ ›¹t.´Aº>R6p¨TtoÕu…‰@úq’­0JÉoW+Aæ[•œSŸ*Û[å=Jz¨¹Ø„R¬Úl×_mšü‚×ÿâÌý—‚SùЩ?d{“´ +„{£_/û«OyñÒË?g±åÒ’[yX˜R’˜Qý'YÓ£a$·ì§<07hûûÝ=@»W.¡ä£9c¶&´§Ó‡ûXÁ˜ iÝ…6.<úyFÆî¡¤šà Eˆ?Þ#úù¸$þ Ù›D‰-)*¢{Ÿ„n!C&…Ù‘ÓŒ•ä•„·bãÏŒ@Ž<ŽWVÜÿ›=M¥Î“T´×.«.´(EÙùå¼éâ'i¹á2ûÂQ¹ˆ¤|_ ³ªAÄ´à×µ›*³ñ^¸m·ÀcQÉ„5p‰ýZõs" ­ +»l=Jâ°kòÑÍEA‚Þ=}ïD7g_jyMÓú…uª¸ýü,c0’x¾Ÿœš9gÒˆæcØâ=MÔ£ÖöèÊ=@Û§áÚjÍ=@àÁvœ› Ú”døãØÝa«ìRîý øä³úWº/ÜÊ&}ºr^_j*"Óàààj;÷@ +·CÒû…å˜`ò´¥Wc(Ïû׬ƒWMä Ô”¿äކÝÒÝUEñŒS AœÐÎ?v‚ãñ"wc¸Ó…áO¸×’/áp/ÄœeÑûq¿þõ¿£%(Tà=M*GÕüÄœxe@h¹ ÉÓžä`Iåãñ(;'ÅÅgp&b˜èÞ$u +w•sÌunÌ«:gbÙE½W×ñ^Þá–Ôª4=@?ûà€º½š8›^ñœé%r†BSÆ=Jïv‡û™pµ£ŠîÉ‹ñòÌg×з².R¬©¿A]‚ÝZ‚¬M¸gá“¿j5tŽÅ³(VbÌüw˜"­õX_§€×?5]€ +£8QI$«ã—àÞ+¸UI˜æPÆI}T(sŒÎ~ÿw—üÆŽûfÓø/a—ÕI2Û§¥ÊDËœÛ4¢ÆDh{Ïü$pÉx´,/´×Á•Œ÷¿*20b^×g3àÕop „--#}ÑP²ZJ,y÷K_…8BÔ~îÿm¬yד] +o²|þ¡×`0­yÓßÜ'Å¡+7=}¼ùr'ヤùÌhÈÿØÇ\üùž)*Tý$¶Ë©yTH¯YrÄ)*äŸåÕš·ÚùâoCŸAYŒš“Ÿ„ÕmŒÔy–DðDv^ûûWœ ÖñNDµyàß–G€Î0¥ )*DÇÆï =@ +ÇÿnÇâòÓ“W'pº÷Á!²Óß}@ÀÉ15 0-LT”†ý‰ôÒ-é×xv„¤¡|ʽnÓô‰Êçx2ÌüÂ…7÷”Êõ9äÑäÕ ×oõÝV?wU'¤›©}U€»‡Ž{OÍáÀ¨ÓÔÄûÊŒ k9¤ +FƒÉû'1ä“{~ëõ½õD]ä±®$Ñ’@…,*ÖW£¦nn*HT}תä8aŒ­oÓä31-Ô~Äœ™ÓOÏŒ†6¤ÿ`¶ýñèà$³ûYfÀzrCQÄ øýõGj_™¤ñ¼NøEçfZÂñ¿óÁŸu +˜åÀô]¬ôÍ;÷…W=}dn•ŠT«*-^ š/à@ó³i4=}A$•]mÁîò¬ho{kËo|të9 ØLàžè5ÓwË‚B;½y”üLŸW§ìXD‚xB8¢)*‚Ј¶'ÇÅœ@OEøÏ®;ÈT¨Í•UÒ…À´m + SKjiõ%}ÏxýPîG¬V¬#³ñ ÎŽ›™ìâåë°ó=}I²Ç·ÿW9”—0C}:1Ï> áfL{ÙRz.ÕK¿&%~“˜µê¹7—cB['rÓ0ÌäÁ++€—ÁFº©ºùç:„‹d•á‚“z]fÄ5``"Êè—à ¸Öã +B(‡Ò>˜Ü?‡x=JÚBÔ30¥ÿH§Õ!}r~RTÎÓ7J½ùH¾1ù Ö•Á$ly˜Ã–©#ß)*ïYÅ'ã##! Ñøb(&ݧ?£+¿ÎÖžÆúE§*͘x›,2"^R—þ,GØ©´›I>+•aD;0=Jj—Ûù + ujõ’Õ@"´Ã+q×Z`ÒP%)*8\ç ·ª…`G–zy¾SÀ%ëÊI/žðJÊ©Á×+E=}šò|t£àÈ2Ê=}OõÏ‚ÎøNª1 'zA¡OÝ—»[º€s¹ðÂ\úá£ì6Ô~*-kñ¦ûÞQxè$@¥ º[Z6²×š +‘Á@=@ŸU!J…¹PL£!?æÕY=MLÕƒ£´5’ê£ngiàiŒJ•¤瓾…@ãŽöÉåÄÉ‘bÌèÍm¨=M¯•!—x*A26©4}ÆxOÁë‘âï¶³æ ·Y‹ d׫åx¡ˆ¡Þ½'oA´€ápÿ•Ø”<Í +tàú¹à·]´ñÓ×=MÛéuýù¸Ï…ºÌc‰ó(á´•B䈾œì[òÖ`Ý”+Šú§õ€þCCÌ\ôÖÜ…÷PóË¥Ns“n÷ÉÓlÕ[i?¿ž À„×îÂ;x^ÛÉž¿\eú²S£®É‰ø­×røidW{ +Á06¥¡0²UY€Ïþ³ï/×Ü“¿©°§ÏŒ]–¸Qf¤ùsûRTÑ=@R~aH€j´|<0©¨Sûk/C=MÀµÏ%Ôqï~­–DÔO2[[~ÂÈý¤&4„ÿáõÐ#†µ`²·âb>àϯÞâ*,S–ßÑÞ2¬b +öûe ýûÕV/ŒQÄÈ=MÂ^@Jkºe~}>)*ÝÓ°‹b=@¿ÔÂÈä¥TÜô+G†¸wP'ÐðÃn+ñ }¦Õ”¤ü°+Fùß~*'ƒOÆù’Ì aÏaàýXš0Rxƒ¢‹Ÿ)*ÓKCW`ú0š _Õþd)*1rIíP +DÒ?èB]õW"Ÿéu'NÇexAìÅ×<ðÔ>ñùÁË·D—ÒRͳ*sÖÜÿ¨%j*GâÒÚàÐôB'æ%~•”¿\Ë…‘É”VIן>Û°=MîFûKÁ±Â§oÿE{œ€L¶÷Ÿ=J=MýõäÇÿ‡­Z5K+(Œç +hFŸHi`¥ÔWŒýÅÀûµF¼ßç‹ÞA$ ¾)*´û¼èlp“·Ô·0Ì'÷ =J;eÐ’û,[œñ³U&Ò­í…s§…7–Í-Qœ g¯†o™Ù\>,àÕ¿ð3"×;…Äo6…¤0Qh˜ñ'Æos™zä› Ì9dö=}:§RN +àØçêfÅBù›¹„hÍu@÷ÕÁ àõCiîbê%¬U¹ åÅÕ=JÂ+ÛW·¬Ž‡ûâf‹´R>z¦á;s{Bó¹‰è²ÄHDÒ…x~¹[¨SÒêÈMb<ÚfͶ¥üpj`ìçõ¼k²Q½vDC +5¼²{¬ê¸k¶ª¿B\[•·–Ò-4…2—¯8XeÇút$¦D`6¬ÂjªöNáB´“qœ*ÏuUð \n$&ûÚVt¯šµ›¡ó1Q%ï<®—Þœ‹³º2EjhÇ'Ó­=@ꕬ=Jž|*E¦r1ºÕg_/øÌ2JóP#i{©Üå +dcæ=Múd_½™‰ù‘¦éÐ좟¤ekj¬3GÕDÙUVo~ŒøÆsÔ¶#f`^ÀúÙÒØÖ[¹a½UR”ÖòÏÈQïÈdßëù †e"I“u¦²ÓŸ§C¡Zb(ŸsÔ÷UÉt5üNèôêøS}¿båJ0ÁßðJk>ÎO +e vú¥ýp{Àxq,Ø]€ä%+ÔOe¹]Ä^ÇÔßîöýû„Ù©{4s”¤wókoÎrI§gQã|ÌZ2#ÑË7…&*“¯õ¡*=}¸gTAVcT9]l̶ª‘´¿X…* ï‘@W` ÜŽúרäZ¡¦»lÍp÷r“ƒýƒdê@ +sBÍ—Á×,¡)*t¤™v¥€(Øá‘«óÕÂ?÷LRjC‚ýüeð пùñçW?õ˜ÕŸõ“Uâ<š*ÿ Áœ˜³å×þ{³;˜š!Õ¼o=MGIÊ“S ܳ)*ôi×E%…„§2b½Ä_à h× +WÒ¡O"47VÛy þ7 <†ÓÄ·FZ‡*¯b*¡ÓýlçÕz4Õ-,·@È©ÀØ=JÕj_ØbôõVÈ©/1k›«¼_ñfâcÜ äT@™ßUÆ×¤B"¹]Y^Ø/Ÿ»¥”!Nv4“Ó,¬Ì…¢{­î(><ý݆E>—Æ+÷< +?Õàž˜˜bR["òÇÙÞhÆ´ÎÅ£­Ṵ+ËàÓù&>wÏuêé›sÜÆ»|Î=@32êW­–qÂ2b)* +d=}If(Üo·=}†*]žõ‘,i˜=Ji>è™ñ Å)*´Á©Ö›'ã#$y 1“äϪ0yIÄ'(èªZke2*­PÄ»¢Ãæ’Fn=}«}l‰<=MÁ—=}-ÀˆobÇCÑ,6àuyáÏWÒÇCÌJ`®.áà0à,Õ¸vn ^d°TzZeÉÜh9^Ê€صzÝày!ÿ-D)*–â4ÖÚM;gTVX…šøðH–šoWC%wÕT!WGų/vÄ{kÓÇàëº +`À‚&ÚBV߬ùãâ³%V’2Y“õ@+æqCNi¯D–F@h–—=}:‘¹¤ºéûûÁ†?òŒ1M=@ãäÉ ‰H»ü>.}ï©iÁ´(Á¹öž`F˜0Ýu=}™¶%${pÀVTÏÈE’“ßvÃ×ÛøñQQ6Ó…~rºñ?`} +±t¡¢'ÕVæäšñtA×°%å=@ÿ·ùå–¸ûß“m’Ñ+y¤¨û‚ªìrb1^S$¥üÏs=M Ä„~Ó!SƒNkGÓÕE1´=}ŒÇ%¼3B-ÑMeC¶ª§P³Å !é#ÿ“Ç|§kg"ÕÂÍ”„·j*^’Ü +ÖÒ³Jyˆ{ÞhV'þ&7ÑÛQ½”˜ÄŒéájÂÓÔ’“²=J¶zà¯À4+g8VÍ »G Êü™*2ù×WX~àªJ ÏÏ—J¯à+˜[q˜ðþ߇WÕ£³[ÔŠµ½ÇçØ—òK£ ,ßýU½mДÊe81¤ 7A‚ ^ + ·ñâÔ*»yHgÌ[¹X$ݺòwÇ,ßíð%M%yAw†#“ú¨±–a„‡x ä…JH1êÓ=M‡_íX)*YÎ$—ÅwÐ@TÔ«*8ÿ÷ÂäÀ*·ÑLÁËœ]}Ö‡WÁb.4œÝݘ¥§mß/µC">}ú_õÔ +ŒtÈT^Ó 0Ð=MÌõ¹èÀ¿à—'»÷c=}•Å$Èå‘ïkZNï•®Åö(Ôÿj@뼜¥ê÷ Œ£$cÿwù2Ù=}å¶D¸Mÿ„ò|*\ë¥%o|„DwU†T¿L-Z´éÌ—”“a26ê6vñ¤Ó´—”“žÑœãA&N +“ _’J4ôêWì3|6&}½j.?æ~ÂNÉ{jÑÜ5»“5†Ú6³’MÏtN4,tN˪‚›x‰,íDó›ßlþmZ“×âó›r«±)*d`7÷,×ßç„\8›!ûܰ‡û”ƒf…™äk.¹ï4`ä—¢¬÷ê+4J +9ðÂoœLÊã‘ØB»Ùª–à@ÐúûEΗ>j-xlÛ½—Á¯|y !úÂSŸÇ7åôû=}1=} +iô¯B ìÛq~-˜óJ$;r?Ý’„Ÿe³0p=Jp§Ò«Oõ™Ÿ?QŒ*¡™=M ÖD=@Àßn€ŸFÔ¶Â}Ú«ÈL:ÖŠ2Q:QÂh¾.¯õᘦ63Ziçzv=Jãp%’h®ÕÛÞ#€«4ýêÉì¯C§‚†¥øì +> h73ePwãenîÏÛ6ä‡Þ @S–À:²›5…Àñ´Cóâ¹ÄVÊ“ÿCJÃQ1 ΂ ²ß·ŸÚÍ!“³G(©DíÒñ¢ää†å¹pí‚rgÕ#(sÔ(ɵWðÀjWù=}‚ 8¿Ûž2F÷/Œâ>nòÔwî +þÉ£ÏT™Hý¨ü3Èû%¤9FÂí·¸ü€0s²¤kÒxí=}lÏ—»JY jÖgŸÛ»ÄÙ–¬[}E°SóÞ_åö1]utÁ»MÃ&Òû„ͤb.ï΄ñ=@”,ò1PÞ²ã\ŸDÌ@+¼¥ÿrôÿUäÂ*@ù¤Þ„Ϥ#˜x +/HŒ Öø÷¹t`=}ƒÞñQÏœ—ÍŒH`Þ½uÀ<7OõJš’|ZîÈeþÒæ§ã»>Ö+%€Pjñ×GÏ”5Ä–x]yÞ¡“ÉÒê„™*sѸ6–G•ր„vCòÓ¥„^õ ”™—QÞ ×P?¿_(ÏÅW‘oÐéœ +=JB¿U†¢W‘£ä×Y€–Y”ï´ñôÉìé‡f¦d‘ù”gyü™Öý\çÇØ¢J…vŸƒ¡äÙû²þžƒÄÏ ÆÅ—(OcØxѸå$˜’!ÙÎ$ÚR/õÂLæ%VÙ}¥¸»ßÊM?J2¿²è~X„ãØL=MBÜ×e¥ßdïåq^ÀðxkÌ;6 +…¬2(<9>7?ÿ1•¨øu`šQž¡Ê—7ÉÊ•¥Øð3}Ä0U§`]„áŸì¼r½Z¨$g´èÇÒý˜•¡|MEé=@·ÈúÅDÕ€ëã“ád¼ycÉS·Ã%oîã”ÿïž­.ŽŠ&üDx®o} àZÖq©vÐq®(Ú +á7ùÖž9â^õ£I'uß)*ïiÅ'ã##% Ñøb(&ݧk ûNbTÎ ‹¶¶›H¿/§+f8õ@<Ø©²H( ^Rïá“~”<ñ/Bò,Я°Úë®.UeDN2÷ ?á\¬=@!+;"ðRÓ1ýOÇʆO¾ó*§É”0öàó +=Mï4ñ.)*z’1àfo¬*m-'çR{«ƒaY²töGíõ^.Ì÷ù=Ml–5<ü¹‹+Ú af*s\é§Esž÷N„~¯¼}E³~ÎR—¬ÊÍÍ?™$ïxý‹áïW*Ž*~vÉ„…|?ã˜ïڸן²JSJéàjcfot +çÈá0Gy^n Jòœ‘[tÿÇgêMšòÏsQ².ºL“ìüQâˆ2òÊsÏ—},9×.íT‹³_¥pv¥û.3 ÔÞlï½´elEä»,³¸¾ø=@•,ÓÔýVØÂD×{„rðøå¢ÃP×ÇÔµ›nL…vúRË=@Â3O +Š=@ #ˆ[˜ïÚ*.›tXW…;;tÙÃ2 ÁÛ}¢ÔÕ«ÄŒ{dªWó‹k!S=@¯»â(^rżÈÍÓL6Þ“a`IzÀõ¢ ³â&lÞñ´=@Cp™¯=@d«/V" "¸wžýùÒ·GQý'n#Iƒ˜ò¯|9…xȧ‚ + À¹å@˜ä„'ïºï!(èbv‚ó•yýž=@}zòÝ’ÀëÈ BÕp ‘©(+V0šy> s:U?Ü8ð(J§7WÆ´Gmmš‡…²×˜ƒrŸfI}Æ·ZõàÓˆ•awµÖ| Âù©›ˆ™Y@Õ=J¸ +ПPÿJáVkö)*„ÝxÙ¨ÇxÀáÜWËŒ´JÈPÐÍq©‰™wODMß‘œ†ï‡äÿå´ü&øgTw¸EÙ[åÔa@¦ãñÏ“·oì=@”»xeMfÜ‹˜ÎW“‡Î$4ýCáaX¤¸M”ÙgvÀÆ=MHÿ ®þ£ãäçÑà +Ö~·«Î—ò×[•ÏÄu´ÿ¡v¡×=}„D•wœ%Ö¯.ºŽjQÔ³Õ€ªÚ×–L¹ƒ%Nš§Ò0L°`—*­²ê"Ì,Û”1íŽK¹ˆ›vP`†\¡1¶ÃQÄ~M…Lû—ÀQEºÃ1^/ÎÞ%àÕó².ÂïclEÓ—‡8˜ +2hét";G±ho*³t-O˜µ°KMã# Ô$?bV.@öZ.v©×j³×ƒH™?ÎF­=}gë’Í.sT,ºôNóЊ†P‚˜fÛ³PPX‚R3=}g²(¹m€…«ðú*T,K\Q ·?r(¹7³ +.›È—„$G„ÿà|1ÁbÓã °!süo¥€±¿ša¡ÔÁáùéÖgÏÝÀ¯zÞHÖíC¹†ï¨-u&©˜¨ƒè¨"Ó¨iáiV {Æ…|—/…¸q%ßòÙÊW¹ ú»›××àâ¼£6q÷wü¼ÐÇ?z„é ²¿ÉèwJ +AZn,Óó#Õ0Yº?þ@kà+CMÓx·…¹‹ð´î*Nø9Š’|z÷hM:´ròc1çJ¼ôéÒ‹ S€¼¦ýhÆj_uÝÒ•²+NBgÓªäØ=JOò:ƒ!÷Dúj}êÚ ç“–öñãÏ,ê ïýžt.ï‚4°TX° +5ÃLM_*ý’VÇöZ‹ó&’Ê=@2áEWñ©÷Z·–5òX…‡²+,E$2ÕÒÝ¢m¯%ãï,L6Y«“ñ½ÉXLTx÷±°Ê˜ãžáÂìö«"ÿ2”¬ÙÞLŒvñ,ÑpÄõ×ÐKBUjf%Q{ïVáÎõxµÌ|iŸŸªgÑ +ç¢Ƥ٩¹½˜½w§t=Mâ•EG]WÐa³M Ìo—™tï¶øCÄ^uœ£¸eý,¹¶n~„vFÂeÜ”·7'jà®ð¢³Ó4D·„ºŠ´¤oŒ•ß*36PÕv«ähJ÷€ÃÿE!ðœTì¸Õ|̦4œ—APXá~r·ýÄç“ȃ +]Y†•±1fð.W*ÄÉkdƒ-Æ{“rÀâ´ÄœVT,cÓ´¾{°M0ÃîÔ 8““ˆ·ìB1F{×7Êé×0„Õs$÷åšDÈôcPÙFW‘£Ny àå÷ÏüdÍ¥¬1 ÷™¹y•ÉhÌn hÈ•%I‡Ø /Ê%_ÿ±y¶ +†ãC‰wØÇ(µy“ƒVL­»õr»ÄFŽãçÙÞ,\UZŸOLq0TÌ Û”ì\e†O¸,ó½bÐ=}…ý'ü ó².RœJ¤þ®¡GZX–À*¯È)*¿M±T¯—´„3«¹“Ìz¹záò ø=@=J9‚ ´`Ï…=@ +o:Ö~x=M.¤%zUh'¹GWTÚä2ê‘f~œ”p&…Í(Ä€$¡oÝ=Mà5ÛŒæÈu'9yñÓ`éÔ• àíLŒãÀãsUÁäì u+»­>røôᘔ_V>ÂGçÕsC¼Ÿp=@ƺçÜwˆVךÄ% FÝ +:c׎øã8ÑÔ§4ýÒoNÃgïž š‘ÝÞ¤›œ—j¶Bc÷žóáXits˜í@áEœvb=Mâ׎ýU µŒ „5`Ú#ï€ýË•Š¡íV‰Eé4šò~}-ôí+®³! ËZ5žÕ“füÌŠ›ïb^,÷Àâ +‚\ÎIš H¾9Q‡Ú~UÍŠ£±Â“™qªW=M˜X:>»JîûÝ+ ^lròFª§çÓlú[‘Å‘šZê¡Hð¸@—V²*¸h¤¥^¶¯ÎÌl¹Üg¨§Òk Ó2€*ÆÕ  >ªÌ†…˜Y¼ZQ÷WOK{ ohnN¥´ +/-4ššü¢È[k유à-»½0Žt£]ácKôè™ñ Å ´Éb=M%÷w•dwëÙdÝ +êJvI©Ù •Nöac…V€J=}·ñHoW–V`?6ÕŽ:8ÿ“J$o|zèÒóÓ•ØÒ˜;EJºi×OODÕ¡VÝÓO5¶¼þ+©=}ï…ØåÎ0ŠxyÏEr/67ÿhò–ê >R†—8ì2šbH¾r:Ǹå²J-UÚvÉ +}js¢Aâu€}¾*ÍÄ<ÖW¿o1îƒÂcIH¾æSca€zÁm,f¹v™j=@ß›t#lÝØ=@­J9é­rF:T\¼˜sº÷[*&ü$¹rëŽ4ÌôÕë5vÒß’Ÿ‡¶nd³¹äÉþoŸÚÒá·ã]<©×E_›“=@;l"‹ +‚$ÿFmÒ ßæ_…m,‘]kÌŸå*¬Œ©CÊ@=@…¬„MBMüÌ÷÷UEïïQ‹ŸWòJÁùïÔ$˜˜d`äy¯œa8âë Å–‰TK?·Ä™T¬%n›&üæšõÞ=}^-D8ÃÊE%‚3­Ä„?q +‡×y6‹Q´œM–Á=@<æ´Ó´—‘YÀ¼xo†¶ÜÔÁ¿|”ÎoÖ€×lÆÔŒøðÿ•jøÕ=@ÃÀþ/ýžò’t•rcQ´~ «.þqÓÉ‹r¤L œy” 7²çtl·£pɘ°ÿüNÞ{[UÀÃÿD%"„~•¥ +RÂ×Û ã\ùÄoΤ'|Eä×lá*"’¦ .€Gf½õÁhÑ"•žè­Ñý¯âkMöXªƒ±÷žñ¸hÆãœÅD¥môl¾†¡$÷”øý}vuÔÅõÚÂ;í! ­t!@àt½’:1î|ªA{¦M–k*|.V¤%}sÒ­5 +V*M.¶§ñ=@Ñtbƒ@¬‡¥Ù›4Çýù”V3p•j/P1¨‘#´ˆ*°{§{–Ü¿*]-b!Ík/Ø=J̘»OÑâ(p¯ÓK`~§öŠ0;u‘˽PÑÙÛ¢*êE¢«ÚõíÝÎñ%=Mè$ÖÙr=@ûnçò49” +%¥Õ$è½±!fq]ýhЈËÎòTŸ! Óù7MÓ 'åÏipçtù¿pÄýÃ7šCM{×f&Á^§WhÆÁþ'ÎFÃ;UVÍUHÏÏçÊ^"|bÕñ@c‡f•xÎoýV#xB£œœùû؈ã”Ôóõ9#˜bâÜØ + ÌŒ* j2öHðàñG[ßúÞlÀ0ŽBò„›diŽ?¡|ŽŠ«²HêÒj¬ƒPPp7IlѾ€%ÿ·Ú0¸§5r­™zL¶r1VgÓoFôWõ„nMÈôM¥Å”î›f¸­[⋘\x]R3/åš<`ý»ßÒ +1ßçÇX?;Þ`úy“’UßÜ{Tó€õ=}7>’à`Vܘ›žm­/„4ç]vÀpÿ~òP¥¥wIn—G=J/ðàí.¬hõ§IÚnVÖBjøƤúfB*—Ïjlš×kÍ츑TPzÃ|c;͈}=}g=@ßèÛ4…ȉê +}>X…o?†0e³†²"Íj™y9!¡-:+ïW>Ô=@­…8ªU2X9ï: e¨Ü–×éyT›(ôà1)*ï剫¦|#éIÉÀ™É¨T¦=M¹ùõaû!üü…A‚@¡:ÔD*LeáõNs•nƒ¥¶l'ÕÌ+i³=JÖ ¿ +w‹D â˜7ñž6 ½ïE>ÝŸá‚æ:Wæ,šm§Ó’ûµ®|Á™Y²ÑôÒe4^LqÿA’æ=M‹‰^-²ÑŠo˜$µ´—sEkeriNúŸœÿ :,=@øH}=}»põqO ˜ä3ó‹ëHÍ·¯«=J—À¿‚+:Îjd +·IÄM.=}Â(ªÔWÀçã=}•3‰^qb^à^x=@[JÜ k&’ œCŠ jÎË:îëI”£ñ>–‚»ÃsE‡xýJú’ò™¨—âàCÃî¾Qš‹t{Ïa =@0}œø§S%Hª×ïàšPBF­HÈ¿ˆ°ûƒÜøÀ +¬†1ô›6wHþ°#ãÚb|Šsò´¨®ßÏÃõ<`8j÷Júò-:Ë'~oõ±ž™íó›Ó§rŸV bˆ‘QHæg¨h‡÷ä‡I}u m1°G«Ø•µáF@¤Å¬ðkFþ Þ‡áþÿ±¿BÄÈÿöü7’–ÛÂ/GÔe! +ôk0Jýº—É©zá3-¸nÅoÖ!ƒs홋РՈç¿[¶ÿò¶ØÃ„ êj³Õ»¸ƒã'çjcÑME¼ÌWõІï>£†ÞÒº” ÎÔ"ÃïE/ ˜fó Ì*¥ê2ÆûL ×Fá>‚`Õ¥ÓÏËÁ-ÑOwó7Çpᇷ@ÇØ + šU¦b˜v\ÂÙ’hÅÿ”ñ³Ø¡6+HIƒÄñÑáh§oèÇ@­Ïž”f? ¹>×Dõe„ˆ;oŸÇ=@†¬a›1ýÔÎÞ<Õˆ||7ôʳ1(~nÔó¥e¶¹ ð­#ýN3‹‚\‡]ÚêQ#&üÕ…Ý–„ßê +úÚâó.¡(~ýÚàÔôô’Ö@€=}jd_Ï`û/îEŠÈg¹ |fÆÔHò@ë+¦ÐŠ2ù×€¬Qå5,þƒh*á—+a,%é4+…ÚµŠ…;T0Mªœ"êÍsŠš02ï*÷Ë—_ý–À¬DyG¹#{Ù+/ï‹–\ºÌlÇÌN&©„Vû—‹²àWäsc¸t$WFå—+´Ü:k +Y«v'EW ¿~V+.21'w.·ïáµ´Á*:˜KN:sk'8…”àƒ„…ÊŒB³!^–·škŸv;½Z1!^/¯æ{;íÕ«Þ=Jß@ªýµ÷µ÷6+š½»^ìå…Iæãœ‡z3€[ùÏJ#ù¿~‰ØÞ…P9uàŽ!'=J‰>è™ñ +Å´Éa=M%÷lV̿ޚK9ï¨%áúd*;ÿFMã<ˆ3’õ¤u WjàøBsM›ò*›¸ì·3m€îä=@õWújTÝ»w1οÄWßÕÏp*ºƒ¹ñ”~ËÁfq}˜êËŽ/öÉ”`¤[¾ŸWàp 5Ä +À^!Â7Á¿ôet%OyÒ[|`·Ä=@ žän#ª¶I~„rÁ?²`5ŠèlqbóMý ¬pŸ·Úƒ¥ãCJF½'·+h´ˆÜtƒuÊ;Q ¡¤~Ó™§Å¥Èu/J¯hÑÛïgÍu?o"Ž:Ùá¡]v'TKS ÅTm?õn¹t7Ç +”ôø=MfË=}p°ú¿çEwó/m\=J3ëÑ>C[‹kXô->\9 ^*¥@z0ÉZ1Zh$…>%ôà&=@êJê8ý> Mg¿`Cƶ¥D¥6%ëÖæ.*޲NÆrþßżŠ/*poœ›˜˜d"£Ÿ ËÇ€Æý +Vg7š_ˆ¸cY(ϲ‡Ámîî´ô ýH‰ÛÏDUê_ÕªwwëÖ·.€tªÙàe÷oïÙHxKÉ›nî¡Õèàô,Òû”ÐSãïEp‹¶9¨”ÞÅÅ]þzPIÕ‘À–W Þ†¢7]ëË·õ’—Wéà÷½}ܳ +¯ÿ;µ…Z FïK“×Ózv´„—„)*|Ý—Çn¤Äæ›ßaS?©—þxXÈùšÐ1 „xFÕf㎆û'a=@_läÀ>3]PáñÐ(‚þý™Ñ§MÏýbÇoòÃå!ØÆ¢ÛïùÁ_óú“žD¥©Åì|M-¹ +„ríå¨WOð¾zaZ)*:¹³ÑËÞ’Ë©œØE&‚&’ECÜX"s\6ji,ÒH7ůsplS\Poru¤ÔÙœQ÷áCÏÜü_Üö „ž®*0]²(¾ù‘ýŸØåòl.½ùÓ(n¢uot‡ #Ê6Ó=M_J€ïí + û«'’Emœ=Jã£Å›…Žëe¦èé^àš¿4Ê  ¯i‘'wEEs‹¿ÔbFa+)*T¥,%½£œ p›«^Þ`¾bå•¥ÙìíI˜ý#ýgÕ$•å-…€J¶ØN¦$þ}W]g@õÊÞ_A€Þ¯AZÐ¥=@µD +HÑV¦Wƒûßý™’×§á˜/ðeÃÒçfØØIþ\=MmÌ“¼ÅwÒæÐ,Á»]îü(Å;ó$°†ÁŸš’^=@ižÀoÜ6 »È† Îû§_ýÞ”áVµáD ô°³Hæðp +gß<ôÞ9¬ZÚscÉxþV®á †¬eó'”¯–]I>dpcHƒ;Ã&”sB~RSó.2;ö{0‰Klçõ©•+á:L´`r—s`òMi·E=}òPÆŒ°§ëk0~)*”K’ ¶·/î7Û n)*ø­_¼/Ä Sb +fHñ&Ô«À¼ƒ4…!¬=JC’0¬Î“^^¨bÏ‹T—öÁDŽÖÇÞë Î]@ÍKQâ% Àýt³š¨úòÖ×ð¼þëÀ„=J©7TBM­'’û]š5Êȸ’dûÆõø)*VÓ=M «s¬96M]jÀÛ7î +¥ú;I6ã‘áß°0ý&çÓjÁ!n… NB˜gP·¯“±ÙaÃv­]ïHÓ;ŵڰgÁ%>âHûu¥µS³ºþE)*=@‚b$nI(á-ú¢á•I´ia=M%÷!ïyÅ'ã#$0=Jzö†,Q›ž=JI„')*{De +A,ãŽ65V3§”§.!Ù‡—ÒòÖŠG!™t! ßÛïå‹Ë°úP1×[fÐúƒÜ,ƒµ»â ¹©¤„D+¥‘XÇþ»ÓdDµÄü>¬7ß‹+±´ˆ¹Õà &o•‹Žl¯ª[¼R­s× ß˜ó`Åïb0£ivüæÐmšR +L4âP9òËPµ Xd*C=J@0Q¥üþ§¿`­@.ÁÂNý;,Aö¿¡VvqHÞ/Îpæ«*ÞBÛJÕêÉk^à^ÍÔü‚‡«áOÿ¹[=MhÞ¹v€´ÿÕ¥¿¦}\îš+Ôg¿¡uÔý`ûØT$k ã#b}íѹÈ=M…{ +ŸŠÐÐõR03U³#Øf✸æ£ÛÖÍxÜ¥9b_gáØ"ªG—º 1¤XTK”œå?cS ³ãž$û[ú'÷Õ $»âjyïU1Ÿzå=@Y h47s„§ç§ÚÌF˜=J%ûÕuûñÓˆ˜s> ¨±JÐé}¢©$ +…Ø9:°Ô›{£Žys=@bwY°æuÄHÄ=@ƒŸ<^§UØèÊŸåPNJñî=@ü¥Á|þû'Qýׇ7œù´*%Îó×› ð¤ÁXßÐú×Ápü>i?ÖÄ—…é’̧Ñ`íŽù1HÞ>Ó8ð/r+±;¨§ +ª@â袑7eÛëHÿZ’kW†A‚¬*1õFÿ.°tÁþ"–®[‰VòÄ5’Äì[Râ4¡j†¹“Ê »X=M›23 4¬py©#~îA±•íšÕ›±¦:3È9ßR“½œ¾~%’1M3(þ¬u¡:æ`Oí.Hü’.Õ“ƒðZk3 +kÊ8=@DœÜ˜˜ëzçg7-’x ˜EvÓ.H¢;ñ&Ó}]ciú'à.òñÏ@’½¢”(‚ŸzB²Çê},ž!=}šÇôkV#¶›k´Û ‡×\-- t![t·ÄÅ@'ðp‘=}²?ˆ°öäªîr42NŠùçJ»¯ +µ¥þ—4Ü«.¹„+ÙÒqßã~6àj‘á›p=M,jÊ—hȲK˜s~½ð4K~Ü…ô†;<2:sQüÒMâì2{æZKp‘ý^?ƒÜÈTR+lÓö ÏŠçïMì4O1¾sCHɧM°Wü¼¸¥1áÏd8›±*Ô +Ø+=J4~~òâ“z„C[.¶¡´œ-^Ìÿçuí@¼§hSz´àÙ@W囤TúRåå’S'S8âÛÑ™ªXpônN¹¢i·J¿ä¦|°ƒ:e¡I>û’Ø@&*2OxêbQü¹ú‚µ´|>s7÷DTœ…vËà +Bë§¥ýDEoùÝ·®<ês™Ä~C”f;Ž[øÃ$p¬`gåÒ˜=}JIïRY½Ïïø•`=Máß[8sá— Oõ‘f{Ü$Ëè û>G®òQ[j=@¹ÝΞãÑäCØRÃzýU¨±ÌX˜Ld¼’ºé^CéåÞÎ]-— +Ü1š¨§R9Å)*ƒî~$!lÔÍÏ…ù)*¿å‰ª&|#éIÉÀ™É¨T¦=M¹ùõaç“޵³=}­á&gÛ‰èúäEhM½ßƒªEmBeyñ>'À½„ß“;µFSB*ò{^åom =MÜQ¢vØî{̳Ú·®2ZÖûÇéŸD[ +‡{ÛÑ“›s[™˜>©dÌ•Ôõ–7B°XQr#ÓÞ•p“üQëL ËQ¤ÞÈûkǦšBËæàÜ¿-“HÇù> ‰s¤šýÒl´9Uóih¬Àáo7w÷gìôÕ,M”=J¤)*ôȲߘËœ¯šfúNI©èÇ­‘ßÕ„ž + yUKªâk½(Bt³{˜E¡ÀH’âìj ´gÓX„¡Š ÒcŠ2N¡¹¸ôÌdÅwÓ@kSÝõhH=M›oÏÌu³!…86õ9af:iÇ<–•ìïÐþ]„’[Tsñ[CïWSWç|ÂV2zrŠÊ-ií LÂ=@ý†ç9¬ +ò| _ºiß*óß“¿í†'=J+¡Xs=}|JžÙ›×bâ†Ê2Ò—:ÜÅYWÅÏ´³Œ+ Ê—Gß䮄ആë]ëHþj—÷duůç´34ù×wœøçûa¿­“º,Jh,Ð=MhÔ'ö¾‰×U0‰1 üO»éF¤{¢ +(?%ãoeÉvÄ /Ø…b€h™ðÑ Û~ó5§IÍ9¡zè%Îq”Q8^¨'[¨¶ûKeÊ:r˜wIݪæ#?ÉÍžr§áò=J¼“(øL&ׂ$}j´Ù™t8=@ÃJ%ü'ÖŒ©¥Y¥sûÓÓPø¸ôÂÉÛï†ì?ø)*W5d +54Å…yÛF‘´^U}Å”ô!/Ï‹.U8ÇwÀ®•Òo=@…je£N¹mxlÞ  –€T3E³tê”RåžRàtUG ú²Íj žâÛ”ÿ÷õ·š¥ïD2'Í ê«y.î¡%bÚÇÙ£ô`M&ç7{’~‡y°Ò`»4l=J +¤j*{Hå´£ÉXާ)*fúF=}áRL8 käú/À‡r°\ggÔkZåáÛÚr»GçeûÊŸÎ…Å—åÇëš‚ú;gÌëÃØ<±[I=@ÒV1ÑÀoXò4/WQ¢áG„WzkKp““„@{×lóâB6¤ +ûp¹çœ®j‚«ª0yÎýÈkÅÇàݘN·¦üËY³Ž,ˆ=MáÆ(šâÍk4“ØSà7é:IS\SÔ|Ö!ËGrbZ[!}b0 ¢+Î@]=J9|…Ÿl¡ZYUOq”Ͱ_Éb¥ÀàŠy;÷r•…áNöÝâò:êI‰” +N:ýW×j㛿v;§Ò5`wõÜ“fZÛ¬6CÊ;jà¿À ¾ÂPŽ*›~+^ŠJÝz6öhR.à´Ò¥ê¾†[;!:§”“–Ù\ðn£°ü=MÄóÊàøª˜†RïŒ:öÄŠ™ufvU/{1Ì@ùâoÕu¦„‡Ô ½] +ßDo…ìÒ—¼{qøe4~ ïÅ»E×#>3-©¤©m=}=Jž@ë›y½0¥|$P%q’òo›½å=}p¹›PÄöìÜ«&R+=}_~ày:Tt¿†ªIhèß^—9®„‚9JcNn¤}­Üˆ…»’ô¼k˜J ÏPð=@Y +µà–à·i•j|¥DVHú½–ëÜ.RìŽ!>¾Duƒ•`!=}Œúr"Ô³Ìõ t㢃\ggÒ2¿—E…3Ž0qóÏpò‚`aLÝàN=}²!0ÉúÔLËß!yÃÑK¿ .(í¥lND +øÈÿÍ•§°àsl.^ É”sÝŠCúÝ|a7ü.ñ^mûGu–PýeWîeº6ùóõÐá¨m,µMÃÉæ|„\º~â:Z/†Æ%´p’u“€®ì:]­I§zü¥  +jû†Ué¡.¤úÄÄ=J"œF»â¹y„Q¯¥b‚¥x˜<ó*í8Þ…qvÔÈBM¤#ªÆ Гˆà¯8jTci>.0ýÜ\°*¼tª¢ñ¤|7ÉA*qa7èm¬¥É¸’8áï׎ìÊW’­u¤>¾¢²C-\¦0%lI +˜ÿ ÞGqÁJ#jHÔtýƇ÷þì=}ó#Ñr´—Ôåí?Nre©T…?PÇ< „AG—Û«â¼ÎC”¯5iãîâîÚž©øÑŠDtìPúÂ(_j×Ѱ?wêÅõhßQ“™Ú¥Šî :vûÍgæZÙ@ë6å°ý¿;à +ÔyÎ`þ£ê¢ôSë‹¥þµx¢PóÜö´é’É{Ĩðø¥m · Í«•›4¹tl:\g “àëN=JùÏZ1y–_ÌkcK«1?KLçß>Ò08ìZ1]~ˆønd¾ã¢T‚*Ó(¾BRÜÔ>¥¢–¹ĺªâÀê( +þë¸ ´=}W¯} †Í*âi>’Kã‘ùçD~7é•öè+á£=@®ˆ=M,JÉn0ú×ÑÜ2ÃñÑ&úc=@ÞÊt ~§ŒÈ´ÿµ…Ø—äôkLJ¸(Íosû[z4¼N®=J6 Î>ë2ÔCá—£7ZyáâÔ|ð9 +?ê¾c‹oÇËrçW™C’+Ó¥²a‡<¬L3.&&{RK£q@Hrºôh’Ì/å²A—§×³h)*Ÿ1|ƒkše«ßL0g)*D4ËâX@lxÿ=}³]“–toØÅÐç°1š=}âIzR YÛ&¤¡Œ0¨TÞ=}E®°Þ +˜¼î,~ÙÎ9/BbR3k»™¹x¢0HWÝÚÛ¬fnL‚¹¤ot'µRpre§éßg7Ëå3’ŸeAC“’^7Rxý%Üs¼9ç+LªµX¶ŠÑ›Ê’!…—Ü3±ªaX/D2„ïozÐpq#}yÞ—£˜[Kõ¦v4 +LÉb(Ý¥©kÞò)*…)*µ é+"ϨiáiV h&~#ñIÉÀ™œ… EŒ=@*ñÅÚ‰çñúÅA‡ ¤T=JɨðªÃ×…šÒzÓ{­•=@eÿ4½x7ÇáF°O~œb[÷*–•·Ž±RôuBòù‹jmÑ``× +qOÃÃNÈý|4=MæªY±â`ü‡å´¤2ÇØÙ²?ìÞNÈ1¦¤}1Wôñì¿,0=@“ɤ0¯ßy—·ñ`~¯G²¹˜9-ÔâLÈ@+M«t5=J …Àá‚ü®ã¢º-[*°“ÐG‹Y¬z_\°¯!>æ®uŸ:ðÜ + eÃð[Ã>ðàáÓ@Ø"Ñs“CWLâÜÃ&zˆ»EÅ»¾¯J…+±Ä§Š >T©1{œòPŸJ–­ÚÐ…±OœêÞ=@KÄtªûÞ¤%þ$A#Bä˜dµ¶ê¶Ë–y’F’ ®Ï=@,õ—  ./ɹtpºßT`·®ºj›ºc +&S’På K~‘¼ûÆ$;t,qÚúÒºá6ÜZ=MG¹^'-ØWµ–C7îaB>J¼íF¹´jV†ŸO|bNÒViS(.à¸ËŸ6út3›#ÿ7׎5ÑâfUà˜—÷.È)*¯s„”Þá˜Õ“îç᪨òii§0ݧµ†z7å‹ +°À,9J&-üõ–¥Ëæ®=JqÊà­ úwìA*)*„7L\²6Òò#öóH®zÇEŽKã…n¾Â1Ñ‘8ŒÈLôâà1’JÄÍžUÛÎ:†ª~jÏ}ÝÅy©ö÷ß®,¥ýgư W™xå­í™bM¬<<=@—8›O +’:ñÝ–äÍø¢Nq÷wgÆ–—à™m]2ªÍ^–àv?¿«8>Â…¡.eÓ|¡n²(~- +`k™†¢1+sù~O_VåÐ%¥B2«nî$~´“Þ%¬Ü¬Wº›G¹^•Üe—ð 7\s&'ÓíÊ‚µð {ÚX{ý±ÌÕôËKºøŒb_egȘ_ü{B_Þg‚I^’çÖI;¿¾šª½Þº~=M;vówü¯`ãM–ª€Ž¡(9‘"ˈ5#ÿ-üÎÔ‰W]1à…ì‹(º2Ñ]ðÎç=@kRj.œ>üÞwåq +”γ¾hƒÏJd=Ju–²z|¡pC>Iza²ø1Ý3.)*t„E5ÀS ›LŠ ¹t|®±w˜…©>˜³NBBÑLD§ù˜&J—¯jM¿,m…Œ›ø=@¬qN >93W"VœÝá¡‹x£eua»ÃÂ[4>Tß<j¸°5ÁŠÏª;ó=}³,ÆåT=}Œ +øÇ4c*¶²Æýb¸yOúvp¿7ÈbÊ'ÐàX‡Ÿä–…Ufêh?d ÏõÁrÆsbBÊH=@Ö‡qVÏ=@hös«m „ÝhMÇ=JªÙ-G~6˜M:öÁŽv¸¨$Ê€ÐÊ]¢¹lzÕÞÛ5š[e›Æ9„+µ¡§ù. +Šè.%­ï1Ó\—Ý5ÀŒPiiÄ5=@žôC¾ÜÔ$¶ÉÍkbÚ´BReƒPjêhÊ ÑÊŒÓ}AB-EƒxNú6þ“z®Šc¸y÷U+§WwÜ´¶K¶jp<ïòÝœ|#’QžŒ¬È?ߟۖµ´Iö3=M ¹tu• ÜG +~¯*¶-(·.™¬´åa—æ·½åB µ5‘Óa;؆YàMFù ÊûƒW›¾±™6Ç×âgjÃ×Ìu@‡Êº Ø‘=@Âjrá c|.­Z¨oD0çào·ïÏÜ9›ukgì¶w¼×*¶ÆC(þ뫃S›œDJa0Rªáà™C‚³B:§S +PŸß Å”ƒƒ¡˜–kÊMþ“¬á›XÜé\Í;öz3ëRK¾_ÛgêÏj/o‡=@=M“Lk­NvF$w ç§Ëj=J÷J€ØÔ4ê_¿=}Æœ£Õ9Ä鄃)*Î73MÈ¿–¹)*·¤è©"ѨiáiV h&~#ñIÉÀ™Ü¸~F´ +'=@ò$F+t~¡½òÃÔ“}ƒýd Ú;ÓúâyV€9=MnôµBdéÌdñ…Ä¥Ážöb*°{!Dè„‘”è¹Àá`É}|r¹aºÄØsÉ©kÙ=Jþb¯/?k@è…xG×°—1­î²Î ˜ ŽŒøÔ À (I +É´<ÙŸW…p‹™’‚Zª¼¯H!€&Tâ>óâBF¤;^-ß4¯må-ã¶$MÐ7`ýîŠ=}žkTLh“Œ0H…ÔÎ…šmtùh»#|è5áÙ5aWWÕ´æ£÷â´‘JÙ³ša­ÌÎ,"¼œ+i^jm ¥èGßÞ t¼B—P§ez +*”=@… ñÉôâ»&±>QsÙqý@[Os 0»JèàÏÌþ@ëX³ªÝ*40¾î5+h—Ê;CÍ^Úží–XñâÚ~Ãb!=M^°¹ýäÅoƒ×MJ@¨!´‹Á/â*8sKêˆ:½Hh^KÄå¬ð +–=}¼¦æ¨Ÿ^m–͇pP=M[V:1^ñþvì …oµjmì±ï5eÎ¥Š]T[O-îx£Ío+ð\„ªâë­4¢CÏJ“‚†•{ãà¶=Jª©p±´¿×¯æ Wjí>ø)*^÷Läóä·ŠÞE‹Ž¹!¤{Î=J + û7Ûè\LLv Ó `§åÒ€ˆ7“¾mUn;f÷{“™tß@ôeµàì^»«tÄðÀÛ%ûšÜ^*çѲ#Ð<¢À˜¹**œN(_\#0<ÔX…âÅá.«ë)*lÉä,üã.äÜNœ9BÌ«j=Mj3°›Ky0’úv(_õ/Äë +Fìh)*ôÂj=@³TàõS.Û:…Ñ3~ …˜rKE;xê€È=JÝ _Ò+%‚fnªž@ZjÈB7Ojh'çÒúu£lÞ$§®ªk†ÉÃÑ×*äÁ L]e<`½²¹j_˜8ÔC²¬fʡʢL$“åTu»*XnHýçR +3F…âàëzÊ<¥¥›p«áwÚ¯õÒŽñ<î$©T¤rÍ<¡ݺ½›:j,Z“‚Êp…ÔøÓTÊBJ­-¬’ª4¹Þ¬à‚â™È¾ìçðW]`ï%e!§þÒà˜[ut!aU6ù’FýOqãNÔB%W]äÀæ®ÅJT$¡L9ÑŠf +I9, {\JI¤g*àÓ ­Ð|ö~îbùçR;àÂŒ‹²¼9Öð§²H3ÜøCj¶tê.û×ÁÝýŸë7â¼b0k(ðÃ{š=@¿KëÚÊn—  ²° Kà«6q=M^çH¬=M_õ¶«rp-›÷YEÖýà “mªbN´žM‹Ÿ +äLF¹¸#Ì@ü7×2/~#p+’ ·DHV'î«›ùP’ÚnÈ_Îãà W0ŽÖ «|Â…–B¿/¾8B|ú7²à¿w걞ЊIƒÐ.àƒ»I¡¾¸N{(ªÞ´O Õ¯r]ZSÔ’Üü×—{-VÜéÂ|”÷‹ØåÌcN¿«6 +ÞÊcü:µÒânGÂÂh±üÇWOäÁ4Ǹ2’ŠÕp³8ÛC¦J`¬Œš“%{ªÓo— DnÍH9>çPC%á¡…¯m*pšyßHìå„7f¼/;Æ|…¬³4º,ƒ¢ÊPÞ ×A?>À³Vhù#{h‘'“Bá-kV×GT¿=M +'&1 Á÷"(&ݦ%}F©˜¨ƒèöÃ?%ÁÑúvŒÂRbBÑ| ¢­´g*Lqi·=}ò?cÍ1 Õ¯ŒàÍÑž~Çp¼ïðTQÑ]W]˜'Sýu_õW¨ý`Jà&7~öåƒh¿=@‚„ðÐÊëSôÃ_‡ú”Û +‡QÒ0}¥q¨ý,aåCˆ£.{çÉÎA–t0úâÝåÝ“ò€Îè¸å…ö:²ºgåïg2¿XXÔ—àú¼ðJ=M*o,í_=@Õ7ª¯,*[rtÕ“¯·r¥ ƒõt˜c4§’è>½=@ÅÃþt¶Û(Þt=}Lƒ•˜Ö +Œ°6š2ù^ýä¸ü·_ܰ$¯çªôayà¥üÑÞÁ—Jàž ìSp:ãˆx7DL¥„ͤgêX^—ª+TP7]°á“æ{š…ßÓn.‘a.)*[uoþàX5B²í;X®8´€R%aØçÅ¡¾â⎘†¯­0¥ÈìuÁHÎÞ!—4î +³àf=JÀÔŒŒ‰9Úaü`×ÚrñÓhÞ¤T•똃…ˆOã™GÏçÐ.ýÈoU¤…÷Ía™E…:½Þ»U-é^÷€èÓ´Óó|šy×YmðÈõŒä°™3¾uYÌÁþ`$Ïïè>7»0¥zžÁYWîuTôQZæ=J +(>¥R¥˜oä„ œB)*³v! ­q’„èÓ%lìÚâø‘­jhHg=@j—k+¥ùñÏ>NuåÖç»`|Y·éMLªÖ3ä!Bbµ—56è)*{{LÁä…dm‰à~íjWâ¡"!Ô=@½|ß¡ €ä5B.4Ã[LÂbC; +KC ÉÝiŽŒªÛ™™zõ¾·åÆb%MÛ1=@”`8w|·ööål9z¥®¹˜=Jà!«3Jn½§RËF¥u–ºcòÌ.ØÝÒÛ 4Ùeš.ú6•¶£Va,€84ú?=@÷YOÿ+Ú>Èü’=@¬Ÿ…á¬Õ¯áÞ·®Ã1þ +þ·ÇÓ… —–î*.ž]´ã0 -®|Î,H(ßd0Où‰,Fƒò®P‚ +MLqØgSr“—±…Ý=M…vêÐ8é©”*™beBL°%·®h0Çq¶72¥¡1%z3F†ïþjêŸóÆþ­XVš‡ƒŠ ¶k=M?j×Oõ D]/1VÐw>– 8ê¦a—æ.» ·|/ÕÒWÅàs„6Þ˜ +UZz>vr!Ä{ýrôÚJòT›t#Mú”;2ÚÈB{JZukšdë4*îC},î2-P·¿®.¤ýÈqËcy…¹[´€«6n-M +³¿wm©oËÿca ˜Zò‚i·†ógÖýÀYuaž2KÁi_‡ïðþ§Sþ—À•aÖ |Jó¬oh Œ¸Ñܻ̈©ïTº‚$¶$¥ÿl·ÞŸæ@…@þ¼9i iÇgHøâoÇo¼²è;/s¬Jñ÷ROAûµ´à7àáJ +Q¤úÏz‹„õßÛ*s%J¡HÃÑlmÔ %ÿ€Eª‚²NSËSžÀ÷ôäÃ*-ÂÍ‹?=@ß2˜…°øû#ûßHèWÕ!CÃǪMh‹1ú|T¸í.㛬p+ᙳøkÊñ}£˜Ýgõkf4ÔE­.òÍLwW=MÌæVç6N½á +2êIFût¹µ‘ñ'ïœ+¯bZ¨’5€˜Ç’¯OªÆR!ñ˜þ.¤Ê÷§üÓû¿—.;ñÑç/9qÛ˜"LõϾ˜+-½u¤ZpâÙàÛ¾Úð=J+M¦ŒÀêÌäÊà þ0PuI["?¥+XÅþS…Ze%ü$­Ÿ¡@ô +Oáà´ùß!;.$¦{nƒ‰Hú‡ðšòŽtGÑ¿ÅTêB[7È"É™¤Ž€¾&•káUI\º3zqM%~È M{—™Ía²k1ÞI©’FzS ˜º@™eÅøå#Êû·$ï5¥!P•­õ[² ~7è™Ñ°!—M,®Às¼èª!t£ +WW éÏ'ÎLó²sÇèè°Àó_å=@YWß+×d…aN9áhy¤aÛ×G%}(ö;µ‰ì¶D+fî¤/íÒå˜ïÅôÔãŠx8¢¸þ-{êLòäÜ4!ÈRû¤[ÞÌ$„Þ3M.ÛôÈ‘·D@m¢`k¶?ŠsÂ)*†z,ÿð2 +øÎÒ\Í“ôÞ{gOMˆâAD|þUj¬›c&—pïÁ—Ë{Ð;å¹’1‘u ÷¼¸#€5ù–ýÊz¢ïµ´Ï :3êò(žÞ…Q— µïÖL0bêÌÃü_`*…,;ª´‹+üìÏåÁCØ3óC.)*7+O¿è—Pö>EkLbÌ-™‚ +â?؃è‡ýÃ(Iôµ5‹Ðæë=}ò>;<µN ÍoÚ¡•NÌ*?±N&·D{‚A¦yDÁcm3MàRÈ0üI0(ï@ã“Û1ü$¯€HEí0»ê½öÇ5–fUR>ºnÊi’¦}2sÜúàå¡rG¾»ºSy/N_ÇÓ Ú8ÊÛ +*hÞ÷7×=@!`vv4kOsâò¸~¶'Çð©dŠñA˜”`L¯Tk.šé>¥,<èÔúüQþ|x¬“Ãðþ+ °4½l³× w/ðúj¬qç*˜‚ä«Dïúòõ.à2)*d^,•–(B6~=J«ù uÿ1cßÑ£e +ø31T”ÒxÁtìÔ›ðy]qÚ¸é'‡¾@VA›fºR¾`žàLð¥Šò:k.tRƒÙkÞäáTêê€+)*éܺ.î«fþꩯŽÒjÌŽɤ~GõïÏä!ƒ2N?ù¥´g­Ÿ@@ =@@ ·î ü“ò,Öóý +·í8Q¹¤,Ü<œS²È’ú¦$üÌÑ'fSÃ@³#˜=Ji>è™ñ Å ´Éb=M%÷8µ׌-܉I"ï¨]ÙÎ>×ÇI=@Àˆ0Ùv ùœÃ?‰âôàÞg¡Ð”Ê…=@Jh¶ ÉøÙé–G”MÕXšk=J­ +_…²ÍLMÔÈuûqÑÍ3Ny0¿T\ ë=}tBZN:8LÔ-këÏÚl=MFûÜÚ‘ãј¶µI®jbe-ö&z.bb‹­"tµ?YÇÒ­s™žøEv$ Õæåƒ$ÉЃ=@Ô ¼å eÀÆòåžø=@§c×:{¼ v +ìB=M«?§ú[Ÿ7Òy,ÊjŠJc½y(m”¹–WË”XfïªO¬%§Øø}÷°ÅAµZÚ)*•Ÿ/Þ0Ôë™@XˆIÂ">R'g%Ô—ÔóaE˜ŒR³ÊúÒãe¶—€=J‘f}úµp{WËš«6‘²!ÏËÝ“ +!8Ô¡ƒª?ÆÇê¶}R5Ò¬†@/ñ™R€,òÍ¥@CÒèÃá ¦ªX6)*ÒÊŸç_åºàÙ]l‚†¬§þúÐËŸJ®všqf|ûº =M˜%=@Ä—°]!½’û‰U¹šˆ÷ð¥ŠÂJÇÇÓ®áß-yè=JÝ’ +øì%&~’o¤×´õ“>š­ñ0ÉþS˜ˆABÒ|¶k Uºeï\ÕHW‰+Jâ¡,kmø¢ÊH„‘WÆ—-:¥÷3q WêÐü–IÞ¢Ê7 —‰”ßÕÇÜMhþR¿‚Üé°xÿ0’1gÏ‚â—:mUh/zm§–L_±¤šAâ””“¹Ÿƒu, ¬ËêÄtcY~m%ìýçtH)*ŸZ¼gÅ0 +"à\Î6Ä€*-œ¹L'Ç#:yßZ–Z`ºê’WÒO¥áa°ljhlLAË[CåÒß+¦¸ZñÄ¿IOØÍen+T×­o/œ…ä °— vù=Mjk˜GB†“¼> #ÏÌ€@ñÀþË5Hˆê!ÐâLüTGô6a~:aÄ=M +_êtz.ô\ßçÖ6Ù,¦ý$û@i‰’-ö¸¿–‘)*Õ è©"ϨiáiV h&~#ñIÉÀ™ŽcÂÙçhÁZÂ8.~ÇQz=@“©!§Š 7´aŒ¥—’¨Úd¢A¬”.š­"´ãǶ6™’(âú‡zä×gWÍ +šÕÆÖ5•qdˆÖY­ÖÞyÍ`ý"DÓȯµë‡ôs‰{ã}Ϊ:1â&“¬›¶p“z²ÂB“4áý„ÈËìüa‚3J¤€Â=M}˜»–†ýe„毘S°}ÀzuÞ|¢ÄÄÒm­¸’|.»x4J»;÷gÂ"ÐjVq¤Î +0¯‹]N|Xÿ¥'eo¨´ ~‡LaÐ7~òåƒD Ï—d—sfyTåË É×$¡‰™öà×ZTkö¿"âC¤·Oê3D¡…ÚOlf‘È“¯‹ÏãŸ)* —嚗ź`q–{+Õ˜m–Täë=M­jwå ï!ŠîÎZv + £#ÊèÔÕ2¼¯ù°‚MÎÔ¿4‡ÒðÛ8¨þDÞ·—XôÏÌ)*êâî "ÏÑÜýƒJEŰú@G±÷bYÝ–5°<ã€e˜˜iìgMç>ýä>¾üM‘œêMÄLkfEØ(`:=}.9áM]gÓTC¥Ñ‰žY˜ +5*] n3Ä”ô_d€3œÝ’=JºšçëÊàßÏþWת…us˜ù;'’ÏË3Ò'ÓÙ—W¡RÎ'Ùº$O¥qv7አ¦¨üªe${qÝ!~¬ÊÔÓgÂcñv¤o¢•×—!8Ë,˜°[á\6$´^’ïðw^†°RZÝ ¶ +ó^±­ÞEÒÍa³—j¼Z¸iDRAýÅ!ÖSær4]­ñnW¯¬àV_á WÚ[Æ$›u‘qÏä=@jäÅv Æ; ²ÉtSJæ€zù’¬ki =}óÊÞ—éY¢ÔÁurKD‹J¥'T´ý]g¯æŸE>ã-g®¨žô%q”ó +œóž4Í'%ú„nLþÙ².±:¥ «Íï%›˜dèùÙQ]ïsÒ$°™8®Å¾òJ!cç.a4>ÅTòåªKqÂ=Mß^Ð…t˜‚უF«ð§|SiŒÌšj.H-×ìTÊlök=}(D+=J +¡žˆÑ5™sË^ <2¥«Î21$÷@ȹãÞ—9²ÈQc ³ÌªÇt΢¯2hjçªdµ×¥ÙûX+Eás^+æ„@ÀWJ@;Æ‘´„{eg÷_î`Ì*ÁM;v<—A[ŠIR8ýü³,eÁY5Ì÷Üó•ÚBÔsä× +t†~V`£ŒÄµ¨´iìåß™¢ËÂXrf÷‚@Œà¿™,~·Ü1Cª¹%ªOý Â4B?d3X¢ö˘.ŒpJHÒ\úà<¿eÏv*q#ný«ä3q’:Ñ&^ÞËè`ä¿âmJ*3ó.Ä„=}ƒæ~_®àW³/Íå¤ÿ®e²ŒCO +«q©ºT}ͺM”faêªtÈ$ÿSyŽW9üay@r(òßñÙµ¤è©"ϨiáiV h&~#ñIÉÀ™…¶›Ä'ÐèÁ_®Ž}¬«­oª2iŸJGÒúR Ô2½à/f§Ýõû$¨ÛÿÞ:^äò0›M_é•ÈàžiÎ8ÛŠÔ–‚ +ÿ+ó·ÑÍàÑ…ž¤9ü1wèËŸ Ù“‰ãUã©;q»^GЪ'ŇÑãiíæ-"D/ðÙ_Ä(Åþ=}ƒýØÔ:Ï‚H6ÿÀ»›h%$Á•ÅÈOeÂ%ýáP¶QªŽÄÇRŽÂ÷iŒÄ3=J{ç«NÖ2#Ïf­F Â?M +L¬ûôîù×0  Mf}§²Nœ’ûØW‡á>ZLJ³ÔÏŒ°ÑÊÇx„ðì1RŒØÇ]_)*u˜W‘±U4Öbð“öW\_‡9…Œ§4çà;›½e±æ›"%`Ÿ¤°~ügåµëEë¿)*TVWÂW ~•…¬š…ü°©± s +Š.óQàgRÊÁ~LãⱚfkhL·7Lÿ½”bö޳ÎϵoüýREBÆ%ý³uŸá·À—Ó*7ø.*LŒ¥ú{Gõ·—æE¡„k7ð=J§\+)*¥yÛmu5Žjëk}LAGWƒj€KöÎ2\¾Ÿäjã’r¬qß+iv—Éü0«×§À`òî©Ùê¨S¦ ¹ùõaùé?h›ñ ÅÅÞ_âZ ïzÐÉ´ +*yï*. ËO÷*ÆC$QßJĸ—Ê—bÔºÏoxq,À¹ã|ÐmTt»ŒÐ §óÞé{ŸØÅ)*å5%q[éÇoëœôú¨¿‚Guуþʽô Ì8ôhÇ'N§i=@VÁ5Òý?—Ñîvy}c=}Á?¸Ísþ +žDï1wÔÝœp*‹i¯†óÇðÖœ¢i_…¤-hÂÐOŽÈM>ÒÒF§ëôŠû*¼6:g/Q*CÊ*J§þ–F×êPÂGñ»lo˜;ÆÏІu ÷åÉ&7Ÿ¯þ_G9щŠô¹•`i-‡Ö×ýDÞ­Ëþ“MLB'} +Suõi}ú$¿Ð$£ºn=M¼q>!Ü‘‰3™“å“4†®bLg’Ô`驎®.Lè1=Jü3_7žWÕ3QõÛšèÉ^ÞœížÀ[a4S­±“J»ôû×?5–ÁF°A4»4üh©ôÃ’ðfEHMOú¡©É>’ï–†¥¡|; +Z˜HjCù×<’Ïd5!ÉìzÖ-8?¾©ÇHxÑ㣗TãÞˆ6@ð0/UÚÖ’ þa×T9_ݺyP¨vGÛX6–,*™9Ü[¼|”V·Zžè({–Ò=}Èþ“r˜èÌüT×=@YVDzGÒ5„Ÿ€Ú!X͵asKg.Ž%Ö +MÝÏpq•x‰î+þ½.Ú%¯j`$×ÿ¼ËCøu'ÊQMï:/ÕpÿêÐ àê×O =M þýtwpÜÈEWTt­ñOqâ&’ _â ñ®Ó’å¼Íœ§‘ßDûÎnýWë›D ŠæëÐ?ºtå:y:v¤ow3XSa5ã˜ú +ªz…=J%I¤¨=J°…å ‡ÅàõœòF'Ò)*pÀ¾@±µ™ŸçËûôØ=M*9|“ÁËàÖêÞËþ·çg%|$C$µÑ •,#ZCkgùPeü2Øß'ÊÀUœ %Ì\‚©©ÄÊÅwžÜªêµÎXÿC(ð¾w³ÞyÑAÙAqèML]ó÷d +…†ü‰ã”÷ë’1 wø ¾Ðã '­Ï•a`öƒf½'Tà7a7”ʸtáIjK›áëL2ó³ùÊ-L‡r9H‹ÊNܯº˜Ê*…F%´`?ße«'þ£K17Š¥wJp³‹—_߃ôñ"Òû–rá¡æêŒN-!ýW€åN=}—Íe¹ÊÊ §ÕÀó€ŠjMY[¹”¥ZÞ„}4§§g§,ã–‡ðÀ¼ +4ÖÂ_j ›ØáVAƒeNktº¹§åààäÚŒ*|§¥ûÚ§å’›…öÚ6©„`;ˆW êãœ+IC÷:Poäø~ ÃZPÒHêàä’²ãK­ª³ª ›5—0ŠÚ!Êh'“(ºž0ªdwÛH(W#)* É÷"(&ݦ +%}F©˜¨ƒçº«óÙ!áüC¬LvúºMG+ëñ”Ozqß<-sËQë•«”È{ÉÏÙ0qØF°EHªoc+·‘ã0·@þ@yÎ|Ðõÿ.FS=M†á@ø]‚ Dú$V+ýØá×ý&ÕÉP¿úOõÀò¥–{±šŒÀàÉI +€Èµ¨ßÍ«™ƒ›¾©7ùZ&÷ùo›·1$Ë5Öû…‹(U9 \ÛÉä8ɱqþ `dz²äJ¨_‡æ€až×_EyÓߟy"FD膖‚-˜w€ü0q>,Lj9m^7¹ªj¬h’ró=JÃËq=};Ä*-ç„xû­ +ñç::âíÈgÒÁlîdÇX¹€®”Þ=@Ø$˜{yãa@ùÏ$…ÚãŽÜýN0º§Ê ÕÃ?´„éÐÙ7×ÏæE™Q =@gêÔ³ý5ƒýÄ…a—èÉ}—¡±8Có»p ¶ãÐý—5ðï§úó)*ïy_„%À…´‚ÊÆ¤vrLà +,Êýâîí^9}~;_àß,À!/%iPªY¤8ëk‘;EsóTlu-xžüVjÇÜyß-z÷¶ËĪù¶Šî=MÊW„*—oÖÑ·áÊÔ…l5¡™ÏåÄžN¥öš0§å{Ü­Ñ9›oÜìÐN7÷½f›¹Ä +>´å=@RÛW•ªë£g(RÝ<Ùþ.á“æ…KœÎ+7^CØÙw ‡à×›޶Žÿ.r¸äï+ÇêrÃ:©4»§NéÑþæVê4jâGˆ?²CI®|RÈïÍ¡v!ïŘJtøkjÃ¥{HSœáðî6m˜""Ít_`N +M@á=}«*;ssÃÞó‘¤ËeÆq²bGùç^¸Ä­˜ /©6aUq›_hæR!|á9ÅìR+\[ ­§RÓÈ|¢ aoÑ€/nÉ[:kÉè¹jõÓŽ\ÅaoåáKŽáM%ûT¹Ÿä ؆…@çàÚ\éëЉ~„—uÏÅ DŠvº{ +¶ŽkÊ‚«!OÞç ¼PŽö!Ï4î Ù‡Y–@ðüé Æ^º˜.ßeu*Ì]bïyÛ³ŸAX†qþ†6ÜNöÄÌüŽþ¨-e³=Jk*«upÈ=@Ú5®ÔEÀáâq)*¿<.ä…ä—l2-ÜaQüÆ2_Uœ˜ ®Š +¬í°I=@ÈìwM"`¾‡œúj€-U^–CéŸü¼œ1™t+‰•™%Ðý½U\c>zÅeº@O{vÐD„1µyÚ_ÐP=M£D¥¸þ•òRŸV¸,î ånú…hä‚/¡L/T09Ù v¿…æÃ@þQ¸þÖ|já@ìß=@'*2 +¶}*E¦]Òjk|ççS’-çPäÖ:myv+ãÕ`–ºn<]¹äºexöö̼2†kQÆ3YRuŠLØ#Š©=@’/òâ‡Â,úëfn}³.âÏîU*£FI¹tR¯ î™ÞnË{i²Ìo@%Ïõ¾zlîî+n9Ãi„jí' +**¸¿™¸9Ùé*"ϨiáiV h&~#ñIÉÀ™Š2Ù$‡Cñ_sÐñ1Ä¿+,£Íjgú-Fz¾Äjf©äÞ=M õ½ý{~qI?µ¸"J´£?„W¿õjö8Þ”„µQ™>Þ`ó=@„,›!üˆX×J…/‹¾þ™ñ¨º +r=}›·ƒ݆¹ðµ+®vüÿ0îÄŠñóbË^g E§ÕWÚÖqÊažI×A¾·IížyÞ ñoý)*rÀ67 ®Ù(Uq$DP¡·û)*Õd@Ý@µ—éí¡ô”廚–å˜0Þ=J~÷€ ƒx;º©Tš«Ñ +b ·*=Mï,:f=}´86J2Ñ+,RÓû=JÉ»jú[»cÂÑp³rF2ÌHE¬“ÑnX:LvD…U`­Ïû•Wþ×âf­#€½gA•e ÀpÉ{ õ60P›yè@Âm‡¤0çÏ¥Xâ\¨=J¢ÔÏfR”^¤g¾ÛŸ4 +âc »i­m¨ðÅØeZ4šq¿7H´ÄfWXÀ\*Ÿ“*»&'ÒWC¢ 4w¿NœPqÙÛÊpˆ=JU=MS•±E‰ªgÒg§}¢÷Ñýu¸B1ºÎ£v÷/_Á®¿°æ—„AwÑ +‡úk:x›1=@´Íf€Rƒ¾U¯‚òCf$zVv °Ý›l°ZÏÛäkÊM©G{zÀHOçÞ Q0²ˆ=}5ªOÎ¥ 3Eý"°©ÖÀ¶×‡ß”w|‚°À“H Äz•±¯œÕ2aYZœh£¯yQ¨öÏÅÁ„;J£Î¬1Ïʸ +µ=@óߊ¯@Á@‚ë^‚`jäåk|4}óÉ´^@HàÛŽ¬ë—Ó1÷¬0·2ŒÝ%gÕõ¡Ÿð1§Ñ*3>Öb·‡Ü¦p|Á+ÊC‡Þ÷‘wœøÊ]†n{QF;qÌßqšW »é›M/«Ñ7T”—Åé%åÖ[zÑ%÷U +4F_¤›Ó'¿/×4¬ri >Þ€EÔ—RžÝ˜ä*7ï··î¦}½tr!oT©šã4›hÞ~í†m›ïÕÎ"Í•­«nÏÎá×O¾zµ Ö¬+îú~…ËÚáý} ++‚2«Sú¶”ŸA¸þ“ÞŠ0!ÌSeÀA¼+Uà˜8þà1“p +d½šµq"…I¯‚g&Eå<ïÀ­6.ö¤(a'.á>#Å£Ã,L]o-, ¸ý7")*¤^…Ly¾.Iö9&Óp¸!wlEl=M7ÛFÓÓ 9þOõèŽà‘Bª“ªlB5/²zŽ9Ý!z77‹ÀìÏÅLB’«=}W  +®q*¶Ì$HþzÄ'ì>íÔªJ;ÄhÓOk“f•¬pR†µÊ‘˜A ¨þ!Ét›sB…/tÝ<îÉZ Ç0†/ f#óFo*% ÉDôË7*#ãËYÁ)*„Qahç»MÎB)*ÙÉ(S& ¹ùõaù)*?h™ñ Å +†2 ‰ßñüb_…0Á&«ÐJ´ŠÏÚC^¼Ékµ)*Ÿ“ðõ¼"”…†Xt¤³ñ׈òÛZgÒR×Ò‰VDÌQ…™Ã Ìïô¤+‹¶€£$™ðÝì¯àÎd=Mè7<Í’»qÚ–I™è·NFZCfûEqÃѦ,ˆy +ßHêaÖýªòPüÄu³*9ì¬ á̤;7ÏÿˆßG¿òÍmxÁÑ'™=@–“5¤ÚµKƒœ¨$ÓT˜[¡Ï(Àdw'Óþ^!Þ·Òߨƒ äÁIm´Esÿ^á3 uª «ÏÜâ=@*Z¿J¸îDŽLpLÖ>ôù}ÊtîV({ +p¼lŒsÄÏ2Qc&”*[øiDÞÅä\€ÑËZ©Çd¼È"!Ф/⪩D5q屪=J^ c> ÇT$¨­}•—õ…aBe8)*ƒÑ‡ÖÕ)*tÄxÀà§Bš¨•s¾W€(³ÿW†W56ªDjñfz„”žÄ·gêµÐЇ® +Ýø=JâÂ1´9‘¿°ÓÌÍl˲.núú`° ã Üvp:"óÄ6_NoXªí¯ÃªycÊLS›,†ª„,&z<À•«YŠôÕ*v]k~î‚Eû­„J¿,QáH¾4¤çáL×Ìlm2gç’N‡×eƒ–‚<Õ›*»^H +»—…R®èy ¦=}L­‚Úá†âW¢šp5îQáçDYnëWçÐa€ü¦6ó´pŸ%³š¢Øs™Þ+%V[´“5wœçÈGå°.IÜû­1Jz<wcào˜ÇÛZ3)*>z¨ú+¼ðÈ=@%·ãrëZe4p—å.亼;¿në1 +$´^`’Vä–Ŕʘk å{Šæ@ü0ŸžEª|kº¥wbWm*†,V9Â8hSHý5+æ[˜V‘Ÿøc´0ÿÜ·gp 7é£&ÒgÙ„å—ÿCà zf°3hQ‡gå„­œ ô5E¸gÒ2䱇gv=@/™X + S„^®"õ™oßZBRºQú}ªFWÅÒè²[iHl$Îü‡å°…«‚Ø=Mâ Ò^_G¦•¥/ùN;Sɤ`9ÜÐõ0ß r:îC¿Hz§Å™€õ¡zDrl)*¿<´¼–4Õ,Åsà›Qþ¥}€l`wì~Áðú¨ù +÷E2Â>zVÓƒc*î¹”Ê5œ!¶ö$‹ xýf%~ï/Ø!>ÚŒÏlÞV;?jX–á ~±ƒfòö~­„ÿU¥ïHC]ß…çe`3¶ÝRaPp >ýÍ„ä°ËrûI=@ÂÓ'J’4¬i ãɉD¦)*yF©˜¨ƒè©"ѸiáiVüê;»"ÙÐ;f-ĺ‹½0´º¸ñ´fÒB+p½ÝrÍTñy* ùÏ•ðñÁýƒp]ƆœÏo&”»”p| +0gS¾ÔÁþ+ï{ðˆÛpj;´´âèË*‚™èÝõý˜i•Ç4ˆ»Ñ»ô÷œƒüäì*‚ÔsΤ40»[Q ¾^“;½v,›« ´*‰zò0ª@òM­iô®-R²ÕW·Ï.³ “ó/ÓGØX±…0`ËyC„=JFHäC–þY™T%v7 +wì8s$åÙÌ8ÁÔ”lY]˜I«Öí"gôäiµ‡Ž.‡høÏ¥Ü£„Ñàëá—ü©t©u• Ï!éËù²ÜQ·ÑÛÿdÙvÐ0ä÷Ûëi¯h žsÂQ¶}ô«»Nï[*Æj}GÒ{®$Æ~úK²F Ò<Ú²_J +áp¥Dê?‹îÉäÂR².Äòb[.ï:?Õ¶×åáÏbµ<ŽãµÒá1H»çPð˜ÍËm0…—ަ`«i?‡ÏwyýatÜ“_`àÀVmV=}TϾDø±ØüÒ}ÐV·Àž½Þñb(Ÿ}s¶•Àß@ÖçÑ✺xsi=@Ï +…WgåsÛøŠÝš+F${3VcaجÏïÊ©¢"7)*´¥´/dHá8Á.0e¥IpëSàáºØN²“Ã>AÍ—†, ÅÐ4BQÿyB Ì´J*ƒ»ÎU¥œMú{Ýs7é9“<ê?piç:–=@¥‡Åò3>?ƒý”X†p +á¦Oå¶j|qQþDlÃ×ü.Þá¼ ‡ ›Ü¡QÉ#}úÁsW·g×aª Áœ=}婨h¾IߘäìÑJ¶#k~ÄÅ=JâA4>zå6g„¤[™7=M Ç4,孷Ǫ$µÙÝ °~ÜöCKkQ·¾tž=@=@ +¯=@8€P6!ý2@ý]?7Ý./0  &“¤*€ÿåAÁ}’97kpL2N$¨žSW…Þë^%æuœ'Ó Ã|’ï¼Ùä­’ŽÑ8k Ô5wéÒ‘â ]Z­å–¦;j9/IùŸGôõZ†£çw+@¼'þç ü«¿8dz(ž.öM +|{1°ÙM™ù‹lº„â=@ØßµŠ³]˜0nHD®Ð¥<ùµ¢Ryß:ri·HÊ[EWWñ6vòF8},k¨Îe—°æÛÉ i~@Á…ÓD§ôÚ‚:`³´¥w‚‡l¿áž¿J'½¬’¬=M†åŒ/þ*­Z§ÓNâ-]ž5·é +¸ë…›ŸWí?¬h+´L a€ ÆÀVI¢ªñL¿Eo âAJ›v7õèL¢0 À3.hÞ-Ù–à³6!,¶;o2ׄ‘äk€ÀŒ£ Ì7Ï—ˆ¯/3:=MÂy=@Ë,¨ºÞ:¤wÝö)*ÙÉèS&=M¹ùõaù)*?h› +ñ ÅF2ê÷¨$€KâL3p«Ñ¸“’3*›~6JÈ“::g“’Vž%ý„›ÜàNrĸ„ÀÆ=}”€0gÓ¼ÐÊ£¥>•1b´´ücIÒ±†€ƒ=@樇c,d)*=J?øÓ²=Jª·ÎD+»³Ä}ê[)*d +rx5‹šr÷g4–*ñçg;öMgÓ¼{ë ÈàXÍžç{€4ðy”摼Ø*¸ìáýWÂê6ªPÇ^‘­GwC»½lË ²´€–V“ßä×]0ý ã«ëpJþ†Og)*XÍΨ»èÓål-¨(EíšÓâ’”eh·$-Õž +ë=@9_ašØ8ϧ¡ù~VNÚ ™£wc}… Ùƒèåá¢FôZL·¿žHQÊà}~‹N ’*B¸©d»|1Q.~2àJúRÕ6‘H-&ïŽzÇDBF48îÔƒ›iŸEWnµŸÀK²½_|d\·PÏ©·_á™|ã +&“!@ÃäùÐä Õ÷“Ø‚e:íÔ6×qüäðýßµ‡ê¬8ýGî}õýX)*mÿ“P|=J@Ì+BM«çÝ¥¨N^ܪ¡é·DUw¢Kã õ=}ð1­óÊVOå•’‡»JÍn[H)*§*=@š4çÏãæº8=Mó(þk +hÖ¬%ïÑÛ*<>ò­ ÒCã-×àþ„œ¦óœ ¶~­×cåœßõƒ­7ãLe­jÑßå 5ŽÕÕ<γ¸wK;>Ž”YU?80=J8…†3¡š/ص´¡-¬ª{ϘÃx‡j•zP:-²¶yß?eEÕ¨êòŪ~T ãÏËß +¯ãœ'arQ“7Q,§Rt…¤·!@&Xz3WvùÏ'èðÁ‡„ –Wza΄‡[ÚÁ;0<Ì0³P0r!Ì4`¡0ß~çºá¯!>az”_AÃô\‡à´út30gx“˜ìÅRÒƒ‰£¾â9]p¢Wt±É Š2Âò)*d +š¿€²•¡,4Úz#´^Ó}‚páÜ=JEÙ½â½Çð«’ZØ»§Ç+Eà-¹›}00Pì¯8FÌígå:Ø‚ ‘?áJHB¹›Æ0ØËêÝ–2~ŽÙ£!ÏÛÍV_¯ Üån˜ùN´ô÷í ÁšTÔNBêïAúsýßÁ— +¢åúº0üC£!Ì|ÛRéßê'Ðõl¶À½ƒÿ½œဠߢ‰¤|·NP=M„ Ýš°·ÝL[v²åÝ»6Í¡;Jze1‹%úÒ¦ìx‘ü¬i÷œ àÀÛ |?€¿‡r;êÓ}Q€c´Tͺ$ªtj1PÛ÷áFûÎÞLK1™”íw³± +ûÏLUPP·-M<¥z6UgÒü“pSáÝ‚HRÿ.Ô›L3 Æ«V2+Ú£#Ôonj-˜c͑ϗˆÐ%=}‚C´Ç»·x{ðU­ä:í ^-†2 Ðï—C*´€Hê+ï18:¸eûÍÎê+]ïU+ÎÈýI·yʧâpÏcžý…Ò +’2—Há{޹ã´2ˆYáüitG™s5Õ@²[%ïù S |þØͨ½¤pØ(ÏéÐózC”Wû(Õ'¥ÎŸ*8½‰³(<êa nÓâúÇì,¼go\)*ÃkFÿ7¸=Mù^+ܶÏÁšÃ´+øzÞÖªjJŠ›g3m+ +»ÃÌNñ1âï-qM¥{0¸7HÒÏÍ¿Âxü¨’¾“TelÚºq0È“„(±kÔ)*§Ïl§~kÕUµ]ƒ÷åõD‡}…z6…˜iTaÜÿˆ$‰Ò…äát,êk¥p›ñ?qXÃäØÃÒû96ÒŸ;VJ$ÿ/5 ý ÁA˜S—%k6pû| +;ULïþ@ñºfR[’1™‡_Ý“¬Nªê¤¡Ôd+Ø…›ÔàïÆa¸Rv…‡o…o!翹.³ÂÓÞ`Ø÷¢Q›…¥ ù>›—ÀµrfŒ€=J/ç+uû~vä•Áx˹°ð21"±L¹,Ké§Ãƒc1•KB=M>΄Œ™†Ú­~ H‡æ\¤ýü“À=@ +õŠÜSy™ˆ/+’ÝO+…¶/L²0=@ÛÞ“=JÇø3¬tòiHWG™‚A{ž8>²ƒ]1ç0Ä÷_ë›ðûÞ3ò_kއâîßà*®¶²F{ކųї#Q"Òúý¹=@¿iç_ØÛgL g駤è©"ѸiáiV i +&~#ñIÉÀ™œ–ªPé™ÙÏ;b.ÎBíBP’0H¾-C1¦¥{5¨7SyïgDùxÉ:=@Æ›¹U„ûh¿ÿUÀÖ…1ÄÒö!;ÃÄÍüØÊŒÎdê*bÌÈXq×öìø‚4íaqE‹k@¿Ž=J4ï×p=J³Ô:êÜs/t·MF´Ò´ +a.l9èª4®$Ĩk¢•â~¾—š,Oë›r»cÿe¼´å‘ÀÀÓ"-“—äåq,É—@ÓWMû‰@ªJ…hrÕB޲áŒ'Ê`Ûhÿ摞p\=@­ÛÑ<”Wºç2´j1J|iqjh¾3nj»jØJrP¥û~TO +u¬ZŒQi¯*—ë¸þÎúx­ÛÑÌôÜ]!zˆÇf9ñóÖœIu ÃúvI{­ƒ'àä©þ§™ÑÔÇhè-"‚IÇDw¼áÞiÎ÷Ÿ×ÓÙûæçf×u ?=M ÑuýirIxK˜”Åsš äJ¨_}\æŸýdw„UŸ€_4 +¢R=JÿvÍg‚ŠN¬TçÎí÷gÒü¯œ\é>.¼n´<*áRgFEª»¬è8ò^:»N=}¸þ-¿Í1 ²°ê$¤z29”+ÏŽ¶}³ÐºhöŒÆU iy‡áDÞ=Mõ»Õ’jäÍÄÖ„ö4Ž¥-=}~?Yë†8T’•eÉ”TÍ»ªà̤â(Ÿ°—Ú–Ò&Õ`î£UyoÞ‹LrÆ +ûK¡DW=}p°øÍöÓe\«%Ïcó«x·Ì—UiÃZ5³ÏÌ¢S•’á–¥½½p¸‡¶½Àïg*J ,È´Æ2oâqžiôÔPâLéÃ×ÍgÌ•”œq=Mt¯¥=@>¶©ô¼àÔžø+Ñlá*ç˜Ok-É„lHŸ€ðB\ùœ[ +v Èá{ê Ô’JC*v{9“ü2ó÷|¡ßµÈÿoݾ*J²ÓD*¦/:e÷½†?Žƒ·Ï‹¸“¹Ô°Ö*3[}s‚¤ênĵD9ýÄÁƒ›$Õ=@àØ`c?ØBÁO¡Ga·¤š!°×gY3&ÜðÛþØÕÎ(Âdð +§`°²Y•LÝû†i±‘û(Ù$™ÔÒdxÑŽ[ XGШTК喘Ù*`bcº›xƒ|mú,P¾ñæ^Yd™~¬o:s=@Ÿ=}ü·ýº…èz_ëHÍMÕõ„‘aáh„ZgTEF×&Qß*=JHgx¹B-^ú°Â(~° +ø0¨“»+ñ=MpìèìJ ÑX¯´ÈÉý_ª"$EOÅ/¬ë&”å¼Ë©ÇMS%¸XŽ9´Ø=Jð=@'Yþ¿+;¢…e‹P.0o(ÇŸ6•V†ArLE*¤´=}ß…×—|qšër¸jHé_Q9œÙ˜sL=JE¬Ûö ͲŠ+³—áRàâæ'-W¥œù—X#ͺqï/ÞáºjýÞ;ª§­:iDËÞ4X"Jçå±ø˜¢Êï€õÖ|C˜—œð4)*ô®}n—† AíJ’:v»74ìUUgÿe°¡ŽØi¾~ª=@ˆ›XŸ/æ´ [F*o>Mß›a½˜b +¯ ²„ƒ·wƒè˜ÒJÅŽ _pwÒoþ;ÑÞ ­K¼\ü.D¼­˜ ‹=J@O¥;Ä3PÔ÷åŒûWå¥,E\QÝzÍ:Lµ®R‡ÝÉ„<µ{—Êqݘÿï±QÇì­«ÑOtÝœ+KàÈg7MÓñ´BÛTës2i®ùçZ­zöÔC +ŽV¡Ša÷K35Oߥ ÿ ,¼Ž—Ð…uëuôBÚ‘m\[H¾°ìpØ×dòoì8aqo±Ú@‚âôìXòM³5’@Å‹×Zeî^Æ¥ÿʼn=@‰™(È’ôÛ]ýWÃ)*ßå‰i&|#éIÉÀ™É¨T¦=M¹ùõaç +÷¨=J$tM¶sÓÉô¶ó^~Î-Hÿt,Mà’$MŠ@vÄ|D—J+ÄßëÁMl ŒUÍAXu@ÛÄû>-ãßRÏ•:ï>\_æ:”M¿ÿR§§¿)*+Ö·Ú—®cPÝ»×ÐÜ6²=J=M­Iªš™mëÍÿåDšH×ZRYMNvHÿ…TÃYZz3ù÷{’†æ4ˆàá@\ØÜS¡ +{øþ§gû5µ1x·Ý«!t^ù=@§I ;Œ}Úãê&´¨R§qÍŸg/ß-r½·!h¾’S‰ý”Dý[¢æ\ÜPMßDt_•ó‹àÔÇî[Tfô©ß_MâÊÞû¤jâÖŠ¦¹¨Rr;Óàu àøXZM ¨uÀ=@ +käðŸA0ùS®¤šë†MF3Vy"!Ïf­—LýÁŸeíò|]IÂ_×A×ÕT1/8+#ÊOCY]ƒå憷ÊÂù¦$zˆp#«ôTìkø¢ÓH{Ú4E ¿@0Zb­j)*µAÂæá˜iÄQæ ïz‘…WݯÁkãͽ +QÄ6Öü×oÿaW÷âƒ[|·7J Œ´#.\«lÀ”ü"u rá,=JŸî¸)*¯Etç¹4'=@/÷°3‰Y¿ÅÓp¥Ë¦E=@/ìÊÉv¥~úuÍ’7žà86'¿½rE×L=@Ö¨øÖ«p=JJq›k§,(Ì%†• +á¬Ò=}¸›÷b^…Ù5,¾®œa*-ü×)*ÿå‰i&|#éIÉÀ™ÉèT¦=M¹ùõa爃«‰ár$s;ñ>‚`rÝ´^9¬/~+=}Â=}*›ÄssÐFù]„=Jõ»¤”¸¥@—+´Þ7íc÷1?Ÿ +1:T“ÜŸÄ‚ã°|€êGÈ•6Å‹ Þ{ÅGÞÎü×¾r=Jù“Õ+bM¹„…2'0Ž}*kÄ*jÄl1ç+E¿{fïW.¡Xѓɴ0¿æ‚–¸]pï´§‡^ĵu§aä+ÞFî·ÅU·œÊo—D#ñÏ:úâ^Ô˪÷ +Mb$2ÞÐì á©2e2xʺ&Òúf•WËX^ôtPˆQ1üÄž·Ä–ƒÄ €E/í-­úˆ +ý•Œ=MRá2cò;´6Öã£Aî«Ã‹išÊ2p…¸šÒŸ-«>.o&*„˜Üv+lžš=@͉<‹˜6ìl»g{­‹zؘYĨøÎÔð˵š†Ú˜]š‘"y"Ьa™Ìú…øôë„-æRŸäŽTÙ“ëM÷j ¿y +þ`Û˜æ…xüq»0SmÔ¡7áã–TLhŒy›kÏ.„Y£ºÝÓ5Ú3É›l‰b¨Ü¶…çEªàü ‚Ó×_Q“—òøú¨“ÀDEv–°4=@Üè…ùurÍ1Ü»ê«'’ÏR³B[tHÛ.¤ðS´¤¼n ÊH3 1=MjGûò¬íº£ê?mŠ8£ïwWOœcÄÓ4ÛR3W†ŠN[0ÉÎþ„H­‰–=@ +’Öˆ1åX©D¥6•)*qžð|žØ$BI¹”¥­vhÛz8ÞÀ‰p‰Ý— Éì²FÍoþžûÑé‘{КŠÀlQ Î ’÷y8ìÖÈ‹›yHlÏý”—V¥W£Š¬û£´z­|†OÑå (>-E§Çg¯ÕPÏ€âå«s +ÊúSÜ! Š¦ËŒri>-ŸVàà\e²6Û´,9DÊï…fkf´º§õE×Ë+²À¶ŠŒµ}x…È?ï‘âUb‰Ä¥|z¸©ÀÚÙ²½ë>ì§€»÷× ½íz+9ÅÁÞè–'‘{}4¯°)*… W_"1ïiÆ›' +ã##)* Ñøb(&ݧ-¦—áäPU!aûÔrÆsÓú_Á–uqãÍot.ö·?ÑŽ›~o-Ĩ+XB¦ÿ=M;¼ô‘«„õÐ_ kÔo5®$öú^ÏÒ¶ÇÞS»þ9¾«=}}”=M]Ê*¤Ç=M…(ß¹ÿÖ—e*›l߃ - +=@ÀðÕ1Ô'yüä¨X”|=M« =}ö ¿yž“¹GØqÔ§™ØéSý¬ü ¥Ãi¯w÷û±y&Ú_dÈËÙeßäÕáŽøüúÍÖýЛ;PÉŠ¯HG^¢à=Jœ7wò&ÈÔ*¬“™ŠÎHþ«Ö8r,ÂoÒ‹Ý“;Fÿ=MfÀ¾òe¨ +þnZMô.6¡ÍnX.»,S™ŠSMB&T¹kNqËÏJÈ8ŠÑ­^lþÏŽáà§ëÑœüœ=MðÙ“$ÈÓLlb&7€cÚõÏÁý…s=@^@Ž=MMI·“¹N›ýƒÑŒÕíŸåÔê!0•ƒ¾Ø¦âÈ? ò2Gïi’ +˜mè²7½á¹”ôßȼ.TjL­§›?aò¶×Œ·Ñ_U¸Ô«7¸/w—@ädqsÞþ(Ÿû¹ÑYQß—¢0Ž÷T[Š”WW/¥=@cd›€—TC­làÛÎÛÒl4cJ¤“=M;¿·çG!y!À¹ã?ÞãÌ哪+êQ݌ӿ‡¹m +!ÿN üº+ƒ Ím—\[uu2Jj^3´jà¶È’*~Œ«ÜŽH¾FÊ€JüûôL1”Ç–“žáÿäU’×qŠði4;çäè½$w„ŠA…Œð×¥¼KÔ¥’þŸU³úå} ’¶<é·EÚå¦dÇ1z9Í=@-† +y y¥yÏ –ªPym»­"ý-á³´}ò²-füËL,JøSë|˜=}CÑ@M;t«6‘ôSÏR]l¼²4/ZœÝš7gÀ¸‡á¾†}¬FrÑÜ9ÐäAzàõs=JÁC•q“Í‹º lÚ3ûæŒ>ªá)*âÕYX×'Yÿžà +oñÛ SZW#ì(GÔ^¥Ž޵˜áWF¯™t“ÒÙ…AX¢Áwà§ÊÀvrL¯QÞ½o%dÖÒäcc-ĈüÀå-èË +˜Kö1ÃGïKI`(ÝŠ¹Ø. gT"'=Ji>(›ñ Å´©b=M%÷`ÎI2¯<‘¸U!uIpôÎAzùXë>2*|ûRÜÌ5,v£Íj'ͪRû +”¯b´É”¶¨Í*CÒèDqcÐ$8½Ò驃¥ŠJ/;Oè/Ô 6W¶ÏõîÙvúºiñ¥IºÒæÛû¹v_ä×þá`Ù…Ž:{{ÁMÑHF›áÎÜã…Œ¨UUõ„sL™+jìÍèý¯ ´MI2«÷X=J•SÉS +Âõf§<Ë•”¨1_œ·=}N2}"ýžÓÒu±ÂÄ5K Tïâ×¶Óà¬æJ%þÊ?N7ðw,²’Ppy”¡òYP›}*¯|LŽ!>y/j2bÂGÓýfV‘«ÎFW=Jj.D…W–%*æá+¶#vwG$x†Y—…§y +”=JR›3ÇØ\T_‘ü=M×ç1ÐdÅ5 -º2´Á˜6ÐæX¿O±¾2> {0*Ì¥;¿ÖH|cÓÑFñZÖTV™·”žüž=J)*ªD𢜑¡ƒçnîº[>Ü´ð£!2Wh¯žì|+Ðàáy.ñÁ;´ýA`—×G¾Àk„ +pC WÜò,ÙrG_%|—’ÃÍjé’æª¢À!¦z‘ÿƒ“.¾h®z„tKêTýjP1ÏÍ^*p/W,5],ª…q.›o{—>Þ…Gèð·B—cê^Þ7 «v o9¤0“r~”wg=@E§µWÚ=JÓ­uÚÏ(‡Yq$ +ÙÕ%…”WØ`EÓƒÍ܉üét}@$ÁxŽN‘_dÓ GUÑäÊ{Ñ2ÁE"Xì»néó†…Àôw ²ŸiîÐo‡ÜÑötªTë·RÂx*=M>’2Gç’ú-UïYo9|r­ù‹v~Ì¥Ä^Og…¹”KϪ*hÞë0>– +N},âë£^~8ÍuÌÿºŸ„UaEÝ?­"ûS‚ï=@'GýÙ·u^÷ÇÍX’ fãÕéj•SÛ›™R.Ѱ‘=JûËà-’dà¯_Ä•àÿ„Ct:B¤÷WDÅ×=@þ˜\ª¾²ªµ,]™ðW“4‰¬E ļàÿH q +NéŸ*€÷»”=Mfu+á•si·O±\%(â 9½Ï…†)*Ùù)*>(›ñ Å´©b=M%÷}Ò³¸%Ð pn.ª£ÎŒ9ŠT«¥D„,Ê+r;G̪Žk×›¶w–Fy?ζ׃m.ŒÕnýgRÓ|þkF|~Œ +M°Ò×MùhÌ~aá†ïš¤g^÷…jÖÖkØe¿ «àÊk-^–F:6,[pë—L*^Ï\­fDÊ’¸R0Ú1CÌLŠL~T{\ÆîÄçÒÈy“ÔOÊŽ€¼¼\Aôk.!Äãâ;E¦¿_¥ZŠu›ï-pâ°=M¹”œ¬T +Å8]²Ôq5ŠðbÒÞ:l]F ·È¹ßÀ¬r#Ï“ObÄ·®!;Fô[=Mâ=Jþ«¥kXSâ$|ÁŸc$¤¨®Óü5—kªQ´š#Y¿Ï‚ªsï“:ÕM¹ìÑú±ÁáÏwœã¸àr€ù”Ä`V*dŸ¶ö…Iôáñöœ +`ª>ÕvFC’f€?ûQ­â¼gг‡ád”½.C×Û…$NEph•rðÞÖR Þsï’0_ߊNwsnA^À‰«>HÿpŘõ¸ð­¬Ôþ°z=M ª§çwݱ€mk“d?¦Õ-ub9”^Þ¨>’–ÍL[ul@ý»u +ü´gï‚7Í´Ç*T*ÎKРËkÞ&ú€ÄòeÆþJtš§“ƒ8‡Þ$‘þÇ™ÐZdh˧>©8 q }&5`di…Õƒ™Ò“V~ŠÚE„ɇØÎ(»hÉ-—á^¡8L=Jê%`Ì=@“_ÒIsÔݧrFDœÑüë +;öûj*›7^“sN¡™t+óN¶þò`É"Œ¢Ô*68ûk’¾H3«Pq”Ê»„Ž;»»}Ú¤»*x§Ô« kë&RW5¯âÅXÊMK®´¥xäùÐdPÝ`º„ ;ä2̱_×'FÒ$7’Šðrå­"´„c†$‘×ÖÔh³ÂSÉ; +0 jR]‘•Òzâ~8Mâ>S™]á)*xesM'Á™É(×#)* É÷"(&ݦ%}F©˜¨ƒè²åh"Ù—§B²%3hþÒc¡:.qÌ?r1¾¸}`J+ŸN¸R~ŒŸ]­?C_¸9Õ?—kÃÃÙ]ÒèˆÁwfRºL*´=Mß=@·×Ä`š`½÷_F0.~Î=@NCPÈð÷:gpÂgÎÏ3l3\ÆÔpkbÔsÌj¬]~Ρ¾vQ˜Õ:Ø=@êË…t¾|n¼3Õ{T, +ÎöaËu“O|ð9›ý{+ê0ÑâI˜÷wóS¿pŽ ÒãA¬n¥É¢?àt³ŒÌ8n4Ž<7elu2D$-c^ÁQ"çYl9ªÍú4"'f–)*ó£kð2_sqÓzW.=M;t¾Œq¾ïwÖ¿;Ê]ƒ ý±àb=@ +Þ=J5„ÀJ—Po‘±W¸ÉÃnA¤çµàÞQÿ›‡G%ÁyzÆÚJñÏo²Â÷o ¡“ÞyLÀ]we¡G™l¥¡žô‘:§·ž‹b£PÕÐû…+pUróÎÒ ­?Ü—,MßtªÖ+}|‹Hþ“jo[4­¬ez…mw“o +s‡Þ66Œh7*ù'”ùQ¢HÞGg_’[ QRWQuÀØ3p.¥{Ú¼QßY‘ç0þç7»0”°í’ÎlT9 k` FD^¥?>°öUkêjÖªüÑä“x̺¿oÖ=@’Ø1üØ‹B´ÈýþŸÇI»ä¢雟 +²e‡C¹Äg?ïž¹üárè{d°¼¿¹VÈÑÈ‘ýhËçw?gl÷ì ì‚0&RËÖ@Š«J!>õ‘C7´Ì””¸-ýßW@ø†ª1?zùº£1>ë öqßYkZ‹Âx$,6Ê»[t-=@b>ü»sgNÔî2PqÐ?_Ç]Ñ +•kd·8Ç&…"üH‰9(åÇauü)*tYyÎ|à˃¢g¹·¦©t#)* Éøb(&ݦ)*yF©˜¨ƒçǶÃÙž$Y’ÝÂÐ*¼Úƒë ´~y WÒuuèïGó,T˜¹à x¡Õ'“üÞ|À¨ÿššàpù´ùXsD=Mí +¿ Ÿ)*‚ŸÇ ûáÍੵ_‹ÁaÁxGf¸ æAtµ×œ ƒ˜sØøFåͱÄs¦`*›‡[÷§ÖX€Ä”e¼[´>ŸPwE~ì¢1M´ùPÝõ®H—m;Æ!ÙQÒäÙÑÈ? 2÷œ!d6ŸŠ*Ä`sÆ´Š³N2^* +Šj÷zZÒZ’«®¦$ýÈ}v˜N³?{p^ëCÑÚ·ð*}".aP›´:Ø×›ª:- ÛxÎÚ[r4ØhS—„f…T „fNy›}œZ*¸)*·C‰+\¬q8e€ ­à7Û#ü[—[PMÕâæÑü…‘þ…43O¯f™¾œ™ß„ +O'ˆØAðÈX©è«„þ©:bø”Þ·Õ”Ï~²Z’``⣑?_{ñ'm¯cóïÅÕ¸£!ØCê_À[ foa¬ðU¢ó®2ÔVÛ¯’ðj>{¶•ˆÏ©q@ïßž&7SÉ•V$˜“ü¤=@´¯¥°ý¤b«„÷¹ÿëóü¹Ñs“ +¼ß`U²»0äPœù8†Úô¥®õiÔÓ_¾º/R7p“Èûâ[ïO<¬oDW’ ÈP“}2^Ö>4ø9?kEiUj¿ˆ«yÃvI”º¸_ šBÚcÊFÄìi!,¿^ ØâfØÑ“®«¢^:p¢Êì[-á^7®=}Ñj´ R +E,çÝr “k¶{Í_æûͰ¾Qº“’ 6Î2Ð`/¢¸”ž`ŸÅ–CÜ·òTŒS ÅÌ)*†'süò@Ÿ›1†9ø¬¸ͨÁ˜BˆÕý¾³÷õq${ç?ñ"¡GA‰Ñ¤ÊzÄÜ\Á¦Ð“ö»žÀÈÿ ” }ë|2_lHÔ +p7Dzö‘>.À0þû¦®Û-0“zUîvïS’fH›²ÑFÇÝwS²I^-¬òÉ„- IíIÏø½)*&'É)*âþ=JI>(™ñ Å´©b=M%÷DµÕ—84'üIorëÉž¸Çµ¿•­"=}PÌM–¢ØxÒ' +£Ôþ,ç]q ­í§ÿ¸¦™¹w阥…ÕMåƒÓãš¡ƒª¨õ¼xfb —·dÖ.ÞM Ü×gO•xDm;?i|¤±ýÍ)*Ž“n©*Ù…ÑÉ£)*óߎ¬bØÒód1üÖLâ8šT“§~_q.÷OÚ¤Ý*·h¿Èív§â +—m-Ÿ¶8©4䵚ùn‚Hg•ÇûÎŽróÊ’·ãpöðàq^2;~„ZáÊÔkÍ‘c]Jè÷òBG´…§k’Õ5;^=J}äîv…>®¿–©T=@jTݺ0nµk ûHaKδȬh”`ݯãê}”`š€0r^×^ +¬Z ³ÓÞYXÄ…êƒiî›HÿEN4«Ê|.§Ï†Z]œh“!7ÐûÇwÊiîTÚéù½ÿ¤@ºlŠCÙ‘9{ ›>²MÄü\ÒŸ‹âL¿bï=@²€êÓÕ›‰~B;•V=MÙ±ÄNÈ)*ŸvĤ“oàgº¢n {ã{^‚`×j±U²Óúi9Œ`ã‹pªØÖØXMÂvÁæ—›’3 ù>CåyHßd.nŠûÊ…§o12GïDW«=}kê7MÏjˆRú^δO7çï +WHí“>°êS:|gßdþG‰ÏºW¨ÌþCªði4_Ë å¸·$†¤—³þ^ÀrcŠKÒÁoš¡gAËéz+YßGí(_ñ=M\(}› GiÒ'œU’Ÿ€ÙSòêû–Óæ?à”ʾ=J󻯿;ïb1;~S!zs+ +J¤ñ”»‰:(è.Iüs¹)*)*'ðÌè©"Ó¸iáiV i&}#éIÉÀ’¤¹„gyõ©‚ò×)*‘•,éŽæÿ fbðšûÌCŽÁf½{œßμP…{Ýô×\…-³[}RÓ»´Ö4ØýNt}èÈÅû.žçR)*ï¤H[ +¢& ÿÜŠŒäÍÈÖ¹Ý÷~NaζD~Ñà Ò=MÈ@Þ¸¡Öa»ùß‘ÉÐ⥛á¾Ý¼9¤cX¤&‰ ®Í9tõ—ªYÒÍŠBv°ùHД <…Ý\‘[´Å»–l?4È®ÀÂÓñR14îdPö+-=@Ð{×Ç‘¤ÜÚ³ÆrÄ€¿Ä…ý“Àt.x[„wCœ Ø xÎR0ç΢ã U =JQœ +·|:6=JÃ[^{B„__Ͱ$Î,•6'å¢QÁdðn÷;7,¢^…Í»•y‹Â³„õXwX¢ˆÝÐ4\bئã`@R{´íUÜÓ¾¥üs늎%ú*²ö=Mü·«*>lÓVå’ïáRsŒÈcg~ñ·$Y$eXá*i=@ +ä›ñÉX¸ÑÌ „/% jï ›½=MÜÈÅD¥$•=J_µü‡¢ÁÑH†ƒ=MPSÄ=@£‘^Y ÷D/Ú{K°êeŒ·-t¸*ïYnEL2Êê×1Ý  ^Þ¥p ;Ñœ­p°ÿ’—»¸“’—;ýß(=MqÑ +”„*_a½9’;v¥u™{“å“bÊQ*B­Lª;È’*q’ZLΖ̨’ú—^°÷ULL­—-Ä9Š>’–4ñ×WFпù^¸z²{ËäßÌ„'5µägVbRî~x£ G=}Ïix+X‡”8oûQÏåæ©Ð8ÇÒ3 +™Ô’Ø“Âó„Ó¼XXÍ'wúä̘ûge[(@š9=J”å½ÕEo3z¿é#w€ôúŠ€6;kQß+I iåüÑ(=JÝ)*!D´#)* Ñøb(&ݦ)*yF©˜¨ƒå§Aú$)*ráÑ…ÄÈß=@WÇ—Àa`ƒÛÑ€ +œ¸{³P,Ò¼rQí'íHÉEñN)*UЇx‰ã—)*C …°·¨ÉÓ£Ö¸ÛüV7ËÖ‰…=@X‘~zÖ®·ëšvó%O‹§`]¸õ(|™)*ô[ô_"IÎè«I}ž·WÇÿ_ ¤÷ÅÕÒÚ=}xHê«|¼÷¼ +’ì†\ k¸X¹¹Á3¾á)*¨õÿœ››Ü_މ̸ÁÔãÑçÑ„ùðïÇ5g¯…·¤õ=@þ†zrn‹ÓŒ0ý0r‡i ¥!ƒ)*‡ó&qOAü„ˆ¿©w ¤ºÿ=@•YØ…~«’4¡¸3-=@s5õþžâ›öÏ +é&ä¢d¶ãâÓÐÈɧ˜!ú€$ ¹%t ·jü?¨ô˜¢¨`)*(ѽ‘]ÉÝÄ8°ï\Á÷)*ý)*ñùXÝá¼=M‘³)*ÕÑ)*ûxßüÞבÐÚ‰rϘµ„å6Ñ*U<ï*À,t,5*2_ñíÀ=}ñóó\嵄h +µÕåÊþCÏÕdY;¯–á*㓃a0¯šX-Ú#èòVU“¸Â¸ÍÏŸGgá¥$Qß™îâoîhIÇ:Õk╲C9á3,³·¯Í_ÇQÓ)*E`áÎe*ä<3žàcõ>ä·Fð=MH€¯vëýóþÞ!ˆ¶@ +Î܃G·ù6ƒ88™½à)*åy”‰áâÓžï$™Ê¨éÕÿ’äÁ|=@Ù…Ý $7hذu€=Möä믫ö½ÂÌ‹\ ›F ѧÿŸ ñz`ƒý™{ÏKŸA{ÂL`®ºÏ¸ä(_Ù'It‘ü‘ÁOŦÕ$ÉË$¡Õ©Ý¤wÇ0åÖƒDuä‡b™,ᅳêÛOÂÜ­½«Me°óõÔ ÆáG… +=Mqd¨yÇœ£Y±¥ÑžˆÁÊÛú•©Ï¿§`Þ†âXU±7æÖ"¸ÿƒRxÿ{&L8iþe[ $)*© f$X؇)*üÉËþV ‰$h°=@Èêàwb¡UÐã—Ø\†|sKØZÁöŽ:>U)*³)*¹'©Éi +©û·ÿèÔGmGiýùûÞ ©‘þhΔ{ÉîaI˜keН{ª9ÁÆÞ ÷=@øˆhõµ˜hÁ ‰)*ÎÈßå §é%Y iéèU¨÷å A‘E!½(ia_Ö'uUÈ=M")*!Ç‘á#žó‰z†§…üÍ”Y•Ÿ6, +Þ0ÿ@+È*H‰möͱa¦Æc ‡—ÏÙ$ÅÓXÇ•k§^ìì‚ã¾5ºë&]ªˆ:U„àôàìÊL`Ox½gÜ$Ò'uÿä¯ï¨ÊàŸª•¡üõáí\c» (ù—DW–B²´¥Wݤþu —‡ÛÏÛ”íwÎÜÙ4f +U`ªÀN/ÚÆÃ¼×î„IÓ§YwWž˜‚‰8ÿ•´•îfiM¯M£VB·ôrTêÔ¿eÞ¤›¨ã¥ËŸeçl÷®æ^!Þ†º,ppb-B!¹´í!e™ Å=M±žüm'RŸè¿=@µÌ…ý°‡5M“Ø·oÿ †AA +!Š"—öäÛùZ>86©|â›éÝ$8%ùÔ©s§mÙIwÓÓ—ˆ ÈQƒ¤wÀâ~0äöjhUrÂ=J«öùQ§‡éƒ(X)*­íÊé&'iü´¨ºdÇÙÒhË ^àÖ$ u¶f0A€ŽMi—Aé=} _Ài +Òùc¹#•&^õËíF—é$Ñ©Î׈ÕÊ•$\‡@Èøàïâ—[:˜E/Â8.àÇ6**ê*JX(Ï ¯ñá %)*Ýfd8Їé'Qü©ÏX°^$Óž æ˜Ã ÷Ç‹ž!Xmߘ;˜Xìõ”N×ë¬l«Kä¢ +)*z ø™iA)*‰)*x¦$Xv˜ÚiŠ'WÞ¥Ød0³Ÿðµ-ÒÁ©FÚ «ƒ`&è<9Ýê]N¼œéÓs—©(÷„ãUˆ'Tb!$˜¹ç8­m£G„ïµ26!W†¥ªãwÅŠó²1*¼“ùþޱ'©Y=@% +õ(É!§©Õ+ý”¤§Ç[gt)*{W—ó'=JËÁií; È¥ù=@¨(gäýˆÉÏ'Æåáá6=@ó“IøãÛØó{çà1LØ}Ë9çe~œ…y^×û¤vW;B´·Îl÷嬀nÞí+òð¢Ô³ÏÏA0ˈ~öw•ïÀØœw÷dØÇÕÛ¤.—â£pÙ©±W=Má³÷¸Üü)*°nq¨U”Äßgø“{X‡rÔ…41×wµ¹b$Á{™{Õ +@V=}›°64éõé¯QwpµÁ¾˜cØX˜™Íàpºà*Í1üâ… ú·Ý>t-ì"ÍŠ¯ØSÔnß{“N@q;yÍæRò^j,ö© ÕTˆF =M,ÒêJQJ=M=@¬ûì´‹ 2ëcÍsè:´^¥J±¬1[wec—ºš + È’ÀëŽÕä¨ËØýYÀ-"…LàíÓù0C×ÍÛÓßÞÉ „ ×äØhxµáõ…sÒÛÓz—†0¥¡ÙuFåШ¢ Ö¢§ï|W0ßJ|Ìz`Ñ´€HííÑÙ-Š=@Í¿Í}m×”€Ñp‘¯ylA¯²Äe~•/æì”” ¬³ +DÃôØ$AáàtÉ}ÏD˜”W'Î8id~FÁàB>h sì˜<ãÄ^`/R.=}´/Y6|ú-™;|-‹Ñ9‹Ý­jY9Ú^®95Äg7±±f´9‹ -kfK·Hø4LN~3ž)*ý—õÁhÓüE¶„^2.Ãñ³œé+"Ï_$éI +ÉÀ™ÉhT¦=M¹ùõZ) +=yend size=126321 part=1 pcrc32=a9bd1150 diff --git a/nntp/n19.new b/nntp/n19.new new file mode 100644 index 0000000..fef62e3 --- /dev/null +++ b/nntp/n19.new @@ -0,0 +1,890 @@ +From: fadddams@addams.net (UnCLe FeStEr) +Sender: fadddams@addams.net +Newsgroups: alt.binaries.nospam.denim +Subject: Denim Shots 2. madyb021.jpg yEnc (1/1) +Reply-To: faddams@addams.net +X-Newsposter: YENC-POWER-POST Build 3 (Modified POWER-POST www.CosmicWolf.com) +Message-ID: <3ce91172_5@news.teranews.com> +Date: 20 May 2002 10:08:34 -0500 +Lines: 876 +X-Abuse-Report: Send abuse reports to abuse@teranews.com +Organization: http://www.TeraNews.com - FREE NNTP Access +Path: news02.optonline.net!news01.optonline.net!jfk3-feed1.news.algx.net!dca6-feed2.news.algx.net!allegiance!feed2.news.rcn.net!rcn!news.voicenet.com!yellow.newsread.com!bad-news.newsread.com!netaxs.com!newsread.com!newsfeed-east.nntpserver.com!nntpserver.com!reseller.nntpserver.com +Xref: news01.optonline.net alt.binaries.nospam.denim:159429 + + +=ybegin part=1 line=128 size=110227 name=madyb021.jpg +=ypart begin=1 end=110227 +))=J*:tpsp*++**+*+**)(*vp“–J¡œ“žž˜J¡“ž’JmzsmR|SJWJz’™ž™Ž¢Jm™œš™œ‹ž“™˜JR’žžšdYY¡¡¡Xš’™ž™Ž¢X™—S)*®*/-...-/...///01621111955 +36;9<<;9;;=}@FA=}>D?;;BKBDGGIII=}ALNLHNFHIH+///1018228H>;>HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)ê*;2.*-*-+;*,;+-;+) +î*ç**,-+++++*********,-./0+123:*+--,-0-/0,3-,.1,*+-.;\kl{M|‹1Œ›«»?N]œËÛmë2@^}¬¼Üû OÌì`nü AP~­+++++++++*********,-+ +../01;++*,+--,-0/-,0-+*,-KŒM[]k{‹?Nm›œ^«Ë0}»Ûû ¬¼Ì)*6-+*,;-;*i*ÞçÙ/.RK*|½>ž–wþ#ʪ¸êoGC#¯^¢.°¹fÿ]±Ò»¥.jóGúL¬]úM +«veˆ1r£¯v$ð G2jp¹1̬¼J:2/– ¶ËʆÎAx/î»…6{Æ{»z;Ÿö9ô×;FøËkAÛûEM#{™{+*¯G*´¬)*žsº¼)*ë´¿«?»P‡4‰Ÿ+m}KÚmŠ´ª³L 2Ó4r4ª³úKÊo.‚jL,E/N +¯u2·µ{s«¿ÕŒL(+C£¯WlÑfH£Ìu´VST¬ÑRL’âÊáÐ{¿¨Ëoj\ˆØÐRDvœí]‹ô•!Ü´ˆiöþd«wWFÑmwyðÒ›‚qbꇴR¡¡»ÅA7×¦È Fä‰ýÖž%Á_Hõ$ŸÅ{B +’Œ ;õf÷M.XN,v°qŒ¼`òB¯ÇÂÆ•yßûa“¥bDwG—Ž=Jm/ƒ}ñwPqVÍñÈ`U²Zµ1¦sa;¨žèÔÑow-rGˆÌè¿ÕF°Â´ºÍAšÈ˜^›ðföøì˜ ‘¦—½eøõ߇¤§dãýÑtÌgu +t4G=}t×T¬T´ñ¿¯ï‹@BxP‘œ3nÝbäˆç†Ó$žUzüo}ÿ3ÎǪB•‹¯­:³ï"Ž8œU¯ö!}Ñ|›ùˆÉÅz%K_—¦¤Ÿ~\muÓ?5›°K¡ÒBk²XEÁZ=}Ý?!἞ó' +‡Ö©—MÝïƒÔ{o_ŸZ“ÿ}kB=@p“ÄsFB‘6 ÃÃö‚ƒì ›åØyõdkJèÚ~Ÿ-7_gnyU÷]rëBÞO]eå-ÛˆZQޣˌø¿¡Î§?_7`tDt„½ÓÏÀdÌP­®\årWþî´`1˜ÁV¯óÂà +dz°ä‰Ùû÷BÕü.¡j¸G*¸—ÊmùÂsw.Ñlcqt~zl”!>ë~w,+=}+Oë´¯\…b2úSÊT‘qqêJ>/x—!çÌÊô2Ê®zo.,]¸0~úRR8RÄÊ´H’ª¸&,RKá]Ì £!o2iÄ>ž~ÍKlÈL’ +LêzjJ;h+>Ž4±ªjJ;Z;k@Žk?~,YwìJL \2'2´\Tµ'»\Ž_2._5¾Â3wL,uo-ÍRL^Ò2ǬXÒL`LYŠ«æºúåÒ¸9jζ°rϼS*ÂìróîªÃøøGÉ¥Øyxéxé´ä$ +²¸=}Â,3 FZë>[â0&ÊVöx¯óÄìöÜÉ™Ì'í@ÑÒ›°ŒÀ=}ºn°lTr‰¶øð⦑âÛˆvÉPõØž ˆÌé€þß4”´¤ôø^Ÿ.ñM>[ PºåhaAô“H—³Ðôç踥ÇËÔÕÑÀƒSÔ4 +¾,[ 6·¸Vö@ZA–—•ƒàwdŸx礟$ÈÐØØÐh?oq>BòtR8&`•oBÝ7]åeØhÇF§¤Ì¼sNÐD¾È*][5aSE*½Í9ýä$'‡$ßi=@‡™XY§8QAµïÚ›Yñ=Mf\ñ +µ÷·©U–ã×ÕÐäÈÆuƒÐ@BprMºm=}£.ò‡ÜŒºµîe]Ýg½Ékþ•pÈb„Š"›>WUýîâ>™Eµó¸˜b=}µ]çÃוŒç踥²ÕÒÀ¼DlRð2׊´2 ÷Öî˜,øŽö‘U厈 +¡rýÙÿ‡¤'ƒ‡È„£¼çwµ {x¤THÌJLìL¬øçïš\Ç>†|GúôÆ4 6Ó‹,=M¼]\E.’:`i%{9{5g¾A}Ûžxî~ÔdRJ;Z†zͤ~R¤z\>*›o¶{*o*³úL¬<žˆ«::dàž™xUPú;^®ä +Ô:KÒo®,\®¢ØUŽ´À:2ÉÂo?;Úo—2ºª|ç,Î.~¢Aú¸ænG2W1²ÚÏô4Ç2·lVJN4°«*ÍAþ×M>zï<2{ô­L=JJ~roRÕ£ÊM±q^úL +è+F2.wm~žô ¡l¬Ð³;+*¸n.’{Mb\>:úR’Ÿ“ª´4’48Ì*Ò2ùŠ·,P6¯.znï>©ÌRÕd0YXÑ‹äb;ò2׬Þž’><:dÚË!~P¼£”Ý1ZUfô´ +þKÎ.5jòç,L¬+@>Ñ=J?L,Uе2´2?4­L¨pÐo{~Ü5Þuøÿçnzo®h+7V²G,J;ù*¸º»òddn1`r+!©Ô]Ô">ætËéƒ>Á:jï?+GprCrÒØ:?JLRSÏj~Ô4‹iZÓâØC›e‚ +}nC`–{Nû^fn¾ÂZ´Ð­>jY4]".•0ê{êL­ÿZáÂ4ÔxHØ þ’ÚÓ^:ÊÑoA?ln,]Ê´'ï>–sl úUzzG*¯’?«j?ЬUÒ6³úüL¬ÑlcÚt`4‹ýÏ+z;›z^Â4Ä/º{G-M¾;û +qh1ƒít5jJž,Ä,ÊMc>^4ú;\¯/“úLµ´Qˆ0}súT’>;Ê€É]ÖÒ5mjË„®m•»ô­ ^xù~RôêÊ2.xë2Ê´º³ªãÌ´)*ŸJ,äǶ°,oAÃ3\?/n˜~>ÛØ’ÂFõo{¾->NKM¿G# +;ô=J†{_0oo.A#z n®f,+@~oCœ¿+ŸüÊ;Á52üJMËFª¸¶œj£LHÌ2fÌÞT]#µ´U;+D®rqRMÏM¿-þ¸ÔXìÊTž¤,Z";G´dd>e:?ÝXRÞ².RŒ¸®z}r#®°ñ}Ü,û‹:;‘p +©*´ª}3T`2jòÚªn/†Xd;‹=}:;k=}:žRRxëD.8å*t‘o8~L¼KoLÎ3Xkp‡_2Ã~J4R;_k,¹[JÔt{»Z;ü¼cÓºª·fMš¶ Ùj¸®zRÝMÄ.RK>;û´cz‹¸ç}xj~–>ýÑ~/ed?c+?:>í°~¯½:A9\ + ¸¶{ø0>’;Z–¾PÓáleÚzʲ4=@>;0n?Òô=}›ËÐ,°ß=JŽšLŠLßR"º\°ë’>¯=}ÖB~RL”,R<+=}Êoq*κҺ³Ù]ÌàLT¬]mÌàJnyê;KAÊnzjµä;k›¤.œ,e†û+Ÿ‹,X}ºA†",F»Ê>?æþ;Z;‹*ÐFúÊÓî².žJ[#{kGLž2 ü†2Ú¸~.ШF,TJSÐñ~ªµ2Â\E.šM¿+?Ú;‡ÿêâÝÍJ´2Ü:&èù +Š,M o–™_3¸9䨎n²Ò4>;d˜?Ñj´«»ozÉ]KÐ …«må>ÅCkЫ=}ÊY4^XoÖ\°©ÖLÒM«@:ÍËNl¸«:2E+n~^dTlW,²¤«:dT2³2zll++²ËÓs-J?»kj†z2Ú²Âo®^2A¿ +=}y:2ç¸Ï «?b;ò2qK,µ¬Ìž2Ôå6’TP¡SKà°núo’Ž`XRy]A¯D”1ìåÜ^ªÌ»+}tHIæ³=J}xo/týªmËÊp«Cúl¬PRÌRÞ´‹5´Ñ6T  Íª;~Ì ƒ»A±•L¦6¯G=}Êmаùfû +}F2ÝÊ;ºpÏjòø¶°ëlÊÒ ¿ÖÌt+n‹€“Î’>Fñ³9]ŠRšTR`LžB´Uˆ+œ¾A}‹°êºÉ,ºÌ¸³êL¬QŠ´£ kVM:¸’n“Ûûˆ.nóúJÊ:2Ǭß/»Úïz†s-LÞ2?:†zÒ\+ +@:2.žKÊj²ª¯zo?ÊÉôË‘j²×Þ€TbŽ¿.,VNÜR¸ë±ìÐÇBÔœÊMÑqh+G2.œK=Jq9¸lHˆÔŠŠõ?tÊhIÔb»*¸’;„AÃF\cÚï?kF2GGªÐ¾?\2ʵ4‹^žÏ/sʸ.‚n.œ6Êú +ÔC*¶2ú2Ò‘ÊÍÏ> <Í«F";?öLž5ÞúX]²dUŠ´2Â2–;k*³öLß2Â2ÊÖL®ûúúKÊl2´d<:PNµ2znújJ;Š{+*´Ê³¼¼>Ž_2MO“úô?K7¬V²³2áÂ4LÈÌ 2jqlL¬W{…42É*åÛo +ïšÒ\UЏ+o/|AF­Ììckv?D/sÚ´MÑo®jjJi1JŒÓýÌòªñ¿C;Ê}3úo/x.¡jÊýmÕšJ;ªËk‚;0}ÜôÒ\QlºÒvC?Ú€=Jz6¿ÖJ:B¿ú=}>»on?â>V;=}1o¢.fìÚL, +±£®RLÎJ:2Òª¶¬XlE.RJAJ5núo/¶ÕíÃ?ÎL”¬ß/*lJâÊ–{ŠoFÌÁ³GFò­Lìc/qlLlE/•4*°²ó;ÒñoçmâjJÒ¶Ü#?â2{E’‰ow˜–o75q6µŒ³Ôd>;_êLìtS,µ¤«ûOïF +r´úÒ¾ìpTÁk>\pe.“+=}Ûûz;k:;H9nKL?o.Jò×lPÒRv>?䎡˜‹3\>;Z>^XT&7²Ò’†£Á‹0ï›÷¬ÝŠËz;íÍÚll¸¯=}?“­Ìà4=}+?Úo”;^;k*°ë=}ÑZÖL¬®ëÿÔÒ´=} +Êo.H£Ê*³úLÏÄÞþgzÊ«cz´4ý2ÊÊÊr+oo/“Í!æt?pn¶{Ÿ„.œ¬:;dÍõ»-Lì+,¼,ªKÍîn®„ÌZ̲ÕÑ6´S¦ò²Í4D¶uN_2ÝÌMöR/˜®Ž;„Ç?Únû›pó;¸Ï?dEC^“m?xE+j +ÒGF«'»ú¸n.žLìJJžêKfô2k»Ë›}Ü6ÐÀ@¶ \^4=}/ñ»ƒ02ólµ³UÛ»z;úË ªo/ÐʃÊíûFÂñ¿Dg†®/úMÉ*×Êzª¸–+€ûPÊK>>:;k7Þ2ù‘â$»„C=}Êp®nùZ´¸™Z>x¹žš +XVJ:ʰË@:£ªÍRB4SE/‹>+7b/ŽjKƒëz*Ü„e†JRœ´rÔ%6®.v¿@:2Ô5¾²5Ø®,+*´¯?™PíüÙm{z׬Q˜‹7¸®;@ž;θ}îJžxùfÿT¸®AšMÞ;ú¸’Ÿdd?VJ;ºqŠLÒ +Ǭ°«…d2jòÚË·4=@>+G2Õ`4>º¤':/HM¼2#»Ç6 ^BØUêŒ×m?3Ù*´dQj´2ªµ2Â2jofêz¤¸&,á8ËZnznëÿÔµ´ùŽü¬ß/Èð·f8×Z>UŠ°Î€/22çb.NKÚ€/3ª´2/“Ê +ˉ“:ÊRÚ²ÊãÚfjµYÓ;?Êó?>Ž;o†­È+žÊ¸®,D.œJMÔbÕ‹j¨~v.R‹Žj>rqŠĪ´Ø1q,Äk›Pô®´Å/6=Já%´ôÍAö¸®œ¬;‰¢)*ÏwPÊÅ.mùNHÌLÈ$>TJô2.žèl«¾e +z‘êKêL”¡¬ÁT¯oj;‡Ñ+œØVìh?– c«qwªÒˆÐË=JÅFÌ<'~Ô:=M)*<шX|H=M¹³Ÿd’=}+…jÝd/ýöLß2zjU8Ë^;ìUmÒê´þî²ZR…îwG„ÎRRU,+j;^;kCúp®€£¯+úLàš +>T,ß/*mгÙaÈ”ÿÓokQo»„¨+‘ÝįúLì+„,¬lÝzËz~xë*®Á#º\°Ë‘Ô ªÖ{Y4àJz2·lIZÐGdÑ¢.Ì£®^3SÑÍÁÐÇrâ/A?´=J[†žò.šÿ ¦Òø°,пj¤Tx³;ú³2â¸+F2´ +5bƒ§5oëLJR‚€ø¬d†~c=J‹#Á”²¸/Y<Ïk®~UгüKßçË+>’æHV¨´TÞN9aÕÑTL÷íñÅ9AoHÂÞOÁÕÔÒô¼¼l¹³`pÐHeYkªÔ7HÕpë=}yhà¤çoÇFÄMËlòª€­ÍÚ +ÃkÍÿ÷?>Az?ÖL,VLŠRz€Ä4F2ä2Â2Ô2Ç,ÝnŽÊ#΀×lQê´Djn;d.z€/55Ú´ÌXY®nzjUˆªær.jzÚ×+‘Üì~~,Þ~/4¹*¸ÒÀbՋЫOúªjŸX¢fõÃ9^²Ç4H?^ÇâC|Ô¬P¬`BÒ‘Û›lÍîÕžòöR~>ÑŒRî{ô44H>žœ¼V40H²NmöÛ3AR{q¬’J¼l ðCdùX‡2ïöÿ{ñ5ñ B"î÷ ’$å`“yP¢¶jLhŽ™÷$YÁˆÏ +™ÏµÛ²V?ýð)*Bâ©?éÉ=M—é=JNÔ<­ë9 UµèáÅi@Ùw}/qR"ñó§–G†hˆ¨ø=JìH|ATØ=Mã =}µß!Ã]•i0H˜–‡ï¦fçŒ=MpÀÉ{?‘e#«Q ô¡¯Ì®®h‹§Øé + ­ôl=Môu–#ä¹äÖr³Ê®˜?ÐÒR€ëƒÛ›nŽ^zzúõÄ]üìúKÚ}ÍyaÈ”ÃÅìzÙ-U`SR€=J¿Ð¶°«l¬Þúƒì¬ú2o/*nû?ÕêRHË>7¬ÚJn,D¯*llE.4uº+?úô=@~n¯3ª×Ø +ïjôF¬ Rß‹nSÍÍÎnÇS2úMb=JOw¼X;€;û´0;q Iaq,e:žJS´TH9oïN€ñw5¹ö·h¤Nnêl´³þLöËò2€XR«´RMĘ:ªˆ>ž4VRx«…°êzH”G­oW“¼ÿwF›«½Áa +õõ½h¹xVEÐWfžçi±QWs¸|i%à#åå§–GÖb§„Ú6°Æ,b±¿½‰Âù¹å­1.ZGf/Ocm¶§‘ºWIƒ™—Þä–RõR”åm6°fæbLöW#YV€Ç‚ébìO;m_c¸fr³ (QAˆ&; +'`€‰$ó‡›Öò/=Jap(Õ™5=JðÛ™U_ó”Ò 3µ¬&[cÄi¡—¯•½gV‚ÌF÷q—T† Ê2‹®c†‘£IŸ=JEçÝ̵œÒÂtÒK ì=M"ÙX†A7 ‰„òŸ7Iéq(IV"%e‰Oæ#æÿ;AÍ9 +uþòÐTCÏ Fnl ™ÃçÙÝVH¨Û¶÷Ö›%ìˆA‰Øë¥ûå#e™\f¾?Ô,±,VLžXTþŽ‘ÛkDNzMï…d\°¯ï…b\^4-U‘ˆ‹lÊÔôXR¦6Ê­Læô³Ê×kk{ähÓ:4,L‹lÈ̬+„ÒÈXŽ +vÇ,‚î» =@Ž‘R´^´\QŒ r »á2 ›}xnC|õö³\Ä,Ïî9<¯Bo +ŽŸ_y[)*³DEI|P6b=Jƒ:ßmrŸ}I!ùeçIu1•åæü"^Ô+ÔJô+»&ÁïóÈ Kõ í}¼ÉRn¬”­`#…Ì#cèÀ6‰añ%‡RÒm!£¢üÉÅ)*¶ å¥Æ6/H~šrUP®¦,a0 +Ü!ð2&=}ÝØÌ%^ÿNBõ㚣‚îwƒüaèÕu»s@"ñ#Íg;ÿ az;½T†‰°=M=J¨¹è{td~fÜn¦ì&=@p¨ýŸ~¿žfjõÁQ©Õ#¨rü˵Cu8kVj£…ÇäåÙyw?>'s ŠQ`¹ +yGqR€’ÛÃàHQæ­'Á÷ñH“¦ ]=@T8ɃÒÔÑÁ;=M3-·ØXeYXr#ç¢É€üM=@ž22ê0‚#‘+µ%Ù×çÁÍ $Ñ‘êYiYk=}kF£ö×âgz’?â>e0mj´2ÇÞ2ÒʳÉ,Õ{¾/€Â\IZ°«FYÓ +@+z4ô2.,ù—,†zþõÚÄÌX^ª¯.‘†JL¬ÚR‚‡ôL +„Œ¬VŒT>ˆ“FâÒpЀöMÅ.ˆëmº~K{…dʳúL¨‹?ˆ‹=}Úo®,M}ÌÒóX.”–/:1Ìeá.²=J}ͺc¿Dƒ®zª¸¯*ï‚:I£FÊËÊnú +K€¦,]þR–;ÈÆêÌÞdcH.Ìø³±­ûFZdV¢É+kËÏý=@B²°)*'èq¡=J$‡Ù•!åTBÒÞ$Ù«T ;À‚î©°ùû Q?#õçèÆy/·ŒäGisÒ=@Õµ=Jêi6¨èw#äù`‡HÆ;çèMwxÞžt +Ç’“x—m~ÙGh¾iðf)*YÅBç$„“=J¥I ƒƒ‡%mÞ¡³ÐQa¬eÝ5e#Ù×Ùy6”±ÞX÷ûÞíumn>2=M²¯Ünß°±Il]Jü .ŸQ I6«Áúºd@ÉzMîÑuPï@ %ot3Ìô:+œV +Éeg=@›v¦¡€%fÕD«ÊË:MÈk³é,§!ùÔ^§¸dgKb©x¸;‰õ¾H ÿ­°cI¿G”{×TÖâÆøp0Fp¨àܨHWÞ€¹â§²”ÍxlOð-F©Å$Ùù¦CÄ!=}æaTUJ°ètcèC¶¹°‡3æ +ɉÓ'tfW#¨Û#왉¨•¡ñÒ»’ÊË+@;Ç.JâÍmXj†jrC*ªmz׋‘r5jKKl¨‹>:4É=@~o˜;kkK*³ª°®€ÔʪzÄUzn=@ l(.oGœ;n„e2=Jó*rÚ²4, ´ÍŒãá,JÎUÕ\Os…4 +2ÉšMËG²2¢.žMºž.šòB¤MºG¢g:r³HN0N¼ðoÂI²*)*³Q(Aµã'ß$GØWMŸdhù6^Ħ_Âsͦ©Euv‚Þ’^t;¸X^«ø¦)*ôùûÁØpú¹=}íõ´ÞNB㣻>½¯ô¸Í +Rñþ´ÈVÛzàw¦Lzs)*<ózðÂ^½~X‘Àüaô(Í©õò~Ü(ü´â¥?…yΜþ=JP(=}` …w$(–›Œ¨uÀ„Ã_CËÒö‰óµý—Á=@dqt°?qéûœÑ´àsf[né ¡ç©öç=J$q”’pÜ ++ֱĂ2¡#Í âåT¦ùú^Ì {¹[½"äÙú$iŸé1ì6D¯Ö ±õ\ú4*³¬'L*ËÛãz̹o6{_jo2\Qj´ÌTùÂoCj‹º4@;¿.|\€Cj?Ð,¯.,ÚJn,¬RXúA4ÌU8Ê2o;AÚnro¬>0fõ +åJÙ!GŽ€ïLjôû>WÈ×°ûãûúÐC/wh+7,d>ý½ön¬¬{3ÿUj³ÍÍÏñ¿@»:[n”<k22—+4ž’:QTÖ’©üâÛä±’Uw.žfê~VŠUå]²¤ÓúÊ5¾áÌSë{5zn ²ŽŽh?#¸!è ®h‘ +ø°ÁvD0¿ Ž=JÀËzc}Û©° ]Ù½ñ¥g% %°·v&|ÓY·ƒ_"‘X=M!·(É)*Ï‚ÏØt† Ãmx†rÌâp)*N‘Ÿ_…"BÛ\žW]çwÓ1bÀlå9ŽÂûÖ×k«Ñ=J¹Í»(‘è·D{j +l-íí¿“ÍgÀJ«ƒŸO{2Ô‚Bý€¥>®çSÒ°k$ÖÓÎ|F¨W¤ÆŒz>&ÉÔø±iØmFÿüñªï*³iÚ¬|æK½Öl|8oÜ=M†{ë#Íj¤gnŸtz o"¶e™èñÎõBáíæ©Qƒ(·FseU +Òù]ï=Ml¤×;<¤ø»)*øðØ%c§Ý]¿‘‘‹¼y !–Y&ÙÝYY•=JõfN,2ˆc²­¯SŒ— ùˆ&C'Å=J÷µ¢‚K®ä´'ØTIÃóêâ׃ꆭXÒãL¨0ÀT=}>\ó¡lÒ3TvCD.yêãAä +RÒ4ˆNw{¿ÒèOÆ*〪ñ»kF6Ö2”>+ƒr(ŽwC>;^;kj?åö²=J}Úl~–Ÿ8&H¢ãMó,´ªUT,P,T¬¯¬N5)*ó„+KÒïDÈó|Ì`4ϹÂo®,Ç*Ó÷¬Ä`dÔž9³x¸•&ô¾ž‘ql¶¸+qŠ^£ªØ|žˆË­íó»ÁyäuÈÏ üI©ýåhEÒ/^QW{10ºœÒœr'M#% yW&AQ£Ÿt&ÎùÅ+ ˜¬ôÛp&&bû‰ÞäÖžKO.NG +{‹Ò¼ièt ¬ÚŒ#ØÇ.»ïQE+<A#m)*Sµ@¹w|ï“^Ô‚1wËÀ”³LŒ‹ŸÏ\²#Ä8ú{üëB¿W©2æðÉùÅ…ô˜þ’ï([äL› ÜgÕàÿ7¦=}h[õäÒ×îænà‘Ròs>|F¾Tz¾ +•O–cpa pFmó ¶fáuíÀÈâ}Tx6Fs5œVÇ&ó(Ó:Á‰¶Ã©öбò¨^øQÂqV5ÔŠ×eäQÉ/ÉÛÇNÞî“=M cÈ‘&r–Uó!åàˆÛDmßZñ>»"mº¯è¨Õx÷=J•=JD£ÑX +’²Û …ù5¢’–J¾Aï¹À)*]\%H½ †‰Ý™1§%öÁÍëRÎ×Éê9³?Ëãœï7«Ufê"~RÎiÊ‹O–=JR’[nêoznþjK#Ò2ÌŒ1ƒìª×*ËŠÜmjײq’LÔâ?*Ê4ý+k=J?ÒJ|l^¢ªz”? +»FìÂ`£!æÿVÒÉ«û:k>zn;Îjp¥/4.å+uìÒ-¸TDÔXí÷k|ŒH2Ë9{ЫF3s¥ô¸"CDC=}z;íÍç¢g>šìµ\PJ4QŠ®kŸžX+FúMË*¸;klŠUzp¥/4úUzzª×÷^4DOªrÉÁþ‚ݦø$ +±ŸBK¥=@Ò³®“L ÿC^ZŽi i'Á=Mç ›$—§â‰ÿâ>¦7XÂÐÊX¡GÌÏ&n)*¬õY8 éhÔðéuwNÔÕO°dq@ ž¯Éß´"_ áài“pâ=MÿÀ“®ã 3à Iö´DýØÏûtÌx`Ë +Só¹^š¸êX(Ñ„÷çkswq:ñu:p-¹„L¼y³+›L §=}ŽuA†ûT m*6â(‰ÄøÕ "Øúúl›ÿ|²ýÃc‚ŽœLcØ­Ö¢2£s—йɾ±¦~ç´z<ÇF¶Ô_ë¹°h]™Ÿ¸t¤›ÜŒª]=Ms ;î +AÅÑŽ_z¾ìmÁÒûØöÄÂ1I,įobIß”<ÅÛ$¹X‚ðN÷Ü$'\žIÅmݾmuÍúü)*6Êζ–hùŸ$$$‘ÇÓ.G=@+½ìc/)*6Aé>’ϧ¨Y'pk#¯²©o×#æØ˜ÙFŒcŒÜóA`æ +{æ`J[¼K½‰å%¡¨åëÐŽ­öçùP6³ªi\ß’[n@¥U=J@°ú[nî.“kmg,à«=}-÷?J¾JU‚nêO4,×e.zll+kÛzÔ4ýÚl¬¯”:4ýË>TlÝöKà«32”n_CKQo®k[O4ª³þAÏ9[äßÁþ² +..ˤTU£ìe+wQŠÓ‹1Â4òÒrÌ44ÀŽœÊMÓºRMÈl6FÒÚ>œHÍËxøqÂtJTžJ:2zqlWÒz¤Ðº=}‘^4Ä.‘+lÞ£ªØ—ËÍw¶ ©äFj¨Ÿ"¸!h#Ó$ù@Âþ[ómÍ(û-ôÎÍ¢Ó)* +¤™ã¨væ{%b“Á Á̯F›6ý~¢ËÐHY{ö)*ƒ"g™­Ç—‰‘Çoõ³Ê“]b[ß$(•¥‡[ÈÉT—$õ`½t:ñ6lX{Àw³ÓŒW=@¶þ)*’w÷2œÍw7?§v‘%ñ±Ö¹“×wV}nN +Oôt˯šSyZ¼Ôf­z\o ~¥„{ŠXT)*Nÿ\ý|ï»A å6ŒXõþ6s°M:<› ˆ6æ y>8hÔèÔÈÕ³x1`oâ¨Hvܲ™uº”­Jp>|ÉÖN1‘zY;®«õ÷¹oÄËõ ü¹ç ™{±«"Ü +¤›_¤fκ±¿õo=}–§†õñ?ë¸k„‹¹qѼhÝ=JY#pöçÿ=Jc’²¬ÀÒ§LJ)*½Ÿvß÷<ñ\ËÒ °yHP ­ÖåÂ=JÒ‘ \éçkN\¢ W_!)*(©R¦Éƒëž®cY=@éck924ùZ¾Â4? +kƒÊlJKk22ÊÊü,+ŠTûe/n.zj<ªJ?¾>+AÚn/“ú´’´35=JAFþU_2–>/?s1ÌDNqt4“òδÇ2GFª·,]ʸ. +{ûòLb+qž¤·,[þL<±œg€=Jo¯*m~»Po ¹Ã±çõm ÿ·eüüñ=Mư µçÅ%Ùî}‚æGpÛ)*Ñü|ü¹]ýñ²©e)*x„[q÷ð'Ï”ï¹Ý±'΋#Î`Úá?¢Í½ý÷¿ =} +%i²pÌYõ þåsØ#YÏÙ㽡ÑQ"h¹}fžÞüœŒ"ߣ Èü !ÝÄgkm…ÒÕµ"ž"É­¹ÄM 8ž¨ÿ•pàÀGiÛ„j€ògÿäs` ¥q‘©ë“‡ÝÉ´¹ããÎ'Ò?>þŸ„ÇhÕÍ/on¾×{ +}-æG aÛnp<™`ˆvçíâeÒáúÞ7‚N²ÔK=J÷6ærøæ9xsˉˆ]yy6iXpý~ìKŒTì¶©'õPäM½‚K<ñÙä=@¥:Ñ?~¶'£­ùO[çÆKß?60<‹³YyÞìÜ´‚ËÍ\T¢ª†µ¡HÎÍêØ• +?¾¿a0ÌJJXÖߨ–LÞš¤È½`¯îÔýòK8‘±eæ³[|dý¸åwL<Èhq&ƒ£Üaïx©ÝC~hÄ{oX¼Œ)*ã\ ]e7v¢¿ËÂ雩P7)*Ü "è©øÆ³to?oV‰Á™Õ\ùg~l³B³ýñaZ +y+j#¥’÷í|@Á#Suì©!Þœ%Gð¥Ýl‰%ÁC¨T¶×Èë?K*ª€Ç¬¯—â+#z4ýHÈ44ý;Êzʳ«¹\UêUxë‘ܬûe,õúÐ45¯AÃۻk*«~+@;Àî€ÊÊ´ÚÖ2Ç,¯.‚n.`4ò¬KÓþ +Ÿ‰:2›à˜e¨xäoh™‰ qÎí]þ’“cŽüq‘ñäû…V +yË ´Ì”£_W€ÄÈ”‚b;þ“ÌrW¥Ûˆ!™QŸÈ•ŒçÉŽ$g/W?i“UÕÒŸþxÈšS.Ρåå'æÐ©+±=JSåew‡L=@RýLô’SOì37'p56Æ¡ÙA=Mq‹0ÃfMÀF™tÞxú͈ +œì"ÁTŽ•6ä³rjçXÚеD/›H^ÇŽVÉùèVÖU@,=@ÎØh|b H€!Yû“à Ì,Þ>TJ¢Ð5 osº4*«zLžLÝqÂ4Â}ÿmö/kÛۀᲹZ®¯*€–+jÒrzz„¦=}>†À”þò”?´rªªq`dD;Fd+SòRMÐpÓ{9jºrª>pñojq,RJÃFβ–;ú +ªjLò³²d±,VU2²d+lÄAW¦b° ƒe(EÙô¤À‡$Ixïëü’o=JÓØw훹)*Á‰Qí‘üئ@Þ»´ÀT´¹!l:5§!'‡L^€ˆ¡Í³ÖO‡Ù”¤çq[ÿÃé­=MB)*oØ1á‡KŒNçžøK^Šì +SQÞƒ“Ëèo@ˆ®t<ÑI)*ᮨÏÿo”ÍRùc!¢¤ãŒõ‹qÞGàÉ‹“ ±ˆþ%ÓÁUâîCiŦ¾=Mé×=Jå·ð¹Öz¤oW—>Úÿ}þp\ëV§N1áèÙ/‹ô0dö®†c5-îé¿æA÷&FÞ +#‰±FÕAÔ‚$þÿ>fD7v$ÂõZf],™[›ƒöÞd»¤‘ŒŸ8ú9•’ô¤†K¸¼wbFN¼qÚµça#Á=@ïµ8Èy¿Áã÷èÄâÍ%uHÂ¤í ­kˤg<Ô4—m~üì’JcƒVaæÁ%èI_§¥eðùAÒïÑHú +ý”¾íƒo†?žæñúÁ÷æ¡iÁü¶ååxóoƒ10l;÷lÔ7ØqÁ8y†¦öæãDõÁY<±}õû~ð7b2‡£Ûl]ýÒÒ[Xø ¶²m2Ë÷)*G™µìVèœ"_›÷·–ÐÂbn˜hùUÚYI‚=My—m•á¹Ng +ÇÏ;ô’X ùGÀ篸Ya]Õpoy[¤n4)*uSÌG=@ÇÁ IŒ?%YmõèA'}A_Ï$1ñúÊÖ4*Ö£ªÌž¤ËÒ€õjËk‚:4:lo¶›€ùêMwl¬JKk=}ø*€k©o,ñü´ÍRxë,Õ,ªKk*ªlJUSH, +­ÿ5úKˆ‹:N`T<\jU,¯®joÓXí:ÙŽ¯ñ_2×È9nÑ`"/˜/6öU€ë>¹+zø>×xgP®Ô2\\*#ǦÙ|'Æi +$ÈÇ%ÇA ÀbS ÖVÔx-Èv§e]¨ŒÕ¨¸Mq{Îø/Î)*ïµáÿá¿¢Ux–$ ¹j°fèVÌV)*…;ePæD¦õâ0DkK9;©pÁÙ>g^ÌKù?‘5ú8"²K~Ûëp…Uÿêo»žooÜ’Ô,CÔ\-ÿ‘ +ˆ9xÅèa · ‡èýz=@|ÿïoÑ6iéþt¡¥ª#ç½ßÈeçÁÍÇûÜç»ý§T¸È´Æì-½¡º´ï)*]gxRä$ž¨˜%;ňÑp­ÒsV±[ñ€øxMå ²áù›½FU9™Ñä'U×{¿hÖz +¹ZõöõÄ›€å^Êòtc-¿›ßx©~û"[ò]}!ÔC¦c™ë©í÷v€¹_n…gÚH·qÒH×umƒ3÷¥÷F†’càóÂW‘Ý%YÏ"Øä’‹A¥ã×Hå'q:ók%tÍj‚TM†cæôøØÜp¢'w[ á·$1Û?Kñ¸Ô +À†Ë¾œ1$i¼#eg8í}hJ§ _À‹ÁB­…YvBÈOûé)*㋳Ȥ‚¯q Ü·˜Ú1 þq-éâ¬>¨ðÈVÆ%Áò%M+”>GÓ6h2óo3)*N™)*ï£ÙýIx¹§šŸé®åàÅt‡xÊ3)*2 ÷oìñ=} +ÇÖÐ";þ“ÌQ™ïÃk=JÞ"r“S)*'`ä'‘Ê'¹ù¤Ñë¨ÏÓÄSà¥/4ªÖúRv/”ÊÊ"/•#æH´C¬†¯¶/’¤´4*ÖÌJ>+*³ýšl´TÚòÓ{>XRûL«HRÄ\ß/0ìQаî†Ïz‡NXl’XÔr×g +¢,ƒëm?ü5¼I]X–þXÌJJÎ×+;H+@:¥´0q^úK2ïGÎê´\]ªRÄZ$¾üøÓEfH²üHÌŒcÇx·,ÐZ<¿k7,d;‹CêzúU4t:Ž,ßÁìËÇ£ÝDbÔÕŽÒ(7fƃEõÈç&“ágEë8½˜ä¤ +¨Yëhm&s¨¥@x™ç‚âeWdâ“NýY.ïÜ£Yvë¸ÅX´¤ö§ÑÏÎTºÒû¥=Jg‡RmCæ¸{½cE½Žb%¹¼$GÈÄfg‡žÐDgh¼w}Ýp^ž9Süšò=JlùŒ™ehgÕWp¹@VãÌ&Ç~‡ÆºÌ¸ÔÈ +ˆJtV¢sÝ· äVA›åxÈÑÑ5Gü¤|ðtIÙ€‚ØE(PY¸ƒjo‹w a‘þ;9YTÇÅnc\ÀܨO{wE#šõÜ=Mh!ëËÍûž¢íIU£[˜ÏC§àÕ.Ÿ¾B AI-´ˆšŠÙ˜F¾§ÉµßûÀÉw +qԚƔ&c_)*uÙiç§Gb“7´Ä"UߢN/í¡ô' {†ÉßÎDÍyôœKOmܼ4Œ¹ï÷AÂÎmT¯dç4¾œÄ¹íCž„Qw©ÇlXGo>aŒÀkž8¹qî’ b <(C?éßþþTSÏfŒz;§ÿÇW¹ +í=JDó£ù…ìIæíEA#Y^QiÆ[©üxæÞ¹Ü2ž"õCÏÒÍ-%ð&èÑ‘;¼¦è¥Û%+lçªNöŽ×Ô°ö…–w(• b§6è—Þrðwzªã¥ç=}±&œŒA)*¾¡h<ñ1­A†Á)*wTÒí¾ÓL+!Uƒw>Ò +#Þ”£h‹;‰Ò9aêy1Õy¯Ú€Ä4?K*åÜž5´2ǬRUNRH<Þ­ÿÆ>wü²5Ô2rï2ªÖ47lÚ<Ä5³XQŽ/0«?Òl¬U ËݪËkƒklžLUгÊׄ¯4¬Lžâ(²CAÊn.‰êJ~y_oïs2Ê­Üe +Û¾Ä3ÛÑ*Óý4\Zp¾»wPª´Ï¦t nG}td®?º:Ì$:ª2»÷¬Fìd;ò44?¿êR€ë=}Ú€úV wp(ût~ä.ü9ƒ›³É%Ùð)*6æ Ö’=J#×Gqÿ ÅY6)*‡ÁæIÍïEíDÜ¿nŸþ&Ðl +PP¥gÁÍ™ÅFwô ”þ\mS¶OI@¢Çì÷©ë¤£Ü²“}zý~€ýÿ/wkï±8CTN=J87õ’Ém€Ÿ¬Ipýåm~Jf’¬y$Yvû\$¡µÞDIæx>‰t ¤Mfh ˆð @ÛqÐ=}€l: +M£l{݇¡gqÝ€Šævh~„ïo^bïíòœaµÿ$ÙóyÔp& ãïíÔ0ÉwY5|4ô¡ñÁ¾Ž óå1Ó =@!ðUéáqÕz½³2õª+»£Y˜û”ÖG…^ÿð{³q[ºIÕ}|ê‡xÄGtºÍÔÑ3IHšº˜îÚ +Ò¢æ;šý“ÙBq*21¯¼;˜òtCÌ<:WÅóø;¾,ˆXÈóÌ'ÿ„²Û<;%Rлv§y2"œ ­ŒaÛÒûØ´\uõ¸ˆH¿{KS¨C©Tø¿VèðùCš¥ð-wyNœaû¬ ÿ‹³Áž=J( ±­ÝÄŸ{0\=@çm +¦å—$‡§3é™)*xQƒÐé|ü¹Y¤þnÆh=J]Y½hI!™v诨ÏZÀmº¹&ÖxÞ=J¯£1æ dCµÓ}p`&¼¦4ž¾©(Hýu¹&g-÷#ù~¢é„"«=}~>P,^ò;[øì;91ÌÜKIZݯ}øüÈ +ÕyÂo.,ª²G‚v›zÂH”ò4?:?Å/+s4\+*Ö´4@ôÚ„RJ;Žn/*j²9€Rä̼\­Mz²T/åLö´Ô~‡±¼ÒTRMË¡‘Œ¬=M±}ܬç¼ñ¦êÍÐH²´ZMÐL Z´QmÍËFn”(~öò}ù^K ¢; +Ê.‘0zúMGÈ£Íy­þxùfÿäGV|ï&Ï9‘’Vq³KE¨vé3_%‘'\^íYÁ"ÆÐLK<ŠHà•Y¿Ù1´Ÿ ‘$äÿdnêœGB<Ÿ•`=@ŸÒ\ŒýÅDvœs‰JÁZï0a(¶àÇ[ò^ãq +½üè½÷w²5Â{^N;KLV2qC}µ°Ñ×þˆ´°´Îž(V»þ‹Áñ÷Àc‘¢ûÛ‹µç6'ÌSåæ‹qzH-ݹõئI¨§ÉÅ„ÍvØÒýxÀàT“¬†Ý¹å Yó àYu¶úqÚ¾þËF¾œ><3óFæp +Y‘ê&ÁúÆ{I@…‰Õ%¡…!0Gj,”KX¤ÛáÜ‘Ö`â¥^µ§Ejþmz¬c4†Ïiö ÞÔ¦è0µÿžî[6­ôOÿÍì¹~l-F¯ >†dXxHƒ¢ÁÑ‘«ÁƒUµºÁÓ‹y¨RŒþIXM ‚ÛöqKH‰Ô¼¾Ž +ÒIƒ~\Í~~äO h<òGñÙ…Ù`ø¦ááÄá¨ÞÃíÐ3Ž‹$óÉ#YË&XÜZëE{oÑû÷ ÍμËñyÝY½³c†‡Žéߣ;¦œÑE㤎hӸѓZ^¤¸aŒÜí¾;©å³`ÈžásÑ)*" À +\)**n…‰Ñy=Mh1Ô¢G¨ß,P¦ø´U2ªm}ÌžqªÒg(ò/Žjzq*ÖÊÊ2*×e/4PU¾ø£¶|ÓѪ‡,P°t²4>:Ê®®4×d.€ËwVXMz«?«méZãÝÞoþ:YÓG#ÃFÒÚ«s?>{¬/£xÓL +Ø/ñ‹,¼É.²“öKzi%ž€°?dP=}TT*Ë0ïmw¶g?â*¸kúýj·,]Ê´ò=JjÒªlÕœºÒR¤?ä8’?º4#¯>äÍÖ“”ÿ~Ú÷õ9Ŧ"Ùzï(ÉÚ(ïä÷i{Ñ Ì[}ÉžÑAA¥2]#‰Ô + r h¹ß´Ç±73“Ý °;Å!´ÓKR#`ë!ˆÆ£§÷E§…Ü[>ÇxYBtk0¦†¤ŸáëHyÉÈÇÏaí&AÏЮ‚ ³mÀl{Á\Un*¾†ëéÄøÀóÙûI |«ÿð)*ÕVSï¿'ˆîZÌÄ’v¦C=}Å©Ÿ +÷E¨Up·HÅÒ¶‚þ~ìy·ãq™'õ“勇ö]_Øóu‡;[>f†[éO?Eá¹z±D^äÑÕ¼t£åºÁb8WùÑë! wht‡j¸ÔÀzº6„øTæ 4âŽüqíÅIxu1Õ‘jNŒT*®®SCLœC2SLÔãÃ?zo +“44£ôrg†¬»A³’Ä«ÁÑ÷l¶«{‹,»Efmzµ€„”í=JfU¸gtznkû~A ’>}i«¿d/w0H´ <4=M»„CGdcÝúq6Ëk‚zqSLQz·¬JMÅ.žMå?wP¬Ï•êÊ´\ÄkÁA:||~@Ê‘R®Íµ¢òsƤ¿äÙ +÷$Ñ—æ™9é(9Å'ÙmiÒ"\ÉŒN-•çéA‰=}1ƒµ'p9`±Ã>¾;^>Yâq,T²¶=JLÒ²ÚƒUpËlÒθ; +;k@;.o®n{3@³…÷2ú2*®£®v.ƒ»%*̨“»úR°oj;pšŸ8Ç„¬+F\bž”;+,LRÒªµ\+*²S<±”¯nÏ96±ÂîÉ?ñ4§8øF™•OÏÔËÄccÂò¶iI ‰­ùD… ÇÙaò Þ$ùŸ +“5w¢tT«Ab ³iÜ%gÖp¦©ÅÿÀ™E¡–O±Œµ|Ô´B”Š×b2$¢ƒï!&€'=J%ÄèÃ.=M±X[Ï«¸SÆŽX™™ïkç×k&y<ÞØ>ͳ9€õn¾fLµ<Þ·Ca,e O tï6!‘õwíµY +4~g›Á«Ï¨J&ÕTQ­Pè\Kîè—¾çâÀR›¹ ´]óPÒ¶šV爓s´ò‚¼g:ùÓh†š%õPíÖL½K<R”íÖœ(’·ÃŸ.oqÓáÜÐt$[qÏqtk½É¼±›]¸4f”ÎöŒÍ¹A!å`õÁÇÕÇâ8^D°Í +‰‰pfñÐqAYÓ²Ù(u #¤(ÝûÉ>¢R§ÈˆhIQYæ(ÕøÁëý „[ÑØÿ‹¶iµ…Ý©á’#çõìl^ší(o¨õý[š¨aèõ÷ %yÁh+4¢g>SLQöKÊo”?Ä’>Y=J;.€GkK4¬J:þURJO-þ… +ø’T<:B¿þ;êU+¢~P¬àË*ÊTJΫsAËÊRRKÜeÜ0jJnƒ\m̨ŽóFXrÒ®û ÂA÷˜´dVQ_2×,^5å[²,âÒtåÕÙkšZ"»òt¾znëûú´5äÎXRM¿„ClÊUf,RMd¬ÍÍü¸jqvË,á,±T +5lË^{®¹d´¥ù¡Uøò›ªÕÓx:K©°nøï—Ãé_ ›¦ Í%I@ð½g6ozl<É«ØV÷ä Cc’'FGi$Y »ÞúD/vªKÕ­Ge@ DUèiÂä$'ñyÖ¦É¬æh=M¤Øk‡9 +ÎãéÃ`x·2UèKsÁ´ÜŸ„¼¦Ü"æÑ ì‹F?FaX—&T`xz;A)*ðà_³[xo)*AÈö'Í;¹ÑÌÄÑP>;ùI@nÜ™^|b T¶6Æ©ÜPãÔßo–¿¿+{t;ý·âPO zýrû7rn‰Á×Î]”²°LY" +€yu@lzàW›9\´‹Üw@¼cÔâýœýëù]ÁÏOÇc',„·ˆèÑ|ÒÏb4±Ë!E퟽†@ß§h2‡l§}À¼¾†¶äƒá©%Pf‡¤$uÂé‘÷(öt$ð«Ô•q@gâpZ#Œ¶H÷#YqÒ§Z~‹õáõw[ÔÏ6 +c¡éŸ=M¤wš±sâôw†›Æ !]h¡†a§mï»AÕ&Á%†„mƒÕ¨“£Áß«[zN†Òx«Ÿk*ª€¢/8.5÷U1R‚Nofoæó1Ôú@žÚä:{E/.RJ>+‚5ìË‹*¬eÜLv¬\oçj¯Un® +SGjXòÜ»LHÌò±êäLkQKYžvRþ9Y:€w˹ˆŒK¹Ï”=@ +B8MÀuø×Â;7f¦øoÁ¹_}ŒÝn×ü}¿i<½±p-å'†(ÕÄTžw„r˲²jc¤4äœí‰Gºý%A9h!Ô÷ñÒFé±5g© O… Ù£åôý5·Sz 8ÈÆm=}B†écI©èaÓ!e +Ñ@YŒPA^¢åçC9"ŒlI£Ɉ Æþå1ÑšJó=M)*_$Ypëç&Ô¡†^¡lLé‡:&è÷´Úõ¾/úK:2.,Þêzʳ®¨’Ôr³²×¬+‚>T2nã3,äÇ,UŠªj<+‚>;+.Ž«º¼¼?„flR².ƒ5Ô +9XòfqlLÊÃLA>zp|†¾tÒUr|ÜWƒ–;Èù1Ì;3;….žJec=J??pH²¢B;Ž; +¼/l«K…ÁÃ2ªµ2Kèo´+*¸k{K7tr{ÁSzA€|€{»‹<;k<;¶´Y³=}¼(¾~B¦bͰ>œfü9nw}þƒþú?cpmЏ®¡Š´CL,VL,e/#unŽ’>íd3nMO^Ò¦ßg¬¬ÌÔt]æìÁ"Ì sêXM AôÝ’|¹I {lÖÃ3V”œ~sI[,÷ÓpÜyA®spì‹ÒYsN|=@ÊÔUŸ€·uOpM¼6äÔÆœºµÁOQ‘E-=M ¥{À“åç^žñ#Äu6 +§¤óø‰Å¥? ¯× „â´²"þŽd©Y‘‰ÔgeH£"‚g‰Xf߇Ï!D‰ßD4Z‰ä=@6èâ"›¦4뢢imèmáGÚÁƒ²=M:ÚŒzíxÌÜÖ‚ çñYŠ?ÏJ"§™dØ%Ø»Õr 9Ü“^MG. +Ÿ=}0bê ]#Ù¹¬¡¦㡞?I¡ªÎºhSÀy"Ÿ‰ÜÈvYô$°§`J<;¦õîh‘÷\á,eSM°lʵ¾­Xå?åþ€ïN¡Ã»÷µõmU,®úo;Cêp«‚+n–~;-;†Ï~8™tÝî,9i!S~AOÔ 43 +SLõ nfmz«5NçrÇl.jX|ò¿+rÁzUTÎMó?:G5¾—ʇ,à>;¾k •ʆMöKp}Ûk{mI¿F`iÔ0.{®»÷¼Í«>Ÿec†ìÍCNÌ´P±ÓwThí¢d:H?8Ê€jn;‰,´¯C ½ÛbÇWˆlY: +?ÖlÇs=@>n>&Š!Sq9÷¢\ïç"Üîb=@(ùüÒ˧`=}I*}EF®?%²'yåæ"žÎœw^ãt¡ï =MAy%ˆ8˜Øc4Ìbr£U(u=MgM™‘›I)*³qíÔVÆ®fb/ +éUÙX•äZÒû$BŒƒåOR¨Ph¿8Yk1=}Ã…ÅW¡8JÖä°weƒ~U‘þïÁRVEo]ýNY4°è ÆÄ‹¦ÅÖŸäÔ~œ9͆ú3qN™Á³›Ôæ½òfâ˜ÑŽT¿GxÊ)*=} í'sS·} 7ÕqÏ fžä +Œð”Ü š˜Õá© !?ÐD¨§ûRNÔQªmÂ.Φ¤¼'9Áxya‹“D©q™HD˜Çlz7†M“2u (õ ŸØãØéÍ 4_ÿ¾_ø[ÿ‹FÈQÁI ¨µ¦¢9`øÅÜ^¾ÚòN}®ž»¸¨ ‰aäÙœÿƒ‡Ÿ +­9’4k"d§iOfh€˜Î)*‡ïµ û91›„mìhÌ'Ap»Í…Ðñ¿˜ò>`\+:¶»n뺪·RÒù€ÊËefogjKYc»[9.{pjòti<<»žpr”†/@F¬MbSU€ÐY4ø¿:þþ.ƒ;93G">»÷t° +ë,LÊÈ’jÒ’>ã=J?P{)*\¼b,~çãçn;nç1„’¯v‹ MÓAŸœ¬=MÏ/¾»›÷1ÏDB¤MgÝ”'Ô¸¹·& +2wáÃå–åĘ^ ¶Û¥’'P[Ú’ƒ1:k¤ª¨™|7’Íp?jÍVióx³6»9²«z“ˆ¤Š#`ƒü\ÓùqÁ±êÝÒ™`ÕO2ÁX4S…TóͳŽnÑm½s+Y0u]dû=JîlUd…y·€ÉQ–=Mþ²(.¦ +ªgX¥ä! H!á¤cÁxEè™{q{_ge‹/kŒü§õ#YÕýÎŽÃÕ''4åñ†H†„B¼v¶µ‘I}Sßõ#ùP§KxÄ‚â­zƒ=Jßù‡ž¾ïoàò•¼¿>ïBìKìZåÙQˆø¡(˜wh× v~›ýð†üùJ +=M"݆µ$Ùi•hå¡#bhîéYóÂ:2Ç5´RŒ«»‹Cn2ÔªµTJUw/7lLc¶{Lï,¼L¶¯zjJ…ÜVôûnznfO‹z4?†{ɪo>»Öfp>n~¢>»~†Û|âÓÒn»FÒSSžTn{:Ê®š4sLϯT˼:Ÿ +×\2ø8¸®o.“+>;º}7|Ô‘$8bË=JŽR˜·<#ØùšòÇl`¼¼Âw8s.¸¹yÿ@/+p¥C22’;ËoC&댰ꀥT6Ô½à†~œ'éü’_74˜®—AaEÍ9 èqÓvž±ö!@"¨»úÿCeéëû +ÍU÷„oçÄï™™å¡D]å}gNÆ‘üÌ)*ýÌ"J)*W=}Gd—­X»ù!èÅ(°îZ ÁÞ9]wkCáèüa'=@çÿ¢æÛ“ßéjfÌlæ¹lcú„ÌK(Žm„1õ¾­ÁóŸ°o¹<ÎMR=@>׿I<=Mrmíï +Õ—±+yÞÉššqþÑo–÷ÖµH™ÚÒ™>{Yr#ÖÅmÙ§B¹Vý©0”‹YóØøèÑ‹©•nþ™œ ² wt†k ˆ*I&Yž ý¯?F0é+šðl1ðÑGG³æþ Ábi!‚ç'†"«>,xf㌠´$i`i1• +Hö”_>þ«yîCΖçWû¦(ãgÍã\nm2­ÎèµyÃ6. M'uÔŠ ˜—hz±Åí&õ¢æI<æñ\*ãæT@c›òæhT³–“§ÄtxÑq_aÌl¾M ©W$Ö'ðèüÈÑÑ“y¸Ïm}qÁqº£i— +¼ìçÕ}K…w˜ìÌë4 P~.,D®`2/“¬ÒzjJ?¾>+=}k„¬ª²–:KU,?êÎt2:2ÜL2nµ2ÉÄft ’fU³`tþ~Ž…ÜRîµBÊŽF”%dDð|‹Q5I¬p ü]gŸ=Je’ö ã'Åš$سXûø„[z¨ìún±Z¶jbÀ$à扭÷å "ö[E&½ ÅÛ|78ÉmyíÍ +Dm²öÌée¿)*?g“=@ä'›ÇÉ¡ßù™€¯×p˜;!sÞ=M²9õ`[¦©Ì‰„f © í›ë$„£næþNxRÞ¾iSLDþ?¿’¤T2¨2¾OHud°åA®ÄÕŽÆfox²6­¹ÒÒ~]󣓴dîb +³ŽÚÐú&×(¼?zq‡hÈ<"û|i=}IŒWÁþ tåû´”õbð{+a‰xÛ©aÅ$NÅY‘SÕeøûzýHfDÃL¢=JA§ãôù• ÍÙhˆø d qÅûÅ`º˜í{“äù•“ù¾ûíXަ!§èØÜíG™øÂ!? +¤š§-´3剤„z¸´Lz=Må—–Öñd¦ìIp;<ËT£µ"ô'Aè^¦ãÍ ¡†þFËýTru&sŒ¢=M's¤ŒÞwm(ù¥zW²üûó©`Ô%QâÉ“™y%_¦•ÕRSŒ¢[(Ày›‡[ndÇIÚ +D@¾gâùz¾cÈs ¶ƒè–ÚóÁx ü©lD¸6ÃñÍzFº0ëYNO™»äåYµÁþá(5 èç¦'Òñ³F¼ûÿn½ñ}yšáõܨ\ YýZã‡ì“¥ïh¿7@ˆbÏ¡,¥"Â‰Ì =J¥±ÉQÍì²r."³%< +$gm8‘ñùÚÅH¢¦VÎ×PjæòC.Žr¢CFºªjJ:2.2ªjÈNyªó>†ãz\/m|K>l#º²2ç»»>‰Ã7´ˆ>‚órxzn®,²Ï»„MêSƒ\qJÕ¿…Ñêá=@%Q„æÉÊÂʯzo~2o§nî.j +Od‹ÐƲZTT¼4bž¡Š¸GG­K+G2ïïGa&t“?s²2’gRÌL6t*×’î~]®È¿—4L²\±hü×úË¥9$¨÷=}á*ÄTS¥ÝìMØlˆA[K©çÜ#˵ YÓi–ÊFÉV¹Åõó¦q^­ÀR4›ÊÐ +<ï…FÕ{8TÂ{Ü{z«¸uˬ\ïq`plt>°†¨w=@^üƒß†H=MÑá=}¿>æD“[ ˆ†ÞíK=@ÑÒÅzϰËÏVdzÇé0äñ9vÂéh·º±‘=Jžç€¸ºðà4¸Âxö—MbµÝ#e‰™àeÈ +æHVDÞ›€z!—tÈ4º[º6BÍQ&H&©xä¢b³¨ïèõöº¥=}ÏmK*f™é…båƒyß7©=}Åwͧ½ Mrýý`„¤’óòj”9Õç ¥Î ²o嘇º Áz_>¤~f ÐhIÿ€Ó$äOÊ +:XM­«·“•?ÍíK!D© ö “³$q©‰Æ¥É¤¹Ae—i—–ÃÊõí°-ôVh¿ Ñ}¼¹³ &Õg€ÍhÈ‚¢=}{½ƒÎ»©=}&`úŽóGoIVÉsŸù]X|Ÿ4ìS•Ë3}Wl¿ÍN6²²q»¥LË”ñ‘Ë nŽ‚n/eT£Ã{=J;e/ed‹Ós;P> +œ¸ßu ä܃»¶¸. ¬|Œ*"{z†›NRî®.žLR:ÌôlÐÊ\ÑRâÍÐzÚÖ+öªjR,Åg0´Ï×NÿSõ9£¥â 7g§·“õ»8jc4&=M³²œjnbéT7”œU£ØnP£œœÔ£Þr[=Mö‡?~Í +2&ç>ä½F{ÈôßUT•TÜYeû4Ÿ¨ÙË¿îëÖËq÷ ?Ò¤ Z­õFŠÞ¶sÔ“ as¸ÍÞÙ€m¢Þ"#§âÏ)*‹‰™ý[§}h»Ñ§O§ì2.,+*­-ßÙ§Nе<ÓÁ }qr%aæG©5¨1瘑x +ÊÞ›ý"¹ñK&ð…ãiè.íG—‘å§ncM­©,’ýV¾÷òÑ|œÜÒî€?9v=@„:JœØ__Þ\|ÃsyôhŒçGÙ¡Å/¦(ݶú¶vŽF±$ã¸ÆiUÉàè=@ÝY}ó:®¢Ì±¯4.ã+Áj³Ê +´ºªq¨.q,.jXj|‡`2.:̊韜¿ÓsžþòÂl°¯L´n¸&HX~cY3›ˆH™zѯ †üدjÎr¹1´7¬Yo¯£¬cßço¤³þK+@Ž5´31ÌcË«4rR ûô¥ô´úõådñRÍ´T6LÐÆ4¼;kFú4;mNž +9‰ä«sFÔ,³´BÌÒòq`2z/‚~ǬS_[3¦Ü4(7aë‰àÁüSÜKI›‰Ä¨ã”K<òuÔ-IzÏ<úк㣿Üó5ìnÓrrNI4\CS;òhÏ>ßœF¯‘w~®Øæÿ9v|ãköÐKÑâƒr‹ªµWÿnT£äX +í|¥iFï&tÜT­)*µÑ(Yü ¢'æyø¡ã¡öÁ×2.,+,Á¯1øŸ¤ìÿe—ê}ŒmI»Ü¡(õG©¥ãý#u ¢gÈ©ãÚ;Ôû_s06ætßxóâB´”õm_Z½T”Dð€§w`ƒ¥VS¶ÖÄ䘆ڈ”¤ + Šû³3VÎ}Á×ÎTSÍ9ïÀ'Ù£§×æñ‘GöM=}C1K¼'Á•p’I¹ù¬À»¤È”2€o{§29lPµö´Í,0jJn,.j;“;÷+K:‹´'.lkj‹8Óì¬3;kF¬ˆäÐ1Óœ¹ÃæûÛuî¿6 ZÌÊK>{onE>RRz…d¬Ù´bŽ JMj²dœ²âú±Í=MI?CfAµø‰pÍX +y‰¿¨ë¤+>”Þ[Ì w*â(4Ë^â8™\’³Cû#¾âo:ƒh5SŒM²´ÄOxkIÑÍúÑ{b²Ó¤LC_Ÿzšq¿K³é ¥XŒ·pÿ%b§\ÀK¬Èb•.lê ­_ÁÏ")*Ø4¾:2.,6÷ âžTÔÚ°&R± +ˆw$Ùa½í€ÖBçûî}™}^¯»»˜%ä&ñ•ùÅG2Ÿìb è­ÿN~Í¢¾Êâ¹ø²xÎo£ÓîùÒµO¯gâÓ¹ƒv‚ÀJÛ¤ Šý9&õP¸Ô,ÏhN‹º#¬ § á$ˆxݸi{j®®ru¾Á‘¶ +ûæiCÉ1ݤ„oät±Â€AÒ6ªoÁ>ŽQ«s>‚nxïLon/,\Ë?êÕÄEMïž\.nlV{Ï94>l®gqrÌ·ÈŽä>µÃGY³œâMŠäÒLQ—2UÄÔRãSžèÌw²’< Û*Üu ^o£çpËxêÔêòZˆ>w +Br{~º¨ŽÌ¶²úÍØ&>A-Mº<}m;píüåÝJãT4“ò3ËÛ›~Ü}u4Ã:Ò2zl,d:d±ž4K‰(?5-¼ÛNm»ðMþ²ÉQ2[qÏ”h†œ# ÚˆÐòɾ¿·KEÊÄR„uDÎûŸó}MöÝÑ`C˜ÏþæòÁ +¯°2È”ß< NÜÔ™:õÓÖïd– ðNM;÷5ÌýpÅ’ÁwÐC¥kk1ºr©ôõý=M ]ó Ž)*Y‡‰k?$A6ªjJ:2bÙÞTàðÉy9ðië৉Y¶háÎŒß8òï%Û@Bu ùËýÌ?¦ òu¾>cs› +~2=}Ìã¢äÖ“æÕöcS—>Í}Hm¸CYWg\ë×­Yƒm8à½Vã@tlÜ©µÕYÏ áùï§mÛ!Í©¼y$§ á&Ÿš=JŽšQÄ9zW„Šô>†zIöªN`¢³¬LàS޳LàÚ¬>4l¯A>L4‰òµ +úÒ¹=@¶º ·¿zA}Ò†ÐÞy4àksˆjæÕ?l_˜¾»ô3ÜHrpÌH”R"¿|‹Ÿqˆ,RôF¹Z×eC?-¼;1sRp°>šgñî¾*olnžÍ qRò}*~ê@rn+X’AGSMÄCv>Ÿï’ytÜ,R.xël +¬PÈ:×dAïÕÐ;VÄí1}ÍõY +4Œ°zóí½Ëž)*Ü'QΤ±$`&Õ$¡$ú»¨»#È’ädKIÒº\;+‚>TR²ºªjÜÕ,ªÒKYåÿ32ÞŽ¶ÓHƒKÛs>||á²³L<†Û‡0t´ªÜ“ê诘f†Ð{.L|Ù.Žr–†»kÓ ˆ°?0tv@ˆÒ¦ö¼Ú³XR +ç6Rø6iTVíûF­,øÎ>Z¼ KLV9³+&ÒÝMJr,´ªl¸6»÷¬VJ2ÛjJ:dVJ>+…b2o®A§Qz=@T´¹wªPº÷·«®dŽæw[xavg^KÂ˼kVF 4øèA§É¥§(í1Ý8¬®›ñO±Ô +ÀÔ1°ãxímyVÛ8”nc,HG´u´®Ž‚Ø}n]ôLFÕ4†p#\I,±ÔMn[lˆY_D_Ô‚+ñOÝZoèRD2OÔÒÛC8†`¹/çBùB¡sË[»=}îÄyC)*½YÛ­.‹±î¥Ä÷—Œ:2.,+j# +˜âPÙ…K[~gé0éÜ&±£…Õ¨ÕÝÇZíujK=J4ŠÐ£®uÁYÃ=}Ëu>’±ìud‚ñ¦Á,ºË…Uó {wKx›‚~gZùÔ­X{&=@Ÿ7Âß{ŽNh”…cçxÅKg~f,¯kfûÔûN~Ü;V»RòÔ¬¼d‰æ³Ø‹>ý…mR4ÓÆFçSW\.jq ©Ÿ^¿/IK=}ÒÔ~øÒþz“±ïyíÔÿß<4ˆNÍæî‡„l÷¡‰Yâž§xý1ç©ÂZ6i8ZîMFk¦¤§çÁR± +~´„Ó=M'{uÄb"mfÈ7¶éà¢ÿf£¾_Â}SrÀ…a³mQ\_«íîz=}=M q;ò¢)*õ¼Xn;uƒRíxcIÉ™ÔŒë£æCùB¦ˆ»ÏmÑðxYîÂ&œd%‚ZpAë÷ˆÄÜ2.,+*¬cI@õƒú#3Cò +a²vÆÉ ¡ä&w#鑵ëçκ¶mößî‘–›£¨=Mú38fëäÞ’˜†¨Ò wAOLñ|tfÜz׊Èd«L¶Ü‹V‰7_pl·þõîæ½{A9¿£Ú )*·†#¹0ͳX)*ä$ˆÃ¥céu¤Á•‹(3 +¨=@I¶þâØ°q¨‹F2”:L+,@rÇ,EMN{©¿2μ>;i,K2³>Žwl<|Êt²~_YÓŽo/.„\n{sl(/nMN„\zAND6T¸Ëü$;ù]LŸ5lù`5°êzt´M°;jòÑokûú«¼†ÒS8RÇvRÛ!Á + 5!Á-¢»,J£Ì¬c:;úµdP¦,PÈ2Ó²¤Ó…g#>b$™a‘Í2µÞß ADVçKúÎ&)*Üÿg}X›ßãe‡ ­{Òñ÷Ñ“Ûâ{£³eèX©É¼&=@vè ‘¥¦HðAnmøb"o|‹”Kñîj´qc¦[q‹ÓÐ&bÁ +‹ÀÌÉ;¢€¿v§ÏcÏL?Àùnê;óÛoBno_5KPøìãBÍs_/fįq8;ñE>¼£5WšŠå£eȱ‹Ñ{km18+&uöé? [ ²¦VÙOˆ…NJ:2.,+,rc-¹äø±ó.ru°k V ÔIÙï†E~[=M:$€ºô +Á*ò£€ù~úHˆO–Ø|AY¯€öðoôsÚ¶¹OT²S9 oÀkîc~”KQ)*ôÄÐÔ¹T°ºùÒ¹Áã°7ŽM¨6оŸD—òuìÑ–Ñv¦rÛXÍô È¿%‰¸X©tì$ÙÀˆŽL5 nû»~:LÚ®ªï7»¼­ +}J¹ì®krºpl«œlSHtjÓ’ótHÔy¬Lo>º¼¼¼Í­ÿ5KL_S<>¶³„¨/Lz̼°Þ¶Á ^–9o£Ôâ¾£Œ·+Þ=M(F©ï!Ÿ±þÔbŒÓÈíIÃDB¦†ÒV9¯ CP ÞŽ|î£sr|Kñ{~Ïœ[#¾V.ä®Mõ2)*$þÅ[W`lCÏð_Ç_³m.#c R´€µ;r†éSW ‘|ºætº¸|ñìµ¼"À>ÊUä¯VRî®~}oCÛñÅÅÜ”õÔ¶šXyïlËø +ìfío“åH+=Jÿ>h:i9 õ$H§]’"hã­¢‹¨ÔIÃâ×*t=}y>|ÎU2n×_¾RL;¼>3?Ór»[ró>;]̹?p»ãÀšç²ãxy\£ÕsuîËY8RMY4cfûÀt@?RµîåËWö› +ˆÑ¼¼MZ´ª·^SNж·,J9³;s1ÌEB;^º¦RþíûvOLÑ”,::úòrz\+FÊÐGIöÓ÷=}Ëû+Gü±¨®dàãM {ú‚ Ïáÿ£ý–{§Ù?½üŽ,+,½Ê"ƒö‡Ê¶ÿÏÈ=}þ3¤7¯éÏ +!ݘ'Vˆñ—Xé(?Š,Ò¯|Á°=M¹ÒÛ†ˆ×Ré±Á¼üB|ðc4û¼\;ñîÝÏô;_ðÓ.Á`pÏÇ(D¿lFñ;pÄÒøŽyô5Pú÷ÕY:ÏS½‰0môÐÄ–;KHÛÀuvƒžãáÅhW +Z@mÁ÷öéÊŒõæ™9íŽïÏ»„{)*\JòÜL2‚Õw?k>:ÎŽ´¤¬LN‚nK†Îù,¼=MtST‘Íï>Ò¬A¯žÿCX–“Ësž¤Í“ÌY3UwCkz±÷@|mnŽ­î2пݗ¤Èš²²dþþV²Ê¸®{¦r.ÈN™<_ZMÄšr +RÇjÎÔ½K>;ýJ:Xo¸–‹MËx¸–Ÿw2ˆNwkû[kGf;¾ø[ñöú€cœðBˆVˆöm‰‘^ïwd[P6÷îƒÜ ‘¥£¢Û€å ÈMG8Ë–öJ:2>¾9· ¨*ÑpË2Á;ÌÄk1𨵠iüáë8å +?ÝLØ}~ŠNâóЉüØ.ôºŠ<ñ%T°rŽ[ãqºfÓ„§iv¼â⽎Z£éçC¥¥˜©a¹i£Ñ2Ÿ:mF[6›-*9pÌž¦ÞÕjJ:2.,+*ªjJ:2.;ôMJ¾öYÝÜø±9Ø“áÖ¸ˆN[=M©›‘¥Yù¡§ÉÛøI +™Ýá –¼ÆruXÕhж(L¦ïøO(t`–„"{òhF®Øäd4lôK%õû´È†Õnˆ?ÏZl†õd•R›)*ËØó/~ÍLóŸ„MïmyÔæ¬N#¦è”~ÍB=JˆÑzÒÿ8m ˘ èfrèýl¾£nËXÛÀ ¬'‰Í‘ + 8Éû#YëЗ=@\‰›LŒ¬TJ´=}÷;KÛº¬ØkoOÿÅî`nr–|NOD*ºpr>»ÓpÏOdPÒT{AL?z²æuÓþÎÊSLôuÚÔTO3Rœ»¼W㻦µYO#Ç”áÉô³rÜêWyÉZÜ~q*¯j>L<9nžê«± +Ntkµ¤¶U2C<%ÒB{úªnkûÏ.v.Ÿú ˜®¶\Àœ:¹¥Yù!§ioçÆhd§Vžžz|ñ=J´`+&ÁäQr¦äןßÒ:2.5kˆôF¯Öö|;½¾½)*d&–)*DÉÚé=JõÜ(£5¸) +*Ÿ*b"3¬¿ó=}WCEX’…ý^ËÀ|ÔÆ[A‰"ˆGÙøVìG22² WÚ‰wöªjJ:2.,+*ªjJ:2.4m¼øÎ~Õ¬cÐÉëR↤=@?¹ì³×cèƒ×{yο6 XzóJ© ¨•ãë…GÉ +"¿mG~QÒÛˆAèDï2$q$Õò— Ú”Þõö®©Ì Ðc æW…æ²r~_Sœ¹q{ÀtpMäÄ„c5°"ÁÓ›ºœõÅ@|ûˆr(ïzùÒ¶nqoÛŸ2ñÃ@ë½R•nçOòèÁСˆø‘ôVH ?µ +Ü'Ù÷"íX²õì¯>ۀǴt>;[k42×r´¬L÷ITT4‡{^|oÍNpÏNxïOòT»¼ ßC§ïó¡·ŸSR¡ŠÖp†ô,ÀR?kÜ|k×€Ÿ¼,cd?o.KLI +\"£¼½0ó¡¹$ÁSò2=Jq dQx™-ÃHÏôÝÔ=JMȹÓ'É·WžœèFTKå)*e‰È¦ÿ™ú!ß ÆYδ%9¼Ž,+*«§rhUb޹ƒØCdñ^ì)*#3¨`¢Ñiû±†oöá‘ËÝ{Ú.±Oz®û@ƒwtu +»:=MöÞ·"`÷i:C‘¦µîíèÐ6Ie¦Æ'ø&‹ØçZjJ:2.,+*ªjJ:2.,+*ÝËF¬OôuDBGÎûŒÿ;ںcѶùõµ¢ûè6¸!¨¨%vGuuüŽ>Ñ7—>ëeìhËA±–è0–9ÿŠùCæ1ŸÛ +ؤ;¸†´Íe§=@ømà¦ÏGV»A‚TN5¦àQ…k¿=@n£*œ¼S ÓsÂÔÔx¯XÈô¾hÙÑïéhtl»3¨UÕ¾OH#¨Õd|ãpo!oŽßDû;F§r[•Mó)*åMqiÓìni‰%X"L¯^æ’.æ&)*O%èñi +籡 ¥æˆø—8ç¹Yê¯ôR´4þ>QŒ×kj¶ºSS4t½Ûs>œÁÛ3ŸE?tû¶ÞSKoo–omì|–.ÍL€ÇÞSX–Ôp‰S æ,b®Æ~üôâ`Áúkûºq`dVVÇÒ=J@ÓúV·ªÍmœÍdr2|kÍ«G´dP8¸®6´ +5~£®LV¼ô·¬V.’À¶nÔËõ•v^ è“§=MÛ£$f—^†cÐQÀk#™ûéPˆX@ºäõž5þöJ:2.,9»ïAŸðÙ8bz «˜éQÈž”IÐë… üL‡’¶²çiÌ´*ÈhOe3L¾Ù¹³õìí +…ñÅdŸdhÆþ H§¨·Ùß ¦V÷–Ù¥ö:2.,+*ªjJ:2.,+*ªjâÖ”nŽQÁ³‹li´T>|\ñ<7¾–[_'MwÿðG‰w7p;WÆàb$ÝÖÔh#ÖŽæ¨?¦Mßé_Ǭ×9’%iV½ vó gfŒW +c÷æƒeåæxˆ(?Z=M¢§ˆùç ¯áeY~MÒ~#©#æ&Ib5Ù¹>%^SÏôVæ…íd†<õ†|LYkH‚)*m|º¼áOBÁXt?jÉY XÔRX†Ü'>ßÈhM‰`ô>õ×¶q AYÓ òÓŠîo@m +¸Û“9­~zÁª#ʼn¡ûåÇ]’"¨Ý™EÙÙiPî«~?+,Ì•öL»Á÷,Ê%Ò“é*¬•Q Ã2®ÿ<¹Zë*ãÉÔ[˜€‡GÙ‘^»Ï¹æ~±™$p o %†{H9«!aÃèMˆJ:2.,+*ªjJ:2.,+*ªjV ;¼íJk[‡5º=JËtDïfŸ—w.®Œ?;æp=J€e=}…‘ƒ~•¹·i_“ +o˧Ê~ {M°å«\z; =}‘‰0å¥í‰›I~ÊÆtKKW„m€»;2³¢¾ýS»>æk©þ¶†ãçñ̰БõÃ/¤«›,>Ïëœ;ƒ– r†Ü?•lƒpb$~e4_Mòm¸TD[•ï#ÜpØè<é:¤¹!‡´ +âç ¸‚µ¸•>üÌCf&饶¡¨9çëÒrlçyPÏY@RÇ5 oss-KÜ\n~zLoÍN5¸r¬¼»CT4ttTѨ/|»,A\´~MNss4XsuSJ>M~NÖ¼Ò~`çUf=J;ÛûÇjqˆ¬ò¢¸{ú'Šzάr« +;ÔvºÍ9nÌ1ÄWL;=J…Ü}É]LŒ6¾ÒªT¦í x.<*ò‚¶‹¾ÎlJ ]åÑ~#él }s¹nú“ž:ø[ôI~¹ãiæù•‡*ªjJ:2.BgÌ`Û:r‰0ÜP"_-å¹û'£Ýж—[‘æh8q{ÄU¶_¾ +Ñ[ÁªË<& í#Ù±ÅàæYá­ã¶ô\?Š»~~!¢é}¢×!÷)*ó£ß¤…笽y?¾&c¸[;îÉÃÄ!Ý鉅ýÞ9Å›¦—ú ‘ݤqtµrÐRŒcH}ô|\cIÓe½ååÙ͹>¦Ä×ÕšJ:2.,+*ªjJ:2. +,+*ªjV’UÒËCœ¸ud;»ŽÊ4A2IŸ>#©Iî§Ò½yÓ•e· µMÿqJ°è9Ÿæy©¥¡ÍÉÀÛ@ÕÏüü=JzþpP$§ñŸIΟºu1Y|ÞALAYz´5BÁÎæTS2ŒµÍ;ŒNo ;kFmù÷ÿ +tÒ2é­YÔÑ„¬õÅìh?W8fé 4Ž=@¶oº¹`fØ·Kù=@lOCnõÐX{ëMÁ%ÙÝGøÃÞ(Ù¯ÇÉ籩èéŽ&ƺ¾+nú„SCRxù;n†ÊÎä>Á`;¼ú.ÊÿCJ||”÷·tä”o0ò²¿Ô´u¾ +¼»S`ôµSPòptAÛ{E>ærçÅu=@ò¯ºvïF\^".šò«?Û=@ØOj3VÀ;1jºªoC¡~¯ï+ÍÚAŸxøÝíxGmßÏM?>~!ÃI!ˆ–ÙvhUPðjJ:2.,+.?w[|ò^¶ÎY­éé¼8 +aA{Ñýåbd“ˆtÄÐHkh¦/òØ!#çædgèÇ­¦èƒ%”\\ ‘°†Û»g±)*]Ù­isBÁÍ=@G¸cËV®Â=M åWÛˆÈ/ !‹ ¸ø”þ$=@½7§e —½Ÿ$†c‘^™û#V"Y/—åZªjJ:2., ++*ªjJ:2.,+.Žæþg äøÏr´f¾¼=M´=JŽ4lL¬ç†—{;l‰ìKÝ(5D™¹­ÈÅp‡º¨Û"žyD‘Ï´M¨›™êÁïùµu¨Õ0‰¤a þ¿/²'ÿµoOõÅ€P=}O+ӹƯ4wòz+ô|º^„bÎL + @0LO¹\=JƒMF¦…¹¼¯–؃3'üoݹQV£q÷¾_þï²;¤sCZŸb£r±Ò&ŒÞpÒ=MjO `‰ãð–]™ì!bé5ļÎyÀ2N#r§rÂs»¢çhòÓ*£œIû=}rŽô\Ïz¶rÛ:öæþ +VÝÁµÕ~Ýî§HY_µw–ŽjfòuPài@†î­X¶ôDCœ®é§ÉrùЗiÕݱ©û‰Ù¨vÃU‘‰<^5dvL.Y4G£¿2SKrò»nXÒ–¾”MV½ŠÎä>¿Y‘µMnn°²õjÓkuÃ,$¾c>¡q{< +µ r¸“­šs§1ÆMÅ+qxªƒ+¡G›òúM]3Mw¸ßžQ›94R3L7 tsûkSEgl6µ2·v´Ò,´°Á‘_iD8ËѽSi'aéÌñVÞï† Ë“ÔKÉ¢¶rrAI}iÄëÓƒjJ:2.,+,rlM»žÇˆ­ãý +ܼw€ÀWòèe9Óè#öù¡ •rûë¸È_I`ˆuR§‘Ÿ ©rÔй|ÔFÓŠY®.ewM¤é¿Á%™Å=J¡'ìI~$¹¼Ž,+*ªjJ:2.,+*ªjJ:2/·2ÁÆ¢wž0,­þ,2²~z¶æbÓ”ëÂDгmaZ +õC4íVš¥š}_ˆ÷8ÑÑþ“¾Ø>Ñc˜=M™Àñ§À˜Ûhî¡’$@È|jbÙÈ$8¬°¨k(†Ã(Ò¿ÆrœX’Xk³œ$›„L½2ªÊÙZ»¦ÎÛÏsŽØ×6Ϻ<·ÀÑNíRCÝqó²Áµ%ØçÃ_» +²9ÑÀõ²‹›;1ÑÌ=@ÀùV˜ßwR÷*÷Ÿ‰ç%¡¨=}ãïúîUy,ÁT¯flrrÉ,Á¯6¯|’?Ux’s=}ró?=J|okr¾”{†#»F¯ z”‰tT;¼>¹ìU³º´LÇGµª‡ÑMêÓ¡pú¸fõ +zo®oGDzƒQŠßŸVª5UöϽÓ{òdIRM³A zó›MN R’ªÙ‘†”:2ºN«±ï&òhï ƒ…_o3ýw÷‹+-%¹ú©UYµŽ!eæˆC¡õ.,+*ªjJ:“>ÿ—œ"™¹yû£.„=Mgí·ü% ++^d×s~=@í%bô®-¶À#réæâ%B™—$·Îe"K¸20BjM*FjqÊÜ$yÈÃ*ªjJ:2.,+*ªjJ:2.,/OÇ/O¯9>+*ªáû§,lI|»ˆî\z=}µŠg=@Ñ[ÔíwqáìIURîÌRò +c5¿‰Ë=@^¦‰ >䇙Ÿºã5Ä=}#­‰½8ñç=Mï%9v'ü&ÇɾŒcœÙÆ$ZÍKîqî¸ýtºá€ô½r³®Œ†ãV“ÔãIc;ž}w_Uºº=M±ËÿcÜQñX~?thl%çG0†í¸ˆÖzñ³œ±T4 +d£¾Ÿ<}ó XŠ&g9ä)*o#ك눉Ѩš<°Ÿ„leÜUë R¯ nî??E».n³úL»¼·>¶¼~AlRÐ…noôå//l\‚²õîÖ¼»LÊθÍO2ÍXüôâ`\ï§1Ä6R”;‘n¯½ÉÊLøªqL*¸±ì¾ÝÊ +;0óxµRT޽N,R²2¦ì: ¯No¢jlS ‰ÜR®žD³¦øÌ ªÜ"çÞ£h§ȸ¥ˆjªjJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjØù~?=@~f†,+-ÕznËOÇ4ÝA΀ž =}«%t\±w¸[CŽF +•E“ÄÞíyÆ$¦UèwUüqƒw뺛-HÌV"M^“—š‘æaæT¼íK}þ0Q;Œ—)*"ö'áÛ¤i™­içEå7XÊr鿎î<À¹±ìËÿ òé/’qJÀh?4¯†œõYóuŠLm¾É\«6»Tî\ †xy<î +þðh<©pÖäû<ÍP7€~·qô…×%†èø“áÁæëp·VÜ;Ys£Ù w™Eé1{Ï|€º×d˜¶¾;oNzk<<²»~>Ï3Žãn¾Á}ro?.ŽÊ¢«5N/8ËNzO’®Žå35_¯^­“§P^1ì¸9^œ&ì:‹Ü~g +„Ý5PúŸÕªu¿*UNÏqŠMÙ\nÂ;p ß*¼óI^ÃLÓd¤²ÑÒÙ«ú"+4ÄK )*ܱ)*$x(<©¼#‡Ù­¡©  •þ.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.4uDÊØÚÔ4†H´1€.,2kCŽÛ +ÏK½?WKê'ÏqÀÆNˆ³, ÔýÝ(\ì#é)*O ‰W;zÏÒëN¬_:Áðµ)*Y9¥%ûíóçeè YÉ´ ³ƒî;KY<&·pÀ'íÒËÉJ;M(†“Í„3rŒîçgA`xÒ¾±S•Ëuí=J|Ú&$¨´.œ8M»Ÿ) +*N:òLbº(’]‘<è‰Ì«ÅöcX–Z•îr3žXÇS>/C@Á‰ÛȦdiA"^÷ä $À¶º¢®lLltrÄ¢®LOò/îùÄ<~ÎŽµ¢Í~LOL\Õ}ÿO;AÛ{Nz³Pré«sˆòþR•nlSáôè­÷jœqv¸(Ú³ý +j¸GG²5LH$;ýM»\qvh>sû,QêWRObŽoAXŽ~kÜqjÊžÍÊu)*”e9ß'¼H‡ÃÂht͙󇦨ðé e i×2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:5d;»VT¬ÊCJ1Ì9z2fï' +^0,ä>®~²ŽÒˆQ- ĉ$y)*?Ñ—& YÅYÜ#Ÿ:¹,KÔ¶­”°‹°|&Øée'É$ú'QÎ!©ÎýÔÜ;ñØU h`ÌÆµÁö~ü=@1?ïªòÛ'{ô„Bð#£%S®ã¶®¤R|Öí99\¯Ý‘ †² +ÿÅ‚M¹ªNv[MFrærЗ[š”±Å¾#‡§©sùБívE (,‰Û¨c QlN€Ë=}Üi4T»ÀR¸/LmÙZ´¾NtRpt€·;Ü\k T3›zºµptÙúmÎÕwptFþòç²­Ÿ§1ÆãL7 q¨‹GV¿Û=@×HŽ +³#Âc¯s«´d+Fúì·6²CŽß8ÜÁUdE/ÓЂkk}Ëxø’Ÿx®H$uFqèò”1±s!¿év‰%Y­d±§lbmõè’jJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjÎUG, Ñ0T_0SÒ•§?ÿ +À¸µ\’f‚|»¼ÄtC&U_ ¦ù`›ž&Ž)*¼ ›%ù­!O‰PÒÔQÄEMÓ¶ªÍ½ì¦Ô•>‰ÄPÁäGHÔtƒ´À˜Û)*]¦õÇ5íÅqåfÄaŸ~ŸC¢©Ä)*o­ú³õ[L´¯Ö@Oí;JÚ +Nb g~|5²² ‡´-² hIŸºùÈf›K9ïlßnn"¹¯0wv÷I®{Õ8Ô8HNh¿›„[õEÙj¦rM½?%èùNí`&9µ÷zŒˆÑ·CJ|L S<eSXâ~OCLû¼JµOºÛn&û¼ÔšÎÏ’ó*¸~;GK~l) +*Ój¶¿Ü\°Îkàè­÷ÚOZÔË´Î’/2\eÚo–ž^¢g@ok³F\ÿ\?†Ûqw¼ò`rgqL7»¥X¦Hôâ<qh0mŠR{þý¹1ÌÏ퉑ߗq×û»ÀMZæXh†´&à6Ä¡Y=@‘ïé%:Àuh+º2.,+*ªj +J:2.,+*ªjJ:2.,ªU,+*ªjJ:2.,+*ÝÊÕ4:¼«xε?¿aî#Y7q=}|°Æ©ìAéç§Æ˜ùå5è˜îzÒÊÖúÏöÊû{®²pÌ:ô’æi£çÁ±é§=J$DZ£"…ÉßËÍ›0\<ó¨k%Rž;yºpµû +oÁµ(:ÄX‹ûÛzÒCS¬«T„\pz5îËÓ˜ò–?Í—§1¼¶¸¾{šgrø6¯.`CŒ¸Ç:Ÿ½y*ß^\óú³Rׇ­V·8·,K=J‡ÿ÷¼Rû…+v=JLTžCM‡¶cLË=@“|šƱ,[îîu¡‰³Ô'àîý%hõË”[D +¦Ÿ{$$áô(–éqµXå§øY(·Ý:ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.,/ŸË6È?¯6ýVc¤Öî"¨ßzÄ߇qÎΛ™ó§ˆ=@žì#”Oôç–RR€Ë‚†ºa±ìË6ð¸ÒŽH‚Ï +U%Y÷$Ñ‘Ï%ú'‰Î¡ÅñÜý0v¨S! ™}~ŽM!Á<ãvkM"æh’|[2$»O »§Ô´„òf®¾ßîñÈXHng3x¸Ü5H‰\âÿÅ:¾Ã1†zŽÁëÔ¶µìoµ(•¤‰‘] $ÀWÙ<'í„MN”|#{¿ +{s>~;»J¶º2ÄLT»<·½;öµÔKK>P´¾£Ío¢,‡¯¿›2ólÌÈU‘.L}ͧÅõ~.s»Òn®€º\ÌT,UmÌ’LÔÞdòWF*å~y^µo¾u?º‹q`d:¤L¦¾–n?A2¹,KÛ;Z|X7 5Þ¬X.ó¡m ø¬ÑlMŠ´­Lž;;û¼MžÃúúMЃ+”jqlò- + jG@znNqLÞRË;w*³sB&îõùÈÞ´—¬a÷X̦h éCY~^*né€Ñ£‡ŽÔËD„É ºI#ŧøùä ­=J¡§ÙàM¾çÔ@.û¼n,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjYbÕ|ÚÏõ +9}VŠºè{YÚ¤ÏVƵO!ÔýoL€Ë¼®\Ý>SH†æôïGn¢™ 1übó"¥Ùµ‡ÉçEè Ρ¤ˆ·WH†Û‰Ã¨Ü‡^Fl¦µìh¨”“=@¯^ÏJBŽ(‚Ô‘—2K¾j¢®,(–ãÕGµb¸F[)*_U°W–~ +ÌNŠ-S¢ Ec…Ž‚Žc' ¿mÖä¼9ÿÁ‚Oöå6“GC0iYT'ÙÎ à¨]ÿ[¥gôŒOÉP;Ì´r{s.ޝ:äÊl|t\N†\¼\ÒÜL´t?=J~d»4¬<;+„ôÛok:¼<ÚÎlµã¼ æÿs;K@;÷¶¯ +..JÌ´'}8B¤TœÕ­þŸMºŽ€ë=}á]Kj‰üµEÖÆ˜ßxðH²ÞµNÀ«ètÀRqTÒ)*ÅO 4ýà¥ç\aÿ}4&Í Õì©5Yä«Ó¶=M[¼<[[‘IŸ{ë¯ðË’„¹7dc²­´f¼aôè 6%í=J‘ï +|SrÉÁíç9glnׯPjJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2MXÕóˆŒD¸†~ˆPXÚi8’(‚ç{†I5Kï"þ£‰‰•?š¦¤5Ž|lÒòÇ,^ÒøÌìT4lN.NC38XÝÒLÞü=MRTœf +ph•Ùò!âg¶ÿ9 g籡‹Ïëî"¼;ä4çÿwÔ‹BŒõº§Á`sŽÒK¦ÜŸƒ^Æt\~H†ÎÑ’Ôqó÷ÿm¶¤íE³§”ÕJ«3§þCŸm¸oUÛvp¶(^¬ˆËó¨¹ûÜ&IÃö†Q\û<'M¯kFÆì³Ì»L´n +¯?Žoð¾l~~”®ŽXäMJ>.j²zt;SÏmì†SClF•nPjJ>+‚:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ¶äÙ?4Éìº\®ûºÃl´ÖÿhUùÁX»äAçëú“^[XØéG!Ù¡¥†Dm‚§uï~ îKMîñìo|û[@c3ŸŸ|Rù¸†îÜŽÍ~†ÎL­ +Xœ¹Äer§¢'þ›x{;ò¦õ÷‘“ɃôLç‡áÅ4‚‰æÁttô2Âlˆ>KGFSLSRþTRó~þ‡¾³Ÿ|¶³l ¢´Ì;KÜeÜÇ?/ó›þ£Mº‰ä×´;K¡‹úY¥J²2G?oÍÐ>¡Šfγ¹-†zÊ®GG5Q 5 +xÜ5¹\ÿò\PÒK0ozâ̦1ÏŽ±oÿfH²Öw4Y«ÁöuHÓ½¨$ùs·e‘kwIXˆ¼‰c1Rñ½+r¢­»Ÿ€ó'Äîf7l™BmŠ%I1îTçl+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2., ++*ªjJØiîO /r&<u¹Qa=MY äkêV€=}fI;I2)*RÙç9¾sʸ?F2úRxT2×ÁÞ¤˜M5¾qÌ&Ô¡…¹ý¤q‘Ι—ÛBµ?‰Ë½sîº\I4ôÄ–LAK©€Mä>¸ŒîqXè¾|烦[&~] +Å}R=M¹&rûÁc¹ä/YO^Æ[Y1£¨@Hùß&x—hX´¸[°K¶mQ;¨\Ó%Ö‚Þ¯Ë<Va?ÈõwøZ +Á:~°î¢ƒ;(8TÏœ²ÎõX‰0ôŸnm¼ù‘BŸ»ÒÐÖ#cÉ´ã;ò©5OûÉ|[³;X&ýr’/õT¬ÁR¨u(»#‰…¡é£¨«#ôpr–~€òó=}à°o“¥ÍY¿t•XhYãsÈó…q´`vJVà +ÈO>“äf¼Ëe2ÓlƒRUöU„O2£¼Y˜/qL^ÜÁ³4 ÷ûYÊZ¯G*µdeÑ*¸CvQYª~ʶ,e=Jž“Úmj³ÿMÐq^=J;pƒo/ÌŠLÒV·ªiV"^ïFÏ.©å´&—i¥H7’/„ü#'‹½ü² ã +TGAŒŸr“•Žü~ƒí½Ú'Áúœ&IAþÛ™÷4$™¼Ž,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*¬cco£Ü´ÈY&õùܽAZ×¼Ÿ¬'ÝJBù(Áˆqß¹Ü%"#¦W=}y.±ý mKÚos +uêÊÀà·+©=}/#9zù¨ùýe‰‘5œ2®›#¦¦çÉp7í9yX†ô„A°†VœñL¿}å,õ"Žˆ?SF² ómÖ¤Óñßjft©ˆx!"^!¤¡'våÔ’#K%D„îÚ…]ZÁXrÝ3Çgn_Z°q;3­Aå +dÒ×WÇñãDh·ËoÕ}·–N¢¢§á!›ˆ&=@‚ý­‹’êJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.?õ"µì.7­»#!§TÔyÄ<†¹=Ma´'µ =MôLè=Mûnnfê{B4øÕrÎpP²t +o"Ø!içÃ%hñà š=@²¡õX‰O§_Ê;Iq=JÎ+AJº(’KÓ"£©÷°wokA±¾~¶„ôiÿm‡¾&òµÿû‹€œ;F±{ÊóÙÒ<²±7=@Û=Jù‡P,ÄÊÔÎHr&7(•è½&#Ƀ!'¶`ÁÉÆprÄTR +Îtý0¯oLc:²ºSS7HLz;THRΠΈÏU#À´pt‹>A7z¼9znr>æ2Ò\ÇÁÍʉs Ò «¯=}K@:dT^2~G=}$ô2ÝMÄÃG2>{Z–»ËûK=}Íë¸No®6ª?¼Á^›õ}±( Y$‘åü&öåô[ +XAY‰_#³¨èÁL#rfunÍÆ›¦qÔc7ˆõmÔ€bþÁê®™J9"¹§ÅˆÈù@ ¤°¥ëFIp´b=J²¶lZGÂq‰“<Ê:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.4…V\z±FÀ+úPrbéß-ñÝr‰Z¹ +Âé·W•"Y¹¼%¹Åmí´Rò;‘ÚÝÐê}~9õÙ¹Ç=@»ÎhñÍ å ç˜ÌÄ9¯ éZ'¦Ð´h©1TÁ€.®‰Õ[ñF&Êõþ”Ž;ܶzøäÒ“qìˆ +a#ƒ§Ix)*>#g)*§"†iÓæ;ñ6mF¨+Ùî“DiAÁX!åÿ–Ôh™3>|Vz5¾Â¬ØÔ²¶)*=Jv»Î|OOMó|“C<¿>èŽxæ;ãqëC<>|#æû~¶³ŒÂÊåtpu³õ/é&òÊ®Í)*ž~¢>³GžõfŸ/ +%ó=J½Mr2öwb.{æü»y[jòÚ¸{»ü´cÛæro.žÊ­ë¸lny\»þµQŒDDBÒñ&Ù'øY$‘=@¸§õäÐîÌFçU¼'\îoòˆjîƒ1\8µÚ0)*ßUMI2ý±!ŸeI½$Ñ®eÏ BJ:2.,+*ª +jJ:2.,+*ªjJ:2.,+*ªjJ:2.;òuóÀ®fô-9¯jXSï'Ò8‡½Ò%Üq'š©D}ë,èõëÝÿŒ\nî*òÆn§uF¿;Eßï´ˆº^”hFloôuC%å!gØ9^•.HLk ‚çSÎ98fͬ\ ¹ÓŽß +„Í Ž­@à{KLõQz\‘|âloµÀo o]v¦c˜åmÅÙÔîhI[»Š÷„Šïçõp þüe×aîĈ“G¨ Ý'²¨Aç©?ÅŸï£2ãkAl¼QНMN~¬ñ>i=J¶µ¿œ¬¼ Ü_ks=}pt~¶èE>¹÷‚| +§¦¾?F4t,KNll/}upo~>ã«F²Ÿ59gšYÏ}É-¤{jœ€·¸Ë„®žÈ+>:£­õÜM¤» ûjœqT¬dž È9o»3@Ø®oC?~þOÒ)*RÙ³¿ë çDM ¾8‰ÌvNaI'שÌLÕr~8 +Ù~LmoíŒfÎë'dÙ~  Ó‹"dhô’½QOnÚÃ÷²á8&Ö!&å09‹%ØÿüÙ}ò:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.4ud5¸&õ÷5Tz{Oë6¯öÜ—6Hê_GÂþX–™ïá)*O +{ïI¾è‹‰—lÞ;‘~æwgHª¨^«òUHÏìIÒÈñr!×jL[8h¿ •lsJ$ŒH}9Å|Ô.›¹µHxÔþrLÏ–äÓ2›#äܤ[”Qï<Ä|ÃC=}=MÒ®ìç“=M»Žâׯ'€c¤u÷ Cÿ +KûS4̉?+ôiê™(u(½¨ ½yz Z‰Ê¦N£R`Xtl¼Q™«¿SGœ=}Ër¯ŸoOED’¶¿¯Ny÷CS€Òõþ¶=M«~{2õ(¿—`qöTRSSˆ‹›\®Üo¾²»/åLM¿=J²²Ù³L¦5ÁÏ?иۧ1ÈÒK +*»^:ýÃû+G2¢fó<»F´2ç¬Ä_\Ñh‹FXrÔ\;=J3?~:Ø1l¬PæadUñ1ThˆIgˆâu$^Ñ‚Qø{#=MÁèu’%-ÑíRõÓrcbA4Fç`—§Xù>“å $Àx¤ecu±;AôUè“S/ðÄ[h +â³ÎʪjJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:5D:»VRpËšÙV£9³l ÉÙïÀ¯‡IµT(øµ±ëq"{)*UYúhwflAžcT¶£cgëxx:%è½ð™…ØÐµ­:ñ±T&ýÛ5-¸fòþÖ†i%ʰ +qXŒY¯û–$ÌX˜–›HÕOíHÎò⯠õÙËvÃöÙ»V^ÕNÊMº~mY}Ô‹ }3¹wv„Ïkpk·Rð©8‰Ÿ§és§ =Mû§}è b¦ääX{Fq¾q¿Å%7IºõÏK|ĪåËf4uÔ5¾;Ÿ_nVzÒÎŽ +ãÜŠÎu·T;¶#ÍLl5¼R΂ÒSCsrœ/=@ +Ýëy{îÞ«)*É ŸWO#Y=Jq&ÍÜ%\#_ˆýÒxÜxˆzŸ§mþgÈ:$ǹѨP!(xä°¶‹²ph†ä=@!å»DWµ³¤ou~N†Ô‡¯œhˆˆÌ·?8l@cJùÄ{AF㮀M`mYçûDÜ”²™÷$Ëv¤Ô +ÆœI¿Žó¼y_jüíô(Q©¿Áû%e™q±åM.˜Íи¸Â“ 9÷©¡‰áëµ·K"¶#˜žõ€EMN“oó=}~¶ºöòDz·,2³,Á)*põSXËC<ó¬äÔÎŽãÚ~Ì{¼ùê²CœÔ_L2ÜYŸ8&5ô´Ôpr +´S: ®À°ù>üÛšLÐådéè®f>!ú´®²Çµô´#Ã7u¼ECGZº ¸—í­þf,`2òÇ,e*{„.šMÈ0qxªkMÞåUA9rC2a¾²%æå¨åýÛ“°…m Ù]åiÝ‚ÐDTó‰[Ïcè5:"৘ø^± +çuV‡å¢,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.,+*¬c9@$Ö”°§z=@½@B'õ`=@”K~pÞ‰ V^—ÞW5ÀFïäО½h˜’NœË,Lô^œ¿”p3bÈ,AA&m–™­ûû¿o¡¹ìN "d !§ +Ší' ÇöÓÓÍѲ¶[洞X…å$ö‚Í9/Ë[¸Lƒáqñ<ÜUoˆbQ|×z¾ãcs <òç†ÍôTRŽþù F¾_ÿþ8R[•”2黜pGwn¼uë®býIU1ÿ¤eˆáøùð2„§Bú븆sy"± +iÜ'é•ñ•9ï¡Ç÷߬ˆçH’%XRÃŽãÇ´uÔXˆ¾mî‚m|;œËЯLn¹Nv{sïtàq´U~Ž‚Ô4o¼ô¿2nÍL}q¬\OnÍLõ#§ûZ…ܬLûl¦ûºSƒ:Ê®£¿xïA)*à~Ô=Jú£UŽ Ë×9æ¸Ã:;{pooAN±6É^&+MÄûÐ, +]£¼Ä„orʪoÃF˼”–‹#Àxàe[uUtÊæ;£'ñv èÍ å(ÿqN²$ñ§ ÅÜ>Ÿ] È²Í`8>¹S½©åݹçgÉÈxPÇÝ ‰“»ü÷³J†»ž:´LQŒ;KÌ\l4o¼´~|\œؾ¶ +¾DÍLk3<°š|N“>®Üï ´®£9ä=Mé\´Sž’;{=JŽœÊ4d–œ‚Ž×K÷a¡D/Q¡Ë;ñAi éMÅYçÅ¡ +šŒ¶;Î_.tx™çû?zþû5uÖ°Ô[õ<î‘ÞëÁáÅhY¤^§Ewþ’R¢¾½.¬‚u›&ƒ§Ãóå[~£Þ@ó2.,+*ªjJ:2.,+*ªjJ:2.,+*ªjJ:2.:u^ZqîÀj¶göÖõTã®öÛŸ8 ‰y6Ôß' +`iѤ1©ûÇ£åíIQÍA“ÅQ®ã(=@eXX{û8ÏÒ:=J{HN)*lPˆU–[¥MüeÅ‘ù Ï~Xg ÛË[Ÿ ù:i¡‚)*µ qËŸ%߉˜¤ˆÁ)* høÄf‡HœÑ=Mí#¾¡áÂ'x&†ÙpýåY +¨÷ Ī”Þwˆ¼èQ)*Ue(—ÿÀùxG‰iQ‘›ÿ¡ÞËuÏs[*:µ+¤Ç&Áœü¥–†7/6m_¡¡2O¹ûÁóÔ$F‚Þ°¾b)*\øÓæÔ=M)*%}Ýw¾‘¾0|óu£}ÒK4dÕK4oCOH;›5QHŸ´ +ß»ŽÝÏ–ñÓÆ¨™ï’øÃËGwŽ=@Áðˆ]·ç¥eHð%Åû¥e‰!™zzëÑëí¹Âõ"¼A|Ÿ%Xß¶H9ò™aÄŒO¢ô²ÌÒ–nv=}ìµ#ÍåMa²ÁÃL C¢ºúS/rq¼cˆ2ó?÷C¢{rót”´r +<óœÇ®Žt~¶ã¦rɰõO^×{»XWC6 prûCLžYTS ]¬Û %Õ·úþn\k¶Â:Á€O>u?Ò“”å÷.ßd–ùãsoUñ'EŽ´â€»›÷ËsÔ ü;R qEæûð˜iŃ—"æ óÁÜè=@¿I’å +6¢óÓq|b—)*3W‘èöÄUçÓ‚)*D7@¦äZM©Þ¹{à‡§Y9ˆ¹àDMî'[%éó놤­déܻɗ)*$uY¿±z5ÁVå(Q$yÉ=@øÔ%q/NoNÉ‘ßM(ä<)*Üõ&‰U&M +(ÕÅþ¨ÒBÄyÝ׌=Mý!ÂÁ‘ÿÍÙïé"9)*aÍ:iüš4Ò“q!Su•7†™(uyr)* )*ôY(•ßýèþeuÓ0~ ‘ýpîc9I}¶©Úäñ&|ìB)*®y)*?åy¸=@ô,y×XVæµ}Q(ûT)*;éßI +"¨¼•çÚ XH¿Ìðƒ—îÕ»™×«iGÅb¨c_¸ ÁVš ˆa%)*ÜÙ6 é ƒäÅ'Ì:fO‡Uw<>™î&ÈqU¨µï½ã™ A•o"ݱÝÇÛ¼VŽ%j=@õ#v/)*€?±é"çˆù &X¶Äøì• +¿+·‘•¥m~h_žÀ'C£Yü\‹"qpv)*­(Om©ÔNi4êeÎ\§Äûq»qtAXæÓmy¢í:F›6q Ì¥3!4‡²¶‰ë ?ˆüçüórµ<7&)*. ¹Ÿ±‰ ƒmz£q;³¹Â¡~¡a2 %VÓíÁ +}þ±#‘Ÿˆì)*G•º§¿oQ6ÔÔÔ”µ÷пqÛ/¡àË%aýS KÊÐöqHŠy“Á†!€%cüP ÊÒjl»Á«F¢Ênl×DÍNƒsmºˆŽ’|†ûZŸnL†ûÆlfÁSL»μ½Xt;òuØü»„ +ænýö¾ìÒŽ·žŸ?ˆT2ÒªÍ{äÞ~B¤R’;ÚrH$:Ë'û“;ø‹F«›p­NpÆì>žžMÚž€ÈsR=M=M~qIö‚ÙA¥Áx¡ÑýÑgöè¯Ñïí²IÁ;‰»%¿ õK…\r\¯õÿ÷û~=@ÀðѢȸÌtÒÓ\ +¢2r*³Äb¥Ÿ$Øh"‰¿›“Ãqjþ ÔdÔhA0„“É=J»­î o#!0À%§È§á±,Y/gÚƒ1K(ˆµ´qf¦Yyo4®[qHÎeMoòK<¦»ÇW2º°‰ÍMÕ;òOõ°LRÕ…²Í]>KN¦ï´]øä?Vì +oìò©°¹†œÞg¼Ï¸æD‚qÅØEÎTÓ7d+°+ñìg@ú^ªÜHÝNû9Y\à^€›èlËŠ²›n«ñþÜ~£ô·µ›=J«pZYN ÓCpNfô?Ü<ª[ò£n~ýŒïB¾¯ÁÏ^SNšpYõ:T½°Añ94FB +ŒÛÿ-I|àå\ìB’ÅFéo°€"F©ŠR8Ír°‹-<ÔºTN&‡'AÑA­ÿ½Yà$>l[î[ðb²¹oÝ|·ŽÍ»ŒUó~BŸfù¼ᯛ®ÝõL+õ»äO‰µ²@‡›wÄ”®µJYžŸ6;&v²»7XFAa®”ÀHÑ +b¹`‰ŸÃwËïc@ˆÉósÝH±v½€º”Tª=MÌZŽ ©&U¨Çie¨‰ç™®drÍBî¶,ZH€‹Ùúö’&)*ù¥CWCºäÊ~ƒ;Æ{s4L^KR4³È2nër»2#çˆ>yë E.`o¼d;pnÏo~tEML‡ÎÌ\ô·L1!lKIÄ<*°Î8~Uª}.µ´TG¬$¾~+ÓžœÔûHF,Ä~k®Üo"gnæ%òÒ±ÒÁÃK†üKÛ»….c®wRÌÑŒ¸Â¤Mº\'{=@á‘L €›i¸u=J¤øˆ=}9 +ú¤PXŸ˜ ¶£›HÎɭüFˆ¿ïØkôT/«Y9ä5zpbM¾Ûµ"Ý[ŒM†Î@kVq‹{ÍÜÕ/PYÁ±þÄ^ÖÕlh¿Ü}9oókµí4û/²§l‰¼ªîK +¸oþzRÀt€|Ò; «µ¾›qŸRR{œñml¸RÍ3?(Ôü™æ×-AYëlûôFoK@Li\T†Õw{Ö®¾ãFž‘=Mº œ™¿¾¥y†àüSÞb“Œ=Jí:²ª9ÏÕÝ÷†÷g€h<)*ÄðPƒ;rƒ˜g€?w +?òœï›’uByK$M{Á"¯$L>ŽÆ²#ãqu^C&Ôï²OFôk³–ÓºÖÙ¶nµÝrî ×npSPºÛµõ ƒ“¡¤kÍ@±x¼Ì‹Öþ­í÷FI&É(õˆÇ»;ç#iQˆÏçHW¹_!I5ƒãuîâý‚S© +ĢвoÀTÄfp¥TPfû<`Lª®rùŠ´CLÎϹ¯:‡û4t`bMO“ÔSSl\N~q.Nãs·õ&ÕPåKL€ô¦ûËrއ®ü\PôÿCâǶ´´·CL’=} ·Jã©ô³ï…¹4/xó1Ñ{~l&d¨ov>S¸x”½õ£WgÏ|ûpbŒK¸g@ÄËÉÒþsxm!äY`Í>˜°V޵Y=}ÁöÏÏT=@Cq¸fŸƒýºÙMº ‰Ì vÏKf΂úæ†Áo£5QØ–N²²ãœ…[{i.œHŽ…A}Ö2 ¼“ +5;RÙúöbÌTóðÜÒh:k3©þˆÃ»;…¨Ó¡ñ´%¹²¾ATÀ¤>³2SŽ´ûCXÊâÄptžJãTy÷3MÏO8|#º"?Fq¼cE¿?SK>|NJÎãÛ„ML†{˜òKL~ùŽ£VÄtÏÉ«/ëX‰¿…D/RÀˆìÒwîFq>xªFÙl¼<Þ2òºsÉ\]úÎm´¯lf»p3qìÏ_4Ȇíþ€Wp‰£+K€MU»Ìü1Y³lS6†ˆV¯NêkÁM2@€‘Ô¶‰I;%4e:®¢ÜÁðV¨¬Þ²“Ô‚ +q 8{„Ûqgq7ñ½¾ää|Í:TÊ;}ÜÍ-XÔÔÄÝÅö¦ÁÄÜç[µn­²ëöB%LƒŸ,nNˆ¿¯WÉ{~b OÀfõ·Oˆƒ¢Â»AÏuϼ›Ñ­YrÔC€>­¶¨Ù_¼ALÁ±0nƒiÄþûˆÔÔ[ÐLX¬¯}ÇBeÍ"m&B +u(щÍùvý =@&éÓ¤Ð&KVÉO$1ˆØ;›Ór»ÈžºSëCRÏ?_x²sŸrslúÀTžku$ØQŒØûI×< ÒKá +V¾ǵ¼Ï–\Óÿz†µ|tCL(0k=@ŽèÝò–¾E,ï4\®roÿ.~C9Ãrã|4Ø0€º†Ô-Íx+=}ÒnÇJ\T¬>İh_n›&îæ‡(‡ZýÂá÷X°\ñ<ñ¾iO#B¨Ëù„mD^°†Yå¸ß—Iiÿ +ú’p¹ßçÍÙбnÊÔ]ÄsOÄ‹§ÓÌ@SF¤=M ‰ÚïiÛ ‰·óø!š§ÆýߨúÿÄÔ7hÚ¯¸Bó¬ÅsÑx!Þ¹þæóþïÑ•±q½Wˆ•§EÝœD0ÉFžÝ!´LÒBé’³OŸu"˜ª™yÄ"ç #Éqß² +¬ž§ÝS¾M>nx­Æ›Þ— ê–‹•¹ÿ™FZðæ!Þ„ÏA˜5Þ„O–îžân:C“Ưòá#Õ/¢õP%1‹eƒ%ytÑ’•,°äbFlÖ£EÀöEÅåc˜æÃ¥¨7LðßFĨá_Gk1h\ýb±,öø +yßçÁåæ„ˆé;³9:§hê$sLL(‰tù{ŒSqì†ÔžœÀ.±þu¿8Îøu²²0/ÿÿL}n©©~PõI€6õíRx³]ó9ÊãA³:Œ©rʶ²±#§þ×IÙLzËPhO.ÁKLôq÷ô¸}V£}UÇžõ# +¦û;ò\b¿/µ£*…ëò¬›:FmAL¥èö=@äÎD¬¿I2Ÿ÷ÿа¼ÜRñï½%Shý`Õ+²²µ°-ö‡VÜ!Dn]žnŸ´³Kü­æ6o¶½7"Œ(žwXÿ¡áÓÒbMãÆuüÄ‘ßg^¦,ºè6h +˜Œ ~ŒfÁˆÜËFqEŸŽÜÍÑKœÖ”¿:÷LdÑLº¹9½µþû®ŒNu‚®SŸ+B"âŠfø=McÞmiCUNCPö‹qCŸYÕÙü$¡Ðq×#¹|u ìÜèÿ+GLøn>Á2SS®ë¿WCLRÎrCS +û/Ox“ëCSÑtt¼¶è~”¶¾9A x®L†li;M|¼]#¾»‰*ãsîÿ|q[LÌªÌ `r6µ +q I&»_„E#z_?Ñ]Mט÷ï¿:§5=J¤÷¢íH±µôïZ²"£Æ&èµ íÕjNLàÝÃÍ%QÝ_Ÿ,jYX^™Ã$ÙÏBMa÷'uiÛšš‡ÊêdðÁÒ Æ©˜Ç.>^*æwN¸ŠÃe +±cYýø¢¹9Qçåße‚ýp°Ü¸ÈÈBž÷`¬µoóÄ“T1ïfð©W!žŽégø;=J½Û$vÞ©ÞÁè}ð|¡’‹ ó]ˆE"V=Mëžùé)*oMÕÞèí èÜH^Q@±|* –Eè;)*–Û¦´ék +'ax)*ý‹Ï×ÑÎùéŠXÿ—¬{™:%éÒ VÑ¥“SÎþ“°d¤—a{îb¾ì–&•hƒíçôe$Ö¾ß>;¦rò¸cÌ»ôc h¥èùô&àŸù¬]£áïÀ°¿_§Ž]6_¾ÝŒ`"ûî. …Y«$¹Û­þá—› +pd+Öõ¾ä0Yœ˜ÁÈñ­©ñp$D¼ÌdòÔPÑÔ®Œ¬[Àmº‹·÷'@¢ågƒåK8ÅÖq{>ï°[oþõË-"uÇñ•­æ!Äíb=JL†í ?ÿOCÀc9öÝÿ…W›œO̽33¨RG1è?+q쫎L|t<œY"¦¾ +V>­R€²‘[;othY6¢ü@Lg;„°“Ò,Rm:!OØ´²²>§ÉML&=@Æ=}ÁœÿqM oõâ(ÖÐÓ‚=Mp3F›÷¾ïòf÷Àê`ÜÇ$ñ™^”1=M|CÁN›·øsÉó®0æ(ýÜû| õˆ;¼¹v +7LÂ&=}¦¹"o'›„ë¡'È–ç=@F¨8ÅqXÇx÷Ø÷Ø~¹Ì¨t‹© ² )*ÅO¶:]‰­ÒS°[°Z2 +î* ‹&C¿L[RîÆ±O\ ¥oÔÉ=J¦Ë¸’ïFÓ€q7k:ÙG}v§y{L¶Üœ!€ž +°–:u{»rC4ÁDkB65~–°ÐÊšñ8{>^Š¿§_€âd›@x[— !‰üeb áêÈrüDˆO$¡ÈÌcæõNÔ´¸>²zXƒ©oZþϴ烈ñ,/q`p‰\WCS"/Lt„CA=}yfú;=M)*¾“:‘"£ŽµsÁÓl5ïIÅ?U.©£,ïÁ`oÛR;óHƒs¼eÜãŒcŽ‚ªiÄX‚­~ªÿ;ë^êfª@™{Uï9€ +Û·™ Þ|k²)*U´üÜåc§‡ÏËœÒÄ¢‹±Å]ºñˆY›ÆA˜˜X•Yëّ߇›&f‚Ì ý9·O±„¥%bþç­pÕI¢ ÚDwiµâ“¯ÃÏP)*Ο›&©² ë ÝÁºÁ·ZJ°Wø +“EC†ÁÌž±¹Nˆ™` ”»rc {»«€§vuì…SÔ“]õ{¾ÜLJ¶§ò=@…`²{Ò=@S“겚MY[}ƒ„îc$÷Üäl=J»òHíû‹à` úóñBâ½AUÖámmÎõ‚&”¶ðVÝŠ&g?†ˆâˆÒÈd{=J¸ +A}Rp|Õ‘8yá‡Ôʾ„ÀÊ}šÂ®n*˜Ž'C¤ÚŠæ븨Zð ’Õ‰t6Ÿ‚?¾°=}q°î1û™éð¹ð¡C˜˜$j@‚º"uÌ!õ{»m<#»ü³.rÃ>íÙ3˜È/YÃŽúM»o}t´ÞNtÆ +S<Äpòó}ŽŽ³®£R`S<>†À³CV üدNŽŽ±öÎt_“~®²Û€ø4tÌ\Ni®ºûCRpˆNML{Báo O3¹Ú<^2ǵ €×¯kPkI³?>!%L‡ˆ†õmùmOýŠN²X|ïïŸ+œÅGŸ+jŸŒZzN€ +êR{»òʳÔZ¼M—ꃓ?—p!ÍæúÌ ýqHE2Ùîס2·L‹Ó+¢µ÷“77ï=Jè|‘¹ÉäО"i’ßdÜÿŸ3OÄr‘×ï ªD@ '!@ã $@8øM5c¥×ÄÄÿWn~žœu2íô|*…0¥áy`è +P£Ä=@É6D¦DØÑxjd® óO[Šï)*v²©ˆ˜Çö^ïìTßHúq¨ëóÙlšÈÐO78À=}Ý¡µ Uµ)*ã+]IÓYG!^¹1Uw/W6{$`ÌŸpb¾¼r†~eaXãYâ#ÿç{.ß}ö~;ý妯 +#ˆxbèÁJÒ›>œfú÷;ýælqEr©… P„o^,bT¤D¤ìŵkKF\;=J=MQzKPÅm*úD›“Äú+€ñr:q0—6eóöx—â½]#¢Ç£œ åçbÝäØÑ Ò•_ƒ¢þ[}bw{j¥»·ešnÖ=@A¡  +ˆT°å¨ò ‰ÞGÑû—Š_,‹%jK4 ¤„ÓL@ÝÁÏש_ ÷ìEŒ¸™ÙûüqÌ”dðÇÌw%½þ*y=}ðmE‡v+ÛA‘â"Ç‹? ~’#ó “•n¥]Ó”D߀ÆmÓ"½OÈ\5£¥ÙÛp¹/Žûý{þ +þÚó•ß K3SÔ“ø¼t¡a3ɨç´%’ýŵ`È78ûôd>-[~ =M¹<Ä‚×J§ÇïŸ%Øÿåh ’˜4°t£lyu'ÿ”I„SÛ?€†ã¢¤ÏÔÿœ:œ&Ò³Ì!ºQ´@,{Fœ$¨MŽÆ{ +½ìk´øMŸ’¼‚Ñ®oе@h¸l&ô@È–[ÉÒ»?/xfØ{âáâ ‘AÑ Ädga ‘ð›гöôVöã$ÄoßdwQàDÎ}Og`·vó(Ni`-ݨ˜Ü X¨Th7÷AÚdF_IÞ_‰'ŒÞ¤u€7ª)*V¨ +@„ ë:ù SÔSÓîJ¦À’ˆUå‹„ërBÀc8ÿ =JëÍÉDíMCbÐP†â§¨é´õ‘äÍn¯~:NïÀI©õÐÔC~Z”e‚?¿ÏuÍ|÷Ô~©åγï(Ù Ç «¤ˆ­ÜØÿu³Ò=@{¾ +ÿÜ=Mw™íìôÍßéÇf§·9UÝ^KîþOÖÿÏIdıŠé·Ã€»3'àodôB©¡üRª‰ìöKµ4ìÜáýo¢KXQ<Ôˆ^èk·Ÿ^߃‚Zîoº5²q†Á¢\ÂæHƒS¡G‚¬®.rªÐ¾âzqÅ]óM@ä@5÷¤m +6#§Â·x¤û~qÔv}~’ß&whä¬ÐúçFÍúÇ$Ÿ‰Öšq•±y½ç £§ø—)*½YÛD³’äå'Å Â ñ]èÁî(6®)*í#3)*OØ‚û´ 'NÑù7z{ty.ö‡˜Uÿ¬á±½^ˆOËmN’;ȯnÌ\ +„¾¼L+M‰«f=@Ø?Ž:»þ¡^·´u´C¦ÔÿÜ\Òwk£{þŽ×>|zÒÌË+Glr²òÁ`w¢ML†^T^¾cA¶)*¶Ü{ÜÌ»ÁošqÁTǽ[æKYr#Ø=}êδW=}>މëC©~ojNR£Ì«9TDÁ)*åL +ŒG€uæþ»4¬Á¦ó ïÄ1Ïkj{¥6é†ýž6ᇓËþ”mëNѯ¶ +A=}®ƒF¯š$˜'f ƒ$ßzýºñR3È[0mµ‡ä]áÈØ’oT~§ÏÖüŸ8×tܽçs{yfóM[îQBe冰'Aõ\îÁå1b%}ÿˆx워žú•º~Fp8ñBfxVxYEY@U)*åxæ0½Ù»zþq +C/}²º5##„è(ÙÄLþð[®q[²#P–šÛ`pW"„‘ÇÖo%þozKwF|ûŒ 3á8f…‘Ü“Á³“YCsVü6šŒ7áªÇ)*ÙÝÑôµ×“íÓ&’u P+P™uä|Ù÷a ’ß„D²ðÝ!´´¢vˆ3!,2ë +2‰ädÆâÄ õ)*ÿþ“‘t‡Åþdc"œëo¿~]S˜I;Éä"ç=@1á0wäQ/Ä]{—_8ÃÒòzû°:8öŽ(åá¼#¥¥9‰ßå©}%ya‹ŒHúÿþ¤àßÒpZÞ>½Ûé¡5²7ÅÀXØý‡ù0}­u¨ +ù¥¤'ÜüÌÿ^Ø÷}€?NèDr¬”ԅŚђÝíÃé¯c!€vD…ÚFÚ¡c^ó4Гœ ›ÞšÆâ‡Ãäq? à&µdùËh‰±ÏʼnÒÖÝ€mg™13TH`ÂÖ&:‹–ۘ߸]qç©ç ïˆH9Ë}}~776 +\uqu‡{îö””CªÆ7)*°ñ=Mõ'¹n¡ÁH•ýûÛ&c,;EF‘ Yë‘Üù&dé"®NÍ´kcÓÔ°wmªn>Û=@*Z=@éYäüeGCÒ™¦;ý¡ó0\SÓM·ÄÔ´ÔcMEç®—Ý(•„Z¢Ñ=@‹Ô +ô–žôí=}cb9j+®X >I§ÙÝW[ d]ó‡´g¡vØ@Ñ3+ó_^ù¥^½1Ò=ME @P›$\ÄÌ [À=Jäïž*§ž^Ùw:tÅ‹NœiS5µhÁµY‹  =Jͨ”d¶ägVŸ-sqquSœx,vù +Ý£YOŠâ±¶çà÷€,­²Nï·f¨:#é?È÷SÁØ íuÏÅ §gr?xX†[Ý¥Ñç¢Ú¥ù1¡p2¦C_w|̹Þ<¯F„¯Q¢ûT›¼ÈÌQèhyÁý¨Íßß¹þ&ɉ)*@Ïuó%U ïŽ~- +Õ”n[~z=Jlz5f×"¹»Y¨V‰¥ÿb”¨÷ý ÍàžŸƒ‹Ëÿÿì#¼J¡5‰å( 'ùà pè¤ôD›×VÕ°´ÁçÈ)*<Œ²†(õ¬ãÕVd6Áü¢Ôâ6Àpê»}êé'Ü×K =Md¬A¯4TXf2­ìn”¶³ +?÷H†ÒkrÁŸŸCXc{öÎв٫Gp†Òmî`"LNšMål†õÅQŠäãMäMåV½Ìf»}÷F®r F»» ý$RSCÁ\b…Üe£'Á7è¯fLé~ÉÃãœo–3¡ŽqÄfÁ6÷ÿŽèÝò–º¤«þQŒ»Ó +ºCJ–ᆲö9†À¶°i/¯úRœTHÌ’¦õz¨à!J wNÆâµ‰ÆÆé1§=}1÷* c©T"Ùés²ÛDg¨»ó8¬à¶%uÐ~bª}t~Ž÷³6ÎYóRâŸ;‰pT¢¯å|±•_wqæ”Kk‡Ò=}!`ÐÆÊ¤² á7¸ùGÙ¨æõýí£²£ÙtÁÎ ½~ü_¤Çrµ­[r§=@ÌÖΤSB†ãŒ Aß$× "Zý=MÞ + äÉߤÏnÿ‹¬D½ðØÆø2Íå=JYúç¾kƒIsûh=@ŸwQkü^ôÄ«=@ôCžÂîòù‹<·˜ˆÏËíプuƒý“¥[aÕä´b_€ÐÖ‘¼Š@£E¨‘äÓÇ’Ù ‡‡ƒQ”'lâ%KÒýv?Ú +ñƒ>q6›>ªl3œGà§¿‡š_§• ­{W6Ó áåýpfD|ýb`›S8=@Q$æÉ¶=Jù½'ÓüwpgU'éïüÍ¿ÈÞP»³·ò« ;Û8Vçg¸§]‹½?ëz•UP%güŸ*¾e=@¯{wWW2ýóÁŸ›B +ÔÌ•9Z¶´›€ÀØè8)*lUž=@“‡Êù~ûÓŠœ¹ånFö Rì EýÀL [€ã‡p­àDg–ݽ}´d×=JÔ¸S—2Ýè{=J(Øw¢Ü â—È^R¹øÅ×ÿ¡aàÄÀËÎÈ‹Ó2*l(Uô(yæÃ§ +]5µÿ%Éć®/fz÷8¸Ÿ8Œn=}ySùî©Íé¼##§d ›¤Æ‰óü’‡ÊýÞ‚´°¸ÀGf1Ø[š èõó‚]qï8™¼—Þ»¾.f†ÉïŸõy˜VyÆGÒRî•ÓΛXj(€¸ùuusÐÝ·qFNVw_£ +í(€ô‘?dËâG¾´q<P䟹J"Z9§uy”f ye†­ÞDp¸FDd¤”¢q¿¸e8È$é8õèúSͬlSí®hŽ–÷'€¥‡Þ ÌIIQп_n­x}”|1"ž«›Ý'ëÃ× gq๽²A—esÒ“}sx +IÜhrî£öèˆu=J²¹i÷#öÝ¡=J%_Äxþ§Áþ:nÙ“\7wUpv\ehxð &͉‘Õ‡ˆ˜8èÔÚÞt‡ˆé{4‡pT‹ÀÄ+ßsóN¥CfèXÏÈ ÎbÚ=@Oÿ_d·zÓê”O¶p–qA§×$ +ÙÑBâfˆ`‰–9åèʼn6çþ=MSʼ‹¯Ð6U¤o=@gö7%¤§µÜÄ·`ÍÎ{| 3²=M…wKáÆ€šÔÌ»XÕlKÃ2ÛlK3: ´qK!¨Ô‚ù^£Lú»LC<Ç=}ròÁ9eqº´Â|\XŒ†hµ‡½{ëlÜ{¦Rùc›pÉÊL‘ªâÕšãSÑŒ«¢Á?ˆ˜Åf=@Ž\F»0LO/+L€k® +ÜŸ[xówLJްÆ1W=}˜*¾Q=J–`“-OXB5N‡ê¼×GdÒœÇÑ´D2'öœ' åæè ”¨ýÛ¥GÞá5ë¹Û±ÐÓFÈ?Î\Ô¦ Lˆ8×x}+ºš.›=}àa¡‰Ú)*ý(„é#™ƒ)*Óœæ<ý + ô<,Ñ 3ÞfWõ•aa=Jén"?7’°l;Ͷªv²”¸\6`I´²V:m~ëêj#-÷ô(§`p¦aœd_€Ó[9D¸‚óc.È÷©Q(Ó?ökΔ>îZ»°vÂX @†Ô´×ùómV¦sÎÆbq›Hy +5Ú‰›©É1О‘¿^›özí¾qô¢ÇÂæ=@}Ë„üÔ÷f±+79ÍÿÕ€Þ„Ö$Ò {}òœà|%aÁÉÞ´q‚yÞ~±ÔzñGbŒÁ>êm©ËeØQXÄX÷?‰‡hÇ{„>Ÿœÿ€þF_<îÍ*ð%³‡¢ +cþ©P;ÍÛ%f>;ĩޥ}ÓÞd¯.±orœ~]íƒB øc¶áXÕ'!ц×f‰Ñï p’&ÇPÕ× qÝþï{‡Ö}rZr"ìd¶]=J´ÈÈh˜èÜÝ\ùAÃ_mÞGÕOHÑ{‡(Ï ™‚´àqÙdÓRÙ^ +›å©7Ðꃨ¹&L ^´¦©2 Å”ÅáÅ%aØþ”çÃÄÈȬ[gdÔm¼mSòWô=@õeÆGöñŸ°ý·´éxü²^ËÒý޼ú€&jºBëɧóãá Q@#Üæ?„kž÷yzÒy²„”ÒÔ=M§^.ÏŠ +Üf˜÷R°÷©`¡—ÑæBð¨x¬Tg@ܸ¹pÙúÕ^ÇšðB,ÌÌJÈÀ:¹[ßèMw¨µÉ°†µ ÉÛ’µ~þ=}á^ìqñ”úKcMì‹ÛaÑ£ –Œ§Ä LÑmȹuƒ…_=@¿umÆp8ï«aZÈ&™ +ŸMëå÷‚_?}/^Ÿ›Fû­é=}àö£·Hxèœ÷*ò~ï6íð´–nµipbqÄÛäiݲÌûå_Ês=}®ÑÒÇzžbn15e…ý—¦äç­ ü¨ÛyÛ¼$9Uþ“Íöº´TP4o)*Yä^®¦ô“ÆA÷k/V +€Ñöθ¾³Žprª¸ËN¡n£¦ô=}Ûœ€ý«r¾b?ã2nÜzo™/L†Ì£ÍỌͽ)*#zÔprl<|cc~o˜MLláprÌÒx²rºqº ¿$4oòâé2˺%ØìTÞaT ŒãÁK#éO“\dˆ|zfo—ö»•ŸÎ +N¯vLˆ;¹¦§ØÝ!—¶zi—6:!³\:â=}ip÷€=@øËF„ŽX†”p@J,a‘&æ=@¥„çËhÍÒ5ýì_±œòÉ·•‰P ÒͲr•-FÛHJ'f¿Yk%˜ÝÂâ øNX¨â$~2‚'߉I9æ +wºÁ_=M@!Ÿ……d²S ´å·%æîIa¦Å ž!—ÙÞ½'—R#ŽîL‡næÃÖ)*ĥ๕¬ë Ä‚¸\Ñ,ö£›éÄ¥=@Û3ÊPm¾û*³5?(Ç`y ü=}1’Œ»îpMYv¹±±÷g‘lñ̽<ÑÏ\œPEÁXi +´é¨ùŠû•޾²ÀXHAy¨ùìî„=@½ÒñÒ”:ýì1ø‚¹Ú÷†m­Ý „й­A6¤² õ9”½ÄrÎò-ßlC´x:¸C§ œ‰g%k[W„bòª‰IzãÚ鿨ùúiɺù$Á5{‚‚Fm²œ*ô…î ‰ +§¨2m}Wf¥ïbpœò1¡‹!@äI1kÑiOFÃ*sôj¹½ô)*ôö=@nþ§µD×Zñf©5J[=}«µ¢óó<©ù$L£÷Ó´„ô3.â6æ®A5‡&Y@$×{ÀãÒù1¤ôÈŠ+²“Ú1±¨B=}x $‡…åùÍõƒ +p|7nO^n JK·ÇÖ‰ôäD[p±D˜^q2ïJµrkòhž|¶ñ?Fî‡$<öƯ®# Œ¸·ÛŽâÜüóG¦AEæêX\v\çÎŒ¡ùä²TËTÔùI‘f®ÿ[ëãò¡\ßuã÷ìæÂâ…¦Ûë× ¢„ˆéзP +Ïo ÄDªÐÄJì÷»ŽA¯õ$Ù^d)* ÃÛ™<ï%y¹Ý¤°Ýtmo”RRHèØB“UŽœeEi`B ç¢SÖu¨Ñfž>ßDŠlKco¢rê†ã²‰Ù€™vãß_”wb•ž·}ÊìKÆÓ³"Ÿ6 Œ•`UïµYdà# +[™DMµqÐÏü’)* Rй=JpJüi6GñgãÆöéO‡á '}ű0f„xÄ>p1F[ˆƒ8j“Û¨Ìù•eY˜öfM«qv=@ðÊÒpâTbcZ—Âåá³³'ØÝόפ·a””K¼ÈÀI!k ¢åOüÄTÜÅd§¦¨ +Þ$÷† @Ô]ã³Ý^™F<…Ô¡}ëæŽ§=MyÆŽý^"¥Öü2ðN­e?Ù¦ÕëIôüa¦¹mÞz }|”ªÍíÝ Š[P¼§ðøè©©A=@iY do(™Ú’G×ËåoÍ“ÞÞ¤Æz|ò¤¦ç +S À\8ßÄ!Ý4 âØY¡ÙãÒûäh ”D* Ô§™yÄ3Îý Ô´¾TÊJ¬ñ¾Èý ‰ÏÂå±ñ 3$Ø•·7p¿}kPÇpq{6$uñNñ˜ŒP³™Ôén ëµQ%‚?ŸßIÉ¡Òê°sJd£-· Fð÷²Ÿ OõF|¼L=M€š›"‘¿ $`õcš +ÏÓï[ýíy>ìûPâÚàuqž6í{[~t¦HJ¶¹P ˜ÀÝÿî»G`M2«=Jƒ6§Gòû„Xº!«®=MÑRм‚ò˜üE݉0óÊÔ¸cðÌF4KKù²™É=@=@˜²­¡öÜ ï}œº™2­ö˜¸ì¨¼”¸[ +¸Q°;=MèžšÏWonI:ªpƒàóסòÉüÌÁ?ç§E¼Å锟?û)*Üûð[m¹ªÇ$‰QèõE%Èõ$ú5)*:§Uð$DqHI\ÐdÝ[VãÜ€gÚÆi˜›\õ<:í%Ù$xWe“¨QþÝý¹Ó®ÔÒ +ÛšRêµ1J˜á‰}¬Õ¬çp°]~A¡ÒbêŽXBsYc_Ù²%Ì^#Õý€~p¶¾&r¢¬W·ÇÅ$ËC„¾¤ß:mOcO¸]a‹0FxeÝ"ÅsUþÛÿ:q:ý2;åÞª ç({éÜ#)*v“%‘÷(TÊþßÈòs³!ëÏCmJÇÅ1Àð)*÷ÜíWšÑ•¯è÷ }ïX ‘vÅ +v7XÀµx3ð;2NÇĵ¹´Xç§öš¬Ù¤¨Ž¹á_û =Mˆ¯Þø"ŸDçnz&Θ–'~ £™ë£Í­ÔýÕèüß32“d‚¶m¼£®.j÷ eY§wæý¢û>GæCLÅk®òÛd¢0&Å•dÒ®¥Û@„Dh!hOG +xÄZüò[šA=}½PX‘HëO€Åó‹ÑTC̰Mª2ªDø"Ú ÑC%¯½lÖþù3}÷yy½Å^°ë/!è¿.BDçbA¨þ ½ŠU3(€ß)*¿ÿ’ŒÕ刭ݤŸ[qy}Ðóï¶pd¬AçÇÄ +ß¾^o… £Ø¹=} ß—wð[VSâj<‰&=@”=@=@Ѝ¹qwyZÝuHf˜!ùµe_ÖÔ;†ÐËû¾=Mkp‘P:š š“IY=}Áv}’¡>¤oW7¦O~=}m||¦s"]@Yåž&`g×>1sÖœ +SÔÒ =J8lê=Må`vÍS!Bž#_‡5}Äw‘r½ç“ýŽ"=}¹´aè=@Kõhãa™=}ÏáßG]ÛÞa”ôä—h±~ʱ|Ϩ¡S˜šêÅ <ˆsõÐû7\î…ÇþSÔÕ”USº›¶¬lUcœ…“;£SõZ@Í +..úºGjŒ=MPM–™ü ØÓïìý ¡æw “wszHSÑ+;¦FÈIsax¸èˆSûXâhµèüpd?F\0QF¢¹=J "ÉhÀŒïæ^¹Þºðœp^\f‰î‹@â(ƒ(SÑÚºåje(`FÀ¦X=@Y€ùû Û÷‰'“ÊD«ÑÒ +Á=}KõÀQ @#Ç&é_ùïPå‚s(ÜïÁ^ 9ñÈí#Øžp,ëÙý~íMVuHzäÙ¦&[µ‰Ð=}KSm;Q=}¦I¿Òç[Hê'åuôf=MÁ]c-µAûØÙt&R'ånyö‚‹éýɯq@ßuZ\+I=}× +g(BoÓêxMï°N€=}õÉ´g®œ”fÍ÷wô‚Éï¡ i5êω"O÷¸N‚ä¥ 4û½"­; Ý)* îë"6#©öãHûxÊnrÁ§"…/YÑì)*£g¡Üÿ¥Ô 5N hX³íYŒô|=MñüÈ&Hÿ>Ï +;y D¥€¹\Kòjóg‘Ì<\#=}¿2ò#~ùw;»T7;¾ÌÑ“’r#~o]ÒÞ£$×Yœh¿EHÿì\¿‰,áC(Õ®q[ÉöåÛÑ]iÑ.=@$A[Y4 ;öî†æ ÄëAãÜ?ï”#âšÎ²Bâ˜fÖ-¡,1©Ø!ƒ +?•ûBñ.»óVì#ŠW3ã°=@ÜÌ·|›þGfŒk8fø¦U.¹™©ž‡€õ­NŠIQ¸øˆ;{†T”°”“ËÑÏ=JãG! C–üÐͬԹ ¯Ÿpd¢¸8åµ'1õ•B=}5:H¯uСšÔ¾µºOV õ» + ™ïÁͱÅGs[ÔÔýKÍDÌ;¹¿Y—åYP‚™>¼K¼AºµbíYy|©¿ÇéäÀðæšq2¹RÙ÷˜Ù JºË¸qÂö¬[ò†ÖF •‰ËwƾÝpOZqñîØeæ¶ÉÌßn@S=MS²Ò"² ‹,¥  +zÒ‚ά©³6N;îM­C²ÙâÒØFý;åQ¿%AÜÞž&};À‘#Æá‰Èó…Š·Mqº¶ƒ4 ÓpШ|/¤PCÍSöu´šäñ<—œ–­ qMȑ'AýÕ&ÞéÈ!û(ÃѺƼqbv"ÂBÀ¨ã‰ +ˆ­¤WfͪÐ{{?ñ\` Pà"(4ý?ßDÇJôű27h?È qèïܯšŒóv›Â2Mfn=M;1‘'5§&¾`´#Ù¡ËÒ"];ò,bÚ£§XÅ?÷ËwÓô{|íy>û±]Œg˜¶÷#ÔÇm” Ò[ðš ôK=}sG +ëÖù¦¶u¥äÔü?ds2‹TÖTLÑ=Mpô'5™ã6“¹`Ƀê=Jûâ{Œy[-Û½‘ó¥%UD’S“ÏÖÃ~ñKôWýŸÝ¦?ùm qtµ|·g+:zï^Ÿ_ýò 2 B7²·Éý¦€Cæ?´è9Ç—» +Ò?gŸfû6¦ÿ^¼Û¯ÖáXèy†{F qÏß_³4áÝ/G^îi@]†Ùü)*…Yx†{ó¹÷òšþmgFfHSi,‰L›õæÇ¸‰­û» “çÕÈ['Ìk»+m?‚!€`"˜îhùä~“Þ§ö {Ï µk¸X=M^^õ +EQÈxv UÙ—†CïäÇz²ýq^\Ã+A3aè ²ä ùu>]ÿswJ¶ËJïQFKÂ(KeÝSýÈ·wY~þÍÂËÒ*棵äààõ`ŸGY“QÏIU=MÒcLÑþ 3øsƒê« Ãx‰4 GÏŽú¾Þ# +..MGmµãH=}µáåYÉ)*0ÅÆãxü{ÿgÌ%hÀ3lDÔ´¤çT-½ëNºþÅî9¡[‚Œ·5'ùÍ ™‚ËþÖ°¢nei²®œ~­wí]åf¸ö '[¥¦Õ¤±yú# (åEmÑ ÜÍ=}nÏ4ò•½fï{nFy +yã®×1¥À‡=}Ýõ ^‘ïú ­ÝÕþ¿hËŒº£›¿ë±‘˜µ™åíIˆÁ#àß·8mS°¦ª´VQ=}‹,¦IÉQ}~Œ?GÓ÷bñ´Ñ+½-ŒZ·´ ååe)*@ˆ”ù͉‹pÍMÝ-lN_k2¹<6¸½A +=M$V•沓bB„áа‚ñoÐ~~2»GΡš»îsÇ&Àñ뉱)*#ãØóV¹Í;üõV­Åð,GDÃQX•±ž²é’å¡1<”…iî¾D é×À½µ_)*Ž%‹ÝÍÄ÷–HÏkJÆLPïY®FÄ ßÖ%Y +vŠà=}ÄWË{ƒÔmwëÍþù3r³ÎÅ"¼£Œ)*#ƒ=@UˆKñÿ€€}ó‚Ÿ{9Q.‘!©ŸÉÞÂKú UzÆ›ÄD‡tkV²ìdsQÝ7ä×a¹Ä#ä§Qñ]‡=@Ìþ©ÿcÓž ·èPÙ·60X`‘$ˆy¨ABÔ +&Dß)*ŸºqƒÄÇtÔ¸6„g6l4RŽš ’¢Ü™M(7û¦æçaÝA—xuß^ü qÛ¹¬ÌØÁt2”8ué9±c³9wÖçgßZùf@®MÍõ¯2è‚Ý»åÛ\#ÜKT³N±[îã#&‰Ð=@…óÀ¿Þ$„Øö“©Ü#x +¹…ÖC&fÆIÃ)*¿¢›©DÅ‘Ø<p¢^ýWVßB‹´U¶¦’ÙK‰à ÅÙA…Џ4͉cËRt˜MÁ6«Åó×õíáÄìE&6P/¾¦ƒÍ¨|’6pq½ÝG:Ù/n>?VN;ª»½mOcÅ=}墵¨¸DS +ÍÍ®Ž¾ó¶(6‹Å5Ÿ›Ý`=@pz¸Ä¢eþïïÓ»ø=MZ7=M¼e‚±Ì_??/^ÿ/7wvùºÈ<Š qçæä®|;ÒÔKHt”´›»ïÎC£¯ÄéÅ »ÔtcÔL;¶Ó6®pB÷·õÒ%¸kŠÒÁf“+8{+Xp¡Ýž} +~úÛ€6YFüŠj¢&s3ñ©iA‰Ï¿[Â Ž­Òþð,o[¶[†â¢›BØ éôÑŒºÀÑí¼dË)*“K£‘ À™J¨wÝáÝÔw£¾_BTFÍÑÏ®Rð"õ =}èÝ]މÌ^ûCoOh‡–\=M+æ¡¥×î\”ÍyA9MÐi +7$Zò)*]éŸ+­„ ›S¯8[¿àå½罎|<=@̹¬m}ƒ2»i8f#Z©©ÿ?³”w’”1±mX†f0‘ Ð=@p»†:ÀÕ~_I<ÐÜ’tp2޼áÅá'À›r„­‚ÔD¬DÓB±Õðx%…„z|#=MÏC”Ž +åïƒé/ÈìZù mãq¾hU­p'œ¡ Ü5A“U]®¥ùfæ×FÈ(öÑŒJÑØyP|?žú²À0›Åfc%ˆõÔÿZܶFf¶¸Lïøu]‡`^¬¸ÛÔ7k6ýýw:Ài8zâçàç¼Òü4„ÿ›}~?f.nKPbEVÉ…w +lë• 0rôŵíóî«èO)*÷L¿‚☸ʼn\ÐòÚñVB ç& …P·PÛiëFb«¸¨0¡ õŽÿ:Õ{4¶², ƒš"…ÁÈsܔ׋C•ñ^½Ž¦;î +£ÓÜ©Ïé÷€óÍoTÌ+¹¯3c¸{òp=@U$ƒÃØ·_œ››ÑV*±Iró %˜ç–`“7ŠûƺöFv®®\gÍ¥ž™ÔX´ü²ý²²r:8ƒÀ#e#M¿r LÔ aDt¢¬¿ðs®½™•ô#Ë´Ü,(2w5ÀL#0=@zuÜ%iü±ƒ§bñt;ýõ`{ƒ=Mïá‹¥"‡¢¥üH)*xïè‘ÒË;;Ffhu è +#”¹;ï“MHПÊÌ}œäPÆx覔#°c¹ÅüfÐY™Ÿ'-ýÍx‰«c!^ÑwV˜`hK݇ï&WäÒoš=Jë½lUì~ÿ1³8qð³ ¦©0{Í©¡pƒuBüòƒýª J‚Ã$=@¤`#àÓß4’CiòsóÉÙq$ÔÀ¨=@¬¬ÚãŽ<¢`±50AWÄ'ÐËŒÑã=@w9¤XFf[=M0¢Ce +àìõºø¾Ÿ¸÷ý~oOŸ~üo>bqCƒÄ ˜Õn“ÑÄD˜ó ¬± è—`Áè”GÏÐB¬CO6'YfØx=@S³é?=MàíÀË€ÅuîÏÔýìd$Ô“K½;¸˜=@‘¾Å벜ۦÀ’¶Ði͆¼LØY4t +$§nžÒÌÐÀÖ,T„µ]w=}½`(ÕY§n…HÇïâ¥tÐѨÍuÍãóyy|¦f§Lùæ‚åb ­Y‡iau1‘MÒÈ[4ìÐÕ¶Bm²ùôåâüa‘¬þž"Sýeç7‡‘4ÈÖ±²m³ò\•#ŸŒˆ¦‚Þž“Àâ +˜Âé’m>¿~$ɤµP³Ä¢É\©¡ˆîøã/Õ£2’ª¹ zûïð¸cOà'd£礇(C¢_åSèðk°¯Øþ»ûû¦§dr㎾hp©s5ÜíV‡Þ¶ºÔ©ñ’ÔS…Þ‰Äf}hËNàÐ\² +ƒeŒ…V`÷5Ö¢Ãzz§ª”éÜHñ ĶLì*±€Qôã`ŒÜ=@áLÅÝ)*!}Ñs‡0µM°cbpÒ*Úó©1±×Ä»@´¿—M:“MÔ±Ú„×Kò;.ª;EæM}A Ñ)*ãE'ÓüäaðÁz +$pÂÿ|0Ê=}x\^À`@™°ê(©_Ðè<ÈâŸ' °ÑÛz€’9ÉŒþµRêÌÂÔa5Û5çÚP ³•(Áƒíÿœ§‘Ý^^DFÑŠåV'xD“åæÂ7mHX8L¦É¬©Ã¡&á÷8×i‘ÍÕüRq!ÜD§‡€Ø>æ +sÞ¢P•©8ø…5 ÔÙБ”“d÷^dØÙÐû UÚë_G]¾«%\3·‘M"È"V]’’㘔äï/HÛË’'¿Ë4³Î²Pµy´cK[%=Mô§Õ¹_Ý’hü¥™Ô ˜w„ÉÞgøKÒbâbo9b%²U>HŸ÷š• +,xa“ß„ôÂâLkUþçù:•4ðÌ7Ä@Û.ž_Nžd¾¤ŸŽì¤¦ü½Þ°–Vî+†gˆu!BX­=Jù;¯ôó0ËÖûû÷y}5ï…ÒzFø,‹eH–ïÝ\$ÂiŒ#§ù`xÞ[ûÿqÑìq²ëå'sᥠá£Tg +ÀB¹<{¸ÀM: ãe:`¥¥×ÃäñŽx4£Ÿ'0ÊЮˆ9>™E®í@ºu è¡ì!¥Z¯ÓòÒ¼[Æ=MDöu¹î÷÷µE]èUï½÷šjÒÒ¸dŒO9¡¶Ü›¾˜–…žf?R×ÄŒ¾"âf"›¶†Äö!¦äS +ƒ”SÏ·°Ú œXS&aU–îW¨pÜÒ<}¦bޏ””F Fö”X;±˜—¾ÑoˆOZF]>=M´Ye"³$hÔª=}B%ã‹6Œlp‹.Øi¤)*µžmŽ›~+H†}·ùFñA©Ô]^}¾˜~ß«»·ô + hP™eå$Xuwâ3UlxQ6,f&;·Èl5£iûŸLT´Œ[H ¹ ÓU^À—Ø©ÄU‰>.r=MÊ,bñP¨YJáÉWÄõÐ`^ó”Ív\|ÇY>n.N(Ke¤‚…Ì$›¬tõ7WiÝ^o{u8Ñ}NþÝšWì•>ç ¡ + @!…¨C±âúû^§2”PT³¸äȾÉçB0—VÄ¥Fù›ý?pÉG™.‘𓊸+³î0hÃ@X`©g=@äPÓ¼\/f§$¸sÍ)*’Ôε`Ñ9bÌH¬y ó}´Ÿ<?{~7kŒÌ[kww|G’\¡ó8ebJF +“t°—zSqP̸÷7e&ücœËÜÆíƒ¿gfd'ƒ‚°B÷Ͱ±ô¾Òχ˜¼cÕKß׊®¢KwU 9Å$ƒÀb;ëÉq{Q¦Äd´J±{ÐîÈ+´ ­¨8æDgÝ{—4“tqºÐ¦ä·0' ~Îþ­~X†h–u`й¡½Aû +jßwS6/¾jJœb¦=}öV‡— õ¾h÷ ?Ê¡gHÍH˜Q4AM¡›¶‰‰=}çõè‘']Aݯj¶Í%õö!Û=}îs pGvèK„>ÍS TÛmdÑE×2w^îhf† ÷ÝÜ(¹¬^³©gùÁ¥Õ3pbÛ¸µFÛia +«ÃµùÔû°õ†„V‡ưV¢­=JóXùå#£Ìž_oŠ÷j|qz;Kí§Í§äµ%èÄÔæc"¼Z[¬Œ@hMè/ß䟀Ä^|ü¿Z¾¿KBÛ‰qÍ•ãÛ:óÓÐÍÑON}syF˜9CƒÆá•]—µN|ÌCÝ’ +,Z¨b†2l‹ø(Jõ%WDmmÔÿ“›qyaî ¸al(‰ÔðÄmÐúßBP/BmKøbBóø yA…MfÂជÇÁ'þ^(÷2C/—†zBº²9ˆÅ— ƒõΘãiú•ËÔ é ³ý²ò‘uCE²m.YëÐ8•FÁÁÙ‰ +Œ^‡€7*Žüµæ+Ô®OÄt½¡ðY>‹»8 º×ÿó¡12x„%ŠKξßƈ_W[ýzóãóS"Ñ©GÁØ£Ý)*ÅÃÉ’^WE Ñz?1íøÅRã3¦µ§§è3çÄwG37nÿ¿0Kƒvòe®­H¦1 +L™å¼Ù¤"—;Ñ`S …xÀÄÌD‹ÄÀ¹z× ‘ñ0 ´KLU翌٘Ž&Úå]Ò“»~m6ËOS@Xí¡›$i ñ˜6[ûŸtaœ÷¸÷;>—™‘ܲñéï£Y$ד¿jê„•ñ}xiäe~â>eëÜåÜ!…žü¡œº¢$^ìm{{x{›ËºÉ‘»´=@ee‘£ çqBô=J[ýÊXWÔÄ@A9 +¿ëõùA•Ü‘ëh&d7h¸¬ÔÔÌèl=MwÕüG?ˆÍs[&[›éUÝŒ=@;éÜùA!=}m‚ÞBÌúTSÊT‡V¶ž=MCŽšEè,a ÛXù•‘²è•½’žÜ’»ý•ß­sÎþmfúóï¶=MºzQHŒë¡Ý¯´× +\¼àÔGlÕÞ«{ty…uFÿ¼µ›ƒø=@Ýeœ%VÕ/ß!Šäw_;g7¡’xÀѸ£+¼Ü†õ¡ŒëÉ©íÇ ˜¥¶"Þˆõ’D{{Á”8±!‘ÇÊÎ3bfs`Œ÷¨×ÔÛƒSÔÍ%dˤ‚ðÀÜÊXeš*M6áï ©ÔÄ +ï¤Q«’¥{vÛ ¥ÝÞ¦æk'ÎbÆf¦$)*¬ÉŒôø‡xå~=@UŽØþß³é¡Õ-4’y½e#¸õr²²‘ÀÙœô=M7q’ C£Œ>áeàYWNX–÷äe¤¨8i‰S=MÙÄvb­í2Íc90`‹=MõÙí¬t²Ž +ÒÁÉ<;+Ý øós²Ë·eusï ÞGŽ6"…¨q¥YX©µ¦‰ë†T’Û°rld­¬JCKâcZßÄ(Õí©C°^F’ô˜F¶<.M“.iåÖˆÏóÓÓÐ ÿ+2s°:[]„í •#Ì`{ºÍœK-QUưlø +‹ Iô”U[J°C¬C°c\¸bí¥Á]ÝÀö%ØÝ®[lml>pl}8*qÞ–ù§=M©©ž|“ˆäÀ+ðJ¦mЧ áÓ;F>‘²ÒѼ,‚&LXEŠ!QÝÔ¿|t]ÐÑÐK¹æ½¹†Ì-=@î¦)*?DÅMDø#¶M +^­C2[ºŠ%÷UOJ>k_nïî°XÆ[; ‡&{Ýí®Óÿ;w+pOºpLiB‚M'é/Á¬“6.¾ì|y¸m¶LP ¼Å` ÔÍkïT’Gö=J·ï a]h¥$Lÿ¸kõ Æ^ÌJðmqS2FŒn/Æpóµåä?s8ä›Ò;½[Â/í—ÖgdÌ”ÉtËÔþËÒ¼’•US%ZfëEÿ~]aj·#?! ·zŸì²ý÷PÊo¾D¦/ó5eƒø£WøÿŸCÎ{¡¸7‘ T´œøÕ{ºFDiåF +ŠVO"ÍgK^¾ÿD¢°Ü”‡ZŽ\º1=M€E¥£å¥\Tº€7Nƒ”†Dg4k@Ïʾ,dÃF§ë¯þ|(Ò9{½w½·O@ÏNÛ:(ø°+2ᵋn’U“Ì» 7ŒÎH‹Ñq} ×äm¿!×~omu>Ò¿¨ÉÉR|{o +ícY¡Iž PY÷pÌcN,§ÄýT±K“ômÔ(È’ÒüFãÑmONŸçÉ´Ú²ôÚØùa埈vûëÖ€µDG_Cr†më,³––õôX}qp]ö‡=MÆu’Á0ÿ)*¿…wD„Ÿ^Ä¿¢üì]{Jlû¾àóµË_è +Õó¼Þ¯ '“Ë“¾ˆ»uÐlF¾Ú2`hÕŸ(Õ e¨ÏœÊ¢›ŽäáUÖH|ØídÜFƉÒЧzÀ[¹†á„ŠÀC¯[”,¦-¶òÚ"¥)*ìéÍí#'šÞKfÍ/gnb¡‹í[1E¿ÉÙxµwC%àÄM¸ÌK A/øv +¢ïý¡àøPŸ{u}|ðqGbþm[I¸hÈ¥—•içû„oÝ“ÊLÒðrÛµ¶=J+K]ñ‹ôç(µ¾ðL!¼—TfhOŠwí<÷òƒ‘•Zžñܼ†(Ô\7F¿:ô¡ hK엌ݞ€ý„³”‹ÙÒ=JÁDÆœb#jw˜rÙ +ÙêÇOzòn1Æ>ë¡ù1éÅ·»_tŸ¾¶ü?H¢¸e'𑍲=@aŸ‰þÜ•$®ðÆJêj„ûmŒEÞlSÖ{&B™&À†rqç +tœ;3*‹ :© þæÅ‰öú}ùu~o»·žŽ óâ7!(ÏÃÖsp=}3;0oôx,¥s¡åÀiÅT¾GdTÖ´ÔÈÄÒQôùÝ]Ý™¨ØÑ‘LÃ[ ¤ÄÍXF‰ìVjðï"§‡€óÎGË6üÁ9tÎѯî8ƒL±ßÛ + ÷{7m\åõpµ±%ˆH|peâå"‡à}"†a—âæ›ÀiÝ'0sÛ=JšyFÄc7'iÉÄ¥B¨=@ˆ™ãáq˜ùí^fty6Œ›²# éÿ^®%À¼8õ’Í[sA6nŒA[´øP…gá•ßÿ’óK“$‡g9ŸD4ô +Øf¥r{‰Æ‰î9þ™ôóÍvÈ5üz½kN¼}þ¶~ì:Bõ¡UgõXÀ™ÌûWyF;¾Tà Ã;¡è¹ä±L7@Ã>]þ”šûGWK¦„´”–*P0µ™}AÜeßì”GUxÄK$OažÁ=}šÄ˹·¡?«]¹=Jã +†?ø8×Ðù6mPzþc =}mï¥ÞƸ eÜ¿Kͬ|ÒÒXøbíiìuçÆ‡É÷(µNï>ÞÓTÕ4dôêé-:3×=Jš©+à wúü=@Þ'AT2QÐü˶›ÎÄs„mC+ä:ƒù‚ÿ§·gϧp„—hVøÌ“îb +ç–& ƒo¢M´ZÔ°smÄZBÁ¥ß!}~ùwÿkMH‚F‚±šë ¡ §p„=Jn\%™‡{ƒOg2šÁˆÓCI®!"šl÷éÿ¢Úp!÷è†æ^}ٴжœÔÒÒ;ZwÄ'™ç¥ZÍ^£kí:C]1Xq@$á=J +Ô=}E"=}sºS¥}ËwùìT˜…à?6 'G£åÓ=JqÈ·'p:"Jv‡m­°kãb½YÃççúùÖ=}Ñ[¬Ða+"Q2£#‡ôˆÉ\ïÎÒÄ–¸]Eâ«øpPŸsl_{÷³6ßZâ0þÇØY¡´¾œ2² +;?^ñyªÝ &Öy Q§¾}ÄN´°V0[ÑÅ peà ì|ô“fL^Ý3toª·è8 ™©ÌÛ6{ý6n†XZïšba¨ÇI©4’ÔÏ„ÄrM=M?c¡›K8rèˆ)*‰WþsY*δvŒ®ŒòQ sY6 áÜç +ÆûBý|ð&‹'ù¯»êŽ–=Jjñêd}Ô&=J~ü{ò[ó ¢üZh¦‰Ø‘›ÇjØRMµD„ÊM<œö–BÚe„íiÿGû€ÎŠHF½}Úóâœî=@¥ žÑŸ[2:¶üy}Gs@¶™ù÷`^éÄço6/?bÁ^{] +÷NÅååeKzR=MñLL 3œ-r¢9éÑùò÷Hmu»6VÈðm¡&A©N¡~üGoVA²éîÓèõg¼ÕNžé:MJ¶Ü`§…ÿ|ßlmN­2üVm=Jºƒ×†T/kãyF­b‹B®& ©ù÷ C„T ¿ +òŽÑŬ£N;A—(?TÙæíñFr¼RÍ멲-© ˜Òÿˆrb»9DÜ’²â‚m=}â9ÿÉÑnpòì; º~Á@`0ñ¡ ÊÍwzMFK[uAS±õ#‰õ¡l^q‰¾];~÷7!RÜ ÜqyÖMºÕJLBSìF# +pŒ‹9õîå†ÚD²ðVÎ4–ÏXq¶I¾d—¨‰Ô‚~~M ñ3sîÅMLFî¹8MhˆôÂÓÍ8•úíx<ðK5®Ù¥çæ¾Ôï’ŒbT8”œJ=MF‹®¬†qQ‘éÓd3nЭµzf]BîË‹0¨q¡åc£d?I£“⇰t +º¯øxÜn&à @m°¯ .²šÒ=}QìÌu­ q‡Ï¨áþ6Ô°ØdDc”•_mø ›=Mx!ãŒ"è $Ùç9½þëˆ>)*8¸MÑüŠQ=MwR.ÿ¸…áÕÅÒÀÜÔ8#mq_JñÇ?6;^±O)*î âxkßÒ•´RŸc4 +B•°[R=M¼=Jûá½ •Ø–øæþMR”0ÌÈàGm}ÁHf=M:Fš ü¦Å™Ìõ÷ÔDHAðW0ÆWxœ"}†H`©BŽ=@Ý(4÷ËÁg¢}þ?X¾O†¡cﺧñU—$Rh5}€{3ñyuu‰{ÒCÿœ5£§c; +,’Íþ0HwÔ”±œß‡mb5ݧ`™÷tÑHÀ—q¹]׊2=J”Gd÷¤À©1•÷î¶dýçSwG^¯ÇhˆR (Õñ¼^¤Zˆ¼1¶®¬Š¾ £X˜¨ŒéoYx „%2úÎþe‡{Ôw«}í¶,h=@‘&¡‰Qè +Ñö‰aêHB"\!‰g_ŽLHYó…q=}Õ~›6®{±ë±{}í¦.ær=MHt²âæÏ™ÞëFûÀâ|GpD’”NºãÝV]HÍÀ]Ù"Ó&)*PW †ÊHBpz«²ð‚j/õ½A‘‘ߎb=}ýçfïfûæ¡ïÍ@=J­à +e¨’kѸ4Ceû>úãñ²rM–ÉÍå‰ï…d}ýÒÎÒThcÁ¡æï’Ç ¥#(”?; Â”âž_GÆòMÐ\;¹ÓIy5Ÿ žTË9.ÔSž"ôzMfšŒé6j… ÒÜ;äc’­­öâáE2¢ÈqÚè ÅóoTÍï÷=@ +^Zm^»BbæŽF €kÞ#pÛôkJ¯ôgö§a‘lžåžAŸû^Xû„¡¤Ìȼ2T "‘ZÃ#ÅQeÀÛF^áž\¤ˆÍË·8<“«ÍöšÆeµ?ùÍ¥‰Ôf÷Ìb4·š®DìÀ;'ÇÎþùîJGÖ …÷ +™†‰ÜhÐD´§lx]qv÷ƒgñQŸõë¹]yÓþ!‹Ò¼Éç~HÍ2q. ê"]¿ïÙßã˜æã!\ ÉÿmÞ$'_9“t°Ìµ §vó€Z:-ð§ò†Dí}­"¼^³Š¸é0Ùf›ö†:É -šÝ›‹0ݘ +ç$d æzÛ`ÍÐ+JóR5õQfh6ǯÅSa$#TÔg×(wìÀ2ø’ h:ðþ =}Må-h –¡|Ô¸ž‰3ð{ú}?kp fu=M•híû`‘ÓʸTDB“ðXVœf=}V#pEÁ­þÅ`þÜqϾü:‹a*¹"<Gfyô +þAsÊ͹ ¶Vh:æÆ€Bï¹™ei'¾;5/Ñým{_füK¸k´=}¶"ÁEá½UMÍÁäçv=@;H`;é6à “X%–Ízâ[ý¡<¸Š± ífÁ`óûèhw¥Í¨;5¯u?Gk~}õpYH[mCžRµÙÉ€ï>Œ=Jw +q=M¾SpbîS¸hQ»{é€KžØ3 ‡6=}þ¡äôÖðƒ›®‘œ‹¥2?È=@žÉȳ۬:¸FKÑ¢²lvjÆ"· HçG`_ÙÙü#2Ó“‹ÖÎÒK=}îGÚˆŒõd“HËþ“ÎÔSKÀ¶L+ @¡ ¸p +©7æ¾|â˜TÏ|þ:wÒ@L¾ÙMðø›áo÷½Ð² =@eÇa8´ÔÅæq-N=Mè–ÜÏq0c7kqKF°|*E¹QåÀ‰aûS¨3_·nq€ºãcÍï馂Ø%dôK~íÙÙÒB°xY;ðkBZˆ²²­ +å@ÍyL'±=J=M‹ôK¥©oÇ¢Xį.¯`åQKt„·^@W5ysµè=@YA¯àý­ÅJñ”MÆN4¢)*­±œˆÇÃï[=JL¼¸tÔó¢Mõòm¨ç—#WÞ‹{÷µØ½¹b\ žqZI†ÂsÉYóÀc&?#åxþ +íOo§kqVZÆá¿­ÎŽîAã§™O(9Ë?÷Èzõì¸È®8Æ[<1ÚŒKà‚çžùÔ±³ 2K¼};8C5E²aÈøÑŒcÎÐcðÅB¥ù@Ìv+´U®ªöç òÆK…UùR·nšÛ2Кãu&qßó³‡mi+Pɲ!d ² +nÅ‹"n(F™ ßÀwJ>ÜfFM£AÈZë³× Ú)*³„’þœõì¼DÔ¤˜“f¦{àá´È”_\«s~K2²ÐcXê`–G×àzÄRF¬MzO7}Ð!çÿ~EM½ãº7~››ÆnµÄQ‘¡©ÌÇtpî¬BÔ3\ +»öN˜y.ð~Ÿÿ-ðÒœ`¼Pø@ø>wUYF\þ=MRq;:5òj‚µaˆ²Ç:ÿAê;Sjv +Î\*¸¡Q¡¨3=JÔ®ýÆ-÷_>ÿ-Xf#±_äÝ© ^Ï\À”bþÎ,F*fa¡»$]§V¯DR0Ê˼˜7ojæÛþAu…‘¥žp¥š:8^­K6î-PPL–&q$5™ÿlÕêß<ñE¾© ÆÃ`ˆ2àé‰<Ï¢M³ðm¸hYðL +KC2›&õóÀ³Ô98¤Z"OÏW¬ufŽ÷#ÒwmfqN__[=M÷K¾9׿Ãçû|“< |íA7ò¹=}K £C'áqÌ·F‘Ë\Õ´E+Zª ¦À¿'äÚy{{M¾þB=J‚Bl‚ZÝà!™|„—^¸¤˜I^J:¯ +i[óÛ°Ÿ[#¿OÐÁA 3FŒLMPL,à(WØÓ•/18SMTÃâÛŒz±·!§ÅÔ°…˜²ÎðÝS¬‹,Ûfm±] îGioˆ®ŒHC \œf±°( Ü?ö÷†<¨#^ßÈKSN:ù›åÒ4Öé+z__?<~sS ¾v]‹(— +ÖõÅ^#ätWYy±{D„ÓÔü ä ™Ã]håŸ~Ïôó"œ}=@wë¼SšÐ’“ða™}âåA=MÜÁU÷Å>óƒ^žDÖÿij8=}æ\¸µc8@‘z°¨¹>D‹þ®O}6ñÆ +ߟ°êE˜ìXY¥ ÀwÀ”RŸM¾·ðµYµ‡zxMᳪ¯Å<žØ’#š‡üˆ¹âò^#û¬xGQÃÅýC7ǵË÷Ãu0X^ß°[š¤³8eœ øÞ"QWÒÎÌÖËÑÄÀ´¬¸¼e®ÿ†ˆœá¿ÐÇz&º +=@ñwÍç/’/­Bðý×É‚Ÿ'7‘íÄÉ•=MÆ"ÿ?:· a ý@›çæ)*¸x•¸9¥WÓ>»8Џ‹îBnÛLˆ§È· ÚèìÞ\ý¥1u{z+Ÿ<¤ÓF§©Ì"ƒ\™û âçÆYÊ~²¶¢&燎ÿñ ¸œ¹N” +=MðS5V§uÚøÓøŸ{ýûóKŽfÔÆ¼!÷xFæ[&}™íÌ$è¹­‰aþܯ¥„ð”ÓÎJegpù鑳#dHÈîCPTÃLµ³íca¥iáÿ”ìfDĦ^=}{¹ìóÓèf·Bç •`ùå‰÷>Äx#ƒ>¬k& +¦xy®ùCo™ÁCS=MðþÅVÓð[ɱÇiKIåàTûÛÌ<¼LÊÖÑÓ¶N󪎠èyáo4 ÷€Ä<=M¾»I,a´’.Ú®Ž½¾d¨hr~@tt"_FM¶LI°/©xùA‰Ï q~ôcSÑ Gon:CŤõ©eé…M +†ޝab¿H,Qœ]½Ë™†ÌfADÔ¢_dCÌ=MoWJõ®=@Û*t8méX ïÈfˆÆ~_´¸Oq‘0ȪSö"8.©í•?çÁ­&CäÆxð ìri^ÁP+ß³&óň·æ‚•ëyÍã¿q´Rͪ¼ B +V‡˜QˆÖÖ h˜©{ªNÍÑL+²_[Þ[þ ¶íE_Ãè!ÀT ã %^ývWR°°åÞýsa Òh;-=Jìî8#™•Ñ—à£ãÝŒû’MÄÀb”\Ó¶¶Ï,Úcaô(=@ˆÂN7d°À2ñåìf¥ð…‹=}eÜ‘ +ÐÈÌsNRÔ¥âÀ›á»'´²V„ßWZ³›S;½:ïñÕt ƒ“ß(3·fŽžlCòeÁÉã‡xõw‰td´³ÐY¬œ¾mîRÈûÚ)*U`r„µ‚ý¥ÿ|Šƒ;2fœáU†£§Å;;ä9’ªÊ=M~}Æë;3es +ècéÜ ž¸…Ä݇4¢K±ìbªì)*œø%eayý|¸åuÒ¬Èbv±²KBp+Ƙ¡ßÇ! w·AU•NÔÍ]}¯~oCÈB]³†G×ï“2ŽþpÌ3KJ4¨A XPVêXeÛe¨…‡@LþŠÑË¢=MÖcÔ4[VMá +uµeIUˆÉnlD#ò”2pÀ¶¢æÙN°ã—œ  ©û›iZ~ÿÇ FŒÄ’°[4²=Mb=M•ƒÂ›¨ÖT“s4HBviåqR»¶Š[‘Ú_Üóæ)*?ëÉ_a9~ þ”QÆÚ¡G¯àV)*åXlF|ºrfXJGZ³! Çæ…ŸE +©~û®KWfðèÀrêðMìU¢¡åƒØÍp´=MÑz¡^ÿúó::Bf›då„÷ýž"]ÔMϸLºrSE®ê‡u•ßÅówD–owk_’ì|Ã~¶ì—H9ô©xð‰¼ï—~Wm­>^Ë{ГÜ"†Nº¦'‚#ÙŽøˆ +{ëì]·q0´Ác⡳Æt#‡)*´ >f#©l¶íNsHjl{=JÇâWý¨áˆâ£ÓG~-%Hо6MaÐZíE¾¶Üûk{Þ‡HÚÌ3bäcÃòEr=JBbÙÇH?9ËÏõ`Ò ÒD›ì’c¶ÇQšÚöù—Øæ¹ +¨÷ÊÔиŒÀÄdQhB¯ I攟®üDòòøŠ¸6Å ÝŽ%5½à!;Ñ^ÆX.ž'þ%ó=}šêEUçɘåM_cJÒͨ‚Ó®òè29M¥åƒ'Å??¤P4‹·=Mºª"\êÂ3½WaáÃTë/oŽ»¯R¦‹Ac +K:Ýì÷¦–(¡þßn[k{O+p_Âæ¬]=M +RµÅÞ ¹P©x`€ôÝñRÉ<ÌXHˆ+®c/Èù¥P±ì|ot?-Ofž=}¶™GÅEéu&è•lf^{²¢™J¬f³ “ !I¡|{Ž=M÷*lÐy…Iºáȇþ¾ý¶2·cwx¨=}3dqed°”̼[LSÑ:·Ìð[‹< +ÕÔÎ¥Æö]ªþs)*Tf6›¬e%ƒ›[ÿC“ð\AYE®8N ùè…Ü’åöþúòZvm^KFw=MvIÍàß`xÆC!,²“øÉ°x™íAY|æ5>o^{Ï4†œ…èY™K!Ü œÿÄ¢=J°2ôB⣜Æ`+© +»ýòýn2¶‡ små: C²=M‡A"+Mý¾û}mQ7Ø{þ[è÷ºá…ä¯tÊæ!¸[¾S †OÒÚ¿ÈÝŸsŸKs^[2²l|¾Æ“«Å–½e_RRpG”åÝñkxO·_N>"C†¦ƒßù$GÉHMn=MÕó‰%ŒÜ° +ÐC”®´À¾”,ÒïçîX×=}[Ì┾DȈO§jÃ+káqñIa}Ù-—V†?D§–[úð¢"ß©F/(w!}zü“ˆ¸Ýk¶”M°®ÎòS¶â¬— ¶×Ü•msÎÈÑux„›Ú¦z=Myë¼M HÉ/ñÂÖÔ +Íà ÖÑÐÍѵñy±8xJß ¦›‡œÕ¬ÈÍfl^Üwb7cÀkuÀ™‘¥ßã|Ãö’¼ÜD3ÒðÕ‚88=MF: ³O$gᎅ]ãu‚‡QÔZâ5îBw]a½-h ´ìÌ2ÓL¼¹x½ãzùE³ó}ݘ(KéÓ¾þP•|ൠ+~§ßý¤“l¨!Z-F¨<‘Ÿ=JUr$¶ÅqAuÎGh°È¸HzжLI"„õ i|”Kªã;X1ˆ¾Î\IAÜ]ÔšäzµñyÀ#˜io×P†I–_êÍC£ná‹$P¬yÝä ÖþŸfu¢J´( ä'IÊñd¨¥æOœ¿–fj +ôLX›Yç‰Ic1çš"®,O¢Çõ EIÌZÔm:óEó¶Ý=}ðfÂß ¨Ù'»eXkÕ3¦\ÂP=M²+ò‰7ñØÖa–z¾¿:w7{mx|Š0­ƒ$%RÒ} xqQBâžÛ@:æ¼Ý¢ƒ µ–ïxă0®”Zô„ +,×xE] e¥mr‚Ö© r‹Ô+¢;è¥?ÄøY™a!mUX1<ªåë.ª‚ªwFâ«ã„÷è p´Ïg^¾Ü@,/M J—omqd|Ͷu"Þñyœµb³Û V]ñ/ ^ÿ¾'ÃüÓQ3eÖúôœplXvö™!¦ +`‰Qi1é@Îþ’“$¬¹ í{-ýÆUè/å@)*Ô—“Ò¦Š¥›WH»Ò’_¾Q_zr+¤˜r+¨à™ŸàVá›só:é¸þ¿o7‡—p¿¿?g¦LOóôêežë£[âiÕûÙ€Ð0åGnùs°ÛÑ;cd®&á•Ý(‡ +AÙ.#fÿz‰²ôÒÖÌ^Ï&aJ¡¢!§ÿ¥ƒ`Ì^~ü¡§ãªóÉ:™ª±Àöe#Wt%A^@tÑ<'Í[~@A›gØ(Á!fC„GH4‚4DÓ›<¶£f=M=}Y¡@(óÓß&þŽÌÒ»=MCSìxca6éYAGý~ +‚µt°=Mzø;¹¯êÌQóÃÙü!w;!°ÕtX||î=}}\ phåÝ:áÈö»7X»ÍhÝn' ŒLÓÑÀ\;`¼ .ø%e)*nû>ŠüÅw¹­ƒ2¶lQ£8ö€œÜ¯ÿVr¤Ïf~œmW^º;åçXøi@‡û…^ +SÑÖD<ÑØÌ°Hf¢ìšÇ)*íiÅž›?„¢+ÈÔ”“åæÚK2!Œºƒ¥Üÿi_5€ÆÒ‹SÒcL¹¯bv,J)*¸¡ƒ>âdÛ@~ÞŸúü»rG"¥#h!óž‘dlþûó~iæPRFŒ=Mh€‹Q; ˜¶âýH +F÷J~þcr‹‹Q8EÁU‚ÅŒq¢KÔdÌÔÄÁSЮš"Ç ¢¨=J‘ƒîL¦#ÍÎWJèN¯íÕ¶Û’a0ïÖÝŸ‡yÄþ=}·VzþŽC¸œåå­£˜ÜÑÌCŸ¿Z¹Ÿº”v¸¦j\=MÙwþ¸˜¨Ý€¼]¸kÁ!¼S +²[`hM@Ÿ_s>G Æ\s}}2Ž›ãç©aÉ.åmÞ=M/ÏB®øÆ4t4k;iA8aºÅ§¦ÁùY—€ºóÎKT^›ŒúAí‹0¦ƒè¹Ü$I1µp¿vÚ~o{íW&kNÀU·¾kÌG_"ñF¼k0P ôÞŒ‚ +úËÓ)*€’p\ð¼¶ÕSùùEyÅ…Œ‰dMÇg¥™ÔlÔ¾ÊBŽ"Œ§,u`÷þÛ‰e=J$BÓx¤²ËÐºÍøa¾®ÍÂoÖh…]Ô­‹ˆ-{xO?_Š=M¿m³ÝàîvÑm|ÒðÌ“âþuºÅ¶»‡³¦Ç~TS”£ô’NºÏÐ +]½íí³(—ý§á}ÝÔ3wyî°SÓñ;=MØ<‚Wß Ï!wºÙvbª¿kGgZ³M)*’ïáGÉ™ÿœ®ýqQš¸”ƒ“®0qQ›FÄ%ÝÎT¼s·o^Ž^†j;"·fÖYz˜K ˜{üK€Ä´Ù¹]rCîiHsc8j™WçØ°ò +¸sÆ´ÌT¼;æÖâ6¨‚ÝéäUŒò›ð\7kŒœ²Åö|æ™WÖö(´=}в"ß=}?gC.¾=M³Ý»óáÛ¨Sí=Jˆ¯Ó=M{þs;!¹2qOØ[ Ž^Þbò}}¾Â2ÁU.(Ñóóóçç½~´²ô:ºÍÀ–ôk¿¹ +ìŽ9ßçé^öÝÿrM \µ³¹_mªò˜Ñe?¸-ÒéDÆ-´]3ì/•‘¨`yźÕcµ÷Nû1ïÅUra[ axæ2Vü¶^ül{*Ã8ò§WµE)*uÔçÔæí;q8Ž/EEâ=}Œƒ9/´dÂ4,B““Ô +PLô¡¢ $'~&²ÙÚþ|²nÏ>îXfs5ŒiK§½‹H76¾=MzBõZ-à ÁõY¿þ׈ÌÔ3N"fD‚Üë"‹ë$áåÑpÄV›έ¬f’ŽîB™B:¦=MÙÔ;¶oZðo9.cêP¿èO õ(õÄaÄsn“¼ +b‘òuÉ=}– ™%S'¹/‚⻳÷ Û²îø\ã¹ßÖNþíÆ¯[*Âñ(Bóè™{gv¬ÔÈ™ìM10=}ð†.)*³é´øÙ ã1›À‚4;*¹@}< FEÏÇK¬bbo¦š¶m<‘º‡é°=@Ž“2tÁ²¹cF¦° +‰…¨ÖÅ]ˆ­´P~Ú¾^&â㻵@ù©Qp  ¹Ë“þïÏæÿü|È×Õ2×CÚqtH˜ $aîÇ~>7`Á…}Ôþ›â™_Šúáð=@¡&;óDš¶þûõ^¤Š½¾›îùZõ• 씓§£Ô=@ø_½gŽ‹^¤¨k‘ï +ëÕáä Dç¦m ߘø®›5fVl^¸2ò–=MŸ÷Ã÷p4ó_t”œ‡ŠñåzìpµáÅÝåc'>ì=@ß;¼ÜäÈSÓ·~ ·J^=J`å(SsŽùsŸ;CT“ÎþtkÞLOFšéˆPŽÔnÏ€ú·v +ŸzdðX=}c?=JÑ‘§ }5ó)*ÉÞ";í_ždφ܋xî*Iü$ÔÂÿ´t²N¹†ÖÐK<”Dœ¹õW=@?:ÑŸ(·Ågu>ß3Þ"“Þ²t¢†mAQQÚ %Ùµ¿§ÙpïøÝi†šÛµLÙÀ'-i}hF<Ž +ƒ9¼cyÀ Äé±fÉŸ Cè™hÌAÓÖºé°UwFÙ1ð'’ÕUÅXlWçgAÔZæÃ\(뼇uÞ?†Â!j5ÁÏà‰Ê³ü -þU¡ÿŸI±>OF<§îgÿÐÞßD“ÐÐ<¼ÀH^.Oîñ@@˜á p~Ä3“ÔNº® +[²Ž2I å`(tý÷€¢ŒÄÔt¤š"L‚hjø@¥‚Ɇûî­{W6<7hš¶šIê#å—ýý|ä×s‡ð´[Ò83¶*0µÂ5à™×_;FDz~¡ëCNȸŠV"FÖ{ð&­™ya1b‘ñ{QD\* >C6=Mèø% +Ÿ“Ìúüq6ì[ŽÁª™Ëž(òÒp„~¼}{ï>[ý»2ãò‚Þ·¥d¯q¬bÌ2;ØÄÒ"OZ»ó7îKñË—"V)*0ÄŒÙ[%‹7€µ{ƒÎõ7~dJÿ/N;;ñ“M=}•¸ûûìÔ÷›ÐÙÏÖqÇZÈý µ{IoËH +Óaœ"ëFÙEº£Ab#\È\†¨|ýhÅÍa‘ŸÓÑÓD§@¸B”²´3”‘† §Öçâç ™?’ÍÔItÜ%gÌ®D„"ÕUT“ë¼Ì‹èV,*‚É}µ0Çùç—'ùß;H(~ô§ K:-;áªVy$Ù‰•AÍ÷ÈãÚŸB +Hľ²œ±V=M³¥ÝŸOÀVüdÄCÐ¸ÌÆ1Kò‰5Ž=@q¢`ÓßbÍÔ¸t¬ i6/⋊Yðô  ËÛÏšwA<Ú¸ÆLº6Pª.6šåTÀÅ×yƒwN;öÔMÒ=MífŸ…–îÛå©ng¥“~šNÄŒ®èY6 +ðtûöö€é… A}Üž†ÈÄÄ6œ«hm­óz,•5…YtÓ^ÔNœ¸jÖ¸|½Z¶°2[ €ô¢KÆ‹D|*ênpa½5sBõ‘‘pã•©/´”’%þ£o¶Ljx§<‘¥io?7MY\=@ÁŸËðtJ¼CA°Å  +¸k©¿v,7F‹bâpLŒN>×þ« X‰Ov(•DwWC{퇂†t²ND¥*W‘éya}wATÒqå~}òC2òbqȘJ€¡p“e’ïÒüT ÎÅ{Ñ-°XC ³è@ù©Ÿìf!;}”zýzý÷ÈZk>wCŸ¥ˆ÷)*<ÄhŒmD² +KÑì“P´vlœé팡åéé#X?†^÷ƒhÅ .Ðîp[¬:BÝ\• ˜Ç‡StÜ”ýüîLo6=JF=MXà!©ìT….”UÍc4j\\·À%VUÅr×ED˜¯c}>¯Y0{ÞËJÄ(@…ðQ¼Ôï¨Õ*þÞÛF¿/-Äm¢ +©¥ƒw~’ý€§’ÓÍ£['å~þŽÔ:¸gÍE(mÜ#âQ þ(4cѼdBq=}Ïœ;áó!‰tÈV†ý>Û6cb\F›=MaXíâӆˮqÄŒõK;¦™ût‘¬ù‹µÞ‘AR®ËþL©»é€ˆVÆ]gÉ/”ó +%Ó@~ ]É^ë[ve[]à)*TŽ ™¨T=JÄ4Ò¥ïcš¬H@Pý˜ùŧgÀzý~Oyf»¦bé¡ÀeÇ ìy=@ô=JØQ>í}Nžæa 2÷ºi]ip•#ÓÅÛ3ÎC¢ü€~~›K °F†FÛÚ%X|ËI/ ;þ0}ºr±* + ]¯Éöo×u´§üD£ÐDÌd±Sh]ëàî%9 Ÿ2Ï´C8Õ°=}l=}¹.Ì•ø8™˜‰ÔÀÔqV«`[¦”ŒðHKM醨ÖôûHºxcÔåöŒL^!¦G×ã]"ǜƮB5þíHŽ-³mu°ú¯!Ý&|ær”b +ŒŸ‚/=MQP¶¹Œ™$g'¼Ò¬÷2³·‘Ÿ,À¨±9NŽøšð!>vÕó7p_?.œ|uH{ã~˜Xe]ƒÃƒ–¸34H^ýjM£Îi°W©wàpøÔï>¾]N#lfÀ&’Á€‘pSÔOdí®“òòf+ºåqEåe=M©w +…U»3›4:ïòÛš¶‹i÷)*uL:ÈÉ·^ýnŽ LmQ?$èÖ°òò¢^ì_|v®2\@¨GÉ䨖Õ•«6žÛ®_1Xlü¹Óɧ×ôõ΢˜¸2îÆ½4Ñ;¨FŒ¥ÈùÚ'~¬“2ñ{y~ˆ2Xb ©#ˆtÀ°-B ­ƒ +;¶ b9§ YóS÷€°°{²ÎJ2“­: ra[‘ܦÿ4¦Ü"£8wPy›9ëÅî)*ñ=}ocs;šíµR"5£0øù¿ô㈔ªˆˆzºPÄqVèN@$àô olöº¨=MPƒµîm ¼P¨Iß× &€uÔ=J¸Rϱå +ñ6zK÷oóäãˆIë•Øçƒ’–‘£Ô£8vóÂt€¨ÍÌ‘#_ËOÔ8^œöKâ^O=} "¿ÁžT»¾®ÎünLìC=}££Mº¼L3LR=MÔb;’í7±Ð(”GÒˆ”¸b=Ms:ÁGà[FäŸ=@»ëx +Ò ¸’ÒKû=Mã9ì£T•CÈåp‰Ï¦„ù=@ÚØÊÑR“SÓžthЬM‹¼•'Hñ(’Ç£ÍÏd´dHÓ¹@SÎ;±uÐHN¼p(™ éû·¤þO4‡p´„„ò£ÓŠýSÔb™7‘Je)*_2~d·}w×'Í%\Ü—| +Úè-p†aÑŒMµ¼_$ÔíØüou‰V—§jèÿµéMéöghÔKa _UR^Îý±͸“#ÔTÔj9²8åG o~¶Iã$êп%à±K÷w@f”ãL•öw1{†ùÙᕃ~¡‹Ëüirô¤³Ô+ö· ‘•„ ‡ +Ta€ÓϲpÀ¬¸¼¹C˜\Ox¡éu#Sûà$UqñÒÒ=J’]~þ^¯nßÎ0.  Üwi©ÍÁ‘Žû¥>_ýxŸ?dι]òk‘ àêUG‡i‰Œ Zèæl‚‚g¸‰Þ?/G^­¬ey® !€òLƒŽhIÔÒŒ#ñ” +Cžõ>É þ@`ˆÆ{çÜùÁì#~w_†ýñœc3®…öie£äéŽdrz}þïBo*èp¥ÙÑ™I›yÊ»u{;9NÆæ¶`Ÿ à¦'‚'ô;¨Oh ‚ðšC B„ì×eV6›²ý¶Æ<ô]Q‹¥™©Ë +[ 'ûóVÝo´H>»#y¡¡¥™•Ÿ”¬b±±^Ÿn}rŒ:pœ2Eò–øaåŽ|Ã8ÝOjv†Ðbj¢pc–X!';·q]7W_XÖNfÙq³-l™Æ˜7ŽaÈü=}“Ÿ>Qu ” +ph6û³b iL' âÝ’¶± eOwƒyHËuªDT„˜¡½°bÈ£[†EÈu '@ƒÍ÷fh2ú^»¬Ìwe{ÐCÕŽ' Ø]Ë¡£7 Q©rZTÈ“Öãè8x½ÝžÎ›ó_‹óS5·=Mi5ÝÜ$iû¤‹EÎÓÐ +ÈÁæ}ó:¡²îêo&6ù‘äÒx)*_´·@Ü”C´C’F†vQP6‡ááÞv÷Xõ|ÿo8KíK¾. ¡ó'éÛÿ{¾Þ³Ô/x~ÐYíöEòá•„ w}ÔåSg3÷F]ý?S³* IîåiÅ቞€ltdda°Í*· +ò££F',Oçæý~ïa4°ätĨ|Áb±¡‘èö¤ÎÕ—õìÈËñ!ÄÆð6"[ HxeM=Mì´?zÿüë=M6Üp-^œï‹UÉ6{g¢^PØÐD‚ÚB°Z²Mîƒäˆ{t"ù6?^Ü;¾ævêÌš–Gä‹pžL +²=MB%çvìµÆñK]æ[èö=@§²¦$–¼ tŒ¼<±yºãT5 F¦Ù¡•)*n ?”4x]{þ€~C?°ˆIÔö–ûäÝÓÒ=J4ܨ/wfž{6‚ô‘NוcÝgÙà?Àœþ4Âtc¸‹f¢öeòVh@(ò~’¸sôȸ +È”¤êJ óV¸v'aó ™Ô¬K´:b»ýþ!´œ¶TEåZ'ÄÉ«ÊýÏD”´ù­ZŒ\é쨅gä&áw=}E&7%qwûqz¶Ï3Söpšº­î!k§¾=@ºv(ÿ”Û70Â}r/²g µàÿS(ìÔÒü +ntˆV›ò*î&‹ !˜âé÷Í ¬§'cמ>¤©žÇœÄ­·_Ÿ[oMõUå‘Eâhw ‘µÙëõ¹¤$U6<·^¼?RÀe݃ÈÜÓ¸–ÞnCs2Heòö=@çèÓpY0¿M¾©ë8B¢¦$£}Ü7îŸç +xÔÍ89ÖîÉ fµè Ä!_ Œs2í~}qy¹>Ü+WÆÙà™æ‡ùÅñ{öŸ†Ûéꢸ‹¥eá‰2%Öñ¬â³w1ðÈCb=M²š— ¥–t|ÛgF'ÌtÔË2"—8Yî˜ã=}…•"ƒpÕ}º‘“D£Ë +-ÂÊbî ÷åÙÜçG®ºx{Q¦=J¸fRj¤½iå¹ûmÔžÿ=}ìFtœ[ön2¼p!¨åUoÖȃ¹!Ô¨^³àe8!óÇûu;:ºñBôŸ;oH©9‘ºd#çØ³Ôû[¼2SÎ,;V"nøy¥ çäƒ2„Q° +s´ÀgvN,ñ2)*Gc#Òv#ËXCŒ\uÍVÉ=}öõ ·RËI6q³x›« ³Kˆïå‘~°¦Ó¼dªÂpk*“KÝáaà‡™o§fß*{¿Y1äìj G¹˜ã¦Ïܯ¦@0cÌHGYŸCAF/Ä÷=@(’q +°Õ¸^ýB›SÊAAÁ˜…=Máß»SLζ¹LJSxfÍœ³èEéûÖ·L>¶q;¹æ=@wWºÌš‹› ™9nK7€[îoKGbFb®Ž¡º—¡'AK_=J0´4ËB=M"ºÁfJK–Ç$àôý$:!ÍQ ûõZô ®ŠÖ'„„ +(!{ÿ…X+K¾½A<™5+~˜¸a|^[uy¾ž ¹,0N=@@©;eèyä%Ä(üÒиKºìÇÊ1£ôEIÝ%Sk—8åßDð½ø:{ÿ|Žš=M®üpLP¢¥æ$m gØ#Þ¨øúÒ=JѬD¤š í.>‹•\&ý 7sc®XÒÁA¶Û#{Èùõé“=} +þñ,®ãÜÞï6'ùe£Õg•ýýZÂ^‡‚䇧H=@Iiþ\û‰ÛþkFëÒþ6ncbì.€óÓ¨u"ä'»qf¤ {m³ò@›_ÉÔ$ÈÉ yh™1k‚M3·obwÆ¢ÀIû§r£fŒ°„¤"ô“ø[´ëÈ£ƒ A …dÐÏ/§Ž¤~íƒôl[Úa¥#aâÚßú¾žþü÷>Ç$MS¦ÖÝŽ) +*pû÷W½{Ñ=@ýÿ3|ù^¬|b&u¦q˜àŸ÷ÇÁkÑ>íHbqî1E¤‚˜ ­Óÿá75{NħY‹M=M”äçB~›V)*åæåáËgÝõìTö†ÇÚ°7‘ÞGèÎËÐ@¬“JÏøÆùÁ»³—¸ØøæbUvYˆˆ ” +4bÞèð{ý÷x<|u.½æ€_umóà0 œ‘àõýµ­ùÁÈø8½rûÐÑØÏ²1æqã=J,(Œ¡ ˆÇÃo’÷Ðý®Œ¸ddÖpS²(N€‹9e‰¥ÕMëPÑ{f¤Æ§¸’›œ®ò#/ñQ¡©ïnßÔw?Q¦RðJÑ]ù¬ûí` +  EéuÕpº‚UødÓNB¹Z;U¿×«¢Ç±o“í¬ĸÄ\q^®›çjïtJ]Þª=@ãAÈp¤a5T²PÒ=MÃt|*ì"e¢‡  zýˆ5¼>º{ýíR2¾­Xò%–!€ñØWýkå¾ÌqNÞÌ=}7ÇîF$ßá +®Uþ~}pŸ\:BîœhœŒ=J¨Å$z®¯o/6ÁbQ:|Á¹ÁÓøüƒ&¾–×^ÞGNcŽƒ.Ü2=JQé` ¶qÏ$Ìž¿FÍ^þìyõ‘TœÚ¡ %ÕU÷¤V´ÆâÂ;>°z驧 +nMXk“4ùë‹åãÚåû¢Ý#èÁ—F? ÆtwjnâVÃóc8›÷ç±€Ý\÷¼¢M´hGAZ~C£¸=@=Mü °órqW3rOzb6"¢¹—ïáàUPº°Ä¸Ðtcμ‚޲ê[`@éXe´]Ï6|oëVÍô‘í8 +¡dLþ=M¬Ú0B)*¤ÒR‰¶=M@`™Ìá wÐpl;À~þÞ߬þ6ßænOÇKB°Âr¥áaÉmé‡àwH,ròŒÏ;XN[ <åæ«ÿ0H‰¡sxæ0\ö¦”¤¤“Hc8úŬKU…¬Æº¡MÂÌhRÁb +¸aUç!áÏxúüÊþþüó{}m7i<ÙMP¼“—Bý¿ºøÍÄhVM ¼Àѯ³ûuÅ5£èh(× €ÔqyFûõ^ëÁ°k–óÇàEÒ¾þU¾Üp<{¾ C²l35 s!œ‘X÷…“DPSr°d¨§ KïâÀš@©LéÜ´ +t¿~{”||:v{¢Èjv÷ ‘™Oš– t²0‚=M=Mþ½ñ¢ÉGâ¨wéÄ ÜÒk.‘B÷Y:2±­û¶¡¥)*N–Ûg[wwGn¿C~ ûƒ™áÿœn›{>iD¾([ñâ>æቖ˜ãÜÐ;ûoWfš»zpð‰îõ †¤ß' +¿~PSˆ¨FP\l=}=}¹·ÎßÖù¨Ô‹ò ÷ʆ{Ò”O ô€R<‘–i9ï’°wfâíIfì£Eøp0'dÙ×eˆDUïïóaB6rps9G'Ø%~ÿmë˰fкãÉ0†í¡$çå%´Ô‹ÐBðJ:<<;Wç: +çÑ=@665º=M7ËhÕ¾ÓV}¶¾ü|!Jº#3­I`$å¤{Ôb82=JRðÀ‹b#´‡³Éó×ûúýÂF”Ó´\¬Ä=MIë“!e‡Ç¯ÉŸÌ’ÜyV^Z¹Á@7Ù›ýlSNqV©é~o!œÒî$£%åQ$ +Wz=@þv_ºï8×Öyºf\˜:±ø=@Û5\'UŸ¼±sÿS’Ž¿ú÷Ô~s®»ºfWÿ#Åš/8–¸4c‹Ö±xËØÍ· é¢ÄCrÉÚ`• „ãÏ—`èÑ«%h¸ÒTR¶´Æ„aèV‡©½WâVOK¶^ß½7J&T +äæÇöyÍ„ º=@ÓvÔÕ•,[ÿ_~ºˆ4ãP²ŽÄuà'¡›w¹•›tŸý“û!ôÂûñ8‹qèì!w¿iÊ߯ŸF_­W_GRñÇÔ + Jw侪°„ÒS_-ûN @~ú–Fq¨¯»_Éwá.Ÿ?D¿oGv +ÿ¿«m{.¬kv^Ë5ò§éóA÷ Ùœn‡LjÉ!¹“¶ä¶–!W 'uX!ѨÁüšš $èvmì;: ¢É‡^Ã6nˆ¾²ÀÆÙ’ÍôµüƒT®éZ'Þëµ!²#xhµ¦:×Y¡ïPÒTóH“¤¸öèÉýyó + 'GqŠ‘R³0RŽbÐòHkèa— „h¥)*~ ~Ô2,[Àå¹lñÜ%§ÈWZ棠 š¯B=}X| ˆ£Ÿ~Ü~€l{ùõ>««²"è¸á þžýq}ðÂsò[A–¦Ôý‚‘€Õv›¸¹}^›l]1­´ ’ ¨®ÝõÌÛŸñ­mÿÕTC°¾ô¼d³,}Ise߈ +—Mµ_øÄí*üô^ú›HK‹¦­hIÞ‹å¥uhqBòkM=MÝÁÒØ„F›}+p[ìfèÃBä§?ÜûN1>¤¸²{º¦W”Â×&ùµÛ£í†{Í„ÜdÔ=M¸rðܱBðÉC±6Ö ¡¦Ä§F>Í^?F¢¸S®=MHJ  +¸w!FÃ)*Ô÷"Pþ²ÕÑC¼ŒâìBîE¸nSó.}w7VÊ~p Jg®W¦Ç$Ìç×+šTSË >üo.£â¿ÃÍáÈ)* 'r ðyFžçÆMãê‘–E¥‡à¡éo>¨®žð‚¾®q²â¼=}aq ¿Ãh”£>¼ +6]o .u½Ç VHvδ­6' sðT³™‘6—!ÏVo‚~Þ›÷O‘E®b]Ûµ™ö×=}ëN=MðBRи´UÉ:x÷Oé?5} ñMÅ·í"IñÆÌ·â·‘à\puš#ž°Õ)*{ÀBžDôÄ„£qD³OÝóZi +À÷§¿MIþ•Reîd§B}mÐúj¡\æøp‡pù‘ž Üìîß|sÑqG3ûü’Žb1 !åè­6 +¾ÍôO™W=@ÇÃß›SÐK-¶î ñÔtt{ë_90”zK Œ—NÖù •ßÉõ¶æ Bü}qS3}÷ïîô˜7 ™¥Üà¤ËT«¼23Íøvš: ¨àß‘ܯp¯ÔÙ¸°˜qx,[óRm6 틘Οs€úÄs Ï£0cåñ> +›-º‰3[iÛ‡G=JÑOorÿq{8?C=}yQº3Â[¨Çdes¡(7”c=MQ¹åþwu{>ø*\IP&ÃeÐcMdÎ_Ï{Õ~mmXYF£ìCXWõ©EŒT®ü=@½C’$ÈÞ|LÁ}ÐA¼•1í«â°öa²îrƒ£eå=J +1ÈIÛäØáywÕþy}ÕzïzŒD–Ÿ±58qè6ù¸eÜïF‹æ ™9à‡Çÿee¶Žþžÿ?<}óü· ¡•á]à%‡•…ùëpÔdBˆCæKw3>[ñ¡ó³˜Å(už|ç^Æ8%ßfþ&ÝGK†3ɧó$e‡?Ü‹ÀÎ +lk¹·N{|C‚oÝã]]:]ènUþ“íGWR.þ c*s [ —Ã)*qc#Ü”RtÒn¥ã¸ž¹ã-ÝøÔÙç€ÍjLœ*,OwS—¾¬ö%(RýÄÂûUMÔJ¶q=}¦×ÃE$ˆƒþ¬š€&D{}6š¡Öâ˜\Z +¹6&=@P"ÍÄ’ÕrŽD²•vË\ðr ³¨åè „ÐÔL@Ô_˜&X|ª8] `sÅòÉ÷Cmr•Ѻ0k².õ*š÷‹ —¯|rQD´ÓÐϵç~;B ì î5шɼUí\dCÄ3°ÜTÄ›f¥ÖúE åµôRñ +“kP]·f»v\ôm{ô¡™5ÁÁé¼Up˜Ì^ÆkÔTJQ[0šu¹: °x •Pð¬kÖOsòjœ³÷Øì!ô÷éÈ´Å=}¶¼¡´öóùÀa÷z6(=}‘H€á~û^óËÌD¦”MÑÓRÕœ¹5šÝ%W3µÞB +ÓSZÓJ´qSDÎF„ðúèóл¦ûïSo%È;b@xâ¿&¶±0„¤ÒµsÓM bÿó2‘GçOµ¥%V•„Y`‰äýwyôXN.ca]ÝÝiwà}S F½ëmÑ@Çóª÷¶<3ð=@é }ƒcÕ‡i÷õƒ +^ÂÂ\‘•=M ˆ±ÄUÅŠÏI>¶poíŒ0–ÈõPß MÔb²ÛMC›¡Wá – +àµ=J—xÀ„×8ÖM¸Î®t;¹Ù:7ÇÈD· ‚Õu—”Ÿ„æíyP͆?l[ºc÷YðQ]¥™û¦Ä§¢4[oÓ~nMnqmSð-ÈV† Åx­¹yÔšp}»­=}¼FGÙ—ÆÉôÌÀ¸t‡|Dr"íãˆHÝgƘÁ +€·×¸/K6ý/gZ¸:pjð©¹=JùÄEM+T±Åæu`^ *óõ¸òóŒ}ÀHOnî¨=}1¹f#h—ÕÒ¸5èÚ7kcs¾ünïCñ •Ýäç2’i’:qHjMíꆷÆ[eé¼´~˜Ä’8Á±G‹+5õNº&j +· Ë¢¤¤ÄÝ¢mvO‡VîCfw8hýÁô9#ª ó…uu3›9¾Ýî–X»¥=@$OO”°c¢}œ=M;óµfPîiÒ&{”Ü¿~š?I¡hC;-º–€ÉóèµÇ}VìL£s;½»:Åñš•&åé †±S†ÍÓBMT³#n‰° +CX(( ~¬¾ÝŒ=}&“šAŒµº¯æ!pè/ÒcX.~úÆc¿¶Ø õHÈr²òD"‹ÄÞ/ 5òm–…÷˜² Ư%#mo&<òQÈjø(²ÖÜ߸r.ØÐ¯ð@Œ1¡ç)*îáEP¦;!‹"ï ¢Îî,b× +í¾  ˜¸ò˜TR ÄR Ïõ=}н»ó&ñÍ…¸”¿ÏzP^ýý{HlJ=MQ½'Àئ=}ù+7{7QZ²âé 9ߘKk_n^ EwOëñ—Ö “mz)*Ïñ­„4¬TDã0Òð““È1® +–jY©=}ßöeN`Ö{þþ¹y%eú•URxÔÃQÔC¨^§=J!¸ù¥-7æD™ÃÙ$Rž§hX%_j °ÅµYìýUÍ­­/k¸êxa‘ ¥´?‡ ¹{íòà¹?VÆM Á-Ä3Lí³Y=J=@Úá´ ÝP¼¹! +´¢=M°S6—2–‚àöùøÖ¸2ôcNª”Sòîøk=Mà A¡á€ó~?0üž#“vÎÂPÑbÍ›¼“ªk×=}ƒÆˆ!¡&¼»>ßs{VþŸs®ÿfm²ø] ŒŒßçà|û€‚ÎÔ´[T¢Ž,ðëNÎPYå_×(’{Ö®MÍÂÏÙ +Ï-â4ýÞ˜÷‘çèÒˆéå>/¾jƒ|3.=M@6€‹‹mb^ûô[q9Pf¼±6Feá€á…ÓûÉd´å|Í×Lº,jKºq‹§ËÀûš¼Ñ{ÏT‹¶j=MÁ° ›ñò,éÉÅdÿÑ/Ø)*uOF›¶þütNfà ùY +óxø%…HÌm„]}ºsÆÂöCß$¿áÝŽÑŽ¥„„Çg3~r=}ÂüõBªB^·Û Øunþš†²¯VÓ¬h:.»ŠîeeŽxR=JÕsY¤"ŒŸ,b¾žÍ¡‹—Ù§Ö¶@4ÂtÌt[¾M3ŠHI<}æXøïåÓ +ƒ‹y¯tƒr*p^ùÃíUÞ¯¡ÝÚå©lÔbKÐýè?Bþt›þ?uU®š! ð(åá\MÈ”¸4|Wdå¶qê¨Mö¥=JÚ­ô‡T²ïóÒþ’““ËSQ+ÏUµ&  ³ÃáÜDz¯©zñl[²uB.¼:†ïñù• +Öàq0W€Þ½=MB©4y háûÁUr$ª}®yR~õzH=@—á¬(Ôƒf¿;SñïV„rñ]IV w˜Ìî„b¾-uNÞýmWóÈ{ë åia‰a„veåÎúR‹€«yqkvM{6Nªœ„w¯À¤Ô +xm8>üv†kêr4f˜µõ…f$M²åþmFëí s²[ŸWæ`žN ïFûíì®®˜W·$éÅÖ ~p·—Rm ³t/`¸!ågtÞWŽ;wZíVúFwÄ]å½=}$µY½ˆ™Õµëx”‹D’p˜Hƒ5FŸAºÉ͵-ÖþŠ +<ɰ~>¥ /Kfe' ø´€¤lÏÄ‹¸ÈEÁìè7áÃ#Ç=}jËCL;½8[¸‹ó¦jÉ–àó._|F^Í:qíKÁ uY¦‰õo¢>®Îª°\óõ"‹ïhE(SËá/£=JÕËÏBb"ãñòF`¥ßÖ%d<°¤ë;¼ +sL=J¶nì›ù£I×=@žû]„W1¤°Åæl+z_,OQ:r‚Åò ¨•iä¯Ä×n|mmëJ†£¹µøj(wޏ/q.žZk{{ö:ó:›Nåé=M=@ý¿Fn^¿WFp;µJšhå‡zqÕ‚\uwí¼ÚðÂõBU +åð)*· äÏš®¿1ƒN~¨¹9:8ââßÂÇþÄ´bTÓ\ÏÈD±hŠ­ÓµþëI¤f°ŒH£Ï¶áioÇáûæÿTãÍ4´¸ muWCn=}¼uçÿ=}rÀÄ[½.]oÚšå¥à°é_£O; )*Ý6MJºÂÀF® +µ‡=}àMªÆŽ¼™¬oÝóUÝ=}íôËÎò3¢þ›OÂÏõ:‹¿U¥á¿Å÷„¨’"Í{RñJwì²ÛÛ…²€—þ"U÷2ãßj»n›°X;ózA› %µs‘¾ÿ,o*²» ;Œ›"ÉÕ—¶?=J ÀXjZÀšÈXMìè<™è +l˜ß$ÞβƓõ!‚Û<’â[b¿Ç›_ö›QòÏ,+VJ2ØøW"Ëjñ°xM†,{ 1UYûûˆ:Þ}»›N=MF«>¬pW·¥åÖÞ‘ÕïVÛþ6îPM;7ªã¨¶ &?D˜b‘BñO>'T[SMKîø'Y„M +‡VÝû®¸j†e;=MUày•PœlS"ÞÙFÉì<± ð@¦×=@åR®i<ÅC̰sÜ,¯ËÚèî'‡tmÐÒÓþÔOÖÑÒÿ üÞ"®¸Ä1:‰˜€EÙû¦¹b„ÊB%Vü”ßÚý¹ê’Z`U£à7©ž Qnÿßú÷{ +ßv8,ÎϱӅ U=}‡=@¥I_·~+ËÏňTëÀ’Éäí68 YeØÑ"°ý.¥Ë”mÓuÒ:â5sƒF<5]£+(’Ô¤V¤ ÃÒºrDÏŽÛãma>†±•µ… ÷877Y'‰Gm³¿×Ö=@ŽVïU]}#‚ öË +7X.d=}¾¿„·“B·p=M鱺š>´“z¶‹¬ÈàDdDH}{CG~ûÅ&a%ðSÔü=}´c'G ŸËoõ{úïíî½ùS3o'=MÝ=@!€'•­v]8²B&ˆ?Y~ml¬k»ñüUÚø¤Ô{B[H飡‘ÄKï ¸ +Òp¬lIæXMžØÙói—¿÷a6ܶéä  #æg»9¹ ‰Ç#h·cþ_÷`Á¶œ¦’Û9í÷éP¬aß’'F{qPOÀO=MXåÙûè‰ì¾ròªµ®.,†ÙK;Þ=J´µûˆvÔT°ÈvM²˜‰9üõp£=Jù +L¸D°^'øM‘ï @¨Œo¦>”Š3â~Pc½µF±¶ÀŠá…Õ‰ŒBÒnœ¸Dí®õÀ@ë+¨¸ô=@(ÔD¬•&KD³xܘ OjÇ&€‘,™ÃþENÒÌ[¨9§bˆ6wH øqvøP»Ñ?ŸFo^¼ìMg +^«ñ±K¥CÄ%†¿Þ´‚ÄgXDB‹Ä„òjrð*»äÑn{6'è{ú÷Ocm6ÏC³ü‡Û•…ÿéįo’e}gŸhרö„÷fzn?>_[^¶{ð;ݺÂ(GfÁ÷ñ&‘Ña2mÎí$·RÓ“^äôæÆwî! +Î@Q¢æU†?†zù?¦MÖgt£ŽëÆw=M›2œå ËŸˆ£Þwqbþr{_fF¥mUfM ßÛ ó`T>xTóRpcÏÄm²rÑ›6H!&=@ùY_´”dØ/róa<‹=J f°½—¥‡ÙµÒ`°Çv‚óa®uÃÈi +, JÛ§SÎÐRêâî{I2›VšU_Çè¬a‡UóÍûò\|q[rep¡ e(FâÌM÷pWd¨@c©*††M› í°á·‹6$’­F¾ C¸Fq÷íF‚Ç–>––TÞp86»+BqøXCE„ùáÄ;t]’š¨=@Ñ +bvÛMõÆX%iyÍË=JÑÙ tXZíëMKF†mA¸÷›U þÜ“ƒžþ?þŸ#>JŽ.ö‡/ÂXåÌŒ¿“Tß4¤³ËÄÆN±'ÁhIÅ5_×ÑwDïP)*„8d̰’¸&fDrù"¡`Sšåkm^ý÷[²ñà =}·ÉE¿ +äåÈ ^ß­LÑ4³R,ÓRêp'Cò†ÙÝ&èt§=@»2©”~c¡Ô¤d£p™·ï×½„go|™÷9©Î¼3Óð¤ÂîÐSxgÈ\¡™=}–¿ä~ µ=Mronb£*?méqÉów˜´Ù®]”S4CμFïî£öÖ¡Ç +ÝØÄ]”Õcp¹ ‚ÅŸÇוVÕŸon„瀿}ZqµF±B¹˜JaἌîùWM½yBðÀtII-eòB 'ƒ=@$M“ ¢ÎÖ6tJ=} c[“G%éôôÔC ؤ^-xÍÄ2”_ɲLJ‡=@e­&6ˆ!}ywqëÅ +‡t²¥]ô7LÈBl+ÓA£X¾È˜õ9“üº~€~›P'=M¾sÂsªô÷éYôôÌ^póÔ°Ân®2ênnwØ'a§ü»Ñ^¬{6ˆJKFàM¥5¥Ø_¹=@þû=J¾†ãÜ])*¯>ÇãÍþ=JSUrC#ÚE–=@ô +舢yÑ­¬Ö.,=MJûœoÆqØ Ýè )*¬ïçDØbµyCSíCuÉ·Nx£‡ Ä„'??=JÑ{.âÀZccFÇùõŸdUw<~{ì^N[&C̺¨FŸ7Pxö!ç#€ö bP¬+=M6ÆM¸}­aòóøöτݕÜ +2”0}½´yUfQ&`§Û—äßæúÒqñ¬cÓðÈÜÎ¥ñ­¿·±HÏ¡q^q‚_-¾ï{3oêðP`V¦¨³Ý¿éªQ ~më¾5;óm–I¡@mrq`ÉéðMK¶è-³"àå;iËKyíðdzÓÛÀl/¡‹¥—§û M´ÊoD=J +ïõÂ=MFÃ×á]áä÷ï£OS[Bò¡a+@a•(6âð-ÒI·^ìÀ * ])*¯¼»4ÛyBî‚î,;ÀíFÙ¢ëÅ¥ß!}ÝÛ @Ð3õLêh€C ÝóéÝTê~m:éÏ"Y ÅÓñ›%ÖÃñÐ,|uJ îšAP¸< +Üû…3ð[2¹ ±9Ev7õ—)*äÑt{ñEºóhj¢²²­e=}ဠ¥ƒvãR£®ãmKS[¨OÙM…•ÜÓ´w*ëƒnb¦æ€6Ø =MÝŸ†Äi³^†þa`˜¦…fÁ¥©û7â’”wx{Òºq=JÁZÅpXBžåeÏù +M©*{ùJñvj³² Pâ(5¼–¸¤¶ÏLºÐÒœFèO"‰`u½¶ÔSø‡ ¹°BªmíPc4‰ÔŠÔ„ÀÀ¼Êî²KÓ,Å&•¤ÃaÖÚLRøtË´ÂËCÜ·!‘ü(ò·:}eÀÆwSºoM²6‘æ±ÿã î¨Ó=@G) +*Åë ~-÷{K,Úå¨ÅÅ9´ŒRŽB‹ôÐk;K-ëÍ'gû…¦ÿ=MCI±ïð{FêNEß$ƒÙ'}Œ^p{óFoObmÆÏ¶ÈwG'áf§l4a؜ٽvûÚ­:°½®yN¨†îYö"Yú¶ÉÊØÉq~\zíÒ +³úülKÆ›&øl÷•£‡’ÈÜÙI¥ÏÿKÑ=@µ ÐË{Hzýk/È@§&ùŸTÄûÏON:þm‡XÅÓ€· 2]‘2k–Ùõ $Ö[4_‰(gyÁ ß™;²öŒŠª‰ÉAžü@LØËËÈÉ  ÍÐÿFæýs ñó¡ EX +/”·…ݽwyt0n¦kuO[™X7ÖudÑ5hŇqzi$PÑ}tAîÄ”L`ÝŸ‘QàO©žŸ­µ ˜$Ghˆ_>‰@ØÊµaº1Ãô÷õä#ç(‡Z$Ƚ´a%is}2 ‰Æ¨äB$ßríØ·X†ß;¦=M)* +¯7=Më×Í©üI½èû;ÖÙJ,óLiÿ§ˆ=@iÅ ¡þÞWbTè2Á6.†¸yJ ¡‰t‘ë$1ÈÆ‰¶»óÈÈ,À]HÀèc](•ñ`ŸÁ­¾m +9Dƒª][¥ix ‰xBZLÀ‹HJŒ%®`ó™6 {­BЏ¸yñÓG‚áœ$–Ó?öîmzpj=}[p.\;Ýaå3… WÿÈ4_m1 ¸ÙJ¶Tµ¡ù`íÏ'GlŸ#еwÀ[½ñ^]Á@FÖðKý›äÕxÆúò Z>?*² +±9Á°¦è7׊ÓÕ2¼Š8ZülYJÏàñ&û{ïþš'Çyq6ê\Æû*íz@›ìÝ'‡6Æ=MW;ûËÑþbZab¨E£å‰þsà°rÎѬBO®È£SÚŒ´J|·²‚¤Ð‰/Œ•„á’ekË òß7,ÁwÖ=} +~ëOobw5pS]=} ‹Yô‰a.£ˆä×_qƒk×Ä‚äxÏO–=}cw_£3+øøk&Õÿ)*/c X$þ›ò>=Mƒ6­» .ÿE5é¯ëÀú|þ„Ç~fŒDÆnãÅRÄ@Ý©§ÿ{W7Y}œ×ÍTüf4r®Àˆ +£½SÔ^·»u>Ç˾"ÌY~P`"˜ùß³é>´TAR“nj͸ˆEð[1¹f† Ñ#Ô²ÚL]{í^þîù\Àðg®Ä]©l®:õCí9F"e»â­°vçŽ60ŽOzO¶ð‘믬ø(QwÃXkïÒ¬b“uTœ" +Ýq^xa  ïæþäsí¸rÔ¢ü Àv/ÎÝÚÝR¬Æ¢÷{îJcIÀ#H9¡™QrŒDŠm¾»¿scŠfÆ—õ'`pÏ-ßÎ_¾‰ç÷^Ö#_רÀ$VÁ‰×p›Ï½­^œª°X‹Fµ?Ã÷Á‹DÛŸg@4 +øPfí»ºIÈI` =@³#÷8öðƒlMëô]Bi̓ ÚÏûš¥fm{Òmy;Á*lü&àö ÿ‘: ÷y};ˤ¸ÐCI 6¥hvfßá†úWB>¤‘.ž¤ë¾æœ?ãÄ·)*?ø¥Ú×W†ßDªâ[š K1Œ +¶–ùô=M™eÓÐÛoÒüÕ5R”Ìóê®Úøv áûL4Î[’&–Jc[¶#MÝ©yý¤ZԆ“¢:ñ^ëGVz šŸ›áˆù/~™ÕPwp²ŠÑ±y*=JÆ1šñ›‘§È'ƒxôýuÔÒÖÅy=J  <"Pkòve]{:–’ +Zs²÷;ó>t8 Çé“ÀtÈ{>gÇý=MÏ fŸß~ÝŒ™ÂågîÆ¨ÕD—눸R4R¢_‚õµ¹:ä' S]eÅKRb» ìc.™°ö)*û› /ò²“ '=J»Ž£1°ô¹úýbœ+*=JLo½=MÜú‡xc +u}B4“bÛ³‹OñQ(#èàY/Ið¹L3®=MÃëêtvhÉ)*³‘4Ù.]GV_m[‘öLšìoóEáÐ{t¸4ïT5³]ºL¢ñ×ɧ'Á‡s°ÜÕ³8mV°AMêZéÓéNCo~iëµ;VVÚó]–¸—êþ +{þsyGb¡¼îG¥ ‘âáqÂÎÀt£²’BrÆ+®Cí¨Ì¡™UVÔ?F?“èB>Mð±<òPY+-_ÈY—{?÷ŒÍæ5üý!}ºMJ¹APá¼b°ÜbôÔx?[õõî,1éɉ×ó×K^?|}óF\Âö{¿Ë½’=M9í +ö¾|à‘ïWj}ò°qF¸L¢]©}§ÀŠâÚ¾¾zó[¸Ví œ‘åXSJoQëH^f{KÚ;éqQ~Ô«c¡bâŒ~œ*ðm3²=J'—‘IŸ3È6ã®ÔÔܸzÄ“qUe=}á¿æÖ±Ãân{>]}ìmHOKï¥=}¦èô¹ +úÕ^ÞûëK}ª3=M¾‹¸ƒi'VÎúÚ8J‡¬÷Qz$Ÿ©tTUoËð;úñFN\Zì™Ýbå&»{tžûp~Œ}íì;U*·öÇ'…LŒVq;:c㚸’ï«ïá—'»ÿDhWöÎR‹©:heóçÙ †áSœRÑðb"Ú³ÇëÎ +K#çY—á|nKÒJº­A3Z0í"¹fÅ~íLþ6ÞÑ{t†ÜÀ.,1 ÷Áž•r†Ž¼xNø;¸cf­üZé€mW˜æ}»6¯ïÂp\ñì=Jï™g!}¿÷F®{ý:Cº'‚áe§_&)*O¦:³|rNo°,cpFV„é +Én÷^¼~ð½åsb²º‘¦GàK™ÄÕ˜’"Ãp\Z¶aµ î)*osÖr=J<¼Õ+¾<îN´í»#& yÙûdsïµ·¹I¬Lc-ð7Œ å‰¨µºÔ×Ix !óÓõpÔĔܫïQÌI/!Œ §éuÙüohwp b^ä¨Ò +|z¿[vm¯~¿a2m0錿„Óo=MÏÊѰqÒKøÞjª!¿×›ÌÇD'—ŒÜ„÷fb^^¿-X‹_ŸN€5]™¿ùŸ^õë|µ{þSxËÉœ9¥ÆÒp:åQK¾ì§:n-‡:ý»FYîø§ˆ- ®±„ +ÚÍWŸŠÿ~úþ€q>©ðÂ\áÕb&IX©ëßuq{Õ{__op¾ža¼ƒO`¨aÀü8ù#Ø}Ý=J%q$c’/yÑ”DþÆH7n±¬v¾{[¥] #ÙzùçöiƒÂXZ%^»#±¿ò÷§²¦)*àÔÒÒ+ÓÌ +ví¥d±ú¶†Gд=MM±SWK}•Mw^ÉÔ[ïyô)*—'Ê4£ Àph9ï€V…ûÁYáÝÿ†±[æðƒCA =MÑý¨yg¦I}7ojþý!øFXNö£ ŸëYüɔ%\üÏÿÐÄZ=J˶x"ß +ýó§v;ëÉa§S6o=MùV›ôC—6ÕÆM¼{Ò˱S›¾uCB¹›éÅÙudŽùê°°”œÓ±æ?õ3g{™ï;á/D³=J°±!Ô»#rb‹ßÅшç;ÎT¿~}bþ7@ƒ¸X[ô=JaÇà‹Üà[5z”_Ì>š¶Ë;EÛoŠ¡ + ´Î^ÿoN¾«=@oð§Ú¦GÙ—ä»^ú¼9¸J^JLoéïë蕃àñ%K=J1³^ÏyAïíÒd˜jC™óç³ÀwÄ:~zFþÝ>ü3²½ÂÅepFç§”»fú“Ð߆›u$۴иQ¼3Ó¥ö95ðîîN=@èõó½XÀq1gn/f3¦RõM\T?’ç.œq¾®F¬lk§/"£V hžª¶ +ÐC5"mIM·ÇáÝ¿7Ô“Œ¶#­¾AHÃ¥§@t=J¹Þ/b=@Á.9bÊ=}Ãð÷½e¢ƒõù$çÙ‚]t{ñK/[8† Cß&dƒŒÿO~ìÄ;(;¦€“[Aç ²È2Œ®Søs5¶J\2­¿±ÆÄ)*³\–“¥ÍLWl +‹ÔÔcHÄ3ì89MiÑ`o^ئ7Kÿ>=}w8.‘B²kÇÝ"Ã'Nô ûÄCøÐ;HFÝqS6ÆQ¡éÑüâNRC‹¼z øƒ*ž‹ ÜÝÜ è2ðDÜÐÒ¾é>r˜-Œ‘‰óC#Ä34Ôl½+2Û1£51Gà +·¾=JÍ\Är¹æoP{é9U©^ÿ¹É]{ÆÛæŸ}|íQ8kA¦ Û‡#Oká];r~ïP1ìÆãdiyQ)*NÏM´„|´xm¸Í<²MW&G^®üé ­ sP«:E;%ö±¯Í¼®_»Ûí35®›»Û»‰Ëå§iq÷ +FquîC4V“ñ:2õ¡Â&÷É‘EÖ&ó¼iÎ;Ñ,,KQ\I7ä˜ôĨ®\ùîµÂR(;ŽšØ ßá†3NGPqVÚ± ²i6G­iïŸ/ØÁzT’n•,‹U+ð…ªØämvÔŸ:bðfbá;ô €“E(ôLÓ_lt´k¹³{_sw +Y"Žw•ž•%0¸cÌC´z·îÉ ð¥‹ÿÅ}äÕêj‚¶vQyôâs¥—§&ýÖ'}fõ}ñº¼ÌXÈLíAù)*4Ä{̸¢ŠÄlMR®±cöιæþºš"šÿ‘t›µ¾<ó@Vv(åÿ;0Tªoð²NKcòÇ +ö¹ÐáûŸ½\þP¹­Y8{A潂lfˆ¡‡Ø3q_büþ3òf“\›a¹&` ²Ó(ômN8fìƒba¦E(¿…DÀÄc4|ÒϾN²MHU£‰ÄSOoWræZqxœ›˜šì| AèWè½#Ñm15cÔ0¢ ‹¢"v… +T=@.ÞŒÛíÖ}||>ùOn‚s¯!§Ç¨³Œc×|z÷m}mÑ>x³.°|~—{×›€ãŠí^Ä®ÍqkƒwëJ¼E®ïè =M¨é¼øcèX¬£‹›¸±„=JïxiH¾®S¹aQ ©ïŸ^ÛpyÓ”þÍ{Öwuu¸÷t +6 ]2ÀPoA…ÖAÊÒÒÔþì—d\îJT‚=JŒàøV÷å zÈæf;íW`Ìm‡OY›°K'ôHA.óæ6=Mþ©ÃRÇ^ˆúH§xè°¹zÑÊÎÖþ”îSŠí­OÇø¸eV] LÈèù1ç9D?7`ÉÑüÞÛ7^Œ+ûäa +‡ç ¨=@}`Û%bF‘6I[ Iï‘~ "(Ùùçé%kû°Ôkýh!IWð&ùݲå§V„¨°éä}»¤Ê²éz‘…hóå}bñÑwÁ®¯H—I®èÕÒwvcŽ>&­# {ë§qW=Jr³§X¼&)*„ +“„nI'Wog€ýq&;µìøå˜ç¢Ñ­ñ½Ç%ùŠ’ñyûS=Mõ³V›ßö˜÷¥§þ²ü^LÇ/vL~û÷QU¸oô8Þ°_tc›Ñô<8ZȈhÉqÂÔÖ¬ÌX=M_cñ:ñ즌å¸&˜ß†ÿŽËµÀÆŒïêx\Á›åè +%X…ÕF÷€µJùÏÓX>ï˜P&ÉY~‘_¦á{¼å{Ñ›½'ÔLQ1’'W§ÃÉù˜Ò ÌÖÌ»ô”¦\´2"¡‘¹×¯ òTèð¦cTÍR+¾rsêÌå=}e{†ô]m{[qt6ÝG¹ÒÝ™'¦ÿµ¾_»¾¼sQB“ò +®Î,´#g#én‘7Xòük{ƒeÝp:z€LÒ=JI3Ö(À¦!ˆh×ŒLñ÷˜¹yÒØÒ=JD^ªjûq†žæ`‡é‰ë£bpIþu!ãÍ7-sÏÊÕÏÍÔôY®8-=}­ñ‘ãHX&¹ÁyYO°_6èO:÷OV +i,[=}:…Sa çÖöøçVµ/_nž.3÷Y®èwAo„ç\äs1Jd¡KKꮇ³ +žBŸ$ž¾ {J¾ì=M³‹Å—ÂÉÀ»Ò¹-CZ¼}JA37ÝRÔ~`åó;.\¯cîXWCoÞð>~D¹{É"ÂlYº8-Y¯×§‘_‚,DÒ²”L86jC„!éU%X–n]”egf£voíÂuRjå„ wɧ  +®p´ž­‡7B³€¢=MóÎ ƒÎ%Ôž¤”á}T'˜qRœ+8Pzè=@PÝ"§ÙŽ’ŒÙÖzó…RrLJYzJ¨ÖÕ%ÐøàSÕ°Ó"¼u8LxP,@ñAáUÝ䚎þtZb¾&–Ί;i°¡Úå‡Ö!¥]=@ßBbºþso +|q>­e®Â+µà©i"~–/[ÿаÈÈl'¾q`¦Âv™—ÇÖù}ìŸ7’â¿­ðêpfîQºaVáñ&¾ï;4ÞÖ²ªÎ°ÆTºo¬E…AÝ_ÄÔ!„®d¹“Qðb 8¢Yí }Ýœ  }\õfB$~ú7i +7=J·û½i=MŸe…¢ÒûC”~ýk^Ÿj¡ sé¾¶–Ö8 =}%nÐWl”DD‚âšûë2‹GùÇ«ÿ•Ù>d•†Kõû} +kM»›‹ìK¦*¹÷'ÌU­I“”XFž›ÁA³XW:‘ñ©Ðô ü¢†ü#y± ,Hˆv†Ø)*û\²žÄ’¾ÆˆKõ(=@Q™ÌñäÔ¹ghÚ}|î;ý+ò-¡  蘡ûë=Jù¼ƒSlrqbíÆãÌùŒ™Ùƒ +“OTÖÔSl‘Ài ²˜êy±Áw'tÞŽº·óy_’q¹ƒašÜQÔÌR¨Fþ 6{¹QÅ3¥=MßÁtª6ñGW_h[æy²Zb!œŒ˜å¥ÖÔãÕ°´;s{ƒNûýíI@vƒâØr,¥=}h” ·ojñ…x_® +R³ß~LÖàï©O5¯·xhK¾\nš¶âÅ⹬%…иT!§lq=M5«Ml˜>¡;S.Ã5´;¶lí¨†äµe#%SÜ[ìqKw8ËGâ˜fãaÛ]Ô£^=MVsqy¶NNWí@ß߈’°´›l,uóF +þ"ô—­˜Åiä^„¼ÍGvŽD¢Ìb8k¹/)*#Á`^p{šˆ\ºâ°m¶öoádzÖåx²°sJÂÒò2œñ¹cÝç&שURpÄ…f¢ÏF›¹ë=M²¾ɽ%)*Ìï¦÷v\mëBܦð]èYÿÇý"X5œ´Í·ô- +M9øy•Ãæÿ–õmqC|în~Kökº™ Á'ü¿jnåîš¿füh!;ašU(UÑ÷ˆ£ïËB“ù*VœEè÷ý™Ô{ë npNFjõÆ0…Bßéå=}‰ÆO¬Sò2Ë6ÜFwÛ \0&§e£R?p2Í)*@<,@XJ +«hi¹ÜTÁS¬dzD¸[ó¶ökuWé²!oï¦5bøpz|†ˆºÀÝ¥¥(rý—@b¾oÔа‚Îñcqºwä‡MÕ´?O^}=JA\ð-¸. %½Qr$LÕrmïÒ®º‘îùÁ+5çÇ!ULÕ§@TQ¼ÊÓìÆö›ö˜c§ +RUY÷C2šM¸kÐÒ=MŒf’÷ë$ˆî÷ÿ“Û]õkf{ðMxCtfËí1öȆÉÏÁi¥ÒrÍY=J®LrCt)*=}$иŒØ=Mk8Ãl?^ĠĨ>‘F»à å5çÁ YQÄ+ÐüŸÓâZúÆ^Þ®Š}c9ÙR½Ý…p +s,ܼD ߉âz®BƯ:.#ƒê¦'`¡ÐÉ_gp‚ß4a®tÑyÑH}”İ»f¡ñNMý©=@RR¬GBµ âTEÍ_&€qÍ=@ÔÌÌÕ¬É}=@H–"žZôq ©5[gíÖ'D‡ˆÅv €’mÐ@+uëÑ=M +ší¥=}àvÕÔ™§¾üû9h¬?>KuÔ>¸¡BÄöOŒU GçÁ­þé¬$»i©'‡+¶›;9YàuYvbè”›2vnI¤îÚÔ§6BâiO§Ï”ýDº¸->² i=M°åù¸¹dK®‹yxƒò›ýñ¦¡,Ïó +ʼn;ÒüÎ<œ OñS"}d°‚%}Õu ,ÆÖ #¨éqöZšá=}v/Ov{Z–`#ØuG¤hù‡ExÙ¶^ßÿ‰ÞÛý­–ÉÉ&u“÷ ý¥§wB ²“ð†±V¹õó¥Ó©/ ¾Î2=MŽ©ÑÝ×Kµh +ÐïïAJ£/Ö€©E£Ý‡}RlfÙ¹>.1aÈ€óÉ;¡StJ"lpfá,¸(G渖Í_;~2ó_ga@S\AD¶ˆu)*Dy/bSQ¸ÜCK +4ð[œM¦óüÌ¿E¾ßco °Ê\›Ã#òìö!›¥gäL ±k 0ÌT¨q6Û뮾&·#²æ÷¾ìßžGÇÈr©=@Ä«N[{{û6Mô!˜¸=@/ ÓÑ—4¤‹Þ$ÐÉͨñÅnÄ|3‘¼¤Ã0D±»ïª$ +æó\"tu)*½ÊTìÿ,éæoë[A=Mw8=J7äWÌ4ŒÿyOoH\v;ôOK0‡3ÅæõüëC?pÍC|¸MV.‘»µb±uà ¡‘_yɬ”dÌÒDH6ͺÞÂ]åLà ÄÂþh_kí¢B‘"™™=}…÷ÅòºÐ +¸¸Ì®¥þƒHYJ çÜUƒ Ìø¿:ßJýšMCLe»3]ÚÇ¡  âús6œF»öpL†-èjy‘óÖ¸p¶#¸Z÷3}ýrfhRÞ‘µ2]$i‰_3Ùûõ«^cGb¶©ëÄUßÉÙy^€öMؼ,¼ŒîbŠvšÇj +˜¯ÏÑâþÐÖÀ‹C´¯ðkFf—á ³Ÿ—x|\Äcl:X†ô=Mù•ßæáov§4ÔV”Ô®¶q²,ù¯a¨Áèà‘‚º»q~OHz»¸‘ëBÙµå=}¨ÒÇ–€ý3{¿Žê=}C¶ì6ëM§–Ín§ˆGR!¢•S‹ê™Å÷ +ø,)*Q€ ©ï„›¢Uîjzs_/gsvŽ®/Sb?Èç$Ó„ç€È?zqOo?F¹ÀF[f[ =M™iÔ°eÝž${&D¤»²nŒ]ÓÒ‘› ©¿Ä"Í„m…ÑûÿI8l°ÀR3N¸ø¡G•é¯)*h8ÝËüb<~. 4÷­ +Ç$ƒ(¹âñw&þÑ´Ç"œn<3ºF·C[Õ™ó¿åÍÒØ°’Î'IVËÅ®ö ñ™(T9.[~:=@¶¿~'þ00³öãaß'Uä„ÔÊé(v´B¸a¶m];ñš¸›ëÁ;7of^_ñ7k ]Hvc[hŒáÛÔ€é`¦ +Ÿf4ƒÔP=Mc¾¼Ý£À"Û‰õˆ’Ȱ¦¾ü2ýÆu æMµÁý ¥P´Å­wí¸ƒ®î°)*5Aåéÿ“ëF @Þ&4ÒŽ<,¨að,eÉÄÄ•8ÅyK¼Sb³ð‚ ò„ˆ—Ämi‰Ù°Bêði³FŸBHFùÁßã]# +çbU­X¤x…7q@”[ ÞL˜J(GÇ!å£YeöÝì[M®UK[;HNÿBÃ-aÁˆáä°»pÄR ²¥ÆqNÌLqGóá¦áŸ–”?±æq±Db(J>⨹ o~8Bì]>K3tb­ñB†ÿÍ%ÌÞqbãgnÇ4® +¢ý3–X! Ü­cÒˬd„œ®”LF »óçcEd;ë^ºuBm^ªYέÄvÎ¥ w§®ƒážÉßäl í^NOa.ÍñBïÃ'>念ËXgfl|*>ƒbÅ÷ ¢'X÷ßÿ>Õ@:ïx[ýƪ{oæ»ÅŸK¡$˜>¢ +ßkN½1<}QUqå™àyèøô_œ{÷Fí;A¢,öpUv6ñÅgÄзØýkv|k”ÑY ^»_ó ÒÅÑÿ ½›Ìâù¶‚³m7fÍø;¸Y©¿ã7šw?§~ú¡¢ аÆ8^«¡·Åü }_DÓnq³x”£uAŒ…¢‰ +x¸ÿ’„½·uL'A ë¾¶=@)*ì’·úþ:¿Fí}uí,½P’—Ї˜åÙý!d®ÕÑŰ[õ¹5ÉIB¥££ÎãÞ„êÆ.М¼Ìk•½=@‘‘‡tæ=MkëSÐÀÊãö°ö á¼Ï“ëCµóí¸b*ÔM;a +»eáäÁh,Rx“°“´”¡óêQUåAáÅ]ÒÝ0-/mw:m{;cF¯YK£bçä'VÑ!(wŸpmÐè[î/¸NøM$Ÿ“û¢•M»îÔ*NµVªtŒ©÷ð¿÷6ѾüwH¡B»²ÅÂÐóÌ lx\}¡²òMôa\è÷é +‡Äãw.œqCþ¾ˆF&™™8 G—Ñg^aN–[ÿ~Bÿ6˜j#ݶ¸(!†›6±V¼;q;Àmò,–¦a©˜(®mWW’í}@lnî/ ½•†wPÐ?ÌÜFŸ¤¦Dl=}4qÊѶ8(mŒèù"XåëÓ>ÞÞ +Ü¡·pÚß”¢ñãk¾k²eˆøt?=JüÍÖ¼°˜'…8ÏÔyжh^W•‹@G¼Ëø¨ èïÓµ\±é~÷|Z÷Ugwrm95eÙ½¿ë '0©—yü?¯g8nI%˜è- BKH šwmKŽ,Œg2V%§AÄÓ Þ¨ +“þK°wrÔNXÒH{$åYˆDØÚô%­v¶âæé9ýõ"V =Mò½†µDC²ã£§‡˜ÔËÀùïé”?¾ºÿì‚>Ù]×%§ýþ‹íçè©„Üý%qmÒfN—F÷ߘéÄ%½„}ÅÇÅC>M‡W^ξ¯[ëz@ $ +oÍ@ Œ™/š§t¸b=M¬\J"#ÙŒ”f|n\ð\;*6Necžå3Ô"]ôÜ[ÄÌhcñ;@X¨F‡Åõá‹{öäMMíí²=MÄ2,(–xå)*~¼Õ £é9tF㸃ªŽ¸’Û,›—óçÉ\¾6κ¢ûœømî¼mŠi +‹Ý¥ß¿{»Ê/:÷Gi4’ð\c=M YC=}hÌÏd™4œi84²Ì®l{3‚=Jœ‘ü_)*ÜÞ)*÷ã2ëGp*[2¶QCÝC-™qÌCº¹ŸÑÔJ ÇkÞ`1å]³É˜~‘vÇ4¸4d¸Æ,(1¼Hq»ñÓâ"‰î +ÜÒLÇ`¸ŸÍ'kY¯XÔ Mî=M/¿ævYQ ÷wQÞDÜZíOg^_Þ=}fm^0öœp[Ë`PÝx‚'ÝrÎ_çÌÈÕ·ð¾öîk òƒØ@@ÝgÌ<˜b“ JÄÈ‚1-º1g!ïØpO¢Ì ~}7VL[ +²ÂÞNí g¯Ù˜ÓÜ‹×íª°dÓÓlfÛDÑ®™íå· éäDRïVš€p[Œ-öGZ»$‰Ÿ½~ïzmv_<@lN=MR?ù͇þìàsñ¾®°’Û+êsaòý' vÓË>ÜryN†Ü=Mîîí#e£Örä”cQ¼ÈäX£îq +¬€šUiýÌÄjDC%ÆïNj†e=J›õß ¦©Ìç»ÌÓkv~ 9bòq,åZçÖîûä"{_6ãÓ"/¸/ÂââvA˜ù/C^ÔÆN½M½ÁQ‹ P!©ëmy¡¬k´œÒR´Hí=}¼s+¡éÝþ¿†//N:þ7ocÆX¦ +»ãIJåaÇç_q`¯7F&lîÔnô–ÈcYÉ=J ¬}p‡oa1€<¸ÐCÏ=J3¦’ƈj#ØξÓüë~;ÿ3bðP9hë­å]¸ùßþåÜ·’r[VZîm½2"›Œ™uXíd×?¢?º÷Fžzþ}¶ÃpµYW°! ÷œÒ´ +"T!r˲"b"ÛÆœö ó·m€–zñI6uéÿbò‹J†=M‹©5i±Ñû¡Ù^¢MÓðd”Ò¸tM=}=JOï¯ÉîVnÓ?E"\ÑL8Fýé"›ìXœ=}] A#‡xôûpT¶ŠÖ¼vôLÒ¶«ïËg!cØÊí/nú +~ADÈ› bÈ9¡{ІälðÃÌo`×BùuÓÌðˆ+£aö˜C•’ŸàðÌ{ûùy2=JqWJµ*Z ¤ž=Jí4²0éäýø¨M‘§ ÿ™Ÿ“¯Ò¸›CeÆÐPa-b›‘ ó†lœ’“ ]}~:í²²âº©; +(àŸÇ}ÄçÐÆ¼oÀ0L†Ê<…×æÃ‹H—}1,GlÈ[íµF£áãiô ˆVÈ™˜0¨‚ãqJmz£Š3Ýšíô%'ÿ¤Ã=M*óðK² ÁV‚ãÞ–ÅŸò°oÖÆÍÄb”S ®›œ¸’÷ëØ ŽÒ€ìKÀÔ, { +¦Q(2=}Ã5a³Çrl]T²;ºâ¬›³‹åé3äµ]£Ø¾®Ñ2°BËA´[ã¿=M³Å—ÅÿÜ>ƒÔ^õ­ïÖÒ\F¶á7«ì)*´ wf/OFABŒ¾¶›P˜pƒmwWH[ÿ2¿nßZ÷B³0{Z¯ÇÙÀsи +ù_d¶´­V8frbû²å®¶!øð=}n›Àl„¶íXš·ee¿Å;Û—Ž“ ÓûïVš;|«¸‚É9¨Ø(Âr~i_'¡ë[ÌæÍ²íJºŒ0—»çX)*\ué]{^ìnkPO¾±PW©¥}†_.÷ +·y<=}½53â`§›•´èÎlî¼±,ÊŽ¾.º0j1éôö ¬½ë3uPŸ>æ}ÔBõþes?p¼ÌƒÌõå&KJ6 +¡;£Ž:ë²òŒPŒP`ù°HùIçÑýÑy&)*p'ñÖ¡GZžØÇ_Ù( éýû …ÜG¹%ü÷mÝäÞÄ/—Zï.m…“„ßÎ:½ å˜[󛜋›¦ˆö%奤=JïG¤ž$¨‡ˆshhhçd ý$'d¨ +Ñ'ùû þÓß7ŒÐ´¸ÔÕvýTOÑ»»²·=J¡£7Èb®,ê ‚Åß$5½ý‡¾¦iP‚§‰VcihÉ )*íøúoØÞoº³·ñA"ÍÄSóvŽ¢IÍaš¼÷ Y$“ø ºR¢ºb¹ ¶Mùò¨ä=JÙ>ŸþâÓjn¯òœÀe )*Ì´¯pp™¢Ó¸Ìr”ÞÓ´Ænt=}®!A Å +R#Ó¿¾£ð[¯Ž‘õ’ò]Œ —³‡o’¸ÌÒÒH_gvK;Þ¥Çù &¾/¤”Ì/F‘횺ò"»Œ¡¡ï!ƒãÝP8fžï6¾Þû=M<¶]–=MåŒ …˜ÞúÔ}T—ˆÔs°”-¶"êšf @©Aä’¥åÎG,äÜÊ®” +x‘ɃâÍgN¾#ãšø<¥?·E§!Š%¿§™&Éiü¨²es ¿îmqwwY +¢ÔD„ÌÐÖ„„ãÍèN-œWà Ø%çØbqvixéÉŸéÍô™á8=@ÿù}Z ¢h5k>—ÎoQ;ù6¾—=}‘¡ARôøwŒ¥šŒåêì=@—ÀÇ¥õÉ#'§E7ýшé%)*Ü‘(þÕ_èö~¨{Ýx—_•bß +ÇÏ”±J –ë¥3Z`&Æ  ¢d!;ýQ¨©äï·–%…ØÆ›qN{5]l-GV[®–NnN,LöPî –öw½!ˆê=M(çˆXã¤jgÏ=@‹b´m qOfÛÀ+dŠš¯ ™råáøÑÚï#)* 'µõ}%à +ý´bîÍJ›¹Mh烧BÈ»gQÑ¢ÕшǤ&õ|{;¹B,‘µ;¦ØX€—Å(„ã‘"Lzðk92pR ¡AN’ʼÌ8N ëѺêÏš[`6Æ›&{÷Xûë@z{i¡£‰=}Çóñ¡@©¥Ó²;´a¸[® +Ü[i0Y¥É¥„ÝÌïwbÆœ8F’Í=}¼\ º¯ #~–‰ÄïŽÍm>›üý®­¸ ¼ ý‘VÅÕ';6ceÞKzƒ€})*®Xm $#¥Õ•Õ|ÜÄàÉÝdfšû€7ž„f~ÿ„sq_öøM1å¨G3¦éf÷ ý4·?o¨Û +Ë?¡–(úñÒFÂkG>œ+E=}2¶ÎFàY¥´î¨PÞyZý“û玜~Fò FÁâɇÈò‹)*dØÎ¾“âþ±DK\ºM0íÒå9Áä _íž§pÓyvbo>¬›â$éQ>=@ÅþdÖm^®^}5\¡® +'›(É¥ODoØ}•¾†+Ñ ïBQ"«ý@¡$äTÛXk2¾¿«5"X€IÍUxµï†{ý8o7cA¶p÷ÜÅX}”Û¡""\=MA6£P\a?)*Ü×¹•Åt¬¤ˆNûþý:Æ£fލA¡ñe;µrS}{¾C;{ì#b³» +ÝÛžàùû€ðÆCÏo~6û]Iåèw!‡¿âó½qÒ¸RpH2²’ i=}(ežžœB7ŸfœvkºïK±S½e@&;Î.»”šmí¸ŒbyQQ¹5›YýŸXX;!¨Núª€*"Fy =}e§¨Ô`¡kO‹;ñGŸVbøür˜ +—ŒŸ…?4ÞdßV¦xG?v­C@cœöw }à'ßqFÇ tYC‰¿<épŽÔ“ldÇ™uÔ´CZðCnjîä¡&dÓhþRý”n¿=};u6¢»%÷eå½…îøGÅgìZRÿ•$^^ûý¿~f‚¾#a®µÅÏ +ýwŒ¹ãx˜üµñ¾üCj*ûí=}Å#S!?;6å|oQDÀÐa[f†kͦaåäçÒý­`鄹³¶^ñb=MN x Ý]aÄÔÑÄ ÒÕ¤¹:»Áb^± 0™i_7 ½z-Zðo[wS˜;ÚßäÝäðÓ}Ím +lÒÿ=@ŽD©±÷ô%[=Mûø÷ÂÛ˜Æãž=Jÿ‘ÈGawÂjP¾èV˜Kù¥ç)*ÏdÍÍb®ðÒÏñF°qYa±“0ºJ=J¡ÌH›æRfÃ"¾_”“œô|p[ï½ÁU2¯ƒÌLJ™{¶Ÿ+3qx.½¦ØSÑ¡‹ +´ˆG§¡8‰Cn0H6‡Ä#%舉aüëì?ŠÈvTÔVv+B¤‡ÅŒ¡#À”G†ÿ2ýìb†Î ·É×ÙàyŽ”Ñ.›2ü=M?[uI¸l¿É@Q·ïàzÉŒ×nܹDd¸6ÿ0‚é8ö횃ä€|DÒô“â­÷Z 7vQ­ +½]¤×Nž*âñ{=Jîqböi¹=J'~”´¸ þð~)*=}b ¶›"M‘é½Õ">’ÒÎH_nÚ÷³86Q­µipŸ0Ò[ÏͲ=M;KZ—ÚK ßÄõä×6&<²¥Ã1>X-ú†áá(ÿñh,SpÊ'=@Œ<¶oºY +í‹ݦÒÔvuSµæ¶ïòv6YOÅ‹ÚýÌ1L>p8Q8¾ð‚(*Ÿ·ó!â’“L¼Ft’Õ];›»(ÖŒ³Î[mGiÝoºôlQCžGç&þíÓR1å>ïY¦=}V6P8E¹ßµíÐÓ÷ƒŸ-K~}JN‚[/˜Ã§ +k=JºMº¢Ÿ<>ûìŒI9¦ÇäÁô´<=MBþ›xkÑJê.Wó(p¥P¼¦Ê¸r£Žô@M˜•èÉpÔæ‡p9¶Ü¡ùgɦ—û©QTás.\¿Cs^Ñ÷÷¨ªh–`)*ìÈä;@¸Ä[ÒÔ0[›.öMé_$iän +Drϰsên™‘WÛ $K=J®Ïd¦ôsø]FoÎý÷dž$Ä&ýî‘f½?p ³yô¿'m¼o:ÌðÕL=J¾‚ÆÚI@'gxÇs¾£u7VïC÷ï[+ ŽÝh)*¹Å^ýÄB̸dÓ\¾ðVt¿"Ňŧ¿˜Ù•žîQK¾œ +>\*ñÂâÇìgæ†3,‰±?~ú挂0ìèÑça¥N ^ËéU.Îi ™  ù–‡bt+BÊMJeïM®â¥¦öÅœbDm›ÍCKJ;Ÿ¢ë=M•…@™ÔÇ©ÕxŠ) +=yend size=110227 part=1 pcrc32=65c70f1b diff --git a/nntp/newssrc.srt b/nntp/newssrc.srt new file mode 100644 index 0000000..f3590b0 --- /dev/null +++ b/nntp/newssrc.srt @@ -0,0 +1,26779 @@ +a.bsu.programming +a.bsu.religion +a.bsu.talk +aaa.inu-chan +ab.arnet +ab.general +ab.jobs +ab.politics +abg.acf-jugend +abg.acf-termine +abg.acf-vor +abg.amiga +abg.atari +abg.biete +abg.dfue +abg.diskussion +abg.gewerblich +abg.gruesse +abg.intern +abg.kultur +abg.mampf +abg.member +abg.ms-dos +abg.suche +abg.test +abg.tip-info +abg.unix +abg.uucp +abg.uucp.sta +abg.uucp.waffle +abg.witziges +acadia.bulletin-board +acadia.chat +acs.nntp +acs.osu-mentor +acs.test +adass.archiving +adass.fits.oirfits +ahn.config +ahn.general +ahn.tech +ahn.tech.linux +ahn.test +airmail.analog +airmail.announce +airmail.flame +airmail.general +airmail.isdn +airmail.support +airnews.alt.announce +airnews.alt.binaries.fan.letterman +airnews.alt.company.wsps +airnews.alt.culture.etiquette +airnews.alt.paranoia.black.helicopters +airnews.alt.travel.air.airports.bicker +airnews.announce +airnews.flame +airnews.general +airnews.support +airnews.test +ak.admin +ak.bushnet.thing +ak.config +ak.test +akr.biz +akr.freenet +akr.internet +akr.jobs +alabama.announce +alabama.birmingham.forsale +alabama.birmingham.general +alabama.birmingham.jobs +alabama.birmingham.radio.amateur +alabama.birmingham.sports +alabama.birmingham.students +alabama.config +alabama.decatur.general +alabama.education +alabama.general +alabama.jobs +alabama.mobile.general +alabama.politics +alabama.shoals.general +alabama.sports.alabama +alabama.sports.auburn +alabama.sports.misc +alabama.test +alabama.tuscaloosa.general +alc.alc.bier.pils +alc.alc.c2h5oh +alc.archive +alc.general +alc.market +alc.stat +alc.suicide +alc.test +alc.tools.clearcase +alc.tools.misc +alc.tools.ovw +alt.0.0.0.0.0.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1 +alt.0d +alt.12hr +alt.1d +alt.23is.strange +alt.2600 +alt.2600.414 +alt.2600.announce +alt.2600.cardz +alt.2600.codez +alt.2600.crackz +alt.2600.debate +alt.2600.hackerz +alt.2600.hope.announce +alt.2600.hope.d +alt.2600.hope.tech +alt.2600.moderated +alt.2600.phreakz +alt.2600.programz +alt.2600.warez +alt.2600d +alt.2600hz +alt.2d +alt.2eggs.sausage.beans.tomatoes.2toast.largetea.cheerslove +alt.3d +alt.3d.misc +alt.3d.rhino +alt.3d.sirds +alt.3d.studio +alt.3djam-tv +alt.aaaaaa +alt.aac +alt.aapg.announce +alt.aapg.general +alt.aardvark +alt.aber +alt.abide +alt.ablecommerce +alt.abortion +alt.abortion.inequity +alt.abuse +alt.abuse-recovery +alt.abuse.minton +alt.abuse.offender +alt.abuse.offender.recovery +alt.abuse.recovery +alt.abuse.transcendence +alt.accounting +alt.acme.exploding.newsgroup +alt.acorn.adverts +alt.acorn.demos +alt.acting +alt.activism +alt.activism.children +alt.activism.community +alt.activism.d +alt.activism.death-penalty +alt.activism.drug-war.mj-millennium +alt.activism.eco-action +alt.activism.latino-youth +alt.activism.microsoft.public.de.sqlserver +alt.activism.noise-pollution +alt.activism.noise.pollution +alt.activism.peacefire +alt.activism.student +alt.activism.youth-rights +alt.actor.dustin-hoffman +alt.adam-hotz +alt.addell.news +alt.adjective +alt.adjective.noun.verb.verb +alt.adjective.noun.verb.verb.verb +alt.adopt.latvian.babies +alt.adoption +alt.adoption.adoptive.parenting +alt.adoption.agency +alt.adoption.agency.losninos +alt.adoption.issues +alt.adoption.korean +alt.adoption.searching +alt.advocacy.pico +alt.aeffle +alt.aeffle.und +alt.aeffle.und.pferdle +alt.agnosticism +alt.agriculture +alt.agriculture.beef +alt.agriculture.commodities +alt.agriculture.dean-stark +alt.agriculture.fruit +alt.agriculture.misc +alt.agriculture.technology +alt.ahbqs.com.sucks +alt.airbrush.art +alt.airline.schedules +alt.airports +alt.airports.uk.edinburgh +alt.airstream +alt.airwarrior.squads.black-roses +alt.alala +alt.alcohol +alt.aldus.freehand +alt.aldus.misc +alt.aldus.pagemaker +alt.algebra.help +alt.algonetics +alt.ali.howell.is.tidy +alt.alien.research +alt.alien.vampire.flonk.flonk.flonk +alt.alien.visitors +alt.alien.wanderers +alt.aliens.they-are-here +alt.allsysop +alt.als.zelfhulpgroep.be +alt.alt +alt.alt.alt.alt.alt +alt.alt.canada.threatened-invaasion.john-grubor +alt.alt.life.the-universe.and-everything +alt.alt.music.g-fibbers +alt.alt.spamtrap +alt.alt.test +alt.alt2600 +alt.alternative.health.drrush +alt.alumni.bronx-science +alt.amanda.g.is.a.superstar +alt.amateur-comp +alt.amazon-women +alt.amazon-women.admirers +alt.america +alt.america-online.wurk +alt.america.online +alt.american.automobile.breakdown.breakdown.breakdown +alt.american.caribbean +alt.ameritech.jim.bayless.must.perish +alt.amiga.demos +alt.amiga.slip +alt.ammonia.refrigeration +alt.amsoil +alt.anagrams +alt.anarchism +alt.anarchism.communist +alt.anarchism.syndicalist +alt.anarchy.rules +alt.angels +alt.anger +alt.angst +alt.angst.xibo.sex +alt.animals +alt.animals.badgers +alt.animals.bear +alt.animals.bears +alt.animals.breeders.rabbits +alt.animals.cat +alt.animals.dog +alt.animals.dogs.collies.open-forum +alt.animals.dolphins +alt.animals.eagle.bald +alt.animals.ethics.vegetarian +alt.animals.falcon +alt.animals.felines +alt.animals.felines.diseases +alt.animals.foxes +alt.animals.furtrapping +alt.animals.gibbon +alt.animals.giraffes +alt.animals.gorilla +alt.animals.gull +alt.animals.hawk +alt.animals.horses.breeding +alt.animals.horses.icelandic +alt.animals.humans.dishonesty.ubiquitous +alt.animals.lampreys +alt.animals.lemur +alt.animals.llama +alt.animals.mules +alt.animals.otters +alt.animals.pandas +alt.animals.peacock +alt.animals.ponies +alt.animals.rabbit +alt.animals.raccoons +alt.animals.rights.promotion +alt.animals.scorpion +alt.animals.sealion +alt.animals.tiger +alt.animals.whales +alt.animals.wombat +alt.animals.zebu +alt.animation.batman +alt.animation.mainframe +alt.animation.mike-judge +alt.animation.nick-park +alt.animation.spumco +alt.animation.warner-bros +alt.anime.escaflowne +alt.anime.shoujo +alt.anonymous +alt.anonymous.domains +alt.anonymous.email +alt.anonymous.messages +alt.anonymous.messages.luciferslegion +alt.anonymous.messages.skuznet +alt.answers +alt.anthony-ciolli +alt.anthrax.binaries +alt.anthrax.binaries.pictures +alt.anthrax.chat +alt.anthrax.comp +alt.antichristnet +alt.antiques.delaware.joe +alt.anybody +alt.anything +alt.aol-sucks +alt.aol-sucks.moderated +alt.aol-sucks.rejects +alt.aol.cypher +alt.aol.overbilling +alt.aol.rejects +alt.aol.tricks +alt.apocalypse +alt.apocalypso +alt.appalachian +alt.april +alt.april.fool +alt.aquaria +alt.aquaria.guppy +alt.aquaria.killies +alt.aquaria.oscars +alt.arabic +alt.arabic.comp +alt.arabic.general +alt.arabic.politics +alt.archaeology +alt.archeology +alt.archery +alt.archery.traditional +alt.archimedes.bugs +alt.architecture +alt.architecture.alternative +alt.architecture.int-design +alt.argen +alt.argentina.adolecentes +alt.argus +alt.armourers +alt.aromatherapy +alt.arriflex.sucks +alt.art.bodypainting +alt.art.caricature +alt.art.colleges +alt.art.hirez +alt.art.illustration +alt.art.marketplace +alt.art.scene +alt.art.video +alt.art.virtual-beret +alt.artcom +alt.artcrime +alt.arthritis.spondy.risg.info +alt.arts.anthro +alt.arts.ballet +alt.arts.ballet-dance.uk +alt.arts.balloon-sculpting +alt.arts.bujinkan +alt.arts.bujinkan-sucks +alt.arts.contortion +alt.arts.limericks +alt.arts.murky-pond +alt.arts.nomad +alt.arts.origami +alt.arts.poetry.comments +alt.arts.storytelling +alt.ascii-art +alt.ascii-art.animation +alt.asian-movies +alt.asian.american.chat +alt.assassination.jfk +alt.assassination.jfk.uncensored +alt.asshole.reinhold.aman +alt.astrology +alt.astrology.asian +alt.astrology.marketplace +alt.astrology.metapsych +alt.astrology.scam +alt.astrology.toadology +alt.astronomy +alt.astronomy.solar +alt.at.fido.startrek +alt.atari-jaguar.discussion +alt.atari.2600vcs +alt.atheism +alt.atheism.moderated +alt.atheism.satire +alt.athiesm +alt.atlanta +alt.atv +alt.audio.dts +alt.audio.equipment +alt.august +alt.auletta.auletta +alt.auricchio +alt.aus.bonehead.dawn-mcgatney.bloody.convict.bitch +alt.aus.bonehead.jimo-ngygook.bulletstopper.poofter +alt.aus.bonehead.joey-thoi +alt.authorware +alt.auto.mercedes +alt.auto.parts.wanted +alt.autographs.transactions +alt.autos +alt.autos.alfa-romeo +alt.autos.antique +alt.autos.audi +alt.autos.bmw +alt.autos.camaro.firebird +alt.autos.chevelle +alt.autos.chevrolet.malibu +alt.autos.chrysler.sebring +alt.autos.classic-trucks +alt.autos.corvette +alt.autos.dean-stark +alt.autos.dodge.trucks +alt.autos.dsm +alt.autos.ferrari +alt.autos.ford +alt.autos.ford.festiva +alt.autos.ford.flathead +alt.autos.gm +alt.autos.gm.monza-hspecial +alt.autos.grand-national +alt.autos.grand.national +alt.autos.isuzu +alt.autos.italian +alt.autos.jaguar +alt.autos.karting +alt.autos.kitcars +alt.autos.macho-trucks +alt.autos.mercury.cougar +alt.autos.microcars +alt.autos.mini +alt.autos.mitsubishi +alt.autos.nissan +alt.autos.nissan.maxima +alt.autos.nissan.z-car +alt.autos.peugeot.sucks +alt.autos.pontiac +alt.autos.porsche +alt.autos.porsche928 +alt.autos.rod-n-custom +alt.autos.rolls-royce-bentley +alt.autos.saab +alt.autos.sport.nhra +alt.autos.sport.rally +alt.autos.studebaker +alt.autos.subaru +alt.autos.t-buckets +alt.autos.toyota +alt.autos.toyota.camry +alt.autos.turbocharged +alt.autos.volvo +alt.aviation.fun +alt.aviation.kooks +alt.aviation.roswell.wannabe.wannabe.wannabe +alt.aviation.safety +alt.awe32.files +alt.awelch.test +alt.b.moylan.needle.prick.the.bug-fucker +alt.babe-land.com +alt.babylon5.uk +alt.bacchus +alt.backrubs +alt.bad.clams +alt.bad.personal-hygiene.jay-denebeim +alt.bainaries.games.encrypted +alt.bainaries.pictures.babies +alt.bainaries.pictures.black.erotic.females +alt.bainaries.pictures.boys.barefoot +alt.bainaries.pictures.cemetaries +alt.bainaries.pictures.child.erotica.female +alt.bainaries.pictures.child.erotica.male +alt.bainaries.pictures.comix +alt.bainaries.pictures.erotica.amateur.female +alt.bainaries.pictures.erotica.amateur.male +alt.bainaries.pictures.erotica.ani +alt.bainaries.pictures.erotica.animals +alt.bainaries.pictures.erotica.anime +alt.bainaries.pictures.erotica.art.pin-up +alt.bainaries.pictures.erotica.asian-indian +alt.bainaries.pictures.erotica.asian.male +alt.bainaries.pictures.erotica.autos +alt.bainaries.pictures.erotica.babies +alt.bainaries.pictures.erotica.balls +alt.bainaries.pictures.erotica.bears +alt.bainaries.pictures.erotica.bestiality +alt.bainaries.pictures.erotica.bestiality.hamster.duct-tape +alt.bainaries.pictures.erotica.big-folks +alt.bainaries.pictures.erotica.black.female +alt.bainaries.pictures.erotica.black.male +alt.bainaries.pictures.erotica.blondes +alt.bainaries.pictures.erotica.breasts +alt.bainaries.pictures.erotica.butts +alt.bainaries.pictures.erotica.cartoons +alt.bainaries.pictures.erotica.cheerleaders +alt.bainaries.pictures.erotica.child +alt.bainaries.pictures.erotica.child.female +alt.bainaries.pictures.erotica.child.male +alt.bainaries.pictures.erotica.children +alt.bainaries.pictures.erotica.close-up +alt.bainaries.pictures.erotica.d +alt.bainaries.pictures.erotica.d.moderated +alt.bainaries.pictures.erotica.denise-lester +alt.bainaries.pictures.erotica.disney +alt.bainaries.pictures.erotica.empty-nest +alt.bainaries.pictures.erotica.facials +alt.bainaries.pictures.erotica.female +alt.bainaries.pictures.erotica.female.anal +alt.bainaries.pictures.erotica.fetish +alt.bainaries.pictures.erotica.fetish.barbie +alt.bainaries.pictures.erotica.fetish.diapers +alt.bainaries.pictures.erotica.fetish.feet +alt.bainaries.pictures.erotica.fetish.hair +alt.bainaries.pictures.erotica.fetish.latex +alt.bainaries.pictures.erotica.fetish.leather +alt.bainaries.pictures.erotica.furry +alt.bainaries.pictures.erotica.gaymen +alt.bainaries.pictures.erotica.groupsex +alt.bainaries.pictures.erotica.gymnast-girls +alt.bainaries.pictures.erotica.high-heels +alt.bainaries.pictures.erotica.hornyrob +alt.bainaries.pictures.erotica.indian-asian +alt.bainaries.pictures.erotica.interracial +alt.bainaries.pictures.erotica.istar.diapers +alt.bainaries.pictures.erotica.koo.sisters +alt.bainaries.pictures.erotica.kwakiutl +alt.bainaries.pictures.erotica.latimo +alt.bainaries.pictures.erotica.latina +alt.bainaries.pictures.erotica.latino +alt.bainaries.pictures.erotica.lesbians +alt.bainaries.pictures.erotica.lolita +alt.bainaries.pictures.erotica.male +alt.bainaries.pictures.erotica.male.chubby +alt.bainaries.pictures.erotica.marcusvilliers +alt.bainaries.pictures.erotica.mardi-gres +alt.bainaries.pictures.erotica.midgets +alt.bainaries.pictures.erotica.moderated +alt.bainaries.pictures.erotica.oral +alt.bainaries.pictures.erotica.oriental +alt.bainaries.pictures.erotica.orientals +alt.bainaries.pictures.erotica.panties +alt.bainaries.pictures.erotica.plushies +alt.bainaries.pictures.erotica.pornstar +alt.bainaries.pictures.erotica.pornstars +alt.bainaries.pictures.erotica.pre-teen +alt.bainaries.pictures.erotica.redheads +alt.bainaries.pictures.erotica.scanmater +alt.bainaries.pictures.erotica.schoolgirls +alt.bainaries.pictures.erotica.spanking +alt.bainaries.pictures.erotica.spatch +alt.bainaries.pictures.erotica.tasteless +alt.bainaries.pictures.erotica.teen +alt.bainaries.pictures.erotica.teen.d +alt.bainaries.pictures.erotica.teen.female +alt.bainaries.pictures.erotica.teens +alt.bainaries.pictures.erotica.uniform +alt.bainaries.pictures.fine-art.d +alt.bainaries.pictures.fine-art.digitized +alt.bainaries.pictures.fine-art.graphics +alt.bainaries.pictures.fine-art.misc +alt.bainaries.pictures.fractals +alt.bainaries.pictures.furniture +alt.bainaries.pictures.furry +alt.bainaries.pictures.girlfriend +alt.bainaries.pictures.girlfriends +alt.bainaries.pictures.groupsex +alt.bainaries.pictures.horny.nurses +alt.bainaries.pictures.leek +alt.bainaries.pictures.lesbians +alt.bainaries.pictures.lingerie +alt.bainaries.pictures.lingerie.bigbutts +alt.bainaries.pictures.lolita.fucking +alt.bainaries.pictures.lolita.misc +alt.bainaries.pictures.misc +alt.bainaries.pictures.misc.d +alt.bainaries.pictures.nude.celebrities +alt.bainaries.pictures.nudism +alt.bainaries.pictures.nudism.celebrities +alt.bainaries.pictures.nylons +alt.bainaries.pictures.pantyhouse +alt.bainaries.pictures.personal +alt.bainaries.pictures.photo-modeling +alt.bainaries.pictures.sex +alt.bainaries.pictures.sex.fetish +alt.bainaries.pictures.sex.fetish.fish +alt.bainaries.pictures.supe +alt.bainaries.pictures.supermodels +alt.bainaries.pictures.supermodels.kate-moss +alt.bainaries.pictures.tasteless +alt.bainaries.pictures.teen-idols +alt.bainaries.pictures.teen-starlets +alt.bainaries.pictures.tools +alt.bainaries.pictures.utilities +alt.bainaries.pictures.vehicles +alt.bainaries.pictures.victoria.secret +alt.bainaries.pictures.voyeurism +alt.baldspot +alt.baldurs-gate +alt.balkan-papci +alt.balloon.pop.pop.pop +alt.banjo +alt.banjo.clawhammer +alt.banjo.minstrel +alt.barefoot +alt.barney.dinosaur.die.die.die +alt.barter +alt.base-jumping.sheep.bounce.bounce.bounce +alt.basement.graveyard +alt.bastard.strayhorn +alt.bathroom +alt.battlestar-galactica +alt.bbc.the_net +alt.bbs +alt.bbs.ads +alt.bbs.allsysop +alt.bbs.allsysup +alt.bbs.amiga.cnet +alt.bbs.amiga.trion +alt.bbs.beeline +alt.bbs.citadel +alt.bbs.citadel.prism +alt.bbs.doors +alt.bbs.doors.binaries +alt.bbs.doors.lord +alt.bbs.doors.lord.binaries +alt.bbs.excalibur +alt.bbs.first-class +alt.bbs.gigo-gateway +alt.bbs.iniquity +alt.bbs.internet +alt.bbs.jds +alt.bbs.lists +alt.bbs.lists.d +alt.bbs.majorbbs +alt.bbs.maxs +alt.bbs.metal +alt.bbs.mystic +alt.bbs.omnibbs +alt.bbs.pcboard +alt.bbs.pcbuucp +alt.bbs.powerboard +alt.bbs.proboard +alt.bbs.public-address +alt.bbs.ra +alt.bbs.renegade +alt.bbs.rip +alt.bbs.searchlight +alt.bbs.telefinder +alt.bbs.telegard.moderated +alt.bbs.tribbs +alt.bbs.unixbbs +alt.bbs.uupcb +alt.bbs.waffle +alt.bbs.watergate +alt.bbs.wildcat +alt.bbs.wildcat.wccode +alt.bbs.wwiv +alt.beadworld +alt.beeotch.jay-denebeim +alt.beer +alt.beer.alt +alt.beer.breweriana +alt.beer.home-brewing +alt.beer.like-molson-eh +alt.beograd +alt.best.of.internet +alt.bestjobsusa +alt.bestjobsusa.computer +alt.bestjobsusa.computer.jobs +alt.bible +alt.bible-errancy +alt.bible.errancy +alt.bible.memorize +alt.bible.prophecy +alt.bible.rapture.mod +alt.bidon +alt.bigfoot +alt.bigfoot.research +alt.bikermice +alt.bill-gates.kind.benificent.loving.big-brother +alt.binaires.games.squaresoft +alt.binaires.pictures.anime +alt.binaires.pictures.erotica.anime +alt.binaires.pictures.erotica.teen +alt.binaires.pictures.monsters +alt.binari +alt.binaries +alt.binaries.3d.bryce +alt.binaries.3d.lightwave +alt.binaries.3d.poser +alt.binaries.3d.truespace +alt.binaries.3dstudio +alt.binaries.activism.militia +alt.binaries.actvism.radical-left +alt.binaries.allmanbrothers +alt.binaries.andrew.lloyd-webber +alt.binaries.aoi +alt.binaries.appalachian +alt.binaries.applications.mac +alt.binaries.asianscans +alt.binaries.asianscans.icyscans +alt.binaries.atari +alt.binaries.atari.cancelbots +alt.binaries.atari.d +alt.binaries.atari.dead +alt.binaries.autographs +alt.binaries.band.in.a.box +alt.binaries.barbarella +alt.binaries.bbs +alt.binaries.bbs.doors +alt.binaries.bbs.pcboard +alt.binaries.bbs.renegade +alt.binaries.beatles +alt.binaries.butthedd +alt.binaries.calc-ti +alt.binaries.cancelbots +alt.binaries.cd +alt.binaries.cd.image +alt.binaries.cd.image.d +alt.binaries.cd.image.discussion.tools +alt.binaries.cd.image.other +alt.binaries.cd.image.other.d +alt.binaries.cd.image.other.parts +alt.binaries.cd.image.parts +alt.binaries.cd.image.playstation +alt.binaries.cd.image.playstation.d +alt.binaries.cd.image.playstation.reposts +alt.binaries.cd.image.tools.d +alt.binaries.celebrities.fake.moderated +alt.binaries.cheer.dance +alt.binaries.christy-turlington +alt.binaries.cleannews.test +alt.binaries.clip-art +alt.binaries.comp +alt.binaries.comp-graphics +alt.binaries.comp.atari8bit +alt.binaries.comp.databases.omnis +alt.binaries.cores +alt.binaries.cracked +alt.binaries.cracks +alt.binaries.cracks.akula +alt.binaries.cracks.discussion +alt.binaries.cracks.encrypted +alt.binaries.cracks.phrozen-crew +alt.binaries.crafts.pictures +alt.binaries.custard +alt.binaries.dawsons-creek +alt.binaries.demo-scene.ibm-pc +alt.binaries.descent +alt.binaries.dominion +alt.binaries.dominion.abuse +alt.binaries.dominion.bad.serial.nums +alt.binaries.dominion.bugger +alt.binaries.dominion.bugger.snot +alt.binaries.dominion.bugger.snot.slime +alt.binaries.dominion.bugger.snot.slime.ball +alt.binaries.dominion.bugger.snot.slime.ball.dominion +alt.binaries.dominion.cabal +alt.binaries.dominion.classact.kissass.join +alt.binaries.dominion.cracks +alt.binaries.dominion.dads.account +alt.binaries.dominion.dads.computer +alt.binaries.dominion.discussion +alt.binaries.dominion.dominoes.pizza +alt.binaries.dominion.dongles +alt.binaries.dominion.ego-strokes +alt.binaries.dominion.erotica.female +alt.binaries.dominion.erotica.male +alt.binaries.dominion.erotica.mydick.ishard +alt.binaries.dominion.freeware +alt.binaries.dominion.games +alt.binaries.dominion.mail +alt.binaries.dominion.moms.account +alt.binaries.dominion.moms.computer +alt.binaries.dominion.mydick.ishard +alt.binaries.dominion.powerno1 +alt.binaries.dominion.request +alt.binaries.dominion.serial-nums +alt.binaries.dominion.shareware +alt.binaries.dominion.silly-group +alt.binaries.dominion.slackware +alt.binaries.dominion.spam-moderated +alt.binaries.dominion.support +alt.binaries.dominion.traders +alt.binaries.dominion.tripp +alt.binaries.dominion.troll +alt.binaries.dominion.warez +alt.binaries.dominion.warez.decrypted +alt.binaries.dominion.warez.in.here +alt.binaries.dominion.with.fries.on.the.side +alt.binaries.doom +alt.binaries.dragonz +alt.binaries.dragonz.chimerical +alt.binaries.dragonz.elusive +alt.binaries.dragonz.ephemeral +alt.binaries.drew-barrymore +alt.binaries.drwho +alt.binaries.drwho.pictures +alt.binaries.e-book +alt.binaries.education.distance +alt.binaries.electric-veh +alt.binaries.emulator +alt.binaries.emulators +alt.binaries.emulators.amiga +alt.binaries.emulators.cbm +alt.binaries.emulators.gameboy +alt.binaries.emulators.misc +alt.binaries.emulators.neogeo +alt.binaries.emulators.nintendo +alt.binaries.emulators.nintendo-64 +alt.binaries.emulators.nintendo-64.d +alt.binaries.emulators.nintendo.d +alt.binaries.emulators.playstation +alt.binaries.emulators.sega +alt.binaries.emulators.tg16 +alt.binaries.erotic.children +alt.binaries.erotica +alt.binaries.erotica.beanie-babies +alt.binaries.erotica.breasts +alt.binaries.erotica.butts +alt.binaries.erotica.dicks +alt.binaries.erotica.duff +alt.binaries.erotica.female.plumpers +alt.binaries.erotica.fetish +alt.binaries.erotica.fetish.wet-and-messy +alt.binaries.erotica.fettish +alt.binaries.erotica.pornstar +alt.binaries.erotica.sex.in.the.morning +alt.binaries.erotica.teen.female.nonude +alt.binaries.faces.thomas-nunn +alt.binaries.fashion.magazines +alt.binaries.fetish.scat +alt.binaries.fetish.scat.roger +alt.binaries.fitness.centerfolds +alt.binaries.fonts +alt.binaries.fontscomp +alt.binaries.frans.bauer.r-mod +alt.binaries.freemasonry +alt.binaries.fukengruven +alt.binaries.full.post.verified.playboy +alt.binaries.fz +alt.binaries.games +alt.binaries.games-sports +alt.binaries.games.adult +alt.binaries.games.anime +alt.binaries.games.aquazone +alt.binaries.games.battlezone +alt.binaries.games.champ-man +alt.binaries.games.civ2 +alt.binaries.games.command-n-conq +alt.binaries.games.creatures +alt.binaries.games.discussion +alt.binaries.games.empire-deluxe +alt.binaries.games.encrypted +alt.binaries.games.golf +alt.binaries.games.half-life +alt.binaries.games.homm-maps +alt.binaries.games.int-fiction +alt.binaries.games.kidstuff +alt.binaries.games.lucas-arts +alt.binaries.games.microprose +alt.binaries.games.microsoft +alt.binaries.games.microsoft.age-of-empires +alt.binaries.games.microsoft.age-of-kings +alt.binaries.games.microsoft.rise-of-rome +alt.binaries.games.moo2 +alt.binaries.games.quake +alt.binaries.games.simcity +alt.binaries.games.squaresoft +alt.binaries.games.starcraft +alt.binaries.games.worms +alt.binaries.gdead +alt.binaries.gdead.d +alt.binaries.gdead.reposts +alt.binaries.global.quake +alt.binaries.goat +alt.binaries.goonies +alt.binaries.gothic +alt.binaries.great.ass.paulina +alt.binaries.guitar.tab +alt.binaries.hacking.beginner +alt.binaries.hacking.computers +alt.binaries.hacking.utilities +alt.binaries.hacking.websites +alt.binaries.hebrew +alt.binaries.hebrew.fonts +alt.binaries.hebrew.mac +alt.binaries.hentai.sailor-moon +alt.binaries.heretic +alt.binaries.howard-stern +alt.binaries.hudson-leick +alt.binaries.humanoidifarmi +alt.binaries.humor.skewed +alt.binaries.images +alt.binaries.images.afos-fans +alt.binaries.images.afos.fans +alt.binaries.images.fun +alt.binaries.images.suntan +alt.binaries.images.underwater +alt.binaries.images.vintage-engineering +alt.binaries.ipl.audio.encrypted +alt.binaries.jeri-ryan +alt.binaries.joker +alt.binaries.karaoke +alt.binaries.lingerie +alt.binaries.lucas-arts +alt.binaries.mac +alt.binaries.mac.applications +alt.binaries.mac.applications.retro +alt.binaries.mac.cd-images +alt.binaries.mac.cd-images.d +alt.binaries.mac.cd-images.parts +alt.binaries.mac.fonts +alt.binaries.mac.games +alt.binaries.mac.games.adult +alt.binaries.mac.hebrew +alt.binaries.mac.playstation +alt.binaries.mac.playstation.d +alt.binaries.mac.playstation.parts +alt.binaries.midibeep.denmark.files +alt.binaries.misc +alt.binaries.missing-adults +alt.binaries.missing-kids +alt.binaries.models +alt.binaries.models.petite +alt.binaries.models.scale +alt.binaries.moderated +alt.binaries.moderated.pinup-art +alt.binaries.moesart2000 +alt.binaries.movies +alt.binaries.mp3.bootlegs +alt.binaries.mp3.throttle.news.and.piss.off.sabrina +alt.binaries.mp3.zappa +alt.binaries.mpeg +alt.binaries.mtv.animation +alt.binaries.multimedia +alt.binaries.multimedia.3-stooges +alt.binaries.multimedia.babylon5 +alt.binaries.multimedia.boys +alt.binaries.multimedia.buffy-v-slayer +alt.binaries.multimedia.cartoons +alt.binaries.multimedia.d +alt.binaries.multimedia.disney +alt.binaries.multimedia.erotica +alt.binaries.multimedia.erotica.d +alt.binaries.multimedia.erotica.lesbians +alt.binaries.multimedia.erotica.rm +alt.binaries.multimedia.erotica.tickling +alt.binaries.multimedia.flonk +alt.binaries.multimedia.gloves +alt.binaries.multimedia.help +alt.binaries.multimedia.horror +alt.binaries.multimedia.naturism +alt.binaries.multimedia.rap +alt.binaries.multimedia.space-ghost +alt.binaries.multimedia.the-bundys +alt.binaries.multimedia.utilities +alt.binaries.multimedia.xena-herc +alt.binaries.music +alt.binaries.music.faith.and.wisdom +alt.binaries.music.greek +alt.binaries.music.heavy-metal +alt.binaries.music.makers.samples +alt.binaries.music.manics +alt.binaries.music.mike-keneally +alt.binaries.music.mp3 +alt.binaries.music.rebirth +alt.binaries.music.santangelo +alt.binaries.music.steve-vai +alt.binaries.music.the-doors +alt.binaries.music.the-doors.d +alt.binaries.natnl-secrets +alt.binaries.news-server-comparison +alt.binaries.nine.inch.nails +alt.binaries.nospam.analfem +alt.binaries.nospam.breasts.natural +alt.binaries.nospam.cc +alt.binaries.nospam.cheerleaders +alt.binaries.nospam.coed +alt.binaries.nospam.coed.d +alt.binaries.nospam.coed.repost +alt.binaries.nospam.danni-ashe +alt.binaries.nospam.denim +alt.binaries.nospam.denim.shorts +alt.binaries.nospam.facials +alt.binaries.nospam.female.bodyhair +alt.binaries.nospam.female.bodyhair.pubes +alt.binaries.nospam.female.forearm-hair +alt.binaries.nospam.female.panties.seethru +alt.binaries.nospam.female.panty-lines.seethru +alt.binaries.nospam.indexes +alt.binaries.nospam.julia-hayes +alt.binaries.nospam.multimedia.erotica +alt.binaries.nospam.panties +alt.binaries.nospam.plumpers +alt.binaries.nospam.plumpers.amateur +alt.binaries.nospam.sappho +alt.binaries.nospam.spandex.nation +alt.binaries.nospam.teenfeem.repost +alt.binaries.nospam.teenfem +alt.binaries.nospam.teenfem.d +alt.binaries.nospam.teenfem.nonude +alt.binaries.nospam.teenfem.repost +alt.binaries.nospam.teenfem.reposts +alt.binaries.nospam.toons +alt.binaries.nude +alt.binaries.nude.celebrities +alt.binaries.nude.celebrities.female +alt.binaries.nude.celebrities.male +alt.binaries.nude.celebrities.male.moderated +alt.binaries.nudism +alt.binaries.paranormal +alt.binaries.partycaps +alt.binaries.paxer +alt.binaries.pearl-jam +alt.binaries.penthouse +alt.binaries.phish +alt.binaries.phonecards +alt.binaries.photography.glamour +alt.binaries.photography.people +alt.binaries.photos.nude-art +alt.binaries.photos.nude-art.moderated +alt.binaries.pics.kodomos.mankos.musyuuseis +alt.binaries.pics.musumes.mankos.musyuuseis +alt.binaries.pics.otonas.mankos.musyuuseis +alt.binaries.pics.paipans.mankos.musyuuseis +alt.binaries.pictures +alt.binaries.pictures.12hr +alt.binaries.pictures.abba +alt.binaries.pictures.alley-baggett +alt.binaries.pictures.animals +alt.binaries.pictures.animated.gifs +alt.binaries.pictures.animations +alt.binaries.pictures.anime +alt.binaries.pictures.art.bodyart +alt.binaries.pictures.artpics +alt.binaries.pictures.arts.bodyart +alt.binaries.pictures.ascii +alt.binaries.pictures.asparagus +alt.binaries.pictures.astro +alt.binaries.pictures.autos +alt.binaries.pictures.aviation +alt.binaries.pictures.ballbusting +alt.binaries.pictures.bc-series +alt.binaries.pictures.bigbutts +alt.binaries.pictures.bikini.central +alt.binaries.pictures.bisexuals +alt.binaries.pictures.black.erotic.females +alt.binaries.pictures.bluebird +alt.binaries.pictures.bodyart +alt.binaries.pictures.bondage +alt.binaries.pictures.boys +alt.binaries.pictures.boys.barefoot +alt.binaries.pictures.boys.d +alt.binaries.pictures.boys.retromod +alt.binaries.pictures.bras +alt.binaries.pictures.candid.beach +alt.binaries.pictures.cartoons +alt.binaries.pictures.cartoons.cancel +alt.binaries.pictures.cd-covers +alt.binaries.pictures.celebrities +alt.binaries.pictures.celebrities.portraits.large +alt.binaries.pictures.celine-dion +alt.binaries.pictures.cemetaries +alt.binaries.pictures.centerfolds.playboy +alt.binaries.pictures.cheerleaders.professional +alt.binaries.pictures.child.erotica.female +alt.binaries.pictures.child.erotica.male +alt.binaries.pictures.child.starlets +alt.binaries.pictures.children +alt.binaries.pictures.chimera +alt.binaries.pictures.civil-war.usa +alt.binaries.pictures.cocks +alt.binaries.pictures.comic-strips +alt.binaries.pictures.comics +alt.binaries.pictures.contortion.nude +alt.binaries.pictures.cops +alt.binaries.pictures.cori-nadine +alt.binaries.pictures.d +alt.binaries.pictures.dark-fantasy +alt.binaries.pictures.disabled-dev +alt.binaries.pictures.disabled-devo +alt.binaries.pictures.dita +alt.binaries.pictures.diva +alt.binaries.pictures.dorks +alt.binaries.pictures.drag-racing +alt.binaries.pictures.erotic.animated.gifs +alt.binaries.pictures.erotic.anime +alt.binaries.pictures.erotic.centerfolds +alt.binaries.pictures.erotic.cowgirls +alt.binaries.pictures.erotica +alt.binaries.pictures.erotica.13-17 +alt.binaries.pictures.erotica.admiralkrag +alt.binaries.pictures.erotica.adsl +alt.binaries.pictures.erotica.age.13-17 +alt.binaries.pictures.erotica.als +alt.binaries.pictures.erotica.amateur +alt.binaries.pictures.erotica.amateur-action.gifs +alt.binaries.pictures.erotica.amateur.d +alt.binaries.pictures.erotica.amateur.facials +alt.binaries.pictures.erotica.amateur.female +alt.binaries.pictures.erotica.amateur.male +alt.binaries.pictures.erotica.ani +alt.binaries.pictures.erotica.animal +alt.binaries.pictures.erotica.animals +alt.binaries.pictures.erotica.anime +alt.binaries.pictures.erotica.anna +alt.binaries.pictures.erotica.art.pin-up +alt.binaries.pictures.erotica.asian +alt.binaries.pictures.erotica.asian-indian +alt.binaries.pictures.erotica.asian.male +alt.binaries.pictures.erotica.australian.female +alt.binaries.pictures.erotica.australians.dropbears +alt.binaries.pictures.erotica.autos +alt.binaries.pictures.erotica.babies +alt.binaries.pictures.erotica.balck.male +alt.binaries.pictures.erotica.balls +alt.binaries.pictures.erotica.barefoot +alt.binaries.pictures.erotica.bears +alt.binaries.pictures.erotica.bears.moderated +alt.binaries.pictures.erotica.bestiality +alt.binaries.pictures.erotica.bestiality.hamster.duct-tape +alt.binaries.pictures.erotica.betharnold +alt.binaries.pictures.erotica.big-folks +alt.binaries.pictures.erotica.biker-chicks +alt.binaries.pictures.erotica.black +alt.binaries.pictures.erotica.black.amateurs +alt.binaries.pictures.erotica.black.female +alt.binaries.pictures.erotica.black.females +alt.binaries.pictures.erotica.black.male +alt.binaries.pictures.erotica.black.male.feet +alt.binaries.pictures.erotica.blondes +alt.binaries.pictures.erotica.bob.houston +alt.binaries.pictures.erotica.bobby-sox +alt.binaries.pictures.erotica.bondage +alt.binaries.pictures.erotica.bondage.male +alt.binaries.pictures.erotica.bondage.moderated +alt.binaries.pictures.erotica.bondes +alt.binaries.pictures.erotica.bookstores +alt.binaries.pictures.erotica.boys +alt.binaries.pictures.erotica.breasts +alt.binaries.pictures.erotica.breasts.large +alt.binaries.pictures.erotica.breasts.natural +alt.binaries.pictures.erotica.breasts.saggy +alt.binaries.pictures.erotica.breasts.small +alt.binaries.pictures.erotica.brunette +alt.binaries.pictures.erotica.butts +alt.binaries.pictures.erotica.cancel +alt.binaries.pictures.erotica.cartoons +alt.binaries.pictures.erotica.cartoons.moderated +alt.binaries.pictures.erotica.cartoons.mythical-creatures +alt.binaries.pictures.erotica.centerfolds +alt.binaries.pictures.erotica.charmaine +alt.binaries.pictures.erotica.chastity-belt +alt.binaries.pictures.erotica.cheerleaders +alt.binaries.pictures.erotica.child +alt.binaries.pictures.erotica.child.female +alt.binaries.pictures.erotica.child.male +alt.binaries.pictures.erotica.children +alt.binaries.pictures.erotica.close-up +alt.binaries.pictures.erotica.cpath +alt.binaries.pictures.erotica.creampie +alt.binaries.pictures.erotica.cypher +alt.binaries.pictures.erotica.d +alt.binaries.pictures.erotica.d.moderated +alt.binaries.pictures.erotica.dark-fantasy +alt.binaries.pictures.erotica.dbg +alt.binaries.pictures.erotica.dean-stark +alt.binaries.pictures.erotica.denise-lester +alt.binaries.pictures.erotica.disney +alt.binaries.pictures.erotica.dita +alt.binaries.pictures.erotica.early-teens +alt.binaries.pictures.erotica.early-teens.firsthair +alt.binaries.pictures.erotica.earty-teens +alt.binaries.pictures.erotica.empty-nest +alt.binaries.pictures.erotica.ex-erols +alt.binaries.pictures.erotica.exhibitionism +alt.binaries.pictures.erotica.exhibitionism.public +alt.binaries.pictures.erotica.facials +alt.binaries.pictures.erotica.female +alt.binaries.pictures.erotica.female.anal +alt.binaries.pictures.erotica.female.bodybuilder +alt.binaries.pictures.erotica.female.cosmetic +alt.binaries.pictures.erotica.female.crying +alt.binaries.pictures.erotica.female.genitalia +alt.binaries.pictures.erotica.female.genitalia.large +alt.binaries.pictures.erotica.female.gym +alt.binaries.pictures.erotica.female.orgasm +alt.binaries.pictures.erotica.female.spreadwide +alt.binaries.pictures.erotica.female.toys +alt.binaries.pictures.erotica.female.young.moderated +alt.binaries.pictures.erotica.fetish +alt.binaries.pictures.erotica.fetish.armpits +alt.binaries.pictures.erotica.fetish.barbie +alt.binaries.pictures.erotica.fetish.diapers +alt.binaries.pictures.erotica.fetish.feet +alt.binaries.pictures.erotica.fetish.female.socks +alt.binaries.pictures.erotica.fetish.hair +alt.binaries.pictures.erotica.fetish.latex +alt.binaries.pictures.erotica.fetish.leather +alt.binaries.pictures.erotica.fetish.neck +alt.binaries.pictures.erotica.filipinas +alt.binaries.pictures.erotica.firesign +alt.binaries.pictures.erotica.fisting +alt.binaries.pictures.erotica.freckles +alt.binaries.pictures.erotica.fuck.betharnold +alt.binaries.pictures.erotica.fuckpix +alt.binaries.pictures.erotica.fullbush +alt.binaries.pictures.erotica.furby +alt.binaries.pictures.erotica.furry +alt.binaries.pictures.erotica.g-string +alt.binaries.pictures.erotica.gaymen +alt.binaries.pictures.erotica.gaymen.moderated +alt.binaries.pictures.erotica.gaymen.twinks +alt.binaries.pictures.erotica.girlfriends +alt.binaries.pictures.erotica.gothic +alt.binaries.pictures.erotica.groupsex +alt.binaries.pictures.erotica.gwar +alt.binaries.pictures.erotica.gymnast-girls +alt.binaries.pictures.erotica.gynecologist +alt.binaries.pictures.erotica.hardcore +alt.binaries.pictures.erotica.hermaphrodites +alt.binaries.pictures.erotica.high-heels +alt.binaries.pictures.erotica.hornyrob +alt.binaries.pictures.erotica.indian-asian +alt.binaries.pictures.erotica.intercourse +alt.binaries.pictures.erotica.interracial +alt.binaries.pictures.erotica.interracial.amateurs +alt.binaries.pictures.erotica.istar.diapers +alt.binaries.pictures.erotica.jap.schoolgirl +alt.binaries.pictures.erotica.jay.t.carrigan.wife +alt.binaries.pictures.erotica.jennicam +alt.binaries.pictures.erotica.karl-malden.nose +alt.binaries.pictures.erotica.kerri-maskol +alt.binaries.pictures.erotica.kmart +alt.binaries.pictures.erotica.koo.sisters +alt.binaries.pictures.erotica.krystal +alt.binaries.pictures.erotica.kwakiutl +alt.binaries.pictures.erotica.lame +alt.binaries.pictures.erotica.latina +alt.binaries.pictures.erotica.latino +alt.binaries.pictures.erotica.legs +alt.binaries.pictures.erotica.lesbian +alt.binaries.pictures.erotica.lesbians +alt.binaries.pictures.erotica.lesbians.french-kiss +alt.binaries.pictures.erotica.linsey-dawn-mckenzie +alt.binaries.pictures.erotica.ll-series +alt.binaries.pictures.erotica.lolita +alt.binaries.pictures.erotica.male +alt.binaries.pictures.erotica.male.anal +alt.binaries.pictures.erotica.male.bodybuilder +alt.binaries.pictures.erotica.male.bodybuilder.moderated +alt.binaries.pictures.erotica.male.burly +alt.binaries.pictures.erotica.male.chubby +alt.binaries.pictures.erotica.male.hardon +alt.binaries.pictures.erotica.male.oral +alt.binaries.pictures.erotica.male.oral.cumshots +alt.binaries.pictures.erotica.male.piercing +alt.binaries.pictures.erotica.male.shirt-and-tie +alt.binaries.pictures.erotica.male.tattoos +alt.binaries.pictures.erotica.male.underwear +alt.binaries.pictures.erotica.mardi-gras +alt.binaries.pictures.erotica.mclt +alt.binaries.pictures.erotica.mf-action +alt.binaries.pictures.erotica.midgets +alt.binaries.pictures.erotica.moderated +alt.binaries.pictures.erotica.nativeamerican +alt.binaries.pictures.erotica.nipples.large +alt.binaries.pictures.erotica.nose +alt.binaries.pictures.erotica.nude.runaway-girls +alt.binaries.pictures.erotica.nudist-camp +alt.binaries.pictures.erotica.nuns +alt.binaries.pictures.erotica.oldermen +alt.binaries.pictures.erotica.oral +alt.binaries.pictures.erotica.oriental +alt.binaries.pictures.erotica.oriental.spread-wide +alt.binaries.pictures.erotica.orientals +alt.binaries.pictures.erotica.orientals.spread-wide +alt.binaries.pictures.erotica.panties +alt.binaries.pictures.erotica.panties.sheer +alt.binaries.pictures.erotica.panty-lines +alt.binaries.pictures.erotica.pantyhose +alt.binaries.pictures.erotica.party-girls +alt.binaries.pictures.erotica.partygirls +alt.binaries.pictures.erotica.peachfuzz +alt.binaries.pictures.erotica.pickaninnies +alt.binaries.pictures.erotica.pigtails +alt.binaries.pictures.erotica.pirate.mag +alt.binaries.pictures.erotica.plushies +alt.binaries.pictures.erotica.pornstar +alt.binaries.pictures.erotica.pornstar.cameo +alt.binaries.pictures.erotica.pornstar.jenna-jameson +alt.binaries.pictures.erotica.pornstar.marilyn.chambers +alt.binaries.pictures.erotica.pornstars +alt.binaries.pictures.erotica.pornstars.ariana +alt.binaries.pictures.erotica.pornstars.janine.moderated +alt.binaries.pictures.erotica.pre-teen +alt.binaries.pictures.erotica.pre-teens +alt.binaries.pictures.erotica.pregnant +alt.binaries.pictures.erotica.puffies +alt.binaries.pictures.erotica.pussy +alt.binaries.pictures.erotica.pussy.firsthair +alt.binaries.pictures.erotica.pussy.tattoo +alt.binaries.pictures.erotica.pw-series +alt.binaries.pictures.erotica.rape +alt.binaries.pictures.erotica.rape.loki +alt.binaries.pictures.erotica.redheads +alt.binaries.pictures.erotica.safetyvest +alt.binaries.pictures.erotica.scanmaster +alt.binaries.pictures.erotica.scheherazade +alt.binaries.pictures.erotica.schoolgirls +alt.binaries.pictures.erotica.shave +alt.binaries.pictures.erotica.sheep +alt.binaries.pictures.erotica.sistas.charmaine +alt.binaries.pictures.erotica.sistas.dominique +alt.binaries.pictures.erotica.sistas.jeannie-pepper +alt.binaries.pictures.erotica.sistas.melissa-sade +alt.binaries.pictures.erotica.spam +alt.binaries.pictures.erotica.spanking +alt.binaries.pictures.erotica.spanking.schoolgirl +alt.binaries.pictures.erotica.spanking.teen +alt.binaries.pictures.erotica.spatch +alt.binaries.pictures.erotica.spread-open +alt.binaries.pictures.erotica.stacey-owen +alt.binaries.pictures.erotica.stockingsex +alt.binaries.pictures.erotica.tasteless +alt.binaries.pictures.erotica.teen +alt.binaries.pictures.erotica.teen.d +alt.binaries.pictures.erotica.teen.fe +alt.binaries.pictures.erotica.teen.female +alt.binaries.pictures.erotica.teen.female.fuck +alt.binaries.pictures.erotica.teen.female.lesbians +alt.binaries.pictures.erotica.teen.female.masterbation +alt.binaries.pictures.erotica.teen.female.masturbation +alt.binaries.pictures.erotica.teen.female.nonude +alt.binaries.pictures.erotica.teen.female.orgasm +alt.binaries.pictures.erotica.teen.female.toys +alt.binaries.pictures.erotica.teen.fuck +alt.binaries.pictures.erotica.teen.male +alt.binaries.pictures.erotica.teen.male.hardon +alt.binaries.pictures.erotica.teen.masturbation +alt.binaries.pictures.erotica.teens +alt.binaries.pictures.erotica.teensex +alt.binaries.pictures.erotica.terry.agar +alt.binaries.pictures.erotica.thigh-highs +alt.binaries.pictures.erotica.torture +alt.binaries.pictures.erotica.traci-lords +alt.binaries.pictures.erotica.transvestites +alt.binaries.pictures.erotica.uncut +alt.binaries.pictures.erotica.uniform +alt.binaries.pictures.erotica.uniform.male.moderated +alt.binaries.pictures.erotica.unix +alt.binaries.pictures.erotica.urine +alt.binaries.pictures.erotica.vintage +alt.binaries.pictures.erotica.violence +alt.binaries.pictures.erotica.voyeurism +alt.binaries.pictures.erotica.voyeurism.hidden-camera +alt.binaries.pictures.erotica.wetspot +alt.binaries.pictures.erotica.yong +alt.binaries.pictures.erotica.young +alt.binaries.pictures.erotica.young.australian.female +alt.binaries.pictures.erotica.young.orientals +alt.binaries.pictures.erotica.zig.and.zag +alt.binaries.pictures.erotics.breasts +alt.binaries.pictures.fan.televisionx +alt.binaries.pictures.fantasy-sci-fi +alt.binaries.pictures.fashion.youth +alt.binaries.pictures.fashion.youth.d +alt.binaries.pictures.fashion.youth.oldies-repost +alt.binaries.pictures.female +alt.binaries.pictures.fine-art +alt.binaries.pictures.fine-art.d +alt.binaries.pictures.fine-art.digitized +alt.binaries.pictures.fine-art.graphics +alt.binaries.pictures.fine-art.misc +alt.binaries.pictures.fine-art.photos +alt.binaries.pictures.firemen +alt.binaries.pictures.fishing +alt.binaries.pictures.flags.desecrated +alt.binaries.pictures.fractals +alt.binaries.pictures.fun +alt.binaries.pictures.furniture +alt.binaries.pictures.furry +alt.binaries.pictures.fuzzy-sweaters.female +alt.binaries.pictures.gardens +alt.binaries.pictures.girlfriend +alt.binaries.pictures.girlfriends +alt.binaries.pictures.girlfriends.ex +alt.binaries.pictures.girls +alt.binaries.pictures.grotesque +alt.binaries.pictures.groupsex +alt.binaries.pictures.hockey +alt.binaries.pictures.honey-b-sweet +alt.binaries.pictures.horny.nurses +alt.binaries.pictures.horses +alt.binaries.pictures.humor.babies +alt.binaries.pictures.jetski +alt.binaries.pictures.joanne-guest +alt.binaries.pictures.joder.burros +alt.binaries.pictures.kids +alt.binaries.pictures.landscapes.amateur +alt.binaries.pictures.leek +alt.binaries.pictures.lesbians +alt.binaries.pictures.lexx +alt.binaries.pictures.lingerie +alt.binaries.pictures.lingerie.panties.sheer +alt.binaries.pictures.lolita.fucking +alt.binaries.pictures.lolita.misc +alt.binaries.pictures.military +alt.binaries.pictures.misc +alt.binaries.pictures.models +alt.binaries.pictures.monsters +alt.binaries.pictures.motorcycles +alt.binaries.pictures.motorcycles.harley +alt.binaries.pictures.motorcycles.sportbike +alt.binaries.pictures.movie-posters +alt.binaries.pictures.n0rp +alt.binaries.pictures.n0rp.raver +alt.binaries.pictures.nature +alt.binaries.pictures.naturism.family +alt.binaries.pictures.nicki-lewis +alt.binaries.pictures.nude +alt.binaries.pictures.nude.celebrities +alt.binaries.pictures.nude.celebrities.fake +alt.binaries.pictures.nude.celebrities.hwest +alt.binaries.pictures.nude.celebrities.male +alt.binaries.pictures.nudism +alt.binaries.pictures.nudism.adults +alt.binaries.pictures.nudism.wolfpack +alt.binaries.pictures.nudism.wolfpack.floodgates +alt.binaries.pictures.nudism.wolfpack.repost +alt.binaries.pictures.nudism.youth.and.families +alt.binaries.pictures.nylons +alt.binaries.pictures.origami +alt.binaries.pictures.pantyhose +alt.binaries.pictures.pantyhouse +alt.binaries.pictures.pantylines +alt.binaries.pictures.personal +alt.binaries.pictures.petra-verkaik +alt.binaries.pictures.phedz +alt.binaries.pictures.phil-oliver +alt.binaries.pictures.pink-floyd +alt.binaries.pictures.plushies +alt.binaries.pictures.poodles.grep +alt.binaries.pictures.radio +alt.binaries.pictures.radio.control.models +alt.binaries.pictures.raik +alt.binaries.pictures.rail +alt.binaries.pictures.raquel-welch +alt.binaries.pictures.realestate.fsbo +alt.binaries.pictures.realestate.realtors +alt.binaries.pictures.rika-nishimura +alt.binaries.pictures.sailor-moon +alt.binaries.pictures.sarenna-lee +alt.binaries.pictures.scenic +alt.binaries.pictures.scenic.amateur +alt.binaries.pictures.sex +alt.binaries.pictures.sex.fetish +alt.binaries.pictures.sex.fetish.fish +alt.binaries.pictures.spam +alt.binaries.pictures.spice-girls +alt.binaries.pictures.sports +alt.binaries.pictures.sports.gymnastics +alt.binaries.pictures.sports.ocean +alt.binaries.pictures.sports.ocean.surfing +alt.binaries.pictures.sports.ocean.windsurfing +alt.binaries.pictures.sports.pictures.ocean +alt.binaries.pictures.stereo +alt.binaries.pictures.strippers +alt.binaries.pictures.sunshineboys +alt.binaries.pictures.supermodels +alt.binaries.pictures.supermodels.cindy-crawford +alt.binaries.pictures.supermodels.kate-moss +alt.binaries.pictures.supermodels.kathy-ireland +alt.binaries.pictures.suze +alt.binaries.pictures.suze.repost +alt.binaries.pictures.tall-ships +alt.binaries.pictures.tasteless +alt.binaries.pictures.tasteless.dedman-sisters +alt.binaries.pictures.tease +alt.binaries.pictures.teen-idols +alt.binaries.pictures.teen-idols.princewilliam +alt.binaries.pictures.teen-idols.shirtless +alt.binaries.pictures.teen-starlets +alt.binaries.pictures.tiffany.towers +alt.binaries.pictures.tools +alt.binaries.pictures.utilities +alt.binaries.pictures.vehicles +alt.binaries.pictures.victoria.secret +alt.binaries.pictures.voyeurism +alt.binaries.pictures.wallpaper +alt.binaries.pictures.weather +alt.binaries.pictures.young.celebrities.retromod +alt.binaries.picutes.nude.celebrities +alt.binaries.picutres.erotica.pantyhose +alt.binaries.pinups +alt.binaries.pop.will.eat.itself +alt.binaries.pro-wrestling +alt.binaries.punk +alt.binaries.radio-control +alt.binaries.radio.pictures +alt.binaries.railroad.twofoot +alt.binaries.rebecca-lord +alt.binaries.rec.photo.equipment +alt.binaries.rock-n-roll +alt.binaries.sabrina-lloyd +alt.binaries.samantha-fox +alt.binaries.sarah-m-gellar +alt.binaries.satellite-tv +alt.binaries.scanmaster +alt.binaries.scary.exe-files +alt.binaries.scary.exe.files +alt.binaries.schematics.electronic +alt.binaries.scientology +alt.binaries.screen-savers +alt.binaries.screen-savers.mac +alt.binaries.shareware +alt.binaries.shareware.ibm.pc +alt.binaries.simulators.autos +alt.binaries.skewed +alt.binaries.slack +alt.binaries.sliders +alt.binaries.smash-pumpkins +alt.binaries.smokers.glamour.cigars +alt.binaries.soccer +alt.binaries.soccer.images +alt.binaries.sound.radio.oldtime +alt.binaries.sounds +alt.binaries.sounds.1940s.mp3 +alt.binaries.sounds.1950s.mp3 +alt.binaries.sounds.1960s.mp3 +alt.binaries.sounds.1970s.mp3 +alt.binaries.sounds.1980s.mp3 +alt.binaries.sounds.1990s.mp3 +alt.binaries.sounds.78rpm-era +alt.binaries.sounds.aac +alt.binaries.sounds.aac.d +alt.binaries.sounds.anime +alt.binaries.sounds.cartoons +alt.binaries.sounds.d +alt.binaries.sounds.erotica +alt.binaries.sounds.jpop +alt.binaries.sounds.karaoke +alt.binaries.sounds.m +alt.binaries.sounds.macintosh +alt.binaries.sounds.midi +alt.binaries.sounds.midi-tools +alt.binaries.sounds.midi.beatles +alt.binaries.sounds.midi.blues +alt.binaries.sounds.midi.classical +alt.binaries.sounds.midi.classical.sequencing +alt.binaries.sounds.midi.country +alt.binaries.sounds.midi.d +alt.binaries.sounds.midi.ethnic +alt.binaries.sounds.midi.final-fantasy +alt.binaries.sounds.midi.funk +alt.binaries.sounds.midi.games +alt.binaries.sounds.midi.jazz +alt.binaries.sounds.midi.originals +alt.binaries.sounds.midi.pop +alt.binaries.sounds.midi.rap +alt.binaries.sounds.midi.rock +alt.binaries.sounds.midi.soul +alt.binaries.sounds.midi.to.wav +alt.binaries.sounds.midnightoil +alt.binaries.sounds.misc +alt.binaries.sounds.mods +alt.binaries.sounds.mods.d +alt.binaries.sounds.mods.techno +alt.binaries.sounds.moesart2000 +alt.binaries.sounds.monty-python +alt.binaries.sounds.movies +alt.binaries.sounds.mp3 +alt.binaries.sounds.mp3.1950s +alt.binaries.sounds.mp3.1960s +alt.binaries.sounds.mp3.1970s +alt.binaries.sounds.mp3.1980s +alt.binaries.sounds.mp3.1990s +alt.binaries.sounds.mp3.beatles +alt.binaries.sounds.mp3.bootlegs +alt.binaries.sounds.mp3.brazilian +alt.binaries.sounds.mp3.comedy +alt.binaries.sounds.mp3.d +alt.binaries.sounds.mp3.dance +alt.binaries.sounds.mp3.indian.bhangra +alt.binaries.sounds.mp3.indian.movies +alt.binaries.sounds.mp3.indian.movies.old +alt.binaries.sounds.mp3.indian.pop +alt.binaries.sounds.mp3.indian.remixes +alt.binaries.sounds.mp3.indian.requests +alt.binaries.sounds.mp3.indie +alt.binaries.sounds.mp3.kcuf +alt.binaries.sounds.mp3.m +alt.binaries.sounds.mp3.ninja.music +alt.binaries.sounds.mp3.rap-hiphop +alt.binaries.sounds.mp3.rap-hiphop.full-albums +alt.binaries.sounds.mp3.rap-hiphop.mixtapes +alt.binaries.sounds.mp3.requests +alt.binaries.sounds.mp3.video-games +alt.binaries.sounds.mp3.zappa +alt.binaries.sounds.music +alt.binaries.sounds.music.amateur +alt.binaries.sounds.netjam.mp3 +alt.binaries.sounds.ninja +alt.binaries.sounds.patches +alt.binaries.sounds.radio.misc +alt.binaries.sounds.radio.oldtime +alt.binaries.sounds.realaudio +alt.binaries.sounds.realaudio.rush-limbaugh +alt.binaries.sounds.samples.music +alt.binaries.sounds.tv +alt.binaries.sounds.tv-commercials +alt.binaries.sounds.tv-themes +alt.binaries.sounds.twinvq +alt.binaries.sounds.twinvq.d +alt.binaries.sounds.utilities +alt.binaries.sounds.utilities.d +alt.binaries.sounds.vqf +alt.binaries.sounds.vqf.d +alt.binaries.sounds.wav +alt.binaries.sounds.wav.music.1950s +alt.binaries.sounds.wav.music.1960s +alt.binaries.sounds.wav.music.1970s +alt.binaries.southpark +alt.binaries.spanking +alt.binaries.squaresoft +alt.binaries.stargate-sg1 +alt.binaries.startrek +alt.binaries.startrek.adult +alt.binaries.starwars +alt.binaries.stories.sex +alt.binaries.strip-poker +alt.binaries.teri-weigel +alt.binaries.test +alt.binaries.thebird +alt.binaries.this.needs.cracking +alt.binaries.tiffany-towers +alt.binaries.tori-amos +alt.binaries.toy-cars +alt.binaries.tv.er +alt.binaries.tv.friends +alt.binaries.tv.teletubbies +alt.binaries.tv.us-sitcoms +alt.binaries.ufo.files +alt.binaries.unoffical.global.chat +alt.binaries.vcd +alt.binaries.vcd.xxx +alt.binaries.vcdz +alt.binaries.wallacegromit +alt.binaries.warcraft +alt.binaries.wares.ibm-pc-graphic +alt.binaries.warex.ibm-pc.fumbles-harem +alt.binaries.warez +alt.binaries.warez.adolescent +alt.binaries.warez.amiga +alt.binaries.warez.autocad +alt.binaries.warez.commodore64 +alt.binaries.warez.educational +alt.binaries.warez.fukengruven +alt.binaries.warez.games.adolescent +alt.binaries.warez.ibm-pc +alt.binaries.warez.ibm-pc.0-day +alt.binaries.warez.ibm-pc.d +alt.binaries.warez.ibm-pc.dos +alt.binaries.warez.ibm-pc.encrypted +alt.binaries.warez.ibm-pc.fills +alt.binaries.warez.ibm-pc.games +alt.binaries.warez.ibm-pc.german +alt.binaries.warez.ibm-pc.insomniac +alt.binaries.warez.ibm-pc.japan +alt.binaries.warez.ibm-pc.kidnapd-harem +alt.binaries.warez.ibm-pc.old +alt.binaries.warez.ibm-pc.os +alt.binaries.warez.insomniac +alt.binaries.warez.internet.video.phones.ibm.pc +alt.binaries.warez.linux +alt.binaries.warez.mac +alt.binaries.warez.mac.req +alt.binaries.warez.macintosh +alt.binaries.warez.nt +alt.binaries.warez.nt.d +alt.binaries.warez.os2 +alt.binaries.warez.riscos +alt.binaries.warez.snes +alt.binaries.warez.steganography +alt.binaries.warez.uk +alt.binaries.warez.win95 +alt.binaries.warez.win95-apps +alt.binaries.warez.win95-games +alt.binaries.warez.windows31 +alt.binaries.warez.your.mammy +alt.binaries.webcam.babetv +alt.binaries.webcam.pictures +alt.binaries.webcam.videos +alt.binaries.worship.goescrunch +alt.binaries.x +alt.binaries.x-files +alt.binaries.x-files.ga +alt.binaries.x.upper-case +alt.binaries.zines +alt.binaries.zoogz-rift +alt.binary.carring-female +alt.binaties.startrek.adult +alt.bio.hackers +alt.bio.minority +alt.bio.technology +alt.bio.technology.cloning +alt.bio.technology.gene-testing +alt.bio.technology.misc +alt.birthright +alt.bitch.ewokie +alt.bitch.pork +alt.bite-me +alt.bitoparty +alt.bitterness +alt.biz.infighting +alt.blackbayou +alt.blake-isms +alt.blasphemy +alt.bloopers +alt.bmx +alt.bobby +alt.bobgoblin-extraordinaire +alt.bogus +alt.bogus.group +alt.bonehead.andy-banta +alt.bonehead.anti-rush +alt.bonehead.bill-palmer +alt.bonehead.captain-bligh +alt.bonehead.clayton-oneill +alt.bonehead.dr-turi +alt.bonehead.geoff-miller +alt.bonehead.hangnail +alt.bonehead.head-librarian +alt.bonehead.higby +alt.bonehead.jai-maharaj +alt.bonehead.james-koput +alt.bonehead.jay-denebeim +alt.bonehead.jesse-garon +alt.bonehead.john-grubor +alt.bonehead.john-henry +alt.bonehead.john-siwinski +alt.bonehead.john-weir +alt.bonehead.joseph-holl +alt.bonehead.josh-kramer +alt.bonehead.julian-macassey +alt.bonehead.julian-macasseyr +alt.bonehead.kevin-mitnick +alt.bonehead.kristian-tanner +alt.bonehead.lee-latham +alt.bonehead.oliver1 +alt.bonehead.phil-lawlor +alt.bonehead.phil-oliver +alt.bonehead.ralph.reed.sucks +alt.bonehead.sander.von.minnen +alt.bonehead.sandy-wallace +alt.bonehead.scott-abraham +alt.bonehead.steve-crisp +alt.bonehead.steve-day +alt.bonehead.steve-lake +alt.bonehead.teddy-bear +alt.bonehead.waldby +alt.bonehead.walt-rines +alt.bonhead.johnny-grubor +alt.bonsai +alt.books +alt.books.anne-rice +alt.books.arthur-clarke +alt.books.beatgeneration +alt.books.bernard-cornwell +alt.books.brian-lumley +alt.books.bukowski +alt.books.cait-r-kiernan +alt.books.carl-sagan +alt.books.chesterton +alt.books.clive-barker +alt.books.crichton +alt.books.cs-lewis +alt.books.dan-simmons +alt.books.david-gemmell +alt.books.david-weber +alt.books.dean-koontz +alt.books.deryni +alt.books.destroyer +alt.books.dylan-thomas +alt.books.electronic +alt.books.george-behe +alt.books.george-fraser +alt.books.george-orwell +alt.books.ghost-fiction +alt.books.gor +alt.books.h-g-wells +alt.books.harry-turtledove +alt.books.iain-banks +alt.books.inklings +alt.books.isaac-asimov +alt.books.jack-chalker +alt.books.james-joyce +alt.books.jean-auel +alt.books.jerry-chavez +alt.books.john-grisham +alt.books.julian-may +alt.books.kurt-vonnegut +alt.books.larry-niven +alt.books.lars-eighner +alt.books.louis-lamour +alt.books.m-lackey +alt.books.moorcock +alt.books.mysteries +alt.books.nabokov +alt.books.nancy-drew +alt.books.orson-s-card +alt.books.outlander +alt.books.pat-conroy +alt.books.patrick-jones +alt.books.peter-straub +alt.books.phil-k-dick +alt.books.poppy-z-brite +alt.books.pratchett +alt.books.purefiction +alt.books.ray-bradbury +alt.books.raymond-feist +alt.books.reviews +alt.books.robert-rankin +alt.books.roger-zelazny +alt.books.sebar +alt.books.sf.melanie-rawn +alt.books.stephen-king +alt.books.tanya-huff +alt.books.technical +alt.books.terry-brooks +alt.books.terry-goodkind +alt.books.thomas-ligotti +alt.books.thomas-pynchon +alt.books.thomasbernhard +alt.books.toffler +alt.books.tom-clancy +alt.books.tom-holt +alt.books.valdemar.fanfic +alt.books.zogoiby +alt.boomerang +alt.bored +alt.bork +alt.boston.moderated +alt.boston.unmoderated +alt.boxer-shorts +alt.braces +alt.brad.jesness.die.die.die +alt.brain +alt.brain.teasers +alt.brallen +alt.brandon +alt.bread.recipes +alt.breakdancing +alt.breast-implant.moderated +alt.brewing +alt.brother-jed +alt.brown-cow-moo +alt.bru +alt.bucky-fuller +alt.buddha.short.fat.guy +alt.building.announcements +alt.building.architecture +alt.building.construction +alt.building.contractors +alt.building.elevators +alt.building.engineering +alt.building.environment +alt.building.finance +alt.building.jobs +alt.building.landscape +alt.building.manufacturing +alt.building.realestate +alt.building.survey-mapping +alt.bullshit +alt.burning-man +alt.business +alt.business.accountability +alt.business.consulting +alt.business.consulting.utilities +alt.business.franchise +alt.business.home.pc +alt.business.hospitality +alt.business.import-export +alt.business.import-export.computer +alt.business.import-export.food +alt.business.import-export.only +alt.business.import-export.raw-material +alt.business.import-export.services +alt.business.insurance +alt.business.internal-audit +alt.business.misc +alt.business.multi-level +alt.business.multi-level.exceltel +alt.business.multi-level.moderated +alt.business.multi-level.scam +alt.business.multi-level.scam.scam.scam +alt.business.multi-level.watkins +alt.business.offshore +alt.business.pornpig.industries +alt.business.propertry +alt.business.property +alt.business.seminars +alt.business.telemarketing +alt.butt.flame.karl-malden.cascade +alt.butt.harp +alt.butt.harp.die.die.die +alt.buttholes +alt.butts +alt.bytebrothers +alt.c64 +alt.cable-ip +alt.cable-tv.disney +alt.cable-tv.re-regulate +alt.cable-tv.tci-digital +alt.cad +alt.cad.archicad +alt.cad.autocad +alt.cad.cadkey +alt.cad.cadvance +alt.cad.chiefarchitect +alt.cad.helix +alt.cad.intellicad +alt.cafe-vortex +alt.cake +alt.california +alt.california.illegals +alt.callahans +alt.can.creat.whatever.news.group.i.want +alt.canadian.beaver +alt.cannabis.seed-banks +alt.captain.sarcastic +alt.cardgame.magic +alt.cardgame.spellfire +alt.carlos-n-jen +alt.carnival +alt.cars.clubgti +alt.cars.ferrari +alt.cars.ford-probe +alt.cars.lotus +alt.cars.lotus.elan +alt.cartoon.reboot +alt.cascade +alt.cascade.fuckhead +alt.cascade.shut-up-cunter +alt.cascade.vest.sweater.vest +alt.casinos.chequers.chips.tokens +alt.castlenet +alt.catastrophism +alt.cats +alt.cats.world.domination +alt.caving +alt.cbs-sucks +alt.cd-rom +alt.cd-rom.reviews +alt.cdr.panasonic +alt.celebrities +alt.cellular +alt.cellular.clearnet +alt.cellular.data +alt.cellular.ericsson +alt.cellular.fido +alt.cellular.gsm +alt.cellular.motorola +alt.cellular.nokia +alt.cellular.nokia.ringtones +alt.cellular.sprintpcs +alt.censorship +alt.censorship.vancouver-community-net +alt.centipede +alt.cereal +alt.certification.a-plus +alt.certification.cne +alt.certification.mcse +alt.certification.network-plus +alt.cesium +alt.change +alt.change.lightbulb +alt.chaos +alt.charlie.rules.rules.rules +alt.chat-programs.icq +alt.chat-programs.icq.dating +alt.cheese +alt.chess.ics +alt.child-support +alt.childcare +alt.chinchilla +alt.chinese.computing +alt.chinese.fengshui +alt.chinese.nonstop-breeding +alt.chinese.plus.viagra.equals.end.of.the.world +alt.chinese.story +alt.chinese.text +alt.chinese.text.big5 +alt.chinese.text.hz +alt.chips.salt-n-vinegar +alt.chocobo +alt.chocobo.wark.wark.wark +alt.christnet +alt.christnet.beanie-babies +alt.christnet.bible +alt.christnet.christianlife +alt.christnet.demonology +alt.christnet.ethics +alt.christnet.evangelical +alt.christnet.hypocrisy +alt.christnet.nudism +alt.christnet.philosophy +alt.christnet.prayer +alt.christnet.racism +alt.christnet.rightwing.loonies +alt.christnet.satanism +alt.christnet.second-coming.real-soon-now +alt.christnet.sex +alt.christnet.sodomy +alt.christnet.songwriters +alt.christnet.theology +alt.cic.sfsu.edu +alt.circumcision +alt.circus.arts +alt.citadel.alumni +alt.city.ideafarm +alt.clearing.technology +alt.clerks +alt.clerks.binaries +alt.clip-joint +alt.clnis.daily.club +alt.cloned-sheep.bah.bah.bah +alt.cloning +alt.clothes.designer +alt.clothes.designer.versace +alt.clothing.lingerie +alt.clothing.sneakers +alt.cloudshapes +alt.club.merlino +alt.club.raaf +alt.clubs.club-anime.toronto +alt.clubs.emperorshammer +alt.clubs.just-for-fun +alt.clueless +alt.cmsg.test +alt.cna +alt.co-evolution +alt.co-ops +alt.coatings.paint +alt.cobol +alt.coccinella.alexa.zepher.maltrattamenti +alt.coffee +alt.collecting.8-track-tapes +alt.collecting.autographs +alt.collecting.barbie +alt.collecting.barbies +alt.collecting.beanie-babies +alt.collecting.beanie-babies.charlie-witt +alt.collecting.beanie-babies.discussion.moderated +alt.collecting.beanie-babies.forsale +alt.collecting.beanie-babies.tradingcards +alt.collecting.beanie-babies.uk +alt.collecting.bicycles +alt.collecting.breweriana +alt.collecting.casino-tokens +alt.collecting.juke-boxes +alt.collecting.pens-pencils +alt.collecting.pens-pencils.binary +alt.collecting.postcard +alt.collecting.records +alt.collecting.sports-figures +alt.collecting.stamp +alt.collecting.stamps +alt.collecting.stamps.david.ross.sucks +alt.collecting.stamps.jay.carrigan.blackmail +alt.collecting.stamps.software +alt.collecting.stamps.us +alt.collecting.stamps.worldwide +alt.collecting.teddy-bears +alt.collecting.topper-dawn +alt.collecting.toy-robot +alt.collecting.warner-bros +alt.college.bromley-uk +alt.college.bromley-uk.announce +alt.college.bromley-uk.events +alt.college.bromley-uk.misc +alt.college.college-bowl +alt.college.college-meow +alt.college.democrats +alt.college.food +alt.college.fraternities +alt.college.fraternities.dlta-sigma-phi +alt.college.fraternities.sigma-pi +alt.college.greek.organizations +alt.college.sororities +alt.college.tunnels +alt.college.us +alt.comedy +alt.comedy.air-farce +alt.comedy.bill-hicks +alt.comedy.british +alt.comedy.british.blackadder +alt.comedy.british.fast-show +alt.comedy.firesgn-thtre +alt.comedy.george-carlin +alt.comedy.improvisation +alt.comedy.jerrylewis +alt.comedy.laurel-hardy +alt.comedy.marx-bros +alt.comedy.paul-reubens +alt.comedy.slapstick +alt.comedy.slapstick.3-stooges +alt.comedy.standup +alt.comedy.vaudeville +alt.comics.2000ad +alt.comics.alan-moore +alt.comics.alternative +alt.comics.batman +alt.comics.classic +alt.comics.dilbert +alt.comics.elfquest +alt.comics.fan-fiction +alt.comics.fandom +alt.comics.green-lantern +alt.comics.gunnm +alt.comics.image +alt.comics.jack-kirby +alt.comics.lnh +alt.comics.peanuts +alt.comics.pokey +alt.comics.sip +alt.comics.sluggy-freelance +alt.comics.spacemoose +alt.comics.spider-man +alt.comics.strips.footrot-flats +alt.comics.super-villains +alt.comics.superman +alt.comics.user-friendly +alt.commahead +alt.comms.lounge +alt.comms.powerline +alt.community.intentional +alt.community.local-money +alt.comp +alt.comp.4d +alt.comp.acad-freedom.news +alt.comp.acad-freedom.talk +alt.comp.baan +alt.comp.blind-users +alt.comp.casewise +alt.comp.compression +alt.comp.convergence +alt.comp.databases.omnis +alt.comp.databases.xbase.clipper +alt.comp.databases.xbase++ +alt.comp.dcom.sys.xyplex +alt.comp.dymax +alt.comp.editors.batch +alt.comp.freeware +alt.comp.freeware.gdp +alt.comp.goldmine +alt.comp.hardware.aptiva +alt.comp.hardware.homebuilt +alt.comp.hardware.homedesigned +alt.comp.hardware.overclocking +alt.comp.hardware.overclocking.amd +alt.comp.hardware.pc-homebuilt +alt.comp.hardware.superdisk +alt.comp.hello-world +alt.comp.jgaa +alt.comp.jgaa.binaries +alt.comp.lang.applescript +alt.comp.lang.borland-delphi +alt.comp.lang.learn.c-c++ +alt.comp.lang.reportsmith +alt.comp.lang.scriptease +alt.comp.lang.superlang +alt.comp.lang.visualbasic.ver3 +alt.comp.lang.visulabasic.ver3 +alt.comp.pacnet.support +alt.comp.periphs.cdr +alt.comp.periphs.cdr.mac +alt.comp.periphs.dcameras +alt.comp.periphs.gigabyte +alt.comp.periphs.keyboard +alt.comp.periphs.mainboard.abit +alt.comp.periphs.mainboard.aopen +alt.comp.periphs.mainboard.asus +alt.comp.periphs.mainboard.elitegroup +alt.comp.periphs.mainboard.epox +alt.comp.periphs.mainboard.fic +alt.comp.periphs.mainboard.giga-byte +alt.comp.periphs.mainboard.m-tech +alt.comp.periphs.mainboard.octek +alt.comp.periphs.mainboard.qdi +alt.comp.periphs.mainboard.shuttle +alt.comp.periphs.mainboard.soyo +alt.comp.periphs.mainboard.supermicro +alt.comp.periphs.mainboard.tacos +alt.comp.periphs.mainboard.tyan +alt.comp.periphs.multifunctions +alt.comp.periphs.scanner +alt.comp.periphs.soundcard.avm +alt.comp.periphs.soundcard.sblive +alt.comp.periphs.videocards.ati +alt.comp.periphs.videocards.matrox +alt.comp.periphs.videocards.nvidia +alt.comp.pheriphs.mainboard.supermicro +alt.comp.sesoft +alt.comp.sfdm.ug +alt.comp.shareware +alt.comp.shareware.authors +alt.comp.shareware.for-kids +alt.comp.shareware.nettamer +alt.comp.shareware.programmer +alt.comp.software.easter-eggs +alt.comp.software.energy +alt.comp.software.financial.peachtree +alt.comp.software.financial.quicken +alt.comp.software.njdm +alt.comp.software.tools +alt.comp.symix +alt.comp.sys.laptops.alcam +alt.comp.sys.mainboard.macintosh +alt.comp.sys.palmtops.hp +alt.comp.sys.palmtops.pilot +alt.comp.tandem-users +alt.comp.tandem-users.sigs +alt.comp.tess +alt.comp.virus +alt.comp.virus.binaries +alt.comp.virus.pro-virus +alt.comp.virus.source.code +alt.complainers.bitch-n-moan +alt.computer +alt.computer.consultants +alt.computer.consultants.ads +alt.computer.consultants.ads.norecruiters +alt.computer.consultants.moderated +alt.computer.drivers.wanted +alt.computer.security +alt.computer.workshop.live +alt.computerlink.online +alt.confag +alt.conference-ctr +alt.config +alt.config.cypher +alt.config.cypher-abuse +alt.config.flame +alt.config.jeffery-d-hunt +alt.config.newtons +alt.config.phil-oliver +alt.config.rmgroup.maniacs.david.guntner +alt.consciousness +alt.consciousness.4th-way +alt.consciousness.jancox +alt.consciousness.mysticism +alt.consciousness.near-death-exp +alt.consciousness.slyman +alt.consciousness.slyman.flame +alt.conspiracy +alt.conspiracy.abe-lincoln +alt.conspiracy.abiola +alt.conspiracy.alt-config +alt.conspiracy.antichrist +alt.conspiracy.area51 +alt.conspiracy.beyondweird +alt.conspiracy.black.helicopters +alt.conspiracy.british-telecom +alt.conspiracy.cabal +alt.conspiracy.coventry.morph +alt.conspiracy.dean-stark +alt.conspiracy.fbi.karczewski-files +alt.conspiracy.finast +alt.conspiracy.im-taking.over-the.world.starting.with-alt.config +alt.conspiracy.im-taking.over-the.world.starting.with-aol +alt.conspiracy.im-taking.over-the.world.starting.with-christmas +alt.conspiracy.im-taking.over-the.world.starting.with-usenet +alt.conspiracy.im-taking.over-the.world.starting.with-yalta +alt.conspiracy.im.taking.over.the.world.starting.with.usenet +alt.conspiracy.jeffery-hunt +alt.conspiracy.jfk +alt.conspiracy.jfk.moderated +alt.conspiracy.kunm +alt.conspiracy.lady-di +alt.conspiracy.microsoft +alt.conspiracy.netcom +alt.conspiracy.princess-diana +alt.conspiracy.right-wing +alt.conspiracy.spy +alt.conspiracy.timo-salami +alt.construction +alt.consumers.auto-service +alt.consumers.experiences +alt.consumers.free-stuff +alt.consumers.pest-control +alt.consumers.sweepstakes +alt.contest.addiction +alt.contest.recovery +alt.contraceptives +alt.control.bladder +alt.control.cabal +alt.control.cabal.bladder +alt.control.delete +alt.control.test.test.test +alt.cookies.yum.yum.yum +alt.cooking-chat +alt.coptic.australia +alt.corel.graphics +alt.corn.sucks-polenta.rules-do.the.butt.dance-man +alt.corporate.accountability +alt.costam +alt.cosuard +alt.coupons +alt.coven +alt.coven.binaries +alt.coven.cthulhu +alt.coven.humor +alt.coven.moderated +alt.coven.test +alt.cover.the.world.with.snow +alt.cow.tipping +alt.cows.are.nice +alt.cows.moo.moo.moo +alt.crackers +alt.crackhead.jay-denebeim +alt.cracks +alt.cracks.nl +alt.crafts.blacksmithing +alt.crafts.candlemaking.soapmaking +alt.crafts.candlemaking.soapmaking.moderated +alt.crafts.plastic-canvas +alt.crafts.print-artist +alt.crafts.professional +alt.creative-cook +alt.cretinous.reprobate.jay-denebeim +alt.crime +alt.crime.bail-enforce +alt.crime.peacemaking.criminology +alt.crossover +alt.cuddle +alt.cuddle.rebels +alt.cuddlebot +alt.cult-movies +alt.cult-movies.alien +alt.cult-movies.clue +alt.cult-movies.cronenberg +alt.cult-movies.eros +alt.cult-movies.erotica +alt.cult-movies.evil-deads +alt.cult-movies.phantasm +alt.cult-movies.rocky-horror +alt.cult-movies.zombies +alt.cult.jeff-mcdonald +alt.cult.maharaji +alt.cult.nudism +alt.culture.african.american.arts +alt.culture.african.american.business +alt.culture.african.american.history +alt.culture.african.american.issues +alt.culture.alaska +alt.culture.arabic.friends +alt.culture.arabic.non-politics +alt.culture.argentina +alt.culture.armenian +alt.culture.assam +alt.culture.austrian +alt.culture.azerbaijan +alt.culture.beaches +alt.culture.bullfight +alt.culture.cacophony +alt.culture.cajun +alt.culture.caucasia +alt.culture.chechnya +alt.culture.china +alt.culture.crete +alt.culture.crimea +alt.culture.cyber-psychos +alt.culture.cyprus +alt.culture.dagestan +alt.culture.egyptian +alt.culture.epirus +alt.culture.euskalherria +alt.culture.fabulous +alt.culture.fil-am.relationships +alt.culture.former-yugosalv-republic-of-macedonia +alt.culture.friesland.frysk +alt.culture.fyrom +alt.culture.gard-trask +alt.culture.gods +alt.culture.hawaii +alt.culture.hessian +alt.culture.hongkong +alt.culture.indonesia +alt.culture.internet +alt.culture.james-koput +alt.culture.jesse-garon +alt.culture.jollyroger +alt.culture.karnataka +alt.culture.kashmir +alt.culture.kazakhstan +alt.culture.kerala +alt.culture.knights +alt.culture.kuwait +alt.culture.lounge +alt.culture.luddites +alt.culture.macedonia +alt.culture.macedonia-is-greek +alt.culture.macedonia.moderated +alt.culture.malawi +alt.culture.malta +alt.culture.military-brats +alt.culture.mobydick +alt.culture.mods-modernists +alt.culture.morocco +alt.culture.net-viking +alt.culture.ny-upstate +alt.culture.ny.upstate +alt.culture.openair-market +alt.culture.oregon +alt.culture.orientalism +alt.culture.outerspace +alt.culture.rhodes +alt.culture.saudi +alt.culture.somalia +alt.culture.swahili +alt.culture.taiwan +alt.culture.tamil +alt.culture.tamil-eelam +alt.culture.thrace +alt.culture.tibet +alt.culture.tunisia +alt.culture.turkestan +alt.culture.turkish +alt.culture.turkish.azerbaijan +alt.culture.turkish.cyprus +alt.culture.turkish.diaspora +alt.culture.turkish.history +alt.culture.turkish.internet +alt.culture.turkish.media +alt.culture.turkish.politics +alt.culture.turkish.publications +alt.culture.turkish.religions +alt.culture.turkish.travel +alt.culture.turkmenistan +alt.culture.uganda +alt.culture.us.1960s +alt.culture.us.1970s +alt.culture.us.1980s +alt.culture.us.1990s +alt.culture.us.asian-indian +alt.culture.us.hispanics +alt.culture.us.southwest +alt.culture.usenet +alt.culture.vampires +alt.culture.virtual.oceania +alt.culture.warrior-women +alt.culture.welsh +alt.culture.wo9ld.culture +alt.culture.www +alt.culture.zaire +alt.culture.zambia +alt.current-events.blizzard-of-93 +alt.current-events.blizzard-of-93.agff-cowards +alt.current-events.bosnia +alt.current-events.cc-news +alt.current-events.cebit +alt.current-events.cia.crack-dealing +alt.current-events.clinton.whitewater +alt.current-events.earth-changes +alt.current-events.haiti +alt.current-events.massacre.columbine +alt.current-events.massacre.high-school +alt.current-events.net-abuse +alt.current-events.net-abuse.spam +alt.current-events.russia +alt.current-events.ukraine +alt.current-events.usa +alt.cx +alt.cyberangels +alt.cybercafes +alt.cyberjockey +alt.cyberpromo.com.spammers.revenge +alt.cyberpunk +alt.cyberpunk.chatsubo +alt.cyberpunk.cypher +alt.cyberpunk.movement +alt.cyberpunk.tech +alt.cyberspace +alt.cyberspace.construction.busines +alt.cyberspace.construction.business +alt.cyberspace.rebels +alt.cyberspace.rebels.kai.kai.kai +alt.cyberwitness +alt.cyberworld +alt.cynicism +alt.cynics +alt.cypher +alt.cypherpunks +alt.cypherpunks.announce +alt.cypherpunks.social +alt.cypherpunks.technical +alt.dads-rights +alt.dads-rights.unmoderated +alt.damians.lovely.pants +alt.dan.loves.ninou +alt.dance.breaking +alt.dare.sucks +alt.darkside +alt.dating.uk.north-west +alt.dating.uk.south-east +alt.dave-wheeler.usenet.troll +alt.david +alt.david.is.an.idiot +alt.david.lawrence.no.right +alt.david.lawrence.tale.censor.censor.censor +alt.dbs.echostar +alt.dbs.primestar +alt.dcom.slip-emulators +alt.dcom.telecom +alt.dcom.telecom.radius +alt.ddd.ddd +alt.dead.porn.stars +alt.deadmolly.woodchipper +alt.dear.whitehouse +alt.debord.collectors +alt.december +alt.deepfix +alt.deism +alt.dementia +alt.demogroups +alt.demogroups.paranoids +alt.dentella +alt.deposit +alt.depressed.as.fuck +alt.desert-storm +alt.desert.restoration +alt.design.graphics +alt.design.product +alt.despair3 +alt.destroy.microsoft +alt.destroy.the.earth +alt.destroy.the.internet +alt.dev.null +alt.devilbunnies +alt.diamonds +alt.diamonds.marketplace +alt.dick-weasel.michael-zander +alt.dick-weasel.phil-oliver +alt.digi +alt.digitiser +alt.digitiser.binaries +alt.digitiser.digi-98boyz +alt.digitiser.moderated +alt.digitiser.newbies.dont.meddle.with.things.you.dont.understand +alt.digitiser.nick-mooney.we.cuss.him.bad +alt.digitiser.snakes +alt.digitiser.sucks.cheesy.nobs +alt.digitiser.whinging-kids +alt.disability.blind.social +alt.disasters.aviation +alt.disasters.dean-stark +alt.disasters.drought +alt.disasters.misc +alt.disbarred-lawyer.john-grubor +alt.discordia +alt.discordian +alt.discrimination +alt.discussioni.figa-gratis +alt.disgusting.stories.my-imagination +alt.disney +alt.disney.beanies +alt.disney.beauty+beast +alt.disney.collecting +alt.disney.criticism +alt.disney.disneyland +alt.disney.disneyworld +alt.disney.secrets +alt.disney.sucks +alt.disney.tech +alt.disney.vacation-club +alt.divination +alt.dk +alt.dk.helbred.handicap +alt.dk.sjat +alt.dk.snak +alt.dk.warez +alt.dmc +alt.dobbins.milkbaby +alt.dolcett +alt.domain-names.disputes +alt.domain-names.forsale +alt.domain-names.registries +alt.domain-names.wanted +alt.dont.get.even.get.odd +alt.doobry +alt.dork.coder1 +alt.dorks +alt.dot.dot.dot.lets.use.square.brackets.in.cascades +alt.doug-bashford.spank.spank.spank +alt.dragons-inn +alt.drdoom +alt.dreams +alt.dreams.castaneda +alt.dreams.edgar-cayce +alt.dreams.impero.nascosto +alt.dreams.lucid +alt.dreams.lucid.entities +alt.dreams.mythic +alt.dreams.prophetic +alt.dreams.recurring +alt.dreams.sexual +alt.dreams.toltec +alt.drinks.beer +alt.drinks.kool-aid +alt.drinks.scotch-whisky +alt.drinks.snapple +alt.drugs +alt.drugs.abuse +alt.drugs.busts +alt.drugs.caffeine +alt.drugs.chemistry +alt.drugs.crack +alt.drugs.culture +alt.drugs.dare-sucks +alt.drugs.datura +alt.drugs.dmt +alt.drugs.hard +alt.drugs.leri +alt.drugs.melatonin +alt.drugs.mushrooms +alt.drugs.pot +alt.drugs.pot.cultivation +alt.drugs.pot.cultivation.hydroponics +alt.drugs.pot.cultivation.no-spooks +alt.drugs.psychedelics +alt.drugs.uk +alt.drugs.usenet +alt.drumcorps +alt.drunken.bastards +alt.drunken.bastards.camp-gumby +alt.drunken.bastards.cypher +alt.drunken.bastards.richard-healey +alt.drunken.bastards.ruediger-landmann +alt.drwho.creative +alt.dss +alt.dss.tech +alt.duck.quack.quack.quack +alt.duffman.was.here +alt.duh +alt.duh-ceichels +alt.dumpster +alt.dur.general +alt.dur.test +alt.dx.tropical +alt.e-mail.lists +alt.earth.confederation +alt.earth.crisis +alt.ebonics.b.fun.yo.yo.yo +alt.ecommerce +alt.ecommerce.intershop +alt.edgar +alt.education +alt.education.alternative +alt.education.bangkok +alt.education.business +alt.education.disabled +alt.education.distance +alt.education.email-project +alt.education.higher.stu-affairs +alt.education.home-school.christian +alt.education.home-school.disabilities +alt.education.ib +alt.education.management +alt.education.nontrad-degree +alt.education.research +alt.education.tip +alt.egyptians.copts +alt.elpigo +alt.elvis.king +alt.emergency.services.dispatcher +alt.employees.compusa +alt.emulators.amiga +alt.emulators.classic-arcade +alt.emulators.freemware +alt.emulators.uae +alt.emusic +alt.energy.homepower +alt.energy.hydrogen +alt.energy.nuclear +alt.energy.over-unity +alt.energy.renewable +alt.engineering +alt.engineering.electrical +alt.engineering.fire-protection +alt.engineering.maintenance +alt.engineering.nuclear +alt.england.sux.scotland.and.wales.rule.the.world +alt.england.sux.wales.and.scotland.rule.the.world +alt.engr.explosives +alt.ensign.wesley.die.die.die +alt.enviro-p2 +alt.environment-p2 +alt.environment.p2 +alt.eod.tech +alt.epix.sucks +alt.equamour.lunatic +alt.equestrian.draft +alt.er.sex +alt.ernic +alt.esada +alt.escape.from.greenville +alt.escaped.mental.patient.john-grubor +alt.esperanto +alt.esperanto.amuzo.varia +alt.esperanto.anfaenger +alt.esperanto.beginner +alt.esperanto.debutant +alt.esperanto.homanstudaro.varia +alt.esperanto.humanstudaro.varia +alt.esperanto.katolika +alt.esperanto.komencanto +alt.esperanto.komencanto.nacilingve +alt.esperanto.komp.varia +alt.esperanto.konfig +alt.esperanto.latina-3 +alt.esperanto.negoco.varia +alt.esperanto.parolado.varia +alt.esperanto.principiante +alt.esperanto.sci.varia +alt.esperanto.sekso.varia +alt.esperanto.shoshin-sha +alt.esperanto.soc.varia +alt.esperanto.varia.varia +alt.espn.sucks +alt.etext +alt.eunuchs.questions +alt.euro.hydro +alt.evil +alt.evil.hfw-dipshits +alt.ex-con.john-grubor +alt.exe +alt.exotic-music +alt.ezines +alt.ezines.rad +alt.ezines.set +alt.ezines.spire +alt.fa.tim-henman +alt.fag-lamer.tj.spark-miller.fuckhead +alt.fairs.renaissance +alt.fairs.renaissance.livingchess +alt.familiy-names.harperink +alt.family-name.goodpaster +alt.family-name.luquette +alt.family-name.skomp +alt.family-name.snider +alt.family-name.stokley +alt.family-name.walter +alt.family-name.whitlow +alt.family-names +alt.family-names.abair +alt.family-names.achterhoff +alt.family-names.adair +alt.family-names.anderson +alt.family-names.armand +alt.family-names.bever +alt.family-names.bicknell +alt.family-names.boettcher +alt.family-names.broyles +alt.family-names.brujo +alt.family-names.casada +alt.family-names.cavolack +alt.family-names.cavolick +alt.family-names.charnock +alt.family-names.chumbley +alt.family-names.clark +alt.family-names.clinton +alt.family-names.cole +alt.family-names.collingridge +alt.family-names.collins +alt.family-names.comito +alt.family-names.cooper +alt.family-names.cronkite +alt.family-names.cullop +alt.family-names.cypher +alt.family-names.dailey +alt.family-names.daily +alt.family-names.daley +alt.family-names.daly +alt.family-names.daniels +alt.family-names.daugherty +alt.family-names.davis +alt.family-names.deveau +alt.family-names.dewald +alt.family-names.dews +alt.family-names.doolittle +alt.family-names.duff +alt.family-names.dunnegan +alt.family-names.durman +alt.family-names.eichenberg +alt.family-names.elliott +alt.family-names.engler +alt.family-names.etenbaum +alt.family-names.forsberg +alt.family-names.frught +alt.family-names.gabriel +alt.family-names.ganson +alt.family-names.gates +alt.family-names.gee +alt.family-names.gendreau +alt.family-names.goodpaster +alt.family-names.gould +alt.family-names.gramling +alt.family-names.hackley +alt.family-names.hangnail +alt.family-names.hemson +alt.family-names.henderson +alt.family-names.hendren +alt.family-names.hendricks +alt.family-names.higby +alt.family-names.hittle +alt.family-names.hodges +alt.family-names.hoffman +alt.family-names.huband +alt.family-names.hughes +alt.family-names.isbell +alt.family-names.jackson +alt.family-names.jacobi +alt.family-names.jacoby +alt.family-names.jenkins +alt.family-names.jensen +alt.family-names.johnson +alt.family-names.jones +alt.family-names.julian +alt.family-names.kahle +alt.family-names.konde +alt.family-names.kressel +alt.family-names.lane +alt.family-names.leger +alt.family-names.lenard +alt.family-names.lloyd +alt.family-names.lucas +alt.family-names.luquette +alt.family-names.mac_gregor +alt.family-names.makemson +alt.family-names.manson +alt.family-names.mars +alt.family-names.martin +alt.family-names.mattix +alt.family-names.meyer +alt.family-names.miller +alt.family-names.muellerleile +alt.family-names.norton +alt.family-names.oneill +alt.family-names.palmjob +alt.family-names.pruitt +alt.family-names.putnam +alt.family-names.raynes +alt.family-names.reedy +alt.family-names.rice +alt.family-names.rosenthal +alt.family-names.roush +alt.family-names.schauss +alt.family-names.schleck +alt.family-names.shouse +alt.family-names.shows +alt.family-names.sims +alt.family-names.smith +alt.family-names.snider +alt.family-names.soderberg +alt.family-names.starr +alt.family-names.stephenson +alt.family-names.stevens +alt.family-names.strong +alt.family-names.supak +alt.family-names.teachout +alt.family-names.thijssen +alt.family-names.thompson +alt.family-names.tietsoort +alt.family-names.vanminnen +alt.family-names.vannorman +alt.family-names.varner +alt.family-names.von_gausig +alt.family-names.warren +alt.family-names.webb +alt.family-names.welch +alt.family-names.wilhite +alt.family-names.wood +alt.family-names.wooten +alt.family-names.wright +alt.family-names.xemblinosky +alt.family-names.xemblinosky.yes.its.a.real.name +alt.family-names.yeltsin +alt.family-names.zadvinskis +alt.family-names.zerbe +alt.fan +alt.fan.aavfff +alt.fan.abstinence +alt.fan.actors +alt.fan.actors.dead +alt.fan.adam-allard +alt.fan.addams.pugsley +alt.fan.addams.wednesday +alt.fan.admiral-twin +alt.fan.adolf-hitler +alt.fan.adolf-hitler.and.crumpets +alt.fan.aimee-lortskel +alt.fan.air +alt.fan.alan-keyes +alt.fan.alan-shearer +alt.fan.alan.tam +alt.fan.alare +alt.fan.alicia-silverstone +alt.fan.all-blacks +alt.fan.aly-walansky +alt.fan.alyssa-milano +alt.fan.amiga-action.die.die.die +alt.fan.amiga-power +alt.fan.ana-voog +alt.fan.andrew.lloyd-webber +alt.fan.andy-kaufman +alt.fan.andy-kyle +alt.fan.anita.mui +alt.fan.annie-lennox +alt.fan.arale +alt.fan.ariana +alt.fan.arianarichards +alt.fan.ariel +alt.fan.art-bell +alt.fan.artelevision +alt.fan.ashley-judd +alt.fan.ashley-lauren +alt.fan.asia-argento +alt.fan.asia-carrera +alt.fan.asprin +alt.fan.audrey-hepburn +alt.fan.authors.stephen-king +alt.fan.bababooey +alt.fan.babe-ruth +alt.fan.backstreet.boys +alt.fan.bahamut-zero +alt.fan.barbra.streisand +alt.fan.barry-manilow +alt.fan.bas +alt.fan.beable +alt.fan.ben-morss +alt.fan.ben-polen +alt.fan.bettie-page +alt.fan.bettina.fink +alt.fan.bgcrisis +alt.fan.bill-bell +alt.fan.bill-clinton +alt.fan.bill-gates +alt.fan.bill-nye +alt.fan.bill.cheek +alt.fan.billie-piper +alt.fan.billy-idol +alt.fan.blackskull +alt.fan.blade-runner +alt.fan.blessid-union +alt.fan.blues-brothers +alt.fan.bob-abraham +alt.fan.bob-dole +alt.fan.bob-larson +alt.fan.bobo +alt.fan.bobo-vieri +alt.fan.bonzo-dog +alt.fan.brad-pitt +alt.fan.brad.tripp +alt.fan.brandon-cotton +alt.fan.bread.whole-wheat +alt.fan.brent-gore +alt.fan.brent-spiner +alt.fan.bridget +alt.fan.british-accent +alt.fan.british-actors +alt.fan.britney-spears +alt.fan.britney-spears.binaries +alt.fan.broken-gizmo +alt.fan.brooke-shields +alt.fan.bruce-campbell +alt.fan.bruce-kettler +alt.fan.bryan.shea +alt.fan.buckaroo-banzai +alt.fan.buddy-holly +alt.fan.buster-n-missy +alt.fan.calvin-and-hobbes +alt.fan.cameron-diaz +alt.fan.camille-paglia +alt.fan.capt-beefheart +alt.fan.capt-tractor +alt.fan.carly-shea +alt.fan.carmen-electra +alt.fan.carmen-grasso +alt.fan.cbc.urban-peasant +alt.fan.cecil-adams +alt.fan.cfny +alt.fan.charlie.liberal +alt.fan.chastity +alt.fan.chaz.beastiality +alt.fan.chaz.jerry +alt.fan.chocobo +alt.fan.chris-cornell +alt.fan.chris-elliott +alt.fan.chris-stokoe +alt.fan.christi +alt.fan.christina-applegate +alt.fan.christy-canyon +alt.fan.christy-turlington +alt.fan.claire-danes +alt.fan.classic.movies +alt.fan.cliff.at.ihop +alt.fan.cock-sucking +alt.fan.coli2 +alt.fan.colleen.card.hot.hot.hot +alt.fan.conan-obrien +alt.fan.conwaysteckler +alt.fan.coondog +alt.fan.corey-feldman +alt.fan.courteney-cox +alt.fan.courtney-love +alt.fan.created-worlds +alt.fan.crispin-glover +alt.fan.cristian-redferne +alt.fan.cropcircles +alt.fan.culo.bjork +alt.fan.culo.lega +alt.fan.culo.max_adamo +alt.fan.cybill-shepherd +alt.fan.cybill.shepherd +alt.fan.cyndi-lauper +alt.fan.cypher +alt.fan.daeron +alt.fan.daisy-fuentes +alt.fan.dan-jimenez +alt.fan.dan-quayle +alt.fan.dan-scott +alt.fan.danica.mckellar +alt.fan.dank.strut +alt.fan.dankitti +alt.fan.danni-ashe +alt.fan.dannii-minogue +alt.fan.danny.gatton +alt.fan.daphnes-corner +alt.fan.dark_and_gloomy_persons +alt.fan.dave-foley +alt.fan.dave-taira +alt.fan.dave_barry +alt.fan.david-bowie +alt.fan.david-cassidy +alt.fan.david-duchovny +alt.fan.david-peel +alt.fan.david-reynolds.alien.vampire.flonk.flonk.flonk +alt.fan.david-reynolds.asswipe +alt.fan.david-reynolds.buttface +alt.fan.david-reynolds.fartknocker +alt.fan.david-reynolds.goatfucker +alt.fan.david-reynolds.wanker +alt.fan.david-starr +alt.fan.david.barker +alt.fan.david.duchovny +alt.fan.de-kast +alt.fan.dean-cain +alt.fan.dean-erickson +alt.fan.dean-stark +alt.fan.dean-stark.advice.legal +alt.fan.dean-stark.alcoholism +alt.fan.dean-stark.alt.peeves.ex-girlfriends +alt.fan.dean-stark.alt.support.migraines +alt.fan.dean-stark.alt.support.molestation +alt.fan.dean-stark.alt.tasteless.childhood +alt.fan.dean-stark.and.laura-lemay +alt.fan.dean-stark.apparatus +alt.fan.dean-stark.bed-wetting +alt.fan.dean-stark.broken.arm +alt.fan.dean-stark.brother.insane +alt.fan.dean-stark.brother.loves.cats +alt.fan.dean-stark.canceling +alt.fan.dean-stark.cant.own.gun +alt.fan.dean-stark.cant.play.piano.anymore +alt.fan.dean-stark.chips-ahoy +alt.fan.dean-stark.comp.lang.forth +alt.fan.dean-stark.conspiracy +alt.fan.dean-stark.cripple +alt.fan.dean-stark.cypher +alt.fan.dean-stark.death-threats +alt.fan.dean-stark.diaper-play +alt.fan.dean-stark.enclave +alt.fan.dean-stark.failed.photography.class +alt.fan.dean-stark.fast-typist +alt.fan.dean-stark.fired.from.novell +alt.fan.dean-stark.first.girlfriend +alt.fan.dean-stark.flying-saucer.hard-drives +alt.fan.dean-stark.garret +alt.fan.dean-stark.glock.owner.wanna-be +alt.fan.dean-stark.goths +alt.fan.dean-stark.hearing.voices +alt.fan.dean-stark.high-school.dropout +alt.fan.dean-stark.hourly-rate +alt.fan.dean-stark.insanity.is.hereditary +alt.fan.dean-stark.killfile.artist +alt.fan.dean-stark.kkk.member +alt.fan.dean-stark.laxative-abuse +alt.fan.dean-stark.lying +alt.fan.dean-stark.many.female.friends +alt.fan.dean-stark.mediocrity +alt.fan.dean-stark.memories +alt.fan.dean-stark.missing-kim +alt.fan.dean-stark.more-for-you +alt.fan.dean-stark.my-gang +alt.fan.dean-stark.nambla-member +alt.fan.dean-stark.no-dad.calling.in.sick +alt.fan.dean-stark.no-dad.do.mom.instead +alt.fan.dean-stark.no-dad.ouch.stop +alt.fan.dean-stark.no-dad.please.dont +alt.fan.dean-stark.no.dates.in.five.years +alt.fan.dean-stark.perpetual.victim +alt.fan.dean-stark.poor +alt.fan.dean-stark.professional.unemployed.writer +alt.fan.dean-stark.psychotic.little.wanker +alt.fan.dean-stark.punkchild +alt.fan.dean-stark.quality.assurance +alt.fan.dean-stark.ranting +alt.fan.dean-stark.ranting.endlessly +alt.fan.dean-stark.restraining.order +alt.fan.dean-stark.retromoderator +alt.fan.dean-stark.rmgroup-expert +alt.fan.dean-stark.scsi.not.ide +alt.fan.dean-stark.software.tester +alt.fan.dean-stark.spamming +alt.fan.dean-stark.stalk.stalk.stalk +alt.fan.dean-stark.stalking.victim +alt.fan.dean-stark.suitcase.of.pills +alt.fan.dean-stark.tech-writer.bad +alt.fan.dean-stark.vampyres +alt.fan.dean-stark.viscera +alt.fan.dean-stark.walking-papers +alt.fan.dean-stark.wheezing.chevy +alt.fan.dean-stark.white.cockade.reject +alt.fan.dean-stark.worth.his.salt +alt.fan.dean-stark.writing +alt.fan.dean-stark.writing.poorly +alt.fan.debbie.gibson +alt.fan.debi-diamond +alt.fan.debi.diamond +alt.fan.dejanews +alt.fan.demon-local.sig-wars +alt.fan.den-van.outen +alt.fan.denise-richards +alt.fan.dennis-miller +alt.fan.depeche-mode +alt.fan.devo +alt.fan.diane-witt.hair.hair.hair +alt.fan.dice-man +alt.fan.digi +alt.fan.dima +alt.fan.dimitri-vulis +alt.fan.dirk-hine +alt.fan.dirk-pitt +alt.fan.dirty-whores +alt.fan.disguising.godiva +alt.fan.disney.afternoon +alt.fan.disney.gargoyles +alt.fan.dmitri-vulis +alt.fan.doc-savage +alt.fan.doc-thompson +alt.fan.doctor.bashir.grind.thrust.drool +alt.fan.dominique +alt.fan.don-cherry +alt.fan.don-imus +alt.fan.don-n-mike +alt.fan.don.baker-fupa +alt.fan.don.no-soul.simmons +alt.fan.donnas-nipples +alt.fan.doofer-mouse +alt.fan.dopefish +alt.fan.douglas-adams +alt.fan.douglas-adams.forty-two +alt.fan.dpk +alt.fan.dr-pepper +alt.fan.dragonball +alt.fan.dragonlance +alt.fan.dragons +alt.fan.drew-barrymore +alt.fan.drew-carey +alt.fan.drmellow +alt.fan.dudikoff +alt.fan.dune +alt.fan.dunkahn +alt.fan.e-t-b +alt.fan.earl-curley +alt.fan.echo-johnson +alt.fan.ed-conrad +alt.fan.eddie-izzard +alt.fan.eddings +alt.fan.eddings.creative +alt.fan.edge102 +alt.fan.edward-furlong +alt.fan.edward.furlong +alt.fan.elite +alt.fan.elite.project +alt.fan.elton-john +alt.fan.elvis-costello +alt.fan.elvis-presley +alt.fan.emma-bunton +alt.fan.enya +alt.fan.eric-cantona +alt.fan.erik.max.francis.is.mc2 +alt.fan.errol-flynn +alt.fan.eva-habermann +alt.fan.eva-ionesco.moderated +alt.fan.exotic-weapons +alt.fan.fabienne +alt.fan.fairuza-balk +alt.fan.felix-p-thomas +alt.fan.fica +alt.fan.finnish.booty.shakers +alt.fan.fiona-apple +alt.fan.flat-eric +alt.fan.flintstone.fred +alt.fan.foobar +alt.fan.frank-dimant +alt.fan.frank-zappa +alt.fan.frank-zappa-digital-traders +alt.fan.frank-zappa-fans-are-assholes +alt.fan.frank-zappa-fans-are-losers +alt.fan.frank-zappa-tape-trading +alt.fan.fransbauer +alt.fan.fratellibros +alt.fan.fred-perry +alt.fan.fugs +alt.fan.funky.buttlovin +alt.fan.furry +alt.fan.furry.bleachers +alt.fan.furry.fleas +alt.fan.furry.muck +alt.fan.furry.politics +alt.fan.furry.sny-windstrup +alt.fan.g-gordon-liddy +alt.fan.gabbi-glickman +alt.fan.gary.johnson.control-freak +alt.fan.gary.spell +alt.fan.gburnore +alt.fan.geezer-seeger +alt.fan.gene-scott +alt.fan.geoff.miller +alt.fan.george-clooney +alt.fan.george-kennedy +alt.fan.george-maharis +alt.fan.george-michael +alt.fan.geri-halliwell +alt.fan.gill-anderson +alt.fan.ginger-lynn +alt.fan.gloriamundi +alt.fan.goat +alt.fan.godzilla +alt.fan.goons +alt.fan.grady-ward +alt.fan.graveyard +alt.fan.greaseman +alt.fan.greg-kinnear +alt.fan.greg_gardner +alt.fan.gregorsamsa +alt.fan.guusje +alt.fan.gwyn-paltrow +alt.fan.habanec +alt.fan.hall-and-oates +alt.fan.hannigan +alt.fan.hanson +alt.fan.hanson.die.die.die +alt.fan.harlan-ellison +alt.fan.harrison-ford +alt.fan.hawaii-five-o +alt.fan.haye-lau +alt.fan.head-librarian +alt.fan.hedgehog +alt.fan.heinlein +alt.fan.helen-hunt +alt.fan.hello-kitty +alt.fan.heman-shera +alt.fan.henry-rollins +alt.fan.hofstadter +alt.fan.holmes +alt.fan.howard-stern +alt.fan.howard-stern.fartman +alt.fan.howard-stern.humor.suffering +alt.fan.howard-stern.jew.jew.jew +alt.fan.howard-stern.kip-kinkel.lovetoy +alt.fan.howard-stern.subtle-racism +alt.fan.hudson-leick +alt.fan.hydrocodone +alt.fan.icky-shuffle +alt.fan.il.maestro.re.del.bakkaglio +alt.fan.isla-fisher +alt.fan.italian.anime.dragonball +alt.fan.ivan +alt.fan.ivor-cutler +alt.fan.jackie-jokeman +alt.fan.jai-maharaj +alt.fan.james-bond +alt.fan.james-koput.net-god +alt.fan.james-rothaar +alt.fan.janet-jackson +alt.fan.janis +alt.fan.jason-currell +alt.fan.jason-miller +alt.fan.jason.black +alt.fan.jay-denebeim +alt.fan.jay-leno +alt.fan.jayne-middlemiss +alt.fan.jean-auel +alt.fan.jean_auel +alt.fan.jeff-goldblum +alt.fan.jeff-workman +alt.fan.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt +alt.fan.jello-biafra +alt.fan.jen-aniston +alt.fan.jennicam +alt.fan.jennifer-love-hewitt +alt.fan.jenny-mccarthy +alt.fan.jeremy-reimer +alt.fan.jeri-ryan +alt.fan.jerkcity +alt.fan.jerky-boys +alt.fan.jerry-springer +alt.fan.jesse.ventura +alt.fan.jesse.ventura.gov +alt.fan.jessica-alba +alt.fan.jesus-christ +alt.fan.jewel +alt.fan.jim-carrey +alt.fan.jim-dove +alt.fan.jim-rome +alt.fan.jim-rose +alt.fan.jim.dove +alt.fan.jimi-hendrix +alt.fan.jimmy-buffett +alt.fan.jmjarre +alt.fan.joe-crummey +alt.fan.joe-crummy +alt.fan.joe-satriani +alt.fan.joel-furr +alt.fan.john-cusack +alt.fan.john-d +alt.fan.john-denver +alt.fan.john-engler.kick-fiegers-ass +alt.fan.john-gary +alt.fan.john-norquist +alt.fan.john-travolta +alt.fan.john-turmel +alt.fan.john-winston +alt.fan.john.mackey +alt.fan.johnny-winter +alt.fan.josef-mengele +alt.fan.joseph-holl +alt.fan.joshua-kramer +alt.fan.jph +alt.fan.juli-ashton +alt.fan.julia-hayes +alt.fan.julian.macassey +alt.fan.julius +alt.fan.karl-malden.cypher +alt.fan.karl-malden.kidneys +alt.fan.karl-malden.nose +alt.fan.karla-homolka +alt.fan.kate-moss +alt.fan.kate-winslet +alt.fan.katerena.eiermann +alt.fan.kathy-jo +alt.fan.katie-holmes +alt.fan.katie-holmes.binaries +alt.fan.kay-dekker +alt.fan.kd-lang +alt.fan.keanu-reeves +alt.fan.keanu-reeves.moderated +alt.fan.keatonfox +alt.fan.kellie-martin +alt.fan.kerri-kendall +alt.fan.kia-mennie +alt.fan.kid-rock +alt.fan.kieran-snyder +alt.fan.kim-bach.cheater +alt.fan.kim-bach.depraved +alt.fan.kim-bach.forger +alt.fan.kim-bach.slut.slut.slut +alt.fan.kinks +alt.fan.kipland-kinkel +alt.fan.kipland-kinkel.shootist +alt.fan.kirin-landsgaard +alt.fan.kirsten-dunst +alt.fan.kournikova +alt.fan.kristiina.johansson +alt.fan.kroq +alt.fan.kubrick +alt.fan.kurt-busiek +alt.fan.la-femme.nikita +alt.fan.la-radio +alt.fan.labin +alt.fan.labu +alt.fan.lacey-chabert +alt.fan.lakshmi +alt.fan.landmark +alt.fan.landrover +alt.fan.lara-croft +alt.fan.larisa-oleynik +alt.fan.laura-hall +alt.fan.laura-harris +alt.fan.laura-love +alt.fan.laurie.anderson +alt.fan.lava.lamps +alt.fan.lea-thompson +alt.fan.lemurs +alt.fan.leo-dicaprio +alt.fan.leonardo-serni +alt.fan.letterman +alt.fan.letterman.top-ten +alt.fan.linda-hamilton +alt.fan.lion-king +alt.fan.lisa-boyle +alt.fan.lisa-kudrow +alt.fan.liv-tyler +alt.fan.liz-phair +alt.fan.louise +alt.fan.loveline +alt.fan.ltte +alt.fan.lyle-gardiner +alt.fan.mac-wisler +alt.fan.machnhead +alt.fan.macross +alt.fan.madonna +alt.fan.madredeus +alt.fan.major.kira.pant.pant.pant +alt.fan.mandy-patinkin +alt.fan.manfredmann +alt.fan.marcia-clark +alt.fan.marco-ditri +alt.fan.marieke +alt.fan.marijane-blaine +alt.fan.mark-brian +alt.fan.mark-falzmann +alt.fan.mark-harrison +alt.fan.martin-amis +alt.fan.martin-donovan +alt.fan.marv-albert +alt.fan.marys-danish +alt.fan.matchbox20 +alt.fan.mduell +alt.fan.meg-ryan +alt.fan.megahal +alt.fan.mel-brooks +alt.fan.melanie-brown +alt.fan.melinda.messenger +alt.fan.melissa-j-hart +alt.fan.metal +alt.fan.metal.burzum +alt.fan.metal.demilich +alt.fan.metal.graveland +alt.fan.metal.monstrosity +alt.fan.metal.suffocation +alt.fan.mich-pfeiffer +alt.fan.michael-ball +alt.fan.michael-biehn +alt.fan.michael-bolton +alt.fan.michael-ohannon +alt.fan.michaela.strachan +alt.fan.mike-bullard +alt.fan.mike-jittlov +alt.fan.mike-myers +alt.fan.mike.dumas-is-an-asshole +alt.fan.milla-jovovich +alt.fan.mira-furlan +alt.fan.miss-manners +alt.fan.mk-flynn +alt.fan.moesart2000 +alt.fan.mogul +alt.fan.momus +alt.fan.monica-potter +alt.fan.monkeylove +alt.fan.monty-python +alt.fan.morganna.queen.of.the.damned +alt.fan.mothers-of-invention +alt.fan.movie.willy-wonka +alt.fan.moxy.fruvous +alt.fan.mozilla +alt.fan.mr-biffo +alt.fan.mr-kabc +alt.fan.mr-kfi +alt.fan.mr.tribe +alt.fan.mrclean +alt.fan.mst3k +alt.fan.muchmusic +alt.fan.muchmusic.bill-welychka +alt.fan.mugabe +alt.fan.naked-guy +alt.fan.nance +alt.fan.natalie-portman +alt.fan.natalieportman.binaries +alt.fan.nathan.brazil +alt.fan.neil-gaiman +alt.fan.neve +alt.fan.news-admins +alt.fan.newt-gingrich +alt.fan.nick-humphrey +alt.fan.nick-mooney +alt.fan.nicki-lewis +alt.fan.nicole-kidman +alt.fan.nietzsche +alt.fan.niina.reiju +alt.fan.nike +alt.fan.nikita-borisov +alt.fan.nina-hagen +alt.fan.ninja-turtles +alt.fan.no-doubt +alt.fan.noah-wyle +alt.fan.noam-chomsky +alt.fan.noodles +alt.fan.norm-macdonald +alt.fan.nutella +alt.fan.oingo-boingo +alt.fan.oj-simpson +alt.fan.oj-simpson.and.cypher +alt.fan.ok-soda +alt.fan.okies +alt.fan.oksana-bayul.small-tits +alt.fan.oksana.bayul +alt.fan.oliver1 +alt.fan.olsen-twins +alt.fan.oppy.music +alt.fan.orbitz +alt.fan.oskana-bayul.small-tits +alt.fan.pallindromes.racecar.semordnillap.naf.tla +alt.fan.pam-anderson +alt.fan.pamwatch +alt.fan.papa +alt.fan.pat-richardson +alt.fan.pat-robertson +alt.fan.patricia +alt.fan.patrick-oonk +alt.fan.patty-smyth +alt.fan.patty.smyth +alt.fan.paul-clapman +alt.fan.paul-crissy +alt.fan.paul.bradley +alt.fan.paula-abdul +alt.fan.pauline.hanson +alt.fan.pegas +alt.fan.penn-n-teller +alt.fan.penny-hardaway +alt.fan.pere-ubu +alt.fan.pern +alt.fan.perry-rhodan +alt.fan.peter-david +alt.fan.peter-hammill +alt.fan.petra-verkaik +alt.fan.phiberoptik +alt.fan.phil-cox +alt.fan.philip-dick +alt.fan.philippa.forrester +alt.fan.phoebe-cates +alt.fan.pierce-brosnan +alt.fan.piers +alt.fan.piers-anthony +alt.fan.piglow +alt.fan.pikachu +alt.fan.pingu.marp.marp +alt.fan.pirotti.prospero +alt.fan.pirotti.prospero.net-abuse +alt.fan.pizza.frankj.frankj.frankj +alt.fan.pj-orourke +alt.fan.plushies +alt.fan.pooh +alt.fan.porkwoman +alt.fan.pornstar.darrian +alt.fan.pornstar.janine +alt.fan.pornstar.shane +alt.fan.power-rangers +alt.fan.pratchett +alt.fan.pratchett.announce +alt.fan.pratchett.bofh +alt.fan.pratchett.old-farts +alt.fan.prettyboy +alt.fan.princess-diana +alt.fan.prozac +alt.fan.pst +alt.fan.publius +alt.fan.punti.fa.il.servizio.civile +alt.fan.punti.ha.deciso.di.disertare +alt.fan.q +alt.fan.r-takahashi +alt.fan.rachael-l-cook +alt.fan.rachel-perkins.bah.bah.bah +alt.fan.ram-samudrala +alt.fan.randy_pepe +alt.fan.raquel-welch +alt.fan.ray-cobb +alt.fan.ray-taliaferro +alt.fan.rdm +alt.fan.really-big-button +alt.fan.red.green +alt.fan.regular-guys +alt.fan.ren-and-stimpy +alt.fan.renee-oconnor +alt.fan.ricci.christina +alt.fan.rich-conaty +alt.fan.richard-hoaxland +alt.fan.richard-nixon +alt.fan.richard-silver +alt.fan.ricky-martin +alt.fan.ritchie-valens +alt.fan.rmimulvex +alt.fan.roadrunner +alt.fan.rob-bartlett +alt.fan.robert-beltran +alt.fan.robert-cray +alt.fan.robert-ghostwolf +alt.fan.robert-jordan +alt.fan.robert-tilton +alt.fan.robert.franzone +alt.fan.robert.ghostwolf +alt.fan.roberta.hatch +alt.fan.robin-williams +alt.fan.robotech +alt.fan.rockpalast +alt.fan.ronald-reagan +alt.fan.rosalina +alt.fan.rosieodonnell +alt.fan.rosy-bindi +alt.fan.rowan-atkinson +alt.fan.roya +alt.fan.rspwwcw +alt.fan.rudy-perpich +alt.fan.rumpole +alt.fan.rush-limbaugh +alt.fan.rush-limbaugh.tv-show +alt.fan.russ-hamner +alt.fan.sabrina-lloyd +alt.fan.sacramento.music +alt.fan.sade +alt.fan.sailor-moon +alt.fan.sallymae.hogsby +alt.fan.salmonella +alt.fan.sam-raimi +alt.fan.samantha-fox +alt.fan.samanthamathis +alt.fan.sana-chan +alt.fan.sandra-bullock +alt.fan.sandra-bullock.binaries +alt.fan.sandy-duncan.eye-on-rmt +alt.fan.sara.di-scienze-politiche +alt.fan.sarah-m-gellar +alt.fan.satan +alt.fan.schlanger.sports-monster +alt.fan.schwarzenegger +alt.fan.scream +alt.fan.sean-obrien +alt.fan.secret.org +alt.fan.sexy-wings +alt.fan.shania-twain +alt.fan.shannen-doherty +alt.fan.shirley-manson +alt.fan.shortland-street +alt.fan.shostakovich +alt.fan.sifl-olly +alt.fan.silly-pillows +alt.fan.simon-nash +alt.fan.sister-pooh +alt.fan.skidmore.catherine +alt.fan.skinny +alt.fan.snopes +alt.fan.sodomy +alt.fan.sodomy.christian +alt.fan.sodomy.uncontrollable +alt.fan.soft-targets +alt.fan.soledad-obrien +alt.fan.sonic-hedgehog +alt.fan.sophie-marceau +alt.fan.southpark.chef +alt.fan.southpark.kenny.die.die.die +alt.fan.space-ghost +alt.fan.space-ghost.binaries +alt.fan.spalding-gray +alt.fan.spanky_the_verbose +alt.fan.speedbump +alt.fan.spencer-soloway +alt.fan.spinal-tap +alt.fan.spinnwebe +alt.fan.stamp.collecting +alt.fan.stanley-matthews +alt.fan.starwars +alt.fan.static +alt.fan.steffi-graf +alt.fan.steve-winter +alt.fan.steve.ward.gr8roc.records.desperate.loser +alt.fan.steven.algieri +alt.fan.sting +alt.fan.stonage +alt.fan.stonecutters +alt.fan.stretchpants +alt.fan.strokrace +alt.fan.stuttering-john +alt.fan.suckdotcom +alt.fan.sung-hi-lee +alt.fan.surak +alt.fan.susan-golding +alt.fan.susan-thunder +alt.fan.taneli.suikkanen +alt.fan.tank-girl +alt.fan.tanya-mur +alt.fan.tarantino +alt.fan.tazerfish +alt.fan.tea-leoni +alt.fan.ted-neeley +alt.fan.teen.idols +alt.fan.teen.idols.princewilliam +alt.fan.teen.starlets +alt.fan.televisionx.linda-leigh +alt.fan.televisionx.lynda-leigh +alt.fan.teresa-may +alt.fan.terhi.rama +alt.fan.teri-weigel +alt.fan.terri.disisto +alt.fan.terry-venables +alt.fan.the-bob +alt.fan.the-crow +alt.fan.the.legend.of.oliver1.the.mad.newsgrouper +alt.fan.thebigshow +alt.fan.thedavid +alt.fan.theo-fokkema +alt.fan.thewurm +alt.fan.thomas-pynchon +alt.fan.thorntonwilder +alt.fan.thundercats +alt.fan.thursday +alt.fan.tibo +alt.fan.tiffany-smith +alt.fan.tigger +alt.fan.tim-sutter +alt.fan.tito +alt.fan.toby-smith +alt.fan.toiya-prather +alt.fan.tolkien +alt.fan.tom-clancy +alt.fan.tom-leykis +alt.fan.tom-robbins +alt.fan.tom-snyder +alt.fan.tonester +alt.fan.tonya-harding.whack.whack.whack +alt.fan.tori-amos +alt.fan.torok.urine-soaked-rags +alt.fan.traci-lords +alt.fan.tractors +alt.fan.travis-mcgee +alt.fan.trenchcoat-mafia +alt.fan.trinity-loren +alt.fan.tupac.dead.dead.dead +alt.fan.turboslug +alt.fan.twister +alt.fan.u.pornpig.ass +alt.fan.u2 +alt.fan.unabomber +alt.fan.unigrouper +alt.fan.usandwilbur +alt.fan.val-kilmer +alt.fan.van-damme +alt.fan.vanessa-paradis +alt.fan.velocity.girl +alt.fan.veronika-moser +alt.fan.vesa.ahonen +alt.fan.vic-reeves +alt.fan.victoria-adams +alt.fan.victoria-paris +alt.fan.villetti.maiuscolo +alt.fan.vind +alt.fan.vittoriosgarbi +alt.fan.voltron +alt.fan.vore +alt.fan.wacky.crackheads +alt.fan.walter-cronkite.nose +alt.fan.warlord +alt.fan.webgod +alt.fan.wedge +alt.fan.wednesday +alt.fan.wesley-willis +alt.fan.whitevampire +alt.fan.wil-wheaton +alt.fan.will-smith +alt.fan.william-burroughs +alt.fan.wim.stoltenberg +alt.fan.winona-ryder +alt.fan.wodehouse +alt.fan.women.australian +alt.fan.woody-allen +alt.fan.xlock-rotor +alt.fan.yardbirds +alt.fan.yasmine-bleeth +alt.fan.yati +alt.fan.young.celebrities.retromod +alt.fan.zathras +alt.fan.zelong +alt.fan.zerodragon +alt.fan.zmienna.wiadomokto +alt.fan.zoe-ball +alt.fan.zoogz-rift +alt.fan.zoogz-rift-fans-are-assholes +alt.fan.zsazsa +alt.fan.zygotes +alt.fandom.cons +alt.fandom.misc +alt.fans.chat2 +alt.fans.danhoffman +alt.fans.kant.navel-gazing +alt.fans.maw +alt.fans.tim_skirvin.die.die.die +alt.fans.uiuc.spank.spank.spank +alt.fantasy +alt.fantasy.conan +alt.fantasy.er-burroughs +alt.fashion +alt.fashion.corsetry +alt.fashion.craig-oldfield.cheap-suit +alt.fashion.crossdressing +alt.fashion.crossdressing.jay-denebeim +alt.fashion.men +alt.fashion.petite +alt.fax +alt.faxmail.com +alt.february +alt.feedme +alt.feminazis +alt.feminism +alt.feminism.individualism +alt.fenphen +alt.fetish.beatrix-potter +alt.fetish.long-nails.male +alt.fetish.tongue +alt.feudalism +alt.fff.fff +alt.fiction.interactive +alt.fiction.original +alt.fiesta-bowl.irish +alt.fifty-plus.friends +alt.fiftyplus +alt.filesystems.afs +alt.film-festivals +alt.film-festivals.sundance +alt.filtration.dust +alt.final.conflict +alt.final.test.i.promise +alt.final.test.i.promise2 +alt.find.a.friend.for.aaron.welch +alt.firefighters +alt.firefighters.binaries +alt.firefighters.mike-austin +alt.fishing +alt.fishing.catfish +alt.fishing.minnesota +alt.fitness.marketplace +alt.flaagg.sucks.sucks.sucks +alt.flame +alt.flame.abcdi +alt.flame.abortion +alt.flame.airlines +alt.flame.baja-rat +alt.flame.bannerservices +alt.flame.bass-laffer +alt.flame.bertrand-meyer +alt.flame.bon-giovanni +alt.flame.chinese +alt.flame.cincinnati +alt.flame.david-beckham.thick.english.football.player +alt.flame.dean-stark +alt.flame.det-redwings +alt.flame.dr-tom.4d.vamps.acid +alt.flame.dykes +alt.flame.feminazis +alt.flame.football.notre-dame +alt.flame.frogs +alt.flame.fwli +alt.flame.girlfriend +alt.flame.graham-newsham +alt.flame.gypsies +alt.flame.hammer +alt.flame.hispanics +alt.flame.ic +alt.flame.icanect.net +alt.flame.inner-circle +alt.flame.james-koput +alt.flame.james.ngygook +alt.flame.james.tiberius.kirk +alt.flame.jay-stevens +alt.flame.jesus.christ +alt.flame.jews +alt.flame.kevin-keegan +alt.flame.macintosh +alt.flame.macintosh.flame.todd +alt.flame.michael-hirtes +alt.flame.monica-lewinsky +alt.flame.nerds.jn +alt.flame.net-abuse +alt.flame.net.illiterates +alt.flame.nice-people +alt.flame.nick-mooney +alt.flame.niggers +alt.flame.pakis +alt.flame.pizza +alt.flame.preps +alt.flame.psychiatry +alt.flame.rush-limbaugh +alt.flame.serbs +alt.flame.spanks +alt.flame.spelling +alt.flame.spice-girls +alt.flame.sports-suck.moderated +alt.flame.suburbanazis +alt.flame.tcs.die.die.die +alt.flame.tim-law +alt.flame.tripp.snitch.snitch.snitch +alt.flame.tsr +alt.flame.unigrouper +alt.flame.uunet +alt.flame.wankadia +alt.flame.whites +alt.flamenet +alt.flamenet.lame.lame.lame +alt.flarf.fnord +alt.flarf.parp +alt.flarf.rulez.the.net +alt.flashback +alt.flute +alt.flyfishing +alt.flying.cows +alt.folklore.college +alt.folklore.computer +alt.folklore.computers +alt.folklore.gemstones +alt.folklore.ghost-stories +alt.folklore.ghost-stories.binaries +alt.folklore.herbs +alt.folklore.info +alt.folklore.internet +alt.folklore.military +alt.folklore.music +alt.folklore.peter-dubuque +alt.folklore.science +alt.folklore.suburban +alt.folklore.urban +alt.foo +alt.foo.bar +alt.foo.bar.qux.xyzxyz +alt.food +alt.food.asian +alt.food.barbecue +alt.food.burgerchef +alt.food.bw3 +alt.food.chocolate +alt.food.cocacola +alt.food.coffee +alt.food.dennys +alt.food.diabetic +alt.food.fast-food +alt.food.fat-free +alt.food.grits +alt.food.hamburger +alt.food.ice-cream +alt.food.low-fat +alt.food.lutefisk +alt.food.mcdonalds +alt.food.mentos +alt.food.olestra +alt.food.olives-or-olive-oil +alt.food.pancakes +alt.food.peeps +alt.food.pez +alt.food.professionals +alt.food.red-lobster +alt.food.safety +alt.food.sushi +alt.food.taco-bell +alt.food.vegan +alt.food.waffle-house +alt.food.wine +alt.foodl.authentic-only +alt.fool.aaron-welch +alt.foot.fat-free +alt.ford.falcon +alt.foreplay +alt.forestry +alt.forsale +alt.forsale.children +alt.forsale.grandjunction +alt.forsale.nutrition +alt.forsale.spam +alt.fozzybear.wokka.wokka.wokka +alt.fractal-design.painter +alt.fractals +alt.fractals.pictures +alt.france +alt.franco.sexe.rencontre +alt.francosexe.pictures +alt.francosexe.rencontre +alt.frank.magazine +alt.frank.sanders.is.a.woman.beater +alt.frankv +alt.fraternity.sorority +alt.freaks +alt.free.newsservers +alt.free.party-lines +alt.freedom +alt.freedom.jbpe +alt.freedom.jbpe.d +alt.freedom.jbpe.gam +alt.freedom.jbpe.i-colla +alt.freedom.jbpe.sm +alt.freedom.jbpel +alt.freedom.jbpel-s +alt.freedom.of.information.act +alt.freedom.telephone-club +alt.freedomain.discuss +alt.freedomain.registry +alt.freemasonry +alt.freenet +alt.freespeech +alt.freewebhosting +alt.freewebhosting.support +alt.fresh.steamy.dog-turds.jay-denebeim +alt.friday +alt.friend.emoji +alt.frisco +alt.ftpsearch.com +alt.fuck +alt.fuck.imran.up.the.ass.with.a.chainsaw +alt.fuck.jay-denebeim.up.the.ass.with.a.chainsaw +alt.fuck.jay.t.carrigan.stamps +alt.fuck.menjy.in.the.ass +alt.fuck.niggers +alt.fuck.racists +alt.fuck.the.skull.of.alan.bstard +alt.fuck.you.jay-denebeim +alt.fuckhead.guy-polis.thinks.everyone.is.dmitri-vulis +alt.fuckhead.mao-tse-tung +alt.fuckin.rowin.mate +alt.fukengruven +alt.fun-pizza.frankj.frankj.frankj +alt.fun.with.luc +alt.funk-you +alt.funnytown +alt.furniture.mid-century-modern +alt.furniture.moroccan +alt.future.millennium +alt.fysh +alt.galactic-guide +alt.galactically.pointless +alt.gambling +alt.gamepoint +alt.games +alt.games.3dfx +alt.games.3dfx.brother +alt.games.adnd +alt.games.air-warrior +alt.games.apba +alt.games.apogee +alt.games.aquazone +alt.games.asherons-call +alt.games.atari +alt.games.atr +alt.games.atr.rpg +alt.games.axisandallies +alt.games.baldurs-gate +alt.games.basketball.pro.fantasy.topofthekey +alt.games.battlezone +alt.games.bc3000ad +alt.games.bladerunner +alt.games.blood +alt.games.builder.dcgames +alt.games.carmageddon +alt.games.castlevania +alt.games.champ-man +alt.games.cheats +alt.games.civ-call-to-power +alt.games.civ2 +alt.games.civnet +alt.games.clanlord +alt.games.classic-crpgs +alt.games.command-n-conq +alt.games.command-n-conq.red-alert +alt.games.command.and.conquer +alt.games.commandos +alt.games.cosmic-wimpout +alt.games.creatures +alt.games.creatures.moderated +alt.games.creekys-cafe +alt.games.daggerfall +alt.games.dark-colony +alt.games.dark-forces +alt.games.dark-reign +alt.games.dean-stark +alt.games.delta-force +alt.games.descent +alt.games.descent.flame +alt.games.diablo +alt.games.dice +alt.games.doom +alt.games.doom.announce +alt.games.doom.ii +alt.games.doom.newplayers +alt.games.down-economy +alt.games.draughts +alt.games.duke3d +alt.games.duke3d.binaries +alt.games.duke3d.editing +alt.games.dune-2000 +alt.games.dune-ii.virgin-games +alt.games.dungeon-keeper +alt.games.dungeon.keeper +alt.games.dur-trs-trap +alt.games.dust +alt.games.ea.bullfrog +alt.games.ea.bullfrog.dungeon-keeper +alt.games.ea.bullfrog.gene-wars +alt.games.ea.bullfrog.high-octane +alt.games.ea.bullfrog.magic-carpet +alt.games.ea.bullfrog.populous +alt.games.ea.bullfrog.syndicate-wars +alt.games.ea.bullfrog.theme-hospital +alt.games.ea.bullfrog.theme-park +alt.games.ea.ea-studio.strike-series +alt.games.ea.janes.688i +alt.games.ea.janes.fighter-anth +alt.games.ea.janes.longbow +alt.games.ea.maxis +alt.games.ea.maxis.full-tilt +alt.games.ea.maxis.marble-drop +alt.games.ea.maxis.sim-ant +alt.games.ea.maxis.sim-city +alt.games.ea.maxis.sim-earth +alt.games.ea.maxis.sim-farm +alt.games.ea.maxis.sim-golf +alt.games.ea.maxis.sim-isle +alt.games.ea.maxis.sim-life +alt.games.ea.maxis.sim-park +alt.games.ea.maxis.sim-safari +alt.games.ea.maxis.sim-tower +alt.games.ea.maxis.sim-town +alt.games.ea.origin +alt.games.ea.origin.abuse +alt.games.ea.origin.bioforge +alt.games.ea.origin.crusader +alt.games.ea.origin.cybermage +alt.games.ea.origin.privateer +alt.games.ea.origin.shadowcaster +alt.games.ea.origin.strike-command +alt.games.ea.origin.system-shock +alt.games.ea.origin.ultima +alt.games.ea.origin.wing-commander +alt.games.ea.origin.wings-of-glory +alt.games.ea.square-ea +alt.games.ea.square-ea.brave-fencer +alt.games.ea.square-ea.bushido-blade +alt.games.ea.square-ea.final-fantasy +alt.games.ea.square-ea.parasite-eve +alt.games.ea.square-ea.xenogears +alt.games.ea.westwood +alt.games.ea.westwood.blade-runner +alt.games.ea.westwood.command-n-conq +alt.games.ea.westwood.dune +alt.games.ea.westwood.games-ppl-play +alt.games.ea.westwood.kyrandia +alt.games.ea.westwood.lands-of-lore +alt.games.ea.westwood.monopoly +alt.games.ea.westwood.tiberian-sun +alt.games.eamon +alt.games.earth2025 +alt.games.elder-scrolls +alt.games.empire-deluxe +alt.games.enix +alt.games.everquest +alt.games.fallout +alt.games.final-fantasy +alt.games.final-fantasy.aggta +alt.games.final-fantasy.cypher +alt.games.final-fantasy.edwynsvoice +alt.games.final-fantasy.fiction +alt.games.final-fantasy.hentai +alt.games.final-fantasy.meow +alt.games.final-fantasy.moderated +alt.games.final-fantasy.music +alt.games.final-fantasy.rpg +alt.games.final-fantasy.tech-support +alt.games.firaxis.alpha-centauri +alt.games.firaxis.gettysburg +alt.games.forsaken +alt.games.fps-football +alt.games.freeciv +alt.games.frp.dnd-util +alt.games.frp.gammaworld +alt.games.frp.live-action +alt.games.frp.verge +alt.games.galileo +alt.games.gangsters +alt.games.gazillionaire +alt.games.gb +alt.games.glider-pro +alt.games.half-life +alt.games.half-life.editing +alt.games.haven +alt.games.heavy-gear +alt.games.heretic +alt.games.hexen +alt.games.homm +alt.games.ideas +alt.games.illuminati +alt.games.interplay +alt.games.interplay.freespace +alt.games.irps +alt.games.jagged-alliance +alt.games.jedi-knight +alt.games.kali +alt.games.kesmai-legends +alt.games.ki +alt.games.lands-of-lore +alt.games.lynx +alt.games.mame +alt.games.marathon +alt.games.mdestiny +alt.games.mechcommander +alt.games.mechwarrior2 +alt.games.metal-knights +alt.games.microprose +alt.games.microprose.1942 +alt.games.microprose.7th-legion +alt.games.microprose.addict-pinball +alt.games.microprose.breakthru +alt.games.microprose.cheat-codes +alt.games.microprose.civilization +alt.games.microprose.colonization +alt.games.microprose.dark-earth +alt.games.microprose.european-air +alt.games.microprose.falcon +alt.games.microprose.final-unity +alt.games.microprose.fleet-defender +alt.games.microprose.generations +alt.games.microprose.grand-prix +alt.games.microprose.gunship +alt.games.microprose.klingon-honor +alt.games.microprose.knight-moves +alt.games.microprose.m1-tank +alt.games.microprose.master-magic +alt.games.microprose.master-orion +alt.games.microprose.mech-commander +alt.games.microprose.old +alt.games.microprose.pirates-gold +alt.games.microprose.playstation +alt.games.microprose.qwirks +alt.games.microprose.railroad-tyc +alt.games.microprose.tetris +alt.games.microprose.the-gathering +alt.games.microprose.top-gun +alt.games.microprose.transport-tyc +alt.games.microprose.ultimate-race +alt.games.microprose.websites +alt.games.microprose.worms +alt.games.microprose.x-com +alt.games.microsift +alt.games.microsoft +alt.games.microsoft.age-of-empires +alt.games.microsoft.age-of-kings +alt.games.microsoft.ants +alt.games.microsoft.arcade +alt.games.microsoft.barney +alt.games.microsoft.baseball-3d +alt.games.microsoft.bridge-too-far +alt.games.microsoft.cart-racing +alt.games.microsoft.chaos-island +alt.games.microsoft.cheat-codes +alt.games.microsoft.close-combat +alt.games.microsoft.dilbert +alt.games.microsoft.fighter-ace +alt.games.microsoft.flight-sim +alt.games.microsoft.flight-sim.efis98 +alt.games.microsoft.golf +alt.games.microsoft.input-devices +alt.games.microsoft.macintosh +alt.games.microsoft.monster-truck +alt.games.microsoft.motocross-mad +alt.games.microsoft.neverhood +alt.games.microsoft.old +alt.games.microsoft.pinball-arcade +alt.games.microsoft.rise-of-rome +alt.games.microsoft.tanarus +alt.games.microsoft.urban-assault +alt.games.microsoft.websites +alt.games.microsoft.windows-ce +alt.games.microsoft.zone +alt.games.mk +alt.games.mk.mk3 +alt.games.moo2 +alt.games.mordor +alt.games.mornington.crescent +alt.games.mornington.cresent +alt.games.mtrek +alt.games.mule +alt.games.myst +alt.games.myth +alt.games.n64 +alt.games.need-for-speed +alt.games.netrek.paradise +alt.games.nettvshows.gamasutratv +alt.games.nettvshows.game.time.prime.time +alt.games.nettvshows.gametime +alt.games.nettvshows.inside.the.pgl +alt.games.nettvshows.newsexpress +alt.games.nettvshows.quakecast +alt.games.nintendo.pokemon +alt.games.nintendo.pokemon.hentai +alt.games.omega +alt.games.outlaws +alt.games.petz +alt.games.phantasy-star +alt.games.ping-pong +alt.games.play-by-mail.quest +alt.games.pokemon +alt.games.powervr +alt.games.quake2 +alt.games.quake2.nl +alt.games.quake3 +alt.games.rac-rally +alt.games.rctycoon +alt.games.redalert +alt.games.redbaron +alt.games.resident-evil +alt.games.riddler +alt.games.riven +alt.games.rpg.ix +alt.games.rpg.live-action.high-fantasy +alt.games.rpg.quadrant +alt.games.rpg.startrek.quadrant +alt.games.sensi-soccer +alt.games.sf2 +alt.games.shadow-warrior +alt.games.shared-reality.fed-frontier +alt.games.shared-world.nexus +alt.games.shogo-mad +alt.games.sierra.therealm +alt.games.simcity +alt.games.simcity.2000 +alt.games.simcity.3000 +alt.games.soccer +alt.games.sony.yaroze +alt.games.spiritwars +alt.games.starcraft +alt.games.starshield +alt.games.starsiege.tribes +alt.games.startrek.ssg +alt.games.stellar-civ +alt.games.stunt-island +alt.games.subspace +alt.games.ta-kingdoms +alt.games.tanarus +alt.games.tetrinet +alt.games.the-sloan +alt.games.the-yow +alt.games.thol-far +alt.games.tiberian-sun +alt.games.tolkien.rpg +alt.games.tombraider +alt.games.torg +alt.games.total-annihil +alt.games.total-annihil.editing +alt.games.treasurequest +alt.games.ultima-online +alt.games.unidom +alt.games.unreal +alt.games.unreal.ed +alt.games.upcoming-3d +alt.games.v2000 +alt.games.vampire.the.masquerade +alt.games.vampire.tremere +alt.games.vga-planets +alt.games.video.classic +alt.games.video.digitiser +alt.games.video.emulation +alt.games.video.game-boy +alt.games.video.import.japanese +alt.games.video.n64links +alt.games.video.nintendo-64 +alt.games.video.nintendo-64.faqs +alt.games.video.nintendo-64.zelda.hwest +alt.games.video.nintendo-entertainment-system +alt.games.video.sega-dreamcast +alt.games.video.sega-saturn +alt.games.video.sega-saturn.faqs +alt.games.video.shooters +alt.games.video.sony-playstation +alt.games.video.super-nintendo +alt.games.video.tiger.game-com +alt.games.warcraft +alt.games.warcraft.draenor +alt.games.wargames +alt.games.warlords3 +alt.games.wc3 +alt.games.whitewolf +alt.games.whitewolf.mage +alt.games.whitewolf.rage +alt.games.wing-commander +alt.games.wireplay +alt.games.worms +alt.games.wrestling +alt.games.x-com +alt.games.xpilot +alt.games.xtrek +alt.gammaforce +alt.gammaforce.irc +alt.gammaforce.warez +alt.gangs +alt.gangs.bloods +alt.gap.international.chat +alt.gap.international.enquiries +alt.gap.international.sales +alt.gap.international.support +alt.garden.commando +alt.garden.pond.chat +alt.gathering.rainbow +alt.gathering.woodstock +alt.gays.jay-denebeim +alt.geek +alt.geek.supremacy +alt.gehirn.los +alt.geld +alt.genealogy +alt.genealogy.surnames.collingridge +alt.genius.alan-bstard +alt.genius.anus +alt.genius.big-daddy-zeus +alt.genius.bill-palmer +alt.genius.cuchulain +alt.genius.cypher +alt.genius.dave-ratcliffe +alt.genius.doom +alt.genius.only-sane-man +alt.genius.panikovsky +alt.genius.rupert-hangnail +alt.genius.tom-harden +alt.geo.emblaze-support +alt.geo.emblaze-support.audio-support +alt.geo.emblaze-support.creator-support +alt.geo.emblaze-support.creator-support.developer-support +alt.geo.emblaze-support.hotspots-support +alt.geo.emblaze-support.video-support +alt.geo.emblaze-support.webcharger-support +alt.get.a.life.jay-denebeim +alt.gib +alt.gibraltar +alt.gicho +alt.global-warming +alt.global.chat +alt.global.quake.team-fortress +alt.gnashing-teeth +alt.gnn.exodus +alt.go.go.nancy +alt.go.to.hell.j.a.y-d.e.n.e.b.e.i.m +alt.goat +alt.gobment.lones +alt.god.cypher +alt.god.grubor +alt.god.timothy.sutter +alt.goddess.ayla +alt.goddess.finkelstein +alt.goddess.timothy.sutter +alt.gods +alt.good.morning +alt.good.news +alt.goodpaster +alt.goohead +alt.gossip.celeberties +alt.gossip.celebrities +alt.gossip.chs97 +alt.gossip.royalty +alt.gothic +alt.gothic.announce +alt.gothic.architecture +alt.gothic.convergence +alt.gothic.culture +alt.gothic.fashion +alt.gothic.imperia +alt.gothic.music +alt.gothic.nightclubs +alt.gothic.nights +alt.gothic.pretentions +alt.gothic.suicide +alt.gourmand +alt.government.abuse +alt.government.employees +alt.government.ssd-benefits.moderated +alt.government.ssdi-benefits +alt.government.ssdi-benefits.moderated +alt.government.ssdi.benefits +alt.grad-student.tenured +alt.graffiti +alt.graphics +alt.graphics.bryce +alt.graphics.electrogig.ex-worker +alt.graphics.electrogig.users +alt.graphics.gifanimation +alt.graphics.illustrator +alt.graphics.photoshop +alt.graphics.pixutils +alt.graphics.scanning +alt.graphics.truespace +alt.great-lakes +alt.great.ass.paulina +alt.greek-lawyers +alt.grelb +alt.grok +alt.groppi +alt.groppi.die.die.die +alt.guinea.pig.conspiracy +alt.guitar +alt.guitar.amps +alt.guitar.bass +alt.guitar.beginner +alt.guitar.effects +alt.guitar.lap-pedal +alt.guitar.rickenbacker +alt.guitar.tab +alt.h0e +alt.hack +alt.hack.tr +alt.hacker +alt.hackers +alt.hackers.cough.cough.cough +alt.hackers.debate +alt.hackers.discuss +alt.hackers.groups +alt.hackers.groups.lod +alt.hackers.groups.moderated +alt.hackers.hackerzlair +alt.hackers.malicious +alt.hacking +alt.hacking.in.progress +alt.hackintosh +alt.hair-removal +alt.hale-bobb +alt.halloween.boo +alt.ham-radio.marketplace +alt.ham-radio.packet +alt.ham-radio.vhf-uhf +alt.hangover +alt.happy.birthday.to.me +alt.happy.valley +alt.happyclown +alt.hardcore +alt.harpa +alt.hate.a2000 +alt.hate.kelvinmckenzie +alt.hate.lemonhead +alt.healing.flower-essence +alt.healing.reiki +alt.health +alt.health.ayurveda +alt.health.biofeedback +alt.health.cfids-action +alt.health.cfs +alt.health.dental-amalgam +alt.health.fasting +alt.health.hmo +alt.health.oxygen-therapy +alt.health.systems +alt.health.virus.cure.alternatives +alt.help.businesscalc +alt.hemp +alt.hemp.octa +alt.hemp.politics +alt.hentai.sailor-moon +alt.heraldry.sca +alt.heritage.front +alt.herp +alt.herp.med +alt.herpes.personals +alt.hey.quad.nice.ass +alt.hgo +alt.hi-po.mopars +alt.hi.are.you.cute +alt.highfields.school +alt.hindu +alt.history.abe-lincoln +alt.history.ancient-worlds +alt.history.british +alt.history.colonial +alt.history.costuming +alt.history.exile +alt.history.future +alt.history.living +alt.history.ocean-liners.titanic +alt.history.punitive.expedition +alt.history.richard-iii +alt.history.what-if +alt.hit2000.nl +alt.hobbies.beekeeping +alt.hobbies.boyscouts +alt.hobbies.boyscouts.oa +alt.hobbies.racing-pigeons +alt.hobbies.reenactor +alt.hobbies.serial-murder +alt.hobbies.slotcars +alt.hocom +alt.hollywood +alt.holocaust.kpn +alt.holoworld.rpg +alt.holoworld.rpg.startrek +alt.holy.ofm +alt.home-theater.marketplace +alt.home-theater.misc +alt.home.repair +alt.homebrewing +alt.homepages.designtips.uk +alt.homepages.geocities +alt.homepages.xoom +alt.homosexual +alt.homosexual.falimortis +alt.homosexual.jay-denebeim +alt.homosexual.lesbian +alt.homosexuality.death-metal +alt.honesty +alt.hoogbegaafd.nl +alt.horology +alt.horror +alt.horror.creative +alt.horror.cthulhu +alt.horror.elmstreet +alt.horror.video.collectable +alt.horror.werewolves +alt.horseback.riding +alt.horsecare.basics +alt.hotel666 +alt.hotrod +alt.housing.nontrad +alt.how-to +alt.how.to.create.a.newsgroup +alt.how.to.moderate.a.newsgroup +alt.html +alt.html.critique +alt.html.editors.enhanced-html +alt.html.editors.webedit +alt.html.server-side +alt.html.tags +alt.html.webedit +alt.human-brain +alt.humor +alt.humor.best-of-usenet +alt.humor.best-of-usenet.d +alt.humor.bluesman +alt.humor.dutch +alt.humor.dutch.terrace +alt.humor.holocaust +alt.humor.jewish +alt.humor.jewish.anti-goy +alt.humor.jewish.genocide +alt.humor.jewish.mendacious +alt.humor.jewish.netcop +alt.humor.mad-magazine +alt.humor.net-abuse +alt.humor.parodies +alt.humor.puns +alt.hvac +alt.hydrogen.research +alt.hypertext +alt.hypnosis +alt.hypnosis.hypnotherapy +alt.hypnotherapy +alt.i-love-you +alt.i-love-you.zvjezdana +alt.i.cant.type +alt.i.cuss.you.bad +alt.i.love.abbie.cummings +alt.i.love.rabbit.grrl +alt.i.rmgroup.therefore.i.am.jay-denebeim +alt.ibc +alt.ibc.guide.badge.trading +alt.ibc.scout.badge.trading +alt.icelandic.waif.bjork.bjork.bjork +alt.iceman +alt.icq +alt.idiot.andrew-gierth +alt.idiot.anti-oliver +alt.idiot.cypher +alt.idiot.david-farrar +alt.idiot.fred-bloggs +alt.idiot.hens +alt.idiot.jay-denebeim +alt.idiot.kalisch +alt.idiot.moo2 +alt.idiot.shut-up-cunter +alt.idiot.sputers +alt.idiot.swallow +alt.idiot.w-van-heusden +alt.idiot.wolf-moonchild +alt.idiots +alt.ihatebr +alt.ihatebr.moderated +alt.illuminati +alt.illustration +alt.im.angry +alt.im.having.a.rotten.day +alt.image.medical +alt.immersion +alt.immersion.d +alt.immersion.duffman +alt.immortal +alt.immortal.super-grover +alt.impeach.clinton +alt.impero +alt.incompetence.phil-oliver +alt.india.cricket +alt.india.hockey +alt.india.progressive +alt.india.table-tennis +alt.india.tennis +alt.individualism +alt.industrial +alt.infertility +alt.infertility.alternatives +alt.infertility.pregnancy +alt.infertility.primary +alt.infertility.secondary +alt.infertility.surrogacy +alt.internet +alt.internet.access.wanted +alt.internet.appliances +alt.internet.commerce +alt.internet.free-services +alt.internet.guru +alt.internet.i-box +alt.internet.media-coverage +alt.internet.newservers +alt.internet.providers.africa +alt.internet.providers.america +alt.internet.providers.asia-oceany +alt.internet.providers.europe +alt.internet.providers.europe.relcom-sucks +alt.internet.providers.uk +alt.internet.providers.uk.free +alt.internet.research +alt.internet.search-engines +alt.internet.services +alt.internet.stuff +alt.internet.talk +alt.internet.talk-radio +alt.internet.talk.bizarre +alt.internet.worldsaway +alt.internet.yokota.general +alt.internic.billing.problems +alt.intsec +alt.inventors +alt.inventorworld +alt.invest.market.crash +alt.invest.penny-stocks +alt.invest.real-estate +alt.io +alt.iomega.zip.jazz +alt.ipl.business +alt.ipl.discussion +alt.ipl.messages +alt.ipl.mp3.encrypted +alt.ipl.req +alt.irc +alt.irc-progs.megaliths.virc +alt.irc-progs.virc +alt.irc.announce +alt.irc.bitchx +alt.irc.bots +alt.irc.bots.eggdrop +alt.irc.brasirc +alt.irc.camelot +alt.irc.channel.fortress +alt.irc.channel.macintosh +alt.irc.channels.lucca +alt.irc.corruption.log.log.log +alt.irc.dal-net.tiny-toons +alt.irc.dalnet +alt.irc.digi-98 +alt.irc.efnet +alt.irc.fan.slackie +alt.irc.fan.slackie.nude +alt.irc.fefnet +alt.irc.gamez.net +alt.irc.hottub +alt.irc.ircii +alt.irc.jungle +alt.irc.kewl +alt.irc.lamer.redknapp.die.die.die +alt.irc.mirc +alt.irc.mirc.scripts +alt.irc.mirc.scripts.pizza +alt.irc.network.wwfin +alt.irc.peacefull +alt.irc.psycloud +alt.irc.questions +alt.irc.ratsnest +alt.irc.recovery +alt.irc.romance +alt.irc.sirc +alt.irc.starlink +alt.irc.undernet +alt.irc.undernet.authors +alt.irc.undernet.channels +alt.irc.undernet.channels.new2irc +alt.irc.undernet.ska +alt.irc.virc +alt.irc.webnet +alt.irc.za +alt.irony +alt.irs.class-action +alt.irs.general +alt.is +alt.is.bill.gates.satan +alt.is.doomed +alt.is.too +alt.islam.sufism +alt.it.arte.videogiochi +alt.ita.anime +alt.ita.anime.commercial +alt.ita.anime.info +alt.ita.anime.manga +alt.ita.anime.marketplace +alt.italia +alt.italian.anime-manga +alt.jankenpon +alt.jankenpon.admin +alt.jankenpon.binaries.rose-leaf_club +alt.jankenpon.binaries.studio-r +alt.jankenpon.test +alt.january +alt.japanese.aidoru.honmono.nuudo.or.sekusii.gazou +alt.japanese.bbs.asciinet +alt.japanese.misc +alt.japanese.neojapan.b.p.kodomo +alt.japanese.neojapan.bainari.gazou.eroero.rorikon +alt.japanese.neojapan.facism.japan.news-admin +alt.japanese.neojapan.fairu.gazou.loliloli +alt.japanese.neojapan.feed +alt.japanese.neojapan.fetish.lolita +alt.japanese.neojapan.fetish.lolita.anime +alt.japanese.neojapan.fj-sucker.die.die.die +alt.japanese.neojapan.gazou.shoujo +alt.japanese.neojapan.hackers.nifty +alt.japanese.neojapan.hackers.pay-site +alt.japanese.neojapan.hackers.swpw +alt.japanese.neojapan.hackintosh +alt.japanese.neojapan.lolita +alt.japanese.neojapan.pedophilia +alt.japanese.neojapan.providers +alt.japanese.neojapan.rorikon +alt.japanese.neojapan.sakura +alt.japanese.neojapan.swpw +alt.japanese.neojapan.telephone-club +alt.japanese.neojapan.warez.ibm-pc +alt.japanese.neojapan.warez.ibmpc +alt.japanese.text +alt.jay.and.jeanne.bitch.here +alt.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh +alt.jeep-l +alt.jeff.dr +alt.jeff78.n.natalie.griffith.are.pathetic.morons +alt.jeffery-hunt.newgroup.newgroup.newgroup.does.this.make.me.a.hypocrite +alt.jen-is-beavis +alt.jerry.kuntz.cool.dude +alt.jerzu +alt.jesse-helms.sucks +alt.jfif.rose.leaf.club +alt.jimmy.t.sharbuck.3d.god.god.god +alt.jjj.jjj +alt.jmj97 +alt.jncreativethinking +alt.jobs +alt.jobs.as400 +alt.jobs.jobsearch +alt.jobs.nw-arkansas +alt.jobs.offered +alt.jobs.overseas +alt.jobs.spam +alt.john-denver.dead.dead.dead +alt.john-oneill +alt.jokes.limericks +alt.jokes.pentium +alt.journalism +alt.journalism.criticism +alt.journalism.drudge +alt.journalism.drudgereport +alt.journalism.freelance +alt.journalism.gay-press +alt.journalism.gonzo +alt.journalism.music +alt.journalism.newspapers +alt.journalism.newspapers.wkly-worldnews +alt.journalism.photo +alt.journalism.print +alt.journalism.students +alt.jpw +alt.jraxis +alt.juddians +alt.juddians.bbb +alt.july +alt.june +alt.just-a-student.like-you +alt.just.testing +alt.justnormal +alt.jyotish +alt.k12.chat.junior +alt.k12.hat.junior +alt.kalbo +alt.karen +alt.kawaly +alt.kc.bbs +alt.ken.starr.traitor.traitor.traitor +alt.ketchup +alt.key.west +alt.kids-talk +alt.kids-talk.penpals +alt.kill.spammers +alt.kill.the.whales +alt.kill.whitey +alt.kmart +alt.knoxfreevoice +alt.koby.wuz.here +alt.kook-of-the-month.nov95.john-grubor +alt.kook.of.month.phil-oliver +alt.kook.of.month.phil-oliver.win.win.win +alt.kooky.scientists +alt.kosovo-relief +alt.kosovo-relief.missing.persons.register.yourself +alt.kosovo-relief.what.do.you.need +alt.krecik.berecik +alt.ku86s6 +alt.kuwait.icq +alt.kuwait.irc +alt.kuwait.news +alt.kyles.mom.is.a.stupid.bitch +alt.lambda.education +alt.lamers.atma +alt.lamers.atma.owww.dad.stop.it.not.tonight +alt.lamers.james-koput.net-abuser +alt.lamers.janet-reno +alt.lamers.netcop +alt.lamers.netcop.david-farrar +alt.lamers.news.admin.net-abuse.misc +alt.lamers.news.admin.net-abuse.usenet +alt.lamers.pagan.donal +alt.lamers.rage-machine +alt.lamers.usa.janet-reno +alt.lampiao +alt.landscape.architecture +alt.lang +alt.lang.4gl +alt.lang.asm +alt.lang.basic +alt.lang.basic.compiler +alt.lang.ca-realizer +alt.lang.delphi +alt.lang.euphoria +alt.lang.intercal +alt.lang.layout +alt.lang.powerbasic +alt.lang.s-lang +alt.lang.vb5.rumors +alt.language +alt.language.artificial +alt.language.artificial.ngl +alt.language.balita-business +alt.language.balita-news +alt.language.cebuano +alt.language.cebunews +alt.language.ebonics +alt.language.english.spelling.reform +alt.language.eubonics +alt.language.hindi +alt.language.kapampangan +alt.language.patterns +alt.language.poetry.pure-silk +alt.language.spanish +alt.language.tanji +alt.language.urdu.poetry +alt.larryville +alt.las-vegas.gambling +alt.lasers +alt.lasik-eyes +alt.law-enforcement +alt.law-enforcement.m +alt.law.enforcement.wurk +alt.law.war-crimes.tribunals +alt.lawyers.sue.sue.sue +alt.leaks +alt.lefthanders +alt.legend.atlantis +alt.legend.king-arthur +alt.legend.the-bob.rock +alt.legends.atlantis +alt.legio-darkyard +alt.lemmings +alt.lemons +alt.lenny +alt.lesbian.feminist.poetry +alt.lets.all.earn.a.living.through.lotteries +alt.lets.kill.yuri.rutman +alt.letzebuerger +alt.liberty-vs.conspiracy +alt.lick.my.sweaty.nutsack.jay-denebeim +alt.licker.store +alt.life.afterlife +alt.life.internet +alt.life.itself +alt.life.sucks +alt.life.sucks.cypher +alt.life.sucks.moderated +alt.life.sucks.spork +alt.life.universe.everything +alt.lifestyle.barefoot +alt.lifestyle.earth-based +alt.lifestyle.freethinkers +alt.lifestyle.furry +alt.lifestyle.gorean +alt.lifestyle.master-slave +alt.lifestyle.simplicity +alt.lifestyle.substance-free +alt.lighters +alt.limpdick.james-koput +alt.limpdick.paul-zanca +alt.linux.slakware +alt.lite.bulb +alt.litterbox +alt.localmusic.chi +alt.locksmithing +alt.lonworks.controls +alt.look.at.me.i.am.a.fish +alt.loopy.fungus +alt.loser.ron-echeverri +alt.loser.wolf-moonchild +alt.lotto.players +alt.louise.beaudoin.nazi.bitch +alt.love +alt.lucien.bouchard.die.die.die +alt.lucky.w +alt.lunatics +alt.luser.recovery +alt.lycra +alt.lycra.pictures +alt.lynn +alt.mac.bin.req.only +alt.mac.copy-protect.kdt-terminator +alt.mac.games.binaries +alt.mac.updates +alt.macamp +alt.machines.cnc +alt.macintosh.kaleidoscope +alt.macintosh.warez +alt.macintosh.warez.applications +alt.macintosh.warez.games +alt.macintosh.warez.sitez +alt.macintosh.warez.utilities +alt.macomb.college +alt.macromedia.flash +alt.madcrew +alt.madhousebbs +alt.mag.high-society +alt.mag.hustler +alt.mag.penthouse +alt.mag.playboy +alt.mag.playboy.pussy +alt.mag.playgirl +alt.mag.puritan +alt.magazine.2600hz +alt.magazines.pornographic +alt.magic +alt.magic.history +alt.magic.marketplace +alt.magic.secrets +alt.magick +alt.magick.chaos +alt.magick.goetia +alt.magick.jinn +alt.magick.marketplace +alt.magick.scam +alt.magick.serious +alt.magick.sex +alt.magick.sex.angst +alt.magick.tantra +alt.magick.theurgia +alt.magick.tyagi +alt.magick.virtual-adepts +alt.mahesh.duitser +alt.make.fast.cash +alt.make.money.fast +alt.make.your.own.spam +alt.malta +alt.man.diary +alt.management.tech-support +alt.manga +alt.manufacturing.misc +alt.march +alt.marching-band.texas +alt.mark-atwood.die.die.die +alt.marketplace.books +alt.marketplace.books-on-tape +alt.marketplace.books.sf +alt.marketplace.cassettes +alt.marketplace.collectables +alt.marketplace.compact-disc +alt.marketplace.funky-stuff.forsale +alt.marketplace.videotapes +alt.martial-arts.karate.shotokan +alt.martial-arts.karate.uechi-ryu +alt.martial-arts.marketplace +alt.martial-arts.tae-kwon-do +alt.martial-arts.tae-kwon.do +alt.masonic.members +alt.masturbation +alt.math.iams +alt.math.moderated +alt.math.recreational +alt.matthew-davies +alt.mauritius +alt.may +alt.mayday-mayday +alt.mbone +alt.mcdonalds +alt.mcdonalds.beef +alt.mcdonalds.cheese +alt.mcdonalds.crew +alt.mcdonalds.crew.crew-trainer +alt.mcdonalds.crew.management +alt.mcdonalds.flame +alt.mcdonalds.fries +alt.mcdonalds.kissimmee.heavyg +alt.mcdonalds.promotions +alt.mckinstry.pencil-dick +alt.me.so.horny +alt.meaningless +alt.meaningless.shit +alt.mechwarrior2 +alt.med.allergy +alt.med.behavioral +alt.med.cfs +alt.med.cfs.chat +alt.med.cfs.info +alt.med.cfs.open +alt.med.cure-paralysis +alt.med.ems +alt.med.endometriosis +alt.med.equipment +alt.med.fibromyalgia +alt.med.fibromyalgia.guaifenisin +alt.med.fibromyalgia.recovery-info +alt.med.fibromyalgia.recovery.info +alt.med.podiatry +alt.med.software +alt.med.veterinary +alt.media.dvd.cracked +alt.media.studies +alt.medical.sales.jobs.offered +alt.medien.fernsehen +alt.meditation +alt.meditation.moderated +alt.meditation.qigong +alt.meditation.shabda +alt.meditation.transcendental +alt.mega-ego.yonderboy +alt.memetics +alt.memoriam.princess-di +alt.men.alpha +alt.men.politics +alt.men.support +alt.men.with.high.sperm.counts +alt.mens-rights +alt.menwhoswallow +alt.meow +alt.meridian.rpg +alt.messianic +alt.metaphysics.a-a-bailey +alt.metaphysics.rebirthing +alt.mexico +alt.michael.l.kilbourn +alt.microsoft.crash.crash.crash +alt.microsoft.sucks +alt.mikey.gwar +alt.military.aas.area2 +alt.military.air-cadets +alt.military.cadet +alt.military.cap +alt.military.collecting +alt.military.collecting.medals +alt.military.retired +alt.military.seacadets +alt.military.uk +alt.military.uk.agc +alt.mind.bending +alt.mindcontrol +alt.mindcontrol.kids-help-kids +alt.mining.recreational +alt.mink.grrr +alt.minnesota.connection +alt.minnesota.forsale +alt.mirc +alt.misanthropy.thedavid +alt.misc +alt.misc.forteana +alt.misogyny +alt.missing-adults +alt.missing-kids +alt.missouri.clinton +alt.mobilehome +alt.models +alt.models.petite +alt.models.railroad.ho +alt.modpol.discussion +alt.modpol.discusssion +alt.mof +alt.moja.test +alt.monday +alt.monsthers +alt.moogles +alt.moogles.cypher +alt.moron.phil-oliver +alt.morons +alt.motd +alt.motherfucker.jay-denebeim +alt.motherjones +alt.motorcycle.sportbike +alt.motorcycles.harley +alt.motss.bisexua-l +alt.mottola +alt.mottola.riccardo +alt.mountain-bike +alt.mountain-bike.van-delay +alt.movies +alt.movies.armageddon +alt.movies.branagh-thmpsn +alt.movies.bruce-lee +alt.movies.chaplin +alt.movies.christian-bale +alt.movies.cinematography +alt.movies.cinematography.super8 +alt.movies.coen-brothers +alt.movies.coppola +alt.movies.david-lynch +alt.movies.deep-impact +alt.movies.empire-records +alt.movies.ghostbusters +alt.movies.goonies +alt.movies.grease +alt.movies.hitchcock +alt.movies.independent +alt.movies.indian +alt.movies.indiana-jones +alt.movies.jackie-chan +alt.movies.james-cameron +alt.movies.joe-vs-volcano +alt.movies.john-carpenter +alt.movies.jurassic-park +alt.movies.kevin-smith +alt.movies.kubrick +alt.movies.labyrinth +alt.movies.legionnaires +alt.movies.luis-bunuel +alt.movies.marilyn-monroe +alt.movies.monster +alt.movies.mortal-kombat +alt.movies.oliver-stone +alt.movies.one.flew.over.the.cuckoos.nest.famous.lines.mr.turkle.oh.shit.the.supervisor +alt.movies.phantasm +alt.movies.robert-deniro +alt.movies.scorsese +alt.movies.serials +alt.movies.sig-weaver +alt.movies.silent +alt.movies.siskel+ebert +alt.movies.spielberg +alt.movies.spike-lee +alt.movies.terry-gilliam +alt.movies.tim-burton +alt.movies.titanic +alt.movies.truffaut +alt.movies.truman-show +alt.movies.uk +alt.movies.visual-effects +alt.movies.wim-wenders +alt.mr-men +alt.msdos +alt.msdos.batch +alt.msdos.programmer +alt.mtv-sucks +alt.mud +alt.mud.cellars +alt.mud.crystal-shard +alt.mud.eos2 +alt.mud.lp +alt.mud.majormud +alt.mud.programming +alt.multimedia.cu-seeme +alt.multimedia.director +alt.multimedia.emblaze +alt.multimedia.mpeg +alt.multimedia.tk +alt.multimedia.tk.terri-disisto +alt.multimedia.vadz +alt.music +alt.music-lover.audiophile +alt.music-lover.audiophile.hardware +alt.music.2-belo +alt.music.4-track +alt.music.4ad +alt.music.a-cappella +alt.music.abba +alt.music.acid-jazz +alt.music.adiemus +alt.music.aerosmith +alt.music.african +alt.music.air-supply +alt.music.alabama +alt.music.alanis +alt.music.alanis.morissette +alt.music.alice-cooper +alt.music.aliceinchains +alt.music.all-saints +alt.music.alternative +alt.music.alternative.female +alt.music.america +alt.music.amy-grant +alt.music.anthrax +alt.music.aor +alt.music.aqua +alt.music.arabic +alt.music.ash +alt.music.atlanta +alt.music.autechre +alt.music.b-52s +alt.music.b-witched +alt.music.babybird +alt.music.banana-truffle +alt.music.band-director +alt.music.beach-boys +alt.music.beastie-boys +alt.music.beastie-boys.punk-liar +alt.music.beastie-boys.punk-liar.gwedoking +alt.music.beatles +alt.music.beautiful-south +alt.music.beck +alt.music.beckley-bunnel +alt.music.bedroom.producers +alt.music.bee-gees +alt.music.bela-fleck +alt.music.ben-folds-five +alt.music.betterthanezra +alt.music.big-band +alt.music.bill-laswell +alt.music.bill-miller +alt.music.billy-joe.winghead +alt.music.billy-joel +alt.music.bis +alt.music.bjork +alt.music.black-crowes +alt.music.black-metal +alt.music.black-metal.nazi +alt.music.black-sabbath +alt.music.blink-182 +alt.music.bloem +alt.music.bloodhound.gang +alt.music.blue-rodeo +alt.music.bluegrass +alt.music.blueoystercult +alt.music.blues +alt.music.blues-traveler +alt.music.blues.delta +alt.music.blues.johnny-winter +alt.music.bluetones +alt.music.blur +alt.music.bob-mould +alt.music.bob-wiseman +alt.music.bodeans +alt.music.boedans +alt.music.bon-jovi +alt.music.bonepony +alt.music.bootlegs +alt.music.bosstones +alt.music.boyz-2-men +alt.music.boyzone +alt.music.brian-eno +alt.music.bruce-cockburn +alt.music.bugtussle +alt.music.built-to-spill +alt.music.bush +alt.music.bush.sux +alt.music.butholesurfers +alt.music.buzzpoets +alt.music.byrds +alt.music.cake +alt.music.canada +alt.music.candy-dulfer +alt.music.cardiacs +alt.music.carnival +alt.music.catatonia +alt.music.category-freak +alt.music.cavedogs +alt.music.ccr +alt.music.celine-dion +alt.music.chameleons +alt.music.chapel-hill +alt.music.charlatans +alt.music.cheap-trick +alt.music.chemical-bros +alt.music.cher +alt.music.chicago +alt.music.chinese-pop +alt.music.chinese.a-mei +alt.music.christian.rock +alt.music.clannad +alt.music.clarinet +alt.music.clash +alt.music.cliff-richard +alt.music.complex-arrang +alt.music.corrs +alt.music.counting-crows +alt.music.country.classic +alt.music.cranberries +alt.music.cranes +alt.music.cravin-melon +alt.music.creeker +alt.music.crocketts +alt.music.ct-dummies +alt.music.culture-club +alt.music.dan-fogelberg +alt.music.dance +alt.music.dance.euro +alt.music.dance.freestyle +alt.music.dance.made-in-italy +alt.music.dance.mp3.binaries +alt.music.dandy-warhols +alt.music.danzig +alt.music.darkwave +alt.music.dave-hawkins +alt.music.dave-matthews +alt.music.dave-matthews.tapetrading +alt.music.dead-kennedys +alt.music.deep-purple +alt.music.def-leppard +alt.music.deftones +alt.music.deftones.moderated +alt.music.delirious +alt.music.delphines +alt.music.depeche-mode +alt.music.derrero +alt.music.dio +alt.music.dire-straits +alt.music.diva +alt.music.divine-comedy +alt.music.doors +alt.music.drain +alt.music.dream-theater +alt.music.duke-ellington +alt.music.duran-duran +alt.music.dutch +alt.music.eagles +alt.music.ear-training +alt.music.echoing-green +alt.music.education +alt.music.eels +alt.music.eighties +alt.music.elastica +alt.music.ellectrika +alt.music.elo +alt.music.embo +alt.music.embrace +alt.music.emo +alt.music.enigma-dcd-etc +alt.music.enya +alt.music.erasure +alt.music.eric-clapton +alt.music.everclear +alt.music.everything-but-the-girl +alt.music.faith-no-more +alt.music.fates-warning +alt.music.fatwreckchords +alt.music.feelers +alt.music.festivals +alt.music.filk +alt.music.flamenco +alt.music.fleetwood-mac +alt.music.foetus +alt.music.folklore +alt.music.foo-fighters +alt.music.frank-zappa +alt.music.franticdogpadl +alt.music.funkpoparoll +alt.music.g-fibbers +alt.music.galaxie-500 +alt.music.gangsta.rap +alt.music.garbage +alt.music.garth-brooks +alt.music.gene +alt.music.genesis +alt.music.girlgroups +alt.music.glen-ballard +alt.music.gnawa +alt.music.golden-earring +alt.music.goo-goo-dolls +alt.music.gospel.southern +alt.music.gossip +alt.music.greek +alt.music.green-day +alt.music.green-day.vacant5150.aka.kayte +alt.music.grindcore +alt.music.guidedbyvoices +alt.music.guthrie +alt.music.gwar +alt.music.h-blockx +alt.music.h-h-hippeaux +alt.music.hammond-organ +alt.music.hamsters +alt.music.hardcore +alt.music.harmonica +alt.music.harry-chapin +alt.music.hawaiian +alt.music.heath +alt.music.hertz +alt.music.hole +alt.music.holly-cole +alt.music.hootie +alt.music.house +alt.music.hunter-mott +alt.music.iggy-pop +alt.music.independent +alt.music.independent.ads +alt.music.indigo-girls +alt.music.industrial +alt.music.info-society +alt.music.insane-clown-posse +alt.music.inxs +alt.music.ipecac-loop +alt.music.j-s-bach +alt.music.jade-warrior +alt.music.jamc +alt.music.james-taylor +alt.music.jamiroquai +alt.music.jamiroquai.trading-post +alt.music.janes-addictn +alt.music.jazz.squirrel-nut-zippers +alt.music.jeff-buckley +alt.music.jenn-harmer +alt.music.jethro-tull +alt.music.jewish +alt.music.jim-croce +alt.music.jimi.hendrix +alt.music.joan-jett +alt.music.joan-osborne +alt.music.jon-spencer +alt.music.journalism +alt.music.journey +alt.music.jpop +alt.music.judas-priest +alt.music.jungle +alt.music.karaoke +alt.music.kelani +alt.music.kenickie +alt.music.kenny-wayne-shepherd +alt.music.kiss +alt.music.kmfdm +alt.music.korn +alt.music.kraftwerk +alt.music.kreviazuk +alt.music.kula-shaker +alt.music.kyle-vincent +alt.music.kylie-minogue +alt.music.la-guns +alt.music.led-zeppelin +alt.music.lennon +alt.music.leonard-cohen +alt.music.lesley-rankine +alt.music.levellers +alt.music.lightfoot +alt.music.limp-bizkit +alt.music.lisa-loeb +alt.music.live.the.band +alt.music.lloyd-webber +alt.music.lo-fi +alt.music.local-h +alt.music.london-am +alt.music.lor-mckennitt +alt.music.lords-of-acid +alt.music.lou-reed +alt.music.luis-miguel +alt.music.luna +alt.music.lyrics +alt.music.lyrics.spanish +alt.music.machine-head +alt.music.madness +alt.music.makers.dj +alt.music.makers.dj.bedroom +alt.music.makers.electric-piano +alt.music.makers.electronic +alt.music.makers.mpeg +alt.music.makers.nederland +alt.music.makers.nederland.markt +alt.music.makers.sampling +alt.music.makers.soloact +alt.music.makers.theremin +alt.music.makers.ukulele +alt.music.makers.woodwind +alt.music.man +alt.music.manics +alt.music.manowar +alt.music.mansun +alt.music.mariah.carey +alt.music.marillion +alt.music.marilyn-manson +alt.music.marys-danish +alt.music.massive-attack +alt.music.maxwell +alt.music.mazzy-star +alt.music.mcb +alt.music.mccartney +alt.music.mdfmk +alt.music.mecano +alt.music.metallica.songs.turn-the-page +alt.music.mexican +alt.music.michael-franks +alt.music.mid-evil +alt.music.midi +alt.music.midi.keydisk-terminator +alt.music.midiweb +alt.music.mike-keneally +alt.music.mike-oldfield +alt.music.mike.keneally +alt.music.ministry +alt.music.misc +alt.music.misfits +alt.music.mixman +alt.music.mobile-djs +alt.music.moby +alt.music.modern-rock +alt.music.mods +alt.music.moffatts +alt.music.mogwai +alt.music.monkees +alt.music.moody-blues +alt.music.morrissey +alt.music.moxy-fruvous +alt.music.mp3 +alt.music.mr-bungle +alt.music.mylene-farmer +alt.music.nailbomb +alt.music.nat-imbruglia +alt.music.new-order +alt.music.nick-cave +alt.music.night-ranger +alt.music.nils-lofgren +alt.music.nin +alt.music.nin.creative +alt.music.nin.d +alt.music.nin.old-school +alt.music.nirvana +alt.music.nirvana.bootlegs +alt.music.nirvana.wasteland.useless.personal.flames +alt.music.nits +alt.music.no-depression +alt.music.no-doubt +alt.music.no-wave +alt.music.nofx +alt.music.nomeansno +alt.music.novelty +alt.music.nrbq +alt.music.oasis +alt.music.ocs +alt.music.offspring +alt.music.operation-ivy +alt.music.orb +alt.music.osmonds +alt.music.ourladypeace +alt.music.oxygum +alt.music.ozzy +alt.music.pantera +alt.music.pat-mccurdy +alt.music.pat-metheny +alt.music.pat-metheny.moderated +alt.music.paul-simon +alt.music.paul-weller +alt.music.pavement +alt.music.pearl-jam +alt.music.pennywise +alt.music.pere-ubu +alt.music.performance.band.high-school +alt.music.pet-shop-boys +alt.music.pet-shop.boys +alt.music.peter-gabriel +alt.music.phil-collins +alt.music.philip-glass +alt.music.pink-floyd +alt.music.pj-harvey +alt.music.placebo +alt.music.plasmatics +alt.music.pogues +alt.music.polkas +alt.music.pop-eat-itself +alt.music.portishead +alt.music.posterkids +alt.music.power-pop +alt.music.primus +alt.music.prince +alt.music.prodigy-the +alt.music.prodigy-the.lyrics +alt.music.producer +alt.music.progressive +alt.music.psychedelic +alt.music.pulp +alt.music.pus +alt.music.pusa +alt.music.queen +alt.music.rachid +alt.music.radiators +alt.music.radiohead +alt.music.radiohead.what.does.the.guy.say.at.the.end.of.the.just.video +alt.music.rage-machine +alt.music.rammstein +alt.music.ramones +alt.music.rap-metal +alt.music.rat-pack +alt.music.rat-salad +alt.music.ratt +alt.music.redd-kross +alt.music.reef +alt.music.refreshments +alt.music.replacements +alt.music.riot-grrl +alt.music.roadie +alt.music.rob-zombie +alt.music.rockabilly +alt.music.roger-waters +alt.music.rory-gallagher +alt.music.roxette +alt.music.ruby +alt.music.runrig +alt.music.rush +alt.music.rvamusic +alt.music.s-mclachlan +alt.music.s7g +alt.music.saxophone +alt.music.seal +alt.music.seven-seconds +alt.music.sex-pistols +alt.music.sex.pistols +alt.music.shamen +alt.music.shonen-knife +alt.music.sinead-oconnor +alt.music.ska +alt.music.ska-core +alt.music.skeg +alt.music.skinny-puppy +alt.music.skratch-picklz +alt.music.sloan +alt.music.small-faces +alt.music.small-world +alt.music.smash-pumpkins +alt.music.smash-pumpkins.dead-carmance +alt.music.smash-pumpkins.jimmy-addict.tasty-smack +alt.music.smash-pumpkins.my-name-is.what.my-name-is.who.my-name-is.huh.wikka-wikka.dead-carmance +alt.music.smithereens +alt.music.smiths +alt.music.sneaker-pimps +alt.music.sondheim +alt.music.sonic-youth +alt.music.sophie-hawkins +alt.music.soul +alt.music.soul.asylum +alt.music.soulcoughing +alt.music.soundgarden +alt.music.southern-rock +alt.music.space +alt.music.spacerock +alt.music.spanish.lyrics +alt.music.speedmcqueen +alt.music.spice-girls +alt.music.squeeze +alt.music.squirrel-nut-zippers +alt.music.status-quo +alt.music.steely-dan +alt.music.stereophonics +alt.music.steve-harley +alt.music.steve-miller +alt.music.steve-vai +alt.music.steve.vai +alt.music.stone-roses +alt.music.stone-temple +alt.music.strange +alt.music.suede +alt.music.superchunk +alt.music.superfurries +alt.music.supergrass +alt.music.supersuckers +alt.music.swedish-pop +alt.music.swing +alt.music.sylvian +alt.music.symposium +alt.music.synth.kurzweil +alt.music.synth.roland.tb303 +alt.music.synth.roland.u20 +alt.music.synthpop +alt.music.t-rex +alt.music.tangerine-dream +alt.music.tango +alt.music.tape-culture +alt.music.tea-party +alt.music.tea-party.moderated +alt.music.techno +alt.music.terrorvision +alt.music.texas +alt.music.that-dog +alt.music.the-band +alt.music.the-corrs +alt.music.the-damned +alt.music.the-doors +alt.music.the-fall +alt.music.the-pist +alt.music.the-sweet +alt.music.the-tubes +alt.music.the-verve +alt.music.the.police +alt.music.thecars +alt.music.thecure +alt.music.themepark +alt.music.thunder +alt.music.tlc +alt.music.tmbg +alt.music.todd-rundgren +alt.music.tom-petty +alt.music.tom-waits +alt.music.tonic +alt.music.tool +alt.music.total-touch +alt.music.toten-hosen +alt.music.trading.dat +alt.music.tragically-hip +alt.music.tricky +alt.music.trombone +alt.music.tuba +alt.music.tune-inn +alt.music.u2 +alt.music.ub40 +alt.music.uk +alt.music.underground.grindcore +alt.music.underground.metal +alt.music.underground.metal.ambient +alt.music.underground.metal.black +alt.music.underground.metal.death +alt.music.underground.metal.doom +alt.music.underground.metal.nihilism +alt.music.underground.metal.philosophy +alt.music.underground.metal.satanism +alt.music.underworld +alt.music.vacuum +alt.music.van-halen +alt.music.van-halen.gary-sucks +alt.music.vanhalen +alt.music.velvets +alt.music.veruca-salt +alt.music.video-games +alt.music.vivian-lai +alt.music.voivod +alt.music.wales +alt.music.warehouse.of.hate +alt.music.ween +alt.music.weezer +alt.music.weird +alt.music.weird-al +alt.music.wesley-willis +alt.music.white-power +alt.music.white.town +alt.music.who +alt.music.wilco +alt.music.wilderness +alt.music.wildhearts +alt.music.world +alt.music.wu-tang-clan +alt.music.x +alt.music.yes +alt.music.yngwie +alt.music.zz-top +alt.my.head.hurts +alt.my.name.is.jay-denebeim.and.i.rmgroup.for.sexual.gratification +alt.mysteries +alt.mythology +alt.mythology.jinn +alt.mythology.mythic-animals +alt.n.dex.de +alt.naggamanteh +alt.namaste +alt.nanny.helpme.help.help.help +alt.natall +alt.native +alt.native.law +alt.nature.mushrooms +alt.naughty.pictures +alt.necronomicon +alt.neo-tech +alt.nerd.obsessive +alt.nespoli +alt.net +alt.net.and +alt.net.and.modem +alt.netcom +alt.netcom.emeritus +alt.netcom.sucks +alt.netgames.bolo +alt.netheism +alt.netscape.buggy-products +alt.netscape.sucks +alt.nettime +alt.netzilla.die.die.die +alt.new-england +alt.new-hampshire +alt.newbie +alt.newbies +alt.newgroup.dean-stark +alt.newgroup.for.fun.fun.fun +alt.newlywed +alt.news-admins.japan.fascist.fascist.fascist +alt.news-media +alt.news.boys +alt.news.cyprus +alt.news.fyrom +alt.news.macedonia +alt.news.microsoft +alt.news.newusers-mac +alt.newsangels +alt.newsangels.lamers +alt.newsbear +alt.newsgroup.moderators +alt.newsgroupname +alt.niggers +alt.night-club.review.uk +alt.night-life.bradford.uk +alt.nihilism +alt.nijntje +alt.nintendo64.zelda +alt.niteclub.alternative +alt.niteclub.commercial +alt.nitwit.john-grubor +alt.nl +alt.nl.binaries.hack +alt.nl.detachering.it +alt.nl.gratis.bellen.kpn-prepay +alt.nl.kabel.eneco +alt.nl.markt.telecom.gsm +alt.nl.radio.zendamateur.gelicentieerd +alt.nl.taalbederf +alt.nl.telebankieren +alt.nocem.misc +alt.nocem.policy +alt.nocne.polakow.rozmowy.dk_i_dp +alt.noise +alt.non.sequitur +alt.nosebeeping +alt.november +alt.npractitioners +alt.nswpp +alt.nudism.moderated +alt.nuke.europe +alt.nuke.france +alt.nuke.norway +alt.nuke.paxnet +alt.nuke.the.usa +alt.null.bandwagons +alt.null.xi +alt.numnut.john-grubor +alt.ny.gruppe +alt.nzjnet +alt.obituaries +alt.occult.kabbalah.golden-dawn +alt.october +alt.office.management +alt.old-west +alt.olympic.studies +alt.olympics.3000 +alt.olympics.housing.low-cost +alt.online-service +alt.online-service.america-online +alt.online-service.att-worldnet +alt.online-service.att-worldnet.alumni +alt.online-service.att-worldnet.ex-users +alt.online-service.compuserve +alt.online-service.cyberpromo +alt.online-service.delphi +alt.online-service.dennon-online +alt.online-service.freenet +alt.online-service.genie +alt.online-service.gnn +alt.online-service.imagination +alt.online-service.microsoft +alt.online-service.msn-0wns-j00 +alt.online-service.pacbell +alt.online-service.prodigy +alt.online-service.ten +alt.online-service.webtv +alt.online-service.webtv.abuse +alt.online-service.webtv.sucks +alt.ontario.north-bay +alt.ooga.booga +alt.open-servers.news.west-tech.com +alt.opengroup.org.kaleb.keithley +alt.org.beta-sigma-phi +alt.org.clan-macdude +alt.org.data-proc-mgmt +alt.org.db-nl.misc +alt.org.earth-first +alt.org.earth-first.eco-terrorists +alt.org.food-not-bombs +alt.org.iww +alt.org.jaycees +alt.org.legio-darkyard +alt.org.pla +alt.org.promisekeepers +alt.org.royal-rangers +alt.org.scoutnet +alt.org.sierra-club +alt.org.ski-patrol +alt.org.starfleet +alt.org.team-os2 +alt.org.toastmasters +alt.org.triple9 +alt.org.young-enterprise +alt.org.zencor +alt.orgonomy +alt.os +alt.os.assembly +alt.os.citrix +alt.os.development +alt.os.free-dos +alt.os.freedows +alt.os.linux +alt.os.linux.caldera +alt.os.linux.dial-up +alt.os.linux.mandrake +alt.os.linux.slackware +alt.os.linux.turbolinux +alt.os.multics +alt.os.security +alt.os.tlerll +alt.os.windows95 +alt.os.windows95.crash.crash.crash +alt.out-of-body +alt.overweight.trailer-trash.jay-denebeim +alt.oxford.talk +alt.oyp +alt.oyp.alumni +alt.oyp.announce +alt.oyp.corp +alt.oyp.eoryp +alt.oyp.norp +alt.oyp.scopy +alt.oyp.sworp +alt.p +alt.pagan +alt.pagan.contacts +alt.pagan.magick +alt.palm.springs.ca +alt.pantyhose +alt.pantyhose.as.a.mask.doesnt.work +alt.parallel.universes +alt.paranet.abduct +alt.paranet.esp-help +alt.paranet.metaphysics +alt.paranet.paranormal +alt.paranet.psi +alt.paranet.science +alt.paranet.skeptic +alt.paranet.ufo +alt.paranoia +alt.paranoia.damned-fish +alt.paranoia.delusional +alt.paranoia.rampant +alt.paranoia.spambots +alt.paranormal +alt.paranormal.channeling +alt.paranormal.crop-circles +alt.paranormal.moderated +alt.paranormal.pyramid +alt.paranormal.reincarnation +alt.paranormal.spells.hexes.magic +alt.parenting.attachment +alt.parenting.grandparents +alt.parenting.paranormal +alt.parenting.solutions +alt.parenting.spanking +alt.parenting.spanking.moderated +alt.parenting.twins-triplets +alt.parents-teens +alt.park.avenue.festival.pizza.choke +alt.party +alt.pastel.developer.forum +alt.pave.the.earth +alt.pave.the.earth.with.asphalt +alt.pave.waldon.pond +alt.pbem.blackfuture +alt.pbem.ryn +alt.pbi.premier +alt.pc.kelt +alt.pcdos +alt.peace +alt.peace-corps +alt.peanut-butter.electricity +alt.pedophile.aaron-henne +alt.pedophile.aaron-marquez +alt.pedophile.alan-bostick +alt.pedophile.barry-shein +alt.pedophile.bill-stewart-cole +alt.pedophile.bob-curtis +alt.pedophile.bruce-baugh +alt.pedophile.bruce-ediger +alt.pedophile.charles-platt +alt.pedophile.colin-leech +alt.pedophile.craig-sherwood +alt.pedophile.daniel-hartung +alt.pedophile.daniel-norton +alt.pedophile.dave-barr +alt.pedophile.david-bromage +alt.pedophile.david-cathey +alt.pedophile.david-delaney +alt.pedophile.david-ratcliffe +alt.pedophile.david-westebbe +alt.pedophile.dennis-mcclain-furmanski +alt.pedophile.erland-sommarskog +alt.pedophile.felix-tilley +alt.pedophile.gardner-trask +alt.pedophile.gary-burnore +alt.pedophile.grady-booch +alt.pedophile.guy-macon +alt.pedophile.guy-polis +alt.pedophile.ian-hayes +alt.pedophile.jack-mingo +alt.pedophile.james-stricherz +alt.pedophile.jan-isley +alt.pedophile.jason-durbin +alt.pedophile.john-gilmore +alt.pedophile.john-milburn +alt.pedophile.jonathan-grobe +alt.pedophile.jonathan-kamens +alt.pedophile.karl-jahr +alt.pedophile.ken-lucke +alt.pedophile.kenneth-mcvay +alt.pedophile.magnus-kempe +alt.pedophile.matt-cable +alt.pedophile.matthew-fields +alt.pedophile.michael-maxfield +alt.pedophile.nat-makarevitch +alt.pedophile.nick-sandru +alt.pedophile.otto-makela +alt.pedophile.patrick-volk +alt.pedophile.peter-dasilva +alt.pedophile.peter-vorobiev +alt.pedophile.richard-tietjens +alt.pedophile.rick-buchanan +alt.pedophile.robbie-honerkamp +alt.pedophile.robert-braver +alt.pedophile.roger-wemyss +alt.pedophile.ronald-guilmette +alt.pedophile.sam-varshavchik +alt.pedophile.sameer-parekh +alt.pedophile.scott-southwick +alt.pedophile.stan-kalisch +alt.pedophile.stephan-burr +alt.pedophile.steven-slamon +alt.pedophile.thomas-allard +alt.pedophile.tzimon-yliaster +alt.pedophile.werner-uhrig +alt.pedophile.zoli-fekete +alt.pedophilia.announce +alt.pedophilia.boys +alt.pedophilia.girls +alt.pedophilia.pictures +alt.pedophilia.swaps +alt.peepsk +alt.peeves +alt.penguin-fetish.recovery +alt.penguins.bondage.latex.springs.bounce.bounce.bounce +alt.penpals.50-plus +alt.penpals.college +alt.penpals.erotic +alt.penpals.forty-plus-yrs +alt.penthouse.sex.anal +alt.penthouse.sex.breast +alt.penthouse.sex.breasts +alt.penthouse.sex.enemas +alt.penthouse.sex.erotica +alt.penthouse.sex.europe +alt.penthouse.sex.exhibitionism +alt.penthouse.sex.fans +alt.penthouse.sex.fat +alt.penthouse.sex.femdom +alt.penthouse.sex.fetish.fashion +alt.penthouse.sex.fetish.feet +alt.penthouse.sex.fetish.panties +alt.penthouse.sex.fetish.scat +alt.penthouse.sex.fetish.size +alt.penthouse.sex.fetish.tickling +alt.penthouse.sex.fetish.tongue +alt.penthouse.sex.fetish.waifs +alt.penthouse.sex.fetish.watersports +alt.penthouse.sex.fetish.wet-and-messy +alt.penthouse.sex.first-time +alt.penthouse.sex.gangbang +alt.penthouse.sex.gaymen.porn +alt.penthouse.sex.girls +alt.penthouse.sex.homosexual +alt.penthouse.sex.intergen +alt.penthouse.sex.international +alt.penthouse.sex.internet +alt.penthouse.sex.jp +alt.penthouse.sex.letters +alt.penthouse.sex.magazines +alt.penthouse.sex.masterbation +alt.penthouse.sex.masterbation.pictures.female +alt.penthouse.sex.masturbation +alt.penthouse.sex.menstruation +alt.penthouse.sex.midgets +alt.penthouse.sex.movies +alt.penthouse.sex.oral +alt.penthouse.sex.orgy +alt.penthouse.sex.phone +alt.penthouse.sex.pictures +alt.penthouse.sex.pictures.female +alt.penthouse.sex.pictures.male +alt.penthouse.sex.prostitution +alt.penthouse.sex.safe +alt.penthouse.sex.services +alt.penthouse.sex.sissy +alt.penthouse.sex.sissy.slut +alt.penthouse.sex.sm.fig +alt.penthouse.sex.sounds +alt.penthouse.sex.spanking +alt.penthouse.sex.stories +alt.penthouse.sex.stories.bondage +alt.penthouse.sex.stories.cuckold +alt.penthouse.sex.stories.gay +alt.penthouse.sex.stories.hetero +alt.penthouse.sex.stories.tg +alt.penthouse.sex.strip-clubs +alt.penthouse.sex.strippers.jobs +alt.penthouse.sex.super-size +alt.penthouse.sex.swingers +alt.penthouse.sex.swingers.uk +alt.penthouse.sex.tasteless +alt.penthouse.sex.telephone +alt.penthouse.sex.testeless +alt.penthouse.sex.trans +alt.penthouse.sex.trio.hetero.for-she.amateur +alt.penthouse.sex.ugly +alt.penthouse.sex.video-swap +alt.penthouse.sex.voyeurism +alt.penthouse.sex.wanted +alt.penthouse.sex.wanted.escorts.ads +alt.penthouse.sex.wanted.models +alt.penthouse.sex.watersports +alt.penthouse.sex.weight-gain +alt.penthouse.sex.women +alt.periodismo +alt.periphs +alt.periphs.multifunctions +alt.periphs.pcmcia +alt.perl +alt.perl.sockets +alt.personals +alt.personals.abbotsford +alt.personals.ads +alt.personals.aliens +alt.personals.asian +alt.personals.bi +alt.personals.bi.newjersey +alt.personals.big-folks +alt.personals.black +alt.personals.bodyart +alt.personals.bondage +alt.personals.bondage.gay +alt.personals.calgary +alt.personals.edmonton +alt.personals.fags +alt.personals.fat +alt.personals.fetish +alt.personals.furry +alt.personals.gay +alt.personals.gothic +alt.personals.herpes +alt.personals.hiv-positive +alt.personals.intercultural +alt.personals.intergen +alt.personals.interracial +alt.personals.jewish +alt.personals.misc +alt.personals.montreal +alt.personals.motss +alt.personals.motss.women +alt.personals.nanaimo +alt.personals.new-zealand +alt.personals.ottawa +alt.personals.phone +alt.personals.poly +alt.personals.psychedelic +alt.personals.sanfrancisco.married-attach +alt.personals.spanking +alt.personals.spanking.punishment +alt.personals.sudbury +alt.personals.tall +alt.personals.teen +alt.personals.toronto +alt.personals.transgendered +alt.personals.universities.csu.sacramento +alt.personals.vancouver +alt.personals.viagra-users +alt.personals.where.are.you.now +alt.personals.whites-only +alt.pessimism +alt.pets.arachnids +alt.pets.birds.dutch +alt.pets.birds.softbills +alt.pets.birds.softbills.crows +alt.pets.birds.softbills.starlings +alt.pets.degus +alt.pets.dogs +alt.pets.dogs.aussies +alt.pets.dogs.flame-wars +alt.pets.dogs.labrador +alt.pets.dogs.pitbull +alt.pets.dogs.pomeranians +alt.pets.dogs.sharpei +alt.pets.dogs.telepathic.yogi +alt.pets.dogs.vizsla +alt.pets.ferrets +alt.pets.guinea-pigs +alt.pets.hamsters +alt.pets.hedgehogs +alt.pets.mice +alt.pets.parrots.african-grey +alt.pets.parrots.amazons +alt.pets.parrots.breeding +alt.pets.parrots.budgerigars +alt.pets.parrots.cockatiels +alt.pets.parrots.jardines +alt.pets.parrots.marketplace +alt.pets.parrots.misc +alt.pets.pet-rights +alt.pets.prairie-dogs +alt.pets.rabbits +alt.pets.reptiles.lizards +alt.pets.reptiles.lizards.gecko +alt.pets.reptiles.snakes.pythons.ball +alt.pets.reptiles.snakes.pythons.burmese +alt.pets.reptiles.snakes.pythons.reticulated +alt.pets.rodents +alt.pets.senegal-parrots +alt.pets.skunks +alt.pets.sugar-glider +alt.pets.tamagotchi +alt.petz +alt.ph.uk +alt.ph.za +alt.phil-oliver.bambi.bambi.bambi +alt.phil-oliver.die.die.die +alt.phil-oliver.gehzober.gehzober.gehzober +alt.phil-oliver.has.no.life +alt.phil-oliver.roar.roar.roar +alt.philatelic.com +alt.philez +alt.philips.cdr.discussion +alt.philosophy.debate +alt.philosophy.kant +alt.philosophy.law +alt.philosophy.objectivism +alt.philosophy.taoism +alt.philosophy.zen +alt.phreaking +alt.picture-framing +alt.pictures.ana-voog +alt.pictures.fuzzy.animals +alt.pictures.monsters +alt.pimpsup.hozdown +alt.pimpz.org +alt.pinecone +alt.pirate.radio +alt.pizza.delivery.drivers +alt.pl +alt.pl.dupa +alt.pl.muzyka.bin +alt.pl.popieram.ateizm +alt.pl.rec.muzyka +alt.pl.rec.muzyka.punk +alt.pl.uzywki +alt.pl.wolnosc +alt.places.tybee.island +alt.plague +alt.planets.asteroid-belt +alt.planets.earth +alt.planets.earth.moon +alt.planets.jupiter +alt.planets.jupiter.moons.adrastea +alt.planets.jupiter.moons.amalthea +alt.planets.jupiter.moons.ananke +alt.planets.jupiter.moons.callisto +alt.planets.jupiter.moons.carme +alt.planets.jupiter.moons.elara +alt.planets.jupiter.moons.europa +alt.planets.jupiter.moons.ganymede +alt.planets.jupiter.moons.himalia +alt.planets.jupiter.moons.io +alt.planets.jupiter.moons.leda +alt.planets.jupiter.moons.lysithea +alt.planets.jupiter.moons.metis +alt.planets.jupiter.moons.pasiphae +alt.planets.jupiter.moons.sinope +alt.planets.jupiter.moons.thebe +alt.planets.mars +alt.planets.mars.moons.deimos +alt.planets.mars.moons.phobos +alt.planets.mercury +alt.planets.misc +alt.planets.neptune +alt.planets.neptune.moons.nereid +alt.planets.neptune.moons.proteus +alt.planets.neptune.moons.triton +alt.planets.pluto +alt.planets.pluto.moons.charon +alt.planets.saturn +alt.planets.saturn.moons.atlas +alt.planets.saturn.moons.enceladus +alt.planets.saturn.moons.janus +alt.planets.saturn.moons.pan +alt.planets.saturn.moons.phoebe +alt.planets.saturn.moons.prometheus +alt.planets.uranus +alt.planets.uranus.moons.ariel +alt.planets.uranus.moons.cordelia +alt.planets.uranus.moons.cressidia +alt.planets.uranus.moons.desdemona +alt.planets.uranus.moons.juliet +alt.planets.uranus.moons.miranda +alt.planets.uranus.moons.oberon +alt.planets.uranus.moons.portia +alt.planets.uranus.moons.puck +alt.planets.uranus.moons.sycorax +alt.planets.uranus.moons.titania +alt.planets.uranus.moons.umbriel +alt.planets.venus +alt.planning.transportation +alt.planning.urban +alt.pocket-rocket +alt.podiatry.misc +alt.podiatry.surgery +alt.politics.british +alt.politics.bush +alt.politics.carlos-may +alt.politics.clinton +alt.politics.communism +alt.politics.correct +alt.politics.datahighway +alt.politics.democrats.d +alt.politics.ec +alt.politics.economics +alt.politics.elections +alt.politics.equality +alt.politics.europe.misc +alt.politics.fans.izquierdaunida +alt.politics.gossip +alt.politics.greens +alt.politics.harry-browne +alt.politics.homosexuality +alt.politics.homosexuality.hatemongers.phelps +alt.politics.homosexuality.hatemongers.rev-white +alt.politics.immigration +alt.politics.jaffo +alt.politics.jaffo.dammit +alt.politics.jason-steiner +alt.politics.korea +alt.politics.liberal.bleed.bleed.bleed +alt.politics.liberalism +alt.politics.libertarian +alt.politics.libertarian.creative +alt.politics.libertarian.gay +alt.politics.marijuana +alt.politics.media +alt.politics.metal.anti-christian +alt.politics.micronations +alt.politics.nationalism.black +alt.politics.nationalism.texas +alt.politics.nationalism.white +alt.politics.nationalism.white.announce +alt.politics.neil-simpson +alt.politics.org.batf +alt.politics.org.cia +alt.politics.org.fbi +alt.politics.org.misc +alt.politics.org.nsa +alt.politics.org.nsa.echelon +alt.politics.org.un +alt.politics.perot +alt.politics.radical-left +alt.politics.reform +alt.politics.religion +alt.politics.republicans +alt.politics.rightgrrl +alt.politics.satanism +alt.politics.sex +alt.politics.socialism +alt.politics.socialism.binaries +alt.politics.socialism.democratic +alt.politics.socialism.libertarian +alt.politics.socialism.mao +alt.politics.socialism.trotsky +alt.politics.socialist.nazi +alt.politics.the-revolution +alt.politics.turn-left +alt.politics.usa.congress +alt.politics.usa.constitution +alt.politics.usa.constitution.gun-rights +alt.politics.usa.death-metal +alt.politics.usa.misc +alt.politics.usa.mock.government +alt.politics.usa.newt-gingrich +alt.politics.usa.republican +alt.politics.usa.usa-parliament +alt.politics.white-power +alt.politics.world.federalism +alt.politics.youth +alt.poltics.socialism.democratic +alt.polyamory +alt.pootergeek.lesbian +alt.popcollectief.denbosch +alt.porno.images.homosex +alt.porno.images.lesbo +alt.possessive.its.has.no.apostrophe +alt.postmodern +alt.pot.kettle.black +alt.pota +alt.pothead.john-grubor +alt.pouting.sandwich +alt.poverty +alt.prank-calls +alt.preferedalt +alt.prehensile +alt.president.clinton +alt.president.clinton.important.work.to.do.blowjob.blowjob.mrph.blowjob +alt.president.clinton.penis.intern +alt.previdenza.sociale +alt.prisoner.rights +alt.prisons +alt.prisons.moderated +alt.prisons.officer +alt.privacy +alt.privacy.anon-server +alt.privacy.clipper +alt.private.investigator +alt.pro-wrestling.dx +alt.pro-wrestling.ecw +alt.pro-wrestling.nostalgia +alt.pro-wrestling.nwo +alt.pro-wrestling.wcw +alt.pro-wrestling.wolfpac +alt.pro-wrestling.wwf +alt.projectmng +alt.prophecies.cayce +alt.prophecies.drturi +alt.prophecies.nostradamus +alt.prophecies.sloggy +alt.prose +alt.prose.memoir +alt.prose.postmodern +alt.provider.ibm +alt.prueba +alt.prueba2 +alt.psst.hoy +alt.psycho.jay-denebeim +alt.psychoactives +alt.psychology +alt.psychology.dramatherapy +alt.psychology.help +alt.psychology.jung +alt.psychology.mindmachine +alt.psychology.nlp +alt.psychology.personality +alt.psychology.psychoanalysis +alt.psychology.transpersonal +alt.psychotic.roommates +alt.pt.groups.funex +alt.pub.coffeehouse.amethyst +alt.pub.kacees +alt.pub.oddbins +alt.pub.thistle+joe +alt.pub.wills-place +alt.publish.books +alt.pud +alt.pulp +alt.pumpkin.militia +alt.punk +alt.punk.europe +alt.punk.straight-edge +alt.ql.creative +alt.quake.barrysworld +alt.quake.god.global.all.round.cool.master.of.the.world.who.likes.to.make.up.groups.with.big.names.who.is.it +alt.quake2 +alt.queenfan.irc +alt.quit.smoking.support +alt.quotations +alt.radio +alt.radio.amateur.club.taparc +alt.radio.broadcasting +alt.radio.broadcasting.open +alt.radio.cb.skip +alt.radio.college +alt.radio.digital +alt.radio.family +alt.radio.highschool +alt.radio.international +alt.radio.internet.kcuf +alt.radio.networks.cbc +alt.radio.networks.npr +alt.radio.oldtime +alt.radio.parg +alt.radio.paul-harvey +alt.radio.pirate +alt.radio.scanner +alt.radio.scanner.flame_fest +alt.radio.scanner.uk +alt.radio.stations.wsia +alt.radio.talk +alt.radio.talk.dr-laura +alt.radio.talk.kmpc +alt.radio.talk.richard-dolce +alt.radio.talk.wattenburg +alt.radio.uk +alt.radio.uk.talk-radio +alt.radio.wktu +alt.railroad +alt.railroad.steam +alt.railroad.twofoot +alt.railway.locomotives.uk.class37 +alt.railway.rail-gen.follow-up +alt.random.noise +alt.rap +alt.rap-gdead +alt.rap.cypher +alt.rave +alt.ray +alt.ray.vanlandingham.is.a.stoopid.fuckwit.who.smells.like.shit.and.sucks.mens.cocks +alt.real-estate.aust +alt.real-estate.commercial.az +alt.real-estate.commercial.ca-central +alt.real-estate.commercial.ca-north +alt.real-estate.commercial.ca-south +alt.real-estate.commercial.co +alt.real-estate.commercial.fl-central +alt.real-estate.commercial.fl-north +alt.real-estate.commercial.fl-south +alt.real-estate.commercial.ga +alt.real-estate.commercial.ma +alt.real-estate.commercial.md +alt.real-estate.commercial.mn +alt.real-estate.commercial.mo +alt.real-estate.commercial.nc +alt.real-estate.commercial.nh +alt.real-estate.commercial.nj +alt.real-estate.commercial.nm +alt.real-estate.commercial.ny +alt.real-estate.commercial.oh +alt.real-estate.commercial.or +alt.real-estate.commercial.pa +alt.real-estate.commercial.tx-northeast +alt.real-estate.commercial.tx-northwest +alt.real-estate.commercial.tx-southeast +alt.real-estate.commercial.tx-southwest +alt.realestate.fsob +alt.realtor.relocation +alt.rec.bicycles.fatcity +alt.rec.bicycles.recumbent +alt.rec.brucetrail +alt.rec.camping +alt.rec.collecting.stamps.discuss +alt.rec.collecting.stamps.flame +alt.rec.collecting.stamps.marketplace +alt.rec.crafts.metalworking +alt.rec.hiking +alt.rec.hovercraft +alt.rec.robotica +alt.rec.robotica.es +alt.recipes.babies +alt.recortes +alt.recovery +alt.recovery.aa +alt.recovery.aa_germany +alt.recovery.addiction.gambling +alt.recovery.addiction.sexual +alt.recovery.adult-children +alt.recovery.catholicism +alt.recovery.christian.abuse +alt.recovery.clutter +alt.recovery.codependency +alt.recovery.compulsive-eat +alt.recovery.cow-fetish +alt.recovery.dean-stark +alt.recovery.disease.muppet-crotch +alt.recovery.family+friends +alt.recovery.from-12-steps +alt.recovery.fundamentalism +alt.recovery.lipbalm +alt.recovery.mania.beanie-babies +alt.recovery.mlm +alt.recovery.na +alt.recovery.nettalk +alt.recovery.nicotine +alt.recovery.panic-anxiety.self-help +alt.recovery.procrastinate +alt.recovery.rational +alt.recovery.religion +alt.recovery.small-town +alt.recovery.unitarian-univ +alt.reddingsbrigade +alt.redheads +alt.reform.fresh-start +alt.regional.usa.fl.west-volusia +alt.relationships.deaf-hearing +alt.religio.konfuceo +alt.religion.afterburner +alt.religion.afterlife +alt.religion.all-worlds +alt.religion.amiga +alt.religion.amos +alt.religion.angels +alt.religion.anthony-ciolli +alt.religion.anticrust +alt.religion.apologetics +alt.religion.apparitions +alt.religion.asatru +alt.religion.autos.yugo +alt.religion.ayse-sercan +alt.religion.bahai +alt.religion.broadcast +alt.religion.buddhism.nichiren +alt.religion.buddhism.nkt +alt.religion.buddhism.ris-med +alt.religion.buddhism.theravada +alt.religion.buddhism.tibetan +alt.religion.christian +alt.religion.christian-teen +alt.religion.christian.20-something +alt.religion.christian.adventist +alt.religion.christian.anabaptist.brethren +alt.religion.christian.baptist +alt.religion.christian.biblestudy +alt.religion.christian.boston-church +alt.religion.christian.calvary-chapel +alt.religion.christian.campus-crusade +alt.religion.christian.east-orthodox +alt.religion.christian.elbrujo +alt.religion.christian.episcopal +alt.religion.christian.hypocrisy +alt.religion.christian.intervarsity +alt.religion.christian.last-days +alt.religion.christian.lutheran +alt.religion.christian.methodist +alt.religion.christian.pentecostal +alt.religion.christian.plymouth.brethren +alt.religion.christian.presbyterian +alt.religion.christian.roman-catholic +alt.religion.christian.youth-ministry +alt.religion.christian.ywam +alt.religion.christianity.hypocrisy +alt.religion.clergy +alt.religion.computers +alt.religion.course-miracle +alt.religion.dean-stark +alt.religion.deism +alt.religion.drew-hamilton +alt.religion.druid +alt.religion.eckankar +alt.religion.end-times.prophecies +alt.religion.fishisim +alt.religion.gay-les-bi-tran +alt.religion.gnostic +alt.religion.gnostic.orders +alt.religion.goddess +alt.religion.gods +alt.religion.hindu +alt.religion.islam +alt.religion.islam.shia +alt.religion.jaffo +alt.religion.jain +alt.religion.jehovahs-witn +alt.religion.jewish.daf-discuss +alt.religion.kibology +alt.religion.kibology.is.dead.dead.dead +alt.religion.liet.santoy +alt.religion.louis-nick +alt.religion.macarena +alt.religion.monica +alt.religion.mormon +alt.religion.mormon.fellowship +alt.religion.pagan.evil +alt.religion.pagan.nazi +alt.religion.pagan.texas +alt.religion.paulo-dimas +alt.religion.paulo-dimas.deveras +alt.religion.paulo-dimas.misc +alt.religion.paulo-dimas.newcomers +alt.religion.paulo-dimas.philosophy +alt.religion.paulo-dimas.study +alt.religion.paulo-dimas.temples +alt.religion.paulo-dimas.worship +alt.religion.psychedelic.moderated +alt.religion.rabbet +alt.religion.raelian +alt.religion.ray-karczewski +alt.religion.sabbath-keeper +alt.religion.satanism +alt.religion.scientology +alt.religion.scientology.squick.squick.squick +alt.religion.scientology.xenu +alt.religion.sexuality +alt.religion.shamanism +alt.religion.simpsons +alt.religion.smerpology +alt.religion.spiritism.spiritualism.moderated +alt.religion.subgenius.is.lame +alt.religion.tantra +alt.religion.tolkienology +alt.religion.totology +alt.religion.triplegoddess +alt.religion.unification +alt.religion.unifier.flash-inc +alt.religion.unitarian-univ +alt.religion.universal-life +alt.religion.urantia-book +alt.religion.vaisnava +alt.religion.vim +alt.religion.vran +alt.religion.w-w-chuch-god +alt.religion.w-w-church-god +alt.religion.watchtower +alt.religion.watchtower.judicial +alt.religion.watchtower.reform +alt.religion.wicca +alt.religion.wicca.moderated +alt.religion.zakkology +alt.relocate +alt.research.monroe-inst +alt.restaurants +alt.retail.category.management +alt.retail.loss-prevention +alt.retribution +alt.revenge +alt.revisionism +alt.revolution.american.second +alt.revolution.counter +alt.rhode_island +alt.rmgroup.addict.j.a.y-d.e.n.e.b.e.i.m +alt.rmgroup.d +alt.rmgroup.this.jay-denebeim +alt.robotica +alt.robotica.es +alt.robotwars +alt.rock-n-roll +alt.rock-n-roll.acdc +alt.rock-n-roll.aerosmith +alt.rock-n-roll.asia +alt.rock-n-roll.classic +alt.rock-n-roll.hard +alt.rock-n-roll.metal +alt.rock-n-roll.metal.bad-grrrl +alt.rock-n-roll.metal.black.nazi +alt.rock-n-roll.metal.bruce-dickinson +alt.rock-n-roll.metal.death +alt.rock-n-roll.metal.doom +alt.rock-n-roll.metal.drain +alt.rock-n-roll.metal.gnr +alt.rock-n-roll.metal.groove +alt.rock-n-roll.metal.heavy +alt.rock-n-roll.metal.ironmaiden +alt.rock-n-roll.metal.megadeth +alt.rock-n-roll.metal.metallica +alt.rock-n-roll.metal.motley-crue +alt.rock-n-roll.metal.nihilism +alt.rock-n-roll.metal.personalities +alt.rock-n-roll.metal.personalities.airmaster +alt.rock-n-roll.metal.personalities.brandubh +alt.rock-n-roll.metal.personalities.daemonic +alt.rock-n-roll.metal.personalities.goden +alt.rock-n-roll.metal.personalities.gortician +alt.rock-n-roll.metal.personalities.hatred +alt.rock-n-roll.metal.personalities.pimpbot-5000 +alt.rock-n-roll.metal.philosophy +alt.rock-n-roll.metal.philosophy.evil +alt.rock-n-roll.metal.progressive +alt.rock-n-roll.metal.slayer +alt.rock-n-roll.moderated.crue +alt.rock-n-roll.moderated.crue.moderated.crue.moderated.crue.carlos.kick-ass.newsgroup +alt.rock-n-roll.motley.crue.m +alt.rock-n-roll.oldies +alt.rock-n-roll.stones +alt.rock-n-roll.ufo +alt.rodney-king +alt.romance +alt.romance.chat +alt.romance.chinese +alt.romance.conflict-of-interest +alt.romance.conflict-of-interest.poetry +alt.romance.latinas +alt.romance.mature-adult +alt.romance.online +alt.romance.teen +alt.romance.unhappy +alt.romath +alt.rosalina.love.love.love +alt.rosalina.will.you.marry.me +alt.roundtable +alt.rpg.chesley +alt.rpg.chesley.trials +alt.rpg.imperia +alt.rpg.imperia.imperium +alt.rpg.juanolia +alt.rpg.secfenia +alt.running.out.of.newsgroup.names +alt.rush-limbaugh +alt.rv +alt.rv.airstream +alt.rv.nash +alt.sabmag +alt.sad-people.microsoft.lovers +alt.sad-people.vidders +alt.sadistic +alt.sadistic.dentists +alt.sage.john-grubor +alt.sailing +alt.sailing.asa +alt.sailing.boats.crew +alt.sailing.pbsa +alt.sailing.tall-ships +alt.saladpuncher +alt.sandy.claws +alt.satanism +alt.satanism.art +alt.satanism.murder +alt.satanism.sex +alt.satanville +alt.satellite.direcpc +alt.satellite.direcpc.stupid.moron.dpc-dealers +alt.satellite.direcpc.stupid.moron.dpc-dealers.2k-networks +alt.satellite.radio.europe +alt.satellite.tv.australasia +alt.satellite.tv.crypt +alt.satellite.tv.europe +alt.satellite.tv.forsale +alt.saturday +alt.save.the.earth +alt.sb.programmer +alt.sca.combat.archer +alt.sca.yenta +alt.scarborough +alt.scary.exe.files +alt.schlock +alt.schmuck.follower.dead.bad.lady.novelist +alt.school.homework-help +alt.school.it.stinks +alt.school.mates +alt.schools.lhhs +alt.sci +alt.sci.amateur +alt.sci.astro.eclipses +alt.sci.astro.hale.bopp +alt.sci.criminology +alt.sci.geology.jobs +alt.sci.joe-bay +alt.sci.math.combinatorics +alt.sci.math.design_theory +alt.sci.math.galois_fields +alt.sci.math.probability +alt.sci.math.statistics.prediction +alt.sci.mbe +alt.sci.multi-d +alt.sci.nanotech +alt.sci.natural.phenomena.unusual +alt.sci.physics.acoustics +alt.sci.physics.new-theories +alt.sci.planetary +alt.sci.sociology +alt.sci.tech.indonesian +alt.sci.time-travel +alt.scooter +alt.scott-abraham.sucks +alt.scottish.clans +alt.screw.interlink +alt.sculpture +alt.scum +alt.seafarers +alt.seafarers.deck +alt.seafarers.engineroom +alt.seafarers.ratings +alt.security +alt.security.alarms +alt.security.announce +alt.security.dealers +alt.security.dealers.ads +alt.security.doityourself +alt.security.doityourself.ads +alt.security.espionage +alt.security.index +alt.security.keydist +alt.security.neighborhood +alt.security.pgp +alt.security.terrorism +alt.security.terrorism.atlanta +alt.security.terrorism.flight800 +alt.seduction.fast +alt.sega.genesis +alt.self-esteem +alt.self-improve +alt.self-reliance +alt.september +alt.sewing +alt.sewing.extraspecial.fabric.and.custom.sewing +alt.sewing.mach-embroider +alt.sex +alt.sex.abstinance +alt.sex.advocacy +alt.sex.aliens +alt.sex.alt.syntax.tactical +alt.sex.aluminum.baseball.bat +alt.sex.anal +alt.sex.animals +alt.sex.asphyx +alt.sex.balls +alt.sex.bdragon.and.jimdana +alt.sex.bears +alt.sex.beastiality.jay-denebeim +alt.sex.beer-bottle +alt.sex.ben-mesander +alt.sex.bestiality +alt.sex.bestiality.alix.piantadosi +alt.sex.bestiality.barney +alt.sex.bestiality.hamster.duct-tape +alt.sex.bestiality.pictures +alt.sex.biblical +alt.sex.bondage +alt.sex.bondage.furtoonia +alt.sex.bondage.jay-denebeim +alt.sex.bondage.particle.physics +alt.sex.bondage.sco.unix +alt.sex.boredom +alt.sex.boys +alt.sex.breast +alt.sex.breathless +alt.sex.brothels +alt.sex.cancel +alt.sex.car-crash +alt.sex.carasso +alt.sex.carl.loves.kernal +alt.sex.carl.loves.kernel +alt.sex.cd-rom +alt.sex.children +alt.sex.chris_schaefer.onhold +alt.sex.clinton.bill +alt.sex.clinton.chelsa +alt.sex.clinton.hillary +alt.sex.couples.hetero.interchange.amateur +alt.sex.couples.hetero.interchange.amateur.all-gratis +alt.sex.cthulhu +alt.sex.cu-seeme +alt.sex.cypher +alt.sex.disney +alt.sex.doof +alt.sex.doom.with-sound +alt.sex.drew-hamilton +alt.sex.dyaln +alt.sex.dylan +alt.sex.enemas +alt.sex.erotica +alt.sex.erotica.market.place +alt.sex.erotica.marketplace +alt.sex.escort.ads +alt.sex.escorts.ads +alt.sex.escorts.ads.d +alt.sex.exhibitionism +alt.sex.extropians +alt.sex.fat +alt.sex.femdom +alt.sex.fencing +alt.sex.fetish.agriculture +alt.sex.fetish.amputee +alt.sex.fetish.barbie +alt.sex.fetish.beans +alt.sex.fetish.biting.marv-albert +alt.sex.fetish.boyfeet +alt.sex.fetish.cost.benefit.analysis +alt.sex.fetish.cost.benifit.analysis +alt.sex.fetish.custard +alt.sex.fetish.diapers +alt.sex.fetish.dirty.used.q-tips +alt.sex.fetish.dollari.ven +alt.sex.fetish.drew-barrymore +alt.sex.fetish.drmellow +alt.sex.fetish.fa +alt.sex.fetish.fashion +alt.sex.fetish.feet +alt.sex.fetish.feet.toes.opps +alt.sex.fetish.giants +alt.sex.fetish.hair +alt.sex.fetish.hair.manic-panic-muppet-crotch +alt.sex.fetish.head-librarian +alt.sex.fetish.hermunen +alt.sex.fetish.jello +alt.sex.fetish.kitty.litter +alt.sex.fetish.ladies.short-track.speed-skaters +alt.sex.fetish.linux +alt.sex.fetish.motorcycles +alt.sex.fetish.news-servers +alt.sex.fetish.orientals +alt.sex.fetish.panties +alt.sex.fetish.peterds.momma +alt.sex.fetish.power-rangers.kimberly.tight-spandex +alt.sex.fetish.rmgroup +alt.sex.fetish.rmgroup.jay-denebeim +alt.sex.fetish.robots +alt.sex.fetish.sailor-moon +alt.sex.fetish.scat +alt.sex.fetish.size +alt.sex.fetish.sleepy +alt.sex.fetish.smee +alt.sex.fetish.smoking +alt.sex.fetish.sportswear +alt.sex.fetish.startrek +alt.sex.fetish.the-bob +alt.sex.fetish.thedavid +alt.sex.fetish.tickling +alt.sex.fetish.tinygirls +alt.sex.fetish.tongue +alt.sex.fetish.trent-reznor +alt.sex.fetish.waifs +alt.sex.fetish.watersports +alt.sex.fetish.wednesday +alt.sex.fetish.wet-and-messy +alt.sex.fetish.wet-walrus +alt.sex.fetish.white-mommas +alt.sex.fetish.wrestling +alt.sex.fetish.x-men +alt.sex.fetishes.sleepy +alt.sex.filipina-wives +alt.sex.first-time +alt.sex.fish +alt.sex.furry +alt.sex.gangbang +alt.sex.gaymen.porn +alt.sex.girl.watchers +alt.sex.girls +alt.sex.glory-hole.sites +alt.sex.glory-holes.sites +alt.sex.graphics +alt.sex.guns +alt.sex.hello-kitty +alt.sex.historical +alt.sex.homosexual +alt.sex.incest +alt.sex.intergen +alt.sex.jbinoche +alt.sex.jeff-cantwell +alt.sex.jesus +alt.sex.joey.loves.sheep +alt.sex.jp +alt.sex.kinky.chicago +alt.sex.leri +alt.sex.lesbian.antirush.squick.squick.squawk +alt.sex.magazines +alt.sex.marsha-clark +alt.sex.masterbation +alt.sex.masterbation.pictures.female.teen +alt.sex.masturbation +alt.sex.masturbation.bill-palmer +alt.sex.masturbation.pictures.female.teen +alt.sex.men +alt.sex.menstruation +alt.sex.midgets +alt.sex.miguel-lopes.necrophilia +alt.sex.modem-kamikaze +alt.sex.motss +alt.sex.motss.clamato +alt.sex.movies +alt.sex.mud.darkover.asmodean +alt.sex.mud.sojourn-diku +alt.sex.mythical +alt.sex.nasal-hair +alt.sex.necrophilia +alt.sex.necrophilia.mother-theresa +alt.sex.necrophilia.princess-diana +alt.sex.necrophilia.royal-family +alt.sex.net-abuse.hipcrime +alt.sex.nfs +alt.sex.nigelw.loves.sheep +alt.sex.nudels.me.too +alt.sex.oral +alt.sex.orgy +alt.sex.parper +alt.sex.passwords +alt.sex.pedophilia +alt.sex.pedophilia.boys +alt.sex.pedophilia.girls +alt.sex.pedophilia.jim-kennemur +alt.sex.pedophilia.pictures +alt.sex.pedophilia.swaps +alt.sex.phone +alt.sex.phone.ads +alt.sex.pictures +alt.sex.pictures.d +alt.sex.pictures.female +alt.sex.pictures.male +alt.sex.pictures.nospam +alt.sex.pictures.thedavid +alt.sex.plushies +alt.sex.pre-teens +alt.sex.prevost +alt.sex.prom +alt.sex.prostitution +alt.sex.prostitution.tijuana +alt.sex.ramsey.forum +alt.sex.realdoll +alt.sex.reggie-white.hamster.duct-tape +alt.sex.reptiles +alt.sex.sadurski +alt.sex.safe +alt.sex.senator-exon +alt.sex.services +alt.sex.sexzilla +alt.sex.sexzilla.com +alt.sex.sexzilla.com.bizarre +alt.sex.sexzilla.com.teen +alt.sex.sgml +alt.sex.sheep.baaa.baaa.baaa.moo +alt.sex.sheep.heavyg.glenn +alt.sex.sissy +alt.sex.sissy.slut +alt.sex.skydiving.bondage +alt.sex.sleeping-girls +alt.sex.sm.fig +alt.sex.snakes +alt.sex.snuff.cannibalism +alt.sex.society.indonesia +alt.sex.sonja +alt.sex.sounds +alt.sex.spam +alt.sex.spanking +alt.sex.stories +alt.sex.stories.babies +alt.sex.stories.bondage +alt.sex.stories.cuckold +alt.sex.stories.d +alt.sex.stories.gay +alt.sex.stories.gay.moderated +alt.sex.stories.hetero +alt.sex.stories.incest +alt.sex.stories.moderated +alt.sex.stories.so +alt.sex.stories.tg +alt.sex.strip-clubs +alt.sex.strippers.jobs +alt.sex.super-size +alt.sex.swingers +alt.sex.swingers.thedavid +alt.sex.swingers.uk +alt.sex.tasteless +alt.sex.teddy-ruxpin +alt.sex.teens +alt.sex.tel-bailliet +alt.sex.telephone +alt.sex.telephone.ads +alt.sex.testeless +alt.sex.toonces +alt.sex.toons +alt.sex.toupee +alt.sex.trans +alt.sex.trio.hetero.for-she.amateur +alt.sex.trio.hetero.for-she.amateur.all-gratis +alt.sex.ugly +alt.sex.uncut +alt.sex.unnatural-acts.jesse-helms +alt.sex.video-swap +alt.sex.virtual.internet.tele-coitus +alt.sex.voxmeet +alt.sex.voyeurism +alt.sex.wanted +alt.sex.wanted.escorts.ads +alt.sex.wanted.escorts.ads.d +alt.sex.wanted.models +alt.sex.wanted.thedavid +alt.sex.watersports +alt.sex.weight-gain +alt.sex.wizards +alt.sex.women +alt.sex.www.sexzilla.com +alt.sex.young +alt.sex.zoophile +alt.sex.zoophilia +alt.sexo.relatos +alt.sexual.abuse.recovery +alt.sexual.abuse.recovery.moderated +alt.sexy.bald.captains +alt.sexzilla +alt.sexzilla.com +alt.sf.scale-models +alt.sf4m +alt.shared-reality.sf-and-fantasy +alt.shared-reality.startrek.klingon +alt.shenanigans +alt.shoe.lesbians +alt.shoe.lesbians.moderated +alt.showbiz.gossip +alt.shut.the.hell.up.geek +alt.shut.the.hell.up.geek.andrew-mckay +alt.shut.the.hell.up.geek.phil-oliver +alt.shut.the.hell.up.geek.yiri-t-kohl +alt.shut.the.hell.up.jay-denebeim +alt.sigsnip.recovery +alt.silly-group.im-matt +alt.silly-group.persian +alt.silly.group.names.d +alt.silly.little.newsgroup +alt.sink.the.ship +alt.siol.test +alt.sjat +alt.skate +alt.skate-board +alt.skate.figure +alt.skeezewockers +alt.skeptic.magazine +alt.skeptic.society +alt.skincare +alt.skincare.acne +alt.skinheads +alt.skinheads.are.sexxxy.bastards +alt.skinheads.jay-denebeim +alt.skinheads.kill.jenn-starkman +alt.skinheads.moderated +alt.skinheads.personals +alt.skunks +alt.skuznet.anonymous +alt.skuznet.general +alt.skuznet.web2news +alt.sl9 +alt.slack +alt.slack.eraserhead +alt.slack.mid-atlantic.crusades +alt.slack.midatlantic.crusades +alt.slack.sputum +alt.slak +alt.slak.binariez +alt.sleazy-weasel +alt.smee +alt.smee.smeeter.smee.smee.smee.smeeter.smee +alt.smokers +alt.smokers.camel +alt.smokers.camel.filters.100s +alt.smokers.cigars +alt.smokers.cigars-rectal +alt.smokers.cigars.clubhouse +alt.smokers.cigars.cuban +alt.smokers.cigars.flame +alt.smokers.cigars.marketplace +alt.smokers.cigars.reviews +alt.smokers.cigars.smoking +alt.smokers.glamour +alt.smokers.glamour.cigars +alt.smokers.herfers +alt.smokers.marlboro +alt.smokers.pipes +alt.smouldering.frat.house +alt.snail-mail +alt.snizzlebucket +alt.snowchyld.bounce.bounce.bounce +alt.snowmobiles +alt.snowmobiles.old +alt.soc.germans.overseas.tw +alt.soc.indonesia.mature +alt.soc.reformation +alt.society.anarchy +alt.society.boomers +alt.society.civil-liberty +alt.society.conservatism +alt.society.economic-dev +alt.society.fruitopia +alt.society.futures +alt.society.generation-x +alt.society.generation-x.ls-bumgarner +alt.society.homeless +alt.society.kindness +alt.society.labor-unions +alt.society.liberalism +alt.society.mental-health +alt.society.modern-life +alt.society.monarchy +alt.society.neutopia +alt.society.nottingham +alt.society.outsiders.uk +alt.society.resistance +alt.society.revolution +alt.society.sovereign +alt.society.sustainable +alt.society.underwear +alt.society.zeitgeist +alt.soda.moxie +alt.soft-sys.avantgo +alt.soft-sys.corel.draw +alt.solar.photovoltaic +alt.solar.thermal +alt.solaris.x86 +alt.solipsism +alt.solly +alt.something.good +alt.soulmates +alt.sounds.midi.originals +alt.source-code.mac +alt.sources +alt.sources.crypto +alt.sources.d +alt.sources.mac +alt.sources.wanted +alt.southampton.goth.commandoes +alt.spacebastards +alt.spam +alt.spamhaus +alt.spamhaus.audio +alt.spamhaus.video +alt.spammers.post.here +alt.spanking.reality +alt.spanners +alt.spartacus.netscape.bologna +alt.speech.debate +alt.spippolatori +alt.spiritual.enhancement +alt.spirituality.circle +alt.spirituality.radical-faerie +alt.spleen +alt.spooky +alt.sport.adv-racing +alt.sport.air-guns +alt.sport.air-hockey +alt.sport.basketball.coaching +alt.sport.basketball.nba.orl-magic +alt.sport.basketball.pro.fantasy +alt.sport.bowling +alt.sport.bungee +alt.sport.darts +alt.sport.dean-stark +alt.sport.dive.rebreather +alt.sport.dragracing +alt.sport.falconry +alt.sport.foosball +alt.sport.go-ped +alt.sport.gymnast.moceanu +alt.sport.hockey.women +alt.sport.horse-racing +alt.sport.horse-racing.systems +alt.sport.icehockey.women +alt.sport.jet-ski +alt.sport.lacrosse +alt.sport.lasertag +alt.sport.lasertag.laserquest +alt.sport.littleleague.admin +alt.sport.llama-tipping +alt.sport.officiating +alt.sport.paintball +alt.sport.photon +alt.sport.pool +alt.sport.qzar +alt.sport.racquetball +alt.sport.roller-derby +alt.sport.shooting +alt.sport.shooting.silhouette +alt.sport.snooker +alt.sport.soccer.indoor +alt.sport.squash +alt.sport.street-hockey +alt.sport.synchro +alt.sport.table-tennis +alt.sport.table-tennis.espanol +alt.sport.table-tennis.francais +alt.sport.table-tennis.german.deutsch +alt.sport.table-tennis.italiano +alt.sport.table-tennis.nederlands.dutch +alt.sport.table-tennis.portuguese +alt.sport.table-tennis.suomeksi +alt.sport.track-field +alt.sport.tractorpulling +alt.sport.weightlifting +alt.sport.weightlifting.eas.12week.contest +alt.sport.wrestling.amateur +alt.sport.wrestling.amateur.gay +alt.sport.yo-yo +alt.sports +alt.sports.badminton +alt.sports.baseball.atlanta-braves +alt.sports.baseball.balt-orioles +alt.sports.baseball.bos-redsox +alt.sports.baseball.calif-angels +alt.sports.baseball.card-traders +alt.sports.baseball.chi-whitesox +alt.sports.baseball.chicago-cubs +alt.sports.baseball.cinci-reds +alt.sports.baseball.cleve-indians +alt.sports.baseball.col-rockies +alt.sports.baseball.detroit-tigers +alt.sports.baseball.fla-marlins +alt.sports.baseball.houston-astros +alt.sports.baseball.kc-royals +alt.sports.baseball.la-dodgers +alt.sports.baseball.memorabilia +alt.sports.baseball.minor-leagues +alt.sports.baseball.mke-brewers +alt.sports.baseball.mn-twins +alt.sports.baseball.montreal-expos +alt.sports.baseball.ny-mets +alt.sports.baseball.ny-yankees +alt.sports.baseball.oakland-as +alt.sports.baseball.phila-phillies +alt.sports.baseball.pitt-pirates +alt.sports.baseball.sd-padres +alt.sports.baseball.sea-mariners +alt.sports.baseball.sf-giants +alt.sports.baseball.stl-cardinals +alt.sports.baseball.tb-devilrays +alt.sports.baseball.texas-rangers +alt.sports.baseball.tor-bluejays +alt.sports.basketball.college.big-5 +alt.sports.basketball.ivy.penn +alt.sports.basketball.nba.atlanta-hawks +alt.sports.basketball.nba.boston-celtics +alt.sports.basketball.nba.char-hornets +alt.sports.basketball.nba.chicago-bulls +alt.sports.basketball.nba.clev-cavaliers +alt.sports.basketball.nba.dallas-mavs +alt.sports.basketball.nba.denver-nuggets +alt.sports.basketball.nba.det-pistons +alt.sports.basketball.nba.gs-warriors +alt.sports.basketball.nba.hou-rockets +alt.sports.basketball.nba.ind-pacers +alt.sports.basketball.nba.la-clippers +alt.sports.basketball.nba.la-lakers +alt.sports.basketball.nba.miami-heat +alt.sports.basketball.nba.mil-bucks +alt.sports.basketball.nba.mn-wolves +alt.sports.basketball.nba.nj-nets +alt.sports.basketball.nba.orlando-magic +alt.sports.basketball.nba.phila-76ers +alt.sports.basketball.nba.phx-suns +alt.sports.basketball.nba.port-blazers +alt.sports.basketball.nba.sa-spurs +alt.sports.basketball.nba.sac-kings +alt.sports.basketball.nba.seattle-sonics +alt.sports.basketball.nba.tor-raptors +alt.sports.basketball.nba.utah-jazz +alt.sports.basketball.nba.vanc-grizzlies +alt.sports.basketball.nba.wash-bullets +alt.sports.basketball.pro.ny-knicks +alt.sports.college.acc +alt.sports.college.acc.unc +alt.sports.college.america-east +alt.sports.college.atl10 +alt.sports.college.big-12 +alt.sports.college.big-east +alt.sports.college.big10 +alt.sports.college.conference-usa +alt.sports.college.hawgball +alt.sports.college.ivy-league +alt.sports.college.lsu +alt.sports.college.michigan +alt.sports.college.nebraska.sucks.sucks.sucks +alt.sports.college.notre-dame +alt.sports.college.ohio-state +alt.sports.college.ohio-state.football +alt.sports.college.pac-10 +alt.sports.college.sec +alt.sports.college.sec.kentucky +alt.sports.college.sec.tennessee +alt.sports.college.seton-hall +alt.sports.college.syracuse +alt.sports.college.utexas +alt.sports.darts +alt.sports.football +alt.sports.football.arena +alt.sports.football.college.fsu-seminoles +alt.sports.football.mn-vikings +alt.sports.football.oak-raiders +alt.sports.football.pro +alt.sports.football.pro.ariz-cardinals +alt.sports.football.pro.atl-falcons +alt.sports.football.pro.baltimore +alt.sports.football.pro.buffalo-bills +alt.sports.football.pro.car-panthers +alt.sports.football.pro.chicago-bears +alt.sports.football.pro.cinci-bengals +alt.sports.football.pro.cleve-browns +alt.sports.football.pro.dallas-cowboys +alt.sports.football.pro.dallas-cowboys.erik.williams.rape.rape.rape +alt.sports.football.pro.denver-broncos +alt.sports.football.pro.detroit-lions +alt.sports.football.pro.gb-packers +alt.sports.football.pro.houston-oilers +alt.sports.football.pro.indy-colts +alt.sports.football.pro.jville-jaguars +alt.sports.football.pro.kc-chiefs +alt.sports.football.pro.la-raiders +alt.sports.football.pro.la-rams +alt.sports.football.pro.miami-dolphins +alt.sports.football.pro.ne-patriots +alt.sports.football.pro.no-saints +alt.sports.football.pro.ny-giants +alt.sports.football.pro.ny-jets +alt.sports.football.pro.oak-raiders +alt.sports.football.pro.phila-eagles +alt.sports.football.pro.phoe-cardinals +alt.sports.football.pro.pitt-steelers +alt.sports.football.pro.sd-chargers +alt.sports.football.pro.sea-seahawks +alt.sports.football.pro.sf-49ers +alt.sports.football.pro.stl-rams +alt.sports.football.pro.tampabay-bucs +alt.sports.football.pro.tennessee +alt.sports.football.pro.wash-redskins +alt.sports.gaelic-games +alt.sports.greed +alt.sports.gymnastics +alt.sports.hockey.ahl +alt.sports.hockey.cohl +alt.sports.hockey.echl +alt.sports.hockey.fantasy +alt.sports.hockey.hclugano +alt.sports.hockey.ihl +alt.sports.hockey.ihl.manitoba-moose +alt.sports.hockey.junior +alt.sports.hockey.nhl.atl-thrashers +alt.sports.hockey.nhl.boston-bruins +alt.sports.hockey.nhl.buffalo-sabres +alt.sports.hockey.nhl.chat +alt.sports.hockey.nhl.chi-blackhawks +alt.sports.hockey.nhl.clgry-flames +alt.sports.hockey.nhl.col-avalanche +alt.sports.hockey.nhl.dallas-stars +alt.sports.hockey.nhl.det-redwings +alt.sports.hockey.nhl.edm-oilers +alt.sports.hockey.nhl.fla-panthers +alt.sports.hockey.nhl.hford-whalers +alt.sports.hockey.nhl.la-kings +alt.sports.hockey.nhl.mn-wild +alt.sports.hockey.nhl.mtl-canadiens +alt.sports.hockey.nhl.nash-predators +alt.sports.hockey.nhl.nj-devils +alt.sports.hockey.nhl.ny-islanders +alt.sports.hockey.nhl.ny-rangers +alt.sports.hockey.nhl.ott-senators +alt.sports.hockey.nhl.phila-flyers +alt.sports.hockey.nhl.phx-coyotes +alt.sports.hockey.nhl.pit-penguins +alt.sports.hockey.nhl.pitt-penguins +alt.sports.hockey.nhl.que-nordiques +alt.sports.hockey.nhl.sj-sharks +alt.sports.hockey.nhl.stl-blues +alt.sports.hockey.nhl.tor-mapleleafs +alt.sports.hockey.nhl.vanc-canucks +alt.sports.hockey.nhl.wash-capitals +alt.sports.hockey.nhl.winnipeg-jets +alt.sports.hockey.rhi +alt.sports.nba.basketball.wash-wizards +alt.sports.olympics.3000 +alt.sports.radio.the-ticket +alt.sports.soccer.arsenal +alt.sports.soccer.celtic +alt.sports.soccer.coventry-city +alt.sports.soccer.derby.county +alt.sports.soccer.euronet.tournament +alt.sports.soccer.european +alt.sports.soccer.european.uk +alt.sports.soccer.european.uk.no-bigotry +alt.sports.soccer.european.uk.no-scots +alt.sports.soccer.european.uk.premiership +alt.sports.soccer.everton +alt.sports.soccer.hearts +alt.sports.soccer.liverpool +alt.sports.soccer.manchester.united +alt.sports.soccer.manchester.united.scum-haters +alt.sports.soccer.non-league +alt.sports.soccer.portsmouth.footbll.club +alt.sports.soccer.sunderland +alt.sports.soccer.worldcup.england +alt.sports.soccer.worldcup2002 +alt.sports.soccer.worldcup98 +alt.sports.spurs +alt.stagecraft +alt.stamps +alt.stamps.www.philatelic.com +alt.stan-kalisch.no-ethics +alt.stanley.j.kalish.has.two.feet.and.a.mustache.and.smells.like.tabasco.sauce +alt.star-chamber +alt.star-chamber.louise.woodward +alt.staralliance +alt.starfleet.primedirective.rpg +alt.starfleet.rpg +alt.starfleet.rpg.german +alt.startrek.bajoran +alt.startrek.books +alt.startrek.borg +alt.startrek.cardassian +alt.startrek.creative +alt.startrek.creative.all-ages +alt.startrek.creative.erotica +alt.startrek.creative.erotica.moderated +alt.startrek.imperial +alt.startrek.klingon +alt.startrek.role-playing +alt.startrek.romulan +alt.startrek.rpg.gsc +alt.startrek.soul.rpg +alt.startrek.steg +alt.startrek.teroknor +alt.startrek.tos.trekmuse +alt.startrek.trill +alt.startrek.uss-amagosa +alt.startrek.vs.dr-who +alt.startrek.vs.starwars +alt.startrek.vulcan +alt.starwars.leagues.euro-fighter +alt.starwars.xvt +alt.steinberg.cubase +alt.stereo +alt.stereo.awareness +alt.stereo.bigot-enabler +alt.stereo.buddha +alt.stereo.caesium +alt.stereo.caesium.toast +alt.stereo.canadian.humour +alt.stereo.crescent.oblong-juice +alt.stereo.cuddly.subgenii +alt.stereo.curveball.halogen +alt.stereo.death.bork.bork.bork +alt.stereo.disappointment.in.a.can +alt.stereo.embargo.bill-palmer +alt.stereo.golf-stains +alt.stereo.gordita +alt.stereo.grape-shuttle.rant +alt.stereo.grape-shuttle.sanctum +alt.stereo.grape-shuttle.silence +alt.stereo.guest.sheep +alt.stereo.hard-boiled.planets +alt.stereo.heebie-jeebies +alt.stereo.karl-malden.nose +alt.stereo.kia +alt.stereo.love-removal.machine +alt.stereo.meow +alt.stereo.mexico.bandwidth +alt.stereo.nuke.tasmania +alt.stereo.placekicker.cornstarch +alt.stereo.second.sakura +alt.stereo.soybean +alt.stereo.spork +alt.stereo.stoopid.cn-tower +alt.stereo.therapy-slime +alt.stereo.thursday.evening +alt.stereo.toast +alt.stereo.toast.with-cheese +alt.stereo.viagra +alt.steve-walter +alt.stink +alt.stolen.property +alt.stonecarvers +alt.stories.amateur +alt.stories.erotic +alt.stories.incest +alt.stories.transformation +alt.stories.urban-harvest +alt.stormfront.bbs +alt.student.affairs.net +alt.students.aberdeen +alt.students.nontraditional +alt.stupid-ass.bill-palmer +alt.stupid.idiots +alt.stupid.morons +alt.stupidass +alt.stupidity +alt.stupidity.me-too +alt.stupidity.spatch +alt.sublime +alt.sublime.d +alt.subspace +alt.sufi +alt.suicide.holiday +alt.suicide.methods +alt.suicide.recovery +alt.sunday +alt.super.nes +alt.superhelp +alt.supermodels +alt.supermodels.cindy-crawford +alt.support +alt.support.abortion +alt.support.abuse-partners +alt.support.acre-shifting +alt.support.addiction +alt.support.addisons +alt.support.adoption.advocacy +alt.support.agoraphobia +alt.support.aids.partners +alt.support.alzheimers +alt.support.amputee +alt.support.angioplasty +alt.support.anhedonia +alt.support.anxiety-panic +alt.support.arthritis +alt.support.arthritis.risg-spondy.info +alt.support.arthritis.spondyloarthro.moderated +alt.support.artists-way +alt.support.asthma +alt.support.asthma.buteyko +alt.support.ataxia +alt.support.attn-deficit +alt.support.attn-deficit.doesnt-exist +alt.support.attn-deficit.mates +alt.support.autism +alt.support.bells-palsy +alt.support.big-folks +alt.support.birth-parent +alt.support.boy-lovers +alt.support.breast-implant +alt.support.breast-implant.moderated +alt.support.breastfeeding +alt.support.bruderhof +alt.support.cancer +alt.support.cancer.breast +alt.support.cancer.prostate +alt.support.cancer.testicular +alt.support.celiac +alt.support.cerebral-palsy +alt.support.childfree +alt.support.childfree.moderated +alt.support.chronic-hives +alt.support.chronic-pain +alt.support.crohns-colitis +alt.support.crossdressing +alt.support.crossliving +alt.support.dental-phobia +alt.support.depression +alt.support.depression.manic +alt.support.depression.medication +alt.support.depression.recovery +alt.support.depression.recovery.sanctuary +alt.support.depression.seasonal +alt.support.depression.teens +alt.support.desupernet +alt.support.dev-delays +alt.support.diabetes.kids +alt.support.diet +alt.support.diet.fit-for-life +alt.support.diet.low-carb +alt.support.diet.low-fat +alt.support.diet.paleolithic +alt.support.diet.rx +alt.support.diet.zone +alt.support.disabled.artists +alt.support.disabled.caregivers +alt.support.disabled.sexuality +alt.support.disorders.neurological +alt.support.dissociation +alt.support.divorce +alt.support.divorce.jewish +alt.support.domestic-violence +alt.support.drug-abuse +alt.support.dwarfism +alt.support.dying-well +alt.support.dying-well.moderated +alt.support.dyspraxia +alt.support.dystonia +alt.support.eating-disord +alt.support.endometriosis +alt.support.epilepsy +alt.support.ex-cult +alt.support.ex-cult.siddha-yoga +alt.support.food-allergies +alt.support.foster-parents +alt.support.girl-lovers +alt.support.glaucoma +alt.support.grief +alt.support.grief.pet-loss +alt.support.grief.suicide +alt.support.headaches.migraine +alt.support.hearing-loss +alt.support.heart-defects +alt.support.heartburn +alt.support.hemophilia +alt.support.hepatitis-c +alt.support.herpes +alt.support.hiatal-hernia +alt.support.hospice +alt.support.host-u-internet +alt.support.hypermobility +alt.support.ibs +alt.support.impotence +alt.support.incest +alt.support.incontinence +alt.support.inter-cystitis +alt.support.intergendered +alt.support.intimacy-reclaim +alt.support.invertebrate +alt.support.ipl-recovery +alt.support.ipl-recovery.its.his.fault.no.its.his +alt.support.jaw-disorders +alt.support.jock-strap +alt.support.kidney-failure +alt.support.learning-disab +alt.support.leprosy +alt.support.loneliness +alt.support.lupus +alt.support.marfan +alt.support.marriage +alt.support.menopause +alt.support.menopause.husbands +alt.support.ms-recovery +alt.support.mult-sclerosis +alt.support.mult-sclerosis.alternatives +alt.support.myasthe-gravis +alt.support.narcolepsy +alt.support.nf +alt.support.non-smokers +alt.support.non-smokers.moderated +alt.support.norplant +alt.support.obesity +alt.support.ocd +alt.support.opp-defiant +alt.support.ostomy +alt.support.parents.with-custody +alt.support.pco +alt.support.personality +alt.support.personality.schizoid +alt.support.post-polio +alt.support.premature-baby +alt.support.prostate.prostatitis +alt.support.pulmonary +alt.support.rape-survivors +alt.support.relationships.long-distance +alt.support.road-rage +alt.support.rsd +alt.support.schizophrenia +alt.support.scleroderma +alt.support.self-esteem +alt.support.self-harm +alt.support.sex-workers +alt.support.sexreassign +alt.support.short +alt.support.shyness +alt.support.single-parents +alt.support.sinusitis +alt.support.skin-diseases +alt.support.skin-diseases.hidradenitis +alt.support.skin-diseases.psoriasis +alt.support.sleep-disorder +alt.support.social-phobia +alt.support.spina-bifida +alt.support.spousal-abuse.jay-denebeim +alt.support.srs +alt.support.srs.celeste +alt.support.srs.f-to-m +alt.support.srs.m-to-f +alt.support.srs.misc +alt.support.step-parents +alt.support.stop-smoking +alt.support.stuttering +alt.support.survivors.prozac +alt.support.tall +alt.support.telecommute +alt.support.thyroid +alt.support.tinnitus +alt.support.tourette +alt.support.trauma-ptsd +alt.support.tuberculosis +alt.support.turner-syndrom +alt.support.vasectomy +alt.support.warez.recovery +alt.surfing +alt.surfing.ausnz +alt.surfing.bodyboard +alt.surfing.europe +alt.surfing.europe.uk +alt.surfing.hawaii +alt.surfing.longboard +alt.surfing.luddite.homophobe +alt.surfing.usa +alt.surrealism +alt.surveyor +alt.survival.millenium +alt.survival.year2000 +alt.sustainable.agriculture +alt.swedish.chef.bork.bork.bork +alt.swingers +alt.sylvia-saint +alt.sylvia-saint.multimedia +alt.syncronys +alt.syntax.tactical +alt.syquest +alt.sys +alt.sys.abox +alt.sys.amiga.blitz +alt.sys.amiga.demos +alt.sys.amiga.e +alt.sys.amiga.miami +alt.sys.amiga.thor +alt.sys.intergraph +alt.sys.mac.newuser-help +alt.sys.pc-clone.acer +alt.sys.pc-clone.compaq +alt.sys.pc-clone.dell +alt.sys.pc-clone.gateway2000 +alt.sys.pc-clone.micron +alt.sys.pc-clone.packardbell +alt.sys.pc-clone.zeos +alt.sys.pdp10 +alt.sys.pdp11 +alt.sys.pdp8 +alt.sys.perq +alt.sys.sun +alt.sysadmin.recovery +alt.table-tennis.mike-lewis +alt.taiwan.republic +alt.taker +alt.talk.bestiality +alt.talk.bfd +alt.talk.charlie-witt +alt.talk.commonwealth +alt.talk.creationism +alt.talk.esperanto +alt.talk.korean +alt.talk.mended-drum +alt.talk.miet.mp.g3 +alt.talk.prisons.moderated +alt.talk.rec.soc.biz.news.comp.humanities.meow.misc.moderated.meow +alt.talk.royalty +alt.talk.ulster +alt.talk.weather +alt.talk.weather.snow +alt.talk.year2000 +alt.talk.zoophilia +alt.talkers.cruise +alt.talkers.ewtoo +alt.talkers.jeamland +alt.talkers.joot +alt.talkers.ncohafmuta +alt.talkers.nuts +alt.talkers.programming +alt.talkers.snowplains +alt.tamsyn.die.die.die +alt.tanya.shalayeva +alt.tarot +alt.tasteless +alt.tasteless.bottomfeeders +alt.tasteless.hank-becker +alt.tasteless.jokes +alt.tasteless.penis +alt.tasteless.pictures +alt.tastless.jokes +alt.taxi.world +alt.tea +alt.team11.techtips +alt.tech-gadgets +alt.tech-support.recovery +alt.tech.digital-tv.select401 +alt.technology.misc +alt.technology.smartcards +alt.teens +alt.teens.advice +alt.teens.anti-idiot +alt.teens.gay +alt.teens.girls +alt.teens.intelligent.insanity +alt.teens.lesbian +alt.teens.parents +alt.teens.penpals +alt.teens.penpals.canada +alt.teens.penpals.icq +alt.teens.poetry.and.stuff +alt.teens.sexuality +alt.teenstation.bollywood +alt.telaviv +alt.telecom.phones.plain-tariff +alt.telemarketing-professionals +alt.telescopes.meade.lx200 +alt.teletext.megazine +alt.telia-suger +alt.tennis +alt.terry.knab.is.a.twat +alt.test +alt.test-ns +alt.test.a +alt.test.aaronw +alt.test.abc.xyz.lmn +alt.test.big.al +alt.test.binaries +alt.test.cjc +alt.test.clienttest +alt.test.clienttest3 +alt.test.cmsg +alt.test.control.approved.header +alt.test.d +alt.test.demon.nl +alt.test.ds +alt.test.fest +alt.test.fishing +alt.test.fishing.spin +alt.test.flyfishing +alt.test.group +alt.test.headers +alt.test.hello-world +alt.test.hulabaloo +alt.test.ignore.yes.its.that.easy +alt.test.jamie +alt.test.mis3 +alt.test.my.new.group +alt.test.not-r +alt.test.one +alt.test.only +alt.test.paratransit +alt.test.pope-john-paul-ii +alt.test.signature +alt.test.test +alt.test.test.jojo +alt.test.test.wow +alt.test.tsetse +alt.test.two +alt.test.wombat +alt.test.yeah +alt.test.yer.posts +alt.testing.dammit +alt.testing.it +alt.testing.testing +alt.tests.high-school.new-york.regents +alt.tfn.flame +alt.tfn.flame.dork +alt.tfn.flame.dork.allisat +alt.thanatos +alt.thanksgiving.turkey.cockadoodledoo +alt.the-chaps +alt.thebird +alt.thebird.copwatch +alt.thebird.hippie +alt.thebird.liberal +alt.thebird.liberal-communists +alt.theosophy +alt.there.is.only.one.newgrouper.in.this.town.and.his.name.sure.aint.jeffery.jeffary.jeffory.boyd +alt.think.tank +alt.thinking.hurts +alt.thinkquest +alt.this.is.yet.another.test +alt.this.newsgroup.has.a.really.long.name.just.to.frustrate.jay-denebeim.fan.rupert-hangnail.romath.admin.net-abuse.usenet.fan.karl-malden.nose +alt.this.sucks +alt.thought.southern +alt.thrash +alt.thursday +alt.tickling +alt.ticklish.guys.alex-rose +alt.ticklish.guys.eric-miller +alt.tiernan +alt.timewasters.roddel +alt.timothy.sutter +alt.tinygirls +alt.tira +alt.titty.fuck.the.skull.of.oliver1 +alt.tmo +alt.toilet-paper.1-ply +alt.toilet-paper.2-ply +alt.toilet-paper.3-ply +alt.toilet-paper.leaves +alt.toilet-paper.shirtsleeve +alt.tony-net +alt.tools.repair+advice +alt.toon-pics +alt.topper.pantscat.spank.spank.spank +alt.toronto-jews +alt.torture +alt.tos.members.d +alt.townhouse.phillip-st +alt.toys.furby +alt.toys.gi-joe +alt.toys.gi-joe.1980s +alt.toys.hi-tech +alt.toys.lego +alt.toys.marbles.bc +alt.toys.my-little-pony +alt.toys.transformers +alt.toys.transformers.classic.moderated +alt.toys.transformers.fanfic +alt.toys.transformers.marketplace +alt.toys.virtual-pets +alt.trade.spareparts +alt.trades.building.construction.canada +alt.trades.construction.canadian +alt.trades.construction.us +alt.traditional.witchcraft +alt.training.technology +alt.transformation.stories +alt.transgendered +alt.transgendered.jeffy-boyd +alt.travel.canada +alt.travel.road-trip +alt.travel.uk.air +alt.travel.uk.marketplace +alt.treasure.hunting +alt.treasurequest.com +alt.trebel +alt.trebel.country +alt.trebel.country.france +alt.trebel.country.netherlands +alt.trebel.demos +alt.trebel.diskmag +alt.trebel.music +alt.trebel.party +alt.trold +alt.troll +alt.trucks.ford +alt.true-crime +alt.truntfest +alt.tuesday +alt.turin-shroud +alt.turismo.camper +alt.tv +alt.tv.3djam-tv +alt.tv.3rd-rock +alt.tv.7th-heaven +alt.tv.a-team +alt.tv.aaron-spelling +alt.tv.ab-fab +alt.tv.absolutely-fabulous +alt.tv.adam-12 +alt.tv.aeon-flux +alt.tv.airwolf +alt.tv.alf +alt.tv.ally-mcbeal +alt.tv.ally-mcbeal.uk +alt.tv.amer-gothic +alt.tv.angel +alt.tv.animaniacs +alt.tv.animaniacs.pinky-brain +alt.tv.another-world +alt.tv.avengers +alt.tv.babylon-5 +alt.tv.barney +alt.tv.baywatch +alt.tv.beakmans-world +alt.tv.beauty+beast +alt.tv.beavis-n-butthead +alt.tv.bh90210 +alt.tv.blues-clues +alt.tv.bnn +alt.tv.bold-beautiful +alt.tv.boston-common +alt.tv.brady-bunch +alt.tv.brimstone +alt.tv.brisco-county +alt.tv.broadcasting +alt.tv.buddy-faro +alt.tv.buffy-v-slayer +alt.tv.buffy-v-slayer.creative +alt.tv.california-dreams +alt.tv.caroline-city +alt.tv.cartoon-network +alt.tv.cartoon-network.toonami +alt.tv.cell-block-h +alt.tv.charmed +alt.tv.chicago-hope +alt.tv.chips +alt.tv.christy +alt.tv.clueless +alt.tv.comedy-central +alt.tv.commercials +alt.tv.cow-n-chicken +alt.tv.crime-drama +alt.tv.cupid +alt.tv.dallas +alt.tv.daria +alt.tv.dark-skies +alt.tv.dark_shadows +alt.tv.dawsons-creek +alt.tv.dawsons-creek.sucks +alt.tv.days-of-our-lives +alt.tv.daytime-shows +alt.tv.dean-stark +alt.tv.dharma-greg +alt.tv.dinosaurs +alt.tv.dinosaurs.barney.die.die.die +alt.tv.discovery.canada +alt.tv.dr-katz +alt.tv.dr-quinn +alt.tv.duckman +alt.tv.due-south +alt.tv.due-south.creative +alt.tv.early-edition +alt.tv.earth2 +alt.tv.eek-the-cat +alt.tv.emergency +alt.tv.er +alt.tv.er.creative +alt.tv.expedientes-x +alt.tv.familyguy +alt.tv.farscape +alt.tv.father-ted +alt.tv.father_ted +alt.tv.felicity +alt.tv.first-wave +alt.tv.food-network +alt.tv.fools-and-horses +alt.tv.forever-knight +alt.tv.foxab +alt.tv.frasier +alt.tv.freakazoid +alt.tv.friends +alt.tv.friends.northamerica +alt.tv.futurama +alt.tv.game-shows +alt.tv.game-shows.price-is-right +alt.tv.gerbert +alt.tv.gold-monkey +alt.tv.happy-hour +alt.tv.hercules +alt.tv.hermans-head +alt.tv.hey-arnold +alt.tv.highlander +alt.tv.hogans-heroes +alt.tv.home-and-away +alt.tv.home-imprvment +alt.tv.hometime +alt.tv.homicide +alt.tv.ilovelucy +alt.tv.infomercials +alt.tv.iron-chef +alt.tv.jerry-springer +alt.tv.just-shoot-me +alt.tv.kids-in-hall +alt.tv.kids-inc +alt.tv.kindred +alt.tv.king-of-hill +alt.tv.knight-rider +alt.tv.kungfu +alt.tv.lafemme-nikita +alt.tv.law-and-order +alt.tv.lexx +alt.tv.liquid-tv +alt.tv.lois-n-clark +alt.tv.lois-n-clark.fanfic +alt.tv.lost-in-space.danger.will-robinson.danger.danger.danger +alt.tv.macross +alt.tv.mad-about-you +alt.tv.magnificent-7 +alt.tv.magnum-pi +alt.tv.mannix +alt.tv.martha-stewart +alt.tv.martial-law +alt.tv.mash +alt.tv.mathnet +alt.tv.max-headroom +alt.tv.melrose-place +alt.tv.miami-vice +alt.tv.millenium +alt.tv.millenium.uk +alt.tv.millennium +alt.tv.millennium.uk +alt.tv.mission-imposs +alt.tv.mortal-kombat +alt.tv.mr-belvedere +alt.tv.mst3k +alt.tv.mst3k.mstings +alt.tv.mtv +alt.tv.mtv-europe +alt.tv.muppets +alt.tv.murder-one +alt.tv.mwc +alt.tv.my-s-c-life +alt.tv.nash-bridges +alt.tv.networks.cbc +alt.tv.newsradio +alt.tv.nick-at-nite +alt.tv.nickelodeon +alt.tv.night-tracks +alt.tv.northern-exp +alt.tv.nowhere-man +alt.tv.nypd-blue +alt.tv.ocean-girl +alt.tv.outer-limits +alt.tv.party-of-five +alt.tv.pattlestar-gayactica +alt.tv.pee-wee-herman +alt.tv.pi +alt.tv.picket-fences +alt.tv.pirate +alt.tv.pizzacats +alt.tv.pol-incorrect +alt.tv.port-charles +alt.tv.pretender +alt.tv.pretender.creative +alt.tv.prisoner +alt.tv.profiler +alt.tv.psi-factor +alt.tv.public-access +alt.tv.quantum-leap.creative +alt.tv.queerasfolk.uk +alt.tv.quincy-me +alt.tv.raw +alt.tv.real-world +alt.tv.reboot +alt.tv.red-dwarf +alt.tv.red-dwarf.discussion +alt.tv.red-dwarf.fans +alt.tv.red-dwarf.fans-only +alt.tv.red-dwarf.moderated +alt.tv.red-dwarf.series8 +alt.tv.remember-wenn +alt.tv.ren-n-stimpy +alt.tv.rescue-77 +alt.tv.road-rules +alt.tv.robotech +alt.tv.rockford-files +alt.tv.roseanne +alt.tv.rugrats +alt.tv.sabrina +alt.tv.sabrina.salem.sucks +alt.tv.saved-bell +alt.tv.scott-bakula +alt.tv.sctv +alt.tv.seaquest +alt.tv.seinfeld +alt.tv.sentai +alt.tv.sentinel +alt.tv.sesame-street +alt.tv.sevendays +alt.tv.showtime +alt.tv.silk-stalkings +alt.tv.simpsons +alt.tv.simpsons.itchy-scratchy +alt.tv.simpsons.simpsons +alt.tv.sinbad +alt.tv.singled-out +alt.tv.sitcom +alt.tv.sliders +alt.tv.sliders.creative +alt.tv.smk +alt.tv.snl +alt.tv.sopranos +alt.tv.southpark +alt.tv.space-a-n-b +alt.tv.space-cases +alt.tv.spin-city +alt.tv.sports +alt.tv.star-trek.ds9 +alt.tv.star-trek.jeffery-hunt +alt.tv.star-trek.next-gen +alt.tv.star-trek.tos +alt.tv.star-trek.voyager +alt.tv.stargate-sg1 +alt.tv.stars.d-fishel +alt.tv.sunset-beach +alt.tv.swamp-thing +alt.tv.swatkats +alt.tv.tales-crypt +alt.tv.talkshows.daytime +alt.tv.talkshows.late +alt.tv.tech.hdtv +alt.tv.tech.misc +alt.tv.tech.plain-tv +alt.tv.teletubbies +alt.tv.tellytubbies.hardcore.binaries +alt.tv.the-andy-griffith-show +alt.tv.the-critic +alt.tv.the-goodies +alt.tv.the-jeffersons +alt.tv.the-jihad +alt.tv.the-net +alt.tv.the-practice +alt.tv.the-state +alt.tv.the-tick +alt.tv.thebox +alt.tv.thepractice +alt.tv.this-old-house +alt.tv.threes-company +alt.tv.thundercats +alt.tv.tiny-toon +alt.tv.tiny-toon.sex +alt.tv.tiny-toon.ttbssex +alt.tv.tmf +alt.tv.tom-green +alt.tv.touched-by-an-angel +alt.tv.toute-fabienne +alt.tv.traders +alt.tv.tv-nation +alt.tv.twin-peaks +alt.tv.v +alt.tv.viper +alt.tv.voice-artists +alt.tv.vr5 +alt.tv.whose-line +alt.tv.wings +alt.tv.wiseguy +alt.tv.wnn +alt.tv.wonder-years +alt.tv.working +alt.tv.world-news-now.moderated +alt.tv.x-files +alt.tv.x-files.analysis +alt.tv.x-files.creative +alt.tv.x-files.creative.mature +alt.tv.x-files.x-ville +alt.tv.xena +alt.tv.xena-subtext +alt.tv.xena-subtext.misc +alt.tv.xena.creative +alt.tv.xena.creative.mature +alt.tv.xena.creative.subtext +alt.tv.xena.subtext.creative +alt.tv.xuxa +alt.tv.young+restless +alt.two.zero.four +alt.twosixhundred.uk +alt.ufc +alt.ufo.reports +alt.uhaul.good.bad.ugly +alt.uk.a-level.business +alt.uk.a-levels +alt.uk.customer.service.issues +alt.uk.customer.service.issues.pc +alt.uk.games.video.digitiser +alt.uk.games.video.playstation +alt.uk.late.teens +alt.uk.law +alt.uk.law.and.order +alt.uk.men.seeking.woman +alt.uk.north.ellesmere-port +alt.uk.penpals +alt.uk.squat +alt.uk.stevenage.bohemian +alt.uk.stevenage.bohemian.binaries +alt.uk.virgin-net.oldbies +alt.uk.virtual-glasgow +alt.uk.woman.seeking.man +alt.uk.york.classifieds +alt.umist.computer.users.society +alt.umr.student.babble +alt.underground.yalta +alt.union.iatse +alt.union.natl-writers +alt.univ.collegiate.uk +alt.unix.geeks +alt.unix.geeks.moderated +alt.unix.interix +alt.unix.wizards +alt.upa +alt.urokosodoji +alt.usa-sucks +alt.usage.chinese +alt.usage.english +alt.usage.german +alt.usage.icelandic +alt.usage.italiano +alt.usage.spanish +alt.useless.newsgroup.delete.me +alt.usenet.god.dr-hangnail +alt.usenet.kooks +alt.usenet.legends +alt.usenet.manifestoes +alt.usenet.newbies +alt.usenet.offline-reader +alt.usenet.offline-reader.forte-agent +alt.usenet.offline-reader.forte-agent.jehad +alt.usenet.offline-reader.forte-agent.modified +alt.usenet.pedophiles.jay-denebeim +alt.usenet.pirated.agent +alt.usenet.reposts +alt.usenet.satellite +alt.usenet.supernews-talk +alt.usenet.surveys +alt.usenetmud +alt.utensils.spork +alt.uu.announce +alt.uu.comp.os.linux.questions +alt.uu.lang.esperanto.misc +alt.uu.lang.russian.misc +alt.uu.math.misc +alt.uunet.anti-trust +alt.vacation.las-vegas +alt.vampyres +alt.vampyres.flap.flap.flap +alt.vancouver.white.pride +alt.video.avid_editors +alt.video.digital-tv +alt.video.divx.bloatedsack +alt.video.dvd +alt.video.dvd.complain +alt.video.dvd.friends-of-joe +alt.video.dvd.software +alt.video.dvd.tech +alt.video.games.reviews +alt.video.laserdisc +alt.video.letterbox +alt.video.letterbox.bernie-faber.moron-freak +alt.video.satellite.4dtv +alt.video.satellite.mpeg-dvb +alt.video.sound +alt.video.tape-trading +alt.video.tape-trading.pal +alt.video.vcr +alt.videos.bootlegs +alt.videotron.general +alt.vietnam.veterans +alt.vinny.cahill.ok.ok.ok +alt.vinny.cahill.ok.ok.ok.ok.ok +alt.vinocur.replies +alt.virasoft.info +alt.virasoft.vso +alt.visa.australia +alt.visa.us +alt.visa.us.marriage-based +alt.visio +alt.volkswagen.beetle +alt.vr-www +alt.w3life +alt.wally +alt.walmart +alt.walmart.censor.censor.censor +alt.walter-cronkite.bathtub.assassination +alt.walter-cronkite.bedroom.deutschland +alt.walter-cronkite.blenders +alt.walter-cronkite.civil-war.history +alt.walter-cronkite.erotica.hummus.moderated +alt.walter-cronkite.gasoline.implants +alt.walter-cronkite.heimlich.tori-amos +alt.walter-cronkite.i-see-a.great-need +alt.walter-cronkite.jeffery-hunt.peas.peas.peas +alt.walter-cronkite.john-grubor.forsale +alt.walter-cronkite.mcdonalds.crew +alt.walter-cronkite.metallurgy +alt.walter-cronkite.montanabob43.rules.rules.rules +alt.walter-cronkite.mutual-fund +alt.walter-cronkite.new-york.mets +alt.walter-cronkite.nubile-dentist.1975 +alt.walter-cronkite.revenge-of.singe-de-noel +alt.walter-cronkite.stereo.dean-stark +alt.walter-cronkite.swedish-chef.bork.bork.bork +alt.walter-cronkite.zamboni.moderated +alt.war +alt.war.civil.usa +alt.war.cypher +alt.war.mercenary +alt.war.nuclear +alt.war.pow-mia +alt.war.vietnam +alt.warez.borje-hagsten +alt.warez.burnout +alt.warez.consoles +alt.warez.godz +alt.warez.ibm-pc +alt.warez.ibm-pc.apps +alt.warez.ibm-pc.games +alt.warez.ibm-pc.old +alt.wastewater +alt.waukesha.schools.meadowbrook +alt.wavcatcher +alt.waves +alt.we.love.bob.payne.not +alt.webcam.camgirls +alt.webcom.form-users +alt.webcom.users +alt.webedit +alt.webrings.announce +alt.wedding +alt.wedding.marketplace +alt.wednesday +alt.wee +alt.wee.goaway.goaway.goaway +alt.weemba +alt.welch-family +alt.wesley.crusher.die.die.die +alt.west-virginia.bluefieldnet +alt.wh +alt.what-to-do +alt.who.is.bob +alt.who.the.feck.is.walter.cronkite +alt.wholesale +alt.wicware +alt.wildland.firefighting +alt.windows.cde +alt.windows95 +alt.windows98 +alt.winsock +alt.winsock.programming +alt.winsock.trumpet +alt.wired +alt.witchcraft +alt.wolves +alt.wolves.hybrid +alt.women.attitudes +alt.women.petite +alt.women.shesaid +alt.women.supremacy +alt.workingholiday +alt.worldsaway +alt.worms.out.of.a.hot.cheese-log +alt.writing +alt.writing.scams +alt.www +alt.www.authoring +alt.www.authoring.homesite +alt.www.hotjava +alt.www.imdb.us +alt.www.marketing +alt.www.marketing.adverts +alt.www.sexzilla.com +alt.www.sites +alt.www.stupid-idiots.com +alt.www.webguild +alt.www.webmaster +alt.www.webmaster.xxx +alt.x +alt.x.upper-case +alt.x.y +alt.xyzzy +alt.y2k.end-of-the-world +alt.yang.sux +alt.yang.suxor +alt.year +alt.yerevan +alt.yet.another.loser.consoles.himself.with.a.vanity.group +alt.ygdrasil +alt.ygdrasil.film +alt.yoga +alt.yogananda +alt.yogmael +alt.yowie +alt.yule.log +alt.zen +alt.zencor +alt.zezon +alt.zima +alt.zines +alt.ziopino +alt.zombie +alt.zoom +alt.zuzu +alt.zvjezdana.volim-te +arc.ccf.services +arc.ccf.super +arc.ccf.unix +arc.news.aar +arkane.announce +arkane.answers +arkane.cancel +arkane.config +arkane.control +arkane.ether.misc +arkane.fan.breasts.lara-beaton +arkane.fan.kate-nepveu +arkane.fan.widderslainte +arkane.misc +arkane.personal.alistair-young +arkane.policy +arkane.test +arnet.general +asu.acad_prof.announce +asu.admin.misc +asu.books.exchange +asu.comp.academic.transition +asu.comp.distributed +asu.comp.micro +asu.cs.ai +asu.cs.talk +asu.culture.homosexual +asu.culture.indian +asu.ecs.news +asu.ecs.talk +asu.forsale.dept +asu.forsale.misc +asu.gammage.announce +asu.general.announce +asu.general.crime_stop +asu.general.events +asu.general.lectures +asu.general.public +asu.general.rideshare +asu.general.trans_catalyst +asu.group.gundevils +asu.group.misc +asu.group.paradox +asu.group.uc +asu.group.ucw +asu.group.uug +asu.humanresources.announce +asu.investigates.info-highway +asu.library.announce +asu.mu.announce +asu.music.notes +asu.odysseyville.mayorsmessages +asu.odysseyville.problemunit1 +asu.odysseyville.problemunit2 +asu.odysseyville.problemunit3 +asu.odysseyville.problemunit4 +asu.odysseyville.problemunit5 +asu.odysseyville.soapbox +asu.org.acm +asu.org.toastmasters.announce +asu.org.toastmasters.talk +asu.permias.tempe +asu.politics.speech +asu.politics.talk +asu.research.announce +asu.research.modelling +asu.sports.misc +asu.src.announce +asu.staff.announce +asu.staff.faculty +asu.staff.training +asu.student.graduate +asu.student.international +asu.student.residence +asu.sys.mac +asu.test +asu.theater.announce +asu.wanted +asu.west.announce +at.anzeigen.arbeitsmarkt +at.anzeigen.gewerblich.allgemein +at.anzeigen.gewerblich.computer +at.anzeigen.privat.allgemein +at.anzeigen.privat.computer +at.blackbox +at.blackbox.behinderte +at.blackbox.gpa.wien.fcg +at.blackbox.gruene.planet +at.blackbox.gruene.wien.diskussionen +at.blackbox.gruene.wien.umwelt+verkehr +at.blackbox.jvp.wien +at.blackbox.lomographie +at.blackbox.lomographie.galerie +at.blackbox.meine-meinung.europa +at.blackbox.meine-meinung.innenpolitik +at.blackbox.meine-meinung.kultur +at.blackbox.meine-meinung.medien +at.blackbox.meine-meinung.sport +at.blackbox.meine-meinung.weltpolitik +at.blackbox.meine-meinung.wirtschaft +at.blackbox.profil.feedback +at.blackbox.profil.kommentare +at.blackbox.profil.leitartikel +at.blackbox.spoe.wien +at.blackbox.spoe.wien.caspar-einem +at.blackbox.spoe.wien.disput +at.blackbox.spoe.wien.presse +at.blackbox.spoe.wien.termine +at.blackbox.trend.feedback +at.blackbox.trend.kommentare +at.blackbox.trend.leitartikel +at.blackbox.umweltberatung +at.blackbox.vsstoe +at.blackbox.wien.jugendzentren +at.blackbox.wo-men +at.blackbox.zivildienst +at.fido.aon +at.fido.kurzwelle +at.fido.segeln +at.fido.sicherheit +at.fido.startrek +at.freizeit.motorrad +at.freizeit.rollenspiele +at.freizeit.sonstiges +at.infosystems +at.internet.provider +at.internet.sonstiges +at.mail.edv-recht +at.mail.mbone +at.musik.macher +at.ping.pcfranz +at.region.graz +at.region.steiermark +at.tuwien.general +at.tuwien.se.next +at.umwelt +at.univie.innovation +at.usenet +at.usenet.announce +at.usenet.cancel-reports +athena.announcements +athena.forsale +athena.gamit +athena.housing +athena.misc +athena.test +atl.arno +atl.general +atl.housing +atl.jobs +atl.olympics +atl.resumes +atl.singles +atl.test +ats.dos.resnet +ats.homenet.misc +ats.mac.resnet +ats.windows.resnet +aurora.general +aus.ads.commercial +aus.ads.forsale +aus.ads.forsale.computers.new +aus.ads.forsale.computers.used +aus.ads.jobs +aus.ads.jobs.moderated +aus.ads.jobs.resumes +aus.ads.personals +aus.ads.wanted +aus.aviation +aus.aviation.airspace +aus.bicycle +aus.books +aus.bushwalking +aus.cars +aus.censorship +aus.comms +aus.comms.mobile +aus.comms.videocon +aus.computers +aus.computers.ai +aus.computers.amiga +aus.computers.cdrom +aus.computers.ibm-pc +aus.computers.linux +aus.computers.logic-prog +aus.computers.mac +aus.computers.os2 +aus.computers.parallel +aus.computers.sun +aus.computers.tex +aus.consumers +aus.culture.china +aus.culture.gothic +aus.culture.hellenic +aus.culture.lesbigay +aus.culture.ultimo +aus.dvd +aus.education +aus.education.bio-newtech +aus.education.open-learning +aus.electronics +aus.environment.conservation +aus.environment.misc +aus.films +aus.flame +aus.flame.gareth-powell +aus.flame.usa +aus.games +aus.games.bridge +aus.games.roleplay +aus.gardens +aus.general +aus.hi-fi +aus.invest +aus.jokes +aus.legal +aus.legal.moderated +aus.mathematics +aus.mbio +aus.media-watch +aus.motorcycles +aus.music +aus.net.access +aus.net.announce +aus.net.directory +aus.net.irc +aus.net.mail +aus.net.news +aus.net.policy +aus.net.status +aus.org.acs +aus.org.acs.books +aus.org.auug +aus.org.awpa +aus.org.efa +aus.org.hisa +aus.org.rmaa +aus.org.sage +aus.org.scouting +aus.org.waia +aus.personals +aus.pets +aus.photo +aus.politics +aus.radio.amateur.digital +aus.radio.amateur.misc +aus.radio.amateur.wicen +aus.radio.broadcast +aus.radio.scanner +aus.radio.showprep +aus.rail +aus.rail.models +aus.religion +aus.religion.christian +aus.sf +aus.sf.babylon5 +aus.sf.star-trek +aus.snow +aus.sport +aus.sport.aussie-rules +aus.sport.motor +aus.sport.rugby-league +aus.sport.scuba +aus.stats.s +aus.students +aus.students.overseas +aus.talk.ltuae +aus.test +aus.theatre +aus.transport +aus.tv +aus.tv.community +aus.tv.pay +aus.tv.x-files +aus.tv.x-files.d +austin.announce +austin.autos +austin.flame +austin.food +austin.forsale +austin.gardening +austin.general +austin.internet +austin.jobs +austin.music +austin.org.sca +austin.politics +austin.talk +austin.test +austin.usenet.config +austin.usenet.stats +av.avid +av.computer +av.config +av.dining +av.forsale +av.general +av.jobs +av.mug +av.news +av.personals +av.qnet +av.seminars +av.test +av.user +av.wanted +az.config +az.forsale +az.general +az.internet +az.jobs +az.politics +az.swusrgrp +az.teens +az.test +az.wanted +ba.announce +ba.art +ba.bicycles +ba.broadcast +ba.consumers +ba.dance +ba.food +ba.gardens +ba.general +ba.helping-hand +ba.internet +ba.jobs.agency +ba.jobs.contract.agency +ba.jobs.contract.direct +ba.jobs.direct +ba.jobs.discussion +ba.jobs.resumes +ba.market.computers +ba.market.housing +ba.market.misc +ba.market.vehicles +ba.motorcycles +ba.motss +ba.mountain-folk +ba.music +ba.music.drumming +ba.news.config +ba.news.group +ba.news.stats +ba.personals +ba.politics +ba.seminars +ba.singles +ba.smartvalley +ba.sports +ba.startup +ba.test +ba.transportation +ba.weather +backbone.general +balt.config +balt.general +balt.jobs +balt.music +bc.bcnet +bc.cycling +bc.general +bc.jobs +bc.news.stats +bc.politics +bc.unix +bc.weather +bcs.activists +bcs.announce +bcs.announce.d +bcs.answers +bcs.config +bcs.misc +bcs.olsc +bcs.sig.mac +bcs.sig.misc +bcs.test +bda.config +bda.forum.bda +bda.forum.hfa +bda.forum.jp +bda.forum.zeit.feuilleton +bda.forum.zeit.job +bda.forum.zeit.kolumnen +bda.forum.zeit.thema +bda.jp.misc +bda.news +bda.test +be.announce +be.arts +be.burgerrechten +be.commercial +be.comp +be.comp.internet +be.comp.internet.irc +be.comp.os.linux +be.education +be.forsale +be.jobs +be.misc +be.politics +be.providers +be.providers.freenet +be.science +be.sport +be.telecom +be.tv +belwue.sw +belwue.test +bionet.agroforestry +bionet.announce +bionet.audiology +bionet.biology.cardiovascular +bionet.biology.computational +bionet.biology.deepsea +bionet.biology.grasses +bionet.biology.n2-fixation +bionet.biology.symbiosis +bionet.biology.tropical +bionet.biology.vectors +bionet.biophysics +bionet.celegans +bionet.cellbiol +bionet.cellbiol.cytonet +bionet.cellbiol.insulin +bionet.chlamydomonas +bionet.diagnostics +bionet.diagnostics.prenatal +bionet.drosophila +bionet.ecology.physiology +bionet.emf-bio +bionet.general +bionet.genome.arabidopsis +bionet.genome.autosequencing +bionet.genome.chromosomes +bionet.genome.gene-structure +bionet.glycosci +bionet.immunology +bionet.info-theory +bionet.jobs.offered +bionet.jobs.wanted +bionet.journals.contents +bionet.journals.letters.biotechniques +bionet.journals.letters.tibs +bionet.journals.note +bionet.maize +bionet.metabolic-reg +bionet.microbiology +bionet.microbiology.biofilms +bionet.molbio.ageing +bionet.molbio.bio-matrix +bionet.molbio.embldatabank +bionet.molbio.evolution +bionet.molbio.gdb +bionet.molbio.genbank +bionet.molbio.genbank.updates +bionet.molbio.gene-linkage +bionet.molbio.genome-program +bionet.molbio.hiv +bionet.molbio.methds-reagnts +bionet.molbio.molluscs +bionet.molbio.proteins +bionet.molbio.proteins.7tms_r +bionet.molbio.proteins.fluorescent +bionet.molbio.rapd +bionet.molbio.recombination +bionet.molbio.yeast +bionet.molec-model +bionet.molecules.free-radicals +bionet.molecules.p450 +bionet.molecules.peptides +bionet.molecules.repertoires +bionet.mycology +bionet.neuroscience +bionet.neuroscience.amyloid +bionet.organisms.pseudomonas +bionet.organisms.schistosoma +bionet.organisms.urodeles +bionet.organisms.zebrafish +bionet.parasitology +bionet.photosynthesis +bionet.plants +bionet.plants.education +bionet.plants.signaltransduc +bionet.population-bio +bionet.prof-society.afcr +bionet.prof-society.aibs +bionet.prof-society.biophysics +bionet.prof-society.cfbs +bionet.prof-society.csm +bionet.prof-society.navbo +bionet.protista +bionet.sci-resources +bionet.software +bionet.software.acedb +bionet.software.gcg +bionet.software.sources +bionet.software.srs +bionet.software.staden +bionet.software.www +bionet.software.x-plor +bionet.structural-nmr +bionet.toxicology +bionet.users.addresses +bionet.virology +bionet.women-in-bio +bionet.xtallography +bit.admin +bit.general +bit.lang.neder-l +bit.listproc.stockphoto +bit.listserv.2000ad-l +bit.listserv.9370-l +bit.listserv.ada-law +bit.listserv.advise-l +bit.listserv.aect-l +bit.listserv.aera +bit.listserv.aix-l +bit.listserv.albanian +bit.listserv.allmusic +bit.listserv.arlis-l +bit.listserv.ashe-l +bit.listserv.asis-l +bit.listserv.asm370 +bit.listserv.atlas-l +bit.listserv.authorware +bit.listserv.autism +bit.listserv.autocat +bit.listserv.axslib-l +bit.listserv.banyan-l +bit.listserv.basque-l +bit.listserv.berita +bit.listserv.berita.d +bit.listserv.bgrass-l +bit.listserv.big-lan +bit.listserv.billing +bit.listserv.biomch-l +bit.listserv.blindnws +bit.listserv.blues-l +bit.listserv.bosnet +bit.listserv.buslib-l +bit.listserv.c370-l +bit.listserv.calc-ti +bit.listserv.candle-l +bit.listserv.catala +bit.listserv.catholic +bit.listserv.celiac +bit.listserv.cfs.newsletter +bit.listserv.christia +bit.listserv.cics-l +bit.listserv.cinema-l +bit.listserv.circplus +bit.listserv.clayart +bit.listserv.cloaks-daggers +bit.listserv.cmspip-l +bit.listserv.coco +bit.listserv.confocal +bit.listserv.conyers +bit.listserv.croatia +bit.listserv.cumrec-l +bit.listserv.cw-email +bit.listserv.cwis-l +bit.listserv.cyber-l +bit.listserv.dasig +bit.listserv.db2-l +bit.listserv.deaf-l +bit.listserv.dectei-l +bit.listserv.devel-l +bit.listserv.devmedia +bit.listserv.disarm-l +bit.listserv.dorothyl +bit.listserv.down-syn +bit.listserv.dsshe-l +bit.listserv.e-europe +bit.listserv.easi +bit.listserv.edi-l +bit.listserv.edpolyan +bit.listserv.edtech +bit.listserv.edusig-l +bit.listserv.envbeh-l +bit.listserv.ethics-l +bit.listserv.euearn-l +bit.listserv.fire-l +bit.listserv.fnord-l +bit.listserv.frac-l +bit.listserv.free-l +bit.listserv.freemasonry +bit.listserv.games-l +bit.listserv.gaynet +bit.listserv.gddm-l +bit.listserv.geodesic +bit.listserv.geograph +bit.listserv.govdoc-l +bit.listserv.graph-ti +bit.listserv.hdesk-l +bit.listserv.helix-l +bit.listserv.hellas +bit.listserv.help-net +bit.listserv.hrvatska +bit.listserv.humage-l +bit.listserv.hungary +bit.listserv.hytel-l +bit.listserv.i-amiga +bit.listserv.ibm-hesc +bit.listserv.ibm-main +bit.listserv.ibmtcp-l +bit.listserv.idms-l +bit.listserv.imagelib +bit.listserv.ioob-l +bit.listserv.ipct-l +bit.listserv.ispf-l +bit.listserv.japan +bit.listserv.jes2-l +bit.listserv.jnet-l +bit.listserv.l-hcap +bit.listserv.l-vmctr +bit.listserv.labmgr +bit.listserv.lawsch-l +bit.listserv.lawsch.internships +bit.listserv.liaison +bit.listserv.libref-l +bit.listserv.libres +bit.listserv.linkfail +bit.listserv.lis-l +bit.listserv.lsoft-announce +bit.listserv.mail-l +bit.listserv.mailbook +bit.listserv.makedon +bit.listserv.mba-l +bit.listserv.mbu-l +bit.listserv.mdphd-l +bit.listserv.medforum +bit.listserv.medlib-l +bit.listserv.mideur-l +bit.listserv.mla-l +bit.listserv.movie.memorabilia +bit.listserv.museum-l +bit.listserv.muslims +bit.listserv.nettrain +bit.listserv.new-list +bit.listserv.nodmgt-l +bit.listserv.notis-l +bit.listserv.novell +bit.listserv.nppa-l +bit.listserv.opers-l +bit.listserv.os2-l +bit.listserv.pacs-l +bit.listserv.page-l +bit.listserv.pagemakr +bit.listserv.pakistan +bit.listserv.pchealth +bit.listserv.pmail +bit.listserv.pmdf-l +bit.listserv.pns-l +bit.listserv.politics +bit.listserv.powerh-l +bit.listserv.psycgrad +bit.listserv.quaker-p +bit.listserv.quality +bit.listserv.qualrs-l +bit.listserv.radio-l +bit.listserv.railroad +bit.listserv.rcath-l +bit.listserv.relusr-l +bit.listserv.rra-l +bit.listserv.rscs-l +bit.listserv.rscsmods +bit.listserv.screen-l +bit.listserv.script-l +bit.listserv.scuba-l +bit.listserv.seasia-l +bit.listserv.seds-l +bit.listserv.sfs-l +bit.listserv.sganet +bit.listserv.simula +bit.listserv.skywarn +bit.listserv.slart-l +bit.listserv.slovak-l +bit.listserv.snamgt-l +bit.listserv.snurse-l +bit.listserv.sos-data +bit.listserv.spires-l +bit.listserv.sportpsy +bit.listserv.sqlinfo +bit.listserv.superguy +bit.listserv.tbi-support +bit.listserv.techwr-l +bit.listserv.tesl-l +bit.listserv.test +bit.listserv.tn3270-l +bit.listserv.toolb-l +bit.listserv.transplant +bit.listserv.travel-l +bit.listserv.tsorexx +bit.listserv.urep-l +bit.listserv.vfort-l +bit.listserv.vm-util +bit.listserv.vmesa-l +bit.listserv.vnews-l +bit.listserv.vocnet +bit.listserv.vpiej-l +bit.listserv.vse-l +bit.listserv.wac-l +bit.listserv.words-l +bit.listserv.wpcorp-l +bit.listserv.wpwin-l +bit.listserv.www-vm +bit.listserv.wx-chase +bit.listserv.wx-talk +bit.listserv.x400-l +bit.listserv.xedit-l +bit.listserv.xmailer +bit.listserv.xtropy-l +bit.mailserv.word-pc +bit.med.mxdiag-l +bit.med.resp-care.world +bit.org.peace-corps +bit.tech.africana +biz.books.technical +biz.clarinet +biz.clarinet.sample +biz.clarinet.web.sample +biz.clarinet.web.xcache.large +biz.clarinet.web.xcache.small +biz.clarinet.webnews.biz +biz.clarinet.webnews.living +biz.clarinet.webnews.sports +biz.clarinet.webnews.techwire +biz.clarinet.webnews.top +biz.clarinet.webnews.usa +biz.clarinet.webnews.world +biz.comp.accounting +biz.comp.mcs +biz.comp.telebit +biz.comp.telebit.netblazer +biz.config +biz.control +biz.digex.announce +biz.digital.announce +biz.digital.articles +biz.general +biz.healthcare +biz.marketplace.computers.discussion +biz.marketplace.computers.mac +biz.marketplace.computers.other +biz.marketplace.computers.pc-clone +biz.marketplace.computers.workstation +biz.marketplace.discussion +biz.marketplace.international +biz.marketplace.international.discussion +biz.marketplace.investors +biz.marketplace.non-computer +biz.marketplace.real-estate +biz.marketplace.services.computers +biz.marketplace.services.discussion +biz.marketplace.services.non-computer +biz.marketplace.web-design +biz.oreilly.announce +biz.pagesat +biz.pagesat.weather +biz.stolen +biz.tadpole.sparcbook +biz.test +blgtn.arts +blgtn.business +blgtn.cohorts +blgtn.education +blgtn.forsale +blgtn.government +blgtn.health +blgtn.jobs +blgtn.libraries +blgtn.socserv +blgtn.sports +bln.announce.berlinet +bln.announce.berlinet.d +bln.announce.fhtwbln +bln.announce.fub +bln.announce.fub.chemie +bln.announce.fub.cs +bln.announce.fub.cs.d +bln.announce.fub.d +bln.announce.fub.math +bln.announce.fub.math.d +bln.announce.fub.publizistik +bln.announce.fub.studienberatung +bln.announce.fub.zedat +bln.announce.fub.zedat.d +bln.announce.gfz +bln.announce.hub +bln.announce.hub.informatik +bln.announce.hub.informatik.d +bln.announce.in-berlin +bln.announce.in-berlin.d +bln.announce.tub.cs +bln.announce.tub.cs.d +bln.announce.tub.math +bln.announce.tub.physik +bln.announce.tub.zrz +bln.announce.tub.zrz.d +bln.announce.virtualcollege +bln.announce.zib +bln.announce.zib.t3d +bln.archiv +bln.comp.lang.opal +bln.comp.misc +bln.comp.pc +bln.comp.pub +bln.comp.sun +bln.comp.unix +bln.freizeit.essen +bln.freizeit.technik +bln.humor +bln.jugend.kontakte +bln.jugend.reisen +bln.jugend.schule +bln.jugend.sonstiges +bln.jugend.talk +bln.jugend.termine +bln.kultur +bln.kultur.tuerkisch +bln.lehre.informatik +bln.lehre.mathematik +bln.lehre.misc +bln.lehre.schule +bln.lehre.tech-inf +bln.lists +bln.lv.tub.cs.infet +bln.lv.tub.cs.informatik1 +bln.lv.tub.cs.informatik2 +bln.lv.tub.cs.informatik3 +bln.lv.tub.cs.prolog-prak +bln.lv.tub.cs.unix-praktikum +bln.lv.tub.ee.pthl +bln.markt +bln.markt.arbeit +bln.medien +bln.misc +bln.net.dialup +bln.net.internet +bln.net.mail +bln.net.maps +bln.net.news +bln.net.statistik +bln.net.www +bln.politik +bln.politik.rassismus +bln.sci.informatik +bln.sci.jura +bln.sci.mathematik +bln.sci.misc +bln.sci.umwelt +bln.termine +bln.test +bln.verkehr +bnr.software-eng +bofh.cannon-fodder +bofh.leeks +bofh.ykybhtlw +boulder.ads +boulder.general +boulder.pk +br.bras-net +br.colmeia +br.comp-net +br.listas.enecomp-l +br.listas.sbis-l +br.opera +br.pc-l +br.piadas +br.rec.esporte.futebol.flamengo +br.rec.esporte.futebol.tricolor +br.rec.piadas +brasil.anuncios +brasil.ciencia.capes +brasil.ciencia.cnpq +brasil.ciencia.computacao +brasil.ciencia.fisica +brasil.ciencia.matematica +brasil.computacao.paralela +brasil.ecologia +brasil.esportes.formula1 +brasil.esportes.futebol +brasil.esportes.voleibol +brasil.geral +brasil.noticias +brasil.politica +brasil.teste +brasil.unix +braunschweig.allgemeines +braunschweig.crossposting +braunschweig.hochschule +braunschweig.katzen +braunschweig.kaufrausch +braunschweig.kommerzielles +braunschweig.listen_plaene +braunschweig.newfiles +braunschweig.politisches +braunschweig.smalltalk +braunschweig.sysops +btnet.users +byu.news +ca.driving +ca.earthquakes +ca.environment +ca.forsale +ca.general +ca.news +ca.news.group +ca.politics +ca.seminars +ca.test +ca.unix +ca.usenet +ca.wanted +ca.water +calgary.announce +calgary.forsale +calgary.general +calgary.test +calstate.capp +calstate.gina.support +calstate.news.csunet +calstate.news.misc +calstate.stats +calstate.test +cam.announce +cam.misc +cam.net.announce +cam.sug +cam.test +cam.transport +can.ai +can.arts.sf +can.aviation.misc +can.aviation.rgs +can.canet.stats +can.com.ad-agencies +can.com.misc +can.community.asian +can.community.military +can.config +can.consumers +can.domain +can.english +can.francais +can.general +can.infobahn +can.infohighway +can.jobs +can.jobs.gov +can.legal +can.med.misc +can.military-brats +can.motss +can.newprod +can.org.cata +can.org.cips +can.org.cusen +can.org.misc +can.politics +can.scout-guide +can.shad-valley +can.sun-stroke +can.talk.bilingualism +can.talk.guns +can.talk.smoking +can.taxes +can.test +can.travel.citc +can.university.grad +can.usrgroup +can.uucp +can.uucp.maps +can.vlsi +capdist.admin +capdist.announce +capdist.misc +capdist.seminars +capdist.test +carleton.alumni +carleton.clubs.cheerleading +carleton.clubs.debating +carleton.clubs.ndp-youth +carleton.clubs.young-liberals +carleton.general +carleton.org.virtual-ventur +carleton.psychology.general +carleton.public.general +carleton.public.gnctr +carleton.scs.gradnews +carleton.scs.undergraduate +cbd.awards +cbd.procurements +cc.general +cern.alice +cern.alpha +cern.asis +cern.badmarket +cern.cern +cern.cernmpp +cern.cernsp +cern.cmz +cern.computing +cern.dxplus +cern.equipment +cern.est +cern.factorylink +cern.foot +cern.geant +cern.guides-ideas +cern.heplib +cern.hpplus +cern.linux +cern.market +cern.newmass +cern.nice.info +cern.nomad.daq +cern.oracle.cde +cern.root +cern.security.unix +cern.sgi +cern.skiclub +cern.softball +cern.sting +cern.telecom +cern.vmtodc +cern.volleyball +cern.www.talk +cern.ycc +ch.avalanche +ch.chuug +ch.comp +ch.ewish +ch.general +ch.market +ch.network +ch.philo.agenda +ch.pollen +ch.rec +ch.si.choose +ch.si.general +ch.si.sgaico +ch.soc.sidos +ch.sun-managers +ch.talk +chi.eats +chi.forsale +chi.general +chi.internet +chi.jobs +chi.mail +chi.media +chi.news.stats +chi.personals +chi.places +chi.politics +chi.test +chi.wanted +chi.weather +chile.anuncios +chile.binarios.imagenes +chile.binarios.misc +chile.binarios.para-mayores +chile.binarios.software +chile.binarios.sonidos +chile.ciencia.misc +chile.comp.mac +chile.comp.misc +chile.comp.pc +chile.comp.unix +chile.comp.virus +chile.comp.www +chile.consultas +chile.grupos +chile.grupos.anuncios +chile.mercado.electricos +chile.mercado.hardware +chile.mercado.juegos +chile.mercado.misc +chile.mercado.software +chile.mercado.trabajos +chile.mercado.vehiculos +chile.org.scout +chile.rec.cf +chile.rec.cine +chile.rec.cocina +chile.rec.comics +chile.rec.deportes.ajedrez +chile.rec.deportes.futbol +chile.rec.deportes.misc +chile.rec.humor +chile.rec.irc +chile.rec.juegos.misc +chile.rec.juegos.mud +chile.rec.juegos.rol +chile.rec.licores +chile.rec.literatura +chile.rec.misc +chile.rec.musica.metal +chile.rec.musica.misc +chile.rec.musica.sub +chile.rec.radio +chile.rec.sexo +chile.rec.tv +chile.regiones.misc +chile.regiones.quinta +chile.soc.censura +chile.soc.consumidor +chile.soc.ecologia +chile.soc.economia +chile.soc.historia +chile.soc.misc +chile.soc.politica +chile.soc.religion +chile.soc.salud +chile.test +chile.varios.misc +chinese.comp.software +chinese.flame +chinese.newsgroups.announce +chinese.newsgroups.answers +chinese.newsgroups.discussion +chinese.newsgroups.newusers +chinese.rec.magazines.multiworld +chinese.rec.misc +chinese.rec.sports +chinese.talk.misc +chinese.talk.politics +chinese.test +chinese.text.unicode +christnet.admin +christnet.bible +christnet.bible.revelation +christnet.christianlife +christnet.christnews +christnet.ethics +christnet.evangelical +christnet.general +christnet.healing.herbs +christnet.ladies +christnet.philosophy +christnet.poetry +christnet.prayer +christnet.religion +christnet.theology +christnet.writers +cl.adressen.allgemein +cl.adressen.e-mail +cl.adressen.suche +cl.adressen.systemdaten +cl.afrika.aktionen +cl.afrika.allgemein +cl.afrika.diskussion +cl.aktuelles.allgemein +cl.aktuelles.diskussion +cl.anarchie.aktionen +cl.anarchie.allgemein +cl.anarchie.diskussion +cl.anarchie.theorie +cl.antifa.aktionen +cl.antifa.allgemein +cl.antifa.diskussion +cl.antifa.magazine +cl.antifa.neue_rechte +cl.arbeit.aktionen +cl.arbeit.allgemein +cl.arbeit.diskussion +cl.arbeit.erwerbslos +cl.arbeit.fortbildung +cl.arbeit.frauen +cl.arbeit.recht +cl.artenschutz.aktionen +cl.artenschutz.allgemein +cl.artenschutz.bedroht +cl.artenschutz.diskussion +cl.asien.aktionen +cl.asien.allgemein +cl.asien.diskussion +cl.asien.ostasien +cl.asien.suedasien +cl.asien.suedostasien +cl.atom.aktionen +cl.atom.akw +cl.atom.allgemein +cl.atom.diskussion +cl.atom.gewinnung +cl.atom.muell +cl.atom.waffen+tests +cl.behindert.aktionen +cl.behindert.allgemein +cl.behindert.diskussion +cl.bildung.aktionen +cl.bildung.allgemein +cl.bildung.diskussion +cl.bildung.hochschule +cl.bildung.schule +cl.boden.aktionen +cl.boden.allgemein +cl.boden.altlasten +cl.boden.diskussion +cl.boden.landwirtschaft +cl.chemie.aktionen +cl.chemie.allgemein +cl.chemie.diskussion +cl.chemie.politik +cl.chemie.produktion +cl.chemie.stoffe +cl.datenschutz.aktionen +cl.datenschutz.allgemein +cl.datenschutz.diskussion +cl.datenschutz.g10 +cl.datenschutz.isdn +cl.demokratie.aktionen +cl.demokratie.allgemein +cl.demokratie.diskussion +cl.demokratie.grundrechte +cl.drogenpolitik.aktionen +cl.drogenpolitik.allgemein +cl.drogenpolitik.diskussion +cl.energie.aktionen +cl.energie.allgemein +cl.energie.alternativen +cl.energie.diskussion +cl.energie.fossile +cl.energie.politik +cl.energie.sparen +cl.energie.umweltbilanz +cl.europa.aktionen +cl.europa.allgemein +cl.europa.balkan +cl.europa.baltikum +cl.europa.cr +cl.europa.deutschland +cl.europa.diskussion +cl.europa.eu +cl.europa.italien +cl.europa.oesterreich +cl.europa.polen +cl.europa.recht +cl.europa.sr +cl.europa.tuerkei +cl.europa.ungarn +cl.fluechtlinge.aktionen +cl.fluechtlinge.allgemein +cl.fluechtlinge.diskussion +cl.frauen.aktionen +cl.frauen.allgemein +cl.frauen.diskussion +cl.frauen.only +cl.freie_liebe.aktionen +cl.freie_liebe.allgemein +cl.freie_liebe.diskussion +cl.freie_liebe.hetero +cl.freie_liebe.lesben +cl.freie_liebe.lesben-only +cl.freie_liebe.schwule +cl.frieden.aktionen +cl.frieden.allgemein +cl.frieden.diskussion +cl.frieden.kdv +cl.frieden.ruestung +cl.gentechnik.aktionen +cl.gentechnik.allgemein +cl.gentechnik.diskussion +cl.gentechnik.freiland +cl.gentechnik.medizin +cl.gentechnik.politik +cl.geschichte.aktionen +cl.geschichte.allgemein +cl.geschichte.diskussion +cl.gesundheit.aids +cl.gesundheit.aktionen +cl.gesundheit.allgemein +cl.gesundheit.diskussion +cl.glauben.aberglauben +cl.glauben.aktionen +cl.glauben.allgemein +cl.glauben.atheismus +cl.glauben.buddhismus +cl.glauben.christen +cl.glauben.diskussion +cl.glauben.humanismus +cl.glauben.islam +cl.glauben.juden +cl.glauben.osho +cl.glauben.sekten +cl.glauben.sonstige +cl.gruppen.ai +cl.gruppen.apc +cl.gruppen.bund +cl.gruppen.diskussion +cl.gruppen.dkp +cl.gruppen.falken +cl.gruppen.fiff +cl.gruppen.fzs +cl.gruppen.gewerkschaften +cl.gruppen.greenpeace +cl.gruppen.gruene +cl.gruppen.gruene_jugend +cl.gruppen.gruene_liga +cl.gruppen.icc +cl.gruppen.ig_medien +cl.gruppen.jre +cl.gruppen.jungdemokraten +cl.gruppen.krisis +cl.gruppen.kunm +cl.gruppen.nabu +cl.gruppen.oekoli +cl.gruppen.pds +cl.gruppen.robin_wood +cl.gruppen.sofo +cl.gruppen.sonstige +cl.gruppen.spd +cl.gruppen.spw +cl.gruppen.svd +cl.gruppen.transfair +cl.gus.aktionen +cl.gus.allgemein +cl.gus.diskussion +cl.international.aktionen +cl.international.allgemein +cl.international.diskussion +cl.jugendpresse.aktionen +cl.jugendpresse.allgemein +cl.jugendpresse.diskussion +cl.jugendpresse.kontakte +cl.jugendpresse.publikationen +cl.jugendpresse.zensur +cl.kinder.aktionen +cl.kinder.allgemein +cl.kinder.diskussion +cl.klima.aktionen +cl.klima.allgemein +cl.klima.diskussion +cl.klima.international +cl.klima.ozonschicht +cl.klima.tropenwald +cl.kontakte +cl.koordination.einstellungen +cl.koordination.netinfo +cl.koordination.systeminfo +cl.koordination.wahlurne +cl.kultur.aktionen +cl.kultur.allgemein +cl.kultur.diskussion +cl.kultur.kunst +cl.kultur.musik +cl.kultur.politik +cl.kultur.sport +cl.kultur.szene +cl.kultur.texte +cl.kultur.tv +cl.maenner.aktionen +cl.maenner.allgemein +cl.maenner.diskussion +cl.magazine.anna +cl.magazine.diskussion +cl.magazine.geheim +cl.magazine.inprekorr +cl.magazine.mik +cl.magazine.rbi +cl.magazine.sonstige +cl.magazine.stachel +cl.magazine.tatblatt +cl.magazine.telegraph +cl.medien.aktionen +cl.medien.allgemein +cl.medien.datenbanken +cl.medien.diskussion +cl.medien.funk +cl.medien.internet +cl.medien.text +cl.medien.vernetzung +cl.menschenrechte.afrika +cl.menschenrechte.aktionen +cl.menschenrechte.allgemein +cl.menschenrechte.asien +cl.menschenrechte.diskussion +cl.menschenrechte.europa +cl.menschenrechte.gus +cl.menschenrechte.mittelamerika +cl.menschenrechte.nahost +cl.menschenrechte.nordamerika +cl.menschenrechte.ozeanien +cl.menschenrechte.suedamerika +cl.mittelamerika.aktionen +cl.mittelamerika.allgemein +cl.mittelamerika.cuba +cl.mittelamerika.diskussion +cl.mittelamerika.el_salvador +cl.mittelamerika.nicaragua +cl.muell.aktionen +cl.muell.allgemein +cl.muell.deponie +cl.muell.diskussion +cl.muell.export +cl.muell.gruener_punkt +cl.muell.sondermuell +cl.muell.verbrennung +cl.muell.vermeidung +cl.nahost.aktionen +cl.nahost.allgemein +cl.nahost.diskussion +cl.nahost.irak +cl.nahost.kurdistan +cl.nahost.palaestina +cl.nordamerika.aktionen +cl.nordamerika.allgemein +cl.nordamerika.diskussion +cl.ozeanien.aktionen +cl.ozeanien.allgemein +cl.ozeanien.diskussion +cl.ozeanien.polargebiete +cl.presse.aktionen +cl.presse.diskussion +cl.presse.know-how +cl.presse.ticker +cl.recht.aktionen +cl.recht.allgemein +cl.recht.diskussion +cl.repression.aktionen +cl.repression.allgemein +cl.repression.diskussion +cl.soziales.aktionen +cl.soziales.allgemein +cl.soziales.diskussion +cl.soziales.jugendarbeit +cl.soziales.recht +cl.soziales.schuldner +cl.soziales.wohnen +cl.sozialismus.aktionen +cl.sozialismus.allgemein +cl.sozialismus.diskussion +cl.sozialismus.theorie +cl.suedamerika.aktionen +cl.suedamerika.allgemein +cl.suedamerika.diskussion +cl.technik.aktionen +cl.technik.allgemein +cl.technik.diskussion +cl.technik.folgen +cl.umwelt.aktionen +cl.umwelt.allgemein +cl.umwelt.beratung +cl.umwelt.diskussion +cl.umwelt.eu +cl.umwelt.laerm +cl.umwelt.pflanzen +cl.umwelt.politik +cl.umwelt.publikationen +cl.umwelt.recht +cl.umwelt.tiere +cl.umwelt.wald +cl.uno.aktionen +cl.uno.allgemein +cl.uno.diskussion +cl.userforum.aktionen +cl.userforum.cl-treffen +cl.userforum.diskussion +cl.userforum.handbuecher +cl.userforum.hilfe +cl.userforum.vorschlaege +cl.utopien.aktionen +cl.utopien.allgemein +cl.utopien.diskussion +cl.verkehr.aktionen +cl.verkehr.allgemein +cl.verkehr.diskussion +cl.wasser.aktionen +cl.wasser.allgemein +cl.wasser.aquadata +cl.wasser.diskussion +cl.wasser.meeresschutz +cl.wirtschaft.aktionen +cl.wirtschaft.allgemein +cl.wirtschaft.branchen +cl.wirtschaft.diskussion +cl.wirtschaft.geld +cl.wirtschaft.politik +cl.wirtschaft.steuern +cl.wirtschaft.verbraucher +clari.biz.briefs +clari.biz.currencies +clari.biz.currencies.euro +clari.biz.currencies.misc +clari.biz.currencies.us_dollar +clari.biz.earnings +clari.biz.earnings.releases +clari.biz.economy +clari.biz.economy.usa +clari.biz.economy.world +clari.biz.features +clari.biz.front_page +clari.biz.headlines +clari.biz.industry +clari.biz.industry.agriculture +clari.biz.industry.agriculture.releases +clari.biz.industry.automotive +clari.biz.industry.automotive.cbd +clari.biz.industry.automotive.releases +clari.biz.industry.aviation +clari.biz.industry.aviation.releases +clari.biz.industry.banking +clari.biz.industry.banking.releases +clari.biz.industry.conglomerates +clari.biz.industry.construction.cbd.acquisition +clari.biz.industry.construction.cbd.architect+eng +clari.biz.industry.construction.cbd.hardware +clari.biz.industry.construction.cbd.maintenance +clari.biz.industry.construction.cbd.misc +clari.biz.industry.construction.cbd.supplies +clari.biz.industry.energy +clari.biz.industry.energy.releases +clari.biz.industry.food +clari.biz.industry.food.cbd +clari.biz.industry.food.releases +clari.biz.industry.food.retail.releases +clari.biz.industry.health +clari.biz.industry.health.care +clari.biz.industry.health.care.releases +clari.biz.industry.health.cbd +clari.biz.industry.health.pharma +clari.biz.industry.health.pharma.releases +clari.biz.industry.household +clari.biz.industry.household.cbd +clari.biz.industry.information.cbd +clari.biz.industry.insurance +clari.biz.industry.insurance.releases +clari.biz.industry.machinery +clari.biz.industry.machinery.cbd.components +clari.biz.industry.machinery.cbd.engines +clari.biz.industry.machinery.cbd.misc +clari.biz.industry.manufacturing.releases +clari.biz.industry.media +clari.biz.industry.media.entertainment +clari.biz.industry.media.entertainment.releases +clari.biz.industry.media.releases +clari.biz.industry.metals+mining +clari.biz.industry.metals+mining.cbd +clari.biz.industry.metals+mining.releases +clari.biz.industry.misc +clari.biz.industry.misc.cbd.electric +clari.biz.industry.misc.cbd.equip_maint +clari.biz.industry.misc.cbd.equip_services +clari.biz.industry.misc.cbd.housekeeping +clari.biz.industry.misc.cbd.lab_supplies +clari.biz.industry.misc.cbd.management +clari.biz.industry.misc.cbd.misc_services +clari.biz.industry.misc.cbd.misc_supplies +clari.biz.industry.misc.cbd.research +clari.biz.industry.misc.cbd.studies +clari.biz.industry.misc.releases +clari.biz.industry.others +clari.biz.industry.real_est+const +clari.biz.industry.real_est+const.releases +clari.biz.industry.retail +clari.biz.industry.retail.releases +clari.biz.industry.textiles +clari.biz.industry.textiles.cbd +clari.biz.industry.transportation +clari.biz.industry.transportation.cbd +clari.biz.industry.transportation.releases +clari.biz.industry.travel+leisure +clari.biz.industry.travel+leisure.cbd +clari.biz.industry.travel+leisure.releases +clari.biz.industry.utilities +clari.biz.market.commodities +clari.biz.market.commodities.agricultural +clari.biz.market.commodities.misc +clari.biz.market.misc +clari.biz.mergers +clari.biz.mergers.releases +clari.biz.misc +clari.biz.misc.releases +clari.biz.personnel.releases +clari.biz.privatization +clari.biz.stocks +clari.biz.stocks.corporate_news +clari.biz.stocks.dividend.releases +clari.biz.stocks.report.asia +clari.biz.stocks.report.elsewhere +clari.biz.stocks.report.europe.eastern +clari.biz.stocks.report.europe.western +clari.biz.stocks.report.top +clari.biz.stocks.report.usa +clari.biz.stocks.report.usa.misc +clari.biz.stocks.report.usa.nyse +clari.biz.top +clari.biz.tradeshows.releases +clari.biz.world_trade +clari.editorial.cartoons.toles +clari.editorial.cartoons.worldviews +clari.editorial.commentary.misc +clari.editorial.commentary.political +clari.editorial.essays +clari.feature.dave_barry +clari.feature.dilbert +clari.feature.experimental +clari.feature.forbetter +clari.feature.mike_royko +clari.hot.a +clari.hot.b +clari.hot.c +clari.hot.d +clari.hot.e +clari.hot.f +clari.hot.g +clari.hot.h +clari.hot.i +clari.hot.j +clari.hot.k +clari.hot.l +clari.hot.m +clari.hot.n +clari.hot.o +clari.living +clari.living.animals +clari.living.arts +clari.living.bizarre +clari.living.books +clari.living.celebrities +clari.living.columns.joebob +clari.living.columns.lipton +clari.living.columns.miss_manners +clari.living.comics.bizarro +clari.living.comics.cafe_angst +clari.living.comics.doonesbury +clari.living.comics.forbetter +clari.living.comics.foxtrot +clari.living.comics.ozone_patrol +clari.living.consumer +clari.living.entertainment +clari.living.entertainment.briefs +clari.living.entertainment.misc +clari.living.fashion +clari.living.history +clari.living.history.today +clari.living.human_interest +clari.living.leisure +clari.living.misc +clari.living.movies +clari.living.music +clari.living.royalty +clari.living.top +clari.living.tv +clari.local.alabama +clari.local.alaska +clari.local.arizona +clari.local.arkansas +clari.local.california.briefs +clari.local.california.gov +clari.local.california.los_angeles +clari.local.california.lottery +clari.local.california.misc +clari.local.california.northern +clari.local.california.sfbay.biz +clari.local.california.sfbay.briefs +clari.local.california.sfbay.crime +clari.local.california.sfbay.education +clari.local.california.sfbay.fire +clari.local.california.sfbay.gov +clari.local.california.sfbay.health +clari.local.california.sfbay.law +clari.local.california.sfbay.living +clari.local.california.sfbay.misc +clari.local.california.sfbay.transport +clari.local.california.sfbay.transport.conditions +clari.local.california.sfbay.trouble +clari.local.california.sfbay.weather +clari.local.california.southern +clari.local.california.southern.misc +clari.local.colorado +clari.local.connecticut +clari.local.delaware +clari.local.florida +clari.local.georgia +clari.local.hawaii +clari.local.idaho +clari.local.illinois.chicago +clari.local.illinois.misc +clari.local.indiana +clari.local.iowa +clari.local.kansas +clari.local.kentucky +clari.local.louisiana +clari.local.maine +clari.local.maryland +clari.local.massachusetts +clari.local.michigan +clari.local.minnesota +clari.local.mississippi +clari.local.missouri +clari.local.montana +clari.local.nebraska +clari.local.nevada +clari.local.new_hampshire +clari.local.new_jersey +clari.local.new_mexico +clari.local.new_york.misc +clari.local.new_york.nyc +clari.local.north_carolina +clari.local.north_dakota +clari.local.ohio +clari.local.oklahoma +clari.local.oregon +clari.local.pennsylvania +clari.local.rhode_island +clari.local.south_carolina +clari.local.south_dakota +clari.local.tennessee +clari.local.texas +clari.local.utah +clari.local.vermont +clari.local.virginia+dc +clari.local.washington +clari.local.west_virginia +clari.local.wisconsin +clari.local.wyoming +clari.net.admin +clari.net.announce +clari.net.info +clari.net.newusers +clari.net.newusers.group_info.edu +clari.net.newusers.group_info.four-star +clari.net.newusers.group_info.three-star +clari.net.newusers.group_info.two-star +clari.net.talk +clari.news.aging +clari.news.alcohol+drugs +clari.news.blacks +clari.news.briefs +clari.news.childrn+family +clari.news.conflict +clari.news.conflict.misc +clari.news.conflict.peace_talks +clari.news.conflict.peacekeeping +clari.news.corruption +clari.news.crime +clari.news.crime.abductions +clari.news.crime.assaults +clari.news.crime.fraud+embezzle +clari.news.crime.general +clari.news.crime.hate +clari.news.crime.juvenile +clari.news.crime.misc +clari.news.crime.murders +clari.news.crime.murders.misc +clari.news.crime.murders.political +clari.news.crime.organized +clari.news.crime.sex +clari.news.crime.theft +clari.news.crime.top +clari.news.crime.war +clari.news.disabilities +clari.news.education +clari.news.education.higher +clari.news.education.misc +clari.news.education.releases +clari.news.features +clari.news.flash +clari.news.front_page +clari.news.gays +clari.news.immigration +clari.news.immigration.misc +clari.news.issues +clari.news.issues.censorship +clari.news.issues.death_penalty +clari.news.issues.guns +clari.news.issues.human_rights +clari.news.issues.misc +clari.news.issues.poverty +clari.news.issues.reproduction +clari.news.issues.smoking +clari.news.jews +clari.news.labor +clari.news.labor.employment +clari.news.labor.misc +clari.news.labor.strike +clari.news.law_enforce +clari.news.minorities +clari.news.minorities.misc +clari.news.misc.releases +clari.news.obituaries +clari.news.photos +clari.news.protests +clari.news.refugees +clari.news.religion +clari.news.sex +clari.news.trouble +clari.news.trouble.accidents +clari.news.trouble.disaster +clari.news.trouble.misc +clari.news.usa.terrorism +clari.news.weather +clari.news.women +clari.sports.baseball +clari.sports.baseball.major +clari.sports.baseball.major.al.games +clari.sports.baseball.major.al.stats +clari.sports.baseball.major.nl.games +clari.sports.baseball.major.nl.stats +clari.sports.baseball.minor +clari.sports.basketball +clari.sports.basketball.college +clari.sports.basketball.college.men +clari.sports.basketball.college.men.games +clari.sports.basketball.college.men.stats +clari.sports.basketball.college.women +clari.sports.basketball.minor +clari.sports.basketball.nba +clari.sports.basketball.nba.games +clari.sports.basketball.nba.stats +clari.sports.bowling +clari.sports.boxing +clari.sports.briefs +clari.sports.championships +clari.sports.features +clari.sports.football +clari.sports.football.cfl +clari.sports.football.college +clari.sports.football.college.games +clari.sports.football.college.stats +clari.sports.football.nfl +clari.sports.football.nfl.games +clari.sports.football.nfl.stats +clari.sports.golf +clari.sports.hockey +clari.sports.hockey.ahl +clari.sports.hockey.ihl +clari.sports.hockey.nhl +clari.sports.hockey.nhl.games +clari.sports.hockey.nhl.stats +clari.sports.horse_racing +clari.sports.local.canada.atlantic_provs +clari.sports.local.canada.brit_columbia +clari.sports.local.canada.eastern +clari.sports.local.canada.ontario +clari.sports.local.canada.ontario.misc +clari.sports.local.canada.ontario.toronto +clari.sports.local.canada.prairie_provs +clari.sports.local.canada.quebec +clari.sports.local.mid-atlantic.new_jersey +clari.sports.local.mid-atlantic.new_york +clari.sports.local.mid-atlantic.new_york.nyc +clari.sports.local.mid-atlantic.pennsylvania +clari.sports.local.mid-atlantic.pennsylvania.philadelphia +clari.sports.local.midwest +clari.sports.local.midwest.illinois +clari.sports.local.midwest.indiana +clari.sports.local.midwest.michigan +clari.sports.local.midwest.minnesota +clari.sports.local.midwest.misc +clari.sports.local.midwest.missouri +clari.sports.local.midwest.ohio +clari.sports.local.midwest.wisconsin +clari.sports.local.new_england +clari.sports.local.new_england.connecticut +clari.sports.local.new_england.massachusetts +clari.sports.local.new_england.misc +clari.sports.local.northwest +clari.sports.local.northwest.misc +clari.sports.local.northwest.washington +clari.sports.local.south +clari.sports.local.south.florida +clari.sports.local.south.florida.miami +clari.sports.local.south.florida.misc +clari.sports.local.south.florida.tampa_bay +clari.sports.local.south.georgia +clari.sports.local.south.maryland +clari.sports.local.south.maryland+dc +clari.sports.local.south.north_carolina +clari.sports.local.south.washington_dc +clari.sports.local.southwest +clari.sports.local.southwest.arizona +clari.sports.local.southwest.california +clari.sports.local.southwest.california.los_angeles +clari.sports.local.southwest.california.sfbay +clari.sports.local.southwest.colorado +clari.sports.local.southwest.misc +clari.sports.local.southwest.texas.dallas-fw +clari.sports.local.southwest.texas.misc +clari.sports.local.southwest.utah +clari.sports.misc +clari.sports.motor +clari.sports.olympic +clari.sports.others +clari.sports.photos +clari.sports.releases +clari.sports.schedules +clari.sports.skiing +clari.sports.soccer +clari.sports.tennis +clari.sports.top +clari.tw.aerospace +clari.tw.aerospace.cbd.components +clari.tw.aerospace.cbd.misc +clari.tw.aerospace.releases +clari.tw.briefs +clari.tw.chemicals +clari.tw.chemicals.cbd +clari.tw.chemicals.releases +clari.tw.columns.imprb_research +clari.tw.computers.apple +clari.tw.computers.apple.releases +clari.tw.computers.cbd +clari.tw.computers.entertainment.releases +clari.tw.computers.in_use +clari.tw.computers.industry_news +clari.tw.computers.misc +clari.tw.computers.networking +clari.tw.computers.networking.releases +clari.tw.computers.pc.hardware +clari.tw.computers.pc.hardware.releases +clari.tw.computers.pc.software +clari.tw.computers.pc.software.releases +clari.tw.computers.peripherals.releases +clari.tw.computers.releases +clari.tw.computers.retail.releases +clari.tw.computers.unix +clari.tw.computers.unix.releases +clari.tw.defense +clari.tw.defense.cbd +clari.tw.electronics +clari.tw.electronics.cbd +clari.tw.electronics.releases +clari.tw.environment +clari.tw.environment.cbd +clari.tw.environment.releases +clari.tw.features +clari.tw.health +clari.tw.health.aids +clari.tw.health.misc +clari.tw.issues +clari.tw.misc +clari.tw.new_media +clari.tw.new_media.matrix_news +clari.tw.new_media.online.releases +clari.tw.new_media.releases +clari.tw.nuclear +clari.tw.science +clari.tw.science+space +clari.tw.space +clari.tw.stocks +clari.tw.telecom +clari.tw.telecom.cbd +clari.tw.telecom.misc +clari.tw.telecom.phone_service +clari.tw.telecom.releases +clari.tw.top +clari.usa.briefs +clari.usa.gov +clari.usa.gov.briefs +clari.usa.gov.general +clari.usa.gov.misc +clari.usa.gov.personalities +clari.usa.gov.policy.biz +clari.usa.gov.policy.financial +clari.usa.gov.policy.foreign +clari.usa.gov.policy.foreign.mideast +clari.usa.gov.policy.foreign.misc +clari.usa.gov.policy.misc +clari.usa.gov.policy.social +clari.usa.gov.politics +clari.usa.gov.releases +clari.usa.gov.state+local +clari.usa.gov.white_house +clari.usa.hot.election.clinton +clari.usa.hot.election.congress +clari.usa.hot.election.dole +clari.usa.law +clari.usa.law.misc +clari.usa.law.supreme +clari.usa.military +clari.usa.misc +clari.usa.politics +clari.usa.politics.personalities +clari.usa.terrorism +clari.usa.top +clari.web.biz.currencies.euro +clari.web.editorial.essays +clari.web.hot.a +clari.web.hot.b +clari.web.hot.c +clari.web.hot.d +clari.web.hot.e +clari.web.hot.f +clari.web.hot.g +clari.web.hot.h +clari.web.hot.i +clari.web.hot.j +clari.web.hot.k +clari.web.hot.l +clari.web.hot.m +clari.web.hot.n +clari.web.hot.o +clari.web.living.top +clari.web.sports.olympic +clari.web.sports.skiing +clari.web.world.gov.politics.personalities +clari.world.africa.eastern +clari.world.africa.northwestern +clari.world.africa.south_africa +clari.world.africa.southern +clari.world.africa.western +clari.world.americas +clari.world.americas.argentina +clari.world.americas.brazil +clari.world.americas.canada +clari.world.americas.canada.biz +clari.world.americas.canada.briefs +clari.world.americas.canada.general +clari.world.americas.caribbean +clari.world.americas.central +clari.world.americas.meso +clari.world.americas.mexico +clari.world.americas.peru +clari.world.americas.south +clari.world.americas.south.misc +clari.world.asia.central +clari.world.asia.central+south +clari.world.asia.china +clari.world.asia.china.biz +clari.world.asia.hong_kong +clari.world.asia.india +clari.world.asia.indochina +clari.world.asia.indochina.misc +clari.world.asia.japan +clari.world.asia.japan.biz +clari.world.asia.koreas +clari.world.asia.philippines +clari.world.asia.south +clari.world.asia.southeast +clari.world.asia.taiwan +clari.world.asia.vietnam +clari.world.asia+oceania +clari.world.briefs +clari.world.europe +clari.world.europe.alpine +clari.world.europe.balkans +clari.world.europe.benelux +clari.world.europe.british_isles +clari.world.europe.british_isles.biz +clari.world.europe.british_isles.ireland +clari.world.europe.british_isles.uk +clari.world.europe.british_isles.uk.biz +clari.world.europe.british_isles.uk.n-ireland +clari.world.europe.central +clari.world.europe.eastern +clari.world.europe.france +clari.world.europe.france.biz +clari.world.europe.germany +clari.world.europe.germany.biz +clari.world.europe.greece +clari.world.europe.iberia +clari.world.europe.italy +clari.world.europe.northern +clari.world.europe.russia +clari.world.europe.union +clari.world.gov.budgets +clari.world.gov.intl.relations +clari.world.gov.intl_relations +clari.world.gov.politics +clari.world.gov.politics.personalities +clari.world.law +clari.world.mideast +clari.world.mideast.arabia +clari.world.mideast.egypt +clari.world.mideast.iran +clari.world.mideast.iraq +clari.world.mideast.israel +clari.world.mideast.kuwait +clari.world.mideast.misc +clari.world.mideast.palestine +clari.world.mideast.turkey +clari.world.mideast+africa +clari.world.military +clari.world.oceania +clari.world.oceania.australia +clari.world.oceania.new_zealand +clari.world.organizations +clari.world.organizations.misc +clari.world.organizations.un +clari.world.organizations.un.conferences +clari.world.terrorism +clari.world.top +cle.biz +cle.music +cle.sports +cmh.forsale +cmh.general +cmh.groups +cmh.jobs +cmh.network +cmh.opinion +cmh.test +cmu.student.acf +co.ads +co.bike-events +co.cos.ads +co.cos.general +co.fort-collins.ads +co.fort-collins.general +co.general +co.jobs +co.media.rmn +co.politics +co.politics.amend2.discuss +co.politics.amend2.info +co.test +comp.admin.policy +comp.ai +comp.ai.alife +comp.ai.doc-analysis.misc +comp.ai.doc-analysis.ocr +comp.ai.edu +comp.ai.fuzzy +comp.ai.games +comp.ai.genetic +comp.ai.jair.announce +comp.ai.jair.papers +comp.ai.nat-lang +comp.ai.neural-nets +comp.ai.nlang-know-rep +comp.ai.philosophy +comp.ai.shells +comp.ai.vision +comp.answers +comp.apps.spreadsheets +comp.arch +comp.arch.arithmetic +comp.arch.bus.vmebus +comp.arch.embedded +comp.arch.fpga +comp.arch.storage +comp.archives +comp.archives.admin +comp.archives.ms-windows.announce +comp.archives.ms-windows.discuss +comp.archives.msdos.announce +comp.archives.msdos.d +comp.bbs.majorbbs +comp.bbs.misc +comp.bbs.tbbs +comp.bbs.tsx +comp.bbs.waffle +comp.benchmarks +comp.binaries.acorn +comp.binaries.amiga +comp.binaries.apple2 +comp.binaries.cbm +comp.binaries.geos +comp.binaries.ibm.pc +comp.binaries.ibm.pc.d +comp.binaries.ibm.pc.wanted +comp.binaries.mac +comp.binaries.ms-windows +comp.binaries.newton +comp.binaries.os2 +comp.binaries.psion +comp.bugs.2bsd +comp.bugs.4bsd +comp.bugs.4bsd.ucb-fixes +comp.bugs.misc +comp.bugs.sys5 +comp.cad.autocad +comp.cad.cadence +comp.cad.compass +comp.cad.i-deas +comp.cad.microstation +comp.cad.microstation.programmer +comp.cad.pro-engineer +comp.cad.solidworks +comp.cad.synthesis +comp.client-server +comp.cog-eng +comp.compilers +comp.compilers.tools.javacc +comp.compilers.tools.pccts +comp.compression +comp.compression.research +comp.constraints +comp.data.administration +comp.databases +comp.databases.adabas +comp.databases.btrieve +comp.databases.filemaker +comp.databases.gupta +comp.databases.ibm-db2 +comp.databases.informix +comp.databases.ingres +comp.databases.ms-access +comp.databases.ms-sqlserver +comp.databases.object +comp.databases.olap +comp.databases.oracle.marketplace +comp.databases.oracle.misc +comp.databases.oracle.server +comp.databases.oracle.tools +comp.databases.paradox +comp.databases.pick +comp.databases.progress +comp.databases.rdb +comp.databases.revelation +comp.databases.sybase +comp.databases.theory +comp.databases.visual-dbase +comp.databases.xbase.codebase +comp.databases.xbase.fox +comp.databases.xbase.misc +comp.dcom.cabling +comp.dcom.cell-relay +comp.dcom.fax +comp.dcom.frame-relay +comp.dcom.isdn +comp.dcom.isdn.capi +comp.dcom.lans.ethernet +comp.dcom.lans.fddi +comp.dcom.lans.hyperchannel +comp.dcom.lans.misc +comp.dcom.lans.token-ring +comp.dcom.modems +comp.dcom.modems.cable +comp.dcom.net-analysis +comp.dcom.net-management +comp.dcom.servers +comp.dcom.sys.bay-networks +comp.dcom.sys.cisco +comp.dcom.sys.nortel +comp.dcom.telecom +comp.dcom.telecom.tech +comp.dcom.videoconf +comp.dcom.wan +comp.dcom.xdsl +comp.doc.management +comp.doc.techreports +comp.dsp +comp.editors +comp.edu +comp.edu.composition +comp.edu.languages.natural +comp.emacs +comp.emacs.xemacs +comp.emulators.announce +comp.emulators.apple2 +comp.emulators.cbm +comp.emulators.game-consoles +comp.emulators.mac.executor +comp.emulators.misc +comp.emulators.ms-windows.wine +comp.fonts +comp.graphics.algorithms +comp.graphics.animation +comp.graphics.api.inventor +comp.graphics.api.misc +comp.graphics.api.opengl +comp.graphics.api.pexlib +comp.graphics.apps.alias +comp.graphics.apps.avs +comp.graphics.apps.corel +comp.graphics.apps.data-explorer +comp.graphics.apps.freehand +comp.graphics.apps.gnuplot +comp.graphics.apps.iris-explorer +comp.graphics.apps.lightwave +comp.graphics.apps.pagemaker +comp.graphics.apps.paint-shop-pro +comp.graphics.apps.photoshop +comp.graphics.apps.softimage +comp.graphics.apps.ulead +comp.graphics.apps.wavefront +comp.graphics.misc +comp.graphics.packages.3dstudio +comp.graphics.rendering.misc +comp.graphics.rendering.raytracing +comp.graphics.rendering.renderman +comp.graphics.visualization +comp.groupware +comp.groupware.groupwise +comp.groupware.lotus-notes.admin +comp.groupware.lotus-notes.apps +comp.groupware.lotus-notes.misc +comp.groupware.lotus-notes.programmer +comp.home.automation +comp.home.misc +comp.human-factors +comp.infosystems +comp.infosystems.announce +comp.infosystems.gis +comp.infosystems.gopher +comp.infosystems.harvest +comp.infosystems.hyperg +comp.infosystems.interpedia +comp.infosystems.intranet +comp.infosystems.kiosks +comp.infosystems.search +comp.infosystems.wais +comp.infosystems.www.advocacy +comp.infosystems.www.announce +comp.infosystems.www.authoring.cgi +comp.infosystems.www.authoring.html +comp.infosystems.www.authoring.images +comp.infosystems.www.authoring.misc +comp.infosystems.www.authoring.site-design +comp.infosystems.www.authoring.stylesheets +comp.infosystems.www.authoring.tools +comp.infosystems.www.browsers.mac +comp.infosystems.www.browsers.misc +comp.infosystems.www.browsers.ms-windows +comp.infosystems.www.browsers.x +comp.infosystems.www.misc +comp.infosystems.www.servers.mac +comp.infosystems.www.servers.misc +comp.infosystems.www.servers.ms-windows +comp.infosystems.www.servers.unix +comp.internet.library +comp.internet.net-happenings +comp.ivideodisc +comp.lang.ada +comp.lang.apl +comp.lang.asm.x86 +comp.lang.asm370 +comp.lang.awk +comp.lang.basic.misc +comp.lang.basic.visual.3rdparty +comp.lang.basic.visual.announce +comp.lang.basic.visual.database +comp.lang.basic.visual.misc +comp.lang.beta +comp.lang.c +comp.lang.c.moderated +comp.lang.c++ +comp.lang.c++.leda +comp.lang.c++.moderated +comp.lang.clarion +comp.lang.clipper +comp.lang.clipper.visual-objects +comp.lang.clos +comp.lang.clu +comp.lang.cobol +comp.lang.dylan +comp.lang.eiffel +comp.lang.forth +comp.lang.forth.mac +comp.lang.fortran +comp.lang.functional +comp.lang.hermes +comp.lang.icon +comp.lang.idl +comp.lang.idl-pvwave +comp.lang.java.advocacy +comp.lang.java.announce +comp.lang.java.beans +comp.lang.java.corba +comp.lang.java.databases +comp.lang.java.gui +comp.lang.java.help +comp.lang.java.machine +comp.lang.java.programmer +comp.lang.java.security +comp.lang.java.softwaretools +comp.lang.javascript +comp.lang.labview +comp.lang.limbo +comp.lang.lisp +comp.lang.lisp.franz +comp.lang.lisp.mcl +comp.lang.lisp.x +comp.lang.logo +comp.lang.misc +comp.lang.ml +comp.lang.modula2 +comp.lang.modula3 +comp.lang.mumps +comp.lang.oberon +comp.lang.objective-c +comp.lang.pascal.ansi-iso +comp.lang.pascal.borland +comp.lang.pascal.delphi.advocacy +comp.lang.pascal.delphi.announce +comp.lang.pascal.delphi.components.misc +comp.lang.pascal.delphi.components.usage +comp.lang.pascal.delphi.components.writing +comp.lang.pascal.delphi.databases +comp.lang.pascal.delphi.misc +comp.lang.pascal.mac +comp.lang.pascal.misc +comp.lang.perl.announce +comp.lang.perl.misc +comp.lang.perl.modules +comp.lang.perl.tk +comp.lang.pl1 +comp.lang.pop +comp.lang.postscript +comp.lang.prograph +comp.lang.prolog +comp.lang.python +comp.lang.python.announce +comp.lang.rexx +comp.lang.sather +comp.lang.scheme +comp.lang.scheme.c +comp.lang.scheme.scsh +comp.lang.sigplan +comp.lang.smalltalk +comp.lang.tcl +comp.lang.tcl.announce +comp.lang.verilog +comp.lang.vhdl +comp.lang.visual +comp.lang.vrml +comp.laser-printers +comp.lsi +comp.lsi.cad +comp.lsi.testing +comp.mail.elm +comp.mail.eudora.mac +comp.mail.eudora.ms-windows +comp.mail.headers +comp.mail.imap +comp.mail.list-admin.policy +comp.mail.list-admin.software +comp.mail.maps +comp.mail.mh +comp.mail.mime +comp.mail.misc +comp.mail.multi-media +comp.mail.mush +comp.mail.mutt +comp.mail.pegasus-mail.misc +comp.mail.pegasus-mail.ms-windows +comp.mail.pine +comp.mail.sendmail +comp.mail.smail +comp.mail.uucp +comp.mail.zmail +comp.misc +comp.multimedia +comp.music.midi +comp.music.misc +comp.music.research +comp.networks.noctools.announce +comp.networks.noctools.bugs +comp.networks.noctools.d +comp.networks.noctools.submissions +comp.networks.noctools.tools +comp.networks.noctools.wanted +comp.newprod +comp.object +comp.object.corba +comp.object.logic +comp.org.acm +comp.org.cauce +comp.org.cpsr.announce +comp.org.cpsr.talk +comp.org.decus +comp.org.eff.news +comp.org.eff.talk +comp.org.fidonet +comp.org.ieee +comp.org.isoc.interest +comp.org.issnnet +comp.org.lisp-users +comp.org.sug +comp.org.team-os2 +comp.org.uniforum +comp.org.usenix +comp.org.usenix.roomshare +comp.org.user-groups.apcug +comp.org.user-groups.management +comp.org.user-groups.meetings +comp.org.user-groups.misc +comp.org.user-groups.newsletters +comp.os.aos +comp.os.chorus +comp.os.coherent +comp.os.cpm +comp.os.cpm.amethyst +comp.os.geos.misc +comp.os.geos.programmer +comp.os.inferno +comp.os.lantastic +comp.os.linux.advocacy +comp.os.linux.alpha +comp.os.linux.announce +comp.os.linux.answers +comp.os.linux.development.apps +comp.os.linux.development.system +comp.os.linux.hardware +comp.os.linux.m68k +comp.os.linux.misc +comp.os.linux.networking +comp.os.linux.powerpc +comp.os.linux.setup +comp.os.linux.x +comp.os.lynx +comp.os.mach +comp.os.magic-cap +comp.os.minix +comp.os.misc +comp.os.ms-windows.advocacy +comp.os.ms-windows.announce +comp.os.ms-windows.apps.comm +comp.os.ms-windows.apps.compatibility.win95 +comp.os.ms-windows.apps.financial +comp.os.ms-windows.apps.misc +comp.os.ms-windows.apps.utilities.win3x +comp.os.ms-windows.apps.utilities.win95 +comp.os.ms-windows.apps.winsock.mail +comp.os.ms-windows.apps.winsock.misc +comp.os.ms-windows.apps.winsock.news +comp.os.ms-windows.apps.word-proc +comp.os.ms-windows.ce +comp.os.ms-windows.misc +comp.os.ms-windows.networking.misc +comp.os.ms-windows.networking.ras +comp.os.ms-windows.networking.tcp-ip +comp.os.ms-windows.networking.win95 +comp.os.ms-windows.networking.windows +comp.os.ms-windows.nt.admin.misc +comp.os.ms-windows.nt.admin.networking +comp.os.ms-windows.nt.admin.security +comp.os.ms-windows.nt.advocacy +comp.os.ms-windows.nt.announce +comp.os.ms-windows.nt.misc +comp.os.ms-windows.nt.pre-release +comp.os.ms-windows.nt.setup.hardware +comp.os.ms-windows.nt.setup.misc +comp.os.ms-windows.nt.software.backoffice +comp.os.ms-windows.nt.software.compatibility +comp.os.ms-windows.nt.software.services +comp.os.ms-windows.pre-release +comp.os.ms-windows.programmer.controls +comp.os.ms-windows.programmer.graphics +comp.os.ms-windows.programmer.memory +comp.os.ms-windows.programmer.misc +comp.os.ms-windows.programmer.multimedia +comp.os.ms-windows.programmer.networks +comp.os.ms-windows.programmer.nt.kernel-mode +comp.os.ms-windows.programmer.ole +comp.os.ms-windows.programmer.tools.mfc +comp.os.ms-windows.programmer.tools.misc +comp.os.ms-windows.programmer.tools.owl +comp.os.ms-windows.programmer.tools.winsock +comp.os.ms-windows.programmer.vxd +comp.os.ms-windows.programmer.win32 +comp.os.ms-windows.programmer.winhelp +comp.os.ms-windows.setup.win3x +comp.os.ms-windows.setup.win95 +comp.os.ms-windows.video +comp.os.ms-windows.win95.misc +comp.os.ms-windows.win95.moderated +comp.os.ms-windows.win95.setup +comp.os.msdos.4dos +comp.os.msdos.apps +comp.os.msdos.desqview +comp.os.msdos.djgpp +comp.os.msdos.mail-news +comp.os.msdos.misc +comp.os.msdos.programmer +comp.os.msdos.programmer.turbovision +comp.os.netware.announce +comp.os.netware.connectivity +comp.os.netware.misc +comp.os.netware.security +comp.os.os2.advocacy +comp.os.os2.announce +comp.os.os2.apps +comp.os.os2.beta +comp.os.os2.bugs +comp.os.os2.comm +comp.os.os2.games +comp.os.os2.mail-news +comp.os.os2.marketplace +comp.os.os2.misc +comp.os.os2.moderated +comp.os.os2.multimedia +comp.os.os2.networking.misc +comp.os.os2.networking.server +comp.os.os2.networking.tcp-ip +comp.os.os2.networking.www +comp.os.os2.programmer.misc +comp.os.os2.programmer.oop +comp.os.os2.programmer.porting +comp.os.os2.programmer.tools +comp.os.os2.scitech +comp.os.os2.setup.misc +comp.os.os2.setup.storage +comp.os.os2.setup.video +comp.os.os2.utilities +comp.os.os9 +comp.os.parix +comp.os.plan9 +comp.os.qnx +comp.os.research +comp.os.rsts +comp.os.v +comp.os.vms +comp.os.vxworks +comp.os.xinu +comp.parallel +comp.parallel.mpi +comp.parallel.pvm +comp.patents +comp.periphs +comp.periphs.printers +comp.periphs.scanners +comp.periphs.scsi +comp.programming +comp.programming.contests +comp.programming.literate +comp.programming.threads +comp.protocols.appletalk +comp.protocols.dicom +comp.protocols.dns.bind +comp.protocols.dns.ops +comp.protocols.dns.std +comp.protocols.ibm +comp.protocols.iso +comp.protocols.iso.dev-environ +comp.protocols.iso.x400 +comp.protocols.iso.x400.gateway +comp.protocols.kerberos +comp.protocols.kermit.announce +comp.protocols.kermit.misc +comp.protocols.misc +comp.protocols.nfs +comp.protocols.pcnet +comp.protocols.ppp +comp.protocols.smb +comp.protocols.snmp +comp.protocols.tcp-ip +comp.protocols.tcp-ip.domains +comp.protocols.tcp-ip.ibmpc +comp.protocols.time.ntp +comp.publish.cdrom.hardware +comp.publish.cdrom.multimedia +comp.publish.cdrom.software +comp.publish.electronic.developer +comp.publish.electronic.end-user +comp.publish.electronic.misc +comp.publish.prepress +comp.realtime +comp.research.japan +comp.risks +comp.robotics.misc +comp.robotics.research +comp.security.announce +comp.security.firewalls +comp.security.gss-api +comp.security.misc +comp.security.pgp.announce +comp.security.pgp.discuss +comp.security.pgp.resources +comp.security.pgp.tech +comp.security.pgp.test +comp.security.ssh +comp.security.unix +comp.simulation +comp.society +comp.society.cu-digest +comp.society.development +comp.society.folklore +comp.society.futures +comp.society.privacy +comp.soft-sys.ace +comp.soft-sys.andrew +comp.soft-sys.app-builder.appware +comp.soft-sys.app-builder.dynasty +comp.soft-sys.app-builder.forte +comp.soft-sys.app-builder.uniface +comp.soft-sys.business.sap +comp.soft-sys.dce +comp.soft-sys.gis.esri +comp.soft-sys.khoros +comp.soft-sys.math.mathematica +comp.soft-sys.math.scilab +comp.soft-sys.matlab +comp.soft-sys.middleware.bea-tuxedo +comp.soft-sys.middleware.opendoc +comp.soft-sys.nextstep +comp.soft-sys.powerbuilder +comp.soft-sys.ptolemy +comp.soft-sys.sas +comp.soft-sys.shazam +comp.soft-sys.stat.spss +comp.soft-sys.stat.systat +comp.software-eng +comp.software.arabic +comp.software.config-mgmt +comp.software.international +comp.software.licensing +comp.software.measurement +comp.software.testing +comp.software.year-2000 +comp.sources.acorn +comp.sources.amiga +comp.sources.apple2 +comp.sources.bugs +comp.sources.d +comp.sources.delphi +comp.sources.games +comp.sources.games.bugs +comp.sources.hp48 +comp.sources.mac +comp.sources.misc +comp.sources.postscript +comp.sources.reviewed +comp.sources.sun +comp.sources.testers +comp.sources.unix +comp.sources.wanted +comp.sources.x +comp.specification.larch +comp.specification.misc +comp.specification.z +comp.speech +comp.speech.research +comp.speech.users +comp.std.announce +comp.std.c +comp.std.c++ +comp.std.internat +comp.std.lisp +comp.std.misc +comp.std.unix +comp.std.wireless +comp.sw.components +comp.sys.3b1 +comp.sys.acorn.advocacy +comp.sys.acorn.announce +comp.sys.acorn.apps +comp.sys.acorn.extra-cpu +comp.sys.acorn.games +comp.sys.acorn.hardware +comp.sys.acorn.misc +comp.sys.acorn.networking +comp.sys.acorn.programmer +comp.sys.alliant +comp.sys.amiga.advocacy +comp.sys.amiga.announce +comp.sys.amiga.applications +comp.sys.amiga.audio +comp.sys.amiga.cd32 +comp.sys.amiga.datacomm +comp.sys.amiga.emulations +comp.sys.amiga.games +comp.sys.amiga.graphics +comp.sys.amiga.hardware +comp.sys.amiga.introduction +comp.sys.amiga.marketplace +comp.sys.amiga.misc +comp.sys.amiga.multimedia +comp.sys.amiga.networking +comp.sys.amiga.programmer +comp.sys.amiga.reviews +comp.sys.amiga.uucp +comp.sys.amstrad.8bit +comp.sys.apollo +comp.sys.apple2 +comp.sys.apple2.comm +comp.sys.apple2.gno +comp.sys.apple2.marketplace +comp.sys.apple2.programmer +comp.sys.apple2.usergroups +comp.sys.arm +comp.sys.atari.8bit +comp.sys.atari.advocacy +comp.sys.atari.announce +comp.sys.atari.programmer +comp.sys.atari.st +comp.sys.atari.st.tech +comp.sys.att +comp.sys.be.advocacy +comp.sys.be.announce +comp.sys.be.help +comp.sys.be.misc +comp.sys.be.programmer +comp.sys.cbm +comp.sys.cdc +comp.sys.concurrent +comp.sys.convex +comp.sys.dec +comp.sys.dec.micro +comp.sys.encore +comp.sys.handhelds +comp.sys.harris +comp.sys.hp.apps +comp.sys.hp.hardware +comp.sys.hp.hpux +comp.sys.hp.misc +comp.sys.hp.mpe +comp.sys.hp48 +comp.sys.ibm.as400.misc +comp.sys.ibm.pc.classic +comp.sys.ibm.pc.demos +comp.sys.ibm.pc.digest +comp.sys.ibm.pc.games.action +comp.sys.ibm.pc.games.adventure +comp.sys.ibm.pc.games.announce +comp.sys.ibm.pc.games.flight-sim +comp.sys.ibm.pc.games.marketplace +comp.sys.ibm.pc.games.misc +comp.sys.ibm.pc.games.naval +comp.sys.ibm.pc.games.rpg +comp.sys.ibm.pc.games.space-sim +comp.sys.ibm.pc.games.sports +comp.sys.ibm.pc.games.strategic +comp.sys.ibm.pc.games.war-historical +comp.sys.ibm.pc.hardware.cd-rom +comp.sys.ibm.pc.hardware.chips +comp.sys.ibm.pc.hardware.comm +comp.sys.ibm.pc.hardware.misc +comp.sys.ibm.pc.hardware.networking +comp.sys.ibm.pc.hardware.storage +comp.sys.ibm.pc.hardware.systems +comp.sys.ibm.pc.hardware.video +comp.sys.ibm.pc.misc +comp.sys.ibm.pc.rt +comp.sys.ibm.pc.soundcard.advocacy +comp.sys.ibm.pc.soundcard.games +comp.sys.ibm.pc.soundcard.misc +comp.sys.ibm.pc.soundcard.music +comp.sys.ibm.pc.soundcard.tech +comp.sys.ibm.ps2.hardware +comp.sys.ibm.sys3x.misc +comp.sys.intel +comp.sys.intel.ipsc310 +comp.sys.intergraph +comp.sys.isis +comp.sys.laptops +comp.sys.m6809 +comp.sys.m68k +comp.sys.m88k +comp.sys.mac.advocacy +comp.sys.mac.announce +comp.sys.mac.apps +comp.sys.mac.comm +comp.sys.mac.databases +comp.sys.mac.digest +comp.sys.mac.games.action +comp.sys.mac.games.adventure +comp.sys.mac.games.announce +comp.sys.mac.games.flight-sim +comp.sys.mac.games.marketplace +comp.sys.mac.games.misc +comp.sys.mac.games.strategic +comp.sys.mac.graphics +comp.sys.mac.hardware.misc +comp.sys.mac.hardware.storage +comp.sys.mac.hardware.video +comp.sys.mac.hypercard +comp.sys.mac.misc +comp.sys.mac.oop.macapp3 +comp.sys.mac.oop.misc +comp.sys.mac.oop.powerplant +comp.sys.mac.oop.tcl +comp.sys.mac.portables +comp.sys.mac.printing +comp.sys.mac.programmer.codewarrior +comp.sys.mac.programmer.games +comp.sys.mac.programmer.help +comp.sys.mac.programmer.info +comp.sys.mac.programmer.misc +comp.sys.mac.programmer.tools +comp.sys.mac.scitech +comp.sys.mac.system +comp.sys.mac.wanted +comp.sys.mentor +comp.sys.mips +comp.sys.misc +comp.sys.msx +comp.sys.ncr +comp.sys.net-computer.advocacy +comp.sys.net-computer.announce +comp.sys.net-computer.misc +comp.sys.newton.announce +comp.sys.newton.marketplace +comp.sys.newton.misc +comp.sys.newton.programmer +comp.sys.next.advocacy +comp.sys.next.announce +comp.sys.next.bugs +comp.sys.next.hardware +comp.sys.next.marketplace +comp.sys.next.misc +comp.sys.next.programmer +comp.sys.next.software +comp.sys.next.sysadmin +comp.sys.northstar +comp.sys.nsc.32k +comp.sys.oric +comp.sys.palmtops +comp.sys.palmtops.pilot +comp.sys.pen +comp.sys.powerpc.advocacy +comp.sys.powerpc.misc +comp.sys.powerpc.tech +comp.sys.prime +comp.sys.proteon +comp.sys.psion.announce +comp.sys.psion.apps +comp.sys.psion.comm +comp.sys.psion.marketplace +comp.sys.psion.misc +comp.sys.psion.programmer +comp.sys.psion.reviews +comp.sys.pyramid +comp.sys.ridge +comp.sys.sequent +comp.sys.sgi.admin +comp.sys.sgi.announce +comp.sys.sgi.apps +comp.sys.sgi.audio +comp.sys.sgi.bugs +comp.sys.sgi.graphics +comp.sys.sgi.hardware +comp.sys.sgi.marketplace +comp.sys.sgi.misc +comp.sys.sinclair +comp.sys.stratus +comp.sys.sun.admin +comp.sys.sun.announce +comp.sys.sun.apps +comp.sys.sun.hardware +comp.sys.sun.misc +comp.sys.sun.wanted +comp.sys.super +comp.sys.tahoe +comp.sys.tandem +comp.sys.tandy +comp.sys.ti +comp.sys.ti.explorer +comp.sys.transputer +comp.sys.unisys +comp.sys.wearables +comp.sys.xerox +comp.sys.zenith +comp.sys.zenith.z100 +comp.terminals +comp.terminals.bitgraph +comp.terminals.tty5620 +comp.text +comp.text.desktop +comp.text.frame +comp.text.interleaf +comp.text.pdf +comp.text.sgml +comp.text.tex +comp.theory +comp.theory.cell-automata +comp.theory.dynamic-sys +comp.theory.info-retrieval +comp.theory.self-org-sys +comp.unix.admin +comp.unix.advocacy +comp.unix.aix +comp.unix.amiga +comp.unix.aux +comp.unix.bsd.386bsd.announce +comp.unix.bsd.386bsd.misc +comp.unix.bsd.bsdi.announce +comp.unix.bsd.bsdi.misc +comp.unix.bsd.freebsd.announce +comp.unix.bsd.freebsd.misc +comp.unix.bsd.misc +comp.unix.bsd.netbsd.announce +comp.unix.bsd.netbsd.misc +comp.unix.bsd.openbsd.announce +comp.unix.bsd.openbsd.misc +comp.unix.cde +comp.unix.cray +comp.unix.dos-under-unix +comp.unix.internals +comp.unix.large +comp.unix.machten +comp.unix.misc +comp.unix.osf.misc +comp.unix.osf.osf1 +comp.unix.pc-clone.16bit +comp.unix.pc-clone.32bit +comp.unix.programmer +comp.unix.questions +comp.unix.sco.announce +comp.unix.sco.misc +comp.unix.sco.programmer +comp.unix.shell +comp.unix.solaris +comp.unix.sys3 +comp.unix.sys5.misc +comp.unix.sys5.r3 +comp.unix.sys5.r4 +comp.unix.ultrix +comp.unix.unixware.announce +comp.unix.unixware.misc +comp.unix.user-friendly +comp.unix.xenix.misc +comp.unix.xenix.sco +comp.virus +comp.windows.garnet +comp.windows.interviews +comp.windows.misc +comp.windows.news +comp.windows.open-look +comp.windows.suit +comp.windows.ui-builders.teleuse +comp.windows.ui-builders.uimx +comp.windows.x +comp.windows.x.announce +comp.windows.x.apps +comp.windows.x.i386unix +comp.windows.x.intrinsics +comp.windows.x.motif +computer42.admin +computer42.announce +computer42.mail2news.germnews +computer42.mail2news.linux-alert +computer42.mail2news.pgp-freunde +computer42.mail2news.radio-vatikan +computer42.statistik +computer42.test +concordia.general +control +control.cancel +control.checkgroups +control.newgroup +control.rmgroup +control.sendsys +cor.forsale +cor.gamers +cor.single +cornell.talk.italian +courts.usa.config +courts.usa.federal.supreme +courts.usa.state.ohio.appls-8th +courts.usa.state.ohio.config +courts.usa.state.ohio.supreme +creighton.dental +cris.fido.asian_link +crosslink.announce +crosslink.general +crosslink.test +crosslink.www +crs.buy_sell +cruzio.general +cruzio.network +cs-monolit.gated.lists.bsdi-users +cs-monolit.gated.lists.net-happenings +cs.logs.mirror +cscuk.news +csd.aflb +csd.bboard +csd.building +csd.cmsc426 +csd.cmsc620 +csd.cmsc724 +csd.cmsc818x +csd.cmsc818z +csd.logic +csd.machines.hp +csd.new-phd +csd.sports +csn.ads +csn.ml.com-priv +csn.ml.kids +csn.ml.kidsnet +csn.ml.nisus-info +csn.ml.saturn +csn.test +csstu.general +ct.diskussion +ct.talk.projekte +ctdl.lang.c +ctdl.lang.c++ +ctdl.lang.pascal +ctdl.sys.atari.st +ctdl.sys.atari8 +ctdl.sys.mac +cu-den.general +cu.applmath +cu.business.general +cu.business.general.distance +cu.business.grad.mba +cu.business.grad.ms +cu.business.grad.phd +cu.business.ugrad +cu.courses.acct3220 +cu.courses.acct4430 +cu.courses.acct4440 +cu.courses.acct6420 +cu.courses.appm1350 +cu.courses.aren2010 +cu.courses.aren2020 +cu.courses.aren3010 +cu.courses.aren4010 +cu.courses.aren4570 +cu.courses.cdss2010 +cu.courses.chem1131-l250 +cu.courses.chem1131-l294 +cu.courses.chen4330 +cu.courses.chen5360 +cu.courses.clas2100 +cu.courses.comm1600-010 +cu.courses.comm1600-011 +cu.courses.cs1300-030 +cu.courses.cs2010 +cu.courses.cs2250 +cu.courses.cs3155 +cu.courses.cs3245 +cu.courses.cs3287 +cu.courses.cs5573 +cu.courses.cs5673 +cu.courses.csci-networks +cu.courses.csci-realtime +cu.courses.csci-sysadmin +cu.courses.csci7212 +cu.courses.cven5060 +cu.courses.cven5276 +cu.courses.ecen1000 +cu.courses.ecen4013 +cu.courses.ecen5254 +cu.courses.ecen5523 +cu.courses.ecen5593 +cu.courses.econ4111 +cu.courses.econ4999 +cu.courses.engl1191-013 +cu.courses.engl1260 +cu.courses.engl1500 +cu.courses.engl4032 +cu.courses.envd3002 +cu.courses.envd4352 +cu.courses.epob4410 +cu.courses.fnce4400 +cu.courses.fren3120 +cu.courses.fren5120 +cu.courses.geen1400-010 +cu.courses.geen1400-030 +cu.courses.grmn3520 +cu.courses.hist1020-3 +cu.courses.hist1020-5 +cu.courses.hist4623 +cu.courses.hist4723 +cu.courses.hist4733 +cu.courses.humn3093 +cu.courses.infs3050 +cu.courses.infs6150 +cu.courses.laws5223 +cu.courses.laws8428 +cu.courses.ling1000-011 +cu.courses.mbac6130 +cu.courses.mbat6450 +cu.courses.phil1440 +cu.courses.phys1230 +cu.courses.phys2010 +cu.courses.phys2170 +cu.courses.phys3220 +cu.courses.phys3330 +cu.courses.pmus5526 +cu.courses.psci1101 +cu.courses.psci3011 +cu.courses.psyc4145 +cu.courses.tlen5190 +cu.courses.uwrp3020 +cu.coursese.ecen5254 +cu.cs.clim +cu.cs.grads +cu.cs.macl.info +cu.cs.srl +cu.cs.systat +cu.cs.systat.tmr +cu.cs.ugrads +cu.decstation.managers +cu.garnet +cu.general +cu.grads.teaching +cu.grads.teaching.leads +cu.ics +cu.indonesia +cu.iscabbs +cu.its +cu.misc +cu.misc.misc +cu.motif-talk +cu.netmanagers +cu.netstat +cu.physics.ugrads +cu.slug +cu.test +cu.vlsi +cuug.announce +cuug.answers +cuug.help +cuug.jobs +cuug.marketplace +cuug.misc +cuug.networking +cuug.sig +cwo.x11.intrinsics +cwo.x11.mltalk +cz.answers +cz.comp.amiga +cz.comp.cstex +cz.comp.editors +cz.comp.grafika +cz.comp.ibmpc +cz.comp.lang.basic.visual +cz.comp.lang.java +cz.comp.lang.perl +cz.comp.lang.python +cz.comp.linux +cz.comp.linux.czman +cz.comp.mac +cz.comp.mail.sendmail +cz.comp.microsoft.asp +cz.comp.microsoft.msx +cz.comp.microsoft.sql +cz.comp.multimedia +cz.comp.os2 +cz.comp.sgi +cz.comp.vms +cz.comp.windows.apps.misc +cz.comp.windows.apps.msmail +cz.comp.windows.ms +cz.comp.windows.nt +cz.net.abuse.misc +cz.net.announce +cz.net.csinfo +cz.net.hiedu +cz.net.inetnls +cz.net.internet +cz.net.netware +cz.net.providers +cz.net.resources +cz.net.smajlik +cz.net.tcpip +cz.net.www +cz.news.admin +cz.news.user +cz.rec.foto +cz.rec.sport +cz.sci.alife +cz.sci.informatics.announce.seminar +cz.sci.informatics.contact +cz.sci.med.monkin +cz.soc.announce +cz.soc.carolina-cs +cz.soc.christian +cz.soc.cimrman +cz.soc.hrad.info +cz.soc.mensa +cz.soc.misc +cz.soc.orient +cz.soc.pen-friends +cz.soc.school.open.misc +cz.talk +cz.talk.drogy +cz.talk.politika +cz.test +cz.zamestnani.hledam +cz.zamestnani.nabidky +dal.general +dal.test +dc.biking +dc.config +dc.dining +dc.driving +dc.forsale.computers +dc.forsale.misc +dc.general +dc.housing +dc.jobs +dc.media +dc.music +dc.org.linux-users +dc.politics +dc.redskins +dc.romance +dc.smithsonian +dc.test +de.admin.archiv +de.admin.infos +de.admin.lists +de.admin.misc +de.admin.net-abuse.announce +de.admin.net-abuse.mail +de.admin.net-abuse.misc +de.admin.net-abuse.news +de.admin.news.announce +de.admin.news.groups +de.admin.news.misc +de.admin.news.regeln +de.admin.submaps +de.alt.0d +de.alt.1 +de.alt.adhclub +de.alt.admin +de.alt.anime +de.alt.arnooo +de.alt.astrologie +de.alt.augenoptik +de.alt.auto +de.alt.ballett+tanz +de.alt.binaries.pictures.erotica.male +de.alt.binaries.pictures.male +de.alt.comics +de.alt.comm.isdn4linux +de.alt.comm.mgetty +de.alt.comp.gnome +de.alt.comp.sap-r3 +de.alt.dateien.mannsbilder +de.alt.dateien.weibsbilder +de.alt.dummschwatz +de.alt.fan.aldi +de.alt.fan.bluemchen +de.alt.fan.comedy +de.alt.fan.die-aerzte +de.alt.fan.dudenhoeffer +de.alt.fan.fruehstyxradio +de.alt.fan.furry +de.alt.fan.haraldschmidt +de.alt.fan.helgeschneider +de.alt.fan.konsumterror +de.alt.fan.pluesch +de.alt.fan.prince +de.alt.fan.rrr +de.alt.fan.swf3 +de.alt.fan.tabak +de.alt.fan.tastische4 +de.alt.flame +de.alt.fock +de.alt.folklore.computer +de.alt.games.pbem +de.alt.games.quake +de.alt.games.schach +de.alt.games.unreal +de.alt.gblf +de.alt.geschichten +de.alt.gruppenkasper +de.alt.hoerfunk +de.alt.jahr2000 +de.alt.jugendschutz +de.alt.messe +de.alt.mud +de.alt.music.alternative +de.alt.music.dj +de.alt.music.jazz +de.alt.music.metal +de.alt.naturheilkunde +de.alt.netdigest +de.alt.paranormal +de.alt.punk +de.alt.radio-scanner +de.alt.sci.architektur +de.alt.sci.ergonomie +de.alt.soc.anarchie +de.alt.soc.antifa +de.alt.soc.punk +de.alt.soc.tierrechte +de.alt.soc.transgendered +de.alt.sources.linux.patches +de.alt.sport.american +de.alt.sport.winter +de.alt.sysadmin.recovery +de.alt.szene.gothic +de.alt.talk.kasper +de.alt.technik.waffen +de.alt.test +de.alt.tierrechte +de.alt.tv.mash +de.alt.tv.wissenschaft +de.alt.ufo +de.alt.umfragen +de.alt.wg-geschichten +de.alt.windsurfen +de.alt.zotty.answers +de.answers +de.comm.chatsystems +de.comm.ham +de.comm.infosystems.misc +de.comm.infosystems.www.authoring +de.comm.infosystems.www.browsers +de.comm.infosystems.www.pages +de.comm.infosystems.www.pages.announce +de.comm.infosystems.www.pages.misc +de.comm.infosystems.www.servers +de.comm.internet.misc +de.comm.internet.routing +de.comm.isdn.computer +de.comm.isdn.misc +de.comm.isdn.technik +de.comm.isdn.telefon +de.comm.isdn.tk-anlage +de.comm.misc +de.comm.mobil.geraete +de.comm.mobil.geraete.misc +de.comm.mobil.geraete.nokia +de.comm.mobil.misc +de.comm.mobil.netze +de.comm.mobil.pager +de.comm.mobil.technik +de.comm.modem +de.comm.protocols.misc +de.comm.protocols.tcp-ip +de.comm.protocols.zconnect +de.comm.provider.metronet +de.comm.provider.misc +de.comm.provider.suche +de.comm.provider.t-online +de.comm.software.crosspoint +de.comm.software.forte-agent +de.comm.software.mailreader.misc +de.comm.software.mailreader.pegasus +de.comm.software.mailtraq +de.comm.software.misc +de.comm.software.newsreader +de.comm.software.ums +de.comm.telefonie.misc +de.comm.telefonie.service +de.comm.telefonie.tarife +de.comm.uucp +de.comp.advocacy +de.comp.audio +de.comp.cad +de.comp.datenbanken.misc +de.comp.datenbanken.ms-access +de.comp.gnu +de.comp.graphik +de.comp.lang.assembler.misc +de.comp.lang.assembler.x86 +de.comp.lang.c +de.comp.lang.forth +de.comp.lang.java +de.comp.lang.javascript +de.comp.lang.misc +de.comp.lang.pascal.delphi +de.comp.lang.pascal.misc +de.comp.lang.perl +de.comp.misc +de.comp.objekt +de.comp.office-pakete.misc +de.comp.office-pakete.staroffice +de.comp.os.be +de.comp.os.bsd +de.comp.os.linux.hardware +de.comp.os.linux.misc +de.comp.os.linux.networking +de.comp.os.linux.x +de.comp.os.misc +de.comp.os.ms-windows.misc +de.comp.os.ms-windows.programmer +de.comp.os.msdos +de.comp.os.os2.advocacy +de.comp.os.os2.apps +de.comp.os.os2.misc +de.comp.os.os2.networking +de.comp.os.os2.programmer +de.comp.os.os2.setup +de.comp.os.sinix +de.comp.os.unix +de.comp.os.unix.apps +de.comp.os.unix.bsd +de.comp.os.unix.discussion +de.comp.os.unix.linux.hardware +de.comp.os.unix.linux.misc +de.comp.os.unix.linux.newusers +de.comp.os.unix.misc +de.comp.os.unix.networking +de.comp.os.unix.programming +de.comp.os.unix.sinix +de.comp.os.unix.x11 +de.comp.os.vms +de.comp.periph.cdrom +de.comp.periph.misc +de.comp.security +de.comp.shareware.entwicklung +de.comp.shareware.misc +de.comp.standards +de.comp.sys.amiga.advocacy +de.comp.sys.amiga.archive +de.comp.sys.amiga.comm +de.comp.sys.amiga.misc +de.comp.sys.amiga.tech +de.comp.sys.amiga.unix +de.comp.sys.handhelds.misc +de.comp.sys.handhelds.newton +de.comp.sys.handhelds.palm-pilot +de.comp.sys.handhelds.psion +de.comp.sys.handhelds.windows-ce +de.comp.sys.ibm-pc +de.comp.sys.mac +de.comp.sys.misc +de.comp.sys.next +de.comp.sys.novell +de.comp.sys.st +de.comp.text.dtp +de.comp.text.misc +de.comp.text.ms-word +de.comp.text.tex +de.comp.x11 +de.etc.bahn.announce +de.etc.bahn.eisenbahn +de.etc.bahn.misc +de.etc.bahn.stadtverkehr +de.etc.beruf.misc +de.etc.beruf.selbstaendig +de.etc.fahrzeug.auto +de.etc.fahrzeug.misc +de.etc.finanz.banken+broker +de.etc.finanz.boerse +de.etc.finanz.misc +de.etc.finanz.software +de.etc.haushalt +de.etc.lists +de.etc.misc +de.etc.notfallrettung +de.etc.schreiben.lyrik +de.etc.schreiben.misc +de.etc.schreiben.prosa +de.etc.selbsthilfe.angst +de.etc.selbsthilfe.gehoer +de.etc.selbsthilfe.misc +de.etc.selbsthilfe.missbrauch +de.etc.sprache.deutsch +de.etc.sprache.klassisch +de.etc.sprache.misc +de.markt.arbeit.biete +de.markt.arbeit.d +de.markt.arbeit.suche +de.markt.buecher +de.markt.comp.hardware +de.markt.comp.misc +de.markt.comp.software.misc +de.markt.misc +de.markt.tiere +de.markt.wohnen +de.newusers.infos +de.newusers.questions +de.org.ccc +de.org.in +de.org.mensa +de.org.misc +de.org.politik.misc +de.org.politik.spd +de.rec.alpinismus +de.rec.buecher +de.rec.drachen +de.rec.fahrrad +de.rec.film.heimkino +de.rec.film.kritiken +de.rec.film.misc +de.rec.fotografie +de.rec.garten +de.rec.heimwerken +de.rec.hoerspiel +de.rec.kunst.misc +de.rec.kunst.theater +de.rec.luftfahrt +de.rec.mampf +de.rec.misc +de.rec.modelle.bahn +de.rec.modelle.misc +de.rec.motorrad +de.rec.motorroller +de.rec.music.audio +de.rec.music.elektronisch +de.rec.music.klassik +de.rec.music.misc +de.rec.music.rock+pop +de.rec.orakel +de.rec.outdoors +de.rec.reisen.camping +de.rec.reisen.misc +de.rec.sammeln +de.rec.sf.babylon5.infos +de.rec.sf.babylon5.misc +de.rec.sf.misc +de.rec.sf.perry-rhodan +de.rec.sf.startrek.deep-space-9 +de.rec.sf.startrek.enterprise +de.rec.sf.startrek.misc +de.rec.sf.startrek.technologie +de.rec.sf.startrek.voyager +de.rec.sf.starwars +de.rec.spiele.brett+karten +de.rec.spiele.computer.action +de.rec.spiele.computer.adventure +de.rec.spiele.computer.misc +de.rec.spiele.computer.rpg +de.rec.spiele.computer.simulation +de.rec.spiele.computer.strategie +de.rec.spiele.computer.technik +de.rec.spiele.misc +de.rec.spiele.rpg.live +de.rec.spiele.rpg.misc +de.rec.sport.budo +de.rec.sport.eishockey +de.rec.sport.fallschirm +de.rec.sport.fussball +de.rec.sport.misc +de.rec.sport.motor.auto +de.rec.sport.motor.misc +de.rec.sport.motor.motorrad +de.rec.sport.segeln +de.rec.sport.tanzen +de.rec.sport.tauchen +de.rec.tiere.aquaristik +de.rec.tiere.hunde +de.rec.tiere.katzen +de.rec.tiere.misc +de.rec.tiere.pferde +de.rec.tiere.ratten +de.rec.tiere.terraristik +de.rec.tiere.voegel +de.rec.tv.akte-x +de.rec.tv.lindenstrasse +de.rec.tv.misc +de.rec.tv.simpsons +de.rec.tv.technik +de.sci.announce +de.sci.astronomie +de.sci.biologie +de.sci.chemie +de.sci.electronics +de.sci.geschichte +de.sci.informatik.ki +de.sci.informatik.misc +de.sci.ing +de.sci.mathematik +de.sci.medizin.allergie +de.sci.medizin.cannabis +de.sci.medizin.diabetes +de.sci.medizin.logopaedie +de.sci.medizin.misc +de.sci.medizin.physiotherapie +de.sci.medizin.psychiatrie +de.sci.misc +de.sci.museum +de.sci.oekonomie +de.sci.paedagogik +de.sci.philosophie +de.sci.physik +de.sci.politologie +de.sci.psychologie +de.sci.raumfahrt +de.sci.sci-theorie +de.sci.soziologie +de.sci.theologie +de.soc.arbeit +de.soc.datenschutz +de.soc.drogen +de.soc.familie.misc +de.soc.familie.vaeter +de.soc.handicap +de.soc.jugendarbeit +de.soc.kontakte.freizuegig +de.soc.kontakte.misc +de.soc.kultur +de.soc.medien +de.soc.menschenrechte +de.soc.misc +de.soc.netzkultur +de.soc.pflichtdienste +de.soc.politik.misc +de.soc.politik.texte +de.soc.recht.announce +de.soc.recht.datennetze +de.soc.recht.misc +de.soc.senioren +de.soc.studium +de.soc.studium.verbindungen +de.soc.subkultur.bdsm +de.soc.subkultur.gothic +de.soc.subkultur.misc +de.soc.umwelt +de.soc.verkehr +de.soc.weltanschauung.buddhismus +de.soc.weltanschauung.christentum +de.soc.weltanschauung.misc +de.soc.weltanschauung.scientology +de.soc.wirtschaft +de.soc.zensur +de.talk.bizarre +de.talk.jokes +de.talk.jokes.d +de.talk.jugend +de.talk.liebesakt +de.talk.misc +de.talk.romance +de.talk.tagesgeschehen +de.test +demon.adverts +demon.adverts.d +demon.announce +demon.answers +demon.archives.announce +demon.archives.d +demon.homepages.adverts +demon.homepages.authoring +demon.ip.cppnews +demon.ip.developers +demon.ip.discoveries +demon.ip.support +demon.ip.support.amiga +demon.ip.support.archimedes +demon.ip.support.atari +demon.ip.support.ie4 +demon.ip.support.mac +demon.ip.support.nt +demon.ip.support.other +demon.ip.support.pc +demon.ip.support.pc.announce +demon.ip.support.turnpike +demon.ip.support.unix +demon.ip.support.win95 +demon.ip.winsock +demon.ip.winsock.dics +demon.ip.www +demon.local +demon.news +demon.nl.announce +demon.nl.babbel +demon.nl.support +demon.pops +demon.sales +demon.sales.d +demon.security +demon.security.keys +demon.service +demon.service.homepages +demon.service.isdn +demon.tech.pc +demon.test +dfw.eats +dfw.flame +dfw.forsale +dfw.general +dfw.internet.providers +dfw.jobs +dfw.maps +dfw.personals +dfw.politics +dfw.singles +dfw.test +dfw.usenet.config +dfw.usenet.stats +dk.admin +dk.admin.netikette +dk.admin.netmisbrug +dk.admin.opslag +dk.admin.usenetregler +dk.bolig +dk.edb +dk.edb.aar2000problem +dk.edb.database +dk.edb.grafik +dk.edb.hardware +dk.edb.internet +dk.edb.internet.software +dk.edb.internet.udbydere +dk.edb.internet.webdesign +dk.edb.internet.webdesign.asp +dk.edb.mac +dk.edb.ms-windows +dk.edb.ms-windows.nt +dk.edb.netvaerk +dk.edb.netware +dk.edb.os2 +dk.edb.programmering +dk.edb.programpakker.ms-office +dk.edb.regneark +dk.edb.spil +dk.edb.spil.nintendo +dk.edb.spil.playstation +dk.edb.spil.simulator.fly +dk.edb.tekst +dk.edb.unix +dk.erhverv +dk.familie.adoption +dk.familie.barn +dk.forbruger +dk.fritid +dk.fritid.bil +dk.fritid.boern-og-unge +dk.fritid.dykning +dk.fritid.foto +dk.fritid.hamradio +dk.fritid.hus-og-have +dk.fritid.jagt +dk.fritid.jernbaner +dk.fritid.kaeledyr +dk.fritid.lystfiskeri +dk.fritid.motorcykel +dk.fritid.ornitologi +dk.fritid.rejse +dk.fritid.rollespil +dk.general +dk.helbred.slank +dk.historie.genealogi +dk.kultur.film +dk.kultur.litteratur +dk.kultur.mad+drikke +dk.kultur.musik +dk.kultur.musik.klassisk +dk.kultur.sprog +dk.kultur.tegneserier +dk.livssyn +dk.lokalsamfund.bornholm +dk.lokalsamfund.fyn +dk.loppemarked +dk.loppemarked.bil +dk.loppemarked.blad+bog +dk.loppemarked.bolig +dk.loppemarked.dyr +dk.loppemarked.edb.mac +dk.loppemarked.edb.spil +dk.loppemarked.moebel +dk.loppemarked.motorcykel +dk.loppemarked.musik +dk.loppemarked.radio+hifi +dk.loppemarked.tv+video +dk.marked.kommerciel +dk.marked.kommerciel.edb +dk.marked.privat +dk.marked.privat.bil +dk.marked.privat.blad+bog +dk.marked.privat.bolig +dk.marked.privat.dyr +dk.marked.privat.edb +dk.medier.radio +dk.medier.satellit +dk.medier.tv +dk.natur +dk.opslag.foredrag +dk.opslag.internet +dk.opslag.stillinger +dk.politik +dk.politik.indvandring +dk.politik.miljoe +dk.politik.trafik +dk.politik.ungdom +dk.snak +dk.snak.vittigheder +dk.sport +dk.sport.fodbold +dk.sport.motorsport +dk.sport.rulleskoejter +dk.sport.squash +dk.sport.volleyball +dk.teknik.elektronik +dk.teknik.radio.scanner +dk.teknik.telefoni +dk.test +dk.undervisning.fjern +dk.velkommen +dk.videnskab +dk.videnskab.psykologi +dk.videnskab.sundhed +dk.videnskab.teologi +dn.supers +dn.supers.disc +dod.jobs +dorsai.helpdesk +dsm.network +dungeon.announce +dungeon.announce.msdos-archive +dungeon.announce.os2-archive +dungeon.chatter +dungeon.chatter.doom +dungeon.forsale +dungeon.support +dungeon.support.amiga +dungeon.support.mac +dungeon.support.msdos +dwitten.general +ed.accommodation +ed.followup +ed.general +ed.linux +ed.prolog +ed.review +ed.sources +ed.test +ed.unix-wizards +ed.vr +ed.windows.x +edm.announce +edm.forsale +edm.general +edm.news.stats +edm.politics +edm.usrgrp +emrl.audio+video.experiment +emrl.audio+video.hardware +emrl.moo +emrl.multiplicity.virtuality +emrl.retrotek +erg.general +es.binarios.astronomia +es.binarios.macintosh +es.binarios.misc +es.binarios.sexo +es.binarios.sonido.misc +es.binarios.sonido.mp3 +es.charla.actualidad +es.charla.conexion.misc +es.charla.conexion.tarifa-plana +es.charla.cooperacion +es.charla.economia.bolsa +es.charla.economia.contabilidad +es.charla.economia.misc +es.charla.educacion.ciencia +es.charla.educacion.distancia +es.charla.educacion.drogas +es.charla.educacion.educ-fisica +es.charla.educacion.misc +es.charla.enfermedad +es.charla.enfermedad.cancer +es.charla.enfermedad.diabetes +es.charla.enfermedad.ela +es.charla.enfermedad.misc +es.charla.enfermeria +es.charla.gastronomia +es.charla.gay-lesbiana +es.charla.integracion.misc +es.charla.integracion.sindrome-down +es.charla.medio-ambiente +es.charla.misc +es.charla.moteros +es.charla.motor +es.charla.politica +es.charla.religion +es.charla.sexo +es.charla.utopia +es.ciencia.astrofisica.misc +es.ciencia.astrofisica.telescopios +es.ciencia.electronica +es.ciencia.enologia +es.ciencia.matematicas +es.ciencia.medicina.lab-clinico +es.ciencia.medicina.misc +es.ciencia.misc +es.ciencia.quimicas +es.ciencia.zootecnia.misc +es.ciencia.zootecnia.vacuno +es.comp.amiga +es.comp.artes-graficas +es.comp.bd.misc +es.comp.bd.ms-access +es.comp.cad.autocad +es.comp.cad.misc +es.comp.demos +es.comp.emuladores +es.comp.hackers +es.comp.hardware.cd-rw +es.comp.hardware.misc +es.comp.infosistemas.bbs +es.comp.infosistemas.internet +es.comp.infosistemas.listas.anuncios +es.comp.infosistemas.misc +es.comp.infosistemas.www +es.comp.lenguajes.c +es.comp.lenguajes.c++ +es.comp.lenguajes.clipper +es.comp.lenguajes.delphi +es.comp.lenguajes.java +es.comp.lenguajes.misc +es.comp.lenguajes.tex +es.comp.lenguajes.visual-basic +es.comp.macintosh.misc +es.comp.macintosh.programacion +es.comp.misc +es.comp.neuronal +es.comp.os.as400 +es.comp.os.linux +es.comp.os.misc +es.comp.os.ms-windows.misc +es.comp.os.ms-windows.programacion +es.comp.os.os2 +es.comp.programas +es.comp.seguridad.pgp +es.comp.sistemas.hp48 +es.comp.sistemas.inteligentes +es.comp.sistemas.misc +es.comp.super +es.comp.virus +es.humanidades.derecho +es.humanidades.gramatica +es.humanidades.literatura +es.humanidades.misc +es.humanidades.psicologia +es.misc.anuncios.compra-venta +es.misc.anuncios.misc +es.misc.anuncios.trabajo.demandas +es.misc.anuncios.trabajo.misc +es.misc.anuncios.trabajo.ofertas +es.misc.misc +es.news +es.news.admin +es.news.anuncios +es.news.grupos +es.news.misc +es.news.preguntas +es.pruebas +es.rec.aviacion +es.rec.cine +es.rec.comics +es.rec.deportes.atletismo +es.rec.deportes.aventura +es.rec.deportes.buceo +es.rec.deportes.futbol +es.rec.deportes.misc +es.rec.deportes.motor +es.rec.deportes.natacion +es.rec.deportes.nautica +es.rec.ficcion.misc +es.rec.fotografia +es.rec.humor +es.rec.ilusionismo +es.rec.juegos.ajedrez +es.rec.juegos.comp.arcade +es.rec.juegos.comp.aventuras +es.rec.juegos.comp.misc +es.rec.juegos.comp.simuladores.misc +es.rec.juegos.comp.simuladores.vuelo +es.rec.juegos.estrategia +es.rec.juegos.magic +es.rec.juegos.misc +es.rec.juegos.rol +es.rec.labores +es.rec.manga +es.rec.mascotas.misc +es.rec.mascotas.peces +es.rec.misc +es.rec.modelismo +es.rec.motor.4x4 +es.rec.musica.alternativas +es.rec.musica.blues +es.rec.musica.clasica +es.rec.musica.grupos.beatles +es.rec.musica.grupos.misc +es.rec.musica.jazz +es.rec.musica.misc +es.rec.musica.techno +es.rec.naturismo +es.rec.pasatiempos +es.rec.radio.amateur +es.rec.radio.misc +es.rec.radio.ondacorta +es.rec.trenes +es.rec.tv.misc +es.rec.tv.series +es.rec.viajes +es.soc.cultura.agenda +es.soc.cultura.misc +es.soc.misc +es.tecnica.arquitectura +es.tecnica.misc +escape.announce +escape.flame +escape.misc +escape.questions +escape.test +esp.bienvenida +esp.binarios.discusion +esp.binarios.imagenes +esp.binarios.misc +esp.binarios.sonidos +esp.charla.actualidad +esp.charla.ecologismo +esp.charla.politica +esp.charla.religion +esp.charla.sexo +esp.ciencia.biologia +esp.ciencia.misc +esp.comp.misc +esp.comp.sistemas.macintosh +esp.comp.sistemas.misc +esp.comp.sistemas.pc +esp.comp.so.linux +esp.comp.so.misc +esp.comp.so.ms-windows +esp.humanidades.historia +esp.humanidades.misc +esp.mercado.hardware +esp.mercado.misc +esp.mercado.software +esp.mercado.trabajos +esp.news.administracion +esp.news.anuncios +esp.news.faqs +esp.news.misc +esp.news.propuestas +esp.rec.arte.cine +esp.rec.arte.literatura +esp.rec.arte.misc +esp.rec.arte.musica +esp.rec.cf +esp.rec.deportes.futbol +esp.rec.deportes.misc +esp.rec.humor +esp.rec.juegos +esp.rec.misc +esp.rec.viajes +esp.test +esp.test-moderado +esp.varios +essug.copt +essug.misc +essug.telco +eug.access.video +eug.arts.photography +eug.bbs.excelsior +eug.comp.sys.macintosh +eug.config +eug.education.homeschooling +eug.forsale +eug.housing +eug.jobs +eug.local.activists +eug.local.connectivity.politics +eug.local.connectivity.tech +eug.nwmusic.news +eug.register.guard +eug.test +eunet.aviation +eunet.bugs.4bsd +eunet.bugs.uucp +eunet.checkgroups +eunet.cyberrights +eunet.esprit +eunet.esprit.eurochip +eunet.europen +eunet.jokes +eunet.misc +eunet.newprod +eunet.news +eunet.news.group +eunet.politics +eunet.sources +eunet.test +eunet.works +evv.config +evv.politics +evv.riverboat +evv.sport.aces +evv.toyota +eye.config +eye.general +eye.letters +eye.news +fcn.general +fcn.tor.comm +fcn.tor.finance +fcn.tor.misc +fcn.tor.org +fcn.tor.tech +fcn.tor.tfn +fcn.tor.vote +fhg.ilt +fido.24000-ger +fido.386-ger +fido.4dos +fido.amiga-ger +fido.amiga.prog +fido.belg.beurs-data +fido.belg.computer.widows +fido.belg.cprog +fido.belg.files +fido.belg.fra.asbl.rtfm +fido.belg.fra.commerce +fido.belg.fra.scoutisme +fido.belg.news +fido.ccc-ger +fido.clipper +fido.desqview +fido.ebbauser-ger +fido.elektronik-ger +fido.eur.genealogy +fido.fidoguide-ger +fido.flea-ger +fido.ger.4dos +fido.ger.abfahrer +fido.ger.abled +fido.ger.amiga +fido.ger.amiprog +fido.ger.amnesty +fido.ger.antifa +fido.ger.archimedes +fido.ger.astronomie +fido.ger.atari +fido.ger.auge +fido.ger.auto +fido.ger.autoren +fido.ger.aviation +fido.ger.basic +fido.ger.binkley +fido.ger.boerse +fido.ger.book +fido.ger.btx +fido.ger.c_echo +fido.ger.c_plusplus +fido.ger.cadcam +fido.ger.ccc +fido.ger.ccitt-fax +fido.ger.cfos_help +fido.ger.chauvi +fido.ger.chemie +fido.ger.clipper +fido.ger.comms +fido.ger.compilerbau +fido.ger.control +fido.ger.crosspoint +fido.ger.ct +fido.ger.darc +fido.ger.dbase +fido.ger.desqview +fido.ger.dfue +fido.ger.dtp +fido.ger.elektronik +fido.ger.fantasy +fido.ger.fastfood +fido.ger.fidoguide +fido.ger.flea +fido.ger.frauen +fido.ger.frust +fido.ger.garten +fido.ger.gay +fido.ger.gem +fido.ger.genealogy +fido.ger.grafik +fido.ger.greenp +fido.ger.grenzwis +fido.ger.hardware +fido.ger.hifi +fido.ger.hp48sx +fido.ger.hst +fido.ger.ibm +fido.ger.informatik +fido.ger.internet +fido.ger.isdn +fido.ger.jokes +fido.ger.kirche +fido.ger.kochen +fido.ger.kommerz +fido.ger.konsolen +fido.ger.kontakt +fido.ger.lan +fido.ger.linux +fido.ger.mac +fido.ger.magie +fido.ger.mailbox +fido.ger.maximus +fido.ger.medizin +fido.ger.midi +fido.ger.modem +fido.ger.modula-2 +fido.ger.motorrad +fido.ger.movie +fido.ger.movie.horror +fido.ger.msdos5xx +fido.ger.musik +fido.ger.musiker +fido.ger.net_dev +fido.ger.next +fido.ger.novell +fido.ger.oops +fido.ger.os2 +fido.ger.pascal +fido.ger.pc_geos +fido.ger.pgmrs +fido.ger.philo +fido.ger.photo +fido.ger.platt +fido.ger.politik +fido.ger.polizei +fido.ger.produkte +fido.ger.recht +fido.ger.request +fido.ger.rhodan +fido.ger.rpg +fido.ger.sat +fido.ger.sex +fido.ger.shareware +fido.ger.soundkarten +fido.ger.spiele +fido.ger.storage +fido.ger.tex +fido.ger.transputer +fido.ger.tv +fido.ger.umwelt +fido.ger.unix +fido.ger.urlaub +fido.ger.virus +fido.ger.windows +fido.ger.windows.prog +fido.ger.windows.tp +fido.ger.wissen +fido.ger.zivi +fido.ger.zyxel +fido.hardware-ger +fido.hst +fido.jokes-ger +fido.kirche-ger +fido.kommerz-ger +fido.kontakt-ger +fido.linux-ger +fido.mac.dev +fido.magie-ger +fido.movie-ger +fido.music +fido.musik-ger +fido.novell +fido.ot.support +fido.pascal-ger +fido.phones +fido.politik-ger +fido.recht-ger +fido.sat-ger +fido.sex-ger +fido.shareware-ger +fido.spiele-ger +fido.thunder +fido.trek +fido.win32 +fido.windows-ger +fido.wissen-ger +fido.zyxel-ger +fido7.aaa.support +fido7.adinf.support +fido7.aids-arc +fido7.aids-hiv +fido7.aids.data +fido7.aids.dialogue +fido7.aids.drugs +fido7.aids.fr +fido7.aids.law +fido7.aids.nl +fido7.aids.spiritual +fido7.aids.women +fido7.alex.echo +fido7.allfix-help +fido7.amm.links +fido7.amm.robots +fido7.announce.f2000 +fido7.announce.newgroups +fido7.argus +fido7.arjz.support +fido7.asian-nm.pvt +fido7.asy-s.talk +fido7.asy.info +fido7.at.beer +fido7.at.talk +fido7.atom.info +fido7.atom.pvt +fido7.aus.jokes +fido7.aviation.team +fido7.avp.support +fido7.bbs-doors +fido7.bbslist.support +fido7.before.sysopka.after +fido7.bel.files +fido7.bel.general +fido7.bink.plus +fido7.bink.plus.e +fido7.binkley.rus +fido7.bk.talks +fido7.blc.gate.ukraine +fido7.bocharoff.sux +fido7.bocharoff.unplugged +fido7.bocharov.rulezz +fido7.bpack.support +fido7.brake-s.mailer.support +fido7.bynk.support.rus +fido7.ca.echo +fido7.cafe.anonim +fido7.calm.delirium +fido7.calm.echo +fido7.cardinal.pvt +fido7.castle.info +fido7.cb.radio +fido7.cherlite.pvt +fido7.crack +fido7.crack.talks +fido7.crazy-lovers +fido7.crazy.travels +fido7.crimea.talk +fido7.cris.fileecho +fido7.cris.hard +fido7.cris.lang +fido7.cris.talk +fido7.cris.test +fido7.ctpahhoe.mecto +fido7.dec-fan.pvt +fido7.delta.news +fido7.demex.news +fido7.demo.design +fido7.demo.design.uue +fido7.demo.design.wanted +fido7.demo.dessign.uue +fido7.dig.fidotech +fido7.dig.fileecho +fido7.dig.hacker +fido7.dig.modem +fido7.dn.allfix +fido7.dn.debate +fido7.dn.fileecho +fido7.dn.games +fido7.dn.intim +fido7.dn.longlink-hub +fido7.dn.music +fido7.dn.netgames +fido7.dn.student +fido7.dn.talks +fido7.dn.tech-qa +fido7.dn.tech-qa-home +fido7.dn.test +fido7.dnz.humor +fido7.donbass +fido7.donbass.books +fido7.donbass.commerce +fido7.donbass.fileecho +fido7.donbass.flirt +fido7.donbass.games +fido7.donbass.internet +fido7.donbass.maniak +fido7.donbass.music +fido7.donbass.netgame +fido7.donbass.network +fido7.donbass.ottyag +fido7.donbass.talk +fido7.donbass.test +fido7.donbass.unix +fido7.donbass.virus +fido7.eagle-s.echo +fido7.eagle-s.technical.support +fido7.echobman.rus +fido7.edgecity +fido7.eleven.files +fido7.eleven.talks +fido7.elf.ca +fido7.enet.soft +fido7.erop +fido7.esib.fileecho +fido7.esib.games +fido7.esib.general +fido7.esib.humor +fido7.esib.programming +fido7.esib.sex +fido7.esib.test +fido7.esib.test.computer +fido7.esib.virtual.world +fido7.esib.vplanets +fido7.esperanto.rus +fido7.express.pvt +fido7.f.comp.pvt.sex +fido7.f109.pvt +fido7.f115.link +fido7.f118.pvt +fido7.f118.robots +fido7.f118.sport.autoinfo +fido7.f13.pvt +fido7.f130.link.pvt +fido7.f130.link.talk +fido7.f140.pvt +fido7.f140.robots +fido7.f144.announce +fido7.f144.echo +fido7.f144.links +fido7.f144.statistics +fido7.f146.pvt +fido7.f157.pvt +fido7.f157.robots +fido7.f157.test +fido7.f159.pvt +fido7.f199.robots +fido7.f201.pvt +fido7.f201.robots +fido7.f204.pvt +fido7.f204.robots +fido7.f21.news +fido7.f214.announce +fido7.f214.echo +fido7.f214.pvt +fido7.f231.pvt +fido7.f268.pvt +fido7.f268.robots +fido7.f269.local +fido7.f269.official +fido7.f269.robots +fido7.f269.xla +fido7.f306.pvt +fido7.f308.radio.roks +fido7.f350.local +fido7.f352.pvt +fido7.f366.pvt +fido7.f392.local +fido7.f400.file +fido7.f400.link +fido7.f400.link.bridge +fido7.f400.sysop +fido7.f400.test +fido7.f41.echo +fido7.f41.files +fido7.f41.vgaplanets +fido7.f413.pvt +fido7.f431.pvt +fido7.f431.techinfo +fido7.f441.robots +fido7.f441.stat +fido7.f443.links +fido7.f443.official +fido7.f487.talk +fido7.f5026-18.info +fido7.f50314.local +fido7.f68.downlink +fido7.f68.pulse +fido7.f68.pvt +fido7.f68.techinfo +fido7.f69.pvt +fido7.f6i.support +fido7.f75.pvt +fido7.far.support +fido7.fe-help +fido7.fe.business +fido7.fe.chainik +fido7.fe.fileecho +fido7.fe.game +fido7.fe.general +fido7.fe.os2 +fido7.fe.q-a +fido7.fformat.support +fido7.fido-122.pvt +fido7.fido-122.robots +fido7.fido.anywhere +fido7.fido.registration +fido7.fido7.sound.uue.report +fido7.fidonet.history +fido7.fidonews +fido7.filefix.f199 +fido7.filgen.support +fido7.filtered.humor +fido7.francophone.russe +fido7.friends.pvt.talks +fido7.galaxy.game +fido7.gcreate.support +fido7.ger.rus +fido7.german.rus +fido7.gpc.mailcommander +fido7.graphlog.support +fido7.greyrat-tech.f403 +fido7.greyrat.f403 +fido7.greyrat.link +fido7.group +fido7.group.blin +fido7.group.dm.sqcc +fido7.group.softmarket +fido7.group.technology +fido7.gs.echo +fido7.gs.files +fido7.gs.techinfo +fido7.gss.beta.testing +fido7.gss.general +fido7.gss.partoss +fido7.guitar.songs +fido7.hacking +fido7.hfro.local +fido7.hippy.talks +fido7.hottab.links +fido7.house.of.fire +fido7.houston.fileecho +fido7.houston.humor +fido7.houston.softhard +fido7.houston.talks +fido7.humor.filtered +fido7.humor.other +fido7.id.echo +fido7.id.news +fido7.ifmail +fido7.ifmail.plus +fido7.imail-help +fido7.inec.links +fido7.info.link +fido7.info.prog +fido7.interlink.programming +fido7.interlink.talk +fido7.irc.fidorus +fido7.iskra.fileecho +fido7.isra.rus +fido7.itasm.support +fido7.iv.echo +fido7.iv.general +fido7.iv.music +fido7.iv.planets +fido7.iv.pvt.exch +fido7.izh.drink +fido7.ja-moscow +fido7.kaktus.talk +fido7.kazan.general +fido7.kharkov +fido7.kharkov.anekdot +fido7.kharkov.announce +fido7.kharkov.anomal +fido7.kharkov.aon.club +fido7.kharkov.as.ukrainian.city +fido7.kharkov.ats +fido7.kharkov.authors +fido7.kharkov.balka +fido7.kharkov.balka.pvt +fido7.kharkov.beer +fido7.kharkov.blacklog +fido7.kharkov.blin +fido7.kharkov.blin.test +fido7.kharkov.bratki +fido7.kharkov.bridge +fido7.kharkov.business +fido7.kharkov.business.robots +fido7.kharkov.buying.proposals +fido7.kharkov.car +fido7.kharkov.chu +fido7.kharkov.commerce.prmr +fido7.kharkov.culture +fido7.kharkov.delphi +fido7.kharkov.doom +fido7.kharkov.education +fido7.kharkov.engl +fido7.kharkov.files +fido7.kharkov.foreign.languages +fido7.kharkov.fox +fido7.kharkov.friends +fido7.kharkov.ftp +fido7.kharkov.gamer +fido7.kharkov.halyava +fido7.kharkov.hardw.pvt +fido7.kharkov.images +fido7.kharkov.internet.html +fido7.kharkov.internet.provider +fido7.kharkov.job +fido7.kharkov.medic +fido7.kharkov.moda +fido7.kharkov.music +fido7.kharkov.naezd +fido7.kharkov.netgame +fido7.kharkov.os2 +fido7.kharkov.planets +fido7.kharkov.point +fido7.kharkov.pvt.balka +fido7.kharkov.pvt.delphi +fido7.kharkov.pvt.hardw +fido7.kharkov.pvt.magick +fido7.kharkov.pvt.news +fido7.kharkov.pvt.talks +fido7.kharkov.sale.chemical +fido7.kharkov.sale.computers +fido7.kharkov.sale.consume +fido7.kharkov.sale.energy +fido7.kharkov.sale.food +fido7.kharkov.sale.machinery +fido7.kharkov.sale.misc +fido7.kharkov.searching +fido7.kharkov.semenyaka +fido7.kharkov.sex +fido7.kharkov.software +fido7.kharkov.sport +fido7.kharkov.star +fido7.kharkov.star.info +fido7.kharkov.star.test +fido7.kharkov.student +fido7.kharkov.tormoz +fido7.kharkov.tpp +fido7.kharkov.univer +fido7.kharkov.zoo +fido7.ki.ev.tor.moz +fido7.kiev.allfix +fido7.kiev.allfix.announce +fido7.kiev.anecdot +fido7.kiev.anekdot +fido7.kiev.ats +fido7.kiev.baby +fido7.kiev.bike +fido7.kiev.blackwhite +fido7.kiev.boba.eb +fido7.kiev.cars +fido7.kiev.chainik +fido7.kiev.chainik.fido +fido7.kiev.chainik.hard +fido7.kiev.chainik.soft +fido7.kiev.club +fido7.kiev.exchange +fido7.kiev.fileecho +fido7.kiev.flame +fido7.kiev.friends +fido7.kiev.home +fido7.kiev.job +fido7.kiev.money +fido7.kiev.music +fido7.kiev.music.exchange +fido7.kiev.netgames +fido7.kiev.school +fido7.kiev.sport +fido7.kiev.students +fido7.kiev.talks +fido7.kiev.video +fido7.kiev.xchg.audvid +fido7.kiev.xchg.cd +fido7.kiev.xchg.comp +fido7.kiev.xchg.info +fido7.kiev.xchg.other +fido7.klm.logs +fido7.kmr.fileecho +fido7.kmr.game +fido7.kmr.general +fido7.kmr.softw +fido7.kmr.verses +fido7.kn.bank +fido7.kn.commonplace +fido7.kn.filefind +fido7.kn.forward +fido7.kn.hardware +fido7.kn.holiday +fido7.kn.naezd +fido7.kn.politic +fido7.kn.software +fido7.kn.stat +fido7.krs.business +fido7.krs.fileecho +fido7.krs.flame +fido7.krs.flirt +fido7.krs.general +fido7.krs.link +fido7.krs.test +fido7.kus-ka.talks +fido7.kwachi.prileteli +fido7.lars.allfix +fido7.layder.freedom +fido7.links.f322 +fido7.links.f49 +fido7.links.f54 +fido7.links.fws +fido7.linux +fido7.local.f153 +fido7.local.f290 +fido7.local.f441 +fido7.local.f50 +fido7.lugansk.commerce +fido7.lugansk.files +fido7.lugansk.games +fido7.lugansk.talks +fido7.lv.oracle +fido7.lv.pgpkeys +fido7.lviv.files +fido7.lviv.talks +fido7.madi.tu +fido7.magnetic.announce +fido7.magnetic.echo +fido7.magnetic.stat +fido7.mar.tm +fido7.mariupol.talkes +fido7.max.klochkov +fido7.maximus.planets +fido7.med.echo +fido7.memento.mori +fido7.mentant.news +fido7.mentant.robots +fido7.mfe.allfix.mail +fido7.mfe.info +fido7.mfe.soft +fido7.mg.business +fido7.mgsp.mgvk.army.mo +fido7.miem.talk +fido7.mik-local +fido7.mikdim.link +fido7.mikdim.robots +fido7.mikdim.test +fido7.minkevich.talk +fido7.mistress.pvt +fido7.mistress.rus +fido7.mixed.alcohol +fido7.mj.club +fido7.mkt-dn.orgtech +fido7.mkt-dn.other +fido7.mo.advice +fido7.mo.aeroport +fido7.mo.akademicheskay +fido7.mo.apartment +fido7.mo.babka +fido7.mo.baby.mgsu +fido7.mo.balashikha +fido7.mo.beer +fido7.mo.bike +fido7.mo.blusys-modtalk +fido7.mo.books.wanted +fido7.mo.brateevo +fido7.mo.cars +fido7.mo.cars.repair +fido7.mo.chertanovo +fido7.mo.connect +fido7.mo.d-d.ad-d +fido7.mo.dec +fido7.mo.echo +fido7.mo.economics +fido7.mo.feelee +fido7.mo.football +fido7.mo.football.realplay +fido7.mo.gang +fido7.mo.gau +fido7.mo.go +fido7.mo.good.people.talks +fido7.mo.halyava +fido7.mo.halyava.wanted +fido7.mo.hardw.repair.wanted +fido7.mo.hi-fi +fido7.mo.horoshevo-mnev +fido7.mo.house +fido7.mo.inter.tourism +fido7.mo.interesting.inf +fido7.mo.izmailovo +fido7.mo.job +fido7.mo.job.haltura +fido7.mo.job.service +fido7.mo.job.talk +fido7.mo.krasnogorsk.talk +fido7.mo.kuncevo +fido7.mo.lan.construction +fido7.mo.legal.soft +fido7.mo.limonozovo +fido7.mo.live +fido7.mo.lublino +fido7.mo.mai +fido7.mo.mami +fido7.mo.medic.student +fido7.mo.mei +fido7.mo.meliss +fido7.mo.mephi +fido7.mo.metallica +fido7.mo.mgapi +fido7.mo.mgatu +fido7.mo.mggu +fido7.mo.mgimo +fido7.mo.mgiu +fido7.mo.mgta +fido7.mo.miem.talk +fido7.mo.miigaik +fido7.mo.mirea +fido7.mo.misis +fido7.mo.mitino +fido7.mo.msu.phys +fido7.mo.msuc +fido7.mo.mtusi +fido7.mo.music.exchange +fido7.mo.nagatino +fido7.mo.nagornaya +fido7.mo.ochakovo +fido7.mo.onegod +fido7.mo.os2.prog +fido7.mo.party +fido7.mo.party.club +fido7.mo.pelmeni +fido7.mo.peredelkino +fido7.mo.perovo +fido7.mo.phrases +fido7.mo.phystech +fido7.mo.porno.video +fido7.mo.povremenka +fido7.mo.preobragenka +fido7.mo.presnya +fido7.mo.proezdnoy +fido7.mo.questions +fido7.mo.radiostat +fido7.mo.repair +fido7.mo.rollers +fido7.mo.rsuh +fido7.mo.sails +fido7.mo.sale +fido7.mo.ski +fido7.mo.softexchange +fido7.mo.softexchange.arvid +fido7.mo.softmarket +fido7.mo.solntsevo +fido7.mo.story +fido7.mo.sysoeff +fido7.mo.sysoeff.talks +fido7.mo.talk +fido7.mo.teply.stan +fido7.mo.timiryazevskay +fido7.mo.tourism +fido7.mo.transport +fido7.mo.trash +fido7.mo.tv +fido7.mo.university +fido7.mo.uz-univer +fido7.mo.videomovies +fido7.mo.vikhino +fido7.mo.wanted +fido7.mo.weather +fido7.mo.whirlpoo +fido7.mo.xpicsex.talk +fido7.mo.yasenevo +fido7.mo.zgrad +fido7.mo.zgrad.cars +fido7.mo.zgrad.findfirst +fido7.mo.zgrad.miee +fido7.mo.zgrad.talk +fido7.moldova.bektop +fido7.moldova.business +fido7.moldova.cmex +fido7.moldova.computers +fido7.moldova.consumer +fido7.moldova.dtp +fido7.moldova.echo +fido7.moldova.files +fido7.moldova.general.chat +fido7.moldova.new.files +fido7.moldova.point +fido7.moldova.soft +fido7.moldova.tech.f999 +fido7.moldova.testing +fido7.moldova.youth +fido7.monkey.island +fido7.moscow-oklahom +fido7.moscow.pvt +fido7.mp.lazy +fido7.mp.link +fido7.mp.robots +fido7.mstu.talks +fido7.mu.general +fido7.mu.red-burda +fido7.n5020.autotest +fido7.n5020.new.nodes +fido7.n5020.point +fido7.n5020.point.talk +fido7.n5026.info +fido7.n5026.robo +fido7.n5028.echo +fido7.n5039.delphi +fido7.n5039.echo +fido7.n5039.firewalls +fido7.n5039.interest +fido7.n5039.music +fido7.n5039.news.weather +fido7.n5039.news.www.announce +fido7.n5039.robot +fido7.n5049.os2 +fido7.n5050.files +fido7.n5050.game.doom +fido7.n5050.general +fido7.n5050.notify +fido7.n5050.os2 +fido7.n5050.vp +fido7.n5050.x +fido7.n50509.general +fido7.n5053.common +fido7.n5053.exchange +fido7.n5053.files +fido7.n5053.games +fido7.n5053.music +fido7.n5053.programming +fido7.n5060.talks +fido7.nd.talk +fido7.net467.talks +fido7.news.answers +fido7.nice.sources +fido7.nice.sources.d +fido7.night.talks +fido7.nikolaev.bazar +fido7.nikolaev.computers +fido7.nikolaev.fileecho +fido7.nikolaev.joy +fido7.nikolaev.talks +fido7.nino.bardak +fido7.nino.general +fido7.nino.music.talks +fido7.nkz.internet +fido7.no.carrier +fido7.nonprofit.technology +fido7.nordlink.talk +fido7.nordlink.wanted +fido7.nsk.cheers +fido7.nsk.general +fido7.nsk.job +fido7.nsk.music.exchange +fido7.nsk.planets +fido7.nsk.soft +fido7.nv.echo +fido7.obec.3boh +fido7.obec.filtered +fido7.obec.pactet +fido7.odessa.broadcast +fido7.odessa.exchange +fido7.odessa.fileecho +fido7.odessa.game +fido7.odessa.joker +fido7.odessa.music +fido7.odessa.netgame +fido7.odessa.talks +fido7.odessa.unix +fido7.old-nick-s.magazine +fido7.omni.nethack +fido7.omni.news +fido7.os2inet +fido7.paradox.link.echo +fido7.pavlograd.talks +fido7.pc.coding +fido7.peheccahc +fido7.perm.os2 +fido7.pk.madmed +fido7.pk.sqafix +fido7.podolsk.talk +fido7.policom.pro.info +fido7.postmasters +fido7.profi.cpm +fido7.province.talk +fido7.pskov.test +fido7.pvt-hck +fido7.pvt.bala-gun +fido7.pvt.bibirevo +fido7.pvt.black-arrow +fido7.pvt.cat.club +fido7.pvt.christmas +fido7.pvt.club +fido7.pvt.demex +fido7.pvt.dismember.support +fido7.pvt.end.of.the.world +fido7.pvt.esoteric.club +fido7.pvt.evil +fido7.pvt.exch.audiovideo +fido7.pvt.exch.black.log +fido7.pvt.exch.black.log.talk +fido7.pvt.exch.cars +fido7.pvt.exch.cd +fido7.pvt.exch.comm +fido7.pvt.exch.comp +fido7.pvt.exch.computer +fido7.pvt.exch.computer.keywords +fido7.pvt.exch.el.parts +fido7.pvt.exch.mobile +fido7.pvt.exch.other +fido7.pvt.exch.pc +fido7.pvt.exch.pricelist +fido7.pvt.exch.pricelist.comp +fido7.pvt.exch.service +fido7.pvt.exch.talk +fido7.pvt.exler +fido7.pvt.exo +fido7.pvt.f113 +fido7.pvt.f48 +fido7.pvt.flirt +fido7.pvt.golos.off +fido7.pvt.highhill +fido7.pvt.horror +fido7.pvt.jack +fido7.pvt.keds +fido7.pvt.law +fido7.pvt.lbcat.talk +fido7.pvt.lehin +fido7.pvt.lws +fido7.pvt.m.c.tech +fido7.pvt.medvedkovo +fido7.pvt.melodic.metal +fido7.pvt.mies +fido7.pvt.minkevich +fido7.pvt.ms.satan +fido7.pvt.mute.raven +fido7.pvt.newspaper +fido7.pvt.niichavo +fido7.pvt.nimnull +fido7.pvt.notax +fido7.pvt.owl.club +fido7.pvt.points-party +fido7.pvt.polis +fido7.pvt.prices +fido7.pvt.prool +fido7.pvt.rusar.talks +fido7.pvt.sale-exchang +fido7.pvt.sale-exchang.talk +fido7.pvt.skull.c0der +fido7.pvt.sound.pro +fido7.pvt.sound.turtlebeach +fido7.pvt.sova.club +fido7.pvt.sysop +fido7.pvt.tctube +fido7.pvt.ut5ude.packet +fido7.pvt.victory +fido7.pvt.virii +fido7.pvt.zelimhan +fido7.qaz.allfix +fido7.qaz.pvt +fido7.qview.support +fido7.r46.b.buy +fido7.r46.b.change +fido7.r46.b.sale +fido7.r46.b.talks +fido7.r46.b.tech +fido7.r46.exch +fido7.r46.game +fido7.r46.general +fido7.r46.warez.new +fido7.r50.tsc +fido7.radiomax +fido7.radiomax.hitparade +fido7.rar.support +fido7.rc.infoserv +fido7.rc.jobs +fido7.real.speccy +fido7.robots.f49 +fido7.rockabilly.50s +fido7.rockwell.modem +fido7.rou.bchinsky +fido7.ru.1csoft +fido7.ru.3ds-lw +fido7.ru.4dos +fido7.ru.about.life +fido7.ru.acad +fido7.ru.accounting +fido7.ru.admin +fido7.ru.adv-ftnsoft.gates +fido7.ru.adv-ftnsoft.info +fido7.ru.advertisement +fido7.ru.agni +fido7.ru.agny +fido7.ru.ai +fido7.ru.algorithms +fido7.ru.allfix-help +fido7.ru.amadeus +fido7.ru.amiga +fido7.ru.anecdot +fido7.ru.anekdot +fido7.ru.anekdot.filtered +fido7.ru.anekdot.the.best +fido7.ru.anomalia +fido7.ru.anti-ment +fido7.ru.anti.ats +fido7.ru.anti.beer +fido7.ru.antisex +fido7.ru.antiviza +fido7.ru.aon +fido7.ru.aon.rom +fido7.ru.aquanavt +fido7.ru.aquaria +fido7.ru.argus +fido7.ru.aria +fido7.ru.army +fido7.ru.army.phrases +fido7.ru.art +fido7.ru.as400 +fido7.ru.asd-track.support +fido7.ru.autopilot +fido7.ru.autostop +fido7.ru.aviation +fido7.ru.awk +fido7.ru.baby +fido7.ru.baby.mail +fido7.ru.baby.medic +fido7.ru.babylon5.game +fido7.ru.bachelors +fido7.ru.bank-support +fido7.ru.bank-support.post +fido7.ru.bank-technolog +fido7.ru.bardak +fido7.ru.battletech +fido7.ru.baynetworks +fido7.ru.bbsnews +fido7.ru.bbsnews.talk +fido7.ru.bbsoftware.other +fido7.ru.beatle.club +fido7.ru.beer +fido7.ru.bible +fido7.ru.binkd +fido7.ru.biology +fido7.ru.biotech +fido7.ru.blues +fido7.ru.bodun +fido7.ru.bodybuilding +fido7.ru.bomond.rhyme +fido7.ru.bookmaker +fido7.ru.books.computing +fido7.ru.books.talk +fido7.ru.borland.ao +fido7.ru.brief +fido7.ru.bug +fido7.ru.c +fido7.ru.c-cpp.market +fido7.ru.cars.chainik +fido7.ru.cars.custom +fido7.ru.cars.foreign +fido7.ru.cars.from.usa +fido7.ru.cbuilder +fido7.ru.ccmail +fido7.ru.cd.record +fido7.ru.cdrom +fido7.ru.cgi.perl +fido7.ru.childs +fido7.ru.christianity +fido7.ru.chudiks +fido7.ru.cisco +fido7.ru.clarion +fido7.ru.clipper +fido7.ru.coffee.club +fido7.ru.collectors +fido7.ru.compress +fido7.ru.congratulation +fido7.ru.coolture +fido7.ru.corbina +fido7.ru.crazy-rollers +fido7.ru.crazy.support +fido7.ru.crosstools +fido7.ru.crypt +fido7.ru.culture +fido7.ru.customs +fido7.ru.cyborg +fido7.ru.dacha +fido7.ru.dance +fido7.ru.danger.sport +fido7.ru.dbvista +fido7.ru.death +fido7.ru.delphi +fido7.ru.delphi.info +fido7.ru.delphi.uue +fido7.ru.depression +fido7.ru.dharma +fido7.ru.dj +fido7.ru.djatlov +fido7.ru.dos.basic +fido7.ru.dpg +fido7.ru.dream +fido7.ru.drugs +fido7.ru.dsp +fido7.ru.dtp +fido7.ru.dtp.fonts +fido7.ru.duel +fido7.ru.duel.rhyme +fido7.ru.dvd +fido7.ru.echo-rules +fido7.ru.echoprocessors +fido7.ru.echoprocessors.nice.tosser +fido7.ru.educator +fido7.ru.elections +fido7.ru.embedded +fido7.ru.emulators +fido7.ru.english +fido7.ru.english.translator +fido7.ru.equestrian +fido7.ru.espanol +fido7.ru.excel +fido7.ru.expo +fido7.ru.f3dfx +fido7.ru.family +fido7.ru.fantasy +fido7.ru.fastuue +fido7.ru.fax +fido7.ru.fdecho +fido7.ru.feelings +fido7.ru.fhmail +fido7.ru.fido-pickup +fido7.ru.fido.nextgen +fido7.ru.fidoschool +fido7.ru.file.appsnd +fido7.ru.file.xsnd.midi +fido7.ru.file.xsnd.mod +fido7.ru.file.xsnd.patch +fido7.ru.file.xsnd.s3m +fido7.ru.file.xsnd.xm +fido7.ru.fileechoproces +fido7.ru.film +fido7.ru.finsoft +fido7.ru.fips +fido7.ru.fishing +fido7.ru.fishing.club +fido7.ru.fleetstreet +fido7.ru.fm.radio +fido7.ru.foxpro +fido7.ru.france +fido7.ru.frip +fido7.ru.game +fido7.ru.game.action.internet +fido7.ru.game.bridge +fido7.ru.game.cdrom +fido7.ru.game.cheat +fido7.ru.game.deathmatch +fido7.ru.game.design +fido7.ru.game.diablo +fido7.ru.game.doom +fido7.ru.game.doom.uue +fido7.ru.game.flight +fido7.ru.game.flight.dynamix +fido7.ru.game.flight.peaceful +fido7.ru.game.modem +fido7.ru.game.mud +fido7.ru.game.pbm +fido7.ru.game.quest +fido7.ru.game.rpg +fido7.ru.game.strategy +fido7.ru.gamenet +fido7.ru.gang +fido7.ru.gay-club +fido7.ru.gay.n +fido7.ru.gay.talk +fido7.ru.gemtoss.beta +fido7.ru.geology +fido7.ru.geosystem +fido7.ru.glum +fido7.ru.gnu +fido7.ru.golded +fido7.ru.golovolomka +fido7.ru.good.drink +fido7.ru.guitar +fido7.ru.guitar.tab +fido7.ru.hacker +fido7.ru.hacker.dummy +fido7.ru.hacker.uue +fido7.ru.hardw +fido7.ru.hardw.check +fido7.ru.hhgttg +fido7.ru.hi-fi.chainik +fido7.ru.hip-hop +fido7.ru.home +fido7.ru.home-cinema +fido7.ru.home.lan +fido7.ru.hrg.scene +fido7.ru.hsmodems +fido7.ru.hunter +fido7.ru.ida +fido7.ru.illusion +fido7.ru.informatica +fido7.ru.insurance +fido7.ru.interlink.essay +fido7.ru.internet +fido7.ru.internet.chainik +fido7.ru.internet.filtered +fido7.ru.internet.irc +fido7.ru.internet.moscow +fido7.ru.internet.provider +fido7.ru.internet.provider.price +fido7.ru.internet.soft +fido7.ru.internet.technology +fido7.ru.internet.www +fido7.ru.internet.www.news +fido7.ru.intranet +fido7.ru.invalife +fido7.ru.ip.exchange +fido7.ru.ipex +fido7.ru.itrax +fido7.ru.java +fido7.ru.java.chainik +fido7.ru.jump +fido7.ru.kin-dza-dza +fido7.ru.lan.nw +fido7.ru.lesbian +fido7.ru.lifespring +fido7.ru.lingvo +fido7.ru.link.alt +fido7.ru.linux +fido7.ru.lisp +fido7.ru.lolita +fido7.ru.love +fido7.ru.mac +fido7.ru.magic +fido7.ru.magic.the.gathering +fido7.ru.mailtools.uue +fido7.ru.martial-arts +fido7.ru.math +fido7.ru.maxes +fido7.ru.medic.profy +fido7.ru.metaphysics +fido7.ru.migration +fido7.ru.miit +fido7.ru.military +fido7.ru.military.navi +fido7.ru.military.navy +fido7.ru.militia +fido7.ru.mis +fido7.ru.mitky +fido7.ru.mixed.alcohol +fido7.ru.mnlink +fido7.ru.mod.music.uue +fido7.ru.modem +fido7.ru.moderator +fido7.ru.moderator.talk +fido7.ru.mpeg +fido7.ru.msaccess +fido7.ru.msx +fido7.ru.multiedit +fido7.ru.multimedia +fido7.ru.multios.config +fido7.ru.mumps +fido7.ru.music.agata.kristi +fido7.ru.music.scorpions +fido7.ru.music.uue +fido7.ru.musician +fido7.ru.mylene.club +fido7.ru.mythology +fido7.ru.naturism +fido7.ru.nautilus +fido7.ru.net.hard +fido7.ru.net.soft +fido7.ru.net.tech +fido7.ru.net.union +fido7.ru.nethack +fido7.ru.netmgr +fido7.ru.networks +fido7.ru.new.thought +fido7.ru.news +fido7.ru.news.answers +fido7.ru.news.club +fido7.ru.news.talk +fido7.ru.nhlhockey +fido7.ru.ninja +fido7.ru.nlp +fido7.ru.notebooks +fido7.ru.notes +fido7.ru.nuclear +fido7.ru.ocx +fido7.ru.opengl +fido7.ru.oracle.ug +fido7.ru.os.cmp +fido7.ru.os.interface +fido7.ru.othernet.talk +fido7.ru.page.making +fido7.ru.pagers +fido7.ru.pagers.operator +fido7.ru.paging +fido7.ru.paint.ball +fido7.ru.paintball +fido7.ru.palmtop +fido7.ru.paragliding +fido7.ru.parnas +fido7.ru.pascal +fido7.ru.pascal.sources +fido7.ru.pccts +fido7.ru.perl +fido7.ru.phocus.pocus +fido7.ru.photo +fido7.ru.phreaks +fido7.ru.pickup +fido7.ru.pickup.guru +fido7.ru.pictures.psevdo.graf +fido7.ru.pink.floyd +fido7.ru.pl-i +fido7.ru.plastic.cards +fido7.ru.playstation +fido7.ru.poet +fido7.ru.point.othernet +fido7.ru.poison +fido7.ru.policy +fido7.ru.portal +fido7.ru.poruchik +fido7.ru.powerbuilder +fido7.ru.pravoslavie.talk +fido7.ru.pretty.girls +fido7.ru.prikol +fido7.ru.problem +fido7.ru.program.games +fido7.ru.psychology +fido7.ru.punk.rock +fido7.ru.pupil +fido7.ru.qnx +fido7.ru.radio.modern +fido7.ru.railways +fido7.ru.rakurs +fido7.ru.rdbms.oracle +fido7.ru.road +fido7.ru.rockwell +fido7.ru.rpg +fido7.ru.rpg.bazar +fido7.ru.rpg.sagas +fido7.ru.rpg.strugatskie +fido7.ru.rpg.text +fido7.ru.rpgt.ad-d +fido7.ru.rpgt.cyberpunk +fido7.ru.rpgt.gaming +fido7.ru.rpgt.other +fido7.ru.rpgt.play +fido7.ru.rsbank +fido7.ru.russian +fido7.ru.rybinsky +fido7.ru.safeguard +fido7.ru.sale-exchange.comp +fido7.ru.sat +fido7.ru.sat.chainik +fido7.ru.sat.tv.guide +fido7.ru.satellite.tv.crypt +fido7.ru.satire +fido7.ru.scada +fido7.ru.scandinavian +fido7.ru.school +fido7.ru.sector-gaza.etc +fido7.ru.security +fido7.ru.selfmake +fido7.ru.sen-prod +fido7.ru.sex +fido7.ru.sex.adv +fido7.ru.sex.adv.talk +fido7.ru.sex.exchange +fido7.ru.sex.gay +fido7.ru.sex.pictures.uue +fido7.ru.sex.text +fido7.ru.sf.bibliography +fido7.ru.sf.news +fido7.ru.sfmail +fido7.ru.shares +fido7.ru.shell +fido7.ru.shell.dn +fido7.ru.ships +fido7.ru.skydiving +fido7.ru.smodem +fido7.ru.soft.protect +fido7.ru.softad +fido7.ru.space +fido7.ru.space.news +fido7.ru.spelling +fido7.ru.sport.basketball +fido7.ru.sport.football +fido7.ru.sport.games +fido7.ru.sport.hockey +fido7.ru.sport.other +fido7.ru.squish +fido7.ru.star.wars +fido7.ru.star.wars.games +fido7.ru.stars +fido7.ru.strack +fido7.ru.strack.gus +fido7.ru.student.talks +fido7.ru.style +fido7.ru.subway +fido7.ru.suicide +fido7.ru.syntone.club +fido7.ru.t-r +fido7.ru.tarantino +fido7.ru.team.kefir +fido7.ru.telecom +fido7.ru.terekhov +fido7.ru.terminate +fido7.ru.tetris +fido7.ru.tex +fido7.ru.thelema +fido7.ru.theology.general +fido7.ru.timed +fido7.ru.tobacco +fido7.ru.toon +fido7.ru.topspeed +fido7.ru.tourclub.talks +fido7.ru.tourism +fido7.ru.trade-equipmen +fido7.ru.tradesoft +fido7.ru.triz +fido7.ru.ufo +fido7.ru.unix +fido7.ru.unix.aix +fido7.ru.unix.bsd +fido7.ru.unix.linux +fido7.ru.unix.sco +fido7.ru.up-n-down +fido7.ru.usa +fido7.ru.usr +fido7.ru.usr.chainik +fido7.ru.uucp +fido7.ru.uue.sysop.pic +fido7.ru.uue.sysop.wav +fido7.ru.uue.talk +fido7.ru.uuencode +fido7.ru.vac +fido7.ru.vc +fido7.ru.vegetarian +fido7.ru.venture +fido7.ru.video +fido7.ru.video.exch +fido7.ru.video.films +fido7.ru.video.laserdisc +fido7.ru.video.x-files +fido7.ru.vist +fido7.ru.visual.basic +fido7.ru.visual.cpp +fido7.ru.visual.foxpro +fido7.ru.visualage.cpp +fido7.ru.vp +fido7.ru.vrml +fido7.ru.weapon +fido7.ru.weapon.uue +fido7.ru.web.construction +fido7.ru.website +fido7.ru.who-are-they +fido7.ru.windows.nt.beta +fido7.ru.windows.nt.chainik +fido7.ru.windows.nt.faq +fido7.ru.windows.nt.hatch +fido7.ru.windows.nt.news +fido7.ru.windows.nt.ug +fido7.ru.windows.nt.wanted +fido7.ru.wine +fido7.ru.www.favorites +fido7.ru.x25.fr +fido7.ru.xenia +fido7.ru.xpicmusic.hatch +fido7.ru.xyz +fido7.ru.yablonsky +fido7.ru.yachting +fido7.ru.yaff +fido7.ru.znatok +fido7.ruoz.chat +fido7.rus.flora +fido7.rus.pcad +fido7.rus.pets +fido7.russian.freedom.anekdot +fido7.russian.sex +fido7.russian.z1 +fido7.sebastopol.talk +fido7.sib.fileecho +fido7.skazki.forever +fido7.sl.announce +fido7.sl.echo +fido7.sl.statistics +fido7.sl.talk +fido7.smaster.announce +fido7.smaster.talk +fido7.smr.general +fido7.spb.anti.ats +fido7.spb.book-keeping +fido7.spb.books +fido7.spb.business +fido7.spb.cars +fido7.spb.cdrom +fido7.spb.copoka +fido7.spb.drozdov +fido7.spb.echoes +fido7.spb.ecology +fido7.spb.economy +fido7.spb.efl +fido7.spb.electr.component +fido7.spb.exchange +fido7.spb.f09 +fido7.spb.fec +fido7.spb.files +fido7.spb.files.allfix +fido7.spb.files.new +fido7.spb.flats +fido7.spb.formula1 +fido7.spb.game +fido7.spb.games +fido7.spb.general +fido7.spb.hardw +fido7.spb.hardw.repair +fido7.spb.hardw.rom +fido7.spb.humor +fido7.spb.internet +fido7.spb.internet.providers +fido7.spb.job +fido7.spb.job.talk +fido7.spb.kids +fido7.spb.ksp +fido7.spb.ksp.tex +fido7.spb.leei +fido7.spb.music +fido7.spb.netcon +fido7.spb.os2.q-a +fido7.spb.palmpilot +fido7.spb.planets +fido7.spb.point +fido7.spb.rules +fido7.spb.science +fido7.spb.softw +fido7.spb.speccy +fido7.spb.sport.fans +fido7.spb.stat +fido7.spb.student +fido7.spb.student.gaap +fido7.spb.sysprg +fido7.spb.tourism +fido7.spb.travel +fido7.star.dreck +fido7.starper.unlimited +fido7.su.absolute.text +fido7.su.absolute.text.cs +fido7.su.absolute.text.em +fido7.su.absolute.text.sq +fido7.su.alko +fido7.su.alt.tolkien +fido7.su.announce.mp3 +fido7.su.anybody +fido7.su.astroclub +fido7.su.astronomy +fido7.su.autotest +fido7.su.azart +fido7.su.books +fido7.su.business +fido7.su.c-cpp +fido7.su.card.game +fido7.su.cars +fido7.su.cars.bmw +fido7.su.cbcs +fido7.su.chainik +fido7.su.chainik.faq +fido7.su.chainik.general +fido7.su.chess +fido7.su.chess.play +fido7.su.chicago +fido7.su.civil-law +fido7.su.cm +fido7.su.cool.stars +fido7.su.crisis.situation +fido7.su.crisis.situation.talks +fido7.su.culture.underground +fido7.su.dacha +fido7.su.dbms +fido7.su.dbms.borland +fido7.su.dbms.case +fido7.su.dbms.cronos +fido7.su.dbms.db2 +fido7.su.dbms.foxpro +fido7.su.dbms.hytech +fido7.su.dbms.interbase +fido7.su.dbms.sql +fido7.su.dragonlance +fido7.su.dsa +fido7.su.f3ds.max +fido7.su.fidotech +fido7.su.fileecho +fido7.su.flame +fido7.su.flirt +fido7.su.football.funs.news +fido7.su.formula1 +fido7.su.formula1.around +fido7.su.forth +fido7.su.game +fido7.su.game.arcade +fido7.su.game.auto +fido7.su.game.chainik +fido7.su.game.flight +fido7.su.game.hardw +fido7.su.game.logic +fido7.su.game.modem +fido7.su.game.news +fido7.su.game.news.announce +fido7.su.game.news.uue +fido7.su.game.sol +fido7.su.game.strategy +fido7.su.game.trade +fido7.su.game.uue +fido7.su.game.video +fido7.su.game.wanted +fido7.su.general +fido7.su.graphics +fido7.su.hamradio +fido7.su.hardw +fido7.su.hardw.audio +fido7.su.hardw.cdrom +fido7.su.hardw.chainik +fido7.su.hardw.game.devices +fido7.su.hardw.hsmodem +fido7.su.hardw.microwave +fido7.su.hardw.notebook +fido7.su.hardw.other +fido7.su.hardw.pbx +fido7.su.hardw.pc.cpu +fido7.su.hardw.pc.media +fido7.su.hardw.pc.microwave +fido7.su.hardw.pc.motherboard +fido7.su.hardw.pc.net +fido7.su.hardw.pc.peripheral +fido7.su.hardw.pc.sound +fido7.su.hardw.pc.video +fido7.su.hardw.pc.video.card +fido7.su.hardw.pc.video.monitor +fido7.su.hardw.phones +fido7.su.hardw.schemes +fido7.su.hardw.support.arvid +fido7.su.hardw.tv.video +fido7.su.hardw.tv.video.profi +fido7.su.hardw.uuencode +fido7.su.hatch +fido7.su.history +fido7.su.hitech +fido7.su.human.rights +fido7.su.humor +fido7.su.humor.answer +fido7.su.humor.poetry +fido7.su.inpro +fido7.su.ip.point +fido7.su.ip.sysop.dns +fido7.su.isr-jews +fido7.su.itrack +fido7.su.jews +fido7.su.jrrt.club +fido7.su.kbh +fido7.su.kitchen +fido7.su.komandor +fido7.su.ksp +fido7.su.ksp.texts +fido7.su.ksp.unpublished +fido7.su.left +fido7.su.lottery +fido7.su.magic +fido7.su.maiden +fido7.su.mailer +fido7.su.mailtools.uue +fido7.su.mainframe +fido7.su.manowar +fido7.su.medic +fido7.su.microsoft.talk +fido7.su.mn.culture-life +fido7.su.mn.society +fido7.su.modem +fido7.su.mtask +fido7.su.music +fido7.su.music.creation +fido7.su.music.gothic +fido7.su.music.heavy-death +fido7.su.music.jazz +fido7.su.music.lyrics +fido7.su.music.metal +fido7.su.music.pictures +fido7.su.music.prodigy +fido7.su.music.russian +fido7.su.music.techno +fido7.su.naezd +fido7.su.net +fido7.su.net.prog +fido7.su.net.wanted +fido7.su.niennah +fido7.su.oop +fido7.su.os2 +fido7.su.os2.apps +fido7.su.os2.beta +fido7.su.os2.comm +fido7.su.os2.drv +fido7.su.os2.faq +fido7.su.os2.faq.d +fido7.su.os2.marginal +fido7.su.os2.prog +fido7.su.os2.src +fido7.su.os2.team +fido7.su.os2.wanted +fido7.su.owl +fido7.su.pascal.modula.ada +fido7.su.pascal.modula.ada.uue +fido7.su.pern +fido7.su.perumov +fido7.su.philosophy +fido7.su.pma.uue +fido7.su.pol +fido7.su.quake.tf +fido7.su.ra +fido7.su.referat +fido7.su.render +fido7.su.rus.travels +fido7.su.satanism +fido7.su.science +fido7.su.science.chemistry +fido7.su.scientologie +fido7.su.sf-f.fandom +fido7.su.sff.fandom +fido7.su.smith +fido7.su.softw +fido7.su.soul +fido7.su.spy +fido7.su.student +fido7.su.suvorov +fido7.su.sysadmin.recovery +fido7.su.toast +fido7.su.tolkien +fido7.su.tolkien.texts +fido7.su.tolkien.uuencode +fido7.su.tormoz +fido7.su.tost +fido7.su.travel +fido7.su.underground +fido7.su.virus +fido7.su.w-d +fido7.su.white.gooses +fido7.su.win32.prog +fido7.su.win95 +fido7.su.win95.chainik +fido7.su.win95.comm +fido7.su.win95.exchange +fido7.su.win95.faq +fido7.su.win95.games +fido7.su.win95.hardw +fido7.su.win95.netw +fido7.su.win95.news +fido7.su.win95.prog +fido7.su.win95.rus-team +fido7.su.win95.softw +fido7.su.windows +fido7.su.windows.nt +fido7.su.windows.nt.prog +fido7.su.windows.prog +fido7.su.windows.wanted +fido7.sumy.files +fido7.super.tormoz +fido7.survival.guide +fido7.symbolic.proc +fido7.t-mail.chainik +fido7.t-mail.fiction +fido7.t-mail.nt.rus +fido7.t-mail.ru +fido7.t-mail.support +fido7.t-mail.util +fido7.t-series.ru +fido7.talks.asm +fido7.teach.pro +fido7.telebook.support +fido7.testing +fido7.tetragraph.public +fido7.tiger-s.claw.echo +fido7.tiger-s.claw.robots +fido7.tmn.games +fido7.tmn.general +fido7.tower.pvt +fido7.trans.info +fido7.trueblue.news +fido7.tver.talk +fido7.ua.abiturient +fido7.ua.agny +fido7.ua.banktech +fido7.ua.business +fido7.ua.contract.bridge +fido7.ua.fidotech +fido7.ua.graphics +fido7.ua.os2 +fido7.ua.os2.crack +fido7.ua.os2.prog +fido7.ua.os2.soft.wanted +fido7.ua.pol +fido7.ua.prlist +fido7.ua.unix +fido7.ublist +fido7.ublist.updates +fido7.uhc.talks +fido7.ural.business +fido7.ural.files +fido7.ural.files.report +fido7.ural.music +fido7.ural.os2 +fido7.ural.q-a +fido7.us-russ-talk +fido7.uu2 +fido7.uuug.general +fido7.uz.business +fido7.uz.fileecho +fido7.uz.games +fido7.uz.general +fido7.uz.internet +fido7.uz.mitya +fido7.uz.philosophy +fido7.uz.relax +fido7.uz.teic +fido7.uz.video +fido7.uz.virus +fido7.vc.news +fido7.vladimir.business +fido7.vladimir.flirt +fido7.vladimir.general +fido7.vladimir.techhelp +fido7.vladimir.video +fido7.watcom.c +fido7.watcom.c.pf +fido7.watcom.c32.pf +fido7.watcom.dos4gwpro +fido7.watcom.general +fido7.wb.q-a +fido7.west.region +fido7.whisky.bar +fido7.white.bear.club +fido7.windows.prog +fido7.wined.support +fido7.wish.you.were.here +fido7.worldcup.f94 +fido7.ws.chat +fido7.ws.extract +fido7.ws.humor +fido7.ws.technics +fido7.www.station.ru +fido7.xap6kob +fido7.xpress.pvt +fido7.xsu.pma.faq +fido7.z7.news +fido7.z7.test +fido7.z7.z2.zone7 +fido7.zc.allfix +fido7.zc.commerce +fido7.zc.files +fido7.zc.fun +fido7.zc.gamez +fido7.zc.gamez.planets +fido7.zc.music +fido7.zc.talks +fido7.zone7 +fido7.zx.spectrum +fido7.zxc.club +fidonet.filk +fidonet.midi-net +finet.asiointi.kunnat +finet.asiointi.pankit +finet.atk.kielet +finet.atk.kielet.c +finet.atk.kielet.elisp +finet.atk.suometus +finet.atk.yllapito +finet.evl.keskustelu +finet.fan.airisto.lenita +finet.fan.linda +finet.fan.warlord +finet.freenet.eok +finet.freenet.harrastus.hevoset +finet.freenet.harrastus.judo +finet.freenet.harrastus.koirat +finet.freenet.harrastus.luontoseuranta +finet.freenet.harrastus.partio +finet.freenet.keskustelu +finet.freenet.kidlink.kidcafe +finet.freenet.kidlink.kidforum +finet.freenet.kidlink.kidleadr +finet.freenet.kidlink.kidlink +finet.freenet.kidlink.kidplan +finet.freenet.kidlink.kidproj +finet.freenet.kidlink.response +finet.freenet.kidlink.suomi +finet.freenet.koti.perhe +finet.freenet.lastensuojelu.asiantuntijat +finet.freenet.lastensuojelu.keskustelu +finet.freenet.lastensuojelu.nimeton +finet.freenet.lists.freenet-otol +finet.freenet.lists.new-patents +finet.freenet.mediateekki.keskustelu +finet.freenet.mediateekki.kirjasto +finet.freenet.mediateekki.kirjat.uutuudet +finet.freenet.mediateekki.lasten-osasto.kirja-uutuudet +finet.freenet.mediateekki.lasten-osasto.kirjat +finet.freenet.mediateekki.lasten-osasto.omat-jutut +finet.freenet.mediateekki.lasten-osasto.pahkina +finet.freenet.mediateekki.lasten-osasto.sadut +finet.freenet.mediateekki.leffat +finet.freenet.mediateekki.lukusali +finet.freenet.mediateekki.viestinta +finet.freenet.mediateekki.yle.radio.mafia +finet.freenet.mediateekki.yle.radio.opetusohjelmat +finet.freenet.mediateekki.yle.televisio.ekoisti +finet.freenet.mediateekki.yle.televisio.nyt +finet.freenet.mediateekki.yle.televisio.opetusohjelmat.aikuisopetus +finet.freenet.mediateekki.yle.televisio.opetusohjelmat.kieliohjelmat +finet.freenet.mediateekki.yle.televisio.opetusohjelmat.koulu-tv +finet.freenet.mediateekki.yle.televisio.talking-heads +finet.freenet.monitoimitalo.korvkiosk +finet.freenet.neuro96 +finet.freenet.oppiaineet.aidinkieli.keskustelu +finet.freenet.oppiaineet.kadentaidot.keskustelu +finet.freenet.oppiaineet.katsomusaineet.keskustelu +finet.freenet.oppiaineet.keskustelu +finet.freenet.oppiaineet.matemaattiset.keskustelu +finet.freenet.oppiaineet.muut +finet.freenet.oppiaineet.psykologia.keskustelu +finet.freenet.oppiaineet.taideaineet.keskustelu +finet.freenet.oppiaineet.vieraat-kielet.keskustelu +finet.freenet.oppimiskeskus.akvaariokoulut.arviointi +finet.freenet.oppimiskeskus.akvaariokoulut.keskustelu +finet.freenet.oppimiskeskus.akvaariokoulut.oppilaat +finet.freenet.oppimiskeskus.ammatilliset.kauppaopetus +finet.freenet.oppimiskeskus.ammatilliset.kehittaminen +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.aikuis.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.aikuis.tietoa +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.didaktiset +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.eettiset +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.jatko.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.jatko.tietoa +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.oppisopimus.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.oppisopimus.tietoa +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.perus.akk +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.perus.opisto +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.perus.yliopisto +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.tieto +finet.freenet.oppimiskeskus.aurora-press +finet.freenet.oppimiskeskus.erityisopetus.kehitys +finet.freenet.oppimiskeskus.euroschool +finet.freenet.oppimiskeskus.kontaktit +finet.freenet.oppimiskeskus.ksv-kasvatus.keskustelu +finet.freenet.oppimiskeskus.ksv-kasvatus.sage +finet.freenet.oppimiskeskus.ksv-kasvatus.sarajevo +finet.freenet.oppimiskeskus.projektit.cpaw +finet.freenet.oppimiskeskus.projektit.etk +finet.freenet.oppimiskeskus.projektit.haitek +finet.freenet.oppimiskeskus.projektit.i-earn +finet.freenet.oppimiskeskus.projektit.ideat +finet.freenet.oppimiskeskus.projektit.imtec +finet.freenet.oppimiskeskus.projektit.imtec.koulu2020 +finet.freenet.oppimiskeskus.projektit.itameri +finet.freenet.oppimiskeskus.projektit.juhlapaivat +finet.freenet.oppimiskeskus.projektit.luova-koulu +finet.freenet.oppimiskeskus.projektit.metsapaiva +finet.freenet.oppimiskeskus.projektit.nycenet +finet.freenet.oppimiskeskus.projektit.telemetso +finet.freenet.oppimiskeskus.projektit.teleolympiadi +finet.freenet.oppimiskeskus.projektit.tiedotteet +finet.freenet.oppimiskeskus.projektit.unesco +finet.freenet.oppimiskeskus.projektit.yhteistyo +finet.freenet.oppimiskeskus.puhe.lapset +finet.freenet.oppimiskeskus.puhe.luokanopettaja +finet.freenet.oppimiskeskus.puhe.nuoret +finet.freenet.oppimiskeskus.puhe.opettajat +finet.freenet.oppimiskeskus.puhe.vanhemmat +finet.freenet.oppimiskeskus.sakki +finet.freenet.partnerit.art-print +finet.freenet.partnerit.kesayliopistot +finet.freenet.partnerit.keskustelu +finet.freenet.partnerit.lahetysseura +finet.freenet.partnerit.sak +finet.freenet.partnerit.sanoma-oy +finet.freenet.partnerit.yle +finet.freenet.raatihuone.hyde_park +finet.freenet.terveyskeskus.keskustelu +finet.freenet.test +finet.freenet.tiedottaa +finet.freenet.tyoryhmat.kaytannot +finet.freenet.tyoryhmat.kehitys +finet.freenet.tyoryhmat.koulutus +finet.freenet.tyoryhmat.tiedotus +finet.freenet.tyoryhmat.varainhankinta +finet.freenet.tyoryhmat.yhteydet +finet.freenet.tyoryhmat.yllapito +finet.freenet.wyn.pressiklubi +finet.freenet.wyn.uutiset +finet.freenet.ymparisto.globe +finet.freenet.ymparisto.metsat +finet.freenet.ymparisto.tekoja +finet.general +finet.harrastus.amnesty +finet.harrastus.babylon5 +finet.harrastus.hamppu +finet.harrastus.kilju +finet.harrastus.kissat +finet.harrastus.olut +finet.harrastus.rautatiet +finet.harrastus.siideri +finet.harrastus.startrek +finet.harrastus.startrek.spocks-hut +finet.harrastus.tolkien +finet.helsinki.hankinnat +finet.helsinki.hoas +finet.helsinki.liikenne +finet.helsinki.puhe +finet.helsinki.ravintolat +finet.helsinki.tapahtumat +finet.ilmot.henkkoht +finet.ilmot.sekal +finet.keskustelu.seksuaalisuus +finet.keskustelu.yleinen +finet.kielet +finet.kielet.englanti +finet.kielet.japani +finet.kielet.suomi +finet.kielet.venaja +finet.kielet.viro +finet.kirjastot.kirjakaapeli +finet.korkeakoulut.atk-politiikka +finet.koti.asuminen +finet.koti.tee-se-itse +finet.koulutus.opintotuki +finet.koulutus.yliopistot +finet.kulttuurit.suomi +finet.kulttuurit.venaja +finet.kulttuurit.viro +finet.kysy.mykset +finet.kysy.osoitteista +finet.kysy.unixista +finet.markkinat.kaupalliset +finet.markkinat.menovesi +finet.markkinat.pc +finet.markkinat.tietokoneet +finet.markkinat.tietopalvelut +finet.olemisen.tarkoitus +finet.opiskelu.matematiikka +finet.paskanjauhanta +finet.politiikka.vaalit +finet.politiikka.yk +finet.puhe +finet.puhe.laihdutus +finet.ryhmat +finet.salaliitot +finet.seurat.king.olavi +finet.sex +finet.svenska.info +finet.svenska.prat +finet.taidot.kirjoittaminen +finet.testi +finet.tiedotteet.lehdisto +finet.tyo +finet.tyo.ammattijarj +finet.unet +finet.uutiset.baltia +finet.uutiset.suomi +finet.valtiot.usa +finet.viestinta.bbs +finet.viestinta.freenet +finet.viestinta.internet +finet.viestinta.televerkot +finet.viestinta.usenet +finet.yhteiskunta.anarkismi +finet.yhteiskunta.vaikuttaminen +finet.yhteiskunta.yksilonvapaus +fiod7.du.net +fiod7.other.news.answers +fiod7.other.russian.sex +fiod7.ru.sex +fiod7.su.cars +fiod7.su.chainik +fiod7.su.game +fiod7.su.humor +fiod7.su.music +fiod7.su.os2 +fiod7.su.windows +fj.1st-readme +fj.archives.answers +fj.archives.d +fj.archives.documents +fj.archives.misc +fj.archives.programs.discussion +fj.archives.programs.mac +fj.archives.programs.misc +fj.archives.programs.ms-windows +fj.archives.programs.msdos +fj.archives.programs.sources +fj.books +fj.comp.ai +fj.comp.announce +fj.comp.arch +fj.comp.databases +fj.comp.dev.cdrom +fj.comp.dev.digital-camera +fj.comp.dev.disk +fj.comp.dev.display +fj.comp.dev.keyboard +fj.comp.dev.memory +fj.comp.dev.misc +fj.comp.dev.pcmcia +fj.comp.dev.pointing +fj.comp.dev.power +fj.comp.dev.printer +fj.comp.dev.scanner +fj.comp.dev.scsi +fj.comp.dev.tape +fj.comp.dsp +fj.comp.image +fj.comp.lang.ada +fj.comp.lang.awk +fj.comp.lang.basic +fj.comp.lang.c +fj.comp.lang.c++ +fj.comp.lang.cobol +fj.comp.lang.forth +fj.comp.lang.fortran +fj.comp.lang.functional +fj.comp.lang.implementation +fj.comp.lang.java +fj.comp.lang.javascript +fj.comp.lang.lisp +fj.comp.lang.misc +fj.comp.lang.pascal +fj.comp.lang.perl +fj.comp.lang.postscript +fj.comp.lang.prolog +fj.comp.lang.ruby +fj.comp.lang.st80 +fj.comp.lang.tcl +fj.comp.lang.verilog +fj.comp.lang.vhdl +fj.comp.lang.visualbasic +fj.comp.misc +fj.comp.mobile +fj.comp.music +fj.comp.oops +fj.comp.parallel +fj.comp.security +fj.comp.security.pgp +fj.comp.sgml +fj.comp.speech +fj.comp.texhax +fj.comp.text +fj.comp.theory +fj.comp.x11 +fj.disaster.earthquake +fj.disaster.oil-spill +fj.disaster.volunteers +fj.editor.emacs +fj.editor.misc +fj.editor.mule +fj.editor.xemacs +fj.education +fj.education.announce +fj.education.math +fj.engr.arch +fj.engr.civil +fj.engr.control +fj.engr.elec +fj.engr.materials +fj.engr.mech +fj.engr.misc +fj.engr.robotics +fj.fleamarket.appliances +fj.fleamarket.autos +fj.fleamarket.books +fj.fleamarket.books.comics +fj.fleamarket.books.comp +fj.fleamarket.books.sci +fj.fleamarket.books.soc +fj.fleamarket.comp +fj.fleamarket.misc +fj.fleamarket.tickets +fj.fleamarket.video-game +fj.jokes +fj.jokes.d +fj.kanakan.misc +fj.kanakan.wnn +fj.kanji +fj.lan +fj.life.children +fj.life.health +fj.life.hometown +fj.life.housing +fj.life.in-hokubei +fj.life.in-japan +fj.life.money +fj.life.religion +fj.life.school +fj.living +fj.mail +fj.mail-lists.fj-committee +fj.mail.lists +fj.meetings +fj.misc +fj.misc.announce +fj.misc.handicap +fj.net-people +fj.net.announce +fj.net.fax +fj.net.fddi +fj.net.ftp +fj.net.ftp.archie +fj.net.gopher +fj.net.guideline +fj.net.ip +fj.net.ip.dns +fj.net.isdn +fj.net.kermit +fj.net.media.ethernet +fj.net.mime +fj.net.misc +fj.net.modems +fj.net.modems.fax +fj.net.phones +fj.net.phones.manners +fj.net.phones.mobile +fj.net.phones.phs +fj.net.programming +fj.net.providers +fj.net.uucp +fj.net.wais +fj.net.www +fj.net.www.authoring +fj.net.www.browsers +fj.net.www.pages +fj.net.www.servers +fj.news.adm +fj.news.announce +fj.news.config +fj.news.group +fj.news.group.archives +fj.news.group.comp +fj.news.group.misc +fj.news.group.net +fj.news.group.rec +fj.news.group.sci +fj.news.group.soc +fj.news.lists +fj.news.misc +fj.news.net-abuse +fj.news.policy +fj.news.reader +fj.news.reader.gn +fj.news.reader.gnus +fj.news.reader.mnews +fj.news.reader.msin +fj.news.reader.rn +fj.news.reader.tin +fj.news.reader.winvn +fj.news.system +fj.news.system.b +fj.news.system.c +fj.news.system.dnas +fj.news.system.inn +fj.news.system.nntp +fj.news.usage +fj.org.ieee +fj.org.ipsj +fj.org.jsai +fj.org.jssst +fj.org.jus +fj.org.ptt +fj.os.bsd.bsd-os +fj.os.bsd.freebsd +fj.os.bsd.misc +fj.os.bsd.netbsd +fj.os.hurd +fj.os.linux +fj.os.minix +fj.os.misc +fj.os.ms-windows +fj.os.ms-windows.programming +fj.os.msdos +fj.os.os2 +fj.os.plan9 +fj.os.windows-nt +fj.personal-ads.friends +fj.personal-ads.misc +fj.personal-ads.penpals +fj.questions.fj +fj.questions.internet +fj.questions.misc +fj.questions.unix +fj.rec.aerospace +fj.rec.aerospace.simulators +fj.rec.animation +fj.rec.animation.oldies +fj.rec.announce +fj.rec.autos +fj.rec.autos.sports +fj.rec.autos.wagon +fj.rec.av +fj.rec.bicycles +fj.rec.bus +fj.rec.comics +fj.rec.dance +fj.rec.disney +fj.rec.drink +fj.rec.drink.liquor +fj.rec.fine-arts +fj.rec.fishing +fj.rec.food +fj.rec.fortunetelling +fj.rec.games +fj.rec.games.arcade.pinball +fj.rec.games.go +fj.rec.games.mahjong +fj.rec.games.pachinko +fj.rec.games.roguelike +fj.rec.games.roleplaying +fj.rec.games.shogi +fj.rec.games.video.arcade +fj.rec.games.video.arcade.kakutou +fj.rec.games.video.characters +fj.rec.games.video.home +fj.rec.games.video.home.nintendo64 +fj.rec.games.video.home.playstation +fj.rec.games.video.home.saturn +fj.rec.games.video.home.superfamicom +fj.rec.games.video.pc +fj.rec.gardens +fj.rec.ham +fj.rec.history +fj.rec.idol +fj.rec.marine +fj.rec.misc +fj.rec.models +fj.rec.motorcycles +fj.rec.movies +fj.rec.music +fj.rec.music.alternative +fj.rec.music.classical +fj.rec.music.creators +fj.rec.music.j-pop +fj.rec.music.newage +fj.rec.music.progressive +fj.rec.music.winds +fj.rec.mystery +fj.rec.novels +fj.rec.outdoor +fj.rec.pets +fj.rec.pets.aqua +fj.rec.photo +fj.rec.play +fj.rec.poems +fj.rec.radio +fj.rec.rail +fj.rec.rail.cars +fj.rec.rail.historical +fj.rec.rail.tickets +fj.rec.rubber-duckie +fj.rec.seiyu +fj.rec.sf +fj.rec.sf.startrek +fj.rec.ships +fj.rec.smoking +fj.rec.sports +fj.rec.sports.american.football +fj.rec.sports.baseball +fj.rec.sports.basketball +fj.rec.sports.football +fj.rec.sports.golf +fj.rec.sports.keiba +fj.rec.sports.prowrestling +fj.rec.sports.rugby +fj.rec.sports.scuba-diving +fj.rec.sports.ski +fj.rec.sports.snowboard +fj.rec.sports.soccer +fj.rec.sports.tennis +fj.rec.sports.volleyball +fj.rec.tokei +fj.rec.tokusatsu +fj.rec.trading-cards +fj.rec.travel +fj.rec.travel.air +fj.rec.travel.japan +fj.rec.travel.world +fj.rec.tv +fj.rec.tv.cm +fj.rec.wine +fj.sci.astro +fj.sci.bio +fj.sci.chem +fj.sci.cognitive +fj.sci.economics +fj.sci.geo +fj.sci.human-factors +fj.sci.informatics +fj.sci.lang +fj.sci.math +fj.sci.matter +fj.sci.medical +fj.sci.military +fj.sci.misc +fj.sci.philosophy +fj.sci.physics +fj.sci.psychology +fj.soc.agriculture +fj.soc.announce +fj.soc.copyright +fj.soc.culture +fj.soc.culture.chinese +fj.soc.economy +fj.soc.environment +fj.soc.history +fj.soc.human-rights +fj.soc.internet +fj.soc.internet.censorship +fj.soc.law +fj.soc.media +fj.soc.medical +fj.soc.men-women +fj.soc.misc +fj.soc.nuclear +fj.soc.politics +fj.soc.pseudo-science +fj.soc.smoking +fj.soc.tech +fj.soc.traffic +fj.soc.traffic.manners +fj.soc.war-and-peace +fj.sources +fj.sources.d +fj.sys.alpha +fj.sys.ews4800 +fj.sys.hp +fj.sys.ibmpc +fj.sys.j3100 +fj.sys.luna +fj.sys.mac +fj.sys.mac.advocacy +fj.sys.mac.comm +fj.sys.mac.programming +fj.sys.misc +fj.sys.news +fj.sys.newton +fj.sys.next +fj.sys.pc98 +fj.sys.rs6000 +fj.sys.sgi +fj.sys.sun +fj.sys.vax +fj.sys.x68000 +fj.sys.zaurus +fj.test +fj.unix +fj.wanted +fl.announce +fl.attractions +fl.biz +fl.config +fl.config.control +fl.environment +fl.forsale +fl.forsale.auto +fl.gardening +fl.general +fl.jobs.computers.application +fl.jobs.computers.misc +fl.jobs.computers.programming +fl.jobs.misc +fl.jobs.resumes +fl.jobs.telecommute +fl.jobs.www +fl.media.radio +fl.media.tv +fl.politics +fl.real-estate +fl.restaurant +fl.test +fl.travel +fl.uug +flora.action-forum +flora.admin.design +flora.admin.help +flora.afo +flora.announce +flora.ask-doctor +flora.canvis-l +flora.cbcc +flora.cfsc +flora.comnet-www +flora.general +flora.mai-not +flora.opirg-events +flora.ovs +flora.ovs.recipe +flora.perc +flora.status +flora.test.automoderated +fnet.afuu +fnet.c3 +fnet.combinatoire +fnet.common-lp +fnet.culture +fnet.followup +fnet.formel +fnet.general +fnet.greco-prog +fnet.hypercubes +fnet.ia +fnet.lang +fnet.lelisp +fnet.lmastat +fnet.seminaires +fnet.sm90 +fnet.sps9 +fnet.test +fnet.tietoliikenne.televerkot +fr.announce.divers +fr.announce.important +fr.announce.newgroups +fr.announce.seminaires +fr.bienvenue +fr.bienvenue.questions +fr.bio.biolmol +fr.bio.canauxioniques +fr.bio.general +fr.bio.genome +fr.bio.logiciel +fr.bio.medecine +fr.biz.d +fr.biz.produits +fr.biz.publicite +fr.biz.teletravail +fr.comp.applications.emacs +fr.comp.applications.libres +fr.comp.applications.x11 +fr.comp.divers +fr.comp.emulateurs +fr.comp.ia +fr.comp.infosystemes +fr.comp.infosystemes.www.annonces +fr.comp.infosystemes.www.annonces.d +fr.comp.infosystemes.www.auteurs +fr.comp.infosystemes.www.divers +fr.comp.infosystemes.www.navigateurs +fr.comp.infosystemes.www.pages-perso +fr.comp.infosystemes.www.serveurs +fr.comp.lang.ada +fr.comp.lang.basic +fr.comp.lang.c +fr.comp.lang.c++ +fr.comp.lang.general +fr.comp.lang.java +fr.comp.lang.lisp +fr.comp.lang.pascal +fr.comp.lang.perl +fr.comp.lang.tcl +fr.comp.mail +fr.comp.objet +fr.comp.os.bsd +fr.comp.os.divers +fr.comp.os.linux +fr.comp.os.linux.annonces +fr.comp.os.linux.moderated +fr.comp.os.mac-os +fr.comp.os.ms-windows.programmation +fr.comp.os.ms-windows.win3 +fr.comp.os.ms-windows.win95 +fr.comp.os.ms-windows.winnt +fr.comp.os.msdos +fr.comp.os.os2 +fr.comp.os.unix +fr.comp.os.unix.mac +fr.comp.os.vms +fr.comp.pao +fr.comp.securite +fr.comp.sys.amiga +fr.comp.sys.atari +fr.comp.sys.be +fr.comp.sys.divers +fr.comp.sys.mac +fr.comp.sys.mac.annonces +fr.comp.sys.mac.communication +fr.comp.sys.mac.materiel +fr.comp.sys.mac.programmation +fr.comp.sys.next +fr.comp.sys.parallele.sp.utilisateurs +fr.comp.sys.pc +fr.comp.text.tex +fr.doc.biblio +fr.doc.divers +fr.doc.magazines +fr.education.divers +fr.education.medias +fr.emplois.d +fr.emplois.demandes +fr.emplois.offres +fr.lettres.langue.francaise +fr.misc.bavardages.dinosaures +fr.misc.cryptologie +fr.misc.divers +fr.misc.droit +fr.misc.droit.internet +fr.misc.finance +fr.misc.handicap +fr.misc.transport.autostop +fr.misc.transport.rail +fr.network.divers +fr.network.internet +fr.network.internet.fournisseurs +fr.network.modems +fr.rec.anime +fr.rec.apiculture +fr.rec.aquariophilie +fr.rec.arts.bd +fr.rec.arts.litterature +fr.rec.arts.plastiques +fr.rec.arts.sf +fr.rec.arts.spectacles +fr.rec.bateaux +fr.rec.bibliophilie +fr.rec.boissons.vins +fr.rec.bricolage +fr.rec.brocante +fr.rec.cinema.affiches +fr.rec.cinema.discussion +fr.rec.cinema.selection +fr.rec.cuisine +fr.rec.divers +fr.rec.genealogie +fr.rec.humour +fr.rec.jardinage +fr.rec.jeux.cartes +fr.rec.jeux.divers +fr.rec.jeux.jdr +fr.rec.jeux.societe +fr.rec.jeux.video +fr.rec.jeux.video.tombraider +fr.rec.jeux.wargames +fr.rec.moto +fr.rec.musiques +fr.rec.musiques.hip-hop +fr.rec.oracle +fr.rec.peche-chasse +fr.rec.philatelie +fr.rec.photo +fr.rec.plongee +fr.rec.radio +fr.rec.sport.divers +fr.rec.sport.equitation +fr.rec.sport.football +fr.rec.sport.rugby +fr.rec.sport.vtt +fr.rec.tv.satellite +fr.rec.tv.series +fr.rec.voyages +fr.res-doct.archi +fr.reseaux.telecoms.mobiles +fr.reseaux.telecoms.operateurs +fr.reseaux.telecoms.rnis +fr.reseaux.telecoms.techniques +fr.sci.astronomie +fr.sci.automatique +fr.sci.biometrie +fr.sci.cogni.discussion +fr.sci.cogni.incognito +fr.sci.cogni.info +fr.sci.cogni.outil +fr.sci.cogni.publication +fr.sci.divers +fr.sci.electronique +fr.sci.jargon +fr.sci.maths +fr.sci.philo +fr.soc.alternatives +fr.soc.divers +fr.soc.homosexualite +fr.soc.internet +fr.soc.politique +fr.soc.religion +fr.test +fr.usenet.8bits +fr.usenet.abus.d +fr.usenet.abus.rapports +fr.usenet.distribution +fr.usenet.divers +fr.usenet.forums.annonces +fr.usenet.forums.evolution +fr.usenet.logiciels +fr.usenet.reponses +fr.usenet.stats +francom.automobile +francom.aviation +francom.biere_vins +francom.chatting.amitie +francom.chatting.generale +francom.cinema_video +francom.comp.amiga +francom.comp.ibm +francom.comp.macintosh +francom.echecs +francom.electronique +francom.environnement +francom.esoterisme +francom.infos +francom.jeux.ordinateurs +francom.justice +francom.lhl +francom.logiciels.dos +francom.medical +francom.ms.windows +francom.multimedia +francom.musique +francom.nouveaux.groupes +francom.opinions +francom.parents +francom.programmation +fras.mini-bins +fras.text.allgemein +free.abstinence +free.activism.walmart +free.advice +free.alt.config +free.alt.freedom.japan +free.alt.freedom.japan.loli +free.alt.freedom.japan.loose-socks +free.alt.freedom.japan.repost +free.alt.freedom.japan.sm +free.alt.freedom.jbpe.gam +free.alt.iran.irc +free.americans.suck +free.answers +free.aquaria +free.arabic.friends +free.at-last +free.baba.naga +free.beenz +free.beer +free.bharat +free.big.name.news.group.the.biggest.in.the.free.bit.is.it.the.largest +free.binaries.first.one.so.there.nah.nah.nah.nah.nah +free.binaries.software +free.biz +free.biz.config +free.boursy +free.brian-baird +free.brookfield.connecticut.education +free.cascade +free.chicken +free.chicken.tika.masala +free.chicken.vindaloo +free.clinton.and.assholes.who.like.to.trash.him +free.clinton.arkansas.mena +free.clinton.bombed.sudan.afghanistan +free.clinton.campaign.finance.scandals +free.clinton.china.scandals +free.clinton.department.of.justice.abuse +free.clinton.fbi.files +free.clinton.fbi.files.blackmail +free.clinton.impeachment.trial +free.clinton.indian.scandals +free.clinton.judicial.watch +free.clinton.kathleen.wiley.scandals +free.clinton.ken.starr +free.clinton.linda.tripp +free.clinton.mary.mahoney +free.clinton.monica.lewinsky.scandals +free.clinton.oklahoma.city.bombing +free.clinton.paula.jones.scandal +free.clinton.ron.brown +free.clinton.scandals.moderated +free.clinton.tainted.blood.scandals +free.clinton.travel.gate +free.clinton.vince.foster +free.clinton.wag.the.dog +free.clitnon.mary.mahoney +free.comp +free.comp.config +free.comp.linux.misc +free.config +free.config.not +free.control +free.country.usa +free.cthulhu +free.dick.morris.fans +free.divx-sucks +free.dom +free.drugs +free.eaves.family +free.email +free.fan.free +free.fan.karl-malden.nose +free.fan.redwordsmith +free.fan.rupert-hangnail +free.flame +free.football.but.not.fecking.american.ok.its.football.not.fecking.soccer.americans.realise.this +free.footy +free.fr +free.fr.config +free.fr.fan.cagoles +free.fr.rec.chasse.newbies +free.fr.sci.cogni.incognito +free.fr.soc.democratie-liberale +free.free.stuff +free.get.out.of.jail +free.grubor +free.haggis +free.hayes +free.hipcrime +free.hipcrime.whack +free.homer-j-simpson +free.host-u.support +free.it.hackers.patetici.lamers +free.it.hackers.per.modo.di.dire +free.it.lamers +free.it.lamers.mentore.lame.lame.lame +free.janet-reno +free.jbel +free.jesus.saves +free.jkfisher +free.jokes +free.junkfax.discuss +free.kevin +free.kijfhoek.noo-noo +free.kosovo +free.kuwait +free.loader.phoenix +free.lunch.no-such-thing +free.mars +free.megabozo.bill-palmer +free.megabozo.john-palmer +free.meowing +free.milwauke +free.milwaukee +free.misc +free.misc.config +free.misc.forteana +free.money +free.mumia +free.mumia-abu-jamal +free.music.crocketts +free.music.throwing-muses +free.naturism.wales +free.news.answers.why-free +free.news.config +free.newsadmins.jonas.luster +free.newsangels +free.nicholas.morgan.phillips +free.nin +free.nl.newsgroups +free.noo-noo +free.pencils +free.phone-calls +free.pl.silesia +free.politics.arena1 +free.poodles.standard +free.porno +free.porno.flicks +free.porno.mags +free.radical +free.radicals +free.radish.therapy +free.rec.config +free.rec.iran.kungfu-toa +free.rec.juggling +free.reverend.david-voth +free.rrevved +free.s_company +free.sci.iran +free.sex +free.sex.moderated +free.shit +free.slack +free.slack.bring.me.an.imac +free.slave +free.soc.config +free.soc.culture.english +free.software +free.software.open-source +free.source.support +free.spam +free.spirit +free.sports.soccer +free.sports.soccer.english +free.sports.soccer.man-united +free.sports.soccer.scottish +free.talk.config +free.talk.jr-state +free.talk.persian.politics +free.talk.prisons.moderated +free.test +free.testbourne +free.tibet +free.tim-skirvin-is-god +free.two.one.blast-off +free.two.one.contact +free.uk.anarchy-in-the +free.uk.astrology +free.uk.gardening +free.uk.genealogy +free.uk.greyhounds +free.uk.guns +free.uk.herbs +free.uk.housing.misc +free.uk.london.young-adults +free.uk.music.festivals +free.uk.music.swing +free.uk.nature.ponds +free.uk.numerology +free.uk.paranormal +free.uk.pigeons +free.uk.sport.orienteering +free.uk.sport.wrestling +free.uk.surveillance-technology +free.uk.tv.soaps +free.unclothed.chinese.kooks +free.underwater +free.vanity.ashley-yakeley +free.villetti +free.virtualglasgow-net.support +free.war.on.drugs +free.way +free.whales +free.willey +free.willie +free.your-mind +free.your-mind.and-your-ass-will-follow +frmug.general +fsu.freenet.youth.the.cafe +fsu.weather +fub.general +ga.atl-braves +ga.forsale +ga.general +ga.motss +ga.test +gac.physics.astronomy +gac.student.ggs +gay-net.aids +gay-net.artikel +gay-net.behinderte +gay-net.btx-ecke +gay-net.buchtips +gay-net.coming-out +gay-net.computer +gay-net.dfue +gay-net.diskussionen +gay-net.fundgrube +gay-net.general +gay-net.gruppen.general +gay-net.guide.bundesweit +gay-net.guide.weltweit +gay-net.haushalt +gay-net.heteros +gay-net.international +gay-net.kontakte +gay-net.labern +gay-net.lederecke +gay-net.lesben +gay-net.mailboxen +gay-net.medien +gay-net.recht +gay-net.spiele +gay-net.sprachen +gay-net.sysop-mail +gay-net.test +gay-net.witze +geometry.announcements +geometry.college +geometry.forum +geometry.institutes +geometry.pre-college +geometry.puzzles +geometry.research +geometry.software.dynamic +georgia.announce +ger.amiga +ger.atari +ger.binaer.ct.adressen +ger.binaer.ct.bugs +ger.binaer.ct.inhalt +ger.binaer.ct.listings +ger.binaer.ct.pc_config +ger.binaer.ct.pci_corner +ger.binaer.ct.share +ger.binaer.ct.soft +ger.binaer.gw.inhalt +ger.binaer.ix.inhalt +ger.binaer.swt.inhalt +ger.ct +ger.ct.projekte +ger.ct.pruefstand +ger.ct.schulen +ger.ct.support +ger.gernet +ger.mac +ger.pc.dos +ger.pc.hard +ger.pc.linux +ger.pc.os2 +ger.pc.win +gernet.ct +git.ads +git.arch.durfee +git.cc.alums +git.cc.class.150x +git.cc.class.4803a +git.cc.class.8011p +git.cc.class.8011r +git.cc.class.8113g +git.cc.class.8113h +git.cc.class.8113p +git.cc.class.8113r +git.cc.colloquia +git.cc.community +git.cc.cscw +git.cc.general +git.cc.help +git.cc.morale +git.cc.systems.mac +git.cc.systems.ug +git.ce.concrete.canoe +git.ce.construction +git.ce.steel.bridge +git.ce.sustainability +git.ce.systems +git.class.compe.1700a +git.class.compe.1770a +git.class.isye.3027b +git.club.aao +git.club.aiasgt +git.club.amsa +git.club.anachronism +git.club.ans +git.club.asa +git.club.asme +git.club.bgsa +git.club.cambodia +git.club.ccf +git.club.chi-alpha +git.club.crew +git.club.csa +git.club.cycling +git.club.entrepreneur +git.club.fieldhockey +git.club.gspe +git.club.guns +git.club.habitat +git.club.ifc +git.club.ihss +git.club.juggling +git.club.lacrosse +git.club.lcm +git.club.musicians-net +git.club.odk +git.club.opa +git.club.panh +git.club.prisa +git.club.prolife +git.club.rotaract +git.club.sailing +git.club.satf.prevention +git.club.satf.response +git.club.sca +git.club.seds +git.club.sfl +git.club.snag +git.club.sos +git.club.spc +git.club.sport.announce +git.club.sps +git.club.squash +git.club.suth +git.club.swarm +git.club.swim +git.club.sword +git.club.tef +git.club.ultimate +git.club.water-polo +git.club.water-ski +git.club.womens-union +git.club.wrek.techtalk +git.club.wrekage +git.cont-ed +git.dining.menu +git.edutech +git.edutech.ms +git.edutech.ms.problems +git.edutech.ms.software +git.ee.class.1300d +git.ee.class.390x +git.ee.compass +git.enve.ers.s1 +git.events.greekweek +git.events.homecoming +git.fin-aid.announce +git.general +git.grad +git.grad.gta +git.gtri.co-op +git.gtri.www +git.hideout +git.housing.esa +git.housing.resnet.availability +git.housing.resnet.questions +git.housing.woodruff +git.ieee +git.infosystems +git.isye.general +git.isye.healthsystems +git.isye.mot +git.lcc.class.1001j +git.lcc.class.2020j2 +git.lcc.class.2310p +git.lcc.class.3020o +git.lcc.class.6303a +git.leadershape +git.manufacturing.prc +git.maple.questions +git.math.class.1507a4 +git.math.class.1509n4 +git.math.class.3012a1 +git.math.class.3308ca +git.math.class.4803a +git.math.symbolic +git.me.class.2016b +git.me.research +git.me.scholarship +git.mechatronics +git.media-talk +git.mgt.club.entrepreneur +git.msm.general +git.news.groups +git.nrotc +git.ohr.jobs.digest +git.oit.availability +git.oit.questions +git.olympics.official +git.olympics.volunteer +git.options +git.os2 +git.outreach +git.physics.announce +git.physics.class.2122c +git.police.parking +git.politics +git.psych.class.1010a +git.psych.class.1010b +git.psych.class.1010c +git.psych.class.1010d +git.psych.class.1010e +git.psych.class.1010f +git.psych.class.1010g +git.psych.class.1010h +git.quality +git.rha.east +git.rha.general +git.rha.grad +git.rha.west +git.sga.coursecritique +git.sga.usc +git.sql-help +git.studctr.center4arts +git.studctr.movie.announce +git.studctr.movie.committee +git.studctr.movie.discussion +git.talk.abortion +git.talk.cars +git.talk.international +git.talk.middleast +git.talk.objectivism +git.talk.philosophy +git.talk.policy +git.talk.ps +git.talk.quake +git.talk.religion +git.tech.futures +git.telework +git.test +git.test.moderated +git.unix.linux.mailing-lists.ale +git.unix.solaris +git.win95.questions +git.year2000 +gnu.announce +gnu.bash.bug +gnu.cfengine.bug +gnu.cfengine.help +gnu.chess +gnu.cvs.bug +gnu.cvs.help +gnu.emacs.announce +gnu.emacs.bug +gnu.emacs.gnews +gnu.emacs.gnus +gnu.emacs.help +gnu.emacs.sources +gnu.emacs.vm.bug +gnu.emacs.vm.info +gnu.emacs.vms +gnu.epoch.misc +gnu.g++.announce +gnu.g++.bug +gnu.g++.help +gnu.g++.lib.bug +gnu.gcc.announce +gnu.gcc.bug +gnu.gcc.help +gnu.gdb.bug +gnu.ghostscript.bug +gnu.gnats.bug +gnu.gnusenet.config +gnu.gnusenet.test +gnu.gnustep.announce +gnu.gnustep.bug +gnu.gnustep.discuss +gnu.gnustep.help +gnu.groff.bug +gnu.misc.discuss +gnu.smalltalk.bug +gnu.utils.bug +gnu.utils.help +gov.org.admin.financenet +gov.org.g7.announce +gov.org.g7.environment +gov.org.g7.misc +gov.topic.admin.finance.accounting +gov.topic.admin.finance.asset-liab-mgt +gov.topic.admin.finance.audits +gov.topic.admin.finance.budgeting +gov.topic.admin.finance.calendar +gov.topic.admin.finance.int-controls +gov.topic.admin.finance.misc +gov.topic.admin.finance.municipalities +gov.topic.admin.finance.news +gov.topic.admin.finance.payroll +gov.topic.admin.finance.perf-measures +gov.topic.admin.finance.policy +gov.topic.admin.finance.procurement +gov.topic.admin.finance.reporting +gov.topic.admin.finance.state-county +gov.topic.admin.finance.systems +gov.topic.admin.finance.training +gov.topic.admin.finance.travel-admin +gov.topic.admin.privatization +gov.topic.finance.banks +gov.topic.finance.securities +gov.topic.forsale.misc +gov.topic.info.systems.epub +gov.topic.info.systems.year2000 +gov.topic.telecom.announce +gov.topic.telecom.misc +gov.topic.transport.air +gov.topic.transport.misc +gov.topic.transport.navigation +gov.topic.transport.rail +gov.topic.transport.road +gov.topic.transport.shipping +gov.topic.transport.water +gov.us.fed.cia.announce +gov.us.fed.congress.announce +gov.us.fed.congress.bills.house +gov.us.fed.congress.bills.senate +gov.us.fed.congress.calendar.house +gov.us.fed.congress.calendar.senate +gov.us.fed.congress.discuss +gov.us.fed.congress.documents +gov.us.fed.congress.gao.announce +gov.us.fed.congress.gao.decisions +gov.us.fed.congress.gao.discuss +gov.us.fed.congress.gao.reports +gov.us.fed.congress.record.digest +gov.us.fed.congress.record.extensions +gov.us.fed.congress.record.house +gov.us.fed.congress.record.index +gov.us.fed.congress.record.senate +gov.us.fed.congress.reports +gov.us.fed.courts.announce +gov.us.fed.dhhs.announce +gov.us.fed.dhhs.fda.announce +gov.us.fed.dhhs.ssa.announce +gov.us.fed.doc.announce +gov.us.fed.doc.cbd.awards +gov.us.fed.doc.cbd.forsale +gov.us.fed.doc.cbd.notices +gov.us.fed.doc.cbd.solicitations +gov.us.fed.doc.cbd.standards +gov.us.fed.doc.census.announce +gov.us.fed.doc.noaa.announce +gov.us.fed.dod.announce +gov.us.fed.dod.army.announce +gov.us.fed.dod.army.reserve +gov.us.fed.dod.navy.announce +gov.us.fed.dod.usaf.announce +gov.us.fed.doe.announce +gov.us.fed.doi.announce +gov.us.fed.doj.announce +gov.us.fed.dol.announce +gov.us.fed.dot.announce +gov.us.fed.dot.faa.announce +gov.us.fed.dot.nhtsa.announce +gov.us.fed.dot.uscg.announce +gov.us.fed.ed.announce +gov.us.fed.eop.announce +gov.us.fed.eop.white-house.announce +gov.us.fed.epa.announce +gov.us.fed.fcc.announce +gov.us.fed.fdic.announce +gov.us.fed.fema.announce +gov.us.fed.ferc.announce +gov.us.fed.fmc.announce +gov.us.fed.frs.announce +gov.us.fed.gsa.announce +gov.us.fed.hud.announce +gov.us.fed.nara.announce +gov.us.fed.nara.fed-register.announce +gov.us.fed.nara.fed-register.authoring +gov.us.fed.nara.fed-register.contents +gov.us.fed.nara.fed-register.corrections +gov.us.fed.nara.fed-register.notices +gov.us.fed.nara.fed-register.presidential +gov.us.fed.nara.fed-register.proposed-rules +gov.us.fed.nara.fed-register.rules +gov.us.fed.nasa.announce +gov.us.fed.nasa.ksc.announce +gov.us.fed.nrc.announce +gov.us.fed.nsf.announce +gov.us.fed.nsf.documents +gov.us.fed.nsf.grants +gov.us.fed.opm.announce +gov.us.fed.sba.announce +gov.us.fed.sec.announce +gov.us.fed.state.announce +gov.us.fed.treasury.announce +gov.us.fed.treasury.irs.announce +gov.us.fed.usaid.announce +gov.us.fed.usaid.pib +gov.us.fed.usda.announce +gov.us.fed.va.announce +gov.us.org.admin.aga +gov.us.org.admin.fasab +gov.us.org.admin.gfoa +gov.us.org.info.ace +gov.us.org.info.ala +gov.us.topic.agri.farms +gov.us.topic.agri.food +gov.us.topic.agri.misc +gov.us.topic.agri.statistics +gov.us.topic.ecommerce.announce +gov.us.topic.ecommerce.misc +gov.us.topic.ecommerce.standards +gov.us.topic.emergency.alerts +gov.us.topic.emergency.misc +gov.us.topic.energy.misc +gov.us.topic.energy.nuclear +gov.us.topic.energy.utilities +gov.us.topic.environment.air +gov.us.topic.environment.announce +gov.us.topic.environment.misc +gov.us.topic.environment.toxics +gov.us.topic.environment.waste +gov.us.topic.environment.water +gov.us.topic.finance.banks +gov.us.topic.finance.securities +gov.us.topic.foreign.news +gov.us.topic.foreign.trade.leads +gov.us.topic.foreign.trade.misc +gov.us.topic.foreign.trade.statistics +gov.us.topic.gov-jobs.employee.issues +gov.us.topic.gov-jobs.employee.news +gov.us.topic.gov-jobs.hr-admin +gov.us.topic.gov-jobs.offered.admin +gov.us.topic.gov-jobs.offered.admin.finance +gov.us.topic.gov-jobs.offered.admin.ses +gov.us.topic.gov-jobs.offered.announce +gov.us.topic.gov-jobs.offered.clerical +gov.us.topic.gov-jobs.offered.engineering +gov.us.topic.gov-jobs.offered.foreign +gov.us.topic.gov-jobs.offered.health +gov.us.topic.gov-jobs.offered.law-enforce +gov.us.topic.gov-jobs.offered.math-comp +gov.us.topic.gov-jobs.offered.misc +gov.us.topic.gov-jobs.offered.questions +gov.us.topic.gov-jobs.offered.science +gov.us.topic.gov-jobs.offered.technical +gov.us.topic.grants.research +gov.us.topic.info.abstracts.cdrom +gov.us.topic.info.abstracts.epub +gov.us.topic.info.abstracts.infosystems +gov.us.topic.info.abstracts.print +gov.us.topic.info.libraries.govdocs +gov.us.topic.info.libraries.technology +gov.us.topic.info.policy.announce +gov.us.topic.info.policy.misc +gov.us.topic.law.pub-contract +gov.us.topic.nat-resources.forests +gov.us.topic.nat-resources.land +gov.us.topic.nat-resources.marine +gov.us.topic.nat-resources.minerals +gov.us.topic.nat-resources.oil-gas +gov.us.topic.nat-resources.parks +gov.us.topic.nat-resources.wildlife +gov.us.topic.statistics.announce +gov.us.topic.statistics.reports +gov.us.topic.telecom.announce +gov.us.topic.telecom.misc +gov.us.topic.transport.air +gov.us.topic.transport.misc +gov.us.topic.transport.rail +gov.us.topic.transport.road +gov.us.topic.transport.shipping +gov.us.topic.transport.water +gov.us.usenet.admin +gov.us.usenet.announce +gov.us.usenet.answers +gov.us.usenet.control +gov.us.usenet.groups +gov.us.usenet.lists +gov.us.usenet.questions +gov.us.usenet.software +gov.us.usenet.test +gov.usenet.admin +gov.usenet.announce +gov.usenet.answers +gov.usenet.control +gov.usenet.groups +gov.usenet.lists +gov.usenet.questions +gov.usenet.software +gov.usenet.test +gstv.computing +gstv.control +gstv.general +gstv.linux +gstv.newsgroups +gstv.questions +gstv.rumor +gstv.shows +gstv.shows.24fps +gstv.shows.da-spot +gstv.staff +gstv.test +gvnc.arts +gvnc.config +gvnc.forsale +gvnc.general +gvnc.jobs +gvnc.politics +gvnc.soc +gvnc.test +gwu.greenu +gwu.msfinance +gwu.seas.cs219 +hackercorp.statistics +hactar.aminet.daily +hactar.aminet.weekly +hactar.cnews +hactar.config +hactar.fish +hactar.general +hactar.meeting +hactar.mime +hactar.space-1999 +hactar.stats +hactar.test +halcyon.announce +halcyon.answers +halcyon.forsale +halcyon.general +halcyon.slip +halcyon.test +han.announce +han.answers +han.arts.architecture +han.arts.design +han.arts.fine-art +han.arts.misc +han.arts.music.classical +han.arts.music.gayo +han.arts.music.gugak +han.arts.music.jazz +han.arts.music.misc +han.arts.music.movie +han.arts.music.pop +han.arts.music.progressive +han.arts.music.rock +han.arts.theater +han.binaries.photo +han.comp.database +han.comp.hangul +han.comp.internet +han.comp.lang.c +han.comp.lang.c++ +han.comp.lang.fortran +han.comp.lang.java +han.comp.lang.lisp +han.comp.lang.misc +han.comp.lang.perl +han.comp.lang.tcltk +han.comp.mail +han.comp.misc +han.comp.os.freebsd +han.comp.os.linux +han.comp.os.misc +han.comp.os.ms-windows.programming.misc +han.comp.os.ms-windows.programming.vb +han.comp.os.unix +han.comp.os.winnt +han.comp.periphs.input +han.comp.periphs.networking +han.comp.periphs.output +han.comp.periphs.storage +han.comp.questions +han.comp.security +han.comp.sys.cray +han.comp.sys.hp +han.comp.sys.ibmpc +han.comp.sys.mac +han.comp.sys.misc +han.comp.sys.sgi +han.comp.sys.sun +han.comp.text +han.comp.www.authoring +han.comp.www.browsers +han.comp.www.info +han.comp.www.misc +han.comp.www.servers +han.misc.forsale +han.misc.jobs +han.misc.misc +han.net.announce +han.net.hana +han.net.kornet +han.net.kren +han.net.kreonet +han.net.misc +han.net.nuri +han.net.services +han.news.admin +han.news.groups +han.news.net-abuse +han.news.stats +han.news.users +han.politics +han.rec.baduk +han.rec.books +han.rec.cars +han.rec.food +han.rec.games +han.rec.humor +han.rec.manhwa +han.rec.misc +han.rec.movie +han.rec.photo +han.rec.sf +han.rec.sports.baseball +han.rec.sports.basketball +han.rec.sports.football +han.rec.sports.golf +han.rec.sports.misc +han.rec.sports.tennis +han.rec.sports.volleyball +han.rec.tv +han.school.elementary +han.school.high +han.school.middle +han.school.pta +han.sci.agriculture +han.sci.astro +han.sci.bio +han.sci.chem +han.sci.dentistry +han.sci.earth +han.sci.engr +han.sci.math +han.sci.med +han.sci.misc +han.sci.physics +han.sci.stat +han.soc.culture.chejudo +han.soc.culture.chollado +han.soc.culture.chungchongdo +han.soc.culture.kangwondo +han.soc.culture.kyonggido +han.soc.culture.kyongsangdo +han.soc.culture.seoul +han.soc.movements +han.soc.religion.buddhism +han.soc.religion.christianity.catholic +han.soc.religion.christianity.protestant +han.soc.religion.misc +han.talk.economy +han.test +hannet.fragen +hannet.games +hannet.general +hannet.info +hannet.ip +hannet.map +hannet.ml-info +hannet.ml.atari.gem +hannet.ml.bsdi +hannet.ml.cad.catia-l +hannet.ml.cad.proe-users +hannet.ml.cycle.hpv +hannet.ml.firewalls +hannet.ml.genesis +hannet.ml.germnews +hannet.ml.ietf +hannet.ml.linux.680x0 +hannet.ml.linux.config +hannet.ml.linux.kernel +hannet.ml.linux.linuxnews +hannet.ml.linux.net +hannet.ml.linux.new-channels +hannet.ml.linux.news +hannet.ml.linux.nrao.linux-alert +hannet.ml.linux.nrao.linux-security +hannet.ml.linux.redhat.axp +hannet.ml.linux.rutgers.linux-680x0 +hannet.ml.linux.rutgers.linux-admin +hannet.ml.linux.rutgers.linux-announce +hannet.ml.linux.rutgers.linux-bbs +hannet.ml.linux.rutgers.linux-config +hannet.ml.linux.rutgers.linux-doc +hannet.ml.linux.rutgers.linux-fido +hannet.ml.linux.rutgers.linux-ftp +hannet.ml.linux.rutgers.linux-gcc +hannet.ml.linux.rutgers.linux-kernel +hannet.ml.linux.rutgers.linux-mips +hannet.ml.linux.rutgers.linux-msdos +hannet.ml.linux.rutgers.linux-net +hannet.ml.linux.rutgers.linux-newbie +hannet.ml.linux.rutgers.linux-normal +hannet.ml.linux.rutgers.linux-ppc +hannet.ml.linux.rutgers.linux-qag +hannet.ml.linux.rutgers.linux-scsi +hannet.ml.linux.rutgers.linux-seyon +hannet.ml.linux.rutgers.linux-sound +hannet.ml.linux.rutgers.linux-svgalib +hannet.ml.linux.rutgers.linux-tape +hannet.ml.linux.rutgers.linux-uucp +hannet.ml.linux.rutgers.linux-wabi +hannet.ml.linux.rutgers.linux-x11 +hannet.ml.linux.scsi +hannet.ml.linux.slip +hannet.ml.linux.uucp +hannet.ml.linux.x11 +hannet.ml.litprog +hannet.ml.lst-erlangen +hannet.ml.mac.anf +hannet.ml.mac.think-c +hannet.ml.med.mmatrix-l +hannet.ml.medinf +hannet.ml.medinf.hl7 +hannet.ml.misc.brand-names +hannet.ml.netbsd.amiga +hannet.ml.netbsd.amiga-dev +hannet.ml.netbsd.amiga-x +hannet.ml.netbsd.current +hannet.ml.netbsd.current-users +hannet.ml.netbsd.netbsd-bugs +hannet.ml.netbsd.netbsd-help +hannet.ml.netbsd.netbsd-ports +hannet.ml.netbsd.netbsd-users +hannet.ml.netbsd.port-m68k +hannet.ml.next +hannet.ml.pci +hannet.ml.rfc +hannet.ml.sun.sunflash +hannet.ml.taylor +hannet.ml.test +hannet.ml.tex.auc-tex +hannet.ml.tex.emtex +hannet.ml.tex.tetex +hannet.ml.tex.tex-d-l +hannet.ml.text.sgml-tools +hannet.ml.ultrasound +hannet.ml.watchtower +hannet.ml.www.netscape +hannet.ml.www.squid.digest-x +hannet.statistik +hannet.test +hannet.tools.binaries +hannet.tools.d +hannet.tools.sources +hannover.allgemeines +hannover.diskussion +hannover.expo +hannover.fundgrube +hannover.funk.amateurfunk +hannover.funk.cb-funk +hannover.kino +hannover.messe +hannover.messe.cebit +hannover.messe.industrie +hannover.mhh.allgemeines +hannover.mhh.mhrz.aktuelles +hannover.mhh.mhrz.aktuelles.d +hannover.mhh.mhrz.ftp +hannover.mhh.mhrz.info +hannover.mhh.mhrz.statistik +hannover.mhh.termine +hannover.mhh.test +hannover.netze +hannover.netze.fido +hannover.netze.maus +hannover.netze.uucp +hannover.netze.z-netz +hannover.pd-info +hannover.politik +hannover.politik.diskussion +hannover.systemdaten +hannover.uni.comp +hannover.uni.comp.aix +hannover.uni.comp.dec +hannover.uni.comp.hp +hannover.uni.comp.linux +hannover.uni.comp.oracle +hannover.uni.comp.pc +hannover.uni.comp.rtos-uh +hannover.uni.comp.soft.spss +hannover.uni.comp.sun +hannover.uni.comp.sun.flash +hannover.uni.comp.sun.flash.d +hannover.uni.comp.tex +hannover.uni.comp.unix +hannover.uni.misc +hannover.uni.news +hannover.uni.rrzn.aftp +hannover.uni.rrzn.aktuelles +hannover.uni.rrzn.aktuelles.d +hannover.uni.sci +hannover.uni.studenten.netz +hannover.uni.termine +hannover.uni.test +hannover.uni.videoconf +hannover.uni.vorlesungen.kbs.informatik1 +hannover.uni.vorlesungen.kbs.informatik1.announce +hannover.uni.vorlesungen.kbs.informatik1.cafe +hannover.uni.vorlesungen.kbs.informatik1.discussion +hannover.uni.vorlesungen.kbs.ki +hannover.uni.vorlesungen.kbs.ki.announce +hannover.uni.vorlesungen.kbs.ki.cafe +hannover.uni.vorlesungen.kbs.ki.discussion +hannover.uni.vorlesungen.kbs.labor.announce +hannover.uni.vorlesungen.kbs.labor.cafe +hannover.uni.vorlesungen.kbs.labor.discussion +hannover.uni.vorlesungen.kbs.swt.announce +hannover.uni.vorlesungen.kbs.swt.cafe +hannover.uni.vorlesungen.kbs.swt.discussion +hannover.uni.www +hanse.anleitung +hanse.config +hanse.ev +hanse.flohmarkt +hanse.general +hanse.hardware +hanse.infos +hanse.internet +hanse.linux +hanse.maps +hanse.schweinske +hanse.software +hanse.test +harvard.announce.freshman +harvard.course.espp90b +harvard.course.math121 +harvard.course.phys143a +harvard.course.phys143b +harvard.course.phys15a +harvard.course.phys15b +harvard.course.phys15c +harvard.course.phys5 +harvard.course.physics11a.homework +harvard.course.physics11a.q-a +harvard.course.physics11a.suggestions +harvard.org.gsc +harvard.org.hrc +harvard.org.hub +harvard.org.indy +harvard.org.perspective +harvard.org.tangents +harvard.org.wishr +harvard.physics.sps +harvard.test +hawaii.ads.forsale +hawaii.ads.misc +hawaii.ads.wanted +hawaii.announce +hawaii.config +hawaii.education +hawaii.expatriates +hawaii.gardening +hawaii.inet-providers +hawaii.military +hawaii.misc +hawaii.politics +hawaii.sports +hawaii.test +hfx.general +hildesheim.allgemeines +hildesheim.fundgrube +hildesheim.uni.berichte +hildesheim.uni.lang.modula2 +hildesheim.uni.misc +hildesheim.uni.num-approx +hildesheim.uni.pdsoft +hildesheim.uni.pdsoft.atari-st +hildesheim.uni.rz +hildesheim.uni.rz.statistik +hildesheim.uni.test +hiss.general +hiss.local +hiss.ml.news-ak +hiss.sources +hiss.test +hk.binaries.photo.photography +hk.biz.general +hk.comp.hacker +hk.comp.os.unix +hk.comp.software +hk.jobs.recruit +hk.rec.alt-music +hk.rec.audio-visual +hk.rec.books +hk.rec.cars +hk.rec.comics +hk.rec.horse-racing +hk.rec.movies +hk.rec.music +hk.rec.music.classical +hk.rec.photo +hk.rec.scouting +hk.rec.sport.soccer +hk.rec.travel +hk.rec.videogame +hk.soc.religion.christianity +hk.talk.feelings +hk.talk.love +hk.talk.sex +houston.eats +houston.efh.talk +houston.forsale +houston.general +houston.internet.providers +houston.jobs.offered +houston.jobs.wanted +houston.music +houston.personals +houston.politics +houston.singles +houston.sports +houston.usenet.config +houston.usenet.stats +houston.usenet.test +houston.wanted +houston.weather +hsv.flame +hsv.forsale +hsv.general +hsv.jobs +hsv.politics +hsv.religion +hsv.tech +humanities.answers +humanities.classics +humanities.design.misc +humanities.language.sanskrit +humanities.lit.authors.shakespeare +humanities.misc +humanities.music.composers.wagner +humanities.philosophy.objectivism +hun.admin.news +hun.business.allas +hun.business.egyeb +hun.business.reklam +hun.comp.lang.java +hun.comp.net +hun.comp.os.os2 +hun.comp.os.solaris +hun.comp.text.tex +hun.flame +hun.general +hun.hobbi +hun.hobbi.repules +hun.internet.egyeb +hun.internet.etikett +hun.internet.policy +hun.lists.elektro +hun.lists.hix.coder +hun.lists.hix.guru +hun.lists.hix.jatek +hun.lists.hix.kornyesz +hun.lists.hix.kultura +hun.lists.hix.moka +hun.lists.hix.otthon +hun.lists.hix.randi +hun.lists.hix.sport +hun.lists.hix.tanc +hun.lists.hix.tipp +hun.lists.hix.tudomany +hun.lists.hix.vita +hun.lists.hix.webmester +hun.lists.mlf.gimp +hun.lists.mlf.hurd +hun.lists.mlf.linux +hun.lists.mlf.linux-doc +hun.lists.mlf.linux-flame +hun.lists.mlf.linux-hw +hun.lists.mlf.linux-kezdo +hun.lists.mlf.shell-l +hun.lists.mlf.unix +hun.news.neirjide +hun.nyelv +hun.org.hungarnet.egyeni-kutatok +hun.piac.comp +hun.piac.comp.keres +hun.piac.comp.kinal +hun.piac.egyeb +hun.politika +hun.test +hw.general +ia.answers +ia.comp.infosystems.misc +ia.dot.road-work +ia.flame +ia.gov.house +ia.gov.senate +ia.org.eee +ia.org.freenet +ia.talk.misc +ia.test +ia.weather +ic.orgs.shp +ie.announce +ie.checkgroups +ie.comp +ie.forsale +ie.general +ie.jobs +ie.news.group +ie.politics +ie.test +ieee.announce +ieee.bbs.help +ieee.bbs.info +ieee.ces.audio-visual +ieee.config +ieee.eab.announce +ieee.eab.general +ieee.general +ieee.pcnfs +ieee.pcs.general +ieee.pub.announce +ieee.pub.general +ieee.rab.announce +ieee.rab.general +ieee.region1 +ieee.stds.announce +ieee.stds.general +ieee.students +ieee.tab.announce +ieee.tab.general +ieee.tcos +ieee.usab.announce +ieee.usab.general +iij.announce +iij.faq +iij.general +iij.mail +iij.misc +iij.newsgroup +iij.newsletter +iij.questions +iij.requests +iij.sunflash +iij.test +iijnet.announce +iijnet.arts +iijnet.chem +iijnet.cm +iijnet.databases +iijnet.dcom +iijnet.dcom.carrier +iijnet.dcom.isdn +iijnet.dcom.modem +iijnet.diy +iijnet.event +iijnet.examination +iijnet.food +iijnet.forsale +iijnet.games +iijnet.general +iijnet.internauts +iijnet.internet +iijnet.jobs +iijnet.literature +iijnet.living +iijnet.mail +iijnet.med +iijnet.mpu +iijnet.mpu.i486 +iijnet.mpu.sparc +iijnet.multimedia +iijnet.music +iijnet.netnews +iijnet.os +iijnet.os.dosv +iijnet.os.msdos +iijnet.os.unix +iijnet.real-estate +iijnet.sci +iijnet.sports +iijnet.sys.ibm-pc +iijnet.travel +iijnet.wanted +imsi.mail.framers +imsi.mail.www-talk +imsi.mail.x.prv.fontwork +imsi.mail.x.prv.mtserver +imsi.mail.x.prv.trackers +in.bizarre +in.forsale +in.general +in.ham-radio +in.jobs +in.misc +in.pc.mac +in.test +in.unix +info.admin +info.big-internet +info.bind +info.bsdi.users +info.bytecounters +info.firearms +info.firearms.politics +info.gated +info.grass.programmer +info.grass.user +info.ietf +info.ietf.hosts +info.ietf.isoc +info.ietf.njm +info.ietf.smtp +info.isode +info.jethro-tull +info.labmgr +info.mach +info.mh.workers +info.nets +info.nsf.grants +info.nsfnet.cert +info.nsfnet.status +info.nupop +info.nysersnmp +info.ph +info.rfc +info.slug +info.snmp +info.solbourne +info.sun-managers +info.sun-nets +info.theorynt +info.unix-sw +info.wisenet +interlog.eye +is.auglysingar +is.auglysingar.atvinna +is.auglysingar.tilsolu +is.islenska +is.isnet +is.logfraedi +is.matur +is.matur.uppskriftir +is.skemmtun +is.skemmtun.bokmenntir +is.skemmtun.brandarar +is.skemmtun.hlaup +is.skemmtun.kali +is.skemmtun.kvikmyndir +is.skemmtun.sjonvarp +is.skemmtun.sport +is.skemmtun.tonlist +is.stjornmal +is.test +is.tolvur +is.tolvur.hugbunadargerd +is.tolvur.leikir +is.tolvur.leikir.kali +is.tolvur.mac +is.tolvur.pc +is.tolvur.unix +is.tolvur.vms +is.vedur +is.ymislegt +israel.ads.personals +israel.dcom.isdn +israel.food +israel.francophones +israel.gardening +israel.internet +israel.irc +israel.israel-mideast +israel.israeline +israel.jobs.misc +israel.jobs.offered +israel.jobs.resumes +israel.lists.aix-il +israel.lists.il-ads +israel.lists.il-board +israel.lists.il-fail +israel.lists.il-talk +israel.lists.ioudaios-l +israel.lists.nov-il +israel.news.admin +israel.radio.kol-israel.interbet +israel.sport.football +israel.test +it.aiuto +it.annunci.commerciali +it.annunci.contacts +it.annunci.immobiliari +it.annunci.primepagine +it.annunci.usato +it.annunci.usato.amiga +it.annunci.usato.informatico +it.annunci.usato.informatico.nord +it.annunci.usato.motociclismo +it.annunci.varie +it.arti.architettura +it.arti.ballo.lat-americano +it.arti.cartoni +it.arti.cartoni.animati +it.arti.cartoni.anime +it.arti.cartoni.mercatino +it.arti.cinema +it.arti.fantasy +it.arti.fotografia +it.arti.fotografia.digitale +it.arti.fumetti +it.arti.fumetti.bonelli +it.arti.musica +it.arti.musica.cantautori +it.arti.musica.classica +it.arti.musica.classica.mod +it.arti.musica.jazz +it.arti.musica.recensioni +it.arti.musica.rock.progressive +it.arti.musica.rockitalia +it.arti.musica.spartiti +it.arti.musica.strumenti +it.arti.musica.strumenti.chitarra +it.arti.scrivere +it.arti.teatro +it.arti.trash +it.arti.varie +it.associazioni.cri +it.associazioni.lipu +it.associazioni.pluto +it.aziende.ford +it.binari.cartoni +it.binari.emulatori +it.binari.fantascienza +it.binari.file +it.binari.visual-basic +it.binari.x.erotismo +it.binari.x.erotismo.amatoriale +it.binari.x.erotismo.animazioni +it.binari.x.erotismo.cremeria +it.binari.x.erotismo.scanseries +it.binari.x.hentai +it.comp.aiuto +it.comp.amiga +it.comp.amiga.moderato +it.comp.amiga.sviluppo +it.comp.appl.icq +it.comp.appl.macromedia +it.comp.appl.notes-domino +it.comp.as400 +it.comp.cad +it.comp.console +it.comp.console.playstation +it.comp.database +it.comp.database.access +it.comp.delphi +it.comp.demos +it.comp.dos +it.comp.emulatori +it.comp.emulatori.console.recenti +it.comp.giochi +it.comp.giochi.action +it.comp.giochi.annunci +it.comp.giochi.avventure.testuali +it.comp.giochi.mud +it.comp.giochi.pbem +it.comp.giochi.rpg +it.comp.giochi.simulatori +it.comp.giochi.simulatori.volo +it.comp.giochi.sportivi +it.comp.giochi.strategici +it.comp.grafica +it.comp.grafica.photoshop +it.comp.hardware +it.comp.hardware.cd +it.comp.hardware.cd.moderato +it.comp.hardware.cpu +it.comp.hardware.modem +it.comp.hardware.motherboard +it.comp.hardware.overclock +it.comp.hardware.palmari +it.comp.hardware.schede-audio +it.comp.hardware.scsi +it.comp.hardware.storage +it.comp.hardware.video-3d +it.comp.ia +it.comp.irc +it.comp.java +it.comp.lang.c +it.comp.lang.c++ +it.comp.lang.javascript +it.comp.lang.pascal +it.comp.lang.perl +it.comp.lang.visual-basic +it.comp.lang.vrml +it.comp.linux +it.comp.linux.annunci +it.comp.linux.development +it.comp.linux.setup +it.comp.macintosh +it.comp.musica +it.comp.musica.midi +it.comp.musica.mp3 +it.comp.os.dibattiti +it.comp.os2 +it.comp.prog +it.comp.programmare.win32 +it.comp.pubblicazioni +it.comp.recensioni +it.comp.reti.cisco +it.comp.reti.ip-admin +it.comp.reti.locali +it.comp.reti.wireless +it.comp.retrocomputing +it.comp.shareware +it.comp.sicurezza.cert-it +it.comp.sicurezza.pgp +it.comp.sicurezza.unix +it.comp.sicurezza.varie +it.comp.sicurezza.virus +it.comp.sicurezza.windows +it.comp.sist-operativi.dibattiti +it.comp.software.architettura +it.comp.software.browser +it.comp.software.eudora +it.comp.software.mailreader +it.comp.software.newsreader +it.comp.software.pegasus-mail +it.comp.tex +it.comp.unix +it.comp.win-nt +it.comp.win95 +it.comp.win95.software +it.comp.www +it.comp.www.annunci +it.comp.www.cgi +it.comp.www.homepages +it.comp.www.html +it.cultura +it.cultura.ateismo +it.cultura.cattolica +it.cultura.cybersocieta +it.cultura.fantascienza +it.cultura.fantascienza.startrek +it.cultura.filosofia +it.cultura.horror +it.cultura.letteratura.italiana +it.cultura.libri +it.cultura.linguistica.inglese +it.cultura.linguistica.italiano +it.cultura.musicologia +it.cultura.newage +it.cultura.orientale +it.cultura.proverbi +it.cultura.religioni +it.cultura.single +it.cultura.storia +it.diritto +it.diritto.assicurazioni +it.diritto.condominio +it.discussioni.abolizione-tut +it.discussioni.animali.cani +it.discussioni.animali.gatti +it.discussioni.anni80 +it.discussioni.auto +it.discussioni.censura.internet +it.discussioni.commercialisti +it.discussioni.consumatori.rete +it.discussioni.consumatori.tutela +it.discussioni.droghe +it.discussioni.folli +it.discussioni.geometri +it.discussioni.giustizia +it.discussioni.ingegneria +it.discussioni.iso9000 +it.discussioni.leggende.metropolitane +it.discussioni.litigi +it.discussioni.misteri +it.discussioni.notut +it.discussioni.pena-di-morte +it.discussioni.ristoranti +it.discussioni.sentimenti +it.discussioni.sogni +it.discussioni.telecom +it.discussioni.ufo +it.discussioni.universita +it.discussioni.universita.dottorato +it.discussioni.universita.tesi-di-laurea +it.discussioni.varie +it.economia +it.economia.analisi-tecn +it.economia.aziendale +it.economia.borsa +it.economia.fisco +it.economia.fondicomuni +it.economia.investire +it.eventi.guerrakosovo +it.fan.asimov +it.fan.carmen-consoli +it.fan.culo +it.fan.cuore +it.fan.dewdney +it.fan.elio +it.fan.er +it.fan.guccini +it.fan.lunediretta +it.fan.mai-dire-gol +it.fan.musica.baglioni +it.fan.musica.battiato +it.fan.musica.de-andre +it.fan.musica.lucio-battisti +it.fan.musica.queen +it.fan.musica.u2 +it.fan.pikappa +it.fan.r-takahashi +it.fan.radio-deejay +it.fan.sailor-moon +it.fan.simpsons +it.fan.startrek +it.fan.starwars +it.fan.stephen-king +it.fan.studio-vit +it.fan.x-files +it.faq +it.hobby.acquari +it.hobby.audiovisivi +it.hobby.birra +it.hobby.cicloturismo +it.hobby.cucina +it.hobby.elettronica +it.hobby.elettronica.riparazioni +it.hobby.enigmi +it.hobby.fai-da-te +it.hobby.fantasport +it.hobby.giardinaggio +it.hobby.giochi +it.hobby.giochi.gdr +it.hobby.hi-fi +it.hobby.hi-fi.car +it.hobby.home-cinema +it.hobby.lotto +it.hobby.modellismo +it.hobby.motociclismo +it.hobby.nautica +it.hobby.pattinaggio +it.hobby.pescare +it.hobby.radio-cb +it.hobby.radioamatori +it.hobby.satellite-tv +it.hobby.satellite-tv.digitale +it.hobby.satellite-tv.digitale.mod +it.hobby.satyra +it.hobby.scacchi +it.hobby.scuba +it.hobby.totoscommesse +it.hobby.umorismo +it.hobby.vari +it.hobby.viaggi +it.hobby.viaggi.inter-rail +it.hobby.vino +it.hobby.volo.ultraleggero +it.industria.elettrotecnica.normative +it.industria.varie +it.istruzione.formazione +it.istruzione.universita.ingegneria +it.lavoro.informatica +it.lavoro.mlm +it.lavoro.offerte +it.lavoro.prevenzione +it.lavoro.richieste +it.lavoro.sindacato +it.media.internet.disinformare +it.media.tv +it.media.tv.fantascienza +it.media.tv.mediamente +it.media.video.produzione +it.medicina +it.medicina.aids +it.medicina.alimentazione +it.medicina.allergie +it.medicina.cefalee +it.medicina.diabete +it.medicina.primosoccorso +it.medicina.tumori +it.news.aiuto +it.news.annunci +it.news.gcn +it.news.gestione +it.news.gruppi +it.news.net-abuse +it.news.votazioni +it.politica +it.politica.cattolici +it.politica.destra +it.politica.lega-nord +it.politica.libertaria +it.politica.pds +it.politica.polo +it.politica.rifondazione +it.politica.ulivo +it.reticiviche.bologna.ambiente +it.reticiviche.bologna.barzellette +it.reticiviche.bologna.bilancio98 +it.reticiviche.bologna.bolognabynight +it.reticiviche.bologna.cerco-offro +it.reticiviche.bologna.computers +it.reticiviche.bologna.cucina +it.reticiviche.bologna.cultura +it.reticiviche.bologna.cultura.cinema +it.reticiviche.bologna.cultura.libri +it.reticiviche.bologna.cultura.musica +it.reticiviche.bologna.eurocittadini +it.reticiviche.bologna.futura +it.reticiviche.bologna.iperbole +it.reticiviche.bologna.lavoro +it.reticiviche.bologna.metropoli +it.reticiviche.bologna.metropoli.atc +it.reticiviche.bologna.metropoli.comunicazione +it.reticiviche.bologna.metropoli.ferrovie +it.reticiviche.bologna.metropoli.turismo +it.reticiviche.bologna.multietnica +it.reticiviche.bologna.nuovigruppi +it.reticiviche.bologna.polemica +it.reticiviche.bologna.politica +it.reticiviche.bologna.rpg +it.reticiviche.bologna.sanita +it.reticiviche.bologna.sindacato +it.reticiviche.bologna.spettacolo +it.reticiviche.bologna.sport +it.reticiviche.bologna.test +it.reticiviche.bologna.traffico +it.reticiviche.bologna.tutelacons +it.reticiviche.bologna.universita +it.reticiviche.bologna.valsialinea-av +it.reticiviche.bologna.viaggi +it.reticiviche.discussioni +it.scienza +it.scienza.alimenti +it.scienza.ambiente +it.scienza.astronomia +it.scienza.biologia +it.scienza.fisica +it.scienza.informatica +it.scienza.informatica.software-eng +it.scienza.matematica +it.scienza.meteo +it.scienza.psicologia +it.scuola +it.scuola.informatica +it.sesso.annunci +it.sesso.discussioni +it.sesso.gnocca +it.sesso.marpionismo +it.sesso.racconti +it.sociale.handicap +it.sociale.handicap.intellettivo +it.sociale.obiezione +it.sociale.scout +it.sociale.volontariato +it.sport +it.sport.americani +it.sport.arti-marziali +it.sport.basket +it.sport.calcio +it.sport.calcio.fiorentina +it.sport.calcio.genoa +it.sport.calcio.inter +it.sport.calcio.milan +it.sport.calcio.torino +it.sport.ciclismo +it.sport.cricket +it.sport.formula1 +it.sport.montagna +it.sport.palestra +it.sport.rally +it.sport.tennis +it.sport.volley +it.sport.windsurf +it.test +it.test.mailing-list +it.test.moderato +it.tlc.cellulari +it.tlc.cellulari.motorola +it.tlc.cellulari.omnitel +it.tlc.cellulari.tim +it.tlc.policy +it.tlc.provider +it.tlc.provider.disservizi +it.tlc.telefonia +it.tlc.telefonia.infostrada +it.tlc.telefonia.isdn +it.tlc.telefonia.wind +ithaca.jobs +ithaca.marketplace +ithaca.personals +japan.actress +japan.ad.announce +japan.ad.exhibition +japan.ad.misc +japan.ad.personal +japan.ad.products +japan.admin.abuse +japan.admin.abuse.lists +japan.admin.announce +japan.admin.feed +japan.admin.feed-check +japan.admin.groups +japan.admin.lists +japan.admin.misc +japan.admin.policy +japan.aisatsu +japan.animal.cat +japan.animal.penguin +japan.anime +japan.anime.evangelion +japan.anime.evangelion.asuka +japan.anime.evangelion.ayanami +japan.anime.gundam +japan.anime.pretty +japan.app.macromedia +japan.app.postpet +japan.asia.china +japan.asia.korea +japan.audio +japan.autos.bike +japan.autos.enthu +japan.bar.loft-plus-one +japan.bbs.asciinet +japan.bbs.nifty-serve +japan.binaries.pictures.anime +japan.binaries.pictures.erotica +japan.binaries.pictures.erotica.lolita +japan.binaries.pictures.erotica.loose-socks +japan.binaries.pictures.fine-arts +japan.binaries.pictures.misc +japan.binaries.pictures.under-water +japan.books +japan.budo.judo +japan.budo.kyudo +japan.cad +japan.chacha-jokes +japan.chacha-jokes.hneta +japan.chat +japan.chat.military +japan.club.clubasia +japan.comike.chat +japan.comike.info +japan.comp +japan.comp.be +japan.comp.cd-r +japan.comp.emulators.misc +japan.comp.freebsd +japan.comp.gnu +japan.comp.hpux +japan.comp.lang.basic +japan.comp.lang.c +japan.comp.lang.javascript +japan.comp.lang.misc +japan.comp.lang.perl +japan.comp.lang.visual-basic +japan.comp.lang.visual-c++ +japan.comp.lang.vrml +japan.comp.lang.xml +japan.comp.linux +japan.comp.mac +japan.comp.mobile +japan.comp.mobile.ruputer +japan.comp.next +japan.comp.open-gl +japan.comp.os2 +japan.comp.pc98 +japan.comp.rc5-64 +japan.comp.sgi +japan.comp.sony-news +japan.comp.sun +japan.comp.sys.intel +japan.comp.sys.motorola +japan.comp.windows-nt +japan.comp.windows95 +japan.comp.windows98 +japan.comp.x11 +japan.config +japan.cooking +japan.cosplay +japan.dajare +japan.disney +japan.dtp +japan.engeki +japan.enkai +japan.enkai.yoin +japan.fan.artists.maywa-denki +japan.fan.netnews-people +japan.fan.netnews-people.void +japan.fetish.pantyhose +japan.fetish.rubber +japan.fetish.tights +japan.finance.invest +japan.fishing +japan.fishing.lure +japan.food +japan.food.rahmen +japan.food.softdrink +japan.fusigi +japan.gakkou.chuugaku +japan.gakkou.highschool +japan.games.go +japan.games.shogi +japan.gardening +japan.gegebo.food-drink +japan.guchi +japan.ham-radio +japan.ham-radio.dxcc +japan.handmade.comp +japan.handmade.electronics +japan.handmade.photo +japan.happy +japan.herbs-spices +japan.idobata.highschool.kunitachi +japan.idobata.jaist +japan.idobata.kyoto-u +japan.idobata.nagoya-u +japan.idobata.osaka-u +japan.idol +japan.idol.cona-milk +japan.idol.enomoto-kanako +japan.idol.hinagata +japan.idol.hirosue +japan.idol.johnnys +japan.idol.kato.noriko +japan.idol.male +japan.idol.max +japan.idol.mediagirls +japan.idol.mizuki +japan.idol.okina +japan.idol.sakai.noriko +japan.idol.speed +japan.idol.takahashi.yumiko +japan.idol.tomosaka +japan.idol.uchida.yuki +japan.internet.future +japan.internet.personal +japan.internet.phone +japan.internet.providers +japan.irc +japan.jiei-tai +japan.jiji +japan.kakutou-gi +japan.karaoke +japan.kissa +japan.kissa.mountain +japan.lang.english.communication +japan.lang.japanese +japan.lang.klingon +japan.lang.latina +japan.life.abroad.america +japan.life.abroad.asia +japan.life.abroad.europe +japan.life.abroad.misc +japan.life.abroad.oseania +japan.life.family +japan.life.single +japan.life.students +japan.life.sumai +japan.mail +japan.mail.mailing-lists +japan.mail.reader +japan.mail.system +japan.manga +japan.manga.fss +japan.manga.nagano-noriko +japan.mania.shota +japan.mirai-yosoku +japan.mono +japan.movies.bladerunner +japan.music +japan.music.alternative +japan.music.black +japan.music.blues +japan.music.classical +japan.music.comic-band +japan.music.compose +japan.music.dtm +japan.music.fusion +japan.music.girlpop +japan.music.girlpop.elt +japan.music.girlpop.m-kawamoto +japan.music.girlpop.moritaka +japan.music.girlpop.puffy +japan.music.guitar +japan.music.hard-rock +japan.music.heavy-metal +japan.music.house +japan.music.jazz +japan.music.komuro +japan.music.newage +japan.music.niagara +japan.music.punk +japan.music.techno +japan.music.uk-indie +japan.music.urakata +japan.naplps +japan.net.isdn +japan.net.keitai +japan.net.phs +japan.net.router +japan.net.uucp +japan.netgames.nazonazo +japan.netgames.nazonazo.d +japan.netgames.shiritori +japan.netgames.shiritori.d +japan.netnews +japan.netnews.beginners +japan.netnews.crime +japan.netnews.reader.gnus +japan.netnews.reader.mnews +japan.netnews.reader.msin +japan.netnews.reader.others +japan.netnews.reader.slrn +japan.owarai +japan.owarai.2chome +japan.pets.hamster +japan.photo.book +japan.photo.exhibition +japan.photo.www +japan.puzzle.cube +japan.puzzle.misc +japan.puzzle.slither-link +japan.q-and-a.misc +japan.q-and-a.netnews +japan.race.keiba +japan.radio +japan.radio.bcl +japan.radio.cf +japan.rail +japan.rekishi +japan.ren-ai +japan.robamimi +japan.rossia +japan.ryoko-chokin +japan.ryugaku +japan.sake +japan.sci.algorithm +japan.sci.misc +japan.sci.space +japan.security.pgp +japan.seiyu +japan.seiyu.hekiru +japan.seiyu.k-mariko +japan.sf.misc +japan.sf.perry-rohdan +japan.sf.phil-k-dick +japan.sf.tsutsui +japan.shousetsu.jidai +japan.shousetsu.suiri +japan.sigoto.d +japan.sigoto.kyu-jin +japan.sigoto.kyu-syoku +japan.sigoto.welfare +japan.soc.audit +japan.soc.aum +japan.soc.crime +japan.soc.crime.internet +japan.soc.cult +japan.soc.denjiha +japan.soc.transgender +japan.soramimi +japan.soramimi.d +japan.sports.baseball +japan.sports.baseball.baystars +japan.sports.baseball.bluewave +japan.sports.baseball.buffaloes +japan.sports.baseball.carp +japan.sports.baseball.dragons +japan.sports.baseball.fighters +japan.sports.baseball.hawks +japan.sports.baseball.lions +japan.sports.baseball.marines +japan.sports.baseball.tigers +japan.sports.bowling +japan.sports.football.association +japan.sports.kuruma.kansen +japan.sports.marine +japan.sports.prowrestling +japan.sports.scubadiving +japan.sports.ski +japan.sports.sky +japan.sports.snowboard +japan.startrek +japan.sukisuki.meganekko +japan.sukisuki.pony-tail +japan.sukisuki.yurikko +japan.sumo +japan.test +japan.tickets +japan.tmp.usage +japan.town +japan.town.akiba +japan.town.kyoto +japan.town.nara +japan.town.new-york +japan.town.oosu +japan.town.osaka +japan.town.ponbashi +japan.town.sapporo +japan.town.shinjuku +japan.travel.abroad +japan.travel.domestic +japan.trends +japan.tv +japan.tv.channel.misc +japan.tv.channel.movie +japan.tv.channel.music +japan.tv.channel.news +japan.tv.channel.sports +japan.tv.cm +japan.tv.drama +japan.tv.satellite +japan.tv.satellite.overseas +japan.tv.show.knight-scoop +japan.video.hardware +japan.video.soft +japan.videogames +japan.videogames.datsui-mahjong +japan.videogames.finalfantasy +japan.videogames.gals +japan.videogames.ibm-pc +japan.videogames.kusoge +japan.videogames.pc-fx +japan.videogames.playstation +japan.videogames.ultimaonline +japan.videogames.win95 +japan.www.browser +japan.www.browser.lynx +japan.www.browser.mozilla +japan.www.browser.msie +japan.www.design +japan.www.info-design +japan.www.proxy.squid +japan.www.server.apache +japan.www.server.cern +japan.www.server.ms-iis +japan.www.visual-design +japan.yoso +joelnet.config +junk +k12.chat.teacher +k12.ed.art +k12.ed.business +k12.ed.comp.literacy +k12.ed.health-pe +k12.ed.life-skills +k12.ed.math +k12.ed.music +k12.ed.science +k12.ed.soc-studies +k12.ed.special +k12.ed.tag +k12.ed.tech +k12.lang.art +k12.lang.deutsch-eng +k12.lang.esp-eng +k12.lang.francais +k12.lang.japanese +k12.lang.russian +k12.library +k12.sys.channel0 +k12.sys.channel1 +k12.sys.channel10 +k12.sys.channel11 +k12.sys.channel12 +k12.sys.channel2 +k12.sys.channel3 +k12.sys.channel4 +k12.sys.channel5 +k12.sys.channel6 +k12.sys.channel7 +k12.sys.channel8 +k12.sys.channel9 +k12.sys.projects +ka.comp.mac +ka.comp.misc +ka.comp.pc +ka.lauer +ka.markt.computer +ka.markt.mfg +ka.markt.misc +ka.newusers +ka.org.hadiko +ka.schwul +ka.talk +ka.uni.dial-in +ka.uni.jobs +ka.uni.rz.sp +ka.verkehr +kanto.airport.haneda +kanto.airport.narita +kanto.jokes.post +kanto.meetings.enkai +kanto.meetings.jps +kanto.misc.recycle +kanto.net.people +kanto.news.followup +kanto.news.general +kanto.news.group +kanto.news.network +kanto.rec.food +kanto.rec.misc +kanto.rec.rail +kanto.route.joban +kanto.seminar.chem-phys +kanto.test.admin +kanto.test.user +kanto.town.akihabara +kanto.town.bunkyo-ku +kanto.town.chiba +kanto.town.gunma +kanto.town.ibaraki +kanto.town.kanagawa +kanto.town.koga-city +kanto.town.misc +kanto.town.saitama +kanto.town.tochigi +kanto.town.tokyu.toyoko-line +kanto.town.tsuchiura-city +kanto.town.tsukuba +kaz.paper.kst.chance +kc.chat +kc.config +kc.forsale +kc.general +kc.jobs +kc.rail +kc.test +kc.wanted +kiel.allgemein +kiel.ascii-art +kiel.biete +kiel.computer +kiel.computer.amiga +kiel.computer.mac +kiel.computer.os2 +kiel.computer.spiele +kiel.computer.unix +kiel.computer.windows +kiel.dfue +kiel.drogen +kiel.fh +kiel.film +kiel.flame +kiel.freizeit.biken +kiel.freizeit.segeln +kiel.gruesse +kiel.hilfe +kiel.infos +kiel.kommerz +kiel.kommerz.d +kiel.literatur +kiel.mailbox.advocacy +kiel.musik +kiel.rollenspiele +kiel.sport +kiel.suche +kiel.sysop +kiel.sysop.cancelmsgs +kiel.sysop.robots +kiel.szene +kiel.talk.bizarre +kiel.talk.politik +kiel.test +kiel.umwelt +kiel.uni +kiel.verkehr +kingston.bbs.fido.users249 +ks.admin +ks.misc +kw.ads.business +kw.ads.events +kw.config +kw.eats +kw.events +kw.forsale +kw.general +kw.housing +kw.jobs +kw.networks +kw.news.stats +kw.reviews +kwnet.general +kwnet.ops +kwnet.tech +ky.motorcycles +ky.weather +ky.weather.d +la.config +la.eats +la.forsale +la.general +la.jobs +la.media +la.news +la.personals +la.seminars +la.test +la.transportation +la.wanted +laf.forsale +latech.stis +law.court.federal +law.listserv.election-law +law.school.anti-trust +law.school.antitrust +law.school.clinic.info-law +law.school.corps +law.school.gradtax.partner +law.school.gradtax.s-corp +law.school.legal-prof +law.school.tax.busiplan +li.events +li.forsale +li.jobs +li.misc +li.politics +li.wanted +linet.misc +list.tpc-rp +lon.misc +lon.test +lou.config +lou.general +lou.lft.config +lou.lft.forsale +lou.lft.general +lou.lft.jobs +lou.sun +ls.amnesty +ls.olnews +ls.ussr +mail.cypherpunks +malta.announce +malta.config +malta.fan.trekwho +malta.news.admin +malta.test +maus.computer.amiga +maus.computer.archimedes +maus.computer.atari.dtp +maus.computer.atari.falcon +maus.computer.atari.gemini +maus.computer.atari.hardware +maus.computer.atari.internet +maus.computer.atari.mint_mtos +maus.computer.atari.software +maus.computer.atari.spiele +maus.computer.atari.talk +maus.computer.beos +maus.computer.emulatoren +maus.computer.groupware-syst +maus.computer.hardware +maus.computer.hardware.dsp +maus.computer.linux +maus.computer.linux.m68k +maus.computer.mac.allgemeines +maus.computer.mac.emulatoren +maus.computer.mac.hardware +maus.computer.mac.kommunikation +maus.computer.mac.programmieren +maus.computer.mac.software +maus.computer.mac.spiele +maus.computer.os2 +maus.computer.os2.programmierung +maus.computer.os2.setup +maus.computer.os2.talk +maus.computer.pc.ibm +maus.computer.ql.c +maus.computer.ql.de +maus.computer.ql.intl +maus.computer.sicherheit.virus +maus.computer.software.compiler +maus.computer.software.medusa +maus.computer.software.udo +maus.computer.sprache.c +maus.computer.sprache.modula-2 +maus.computer.sprache.oberon +maus.computer.sprache.oops +maus.computer.transputer +maus.computer.unix +maus.freizeit.bigfood +maus.freizeit.f+sf +maus.freizeit.fernweh +maus.freizeit.kino +maus.freizeit.kites +maus.freizeit.wandern +maus.info +maus.info.diskussion +maus.kreativ.handarbeiten +maus.kultur.literatur.buecher +maus.kultur.literatur.comics +maus.markt.biete +maus.markt.biete.diskussion +maus.markt.suche +maus.markt.suche.diskussion +maus.net.gate +maus.regional.bremen +maus.regional.oecher +maus.sciencefiction.babylon5 +maus.soziales.handicap +maus.soziales.handicap.talk +maus.soziales.pflege +maus.soziales.politik +maus.soziales.recht +maus.soziales.schuelerakadem +maus.spiele.computerspiele +maus.spiele.netzspiele.allgemein +maus.spiele.planets +maus.spiele.rollenspiele +maus.spiele.schach +maus.talk.english +maus.talk.francais +maus.talk.landrock +maus.tausch.okami +maus.technik.amateurfunk +maus.technik.elektronik +maus.technik.foto+film +maus.technik.gps +maus.technik.laserdiscs +maus.technik.midi +maus.wirtschaft.finanzen +maus.wissenschaft.astronomie +maus.wissenschaft.fernuni +maus.wissenschaft.genealogie +maus.wissenschaft.geographie +maus.wissenschaft.informatik +maus.wissenschaft.mathematik +maus.wissenschaft.medizin +mcgill.general +mcmaster.announce +mcmaster.artsci.announce +mcmaster.artsci.talk +mcmaster.buysell +mcmaster.comp.xwindows +mcmaster.conduct +mcmaster.courses.coe4hf3 +mcmaster.courses.coe4ma3 +mcmaster.courses.cs2mf3 +mcmaster.courses.cs2mj3 +mcmaster.courses.cs2sb3 +mcmaster.courses.econ4a03 +mcmaster.courses.econ789 +mcmaster.courses.geog4cc3 +mcmaster.courses.kin1b06 +mcmaster.courses.kin2b06 +mcmaster.courses.phys1bb3 +mcmaster.courses.pol2e6 +mcmaster.courses.psych3fb3 +mcmaster.courses.sci4j3 +mcmaster.courses.soc206 +mcmaster.fhs.med.news +mcmaster.fhs.med.social +mcmaster.grad +mcmaster.msu.clubs.computer +mcmaster.msu.clubs.magic +mcmaster.netserv.gopher +mcmaster.news.config +mcmaster.newuser +mcmaster.science.announce +mcmaster.science.talk +mcmaster.services.network.modempool +mcmaster.talk.pagic +mcmaster.talk.soapbox +mcmaster.test +mcnc.cad +mcnc.concert.video +mcnc.dcom +mcnc.general +mcnc.ncsulab +mcnc.pc +mcnc.programmers +mcnc.systems +mcnc.talks +mcnc.teleclass +mcnc.text +md.annapolis +md.announcements +md.config +md.eastern-shore +md.forsale +md.general +md.jobs +md.mont +md.personals +md.pg +md.pg.tricentennial +md.politics +md.test +me.communities.biddeford +me.communities.can +me.communities.portland +me.communities.yarmouth +me.config +me.forsale +me.general +me.internet +me.jobs +me.politics +medlux.dept.docs +medlux.dept.lic +medlux.dept.qual.doc +medlux.doc.acc +medlux.doc.apt +medlux.doc.ministry +medlux.doc.mos +medlux.doc.rus +medlux.doc.spb +medlux.drugs.reg +medlux.drugs.safety +medlux.fido.ru.baby.medic +medlux.fido.ru.medic.profy +medlux.fido.su.medic +medlux.firmhist +medlux.health +medlux.journal.cg +medlux.journal.top +medlux.journal.umo.science +medlux.journal.umo.z +medlux.journal.vit +medlux.medsci.anes +medlux.medsci.cardiol +medlux.medsci.contents +medlux.medsci.dent +medlux.medsci.dermatol +medlux.medsci.diag +medlux.medsci.endocrin +medlux.medsci.gastroent +medlux.medsci.gyn +medlux.medsci.hematol +medlux.medsci.homoeopathy +medlux.medsci.immunol +medlux.medsci.inform +medlux.medsci.neurol +medlux.medsci.oncology +medlux.medsci.ophthalm +medlux.medsci.orthopaedics +medlux.medsci.pediatr +medlux.medsci.pharmacol +medlux.medsci.pulmonol +medlux.medsci.san-hyg +medlux.medsci.surg +medlux.medsci.talk +medlux.medsci.therapy +medlux.medsci.urol +medlux.medsci.z +medlux.mfy.exhibitions +medlux.mfy.expo +medlux.mfy.public +medlux.misc.advert +medlux.misc.gossips +medlux.misc.jobs +medlux.newspaper.szs +medlux.newusers +medlux.postmasters +medlux.request +medlux.test +medlux.trade.cosm +medlux.trade.dent +medlux.trade.drugs +medlux.trade.herb +medlux.trade.lab +medlux.trade.mtechn +medlux.trade.optika +medlux.trade.rubber +medlux.trade.service +memphis.dining +memphis.employment +memphis.events +memphis.for-sale +memphis.general +memphis.mecca +memphis.networking +memphis.newsgroups +memphis.test +memphis.wanted +mensa.au.announce +mensa.au.events +mensa.config +mensa.de.announce +mensa.de.events +mensa.sigs.giftedchildren +mensa.talk.misc +mensa.uk.announce +mensa.uk.events +mensa.us.announce +mensa.us.events +mentorg.admin.hints +mercury.general +mex.artes +mex.artes.musica +mex.ciencia +mex.comp +mex.deportes +mex.edu +mex.empresarial +mex.general +mex.general.anuncios +mex.general.charla +mex.indigena +mex.joven +mex.noticias +mex.noticias.disc +mex.politica +mex.productividad +mex.rec +mex.rec.chistes +mex.red +mex.tradiciones +mex.tradiciones.cocina +mex.turismo +mi.jobs +mi.map +mi.misc +mi.news +mi.sources +mi.sun +mi.wanted +miami.general +microsoft.beta.iis4.ftp +microsoft.beta.iis4.mmc +microsoft.beta.iis4.msmq +microsoft.beta.iis4.remotesvc +microsoft.public.access.3rdpartyusrgrp +microsoft.public.access.activexcontrol +microsoft.public.access.chat +microsoft.public.access.commandbarsui +microsoft.public.access.conversion +microsoft.public.access.devtoolkits +microsoft.public.access.externaldata +microsoft.public.access.forms +microsoft.public.access.formscoding +microsoft.public.access.gettingstarted +microsoft.public.access.internet +microsoft.public.access.interopoledde +microsoft.public.access.macros +microsoft.public.access.modulesdaovba +microsoft.public.access.multiuser +microsoft.public.access.odbcclientsvr +microsoft.public.access.queries +microsoft.public.access.replication +microsoft.public.access.reports +microsoft.public.access.security +microsoft.public.access.setupconfig +microsoft.public.access.tablesdbdesign +microsoft.public.accessibility.axa +microsoft.public.accessibility.developer +microsoft.public.accessibility.ieaccess +microsoft.public.accessibility.issues +microsoft.public.active.directory.interfaces +microsoft.public.activex.controls.chatcontrol +microsoft.public.activex.programming.control.webdc +microsoft.public.activex.programming.control.webwiz +microsoft.public.activex.programming.java.afc +microsoft.public.activex.programming.java.cab +microsoft.public.activex.programming.java.sdk +microsoft.public.activex.programming.java.visualj +microsoft.public.activex.programming.java.vm +microsoft.public.adc +microsoft.public.adcbeta +microsoft.public.ado +microsoft.public.ado.wincebeta +microsoft.public.automap +microsoft.public.basic.dos +microsoft.public.basic.other +microsoft.public.bookshelf +microsoft.public.br.ie30 +microsoft.public.carpoint +microsoft.public.catapult.beta +microsoft.public.cinemania +microsoft.public.cn.inetexplorer.ie5beta +microsoft.public.consumer.products +microsoft.public.cryptoapi +microsoft.public.cs.ie30 +microsoft.public.cts +microsoft.public.de.access +microsoft.public.de.excel +microsoft.public.de.exchange +microsoft.public.de.flugsimulator +microsoft.public.de.fox +microsoft.public.de.frontpage +microsoft.public.de.german.frontpage98 +microsoft.public.de.german.ie30 +microsoft.public.de.german.ie40 +microsoft.public.de.german.ie40.outlookexpress +microsoft.public.de.german.ie40.win3 +microsoft.public.de.german.siteserver +microsoft.public.de.german.siteserver.commerce +microsoft.public.de.german.win95 +microsoft.public.de.german.windowsce +microsoft.public.de.inetexplorer.ie4 +microsoft.public.de.inetserver.iis +microsoft.public.de.outlook +microsoft.public.de.project +microsoft.public.de.sms +microsoft.public.de.snaserver +microsoft.public.de.sqlserver +microsoft.public.de.vb +microsoft.public.de.vc +microsoft.public.de.windowsnt.server +microsoft.public.de.windowsnt.workstation +microsoft.public.de.word +microsoft.public.directx +microsoft.public.dxmanimation +microsoft.public.el.ie30 +microsoft.public.el.ie4 +microsoft.public.encarta +microsoft.public.es.amigosie +microsoft.public.es.desarrollo +microsoft.public.es.espanol.soporte.entre.usuarios.exchange +microsoft.public.es.espanol.soporte.entre.usuarios.internet +microsoft.public.es.espanol.soporte.entre.usuarios.office97 +microsoft.public.es.espanol.soporte.entre.usuarios.windows95 +microsoft.public.es.ie30 +microsoft.public.es.isp +microsoft.public.es.java +microsoft.public.es.office97 +microsoft.public.es.vb +microsoft.public.es.vc +microsoft.public.es.vfoxpro +microsoft.public.es.vfoxpro.controles +microsoft.public.es.vfoxpro.lenguaje +microsoft.public.es.webmasters +microsoft.public.es.windows95 +microsoft.public.es.windowsnt +microsoft.public.excel.123quattro +microsoft.public.excel.charting +microsoft.public.excel.crashesgpfs +microsoft.public.excel.datamap +microsoft.public.excel.interopoledde +microsoft.public.excel.links +microsoft.public.excel.macintosh +microsoft.public.excel.misc +microsoft.public.excel.printing +microsoft.public.excel.programming +microsoft.public.excel.querydao +microsoft.public.excel.sdk +microsoft.public.excel.setup +microsoft.public.excel.templates +microsoft.public.exchange.admin +microsoft.public.exchange.applications +microsoft.public.exchange.clients +microsoft.public.exchange.connectivity +microsoft.public.exchange.misc +microsoft.public.exchange.setup +microsoft.public.fortran +microsoft.public.fox.3rdparty +microsoft.public.fox.books +microsoft.public.fox.chatter +microsoft.public.fox.events +microsoft.public.fox.fox2x.browse +microsoft.public.fox.fox2x.language-menus +microsoft.public.fox.fox2x.lck-api +microsoft.public.fox.fox2x.mac-specific +microsoft.public.fox.fox2x.queries-sql +microsoft.public.fox.fox2x.screens +microsoft.public.fox.fox2x.xplat +microsoft.public.fox.helpwanted +microsoft.public.fox.internet +microsoft.public.fox.programmer.exchange +microsoft.public.fox.vfp.dbc +microsoft.public.fox.vfp.forms +microsoft.public.fox.vfp.grids +microsoft.public.fox.vfp.language-menus +microsoft.public.fox.vfp.lck-api +microsoft.public.fox.vfp.mac-specific +microsoft.public.fox.vfp.oop +microsoft.public.fox.vfp.queries-sql +microsoft.public.fox.vfp.web +microsoft.public.fox.vfp.xplat +microsoft.public.fr.ageofempire +microsoft.public.fr.frontpage +microsoft.public.fr.ie30 +microsoft.public.fr.inetexplorer.ie5beta +microsoft.public.fr.start.actualite +microsoft.public.fr.start.culture +microsoft.public.fr.start.education +microsoft.public.fr.start.entreprises +microsoft.public.fr.start.finances +microsoft.public.fr.start.informatique +microsoft.public.fr.start.jeux +microsoft.public.fr.start.loisirs +microsoft.public.fr.start.societe +microsoft.public.fr.start.sports +microsoft.public.fr.start.voyages +microsoft.public.fr.windows95 +microsoft.public.frontpage.client +microsoft.public.frontpage.extensions.unix +microsoft.public.frontpage.extensions.windowsnt +microsoft.public.frontpage.mac +microsoft.public.frontpage98.eval +microsoft.public.games +microsoft.public.games.discussion +microsoft.public.games.zone +microsoft.public.games.zone.action +microsoft.public.games.zone.beta +microsoft.public.games.zone.board +microsoft.public.games.zone.card +microsoft.public.games.zone.fighterace.wishes +microsoft.public.games.zone.mindaerobics +microsoft.public.games.zone.role_playing +microsoft.public.games.zone.simulation +microsoft.public.games.zone.sport +microsoft.public.games.zone.strategy +microsoft.public.games.zone.ultracorps +microsoft.public.games.zone.zonelan +microsoft.public.gifanimator.discussion +microsoft.public.hu.ie30 +microsoft.public.iis4.beta.administration +microsoft.public.iis4.beta.certificatesvr +microsoft.public.iis4.beta.database +microsoft.public.iis4.beta.frontpageextns +microsoft.public.iis4.beta.ftp +microsoft.public.iis4.beta.general +microsoft.public.iis4.beta.indexserver20 +microsoft.public.iis4.beta.internetras +microsoft.public.iis4.beta.mcis +microsoft.public.iis4.beta.mmc +microsoft.public.iis4.beta.msmq +microsoft.public.iis4.beta.nntpserver +microsoft.public.iis4.beta.remotesvc +microsoft.public.iis4.beta.setup +microsoft.public.iis4.beta.smtpserver +microsoft.public.iis4.beta.tools +microsoft.public.iis4.beta.transactionsvr +microsoft.public.iis4.beta.webpost +microsoft.public.il.hebrew.excel +microsoft.public.il.hebrew.exchange +microsoft.public.il.hebrew.fun +microsoft.public.il.hebrew.groupware +microsoft.public.il.hebrew.ie3 +microsoft.public.il.hebrew.ie4 +microsoft.public.il.hebrew.iis +microsoft.public.il.hebrew.mcse +microsoft.public.il.hebrew.ntserver +microsoft.public.il.hebrew.ntworkstation +microsoft.public.il.hebrew.powerpoint +microsoft.public.il.hebrew.proxyserver +microsoft.public.il.hebrew.sbs +microsoft.public.il.hebrew.sql7 +microsoft.public.il.hebrew.sqlserver +microsoft.public.il.hebrew.vb +microsoft.public.il.hebrew.vc +microsoft.public.il.hebrew.vfoxpro +microsoft.public.il.hebrew.win95 +microsoft.public.il.hebrew.win98 +microsoft.public.il.hebrew.word +microsoft.public.il.israeli.sitebuilder +microsoft.public.imagecomposer.discussion +microsoft.public.industry.accounting +microsoft.public.industry.banking.wosa-xfs +microsoft.public.industry.health +microsoft.public.industry.insurance +microsoft.public.industry.manufacturing +microsoft.public.industry.retailpos +microsoft.public.inetexplorer.ie3 +microsoft.public.inetexplorer.ie4 +microsoft.public.inetexplorer.ie4.active_desktop +microsoft.public.inetexplorer.ie4.activex_contrl +microsoft.public.inetexplorer.ie4.announcements +microsoft.public.inetexplorer.ie4.app_compat +microsoft.public.inetexplorer.ie4.browser +microsoft.public.inetexplorer.ie4.connect_wizard +microsoft.public.inetexplorer.ie4.docs_help +microsoft.public.inetexplorer.ie4.favorites +microsoft.public.inetexplorer.ie4.feedback +microsoft.public.inetexplorer.ie4.frontpad +microsoft.public.inetexplorer.ie4.java_applets +microsoft.public.inetexplorer.ie4.mschat +microsoft.public.inetexplorer.ie4.multimedia_con +microsoft.public.inetexplorer.ie4.netmeeting +microsoft.public.inetexplorer.ie4.outlookexpress +microsoft.public.inetexplorer.ie4.printing +microsoft.public.inetexplorer.ie4.scripting +microsoft.public.inetexplorer.ie4.setup +microsoft.public.inetexplorer.ie4.shell +microsoft.public.inetexplorer.ie4.taskscheduler +microsoft.public.inetexplorer.ie4.web_delivery +microsoft.public.inetexplorer.ie4.web_publishing +microsoft.public.inetexplorer.ie4.web_server +microsoft.public.inetexplorer.ie5beta.add_ons +microsoft.public.inetexplorer.ie5beta.browser +microsoft.public.inetexplorer.ie5beta.info_delivery +microsoft.public.inetexplorer.ie5beta.netmeetingchat +microsoft.public.inetexplorer.ie5beta.onlineservices +microsoft.public.inetexplorer.ie5beta.outlookexpress +microsoft.public.inetexplorer.ie5beta.programming.active_desktop +microsoft.public.inetexplorer.ie5beta.programming.activexcontrol +microsoft.public.inetexplorer.ie5beta.programming.codedownload +microsoft.public.inetexplorer.ie5beta.programming.components.dhtml_editing +microsoft.public.inetexplorer.ie5beta.programming.components.webbrowser_ctl +microsoft.public.inetexplorer.ie5beta.programming.data_access +microsoft.public.inetexplorer.ie5beta.programming.dhtml.authoring +microsoft.public.inetexplorer.ie5beta.programming.dhtml.behaviors +microsoft.public.inetexplorer.ie5beta.programming.dhtml.scripting +microsoft.public.inetexplorer.ie5beta.programming.dhtml.scriptlets +microsoft.public.inetexplorer.ie5beta.programming.misc +microsoft.public.inetexplorer.ie5beta.programming.multimedia +microsoft.public.inetexplorer.ie5beta.programming.offline +microsoft.public.inetexplorer.ie5beta.programming.sbnworkshop +microsoft.public.inetexplorer.ie5beta.programming.urlmonikers +microsoft.public.inetexplorer.ie5beta.programming.wininet +microsoft.public.inetexplorer.ie5beta.programming.xml +microsoft.public.inetexplorer.ie5beta.setup +microsoft.public.inetexplorer.ie5beta.shell +microsoft.public.inetexplorer.win3 +microsoft.public.inetsdk.announcements +microsoft.public.inetsdk.control_pad +microsoft.public.inetsdk.doc_errors +microsoft.public.inetsdk.html_authoring +microsoft.public.inetsdk.programming.active_desktop +microsoft.public.inetsdk.programming.active_scrptng +microsoft.public.inetsdk.programming.comctl32 +microsoft.public.inetsdk.programming.components.design_time +microsoft.public.inetsdk.programming.components.dev +microsoft.public.inetsdk.programming.components.packaging +microsoft.public.inetsdk.programming.components.usage +microsoft.public.inetsdk.programming.data_awareness +microsoft.public.inetsdk.programming.dhtml_editing +microsoft.public.inetsdk.programming.docobjects +microsoft.public.inetsdk.programming.html_objmodel +microsoft.public.inetsdk.programming.info_delivery +microsoft.public.inetsdk.programming.mshtml_hosting +microsoft.public.inetsdk.programming.mstask +microsoft.public.inetsdk.programming.multimedia +microsoft.public.inetsdk.programming.scripting.jscript +microsoft.public.inetsdk.programming.scripting.vbscript +microsoft.public.inetsdk.programming.urlmonikers +microsoft.public.inetsdk.programming.wininet +microsoft.public.inetsdk.sdk_setup +microsoft.public.inetserver.dbweb +microsoft.public.inetserver.iis +microsoft.public.inetserver.iis.tripoli +microsoft.public.inetserver.misc +microsoft.public.internet.cm_cmak +microsoft.public.internet.cps +microsoft.public.internet.mail +microsoft.public.internet.mail.mac +microsoft.public.internet.mschat +microsoft.public.internet.netmeeting +microsoft.public.internet.netmeeting.beta +microsoft.public.internet.news +microsoft.public.internet.news.mac +microsoft.public.internet.radius +microsoft.public.investor +microsoft.public.investor40.beta +microsoft.public.it.ie30 +microsoft.public.it.win98.beta +microsoft.public.ja.inetexplorer.ie5beta +microsoft.public.java.activex +microsoft.public.java.afc +microsoft.public.java.cab +microsoft.public.java.directxj +microsoft.public.java.macvm +microsoft.public.java.sdk +microsoft.public.java.security +microsoft.public.java.visualj++ +microsoft.public.java.visualj++.techpreview +microsoft.public.java.visualj++.techpreview.debugger +microsoft.public.java.visualj++.techpreview.installation +microsoft.public.java.visualj++.techpreview.wfc +microsoft.public.java.vm +microsoft.public.java.win16vm +microsoft.public.jp.activex +microsoft.public.jp.frontpage +microsoft.public.jp.ie30 +microsoft.public.jp.ie40 +microsoft.public.jp.ie40.mac +microsoft.public.jp.ie40.win31 +microsoft.public.jp.vinterdev +microsoft.public.jp.visualj +microsoft.public.kids +microsoft.public.knowledgemgmt +microsoft.public.ko.ie30 +microsoft.public.ko.ie40 +microsoft.public.ko.ie40.beta +microsoft.public.ko.inetexplorer.ie5beta +microsoft.public.kr.win98beta.qna +microsoft.public.kr.winntsrv.qna +microsoft.public.kr.winntwks.qna +microsoft.public.liquidmotion +microsoft.public.liquidmotion.beta +microsoft.public.mail.admin +microsoft.public.mail.connectivity +microsoft.public.mail.misc +microsoft.public.management.mmc +microsoft.public.masm +microsoft.public.mcis.addressbook +microsoft.public.mcis.announcements +microsoft.public.mcis.beta.crs.sdk +microsoft.public.mcis.beta.webmapper.issues +microsoft.public.mcis.chatserver +microsoft.public.mcis.crs +microsoft.public.mcis.locatorserver +microsoft.public.mcis.mailserver +microsoft.public.mcis.membership +microsoft.public.mcis.mps +microsoft.public.mcis.newserver +microsoft.public.mcis.suggestions +microsoft.public.mdac +microsoft.public.mediamanager.discussion +microsoft.public.merchantserver +microsoft.public.messaging.misc +microsoft.public.mifst.client +microsoft.public.mifst.gateway +microsoft.public.money +microsoft.public.msagent +microsoft.public.msdn.general +microsoft.public.msdn.general.subscriber.downloads +microsoft.public.msdn.win98.beta.unmonitored.discussion +microsoft.public.msinvester +microsoft.public.msn.discussion +microsoft.public.msn.netnews.discussion +microsoft.public.multimedia.beta.mediaplayer +microsoft.public.music.products +microsoft.public.musicproducer.discussion +microsoft.public.netiquette +microsoft.public.netshow.live +microsoft.public.netshow.ondemand +microsoft.public.news.server.lists +microsoft.public.nl.ie30 +microsoft.public.nordic.ie30 +microsoft.public.nordic.win98.beta +microsoft.public.odbc.sdk +microsoft.public.ofc +microsoft.public.office.binders +microsoft.public.office.misc +microsoft.public.office.setup +microsoft.public.office.shortcutbar +microsoft.public.officedev +microsoft.public.oledb +microsoft.public.oledb.olap +microsoft.public.oledb.providers +microsoft.public.oledb.sdk +microsoft.public.oledb.specification +microsoft.public.oleds.beta +microsoft.public.outlook +microsoft.public.outlook.addin_utility +microsoft.public.outlook.configuration +microsoft.public.outlook.environment +microsoft.public.outlook.imep +microsoft.public.outlook.installation +microsoft.public.outlook.interop +microsoft.public.outlook.migration +microsoft.public.outlook.printing +microsoft.public.outlook.program_forms +microsoft.public.outlook.usage +microsoft.public.pictureit +microsoft.public.pl.ie30 +microsoft.public.pl.ie4 +microsoft.public.plus +microsoft.public.powerpoint +microsoft.public.powerpoint.mac +microsoft.public.pptp95.beta.discussion +microsoft.public.project +microsoft.public.proxy +microsoft.public.pt.ie30 +microsoft.public.publisher +microsoft.public.publisher.webdesign +microsoft.public.repository +microsoft.public.ru.ie30 +microsoft.public.ru.ie40 +microsoft.public.ru.outlook +microsoft.public.sbs.pre-rel.general +microsoft.public.schedule+ +microsoft.public.scripting.debugger +microsoft.public.scripting.hosting +microsoft.public.scripting.jscript +microsoft.public.scripting.remote +microsoft.public.scripting.scriptlets +microsoft.public.scripting.vbscript +microsoft.public.scripting.wsh +microsoft.public.simulators +microsoft.public.site-server.postingacceptr +microsoft.public.site-server.site-mgmt +microsoft.public.site-server.webpost +microsoft.public.siteserver.analysis +microsoft.public.siteserver.commerce +microsoft.public.siteserver.css +microsoft.public.siteserver.general +microsoft.public.siteserver.knowledgemgr +microsoft.public.siteserver.per-mbr +microsoft.public.siteserver.publishing +microsoft.public.siteserver.push +microsoft.public.siteserver.sdk +microsoft.public.siteserver.search +microsoft.public.sl.ie30 +microsoft.public.smallbiz.sbsisp +microsoft.public.sms.admin +microsoft.public.sms.inventory +microsoft.public.sms.misc +microsoft.public.sms.netmon +microsoft.public.sms.rcdiags +microsoft.public.sms.setup +microsoft.public.sms.sharedapps +microsoft.public.sms.sitecomm +microsoft.public.sms.swdist +microsoft.public.sms.tools +microsoft.public.snaserver.administration +microsoft.public.snaserver.aftp +microsoft.public.snaserver.applets +microsoft.public.snaserver.client.unix +microsoft.public.snaserver.misc +microsoft.public.snaserver.odbcdrda +microsoft.public.snaserver.programming.lu62 +microsoft.public.snaserver.programming.lua +microsoft.public.snaserver.programming.other +microsoft.public.snaserver.setup.as400 +microsoft.public.snaserver.setup.client +microsoft.public.snaserver.setup.host +microsoft.public.snaserver.setup.other +microsoft.public.snaserver.snaras +microsoft.public.snaserver.thirdparty +microsoft.public.snaserver.tn3270 +microsoft.public.speech_tech +microsoft.public.speech_tech.sdk +microsoft.public.sqlserver.connect +microsoft.public.sqlserver.odbc +microsoft.public.sqlserver.programming +microsoft.public.sqlserver.replication +microsoft.public.sqlserver.server +microsoft.public.sqlserver.workshop +microsoft.public.teammanager +microsoft.public.technet +microsoft.public.tr.ie30 +microsoft.public.tw.ie30 +microsoft.public.tw.ie40 +microsoft.public.tw.inetexplorer.ie5beta +microsoft.public.usageanalyst +microsoft.public.usasalesinfo.backoffice +microsoft.public.usasalesinfo.developer.access +microsoft.public.usasalesinfo.developer.foxpro +microsoft.public.usasalesinfo.developer.internet +microsoft.public.usasalesinfo.developer.multimedia +microsoft.public.usasalesinfo.developer.sdk-ddk +microsoft.public.usasalesinfo.developer.visualbasic +microsoft.public.usasalesinfo.developer.visualc++ +microsoft.public.usasalesinfo.developer.visualtools +microsoft.public.usasalesinfo.exchange +microsoft.public.usasalesinfo.internetserver +microsoft.public.usasalesinfo.msmail +microsoft.public.usasalesinfo.ntserver +microsoft.public.usasalesinfo.sna-sms +microsoft.public.usasalesinfo.sqlserver +microsoft.public.vb.3rdparty +microsoft.public.vb.addins +microsoft.public.vb.bugs +microsoft.public.vb.controls +microsoft.public.vb.controls.creation +microsoft.public.vb.controls.databound +microsoft.public.vb.controls.internet +microsoft.public.vb.crystal +microsoft.public.vb.database +microsoft.public.vb.database.dao +microsoft.public.vb.database.odbc +microsoft.public.vb.database.rdo +microsoft.public.vb.dos +microsoft.public.vb.enterprise +microsoft.public.vb.general.discussion +microsoft.public.vb.installation +microsoft.public.vb.ole +microsoft.public.vb.ole.automation +microsoft.public.vb.ole.cdk +microsoft.public.vb.ole.servers +microsoft.public.vb.setupwiz +microsoft.public.vb.syntax +microsoft.public.vb.vbce +microsoft.public.vb.visual_modeler +microsoft.public.vb.winapi +microsoft.public.vb.winapi.graphics +microsoft.public.vb.winapi.networks +microsoft.public.vc.database +microsoft.public.vc.debugger +microsoft.public.vc.etk +microsoft.public.vc.events +microsoft.public.vc.language +microsoft.public.vc.language.macintosh +microsoft.public.vc.mfc +microsoft.public.vc.mfc.docview +microsoft.public.vc.mfc.macintosh +microsoft.public.vc.mfcole +microsoft.public.vc.stl +microsoft.public.vc.utilities +microsoft.public.vc.vcce +microsoft.public.vchat +microsoft.public.vinterdev.beta98 +microsoft.public.vision_tech.sdk +microsoft.public.visualj.com-support +microsoft.public.visualj.compiler +microsoft.public.visualj.debugger +microsoft.public.visualj.discussion +microsoft.public.visualj.installation +microsoft.public.visualj.misc-tools +microsoft.public.visualtest +microsoft.public.wallet.discussion +microsoft.public.wbem +microsoft.public.win16.programmer.gdi +microsoft.public.win16.programmer.kernel +microsoft.public.win16.programmer.networks +microsoft.public.win16.programmer.pen +microsoft.public.win16.programmer.tools +microsoft.public.win16.programmer.ui +microsoft.public.win32.programmer.gdi +microsoft.public.win32.programmer.installwizard.beta +microsoft.public.win32.programmer.international +microsoft.public.win32.programmer.kernel +microsoft.public.win32.programmer.mapi +microsoft.public.win32.programmer.mmedia +microsoft.public.win32.programmer.networks +microsoft.public.win32.programmer.ole +microsoft.public.win32.programmer.pen +microsoft.public.win32.programmer.tapi +microsoft.public.win32.programmer.tapi.beta +microsoft.public.win32.programmer.tools +microsoft.public.win32.programmer.ui +microsoft.public.win32.programmer.wince +microsoft.public.win3x_wfw_dos +microsoft.public.win95.coffeehouse.chat +microsoft.public.win95.commtelephony +microsoft.public.win95.exchangefax +microsoft.public.win95.msdosapps +microsoft.public.win95.multimedia +microsoft.public.win95.networking +microsoft.public.win95.setup +microsoft.public.win95.shellui +microsoft.public.win95.win95applets +microsoft.public.windows95.oemdsp.preinstall +microsoft.public.windowsce +microsoft.public.windowsce.developer.betas +microsoft.public.windowsce.developer.embedded.beta +microsoft.public.windowsdnafs.discussion +microsoft.public.windowsnt.apps +microsoft.public.windowsnt.dfs +microsoft.public.windowsnt.dns +microsoft.public.windowsnt.domain +microsoft.public.windowsnt.dsmnfpnw +microsoft.public.windowsnt.fsft +microsoft.public.windowsnt.mac +microsoft.public.windowsnt.mail +microsoft.public.windowsnt.misc +microsoft.public.windowsnt.oemdsp.preinstall +microsoft.public.windowsnt.personalfax +microsoft.public.windowsnt.print +microsoft.public.windowsnt.protocol.ipx +microsoft.public.windowsnt.protocol.misc +microsoft.public.windowsnt.protocol.ras +microsoft.public.windowsnt.protocol.tcpip +microsoft.public.windowsnt.setup +microsoft.public.windowsnt.steelhead +microsoft.public.windowsnt.wolfpack +microsoft.public.windowsnt.wolfpack.sdk +microsoft.public.winnt50.beta.administration +microsoft.public.winnt50.beta.applications +microsoft.public.winnt50.beta.dial_up.networking +microsoft.public.winnt50.beta.directory.services +microsoft.public.winnt50.beta.distributed.file_system +microsoft.public.winnt50.beta.file_system +microsoft.public.winnt50.beta.general +microsoft.public.winnt50.beta.hardware +microsoft.public.winnt50.beta.internet.iexplorer +microsoft.public.winnt50.beta.internet.server +microsoft.public.winnt50.beta.macintosh.interop +microsoft.public.winnt50.beta.netware.interop +microsoft.public.winnt50.beta.networking +microsoft.public.winnt50.beta.networking.protocols +microsoft.public.winnt50.beta.other +microsoft.public.winnt50.beta.pnp_powermgmt +microsoft.public.winnt50.beta.printing +microsoft.public.winnt50.beta.ras_routing +microsoft.public.winnt50.beta.security +microsoft.public.winnt50.beta.setup.installation +microsoft.public.winnt50.beta.setup.installation.deployment +microsoft.public.winnt50.beta.setup.installation.drivers +microsoft.public.winnt50.beta.setup.installation.other +microsoft.public.winnt50.beta.setup.installation.plug_and_play +microsoft.public.winnt50.beta.setup.installation.upgrade +microsoft.public.winnt50.beta.setup.installation.upgrade.windows95 +microsoft.public.winnt50.beta.user_interface +microsoft.public.winnt50.beta.zero_admin +microsoft.public.word.conversions +microsoft.public.word.docmanagement +microsoft.public.word.macword5-6 +microsoft.public.word.macword98 +microsoft.public.word.nonwindows +microsoft.public.word.numbering +microsoft.public.word.oleinterop +microsoft.public.word.pagelayout +microsoft.public.word.printingfonts +microsoft.public.word.tables +microsoft.public.word.word6-7macros +microsoft.public.word.word97vba +microsoft.public.works.dos +microsoft.public.works.mac +microsoft.public.works.win +microsoft.public.xml +microsoft.public.zone.beta +microsoft.test +milw.general +milw.jobs +milw.unix +misc.activism.anti-fascism.announce +misc.activism.anti-fascism.tactics +misc.activism.militia +misc.activism.progressive +misc.answers +misc.books.technical +misc.business.consulting +misc.business.credit +misc.business.facilitators +misc.business.marketing.moderated +misc.business.moderated +misc.business.records-mgmt +misc.consumers +misc.consumers.frugal-living +misc.consumers.house +misc.consumers.house.homeowner-assn +misc.creativity +misc.education +misc.education.adult +misc.education.home-school.christian +misc.education.home-school.misc +misc.education.language.english +misc.education.medical +misc.education.multimedia +misc.education.science +misc.emerg-services +misc.entrepreneurs +misc.entrepreneurs.moderated +misc.fitness.aerobic +misc.fitness.misc +misc.fitness.walking +misc.fitness.weights +misc.forsale.computers.discussion +misc.forsale.computers.mac-specific.cards.misc +misc.forsale.computers.mac-specific.cards.video +misc.forsale.computers.mac-specific.misc +misc.forsale.computers.mac-specific.portables +misc.forsale.computers.mac-specific.software +misc.forsale.computers.mac-specific.systems +misc.forsale.computers.memory +misc.forsale.computers.modems +misc.forsale.computers.monitors +misc.forsale.computers.net-hardware +misc.forsale.computers.other.misc +misc.forsale.computers.other.software +misc.forsale.computers.other.systems +misc.forsale.computers.pc-specific.audio +misc.forsale.computers.pc-specific.cards.misc +misc.forsale.computers.pc-specific.cards.video +misc.forsale.computers.pc-specific.misc +misc.forsale.computers.pc-specific.motherboards +misc.forsale.computers.pc-specific.portables +misc.forsale.computers.pc-specific.software +misc.forsale.computers.pc-specific.systems +misc.forsale.computers.printers +misc.forsale.computers.storage +misc.forsale.computers.workstation +misc.forsale.non-computer +misc.handicap +misc.headlines +misc.health.aids +misc.health.alternative +misc.health.arthritis +misc.health.diabetes +misc.health.infertility +misc.health.injuries.rsi.misc +misc.health.injuries.rsi.moderated +misc.health.therapy.occupational +misc.immigration.australia+nz +misc.immigration.canada +misc.immigration.misc +misc.immigration.usa +misc.industry.electronics.marketplace +misc.industry.insurance +misc.industry.printing +misc.industry.pulp-and-paper +misc.industry.quality +misc.industry.safety.personal +misc.industry.utilities.electric +misc.int-property +misc.invest.canada +misc.invest.financial-plan +misc.invest.futures +misc.invest.marketplace +misc.invest.misc +misc.invest.mutual-funds +misc.invest.options +misc.invest.real-estate +misc.invest.stocks +misc.invest.technical +misc.jobs.contract +misc.jobs.fields.chemistry +misc.jobs.misc +misc.jobs.offered +misc.jobs.offered.entry +misc.jobs.resumes +misc.kids +misc.kids.breastfeeding +misc.kids.computer +misc.kids.consumers +misc.kids.health +misc.kids.info +misc.kids.moderated +misc.kids.pregnancy +misc.kids.vacation +misc.legal +misc.legal.computing +misc.legal.moderated +misc.misc +misc.news.bosnia +misc.news.east-europe.rferl +misc.news.internet.announce +misc.news.internet.discuss +misc.news.southasia +misc.predictions.registry +misc.rural +misc.survivalism +misc.taxes +misc.taxes.moderated +misc.test +misc.test.moderated +misc.transport.air-industry +misc.transport.air-industry.cargo +misc.transport.marine +misc.transport.misc +misc.transport.rail.americas +misc.transport.rail.australia-nz +misc.transport.rail.europe +misc.transport.rail.misc +misc.transport.road +misc.transport.trucking +misc.transport.urban-transit +misc.wanted +misc.writing +misc.writing.screenplays +mit.aero.unified +mit.bboard +mit.eecs.discuss +mit.evat +mit.lcs.announce +mit.lcs.ciis-building.announce +mit.lcs.ciis-building.misc +mit.lcs.misc +mit.lcs.seminar +mit.media-lab.mas001 +mit.test +mn.archive +mn.arts +mn.aviation +mn.forsale +mn.general +mn.map +mn.net +mn.politics +mn.sf +mn.sources +mn.test +mn.traffic +mn.uum +mn.women +monterey.config +monterey.events +monterey.forsale +monterey.general +monterey.test +mtl.activism +mtl.freenet.org +mtl.general +mtl.test +mtl.vendre-forsale +muc.announce +muc.archive.admin +muc.archive.general +muc.archive.update +muc.buergernetz +muc.infoforum +muc.infosystems +muc.lists.53c810 +muc.lists.admin +muc.lists.amd +muc.lists.as5200 +muc.lists.atarix +muc.lists.bind.users +muc.lists.bind.workers +muc.lists.bsdi +muc.lists.cn +muc.lists.dec-managers +muc.lists.dire-straits +muc.lists.enlightenment +muc.lists.fidogate +muc.lists.finance +muc.lists.finance-abstrc +muc.lists.firewalls +muc.lists.flexfax +muc.lists.frame +muc.lists.freebsd.announce +muc.lists.freebsd.bugs +muc.lists.freebsd.current +muc.lists.freebsd.hackers +muc.lists.freebsd.questions +muc.lists.freebsd.scsi +muc.lists.frua-dev +muc.lists.fwf.announce +muc.lists.fwf.bugs +muc.lists.fwf.development +muc.lists.ifmail +muc.lists.indians +muc.lists.info-solbourne +muc.lists.intcon +muc.lists.linux.international +muc.lists.linux68k +muc.lists.logic +muc.lists.loureed +muc.lists.mbox +muc.lists.mint +muc.lists.neijia +muc.lists.netblazer +muc.lists.netbsd.port.powerpc +muc.lists.new-lists +muc.lists.nren-d +muc.lists.osf-managers +muc.lists.pp +muc.lists.scsi +muc.lists.seyon +muc.lists.seyon.dev +muc.lists.smail3.users +muc.lists.smail3.wizards +muc.lists.snns +muc.lists.stern.computer +muc.lists.stern.infomat +muc.lists.suns-at-home +muc.lists.taylor-uucp +muc.lists.tpc-rp +muc.lists.uupc-info +muc.lists.v-modell +muc.lists.www-announce +muc.lists.www-literature +muc.lists.www-proxy +muc.lists.www-speed +muc.lists.www-talk +muc.lists.zmailer +muc.markt.misc +muc.misc +muc.rec +muc.test +muc.verkehr +mx.anuncios +nashville.general +nb.biz +nb.forsale +nb.francais +nb.general +nb.jobs +nbg.config +nbg.flame +nbg.hack +nbg.lists +nbg.markt +nbg.motorrad +nbg.online +nbg.sonstiges +nbg.test +nbn.housing +nbn.market +nbn.misc +nbn.novato +nbn.westmarin +nc.charlotte.entertainment +nc.charlotte.sports +nc.config +nc.forsale +nc.general +nc.western +ncar.weather +ncku.talk +ncsc.chemistry +ncsc.general +ncsc.systems +ncsc.training +nctu.ac.general +nctu.academic +nctu.activities +nctu.adm +nctu.adm.academic-affs +nctu.adm.alumni-center +nctu.adm.chancellor +nctu.adm.general-affs +nctu.adm.health +nctu.adm.mirc +nctu.adm.president +nctu.adm.sport +nctu.adm.student-affs +nctu.adm.student-cnas +nctu.adm.traffic +nctu.alumni +nctu.announce +nctu.answers +nctu.applied.math +nctu.ccca +nctu.ccca.ftp.announce +nctu.ccca.ftp.d +nctu.ccca.ftp.newfiles +nctu.ccca.hytelnet +nctu.ccca.mirror +nctu.ce.general +nctu.chss +nctu.club.aboriginal +nctu.club.aiesec +nctu.club.anime +nctu.club.astronomy +nctu.club.av +nctu.club.ballroomdance +nctu.club.baseball +nctu.club.bicycle +nctu.club.buddhism +nctu.club.central-alumni +nctu.club.chinese-music +nctu.club.chorus +nctu.club.cie +nctu.club.counseling +nctu.club.ctbs +nctu.club.drama +nctu.club.fhl +nctu.club.fine-art +nctu.club.guitar +nctu.club.harmonica +nctu.club.heart +nctu.club.hsnu-alumni +nctu.club.jindan +nctu.club.kan-fu +nctu.club.karate +nctu.club.ks-alumni +nctu.club.midi +nctu.club.mingdao +nctu.club.mountain +nctu.club.nature +nctu.club.nctumovie +nctu.club.ocsa +nctu.club.orchestra +nctu.club.photo +nctu.club.popdance +nctu.club.rail +nctu.club.rover +nctu.club.skating +nctu.club.spring-shine +nctu.club.stamp +nctu.club.tai-chn +nctu.club.track-field +nctu.club.uu +nctu.cm.general +nctu.com.ecology +nctu.consult +nctu.cte +nctu.dept.cn +nctu.ee.general +nctu.ee.vlsi-cad +nctu.ensys +nctu.general +nctu.iim.general +nctu.lib.book +nctu.lib.news +nctu.mat-sci-eng +nctu.me.general +nctu.newgroups.announce +nctu.newgroups.d +nctu.newusers.questions +nctu.rec.cinema +nctu.rec.music +nctu.student-union.news +nctu.student-union.talk +nctu.talk +nctu.tem.general +nctu.test +ncu.bbs.activities +ncu.bbs.cdr +ncu.bbs.club.aborigines +ncu.bbs.club.akido +ncu.bbs.club.baseball +ncu.bbs.club.child +ncu.bbs.club.chorus +ncu.bbs.club.debate +ncu.bbs.club.folkdance +ncu.bbs.club.gf +ncu.bbs.club.guitar +ncu.bbs.club.hotdance +ncu.bbs.club.lulala +ncu.bbs.club.ms +ncu.bbs.club.photo +ncu.bbs.club.rover +ncu.bbs.club.serverlove +ncu.bbs.club.soccer +ncu.bbs.club.st +ncu.bbs.club.string +ncu.bbs.club.youth +ncu.bbs.csie +ncu.bbs.dormitory +ncu.bbs.fashion +ncu.bbs.ncudcn +ncu.bbs.netgame +ne.arts +ne.config +ne.food +ne.forsale +ne.general +ne.general.selected +ne.housing +ne.internet.services +ne.internet.services.ads +ne.internet.services.selected +ne.jobs +ne.jobs.company +ne.jobs.contract +ne.motorcycles +ne.motss +ne.nearnet.general +ne.nearnet.tech +ne.org.bcs +ne.org.decus +ne.org.neci.announce +ne.org.neci.general +ne.org.neci.nsp +ne.org.neci.software +ne.politics +ne.seminars +ne.singles +ne.transportation +ne.wanted +ne.weather +nebr.biz +nebr.edu +nebr.flame +nebr.gov +nebr.humor +nebr.jobs +nebr.marketplace +nebr.misc +nebr.news.announce +nebr.news.general +nebr.news.test +nebr.rec +nebr.sports.misc +nebr.sports.unl +nersc.announce +nersc.applications +nersc.basis +nersc.c++ +nersc.dce.pilot +nersc.dcom +nersc.down_times +nersc.ersug.disk +nersc.ersug.hpss +nersc.fusion.computing +nersc.general +nersc.grafl3 +nersc.graphics +nersc.meetings.workshops +nersc.move +nersc.rfc.software +nersc.sas +nersc.smp +nersc.software.shared +nersc.software.updates +nersc.spp +nersc.staff +nersc.test +nersc.tutorials +nersc.unitree +nersc.unix.differences +nersc.windows.x +net.announce +net.aquaria +net.aquaria.config +net.aquaria.marine +net.aviation.aerobatics +net.aviation.announcements +net.aviation.homebuilt +net.aviation.ifr +net.aviation.marketplace +net.aviation.military +net.aviation.piloting +net.aviation.rotorcraft +net.aviation.simulators +net.aviation.students +net.aviation.ultralight +net.bicycles.activism +net.bicycles.config +net.bicycles.general +net.bicycles.marketplace +net.bizarre +net.computers.datacom +net.computers.email.qmail +net.computers.embedded +net.computers.os.other +net.computers.os.unix.linux +net.computers.os.unix.rhapsody +net.computers.os.unix.solaris +net.computers.other +net.computers.telecom +net.config +net.config.feed-requests +net.config.leaks +net.config.unsound-sites +net.control +net.crafts.general +net.crafts.general.marketplace.commercial +net.crafts.general.marketplace.private +net.crafts.metalworking.general +net.crafts.textiles.general +net.crafts.textiles.marketplace.commercial +net.crafts.textiles.marketplace.private +net.crafts.woodworking.general +net.crafts.zymurgy.general +net.current-events.general +net.education.general +net.food.advocacy +net.food.announce +net.food.asian +net.food.bread +net.food.chocolate +net.food.coffee-klatch +net.food.desserts +net.food.drink.beer +net.food.drink.liquor +net.food.drink.wine +net.food.healthy +net.food.japanese +net.food.pizza +net.food.spicy +net.food.veg.cookery +net.food.veg.lifestyle +net.games.roleplaying.advocacy +net.games.roleplaying.announce +net.games.roleplaying.general +net.games.roleplaying.marketplace +net.games.roleplaying.theory +net.general +net.genre.config +net.genre.other +net.genre.sf.babylon5 +net.genre.sf.config +net.genre.sf.fandom +net.genre.sf.movies +net.genre.sf.other +net.genre.sf.star-trek +net.genre.sf.star-wars +net.genre.sf.tv +net.genre.sf.written +net.history.general +net.humour.bawdy +net.humour.config +net.humour.funny +net.humour.off-colour +net.humour.religion +net.internet.dns.names +net.internet.dns.policy +net.media.electronic +net.media.film-industry +net.media.movies +net.media.other +net.media.print +net.media.tv +net.medicine.clinical.general +net.medicine.education.general +net.medicine.policy.general +net.medicine.public-health.drugs +net.medicine.public-health.general +net.medicine.research.general +net.medicine.support.general +net.medicine.veterinary.general +net.music.classical.general +net.music.general +net.music.style.metal +net.music.style.ska +net.music.world.general +net.origins +net.religion.announce +net.religion.flame +net.religion.interfaith +net.religion.policy +net.science.biology.evolution +net.science.biology.misc +net.science.chemistry.misc +net.science.geology.misc +net.science.misc +net.science.physics.misc +net.sexuality.bondage +net.sexuality.general +net.sexuality.motss +net.sexuality.stories +net.sexuality.stories.discuss +net.sport.config +net.sport.football.ncaa +net.sport.football.nfl +net.sport.general +net.sport.hockey +net.subculture.tasteless +net.subculture.usenet +net.support.abuse.sexual +net.support.addiction.misc +net.support.announce +net.support.config +net.support.grief +net.support.psych.misc +net.test +net.theatre.acting +net.theatre.announce +net.theatre.musicals +net.theatre.plays +net.theatre.stagecraft +net.writing.general +net.writing.roleplaying.in-character.announce +net.writing.roleplaying.in-character.misc +net157.chat157 +net157.region11 +netbsd.current-users +netbsd.netbsd-bugs +netbsd.source-changes +netcom.general +netcom.shell.general +netcom.shell.mail +netcom.shell.software.nuglops +netcom.uk.jobs +netcom.uk.press-releases +netlink.announce +netlink.service +netlink.support +netlink.talk +netlink.users +netscape.public.admin +netscape.public.general +netscape.public.mozilla.announce +netscape.public.mozilla.beos +netscape.public.mozilla.builds +netscape.public.mozilla.crypto +netscape.public.mozilla.documentation +netscape.public.mozilla.general +netscape.public.mozilla.gtk +netscape.public.mozilla.i18n +netscape.public.mozilla.java +netscape.public.mozilla.layout +netscape.public.mozilla.license +netscape.public.mozilla.mail-news +netscape.public.mozilla.os2 +netscape.public.mozilla.patches +netscape.public.mozilla.qt +netscape.public.mozilla.rdf +netscape.public.mozilla.rhapsody +netscape.public.mozilla.ui +netscape.public.mozilla.wishlist +netscape.public.test +neworleans.general +neworleans.info +news.admin.announce +news.admin.censorship +news.admin.hierarchies +news.admin.misc +news.admin.net-abuse.bulletins +news.admin.net-abuse.email +news.admin.net-abuse.misc +news.admin.net-abuse.policy +news.admin.net-abuse.sightings +news.admin.net-abuse.usenet +news.admin.nocem +news.admin.technical +news.announce.conferences +news.announce.important +news.announce.newgroups +news.announce.newusers +news.answers +news.groups +news.groups.questions +news.groups.reviews +news.lists.filters +news.lists.misc +news.misc +news.newusers.questions +news.software.anu-news +news.software.b +news.software.misc +news.software.nn +news.software.nntp +news.software.readers +newsguy.announce +newsguy.general +newsguy.pub.biz.headlines +newsguy.pub.headlines +newsguy.pub.sports.headlines +newsguy.pub.us.gov.contracts.budgets +newsguy.pub.us.gov.defense +newsguy.pub.us.gov.faa +newsguy.pub.us.gov.fcc +newsguy.pub.us.gov.fda +newsguy.pub.us.gov.federal.reserve.fdic +newsguy.pub.us.gov.finance +newsguy.pub.us.gov.ftc +newsguy.pub.us.gov.military +newsguy.pub.us.gov.nasa +newsguy.pub.us.gov.society +newsguy.pub.us.gov.supreme-court +newsguy.pub.us.politics +newsguy.pub.world.africa.gov +newsguy.pub.world.asia.gov +newsguy.pub.world.australia.nz.oceania.gov +newsguy.pub.world.canada.gov +newsguy.pub.world.europe.russia-cis.gov +newsguy.pub.world.gov +newsguy.pub.world.gov.analysis +newsguy.pub.world.gov.democracy.human-rights +newsguy.pub.world.gov.diplomatic.security +newsguy.pub.world.gov.economic +newsguy.pub.world.gov.fire.police +newsguy.pub.world.gov.global.communications +newsguy.pub.world.gov.press-review +newsguy.pub.world.gov.public-service +newsguy.pub.world.gov.summary.48hours +newsguy.pub.world.gov.summary.french +newsguy.pub.world.gov.summary.russian +newsguy.pub.world.gov.summary.spanish +newsguy.pub.world.latin-american.caribbean.gov +newsguy.pub.world.mid-east.nafrica.sasia.gov +newsguy.pub.world.politics +nf.arts +nh.config +nh.forsale +nh.general +nh.housing +ni.announce +ni.business.chat +ni.buy-and-sell +ni.chat +ni.entertainment +ni.games.multiplayer +ni.motorcycles +ni.music +ni.net +ni.politics +ni.support +ni.test +ni.www +niagara.announce +niagara.arts +niagara.config +niagara.falls +niagara.falls.barrel +niagara.falls.cam +niagara.forsale +niagara.freenet +niagara.general +niagara.jobs +niagara.personals +niagara.police +niagara.test +niagara.wine +nil.general +nil.maps +nj.config +nj.events +nj.forsale +nj.general +nj.jobs +nj.jobs.resumes +nj.market.autos +nj.market.computers +nj.market.housing +nj.market.misc +nj.misc +nj.politics +nj.test +nj.wanted +nj.weather +nl.announce +nl.architectuur +nl.belastingen +nl.beurs +nl.burgerrechten +nl.comp.crypt +nl.comp.games +nl.comp.games.quake +nl.comp.isdn +nl.comp.os.linux +nl.comp.os.ms-windows +nl.comp.os.os2 +nl.comp.overig +nl.comp.programmeren +nl.comp.sys.mac +nl.culinair +nl.eeuwig.september +nl.erotiek.bdsm +nl.fiets +nl.foto +nl.gezondheid.medisch +nl.gezondheid.psychiatrie +nl.gezondheid.voeding +nl.huisdier.algemeen +nl.humor +nl.internet.algemeen +nl.internet.irc +nl.internet.misbruik +nl.internet.providers +nl.internet.welkom +nl.internet.www.announce +nl.internet.www.ontwerp +nl.juridisch +nl.kunst.film +nl.kunst.literatuur +nl.kunst.sf+fantasy +nl.markt.banen +nl.markt.comp +nl.markt.muziek +nl.markt.overig +nl.markt.vervoer +nl.markt.wonen +nl.media.e-zine +nl.media.krant +nl.media.radio +nl.media.satelliet +nl.media.tv +nl.misc +nl.motorfiets +nl.muziek +nl.naturisme +nl.newsgroups +nl.o+w.aio +nl.onderwijs.nieuwe-media +nl.politiek +nl.radio.amateur +nl.radio.scanners +nl.reizen +nl.religie +nl.roze +nl.scientology +nl.scouting +nl.sport.algemeen +nl.sport.bridge +nl.sport.duiken +nl.sport.overig +nl.sport.schaken +nl.sport.vissen +nl.sport.voetbal +nl.support.alcoholisme +nl.support.chronisch-ziek.algemeen +nl.support.transseksueel +nl.taal +nl.telecom +nl.test +nl.tuinen +nl.vogels.vogelaar +nl.wandel +nl.wetenschap +nlnet.announce +nlnet.misc +nlnet.test +nm.config +nm.forsale +nm.general +nm.jobs +nm.test +no.alkohol +no.alt.arkiv +no.alt.config +no.alt.diskusjoner +no.alt.fan.de-lillos +no.alt.flame +no.alt.frustrasjoner +no.alt.gledesutbrudd +no.alt.god.jul +no.alt.gullkorn +no.alt.hjemmesider +no.alt.hunder +no.alt.irc-treff +no.alt.katter +no.alt.mat +no.alt.mat.drikke +no.alt.motorsykler +no.alt.news-treff +no.alt.pompel-og-pilt +no.alt.radio-tv.irma-1000 +no.alt.rykter +no.alt.sjokolade +no.alt.tegneserier +no.annonser.bil +no.annonser.bolig +no.annonser.diverse +no.annonser.foto +no.annonser.it.maskinvare.diverse +no.annonser.it.telekom +no.annonser.motorsykkel +no.annonser.spill.data +no.annonser.spill.diverse +no.annonser.spill.tv +no.annonser.sykkel +no.bil +no.biz.annonser +no.biz.annonser.data +no.biz.diskusjoner +no.biz.nettilbydere +no.ef +no.fag.diverse +no.fag.filosofi +no.fag.jus +no.fag.medisin.diverse +no.fag.spraak.diverse +no.fag.spraak.fagord +no.film +no.folklore.generelt +no.folklore.overtro +no.fritid.diverse +no.fritid.dykking +no.fritid.dyr.diverse +no.fritid.fiske +no.fritid.foto +no.fritid.friluftsliv +no.fritid.hage +no.fritid.jakt +no.fritid.slektsforsking.etterlysing +no.fritid.speiding +no.fritid.spill.data +no.fritid.spill.diverse +no.fritid.spill.rollespill +no.fritid.spill.sjakk +no.general +no.it.diverse +no.it.emacs +no.it.grafikk.diverse +no.it.maskinvare.diverse +no.it.maskinvare.pda +no.it.nettverk +no.it.nostalgi +no.it.os.amiga.diverse +no.it.os.amiga.maskinvare +no.it.os.amiga.programvare +no.it.os.mac.diverse +no.it.os.ms-windows.diverse +no.it.os.ms-windows.nt +no.it.os.os2 +no.it.programmering.c +no.it.programmering.delphi +no.it.programmering.diverse +no.it.programmering.java +no.it.programmering.lisp +no.it.programmering.perl +no.it.programmering.visual-basic +no.it.programvare.ms-office +no.it.programvare.tex +no.it.sikkerhet.diverse +no.it.telekom.diverse +no.it.telekom.isdn +no.it.telekom.mobil +no.it.tjenester.irc +no.it.tjenester.mail.diverse +no.it.tjenester.www.design +no.it.tjenester.www.diverse +no.it.tjenester.www.html +no.it.tjenester.www.programmering +no.jus +no.kjemi +no.kultur.diverse +no.kultur.film +no.kultur.folklore.diverse +no.kultur.folklore.ufo +no.kultur.fritid.friluftsliv +no.kultur.genre.sf +no.kultur.litteratur.diverse +no.kultur.musikk.gitar +no.kultur.musikk.korps +no.linux +no.mac +no.mail.drift +no.marked +no.marked.bil +no.marked.bolig +no.marked.data +no.marked.diskusjon +no.marked.jobb +no.ms-windows +no.musikk +no.musikk.klassisk +no.net +no.news.diverse +no.news.drift +no.org.diverse +no.org.efn.diskusjon +no.org.efn.nyheter +no.org.nuug +no.pc +no.prat.politikk +no.prat.seksualitet +no.psykologi +no.reiser +no.religion +no.samfunn.aksjer +no.samfunn.diverse +no.samfunn.foreldre+barn +no.samfunn.media.radio-tv +no.samfunn.naturvern +no.samfunn.seksualitet +no.skole.diverse +no.slekt +no.slekt.etterlysning +no.slekt.programmer +no.spill +no.spill.rollespill +no.sport.diverse +no.sport.fotball +no.sport.orientering +no.sport.paintball +no.sport.volleyball +no.stortinget +no.svar +no.teknologi.audio +no.teknologi.bil +no.teknologi.diverse +no.teknologi.elektronikk +no.teknologi.video +no.tele +no.test +no.unix +no.velkommen +no.x +nord.admin +nord.allgemein +nord.fundgrube +nord.kultur.misc +nord.kultur.theater +nord.org.buergernetz-sh +nord.org.misc +nord.regio.daenemark +nord.regio.mecklenburg-vp +nord.regio.niedersachs +nord.regio.schleswig-h.flensburg +nord.regio.schleswig-h.misc +nord.regio.schleswig-h.neumuenster +nord.regio.schleswig-h.rendsburg +nord.termine +nordunet.edu.suppl-instr +nordunet.talk.skandinaviska +north.allgemein +north.bremen +north.bremen.deceased +north.config.maps +north.hardware +north.markt +north.politik +north.software +north.test +north.verwaltung +ns.announce +ns.biz.adiac +ns.education +ns.education.faculty +ns.general +ns.nstn.usergroup +ntu.club.cie +nv.bi +nv.config +nv.forsale +nv.general +nv.jobs +nv.motss +nv.personals +nv.personals.fsf +nv.personals.fsm +nv.personals.msf +nv.personals.msm +nv.personals.swingers +nv.singles +nv.test +ny.config +ny.forsale +ny.general +ny.nysernet +ny.nysernet.map +ny.nysernet.maps +ny.nysernet.nic +ny.nysernet.nysertech +ny.politics +ny.seminars +ny.syr +ny.syr.educators +ny.test +ny.wanted +nyc.announce +nyc.config +nyc.food +nyc.general +nyc.jobs.contract +nyc.jobs.misc +nyc.jobs.offered +nyc.jobs.wanted +nyc.market.housing +nyc.motorcycles +nyc.personals +nyc.politics +nyc.seminars +nyc.singles +nyc.test +nyc.transit +nynex.trd.eslab +nyu.comp-priv +nyu.nupop +nyu.pmail +nyu.pop +nz.arts +nz.biz.misc +nz.comp +nz.general +nz.net.admin +nz.net.announce +nz.org.isocnz +nz.politics +nz.politics.announce +nz.rec +nz.reg.auckland.general +nz.reg.bay-of-plenty.general +nz.reg.canterbury.general +nz.reg.christchurch.general +nz.reg.dunedin.general +nz.reg.gisborne.general +nz.reg.hamilton.general +nz.reg.hawkes-bay.general +nz.reg.manawatu.general +nz.reg.nelson.general +nz.reg.northland.general +nz.reg.southland.general +nz.reg.taranaki.general +nz.reg.wellington.general +nz.reg.west-coast.general +nz.soc +nz.soc.green +nz.soc.queer +nz.soc.religion +nz.test +nz.wanted +oar.noc +oar.tech +oar.users +oau.biz +oau.config +oau.forsale +oau.news +oau.sources +oau.test +oc.acm +oc.eats +oc.forsale +oc.general +oc.test +oc.wanted +ogi.general +oh.acad-sci +oh.biz +oh.cast +oh.chem +oh.forsale +oh.general +oh.jobs +oh.k12 +oh.news +oh.newsadmin +oh.osc.software +oh.test +ok.admin +ok.announce +ok.edmond.online +ok.general +ok.marketplace +ok.test +ok.tulsa.general +okinawa.books +okinawa.chat +okinawa.comp.editors +okinawa.comp.misc +okinawa.events +okinawa.food.misc +okinawa.general +okinawa.life.misc +okinawa.mail-lists.nirai-kanai +okinawa.misc +okinawa.networks +okinawa.networks.bbs +okinawa.networks.isdn +okinawa.networks.uucp +okinawa.news.groups +okinawa.news.lists +okinawa.news.usage +okinawa.os.linux +okinawa.os.misc +okinawa.os.unix +okinawa.rec.games +okinawa.rec.misc +okinawa.rec.music +okinawa.rec.travel +okinawa.recycle +okinawa.soc.misc +okinawa.sources +okinawa.sources.d +okinawa.sports.misc +okinawa.sys.amiga +okinawa.sys.ibmpc +okinawa.sys.mac +okinawa.sys.misc +okinawa.sys.next +okinawa.sys.sun +okinawa.test +on-line.air-warrior.666th-etal +ont.archives +ont.bicycle +ont.conditions +ont.events +ont.forsale +ont.general +ont.jobs +ont.micro +ont.politics +ont.sf-lovers +ont.singles +ont.test +ont.uucp +or.forsale +or.general +or.ojgse.cis641 +or.politics +or.test +osu.acm +osu.ai +osu.ai.aim +osu.ai.hardware.sun +osu.ai.software.ext.excl +osu.ai.software.ext.frame +osu.chinese +osu.faculty.council +osu.for-sale +osu.general +osu.grads +osu.ibm.pc +osu.ibmpc +osu.indian +osu.international +osu.jobs +osu.journalism.general +osu.lisp +osu.mac +osu.magnus +osu.music +osu.network +osu.opinion +osu.opinion.libertarian +osu.sports +osu.sybase +osu.tex +osu.women +ott.business.ads +ott.business.ads.computing +ott.community.lets +ott.community.motss +ott.config +ott.education.homeschooling +ott.events +ott.forsale.computing +ott.forsale.other +ott.general +ott.housing +ott.jobs +ott.motorcycles +ott.online +ott.personals +ott.politics +ott.rec.canoe-kayak +ott.rec.sailing +ott.rides +ott.singles +ott.test +ott.vietnamese +ott.weather +own.answers +own.eco.lets +own.eco.permaculture +own.health.aromatherapy +own.health.bach_flowers +own.health.herbs +own.health.homoeopathy +own.health.misc +own.music +own.natives +own.news.announce +own.news.groups +own.rainbow +own.tibet.misc +own.tibet.wtn +pa.admin +pa.config +pa.environment +pa.forsale +pa.general +pa.hbg.forsale +pa.hbg.general +pa.hbg.wanted +pa.jobs.offered +pa.jobs.wanted +pa.lv.forsale +pa.lv.general +pa.lv.wanted +pa.motorcycle +pa.motss +pa.ne.forsale +pa.ne.general +pa.ne.politics +pa.ne.wanted +pa.politics +pa.rdg.forsale +pa.rdg.general +pa.rdg.wanted +pa.smallbusiness +pa.test +pa.wanted +pagesat.stats +pbinfo.amiga +pdaxs.ads.antiques +pdaxs.ads.apartments +pdaxs.ads.appliances +pdaxs.ads.audio_video +pdaxs.ads.boats +pdaxs.ads.books +pdaxs.ads.cars +pdaxs.ads.cars.audio +pdaxs.ads.cars.misc +pdaxs.ads.cars.rv +pdaxs.ads.cars.service +pdaxs.ads.clothing +pdaxs.ads.computers +pdaxs.ads.fencing +pdaxs.ads.food +pdaxs.ads.furniture +pdaxs.ads.homes.n +pdaxs.ads.homes.ne +pdaxs.ads.homes.nw +pdaxs.ads.homes.se +pdaxs.ads.homes.sw +pdaxs.ads.hotels +pdaxs.ads.jewelry +pdaxs.ads.lostrfound +pdaxs.ads.misc +pdaxs.ads.movies +pdaxs.ads.music +pdaxs.ads.notices +pdaxs.ads.office +pdaxs.ads.personals +pdaxs.ads.printing +pdaxs.ads.real_estate +pdaxs.ads.restaurants +pdaxs.ads.sales +pdaxs.ads.sports +pdaxs.ads.tickets +pdaxs.ads.tools +pdaxs.ads.wanted +pdaxs.arts.auditions +pdaxs.arts.museums +pdaxs.arts.music +pdaxs.arts.print +pdaxs.arts.radio +pdaxs.arts.tv +pdaxs.calendar.art +pdaxs.calendar.business +pdaxs.calendar.computers +pdaxs.calendar.misc +pdaxs.calendar.music +pdaxs.calendar.volunteers +pdaxs.games.board +pdaxs.games.bridge +pdaxs.games.chess +pdaxs.games.misc +pdaxs.games.rpg +pdaxs.issues.democrats +pdaxs.issues.education +pdaxs.issues.portland +pdaxs.issues.republicans +pdaxs.jobs.clerical +pdaxs.jobs.computers +pdaxs.jobs.construction +pdaxs.jobs.delivery +pdaxs.jobs.domestic +pdaxs.jobs.engineering +pdaxs.jobs.management +pdaxs.jobs.misc +pdaxs.jobs.restaurants +pdaxs.jobs.resumes +pdaxs.jobs.retail +pdaxs.jobs.sales +pdaxs.jobs.secretary +pdaxs.jobs.temporary +pdaxs.jobs.volunteers +pdaxs.jobs.wanted +pdaxs.religion.christian +pdaxs.religion.jewish +pdaxs.religion.misc +pdaxs.religion.moslem +pdaxs.religion.newage +pdaxs.schools.acting +pdaxs.schools.cooking +pdaxs.schools.dance +pdaxs.schools.fitness +pdaxs.schools.kids +pdaxs.schools.martial +pdaxs.schools.misc +pdaxs.schools.music +pdaxs.schools.sports +pdaxs.services.accounting +pdaxs.services.appliance +pdaxs.services.carpentry +pdaxs.services.children +pdaxs.services.cleaning +pdaxs.services.computers +pdaxs.services.consulting +pdaxs.services.counseling +pdaxs.services.electrical +pdaxs.services.financial +pdaxs.services.fitness +pdaxs.services.gardening +pdaxs.services.graphics +pdaxs.services.insurance +pdaxs.services.int_design +pdaxs.services.landscaping +pdaxs.services.legal +pdaxs.services.massage +pdaxs.services.misc +pdaxs.services.moving +pdaxs.services.music +pdaxs.services.painting +pdaxs.services.pets +pdaxs.services.photo +pdaxs.services.plumbing +pdaxs.services.roofing +pdaxs.services.security +pdaxs.services.storage +pdaxs.services.wordproc +pdaxs.sports.baseball +pdaxs.sports.basketball +pdaxs.sports.football +pdaxs.sports.golf +pdaxs.sports.rotisserie +pdx.arts +pdx.books +pdx.computing +pdx.forsale +pdx.games +pdx.general +pdx.golf +pdx.movies +pdx.music +pdx.online +pdx.running +pdx.singles +pdx.slug +pdx.soc +pdx.sports +pdx.telecom +pdx.test +pdx.utek +pdx.weather +pei.crafts +pgh.apartments +pgh.config +pgh.cpsr +pgh.food +pgh.forsale +pgh.freenet +pgh.general +pgh.jobs.offered +pgh.jobs.wanted +pgh.motss +pgh.next-users +pgh.opinion +pgh.org.cnbc +pgh.org.sca +pgh.org.uccp +pgh.singles +pgh.test +phl.announce +phl.bicycles +phl.config +phl.dance +phl.food +phl.forsale +phl.housing +phl.internet +phl.jobs.offered +phl.jobs.wanted +phl.media +phl.misc +phl.motss +phl.music +phl.outdoors +phl.pagan +phl.scanner +phl.singles +phl.sports +phl.test +phl.theatre +phl.transportation +phl.wanted +phl.weather +phri.general +phx.buy-sell-trade +phx.eats +phx.general +phx.indirect.announce +phx.indirect.bud +phx.indirect.help +phx.indirect.help.mac +phx.indirect.help.pc +phx.indirect.techsuport +phx.indirect.test +phx.jobs.wanted +phx.onramp.announce +phx.onramp.general +phx.onramp.help +phx.onramp.support +phx.test +pipex.admin +pipex.dialup +pipex.info +pipex.news +pipex.techs +pipex.tickets +pitt.comp.general +pitt.comp.sys.ibm-pc +pitt.comp.sys.mac +pitt.comp.sys.unix +pitt.comp.sys.vms +pitt.config +pl.announce.newgroups +pl.answers +pl.biznes +pl.biznes.banki +pl.biznes.wgpw +pl.comp.bazy-danych +pl.comp.bazy-danych.msaccess +pl.comp.cad +pl.comp.demoscena +pl.comp.dtp +pl.comp.dtp.tex +pl.comp.dtp.tex.gust +pl.comp.gis +pl.comp.grafika +pl.comp.grafika.grafika3d +pl.comp.intranet +pl.comp.lang.c +pl.comp.lang.delphi +pl.comp.lang.delphi.bazy-danych +pl.comp.lang.java +pl.comp.lang.pascal +pl.comp.lang.perl +pl.comp.lang.vbasic +pl.comp.mail +pl.comp.mail.mta +pl.comp.networking +pl.comp.nowe-programy +pl.comp.objects +pl.comp.ogonki +pl.comp.os.advocacy +pl.comp.os.freebsd +pl.comp.os.hp-ux +pl.comp.os.linux +pl.comp.os.linux.sieci +pl.comp.os.os2 +pl.comp.os.unix +pl.comp.os.win3 +pl.comp.os.win95 +pl.comp.os.winnt +pl.comp.pecet +pl.comp.programming +pl.comp.security +pl.comp.sys.amiga +pl.comp.sys.atari +pl.comp.sys.macintosh +pl.comp.sys.novell +pl.comp.sys.sun.admin +pl.comp.sys.xwindow +pl.comp.tlumaczenia +pl.comp.www +pl.comp.www.nowe-strony +pl.fidonet.bramka +pl.gazety.donosy +pl.gazety.dyrdymalki +pl.gazety.gazeta +pl.hum.poezja +pl.hum.polszczyzna +pl.hum.tlumaczenia +pl.internet.komunikaty +pl.internet.nowosci +pl.internet.polip +pl.irc +pl.listserv.chomor-l +pl.listserv.dziennikarz +pl.listserv.plotki +pl.listserv.polwro +pl.misc.budowanie +pl.misc.elektronika +pl.misc.kolej +pl.misc.militaria +pl.misc.paranauki +pl.misc.samochody +pl.misc.samochody.garbusy +pl.misc.telefonia +pl.misc.telefonia.gsm +pl.misc.telefonia.gsm.gielda +pl.misc.telefonia.gsm.sms +pl.misc.telefonia.isdn +pl.misc.transport +pl.news.admin +pl.news.czytniki +pl.news.nowe-grupy +pl.ogloszenia.kupie +pl.ogloszenia.rozne +pl.ogloszenia.sprzedam +pl.org.psi +pl.praca.dyskusje +pl.praca.oferowana +pl.praca.szukana +pl.rec.akwarium +pl.rec.anime +pl.rec.ascii-art +pl.rec.audio +pl.rec.fantastyka.babylon5 +pl.rec.fantastyka.sf-f +pl.rec.fantastyka.startrek +pl.rec.fantastyka.starwars +pl.rec.fantastyka.x-files +pl.rec.film +pl.rec.film.animowany +pl.rec.foto +pl.rec.gory +pl.rec.gry.brydz +pl.rec.gry.karciane +pl.rec.gry.komputerowe +pl.rec.gry.komputerowe.klasyka +pl.rec.gry.komputerowe.roguelike +pl.rec.gry.komputerowe.sprzet +pl.rec.gry.konsole +pl.rec.gry.mud +pl.rec.gry.rpg +pl.rec.gry.scrabble +pl.rec.gry.szachy +pl.rec.harcerstwo +pl.rec.hihot +pl.rec.humor.monty-python +pl.rec.humor.najlepsze +pl.rec.kino-domowe +pl.rec.komiks +pl.rec.ksiazki +pl.rec.kuchnia +pl.rec.lotnictwo +pl.rec.modelarstwo +pl.rec.motocykle +pl.rec.muzyka +pl.rec.muzyka.bin +pl.rec.muzyka.gitara +pl.rec.muzyka.jazz +pl.rec.muzyka.metal +pl.rec.muzyka.rock +pl.rec.muzyka.techno +pl.rec.nurkowanie +pl.rec.ogrody +pl.rec.paralotnie +pl.rec.radio +pl.rec.radio.amatorskie +pl.rec.radio.cb +pl.rec.rowery +pl.rec.sport +pl.rec.sport.koszykowka +pl.rec.sport.motorowe +pl.rec.sport.pilka-nozna +pl.rec.telewizja +pl.rec.travel +pl.rec.wedkarstwo +pl.rec.windsurfing +pl.rec.zbieractwo +pl.rec.zeglarstwo +pl.rec.zeglarstwo.szanty +pl.rec.zwierzaki +pl.regionalne.krakow +pl.regionalne.lodz +pl.regionalne.lublin +pl.regionalne.poznan +pl.regionalne.szczecin +pl.regionalne.szczecin.ogloszenia +pl.regionalne.trojmiasto +pl.regionalne.warszawa +pl.regionalne.warszawa.ogloszenia +pl.regionalne.wroclaw +pl.sci.chemia +pl.sci.filozofia +pl.sci.fizyka +pl.sci.geodezja +pl.sci.historia +pl.sci.kosmos +pl.sci.matematyka +pl.sci.medycyna +pl.sci.psychologia +pl.sci.weterynaria +pl.soc.dekadentyzm +pl.soc.dzieci +pl.soc.edukacja +pl.soc.edukacja.szkola +pl.soc.inwalidzi +pl.soc.polityka +pl.soc.polityka.wybory +pl.soc.prawo +pl.soc.prawo.podatki +pl.soc.religia +pl.soc.seks +pl.soc.seks.moderowana +pl.soc.seks.towarzyskie +pl.soc.wegetarianizm +pl.soc.zieloni +pl.test +pnw.education +pnw.forsale +pnw.general +pnw.motss +pnw.news +pnw.personals +pnw.sys.sun +pnw.test +posc.announce +posc.application.views +posc.change_request +posc.change_request.bcs +posc.change_request.browser +posc.change_request.data_access +posc.change_request.data_model +posc.change_request.ref_entity +posc.change_request.si +posc.change_request.ui +posc.migration +posc.sysadm +posc.test +prg.jobs +princeton.general +princeton.grad +private.lab.lcs +private.wmnst01.bulletin.board +pronet.kneipe +psi.general +psi.nrg +psi.nwg +psi.psilink +psi.psinet +psi.stats +psi.test +psi.tickets +pt.binarios +pt.ciencia.geral +pt.comp.geral +pt.comp.so.linux +pt.conversa +pt.geral +pt.internet +pt.internet.usenet +pt.internet.www +pt.mercado +pt.mercado.emprego +pt.mercado.imobiliario +pt.mercado.informatica +pt.mercado.veiculos +pt.rec.aquaria +pt.rec.artes +pt.rec.artes.cinema +pt.rec.desporto +pt.rec.geral +pt.rec.jogos.computador +pt.rec.musica.geral +pt.rec.radio.amadorismo +pt.rec.radio.cb +pt.soc.economia +pt.soc.ensino +pt.soc.escutismo +pt.soc.geral +pt.soc.politica +pt.soc.sexologia +pt.tec.geral +qc.general +qc.jobs +qc.politique +qtp.bulletin +qtp.general +rabbit.config +rabbit.customers +rabbit.maps +rabbit.net-config +rabbit.q-and-a +rabbit.tech-info +rain.bsdi-users +rain.firewalls +rain.smail3 +rain.sources +rain.sources.d +realtynet.canada-intl +realtynet.commercial +realtynet.commercial.ak-northern +realtynet.commercial.ak-southern +realtynet.commercial.al +realtynet.commercial.az +realtynet.commercial.ca-central +realtynet.commercial.ca-northern +realtynet.commercial.ca-southern +realtynet.commercial.co +realtynet.commercial.ct +realtynet.commercial.dc +realtynet.commercial.de +realtynet.commercial.fl-central +realtynet.commercial.fl-northern +realtynet.commercial.fl-southern +realtynet.commercial.ga +realtynet.commercial.hi +realtynet.commercial.ia +realtynet.commercial.id +realtynet.commercial.il +realtynet.commercial.in +realtynet.commercial.ks +realtynet.commercial.ky +realtynet.commercial.ma +realtynet.commercial.md +realtynet.commercial.me +realtynet.commercial.mi +realtynet.commercial.mn +realtynet.commercial.mo +realtynet.commercial.ms +realtynet.commercial.mt +realtynet.commercial.nc +realtynet.commercial.nd +realtynet.commercial.ne +realtynet.commercial.nh +realtynet.commercial.nj +realtynet.commercial.nm +realtynet.commercial.ny +realtynet.commercial.oh +realtynet.commercial.ok +realtynet.commercial.or +realtynet.commercial.pa +realtynet.commercial.ri +realtynet.commercial.sc +realtynet.commercial.sd +realtynet.commercial.tn +realtynet.commercial.tx-northeast +realtynet.commercial.tx-northwest +realtynet.commercial.tx-southeast +realtynet.commercial.tx-southwest +realtynet.commercial.ut +realtynet.commercial.va +realtynet.commercial.vi +realtynet.commercial.vt +realtynet.commercial.wa +realtynet.commercial.wi +realtynet.commercial.wv +realtynet.commercial.wy +realtynet.east +realtynet.general +realtynet.government +realtynet.invest +realtynet.lending +realtynet.mid +realtynet.qa +realtynet.residential +realtynet.south +realtynet.west +rec.animals.wildlife +rec.answers +rec.antiques +rec.antiques.bottles +rec.antiques.marketplace +rec.antiques.radio+phono +rec.aquaria.freshwater.cichlids +rec.aquaria.freshwater.goldfish +rec.aquaria.freshwater.misc +rec.aquaria.freshwater.plants +rec.aquaria.marine.misc +rec.aquaria.marine.reefs +rec.aquaria.marketplace +rec.aquaria.misc +rec.aquaria.tech +rec.arts.animation +rec.arts.anime.creative +rec.arts.anime.fandom +rec.arts.anime.games +rec.arts.anime.info +rec.arts.anime.marketplace +rec.arts.anime.misc +rec.arts.anime.models +rec.arts.anime.music +rec.arts.ascii +rec.arts.bodyart +rec.arts.bonsai +rec.arts.books +rec.arts.books.childrens +rec.arts.books.hist-fiction +rec.arts.books.marketplace +rec.arts.books.reviews +rec.arts.books.tolkien +rec.arts.comics.alternative +rec.arts.comics.creative +rec.arts.comics.dc.lsh +rec.arts.comics.dc.universe +rec.arts.comics.dc.vertigo +rec.arts.comics.elfquest +rec.arts.comics.european +rec.arts.comics.info +rec.arts.comics.marketplace +rec.arts.comics.marvel.universe +rec.arts.comics.marvel.xbooks +rec.arts.comics.misc +rec.arts.comics.other-media +rec.arts.comics.reviews +rec.arts.comics.strips +rec.arts.dance +rec.arts.disney.animation +rec.arts.disney.announce +rec.arts.disney.merchandise +rec.arts.disney.misc +rec.arts.disney.parks +rec.arts.drwho +rec.arts.drwho.info +rec.arts.erotica +rec.arts.fine +rec.arts.henson+muppets +rec.arts.int-fiction +rec.arts.manga +rec.arts.marching.band.college +rec.arts.marching.band.high-school +rec.arts.marching.colorguard +rec.arts.marching.drumcorps +rec.arts.marching.misc +rec.arts.marching.percussion +rec.arts.misc +rec.arts.movies.announce +rec.arts.movies.current-films +rec.arts.movies.erotica +rec.arts.movies.international +rec.arts.movies.lists+surveys +rec.arts.movies.local.indian +rec.arts.movies.misc +rec.arts.movies.movie-going +rec.arts.movies.past-films +rec.arts.movies.people +rec.arts.movies.production +rec.arts.movies.production.sound +rec.arts.movies.reviews +rec.arts.movies.tech +rec.arts.mystery +rec.arts.origami +rec.arts.poems +rec.arts.prose +rec.arts.puppetry +rec.arts.sf.announce +rec.arts.sf.composition +rec.arts.sf.fandom +rec.arts.sf.marketplace +rec.arts.sf.misc +rec.arts.sf.movies +rec.arts.sf.reviews +rec.arts.sf.science +rec.arts.sf.starwars.collecting.customizing +rec.arts.sf.starwars.collecting.misc +rec.arts.sf.starwars.collecting.vintage +rec.arts.sf.starwars.games +rec.arts.sf.starwars.info +rec.arts.sf.starwars.misc +rec.arts.sf.tv +rec.arts.sf.tv.babylon5 +rec.arts.sf.tv.babylon5.info +rec.arts.sf.tv.babylon5.moderated +rec.arts.sf.tv.quantum-leap +rec.arts.sf.written +rec.arts.sf.written.robert-jordan +rec.arts.startrek.current +rec.arts.startrek.fandom +rec.arts.startrek.info +rec.arts.startrek.misc +rec.arts.startrek.reviews +rec.arts.startrek.tech +rec.arts.theatre.misc +rec.arts.theatre.musicals +rec.arts.theatre.plays +rec.arts.theatre.stagecraft +rec.arts.tv +rec.arts.tv.interactive +rec.arts.tv.mst3k.announce +rec.arts.tv.mst3k.misc +rec.arts.tv.soaps.abc +rec.arts.tv.soaps.cbs +rec.arts.tv.soaps.misc +rec.arts.tv.uk.comedy +rec.arts.tv.uk.coronation-st +rec.arts.tv.uk.eastenders +rec.arts.tv.uk.emmerdale +rec.arts.tv.uk.misc +rec.arts.wobegon +rec.audio.car +rec.audio.high-end +rec.audio.marketplace +rec.audio.misc +rec.audio.opinion +rec.audio.pro +rec.audio.tech +rec.audio.tubes +rec.autos.4x4 +rec.autos.antique +rec.autos.driving +rec.autos.makers.chrysler +rec.autos.makers.ford.explorer +rec.autos.makers.ford.mustang +rec.autos.makers.honda +rec.autos.makers.jeep+willys +rec.autos.makers.mazda.miata +rec.autos.makers.saturn +rec.autos.makers.vw.aircooled +rec.autos.makers.vw.watercooled +rec.autos.marketplace +rec.autos.misc +rec.autos.rod-n-custom +rec.autos.rotary +rec.autos.simulators +rec.autos.sport.f1 +rec.autos.sport.indy +rec.autos.sport.info +rec.autos.sport.misc +rec.autos.sport.nascar +rec.autos.sport.rally +rec.autos.sport.tech +rec.autos.tech +rec.aviation.aerobatics +rec.aviation.announce +rec.aviation.answers +rec.aviation.balloon +rec.aviation.hang-gliding +rec.aviation.homebuilt +rec.aviation.ifr +rec.aviation.marketplace +rec.aviation.military +rec.aviation.military.naval +rec.aviation.misc +rec.aviation.owning +rec.aviation.piloting +rec.aviation.powerchutes +rec.aviation.products +rec.aviation.questions +rec.aviation.restoration +rec.aviation.rotorcraft +rec.aviation.simulators +rec.aviation.soaring +rec.aviation.stories +rec.aviation.student +rec.aviation.ultralight +rec.backcountry +rec.bicycles.marketplace +rec.bicycles.misc +rec.bicycles.off-road +rec.bicycles.racing +rec.bicycles.rides +rec.bicycles.soc +rec.bicycles.tech +rec.birds +rec.boats +rec.boats.building +rec.boats.cruising +rec.boats.electronics +rec.boats.marketplace +rec.boats.paddle +rec.boats.racing +rec.boats.racing.power +rec.climbing +rec.collecting +rec.collecting.books +rec.collecting.cards.discuss +rec.collecting.cards.non-sports +rec.collecting.coins +rec.collecting.dolls +rec.collecting.paper-money +rec.collecting.phonecards +rec.collecting.pins +rec.collecting.postal-history +rec.collecting.sport.baseball +rec.collecting.sport.basketball +rec.collecting.sport.football +rec.collecting.sport.hockey +rec.collecting.sport.misc +rec.collecting.stamps +rec.collecting.stamps.discuss +rec.collecting.stamps.marketplace +rec.collecting.villages +rec.crafts.beads +rec.crafts.brewing +rec.crafts.carving +rec.crafts.dollhouses +rec.crafts.glass +rec.crafts.jewelry +rec.crafts.knots +rec.crafts.marketplace +rec.crafts.metalworking +rec.crafts.misc +rec.crafts.polymer-clay +rec.crafts.pottery +rec.crafts.rubberstamps +rec.crafts.textiles.machine-knit +rec.crafts.textiles.marketplace +rec.crafts.textiles.misc +rec.crafts.textiles.needlework +rec.crafts.textiles.quilting +rec.crafts.textiles.sewing +rec.crafts.textiles.yarn +rec.crafts.winemaking +rec.crafts.woodturning +rec.drugs.announce +rec.drugs.cannabis +rec.drugs.chemistry +rec.drugs.misc +rec.drugs.psychedelic +rec.drugs.smart +rec.equestrian +rec.folk-dancing +rec.food.baking +rec.food.chocolate +rec.food.cooking +rec.food.cuisine.jewish +rec.food.drink +rec.food.drink.beer +rec.food.drink.coffee +rec.food.drink.tea +rec.food.equipment +rec.food.historic +rec.food.marketplace +rec.food.preserving +rec.food.recipes +rec.food.restaurants +rec.food.sourdough +rec.food.veg +rec.food.veg.cooking +rec.gambling.blackjack +rec.gambling.blackjack.moderated +rec.gambling.craps +rec.gambling.lottery +rec.gambling.misc +rec.gambling.other-games +rec.gambling.poker +rec.gambling.racing +rec.gambling.sports +rec.games.abstract +rec.games.backgammon +rec.games.board +rec.games.board.ce +rec.games.board.marketplace +rec.games.bolo +rec.games.bridge +rec.games.bridge.okbridge +rec.games.chess.analysis +rec.games.chess.computer +rec.games.chess.misc +rec.games.chess.play-by-email +rec.games.chess.politics +rec.games.chinese-chess +rec.games.computer.doom.announce +rec.games.computer.doom.editing +rec.games.computer.doom.help +rec.games.computer.doom.misc +rec.games.computer.doom.playing +rec.games.computer.puzzle +rec.games.computer.quake.announce +rec.games.computer.quake.editing +rec.games.computer.quake.misc +rec.games.computer.quake.playing +rec.games.computer.quake.quake-c +rec.games.computer.quake.servers +rec.games.computer.stars +rec.games.computer.ultima.dragons +rec.games.computer.ultima.online +rec.games.computer.ultima.series +rec.games.computer.xpilot +rec.games.corewar +rec.games.design +rec.games.diplomacy +rec.games.empire +rec.games.frp.advocacy +rec.games.frp.announce +rec.games.frp.archives +rec.games.frp.cyber +rec.games.frp.dnd +rec.games.frp.gurps +rec.games.frp.industry +rec.games.frp.live-action +rec.games.frp.marketplace +rec.games.frp.misc +rec.games.frp.storyteller +rec.games.frp.super-heroes +rec.games.go +rec.games.int-fiction +rec.games.mahjong +rec.games.mecha +rec.games.miniatures.historical +rec.games.miniatures.misc +rec.games.miniatures.warhammer +rec.games.misc +rec.games.mud.admin +rec.games.mud.announce +rec.games.mud.diku +rec.games.mud.lp +rec.games.mud.misc +rec.games.mud.tiny +rec.games.netrek +rec.games.pbm +rec.games.pinball +rec.games.playing-cards +rec.games.programmer +rec.games.roguelike.adom +rec.games.roguelike.angband +rec.games.roguelike.announce +rec.games.roguelike.development +rec.games.roguelike.misc +rec.games.roguelike.moria +rec.games.roguelike.nethack +rec.games.roguelike.rogue +rec.games.trading-cards.announce +rec.games.trading-cards.jyhad +rec.games.trading-cards.magic.misc +rec.games.trading-cards.magic.rules +rec.games.trading-cards.magic.strategy +rec.games.trading-cards.marketplace.magic.auctions +rec.games.trading-cards.marketplace.magic.sales +rec.games.trading-cards.marketplace.magic.trades +rec.games.trading-cards.marketplace.misc +rec.games.trading-cards.misc +rec.games.trading-cards.startrek +rec.games.trivia +rec.games.vectrex +rec.games.video.3do +rec.games.video.advocacy +rec.games.video.arcade +rec.games.video.arcade.collecting +rec.games.video.arcade.marketplace +rec.games.video.atari +rec.games.video.cd-i +rec.games.video.cd32 +rec.games.video.classic +rec.games.video.marketplace +rec.games.video.misc +rec.games.video.nintendo +rec.games.video.sega +rec.games.video.sony +rec.games.xtank.play +rec.games.xtank.programmer +rec.gardens +rec.gardens.ecosystems +rec.gardens.edible +rec.gardens.orchids +rec.gardens.roses +rec.guns +rec.heraldry +rec.humor +rec.humor.d +rec.humor.funny +rec.humor.funny.reruns +rec.humor.jewish +rec.humor.oracle +rec.humor.oracle.d +rec.hunting +rec.hunting.dogs +rec.juggling +rec.kites +rec.knives +rec.mag +rec.mag.dargon +rec.martial-arts +rec.martial-arts.moderated +rec.misc +rec.models.railroad +rec.models.rc.air +rec.models.rc.helicopter +rec.models.rc.land +rec.models.rc.misc +rec.models.rc.soaring +rec.models.rc.water +rec.models.rockets +rec.models.scale +rec.motorcycles +rec.motorcycles.dirt +rec.motorcycles.harley +rec.motorcycles.racing +rec.motorcycles.tech +rec.music.a-cappella +rec.music.afro-latin +rec.music.ambient +rec.music.arabic +rec.music.artists.amy-grant +rec.music.artists.ani-difranco +rec.music.artists.beach-boys +rec.music.artists.bruce-hornsby +rec.music.artists.danny-elfman +rec.music.artists.debbie-gibson +rec.music.artists.emmylou-harris +rec.music.artists.extreme +rec.music.artists.kings-x +rec.music.artists.kiss +rec.music.artists.mariah-carey +rec.music.artists.paul-mccartney +rec.music.artists.queensryche +rec.music.artists.reb-st-james +rec.music.artists.springsteen +rec.music.artists.stevie-nicks +rec.music.artists.wallflowers +rec.music.beatles +rec.music.beatles.info +rec.music.beatles.moderated +rec.music.bluenote +rec.music.bluenote.blues +rec.music.brazilian +rec.music.celtic +rec.music.christian +rec.music.classical +rec.music.classical.contemporary +rec.music.classical.guitar +rec.music.classical.performing +rec.music.classical.recordings +rec.music.collecting.cd +rec.music.collecting.misc +rec.music.collecting.vinyl +rec.music.compose +rec.music.country.old-time +rec.music.country.western +rec.music.dementia +rec.music.dylan +rec.music.early +rec.music.filipino +rec.music.filk +rec.music.folk +rec.music.folk.tablature +rec.music.funky +rec.music.gaffa +rec.music.gdead +rec.music.hip-hop +rec.music.indian.classical +rec.music.indian.misc +rec.music.industrial +rec.music.info +rec.music.iranian +rec.music.makers +rec.music.makers.bagpipe +rec.music.makers.bands +rec.music.makers.bass +rec.music.makers.bowed-strings +rec.music.makers.builders +rec.music.makers.choral +rec.music.makers.dulcimer +rec.music.makers.french-horn +rec.music.makers.guitar +rec.music.makers.guitar.acoustic +rec.music.makers.guitar.jazz +rec.music.makers.guitar.tablature +rec.music.makers.marketplace +rec.music.makers.percussion +rec.music.makers.percussion.hand-drum +rec.music.makers.piano +rec.music.makers.saxophone +rec.music.makers.songwriting +rec.music.makers.squeezebox +rec.music.makers.synth +rec.music.makers.trumpet +rec.music.marketplace.cd +rec.music.marketplace.misc +rec.music.marketplace.vinyl +rec.music.misc +rec.music.movies +rec.music.newage +rec.music.opera +rec.music.phish +rec.music.progressive +rec.music.promotional +rec.music.ragtime +rec.music.reggae +rec.music.rem +rec.music.reviews +rec.music.rock-pop-r+b.1950s +rec.music.rock-pop-r+b.1960s +rec.music.rock-pop-r+b.1970s +rec.music.theory +rec.music.tori-amos +rec.music.video +rec.nude +rec.org.mensa +rec.org.sca +rec.outdoors.camping +rec.outdoors.fishing +rec.outdoors.fishing.bass +rec.outdoors.fishing.fly +rec.outdoors.fishing.fly.tying +rec.outdoors.fishing.saltwater +rec.outdoors.marketplace +rec.outdoors.national-parks +rec.outdoors.rv-travel +rec.parks.theme +rec.pets +rec.pets.birds +rec.pets.birds.pigeons +rec.pets.cats.anecdotes +rec.pets.cats.announce +rec.pets.cats.community +rec.pets.cats.health+behav +rec.pets.cats.misc +rec.pets.cats.rescue +rec.pets.dogs.activities +rec.pets.dogs.behavior +rec.pets.dogs.breeds +rec.pets.dogs.health +rec.pets.dogs.info +rec.pets.dogs.misc +rec.pets.dogs.rescue +rec.pets.herp +rec.photo.darkroom +rec.photo.digital +rec.photo.equipment.35mm +rec.photo.equipment.large-format +rec.photo.equipment.medium-format +rec.photo.equipment.misc +rec.photo.film+labs +rec.photo.marketplace +rec.photo.misc +rec.photo.moderated +rec.photo.technique.art +rec.photo.technique.misc +rec.photo.technique.nature +rec.photo.technique.people +rec.ponds +rec.puzzles +rec.puzzles.crosswords +rec.pyrotechnics +rec.radio.amateur.antenna +rec.radio.amateur.boatanchors +rec.radio.amateur.digital.misc +rec.radio.amateur.dx +rec.radio.amateur.equipment +rec.radio.amateur.homebrew +rec.radio.amateur.misc +rec.radio.amateur.policy +rec.radio.amateur.space +rec.radio.broadcasting +rec.radio.cb +rec.radio.info +rec.radio.noncomm +rec.radio.scanner +rec.radio.shortwave +rec.radio.swap +rec.roller-coaster +rec.running +rec.scouting.guide+girl +rec.scouting.issues +rec.scouting.misc +rec.scouting.usa +rec.scuba +rec.scuba.equipment +rec.scuba.locations +rec.skiing.alpine +rec.skiing.announce +rec.skiing.backcountry +rec.skiing.marketplace +rec.skiing.nordic +rec.skiing.resorts.europe +rec.skiing.resorts.misc +rec.skiing.resorts.north-america +rec.skiing.snowboard +rec.skydiving +rec.sport.archery +rec.sport.baseball +rec.sport.baseball.analysis +rec.sport.baseball.college +rec.sport.baseball.data +rec.sport.baseball.fantasy +rec.sport.basketball.college +rec.sport.basketball.europe +rec.sport.basketball.misc +rec.sport.basketball.pro +rec.sport.basketball.women +rec.sport.billiard +rec.sport.boxing +rec.sport.cricket +rec.sport.cricket.info +rec.sport.curling +rec.sport.disc +rec.sport.fencing +rec.sport.footbag +rec.sport.football.australian +rec.sport.football.canadian +rec.sport.football.college +rec.sport.football.fantasy +rec.sport.football.misc +rec.sport.football.pro +rec.sport.golf +rec.sport.hockey +rec.sport.hockey.field +rec.sport.jetski +rec.sport.misc +rec.sport.officiating +rec.sport.olympics +rec.sport.orienteering +rec.sport.paintball +rec.sport.pro-wrestling +rec.sport.pro-wrestling.fantasy +rec.sport.pro-wrestling.info +rec.sport.pro-wrestling.moderated +rec.sport.rodeo +rec.sport.rowing +rec.sport.rugby.league +rec.sport.rugby.union +rec.sport.skating.ice.figure +rec.sport.skating.ice.recreational +rec.sport.skating.inline +rec.sport.skating.misc +rec.sport.skating.racing +rec.sport.skating.roller +rec.sport.snowmobiles +rec.sport.soccer +rec.sport.softball +rec.sport.squash +rec.sport.sumo +rec.sport.swimming +rec.sport.table-soccer +rec.sport.table-tennis +rec.sport.tennis +rec.sport.triathlon +rec.sport.unicycling +rec.sport.volleyball +rec.sport.water-polo +rec.sport.waterski +rec.toys.action-figures +rec.toys.action-figures.discuss +rec.toys.action-figures.marketplace +rec.toys.cars +rec.toys.lego +rec.toys.misc +rec.toys.transformers.marketplace +rec.toys.transformers.moderated +rec.toys.vintage +rec.travel.africa +rec.travel.air +rec.travel.asia +rec.travel.australia+nz +rec.travel.bed+breakfast +rec.travel.budget.backpack +rec.travel.caribbean +rec.travel.cruises +rec.travel.europe +rec.travel.latin-america +rec.travel.marketplace +rec.travel.misc +rec.travel.resorts.all-inclusive +rec.travel.usa-canada +rec.video +rec.video.cable-tv +rec.video.desktop +rec.video.desktop.toaster +rec.video.dvd.advocacy +rec.video.dvd.marketplace +rec.video.dvd.misc +rec.video.dvd.players +rec.video.dvd.tech +rec.video.dvd.titles +rec.video.marketplace +rec.video.production +rec.video.professional +rec.video.releases +rec.video.satellite.dbs +rec.video.satellite.europe +rec.video.satellite.misc +rec.video.satellite.tvro +rec.windsurfing +rec.woodworking +relcom-list.internic.net-happenings +relcom.accounting +relcom.ads +relcom.advertising.theory +relcom.answers +relcom.archives +relcom.archives.d +relcom.arts.epic +relcom.arts.magick +relcom.arts.obec.pactet +relcom.arts.photo.img +relcom.arts.qwerty +relcom.auto +relcom.banktech +relcom.cinema +relcom.cinema.soap +relcom.commerce.audio-video +relcom.commerce.chemical +relcom.commerce.communications +relcom.commerce.computers +relcom.commerce.construction +relcom.commerce.consume +relcom.commerce.ctrlsystems +relcom.commerce.energy +relcom.commerce.estate +relcom.commerce.food +relcom.commerce.food.drinks +relcom.commerce.food.sweet +relcom.commerce.household +relcom.commerce.infoserv +relcom.commerce.jobs +relcom.commerce.machinery +relcom.commerce.medicine +relcom.commerce.mega.comp +relcom.commerce.mega.tech +relcom.commerce.metals +relcom.commerce.money +relcom.commerce.orgtech +relcom.commerce.other +relcom.commerce.publishing +relcom.commerce.raw-materials +relcom.commerce.reckoning +relcom.commerce.software +relcom.commerce.software.demo +relcom.commerce.stocks +relcom.commerce.talk +relcom.commerce.tobacco +relcom.commerce.tour +relcom.commerce.tradeserv +relcom.commerce.transport +relcom.comp.ai +relcom.comp.animation +relcom.comp.binaries +relcom.comp.binaries.d +relcom.comp.clarion +relcom.comp.crosstools +relcom.comp.dbms.clipper +relcom.comp.dbms.foxpro +relcom.comp.dbms.oracle +relcom.comp.dbms.powerbuilder +relcom.comp.dbms.vista +relcom.comp.gis +relcom.comp.lan +relcom.comp.lan.wanted +relcom.comp.lang.basic +relcom.comp.lang.c-c++ +relcom.comp.lang.forth +relcom.comp.lang.pascal +relcom.comp.lang.pascal.misc +relcom.comp.lang.perl +relcom.comp.law +relcom.comp.newmedia +relcom.comp.os.cmp +relcom.comp.os.os2 +relcom.comp.os.os2.comm +relcom.comp.os.os2.drv +relcom.comp.os.os2.faq.d +relcom.comp.os.os2.marginal +relcom.comp.os.os2.prog +relcom.comp.os.os2.src +relcom.comp.os.os2.wanted +relcom.comp.os.unix +relcom.comp.os.vms +relcom.comp.os.windows +relcom.comp.os.windows.nt +relcom.comp.os.windows.prog +relcom.comp.security +relcom.comp.software-eng +relcom.comp.sources.d +relcom.comp.sources.misc +relcom.comp.speccy +relcom.comp.virus +relcom.consumers +relcom.culture.ministry +relcom.culture.ministry.art +relcom.culture.ministry.library +relcom.culture.ministry.memorial +relcom.culture.ministry.region +relcom.culture.ministry.social +relcom.culture.underground +relcom.currency +relcom.dtp +relcom.ecology +relcom.education +relcom.expo +relcom.extro +relcom.fantasy +relcom.fido.adinf.support +relcom.fido.flirt +relcom.fido.mo.phystech +relcom.fido.mo.sails +relcom.fido.ru.acad +relcom.fido.ru.baby +relcom.fido.ru.fax +relcom.fido.ru.hacker +relcom.fido.ru.java +relcom.fido.ru.linux +relcom.fido.ru.military +relcom.fido.ru.modem +relcom.fido.ru.networks +relcom.fido.ru.notes +relcom.fido.ru.photo +relcom.fido.ru.rsbank +relcom.fido.ru.shell.dn +relcom.fido.ru.strack +relcom.fido.ru.thelema +relcom.fido.ru.unix +relcom.fido.ru.unix.bsd +relcom.fido.ru.yachting +relcom.fido.ru.znatok +relcom.fido.su.astroclub +relcom.fido.su.astronomy +relcom.fido.su.books +relcom.fido.su.c-c++ +relcom.fido.su.c-c++.visualage +relcom.fido.su.dbms +relcom.fido.su.dbms.borland +relcom.fido.su.dbms.hytech +relcom.fido.su.dbms.interbase +relcom.fido.su.dbms.sql +relcom.fido.su.forth +relcom.fido.su.general +relcom.fido.su.hardw +relcom.fido.su.magic +relcom.fido.su.softw +relcom.fido.su.tolkien +relcom.fido.su.virus +relcom.games +relcom.games.big +relcom.games.pbem +relcom.glb +relcom.hot-news +relcom.humor +relcom.humor.lus +relcom.kids +relcom.lan +relcom.lan.prog +relcom.maps +relcom.medicine.blood-service +relcom.msdos +relcom.music +relcom.netnews +relcom.netnews.big +relcom.newusers +relcom.penpals +relcom.politics +relcom.postmasters +relcom.postmasters.d +relcom.radio +relcom.radio.diagrams +relcom.radio.ham +relcom.railways +relcom.rec.flirt +relcom.rec.puzzles +relcom.rec.puzzles.aux +relcom.rec.tourism +relcom.relarn.general +relcom.relarn.science +relcom.religion +relcom.sci.libraries +relcom.sci.philosophy +relcom.talk +relcom.talk.sport +relcom.tcpip +relcom.technology +relcom.terms +relcom.test +relcom.triz +relcom.video +relcom.wheels +relcom.wtc +relcom.www.support +relcom.www.users +relcom.x +revue.rrze.test +rhein.unibn.rhrz.aktuelles +rhein.unibn.rhrz.misc +ri.admin +ri.general +ri.k12.experiences +ri.k12.providers.funding +ri.k12.providers.staff +ri.k12.providers.tech +ri.k12.socialstudies +ri.politics +ri.test +rich.buysell +roanoke.community-news +roanoke.news-talk +roanoke.talk +robin.advocacy +robin.bla +robin.gate +robin.logs +robin.lsmpf +robin.lyrik +robin.main +robin.maps +robin.spiele +robin.test +robin.uni +ru.general +ruhr.infosystems +saar.admin.archiv +saar.admin.mail +saar.admin.news +saar.alt.crosspoint +saar.alt.droehn +saar.alt.fan.oskar +saar.alt.fan.torstenb +saar.alt.geruechte +saar.alt.vga-planets +saar.comp.infosysteme +saar.comp.misc +saar.comp.os.linux +saar.comp.os.os2 +saar.general +saar.hilfe +saar.htw +saar.lists.fvwm +saar.lists.hpv +saar.lists.linux-m68k +saar.lists.sun-managers +saar.markt.arbeit +saar.markt.bazar +saar.markt.gewerbe +saar.markt.mfg +saar.markt.wohnung +saar.org.handshake.aktuell +saar.org.handshake.diskussion +saar.org.handshake.gastinfo +saar.org.handshake.hilfe +saar.org.handshake.offizielles +saar.org.ip.general +saar.org.ip.hom +saar.org.ip.intern.in-info +saar.org.ip.intern.sex-am-staden +saar.org.ip.praesidium +saar.org.ip.sb +saar.org.ip.sls +saar.org.mpii +saar.rec.humor +saar.rec.kino +saar.rec.kultur +saar.rec.misc +saar.rec.rollenspiele +saar.rec.sport +saar.soc.misc +saar.soc.politik +saar.soc.singles +saar.soc.umwelt +saar.stammtisch +saar.test +saar.uni.admin +saar.uni.fachschaft.informatik +saar.uni.fachschaft.misc +saar.uni.infowiss +saar.uni.mensa +saar.uni.misc +saar.uni.misswirtschaft +saar.uni.rz.misc +saar.uni.rz.stud +saar.uni.studium +saar.uni.vortraege +sac.announce +sac.csus +sac.general +sac.internet +sac.jobs +sac.motts +sac.music +sac.politics +sac.singles +sac.sports +sac.swap +sac.test +sachsnet.chemnitz.land +sachsnet.chemnitz.stadt +sachsnet.dresden.oberlausitz +sachsnet.dresden.stadt +sachsnet.forum.diskussion +sachsnet.hobby.allgemeines +sachsnet.hobby.clubs +sachsnet.hobby.computer.amiga +sachsnet.hobby.computer.dfue +sachsnet.hobby.computer.ibm +sachsnet.hobby.computer.robotron +sachsnet.hobby.kino +sachsnet.hobby.sport +sachsnet.kleinanzeigen.biete +sachsnet.kleinanzeigen.suche +sachsnet.kleinanzeigen.werbung +sachsnet.kontakte +sachsnet.kultur +sachsnet.leipzig.land +sachsnet.leipzig.stadt +sachsnet.musik +sachsnet.sachsen +sachsnet.spass +sanet.adverts +sanet.announce +sanet.config +sanet.flame +sanet.fun +sanet.ibmpc +sanet.lang.c +sanet.maps +sanet.modems +sanet.monty-python +sanet.newsletters +sanet.newsletters.d +sanet.radio.packet +sanet.sources.d +sanet.talk.politics +sanet.talk.religion +sanet.tech +sanet.test +sanet.uniforum +sanet.unix.questions +sanet.unix.sources +sanet.unix.talk +sat.announce +sat.eff +sat.food +sat.forsale +sat.general +sat.jobs +sat.music +sat.personals +sat.test +sat.usenet.config +sbay.forsale +sbay.general +sbay.hams +sbay.linux +sbay.news.config +sbay.news.group +sbay.news.stats +sbay.sports +sbay.test +sbay.waffle +schl.kids.kidcafe +schl.sig.k12admin +schl.sig.lmnet +schl.sig.tag +school.config +school.general +school.project.esp +school.project.pluto +school.pupils +school.subjects.humanities +school.subjects.languages +school.subjects.science +school.teachers +school.test +schule.admin +schule.berufsbildung.innovationen +schule.informatik +schule.internet.einsatz +schule.internet.technik +schule.klassenfahrten +schule.schueler.forum +schule.umwelt.aerodata +schule.umwelt.globe-g +schule.umwelt.terradata +schule.verwaltung +sci.aeronautics +sci.aeronautics.airliners +sci.aeronautics.simulation +sci.agriculture +sci.agriculture.beekeeping +sci.agriculture.fruit +sci.agriculture.poultry +sci.agriculture.ratites +sci.answers +sci.anthropology +sci.anthropology.paleo +sci.aquaria +sci.archaeology +sci.archaeology.mesoamerican +sci.archaeology.moderated +sci.astro +sci.astro.amateur +sci.astro.ccd-imaging +sci.astro.fits +sci.astro.hubble +sci.astro.planetarium +sci.astro.research +sci.astro.satellites.visual-observe +sci.bio.botany +sci.bio.conservation +sci.bio.ecology +sci.bio.entomology.homoptera +sci.bio.entomology.lepidoptera +sci.bio.entomology.misc +sci.bio.ethology +sci.bio.evolution +sci.bio.fisheries +sci.bio.food-science +sci.bio.herp +sci.bio.immunocytochem +sci.bio.microbiology +sci.bio.misc +sci.bio.paleontology +sci.bio.phytopathology +sci.bio.systematics +sci.bio.technology +sci.chem +sci.chem.analytical +sci.chem.coatings +sci.chem.electrochem +sci.chem.electrochem.battery +sci.chem.labware +sci.chem.organic.synthesis +sci.chem.organomet +sci.cognitive +sci.comp-aided +sci.cryonics +sci.crypt +sci.crypt.research +sci.data.formats +sci.econ +sci.econ.research +sci.edu +sci.electronics.basics +sci.electronics.cad +sci.electronics.components +sci.electronics.design +sci.electronics.equipment +sci.electronics.misc +sci.electronics.repair +sci.energy +sci.energy.hydrogen +sci.engr +sci.engr.analysis +sci.engr.biomed +sci.engr.chem +sci.engr.civil +sci.engr.color +sci.engr.control +sci.engr.electrical.compliance +sci.engr.electrical.sys-protection +sci.engr.geomechanics +sci.engr.heat-vent-ac +sci.engr.joining.misc +sci.engr.joining.welding +sci.engr.lighting +sci.engr.manufacturing +sci.engr.marine.hydrodynamics +sci.engr.mech +sci.engr.metallurgy +sci.engr.micromachining +sci.engr.mining +sci.engr.safety +sci.engr.semiconductors +sci.engr.surveying +sci.engr.television.advanced +sci.engr.television.broadcast +sci.environment +sci.environment.waste +sci.finance.abstracts +sci.fractals +sci.geo.earthquakes +sci.geo.eos +sci.geo.fluids +sci.geo.geology +sci.geo.hydrology +sci.geo.meteorology +sci.geo.mineralogy +sci.geo.oceanography +sci.geo.petroleum +sci.geo.rivers+lakes +sci.geo.satellite-nav +sci.image.processing +sci.lang +sci.lang.japan +sci.lang.translation +sci.lang.translation.marketplace +sci.life-extension +sci.logic +sci.materials +sci.materials.ceramics +sci.math +sci.math.num-analysis +sci.math.research +sci.math.symbolic +sci.mech.fluids +sci.med +sci.med.aids +sci.med.cannabis +sci.med.cardiology +sci.med.dentistry +sci.med.diseases.als +sci.med.diseases.cancer +sci.med.diseases.hepatitis +sci.med.diseases.lyme +sci.med.diseases.osteoporosis +sci.med.immunology +sci.med.informatics +sci.med.laboratory +sci.med.midwifery +sci.med.nursing +sci.med.nutrition +sci.med.obgyn +sci.med.occupational +sci.med.orthopedics +sci.med.pathology +sci.med.pharmacy +sci.med.physics +sci.med.prostate.bph +sci.med.prostate.cancer +sci.med.prostate.prostatitis +sci.med.psychobiology +sci.med.radiology +sci.med.radiology.interventional +sci.med.telemedicine +sci.med.transcription +sci.med.vision +sci.military.moderated +sci.military.naval +sci.misc +sci.nanotech +sci.nonlinear +sci.op-research +sci.optics +sci.optics.fiber +sci.philosophy.meta +sci.philosophy.tech +sci.physics +sci.physics.accelerators +sci.physics.computational.fluid-dynamics +sci.physics.cond-matter +sci.physics.electromag +sci.physics.fusion +sci.physics.particle +sci.physics.plasma +sci.physics.relativity +sci.physics.research +sci.polymers +sci.psychology.announce +sci.psychology.consciousness +sci.psychology.journals.psyche +sci.psychology.journals.psycoloquy +sci.psychology.misc +sci.psychology.personality +sci.psychology.psychotherapy +sci.psychology.psychotherapy.moderated +sci.psychology.research +sci.psychology.theory +sci.research +sci.research.careers +sci.research.postdoc +sci.skeptic +sci.space.history +sci.space.news +sci.space.policy +sci.space.science +sci.space.shuttle +sci.space.tech +sci.stat.consult +sci.stat.edu +sci.stat.math +sci.systems +sci.techniques.mag-resonance +sci.techniques.mass-spec +sci.techniques.microscopy +sci.techniques.spectroscopy +sci.techniques.testing.misc +sci.techniques.testing.nondestructive +sci.techniques.xtallography +sci.virtual-worlds +sco.forsale +sco.opendesktop +scot.announce +scot.bairns +scot.birds +scot.environment +scot.followup +scot.general +scot.jobs +scot.politics +scot.scots +scot.sports.soccer +scot.test +scruz.config +scruz.events +scruz.general +scruz.market +scruz.poetry +scruz.politics +scruz.sysops +scruz.test +scruz.transportation +sdnet.books +sdnet.cablemodems +sdnet.cerfnet +sdnet.computing +sdnet.config +sdnet.crl +sdnet.eats +sdnet.events +sdnet.forsale +sdnet.freenet +sdnet.general +sdnet.hemp +sdnet.housing +sdnet.jobs +sdnet.jobs.discuss +sdnet.jobs.offered +sdnet.jobs.services +sdnet.jobs.wanted +sdnet.lit +sdnet.misc +sdnet.motss +sdnet.movies +sdnet.music +sdnet.next +sdnet.personals +sdnet.politics +sdnet.real-estate +sdnet.real-estate.agents +sdnet.rideshare +sdnet.seminars +sdnet.singles +sdnet.sports +sdnet.test +sdnet.theatre +sdnet.tv +sdnet.waffle +sdnet.wanted +sdnet.weather +sdnet.wireless.pcs +sdnet.writing +sdsu.c++ +sdsu.cs520 +sdsu.cs560 +sdsu.cs596 +sdsu.cs662 +se.internet.news.diskussion +se.internet.news.meddelanden +se.test +seattle.admin +seattle.business +seattle.eats +seattle.forsale.computers +seattle.forsale.housing +seattle.forsale.misc +seattle.forsale.transportation +seattle.freenet.scn +seattle.gay.news +seattle.general +seattle.jobs.offered +seattle.jobs.wanted +seattle.politics +seattle.test +seismic.general +sfnet.aloittelijat.kysymykset +sfnet.aloittelijat.testit +sfnet.alueet.suur-helsinki +sfnet.arkistot.ftp +sfnet.arkistot.halutaan +sfnet.atk +sfnet.atk.4dos +sfnet.atk.amiga +sfnet.atk.atari +sfnet.atk.cad +sfnet.atk.cbm +sfnet.atk.cpm +sfnet.atk.grafiikka +sfnet.atk.kannettavat +sfnet.atk.kerhot +sfnet.atk.kulttuuri +sfnet.atk.laitteet +sfnet.atk.laitteet.pc +sfnet.atk.linux +sfnet.atk.mac +sfnet.atk.ms-dos +sfnet.atk.ms-windows +sfnet.atk.nextstep +sfnet.atk.nt +sfnet.atk.ohjelmistot +sfnet.atk.ohjelmointi +sfnet.atk.ohjelmointi.alkeet +sfnet.atk.os2 +sfnet.atk.sodat +sfnet.atk.tex +sfnet.atk.turvallisuus +sfnet.atk.unix +sfnet.atk.varoitus +sfnet.atk.vms +sfnet.atk.yllapito +sfnet.checkgroups +sfnet.csc +sfnet.csc.tiedotukset +sfnet.funet.tiedotukset +sfnet.fuug.tiedotukset +sfnet.harrastus +sfnet.harrastus.aseet +sfnet.harrastus.astronomia +sfnet.harrastus.audio+video +sfnet.harrastus.audio+video.autohifi +sfnet.harrastus.autot +sfnet.harrastus.autovanhukset +sfnet.harrastus.biljardi +sfnet.harrastus.dx-kuuntelu +sfnet.harrastus.elektroniikka +sfnet.harrastus.elokuvat +sfnet.harrastus.filatelia +sfnet.harrastus.fillarit +sfnet.harrastus.ham +sfnet.harrastus.ilmailu +sfnet.harrastus.itsepuolustus +sfnet.harrastus.kalastus +sfnet.harrastus.kiipeily +sfnet.harrastus.kirjoittaminen +sfnet.harrastus.kulttuuri +sfnet.harrastus.kulttuuri.sarjakuvat +sfnet.harrastus.kulttuuri.sf +sfnet.harrastus.lemmikit.akvaario +sfnet.harrastus.lemmikit.muut +sfnet.harrastus.linnut +sfnet.harrastus.melonta +sfnet.harrastus.mensa +sfnet.harrastus.metsastys +sfnet.harrastus.mp +sfnet.harrastus.musiikki +sfnet.harrastus.musiikki.klassinen +sfnet.harrastus.nisakas +sfnet.harrastus.partio +sfnet.harrastus.pelit +sfnet.harrastus.pelit.go +sfnet.harrastus.pelit.kerailykortit +sfnet.harrastus.pelit.rooli +sfnet.harrastus.pelit.shakki +sfnet.harrastus.pelit.strategia +sfnet.harrastus.perhoset +sfnet.harrastus.puutarha +sfnet.harrastus.rahapelit +sfnet.harrastus.retkeily +sfnet.harrastus.ruoka+juoma +sfnet.harrastus.sienet +sfnet.harrastus.sukellus +sfnet.harrastus.sukututkimus +sfnet.harrastus.tanssi +sfnet.harrastus.valokuvaus +sfnet.harrastus.veneet +sfnet.harrastus.viinit +sfnet.harrastus.visailu +sfnet.huuhaa +sfnet.ieee +sfnet.keskustelu +sfnet.keskustelu.avaruus +sfnet.keskustelu.eu +sfnet.keskustelu.evoluutio +sfnet.keskustelu.filosofia +sfnet.keskustelu.foreigners +sfnet.keskustelu.homo-lesbo-bi +sfnet.keskustelu.huumeet +sfnet.keskustelu.huumori +sfnet.keskustelu.ihmissuhteet +sfnet.keskustelu.kieli +sfnet.keskustelu.koulutus +sfnet.keskustelu.kuluttaja +sfnet.keskustelu.laki +sfnet.keskustelu.lapset +sfnet.keskustelu.libertarismi +sfnet.keskustelu.liikenne +sfnet.keskustelu.liikenne.julkinen +sfnet.keskustelu.maanpuolustus +sfnet.keskustelu.maatalous +sfnet.keskustelu.museot +sfnet.keskustelu.perhejuhlat +sfnet.keskustelu.pk-yritykset +sfnet.keskustelu.politiikka +sfnet.keskustelu.psykologia +sfnet.keskustelu.rajatieteet +sfnet.keskustelu.rakentaminen +sfnet.keskustelu.seksi +sfnet.keskustelu.sivarit +sfnet.keskustelu.skeptismi +sfnet.keskustelu.syrjinta +sfnet.keskustelu.taide +sfnet.keskustelu.talous +sfnet.keskustelu.terveys +sfnet.keskustelu.tietoverkot +sfnet.keskustelu.ulkonako +sfnet.keskustelu.uskonto +sfnet.keskustelu.uskonto.kristinusko +sfnet.keskustelu.uutiset +sfnet.keskustelu.varaventtiili +sfnet.keskustelu.vegetaristit +sfnet.keskustelu.viestinta +sfnet.keskustelu.vitsit +sfnet.keskustelu.yhteiskunta +sfnet.keskustelu.ymparisto +sfnet.lists.allegro-cl +sfnet.lists.bind +sfnet.lists.test +sfnet.matkustaminen +sfnet.nocem +sfnet.opiskelu +sfnet.opiskelu.etaopetus +sfnet.opiskelu.kult +sfnet.opiskelu.opintotuki +sfnet.opiskelu.sospsyk +sfnet.opiskelu.ymp +sfnet.opiskelu.ymp.kurssit +sfnet.ryhmat+listat +sfnet.tapahtumat +sfnet.test +sfnet.tiede +sfnet.tiede.arkeologia +sfnet.tiede.astronomia +sfnet.tiede.bio +sfnet.tiede.didaktiikka +sfnet.tiede.filologia.englanti +sfnet.tiede.fysiikka +sfnet.tiede.geofysiikka +sfnet.tiede.historia +sfnet.tiede.hypermedia +sfnet.tiede.kasvatus +sfnet.tiede.kemia +sfnet.tiede.kielitiede +sfnet.tiede.kirjastot +sfnet.tiede.kulttutk +sfnet.tiede.laake.kemia.kliininen +sfnet.tiede.maantiede +sfnet.tiede.matematiikka +sfnet.tiede.metsantutkimus +sfnet.tiede.nonlinear +sfnet.tiede.tekoaly +sfnet.tiede.tietokannat.tuhti +sfnet.tiede.tietotekniikka +sfnet.tiede.tietotekniikka.tohtorix +sfnet.tiede.tilastotiede +sfnet.tiede.vedet +sfnet.tiede.yhdyskuntaslu +sfnet.tiede.yt.info +sfnet.tiede.yt.kurssit +sfnet.tiede.yt.kvaltut +sfnet.tiede.yt.metodit +sfnet.tiede.yt.yleis +sfnet.tiedostot +sfnet.tietoliikenne +sfnet.tietoliikenne.katko +sfnet.tietoliikenne.palvelimet +sfnet.tietoliikenne.tekniikka +sfnet.tietoliikenne.televerkot +sfnet.tietoliikenne.tilastot +sfnet.tietoliikenne.viestinviejat +sfnet.tori.asunnot +sfnet.tori.kyydit +sfnet.tori.muut +sfnet.tori.myydaan.atk +sfnet.tori.myydaan.menopelit +sfnet.tori.myydaan.musiikki +sfnet.tori.myydaan.muut +sfnet.tori.myydaan.video +sfnet.tori.ostetaan.atk +sfnet.tori.ostetaan.menopelit +sfnet.tori.ostetaan.musiikki +sfnet.tori.ostetaan.muut +sfnet.tori.ostetaan.video +sfnet.tori.seura +sfnet.tori.tyopaikat +sfnet.tori.tyopaikat.halutaan +sfnet.tori.tyopaikat.tarjotaan +sfnet.tori.uutuudet +sfnet.urheilu +sfnet.urheilu.jaakiekko +sfnet.urheilu.jalkapallo +sfnet.urheilu.judo +sfnet.urheilu.paintball +sfnet.urheilu.pesapallo +sfnet.urheilu.rullaluistelu +sfnet.urheilu.salibandy +sfnet.urheilu.sulkapallo +sfnet.urheilu.suunnistus +sfnet.urheilu.yleisurheilu +sfnet.viestinta +sfnet.viestinta.irc +sfnet.viestinta.journalismi +sfnet.viestinta.meili +sfnet.viestinta.nyyssit +sfnet.viestinta.radio +sfnet.viestinta.roskapostit +sfnet.viestinta.tv +sfnet.viestinta.tv.babylon5 +sfnet.viestinta.www +sfnet.viestinta.www.uutuudet +sg.announce +sg.comp.mac +sg.comp.os2 +sg.comp.win31 +sg.comp.win95 +sg.consumers +sg.general +sg.jobs.offer +sg.marketplace +sg.online-service +sg.rec.tv +sg.research.general +sg.research.software +sg.test +sh.admin +shout.general +shout.help +si.alt.filatelija +si.org.edus.mss.devetletka +si.org.zrss.ro.anglescina +si.org.zrss.ro.lesarstvo +si.org.zrss.ro.ravnatelj +si.org.zveza.tabornikov +si.org.zveza.tabornikov.tabor +sk.comp.asm +sk.comp.business +sk.comp.cecko +sk.comp.pascal +sk.comp.pc-prog +sk.comp.security +sk.comp.software +sk.comp.unix-prog +sk.didaktika.informatika +sk.didaktika.kms +sk.misc.burza +sk.net.abuse +sk.net.announce +sk.net.gopher +sk.net.news +sk.net.www +sk.politics.conservativism +sk.politics.liberal +sk.rec.hockey +sk.rec.hudba +sk.rec.sport +sk.rec.tatry +sk.sanet.services +sk.sci.astro +sk.sux.microsoft +sk.talk.adnd +sk.talk.drd +sk.talk.fltsk +sk.talk.irc +sk.talk.karmel +sk.talk.mst +sk.talk.slovak-world +sk.talk.users +sk.talk.vtip +slac.announce.important +slac.announce.outages.lan +slac.announce.outages.mac +slac.announce.outages.network +slac.announce.outages.wan +slac.announce.scs +slac.announce.slacvm +slac.announce.slacvx +slac.announce.unixhub +slac.aps.news +slac.b-factory.2gamma +slac.b-factory.calorimeter +slac.b-factory.comp +slac.b-factory.ir +slac.b-factory.magnet +slac.b-factory.parameters +slac.b-factory.particleid +slac.b-factory.physics +slac.b-factory.tracking +slac.b-factory.vertex +slac.bes.status +slac.bsd.cqi +slac.bsd.minutes +slac.building-mgr +slac.ccg.minutes +slac.cesr.news +slac.comp.computefarm +slac.comp.nt.admin +slac.comp.nt.users +slac.database.oracle +slac.database.spires +slac.database.spires.eldreq +slac.e142.minutes +slac.eld.fbsim +slac.emergency-ops +slac.esh.escorts +slac.general +slac.group-c.general +slac.groups +slac.jobs +slac.lang.c +slac.lang.c++ +slac.lang.fortran +slac.lang.maple +slac.lang.pascal +slac.lang.postscript +slac.lang.rexx +slac.library.hepths +slac.library.ppf +slac.library.ppf.string +slac.listserv.sldphy-l +slac.market +slac.net.usenet +slac.networks +slac.news.stats +slac.newusers.unix +slac.physapps.cernlib +slac.rec.books +slac.rec.food +slac.rec.garden +slac.rec.ham_radio +slac.rec.health +slac.rec.music +slac.scs.ibm-pc +slac.scs.minutes +slac.scs.sitewide +slac.scs.tigerteam +slac.scs.trips +slac.seminars.comp +slac.seminars.physics +slac.silicon.tracking +slac.slacvx +slac.slc.news +slac.slc.polariz +slac.slc.reports +slac.sld.ida3 +slac.sld.lacsoft +slac.sld.newusers.taskforce +slac.sld.offline.minutes +slac.sluo.computing.minutes +slac.sluo.minutes +slac.snowmass.proceedings +slac.soc.women +slac.ssc.news +slac.tau-charm.comp +slac.tau-charm.detector +slac.test +slac.test.mod +slac.text.frame +slac.text.tex +slac.users.aix +slac.users.amiga +slac.users.ecad +slac.users.excel +slac.users.ibm-pc +slac.users.mac +slac.users.ncd +slac.users.next +slac.users.unix +slac.users.windows.x +slac.vcg.minutes +slac.vm.pipelines +slo.biz.computers +slo.biz.misc +slo.config +slo.flame +slo.for-sale +slo.games +slo.general +slo.housing +slo.humor +slo.ibm-pc +slo.jobs +slo.mac +slo.music +slo.net +slo.personals +slo.politics +slo.punks +slo.rideshare +slo.scifi +slo.sex +slo.stats +slo.sun +slo.test +slo.unix +slo.unix.linux +slo.www +soc.adoption.adoptees +soc.adoption.parenting +soc.answers +soc.atheism +soc.bi +soc.college +soc.college.admissions +soc.college.financial-aid +soc.college.grad +soc.college.gradinfo +soc.college.org.aiesec +soc.college.teaching-asst +soc.couples +soc.couples.intercultural +soc.couples.wedding +soc.culture.afghanistan +soc.culture.african +soc.culture.african.american +soc.culture.african.american.moderated +soc.culture.albanian +soc.culture.algeria +soc.culture.arabic +soc.culture.argentina +soc.culture.asean +soc.culture.asian.american +soc.culture.assyrian +soc.culture.asturies +soc.culture.australian +soc.culture.austria +soc.culture.baltics +soc.culture.bangladesh +soc.culture.basque +soc.culture.belarus +soc.culture.belgium +soc.culture.bengali +soc.culture.berber +soc.culture.bolivia +soc.culture.bosna-herzgvna +soc.culture.brazil +soc.culture.breton +soc.culture.british +soc.culture.bulgaria +soc.culture.burma +soc.culture.cambodia +soc.culture.canada +soc.culture.caribbean +soc.culture.catalan +soc.culture.celtic +soc.culture.chile +soc.culture.china +soc.culture.colombia +soc.culture.cornish +soc.culture.costa-rica +soc.culture.croatia +soc.culture.cuba +soc.culture.czecho-slovak +soc.culture.dominican-rep +soc.culture.ecuador +soc.culture.egyptian +soc.culture.el-salvador +soc.culture.esperanto +soc.culture.estonia +soc.culture.ethiopia.misc +soc.culture.ethiopia.moderated +soc.culture.europe +soc.culture.filipino +soc.culture.french +soc.culture.galiza +soc.culture.german +soc.culture.greek +soc.culture.guinea-conakry +soc.culture.haiti +soc.culture.hawaii +soc.culture.hmong +soc.culture.honduras +soc.culture.hongkong +soc.culture.hongkong.entertainment +soc.culture.indian +soc.culture.indian.delhi +soc.culture.indian.gujarati +soc.culture.indian.info +soc.culture.indian.jammu-kashmir +soc.culture.indian.karnataka +soc.culture.indian.kerala +soc.culture.indian.marathi +soc.culture.indian.telugu +soc.culture.indonesia +soc.culture.intercultural +soc.culture.iranian +soc.culture.iraq +soc.culture.irish +soc.culture.israel +soc.culture.italian +soc.culture.japan +soc.culture.japan.moderated +soc.culture.jewish +soc.culture.jewish.holocaust +soc.culture.jewish.parenting +soc.culture.jordan +soc.culture.kenya +soc.culture.korean +soc.culture.kurdish +soc.culture.kuwait +soc.culture.kuwait.moderated +soc.culture.laos +soc.culture.latin-america +soc.culture.lebanon +soc.culture.liberia +soc.culture.maghreb +soc.culture.magyar +soc.culture.malagasy +soc.culture.malaysia +soc.culture.mexican +soc.culture.mexican.american +soc.culture.misc +soc.culture.mongolian +soc.culture.native +soc.culture.nepal +soc.culture.netherlands +soc.culture.new-zealand +soc.culture.nicaragua +soc.culture.nigeria +soc.culture.nordic +soc.culture.occitan +soc.culture.pacific-island +soc.culture.pakistan +soc.culture.pakistan.education +soc.culture.pakistan.history +soc.culture.pakistan.moderated +soc.culture.pakistan.politics +soc.culture.pakistan.religion +soc.culture.pakistan.sports +soc.culture.palestine +soc.culture.peru +soc.culture.polish +soc.culture.portuguese +soc.culture.puerto-rico +soc.culture.punjab +soc.culture.quebec +soc.culture.rep-of-georgia +soc.culture.romanian +soc.culture.russian +soc.culture.russian.moderated +soc.culture.scientists +soc.culture.scottish +soc.culture.sierra-leone +soc.culture.singapore +soc.culture.singapore.moderated +soc.culture.slovenia +soc.culture.somalia +soc.culture.south-africa +soc.culture.south-africa.afrikaans +soc.culture.soviet +soc.culture.spain +soc.culture.sri-lanka +soc.culture.swiss +soc.culture.syria +soc.culture.taiwan +soc.culture.tamil +soc.culture.thai +soc.culture.turkish +soc.culture.turkish.moderated +soc.culture.ukrainian +soc.culture.uruguay +soc.culture.usa +soc.culture.venezuela +soc.culture.vietnamese +soc.culture.welsh +soc.culture.yugoslavia +soc.culture.zimbabwe +soc.feminism +soc.genealogy.african +soc.genealogy.australia+nz +soc.genealogy.benelux +soc.genealogy.britain +soc.genealogy.computing +soc.genealogy.french +soc.genealogy.german +soc.genealogy.hispanic +soc.genealogy.ireland +soc.genealogy.italian +soc.genealogy.jewish +soc.genealogy.marketplace +soc.genealogy.medieval +soc.genealogy.methods +soc.genealogy.misc +soc.genealogy.nordic +soc.genealogy.slavic +soc.genealogy.surnames.britain +soc.genealogy.surnames.canada +soc.genealogy.surnames.german +soc.genealogy.surnames.global +soc.genealogy.surnames.ireland +soc.genealogy.surnames.misc +soc.genealogy.surnames.usa +soc.genealogy.west-indies +soc.history +soc.history.african.biafra +soc.history.ancient +soc.history.living +soc.history.medieval +soc.history.moderated +soc.history.science +soc.history.war.misc +soc.history.war.us-civil-war +soc.history.war.us-revolution +soc.history.war.vietnam +soc.history.war.world-war-ii +soc.history.what-if +soc.libraries.talk +soc.men +soc.misc +soc.motss +soc.net-people +soc.org.freemasonry +soc.org.nonprofit +soc.org.service-clubs.misc +soc.penpals +soc.personals +soc.politics +soc.politics.anti-fascism +soc.politics.arms-d +soc.politics.marxism +soc.religion.bahai +soc.religion.christian +soc.religion.christian.bible-study +soc.religion.christian.promisekeepers +soc.religion.christian.youth-work +soc.religion.eastern +soc.religion.gnosis +soc.religion.hindu +soc.religion.islam +soc.religion.mormon +soc.religion.paganism +soc.religion.quaker +soc.religion.shamanism +soc.religion.sikhism +soc.religion.unitarian-univ +soc.religion.vaishnava +soc.retirement +soc.rights.human +soc.senior.health+fitness +soc.senior.issues +soc.sexuality.general +soc.sexuality.spanking +soc.singles +soc.singles.moderated +soc.subculture.bondage-bdsm +soc.subculture.bondage-bdsm.femdom +soc.subculture.expatriate +soc.support.depression.crisis +soc.support.depression.family +soc.support.depression.manic +soc.support.depression.misc +soc.support.depression.seasonal +soc.support.depression.treatment +soc.support.fat-acceptance +soc.support.loneliness +soc.support.pregnancy.loss +soc.support.transgendered +soc.support.youth.gay-lesbian-bi +soc.veterans +soc.women +soc.women.lesbian-and-bi +spb.test +sqnt-public.forsale +srg.drs1 +srg.drs2 +srg.drs3 +srg.info +srg.programme +srg.ticker +srg.tvdrs +sri.market +sta.general +sta.test +stgt.amiga +stgt.atari +stgt.classified +stgt.games +stgt.general +stgt.ibm +stgt.kleinanzeigen +stgt.maps +stgt.minix +stgt.net +stgt.next +stgt.suecrates +stgt.test +stgt.uni-s.aix +stgt.uni-s.archiv +stgt.uni-s.chemie.misc +stgt.uni-s.e-technik.pruefungen +stgt.uni-s.energietechnik +stgt.uni-s.faveve +stgt.uni-s.general +stgt.uni-s.ims.general +stgt.uni-s.ivs +stgt.uni-s.markt +stgt.uni-s.rus +stgt.uni-s.rus.afs +stgt.uni-s.rus.paragon +stgt.uni-s.rus.paris +stgt.uni-s.rus.pools +stgt.uni-s.rus.rsyst +stgt.uni-s.rus.servus +stgt.uni-s.sun +stgt.unix +stl.config +stl.dining +stl.forsale +stl.general +stl.jobs +stl.news +stl.rec +stl.test +su.admin +su.admin.tips +su.class.aa236 +su.class.aa257 +su.class.aa278a +su.class.anthro161a +su.class.art342 +su.class.ce214 +su.class.ce288 +su.class.ce294 +su.class.chem135 +su.class.chem275 +su.class.chem31 +su.class.chem33 +su.class.cheme130 +su.class.cheme230 +su.class.comm1 +su.class.comm177h +su.class.cs001u +su.class.cs022 +su.class.cs040 +su.class.cs050 +su.class.cs105a +su.class.cs106a +su.class.cs106b +su.class.cs106x +su.class.cs107 +su.class.cs108 +su.class.cs109a +su.class.cs109b +su.class.cs110 +su.class.cs137 +su.class.cs140 +su.class.cs143 +su.class.cs145 +su.class.cs147 +su.class.cs154 +su.class.cs157 +su.class.cs161 +su.class.cs193c +su.class.cs193d +su.class.cs193e +su.class.cs193l +su.class.cs193m +su.class.cs193u +su.class.cs193x +su.class.cs194 +su.class.cs194a +su.class.cs196 +su.class.cs197 +su.class.cs198 +su.class.cs200 +su.class.cs201 +su.class.cs202 +su.class.cs205 +su.class.cs221 +su.class.cs221b +su.class.cs222 +su.class.cs222.lab +su.class.cs223 +su.class.cs223a +su.class.cs223b +su.class.cs225a +su.class.cs226 +su.class.cs227 +su.class.cs228a +su.class.cs229 +su.class.cs229b +su.class.cs240a +su.class.cs240b +su.class.cs242 +su.class.cs243 +su.class.cs244 +su.class.cs244a +su.class.cs244b +su.class.cs244c +su.class.cs245 +su.class.cs245a +su.class.cs247 +su.class.cs248 +su.class.cs248a +su.class.cs249 +su.class.cs254 +su.class.cs256 +su.class.cs257 +su.class.cs258 +su.class.cs260 +su.class.cs304 +su.class.cs306 +su.class.cs309a +su.class.cs309c +su.class.cs315 +su.class.cs315a +su.class.cs315b +su.class.cs323 +su.class.cs325 +su.class.cs327b +su.class.cs340 +su.class.cs342 +su.class.cs343 +su.class.cs345 +su.class.cs346 +su.class.cs347 +su.class.cs348a +su.class.cs348b +su.class.cs348c +su.class.cs349 +su.class.cs363 +su.class.cs367a +su.class.cs369 +su.class.cs377-2 +su.class.cs377b +su.class.cs378 +su.class.cs394 +su.class.cs403 +su.class.cs426 +su.class.cs443 +su.class.cs446 +su.class.drama065 +su.class.e235 +su.class.econ001 +su.class.econ051 +su.class.econ080 +su.class.econ1 +su.class.econ103 +su.class.econ149 +su.class.econ206 +su.class.econ51 +su.class.econ90 +su.class.ed103x +su.class.ed106x +su.class.ed224 +su.class.ed234 +su.class.ed242 +su.class.ed250c +su.class.ed257 +su.class.ed317 +su.class.ed347 +su.class.ed350b +su.class.ed350c +su.class.ed431 +su.class.ee101 +su.class.ee113 +su.class.ee121 +su.class.ee133 +su.class.ee141 +su.class.ee182 +su.class.ee214 +su.class.ee216 +su.class.ee241 +su.class.ee247 +su.class.ee271 +su.class.ee272a +su.class.ee272b +su.class.ee278 +su.class.ee282 +su.class.ee311 +su.class.ee313 +su.class.ee314 +su.class.ee314.announce +su.class.ee315 +su.class.ee318 +su.class.ee353 +su.class.ee363 +su.class.ee366 +su.class.ee368 +su.class.ee371 +su.class.ee373 +su.class.ee377 +su.class.ee381 +su.class.ee382 +su.class.ee384 +su.class.ee392v +su.class.ee392x +su.class.ee479 +su.class.ee482 +su.class.ee487 +su.class.ee488 +su.class.ees221a +su.class.ees231b +su.class.engl.nabokov +su.class.engl187k +su.class.engl1b12 +su.class.eur004 +su.class.french23c +su.class.french24 +su.class.french3 +su.class.german1 +su.class.german2-1 +su.class.german2-2 +su.class.german2-3 +su.class.ges499 +su.class.gsb.m240-4 +su.class.gsb.m240-5 +su.class.history152 +su.class.humbio11 +su.class.humbio4a +su.class.humbio4b +su.class.ie225 +su.class.ie261 +su.class.ie275 +su.class.law314 +su.class.law623 +su.class.ling130 +su.class.lougee +su.class.math103dh +su.class.math173 +su.class.math43 +su.class.me100 +su.class.me201a +su.class.me201b +su.class.me201c +su.class.me217c +su.class.me218 +su.class.me238c +su.class.me239 +su.class.me251a +su.class.me252a +su.class.me309 +su.class.mehr-mensch +su.class.mla031 +su.class.or251 +su.class.or351 +su.class.phil160a +su.class.phil80 +su.class.physics51 +su.class.physics53 +su.class.ps142k +su.class.ps170 +su.class.ps247g +su.class.psych252 +su.class.sitn +su.class.soc383 +su.class.ss201 +su.class.stat061 +su.class.stat110 +su.class.stat207 +su.class.stat340 +su.class.stat372 +su.class.sts160 +su.class.su.class.wct3b-07 +su.class.swopsi096 +su.class.ugs117 +su.class.vtss160 +su.class.wct3a-05 +su.class.wct3b-07 +su.computers +su.computers.afs +su.computers.amiga +su.computers.dialin +su.computers.ibm +su.computers.mac +su.computers.nethax +su.computers.next +su.computers.ntp +su.computers.rcc +su.computers.terman.cluster +su.computers.unix +su.etc +su.events +su.events.residences +su.gay +su.jobs +su.library.math-cs +su.lost-and-found +su.market +su.market.textbooks +su.math +su.news +su.news-service.announcements +su.news-service.press-releases +su.org.ac.announcements +su.org.acsss +su.org.amnesty.international +su.org.archeology +su.org.assu +su.org.assu.elections +su.org.bridgeclub +su.org.ccrma.bboard +su.org.ccrma.gripes +su.org.cogsci +su.org.cycling +su.org.disabled +su.org.ecohouse +su.org.ham-radio +su.org.hillel +su.org.hpp-aerobics +su.org.i-center +su.org.ieee +su.org.india +su.org.irish +su.org.lsa +su.org.lsjumb +su.org.multimedia +su.org.orch +su.org.redwood +su.org.review +su.org.review.d +su.org.rotc +su.org.running +su.org.scca +su.org.see +su.org.sharp +su.org.ski-club +su.org.spoon +su.org.sscp +su.org.stems +su.org.swe +su.org.teaching +su.org.womens-center +su.school.med +su.school.or +su.school.polisci +su.software.tools +su.sports +su.test +su.transportation +sudbury.misc +sunet.biomed.neurosci.motorctrl.clin +sunet.biomed.neurosci.neurophysiol.clin +sunet.doktorand +sunet.humfak.engelska.doktorander +sura.announce +sura.config +sura.noc.status +sura.security +sura.techs +swnet.ai.neural-nets +swnet.appl.matlab +swnet.conferences +swnet.diverse +swnet.filosofi +swnet.finans +swnet.followup +swnet.fordon.bilar +swnet.fordon.motorcyklar +swnet.foto +swnet.fritid.friluftsliv +swnet.fritid.jakt +swnet.fritid.segling +swnet.fritid.sportdykning +swnet.fritid.sportfiske +swnet.general +swnet.husdjur.hundar +swnet.infosystems.gis +swnet.infosystems.gopher +swnet.infosystems.www +swnet.internet.irc +swnet.internet.news +swnet.internet.policy +swnet.jobs +swnet.juridik +swnet.kultur.litteratur +swnet.kultur.serier +swnet.lans +swnet.lans.novell +swnet.mail +swnet.media +swnet.media.film +swnet.media.tv +swnet.moral +swnet.musik +swnet.org.abc-klubben +swnet.org.europen +swnet.org.global-one +swnet.org.skolverket.skol-net +swnet.org.snus +swnet.org.sunet +swnet.org.telegate +swnet.politik +swnet.pryltorg +swnet.reklam +swnet.risks +swnet.sci.astro +swnet.sci.genealogi +swnet.sci.medicin +swnet.sci.ufo +swnet.sf +swnet.sis.bibliotek +swnet.sis.samtalisalong +swnet.sources +swnet.sport +swnet.sport.boule +swnet.sport.cykel +swnet.sport.hockey +swnet.svenska +swnet.sys.amiga +swnet.sys.dec +swnet.sys.dnix +swnet.sys.hp +swnet.sys.ibm.pc +swnet.sys.mac +swnet.sys.os2 +swnet.sys.sun +swnet.sys.sun.flash +swnet.sys.windows-nt +swnet.teknik.elektronik +swnet.teknik.telefoni +swnet.test +swnet.unix +swnet.utbildning.datapedagogik +swnet.utbildning.internetteknik +swnet.utbildning.kemi +swnet.utbildning.media +swnet.wanted +sybase.server.bugnews.oahu +tacoma.events +tacoma.general +tacoma.politics +talk.abortion +talk.answers +talk.atheism +talk.bizarre +talk.environment +talk.euthanasia +talk.origins +talk.philosophy.humanism +talk.philosophy.misc +talk.politics.animals +talk.politics.china +talk.politics.crypto +talk.politics.drugs +talk.politics.european-union +talk.politics.guns +talk.politics.libertarian +talk.politics.medicine +talk.politics.mideast +talk.politics.misc +talk.politics.soviet +talk.politics.theory +talk.politics.tibet +talk.rape +talk.religion.buddhism +talk.religion.course-miracle +talk.religion.misc +talk.religion.newage +talk.religion.pantheism +talk.rumors +tamu.aasg +tamu.amateur +tamu.cray +tamu.electronic.library.resources +tamu.flame +tamu.forsale +tamu.fuzzy +tamu.general +tamu.gopher +tamu.horticulture.rose-hybrid +tamu.jobs +tamu.kanm.radio +tamu.micro.mac +tamu.micro.msdos +tamu.micro.os2 +tamu.music +tamu.news +tamu.religion.christian +tamu.test +tamu.unix.general +tamu.unix.sgi +tamu.vm.general +tamu.vms.general +taos.config +taos.dining +taos.forsale +taos.general +taos.jobs +taos.reviews +taos.test +taos.wanted +taronga.misc +taronga.worldview +tdr.problems +tfcn.comm +tfcn.finance +tfcn.misc +tfcn.org +tfcn.tech +tfcn.tfn +tfcn.vote +thelinq.admin +thelinq.counselors +thelinq.e-books +thelinq.elem.homework-help +thelinq.elem.lesson-plans +thelinq.elem.writing +thelinq.geography +thelinq.goals-2000 +thelinq.grants +thelinq.health-workers +thelinq.high.homework-help +thelinq.high.lesson-plans +thelinq.high.writing +thelinq.home-schooling +thelinq.middle.homework-help +thelinq.middle.lesson-plans +thelinq.middle.writing +thelinq.parent.elem +thelinq.parent.high +thelinq.parent.middle +thelinq.poli-sci +thelinq.pta-pto +thelinq.school-council +thelinq.soc-workers +thelinq.student.career +thelinq.student.college-talk +thelinq.student.health +thelinq.student.motivation +thelinq.student.peer-pressure +thenet.downtime +thenet.support.bsd +thenet.support.cixgateway +thenet.support.dos +thenet.support.irix +thenet.support.linux +thenet.support.os2 +thenet.support.windows +thenet.support.windows95 +thenet.support.windowsmail +thenet.support.windowsnt +tn.flame +tn.general +tn.linux +tn.msdos +tn.talk +tn.test +tn.unix +tnn.admin +tnn.announce +tnn.architect +tnn.archives +tnn.archives.mirrors +tnn.arts +tnn.astro +tnn.benchmark +tnn.bio +tnn.bonsai +tnn.books +tnn.books.magazine +tnn.books.new +tnn.business +tnn.business.computer +tnn.business.network +tnn.cafe +tnn.chem +tnn.cm +tnn.cm.new-product +tnn.comm.pager +tnn.config +tnn.culture.asia +tnn.culture.kansai +tnn.current-events +tnn.databases +tnn.dcom +tnn.dcom.atm +tnn.dcom.carrier +tnn.dcom.giga-bit +tnn.dcom.isdn +tnn.dcom.modems +tnn.dcom.routers +tnn.dcom.satellite +tnn.disasters.earthquake +tnn.diy +tnn.events +tnn.examination +tnn.faq-list +tnn.foods +tnn.foods.b-class +tnn.foods.kansai +tnn.foods.liquor +tnn.foods.recipes +tnn.foods.tokyo +tnn.forsale +tnn.forum +tnn.forum.asia-economy-p +tnn.forum.avs +tnn.forum.bridge +tnn.forum.canna +tnn.forum.dokokyo.cals +tnn.forum.global-brain +tnn.forum.hello-tokyo +tnn.forum.high-school +tnn.forum.ican +tnn.forum.info-city +tnn.forum.jus +tnn.forum.kansai-ri +tnn.forum.nature +tnn.forum.nsug +tnn.forum.soft-sys.tippler +tnn.forum.splus +tnn.forum.tottori +tnn.forum.tron +tnn.forum.ventures +tnn.forum.wnn +tnn.games +tnn.games.pokemon +tnn.games.rpg +tnn.general +tnn.hardware +tnn.horoscope +tnn.internauts +tnn.internet +tnn.internet.address +tnn.internet.broadcast +tnn.internet.firewall +tnn.internet.isode +tnn.internet.itr +tnn.internet.library +tnn.internet.life +tnn.internet.mobile +tnn.internet.routing +tnn.internet.www +tnn.interv.saigai.access-guide +tnn.interv.saigai.hq +tnn.interv.saigai.lifeinfo +tnn.interv.saigai.lifeline +tnn.interv.saigai.ngo-npo +tnn.interv.saigai.official +tnn.interv.saigai.pcnet-info +tnn.interv.saigai.press +tnn.interv.saigai.volunteer.offers +tnn.interv.saigai.volunteer.wanted +tnn.interv.saigai.wanted +tnn.jobs +tnn.kanji +tnn.lang +tnn.law +tnn.law.copyright +tnn.law.patent +tnn.literature +tnn.living +tnn.living.child-care +tnn.living.health +tnn.living.insurance +tnn.mail +tnn.mail.uucp +tnn.marketing.internet +tnn.math +tnn.medical +tnn.mpu +tnn.mpu.i386 +tnn.mpu.mips +tnn.mpu.sparc +tnn.multimedia +tnn.multimedia.cdrom +tnn.music +tnn.music.early +tnn.music.early.lute +tnn.music.jazz-fusion +tnn.music.players +tnn.music.techno +tnn.netnews +tnn.netnews.cnews +tnn.netnews.dream +tnn.netnews.inn +tnn.netnews.stats +tnn.netusers +tnn.newsgroups +tnn.newsite +tnn.os +tnn.os.44bsd +tnn.os.aix +tnn.os.bsd-on-386 +tnn.os.bsd386.announce +tnn.os.bsd386.applications +tnn.os.bsd386.bugs +tnn.os.bsd386.development +tnn.os.bsd386.japanese +tnn.os.bsd386.x-window +tnn.os.dosv +tnn.os.freebsd +tnn.os.linux +tnn.os.mach +tnn.os.msdos +tnn.os.netbsd +tnn.os.netware +tnn.os.os2 +tnn.os.research +tnn.os.spring +tnn.os.unix +tnn.os.windows-nt +tnn.os.windows95 +tnn.physics +tnn.protocols.edi +tnn.protocols.mhs +tnn.protocols.snmp +tnn.protocols.x500 +tnn.questions +tnn.radio.amateur +tnn.radio.life +tnn.real-estate +tnn.rec.4wd +tnn.rec.dance +tnn.rec.motorcycles +tnn.rec.motorsport +tnn.rec.pre-idol +tnn.religion.buddhism.shinshu +tnn.religion.catholic +tnn.rfc +tnn.robot +tnn.soccer +tnn.soccer.j-league +tnn.soccer.j-league.antlers +tnn.soccer.j-league.grampus-eight +tnn.soccer.j-league.jubilo +tnn.soccer.j-league.marinos +tnn.soccer.world-cup +tnn.software +tnn.sports +tnn.sports.surfing +tnn.sports.tennis +tnn.sports.triathlon +tnn.support +tnn.support.hucom.fibrechannel +tnn.support.hucom.modem +tnn.sys +tnn.sys.amiga +tnn.sys.apple2 +tnn.sys.arch +tnn.sys.be +tnn.sys.ibm-pc +tnn.sys.mac +tnn.sys.news +tnn.sys.next +tnn.sys.palmtops +tnn.sys.realtime +tnn.sys.sgi +tnn.sys.sun +tnn.sys.zaurus +tnn.test +tnn.text.postscript +tnn.text.tex +tnn.travel +tnn.travel.globe +tnn.travel.report +tnn.wanted +tnn.window.gui.motif +tnn.window.gui.open-look +tnn.window.windows +tnn.window.x +to +tor.arts +tor.bizarre +tor.config +tor.eats +tor.events +tor.forsale.computers +tor.forsale.misc +tor.general +tor.housing +tor.ieee +tor.jobs +tor.journalism +tor.news +tor.news.stats +tor.pagan +tor.test +tor.uucp +tor.www.commerce +tor.www.misc +tp.archiv +tp.eintraege +tp.forum +tp.hilfe +tp.isdn +tp.pd-soft.algorithmen +tp.pd-soft.amiga +tp.pd-soft.atari +tp.pd-soft.cdrom +tp.pd-soft.ibm +tp.pd-soft.next +tp.pd-soft.os2 +tp.pd-soft.unix +tp.pranger +tp.protokolle +tp.statistik +tp.stellenmarkt +tp.sysinfo +tp.test +trentu.general +trentu.seminar +triangle.arts +triangle.bbq +triangle.bizarre +triangle.config +triangle.decus +triangle.dining +triangle.forsale +triangle.gamers +triangle.gardens +triangle.general +triangle.graphics +triangle.java +triangle.jobs +triangle.libsci +triangle.motss +triangle.movies +triangle.neural-nets +triangle.online-access +triangle.personals +triangle.personals.bi +triangle.personals.friendship +triangle.personals.m-seeking-m +triangle.personals.m-seeking-w +triangle.personals.motss +triangle.personals.variations +triangle.personals.w-seeking-m +triangle.personals.w-seeking-w +triangle.politics +triangle.radio +triangle.singles +triangle.singles.announce +triangle.sports +triangle.sun +triangle.talks +triangle.test +triangle.transport +triangle.vlsi +triangle.wanted +trumpet.announce +trumpet.bugs +trumpet.feedback +trumpet.questions +trumpet.test +tub.general +tub.wanted +tum.e-technik.eikon +tum.e-technik.general +tum.e-technik.studium +tum.format.werkstoffe +tum.fsmpi.general +tum.general +tum.info.atari +tum.info.didaktik +tum.info.general +tum.info.medizin +tum.info.modem +tum.info.progber +tum.info.questions +tum.info.sfb0342 +tum.info.soft +tum.info.studium +tum.info.topsys +tum.info.tsm +tum.info.verwalter +tum.iwb.general +tum.physik.bl.general +tum.physik.bl.mlle +tum.physik.cip +tum.questions +tum.soft +tum.test +tum.wirtschaft +tvontario.teleguide +tw.bbs.admin +tw.bbs.admin.installbbs +tw.bbs.aiesec +tw.bbs.alumni +tw.bbs.alumni.ccshs +tw.bbs.alumni.chengkung +tw.bbs.alumni.chien-kuo-hs +tw.bbs.alumni.chingmei +tw.bbs.alumni.chungli +tw.bbs.alumni.chushishs +tw.bbs.alumni.cy +tw.bbs.alumni.fengho +tw.bbs.alumni.fshs +tw.bbs.alumni.fushing +tw.bbs.alumni.hchs +tw.bbs.alumni.hgsh +tw.bbs.alumni.hsinchuang +tw.bbs.alumni.hsntnu +tw.bbs.alumni.hwachyau +tw.bbs.alumni.ilanhs +tw.bbs.alumni.jhs +tw.bbs.alumni.kavalan +tw.bbs.alumni.kcchs +tw.bbs.alumni.keeshs +tw.bbs.alumni.kshs +tw.bbs.alumni.lanyanghs +tw.bbs.alumni.lotunghs +tw.bbs.alumni.skshs +tw.bbs.alumni.stdm +tw.bbs.alumni.sungshan +tw.bbs.alumni.taochung +tw.bbs.alumni.tcgshs +tw.bbs.alumni.tcsshs +tw.bbs.alumni.tfg +tw.bbs.alumni.tfhs +tw.bbs.alumni.tfshs +tw.bbs.alumni.touchung +tw.bbs.alumni.tshs +tw.bbs.alumni.tssh-ccgsh +tw.bbs.alumni.viator +tw.bbs.alumni.whshs +tw.bbs.alumni.wuling +tw.bbs.alumni.yangming +tw.bbs.announce +tw.bbs.answers +tw.bbs.campus +tw.bbs.campus.activity +tw.bbs.campus.advancededu +tw.bbs.campus.education +tw.bbs.campus.fju +tw.bbs.campus.graduate +tw.bbs.campus.job +tw.bbs.campus.ltc +tw.bbs.campus.nccu +tw.bbs.campus.nchu +tw.bbs.campus.ncku +tw.bbs.campus.nctu +tw.bbs.campus.ncu +tw.bbs.campus.nthu +tw.bbs.campus.ntnu-mtc +tw.bbs.campus.ntu +tw.bbs.campus.pu +tw.bbs.campus.stjctc +tw.bbs.campus.tit +tw.bbs.campus.ttit +tw.bbs.campus.yuntech +tw.bbs.comp.386bsd +tw.bbs.comp.activex +tw.bbs.comp.book +tw.bbs.comp.cad +tw.bbs.comp.chinese +tw.bbs.comp.database +tw.bbs.comp.dos +tw.bbs.comp.graphics +tw.bbs.comp.hacker +tw.bbs.comp.hardware +tw.bbs.comp.hardware.cdrom +tw.bbs.comp.hardware.comm +tw.bbs.comp.hardware.cpu +tw.bbs.comp.hardware.marketplace +tw.bbs.comp.hardware.misc +tw.bbs.comp.hardware.network +tw.bbs.comp.hardware.soundcard +tw.bbs.comp.hardware.storage +tw.bbs.comp.hardware.systems +tw.bbs.comp.irc +tw.bbs.comp.lang.fortran +tw.bbs.comp.lang.java +tw.bbs.comp.lang.perl +tw.bbs.comp.language +tw.bbs.comp.linux +tw.bbs.comp.mac +tw.bbs.comp.midi +tw.bbs.comp.modem +tw.bbs.comp.mswindows +tw.bbs.comp.mswindows.nt +tw.bbs.comp.mswindows.win95 +tw.bbs.comp.multimedia +tw.bbs.comp.network +tw.bbs.comp.novell +tw.bbs.comp.oop +tw.bbs.comp.os.nextstep +tw.bbs.comp.os2 +tw.bbs.comp.pda +tw.bbs.comp.security +tw.bbs.comp.semiconductor +tw.bbs.comp.shareware +tw.bbs.comp.software +tw.bbs.comp.sources +tw.bbs.comp.tex +tw.bbs.comp.unix +tw.bbs.comp.virii +tw.bbs.comp.virus +tw.bbs.comp.winsock +tw.bbs.comp.www +tw.bbs.comp.xwindow +tw.bbs.config +tw.bbs.csbbs +tw.bbs.csbbs.pbbs +tw.bbs.edu.normal +tw.bbs.forsale +tw.bbs.forsale.computer +tw.bbs.forsale.house +tw.bbs.general +tw.bbs.help +tw.bbs.lang.chinese +tw.bbs.lang.english +tw.bbs.lang.francais +tw.bbs.lang.japanese +tw.bbs.lang.spanish +tw.bbs.lists +tw.bbs.literal.article +tw.bbs.literal.asciiart +tw.bbs.literal.book +tw.bbs.literal.chinese +tw.bbs.literal.emprisenovel +tw.bbs.literal.lyrics +tw.bbs.literal.mystery +tw.bbs.literal.poem +tw.bbs.literal.romance +tw.bbs.literal.sfnovel +tw.bbs.literal.story +tw.bbs.music.chinese +tw.bbs.music.classical +tw.bbs.music.heavy_metal +tw.bbs.music.japan +tw.bbs.music.jazz +tw.bbs.music.pop +tw.bbs.music.rocknroll +tw.bbs.netnews +tw.bbs.newgroups +tw.bbs.org.cie +tw.bbs.rec.aquarium +tw.bbs.rec.art +tw.bbs.rec.audiophile +tw.bbs.rec.beautysalon +tw.bbs.rec.bicycle +tw.bbs.rec.bridge +tw.bbs.rec.car +tw.bbs.rec.chess +tw.bbs.rec.cidol +tw.bbs.rec.coffee +tw.bbs.rec.comic +tw.bbs.rec.cuteness +tw.bbs.rec.dance +tw.bbs.rec.drama +tw.bbs.rec.entertainment +tw.bbs.rec.flight-sim +tw.bbs.rec.flower +tw.bbs.rec.foodstuff +tw.bbs.rec.guitar +tw.bbs.rec.harmonica +tw.bbs.rec.instrument +tw.bbs.rec.japan-idol +tw.bbs.rec.japan-idol.uchida-yuki +tw.bbs.rec.marvel +tw.bbs.rec.mj +tw.bbs.rec.mobilecomm +tw.bbs.rec.model +tw.bbs.rec.motorcycle +tw.bbs.rec.movie +tw.bbs.rec.mud +tw.bbs.rec.palmardrama +tw.bbs.rec.pcgame +tw.bbs.rec.pcgame.foreign +tw.bbs.rec.pet +tw.bbs.rec.photo +tw.bbs.rec.radio +tw.bbs.rec.radio.amateur +tw.bbs.rec.rail +tw.bbs.rec.scouting +tw.bbs.rec.sport-cards +tw.bbs.rec.stamp +tw.bbs.rec.startrek +tw.bbs.rec.starwars +tw.bbs.rec.tea +tw.bbs.rec.travel +tw.bbs.rec.tv +tw.bbs.rec.tv.x-files +tw.bbs.rec.video +tw.bbs.rec.videogame +tw.bbs.rec.weapon +tw.bbs.rec.wine +tw.bbs.sci.astrology +tw.bbs.sci.astronomy +tw.bbs.sci.biology +tw.bbs.sci.chemistry +tw.bbs.sci.design +tw.bbs.sci.economics +tw.bbs.sci.electronics +tw.bbs.sci.entomology +tw.bbs.sci.finance +tw.bbs.sci.finance.funds +tw.bbs.sci.first_aid +tw.bbs.sci.history +tw.bbs.sci.history.sango +tw.bbs.sci.insurance +tw.bbs.sci.law +tw.bbs.sci.math +tw.bbs.sci.mba +tw.bbs.sci.mechanics +tw.bbs.sci.medicine +tw.bbs.sci.mis +tw.bbs.sci.philosophy +tw.bbs.sci.physics +tw.bbs.sci.psychology +tw.bbs.sci.sex +tw.bbs.soc.birds +tw.bbs.soc.canada +tw.bbs.soc.changhua +tw.bbs.soc.charity +tw.bbs.soc.chiayi +tw.bbs.soc.consumers +tw.bbs.soc.feminism +tw.bbs.soc.green-earth +tw.bbs.soc.hakka +tw.bbs.soc.handicapped +tw.bbs.soc.hsinchu +tw.bbs.soc.hualien +tw.bbs.soc.i-lan +tw.bbs.soc.japan +tw.bbs.soc.kaohsiung +tw.bbs.soc.keelung +tw.bbs.soc.malaysia +tw.bbs.soc.media +tw.bbs.soc.motss +tw.bbs.soc.overseas +tw.bbs.soc.pingtung +tw.bbs.soc.politics +tw.bbs.soc.politics.dpp +tw.bbs.soc.politics.kmt +tw.bbs.soc.politics.np +tw.bbs.soc.religion +tw.bbs.soc.religion.buddhism +tw.bbs.soc.sccid +tw.bbs.soc.socialwelfare +tw.bbs.soc.society +tw.bbs.soc.tai-tung +tw.bbs.soc.taichung +tw.bbs.soc.tainan +tw.bbs.soc.taipei +tw.bbs.soc.taiwanese +tw.bbs.soc.taoyuan +tw.bbs.soc.tayal +tw.bbs.soc.transport +tw.bbs.soc.tzuchi +tw.bbs.sports +tw.bbs.sports.baseball +tw.bbs.sports.baseball.bears +tw.bbs.sports.baseball.dragons +tw.bbs.sports.baseball.eagles +tw.bbs.sports.baseball.elephants +tw.bbs.sports.baseball.lions +tw.bbs.sports.baseball.tigers +tw.bbs.sports.baseball.whales +tw.bbs.sports.basketball +tw.bbs.sports.basketball.nba +tw.bbs.sports.fishing +tw.bbs.sports.inlineskate +tw.bbs.sports.kongfu +tw.bbs.sports.mountain +tw.bbs.sports.mountain.diversity +tw.bbs.sports.pro-wrestling +tw.bbs.sports.soccer +tw.bbs.sports.swimming +tw.bbs.sports.table-tennis +tw.bbs.sports.tennis +tw.bbs.sports.volleyball +tw.bbs.talk +tw.bbs.talk.boy-girl +tw.bbs.talk.feeling +tw.bbs.talk.francophone +tw.bbs.talk.friends +tw.bbs.talk.joke +tw.bbs.talk.ladytalk +tw.bbs.talk.love +tw.bbs.talk.mentalk +tw.bbs.talk.newscast +tw.bbs.talk.notepad +tw.bbs.test +tw.bbs.udnie +tw.k-12.class +tw.k-12.education +tw.k-12.english +tw.k-12.guide +tw.k-12.health +tw.k-12.information +tw.k-12.junior +tw.k-12.junior.art +tw.k-12.junior.biology +tw.k-12.junior.chinese +tw.k-12.junior.english +tw.k-12.junior.history +tw.k-12.junior.math +tw.k-12.junior.music +tw.k-12.kindergarten +tw.k-12.life-tech +tw.k-12.physchemical +tw.k-12.policy +tw.k-12.primary +tw.k-12.primary.art +tw.k-12.primary.chinese +tw.k-12.primary.math +tw.k-12.primary.music +tw.k-12.primary.nature +tw.k-12.primary.society +tw.k-12.primary.sport +tw.k-12.senior +tw.k-12.special.education +tw.k-12.students +tw.k-12.teachers +tx-bcs.forsale +tx-bcs.general +tx-bcs.internet.providers +tx-bcs.internet.usersgroup +tx-bcs.jobs +tx-bcs.usenet.config +tx-bcs.usenet.test +tx-bcs.wanted +tx.evolution.vs.abortion +tx.flame +tx.forsale +tx.general +tx.guns +tx.jobs +tx.maps +tx.motorcycles +tx.politics +tx.politics.republic +tx.religion.pagan +tx.telecom +tx.test +tx.usenet.config +tx.usenet.stats +tx.usenet.test +tx.wanted +u3b.config +u3b.misc +u3b.sources +u3b.tech +u3b.test +ualberta.general +ualberta.phys.general +uark.asg +uark.config +uark.forsale +uark.general +uark.jobs +uark.orgs +uark.sports +ubc.courses.cpsc.537b +uberlin.general +uc.general +uc.grads.union +uc.motss +uc.news +uc.test +ucb.alt.uclink +ucb.alumni +ucb.arts +ucb.becmug +ucb.boalt +ucb.building-coord +ucb.cchem +ucb.ce.grads +ucb.ce.undergrads +ucb.ced +ucb.china.hk-roc +ucb.class.ba100 +ucb.class.ba120 +ucb.class.ba202a +ucb.class.ce131 +ucb.class.chem1a +ucb.class.complit60ac-3 +ucb.class.cs150 +ucb.class.cs152 +ucb.class.cs160 +ucb.class.cs162 +ucb.class.cs164 +ucb.class.cs169 +ucb.class.cs170 +ucb.class.cs172 +ucb.class.cs174 +ucb.class.cs184 +ucb.class.cs186 +ucb.class.cs188 +ucb.class.cs189 +ucb.class.cs195 +ucb.class.cs198 +ucb.class.cs198-4 +ucb.class.cs250 +ucb.class.cs252 +ucb.class.cs254 +ucb.class.cs260 +ucb.class.cs262 +ucb.class.cs263 +ucb.class.cs264 +ucb.class.cs265 +ucb.class.cs266 +ucb.class.cs267 +ucb.class.cs268 +ucb.class.cs270 +ucb.class.cs274 +ucb.class.cs276 +ucb.class.cs277 +ucb.class.cs282 +ucb.class.cs283 +ucb.class.cs284 +ucb.class.cs285 +ucb.class.cs286 +ucb.class.cs287 +ucb.class.cs288 +ucb.class.cs294-4 +ucb.class.cs294-5 +ucb.class.cs3 +ucb.class.cs30s +ucb.class.cs3s +ucb.class.cs61a +ucb.class.cs61b +ucb.class.cs61c +ucb.class.cs8 +ucb.class.cs9a +ucb.class.cs9b +ucb.class.cs9c +ucb.class.cs9d +ucb.class.cs9e +ucb.class.cs9f +ucb.class.cs9g +ucb.class.econ201a +ucb.class.ee1 +ucb.class.ee105 +ucb.class.ee117a +ucb.class.ee117b +ucb.class.ee118 +ucb.class.ee120 +ucb.class.ee121 +ucb.class.ee122 +ucb.class.ee123 +ucb.class.ee125 +ucb.class.ee126 +ucb.class.ee128 +ucb.class.ee130 +ucb.class.ee136 +ucb.class.ee140 +ucb.class.ee141 +ucb.class.ee142 +ucb.class.ee143 +ucb.class.ee145a +ucb.class.ee145b +ucb.class.ee146 +ucb.class.ee192 +ucb.class.ee20 +ucb.class.ee219 +ucb.class.ee221a +ucb.class.ee224 +ucb.class.ee225a +ucb.class.ee225b +ucb.class.ee225c +ucb.class.ee225d +ucb.class.ee226 +ucb.class.ee227 +ucb.class.ee227a +ucb.class.ee227b +ucb.class.ee228a +ucb.class.ee228b +ucb.class.ee229 +ucb.class.ee231 +ucb.class.ee240 +ucb.class.ee241 +ucb.class.ee242 +ucb.class.ee243 +ucb.class.ee244 +ucb.class.ee246 +ucb.class.ee254 +ucb.class.ee290a +ucb.class.ee290b +ucb.class.ee290d +ucb.class.ee290h +ucb.class.ee290j +ucb.class.ee290l +ucb.class.ee290n +ucb.class.ee290t +ucb.class.ee290w +ucb.class.ee40 +ucb.class.ee40i +ucb.class.ee42 +ucb.class.ee43 +ucb.class.ee77s +ucb.class.eecsba1 +ucb.class.german5a +ucb.class.hist163a +ucb.class.infosys206 +ucb.class.la237 +ucb.class.math1a +ucb.class.n241 +ucb.class.physics7a +ucb.class.physics7b +ucb.class.stat2 +ucb.cogsci +ucb.computing.announce +ucb.cs.alphas +ucb.cs.grads +ucb.cs.hpux.sysadmins +ucb.cs.hpux.users +ucb.cs.jobs +ucb.cs.msgs +ucb.cs.sww.announce +ucb.cs.undergrads +ucb.digital-video +ucb.discuss.japan +ucb.eats +ucb.econ.grads +ucb.education.dte +ucb.ee.grads +ucb.ee.msgs +ucb.ee.undergrads +ucb.eecs.net.stats +ucb.eecs.sww.announce +ucb.english +ucb.ephemerata +ucb.erg +ucb.erotica.sensual +ucb.extension.general +ucb.film-program +ucb.flame +ucb.games.magic +ucb.general +ucb.geography.comp-facility +ucb.geology +ucb.german +ucb.grads +ucb.hsb.announce +ucb.hsb.calendar +ucb.hsb.cbw +ucb.hsb.computers +ucb.hsb.gbc +ucb.hsb.general +ucb.hsb.haas-online.market +ucb.hsb.ibc +ucb.hsb.mba.announce +ucb.hsb.mba.general +ucb.hsb.mbaa +ucb.hsb.phd.announce +ucb.hsb.phd.general +ucb.hsb.undergrads.announce +ucb.hsb.undergrads.general +ucb.icsi +ucb.icsi.computing +ucb.icsi.talks +ucb.ieor.grads +ucb.ieor.undergrads +ucb.itp +ucb.jobs +ucb.journalism +ucb.linguistics +ucb.market.books +ucb.market.housing +ucb.market.misc +ucb.market.vehicles +ucb.math +ucb.math.seminars +ucb.math.undergrads +ucb.mcb.grad +ucb.me.grads +ucb.me.grads.announce +ucb.me.undergrads +ucb.net +ucb.net.announce +ucb.net.discussion +ucb.net.home-ip.announce +ucb.net.home-ip.discussion +ucb.net.linkfail +ucb.net.mbone +ucb.net.stats +ucb.net.www.providers +ucb.news +ucb.news.stats +ucb.nuc.grads +ucb.nuc.undergrads +ucb.org.aclu +ucb.org.agse +ucb.org.aquaria +ucb.org.asuc +ucb.org.aswg +ucb.org.bcr +ucb.org.bicycal +ucb.org.bio-scholars +ucb.org.bis +ucb.org.bridge-club +ucb.org.cal-animage +ucb.org.cal-cycling +ucb.org.calhev +ucb.org.callug +ucb.org.calsurfteam +ucb.org.clignet +ucb.org.csgsa +ucb.org.csu +ucb.org.csua +ucb.org.ficb +ucb.org.filmstuds +ucb.org.golden-key +ucb.org.grad-assembly +ucb.org.hiking-club +ucb.org.hillel +ucb.org.indus +ucb.org.iran-club +ucb.org.kbsu +ucb.org.lt-weight-crew +ucb.org.lyceum +ucb.org.mcbusa +ucb.org.mystique +ucb.org.nihonjin-kai +ucb.org.ntug +ucb.org.ocf +ucb.org.pasae +ucb.org.quiz-bowl +ucb.org.rc-scholars +ucb.org.scibugs +ucb.org.ses +ucb.org.squelch +ucb.org.thai-club +ucb.org.tsa +ucb.org.ucsee +ucb.org.upe +ucb.org.upsa +ucb.org.xcf +ucb.org.yearbook +ucb.os.freebsd +ucb.os.linux +ucb.os.nt +ucb.os.os2 +ucb.parents +ucb.peoples-park +ucb.personals +ucb.physics.grads +ucb.politics +ucb.politics.progressive +ucb.ppcs.facilities +ucb.reshall.ckc +ucb.reviews.class +ucb.scholarship +ucb.seminars +ucb.socrates.announce +ucb.socrates.discuss +ucb.sports +ucb.staff.healthcare +ucb.students.cambodian +ucb.students.chinese +ucb.students.disabled +ucb.students.filipino +ucb.students.india +ucb.students.internat +ucb.students.japanese +ucb.students.korean +ucb.students.taiwan +ucb.students.uc-village +ucb.study.abroad +ucb.study.abroad.japan +ucb.sysadmin +ucb.test +ucb.trash +ucb.uclink.announce +ucd.ag.explore +ucd.agecon +ucd.comp.instruction +ucd.comp.questions +ucd.cs.club +ucd.cs.grad +ucd.cs.jobs +ucd.cs.programming +ucd.cs.ugrad +ucd.ece.ieee +ucd.general +ucd.geology +ucd.gis +ucd.grad.lit-forum.theory +ucd.grad.ptxgg +ucd.gsa +ucd.housing +ucd.irc +ucd.itcap +ucd.jobs +ucd.life +ucd.listserv.ucdnet-admin +ucd.org.aiche +ucd.org.anime-club +ucd.org.apac +ucd.org.artsworks +ucd.org.asce +ucd.org.asme +ucd.org.caless +ucd.org.cambodia +ucd.org.collegedems +ucd.org.exercise-sci +ucd.org.filcro +ucd.org.fraternity.a-phi-o +ucd.org.fraternity.a-phi-o.d +ucd.org.mga-kapatid +ucd.org.pcbtg +ucd.org.proj-recycle +ucd.org.pssa +ucd.org.seed +ucd.org.swe +ucd.org.transfers.srjc +ucd.q-news +ucd.rec.dragon +ucd.rec.poetry +ucd.rideshare +ucd.snowboarding +ucd.sports.volleyball.mens +ucd.swap +ucd.swap.books +ucd.talk.bugculture +ucd.talk.bugnews +ucd.talk.medical.entomology +ucd.test +ucd.wef +uch.general +ucsb.compsci.cs160 +ucsb.compsci.cs170 +ucsb.compsci.cs180 +ucsb.compsci.cs270b +ucsb.compsci.faculty +ucsb.compsci.grad +ucsb.general +ucsb.humanities +ucsb.net.help +ucsc.admin.grants +ucsc.baskin.general +ucsc.class.cmp101 +ucsc.class.cmp104a +ucsc.class.cmpe185 +ucsc.messages +ucsc.plan +ucsc.research +ucsc.research.morph +ufra.allgemein +ufra.amiga +ufra.dfue +ufra.fido.net +ufra.flame +ufra.incubus.lists +ufra.incubus.talk +ufra.kultur +ufra.markt.hard +ufra.markt.kommerz +ufra.markt.soft +ufra.markt.sonst +ufra.pc +ufra.politik +ufra.prog +ufra.termine +ufra.test +ufra.unix +ufra.users +ug.general +uiuc.announce +uiuc.beckman +uiuc.beckman.consortium +uiuc.campusnet +uiuc.class.biol303 +uiuc.class.cs125 +uiuc.class.cs225 +uiuc.class.cs497smk +uiuc.class.cs497snk +uiuc.class.ece125 +uiuc.class.esl113u +uiuc.class.fr314f +uiuc.class.rhet105 +uiuc.class.span214 +uiuc.class.span214a +uiuc.class.span214c +uiuc.class.span252 +uiuc.class.span274 +uiuc.class.stout +uiuc.cs.alumni +uiuc.cs.announce +uiuc.cs.emacs +uiuc.cs.general +uiuc.cs.gwm +uiuc.cs.jobs +uiuc.cs.sun +uiuc.general +uiuc.misc.bookcoop +uiuc.misc.consumers +uiuc.misc.environment +uiuc.misc.games +uiuc.misc.gourmand +uiuc.misc.jobs +uiuc.misc.politics +uiuc.misc.safety +uiuc.ncsa.hci +uiuc.org.aaa +uiuc.org.acm +uiuc.org.acm.sigarch +uiuc.org.acm.sigbio +uiuc.org.acm.sigmicro +uiuc.org.acm.signet +uiuc.org.acm.sigops +uiuc.org.acm.sigsoft +uiuc.org.acm.sigunix +uiuc.org.aiss +uiuc.org.aisus +uiuc.org.anime +uiuc.org.apo +uiuc.org.asia +uiuc.org.awis +uiuc.org.bicycles +uiuc.org.biophysics +uiuc.org.blades +uiuc.org.cbsu +uiuc.org.ccsm +uiuc.org.civil +uiuc.org.cogsci +uiuc.org.compvision +uiuc.org.csa +uiuc.org.cse +uiuc.org.csl +uiuc.org.csoc +uiuc.org.css +uiuc.org.cten +uiuc.org.dance +uiuc.org.economics +uiuc.org.engcouncil +uiuc.org.eoh +uiuc.org.eoh.announce +uiuc.org.eoh.design +uiuc.org.eoh.general +uiuc.org.ews +uiuc.org.grads +uiuc.org.gsac +uiuc.org.hev +uiuc.org.homebrewers +uiuc.org.ieee +uiuc.org.india +uiuc.org.iranian +uiuc.org.isds +uiuc.org.isds.tech +uiuc.org.isfcu +uiuc.org.issc +uiuc.org.ivcf +uiuc.org.japanese +uiuc.org.koinonia +uiuc.org.life-sciences +uiuc.org.math +uiuc.org.med +uiuc.org.medieval +uiuc.org.men +uiuc.org.mi +uiuc.org.mrl +uiuc.org.msp +uiuc.org.music.cmp +uiuc.org.muslim +uiuc.org.nug +uiuc.org.org-research +uiuc.org.os2ug +uiuc.org.outdoor +uiuc.org.prevet +uiuc.org.psa +uiuc.org.sage +uiuc.org.sage.security +uiuc.org.sem +uiuc.org.shpe +uiuc.org.sil +uiuc.org.skeet +uiuc.org.slm +uiuc.org.sts +uiuc.org.synton +uiuc.org.tbp +uiuc.org.tbp.projects +uiuc.org.tsa +uiuc.org.volunteer +uiuc.org.vsa +uiuc.pubs.in-illinois +uiuc.pubs.messenger +uiuc.pubs.misc +uiuc.pubs.uiucnet +uiuc.rha.allen +uiuc.rha.assembly +uiuc.rha.busey +uiuc.rha.far +uiuc.rha.gregory +uiuc.rha.isr +uiuc.rha.lar +uiuc.rha.par +uiuc.rha.peabody +uiuc.rha.triad +uiuc.rha.tvd +uiuc.sport.basketball +uiuc.sport.football +uiuc.sw.bsdi +uiuc.sw.linux +uiuc.sw.mathematica +uiuc.sw.mentorg +uiuc.sw.mosaic +uiuc.sw.mosiac +uiuc.sw.paradox +uiuc.sw.pctcp +uiuc.sw.softimage +uiuc.sw.troff +uiuc.sw.win95 +uiuc.sys.aix +uiuc.sys.amiga +uiuc.sys.apple2 +uiuc.sys.dec +uiuc.sys.explorer +uiuc.sys.hp +uiuc.sys.ibm-pc +uiuc.sys.ibm-rt +uiuc.sys.mac +uiuc.sys.msnet +uiuc.sys.next +uiuc.sys.sgi +uiuc.sys.sun +uiuc.test +uiuc.women +uk.adverts.books +uk.adverts.computer +uk.adverts.other +uk.adverts.personals +uk.adverts.personals.gay-lesbian-bi +uk.adverts.stolen.announce +uk.adverts.stolen.d +uk.announce +uk.announce.d +uk.announce.events +uk.announce.events.d +uk.answers +uk.business.accountancy +uk.business.telework +uk.community.firefighting +uk.community.social-housing +uk.community.voluntary +uk.comp.ikbs +uk.comp.misc +uk.comp.os.linux +uk.comp.os.win95 +uk.comp.sys.sun +uk.comp.training +uk.comp.vendors +uk.consultants +uk.current-events.general +uk.current-events.n-ireland +uk.d-i-y +uk.education.16plus +uk.education.expeditions +uk.education.governors +uk.education.home-education +uk.education.maths +uk.education.misc +uk.education.schools-it +uk.education.staffroom +uk.education.teachers +uk.environment +uk.environment.conservation +uk.finance +uk.food+drink.archives +uk.food+drink.misc +uk.food+drink.real-ale +uk.food+drink.restaurants +uk.games.board +uk.games.computer.quake +uk.games.computer.quake2 +uk.games.misc +uk.games.roleplay +uk.games.trading-cards.marketplace +uk.games.trading-cards.misc +uk.games.video.misc +uk.games.video.playstation +uk.games.video.playstation.forsale +uk.gay-lesbian-bi +uk.gov.agency.csa +uk.gov.local +uk.jobs.contract +uk.jobs.d +uk.jobs.offered +uk.jobs.wanted +uk.legal +uk.local.birmingham +uk.local.channel-isles +uk.local.geordie +uk.local.hampshire +uk.local.kent +uk.local.london +uk.local.midlands +uk.local.north-wales +uk.local.nw-england +uk.local.south-wales +uk.local.southwest +uk.local.surrey +uk.local.thames-valley +uk.local.yorkshire +uk.media +uk.media.animation.anime +uk.media.books.sf +uk.media.films +uk.media.films.carry-on +uk.media.home-cinema +uk.media.radio.archers +uk.media.radio.bbc-r1 +uk.media.radio.bbc-r2 +uk.media.radio.bbc-r4 +uk.media.radio.bbc-r5 +uk.media.radio.hospital +uk.media.radio.misc +uk.media.radio.radcliffe +uk.media.tv.brookside +uk.media.tv.childrens +uk.media.tv.er +uk.media.tv.friends +uk.media.tv.misc +uk.media.tv.sf.babylon5 +uk.media.tv.sf.babylon5.misc +uk.media.tv.sf.babylon5.social +uk.media.tv.sf.drwho +uk.media.tv.sf.misc +uk.media.tv.sf.startrek +uk.media.tv.sf.x-files +uk.media.tv.simpsons +uk.media.tv.sky +uk.media.tv.time-team +uk.misc +uk.music.alternative +uk.music.breakbeat +uk.music.folk +uk.music.guitar +uk.music.makers.dj +uk.music.misc +uk.music.rave +uk.music.rhythm-n-blues +uk.net +uk.net.jips +uk.net.news.announce +uk.net.news.config +uk.net.news.management +uk.org.bcs.announce +uk.org.bcs.misc +uk.org.community +uk.org.epsrc.hpc.news +uk.org.mensa +uk.org.starlink.announce +uk.org.starlink.misc +uk.org.ukuug +uk.org.women-in-comp +uk.org.youth-clubs.fury +uk.org.youth-clubs.mayc +uk.people.bdsm +uk.people.consumers +uk.people.deaf +uk.people.disability +uk.people.fathers +uk.people.gothic +uk.people.health +uk.people.rural +uk.people.sf-fans +uk.people.support.epilepsy +uk.people.support.mult-sclerosis +uk.people.teens +uk.politics.animals +uk.politics.announce +uk.politics.censorship +uk.politics.constitution +uk.politics.crime +uk.politics.drugs +uk.politics.economics +uk.politics.electoral +uk.politics.environment +uk.politics.guns +uk.politics.misc +uk.politics.parliament +uk.politics.philosophy +uk.radio.amateur +uk.railway +uk.rec.audio +uk.rec.audio.car +uk.rec.aviation +uk.rec.birdwatching +uk.rec.boats.paddle +uk.rec.bodybuilding +uk.rec.caravanning +uk.rec.cars.4x4 +uk.rec.cars.classic +uk.rec.cars.maintenance +uk.rec.cars.tvr +uk.rec.cars.vw.aircooled +uk.rec.caving +uk.rec.climbing +uk.rec.collecting.misc +uk.rec.competitions +uk.rec.crafts +uk.rec.cycling +uk.rec.engines.stationary +uk.rec.equestrian +uk.rec.fishing.coarse +uk.rec.fishing.game +uk.rec.fishing.sea +uk.rec.gambling.misc +uk.rec.gardening +uk.rec.metaldetecting +uk.rec.models.rail +uk.rec.motorcycles +uk.rec.motorcycles.trailriding +uk.rec.motorsport.misc +uk.rec.motorsport.oval-racing +uk.rec.naturist +uk.rec.pets.misc +uk.rec.photo.adverts +uk.rec.photo.misc +uk.rec.psychic +uk.rec.sailing +uk.rec.scouting +uk.rec.scuba +uk.rec.sheds +uk.rec.subterranea +uk.rec.ufo +uk.rec.walking +uk.rec.waterways +uk.rec.youth-hostel +uk.religion.buddhist +uk.religion.christian +uk.religion.hindu +uk.religion.interfaith +uk.religion.islam +uk.religion.jewish +uk.religion.misc +uk.religion.other-faiths +uk.sci.med.pharmacy +uk.sci.misc +uk.sci.weather +uk.singles +uk.sport.athletics +uk.sport.cricket +uk.sport.football.american +uk.sport.golf +uk.sport.horseracing +uk.sport.ice-hockey +uk.sport.misc +uk.tech.broadcast +uk.tech.misc +uk.tech.y2k +uk.telecom +uk.telecom.mobile +uk.test +uk.transport +uk.transport.air +uk.transport.ferry +uk.transport.london +uk.transport.ride-sharing +ukr.archives +ukr.business.vestlan +ukr.commerce.auto +ukr.commerce.chemical +ukr.commerce.construction +ukr.commerce.energy +ukr.commerce.estate +ukr.commerce.food +ukr.commerce.household +ukr.commerce.infoserv +ukr.commerce.machinery +ukr.commerce.metals +ukr.commerce.misc +ukr.commerce.money +ukr.commerce.orgtech +ukr.commerce.price-lists +ukr.commerce.talk +ukr.comp.binaries +ukr.comp.hardware +ukr.comp.software +ukr.fido.os2 +ukr.finance +ukr.flames +ukr.gc.chronical +ukr.gc.normativ +ukr.law +ukr.netnews +ukr.nodes +ukr.politics +ukr.rules +ukr.science +ukr.test +ukr.usis +um.chinese +um.comp-iss +um.forsale +um.general +um.h19 +um.housing +um.music +um.network +um.org.mac-usergroup +um.test +um.umcptalk +um.wam +um.wam.bmgt301 +umiami.cs.announce +umiami.general +umich.academic.competitions +umich.announce.umnet +umich.biking +umich.class.test +umich.class.testing.once.again.ignore +umich.confer +umich.eecs.announce +umich.eecs.ce.students +umich.eecs.dco.announce +umich.eecs.dco.stats +umich.eecs.dco.test +umich.geo +umich.housing.ethernet +umich.ifs.outages +umich.interesting.people +umich.isr.ahead +umich.itd.stats +umich.kinesiology.gradvice +umich.linux +umich.michigan.review +umich.novell +umich.org.bsn +umich.org.continuum +umich.org.lsasg +umich.org.tbp +umich.org.umec +umich.org.umec.graduation +umich.physics.general +umich.rha +umich.sports +umich.test.2mod +umich.test.mod +umich.test.mod3 +umich.test.woof +umich.umce.dialin +umich.umce.dns +umich.umce.ifs +umich.umce.lars+mars +umich.umce.usenet +umich.umd.general +umn.aem.general +umn.aem.gradst +umn.aem.net +umn.aem.seminars +umn.aem.ugrads +umn.avian.turkey +umn.cbs.announce +umn.cbs.general +umn.cbs.test +umn.cems.ugrads +umn.cis.announce +umn.cis.general +umn.cis.minnext +umn.cis.systems +umn.cis.test +umn.coled.alumni +umn.comp.ftp-mirror +umn.comp.os.unix +umn.comp.os.vms +umn.comp.sys.ibm +umn.comp.sys.mac +umn.comp.sys.sgi +umn.comp.sys.sun +umn.config +umn.cs.bldg +umn.cs.class.3317ext +umn.cs.class.3321ext +umn.cs.class.8011-scic +umn.cs.curriculum +umn.cs.dept +umn.cs.faculty +umn.cs.general +umn.cs.gradst +umn.cs.gripes +umn.cs.jobs +umn.cs.labs.ai +umn.cs.labs.grad +umn.cs.lang.c +umn.cs.lang.c++ +umn.cs.lang.misc +umn.cs.net +umn.cs.seminars +umn.cs.soc +umn.cs.test +umn.cs.text.framemaker +umn.cs.text.tex +umn.cs.ugrads +umn.cs.windows.x +umn.csom.class.oms8995 +umn.csom.general +umn.csom.ids5410 +umn.csom.ids8110 +umn.csom.ids8450 +umn.csom.test +umn.daily.forum +umn.ee.announce +umn.ee.chatter +umn.ee.computer +umn.ee.dept +umn.ee.faculty +umn.ee.general +umn.ee.grads +umn.ee.seminar +umn.ee.test +umn.ee.undergrads +umn.epsy.deaf.students +umn.epsy.deaf.teacher-parent +umn.fan.serge-rudaz +umn.fscn.general +umn.fscn.ift +umn.general.energy +umn.general.events +umn.general.food +umn.general.forsale +umn.general.housing +umn.general.jobs +umn.general.lost+found +umn.general.misc +umn.general.movies +umn.general.music +umn.general.sports +umn.ioft.class.1001h +umn.itlab.bldg +umn.itlab.curriculum +umn.itlab.dept +umn.itlab.faculty +umn.itlab.general +umn.itlab.gradst +umn.itlab.gripes +umn.itlab.jobs +umn.itlab.lang.c +umn.itlab.lang.c++ +umn.itlab.lang.misc +umn.itlab.net +umn.itlab.soc +umn.itlab.systems.mac +umn.itlab.systems.misc +umn.itlab.systems.pc +umn.itlab.systems.status +umn.itlab.systems.sun +umn.itlab.systems.unix +umn.itlab.test +umn.itlab.text.framemaker +umn.itlab.text.tex +umn.itlab.ugrads +umn.itlab.windows.x +umn.local-lists.aci-4d +umn.local-lists.austrian-cultu +umn.local-lists.cnug-dss +umn.local-lists.decstation-man +umn.local-lists.disc-env +umn.local-lists.disc-evidence +umn.local-lists.disc-nordic +umn.local-lists.disc-nordlib +umn.local-lists.disc-sar +umn.local-lists.disc-tacfanout +umn.local-lists.disc-vis-graph +umn.local-lists.epixinfo +umn.local-lists.ethnic-theater +umn.local-lists.infotech-disc +umn.local-lists.mac-consort +umn.local-lists.net-ops +umn.local-lists.net-people +umn.local-lists.news +umn.local-lists.news-stats +umn.local-lists.novell +umn.local-lists.security +umn.local-lists.sgi-admins +umn.local-lists.siren +umn.local-lists.sun-news +umn.local-lists.techc-admin +umn.local-lists.techc-all +umn.local-lists.techc-atm +umn.local-lists.techc-backup +umn.local-lists.techc-cal +umn.local-lists.techc-email +umn.local-lists.techc-general +umn.local-lists.techc-microlan +umn.local-lists.techc-modems +umn.local-lists.techc-public +umn.local-lists.techc-sgi +umn.local-lists.techc-site +umn.local-lists.techc-unix +umn.local-lists.techc-web +umn.local-lists.techc-workst +umn.local-lists.ubike-info +umn.local-lists.umn-email +umn.local-lists.umn-www +umn.local-lists.users-mlre +umn.local-lists.wg-cscc +umn.local-lists.writingc +umn.local-lists.x3j9-admin +umn.local-lists.x3j9-tech +umn.math.dept +umn.math.zoo +umn.morris.general +umn.morris.misc +umn.net-lists.explorer +umn.net-lists.info-appletalk +umn.net-lists.rfc931-users +umn.news-server.announce +umn.news-server.questions +umn.news-server.test +umn.news-server.traffic +umn.ophth.isrk +umn.org.acm +umn.org.china +umn.org.india +umn.org.sps +umn.ortta.general +umn.rhet.general +umn.rhet.gradst +umn.soc.faculty +umn.soc.general +umn.soc.grad +umn.socsci.applications +umn.socsci.general +umn.socsci.system +umn.socsci.test +umn.tc.systems +umontreal.cerca +umontreal.general +un.public.dha.reliefweb +un.public.itu.announce +un.public.itu.telecom.cyberforum +unicef.test +unihigh.agora +unihigh.alumni +unihigh.announce +unihigh.arts +unihigh.classifieds +unihigh.clubs +unihigh.comp +unihigh.freshmen +unihigh.gargoyle +unihigh.gargoyle.d +unihigh.german +unihigh.juniors +unihigh.library +unihigh.misc +unihigh.monitors +unihigh.parents +unihigh.policy +unihigh.questions +unihigh.seniors +unihigh.sophomores +unihigh.sports +unihigh.sports.scores +unihigh.subfreshmen +unihigh.yearbook +uog.ccs.unix_support +us.arts +us.arts.tv.soaps +us.config +us.events.ok-explosion +us.legal +us.marketplace.computers.hardware +us.marketplace.computers.software +us.marketplace.games +us.marketplace.other +us.military.army +us.misc +us.misc.family-radio +us.politics +us.politics.abortion +us.rec.scouting +us.sport +us.sport.baseball +us.sport.basketball +us.sport.football +us.state.iowa +us.taxes +us.test +usf.alumni +ut.ai +ut.bizarre +ut.chinese +ut.config +ut.dcs.db +ut.dcs.gradnews +ut.dcs.na +ut.ecf.announce +ut.ecf.aps105 +ut.ecf.beam95 +ut.ecf.cdrom +ut.ecf.che221 +ut.ecf.comp9t5 +ut.ecf.csc190 +ut.ecf.csc326 +ut.ecf.ece1753 +ut.ecf.ece1755 +ut.ecf.ece203 +ut.ecf.ece242 +ut.ecf.ece253 +ut.ecf.ece344 +ut.ecf.ece385 +ut.ecf.ece443 +ut.ecf.engsci +ut.ecf.general +ut.ecf.mat186 +ut.ecf.pey +ut.ecf.student +ut.eng.gradnews +ut.engineering.general +ut.engineering.seminars +ut.erin.csc354e +ut.erin.eco206e +ut.erin.eco220e +ut.erin.mgt206e +ut.flame +ut.followup +ut.general +ut.gradnews +ut.jobs +ut.nets.reports +ut.org.seta +ut.physics.general +ut.physics.gradnews +ut.physics.seminars +ut.scar.announce +ut.scar.cscb28 +ut.scar.ecoc11 +ut.scar.eesb03s +ut.scar.lina01 +ut.scar.linc06 +ut.scar.opinion.bio +ut.scar.vpaa99 +ut.stardate +ut.test +ut.text +ut.trin.general +uta.animaatio +utah.forsale +utah.linux +utcs.general +utcs.grad +utcs.graphics +utcs.jobs +utcs.lispm +utcs.projects +utcs.talks +utcs.techreports +utcs.under +utcs.upe +utece.general +utexas.cba.cba-board +utexas.cc.hpcf.sysmod +utexas.cc.hpcf.system +utexas.cc.math +utexas.cc.sysmod +utexas.cc.sysmod.dvf +utexas.cc.sysmod.nt +utexas.cc.sysmod.vms +utexas.cc.utxvm.notices +utexas.class.acc380k2 +utexas.class.acc382k +utexas.class.acc384 +utexas.class.acc456 +utexas.class.ase201 +utexas.class.ase211 +utexas.class.ba358t +utexas.class.ba385t +utexas.class.ba389t-3 +utexas.class.ba389t-4 +utexas.class.ch301-lagowski +utexas.class.ch301-lagowski.data +utexas.class.cs105.c++ +utexas.class.cs105.c++-dianelaw +utexas.class.cs105.lisp +utexas.class.cs304p +utexas.class.cs310 +utexas.class.cs315 +utexas.class.cs328 +utexas.class.cs336 +utexas.class.cs336a +utexas.class.cs345-richards +utexas.class.cs345.lin +utexas.class.cs347-a +utexas.class.cs347-b +utexas.class.cs352 +utexas.class.cs352j +utexas.class.cs354 +utexas.class.cs356 +utexas.class.cs367 +utexas.class.cs372 +utexas.class.cs372-brice +utexas.class.cs373 +utexas.class.cs378-ci +utexas.class.cs378-crypto +utexas.class.cs378-downing +utexas.class.cs378-lavender +utexas.class.cs378-net +utexas.class.cs378-richards +utexas.class.cs378.formal-methods +utexas.class.cs380d +utexas.class.cs384g +utexas.class.cs395t-novak +utexas.class.cs395t.multimedia +utexas.class.csd367k +utexas.class.e306-ca-prev +utexas.class.e309k-ca +utexas.class.e309m +utexas.class.e316k-american +utexas.class.e384k-biblio +utexas.class.edc385g +utexas.class.edp363 +utexas.class.ee302 +utexas.class.ee302h +utexas.class.ee312 +utexas.class.ee360c +utexas.class.ee360r +utexas.class.ee371m +utexas.class.ee371r +utexas.class.ee381k +utexas.class.ee382c +utexas.class.ee382c-ja +utexas.class.ee382m +utexas.class.ee440 +utexas.class.fin357 +utexas.class.hisf315k +utexas.class.hmn350 +utexas.class.lin340 +utexas.class.lis322t +utexas.class.lis341-ivins +utexas.class.lis341-moore +utexas.class.lis341-trybula +utexas.class.lis382l-9 +utexas.class.lis384k-7 +utexas.class.lis384k9 +utexas.class.lis386-1 +utexas.class.lis388k-12 +utexas.class.m408d +utexas.class.me202 +utexas.class.me326 +utexas.class.me328sch +utexas.class.me333t +utexas.class.mic128c +utexas.class.mic368 +utexas.class.mis333k +utexas.class.phl304-pennock +utexas.class.phl313k +utexas.class.phl325c +utexas.class.rtf305 +utexas.class.rtf309 +utexas.class.rtf365 +utexas.class.spe390r +utexas.class.spef390r +utexas.class.spn378h +utexas.class.zoo370c +utexas.comp.windows-nt +utexas.csr.aussie +utexas.dorms.general +utexas.ece.announce +utexas.ece.general +utexas.ecelrc.sysmod +utexas.general +utexas.geo.discussion +utexas.gslis.general +utexas.gslis.iplab +utexas.intoffice.news +utexas.law +utexas.lib.online +utexas.math.actuarial +utexas.math.courses +utexas.multimedia +utexas.nat-sci.deans-scholars +utexas.org.cons-bio +utexas.org.democrats +utexas.org.fea +utexas.org.gec +utexas.org.gradstudents +utexas.org.ksa +utexas.org.philosophy +utexas.org.plan2 +utexas.org.sota +utexas.org.st-athanasius +utexas.org.tusa +utexas.org.uthabitat +utexas.religion.christian +utexas.sqi.soft +utexas.sqi.soft.aseg +utexas.sqi.soft.ootech +utexas.sqi.soft.projectmgt +utexas.sqi.soft.quality +utexas.zoo.general +uunet.alternet +uunet.announce +uunet.forum +uunet.products +uunet.status +uunet.tech +uw.acct.acc121 +uw.acct.acc131 +uw.acct.acc228 +uw.acct.acc231 +uw.acct.acc232 +uw.acct.acc241 +uw.acct.acc251 +uw.acct.acc291 +uw.acct.acc371 +uw.acct.acc372 +uw.acct.acc381 +uw.acct.acc382 +uw.acct.acc392 +uw.acct.acc401 +uw.acct.acc401a +uw.acct.acc418y +uw.acct.acc431 +uw.acct.acc432 +uw.acct.acc442 +uw.acct.acc443 +uw.acct.acc451 +uw.acct.acc453 +uw.acct.acc454 +uw.acct.acc461 +uw.acct.acc462 +uw.acct.acc463a +uw.acct.acc480 +uw.acct.acc491 +uw.acct.acc601 +uw.acct.acc610 +uw.acct.acc611 +uw.acct.acc630 +uw.acct.acc650 +uw.acct.acc651 +uw.acct.acc660 +uw.acct.acc661 +uw.acct.acc663 +uw.acct.acc670 +uw.acct.acc680 +uw.acct.acc681 +uw.acct.acc692 +uw.acct.acc771 +uw.acct.acc782 +uw.acct.general +uw.acct.macc +uw.acct.research +uw.aco.system +uw.ahs.ahsum +uw.ahs.general +uw.ahs.system +uw.ai.learning +uw.aix.support +uw.alt.sex.beastiality +uw.alt.sex.bestiality +uw.alt.sex.bondage +uw.alt.sex.stories +uw.alt.sex.stories.d +uw.alt.tasteless +uw.anth.anth300 +uw.archive +uw.arts.general +uw.arts.grad +uw.arts.ugrad +uw.asplos +uw.assignments +uw.biol.biol456 +uw.biol.biol461 +uw.business-club +uw.campus-news +uw.casi +uw.ccng.general +uw.ccng.system +uw.cgl +uw.cgl.software +uw.che.che045 +uw.che.che4a +uw.che.che562 +uw.che.che572 +uw.chem116.ahs +uw.chinese +uw.cive.cive221 +uw.cive.cive222 +uw.cive.cive265 +uw.cive.cive306 +uw.cive.cive375 +uw.cive.cive381 +uw.cive.cive403 +uw.cive.cive404 +uw.cive.cive414 +uw.cive.cive422 +uw.cive.cive472 +uw.cive.cive473 +uw.cive.cive483 +uw.cive.cive486 +uw.cive.cive498 +uw.cive.cive640 +uw.cive.cive701 +uw.cive.general +uw.cive.tick +uw.club.badminton +uw.clubs.act-sci +uw.clubs.african +uw.clubs.badminton +uw.clubs.bridge +uw.clubs.ccf +uw.clubs.chemclub +uw.clubs.chinese +uw.clubs.econsociety +uw.clubs.invest +uw.clubs.konnichi-wa +uw.clubs.konnichi-wa.japan +uw.clubs.korean +uw.clubs.navs +uw.clubs.objectivism +uw.clubs.psa +uw.clubs.ssa +uw.clubs.triathlon +uw.clubs.twsa +uw.clubs.ultimate +uw.clubs.waveform.transmission +uw.co.co331 +uw.co.co342 +uw.co.co437 +uw.co.co666 +uw.combopt +uw.computing.support.staff +uw.cong.system +uw.coop.sac +uw.cray +uw.cs.cs100 +uw.cs.cs100.lab21back +uw.cs.cs100.lab21front +uw.cs.cs100.lab22back +uw.cs.cs100.lab22front +uw.cs.cs100.lab23back +uw.cs.cs100.lab23front +uw.cs.cs100.lab24back +uw.cs.cs100.lab24front +uw.cs.cs100.lab31back +uw.cs.cs100.lab31front +uw.cs.cs100.lab32back +uw.cs.cs100.lab32front +uw.cs.cs100.lab33back +uw.cs.cs100.lab33front +uw.cs.cs100.lab34back +uw.cs.cs100.lab34front +uw.cs.cs100.lab41back +uw.cs.cs100.lab41front +uw.cs.cs100.lab42back +uw.cs.cs100.lab42front +uw.cs.cs100.lab43back +uw.cs.cs100.lab43front +uw.cs.cs100.lab44back +uw.cs.cs100.lab44front +uw.cs.cs100.lab51back +uw.cs.cs100.lab51front +uw.cs.cs100.lab52back +uw.cs.cs100.lab52front +uw.cs.cs120 +uw.cs.cs134 +uw.cs.cs200 +uw.cs.cs212 +uw.cs.cs230 +uw.cs.cs240 +uw.cs.cs241 +uw.cs.cs242 +uw.cs.cs242.c++ +uw.cs.cs246 +uw.cs.cs316 +uw.cs.cs330 +uw.cs.cs338 +uw.cs.cs342 +uw.cs.cs370 +uw.cs.cs436 +uw.cs.cs444 +uw.cs.cs445 +uw.cs.cs498p +uw.cs.cs746 +uw.cs.cs788 +uw.cs.cs798d +uw.cs.dept +uw.cs.eee +uw.cs.faculty +uw.cs.general +uw.cs.grad +uw.cs.grad.topics +uw.cs.ugrad +uw.csc +uw.csg +uw.dcs.changes +uw.dcs.courses +uw.dcs.gripe +uw.dcs.news +uw.dcs.operations +uw.dcs.suggestions +uw.dcs.system +uw.dcs.watserv1 +uw.dcs.watshine +uw.disspla +uw.dp.changes +uw.dp.staff +uw.dsgroup +uw.dsgroup.misc +uw.ece.com1a +uw.ece.com1b +uw.ece.ece150 +uw.ece.ece209 +uw.ece.ece304 +uw.ece.ece405 +uw.ece.ece411 +uw.ece.ece443 +uw.ece.ece451 +uw.ece.ece453 +uw.ece.ece471 +uw.ece.ece482 +uw.ece.ece621 +uw.ece.ece647 +uw.ece.ece652 +uw.ece.ele1a +uw.ece.ele1b +uw.ece.jobs +uw.econ.eco101 +uw.econ.eco201 +uw.econ.eco221 +uw.econ.eco301 +uw.econ.econ102 +uw.ee.ee621 +uw.ee.grad +uw.ee.opt +uw.engl.engl102a +uw.engl.engl210e +uw.engl.engl210f +uw.engl.engl794f +uw.engl.grad.research +uw.english-usage +uw.engsoc.athletics +uw.enve.enve320 +uw.enve.enve322 +uw.enve.enve330 +uw.envst.arch171 +uw.envst.arch171.discuss1 +uw.envst.arch171.discuss2 +uw.envst.envs200 +uw.envst.envs220 +uw.envst.ers285 +uw.envst.ers301 +uw.envst.ers305 +uw.envst.ers496 +uw.envst.general +uw.envst.geog165 +uw.envst.geog255 +uw.envst.geog303 +uw.envst.plan220 +uw.envst.plan355 +uw.envst.plan474p +uw.envst.system +uw.ers.ers241 +uw.fass +uw.feds +uw.forsale +uw.gams +uw.gene.gene16x +uw.gene.gene412 +uw.gene.gene452 +uw.gene121.compeng +uw.general +uw.geoeng +uw.gllow +uw.gnu +uw.harmony +uw.history.hist106 +uw.history.hist264a +uw.history.hist264b +uw.history.hist326 +uw.history.hist403 +uw.history.hist653 +uw.icr +uw.icr.forum +uw.icr.hardware +uw.ieee +uw.image-proc +uw.imprint +uw.kin +uw.kin.kin346 +uw.kin.kin401 +uw.kin.kin425 +uw.kin425 +uw.lang +uw.laurel +uw.laurelcreek +uw.library +uw.logic +uw.lpaig +uw.lpaig.changes +uw.lpaig.system +uw.mac-users +uw.mail-list.biomech +uw.mail-list.comp-chem +uw.mail-list.fractals +uw.mail-list.s +uw.mail-list.sun-managers +uw.maple +uw.math.faculty +uw.math.faculty.planning +uw.math.grad +uw.math.math136 +uw.math.math235 +uw.math.mathsoc +uw.math.tsa +uw.mathcad +uw.matlab +uw.me.me262 +uw.me.me269 +uw.me.me2a +uw.me.me2b +uw.me.me300 +uw.me.me3a +uw.me.me3b +uw.me.me423 +uw.me.me4a +uw.me.me4b +uw.mech.system +uw.mfcf.bugs +uw.mfcf.gripe +uw.mfcf.hardware +uw.mfcf.hardware.mac +uw.mfcf.people +uw.mfcf.questions +uw.mfcf.software +uw.mfcf.software.mac +uw.mfcf.suggestions +uw.mfcf.system +uw.mfcf.updates +uw.minos +uw.msci.msci211 +uw.msci.msci261 +uw.msci.msci311 +uw.msci.msci311ta +uw.msci.msci33 +uw.msci.msci331 +uw.msci.msci431 +uw.msci.msci432 +uw.msci.msci441 +uw.msci.msci442 +uw.msci.msci442.reviews +uw.msci.msci442.thoughts +uw.msci.msci601 +uw.msci.msci604 +uw.msci.msci642 +uw.msci.msci646 +uw.msci.msci723 +uw.msci.mssa +uw.nag +uw.network +uw.network.external +uw.network.stats +uw.neural-nets +uw.newsgroups +uw.opinion +uw.os.research +uw.os2-users +uw.outers +uw.pami +uw.pami.bsd +uw.pami.gripe +uw.pami.system +uw.phil.phil256 +uw.phil.phil322 +uw.phys.phys123 +uw.pmath.pmath336 +uw.pmath.pmath399c +uw.pmc +uw.progressive.conservatives.club +uw.psychology +uw.psychology.psyc101b +uw.psychology.psyc207 +uw.psychology.psyc212 +uw.psychology.psyc261 +uw.psychology.psyc292 +uw.psychology.psyc304 +uw.psychology.psyc306 +uw.psychology.psyc311 +uw.psychology.psyc393 +uw.psychology.psyc463a +uw.psychology.psyc631 +uw.psychology.psyc647a +uw.psychology.ugrad +uw.psychology.ugrad.research +uw.recycling +uw.scicom +uw.sd.grad +uw.sgi.support +uw.shoshin +uw.shoshin.changes +uw.shoshin.system +uw.staffassoc +uw.stats +uw.stats.s +uw.stats.stat204 +uw.stats.stat211 +uw.stats.stat231 +uw.stats.stat331 +uw.stv.stv204 +uw.sun-owners +uw.swen +uw.syde.syde114 +uw.syde.syde121 +uw.syde.syde182 +uw.syde.syde1b +uw.syde.syde311 +uw.syde.syde312 +uw.syde.syde321 +uw.syde.syde381 +uw.syde.syde3a +uw.syde.syde3b +uw.syde.syde422 +uw.syde.syde533 +uw.syde.syde536 +uw.syde.syde621 +uw.syde.syde632 +uw.sylvan +uw.sylvan.os +uw.sys.amiga +uw.sys.apollo +uw.sys.atari +uw.sytek +uw.talks +uw.test +uw.tex +uw.ucc.fortrade +uw.ucc.review +uw.ugrad.cs +uw.unix +uw.unix.sysadmin +uw.usystem +uw.utility.shutdowns +uw.uwinfo +uw.virtual-worlds +uw.visualization +uw.vlsi +uw.vlsi.software +uw.vlsi.system +uw.vm-migration +uw.vms +uw.watgreen +uw.watstar +uw.weef +uw.win95-users +uw.wlu.bus +uw.wordperfect.users +uw.wpirg +uw.x-hints +uw.x-windows +uwcsa.general +uwisc.forsale +uwisc.forum +uwisc.general +uwisc.nsfdoc +uwm.general +uwo.astro.ast021 +uwo.biochem +uwo.biology.bio221a +uwo.biomed.engrg +uwo.biomed.inroads +uwo.ccs.changes +uwo.clubs.wow-kayak +uwo.comp.general +uwo.comp.helpdesk +uwo.comp.ibm.announce +uwo.comp.micro +uwo.comp.net-status +uwo.comp.nupop +uwo.comp.packet +uwo.comp.pine +uwo.comp.progress +uwo.comp.security +uwo.comp.sgi.announce +uwo.comp.sun.announce +uwo.comp.wais +uwo.comp.x500 +uwo.csd.acm +uwo.csd.cs175 +uwo.csd.cs201 +uwo.csd.cs304 +uwo.csd.cs305 +uwo.csd.cs319 +uwo.csd.cs331 +uwo.csd.cs333 +uwo.csd.cs333y +uwo.csd.cs346 +uwo.csd.cs357a +uwo.csd.cs402 +uwo.csd.cs434 +uwo.csd.cs619 +uwo.csd.cs650a +uwo.engrg.es391b +uwo.engrg.general +uwo.events +uwo.geog.308b +uwo.iaa.research +uwo.its.cmsteam +uwo.library +uwo.med +uwo.med.research +uwo.med.talk +uwo.physics.optics +uwo.pma +uwo.slis.c558 +uwo.slis.c591 +uwo.slis.c601 +uwo.slis.c640 +uwo.slis.c705 +uwo.slis.c706 +uwo.slis.c707 +uwo.slis.c708 +uwo.slis.review +uwo.sogs +uwo.ssc.network +uwo.test +uwo.wbs.general +uwo.wbs.hba +uwo.wbs.mba +uwo.wbs.phd +uwo.wbs.techtalk +va.config +va.forsale +va.general +va.jobs +va.politics +va.test +van.chatter +van.forsale +van.general +van.jobs +van.test +van.vpcus.announce +van.vpcus.general +van.vpcus.sigs.internet +van.vpcus.sigs.os2 +vegas.bi +vegas.config +vegas.food +vegas.for-sale +vegas.general +vegas.jobs +vegas.motss +vegas.personals +vegas.personals.fsf +vegas.personals.fsm +vegas.personals.msf +vegas.personals.msm +vegas.personals.swingers +vegas.singles +vegas.test +vgc.announce +vgc.archives +vgc.config +vgc.jp.announce +vgc.jp.games.calssical +vgc.jp.games.kingofbattle +vgc.jp.games.quiz +vgc.jp.games.winbattle +vgc.jp.misc +vgc.jp.newgames +vgc.jp.test +vgc.jp.updateinfo +vgc.jp.users.newusers +vgc.jp.users.questions +vgc.jp.wanted +viwa.a.xep.bam +viwa.annimals +viwa.anti_virus +viwa.any.humor +viwa.bbs.talk +viwa.books +viwa.cinema +viwa.cobet +viwa.commerce +viwa.crack.and.hack +viwa.elite +viwa.english.talks +viwa.formula.one +viwa.forward +viwa.forward.talk +viwa.gama +viwa.gr.ob +viwa.grafoman +viwa.guitar +viwa.hardware +viwa.history +viwa.inet +viwa.ipex.flame +viwa.local_talks +viwa.mailer +viwa.make-a-fake +viwa.metaphisic.rpg +viwa.military.music +viwa.military.sex +viwa.motherland +viwa.music.lyrics +viwa.music.talks +viwa.music.talks.rap +viwa.music.talks.rave +viwa.music.uue +viwa.os2 +viwa.os2.soft +viwa.photo.uue +viwa.point +viwa.point.discuss +viwa.politics +viwa.programming +viwa.pvt.aqualangers.club +viwa.pvt.newspaper +viwa.ru.djatlov +viwa.sex +viwa.shells +viwa.sobutilnik +viwa.sport +viwa.sysop.gad +viwa.talks.about.nothing +viwa.tormoz +viwa.tosser +viwa.tracker.sampler +viwa.unix +viwa.vampire +viwa.zze +vmsnet.alpha +vmsnet.announce +vmsnet.announce.newusers +vmsnet.decus.journal +vmsnet.decus.lugs +vmsnet.employment +vmsnet.epsilon-cd +vmsnet.groups +vmsnet.infosystems.gopher +vmsnet.infosystems.misc +vmsnet.internals +vmsnet.mail.misc +vmsnet.mail.mx +vmsnet.mail.pmdf +vmsnet.misc +vmsnet.networks.desktop.misc +vmsnet.networks.desktop.pathworks +vmsnet.networks.management.decmcc +vmsnet.networks.management.misc +vmsnet.networks.misc +vmsnet.networks.tcp-ip.cmu-tek +vmsnet.networks.tcp-ip.misc +vmsnet.networks.tcp-ip.multinet +vmsnet.networks.tcp-ip.tcpware +vmsnet.networks.tcp-ip.ucx +vmsnet.networks.tcp-ip.wintcp +vmsnet.pdp-11 +vmsnet.sdk.openvms.fieldtest +vmsnet.sources +vmsnet.sources.d +vmsnet.sources.games +vmsnet.sysmgt +vmsnet.test +vmsnet.tpu +vmsnet.uucp +vmsnet.vms-posix +vnet.general +vu.org.mac101 +vuw.general +wash.assistive-tech +wash.general +wash.politics +wash.test +well.general +wesley.general +wi.forsale +wi.general +wi.transit +witten.flohmarkt +witten.kultur +witten.politik +witten.test +wiz.bmw +wiz.mopar +wiz.motorace +wiz.nren +wiz.roadsters +wny.events +wny.general +wny.motss +wny.news +wny.rochester.freenet +wny.rocslug +wny.seminar +wny.test +wny.unix-wizards +wny.wanted +wny.wbfo +wny.yumyum +wolfhh.admin +wolfhh.archive +wolfhh.config +wolfhh.general +wolfhh.sources +wolfhh.test +wpg.forsale.computers +wpg.forsale.misc +wpg.general +wpg.politics +wpi.ccc +wpi.ccc.training +wpi.clubs.hsa +wpi.cs.cs3013 +wpi.cs.cs4513 +wpi.cs.cs502 +wpi.en.en1251 +wpi.events +wpi.faculty +wpi.flame +wpi.library +wpi.net.roadmap +wpi.philosophy +wpi.spanish +wpi.steercom +wpi.test +wtby.announce +wu.bus.fin5411 +wu.bus.mgt5050 +wu.bus.mgt513f +wu.cait.3-tier +wu.cec.general +wu.cs.general +wyo.education +wyo.energy +wyo.general +wyo.internet +wyo.jobs +wyo.recreation +xs4all.announce +xs4all.be.announce +xs4all.be.general +xs4all.be.isdn +xs4all.be.test +xs4all.be.www +xs4all.isdn +xs4all.mediacul +xs4all.mediacul.zandbak +xs4all.test +xs4all.uucp +xs4all.www +yakima.general +yolo.general +yolo.life +yolo.news +yolo.news.admin +yolo.test +york.announce +york.ariel +york.arts.course.pols4110 +york.atk.course.nats1720 +york.atk.course.nats1900 +york.atkinson.huma1790 +york.bethune.course.bc1800c +york.calumet +york.chry +york.club.physclub +york.club.seds +york.doc +york.email +york.english.course.ak-eng3100z +york.english.course.ak-eng3780 +york.english.course.ak3770 +york.english.course.ak3780 +york.english.course.en2690 +york.english.course.eng319006a +york.english.course.eng777 +york.fes.undercurrents +york.fes.writers-cafe +york.general +york.history.course.hist1000c +york.history.course.hist3930a +york.history.discussion +york.humanities.course.huma2810 +york.mathstat.course.math2221 +york.mathstat.course.math4100 +york.natsci.course.nats1770 +york.philosophy.course.ak-phil2410 +york.philosophy.course.modr1714 +york.philosophy.course.phil2050 +york.philosophy.course.phil2080 +york.philosophy.course.phil2170 +york.philosophy.course.phil2240 +york.philosophy.course.phil2250 +york.philosophy.course.phil3220 +york.philosophy.course.phil3990 +york.philosophy.course.phil6100 +york.pols.dept +york.psychology.course.psyc3010 +york.psychology.course.psyc3010c +york.psychology.course.psyc3030 +york.science.course.phys5290 +york.science.course.phys5390 +york.science.maxwell +york.science.microlabs +york.socialscience.course.sosc3990h +york.test.multimedia +yuba.general +z-netz.alt.adventure +z-netz.alt.americansports +z-netz.alt.amiga-dos.helpline +z-netz.alt.apc+tcp.nocover +z-netz.alt.apc+tcp.support.databench +z-netz.alt.apc+tcp.usertreffen +z-netz.alt.astronomie.ereignisse +z-netz.alt.astronomie.texte +z-netz.alt.auto.schnell+tiefer +z-netz.alt.bayernanzeiger +z-netz.alt.bescheuert +z-netz.alt.bier +z-netz.alt.bikers-corner +z-netz.alt.binaer.hackreport +z-netz.alt.blueboxing +z-netz.alt.boerse +z-netz.alt.btx-gate +z-netz.alt.c64 +z-netz.alt.cadcam +z-netz.alt.chat.african-link +z-netz.alt.computerclub.auge +z-netz.alt.computerclub.ihc +z-netz.alt.draco.allgemein +z-netz.alt.drogen +z-netz.alt.duemmlich +z-netz.alt.ebm+electro +z-netz.alt.eigener_chef +z-netz.alt.eisenbahn +z-netz.alt.eishockey +z-netz.alt.elektronik +z-netz.alt.erotik.geschichten +z-netz.alt.erotik.talk +z-netz.alt.esoterik +z-netz.alt.esoterik.reiki +z-netz.alt.essen +z-netz.alt.familie +z-netz.alt.fan.admin-4-stock +z-netz.alt.fan.bifff +z-netz.alt.fan.helmut_goj +z-netz.alt.fan.holzmann +z-netz.alt.fan.kaeptnblaubaer +z-netz.alt.fan.rudi-pohlen +z-netz.alt.fileserver +z-netz.alt.firm-net.werbung +z-netz.alt.forum.netzwesen +z-netz.alt.fractint +z-netz.alt.freizeit.battletech +z-netz.alt.gate-bau +z-netz.alt.geos.allgemein +z-netz.alt.geos.binaer +z-netz.alt.geruechte +z-netz.alt.gesunde_schule +z-netz.alt.handicap.allgemein +z-netz.alt.handicap.blind +z-netz.alt.hilfe +z-netz.alt.hoersturz +z-netz.alt.ig-metall.aktuelles +z-netz.alt.ingenieure +z-netz.alt.ingenieure.vdi +z-netz.alt.jokes +z-netz.alt.jonglieren +z-netz.alt.knobel-ecke +z-netz.alt.kochbuch +z-netz.alt.kommerzielles +z-netz.alt.koordination.user+sysops +z-netz.alt.kultur.vernetzt +z-netz.alt.kunst +z-netz.alt.lightwave +z-netz.alt.linux +z-netz.alt.listen +z-netz.alt.magazine.pakt +z-netz.alt.mailbox.recht +z-netz.alt.mailboxwerbung +z-netz.alt.med.allgemein +z-netz.alt.med.mta +z-netz.alt.med.notfall +z-netz.alt.med.pflege +z-netz.alt.med.studenten +z-netz.alt.med.therapie +z-netz.alt.miteinander.stammtisch +z-netz.alt.modellbahn +z-netz.alt.modellbau +z-netz.alt.modem.pep +z-netz.alt.modem.usr +z-netz.alt.modem.zyxel +z-netz.alt.musik +z-netz.alt.musik.pink-floyd +z-netz.alt.musiker.allgemein +z-netz.alt.musiker.binaer +z-netz.alt.musiker.midi +z-netz.alt.obskur +z-netz.alt.only.frauen +z-netz.alt.only.maenner +z-netz.alt.partnerwahl +z-netz.alt.pbem.allgemein.allgemein +z-netz.alt.pbem.allgemein.anleitungen +z-netz.alt.pbem.allgemein.spielersuche +z-netz.alt.pbem.allgemein.spielsuche +z-netz.alt.pbem.allgemein.tools +z-netz.alt.pbem.imperium.allgemein +z-netz.alt.pbem.imperium.anleitungen +z-netz.alt.pbem.imperium.intern.news +z-netz.alt.pbem.imperium.intern.updates +z-netz.alt.pbem.imperium.news +z-netz.alt.pbem.imperium.spielersuche +z-netz.alt.pbem.imperium.spielsuche +z-netz.alt.pbem.imperium.tools +z-netz.alt.pbem.wichtig +z-netz.alt.pgp.allgemein +z-netz.alt.pgp.schluessel +z-netz.alt.pgp.tools.msdos +z-netz.alt.pgp.tools.sonstige +z-netz.alt.portrait.software +z-netz.alt.presse.mitteilungen +z-netz.alt.punk +z-netz.alt.pyrotechnik +z-netz.alt.rave-bin +z-netz.alt.raver +z-netz.alt.raver.strike +z-netz.alt.raytracing +z-netz.alt.rechner.amiga.binaer +z-netz.alt.rechner.amiga.diskussion +z-netz.alt.rechner.amiga.quellen +z-netz.alt.rechner.apple.binaer +z-netz.alt.rechner.apple.diskussion +z-netz.alt.rechner.apple.quellen +z-netz.alt.rechner.atari.8bit +z-netz.alt.rechner.atari.binaer +z-netz.alt.rechner.atari.diskussion +z-netz.alt.rechner.atari.quellen +z-netz.alt.rechner.c64+c128.binaer +z-netz.alt.rechner.c64+c128.diskussion +z-netz.alt.rechner.c64+c128.quellen +z-netz.alt.rechner.dokumentation +z-netz.alt.rechner.hinweis +z-netz.alt.rechner.ibm.binaer +z-netz.alt.rechner.ibm.diskussion +z-netz.alt.rechner.ibm.quellen +z-netz.alt.rechner.pocket-pool +z-netz.alt.rechner.psion.allgemein +z-netz.alt.rechner.psion.binaer +z-netz.alt.rechner.sonstiges +z-netz.alt.rechner.unix.diskussion +z-netz.alt.rechner.unix.quellen +z-netz.alt.rechnerkrieg +z-netz.alt.rollenspiele.dsa +z-netz.alt.rollenspiele.shadowrun +z-netz.alt.rollenspiele.tradecards +z-netz.alt.sat-tv +z-netz.alt.sauger-info.allgemein +z-netz.alt.sauger-info.amiga +z-netz.alt.sauger-info.apple +z-netz.alt.sauger-info.atari +z-netz.alt.sauger-info.ibm +z-netz.alt.sauger-info.sonstige +z-netz.alt.schach +z-netz.alt.schule.waldorf +z-netz.alt.scientology +z-netz.alt.spiele.infocom +z-netz.alt.spiele.infocom-binaer +z-netz.alt.support.dbox +z-netz.alt.support.dinoex +z-netz.alt.support.dpoint +z-netz.alt.support.emfido +z-netz.alt.support.fidozc +z-netz.alt.support.fidozerb +z-netz.alt.support.fserv +z-netz.alt.support.isdn-master +z-netz.alt.support.maczpoint +z-netz.alt.support.microdot +z-netz.alt.support.microdot-beta +z-netz.alt.support.mp2.allgemein +z-netz.alt.support.mp2.binaer +z-netz.alt.support.msgbase +z-netz.alt.support.mybox +z-netz.alt.support.natascha +z-netz.alt.support.ncbmail.allgemein +z-netz.alt.support.ncbmail.batch+script +z-netz.alt.support.ncbmail.bin.bugfix +z-netz.alt.support.ncbmail.bin.delta-up +z-netz.alt.support.ncbmail.bin.exe-upda +z-netz.alt.support.ncbmail.bin.tools +z-netz.alt.support.ncbmail.bugfix +z-netz.alt.support.ncbmail.fidogate +z-netz.alt.support.ncbmail.tools +z-netz.alt.support.ncbmail.vorschlaege +z-netz.alt.support.ncbmail.wichtig +z-netz.alt.support.ncbmail.windows +z-netz.alt.support.pmzpoint +z-netz.alt.support.postmaster +z-netz.alt.support.speedpascal +z-netz.alt.support.the_dot +z-netz.alt.support.theanswer.allgemein +z-netz.alt.support.theanswer.binaer +z-netz.alt.support.theanswer.meldungen +z-netz.alt.support.tm-software +z-netz.alt.support.turbo +z-netz.alt.support.turbomail.allgemein +z-netz.alt.support.turbomail.binaer +z-netz.alt.support.turbomail.frage+bugs +z-netz.alt.support.uucpfz +z-netz.alt.support.uzercp +z-netz.alt.support.xpoint.allgemeines +z-netz.alt.support.xpoint.fido +z-netz.alt.support.xpoint.meldungen +z-netz.alt.support.xpoint.tools +z-netz.alt.support.xpoint.updates +z-netz.alt.support.z-man +z-netz.alt.support.zclick.bugreport +z-netz.alt.support.zerberus.bugmeldunge +z-netz.alt.support.zerberus.charon +z-netz.alt.support.zerberus.charon.faq +z-netz.alt.support.zerberus.diskussion +z-netz.alt.support.zerberus.frage+antwo +z-netz.alt.support.zerberus.os2 +z-netz.alt.support.zerberus.tools +z-netz.alt.support.zerberus.vorschlaege +z-netz.alt.support.zerberus.wichtig +z-netz.alt.support.zeusbox +z-netz.alt.support.znews +z-netz.alt.support.zodiacs_point +z-netz.alt.support.zufsig +z-netz.alt.tagebuch +z-netz.alt.telecom.gateway +z-netz.alt.telefonkarten +z-netz.alt.test +z-netz.alt.tiere +z-netz.alt.turbo_pool +z-netz.alt.tv.babylon5 +z-netz.alt.tv.lindenstrasse +z-netz.alt.vegetarier +z-netz.alt.verschwoerung +z-netz.alt.vfiz.diskurs +z-netz.alt.vfiz.meldungen +z-netz.alt.videoschniit.vlabmotion +z-netz.alt.videoschnitt.vlabmotion +z-netz.alt.viren.intern +z-netz.alt.werbung +z-netz.alt.wichtig +z-netz.alt.windows.binaer +z-netz.alt.windows.treiber +z-netz.alt.wirtschaft.allgemein +z-netz.alt.wirtschaft.boersen +z-netz.alt.wirtschaft.service +z-netz.alt.wrestling +z-netz.alt.wrestling.wcw +z-netz.alt.wrestling.wwf +z-netz.alt.zconnect.diskussion +z-netz.alt.zconnect.gremium.diskussion +z-netz.alt.zconnect.gremium.vorschlag +z-netz.alt.zconnect.gremium.wahlurne +z-netz.alt.zconnect.meldungen +z-netz.alt.zconnect.wahlurne +z-netz.alt.zivildienst +z-netz.bildung.allgemein +z-netz.bildung.schule +z-netz.bildung.uni +z-netz.datenschutz.allgemein +z-netz.datenschutz.spionage +z-netz.forum.diskussion.aktuelles +z-netz.forum.diskussion.allgemein +z-netz.forum.diskussion.beziehungen +z-netz.forum.diskussion.militaer+kdv +z-netz.forum.diskussion.philosophie +z-netz.forum.diskussion.politik +z-netz.forum.diskussion.sexualitaet +z-netz.forum.frage+antwort +z-netz.forum.krisen +z-netz.forum.netzwesen +z-netz.forum.news +z-netz.forum.religion +z-netz.forum.soziales +z-netz.forum.umweltschutz +z-netz.forum.verbrauchertip +z-netz.forum.verkehr +z-netz.forum.versicherung +z-netz.freizeit.allgemein +z-netz.freizeit.brettspiele +z-netz.freizeit.consolen +z-netz.freizeit.filme.allgemein +z-netz.freizeit.filme.faq +z-netz.freizeit.foto +z-netz.freizeit.motorrad +z-netz.freizeit.musik.allgemein +z-netz.freizeit.musik.elektro +z-netz.freizeit.musik.on_stage +z-netz.freizeit.musik.pop +z-netz.freizeit.rollenspiele.ad+d +z-netz.freizeit.rollenspiele.allgemein +z-netz.freizeit.rollenspiele.dsa +z-netz.freizeit.rollenspiele.shadowrun +z-netz.freizeit.rollenspiele.tradecards +z-netz.freizeit.sammler +z-netz.freizeit.theater +z-netz.freizeit.tiere +z-netz.freizeit.tv.allgemein +z-netz.freizeit.urlaub +z-netz.freizeit.video +z-netz.freizeit.zeitschriften +z-netz.fundgrube.biete.allgemein +z-netz.fundgrube.biete.elektronik +z-netz.fundgrube.diskussion +z-netz.fundgrube.gratis +z-netz.fundgrube.job-boerse +z-netz.fundgrube.suche.allgemein +z-netz.fundgrube.suche.elektronik +z-netz.fundgrube.wohnraum +z-netz.gesundheit.aids +z-netz.gesundheit.allgemein +z-netz.gesundheit.diskussion +z-netz.gesundheit.drogen +z-netz.gesundheit.forschung +z-netz.gesundheit.krankheiten +z-netz.gesundheit.pharmaka +z-netz.gesundheit.tips +z-netz.koordination.einstellungen +z-netz.koordination.meldungen +z-netz.koordination.systemdaten +z-netz.koordination.tips+tricks +z-netz.koordination.user+sysops +z-netz.koordination.wahlurne +z-netz.koordination.z-netz-alt +z-netz.literatur.allgemein +z-netz.literatur.sf+fantasy +z-netz.magazine.allgemein +z-netz.magazine.cj-page +z-netz.magazine.forum +z-netz.magazine.mjm +z-netz.miteinander.fahren +z-netz.miteinander.kontakte +z-netz.miteinander.wohnen +z-netz.netzwerke.allgemein +z-netz.netzwerke.lan +z-netz.netzwerke.peer-to-peer +z-netz.netzwerke.wan +z-netz.rechner.acorn.allgemein +z-netz.rechner.amiga.allgemein +z-netz.rechner.amiga.hardware +z-netz.rechner.amiga.programmieren +z-netz.rechner.amiga.software +z-netz.rechner.amiga.spiele +z-netz.rechner.amiga.viren +z-netz.rechner.apple.allgemein +z-netz.rechner.apple.hardware +z-netz.rechner.apple.programmieren +z-netz.rechner.apple.spiele +z-netz.rechner.apple.viren +z-netz.rechner.atari.8-bit +z-netz.rechner.atari.allgemein +z-netz.rechner.atari.hardware +z-netz.rechner.atari.programmieren +z-netz.rechner.atari.spiele +z-netz.rechner.atari.viren +z-netz.rechner.c64+c128.allgemein +z-netz.rechner.c64+c128.hardware +z-netz.rechner.c64+c128.programmieren +z-netz.rechner.c64+c128.spiele +z-netz.rechner.c64+c128.viren +z-netz.rechner.cd-rom +z-netz.rechner.graphik +z-netz.rechner.hardware +z-netz.rechner.ibm.allgemein +z-netz.rechner.ibm.hardware +z-netz.rechner.ibm.os2 +z-netz.rechner.ibm.programmieren +z-netz.rechner.ibm.spiele +z-netz.rechner.ibm.viren +z-netz.rechner.ibm.windows.win3 +z-netz.rechner.ibm.windows.win95 +z-netz.rechner.ibm.windows.winnt +z-netz.rechner.programmieren +z-netz.rechner.spiele +z-netz.rechner.unix +z-netz.rechtswesen.diskurs.allgemein +z-netz.rechtswesen.diskurs.arbeitsrecht +z-netz.rechtswesen.diskurs.edvrecht +z-netz.rechtswesen.diskurs.mietrecht +z-netz.rechtswesen.diskurs.reiserecht +z-netz.rechtswesen.diskurs.steuerrecht +z-netz.rechtswesen.diskurs.verkehrsrech +z-netz.rechtswesen.diskurs.wehrrecht +z-netz.rechtswesen.urteile.allgemein +z-netz.rechtswesen.urteile.arbeitsrecht +z-netz.rechtswesen.urteile.edvrecht +z-netz.rechtswesen.urteile.mietrecht +z-netz.rechtswesen.urteile.reiserecht +z-netz.rechtswesen.urteile.steuerrecht +z-netz.rechtswesen.urteile.verkehrsrech +z-netz.rechtswesen.urteile.wehrrecht +z-netz.sf+fantasy.allgemein +z-netz.sf+fantasy.babylon5.allgemein +z-netz.sf+fantasy.daten +z-netz.sf+fantasy.startrek.allgemein +z-netz.sf+fantasy.startrek.daten +z-netz.sf+fantasy.startrek.magazin +z-netz.sf+fantasy.starwars.allgemein +z-netz.sport.allgemein +z-netz.sport.eishockey.allgemein +z-netz.sport.fahrrad.allgemein +z-netz.sport.fussball.allgemein +z-netz.sport.fussball.tipspiel +z-netz.sprachen.algorithmen +z-netz.sprachen.allgemein +z-netz.sprachen.basic +z-netz.sprachen.c +z-netz.sprachen.dbase +z-netz.sprachen.delphi +z-netz.sprachen.forth +z-netz.sprachen.modula +z-netz.sprachen.oberon +z-netz.sprachen.pascal +z-netz.sprachen.rexx +z-netz.telecom.allgemein +z-netz.telecom.amateurfunk +z-netz.telecom.btx +z-netz.telecom.cb-funk +z-netz.telecom.datex +z-netz.telecom.fax +z-netz.telecom.frage+antwort +z-netz.telecom.gateway +z-netz.telecom.isdn +z-netz.telecom.mobilfunk +z-netz.telecom.modem.allgemein +z-netz.telecom.null130 +z-netz.telecom.points +z-netz.telecom.satellit +z-netz.telecom.telefon +z-netz.test +z-netz.wichtig +z-netz.wissenschaft.allgemein +z-netz.wissenschaft.archaeologie +z-netz.wissenschaft.astronomie.allgem +z-netz.wissenschaft.astronomie.daten +z-netz.wissenschaft.biologie +z-netz.wissenschaft.chemie +z-netz.wissenschaft.geisteswschaft +z-netz.wissenschaft.geo +z-netz.wissenschaft.informatik +z-netz.wissenschaft.mathematik +z-netz.wissenschaft.philosophie +z-netz.wissenschaft.physik +z-netz.wissenschaft.psychologie +z-netz.wissenschaft.soziologie +z-netz.wissenschaft.technik +za.ads.jobs +za.ads.lifts +za.ads.misc +za.archives +za.culture.xhosa +za.edu.comp +za.environment +za.events +za.flame +za.frd.announce +za.humour +za.info-policy +za.misc +za.net.maps +za.net.misc +za.net.stats +za.net.uninet +za.org.cssa +za.politics +za.schools +za.sport +za.sport.rugby +za.test +za.travel +za.tv.misc +za.tv.satellite +za.unix.misc +zipnews.announce +zipnews.control +zipnews.general +zipnews.gov.news.general +zipnews.gov.news.summary.48hours +zipnews.gov.pub-ser.electricity.utilities +zipnews.gov.pub-ser.fire.public-safety.police +zipnews.gov.pub-ser.general +zipnews.gov.pub-ser.museums.zoos.gardens +zipnews.gov.pub-ser.sanitation +zipnews.gov.pub-ser.services.utilities.general +zipnews.gov.us.contracts.budgets +zipnews.gov.us.defense +zipnews.gov.us.faa +zipnews.gov.us.fcc +zipnews.gov.us.fda +zipnews.gov.us.federal.reserve.fdic +zipnews.gov.us.military +zipnews.gov.us.nasa +zipnews.gov.us.national.politics +zipnews.gov.us.sec-cftc +zipnews.gov.us.society +zipnews.gov.us.society.demographics.social-trends +zipnews.gov.us.society.ethnic.special.interest.groups +zipnews.gov.us.society.social-issues +zipnews.gov.us.supreme-court +zipnews.gov.world.analysis +zipnews.gov.world.democracy.human-rights +zipnews.gov.world.diplomatic.security +zipnews.gov.world.economic +zipnews.gov.world.global.communications +zipnews.gov.world.news +zipnews.gov.world.politics +zipnews.gov.world.press-review +zipnews.gov.world.regional.africa +zipnews.gov.world.regional.east-asia.pacific +zipnews.gov.world.regional.europe-canada.russia-cis +zipnews.gov.world.regional.latin-american.caribbean +zipnews.gov.world.regional.middle-east.north-africa.south-asia +zipnews.gov.world.special-report +zipnews.gov.world.summary.french +zipnews.gov.world.summary.russian +zipnews.gov.world.summary.spanish +zipnews.sports.baseball.d +zipnews.sports.basketball.d +zipnews.sports.football.d +zipnews.sports.hockey.d +zippo.announce +zippo.editorial +zippo.general +zippo.spamhippo.top100 diff --git a/nntp/nntp.001 b/nntp/nntp.001 new file mode 100644 index 0000000..7234ff5 --- /dev/null +++ b/nntp/nntp.001 @@ -0,0 +1,413 @@ +# Microsoft Developer Studio Project File - Name="nntp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=nntp - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "nntp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "nntp.mak" CFG="nntp - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "nntp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "nntp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "nntp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo".\nntp.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "nntp - Win32 Release" +# Name "nntp - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\brwsview.cpp +# End Source File +# Begin Source File + +SOURCE=.\entrydlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\groupdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Header.cpp +# End Source File +# Begin Source File + +SOURCE=.\imgview.cpp +# End Source File +# Begin Source File + +SOURCE="..\..\Parts\jpeg-6b\lib\jpeg6b.lib" +# End Source File +# Begin Source File + +SOURCE=..\Exe\jpgimg.lib +# End Source File +# Begin Source File + +SOURCE=.\listitms.cpp +# End Source File +# Begin Source File + +SOURCE=.\logview.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msdialog.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msfileio.lib +# End Source File +# Begin Source File + +SOURCE=.\msglog.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\msrasapi.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\mssocket.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msthread.lib +# End Source File +# Begin Source File + +SOURCE=.\mwdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Newsitem.cpp +# End Source File +# Begin Source File + +SOURCE=.\newsreg.cpp +# End Source File +# Begin Source File + +SOURCE=.\nntp.cpp +# End Source File +# Begin Source File + +SOURCE=.\nntp.rc + +!IF "$(CFG)" == "nntp - Win32 Release" + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\nntpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\opendir.cpp +# End Source File +# Begin Source File + +SOURCE=.\optnsdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\optnsreg.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\printman.lib +# End Source File +# Begin Source File + +SOURCE=.\rasdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\rasiface.cpp +# End Source File +# Begin Source File + +SOURCE=.\rcvrlog.cpp +# End Source File +# Begin Source File + +SOURCE=.\srvrdlg.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\statbar.lib +# End Source File +# Begin Source File + +SOURCE=.\thmbnail.cpp +# End Source File +# Begin Source File + +SOURCE=.\thmbpage.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\uulib.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Entrydlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Groupdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Grpitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Header.hpp +# End Source File +# Begin Source File + +SOURCE=.\imgview.hpp +# End Source File +# Begin Source File + +SOURCE=.\Iterator.hpp +# End Source File +# Begin Source File + +SOURCE=.\jpgimg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Listitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Listitms.hpp +# End Source File +# Begin Source File + +SOURCE=.\logview.hpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.hpp +# End Source File +# Begin Source File + +SOURCE=.\Msgid.hpp +# End Source File +# Begin Source File + +SOURCE=.\Msglog.hpp +# End Source File +# Begin Source File + +SOURCE=.\mwdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsgrp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsopt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsreg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Nntp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Nntpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Optnsdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Optnsreg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasiface.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasoptns.hpp +# End Source File +# Begin Source File + +SOURCE=.\rcvrlog.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resource.h +# End Source File +# Begin Source File + +SOURCE=.\Resource.hpp +# End Source File +# Begin Source File + +SOURCE=.\rgb888.hpp +# End Source File +# Begin Source File + +SOURCE=.\scroll.hpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\Cbox.bmp +# End Source File +# Begin Source File + +SOURCE=.\CBOXC.BMP +# End Source File +# Begin Source File + +SOURCE=.\LOG.ICO +# End Source File +# Begin Source File + +SOURCE=..\Exe\mshook.lib +# End Source File +# Begin Source File + +SOURCE=.\NNTP.ICO +# End Source File +# Begin Source File + +SOURCE=.\PAINT.ICO +# End Source File +# Begin Source File + +SOURCE=.\Strip.bmp +# End Source File +# End Group +# Begin Source File + +SOURCE=..\Exe\mediapak.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\sample.lib +# End Source File +# End Target +# End Project diff --git a/nntp/nntp.aps b/nntp/nntp.aps new file mode 100644 index 0000000..00071f5 Binary files /dev/null and b/nntp/nntp.aps differ diff --git a/nntp/nntp.dsp b/nntp/nntp.dsp new file mode 100644 index 0000000..f174674 --- /dev/null +++ b/nntp/nntp.dsp @@ -0,0 +1,352 @@ +# Microsoft Developer Studio Project File - Name="nntp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=nntp - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "nntp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "nntp.mak" CFG="nntp - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "nntp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "nntp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "nntp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\release" +# PROP Intermediate_Dir ".\release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /Ob0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "nntp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo".\nntp.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib wsock32.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "nntp - Win32 Release" +# Name "nntp - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\brwsview.cpp +# End Source File +# Begin Source File + +SOURCE=.\entrydlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\groupdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Header.cpp +# End Source File +# Begin Source File + +SOURCE=.\imgview.cpp +# End Source File +# Begin Source File + +SOURCE=.\listitms.cpp +# End Source File +# Begin Source File + +SOURCE=.\logview.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\msglog.cpp +# End Source File +# Begin Source File + +SOURCE=.\mwdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Newsitem.cpp +# End Source File +# Begin Source File + +SOURCE=.\newsreg.cpp +# End Source File +# Begin Source File + +SOURCE=.\nntp.cpp +# End Source File +# Begin Source File + +SOURCE=.\nntp.rc +# End Source File +# Begin Source File + +SOURCE=.\nntpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\opendir.cpp +# End Source File +# Begin Source File + +SOURCE=.\optnsdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\optnsreg.cpp +# End Source File +# Begin Source File + +SOURCE=.\rasdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\rasiface.cpp +# End Source File +# Begin Source File + +SOURCE=.\rcvrlog.cpp +# End Source File +# Begin Source File + +SOURCE=.\srvrdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\thmbnail.cpp +# End Source File +# Begin Source File + +SOURCE=.\thmbpage.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Entrydlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Groupdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Grpitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Header.hpp +# End Source File +# Begin Source File + +SOURCE=.\imgview.hpp +# End Source File +# Begin Source File + +SOURCE=.\Iterator.hpp +# End Source File +# Begin Source File + +SOURCE=.\jpgimg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Listitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Listitms.hpp +# End Source File +# Begin Source File + +SOURCE=.\logview.hpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.hpp +# End Source File +# Begin Source File + +SOURCE=.\Msgid.hpp +# End Source File +# Begin Source File + +SOURCE=.\Msglog.hpp +# End Source File +# Begin Source File + +SOURCE=.\mwdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsgrp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsitem.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsopt.hpp +# End Source File +# Begin Source File + +SOURCE=.\Newsreg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Nntp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Nntpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Optnsdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Optnsreg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasiface.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasoptns.hpp +# End Source File +# Begin Source File + +SOURCE=.\rcvrlog.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resource.h +# End Source File +# Begin Source File + +SOURCE=.\Resource.hpp +# End Source File +# Begin Source File + +SOURCE=.\rgb888.hpp +# End Source File +# Begin Source File + +SOURCE=.\scroll.hpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\Cbox.bmp +# End Source File +# Begin Source File + +SOURCE=.\CBOXC.BMP +# End Source File +# Begin Source File + +SOURCE=.\LOG.ICO +# End Source File +# Begin Source File + +SOURCE=.\NNTP.ICO +# End Source File +# Begin Source File + +SOURCE=.\PAINT.ICO +# End Source File +# Begin Source File + +SOURCE=.\Strip.bmp +# End Source File +# End Group +# End Target +# End Project diff --git a/nntp/nntp.rc b/nntp/nntp.rc new file mode 100644 index 0000000..81960af --- /dev/null +++ b/nntp/nntp.rc @@ -0,0 +1,423 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resrc1.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +#include "nntp\resource.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APP ICON DISCARDABLE "NNTP.ICO" +NNTP ICON DISCARDABLE "NNTP.ICO" +LOG ICON DISCARDABLE "LOG.ICO" +PAINT ICON DISCARDABLE "PAINT.ICO" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +CHECKBOXC BITMAP MOVEABLE PURE "CBOXC.BMP" +CHECKBOX BITMAP MOVEABLE PURE "CBOX.BMP" +LIST BITMAP MOVEABLE PURE "STRIP.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", NNTP_FILE_OPEN + MENUITEM "&Browse...", NNTP_FILE_BROWSE + MENUITEM "E&xit", NNTP_FILE_EXIT + END + POPUP "&News" + BEGIN + MENUITEM "Get &News", NNTP_NEWS_GETNEWS + MENUITEM "Get News &Groups", NNTP_NEWS_GETGROUPS + MENUITEM "Ca&ncel", NNTP_NEWS_CANCEL + END + POPUP "&View" + BEGIN + MENUITEM "&Log", NNTP_VIEW_LOG + END + POPUP "&Groups" + BEGIN + MENUITEM "Subscribe...", NNTP_NEWSGROUPS_SUBSCRIBE + END + POPUP "&Options" + BEGIN + MENUITEM "News &Server...", NNTP_OPTIONS_NEWSSERVER + MENUITEM "&RAS Settings...", NNTP_OPTIONS_RASSETTINGS + MENUITEM "&General Options...", NNTP_OPTIONS_GENERALOPTIONS + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", NNTP_HELP_CONTENTS + MENUITEM "&Search", NNTP_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", NNTP_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...", NNTP_HELP_ABOUT + END +END + +LOGMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", NNTP_FILE_OPEN + MENUITEM "&Browse...", NNTP_FILE_BROWSE + MENUITEM "E&xit", NNTP_FILE_EXIT + END + POPUP "&News" + BEGIN + MENUITEM "Get &News", NNTP_NEWS_GETNEWS + MENUITEM "Get News &Groups", NNTP_NEWS_GETGROUPS + MENUITEM "Ca&ncel", NNTP_NEWS_CANCEL + END + POPUP "&Groups" + BEGIN + MENUITEM "Subscribe...", NNTP_NEWSGROUPS_SUBSCRIBE + END + POPUP "&Options" + BEGIN + MENUITEM "News &Server...", NNTP_OPTIONS_NEWSSERVER + MENUITEM "&RAS Settings...", NNTP_OPTIONS_RASSETTINGS + MENUITEM "&General Options...", NNTP_OPTIONS_GENERALOPTIONS + MENUITEM SEPARATOR + MENUITEM "&Clear Log", NNTP_OPTIONS_CLEARLOG + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", NNTP_HELP_CONTENTS + MENUITEM "&Search", NNTP_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", NNTP_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...", NNTP_HELP_ABOUT + END +END + +IMGMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", NNTP_FILE_OPEN + MENUITEM "&Browse...", NNTP_FILE_BROWSE + MENUITEM "E&xit", NNTP_FILE_EXIT + END + POPUP "&News" + BEGIN + MENUITEM "Get &News", NNTP_NEWS_GETNEWS + MENUITEM "Get News &Groups", NNTP_NEWS_GETGROUPS + MENUITEM "Ca&ncel", NNTP_NEWS_CANCEL + END + POPUP "&Groups" + BEGIN + MENUITEM "Subscribe...", NNTP_NEWSGROUPS_SUBSCRIBE + END + POPUP "&Image" + BEGIN + MENUITEM "F&it to Window", NNTP_IMAGE_FITTOWINDOW + END + POPUP "&Options" + BEGIN + MENUITEM "News &Server...", NNTP_OPTIONS_NEWSSERVER + MENUITEM "&RAS Settings...", NNTP_OPTIONS_RASSETTINGS + MENUITEM "&General Options...", NNTP_OPTIONS_GENERALOPTIONS + MENUITEM SEPARATOR + MENUITEM "&Clear Log", NNTP_OPTIONS_CLEARLOG + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", NNTP_HELP_CONTENTS + MENUITEM "&Search", NNTP_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", NNTP_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...", NNTP_HELP_ABOUT + END +END + +BRWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", NNTP_FILE_OPEN + MENUITEM "&Browse...", NNTP_FILE_BROWSE + MENUITEM "E&xit", NNTP_FILE_EXIT + END + POPUP "&News" + BEGIN + MENUITEM "Get &News", NNTP_NEWS_GETNEWS + MENUITEM "Get News &Groups", NNTP_NEWS_GETGROUPS + MENUITEM "Ca&ncel", NNTP_NEWS_CANCEL + END + POPUP "&Groups" + BEGIN + MENUITEM "Subscribe...", NNTP_NEWSGROUPS_SUBSCRIBE + END + POPUP "&Options" + BEGIN + MENUITEM "News &Server...", NNTP_OPTIONS_NEWSSERVER + MENUITEM "&RAS Settings...", NNTP_OPTIONS_RASSETTINGS + MENUITEM "&General Options...", NNTP_OPTIONS_GENERALOPTIONS + MENUITEM SEPARATOR + MENUITEM "&Clear Log", NNTP_OPTIONS_CLEARLOG + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", NNTP_HELP_CONTENTS + MENUITEM "&Search", NNTP_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", NNTP_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...", NNTP_HELP_ABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +SERVERDIALOG DIALOG DISCARDABLE 6, 15, 217, 93 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "News Server" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "News Server:",-1,6,11,44,8 + EDITTEXT NS_SERVERNAME,51,10,144,12,ES_AUTOHSCROLL | + ES_WANTRETURN + PUSHBUTTON "Cancel",IDCANCEL,160,74,50,14 + LTEXT "User Name:",-1,6,29,38,8 + EDITTEXT NS_USERNAME,51,26,101,14,ES_AUTOHSCROLL + LTEXT "Password:",-1,7,47,34,8 + EDITTEXT NS_PASSWORD,51,44,101,14,ES_PASSWORD | ES_AUTOHSCROLL + PUSHBUTTON "Ok",IDOK,160,59,50,14 +END + +GROUPDIALOG DIALOG DISCARDABLE 6, 15, 209, 133 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "NewsGroups" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "Ok",IDOK,106,117,50,14 + LISTBOX NG_NEWSGROUPS,10,10,190,94,LBS_SORT | LBS_MULTIPLESEL | + LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | + LBS_WANTKEYBOARDINPUT | WS_VSCROLL + PUSHBUTTON "Delete",NG_DELETE,55,117,50,14 + PUSHBUTTON "Add",NG_ADD,4,117,50,14 +END + +NEWSGROUP DIALOG DISCARDABLE 6, 15, 202, 49 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "News Group" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT NG_NEWSGROUP,5,10,192,12 + PUSHBUTTON "Cancel",IDCANCEL,144,28,50,14 +END + +RASDIALOG DIALOG DISCARDABLE 8, 18, 207, 149 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "RAS Settings" +FONT 8, "MS Sans Serif" +BEGIN + EDITTEXT RAS_USERNAME,46,21,86,12 + EDITTEXT RAS_PASSWORD,46,34,86,12,ES_PASSWORD + EDITTEXT RAS_ENTRY,46,47,86,12,ES_READONLY + EDITTEXT RAS_MAXRETRIES,46,59,27,12 + PUSHBUTTON "Apply",IDOK,154,4,50,14 + PUSHBUTTON "Cancel",IDCANCEL,154,19,50,14 + LISTBOX RAS_SERVERLIST,5,89,171,61,LBS_SORT | WS_VSCROLL + CONTROL "Enable RAS",RAS_ENABLE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,4,52,12 + LTEXT "User Name:",-1,3,24,40,8 + LTEXT "Password:",-1,3,36,34,8 + CTEXT "Connection",-1,64,76,42,8 + LTEXT "Entry Name:",-1,3,49,42,8 + LTEXT "Max Retries:",-1,3,62,40,8 +END + +GENOPTIONS DIALOG DISCARDABLE 10, 19, 250, 61 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "General Options" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "DaysPrior:",-1,2,13,33,10 + EDITTEXT GENOPT_DAYSPRIOR,37,11,19,12 + LTEXT "PostDate:",-1,2,27,32,9 + EDITTEXT GENOPT_POSTDATE,37,25,135,12,ES_AUTOHSCROLL | + ES_READONLY + DEFPUSHBUTTON "O&k",IDOK,196,4,50,14 + LTEXT "Root:",-1,2,39,25,9 + EDITTEXT GENOPT_NEWSDIR,37,38,135,12,ES_AUTOHSCROLL + PUSHBUTTON "...",GENOPT_BROWSE,172,70,15,13 + PUSHBUTTON "Ca&ncel",IDCANCEL,196,19,50,14 +END + +MOREWINDOWS DIALOG DISCARDABLE 6, 15, 280, 114 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "More Windows..." +FONT 8, "Helv" +BEGIN + DEFPUSHBUTTON "OK",IDOK,225,3,50,14 + PUSHBUTTON "Cancel",IDCANCEL,225,17,50,14 + LISTBOX MW_LISTBOX,5,4,209,109,LBS_SORT | LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | WS_VSCROLL +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resrc1.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""nntp\\resource.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_SERVERKEYNAME "ServerName" + STRING_USERNAMEKEY "UserName" + STRING_PASSWORDKEY "Password" + STRING_NEWSGROUPSKEYNAME "Software\\Diversified\\NewsCrawler\\NewsGroups" + + STRING_NNTPKEYNAME "Software\\Diversified\\NewsCrawler\\" + STRING_NEWSGROUPSSHORTNAME "NewsGroups" + + STRING_NEWSGROUPSKEYVALUEPREFIX "NG" + STRING_RASKEYOPTIONS "Software\\Diversified\\NewsCrawler\\RasOptions" + STRING_RASKEYUSERNAME "UserName" + STRING_RASKEYPASSWORD "Password" + STRING_RASKEYENTRYNAME "EntryName" + STRING_RASKEYSTATE "RasState" + STRING_RASKEYMAXRETRIES "MaxRetries" + STRING_OPTIONSKEYNAME "Software\\Diversified\\NewsCrawler\\Options" + STRING_OPTIONSKEYPRIORDAYS "PriorDays" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_OPTIONSKEYNEWSDIR "NewsDir" +END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_NNTP "NewsCrawler" + STRING_VERSION "v2.00" + STRING_LOGVIEWCLASSNAME "LogView" + STRING_RECOVERLOGPOSTFIX ".001" + STRING_MESSAGELOGPOSTFIX ".002" + STRING_IMAGEVIEWCLASSNAME "ImageView" + STRING_DOCUMENTVIEWCLASSNAME "DocumentView" + STRING_BROWSEVIEWCLASSNAME "BrowseView" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/nntp/nntp.res b/nntp/nntp.res new file mode 100644 index 0000000..5a38619 Binary files /dev/null and b/nntp/nntp.res differ diff --git a/nntp/nntplib.dsp b/nntp/nntplib.dsp new file mode 100644 index 0000000..1e43674 --- /dev/null +++ b/nntp/nntplib.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="nntplib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=nntplib - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "nntplib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "nntplib.mak" CFG="nntplib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "nntplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "nntplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "nntplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "nntplib___Win32_Release" +# PROP BASE Intermediate_Dir "nntplib___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "nntplib___Win32_Release" +# PROP Intermediate_Dir "nntplib___Win32_Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /Gz /MT /W1 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "nntplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "nntplib - Win32 Release" +# Name "nntplib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\HEADER.CPP +# End Source File +# Begin Source File + +SOURCE=.\LISTITMS.CPP +# End Source File +# Begin Source File + +SOURCE=.\NNTP.CPP +# End Source File +# Begin Source File + +SOURCE=.\NNTPTHRD.CPP +# End Source File +# Begin Source File + +SOURCE=.\RCVRLOG.CPP +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/nntp/nntplib.dsw b/nntp/nntplib.dsw new file mode 100644 index 0000000..04810ca --- /dev/null +++ b/nntp/nntplib.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "nntplib"=.\nntplib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/nntp/nntplib.opt b/nntp/nntplib.opt new file mode 100644 index 0000000..8f99a83 Binary files /dev/null and b/nntp/nntplib.opt differ diff --git a/nntp/nntplib.plg b/nntp/nntplib.plg new file mode 100644 index 0000000..1b98f24 --- /dev/null +++ b/nntp/nntplib.plg @@ -0,0 +1,27 @@ + + +

+

Build Log

+

+--------------------Configuration: nntplib - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP90.tmp" with contents +[ +/nologo /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/nntplib.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /GZ /c +"D:\work\nntp\NNTPTHRD.CPP" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP90.tmp" +Creating command line "link.exe -lib /nologo /out:"msvcobj\nntplib.lib" .\msvcobj\RCVRLOG.OBJ .\msvcobj\LISTITMS.OBJ .\msvcobj\NNTP.OBJ .\msvcobj\NNTPTHRD.OBJ .\msvcobj\HEADER.OBJ " +

Output Window

+Compiling... +NNTPTHRD.CPP +Creating library... + + + +

Results

+nntplib.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/nntp/nntplib___Win32_Release/nntplib.lib b/nntp/nntplib___Win32_Release/nntplib.lib new file mode 100644 index 0000000..4396a35 Binary files /dev/null and b/nntp/nntplib___Win32_Release/nntplib.lib differ diff --git a/nntp/nntplib___Win32_Release/vc60.idb b/nntp/nntplib___Win32_Release/vc60.idb new file mode 100644 index 0000000..faac7e4 Binary files /dev/null and b/nntp/nntplib___Win32_Release/vc60.idb differ diff --git a/nntp/resrc1.h b/nntp/resrc1.h new file mode 100644 index 0000000..ca04627 --- /dev/null +++ b/nntp/resrc1.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by nntp.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1002 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/nntp/test.txt b/nntp/test.txt new file mode 100644 index 0000000..42c2eff --- /dev/null +++ b/nntp/test.txt @@ -0,0 +1,83 @@ + + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; + + copyFile(); +// test(); + decode(); + ::OutputDebugString("files copied\n"); + ::Sleep(120000); + return false; + + frameWindow.createWindow("NNTP",String(STRING_NNTP)+String(" ")+String(STRING_VERSION),"mainMenu","NNTP"); + return ((FrameWindow&)frameWindow).messageLoop(); +} + + +#include +#include + +void test(void); +void decode(void); +bool copyFile(void); + + +void test() +{ + String pathFileName; + + for(int index=0;index<50;index++) + { + ::sprintf(pathFileName,"d:\\file_%02d.dat",index); + FileHandle saveFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + saveFile.writeLine(pathFileName); + } +} + +void decode() +{ + String pathFileName; + String pathFileOut; + class GenDecode genDecode; + + for(int index=0;index<50;index++) + { + ::sprintf(pathFileName,"d:\\uutest\\d3_%02d.uue",index); + ::sprintf(pathFileOut,"d:\\uutest\\d3_%02d.jpg",index); + genDecode.decode(pathFileName,pathFileOut); + } +} + +bool copyFile(void) +{ + FileHandle inFile; + Block strLines; + String strLine; + String pathFileName; + int count=0; + + if(!inFile.open("d:\\uutest\\d3.uue"))return false; + + while(inFile.getLine(strLine)) + { + ::OutputDebugString(String("Reading line ")+String().fromInt(count)+String("\n")); + strLines.insert(&strLine); + count++; + } + inFile.close(); + for(int index=0;index<50;index++) + { + ::sprintf(pathFileName,"d:\\uutest\\d3_%02d.uue",index); + ::sprintf(strLine,"begin 644 d:\\uutest\\d3_%02d.jpg",index); + strLines[0]=strLine; + strLines[1]="Hello"; + FileHandle outFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + for(int line=0;line +#include +#include +#include +#include + +#define MAX_BYTES 64000000 +#define BUF_SIZE 1024000 + +void combine(); +void divide(const String &pathFileName); + +void main(int argc,char ** argv) +{ + String command; + + if(argc<2) + { + ::printf("USAGE parts {divide[filename]|combine} {filename} ** if combine then filename \n"); + return; + } + command=argv[1]; + + if(command=="divide") + { + if(argc!=3) + { + ::printf("USAGE parts {divide[filename]|combine} {filename} ** if combine then filename \n"); + return; + } + divide(argv[2]); + } + else if(command=="combine")combine(); + else ::printf("unknown command\n"); +} + +void combine() +{ + Array bytes; + File inFile; + File outFile; + DWORD part=0; + DWORD readCount=0; + String strPathFileName; + + if(!outFile.open("result.dat","wb")) + { + ::printf("unable to open output 'result.dat'\n"); + return; + } + bytes.size(BUF_SIZE); + while(true) + { + ::sprintf(strPathFileName,"part_%d.dat",part); + if(!inFile.open(strPathFileName,"rb")) + { + ::printf("unable to open %s\n",strPathFileName.str()); + return; + } + ::printf("Reading %s\n",strPathFileName.str()); + while(0!=(readCount=inFile.read((char*)&bytes[0],bytes.size()))) + outFile.write((char*)&bytes[0],readCount); + inFile.close(); + part++; + } +} + +void divide(const String &strPathInput) +{ + Array bytes; + DWORD part=0; + DWORD count=0; + DWORD byteCount=0; + DWORD totalCount=0; + String strPathFileName; + File inFile; + File outFile; + + bytes.size(BUF_SIZE); + if(!inFile.open(strPathInput,"rb")) + { + ::printf("Cannot open input\n"); + return; + } + ::sprintf(strPathFileName,"part_%d.dat",part); + if(!outFile.open(strPathFileName,"wb")) + { + ::printf("cannot open output '%s'\n",strPathFileName.str()); + return; + } + while(true) + { + if(count>MAX_BYTES) + { + outFile.close(); + part++; + ::sprintf(strPathFileName,"writing 'part_%d.dat'",part); + if(!outFile.open(strPathFileName,"wb")) + { + ::printf("cannot open output '%s'\n",strPathFileName.str()); + return; + } + count=0; + } + byteCount=inFile.read((char*)&bytes[0],bytes.size()); + if(!byteCount)break; + if(!outFile.write(&bytes[0],byteCount)) + { + ::printf("Unable to write to '%s'\n",strPathFileName.str()); + return; + } + count+=byteCount; + totalCount+=byteCount; +// if(!(totalCount%BUF_SIZE))::printf("Wrote %d bytes to %s\n",totalCount,strPathFileName.str()); + } +} \ No newline at end of file diff --git a/parts/parts.dsp b/parts/parts.dsp new file mode 100644 index 0000000..2e20897 --- /dev/null +++ b/parts/parts.dsp @@ -0,0 +1,116 @@ +# Microsoft Developer Studio Project File - Name="parts" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=parts - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "parts.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "parts.mak" CFG="parts - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "parts - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "parts - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "parts - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "parts - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none /debug + +!ENDIF + +# Begin Target + +# Name "parts - Win32 Release" +# Name "parts - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\main.cpp + +!IF "$(CFG)" == "parts - Win32 Release" + +!ELSEIF "$(CFG)" == "parts - Win32 Debug" + +# ADD CPP /W1 /D "STRICT" /D "__FLAT__" + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/parts/parts.dsw b/parts/parts.dsw new file mode 100644 index 0000000..222a93e --- /dev/null +++ b/parts/parts.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "parts"=.\parts.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/parts/parts.opt b/parts/parts.opt new file mode 100644 index 0000000..c597f55 Binary files /dev/null and b/parts/parts.opt differ diff --git a/parts/parts.plg b/parts/parts.plg new file mode 100644 index 0000000..df0d362 --- /dev/null +++ b/parts/parts.plg @@ -0,0 +1,33 @@ + + +
+

Build Log

+

+--------------------Configuration: parts - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP59.tmp" with contents +[ +/nologo /MT /W1 /GX /O2 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"Debug/parts.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c +"D:\work\parts\main.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP59.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP5A.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/parts.pdb" /machine:I386 /out:"Debug/parts.exe" /pdbtype:sept +.\Debug\main.obj +\work\exe\mscommon.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP5A.tmp" +

Output Window

+Compiling... +main.cpp +Linking... + + + +

Results

+parts.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/pop/DRGSPRT.HPP b/pop/DRGSPRT.HPP new file mode 100644 index 0000000..4c4cc6b --- /dev/null +++ b/pop/DRGSPRT.HPP @@ -0,0 +1,55 @@ +#ifndef _POP_DRAGSPRITE_HPP_ +#define _POP_DRAGSPRITE_HPP_ +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif +#ifndef _SPRITE_PURESPRITE_HPP_ +#include +#endif + +class DragSprite : public PureBitmap, public PureSprite +{ +public: + DragSprite(void); + virtual ~DragSprite(); + void setBitmap(HBITMAP hBitmap); +protected: + virtual operator PureBitmap&(void); +private: + DragSprite(const DragSprite &someDragSprite); + DragSprite &operator=(const DragSprite &someDragSprite); +}; + +inline +DragSprite::DragSprite(void) +{ +} + +inline +DragSprite::DragSprite(const DragSprite &/*someDragSprite*/) +{ // private implementation +} + +inline +DragSprite::~DragSprite() +{ +} + +inline +DragSprite::operator PureBitmap&(void) +{ + return *this; +} + +inline +DragSprite &DragSprite::operator=(const DragSprite &/*someDragSprite*/) +{ // private implementation + return *this; +} + +inline +void DragSprite::setBitmap(HBITMAP hBitmap) +{ + (PureBitmap&)*this=hBitmap; +} +#endif \ No newline at end of file diff --git a/pop/HEADER.CPP b/pop/HEADER.CPP new file mode 100644 index 0000000..8dfc623 --- /dev/null +++ b/pop/HEADER.CPP @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include + +Header &Header::operator=(const Header &someHeader) +{ + path(someHeader.path()); + from(someHeader.from()); + newsGroups(someHeader.newsGroups()); + subject(someHeader.subject()); + date(someHeader.date()); + organization(someHeader.organization()); + lines(someHeader.lines()); + messageID(someHeader.messageID()); + replyTo(someHeader.replyTo()); + postingHost(someHeader.postingHost()); + newsReader(someHeader.newsReader()); + crossReference(someHeader.crossReference()); + contentType(someHeader.contentType()); + xMailer(someHeader.xMailer()); + return *this; +} + +Header &Header::operator=(Block &headerLines) +{ + UINT lineCount(headerLines.size()); + for(int lineIndex=0;lineIndex +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif + +template +class Block; + +class Header +{ +public: + Header(void); + Header(Block &headerLines); + Header(const Header &someHeader); + Header(const String &pathFileName); + virtual ~Header(); + Header &operator=(const Header &someHeader); + Header &operator=(Block &headerLines); + Header &operator=(const String &pathFileName); + const String &path(void)const; + const String &from(void)const; + const String &newsGroups(void)const; + const String &subject(void)const; + const String &date(void)const; + SystemTime systemTime(void); + const String &organization(void)const; + const String &lines(void)const; + const String &messageID(void)const; + const String &replyTo(void)const; + const String &postingHost(void)const; + const String &newsReader(void)const; + const String &crossReference(void)const; + const String &contentType(void)const; + const String &xMailer(void)const; +private: + void path(const String &path); + void from(const String &from); + void newsGroups(const String &newsGroups); + void subject(const String &subject); + void date(const String &date); + void organization(const String &organization); + void lines(const String &lines); + void messageID(const String &messageID); + void replyTo(const String &replyTo); + void postingHost(const String &postingHost); + void newsReader(const String &newsReader); + void crossReference(const String &crossReference); + void contentType(const String &contentType); + void xMailer(const String &xMailer); + WORD isPath(const String &stringLine)const; + WORD isFrom(const String &stringLine)const; + WORD isNewsGroups(const String &stringLine)const; + WORD isSubject(const String &stringLine)const; + WORD isDate(const String &stringLine)const; + WORD isOrganization(const String &stringLine)const; + WORD isLines(const String &stringLine)const; + WORD isMessageID(const String &stringLine)const; + WORD isReplyTo(const String &stringLine)const; + WORD isNNTPPostingHost(const String &stringLine)const; + WORD isNewsReader(const String &stringLine)const; + WORD isCrossReference(const String &stringLine)const; + WORD isContentType(const String &stringLine)const; + WORD isMailer(const String &stringLine)const; + + String mPath; + String mFrom; + String mNewsGroups; + String mSubject; + String mDate; + String mOrganization; + String mLines; + String mMessageID; + String mReplyTo; + String mPostingHost; + String mContentType; + String mXMailer; + String mNewsReader; + String mCrossReference; +}; + +inline +Header::Header(void) +{ +} + +inline +Header::Header(Block &headerLines) +{ + *this=headerLines; +} + +inline +Header::Header(const Header &someHeader) +{ + *this=someHeader; +} + +inline +Header::Header(const String &pathFileName) +{ + *this=pathFileName; +} + +inline +Header::~Header() +{ +} + +inline +const String &Header::path(void)const +{ + return mPath; +} + +inline +void Header::path(const String &path) +{ + mPath=path; +} + +inline +const String &Header::from(void)const +{ + return mFrom; +} + +inline +void Header::from(const String &from) +{ + mFrom=from; +} + +inline +const String &Header::newsGroups(void)const +{ + return mNewsGroups; +} + +inline +void Header::newsGroups(const String &newsGroups) +{ + mNewsGroups=newsGroups; +} + +inline +const String &Header::subject(void)const +{ + return mSubject; +} + +inline +void Header::subject(const String &subject) +{ + mSubject=subject; +} + +inline +const String &Header::date(void)const +{ + return mDate; +} + +inline +void Header::date(const String &date) +{ + mDate=date; +} + +inline +const String &Header::organization(void)const +{ + return mOrganization; +} + +inline +void Header::organization(const String &organization) +{ + mOrganization=organization; +} + +inline +const String &Header::lines(void)const +{ + return mLines; +} + +inline +void Header::lines(const String &lines) +{ + mLines=lines; +} + +inline +const String &Header::messageID(void)const +{ + return mMessageID; +} + +inline +void Header::messageID(const String &messageID) +{ + mMessageID=messageID; +} + +inline +const String &Header::replyTo(void)const +{ + return mReplyTo; +} + +inline +void Header::replyTo(const String &replyTo) +{ + mReplyTo=replyTo; +} + +inline +const String &Header::postingHost(void)const +{ + return mPostingHost; +} + +inline +void Header::postingHost(const String &postingHost) +{ + mPostingHost=postingHost; +} + +inline +const String &Header::newsReader(void)const +{ + return mNewsReader; +} + +inline +void Header::newsReader(const String &newsReader) +{ + mNewsReader=newsReader; +} + +inline +const String &Header::crossReference(void)const +{ + return mCrossReference; +} + +inline +void Header::crossReference(const String &crossReference) +{ + mCrossReference=crossReference; +} + +inline +const String &Header::contentType(void)const +{ + return mContentType; +} + +inline +void Header::contentType(const String &contentType) +{ + mContentType=contentType; +} + +inline +const String &Header::xMailer(void)const +{ + return mXMailer; +} + +inline +void Header::xMailer(const String &xMailer) +{ + mXMailer=xMailer; +} + +inline +WORD Header::isPath(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Path: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isFrom(const String &stringLine)const +{ + return (!::strncmp(stringLine,"From: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isNewsGroups(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Newsgroups: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isSubject(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Subject: ",9)?TRUE:FALSE); +} + +inline +WORD Header::isDate(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Date: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isOrganization(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Organization: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isLines(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Lines: ",7)?TRUE:FALSE); +} + +inline +WORD Header::isMessageID(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Message-ID: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isReplyTo(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Reply-To: ",10)?TRUE:FALSE); +} + +inline +WORD Header::isNNTPPostingHost(const String &stringLine)const +{ + return (!::strncmp(stringLine,"NNTP-Posting-Host",17)?TRUE:FALSE); +} + +inline +WORD Header::isNewsReader(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Newsreader: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isCrossReference(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Xref: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isContentType(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Content-Type: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isMailer(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Mailer: ",10)?TRUE:FALSE); +} +#endif + + diff --git a/pop/HOLD/HEADER.CPP b/pop/HOLD/HEADER.CPP new file mode 100644 index 0000000..8dfc623 --- /dev/null +++ b/pop/HOLD/HEADER.CPP @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include + +Header &Header::operator=(const Header &someHeader) +{ + path(someHeader.path()); + from(someHeader.from()); + newsGroups(someHeader.newsGroups()); + subject(someHeader.subject()); + date(someHeader.date()); + organization(someHeader.organization()); + lines(someHeader.lines()); + messageID(someHeader.messageID()); + replyTo(someHeader.replyTo()); + postingHost(someHeader.postingHost()); + newsReader(someHeader.newsReader()); + crossReference(someHeader.crossReference()); + contentType(someHeader.contentType()); + xMailer(someHeader.xMailer()); + return *this; +} + +Header &Header::operator=(Block &headerLines) +{ + UINT lineCount(headerLines.size()); + for(int lineIndex=0;lineIndex +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif + +template +class Block; + +class Header +{ +public: + Header(void); + Header(Block &headerLines); + Header(const Header &someHeader); + Header(const String &pathFileName); + virtual ~Header(); + Header &operator=(const Header &someHeader); + Header &operator=(Block &headerLines); + Header &operator=(const String &pathFileName); + const String &path(void)const; + const String &from(void)const; + const String &newsGroups(void)const; + const String &subject(void)const; + const String &date(void)const; + SystemTime systemTime(void); + const String &organization(void)const; + const String &lines(void)const; + const String &messageID(void)const; + const String &replyTo(void)const; + const String &postingHost(void)const; + const String &newsReader(void)const; + const String &crossReference(void)const; + const String &contentType(void)const; + const String &xMailer(void)const; +private: + void path(const String &path); + void from(const String &from); + void newsGroups(const String &newsGroups); + void subject(const String &subject); + void date(const String &date); + void organization(const String &organization); + void lines(const String &lines); + void messageID(const String &messageID); + void replyTo(const String &replyTo); + void postingHost(const String &postingHost); + void newsReader(const String &newsReader); + void crossReference(const String &crossReference); + void contentType(const String &contentType); + void xMailer(const String &xMailer); + WORD isPath(const String &stringLine)const; + WORD isFrom(const String &stringLine)const; + WORD isNewsGroups(const String &stringLine)const; + WORD isSubject(const String &stringLine)const; + WORD isDate(const String &stringLine)const; + WORD isOrganization(const String &stringLine)const; + WORD isLines(const String &stringLine)const; + WORD isMessageID(const String &stringLine)const; + WORD isReplyTo(const String &stringLine)const; + WORD isNNTPPostingHost(const String &stringLine)const; + WORD isNewsReader(const String &stringLine)const; + WORD isCrossReference(const String &stringLine)const; + WORD isContentType(const String &stringLine)const; + WORD isMailer(const String &stringLine)const; + + String mPath; + String mFrom; + String mNewsGroups; + String mSubject; + String mDate; + String mOrganization; + String mLines; + String mMessageID; + String mReplyTo; + String mPostingHost; + String mContentType; + String mXMailer; + String mNewsReader; + String mCrossReference; +}; + +inline +Header::Header(void) +{ +} + +inline +Header::Header(Block &headerLines) +{ + *this=headerLines; +} + +inline +Header::Header(const Header &someHeader) +{ + *this=someHeader; +} + +inline +Header::Header(const String &pathFileName) +{ + *this=pathFileName; +} + +inline +Header::~Header() +{ +} + +inline +const String &Header::path(void)const +{ + return mPath; +} + +inline +void Header::path(const String &path) +{ + mPath=path; +} + +inline +const String &Header::from(void)const +{ + return mFrom; +} + +inline +void Header::from(const String &from) +{ + mFrom=from; +} + +inline +const String &Header::newsGroups(void)const +{ + return mNewsGroups; +} + +inline +void Header::newsGroups(const String &newsGroups) +{ + mNewsGroups=newsGroups; +} + +inline +const String &Header::subject(void)const +{ + return mSubject; +} + +inline +void Header::subject(const String &subject) +{ + mSubject=subject; +} + +inline +const String &Header::date(void)const +{ + return mDate; +} + +inline +void Header::date(const String &date) +{ + mDate=date; +} + +inline +const String &Header::organization(void)const +{ + return mOrganization; +} + +inline +void Header::organization(const String &organization) +{ + mOrganization=organization; +} + +inline +const String &Header::lines(void)const +{ + return mLines; +} + +inline +void Header::lines(const String &lines) +{ + mLines=lines; +} + +inline +const String &Header::messageID(void)const +{ + return mMessageID; +} + +inline +void Header::messageID(const String &messageID) +{ + mMessageID=messageID; +} + +inline +const String &Header::replyTo(void)const +{ + return mReplyTo; +} + +inline +void Header::replyTo(const String &replyTo) +{ + mReplyTo=replyTo; +} + +inline +const String &Header::postingHost(void)const +{ + return mPostingHost; +} + +inline +void Header::postingHost(const String &postingHost) +{ + mPostingHost=postingHost; +} + +inline +const String &Header::newsReader(void)const +{ + return mNewsReader; +} + +inline +void Header::newsReader(const String &newsReader) +{ + mNewsReader=newsReader; +} + +inline +const String &Header::crossReference(void)const +{ + return mCrossReference; +} + +inline +void Header::crossReference(const String &crossReference) +{ + mCrossReference=crossReference; +} + +inline +const String &Header::contentType(void)const +{ + return mContentType; +} + +inline +void Header::contentType(const String &contentType) +{ + mContentType=contentType; +} + +inline +const String &Header::xMailer(void)const +{ + return mXMailer; +} + +inline +void Header::xMailer(const String &xMailer) +{ + mXMailer=xMailer; +} + +inline +WORD Header::isPath(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Path: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isFrom(const String &stringLine)const +{ + return (!::strncmp(stringLine,"From: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isNewsGroups(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Newsgroups: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isSubject(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Subject: ",9)?TRUE:FALSE); +} + +inline +WORD Header::isDate(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Date: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isOrganization(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Organization: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isLines(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Lines: ",7)?TRUE:FALSE); +} + +inline +WORD Header::isMessageID(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Message-ID: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isReplyTo(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Reply-To: ",10)?TRUE:FALSE); +} + +inline +WORD Header::isNNTPPostingHost(const String &stringLine)const +{ + return (!::strncmp(stringLine,"NNTP-Posting-Host",17)?TRUE:FALSE); +} + +inline +WORD Header::isNewsReader(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Newsreader: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isCrossReference(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Xref: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isContentType(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Content-Type: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isMailer(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Mailer: ",10)?TRUE:FALSE); +} +#endif + + diff --git a/pop/HOLD/HOOKPROC.CPP b/pop/HOLD/HOOKPROC.CPP new file mode 100644 index 0000000..9ca4465 --- /dev/null +++ b/pop/HOLD/HOOKPROC.CPP @@ -0,0 +1,275 @@ +#include +#include +#include + +WinHookProc::WinHookProc(void) +: mPrevHook(0), mhHookWnd(0) +{ +} + +WinHookProc::~WinHookProc() +{ +} + +BOOL WinHookProc::hookWin(HWND hWnd) +{ + unhookWin(); + mhHookWnd=hWnd; + ::SetProp(hWnd,(LPSTR)"INSTANCEDATA@@NEARPTR",(HANDLE)((void*)this)); + mPrevHook=(WNDPROC)::SetWindowLong(mhHookWnd,winID(),(DWORD)hookProc); + return TRUE; +} + +BOOL WinHookProc::unhookWin(void) +{ + if(!isOkay()||!mPrevHook)return FALSE; + ::SetWindowLong(mhHookWnd,winID(),(DWORD)mPrevHook); + ::RemoveProp(mhHookWnd,(LPSTR)"INSTANCEDATA@@NEARPTR"); + mPrevHook=0; + mhHookWnd=0; + return TRUE; +} + +DWORD WinHookProc::winID(void)const +{ + return GWL_WNDPROC; +} + +BOOL WinHookProc::isOkay(void)const +{ + return (mhHookWnd?TRUE:FALSE); +} + +LRESULT WinHookProc::hookProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) +{ + WinHookProc *pWinHookProc=(WinHookProc*)::GetProp(hWnd,"INSTANCEDATA@@NEARPTR"); + if(!pWinHookProc)return ::DefWindowProc(hWnd,msg,wParam,lParam); + pWinHookProc->windowProcedure(hWnd,msg,wParam,lParam); + return ::CallWindowProc(pWinHookProc->mPrevHook,hWnd,msg,wParam,lParam); +} + +void WinHookProc::windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_NCCREATE : + if(!installedHandlers(VectorHandler::NCCreateHandler))break; + callHandlers(VectorHandler::NCCreateHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CREATE : + if(!installedHandlers(VectorHandler::CreateHandler))break; + callHandlers(VectorHandler::CreateHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_PAINT : + if(!installedHandlers(VectorHandler::PaintHandler))break; + callHandlers(VectorHandler::PaintHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DRAWITEM : + if(!installedHandlers(VectorHandler::DrawItemHandler))break; + callHandlers(VectorHandler::DrawItemHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_TIMER : + if(!installedHandlers(VectorHandler::TimerHandler))break; + callHandlers(VectorHandler::TimerHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CHAR : + if(!installedHandlers(VectorHandler::CharHandler))break; + callHandlers(VectorHandler::CharHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_COMMAND : + if(!installedHandlers(VectorHandler::CommandHandler))break; + callHandlers(VectorHandler::CommandHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_COMPACTING : + if(!installedHandlers(VectorHandler::CompactingHandler))break; + callHandlers(VectorHandler::CompactingHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_WININICHANGE : + if(!installedHandlers(VectorHandler::WinIniChangeHandler))break; + callHandlers(VectorHandler::WinIniChangeHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_SYSCOLORCHANGE : + if(!installedHandlers(VectorHandler::SysColorChangeHandler))break; + callHandlers(VectorHandler::SysColorChangeHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLOR : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLORMSGBOX : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLOREDIT : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLORLISTBOX : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLORBTN : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLORDLG : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLORSCROLLBAR : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_CTLCOLORSTATIC : + if(!installedHandlers(VectorHandler::ControlColorHandler))break; + callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DDE_INITIATE : + if(!installedHandlers(VectorHandler::DDEInitiateHandler))break; + callHandlers(VectorHandler::DDEInitiateHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DDE_ACK : + if(!installedHandlers(VectorHandler::DDEAckHandler))break; + callHandlers(VectorHandler::DDEAckHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DDE_REQUEST : + if(!installedHandlers(VectorHandler::DDERequestHandler))break; + callHandlers(VectorHandler::DDERequestHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DDE_TERMINATE : + if(!installedHandlers(VectorHandler::DDETerminateHandler))break; + callHandlers(VectorHandler::DDETerminateHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DDE_DATA : + if(!installedHandlers(VectorHandler::DDEDataHandler))break; + callHandlers(VectorHandler::DDEDataHandler,CallbackData(wParam,lParam,hWnd)); + break; + case MM_WOM_OPEN : + if(!installedHandlers(VectorHandler::MMOpenHandler))break; + callHandlers(VectorHandler::MMOpenHandler,CallbackData(wParam,lParam,hWnd)); + break; + case MM_WOM_CLOSE : + if(!installedHandlers(VectorHandler::MMCloseHandler))break; + callHandlers(VectorHandler::MMCloseHandler,CallbackData(wParam,lParam,hWnd)); + break; + case MM_WOM_DONE : + if(!installedHandlers(VectorHandler::MMDoneHandler))break; + callHandlers(VectorHandler::MMDoneHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_LBUTTONDBLCLK : + if(!installedHandlers(VectorHandler::LeftButtonDoubleHandler))break; + callHandlers(VectorHandler::LeftButtonDoubleHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_LBUTTONDOWN : + if(!installedHandlers(VectorHandler::LeftButtonDownHandler))break; + callHandlers(VectorHandler::LeftButtonDownHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_LBUTTONUP : + if(!installedHandlers(VectorHandler::LeftButtonUpHandler))break; + callHandlers(VectorHandler::LeftButtonUpHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_RBUTTONDBLCLK : + if(!installedHandlers(VectorHandler::RightButtonDoubleHandler))break; + callHandlers(VectorHandler::RightButtonDoubleHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_RBUTTONDOWN : + ::OutputDebugString("WM_RBUTTONDOWN\n"); + if(!installedHandlers(VectorHandler::RightButtonDownHandler))break; + callHandlers(VectorHandler::RightButtonDownHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_RBUTTONUP : + ::OutputDebugString("WM_RBUTTONUP\n"); + if(!installedHandlers(VectorHandler::RightButtonUpHandler))break; + callHandlers(VectorHandler::RightButtonUpHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_NCLBUTTONUP : + if(!installedHandlers(VectorHandler::NCLeftButtonUpHandler))break; + callHandlers(VectorHandler::NCLeftButtonUpHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_NCLBUTTONDOWN : + if(!installedHandlers(VectorHandler::NCLeftButtonDownHandler))break; + callHandlers(VectorHandler::NCLeftButtonDownHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_NCRBUTTONUP : + if(!installedHandlers(VectorHandler::NCRightButtonUpHandler))break; + callHandlers(VectorHandler::NCRightButtonUpHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_NCRBUTTONDOWN : + if(!installedHandlers(VectorHandler::NCRightButtonDownHandler))break; + callHandlers(VectorHandler::NCRightButtonDownHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_MOUSEMOVE : + if(!installedHandlers(VectorHandler::MouseMoveHandler))break; + callHandlers(VectorHandler::MouseMoveHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_SETFOCUS : + if(!installedHandlers(VectorHandler::SetFocusHandler))break; + callHandlers(VectorHandler::SetFocusHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_SETFONT : + if(!installedHandlers(VectorHandler::SetFontHandler))break; + callHandlers(VectorHandler::SetFontHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_KILLFOCUS : + if(!installedHandlers(VectorHandler::KillFocusHandler))break; + callHandlers(VectorHandler::KillFocusHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_KEYUP : + if(!installedHandlers(VectorHandler::KeyUpHandler))break; + callHandlers(VectorHandler::KeyUpHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_KEYDOWN : + if(!installedHandlers(VectorHandler::KeyDownHandler))break; + callHandlers(VectorHandler::KeyDownHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_GETMINMAXINFO : + if(!installedHandlers(VectorHandler::MinMaxHandler))break; + callHandlers(VectorHandler::MinMaxHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_ENTERIDLE : + if(!installedHandlers(VectorHandler::EnterIdleHandler))break; + callHandlers(VectorHandler::EnterIdleHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_MENUSELECT : + if(!installedHandlers(VectorHandler::MenuSelectHandler))break; + callHandlers(VectorHandler::MenuSelectHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_GETDLGCODE : + if(!installedHandlers(VectorHandler::DialogCodeHandler))break; + callHandlers(VectorHandler::DialogCodeHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_MEASUREITEM : + if(!installedHandlers(VectorHandler::MeasureItemHandler))break; + callHandlers(VectorHandler::MeasureItemHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_VSCROLL : + if(!installedHandlers(VectorHandler::VerticalScrollHandler))break; + callHandlers(VectorHandler::VerticalScrollHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_HSCROLL : + if(!installedHandlers(VectorHandler::HorizontalScrollHandler))break; + callHandlers(VectorHandler::HorizontalScrollHandler,CallbackData(wParam,lParam,hWnd)); + break; +#if defined(__FLAT__) + case WM_NOTIFY : + if(!installedHandlers(VectorHandler::NotifyHandler))break; + callHandlers(VectorHandler::NotifyHandler,CallbackData(wParam,lParam,hWnd)); + break; +#endif + case WM_SIZE : + if(!installedHandlers(VectorHandler::SizeHandler))break; + callHandlers(VectorHandler::SizeHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DROPFILES : + if(!installedHandlers(VectorHandler::DropFilesHandler))break; + callHandlers(VectorHandler::DropFilesHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_DESTROY : + if(!installedHandlers(VectorHandler::SizeHandler))break; + callHandlers(VectorHandler::DestroyHandler,CallbackData(wParam,lParam,hWnd)); + break; + case WM_NCDESTROY : + default : + break; + } +} diff --git a/pop/HOLD/HOOKPROC.HPP b/pop/HOLD/HOOKPROC.HPP new file mode 100644 index 0000000..cb0bb2f --- /dev/null +++ b/pop/HOLD/HOOKPROC.HPP @@ -0,0 +1,26 @@ +#ifndef _COMMON_HOOKPROC_HPP_ +#define _COMMON_HOOKPROC_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_VECTORHANDLER_HPP_ +#include +#endif + +class WinHookProc : public VectorHandler +{ +public: + WinHookProc(void); + virtual ~WinHookProc(); + BOOL hookWin(HWND hWnd); + BOOL unhookWin(void); + BOOL isOkay(void)const; +protected: + virtual DWORD winID(void)const; + void windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); +private: + static LRESULT hookProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam); + WNDPROC mPrevHook; + HWND mhHookWnd; +}; +#endif diff --git a/pop/HOLD/LOGINDLG.CPP b/pop/HOLD/LOGINDLG.CPP new file mode 100644 index 0000000..cdd2ceb --- /dev/null +++ b/pop/HOLD/LOGINDLG.CPP @@ -0,0 +1,77 @@ +#include + +WORD LoginDialog::performLogin(void) +{ + DialogTemplate dlgTemplate; + DialogItemTemplate userEdit; + DialogItemTemplate passEdit; + DialogItemTemplate userStatic; + DialogItemTemplate passStatic; + + dlgTemplate.titleText("Login to host..."); + dlgTemplate.posRect(Rect(8,19,197,76)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_TABSTOP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_3DLOOK|DS_SETFONT|WS_POPUP); + + userEdit.className("EDIT"); + userEdit.titleText(""); + userEdit.style(WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL); + userEdit.posRect(Rect(56,19,98,12)); + userEdit.itemID(UserNameID); + + passEdit.className("EDIT"); + passEdit.style(WS_BORDER|WS_TABSTOP|ES_PASSWORD|WS_CHILD|WS_VISIBLE); + passEdit.posRect(Rect(56,35,98,12)); + passEdit.itemID(PasswordID); + + userStatic.className("STATIC"); + userStatic.titleText("User Name :"); + userStatic.style(WS_CHILD|WS_VISIBLE); + userStatic.posRect(Rect(2,20,39,8)); + userStatic.itemID(-1); + + passStatic.className("STATIC"); + passStatic.titleText("Password :"); + passStatic.style(WS_CHILD|WS_VISIBLE); + passStatic.posRect(Rect(2,36,39,8)); + passStatic.itemID(-1); + + dlgTemplate+=userEdit; + dlgTemplate+=passEdit; + dlgTemplate+=userStatic; + dlgTemplate+=passStatic; + + createDialog(::GetTopWindow((HWND)0),dlgTemplate); + if(userName().isNull()&&password().isNull())return FALSE; + return TRUE; +} + +WORD LoginDialog::dlgCommand(DWORD commandID,CallbackData &/*someCallbackData*/) +{ + switch(commandID) + { + case IDOK : + getText(UserNameID,mUserName); + getText(PasswordID,mPassword); + if(mUserName.isNull()||mPassword.isNull()){::MessageBeep(0);return TRUE;} + break; + case IDCANCEL : + mUserName.reserve(String::MaxString); + mPassword.reserve(String::MaxString); + break; + } + return FALSE; +} + +void LoginDialog::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + if(!userName().isNull())setText(UserNameID,userName()); + if(!password().isNull())setText(PasswordID,password()); + setFocus(); +} + +void LoginDialog::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ +} + diff --git a/pop/HOLD/LOGINDLG.HPP b/pop/HOLD/LOGINDLG.HPP new file mode 100644 index 0000000..44f0c6d --- /dev/null +++ b/pop/HOLD/LOGINDLG.HPP @@ -0,0 +1,69 @@ +#ifndef _POP_LOGINDIALOG_HPP_ +#define _POP_LOGINDIALOG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif + +class LoginDialog : public DynamicDialog +{ +public: + LoginDialog(void); + virtual ~LoginDialog(); + WORD performLogin(void); + String userName(void)const; + void userName(const String &userName); + String password(void)const; + void password(const String &password); +private: + enum {UserNameID=101,PasswordID=102}; + LoginDialog(const LoginDialog &loginDialog); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + void dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + String mUserName; + String mPassword; +}; + +inline +LoginDialog::LoginDialog(void) +{ +} + +inline +LoginDialog::LoginDialog(const LoginDialog &/*loginDialog*/) +{ +} + +inline +LoginDialog::~LoginDialog() +{ +} + +inline +String LoginDialog::userName(void)const +{ + return mUserName; +} + +inline +void LoginDialog::userName(const String &userName) +{ + mUserName=userName; +} + +inline +String LoginDialog::password(void)const +{ + return mPassword; +} + +inline +void LoginDialog::password(const String &password) +{ + mPassword=password; +} +#endif + diff --git a/pop/HOLD/MAIL.HPP b/pop/HOLD/MAIL.HPP new file mode 100644 index 0000000..796fc8a --- /dev/null +++ b/pop/HOLD/MAIL.HPP @@ -0,0 +1,46 @@ +#ifndef _POP_MAILMESSAGE_HPP_ +#define _POP_MAILMESSAGE_HPP_ +#ifndef _POP_HEADER_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Mail : public Block, public Header +{ +public: + Mail(void); + Mail(Block &msgLines); + virtual ~Mail(); + Mail &operator=(Block &msgLines); +private: +}; + +inline +Mail::Mail(void) +{ +} + +inline +Mail::Mail(Block &msgLines) +: Block(msgLines), Header(msgLines) +{ +} + +inline +Mail::~Mail() +{ +} + +inline +Mail &Mail::operator=(Block &msgLines) +{ + (Block&)*this=msgLines; + (Header&)*this=msgLines; + return *this; +} +#endif diff --git a/pop/HOLD/MAIN.CPP b/pop/HOLD/MAIN.CPP new file mode 100644 index 0000000..de5be73 --- /dev/null +++ b/pop/HOLD/MAIN.CPP @@ -0,0 +1,48 @@ +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + POPDlg popDialog; + return popDialog.perform(); +} + + + + +#if 0 +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + if(Main::previousProcessInstance()) + { + HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); + if(!hWnd) + { + ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); + return FALSE; + } + ::PostMessage(hWnd,WM_REACTIVATE,0,0L); + return FALSE; + } + MainWindow applicationWindow(Main::processInstance()); + return applicationWindow.messageLoop(); +} +#endif \ No newline at end of file diff --git a/pop/HOLD/MAIN.HPP b/pop/HOLD/MAIN.HPP new file mode 100644 index 0000000..2366469 --- /dev/null +++ b/pop/HOLD/MAIN.HPP @@ -0,0 +1,68 @@ +#ifndef _POP_MAIN_HPP_ +#define _POP_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/pop/HOLD/MAINWND.CPP b/pop/HOLD/MAINWND.CPP new file mode 100644 index 0000000..5edaff5 --- /dev/null +++ b/pop/HOLD/MAINWND.CPP @@ -0,0 +1,140 @@ +#include +#include + +char MainWindow::szClassName[]="POP3 client v1.00"; +char MainWindow::szMenuName[]="POP3"; + +MainWindow::MainWindow(HINSTANCE hInstance) +: mPaintHandler(this,&MainWindow::paintHandler), + mDestroyHandler(this,&MainWindow::destroyHandler), + mCommandHandler(this,&MainWindow::commandHandler), + mKeyDownHandler(this,&MainWindow::keyDownHandler), + mSizeHandler(this,&MainWindow::sizeHandler), + mCreateHandler(this,&MainWindow::createHandler), + mTimerHandler(this,&MainWindow::timerHandler), + mSetFocusHandler(this,&MainWindow::setFocusHandler), + mhInstance(hInstance) +{ + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,mhInstance,(LPSTR)this); + show(SW_SHOW); + update(); + + Block msgLines; + WORD messages; + WORD octets; + + POPClient popClient; + popClient.open("mailhost.li.net"); + if(!popClient.authenticate("europa","cygnus-x1")) + { + popClient.quit(); + popClient.close(); + return; + } + popClient.stat(messages,octets); + popClient.top(msgLines,1); +// for(int msgIndex=1;msgIndex<=messages;msgIndex++)popClient.retrieve(msgIndex,msgLines); + popClient.quit(); + popClient.close(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} diff --git a/pop/HOLD/MAINWND.HPP b/pop/HOLD/MAINWND.HPP new file mode 100644 index 0000000..f14c142 --- /dev/null +++ b/pop/HOLD/MAINWND.HPP @@ -0,0 +1,56 @@ +#ifndef _POP_MAINWINDOW_HPP_ +#define _POP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SOCKET_WSADATA_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(HINSTANCE hInstance); + virtual ~MainWindow(); + static String className(void); +private: + enum{TimerID=0}; + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void message(const String &messageString); + void message(Block &messageStrings); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType completionHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mTimerHandler; + Callback mSetFocusHandler; + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + WSASystem mWSASystem; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif diff --git a/pop/HOLD/POP.CPP b/pop/HOLD/POP.CPP new file mode 100644 index 0000000..89b2225 --- /dev/null +++ b/pop/HOLD/POP.CPP @@ -0,0 +1,188 @@ +#include +#include +#include + +POPClient::POPClient(void) +: mSpace(" "), mIsLoggedIn(FALSE) +{ + createCmds(); + createStats(); +} + +POPClient::~POPClient() +{ +} + +BOOL POPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mPOPControl.isConnected())mPOPControl.closeSocket(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}} + else if(!hostEntry.hostByName(hostName)){return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("pop3","tcp")) + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(POPPort)); + } + if(!mPOPControl.connect(internetSocketAddress)){message("unable to connect to pop3 server");return FALSE;} + mPOPControl.getSocketName(internetSocketAddress); + if(!mPOPControl.isConnected())return FALSE; +// if(!mPOPControl.receive(responseLines)) //||!responseLines.size()||! + if(!mPOPControl.receive(responseLines)||!isInAckResponse(responseLines)) + { + mPOPControl.closeSocket(); + return FALSE; + } + return TRUE; +} + +BOOL POPClient::quit(void) +{ + Block responseLines; + + if(!isConnected())return FALSE; + isLoggedIn(FALSE); + if(!putControlData(mPOPCmds[Quit],FALSE))return FALSE; + mPOPControl.receive(responseLines); + mPOPControl.closeSocket(); + return TRUE; +} + +BOOL POPClient::authenticate(const String &user,const String &password) +{ + Block responseLines; + + if(!isConnected())return FALSE; + if(!putControlData(mPOPCmds[User]+String(" ")+user,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!putControlData(mPOPCmds[Pass]+String(" ")+password,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +BOOL POPClient::stat(WORD &messages,WORD &octets) +{ + Block responseLines; + String strItem; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Stat],FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + strItem=responseLines[0].betweenString(' ',' '); + messages=::atoi((char*)strItem); + strItem=responseLines[0].betweenString(' ',0); + strItem=strItem.betweenString(' ',0); + octets=::atoi((char*)strItem); + return TRUE; +} + +BOOL POPClient::retrieve(WORD msgNum,Block &messageLines) +{ + Block responseLines; + String strMsg; + + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Retr]+String(" ")+strMsg,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +void POPClient::createStats(void) +{ + mPOPStatus.insert(&String("+OK")); + mPOPStatus.insert(&String("-ERR")); +} + +void POPClient::createCmds(void) +{ + mPOPCmds.remove(); + mPOPCmds.insert(&String("QUIT")); + mPOPCmds.insert(&String("USER")); + mPOPCmds.insert(&String("PASS")); + mPOPCmds.insert(&String("STAT")); + mPOPCmds.insert(&String("RETR")); +} + +WORD POPClient::putControlData(const String &stringData,WORD waitForResponse) +{ + if(!mPOPControl.isConnected())return FALSE; + if(!mPOPControl.send(stringData)) + { + mPOPControl.closeSocket(); + String errorString(String("error sending '")+stringData+String("' to POP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + if(waitForResponse&&!getControlData()) + { + mPOPControl.closeSocket(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + return TRUE; +} + +WORD POPClient::getControlData(void) +{ + Block responseStrings; + mPOPControl.receive(responseStrings); + return responseStrings.size(); +} + +BOOL POPClient::isInAckResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,2)==mPOPStatus[Ok])return TRUE; + return FALSE; +} + +BOOL POPClient::isInNakResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,3)==mPOPStatus[Error])return TRUE; + return FALSE; +} + + +// virtuals + +void POPClient::message(const String &messageString) +{ + ::OutputDebugString(messageString+String("\n")); +} + +void POPClient::message(Block &messageStrings) +{ + for(int itemIndex=0;itemIndex +#endif \ No newline at end of file diff --git a/pop/HOLD/POPCLNT.CPP b/pop/HOLD/POPCLNT.CPP new file mode 100644 index 0000000..192c767 --- /dev/null +++ b/pop/HOLD/POPCLNT.CPP @@ -0,0 +1,263 @@ +#include +#include +#include + +POPClient::POPClient(void) +: mSpace(" "), mIsLoggedIn(FALSE) +{ + createCmds(); + createStats(); +} + +POPClient::~POPClient() +{ +} + +BOOL POPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mPOPControl.isConnected())mPOPControl.closeSocket(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}} + else if(!hostEntry.hostByName(hostName)){return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("pop3","tcp")) + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(POPPort)); + } + if(!mPOPControl.connect(internetSocketAddress)){message("unable to connect to pop3 server");return FALSE;} + mPOPControl.getSocketName(internetSocketAddress); + if(!mPOPControl.isConnected())return FALSE; + if(!receive(responseLines)||!isInAckResponse(responseLines)) + { + mPOPControl.closeSocket(); + return FALSE; + } + return TRUE; +} + +BOOL POPClient::quit(void) +{ + Block responseLines; + + if(!isConnected())return FALSE; + isLoggedIn(FALSE); + if(!putControlData(mPOPCmds[Quit],FALSE))return FALSE; + receive(responseLines); + mPOPControl.closeSocket(); + return TRUE; +} + +BOOL POPClient::authenticate(const String &user,const String &password) +{ + Block responseLines; + + if(!isConnected())return FALSE; + if(!putControlData(mPOPCmds[User]+String(" ")+user,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!putControlData(mPOPCmds[Pass]+String(" ")+password,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +BOOL POPClient::stat(WORD &messages,WORD &octets) +{ + Block responseLines; + String strItem; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Stat],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + strItem=responseLines[0].betweenString(' ',' '); + messages=::atoi((char*)strItem); + strItem=responseLines[0].betweenString(' ',0); + strItem=strItem.betweenString(' ',0); + octets=::atoi((char*)strItem); + return TRUE; +} + +BOOL POPClient::retrieve(WORD msgNum,Block &messageLines) +{ + Block responseLines; + String strMsg; + + messageLines.remove(); + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Retr]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + receiveLines(messageLines); + return TRUE; +} + +BOOL POPClient::dele(WORD msgNum) +{ + Block responseLines; + String strMsg; + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Dele]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::noop(void) +{ + Block responseLines; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Noop],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::rset(void) +{ + Block responseLines; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Rset],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::top(Block &msgLines,WORD msgNum,WORD lineCount) +{ + Block responseLines; + String strMsg; + + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d %d",msgNum,lineCount); + if(!putControlData(mPOPCmds[Top]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!receiveLines(msgLines))return FALSE; + return TRUE; +} + +void POPClient::createStats(void) +{ + mPOPStatus.insert(&String("+OK")); + mPOPStatus.insert(&String("-ERR")); +} + +void POPClient::createCmds(void) +{ + mPOPCmds.remove(); + mPOPCmds.insert(&String("QUIT")); + mPOPCmds.insert(&String("USER")); + mPOPCmds.insert(&String("PASS")); + mPOPCmds.insert(&String("STAT")); + mPOPCmds.insert(&String("RETR")); + mPOPCmds.insert(&String("RSET")); + mPOPCmds.insert(&String("DELE")); + mPOPCmds.insert(&String("NOOP")); + mPOPCmds.insert(&String("TOP")); +} + +WORD POPClient::putControlData(const String &stringData,WORD waitForResponse) +{ + if(!mPOPControl.isConnected())return FALSE; + if(!mPOPControl.send(stringData)) + { + mPOPControl.closeSocket(); + String errorString(String("error sending '")+stringData+String("' to POP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + if(waitForResponse&&!getControlData()) + { + mPOPControl.closeSocket(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + return TRUE; +} + +WORD POPClient::getControlData(void) +{ + Block responseStrings; + mPOPControl.receive(responseStrings); + return responseStrings.size(); +} + +BOOL POPClient::isInAckResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,2)==mPOPStatus[Ok])return TRUE; + return FALSE; +} + +BOOL POPClient::isInNakResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,3)==mPOPStatus[Error])return TRUE; + return FALSE; +} + +BOOL POPClient::receive(Block &responseLines) +{ + if(!mPOPControl.receive(responseLines))return FALSE; +// message(responseLines); + return TRUE; +} + +BOOL POPClient::receiveLines(Block &receiveStrings) +{ + String stringData; + String seriesItem; + + receiveStrings.remove(); + while(TRUE) + { + if(!mPOPControl.receive(stringData))break; + if(stringData==String("."))break; + if(stringData==String(".."))stringData="."; + receiveStrings.insert(&stringData); + if(!isConnected())break; + } + return TRUE; +} + +// virtuals + +void POPClient::message(const String &messageString) +{ + ::OutputDebugString(messageString+String("\n")); +} + +void POPClient::message(Block &messageStrings) +{ + for(int itemIndex=0;itemIndex +#endif +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class String; + +class POPClient +{ +public: + POPClient(void); + virtual ~POPClient(); + BOOL open(const String &hostName); + void close(void); + BOOL isConnected(void)const; + BOOL isLoggedIn(void)const; + BOOL quit(void); + BOOL authenticate(const String &user,const String &password); + BOOL retrieve(WORD msgNum,Block &messageLines); + BOOL top(Block &messageLines,WORD msgNum,WORD lineCount=10); + BOOL dele(WORD msgNum); + BOOL rset(void); + BOOL noop(void); + BOOL stat(WORD &messages,WORD &octets); +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum {POPPort=110}; + enum POPCmds{Quit,User,Pass,Stat,Retr,Rset,Dele,Noop,Top}; + enum POPStatus{Ok,Error}; + POPClient(const POPClient &somePOPClient); + POPClient &operator=(const POPClient &somePOPClient); + void isLoggedIn(BOOL isLoggedIn); + WORD putControlData(const String &stringData,WORD waitForResponse=TRUE); + BOOL isInNakResponse(Block &responseLines); + BOOL isInAckResponse(Block &responseLines); + BOOL receive(Block &responseLines); + BOOL receiveLines(Block &receiveStrings); + WORD getControlData(void); + void createCmds(void); + void createStats(void); + + Socket mPOPControl; + WSASystem mWSASystem; + Block mPOPCmds; + Block mPOPStatus; + BOOL mIsLoggedIn; + String mSpace; +}; + +inline +BOOL POPClient::isConnected(void)const +{ + return mPOPControl.isConnected(); +} + +inline +BOOL POPClient::isLoggedIn(void)const +{ + return mIsLoggedIn; +} + +inline +void POPClient::isLoggedIn(BOOL isLoggedIn) +{ + mIsLoggedIn=isLoggedIn; +} + +inline +void POPClient::close(void) +{ + mPOPControl.closeSocket(); + isLoggedIn(FALSE); +} +#endif \ No newline at end of file diff --git a/pop/HOLD/POPDLG.CPP b/pop/HOLD/POPDLG.CPP new file mode 100644 index 0000000..6fa2c50 --- /dev/null +++ b/pop/HOLD/POPDLG.CPP @@ -0,0 +1,240 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +POPDlg::POPDlg(void) +{ + mInitHandler.setCallback(this,&POPDlg::initHandler); + mDestroyHandler.setCallback(this,&POPDlg::destroyHandler); + mCommandHandler.setCallback(this,&POPDlg::commandHandler); + mCloseHandler.setCallback(this,&POPDlg::closeHandler); + mDlgCodeHandler.setCallback(this,&POPDlg::dlgCodeHandler); + mMailSelChangedHandler.setCallback(this,&POPDlg::mailSelChangedHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); +} + +POPDlg::~POPDlg() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); +} + +POPDlg &POPDlg::operator=(const POPDlg &/*somePOPDlg*/) +{ // private implementation + return *this; +} + +BOOL POPDlg::perform(void) +{ + return ::DialogBoxParam(processInstance(),(LPSTR)"POPCLIENT",(HWND)0,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + + +CallbackData::ReturnType POPDlg::initHandler(CallbackData &/*someCallbackData*/) +{ + mStatusBar=new StatusBar(*this); + mFolderTree=new FolderTree(*this,Rect(xFolder,yFolder,cxFolder,cyFolder)); + mMailTree=new FolderTree(*this,Rect(xMail,yMail,cxMail,cyMail)); + mMailTree->insertHandler(FolderTree::SelChangedHandler,&mMailSelChangedHandler); + mStatusBar.disposition(PointerDisposition::Delete); +// getMail(); +// retrieveMail(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::dlgCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS; +} + +CallbackData::ReturnType POPDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + break; + case IDCANCEL : + endDialog(FALSE); + break; + case Server : + handleServer(someCallbackData); + break; + case GetMail : + getMail(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::mailSelChangedHandler(CallbackData &someCallbackData) +{ + setDisplay(someCallbackData.loWord()-1); + return (CallbackData::ReturnType)FALSE; +} + +void POPDlg::handleServer(CallbackData &someCallbackData) +{ + ServerDialog serverDialog(*this); + serverDialog.performDialog(); +} + +void POPDlg::getMail(void) +{ + retrieveMail(); + populateMail(); + populateFolders(); +} + +void POPDlg::retrieveMail(void) +{ + mMailBlock.remove(); + + for(int itemIndex=0;itemIndex<20;itemIndex++) + { + String strIndex; + Block mailBlock; + ::sprintf(strIndex,"hello(%d)",itemIndex); + mailBlock.insert(&String("From: Sean Kessler")); + mailBlock.insert(&String(" ")); + mailBlock.insert(&String("Sean Kessler wrote:")); + mailBlock.insert(&strIndex); + mMailBlock.insert(&Mail(mailBlock)); + } +} + +#if 0 +void POPDlg::retrieveMail(void) +{ + POPClient popClient; + ServerReg serverReg; + WORD messages; + WORD octets; + + mMailBlock.remove(); + if(!handleLoginParams(serverReg)){userMessage("Incorrect Login.");return;} + if(!popClient.open(serverReg.serverName())){userMessage("Connect Failed..");return;} + if(!popClient.authenticate(serverReg.userName(),serverReg.password())) + { + popClient.quit(); + popClient.close(); + userMessage("Authentication Failed."); + return; + } + popClient.stat(messages,octets); + if(!messages){userMessage("No Messages.");return;} + for(int msgIndex=1;msgIndex<=messages;msgIndex++) + { + mMailBlock.insert(&Mail()); + Block &msgLines=mMailBlock[mMailBlock.size()-1]; + Header &mailHeader=mMailBlock[mMailBlock.size()-1]; + popClient.retrieve(msgIndex,msgLines); + mailHeader=msgLines; + if(!msgLines.size())continue; + } + popClient.quit(); + popClient.close(); +} +#endif + +BOOL POPDlg::handleLoginParams(ServerReg &serverReg) +{ + if(serverReg.serverName().isNull()){::MessageBox(*this,(LPSTR)"No Server Defined",(LPSTR)"SERVER ERROR",MB_ICONSTOP);return FALSE;} + if(serverReg.userName().isNull()||serverReg.password().isNull()) + { + String userName; + String password; + LoginDialog loginDialog; + if(!loginDialog.performLogin())return FALSE; + userName=loginDialog.userName(); + password=loginDialog.password(); + serverReg.userName(userName); + serverReg.password(password); + } + if(serverReg.userName().isNull()||serverReg.password().isNull())return FALSE; + return TRUE; +} + +void POPDlg::populateMail(void) +{ + String strMailBox(STRING_MAILBOXNAME); + + mMailTree->setRedraw(FALSE); + mMailTree->remove(); + mMailTree->addRootNode(FolderTree::FolderClosed,strMailBox,makeItemID(NullNode,RootID)); + for(int itemIndex=0;itemIndexaddNode(TreeView::NodeChild,insertItem,strMailBox); + + } + mMailTree->setRedraw(TRUE); +} + +void POPDlg::populateFolders(void) +{ + String strUserFolder(STRING_USERFOLDERNAME); + + mFolderTree->setRedraw(FALSE); + mFolderTree->remove(); + mFolderTree->addRootNode(FolderTree::FolderClosed,strUserFolder,makeItemID(NullNode,RootID)); + mFolderTree->setRedraw(TRUE); +} + +void POPDlg::setDisplay(int itemID) +{ + String lineItem; + Block &mailList=mMailBlock[itemID]; + + if(itemID<0)return; + for(int itemIndex=0;itemIndexsetText(messageString); +} + +void POPDlg::message(Block &messageStrings) +{ + if(!mStatusBar.isOkay())return; + for(int lineIndex=0;lineIndexsetText(messageStrings[lineIndex]); +} diff --git a/pop/HOLD/POPDLG.HPP b/pop/HOLD/POPDLG.HPP new file mode 100644 index 0000000..dd303d6 --- /dev/null +++ b/pop/HOLD/POPDLG.HPP @@ -0,0 +1,69 @@ +#ifndef _POP_POPDLG_HPP_ +#define _POP_POPDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif + +class StatusBar; +class FolderTree; +class ServerReg; +class Mail; + +class POPDlg : public DWindow +{ +public: + POPDlg(void); + virtual ~POPDlg(); + BOOL perform(void); +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum DlgControls{Server=PC_SERVER,GetMail=PC_GETMAIL,EditControl=PC_EDIT}; + enum FolderCoords{xFolder=5,yFolder=50,cxFolder=235,cyFolder=150}; + enum MailCoords{xMail=245,yMail=50,cxMail=235,cyMail=150}; + enum {RootID=0}; + enum NodeType{NullNode=0x0000,MailNode=0x0001}; + POPDlg &operator=(const POPDlg &someMailDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mailSelChangedHandler(CallbackData &someCallbackData); + + void handleServer(CallbackData &someCallbackData); + void userMessage(const String &message); + void retrieveMail(void); + void populateFolders(void); + void populateMail(void); + void getMail(void); + void setDisplay(int itemID); + BOOL handleLoginParams(ServerReg &serverReg); + LPARAM makeItemID(NodeType nodeType,WORD itemID); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + Callback mDlgCodeHandler; + Callback mMailSelChangedHandler; + SmartPointer mStatusBar; + SmartPointer mFolderTree; + SmartPointer mMailTree; + Block mMailBlock; +}; + + +inline +LPARAM POPDlg::makeItemID(NodeType nodeType,WORD itemID) +{ + return MAKELPARAM(itemID,nodeType); +} +#endif \ No newline at end of file diff --git a/pop/HOLD/SRVRDLG.CPP b/pop/HOLD/SRVRDLG.CPP new file mode 100644 index 0000000..810c6a5 --- /dev/null +++ b/pop/HOLD/SRVRDLG.CPP @@ -0,0 +1,38 @@ +#include +#include + +WORD ServerDialog::performDialog(void) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"ServerDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType ServerDialog::initDialogHandler(CallbackData &someCallbackData) +{ + if(!mServerReg.serverName().isNull())setText(ServerName,mServerReg.serverName()); + return (CallbackData::ReturnType)FALSE; +} + +void ServerDialog::getServerName(void) +{ + String serverName; + + getText(ServerName,serverName); + if(serverName.isNull())return; + mServerReg.serverName(serverName); +} + +CallbackData::ReturnType ServerDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + getServerName(); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(TRUE); + break; + } + return (CallbackData::ReturnType)FALSE; +} diff --git a/pop/HOLD/SRVRDLG.HPP b/pop/HOLD/SRVRDLG.HPP new file mode 100644 index 0000000..a47f18b --- /dev/null +++ b/pop/HOLD/SRVRDLG.HPP @@ -0,0 +1,68 @@ +#ifndef _POP_SERVERDLG_HPP_ +#define _POP_SERVERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif +#ifndef _POP_SERVERREG_HPP_ +#include +#endif + +class String; + +class ServerDialog : private DWindow +{ +public: + ServerDialog(const GUIWindow &parentWindow); + virtual ~ServerDialog(); + WORD performDialog(void); +private: + enum{ServerName=NS_SERVERNAME}; + ServerDialog(const ServerDialog &someServerDialog); + ServerDialog &operator=(const ServerDialog &someServerDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void getServerName(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + ServerReg mServerReg; + HWND mhParent; +}; + +inline +ServerDialog::ServerDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog::ServerDialog(const ServerDialog &someServerDialog) +: mhParent(someServerDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); +} + +inline +ServerDialog::~ServerDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog &ServerDialog::operator=(const ServerDialog &/*someServerDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/pop/HOLD/SRVRREG.HPP b/pop/HOLD/SRVRREG.HPP new file mode 100644 index 0000000..357fce3 --- /dev/null +++ b/pop/HOLD/SRVRREG.HPP @@ -0,0 +1,142 @@ +#ifndef _POP_SERVERREG_HPP_ +#define _POP_SERVERREG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_DISKINFO_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif + +class ServerReg +{ +public: + ServerReg(void); + ServerReg(const ServerReg &someServerReg); + virtual ~ServerReg(); + ServerReg &operator=(const ServerReg &someServerReg); + const String &serverName(void)const; + void serverName(const String &hostName); + const String &userName(void)const; + void userName(const String &userName); + const String &password(void)const; + void password(const String &password); + const String &mailDir(void)const; + void mailDir(const String &mailDirectory); +private: + RegKey mRegKey; + + String mServerName; + String mMailDir; + String mUserName; + String mPassword; + String mRegEntryKey; + String mServerNameKey; + String mMailDirKey; + String mUserNameKey; + String mPasswordKey; +}; + +inline +ServerReg::ServerReg(void) +: mRegKey(RegKey::CurrentUser), mRegEntryKey(STRING_REGENTRYKEY), + mServerNameKey(STRING_SERVERNAMEKEY), mMailDirKey(STRING_MAILDIRKEY), + mUserNameKey(STRING_USERNAMEKEY), mPasswordKey(STRING_PASSWORDKEY) +{ + if(!mRegKey.openKey(mRegEntryKey)) + { + mRegKey.createKey(mRegEntryKey,""); + mRegKey.openKey(mRegEntryKey); + } + mRegKey.queryValue(mMailDirKey,mMailDir); + if(mMailDir.isNull()) + { + DiskInfo diskInfo; + diskInfo.getCurrentDirectory(mMailDir); + mRegKey.setValue(mMailDirKey,mMailDir); + } + mRegKey.queryValue(mServerNameKey,mServerName); + mRegKey.queryValue(mUserNameKey,mUserName); + mRegKey.queryValue(mPasswordKey,mPassword); +} + +inline +ServerReg::ServerReg(const ServerReg &someServerReg) +: mRegKey(RegKey::CurrentUser), mRegEntryKey(STRING_REGENTRYKEY), + mServerNameKey(STRING_SERVERNAMEKEY), mMailDirKey(STRING_MAILDIRKEY), + mUserNameKey(STRING_USERNAMEKEY), mPasswordKey(STRING_PASSWORDKEY) +{ + *this=someServerReg; +} + +inline +ServerReg::~ServerReg() +{ +} + +inline +ServerReg &ServerReg::operator=(const ServerReg &someServerReg) +{ + return *this; +} + +inline +const String &ServerReg::serverName(void)const +{ + return mServerName; +} + +inline +void ServerReg::serverName(const String &serverName) +{ + mServerName=serverName; + mRegKey.setValue(mServerNameKey,mServerName); +} + +inline +const String &ServerReg::mailDir(void)const +{ + return mMailDir; +} + +inline +void ServerReg::mailDir(const String &mailDir) +{ + mMailDir=mailDir; + mRegKey.setValue(mMailDirKey,mMailDir); +} + +inline +const String &ServerReg::userName(void)const +{ + return mUserName; +} + +inline +void ServerReg::userName(const String &userName) +{ + mUserName=userName; + mRegKey.setValue(mUserNameKey,mUserName); +} + +inline +const String &ServerReg::password(void)const +{ + return mPassword; +} + +inline +void ServerReg::password(const String &password) +{ + mPassword=password; + mRegKey.setValue(mPasswordKey,mPassword); +} +#endif \ No newline at end of file diff --git a/pop/LOGINDLG.CPP b/pop/LOGINDLG.CPP new file mode 100644 index 0000000..433ec90 --- /dev/null +++ b/pop/LOGINDLG.CPP @@ -0,0 +1,78 @@ +#include + +WORD LoginDialog::performLogin(void) +{ + DialogTemplate dlgTemplate; + DialogItemTemplate userEdit; + DialogItemTemplate passEdit; + DialogItemTemplate userStatic; + DialogItemTemplate passStatic; + + dlgTemplate.titleText("Login to host..."); + dlgTemplate.posRect(Rect(8,19,197,76)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_TABSTOP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_3DLOOK|DS_SETFONT|WS_POPUP); + + userEdit.className("EDIT"); + userEdit.titleText(""); + userEdit.style(WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL); + userEdit.posRect(Rect(56,19,98,12)); + userEdit.itemID(UserNameID); + + passEdit.className("EDIT"); + passEdit.style(WS_BORDER|WS_TABSTOP|ES_PASSWORD|WS_CHILD|WS_VISIBLE); + passEdit.posRect(Rect(56,35,98,12)); + passEdit.itemID(PasswordID); + + userStatic.className("STATIC"); + userStatic.titleText("User Name :"); + userStatic.style(WS_CHILD|WS_VISIBLE); + userStatic.posRect(Rect(2,20,39,8)); + userStatic.itemID(-1); + + passStatic.className("STATIC"); + passStatic.titleText("Password :"); + passStatic.style(WS_CHILD|WS_VISIBLE); + passStatic.posRect(Rect(2,36,39,8)); + passStatic.itemID(-1); + + dlgTemplate+=userEdit; + dlgTemplate+=passEdit; + dlgTemplate+=userStatic; + dlgTemplate+=passStatic; + + createDialog(::GetTopWindow((HWND)0),dlgTemplate); + if(userName().isNull()&&password().isNull())return FALSE; + return TRUE; +} + +WORD LoginDialog::dlgCommand(DWORD commandID,CallbackData &/*someCallbackData*/) +{ + switch(commandID) + { + case IDOK : + getText(UserNameID,mUserName); + getText(PasswordID,mPassword); + if(mUserName.isNull()||mPassword.isNull()){::MessageBeep(0);return TRUE;} + break; + case IDCANCEL : + mUserName.reserve(String::MaxString); + mPassword.reserve(String::MaxString); + break; + } + return FALSE; +} + +BOOL LoginDialog::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + if(!userName().isNull())setText(UserNameID,userName()); + if(!password().isNull())setText(PasswordID,password()); + setFocus(); + return TRUE; +} + +void LoginDialog::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ +} + diff --git a/pop/LOGINDLG.HPP b/pop/LOGINDLG.HPP new file mode 100644 index 0000000..68cf78e --- /dev/null +++ b/pop/LOGINDLG.HPP @@ -0,0 +1,69 @@ +#ifndef _POP_LOGINDIALOG_HPP_ +#define _POP_LOGINDIALOG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif + +class LoginDialog : public DynamicDialog +{ +public: + LoginDialog(void); + virtual ~LoginDialog(); + WORD performLogin(void); + String userName(void)const; + void userName(const String &userName); + String password(void)const; + void password(const String &password); +private: + enum {UserNameID=101,PasswordID=102}; + LoginDialog(const LoginDialog &loginDialog); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + String mUserName; + String mPassword; +}; + +inline +LoginDialog::LoginDialog(void) +{ +} + +inline +LoginDialog::LoginDialog(const LoginDialog &/*loginDialog*/) +{ +} + +inline +LoginDialog::~LoginDialog() +{ +} + +inline +String LoginDialog::userName(void)const +{ + return mUserName; +} + +inline +void LoginDialog::userName(const String &userName) +{ + mUserName=userName; +} + +inline +String LoginDialog::password(void)const +{ + return mPassword; +} + +inline +void LoginDialog::password(const String &password) +{ + mPassword=password; +} +#endif + diff --git a/pop/MAIL.HPP b/pop/MAIL.HPP new file mode 100644 index 0000000..796fc8a --- /dev/null +++ b/pop/MAIL.HPP @@ -0,0 +1,46 @@ +#ifndef _POP_MAILMESSAGE_HPP_ +#define _POP_MAILMESSAGE_HPP_ +#ifndef _POP_HEADER_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Mail : public Block, public Header +{ +public: + Mail(void); + Mail(Block &msgLines); + virtual ~Mail(); + Mail &operator=(Block &msgLines); +private: +}; + +inline +Mail::Mail(void) +{ +} + +inline +Mail::Mail(Block &msgLines) +: Block(msgLines), Header(msgLines) +{ +} + +inline +Mail::~Mail() +{ +} + +inline +Mail &Mail::operator=(Block &msgLines) +{ + (Block&)*this=msgLines; + (Header&)*this=msgLines; + return *this; +} +#endif diff --git a/pop/MAIN.CPP b/pop/MAIN.CPP new file mode 100644 index 0000000..de5be73 --- /dev/null +++ b/pop/MAIN.CPP @@ -0,0 +1,48 @@ +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + POPDlg popDialog; + return popDialog.perform(); +} + + + + +#if 0 +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + if(Main::previousProcessInstance()) + { + HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); + if(!hWnd) + { + ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); + return FALSE; + } + ::PostMessage(hWnd,WM_REACTIVATE,0,0L); + return FALSE; + } + MainWindow applicationWindow(Main::processInstance()); + return applicationWindow.messageLoop(); +} +#endif \ No newline at end of file diff --git a/pop/MAIN.HPP b/pop/MAIN.HPP new file mode 100644 index 0000000..2366469 --- /dev/null +++ b/pop/MAIN.HPP @@ -0,0 +1,68 @@ +#ifndef _POP_MAIN_HPP_ +#define _POP_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/pop/MAINWND.CPP b/pop/MAINWND.CPP new file mode 100644 index 0000000..5edaff5 --- /dev/null +++ b/pop/MAINWND.CPP @@ -0,0 +1,140 @@ +#include +#include + +char MainWindow::szClassName[]="POP3 client v1.00"; +char MainWindow::szMenuName[]="POP3"; + +MainWindow::MainWindow(HINSTANCE hInstance) +: mPaintHandler(this,&MainWindow::paintHandler), + mDestroyHandler(this,&MainWindow::destroyHandler), + mCommandHandler(this,&MainWindow::commandHandler), + mKeyDownHandler(this,&MainWindow::keyDownHandler), + mSizeHandler(this,&MainWindow::sizeHandler), + mCreateHandler(this,&MainWindow::createHandler), + mTimerHandler(this,&MainWindow::timerHandler), + mSetFocusHandler(this,&MainWindow::setFocusHandler), + mhInstance(hInstance) +{ + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,mhInstance,(LPSTR)this); + show(SW_SHOW); + update(); + + Block msgLines; + WORD messages; + WORD octets; + + POPClient popClient; + popClient.open("mailhost.li.net"); + if(!popClient.authenticate("europa","cygnus-x1")) + { + popClient.quit(); + popClient.close(); + return; + } + popClient.stat(messages,octets); + popClient.top(msgLines,1); +// for(int msgIndex=1;msgIndex<=messages;msgIndex++)popClient.retrieve(msgIndex,msgLines); + popClient.quit(); + popClient.close(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} diff --git a/pop/MAINWND.HPP b/pop/MAINWND.HPP new file mode 100644 index 0000000..f14c142 --- /dev/null +++ b/pop/MAINWND.HPP @@ -0,0 +1,56 @@ +#ifndef _POP_MAINWINDOW_HPP_ +#define _POP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SOCKET_WSADATA_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(HINSTANCE hInstance); + virtual ~MainWindow(); + static String className(void); +private: + enum{TimerID=0}; + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void message(const String &messageString); + void message(Block &messageStrings); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType completionHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mTimerHandler; + Callback mSetFocusHandler; + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + WSASystem mWSASystem; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif diff --git a/pop/MTREECTL.CPP b/pop/MTREECTL.CPP new file mode 100644 index 0000000..72a1969 --- /dev/null +++ b/pop/MTREECTL.CPP @@ -0,0 +1,206 @@ +// MyTreeCtrl.cpp : implementation file +// + +// This is a part of the Microsoft Foundation Classes C++ library. +// Copyright (C) 1992-1997 Microsoft Corporation +// All rights reserved. +// +// This source code is only intended as a supplement to the +// Microsoft Foundation Classes Reference and related +// electronic documentation provided with the library. +// See these sources for detailed information regarding the +// Microsoft Foundation Classes product. + +#include "stdafx.h" +#include "ctrldemo.h" +#include "mtreectl.h" +#include "treecpg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CMyTreeCtrl + +CMyTreeCtrl::CMyTreeCtrl() +{ + m_bDragging = FALSE; + m_pimagelist = NULL; +} + +CMyTreeCtrl::~CMyTreeCtrl() +{ +} + + +BEGIN_MESSAGE_MAP(CMyTreeCtrl, CTreeCtrl) + //{{AFX_MSG_MAP(CMyTreeCtrl) + ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndLabelEdit) + ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnBeginDrag) + ON_NOTIFY_REFLECT(TVN_BEGINRDRAG, OnBeginDrag) + ON_WM_MOUSEMOVE() + ON_WM_DESTROY() + ON_WM_LBUTTONUP() + ON_WM_RBUTTONUP() + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CMyTreeCtrl message handlers +void CMyTreeCtrl::OnDestroy() +{ + CImageList *pimagelist; + + pimagelist = GetImageList(TVSIL_NORMAL); + pimagelist->DeleteImageList(); + delete pimagelist; +} + +void CMyTreeCtrl::SetNewStyle(long lStyleMask, BOOL bSetBits) +{ + long lStyleOld; + + lStyleOld = GetWindowLong(m_hWnd, GWL_STYLE); + lStyleOld &= ~lStyleMask; + if (bSetBits) + lStyleOld |= lStyleMask; + + SetWindowLong(m_hWnd, GWL_STYLE, lStyleOld); + SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); +} + +void CMyTreeCtrl::OnEndLabelEdit(LPNMHDR pnmhdr, LRESULT *pLResult) +{ + TV_DISPINFO *ptvinfo; + + ((CTreeCtrlPage *)GetParent())->ShowNotification(pnmhdr, pLResult); + ptvinfo = (TV_DISPINFO *)pnmhdr; + if (ptvinfo->item.pszText != NULL) + { + ptvinfo->item.mask = TVIF_TEXT; + SetItem(&ptvinfo->item); + } + *pLResult = TRUE; +} + +void CMyTreeCtrl::OnMouseMove(UINT nFlags, CPoint point) +{ + HTREEITEM hitem; + UINT flags; + + if (m_bDragging) + { + ASSERT(m_pimagelist != NULL); + m_pimagelist->DragMove(point); + if ((hitem = HitTest(point, &flags)) != NULL) + { + m_pimagelist->DragLeave(this); + SelectDropTarget(hitem); + m_hitemDrop = hitem; + m_pimagelist->DragEnter(this, point); + } + } + + CTreeCtrl::OnMouseMove(nFlags, point); +} + +BOOL CMyTreeCtrl::IsChildNodeOf(HTREEITEM hitemChild, HTREEITEM hitemSuspectedParent) +{ + do + { + if (hitemChild == hitemSuspectedParent) + break; + } + while ((hitemChild = GetParentItem(hitemChild)) != NULL); + + return (hitemChild != NULL); +} + + +BOOL CMyTreeCtrl::TransferItem(HTREEITEM hitemDrag, HTREEITEM hitemDrop) +{ + TV_INSERTSTRUCT tvstruct; + TCHAR sztBuffer[50]; + HTREEITEM hNewItem, hFirstChild; + + // avoid an infinite recursion situation + tvstruct.item.hItem = hitemDrag; + tvstruct.item.cchTextMax = 49; + tvstruct.item.pszText = sztBuffer; + tvstruct.item.mask = TVIF_CHILDREN | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT; + GetItem(&tvstruct.item); // get information of the dragged element + tvstruct.hParent = hitemDrop; + tvstruct.hInsertAfter = TVI_SORT; + tvstruct.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT; + hNewItem = InsertItem(&tvstruct); + + while ((hFirstChild = GetChildItem(hitemDrag)) != NULL) + { + TransferItem(hFirstChild, hNewItem); // recursively transfer all the items + DeleteItem(hFirstChild); // delete the first child and all its children + } + return TRUE; +} + +void CMyTreeCtrl::OnButtonUp() +{ + if (m_bDragging) + { + ASSERT(m_pimagelist != NULL); + m_pimagelist->DragLeave(this); + m_pimagelist->EndDrag(); + delete m_pimagelist; + m_pimagelist = NULL; + + if (m_hitemDrag != m_hitemDrop && !IsChildNodeOf(m_hitemDrop, m_hitemDrag) && + GetParentItem(m_hitemDrag) != m_hitemDrop) + { + TransferItem(m_hitemDrag, m_hitemDrop); + DeleteItem(m_hitemDrag); + } + else + MessageBeep(0); + + ReleaseCapture(); + m_bDragging = FALSE; + SelectDropTarget(NULL); + } +} + +void CMyTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point) +{ + OnButtonUp(); + CTreeCtrl::OnLButtonUp(nFlags, point); +} + +void CMyTreeCtrl::OnRButtonUp(UINT nFlags, CPoint point) +{ + OnButtonUp(); + CTreeCtrl::OnRButtonUp(nFlags, point); +} + +void CMyTreeCtrl::OnBeginDrag(LPNMHDR pnmhdr, LRESULT *pLResult) +{ + CPoint ptAction; + UINT nFlags; + + GetCursorPos(&ptAction); + ScreenToClient(&ptAction); + ((CTreeCtrlPage *)GetParent())->ShowNotification(pnmhdr, pLResult); + ASSERT(!m_bDragging); + m_bDragging = TRUE; + m_hitemDrag = HitTest(ptAction, &nFlags); + m_hitemDrop = NULL; + + ASSERT(m_pimagelist == NULL); + m_pimagelist = CreateDragImage(m_hitemDrag); // get the image list for dragging + m_pimagelist->DragShowNolock(TRUE); + m_pimagelist->SetDragCursorImage(0, CPoint(0, 0)); + m_pimagelist->BeginDrag(0, CPoint(0,0)); + m_pimagelist->DragMove(ptAction); + m_pimagelist->DragEnter(this, ptAction); + SetCapture(); +} diff --git a/pop/POP.BAK b/pop/POP.BAK new file mode 100644 index 0000000..9a734df --- /dev/null +++ b/pop/POP.BAK @@ -0,0 +1,807 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=pop - Win32 Debug +!MESSAGE No configuration specified. Defaulting to pop - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "pop - Win32 Release" && "$(CFG)" != "pop - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Pop.mak" CFG="pop - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pop - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "pop - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "pop - Win32 Debug" +RSC=rc.exe +MTL=mktyplib.exe +CPP=cl.exe + +!IF "$(CFG)" == "pop - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Pop.exe" + +CLEAN : + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\pop.obj" + -@erase "$(OUTDIR)\Pop.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Pop.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Pop.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Pop.pdb" /machine:I386 /out:"$(OUTDIR)/Pop.exe" +LINK32_OBJS= \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\pop.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\mssocket.lib" + +"$(OUTDIR)\Pop.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Pop.exe" + +CLEAN : + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\pop.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Pop.exe" + -@erase "$(OUTDIR)\Pop.ilk" + -@erase "$(OUTDIR)\Pop.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Pop.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib wsock32.lib /nologo /subsystem:windows\ + /incremental:yes /pdb:"$(OUTDIR)/Pop.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)/Pop.exe" +LINK32_OBJS= \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\pop.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\mssocket.lib" + +"$(OUTDIR)\Pop.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "pop - Win32 Release" +# Name "pop - Win32 Debug" + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp + +!IF "$(CFG)" == "pop - Win32 Release" + +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "pop - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\mscommon.lib + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\mssocket.lib + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\pop.Cpp + +!IF "$(CFG)" == "pop - Win32 Release" + +DEP_CPP_POP_C=\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\pop.obj" : $(SOURCE) $(DEP_CPP_POP_C) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +DEP_CPP_POP_C=\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Basetyps.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Nspapi.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Svcguid.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\pop.obj" : $(SOURCE) $(DEP_CPP_POP_C) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/pop/POP.CPP b/pop/POP.CPP new file mode 100644 index 0000000..89b2225 --- /dev/null +++ b/pop/POP.CPP @@ -0,0 +1,188 @@ +#include +#include +#include + +POPClient::POPClient(void) +: mSpace(" "), mIsLoggedIn(FALSE) +{ + createCmds(); + createStats(); +} + +POPClient::~POPClient() +{ +} + +BOOL POPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mPOPControl.isConnected())mPOPControl.closeSocket(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}} + else if(!hostEntry.hostByName(hostName)){return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("pop3","tcp")) + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(POPPort)); + } + if(!mPOPControl.connect(internetSocketAddress)){message("unable to connect to pop3 server");return FALSE;} + mPOPControl.getSocketName(internetSocketAddress); + if(!mPOPControl.isConnected())return FALSE; +// if(!mPOPControl.receive(responseLines)) //||!responseLines.size()||! + if(!mPOPControl.receive(responseLines)||!isInAckResponse(responseLines)) + { + mPOPControl.closeSocket(); + return FALSE; + } + return TRUE; +} + +BOOL POPClient::quit(void) +{ + Block responseLines; + + if(!isConnected())return FALSE; + isLoggedIn(FALSE); + if(!putControlData(mPOPCmds[Quit],FALSE))return FALSE; + mPOPControl.receive(responseLines); + mPOPControl.closeSocket(); + return TRUE; +} + +BOOL POPClient::authenticate(const String &user,const String &password) +{ + Block responseLines; + + if(!isConnected())return FALSE; + if(!putControlData(mPOPCmds[User]+String(" ")+user,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!putControlData(mPOPCmds[Pass]+String(" ")+password,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +BOOL POPClient::stat(WORD &messages,WORD &octets) +{ + Block responseLines; + String strItem; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Stat],FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + strItem=responseLines[0].betweenString(' ',' '); + messages=::atoi((char*)strItem); + strItem=responseLines[0].betweenString(' ',0); + strItem=strItem.betweenString(' ',0); + octets=::atoi((char*)strItem); + return TRUE; +} + +BOOL POPClient::retrieve(WORD msgNum,Block &messageLines) +{ + Block responseLines; + String strMsg; + + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Retr]+String(" ")+strMsg,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +void POPClient::createStats(void) +{ + mPOPStatus.insert(&String("+OK")); + mPOPStatus.insert(&String("-ERR")); +} + +void POPClient::createCmds(void) +{ + mPOPCmds.remove(); + mPOPCmds.insert(&String("QUIT")); + mPOPCmds.insert(&String("USER")); + mPOPCmds.insert(&String("PASS")); + mPOPCmds.insert(&String("STAT")); + mPOPCmds.insert(&String("RETR")); +} + +WORD POPClient::putControlData(const String &stringData,WORD waitForResponse) +{ + if(!mPOPControl.isConnected())return FALSE; + if(!mPOPControl.send(stringData)) + { + mPOPControl.closeSocket(); + String errorString(String("error sending '")+stringData+String("' to POP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + if(waitForResponse&&!getControlData()) + { + mPOPControl.closeSocket(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + return TRUE; +} + +WORD POPClient::getControlData(void) +{ + Block responseStrings; + mPOPControl.receive(responseStrings); + return responseStrings.size(); +} + +BOOL POPClient::isInAckResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,2)==mPOPStatus[Ok])return TRUE; + return FALSE; +} + +BOOL POPClient::isInNakResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,3)==mPOPStatus[Error])return TRUE; + return FALSE; +} + + +// virtuals + +void POPClient::message(const String &messageString) +{ + ::OutputDebugString(messageString+String("\n")); +} + +void POPClient::message(Block &messageStrings) +{ + for(int itemIndex=0;itemIndex + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dialog"=..\DIALOG\Dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "imagelst"=..\IMAGELST\imagelst.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "pop"=.\Pop.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name dialog + End Project Dependency + Begin Project Dependency + Project_Dep_Name imagelst + End Project Dependency + Begin Project Dependency + Project_Dep_Name socket + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency +}}} + +############################################################################### + +Project: "socket"=..\SOCKET\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/pop/POP.H b/pop/POP.H new file mode 100644 index 0000000..0d0ba6f --- /dev/null +++ b/pop/POP.H @@ -0,0 +1,14 @@ +#define PC_SERVER 102 +#define PC_GETMAIL 103 +#define PC_EDIT 104 + +#define NS_SERVERNAME 101 + +#define STRING_SERVERNAMEKEY 1 +#define STRING_MAILDIRKEY 2 +#define STRING_REGENTRYKEY 3 +#define STRING_USERNAMEKEY 4 +#define STRING_PASSWORDKEY 5 +#define STRING_MAILBOXNAME 6 +#define STRING_USERFOLDERNAME 7 + diff --git a/pop/POP.HPP b/pop/POP.HPP new file mode 100644 index 0000000..0f87ca1 --- /dev/null +++ b/pop/POP.HPP @@ -0,0 +1,4 @@ +#ifndef _POP_POP_HPP_ +#define _POP_POP_HPP_ +#include +#endif \ No newline at end of file diff --git a/pop/POP.MAK b/pop/POP.MAK new file mode 100644 index 0000000..a2c2471 --- /dev/null +++ b/pop/POP.MAK @@ -0,0 +1,838 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=pop - Win32 Debug +!MESSAGE No configuration specified. Defaulting to pop - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "pop - Win32 Release" && "$(CFG)" != "pop - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Pop.mak" CFG="pop - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pop - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "pop - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "pop - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "pop - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Pop.exe" + +CLEAN : + -@erase "$(INTDIR)\Header.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Pop.res" + -@erase "$(INTDIR)\popclnt.obj" + -@erase "$(INTDIR)\popdlg.obj" + -@erase "$(INTDIR)\Purebmp.obj" + -@erase "$(INTDIR)\Srvrdlg.obj" + -@erase "$(OUTDIR)\Pop.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Pop.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Pop.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Pop.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Pop.pdb" /machine:I386 /out:"$(OUTDIR)/Pop.exe" +LINK32_OBJS= \ + "$(INTDIR)\Header.obj" \ + "$(INTDIR)\Logindlg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Pop.res" \ + "$(INTDIR)\popclnt.obj" \ + "$(INTDIR)\popdlg.obj" \ + "$(INTDIR)\Purebmp.obj" \ + "$(INTDIR)\Srvrdlg.obj" \ + "..\Exe\mscommon.lib" \ + "..\exe\msdialog.lib" \ + "..\Exe\msimglst.lib" \ + "..\Exe\mssocket.lib" \ + "..\Exe\statbar.lib" + +"$(OUTDIR)\Pop.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Pop.exe" + +CLEAN : + -@erase "$(INTDIR)\Header.obj" + -@erase "$(INTDIR)\Logindlg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\popclnt.obj" + -@erase "$(INTDIR)\popdlg.obj" + -@erase "$(INTDIR)\Purebmp.obj" + -@erase "$(INTDIR)\Srvrdlg.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Pop.exe" + -@erase "$(OUTDIR)\Pop.ilk" + -@erase "$(OUTDIR)\Pop.pdb" + -@erase ".\Pop.res" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo"Pop.res" /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"Pop.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Pop.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo\ + /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)/Pop.pdb" /debug\ + /machine:I386 /out:"$(OUTDIR)/Pop.exe" +LINK32_OBJS= \ + "$(INTDIR)\Header.obj" \ + "$(INTDIR)\Logindlg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\popclnt.obj" \ + "$(INTDIR)\popdlg.obj" \ + "$(INTDIR)\Purebmp.obj" \ + "$(INTDIR)\Srvrdlg.obj" \ + "..\Exe\mscommon.lib" \ + "..\exe\msdialog.lib" \ + "..\Exe\msimglst.lib" \ + "..\Exe\mssocket.lib" \ + "..\Exe\statbar.lib" \ + ".\Pop.res" + +"$(OUTDIR)\Pop.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "pop - Win32 Release" +# Name "pop - Win32 Debug" + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "pop - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Popdlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Pop.h"\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\.\Popdlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Imagelst\Imagelst.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\mscommon.lib + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\mssocket.lib + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\popdlg.cpp + +!IF "$(CFG)" == "pop - Win32 Release" + +DEP_CPP_POPDL=\ + {$(INCLUDE)}"\.\Drgsprt.hpp"\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\Logindlg.hpp"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Pop.h"\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\.\Popclnt.hpp"\ + {$(INCLUDE)}"\.\Popdlg.hpp"\ + {$(INCLUDE)}"\.\Sprite.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Srvrreg.hpp"\ + {$(INCLUDE)}"\common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Notify.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Imagelst\Ftree.hpp"\ + {$(INCLUDE)}"\Imagelst\Hittest.hpp"\ + {$(INCLUDE)}"\Imagelst\Imagelst.hpp"\ + {$(INCLUDE)}"\Imagelst\Imgeinfo.hpp"\ + {$(INCLUDE)}"\Imagelst\Treeview.hpp"\ + {$(INCLUDE)}"\Imagelst\Tvinsert.hpp"\ + {$(INCLUDE)}"\Imagelst\Tvitem.hpp"\ + {$(INCLUDE)}"\Imagelst\Tvmsghdr.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\Statbar.hpp"\ + {$(INCLUDE)}"\Statbar\Statinfo.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + + +"$(INTDIR)\popdlg.obj" : $(SOURCE) $(DEP_CPP_POPDL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +DEP_CPP_POPDL=\ + {$(INCLUDE)}"\.\Drgsprt.hpp"\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\.\Logindlg.hpp"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Pop.h"\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\.\Popclnt.hpp"\ + {$(INCLUDE)}"\.\Popdlg.hpp"\ + {$(INCLUDE)}"\.\Sprite.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Srvrreg.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Brush.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Crsctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Notify.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + {$(INCLUDE)}"\Imagelst\Ftree.hpp"\ + {$(INCLUDE)}"\Imagelst\Hittest.hpp"\ + {$(INCLUDE)}"\Imagelst\Imagelst.hpp"\ + {$(INCLUDE)}"\Imagelst\Imgeinfo.hpp"\ + {$(INCLUDE)}"\Imagelst\Treeview.hpp"\ + {$(INCLUDE)}"\Imagelst\Tvinsert.hpp"\ + {$(INCLUDE)}"\Imagelst\Tvitem.hpp"\ + {$(INCLUDE)}"\Imagelst\Tvmsghdr.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\Statbar.hpp"\ + {$(INCLUDE)}"\Statbar\Statinfo.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + + +"$(INTDIR)\popdlg.obj" : $(SOURCE) $(DEP_CPP_POPDL) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\statbar.lib + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Pop.rc +DEP_RSC_POP_R=\ + ".\SSTRIP.BMP"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\dde.h"\ + {$(INCLUDE)}"\ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\lzexpand.h"\ + {$(INCLUDE)}"\MMSystem.h"\ + {$(INCLUDE)}"\MSWSock.h"\ + {$(INCLUDE)}"\nb30.h"\ + {$(INCLUDE)}"\poppack.h"\ + {$(INCLUDE)}"\PshPack1.h"\ + {$(INCLUDE)}"\PshPack2.h"\ + {$(INCLUDE)}"\PshPack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\RpcDce.h"\ + {$(INCLUDE)}"\RpcDceP.h"\ + {$(INCLUDE)}"\RpcNsi.h"\ + {$(INCLUDE)}"\RpcNtErr.h"\ + {$(INCLUDE)}"\ShellAPI.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\WinBase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\wincrypt.h"\ + {$(INCLUDE)}"\WinDef.h"\ + {$(INCLUDE)}"\windows.h"\ + {$(INCLUDE)}"\WinError.h"\ + {$(INCLUDE)}"\wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\WinNls.h"\ + {$(INCLUDE)}"\WinNT.h"\ + {$(INCLUDE)}"\WinPerf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\WinSpool.h"\ + {$(INCLUDE)}"\WinUser.h"\ + {$(INCLUDE)}"\WinVer.h"\ + + +!IF "$(CFG)" == "pop - Win32 Release" + + +"$(INTDIR)\Pop.res" : $(SOURCE) $(DEP_RSC_POP_R) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + + +".\Pop.res" : $(SOURCE) $(DEP_RSC_POP_R) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\popclnt.Cpp +DEP_CPP_POPCL=\ + {$(INCLUDE)}"\.\Popclnt.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\socket\servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\popclnt.obj" : $(SOURCE) $(DEP_CPP_POPCL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Srvrdlg.cpp + +!IF "$(CFG)" == "pop - Win32 Release" + +DEP_CPP_SRVRD=\ + {$(INCLUDE)}"\.\Pop.h"\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Srvrreg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +DEP_CPP_SRVRD=\ + {$(INCLUDE)}"\.\Pop.h"\ + {$(INCLUDE)}"\.\Pop.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Srvrreg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Logindlg.cpp +DEP_CPP_LOGIN=\ + {$(INCLUDE)}"\.\Logindlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Logindlg.obj" : $(SOURCE) $(DEP_CPP_LOGIN) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\msdialog.lib + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Exe\msimglst.lib + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Header.cpp +DEP_CPP_HEADE=\ + {$(INCLUDE)}"\.\Header.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Header.obj" : $(SOURCE) $(DEP_CPP_HEADE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\Common\Purebmp.cpp +DEP_CPP_PUREB=\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Purebmp.obj" : $(SOURCE) $(DEP_CPP_PUREB) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/pop/POP.MDP b/pop/POP.MDP new file mode 100644 index 0000000..a5704ef Binary files /dev/null and b/pop/POP.MDP differ diff --git a/pop/POP.PLG b/pop/POP.PLG new file mode 100644 index 0000000..dd7890d --- /dev/null +++ b/pop/POP.PLG @@ -0,0 +1,36 @@ + + +
+

Build Log

+

+--------------------Configuration: pop - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP40.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/Pop.pdb" /debug /machine:I386 /out:".\msvcobj/Pop.exe" +.\msvcobj\Header.obj +.\msvcobj\Logindlg.obj +.\msvcobj\Main.obj +.\msvcobj\Popclnt.obj +.\msvcobj\Popdlg.obj +.\msvcobj\Srvrdlg.obj +.\msvcobj\Pop.res +..\Exe\mscommon.lib +..\exe\msdialog.lib +\work\exe\imagelst.lib +..\Exe\mssocket.lib +..\exe\statbar.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP40.tmp" +

Output Window

+Linking... + Creating library .\msvcobj/Pop.lib and object .\msvcobj/Pop.exp + + + +

Results

+Pop.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/pop/POP.RC b/pop/POP.RC new file mode 100644 index 0000000..b0e3043 --- /dev/null +++ b/pop/POP.RC @@ -0,0 +1,36 @@ +#include +#include + +LIST BITMAP "SSTRIP.BMP" + +POPCLIENT DIALOG 19, 20, 325, 234 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "POPClient" +FONT 6, "Helv" +{ + PUSHBUTTON "Quit", IDCANCEL, 272, 5, 50, 14 + PUSHBUTTON "Server", PC_SERVER, 222, 5, 50, 14 + PUSHBUTTON "Get Mail", PC_GETMAIL, 172, 5, 50, 14 + EDITTEXT PC_EDIT, 4, 126, 315, 93, ES_MULTILINE | ES_AUTOHSCROLL | ES_OEMCONVERT | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP +} + +ServerDialog DIALOG 6, 15, 202, 49 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "News Server" +FONT 8, "MS Sans Serif" +{ + LTEXT "News Server:", -1, 6, 11, 49, 8 + EDITTEXT NS_SERVERNAME, 51, 10, 144, 12, ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 145, 27, 50, 14 +} + +STRINGTABLE +{ + STRING_REGENTRYKEY, "Software\\Diversified\\POPClient" + STRING_SERVERNAMEKEY, "ServerName" + STRING_MAILDIRKEY, "MailDir" + STRING_USERNAMEKEY, "UserName" + STRING_PASSWORDKEY, "Password" + STRING_MAILBOXNAME, "MailBox" + STRING_USERFOLDERNAME, "MyFolder" +} diff --git a/pop/POP.RES b/pop/POP.RES new file mode 100644 index 0000000..6fa8873 Binary files /dev/null and b/pop/POP.RES differ diff --git a/pop/POP.RWS b/pop/POP.RWS new file mode 100644 index 0000000..95ce31c Binary files /dev/null and b/pop/POP.RWS differ diff --git a/pop/POPCLNT.CPP b/pop/POPCLNT.CPP new file mode 100644 index 0000000..6786134 --- /dev/null +++ b/pop/POPCLNT.CPP @@ -0,0 +1,265 @@ +#include +#include +#include + +POPClient::POPClient(void) +: mSpace(" "), mIsLoggedIn(FALSE) +{ + createCmds(); + createStats(); +} + +POPClient::~POPClient() +{ +} + +BOOL POPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mPOPControl.isConnected())mPOPControl.destroy(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}} + else if(!hostEntry.hostByName(hostName)){return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("pop3","tcp")) + { + if(!mPOPControl.create()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mPOPControl.create()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(POPPort)); + } + if(!mPOPControl.connect(internetSocketAddress)){message("unable to connect to pop3 server");return FALSE;} + mPOPControl.getSocketName(internetSocketAddress); + if(!mPOPControl.isConnected())return FALSE; + if(!receive(responseLines)||!isInAckResponse(responseLines)) + { + mPOPControl.destroy(); + return FALSE; + } + return TRUE; +} + +BOOL POPClient::quit(void) +{ + Block responseLines; + + if(!isConnected())return FALSE; + isLoggedIn(FALSE); + if(!putControlData(mPOPCmds[Quit],FALSE))return FALSE; + receive(responseLines); + mPOPControl.destroy(); + return TRUE; +} + +BOOL POPClient::authenticate(const String &user,const String &password) +{ + Block responseLines; + + if(!isConnected())return FALSE; + if(!putControlData(mPOPCmds[User]+String(" ")+user,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!putControlData(mPOPCmds[Pass]+String(" ")+password,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +BOOL POPClient::stat(WORD &messages,WORD &octets) +{ + Block responseLines; + String strItem; + + messages=0; + octets=0; + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Stat],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + strItem=responseLines[0].betweenString(' ',' '); + messages=::atoi((char*)strItem); + strItem=responseLines[0].betweenString(' ',0); + strItem=strItem.betweenString(' ',0); + octets=::atoi((char*)strItem); + return TRUE; +} + +BOOL POPClient::retrieve(WORD msgNum,Block &messageLines) +{ + Block responseLines; + String strMsg; + + messageLines.remove(); + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Retr]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + receiveLines(messageLines); + return TRUE; +} + +BOOL POPClient::dele(WORD msgNum) +{ + Block responseLines; + String strMsg; + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Dele]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::noop(void) +{ + Block responseLines; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Noop],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::rset(void) +{ + Block responseLines; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Rset],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::top(Block &msgLines,WORD msgNum,WORD lineCount) +{ + Block responseLines; + String strMsg; + + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d %d",msgNum,lineCount); + if(!putControlData(mPOPCmds[Top]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!receiveLines(msgLines))return FALSE; + return TRUE; +} + +void POPClient::createStats(void) +{ + mPOPStatus.insert(&String("+OK")); + mPOPStatus.insert(&String("-ERR")); +} + +void POPClient::createCmds(void) +{ + mPOPCmds.remove(); + mPOPCmds.insert(&String("QUIT")); + mPOPCmds.insert(&String("USER")); + mPOPCmds.insert(&String("PASS")); + mPOPCmds.insert(&String("STAT")); + mPOPCmds.insert(&String("RETR")); + mPOPCmds.insert(&String("RSET")); + mPOPCmds.insert(&String("DELE")); + mPOPCmds.insert(&String("NOOP")); + mPOPCmds.insert(&String("TOP")); +} + +WORD POPClient::putControlData(const String &stringData,WORD waitForResponse) +{ + if(!mPOPControl.isConnected())return FALSE; + if(!mPOPControl.send(stringData)) + { + mPOPControl.destroy(); + String errorString(String("error sending '")+stringData+String("' to POP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + if(waitForResponse&&!getControlData()) + { + mPOPControl.destroy(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + return TRUE; +} + +WORD POPClient::getControlData(void) +{ + Block responseStrings; + mPOPControl.receive(responseStrings); + return responseStrings.size(); +} + +BOOL POPClient::isInAckResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,2)==mPOPStatus[Ok])return TRUE; + return FALSE; +} + +BOOL POPClient::isInNakResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,3)==mPOPStatus[Error])return TRUE; + return FALSE; +} + +BOOL POPClient::receive(Block &responseLines) +{ + if(!mPOPControl.receive(responseLines))return FALSE; +// message(responseLines); + return TRUE; +} + +BOOL POPClient::receiveLines(Block &receiveStrings) +{ + String stringData; + String seriesItem; + + receiveStrings.remove(); + while(TRUE) + { + if(!mPOPControl.receive(stringData))break; + if(stringData==String("."))break; + if(stringData==String(".."))stringData="."; + receiveStrings.insert(&stringData); + if(!isConnected())break; + } + return TRUE; +} + +// virtuals + +void POPClient::message(const String &messageString) +{ + ::OutputDebugString(messageString+String("\n")); +} + +void POPClient::message(Block &messageStrings) +{ + for(int itemIndex=0;itemIndex +#endif +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class String; + +class POPClient +{ +public: + POPClient(void); + virtual ~POPClient(); + BOOL open(const String &hostName); + void close(void); + BOOL isConnected(void)const; + BOOL isLoggedIn(void)const; + BOOL quit(void); + BOOL authenticate(const String &user,const String &password); + BOOL retrieve(WORD msgNum,Block &messageLines); + BOOL top(Block &messageLines,WORD msgNum,WORD lineCount=10); + BOOL dele(WORD msgNum); + BOOL rset(void); + BOOL noop(void); + BOOL stat(WORD &messages,WORD &octets); +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum {POPPort=110}; + enum POPCmds{Quit,User,Pass,Stat,Retr,Rset,Dele,Noop,Top}; + enum POPStatus{Ok,Error}; + POPClient(const POPClient &somePOPClient); + POPClient &operator=(const POPClient &somePOPClient); + void isLoggedIn(BOOL isLoggedIn); + WORD putControlData(const String &stringData,WORD waitForResponse=TRUE); + BOOL isInNakResponse(Block &responseLines); + BOOL isInAckResponse(Block &responseLines); + BOOL receive(Block &responseLines); + BOOL receiveLines(Block &receiveStrings); + WORD getControlData(void); + void createCmds(void); + void createStats(void); + + Socket mPOPControl; + WSASystem mWSASystem; + Block mPOPCmds; + Block mPOPStatus; + BOOL mIsLoggedIn; + String mSpace; +}; + +inline +BOOL POPClient::isConnected(void)const +{ + return mPOPControl.isConnected(); +} + +inline +BOOL POPClient::isLoggedIn(void)const +{ + return mIsLoggedIn; +} + +inline +void POPClient::isLoggedIn(BOOL isLoggedIn) +{ + mIsLoggedIn=isLoggedIn; +} + +inline +void POPClient::close(void) +{ + mPOPControl.destroy(); + isLoggedIn(FALSE); +} +#endif \ No newline at end of file diff --git a/pop/POPDLG.CPP b/pop/POPDLG.CPP new file mode 100644 index 0000000..7320688 --- /dev/null +++ b/pop/POPDLG.CPP @@ -0,0 +1,421 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +POPDlg::POPDlg(void) +: mIsInDrag(FALSE), mhItemDrop(0), mhItemDrag(0) +{ + mInitHandler.setCallback(this,&POPDlg::initHandler); + mDestroyHandler.setCallback(this,&POPDlg::destroyHandler); + mCommandHandler.setCallback(this,&POPDlg::commandHandler); + mCloseHandler.setCallback(this,&POPDlg::closeHandler); + mDlgCodeHandler.setCallback(this,&POPDlg::dlgCodeHandler); + mMailSelChangedHandler.setCallback(this,&POPDlg::mailSelChangedHandler); + mMailBeginDragHandler.setCallback(this,&POPDlg::mailBeginDragHandler); + mFolderBeginDragHandler.setCallback(this,&POPDlg::folderBeginDragHandler); + mMouseMoveHandler.setCallback(this,&POPDlg::mouseMoveHandler); + mLeftButtonUpHandler.setCallback(this,&POPDlg::leftButtonUpHandler); + + Callback mRightButtonDownHandler; + Callback mRightButtonUpHandler; + + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); + DWindow::insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + DWindow::insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); +} + +POPDlg::~POPDlg() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::removeHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); + DWindow::removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + DWindow::removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); +} + +POPDlg &POPDlg::operator=(const POPDlg &/*somePOPDlg*/) +{ // private implementation + return *this; +} + +BOOL POPDlg::perform(void) +{ + return ::DialogBoxParam(processInstance(),(LPSTR)"POPCLIENT",(HWND)0,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType POPDlg::initHandler(CallbackData &/*someCallbackData*/) +{ + mStatusBar=new StatusBar(*this); + mFolderTree=new FolderTree(*this,Rect(xFolder,yFolder,cxFolder,cyFolder),110); + mFolderTree->insertHandler(FolderTree::BeginDragHandler,&mFolderBeginDragHandler); + mMailTree=new FolderTree(*this,Rect(xMail,yMail,cxMail,cyMail),111); + mMailTree->insertHandler(FolderTree::SelChangedHandler,&mMailSelChangedHandler); + mMailTree->insertHandler(FolderTree::BeginDragHandler,&mMailBeginDragHandler); + mFolderTree.disposition(PointerDisposition::Delete); + mMailTree.disposition(PointerDisposition::Delete); + mStatusBar.disposition(PointerDisposition::Delete); + getMail(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::dlgCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS; +} + +CallbackData::ReturnType POPDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + break; + case IDCANCEL : + endDialog(FALSE); + break; + case Server : + handleServer(someCallbackData); + break; + case GetMail : + getMail(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::mouseMoveHandler(CallbackData &someCallbackData) +{ + if(!mIsInDrag)return (CallbackData::ReturnType)FALSE; + GDIPoint mousePoint(someCallbackData.loWord(),someCallbackData.hiWord()); + mImageList.dragMove(GDIPoint(mousePoint.x(),mousePoint.y()+::GetSystemMetrics(SM_CYCAPTION))); + handleFolderDrag(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::leftButtonUpHandler(CallbackData &/*someCallbackData*/) +{ + if(!mIsInDrag)return (CallbackData::ReturnType)FALSE; + mIsInDrag=FALSE; + mImageList.dragLeave(*this); + mImageList.endDrag(); + mImageList=(HIMAGELIST)0; + copyItem(mhItemDrag,mhItemDrop); + mMailTree->remove(mhItemDrag); + mFolderTree->selectDropTarget((HTREEITEM)0); + releaseCapture(); + mhItemDrag=0; + mhItemDrop=0; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::mailBeginDragHandler(CallbackData &someCallbackData) +{ +#if 0 + GDIPoint ptAction; + HitTestInfo hitInfo; + + mIsInDrag=TRUE; + ::GetCursorPos(&((POINT&)ptAction)); + ::ScreenToClient(mMailTree->getControlWnd(),&((POINT&)ptAction)); + hitInfo.point(ptAction); + mhItemDrag=mMailTree->hitTest(hitInfo); + mMailTree->selectItem(mhItemDrag); + mhItemDrag=hitInfo.item(); + mImageList=mMailTree->createDragImage(mhItemDrag); + mImageList.dragShowNoLock(TRUE); + mImageList.setDragCursorImage(0,GDIPoint()); + mImageList.beginDrag(0,GDIPoint()); + ::GetCursorPos(&((POINT&)ptAction)); + ::ScreenToClient(*this,&((POINT&)ptAction)); + ptAction.y(ptAction.y()+::GetSystemMetrics(SM_CYCAPTION)); + mImageList.dragMove(ptAction); + mImageList.dragEnter(*this,ptAction); + setCapture(); +#endif + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::mailSelChangedHandler(CallbackData &someCallbackData) +{ + String itemID; + + ::sprintf(itemID,"index:%d type:%d\n",someCallbackData.loWord()-1,someCallbackData.hiWord()); + ::OutputDebugString(itemID); +// TreeViewMessageHeader &treeViewMessageHeader=*((TreeViewMessageHeader*)someCallbackData.lParam()); +// setDisplay(someCallbackData.loWord()-1); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::rightButtonUpHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::rightButtonDownHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::folderBeginDragHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +void POPDlg::handleFolderDrag(void) +{ + HTREEITEM hItemDrop; + HitTestInfo hitInfo; + GDIPoint ptAction; + + ::GetCursorPos(&((POINT&)ptAction)); + ::ScreenToClient((HWND)(*mFolderTree),&((POINT&)ptAction)); + hitInfo.point(ptAction); + if(0!=(hItemDrop=mFolderTree->hitTest(hitInfo))) + { + mImageList.dragLeave(*this); + mFolderTree->selectDropTarget(hItemDrop); + mhItemDrop=hItemDrop; + ::GetCursorPos(&((POINT&)ptAction)); + ::ScreenToClient(*this,&((POINT&)ptAction)); + ptAction.y(ptAction.y()+::GetSystemMetrics(SM_CYCAPTION)); + mImageList.dragEnter(*this,ptAction); + } +} + +void POPDlg::copyItem(HTREEITEM hDragItem,HTREEITEM hDropItem) +{ + TreeViewInsert tvInsert; + TreeViewItem tvItem; + String strItem; + + strItem.length(String::MaxString); + tvItem.item(hDragItem); + tvItem.maxText(String::MaxString); + tvItem.text(strItem); + tvItem.mask(TreeViewItem::MaskChildren|TreeViewItem::MaskHandle|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskText); + mMailTree->getItem(tvItem); + tvInsert.parent(hDropItem); + tvInsert.insertAfter(TreeViewInsert::InsertSort); + tvInsert.viewItem(tvItem); + mFolderTree->insertItem(tvInsert); + mMailTree->invalidate(); + mMailTree->update(); + mFolderTree->invalidate(); + mFolderTree->update(); + return; +} + +void POPDlg::handleServer(CallbackData &someCallbackData) +{ + ServerDialog serverDialog(*this); + serverDialog.performDialog(); +} + +void POPDlg::getMail(void) +{ + retrieveMail(); + populateMail(); + populateFolders(); +} + +#if 0 +void POPDlg::retrieveMail(void) +{ + mMailBlock.remove(); + + for(int itemIndex=0;itemIndex<20;itemIndex++) + { + String strIndex; + Block mailBlock; + ::sprintf(strIndex,"(%d)",itemIndex); + mailBlock.insert(&String(String("From: Sean Kessler")+strIndex+String(""))); + mailBlock.insert(&String(" ")); + mailBlock.insert(&String("Sean Kessler wrote:")); + mailBlock.insert(&strIndex); + mMailBlock.insert(&Mail(mailBlock)); + } +} +#endif + +#if 0 +void POPDlg::retrieveMail(void) +{ + POPClient popClient; + ServerReg serverReg; + WORD messages; + WORD octets; + + mMailBlock.remove(); + if(!handleLoginParams(serverReg)){userMessage("Incorrect Login.");return;} + if(!popClient.open(serverReg.serverName())){userMessage("Connect Failed..");return;} + if(!popClient.authenticate(serverReg.userName(),serverReg.password())) + { + popClient.quit(); + popClient.close(); + userMessage("Authentication Failed."); + return; + } + popClient.stat(messages,octets); + if(!messages){userMessage("No Messages.");return;} + for(int msgIndex=1;msgIndex<=messages;msgIndex++) + { + mMailBlock.insert(&Mail()); + Block &msgLines=mMailBlock[mMailBlock.size()-1]; + Header &mailHeader=mMailBlock[mMailBlock.size()-1]; + popClient.retrieve(msgIndex,msgLines); + mailHeader=msgLines; + if(!msgLines.size())continue; + } + popClient.quit(); + popClient.close(); +} +#endif + + +void POPDlg::retrieveMail(void) +{ + POPClient popClient; + ServerReg serverReg; + WORD messages; + WORD octets; + + mMailBlock.remove(); + if(!handleLoginParams(serverReg)){userMessage("Incorrect Login.");return;} + if(!popClient.open(serverReg.serverName())){userMessage("Connect Failed..");return;} + if(!popClient.authenticate(serverReg.userName(),serverReg.password())) + { + popClient.quit(); + popClient.close(); + userMessage("Authentication Failed."); + return; + } + popClient.stat(messages,octets); + if(!messages)::MessageBox(*this,"No Messages","POPCLIENT",MB_OK); + else + { + String strCount; + ::sprintf(strCount,"%d message(s)",messages); + ::MessageBox(*this,strCount,"POPCLIENT",MB_OK); + } +// for(int msgIndex=1;msgIndex<=messages;msgIndex++) +// { +// mMailBlock.insert(&Mail()); +// Block &msgLines=mMailBlock[mMailBlock.size()-1]; +// Header &mailHeader=mMailBlock[mMailBlock.size()-1]; +// popClient.retrieve(msgIndex,msgLines); +// mailHeader=msgLines; +// if(!msgLines.size())continue; +// } + popClient.quit(); + popClient.close(); +} + +BOOL POPDlg::handleLoginParams(ServerReg &serverReg) +{ + if(serverReg.serverName().isNull()){::MessageBox(*this,(LPSTR)"No Server Defined",(LPSTR)"SERVER ERROR",MB_ICONSTOP);return FALSE;} + if(serverReg.userName().isNull()||serverReg.password().isNull()) + { + String userName; + String password; + LoginDialog loginDialog; + if(!loginDialog.performLogin())return FALSE; + userName=loginDialog.userName(); + password=loginDialog.password(); + serverReg.userName(userName); + serverReg.password(password); + } + if(serverReg.userName().isNull()||serverReg.password().isNull())return FALSE; + return TRUE; +} + +void POPDlg::populateMail(void) +{ + String strMailBox(STRING_MAILBOXNAME); + + mMailTree->setRedraw(FALSE); + mMailTree->remove(); + mMailTree->addRootNode(FolderTree::FolderClosed,strMailBox,makeItemID(NullNode,RootID)); + for(int itemIndex=0;itemIndexaddNode(TreeView::NodeChild,insertItem,strMailBox); + } + mMailTree->setRedraw(TRUE); +} + +void POPDlg::populateFolders(void) +{ + String strUserFolder(STRING_USERFOLDERNAME); + String strMainFolder("Main Folder"); + + mFolderTree->setRedraw(FALSE); + mFolderTree->remove(); + mFolderTree->addRootNode(FolderTree::FolderClosed,strUserFolder,makeItemID(NullNode,RootID)); + TreeViewItem insertItem(0,0,0,0,(LPSTR)strMainFolder,strMainFolder.length(),3,3,0,makeItemID(MailNode,1)); + mFolderTree->addNode(TreeView::NodeChild,insertItem,strUserFolder); + mFolderTree->setRedraw(TRUE); +} + +void POPDlg::setDisplay(int itemID) +{ + String lineItem; + Block &mailList=mMailBlock[itemID]; + + if(itemID<0)return; + for(int itemIndex=0;itemIndexsetText(messageString); +} + +void POPDlg::message(Block &messageStrings) +{ + if(!mStatusBar.isOkay())return; + for(int lineIndex=0;lineIndexsetText(messageStrings[lineIndex]); +} diff --git a/pop/POPDLG.HPP b/pop/POPDLG.HPP new file mode 100644 index 0000000..eb34d4f --- /dev/null +++ b/pop/POPDLG.HPP @@ -0,0 +1,98 @@ +#ifndef _POP_POPDLG_HPP_ +#define _POP_POPDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif +#ifndef _IMAGELIST_IMAGELIST_HPP_ +#include +#endif +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif + +class StatusBar; +class FolderTree; +class ServerReg; +class Mail; + +class POPDlg : public DWindow +{ +public: + POPDlg(void); + virtual ~POPDlg(); + BOOL perform(void); +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum DlgControls{Server=PC_SERVER,GetMail=PC_GETMAIL,EditControl=PC_EDIT}; + enum FolderCoords{xFolder=5,yFolder=50,cxFolder=235,cyFolder=150}; + enum MailCoords{xMail=245,yMail=50,cxMail=235,cyMail=150}; + enum {RootID=0}; + enum NodeType{NullNode=0x0000,MailNode=0x0001}; + POPDlg &operator=(const POPDlg &someMailDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mailSelChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mailBeginDragHandler(CallbackData &someCallbackData); + CallbackData::ReturnType folderBeginDragHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &someCallbackData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType rightButtonDownHandler(CallbackData &someCallbackData); + + void handleServer(CallbackData &someCallbackData); + void userMessage(const String &message); + void retrieveMail(void); + void populateFolders(void); + void populateMail(void); + void getMail(void); + void setDisplay(int itemID); + BOOL handleLoginParams(ServerReg &serverReg); + LPARAM makeItemID(NodeType nodeType,WORD itemID); + void handleFolderDrag(void); + void copyItem(HTREEITEM hDragItem,HTREEITEM hDropItem); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + Callback mDlgCodeHandler; + Callback mMailSelChangedHandler; + Callback mMailBeginDragHandler; + Callback mFolderBeginDragHandler; + Callback mMouseMoveHandler; + Callback mLeftButtonUpHandler; + Callback mRightButtonDownHandler; + Callback mRightButtonUpHandler; + SmartPointer mStatusBar; + SmartPointer mFolderTree; + SmartPointer mMailTree; + Block mMailBlock; + BOOL mIsInDrag; + HTREEITEM mhItemDrag; + HTREEITEM mhItemDrop; + ImageList mImageList; +}; + +inline +LPARAM POPDlg::makeItemID(NodeType nodeType,WORD itemID) +{ + return MAKELPARAM(itemID,nodeType); +} +#endif \ No newline at end of file diff --git a/pop/Pop.001 b/pop/Pop.001 new file mode 100644 index 0000000..3a4cc1f --- /dev/null +++ b/pop/Pop.001 @@ -0,0 +1,168 @@ +# Microsoft Developer Studio Project File - Name="pop" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=pop - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Pop.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Pop.mak" CFG="pop - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pop - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "pop - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "pop - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "pop - Win32 Release" +# Name "pop - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Header.cpp +# End Source File +# Begin Source File + +SOURCE=.\Logindlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\msdialog.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\msimglst.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\mssocket.lib +# End Source File +# Begin Source File + +SOURCE=.\Pop.rc + +!IF "$(CFG)" == "pop - Win32 Release" + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Popclnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Popdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.cpp +# End Source File +# Begin Source File + +SOURCE=..\exe\statbar.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pop.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/pop/Pop.dsp b/pop/Pop.dsp new file mode 100644 index 0000000..ae89007 --- /dev/null +++ b/pop/Pop.dsp @@ -0,0 +1,142 @@ +# Microsoft Developer Studio Project File - Name="pop" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=pop - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Pop.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Pop.mak" CFG="pop - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pop - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "pop - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "pop - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "pop - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"d:\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "pop - Win32 Release" +# Name "pop - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Header.cpp +# End Source File +# Begin Source File + +SOURCE=.\Logindlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Pop.rc +# End Source File +# Begin Source File + +SOURCE=.\Popclnt.cpp +# End Source File +# Begin Source File + +SOURCE=.\Popdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pop.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/pop/RCA19935 b/pop/RCA19935 new file mode 100644 index 0000000..ce7b5f2 Binary files /dev/null and b/pop/RCA19935 differ diff --git a/pop/RDA19935 b/pop/RDA19935 new file mode 100644 index 0000000..c0e4f57 Binary files /dev/null and b/pop/RDA19935 differ diff --git a/pop/SCRAPS.TXT b/pop/SCRAPS.TXT new file mode 100644 index 0000000..669a61c --- /dev/null +++ b/pop/SCRAPS.TXT @@ -0,0 +1,435 @@ + +// BOOL helo(const String &domainName); +// BOOL mail(const String &reversePath); +// BOOL rcpt(const String &forwardPath); +// BOOL data(const Block &mailData); +// BOOL verify(const String &forwardPath); +// BOOL expand(const String &mailList); +// BOOL send(const String &reversePath); +// BOOL sendOrMail(const String &reversePath); +// BOOL sendAndMail(const String &reversePath); +// BOOL help(const String &commandName=String()); +// BOOL noop(void); +// BOOL reset(void); +// BOOL turn(void); +// BOOL quit(void); + +BOOL SMTPClient::helo(const String &domainName) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||domainName.isNull())return FALSE; + controlData=mSMTPCmds[Helo]; + controlData+=mSpace; + controlData+=domainName; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckHelo))return FALSE; + return TRUE; +} + +BOOL SMTPClient::quit(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Quit]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckQuit))return FALSE; + return TRUE; +} + +BOOL SMTPClient::mail(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[Mail]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckMail))return FALSE; + return TRUE; +} + +BOOL SMTPClient::rcpt(const String &forwardPath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE; + controlData=mSMTPCmds[Recipient]; + controlData+=mSpace; + controlData+=mSMTPCmds[To]; + controlData+=forwardPath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckRecipient))return FALSE; + return TRUE; +} + +BOOL SMTPClient::data(const Block &mailData) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||!mailData.size())return FALSE; + controlData=mSMTPCmds[Data]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckData))return FALSE; + for(int lineIndex=0;lineIndex&)mailData)[lineIndex]); + mSMTPControl.send("."); + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckData))return FALSE; + return TRUE; +} + +BOOL SMTPClient::verify(const String &forwardPath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE; + controlData=mSMTPCmds[Verify]; + controlData+=mSpace; + controlData+=forwardPath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckVerify))return FALSE; + return TRUE; +} + +BOOL SMTPClient::expand(const String &mailList) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||mailList.isNull())return FALSE; + controlData=mSMTPCmds[Verify]; + controlData+=mSpace; + controlData+=mailList; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckExpand))return FALSE; + return TRUE; +} + +BOOL SMTPClient::send(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[Send]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSend))return FALSE; + return TRUE; +} + +BOOL SMTPClient::sendOrMail(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[SendOrMail]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSendOrMail))return FALSE; + return TRUE; +} + +BOOL SMTPClient::sendAndMail(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[SendAndMail]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSendAndMail))return FALSE; + return TRUE; +} + +BOOL SMTPClient::reset(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Reset]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckReset))return FALSE; + return TRUE; +} + +BOOL SMTPClient::help(const String &commandName) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Help]; + if(!commandName.isNull()) + { + controlData+=mSpace; + controlData+=commandName; + } + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckHelp))return FALSE; + return TRUE; +} + +BOOL SMTPClient::noop(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Noop]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckNoop))return FALSE; + return TRUE; +} + +BOOL SMTPClient::turn(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Turn]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckTurn))return FALSE; + return TRUE; +} + + + + +// BOOL isInResponse(const String &responseString,SMTPResponse::RspType responseType); +//inline +//BOOL SMTPClient::isInResponse(const String &responseString,SMTPResponse::RspType responseType) +//{ +// return mSMTPResponse.isInResponse(responseString,responseType); +//} + + + + +void POPDlg::retrieveMail(void) +{ + POPClient popClient; + ServerReg serverReg; + WORD messages; + WORD octets; + + mMailBlock.remove(); + if(!handleLoginParams(serverReg))return; + if(!popClient.open(serverReg.serverName()))return; + if(!popClient.authenticate(serverReg.userName(),serverReg.password())) + { + popClient.quit(); + popClient.close(); + return; + } + popClient.stat(messages,octets); + if(!messages)::MessageBox(*this,(LPSTR)"No Messages On Server",(LPSTR)"MAIL",MB_OK); +// sendMessage(ListBox,WM_SETREDRAW,FALSE,0L); +// sendMessage(ListBox,LB_RESETCONTENT,0,0L); + for(int msgIndex=1;msgIndex<=messages;msgIndex++) + { + mMailBlock.insert(&Block()); + Block &msgLines=mMailBlock[mMailBlock.size()-1]; + popClient.retrieve(msgIndex,msgLines); + if(!msgLines.size())continue; +// for(int msgLine=0;msgLine +CallbackData::ReturnType POPDlg::mailBeginDragHandler(CallbackData &someCallbackData) +{ + mIsInDrag=TRUE; + TreeViewMessageHeader &treeViewMessageHeader=*((TreeViewMessageHeader*)someCallbackData.lParam()); + mImageList=mMailTree->createDragImage(treeViewMessageHeader.itemNew().item()); + + PureDevice displayDevice(*this); + ImageInfo imageInfo; + mImageList.imageInfo(0,imageInfo); + mDragSprite.setDevice(displayDevice); + mDragSprite.setBitmap(imageInfo.colorBitmap()); + //DragSprite dragSprite(imageInfo.colorBitmap()); +// dragSprite.moveSprite(treeViewMessageHeader.pointDrag()); + Point movePoint(treeViewMessageHeader.pointDrag().x(),treeViewMessageHeader.pointDrag().y()); + mDragSprite.moveSprite(movePoint); + +// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE); +// GDIPoint pointDrag(treeViewMessageHeader.pointDrag()); +// GDIPoint cursorPos; +// ::GetCursorPos(&((POINT&)cursorPos)); +// pointDrag.x(cursorPos.x()); +// pointDrag.y(cursorPos.y()); +// ImageList_DragEnter(NULL,pointDrag.x(),pointDrag.y()); +// if(!mImageList.beginDrag(0,pointDrag))::OutputDebugString("BeginDrag Failed.\n"); +// if(!mImageList.beginDrag(0,GDIPoint()))::OutputDebugString("BeginDrag Failed.\n"); + ::ShowCursor(FALSE); + ::SetCapture(*this); + return (CallbackData::ReturnType)FALSE; +} + + + +// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE); +// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE); +// GDIPoint pointDrag(treeViewMessageHeader.pointDrag()); +// GDIPoint cursorPos; +// ::GetCursorPos(&((POINT&)cursorPos)); +// pointDrag.x(cursorPos.x()); +// pointDrag.y(cursorPos.y()); +// ImageList_DragEnter(NULL,pointDrag.x(),pointDrag.y()); +// if(!mImageList.beginDrag(0,pointDrag))::OutputDebugString("BeginDrag Failed.\n"); +// if(!mImageList.beginDrag(0,GDIPoint()))::OutputDebugString("BeginDrag Failed.\n"); + + +#if 0 + ImageInfo imageInfo; + mImageList.imageInfo(0,imageInfo); + mDragSprite.setDevice(displayDevice); + mDragSprite.setBitmap(imageInfo.colorBitmap()); + mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),TRUE); + Point movePoint(mItemRect.left(),mItemRect.top()); + mDragSprite.moveSprite(movePoint); +#endif + + +#if 0 + PureDevice displayDevice(*this); + PureDevice memDevice(displayDevice); + PureBitmap pureBitmap(imageInfo.colorBitmap()); + PureBitmap pureList(processInstance(),"LIST"); + PureBitmap pureBitmap(pureList); + memDevice.select((GDIObj)pureBitmap); + Rect dstRect(0,0,pureBitmap.width(),pureBitmap.height()); + Point srcPoint(0,0); + if(!displayDevice.bitBlt(dstRect,memDevice,srcPoint))::OutputDebugString("BitBlt failed/n"); +#endif + +// BITMAP bmBitmap; +// memDevice.select(imageInfo.colorBitmap()); +// ::GetObject(imageInfo.maskBitmap(),sizeof(BITMAP),(LPSTR)&bmBitmap); +// Rect dstRect(0,0,bmBitmap.bmWidthBytes,bmBitmap.bmHeight); +// Rect dstRect(0,0,pureBitmap.widthBytes(),pureBitmap.height()); + +// BITMAP bm; +// HDC hDC=::GetDC(*this); +// HDC hMemDC=::CreateCompatibleDC(hDC); +// HBITMAP hBitmap(imageInfo.colorBitmap()); +// PureBitmap hBitmap(processInstance(),"LIST"); +// ::GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&bm); +// ::SelectObject(hMemDC,hBitmap); +// ::BitBlt(hDC,0,0,bm.bmWidth,bm.bmHeight,hMemDC,0,0,SRCCOPY); +// ::BitBlt(hDC,0,0,hBitmap.width(),hBitmap.height(),hMemDC,0,0,SRCCOPY); +// ::ReleaseDC(*this,hDC); +// ::DeleteDC(hMemDC); + + +// if(!mBitmapScratch.isOkay())mBitmapScratch=new PureBitmap(); +// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE); +// mImageList.imageInfo(0,imageInfo); +// mImageList.drawImage(pureDevice,Point(),0); + + +#if 0 + TreeViewMessageHeader &treeViewMessageHeader=*((TreeViewMessageHeader*)someCallbackData.lParam()); + NM_TREEVIEW *pNMHeader=(NM_TREEVIEW*)&treeViewMessageHeader; +#endif diff --git a/pop/SPRITE.CPP b/pop/SPRITE.CPP new file mode 100644 index 0000000..79b125b --- /dev/null +++ b/pop/SPRITE.CPP @@ -0,0 +1,89 @@ +#include +#include +#include + +//PureSprite::PureSprite(PureDevice &displayDevice,Point startPoint) +//: mDisplayDevice(displayDevice) +//{ +//} + +PureSprite::PureSprite(void) +{ +} + +PureSprite::~PureSprite() +{ +} + +PureSprite::operator PureBitmap&(void) +{ + return mBitmapNothing; +} + +void PureSprite::moveSprite(const Point &newPoint) +{ +// PureBitmap currImage((PureBitmap&)*this); + PureBitmap bitmapNew; + PureBitmap bitmapMask; + PureBitmap bitmapCache; + PureBitmap bitmapScratch; + PureDevice memoryDevice; + PureDevice bkCurrDevice; + PureDevice bkPrevDevice; + PureDevice maskDevice; + PureDevice cacheDevice; + PureDevice scratchDevice; + RGBColor rgbColor; + Point deltaPoint; + Point currPoint; + Point currDimPoint(width(),height()); +// Point currDimPoint(currImage.width(),currImage.height()); + + currPoint=newPoint; + if(mPrevPoint==Point(0,0))mPrevPoint=currPoint; + deltaPoint.x(mPrevPoint.x()-currPoint.x()); + deltaPoint.y(mPrevPoint.y()-currPoint.y()); + mPrevPoint=currPoint; + + scratchDevice.compatibleDevice(mDisplayDevice); + memoryDevice.compatibleDevice(mDisplayDevice); + bkCurrDevice.compatibleDevice(mDisplayDevice); + bkPrevDevice.compatibleDevice(mDisplayDevice); + maskDevice.compatibleDevice(mDisplayDevice); + cacheDevice.compatibleDevice(mDisplayDevice); + + rgbColor=::SetBkColor(memoryDevice,RGBColor(0,0,0)); + + bitmapScratch.compatibleBitmap(mDisplayDevice,currDimPoint.x(),currDimPoint.y()); + bitmapNew.compatibleBitmap(mDisplayDevice,currDimPoint.x(),currDimPoint.y()); + bitmapCache.compatibleBitmap(mDisplayDevice,currDimPoint.x(),currDimPoint.y()); + bitmapMask.compatibleBitmap(maskDevice,currDimPoint.x(),currDimPoint.y()); + + memoryDevice.select(currImage); + scratchDevice.select(bitmapScratch); + bkCurrDevice.select(bitmapNew); + bkPrevDevice.select(mBitmapBkGnd); + maskDevice.select(bitmapMask); + cacheDevice.select(bitmapCache); + +// ::StretchBlt(scratchDevice,0,0,bitmapScratch.width(),bitmapScratch.height(),memoryDevice,0,0,currImage.width(),currImage.height(),SRCCOPY); +// ::StretchBlt(maskDevice,0,0,bitmapMask.width(),bitmapMask.height(),memoryDevice,0,0,currImage.width(),currImage.height(),SRCCOPY); + ::BitBlt(bkCurrDevice,0,0,bitmapNew.width(),bitmapNew.height(),mDisplayDevice,currPoint.x(),currPoint.y(),SRCCOPY); + ::BitBlt(bkCurrDevice,deltaPoint.x(),deltaPoint.y(),mBitmapBkGnd.width(),mBitmapBkGnd.height(),bkPrevDevice,0,0,SRCCOPY); + ::BitBlt(bkPrevDevice,-deltaPoint.x(),-deltaPoint.y(),mBitmapBkGnd.width(),mBitmapBkGnd.height(),maskDevice,0,0,SRCAND); + ::BitBlt(bkPrevDevice,-deltaPoint.x(),-deltaPoint.y(),mBitmapBkGnd.width(),mBitmapBkGnd.height(),scratchDevice,0,0,SRCPAINT); + ::BitBlt(cacheDevice,0,0,bitmapCache.width(),bitmapCache.height(),bkCurrDevice,0,0,SRCCOPY); +// ::BitBlt(cacheDevice,0,0,bitmapCache.width(),bitmapCache.height(),maskDevice,0,0,SRCAND); +// ::BitBlt(cacheDevice,0,0,bitmapCache.width(),bitmapCache.height(),scratchDevice,0,0,SRCPAINT); +// ::BitBlt(mDisplayDevice,currPoint.x(),currPoint.y(),currDimPoint.x(),currDimPoint.y(),cacheDevice,0,0,SRCCOPY); +// ::BitBlt(mDisplayDevice,currPoint.x()+deltaPoint.x(),currPoint.y()+deltaPoint.y(),mBitmapBkGnd.width(),mBitmapBkGnd.height(),bkPrevDevice,0,0,SRCCOPY); + + memoryDevice.select(currImage,FALSE); + bkCurrDevice.select(bitmapNew,FALSE); + bkPrevDevice.select(mBitmapBkGnd,FALSE); + maskDevice.select(bitmapMask,FALSE); + cacheDevice.select(bitmapCache,FALSE); + ::SetBkColor(memoryDevice,rgbColor); + mBitmapBkGnd=bitmapNew; +} + diff --git a/pop/SPRITE.HPP b/pop/SPRITE.HPP new file mode 100644 index 0000000..48719fb --- /dev/null +++ b/pop/SPRITE.HPP @@ -0,0 +1,71 @@ +#ifndef _SPRITE_PURESPRITE_HPP_ +#define _SPRITE_PURESPRITE_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif + +class PureSprite +{ +public: + PureSprite(void); + virtual ~PureSprite(); + void moveSprite(const Point &newPos); + void setDevice(PureDevice &pureDevice); + void width(WORD width); + WORD width(void)const; + void height(WORD height); + WORD height(void)const; +protected: + virtual operator PureBitmap&(void); +private: + Point mPrevPoint; + PureDevice mDisplayDevice; + PureBitmap mBitmapBkGnd; + PureBitmap mBitmapNothing; + WORD mWidth; + WORD mHeight; +}; + +inline +void PureSprite::setDevice(PureDevice &pureDevice) +{ + mDisplayDevice=pureDevice; +} + +inline +void PureSprite::width(WORD width) +{ + mWidth=width; +} + +inline +WORD PureSprite::width(void)const +{ + return mWidth; +} + +inline +void PureSprite::height(WORD height) +{ + mHeight=height; +} + +inline +WORD PureSprite::height(void)const +{ + return mHeight; +} +#endif + diff --git a/pop/SRVRDLG.CPP b/pop/SRVRDLG.CPP new file mode 100644 index 0000000..810c6a5 --- /dev/null +++ b/pop/SRVRDLG.CPP @@ -0,0 +1,38 @@ +#include +#include + +WORD ServerDialog::performDialog(void) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"ServerDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType ServerDialog::initDialogHandler(CallbackData &someCallbackData) +{ + if(!mServerReg.serverName().isNull())setText(ServerName,mServerReg.serverName()); + return (CallbackData::ReturnType)FALSE; +} + +void ServerDialog::getServerName(void) +{ + String serverName; + + getText(ServerName,serverName); + if(serverName.isNull())return; + mServerReg.serverName(serverName); +} + +CallbackData::ReturnType ServerDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + getServerName(); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(TRUE); + break; + } + return (CallbackData::ReturnType)FALSE; +} diff --git a/pop/SRVRDLG.HPP b/pop/SRVRDLG.HPP new file mode 100644 index 0000000..a47f18b --- /dev/null +++ b/pop/SRVRDLG.HPP @@ -0,0 +1,68 @@ +#ifndef _POP_SERVERDLG_HPP_ +#define _POP_SERVERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif +#ifndef _POP_SERVERREG_HPP_ +#include +#endif + +class String; + +class ServerDialog : private DWindow +{ +public: + ServerDialog(const GUIWindow &parentWindow); + virtual ~ServerDialog(); + WORD performDialog(void); +private: + enum{ServerName=NS_SERVERNAME}; + ServerDialog(const ServerDialog &someServerDialog); + ServerDialog &operator=(const ServerDialog &someServerDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void getServerName(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + ServerReg mServerReg; + HWND mhParent; +}; + +inline +ServerDialog::ServerDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog::ServerDialog(const ServerDialog &someServerDialog) +: mhParent(someServerDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); +} + +inline +ServerDialog::~ServerDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog &ServerDialog::operator=(const ServerDialog &/*someServerDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/pop/SRVRREG.HPP b/pop/SRVRREG.HPP new file mode 100644 index 0000000..357fce3 --- /dev/null +++ b/pop/SRVRREG.HPP @@ -0,0 +1,142 @@ +#ifndef _POP_SERVERREG_HPP_ +#define _POP_SERVERREG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_DISKINFO_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif + +class ServerReg +{ +public: + ServerReg(void); + ServerReg(const ServerReg &someServerReg); + virtual ~ServerReg(); + ServerReg &operator=(const ServerReg &someServerReg); + const String &serverName(void)const; + void serverName(const String &hostName); + const String &userName(void)const; + void userName(const String &userName); + const String &password(void)const; + void password(const String &password); + const String &mailDir(void)const; + void mailDir(const String &mailDirectory); +private: + RegKey mRegKey; + + String mServerName; + String mMailDir; + String mUserName; + String mPassword; + String mRegEntryKey; + String mServerNameKey; + String mMailDirKey; + String mUserNameKey; + String mPasswordKey; +}; + +inline +ServerReg::ServerReg(void) +: mRegKey(RegKey::CurrentUser), mRegEntryKey(STRING_REGENTRYKEY), + mServerNameKey(STRING_SERVERNAMEKEY), mMailDirKey(STRING_MAILDIRKEY), + mUserNameKey(STRING_USERNAMEKEY), mPasswordKey(STRING_PASSWORDKEY) +{ + if(!mRegKey.openKey(mRegEntryKey)) + { + mRegKey.createKey(mRegEntryKey,""); + mRegKey.openKey(mRegEntryKey); + } + mRegKey.queryValue(mMailDirKey,mMailDir); + if(mMailDir.isNull()) + { + DiskInfo diskInfo; + diskInfo.getCurrentDirectory(mMailDir); + mRegKey.setValue(mMailDirKey,mMailDir); + } + mRegKey.queryValue(mServerNameKey,mServerName); + mRegKey.queryValue(mUserNameKey,mUserName); + mRegKey.queryValue(mPasswordKey,mPassword); +} + +inline +ServerReg::ServerReg(const ServerReg &someServerReg) +: mRegKey(RegKey::CurrentUser), mRegEntryKey(STRING_REGENTRYKEY), + mServerNameKey(STRING_SERVERNAMEKEY), mMailDirKey(STRING_MAILDIRKEY), + mUserNameKey(STRING_USERNAMEKEY), mPasswordKey(STRING_PASSWORDKEY) +{ + *this=someServerReg; +} + +inline +ServerReg::~ServerReg() +{ +} + +inline +ServerReg &ServerReg::operator=(const ServerReg &someServerReg) +{ + return *this; +} + +inline +const String &ServerReg::serverName(void)const +{ + return mServerName; +} + +inline +void ServerReg::serverName(const String &serverName) +{ + mServerName=serverName; + mRegKey.setValue(mServerNameKey,mServerName); +} + +inline +const String &ServerReg::mailDir(void)const +{ + return mMailDir; +} + +inline +void ServerReg::mailDir(const String &mailDir) +{ + mMailDir=mailDir; + mRegKey.setValue(mMailDirKey,mMailDir); +} + +inline +const String &ServerReg::userName(void)const +{ + return mUserName; +} + +inline +void ServerReg::userName(const String &userName) +{ + mUserName=userName; + mRegKey.setValue(mUserNameKey,mUserName); +} + +inline +const String &ServerReg::password(void)const +{ + return mPassword; +} + +inline +void ServerReg::password(const String &password) +{ + mPassword=password; + mRegKey.setValue(mPasswordKey,mPassword); +} +#endif \ No newline at end of file diff --git a/pop/SSTRIP.BMP b/pop/SSTRIP.BMP new file mode 100644 index 0000000..533acf4 Binary files /dev/null and b/pop/SSTRIP.BMP differ diff --git a/pop/STRIP.BMP b/pop/STRIP.BMP new file mode 100644 index 0000000..68746ea Binary files /dev/null and b/pop/STRIP.BMP differ diff --git a/pop/SUBCLASS.HPP b/pop/SUBCLASS.HPP new file mode 100644 index 0000000..46f3431 --- /dev/null +++ b/pop/SUBCLASS.HPP @@ -0,0 +1,13 @@ +#ifndef _COMMON_SUBCLASS_HPP_ +#define _COMMON_SUBCLASS_HPP_ + +class SubClass +{ +public: + SubClass(void); + virtual ~SubClass(); + BOOL subClass(); +private: + String mSubClassName; +}; +#endif \ No newline at end of file diff --git a/pop/old/Header.cpp b/pop/old/Header.cpp new file mode 100644 index 0000000..8dfc623 --- /dev/null +++ b/pop/old/Header.cpp @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include + +Header &Header::operator=(const Header &someHeader) +{ + path(someHeader.path()); + from(someHeader.from()); + newsGroups(someHeader.newsGroups()); + subject(someHeader.subject()); + date(someHeader.date()); + organization(someHeader.organization()); + lines(someHeader.lines()); + messageID(someHeader.messageID()); + replyTo(someHeader.replyTo()); + postingHost(someHeader.postingHost()); + newsReader(someHeader.newsReader()); + crossReference(someHeader.crossReference()); + contentType(someHeader.contentType()); + xMailer(someHeader.xMailer()); + return *this; +} + +Header &Header::operator=(Block &headerLines) +{ + UINT lineCount(headerLines.size()); + for(int lineIndex=0;lineIndex +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif + +template +class Block; + +class Header +{ +public: + Header(void); + Header(Block &headerLines); + Header(const Header &someHeader); + Header(const String &pathFileName); + virtual ~Header(); + Header &operator=(const Header &someHeader); + Header &operator=(Block &headerLines); + Header &operator=(const String &pathFileName); + const String &path(void)const; + const String &from(void)const; + const String &newsGroups(void)const; + const String &subject(void)const; + const String &date(void)const; + SystemTime systemTime(void); + const String &organization(void)const; + const String &lines(void)const; + const String &messageID(void)const; + const String &replyTo(void)const; + const String &postingHost(void)const; + const String &newsReader(void)const; + const String &crossReference(void)const; + const String &contentType(void)const; + const String &xMailer(void)const; +private: + void path(const String &path); + void from(const String &from); + void newsGroups(const String &newsGroups); + void subject(const String &subject); + void date(const String &date); + void organization(const String &organization); + void lines(const String &lines); + void messageID(const String &messageID); + void replyTo(const String &replyTo); + void postingHost(const String &postingHost); + void newsReader(const String &newsReader); + void crossReference(const String &crossReference); + void contentType(const String &contentType); + void xMailer(const String &xMailer); + WORD isPath(const String &stringLine)const; + WORD isFrom(const String &stringLine)const; + WORD isNewsGroups(const String &stringLine)const; + WORD isSubject(const String &stringLine)const; + WORD isDate(const String &stringLine)const; + WORD isOrganization(const String &stringLine)const; + WORD isLines(const String &stringLine)const; + WORD isMessageID(const String &stringLine)const; + WORD isReplyTo(const String &stringLine)const; + WORD isNNTPPostingHost(const String &stringLine)const; + WORD isNewsReader(const String &stringLine)const; + WORD isCrossReference(const String &stringLine)const; + WORD isContentType(const String &stringLine)const; + WORD isMailer(const String &stringLine)const; + + String mPath; + String mFrom; + String mNewsGroups; + String mSubject; + String mDate; + String mOrganization; + String mLines; + String mMessageID; + String mReplyTo; + String mPostingHost; + String mContentType; + String mXMailer; + String mNewsReader; + String mCrossReference; +}; + +inline +Header::Header(void) +{ +} + +inline +Header::Header(Block &headerLines) +{ + *this=headerLines; +} + +inline +Header::Header(const Header &someHeader) +{ + *this=someHeader; +} + +inline +Header::Header(const String &pathFileName) +{ + *this=pathFileName; +} + +inline +Header::~Header() +{ +} + +inline +const String &Header::path(void)const +{ + return mPath; +} + +inline +void Header::path(const String &path) +{ + mPath=path; +} + +inline +const String &Header::from(void)const +{ + return mFrom; +} + +inline +void Header::from(const String &from) +{ + mFrom=from; +} + +inline +const String &Header::newsGroups(void)const +{ + return mNewsGroups; +} + +inline +void Header::newsGroups(const String &newsGroups) +{ + mNewsGroups=newsGroups; +} + +inline +const String &Header::subject(void)const +{ + return mSubject; +} + +inline +void Header::subject(const String &subject) +{ + mSubject=subject; +} + +inline +const String &Header::date(void)const +{ + return mDate; +} + +inline +void Header::date(const String &date) +{ + mDate=date; +} + +inline +const String &Header::organization(void)const +{ + return mOrganization; +} + +inline +void Header::organization(const String &organization) +{ + mOrganization=organization; +} + +inline +const String &Header::lines(void)const +{ + return mLines; +} + +inline +void Header::lines(const String &lines) +{ + mLines=lines; +} + +inline +const String &Header::messageID(void)const +{ + return mMessageID; +} + +inline +void Header::messageID(const String &messageID) +{ + mMessageID=messageID; +} + +inline +const String &Header::replyTo(void)const +{ + return mReplyTo; +} + +inline +void Header::replyTo(const String &replyTo) +{ + mReplyTo=replyTo; +} + +inline +const String &Header::postingHost(void)const +{ + return mPostingHost; +} + +inline +void Header::postingHost(const String &postingHost) +{ + mPostingHost=postingHost; +} + +inline +const String &Header::newsReader(void)const +{ + return mNewsReader; +} + +inline +void Header::newsReader(const String &newsReader) +{ + mNewsReader=newsReader; +} + +inline +const String &Header::crossReference(void)const +{ + return mCrossReference; +} + +inline +void Header::crossReference(const String &crossReference) +{ + mCrossReference=crossReference; +} + +inline +const String &Header::contentType(void)const +{ + return mContentType; +} + +inline +void Header::contentType(const String &contentType) +{ + mContentType=contentType; +} + +inline +const String &Header::xMailer(void)const +{ + return mXMailer; +} + +inline +void Header::xMailer(const String &xMailer) +{ + mXMailer=xMailer; +} + +inline +WORD Header::isPath(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Path: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isFrom(const String &stringLine)const +{ + return (!::strncmp(stringLine,"From: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isNewsGroups(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Newsgroups: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isSubject(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Subject: ",9)?TRUE:FALSE); +} + +inline +WORD Header::isDate(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Date: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isOrganization(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Organization: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isLines(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Lines: ",7)?TRUE:FALSE); +} + +inline +WORD Header::isMessageID(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Message-ID: ",12)?TRUE:FALSE); +} + +inline +WORD Header::isReplyTo(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Reply-To: ",10)?TRUE:FALSE); +} + +inline +WORD Header::isNNTPPostingHost(const String &stringLine)const +{ + return (!::strncmp(stringLine,"NNTP-Posting-Host",17)?TRUE:FALSE); +} + +inline +WORD Header::isNewsReader(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Newsreader: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isCrossReference(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Xref: ",6)?TRUE:FALSE); +} + +inline +WORD Header::isContentType(const String &stringLine)const +{ + return (!::strncmp(stringLine,"Content-Type: ",14)?TRUE:FALSE); +} + +inline +WORD Header::isMailer(const String &stringLine)const +{ + return (!::strncmp(stringLine,"X-Mailer: ",10)?TRUE:FALSE); +} +#endif + + diff --git a/pop/old/LOGINDLG.CPP b/pop/old/LOGINDLG.CPP new file mode 100644 index 0000000..cdd2ceb --- /dev/null +++ b/pop/old/LOGINDLG.CPP @@ -0,0 +1,77 @@ +#include + +WORD LoginDialog::performLogin(void) +{ + DialogTemplate dlgTemplate; + DialogItemTemplate userEdit; + DialogItemTemplate passEdit; + DialogItemTemplate userStatic; + DialogItemTemplate passStatic; + + dlgTemplate.titleText("Login to host..."); + dlgTemplate.posRect(Rect(8,19,197,76)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_TABSTOP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU|DS_3DLOOK|DS_SETFONT|WS_POPUP); + + userEdit.className("EDIT"); + userEdit.titleText(""); + userEdit.style(WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL); + userEdit.posRect(Rect(56,19,98,12)); + userEdit.itemID(UserNameID); + + passEdit.className("EDIT"); + passEdit.style(WS_BORDER|WS_TABSTOP|ES_PASSWORD|WS_CHILD|WS_VISIBLE); + passEdit.posRect(Rect(56,35,98,12)); + passEdit.itemID(PasswordID); + + userStatic.className("STATIC"); + userStatic.titleText("User Name :"); + userStatic.style(WS_CHILD|WS_VISIBLE); + userStatic.posRect(Rect(2,20,39,8)); + userStatic.itemID(-1); + + passStatic.className("STATIC"); + passStatic.titleText("Password :"); + passStatic.style(WS_CHILD|WS_VISIBLE); + passStatic.posRect(Rect(2,36,39,8)); + passStatic.itemID(-1); + + dlgTemplate+=userEdit; + dlgTemplate+=passEdit; + dlgTemplate+=userStatic; + dlgTemplate+=passStatic; + + createDialog(::GetTopWindow((HWND)0),dlgTemplate); + if(userName().isNull()&&password().isNull())return FALSE; + return TRUE; +} + +WORD LoginDialog::dlgCommand(DWORD commandID,CallbackData &/*someCallbackData*/) +{ + switch(commandID) + { + case IDOK : + getText(UserNameID,mUserName); + getText(PasswordID,mPassword); + if(mUserName.isNull()||mPassword.isNull()){::MessageBeep(0);return TRUE;} + break; + case IDCANCEL : + mUserName.reserve(String::MaxString); + mPassword.reserve(String::MaxString); + break; + } + return FALSE; +} + +void LoginDialog::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + if(!userName().isNull())setText(UserNameID,userName()); + if(!password().isNull())setText(PasswordID,password()); + setFocus(); +} + +void LoginDialog::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ +} + diff --git a/pop/old/LOGINDLG.HPP b/pop/old/LOGINDLG.HPP new file mode 100644 index 0000000..44f0c6d --- /dev/null +++ b/pop/old/LOGINDLG.HPP @@ -0,0 +1,69 @@ +#ifndef _POP_LOGINDIALOG_HPP_ +#define _POP_LOGINDIALOG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif + +class LoginDialog : public DynamicDialog +{ +public: + LoginDialog(void); + virtual ~LoginDialog(); + WORD performLogin(void); + String userName(void)const; + void userName(const String &userName); + String password(void)const; + void password(const String &password); +private: + enum {UserNameID=101,PasswordID=102}; + LoginDialog(const LoginDialog &loginDialog); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + void dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + String mUserName; + String mPassword; +}; + +inline +LoginDialog::LoginDialog(void) +{ +} + +inline +LoginDialog::LoginDialog(const LoginDialog &/*loginDialog*/) +{ +} + +inline +LoginDialog::~LoginDialog() +{ +} + +inline +String LoginDialog::userName(void)const +{ + return mUserName; +} + +inline +void LoginDialog::userName(const String &userName) +{ + mUserName=userName; +} + +inline +String LoginDialog::password(void)const +{ + return mPassword; +} + +inline +void LoginDialog::password(const String &password) +{ + mPassword=password; +} +#endif + diff --git a/pop/old/Main.cpp b/pop/old/Main.cpp new file mode 100644 index 0000000..de5be73 --- /dev/null +++ b/pop/old/Main.cpp @@ -0,0 +1,48 @@ +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + POPDlg popDialog; + return popDialog.perform(); +} + + + + +#if 0 +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + if(Main::previousProcessInstance()) + { + HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); + if(!hWnd) + { + ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); + return FALSE; + } + ::PostMessage(hWnd,WM_REACTIVATE,0,0L); + return FALSE; + } + MainWindow applicationWindow(Main::processInstance()); + return applicationWindow.messageLoop(); +} +#endif \ No newline at end of file diff --git a/pop/old/Main.hpp b/pop/old/Main.hpp new file mode 100644 index 0000000..2366469 --- /dev/null +++ b/pop/old/Main.hpp @@ -0,0 +1,68 @@ +#ifndef _POP_MAIN_HPP_ +#define _POP_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/pop/old/Mainwnd.cpp b/pop/old/Mainwnd.cpp new file mode 100644 index 0000000..5edaff5 --- /dev/null +++ b/pop/old/Mainwnd.cpp @@ -0,0 +1,140 @@ +#include +#include + +char MainWindow::szClassName[]="POP3 client v1.00"; +char MainWindow::szMenuName[]="POP3"; + +MainWindow::MainWindow(HINSTANCE hInstance) +: mPaintHandler(this,&MainWindow::paintHandler), + mDestroyHandler(this,&MainWindow::destroyHandler), + mCommandHandler(this,&MainWindow::commandHandler), + mKeyDownHandler(this,&MainWindow::keyDownHandler), + mSizeHandler(this,&MainWindow::sizeHandler), + mCreateHandler(this,&MainWindow::createHandler), + mTimerHandler(this,&MainWindow::timerHandler), + mSetFocusHandler(this,&MainWindow::setFocusHandler), + mhInstance(hInstance) +{ + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,mhInstance,(LPSTR)this); + show(SW_SHOW); + update(); + + Block msgLines; + WORD messages; + WORD octets; + + POPClient popClient; + popClient.open("mailhost.li.net"); + if(!popClient.authenticate("europa","cygnus-x1")) + { + popClient.quit(); + popClient.close(); + return; + } + popClient.stat(messages,octets); + popClient.top(msgLines,1); +// for(int msgIndex=1;msgIndex<=messages;msgIndex++)popClient.retrieve(msgIndex,msgLines); + popClient.quit(); + popClient.close(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} diff --git a/pop/old/Mainwnd.hpp b/pop/old/Mainwnd.hpp new file mode 100644 index 0000000..f14c142 --- /dev/null +++ b/pop/old/Mainwnd.hpp @@ -0,0 +1,56 @@ +#ifndef _POP_MAINWINDOW_HPP_ +#define _POP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SOCKET_WSADATA_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(HINSTANCE hInstance); + virtual ~MainWindow(); + static String className(void); +private: + enum{TimerID=0}; + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void message(const String &messageString); + void message(Block &messageStrings); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType completionHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mTimerHandler; + Callback mSetFocusHandler; + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + WSASystem mWSASystem; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif diff --git a/pop/old/POP.CPP b/pop/old/POP.CPP new file mode 100644 index 0000000..89b2225 --- /dev/null +++ b/pop/old/POP.CPP @@ -0,0 +1,188 @@ +#include +#include +#include + +POPClient::POPClient(void) +: mSpace(" "), mIsLoggedIn(FALSE) +{ + createCmds(); + createStats(); +} + +POPClient::~POPClient() +{ +} + +BOOL POPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mPOPControl.isConnected())mPOPControl.closeSocket(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}} + else if(!hostEntry.hostByName(hostName)){return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("pop3","tcp")) + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(POPPort)); + } + if(!mPOPControl.connect(internetSocketAddress)){message("unable to connect to pop3 server");return FALSE;} + mPOPControl.getSocketName(internetSocketAddress); + if(!mPOPControl.isConnected())return FALSE; +// if(!mPOPControl.receive(responseLines)) //||!responseLines.size()||! + if(!mPOPControl.receive(responseLines)||!isInAckResponse(responseLines)) + { + mPOPControl.closeSocket(); + return FALSE; + } + return TRUE; +} + +BOOL POPClient::quit(void) +{ + Block responseLines; + + if(!isConnected())return FALSE; + isLoggedIn(FALSE); + if(!putControlData(mPOPCmds[Quit],FALSE))return FALSE; + mPOPControl.receive(responseLines); + mPOPControl.closeSocket(); + return TRUE; +} + +BOOL POPClient::authenticate(const String &user,const String &password) +{ + Block responseLines; + + if(!isConnected())return FALSE; + if(!putControlData(mPOPCmds[User]+String(" ")+user,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!putControlData(mPOPCmds[Pass]+String(" ")+password,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +BOOL POPClient::stat(WORD &messages,WORD &octets) +{ + Block responseLines; + String strItem; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Stat],FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + strItem=responseLines[0].betweenString(' ',' '); + messages=::atoi((char*)strItem); + strItem=responseLines[0].betweenString(' ',0); + strItem=strItem.betweenString(' ',0); + octets=::atoi((char*)strItem); + return TRUE; +} + +BOOL POPClient::retrieve(WORD msgNum,Block &messageLines) +{ + Block responseLines; + String strMsg; + + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Retr]+String(" ")+strMsg,FALSE))return FALSE; + if(!mPOPControl.receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +void POPClient::createStats(void) +{ + mPOPStatus.insert(&String("+OK")); + mPOPStatus.insert(&String("-ERR")); +} + +void POPClient::createCmds(void) +{ + mPOPCmds.remove(); + mPOPCmds.insert(&String("QUIT")); + mPOPCmds.insert(&String("USER")); + mPOPCmds.insert(&String("PASS")); + mPOPCmds.insert(&String("STAT")); + mPOPCmds.insert(&String("RETR")); +} + +WORD POPClient::putControlData(const String &stringData,WORD waitForResponse) +{ + if(!mPOPControl.isConnected())return FALSE; + if(!mPOPControl.send(stringData)) + { + mPOPControl.closeSocket(); + String errorString(String("error sending '")+stringData+String("' to POP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + if(waitForResponse&&!getControlData()) + { + mPOPControl.closeSocket(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + return TRUE; +} + +WORD POPClient::getControlData(void) +{ + Block responseStrings; + mPOPControl.receive(responseStrings); + return responseStrings.size(); +} + +BOOL POPClient::isInAckResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,2)==mPOPStatus[Ok])return TRUE; + return FALSE; +} + +BOOL POPClient::isInNakResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,3)==mPOPStatus[Error])return TRUE; + return FALSE; +} + + +// virtuals + +void POPClient::message(const String &messageString) +{ + ::OutputDebugString(messageString+String("\n")); +} + +void POPClient::message(Block &messageStrings) +{ + for(int itemIndex=0;itemIndex +#include + +WORD ServerDialog::performDialog(void) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"ServerDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType ServerDialog::initDialogHandler(CallbackData &someCallbackData) +{ + if(!mServerReg.serverName().isNull())setText(ServerName,mServerReg.serverName()); + return (CallbackData::ReturnType)FALSE; +} + +void ServerDialog::getServerName(void) +{ + String serverName; + + getText(ServerName,serverName); + if(serverName.isNull())return; + mServerReg.serverName(serverName); +} + +CallbackData::ReturnType ServerDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + getServerName(); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(TRUE); + break; + } + return (CallbackData::ReturnType)FALSE; +} diff --git a/pop/old/Srvrdlg.hpp b/pop/old/Srvrdlg.hpp new file mode 100644 index 0000000..a47f18b --- /dev/null +++ b/pop/old/Srvrdlg.hpp @@ -0,0 +1,68 @@ +#ifndef _POP_SERVERDLG_HPP_ +#define _POP_SERVERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif +#ifndef _POP_SERVERREG_HPP_ +#include +#endif + +class String; + +class ServerDialog : private DWindow +{ +public: + ServerDialog(const GUIWindow &parentWindow); + virtual ~ServerDialog(); + WORD performDialog(void); +private: + enum{ServerName=NS_SERVERNAME}; + ServerDialog(const ServerDialog &someServerDialog); + ServerDialog &operator=(const ServerDialog &someServerDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void getServerName(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + ServerReg mServerReg; + HWND mhParent; +}; + +inline +ServerDialog::ServerDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog::ServerDialog(const ServerDialog &someServerDialog) +: mhParent(someServerDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); +} + +inline +ServerDialog::~ServerDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog &ServerDialog::operator=(const ServerDialog &/*someServerDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/pop/old/mail.hpp b/pop/old/mail.hpp new file mode 100644 index 0000000..796fc8a --- /dev/null +++ b/pop/old/mail.hpp @@ -0,0 +1,46 @@ +#ifndef _POP_MAILMESSAGE_HPP_ +#define _POP_MAILMESSAGE_HPP_ +#ifndef _POP_HEADER_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Mail : public Block, public Header +{ +public: + Mail(void); + Mail(Block &msgLines); + virtual ~Mail(); + Mail &operator=(Block &msgLines); +private: +}; + +inline +Mail::Mail(void) +{ +} + +inline +Mail::Mail(Block &msgLines) +: Block(msgLines), Header(msgLines) +{ +} + +inline +Mail::~Mail() +{ +} + +inline +Mail &Mail::operator=(Block &msgLines) +{ + (Block&)*this=msgLines; + (Header&)*this=msgLines; + return *this; +} +#endif diff --git a/pop/old/pop.hpp b/pop/old/pop.hpp new file mode 100644 index 0000000..0f87ca1 --- /dev/null +++ b/pop/old/pop.hpp @@ -0,0 +1,4 @@ +#ifndef _POP_POP_HPP_ +#define _POP_POP_HPP_ +#include +#endif \ No newline at end of file diff --git a/pop/old/popclnt.Cpp b/pop/old/popclnt.Cpp new file mode 100644 index 0000000..192c767 --- /dev/null +++ b/pop/old/popclnt.Cpp @@ -0,0 +1,263 @@ +#include +#include +#include + +POPClient::POPClient(void) +: mSpace(" "), mIsLoggedIn(FALSE) +{ + createCmds(); + createStats(); +} + +POPClient::~POPClient() +{ +} + +BOOL POPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mPOPControl.isConnected())mPOPControl.closeSocket(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}} + else if(!hostEntry.hostByName(hostName)){return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("pop3","tcp")) + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mPOPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(POPPort)); + } + if(!mPOPControl.connect(internetSocketAddress)){message("unable to connect to pop3 server");return FALSE;} + mPOPControl.getSocketName(internetSocketAddress); + if(!mPOPControl.isConnected())return FALSE; + if(!receive(responseLines)||!isInAckResponse(responseLines)) + { + mPOPControl.closeSocket(); + return FALSE; + } + return TRUE; +} + +BOOL POPClient::quit(void) +{ + Block responseLines; + + if(!isConnected())return FALSE; + isLoggedIn(FALSE); + if(!putControlData(mPOPCmds[Quit],FALSE))return FALSE; + receive(responseLines); + mPOPControl.closeSocket(); + return TRUE; +} + +BOOL POPClient::authenticate(const String &user,const String &password) +{ + Block responseLines; + + if(!isConnected())return FALSE; + if(!putControlData(mPOPCmds[User]+String(" ")+user,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!putControlData(mPOPCmds[Pass]+String(" ")+password,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + isLoggedIn(TRUE); + return TRUE; +} + +BOOL POPClient::stat(WORD &messages,WORD &octets) +{ + Block responseLines; + String strItem; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Stat],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + strItem=responseLines[0].betweenString(' ',' '); + messages=::atoi((char*)strItem); + strItem=responseLines[0].betweenString(' ',0); + strItem=strItem.betweenString(' ',0); + octets=::atoi((char*)strItem); + return TRUE; +} + +BOOL POPClient::retrieve(WORD msgNum,Block &messageLines) +{ + Block responseLines; + String strMsg; + + messageLines.remove(); + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Retr]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + receiveLines(messageLines); + return TRUE; +} + +BOOL POPClient::dele(WORD msgNum) +{ + Block responseLines; + String strMsg; + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d",msgNum); + if(!putControlData(mPOPCmds[Dele]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::noop(void) +{ + Block responseLines; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Noop],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::rset(void) +{ + Block responseLines; + + if(!isConnected()||!isLoggedIn())return FALSE; + if(!putControlData(mPOPCmds[Rset],FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + return TRUE; +} + +BOOL POPClient::top(Block &msgLines,WORD msgNum,WORD lineCount) +{ + Block responseLines; + String strMsg; + + if(!isConnected()||!isLoggedIn())return FALSE; + ::sprintf(strMsg,"%d %d",msgNum,lineCount); + if(!putControlData(mPOPCmds[Top]+String(" ")+strMsg,FALSE))return FALSE; + if(!receive(responseLines))return FALSE; + if(!isInAckResponse(responseLines))return FALSE; + if(!receiveLines(msgLines))return FALSE; + return TRUE; +} + +void POPClient::createStats(void) +{ + mPOPStatus.insert(&String("+OK")); + mPOPStatus.insert(&String("-ERR")); +} + +void POPClient::createCmds(void) +{ + mPOPCmds.remove(); + mPOPCmds.insert(&String("QUIT")); + mPOPCmds.insert(&String("USER")); + mPOPCmds.insert(&String("PASS")); + mPOPCmds.insert(&String("STAT")); + mPOPCmds.insert(&String("RETR")); + mPOPCmds.insert(&String("RSET")); + mPOPCmds.insert(&String("DELE")); + mPOPCmds.insert(&String("NOOP")); + mPOPCmds.insert(&String("TOP")); +} + +WORD POPClient::putControlData(const String &stringData,WORD waitForResponse) +{ + if(!mPOPControl.isConnected())return FALSE; + if(!mPOPControl.send(stringData)) + { + mPOPControl.closeSocket(); + String errorString(String("error sending '")+stringData+String("' to POP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + if(waitForResponse&&!getControlData()) + { + mPOPControl.closeSocket(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + return TRUE; +} + +WORD POPClient::getControlData(void) +{ + Block responseStrings; + mPOPControl.receive(responseStrings); + return responseStrings.size(); +} + +BOOL POPClient::isInAckResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,2)==mPOPStatus[Ok])return TRUE; + return FALSE; +} + +BOOL POPClient::isInNakResponse(Block &responseLines) +{ + if(!responseLines.size())return FALSE; + if(responseLines[0].substr(0,3)==mPOPStatus[Error])return TRUE; + return FALSE; +} + +BOOL POPClient::receive(Block &responseLines) +{ + if(!mPOPControl.receive(responseLines))return FALSE; +// message(responseLines); + return TRUE; +} + +BOOL POPClient::receiveLines(Block &receiveStrings) +{ + String stringData; + String seriesItem; + + receiveStrings.remove(); + while(TRUE) + { + if(!mPOPControl.receive(stringData))break; + if(stringData==String("."))break; + if(stringData==String(".."))stringData="."; + receiveStrings.insert(&stringData); + if(!isConnected())break; + } + return TRUE; +} + +// virtuals + +void POPClient::message(const String &messageString) +{ + ::OutputDebugString(messageString+String("\n")); +} + +void POPClient::message(Block &messageStrings) +{ + for(int itemIndex=0;itemIndex +#endif +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class String; + +class POPClient +{ +public: + POPClient(void); + virtual ~POPClient(); + BOOL open(const String &hostName); + void close(void); + BOOL isConnected(void)const; + BOOL isLoggedIn(void)const; + BOOL quit(void); + BOOL authenticate(const String &user,const String &password); + BOOL retrieve(WORD msgNum,Block &messageLines); + BOOL top(Block &messageLines,WORD msgNum,WORD lineCount=10); + BOOL dele(WORD msgNum); + BOOL rset(void); + BOOL noop(void); + BOOL stat(WORD &messages,WORD &octets); +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum {POPPort=110}; + enum POPCmds{Quit,User,Pass,Stat,Retr,Rset,Dele,Noop,Top}; + enum POPStatus{Ok,Error}; + POPClient(const POPClient &somePOPClient); + POPClient &operator=(const POPClient &somePOPClient); + void isLoggedIn(BOOL isLoggedIn); + WORD putControlData(const String &stringData,WORD waitForResponse=TRUE); + BOOL isInNakResponse(Block &responseLines); + BOOL isInAckResponse(Block &responseLines); + BOOL receive(Block &responseLines); + BOOL receiveLines(Block &receiveStrings); + WORD getControlData(void); + void createCmds(void); + void createStats(void); + + Socket mPOPControl; + WSASystem mWSASystem; + Block mPOPCmds; + Block mPOPStatus; + BOOL mIsLoggedIn; + String mSpace; +}; + +inline +BOOL POPClient::isConnected(void)const +{ + return mPOPControl.isConnected(); +} + +inline +BOOL POPClient::isLoggedIn(void)const +{ + return mIsLoggedIn; +} + +inline +void POPClient::isLoggedIn(BOOL isLoggedIn) +{ + mIsLoggedIn=isLoggedIn; +} + +inline +void POPClient::close(void) +{ + mPOPControl.closeSocket(); + isLoggedIn(FALSE); +} +#endif \ No newline at end of file diff --git a/pop/old/popdlg.cpp b/pop/old/popdlg.cpp new file mode 100644 index 0000000..f7b7615 --- /dev/null +++ b/pop/old/popdlg.cpp @@ -0,0 +1,241 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +POPDlg::POPDlg(void) +{ + mInitHandler.setCallback(this,&POPDlg::initHandler); + mDestroyHandler.setCallback(this,&POPDlg::destroyHandler); + mCommandHandler.setCallback(this,&POPDlg::commandHandler); + mCloseHandler.setCallback(this,&POPDlg::closeHandler); + mDlgCodeHandler.setCallback(this,&POPDlg::dlgCodeHandler); + mMailSelChangedHandler.setCallback(this,&POPDlg::mailSelChangedHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); +} + +POPDlg::~POPDlg() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); +} + +POPDlg &POPDlg::operator=(const POPDlg &/*somePOPDlg*/) +{ // private implementation + return *this; +} + +BOOL POPDlg::perform(void) +{ + return ::DialogBoxParam(processInstance(),(LPSTR)"POPCLIENT",(HWND)0,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + + +CallbackData::ReturnType POPDlg::initHandler(CallbackData &/*someCallbackData*/) +{ + mStatusBar=new StatusBar(*this); + mFolderTree=new FolderTree(*this,Rect(xFolder,yFolder,cxFolder,cyFolder)); + mMailTree=new FolderTree(*this,Rect(xMail,yMail,cxMail,cyMail)); + mMailTree->insertHandler(FolderTree::SelChangedHandler,&mMailSelChangedHandler); + + + + + mStatusBar.disposition(PointerDisposition::Delete); +// getMail(); +// retrieveMail(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::dlgCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS; +} + +CallbackData::ReturnType POPDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + break; + case IDCANCEL : + endDialog(FALSE); + break; + case Server : + handleServer(someCallbackData); + break; + case GetMail : + getMail(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType POPDlg::mailSelChangedHandler(CallbackData &someCallbackData) +{ + setDisplay(someCallbackData.loWord()); + return (CallbackData::ReturnType)FALSE; +} + +void POPDlg::handleServer(CallbackData &someCallbackData) +{ + ServerDialog serverDialog(*this); + serverDialog.performDialog(); +} + +void POPDlg::getMail(void) +{ + retrieveMail(); + populateMail(); + populateFolders(); +} + +void POPDlg::retrieveMail(void) +{ + mMailBlock.remove(); + + for(int itemIndex=0;itemIndex<20;itemIndex++) + { + Block mailBlock; + mailBlock.insert(&String("From: Sean Kessler")); + mailBlock.insert(&String(" ")); + mailBlock.insert(&String("Sean Kessler wrote:")); + mailBlock.insert(&String("hello")); + mMailBlock.insert(&Mail(mailBlock)); + } +} + +#if 0 +void POPDlg::retrieveMail(void) +{ + POPClient popClient; + ServerReg serverReg; + WORD messages; + WORD octets; + + mMailBlock.remove(); + if(!handleLoginParams(serverReg)){userMessage("Incorrect Login.");return;} + if(!popClient.open(serverReg.serverName())){userMessage("Connect Failed..");return;} + if(!popClient.authenticate(serverReg.userName(),serverReg.password())) + { + popClient.quit(); + popClient.close(); + userMessage("Authentication Failed."); + return; + } + popClient.stat(messages,octets); + if(!messages){userMessage("No Messages.");return;} + for(int msgIndex=1;msgIndex<=messages;msgIndex++) + { + mMailBlock.insert(&Mail()); + Block &msgLines=mMailBlock[mMailBlock.size()-1]; + Header &mailHeader=mMailBlock[mMailBlock.size()-1]; + popClient.retrieve(msgIndex,msgLines); + mailHeader=msgLines; + if(!msgLines.size())continue; + } + popClient.quit(); + popClient.close(); +} +#endif + +BOOL POPDlg::handleLoginParams(ServerReg &serverReg) +{ + if(serverReg.serverName().isNull()){::MessageBox(*this,(LPSTR)"No Server Defined",(LPSTR)"SERVER ERROR",MB_ICONSTOP);return FALSE;} + if(serverReg.userName().isNull()||serverReg.password().isNull()) + { + String userName; + String password; + LoginDialog loginDialog; + if(!loginDialog.performLogin())return FALSE; + userName=loginDialog.userName(); + password=loginDialog.password(); + serverReg.userName(userName); + serverReg.password(password); + } + if(serverReg.userName().isNull()||serverReg.password().isNull())return FALSE; + return TRUE; +} + +void POPDlg::populateMail(void) +{ + String strMailBox(STRING_MAILBOXNAME); + + mMailTree->setRedraw(FALSE); + mMailTree->remove(); + mMailTree->addRootNode(FolderTree::FolderClosed,strMailBox,makeItemID(NullNode,RootID)); + for(int itemIndex=0;itemIndexaddNode(TreeView::NodeChild,insertItem,strMailBox); + + } + mMailTree->setRedraw(TRUE); +} + +void POPDlg::populateFolders(void) +{ + String strUserFolder(STRING_USERFOLDERNAME); + + mFolderTree->setRedraw(FALSE); + mFolderTree->remove(); + mFolderTree->addRootNode(FolderTree::FolderClosed,strUserFolder,makeItemID(NullNode,RootID)); + mFolderTree->setRedraw(TRUE); +} + +void POPDlg::setDisplay(int itemID) +{ + String lineItem; + Block &mailList=mMailBlock[itemID]; + + for(int itemIndex=0;itemIndexsetText(messageString); +} + +void POPDlg::message(Block &messageStrings) +{ + if(!mStatusBar.isOkay())return; + for(int lineIndex=0;lineIndexsetText(messageStrings[lineIndex]); +} diff --git a/pop/old/popdlg.hpp b/pop/old/popdlg.hpp new file mode 100644 index 0000000..dd303d6 --- /dev/null +++ b/pop/old/popdlg.hpp @@ -0,0 +1,69 @@ +#ifndef _POP_POPDLG_HPP_ +#define _POP_POPDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif + +class StatusBar; +class FolderTree; +class ServerReg; +class Mail; + +class POPDlg : public DWindow +{ +public: + POPDlg(void); + virtual ~POPDlg(); + BOOL perform(void); +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum DlgControls{Server=PC_SERVER,GetMail=PC_GETMAIL,EditControl=PC_EDIT}; + enum FolderCoords{xFolder=5,yFolder=50,cxFolder=235,cyFolder=150}; + enum MailCoords{xMail=245,yMail=50,cxMail=235,cyMail=150}; + enum {RootID=0}; + enum NodeType{NullNode=0x0000,MailNode=0x0001}; + POPDlg &operator=(const POPDlg &someMailDlg); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mailSelChangedHandler(CallbackData &someCallbackData); + + void handleServer(CallbackData &someCallbackData); + void userMessage(const String &message); + void retrieveMail(void); + void populateFolders(void); + void populateMail(void); + void getMail(void); + void setDisplay(int itemID); + BOOL handleLoginParams(ServerReg &serverReg); + LPARAM makeItemID(NodeType nodeType,WORD itemID); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + Callback mDlgCodeHandler; + Callback mMailSelChangedHandler; + SmartPointer mStatusBar; + SmartPointer mFolderTree; + SmartPointer mMailTree; + Block mMailBlock; +}; + + +inline +LPARAM POPDlg::makeItemID(NodeType nodeType,WORD itemID) +{ + return MAKELPARAM(itemID,nodeType); +} +#endif \ No newline at end of file diff --git a/pop/old/srvrreg.hpp b/pop/old/srvrreg.hpp new file mode 100644 index 0000000..357fce3 --- /dev/null +++ b/pop/old/srvrreg.hpp @@ -0,0 +1,142 @@ +#ifndef _POP_SERVERREG_HPP_ +#define _POP_SERVERREG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_DISKINFO_HPP_ +#include +#endif +#ifndef _POP_POP_HPP_ +#include +#endif + +class ServerReg +{ +public: + ServerReg(void); + ServerReg(const ServerReg &someServerReg); + virtual ~ServerReg(); + ServerReg &operator=(const ServerReg &someServerReg); + const String &serverName(void)const; + void serverName(const String &hostName); + const String &userName(void)const; + void userName(const String &userName); + const String &password(void)const; + void password(const String &password); + const String &mailDir(void)const; + void mailDir(const String &mailDirectory); +private: + RegKey mRegKey; + + String mServerName; + String mMailDir; + String mUserName; + String mPassword; + String mRegEntryKey; + String mServerNameKey; + String mMailDirKey; + String mUserNameKey; + String mPasswordKey; +}; + +inline +ServerReg::ServerReg(void) +: mRegKey(RegKey::CurrentUser), mRegEntryKey(STRING_REGENTRYKEY), + mServerNameKey(STRING_SERVERNAMEKEY), mMailDirKey(STRING_MAILDIRKEY), + mUserNameKey(STRING_USERNAMEKEY), mPasswordKey(STRING_PASSWORDKEY) +{ + if(!mRegKey.openKey(mRegEntryKey)) + { + mRegKey.createKey(mRegEntryKey,""); + mRegKey.openKey(mRegEntryKey); + } + mRegKey.queryValue(mMailDirKey,mMailDir); + if(mMailDir.isNull()) + { + DiskInfo diskInfo; + diskInfo.getCurrentDirectory(mMailDir); + mRegKey.setValue(mMailDirKey,mMailDir); + } + mRegKey.queryValue(mServerNameKey,mServerName); + mRegKey.queryValue(mUserNameKey,mUserName); + mRegKey.queryValue(mPasswordKey,mPassword); +} + +inline +ServerReg::ServerReg(const ServerReg &someServerReg) +: mRegKey(RegKey::CurrentUser), mRegEntryKey(STRING_REGENTRYKEY), + mServerNameKey(STRING_SERVERNAMEKEY), mMailDirKey(STRING_MAILDIRKEY), + mUserNameKey(STRING_USERNAMEKEY), mPasswordKey(STRING_PASSWORDKEY) +{ + *this=someServerReg; +} + +inline +ServerReg::~ServerReg() +{ +} + +inline +ServerReg &ServerReg::operator=(const ServerReg &someServerReg) +{ + return *this; +} + +inline +const String &ServerReg::serverName(void)const +{ + return mServerName; +} + +inline +void ServerReg::serverName(const String &serverName) +{ + mServerName=serverName; + mRegKey.setValue(mServerNameKey,mServerName); +} + +inline +const String &ServerReg::mailDir(void)const +{ + return mMailDir; +} + +inline +void ServerReg::mailDir(const String &mailDir) +{ + mMailDir=mailDir; + mRegKey.setValue(mMailDirKey,mMailDir); +} + +inline +const String &ServerReg::userName(void)const +{ + return mUserName; +} + +inline +void ServerReg::userName(const String &userName) +{ + mUserName=userName; + mRegKey.setValue(mUserNameKey,mUserName); +} + +inline +const String &ServerReg::password(void)const +{ + return mPassword; +} + +inline +void ServerReg::password(const String &password) +{ + mPassword=password; + mRegKey.setValue(mPasswordKey,mPassword); +} +#endif \ No newline at end of file diff --git a/printman/ABORTDLG.CPP b/printman/ABORTDLG.CPP new file mode 100644 index 0000000..2f3cbd1 --- /dev/null +++ b/printman/ABORTDLG.CPP @@ -0,0 +1,82 @@ +#include +#include + +AbortDlg::AbortDlg(void) +: mIsDestroyed(FALSE), mIsCancelled(FALSE) +{ +} + +AbortDlg::AbortDlg(const AbortDlg &someAbortDlg) +{ // private implementation + *this=someAbortDlg; +} + +AbortDlg::~AbortDlg() +{ + destroy(); +} + +AbortDlg &AbortDlg::operator=(const AbortDlg &someAbortDlg) +{ // private implementation + return *this; +} + +void AbortDlg::perform(GUIWindow &parentWindow) +{ + mIsDestroyed=FALSE; + mIsCancelled=FALSE; + create(parentWindow); +} + +void AbortDlg::create(GUIWindow &parentWindow) +{ + String buttonName("BUTTON"); + + DialogTemplate dlgTemplate; + DialogItemTemplate cancelButton; + + dlgTemplate.titleText("Printing..."); + dlgTemplate.posRect(Rect(10,73,220,42)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); + + cancelButton.className(buttonName); + cancelButton.titleText("Cancel"); + cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP); + cancelButton.posRect(Rect(85,22,50,14)); + cancelButton.itemID(IDCANCEL); + + dlgTemplate+=cancelButton; + createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog); +} + +WORD AbortDlg::dlgCommand(DWORD commandID,CallbackData &someCallbackData) +{ + switch(commandID) + { + case IDCANCEL : + mIsCancelled=TRUE; + destroy(); + break; + } + return FALSE; +} + +BOOL AbortDlg::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + init(); + return TRUE; +} + +void AbortDlg::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ + mIsDestroyed=TRUE; + return; +} + +// virtuals + +void AbortDlg::init(void) +{ +} diff --git a/printman/ABORTDLG.HPP b/printman/ABORTDLG.HPP new file mode 100644 index 0000000..bd7c38a --- /dev/null +++ b/printman/ABORTDLG.HPP @@ -0,0 +1,57 @@ +#ifndef _PRINTMAN_ABORTDLG_HPP_ +#define _PRINTMAN_ABORTDLG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif + +class AbortDlg : private DynamicDialog +{ +public: + AbortDlg(void); + virtual ~AbortDlg(); + void perform(GUIWindow &parentWindow); + BOOL isDestroyed(void)const; + BOOL isCancelled(void)const; + void destroy(void); + void yieldTask(void); +protected: + virtual void init(void); +private: + AbortDlg(const AbortDlg &AbortDlg); + AbortDlg &operator=(const AbortDlg &AbortDlg); + void create(GUIWindow &parentWindow); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + + BOOL mIsDestroyed; + BOOL mIsCancelled; +}; + +inline +BOOL AbortDlg::isDestroyed(void)const +{ + return mIsDestroyed; +} + +inline +BOOL AbortDlg::isCancelled(void)const +{ + return mIsCancelled; +} + +inline +void AbortDlg::destroy(void) +{ + GUIWindow::destroy(); +} + +inline +void AbortDlg::yieldTask(void) +{ + GUIWindow::yieldTask(); +} +#endif diff --git a/printman/PICKDLG.CPP b/printman/PICKDLG.CPP new file mode 100644 index 0000000..7ca18ef --- /dev/null +++ b/printman/PICKDLG.CPP @@ -0,0 +1,112 @@ +#include +#include + +PickDlg::PickDlg(void) +{ +} + +PickDlg::PickDlg(const PickDlg &somePickDlg) +{ // private implementation + *this=somePickDlg; +} + +PickDlg::~PickDlg() +{ + destroy(); +} + +PickDlg &PickDlg::operator=(const PickDlg &somePickDlg) +{ // private implementation + return *this; +} + +BOOL PickDlg::perform(GUIWindow &parentWindow,Block &printers,String &strPrinter) +{ + mParent=&parentWindow; + mPrinters=printers; + mPrinter=strPrinter; + mCancel=FALSE; + create(parentWindow); + if(!mCancel)strPrinter=mPrinter; + return !mCancel; +} + +void PickDlg::create(GUIWindow &parentWindow) +{ + DialogTemplate dlgTemplate; + DialogItemTemplate comboBox; + DialogItemTemplate okButton; + DialogItemTemplate cancelButton; + + dlgTemplate.titleText("Choose Printer"); + dlgTemplate.posRect(Rect(10,73,269,39)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(WS_VISIBLE|WS_CAPTION|DS_SETFONT|WS_POPUP); // WS_SYSMENU|DS_SETFONT| DS_3DLOOK| WS_SYSMENU| + dlgTemplate.extendedStyle(WS_EX_TOPMOST); + + okButton.className("BUTTON"); + okButton.titleText("&Ok"); + okButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|BS_DEFPUSHBUTTON); + okButton.posRect(Rect(216,3,50,14)); + okButton.itemID(IDOK); + + cancelButton.className("BUTTON"); + cancelButton.titleText("Ca&ncel"); + cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP); + cancelButton.posRect(Rect(216,17,50,14)); + cancelButton.itemID(IDCANCEL); + + comboBox.className("COMBOBOX"); + comboBox.titleText(""); + comboBox.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|CBS_DROPDOWNLIST); + comboBox.posRect(Rect(10,11,199,44)); + comboBox.itemID(ComboBoxID); + + dlgTemplate+=comboBox; + dlgTemplate+=okButton; + dlgTemplate+=cancelButton; + createDialog(parentWindow,dlgTemplate,DynamicDialog::ModalDialog); + parentWindow.enable(TRUE); + parentWindow.top(); +} + +WORD PickDlg::dlgCommand(DWORD commandID,CallbackData &someCallbackData) +{ + switch(commandID) + { + case IDCANCEL : + mCancel=TRUE; + endDialog(false); +// destroy(); + break; + case IDOK : + mCancel=FALSE; + sendMessage(ComboBoxID,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)mPrinter); + endDialog(true); +// destroy(); + break; + } + return FALSE; +} + +BOOL PickDlg::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ +// ::SetParent(*this,*mParent); + for(int index=0;index +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif +#ifndef _PRINTMAN_PRINTER_HPP_ +#include +#endif + +class PickDlg : private DynamicDialog +{ +public: + PickDlg(void); + virtual ~PickDlg(); + BOOL perform(GUIWindow &parentWindow,Block &printers,String &strPrinter); +protected: + virtual void init(void); +private: + enum{ComboBoxID=200}; + PickDlg(const PickDlg &PickDlg); + PickDlg &operator=(const PickDlg &PickDlg); + void create(GUIWindow &parentWindow); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + + String mPrinter; + SmartPointer mParent; + Block mPrinters; + BOOL mCancel; +}; +#endif diff --git a/printman/PRINTER.HPP b/printman/PRINTER.HPP new file mode 100644 index 0000000..7d114cb --- /dev/null +++ b/printman/PRINTER.HPP @@ -0,0 +1,98 @@ +#ifndef _PRINTMAN_PRINTER_HPP_ +#define _PRINTMAN_PRINTER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Printer +{ +public: + Printer(void); + Printer(const Printer &somePrinter); + virtual ~Printer(); + Printer &operator=(const Printer &somePrinter); + BOOL operator==(const Printer &somePrinter); + const String &printerName(void)const; + void printerName(const String &printerName); + const String &driverName(void)const; + void driverName(const String &driverName); + const String &portName(void)const; + void portName(const String &portName); +private: + String mPrinterName; + String mDriverName; + String mPortName; +}; + +inline +Printer::Printer(void) +{ +} + +inline +Printer::Printer(const Printer &somePrinter) +{ + *this=somePrinter; +} + +inline +Printer::~Printer() +{ +} + +inline +Printer &Printer::operator=(const Printer &somePrinter) +{ + printerName(somePrinter.printerName()); + driverName(somePrinter.driverName()); + portName(somePrinter.portName()); + return *this; +} + +inline +BOOL Printer::operator==(const Printer &somePrinter) +{ + return (printerName()==somePrinter.printerName()&& + driverName()==somePrinter.driverName()&& + portName()==somePrinter.portName()); +} + +inline +const String &Printer::printerName(void)const +{ + return mPrinterName; +} + +inline +void Printer::printerName(const String &printerName) +{ + mPrinterName=printerName; +} + +inline +const String &Printer::driverName(void)const +{ + return mDriverName; +} + +inline +void Printer::driverName(const String &driverName) +{ + mDriverName=driverName; +} + +inline +const String &Printer::portName(void)const +{ + return mPortName; +} + +inline +void Printer::portName(const String &portName) +{ + mPortName=portName; +} +#endif \ No newline at end of file diff --git a/printman/PRINTMAN.DSW b/printman/PRINTMAN.DSW new file mode 100644 index 0000000..3966452 --- /dev/null +++ b/printman/PRINTMAN.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "printman"=.\printman.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/printman/PRINTMAN.HPP b/printman/PRINTMAN.HPP new file mode 100644 index 0000000..fc7aa77 --- /dev/null +++ b/printman/PRINTMAN.HPP @@ -0,0 +1,212 @@ +#ifndef _PRINTMAN_PRINTMANAGER_HPP_ +#define _PRINTMAN_PRINMANAGER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_ASSERT_HPP_ +#include +#endif +#ifndef _PRINTMAN_PRINTER_HPP_ +#include +#endif +#ifndef _PRINTMAN_ABORTDLG_HPP_ +#include +#endif + +class GUIWindow; +class Bitmap; +class ResBitmap; +class PureBitmap; +class RegKey; + +class PrintManager +{ +public: + PrintManager(void); + virtual ~PrintManager(); + const String &strDefaultPrinter(void)const; + bool choosePrinter(GUIWindow &parentWindow,String &strPrinter); + bool choosePrinter(GUIWindow &parentWindow,Printer &printer); + bool openPrinter(const Printer &printer,GUIWindow &parentWindow,const String &strPrintDocName); + bool openPrinter(const String &strPrinterName,GUIWindow &parentWindow,const String &strPrintDocName=String()); + bool openPrinter(const String &strPrinterName,const String &strPrintDocName=String()); + void closePrinter(void); + PureDevice &printerDevice(void); + bool startPage(void); + bool endPage(void); + bool endDoc(void); + bool abortDoc(void); + bool printLines(Block &strLines,Font &pageFont,Point xyPoint,bool advancePage=TRUE); + bool printBitmap(Bitmap &bitmap,bool advancePage=true,int width=0,int height=0); + bool printBitmap(ResBitmap &resBitmap,bool advancePage=true,int width=0,int height=0); + bool printBitmap(PureBitmap &pureBitmap,bool advancePage=true,int width=0,int height=0); + bool printBitmap(PureBitmap &pureBitmap,bool advancePage=true,WORD scale=100); + bool printDevice(PureBitmap &pureBitmap,bool advancePage=true); + WORD getCount(void)const; + const Printer &getDefaultPrinter(void)const; + bool getFirstPrinter(Printer &printer); + bool getNextPrinter(Printer &printer); +private: + void scaleImage(float factor,WORD &width,WORD &height)const; + bool getPrinters(RegKey ®Key,const String &strPrinterKey); + bool getPrinters(void); + bool getPrinter(String &strPrinterKey,Printer &printer); + PrintManager(const PrintManager &somePrintmanager); + PrintManager &operator=(const PrintManager &somePrintManager); + bool operator==(const PrintManager &somePrintManager); + bool isInPage(void)const; + void isInPage(bool isInPage); + bool isInDoc(void)const; + void isInDoc(bool isInDoc); + bool startDoc(const String &strPrintDocName); + bool createAbortDlg(void); + static BOOL CALLBACK abortProc(HDC hDC,int nCode); + + SmartPointer mParentWindow; + SmartPointer mAbortDlg; + Block mPrinters; + Printer mDefaultPrinter; + String mPrinterKey; + PureDevice mPrinterDevice; + WORD mIndexPrinter; + bool mIsInDoc; + bool mIsInPage; +}; + +inline +PrintManager &PrintManager::operator=(const PrintManager &/*somePrintManager*/) +{ // private implementation + return *this; +} + +inline +bool PrintManager::operator==(const PrintManager &somePrintManager) +{ // private implementation + return FALSE; +} + +inline +WORD PrintManager::getCount(void)const +{ + return mPrinters.size(); +} + +inline +const Printer &PrintManager::getDefaultPrinter(void)const +{ + return mDefaultPrinter; +} + +inline +bool PrintManager::getFirstPrinter(Printer &printer) +{ + if(!mPrinters.size())return FALSE; + printer=mPrinters[(mIndexPrinter=0)]; + return TRUE; +} + +inline +bool PrintManager::getNextPrinter(Printer &printer) +{ + if(++mIndexPrinter>=mPrinters.size())return FALSE; + printer=mPrinters[mIndexPrinter]; + return TRUE; +} + +inline +void PrintManager::closePrinter(void) +{ + if(isInPage())endPage(); + if(isInDoc())endDoc(); + mPrinterDevice.destroyDevice(); +} + +inline +bool PrintManager::startPage(void) +{ + int returnCode; + if(!isInDoc()||!mPrinterDevice.isOkay())return FALSE; + if(isInPage())endPage(); + returnCode=::StartPage(mPrinterDevice); + if(returnCode>0)isInPage(TRUE); + return isInPage(); +} + +inline +bool PrintManager::endPage(void) +{ + bool returnCode(FALSE); + + if(!isInPage()||!isInDoc()||!mPrinterDevice.isOkay())return returnCode; + returnCode=::EndPage(mPrinterDevice)?TRUE:FALSE; + isInPage(FALSE); + return returnCode; +} + +inline +bool PrintManager::endDoc(void) +{ + bool returnCode(FALSE); + + if(!isInDoc()||!mPrinterDevice.isOkay())return returnCode; + if(isInPage())endPage(); + if(mAbortDlg.isOkay()){mAbortDlg->destroy();mAbortDlg.destroy();} + returnCode=::EndDoc(mPrinterDevice)?TRUE:FALSE; + isInDoc(FALSE); + return returnCode; +} + +inline +bool PrintManager::abortDoc(void) +{ + bool returnCode(FALSE); + + if(!isInDoc()||!mPrinterDevice.isOkay())return returnCode; + returnCode=::AbortDoc(mPrinterDevice)?TRUE:FALSE; + isInPage(FALSE); + return returnCode; +} + +inline +PureDevice &PrintManager::printerDevice(void) +{ + assert(FALSE!=mPrinterDevice.isOkay()); + return mPrinterDevice; +} + +inline +bool PrintManager::isInDoc(void)const +{ + return mIsInDoc; +} + +inline +void PrintManager::isInDoc(bool isInDoc) +{ + mIsInDoc=isInDoc; +} + +inline +bool PrintManager::isInPage(void)const +{ + return mIsInPage; +} + +inline +void PrintManager::isInPage(bool isInPage) +{ + mIsInPage=isInPage; +} +#endif \ No newline at end of file diff --git a/printman/PRINTMAN.PLG b/printman/PRINTMAN.PLG new file mode 100644 index 0000000..2a665dc --- /dev/null +++ b/printman/PRINTMAN.PLG @@ -0,0 +1,25 @@ + + +
+

Build Log

+

+--------------------Configuration: printman - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP9B.tmp" with contents +[ +/nologo /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /Fp"msvcobj/Printman.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"D:\work\printman\Printman.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP9B.tmp" +

Output Window

+Compiling... +Printman.cpp + + + +

Results

+Printman.obj - 0 error(s), 0 warning(s) +
+ + diff --git a/printman/Printman.001 b/printman/Printman.001 new file mode 100644 index 0000000..ba1f985 --- /dev/null +++ b/printman/Printman.001 @@ -0,0 +1,90 @@ +# Microsoft Developer Studio Project File - Name="printman" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=printman - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "printman.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "printman.mak" CFG="printman - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "printman - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "printman - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "printman - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "printman - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\printman.lib" + +!ENDIF + +# Begin Target + +# Name "printman - Win32 Release" +# Name "printman - Win32 Debug" +# Begin Source File + +SOURCE=.\Abortdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\pickdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Printman.cpp +# End Source File +# End Target +# End Project diff --git a/printman/Printman.cpp b/printman/Printman.cpp new file mode 100644 index 0000000..a97c397 --- /dev/null +++ b/printman/Printman.cpp @@ -0,0 +1,306 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +PrintManager::PrintManager(void) +: mIndexPrinter(0), mIsInDoc(FALSE), mIsInPage(FALSE), + mPrinterKey("System\\CurrentControlSet\\Control\\Print\\Printers") +{ + getPrinters(); +} + +PrintManager::PrintManager(const PrintManager &somePrintManager) +{ // private implementation + *this=somePrintManager; +} + +PrintManager::~PrintManager() +{ + closePrinter(); +} + +bool PrintManager::choosePrinter(GUIWindow &parentWindow,String &strPrinter) +{ + PickDlg pickDlg; + strPrinter=mDefaultPrinter.printerName(); + return pickDlg.perform(parentWindow,mPrinters,strPrinter); +} + +bool PrintManager::choosePrinter(GUIWindow &parentWindow,Printer &printer) +{ + PRINTDLG printDlg; + GlobalData devNames; + DEVNAMES *pDevNames=0; + + ::memset(&printDlg,0,sizeof(PRINTDLG)); + printDlg.lStructSize=sizeof(PRINTDLG); + if(!PrintDlg(&printDlg))return false; + pDevNames=(DEVNAMES*)::GlobalLock(printDlg.hDevNames); + printer.printerName((char*)((char*)pDevNames+pDevNames->wDriverOffset)); + printer.driverName((char*)((char*)pDevNames+pDevNames->wDeviceOffset)); + printer.portName((char*)((char*)pDevNames+pDevNames->wOutputOffset)); + ::GlobalUnlock(printDlg.hDevNames); + return true; +} + +bool PrintManager::getPrinters(void) +{ + mPrinters.remove(); + RegKey regKey(RegKey::CurrentConfig); + if(regKey.openKey(mPrinterKey)) + { + getPrinters(regKey,mPrinterKey); + regKey.closeKey(); + } + if(regKey.openKey(RegKey::LocalMachine,mPrinterKey)) + { + getPrinters(regKey,mPrinterKey); + regKey.closeKey(); + } + if(mPrinters.size()&&mDefaultPrinter.printerName().isNull()) + { + mDefaultPrinter=mPrinters[0]; + } + return mPrinters.size()?true:false; +} + +bool PrintManager::getPrinters(RegKey ®Key,const String &strPrinterKey) +{ + String strDefaultPrinter; + Printer printer; + String strPrinter; + int enumKey(0); + + regKey.queryValue("Default",strDefaultPrinter); + if(getPrinter(strPrinterKey+String("\\")+strDefaultPrinter,printer))mDefaultPrinter=printer; + while(true) + { + if(!regKey.enumKey(enumKey++,strPrinter))break; + if(getPrinter(strPrinterKey+String("\\")+strPrinter,printer))mPrinters.insert(&printer); + } + return true; +} + +bool PrintManager::getPrinter(String &strPrinterKey,Printer &printer) +{ + RegKey mchKey(RegKey::LocalMachine); + String strPrinterNameKey("Name"); + String strPrinterDriverKey("Printer Driver"); + String strPrinterPortKey("Port"); + String strQuery; + + if(!mchKey.openKey(strPrinterKey))return false; + mchKey.queryValue(strPrinterNameKey,strQuery); + printer.printerName(strQuery); + mchKey.queryValue(strPrinterDriverKey,strQuery); + printer.driverName(strQuery); + mchKey.queryValue(strPrinterPortKey,strQuery); + printer.portName(strQuery); + mchKey.closeKey(); + return true; +} + +bool PrintManager::openPrinter(const Printer &printer,GUIWindow &parentWindow,const String &strPrintDocName) +{ + mParentWindow=&parentWindow; + WinVersionInfo winVersion; + + closePrinter(); + mPrinterDevice=::CreateDC(printer.printerName(),printer.driverName(),printer.portName(),0); + mPrinterDevice.disposition(PureDevice::DeleteDC); + if(!mPrinterDevice.isOkay())return false; + startDoc(strPrintDocName); + ::SetAbortProc(mPrinterDevice,&abortProc); + return true; +} + +bool PrintManager::openPrinter(const String &strPrinterName,GUIWindow &parentWindow,const String &strPrintDocName) +{ + mParentWindow=&parentWindow; + return openPrinter(strPrinterName,strPrintDocName); +} + +bool PrintManager::openPrinter(const String &strPrinterName,const String &strPrintDocName) +{ + Printer printer; + WinVersionInfo winVersion; + int index; + + closePrinter(); + if(strPrinterName==mDefaultPrinter.printerName())printer=mDefaultPrinter; + else for(index=0;index bitmapBits; + WORD scaleWidth; + WORD scaleHeight; + + if(!pureBitmap.isOkay())return false; + if(!isInDoc()||!mPrinterDevice.isOkay())return false; + if(!(::GetDeviceCaps(mPrinterDevice,RASTERCAPS)&RC_BITBLT))return false; + if(advancePage&&isInPage())endPage(); + if(!isInPage()&&!startPage())return false; + purePalette.systemPalette(); + pureBitmap.getBitmapInfo(bmInfo); + if(bmInfo.bitCount()<=8) + { + purePalette.systemPalette(); + bmInfo=purePalette; + } + pureBitmap.getBitmapBits(bitmapBits,true); + bmInfo.width(pureBitmap.width()); + bmInfo.height(pureBitmap.height()); + if(bmInfo.bitCount()<=8)mPrinterDevice.select(purePalette.getPalette(),true); + scaleWidth=pureBitmap.width(); + scaleHeight=pureBitmap.height(); + scaleImage(scale,scaleWidth,scaleHeight); + ::StretchDIBits(mPrinterDevice,0,0,scaleWidth,scaleHeight,0,0,pureBitmap.width(),pureBitmap.height(),(BYTE*)&bitmapBits[0],(BITMAPINFO*)bmInfo,DIB_RGB_COLORS,SRCCOPY); + if(advancePage)endPage(); + if(bmInfo.bitCount()<=8)mPrinterDevice.select(purePalette.getPalette(),false); + return true; +} + +void PrintManager::scaleImage(float factor,WORD &width,WORD &height)const +{ + float aspectRatio=((float)width/(float)height)-.05; + + factor/=100.00; + width=(float)width*factor; + height=(float)width/aspectRatio; +} + +bool PrintManager::printLines(Block &strLines,Font &pageFont,Point xyPoint,bool advancePage) +{ + Point startPoint(xyPoint); + SIZE sizeData; + + if(!isInDoc()||!mPrinterDevice.isOkay())return false; + if(advancePage&&isInPage())endPage(); + if(!isInPage())startPage(); + mPrinterDevice.select((GDIObj)pageFont,true); + for(int index=0;indexmPrinterDevice.verticalResolution()+5){endPage();startPage();xyPoint=startPoint;} + mPrinterDevice.getTextExtentPoint32(strLine,&sizeData); + mPrinterDevice.textOut(xyPoint.x(),xyPoint.y(),strLine); + xyPoint.y(xyPoint.y()+sizeData.cy+5); + if(mAbortDlg.isOkay()) + { + mAbortDlg->yieldTask(); + if(mAbortDlg->isCancelled()){abortDoc();return false;} + } + } + endPage(); + return true; +} + +bool PrintManager::createAbortDlg(void) +{ + if(!mParentWindow.isOkay())return true; + if(mAbortDlg.isOkay()){mAbortDlg->destroy();mAbortDlg.destroy();} + mAbortDlg=::new AbortDlg; + mAbortDlg.disposition(PointerDisposition::Delete); + mAbortDlg->perform(*mParentWindow); + return true; +} + +BOOL CALLBACK PrintManager::abortProc(HDC hDC,int nCode) +{ + MSG msg; + if(!nCode)return true; + while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + return false; +} diff --git a/printman/Printman.dsp b/printman/Printman.dsp new file mode 100644 index 0000000..72edf5e --- /dev/null +++ b/printman/Printman.dsp @@ -0,0 +1,96 @@ +# Microsoft Developer Studio Project File - Name="printman" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=printman - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Printman.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Printman.mak" CFG="printman - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "printman - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "printman - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "printman - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "printman - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /D "_DEBUG" /D "STRICT" /D "__FLAT__" /D "WIN32" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\printman.lib" + +!ENDIF + +# Begin Target + +# Name "printman - Win32 Release" +# Name "printman - Win32 Debug" +# Begin Source File + +SOURCE=.\Abortdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\pickdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Printman.cpp +# End Source File +# End Target +# End Project diff --git a/printman/Printman.mak b/printman/Printman.mak new file mode 100644 index 0000000..a418218 --- /dev/null +++ b/printman/Printman.mak @@ -0,0 +1,373 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=printman - Win32 Debug +!MESSAGE No configuration specified. Defaulting to printman - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "printman - Win32 Release" && "$(CFG)" !=\ + "printman - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "printman.mak" CFG="printman - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "printman - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "printman - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "printman - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "printman - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\printman.lib" + +CLEAN : + -@erase "$(INTDIR)\Abortdlg.obj" + -@erase "$(INTDIR)\Pickdlg.obj" + -@erase "$(INTDIR)\Printman.obj" + -@erase "$(OUTDIR)\printman.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/printman.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/printman.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/printman.lib" +LIB32_OBJS= \ + "$(INTDIR)\Abortdlg.obj" \ + "$(INTDIR)\Pickdlg.obj" \ + "$(INTDIR)\Printman.obj" + +"$(OUTDIR)\printman.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "printman - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\printman.lib" + +CLEAN : + -@erase "$(INTDIR)\Abortdlg.obj" + -@erase "$(INTDIR)\Pickdlg.obj" + -@erase "$(INTDIR)\Printman.obj" + -@erase "..\exe\printman.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/printman.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/printman.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\printman.lib" +LIB32_FLAGS=/nologo /out:"..\exe\printman.lib" +LIB32_OBJS= \ + "$(INTDIR)\Abortdlg.obj" \ + "$(INTDIR)\Pickdlg.obj" \ + "$(INTDIR)\Printman.obj" + +"..\exe\printman.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "printman - Win32 Release" +# Name "printman - Win32 Debug" + +!IF "$(CFG)" == "printman - Win32 Release" + +!ELSEIF "$(CFG)" == "printman - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Printman.cpp + +!IF "$(CFG)" == "printman - Win32 Release" + +DEP_CPP_PRINT=\ + {$(INCLUDE)}"\.\Abortdlg.hpp"\ + {$(INCLUDE)}"\.\Pickdlg.hpp"\ + {$(INCLUDE)}"\.\Printman.hpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Resbmp.hpp"\ + {$(INCLUDE)}"\Common\Resdata.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Printman.obj" : $(SOURCE) $(DEP_CPP_PRINT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "printman - Win32 Debug" + +DEP_CPP_PRINT=\ + {$(INCLUDE)}"\.\Abortdlg.hpp"\ + {$(INCLUDE)}"\.\Pickdlg.hpp"\ + {$(INCLUDE)}"\.\Printer.hpp"\ + {$(INCLUDE)}"\.\Printman.hpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Bitmap.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Bmdata.hpp"\ + {$(INCLUDE)}"\Common\Bminfo.hpp"\ + {$(INCLUDE)}"\Common\Boverlay.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Palentry.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Purepal.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Resbmp.hpp"\ + {$(INCLUDE)}"\Common\Resdata.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Rgbquad.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Printman.obj" : $(SOURCE) $(DEP_CPP_PRINT) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Pickdlg.cpp +DEP_CPP_PICKD=\ + {$(INCLUDE)}"\.\Pickdlg.hpp"\ + {$(INCLUDE)}"\.\Printer.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\common\keydata.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Pickdlg.obj" : $(SOURCE) $(DEP_CPP_PICKD) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Abortdlg.cpp +DEP_CPP_ABORT=\ + {$(INCLUDE)}"\.\Abortdlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\common\keydata.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgitem.hpp"\ + {$(INCLUDE)}"\Dialog\Dlgtmpl.hpp"\ + {$(INCLUDE)}"\Dialog\Dyndlg.hpp"\ + + +"$(INTDIR)\Abortdlg.obj" : $(SOURCE) $(DEP_CPP_ABORT) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/printman/Release/Printman.lib b/printman/Release/Printman.lib new file mode 100644 index 0000000..f0fffe1 Binary files /dev/null and b/printman/Release/Printman.lib differ diff --git a/printman/Release/vc60.idb b/printman/Release/vc60.idb new file mode 100644 index 0000000..c1d87ac Binary files /dev/null and b/printman/Release/vc60.idb differ diff --git a/printman/SCRAPS.TXT b/printman/SCRAPS.TXT new file mode 100644 index 0000000..12a7716 --- /dev/null +++ b/printman/SCRAPS.TXT @@ -0,0 +1,96 @@ +BOOL PrintManager::printBitmap(PureBitmap &pureBitmap,BOOL advancePage,int width,int height) +{ + BitmapInfo bmInfo; + PurePalette systemPalette; + GlobalData bitmapBits; + WORD bmWidth; + WORD bmHeight; + + if(!pureBitmap.isOkay())return FALSE; + if(!isInDoc()||!mPrinterDevice.isOkay())return FALSE; + if(!(::GetDeviceCaps(mPrinterDevice,RASTERCAPS)&RC_BITBLT))return FALSE; + if(advancePage&&isInPage())endPage(); + if(!isInPage())startPage(); + systemPalette.systemPalette(); + bmWidth=pureBitmap.width(); + bmHeight=pureBitmap.height(); + pureBitmap.bitmapBits(bmWidth,bmHeight,bitmapBits); + if(!width)width=bmWidth; + if(!height)height=bmHeight; + bmInfo.width(bmWidth); + bmInfo.height(bmHeight); + bmInfo=systemPalette; + ::StretchDIBits(mPrinterDevice,0,0,width,height,0,0,bmInfo.width(),bmInfo.height(),(BYTE*)&bitmapBits[0],(BITMAPINFO*)bmInfo,DIB_RGB_COLORS,SRCCOPY); + if(advancePage)endPage(); + return TRUE; +} + + + +/* +BOOL PrintManager::getPrinters(void) +{ + String strPrinterKey("System\\CurrentControlSet\\Control\\Print\\Printers"); + String strDefaultPrinter; + RegKey cfgKey(RegKey::CurrentConfig); + Printer printer; + String strPrinter; + int enumKey(0); + + mPrinters.remove(); + if(!cfgKey.openKey(strPrinterKey))return FALSE; + cfgKey.queryValue("Default",strDefaultPrinter); + if(getPrinter(strPrinterKey+String("\\")+strDefaultPrinter,printer))mDefaultPrinter=printer; + while(TRUE) + { + if(!cfgKey.enumKey(enumKey++,strPrinter))break; + if(getPrinter(strPrinterKey+String("\\")+strPrinter,printer))mPrinters.insert(&printer); + } + cfgKey.closeKey(); + return TRUE; +} +*/ + + + ::OutputDebugString(String(String("Driver:")+printer.printerName()+String("\n")).str()); + ::OutputDebugString(String(String("Device:")+printer.driverName()+String("\n")).str()); + ::OutputDebugString(String(String("Output:")+printer.portName()+String("\n")).str()); + ::OutputDebugString(String(String("DevMode:")+String("")+String("\n")).str()); + + +// printDlg.Flags=PD_RETURNIC; + getDefaultDevNames(devNames); +// printer name (driver offset) "winspool" +// drivername (device offset) "IO//" +// portname (output offset) "LPT1:" + + printDlg.hDevNames=devNames.getHandle(); + + +void PrintManager::getDefaultDevNames(GlobalData &devNames) +{ + String printerName; + String driverName; + String portName; + DEVNAMES *pDevNames; + char *pChrDevNames; + + printerName=mDefaultPrinter.printerName(); + driverName=mDefaultPrinter.driverName(); + portName=mDefaultPrinter.portName(); + devNames.size(sizeof(DEVNAMES)+printerName.length()+1+driverName.length()+1+portName.length()+1,GMEM_MOVEABLE); + devNames.setZero(); + pDevNames=(DEVNAMES*)&devNames[0]; + pDevNames->wDriverOffset=sizeof(DEVNAMES); + pDevNames->wDeviceOffset=sizeof(DEVNAMES)+printerName.length()+1; + pDevNames->wOutputOffset=sizeof(DEVNAMES)+printerName.length()+1+driverName.length()+1; + pDevNames->wDefault=true; + pChrDevNames=((char*)pDevNames)+pDevNames->wDriverOffset; + ::strcpy(pChrDevNames,printerName.str()); + pChrDevNames=((char*)pDevNames)+pDevNames->wDeviceOffset; + ::strcpy(pChrDevNames,driverName.str()); + pChrDevNames=((char*)pDevNames)+pDevNames->wOutputOffset; + ::strcpy(pChrDevNames,portName.str()); +} + + diff --git a/printman/printman.mdp b/printman/printman.mdp new file mode 100644 index 0000000..b505461 Binary files /dev/null and b/printman/printman.mdp differ diff --git a/printman/printman.opt b/printman/printman.opt new file mode 100644 index 0000000..59c893d Binary files /dev/null and b/printman/printman.opt differ diff --git a/proto/Debug/Historic.java b/proto/Debug/Historic.java new file mode 100644 index 0000000..72ee348 --- /dev/null +++ b/proto/Debug/Historic.java @@ -0,0 +1,951 @@ +package zbi.risk.server.vhi.mapped + + +public class Historic +{ + private Timestamp tradeDate; + private String tradeDateTxt; + private String portfolio; + private String subPortfolio; + private String ticker; + private String tickerDesc; + private String uticker; + private String instrument; + private float mktCap; + private float wgtAve; + private float volume; + private float contractSize; + private String hedgeIndex; + private String hedgeSector; + private String area; + private String areaSector; + private float [close]; + private float yClose; + private float utickerClose; + private float yUtickerClose; + private float delta; + private float yDelta; + private int daysExpire; + private float strikePrice; + private float hedgeBeta; + private float areaBeta; + private float sectorBeta; + private float groupBeta; + private float qty; + private float yQty; + private float qtyChange; + private float hedgeClose; + private float hedgePerc; + private float areaClose; + private float areaPerc; + private float sectorClose; + private float sectorPerc; + private float mktValue; + private float yMktValue; + private float pnl; + private float exposure; + private float yExposure; + private float hbExposure; + private float yHbExposure; + private float abExposure; + private float yAbExposure; + private float sbExposure; + private float ySbExposure; + private float areaPnlAmt; + private float sectorPnlAmt; + private float pnlPerc; + private float priceChange; + private float priceChangePerc; + private float priceChangeAmt; + private float sectorAlphaPerc; + private float groupAlphaPerc; + private float areaAlphaPerc; + private float sectorAlphaAmt; + private float groupAlphaAmt; + private float areaAlphaAmt; + private float abReturnAmt; + private float abReturnPerc; + private float intradayPerc; + private float intradayAmt; + private float optionalityAmt; + private float optionalityPerc; + private String currency; + private float baseClose; + private float yBaseClose; + private float fxPerc; + private float fxAmt; + private float fxRate; + private float yFxRate; + private float altIndexReturnPerc; + private float altIndexReturnAmt; + private float indexBetaAdjPerc; + private float indexBetaAdjAmt; + private float vwap; + private float vwapPnl; + private float hedgeAlphaAmt; + private String exposureView; + private String marketView; + private String callPut; + private String [month]; + private boolean private; + private boolean ipo; + private float ratio; + private String source; + private Timestamp goAround; + private float adh; + private float aac; + private float azap; + private boolean exported; + private float hedgeAlphaPerc; + private float alphaGoAround; + private float alphaReal; + private float alphaUnreal; + private float pnlReal; + private float pnlUnreal; + private float cashFlow; + private float betaCashFlow; + private Timestamp lastTradeDate; + private float lastTradeQty; + private float enterpriseValue; + private String associate; + public Timestamp getTradeDate() + { + return tradeDate; + } + public void setTradeDate(Timestamp tradeDate) + { + this.tradeDate=tradeDate; + } + public String getTradeDateTxt() + { + return tradeDateTxt; + } + public void setTradeDateTxt(String tradeDateTxt) + { + this.tradeDateTxt=tradeDateTxt; + } + public String getPortfolio() + { + return portfolio; + } + public void setPortfolio(String portfolio) + { + this.portfolio=portfolio; + } + public String getSubPortfolio() + { + return subPortfolio; + } + public void setSubPortfolio(String subPortfolio) + { + this.subPortfolio=subPortfolio; + } + public String getTicker() + { + return ticker; + } + public void setTicker(String ticker) + { + this.ticker=ticker; + } + public String getTickerDesc() + { + return tickerDesc; + } + public void setTickerDesc(String tickerDesc) + { + this.tickerDesc=tickerDesc; + } + public String getUticker() + { + return uticker; + } + public void setUticker(String uticker) + { + this.uticker=uticker; + } + public String getInstrument() + { + return instrument; + } + public void setInstrument(String instrument) + { + this.instrument=instrument; + } + public float getMktCap() + { + return mktCap; + } + public void setMktCap(float mktCap) + { + this.mktCap=mktCap; + } + public float getWgtAve() + { + return wgtAve; + } + public void setWgtAve(float wgtAve) + { + this.wgtAve=wgtAve; + } + public float getVolume() + { + return volume; + } + public void setVolume(float volume) + { + this.volume=volume; + } + public float getContractSize() + { + return contractSize; + } + public void setContractSize(float contractSize) + { + this.contractSize=contractSize; + } + public String getHedgeIndex() + { + return hedgeIndex; + } + public void setHedgeIndex(String hedgeIndex) + { + this.hedgeIndex=hedgeIndex; + } + public String getHedgeSector() + { + return hedgeSector; + } + public void setHedgeSector(String hedgeSector) + { + this.hedgeSector=hedgeSector; + } + public String getArea() + { + return area; + } + public void setArea(String area) + { + this.area=area; + } + public String getAreaSector() + { + return areaSector; + } + public void setAreaSector(String areaSector) + { + this.areaSector=areaSector; + } + public float get[close]() + { + return [close]; + } + public void set[close](float [close]) + { + this.[close]=[close]; + } + public float getYClose() + { + return yClose; + } + public void setYClose(float yClose) + { + this.yClose=yClose; + } + public float getUtickerClose() + { + return utickerClose; + } + public void setUtickerClose(float utickerClose) + { + this.utickerClose=utickerClose; + } + public float getYUtickerClose() + { + return yUtickerClose; + } + public void setYUtickerClose(float yUtickerClose) + { + this.yUtickerClose=yUtickerClose; + } + public float getDelta() + { + return delta; + } + public void setDelta(float delta) + { + this.delta=delta; + } + public float getYDelta() + { + return yDelta; + } + public void setYDelta(float yDelta) + { + this.yDelta=yDelta; + } + public int getDaysExpire() + { + return daysExpire; + } + public void setDaysExpire(int daysExpire) + { + this.daysExpire=daysExpire; + } + public float getStrikePrice() + { + return strikePrice; + } + public void setStrikePrice(float strikePrice) + { + this.strikePrice=strikePrice; + } + public float getHedgeBeta() + { + return hedgeBeta; + } + public void setHedgeBeta(float hedgeBeta) + { + this.hedgeBeta=hedgeBeta; + } + public float getAreaBeta() + { + return areaBeta; + } + public void setAreaBeta(float areaBeta) + { + this.areaBeta=areaBeta; + } + public float getSectorBeta() + { + return sectorBeta; + } + public void setSectorBeta(float sectorBeta) + { + this.sectorBeta=sectorBeta; + } + public float getGroupBeta() + { + return groupBeta; + } + public void setGroupBeta(float groupBeta) + { + this.groupBeta=groupBeta; + } + public float getQty() + { + return qty; + } + public void setQty(float qty) + { + this.qty=qty; + } + public float getYQty() + { + return yQty; + } + public void setYQty(float yQty) + { + this.yQty=yQty; + } + public float getQtyChange() + { + return qtyChange; + } + public void setQtyChange(float qtyChange) + { + this.qtyChange=qtyChange; + } + public float getHedgeClose() + { + return hedgeClose; + } + public void setHedgeClose(float hedgeClose) + { + this.hedgeClose=hedgeClose; + } + public float getHedgePerc() + { + return hedgePerc; + } + public void setHedgePerc(float hedgePerc) + { + this.hedgePerc=hedgePerc; + } + public float getAreaClose() + { + return areaClose; + } + public void setAreaClose(float areaClose) + { + this.areaClose=areaClose; + } + public float getAreaPerc() + { + return areaPerc; + } + public void setAreaPerc(float areaPerc) + { + this.areaPerc=areaPerc; + } + public float getSectorClose() + { + return sectorClose; + } + public void setSectorClose(float sectorClose) + { + this.sectorClose=sectorClose; + } + public float getSectorPerc() + { + return sectorPerc; + } + public void setSectorPerc(float sectorPerc) + { + this.sectorPerc=sectorPerc; + } + public float getMktValue() + { + return mktValue; + } + public void setMktValue(float mktValue) + { + this.mktValue=mktValue; + } + public float getYMktValue() + { + return yMktValue; + } + public void setYMktValue(float yMktValue) + { + this.yMktValue=yMktValue; + } + public float getPnl() + { + return pnl; + } + public void setPnl(float pnl) + { + this.pnl=pnl; + } + public float getExposure() + { + return exposure; + } + public void setExposure(float exposure) + { + this.exposure=exposure; + } + public float getYExposure() + { + return yExposure; + } + public void setYExposure(float yExposure) + { + this.yExposure=yExposure; + } + public float getHbExposure() + { + return hbExposure; + } + public void setHbExposure(float hbExposure) + { + this.hbExposure=hbExposure; + } + public float getYHbExposure() + { + return yHbExposure; + } + public void setYHbExposure(float yHbExposure) + { + this.yHbExposure=yHbExposure; + } + public float getAbExposure() + { + return abExposure; + } + public void setAbExposure(float abExposure) + { + this.abExposure=abExposure; + } + public float getYAbExposure() + { + return yAbExposure; + } + public void setYAbExposure(float yAbExposure) + { + this.yAbExposure=yAbExposure; + } + public float getSbExposure() + { + return sbExposure; + } + public void setSbExposure(float sbExposure) + { + this.sbExposure=sbExposure; + } + public float getYSbExposure() + { + return ySbExposure; + } + public void setYSbExposure(float ySbExposure) + { + this.ySbExposure=ySbExposure; + } + public float getAreaPnlAmt() + { + return areaPnlAmt; + } + public void setAreaPnlAmt(float areaPnlAmt) + { + this.areaPnlAmt=areaPnlAmt; + } + public float getSectorPnlAmt() + { + return sectorPnlAmt; + } + public void setSectorPnlAmt(float sectorPnlAmt) + { + this.sectorPnlAmt=sectorPnlAmt; + } + public float getPnlPerc() + { + return pnlPerc; + } + public void setPnlPerc(float pnlPerc) + { + this.pnlPerc=pnlPerc; + } + public float getPriceChange() + { + return priceChange; + } + public void setPriceChange(float priceChange) + { + this.priceChange=priceChange; + } + public float getPriceChangePerc() + { + return priceChangePerc; + } + public void setPriceChangePerc(float priceChangePerc) + { + this.priceChangePerc=priceChangePerc; + } + public float getPriceChangeAmt() + { + return priceChangeAmt; + } + public void setPriceChangeAmt(float priceChangeAmt) + { + this.priceChangeAmt=priceChangeAmt; + } + public float getSectorAlphaPerc() + { + return sectorAlphaPerc; + } + public void setSectorAlphaPerc(float sectorAlphaPerc) + { + this.sectorAlphaPerc=sectorAlphaPerc; + } + public float getGroupAlphaPerc() + { + return groupAlphaPerc; + } + public void setGroupAlphaPerc(float groupAlphaPerc) + { + this.groupAlphaPerc=groupAlphaPerc; + } + public float getAreaAlphaPerc() + { + return areaAlphaPerc; + } + public void setAreaAlphaPerc(float areaAlphaPerc) + { + this.areaAlphaPerc=areaAlphaPerc; + } + public float getSectorAlphaAmt() + { + return sectorAlphaAmt; + } + public void setSectorAlphaAmt(float sectorAlphaAmt) + { + this.sectorAlphaAmt=sectorAlphaAmt; + } + public float getGroupAlphaAmt() + { + return groupAlphaAmt; + } + public void setGroupAlphaAmt(float groupAlphaAmt) + { + this.groupAlphaAmt=groupAlphaAmt; + } + public float getAreaAlphaAmt() + { + return areaAlphaAmt; + } + public void setAreaAlphaAmt(float areaAlphaAmt) + { + this.areaAlphaAmt=areaAlphaAmt; + } + public float getAbReturnAmt() + { + return abReturnAmt; + } + public void setAbReturnAmt(float abReturnAmt) + { + this.abReturnAmt=abReturnAmt; + } + public float getAbReturnPerc() + { + return abReturnPerc; + } + public void setAbReturnPerc(float abReturnPerc) + { + this.abReturnPerc=abReturnPerc; + } + public float getIntradayPerc() + { + return intradayPerc; + } + public void setIntradayPerc(float intradayPerc) + { + this.intradayPerc=intradayPerc; + } + public float getIntradayAmt() + { + return intradayAmt; + } + public void setIntradayAmt(float intradayAmt) + { + this.intradayAmt=intradayAmt; + } + public float getOptionalityAmt() + { + return optionalityAmt; + } + public void setOptionalityAmt(float optionalityAmt) + { + this.optionalityAmt=optionalityAmt; + } + public float getOptionalityPerc() + { + return optionalityPerc; + } + public void setOptionalityPerc(float optionalityPerc) + { + this.optionalityPerc=optionalityPerc; + } + public String getCurrency() + { + return currency; + } + public void setCurrency(String currency) + { + this.currency=currency; + } + public float getBaseClose() + { + return baseClose; + } + public void setBaseClose(float baseClose) + { + this.baseClose=baseClose; + } + public float getYBaseClose() + { + return yBaseClose; + } + public void setYBaseClose(float yBaseClose) + { + this.yBaseClose=yBaseClose; + } + public float getFxPerc() + { + return fxPerc; + } + public void setFxPerc(float fxPerc) + { + this.fxPerc=fxPerc; + } + public float getFxAmt() + { + return fxAmt; + } + public void setFxAmt(float fxAmt) + { + this.fxAmt=fxAmt; + } + public float getFxRate() + { + return fxRate; + } + public void setFxRate(float fxRate) + { + this.fxRate=fxRate; + } + public float getYFxRate() + { + return yFxRate; + } + public void setYFxRate(float yFxRate) + { + this.yFxRate=yFxRate; + } + public float getAltIndexReturnPerc() + { + return altIndexReturnPerc; + } + public void setAltIndexReturnPerc(float altIndexReturnPerc) + { + this.altIndexReturnPerc=altIndexReturnPerc; + } + public float getAltIndexReturnAmt() + { + return altIndexReturnAmt; + } + public void setAltIndexReturnAmt(float altIndexReturnAmt) + { + this.altIndexReturnAmt=altIndexReturnAmt; + } + public float getIndexBetaAdjPerc() + { + return indexBetaAdjPerc; + } + public void setIndexBetaAdjPerc(float indexBetaAdjPerc) + { + this.indexBetaAdjPerc=indexBetaAdjPerc; + } + public float getIndexBetaAdjAmt() + { + return indexBetaAdjAmt; + } + public void setIndexBetaAdjAmt(float indexBetaAdjAmt) + { + this.indexBetaAdjAmt=indexBetaAdjAmt; + } + public float getVwap() + { + return vwap; + } + public void setVwap(float vwap) + { + this.vwap=vwap; + } + public float getVwapPnl() + { + return vwapPnl; + } + public void setVwapPnl(float vwapPnl) + { + this.vwapPnl=vwapPnl; + } + public float getHedgeAlphaAmt() + { + return hedgeAlphaAmt; + } + public void setHedgeAlphaAmt(float hedgeAlphaAmt) + { + this.hedgeAlphaAmt=hedgeAlphaAmt; + } + public String getExposureView() + { + return exposureView; + } + public void setExposureView(String exposureView) + { + this.exposureView=exposureView; + } + public String getMarketView() + { + return marketView; + } + public void setMarketView(String marketView) + { + this.marketView=marketView; + } + public String getCallPut() + { + return callPut; + } + public void setCallPut(String callPut) + { + this.callPut=callPut; + } + public String get[month]() + { + return [month]; + } + public void set[month](String [month]) + { + this.[month]=[month]; + } + public boolean getPrivate() + { + return private; + } + public void setPrivate(boolean private) + { + this.private=private; + } + public boolean getIpo() + { + return ipo; + } + public void setIpo(boolean ipo) + { + this.ipo=ipo; + } + public float getRatio() + { + return ratio; + } + public void setRatio(float ratio) + { + this.ratio=ratio; + } + public String getSource() + { + return source; + } + public void setSource(String source) + { + this.source=source; + } + public Timestamp getGoAround() + { + return goAround; + } + public void setGoAround(Timestamp goAround) + { + this.goAround=goAround; + } + public float getAdh() + { + return adh; + } + public void setAdh(float adh) + { + this.adh=adh; + } + public float getAac() + { + return aac; + } + public void setAac(float aac) + { + this.aac=aac; + } + public float getAzap() + { + return azap; + } + public void setAzap(float azap) + { + this.azap=azap; + } + public boolean getExported() + { + return exported; + } + public void setExported(boolean exported) + { + this.exported=exported; + } + public float getHedgeAlphaPerc() + { + return hedgeAlphaPerc; + } + public void setHedgeAlphaPerc(float hedgeAlphaPerc) + { + this.hedgeAlphaPerc=hedgeAlphaPerc; + } + public float getAlphaGoAround() + { + return alphaGoAround; + } + public void setAlphaGoAround(float alphaGoAround) + { + this.alphaGoAround=alphaGoAround; + } + public float getAlphaReal() + { + return alphaReal; + } + public void setAlphaReal(float alphaReal) + { + this.alphaReal=alphaReal; + } + public float getAlphaUnreal() + { + return alphaUnreal; + } + public void setAlphaUnreal(float alphaUnreal) + { + this.alphaUnreal=alphaUnreal; + } + public float getPnlReal() + { + return pnlReal; + } + public void setPnlReal(float pnlReal) + { + this.pnlReal=pnlReal; + } + public float getPnlUnreal() + { + return pnlUnreal; + } + public void setPnlUnreal(float pnlUnreal) + { + this.pnlUnreal=pnlUnreal; + } + public float getCashFlow() + { + return cashFlow; + } + public void setCashFlow(float cashFlow) + { + this.cashFlow=cashFlow; + } + public float getBetaCashFlow() + { + return betaCashFlow; + } + public void setBetaCashFlow(float betaCashFlow) + { + this.betaCashFlow=betaCashFlow; + } + public Timestamp getLastTradeDate() + { + return lastTradeDate; + } + public void setLastTradeDate(Timestamp lastTradeDate) + { + this.lastTradeDate=lastTradeDate; + } + public float getLastTradeQty() + { + return lastTradeQty; + } + public void setLastTradeQty(float lastTradeQty) + { + this.lastTradeQty=lastTradeQty; + } + public float getEnterpriseValue() + { + return enterpriseValue; + } + public void setEnterpriseValue(float enterpriseValue) + { + this.enterpriseValue=enterpriseValue; + } + public String getAssociate() + { + return associate; + } + public void setAssociate(String associate) + { + this.associate=associate; + } +}; diff --git a/proto/Debug/HistoricRS.java b/proto/Debug/HistoricRS.java new file mode 100644 index 0000000..ad8e7d0 --- /dev/null +++ b/proto/Debug/HistoricRS.java @@ -0,0 +1,114 @@ +package zbi.risk.server.vhi.mapped + + +public void processResult() +{ + Historic foo; + ResultSet rs; +// fill in the blanks + foo.setTradeDate(rs.getTimestamp("trade_date")); + foo.setTradeDateTxt(rs.getString("trade_date_txt")); + foo.setPortfolio(rs.getString("portfolio")); + foo.setSubPortfolio(rs.getString("sub_portfolio")); + foo.setTicker(rs.getString("ticker")); + foo.setTickerDesc(rs.getString("ticker_desc")); + foo.setUticker(rs.getString("uticker")); + foo.setInstrument(rs.getString("instrument")); + foo.setMktCap(rs.getFloat("mkt_cap")); + foo.setWgtAve(rs.getFloat("wgt_ave")); + foo.setVolume(rs.getFloat("volume")); + foo.setContractSize(rs.getFloat("contract_size")); + foo.setHedgeIndex(rs.getString("hedge_index")); + foo.setHedgeSector(rs.getString("hedge_sector")); + foo.setArea(rs.getString("area")); + foo.setAreaSector(rs.getString("area_sector")); + foo.set[close](rs.getFloat("[close]")); + foo.setYClose(rs.getFloat("y_close")); + foo.setUtickerClose(rs.getFloat("uticker_close")); + foo.setYUtickerClose(rs.getFloat("y_uticker_close")); + foo.setDelta(rs.getFloat("delta")); + foo.setYDelta(rs.getFloat("y_delta")); + foo.setDaysExpire(rs.getInt("days_expire")); + foo.setStrikePrice(rs.getFloat("strike_price")); + foo.setHedgeBeta(rs.getFloat("hedge_beta")); + foo.setAreaBeta(rs.getFloat("area_beta")); + foo.setSectorBeta(rs.getFloat("sector_beta")); + foo.setGroupBeta(rs.getFloat("group_beta")); + foo.setQty(rs.getFloat("qty")); + foo.setYQty(rs.getFloat("y_qty")); + foo.setQtyChange(rs.getFloat("qty_change")); + foo.setHedgeClose(rs.getFloat("hedge_close")); + foo.setHedgePerc(rs.getFloat("hedge_perc")); + foo.setAreaClose(rs.getFloat("area_close")); + foo.setAreaPerc(rs.getFloat("area_perc")); + foo.setSectorClose(rs.getFloat("sector_close")); + foo.setSectorPerc(rs.getFloat("sector_perc")); + foo.setMktValue(rs.getFloat("mkt_value")); + foo.setYMktValue(rs.getFloat("y_mkt_value")); + foo.setPnl(rs.getFloat("pnl")); + foo.setExposure(rs.getFloat("exposure")); + foo.setYExposure(rs.getFloat("y_exposure")); + foo.setHbExposure(rs.getFloat("hb_exposure")); + foo.setYHbExposure(rs.getFloat("y_hb_exposure")); + foo.setAbExposure(rs.getFloat("ab_exposure")); + foo.setYAbExposure(rs.getFloat("y_ab_exposure")); + foo.setSbExposure(rs.getFloat("sb_exposure")); + foo.setYSbExposure(rs.getFloat("y_sb_exposure")); + foo.setAreaPnlAmt(rs.getFloat("area_pnl_amt")); + foo.setSectorPnlAmt(rs.getFloat("sector_pnl_amt")); + foo.setPnlPerc(rs.getFloat("pnl_perc")); + foo.setPriceChange(rs.getFloat("price_change")); + foo.setPriceChangePerc(rs.getFloat("price_change_perc")); + foo.setPriceChangeAmt(rs.getFloat("price_change_amt")); + foo.setSectorAlphaPerc(rs.getFloat("sector_alpha_perc")); + foo.setGroupAlphaPerc(rs.getFloat("group_alpha_perc")); + foo.setAreaAlphaPerc(rs.getFloat("area_alpha_perc")); + foo.setSectorAlphaAmt(rs.getFloat("sector_alpha_amt")); + foo.setGroupAlphaAmt(rs.getFloat("group_alpha_amt")); + foo.setAreaAlphaAmt(rs.getFloat("area_alpha_amt")); + foo.setAbReturnAmt(rs.getFloat("ab_return_amt")); + foo.setAbReturnPerc(rs.getFloat("ab_return_perc")); + foo.setIntradayPerc(rs.getFloat("intraday_perc")); + foo.setIntradayAmt(rs.getFloat("intraday_amt")); + foo.setOptionalityAmt(rs.getFloat("optionality_amt")); + foo.setOptionalityPerc(rs.getFloat("optionality_perc")); + foo.setCurrency(rs.getString("currency")); + foo.setBaseClose(rs.getFloat("base_close")); + foo.setYBaseClose(rs.getFloat("y_base_close")); + foo.setFxPerc(rs.getFloat("fx_perc")); + foo.setFxAmt(rs.getFloat("fx_amt")); + foo.setFxRate(rs.getFloat("fx_rate")); + foo.setYFxRate(rs.getFloat("y_fx_rate")); + foo.setAltIndexReturnPerc(rs.getFloat("alt_index_return_perc")); + foo.setAltIndexReturnAmt(rs.getFloat("alt_index_return_amt")); + foo.setIndexBetaAdjPerc(rs.getFloat("index_beta_adj_perc")); + foo.setIndexBetaAdjAmt(rs.getFloat("index_beta_adj_amt")); + foo.setVwap(rs.getFloat("vwap")); + foo.setVwapPnl(rs.getFloat("vwap_pnl")); + foo.setHedgeAlphaAmt(rs.getFloat("hedge_alpha_amt")); + foo.setExposureView(rs.getString("exposure_view")); + foo.setMarketView(rs.getString("market_view")); + foo.setCallPut(rs.getString("call_put")); + foo.set[month](rs.getString("[month]")); + foo.setPrivate(rs.getBoolean("private")); + foo.setIpo(rs.getBoolean("ipo")); + foo.setRatio(rs.getFloat("ratio")); + foo.setSource(rs.getString("source")); + foo.setGoAround(rs.getTimestamp("go_around")); + foo.setAdh(rs.getFloat("adh")); + foo.setAac(rs.getFloat("aac")); + foo.setAzap(rs.getFloat("azap")); + foo.setExported(rs.getBoolean("exported")); + foo.setHedgeAlphaPerc(rs.getFloat("hedge_alpha_perc")); + foo.setAlphaGoAround(rs.getFloat("alpha_go_around")); + foo.setAlphaReal(rs.getFloat("alpha_real")); + foo.setAlphaUnreal(rs.getFloat("alpha_unreal")); + foo.setPnlReal(rs.getFloat("pnl_real")); + foo.setPnlUnreal(rs.getFloat("pnl_unreal")); + foo.setCashFlow(rs.getFloat("cash_flow")); + foo.setBetaCashFlow(rs.getFloat("beta_cash_flow")); + foo.setLastTradeDate(rs.getTimestamp("last_trade_date")); + foo.setLastTradeQty(rs.getFloat("last_trade_qty")); + foo.setEnterpriseValue(rs.getFloat("enterprise_value")); + foo.setAssociate(rs.getString("associate")); +} diff --git a/proto/Debug/HookDLL.dll b/proto/Debug/HookDLL.dll new file mode 100644 index 0000000..3f173fa Binary files /dev/null and b/proto/Debug/HookDLL.dll differ diff --git a/proto/Debug/HookDLL.exp b/proto/Debug/HookDLL.exp new file mode 100644 index 0000000..765caa1 Binary files /dev/null and b/proto/Debug/HookDLL.exp differ diff --git a/proto/Debug/HookDLL.lib b/proto/Debug/HookDLL.lib new file mode 100644 index 0000000..2185eff Binary files /dev/null and b/proto/Debug/HookDLL.lib differ diff --git a/proto/Debug/HookDLL.pdb b/proto/Debug/HookDLL.pdb new file mode 100644 index 0000000..9913445 Binary files /dev/null and b/proto/Debug/HookDLL.pdb differ diff --git a/proto/Debug/Mail.java b/proto/Debug/Mail.java new file mode 100644 index 0000000..970a0cb --- /dev/null +++ b/proto/Debug/Mail.java @@ -0,0 +1,114 @@ +package ZBI.Risk.Server.Value.Mapped + + +public class Mail +{ + private string returnPath; + private string subject; + private string receivedFrom; + private string messageID; + private string mailTo; + private string mailFrom; + private string server; + private int messageLength; + private DateTime date; + private string contentType; + private string contentTransferEncoding; + private int mailID; + public string getReturnPath() + { + return returnPath; + } + public void setReturnPath(string returnPath) + { + this.returnPath=returnPath; + } + public string getSubject() + { + return subject; + } + public void setSubject(string subject) + { + this.subject=subject; + } + public string getReceivedFrom() + { + return receivedFrom; + } + public void setReceivedFrom(string receivedFrom) + { + this.receivedFrom=receivedFrom; + } + public string getMessageID() + { + return messageID; + } + public void setMessageID(string messageID) + { + this.messageID=messageID; + } + public string getMailTo() + { + return mailTo; + } + public void setMailTo(string mailTo) + { + this.mailTo=mailTo; + } + public string getMailFrom() + { + return mailFrom; + } + public void setMailFrom(string mailFrom) + { + this.mailFrom=mailFrom; + } + public string getServer() + { + return server; + } + public void setServer(string server) + { + this.server=server; + } + public int getMessageLength() + { + return messageLength; + } + public void setMessageLength(int messageLength) + { + this.messageLength=messageLength; + } + public DateTime getDate() + { + return date; + } + public void setDate(DateTime date) + { + this.date=date; + } + public string getContentType() + { + return contentType; + } + public void setContentType(string contentType) + { + this.contentType=contentType; + } + public string getContentTransferEncoding() + { + return contentTransferEncoding; + } + public void setContentTransferEncoding(string contentTransferEncoding) + { + this.contentTransferEncoding=contentTransferEncoding; + } + public int getMailID() + { + return mailID; + } + public void setMailID(int mailID) + { + this.mailID=mailID; + } +}; diff --git a/proto/Debug/MailRS.java b/proto/Debug/MailRS.java new file mode 100644 index 0000000..4cba89a --- /dev/null +++ b/proto/Debug/MailRS.java @@ -0,0 +1,21 @@ +package ZBI.Risk.Server.Value.Mapped + + +public void processResult() +{ + Mail mail; + ResultSet rs; +// fill in the blanks + mail.setReturnPath(rs.getString("returnPath")); + mail.setSubject(rs.getString("subject")); + mail.setReceivedFrom(rs.getString("receivedFrom")); + mail.setMessageID(rs.getString("messageID")); + mail.setMailTo(rs.getString("mailTo")); + mail.setMailFrom(rs.getString("mailFrom")); + mail.setServer(rs.getString("server")); + mail.setMessageLength(rs.getInt("messageLength")); + mail.setDate(rs.getDateTime("date")); + mail.setContentType(rs.getString("contentType")); + mail.setContentTransferEncoding(rs.getString("contentTransferEncoding")); + mail.setMailID(rs.getInt("mailID")); +} diff --git a/proto/Debug/cbtdll.dll b/proto/Debug/cbtdll.dll new file mode 100644 index 0000000..b60ec3d Binary files /dev/null and b/proto/Debug/cbtdll.dll differ diff --git a/proto/Debug/cbtdll.exp b/proto/Debug/cbtdll.exp new file mode 100644 index 0000000..a7e4acc Binary files /dev/null and b/proto/Debug/cbtdll.exp differ diff --git a/proto/Debug/cbtdll.lib b/proto/Debug/cbtdll.lib new file mode 100644 index 0000000..3c0583e Binary files /dev/null and b/proto/Debug/cbtdll.lib differ diff --git a/proto/Debug/cbtdll.map b/proto/Debug/cbtdll.map new file mode 100644 index 0000000..d4c2096 --- /dev/null +++ b/proto/Debug/cbtdll.map @@ -0,0 +1,1566 @@ + cbtdll + + Timestamp is 3ddacf24 (Tue Nov 19 18:54:12 2002) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 0002f304H .text CODE + 0001:0002f310 00001aa1H .text$x CODE + 0002:00000000 0000234bH .rdata DATA + 0002:00002350 00000344H .rdata$r DATA + 0002:00002698 00000e8dH .xdata$x DATA + 0002:00003530 0000016eH .edata DATA + 0003:00000000 00000104H .CRT$XCA DATA + 0003:00000104 00000109H .CRT$XCU DATA + 0003:00000210 00000104H .CRT$XCZ DATA + 0003:00000314 00000104H .CRT$XIA DATA + 0003:00000418 0000010eH .CRT$XIC DATA + 0003:00000528 00000104H .CRT$XIY DATA + 0003:0000062c 00000104H .CRT$XIZ DATA + 0003:00000730 00000104H .CRT$XPA DATA + 0003:00000834 00000104H .CRT$XPX DATA + 0003:00000938 00000104H .CRT$XPZ DATA + 0003:00000a3c 00000104H .CRT$XTA DATA + 0003:00000b40 00000104H .CRT$XTB DATA + 0003:00000c44 00000104H .CRT$XTZ DATA + 0003:00000d50 0000484eH .data DATA + 0003:000055a0 00001c24H .bss DATA + 0004:00000000 0000003cH .idata$2 DATA + 0004:0000003c 00000014H .idata$3 DATA + 0004:00000050 0000028cH .idata$4 DATA + 0004:000002dc 0000028cH .idata$5 DATA + 0004:00000568 000009a3H .idata$6 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0001:000008a0 ??1Mutex@@UAE@XZ 100018a0 f i dllmain.obj + 0001:00000920 ??1String@@UAE@XZ 10001920 f i dllmain.obj + 0001:00000960 ??_EString@@UAEPAXI@Z 10001960 f i dllmain.obj + 0001:00000960 ??_GString@@UAEPAXI@Z 10001960 f i dllmain.obj + 0001:000009b0 ?removeData@String@@AAEXXZ 100019b0 f i dllmain.obj + 0001:00000a20 ??_GMutex@@UAEPAXI@Z 10001a20 f i dllmain.obj + 0001:00000a20 ??_EMutex@@UAEPAXI@Z 10001a20 f i dllmain.obj + 0001:00000a70 ??0String@@QAE@XZ 10001a70 f i dllmain.obj + 0001:00000ad0 ??BString@@QBEPADXZ 10001ad0 f i dllmain.obj + 0001:00000af0 ?reserve@String@@QAEHIG@Z 10001af0 f i dllmain.obj + 0001:00000bb0 ?str@String@@QAEPADXZ 10001bb0 f i dllmain.obj + 0001:00000bce _GetModuleHandleA@4 10001bce f kernel32:KERNEL32.dll + 0001:00000bd4 _SetWindowsHookExA@16 10001bd4 f user32:USER32.dll + 0001:00000bda _UnhookWindowsHookEx@4 10001bda f user32:USER32.dll + 0001:00000be0 _CallNextHookEx@16 10001be0 f user32:USER32.dll + 0001:00000be6 _GetWindowTextA@12 10001be6 f user32:USER32.dll + 0001:00000bf0 ??0File@@QAE@XZ 10001bf0 f mscommon:File.obj + 0001:00000c54 ??0File@@QAE@VString@@0@Z 10001c54 f mscommon:File.obj + 0001:00000d16 ??0File@@QAE@ABV0@@Z 10001d16 f mscommon:File.obj + 0001:00000d8c ??1File@@UAE@XZ 10001d8c f mscommon:File.obj + 0001:00000def ??4File@@QAEAAV0@ABV0@@Z 10001def f mscommon:File.obj + 0001:00000e6e ??8File@@QAEHABV0@@Z 10001e6e f mscommon:File.obj + 0001:00000e93 ?open@File@@QAEHVString@@0@Z 10001e93 f mscommon:File.obj + 0001:00000f99 ?close@File@@QAEHXZ 10001f99 f mscommon:File.obj + 0001:00000fcf ?pathFileName@File@@QBEABVString@@XZ 10001fcf f mscommon:File.obj + 0001:00000fe0 ?access@File@@QBEABVString@@XZ 10001fe0 f mscommon:File.obj + 0001:00000ff1 ?isOkay@File@@QBEHXZ 10001ff1 f mscommon:File.obj + 0001:0000100a ?write@File@@QAEHPAXK@Z 1000200a f mscommon:File.obj + 0001:00001059 ?write@File@@QAEKE@Z 10002059 f mscommon:File.obj + 0001:00001074 ?write@File@@QAEKG@Z 10002074 f mscommon:File.obj + 0001:0000108f ?write@File@@QAEKK@Z 1000208f f mscommon:File.obj + 0001:000010aa ?write@File@@QAEKH@Z 100020aa f mscommon:File.obj + 0001:000010c5 ?write@File@@QAEKN@Z 100020c5 f mscommon:File.obj + 0001:000010e0 ?write@File@@QAEKPBXK@Z 100020e0 f mscommon:File.obj + 0001:000010fd ?writeLine@File@@QAEHABVString@@@Z 100020fd f mscommon:File.obj + 0001:00001182 ?flush@File@@QAE_NXZ 10002182 f mscommon:File.obj + 0001:000011ae ?tell@File@@QBEKXZ 100021ae f mscommon:File.obj + 0001:000011e9 ?eof@File@@QBEHXZ 100021e9 f mscommon:File.obj + 0001:00001210 ?rewind@File@@QAEHXZ 10002210 f mscommon:File.obj + 0001:0000123f ?seek@File@@QAEHJW4SeekMethod@1@@Z 1000223f f mscommon:File.obj + 0001:00001281 ?read@File@@QAEKAAH@Z 10002281 f mscommon:File.obj + 0001:0000129c ?read@File@@QAEKAAN@Z 1000229c f mscommon:File.obj + 0001:000012b7 ?read@File@@QAEKPAXH@Z 100022b7 f mscommon:File.obj + 0001:000012f9 ?read@File@@QAEKAAE@Z 100022f9 f mscommon:File.obj + 0001:00001314 ?read@File@@QAEKAAG@Z 10002314 f mscommon:File.obj + 0001:0000132f ?read@File@@QAEKAAK@Z 1000232f f mscommon:File.obj + 0001:0000134a ?read@File@@QAEKPADGH@Z 1000234a f mscommon:File.obj + 0001:000013c7 ?readLine@File@@QAEKAAVString@@@Z 100023c7 f mscommon:File.obj + 0001:00001590 ??_GFile@@UAEPAXI@Z 10002590 f i mscommon:File.obj + 0001:00001590 ??_EFile@@UAEPAXI@Z 10002590 f i mscommon:File.obj + 0001:000015c0 ??8String@@QBEHABV0@@Z 100025c0 f i mscommon:File.obj + 0001:00001620 ?isNull@String@@QBEHXZ 10002620 f i mscommon:File.obj + 0001:00001650 ?length@String@@QBEFXZ 10002650 f i mscommon:File.obj + 0001:00001690 ??0String@@QAE@PBD@Z 10002690 f mscommon:String.obj + 0001:0000175c ??0String@@QAE@ABV0@@Z 1000275c f mscommon:String.obj + 0001:000017d9 ??4String@@QAEAAV0@ABV0@@Z 100027d9 f mscommon:String.obj + 0001:00001883 ??4String@@QAEHPBD@Z 10002883 f mscommon:String.obj + 0001:00001906 ??YString@@QAEXD@Z 10002906 f mscommon:String.obj + 0001:0000199d ??YString@@QAEHABV0@@Z 1000299d f mscommon:String.obj + 0001:00001acd ??YString@@QAEHPBD@Z 10002acd f mscommon:String.obj + 0001:00001bef ??HString@@QBE?AV0@ABV0@@Z 10002bef f mscommon:String.obj + 0001:00001c66 ?token@String@@QAEHPBD@Z 10002c66 f mscommon:String.obj + 0001:00001ca6 ?strchr@String@@QBEHD@Z 10002ca6 f mscommon:String.obj + 0001:00001cee ?strpos@String@@QBEHPBD@Z 10002cee f mscommon:String.obj + 0001:00001d35 ?strncmp@String@@QBEHPBD@Z 10002d35 f mscommon:String.obj + 0001:00001da0 ?upper@String@@QAEXXZ 10002da0 f mscommon:String.obj + 0001:00001dea ?lower@String@@QAEXXZ 10002dea f mscommon:String.obj + 0001:00001e34 ?betweenString@String@@QBE?AV1@DD@Z 10002e34 f mscommon:String.obj + 0001:000020fb ?makeBlock@String@@QBEGAAV?$Block@VString@@@@ABV1@@Z 100030fb f mscommon:String.obj + 0001:0000231c ?extractDigits@String@@QBE?AV1@XZ 1000331c f mscommon:String.obj + 0001:0000248c ?extractAlpha@String@@QBE?AV1@XZ 1000348c f mscommon:String.obj + 0001:000025fc ?expand@String@@QAEXXZ 100035fc f mscommon:String.obj + 0001:0000266f ?hex@String@@QBEHXZ 1000366f f mscommon:String.obj + 0001:000029da ?spaceTerm@String@@QAEXXZ 100039da f mscommon:String.obj + 0001:00002a4b ?trimRight@String@@QAEAAV1@XZ 10003a4b f mscommon:String.obj + 0001:00002ac7 ?trimLeft@String@@QAEAAV1@XZ 10003ac7 f mscommon:String.obj + 0001:00002b9b ?removeTokens@String@@QAEXV1@@Z 10003b9b f mscommon:String.obj + 0001:00002ce8 ?replaceToken@String@@QAEXEE@Z 10003ce8 f mscommon:String.obj + 0001:00002deb ?length@String@@QAEXF@Z 10003deb f mscommon:String.obj + 0001:00002ec1 ?convert@String@@QAEXNPBD@Z 10003ec1 f mscommon:String.obj + 0001:00002f00 ?convert@String@@QAEXHPBD@Z 10003f00 f mscommon:String.obj + 0001:00002f3b ?convert@String@@QAEXJPBD@Z 10003f3b f mscommon:String.obj + 0001:00002f76 ?remove@String@@QAEGG@Z 10003f76 f mscommon:String.obj + 0001:0000311f ?substr@String@@QBE?AV1@GG@Z 1000411f f mscommon:String.obj + 0001:0000327e ?insert@String@@QAEGABV1@G@Z 1000427e f mscommon:String.obj + 0001:000034e3 ?insert@String@@QAEGPADG@Z 100044e3 f mscommon:String.obj + 0001:00003749 ?shiftRight@String@@AAEXAAV1@GGGG@Z 10004749 f mscommon:String.obj + 0001:000037de ?toInt@String@@QBEHXZ 100047de f mscommon:String.obj + 0001:0000380a ?toShort@String@@QBEFXZ 1000480a f mscommon:String.obj + 0001:00003837 ?toFloat@String@@QBEMXZ 10004837 f mscommon:String.obj + 0001:0000386c ?toDouble@String@@QBENXZ 1000486c f mscommon:String.obj + 0001:0000389c ?toLong@String@@QBEJXZ 1000489c f mscommon:String.obj + 0001:000038c8 ?fromInt@String@@QAEAAV1@H@Z 100048c8 f mscommon:String.obj + 0001:000038ff ?fromShort@String@@QAEAAV1@F@Z 100048ff f mscommon:String.obj + 0001:00003937 ?fromFloat@String@@QAEAAV1@M@Z 10004937 f mscommon:String.obj + 0001:00003973 ?fromDouble@String@@QAEAAV1@N@Z 10004973 f mscommon:String.obj + 0001:000039ae ?fromLong@String@@QAEAAV1@J@Z 100049ae f mscommon:String.obj + 0001:000039e5 ?fromBool@String@@QAEAAV1@_N@Z 100049e5 f mscommon:String.obj + 0001:00003a1f ??5@YGAAVistream@@AAV0@AAVString@@@Z 10004a1f f mscommon:String.obj + 0001:00003aa9 ??6@YGAAVostream@@AAV0@ABVString@@@Z 10004aa9 f mscommon:String.obj + 0001:00003ac1 ??H@YG?AVString@@PBDABV0@@Z 10004ac1 f mscommon:String.obj + 0001:00003b40 ?lengthBytes@String@@QBEKXZ 10004b40 f i mscommon:String.obj + 0001:00003b60 ??0String@@QAE@D@Z 10004b60 f i mscommon:String.obj + 0001:00003bb0 ?strstr@String@@QBEHPBD@Z 10004bb0 f i mscommon:String.obj + 0001:00003be0 ?substr@String@@QBE?AV1@G@Z 10004be0 f i mscommon:String.obj + 0001:00003c20 ?str@String@@QBEPBDXZ 10004c20 f i mscommon:String.obj + 0001:00003c40 ??Bios@@QBEPAXXZ 10004c40 f i mscommon:String.obj + 0001:00003c60 ?size@?$Block@VString@@@@QBEJXZ 10004c60 f i mscommon:String.obj + 0001:00003c80 ?insert@?$Block@VString@@@@QAEXPBVString@@@Z 10004c80 f i mscommon:String.obj + 0001:00003e40 ?remove@?$Block@VString@@@@QAEXXZ 10004e40 f i mscommon:String.obj + 0001:00003ef0 ?next@?$Container@VString@@@@QAEXPAV1@@Z 10004ef0 f i mscommon:String.obj + 0001:00003f10 ?next@?$Container@VString@@@@QAEPAV1@XZ 10004f10 f i mscommon:String.obj + 0001:00003f30 ?prev@?$Container@VString@@@@QAEXPAV1@@Z 10004f30 f i mscommon:String.obj + 0001:00003f50 ??0?$Container@VString@@@@AAE@XZ 10004f50 f i mscommon:String.obj + 0001:00003f90 ??_G?$Container@VString@@@@EAEPAXI@Z 10004f90 f i mscommon:String.obj + 0001:00003f90 ??_E?$Container@VString@@@@EAEPAXI@Z 10004f90 f i mscommon:String.obj + 0001:00003fc0 ??1?$Container@VString@@@@EAE@XZ 10004fc0 f i mscommon:String.obj + 0001:00004010 ?isInSymbols@SymbolTable@@QAEGD@Z 10005010 f mscommon:Macro.obj + 0001:00004060 ??0Macro@@QAE@XZ 10005060 f mscommon:Macro.obj + 0001:000040c2 ??1Macro@@QAE@XZ 100050c2 f mscommon:Macro.obj + 0001:0000411c ?processEmbeddedMacro@Macro@@QAEXAAVString@@@Z 1000511c f mscommon:Macro.obj + 0001:0000419e ?expandEmbeddedMacro@Macro@@AAEXXZ 1000519e f mscommon:Macro.obj + 0001:000044a7 ?extractString@Macro@@AAEXAAVString@@@Z 100054a7 f mscommon:Macro.obj + 0001:00004576 ?expect@Macro@@AAEGD@Z 10005576 f mscommon:Macro.obj + 0001:000045e4 ?locateFirstEnvironmentString@Macro@@AAE?AVString@@AAV?$Block@VString@@@@@Z 100055e4 f mscommon:Macro.obj + 0001:00004706 ?expandLiteral@Macro@@ABEGAAVString@@@Z 10005706 f mscommon:Macro.obj + 0001:000047ee ?expandFunction@Macro@@ABEGAAVString@@@Z 100057ee f mscommon:Macro.obj + 0001:00004ae0 ??0SymbolTable@@QAE@XZ 10005ae0 f i mscommon:Macro.obj + 0001:00004b50 ??1SymbolTable@@QAE@XZ 10005b50 f i mscommon:Macro.obj + 0001:00004b70 ?pushSymbol@SymbolTable@@QAEXD@Z 10005b70 f i mscommon:Macro.obj + 0001:00004bb0 ?popSymbol@SymbolTable@@QAEXH@Z 10005bb0 f i mscommon:Macro.obj + 0001:00004be0 ??0SystemTime@@QAE@XZ 10005be0 f i mscommon:Macro.obj + 0001:00004c00 ??_ESystemTime@@UAEPAXI@Z 10005c00 f i mscommon:Macro.obj + 0001:00004c00 ??_GSystemTime@@UAEPAXI@Z 10005c00 f i mscommon:Macro.obj + 0001:00004c30 ??1SystemTime@@UAE@XZ 10005c30 f i mscommon:Macro.obj + 0001:00004c50 ?refresh@SystemTime@@QAEXXZ 10005c50 f i mscommon:Macro.obj + 0001:00004c70 ?localTime@SystemTime@@QAEXXZ 10005c70 f i mscommon:Macro.obj + 0001:00004ca0 ??0DiskInfo@@QAE@XZ 10005ca0 f i mscommon:Macro.obj + 0001:00004cc0 ??0FindData@@QAE@XZ 10005cc0 f i mscommon:Macro.obj + 0001:00004cf0 ??_GFindData@@UAEPAXI@Z 10005cf0 f i mscommon:Macro.obj + 0001:00004cf0 ??_EFindData@@UAEPAXI@Z 10005cf0 f i mscommon:Macro.obj + 0001:00004d20 ??1FindData@@UAE@XZ 10005d20 f i mscommon:Macro.obj + 0001:00004d40 ?zeroInit@FindData@@AAEXXZ 10005d40 f i mscommon:Macro.obj + 0001:00004d80 ??_EDiskInfo@@UAEPAXI@Z 10005d80 f i mscommon:Macro.obj + 0001:00004d80 ??_GDiskInfo@@UAEPAXI@Z 10005d80 f i mscommon:Macro.obj + 0001:00004db0 ??1DiskInfo@@UAE@XZ 10005db0 f i mscommon:Macro.obj + 0001:00004dd0 ??0RegSam@@QAE@XZ 10005dd0 f i mscommon:Macro.obj + 0001:00004e00 ??_GRegSam@@UAEPAXI@Z 10005e00 f i mscommon:Macro.obj + 0001:00004e00 ??_ERegSam@@UAEPAXI@Z 10005e00 f i mscommon:Macro.obj + 0001:00004e30 ??1RegSam@@UAE@XZ 10005e30 f i mscommon:Macro.obj + 0001:00004e50 ??0?$Block@VString@@@@QAE@XZ 10005e50 f i mscommon:Macro.obj + 0001:00004ea0 ??1?$Block@VString@@@@UAE@XZ 10005ea0 f i mscommon:Macro.obj + 0001:00004ec0 ??A?$Block@VString@@@@QAEAAVString@@J@Z 10005ec0 f i mscommon:Macro.obj + 0001:00004f80 ??_G?$Block@VString@@@@UAEPAXI@Z 10005f80 f i mscommon:Macro.obj + 0001:00004f80 ??_E?$Block@VString@@@@UAEPAXI@Z 10005f80 f i mscommon:Macro.obj + 0001:00004fb0 ??0BoundaryError@@QAE@XZ 10005fb0 f i mscommon:Macro.obj + 0001:00004fd0 ??0Exception@@QAE@XZ 10005fd0 f i mscommon:Macro.obj + 0001:00005030 ??_EException@@UAEPAXI@Z 10006030 f i mscommon:Macro.obj + 0001:00005030 ??_GException@@UAEPAXI@Z 10006030 f i mscommon:Macro.obj + 0001:00005060 ??1Exception@@UAE@XZ 10006060 f i mscommon:Macro.obj + 0001:00005080 ?toString@BoundaryError@@UAE?AVString@@XZ 10006080 f i mscommon:Macro.obj + 0001:000050b0 ??1BoundaryError@@UAE@XZ 100060b0 f i mscommon:Macro.obj + 0001:000050d0 ??0BoundaryError@@QAE@ABV0@@Z 100060d0 f i mscommon:Macro.obj + 0001:00005100 ??0Exception@@QAE@ABV0@@Z 10006100 f i mscommon:Macro.obj + 0001:00005130 ??_GBoundaryError@@UAEPAXI@Z 10006130 f i mscommon:Macro.obj + 0001:00005130 ??_EBoundaryError@@UAEPAXI@Z 10006130 f i mscommon:Macro.obj + 0001:00005160 ?find@?$Block@VString@@@@AAEAAVString@@J@Z 10006160 f i mscommon:Macro.obj + 0001:000051d0 ??0RegKey@@QAE@XZ 100061d0 f mscommon:Regkey.obj + 0001:00005204 ??0RegKey@@QAE@W4Key@0@@Z 10006204 f mscommon:Regkey.obj + 0001:00005239 ??0RegKey@@QAE@ABV0@@Z 10006239 f mscommon:Regkey.obj + 0001:0000527b ??1RegKey@@UAE@XZ 1000627b f mscommon:Regkey.obj + 0001:00005297 ??4RegKey@@QAEAAV0@ABV0@@Z 10006297 f mscommon:Regkey.obj + 0001:000052d6 ??8RegKey@@QAEGABV0@@Z 100062d6 f mscommon:Regkey.obj + 0001:000052f4 ??BRegKey@@QBEPAUHKEY__@@XZ 100062f4 f mscommon:Regkey.obj + 0001:00005305 ?createKey@RegKey@@QAEGABV1@ABVString@@1ABVRegSam@@@Z 10006305 f mscommon:Regkey.obj + 0001:000053ee ?createKey@RegKey@@QAEGABVString@@0ABVRegSam@@@Z 100063ee f mscommon:Regkey.obj + 0001:00005460 ?createKey@RegKey@@QAEGW4Key@1@ABVString@@ABVRegSam@@@Z 10006460 f mscommon:Regkey.obj + 0001:000054eb ?openKey@RegKey@@QAEGW4Key@1@ABVString@@ABVRegSam@@@Z 100064eb f mscommon:Regkey.obj + 0001:00005519 ?openKey@RegKey@@QAEGABV1@ABVString@@ABVRegSam@@@Z 10006519 f mscommon:Regkey.obj + 0001:000055a2 ?openKey@RegKey@@QAEGABVString@@ABVRegSam@@@Z 100065a2 f mscommon:Regkey.obj + 0001:0000560e ?closeKey@RegKey@@QAEXXZ 1000660e f mscommon:Regkey.obj + 0001:00005656 ?connectRegistry@RegKey@@QAEGABVString@@ABV1@@Z 10006656 f mscommon:Regkey.obj + 0001:000056d4 ?deleteKey@RegKey@@QAEGABVString@@@Z 100066d4 f mscommon:Regkey.obj + 0001:0000572f ?deleteValue@RegKey@@QAEGABVString@@@Z 1000672f f mscommon:Regkey.obj + 0001:0000578a ?descendKey@RegKey@@AAEGABV1@ABVString@@ABVRegSam@@@Z 1000678a f mscommon:Regkey.obj + 0001:00005807 ?createDescendKey@RegKey@@AAEGABVString@@0ABVRegSam@@@Z 10006807 f mscommon:Regkey.obj + 0001:000058ac ?queryValue@RegKey@@QBEGABVString@@AAV2@@Z 100068ac f mscommon:Regkey.obj + 0001:00005972 ?queryValue@RegKey@@QBEGABVString@@AAK@Z 10006972 f mscommon:Regkey.obj + 0001:00005a34 ?setValue@RegKey@@QAEGABVString@@0@Z 10006a34 f mscommon:Regkey.obj + 0001:00005b1a ?setValue@RegKey@@QAEGABVString@@K@Z 10006b1a f mscommon:Regkey.obj + 0001:00005b82 ?enumValue@RegKey@@QAEGKAAVString@@0@Z 10006b82 f mscommon:Regkey.obj + 0001:00005c19 ?enumValue@RegKey@@QAEGKAAVString@@AAK@Z 10006c19 f mscommon:Regkey.obj + 0001:00005c9c ?enumKey@RegKey@@QAEGKAAVString@@@Z 10006c9c f mscommon:Regkey.obj + 0001:00005cfd ?isOpenKey@RegKey@@QBEGXZ 10006cfd f mscommon:Regkey.obj + 0001:00005d0f ?isOpenKey@RegKey@@AAEXG@Z 10006d0f f mscommon:Regkey.obj + 0001:00005d27 ?isOkay@RegKey@@QBEGXZ 10006d27 f mscommon:Regkey.obj + 0001:00005d62 ?isPredefinedKey@RegKey@@ABEGXZ 10006d62 f mscommon:Regkey.obj + 0001:00005db0 ??_GRegKey@@UAEPAXI@Z 10006db0 f i mscommon:Regkey.obj + 0001:00005db0 ??_ERegKey@@UAEPAXI@Z 10006db0 f i mscommon:Regkey.obj + 0001:00005de0 ??BRegSam@@QBEKXZ 10006de0 f i mscommon:Regkey.obj + 0001:00005e00 ?getLogicalDrives@DiskInfo@@QBEGAAV?$Block@VString@@@@@Z 10006e00 f mscommon:Diskinfo.obj + 0001:00005ece ?getFixedLogicalDrives@DiskInfo@@QBEGAAV?$Block@VString@@@@@Z 10006ece f mscommon:Diskinfo.obj + 0001:00005fc3 ?getCurrentDirectory@DiskInfo@@QBEKAAVString@@@Z 10006fc3 f mscommon:Diskinfo.obj + 0001:0000603b ?copyFile@DiskInfo@@QAEHABVString@@0H@Z 1000703b f mscommon:Diskinfo.obj + 0001:00006086 ?rename@DiskInfo@@QAEHABVString@@0@Z 10007086 f mscommon:Diskinfo.obj + 0001:000060b0 ?getDriveType@DiskInfo@@QBE?AW4DriveType@1@VString@@@Z 100070b0 f i mscommon:Diskinfo.obj + 0001:00006170 ?rootPath@DiskInfo@@ABE?AVString@@V2@@Z 10007170 f i mscommon:Diskinfo.obj + 0001:00006270 ?toString@SystemTime@@QAE?AVString@@XZ 10007270 f mscommon:Systime.obj + 0001:0000638f ?toStringShort@SystemTime@@QAE?AVString@@XZ 1000738f f mscommon:Systime.obj + 0001:000064ae ??OSystemTime@@QBE_NABV0@@Z 100074ae f mscommon:Systime.obj + 0001:000066b0 ??MSystemTime@@QBE_NABV0@@Z 100076b0 f mscommon:Systime.obj + 0001:000066f1 ?makeTime@SystemTime@@QAEXGGGGGG@Z 100076f1 f mscommon:Systime.obj + 0001:000067b3 ?getMonth@SystemTime@@AAEXAAVString@@@Z 100077b3 f mscommon:Systime.obj + 0001:000068d5 ?getDay@SystemTime@@AAEXAAVString@@_N@Z 100078d5 f mscommon:Systime.obj + 0001:00006a70 ?daysAdd360@SystemTime@@QAEXF@Z 10007a70 f mscommon:Systime.obj + 0001:00006c10 ?year@SystemTime@@QBEGXZ 10007c10 f i mscommon:Systime.obj + 0001:00006c30 ?day@SystemTime@@QBEGXZ 10007c30 f i mscommon:Systime.obj + 0001:00006c50 ?hour@SystemTime@@QBEGXZ 10007c50 f i mscommon:Systime.obj + 0001:00006c70 ?minute@SystemTime@@QBEGXZ 10007c70 f i mscommon:Systime.obj + 0001:00006c90 ?second@SystemTime@@QBEGXZ 10007c90 f i mscommon:Systime.obj + 0001:00006cb0 ?month@SystemTime@@QBE?AW4Month@1@XZ 10007cb0 f i mscommon:Systime.obj + 0001:00006cd0 ?milliseconds@SystemTime@@QBEGXZ 10007cd0 f i mscommon:Systime.obj + 0001:00006cf0 ??8SystemTime@@QBE_NABV0@@Z 10007cf0 f i mscommon:Systime.obj + 0001:00006e20 ?dayOfWeek@SystemTime@@QBE?AW4Day@1@XZ 10007e20 f i mscommon:Systime.obj + 0001:00006e40 ?year@SystemTime@@QAEXG@Z 10007e40 f i mscommon:Systime.obj + 0001:00006e60 ?month@SystemTime@@QAEXW4Month@1@@Z 10007e60 f i mscommon:Systime.obj + 0001:00006e80 ?day@SystemTime@@QAEXG@Z 10007e80 f i mscommon:Systime.obj + 0001:00006ea0 ?destroyFind@FindData@@AAEXXZ 10007ea0 f mscommon:Finddata.obj + 0001:00006ed6 ?findFirst@FindData@@QAEGABVString@@K@Z 10007ed6 f mscommon:Finddata.obj + 0001:00006f77 ?altFileName@FindData@@QAEXVString@@@Z 10007f77 f mscommon:Finddata.obj + 0001:00007016 ??4FindData@@QAEAAV0@ABV0@@Z 10008016 f mscommon:Finddata.obj + 0001:00007157 ??8FindData@@QBEGABV0@@Z 10008157 f mscommon:Finddata.obj + 0001:00007410 ?attributes@FindData@@QAEXK@Z 10008410 f i mscommon:Finddata.obj + 0001:00007430 ?fileName@FindData@@QAEXVString@@@Z 10008430 f i mscommon:Finddata.obj + 0001:000074e0 ?attributes@FindData@@QBEKXZ 100084e0 f i mscommon:Finddata.obj + 0001:00007500 ?creationTime@FindData@@QBE?AVSystemTime@@XZ 10008500 f i mscommon:Finddata.obj + 0001:00007550 ??0SystemTime@@QAE@ABVFileTime@@@Z 10008550 f i mscommon:Finddata.obj + 0001:00007580 ??4SystemTime@@QAEAAV0@ABVFileTime@@@Z 10008580 f i mscommon:Finddata.obj + 0001:000075d0 ?creationTime@FindData@@QAEXABVSystemTime@@@Z 100085d0 f i mscommon:Finddata.obj + 0001:00007610 ??4FileTime@@QAEAAV0@ABVSystemTime@@@Z 10008610 f i mscommon:Finddata.obj + 0001:00007650 ?lastAccessTime@FindData@@QBE?AVSystemTime@@XZ 10008650 f i mscommon:Finddata.obj + 0001:000076a0 ?lastAccessTime@FindData@@QAEXABVSystemTime@@@Z 100086a0 f i mscommon:Finddata.obj + 0001:000076e0 ?lastModifyTime@FindData@@QBE?AVSystemTime@@XZ 100086e0 f i mscommon:Finddata.obj + 0001:00007730 ?lastModifyTime@FindData@@QAEXABVSystemTime@@@Z 10008730 f i mscommon:Finddata.obj + 0001:00007770 ?sizeHigh@FindData@@QBEKXZ 10008770 f i mscommon:Finddata.obj + 0001:00007790 ?sizeHigh@FindData@@QAEXK@Z 10008790 f i mscommon:Finddata.obj + 0001:000077b0 ?sizeLow@FindData@@QBEKXZ 100087b0 f i mscommon:Finddata.obj + 0001:000077d0 ?sizeLow@FindData@@QAEXK@Z 100087d0 f i mscommon:Finddata.obj + 0001:000077f0 ?fileName@FindData@@QBE?AVString@@XZ 100087f0 f i mscommon:Finddata.obj + 0001:00007830 ?altFileName@FindData@@QBE?AVString@@XZ 10008830 f i mscommon:Finddata.obj + 0001:00007870 ??0Mutex@@QAE@XZ 10008870 f msthread:Mutex.obj + 0001:000078de ??0Mutex@@QAE@ABVString@@H@Z 100088de f msthread:Mutex.obj + 0001:00007974 ?requestMutex@Mutex@@QBEGKG@Z 10008974 f msthread:Mutex.obj + 0001:000079dd ?releaseMutex@Mutex@@QBEGXZ 100089dd f msthread:Mutex.obj + 0001:00007a06 ?closeMutex@Mutex@@QAEGXZ 10008a06 f msthread:Mutex.obj + 0001:00007a40 ?isOkay@Mutex@@QBEHXZ 10008a40 f i msthread:Mutex.obj + 0001:00007a60 ??0PostFix@@QAE@XZ 10008a60 f i msthread:Mutex.obj + 0001:00007a80 ??_EPostFix@@UAEPAXI@Z 10008a80 f i msthread:Mutex.obj + 0001:00007a80 ??_GPostFix@@UAEPAXI@Z 10008a80 f i msthread:Mutex.obj + 0001:00007ab0 ??1PostFix@@UAE@XZ 10008ab0 f i msthread:Mutex.obj + 0001:00007ad0 ?postFix@PostFix@@QBEXAAVString@@@Z 10008ad0 f i msthread:Mutex.obj + 0001:00007b50 ??3@YAXPAX@Z 10008b50 f libcpmtd:delop.obj + 0001:00007b70 ?get@istream@@QAEHXZ 10008b70 f libcimtd:istrget.obj + 0001:00007bf0 ?isfx@istream@@QAEXXZ 10008bf0 f i libcimtd:istrget.obj + 0001:00007c30 ?unlock@ios@@QAAXXZ 10008c30 f i libcimtd:istrget.obj + 0001:00007c50 ?lockptr@ios@@IAEPAU_CRT_CRITICAL_SECTION@@XZ 10008c50 f i libcimtd:istrget.obj + 0001:00007c70 ?unlockbuf@ios@@QAAXXZ 10008c70 f i libcimtd:istrget.obj + 0001:00007c80 ?unlock@streambuf@@QAEXXZ 10008c80 f i libcimtd:istrget.obj + 0001:00007cb0 ?lockptr@streambuf@@IAEPAU_CRT_CRITICAL_SECTION@@XZ 10008cb0 f i libcimtd:istrget.obj + 0001:00007cd0 ?get@istream@@QAEAAV1@AAD@Z 10008cd0 f libcimtd:istrget.obj + 0001:00007d50 ?read@istream@@QAEAAV1@PADH@Z 10008d50 f libcimtd:istrget.obj + 0001:00007dd0 ?sgetn@streambuf@@QAEHPADH@Z 10008dd0 f i libcimtd:istrget.obj + 0001:00007df0 ?opfx@ostream@@QAEHXZ 10008df0 f libcimtd:ostream.obj + 0001:00007ea0 ?lock@ios@@QAAXXZ 10008ea0 f i libcimtd:ostream.obj + 0001:00007ec0 ?lockbuf@ios@@QAAXXZ 10008ec0 f i libcimtd:ostream.obj + 0001:00007ed0 ?lock@streambuf@@QAEXXZ 10008ed0 f i libcimtd:ostream.obj + 0001:00007f00 ?osfx@ostream@@QAEXXZ 10008f00 f libcimtd:ostream.obj + 0001:00008020 ??6ostream@@QAEAAV0@PBD@Z 10009020 f libcimtd:ostream.obj + 0001:00008060 ?flush@ostream@@QAEAAV1@XZ 10009060 f libcimtd:ostream.obj + 0001:00008110 ??0ostream@@IAE@XZ 10009110 f libcimtd:ostream.obj + 0001:00008170 ??_Gostream@@UAEPAXI@Z 10009170 f i libcimtd:ostream.obj + 0001:00008170 ??_Eostream@@UAEPAXI@Z 10009170 f i libcimtd:ostream.obj + 0001:000081b0 ??_Dostream@@QAEXXZ 100091b0 f i libcimtd:ostream.obj + 0001:000081e0 ??0ostream@@QAE@PAVstreambuf@@@Z 100091e0 f libcimtd:ostream.obj + 0001:00008280 ??0ostream@@IAE@ABV0@@Z 10009280 f libcimtd:ostream.obj + 0001:00008330 ?rdbuf@ios@@QBEPAVstreambuf@@XZ 10009330 f i libcimtd:ostream.obj + 0001:00008350 ??1ostream@@UAE@XZ 10009350 f libcimtd:ostream.obj + 0001:00008370 ??4ostream@@IAEAAV0@PAVstreambuf@@@Z 10009370 f libcimtd:ostream.obj + 0001:00008480 ?delbuf@ios@@QBEHXZ 10009480 f i libcimtd:ostream.obj + 0001:000084a0 ?delbuf@ios@@QAEXH@Z 100094a0 f i libcimtd:ostream.obj + 0001:000084c0 ??0ostream_withassign@@QAE@XZ 100094c0 f libcimtd:ostream.obj + 0001:00008550 ??_Gostream_withassign@@UAEPAXI@Z 10009550 f i libcimtd:ostream.obj + 0001:00008550 ??_Eostream_withassign@@UAEPAXI@Z 10009550 f i libcimtd:ostream.obj + 0001:00008590 ??_Dostream_withassign@@QAEXXZ 10009590 f i libcimtd:ostream.obj + 0001:000085c0 ??0ostream_withassign@@QAE@PAVstreambuf@@@Z 100095c0 f libcimtd:ostream.obj + 0001:00008650 ??1ostream_withassign@@UAE@XZ 10009650 f libcimtd:ostream.obj + 0001:00008680 ?writepad@ostream@@AAEAAV1@PBD0@Z 10009680 f libcimtd:ostream.obj + 0001:000088e0 ?sputc@streambuf@@QAEHH@Z 100098e0 f i libcimtd:ostream.obj + 0001:00008940 ?sputn@streambuf@@QAEHPBDH@Z 10009940 f i libcimtd:ostream.obj + 0001:00008960 ?snextc@streambuf@@QAEHXZ 10009960 f libcimtd:streamb1.obj + 0001:00008a10 ?gptr@streambuf@@IBEPADXZ 10009a10 f i libcimtd:streamb1.obj + 0001:00008a30 ?egptr@streambuf@@IBEPADXZ 10009a30 f i libcimtd:streamb1.obj + 0001:00008a50 ?sbumpc@streambuf@@QAEHXZ 10009a50 f libcimtd:streamb1.obj + 0001:00008ae0 ?stossc@streambuf@@QAEXXZ 10009ae0 f libcimtd:streamb1.obj + 0001:00008b60 ?sgetc@streambuf@@QAEHXZ 10009b60 f libcimtd:streamb1.obj + 0001:00008bb0 ??0istream@@IAE@XZ 10009bb0 f libcimtd:istream.obj + 0001:00008c40 ??_Eistream@@UAEPAXI@Z 10009c40 f i libcimtd:istream.obj + 0001:00008c40 ??_Gistream@@UAEPAXI@Z 10009c40 f i libcimtd:istream.obj + 0001:00008c80 ??_Distream@@QAEXXZ 10009c80 f i libcimtd:istream.obj + 0001:00008cb0 ??0istream@@QAE@PAVstreambuf@@@Z 10009cb0 f libcimtd:istream.obj + 0001:00008d80 ??0istream@@IAE@ABV0@@Z 10009d80 f libcimtd:istream.obj + 0001:00008e60 ??1istream@@UAE@XZ 10009e60 f libcimtd:istream.obj + 0001:00008e80 ??4istream@@IAEAAV0@PAVstreambuf@@@Z 10009e80 f libcimtd:istream.obj + 0001:00008fc0 ?ipfx@istream@@QAEHH@Z 10009fc0 f libcimtd:istream.obj + 0001:00009120 ?in_avail@streambuf@@QBEHXZ 1000a120 f i libcimtd:istream.obj + 0001:00009160 ??5istream@@QAEAAV0@PAD@Z 1000a160 f libcimtd:istream.obj + 0001:000092d0 ?peek@istream@@QAEHXZ 1000a2d0 f libcimtd:istream.obj + 0001:00009320 ?putback@istream@@QAEAAV1@D@Z 1000a320 f libcimtd:istream.obj + 0001:000093b0 ?sputbackc@streambuf@@QAEHD@Z 1000a3b0 f i libcimtd:istream.obj + 0001:00009410 ?clear@ios@@QAEXH@Z 1000a410 f i libcimtd:istream.obj + 0001:00009440 ?good@ios@@QBEHXZ 1000a440 f i libcimtd:istream.obj + 0001:00009460 ?sync@istream@@QAEHXZ 1000a460 f libcimtd:istream.obj + 0001:000094f0 ?eatwhite@istream@@QAEXXZ 1000a4f0 f libcimtd:istream.obj + 0001:000095a0 ??0istream_withassign@@QAE@XZ 1000a5a0 f libcimtd:istream.obj + 0001:00009630 ??_Eistream_withassign@@UAEPAXI@Z 1000a630 f i libcimtd:istream.obj + 0001:00009630 ??_Gistream_withassign@@UAEPAXI@Z 1000a630 f i libcimtd:istream.obj + 0001:00009670 ??_Distream_withassign@@QAEXXZ 1000a670 f i libcimtd:istream.obj + 0001:000096a0 ??0istream_withassign@@QAE@PAVstreambuf@@@Z 1000a6a0 f libcimtd:istream.obj + 0001:00009730 ??1istream_withassign@@UAE@XZ 1000a730 f libcimtd:istream.obj + 0001:00009760 __mtlockinit 1000a760 f libcimtd:mtlock.obj + 0001:00009770 __mtlockterm 1000a770 f libcimtd:mtlock.obj + 0001:00009780 __mtlock 1000a780 f libcimtd:mtlock.obj + 0001:00009790 __mtunlock 1000a790 f libcimtd:mtlock.obj + 0001:000097a0 ??0ios@@IAE@XZ 1000a7a0 f libcimtd:_ios.obj + 0001:00009860 ??_Gios@@UAEPAXI@Z 1000a860 f i libcimtd:_ios.obj + 0001:00009860 ??_Eios@@UAEPAXI@Z 1000a860 f i libcimtd:_ios.obj + 0001:00009890 ??0ios@@QAE@PAVstreambuf@@@Z 1000a890 f libcimtd:_ios.obj + 0001:00009960 ??0ios@@IAE@ABV0@@Z 1000a960 f libcimtd:_ios.obj + 0001:000099e0 ??1ios@@UAE@XZ 1000a9e0 f libcimtd:_ios.obj + 0001:00009a90 ?init@ios@@IAEXPAVstreambuf@@@Z 1000aa90 f libcimtd:_ios.obj + 0001:00009b20 ??4ios@@IAEAAV0@ABV0@@Z 1000ab20 f libcimtd:_ios.obj + 0001:00009bb0 ?flags@ios@@QBEJXZ 1000abb0 f i libcimtd:_ios.obj + 0001:00009bd0 ?width@ios@@QBEHXZ 1000abd0 f i libcimtd:_ios.obj + 0001:00009bf0 ?tie@ios@@QBEPAVostream@@XZ 1000abf0 f i libcimtd:_ios.obj + 0001:00009c10 ?fill@ios@@QBEDXZ 1000ac10 f i libcimtd:_ios.obj + 0001:00009c30 ?precision@ios@@QBEHXZ 1000ac30 f i libcimtd:_ios.obj + 0001:00009c50 ?rdstate@ios@@QBEHXZ 1000ac50 f i libcimtd:_ios.obj + 0001:00009c70 ?xalloc@ios@@SAHXZ 1000ac70 f libcimtd:_ios.obj + 0001:00009cb0 ?lockc@ios@@KAXXZ 1000acb0 f i libcimtd:_ios.obj + 0001:00009cd0 ?unlockc@ios@@KAXXZ 1000acd0 f i libcimtd:_ios.obj + 0001:00009cf0 ?bitalloc@ios@@SAJXZ 1000acf0 f libcimtd:_ios.obj + 0001:00009d20 __chkesp 1000ad20 f LIBCMTD:chkesp.obj + 0001:00009d60 __onexit 1000ad60 f LIBCMTD:onexit.obj + 0001:00009e20 _atexit 1000ae20 f LIBCMTD:onexit.obj + 0001:00009e40 ___onexitinit 1000ae40 f LIBCMTD:onexit.obj + 0001:00009e90 ?_JumpToContinuation@@YGXPAXPAUEHRegistrationNode@@@Z 1000ae90 f LIBCMTD:trnsctrl.obj + 0001:00009ed0 ?_CallMemberFunction0@@YGXPAX0@Z 1000aed0 f LIBCMTD:trnsctrl.obj + 0001:00009ee0 ?_CallMemberFunction1@@YGXPAX00@Z 1000aee0 f LIBCMTD:trnsctrl.obj + 0001:00009ef0 ?_CallMemberFunction2@@YGXPAX00H@Z 1000aef0 f LIBCMTD:trnsctrl.obj + 0001:00009f00 ?_UnwindNestedFrames@@YGXPAUEHRegistrationNode@@PAUEHExceptionRecord@@@Z 1000af00 f LIBCMTD:trnsctrl.obj + 0001:00009f60 ___CxxFrameHandler 1000af60 f LIBCMTD:trnsctrl.obj + 0001:00009fa0 ___CxxLongjmpUnwind@4 1000afa0 f LIBCMTD:trnsctrl.obj + 0001:00009fd0 ?_CallCatchBlock2@@YAPAXPAUEHRegistrationNode@@PBU_s_FuncInfo@@PAXHK@Z 1000afd0 f LIBCMTD:trnsctrl.obj + 0001:0000a080 ?_CallSETranslator@@YAHPAUEHExceptionRecord@@PAUEHRegistrationNode@@PAX2PBU_s_FuncInfo@@H1@Z 1000b080 f LIBCMTD:trnsctrl.obj + 0001:0000a1e0 ?_GetRangeOfTrysToCheck@@YAPBU_s_TryBlockMapEntry@@PBU_s_FuncInfo@@HHPAI1@Z 1000b1e0 f LIBCMTD:trnsctrl.obj + 0001:0000a270 __global_unwind2 1000b270 f LIBCMTD:exsup.obj + 0001:0000a2b2 __local_unwind2 1000b2b2 f LIBCMTD:exsup.obj + 0001:0000a30a __NLG_Return2 1000b30a f LIBCMTD:exsup.obj + 0001:0000a31a __abnormal_termination 1000b31a f LIBCMTD:exsup.obj + 0001:0000a33d __NLG_Notify1 1000b33d f LIBCMTD:exsup.obj + 0001:0000a346 __NLG_Notify 1000b346 f LIBCMTD:exsup.obj + 0001:0000a359 __NLG_Dispatch 1000b359 f LIBCMTD:exsup.obj + 0001:0000a360 _printf 1000b360 f LIBCMTD:printf.obj + 0001:0000a400 _sprintf 1000b400 f LIBCMTD:sprintf.obj + 0001:0000a500 _memset 1000b500 f LIBCMTD:memset.obj + 0001:0000a560 ??2@YAPAXI@Z 1000b560 f LIBCMTD:new.obj + 0001:0000a580 __CRT_INIT@12 1000b580 f LIBCMTD:dllcrt0.obj + 0001:0000a6c0 __DllMainCRTStartup@12 1000b6c0 f LIBCMTD:dllcrt0.obj + 0001:0000a7c0 __amsg_exit 1000b7c0 f LIBCMTD:dllcrt0.obj + 0001:0000a800 _strcmp 1000b800 f LIBCMTD:strcmp.obj + 0001:0000a890 __fsopen 1000b890 f LIBCMTD:fopen.obj + 0001:0000a990 _fopen 1000b990 f LIBCMTD:fopen.obj + 0001:0000a9b0 _fclose 1000b9b0 f LIBCMTD:fclose.obj + 0001:0000aa40 __fclose_lk 1000ba40 f LIBCMTD:fclose.obj + 0001:0000ab00 _fwrite 1000bb00 f LIBCMTD:fwrite.obj + 0001:0000ab40 __fwrite_lk 1000bb40 f LIBCMTD:fwrite.obj + 0001:0000ad60 _strlen 1000bd60 f LIBCMTD:strlen.obj + 0001:0000ade0 _fflush 1000bde0 f LIBCMTD:fflush.obj + 0001:0000ae30 __fflush_lk 1000be30 f LIBCMTD:fflush.obj + 0001:0000ae80 __flush 1000be80 f LIBCMTD:fflush.obj + 0001:0000af40 __flushall 1000bf40 f LIBCMTD:fflush.obj + 0001:0000b090 _fgetpos 1000c090 f LIBCMTD:fgetpos.obj + 0001:0000b0d0 _rewind 1000c0d0 f LIBCMTD:rewind.obj + 0001:0000b1c0 _fseek 1000c1c0 f LIBCMTD:fseek.obj + 0001:0000b230 __fseek_lk 1000c230 f LIBCMTD:fseek.obj + 0001:0000b360 _fread 1000c360 f LIBCMTD:fread.obj + 0001:0000b3a0 __fread_lk 1000c3a0 f LIBCMTD:fread.obj + 0001:0000b570 _memcpy 1000c570 f LIBCMTD:memcpy.obj + 0001:0000b8b0 _strcpy 1000c8b0 f LIBCMTD:strcat.obj + 0001:0000b8c0 _strcat 1000c8c0 f LIBCMTD:strcat.obj + 0001:0000b9a8 __except_handler3 1000c9a8 f LIBCMTD:exsup3.obj + 0001:0000ba65 __seh_longjmp_unwind@4 1000ca65 f LIBCMTD:exsup3.obj + 0001:0000ba80 _strtok 1000ca80 f LIBCMTD:strtok.obj + 0001:0000bbe0 _strchr 1000cbe0 f LIBCMTD:strchr.obj + 0001:0000bbe6 ___from_strstr_to_strchr 1000cbe6 f LIBCMTD:strchr.obj + 0001:0000bca0 _strstr 1000cca0 f LIBCMTD:strstr.obj + 0001:0000bd20 _strncmp 1000cd20 f LIBCMTD:strncmp.obj + 0001:0000bd60 __toupper 1000cd60 f LIBCMTD:toupper.obj + 0001:0000bd70 _toupper 1000cd70 f LIBCMTD:toupper.obj + 0001:0000be10 __toupper_lk 1000ce10 f LIBCMTD:toupper.obj + 0001:0000bf40 __tolower 1000cf40 f LIBCMTD:tolower.obj + 0001:0000bf50 _tolower 1000cf50 f LIBCMTD:tolower.obj + 0001:0000bff0 __tolower_lk 1000cff0 f LIBCMTD:tolower.obj + 0001:0000c120 _isalpha 1000d120 f LIBCMTD:_ctype.obj + 0001:0000c170 _isupper 1000d170 f LIBCMTD:_ctype.obj + 0001:0000c1b0 _islower 1000d1b0 f LIBCMTD:_ctype.obj + 0001:0000c1f0 _isdigit 1000d1f0 f LIBCMTD:_ctype.obj + 0001:0000c230 _isxdigit 1000d230 f LIBCMTD:_ctype.obj + 0001:0000c280 _isspace 1000d280 f LIBCMTD:_ctype.obj + 0001:0000c2c0 _ispunct 1000d2c0 f LIBCMTD:_ctype.obj + 0001:0000c300 _isalnum 1000d300 f LIBCMTD:_ctype.obj + 0001:0000c350 _isprint 1000d350 f LIBCMTD:_ctype.obj + 0001:0000c3a0 _isgraph 1000d3a0 f LIBCMTD:_ctype.obj + 0001:0000c3f0 _iscntrl 1000d3f0 f LIBCMTD:_ctype.obj + 0001:0000c430 ___isascii 1000d430 f LIBCMTD:_ctype.obj + 0001:0000c440 ___toascii 1000d440 f LIBCMTD:_ctype.obj + 0001:0000c450 ___iscsymf 1000d450 f LIBCMTD:_ctype.obj + 0001:0000c4b0 ___iscsym 1000d4b0 f LIBCMTD:_ctype.obj + 0001:0000c510 __fpmath 1000d510 f LIBCMTD:fpinit.obj + 0001:0000c540 __fpclear 1000d540 f LIBCMTD:fpinit.obj + 0001:0000c550 __cfltcvt_init 1000d550 f LIBCMTD:fpinit.obj + 0001:0000c5a0 ___setfflag 1000d5a0 f LIBCMTD:fpinit.obj + 0001:0000c5c0 _atol 1000d5c0 f LIBCMTD:atox.obj + 0001:0000c6c0 _atoi 1000d6c0 f LIBCMTD:atox.obj + 0001:0000c6e0 __atoi64 1000d6e0 f LIBCMTD:atox.obj + 0001:0000c810 _atof 1000d810 f LIBCMTD:atof.obj + 0001:0000c890 _getenv 1000d890 f LIBCMTD:getenv.obj + 0001:0000c8c0 __getenv_lk 1000d8c0 f LIBCMTD:getenv.obj + 0001:0000c990 ??1type_info@@UAE@XZ 1000d990 f LIBCMTD:typinfo.obj + 0001:0000c9d0 ??_Etype_info@@UAEPAXI@Z 1000d9d0 f i LIBCMTD:typinfo.obj + 0001:0000c9d0 ??_Gtype_info@@UAEPAXI@Z 1000d9d0 f i LIBCMTD:typinfo.obj + 0001:0000ca00 ??8type_info@@QBEHABV0@@Z 1000da00 f LIBCMTD:typinfo.obj + 0001:0000ca30 ??9type_info@@QBEHABV0@@Z 1000da30 f LIBCMTD:typinfo.obj + 0001:0000ca60 ?before@type_info@@QBEHABV1@@Z 1000da60 f LIBCMTD:typinfo.obj + 0001:0000ca90 ?raw_name@type_info@@QBEPBDXZ 1000da90 f LIBCMTD:typinfo.obj + 0001:0000cab0 ??0type_info@@AAE@ABV0@@Z 1000dab0 f LIBCMTD:typinfo.obj + 0001:0000cad0 ??4type_info@@AAEAAV0@ABV0@@Z 1000dad0 f LIBCMTD:typinfo.obj + 0001:0000cae0 __CxxThrowException@8 1000dae0 f LIBCMTD:throw.obj + 0001:0000cb30 __purecall 1000db30 f LIBCMTD:purevirt.obj + 0001:0000cb40 _malloc 1000db40 f LIBCMTD:dbgheap.obj + 0001:0000cb70 __malloc_dbg 1000db70 f LIBCMTD:dbgheap.obj + 0001:0000cba0 __nh_malloc 1000dba0 f LIBCMTD:dbgheap.obj + 0001:0000cbc0 __nh_malloc_dbg 1000dbc0 f LIBCMTD:dbgheap.obj + 0001:0000cc60 __heap_alloc 1000dc60 f LIBCMTD:dbgheap.obj + 0001:0000cc80 __heap_alloc_dbg 1000dc80 f LIBCMTD:dbgheap.obj + 0001:0000cfa0 _calloc 1000dfa0 f LIBCMTD:dbgheap.obj + 0001:0000cfd0 __calloc_dbg 1000dfd0 f LIBCMTD:dbgheap.obj + 0001:0000d030 _realloc 1000e030 f LIBCMTD:dbgheap.obj + 0001:0000d060 __realloc_dbg 1000e060 f LIBCMTD:dbgheap.obj + 0001:0000d610 __expand 1000e610 f LIBCMTD:dbgheap.obj + 0001:0000d640 __expand_dbg 1000e640 f LIBCMTD:dbgheap.obj + 0001:0000d6d0 _free 1000e6d0 f LIBCMTD:dbgheap.obj + 0001:0000d6f0 __free_lk 1000e6f0 f LIBCMTD:dbgheap.obj + 0001:0000d710 __free_dbg 1000e710 f LIBCMTD:dbgheap.obj + 0001:0000d780 __free_dbg_lk 1000e780 f LIBCMTD:dbgheap.obj + 0001:0000db70 __msize 1000eb70 f LIBCMTD:dbgheap.obj + 0001:0000db90 __msize_dbg 1000eb90 f LIBCMTD:dbgheap.obj + 0001:0000dd20 __CrtSetBreakAlloc 1000ed20 f LIBCMTD:dbgheap.obj + 0001:0000dd40 __CrtSetDbgBlockType 1000ed40 f LIBCMTD:dbgheap.obj + 0001:0000de20 __CrtSetAllocHook 1000ee20 f LIBCMTD:dbgheap.obj + 0001:0000ded0 __CrtCheckMemory 1000eed0 f LIBCMTD:dbgheap.obj + 0001:0000e280 __CrtSetDbgFlag 1000f280 f LIBCMTD:dbgheap.obj + 0001:0000e2b0 __CrtDoForAllClientObjects 1000f2b0 f LIBCMTD:dbgheap.obj + 0001:0000e360 __CrtIsValidPointer 1000f360 f LIBCMTD:dbgheap.obj + 0001:0000e3b0 __CrtIsValidHeapPointer 1000f3b0 f LIBCMTD:dbgheap.obj + 0001:0000e4e0 __CrtIsMemoryBlock 1000f4e0 f LIBCMTD:dbgheap.obj + 0001:0000e610 __CrtSetDumpClient 1000f610 f LIBCMTD:dbgheap.obj + 0001:0000e630 __CrtMemCheckpoint 1000f630 f LIBCMTD:dbgheap.obj + 0001:0000e7e0 __CrtMemDifference 1000f7e0 f LIBCMTD:dbgheap.obj + 0001:0000e910 __CrtMemDumpAllObjectsSince 1000f910 f LIBCMTD:dbgheap.obj + 0001:0000ed30 __CrtDumpMemoryLeaks 1000fd30 f LIBCMTD:dbgheap.obj + 0001:0000edb0 __CrtMemDumpStatistics 1000fdb0 f LIBCMTD:dbgheap.obj + 0001:0000ee80 ___initstdio 1000fe80 f LIBCMTD:_file.obj + 0001:0000efb0 ___endstdio 1000ffb0 f LIBCMTD:_file.obj + 0001:0000efd0 __lock_file 1000ffd0 f LIBCMTD:_file.obj + 0001:0000f010 __lock_file2 10010010 f LIBCMTD:_file.obj + 0001:0000f040 __unlock_file 10010040 f LIBCMTD:_file.obj + 0001:0000f080 __unlock_file2 10010080 f LIBCMTD:_file.obj + 0001:0000f0b0 __CrtDbgBreak 100100b0 f LIBCMTD:dbgrpt.obj + 0001:0000f0c0 __CrtSetReportMode 100100c0 f LIBCMTD:dbgrpt.obj + 0001:0000f120 __CrtSetReportFile 10010120 f LIBCMTD:dbgrpt.obj + 0001:0000f1a0 __CrtSetReportHook 100101a0 f LIBCMTD:dbgrpt.obj + 0001:0000f1c0 __CrtDbgReport 100101c0 f LIBCMTD:dbgrpt.obj + 0001:0000f860 __cinit 10010860 f LIBCMTD:crt0dat.obj + 0001:0000f8a0 _exit 100108a0 f LIBCMTD:crt0dat.obj + 0001:0000f8c0 __exit 100108c0 f LIBCMTD:crt0dat.obj + 0001:0000f8e0 __cexit 100108e0 f LIBCMTD:crt0dat.obj + 0001:0000f900 __c_exit 10010900 f LIBCMTD:crt0dat.obj + 0001:0000fa10 __lockexit 10010a10 f LIBCMTD:crt0dat.obj + 0001:0000fa20 __unlockexit 10010a20 f LIBCMTD:crt0dat.obj + 0001:0000fa60 ___InternalCxxFrameHandler 10010a60 f LIBCMTD:frame.obj + 0001:0000ffd0 ___FrameUnwindToState 10010fd0 f LIBCMTD:frame.obj + 0001:000105e0 ?_DestructExceptionObject@@YAXPAUEHExceptionRecord@@E@Z 100115e0 f LIBCMTD:frame.obj + 0001:000106c0 __CallSettingFrame@12 100116c0 f LIBCMTD:lowhelpr.obj + 0001:000106e7 __NLG_Return 100116e7 f LIBCMTD:lowhelpr.obj + 0001:00010710 __mtinit 10011710 f LIBCMTD:tidtable.obj + 0001:000107a0 __mtterm 100117a0 f LIBCMTD:tidtable.obj + 0001:000107d0 __initptd 100117d0 f LIBCMTD:tidtable.obj + 0001:000107f0 __getptd 100117f0 f LIBCMTD:tidtable.obj + 0001:00010890 __freeptd 10011890 f LIBCMTD:tidtable.obj + 0001:000109a0 ___threadid 100119a0 f LIBCMTD:tidtable.obj + 0001:000109b0 ___threadhandle 100119b0 f LIBCMTD:tidtable.obj + 0001:000109c0 ?terminate@@YAXXZ 100119c0 f LIBCMTD:hooks.obj + 0001:00010a50 ?unexpected@@YAXXZ 10011a50 f LIBCMTD:hooks.obj + 0001:00010a70 ?_inconsistency@@YAXXZ 10011a70 f LIBCMTD:hooks.obj + 0001:00010b00 __stbuf 10011b00 f LIBCMTD:_sftbuf.obj + 0001:00010c60 __ftbuf 10011c60 f LIBCMTD:_sftbuf.obj + 0001:00010d00 __output 10011d00 f LIBCMTD:output.obj + 0001:00011ba0 __flsbuf 10012ba0 f LIBCMTD:_flsbuf.obj + 0001:00011e20 __ioinit 10012e20 f LIBCMTD:ioinit.obj + 0001:00012150 __ioterm 10013150 f LIBCMTD:ioinit.obj + 0001:000121f0 __setenvp 100131f0 f LIBCMTD:stdenvp.obj + 0001:00012340 __setargv 10013340 f LIBCMTD:stdargv.obj + 0001:00012850 ___crtGetEnvironmentStringsA 10013850 f LIBCMTD:a_env.obj + 0001:00012a70 __GetLinkerVersion 10013a70 f LIBCMTD:heapinit.obj + 0001:00012ad0 ___heap_select 10013ad0 f LIBCMTD:heapinit.obj + 0001:00012d00 __heap_init 10013d00 f LIBCMTD:heapinit.obj + 0001:00012d90 __heap_term 10013d90 f LIBCMTD:heapinit.obj + 0001:00012e80 _DllMain@12 10013e80 f LIBCMTD:dllmain.obj + 0001:00012e90 __FF_MSGBANNER 10013e90 f LIBCMTD:crt0msg.obj + 0001:00012ee0 __NMSG_WRITE 10013ee0 f LIBCMTD:crt0msg.obj + 0001:000130a0 __GET_RTERRMSG 100140a0 f LIBCMTD:crt0msg.obj + 0001:000130f0 __openfile 100140f0 f LIBCMTD:_open.obj + 0001:00013480 __getstream 10014480 f LIBCMTD:stream.obj + 0001:00013600 __close 10014600 f LIBCMTD:close.obj + 0001:00013680 __close_lk 10014680 f LIBCMTD:close.obj + 0001:00013730 __freebuf 10014730 f LIBCMTD:_freebuf.obj + 0001:000137d0 __write 100147d0 f LIBCMTD:write.obj + 0001:00013860 __write_lk 10014860 f LIBCMTD:write.obj + 0001:00013ae0 __commit 10014ae0 f LIBCMTD:commit.obj + 0001:00013bc0 __mtinitlocks 10014bc0 f LIBCMTD:mlock.obj + 0001:00013c00 __mtdeletelocks 10014c00 f LIBCMTD:mlock.obj + 0001:00013ca0 __lock 10014ca0 f LIBCMTD:mlock.obj + 0001:00013d40 __unlock 10014d40 f LIBCMTD:mlock.obj + 0001:00013d60 __lockerr_exit 10014d60 f LIBCMTD:mlock.obj + 0001:00013d80 __ftelli64 10014d80 f LIBCMTD:ftelli64.obj + 0001:00013df0 __ftelli64_lk 10014df0 f LIBCMTD:ftelli64.obj + 0001:000140e0 __lseek 100150e0 f LIBCMTD:lseek.obj + 0001:00014170 __lseek_lk 10015170 f LIBCMTD:lseek.obj + 0001:00014230 _ftell 10015230 f LIBCMTD:ftell.obj + 0001:000142a0 __ftell_lk 100152a0 f LIBCMTD:ftell.obj + 0001:00014540 __dosmaperr 10015540 f LIBCMTD:dosmap.obj + 0001:000145e0 __errno 100155e0 f LIBCMTD:dosmap.obj + 0001:000145f0 ___doserrno 100155f0 f LIBCMTD:dosmap.obj + 0001:00014600 __filbuf 10015600 f LIBCMTD:_filbuf.obj + 0001:000147f0 __read 100157f0 f LIBCMTD:read.obj + 0001:00014880 __read_lk 10015880 f LIBCMTD:read.obj + 0001:00014cd0 _setlocale 10015cd0 f LIBCMTD:setlocal.obj + 0001:00015360 __expandlocale 10016360 f LIBCMTD:setlocal.obj + 0001:000154f0 ___init_dummy 100164f0 f LIBCMTD:setlocal.obj + 0001:00015500 __strcats 10016500 f LIBCMTD:setlocal.obj + 0001:00015550 ___lc_strtolc 10016550 f LIBCMTD:setlocal.obj + 0001:000156b0 ___lc_lctostr 100166b0 f LIBCMTD:setlocal.obj + 0001:00015720 ___crtLCMapStringA 10016720 f LIBCMTD:a_map.obj + 0001:00015a80 __isctype 10016a80 f LIBCMTD:isctype.obj + 0001:00015b40 __setdefaultprecision 10016b40 f LIBCMTD:fp8.obj + 0001:00015b60 __ms_p5_test_fdiv 10016b60 f LIBCMTD:testfdiv.obj + 0001:00015bc0 __ms_p5_mp_test_fdiv 10016bc0 f LIBCMTD:testfdiv.obj + 0001:00015c10 __forcdecpt 10016c10 f LIBCMTD:cvt.obj + 0001:00015cc0 __cropzeros 10016cc0 f LIBCMTD:cvt.obj + 0001:00015da0 __positive 10016da0 f LIBCMTD:cvt.obj + 0001:00015dd0 __fassign 10016dd0 f LIBCMTD:cvt.obj + 0001:00015e20 __cftoe 10016e20 f LIBCMTD:cvt.obj + 0001:00016010 __cftof 10017010 f LIBCMTD:cvt.obj + 0001:000161c0 __cftog 100171c0 f LIBCMTD:cvt.obj + 0001:000162b0 __cfltcvt 100172b0 f LIBCMTD:cvt.obj + 0001:00016340 __allmul 10017340 f LIBCMTD:llmul.obj + 0001:00016380 __fltin2 10017380 f LIBCMTD:cfin.obj + 0001:00016440 __mbsnbicoll 10017440 f LIBCMTD:mbsnbico.obj + 0001:00016490 ___wtomb_environ 10017490 f LIBCMTD:wtombenv.obj + 0001:00016540 __free_base 10017540 f LIBCMTD:free.obj + 0001:00016690 ?__CxxUnhandledExceptionFilter@@YGJPAU_EXCEPTION_POINTERS@@@Z 10017690 f LIBCMTD:unhandld.obj + 0001:000166f0 ?__CxxSetUnhandledExceptionFilter@@YAXXZ 100176f0 f LIBCMTD:unhandld.obj + 0001:00016710 ?__CxxRestoreUnhandledExceptionFilter@@YAXXZ 10017710 f LIBCMTD:unhandld.obj + 0001:00016730 ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 10017730 f LIBCMTD:handler.obj + 0001:00016760 ?_query_new_handler@@YAP6AHI@ZXZ 10017760 f LIBCMTD:handler.obj + 0001:00016770 __callnewh 10017770 f LIBCMTD:handler.obj + 0001:000167a0 __malloc_base 100177a0 f LIBCMTD:malloc.obj + 0001:000167c0 __nh_malloc_base 100177c0 f LIBCMTD:malloc.obj + 0001:00016820 __heap_alloc_base 10017820 f LIBCMTD:malloc.obj + 0001:00016970 __CrtDefaultAllocHook 10017970 f LIBCMTD:dbghook.obj + 0001:00016980 __expand_base 10017980 f LIBCMTD:expand.obj + 0001:00016b90 __realloc_base 10017b90 f LIBCMTD:realloc.obj + 0001:00017030 __heapchk 10018030 f LIBCMTD:heapchk.obj + 0001:00017140 __heapset 10018140 f LIBCMTD:heapchk.obj + 0001:00017150 __get_sbh_threshold 10018150 f LIBCMTD:sbheap.obj + 0001:00017180 __set_sbh_threshold 10018180 f LIBCMTD:sbheap.obj + 0001:00017290 ___sbh_heap_init 10018290 f LIBCMTD:sbheap.obj + 0001:00017300 ___sbh_find_block 10018300 f LIBCMTD:sbheap.obj + 0001:00017360 ___sbh_verify_block 10018360 f LIBCMTD:sbheap.obj + 0001:000173c0 ___sbh_free_block 100183c0 f LIBCMTD:sbheap.obj + 0001:000179a0 ___sbh_alloc_block 100189a0 f LIBCMTD:sbheap.obj + 0001:00017ee0 ___sbh_alloc_new_region 10018ee0 f LIBCMTD:sbheap.obj + 0001:00017ff0 ___sbh_alloc_new_group 10018ff0 f LIBCMTD:sbheap.obj + 0001:000181e0 ___sbh_resize_block 100191e0 f LIBCMTD:sbheap.obj + 0001:000187d0 ___sbh_heapmin 100197d0 f LIBCMTD:sbheap.obj + 0001:00018900 ___sbh_heap_check 10019900 f LIBCMTD:sbheap.obj + 0001:00018f20 __get_old_sbh_threshold 10019f20 f LIBCMTD:sbheap.obj + 0001:00018f30 __set_old_sbh_threshold 10019f30 f LIBCMTD:sbheap.obj + 0001:00018f60 ___old_sbh_new_region 10019f60 f LIBCMTD:sbheap.obj + 0001:00019140 ___old_sbh_release_region 1001a140 f LIBCMTD:sbheap.obj + 0001:000191c0 ___old_sbh_decommit_pages 1001a1c0 f LIBCMTD:sbheap.obj + 0001:00019320 ___old_sbh_find_block 1001a320 f LIBCMTD:sbheap.obj + 0001:000193b0 ___old_sbh_free_block 1001a3b0 f LIBCMTD:sbheap.obj + 0001:00019420 ___old_sbh_alloc_block 1001a420 f LIBCMTD:sbheap.obj + 0001:000197e0 ___old_sbh_alloc_block_from_page 1001a7e0 f LIBCMTD:sbheap.obj + 0001:00019a90 ___old_sbh_resize_block 1001aa90 f LIBCMTD:sbheap.obj + 0001:00019c00 ___old_sbh_heap_check 1001ac00 f LIBCMTD:sbheap.obj + 0001:00019e40 __fcloseall 1001ae40 f LIBCMTD:closeall.obj + 0001:00019f20 __itoa 1001af20 f LIBCMTD:xtoa.obj + 0001:0001a040 __ltoa 1001b040 f LIBCMTD:xtoa.obj + 0001:0001a080 __ultoa 1001b080 f LIBCMTD:xtoa.obj + 0001:0001a0a0 __i64toa 1001b0a0 f LIBCMTD:xtoa.obj + 0001:0001a1f0 __ui64toa 1001b1f0 f LIBCMTD:xtoa.obj + 0001:0001a210 __snprintf 1001b210 f LIBCMTD:snprintf.obj + 0001:0001a310 __vsnprintf 1001b310 f LIBCMTD:vsnprint.obj + 0001:0001a410 __alloca_probe 1001b410 f LIBCMTD:chkstk.obj + 0001:0001a410 __chkstk 1001b410 f LIBCMTD:chkstk.obj + 0001:0001a440 _signal 1001b440 f LIBCMTD:winsig.obj + 0001:0001a710 _raise 1001b710 f LIBCMTD:winsig.obj + 0001:0001a9b0 ___fpecode 1001b9b0 f LIBCMTD:winsig.obj + 0001:0001a9c0 ___pxcptinfoptrs 1001b9c0 f LIBCMTD:winsig.obj + 0001:0001a9d0 ___crtMessageBoxA 1001b9d0 f LIBCMTD:crtmbox.obj + 0001:0001aa90 _strncpy 1001ba90 f LIBCMTD:strncpy.obj + 0001:0001ab90 ?_ValidateRead@@YAHPBXI@Z 1001bb90 f LIBCMTD:validate.obj + 0001:0001abc0 ?_ValidateWrite@@YAHPAXI@Z 1001bbc0 f LIBCMTD:validate.obj + 0001:0001abf0 ?_ValidateExecute@@YAHP6GHXZ@Z 1001bbf0 f LIBCMTD:validate.obj + 0001:0001ac20 _memmove 1001bc20 f LIBCMTD:memmove.obj + 0001:0001af60 __XcptFilter 1001bf60 f LIBCMTD:winxfltr.obj + 0001:0001b180 _abort 1001c180 f LIBCMTD:abort.obj + 0001:0001b1a0 __isatty 1001c1a0 f LIBCMTD:isatty.obj + 0001:0001b1e0 _wctomb 1001c1e0 f LIBCMTD:wctomb.obj + 0001:0001b260 __wctomb_lk 1001c260 f LIBCMTD:wctomb.obj + 0001:0001b300 __aulldiv 1001c300 f LIBCMTD:ulldiv.obj + 0001:0001b370 __aullrem 1001c370 f LIBCMTD:ullrem.obj + 0001:0001b3f0 __getbuf 1001c3f0 f LIBCMTD:_getbuf.obj + 0001:0001b4c0 __setmbcp 1001c4c0 f LIBCMTD:mbctype.obj + 0001:0001bc80 __getmbcp 1001cc80 f LIBCMTD:mbctype.obj + 0001:0001bca0 ___initmbctable 1001cca0 f LIBCMTD:mbctype.obj + 0001:0001bcd0 _strtol 1001ccd0 f LIBCMTD:strtol.obj + 0001:0001c030 _strtoul 1001d030 f LIBCMTD:strtol.obj + 0001:0001c050 __open 1001d050 f LIBCMTD:open.obj + 0001:0001c090 __sopen 1001d090 f LIBCMTD:open.obj + 0001:0001c5f0 __alloc_osfhnd 1001d5f0 f LIBCMTD:osfinfo.obj + 0001:0001c7e0 __set_osfhnd 1001d7e0 f LIBCMTD:osfinfo.obj + 0001:0001c8a0 __free_osfhnd 1001d8a0 f LIBCMTD:osfinfo.obj + 0001:0001c980 __get_osfhandle 1001d980 f LIBCMTD:osfinfo.obj + 0001:0001c9f0 __open_osfhandle 1001d9f0 f LIBCMTD:osfinfo.obj + 0001:0001cb00 __lock_fhandle 1001db00 f LIBCMTD:osfinfo.obj + 0001:0001cb90 __unlock_fhandle 1001db90 f LIBCMTD:osfinfo.obj + 0001:0001cbc0 __lseeki64 1001dbc0 f LIBCMTD:lseeki64.obj + 0001:0001cc60 __lseeki64_lk 1001dc60 f LIBCMTD:lseeki64.obj + 0001:0001cd20 ___init_time 1001dd20 f LIBCMTD:inittime.obj + 0001:0001d6a0 ___init_numeric 1001e6a0 f LIBCMTD:initnum.obj + 0001:0001d9d0 ___init_monetary 1001e9d0 f LIBCMTD:initmon.obj + 0001:0001de30 ___init_ctype 1001ee30 f LIBCMTD:initctyp.obj + 0001:0001e1d0 ___init_collate 1001f1d0 f LIBCMTD:initcoll.obj + 0001:0001e1e0 _strcspn 1001f1e0 f LIBCMTD:strcspn.obj + 0001:0001e220 _strpbrk 1001f220 f LIBCMTD:strpbrk.obj + 0001:0001e260 ___get_qualified_locale 1001f260 f LIBCMTD:getqloc.obj + 0001:0001f000 ___crtGetStringTypeA 10020000 f LIBCMTD:a_str.obj + 0001:0001f1c0 __statusfp 100201c0 f LIBCMTD:ieee87.obj + 0001:0001f1e0 __clearfp 100201e0 f LIBCMTD:ieee87.obj + 0001:0001f200 __control87 10020200 f LIBCMTD:ieee87.obj + 0001:0001f250 __controlfp 10020250 f LIBCMTD:ieee87.obj + 0001:0001f270 __fpreset 10020270 f LIBCMTD:ieee87.obj + 0001:0001f660 __ZeroTail 10020660 f LIBCMTD:intrncvt.obj + 0001:0001f6f0 __IncMan 100206f0 f LIBCMTD:intrncvt.obj + 0001:0001f7a0 __RoundMan 100207a0 f LIBCMTD:intrncvt.obj + 0001:0001f880 __CopyMan 10020880 f LIBCMTD:intrncvt.obj + 0001:0001f8d0 __FillZeroMan 100208d0 f LIBCMTD:intrncvt.obj + 0001:0001f900 __IsZeroMan 10020900 f LIBCMTD:intrncvt.obj + 0001:0001f940 __ShrMan 10020940 f LIBCMTD:intrncvt.obj + 0001:0001fa30 __ld12cvt 10020a30 f LIBCMTD:intrncvt.obj + 0001:0001fc80 __ld12tod 10020c80 f LIBCMTD:intrncvt.obj + 0001:0001fca0 __ld12tof 10020ca0 f LIBCMTD:intrncvt.obj + 0001:0001fcc0 __ld12told 10020cc0 f LIBCMTD:intrncvt.obj + 0001:0001fd80 __atodbl 10020d80 f LIBCMTD:intrncvt.obj + 0001:0001fdc0 __atoldbl 10020dc0 f LIBCMTD:intrncvt.obj + 0001:0001fe00 __atoflt 10020e00 f LIBCMTD:intrncvt.obj + 0001:0001fe40 __fptostr 10020e40 f LIBCMTD:_fptostr.obj + 0001:0001ff40 __fltout2 10020f40 f LIBCMTD:cfout.obj + 0001:0001ffc0 ___dtold 10020fc0 f LIBCMTD:cfout.obj + 0001:00020130 __fptrap 10021130 f LIBCMTD:crt0fp.obj + 0001:00020140 ___strgtold12 10021140 f LIBCMTD:strgtold.obj + 0001:00020c70 ___STRINGTOLD 10021c70 f LIBCMTD:strgtold.obj + 0001:00020cc0 ___crtCompareStringA 10021cc0 f LIBCMTD:a_cmp.obj + 0001:00021110 ___crtsetenv 10022110 f LIBCMTD:setenv.obj + 0001:00021560 __chsize 10022560 f LIBCMTD:chsize.obj + 0001:000215e0 __chsize_lk 100225e0 f LIBCMTD:chsize.obj + 0001:00021810 __Getdays 10022810 f LIBCMTD:strftime.obj + 0001:00021940 __Getmonths 10022940 f LIBCMTD:strftime.obj + 0001:00021a70 __Gettnames 10022a70 f LIBCMTD:strftime.obj + 0001:00021de0 _strftime 10022de0 f LIBCMTD:strftime.obj + 0001:00021e00 __Strftime 10022e00 f LIBCMTD:strftime.obj + 0001:00022c80 ___getlocaleinfo 10023c80 f LIBCMTD:inithelp.obj + 0001:00022f10 _localeconv 10023f10 f LIBCMTD:lconv.obj + 0001:00022f20 ___crtGetStringTypeW 10023f20 f LIBCMTD:w_str.obj + 0001:00023190 __stricmp 10024190 f LIBCMTD:stricmp.obj + 0001:00023190 __strcmpi 10024190 f LIBCMTD:stricmp.obj + 0001:00023260 __strnicmp 10024260 f LIBCMTD:strnicmp.obj + 0001:00023370 ___addl 10024370 f LIBCMTD:mantold.obj + 0001:000233b0 ___add_12 100243b0 f LIBCMTD:mantold.obj + 0001:00023460 ___shl_12 10024460 f LIBCMTD:mantold.obj + 0001:000234c0 ___shr_12 100244c0 f LIBCMTD:mantold.obj + 0001:00023530 ___mtold12 10024530 f LIBCMTD:mantold.obj + 0001:00023670 _$I10_OUTPUT 10024670 f LIBCMTD:x10fout.obj + 0001:00023b90 ___ld12mul 10024b90 f LIBCMTD:tenpow.obj + 0001:00023fd0 ___multtenpow12 10024fd0 f LIBCMTD:tenpow.obj + 0001:000240a0 __mbschr 100250a0 f LIBCMTD:mbschr.obj + 0001:00024190 __setmode 10025190 f LIBCMTD:setmode.obj + 0001:00024210 __setmode_lk 10025210 f LIBCMTD:setmode.obj + 0001:000242e0 ___tzset 100252e0 f LIBCMTD:tzset.obj + 0001:00024320 __tzset 10025320 f LIBCMTD:tzset.obj + 0001:000246f0 __isindst 100256f0 f LIBCMTD:tzset.obj + 0001:00024c20 ___crtGetLocaleInfoW 10025c20 f LIBCMTD:w_loc.obj + 0001:00024dc0 ___crtGetLocaleInfoA 10025dc0 f LIBCMTD:a_loc.obj + 0001:00024f66 _GetLocalTime@4 10025f66 f kernel32:KERNEL32.dll + 0001:00024f6c _GetLogicalDrives@0 10025f6c f kernel32:KERNEL32.dll + 0001:00024f72 _GetDriveTypeA@4 10025f72 f kernel32:KERNEL32.dll + 0001:00024f78 _GetCurrentDirectoryA@8 10025f78 f kernel32:KERNEL32.dll + 0001:00024f7e _CopyFileA@12 10025f7e f kernel32:KERNEL32.dll + 0001:00024f84 _MoveFileA@8 10025f84 f kernel32:KERNEL32.dll + 0001:00024f8a _FileTimeToSystemTime@8 10025f8a f kernel32:KERNEL32.dll + 0001:00024f90 _DosDateTimeToFileTime@12 10025f90 f kernel32:KERNEL32.dll + 0001:00024f96 _FindClose@4 10025f96 f kernel32:KERNEL32.dll + 0001:00024f9c _FindFirstFileA@8 10025f9c f kernel32:KERNEL32.dll + 0001:00024fa2 _SystemTimeToFileTime@8 10025fa2 f kernel32:KERNEL32.dll + 0001:00024fa8 _CreateMutexA@12 10025fa8 f kernel32:KERNEL32.dll + 0001:00024fae _WaitForSingleObjectEx@12 10025fae f kernel32:KERNEL32.dll + 0001:00024fb4 _ReleaseMutex@4 10025fb4 f kernel32:KERNEL32.dll + 0001:00024fba _CloseHandle@4 10025fba f kernel32:KERNEL32.dll + 0001:00024fc0 _GetTickCount@0 10025fc0 f kernel32:KERNEL32.dll + 0001:00024fc6 _InitializeCriticalSection@4 10025fc6 f kernel32:KERNEL32.dll + 0001:00024fcc _DeleteCriticalSection@4 10025fcc f kernel32:KERNEL32.dll + 0001:00024fd2 _EnterCriticalSection@4 10025fd2 f kernel32:KERNEL32.dll + 0001:00024fd8 _LeaveCriticalSection@4 10025fd8 f kernel32:KERNEL32.dll + 0001:00024fde _RtlUnwind@16 10025fde f kernel32:KERNEL32.dll + 0001:00024fe4 _GetCommandLineA@0 10025fe4 f kernel32:KERNEL32.dll + 0001:00024fea _GetVersion@0 10025fea f kernel32:KERNEL32.dll + 0001:00024ff0 _InterlockedDecrement@4 10025ff0 f kernel32:KERNEL32.dll + 0001:00024ff6 _InterlockedIncrement@4 10025ff6 f kernel32:KERNEL32.dll + 0001:00024ffc _RaiseException@16 10025ffc f kernel32:KERNEL32.dll + 0001:00025002 _IsBadWritePtr@8 10026002 f kernel32:KERNEL32.dll + 0001:00025008 _IsBadReadPtr@8 10026008 f kernel32:KERNEL32.dll + 0001:0002500e _HeapValidate@12 1002600e f kernel32:KERNEL32.dll + 0001:00025014 _DebugBreak@0 10026014 f kernel32:KERNEL32.dll + 0001:0002501a _GetStdHandle@4 1002601a f kernel32:KERNEL32.dll + 0001:00025020 _WriteFile@20 10026020 f kernel32:KERNEL32.dll + 0001:00025026 _OutputDebugStringA@4 10026026 f kernel32:KERNEL32.dll + 0001:0002502c _GetProcAddress@8 1002602c f kernel32:KERNEL32.dll + 0001:00025032 _LoadLibraryA@4 10026032 f kernel32:KERNEL32.dll + 0001:00025038 _GetModuleFileNameA@12 10026038 f kernel32:KERNEL32.dll + 0001:0002503e _ExitProcess@4 1002603e f kernel32:KERNEL32.dll + 0001:00025044 _TerminateProcess@8 10026044 f kernel32:KERNEL32.dll + 0001:0002504a _GetCurrentProcess@0 1002604a f kernel32:KERNEL32.dll + 0001:00025050 _GetCurrentThreadId@0 10026050 f kernel32:KERNEL32.dll + 0001:00025056 _TlsSetValue@8 10026056 f kernel32:KERNEL32.dll + 0001:0002505c _TlsAlloc@0 1002605c f kernel32:KERNEL32.dll + 0001:00025062 _TlsFree@4 10026062 f kernel32:KERNEL32.dll + 0001:00025068 _SetLastError@4 10026068 f kernel32:KERNEL32.dll + 0001:0002506e _TlsGetValue@4 1002606e f kernel32:KERNEL32.dll + 0001:00025074 _GetLastError@0 10026074 f kernel32:KERNEL32.dll + 0001:0002507a _GetCurrentThread@0 1002607a f kernel32:KERNEL32.dll + 0001:00025080 _SetHandleCount@4 10026080 f kernel32:KERNEL32.dll + 0001:00025086 _GetFileType@4 10026086 f kernel32:KERNEL32.dll + 0001:0002508c _GetStartupInfoA@4 1002608c f kernel32:KERNEL32.dll + 0001:00025092 _FreeEnvironmentStringsA@4 10026092 f kernel32:KERNEL32.dll + 0001:00025098 _FreeEnvironmentStringsW@4 10026098 f kernel32:KERNEL32.dll + 0001:0002509e _WideCharToMultiByte@32 1002609e f kernel32:KERNEL32.dll + 0001:000250a4 _GetEnvironmentStrings@0 100260a4 f kernel32:KERNEL32.dll + 0001:000250aa _GetEnvironmentStringsW@0 100260aa f kernel32:KERNEL32.dll + 0001:000250b0 _GetEnvironmentVariableA@12 100260b0 f kernel32:KERNEL32.dll + 0001:000250b6 _GetVersionExA@4 100260b6 f kernel32:KERNEL32.dll + 0001:000250bc _HeapDestroy@4 100260bc f kernel32:KERNEL32.dll + 0001:000250c2 _HeapCreate@12 100260c2 f kernel32:KERNEL32.dll + 0001:000250c8 _HeapFree@12 100260c8 f kernel32:KERNEL32.dll + 0001:000250ce _VirtualFree@12 100260ce f kernel32:KERNEL32.dll + 0001:000250d4 _FlushFileBuffers@4 100260d4 f kernel32:KERNEL32.dll + 0001:000250da _FatalAppExitA@8 100260da f kernel32:KERNEL32.dll + 0001:000250e0 _SetFilePointer@16 100260e0 f kernel32:KERNEL32.dll + 0001:000250e6 _ReadFile@20 100260e6 f kernel32:KERNEL32.dll + 0001:000250ec _Sleep@4 100260ec f kernel32:KERNEL32.dll + 0001:000250f2 _MultiByteToWideChar@24 100260f2 f kernel32:KERNEL32.dll + 0001:000250f8 _LCMapStringA@24 100260f8 f kernel32:KERNEL32.dll + 0001:000250fe _LCMapStringW@24 100260fe f kernel32:KERNEL32.dll + 0001:00025104 _SetUnhandledExceptionFilter@4 10026104 f kernel32:KERNEL32.dll + 0001:0002510a _HeapAlloc@12 1002610a f kernel32:KERNEL32.dll + 0001:00025110 _HeapReAlloc@16 10026110 f kernel32:KERNEL32.dll + 0001:00025116 _VirtualAlloc@16 10026116 f kernel32:KERNEL32.dll + 0001:0002511c _SetConsoleCtrlHandler@8 1002611c f kernel32:KERNEL32.dll + 0001:00025122 _IsBadCodePtr@4 10026122 f kernel32:KERNEL32.dll + 0001:00025128 _UnhandledExceptionFilter@4 10026128 f kernel32:KERNEL32.dll + 0001:0002512e _GetCPInfo@8 1002612e f kernel32:KERNEL32.dll + 0001:00025134 _GetACP@0 10026134 f kernel32:KERNEL32.dll + 0001:0002513a _GetOEMCP@0 1002613a f kernel32:KERNEL32.dll + 0001:00025140 _CreateFileA@28 10026140 f kernel32:KERNEL32.dll + 0001:00025146 _SetStdHandle@8 10026146 f kernel32:KERNEL32.dll + 0001:0002514c _IsValidLocale@8 1002614c f kernel32:KERNEL32.dll + 0001:00025152 _IsValidCodePage@4 10026152 f kernel32:KERNEL32.dll + 0001:00025158 _GetLocaleInfoA@16 10026158 f kernel32:KERNEL32.dll + 0001:0002515e _EnumSystemLocalesA@8 1002615e f kernel32:KERNEL32.dll + 0001:00025164 _GetUserDefaultLCID@0 10026164 f kernel32:KERNEL32.dll + 0001:0002516a _GetStringTypeA@20 1002616a f kernel32:KERNEL32.dll + 0001:00025170 _GetStringTypeW@16 10026170 f kernel32:KERNEL32.dll + 0001:00025176 _CompareStringA@24 10026176 f kernel32:KERNEL32.dll + 0001:0002517c _CompareStringW@24 1002617c f kernel32:KERNEL32.dll + 0001:00025182 _SetEnvironmentVariableA@8 10026182 f kernel32:KERNEL32.dll + 0001:00025188 _SetEndOfFile@4 10026188 f kernel32:KERNEL32.dll + 0001:0002518e _GetTimeZoneInformation@4 1002618e f kernel32:KERNEL32.dll + 0001:00025194 _GetLocaleInfoW@16 10026194 f kernel32:KERNEL32.dll + 0001:0002519a _RegCreateKeyExA@36 1002619a f advapi32:ADVAPI32.dll + 0001:000251a0 _RegCloseKey@4 100261a0 f advapi32:ADVAPI32.dll + 0001:000251a6 _RegOpenKeyExA@20 100261a6 f advapi32:ADVAPI32.dll + 0001:000251ac _RegConnectRegistryA@12 100261ac f advapi32:ADVAPI32.dll + 0001:000251b2 _RegDeleteKeyA@8 100261b2 f advapi32:ADVAPI32.dll + 0001:000251b8 _RegDeleteValueA@8 100261b8 f advapi32:ADVAPI32.dll + 0001:000251be _RegQueryValueExA@24 100261be f advapi32:ADVAPI32.dll + 0001:000251c4 _RegSetValueExA@24 100261c4 f advapi32:ADVAPI32.dll + 0001:000251ca _RegEnumValueA@32 100261ca f advapi32:ADVAPI32.dll + 0001:000251d0 _RegEnumKeyA@16 100261d0 f advapi32:ADVAPI32.dll + 0001:0002530f ?DLLMain@@YGHPAUHINSTANCE__@@KPAX@Z 1002630f f dllmain.obj + 0001:0002538f _setHook@0 1002638f f dllmain.obj + 0001:000253f6 _unHook@0 100263f6 f dllmain.obj + 0001:00025432 ?cbtHookProc@@YGJHIJ@Z 10026432 f dllmain.obj + 0001:00025587 ?handleActive@@YGJIJ@Z 10026587 f dllmain.obj + 0001:00025590 ?handleClickSkipped@@YGJIJ@Z 10026590 f dllmain.obj + 0001:00025599 ?handleCreateWnd@@YGJIJ@Z 10026599 f dllmain.obj + 0001:000257ee ?handleDestroyWnd@@YGJIJ@Z 100267ee f dllmain.obj + 0001:000257f7 ?handleKeySkipped@@YGJIJ@Z 100267f7 f dllmain.obj + 0001:00025800 ?handleMinMax@@YGJIJ@Z 10026800 f dllmain.obj + 0001:00025809 ?handleMoveSize@@YGJIJ@Z 10026809 f dllmain.obj + 0001:00025812 ?handleQs@@YGJIJ@Z 10026812 f dllmain.obj + 0001:0002581b ?handleSetFocus@@YGJIJ@Z 1002681b f dllmain.obj + 0001:00025824 ?handleSysCommand@@YGJIJ@Z 10026824 f dllmain.obj + 0001:0002582d _DllCanUnloadNow@0 1002682d f dllmain.obj + 0001:00025848 _DllUnregisterServer@0 10026848 f dllmain.obj + 0001:00025863 ?validate@@YG_NAAUtagCREATESTRUCTA@@@Z 10026863 f dllmain.obj + 0002:0000001c ??_7Mutex@@6B@ 1003201c dllmain.obj + 0002:00000020 ??_7String@@6B@ 10032020 dllmain.obj + 0002:00000024 ??_7File@@6B@ 10032024 mscommon:File.obj + 0002:00000034 __real@4@00000000000000000000 10032034 mscommon:String.obj + 0002:00000038 __real@8@00000000000000000000 10032038 mscommon:String.obj + 0002:00000040 ??_7?$Container@VString@@@@6B@ 10032040 mscommon:String.obj + 0002:00000044 ??_7SystemTime@@6B@ 10032044 mscommon:Macro.obj + 0002:00000048 ??_7DiskInfo@@6B@ 10032048 mscommon:Macro.obj + 0002:0000004c ??_7FindData@@6B@ 1003204c mscommon:Macro.obj + 0002:00000050 ??_7RegSam@@6B@ 10032050 mscommon:Macro.obj + 0002:00000054 ??_7?$Block@VString@@@@6B@ 10032054 mscommon:Macro.obj + 0002:00000058 ??_7BoundaryError@@6B@ 10032058 mscommon:Macro.obj + 0002:00000060 ??_7Exception@@6B@ 10032060 mscommon:Macro.obj + 0002:00000068 ??_7RegKey@@6B@ 10032068 mscommon:Regkey.obj + 0002:0000006c ??_7PostFix@@6B@ 1003206c msthread:Mutex.obj + 0002:00000074 ??_7ostream@@6B@ 10032074 libcimtd:ostream.obj + 0002:00000078 ??_8ostream@@7B@ 10032078 libcimtd:ostream.obj + 0002:00000084 ??_7ostream_withassign@@6B@ 10032084 libcimtd:ostream.obj + 0002:00000088 ??_8ostream_withassign@@7B@ 10032088 libcimtd:ostream.obj + 0002:00000094 ??_7istream@@6B@ 10032094 libcimtd:istream.obj + 0002:00000098 ??_8istream@@7B@ 10032098 libcimtd:istream.obj + 0002:000000a4 ??_7istream_withassign@@6B@ 100320a4 libcimtd:istream.obj + 0002:000000a8 ??_8istream_withassign@@7B@ 100320a8 libcimtd:istream.obj + 0002:000000b0 ?basefield@ios@@2JB 100320b0 libcimtd:_ios.obj + 0002:000000b4 ?adjustfield@ios@@2JB 100320b4 libcimtd:_ios.obj + 0002:000000b8 ?floatfield@ios@@2JB 100320b8 libcimtd:_ios.obj + 0002:000000c0 ??_7ios@@6B@ 100320c0 libcimtd:_ios.obj + 0002:000000c4 ??_C@_0O@FHMD@i386?2chkesp?4c?$AA@ 100320c4 LIBCMTD:chkesp.obj + 0002:000000d4 ??_C@_0NM@ELEE@The?5value?5of?5ESP?5was?5not?5properl@ 100320d4 LIBCMTD:chkesp.obj + 0002:000001b0 ??_C@_08CEA@onexit?4c?$AA@ 100321b0 LIBCMTD:onexit.obj + 0002:000001bc ??_C@_08GNFC@printf?4c?$AA@ 100321bc LIBCMTD:printf.obj + 0002:000001c8 ??_C@_0P@LNLA@format?5?$CB?$DN?5NULL?$AA@ 100321c8 LIBCMTD:printf.obj + 0002:000001d8 ??_C@_09NEAG@sprintf?4c?$AA@ 100321d8 LIBCMTD:sprintf.obj + 0002:000001e4 ??_C@_0P@OOIN@string?5?$CB?$DN?5NULL?$AA@ 100321e4 LIBCMTD:sprintf.obj + 0002:000001f4 ??_C@_0BC@IPFL@?$CKmode?5?$CB?$DN?5_T?$CI?8?20?8?$CJ?$AA@ 100321f4 LIBCMTD:fopen.obj + 0002:00000208 ??_C@_0N@BKPP@mode?5?$CB?$DN?5NULL?$AA@ 10032208 LIBCMTD:fopen.obj + 0002:00000218 ??_C@_0BC@GOED@?$CKfile?5?$CB?$DN?5_T?$CI?8?20?8?$CJ?$AA@ 10032218 LIBCMTD:fopen.obj + 0002:0000022c ??_C@_07OMGG@fopen?4c?$AA@ 1003222c LIBCMTD:fopen.obj + 0002:00000234 ??_C@_0N@MCKG@file?5?$CB?$DN?5NULL?$AA@ 10032234 LIBCMTD:fopen.obj + 0002:00000244 ??_C@_08PHBD@fclose?4c?$AA@ 10032244 LIBCMTD:fclose.obj + 0002:00000250 ??_C@_0P@FHEA@stream?5?$CB?$DN?5NULL?$AA@ 10032250 LIBCMTD:fclose.obj + 0002:00000260 ??_C@_0M@KJPK@str?5?$CB?$DN?5NULL?$AA@ 10032260 LIBCMTD:fclose.obj + 0002:0000026c ??_C@_08KGLM@rewind?4c?$AA@ 1003226c LIBCMTD:rewind.obj + 0002:00000278 ??_C@_07HFEM@fseek?4c?$AA@ 10032278 LIBCMTD:fseek.obj + 0002:00000284 ??_7type_info@@6B@ 10032284 LIBCMTD:typinfo.obj + 0002:000002a8 ??_C@_06DPMO@Client?$AA@ 100322a8 LIBCMTD:dbgheap.obj + 0002:000002b0 ??_C@_06BAFM@Ignore?$AA@ 100322b0 LIBCMTD:dbgheap.obj + 0002:000002b8 ??_C@_03DICE@CRT?$AA@ 100322b8 LIBCMTD:dbgheap.obj + 0002:000002bc ??_C@_06BILL@Normal?$AA@ 100322bc LIBCMTD:dbgheap.obj + 0002:000002c4 ??_C@_04NEN@Free?$AA@ 100322c4 LIBCMTD:dbgheap.obj + 0002:000002dc ??_C@_0DC@CGID@Error?3?5memory?5allocation?3?5bad?5me@ 100322dc LIBCMTD:dbgheap.obj + 0002:00000310 ??_C@_0CE@FMIA@Invalid?5allocation?5size?3?5?$CFu?5byte@ 10032310 LIBCMTD:dbgheap.obj + 0002:00000334 ??_C@_02DILL@?$CFs?$AA@ 10032334 LIBCMTD:dbgheap.obj + 0002:00000338 ??_C@_0CB@CPBI@Client?5hook?5allocation?5failure?4?6@ 10032338 LIBCMTD:dbgheap.obj + 0002:0000035c ??_C@_0DF@DKHF@Client?5hook?5allocation?5failure?5a@ 1003235c LIBCMTD:dbgheap.obj + 0002:00000394 ??_C@_09IMJC@dbgheap?4c?$AA@ 10032394 LIBCMTD:dbgheap.obj + 0002:000003a0 ??_C@_0BC@EPKL@_CrtCheckMemory?$CI?$CJ?$AA@ 100323a0 LIBCMTD:dbgheap.obj + 0002:000003c4 ??_C@_0BK@JDHA@_pFirstBlock?5?$DN?$DN?5pOldBlock?$AA@ 100323c4 LIBCMTD:dbgheap.obj + 0002:000003e0 ??_C@_0BJ@NMEF@_pLastBlock?5?$DN?$DN?5pOldBlock?$AA@ 100323e0 LIBCMTD:dbgheap.obj + 0002:000003fc ??_C@_0DC@BOCN@fRealloc?5?$HM?$HM?5?$CI?$CBfRealloc?5?$CG?$CG?5pNewBl@ 100323fc LIBCMTD:dbgheap.obj + 0002:00000430 ??_C@_0DK@DKOM@_BLOCK_TYPE?$CIpOldBlock?9?$DOnBlockUse@ 10032430 LIBCMTD:dbgheap.obj + 0002:0000046c ??_C@_0EF@EDKM@pOldBlock?9?$DOnLine?5?$DN?$DN?5IGNORE_LINE?5@ 1003246c LIBCMTD:dbgheap.obj + 0002:000004b4 ??_C@_0CC@GPMO@_CrtIsValidHeapPointer?$CIpUserData@ 100324b4 LIBCMTD:dbgheap.obj + 0002:000004d8 ??_C@_0CN@FHGE@Allocation?5too?5large?5or?5negative@ 100324d8 LIBCMTD:dbgheap.obj + 0002:00000508 ??_C@_0CE@EAMN@Client?5hook?5re?9allocation?5failur@ 10032508 LIBCMTD:dbgheap.obj + 0002:0000052c ??_C@_0DI@KKMM@Client?5hook?5re?9allocation?5failur@ 1003252c LIBCMTD:dbgheap.obj + 0002:00000584 ??_C@_0BG@JCEC@_pFirstBlock?5?$DN?$DN?5pHead?$AA@ 10032584 LIBCMTD:dbgheap.obj + 0002:0000059c ??_C@_0BF@NLNN@_pLastBlock?5?$DN?$DN?5pHead?$AA@ 1003259c LIBCMTD:dbgheap.obj + 0002:000005b4 ??_C@_0BO@PLHH@pHead?9?$DOnBlockUse?5?$DN?$DN?5nBlockUse?$AA@ 100325b4 LIBCMTD:dbgheap.obj + 0002:000005d4 ??_C@_0DN@KKIO@pHead?9?$DOnLine?5?$DN?$DN?5IGNORE_LINE?5?$CG?$CG?5p@ 100325d4 LIBCMTD:dbgheap.obj + 0002:00000614 ??_C@_0CK@OJNB@DAMAGE?3?5after?5?$CFhs?5block?5?$CI?$CD?$CFd?$CJ?5at@ 10032614 LIBCMTD:dbgheap.obj + 0002:00000640 ??_C@_0CL@IJIL@DAMAGE?3?5before?5?$CFhs?5block?5?$CI?$CD?$CFd?$CJ?5a@ 10032640 LIBCMTD:dbgheap.obj + 0002:0000066c ??_C@_0CH@PHOC@_BLOCK_TYPE_IS_VALID?$CIpHead?9?$DOnBlo@ 1003266c LIBCMTD:dbgheap.obj + 0002:00000694 ??_C@_0BL@MBNA@Client?5hook?5free?5failure?4?6?$AA@ 10032694 LIBCMTD:dbgheap.obj + 0002:000006cc ??_C@_0DK@EKKL@memory?5check?5error?5at?50x?$CF08X?5?$DN?50@ 100326cc LIBCMTD:dbgheap.obj + 0002:00000708 ??_C@_0CJ@GCII@?$CFhs?5located?5at?50x?$CF08X?5is?5?$CFu?5byte@ 10032708 LIBCMTD:dbgheap.obj + 0002:00000734 ??_C@_0CA@EJPI@?$CFhs?5allocated?5at?5file?5?$CFhs?$CI?$CFd?$CJ?4?6?$AA@ 10032734 LIBCMTD:dbgheap.obj + 0002:00000754 ??_C@_0CJ@LHHG@DAMAGE?3?5on?5top?5of?5Free?5block?5at?5@ 10032754 LIBCMTD:dbgheap.obj + 0002:00000780 ??_C@_07GJHM@DAMAGED?$AA@ 10032780 LIBCMTD:dbgheap.obj + 0002:00000788 ??_C@_0CL@ODIE@_heapchk?5fails?5with?5unknown?5retu@ 10032788 LIBCMTD:dbgheap.obj + 0002:000007b4 ??_C@_0CC@EHNC@_heapchk?5fails?5with?5_HEAPBADPTR?4@ 100327b4 LIBCMTD:dbgheap.obj + 0002:000007d8 ??_C@_0CC@JNDP@_heapchk?5fails?5with?5_HEAPBADEND?4@ 100327d8 LIBCMTD:dbgheap.obj + 0002:000007fc ??_C@_0CD@DNMG@_heapchk?5fails?5with?5_HEAPBADNODE@ 100327fc LIBCMTD:dbgheap.obj + 0002:00000820 ??_C@_0CE@JMCB@_heapchk?5fails?5with?5_HEAPBADBEGI@ 10032820 LIBCMTD:dbgheap.obj + 0002:00000874 ??_C@_0CD@MEMI@Bad?5memory?5block?5found?5at?50x?$CF08X@ 10032874 LIBCMTD:dbgheap.obj + 0002:00000898 ??_C@_0CI@GMAO@_CrtMemCheckPoint?3?5NULL?5state?5po@ 10032898 LIBCMTD:dbgheap.obj + 0002:000008cc ??_C@_0CI@MNAE@_CrtMemDifference?3?5NULL?5state?5po@ 100328cc LIBCMTD:dbgheap.obj + 0002:000008f4 ??_C@_0BH@PKIJ@Object?5dump?5complete?4?6?$AA@ 100328f4 LIBCMTD:dbgheap.obj + 0002:0000090c ??_C@_0DB@DBPF@crt?5block?5at?50x?$CF08X?0?5subtype?5?$CFx?0@ 1003290c LIBCMTD:dbgheap.obj + 0002:00000940 ??_C@_0CI@JLM@normal?5block?5at?50x?$CF08X?0?5?$CFu?5bytes@ 10032940 LIBCMTD:dbgheap.obj + 0002:00000968 ??_C@_0DE@PFEA@client?5block?5at?50x?$CF08X?0?5subtype?5@ 10032968 LIBCMTD:dbgheap.obj + 0002:0000099c ??_C@_06MBCE@?$HL?$CFld?$HN?5?$AA@ 1003299c LIBCMTD:dbgheap.obj + 0002:000009a4 ??_C@_0L@BLDJ@?$CFhs?$CI?$CFd?$CJ?5?3?5?$AA@ 100329a4 LIBCMTD:dbgheap.obj + 0002:000009b0 ??_C@_0BE@FEMA@?$CDFile?5Error?$CD?$CI?$CFd?$CJ?5?3?5?$AA@ 100329b0 LIBCMTD:dbgheap.obj + 0002:000009c4 ??_C@_0BE@FPPM@Dumping?5objects?5?9?$DO?6?$AA@ 100329c4 LIBCMTD:dbgheap.obj + 0002:000009e4 ??_C@_0BA@POLM@?5Data?3?5?$DM?$CFs?$DO?5?$CFs?6?$AA@ 100329e4 LIBCMTD:dbgheap.obj + 0002:000009f4 ??_C@_05JLAO@?$CF?42X?5?$AA@ 100329f4 LIBCMTD:dbgheap.obj + 0002:000009fc ??_C@_0BI@KONA@Detected?5memory?5leaks?$CB?6?$AA@ 100329fc LIBCMTD:dbgheap.obj + 0002:00000a14 ??_C@_0BP@LCCN@Total?5allocations?3?5?$CFld?5bytes?4?6?$AA@ 10032a14 LIBCMTD:dbgheap.obj + 0002:00000a34 ??_C@_0CB@COID@Largest?5number?5used?3?5?$CFld?5bytes?4?6@ 10032a34 LIBCMTD:dbgheap.obj + 0002:00000a58 ??_C@_0BO@MEJD@?$CFld?5bytes?5in?5?$CFld?5?$CFhs?5Blocks?4?6?$AA@ 10032a58 LIBCMTD:dbgheap.obj + 0002:00000a78 ??_C@_07HPAH@_file?4c?$AA@ 10032a78 LIBCMTD:_file.obj + 0002:00000a80 ??_C@_0BB@BLL@Assertion?5Failed?$AA@ 10032a80 LIBCMTD:dbgrpt.obj + 0002:00000a94 ??_C@_05CKBG@Error?$AA@ 10032a94 LIBCMTD:dbgrpt.obj + 0002:00000a9c ??_C@_07JCGI@Warning?$AA@ 10032a9c LIBCMTD:dbgrpt.obj + 0002:00000aa4 ??_C@_0M@ODEP@?$CFs?$CI?$CFd?$CJ?5?3?5?$CFs?$AA@ 10032aa4 LIBCMTD:dbgrpt.obj + 0002:00000ab0 ??_C@_01BJG@?6?$AA@ 10032ab0 LIBCMTD:dbgrpt.obj + 0002:00000ab4 ??_C@_01FEHD@?$AN?$AA@ 10032ab4 LIBCMTD:dbgrpt.obj + 0002:00000ab8 ??_C@_0BC@OIMC@Assertion?5failed?$CB?$AA@ 10032ab8 LIBCMTD:dbgrpt.obj + 0002:00000acc ??_C@_0BD@BEAK@Assertion?5failed?3?5?$AA@ 10032acc LIBCMTD:dbgrpt.obj + 0002:00000ae0 ??_C@_0CL@LCCP@_CrtDbgReport?3?5String?5too?5long?5o@ 10032ae0 LIBCMTD:dbgrpt.obj + 0002:00000b0c ??_C@_0DC@EMDK@Second?5Chance?5Assertion?5Failed?3?5@ 10032b0c LIBCMTD:dbgrpt.obj + 0002:00000b40 ??_C@_09NJAK@wsprintfA?$AA@ 10032b40 LIBCMTD:dbgrpt.obj + 0002:00000b4c ??_C@_0L@HKL@user32?4dll?$AA@ 10032b4c LIBCMTD:dbgrpt.obj + 0002:00000b58 ??_C@_0CD@GCMD@Microsoft?5Visual?5C?$CL?$CL?5Debug?5Libra@ 10032b58 LIBCMTD:dbgrpt.obj + 0002:00000b7c ??_C@_0FD@EBDD@Debug?5?$CFs?$CB?6?6Program?3?5?$CFs?$CFs?$CFs?$CFs?$CFs?$CFs@ 10032b7c LIBCMTD:dbgrpt.obj + 0002:00000bd0 ??_C@_09DCKN@?6Module?3?5?$AA@ 10032bd0 LIBCMTD:dbgrpt.obj + 0002:00000bdc ??_C@_07HJII@?6File?3?5?$AA@ 10032bdc LIBCMTD:dbgrpt.obj + 0002:00000be4 ??_C@_07LFGN@?6Line?3?5?$AA@ 10032be4 LIBCMTD:dbgrpt.obj + 0002:00000bec ??_C@_02JJJH@?6?6?$AA@ 10032bec LIBCMTD:dbgrpt.obj + 0002:00000bf0 ??_C@_0N@NOAB@Expression?3?5?$AA@ 10032bf0 LIBCMTD:dbgrpt.obj + 0002:00000c00 ??_C@_0HD@BHFH@?6?6For?5information?5on?5how?5your?5pr@ 10032c00 LIBCMTD:dbgrpt.obj + 0002:00000c74 ??_C@_03NAME@?4?4?4?$AA@ 10032c74 LIBCMTD:dbgrpt.obj + 0002:00000c78 ??_C@_0BH@NNCD@?$DMprogram?5name?5unknown?$DO?$AA@ 10032c78 LIBCMTD:dbgrpt.obj + 0002:00000c90 ??_C@_08GFHP@dbgrpt?4c?$AA@ 10032c90 LIBCMTD:dbgrpt.obj + 0002:00000c9c ??_C@_0BG@FBEA@szUserMessage?5?$CB?$DN?5NULL?$AA@ 10032c9c LIBCMTD:dbgrpt.obj + 0002:00000cfc ??_C@_0L@ENLJ@tidtable?4c?$AA@ 10032cfc LIBCMTD:tidtable.obj + 0002:00000d38 ??_C@_09JNND@_sftbuf?4c?$AA@ 10032d38 LIBCMTD:_sftbuf.obj + 0002:00000d44 ??_C@_0BH@EOPG@flag?5?$DN?$DN?50?5?$HM?$HM?5flag?5?$DN?$DN?51?$AA@ 10032d44 LIBCMTD:_sftbuf.obj + 0002:00000d5c ___lookuptable 10032d5c LIBCMTD:output.obj + 0002:00000db8 ??_C@_1O@POHA@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 10032db8 LIBCMTD:output.obj + 0002:00000dc8 ??_C@_06ONKE@?$CInull?$CJ?$AA@ 10032dc8 LIBCMTD:output.obj + 0002:00000dd0 ??_C@_08MIHI@output?4c?$AA@ 10032dd0 LIBCMTD:output.obj + 0002:00000ddc ??_C@_0P@PIHB@ch?5?$CB?$DN?5_T?$CI?8?20?8?$CJ?$AA@ 10032ddc LIBCMTD:output.obj + 0002:00000dec ??_C@_0DP@IHIN@?$CI?$CCinconsistent?5IOB?5fields?$CC?0?5stre@ 10032dec LIBCMTD:_flsbuf.obj + 0002:00000e2c ??_C@_09LGEI@_flsbuf?4c?$AA@ 10032e2c LIBCMTD:_flsbuf.obj + 0002:00000e38 ??_C@_08KFDJ@ioinit?4c?$AA@ 10032e38 LIBCMTD:ioinit.obj + 0002:00000e44 ??_C@_09IGKD@stdenvp?4c?$AA@ 10032e44 LIBCMTD:stdenvp.obj + 0002:00000e50 ??_C@_09MPMN@stdargv?4c?$AA@ 10032e50 LIBCMTD:stdargv.obj + 0002:00000e5c ??_C@_07BNNE@a_env?4c?$AA@ 10032e5c LIBCMTD:a_env.obj + 0002:00000e64 ??_C@_0BH@PHHF@__GLOBAL_HEAP_SELECTED?$AA@ 10032e64 LIBCMTD:heapinit.obj + 0002:00000e7c ??_C@_0BF@BBGL@__MSVCRT_HEAP_SELECT?$AA@ 10032e7c LIBCMTD:heapinit.obj + 0002:00000e94 ??_C@_0P@GGKG@runtime?5error?5?$AA@ 10032e94 LIBCMTD:crt0msg.obj + 0002:00000ea4 ??_C@_02PIMC@?$AN?6?$AA@ 10032ea4 LIBCMTD:crt0msg.obj + 0002:00000ea8 ??_C@_0O@DELO@TLOSS?5error?$AN?6?$AA@ 10032ea8 LIBCMTD:crt0msg.obj + 0002:00000eb8 ??_C@_0N@OMLL@SING?5error?$AN?6?$AA@ 10032eb8 LIBCMTD:crt0msg.obj + 0002:00000ec8 ??_C@_0P@OJAK@DOMAIN?5error?$AN?6?$AA@ 10032ec8 LIBCMTD:crt0msg.obj + 0002:00000ed8 ??_C@_0CF@EANP@R6028?$AN?6?9?5unable?5to?5initialize?5he@ 10032ed8 LIBCMTD:crt0msg.obj + 0002:00000f00 ??_C@_0DF@ECGN@R6027?$AN?6?9?5not?5enough?5space?5for?5lo@ 10032f00 LIBCMTD:crt0msg.obj + 0002:00000f38 ??_C@_0DF@FKAC@R6026?$AN?6?9?5not?5enough?5space?5for?5st@ 10032f38 LIBCMTD:crt0msg.obj + 0002:00000f70 ??_C@_0CG@DPMN@R6025?$AN?6?9?5pure?5virtual?5function?5c@ 10032f70 LIBCMTD:crt0msg.obj + 0002:00000f98 ??_C@_0DF@CKIP@R6024?$AN?6?9?5not?5enough?5space?5for?5_o@ 10032f98 LIBCMTD:crt0msg.obj + 0002:00000fd0 ??_C@_0CJ@GGOE@R6019?$AN?6?9?5unable?5to?5open?5console?5@ 10032fd0 LIBCMTD:crt0msg.obj + 0002:00000ffc ??_C@_0CB@LBOB@R6018?$AN?6?9?5unexpected?5heap?5error?$AN?6@ 10032ffc LIBCMTD:crt0msg.obj + 0002:00001020 ??_C@_0CN@FPEG@R6017?$AN?6?9?5unexpected?5multithread?5@ 10033020 LIBCMTD:crt0msg.obj + 0002:00001050 ??_C@_0CM@OBIC@R6016?$AN?6?9?5not?5enough?5space?5for?5th@ 10033050 LIBCMTD:crt0msg.obj + 0002:0000107c ??_C@_0CB@HPAL@?$AN?6abnormal?5program?5termination?$AN?6@ 1003307c LIBCMTD:crt0msg.obj + 0002:000010a0 ??_C@_0CM@JOOB@R6009?$AN?6?9?5not?5enough?5space?5for?5en@ 100330a0 LIBCMTD:crt0msg.obj + 0002:000010cc ??_C@_0CK@OIBL@R6008?$AN?6?9?5not?5enough?5space?5for?5ar@ 100330cc LIBCMTD:crt0msg.obj + 0002:000010f8 ??_C@_0CF@LKPB@R6002?$AN?6?9?5floating?5point?5not?5load@ 100330f8 LIBCMTD:crt0msg.obj + 0002:00001120 ??_C@_0CF@JPDF@Microsoft?5Visual?5C?$CL?$CL?5Runtime?5Lib@ 10033120 LIBCMTD:crt0msg.obj + 0002:00001148 ??_C@_0BK@DEOK@Runtime?5Error?$CB?6?6Program?3?5?$AA@ 10033148 LIBCMTD:crt0msg.obj + 0002:00001164 ??_C@_07INLA@_open?4c?$AA@ 10033164 LIBCMTD:_open.obj + 0002:0000116c ??_C@_0BB@COCE@filename?5?$CB?$DN?5NULL?$AA@ 1003316c LIBCMTD:_open.obj + 0002:00001180 ??_C@_08HJEP@stream?4c?$AA@ 10033180 LIBCMTD:stream.obj + 0002:0000118c ??_C@_0L@JIE@_freebuf?4c?$AA@ 1003318c LIBCMTD:_freebuf.obj + 0002:00001198 ??_C@_07PDLA@mlock?4c?$AA@ 10033198 LIBCMTD:mlock.obj + 0002:000011a0 ??_C@_0L@JOEJ@ftelli64?4c?$AA@ 100331a0 LIBCMTD:ftelli64.obj + 0002:000011ac ??_C@_07CMIP@ftell?4c?$AA@ 100331ac LIBCMTD:ftell.obj + 0002:000011b4 ??_C@_09DNOI@_filbuf?4c?$AA@ 100331b4 LIBCMTD:_filbuf.obj + 0002:000011c0 ??_C@_07PCLE@LC_TIME?$AA@ 100331c0 LIBCMTD:setlocal.obj + 0002:000011c8 ??_C@_0L@NKG@LC_NUMERIC?$AA@ 100331c8 LIBCMTD:setlocal.obj + 0002:000011d4 ??_C@_0M@CBIH@LC_MONETARY?$AA@ 100331d4 LIBCMTD:setlocal.obj + 0002:000011e0 ??_C@_08LFGE@LC_CTYPE?$AA@ 100331e0 LIBCMTD:setlocal.obj + 0002:000011ec ??_C@_0L@CFLC@LC_COLLATE?$AA@ 100331ec LIBCMTD:setlocal.obj + 0002:000011f8 ??_C@_06GCPK@LC_ALL?$AA@ 100331f8 LIBCMTD:setlocal.obj + 0002:00001200 ??_C@_01FAJB@?$DL?$AA@ 10033200 LIBCMTD:setlocal.obj + 0002:00001204 ??_C@_02BGDO@?$DN?$DL?$AA@ 10033204 LIBCMTD:setlocal.obj + 0002:00001208 ??_C@_0L@MOEE@setlocal?4c?$AA@ 10033208 LIBCMTD:setlocal.obj + 0002:00001214 ??_C@_01KPOD@?$DN?$AA@ 10033214 LIBCMTD:setlocal.obj + 0002:00001218 ??_C@_03DBOJ@_?4?0?$AA@ 10033218 LIBCMTD:setlocal.obj + 0002:0000121c ??_C@_01PJCK@?4?$AA@ 1003321c LIBCMTD:setlocal.obj + 0002:00001220 ??_C@_01NON@_?$AA@ 10033220 LIBCMTD:setlocal.obj + 0002:00001224 ??_C@_01A@?$AA?$AA@ 10033224 LIBCMTD:a_map.obj + 0002:00001228 ??_C@_13A@?$AA?$AA?$AA?$AA@ 10033228 LIBCMTD:a_map.obj + 0002:00001248 __real@8@3fff8000000000000000 10033248 LIBCMTD:testfdiv.obj + 0002:00001250 ??_C@_0BK@JEGK@IsProcessorFeaturePresent?$AA@ 10033250 LIBCMTD:testfdiv.obj + 0002:0000126c ??_C@_08OBID@KERNEL32?$AA@ 1003326c LIBCMTD:testfdiv.obj + 0002:00001278 ??_C@_05OFLO@e?$CL000?$AA@ 10033278 LIBCMTD:cvt.obj + 0002:00001280 ??_C@_0L@EJNO@wtombenv?4c?$AA@ 10033280 LIBCMTD:wtombenv.obj + 0002:00001308 ??_C@_0L@HE@vsprintf?4c?$AA@ 10033308 LIBCMTD:vsnprint.obj + 0002:00001314 ??_C@_08CNMA@winsig?4c?$AA@ 10033314 LIBCMTD:winsig.obj + 0002:00001320 ??_C@_0BD@NJFP@GetLastActivePopup?$AA@ 10033320 LIBCMTD:crtmbox.obj + 0002:00001334 ??_C@_0BA@GILI@GetActiveWindow?$AA@ 10033334 LIBCMTD:crtmbox.obj + 0002:00001344 ??_C@_0M@PKCK@MessageBoxA?$AA@ 10033344 LIBCMTD:crtmbox.obj + 0002:00001350 ??_C@_09EMDO@_getbuf?4c?$AA@ 10033350 LIBCMTD:_getbuf.obj + 0002:0000135c ??_C@_09LNLM@osfinfo?4c?$AA@ 1003335c LIBCMTD:osfinfo.obj + 0002:00001368 ??_C@_0L@EEGJ@inittime?4c?$AA@ 10033368 LIBCMTD:inittime.obj + 0002:00001374 ??_C@_09IMJJ@initnum?4c?$AA@ 10033374 LIBCMTD:initnum.obj + 0002:00001380 ??_C@_09KPNI@initmon?4c?$AA@ 10033380 LIBCMTD:initmon.obj + 0002:0000138c ??_C@_0L@COIL@initctyp?4c?$AA@ 1003338c LIBCMTD:initctyp.obj + 0002:00001398 ??_C@_08OBJD@Paraguay?$AA@ 10033398 LIBCMTD:getqloc.obj + 0002:000013a4 ??_C@_07GLKH@Uruguay?$AA@ 100333a4 LIBCMTD:getqloc.obj + 0002:000013ac ??_C@_05FPFC@Chile?$AA@ 100333ac LIBCMTD:getqloc.obj + 0002:000013b4 ??_C@_07IIGF@Ecuador?$AA@ 100333b4 LIBCMTD:getqloc.obj + 0002:000013bc ??_C@_09PKAL@Argentina?$AA@ 100333bc LIBCMTD:getqloc.obj + 0002:000013c8 ??_C@_04LKAH@Peru?$AA@ 100333c8 LIBCMTD:getqloc.obj + 0002:000013d0 ??_C@_08NEEM@Colombia?$AA@ 100333d0 LIBCMTD:getqloc.obj + 0002:000013dc ??_C@_09ODEB@Venezuela?$AA@ 100333dc LIBCMTD:getqloc.obj + 0002:000013e8 ??_C@_0BD@CLEL@Dominican?5Republic?$AA@ 100333e8 LIBCMTD:getqloc.obj + 0002:000013fc ??_C@_0N@MDGL@South?5Africa?$AA@ 100333fc LIBCMTD:getqloc.obj + 0002:0000140c ??_C@_06NKBG@Panama?$AA@ 1003340c LIBCMTD:getqloc.obj + 0002:00001414 ??_C@_0L@BMHO@Luxembourg?$AA@ 10033414 LIBCMTD:getqloc.obj + 0002:00001420 ??_C@_0L@IMDK@Costa?5Rica?$AA@ 10033420 LIBCMTD:getqloc.obj + 0002:0000142c ??_C@_0M@BLJF@Switzerland?$AA@ 1003342c LIBCMTD:getqloc.obj + 0002:00001438 ??_C@_09KBOL@Guatemala?$AA@ 10033438 LIBCMTD:getqloc.obj + 0002:00001444 ??_C@_06JNAK@Canada?$AA@ 10033444 LIBCMTD:getqloc.obj + 0002:0000144c ??_C@_0BG@OLLP@Spanish?5?9?5Modern?5Sort?$AA@ 1003344c LIBCMTD:getqloc.obj + 0002:00001464 ??_C@_09IDKE@Australia?$AA@ 10033464 LIBCMTD:getqloc.obj + 0002:00001470 ??_C@_07JJJJ@English?$AA@ 10033470 LIBCMTD:getqloc.obj + 0002:00001478 ??_C@_07NMDO@Austria?$AA@ 10033478 LIBCMTD:getqloc.obj + 0002:00001480 ??_C@_06DEFE@German?$AA@ 10033480 LIBCMTD:getqloc.obj + 0002:00001488 ??_C@_07JAIH@Belgium?$AA@ 10033488 LIBCMTD:getqloc.obj + 0002:00001490 ??_C@_06BNLJ@Mexico?$AA@ 10033490 LIBCMTD:getqloc.obj + 0002:00001498 ??_C@_07JHAG@Spanish?$AA@ 10033498 LIBCMTD:getqloc.obj + 0002:000014a0 ??_C@_06DADE@Basque?$AA@ 100334a0 LIBCMTD:getqloc.obj + 0002:000014a8 ??_C@_06ENFP@Sweden?$AA@ 100334a8 LIBCMTD:getqloc.obj + 0002:000014b0 ??_C@_07JPMH@Swedish?$AA@ 100334b0 LIBCMTD:getqloc.obj + 0002:000014b8 ??_C@_07IEKF@Iceland?$AA@ 100334b8 LIBCMTD:getqloc.obj + 0002:000014c0 ??_C@_09KNEA@Icelandic?$AA@ 100334c0 LIBCMTD:getqloc.obj + 0002:000014cc ??_C@_06IJOD@France?$AA@ 100334cc LIBCMTD:getqloc.obj + 0002:000014d4 ??_C@_06EINI@French?$AA@ 100334d4 LIBCMTD:getqloc.obj + 0002:000014dc ??_C@_07FOOE@Finland?$AA@ 100334dc LIBCMTD:getqloc.obj + 0002:000014e4 ??_C@_07OJOM@Finnish?$AA@ 100334e4 LIBCMTD:getqloc.obj + 0002:000014ec ??_C@_05FFAC@Spain?$AA@ 100334ec LIBCMTD:getqloc.obj + 0002:000014f4 ??_C@_0BL@BIHM@Spanish?5?9?5Traditional?5Sort?$AA@ 100334f4 LIBCMTD:getqloc.obj + 0002:00001510 ??_C@_0O@GLHB@united?9states?$AA@ 10033510 LIBCMTD:getqloc.obj + 0002:00001520 ??_C@_0P@IIKK@united?9kingdom?$AA@ 10033520 LIBCMTD:getqloc.obj + 0002:00001530 ??_C@_0BC@FHBO@trinidad?5?$CG?5tobago?$AA@ 10033530 LIBCMTD:getqloc.obj + 0002:00001544 ??_C@_0M@BDFM@south?9korea?$AA@ 10033544 LIBCMTD:getqloc.obj + 0002:00001550 ??_C@_0N@CKFA@south?9africa?$AA@ 10033550 LIBCMTD:getqloc.obj + 0002:00001560 ??_C@_0M@HNHN@south?5korea?$AA@ 10033560 LIBCMTD:getqloc.obj + 0002:0000156c ??_C@_0N@MKDO@south?5africa?$AA@ 1003356c LIBCMTD:getqloc.obj + 0002:0000157c ??_C@_06KFFJ@slovak?$AA@ 1003357c LIBCMTD:getqloc.obj + 0002:00001584 ??_C@_0M@NMAC@puerto?9rico?$AA@ 10033584 LIBCMTD:getqloc.obj + 0002:00001590 ??_C@_08EJOH@pr?9china?$AA@ 10033590 LIBCMTD:getqloc.obj + 0002:0000159c ??_C@_08CHMG@pr?5china?$AA@ 1003359c LIBCMTD:getqloc.obj + 0002:000015a8 ??_C@_02OCJK@nz?$AA@ 100335a8 LIBCMTD:getqloc.obj + 0002:000015ac ??_C@_0M@MMKA@new?9zealand?$AA@ 100335ac LIBCMTD:getqloc.obj + 0002:000015b8 ??_C@_09MGEH@hong?9kong?$AA@ 100335b8 LIBCMTD:getqloc.obj + 0002:000015c4 ??_C@_07CCAK@holland?$AA@ 100335c4 LIBCMTD:getqloc.obj + 0002:000015cc ??_C@_0O@MEPL@great?5britain?$AA@ 100335cc LIBCMTD:getqloc.obj + 0002:000015dc ??_C@_07LGIB@england?$AA@ 100335dc LIBCMTD:getqloc.obj + 0002:000015e4 ??_C@_05BMOA@czech?$AA@ 100335e4 LIBCMTD:getqloc.obj + 0002:000015ec ??_C@_05NMPB@china?$AA@ 100335ec LIBCMTD:getqloc.obj + 0002:000015f4 ??_C@_07GN@britain?$AA@ 100335f4 LIBCMTD:getqloc.obj + 0002:000015fc ??_C@_07DLAK@america?$AA@ 100335fc LIBCMTD:getqloc.obj + 0002:00001604 ??_C@_03IPEP@usa?$AA@ 10033604 LIBCMTD:getqloc.obj + 0002:00001608 ??_C@_02PILH@us?$AA@ 10033608 LIBCMTD:getqloc.obj + 0002:0000160c ??_C@_02FHP@uk?$AA@ 1003360c LIBCMTD:getqloc.obj + 0002:00001610 ??_C@_05DEAI@swiss?$AA@ 10033610 LIBCMTD:getqloc.obj + 0002:00001618 ??_C@_0BA@LIAF@swedish?9finland?$AA@ 10033618 LIBCMTD:getqloc.obj + 0002:00001628 ??_C@_0BC@FMEG@spanish?9venezuela?$AA@ 10033628 LIBCMTD:getqloc.obj + 0002:0000163c ??_C@_0BA@BNMG@spanish?9uruguay?$AA@ 1003363c LIBCMTD:getqloc.obj + 0002:0000164c ??_C@_0BE@BKDJ@spanish?9puerto?5rico?$AA@ 1003364c LIBCMTD:getqloc.obj + 0002:00001660 ??_C@_0N@JIBL@spanish?9peru?$AA@ 10033660 LIBCMTD:getqloc.obj + 0002:00001670 ??_C@_0BB@OGOF@spanish?9paraguay?$AA@ 10033670 LIBCMTD:getqloc.obj + 0002:00001684 ??_C@_0P@LLFA@spanish?9panama?$AA@ 10033684 LIBCMTD:getqloc.obj + 0002:00001694 ??_C@_0BC@BBJM@spanish?9nicaragua?$AA@ 10033694 LIBCMTD:getqloc.obj + 0002:000016a8 ??_C@_0P@NJBN@spanish?9modern?$AA@ 100336a8 LIBCMTD:getqloc.obj + 0002:000016b8 ??_C@_0BA@NHDN@spanish?9mexican?$AA@ 100336b8 LIBCMTD:getqloc.obj + 0002:000016c8 ??_C@_0BB@JHOJ@spanish?9honduras?$AA@ 100336c8 LIBCMTD:getqloc.obj + 0002:000016dc ??_C@_0BC@BOOM@spanish?9guatemala?$AA@ 100336dc LIBCMTD:getqloc.obj + 0002:000016f0 ??_C@_0BE@EELI@spanish?9el?5salvador?$AA@ 100336f0 LIBCMTD:getqloc.obj + 0002:00001704 ??_C@_0BA@POAE@spanish?9ecuador?$AA@ 10033704 LIBCMTD:getqloc.obj + 0002:00001714 ??_C@_0BL@LDKN@spanish?9dominican?5republic?$AA@ 10033714 LIBCMTD:getqloc.obj + 0002:00001730 ??_C@_0BD@HPMH@spanish?9costa?5rica?$AA@ 10033730 LIBCMTD:getqloc.obj + 0002:00001744 ??_C@_0BB@NDDK@spanish?9colombia?$AA@ 10033744 LIBCMTD:getqloc.obj + 0002:00001758 ??_C@_0O@BJHA@spanish?9chile?$AA@ 10033758 LIBCMTD:getqloc.obj + 0002:00001768 ??_C@_0BA@OBNG@spanish?9bolivia?$AA@ 10033768 LIBCMTD:getqloc.obj + 0002:00001778 ??_C@_0BC@EFAM@spanish?9argentina?$AA@ 10033778 LIBCMTD:getqloc.obj + 0002:0000178c ??_C@_0BF@KMMM@portuguese?9brazilian?$AA@ 1003378c LIBCMTD:getqloc.obj + 0002:000017a4 ??_C@_0BC@BAAE@norwegian?9nynorsk?$AA@ 100337a4 LIBCMTD:getqloc.obj + 0002:000017b8 ??_C@_0BB@PBHK@norwegian?9bokmal?$AA@ 100337b8 LIBCMTD:getqloc.obj + 0002:000017cc ??_C@_09EHKL@norwegian?$AA@ 100337cc LIBCMTD:getqloc.obj + 0002:000017d8 ??_C@_0O@BEAN@italian?9swiss?$AA@ 100337d8 LIBCMTD:getqloc.obj + 0002:000017e8 ??_C@_0O@OIFK@irish?9english?$AA@ 100337e8 LIBCMTD:getqloc.obj + 0002:000017f8 ??_C@_0N@NBPL@german?9swiss?$AA@ 100337f8 LIBCMTD:getqloc.obj + 0002:00001808 ??_C@_0BC@ICFJ@german?9luxembourg?$AA@ 10033808 LIBCMTD:getqloc.obj + 0002:0000181c ??_C@_0BE@GGPC@german?9lichtenstein?$AA@ 1003381c LIBCMTD:getqloc.obj + 0002:00001830 ??_C@_0BA@MKDC@german?9austrian?$AA@ 10033830 LIBCMTD:getqloc.obj + 0002:00001840 ??_C@_0N@ODNB@french?9swiss?$AA@ 10033840 LIBCMTD:getqloc.obj + 0002:00001850 ??_C@_0BC@MGCM@french?9luxembourg?$AA@ 10033850 LIBCMTD:getqloc.obj + 0002:00001864 ??_C@_0BA@NABK@french?9canadian?$AA@ 10033864 LIBCMTD:getqloc.obj + 0002:00001874 ??_C@_0P@CJNO@french?9belgian?$AA@ 10033874 LIBCMTD:getqloc.obj + 0002:00001884 ??_C@_0M@LJOL@english?9usa?$AA@ 10033884 LIBCMTD:getqloc.obj + 0002:00001890 ??_C@_0L@FMNC@english?9us?$AA@ 10033890 LIBCMTD:getqloc.obj + 0002:0000189c ??_C@_0L@KBBK@english?9uk?$AA@ 1003389c LIBCMTD:getqloc.obj + 0002:000018a8 ??_C@_0BK@NDDE@english?9trinidad?5y?5tobago?$AA@ 100338a8 LIBCMTD:getqloc.obj + 0002:000018c4 ??_C@_0BF@LKML@english?9south?5africa?$AA@ 100338c4 LIBCMTD:getqloc.obj + 0002:000018dc ??_C@_0L@EGPP@english?9nz?$AA@ 100338dc LIBCMTD:getqloc.obj + 0002:000018e8 ??_C@_0BA@HLH@english?9jamaica?$AA@ 100338e8 LIBCMTD:getqloc.obj + 0002:000018f8 ??_C@_0M@PMJI@english?9ire?$AA@ 100338f8 LIBCMTD:getqloc.obj + 0002:00001904 ??_C@_0BC@HINE@english?9caribbean?$AA@ 10033904 LIBCMTD:getqloc.obj + 0002:00001918 ??_C@_0M@DCFH@english?9can?$AA@ 10033918 LIBCMTD:getqloc.obj + 0002:00001924 ??_C@_0P@DGHK@english?9belize?$AA@ 10033924 LIBCMTD:getqloc.obj + 0002:00001934 ??_C@_0M@FLHK@english?9aus?$AA@ 10033934 LIBCMTD:getqloc.obj + 0002:00001940 ??_C@_0BB@HNCK@english?9american?$AA@ 10033940 LIBCMTD:getqloc.obj + 0002:00001954 ??_C@_0O@PAMI@dutch?9belgian?$AA@ 10033954 LIBCMTD:getqloc.obj + 0002:00001964 ??_C@_0BE@FPEJ@chinese?9traditional?$AA@ 10033964 LIBCMTD:getqloc.obj + 0002:00001978 ??_C@_0BC@CHFL@chinese?9singapore?$AA@ 10033978 LIBCMTD:getqloc.obj + 0002:0000198c ??_C@_0BD@DCMH@chinese?9simplified?$AA@ 1003398c LIBCMTD:getqloc.obj + 0002:000019a0 ??_C@_0BB@JMOE@chinese?9hongkong?$AA@ 100339a0 LIBCMTD:getqloc.obj + 0002:000019b4 ??_C@_07NGFN@chinese?$AA@ 100339b4 LIBCMTD:getqloc.obj + 0002:000019bc ??_C@_03PCOI@chi?$AA@ 100339bc LIBCMTD:getqloc.obj + 0002:000019c0 ??_C@_03FIHP@chh?$AA@ 100339c0 LIBCMTD:getqloc.obj + 0002:000019c4 ??_C@_08HFLO@canadian?$AA@ 100339c4 LIBCMTD:getqloc.obj + 0002:000019d0 ??_C@_07INIJ@belgian?$AA@ 100339d0 LIBCMTD:getqloc.obj + 0002:000019d8 ??_C@_0L@LCCA@australian?$AA@ 100339d8 LIBCMTD:getqloc.obj + 0002:000019e4 ??_C@_0BB@BJIO@american?9english?$AA@ 100339e4 LIBCMTD:getqloc.obj + 0002:000019f8 ??_C@_0BB@DAGO@american?5english?$AA@ 100339f8 LIBCMTD:getqloc.obj + 0002:00001a0c ??_C@_08HENB@american?$AA@ 10033a0c LIBCMTD:getqloc.obj + 0002:00001a18 ??_C@_03DGJE@OCP?$AA@ 10033a18 LIBCMTD:getqloc.obj + 0002:00001a1c ??_C@_03EKFG@ACP?$AA@ 10033a1c LIBCMTD:getqloc.obj + 0002:00001a2c ??_C@_07FOIK@a_cmp?4c?$AA@ 10033a2c LIBCMTD:a_cmp.obj + 0002:00001a34 ??_C@_0DN@PPKB@cchCount1?$DN?$DN0?5?$CG?$CG?5cchCount2?$DN?$DN1?5?$HM?$HM?5@ 10033a34 LIBCMTD:a_cmp.obj + 0002:00001a90 ??_C@_08FEIK@setenv?4c?$AA@ 10033a90 LIBCMTD:setenv.obj + 0002:00001a9c ??_C@_08EIOK@chsize?4c?$AA@ 10033a9c LIBCMTD:chsize.obj + 0002:00001aa8 ??_C@_09NPGF@size?5?$DO?$DN?50?$AA@ 10033aa8 LIBCMTD:chsize.obj + 0002:00001ab4 ??_C@_07CJME@H?3mm?3ss?$AA@ 10033ab4 LIBCMTD:strftime.obj + 0002:00001abc ??_C@_0BE@MHI@dddd?0?5MMMM?5dd?0?5yyyy?$AA@ 10033abc LIBCMTD:strftime.obj + 0002:00001ad0 ??_C@_06HCAD@M?1d?1yy?$AA@ 10033ad0 LIBCMTD:strftime.obj + 0002:00001ad8 ??_C@_02DBLP@PM?$AA@ 10033ad8 LIBCMTD:strftime.obj + 0002:00001adc ??_C@_02ENLM@AM?$AA@ 10033adc LIBCMTD:strftime.obj + 0002:00001ae0 ??_C@_08LIDF@December?$AA@ 10033ae0 LIBCMTD:strftime.obj + 0002:00001aec ??_C@_08NJLI@November?$AA@ 10033aec LIBCMTD:strftime.obj + 0002:00001af8 ??_C@_07IAMM@October?$AA@ 10033af8 LIBCMTD:strftime.obj + 0002:00001b00 ??_C@_09MKGD@September?$AA@ 10033b00 LIBCMTD:strftime.obj + 0002:00001b0c ??_C@_06PADP@August?$AA@ 10033b0c LIBCMTD:strftime.obj + 0002:00001b14 ??_C@_04PIJO@July?$AA@ 10033b14 LIBCMTD:strftime.obj + 0002:00001b1c ??_C@_04ICFP@June?$AA@ 10033b1c LIBCMTD:strftime.obj + 0002:00001b24 ??_C@_05JFGC@April?$AA@ 10033b24 LIBCMTD:strftime.obj + 0002:00001b2c ??_C@_05FGPD@March?$AA@ 10033b2c LIBCMTD:strftime.obj + 0002:00001b34 ??_C@_08PGBA@February?$AA@ 10033b34 LIBCMTD:strftime.obj + 0002:00001b40 ??_C@_07BPKJ@January?$AA@ 10033b40 LIBCMTD:strftime.obj + 0002:00001b48 ??_C@_03PGJO@Dec?$AA@ 10033b48 LIBCMTD:strftime.obj + 0002:00001b4c ??_C@_03PDLM@Nov?$AA@ 10033b4c LIBCMTD:strftime.obj + 0002:00001b50 ??_C@_03BLHK@Oct?$AA@ 10033b50 LIBCMTD:strftime.obj + 0002:00001b54 ??_C@_03DPFM@Sep?$AA@ 10033b54 LIBCMTD:strftime.obj + 0002:00001b58 ??_C@_03CMCH@Aug?$AA@ 10033b58 LIBCMTD:strftime.obj + 0002:00001b5c ??_C@_03OBKI@Jul?$AA@ 10033b5c LIBCMTD:strftime.obj + 0002:00001b60 ??_C@_03LEIG@Jun?$AA@ 10033b60 LIBCMTD:strftime.obj + 0002:00001b64 ??_C@_03MGHB@May?$AA@ 10033b64 LIBCMTD:strftime.obj + 0002:00001b68 ??_C@_03MJJM@Apr?$AA@ 10033b68 LIBCMTD:strftime.obj + 0002:00001b6c ??_C@_03GNHA@Mar?$AA@ 10033b6c LIBCMTD:strftime.obj + 0002:00001b70 ??_C@_03PICE@Feb?$AA@ 10033b70 LIBCMTD:strftime.obj + 0002:00001b74 ??_C@_03IEIF@Jan?$AA@ 10033b74 LIBCMTD:strftime.obj + 0002:00001b78 ??_C@_08FAKH@Saturday?$AA@ 10033b78 LIBCMTD:strftime.obj + 0002:00001b84 ??_C@_06ONCK@Friday?$AA@ 10033b84 LIBCMTD:strftime.obj + 0002:00001b8c ??_C@_08CCFO@Thursday?$AA@ 10033b8c LIBCMTD:strftime.obj + 0002:00001b98 ??_C@_09PBIN@Wednesday?$AA@ 10033b98 LIBCMTD:strftime.obj + 0002:00001ba4 ??_C@_07BMBC@Tuesday?$AA@ 10033ba4 LIBCMTD:strftime.obj + 0002:00001bac ??_C@_06CHLK@Monday?$AA@ 10033bac LIBCMTD:strftime.obj + 0002:00001bb4 ??_C@_06OOEM@Sunday?$AA@ 10033bb4 LIBCMTD:strftime.obj + 0002:00001bbc ??_C@_03MPKK@Sat?$AA@ 10033bbc LIBCMTD:strftime.obj + 0002:00001bc0 ??_C@_03FINJ@Fri?$AA@ 10033bc0 LIBCMTD:strftime.obj + 0002:00001bc4 ??_C@_03HIKC@Thu?$AA@ 10033bc4 LIBCMTD:strftime.obj + 0002:00001bc8 ??_C@_03HECK@Wed?$AA@ 10033bc8 LIBCMTD:strftime.obj + 0002:00001bcc ??_C@_03ECCP@Tue?$AA@ 10033bcc LIBCMTD:strftime.obj + 0002:00001bd0 ??_C@_03PIEP@Mon?$AA@ 10033bd0 LIBCMTD:strftime.obj + 0002:00001bd4 ??_C@_03FHEP@Sun?$AA@ 10033bd4 LIBCMTD:strftime.obj + 0002:00001bd8 ??_C@_03MKGK@a?1p?$AA@ 10033bd8 LIBCMTD:strftime.obj + 0002:00001bdc ??_C@_05BDJK@am?1pm?$AA@ 10033bdc LIBCMTD:strftime.obj + 0002:00001be4 ??_C@_0L@HKCB@inithelp?4c?$AA@ 10033be4 LIBCMTD:inithelp.obj + 0002:00001c08 ??_C@_06PAPI@1?$CDQNAN?$AA@ 10033c08 LIBCMTD:x10fout.obj + 0002:00001c10 ??_C@_05BGNL@1?$CDINF?$AA@ 10033c10 LIBCMTD:x10fout.obj + 0002:00001c18 ??_C@_05EDPF@1?$CDIND?$AA@ 10033c18 LIBCMTD:x10fout.obj + 0002:00001c20 ??_C@_06LKFM@1?$CDSNAN?$AA@ 10033c20 LIBCMTD:x10fout.obj + 0002:00001c28 ___dnames 10033c28 LIBCMTD:timeset.obj + 0002:00001c40 ___mnames 10033c40 LIBCMTD:timeset.obj + 0002:00001c68 ??_C@_07DEKI@tzset?4c?$AA@ 10033c68 LIBCMTD:tzset.obj + 0002:00001c70 ??_C@_02JHIA@TZ?$AA@ 10033c70 LIBCMTD:tzset.obj + 0002:00002350 ??_R1A@A@3BA@ios@@8 10034350 libcimtd:ostream.obj + 0002:00002368 ??_R1A@?0A@A@ostream@@8 10034368 libcimtd:ostream.obj + 0002:00002380 ??_R2ostream@@8 10034380 libcimtd:ostream.obj + 0002:00002390 ??_R3ostream@@8 10034390 libcimtd:ostream.obj + 0002:000023a0 ??_R4ostream@@6B@ 100343a0 libcimtd:ostream.obj + 0002:000023b8 ??_R1A@?0A@A@ostream_withassign@@8 100343b8 libcimtd:ostream.obj + 0002:000023d0 ??_R2ostream_withassign@@8 100343d0 libcimtd:ostream.obj + 0002:000023e0 ??_R3ostream_withassign@@8 100343e0 libcimtd:ostream.obj + 0002:000023f0 ??_R4ostream_withassign@@6B@ 100343f0 libcimtd:ostream.obj + 0002:00002408 ??_R1A@?0A@A@istream@@8 10034408 libcimtd:istream.obj + 0002:00002420 ??_R2istream@@8 10034420 libcimtd:istream.obj + 0002:00002430 ??_R3istream@@8 10034430 libcimtd:istream.obj + 0002:00002440 ??_R4istream@@6B@ 10034440 libcimtd:istream.obj + 0002:00002458 ??_R1A@?0A@A@istream_withassign@@8 10034458 libcimtd:istream.obj + 0002:00002470 ??_R2istream_withassign@@8 10034470 libcimtd:istream.obj + 0002:00002480 ??_R3istream_withassign@@8 10034480 libcimtd:istream.obj + 0002:00002490 ??_R4istream_withassign@@6B@ 10034490 libcimtd:istream.obj + 0002:000024a8 ??_R1A@?0A@A@ios@@8 100344a8 libcimtd:_ios.obj + 0002:000024c0 ??_R2ios@@8 100344c0 libcimtd:_ios.obj + 0002:000024c8 ??_R3ios@@8 100344c8 libcimtd:_ios.obj + 0002:000024d8 ??_R4ios@@6B@ 100344d8 libcimtd:_ios.obj + 0002:000024f0 ??_R1A@?0A@A@type_info@@8 100344f0 LIBCMTD:typinfo.obj + 0002:00002508 ??_R2type_info@@8 10034508 LIBCMTD:typinfo.obj + 0002:00002510 ??_R3type_info@@8 10034510 LIBCMTD:typinfo.obj + 0002:00002520 ??_R4type_info@@6B@ 10034520 LIBCMTD:typinfo.obj + 0002:00002d60 __CT??_R0?AVException@@@8??0Exception@@QAE@ABV0@@Z16 10034d60 mscommon:Macro.obj + 0002:00002d80 __CT??_R0?AVBoundaryError@@@8??0BoundaryError@@QAE@ABV0@@Z16 10034d80 mscommon:Macro.obj + 0002:00002da0 __CTA2?AVBoundaryError@@ 10034da0 mscommon:Macro.obj + 0002:00002db0 __TI2?AVBoundaryError@@ 10034db0 mscommon:Macro.obj + 0003:00000000 ___xc_a 10036000 LIBCMTD:crt0init.obj + 0003:00000210 ___xc_z 10036210 LIBCMTD:crt0init.obj + 0003:00000314 ___xi_a 10036314 LIBCMTD:crt0init.obj + 0003:0000062c ___xi_z 1003662c LIBCMTD:crt0init.obj + 0003:00000730 ___xp_a 10036730 LIBCMTD:crt0init.obj + 0003:00000938 ___xp_z 10036938 LIBCMTD:crt0init.obj + 0003:00000a3c ___xt_a 10036a3c LIBCMTD:crt0init.obj + 0003:00000c44 ___xt_z 10036c44 LIBCMTD:crt0init.obj + 0003:00000ec8 ??_R0?AVException@@@8 10036ec8 mscommon:Macro.obj + 0003:00000ee0 ??_R0?AVBoundaryError@@@8 10036ee0 mscommon:Macro.obj + 0003:00000efc ??_C@_0O@NPPA@BoundaryError?$AA@ 10036efc mscommon:Macro.obj + 0003:00000f14 ??_C@_01PCFE@?2?$AA@ 10036f14 mscommon:Diskinfo.obj + 0003:00001030 ??_C@_08CGFM@?$EA?$CFld?$EA?$CFld?$AA@ 10037030 msthread:Mutex.obj + 0003:0000103c ??_C@_04FCEH@?3?4?1?2?$AA@ 1003703c msthread:Mutex.obj + 0003:00001048 ??_R0?AVios@@@8 10037048 libcimtd:ostream.obj + 0003:00001060 ??_R0?AVostream@@@8 10037060 libcimtd:ostream.obj + 0003:00001078 ??_R0?AVostream_withassign@@@8 10037078 libcimtd:ostream.obj + 0003:000010a0 ??_R0?AVistream@@@8 100370a0 libcimtd:istream.obj + 0003:000010b8 ??_R0?AVistream_withassign@@@8 100370b8 libcimtd:istream.obj + 0003:000010dc ?x_maxbit@ios@@0JA 100370dc libcimtd:_ios.obj + 0003:000010e0 ?x_curindex@ios@@0HA 100370e0 libcimtd:_ios.obj + 0003:000010e4 __NLG_Destination 100370e4 LIBCMTD:exsup.obj + 0003:00001100 __aexit_rtn 10037100 LIBCMTD:dllcrt0.obj + 0003:00001110 __fltused 10037110 LIBCMTD:fpinit.obj + 0003:00001114 __ldused 10037114 LIBCMTD:fpinit.obj + 0003:00001118 __FPinit 10037118 LIBCMTD:fpinit.obj + 0003:0000111c __FPmtinit 1003711c LIBCMTD:fpinit.obj + 0003:00001120 __FPmtterm 10037120 LIBCMTD:fpinit.obj + 0003:00001128 ??_R0?AVtype_info@@@8 10037128 LIBCMTD:typinfo.obj + 0003:00001140 ?__pMyUnhandledExceptionFilter@@3PAXA 10037140 LIBCMTD:throw.obj + 0003:00001144 __crtDbgFlag 10037144 LIBCMTD:dbgheap.obj + 0003:0000114c __crtBreakAlloc 1003714c LIBCMTD:dbgheap.obj + 0003:00001168 __iob 10037168 LIBCMTD:_file.obj + 0003:000013e8 __crtAssertBusy 100373e8 LIBCMTD:dbgrpt.obj + 0003:000013ec __CrtDbgMode 100373ec LIBCMTD:dbgrpt.obj + 0003:000013f8 __CrtDbgFile 100373f8 LIBCMTD:dbgrpt.obj + 0003:00001420 ___tlsindex 10037420 LIBCMTD:tidtable.obj + 0003:00001424 ?__pInconsistency@@3P6AXXZA 10037424 LIBCMTD:hooks.obj + 0003:00001428 ___nullstring 10037428 LIBCMTD:output.obj + 0003:0000142c ___wnullstring 1003742c LIBCMTD:output.obj + 0003:00001430 ___badioinfo 10037430 LIBCMTD:ioinit.obj + 0003:00001454 __amblksiz 10037454 LIBCMTD:heapinit.obj + 0003:000014e8 __locktable 100374e8 LIBCMTD:mlock.obj + 0003:00001820 ___lc_category 10037820 LIBCMTD:setlocal.obj + 0003:00001868 __pctype 10037868 LIBCMTD:ctype.obj + 0003:0000186c __pwctype 1003786c LIBCMTD:ctype.obj + 0003:00001870 __ctype 10037870 LIBCMTD:ctype.obj + 0003:00001a74 ___mb_cur_max 10037a74 LIBCMTD:nlsdata1.obj + 0003:00001a78 ___decimal_point 10037a78 LIBCMTD:nlsdata1.obj + 0003:00001a7c ___decimal_point_length 10037a7c LIBCMTD:nlsdata1.obj + 0003:00001a80 __cfltcvt_tab 10037a80 LIBCMTD:cmiscdat.obj + 0003:00001aa0 __pfnAllocHook 10037aa0 LIBCMTD:dbghook.obj + 0003:00001aa8 ___old_small_block_heap 10037aa8 LIBCMTD:sbheap.obj + 0003:00003acc ___old_sbh_threshold 10039acc LIBCMTD:sbheap.obj + 0003:00003ad0 __XcptActTab 10039ad0 LIBCMTD:winxfltr.obj + 0003:00003b48 __First_FPE_Indx 10039b48 LIBCMTD:winxfltr.obj + 0003:00003b4c __Num_FPE 10039b4c LIBCMTD:winxfltr.obj + 0003:00003b50 __XcptActTabSize 10039b50 LIBCMTD:winxfltr.obj + 0003:00003b54 __XcptActTabCount 10039b54 LIBCMTD:winxfltr.obj + 0003:00003c60 ___rgLocInfo 10039c60 LIBCMTD:getqloc.obj + 0003:00004104 ___rglangidNotDefault 1003a104 LIBCMTD:getqloc.obj + 0003:00004118 ___rg_country 1003a118 LIBCMTD:getqloc.obj + 0003:000041d0 ___rg_language 1003a1d0 LIBCMTD:getqloc.obj + 0003:00004408 ___lc_time_curr 1003a408 LIBCMTD:strftime.obj + 0003:00004410 ___lc_time_c 1003a410 LIBCMTD:strftime.obj + 0003:000044c0 ___lconv_static_decimal 1003a4c0 LIBCMTD:lconv.obj + 0003:000044c8 ___lconv_c 1003a4c8 LIBCMTD:lconv.obj + 0003:000044f8 ___lconv 1003a4f8 LIBCMTD:lconv.obj + 0003:00004500 __timezone 1003a500 LIBCMTD:timeset.obj + 0003:00004504 __daylight 1003a504 LIBCMTD:timeset.obj + 0003:00004508 __dstbias 1003a508 LIBCMTD:timeset.obj + 0003:0000458c __tzname 1003a58c LIBCMTD:timeset.obj + 0003:000045b8 __pow10pos 1003a5b8 LIBCMTD:constpow.obj + 0003:00004718 __pow10neg 1003a718 LIBCMTD:constpow.obj + 0003:00004874 __lpdays 1003a874 LIBCMTD:days.obj + 0003:000048a8 __days 1003a8a8 LIBCMTD:days.obj + 0003:000055a0 ?outFile@@3VFile@@A 1003b5a0 dllmain.obj + 0003:000055c0 ?mutex@@3VMutex@@A 1003b5c0 dllmain.obj + 0003:000055d4 ?smhHook@@3PAUHHOOK__@@A 1003b5d4 dllmain.obj + 0003:000055e4 ??_C@_00A@?$AA@ 1003b5e4 mscommon:Macro.obj + 0003:000055f0 ?x_lockc@ios@@0U_CRT_CRITICAL_SECTION@@A 1003b5f0 libcimtd:_ios.obj + 0003:00005608 ?x_statebuf@ios@@0PAJA 1003b608 libcimtd:_ios.obj + 0003:00005628 ?fLockcInit@ios@@0HA 1003b628 libcimtd:_ios.obj + 0003:00005630 __aenvptr 1003b630 LIBCMTD:dllcrt0.obj + 0003:00005634 __wenvptr 1003b634 LIBCMTD:dllcrt0.obj + 0003:00005638 ___error_mode 1003b638 LIBCMTD:dllcrt0.obj + 0003:0000563c ___app_type 1003b63c LIBCMTD:dllcrt0.obj + 0003:00005640 ___fastflag 1003b640 LIBCMTD:fpinit.obj + 0003:00005644 __adjust_fdiv 1003b644 LIBCMTD:fpinit.obj + 0003:0000565c __cflush 1003b65c LIBCMTD:_file.obj + 0003:00005664 __umaskval 1003b664 LIBCMTD:crt0dat.obj + 0003:00005668 __osver 1003b668 LIBCMTD:crt0dat.obj + 0003:0000566c __winver 1003b66c LIBCMTD:crt0dat.obj + 0003:00005670 __winmajor 1003b670 LIBCMTD:crt0dat.obj + 0003:00005674 __winminor 1003b674 LIBCMTD:crt0dat.obj + 0003:00005678 ___argc 1003b678 LIBCMTD:crt0dat.obj + 0003:0000567c ___argv 1003b67c LIBCMTD:crt0dat.obj + 0003:00005680 ___wargv 1003b680 LIBCMTD:crt0dat.obj + 0003:00005684 __environ 1003b684 LIBCMTD:crt0dat.obj + 0003:00005688 ___initenv 1003b688 LIBCMTD:crt0dat.obj + 0003:0000568c __wenviron 1003b68c LIBCMTD:crt0dat.obj + 0003:00005690 ___winitenv 1003b690 LIBCMTD:crt0dat.obj + 0003:00005694 __pgmptr 1003b694 LIBCMTD:crt0dat.obj + 0003:00005698 __wpgmptr 1003b698 LIBCMTD:crt0dat.obj + 0003:0000569c __exitflag 1003b69c LIBCMTD:crt0dat.obj + 0003:000056a0 __C_Termination_Done 1003b6a0 LIBCMTD:crt0dat.obj + 0003:000056a4 __C_Exit_Done 1003b6a4 LIBCMTD:crt0dat.obj + 0003:000056ac __stdbuf 1003b6ac LIBCMTD:_sftbuf.obj + 0003:000057bc __adbgmsg 1003b7bc LIBCMTD:crt0msg.obj + 0003:0000582c ___lc_handle 1003b82c LIBCMTD:nlsdata2.obj + 0003:00005844 ___lc_codepage 1003b844 LIBCMTD:nlsdata2.obj + 0003:00005848 ___lc_collate_cp 1003b848 LIBCMTD:nlsdata2.obj + 0003:00005854 __newmode 1003b854 LIBCMTD:_newmode.obj + 0003:00005858 ?_pnhHeap@@3P6AHI@ZA 1003b858 LIBCMTD:handler.obj + 0003:00005884 __commode 1003b884 LIBCMTD:ncommode.obj + 0003:00005888 ___lc_time_intl 1003b888 LIBCMTD:inittime.obj + 0003:000058a4 ___lc_id 1003b8a4 LIBCMTD:nlsdata3.obj + 0003:000058f4 __fmode 1003b8f4 LIBCMTD:txtmode.obj + 0003:00005900 ___lconv_static_null 1003b900 LIBCMTD:lconv.obj + 0003:000059cc ___alternate_form 1003b9cc + 0003:000059dc ___no_lead_zeros 1003b9dc + 0003:000059e0 ___mbcodepage 1003b9e0 + 0003:00005a60 ___mbulinfo 1003ba60 + 0003:00005a6c ___ismbcodepage 1003ba6c + 0003:00005a80 __mbcasemap 1003ba80 + 0003:00005b80 __mbctype 1003bb80 + 0003:00005c84 ___mblcid 1003bc84 + 0003:00005c88 ___sbh_sizeHeaderList 1003bc88 + 0003:00005c9c ___sbh_indGroupDefer 1003bc9c + 0003:00005ca0 ___sbh_pHeaderScan 1003bca0 + 0003:00005ca4 ___sbh_initialized 1003bca4 + 0003:00005ca8 ___sbh_pHeaderDefer 1003bca8 + 0003:00005cac ___sbh_cntHeaderList 1003bcac + 0003:00005cb0 ___sbh_pHeaderList 1003bcb0 + 0003:00005cb4 ___sbh_threshold 1003bcb4 + 0003:00005cb8 ___setlc_active 1003bcb8 + 0003:00005cc8 ___unguarded_readlc_active 1003bcc8 + 0003:00005ccc __crtheap 1003bccc + 0003:00005cdc ___active_heap 1003bcdc + 0003:00005ce0 ___pioinfo 1003bce0 + 0003:00005e1c __nhandle 1003be1c + 0003:00005e20 ___env_initialized 1003be20 + 0003:00005e30 ___mbctype_initialized 1003be30 + 0003:00005e34 ___onexitend 1003be34 + 0003:00005e38 ___onexitbegin 1003be38 + 0003:00005e3c __pfnReportHook 1003be3c + 0003:00005e48 ___piob 1003be48 + 0003:000061a0 __bufin 1003c1a0 + 0003:000071a0 __nstream 1003d1a0 + 0003:000071a4 __pfnDumpClient 1003d1a4 + 0003:000071b0 __acmdln 1003d1b0 + 0003:000071c0 __pRawDllMain 1003d1c0 + 0004:00000000 __IMPORT_DESCRIPTOR_KERNEL32 1003e000 kernel32:KERNEL32.dll + 0004:00000014 __IMPORT_DESCRIPTOR_USER32 1003e014 user32:USER32.dll + 0004:00000028 __IMPORT_DESCRIPTOR_ADVAPI32 1003e028 advapi32:ADVAPI32.dll + 0004:0000003c __NULL_IMPORT_DESCRIPTOR 1003e03c kernel32:KERNEL32.dll + 0004:000002dc __imp__RegDeleteKeyA@8 1003e2dc advapi32:ADVAPI32.dll + 0004:000002e0 __imp__RegConnectRegistryA@12 1003e2e0 advapi32:ADVAPI32.dll + 0004:000002e4 __imp__RegEnumKeyA@16 1003e2e4 advapi32:ADVAPI32.dll + 0004:000002e8 __imp__RegEnumValueA@32 1003e2e8 advapi32:ADVAPI32.dll + 0004:000002ec __imp__RegSetValueExA@24 1003e2ec advapi32:ADVAPI32.dll + 0004:000002f0 __imp__RegQueryValueExA@24 1003e2f0 advapi32:ADVAPI32.dll + 0004:000002f4 __imp__RegCloseKey@4 1003e2f4 advapi32:ADVAPI32.dll + 0004:000002f8 __imp__RegCreateKeyExA@36 1003e2f8 advapi32:ADVAPI32.dll + 0004:000002fc __imp__RegOpenKeyExA@20 1003e2fc advapi32:ADVAPI32.dll + 0004:00000300 __imp__RegDeleteValueA@8 1003e300 advapi32:ADVAPI32.dll + 0004:00000304 \177ADVAPI32_NULL_THUNK_DATA 1003e304 advapi32:ADVAPI32.dll + 0004:00000338 __imp__MoveFileA@8 1003e338 kernel32:KERNEL32.dll + 0004:0000033c __imp__FileTimeToSystemTime@8 1003e33c kernel32:KERNEL32.dll + 0004:00000340 __imp__DosDateTimeToFileTime@12 1003e340 kernel32:KERNEL32.dll + 0004:00000344 __imp__CopyFileA@12 1003e344 kernel32:KERNEL32.dll + 0004:00000348 __imp__FindClose@4 1003e348 kernel32:KERNEL32.dll + 0004:0000034c __imp__FindFirstFileA@8 1003e34c kernel32:KERNEL32.dll + 0004:00000350 __imp__SystemTimeToFileTime@8 1003e350 kernel32:KERNEL32.dll + 0004:00000354 __imp__CreateMutexA@12 1003e354 kernel32:KERNEL32.dll + 0004:00000358 __imp__WaitForSingleObjectEx@12 1003e358 kernel32:KERNEL32.dll + 0004:0000035c __imp__ReleaseMutex@4 1003e35c kernel32:KERNEL32.dll + 0004:00000360 __imp__CloseHandle@4 1003e360 kernel32:KERNEL32.dll + 0004:00000364 __imp__GetTickCount@0 1003e364 kernel32:KERNEL32.dll + 0004:00000368 __imp__InitializeCriticalSection@4 1003e368 kernel32:KERNEL32.dll + 0004:0000036c __imp__DeleteCriticalSection@4 1003e36c kernel32:KERNEL32.dll + 0004:00000370 __imp__EnterCriticalSection@4 1003e370 kernel32:KERNEL32.dll + 0004:00000374 __imp__LeaveCriticalSection@4 1003e374 kernel32:KERNEL32.dll + 0004:00000378 __imp__RtlUnwind@16 1003e378 kernel32:KERNEL32.dll + 0004:0000037c __imp__GetCommandLineA@0 1003e37c kernel32:KERNEL32.dll + 0004:00000380 __imp__GetVersion@0 1003e380 kernel32:KERNEL32.dll + 0004:00000384 __imp__InterlockedDecrement@4 1003e384 kernel32:KERNEL32.dll + 0004:00000388 __imp__InterlockedIncrement@4 1003e388 kernel32:KERNEL32.dll + 0004:0000038c __imp__RaiseException@16 1003e38c kernel32:KERNEL32.dll + 0004:00000390 __imp__IsBadWritePtr@8 1003e390 kernel32:KERNEL32.dll + 0004:00000394 __imp__IsBadReadPtr@8 1003e394 kernel32:KERNEL32.dll + 0004:00000398 __imp__HeapValidate@12 1003e398 kernel32:KERNEL32.dll + 0004:0000039c __imp__DebugBreak@0 1003e39c kernel32:KERNEL32.dll + 0004:000003a0 __imp__GetStdHandle@4 1003e3a0 kernel32:KERNEL32.dll + 0004:000003a4 __imp__WriteFile@20 1003e3a4 kernel32:KERNEL32.dll + 0004:000003a8 __imp__OutputDebugStringA@4 1003e3a8 kernel32:KERNEL32.dll + 0004:000003ac __imp__GetProcAddress@8 1003e3ac kernel32:KERNEL32.dll + 0004:000003b0 __imp__LoadLibraryA@4 1003e3b0 kernel32:KERNEL32.dll + 0004:000003b4 __imp__GetModuleFileNameA@12 1003e3b4 kernel32:KERNEL32.dll + 0004:000003b8 __imp__ExitProcess@4 1003e3b8 kernel32:KERNEL32.dll + 0004:000003bc __imp__TerminateProcess@8 1003e3bc kernel32:KERNEL32.dll + 0004:000003c0 __imp__GetCurrentProcess@0 1003e3c0 kernel32:KERNEL32.dll + 0004:000003c4 __imp__GetCurrentThreadId@0 1003e3c4 kernel32:KERNEL32.dll + 0004:000003c8 __imp__TlsSetValue@8 1003e3c8 kernel32:KERNEL32.dll + 0004:000003cc __imp__TlsAlloc@0 1003e3cc kernel32:KERNEL32.dll + 0004:000003d0 __imp__TlsFree@4 1003e3d0 kernel32:KERNEL32.dll + 0004:000003d4 __imp__SetLastError@4 1003e3d4 kernel32:KERNEL32.dll + 0004:000003d8 __imp__TlsGetValue@4 1003e3d8 kernel32:KERNEL32.dll + 0004:000003dc __imp__GetDriveTypeA@4 1003e3dc kernel32:KERNEL32.dll + 0004:000003e0 __imp__GetLogicalDrives@0 1003e3e0 kernel32:KERNEL32.dll + 0004:000003e4 __imp__GetCurrentDirectoryA@8 1003e3e4 kernel32:KERNEL32.dll + 0004:000003e8 __imp__GetModuleHandleA@4 1003e3e8 kernel32:KERNEL32.dll + 0004:000003ec __imp__FreeEnvironmentStringsA@4 1003e3ec kernel32:KERNEL32.dll + 0004:000003f0 __imp__FreeEnvironmentStringsW@4 1003e3f0 kernel32:KERNEL32.dll + 0004:000003f4 __imp__WideCharToMultiByte@32 1003e3f4 kernel32:KERNEL32.dll + 0004:000003f8 __imp__GetEnvironmentStrings@0 1003e3f8 kernel32:KERNEL32.dll + 0004:000003fc __imp__GetEnvironmentStringsW@0 1003e3fc kernel32:KERNEL32.dll + 0004:00000400 __imp__GetEnvironmentVariableA@12 1003e400 kernel32:KERNEL32.dll + 0004:00000404 __imp__GetVersionExA@4 1003e404 kernel32:KERNEL32.dll + 0004:00000408 __imp__HeapDestroy@4 1003e408 kernel32:KERNEL32.dll + 0004:0000040c __imp__HeapCreate@12 1003e40c kernel32:KERNEL32.dll + 0004:00000410 __imp__HeapFree@12 1003e410 kernel32:KERNEL32.dll + 0004:00000414 __imp__VirtualFree@12 1003e414 kernel32:KERNEL32.dll + 0004:00000418 __imp__FlushFileBuffers@4 1003e418 kernel32:KERNEL32.dll + 0004:0000041c __imp__FatalAppExitA@8 1003e41c kernel32:KERNEL32.dll + 0004:00000420 __imp__SetFilePointer@16 1003e420 kernel32:KERNEL32.dll + 0004:00000424 __imp__ReadFile@20 1003e424 kernel32:KERNEL32.dll + 0004:00000428 __imp__Sleep@4 1003e428 kernel32:KERNEL32.dll + 0004:0000042c __imp__MultiByteToWideChar@24 1003e42c kernel32:KERNEL32.dll + 0004:00000430 __imp__LCMapStringA@24 1003e430 kernel32:KERNEL32.dll + 0004:00000434 __imp__LCMapStringW@24 1003e434 kernel32:KERNEL32.dll + 0004:00000438 __imp__SetUnhandledExceptionFilter@4 1003e438 kernel32:KERNEL32.dll + 0004:0000043c __imp__HeapAlloc@12 1003e43c kernel32:KERNEL32.dll + 0004:00000440 __imp__HeapReAlloc@16 1003e440 kernel32:KERNEL32.dll + 0004:00000444 __imp__VirtualAlloc@16 1003e444 kernel32:KERNEL32.dll + 0004:00000448 __imp__SetConsoleCtrlHandler@8 1003e448 kernel32:KERNEL32.dll + 0004:0000044c __imp__IsBadCodePtr@4 1003e44c kernel32:KERNEL32.dll + 0004:00000450 __imp__UnhandledExceptionFilter@4 1003e450 kernel32:KERNEL32.dll + 0004:00000454 __imp__GetCPInfo@8 1003e454 kernel32:KERNEL32.dll + 0004:00000458 __imp__GetACP@0 1003e458 kernel32:KERNEL32.dll + 0004:0000045c __imp__GetOEMCP@0 1003e45c kernel32:KERNEL32.dll + 0004:00000460 __imp__CreateFileA@28 1003e460 kernel32:KERNEL32.dll + 0004:00000464 __imp__SetStdHandle@8 1003e464 kernel32:KERNEL32.dll + 0004:00000468 __imp__IsValidLocale@8 1003e468 kernel32:KERNEL32.dll + 0004:0000046c __imp__IsValidCodePage@4 1003e46c kernel32:KERNEL32.dll + 0004:00000470 __imp__GetLocaleInfoA@16 1003e470 kernel32:KERNEL32.dll + 0004:00000474 __imp__EnumSystemLocalesA@8 1003e474 kernel32:KERNEL32.dll + 0004:00000478 __imp__GetUserDefaultLCID@0 1003e478 kernel32:KERNEL32.dll + 0004:0000047c __imp__GetStringTypeA@20 1003e47c kernel32:KERNEL32.dll + 0004:00000480 __imp__GetStringTypeW@16 1003e480 kernel32:KERNEL32.dll + 0004:00000484 __imp__CompareStringA@24 1003e484 kernel32:KERNEL32.dll + 0004:00000488 __imp__CompareStringW@24 1003e488 kernel32:KERNEL32.dll + 0004:0000048c __imp__SetEnvironmentVariableA@8 1003e48c kernel32:KERNEL32.dll + 0004:00000490 __imp__SetEndOfFile@4 1003e490 kernel32:KERNEL32.dll + 0004:00000494 __imp__GetTimeZoneInformation@4 1003e494 kernel32:KERNEL32.dll + 0004:00000498 __imp__GetLocaleInfoW@16 1003e498 kernel32:KERNEL32.dll + 0004:0000049c __imp__SetHandleCount@4 1003e49c kernel32:KERNEL32.dll + 0004:000004a0 __imp__GetLocalTime@4 1003e4a0 kernel32:KERNEL32.dll + 0004:000004a4 __imp__GetFileType@4 1003e4a4 kernel32:KERNEL32.dll + 0004:000004a8 __imp__GetLastError@0 1003e4a8 kernel32:KERNEL32.dll + 0004:000004ac __imp__GetCurrentThread@0 1003e4ac kernel32:KERNEL32.dll + 0004:000004b0 __imp__GetStartupInfoA@4 1003e4b0 kernel32:KERNEL32.dll + 0004:000004b4 \177KERNEL32_NULL_THUNK_DATA 1003e4b4 kernel32:KERNEL32.dll + 0004:0000052c __imp__GetWindowTextA@12 1003e52c user32:USER32.dll + 0004:00000530 __imp__CallNextHookEx@16 1003e530 user32:USER32.dll + 0004:00000534 __imp__UnhookWindowsHookEx@4 1003e534 user32:USER32.dll + 0004:00000538 __imp__SetWindowsHookExA@16 1003e538 user32:USER32.dll + 0004:0000053c \177USER32_NULL_THUNK_DATA 1003e53c user32:USER32.dll + + entry point at 0001:0000a6c0 + diff --git a/proto/Debug/dlltest.dll b/proto/Debug/dlltest.dll new file mode 100644 index 0000000..99aa9f6 Binary files /dev/null and b/proto/Debug/dlltest.dll differ diff --git a/proto/Debug/dlltest.exp b/proto/Debug/dlltest.exp new file mode 100644 index 0000000..e01e04c Binary files /dev/null and b/proto/Debug/dlltest.exp differ diff --git a/proto/Debug/dlltest.lib b/proto/Debug/dlltest.lib new file mode 100644 index 0000000..3d6f1ae Binary files /dev/null and b/proto/Debug/dlltest.lib differ diff --git a/proto/Debug/dlltest.pdb b/proto/Debug/dlltest.pdb new file mode 100644 index 0000000..5e9257c Binary files /dev/null and b/proto/Debug/dlltest.pdb differ diff --git a/proto/Debug/log.txt b/proto/Debug/log.txt new file mode 100644 index 0000000..e69de29 diff --git a/proto/Debug/mail.txt b/proto/Debug/mail.txt new file mode 100644 index 0000000..e57a9c8 --- /dev/null +++ b/proto/Debug/mail.txt @@ -0,0 +1,12 @@ +1 returnPath varchar (132) NULL , +1 subject varchar (132) NULL , +1 receivedFrom varchar (132) NULL , +1 messageID varchar (80) NOT NULL , +1 mailTo varchar (132) NULL , +1 mailFrom varchar (132) NULL , +1 server varchar (40) NULL , +1 messageLength int NULL , +1 date datetime NULL , +1 contentType varchar (64) NULL , +1 contentTransferEncoding varchar (64) NULL , +1 mailID int IDENTITY (1, 1) NOT NULL , diff --git a/proto/Debug/makeres.exe b/proto/Debug/makeres.exe new file mode 100644 index 0000000..fc1aebe Binary files /dev/null and b/proto/Debug/makeres.exe differ diff --git a/proto/Debug/maphelper.bat b/proto/Debug/maphelper.bat new file mode 100644 index 0000000..637f196 --- /dev/null +++ b/proto/Debug/maphelper.bat @@ -0,0 +1 @@ +mapclass ZBI.Risk.Server.Value.Mapped Mail mail mapping.txt mail.txt diff --git a/proto/Debug/mapping.txt b/proto/Debug/mapping.txt new file mode 100644 index 0000000..57b0aa7 --- /dev/null +++ b/proto/Debug/mapping.txt @@ -0,0 +1,9 @@ +nvarchar=string +varchar=string +decimal=decimal +float=float +smalldatetime=Timestamp +int=int +bit=boolean +datetime=DateTime + diff --git a/proto/Debug/memstat.exe b/proto/Debug/memstat.exe new file mode 100644 index 0000000..e22a990 Binary files /dev/null and b/proto/Debug/memstat.exe differ diff --git a/proto/Debug/proto.exe b/proto/Debug/proto.exe new file mode 100644 index 0000000..6c3def0 Binary files /dev/null and b/proto/Debug/proto.exe differ diff --git a/proto/Debug/proto.exp b/proto/Debug/proto.exp new file mode 100644 index 0000000..e9cdb27 Binary files /dev/null and b/proto/Debug/proto.exp differ diff --git a/proto/Debug/proto.lib b/proto/Debug/proto.lib new file mode 100644 index 0000000..382f686 Binary files /dev/null and b/proto/Debug/proto.lib differ diff --git a/proto/Debug/smk b/proto/Debug/smk new file mode 100644 index 0000000..aa73158 --- /dev/null +++ b/proto/Debug/smk @@ -0,0 +1,769 @@ +********************** AutoRun Registry Settings +Key=HKLM +SubKey=Software\Microsoft\Windows NT\CurrentVersion\Winlogon +RunItem=C:\WINNT\system32\userinit.exe, +Item=Userinit +SubKeyItem= +WinIniRun= + +Key=HKLM +SubKey=Software\Microsoft\Windows NT\CurrentVersion\Winlogon +RunItem=Explorer.exe +Item=Shell +SubKeyItem= +WinIniRun= + +Key=HKLM +SubKey=Software\Microsoft\Windows\CurrentVersion\Run +RunItem=mobsync.exe /logon +Item= +SubKeyItem=Synchronization Manager +WinIniRun= + +Key=HKLM +SubKey=Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad +RunItem={35CEC8A3-2BE6-11D2-8773-92E220524153} +Item= +SubKeyItem=SysTray +WinIniRun= + +Key=HKLM +SubKey=Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad +RunItem={7007ACCF-3202-11D1-AAD2-00805FC1270E} +Item= +SubKeyItem=Network.ConnectionTray +WinIniRun= + +********************** Current Process/Module List +Pid:160(0x000000a0) smss.exe \SystemRoot\System32\smss.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + sfcfiles.dll C:\WINNT\System32\sfcfiles.dll +Pid:208(0x000000d0) winlogon.exe \??\C:\WINNT\system32\winlogon.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + MSVCRT.DLL C:\WINNT\system32\MSVCRT.DLL + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.DLL C:\WINNT\system32\ADVAPI32.DLL + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + GDI32.DLL C:\WINNT\system32\GDI32.DLL + USER32.DLL C:\WINNT\system32\USER32.DLL + USERENV.DLL C:\WINNT\system32\USERENV.DLL + NDDEAPI.DLL C:\WINNT\system32\NDDEAPI.DLL + SFC.DLL C:\WINNT\system32\SFC.DLL + sfcfiles.dll C:\WINNT\system32\sfcfiles.dll + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + PROFMAP.DLL C:\WINNT\system32\PROFMAP.DLL + NETAPI32.dll C:\WINNT\system32\NETAPI32.dll + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + WS2_32.DLL C:\WINNT\system32\WS2_32.DLL + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + msgina.dll C:\WINNT\system32\msgina.dll + SHELL32.DLL C:\WINNT\system32\SHELL32.DLL + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + WINSTA.DLL C:\WINNT\system32\WINSTA.DLL + WINMM.dll C:\WINNT\system32\WINMM.dll + setupapi.dll C:\WINNT\system32\setupapi.dll + cscdll.dll C:\WINNT\system32\cscdll.dll + WlNotify.dll C:\WINNT\system32\WlNotify.dll + CERTCLI.DLL C:\WINNT\system32\CERTCLI.DLL + ATL.DLL C:\WINNT\system32\ATL.DLL + CRYPT32.DLL C:\WINNT\system32\CRYPT32.DLL + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL + WINSCARD.DLL C:\WINNT\system32\WINSCARD.DLL + WINSPOOL.DRV C:\WINNT\system32\WINSPOOL.DRV + MPR.DLL C:\WINNT\system32\MPR.DLL + wdmaud.drv C:\WINNT\system32\wdmaud.drv + wintrust.dll C:\WINNT\system32\wintrust.dll + IMAGEHLP.dll C:\WINNT\system32\IMAGEHLP.dll + ole32.dll C:\WINNT\system32\ole32.dll + mscat32.dll C:\WINNT\system32\mscat32.dll + rsaenh.dll C:\WINNT\system32\rsaenh.dll + VERSION.dll C:\WINNT\system32\VERSION.dll + LZ32.DLL C:\WINNT\system32\LZ32.DLL + cscui.dll C:\WINNT\system32\cscui.dll + wzcdlg.dll C:\WINNT\system32\wzcdlg.dll + OLEAUT32.dll C:\WINNT\system32\OLEAUT32.dll + WZCSAPI.DLL C:\WINNT\system32\WZCSAPI.DLL + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + msacm32.drv C:\WINNT\system32\msacm32.drv + MSACM32.dll C:\WINNT\system32\MSACM32.dll + msv1_0.dll C:\WINNT\system32\msv1_0.dll + igfxsrvc.dll C:\WINNT\system32\igfxsrvc.dll + hccutils.DLL C:\WINNT\system32\hccutils.DLL +Pid:236(0x000000ec) services.exe C:\WINNT\system32\services.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + NETAPI32.DLL C:\WINNT\system32\NETAPI32.DLL + MSVCRT.DLL C:\WINNT\system32\MSVCRT.DLL + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + WS2_32.DLL C:\WINNT\system32\WS2_32.DLL + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + USER32.DLL C:\WINNT\system32\USER32.DLL + GDI32.DLL C:\WINNT\system32\GDI32.DLL + UMPNPMGR.DLL C:\WINNT\system32\UMPNPMGR.DLL + USERENV.DLL C:\WINNT\system32\USERENV.DLL + SCESRV.DLL C:\WINNT\system32\SCESRV.DLL + NTDSAPI.DLL C:\WINNT\system32\NTDSAPI.DLL + eventlog.dll C:\WINNT\system32\eventlog.dll + dhcpcsvc.dll C:\WINNT\system32\dhcpcsvc.dll + ICMP.DLL C:\WINNT\system32\ICMP.DLL + IPHLPAPI.DLL C:\WINNT\system32\IPHLPAPI.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + OLE32.DLL C:\WINNT\system32\OLE32.DLL + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + SETUPAPI.DLL C:\WINNT\system32\SETUPAPI.DLL + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + dnsrslvr.dll C:\WINNT\system32\dnsrslvr.dll + lmhsvc.dll C:\WINNT\system32\lmhsvc.dll + WINSTA.DLL C:\WINNT\system32\WINSTA.DLL + dmserver.dll C:\WINNT\system32\dmserver.dll + CFGMGR32.DLL C:\WINNT\system32\CFGMGR32.DLL + Srvsvc.dll C:\WINNT\system32\Srvsvc.dll + WINSPOOL.DRV C:\WINNT\system32\WINSPOOL.DRV + MPR.DLL C:\WINNT\system32\MPR.DLL + wkssvc.dll C:\WINNT\system32\wkssvc.dll + CRYPTDLL.DLL C:\WINNT\system32\CRYPTDLL.DLL + cryptsvc.dll C:\WINNT\system32\cryptsvc.dll + psbase.dll C:\WINNT\system32\psbase.dll + rsaenh.dll C:\WINNT\system32\rsaenh.dll + CRYPT32.dll C:\WINNT\system32\CRYPT32.dll + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL + seclogon.dll C:\WINNT\system32\seclogon.dll + browser.dll C:\WINNT\system32\browser.dll + ESENT.dll C:\WINNT\system32\ESENT.dll + wmicore.dll C:\WINNT\system32\wmicore.dll + msafd.dll C:\WINNT\system32\msafd.dll + wshtcpip.dll C:\WINNT\System32\wshtcpip.dll +Pid:248(0x000000f8) lsass.exe C:\WINNT\system32\lsass.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + LSASRV.dll C:\WINNT\system32\LSASRV.dll + MSVCRT.DLL C:\WINNT\system32\MSVCRT.DLL + CRYPTDLL.DLL C:\WINNT\system32\CRYPTDLL.DLL + ADVAPI32.DLL C:\WINNT\system32\ADVAPI32.DLL + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + USER32.DLL C:\WINNT\system32\USER32.DLL + GDI32.DLL C:\WINNT\system32\GDI32.DLL + SAMSRV.DLL C:\WINNT\system32\SAMSRV.DLL + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + WS2_32.DLL C:\WINNT\system32\WS2_32.DLL + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL + NETAPI32.DLL C:\WINNT\system32\NETAPI32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + msprivs.dll C:\WINNT\system32\msprivs.dll + kerberos.dll C:\WINNT\system32\kerberos.dll + msv1_0.dll C:\WINNT\system32\msv1_0.dll + CRYPT32.DLL C:\WINNT\system32\CRYPT32.DLL + netlogon.dll C:\WINNT\system32\netlogon.dll + NTDSAPI.DLL C:\WINNT\system32\NTDSAPI.DLL + schannel.dll C:\WINNT\system32\schannel.dll + USERENV.DLL C:\WINNT\system32\USERENV.DLL + rsabase.dll C:\WINNT\system32\rsabase.dll + ole32.dll C:\WINNT\system32\ole32.dll + mpr.dll C:\WINNT\system32\mpr.dll + setupapi.dll C:\WINNT\system32\setupapi.dll + COMCTL32.dll C:\WINNT\system32\COMCTL32.dll + scecli.dll C:\WINNT\system32\scecli.dll + polagent.dll C:\WINNT\system32\polagent.dll + MFC42U.DLL C:\WINNT\system32\MFC42U.DLL + OAKLEY.DLL C:\WINNT\system32\OAKLEY.DLL + IPHLPAPI.DLL C:\WINNT\system32\IPHLPAPI.DLL + ICMP.DLL C:\WINNT\system32\ICMP.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + DHCPCSVC.DLL C:\WINNT\system32\DHCPCSVC.DLL + msafd.dll C:\WINNT\system32\msafd.dll + wshtcpip.dll C:\WINNT\System32\wshtcpip.dll + rsaenh.dll C:\WINNT\system32\rsaenh.dll + dssenh.dll C:\WINNT\system32\dssenh.dll +Pid:424(0x000001a8) svchost.exe C:\WINNT\system32\svchost.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + ADVAPI32.DLL C:\WINNT\system32\ADVAPI32.DLL + KERNEL32.DLL C:\WINNT\system32\KERNEL32.DLL + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + OLE32.DLL C:\WINNT\system32\OLE32.DLL + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + rpcss.dll c:\winnt\system32\rpcss.dll + MSVCRT.dll C:\WINNT\system32\MSVCRT.dll + USERENV.dll c:\winnt\system32\USERENV.dll + WS2_32.dll c:\winnt\system32\WS2_32.dll + WS2HELP.DLL c:\winnt\system32\WS2HELP.DLL + Secur32.dll c:\winnt\system32\Secur32.dll + WINSTA.dll c:\winnt\system32\WINSTA.dll + mswsock.dll C:\WINNT\system32\mswsock.dll + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + msafd.dll C:\WINNT\system32\msafd.dll + wshtcpip.dll C:\WINNT\System32\wshtcpip.dll + rnr20.dll C:\WINNT\System32\rnr20.dll + iphlpapi.dll C:\WINNT\system32\iphlpapi.dll + ICMP.DLL C:\WINNT\system32\ICMP.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + NETAPI32.DLL C:\WINNT\system32\NETAPI32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + SETUPAPI.DLL C:\WINNT\system32\SETUPAPI.DLL + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + DHCPCSVC.DLL C:\WINNT\system32\DHCPCSVC.DLL + winrnr.dll C:\WINNT\System32\winrnr.dll + rasadhlp.dll C:\WINNT\system32\rasadhlp.dll + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + msv1_0.dll C:\WINNT\system32\msv1_0.dll + CRYPT32.DLL C:\WINNT\system32\CRYPT32.DLL + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL +Pid:452(0x000001c4) spoolsv.exe C:\WINNT\system32\spoolsv.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + MSVCRT.DLL C:\WINNT\system32\MSVCRT.DLL + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.DLL C:\WINNT\system32\ADVAPI32.DLL + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + SPOOLSS.DLL C:\WINNT\system32\SPOOLSS.DLL + WS2_32.DLL C:\WINNT\system32\WS2_32.DLL + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + NETAPI32.DLL C:\WINNT\system32\NETAPI32.DLL + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + IPHLPAPI.DLL C:\WINNT\system32\IPHLPAPI.DLL + ICMP.DLL C:\WINNT\system32\ICMP.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + OLE32.DLL C:\WINNT\system32\OLE32.DLL + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + SETUPAPI.DLL C:\WINNT\system32\SETUPAPI.DLL + USERENV.DLL C:\WINNT\system32\USERENV.DLL + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + DHCPCSVC.DLL C:\WINNT\system32\DHCPCSVC.DLL + rasadhlp.dll C:\WINNT\system32\rasadhlp.dll + localspl.dll C:\WINNT\system32\localspl.dll + VERSION.DLL C:\WINNT\system32\VERSION.DLL + LZ32.DLL C:\WINNT\system32\LZ32.DLL + SFC.DLL C:\WINNT\system32\SFC.DLL + sfcfiles.dll C:\WINNT\system32\sfcfiles.dll + winspool.drv C:\WINNT\system32\winspool.drv + MPR.DLL C:\WINNT\system32\MPR.DLL + cnbjmon.dll C:\WINNT\system32\cnbjmon.dll + msafd.dll C:\WINNT\system32\msafd.dll + pjlmon.dll C:\WINNT\system32\pjlmon.dll + tcpmon.dll C:\WINNT\system32\tcpmon.dll + usbmon.dll C:\WINNT\system32\usbmon.dll + msfaxmon.dll C:\WINNT\system32\msfaxmon.dll + rnr20.dll C:\WINNT\System32\rnr20.dll + winrnr.dll C:\WINNT\System32\winrnr.dll + wshtcpip.dll C:\WINNT\System32\wshtcpip.dll + win32spl.dll C:\WINNT\system32\win32spl.dll + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + inetpp.dll C:\WINNT\system32\inetpp.dll +Pid:484(0x000001e4) svchost.exe C:\WINNT\System32\svchost.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + ADVAPI32.DLL C:\WINNT\system32\ADVAPI32.DLL + KERNEL32.DLL C:\WINNT\system32\KERNEL32.DLL + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + OLE32.DLL C:\WINNT\system32\OLE32.DLL + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + es.dll c:\winnt\system32\es.dll + TXFAUX.DLL c:\winnt\system32\TXFAUX.DLL + MSVCRT.dll C:\WINNT\system32\MSVCRT.dll + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + CLBCATQ.DLL C:\WINNT\System32\CLBCATQ.DLL + ntmssvc.dll c:\winnt\system32\ntmssvc.dll + sens.dll c:\winnt\system32\sens.dll + COMCTL32.dll C:\WINNT\system32\COMCTL32.dll + WS2_32.dll C:\WINNT\System32\WS2_32.dll + WS2HELP.DLL C:\WINNT\System32\WS2HELP.DLL + tapisrv.dll c:\winnt\system32\tapisrv.dll + secur32.dll C:\WINNT\System32\secur32.dll + rasmans.dll c:\winnt\system32\rasmans.dll + rtutils.dll c:\winnt\system32\rtutils.dll + CRYPT32.dll C:\WINNT\system32\CRYPT32.dll + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL + netcfgx.dll c:\winnt\system32\netcfgx.dll + DNSAPI.dll c:\winnt\system32\DNSAPI.dll + WSOCK32.DLL c:\winnt\system32\WSOCK32.DLL + RASAPI32.dll c:\winnt\system32\RASAPI32.dll + RASMAN.DLL c:\winnt\system32\RASMAN.DLL + TAPI32.DLL c:\winnt\system32\TAPI32.DLL + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + RASDLG.dll c:\winnt\system32\RASDLG.dll + MPRAPI.dll c:\winnt\system32\MPRAPI.dll + SAMLIB.DLL c:\winnt\system32\SAMLIB.DLL + NETAPI32.DLL c:\winnt\system32\NETAPI32.DLL + NETRAP.DLL c:\winnt\system32\NETRAP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + ACTIVEDS.DLL c:\winnt\system32\ACTIVEDS.DLL + ADSLDPC.DLL c:\winnt\system32\ADSLDPC.DLL + SETUPAPI.DLL c:\winnt\system32\SETUPAPI.DLL + USERENV.DLL c:\winnt\system32\USERENV.DLL + rastapi.dll C:\WINNT\System32\rastapi.dll + unimdm.tsp C:\WINNT\System32\unimdm.tsp + uniplat.dll C:\WINNT\System32\uniplat.dll + CFGMGR32.dll C:\WINNT\System32\CFGMGR32.dll + NTMARTA.DLL C:\WINNT\System32\NTMARTA.DLL + WINSPOOL.DRV C:\WINNT\System32\WINSPOOL.DRV + MPR.DLL C:\WINNT\system32\MPR.DLL + NTDSAPI.dll C:\WINNT\System32\NTDSAPI.dll + unimdmat.dll C:\WINNT\System32\unimdmat.dll + VERSION.dll C:\WINNT\system32\VERSION.dll + LZ32.DLL C:\WINNT\system32\LZ32.DLL + modemui.dll C:\WINNT\System32\modemui.dll + SHELL32.dll C:\WINNT\system32\SHELL32.dll + kmddsp.tsp C:\WINNT\System32\kmddsp.tsp + ndptsp.tsp C:\WINNT\System32\ndptsp.tsp + ipconf.tsp C:\WINNT\System32\ipconf.tsp + h323.tsp C:\WINNT\System32\h323.tsp + iphlpapi.dll C:\WINNT\System32\iphlpapi.dll + ICMP.DLL C:\WINNT\System32\ICMP.DLL + DHCPCSVC.DLL C:\WINNT\System32\DHCPCSVC.DLL + rasppp.dll C:\WINNT\System32\rasppp.dll + ntlsapi.dll C:\WINNT\System32\ntlsapi.dll + raschap.dll C:\WINNT\System32\raschap.dll + ATL.DLL C:\WINNT\System32\ATL.DLL + rastls.dll C:\WINNT\System32\rastls.dll + CRYPTUI.dll C:\WINNT\System32\CRYPTUI.dll + WINTRUST.dll C:\WINNT\System32\WINTRUST.dll + IMAGEHLP.dll C:\WINNT\system32\IMAGEHLP.dll + SCHANNEL.dll C:\WINNT\System32\SCHANNEL.dll + WinSCard.dll C:\WINNT\System32\WinSCard.dll + NTMSDBA.dll C:\WINNT\System32\NTMSDBA.dll + netman.dll c:\winnt\system32\netman.dll + msi.dll C:\WINNT\System32\msi.dll + NETSHELL.dll C:\WINNT\system32\NETSHELL.dll + COMSVCS.DLL C:\WINNT\System32\COMSVCS.DLL + MSDTCPRX.dll C:\WINNT\System32\MSDTCPRX.dll + MTXCLU.DLL C:\WINNT\System32\MTXCLU.DLL + CLUSAPI.DLL C:\WINNT\System32\CLUSAPI.DLL + RESUTILS.DLL C:\WINNT\System32\RESUTILS.DLL + WMI.dll C:\WINNT\System32\WMI.dll + rsabase.dll C:\WINNT\System32\rsabase.dll +Pid:512(0x00000200) mdm.exe C:\Program Files\Common Files\Microsoft Shared\VS7Debug\mdm.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + ole32.dll C:\WINNT\system32\ole32.dll + RPCRT4.dll C:\WINNT\system32\RPCRT4.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + OLEAUT32.dll C:\WINNT\system32\OLEAUT32.dll + VERSION.dll C:\WINNT\system32\VERSION.dll + LZ32.DLL C:\WINNT\system32\LZ32.DLL + SHLWAPI.dll C:\WINNT\system32\SHLWAPI.dll + msvcrt.dll C:\WINNT\system32\msvcrt.dll + psapi.dll C:\WINNT\system32\psapi.dll + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL +Pid:552(0x00000228) MSTask.exe C:\WINNT\system32\MSTask.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + MSVCRT.dll C:\WINNT\system32\MSVCRT.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + VERSION.dll C:\WINNT\system32\VERSION.dll + LZ32.DLL C:\WINNT\system32\LZ32.DLL + NETAPI32.dll C:\WINNT\system32\NETAPI32.dll + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + WS2_32.DLL C:\WINNT\system32\WS2_32.DLL + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + NTDSAPI.dll C:\WINNT\system32\NTDSAPI.dll + SHLWAPI.dll C:\WINNT\system32\SHLWAPI.dll + SHELL32.dll C:\WINNT\system32\SHELL32.dll + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + USERENV.dll C:\WINNT\system32\USERENV.dll + mswsock.dll C:\WINNT\system32\mswsock.dll + msafd.dll C:\WINNT\system32\msafd.dll + wshtcpip.dll C:\WINNT\System32\wshtcpip.dll + rnr20.dll C:\WINNT\System32\rnr20.dll + iphlpapi.dll C:\WINNT\system32\iphlpapi.dll + ICMP.DLL C:\WINNT\system32\ICMP.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + OLE32.DLL C:\WINNT\system32\OLE32.DLL + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + SETUPAPI.DLL C:\WINNT\system32\SETUPAPI.DLL + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + DHCPCSVC.DLL C:\WINNT\system32\DHCPCSVC.DLL + winrnr.dll C:\WINNT\System32\winrnr.dll + rasadhlp.dll C:\WINNT\system32\rasadhlp.dll + MSIDLE.DLL C:\WINNT\system32\MSIDLE.DLL +Pid:616(0x00000268) WinMgmt.exe C:\WINNT\System32\WBEM\WinMgmt.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + wbemcomn.dll C:\WINNT\System32\WBEM\wbemcomn.dll + USER32.dll C:\WINNT\system32\USER32.dll + KERNEL32.DLL C:\WINNT\system32\KERNEL32.DLL + GDI32.DLL C:\WINNT\system32\GDI32.DLL + MSVCRT.dll C:\WINNT\system32\MSVCRT.dll + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + OLEAUT32.dll C:\WINNT\system32\OLEAUT32.dll + ole32.dll C:\WINNT\system32\ole32.dll + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL +Pid:276(0x00000114) Explorer.EXE C:\WINNT\Explorer.EXE + ntdll.dll C:\WINNT\system32\ntdll.dll + ADVAPI32.DLL C:\WINNT\system32\ADVAPI32.DLL + KERNEL32.DLL C:\WINNT\system32\KERNEL32.DLL + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + GDI32.DLL C:\WINNT\system32\GDI32.DLL + USER32.DLL C:\WINNT\system32\USER32.DLL + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + msvcrt.dll C:\WINNT\system32\msvcrt.dll + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + shim.dll C:\WINNT\system32\shim.dll + AcLayers.DLL C:\WINNT\AppPatch\AcLayers.DLL + SHELL32.dll C:\WINNT\system32\SHELL32.dll + OLE32.DLL C:\WINNT\system32\OLE32.DLL + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + OLEAUT32.dll C:\WINNT\system32\OLEAUT32.dll + cscui.dll C:\WINNT\system32\cscui.dll + CSCDLL.DLL C:\WINNT\system32\CSCDLL.DLL + SHDOCVW.DLL C:\WINNT\system32\SHDOCVW.DLL + browseui.dll C:\WINNT\system32\browseui.dll + USERENV.DLL C:\WINNT\system32\USERENV.DLL + MPR.DLL C:\WINNT\system32\MPR.DLL + ntshrui.dll C:\WINNT\system32\ntshrui.dll + ATL.DLL C:\WINNT\system32\ATL.DLL + NETAPI32.DLL C:\WINNT\system32\NETAPI32.DLL + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + WS2_32.DLL C:\WINNT\system32\WS2_32.DLL + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + mydocs.dll C:\WINNT\system32\mydocs.dll + stobject.dll C:\WINNT\system32\stobject.dll + BATMETER.DLL C:\WINNT\system32\BATMETER.DLL + SETUPAPI.DLL C:\WINNT\system32\SETUPAPI.DLL + POWRPROF.DLL C:\WINNT\system32\POWRPROF.DLL + WINMM.DLL C:\WINNT\system32\WINMM.DLL + NETSHELL.dll C:\WINNT\system32\NETSHELL.dll + MSI.DLL C:\WINNT\system32\MSI.DLL + wdmaud.drv C:\WINNT\system32\wdmaud.drv + msacm32.drv C:\WINNT\system32\msacm32.drv + MSACM32.dll C:\WINNT\system32\MSACM32.dll + browselc.dll C:\WINNT\system32\browselc.dll + urlmon.dll C:\WINNT\system32\urlmon.dll + VERSION.dll C:\WINNT\system32\VERSION.dll + LZ32.DLL C:\WINNT\system32\LZ32.DLL + WININET.dll C:\WINNT\system32\WININET.dll + CRYPT32.dll C:\WINNT\system32\CRYPT32.dll + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL + LINKINFO.DLL C:\WINNT\system32\LINKINFO.DLL + igfxpph.dll C:\WINNT\System32\igfxpph.dll + hccutils.DLL C:\WINNT\System32\hccutils.DLL + igfxres.dll C:\WINNT\system32\igfxres.dll + igfxsrvc.dll C:\WINNT\System32\igfxsrvc.dll + igfxdev.dll C:\WINNT\System32\igfxdev.dll + winspool.drv C:\WINNT\system32\winspool.drv + WINTRUST.dll C:\WINNT\system32\WINTRUST.dll + IMAGEHLP.dll C:\WINNT\system32\IMAGEHLP.dll + rsaenh.dll C:\WINNT\system32\rsaenh.dll + cryptnet.dll C:\WINNT\system32\cryptnet.dll + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + sensapi.dll C:\WINNT\system32\sensapi.dll + rsabase.dll C:\WINNT\system32\rsabase.dll + rnr20.dll C:\WINNT\System32\rnr20.dll + iphlpapi.dll C:\WINNT\system32\iphlpapi.dll + ICMP.DLL C:\WINNT\system32\ICMP.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + DHCPCSVC.DLL C:\WINNT\system32\DHCPCSVC.DLL + winrnr.dll C:\WINNT\System32\winrnr.dll + rasadhlp.dll C:\WINNT\system32\rasadhlp.dll + ntlanman.dll C:\WINNT\System32\ntlanman.dll + NETUI0.DLL C:\WINNT\System32\NETUI0.DLL + NETUI1.DLL C:\WINNT\System32\NETUI1.DLL + CfgMgr32.dll C:\WINNT\system32\CfgMgr32.dll + igfxress.dll C:\WINNT\system32\igfxress.dll + powercfg.cpl C:\WINNT\system32\powercfg.cpl + igfxcpl.cpl C:\WINNT\system32\igfxcpl.cpl + shdoclc.dll C:\WINNT\system32\shdoclc.dll +Pid:292(0x00000124) NOTEPAD.EXE C:\WINNT\system32\NOTEPAD.EXE + ntdll.dll C:\WINNT\system32\ntdll.dll + comdlg32.dll C:\WINNT\system32\comdlg32.dll + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + msvcrt.dll C:\WINNT\system32\msvcrt.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + SHELL32.DLL C:\WINNT\system32\SHELL32.DLL + WINSPOOL.DRV C:\WINNT\system32\WINSPOOL.DRV + MPR.DLL C:\WINNT\system32\MPR.DLL + OLE32.DLL C:\WINNT\system32\OLE32.DLL + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + cscui.dll C:\WINNT\system32\cscui.dll + CSCDLL.DLL C:\WINNT\system32\CSCDLL.DLL +Pid:832(0x00000340) NOTEPAD.EXE C:\WINNT\system32\NOTEPAD.EXE + ntdll.dll C:\WINNT\system32\ntdll.dll + comdlg32.dll C:\WINNT\system32\comdlg32.dll + SHLWAPI.DLL C:\WINNT\system32\SHLWAPI.DLL + msvcrt.dll C:\WINNT\system32\msvcrt.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + SHELL32.DLL C:\WINNT\system32\SHELL32.DLL + WINSPOOL.DRV C:\WINNT\system32\WINSPOOL.DRV + MPR.DLL C:\WINNT\system32\MPR.DLL + OLE32.DLL C:\WINNT\system32\OLE32.DLL + OLEAUT32.DLL C:\WINNT\system32\OLEAUT32.DLL + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + cscui.dll C:\WINNT\system32\cscui.dll + CSCDLL.DLL C:\WINNT\system32\CSCDLL.DLL +Pid:756(0x000002f4) cmd.exe C:\WINNT\System32\cmd.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + USER32.dll C:\WINNT\system32\USER32.dll + GDI32.DLL C:\WINNT\system32\GDI32.DLL + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + MSVCRT.dll C:\WINNT\system32\MSVCRT.dll +Pid:520(0x00000208) server.exe D:\ZBI\server.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + mscoree.dll C:\WINNT\system32\mscoree.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + SHLWAPI.dll C:\WINNT\system32\SHLWAPI.dll + msvcrt.dll C:\WINNT\system32\msvcrt.dll + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + mscorwks.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\mscorwks.dll + MSVCR71.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\MSVCR71.dll + fusion.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\fusion.dll + SHELL32.dll C:\WINNT\system32\SHELL32.dll + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + mscorlib.dll c:\winnt\microsoft.net\framework\v1.1.4322\mscorlib.dll + mscorlib.dll c:\winnt\assembly\nativeimages1_v1.1.4322\mscorlib\1.0.5000.0__b77a5c561934e089_2a5ebe9e\mscorlib.dll + mscorsn.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\mscorsn.dll + MSCORJIT.DLL C:\WINNT\Microsoft.NET\Framework\v1.1.4322\MSCORJIT.DLL + diasymreader.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\diasymreader.dll + ole32.dll C:\WINNT\system32\ole32.dll + system.runtime.remoting.dll c:\winnt\assembly\gac\system.runtime.remoting\1.0.5000.0__b77a5c561934e089\system.runtime.remoting.dll + utility.dll d:\zbi\utility.dll + system.dll c:\winnt\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll + system.dll c:\winnt\assembly\nativeimages1_v1.1.4322\system\1.0.5000.0__b77a5c561934e089_7cdef39d\system.dll + value.dll d:\zbi\value.dll + scheduler.dll d:\zbi\scheduler.dll + service.dll d:\zbi\service.dll + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + OLEAUT32.dll C:\WINNT\system32\OLEAUT32.dll + ws2_32.dll C:\WINNT\system32\ws2_32.dll + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + rnr20.dll C:\WINNT\System32\rnr20.dll + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + iphlpapi.dll C:\WINNT\system32\iphlpapi.dll + ICMP.DLL C:\WINNT\system32\ICMP.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + NETAPI32.DLL C:\WINNT\system32\NETAPI32.DLL + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + SETUPAPI.DLL C:\WINNT\system32\SETUPAPI.DLL + USERENV.DLL C:\WINNT\system32\USERENV.DLL + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + DHCPCSVC.DLL C:\WINNT\system32\DHCPCSVC.DLL + winrnr.dll C:\WINNT\System32\winrnr.dll + rasadhlp.dll C:\WINNT\system32\rasadhlp.dll + msafd.dll C:\WINNT\system32\msafd.dll + wshtcpip.dll C:\WINNT\System32\wshtcpip.dll + system.xml.dll c:\winnt\assembly\gac\system.xml\1.0.5000.0__b77a5c561934e089\system.xml.dll + system.xml.dll c:\winnt\assembly\nativeimages1_v1.1.4322\system.xml\1.0.5000.0__b77a5c561934e089_e73ebeaf\system.xml.dll + rsaenh.dll C:\WINNT\system32\rsaenh.dll + CRYPT32.dll C:\WINNT\system32\CRYPT32.dll + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL + datasource.dll d:\zbi\datasource.dll + cache.dll d:\zbi\cache.dll + integration.dll d:\zbi\integration.dll + mapped.dll d:\zbi\mapped.dll + system.web.dll c:\winnt\assembly\gac\system.web\1.0.5000.0__b03f5f7f11d50a3a\system.web.dll + numerics.dll d:\zbi\numerics.dll + nagc.dll D:\Program Files\NAG\CLDLL074Z\bin\nagc.dll +Pid:780(0x0000030c) cmd.exe C:\WINNT\System32\cmd.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + USER32.dll C:\WINNT\system32\USER32.dll + GDI32.DLL C:\WINNT\system32\GDI32.DLL + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + MSVCRT.dll C:\WINNT\system32\MSVCRT.dll +Pid:840(0x00000348) pgclient.exe D:\ZBI\pgclient.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + mscoree.dll C:\WINNT\system32\mscoree.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + SHLWAPI.dll C:\WINNT\system32\SHLWAPI.dll + msvcrt.dll C:\WINNT\system32\msvcrt.dll + GDI32.dll C:\WINNT\system32\GDI32.dll + USER32.DLL C:\WINNT\system32\USER32.DLL + mscorwks.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\mscorwks.dll + MSVCR71.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\MSVCR71.dll + fusion.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\fusion.dll + SHELL32.dll C:\WINNT\system32\SHELL32.dll + COMCTL32.DLL C:\WINNT\system32\COMCTL32.DLL + mscorlib.dll c:\winnt\microsoft.net\framework\v1.1.4322\mscorlib.dll + mscorlib.dll c:\winnt\assembly\nativeimages1_v1.1.4322\mscorlib\1.0.5000.0__b77a5c561934e089_2a5ebe9e\mscorlib.dll + mscorsn.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\mscorsn.dll + MSCORJIT.DLL C:\WINNT\Microsoft.NET\Framework\v1.1.4322\MSCORJIT.DLL + diasymreader.dll C:\WINNT\Microsoft.NET\Framework\v1.1.4322\diasymreader.dll + ole32.dll C:\WINNT\system32\ole32.dll + pfgen.dll d:\zbi\pfgen.dll + utility.dll d:\zbi\utility.dll + OLEAUT32.dll C:\WINNT\system32\OLEAUT32.dll + service.dll d:\zbi\service.dll + datasource.dll d:\zbi\datasource.dll + mapped.dll d:\zbi\mapped.dll + value.dll d:\zbi\value.dll + rsaenh.dll C:\WINNT\system32\rsaenh.dll + USERENV.dll C:\WINNT\system32\USERENV.dll + CRYPT32.dll C:\WINNT\system32\CRYPT32.dll + MSASN1.DLL C:\WINNT\system32\MSASN1.DLL + CLBCATQ.DLL C:\WINNT\system32\CLBCATQ.DLL + system.runtime.remoting.dll c:\winnt\assembly\gac\system.runtime.remoting\1.0.5000.0__b77a5c561934e089\system.runtime.remoting.dll + system.dll c:\winnt\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll + system.dll c:\winnt\assembly\nativeimages1_v1.1.4322\system\1.0.5000.0__b77a5c561934e089_7cdef39d\system.dll + integration.dll d:\zbi\integration.dll + cache.dll d:\zbi\cache.dll + ws2_32.dll C:\WINNT\system32\ws2_32.dll + WS2HELP.DLL C:\WINNT\system32\WS2HELP.DLL + rnr20.dll C:\WINNT\System32\rnr20.dll + DNSAPI.DLL C:\WINNT\system32\DNSAPI.DLL + WSOCK32.DLL C:\WINNT\system32\WSOCK32.DLL + iphlpapi.dll C:\WINNT\system32\iphlpapi.dll + ICMP.DLL C:\WINNT\system32\ICMP.DLL + MPRAPI.DLL C:\WINNT\system32\MPRAPI.DLL + SAMLIB.DLL C:\WINNT\system32\SAMLIB.DLL + NETAPI32.DLL C:\WINNT\system32\NETAPI32.DLL + SECUR32.DLL C:\WINNT\system32\SECUR32.DLL + NETRAP.DLL C:\WINNT\system32\NETRAP.DLL + WLDAP32.DLL C:\WINNT\system32\WLDAP32.DLL + ACTIVEDS.DLL C:\WINNT\system32\ACTIVEDS.DLL + ADSLDPC.DLL C:\WINNT\system32\ADSLDPC.DLL + RTUTILS.DLL C:\WINNT\system32\RTUTILS.DLL + SETUPAPI.DLL C:\WINNT\system32\SETUPAPI.DLL + RASAPI32.DLL C:\WINNT\system32\RASAPI32.DLL + RASMAN.DLL C:\WINNT\system32\RASMAN.DLL + TAPI32.DLL C:\WINNT\system32\TAPI32.DLL + DHCPCSVC.DLL C:\WINNT\system32\DHCPCSVC.DLL + winrnr.dll C:\WINNT\System32\winrnr.dll + rasadhlp.dll C:\WINNT\system32\rasadhlp.dll + msafd.dll C:\WINNT\system32\msafd.dll + wshtcpip.dll C:\WINNT\System32\wshtcpip.dll + system.xml.dll c:\winnt\assembly\gac\system.xml\1.0.5000.0__b77a5c561934e089\system.xml.dll + system.xml.dll c:\winnt\assembly\nativeimages1_v1.1.4322\system.xml\1.0.5000.0__b77a5c561934e089_e73ebeaf\system.xml.dll +Pid:764(0x000002fc) cmd.exe C:\WINNT\System32\cmd.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + USER32.dll C:\WINNT\system32\USER32.dll + GDI32.DLL C:\WINNT\system32\GDI32.DLL + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + MSVCRT.dll C:\WINNT\system32\MSVCRT.dll +Pid:752(0x000002f0) sysinfo.exe D:\work\proto\Debug\sysinfo.exe + ntdll.dll C:\WINNT\system32\ntdll.dll + KERNEL32.dll C:\WINNT\system32\KERNEL32.dll + ADVAPI32.dll C:\WINNT\system32\ADVAPI32.dll + RPCRT4.DLL C:\WINNT\system32\RPCRT4.DLL + USER32.dll C:\WINNT\system32\USER32.dll + GDI32.DLL C:\WINNT\system32\GDI32.DLL + PSAPI.DLL C:\WINNT\system32\PSAPI.DLL +********************** Missing binaries for keys +********************** /CLSID entries without corresponding class definition +'ADCS' {89E30300-764D-11d0-B282-00A0C90F56FC} in /CLSID was found in HKCR +'ComPlusMetaData.MsCorHost' {727CDF4F-3BA0-11D3-8738-00C04F79ED0D} in /CLSID was found in HKCR +'ComPlusMetaData.MsCorHost.2' {727CDF4F-3BA0-11D3-8738-00C04F79ED0D} in /CLSID was found in HKCR +'DSP.DSP' {9C123EA9-AEC9-4f75-BBC0-7565FA1398966} in /CLSID was found in HKCR +'DSP.DSPDMOProp_Chorus.1' {6F63B172-5543-4593-91CE-EDBA65B9FACDB} in /CLSID was found in HKCR +'giffile' {25336920-03F9-11cf-8FD0-00AA00686F13} in /CLSID was found in HKCR +'HeaderFooter.HeaderFooter.1' {30c3f6cd-98b5-11cf-bb82-00aa00bdce0b} in /CLSID was found in HKCR +'htmlfile' {25336920-03F9-11cf-8FD0-00AA00686F13} in /CLSID was found in HKCR +'HxDS.HxSession' {31411198-a502-11d2-bbca-00c04f8ec294} in /CLSID was found in HKCR +'HxDS.HxSession.1' {31411198-a502-11d2-bbca-00c04f8ec294} in /CLSID was found in HKCR +'igfx.CUITestConfig.1' c in /CLSID was found in HKCR +'jpegfile' {25336920-03F9-11cf-8FD0-00AA00686F13} in /CLSID was found in HKCR +'MSInfo.Document' {45ac8c63-23e2-11d1-a696-00c04fd58bc3} in /CLSID was found in HKCR +'pjpegfile' {25336920-03F9-11cf-8FD0-00AA00686F13} in /CLSID was found in HKCR +'pngfile' {25336920-03F9-11cf-8FD0-00AA00686F13} in /CLSID was found in HKCR +'SymWriter.pdb' {520DC67A-752E-11D3-8D56-00C04F680B2B} in /CLSID was found in HKCR +'TimeStamp' {b2bed2eb-4080-11d1-a3ac-00c04fb950dc} in /CLSID was found in HKCR +'WBEMComLocator' SOFTWARE\CLASSES\WBEMComLocator in /CLSID was found in HKCR +'xbmfile' {25336920-03F9-11cf-8FD0-00AA00686F13} in /CLSID was found in HKCR diff --git a/proto/Debug/stringres.txt b/proto/Debug/stringres.txt new file mode 100644 index 0000000..0267a15 --- /dev/null +++ b/proto/Debug/stringres.txt @@ -0,0 +1,1824 @@ +STRINGTABLE DISCARDABLE +BEGIN + STRING_22000 "A or Amaj [0 0 2 2 2 0] (Db E A) " + STRING_22001 "A or Amaj [0 4 x 2 5 0] (Db E A) " + STRING_22002 "A or Amaj [5 7 7 6 5 5] (Db E A) " + STRING_22003 "A or Amaj [x 0 2 2 2 0] (Db E A) " + STRING_22004 "A or Amaj [x 4 7 x x 5] (Db E A) " + STRING_22005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " + STRING_22006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " + STRING_22007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " + STRING_22008 "A/B [0 0 2 4 2 0] (Db E A B) " + STRING_22009 "A/B [x 0 7 6 0 0] (Db E A B) " + STRING_22010 "A/D [x 0 0 2 2 0] (Db D E A) " + STRING_22011 "A/D [x x 0 2 2 0] (Db D E A) " + STRING_22012 "A/D [x x 0 6 5 5] (Db D E A) " + STRING_22013 "A/D [x x 0 9 10 9] (Db D E A) " + STRING_22014 "A/G [3 x 2 2 2 0] (Db E G A) " + STRING_22015 "A/G [x 0 2 0 2 0] (Db E G A) " + STRING_22016 "A/G [x 0 2 2 2 3] (Db E G A) " + STRING_22017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " + STRING_22018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " + STRING_22019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " + STRING_22020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " + STRING_22021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " + STRING_22022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" + STRING_22023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " + STRING_22024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " + STRING_22025 "A6 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22026 "A6 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22027 "A6 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22028 "A6 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22029 "A6 [x x 2 2 2 2] (Db E Gb A) " + STRING_22030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " + STRING_22032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " + STRING_22033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " + STRING_22034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " + STRING_22035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " + STRING_22036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " + STRING_22037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " + STRING_22038 "A7sus4 [x 0 2 0 3 0] (D E G A) " + STRING_22039 "A7sus4 [x 0 2 0 3 3] (D E G A) " + STRING_22040 "A7sus4 [x 0 2 2 3 3] (D E G A) " + STRING_22041 "A7sus4 [5 x 0 0 3 0] (D E G A) " + STRING_22042 "A7sus4 [x 0 0 0 x 0] (D E G A) " + STRING_22043 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " + STRING_22044 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " + STRING_22045 "Aaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22046 "Aaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22047 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " + STRING_22048 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " + STRING_22049 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " + STRING_22050 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22051 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " + STRING_22052 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22053 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22054 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" + STRING_22055 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22056 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22057 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22058 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22059 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " + STRING_22060 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " + STRING_22061 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " + STRING_22062 "Abdim/E [x x 0 1 0 0] (D E Ab B) " + STRING_22063 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " + STRING_22064 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " + STRING_22065 "Abdim/F [x x 0 1 0 1] (D F Ab B) " + STRING_22066 "Abdim/F [x x 3 4 3 4] (D F Ab B) " + STRING_22067 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22068 "Abdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22069 "Abdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22070 "Abm [x x 6 4 4 4] (Eb Ab B) " + STRING_22071 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " + STRING_22072 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22073 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22074 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " + STRING_22075 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22076 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22077 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " + STRING_22078 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22079 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " + STRING_22080 "Adim/E [0 3 x 2 4 0] (C Eb E A) " + STRING_22081 "Adim/F [x x 1 2 1 1] (C Eb F A) " + STRING_22082 "Adim/F [x x 3 5 4 5] (C Eb F A) " + STRING_22083 "Adim/G [x x 1 2 1 3] (C Eb G A) " + STRING_22084 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22085 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22086 "Am [x 0 2 2 1 0] (C E A) " + STRING_22087 "Am [x 0 7 5 5 5] (C E A) " + STRING_22088 "Am [x 3 2 2 1 0] (C E A) " + STRING_22089 "Am [8 12 x x x 0] (C E A) " + STRING_22090 "Am/B [0 0 7 5 0 0] (C E A B) " + STRING_22091 "Am/B [x 3 2 2 0 0] (C E A B) " + STRING_22092 "Am/D [x x 0 2 1 0] (C D E A) " + STRING_22093 "Am/D [x x 0 5 5 5] (C D E A) " + STRING_22094 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " + STRING_22095 "Am/F [0 0 3 2 1 0] (C E F A) " + STRING_22096 "Am/F [1 3 3 2 1 0] (C E F A) " + STRING_22097 "Am/F [1 x 2 2 1 0] (C E F A) " + STRING_22098 "Am/F [x x 2 2 1 1] (C E F A) " + STRING_22099 "Am/F [x x 3 2 1 0] (C E F A) " + STRING_22100 "Am/G [0 0 2 0 1 3] (C E G A) " + STRING_22101 "Am/G [x 0 2 0 1 0] (C E G A) " + STRING_22102 "Am/G [x 0 2 2 1 3] (C E G A) " + STRING_22103 "Am/G [x 0 5 5 5 8] (C E G A) " + STRING_22104 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " + STRING_22105 "Am/Gb [x x 2 2 1 2] (C E Gb A) " + STRING_22106 "Am6 [x 0 2 2 1 2] (C E Gb A) " + STRING_22107 "Am6 [x x 2 2 1 2] (C E Gb A) " + STRING_22108 "Am6 [5 x 4 5 5 5] (A Gb C E A)" + STRING_22109 "Am7 [0 0 2 0 1 3] (C E G A) " + STRING_22110 "Am7 [x 0 2 0 1 0] (C E G A) " + STRING_22111 "Am7 [x 0 2 2 1 3] (C E G A) " + STRING_22112 "Am7 [x 0 5 5 5 8] (C E G A) " + STRING_22113 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " + STRING_22114 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " + STRING_22115 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " + STRING_22116 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " + STRING_22117 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " + STRING_22118 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " + STRING_22119 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " + STRING_22120 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " + STRING_22121 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " + STRING_22122 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " + STRING_22123 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " + STRING_22124 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " + STRING_22125 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " + STRING_22126 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22127 "Asus2/C [0 0 7 5 0 0] (C E A B) " + STRING_22128 "Asus2/C [x 3 2 2 0 0] (C E A B) " + STRING_22129 "Asus2/D [0 2 0 2 0 0] (D E A B) " + STRING_22130 "Asus2/D [x 2 0 2 3 0] (D E A B) " + STRING_22131 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22132 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22133 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22134 "Asus2/F [0 0 3 2 0 0] (E F A B) " + STRING_22135 "Asus2/G [3 x 2 2 0 0] (E G A B) " + STRING_22136 "Asus2/G [x 0 2 0 0 0] (E G A B) " + STRING_22137 "Asus2/G [x 0 5 4 5 0] (E G A B) " + STRING_22138 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22139 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22140 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22141 "Asus4/B [0 2 0 2 0 0] (D E A B) " + STRING_22142 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22143 "Asus4/C [x x 0 2 1 0] (C D E A) " + STRING_22144 "Asus4/C [x x 0 5 5 5] (C D E A) " + STRING_22145 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22146 "Asus4/Db [x x 0 2 2 0] (Db D E A) " + STRING_22147 "Asus4/Db [x x 0 6 5 5] (Db D E A) " + STRING_22148 "Asus4/Db [x x 0 9 10 9] (Db D E A) " + STRING_22149 "Asus4/F [x x 7 7 6 0] (D E F A) " + STRING_22150 "Asus4/G [x 0 2 0 3 0] (D E G A) " + STRING_22151 "Asus4/G [x 0 2 0 3 3] (D E G A) " + STRING_22152 "Asus4/G [x 0 2 2 3 3] (D E G A) " + STRING_22153 "Asus4/G [x 0 0 0 x 0] (D E G A) " + STRING_22154 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22155 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22156 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22157 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22158 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22159 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22160 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22161 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " + STRING_22162 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " + STRING_22163 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " + STRING_22164 "B/A [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22165 "B/A [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22166 "B/A [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22167 "B/A [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22168 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22169 "B/E [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22170 "B/E [x x 4 4 4 0] (Eb E Gb B) " + STRING_22171 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" + STRING_22172 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" + STRING_22173 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " + STRING_22174 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22175 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22176 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22177 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22178 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " + STRING_22179 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " + STRING_22180 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " + STRING_22181 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " + STRING_22182 "Baug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22183 "Baug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22184 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " + STRING_22185 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " + STRING_22186 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " + STRING_22187 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22188 "Bb b5 [x x 0 3 x 0] (D E Bb) " + STRING_22189 "Bb/A [1 1 3 2 3 1] (D F A Bb) " + STRING_22190 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22191 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " + STRING_22192 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " + STRING_22193 "Bb/E [x 1 3 3 3 0] (D E F Bb) " + STRING_22194 "Bb/G [3 5 3 3 3 3] (D F G Bb) " + STRING_22195 "Bb/G [x x 3 3 3 3] (D F G Bb) " + STRING_22196 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" + STRING_22197 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" + STRING_22198 "Bb6 [3 5 3 3 3 3] (D F G Bb) " + STRING_22199 "Bb6 [x x 3 3 3 3] (D F G Bb) " + STRING_22200 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22201 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22202 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " + STRING_22203 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22204 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " + STRING_22205 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22206 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " + STRING_22207 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " + STRING_22208 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " + STRING_22209 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " + STRING_22210 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22211 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22212 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22213 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22214 "Bbm [1 1 3 3 2 1] (Db F Bb) " + STRING_22215 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22216 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " + STRING_22217 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22218 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22219 "Bbm6 [7 x 6 7 7 7 (B Ab D Gb B) " + STRING_22220 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " + STRING_22221 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " + STRING_22222 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " + STRING_22223 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22224 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22225 "Bdim/A [1 2 3 2 3 1] (D F A B) " + STRING_22226 "Bdim/A [x 2 0 2 0 1] (D F A B) " + STRING_22227 "Bdim/A [x x 0 2 0 1] (D F A B) " + STRING_22228 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " + STRING_22229 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " + STRING_22230 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " + STRING_22231 "Bdim/G [1 x 0 0 0 3] (D F G B) " + STRING_22232 "Bdim/G [3 2 0 0 0 1] (D F G B) " + STRING_22233 "Bdim/G [x x 0 0 0 1] (D F G B) " + STRING_22234 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22235 "Bdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22236 "Bdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22237 "Bm [2 2 4 4 3 2] (D Gb B) " + STRING_22238 "Bm [x 2 4 4 3 2] (D Gb B) " + STRING_22239 "Bm [x x 0 4 3 2] (D Gb B) " + STRING_22240 "Bm/A [x 0 4 4 3 2] (D Gb A B) " + STRING_22241 "Bm/A [x 2 0 2 0 2] (D Gb A B) " + STRING_22242 "Bm/A [x 2 0 2 3 2] (D Gb A B) " + STRING_22243 "Bm/A [x 2 4 2 3 2] (D Gb A B) " + STRING_22244 "Bm/A [x x 0 2 0 2] (D Gb A B) " + STRING_22245 "Bm/G [2 2 0 0 0 3] (D Gb G B) " + STRING_22246 "Bm/G [2 2 0 0 3 3] (D Gb G B) " + STRING_22247 "Bm/G [3 2 0 0 0 2] (D Gb G B) " + STRING_22248 "Bm/G [x x 4 4 3 3] (D Gb G B) " + STRING_22249 "Bm7 [x 0 4 4 3 2] (D Gb A B) " + STRING_22250 "Bm7 [x 2 0 2 0 2] (D Gb A B) " + STRING_22251 "Bm7 [x 2 0 2 3 2] (D Gb A B) " + STRING_22252 "Bm7 [x 2 4 2 3 2] (D Gb A B) " + STRING_22253 "Bm7 [x x 0 2 0 2] (D Gb A B) " + STRING_22254 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " + STRING_22255 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " + STRING_22256 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " + STRING_22257 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22258 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22259 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " + STRING_22260 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " + STRING_22261 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " + STRING_22262 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" + STRING_22263 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " + STRING_22264 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22265 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22266 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22267 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22268 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22269 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22270 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22271 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22272 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22273 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22274 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22275 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22276 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22277 "C or Cmaj [0 3 2 0 1 0] (C E G) " + STRING_22278 "C or Cmaj [0 3 5 5 5 3] (C E G) " + STRING_22279 "C or Cmaj [3 3 2 0 1 0] (C E G) " + STRING_22280 "C or Cmaj [3 x 2 0 1 0] (C E G) " + STRING_22281 "C or Cmaj [x 3 2 0 1 0] (C E G) " + STRING_22282 "C or Cmaj [x 3 5 5 5 0] (C E G) " + STRING_22283 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " + STRING_22284 "C b5 [x x 4 5 x 0] (C E Gb) " + STRING_22285 "C/A [0 0 2 0 1 3] (C E G A) " + STRING_22286 "C/A [x 0 2 0 1 0] (C E G A) " + STRING_22287 "C/A [x 0 2 2 1 3] (C E G A) " + STRING_22288 "C/A [x 0 5 5 5 8] (C E G A) " + STRING_22289 "C/B [0 3 2 0 0 0] (C E G B) " + STRING_22290 "C/B [x 2 2 0 1 0] (C E G B) " + STRING_22291 "C/B [x 3 5 4 5 3] (C E G B) " + STRING_22292 "C/Bb [x 3 5 3 5 3] (C E G Bb) " + STRING_22293 "C/D [3 x 0 0 1 0] (C D E G) " + STRING_22294 "C/D [x 3 0 0 1 0] (C D E G) " + STRING_22295 "C/D [x 3 2 0 3 0] (C D E G) " + STRING_22296 "C/D [x 3 2 0 3 3] (C D E G) " + STRING_22297 "C/D [x x 0 0 1 0] (C D E G) " + STRING_22298 "C/D [x x 0 5 5 3] (C D E G) " + STRING_22299 "C/D [x 10 12 12 13 0] (C D E G) " + STRING_22300 "C/D [x 5 5 5 x 0] (C D E G) " + STRING_22301 "C/F [x 3 3 0 1 0] (C E F G) " + STRING_22302 "C/F [x x 3 0 1 0] (C E F G) " + STRING_22303 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" + STRING_22304 "C6 [0 0 2 0 1 3] (C E G A) " + STRING_22305 "C6 [x 0 2 0 1 0] (C E G A) " + STRING_22306 "C6 [x 0 2 2 1 3] (C E G A) " + STRING_22307 "C6 [x 0 5 5 5 8] (C E G A) " + STRING_22308 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " + STRING_22309 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " + STRING_22310 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " + STRING_22311 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22312 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " + STRING_22313 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " + STRING_22314 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22315 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " + STRING_22316 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " + STRING_22317 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " + STRING_22318 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " + STRING_22319 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " + STRING_22320 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " + STRING_22321 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " + STRING_22322 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " + STRING_22323 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " + STRING_22324 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" + STRING_22325 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22326 "Cm [x 3 5 5 4 3] (C Eb G) " + STRING_22327 "Cm [x x 5 5 4 3] (C Eb G) " + STRING_22328 "Cm/A [x x 1 2 1 3] (C Eb G A) " + STRING_22329 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22330 "Cm6 [x x 1 2 1 3] (C Eb G A) " + STRING_22331 "Cm6 [8 x 7 8 8 8] (C A Eb G C) " + STRING_22332 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22333 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " + STRING_22334 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " + STRING_22335 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " + STRING_22336 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " + STRING_22337 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " + STRING_22338 "Csus or Csus4 [x x 3 0 1 1] (C F G) " + STRING_22339 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" + STRING_22340 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" + STRING_22341 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " + STRING_22342 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " + STRING_22343 "Csus2/A [x 5 7 5 8 3] (C D G A)" + STRING_22344 "Csus2/A [x x 0 2 1 3] (C D G A) " + STRING_22345 "Csus2/B [3 3 0 0 0 3] (C D G B) " + STRING_22346 "Csus2/B [x 3 0 0 0 3] (C D G B) " + STRING_22347 "Csus2/E [3 x 0 0 1 0] (C D E G) " + STRING_22348 "Csus2/E [x 3 0 0 1 0] (C D E G) " + STRING_22349 "Csus2/E [x 3 2 0 3 0] (C D E G) " + STRING_22350 "Csus2/E [x 3 2 0 3 3] (C D E G) " + STRING_22351 "Csus2/E [x x 0 0 1 0] (C D E G) " + STRING_22352 "Csus2/E [x x 0 5 5 3] (C D E G) " + STRING_22353 "Csus2/E [x 10 12 12 13 0] (C D E G) " + STRING_22354 "Csus2/E [x 5 5 5 x 0] (C D E G) " + STRING_22355 "Csus2/F [3 3 0 0 1 1] (C D F G) " + STRING_22356 "Csus4/A [3 x 3 2 1 1] (C F G A) " + STRING_22357 "Csus4/A [x x 3 2 1 3] (C F G A) " + STRING_22358 "Csus4/B [x 3 3 0 0 3] (C F G B) " + STRING_22359 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22360 "Csus4/D [3 3 0 0 1 1] (C D F G) " + STRING_22361 "Csus4/E [x 3 3 0 1 0] (C E F G) " + STRING_22362 "Csus4/E [x x 3 0 1 0] (C E F G) " + STRING_22363 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" + STRING_22364 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" + STRING_22365 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " + STRING_22366 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " + STRING_22367 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " + STRING_22368 "D or Dmaj [x x 0 2 3 2] (D Gb A) " + STRING_22369 "D or Dmaj [x x 0 7 7 5] (D Gb A) " + STRING_22370 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " + STRING_22371 "D/B [x 0 4 4 3 2] (D Gb A B) " + STRING_22372 "D/B [x 2 0 2 0 2] (D Gb A B) " + STRING_22373 "D/B [x 2 0 2 3 2] (D Gb A B) " + STRING_22374 "D/B [x 2 4 2 3 2] (D Gb A B) " + STRING_22375 "D/B [x x 0 2 0 2] (D Gb A B) " + STRING_22376 "D/C [x 5 7 5 7 2] (C D Gb A)" + STRING_22377 "D/C [x 0 0 2 1 2] (C D Gb A) " + STRING_22378 "D/C [x 3 x 2 3 2] (C D Gb A) " + STRING_22379 "D/C [x 5 7 5 7 5] (C D Gb A) " + STRING_22380 "D/Db [x x 0 14 14 14] (Db D Gb A) " + STRING_22381 "D/Db [x x 0 2 2 2] (Db D Gb A) " + STRING_22382 "D/E [0 0 0 2 3 2] (D E Gb A) " + STRING_22383 "D/E [0 0 4 2 3 0] (D E Gb A) " + STRING_22384 "D/E [2 x 0 2 3 0] (D E Gb A) " + STRING_22385 "D/E [x 0 2 2 3 2] (D E Gb A) " + STRING_22386 "D/E [x x 2 2 3 2] (D E Gb A) " + STRING_22387 "D/E [x 5 4 2 3 0] (D E Gb A) " + STRING_22388 "D/E [x 9 7 7 x 0] (D E Gb A) " + STRING_22389 "D/G [5 x 4 0 3 5] (D Gb G A)" + STRING_22390 "D/G [3 x 0 2 3 2] (D Gb G A) " + STRING_22391 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" + STRING_22392 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" + STRING_22393 "D6 [x 0 4 4 3 2] (D Gb A B) " + STRING_22394 "D6 [x 2 0 2 0 2] (D Gb A B) " + STRING_22395 "D6 [x 2 0 2 3 2] (D Gb A B) " + STRING_22396 "D6 [x 2 4 2 3 2] (D Gb A B) " + STRING_22397 "D6 [x x 0 2 0 2] (D Gb A B) " + STRING_22398 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " + STRING_22399 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " + STRING_22400 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" + STRING_22401 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " + STRING_22402 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " + STRING_22403 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " + STRING_22404 "D7sus4 [x 5 7 5 8 3] (C D G A)" + STRING_22405 "D7sus4 [x x 0 2 1 3] (C D G A) " + STRING_22406 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " + STRING_22407 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " + STRING_22408 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " + STRING_22409 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " + STRING_22410 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " + STRING_22411 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " + STRING_22412 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " + STRING_22413 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " + STRING_22414 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " + STRING_22415 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " + STRING_22416 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " + STRING_22417 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22418 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " + STRING_22419 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " + STRING_22420 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " + STRING_22421 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " + STRING_22422 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " + STRING_22423 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " + STRING_22424 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " + STRING_22425 "Db b5 [x x 3 0 2 1] (Db F G) " + STRING_22426 "Db/B [x 4 3 4 0 4] (Db F Ab B) " + STRING_22427 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22428 "Db/C [x 3 3 1 2 1] (C Db F Ab) " + STRING_22429 "Db/C [x 4 6 5 6 4] (C Db F Ab) " + STRING_22430 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" + STRING_22431 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " + STRING_22432 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " + STRING_22433 "Dbaug/D [x x 0 2 2 1] (Db D F A) " + STRING_22434 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22435 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " + STRING_22436 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " + STRING_22437 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " + STRING_22438 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " + STRING_22439 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " + STRING_22440 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " + STRING_22441 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " + STRING_22442 "Dbdim/D [x x 0 0 2 0] (Db D E G) " + STRING_22443 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22444 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22445 "Dbm [x 4 6 6 5 4] (Db E Ab) " + STRING_22446 "Dbm [x x 2 1 2 0] (Db E Ab) " + STRING_22447 "Dbm [x 4 6 6 x 0] (Db E Ab) " + STRING_22448 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " + STRING_22449 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " + STRING_22450 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " + STRING_22451 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22452 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22453 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " + STRING_22454 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " + STRING_22455 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " + STRING_22456 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " + STRING_22457 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22458 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " + STRING_22459 "Ddim/B [x x 0 1 0 1] (D F Ab B) " + STRING_22460 "Ddim/B [x x 3 4 3 4] (D F Ab B) " + STRING_22461 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " + STRING_22462 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " + STRING_22463 "Ddim/C [x x 0 1 1 1] (C D F Ab) " + STRING_22464 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22465 "Ddim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22466 "Ddim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22467 "Dm [x 0 0 2 3 1] (D F A) " + STRING_22468 "Dm/B [1 2 3 2 3 1] (D F A B) " + STRING_22469 "Dm/B [x 2 0 2 0 1] (D F A B) " + STRING_22470 "Dm/B [x x 0 2 0 1] (D F A B) " + STRING_22471 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " + STRING_22472 "Dm/C [x 5 7 5 6 5] (C D F A) " + STRING_22473 "Dm/C [x x 0 2 1 1] (C D F A) " + STRING_22474 "Dm/C [x x 0 5 6 5] (C D F A) " + STRING_22475 "Dm/Db [x x 0 2 2 1] (Db D F A) " + STRING_22476 "Dm/E [x x 7 7 6 0] (D E F A) " + STRING_22477 "Dm6 [1 2 3 2 3 1] (D F A B) " + STRING_22478 "Dm6 [x 2 0 2 0 1] (D F A B) " + STRING_22479 "Dm6 [x x 0 2 0 1] (D F A B) " + STRING_22480 "Dm6 [10 x 9 10 10 10] (D B F A D) " + STRING_22481 "Dm7 [x 5 7 5 6 5] (C D F A) " + STRING_22482 "Dm7 [x x 0 2 1 1] (C D F A) " + STRING_22483 "Dm7 [x x 0 5 6 5] (C D F A) " + STRING_22484 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " + STRING_22485 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " + STRING_22486 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " + STRING_22487 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " + STRING_22488 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " + STRING_22489 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" + STRING_22490 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " + STRING_22491 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " + STRING_22492 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " + STRING_22493 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" + STRING_22494 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" + STRING_22495 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " + STRING_22496 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " + STRING_22497 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " + STRING_22498 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " + STRING_22499 "Dsus2/B [0 2 0 2 0 0] (D E A B) " + STRING_22500 "Dsus2/B [x 2 0 2 3 0] (D E A B) " + STRING_22501 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " + STRING_22502 "Dsus2/C [x x 0 2 1 0] (C D E A) " + STRING_22503 "Dsus2/C [x x 0 5 5 5] (C D E A) " + STRING_22504 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " + STRING_22505 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " + STRING_22506 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " + STRING_22507 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " + STRING_22508 "Dsus2/F [x x 7 7 6 0] (D E F A) " + STRING_22509 "Dsus2/G [x 0 2 0 3 0] (D E G A) " + STRING_22510 "Dsus2/G [x 0 2 0 3 3] (D E G A) " + STRING_22511 "Dsus2/G [x 0 2 2 3 3] (D E G A) " + STRING_22512 "Dsus2/G [5 x 0 0 3 0] (D E G A) " + STRING_22513 "Dsus2/G [x 0 0 0 x 0] (D E G A) " + STRING_22514 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " + STRING_22515 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " + STRING_22516 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " + STRING_22517 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " + STRING_22518 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " + STRING_22519 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " + STRING_22520 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " + STRING_22521 "Dsus4/B [3 0 0 0 0 3] (D G A B) " + STRING_22522 "Dsus4/B [3 2 0 2 0 3] (D G A B) " + STRING_22523 "Dsus4/C [x 5 7 5 8 3] (C D G A)" + STRING_22524 "Dsus4/C [x x 0 2 1 3] (C D G A) " + STRING_22525 "Dsus4/E [x 0 2 0 3 0] (D E G A) " + STRING_22526 "Dsus4/E [x 0 2 0 3 3] (D E G A) " + STRING_22527 "Dsus4/E [x 0 2 2 3 3] (D E G A) " + STRING_22528 "Dsus4/E [5 x 0 0 3 0] (D E G A) " + STRING_22529 "Dsus4/E [x 0 0 0 x 0] (D E G A) " + STRING_22530 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22531 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22532 "E or Emaj [0 2 2 1 0 0] (E Ab B) " + STRING_22533 "E or Emaj [x 7 6 4 5 0] (E Ab B) " + STRING_22534 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " + STRING_22535 "E/A [x 0 2 1 0 0] (E Ab A B) " + STRING_22536 "E/D [0 2 0 1 0 0] (D E Ab B) " + STRING_22537 "E/D [0 2 2 1 3 0] (D E Ab B) " + STRING_22538 "E/D [x 2 0 1 3 0] (D E Ab B) " + STRING_22539 "E/D [x x 0 1 0 0] (D E Ab B) " + STRING_22540 "E/Db [0 2 2 1 2 0] (Db E Ab B) " + STRING_22541 "E/Db [x 4 6 4 5 4] (Db E Ab B) " + STRING_22542 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22543 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22544 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " + STRING_22545 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22546 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22547 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22548 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " + STRING_22549 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " + STRING_22550 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " + STRING_22551 "E6 [0 2 2 1 2 0] (Db E Ab B) " + STRING_22552 "E6 [x 4 6 4 5 4] (Db E Ab B) " + STRING_22553 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " + STRING_22554 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " + STRING_22555 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " + STRING_22556 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " + STRING_22557 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " + STRING_22558 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " + STRING_22559 "E7sus4 [0 2 0 2 0 0] (D E A B) " + STRING_22560 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " + STRING_22561 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " + STRING_22562 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22563 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22564 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22565 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " + STRING_22566 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " + STRING_22567 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " + STRING_22568 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " + STRING_22569 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " + STRING_22570 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22571 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22572 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22573 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22574 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22575 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " + STRING_22576 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" + STRING_22577 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " + STRING_22578 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22579 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22580 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22581 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22582 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22583 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " + STRING_22584 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " + STRING_22585 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " + STRING_22586 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " + STRING_22587 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " + STRING_22588 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22589 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " + STRING_22590 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22591 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22592 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22593 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22594 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " + STRING_22595 "Edim/C [x 3 5 3 5 3] (C E G Bb) " + STRING_22596 "Edim/D [3 x 0 3 3 0] (D E G Bb) " + STRING_22597 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " + STRING_22598 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " + STRING_22599 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " + STRING_22600 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22601 "Edim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22602 "Em [0 2 2 0 0 0] (E G B) " + STRING_22603 "Em [3 x 2 0 0 0] (E G B) " + STRING_22604 "Em [x 2 5 x x 0] (E G B) " + STRING_22605 "Em/A [3 x 2 2 0 0] (E G A B) " + STRING_22606 "Em/A [x 0 2 0 0 0] (E G A B) " + STRING_22607 "Em/A [x 0 5 4 5 0] (E G A B) " + STRING_22608 "Em/C [0 3 2 0 0 0] (C E G B) " + STRING_22609 "Em/C [x 2 2 0 1 0] (C E G B) " + STRING_22610 "Em/C [x 3 5 4 5 3] (C E G B) " + STRING_22611 "Em/D [0 2 0 0 0 0] (D E G B) " + STRING_22612 "Em/D [0 2 0 0 3 0] (D E G B) " + STRING_22613 "Em/D [0 2 2 0 3 0] (D E G B) " + STRING_22614 "Em/D [0 2 2 0 3 3] (D E G B) " + STRING_22615 "Em/D [x x 0 12 12 12] (D E G B) " + STRING_22616 "Em/D [x x 0 9 8 7] (D E G B) " + STRING_22617 "Em/D [x x 2 4 3 3] (D E G B) " + STRING_22618 "Em/D [0 x 0 0 0 0] (D E G B) " + STRING_22619 "Em/D [x 10 12 12 12 0] (D E G B) " + STRING_22620 "Em/Db [0 2 2 0 2 0] (Db E G B) " + STRING_22621 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " + STRING_22622 "Em/Eb [x x 1 0 0 0] (Eb E G B) " + STRING_22623 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " + STRING_22624 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " + STRING_22625 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " + STRING_22626 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " + STRING_22627 "Em6 [0 2 2 0 2 0] (Db E G B) " + STRING_22628 "Em6 [12 x 11 12 12 12] (E Db G B E) " + STRING_22629 "Em7 [0 2 0 0 0 0] (D E G B) " + STRING_22630 "Em7 [0 2 0 0 3 0] (D E G B) " + STRING_22631 "Em7 [0 2 2 0 3 0] (D E G B) " + STRING_22632 "Em7 [0 2 2 0 3 3] (D E G B) " + STRING_22633 "Em7 [x x 0 0 0 0] (D E G B) " + STRING_22634 "Em7 [x x 0 12 12 12] (D E G B) " + STRING_22635 "Em7 [x x 0 9 8 7] (D E G B) " + STRING_22636 "Em7 [x x 2 4 3 3] (D E G B) " + STRING_22637 "Em7 [0 x 0 0 0 0] (D E G B) " + STRING_22638 "Em7 [x 10 12 12 12 0] (D E G B) " + STRING_22639 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " + STRING_22640 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " + STRING_22641 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " + STRING_22642 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " + STRING_22643 "Em9 [0 2 0 0 0 2] (D E Gb G B) " + STRING_22644 "Em9 [0 2 0 0 3 2] (D E Gb G B) " + STRING_22645 "Em9 [2 2 0 0 0 0] (D E Gb G B) " + STRING_22646 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " + STRING_22647 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " + STRING_22648 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " + STRING_22649 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " + STRING_22650 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " + STRING_22651 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " + STRING_22652 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " + STRING_22653 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " + STRING_22654 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " + STRING_22655 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " + STRING_22656 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " + STRING_22657 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " + STRING_22658 "Esus or Esus4 [x x 2 2 0 0] (E A B) " + STRING_22659 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" + STRING_22660 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" + STRING_22661 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " + STRING_22662 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " + STRING_22663 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " + STRING_22664 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " + STRING_22665 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " + STRING_22666 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " + STRING_22667 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " + STRING_22668 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " + STRING_22669 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " + STRING_22670 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " + STRING_22671 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " + STRING_22672 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " + STRING_22673 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " + STRING_22674 "Esus4/C [0 0 7 5 0 0] (C E A B) " + STRING_22675 "Esus4/C [x 3 2 2 0 0] (C E A B) " + STRING_22676 "Esus4/D [0 2 0 2 0 0] (D E A B) " + STRING_22677 "Esus4/D [x 2 0 2 3 0] (D E A B) " + STRING_22678 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " + STRING_22679 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " + STRING_22680 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " + STRING_22681 "Esus4/F [0 0 3 2 0 0] (E F A B) " + STRING_22682 "Esus4/G [x 0 2 0 0 0] (E G A B) " + STRING_22683 "Esus4/G [x 0 5 4 5 0] (E G A B) " + STRING_22684 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " + STRING_22685 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " + STRING_22686 "F or Fmaj [1 3 3 2 1 1] (C F A) " + STRING_22687 "F or Fmaj [x 0 3 2 1 1] (C F A) " + STRING_22688 "F or Fmaj [x 3 3 2 1 1] (C F A) " + STRING_22689 "F or Fmaj [x x 3 2 1 1] (C F A) " + STRING_22690 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " + STRING_22691 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " + STRING_22692 "F/D [x 5 7 5 6 5] (C D F A) " + STRING_22693 "F/D [x x 0 2 1 1] (C D F A) " + STRING_22694 "F/D [x x 0 5 6 5] (C D F A) " + STRING_22695 "F/E [0 0 3 2 1 0] (C E F A) " + STRING_22696 "F/E [1 3 3 2 1 0] (C E F A) " + STRING_22697 "F/E [1 x 2 2 1 0] (C E F A) " + STRING_22698 "F/E [x x 2 2 1 1] (C E F A) " + STRING_22699 "F/E [x x 3 2 1 0] (C E F A) " + STRING_22700 "F/Eb [x x 1 2 1 1] (C Eb F A) " + STRING_22701 "F/Eb [x x 3 5 4 5] (C Eb F A) " + STRING_22702 "F/G [3 x 3 2 1 1] (C F G A) " + STRING_22703 "F/G [x x 3 2 1 3] (C F G A) " + STRING_22704 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" + STRING_22705 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" + STRING_22706 "F6 [x 5 7 5 6 5] (C D F A) " + STRING_22707 "F6 [x x 0 2 1 1] (C D F A) " + STRING_22708 "F6 [x x 0 5 6 5] (C D F A) " + STRING_22709 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " + STRING_22710 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " + STRING_22711 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " + STRING_22712 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " + STRING_22713 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " + STRING_22714 "Faug/D [x x 0 2 2 1] (Db D F A) " + STRING_22715 "Faug/G [1 0 3 0 2 1] (Db F G A) " + STRING_22716 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " + STRING_22717 "Fdim/D [x x 0 1 0 1] (D F Ab B) " + STRING_22718 "Fdim/D [x x 3 4 3 4] (D F Ab B) " + STRING_22719 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " + STRING_22720 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " + STRING_22721 "Fdim7 [x x 0 1 0 1] (D F Ab B) " + STRING_22722 "Fdim7 [x x 3 4 3 4] (D F Ab B) " + STRING_22723 "Fm [x 3 3 1 1 1] (C F Ab) " + STRING_22724 "Fm [x x 3 1 1 1] (C F Ab) " + STRING_22725 "Fm/D [x x 0 1 1 1] (C D F Ab) " + STRING_22726 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " + STRING_22727 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " + STRING_22728 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22729 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " + STRING_22730 "Fm6 [x x 0 1 1 1] (C D F Ab) " + STRING_22731 "Fm6 [1 x 0 1 1 1] (F D Ab C F) " + STRING_22732 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " + STRING_22733 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " + STRING_22734 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " + STRING_22735 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " + STRING_22736 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " + STRING_22737 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " + STRING_22738 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " + STRING_22739 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " + STRING_22740 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " + STRING_22741 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " + STRING_22742 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " + STRING_22743 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " + STRING_22744 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " + STRING_22745 "Fsus2/A [3 x 3 2 1 1] (C F G A) " + STRING_22746 "Fsus2/A [x x 3 2 1 3] (C F G A) " + STRING_22747 "Fsus2/B [x 3 3 0 0 3] (C F G B) " + STRING_22748 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " + STRING_22749 "Fsus2/D [3 3 0 0 1 1] (C D F G) " + STRING_22750 "Fsus2/E [x 3 3 0 1 0] (C E F G) " + STRING_22751 "Fsus2/E [x x 3 0 1 0] (C E F G) " + STRING_22752 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " + STRING_22753 "G or Gmaj [x 10 12 12 12 10] (D G B)" + STRING_22754 "G or Gmaj [3 2 0 0 0 3] (D G B) " + STRING_22755 "G or Gmaj [3 2 0 0 3 3] (D G B) " + STRING_22756 "G or Gmaj [3 5 5 4 3 3] (D G B) " + STRING_22757 "G or Gmaj [3 x 0 0 0 3] (D G B) " + STRING_22758 "G or Gmaj [x 5 5 4 3 3] (D G B) " + STRING_22759 "G or Gmaj [x x 0 4 3 3] (D G B) " + STRING_22760 "G or Gmaj [x x 0 7 8 7] (D G B) " + STRING_22761 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " + STRING_22762 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " + STRING_22763 "G/A [3 0 0 0 0 3] (D G A B) " + STRING_22764 "G/A [3 2 0 2 0 3] (D G A B) " + STRING_22765 "G/C [3 3 0 0 0 3] (C D G B) " + STRING_22766 "G/C [x 3 0 0 0 3] (C D G B) " + STRING_22767 "G/E [0 2 0 0 0 0] (D E G B) " + STRING_22768 "G/E [0 2 0 0 3 0] (D E G B) " + STRING_22769 "G/E [0 2 2 0 3 0] (D E G B) " + STRING_22770 "G/E [0 2 2 0 3 3] (D E G B) " + STRING_22771 "G/E [x x 0 12 12 12] (D E G B) " + STRING_22772 "G/E [x x 0 9 8 7] (D E G B) " + STRING_22773 "G/E [x x 2 4 3 3] (D E G B) " + STRING_22774 "G/E [0 x 0 0 0 0] (D E G B) " + STRING_22775 "G/E [x 10 12 12 12 0] (D E G B) " + STRING_22776 "G/F [1 x 0 0 0 3] (D F G B) " + STRING_22777 "G/F [3 2 0 0 0 1] (D F G B) " + STRING_22778 "G/F [x x 0 0 0 1] (D F G B) " + STRING_22779 "G/Gb [2 2 0 0 0 3] (D Gb G B) " + STRING_22780 "G/Gb [2 2 0 0 3 3] (D Gb G B) " + STRING_22781 "G/Gb [3 2 0 0 0 2] (D Gb G B) " + STRING_22782 "G/Gb [x x 4 4 3 3] (D Gb G B) " + STRING_22783 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" + STRING_22784 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " + STRING_22785 "G6 [0 2 0 0 0 0] (D E G B) " + STRING_22786 "G6 [0 2 0 0 3 0] (D E G B) " + STRING_22787 "G6 [0 2 2 0 3 0] (D E G B) " + STRING_22788 "G6 [0 2 2 0 3 3] (D E G B) " + STRING_22789 "G6 [x x 0 12 12 12] (D E G B) " + STRING_22790 "G6 [x x 0 9 8 7] (D E G B) " + STRING_22791 "G6 [x x 2 4 3 3] (D E G B) " + STRING_22792 "G6 [0 x 0 0 0 0] (D E G B) " + STRING_22793 "G6 [x 10 12 12 12 0] (D E G B) " + STRING_22794 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " + STRING_22795 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " + STRING_22796 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " + STRING_22797 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " + STRING_22798 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " + STRING_22799 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " + STRING_22800 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " + STRING_22801 "G7sus4 [3 3 0 0 1 1] (C D F G) " + STRING_22802 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " + STRING_22803 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " + STRING_22804 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " + STRING_22805 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " + STRING_22806 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " + STRING_22807 "Gaug/E [x x 1 0 0 0] (Eb E G B) " + STRING_22808 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " + STRING_22809 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " + STRING_22810 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " + STRING_22811 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " + STRING_22812 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22813 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22814 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22815 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22816 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22817 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " + STRING_22818 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " + STRING_22819 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " + STRING_22820 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22821 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " + STRING_22822 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " + STRING_22823 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22824 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " + STRING_22825 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" + STRING_22826 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " + STRING_22827 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " + STRING_22828 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " + STRING_22829 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " + STRING_22830 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " + STRING_22831 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " + STRING_22832 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " + STRING_22833 "Gbm [2 4 4 2 2 2] (Db Gb A) " + STRING_22834 "Gbm [x 4 4 2 2 2] (Db Gb A) " + STRING_22835 "Gbm [x x 4 2 2 2] (Db Gb A) " + STRING_22836 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " + STRING_22837 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " + STRING_22838 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " + STRING_22839 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " + STRING_22840 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " + STRING_22841 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " + STRING_22842 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " + STRING_22843 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " + STRING_22844 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " + STRING_22845 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " + STRING_22846 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " + STRING_22847 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " + STRING_22848 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " + STRING_22849 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " + STRING_22850 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " + STRING_22851 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " + STRING_22852 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " + STRING_22853 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " + STRING_22854 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " + STRING_22855 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " + STRING_22856 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " + STRING_22857 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " + STRING_22858 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " + STRING_22859 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " + STRING_22860 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " + STRING_22861 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " + STRING_22862 "Gm [3 5 5 3 3 3] (D G Bb) " + STRING_22863 "Gm [x x 0 3 3 3] (D G Bb) " + STRING_22864 "Gm/E [3 x 0 3 3 0] (D E G Bb) " + STRING_22865 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " + STRING_22866 "Gm/F [3 5 3 3 3 3] (D F G Bb) " + STRING_22867 "Gm/F [x x 3 3 3 3] (D F G Bb) " + STRING_22868 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " + STRING_22869 "Gm6 [3 x 0 3 3 0] (D E G Bb) " + STRING_22870 "Gm6 [3 x 2 3 3 3] (G E Bb D G) " + STRING_22871 "Gm7 [3 5 3 3 3 3] (D F G Bb) " + STRING_22872 "Gm7 [x x 3 3 3 3] (D F G Bb) " + STRING_22873 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " + STRING_22874 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " + STRING_22875 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " + STRING_22876 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " + STRING_22877 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " + STRING_22878 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " + STRING_22879 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" + STRING_22880 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " + STRING_22881 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " + STRING_22882 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " + STRING_22883 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" + STRING_22884 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " + STRING_22885 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " + STRING_22886 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " + STRING_22887 "Gsus2/B [3 0 0 0 0 3] (D G A B) " + STRING_22888 "Gsus2/B [3 2 0 2 0 3] (D G A B) " + STRING_22889 "Gsus2/C [x 5 7 5 8 3] (C D G A)" + STRING_22890 "Gsus2/C [x x 0 2 1 3] (C D G A) " + STRING_22891 "Gsus2/E [x 0 2 0 3 0] (D E G A) " + STRING_22892 "Gsus2/E [x 0 2 0 3 3] (D E G A) " + STRING_22893 "Gsus2/E [x 0 2 2 3 3] (D E G A) " + STRING_22894 "Gsus2/E [5 0 0 0 3 0] (D E G A) " + STRING_22895 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" + STRING_22896 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " + STRING_22897 "Gsus4/A [x 5 7 5 8 3] (C D G A)" + STRING_22898 "Gsus4/A [x x 0 2 1 3] (C D G A) " + STRING_22899 "Gsus4/B [3 3 0 0 0 3] (C D G B) " + STRING_22900 "Gsus4/B [x 3 0 0 0 3] (C D G B) " + STRING_22901 "Gsus4/E [3 x 0 0 1 0] (C D E G) " + STRING_22902 "Gsus4/E [x 3 0 0 1 0] (C D E G) " + STRING_22903 "Gsus4/E [x 3 2 0 3 0] (C D E G) " + STRING_22904 "Gsus4/E [x 3 2 0 3 3] (C D E G) " + STRING_22905 "Gsus4/E [x x 0 0 1 0] (C D E G) " + STRING_22906 "Gsus4/E [x x 0 5 5 3] (C D E G) " + STRING_22907 "Gsus4/E [x 10 12 12 13 0] (C D E G) " + STRING_22908 "Gsus4/E [x 5 5 5 x 0] (C D E G) " + STRING_22909 "Gsus4/F [3 3 0 0 1 1] (C D F G) " +END +****************************************************** +#define STRING_22000 22000 +#define STRING_22001 22001 +#define STRING_22002 22002 +#define STRING_22003 22003 +#define STRING_22004 22004 +#define STRING_22005 22005 +#define STRING_22006 22006 +#define STRING_22007 22007 +#define STRING_22008 22008 +#define STRING_22009 22009 +#define STRING_22010 22010 +#define STRING_22011 22011 +#define STRING_22012 22012 +#define STRING_22013 22013 +#define STRING_22014 22014 +#define STRING_22015 22015 +#define STRING_22016 22016 +#define STRING_22017 22017 +#define STRING_22018 22018 +#define STRING_22019 22019 +#define STRING_22020 22020 +#define STRING_22021 22021 +#define STRING_22022 22022 +#define STRING_22023 22023 +#define STRING_22024 22024 +#define STRING_22025 22025 +#define STRING_22026 22026 +#define STRING_22027 22027 +#define STRING_22028 22028 +#define STRING_22029 22029 +#define STRING_22030 22030 +#define STRING_22031 22031 +#define STRING_22032 22032 +#define STRING_22033 22033 +#define STRING_22034 22034 +#define STRING_22035 22035 +#define STRING_22036 22036 +#define STRING_22037 22037 +#define STRING_22038 22038 +#define STRING_22039 22039 +#define STRING_22040 22040 +#define STRING_22041 22041 +#define STRING_22042 22042 +#define STRING_22043 22043 +#define STRING_22044 22044 +#define STRING_22045 22045 +#define STRING_22046 22046 +#define STRING_22047 22047 +#define STRING_22048 22048 +#define STRING_22049 22049 +#define STRING_22050 22050 +#define STRING_22051 22051 +#define STRING_22052 22052 +#define STRING_22053 22053 +#define STRING_22054 22054 +#define STRING_22055 22055 +#define STRING_22056 22056 +#define STRING_22057 22057 +#define STRING_22058 22058 +#define STRING_22059 22059 +#define STRING_22060 22060 +#define STRING_22061 22061 +#define STRING_22062 22062 +#define STRING_22063 22063 +#define STRING_22064 22064 +#define STRING_22065 22065 +#define STRING_22066 22066 +#define STRING_22067 22067 +#define STRING_22068 22068 +#define STRING_22069 22069 +#define STRING_22070 22070 +#define STRING_22071 22071 +#define STRING_22072 22072 +#define STRING_22073 22073 +#define STRING_22074 22074 +#define STRING_22075 22075 +#define STRING_22076 22076 +#define STRING_22077 22077 +#define STRING_22078 22078 +#define STRING_22079 22079 +#define STRING_22080 22080 +#define STRING_22081 22081 +#define STRING_22082 22082 +#define STRING_22083 22083 +#define STRING_22084 22084 +#define STRING_22085 22085 +#define STRING_22086 22086 +#define STRING_22087 22087 +#define STRING_22088 22088 +#define STRING_22089 22089 +#define STRING_22090 22090 +#define STRING_22091 22091 +#define STRING_22092 22092 +#define STRING_22093 22093 +#define STRING_22094 22094 +#define STRING_22095 22095 +#define STRING_22096 22096 +#define STRING_22097 22097 +#define STRING_22098 22098 +#define STRING_22099 22099 +#define STRING_22100 22100 +#define STRING_22101 22101 +#define STRING_22102 22102 +#define STRING_22103 22103 +#define STRING_22104 22104 +#define STRING_22105 22105 +#define STRING_22106 22106 +#define STRING_22107 22107 +#define STRING_22108 22108 +#define STRING_22109 22109 +#define STRING_22110 22110 +#define STRING_22111 22111 +#define STRING_22112 22112 +#define STRING_22113 22113 +#define STRING_22114 22114 +#define STRING_22115 22115 +#define STRING_22116 22116 +#define STRING_22117 22117 +#define STRING_22118 22118 +#define STRING_22119 22119 +#define STRING_22120 22120 +#define STRING_22121 22121 +#define STRING_22122 22122 +#define STRING_22123 22123 +#define STRING_22124 22124 +#define STRING_22125 22125 +#define STRING_22126 22126 +#define STRING_22127 22127 +#define STRING_22128 22128 +#define STRING_22129 22129 +#define STRING_22130 22130 +#define STRING_22131 22131 +#define STRING_22132 22132 +#define STRING_22133 22133 +#define STRING_22134 22134 +#define STRING_22135 22135 +#define STRING_22136 22136 +#define STRING_22137 22137 +#define STRING_22138 22138 +#define STRING_22139 22139 +#define STRING_22140 22140 +#define STRING_22141 22141 +#define STRING_22142 22142 +#define STRING_22143 22143 +#define STRING_22144 22144 +#define STRING_22145 22145 +#define STRING_22146 22146 +#define STRING_22147 22147 +#define STRING_22148 22148 +#define STRING_22149 22149 +#define STRING_22150 22150 +#define STRING_22151 22151 +#define STRING_22152 22152 +#define STRING_22153 22153 +#define STRING_22154 22154 +#define STRING_22155 22155 +#define STRING_22156 22156 +#define STRING_22157 22157 +#define STRING_22158 22158 +#define STRING_22159 22159 +#define STRING_22160 22160 +#define STRING_22161 22161 +#define STRING_22162 22162 +#define STRING_22163 22163 +#define STRING_22164 22164 +#define STRING_22165 22165 +#define STRING_22166 22166 +#define STRING_22167 22167 +#define STRING_22168 22168 +#define STRING_22169 22169 +#define STRING_22170 22170 +#define STRING_22171 22171 +#define STRING_22172 22172 +#define STRING_22173 22173 +#define STRING_22174 22174 +#define STRING_22175 22175 +#define STRING_22176 22176 +#define STRING_22177 22177 +#define STRING_22178 22178 +#define STRING_22179 22179 +#define STRING_22180 22180 +#define STRING_22181 22181 +#define STRING_22182 22182 +#define STRING_22183 22183 +#define STRING_22184 22184 +#define STRING_22185 22185 +#define STRING_22186 22186 +#define STRING_22187 22187 +#define STRING_22188 22188 +#define STRING_22189 22189 +#define STRING_22190 22190 +#define STRING_22191 22191 +#define STRING_22192 22192 +#define STRING_22193 22193 +#define STRING_22194 22194 +#define STRING_22195 22195 +#define STRING_22196 22196 +#define STRING_22197 22197 +#define STRING_22198 22198 +#define STRING_22199 22199 +#define STRING_22200 22200 +#define STRING_22201 22201 +#define STRING_22202 22202 +#define STRING_22203 22203 +#define STRING_22204 22204 +#define STRING_22205 22205 +#define STRING_22206 22206 +#define STRING_22207 22207 +#define STRING_22208 22208 +#define STRING_22209 22209 +#define STRING_22210 22210 +#define STRING_22211 22211 +#define STRING_22212 22212 +#define STRING_22213 22213 +#define STRING_22214 22214 +#define STRING_22215 22215 +#define STRING_22216 22216 +#define STRING_22217 22217 +#define STRING_22218 22218 +#define STRING_22219 22219 +#define STRING_22220 22220 +#define STRING_22221 22221 +#define STRING_22222 22222 +#define STRING_22223 22223 +#define STRING_22224 22224 +#define STRING_22225 22225 +#define STRING_22226 22226 +#define STRING_22227 22227 +#define STRING_22228 22228 +#define STRING_22229 22229 +#define STRING_22230 22230 +#define STRING_22231 22231 +#define STRING_22232 22232 +#define STRING_22233 22233 +#define STRING_22234 22234 +#define STRING_22235 22235 +#define STRING_22236 22236 +#define STRING_22237 22237 +#define STRING_22238 22238 +#define STRING_22239 22239 +#define STRING_22240 22240 +#define STRING_22241 22241 +#define STRING_22242 22242 +#define STRING_22243 22243 +#define STRING_22244 22244 +#define STRING_22245 22245 +#define STRING_22246 22246 +#define STRING_22247 22247 +#define STRING_22248 22248 +#define STRING_22249 22249 +#define STRING_22250 22250 +#define STRING_22251 22251 +#define STRING_22252 22252 +#define STRING_22253 22253 +#define STRING_22254 22254 +#define STRING_22255 22255 +#define STRING_22256 22256 +#define STRING_22257 22257 +#define STRING_22258 22258 +#define STRING_22259 22259 +#define STRING_22260 22260 +#define STRING_22261 22261 +#define STRING_22262 22262 +#define STRING_22263 22263 +#define STRING_22264 22264 +#define STRING_22265 22265 +#define STRING_22266 22266 +#define STRING_22267 22267 +#define STRING_22268 22268 +#define STRING_22269 22269 +#define STRING_22270 22270 +#define STRING_22271 22271 +#define STRING_22272 22272 +#define STRING_22273 22273 +#define STRING_22274 22274 +#define STRING_22275 22275 +#define STRING_22276 22276 +#define STRING_22277 22277 +#define STRING_22278 22278 +#define STRING_22279 22279 +#define STRING_22280 22280 +#define STRING_22281 22281 +#define STRING_22282 22282 +#define STRING_22283 22283 +#define STRING_22284 22284 +#define STRING_22285 22285 +#define STRING_22286 22286 +#define STRING_22287 22287 +#define STRING_22288 22288 +#define STRING_22289 22289 +#define STRING_22290 22290 +#define STRING_22291 22291 +#define STRING_22292 22292 +#define STRING_22293 22293 +#define STRING_22294 22294 +#define STRING_22295 22295 +#define STRING_22296 22296 +#define STRING_22297 22297 +#define STRING_22298 22298 +#define STRING_22299 22299 +#define STRING_22300 22300 +#define STRING_22301 22301 +#define STRING_22302 22302 +#define STRING_22303 22303 +#define STRING_22304 22304 +#define STRING_22305 22305 +#define STRING_22306 22306 +#define STRING_22307 22307 +#define STRING_22308 22308 +#define STRING_22309 22309 +#define STRING_22310 22310 +#define STRING_22311 22311 +#define STRING_22312 22312 +#define STRING_22313 22313 +#define STRING_22314 22314 +#define STRING_22315 22315 +#define STRING_22316 22316 +#define STRING_22317 22317 +#define STRING_22318 22318 +#define STRING_22319 22319 +#define STRING_22320 22320 +#define STRING_22321 22321 +#define STRING_22322 22322 +#define STRING_22323 22323 +#define STRING_22324 22324 +#define STRING_22325 22325 +#define STRING_22326 22326 +#define STRING_22327 22327 +#define STRING_22328 22328 +#define STRING_22329 22329 +#define STRING_22330 22330 +#define STRING_22331 22331 +#define STRING_22332 22332 +#define STRING_22333 22333 +#define STRING_22334 22334 +#define STRING_22335 22335 +#define STRING_22336 22336 +#define STRING_22337 22337 +#define STRING_22338 22338 +#define STRING_22339 22339 +#define STRING_22340 22340 +#define STRING_22341 22341 +#define STRING_22342 22342 +#define STRING_22343 22343 +#define STRING_22344 22344 +#define STRING_22345 22345 +#define STRING_22346 22346 +#define STRING_22347 22347 +#define STRING_22348 22348 +#define STRING_22349 22349 +#define STRING_22350 22350 +#define STRING_22351 22351 +#define STRING_22352 22352 +#define STRING_22353 22353 +#define STRING_22354 22354 +#define STRING_22355 22355 +#define STRING_22356 22356 +#define STRING_22357 22357 +#define STRING_22358 22358 +#define STRING_22359 22359 +#define STRING_22360 22360 +#define STRING_22361 22361 +#define STRING_22362 22362 +#define STRING_22363 22363 +#define STRING_22364 22364 +#define STRING_22365 22365 +#define STRING_22366 22366 +#define STRING_22367 22367 +#define STRING_22368 22368 +#define STRING_22369 22369 +#define STRING_22370 22370 +#define STRING_22371 22371 +#define STRING_22372 22372 +#define STRING_22373 22373 +#define STRING_22374 22374 +#define STRING_22375 22375 +#define STRING_22376 22376 +#define STRING_22377 22377 +#define STRING_22378 22378 +#define STRING_22379 22379 +#define STRING_22380 22380 +#define STRING_22381 22381 +#define STRING_22382 22382 +#define STRING_22383 22383 +#define STRING_22384 22384 +#define STRING_22385 22385 +#define STRING_22386 22386 +#define STRING_22387 22387 +#define STRING_22388 22388 +#define STRING_22389 22389 +#define STRING_22390 22390 +#define STRING_22391 22391 +#define STRING_22392 22392 +#define STRING_22393 22393 +#define STRING_22394 22394 +#define STRING_22395 22395 +#define STRING_22396 22396 +#define STRING_22397 22397 +#define STRING_22398 22398 +#define STRING_22399 22399 +#define STRING_22400 22400 +#define STRING_22401 22401 +#define STRING_22402 22402 +#define STRING_22403 22403 +#define STRING_22404 22404 +#define STRING_22405 22405 +#define STRING_22406 22406 +#define STRING_22407 22407 +#define STRING_22408 22408 +#define STRING_22409 22409 +#define STRING_22410 22410 +#define STRING_22411 22411 +#define STRING_22412 22412 +#define STRING_22413 22413 +#define STRING_22414 22414 +#define STRING_22415 22415 +#define STRING_22416 22416 +#define STRING_22417 22417 +#define STRING_22418 22418 +#define STRING_22419 22419 +#define STRING_22420 22420 +#define STRING_22421 22421 +#define STRING_22422 22422 +#define STRING_22423 22423 +#define STRING_22424 22424 +#define STRING_22425 22425 +#define STRING_22426 22426 +#define STRING_22427 22427 +#define STRING_22428 22428 +#define STRING_22429 22429 +#define STRING_22430 22430 +#define STRING_22431 22431 +#define STRING_22432 22432 +#define STRING_22433 22433 +#define STRING_22434 22434 +#define STRING_22435 22435 +#define STRING_22436 22436 +#define STRING_22437 22437 +#define STRING_22438 22438 +#define STRING_22439 22439 +#define STRING_22440 22440 +#define STRING_22441 22441 +#define STRING_22442 22442 +#define STRING_22443 22443 +#define STRING_22444 22444 +#define STRING_22445 22445 +#define STRING_22446 22446 +#define STRING_22447 22447 +#define STRING_22448 22448 +#define STRING_22449 22449 +#define STRING_22450 22450 +#define STRING_22451 22451 +#define STRING_22452 22452 +#define STRING_22453 22453 +#define STRING_22454 22454 +#define STRING_22455 22455 +#define STRING_22456 22456 +#define STRING_22457 22457 +#define STRING_22458 22458 +#define STRING_22459 22459 +#define STRING_22460 22460 +#define STRING_22461 22461 +#define STRING_22462 22462 +#define STRING_22463 22463 +#define STRING_22464 22464 +#define STRING_22465 22465 +#define STRING_22466 22466 +#define STRING_22467 22467 +#define STRING_22468 22468 +#define STRING_22469 22469 +#define STRING_22470 22470 +#define STRING_22471 22471 +#define STRING_22472 22472 +#define STRING_22473 22473 +#define STRING_22474 22474 +#define STRING_22475 22475 +#define STRING_22476 22476 +#define STRING_22477 22477 +#define STRING_22478 22478 +#define STRING_22479 22479 +#define STRING_22480 22480 +#define STRING_22481 22481 +#define STRING_22482 22482 +#define STRING_22483 22483 +#define STRING_22484 22484 +#define STRING_22485 22485 +#define STRING_22486 22486 +#define STRING_22487 22487 +#define STRING_22488 22488 +#define STRING_22489 22489 +#define STRING_22490 22490 +#define STRING_22491 22491 +#define STRING_22492 22492 +#define STRING_22493 22493 +#define STRING_22494 22494 +#define STRING_22495 22495 +#define STRING_22496 22496 +#define STRING_22497 22497 +#define STRING_22498 22498 +#define STRING_22499 22499 +#define STRING_22500 22500 +#define STRING_22501 22501 +#define STRING_22502 22502 +#define STRING_22503 22503 +#define STRING_22504 22504 +#define STRING_22505 22505 +#define STRING_22506 22506 +#define STRING_22507 22507 +#define STRING_22508 22508 +#define STRING_22509 22509 +#define STRING_22510 22510 +#define STRING_22511 22511 +#define STRING_22512 22512 +#define STRING_22513 22513 +#define STRING_22514 22514 +#define STRING_22515 22515 +#define STRING_22516 22516 +#define STRING_22517 22517 +#define STRING_22518 22518 +#define STRING_22519 22519 +#define STRING_22520 22520 +#define STRING_22521 22521 +#define STRING_22522 22522 +#define STRING_22523 22523 +#define STRING_22524 22524 +#define STRING_22525 22525 +#define STRING_22526 22526 +#define STRING_22527 22527 +#define STRING_22528 22528 +#define STRING_22529 22529 +#define STRING_22530 22530 +#define STRING_22531 22531 +#define STRING_22532 22532 +#define STRING_22533 22533 +#define STRING_22534 22534 +#define STRING_22535 22535 +#define STRING_22536 22536 +#define STRING_22537 22537 +#define STRING_22538 22538 +#define STRING_22539 22539 +#define STRING_22540 22540 +#define STRING_22541 22541 +#define STRING_22542 22542 +#define STRING_22543 22543 +#define STRING_22544 22544 +#define STRING_22545 22545 +#define STRING_22546 22546 +#define STRING_22547 22547 +#define STRING_22548 22548 +#define STRING_22549 22549 +#define STRING_22550 22550 +#define STRING_22551 22551 +#define STRING_22552 22552 +#define STRING_22553 22553 +#define STRING_22554 22554 +#define STRING_22555 22555 +#define STRING_22556 22556 +#define STRING_22557 22557 +#define STRING_22558 22558 +#define STRING_22559 22559 +#define STRING_22560 22560 +#define STRING_22561 22561 +#define STRING_22562 22562 +#define STRING_22563 22563 +#define STRING_22564 22564 +#define STRING_22565 22565 +#define STRING_22566 22566 +#define STRING_22567 22567 +#define STRING_22568 22568 +#define STRING_22569 22569 +#define STRING_22570 22570 +#define STRING_22571 22571 +#define STRING_22572 22572 +#define STRING_22573 22573 +#define STRING_22574 22574 +#define STRING_22575 22575 +#define STRING_22576 22576 +#define STRING_22577 22577 +#define STRING_22578 22578 +#define STRING_22579 22579 +#define STRING_22580 22580 +#define STRING_22581 22581 +#define STRING_22582 22582 +#define STRING_22583 22583 +#define STRING_22584 22584 +#define STRING_22585 22585 +#define STRING_22586 22586 +#define STRING_22587 22587 +#define STRING_22588 22588 +#define STRING_22589 22589 +#define STRING_22590 22590 +#define STRING_22591 22591 +#define STRING_22592 22592 +#define STRING_22593 22593 +#define STRING_22594 22594 +#define STRING_22595 22595 +#define STRING_22596 22596 +#define STRING_22597 22597 +#define STRING_22598 22598 +#define STRING_22599 22599 +#define STRING_22600 22600 +#define STRING_22601 22601 +#define STRING_22602 22602 +#define STRING_22603 22603 +#define STRING_22604 22604 +#define STRING_22605 22605 +#define STRING_22606 22606 +#define STRING_22607 22607 +#define STRING_22608 22608 +#define STRING_22609 22609 +#define STRING_22610 22610 +#define STRING_22611 22611 +#define STRING_22612 22612 +#define STRING_22613 22613 +#define STRING_22614 22614 +#define STRING_22615 22615 +#define STRING_22616 22616 +#define STRING_22617 22617 +#define STRING_22618 22618 +#define STRING_22619 22619 +#define STRING_22620 22620 +#define STRING_22621 22621 +#define STRING_22622 22622 +#define STRING_22623 22623 +#define STRING_22624 22624 +#define STRING_22625 22625 +#define STRING_22626 22626 +#define STRING_22627 22627 +#define STRING_22628 22628 +#define STRING_22629 22629 +#define STRING_22630 22630 +#define STRING_22631 22631 +#define STRING_22632 22632 +#define STRING_22633 22633 +#define STRING_22634 22634 +#define STRING_22635 22635 +#define STRING_22636 22636 +#define STRING_22637 22637 +#define STRING_22638 22638 +#define STRING_22639 22639 +#define STRING_22640 22640 +#define STRING_22641 22641 +#define STRING_22642 22642 +#define STRING_22643 22643 +#define STRING_22644 22644 +#define STRING_22645 22645 +#define STRING_22646 22646 +#define STRING_22647 22647 +#define STRING_22648 22648 +#define STRING_22649 22649 +#define STRING_22650 22650 +#define STRING_22651 22651 +#define STRING_22652 22652 +#define STRING_22653 22653 +#define STRING_22654 22654 +#define STRING_22655 22655 +#define STRING_22656 22656 +#define STRING_22657 22657 +#define STRING_22658 22658 +#define STRING_22659 22659 +#define STRING_22660 22660 +#define STRING_22661 22661 +#define STRING_22662 22662 +#define STRING_22663 22663 +#define STRING_22664 22664 +#define STRING_22665 22665 +#define STRING_22666 22666 +#define STRING_22667 22667 +#define STRING_22668 22668 +#define STRING_22669 22669 +#define STRING_22670 22670 +#define STRING_22671 22671 +#define STRING_22672 22672 +#define STRING_22673 22673 +#define STRING_22674 22674 +#define STRING_22675 22675 +#define STRING_22676 22676 +#define STRING_22677 22677 +#define STRING_22678 22678 +#define STRING_22679 22679 +#define STRING_22680 22680 +#define STRING_22681 22681 +#define STRING_22682 22682 +#define STRING_22683 22683 +#define STRING_22684 22684 +#define STRING_22685 22685 +#define STRING_22686 22686 +#define STRING_22687 22687 +#define STRING_22688 22688 +#define STRING_22689 22689 +#define STRING_22690 22690 +#define STRING_22691 22691 +#define STRING_22692 22692 +#define STRING_22693 22693 +#define STRING_22694 22694 +#define STRING_22695 22695 +#define STRING_22696 22696 +#define STRING_22697 22697 +#define STRING_22698 22698 +#define STRING_22699 22699 +#define STRING_22700 22700 +#define STRING_22701 22701 +#define STRING_22702 22702 +#define STRING_22703 22703 +#define STRING_22704 22704 +#define STRING_22705 22705 +#define STRING_22706 22706 +#define STRING_22707 22707 +#define STRING_22708 22708 +#define STRING_22709 22709 +#define STRING_22710 22710 +#define STRING_22711 22711 +#define STRING_22712 22712 +#define STRING_22713 22713 +#define STRING_22714 22714 +#define STRING_22715 22715 +#define STRING_22716 22716 +#define STRING_22717 22717 +#define STRING_22718 22718 +#define STRING_22719 22719 +#define STRING_22720 22720 +#define STRING_22721 22721 +#define STRING_22722 22722 +#define STRING_22723 22723 +#define STRING_22724 22724 +#define STRING_22725 22725 +#define STRING_22726 22726 +#define STRING_22727 22727 +#define STRING_22728 22728 +#define STRING_22729 22729 +#define STRING_22730 22730 +#define STRING_22731 22731 +#define STRING_22732 22732 +#define STRING_22733 22733 +#define STRING_22734 22734 +#define STRING_22735 22735 +#define STRING_22736 22736 +#define STRING_22737 22737 +#define STRING_22738 22738 +#define STRING_22739 22739 +#define STRING_22740 22740 +#define STRING_22741 22741 +#define STRING_22742 22742 +#define STRING_22743 22743 +#define STRING_22744 22744 +#define STRING_22745 22745 +#define STRING_22746 22746 +#define STRING_22747 22747 +#define STRING_22748 22748 +#define STRING_22749 22749 +#define STRING_22750 22750 +#define STRING_22751 22751 +#define STRING_22752 22752 +#define STRING_22753 22753 +#define STRING_22754 22754 +#define STRING_22755 22755 +#define STRING_22756 22756 +#define STRING_22757 22757 +#define STRING_22758 22758 +#define STRING_22759 22759 +#define STRING_22760 22760 +#define STRING_22761 22761 +#define STRING_22762 22762 +#define STRING_22763 22763 +#define STRING_22764 22764 +#define STRING_22765 22765 +#define STRING_22766 22766 +#define STRING_22767 22767 +#define STRING_22768 22768 +#define STRING_22769 22769 +#define STRING_22770 22770 +#define STRING_22771 22771 +#define STRING_22772 22772 +#define STRING_22773 22773 +#define STRING_22774 22774 +#define STRING_22775 22775 +#define STRING_22776 22776 +#define STRING_22777 22777 +#define STRING_22778 22778 +#define STRING_22779 22779 +#define STRING_22780 22780 +#define STRING_22781 22781 +#define STRING_22782 22782 +#define STRING_22783 22783 +#define STRING_22784 22784 +#define STRING_22785 22785 +#define STRING_22786 22786 +#define STRING_22787 22787 +#define STRING_22788 22788 +#define STRING_22789 22789 +#define STRING_22790 22790 +#define STRING_22791 22791 +#define STRING_22792 22792 +#define STRING_22793 22793 +#define STRING_22794 22794 +#define STRING_22795 22795 +#define STRING_22796 22796 +#define STRING_22797 22797 +#define STRING_22798 22798 +#define STRING_22799 22799 +#define STRING_22800 22800 +#define STRING_22801 22801 +#define STRING_22802 22802 +#define STRING_22803 22803 +#define STRING_22804 22804 +#define STRING_22805 22805 +#define STRING_22806 22806 +#define STRING_22807 22807 +#define STRING_22808 22808 +#define STRING_22809 22809 +#define STRING_22810 22810 +#define STRING_22811 22811 +#define STRING_22812 22812 +#define STRING_22813 22813 +#define STRING_22814 22814 +#define STRING_22815 22815 +#define STRING_22816 22816 +#define STRING_22817 22817 +#define STRING_22818 22818 +#define STRING_22819 22819 +#define STRING_22820 22820 +#define STRING_22821 22821 +#define STRING_22822 22822 +#define STRING_22823 22823 +#define STRING_22824 22824 +#define STRING_22825 22825 +#define STRING_22826 22826 +#define STRING_22827 22827 +#define STRING_22828 22828 +#define STRING_22829 22829 +#define STRING_22830 22830 +#define STRING_22831 22831 +#define STRING_22832 22832 +#define STRING_22833 22833 +#define STRING_22834 22834 +#define STRING_22835 22835 +#define STRING_22836 22836 +#define STRING_22837 22837 +#define STRING_22838 22838 +#define STRING_22839 22839 +#define STRING_22840 22840 +#define STRING_22841 22841 +#define STRING_22842 22842 +#define STRING_22843 22843 +#define STRING_22844 22844 +#define STRING_22845 22845 +#define STRING_22846 22846 +#define STRING_22847 22847 +#define STRING_22848 22848 +#define STRING_22849 22849 +#define STRING_22850 22850 +#define STRING_22851 22851 +#define STRING_22852 22852 +#define STRING_22853 22853 +#define STRING_22854 22854 +#define STRING_22855 22855 +#define STRING_22856 22856 +#define STRING_22857 22857 +#define STRING_22858 22858 +#define STRING_22859 22859 +#define STRING_22860 22860 +#define STRING_22861 22861 +#define STRING_22862 22862 +#define STRING_22863 22863 +#define STRING_22864 22864 +#define STRING_22865 22865 +#define STRING_22866 22866 +#define STRING_22867 22867 +#define STRING_22868 22868 +#define STRING_22869 22869 +#define STRING_22870 22870 +#define STRING_22871 22871 +#define STRING_22872 22872 +#define STRING_22873 22873 +#define STRING_22874 22874 +#define STRING_22875 22875 +#define STRING_22876 22876 +#define STRING_22877 22877 +#define STRING_22878 22878 +#define STRING_22879 22879 +#define STRING_22880 22880 +#define STRING_22881 22881 +#define STRING_22882 22882 +#define STRING_22883 22883 +#define STRING_22884 22884 +#define STRING_22885 22885 +#define STRING_22886 22886 +#define STRING_22887 22887 +#define STRING_22888 22888 +#define STRING_22889 22889 +#define STRING_22890 22890 +#define STRING_22891 22891 +#define STRING_22892 22892 +#define STRING_22893 22893 +#define STRING_22894 22894 +#define STRING_22895 22895 +#define STRING_22896 22896 +#define STRING_22897 22897 +#define STRING_22898 22898 +#define STRING_22899 22899 +#define STRING_22900 22900 +#define STRING_22901 22901 +#define STRING_22902 22902 +#define STRING_22903 22903 +#define STRING_22904 22904 +#define STRING_22905 22905 +#define STRING_22906 22906 +#define STRING_22907 22907 +#define STRING_22908 22908 +#define STRING_22909 22909 diff --git a/proto/Debug/strings.res b/proto/Debug/strings.res new file mode 100644 index 0000000..794eeac --- /dev/null +++ b/proto/Debug/strings.res @@ -0,0 +1,910 @@ +#define STRING_22000 "A or Amaj [0 0 2 2 2 0] (Db E A) " +#define STRING_22001 "A or Amaj [0 4 x 2 5 0] (Db E A) " +#define STRING_22002 "A or Amaj [5 7 7 6 5 5] (Db E A) " +#define STRING_22003 "A or Amaj [x 0 2 2 2 0] (Db E A) " +#define STRING_22004 "A or Amaj [x 4 7 x x 5] (Db E A) " +#define STRING_22005 "A #5 or Aaug [x 0 3 2 2 1] (Db F A) " +#define STRING_22006 "A #5 or Aaug [x 0 x 2 2 1] (Db F A) " +#define STRING_22007 "A/Ab [x 0 2 1 2 0] (Db E Ab A) " +#define STRING_22008 "A/B [0 0 2 4 2 0] (Db E A B) " +#define STRING_22009 "A/B [x 0 7 6 0 0] (Db E A B) " +#define STRING_22010 "A/D [x 0 0 2 2 0] (Db D E A) " +#define STRING_22011 "A/D [x x 0 2 2 0] (Db D E A) " +#define STRING_22012 "A/D [x x 0 6 5 5] (Db D E A) " +#define STRING_22013 "A/D [x x 0 9 10 9] (Db D E A) " +#define STRING_22014 "A/G [3 x 2 2 2 0] (Db E G A) " +#define STRING_22015 "A/G [x 0 2 0 2 0] (Db E G A) " +#define STRING_22016 "A/G [x 0 2 2 2 3] (Db E G A) " +#define STRING_22017 "A/Gb [0 0 2 2 2 2] (Db E Gb A) " +#define STRING_22018 "A/Gb [0 x 4 2 2 0] (Db E Gb A) " +#define STRING_22019 "A/Gb [2 x 2 2 2 0] (Db E Gb A) " +#define STRING_22020 "A/Gb [x 0 4 2 2 0] (Db E Gb A) " +#define STRING_22021 "A/Gb [x x 2 2 2 2] (Db E Gb A) " +#define STRING_22022 "A5 or A(no 3rd) [5 7 7 x x 5] (E A)" +#define STRING_22023 "A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " +#define STRING_22024 "A5 or A(no 3rd) [5 7 7 x x 0] (E A) " +#define STRING_22025 "A6 [0 0 2 2 2 2] (Db E Gb A) " +#define STRING_22026 "A6 [0 x 4 2 2 0] (Db E Gb A) " +#define STRING_22027 "A6 [2 x 2 2 2 0] (Db E Gb A) " +#define STRING_22028 "A6 [x 0 4 2 2 0] (Db E Gb A) " +#define STRING_22029 "A6 [x x 2 2 2 2] (Db E Gb A) " +#define STRING_22030 "A6/7 [0 0 2 0 2 2] (Db E Gb G A) " +#define STRING_22031 "A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " +#define STRING_22032 "A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " +#define STRING_22033 "A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " +#define STRING_22034 "A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " +#define STRING_22035 "A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " +#define STRING_22036 "A7(#5) [1 0 3 0 2 1] (Db F G A) " +#define STRING_22037 "A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " +#define STRING_22038 "A7sus4 [x 0 2 0 3 0] (D E G A) " +#define STRING_22039 "A7sus4 [x 0 2 0 3 3] (D E G A) " +#define STRING_22040 "A7sus4 [x 0 2 2 3 3] (D E G A) " +#define STRING_22041 "A7sus4 [5 x 0 0 3 0] (D E G A) " +#define STRING_22042 "A7sus4 [x 0 0 0 x 0] (D E G A) " +#define STRING_22043 "Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " +#define STRING_22044 "Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " +#define STRING_22045 "Aaug/D [x x 0 2 2 1] (Db D F A) " +#define STRING_22046 "Aaug/G [1 0 3 0 2 1] (Db F G A) " +#define STRING_22047 "Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " +#define STRING_22048 "Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " +#define STRING_22049 "Ab/A [x x 1 2 1 4] (C Eb Ab A) " +#define STRING_22050 "Ab/F [x 8 10 8 9 8] (C Eb F Ab) " +#define STRING_22051 "Ab/F [x x 1 1 1 1] (C Eb F Ab) " +#define STRING_22052 "Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " +#define STRING_22053 "Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " +#define STRING_22054 "Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" +#define STRING_22055 "Ab6 [x 8 10 8 9 8] (C Eb F Ab) " +#define STRING_22056 "Ab6 [x x 1 1 1 1] (C Eb F Ab) " +#define STRING_22057 "Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " +#define STRING_22058 "Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " +#define STRING_22059 "Abdim/E [0 2 0 1 0 0] (D E Ab B) " +#define STRING_22060 "Abdim/E [0 2 2 1 3 0] (D E Ab B) " +#define STRING_22061 "Abdim/E [x 2 0 1 3 0] (D E Ab B) " +#define STRING_22062 "Abdim/E [x x 0 1 0 0] (D E Ab B) " +#define STRING_22063 "Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " +#define STRING_22064 "Abdim/F [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22065 "Abdim/F [x x 0 1 0 1] (D F Ab B) " +#define STRING_22066 "Abdim/F [x x 3 4 3 4] (D F Ab B) " +#define STRING_22067 "Abdim7 [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22068 "Abdim7 [x x 0 1 0 1] (D F Ab B) " +#define STRING_22069 "Abdim7 [x x 3 4 3 4] (D F Ab B) " +#define STRING_22070 "Abm [x x 6 4 4 4] (Eb Ab B) " +#define STRING_22071 "Abm/D [x x 0 4 4 4] (D Eb Ab B) " +#define STRING_22072 "Abm/E [0 2 1 1 0 0] (Eb E Ab B) " +#define STRING_22073 "Abm/E [0 x 6 4 4 0] (Eb E Ab B) " +#define STRING_22074 "Abm/E [x x 1 1 0 0] (Eb E Ab B) " +#define STRING_22075 "Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " +#define STRING_22076 "Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " +#define STRING_22077 "Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " +#define STRING_22078 "Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " +#define STRING_22079 "Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " +#define STRING_22080 "Adim/E [0 3 x 2 4 0] (C Eb E A) " +#define STRING_22081 "Adim/F [x x 1 2 1 1] (C Eb F A) " +#define STRING_22082 "Adim/F [x x 3 5 4 5] (C Eb F A) " +#define STRING_22083 "Adim/G [x x 1 2 1 3] (C Eb G A) " +#define STRING_22084 "Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22085 "Adim7 [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22086 "Am [x 0 2 2 1 0] (C E A) " +#define STRING_22087 "Am [x 0 7 5 5 5] (C E A) " +#define STRING_22088 "Am [x 3 2 2 1 0] (C E A) " +#define STRING_22089 "Am [8 12 x x x 0] (C E A) " +#define STRING_22090 "Am/B [0 0 7 5 0 0] (C E A B) " +#define STRING_22091 "Am/B [x 3 2 2 0 0] (C E A B) " +#define STRING_22092 "Am/D [x x 0 2 1 0] (C D E A) " +#define STRING_22093 "Am/D [x x 0 5 5 5] (C D E A) " +#define STRING_22094 "Am/Eb [0 3 x 2 4 0] (C Eb E A) " +#define STRING_22095 "Am/F [0 0 3 2 1 0] (C E F A) " +#define STRING_22096 "Am/F [1 3 3 2 1 0] (C E F A) " +#define STRING_22097 "Am/F [1 x 2 2 1 0] (C E F A) " +#define STRING_22098 "Am/F [x x 2 2 1 1] (C E F A) " +#define STRING_22099 "Am/F [x x 3 2 1 0] (C E F A) " +#define STRING_22100 "Am/G [0 0 2 0 1 3] (C E G A) " +#define STRING_22101 "Am/G [x 0 2 0 1 0] (C E G A) " +#define STRING_22102 "Am/G [x 0 2 2 1 3] (C E G A) " +#define STRING_22103 "Am/G [x 0 5 5 5 8] (C E G A) " +#define STRING_22104 "Am/Gb [x 0 2 2 1 2] (C E Gb A) " +#define STRING_22105 "Am/Gb [x x 2 2 1 2] (C E Gb A) " +#define STRING_22106 "Am6 [x 0 2 2 1 2] (C E Gb A) " +#define STRING_22107 "Am6 [x x 2 2 1 2] (C E Gb A) " +#define STRING_22108 "Am6 [5 x 4 5 5 5] (A Gb C E A)" +#define STRING_22109 "Am7 [0 0 2 0 1 3] (C E G A) " +#define STRING_22110 "Am7 [x 0 2 0 1 0] (C E G A) " +#define STRING_22111 "Am7 [x 0 2 2 1 3] (C E G A) " +#define STRING_22112 "Am7 [x 0 5 5 5 8] (C E G A) " +#define STRING_22113 "Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " +#define STRING_22114 "Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " +#define STRING_22115 "Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " +#define STRING_22116 "Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " +#define STRING_22117 "Asus or Asus4 [0 0 2 2 3 0] (D E A) " +#define STRING_22118 "Asus or Asus4 [x 0 2 2 3 0] (D E A) " +#define STRING_22119 "Asus or Asus4 [5 5 7 7 x 0] (D E A) " +#define STRING_22120 "Asus or Asus4 [x 0 0 2 3 0] (D E A) " +#define STRING_22121 "Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " +#define STRING_22122 "Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " +#define STRING_22123 "Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " +#define STRING_22124 "Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " +#define STRING_22125 "Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " +#define STRING_22126 "Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " +#define STRING_22127 "Asus2/C [0 0 7 5 0 0] (C E A B) " +#define STRING_22128 "Asus2/C [x 3 2 2 0 0] (C E A B) " +#define STRING_22129 "Asus2/D [0 2 0 2 0 0] (D E A B) " +#define STRING_22130 "Asus2/D [x 2 0 2 3 0] (D E A B) " +#define STRING_22131 "Asus2/Db [0 0 2 4 2 0] (Db E A B) " +#define STRING_22132 "Asus2/Db [x 0 7 6 0 0] (Db E A B) " +#define STRING_22133 "Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " +#define STRING_22134 "Asus2/F [0 0 3 2 0 0] (E F A B) " +#define STRING_22135 "Asus2/G [3 x 2 2 0 0] (E G A B) " +#define STRING_22136 "Asus2/G [x 0 2 0 0 0] (E G A B) " +#define STRING_22137 "Asus2/G [x 0 5 4 5 0] (E G A B) " +#define STRING_22138 "Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " +#define STRING_22139 "Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " +#define STRING_22140 "Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " +#define STRING_22141 "Asus4/B [0 2 0 2 0 0] (D E A B) " +#define STRING_22142 "Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " +#define STRING_22143 "Asus4/C [x x 0 2 1 0] (C D E A) " +#define STRING_22144 "Asus4/C [x x 0 5 5 5] (C D E A) " +#define STRING_22145 "Asus4/Db [x 0 0 2 2 0] (Db D E A) " +#define STRING_22146 "Asus4/Db [x x 0 2 2 0] (Db D E A) " +#define STRING_22147 "Asus4/Db [x x 0 6 5 5] (Db D E A) " +#define STRING_22148 "Asus4/Db [x x 0 9 10 9] (Db D E A) " +#define STRING_22149 "Asus4/F [x x 7 7 6 0] (D E F A) " +#define STRING_22150 "Asus4/G [x 0 2 0 3 0] (D E G A) " +#define STRING_22151 "Asus4/G [x 0 2 0 3 3] (D E G A) " +#define STRING_22152 "Asus4/G [x 0 2 2 3 3] (D E G A) " +#define STRING_22153 "Asus4/G [x 0 0 0 x 0] (D E G A) " +#define STRING_22154 "Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " +#define STRING_22155 "Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " +#define STRING_22156 "Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " +#define STRING_22157 "Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " +#define STRING_22158 "Asus4/Gb [x x 2 2 3 2] (D E Gb A) " +#define STRING_22159 "Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " +#define STRING_22160 "Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " +#define STRING_22161 "B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " +#define STRING_22162 "B #5 or Baug [3 2 1 0 0 3] (Eb G B) " +#define STRING_22163 "B #5 or Baug [3 x 1 0 0 3] (Eb G B) " +#define STRING_22164 "B/A [2 x 1 2 0 2] (Eb Gb A B) " +#define STRING_22165 "B/A [x 0 1 2 0 2] (Eb Gb A B) " +#define STRING_22166 "B/A [x 2 1 2 0 2] (Eb Gb A B) " +#define STRING_22167 "B/A [x 2 4 2 4 2] (Eb Gb A B) " +#define STRING_22168 "B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " +#define STRING_22169 "B/E [x 2 2 4 4 2] (Eb E Gb B) " +#define STRING_22170 "B/E [x x 4 4 4 0] (Eb E Gb B) " +#define STRING_22171 "B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" +#define STRING_22172 "B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" +#define STRING_22173 "B6 [x x 4 4 4 4] (Eb Gb Ab B) " +#define STRING_22174 "B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " +#define STRING_22175 "B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " +#define STRING_22176 "B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " +#define STRING_22177 "B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " +#define STRING_22178 "B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " +#define STRING_22179 "B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " +#define STRING_22180 "B7sus4 [x 0 4 4 0 0] (E Gb A B) " +#define STRING_22181 "B7sus4 [x 2 4 2 5 2] (E Gb A B) " +#define STRING_22182 "Baug/E [3 x 1 0 0 0] (Eb E G B) " +#define STRING_22183 "Baug/E [x x 1 0 0 0] (Eb E G B) " +#define STRING_22184 "Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " +#define STRING_22185 "Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " +#define STRING_22186 "Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " +#define STRING_22187 "Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " +#define STRING_22188 "Bb b5 [x x 0 3 x 0] (D E Bb) " +#define STRING_22189 "Bb/A [1 1 3 2 3 1] (D F A Bb) " +#define STRING_22190 "Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " +#define STRING_22191 "Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " +#define STRING_22192 "Bb/Db [x x 0 6 6 6] (Db D F Bb) " +#define STRING_22193 "Bb/E [x 1 3 3 3 0] (D E F Bb) " +#define STRING_22194 "Bb/G [3 5 3 3 3 3] (D F G Bb) " +#define STRING_22195 "Bb/G [x x 3 3 3 3] (D F G Bb) " +#define STRING_22196 "Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" +#define STRING_22197 "Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" +#define STRING_22198 "Bb6 [3 5 3 3 3 3] (D F G Bb) " +#define STRING_22199 "Bb6 [x x 3 3 3 3] (D F G Bb) " +#define STRING_22200 "Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " +#define STRING_22201 "Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " +#define STRING_22202 "Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " +#define STRING_22203 "Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " +#define STRING_22204 "Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " +#define STRING_22205 "Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " +#define STRING_22206 "Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " +#define STRING_22207 "Bbdim/D [x x 0 3 2 0] (Db D E Bb) " +#define STRING_22208 "Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22209 "Bbdim/G [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22210 "Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " +#define STRING_22211 "Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " +#define STRING_22212 "Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22213 "Bbdim7 [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22214 "Bbm [1 1 3 3 2 1] (Db F Bb) " +#define STRING_22215 "Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " +#define STRING_22216 "Bbm/D [x x 0 6 6 6] (Db D F Bb) " +#define STRING_22217 "Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " +#define STRING_22218 "Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " +#define STRING_22219 "Bbm6 [7 x 6 7 7 7 (B Ab D Gb B) " +#define STRING_22220 "Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " +#define STRING_22221 "Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " +#define STRING_22222 "Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " +#define STRING_22223 "Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " +#define STRING_22224 "Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " +#define STRING_22225 "Bdim/A [1 2 3 2 3 1] (D F A B) " +#define STRING_22226 "Bdim/A [x 2 0 2 0 1] (D F A B) " +#define STRING_22227 "Bdim/A [x x 0 2 0 1] (D F A B) " +#define STRING_22228 "Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22229 "Bdim/Ab [x x 0 1 0 1] (D F Ab B) " +#define STRING_22230 "Bdim/Ab [x x 3 4 3 4] (D F Ab B) " +#define STRING_22231 "Bdim/G [1 x 0 0 0 3] (D F G B) " +#define STRING_22232 "Bdim/G [3 2 0 0 0 1] (D F G B) " +#define STRING_22233 "Bdim/G [x x 0 0 0 1] (D F G B) " +#define STRING_22234 "Bdim7 [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22235 "Bdim7 [x x 0 1 0 1] (D F Ab B) " +#define STRING_22236 "Bdim7 [x x 3 4 3 4] (D F Ab B) " +#define STRING_22237 "Bm [2 2 4 4 3 2] (D Gb B) " +#define STRING_22238 "Bm [x 2 4 4 3 2] (D Gb B) " +#define STRING_22239 "Bm [x x 0 4 3 2] (D Gb B) " +#define STRING_22240 "Bm/A [x 0 4 4 3 2] (D Gb A B) " +#define STRING_22241 "Bm/A [x 2 0 2 0 2] (D Gb A B) " +#define STRING_22242 "Bm/A [x 2 0 2 3 2] (D Gb A B) " +#define STRING_22243 "Bm/A [x 2 4 2 3 2] (D Gb A B) " +#define STRING_22244 "Bm/A [x x 0 2 0 2] (D Gb A B) " +#define STRING_22245 "Bm/G [2 2 0 0 0 3] (D Gb G B) " +#define STRING_22246 "Bm/G [2 2 0 0 3 3] (D Gb G B) " +#define STRING_22247 "Bm/G [3 2 0 0 0 2] (D Gb G B) " +#define STRING_22248 "Bm/G [x x 4 4 3 3] (D Gb G B) " +#define STRING_22249 "Bm7 [x 0 4 4 3 2] (D Gb A B) " +#define STRING_22250 "Bm7 [x 2 0 2 0 2] (D Gb A B) " +#define STRING_22251 "Bm7 [x 2 0 2 3 2] (D Gb A B) " +#define STRING_22252 "Bm7 [x 2 4 2 3 2] (D Gb A B) " +#define STRING_22253 "Bm7 [x x 0 2 0 2] (D Gb A B) " +#define STRING_22254 "Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " +#define STRING_22255 "Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " +#define STRING_22256 "Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " +#define STRING_22257 "Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " +#define STRING_22258 "Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " +#define STRING_22259 "Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " +#define STRING_22260 "Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " +#define STRING_22261 "Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " +#define STRING_22262 "Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" +#define STRING_22263 "Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " +#define STRING_22264 "Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " +#define STRING_22265 "Bsus4/A [x 0 4 4 0 0] (E Gb A B) " +#define STRING_22266 "Bsus4/A [x 2 4 2 5 2] (E Gb A B) " +#define STRING_22267 "Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " +#define STRING_22268 "Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " +#define STRING_22269 "Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " +#define STRING_22270 "Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " +#define STRING_22271 "Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " +#define STRING_22272 "Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " +#define STRING_22273 "Bsus4/G [0 2 2 0 0 2] (E Gb G B) " +#define STRING_22274 "Bsus4/G [0 2 4 0 0 0] (E Gb G B) " +#define STRING_22275 "Bsus4/G [0 x 4 0 0 0] (E Gb G B) " +#define STRING_22276 "Bsus4/G [2 2 2 0 0 0] (E Gb G B) " +#define STRING_22277 "C or Cmaj [0 3 2 0 1 0] (C E G) " +#define STRING_22278 "C or Cmaj [0 3 5 5 5 3] (C E G) " +#define STRING_22279 "C or Cmaj [3 3 2 0 1 0] (C E G) " +#define STRING_22280 "C or Cmaj [3 x 2 0 1 0] (C E G) " +#define STRING_22281 "C or Cmaj [x 3 2 0 1 0] (C E G) " +#define STRING_22282 "C or Cmaj [x 3 5 5 5 0] (C E G) " +#define STRING_22283 "C #5 or Caug [x 3 2 1 1 0] (C E Ab) " +#define STRING_22284 "C b5 [x x 4 5 x 0] (C E Gb) " +#define STRING_22285 "C/A [0 0 2 0 1 3] (C E G A) " +#define STRING_22286 "C/A [x 0 2 0 1 0] (C E G A) " +#define STRING_22287 "C/A [x 0 2 2 1 3] (C E G A) " +#define STRING_22288 "C/A [x 0 5 5 5 8] (C E G A) " +#define STRING_22289 "C/B [0 3 2 0 0 0] (C E G B) " +#define STRING_22290 "C/B [x 2 2 0 1 0] (C E G B) " +#define STRING_22291 "C/B [x 3 5 4 5 3] (C E G B) " +#define STRING_22292 "C/Bb [x 3 5 3 5 3] (C E G Bb) " +#define STRING_22293 "C/D [3 x 0 0 1 0] (C D E G) " +#define STRING_22294 "C/D [x 3 0 0 1 0] (C D E G) " +#define STRING_22295 "C/D [x 3 2 0 3 0] (C D E G) " +#define STRING_22296 "C/D [x 3 2 0 3 3] (C D E G) " +#define STRING_22297 "C/D [x x 0 0 1 0] (C D E G) " +#define STRING_22298 "C/D [x x 0 5 5 3] (C D E G) " +#define STRING_22299 "C/D [x 10 12 12 13 0] (C D E G) " +#define STRING_22300 "C/D [x 5 5 5 x 0] (C D E G) " +#define STRING_22301 "C/F [x 3 3 0 1 0] (C E F G) " +#define STRING_22302 "C/F [x x 3 0 1 0] (C E F G) " +#define STRING_22303 "C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" +#define STRING_22304 "C6 [0 0 2 0 1 3] (C E G A) " +#define STRING_22305 "C6 [x 0 2 0 1 0] (C E G A) " +#define STRING_22306 "C6 [x 0 2 2 1 3] (C E G A) " +#define STRING_22307 "C6 [x 0 5 5 5 8] (C E G A) " +#define STRING_22308 "C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " +#define STRING_22309 "C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " +#define STRING_22310 "C7sus4 [x 3 5 3 6 3] (C F G Bb) " +#define STRING_22311 "C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " +#define STRING_22312 "Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " +#define STRING_22313 "Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " +#define STRING_22314 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " +#define STRING_22315 "Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " +#define STRING_22316 "Cadd9 or C2 [x x 0 0 1 0] (C D E G) " +#define STRING_22317 "Cadd9 or C2 [x x 0 5 5 3] (C D E G) " +#define STRING_22318 "Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " +#define STRING_22319 "Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " +#define STRING_22320 "Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " +#define STRING_22321 "Cdim/A [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22322 "Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " +#define STRING_22323 "Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " +#define STRING_22324 "Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" +#define STRING_22325 "Cdim7 [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22326 "Cm [x 3 5 5 4 3] (C Eb G) " +#define STRING_22327 "Cm [x x 5 5 4 3] (C Eb G) " +#define STRING_22328 "Cm/A [x x 1 2 1 3] (C Eb G A) " +#define STRING_22329 "Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " +#define STRING_22330 "Cm6 [x x 1 2 1 3] (C Eb G A) " +#define STRING_22331 "Cm6 [8 x 7 8 8 8] (C A Eb G C) " +#define STRING_22332 "Cm7 [x 3 5 3 4 3] (C Eb G Bb) " +#define STRING_22333 "Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " +#define STRING_22334 "Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " +#define STRING_22335 "Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " +#define STRING_22336 "Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " +#define STRING_22337 "Csus or Csus4 [x 3 3 0 1 1] (C F G) " +#define STRING_22338 "Csus or Csus4 [x x 3 0 1 1] (C F G) " +#define STRING_22339 "Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" +#define STRING_22340 "Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" +#define STRING_22341 "Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " +#define STRING_22342 "Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " +#define STRING_22343 "Csus2/A [x 5 7 5 8 3] (C D G A)" +#define STRING_22344 "Csus2/A [x x 0 2 1 3] (C D G A) " +#define STRING_22345 "Csus2/B [3 3 0 0 0 3] (C D G B) " +#define STRING_22346 "Csus2/B [x 3 0 0 0 3] (C D G B) " +#define STRING_22347 "Csus2/E [3 x 0 0 1 0] (C D E G) " +#define STRING_22348 "Csus2/E [x 3 0 0 1 0] (C D E G) " +#define STRING_22349 "Csus2/E [x 3 2 0 3 0] (C D E G) " +#define STRING_22350 "Csus2/E [x 3 2 0 3 3] (C D E G) " +#define STRING_22351 "Csus2/E [x x 0 0 1 0] (C D E G) " +#define STRING_22352 "Csus2/E [x x 0 5 5 3] (C D E G) " +#define STRING_22353 "Csus2/E [x 10 12 12 13 0] (C D E G) " +#define STRING_22354 "Csus2/E [x 5 5 5 x 0] (C D E G) " +#define STRING_22355 "Csus2/F [3 3 0 0 1 1] (C D F G) " +#define STRING_22356 "Csus4/A [3 x 3 2 1 1] (C F G A) " +#define STRING_22357 "Csus4/A [x x 3 2 1 3] (C F G A) " +#define STRING_22358 "Csus4/B [x 3 3 0 0 3] (C F G B) " +#define STRING_22359 "Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " +#define STRING_22360 "Csus4/D [3 3 0 0 1 1] (C D F G) " +#define STRING_22361 "Csus4/E [x 3 3 0 1 0] (C E F G) " +#define STRING_22362 "Csus4/E [x x 3 0 1 0] (C E F G) " +#define STRING_22363 "D or Dmaj [x 5 4 2 3 2] (D Gb A)" +#define STRING_22364 "D or Dmaj [x 9 7 7 x 2] (D Gb A)" +#define STRING_22365 "D or Dmaj [2 0 0 2 3 2] (D Gb A) " +#define STRING_22366 "D or Dmaj [x 0 0 2 3 2] (D Gb A) " +#define STRING_22367 "D or Dmaj [x 0 4 2 3 2] (D Gb A) " +#define STRING_22368 "D or Dmaj [x x 0 2 3 2] (D Gb A) " +#define STRING_22369 "D or Dmaj [x x 0 7 7 5] (D Gb A) " +#define STRING_22370 "D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " +#define STRING_22371 "D/B [x 0 4 4 3 2] (D Gb A B) " +#define STRING_22372 "D/B [x 2 0 2 0 2] (D Gb A B) " +#define STRING_22373 "D/B [x 2 0 2 3 2] (D Gb A B) " +#define STRING_22374 "D/B [x 2 4 2 3 2] (D Gb A B) " +#define STRING_22375 "D/B [x x 0 2 0 2] (D Gb A B) " +#define STRING_22376 "D/C [x 5 7 5 7 2] (C D Gb A)" +#define STRING_22377 "D/C [x 0 0 2 1 2] (C D Gb A) " +#define STRING_22378 "D/C [x 3 x 2 3 2] (C D Gb A) " +#define STRING_22379 "D/C [x 5 7 5 7 5] (C D Gb A) " +#define STRING_22380 "D/Db [x x 0 14 14 14] (Db D Gb A) " +#define STRING_22381 "D/Db [x x 0 2 2 2] (Db D Gb A) " +#define STRING_22382 "D/E [0 0 0 2 3 2] (D E Gb A) " +#define STRING_22383 "D/E [0 0 4 2 3 0] (D E Gb A) " +#define STRING_22384 "D/E [2 x 0 2 3 0] (D E Gb A) " +#define STRING_22385 "D/E [x 0 2 2 3 2] (D E Gb A) " +#define STRING_22386 "D/E [x x 2 2 3 2] (D E Gb A) " +#define STRING_22387 "D/E [x 5 4 2 3 0] (D E Gb A) " +#define STRING_22388 "D/E [x 9 7 7 x 0] (D E Gb A) " +#define STRING_22389 "D/G [5 x 4 0 3 5] (D Gb G A)" +#define STRING_22390 "D/G [3 x 0 2 3 2] (D Gb G A) " +#define STRING_22391 "D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" +#define STRING_22392 "D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" +#define STRING_22393 "D6 [x 0 4 4 3 2] (D Gb A B) " +#define STRING_22394 "D6 [x 2 0 2 0 2] (D Gb A B) " +#define STRING_22395 "D6 [x 2 0 2 3 2] (D Gb A B) " +#define STRING_22396 "D6 [x 2 4 2 3 2] (D Gb A B) " +#define STRING_22397 "D6 [x x 0 2 0 2] (D Gb A B) " +#define STRING_22398 "D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " +#define STRING_22399 "D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " +#define STRING_22400 "D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" +#define STRING_22401 "D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " +#define STRING_22402 "D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " +#define STRING_22403 "D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " +#define STRING_22404 "D7sus4 [x 5 7 5 8 3] (C D G A)" +#define STRING_22405 "D7sus4 [x x 0 2 1 3] (C D G A) " +#define STRING_22406 "D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " +#define STRING_22407 "D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " +#define STRING_22408 "D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " +#define STRING_22409 "D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " +#define STRING_22410 "Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " +#define STRING_22411 "Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " +#define STRING_22412 "Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " +#define STRING_22413 "Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " +#define STRING_22414 "Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " +#define STRING_22415 "Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " +#define STRING_22416 "Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " +#define STRING_22417 "Daug/E [2 x 4 3 3 0] (D E Gb Bb) " +#define STRING_22418 "Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " +#define STRING_22419 "Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " +#define STRING_22420 "Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " +#define STRING_22421 "Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " +#define STRING_22422 "Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " +#define STRING_22423 "Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " +#define STRING_22424 "Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " +#define STRING_22425 "Db b5 [x x 3 0 2 1] (Db F G) " +#define STRING_22426 "Db/B [x 4 3 4 0 4] (Db F Ab B) " +#define STRING_22427 "Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " +#define STRING_22428 "Db/C [x 3 3 1 2 1] (C Db F Ab) " +#define STRING_22429 "Db/C [x 4 6 5 6 4] (C Db F Ab) " +#define STRING_22430 "Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" +#define STRING_22431 "Db6 [x 1 3 1 2 1] (Db F Ab Bb) " +#define STRING_22432 "Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " +#define STRING_22433 "Dbaug/D [x x 0 2 2 1] (Db D F A) " +#define STRING_22434 "Dbaug/G [1 0 3 0 2 1] (Db F G A) " +#define STRING_22435 "Dbdim/A [3 x 2 2 2 0] (Db E G A) " +#define STRING_22436 "Dbdim/A [x 0 2 0 2 0] (Db E G A) " +#define STRING_22437 "Dbdim/A [x 0 2 2 2 3] (Db E G A) " +#define STRING_22438 "Dbdim/B [0 2 2 0 2 0] (Db E G B) " +#define STRING_22439 "Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22440 "Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22441 "Dbdim/D [3 x 0 0 2 0] (Db D E G) " +#define STRING_22442 "Dbdim/D [x x 0 0 2 0] (Db D E G) " +#define STRING_22443 "Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22444 "Dbdim7 [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22445 "Dbm [x 4 6 6 5 4] (Db E Ab) " +#define STRING_22446 "Dbm [x x 2 1 2 0] (Db E Ab) " +#define STRING_22447 "Dbm [x 4 6 6 x 0] (Db E Ab) " +#define STRING_22448 "Dbm/A [x 0 2 1 2 0] (Db E Ab A) " +#define STRING_22449 "Dbm/B [0 2 2 1 2 0] (Db E Ab B) " +#define STRING_22450 "Dbm/B [x 4 6 4 5 4] (Db E Ab B) " +#define STRING_22451 "Dbm7 [0 2 2 1 2 0] (Db E Ab B) " +#define STRING_22452 "Dbm7 [x 4 6 4 5 4] (Db E Ab B) " +#define STRING_22453 "Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " +#define STRING_22454 "Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " +#define STRING_22455 "Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " +#define STRING_22456 "Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " +#define STRING_22457 "Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " +#define STRING_22458 "Ddim/B [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22459 "Ddim/B [x x 0 1 0 1] (D F Ab B) " +#define STRING_22460 "Ddim/B [x x 3 4 3 4] (D F Ab B) " +#define STRING_22461 "Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " +#define STRING_22462 "Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " +#define STRING_22463 "Ddim/C [x x 0 1 1 1] (C D F Ab) " +#define STRING_22464 "Ddim7 [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22465 "Ddim7 [x x 0 1 0 1] (D F Ab B) " +#define STRING_22466 "Ddim7 [x x 3 4 3 4] (D F Ab B) " +#define STRING_22467 "Dm [x 0 0 2 3 1] (D F A) " +#define STRING_22468 "Dm/B [1 2 3 2 3 1] (D F A B) " +#define STRING_22469 "Dm/B [x 2 0 2 0 1] (D F A B) " +#define STRING_22470 "Dm/B [x x 0 2 0 1] (D F A B) " +#define STRING_22471 "Dm/Bb [1 1 3 2 3 1] (D F A Bb) " +#define STRING_22472 "Dm/C [x 5 7 5 6 5] (C D F A) " +#define STRING_22473 "Dm/C [x x 0 2 1 1] (C D F A) " +#define STRING_22474 "Dm/C [x x 0 5 6 5] (C D F A) " +#define STRING_22475 "Dm/Db [x x 0 2 2 1] (Db D F A) " +#define STRING_22476 "Dm/E [x x 7 7 6 0] (D E F A) " +#define STRING_22477 "Dm6 [1 2 3 2 3 1] (D F A B) " +#define STRING_22478 "Dm6 [x 2 0 2 0 1] (D F A B) " +#define STRING_22479 "Dm6 [x x 0 2 0 1] (D F A B) " +#define STRING_22480 "Dm6 [10 x 9 10 10 10] (D B F A D) " +#define STRING_22481 "Dm7 [x 5 7 5 6 5] (C D F A) " +#define STRING_22482 "Dm7 [x x 0 2 1 1] (C D F A) " +#define STRING_22483 "Dm7 [x x 0 5 6 5] (C D F A) " +#define STRING_22484 "Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " +#define STRING_22485 "Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " +#define STRING_22486 "Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " +#define STRING_22487 "Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " +#define STRING_22488 "Dmin/maj7 [x x 0 2 2 1] (Db D F A) " +#define STRING_22489 "Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" +#define STRING_22490 "Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " +#define STRING_22491 "Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " +#define STRING_22492 "Dsus or Dsus4 [x x 0 2 3 3] (D G A) " +#define STRING_22493 "Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" +#define STRING_22494 "Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" +#define STRING_22495 "Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " +#define STRING_22496 "Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " +#define STRING_22497 "Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " +#define STRING_22498 "Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " +#define STRING_22499 "Dsus2/B [0 2 0 2 0 0] (D E A B) " +#define STRING_22500 "Dsus2/B [x 2 0 2 3 0] (D E A B) " +#define STRING_22501 "Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " +#define STRING_22502 "Dsus2/C [x x 0 2 1 0] (C D E A) " +#define STRING_22503 "Dsus2/C [x x 0 5 5 5] (C D E A) " +#define STRING_22504 "Dsus2/Db [x 0 0 2 2 0] (Db D E A) " +#define STRING_22505 "Dsus2/Db [x x 0 2 2 0] (Db D E A) " +#define STRING_22506 "Dsus2/Db [x x 0 6 5 5] (Db D E A) " +#define STRING_22507 "Dsus2/Db [x x 0 9 10 9] (Db D E A) " +#define STRING_22508 "Dsus2/F [x x 7 7 6 0] (D E F A) " +#define STRING_22509 "Dsus2/G [x 0 2 0 3 0] (D E G A) " +#define STRING_22510 "Dsus2/G [x 0 2 0 3 3] (D E G A) " +#define STRING_22511 "Dsus2/G [x 0 2 2 3 3] (D E G A) " +#define STRING_22512 "Dsus2/G [5 x 0 0 3 0] (D E G A) " +#define STRING_22513 "Dsus2/G [x 0 0 0 x 0] (D E G A) " +#define STRING_22514 "Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " +#define STRING_22515 "Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " +#define STRING_22516 "Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " +#define STRING_22517 "Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " +#define STRING_22518 "Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " +#define STRING_22519 "Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " +#define STRING_22520 "Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " +#define STRING_22521 "Dsus4/B [3 0 0 0 0 3] (D G A B) " +#define STRING_22522 "Dsus4/B [3 2 0 2 0 3] (D G A B) " +#define STRING_22523 "Dsus4/C [x 5 7 5 8 3] (C D G A)" +#define STRING_22524 "Dsus4/C [x x 0 2 1 3] (C D G A) " +#define STRING_22525 "Dsus4/E [x 0 2 0 3 0] (D E G A) " +#define STRING_22526 "Dsus4/E [x 0 2 0 3 3] (D E G A) " +#define STRING_22527 "Dsus4/E [x 0 2 2 3 3] (D E G A) " +#define STRING_22528 "Dsus4/E [5 x 0 0 3 0] (D E G A) " +#define STRING_22529 "Dsus4/E [x 0 0 0 x 0] (D E G A) " +#define STRING_22530 "Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" +#define STRING_22531 "Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " +#define STRING_22532 "E or Emaj [0 2 2 1 0 0] (E Ab B) " +#define STRING_22533 "E or Emaj [x 7 6 4 5 0] (E Ab B) " +#define STRING_22534 "E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " +#define STRING_22535 "E/A [x 0 2 1 0 0] (E Ab A B) " +#define STRING_22536 "E/D [0 2 0 1 0 0] (D E Ab B) " +#define STRING_22537 "E/D [0 2 2 1 3 0] (D E Ab B) " +#define STRING_22538 "E/D [x 2 0 1 3 0] (D E Ab B) " +#define STRING_22539 "E/D [x x 0 1 0 0] (D E Ab B) " +#define STRING_22540 "E/Db [0 2 2 1 2 0] (Db E Ab B) " +#define STRING_22541 "E/Db [x 4 6 4 5 4] (Db E Ab B) " +#define STRING_22542 "E/Eb [0 2 1 1 0 0] (Eb E Ab B) " +#define STRING_22543 "E/Eb [0 x 6 4 4 0] (Eb E Ab B) " +#define STRING_22544 "E/Eb [x x 1 1 0 0] (Eb E Ab B) " +#define STRING_22545 "E/Gb [0 2 2 1 0 2] (E Gb Ab B) " +#define STRING_22546 "E/Gb [0 x 4 1 0 0] (E Gb Ab B) " +#define STRING_22547 "E/Gb [2 2 2 1 0 0] (E Gb Ab B) " +#define STRING_22548 "E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " +#define STRING_22549 "E5 or E(no 3rd) [0 2 x x x 0] (E B) " +#define STRING_22550 "E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " +#define STRING_22551 "E6 [0 2 2 1 2 0] (Db E Ab B) " +#define STRING_22552 "E6 [x 4 6 4 5 4] (Db E Ab B) " +#define STRING_22553 "E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " +#define STRING_22554 "E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " +#define STRING_22555 "E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " +#define STRING_22556 "E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " +#define STRING_22557 "E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " +#define STRING_22558 "E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " +#define STRING_22559 "E7sus4 [0 2 0 2 0 0] (D E A B) " +#define STRING_22560 "E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " +#define STRING_22561 "E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " +#define STRING_22562 "Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " +#define STRING_22563 "Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " +#define STRING_22564 "Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " +#define STRING_22565 "Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " +#define STRING_22566 "Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " +#define STRING_22567 "Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " +#define STRING_22568 "Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " +#define STRING_22569 "Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " +#define STRING_22570 "Eb/C [x 3 5 3 4 3] (C Eb G Bb) " +#define STRING_22571 "Eb/D [x 6 8 7 8 6] (D Eb G Bb) " +#define STRING_22572 "Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " +#define STRING_22573 "Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " +#define STRING_22574 "Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " +#define STRING_22575 "Eb/E [x x 5 3 4 0] (Eb E G Bb) " +#define STRING_22576 "Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" +#define STRING_22577 "Eb6 [x 3 5 3 4 3] (C Eb G Bb) " +#define STRING_22578 "Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " +#define STRING_22579 "Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " +#define STRING_22580 "Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " +#define STRING_22581 "Ebaug/E [3 x 1 0 0 0] (Eb E G B) " +#define STRING_22582 "Ebaug/E [x x 1 0 0 0] (Eb E G B) " +#define STRING_22583 "Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " +#define STRING_22584 "Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " +#define STRING_22585 "Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " +#define STRING_22586 "Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " +#define STRING_22587 "Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22588 "Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22589 "Ebm [x x 4 3 4 2] (Eb Gb Bb) " +#define STRING_22590 "Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " +#define STRING_22591 "Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " +#define STRING_22592 "Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " +#define STRING_22593 "Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " +#define STRING_22594 "Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " +#define STRING_22595 "Edim/C [x 3 5 3 5 3] (C E G Bb) " +#define STRING_22596 "Edim/D [3 x 0 3 3 0] (D E G Bb) " +#define STRING_22597 "Edim/Db [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22598 "Edim/Db [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22599 "Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " +#define STRING_22600 "Edim7 [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22601 "Edim7 [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22602 "Em [0 2 2 0 0 0] (E G B) " +#define STRING_22603 "Em [3 x 2 0 0 0] (E G B) " +#define STRING_22604 "Em [x 2 5 x x 0] (E G B) " +#define STRING_22605 "Em/A [3 x 2 2 0 0] (E G A B) " +#define STRING_22606 "Em/A [x 0 2 0 0 0] (E G A B) " +#define STRING_22607 "Em/A [x 0 5 4 5 0] (E G A B) " +#define STRING_22608 "Em/C [0 3 2 0 0 0] (C E G B) " +#define STRING_22609 "Em/C [x 2 2 0 1 0] (C E G B) " +#define STRING_22610 "Em/C [x 3 5 4 5 3] (C E G B) " +#define STRING_22611 "Em/D [0 2 0 0 0 0] (D E G B) " +#define STRING_22612 "Em/D [0 2 0 0 3 0] (D E G B) " +#define STRING_22613 "Em/D [0 2 2 0 3 0] (D E G B) " +#define STRING_22614 "Em/D [0 2 2 0 3 3] (D E G B) " +#define STRING_22615 "Em/D [x x 0 12 12 12] (D E G B) " +#define STRING_22616 "Em/D [x x 0 9 8 7] (D E G B) " +#define STRING_22617 "Em/D [x x 2 4 3 3] (D E G B) " +#define STRING_22618 "Em/D [0 x 0 0 0 0] (D E G B) " +#define STRING_22619 "Em/D [x 10 12 12 12 0] (D E G B) " +#define STRING_22620 "Em/Db [0 2 2 0 2 0] (Db E G B) " +#define STRING_22621 "Em/Eb [3 x 1 0 0 0] (Eb E G B) " +#define STRING_22622 "Em/Eb [x x 1 0 0 0] (Eb E G B) " +#define STRING_22623 "Em/Gb [0 2 2 0 0 2] (E Gb G B) " +#define STRING_22624 "Em/Gb [0 2 4 0 0 0] (E Gb G B) " +#define STRING_22625 "Em/Gb [0 x 4 0 0 0] (E Gb G B) " +#define STRING_22626 "Em/Gb [2 2 2 0 0 0] (E Gb G B) " +#define STRING_22627 "Em6 [0 2 2 0 2 0] (Db E G B) " +#define STRING_22628 "Em6 [12 x 11 12 12 12] (E Db G B E) " +#define STRING_22629 "Em7 [0 2 0 0 0 0] (D E G B) " +#define STRING_22630 "Em7 [0 2 0 0 3 0] (D E G B) " +#define STRING_22631 "Em7 [0 2 2 0 3 0] (D E G B) " +#define STRING_22632 "Em7 [0 2 2 0 3 3] (D E G B) " +#define STRING_22633 "Em7 [x x 0 0 0 0] (D E G B) " +#define STRING_22634 "Em7 [x x 0 12 12 12] (D E G B) " +#define STRING_22635 "Em7 [x x 0 9 8 7] (D E G B) " +#define STRING_22636 "Em7 [x x 2 4 3 3] (D E G B) " +#define STRING_22637 "Em7 [0 x 0 0 0 0] (D E G B) " +#define STRING_22638 "Em7 [x 10 12 12 12 0] (D E G B) " +#define STRING_22639 "Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " +#define STRING_22640 "Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " +#define STRING_22641 "Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " +#define STRING_22642 "Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " +#define STRING_22643 "Em9 [0 2 0 0 0 2] (D E Gb G B) " +#define STRING_22644 "Em9 [0 2 0 0 3 2] (D E Gb G B) " +#define STRING_22645 "Em9 [2 2 0 0 0 0] (D E Gb G B) " +#define STRING_22646 "Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " +#define STRING_22647 "Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " +#define STRING_22648 "Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " +#define STRING_22649 "Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " +#define STRING_22650 "Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " +#define STRING_22651 "Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " +#define STRING_22652 "Emin/maj7 [x x 1 0 0 0] (Eb E G B) " +#define STRING_22653 "Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " +#define STRING_22654 "Esus or Esus4 [0 0 2 2 0 0] (E A B) " +#define STRING_22655 "Esus or Esus4 [0 0 2 4 0 0] (E A B) " +#define STRING_22656 "Esus or Esus4 [0 2 2 2 0 0] (E A B) " +#define STRING_22657 "Esus or Esus4 [x 0 2 2 0 0] (E A B) " +#define STRING_22658 "Esus or Esus4 [x x 2 2 0 0] (E A B) " +#define STRING_22659 "Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" +#define STRING_22660 "Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" +#define STRING_22661 "Esus2/A [x 0 4 4 0 0] (E Gb A B) " +#define STRING_22662 "Esus2/A [x 2 4 2 5 2] (E Gb A B) " +#define STRING_22663 "Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " +#define STRING_22664 "Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " +#define STRING_22665 "Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " +#define STRING_22666 "Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " +#define STRING_22667 "Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " +#define STRING_22668 "Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " +#define STRING_22669 "Esus2/G [0 2 2 0 0 2] (E Gb G B) " +#define STRING_22670 "Esus2/G [0 2 4 0 0 0] (E Gb G B) " +#define STRING_22671 "Esus2/G [0 x 4 0 0 0] (E Gb G B) " +#define STRING_22672 "Esus2/G [2 2 2 0 0 0] (E Gb G B) " +#define STRING_22673 "Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " +#define STRING_22674 "Esus4/C [0 0 7 5 0 0] (C E A B) " +#define STRING_22675 "Esus4/C [x 3 2 2 0 0] (C E A B) " +#define STRING_22676 "Esus4/D [0 2 0 2 0 0] (D E A B) " +#define STRING_22677 "Esus4/D [x 2 0 2 3 0] (D E A B) " +#define STRING_22678 "Esus4/Db [0 0 2 4 2 0] (Db E A B) " +#define STRING_22679 "Esus4/Db [x 0 7 6 0 0] (Db E A B) " +#define STRING_22680 "Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " +#define STRING_22681 "Esus4/F [0 0 3 2 0 0] (E F A B) " +#define STRING_22682 "Esus4/G [x 0 2 0 0 0] (E G A B) " +#define STRING_22683 "Esus4/G [x 0 5 4 5 0] (E G A B) " +#define STRING_22684 "Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " +#define STRING_22685 "Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " +#define STRING_22686 "F or Fmaj [1 3 3 2 1 1] (C F A) " +#define STRING_22687 "F or Fmaj [x 0 3 2 1 1] (C F A) " +#define STRING_22688 "F or Fmaj [x 3 3 2 1 1] (C F A) " +#define STRING_22689 "F or Fmaj [x x 3 2 1 1] (C F A) " +#define STRING_22690 "F #5 or Faug [x 0 3 2 2 1] (Db F A) " +#define STRING_22691 "F #5 or Faug [x 0 x 2 2 1] (Db F A) " +#define STRING_22692 "F/D [x 5 7 5 6 5] (C D F A) " +#define STRING_22693 "F/D [x x 0 2 1 1] (C D F A) " +#define STRING_22694 "F/D [x x 0 5 6 5] (C D F A) " +#define STRING_22695 "F/E [0 0 3 2 1 0] (C E F A) " +#define STRING_22696 "F/E [1 3 3 2 1 0] (C E F A) " +#define STRING_22697 "F/E [1 x 2 2 1 0] (C E F A) " +#define STRING_22698 "F/E [x x 2 2 1 1] (C E F A) " +#define STRING_22699 "F/E [x x 3 2 1 0] (C E F A) " +#define STRING_22700 "F/Eb [x x 1 2 1 1] (C Eb F A) " +#define STRING_22701 "F/Eb [x x 3 5 4 5] (C Eb F A) " +#define STRING_22702 "F/G [3 x 3 2 1 1] (C F G A) " +#define STRING_22703 "F/G [x x 3 2 1 3] (C F G A) " +#define STRING_22704 "F5 or F(no 3rd) [1 3 3 x x 1] (C F)" +#define STRING_22705 "F5 or F(no 3rd) [x 8 10 x x 1] (C F)" +#define STRING_22706 "F6 [x 5 7 5 6 5] (C D F A) " +#define STRING_22707 "F6 [x x 0 2 1 1] (C D F A) " +#define STRING_22708 "F6 [x x 0 5 6 5] (C D F A) " +#define STRING_22709 "F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " +#define STRING_22710 "F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " +#define STRING_22711 "F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " +#define STRING_22712 "Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " +#define STRING_22713 "Fadd9 or F2 [x x 3 2 1 3] (C F G A) " +#define STRING_22714 "Faug/D [x x 0 2 2 1] (Db D F A) " +#define STRING_22715 "Faug/G [1 0 3 0 2 1] (Db F G A) " +#define STRING_22716 "Fdim/D [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22717 "Fdim/D [x x 0 1 0 1] (D F Ab B) " +#define STRING_22718 "Fdim/D [x x 3 4 3 4] (D F Ab B) " +#define STRING_22719 "Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " +#define STRING_22720 "Fdim7 [x 2 0 1 0 1] (D F Ab B) " +#define STRING_22721 "Fdim7 [x x 0 1 0 1] (D F Ab B) " +#define STRING_22722 "Fdim7 [x x 3 4 3 4] (D F Ab B) " +#define STRING_22723 "Fm [x 3 3 1 1 1] (C F Ab) " +#define STRING_22724 "Fm [x x 3 1 1 1] (C F Ab) " +#define STRING_22725 "Fm/D [x x 0 1 1 1] (C D F Ab) " +#define STRING_22726 "Fm/Db [x 3 3 1 2 1] (C Db F Ab) " +#define STRING_22727 "Fm/Db [x 4 6 5 6 4] (C Db F Ab) " +#define STRING_22728 "Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " +#define STRING_22729 "Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " +#define STRING_22730 "Fm6 [x x 0 1 1 1] (C D F Ab) " +#define STRING_22731 "Fm6 [1 x 0 1 1 1] (F D Ab C F) " +#define STRING_22732 "Fm7 [x 8 10 8 9 8] (C Eb F Ab) " +#define STRING_22733 "Fm7 [x x 1 1 1 1] (C Eb F Ab) " +#define STRING_22734 "Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " +#define STRING_22735 "Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " +#define STRING_22736 "Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " +#define STRING_22737 "Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " +#define STRING_22738 "Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " +#define STRING_22739 "Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " +#define STRING_22740 "Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " +#define STRING_22741 "Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " +#define STRING_22742 "Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " +#define STRING_22743 "Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " +#define STRING_22744 "Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " +#define STRING_22745 "Fsus2/A [3 x 3 2 1 1] (C F G A) " +#define STRING_22746 "Fsus2/A [x x 3 2 1 3] (C F G A) " +#define STRING_22747 "Fsus2/B [x 3 3 0 0 3] (C F G B) " +#define STRING_22748 "Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " +#define STRING_22749 "Fsus2/D [3 3 0 0 1 1] (C D F G) " +#define STRING_22750 "Fsus2/E [x 3 3 0 1 0] (C E F G) " +#define STRING_22751 "Fsus2/E [x x 3 0 1 0] (C E F G) " +#define STRING_22752 "Fsus4/G [x 3 5 3 6 3] (C F G Bb) " +#define STRING_22753 "G or Gmaj [x 10 12 12 12 10] (D G B)" +#define STRING_22754 "G or Gmaj [3 2 0 0 0 3] (D G B) " +#define STRING_22755 "G or Gmaj [3 2 0 0 3 3] (D G B) " +#define STRING_22756 "G or Gmaj [3 5 5 4 3 3] (D G B) " +#define STRING_22757 "G or Gmaj [3 x 0 0 0 3] (D G B) " +#define STRING_22758 "G or Gmaj [x 5 5 4 3 3] (D G B) " +#define STRING_22759 "G or Gmaj [x x 0 4 3 3] (D G B) " +#define STRING_22760 "G or Gmaj [x x 0 7 8 7] (D G B) " +#define STRING_22761 "G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " +#define STRING_22762 "G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " +#define STRING_22763 "G/A [3 0 0 0 0 3] (D G A B) " +#define STRING_22764 "G/A [3 2 0 2 0 3] (D G A B) " +#define STRING_22765 "G/C [3 3 0 0 0 3] (C D G B) " +#define STRING_22766 "G/C [x 3 0 0 0 3] (C D G B) " +#define STRING_22767 "G/E [0 2 0 0 0 0] (D E G B) " +#define STRING_22768 "G/E [0 2 0 0 3 0] (D E G B) " +#define STRING_22769 "G/E [0 2 2 0 3 0] (D E G B) " +#define STRING_22770 "G/E [0 2 2 0 3 3] (D E G B) " +#define STRING_22771 "G/E [x x 0 12 12 12] (D E G B) " +#define STRING_22772 "G/E [x x 0 9 8 7] (D E G B) " +#define STRING_22773 "G/E [x x 2 4 3 3] (D E G B) " +#define STRING_22774 "G/E [0 x 0 0 0 0] (D E G B) " +#define STRING_22775 "G/E [x 10 12 12 12 0] (D E G B) " +#define STRING_22776 "G/F [1 x 0 0 0 3] (D F G B) " +#define STRING_22777 "G/F [3 2 0 0 0 1] (D F G B) " +#define STRING_22778 "G/F [x x 0 0 0 1] (D F G B) " +#define STRING_22779 "G/Gb [2 2 0 0 0 3] (D Gb G B) " +#define STRING_22780 "G/Gb [2 2 0 0 3 3] (D Gb G B) " +#define STRING_22781 "G/Gb [3 2 0 0 0 2] (D Gb G B) " +#define STRING_22782 "G/Gb [x x 4 4 3 3] (D Gb G B) " +#define STRING_22783 "G5 or G(no 3rd) [3 5 5 x x 3] (D G)" +#define STRING_22784 "G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " +#define STRING_22785 "G6 [0 2 0 0 0 0] (D E G B) " +#define STRING_22786 "G6 [0 2 0 0 3 0] (D E G B) " +#define STRING_22787 "G6 [0 2 2 0 3 0] (D E G B) " +#define STRING_22788 "G6 [0 2 2 0 3 3] (D E G B) " +#define STRING_22789 "G6 [x x 0 12 12 12] (D E G B) " +#define STRING_22790 "G6 [x x 0 9 8 7] (D E G B) " +#define STRING_22791 "G6 [x x 2 4 3 3] (D E G B) " +#define STRING_22792 "G6 [0 x 0 0 0 0] (D E G B) " +#define STRING_22793 "G6 [x 10 12 12 12 0] (D E G B) " +#define STRING_22794 "G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " +#define STRING_22795 "G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " +#define STRING_22796 "G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " +#define STRING_22797 "G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " +#define STRING_22798 "G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " +#define STRING_22799 "G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " +#define STRING_22800 "G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " +#define STRING_22801 "G7sus4 [3 3 0 0 1 1] (C D F G) " +#define STRING_22802 "G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " +#define STRING_22803 "G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " +#define STRING_22804 "Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " +#define STRING_22805 "Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " +#define STRING_22806 "Gaug/E [3 x 1 0 0 0] (Eb E G B) " +#define STRING_22807 "Gaug/E [x x 1 0 0 0] (Eb E G B) " +#define STRING_22808 "Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " +#define STRING_22809 "Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " +#define STRING_22810 "Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " +#define STRING_22811 "Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " +#define STRING_22812 "Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " +#define STRING_22813 "Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " +#define STRING_22814 "Gb/E [x x 4 3 2 0] (Db E Gb Bb) " +#define STRING_22815 "Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " +#define STRING_22816 "Gb/F [x x 3 3 2 2] (Db F Gb Bb) " +#define STRING_22817 "Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " +#define STRING_22818 "Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " +#define STRING_22819 "Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " +#define STRING_22820 "Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " +#define STRING_22821 "Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " +#define STRING_22822 "Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " +#define STRING_22823 "Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " +#define STRING_22824 "Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " +#define STRING_22825 "Gbdim/D [x 5 7 5 7 2] (C D Gb A)" +#define STRING_22826 "Gbdim/D [x 0 0 2 1 2] (C D Gb A) " +#define STRING_22827 "Gbdim/D [x 3 x 2 3 2] (C D Gb A) " +#define STRING_22828 "Gbdim/D [x 5 7 5 7 5] (C D Gb A) " +#define STRING_22829 "Gbdim/E [x 0 2 2 1 2] (C E Gb A) " +#define STRING_22830 "Gbdim/E [x x 2 2 1 2] (C E Gb A) " +#define STRING_22831 "Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22832 "Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " +#define STRING_22833 "Gbm [2 4 4 2 2 2] (Db Gb A) " +#define STRING_22834 "Gbm [x 4 4 2 2 2] (Db Gb A) " +#define STRING_22835 "Gbm [x x 4 2 2 2] (Db Gb A) " +#define STRING_22836 "Gbm/D [x x 0 14 14 14] (Db D Gb A) " +#define STRING_22837 "Gbm/D [x x 0 2 2 2] (Db D Gb A) " +#define STRING_22838 "Gbm/E [0 0 2 2 2 2] (Db E Gb A) " +#define STRING_22839 "Gbm/E [0 x 4 2 2 0] (Db E Gb A) " +#define STRING_22840 "Gbm/E [2 x 2 2 2 0] (Db E Gb A) " +#define STRING_22841 "Gbm/E [x 0 4 2 2 0] (Db E Gb A) " +#define STRING_22842 "Gbm/E [x x 2 2 2 2] (Db E Gb A) " +#define STRING_22843 "Gbm7 [0 0 2 2 2 2] (Db E Gb A) " +#define STRING_22844 "Gbm7 [0 x 4 2 2 0] (Db E Gb A) " +#define STRING_22845 "Gbm7 [2 x 2 2 2 0] (Db E Gb A) " +#define STRING_22846 "Gbm7 [x 0 4 2 2 0] (Db E Gb A) " +#define STRING_22847 "Gbm7 [x x 2 2 2 2] (Db E Gb A) " +#define STRING_22848 "Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " +#define STRING_22849 "Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " +#define STRING_22850 "Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " +#define STRING_22851 "Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " +#define STRING_22852 "Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " +#define STRING_22853 "Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " +#define STRING_22854 "Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " +#define STRING_22855 "Gdim/E [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22856 "Gdim/E [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22857 "Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " +#define STRING_22858 "Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " +#define STRING_22859 "Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " +#define STRING_22860 "Gdim7 [x 1 2 0 2 0] (Db E G Bb) " +#define STRING_22861 "Gdim7 [x x 2 3 2 3] (Db E G Bb) " +#define STRING_22862 "Gm [3 5 5 3 3 3] (D G Bb) " +#define STRING_22863 "Gm [x x 0 3 3 3] (D G Bb) " +#define STRING_22864 "Gm/E [3 x 0 3 3 0] (D E G Bb) " +#define STRING_22865 "Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " +#define STRING_22866 "Gm/F [3 5 3 3 3 3] (D F G Bb) " +#define STRING_22867 "Gm/F [x x 3 3 3 3] (D F G Bb) " +#define STRING_22868 "Gm13 [0 0 3 3 3 3] (D E F G A Bb) " +#define STRING_22869 "Gm6 [3 x 0 3 3 0] (D E G Bb) " +#define STRING_22870 "Gm6 [3 x 2 3 3 3] (G E Bb D G) " +#define STRING_22871 "Gm7 [3 5 3 3 3 3] (D F G Bb) " +#define STRING_22872 "Gm7 [x x 3 3 3 3] (D F G Bb) " +#define STRING_22873 "Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " +#define STRING_22874 "Gm9 [3 5 3 3 3 5] (D F G A Bb) " +#define STRING_22875 "Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " +#define STRING_22876 "Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " +#define STRING_22877 "Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " +#define STRING_22878 "Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " +#define STRING_22879 "Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" +#define STRING_22880 "Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " +#define STRING_22881 "Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " +#define STRING_22882 "Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " +#define STRING_22883 "Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" +#define STRING_22884 "Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " +#define STRING_22885 "Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " +#define STRING_22886 "Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " +#define STRING_22887 "Gsus2/B [3 0 0 0 0 3] (D G A B) " +#define STRING_22888 "Gsus2/B [3 2 0 2 0 3] (D G A B) " +#define STRING_22889 "Gsus2/C [x 5 7 5 8 3] (C D G A)" +#define STRING_22890 "Gsus2/C [x x 0 2 1 3] (C D G A) " +#define STRING_22891 "Gsus2/E [x 0 2 0 3 0] (D E G A) " +#define STRING_22892 "Gsus2/E [x 0 2 0 3 3] (D E G A) " +#define STRING_22893 "Gsus2/E [x 0 2 2 3 3] (D E G A) " +#define STRING_22894 "Gsus2/E [5 0 0 0 3 0] (D E G A) " +#define STRING_22895 "Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" +#define STRING_22896 "Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " +#define STRING_22897 "Gsus4/A [x 5 7 5 8 3] (C D G A)" +#define STRING_22898 "Gsus4/A [x x 0 2 1 3] (C D G A) " +#define STRING_22899 "Gsus4/B [3 3 0 0 0 3] (C D G B) " +#define STRING_22900 "Gsus4/B [x 3 0 0 0 3] (C D G B) " +#define STRING_22901 "Gsus4/E [3 x 0 0 1 0] (C D E G) " +#define STRING_22902 "Gsus4/E [x 3 0 0 1 0] (C D E G) " +#define STRING_22903 "Gsus4/E [x 3 2 0 3 0] (C D E G) " +#define STRING_22904 "Gsus4/E [x 3 2 0 3 3] (C D E G) " +#define STRING_22905 "Gsus4/E [x x 0 0 1 0] (C D E G) " +#define STRING_22906 "Gsus4/E [x x 0 5 5 3] (C D E G) " +#define STRING_22907 "Gsus4/E [x 10 12 12 13 0] (C D E G) " +#define STRING_22908 "Gsus4/E [x 5 5 5 x 0] (C D E G) " +#define STRING_22909 "Gsus4/F [3 3 0 0 1 1] (C D F G) " diff --git a/proto/Debug/strings.txt b/proto/Debug/strings.txt new file mode 100644 index 0000000..1227c8e --- /dev/null +++ b/proto/Debug/strings.txt @@ -0,0 +1,1137 @@ + + +"A or Amaj [0 0 2 2 2 0] (Db E A) " +"A or Amaj [0 4 x 2 5 0] (Db E A) " +"A or Amaj [5 7 7 6 5 5] (Db E A) " +"A or Amaj [x 0 2 2 2 0] (Db E A) " +"A or Amaj [x 4 7 x x 5] (Db E A) " +"A #5 or Aaug [x 0 3 2 2 1] (Db F A) " +"A #5 or Aaug [x 0 x 2 2 1] (Db F A) " +"A/Ab [x 0 2 1 2 0] (Db E Ab A) " + + + + +"A/B [0 0 2 4 2 0] (Db E A B) " +"A/B [x 0 7 6 0 0] (Db E A B) " +"A/D [x 0 0 2 2 0] (Db D E A) " +"A/D [x x 0 2 2 0] (Db D E A) " +"A/D [x x 0 6 5 5] (Db D E A) " +"A/D [x x 0 9 10 9] (Db D E A) " +"A/G [3 x 2 2 2 0] (Db E G A) " +"A/G [x 0 2 0 2 0] (Db E G A) " +"A/G [x 0 2 2 2 3] (Db E G A) " +"A/Gb [0 0 2 2 2 2] (Db E Gb A) " +"A/Gb [0 x 4 2 2 0] (Db E Gb A) " +"A/Gb [2 x 2 2 2 0] (Db E Gb A) " +"A/Gb [x 0 4 2 2 0] (Db E Gb A) " +"A/Gb [x x 2 2 2 2] (Db E Gb A) " +"A5 or A(no 3rd) [5 7 7 x x 5] (E A)" +"A5 or A(no 3rd) [x 0 2 2 x 0] (E A) " + + + + +"A5 or A(no 3rd) [5 7 7 x x 0] (E A) " +"A6 [0 0 2 2 2 2] (Db E Gb A) " +"A6 [0 x 4 2 2 0] (Db E Gb A) " +"A6 [2 x 2 2 2 0] (Db E Gb A) " +"A6 [x 0 4 2 2 0] (Db E Gb A) " +"A6 [x x 2 2 2 2] (Db E Gb A) " +"A6/7 [0 0 2 0 2 2] (Db E Gb G A) " +"A6/7 sus or A6/7 sus4 [5 5 4 0 3 0] (D E Gb G A) " +"A6/7 sus or A6/7 sus4 [x 0 2 0 3 2] (D E Gb G A) " +"A7 or Adom 7 [3 x 2 2 2 0] (Db E G A) " +"A7 or Adom 7 [x 0 2 0 2 0] (Db E G A) " +"A7 or Adom 7 [x 0 2 2 2 3] (Db E G A) " +"A7(#5) [1 0 3 0 2 1] (Db F G A) " +"A7/add11 or A7/11 [x 0 0 0 2 0] (Db D E G A) " +"A7sus4 [x 0 2 0 3 0] (D E G A) " +"A7sus4 [x 0 2 0 3 3] (D E G A) " + + + + +"A7sus4 [x 0 2 2 3 3] (D E G A) " +"A7sus4 [5 x 0 0 3 0] (D E G A) " +"A7sus4 [x 0 0 0 x 0] (D E G A) " +"Aadd9 or A2 [0 0 2 4 2 0] (Db E A B) " +"Aadd9 or A2 [x 0 7 6 0 0] (Db E A B) " +"Aaug/D [x x 0 2 2 1] (Db D F A) " +"Aaug/G [1 0 3 0 2 1] (Db F G A) " +"Ab or Abmaj [4 6 6 5 4 4] (C Eb Ab) " +"Ab #5 or Abaug [x 3 2 1 1 0] (C E Ab) " +"Ab/A [x x 1 2 1 4] (C Eb Ab A) " +"Ab/F [x 8 10 8 9 8] (C Eb F Ab) " +"Ab/F [x x 1 1 1 1] (C Eb F Ab) " +"Ab/Gb [x x 1 1 1 2] (C Eb Gb Ab) " +"Ab/Gb [x x 4 5 4 4] (C Eb Gb Ab) " +"Ab5 or Ab(no 3rd)[4 6 6 x x 4] (Eb Ab)" +"Ab6 [x 8 10 8 9 8] (C Eb F Ab) " + + + + +"Ab6 [x x 1 1 1 1] (C Eb F Ab) " +"Ab7 or Abdom 7 [x x 1 1 1 2] (C Eb Gb Ab) " +"Ab7 or Abdom 7 [x x 4 5 4 4] (C Eb Gb Ab) " +"Abdim/E [0 2 0 1 0 0] (D E Ab B) " +"Abdim/E [0 2 2 1 3 0] (D E Ab B) " +"Abdim/E [x 2 0 1 3 0] (D E Ab B) " +"Abdim/E [x x 0 1 0 0] (D E Ab B) " +"Abdim/Eb [x x 0 4 4 4] (D Eb Ab B) " +"Abdim/F [x 2 0 1 0 1] (D F Ab B) " +"Abdim/F [x x 0 1 0 1] (D F Ab B) " +"Abdim/F [x x 3 4 3 4] (D F Ab B) " +"Abdim7 [x 2 0 1 0 1] (D F Ab B) " +"Abdim7 [x x 0 1 0 1] (D F Ab B) " +"Abdim7 [x x 3 4 3 4] (D F Ab B) " +"Abm [x x 6 4 4 4] (Eb Ab B) " +"Abm/D [x x 0 4 4 4] (D Eb Ab B) " + + + + +"Abm/E [0 2 1 1 0 0] (Eb E Ab B) " +"Abm/E [0 x 6 4 4 0] (Eb E Ab B) " +"Abm/E [x x 1 1 0 0] (Eb E Ab B) " +"Abm/Gb [x x 4 4 4 4] (Eb Gb Ab B) " +"Abm7 [x x 4 4 4 4] (Eb Gb Ab B) " +"Absus or Absus4 [x x 6 6 4 4] (Db Eb Ab) " +"Absus2/F [x 1 3 1 4 1] (Eb F Ab Bb) " +"Adim/Ab [x x 1 2 1 4] (C Eb Ab A) " +"Adim/E [0 3 x 2 4 0] (C Eb E A) " +"Adim/F [x x 1 2 1 1] (C Eb F A) " +"Adim/F [x x 3 5 4 5] (C Eb F A) " +"Adim/G [x x 1 2 1 3] (C Eb G A) " +"Adim/Gb [x x 1 2 1 2] (C Eb Gb A) " +"Adim7 [x x 1 2 1 2] (C Eb Gb A) " +"Am [x 0 2 2 1 0] (C E A) " +"Am [x 0 7 5 5 5] (C E A) " + + + + +"Am [x 3 2 2 1 0] (C E A) " +"Am [8 12 x x x 0] (C E A) " +"Am/B [0 0 7 5 0 0] (C E A B) " +"Am/B [x 3 2 2 0 0] (C E A B) " +"Am/D [x x 0 2 1 0] (C D E A) " +"Am/D [x x 0 5 5 5] (C D E A) " +"Am/Eb [0 3 x 2 4 0] (C Eb E A) " +"Am/F [0 0 3 2 1 0] (C E F A) " +"Am/F [1 3 3 2 1 0] (C E F A) " +"Am/F [1 x 2 2 1 0] (C E F A) " +"Am/F [x x 2 2 1 1] (C E F A) " +"Am/F [x x 3 2 1 0] (C E F A) " +"Am/G [0 0 2 0 1 3] (C E G A) " +"Am/G [x 0 2 0 1 0] (C E G A) " +"Am/G [x 0 2 2 1 3] (C E G A) " +"Am/G [x 0 5 5 5 8] (C E G A) " + + + + +"Am/Gb [x 0 2 2 1 2] (C E Gb A) " +"Am/Gb [x x 2 2 1 2] (C E Gb A) " +"Am6 [x 0 2 2 1 2] (C E Gb A) " +"Am6 [x x 2 2 1 2] (C E Gb A) " +"Am6 [5 x 4 5 5 5] (A Gb C E A)" +"Am7 [0 0 2 0 1 3] (C E G A) " +"Am7 [x 0 2 0 1 0] (C E G A) " +"Am7 [x 0 2 2 1 3] (C E G A) " +"Am7 [x 0 5 5 5 8] (C E G A) " +"Am7(b5) or Ao7 [x x 1 2 1 3] (C Eb G A) " +"Am7/add11 or Am7/11 [x 5 7 5 8 0] (C D E G A) " +"Amaj7 or A#7 [x 0 2 1 2 0] (Db E Ab A) " +"Amin/maj9 [x 0 6 5 5 7] (C E Ab A B) " +"Asus or Asus4 [0 0 2 2 3 0] (D E A) " +"Asus or Asus4 [x 0 2 2 3 0] (D E A) " +"Asus or Asus4 [5 5 7 7 x 0] (D E A) " +"Asus or Asus4 [x 0 0 2 3 0] (D E A) " + + + + +"Asus2 or Aadd9(no3)[0 0 2 2 0 0] (E A B) " +"Asus2 or Aadd9(no3)[0 0 2 4 0 0] (E A B) " +"Asus2 or Aadd9(no3)[0 2 2 2 0 0] (E A B) " +"Asus2 or Aadd9(no3)[x 0 2 2 0 0] (E A B) " +"Asus2 or Aadd9(no3)[x x 2 2 0 0] (E A B) " +"Asus2/Ab [x 0 2 1 0 0] (E Ab A B) " +"Asus2/C [0 0 7 5 0 0] (C E A B) " +"Asus2/C [x 3 2 2 0 0] (C E A B) " +"Asus2/D [0 2 0 2 0 0] (D E A B) " +"Asus2/D [x 2 0 2 3 0] (D E A B) " +"Asus2/Db [0 0 2 4 2 0] (Db E A B) " +"Asus2/Db [x 0 7 6 0 0] (Db E A B) " +"Asus2/Eb [x 2 1 2 0 0] (Eb E A B) " +"Asus2/F [0 0 3 2 0 0] (E F A B) " +"Asus2/G [3 x 2 2 0 0] (E G A B) " +"Asus2/G [x 0 2 0 0 0] (E G A B) " + + + + +"Asus2/G [x 0 5 4 5 0] (E G A B) " +"Asus2/Gb [x 0 4 4 0 0] (E Gb A B) " +"Asus2/Gb [x 2 4 2 5 2] (E Gb A B) " +"Asus4/Ab [4 x 0 2 3 0] (D E Ab A) " +"Asus4/B [0 2 0 2 0 0] (D E A B) " +"Asus4/Bb [0 1 x 2 3 0] (D E A Bb) " +"Asus4/C [x x 0 2 1 0] (C D E A) " +"Asus4/C [x x 0 5 5 5] (C D E A) " +"Asus4/Db [x 0 0 2 2 0] (Db D E A) " +"Asus4/Db [x x 0 2 2 0] (Db D E A) " +"Asus4/Db [x x 0 6 5 5] (Db D E A) " +"Asus4/Db [x x 0 9 10 9] (Db D E A) " +"Asus4/F [x x 7 7 6 0] (D E F A) " +"Asus4/G [x 0 2 0 3 0] (D E G A) " +"Asus4/G [x 0 2 0 3 3] (D E G A) " +"Asus4/G [x 0 2 2 3 3] (D E G A) " + + + + +"Asus4/G [x 0 0 0 x 0] (D E G A) " +"Asus4/Gb [0 0 0 2 3 2] (D E Gb A) " +"Asus4/Gb [0 0 4 2 3 0] (D E Gb A) " +"Asus4/Gb [2 x 0 2 3 0] (D E Gb A) " +"Asus4/Gb [x 0 2 2 3 2] (D E Gb A) " +"Asus4/Gb [x x 2 2 3 2] (D E Gb A) " +"Asus4/Gb [x 5 4 2 3 0] (D E Gb A) " +"Asus4/Gb [x 9 7 7 x 0] (D E Gb A) " +"B or Bmaj [x 2 4 4 4 2] (Eb Gb B) " +"B #5 or Baug [3 2 1 0 0 3] (Eb G B) " +"B #5 or Baug [3 x 1 0 0 3] (Eb G B) " +"B/A [2 x 1 2 0 2] (Eb Gb A B) " +"B/A [x 0 1 2 0 2] (Eb Gb A B) " +"B/A [x 2 1 2 0 2] (Eb Gb A B) " +"B/A [x 2 4 2 4 2] (Eb Gb A B) " +"B/Ab [x x 4 4 4 4] (Eb Gb Ab B) " + + + + +"B/E [x 2 2 4 4 2] (Eb E Gb B) " +"B/E [x x 4 4 4 0] (Eb E Gb B) " +"B5 or B(no 3rd) [7 9 9 x x 2] (Gb B)" +"B5 or B(no 3rd) [x 2 4 4 x 2] (Gb B)" +"B6 [x x 4 4 4 4] (Eb Gb Ab B) " +"B7 or Bdom 7 [2 x 1 2 0 2] (Eb Gb A B) " +"B7 or Bdom 7 [x 0 1 2 0 2] (Eb Gb A B) " +"B7 or Bdom 7 [x 2 1 2 0 2] (Eb Gb A B) " +"B7 or Bdom 7 [x 2 4 2 4 2] (Eb Gb A B) " +"B7/add11 or B7/11 [0 0 4 4 4 0] (Eb E Gb A B) " +"B7/add11 or B7/11 [0 2 1 2 0 2] (Eb E Gb A B) " +"B7sus4 [x 0 4 4 0 0] (E Gb A B) " +"B7sus4 [x 2 4 2 5 2] (E Gb A B) " +"Baug/E [3 x 1 0 0 0] (Eb E G B) " +"Baug/E [x x 1 0 0 0] (Eb E G B) " +"Bb or Bbmaj [1 1 3 3 3 1] (D F Bb) " + + + + +"Bb or Bbmaj [x 1 3 3 3 1] (D F Bb) " +"Bb or Bbmaj [x x 0 3 3 1] (D F Bb) " +"Bb #5 or Bbaug [x x 0 3 3 2] (D Gb Bb) " +"Bb b5 [x x 0 3 x 0] (D E Bb) " +"Bb/A [1 1 3 2 3 1] (D F A Bb) " +"Bb/Ab [x 1 3 1 3 1] (D F Ab Bb) " +"Bb/Ab [x x 3 3 3 4] (D F Ab Bb) " +"Bb/Db [x x 0 6 6 6] (Db D F Bb) " +"Bb/E [x 1 3 3 3 0] (D E F Bb) " +"Bb/G [3 5 3 3 3 3] (D F G Bb) " +"Bb/G [x x 3 3 3 3] (D F G Bb) " +"Bb5 or Bb(no 3rd)[6 8 8 x x 6] (F Bb)" +"Bb5 or Bb(no 3rd)[x 1 3 3 x 6] (F Bb)" +"Bb6 [3 5 3 3 3 3] (D F G Bb) " +"Bb6 [x x 3 3 3 3] (D F G Bb) " +"Bb6/add9 or Bb6/9 [x 3 3 3 3 3] (C D F G Bb) " + + + + +"Bb7 or Bbdom 7 [x 1 3 1 3 1] (D F Ab Bb) " +"Bb7 or Bbdom 7 [x x 3 3 3 4] (D F Ab Bb) " +"Bb7sus4 [x 1 3 1 4 1] (Eb F Ab Bb) " +"Bbadd#11 [x 1 3 3 3 0] (D E F Bb) " +"Bbaug/E [2 x 4 3 3 0] (D E Gb Bb) " +"Bbdim/C [x 3 x 3 2 0] (C Db E Bb) " +"Bbdim/D [x x 0 3 2 0] (Db D E Bb) " +"Bbdim/G [x 1 2 0 2 0] (Db E G Bb) " +"Bbdim/G [x x 2 3 2 3] (Db E G Bb) " +"Bbdim/Gb [2 4 2 3 2 2] (Db E Gb Bb) " +"Bbdim/Gb [x x 4 3 2 0] (Db E Gb Bb) " +"Bbdim7 [x 1 2 0 2 0] (Db E G Bb) " +"Bbdim7 [x x 2 3 2 3] (Db E G Bb) " +"Bbm [1 1 3 3 2 1] (Db F Bb) " +"Bbm/Ab [x 1 3 1 2 1] (Db F Ab Bb) " +"Bbm/D [x x 0 6 6 6] (Db D F Bb) " + + + + +"Bbm/Gb [x x 3 3 2 2] (Db F Gb Bb) " +"Bbm7 [x 1 3 1 2 1] (Db F Ab Bb) " +"Bbm6 [7 x 6 7 7 7 (B Ab D Gb B) " +"Bbmaj7 or Bb#7 [1 1 3 2 3 1] (D F A Bb) " +"Bbmaj9 or Bb9(#7) [x 3 3 3 3 5] (C D F A Bb) " +"Bbsus2 or Bbadd9(no3)[x x 3 3 1 1] (C F Bb) " +"Bbsus2/G [x 3 5 3 6 3] (C F G Bb) " +"Bbsus4/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " +"Bdim/A [1 2 3 2 3 1] (D F A B) " +"Bdim/A [x 2 0 2 0 1] (D F A B) " +"Bdim/A [x x 0 2 0 1] (D F A B) " +"Bdim/Ab [x 2 0 1 0 1] (D F Ab B) " +"Bdim/Ab [x x 0 1 0 1] (D F Ab B) " +"Bdim/Ab [x x 3 4 3 4] (D F Ab B) " +"Bdim/G [1 x 0 0 0 3] (D F G B) " +"Bdim/G [3 2 0 0 0 1] (D F G B) " +"Bdim/G [x x 0 0 0 1] (D F G B) " + + + + +"Bdim7 [x 2 0 1 0 1] (D F Ab B) " +"Bdim7 [x x 0 1 0 1] (D F Ab B) " +"Bdim7 [x x 3 4 3 4] (D F Ab B) " +"Bm [2 2 4 4 3 2] (D Gb B) " +"Bm [x 2 4 4 3 2] (D Gb B) " +"Bm [x x 0 4 3 2] (D Gb B) " +"Bm/A [x 0 4 4 3 2] (D Gb A B) " +"Bm/A [x 2 0 2 0 2] (D Gb A B) " +"Bm/A [x 2 0 2 3 2] (D Gb A B) " +"Bm/A [x 2 4 2 3 2] (D Gb A B) " +"Bm/A [x x 0 2 0 2] (D Gb A B) " +"Bm/G [2 2 0 0 0 3] (D Gb G B) " +"Bm/G [2 2 0 0 3 3] (D Gb G B) " +"Bm/G [3 2 0 0 0 2] (D Gb G B) " +"Bm/G [x x 4 4 3 3] (D Gb G B) " +"Bm7 [x 0 4 4 3 2] (D Gb A B) " + + + + +"Bm7 [x 2 0 2 0 2] (D Gb A B) " +"Bm7 [x 2 0 2 3 2] (D Gb A B) " +"Bm7 [x 2 4 2 3 2] (D Gb A B) " +"Bm7 [x x 0 2 0 2] (D Gb A B) " +"Bm7(b5) or Bo7 [1 2 3 2 3 1] (D F A B) " +"Bm7(b5) or Bo7 [x 2 0 2 0 1] (D F A B) " +"Bm7(b5) or Bo7 [x x 0 2 0 1] (D F A B) " +"Bm7/add11 or Bm7/11 [0 0 2 4 3 2] (D E Gb A B) " +"Bm7/add11 or Bm7/11 [0 2 0 2 0 2] (D E Gb A B) " +"Bmaj7/#11 [x 2 3 3 4 2] (Eb F Gb Bb B) " +"Bsus or Bsus4 [7 9 9 x x 0] (E Gb B) " +"Bsus or Bsus4 [x 2 4 4 x 0] (E Gb B) " +"Bsus2 or Badd9(no3)[x 4 4 4 x 2] (Db Gb B)" +"Bsus2 or Badd9(no3)[x x 4 4 2 2] (Db Gb B) " +"Bsus2/E [x 4 4 4 x 0] (Db E Gb B) " +"Bsus4/A [x 0 4 4 0 0] (E Gb A B) " + + + + +"Bsus4/A [x 2 4 2 5 2] (E Gb A B) " +"Bsus4/Ab [0 2 2 1 0 2] (E Gb Ab B) " +"Bsus4/Ab [0 x 4 1 0 0] (E Gb Ab B) " +"Bsus4/Ab [2 2 2 1 0 0] (E Gb Ab B) " +"Bsus4/Db [x 4 4 4 x 0] (Db E Gb B) " +"Bsus4/Eb [x 2 2 4 4 2] (Eb E Gb B) " +"Bsus4/Eb [x x 4 4 4 0] (Eb E Gb B) " +"Bsus4/G [0 2 2 0 0 2] (E Gb G B) " +"Bsus4/G [0 2 4 0 0 0] (E Gb G B) " +"Bsus4/G [0 x 4 0 0 0] (E Gb G B) " +"Bsus4/G [2 2 2 0 0 0] (E Gb G B) " +"C or Cmaj [0 3 2 0 1 0] (C E G) " +"C or Cmaj [0 3 5 5 5 3] (C E G) " +"C or Cmaj [3 3 2 0 1 0] (C E G) " +"C or Cmaj [3 x 2 0 1 0] (C E G) " +"C or Cmaj [x 3 2 0 1 0] (C E G) " + + + + +"C or Cmaj [x 3 5 5 5 0] (C E G) " +"C #5 or Caug [x 3 2 1 1 0] (C E Ab) " +"C b5 [x x 4 5 x 0] (C E Gb) " +"C/A [0 0 2 0 1 3] (C E G A) " +"C/A [x 0 2 0 1 0] (C E G A) " +"C/A [x 0 2 2 1 3] (C E G A) " +"C/A [x 0 5 5 5 8] (C E G A) " +"C/B [0 3 2 0 0 0] (C E G B) " +"C/B [x 2 2 0 1 0] (C E G B) " +"C/B [x 3 5 4 5 3] (C E G B) " +"C/Bb [x 3 5 3 5 3] (C E G Bb) " +"C/D [3 x 0 0 1 0] (C D E G) " +"C/D [x 3 0 0 1 0] (C D E G) " +"C/D [x 3 2 0 3 0] (C D E G) " +"C/D [x 3 2 0 3 3] (C D E G) " +"C/D [x x 0 0 1 0] (C D E G) " + + + + +"C/D [x x 0 5 5 3] (C D E G) " +"C/D [x 10 12 12 13 0] (C D E G) " +"C/D [x 5 5 5 x 0] (C D E G) " +"C/F [x 3 3 0 1 0] (C E F G) " +"C/F [x x 3 0 1 0] (C E F G) " +"C5 or C(no 3rd) [x 3 5 5 x 3] (C G)" +"C6 [0 0 2 0 1 3] (C E G A) " +"C6 [x 0 2 0 1 0] (C E G A) " +"C6 [x 0 2 2 1 3] (C E G A) " +"C6 [x 0 5 5 5 8] (C E G A) " +"C6/add9 or C6/9 [x 5 7 5 8 0] (C D E G A) " +"C7 or Cdom 7 [x 3 5 3 5 3] (C E G Bb) " +"C7sus4 [x 3 5 3 6 3] (C F G Bb) " +"C9(b5) [0 3 x 3 3 2] (C D E Gb Bb) " +"Cadd9 or C2 [3 x 0 0 1 0] (C D E G) " +"Cadd9 or C2 [x 3 0 0 1 0] (C D E G) " + + + + +"Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " +"Cadd9 or C2 [x 3 2 0 3 3] (C D E G) " +"Cadd9 or C2 [x x 0 0 1 0] (C D E G) " +"Cadd9 or C2 [x x 0 5 5 3] (C D E G) " +"Cadd9 or C2 [x 10 12 12 13 0] (C D E G) " +"Cadd9 or C2 [x 3 2 0 3 0] (C D E G) " +"Cadd9 or C2 [x 5 5 5 x 0] (C D E G) " +"Cdim/A [x x 1 2 1 2] (C Eb Gb A) " +"Cdim/Ab [x x 1 1 1 2] (C Eb Gb Ab) " +"Cdim/Ab [x x 4 5 4 4] (C Eb Gb Ab) " +"Cdim/D [x 5 4 5 4 2] (C D Eb Gb)" +"Cdim7 [x x 1 2 1 2] (C Eb Gb A) " +"Cm [x 3 5 5 4 3] (C Eb G) " +"Cm [x x 5 5 4 3] (C Eb G) " +"Cm/A [x x 1 2 1 3] (C Eb G A) " +"Cm/Bb [x 3 5 3 4 3] (C Eb G Bb) " + + + + +"Cm6 [x x 1 2 1 3] (C Eb G A) " +"Cm6 [8 x 7 8 8 8] (C A Eb G C) " +"Cm7 [x 3 5 3 4 3] (C Eb G Bb) " +"Cmaj7 or C#7 [0 3 2 0 0 0] (C E G B) " +"Cmaj7 or C#7 [x 2 2 0 1 0] (C E G B) " +"Cmaj7 or C#7 [x 3 5 4 5 3] (C E G B) " +"Cmaj9 or C9(#7) [x 3 0 0 0 0] (C D E G B) " +"Csus or Csus4 [x 3 3 0 1 1] (C F G) " +"Csus or Csus4 [x x 3 0 1 1] (C F G) " +"Csus2 or Cadd9(no3)[x 10 12 12 13 3] (C D G)" +"Csus2 or Cadd9(no3)[x 5 5 5 x 3] (C D G)" +"Csus2 or Cadd9(no3)[x 3 0 0 3 3] (C D G) " +"Csus2 or Cadd9(no3)[x 3 5 5 3 3] (C D G) " +"Csus2/A [x 5 7 5 8 3] (C D G A)" +"Csus2/A [x x 0 2 1 3] (C D G A) " +"Csus2/B [3 3 0 0 0 3] (C D G B) " +"Csus2/B [x 3 0 0 0 3] (C D G B) " + + + + +"Csus2/E [3 x 0 0 1 0] (C D E G) " +"Csus2/E [x 3 0 0 1 0] (C D E G) " +"Csus2/E [x 3 2 0 3 0] (C D E G) " +"Csus2/E [x 3 2 0 3 3] (C D E G) " +"Csus2/E [x x 0 0 1 0] (C D E G) " +"Csus2/E [x x 0 5 5 3] (C D E G) " +"Csus2/E [x 10 12 12 13 0] (C D E G) " +"Csus2/E [x 5 5 5 x 0] (C D E G) " +"Csus2/F [3 3 0 0 1 1] (C D F G) " +"Csus4/A [3 x 3 2 1 1] (C F G A) " +"Csus4/A [x x 3 2 1 3] (C F G A) " +"Csus4/B [x 3 3 0 0 3] (C F G B) " +"Csus4/Bb [x 3 5 3 6 3] (C F G Bb) " +"Csus4/D [3 3 0 0 1 1] (C D F G) " +"Csus4/E [x 3 3 0 1 0] (C E F G) " +"Csus4/E [x x 3 0 1 0] (C E F G) " + + + + +"D or Dmaj [x 5 4 2 3 2] (D Gb A)" +"D or Dmaj [x 9 7 7 x 2] (D Gb A)" +"D or Dmaj [2 0 0 2 3 2] (D Gb A) " +"D or Dmaj [x 0 0 2 3 2] (D Gb A) " +"D or Dmaj [x 0 4 2 3 2] (D Gb A) " +"D or Dmaj [x x 0 2 3 2] (D Gb A) " +"D or Dmaj [x x 0 7 7 5] (D Gb A) " +"D #5 or Daug [x x 0 3 3 2] (D Gb Bb) " +"D/B [x 0 4 4 3 2] (D Gb A B) " +"D/B [x 2 0 2 0 2] (D Gb A B) " +"D/B [x 2 0 2 3 2] (D Gb A B) " +"D/B [x 2 4 2 3 2] (D Gb A B) " +"D/B [x x 0 2 0 2] (D Gb A B) " +"D/C [x 5 7 5 7 2] (C D Gb A)" +"D/C [x 0 0 2 1 2] (C D Gb A) " +"D/C [x 3 x 2 3 2] (C D Gb A) " + + + + +"D/C [x 5 7 5 7 5] (C D Gb A) " +"D/Db [x x 0 14 14 14] (Db D Gb A) " +"D/Db [x x 0 2 2 2] (Db D Gb A) " +"D/E [0 0 0 2 3 2] (D E Gb A) " +"D/E [0 0 4 2 3 0] (D E Gb A) " +"D/E [2 x 0 2 3 0] (D E Gb A) " +"D/E [x 0 2 2 3 2] (D E Gb A) " +"D/E [x x 2 2 3 2] (D E Gb A) " +"D/E [x 5 4 2 3 0] (D E Gb A) " +"D/E [x 9 7 7 x 0] (D E Gb A) " +"D/G [5 x 4 0 3 5] (D Gb G A)" +"D/G [3 x 0 2 3 2] (D Gb G A) " +"D5 or D(no 3rd) [5 5 7 7 x 5] (D A)" +"D5 or D(no 3rd) [x 0 0 2 3 5] (D A)" +"D6 [x 0 4 4 3 2] (D Gb A B) " +"D6 [x 2 0 2 0 2] (D Gb A B) " + + + + +"D6 [x 2 0 2 3 2] (D Gb A B) " +"D6 [x 2 4 2 3 2] (D Gb A B) " +"D6 [x x 0 2 0 2] (D Gb A B) " +"D6/add9 or D6/9 [0 0 2 4 3 2] (D E Gb A B) " +"D6/add9 or D6/9 [0 2 0 2 0 2] (D E Gb A B) " +"D7 or Ddom 7 [x 5 7 5 7 2] (C D Gb A)" +"D7 or Ddom 7 [x 0 0 2 1 2] (C D Gb A) " +"D7 or Ddom 7 [x 3 x 2 3 2] (C D Gb A) " +"D7 or Ddom 7 [x 5 7 5 7 5] (C D Gb A) " +"D7sus4 [x 5 7 5 8 3] (C D G A)" +"D7sus4 [x x 0 2 1 3] (C D G A) " +"D9 or Ddom 9 [0 0 0 2 1 2] (C D E Gb A) " +"D9 or Ddom 9 [2 x 0 2 1 0] (C D E Gb A) " +"D9 or Ddom 9 [x 5 7 5 7 0] (C D E Gb A) " +"D9(#5) [0 3 x 3 3 2] (C D E Gb Bb) " +"Dadd9 or D2 [0 0 0 2 3 2] (D E Gb A) " + + + + +"Dadd9 or D2 [0 0 4 2 3 0] (D E Gb A) " +"Dadd9 or D2 [2 x 0 2 3 0] (D E Gb A) " +"Dadd9 or D2 [x 0 2 2 3 2] (D E Gb A) " +"Dadd9 or D2 [x x 2 2 3 2] (D E Gb A) " +"Dadd9 or D2 [x 5 4 2 3 0] (D E Gb A) " +"Dadd9 or D2 [x 9 7 7 x 0] (D E Gb A) " +"Daug/E [2 x 4 3 3 0] (D E Gb Bb) " +"Db or Dbmaj [4 4 6 6 6 4] (Db F Ab) " +"Db or Dbmaj [x 4 3 1 2 1] (Db F Ab) " +"Db or Dbmaj [x 4 6 6 6 4] (Db F Ab) " +"Db or Dbmaj [x x 3 1 2 1] (Db F Ab) " +"Db or Dbmaj [x x 6 6 6 4] (Db F Ab) " +"Db #5 or Dbaug [x 0 3 2 2 1] (Db F A) " +"Db #5 or Dbaug [x 0 x 2 2 1] (Db F A) " +"Db b5 [x x 3 0 2 1] (Db F G) " +"Db/B [x 4 3 4 0 4] (Db F Ab B) " + + + + +"Db/Bb [x 1 3 1 2 1] (Db F Ab Bb) " +"Db/C [x 3 3 1 2 1] (C Db F Ab) " +"Db/C [x 4 6 5 6 4] (C Db F Ab) " +"Db5 or Db(no 3rd)[x 4 6 6 x 4] (Db Ab)" +"Db6 [x 1 3 1 2 1] (Db F Ab Bb) " +"Db7 or Dbdom 7 [x 4 3 4 0 4] (Db F Ab B) " +"Dbaug/D [x x 0 2 2 1] (Db D F A) " +"Dbaug/G [1 0 3 0 2 1] (Db F G A) " +"Dbdim/A [3 x 2 2 2 0] (Db E G A) " +"Dbdim/A [x 0 2 0 2 0] (Db E G A) " +"Dbdim/A [x 0 2 2 2 3] (Db E G A) " +"Dbdim/B [0 2 2 0 2 0] (Db E G B) " +"Dbdim/Bb [x 1 2 0 2 0] (Db E G Bb) " +"Dbdim/Bb [x x 2 3 2 3] (Db E G Bb) " +"Dbdim/D [3 x 0 0 2 0] (Db D E G) " +"Dbdim/D [x x 0 0 2 0] (Db D E G) " + + + + +"Dbdim7 [x 1 2 0 2 0] (Db E G Bb) " +"Dbdim7 [x x 2 3 2 3] (Db E G Bb) " +"Dbm [x 4 6 6 5 4] (Db E Ab) " +"Dbm [x x 2 1 2 0] (Db E Ab) " +"Dbm [x 4 6 6 x 0] (Db E Ab) " +"Dbm/A [x 0 2 1 2 0] (Db E Ab A) " +"Dbm/B [0 2 2 1 2 0] (Db E Ab B) " +"Dbm/B [x 4 6 4 5 4] (Db E Ab B) " +"Dbm7 [0 2 2 1 2 0] (Db E Ab B) " +"Dbm7 [x 4 6 4 5 4] (Db E Ab B) " +"Dbm7(b5) or Dbo7 [0 2 2 0 2 0] (Db E G B) " +"Dbmaj7 or Db#7 [x 3 3 1 2 1] (C Db F Ab) " +"Dbmaj7 or Db#7 [x 4 6 5 6 4] (C Db F Ab) " +"Dbsus2 or Dbadd9(no3) [x x 6 6 4 4] (Db Eb Ab) " +"Dbsus4/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " +"Ddim/B [x 2 0 1 0 1] (D F Ab B) " + + + + +"Ddim/B [x x 0 1 0 1] (D F Ab B) " +"Ddim/B [x x 3 4 3 4] (D F Ab B) " +"Ddim/Bb [x 1 3 1 3 1] (D F Ab Bb) " +"Ddim/Bb [x x 3 3 3 4] (D F Ab Bb) " +"Ddim/C [x x 0 1 1 1] (C D F Ab) " +"Ddim7 [x 2 0 1 0 1] (D F Ab B) " +"Ddim7 [x x 0 1 0 1] (D F Ab B) " +"Ddim7 [x x 3 4 3 4] (D F Ab B) " +"Dm [x 0 0 2 3 1] (D F A) " +"Dm/B [1 2 3 2 3 1] (D F A B) " +"Dm/B [x 2 0 2 0 1] (D F A B) " +"Dm/B [x x 0 2 0 1] (D F A B) " +"Dm/Bb [1 1 3 2 3 1] (D F A Bb) " +"Dm/C [x 5 7 5 6 5] (C D F A) " +"Dm/C [x x 0 2 1 1] (C D F A) " +"Dm/C [x x 0 5 6 5] (C D F A) " + + + + +"Dm/Db [x x 0 2 2 1] (Db D F A) " +"Dm/E [x x 7 7 6 0] (D E F A) " +"Dm6 [1 2 3 2 3 1] (D F A B) " +"Dm6 [x 2 0 2 0 1] (D F A B) " +"Dm6 [x x 0 2 0 1] (D F A B) " +"Dm6 [10 x 9 10 10 10] (D B F A D) " +"Dm7 [x 5 7 5 6 5] (C D F A) " +"Dm7 [x x 0 2 1 1] (C D F A) " +"Dm7 [x x 0 5 6 5] (C D F A) " +"Dm7(b5) or Do7 [x x 0 1 1 1] (C D F Ab) " +"Dm7/add11 or Dm7/11 [3 x 0 2 1 1] (C D F G A) " +"Dmaj7 or D#7 [x x 0 14 14 14] (Db D Gb A) " +"Dmaj7 or D#7 [x x 0 2 2 2] (Db D Gb A) " +"Dmin/maj7 [x x 0 2 2 1] (Db D F A) " +"Dsus or Dsus4 [5 x 0 0 3 5] (D G A)" +"Dsus or Dsus4 [3 0 0 0 3 3] (D G A) " +"Dsus or Dsus4 [x 0 0 0 3 3] (D G A) " + + + + +"Dsus or Dsus4 [x x 0 2 3 3] (D G A) " +"Dsus2 or Dadd9(no3)[5 5 7 7 x 0] (D E A)" +"Dsus2 or Dadd9(no3)[x 0 0 2 3 0] (D E A)" +"Dsus2 or Dadd9(no3)[0 0 2 2 3 0] (D E A) " +"Dsus2 or Dadd9(no3)[x 0 2 2 3 0] (D E A) " +"Dsus2 or Dadd9(no3)[x x 0 2 3 0] (D E A) " +"Dsus2/Ab [4 x 0 2 3 0] (D E Ab A) " +"Dsus2/B [0 2 0 2 0 0] (D E A B) " +"Dsus2/B [x 2 0 2 3 0] (D E A B) " +"Dsus2/Bb [0 1 x 2 3 0] (D E A Bb) " +"Dsus2/C [x x 0 2 1 0] (C D E A) " +"Dsus2/C [x x 0 5 5 5] (C D E A) " +"Dsus2/Db [x 0 0 2 2 0] (Db D E A) " +"Dsus2/Db [x x 0 2 2 0] (Db D E A) " +"Dsus2/Db [x x 0 6 5 5] (Db D E A) " +"Dsus2/Db [x x 0 9 10 9] (Db D E A) " + + + + +"Dsus2/F [x x 7 7 6 0] (D E F A) " +"Dsus2/G [x 0 2 0 3 0] (D E G A) " +"Dsus2/G [x 0 2 0 3 3] (D E G A) " +"Dsus2/G [x 0 2 2 3 3] (D E G A) " +"Dsus2/G [5 x 0 0 3 0] (D E G A) " +"Dsus2/G [x 0 0 0 x 0] (D E G A) " +"Dsus2/Gb [0 0 0 2 3 2] (D E Gb A) " +"Dsus2/Gb [0 0 4 2 3 0] (D E Gb A) " +"Dsus2/Gb [2 x 0 2 3 0] (D E Gb A) " +"Dsus2/Gb [x 0 2 2 3 2] (D E Gb A) " +"Dsus2/Gb [x x 2 2 3 2] (D E Gb A) " +"Dsus2/Gb [x 5 4 2 3 0] (D E Gb A) " +"Dsus2/Gb [x 9 7 7 x 0] (D E Gb A) " +"Dsus4/B [3 0 0 0 0 3] (D G A B) " +"Dsus4/B [3 2 0 2 0 3] (D G A B) " +"Dsus4/C [x 5 7 5 8 3] (C D G A)" + + + + +"Dsus4/C [x x 0 2 1 3] (C D G A) " +"Dsus4/E [x 0 2 0 3 0] (D E G A) " +"Dsus4/E [x 0 2 0 3 3] (D E G A) " +"Dsus4/E [x 0 2 2 3 3] (D E G A) " +"Dsus4/E [5 x 0 0 3 0] (D E G A) " +"Dsus4/E [x 0 0 0 x 0] (D E G A) " +"Dsus4/Gb [5 x 4 0 3 5] (D Gb G A)" +"Dsus4/Gb [3 x 0 2 3 2] (D Gb G A) " +"E or Emaj [0 2 2 1 0 0] (E Ab B) " +"E or Emaj [x 7 6 4 5 0] (E Ab B) " +"E #5 or Eaug [x 3 2 1 1 0] (C E Ab) " +"E/A [x 0 2 1 0 0] (E Ab A B) " +"E/D [0 2 0 1 0 0] (D E Ab B) " +"E/D [0 2 2 1 3 0] (D E Ab B) " +"E/D [x 2 0 1 3 0] (D E Ab B) " +"E/D [x x 0 1 0 0] (D E Ab B) " + + + + +"E/Db [0 2 2 1 2 0] (Db E Ab B) " +"E/Db [x 4 6 4 5 4] (Db E Ab B) " +"E/Eb [0 2 1 1 0 0] (Eb E Ab B) " +"E/Eb [0 x 6 4 4 0] (Eb E Ab B) " +"E/Eb [x x 1 1 0 0] (Eb E Ab B) " +"E/Gb [0 2 2 1 0 2] (E Gb Ab B) " +"E/Gb [0 x 4 1 0 0] (E Gb Ab B) " +"E/Gb [2 2 2 1 0 0] (E Gb Ab B) " +"E11/b9 [0 0 3 4 3 4] (D E F Ab A B) " +"E5 or E(no 3rd) [0 2 x x x 0] (E B) " +"E5 or E(no 3rd) [x 7 9 9 x 0] (E B) " +"E6 [0 2 2 1 2 0] (Db E Ab B) " +"E6 [x 4 6 4 5 4] (Db E Ab B) " +"E7 or Edom 7 [0 2 0 1 0 0] (D E Ab B) " +"E7 or Edom 7 [0 2 2 1 3 0] (D E Ab B) " +"E7 or Edom 7 [x 2 0 1 3 0] (D E Ab B) " + + + + +"E7 or Edom 7 [x x 0 1 0 0] (D E Ab B) " +"E7/add11 or E7/11 [x 0 0 1 0 0] (D E Ab A B) " +"E7/b9(b5) [0 1 3 1 3 1] (D E F Ab Bb) " +"E7sus4 [0 2 0 2 0 0] (D E A B) " +"E9 or Edom 9 [0 2 0 1 0 2] (D E Gb Ab B) " +"E9 or Edom 9 [2 2 0 1 0 0] (D E Gb Ab B) " +"Eadd9 or E2 [0 2 2 1 0 2] (E Gb Ab B) " +"Eadd9 or E2 [0 x 4 1 0 0] (E Gb Ab B) " +"Eadd9 or E2 [2 2 2 1 0 0] (E Gb Ab B) " +"Eb or Ebmaj [x 1 1 3 4 3] (Eb G Bb) " +"Eb or Ebmaj [x x 1 3 4 3] (Eb G Bb) " +"Eb or Ebmaj [x x 5 3 4 3] (Eb G Bb) " +"Eb #5 or Ebaug [3 2 1 0 0 3] (Eb G B) " +"Eb #5 or Ebaug [3 x 1 0 0 3] (Eb G B) " +"Eb/C [x 3 5 3 4 3] (C Eb G Bb) " +"Eb/D [x 6 8 7 8 6] (D Eb G Bb) " + + + + +"Eb/Db [x 1 1 3 2 3] (Db Eb G Bb) " +"Eb/Db [x 6 8 6 8 6] (Db Eb G Bb) " +"Eb/Db [x x 1 3 2 3] (Db Eb G Bb) " +"Eb/E [x x 5 3 4 0] (Eb E G Bb) " +"Eb5 or Eb(no 3rd)[x 6 8 8 x 6] (Eb Bb)" +"Eb6 [x 3 5 3 4 3] (C Eb G Bb) " +"Eb7 or Ebdom 7 [x 1 1 3 2 3] (Db Eb G Bb) " +"Eb7 or Ebdom 7 [x 6 8 6 8 6] (Db Eb G Bb) " +"Eb7 or Ebdom 7 [x x 1 3 2 3] (Db Eb G Bb) " +"Ebaug/E [3 x 1 0 0 0] (Eb E G B) " +"Ebaug/E [x x 1 0 0 0] (Eb E G B) " +"Ebdim/B [2 x 1 2 0 2] (Eb Gb A B) " +"Ebdim/B [x 0 1 2 0 2] (Eb Gb A B) " +"Ebdim/B [x 2 1 2 0 2] (Eb Gb A B) " +"Ebdim/B [x 2 4 2 4 2] (Eb Gb A B) " +"Ebdim/C [x x 1 2 1 2] (C Eb Gb A) " + + + + +"Ebdim7 [x x 1 2 1 2] (C Eb Gb A) " +"Ebm [x x 4 3 4 2] (Eb Gb Bb) " +"Ebm/Db [x x 1 3 2 2] (Db Eb Gb Bb) " +"Ebm7 [x x 1 3 2 2] (Db Eb Gb Bb) " +"Ebmaj7 or Eb#7 [x 6 8 7 8 6] (D Eb G Bb) " +"Ebsus2/Ab [x 1 3 1 4 1] (Eb F Ab Bb) " +"Ebsus4/F [x 1 3 1 4 1] (Eb F Ab Bb) " +"Edim/C [x 3 5 3 5 3] (C E G Bb) " +"Edim/D [3 x 0 3 3 0] (D E G Bb) " +"Edim/Db [x 1 2 0 2 0] (Db E G Bb) " +"Edim/Db [x x 2 3 2 3] (Db E G Bb) " +"Edim/Eb [x x 5 3 4 0] (Eb E G Bb) " +"Edim7 [x 1 2 0 2 0] (Db E G Bb) " +"Edim7 [x x 2 3 2 3] (Db E G Bb) " +"Em [0 2 2 0 0 0] (E G B) " +"Em [3 x 2 0 0 0] (E G B) " + + + + +"Em [x 2 5 x x 0] (E G B) " +"Em/A [3 x 2 2 0 0] (E G A B) " +"Em/A [x 0 2 0 0 0] (E G A B) " +"Em/A [x 0 5 4 5 0] (E G A B) " +"Em/C [0 3 2 0 0 0] (C E G B) " +"Em/C [x 2 2 0 1 0] (C E G B) " +"Em/C [x 3 5 4 5 3] (C E G B) " +"Em/D [0 2 0 0 0 0] (D E G B) " +"Em/D [0 2 0 0 3 0] (D E G B) " +"Em/D [0 2 2 0 3 0] (D E G B) " +"Em/D [0 2 2 0 3 3] (D E G B) " +"Em/D [x x 0 12 12 12] (D E G B) " +"Em/D [x x 0 9 8 7] (D E G B) " +"Em/D [x x 2 4 3 3] (D E G B) " +"Em/D [0 x 0 0 0 0] (D E G B) " +"Em/D [x 10 12 12 12 0] (D E G B) " + + + + +"Em/Db [0 2 2 0 2 0] (Db E G B) " +"Em/Eb [3 x 1 0 0 0] (Eb E G B) " +"Em/Eb [x x 1 0 0 0] (Eb E G B) " +"Em/Gb [0 2 2 0 0 2] (E Gb G B) " +"Em/Gb [0 2 4 0 0 0] (E Gb G B) " +"Em/Gb [0 x 4 0 0 0] (E Gb G B) " +"Em/Gb [2 2 2 0 0 0] (E Gb G B) " +"Em6 [0 2 2 0 2 0] (Db E G B) " +"Em6 [12 x 11 12 12 12] (E Db G B E) " +"Em7 [0 2 0 0 0 0] (D E G B) " +"Em7 [0 2 0 0 3 0] (D E G B) " +"Em7 [0 2 2 0 3 0] (D E G B) " +"Em7 [0 2 2 0 3 3] (D E G B) " +"Em7 [x x 0 0 0 0] (D E G B) " +"Em7 [x x 0 12 12 12] (D E G B) " +"Em7 [x x 0 9 8 7] (D E G B) " +"Em7 [x x 2 4 3 3] (D E G B) " + + + + +"Em7 [0 x 0 0 0 0] (D E G B) " +"Em7 [x 10 12 12 12 0] (D E G B) " +"Em7(b5) or Eo7 [3 x 0 3 3 0] (D E G Bb) " +"Em7/add11 or Em7/11 [0 0 0 0 0 0] (D E G A B) " +"Em7/add11 or Em7/11 [0 0 0 0 0 3] (D E G A B) " +"Em7/add11 or Em7/11 [3 x 0 2 0 0] (D E G A B) " +"Em9 [0 2 0 0 0 2] (D E Gb G B) " +"Em9 [0 2 0 0 3 2] (D E Gb G B) " +"Em9 [2 2 0 0 0 0] (D E Gb G B) " +"Emaj7 or E#7 [0 2 1 1 0 0] (Eb E Ab B) " +"Emaj7 or E#7 [0 x 6 4 4 0] (Eb E Ab B) " +"Emaj7 or E#7 [x x 1 1 0 0] (Eb E Ab B) " +"Emaj9 or E9(#7) [0 2 1 1 0 2] (Eb E Gb Ab B) " +"Emaj9 or E9(#7) [4 x 4 4 4 0] (Eb E Gb Ab B) " +"Emin/maj7 [3 x 1 0 0 0] (Eb E G B) " +"Emin/maj7 [x x 1 0 0 0] (Eb E G B) " + + + + +"Emin/maj9 [0 6 4 0 0 0] (Eb E Gb G B) " +"Esus or Esus4 [0 0 2 2 0 0] (E A B) " +"Esus or Esus4 [0 0 2 4 0 0] (E A B) " +"Esus or Esus4 [0 2 2 2 0 0] (E A B) " +"Esus or Esus4 [x 0 2 2 0 0] (E A B) " +"Esus or Esus4 [x x 2 2 0 0] (E A B) " +"Esus2 or Eadd9(no3)[7 9 9 x x 0] (E Gb B)" +"Esus2 or Eadd9(no3)[x 2 4 4 x 0] (E Gb B)" +"Esus2/A [x 0 4 4 0 0] (E Gb A B) " +"Esus2/A [x 2 4 2 5 2] (E Gb A B) " +"Esus2/Ab [0 2 2 1 0 2] (E Gb Ab B) " +"Esus2/Ab [0 x 4 1 0 0] (E Gb Ab B) " +"Esus2/Ab [2 2 2 1 0 0] (E Gb Ab B) " +"Esus2/Db [x 4 4 4 x 0] (Db E Gb B) " +"Esus2/Eb [x 2 2 4 4 2] (Eb E Gb B) " +"Esus2/Eb [x x 4 4 4 0] (Eb E Gb B) " + + + + +"Esus2/G [0 2 2 0 0 2] (E Gb G B) " +"Esus2/G [0 2 4 0 0 0] (E Gb G B) " +"Esus2/G [0 x 4 0 0 0] (E Gb G B) " +"Esus2/G [2 2 2 0 0 0] (E Gb G B) " +"Esus4/Ab [x 0 2 1 0 0] (E Ab A B) " +"Esus4/C [0 0 7 5 0 0] (C E A B) " +"Esus4/C [x 3 2 2 0 0] (C E A B) " +"Esus4/D [0 2 0 2 0 0] (D E A B) " +"Esus4/D [x 2 0 2 3 0] (D E A B) " +"Esus4/Db [0 0 2 4 2 0] (Db E A B) " +"Esus4/Db [x 0 7 6 0 0] (Db E A B) " +"Esus4/Eb [x 2 1 2 0 0] (Eb E A B) " +"Esus4/F [0 0 3 2 0 0] (E F A B) " +"Esus4/G [x 0 2 0 0 0] (E G A B) " +"Esus4/G [x 0 5 4 5 0] (E G A B) " +"Esus4/Gb [x 0 4 4 0 0] (E Gb A B) " + + + + +"Esus4/Gb [x 2 4 2 5 2] (E Gb A B) " +"F or Fmaj [1 3 3 2 1 1] (C F A) " +"F or Fmaj [x 0 3 2 1 1] (C F A) " +"F or Fmaj [x 3 3 2 1 1] (C F A) " +"F or Fmaj [x x 3 2 1 1] (C F A) " +"F #5 or Faug [x 0 3 2 2 1] (Db F A) " +"F #5 or Faug [x 0 x 2 2 1] (Db F A) " +"F/D [x 5 7 5 6 5] (C D F A) " +"F/D [x x 0 2 1 1] (C D F A) " +"F/D [x x 0 5 6 5] (C D F A) " +"F/E [0 0 3 2 1 0] (C E F A) " +"F/E [1 3 3 2 1 0] (C E F A) " +"F/E [1 x 2 2 1 0] (C E F A) " +"F/E [x x 2 2 1 1] (C E F A) " +"F/E [x x 3 2 1 0] (C E F A) " +"F/Eb [x x 1 2 1 1] (C Eb F A) " + + + + +"F/Eb [x x 3 5 4 5] (C Eb F A) " +"F/G [3 x 3 2 1 1] (C F G A) " +"F/G [x x 3 2 1 3] (C F G A) " +"F5 or F(no 3rd) [1 3 3 x x 1] (C F)" +"F5 or F(no 3rd) [x 8 10 x x 1] (C F)" +"F6 [x 5 7 5 6 5] (C D F A) " +"F6 [x x 0 2 1 1] (C D F A) " +"F6 [x x 0 5 6 5] (C D F A) " +"F6/add9 or F6/9 [3 x 0 2 1 1] (C D F G A) " +"F7 or Fdom 7 [x x 1 2 1 1] (C Eb F A) " +"F7 or Fdom 7 [x x 3 5 4 5] (C Eb F A) " +"Fadd9 or F2 [3 x 3 2 1 1] (C F G A) " +"Fadd9 or F2 [x x 3 2 1 3] (C F G A) " +"Faug/D [x x 0 2 2 1] (Db D F A) " +"Faug/G [1 0 3 0 2 1] (Db F G A) " +"Fdim/D [x 2 0 1 0 1] (D F Ab B) " + + + + +"Fdim/D [x x 0 1 0 1] (D F Ab B) " +"Fdim/D [x x 3 4 3 4] (D F Ab B) " +"Fdim/Db [x 4 3 4 0 4] (Db F Ab B) " +"Fdim7 [x 2 0 1 0 1] (D F Ab B) " +"Fdim7 [x x 0 1 0 1] (D F Ab B) " +"Fdim7 [x x 3 4 3 4] (D F Ab B) " +"Fm [x 3 3 1 1 1] (C F Ab) " +"Fm [x x 3 1 1 1] (C F Ab) " +"Fm/D [x x 0 1 1 1] (C D F Ab) " +"Fm/Db [x 3 3 1 2 1] (C Db F Ab) " +"Fm/Db [x 4 6 5 6 4] (C Db F Ab) " +"Fm/Eb [x 8 10 8 9 8] (C Eb F Ab) " +"Fm/Eb [x x 1 1 1 1] (C Eb F Ab) " +"Fm6 [x x 0 1 1 1] (C D F Ab) " +"Fm6 [1 x 0 1 1 1] (F D Ab C F) " +"Fm7 [x 8 10 8 9 8] (C Eb F Ab) " +"Fm7 [x x 1 1 1 1] (C Eb F Ab) " + + + + +"Fmaj7 or F#7 [0 0 3 2 1 0] (C E F A) " +"Fmaj7 or F#7 [1 3 3 2 1 0] (C E F A) " +"Fmaj7 or F#7 [1 x 2 2 1 0] (C E F A) " +"Fmaj7 or F#7 [x x 2 2 1 1] (C E F A) " +"Fmaj7 or F#7 [x x 3 2 1 0] (C E F A) " +"Fmaj7/#11 [0 2 3 2 1 0] (C E F A B) " +"Fmaj7/#11 [1 3 3 2 0 0] (C E F A B) " +"Fmaj9 or F9(#7) [0 0 3 0 1 3] (C E F G A) " +"Fsus or Fsus4 [x x 3 3 1 1] (C F Bb) " +"Fsus2 or Fadd9(no3)[x 3 3 0 1 1] (C F G) " +"Fsus2 or Fadd9(no3)[x x 3 0 1 1] (C F G) " +"Fsus2/A [3 x 3 2 1 1] (C F G A) " +"Fsus2/A [x x 3 2 1 3] (C F G A) " +"Fsus2/B [x 3 3 0 0 3] (C F G B) " +"Fsus2/Bb [x 3 5 3 6 3] (C F G Bb) " +"Fsus2/D [3 3 0 0 1 1] (C D F G) " + + + + +"Fsus2/E [x 3 3 0 1 0] (C E F G) " +"Fsus2/E [x x 3 0 1 0] (C E F G) " +"Fsus4/G [x 3 5 3 6 3] (C F G Bb) " +"G or Gmaj [x 10 12 12 12 10] (D G B)" +"G or Gmaj [3 2 0 0 0 3] (D G B) " +"G or Gmaj [3 2 0 0 3 3] (D G B) " +"G or Gmaj [3 5 5 4 3 3] (D G B) " +"G or Gmaj [3 x 0 0 0 3] (D G B) " +"G or Gmaj [x 5 5 4 3 3] (D G B) " +"G or Gmaj [x x 0 4 3 3] (D G B) " +"G or Gmaj [x x 0 7 8 7] (D G B) " +"G #5 or Gaug [3 2 1 0 0 3] (Eb G B) " +"G #5 or Gaug [3 x 1 0 0 3] (Eb G B) " +"G/A [3 0 0 0 0 3] (D G A B) " +"G/A [3 2 0 2 0 3] (D G A B) " +"G/C [3 3 0 0 0 3] (C D G B) " + + + + +"G/C [x 3 0 0 0 3] (C D G B) " +"G/E [0 2 0 0 0 0] (D E G B) " +"G/E [0 2 0 0 3 0] (D E G B) " +"G/E [0 2 2 0 3 0] (D E G B) " +"G/E [0 2 2 0 3 3] (D E G B) " +"G/E [x x 0 12 12 12] (D E G B) " +"G/E [x x 0 9 8 7] (D E G B) " +"G/E [x x 2 4 3 3] (D E G B) " +"G/E [0 x 0 0 0 0] (D E G B) " +"G/E [x 10 12 12 12 0] (D E G B) " +"G/F [1 x 0 0 0 3] (D F G B) " +"G/F [3 2 0 0 0 1] (D F G B) " +"G/F [x x 0 0 0 1] (D F G B) " +"G/Gb [2 2 0 0 0 3] (D Gb G B) " +"G/Gb [2 2 0 0 3 3] (D Gb G B) " +"G/Gb [3 2 0 0 0 2] (D Gb G B) " + + + + +"G/Gb [x x 4 4 3 3] (D Gb G B) " +"G5 or G(no 3rd) [3 5 5 x x 3] (D G)" +"G5 or G(no 3rd) [3 x 0 0 3 3] (D G) " +"G6 [0 2 0 0 0 0] (D E G B) " +"G6 [0 2 0 0 3 0] (D E G B) " +"G6 [0 2 2 0 3 0] (D E G B) " +"G6 [0 2 2 0 3 3] (D E G B) " +"G6 [x x 0 12 12 12] (D E G B) " +"G6 [x x 0 9 8 7] (D E G B) " +"G6 [x x 2 4 3 3] (D E G B) " +"G6 [0 x 0 0 0 0] (D E G B) " +"G6 [x 10 12 12 12 0] (D E G B) " +"G6/add9 or G6/9 [0 0 0 0 0 0] (D E G A B) " +"G6/add9 or G6/9 [0 0 0 0 0 3] (D E G A B) " +"G6/add9 or G6/9 [3 x 0 2 0 0] (D E G A B) " +"G7 or Gdom 7 [1 x 0 0 0 3] (D F G B) " + + + + +"G7 or Gdom 7 [3 2 0 0 0 1] (D F G B) " +"G7 or Gdom 7 [x x 0 0 0 1] (D F G B) " +"G7/add11 or G7/11 [x 3 0 0 0 1] (C D F G B) " +"G7sus4 [3 3 0 0 1 1] (C D F G) " +"G9 or Gdom 9 [x 0 0 0 0 1] (D F G A B) " +"G9 or Gdom 9 [x 2 3 2 3 3] (D F G A B) " +"Gadd9 or G2 [3 0 0 0 0 3] (D G A B) " +"Gadd9 or G2 [3 2 0 2 0 3] (D G A B) " +"Gaug/E [3 x 1 0 0 0] (Eb E G B) " +"Gaug/E [x x 1 0 0 0] (Eb E G B) " +"Gb or Gbmaj [2 4 4 3 2 2] (Db Gb Bb) " +"Gb or Gbmaj [x 4 4 3 2 2] (Db Gb Bb) " +"Gb or Gbmaj [x x 4 3 2 2] (Db Gb Bb) " +"Gb #5 or Gbaug [x x 0 3 3 2] (D Gb Bb) " +"Gb/Ab [x x 4 3 2 4] (Db Gb Ab Bb) " +"Gb/E [2 4 2 3 2 2] (Db E Gb Bb) " + + + + +"Gb/E [x x 4 3 2 0] (Db E Gb Bb) " +"Gb/Eb [x x 1 3 2 2] (Db Eb Gb Bb) " +"Gb/F [x x 3 3 2 2] (Db F Gb Bb) " +"Gb6 [x x 1 3 2 2] (Db Eb Gb Bb) " +"Gb7 or Gbdom 7 [2 4 2 3 2 2] (Db E Gb Bb) " +"Gb7 or Gbdom 7 [x x 4 3 2 0] (Db E Gb Bb) " +"Gb7(#5) [2 x 4 3 3 0] (D E Gb Bb) " +"Gb7/#9 [x 0 4 3 2 0] (Db E Gb A Bb) " +"Gb7sus4 [x 4 4 4 x 0] (Db E Gb B) " +"Gbadd9 or Gb2 [x x 4 3 2 4] (Db Gb Ab Bb) " +"Gbaug/E [2 x 4 3 3 0] (D E Gb Bb) " +"Gbdim/D [x 5 7 5 7 2] (C D Gb A)" +"Gbdim/D [x 0 0 2 1 2] (C D Gb A) " +"Gbdim/D [x 3 x 2 3 2] (C D Gb A) " +"Gbdim/D [x 5 7 5 7 5] (C D Gb A) " +"Gbdim/E [x 0 2 2 1 2] (C E Gb A) " + + + + +"Gbdim/E [x x 2 2 1 2] (C E Gb A) " +"Gbdim/Eb [x x 1 2 1 2] (C Eb Gb A) " +"Gbdim7 [x x 1 2 1 2] (C Eb Gb A) " +"Gbm [2 4 4 2 2 2] (Db Gb A) " +"Gbm [x 4 4 2 2 2] (Db Gb A) " +"Gbm [x x 4 2 2 2] (Db Gb A) " +"Gbm/D [x x 0 14 14 14] (Db D Gb A) " +"Gbm/D [x x 0 2 2 2] (Db D Gb A) " +"Gbm/E [0 0 2 2 2 2] (Db E Gb A) " +"Gbm/E [0 x 4 2 2 0] (Db E Gb A) " +"Gbm/E [2 x 2 2 2 0] (Db E Gb A) " +"Gbm/E [x 0 4 2 2 0] (Db E Gb A) " +"Gbm/E [x x 2 2 2 2] (Db E Gb A) " +"Gbm7 [0 0 2 2 2 2] (Db E Gb A) " +"Gbm7 [0 x 4 2 2 0] (Db E Gb A) " +"Gbm7 [2 x 2 2 2 0] (Db E Gb A) " + + + + +"Gbm7 [x 0 4 2 2 0] (Db E Gb A) " +"Gbm7 [x x 2 2 2 2] (Db E Gb A) " +"Gbm7(b5) or Gbo7 [x 0 2 2 1 2] (C E Gb A) " +"Gbm7(b5) or Gbo7 [x x 2 2 1 2] (C E Gb A) " +"Gbm7/b9 [0 0 2 0 2 2] (Db E Gb G A) " +"Gbmaj7 or Gb#7 [x x 3 3 2 2] (Db F Gb Bb) " +"Gbsus or Gbsus4 [x 4 4 4 2 2] (Db Gb B) " +"Gbsus2/Bb [x x 4 3 2 4] (Db Gb Ab Bb) " +"Gbsus4/E [x 4 4 4 x 0] (Db E Gb B) " +"Gdim/E [x 1 2 0 2 0] (Db E G Bb) " +"Gdim/E [x x 2 3 2 3] (Db E G Bb) " +"Gdim/Eb [x 1 1 3 2 3] (Db Eb G Bb) " +"Gdim/Eb [x 6 8 6 8 6] (Db Eb G Bb) " +"Gdim/Eb [x x 1 3 2 3] (Db Eb G Bb) " +"Gdim7 [x 1 2 0 2 0] (Db E G Bb) " +"Gdim7 [x x 2 3 2 3] (Db E G Bb) " + + + + +"Gm [3 5 5 3 3 3] (D G Bb) " +"Gm [x x 0 3 3 3] (D G Bb) " +"Gm/E [3 x 0 3 3 0] (D E G Bb) " +"Gm/Eb [x 6 8 7 8 6] (D Eb G Bb) " +"Gm/F [3 5 3 3 3 3] (D F G Bb) " +"Gm/F [x x 3 3 3 3] (D F G Bb) " +"Gm13 [0 0 3 3 3 3] (D E F G A Bb) " +"Gm6 [3 x 0 3 3 0] (D E G Bb) " +"Gm6 [3 x 2 3 3 3] (G E Bb D G) " +"Gm7 [3 5 3 3 3 3] (D F G Bb) " +"Gm7 [x x 3 3 3 3] (D F G Bb) " +"Gm7/add11 or Gm7/11 [x 3 3 3 3 3] (C D F G Bb) " +"Gm9 [3 5 3 3 3 5] (D F G A Bb) " +"Gmaj7 or G#7 [2 2 0 0 0 3] (D Gb G B) " +"Gmaj7 or G#7 [2 2 0 0 3 3] (D Gb G B) " +"Gmaj7 or G#7 [3 2 0 0 0 2] (D Gb G B) " +"Gmaj7 or G#7 [x x 4 4 3 3] (D Gb G B) " + + + + +"Gsus or Gsus4 [x 10 12 12 13 3] (C D G)" +"Gsus or Gsus4 [x 3 0 0 3 3] (C D G) " +"Gsus or Gsus4 [x 3 5 5 3 3] (C D G) " +"Gsus or Gsus4 [x 5 5 5 3 3] (C D G) " +"Gsus2 or Gadd9(no3)[5 x 0 0 3 5] (D G A)" +"Gsus2 or Gadd9(no3)[3 0 0 0 3 3] (D G A) " +"Gsus2 or Gadd9(no3)[x 0 0 0 3 3] (D G A) " +"Gsus2 or Gadd9(no3)[x x 0 2 3 3] (D G A) " +"Gsus2/B [3 0 0 0 0 3] (D G A B) " +"Gsus2/B [3 2 0 2 0 3] (D G A B) " +"Gsus2/C [x 5 7 5 8 3] (C D G A)" +"Gsus2/C [x x 0 2 1 3] (C D G A) " +"Gsus2/E [x 0 2 0 3 0] (D E G A) " +"Gsus2/E [x 0 2 0 3 3] (D E G A) " +"Gsus2/E [x 0 2 2 3 3] (D E G A) " +"Gsus2/E [5 0 0 0 3 0] (D E G A) " + + + + +"Gsus2/Gb [5 x 4 0 3 5] (D Gb G A)" +"Gsus2/Gb [3 x 0 2 3 2] (D Gb G A) " +"Gsus4/A [x 5 7 5 8 3] (C D G A)" +"Gsus4/A [x x 0 2 1 3] (C D G A) " +"Gsus4/B [3 3 0 0 0 3] (C D G B) " +"Gsus4/B [x 3 0 0 0 3] (C D G B) " +"Gsus4/E [3 x 0 0 1 0] (C D E G) " +"Gsus4/E [x 3 0 0 1 0] (C D E G) " +"Gsus4/E [x 3 2 0 3 0] (C D E G) " +"Gsus4/E [x 3 2 0 3 3] (C D E G) " +"Gsus4/E [x x 0 0 1 0] (C D E G) " +"Gsus4/E [x x 0 5 5 3] (C D E G) " +"Gsus4/E [x 10 12 12 13 0] (C D E G) " +"Gsus4/E [x 5 5 5 x 0] (C D E G) " +"Gsus4/F [3 3 0 0 1 1] (C D F G) " + diff --git a/proto/Debug/sysinfo.exe b/proto/Debug/sysinfo.exe new file mode 100644 index 0000000..636f902 Binary files /dev/null and b/proto/Debug/sysinfo.exe differ diff --git a/proto/Debug/table.txt b/proto/Debug/table.txt new file mode 100644 index 0000000..59b60ba --- /dev/null +++ b/proto/Debug/table.txt @@ -0,0 +1,105 @@ +1 trade_date smalldatetime 4 0 +0 trade_date_txt varchar 10 1 +0 portfolio varchar 35 0 +0 sub_portfolio varchar 35 0 +0 ticker varchar 25 0 +0 ticker_desc varchar 60 1 +0 uticker varchar 25 1 +0 instrument varchar 3 0 +0 mkt_cap decimal 13 1 +0 wgt_ave decimal 9 1 +0 volume decimal 13 1 +0 contract_size decimal 9 1 +0 hedge_index varchar 4 1 +0 hedge_sector varchar 4 1 +0 area varchar 6 1 +0 area_sector varchar 6 1 +0 [close] decimal 9 1 +0 y_close decimal 9 1 +0 uticker_close decimal 9 1 +0 y_uticker_close decimal 9 1 +0 delta decimal 9 1 +0 y_delta decimal 9 1 +0 days_expire int 4 1 +0 strike_price decimal 9 1 +0 hedge_beta decimal 5 1 +0 area_beta decimal 5 1 +0 sector_beta decimal 5 1 +0 group_beta decimal 5 1 +0 qty decimal 9 0 +0 y_qty decimal 9 0 +0 qty_change decimal 9 1 +0 hedge_close decimal 9 1 +0 hedge_perc decimal 9 1 +0 area_close decimal 9 1 +0 area_perc decimal 9 1 +0 sector_close decimal 9 1 +0 sector_perc decimal 9 1 +0 mkt_value decimal 13 1 +0 y_mkt_value decimal 13 1 +0 pnl decimal 13 1 +0 exposure decimal 13 1 +0 y_exposure decimal 13 1 +0 hb_exposure decimal 13 1 +0 y_hb_exposure decimal 13 1 +0 ab_exposure decimal 13 1 +0 y_ab_exposure decimal 13 1 +0 sb_exposure decimal 13 1 +0 y_sb_exposure decimal 13 1 +0 area_pnl_amt decimal 13 1 +0 sector_pnl_amt decimal 13 1 +0 pnl_perc decimal 13 1 +0 price_change decimal 13 1 +0 price_change_perc decimal 13 1 +0 price_change_amt decimal 13 1 +0 sector_alpha_perc decimal 13 1 +0 group_alpha_perc decimal 13 1 +0 area_alpha_perc decimal 13 1 +0 sector_alpha_amt decimal 13 1 +0 group_alpha_amt decimal 13 1 +0 area_alpha_amt decimal 13 1 +0 ab_return_amt decimal 13 1 +0 ab_return_perc decimal 13 1 +0 intraday_perc decimal 13 1 +0 intraday_amt decimal 13 1 +0 optionality_amt decimal 13 1 +0 optionality_perc decimal 13 1 +0 currency varchar 5 1 +0 base_close decimal 9 1 +0 y_base_close decimal 9 1 +0 fx_perc decimal 9 1 +0 fx_amt decimal 9 1 +0 fx_rate decimal 9 1 +0 y_fx_rate decimal 9 1 +0 alt_index_return_perc decimal 13 1 +0 alt_index_return_amt decimal 13 1 +0 index_beta_adj_perc decimal 13 1 +0 index_beta_adj_amt decimal 13 1 +0 vwap decimal 13 1 +0 vwap_pnl decimal 13 1 +0 hedge_alpha_amt decimal 13 1 +0 exposure_view varchar 5 1 +0 market_view varchar 5 1 +0 call_put varchar 4 1 +0 [month] varchar 4 1 +0 private bit 1 1 +0 ipo bit 1 1 +0 ratio decimal 9 1 +0 source varchar 10 1 +0 go_around smalldatetime 4 1 +0 adh decimal 13 1 +0 aac decimal 13 1 +0 azap float 8 1 +0 exported bit 1 1 +0 hedge_alpha_perc decimal 13 1 +0 alpha_go_around decimal 13 1 +0 alpha_real decimal 13 1 +0 alpha_unreal decimal 13 1 +0 pnl_real decimal 13 1 +0 pnl_unreal decimal 13 1 +0 cash_flow decimal 13 1 +0 beta_cash_flow decimal 13 1 +0 last_trade_date smalldatetime 4 1 +0 last_trade_qty decimal 9 1 +0 enterprise_value decimal 13 1 +0 associate nvarchar 30 1 \ No newline at end of file diff --git a/proto/Debug/vc60.idb b/proto/Debug/vc60.idb new file mode 100644 index 0000000..69e92b9 Binary files /dev/null and b/proto/Debug/vc60.idb differ diff --git a/proto/Debug/vc60.pdb b/proto/Debug/vc60.pdb new file mode 100644 index 0000000..4f9b1f9 Binary files /dev/null and b/proto/Debug/vc60.pdb differ diff --git a/proto/Historic.java b/proto/Historic.java new file mode 100644 index 0000000..72ee348 --- /dev/null +++ b/proto/Historic.java @@ -0,0 +1,951 @@ +package zbi.risk.server.vhi.mapped + + +public class Historic +{ + private Timestamp tradeDate; + private String tradeDateTxt; + private String portfolio; + private String subPortfolio; + private String ticker; + private String tickerDesc; + private String uticker; + private String instrument; + private float mktCap; + private float wgtAve; + private float volume; + private float contractSize; + private String hedgeIndex; + private String hedgeSector; + private String area; + private String areaSector; + private float [close]; + private float yClose; + private float utickerClose; + private float yUtickerClose; + private float delta; + private float yDelta; + private int daysExpire; + private float strikePrice; + private float hedgeBeta; + private float areaBeta; + private float sectorBeta; + private float groupBeta; + private float qty; + private float yQty; + private float qtyChange; + private float hedgeClose; + private float hedgePerc; + private float areaClose; + private float areaPerc; + private float sectorClose; + private float sectorPerc; + private float mktValue; + private float yMktValue; + private float pnl; + private float exposure; + private float yExposure; + private float hbExposure; + private float yHbExposure; + private float abExposure; + private float yAbExposure; + private float sbExposure; + private float ySbExposure; + private float areaPnlAmt; + private float sectorPnlAmt; + private float pnlPerc; + private float priceChange; + private float priceChangePerc; + private float priceChangeAmt; + private float sectorAlphaPerc; + private float groupAlphaPerc; + private float areaAlphaPerc; + private float sectorAlphaAmt; + private float groupAlphaAmt; + private float areaAlphaAmt; + private float abReturnAmt; + private float abReturnPerc; + private float intradayPerc; + private float intradayAmt; + private float optionalityAmt; + private float optionalityPerc; + private String currency; + private float baseClose; + private float yBaseClose; + private float fxPerc; + private float fxAmt; + private float fxRate; + private float yFxRate; + private float altIndexReturnPerc; + private float altIndexReturnAmt; + private float indexBetaAdjPerc; + private float indexBetaAdjAmt; + private float vwap; + private float vwapPnl; + private float hedgeAlphaAmt; + private String exposureView; + private String marketView; + private String callPut; + private String [month]; + private boolean private; + private boolean ipo; + private float ratio; + private String source; + private Timestamp goAround; + private float adh; + private float aac; + private float azap; + private boolean exported; + private float hedgeAlphaPerc; + private float alphaGoAround; + private float alphaReal; + private float alphaUnreal; + private float pnlReal; + private float pnlUnreal; + private float cashFlow; + private float betaCashFlow; + private Timestamp lastTradeDate; + private float lastTradeQty; + private float enterpriseValue; + private String associate; + public Timestamp getTradeDate() + { + return tradeDate; + } + public void setTradeDate(Timestamp tradeDate) + { + this.tradeDate=tradeDate; + } + public String getTradeDateTxt() + { + return tradeDateTxt; + } + public void setTradeDateTxt(String tradeDateTxt) + { + this.tradeDateTxt=tradeDateTxt; + } + public String getPortfolio() + { + return portfolio; + } + public void setPortfolio(String portfolio) + { + this.portfolio=portfolio; + } + public String getSubPortfolio() + { + return subPortfolio; + } + public void setSubPortfolio(String subPortfolio) + { + this.subPortfolio=subPortfolio; + } + public String getTicker() + { + return ticker; + } + public void setTicker(String ticker) + { + this.ticker=ticker; + } + public String getTickerDesc() + { + return tickerDesc; + } + public void setTickerDesc(String tickerDesc) + { + this.tickerDesc=tickerDesc; + } + public String getUticker() + { + return uticker; + } + public void setUticker(String uticker) + { + this.uticker=uticker; + } + public String getInstrument() + { + return instrument; + } + public void setInstrument(String instrument) + { + this.instrument=instrument; + } + public float getMktCap() + { + return mktCap; + } + public void setMktCap(float mktCap) + { + this.mktCap=mktCap; + } + public float getWgtAve() + { + return wgtAve; + } + public void setWgtAve(float wgtAve) + { + this.wgtAve=wgtAve; + } + public float getVolume() + { + return volume; + } + public void setVolume(float volume) + { + this.volume=volume; + } + public float getContractSize() + { + return contractSize; + } + public void setContractSize(float contractSize) + { + this.contractSize=contractSize; + } + public String getHedgeIndex() + { + return hedgeIndex; + } + public void setHedgeIndex(String hedgeIndex) + { + this.hedgeIndex=hedgeIndex; + } + public String getHedgeSector() + { + return hedgeSector; + } + public void setHedgeSector(String hedgeSector) + { + this.hedgeSector=hedgeSector; + } + public String getArea() + { + return area; + } + public void setArea(String area) + { + this.area=area; + } + public String getAreaSector() + { + return areaSector; + } + public void setAreaSector(String areaSector) + { + this.areaSector=areaSector; + } + public float get[close]() + { + return [close]; + } + public void set[close](float [close]) + { + this.[close]=[close]; + } + public float getYClose() + { + return yClose; + } + public void setYClose(float yClose) + { + this.yClose=yClose; + } + public float getUtickerClose() + { + return utickerClose; + } + public void setUtickerClose(float utickerClose) + { + this.utickerClose=utickerClose; + } + public float getYUtickerClose() + { + return yUtickerClose; + } + public void setYUtickerClose(float yUtickerClose) + { + this.yUtickerClose=yUtickerClose; + } + public float getDelta() + { + return delta; + } + public void setDelta(float delta) + { + this.delta=delta; + } + public float getYDelta() + { + return yDelta; + } + public void setYDelta(float yDelta) + { + this.yDelta=yDelta; + } + public int getDaysExpire() + { + return daysExpire; + } + public void setDaysExpire(int daysExpire) + { + this.daysExpire=daysExpire; + } + public float getStrikePrice() + { + return strikePrice; + } + public void setStrikePrice(float strikePrice) + { + this.strikePrice=strikePrice; + } + public float getHedgeBeta() + { + return hedgeBeta; + } + public void setHedgeBeta(float hedgeBeta) + { + this.hedgeBeta=hedgeBeta; + } + public float getAreaBeta() + { + return areaBeta; + } + public void setAreaBeta(float areaBeta) + { + this.areaBeta=areaBeta; + } + public float getSectorBeta() + { + return sectorBeta; + } + public void setSectorBeta(float sectorBeta) + { + this.sectorBeta=sectorBeta; + } + public float getGroupBeta() + { + return groupBeta; + } + public void setGroupBeta(float groupBeta) + { + this.groupBeta=groupBeta; + } + public float getQty() + { + return qty; + } + public void setQty(float qty) + { + this.qty=qty; + } + public float getYQty() + { + return yQty; + } + public void setYQty(float yQty) + { + this.yQty=yQty; + } + public float getQtyChange() + { + return qtyChange; + } + public void setQtyChange(float qtyChange) + { + this.qtyChange=qtyChange; + } + public float getHedgeClose() + { + return hedgeClose; + } + public void setHedgeClose(float hedgeClose) + { + this.hedgeClose=hedgeClose; + } + public float getHedgePerc() + { + return hedgePerc; + } + public void setHedgePerc(float hedgePerc) + { + this.hedgePerc=hedgePerc; + } + public float getAreaClose() + { + return areaClose; + } + public void setAreaClose(float areaClose) + { + this.areaClose=areaClose; + } + public float getAreaPerc() + { + return areaPerc; + } + public void setAreaPerc(float areaPerc) + { + this.areaPerc=areaPerc; + } + public float getSectorClose() + { + return sectorClose; + } + public void setSectorClose(float sectorClose) + { + this.sectorClose=sectorClose; + } + public float getSectorPerc() + { + return sectorPerc; + } + public void setSectorPerc(float sectorPerc) + { + this.sectorPerc=sectorPerc; + } + public float getMktValue() + { + return mktValue; + } + public void setMktValue(float mktValue) + { + this.mktValue=mktValue; + } + public float getYMktValue() + { + return yMktValue; + } + public void setYMktValue(float yMktValue) + { + this.yMktValue=yMktValue; + } + public float getPnl() + { + return pnl; + } + public void setPnl(float pnl) + { + this.pnl=pnl; + } + public float getExposure() + { + return exposure; + } + public void setExposure(float exposure) + { + this.exposure=exposure; + } + public float getYExposure() + { + return yExposure; + } + public void setYExposure(float yExposure) + { + this.yExposure=yExposure; + } + public float getHbExposure() + { + return hbExposure; + } + public void setHbExposure(float hbExposure) + { + this.hbExposure=hbExposure; + } + public float getYHbExposure() + { + return yHbExposure; + } + public void setYHbExposure(float yHbExposure) + { + this.yHbExposure=yHbExposure; + } + public float getAbExposure() + { + return abExposure; + } + public void setAbExposure(float abExposure) + { + this.abExposure=abExposure; + } + public float getYAbExposure() + { + return yAbExposure; + } + public void setYAbExposure(float yAbExposure) + { + this.yAbExposure=yAbExposure; + } + public float getSbExposure() + { + return sbExposure; + } + public void setSbExposure(float sbExposure) + { + this.sbExposure=sbExposure; + } + public float getYSbExposure() + { + return ySbExposure; + } + public void setYSbExposure(float ySbExposure) + { + this.ySbExposure=ySbExposure; + } + public float getAreaPnlAmt() + { + return areaPnlAmt; + } + public void setAreaPnlAmt(float areaPnlAmt) + { + this.areaPnlAmt=areaPnlAmt; + } + public float getSectorPnlAmt() + { + return sectorPnlAmt; + } + public void setSectorPnlAmt(float sectorPnlAmt) + { + this.sectorPnlAmt=sectorPnlAmt; + } + public float getPnlPerc() + { + return pnlPerc; + } + public void setPnlPerc(float pnlPerc) + { + this.pnlPerc=pnlPerc; + } + public float getPriceChange() + { + return priceChange; + } + public void setPriceChange(float priceChange) + { + this.priceChange=priceChange; + } + public float getPriceChangePerc() + { + return priceChangePerc; + } + public void setPriceChangePerc(float priceChangePerc) + { + this.priceChangePerc=priceChangePerc; + } + public float getPriceChangeAmt() + { + return priceChangeAmt; + } + public void setPriceChangeAmt(float priceChangeAmt) + { + this.priceChangeAmt=priceChangeAmt; + } + public float getSectorAlphaPerc() + { + return sectorAlphaPerc; + } + public void setSectorAlphaPerc(float sectorAlphaPerc) + { + this.sectorAlphaPerc=sectorAlphaPerc; + } + public float getGroupAlphaPerc() + { + return groupAlphaPerc; + } + public void setGroupAlphaPerc(float groupAlphaPerc) + { + this.groupAlphaPerc=groupAlphaPerc; + } + public float getAreaAlphaPerc() + { + return areaAlphaPerc; + } + public void setAreaAlphaPerc(float areaAlphaPerc) + { + this.areaAlphaPerc=areaAlphaPerc; + } + public float getSectorAlphaAmt() + { + return sectorAlphaAmt; + } + public void setSectorAlphaAmt(float sectorAlphaAmt) + { + this.sectorAlphaAmt=sectorAlphaAmt; + } + public float getGroupAlphaAmt() + { + return groupAlphaAmt; + } + public void setGroupAlphaAmt(float groupAlphaAmt) + { + this.groupAlphaAmt=groupAlphaAmt; + } + public float getAreaAlphaAmt() + { + return areaAlphaAmt; + } + public void setAreaAlphaAmt(float areaAlphaAmt) + { + this.areaAlphaAmt=areaAlphaAmt; + } + public float getAbReturnAmt() + { + return abReturnAmt; + } + public void setAbReturnAmt(float abReturnAmt) + { + this.abReturnAmt=abReturnAmt; + } + public float getAbReturnPerc() + { + return abReturnPerc; + } + public void setAbReturnPerc(float abReturnPerc) + { + this.abReturnPerc=abReturnPerc; + } + public float getIntradayPerc() + { + return intradayPerc; + } + public void setIntradayPerc(float intradayPerc) + { + this.intradayPerc=intradayPerc; + } + public float getIntradayAmt() + { + return intradayAmt; + } + public void setIntradayAmt(float intradayAmt) + { + this.intradayAmt=intradayAmt; + } + public float getOptionalityAmt() + { + return optionalityAmt; + } + public void setOptionalityAmt(float optionalityAmt) + { + this.optionalityAmt=optionalityAmt; + } + public float getOptionalityPerc() + { + return optionalityPerc; + } + public void setOptionalityPerc(float optionalityPerc) + { + this.optionalityPerc=optionalityPerc; + } + public String getCurrency() + { + return currency; + } + public void setCurrency(String currency) + { + this.currency=currency; + } + public float getBaseClose() + { + return baseClose; + } + public void setBaseClose(float baseClose) + { + this.baseClose=baseClose; + } + public float getYBaseClose() + { + return yBaseClose; + } + public void setYBaseClose(float yBaseClose) + { + this.yBaseClose=yBaseClose; + } + public float getFxPerc() + { + return fxPerc; + } + public void setFxPerc(float fxPerc) + { + this.fxPerc=fxPerc; + } + public float getFxAmt() + { + return fxAmt; + } + public void setFxAmt(float fxAmt) + { + this.fxAmt=fxAmt; + } + public float getFxRate() + { + return fxRate; + } + public void setFxRate(float fxRate) + { + this.fxRate=fxRate; + } + public float getYFxRate() + { + return yFxRate; + } + public void setYFxRate(float yFxRate) + { + this.yFxRate=yFxRate; + } + public float getAltIndexReturnPerc() + { + return altIndexReturnPerc; + } + public void setAltIndexReturnPerc(float altIndexReturnPerc) + { + this.altIndexReturnPerc=altIndexReturnPerc; + } + public float getAltIndexReturnAmt() + { + return altIndexReturnAmt; + } + public void setAltIndexReturnAmt(float altIndexReturnAmt) + { + this.altIndexReturnAmt=altIndexReturnAmt; + } + public float getIndexBetaAdjPerc() + { + return indexBetaAdjPerc; + } + public void setIndexBetaAdjPerc(float indexBetaAdjPerc) + { + this.indexBetaAdjPerc=indexBetaAdjPerc; + } + public float getIndexBetaAdjAmt() + { + return indexBetaAdjAmt; + } + public void setIndexBetaAdjAmt(float indexBetaAdjAmt) + { + this.indexBetaAdjAmt=indexBetaAdjAmt; + } + public float getVwap() + { + return vwap; + } + public void setVwap(float vwap) + { + this.vwap=vwap; + } + public float getVwapPnl() + { + return vwapPnl; + } + public void setVwapPnl(float vwapPnl) + { + this.vwapPnl=vwapPnl; + } + public float getHedgeAlphaAmt() + { + return hedgeAlphaAmt; + } + public void setHedgeAlphaAmt(float hedgeAlphaAmt) + { + this.hedgeAlphaAmt=hedgeAlphaAmt; + } + public String getExposureView() + { + return exposureView; + } + public void setExposureView(String exposureView) + { + this.exposureView=exposureView; + } + public String getMarketView() + { + return marketView; + } + public void setMarketView(String marketView) + { + this.marketView=marketView; + } + public String getCallPut() + { + return callPut; + } + public void setCallPut(String callPut) + { + this.callPut=callPut; + } + public String get[month]() + { + return [month]; + } + public void set[month](String [month]) + { + this.[month]=[month]; + } + public boolean getPrivate() + { + return private; + } + public void setPrivate(boolean private) + { + this.private=private; + } + public boolean getIpo() + { + return ipo; + } + public void setIpo(boolean ipo) + { + this.ipo=ipo; + } + public float getRatio() + { + return ratio; + } + public void setRatio(float ratio) + { + this.ratio=ratio; + } + public String getSource() + { + return source; + } + public void setSource(String source) + { + this.source=source; + } + public Timestamp getGoAround() + { + return goAround; + } + public void setGoAround(Timestamp goAround) + { + this.goAround=goAround; + } + public float getAdh() + { + return adh; + } + public void setAdh(float adh) + { + this.adh=adh; + } + public float getAac() + { + return aac; + } + public void setAac(float aac) + { + this.aac=aac; + } + public float getAzap() + { + return azap; + } + public void setAzap(float azap) + { + this.azap=azap; + } + public boolean getExported() + { + return exported; + } + public void setExported(boolean exported) + { + this.exported=exported; + } + public float getHedgeAlphaPerc() + { + return hedgeAlphaPerc; + } + public void setHedgeAlphaPerc(float hedgeAlphaPerc) + { + this.hedgeAlphaPerc=hedgeAlphaPerc; + } + public float getAlphaGoAround() + { + return alphaGoAround; + } + public void setAlphaGoAround(float alphaGoAround) + { + this.alphaGoAround=alphaGoAround; + } + public float getAlphaReal() + { + return alphaReal; + } + public void setAlphaReal(float alphaReal) + { + this.alphaReal=alphaReal; + } + public float getAlphaUnreal() + { + return alphaUnreal; + } + public void setAlphaUnreal(float alphaUnreal) + { + this.alphaUnreal=alphaUnreal; + } + public float getPnlReal() + { + return pnlReal; + } + public void setPnlReal(float pnlReal) + { + this.pnlReal=pnlReal; + } + public float getPnlUnreal() + { + return pnlUnreal; + } + public void setPnlUnreal(float pnlUnreal) + { + this.pnlUnreal=pnlUnreal; + } + public float getCashFlow() + { + return cashFlow; + } + public void setCashFlow(float cashFlow) + { + this.cashFlow=cashFlow; + } + public float getBetaCashFlow() + { + return betaCashFlow; + } + public void setBetaCashFlow(float betaCashFlow) + { + this.betaCashFlow=betaCashFlow; + } + public Timestamp getLastTradeDate() + { + return lastTradeDate; + } + public void setLastTradeDate(Timestamp lastTradeDate) + { + this.lastTradeDate=lastTradeDate; + } + public float getLastTradeQty() + { + return lastTradeQty; + } + public void setLastTradeQty(float lastTradeQty) + { + this.lastTradeQty=lastTradeQty; + } + public float getEnterpriseValue() + { + return enterpriseValue; + } + public void setEnterpriseValue(float enterpriseValue) + { + this.enterpriseValue=enterpriseValue; + } + public String getAssociate() + { + return associate; + } + public void setAssociate(String associate) + { + this.associate=associate; + } +}; diff --git a/proto/HistoricRS.java b/proto/HistoricRS.java new file mode 100644 index 0000000..5d67e3e --- /dev/null +++ b/proto/HistoricRS.java @@ -0,0 +1,53 @@ +package zbi.risk.server.vhi.mapped + +public class HistoricDA +{ + public List readAll()throws SQLException + { + Statement statement=null; + ResultSet rs=null; + Connection connection=null; + String strQuery=null; + List list=null; + + try + { + = new + connection=getConnection(); + statement=connection.createStatement(); + list=new ArrayList(); + strQuery="select jdjdjd djdjdjd djdjdjd from "; + rs=statement.executeQuery(strQuery); + while(rs.next()) + { + + list.add(); + } + return list; + } + finally + { + if(null!=rs)rs.close(); + if(null!=statement)statement.close(); + } + } +}; + +private Connection getConnection()throws SQLException +{ + try + { + InitialContext jndiCntx=new InitialContext(); + DataSource ds=(DataSource)jndiCntx.lookup("java:MailDb"); + jndiCntx.close(); + return ds.getConnection(); + } + catch(NamingException exception) + { + message("[MailEJB::getConnection] Object not found"); + throw new EJBException(exception); + } +} + + + diff --git a/proto/HookDLL.dsp b/proto/HookDLL.dsp new file mode 100644 index 0000000..c08c1ac --- /dev/null +++ b/proto/HookDLL.dsp @@ -0,0 +1,106 @@ +# Microsoft Developer Studio Project File - Name="HookDLL" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=HookDLL - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "HookDLL.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "HookDLL.mak" CFG="HookDLL - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "HookDLL - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "HookDLL - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "HookDLL - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOKDLL_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOKDLL_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "HookDLL - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "HookDLL___Win32_Debug" +# PROP BASE Intermediate_Dir "HookDLL___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOKDLL_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HOOKDLL_EXPORTS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "HookDLL - Win32 Release" +# Name "HookDLL - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\hookdll.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/proto/HookDLL.dsw b/proto/HookDLL.dsw new file mode 100644 index 0000000..b17c908 --- /dev/null +++ b/proto/HookDLL.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "HookDLL"=.\HookDLL.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/proto/HookDLL.ncb b/proto/HookDLL.ncb new file mode 100644 index 0000000..b6e5318 Binary files /dev/null and b/proto/HookDLL.ncb differ diff --git a/proto/HookDLL.opt b/proto/HookDLL.opt new file mode 100644 index 0000000..c51c5b5 Binary files /dev/null and b/proto/HookDLL.opt differ diff --git a/proto/HookDLL.plg b/proto/HookDLL.plg new file mode 100644 index 0000000..9db70b2 --- /dev/null +++ b/proto/HookDLL.plg @@ -0,0 +1,26 @@ + + +
+

Build Log

+

+--------------------Configuration: HookDLL - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP13F.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"debug/HookDLL.pdb" /debug /machine:I386 /out:"debug/HookDLL.dll" /implib:"debug/HookDLL.lib" /pdbtype:sept +.\debug\hookdll.obj +\work\exe\mscommon.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP13F.tmp" +

Output Window

+Linking... + Creating library debug/HookDLL.lib and object debug/HookDLL.exp + + + +

Results

+HookDLL.dll - 0 error(s), 0 warning(s) +
+ + diff --git a/proto/Main.cpp b/proto/Main.cpp new file mode 100644 index 0000000..fd514f5 --- /dev/null +++ b/proto/Main.cpp @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include +#include +#include + + +void DumpSamplesWORD(PureSampleEx &pureSample); + + +void main() +{ + String wavePathFileName3="f:\\AudioBounce.wav"; + +// int length = sizeof(SampleData); +// length = sizeof(int); // 4 BYTES 32 BITS +// length = sizeof(BYTE); // 1 BYTE 8 BITS +// length = sizeof(DWORD); // 4 BYTES 32 BITS +// length = sizeof(WORD); // 2 BYTES 16 BITS + + + SmartPointer waveForm(::new WaveForm(wavePathFileName3),PointerDisposition::Delete); + ::OutputDebugString((*waveForm).toString()); + + PureSampleEx &pureSample=waveForm->getPureSample(); + DWORD sizeBytes=pureSample.getSizeBytes(); + DWORD numSamples=pureSample.getNumSamples(); + PureSampleEx::BitsPerSample bitsPerSample=pureSample.getBitsPerSample(); + + switch(bitsPerSample) + { + case PureSampleEx::Bit4 : + break; + case PureSampleEx::Bit8 : + break; + case PureSampleEx::Bit16 : + DumpSamplesWORD(pureSample); + break; + case PureSampleEx::Bit32 : + break; + } + +//BitsPerSample{Bit4=4,Bit8=8,Bit16=16,Bit32=32}; + + + SmartPointer pureWave(new PureWave(),PointerDisposition::Delete); + pureWave->play(*waveForm); + + + + ::OutputDebugString("Here"); + +} + +void DumpSamplesWORD(PureSampleEx &pureSample) +{ + String crlf("\r\n"); + SmartPointer outFile(::new FileHandle("c:\\work\\proto\\debug\\samples.csv",FileHandle::Access::Write,FileHandle::Share::ShareNone,FileHandle::Mode::Create), PointerDisposition::Delete); + outFile.disposition(PointerDisposition::Disposition::Delete); + outFile->disposition(FileHandle::Disposition::CloseHandle); + + WORD *pSampleDataWORD=(WORD*)pureSample.getSampleData(); + DWORD numSamples=pureSample.getNumSamples(); + + outFile->write("Index,Sample"); + outFile->write(crlf); + + for(long index=0;index sb(::new StringBuffer(),PointerDisposition::Delete); + + sb->append(String().fromInt(index+1)); + sb->append(","); + sb->append(String().fromUShort(pSampleDataWORD[index])); + sb->append(crlf); + outFile->write(sb->toString()); + } + + + outFile->flush(); + outFile->close(); +} + + +/* + + +// (*waveForm).save("c:\\work\\exe\\DSPDIEHI_2.WAV"); + + + +// WaveForm *pWaveForm = new WaveForm(wavePathFileName); + // PureWave *pPureWave = new PureWave(); + +// pPureWave->play(*pWaveForm); + + + + +// ::delete[] pWaveForm; +// ::delete[] pPureWave; + +// String wavePathFileName="c:\\work\\exe\\DSPDIEHI.WAV"; +// String wavePathFileName2="C:\\Program Files\\Activision\\A-10Cuba\\Media\\Afterburner.wav"; + +// SmartPointer waveForm(new WaveForm(wavePathFileName),PointerDisposition::Delete); +// ::OutputDebugString((*waveForm).toString()); +// waveForm.destroy(); + +// waveForm=new WaveForm(wavePathFileName2); +// waveForm.disposition(PointerDisposition::Delete); +// waveForm->save("c:\\work\\exe\\Afterburner.WAV"); +// ::OutputDebugString((*waveForm).toString()); + + // SimpleObject *pSimpleObject; +// pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); +*/ + + + diff --git a/proto/NameValuePair.hpp b/proto/NameValuePair.hpp new file mode 100644 index 0000000..226e712 --- /dev/null +++ b/proto/NameValuePair.hpp @@ -0,0 +1,72 @@ +#ifndef _PROTO_NAMEVALUE_HPP_ +#define _PROTO_NAMEVALUE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class NameValuePair +{ +public: + NameValuePair(); + NameValuePair(const String &name,const String &value); + const String &getName(void)const; + void setName(const String &name); + const String &getValue(void)const; + void setValue(const String &value); + bool fromString(const String &string); + String toString(void)const; +private: + String mName; + String mValue; +}; + +inline +NameValuePair::NameValuePair() +{ +} + +inline +NameValuePair::NameValuePair(const String &name,const String &value) +: mName(name), mValue(value) +{ +} + +inline +const String &NameValuePair::getName(void)const +{ + return mName; +} + +inline +void NameValuePair::setName(const String &name) +{ + mName=name; +} + +inline +const String &NameValuePair::getValue(void)const +{ + return mValue; +} + +inline +void NameValuePair::setValue(const String &value) +{ + mValue=value; +} + +inline +bool NameValuePair::fromString(const String &string) +{ + if(string.isNull())return false; + mName=string.betweenString(0,'='); + mValue=string.betweenString('=',0); + return true; +} + +inline +String NameValuePair::toString(void)const +{ + return mName+String("=")+mValue; +} +#endif diff --git a/proto/PAINT.ICO b/proto/PAINT.ICO new file mode 100644 index 0000000..6655e54 Binary files /dev/null and b/proto/PAINT.ICO differ diff --git a/proto/PROCLIB.MDP b/proto/PROCLIB.MDP new file mode 100644 index 0000000..b166646 Binary files /dev/null and b/proto/PROCLIB.MDP differ diff --git a/proto/PROTO.~RC b/proto/PROTO.~RC new file mode 100644 index 0000000..704adbe --- /dev/null +++ b/proto/PROTO.~RC @@ -0,0 +1,2 @@ +#include + diff --git a/proto/RCa01028 b/proto/RCa01028 new file mode 100644 index 0000000..f56a892 Binary files /dev/null and b/proto/RCa01028 differ diff --git a/proto/ReadMe.txt b/proto/ReadMe.txt new file mode 100644 index 0000000..f8abbe0 --- /dev/null +++ b/proto/ReadMe.txt @@ -0,0 +1,37 @@ +======================================================================== + DYNAMIC LINK LIBRARY : dlltest +======================================================================== + + +AppWizard has created this dlltest DLL for you. + +This file contains a summary of what you will find in each of the files that +make up your dlltest application. + +dlltest.dsp + This file (the project file) contains information at the project level and + is used to build a single project or subproject. Other users can share the + project (.dsp) file, but they should export the makefiles locally. + +dlltest.cpp + This is the main DLL source file. + +dlltest.h + This file contains your DLL exports. + +///////////////////////////////////////////////////////////////////////////// +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named dlltest.pch and a precompiled types file named StdAfx.obj. + + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + + +///////////////////////////////////////////////////////////////////////////// diff --git a/proto/StdAfx.cpp b/proto/StdAfx.cpp new file mode 100644 index 0000000..ae64a42 --- /dev/null +++ b/proto/StdAfx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// dlltest.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/proto/cbtdll.dsp b/proto/cbtdll.dsp new file mode 100644 index 0000000..d3c09f7 --- /dev/null +++ b/proto/cbtdll.dsp @@ -0,0 +1,107 @@ +# Microsoft Developer Studio Project File - Name="cbtdll" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=cbtdll - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "cbtdll.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "cbtdll.mak" CFG="cbtdll - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "cbtdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "cbtdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "cbtdll - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CBTDLL_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CBTDLL_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "cbtdll - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "cbtdll___Win32_Debug" +# PROP BASE Intermediate_Dir "cbtdll___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CBTDLL_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CBTDLL_EXPORTS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "cbtdll - Win32 Release" +# Name "cbtdll - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\dllmain.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/proto/cbtdll.dsw b/proto/cbtdll.dsw new file mode 100644 index 0000000..6f3fe56 --- /dev/null +++ b/proto/cbtdll.dsw @@ -0,0 +1,59 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "cbtdll"=.\cbtdll.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\thread\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/proto/cbtdll.ncb b/proto/cbtdll.ncb new file mode 100644 index 0000000..20a872d Binary files /dev/null and b/proto/cbtdll.ncb differ diff --git a/proto/cbtdll.opt b/proto/cbtdll.opt new file mode 100644 index 0000000..5ed72a3 Binary files /dev/null and b/proto/cbtdll.opt differ diff --git a/proto/cbtdll.plg b/proto/cbtdll.plg new file mode 100644 index 0000000..6dcbcab --- /dev/null +++ b/proto/cbtdll.plg @@ -0,0 +1,34 @@ + + +
+

Build Log

+

+--------------------Configuration: cbtdll - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPB8.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CBTDLL_EXPORTS" /D "STRICT" /D "__FLAT__" /Fp"Debug/cbtdll.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"D:\work\proto\dllmain.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPB8.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPB9.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/cbtdll.pdb" /map:"Debug/cbtdll.map" /debug /machine:I386 /out:"Debug/cbtdll.dll" /implib:"Debug/cbtdll.lib" /pdbtype:sept +.\Debug\dllmain.obj +\work\exe\mscommon.lib +\work\exe\msthread.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPB9.tmp" +

Output Window

+Compiling... +dllmain.cpp +Linking... + + + +

Results

+cbtdll.dll - 0 error(s), 0 warning(s) +
+ + diff --git a/proto/dllmain.cpp b/proto/dllmain.cpp new file mode 100644 index 0000000..4ccbce6 --- /dev/null +++ b/proto/dllmain.cpp @@ -0,0 +1,228 @@ +#include +#include +#include +#include +#include +#include + +extern "C" +{ +__declspec(dllexport) bool FAR PASCAL unHook(void); +__declspec(dllexport) bool FAR PASCAL setHook(void); +} + +bool validate(CREATESTRUCT &createStruct); + +LRESULT CALLBACK cbtHookProc(int nCode,WPARAM wParam,LPARAM lParam); + +LRESULT handleActive(WPARAM wParam,LPARAM lParam); +LRESULT handleClickSkipped(WPARAM wParam,LPARAM lParam); +LRESULT handleCreateWnd(WPARAM wParam,LPARAM lParam); +LRESULT handleDestroyWnd(WPARAM wParam,LPARAM lParam); +LRESULT handleKeySkipped(WPARAM wParam,LPARAM lParam); +LRESULT handleMinMax(WPARAM wParam,LPARAM lParam); +LRESULT handleMoveSize(WPARAM wParam,LPARAM lParam); +LRESULT handleQs(WPARAM wParam,LPARAM lParam); +LRESULT handleSetFocus(WPARAM wParam,LPARAM lParam); +LRESULT handleSysCommand(WPARAM wParam,LPARAM lParam); + +HHOOK smhHook=(HHOOK)0; +Mutex mutex; +File outFile("d:\\log.txt","a+b"); + +BOOL WINAPI DLLMain(HINSTANCE hDLLInst,DWORD dwReason,LPVOID lpReserved) +{ + switch(dwReason) + { + case DLL_PROCESS_ATTACH : + ::printf("Process attach\n"); + break; + case DLL_PROCESS_DETACH : + ::printf("Process detach\n"); + break; + case DLL_THREAD_ATTACH : + ::printf("Thread attach\n"); + break; + case DLL_THREAD_DETACH : + ::printf("Thread detach\n"); + break; + default : + break; + } + return TRUE; +} + +bool FAR PASCAL setHook(void) +{ + HINSTANCE hInst=::GetModuleHandle("cbtdll"); + if(!hInst)return false; + smhHook=::SetWindowsHookEx(WH_CBT,(HOOKPROC)&cbtHookProc,hInst,0); + return smhHook?true:false; +} + +bool FAR PASCAL unHook() +{ + if(!smhHook)return false; + ::UnhookWindowsHookEx(smhHook); + smhHook=0; + return true; +} + +LRESULT CALLBACK cbtHookProc(int nCode,WPARAM wParam,LPARAM lParam) +{ + LRESULT result; + if(nCode<0)return result=::CallNextHookEx(smhHook,nCode,wParam,lParam); + switch(nCode) + { + case HCBT_ACTIVATE : + result=handleActive(wParam,lParam); + break; + case HCBT_CLICKSKIPPED : + result=handleClickSkipped(wParam,lParam); + break; + case HCBT_CREATEWND : + result=handleCreateWnd(wParam,lParam); + break; + case HCBT_DESTROYWND : + result=handleDestroyWnd(wParam,lParam); + break; + case HCBT_KEYSKIPPED : + result=handleKeySkipped(wParam,lParam); + break; + case HCBT_MINMAX : + result=handleMinMax(wParam,lParam); + break; + case HCBT_MOVESIZE : + result=handleMoveSize(wParam,lParam); + break; + case HCBT_QS : + result=handleQs(wParam,lParam); + break; + case HCBT_SETFOCUS : + result=handleSetFocus(wParam,lParam); + break; + case HCBT_SYSCOMMAND : + result=handleSysCommand(wParam,lParam); + break; + } + return result; +} + +// ************************************************************************************************ + +LRESULT handleActive(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleClickSkipped(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleCreateWnd(WPARAM wParam,LPARAM lParam) +{ + CBT_CREATEWND *pCBTCreateWnd; + CREATESTRUCT *pCreateStruct; + HWND hWnd; + HWND hwndParent; + String windowName; + String parentText; + String strLine; + + hWnd=(HWND)wParam; + pCBTCreateWnd=(CBT_CREATEWND*)lParam; + if(!pCBTCreateWnd) + { + return 0; + } + pCreateStruct=pCBTCreateWnd->lpcs; + if(!pCreateStruct) + { + return 0; + } + hwndParent=pCreateStruct->hwndParent; + windowName=pCreateStruct->lpszName; + parentText.reserve(String::MaxString); + ::GetWindowText(hwndParent,parentText,String::MaxString); + + strLine.reserve(1024); + ::sprintf(strLine.str(),"window name=%s, parent=%s",windowName.str(),parentText.str()); + + mutex.requestMutex(); + outFile.writeLine(strLine); + outFile.flush(); + mutex.releaseMutex(); + + if(!validate(*pCreateStruct)) + { + outFile.writeLine("Not allowing child window to activate"); + outFile.flush(); + return 1; + } + + + return 0; +} + +LRESULT handleDestroyWnd(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleKeySkipped(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleMinMax(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleMoveSize(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleQs(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleSetFocus(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +LRESULT handleSysCommand(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +STDAPI DllCanUnloadNow(void) +{ + ::printf("DllCanUnloadNow\n"); + return S_OK; // S_FALSE +} + +STDAPI DllUnregisterServer(void) +{ + ::printf("DllUnregisterServer\n"); + return S_OK; +} + +bool validate(CREATESTRUCT &createStruct) +{ + String parentText; + String moduleFileName; + + moduleFileName.reserve(512); + ::GetModuleFileName(createStruct.hInstance,moduleFileName.str(),512); + outFile.writeLine(moduleFileName); + parentText.reserve(String::MaxString); + ::GetWindowText(createStruct.hwndParent,parentText,String::MaxString); +// if(parentText==String("Internet Explorer"))return false; +// if(parentText==String("Microsoft Internet Explorer"))return false; + return true; +} diff --git a/proto/dlltest.cpp b/proto/dlltest.cpp new file mode 100644 index 0000000..8b0b6c4 --- /dev/null +++ b/proto/dlltest.cpp @@ -0,0 +1,96 @@ +#include +#include +#include +#include +#include +#include + +map instanceData; + +typedef struct tagTICKDATA +{ + float tradePrice; + float bidPrice; + float askPrice; + SYSTEMTIME systemTime; + bool isTrade; +}TICKDATA; + +FileMap fileMap; + +void createTickData(Block &tickData); + +extern "C" +{ + __declspec(dllexport) bool PASCAL GetTicks(char *pTickers,SYSTEMTIME *pStartDate,SYSTEMTIME *pEndDate,char *pHandle); +} + +bool APIENTRY DllMain(HANDLE hModule,DWORD reason,LPVOID lpReserved) +{ + switch(reason) + { + case DLL_PROCESS_ATTACH: + break; + case DLL_THREAD_ATTACH: + instanceData[(int)::GetCurrentThreadId]=int((int*)new FileMap()); +// MessageBox(0,"DLLTEST","DLL_THREAD_ATTACH",MB_OK); + break; + case DLL_THREAD_DETACH: +// ::delete (FileMap*)instanceData[(int)::GetCurrentThreadId]; +// MessageBox(0,"DLLTEST","DLL_THREAD_DETACH",MB_OK); + break; + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +bool PASCAL GetTicks(char *pTickers,SYSTEMTIME *pStartDate,SYSTEMTIME *pEndDate,char *pDataHandle) +{ + Block tickDataBlock; + PureViewOfFile pureView; + +// DebugBreak(); + FileMap *pFileMap=(FileMap*)instanceData[(int)::GetCurrentThreadId()]; + if(!pFileMap){pFileMap=new FileMap();instanceData[(int)::GetCurrentThreadId()]=(int)pFileMap;} + String str=String(pTickers)+String(" ")+SystemTime(*pStartDate).toString()+String(" ")+SystemTime(*pEndDate).toString(); +// MessageBox(0,"GetTicks",str.str(),MB_OK); + createTickData(tickDataBlock); + ::sprintf(pDataHandle,"%08lx%08lx",(int)GetCurrentProcessId(),(int)GetCurrentThreadId()); + if(!pFileMap->create((char*)pDataHandle,0,tickDataBlock.size()*sizeof(TICKDATA),FileMap::ReadWrite,FileMap::Commit))return false; + pureView.createView(*pFileMap); + pureView.write((int)sizeof(TICKDATA)); + pureView.write((int)tickDataBlock.size()); + for(int index=0;index &tickDataBlock) +{ + tickDataBlock.remove(); + + tickDataBlock.insert(&TICKDATA()); + TICKDATA *pTickData=&tickDataBlock[tickDataBlock.size()-1]; + pTickData->tradePrice=100; + pTickData->bidPrice=0; + pTickData->askPrice=0; + pTickData->systemTime=SystemTime(2003,5,1).getSYSTEMTIME(); + pTickData->isTrade=true; + tickDataBlock.insert(&TICKDATA()); + pTickData=&tickDataBlock[tickDataBlock.size()-1]; + pTickData->tradePrice=0; + pTickData->bidPrice=101.90; + pTickData->askPrice=0; + pTickData->systemTime=SystemTime(2003,5,1).getSYSTEMTIME(); + pTickData->isTrade=false; +} + diff --git a/proto/dlltest.dsp b/proto/dlltest.dsp new file mode 100644 index 0000000..0a4fb64 --- /dev/null +++ b/proto/dlltest.dsp @@ -0,0 +1,118 @@ +# Microsoft Developer Studio Project File - Name="dlltest" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=dlltest - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "dlltest.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "dlltest.mak" CFG="dlltest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "dlltest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "dlltest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/Risk/Utility/Sample/Sql", BBHAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "dlltest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLTEST_EXPORTS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLTEST_EXPORTS" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "dlltest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "dlltest___Win32_Debug" +# PROP BASE Intermediate_Dir "dlltest___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLTEST_EXPORTS" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLTEST_EXPORTS" /D "STRICT" /D "__FLAT__" /FD /GZ /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "dlltest - Win32 Release" +# Name "dlltest - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\dlltest.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\dlltest.h +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\ReadMe.txt +# End Source File +# End Target +# End Project diff --git a/proto/dlltest.dsw b/proto/dlltest.dsw new file mode 100644 index 0000000..8232d3b --- /dev/null +++ b/proto/dlltest.dsw @@ -0,0 +1,52 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ + begin source code control + "$/Risk/Utility/Sample/Sql", BBHAAAAA + . + end source code control +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dlltest"=.\dlltest.dsp - Package Owner=<4> + +Package=<5> +{{{ + begin source code control + "$/Risk/Utility/Sample/Sql", BBHAAAAA + . + end source code control +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/proto/dlltest.opt b/proto/dlltest.opt new file mode 100644 index 0000000..61f5ae3 Binary files /dev/null and b/proto/dlltest.opt differ diff --git a/proto/dlltest.plg b/proto/dlltest.plg new file mode 100644 index 0000000..fc5b366 --- /dev/null +++ b/proto/dlltest.plg @@ -0,0 +1,33 @@ + + +
+

Build Log

+

+--------------------Configuration: dlltest - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPE2.tmp" with contents +[ +/nologo /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLTEST_EXPORTS" /D "STRICT" /D "__FLAT__" /Fo"debug/" /Fd"debug/" /FD /GZ /c +"D:\work\proto\dlltest.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPE2.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPE3.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"debug/dlltest.pdb" /debug /machine:I386 /out:"debug/dlltest.dll" /implib:"debug/dlltest.lib" /pdbtype:sept +.\debug\dlltest.obj +\work\exe\mscommon.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPE3.tmp" +

Output Window

+Compiling... +dlltest.cpp +Linking... + + + +

Results

+dlltest.dll - 0 error(s), 0 warning(s) +
+ + diff --git a/proto/file2.cpp b/proto/file2.cpp new file mode 100644 index 0000000..d1076cb --- /dev/null +++ b/proto/file2.cpp @@ -0,0 +1,13 @@ + + +/* + + +extern int data; + +void foo2() +{ + data=2; +} + + */ \ No newline at end of file diff --git a/proto/foo.dat b/proto/foo.dat new file mode 100644 index 0000000..f466739 Binary files /dev/null and b/proto/foo.dat differ diff --git a/proto/hookdll.cpp b/proto/hookdll.cpp new file mode 100644 index 0000000..89ca0a0 --- /dev/null +++ b/proto/hookdll.cpp @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include + +extern "C" +{ +__declspec(dllexport) bool FAR PASCAL unHook(void); +__declspec(dllexport) bool FAR PASCAL setHook(void); +} + +LRESULT CALLBACK callWndHookProc(int nCode,WPARAM wParam,LPARAM lParam); +void handleMessage(UINT message,HWND hwnd,WPARAM wParam,LPARAM lParam); + +HHOOK smhHook=(HHOOK)0; +File outFile("d:\log.txt","wb"); +HINSTANCE hModuleInst; + +BOOL _stdcall DllMain(HINSTANCE hDLLInst,DWORD dwReason,LPVOID lpReserved) +{ + switch(dwReason) + { + case DLL_PROCESS_ATTACH : + hModuleInst=hDLLInst; + ::printf("Process attach: 0x%08lx\n",hModuleInst); + break; + case DLL_PROCESS_DETACH : + ::printf("Process detach\n"); + break; + case DLL_THREAD_ATTACH : + ::printf("Thread attach\n"); + break; + case DLL_THREAD_DETACH : + ::printf("Thread detach\n"); + break; + default : + break; + } + return TRUE; +} + +bool FAR PASCAL setHook(void) +{ + smhHook=::SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)&callWndHookProc,hModuleInst,0); + return smhHook?true:false; +} + +bool FAR PASCAL unHook() +{ + if(!smhHook)return false; + ::UnhookWindowsHookEx(smhHook); + smhHook=0; + return true; +} + +LRESULT CALLBACK callWndHookProc(int nCode,WPARAM wParam,LPARAM lParam) +{ + LRESULT result=0; + CWPSTRUCT *pCWPSTRUCT=(CWPSTRUCT*)lParam; + printf("callWndHookProc\n"); + handleMessage(pCWPSTRUCT->message,pCWPSTRUCT->hwnd,pCWPSTRUCT->wParam,pCWPSTRUCT->lParam); + if(nCode<0)return result=::CallNextHookEx(smhHook,nCode,wParam,lParam); + return result; +} + +void handleMessage(UINT message,HWND hwnd,WPARAM wParam,LPARAM lParam) +{ + String outLine; + outLine.reserve(256); + ::sprintf(outLine.str(),"MESSAGE:%ld HWND:0x%08lx WPARAM:%d LPARAM:%ld",message,hwnd,wParam,lParam); + outFile.writeLine(outLine); + outFile.flush(); +} diff --git a/proto/main.cpp.saf b/proto/main.cpp.saf new file mode 100644 index 0000000..33c3313 --- /dev/null +++ b/proto/main.cpp.saf @@ -0,0 +1,304 @@ +#include +#include +#include +#include +#include + +class ClassMapper +{ +public: + ClassMapper(); + virtual ~ClassMapper(); + bool createClass(const String &packageName,String className,const String &databaseName,const String &tableName,const String &strPathMapFile,const String &strPathTable); +private: + bool loadMapping(const String &strPathMapFile); + bool mapType(const String &type,String &mapped); + bool createClass(const String &packageName,const String &className,Block &variables); + bool createDataAccess(const String &packageName,const String &className,const String &instanceName,const String &databaseName,const String &tableName,Block &variables,Block &originals); + + String makeHungarian(const String &name); + String makeAccessor(const String &name); + String makeMutator(const String &name); + String makeFirstUpper(const String &name); + String makeFirstLower(const String &name); + Block mNameValuePairs; +}; + +ClassMapper::ClassMapper() +{ +} + +ClassMapper::~ClassMapper() +{ +} + +bool ClassMapper::createClass(const String &packageName,String className,const String &databaseName,const String &tableName,const String &strPathMapFile,const String &strPathTable) +{ + File inFile; + String strLine; + String name; + String value; + String instanceName; + Block variables; + Block originals; + int errors=0; + + if(!loadMapping(strPathMapFile))return false; + if(!inFile.open(strPathTable,"rb"))return false; + while(true) + { + inFile.readLine(strLine); + if(strLine.isNull())break; + name=strLine.betweenString(0,' '); + value=strLine.betweenString(' ',' '); + if(!mapType(value,value)) + { + printf("Don't know how to map %s\n",value.str()); + errors++; + continue; + } + variables.insert(&NameValuePair(makeHungarian(name),value)); + originals.insert(&NameValuePair(name,value)); + } + inFile.close(); + if(errors)return false; + if(!variables.size())return false; + instanceName=makeFirstLower(className); + className=makeFirstUpper(className); + createClass(packageName,className,variables); + createDataAccess(packageName,className,instanceName,databaseName,tableName,variables,originals); + printf("generation completed.\n"); + return true; +} + +bool ClassMapper::createClass(const String &packageName,const String &className,Block &variables) +{ + File outFile; + + if(!outFile.open(className+String(".java"),"wb"))return false; + if(!packageName.isNull())outFile.writeLine(String("package ")+packageName); + outFile.writeLine("\t"); + outFile.writeLine("\t"); + outFile.writeLine(String("public class ")+className); + outFile.writeLine("{"); + for(int index=0;index &variables,Block &originals) +{ + File outFile; + String select; + + if(!outFile.open(className+String("DA")+String(".java"),"wb"))return false; + if(!packageName.isNull())outFile.writeLine(String("package ")+packageName); + outFile.writeLine("\t"); + outFile.writeLine("\t"); + + outFile.writeLine(String("public class ")+className+String("DA")); + outFile.writeLine("{"); + outFile.writeLine(" public List readAll()throws SQLException"); + outFile.writeLine(" {"); + outFile.writeLine(" Statement statement=null;"); + outFile.writeLine(" ResultSet rs=null;"); + outFile.writeLine(" Connection connection=null;"); + outFile.writeLine(" String strQuery=null;"); + outFile.writeLine(" List list=null;"); + outFile.writeLine("\t"); + + outFile.writeLine(" try"); + outFile.writeLine(" {"); + outFile.writeLine(String(" ")+className+String(" ")+instanceName+String(" = new ")+className+String("();")); + outFile.writeLine(" connection=getConnection();"); + outFile.writeLine(" statement=connection.createStatement();"); + outFile.writeLine(" list=new ArrayList();"); + select=" strQuery=\"select "; + for(int index=0;index=length)break; + index++; + ch=toupper(name.charAt(index)); + hungarianName+=ch; + } + else hungarianName+=ch; + } + return hungarianName; +} + +String ClassMapper::makeAccessor(const String &name) +{ + String str; + + str+="get"; + str+=toupper(name.charAt(0)); + str+=name.substr(1); + return str; +} + +String ClassMapper::makeMutator(const String &name) +{ + String str; + + str+="set"; + str+=toupper(name.charAt(0)); + str+=name.substr(1); + return str; +} + +String ClassMapper::makeFirstUpper(const String &name) +{ + String str; + str+=toupper(name.charAt(0)); + str+=name.substr(1); + return str; +} + +String ClassMapper::makeFirstLower(const String &name) +{ + String str; + str+=tolower(name.charAt(0)); + str+=name.substr(1); + return str; +} + + +#include +#include +extern "C" +{ + bool PASCAL GetTicks(char *pTickers,SYSTEMTIME *pStartDate,SYSTEMTIME *pEndDate,char *pHandle); +} + +int main(int argc,char **argv) +{ + SYSTEMTIME startTime; + SYSTEMTIME endTime; + char buffer[128]; + ::memset(buffer,0,sizeof(buffer)); + GetTicks("IBM",&startTime,&endTime,buffer); + FileMap fileMap; + if(!fileMap.open(buffer,0,128))return 0; + PureViewOfFile pureView(fileMap); + int size(0); + pureView.read(size); + + + + if(7!=argc) + { + printf("USAGE: mapclass \n"); + printf("(ie) mapclass zbi.risk.server.vhi.mapped Historic DRMS dt_main_positions c:\\work\\classgen\\mapping.txt c:\\work\\classgen\\table.txt\n"); + return 0; + } + ClassMapper classMapper; + if(!classMapper.createClass(argv[1],argv[2],argv[3],argv[4],argv[5],argv[6]))return 1; + return 0; +} + + diff --git a/proto/makeres.cpp b/proto/makeres.cpp new file mode 100644 index 0000000..1eaf539 --- /dev/null +++ b/proto/makeres.cpp @@ -0,0 +1,44 @@ +#include +#include +#include + +void main(int argc,char **argv) +{ + String strLine; + int startIndex=0; + int currentIndex=0; + int count=0; + + if(3!=argc) + { + ::printf("USAGE makeres \n"); + ::printf("(ie) makeres stringfile.txt 22000\n"); + return; + } + startIndex=String(argv[2]).toInt(); + File inFile(argv[1]); + if(!inFile.isOkay()) + { + printf("Error opening file.\n"); + return; + } + currentIndex=startIndex; + printf("STRINGTABLE DISCARDABLE\n"); + printf("BEGIN\n"); + while(true) + { + if(!inFile.readLine(strLine))break; + if(strLine.isNull())continue; + printf(" STRING_%d %s\n",currentIndex++,strLine.str()); + count++; + } + printf("END\n"); + printf("******************************************************\n"); + currentIndex=startIndex; + for(int index=0;index +#include + +int processCount=0; +File outFile; + +extern "C" +{ + __declspec(dllexport) FARPROC PASCAL GetProcAddress(HMODULE hModule,LPCSTR lpProcName); +// __declspec(dllexport) HMODULE PASCAL GetModuleHandle(LPCTSTR lpModuleName); +// __declspec(dllexport) HMODULE PASCAL LoadLibrary(LPCTSTR lpModuleName); +} + +BOOL WINAPI DLLMain(HINSTANCE hDLLInst,DWORD dwReason,LPVOID lpReserved) +{ + switch(dwReason) + { + case DLL_PROCESS_ATTACH : + if(!processCount)outFile.open("mykernel.log","wb"); + outFile.writeLine("Process attach"); + outFile.flush(); + processCount++; + break; + case DLL_PROCESS_DETACH : + if(processCount)outFile.writeLine("Process detach"); + if(--processCount<=0)outFile.close(); + break; + case DLL_THREAD_ATTACH : + break; + case DLL_THREAD_DETACH : + break; + default : + break; + } + return TRUE; +} + +//FARPROC PASCAL GetProcAddress(HMODULE hModule,LPCSTR lpProcName) +//{ +// return 0; +//} diff --git a/proto/mykernel.dsp b/proto/mykernel.dsp new file mode 100644 index 0000000..ee55969 --- /dev/null +++ b/proto/mykernel.dsp @@ -0,0 +1,106 @@ +# Microsoft Developer Studio Project File - Name="mykernel" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=mykernel - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mykernel.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mykernel.mak" CFG="mykernel - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mykernel - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "mykernel - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mykernel - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYKERNEL_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYKERNEL_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "mykernel - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "mykernel___Win32_Debug" +# PROP BASE Intermediate_Dir "mykernel___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYKERNEL_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W1 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYKERNEL_EXPORTS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "mykernel - Win32 Release" +# Name "mykernel - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\mykernel.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/proto/mykernel.dsw b/proto/mykernel.dsw new file mode 100644 index 0000000..94708fe --- /dev/null +++ b/proto/mykernel.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "mykernel"=.\mykernel.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/proto/mykernel.ncb b/proto/mykernel.ncb new file mode 100644 index 0000000..4c96b7c Binary files /dev/null and b/proto/mykernel.ncb differ diff --git a/proto/mykernel.opt b/proto/mykernel.opt new file mode 100644 index 0000000..c351012 Binary files /dev/null and b/proto/mykernel.opt differ diff --git a/proto/mykernel.plg b/proto/mykernel.plg new file mode 100644 index 0000000..3fb6abe --- /dev/null +++ b/proto/mykernel.plg @@ -0,0 +1,30 @@ + + +
+

Build Log

+

+--------------------Configuration: mykernel - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPE6.tmp" with contents +[ +/nologo /MTd /W1 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYKERNEL_EXPORTS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/mykernel.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /GZ /c +"D:\work\proto\mykernel.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPE6.tmp" +

Output Window

+Compiling... +mykernel.cpp +D:\work\proto\mykernel.cpp(9) : error C2556: 'int __stdcall GetProcAddress(struct HINSTANCE__ *,const char *)' : overloaded function differs only by return type from 'int (__stdcall *__stdcall GetProcAddress(struct HINSTANCE__ *,const char *))(void)' + d:\program files\microsoft visual studio\vc98\include\winbase.h(1108) : see declaration of 'GetProcAddress' +D:\work\proto\mykernel.cpp(9) : error C2373: 'GetProcAddress' : redefinition; different type modifiers + d:\program files\microsoft visual studio\vc98\include\winbase.h(1108) : see declaration of 'GetProcAddress' +Error executing cl.exe. + + + +

Results

+mykernel.obj - 2 error(s), 0 warning(s) +
+ + diff --git a/proto/proto.001 b/proto/proto.001 new file mode 100644 index 0000000..bb953df --- /dev/null +++ b/proto/proto.001 @@ -0,0 +1,130 @@ +# Microsoft Developer Studio Project File - Name="proto" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=proto - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "proto.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "proto.mak" CFG="proto - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "proto - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "proto - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "proto - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "proto - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\proto___" +# PROP BASE Intermediate_Dir ".\proto___" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib winmm.lib oleaut32.lib ole32.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 +# SUBTRACT LINK32 /map + +!ENDIF + +# Begin Target + +# Name "proto - Win32 Release" +# Name "proto - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\Paint.ico +# End Source File +# Begin Source File + +SOURCE=.\toolbar.bmp +# End Source File +# End Group +# Begin Source File + +SOURCE=..\Exe\com.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\psapint.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\toolbar.lib +# End Source File +# End Target +# End Project diff --git a/proto/proto.RC b/proto/proto.RC new file mode 100644 index 0000000..5777bbe --- /dev/null +++ b/proto/proto.RC @@ -0,0 +1,127 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXfINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +#include "proto\proto.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +PAINT ICON DISCARDABLE "PAINT.ICO" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +TOOLBAR BITMAP MOVEABLE PURE "TOOLBAR.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", FILE_OPEN + MENUITEM "E&xit", FILE_EXIT + MENUITEM "&Browse", FILE_BROWSE + END + POPUP "&Source" + BEGIN + MENUITEM "&Select...", SOURCE_SELECT + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""proto\\proto.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_IMAGEVIEWCLASSNAME "ImageView" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_VIDCAPKEYNAME "Software\\Diversified\\VidCap" + STRING_SETTINGSKEYNAME "Software\\Diversified\\VidCap\\Settings" + STRING_SETTINGSCAPTUREFILENAME "CaptureFile" + STRING_SETTINGSUSESEQUENCING "Sequencing" + STRING_SETTINGSPREVIEWWIDTH "PreviewWidth" + STRING_SETTINGSPREVIEWHEIGHT "PreviewHeight" + STRING_SETTINGSCAPTUREWIDTH "CaptureWidth" + STRING_SETTINGSCAPTUREHEIGHT "CaptureHeight" + STRING_SETTINGSPREVIEWRATE "PreviewRate" +END + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/proto/proto.dsp b/proto/proto.dsp new file mode 100644 index 0000000..dd0cf23 --- /dev/null +++ b/proto/proto.dsp @@ -0,0 +1,106 @@ +# Microsoft Developer Studio Project File - Name="proto" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=proto - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "proto.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "proto.mak" CFG="proto - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "proto - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "proto - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "proto - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "proto - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\proto___" +# PROP BASE Intermediate_Dir ".\proto___" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GR /GX /Zi /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /D "_MBCS" /D "_COMMON_USENLS_" /FR /YX"windows.hpp" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 comctl32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wininet.lib strmiids.lib winmm.lib vfw32.lib debug\HookDLL.lib version.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /out:"f:\work\proto\debug\proto.exe" + +!ENDIF + +# Begin Target + +# Name "proto - Win32 Release" +# Name "proto - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/proto/proto.dsw b/proto/proto.dsw new file mode 100644 index 0000000..05ec42c --- /dev/null +++ b/proto/proto.dsw @@ -0,0 +1,74 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "proto"=.\proto.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name sample + End Project Dependency +}}} + +############################################################################### + +Project: "sample"=..\sample\sample.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/proto/proto.mdp b/proto/proto.mdp new file mode 100644 index 0000000..b60ce09 Binary files /dev/null and b/proto/proto.mdp differ diff --git a/proto/proto.ncb b/proto/proto.ncb new file mode 100644 index 0000000..6f57837 Binary files /dev/null and b/proto/proto.ncb differ diff --git a/proto/proto.opt b/proto/proto.opt new file mode 100644 index 0000000..d37e86b Binary files /dev/null and b/proto/proto.opt differ diff --git a/proto/proto.plg b/proto/proto.plg new file mode 100644 index 0000000..63bd607 --- /dev/null +++ b/proto/proto.plg @@ -0,0 +1,354 @@ + + +
+

Build Log

+

+--------------------Configuration: common - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP605.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /FR"msvcobj/" /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\common\accelerator.cpp" +"F:\work\common\Bitmap.cpp" +"F:\work\common\Bminfo.cpp" +"F:\work\common\Bmplnk.cpp" +"F:\work\common\Brush.cpp" +"F:\work\common\Btnlnk.cpp" +"F:\work\common\calendar.cpp" +"F:\work\common\Catmull.cpp" +"F:\work\common\Cbdata.cpp" +"F:\work\common\Cbdatahk.cpp" +"F:\work\common\Clipbrd.cpp" +"F:\work\common\Console.cpp" +"F:\work\common\Control.cpp" +"F:\work\common\Crsctrl.cpp" +"F:\work\common\Ddemsg.cpp" +"F:\work\common\Dib.cpp" +"F:\work\common\Diskinfo.cpp" +"F:\work\common\Drawbmp.cpp" +"F:\work\common\Dwindow.cpp" +"F:\work\common\elastic.cpp" +"F:\work\common\errormsg.cpp" +"F:\work\common\File.cpp" +"F:\work\common\Fileio.cpp" +"F:\work\common\Filemap.cpp" +"F:\work\common\Finddata.cpp" +"F:\work\common\Font.cpp" +"F:\work\common\gdipoint.cpp" +"F:\work\common\Guiwnd.cpp" +"F:\work\common\Hookproc.cpp" +"F:\work\common\Iconfrm.cpp" +"F:\work\common\Infowin.cpp" +"F:\work\common\Intel.cpp" +"F:\work\common\Iobuff.cpp" +"F:\work\common\Logowin.cpp" +"F:\work\common\Macro.cpp" +"F:\work\common\Math.cpp" +"F:\work\common\Mdifrm.cpp" +"F:\work\common\Mdiwin.cpp" +"F:\work\common\Memfile.cpp" +"F:\work\common\Mmtimer.cpp" +"F:\work\common\Odbutton.cpp" +"F:\work\common\Odlist.cpp" +"F:\work\common\Odlstalt.cpp" +"F:\work\common\Odlstchk.cpp" +"F:\work\common\opendlg.Cpp" +"F:\work\common\Openfile.cpp" +"F:\work\common\opndlgex.cpp" +"F:\work\common\Owner.cpp" +"F:\work\common\Pathfnd.cpp" +"F:\work\common\Point.cpp" +"F:\work\common\Process.cpp" +"F:\work\common\Profile.cpp" +"F:\work\common\Progress.cpp" +"F:\work\common\Purebmp.cpp" +"F:\work\common\Purebyte.cpp" +"F:\work\common\puredbl.cpp" +"F:\work\common\Puredwrd.cpp" +"F:\work\common\Purehdc.cpp" +"F:\work\common\puremenu.Cpp" +"F:\work\common\Purepal.cpp" +"F:\work\common\purewrd.cpp" +"F:\work\common\Pview.cpp" +"F:\work\common\Regkey.cpp" +"F:\work\common\resbmp.cpp" +"F:\work\common\Richedit.cpp" +"F:\work\common\rubber.cpp" +"F:\work\common\Sdate.cpp" +"F:\work\common\Smrtstrm.cpp" +"F:\work\common\snapshot.cpp" +"F:\work\common\static.cpp" +"F:\work\common\String.cpp" +"F:\work\common\Systime.cpp" +"F:\work\common\Vhandler.cpp" +"F:\work\common\Vxdctrl.cpp" +"F:\work\common\widestr.Cpp" +"F:\work\common\Window.cpp" +"F:\work\common\Wintimer.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP605.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP606.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /FR"msvcobj/" /Fp"msvcobj/common.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\common\Bmdata.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP606.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP607.tmp" with contents +[ +/nologo /out:"..\exe\mscommon.lib" +.\msvcobj\accelerator.obj +.\msvcobj\Bitmap.obj +.\msvcobj\Bmdata.obj +.\msvcobj\Bminfo.obj +.\msvcobj\Bmplnk.obj +.\msvcobj\Brush.obj +.\msvcobj\Btnlnk.obj +.\msvcobj\calendar.obj +.\msvcobj\Catmull.obj +.\msvcobj\Cbdata.obj +.\msvcobj\Cbdatahk.obj +.\msvcobj\Clipbrd.obj +.\msvcobj\Console.obj +.\msvcobj\Control.obj +.\msvcobj\Crsctrl.obj +.\msvcobj\Ddemsg.obj +.\msvcobj\Dib.obj +.\msvcobj\Diskinfo.obj +.\msvcobj\Drawbmp.obj +.\msvcobj\Dwindow.obj +.\msvcobj\elastic.obj +.\msvcobj\errormsg.obj +.\msvcobj\File.obj +.\msvcobj\Fileio.obj +.\msvcobj\Filemap.obj +.\msvcobj\Finddata.obj +.\msvcobj\Font.obj +.\msvcobj\gdipoint.obj +.\msvcobj\Guiwnd.obj +.\msvcobj\Hookproc.obj +.\msvcobj\Iconfrm.obj +.\msvcobj\Infowin.obj +.\msvcobj\Intel.obj +.\msvcobj\Iobuff.obj +.\msvcobj\Logowin.obj +.\msvcobj\Macro.obj +.\msvcobj\Math.obj +.\msvcobj\Mdifrm.obj +.\msvcobj\Mdiwin.obj +.\msvcobj\Memfile.obj +.\msvcobj\Mmtimer.obj +.\msvcobj\Odbutton.obj +.\msvcobj\Odlist.obj +.\msvcobj\Odlstalt.obj +.\msvcobj\Odlstchk.obj +.\msvcobj\opendlg.obj +.\msvcobj\Openfile.obj +.\msvcobj\opndlgex.obj +.\msvcobj\Owner.obj +.\msvcobj\Pathfnd.obj +.\msvcobj\Point.obj +.\msvcobj\Process.obj +.\msvcobj\Profile.obj +.\msvcobj\Progress.obj +.\msvcobj\Purebmp.obj +.\msvcobj\Purebyte.obj +.\msvcobj\puredbl.obj +.\msvcobj\Puredwrd.obj +.\msvcobj\Purehdc.obj +.\msvcobj\puremenu.obj +.\msvcobj\Purepal.obj +.\msvcobj\purewrd.obj +.\msvcobj\Pview.obj +.\msvcobj\Regkey.obj +.\msvcobj\resbmp.obj +.\msvcobj\Richedit.obj +.\msvcobj\rubber.obj +.\msvcobj\Sdate.obj +.\msvcobj\Smrtstrm.obj +.\msvcobj\snapshot.obj +.\msvcobj\static.obj +.\msvcobj\String.obj +.\msvcobj\Systime.obj +.\msvcobj\Vhandler.obj +.\msvcobj\Vxdctrl.obj +.\msvcobj\widestr.obj +.\msvcobj\Window.obj +.\msvcobj\Wintimer.obj +] +Creating command line "link.exe -lib @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP607.tmp" +

Output Window

+Compiling... +accelerator.cpp +Bitmap.cpp +Bminfo.cpp +Bmplnk.cpp +Brush.cpp +Btnlnk.cpp +calendar.cpp +Catmull.cpp +Cbdata.cpp +Cbdatahk.cpp +Clipbrd.cpp +Console.cpp +Control.cpp +Crsctrl.cpp +Ddemsg.cpp +Dib.cpp +Diskinfo.cpp +Drawbmp.cpp +Dwindow.cpp +elastic.cpp +Generating Code... +Compiling... +errormsg.cpp +File.cpp +Fileio.cpp +Filemap.cpp +Finddata.cpp +Font.cpp +gdipoint.cpp +Guiwnd.cpp +Hookproc.cpp +Iconfrm.cpp +Infowin.cpp +Intel.cpp +Iobuff.cpp +Logowin.cpp +Macro.cpp +Math.cpp +Mdifrm.cpp +Mdiwin.cpp +Memfile.cpp +Mmtimer.cpp +Generating Code... +Compiling... +Odbutton.cpp +Odlist.cpp +Odlstalt.cpp +Odlstchk.cpp +opendlg.Cpp +Openfile.cpp +opndlgex.cpp +Owner.cpp +Pathfnd.cpp +Point.cpp +Process.cpp +Profile.cpp +Progress.cpp +Purebmp.cpp +Purebyte.cpp +puredbl.cpp +Puredwrd.cpp +Purehdc.cpp +puremenu.Cpp +Purepal.cpp +Generating Code... +Compiling... +purewrd.cpp +Pview.cpp +Regkey.cpp +resbmp.cpp +Richedit.cpp +rubber.cpp +Sdate.cpp +Smrtstrm.cpp +snapshot.cpp +static.cpp +String.cpp +Systime.cpp +Vhandler.cpp +Vxdctrl.cpp +widestr.Cpp +Window.cpp +Wintimer.cpp +Generating Code... +Compiling... +Bmdata.cpp +Creating library... +

+--------------------Configuration: bsptree - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP608.tmp" with contents +[ +/nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "_WINDOWS" /D "WIN32" /FR".\msvcobj/" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\bsptree\Bsptmpl.cpp" +"F:\work\bsptree\Rgbtree.cpp" +"F:\work\bsptree\Stdtmpl.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP608.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\msbsp.lib" .\msvcobj\Bsptmpl.obj .\msvcobj\Rgbtree.obj .\msvcobj\Stdtmpl.obj " +

Output Window

+Compiling... +Bsptmpl.cpp +Rgbtree.cpp +Stdtmpl.cpp +Generating Code... +Creating library... +

+--------------------Configuration: sample - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP609.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /FR".\msvcobj/" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"F:\work\sample\Datachnk.cpp" +"F:\work\sample\Devhndlr.cpp" +"F:\work\sample\fmtchnk.cpp" +"F:\work\sample\GenChnk.cpp" +"F:\work\sample\Puresmpl.cpp" +"F:\work\sample\Purewave.cpp" +"F:\work\sample\Wave.cpp" +"F:\work\sample\Wavein.cpp" +"F:\work\sample\Waveout.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP609.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\sample.lib" .\msvcobj\Datachnk.obj .\msvcobj\Devhndlr.obj .\msvcobj\fmtchnk.obj .\msvcobj\GenChnk.obj .\msvcobj\Puresmpl.obj .\msvcobj\Purewave.obj .\msvcobj\Wave.obj .\msvcobj\Wavein.obj .\msvcobj\Waveout.obj " +

Output Window

+Compiling... +Datachnk.cpp +Devhndlr.cpp +fmtchnk.cpp +GenChnk.cpp +Puresmpl.cpp +Purewave.cpp +Wave.cpp +Wavein.cpp +Waveout.cpp +Creating library... +

+--------------------Configuration: proto - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP60A.tmp" with contents +[ +/nologo /Gz /MTd /GR /GX /Zi /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /D "_MBCS" /D "_COMMON_USENLS_" /FR".\msvcobj/" /Fp".\msvcobj/proto.pch" /YX"windows.hpp" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\work\proto\Main.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP60A.tmp" +Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP60B.tmp" with contents +[ +comctl32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wininet.lib strmiids.lib winmm.lib vfw32.lib debug\HookDLL.lib version.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /out:"f:\work\proto\debug\proto.exe" +.\msvcobj\Main.obj +\work\exe\mscommon.lib +\work\exe\msbsp.lib +\work\exe\sample.lib +] +Creating command line "link.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP60B.tmp" +

Output Window

+Compiling... +Main.cpp +Linking... + Creating library f:\work\proto\debug\proto.lib and object f:\work\proto\debug\proto.exp +Creating command line "bscmake.exe /nologo /o".\msvcobj/proto.bsc" .\msvcobj\Main.sbr" +Creating browse info file... +

Output Window

+ + + +

Results

+proto.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/proto/pspbrwse.jbf b/proto/pspbrwse.jbf new file mode 100644 index 0000000..cd9ff2b Binary files /dev/null and b/proto/pspbrwse.jbf differ diff --git a/proto/samples.csv b/proto/samples.csv new file mode 100644 index 0000000..e69de29 diff --git a/proto/scraps.txt b/proto/scraps.txt new file mode 100644 index 0000000..16b65d6 --- /dev/null +++ b/proto/scraps.txt @@ -0,0 +1,657 @@ +/* +class Comparator +{ +public: + bool operator()(const HWND hwnd1,const HWND hwnd2)const{return (int)hwnd1<(int)hwnd2;} +}; + +typedef map WinMap; +WinMap smWinMap; +*/ + + + +#include +#include +#include + +int messageLoop(void); +void yield(); + +#include +#include + +class CBTHook; +typedef ProcAddress CBTHookProc; +//class CBTHook : protected APIEntry, private CBTHookProc +class CBTHook : protected APIEntry, private CBTHookProc +{ +public: + typedef LRESULT (__stdcall *LPFNCBTPROC)(int nCode,WPARAM wParam,LPARAM lParam); + CBTHook(); + virtual ~CBTHook(); + DWORD getHookAddress(void); +protected: + virtual LRESULT handleActive(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleClickSkipped(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleCreateWnd(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleDestroyWnd(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleKeySkipped(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleMinMax(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleMoveSize(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleQs(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleSetFocus(WPARAM wParam,LPARAM lParam); + virtual LRESULT handleSysCommand(WPARAM wParam,LPARAM lParam); +private: + enum {ParamLength=12}; + CBTHook &operator=(const CBTHook &cbtHook); + LRESULT entryProc(int nCode,WPARAM wParam,LPARAM lParam); + + HHOOK mhHook; +}; + +inline +CBTHook::CBTHook(void) +: APIEntry(ParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&CBTHook::entryProc)), + mhHook(0) +{ + HINSTANCE hProcessInstance=(HINSTANCE)::GetModuleHandle(0); + mhHook=::SetWindowsHookEx(WH_CBT,(HOOKPROC)getHookAddress(),hProcessInstance,0); +} + +inline +CBTHook::~CBTHook() +{ + if(!mhHook)return; + ::UnhookWindowsHookEx(mhHook); +} + +inline +CBTHook &CBTHook::operator=(const CBTHook &cbtHook) +{ // no implementation + return *this; +} + +inline +DWORD CBTHook::getHookAddress(void) +{ + return codeBase(); +} + +inline +LRESULT CBTHook::entryProc(int nCode,WPARAM wParam,LPARAM lParam) +{ + LRESULT result; + ::printf("[CBTHook::entryProc]\n"); + if(nCode<0)return result=::CallNextHookEx(mhHook,nCode,wParam,lParam); + switch(nCode) + { + case HCBT_ACTIVATE : + result=handleActive(wParam,lParam); + break; + case HCBT_CLICKSKIPPED : + result=handleClickSkipped(wParam,lParam); + break; + case HCBT_CREATEWND : + result=handleCreateWnd(wParam,lParam); + break; + case HCBT_DESTROYWND : + result=handleDestroyWnd(wParam,lParam); + break; + case HCBT_KEYSKIPPED : + result=handleKeySkipped(wParam,lParam); + break; + case HCBT_MINMAX : + result=handleMinMax(wParam,lParam); + break; + case HCBT_MOVESIZE : + result=handleMoveSize(wParam,lParam); + break; + case HCBT_QS : + result=handleQs(wParam,lParam); + break; + case HCBT_SETFOCUS : + result=handleSetFocus(wParam,lParam); + break; + case HCBT_SYSCOMMAND : + result=handleSysCommand(wParam,lParam); + break; + } + return result; +} + +// *** virtuals +inline +LRESULT CBTHook::handleActive(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleClickSkipped(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleCreateWnd(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleDestroyWnd(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleKeySkipped(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleMinMax(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleMoveSize(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleQs(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleSetFocus(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +inline +LRESULT CBTHook::handleSysCommand(WPARAM wParam,LPARAM lParam) +{ + return 0; +} + +// ********************************************************************************************* + +class WinCreateHook : public CBTHook +{ +public: + WinCreateHook(); + virtual ~WinCreateHook(); +protected: + virtual LRESULT handleCreateWnd(WPARAM wParam,LPARAM lParam); +private: +}; + +inline +WinCreateHook::WinCreateHook() +{ +} + +inline +WinCreateHook::~WinCreateHook() +{ +} + +inline +LRESULT WinCreateHook::handleCreateWnd(WPARAM wParam,LPARAM lParam) +{ + ::printf("[WinCreateHook::handleCreateWnd]"); + return 0; +} + +// ********************************************************************************************* + +extern "C" +{ +__declspec(dllimport) bool FAR PASCAL unHook(void); +__declspec(dllimport) bool FAR PASCAL setHook(void); +} + +void main(int argc,char **argv) +{ +// Library library("cbtdll.dll"); +// HHOOK mhHook; + +// mhHook=::SetWindowsHookEx(WH_CBT,(HOOKPROC)&cbtHookProc,0,0); +// mhHook=::SetWindowsHookEx(WH_CBT,(HOOKPROC)&cbtHookProc,library.getInstance(),0); + +/* + if(!library.isOkay()) + { + ::printf("Library not found"); + return; + } + + if(!library.procAddress("_cbtHookProc")) + { + ::printf("Address not found"); + return; + } + + mhHook=::SetWindowsHookEx(WH_CBT,(HOOKPROC)library.procAddress("cbtHookProc"),library.getInstance(),0); +*/ + + if(!setHook())return; + for(int index=0;index<120;index++) + { + yield(); + ::Sleep(250); + } + unHook(); + + +// HINSTANCE hProcessInstance=(HINSTANCE)::GetModuleHandle(0); +// ::printf("main hInst=0x%08lx",hProcessInstance); + +// cbtHookProc(0,0,0); + +/* +// Event event; + CBTHook cbtHook; + for(;;) + { + yield(); + ::Sleep(250); + } +// messageLoop(); +// event.waitEvent(); + +*/ + return; +} + +int messageLoop(void) +{ + MSG msg; + + while(::GetMessage(&msg,NULL,0,0)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + return msg.wParam; +} + +void yield() +{ + MSG msg; + + if(::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } +} + + + + + + + File inFile; + File outFile; + String strLine; + String midiLine; + String saveLine; + String www; + + www="www.burksstudios.com"; + if(!inFile.open("d:\\midi.txt","rb"))return false; + outFile.open("d:\\getpage.txt","wb"); + while(inFile.readLine(strLine)) + { + midiLine=strLine.betweenString('"','"'); + if(midiLine.isNull())continue; + Profile::makeFileName(midiLine,saveLine); + outFile.writeLine(www+String(" ")+String("http://")+www+String("/jazz/")+midiLine+String(" d:\\")+saveLine); + } + return 1; + + +/* + +#include +#include +#include + +void main(int argc,char **argv) +{ + + + + MIDIOutputDevice midiOut; + NoteOn noteOn(PureNote(65,70)); + + if(!midiOut.openDevice())return; + for(int prog=0;prog<128;prog++) + { + midiOut.midiEvent(ProgramChange(prog).getEvent(0,16)); + PureEvent &midiEvent=noteOn.getEvent(); + midiOut.midiEvent(midiEvent); + ::Sleep(250); + } + +// PureEvent getEvent(BYTE deltaTime=0,BYTE channel=0)const; +// PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData,DWORD tempo=0); + + + midiOut.closeDevice(); + return; +} + + +*/ +/* +35 Acoustic Bass Drum 59 Ride Cymbal 2 +36 Bass Drum 1 60 Hi Bongo +37 Side Stick 61 Low Bongo +38 Acoustic Snare 62 Mute Hi Conga +39 Hand Clap 63 Open Hi Conga +40 Electric Snare 64 Low Conga +41 Low Floor Tom 65 High Timbale +42 Closed Hi-Hat 66 Low Timbale +43 High Floor Tom 67 High Agogo +44 Pedal Hi-Hat 68 Low Agogo +45 Low Tom 69 Cabasa +46 Open Hi-Hat 70 Maracas +47 Low-Mid Tom 71 Short Whistle +48 Hi-Mid Tom 72 Long Whistle +49 Crash Cymbal 1 73 Short Guiro +50 High Tom 74 Long Guiro +51 Ride Cymbal 1 75 Claves +52 Chinese Cymbal 76 Hi Wood Block +53 Ride Bell 77 Low Wood Block +54 Tambourine 78 Mute Cuica +55 Splash Cymbal 79 Open Cuica +56 Cowbell 80 Mute Triangle +57 Crash Cymbal 2 81 Open Triangle +58 Vibraslap + + + +*/ + + +/* +bool ClassMapper::createClass(const String &packageName,const String &className,const String &strPathMapFile,const String &strPathTable) +{ + File inFile; + File outFile; + String strLine; + String name; + String value; + String methodName; + Block variables; + int errors=0; + + if(!loadMapping(strPathMapFile))return false; + if(!inFile.open(strPathTable,"rb"))return false; + while(true) + { + inFile.readLine(strLine); + if(strLine.isNull())break; + name=strLine.betweenString(' ',' '); + name=makeHungarian(name); + value=strLine.betweenString(' ',0).betweenString(' ',' '); + if(!mapType(value,value)) + { + printf("Don't know how to map %s\n",value.str()); + errors++; + continue; + } + variables.insert(&NameValuePair(name,value)); + } + inFile.close(); + if(errors)return false; + if(!variables.size())return false; + if(!outFile.open(className+String(".java"),"wb"))return false; + if(!packageName.isNull())outFile.writeLine(String("package ")+packageName); + outFile.writeLine("\t"); + outFile.writeLine("\t"); + outFile.writeLine(String("public class ")+className); + outFile.writeLine("{"); + for(int index=0;index variables; + Block originals; + int errors=0; + + if(!loadMapping(strPathMapFile))return false; + if(!inFile.open(strPathTable,"rb"))return false; + while(true) + { + inFile.readLine(strLine); + if(strLine.isNull())break; + name=strLine.betweenString(' ',' '); + value=strLine.betweenString(' ',0).betweenString(' ',' '); + if(!mapType(value,value)) + { + printf("Don't know how to map %s\n",value.str()); + errors++; + continue; + } + variables.insert(&NameValuePair(makeHungarian(name),value)); + originals.insert(&NameValuePair(name,value)); + } + inFile.close(); + if(errors)return false; + if(!variables.size())return false; + if(!outFile.open(className+String("RS")+String(".java"),"wb"))return false; + if(!packageName.isNull())outFile.writeLine(String("package ")+packageName); + outFile.writeLine("\t"); + outFile.writeLine("\t"); + outFile.writeLine("public void processResult()"); + outFile.writeLine("{"); + outFile.writeLine(String(" ")+className+String(" ")+instanceName+String(";")); + outFile.writeLine(" ResultSet rs;"); + outFile.writeLine("// fill in the blanks"); + for(int index=0;index +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void displayMemory(); +void displayProcesses(); +void showModule(const String &pathFileName); +void showVersionInfo(const ModuleInfo &moduleInfo,String &moduleBaseName,String &moduleFileName); +void displayAutoRuns(); + +int main(int argc,char **argv) +{ + return 0; +} + +void displayAutoRuns() +{ + +} + +void displayProcesses() +{ + ProcessIDList processIDList; + ProcessAPI processAPI; + ModuleInfoList moduleInfoList; + + processAPI.enumProcesses(processIDList); + for(int index=0;index imageImportDescriptors; + ImageSectionHeader imageSectionHeader; + FileHandle inFile(moduleFileName,FileHandle::Read); + if(!inFile.isOkay())return; + FileMap inMap(inFile); + PureViewOfFile view(inMap); + peHeader< + + +AdviseSink::AdviseSink(void) +{ +} + +AdviseSink::~AdviseSink() +{ +} + +HRESULT AdviseSink::ImageNotify(VARIANT *pVariant) +{ + CallbackData cbData(0,(LPARAM)pVariant); + mAdviseHandler.callback(cbData); + ::VariantClear(pVariant); + return ComResult::Success; +} diff --git a/proto/source/AdviseSink.hpp b/proto/source/AdviseSink.hpp new file mode 100644 index 0000000..e4aa031 --- /dev/null +++ b/proto/source/AdviseSink.hpp @@ -0,0 +1,77 @@ +#ifndef _COM_ADVISESINK_HPP_ +#define _com_ADVISESINK_HPP_ +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0400 +#endif +#ifndef _ATL_APARTMENT_THREADED +#define _ATL_APARTMENT_THREADED +#endif +#ifndef _COM_ATLBASE_HPP_ +#include +#endif +#ifndef _COM_ATLMODULE_HPP_ +#include +#endif +#ifndef _COM_ATLCOM_HPP_ +#include +#endif +#ifndef _COM_COM_HPP_ +#include +#endif +#ifndef _COM_VARIANT_HPP_ +#include +#endif +#ifndef _COM_RESULT_HPP_ +#include +#endif + +// GENERIC CONNECTION POINT INTERFACE +// INHERIT FROM THIS CLASS, PASSING IN... +// 1) THE NAME OF THE CONNECTION POINT INTERFACE CLASS (FROM IDL FILE) +// 2) POINTER TO THE IID FOR THE CONNECTION POINT INTERFACE +// 3) POINTER TO THE LIBID FOR THE CONNECTION POINT INTERFACE +// THEN PROVIDE THE VIRTUAL FUNCTION(S) DESCRIBED IN THE IDL THAT THE CONNECTION POINT WILL CALL + + +// (IE) +// IDL CODE +// interface IImageNotify : IDispatch +// { +// [id(1), helpstring("method ImageNotify")] +// HRESULT ImageNotify(VARIANT *pVariant); +// }; +// C++ CODE +// class ImageAdviseHandler : public AdviseSink +// { +// ... +// virtual HRESULT ImageNotify(VARIANT *pVariant); +// ... +// } + +template +class AdviseSink : + public CComObjectRootEx, + public IDispatchImpl +{ +public: + AdviseSink(void); + virtual ~AdviseSink(); + BEGIN_COM_MAP(AdviseSink) + COM_INTERFACE_ENTRY(IDispatch) + COM_INTERFACE_ENTRY(U) + END_COM_MAP() +private: +}; + +template +inline +AdviseSink::AdviseSink(void) +{ +} + +template +inline +AdviseSink::~AdviseSink() +{ +} +#endif diff --git a/proto/source/BLOAD.bmp b/proto/source/BLOAD.bmp new file mode 100644 index 0000000..fdd5458 Binary files /dev/null and b/proto/source/BLOAD.bmp differ diff --git a/proto/source/BSAVE.bmp b/proto/source/BSAVE.bmp new file mode 100644 index 0000000..655869f Binary files /dev/null and b/proto/source/BSAVE.bmp differ diff --git a/proto/source/CFACTORY.CPP b/proto/source/CFACTORY.CPP new file mode 100644 index 0000000..6a30a96 --- /dev/null +++ b/proto/source/CFACTORY.CPP @@ -0,0 +1,107 @@ +#include +#include +//#include + +#pragma warning(disable:4355) +CFSimpleObject::CFSimpleObject(PIUnknown &pUnkOuter,SmartPointer &server) +: mImpIClassFactory(SmartPointer(this),pUnkOuter,server), mRefCount(0), + mUnkOuter(pUnkOuter), mDLLServer(server) +{ +} + +CFSimpleObject::~CFSimpleObject() +{ +} + +ULONG __stdcall CFSimpleObject::AddRef(void) +{ + mRefCount++; + return mRefCount; +} + +ULONG __stdcall CFSimpleObject::Release(void) +{ + mRefCount--; + if(0==mRefCount) + { + if(mDLLServer.isOkay())mDLLServer->removeObject(); + mRefCount++; + delete this; + } + return mRefCount; +} + +HRESULT __stdcall CFSimpleObject::QueryInterface(REFIID riid,PPVOID ppv) +{ + HRESULT hr(E_NOINTERFACE); + + *ppv=0; + if(IID_IUnknown==riid)*ppv=this; + else if(IID_IClassFactory==riid)*ppv=&mImpIClassFactory; + if(0!=*ppv)((LPUNKNOWN)*ppv)->AddRef(),hr=NOERROR; + return hr; +} + +CImpIClassFactory::CImpIClassFactory(SmartPointer &pBackObj,PIUnknown &pUnkOuter,SmartPointer &server) +: mRefCount(0), mBackObj(pBackObj), mDLLServer(server) +{ + if(!pUnkOuter.isOkay())mUnkOuter=PIUnknown((IUnknown*)((CFSimpleObject*)pBackObj)); + else mUnkOuter=pUnkOuter; +} + +CImpIClassFactory::~CImpIClassFactory() +{ +} + +HRESULT __stdcall CImpIClassFactory::QueryInterface(REFIID riid,PPVOID ppv) +{ + return mUnkOuter->QueryInterface(riid,ppv); +} + +ULONG __stdcall CImpIClassFactory::AddRef(void) +{ + mRefCount++; + return mUnkOuter->AddRef(); +} + +ULONG __stdcall CImpIClassFactory::Release(void) +{ + mRefCount--; + return mUnkOuter->Release(); +} + +HRESULT __stdcall CImpIClassFactory::CreateInstance(IUnknown *pUnkOuter,REFIID riid,PPVOID ppv) +{ + HRESULT hr(E_FAIL); + SmartPointer simpleObject; + + *ppv=0; + if(pUnkOuter&&IID_IUnknown!=riid)hr=CLASS_E_NOAGGREGATION; + else + { + simpleObject=::new CSimpleObject(PIUnknown(pUnkOuter),mDLLServer); + simpleObject.disposition(PointerDisposition::Assume); + if(simpleObject.isOkay()) + { + mDLLServer->addObject(); + hr=simpleObject->QueryInterface(riid,ppv); + if(FAILED(hr)) + { + mDLLServer->removeObject(); + simpleObject.disposition(PointerDisposition::Delete); + simpleObject.destroy(); + } + } + else hr=E_OUTOFMEMORY; + } + return hr; +} + +HRESULT __stdcall CImpIClassFactory::LockServer(BOOL lock) +{ + HRESULT hr(NOERROR); + + if(lock)mDLLServer->addLock(); + else mDLLServer->removeLock(); + return hr; +} diff --git a/proto/source/CFACTORY.HPP b/proto/source/CFACTORY.HPP new file mode 100644 index 0000000..b3e3ad8 --- /dev/null +++ b/proto/source/CFACTORY.HPP @@ -0,0 +1,49 @@ +#ifndef _PROTO_CCLASSFACTORY_HPP_ +#define _PROTO_CCLASSFACTORY_HPP_ +#ifndef _COM_OLE2_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _PROTO_DLLSERVER_HPP_ +#include +#endif + +class CFSimpleObject; + +class CImpIClassFactory : public IClassFactory +{ +public: + CImpIClassFactory(SmartPointer &pBackObj,PIUnknown &pUnkOuter,SmartPointer &server); + ~CImpIClassFactory(); + HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); + HRESULT __stdcall CreateInstance(IUnknown *pUnkOuter,REFIID riid,PPVOID ppv); + HRESULT __stdcall LockServer(BOOL lock); +private: + ULONG mRefCount; + SmartPointer mBackObj; + SmartPointer mDLLServer; + PIUnknown mUnkOuter; +}; + +class CFSimpleObject : public IUnknown +{ +public: + friend CImpIClassFactory; + CFSimpleObject(PIUnknown &pUnkOuter,SmartPointer &server); + ~CFSimpleObject(); + HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); +private: + CImpIClassFactory mImpIClassFactory; + SmartPointer mDLLServer; + PIUnknown mUnkOuter; + ULONG mRefCount; +}; + +typedef CFSimpleObject *PCFSimpleObject; +#endif \ No newline at end of file diff --git a/proto/source/CHARFORM.HPP b/proto/source/CHARFORM.HPP new file mode 100644 index 0000000..22ac78b --- /dev/null +++ b/proto/source/CHARFORM.HPP @@ -0,0 +1,220 @@ +#ifndef _PROTO_CHARFORMAT_HPP_ +#define _PROTO_CHARFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_RICHEDIT_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif + +class CharFormat : private CHARFORMAT +{ +public: + enum Mask{MaskBold=CFM_BOLD,MaskCharSet=CFM_CHARSET,MaskColor=CFM_COLOR,MaskFace=CFM_FACE, + MaskItalic=CFM_ITALIC,MaskOffset=CFM_OFFSET,MaskProtected=CFM_PROTECTED, + MaskSize=CFM_SIZE,MaskStrikeout=CFM_STRIKEOUT,MaskUnderline=CFM_UNDERLINE}; + enum Effects{EffectAutoColor=CFE_AUTOCOLOR,EffectBold=CFE_BOLD,EffectItalic=CFE_ITALIC, + EffectStrikeout=CFE_STRIKEOUT,EffectUnderline=CFE_UNDERLINE,EffectProtected=CFE_PROTECTED}; + CharFormat(void); + CharFormat(const CharFormat &someCharFormat); + virtual ~CharFormat(); + CharFormat &operator=(const CharFormat &someCharFormat); + BOOL operator==(const CharFormat &someCharFormat)const; + operator CHARFORMAT &(void); + DWORD mask(void)const; + void mask(DWORD mask); + DWORD effects(void)const; + void effects(DWORD effects); + LONG yHeight(void)const; + void yHeight(LONG height); + LONG yOffset(void)const; + void yOffset(LONG offset); + RGBColor textColor(void)const; + void textColor(RGBColor textColor); + BYTE charSet(void)const; + void charSet(BYTE charSet); + BYTE pitchAndFamily(void)const; + void pitchAndFamily(BYTE pitchAndFamily); + String faceName(void)const; + void faceName(const String &faceName); +private: + void setZero(void); + void initLength(void); +}; +#endif + +inline +CharFormat::CharFormat(void) +{ + setZero(); +} + +inline +CharFormat::CharFormat(const CharFormat &someCharFormat) +{ + initLength(); + *this=someCharFormat; +} + +inline +CharFormat::~CharFormat() +{ +} + +inline +CharFormat &CharFormat::operator=(const CharFormat &someCharFormat) +{ + mask(someCharFormat.mask()); + effects(someCharFormat.effects()); + yHeight(someCharFormat.yHeight()); + yOffset(someCharFormat.yOffset()); + textColor(someCharFormat.textColor()); + charSet(someCharFormat.charSet()); + pitchAndFamily(someCharFormat.pitchAndFamily()); + faceName(someCharFormat.faceName()); + return *this; +} + +inline +BOOL CharFormat::operator==(const CharFormat &someCharFormat)const +{ + return (mask()==someCharFormat.mask()&& + effects()==someCharFormat.effects()&& + yHeight()==someCharFormat.yHeight()&& + yOffset()==someCharFormat.yOffset()&& + textColor()==someCharFormat.textColor()&& + charSet()==someCharFormat.charSet()&& + pitchAndFamily()&&someCharFormat.pitchAndFamily()&& + faceName()==someCharFormat.faceName()); +} + +inline +CharFormat::operator CHARFORMAT &(void) +{ + return *this; +} + +inline +DWORD CharFormat::mask(void)const +{ + return CHARFORMAT::dwMask; +} + +inline +void CharFormat::mask(DWORD mask) +{ + CHARFORMAT::dwMask=mask; +} + +inline +DWORD CharFormat::effects(void)const +{ + return CHARFORMAT::dwEffects; +} + +inline +void CharFormat::effects(DWORD effects) +{ + CHARFORMAT::dwEffects=effects; +} + +inline +LONG CharFormat::yHeight(void)const +{ + return CHARFORMAT::yHeight; +} + +inline +void CharFormat::yHeight(LONG height) +{ + CHARFORMAT::yHeight=height; +} + +inline +LONG CharFormat::yOffset(void)const +{ + return CHARFORMAT::yOffset; +} + +inline +void CharFormat::yOffset(LONG yOffset) +{ + CHARFORMAT::yOffset=yOffset; +} + +inline +RGBColor CharFormat::textColor(void)const +{ + return CHARFORMAT::crTextColor; +} + +inline +void CharFormat::textColor(RGBColor textColor) +{ + CHARFORMAT::crTextColor=(COLORREF)textColor; +} + +inline +BYTE CharFormat::charSet(void)const +{ + return CHARFORMAT::bCharSet; +} + +inline +void CharFormat::charSet(BYTE charSet) +{ + CHARFORMAT::bCharSet=charSet; +} + +inline +BYTE CharFormat::pitchAndFamily(void)const +{ + return CHARFORMAT::bPitchAndFamily; +} + +inline +void CharFormat::pitchAndFamily(BYTE pitchAndFamily) +{ + CHARFORMAT::bPitchAndFamily=pitchAndFamily; +} + +inline +String CharFormat::faceName(void)const +{ + return CHARFORMAT::szFaceName; +} + +inline +void CharFormat::faceName(const String &faceName) +{ + WORD strLength(faceName.length()); + if(faceName.isNull()||strLength>=LF_FACESIZE)return; + ::memcpy(szFaceName,(char*)(String&)faceName,strLength); + szFaceName[strLength]=0; +} + +inline +void CharFormat::setZero(void) +{ + initLength(); + mask(0); + effects(0); + yHeight(0); + yOffset(0); + textColor(RGBColor(0,0,0)); + charSet(0); + pitchAndFamily(0); + faceName("Arial"); +} + +inline +void CharFormat::initLength(void) +{ + CHARFORMAT::cbSize=sizeof(CHARFORMAT); +} diff --git a/proto/source/CLIENT.CPP b/proto/source/CLIENT.CPP new file mode 100644 index 0000000..939ae8c --- /dev/null +++ b/proto/source/CLIENT.CPP @@ -0,0 +1,157 @@ +#include +#include +#include +#include +#include +#include +#include + +// create(mediapakfilename) +// add(mediapak,filename,type,id) +// remove(mediapak,id) +// display(mediapakfilename) + +void displayUsage(void); +BOOL handleAdd(const String &strCommand); +BOOL handleRemove(const String &strCommand); +BOOL handleList(const String &strCommand); +BOOL handleCreate(const String &strCommand); + +//int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +void main(int argc,char **argv) +{ + String strCommandLine; + String strCommand; + + if(1==argc){displayUsage();return;} + strCommandLine=argv[1]; + strCommand=strCommandLine.betweenString(0,'('); + if(strCommand.isNull())strCommand=strCommandLine; + if(strCommand==String("add"))handleAdd(strCommandLine); + else if(strCommand==String("remove"))handleRemove(strCommandLine); + else if(strCommand==String("list"))handleList(strCommandLine); + else if(strCommand==String("create")) + { + if(handleCreate(strCommandLine))cout << "creation completed" << endl; + else cout << "creation failed"<< endl; + } + else displayUsage(); + return; +} + +BOOL handleAdd(const String &strCommand) +{ + String strPathMediaPak; + String strPathFileName; + String strID; + String strType; + MediaPak mediaPak; + PakEntry pakEntry; + GlobalData mediaData; + FileHandle openFile; + + strPathMediaPak=strCommand.betweenString('(',','); + strPathFileName=strCommand.betweenString(',',','); + strType=strCommand.betweenString(',',')').betweenString(',',','); + strID=strCommand.betweenString(',',')').betweenString(',',0).betweenString(',',0); + if(strPathMediaPak.isNull())return FALSE; + if(strPathFileName.isNull())return FALSE; + if(strID.isNull())return FALSE; + if(strType.isNull())return FALSE; + mediaPak.open(strPathMediaPak); + if(strType==String("SOUND"))pakEntry.type(PakEntry::Sound); + else if(strType==String("BITMAP"))pakEntry.type(PakEntry::Bitmap); + else pakEntry.type(PakEntry::Blob); + openFile.open(strPathFileName); + mediaData.size(openFile.size()); + openFile.read((BYTE*)&mediaData[0],mediaData.size()); + pakEntry.name(strPathFileName); + pakEntry.id(::atoi(strID)); + pakEntry.rawData(mediaData); + mediaPak.add(pakEntry); + return TRUE; +} + +BOOL handleRemove(const String &strCommand) +{ + return FALSE; +} + +BOOL handleList(const String &strCommand) +{ + String pathMediaPak; + String strType; + MediaPak mediaPak; + PakEntry pakEntry; + + pathMediaPak=strCommand.betweenString('(',')'); + if(pathMediaPak.isNull())return FALSE; + if(!mediaPak.open(pathMediaPak))return FALSE; + for(int index=0;index soundData; + FileHandle openFile; + WaveForm waveForm; + + mediaPak.open("c:\\multimed.pak",TRUE); + pakEntry.type(PakEntry::Sound); + + openFile.open("C:\\GAMES\\DOOM2\\DSTELEPT.WAV"); + soundData.size(openFile.size()); + openFile.read((BYTE*)soundData,soundData.size()); + + pakEntry.name("DSTELEPT"); + pakEntry.id(0); + pakEntry.rawData(soundData); + mediaPak.add(pakEntry); + + openFile.open("C:\\GAMES\\DOOM2\\DSPISTOL.WAV"); + soundData.size(openFile.size()); + openFile.read((BYTE*)soundData,soundData.size()); + + pakEntry.name("DSPISTOL"); + pakEntry.id(0); + pakEntry.rawData(soundData); + mediaPak.add(pakEntry); + + + mediaPak.open("c:\\multimed.pak"); + if(!mediaPak.getEntry(waveForm,0))return FALSE; + PureWave pureWave; + pureWave.play(waveForm,DeviceHandler::Wait); + mediaPak.close(); + + +#endif \ No newline at end of file diff --git a/proto/source/CLIP.bmp b/proto/source/CLIP.bmp new file mode 100644 index 0000000..14152de Binary files /dev/null and b/proto/source/CLIP.bmp differ diff --git a/proto/source/COMMAND.CPP b/proto/source/COMMAND.CPP new file mode 100644 index 0000000..a68272f --- /dev/null +++ b/proto/source/COMMAND.CPP @@ -0,0 +1,52 @@ +#include + +void CommandLine::createCommands(String commandLine) +{ +// String commandLine(::GetCommandLine()); + char *strPtr=(char*)commandLine; + + mBlockCmds.remove(); + strPtr=::strtok(commandLine," \0"); + if(!strPtr)return; + mBlockCmds.insert(&String(strPtr)); + while(TRUE) + { + strPtr=::strtok(0," \0"); + if(!strPtr)break; + mBlockCmds.insert(&String(strPtr)); + } +} + +String CommandLine::argument(void)const +{ + if(!mBlockCmds.size())return String(); + return const_cast&>(mBlockCmds)[mArgIndex]; +} + +BOOL CommandLine::isOption(void)const +{ + if(!mBlockCmds.size())return FALSE; + String strArgument(const_cast&>(mBlockCmds)[mArgIndex]); + if(strArgument.isNull()||*(strArgument)!='-')return FALSE; + return TRUE; +} + +String CommandLine::option(void)const +{ + String optionString; + + if(!mBlockCmds.size())return String(); + optionString=const_cast&>(mBlockCmds)[mArgIndex]; + if(optionString.isNull()||*(optionString)!='-'||optionString.length()<2)return String(); + return String(*((char*)optionString+1)); +} + +String CommandLine::optionArg(void)const +{ + String optionString; + + if(!mBlockCmds.size())return String(); + optionString=const_cast&>(mBlockCmds)[mArgIndex]; + if(optionString.isNull()||*(optionString)!='-'||optionString.length()<=2)return String(); + return String(((char*)optionString+2)); +} diff --git a/proto/source/COMMAND.HPP b/proto/source/COMMAND.HPP new file mode 100644 index 0000000..81be4d7 --- /dev/null +++ b/proto/source/COMMAND.HPP @@ -0,0 +1,75 @@ +#ifndef _PROTO_COMMANDLINE_HPP_ +#define _PROTO_COMMANDLINE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class CommandLine +{ +public: + CommandLine(String commandLine=::GetCommandLine()); + virtual ~CommandLine(); + BOOL operator++(void); + BOOL operator++(int postFixDummy); + BOOL operator--(void); + BOOL operator--(int postFixDummy); + String argument(void)const; + String option(void)const; + String optionArg(void)const; + BOOL isOption(void)const; +private: + void createCommands(String commandLine); + Block mBlockCmds; + int mArgIndex; +}; + +inline +CommandLine::CommandLine(String commandLine) +: mArgIndex(0) +{ + createCommands(commandLine); +} + +inline +CommandLine::~CommandLine() +{ +} + +inline +BOOL CommandLine::operator++(void) +{ + if(mArgIndex+1>=mBlockCmds.size())return FALSE; + mArgIndex++; + return TRUE; +} + +inline +BOOL CommandLine::operator--(void) +{ + if(mArgIndex-1<0)return FALSE; + mArgIndex--; + return TRUE; +} + +inline +BOOL CommandLine::operator++(int /*postFixDummy*/) +{ + if(mArgIndex+1>=mBlockCmds.size())return FALSE; + mArgIndex++; + return TRUE; +} + +inline +BOOL CommandLine::operator--(int /*postFixDummy*/) +{ + if(mArgIndex-1<0)return FALSE; + mArgIndex--; + return TRUE; +} +#endif diff --git a/proto/source/CUT.bmp b/proto/source/CUT.bmp new file mode 100644 index 0000000..6345e05 Binary files /dev/null and b/proto/source/CUT.bmp differ diff --git a/proto/source/DISPLAY.CPP b/proto/source/DISPLAY.CPP new file mode 100644 index 0000000..a7c7ef0 --- /dev/null +++ b/proto/source/DISPLAY.CPP @@ -0,0 +1,148 @@ +#include +#include +#include +#include +#include +#include +#include + +DisplayManager::DisplayManager(GUIWindow &displayWindow,const PurePalette &systemPalette) +: mDisplayWindow(displayWindow), mSystemPalette(systemPalette), mIsCancelled(FALSE), + mBitmapBkGnd("stars1.bmp") +{ + mSizeHandler.setCallback(this,&DisplayManager::sizeHandler); + mKeyDownHandler.setCallback(this,&DisplayManager::keyDownHandler); + mDialogCodeHandler.setCallback(this,&DisplayManager::dialogCodeHandler); + mDisplayWindow.insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mDisplayWindow.insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + mDisplayWindow.insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); + mDIB3D=::new DIB3D(mDisplayWindow,mSystemPalette); + mDIB3D.disposition(PointerDisposition::Delete); +} + +DisplayManager::~DisplayManager() +{ + shutdown(); +} + +CallbackData::ReturnType DisplayManager::sizeHandler(CallbackData &someCallbackData) +{ + mMutex.requestMutex(); + mDIB3D.destroy(); + mDIB3D=::new DIB3D(mDisplayWindow,mSystemPalette); + mDIB3D.disposition(PointerDisposition::Delete); + mMutex.releaseMutex(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DisplayManager::dialogCodeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +CallbackData::ReturnType DisplayManager::keyDownHandler(CallbackData &someCallbackData) +{ + KeyData keyData(someCallbackData); + + keyDownHandler(keyData); + return (CallbackData::ReturnType)FALSE; +} + +void DisplayManager::shutdown(void) +{ + ::OutputDebugString("cancelling...\n"); + cancel(); + ::OutputDebugString("waiting for message to complete.\n"); + waitForProcess(); + ::OutputDebugString("waiting for thread shutdown.\n"); + wait(); + mDisplayWindow.removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +bool DisplayManager::isCancelled(void)const +{ + return mIsCancelled; +} + +void DisplayManager::cancel(void) +{ + mIsCancelled=true; +} + +// virtuals + +void DisplayManager::processHandler(void) +{ + PureDevice pureDevice(mDisplayWindow); + + if(!mDIB3D.isOkay())return; + if(0==initializeHandler(mPureObjects))return; + mDIB3D->usePalette(true); + while(!isCancelled()) + { + mMutex.requestMutex(); + setBackground(); +// ASMRoutines::clearBitmap((DWORD)mDIBitmap->ptrData(),mDIBitmap->imageExtent()); + for(int index=0;indexisInView(mDIB3D)) + { + if(scopeHandler(pureObject))pureObject->setState(PureObject::Delete); + } + else pureObject->map(mDIB3D); + } + mDIB3D->bitBlt(pureDevice); + mMutex.releaseMutex(); + for(index=0;indexgetState()) + { + mPureObjects.remove(index); + index=-1; + } + } + } +} + +void DisplayManager::setBackground(void) +{ + char *ptrSrcData; + char *ptrDstData; + int rows(mDIB3D->height()>mBitmapBkGnd.height()?mBitmapBkGnd.height():mDIB3D->height()); + int cols((*mDIB3D).width()>mBitmapBkGnd.width()?mBitmapBkGnd.width():(*mDIB3D).width()); + + ptrDstData=(char*)mDIB3D->ptrData(); + ptrSrcData=(char*)mBitmapBkGnd.ptrData(); + for(int row=0;rowwidth(); + ptrSrcData+=mBitmapBkGnd.width(); + } +} + + +// virtuals + +bool DisplayManager::initializeHandler(PointerPureObjectBlock &pureObjects) +{ + return false; +} + +bool DisplayManager::preprocessHandler(PointerPureObject &pureObject) +{ + return true; +} + +bool DisplayManager::scopeHandler(PointerPureObject &pureObject) +{ + return true; +} + +void DisplayManager::keyDownHandler(const KeyData &keyData) +{ + return; +} diff --git a/proto/source/DISPLAY.HPP b/proto/source/DISPLAY.HPP new file mode 100644 index 0000000..346fb85 --- /dev/null +++ b/proto/source/DISPLAY.HPP @@ -0,0 +1,101 @@ +#ifndef _PROTO_DISPLAYMANAGER_HPP_ +#define _PROTO_DISPLAYMANAGER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_PUREPALETTE_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _ENGINE_DIB3D_HPP_ +#include +#endif +#ifndef _PROTO_PROCESSTHREAD_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif + +class GUIWindow; +class PureObject; +class Device3D; +class Point3D; +class Vector3D; +class KeyData; + +class DisplayManager : public ProcessThread +{ +public: + typedef SmartPointer PointerPureObject; + typedef Block PointerPureObjectBlock; + typedef SmartPointer PointerDevice3D; + typedef SmartPointer PointerBitmap; + DisplayManager(GUIWindow &displayWindow,const PurePalette &systemPalette); + virtual ~DisplayManager(); + void insert(const SmartPointer &simpleObject); + void shutdown(void); + ViewSystem &getViewSystem(void); + PointerPureObjectBlock &getObjects(void); + PointerBitmap &getBitmap(void); +protected: + virtual bool initializeHandler(PointerPureObjectBlock &pureObjects); + virtual bool preprocessHandler(PointerPureObject &pureObject); + virtual bool scopeHandler(PointerPureObject &pureObject); + virtual void keyDownHandler(const KeyData &keyData); +private: + virtual void processHandler(void); + DisplayManager(const DisplayManager &someDisplayManager); + DisplayManager &operator=(const DisplayManager &someDisplayManager); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + void setBackground(void); + void cancel(void); + bool isCancelled(void)const; + + Callback mSizeHandler; + Callback mKeyDownHandler; + Callback mDialogCodeHandler; + PointerPureObjectBlock mPureObjects; + PointerBitmap mDIB3D; + Bitmap mBitmapBkGnd; + PurePalette mSystemPalette; + GUIWindow &mDisplayWindow; + Mutex mMutex; + bool mIsCancelled; +}; + +inline +void DisplayManager::insert(const SmartPointer &pureObject) +{ + mPureObjects.insert(&pureObject); +} + +inline +ViewSystem &DisplayManager::getViewSystem(void) +{ + return static_cast(*mDIB3D); +} + +inline +DisplayManager::PointerPureObjectBlock &DisplayManager::getObjects(void) +{ + return mPureObjects; +} + +inline +DisplayManager::PointerBitmap &DisplayManager::getBitmap(void) +{ + return mDIB3D; +} +#endif diff --git a/proto/source/DLLMAIN.CPP b/proto/source/DLLMAIN.CPP new file mode 100644 index 0000000..d796e91 --- /dev/null +++ b/proto/source/DLLMAIN.CPP @@ -0,0 +1,119 @@ +#include +//#include +#include +#include +#include +#include +#include +#include +#include + +BOOL unicodeOk(void); + +DLLServer comDLLServer; + +BOOL WINAPI DLLMain(HINSTANCE hDLLInst,DWORD dwReason,LPVOID lpReserved) +{ + switch(dwReason) + { + case DLL_PROCESS_ATTACH : + if(unicodeOk())comDLLServer.dllInst(hDLLInst); + break; + case DLL_PROCESS_DETACH : + break; + case DLL_THREAD_ATTACH : + break; + case DLL_THREAD_DETACH : + break; + default : + break; + } + return TRUE; +} + +BOOL unicodeOk(void) +{ + DWORD strReturnLength(String::MaxString); + BOOL retCode(TRUE); + String strUserName; + + strUserName.reserve(String::MaxString); + if(!::GetUserName(strUserName,&strReturnLength))retCode=ERROR_CALL_NOT_IMPLEMENTED==::GetLastError()?FALSE:TRUE; + return retCode; +} + +STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid,PPVOID ppv) +{ + HRESULT hr(CLASS_E_CLASSNOTAVAILABLE); + IUnknown *pIUnknown=0; + + Message::message("DllGetClassObject"); + if(CLSID_SimpleObject==rclsid) + { + hr=E_OUTOFMEMORY; + pIUnknown=::new CFSimpleObject(SmartPointer(),SmartPointer(&comDLLServer)); + } + else Message::message(Message::makeID(rclsid)+String(" is not supported")); + if(NULL==pIUnknown)return hr; + comDLLServer.addObject(); + hr=pIUnknown->QueryInterface(riid,ppv); + if(FAILED(hr)) + { + comDLLServer.removeObject(); + delete pIUnknown; + } + if(FAILED(hr))Message::message("FAILED!!"); + return hr; +} + +STDAPI DllCanUnloadNow(void) +{ + return (!comDLLServer.objects()&&!comDLLServer.locks())?S_OK:S_FALSE; +} + +STDAPI DllRegisterServer(void) +{ + Message::message("DllRegisterServer"); +#if 0 + + HRESULT hr = NOERROR; + TCHAR szID[GUID_SIZE+1]; + TCHAR szCLSID[GUID_SIZE+32]; + TCHAR szModulePath[MAX_PATH]; + + // Obtain the path to this module's executable file for later use. + GetModuleFileName(g_pServer->m_hDllInst,szModulePath,sizeof(szModulePath)/sizeof(TCHAR)); + + /*------------------------------------------------------------------------- + Create registry entries for the DllCar Component. + -------------------------------------------------------------------------*/ + // Create some base key strings. + StringFromGUID2(CLSID_DllCar, szID, GUID_SIZE); + lstrcpy(szCLSID, TEXT("CLSID\\")); + lstrcat(szCLSID, szID); + + // Create ProgID keys. + SetRegKeyValue(TEXT("CTS.DllCar.1"),NULL,TEXT("DllCar Component - DLLSERVE Code Sample")); + SetRegKeyValue(TEXT("CTS.DllCar.1"),TEXT("CLSID"),szID); + + // Create VersionIndependentProgID keys. + SetRegKeyValue(TEXT("CTS.DllCar"),NULL,TEXT("DllCar Component - DLLSERVE Code Sample")); + SetRegKeyValue(TEXT("CTS.DllCar"),TEXT("CurVer"),TEXT("CTS.DllCar.1")); + SetRegKeyValue(TEXT("CTS.DllCar"),TEXT("CLSID"),szID); + + // Create entries under CLSID. + SetRegKeyValue(szCLSID,NULL,TEXT("DllCar Component - DLLSERVE Code Sample")); + SetRegKeyValue(szCLSID,TEXT("ProgID"),TEXT("CTS.DllCar.1")); + SetRegKeyValue(szCLSID,TEXT("VersionIndependentProgID"),TEXT("CTS.DllCar")); + SetRegKeyValue(szCLSID,TEXT("NotInsertable"),NULL); + SetRegKeyValue(szCLSID,TEXT("InprocServer32"),szModulePath); +#endif + return S_OK; +} + +STDAPI DllUnregisterServer(void) +{ + Message::message("DllUnregisterServer"); + return S_OK; +} + diff --git a/proto/source/DLLSERVE.HPP b/proto/source/DLLSERVE.HPP new file mode 100644 index 0000000..e22f1e9 --- /dev/null +++ b/proto/source/DLLSERVE.HPP @@ -0,0 +1,84 @@ +#ifndef _PROTO_DLLSERVER_HPP_ +#define _PROTO_DLLSERVER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class DLLServer +{ +public: + DLLServer(void); + virtual ~DLLServer(); + void addLock(void); + void removeLock(void); + void addObject(void); + void removeObject(void); + void dllInst(HINSTANCE hDLLInst); + HINSTANCE dllInst(void)const; + LONG objects(void)const; + LONG locks(void)const; +private: + HINSTANCE mhDLLInst; + LONG mObjects; + LONG mLocks; +}; + +inline +DLLServer::DLLServer(void) +: mhDLLInst(0), mObjects(0), mLocks(0) +{ +} + +inline +DLLServer::~DLLServer() +{ +} + +inline +void DLLServer::addLock(void) +{ + mLocks++; +} + +inline +void DLLServer::removeLock(void) +{ + mLocks--; +} + +inline +void DLLServer::addObject(void) +{ + mObjects++; +} + +inline +void DLLServer::removeObject(void) +{ + mObjects--; +} + +inline +void DLLServer::dllInst(HINSTANCE hDLLInst) +{ + mhDLLInst=hDLLInst; +} + +inline +HINSTANCE DLLServer::dllInst(void)const +{ + return mhDLLInst; +} + +inline +LONG DLLServer::objects(void)const +{ + return mObjects; +} + +inline +LONG DLLServer::locks(void)const +{ + return mLocks; +} +#endif \ No newline at end of file diff --git a/proto/source/DeviceDescriptor.hpp b/proto/source/DeviceDescriptor.hpp new file mode 100644 index 0000000..862be9d --- /dev/null +++ b/proto/source/DeviceDescriptor.hpp @@ -0,0 +1,66 @@ +#ifndef _PROTO_DEVICEDESCRIPTOR_HPP_ +#define _PROTO_DEVICEDESCRIPTOR_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class DeviceDescriptor +{ +public: + DeviceDescriptor(); + DeviceDescriptor(const String &name,const String &description); + virtual ~DeviceDescriptor(); + const String &getName(void)const; + void setName(const String &name); + const String &getDescription(void)const; + void setDescription(const String &description); +private: + String mName; + String mDescription; +}; + +inline +DeviceDescriptor::DeviceDescriptor() +{ +} + +inline +DeviceDescriptor::DeviceDescriptor(const String &name,const String &description) +: mName(name), mDescription(description) +{ +} + +inline +DeviceDescriptor::~DeviceDescriptor() +{ +} + +inline +const String &DeviceDescriptor::getName(void)const +{ + return mName; +} + +inline +void DeviceDescriptor::setName(const String &name) +{ + mName=name; +} + +inline +const String &DeviceDescriptor::getDescription(void)const +{ + return mDescription; +} + +inline +void DeviceDescriptor::setDescription(const String &description) +{ + mDescription=description; +} +typedef Block DeviceDescriptors; +#endif + diff --git a/proto/source/DeviceEnumerator.cpp b/proto/source/DeviceEnumerator.cpp new file mode 100644 index 0000000..7a3c901 --- /dev/null +++ b/proto/source/DeviceEnumerator.cpp @@ -0,0 +1,103 @@ +#include +#include +#include +#include + +bool DeviceEnumerator::enumerateCategory(DeviceDescriptors &descriptors,DevCat devCat) +{ + switch(devCat) + { + case AudioCaptureSources : + return enumerateCategory(descriptors,CLSID_AudioInputDeviceCategory); + case AudioCompressors : + return enumerateCategory(descriptors,CLSID_AudioCompressorCategory); + case AudioRenderers : + return enumerateCategory(descriptors,CLSID_AudioRendererCategory); + case DeviceControlFilters : + return enumerateCategory(descriptors,CLSID_DeviceControlCategory); + case DirectShowFilters : + return enumerateCategory(descriptors,CLSID_LegacyAmFilterCategory); + case ExternalRenderers : + return enumerateCategory(descriptors,CLSID_TransmitCategory); + case MidiRenderers : + return enumerateCategory(descriptors,CLSID_MidiRendererCategory); + case VideoCaptureSources : + return enumerateCategory(descriptors,CLSID_VideoInputDeviceCategory); + case VideoCompressors : + return enumerateCategory(descriptors,CLSID_VideoCompressorCategory); + case VideoEffects1 : + return enumerateCategory(descriptors,CLSID_VideoEffects1Category); + case VideoEffects2 : + return enumerateCategory(descriptors,CLSID_VideoEffects2Category); + case WDMStreamingDecompressionDevices : + return enumerateCategory(descriptors,KSCATEGORY_DATADECOMPRESSOR); + case WDMStreamingCaptureDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_CAPTURE); + case WDMStreamingCommunicationTransforms : + return enumerateCategory(descriptors,KSCATEGORY_COMMUNICATIONSTRANSFORM); + case WDMStreamingCrossbarDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_CROSSBAR); + case WDMStreamingDataTransforms : + return enumerateCategory(descriptors,KSCATEGORY_DATATRANSFORM); + case WDMStreamingInterfaceTransforms : + return enumerateCategory(descriptors,KSCATEGORY_INTERFACETRANSFORM); + case WDMStreamingMixerDevices : + return enumerateCategory(descriptors,KSCATEGORY_MIXER); + case WDMRenderingDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_RENDER); + case WDMStreamingSystemAudioDevices : + return enumerateCategory(descriptors,KSCATEGORY_AUDIO_DEVICE); + case WDMStreamingTeeSplitterDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_SPLITTER); + case WDMStreamingTVAudioDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_TVAUDIO); + case WDMStreamingTVTunerDevices : + return enumerateCategory(descriptors,AM_KSCATEGORY_TVTUNER); + case WDMStreamingVBICodes : + return enumerateCategory(descriptors,AM_KSCATEGORY_VBICODEC); + case ActiveMovieFilterCategories : + return enumerateCategory(descriptors,CLSID_ActiveMovieCategories); + } + return false; +} + +bool DeviceEnumerator::enumerateCategory(DeviceDescriptors &descriptors,GUID classID) +{ + ComInitializer comInit; + ComPointer sysDevEnum; + ComPointer enumMoniker; + ComPointer moniker; + ComObj comObj; + ComResult comResult; + BString bstring; + DeviceDescriptor descriptor; + ULONG cFetched; + + descriptors.remove(); + comResult=sysDevEnum.createInstance(CLSID_SystemDeviceEnum,IID_ICreateDevEnum); + if(comResult.error())return false; + comResult=sysDevEnum->CreateClassEnumerator(classID,(IEnumMoniker**)enumMoniker,0); + if(comResult.error())return false; + while(S_OK==enumMoniker->Next(1,(IMoniker**)moniker,&cFetched)) + { + ComPointer propertyBag; + moniker->BindToStorage(0,0,IID_IPropertyBag,(void**)(IPropertyBag**)propertyBag); + Variant varName; + comResult=propertyBag->Read(L"FriendlyName", &varName.getVARIANT(), 0); + if(comResult.success()) + { + varName.getData(bstring); + descriptor.setName(bstring.toString()); + } + comResult=propertyBag->Read(L"Description",&varName.getVARIANT(), 0); + if(comResult.success()) + { + varName.getData(bstring); + descriptor.setDescription(bstring.toString()); + } + if(descriptor.getName().isNull()&&descriptor.getDescription().isNull())continue; + descriptors.insert(&descriptor); + moniker.Release(); + } + return true; +} diff --git a/proto/source/DeviceEnumerator.hpp b/proto/source/DeviceEnumerator.hpp new file mode 100644 index 0000000..da612b9 --- /dev/null +++ b/proto/source/DeviceEnumerator.hpp @@ -0,0 +1,31 @@ +#ifndef _PROTO_DEVICEENUMERATOR_HPP_ +#define _PROTO_DEVICEENUMERATOR_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_DXSDK_HPP_ +#include +#endif +#ifndef _PROTO_DEVICEDESCRIPTOR_HPP_ +#include +#endif + +class DeviceEnumerator +{ +public: + typedef enum DevCat{AudioCaptureSources,AudioCompressors,AudioRenderers,DeviceControlFilters, + DirectShowFilters,ExternalRenderers,MidiRenderers,VideoCaptureSources,VideoCompressors, + VideoEffects1,VideoEffects2,WDMStreamingDecompressionDevices,WDMStreamingCaptureDevices, + WDMStreamingCommunicationTransforms,WDMStreamingCrossbarDevices,WDMStreamingDataTransforms, + WDMStreamingInterfaceTransforms,WDMStreamingMixerDevices,WDMRenderingDevices, + WDMStreamingSystemAudioDevices,WDMStreamingTeeSplitterDevices,WDMStreamingTVAudioDevices, + WDMStreamingTVTunerDevices,WDMStreamingVBICodes,ActiveMovieFilterCategories}; + static bool enumerateCategory(DeviceDescriptors &descriptors,DevCat devCat); +private: + static bool enumerateCategory(DeviceDescriptors &descriptors,GUID classID); +}; +#endif + diff --git a/proto/source/DivePlanner.hpp b/proto/source/DivePlanner.hpp new file mode 100644 index 0000000..61b6bfb --- /dev/null +++ b/proto/source/DivePlanner.hpp @@ -0,0 +1,201 @@ +#ifndef _DIVEPLANNER_DIVEPLANNER_HPP_ +#define _DIVEPLANNER_DIVEPLANNER_HPP_ +#include +#include +#include +#include + +class DivePlanner +{ +public: + enum Group{GroupA,GroupB,GroupC,GroupD,GroupE,GroupF,GroupG,GroupH,GroupI,GroupJ, + GroupK,GroupL,GroupM,GroupN,GroupO,GroupP,GroupQ,GroupR,GroupS,GroupT, + GroupU,GroupV,GroupW,GroupX,GroupY,GroupZ,GroupNone}; + enum Depth{Depth35=0,Depth40,Depth50,Depth60,Depth70,Depth80,Depth90,Depth100,Depth110,Depth120,Depth130,Depth140,DepthNone}; + Group getGroup(int depth,int minutes); + Group getGroup(const SurfaceTime &surfaceTime,Group pressureGroup); + void dumpTable(void); +private: + typedef SurfaceInterval SI; + typedef SurfaceTime ST; + typedef TimeInterval TI; + Depth getDepth(int actualDepth); + static int smGroupTable[][12]; + static SI smSurfaceIntervalTable[][26]; + static TI smTimeIntervalTable[][26]; +}; + +int DivePlanner::smGroupTable[][12]={{10,9,7,6,5,4,4,3,3,3,3,4}, + {19,16,13,11,9,8,7,6,6,5,5,4}, + {25,22,17,14,12,10,9,8,7,6,6,5}, + {29,25,19,16,13,11,10,9,8,7,7,6}, + {32,27,21,17,15,13,11,10,9,8,8,7}, + {36,31,24,19,16,14,12,11,10,9,8,8}, + {40,34,26,21,18,15,13,12,11,10,9,-1}, + {44,37,28,23,19,17,15,13,12,11,10,-1}, + {48,40,31,25,21,18,16,14,13,12,-1,-1}, + {52,44,33,27,22,19,17,15,14,12,-1,-1}, + {57,48,36,29,24,21,18,16,14,13,-1,-1}, + {62,51,39,31,26,22,19,17,15,-1,-1,-1}, + {67,55,41,33,27,23,21,18,16,-1,-1,-1}, + {73,60,44,35,29,25,22,19,-1,-1,-1,-1}, + {79,64,47,37,31,26,23,20,-1,-1,-1,-1}, + {85,69,50,39,33,28,24,-1,-1,-1,-1,-1}, + {92,74,53,42,35,29,25,-1,-1,-1,-1,-1}, + {100,79,57,44,36,30,-1,-1,-1,-1,-1,-1}, + {108,85,60,47,38,-1,-1,-1,-1,-1,-1,-1}, + {117,91,63,49,40,-1,-1,-1,-1,-1,-1,-1}, + {127,97,67,52,-1,-1,-1,-1,-1,-1,-1,-1}, + {139,104,71,54,-1,-1,-1,-1,-1,-1,-1,-1}, + {152,111,75,55,-1,-1,-1,-1,-1,-1,-1,-1}, + {168,120,80,-1,-1,-1,-1,-1,-1,-1,-1,-1}, + {188,129,-1,-1,-1,-1,-1,-1,-1,-1,-1}, + {205,140,-1,-1,-1,-1,-1,-1,-1,-1,-1}}; + + +DivePlanner::SI DivePlanner::smSurfaceIntervalTable[][26]= + {{SI(ST(0,0),ST(3,0)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(0,48),ST(3,48)),SI(ST(0,0),ST(0,47)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(1,10),ST(4,10)),SI(ST(0,22),ST(1,9)),SI(ST(0,0),ST(0,21)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(1,19),ST(4,19)),SI(ST(0,31),ST(1,18)),SI(ST(0,9),ST(0,30)),SI(ST(0,0),ST(0,8)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(1,28),ST(4,28)),SI(ST(0,39),ST(1,27)),SI(ST(0,17),ST(0,38)),SI(ST(0,8),ST(0,16)),SI(ST(0,0),ST(0,7)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(1,35),ST(4,35)),SI(ST(0,47),ST(1,34)),SI(ST(0,25),ST(0,46)),SI(ST(0,16),ST(0,24)),SI(ST(0,8),ST(0,15)),SI(ST(0,0),ST(0,7)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(1,42),ST(4,42)),SI(ST(0,54),ST(1,41)),SI(ST(0,32),ST(0,53)),SI(ST(0,23),ST(0,31)),SI(ST(0,14),ST(0,22)),SI(ST(0,7),ST(0,13)),SI(ST(0,0),ST(0,6)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(1,48),ST(4,48)),SI(ST(1,0),ST(1,47)),SI(ST(0,38),ST(0,59)),SI(ST(0,29),ST(0,37)),SI(ST(0,21),ST(0,28)),SI(ST(0,13),ST(0,20)),SI(ST(0,6),ST(0,12)),SI(ST(0,0),ST(0,5)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(1,54),ST(4,54)),SI(ST(1,6),ST(1,53)),SI(ST(0,44),ST(1,5)),SI(ST(0,35),ST(0,43)),SI(ST(0,27),ST(0,34)),SI(ST(0,19),ST(0,26)),SI(ST(0,12),ST(0,18)),SI(ST(0,6),ST(0,11)),SI(ST(0,0),ST(0,5)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,0),ST(5,0)),SI(ST(1,12),ST(1,59)),SI(ST(0,50),ST(1,11)),SI(ST(0,41),ST(0,49)),SI(ST(0,32),ST(0,40)),SI(ST(0,25),ST(0,31)),SI(ST(0,18),ST(0,24)),SI(ST(0,12),ST(0,17)),SI(ST(0,6),ST(0,11)),SI(ST(0,0),ST(0,5)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,5),ST(5,5)),SI(ST(1,17),ST(2,4)),SI(ST(0,55),ST(1,16)),SI(ST(0,46),ST(0,54)),SI(ST(0,38),ST(0,45)),SI(ST(0,30),ST(0,37)),SI(ST(0,23),ST(0,29)),SI(ST(0,17),ST(0,22)),SI(ST(0,11),ST(0,16)),SI(ST(0,5),ST(0,10)),SI(ST(0,0),ST(0,4)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,10),ST(5,10)),SI(ST(1,22),ST(2,9)),SI(ST(1,0),ST(1,21)),SI(ST(0,51),ST(0,59)),SI(ST(0,43),ST(0,50)),SI(ST(0,35),ST(0,42)),SI(ST(0,28),ST(0,34)),SI(ST(0,22),ST(0,27)),SI(ST(0,16),ST(0,21)),SI(ST(0,10),ST(0,15)),SI(ST(0,5),ST(0,9)),SI(ST(0,0),ST(0,4)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,15),ST(5,15)),SI(ST(1,26),ST(2,14)),SI(ST(1,5),ST(1,25)),SI(ST(0,56),ST(1,4)),SI(ST(0,47),ST(0,55)),SI(ST(0,40),ST(0,46)),SI(ST(0,33),ST(0,39)),SI(ST(0,26),ST(0,32)),SI(ST(0,20),ST(0,25)),SI(ST(0,15),ST(0,19)),SI(ST(0,10),ST(0,14)),SI(ST(0,5),ST(0,9)),SI(ST(0,0),ST(0,4)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,19),ST(5,19)),SI(ST(1,31),ST(2,18)),SI(ST(1,9),ST(1,30)),SI(ST(1,0),ST(1,8)),SI(ST(0,52),ST(0,59)),SI(ST(0,44),ST(0,51)),SI(ST(0,37),ST(0,43)),SI(ST(0,31),ST(0,36)),SI(ST(0,25),ST(0,30)),SI(ST(0,19),ST(0,24)),SI(ST(0,14),ST(0,18)),SI(ST(0,9),ST(0,13)),SI(ST(0,4),ST(0,8)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,24),ST(5,24)),SI(ST(1,35),ST(2,23)),SI(ST(1,13),ST(1,34)),SI(ST(1,4),ST(1,12)),SI(ST(0,56),ST(1,3)),SI(ST(0,48),ST(0,55)),SI(ST(0,42),ST(0,47)),SI(ST(0,35),ST(0,41)),SI(ST(0,29),ST(0,34)),SI(ST(0,24),ST(0,28)),SI(ST(0,18),ST(0,23)),SI(ST(0,13),ST(0,17)),SI(ST(0,9),ST(0,12)),SI(ST(0,4),ST(0,8)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,28),ST(5,28)),SI(ST(1,39),ST(2,27)),SI(ST(1,17),ST(1,38)),SI(ST(1,8),ST(1,16)),SI(ST(1,0),ST(1,7)),SI(ST(0,52),ST(0,59)),SI(ST(0,46),ST(0,51)),SI(ST(0,39),ST(0,45)),SI(ST(0,33),ST(0,38)),SI(ST(0,28),ST(0,32)),SI(ST(0,22),ST(0,27)),SI(ST(0,17),ST(0,21)),SI(ST(0,13),ST(0,16)),SI(ST(0,8),ST(0,12)),SI(ST(0,4),ST(0,7)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,31),ST(5,31)),SI(ST(1,43),ST(2,30)),SI(ST(1,21),ST(1,42)),SI(ST(1,12),ST(1,20)),SI(ST(1,4),ST(1,11)),SI(ST(0,56),ST(1,3)),SI(ST(0,49),ST(0,55)),SI(ST(0,43),ST(0,48)),SI(ST(0,37),ST(0,42)),SI(ST(0,31),ST(0,36)),SI(ST(0,26),ST(0,30)),SI(ST(0,21),ST(0,25)),SI(ST(0,17),ST(0,20)),SI(ST(0,12),ST(0,16)),SI(ST(0,8),ST(0,11)),SI(ST(0,4),ST(0,7)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,35),ST(5,35)),SI(ST(1,47),ST(2,34)),SI(ST(1,25),ST(1,46)),SI(ST(1,16),ST(1,24)),SI(ST(1,8),ST(1,15)),SI(ST(1,0),ST(1,7)),SI(ST(0,53),ST(0,59)),SI(ST(0,47),ST(0,52)),SI(ST(0,41),ST(0,46)),SI(ST(0,35),ST(0,40)),SI(ST(0,30),ST(0,34)),SI(ST(0,25),ST(0,29)),SI(ST(0,20),ST(0,24)),SI(ST(0,16),ST(0,19)),SI(ST(0,12),ST(0,15)),SI(ST(0,8),ST(0,11)),SI(ST(0,4),ST(0,7)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,39),ST(5,39)),SI(ST(1,50),ST(2,38)),SI(ST(1,28),ST(1,49)),SI(ST(1,19),ST(1,27)),SI(ST(1,11),ST(1,18)),SI(ST(1,4),ST(1,10)),SI(ST(0,57),ST(1,3)),SI(ST(0,50),ST(0,56)),SI(ST(0,44),ST(0,49)),SI(ST(0,39),ST(0,43)),SI(ST(0,33),ST(0,38)),SI(ST(0,28),ST(0,32)),SI(ST(0,24),ST(0,27)),SI(ST(0,19),ST(0,23)),SI(ST(0,15),ST(0,18)),SI(ST(0,11),ST(0,14)),SI(ST(0,7),ST(0,10)),SI(ST(0,4),ST(0,6)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,42),ST(5,42)),SI(ST(1,54),ST(2,41)),SI(ST(1,32),ST(1,53)),SI(ST(1,23),ST(1,31)),SI(ST(1,14),ST(1,22)),SI(ST(1,7),ST(1,13)),SI(ST(1,0),ST(1,6)),SI(ST(0,54),ST(0,59)),SI(ST(0,48),ST(0,53)),SI(ST(0,42),ST(0,47)),SI(ST(0,37),ST(0,41)),SI(ST(0,32),ST(0,36)),SI(ST(0,27),ST(0,31)),SI(ST(0,23),ST(0,26)),SI(ST(0,18),ST(0,22)),SI(ST(0,14),ST(0,17)),SI(ST(0,11),ST(0,13)),SI(ST(0,7),ST(0,10)),SI(ST(0,3),ST(0,6)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,45),ST(5,45)),SI(ST(1,57),ST(2,44)),SI(ST(1,35),ST(1,56)),SI(ST(1,26),ST(1,34)),SI(ST(1,18),ST(1,25)),SI(ST(1,10),ST(1,17)),SI(ST(1,3),ST(1,9)),SI(ST(0,57),ST(1,2)),SI(ST(0,51),ST(0,56)),SI(ST(0,45),ST(0,50)),SI(ST(0,40),ST(0,44)),SI(ST(0,35),ST(0,39)),SI(ST(0,30),ST(0,34)),SI(ST(0,26),ST(0,29)),SI(ST(0,22),ST(0,25)),SI(ST(0,18),ST(0,21)),SI(ST(0,14),ST(0,17)),SI(ST(0,10),ST(0,13)),SI(ST(0,7),ST(0,9)),SI(ST(0,3),ST(0,6)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI(),SI(),SI()}, + {SI(ST(2,48),ST(5,48)),SI(ST(2,0),ST(2,47)),SI(ST(1,38),ST(1,59)),SI(ST(1,29),ST(1,37)),SI(ST(1,21),ST(1,28)),SI(ST(1,13),ST(1,20)),SI(ST(1,6),ST(1,12)),SI(ST(1,0),ST(1,5)),SI(ST(0,54),ST(0,59)),SI(ST(0,48),ST(0,53)),SI(ST(0,43),ST(0,47)),SI(ST(0,38),ST(0,42)),SI(ST(0,34),ST(0,37)),SI(ST(0,29),ST(0,33)),SI(ST(0,25),ST(0,28)),SI(ST(0,21),ST(0,24)),SI(ST(0,17),ST(0,20)),SI(ST(0,13),ST(0,16)),SI(ST(0,10),ST(0,12)),SI(ST(0,6),ST(0,9)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI(),SI()}, + {SI(ST(2,51),ST(5,51)),SI(ST(2,3),ST(2,50)),SI(ST(1,41),ST(2,2)),SI(ST(1,32),ST(1,40)),SI(ST(1,24),ST(1,31)),SI(ST(1,16),ST(1,23)),SI(ST(1,9),ST(1,15)),SI(ST(1,3),ST(1,8)),SI(ST(0,57),ST(1,2)),SI(ST(0,51),ST(0,56)),SI(ST(0,46),ST(0,50)),SI(ST(0,41),ST(0,45)),SI(ST(0,37),ST(0,40)),SI(ST(0,32),ST(0,36)),SI(ST(0,28),ST(0,31)),SI(ST(0,24),ST(0,27)),SI(ST(0,20),ST(0,23)),SI(ST(0,16),ST(0,19)),SI(ST(0,13),ST(0,15)),SI(ST(0,9),ST(0,12)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI()}, + {SI(ST(2,54),ST(5,54)),SI(ST(2,6),ST(2,53)),SI(ST(1,44),ST(2,5)),SI(ST(1,35),ST(1,43)),SI(ST(1,27),ST(1,34)),SI(ST(1,19),ST(1,26)),SI(ST(1,12),ST(1,18)),SI(ST(1,6),ST(1,11)),SI(ST(1,0),ST(1,5)),SI(ST(0,54),ST(0,59)),SI(ST(0,49),ST(0,53)),SI(ST(0,44),ST(0,48)),SI(ST(0,40),ST(0,43)),SI(ST(0,35),ST(0,39)),SI(ST(0,31),ST(0,34)),SI(ST(0,27),ST(0,30)),SI(ST(0,23),ST(0,26)),SI(ST(0,19),ST(0,22)),SI(ST(0,16),ST(0,18)),SI(ST(0,12),ST(0,15)),SI(ST(0,9),ST(0,11)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI(),SI()}, + {SI(ST(2,57),ST(5,57)),SI(ST(2,9),ST(2,56)),SI(ST(1,47),ST(2,8)),SI(ST(1,38),ST(1,46)),SI(ST(1,30),ST(1,37)),SI(ST(1,22),ST(1,29)),SI(ST(1,15),ST(1,21)),SI(ST(1,9),ST(1,14)),SI(ST(1,3),ST(1,8)),SI(ST(0,57),ST(1,2)),SI(ST(0,52),ST(0,56)),SI(ST(0,47),ST(0,51)),SI(ST(0,42),ST(0,46)),SI(ST(0,38),ST(0,41)),SI(ST(0,34),ST(0,37)),SI(ST(0,30),ST(0,33)),SI(ST(0,26),ST(0,29)),SI(ST(0,22),ST(0,25)),SI(ST(0,19),ST(0,21)),SI(ST(0,15),ST(0,18)),SI(ST(0,12),ST(0,14)),SI(ST(0,9),ST(0,11)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI()}, + {SI(ST(3,0),ST(6,0)),SI(ST(2,12),ST(2,59)),SI(ST(1,50),ST(2,11)),SI(ST(1,41),ST(1,49)),SI(ST(1,32),ST(1,40)),SI(ST(1,25),ST(1,31)),SI(ST(1,18),ST(1,24)),SI(ST(1,12),ST(1,17)),SI(ST(1,6),ST(1,11)),SI(ST(1,0),ST(1,5)),SI(ST(0,55),ST(0,59)),SI(ST(0,50),ST(0,54)),SI(ST(0,45),ST(0,49)),SI(ST(0,41),ST(0,44)),SI(ST(0,36),ST(0,40)),SI(ST(0,32),ST(0,35)),SI(ST(0,29),ST(0,31)),SI(ST(0,25),ST(0,28)),SI(ST(0,21),ST(0,24)),SI(ST(0,18),ST(0,20)),SI(ST(0,15),ST(0,17)),SI(ST(0,12),ST(0,14)),SI(ST(0,9),ST(0,11)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2))} + }; + +DivePlanner::TI DivePlanner::smTimeIntervalTable[][26]= + { + {TI(10,195),TI(19,186),TI(25,180),TI(29,176),TI(32,173),TI(36,169),TI(40,165),TI(44,161),TI(48,157),TI(52,153),TI(57,148),TI(62,143),TI(67,138),TI(73,132),TI(79,126),TI(85,120),TI(92,113),TI(100,105),TI(108,97),TI(117,88),TI(127,78),TI(139,66),TI(152,53),TI(168,37),TI(188,17),TI(205,0)}, + {TI(9,131),TI(16,124),TI(22,118),TI(25,115),TI(27,113),TI(31,109),TI(34,106),TI(37,103),TI(40,100),TI(44,96),TI(48,92),TI(51,89),TI(55,85),TI(60,80),TI(64,76),TI(69,71),TI(74,66),TI(79,61),TI(85,55),TI(91,49),TI(97,43),TI(104,36),TI(111,29),TI(120,20),TI(129,11),TI(140,0)}, + {TI(7,73),TI(13,67),TI(17,63),TI(19,61),TI(21,59),TI(24,56),TI(26,54),TI(28,52),TI(31,49),TI(33,47),TI(36,44),TI(38,42),TI(41,39),TI(44,36),TI(47,33),TI(50,30),TI(53,27),TI(57,23),TI(60,20),TI(63,17),TI(67,13),TI(71,9),TI(75,5),TI(80,0),TI(),TI()}, + {TI(6,49),TI(11,44),TI(14,41),TI(16,39),TI(17,38),TI(19,36),TI(21,34),TI(23,32),TI(25,30),TI(27,28),TI(29,26),TI(31,24),TI(33,22),TI(35,20),TI(37,18),TI(39,16),TI(42,13),TI(44,11),TI(47,8),TI(49,6),TI(52,3),TI(54,1),TI(55,0),TI(),TI(),TI()}, + {TI(5,35),TI(9,31),TI(12,28),TI(13,27),TI(15,25),TI(16,24),TI(18,22),TI(19,21),TI(21,19),TI(22,18),TI(24,16),TI(26,14),TI(27,13),TI(29,11),TI(31,9),TI(33,7),TI(34,6),TI(36,4),TI(38,2),TI(40,0),TI(),TI(),TI(),TI(),TI(),TI()}, + {TI(4,26),TI(8,22),TI(10,20),TI(11,19),TI(13,17),TI(14,16),TI(15,15),TI(17,13),TI(18,12),TI(19,11),TI(21,9),TI(22,8),TI(23,7),TI(25,5),TI(26,4),TI(28,2),TI(29,0),TI(30,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, + {TI(4,21),TI(7,18),TI(9,16),TI(10,15),TI(11,14),TI(12,13),TI(13,12),TI(15,10),TI(16,9),TI(17,8),TI(18,7),TI(19,6),TI(21,4),TI(22,3),TI(23,2),TI(24,0),TI(25,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, + {TI(3,17),TI(6,14),TI(8,12),TI(9,11),TI(10,10),TI(11,9),TI(12,8),TI(13,7),TI(14,6),TI(15,5),TI(16,4),TI(17,3),TI(18,2),TI(19,0),TI(20,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, + {TI(3,13),TI(6,10),TI(7,9),TI(8,8),TI(9,7),TI(10,6),TI(11,5),TI(12,4),TI(13,3),TI(14,2),TI(14,2),TI(15,0),TI(16,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, + {TI(3,10),TI(5,8),TI(6,7),TI(7,6),TI(8,5),TI(9,4),TI(10,3),TI(11,2),TI(12,0),TI(12,0),TI(13,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, + {TI(3,7),TI(5,5),TI(6,4),TI(7,3),TI(8,0),TI(8,0),TI(9,0),TI(10,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()} + }; + +DivePlanner::Group DivePlanner::getGroup(int actualDepth,int actualMinutes) +{ + Depth depth(getDepth(actualDepth)); + Group group(GroupNone); + + if(DepthNone==depth)return GroupNone; + for(int currGroup=GroupA;currGroup<=GroupZ;currGroup++) + { + if(actualMinutes<=smGroupTable[currGroup][depth]) + { + group=Group(currGroup); + break; + } + } + return group; +} + +DivePlanner::Group DivePlanner::getGroup(const SurfaceTime &surfaceTime,Group pressureGroup) +{ + if(GroupNone==pressureGroup)return GroupNone; + for(int col=0;col<25;col++) + { + if(surfaceTime>=(smSurfaceIntervalTable[pressureGroup][col]).minTime()&& + surfaceTime<=(smSurfaceIntervalTable[pressureGroup][col]).maxTime()) + return Group(col); + } + return GroupNone; +} + +DivePlanner::Depth DivePlanner::getDepth(int actualDepth) +{ + if(actualDepth<=35)return Depth35; + else if(actualDepth<=40)return Depth40; + else if(actualDepth<=50)return Depth50; + else if(actualDepth<=60)return Depth60; + else if(actualDepth<=70)return Depth70; + else if(actualDepth<=80)return Depth80; + else if(actualDepth<=90)return Depth90; + else if(actualDepth<=100)return Depth100; + else if(actualDepth<=110)return Depth110; + else if(actualDepth<=120)return Depth120; + else if(actualDepth<=130)return Depth130; + else if(actualDepth<=140)return Depth140; + else return DepthNone; +} + +void DivePlanner::dumpTable(void) +{ + ::OutputDebugString("{\n"); + for(int row=0;row<26;row++) + { + String strDebug; + String strCol; + + for(int col=0;col<26;col++) + { + ::sprintf(strCol,"{{%d,%d},{%d,%d}},", + (smSurfaceIntervalTable[row][col]).minTime().hours(), + (smSurfaceIntervalTable[row][col]).minTime().minutes(), + (smSurfaceIntervalTable[row][col]).maxTime().hours(), + (smSurfaceIntervalTable[row][col]).maxTime().minutes()); + strDebug+=strCol; + } + strDebug+="\n"; + ::OutputDebugString(strDebug.str()); + } + ::OutputDebugString("};\n"); +} + +#if 0 +void DivePlanner::dumpTable(void) +{ + String strDebug; + + strDebug.reserve(512); + for(int row=0;row<26;row++) + { + for(int col=0;col<26;col++) + { + ::sprintf(strDebug,"smSurfaceIntervalTable[%d][%d]=SurfaceInterval(SurfaceTime(%d,%d),SurfaceTime(%d,%d));\n", + row,col, + (smSurfaceIntervalTable[row][col]).minTime().hours(), + (smSurfaceIntervalTable[row][col]).minTime().minutes(), + (smSurfaceIntervalTable[row][col]).maxTime().hours(), + (smSurfaceIntervalTable[row][col]).maxTime().minutes()); + ::OutputDebugString(strDebug); + } + } +} +#endif + + +// static SI smSurfaceIntervalTable[][26]; + + + +//DivePlanner::SI DivePlanner::smSurfaceIntervalTable[][26]= + + + + +#endif diff --git a/proto/source/EDITHOOK.CPP b/proto/source/EDITHOOK.CPP new file mode 100644 index 0000000..42b2bcd --- /dev/null +++ b/proto/source/EDITHOOK.CPP @@ -0,0 +1,32 @@ +#include +#include + +EditWinHookProc::EditWinHookProc(void) +{ + mPaintHandler.setCallback(this,&EditWinHookProc::paintHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); +} + +EditWinHookProc::~EditWinHookProc() +{ + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); +} + +CallbackData::ReturnType EditWinHookProc::paintHandler(CallbackData &someCallbackData) +{ +// PAINTSTRUCT ps; +// PureDevice pureDevice(::BeginPaint(someCallbackData.hwndFrom(),&ps)); +// PureDevice pureDevice(someCallbackData.hwndFrom()); +// pureDevice.setTextColor(RGBColor(255,0,0)); +// pureDevice.setBkColor(RGBColor(0,255,0)); +// pureDevice.textOut(0,0,"als;akls;dk"); +// ::EndPaint(someCallbackData.hwndFrom(),&ps); + return (CallbackData::ReturnType)TRUE; +} + + +// mControlWnd.createControl(WS_EX_CLIENTEDGE,"EDIT","",0,Rect(10,10,200,200),*this,101); +// Font editFont("Helv",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightNormal); +// mControlWnd.setFont(editFont); + + diff --git a/proto/source/EDITHOOK.HPP b/proto/source/EDITHOOK.HPP new file mode 100644 index 0000000..f92c2a2 --- /dev/null +++ b/proto/source/EDITHOOK.HPP @@ -0,0 +1,16 @@ +#ifndef _PROTO_EDITWINHOOKPROC_HPP_ +#define _PROTO_EDITWINHOOKPROC_HPP_ +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif + +class EditWinHookProc : public WinHookProc +{ +public: + EditWinHookProc(void); + virtual ~EditWinHookProc(); +private: + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + Callback mPaintHandler; +}; +#endif diff --git a/proto/source/EJECT.bmp b/proto/source/EJECT.bmp new file mode 100644 index 0000000..6dcbf0b Binary files /dev/null and b/proto/source/EJECT.bmp differ diff --git a/proto/source/FIXED.HPP b/proto/source/FIXED.HPP new file mode 100644 index 0000000..729a67e --- /dev/null +++ b/proto/source/FIXED.HPP @@ -0,0 +1,10 @@ +#ifndef _PROTO_FIXEDPOINT_HPP_ +#define _PROTO_FIXEDPOINT_HPP_ + +class FixedPoint +{ +public: + enum {FPShift=12,FPMul=4096}; +private: +}; +#endif \ No newline at end of file diff --git a/proto/source/GEOM.HPP b/proto/source/GEOM.HPP new file mode 100644 index 0000000..0929c27 --- /dev/null +++ b/proto/source/GEOM.HPP @@ -0,0 +1,51 @@ +#ifndef _PROTO_GEOMETRY_HPP_ +#define _PROTO_GEOMETRY_HPP_ +#ifndef _PROTO_FIXEDPOINT_HPP_ +#include +#endif + +class Geometry +{ +public: + enum {Magic=64,HeightFieldWidth=512,HeightFieldHeight=512,HeightFieldBitShift=9,TerrainScalex2=3, + MaxSteps=200}; + Geometry(void); + virtual ~Geometry(); + int viewPlaneDistance(void)const; + int deltaSlope(void)const; + void screenWidth(int screenWidth); +private: + int mDeltaSlope; + int mViewPlaneDistance; +}; + +inline +Geometry::Geometry(void) +: mDeltaSlope(0), mViewPlaneDistance(0) +{ +} + +inline +Geometry::~Geometry() +{ +} + +inline +int Geometry::viewPlaneDistance(void)const +{ + return mViewPlaneDistance; +} + +inline +int Geometry::deltaSlope(void)const +{ + return mDeltaSlope; +} + +inline +void Geometry::screenWidth(int screenWidth) +{ + mViewPlaneDistance=screenWidth/Magic; + mDeltaSlope=(1.00/(double)mViewPlaneDistance)*FixedPoint::FPMul; +} +#endif \ No newline at end of file diff --git a/proto/source/GUIDS.HPP b/proto/source/GUIDS.HPP new file mode 100644 index 0000000..bb0f576 --- /dev/null +++ b/proto/source/GUIDS.HPP @@ -0,0 +1,6 @@ +#ifndef _PROTO_GUIDS_HPP_ +#define _PROTO_GUIDS_HPP_ +DEFINE_GUID(IID_ISimpleObject,0x8c17a192, 0x4843, 0x11d2, 0x91, 0x8c, 0x80, 0x8b, 0x7a, 0x6, 0x33, 0x68); +DEFINE_GUID(CLSID_SimpleObject,0x8c17a191, 0x4843, 0x11d2, 0x91, 0x8c, 0x80, 0x8b, 0x7a, 0x6, 0x33, 0x68); +DEFINE_GUID(LIBID_SimpleObjectLib,0x8C17A193,0x4843,0x11d2,0x91,0x8C,0x80,0x8B,0x7A,0x06,0x33,0x68); +#endif \ No newline at end of file diff --git a/proto/source/GuitarString.hpp b/proto/source/GuitarString.hpp new file mode 100644 index 0000000..6e8a214 --- /dev/null +++ b/proto/source/GuitarString.hpp @@ -0,0 +1,35 @@ +#ifndef _PROTO_STRING_HPP_ +#define _PROTO_STRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Tuning +{ +public: +private: +} + +class FretBoard : Array +{ +public: + FretBoard(); + virtual FretBoard(); +private: + int mFrets; + int mStrings; +}; + + +class GuitarString; + +typedef Array GuitarStrings; + +class GuitarString : Notes +{ +public: + GuitarString(); + virtual ~GuitarString(); +private: +}; +public: diff --git a/proto/source/HANDLE.CPP b/proto/source/HANDLE.CPP new file mode 100644 index 0000000..14b676b --- /dev/null +++ b/proto/source/HANDLE.CPP @@ -0,0 +1,4 @@ +#include + +HANDLE hevtDone; + diff --git a/proto/source/HTTPConnection.hpp b/proto/source/HTTPConnection.hpp new file mode 100644 index 0000000..99c729a --- /dev/null +++ b/proto/source/HTTPConnection.hpp @@ -0,0 +1,167 @@ +#ifndef _PROTO_HTTPCONNECTION_HPP_ +#define _PROTO_HTTPCONNECTION_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _PROTO_INTERNET_HPP_ +#include +#endif +#ifndef _PROTO_CONNECTION_HPP_ +#include +#endif +#ifndef _PROTO_HTTPHEADER_HPP_ +#include +#endif +#ifndef _PROTO_HTTPDATA_HPP_ +#include +#endif + +class HTTPConnection : private Connection +{ +public: + HTTPConnection(void); + HTTPConnection(const Internet &internet,const String &strServer,int port=INTERNET_DEFAULT_HTTP_PORT); + virtual ~HTTPConnection(); + bool connect(const Internet &internet,const String &strServer,int port=INTERNET_DEFAULT_HTTP_PORT); + bool get(HTTPHeader &httpHeader,HTTPData &httpData); + bool get(const String &action,HTTPHeader &httpHeader,HTTPData &httpData); + bool post(const String &action,HTTPHeader &httpHeader,HTTPData &httpData); + void close(void); +private: + HTTPConnection(const HTTPConnection &httpConnection); + HTTPConnection &operator=(const HTTPConnection &httpConnection); + void closeRequest(void); + void createHeaderLines(String &strLines,Block &headerLines); + + HINTERNET mhRequest; +}; + +inline +HTTPConnection::HTTPConnection() +: mhRequest(0) +{ +} + +inline +HTTPConnection::HTTPConnection(const HTTPConnection &httpConnection) +{ // private +} + +inline +HTTPConnection &HTTPConnection::operator=(const HTTPConnection &httpConnection) +{ // private + return *this; +} + +inline +HTTPConnection::HTTPConnection(const Internet &internet,const String &strServer,int port) +{ + connect(internet,strServer,port); +} + +inline +HTTPConnection::~HTTPConnection() +{ + close(); +} + +inline +bool HTTPConnection::connect(const Internet &internet,const String &strServer,int port) +{ + if(!internet.isOkay())return false; + return Connection::connect(internet,strServer,INTERNET_SERVICE_HTTP,port); +} + +bool HTTPConnection::get(HTTPHeader &httpHeader,HTTPData &httpData) +{ + return get(String(),httpHeader,httpData); +} + +bool HTTPConnection::get(const String &action,HTTPHeader &httpHeader,HTTPData &httpData) +{ + DWORD dwSize(0); + String strHeaders; +// String strHeader; + bool sendResult=false; + + LPSTR accessTypes[2]={"*/*",0}; + if(!isOkay())return false; + mhRequest=::HttpOpenRequest(getHANDLE(),"GET",action.str(),HTTP_VERSION,0,(const char**)&accessTypes,INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE,0); + if(!mhRequest)return false; +// strHeader=httpHeader.serialize(); + if(!::HttpSendRequest(mhRequest,0,0,0,0))return false; +// if(httpData.size()&&!strHeader.isNull())sendResult=::HttpSendRequest(mhRequest,strHeader.str(),strHeader.length(),&httpData[0],httpData.size()); +// else sendResult=::HttpSendRequest(mhRequest,0,0,0,0); +// if(!sendResult)return false; + ::HttpQueryInfo(mhRequest,HTTP_QUERY_RAW_HEADERS_CRLF,0,&dwSize,0); + if(!dwSize)return false; + strHeaders.reserve(dwSize+1); + ::HttpQueryInfo(mhRequest,HTTP_QUERY_RAW_HEADERS_CRLF,strHeaders,&dwSize,0); + httpHeader=strHeaders; + httpData.size(httpHeader.getContentLength()); + if(!httpData.size())httpData.size(32768); + ::InternetReadFile(mhRequest,&httpData[0],httpData.size(),&dwSize); + if(dwSize +#endif + +class HTTPData : public Array +{ +public: + HTTPData(); + virtual ~HTTPData(); + HTTPData &operator=(const String &string); +private: +}; + +inline +HTTPData::HTTPData() +{ +} + +inline +HTTPData::~HTTPData() +{ +} + +inline +HTTPData &HTTPData::operator=(const String &string) +{ + int strLength; + + if(string.isNull()||0==(strLength=string.length()))return *this; + size(strLength); + ::memcpy(&operator[](0),string.str(),strLength); + return *this; +} +#endif diff --git a/proto/source/HTTPHeader.hpp b/proto/source/HTTPHeader.hpp new file mode 100644 index 0000000..c4649c2 --- /dev/null +++ b/proto/source/HTTPHeader.hpp @@ -0,0 +1,240 @@ +#ifndef _PROTO_HTTPHEADER_HPP_ +#define _PROTO_HTTPHEADER_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _PROTO_SERIALIZEABLE_HPP_ +#include +#endif + +class HTTPHeader : public Serializeable +{ +public: + HTTPHeader(); + HTTPHeader(Block &headerLines); + HTTPHeader(const String &headerLines); + virtual ~HTTPHeader(); + HTTPHeader &operator=(Block &headerLines); + HTTPHeader &operator=(const String &headerLines); + + const String &getDate(void)const; + void setDate(const String &date); + + const String &getServer(void)const; + void setServer(const String &server); + + const String &getLastModified(void)const; + void setLastModified(const String &lastModified); + + const String &getETag(void)const; + void setETag(const String &eTag); + + int getContentLength(void)const; + void setContentLength(int contentLength); + + const String &getContentType(void)const; + void setContentType(const String &contentType); + + const String &getAccept(void)const; + void setAccept(const String &accept); + + String serialize(void); +private: + void parseHeader(Block &headerLines); + void parseHeader(const String &headerLines); + void createHeaderLines(String strHeaders,Block &headerLines); + + String mDate; + String mServer; + String mLastModified; + String mETag; + String mAcceptRanges; + int mContentLength; + String mContentType; + String mAccept; +}; + +inline +HTTPHeader::HTTPHeader() +{ +} + +inline +HTTPHeader::HTTPHeader(Block &headerLines) +{ + parseHeader(headerLines); +} + +inline +HTTPHeader::HTTPHeader(const String &headerLines) +{ + parseHeader(headerLines); +} + +inline +HTTPHeader::~HTTPHeader() +{ +} + +inline +HTTPHeader &HTTPHeader::operator=(Block &headerLines) +{ + parseHeader(headerLines); + return *this; +} + +inline +HTTPHeader &HTTPHeader::operator=(const String &headerLines) +{ + parseHeader(headerLines); + return *this; +} + +inline +const String &HTTPHeader::getDate(void)const +{ + return mDate; +} + +inline +void HTTPHeader::setDate(const String &date) +{ + mDate=date; +} + +inline +const String &HTTPHeader::getServer(void)const +{ + return mServer; +} + +inline +void HTTPHeader::setServer(const String &server) +{ + mServer=server; +} + +inline +const String &HTTPHeader::getLastModified(void)const +{ + return mLastModified; +} + +inline +void HTTPHeader::setLastModified(const String &lastModified) +{ + mLastModified=lastModified; +} + +inline +const String &HTTPHeader::getETag(void)const +{ + return mETag; +} + +inline +void HTTPHeader::setETag(const String &eTag) +{ + mETag=eTag; +} + +inline +int HTTPHeader::getContentLength(void)const +{ + return mContentLength; +} + +inline +void HTTPHeader::setContentLength(int contentLength) +{ + mContentLength=contentLength; +} + +inline +const String &HTTPHeader::getContentType(void)const +{ + return mContentType; +} + +inline +void HTTPHeader::setContentType(const String &contentType) +{ + mContentType=contentType; +} + +inline +const String &HTTPHeader::getAccept(void)const +{ + return mAccept; +} + +inline +void HTTPHeader::setAccept(const String &accept) +{ + mAccept=accept; +} + +inline +void HTTPHeader::parseHeader(Block &headerLines) +{ + for(int index=0;index blkHeaderLines; + createHeaderLines(headerLines,blkHeaderLines); + *this=blkHeaderLines; +} + +inline +void HTTPHeader::createHeaderLines(String strHeaders,Block &headerLines) +{ + char *strPtr=0; + headerLines.remove(); + if(strHeaders.isNull())return; + strPtr=strHeaders.str(); + strPtr=::strtok(strPtr,"\n\0"); + while(true) + { + if(!strPtr)break; + String str=strPtr; + str.removeTokens("\r\n"); + headerLines.insert(&str); + strPtr=::strtok(0,"\n\0"); + } +} + +inline +String HTTPHeader::serialize(void) +{ + String strHeader; + String crlf="\r\n"; + + if(!mDate.isNull())strHeader+=String("Date: ")+mDate+crlf; + if(!mServer.isNull())strHeader+=String("Server: ")+mServer+crlf; + if(!mLastModified.isNull())strHeader+=String("Last-Modified: ")+mLastModified+crlf; + if(!mETag.isNull())strHeader+=String("ETag: ")+mETag+crlf; + if(!mAcceptRanges.isNull())strHeader+=String("Accept-Ranges: ")+mAcceptRanges+crlf; + if(0!=mContentLength)strHeader+=String("Content-Length :")+String().fromInt(mContentLength)+crlf; + if(mContentType.isNull())strHeader+=String("Content-Type: ")+mContentType+crlf; + return strHeader; +} +#endif + diff --git a/proto/source/IFACE.HPP b/proto/source/IFACE.HPP new file mode 100644 index 0000000..2e0683c --- /dev/null +++ b/proto/source/IFACE.HPP @@ -0,0 +1,30 @@ +#ifndef _PROTO_INTERFACE_HPP_ +#define _PROTO_INTERFACE_HPP_ +#ifndef _COM_OLE2_HPP_ +#include +#endif + +//struct __declspec(uuid("8C17A192-4843-11d2-918C-808B7A063368")) +//__declspec(novtable) + +class ISimpleObject : public IUnknown +{ +public: + ISimpleObject(); + ~ISimpleObject(); + virtual HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv)=0; + virtual ULONG __stdcall AddRef(void)=0; + virtual ULONG __stdcall Release(void)=0; + virtual HRESULT __stdcall setByte(BYTE someBYTE)=0; +}; + +inline +ISimpleObject::ISimpleObject(void) +{ +} + +inline +ISimpleObject::~ISimpleObject() +{ +} +#endif diff --git a/proto/source/ImageAdviseSink.hpp b/proto/source/ImageAdviseSink.hpp new file mode 100644 index 0000000..cd70933 --- /dev/null +++ b/proto/source/ImageAdviseSink.hpp @@ -0,0 +1,44 @@ +#ifndef _PROTO_IMAGEADVISESINK_HPP_ +#define _PROTO_IMAGEADVISESINK_HPP_ +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COM_ADVISESINK_HPP_ +#include +#endif + +class ImageAdviseSink : public AdviseSink +{ +public: + ImageAdviseSink(void); + virtual ~ImageAdviseSink(); + void setHandler(PureCallback *pCallback); +private: + virtual HRESULT __stdcall ImageNotify(VARIANT *pVariant); + CallbackPointer mAdviseHandler; +}; + +inline +ImageAdviseSink::ImageAdviseSink(void) +{ +} + +inline +ImageAdviseSink::~ImageAdviseSink() +{ +} + +inline +void ImageAdviseSink::setHandler(PureCallback *pCallback) +{ + mAdviseHandler=CallbackPointer(pCallback); +} + +inline +HRESULT ImageAdviseSink::ImageNotify(VARIANT *pVariant) +{ + ::OutputDebugString("ImageAdviseSink::ImageNotify\n"); + mAdviseHandler.callback(CallbackData(0,(DWORD)pVariant)); + return ComResult::Success; +} +#endif \ No newline at end of file diff --git a/proto/source/Internet.hpp b/proto/source/Internet.hpp new file mode 100644 index 0000000..6e0b638 --- /dev/null +++ b/proto/source/Internet.hpp @@ -0,0 +1,67 @@ +#ifndef _PROTO_INTERNET_HPP_ +#define _PROTO_INTERNET_HPP_ +#ifndef _COMMON_EXCEPTION_HPP_ +#include +#endif +#ifndef _COMMON_WININET_HPP_ +#include +#endif + +class Internet +{ +public: + typedef enum AccessType{OpenDirect=INTERNET_OPEN_TYPE_DIRECT,PreConfig=INTERNET_OPEN_TYPE_PRECONFIG,AutoProxy= + INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,Proxy=INTERNET_OPEN_TYPE_PROXY}; + typedef enum Flags{Async=INTERNET_FLAG_ASYNC,FromCache=INTERNET_FLAG_FROM_CACHE, + Offline=INTERNET_FLAG_OFFLINE,InvalidPort=INTERNET_INVALID_PORT_NUMBER,None=0}; + Internet(); + virtual ~Internet(); + bool open(AccessType accessType=AutoProxy,const String &strProxy=String(),const String &proxyBypass=String(),Flags flags=None); + bool connect(); + void close(); + bool isOkay(void)const; + HINTERNET getHANDLE(void)const; +private: + HINTERNET mhInternet; +}; + +inline +Internet::Internet() +: mhInternet(0) +{ +} + +inline +Internet::~Internet() +{ + close(); +} + +inline +bool Internet::open(AccessType accessType,const String &strProxy,const String &proxyByPass,Flags flags) +{ + close(); + mhInternet=::InternetOpen("Custom Agent",accessType,strProxy.str(),proxyByPass.str(),flags); + return isOkay(); +} + +inline +void Internet::close() +{ + if(!isOkay())return; + ::InternetCloseHandle(mhInternet); + mhInternet=0; +} + +inline +HINTERNET Internet::getHANDLE(void)const +{ + return mhInternet; +} + +inline +bool Internet::isOkay()const +{ + return mhInternet?true:false; +} +#endif diff --git a/proto/source/LIBMAIN.CPP b/proto/source/LIBMAIN.CPP new file mode 100644 index 0000000..9e45a6f --- /dev/null +++ b/proto/source/LIBMAIN.CPP @@ -0,0 +1,79 @@ +#include +#include +#include +#include + +extern "C" +{ +__declspec(dllexport) void FAR PASCAL procDebug(CommControl &commControl); +} + +BOOL WINAPI DLLMain(HINSTANCE hDLLInst,DWORD dwReason,LPVOID lpReserved) +{ + switch(dwReason) + { + case DLL_PROCESS_ATTACH : + break; + case DLL_PROCESS_DETACH : + break; + case DLL_THREAD_ATTACH : + break; + case DLL_THREAD_DETACH : + break; + default : + break; + } + return TRUE; +} + +void FAR PASCAL procDebug(CommControl &commControl) +{ + BYTE charByte(0xFF); + BYTE rcvBuffer[256]; + WORD address; + BYTE charByte(0xFF); + String strString; + + commControl.read(&address,sizeof(address)); + ::sprintf(strString,"%08lx\n",int(address)); + ::MessageBox(::GetFocus(),(LPSTR)strString,"VALUE",MB_OK); + commControl.write(&charByte,sizeof(charByte)); + +} + +#if 0 + commControl.read(&,sizeof(address)); + ::sprintf(strString,"SWIHANDER %08lx\n",int(address)); + ::MessageBox(::GetFocus(),(LPSTR)strString,"VALUE",MB_OK); + commControl.write(&charByte,sizeof(charByte)); + + commControl.read(&address,sizeof(address)); + ::sprintf(strString,"contents of SWI vector %08lx\n",int(address)); + ::MessageBox(::GetFocus(),(LPSTR)strString,"VALUE",MB_OK); + commControl.write(&charByte,sizeof(charByte)); + + commControl.read(&address,sizeof(address)); + ::sprintf(strString,"SWIHANDER %08lx\n",int(address)); + ::MessageBox(::GetFocus(),(LPSTR)strString,"VALUE",MB_OK); + commControl.write(&charByte,sizeof(charByte)); + + commControl.read(&address,sizeof(address)); + ::sprintf(strString,"contents of SWI vector %08lx\n",int(address)); + ::MessageBox(::GetFocus(),(LPSTR)strString,"VALUE",MB_OK); + commControl.write(&charByte,sizeof(charByte)); +#endif +// ldd SWIHANDLER ; get address of SWIHANDLER to register D +// bsr WRITEWORD ; send it out to SCI +// bsr WAITCHAR ; wait for a character +// ldd [SWI] ; load contents of SWI vector ? +// bsr WRITEWORD ; send it out to SCI +// bsr WAITCHAR ; wait for a character +// ldd SWIHANDLER ; load address of SWIHANDLER to register D +// std [SWI] ; store SWIHANDLER at swi vector ? +// ldd [SWI] ; load contents of SWIHANDLER +// bsr WRITEWORD ; send it out to SCI +// bsr WAITCHAR ; wait for a character + + + + diff --git a/proto/source/LINE.HPP b/proto/source/LINE.HPP new file mode 100644 index 0000000..cb7752a --- /dev/null +++ b/proto/source/LINE.HPP @@ -0,0 +1,85 @@ +#ifndef _PROTO_GDILINE_HPP_ +#define _PROTO_GDILINE_HPP_ +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif + +class GDILine +{ +public: + GDILine(void); + GDILine(const GDILine &someGDILine); + GDILine(const GDIPoint &firstPoint,const GDIPoint &secondPoint); + virtual ~GDILine(); + GDILine &operator=(const GDILine &someGDILine); + BOOL operator==(const GDILine &someGDILine)const; + const GDIPoint &firstPoint(void)const; + void firstPoint(const GDIPoint &firstPoint); + const GDIPoint &secondPoint(void)const; + void secondPoint(const GDIPoint &secondPoint); +private: + GDIPoint mFirstPoint; + GDIPoint mSecondPoint; +}; + +inline +GDILine::GDILine(void) +{ +} + +inline +GDILine::GDILine(const GDILine &someGDILine) +{ + *this=someGDILine; +} + +inline +GDILine::GDILine(const GDIPoint &firstPoint,const GDIPoint &secondPoint) +: mFirstPoint(firstPoint), mSecondPoint(secondPoint) +{ +} + +inline +GDILine::~GDILine() +{ +} + +inline +GDILine &GDILine::operator=(const GDILine &someGDILine) +{ + firstPoint(someGDILine.firstPoint()); + secondPoint(someGDILine.secondPoint()); + return *this; +} + +inline +BOOL GDILine::operator==(const GDILine &someGDILine)const +{ + return (firstPoint()==someGDILine.firstPoint()&& + secondPoint()==someGDILine.secondPoint()); +} + +inline +const GDIPoint &GDILine::firstPoint(void)const +{ + return mFirstPoint; +} + +inline +void GDILine::firstPoint(const GDIPoint &firstPoint) +{ + mFirstPoint=firstPoint; +} + +inline +const GDIPoint &GDILine::secondPoint(void)const +{ + return mSecondPoint; +} + +inline +void GDILine::secondPoint(const GDIPoint &secondPoint) +{ + mSecondPoint=secondPoint; +} +#endif \ No newline at end of file diff --git a/proto/source/LOGFILE.HPP b/proto/source/LOGFILE.HPP new file mode 100644 index 0000000..59205ff --- /dev/null +++ b/proto/source/LOGFILE.HPP @@ -0,0 +1,111 @@ +#ifndef _PROTO_LOGFILE_HPP_ +#define _PROTO_LOGFILE_HPP_ +#ifndef _COMMON_PUREVIEWOFFILE_HPP_ +#include +#endif +#ifndef _COMMON_FILEMAP_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif + +class LogFile +{ +public: + LogFile(const String &strLogName); + virtual ~LogFile(); + BOOL write(const String &strLine); + BOOL write(Block &strLines); + BOOL read(String &strLine); + BOOL read(Block &strLines); + void synchronize(void); +private: + void log(const String &msg); + + FileMap mFileMap; + PureViewOfFile mFileView; + Event mIOEvent; + Event mIOAckEvent; + Mutex mMutex; + BOOL mIsAckPending; +}; + +LogFile::LogFile(const String &strLogName) +: mFileMap(strLogName,0,1000000), mFileView(mFileMap), mIOEvent("IOPUTEVENT",FALSE), + mIOAckEvent("IOACKEVENT",FALSE), mMutex("IOENTERREQUEST",FALSE), mIsAckPending(FALSE) +{ +} + +LogFile::~LogFile() +{ +} + +BOOL LogFile::write(const String &strLine) +{ + mIOAckEvent.waitEvent(); + mIOAckEvent.resetEvent(); + mMutex.requestMutex(); + mFileView.rewind(); + mFileView.writeLine(strLine); + mMutex.releaseMutex(); + mIOEvent.setEvent(); + return TRUE; +} + +BOOL LogFile::write(Block &strLines) +{ + mIOAckEvent.waitEvent(); + mIOAckEvent.resetEvent(); + mMutex.requestMutex(); + mFileView.rewind(); + for(int lineIndex=0;lineIndex &strLines) +{ + String strLine; + + strLines.remove(); + mIOEvent.waitEvent(); + mMutex.requestMutex(); + mIOEvent.resetEvent(); + mFileView.rewind(); + while(mFileView.getLine(strLine)&&!strLine.isNull())strLines.insert(&strLine); + mMutex.releaseMutex(); + mIOAckEvent.setEvent(); + return TRUE; +} + +void LogFile::synchronize(void) +{ + mIOAckEvent.setEvent(); +} + +void LogFile::log(const String &msg) +{ + ::OutputDebugString((String&)msg+String("\n")); +} +#endif diff --git a/proto/source/MAIN.HPP b/proto/source/MAIN.HPP new file mode 100644 index 0000000..8da0d05 --- /dev/null +++ b/proto/source/MAIN.HPP @@ -0,0 +1,67 @@ +#ifndef _PROTO_MAIN_HPP_ +#define _PROTO_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/proto/source/MAINWND.CPP b/proto/source/MAINWND.CPP new file mode 100644 index 0000000..82c435e --- /dev/null +++ b/proto/source/MAINWND.CPP @@ -0,0 +1,200 @@ +#include +#include +#include + +char MainWindow::szClassName[]="Tester"; +char MainWindow::szMenuName[]="mainMenu"; + +MainWindow::MainWindow(HINSTANCE hInstance) +: mhInstance(hInstance) +{ + mPaintHandler.setCallback(this,&MainWindow::paintHandler); + mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); + mCommandHandler.setCallback(this,&MainWindow::commandHandler); + mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler); + mSizeHandler.setCallback(this,&MainWindow::sizeHandler); + mCreateHandler.setCallback(this,&MainWindow::createHandler); + mTimerHandler.setCallback(this,&MainWindow::timerHandler); + mSetFocusHandler.setCallback(this,&MainWindow::setFocusHandler); + mCloseHandler.setCallback(this,&MainWindow::closeHandler); + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + InitialWidth,InitialHeight, + NULL,NULL,mhInstance,(LPSTR)this); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + mStatusBar=new StatusBarEx(*this,101); + mStatusBar.disposition(PointerDisposition::Delete); + mControlWnd=::new Control(::CreateWindow("STATIC","TEST",WS_POPUP,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,::GetFocus(),0,::GetModuleHandle(0),0),101); + mControlWnd.disposition(PointerDisposition::Delete); + mControlWnd->show(SW_SHOW); +// mTwain=new Twain(); +// mTwain.disposition(PointerDisposition::Delete); +// setDefWindow((GUIWindow*)this); + setDefWindow(&(*mControlWnd)); +// setDefWindow((GUIWindow*)this); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::closeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case SOURCE_SELECT : +// userSelectSource(); +// selectSource(); + if(!twainAvailable())return message("twain not available",false); + if(!openSourceManager())return message("open source failed",false); + setShowUI(false); +// if(!openSource(1))return message("open default source failed",false); + if(!openDefaultSource())return message("open default source failed",false); + if(!modalAcquire())return message("modal acquire failed",false); + break; + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +// virtuals + +void MainWindow::dibReceived(HGLOBAL hDib) +{ + BITMAPINFO *pBitmapInfo; + BYTE *pBitmapImage; + DWORD sizeImageData; + + ::OutputDebugString("MainWindow::dibReceived"); + pBitmapInfo=(BITMAPINFO*)::GlobalLock(hDib); + sizeImageData=sizeof(BITMAPINFOHEADER)+(sizeof(RGBQUAD)*pBitmapInfo->bmiHeader.biClrUsed)+(pBitmapInfo->bmiHeader.biWidth*pBitmapInfo->bmiHeader.biHeight); + pBitmapImage=::new BYTE[sizeImageData]; + ::memcpy((char*)pBitmapImage,(char*)pBitmapInfo,sizeImageData); + ::GlobalUnlock(hDib); + ::GlobalFree(hDib); +} + +int MainWindow::negotiateCapabilities(void) +{ + ::OutputDebugString("MainWindow::negotiateCapabilities"); + +// TW_IMAGEINFO imageInfo; +// getImageInfo(imageInfo); + + enableFeeder(false); + setXferCount(1); +// setCurrentResolution(640,480); +// setCurrentUnits(TWUN_PIXELS); +// setCurrentPixelType(TWPT_GRAY); +// setOrientation(TWOR_PORTRAIT); +// setCurrentResolution(100,100); + +// double left(35); +// double top(35); +// setImageLayout(0,0,1024,768); + return true; +} + +void MainWindow::twainError(TW_ERR error) +{ + ::OutputDebugString("MainWindow::twainError"); + dropToState(SOURCE_MANAGER_OPEN); +} + +int MainWindow::message(String message,int retCode) +{ + ::MessageBox(*this,message.str(),"Message",MB_OK); + return retCode; +} + diff --git a/proto/source/MAINWND.HPP b/proto/source/MAINWND.HPP new file mode 100644 index 0000000..7e47d73 --- /dev/null +++ b/proto/source/MAINWND.HPP @@ -0,0 +1,72 @@ +#ifndef _PROTO_MAINWINDOW_HPP_ +#define _PROTO_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _TWAIN_TWAIN_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif + +class MainWindow : public Window, private Twain +{ +public: + MainWindow(HINSTANCE hInstance); + virtual ~MainWindow(); + static String className(void); +protected: + virtual void dibReceived(HGLOBAL hDib); + virtual int negotiateCapabilities(void); + virtual void twainError(TW_ERR error); +// void xferReady(LPMSG lpmsg); +private: + enum{InitialWidth=640,InitialHeight=480}; + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType lineHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType completionHandler(CallbackData &someCallbackData); + void message(const String &messageString); + void message(Block &messageStrings); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + int message(String message,int retCode); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mTimerHandler; + Callback mSetFocusHandler; + Callback mCloseHandler; + + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + SmartPointer mStatusBar; + SmartPointer mControlWnd; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif diff --git a/proto/source/MAPTERR.HPP b/proto/source/MAPTERR.HPP new file mode 100644 index 0000000..d32335f --- /dev/null +++ b/proto/source/MAPTERR.HPP @@ -0,0 +1,20 @@ +#ifndef _PROTO_MAPTERR_HPP +#define _PROTO_MAPTERR_HPP_ + +class Display; +class ViewPoint; +class TrigTable; +class Angles; +class Geometry; +class Bitmap; + +extern "C" +{ + int mapTerrain(ViewPoint *pViewPoint,void *pBackBuffer,DWORD bmWidth,DWORD bmHeight); + int setTrig(TrigTable *pTrigTable); + int setAngles(Angles *pAngles); + int setGeometry(Geometry *pGeometry); + int setMaps(Bitmap *pColorBitmap,Bitmap *pHeightBitmap); + void mapProfile(int *pColIter,int *pStepIter,int *pWhileIter); +} +#endif \ No newline at end of file diff --git a/proto/source/MAROON.BMP b/proto/source/MAROON.BMP new file mode 100644 index 0000000..9616171 Binary files /dev/null and b/proto/source/MAROON.BMP differ diff --git a/proto/source/MEDIAPAK.CPP b/proto/source/MEDIAPAK.CPP new file mode 100644 index 0000000..0fdfdc2 --- /dev/null +++ b/proto/source/MEDIAPAK.CPP @@ -0,0 +1,161 @@ +#include + +MediaPak::MediaPak(void) +: mEntries(0), mOffsetEntries(0) +{ +} + +MediaPak::MediaPak(const MediaPak &mediaPak) +{ + *this=mediaPak; +} + +MediaPak::~MediaPak() +{ + close(); +} + +MediaPak &MediaPak::operator=(const MediaPak &/*mediaPak*/) +{ // private implementation + return *this; +} + +BOOL MediaPak::open(const String &pathFileName,BOOL creationFlag) +{ + DWORD magic; + + mPakFile.close(); + mEntries=0; + if(creationFlag) + { + mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Overwrite); + magic=HeaderMagic; + mEntries=0; + mPakFile.write((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + mPakFile.write((unsigned char*)&mEntries,sizeof(mEntries)); + } + else + { + mPakFile.open(pathFileName,FileHandle::ReadWrite,FileHandle::ShareRead,FileHandle::Open); + if(!mPakFile.isOkay())return FALSE; + mPakFile.read((unsigned char*)&magic,sizeof(magic)); + mOffsetEntries=mPakFile.tell(); + if(magic!=HeaderMagic){mPakFile.close();return FALSE;} + mPakFile.read((unsigned char*)&mEntries,sizeof(mEntries)); + } + return TRUE; +} + +void MediaPak::close(void) +{ + if(!mPakFile.isOkay())return; + mPakFile.close(); +} + +BOOL MediaPak::add(const PakEntry &pakEntry) +{ + DWORD entryLength; + + if(!isOkay())return FALSE; + mPakFile.seek(mOffsetEntries,FileHandle::SeekBegin); + mPakFile.read((unsigned char*)&mEntries,sizeof(mEntries)); + for(int index=0;index=mEntries)return FALSE; + for(int index=0;index=mEntries)return FALSE; + for(int index=0;index +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _CHAT_PAKENTRY_HPP_ +#include +#endif + +class MediaPak +{ +public: + MediaPak(void); + virtual ~MediaPak(); + BOOL open(const String &pathFileName,BOOL creationFlag=FALSE); + void close(void); + BOOL add(const PakEntry &pakEntry); + BOOL getEntry(PakEntry &pakEntry,DWORD entryIndex); + BOOL getEntry(WaveForm &waveForm,DWORD entryIndex); + DWORD entries(void)const; + BOOL isOkay(void)const; +private: + enum {HeaderMagic=0x4050414E}; + MediaPak(const MediaPak &mediaPak); + MediaPak &operator=(const MediaPak &mediaPak); + + FileHandle mPakFile; + DWORD mEntries; + DWORD mOffsetEntries; +}; +#endif \ No newline at end of file diff --git a/proto/source/MESH.bmp b/proto/source/MESH.bmp new file mode 100644 index 0000000..b81babf Binary files /dev/null and b/proto/source/MESH.bmp differ diff --git a/proto/source/PAKENTRY.HPP b/proto/source/PAKENTRY.HPP new file mode 100644 index 0000000..451727a --- /dev/null +++ b/proto/source/PAKENTRY.HPP @@ -0,0 +1,117 @@ +#ifndef _CHAT_PAKENTRY_HPP_ +#define _CHAT_PAKENTRY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class PakEntry +{ +public: + enum EntryType{Sound,Bitmap,Blob}; + PakEntry(void); + PakEntry(const PakEntry &pakEntry); + virtual ~PakEntry(); + PakEntry &operator=(const PakEntry &pakEntry); + BOOL operator==(const PakEntry &pakEntry)const; + EntryType type(void)const; + void type(EntryType entryType); + const String &name(void)const; + void name(const String &name); + int id(void)const; + void id(int id); + GlobalData &rawData(void); + void rawData(GlobalData &rawData); +private: + EntryType mEntryType; + int mID; + String mName; + GlobalData mRawData; +}; + +inline +PakEntry::PakEntry(void) +{ +} + +inline +PakEntry::PakEntry(const PakEntry &pakEntry) +{ + *this=pakEntry; +} + +inline +PakEntry::~PakEntry() +{ +} + +inline +PakEntry &PakEntry::operator=(const PakEntry &pakEntry) +{ + type(pakEntry.type()); + name(pakEntry.name()); + rawData(((PakEntry&)pakEntry).rawData()); + return *this; +} + +inline +BOOL PakEntry::operator==(const PakEntry &pakEntry)const +{ + return (type()==pakEntry.type()&& + name()==pakEntry.name()&& + ((PakEntry&)*this).rawData()==((PakEntry&)pakEntry).rawData()); +} + +inline +PakEntry::EntryType PakEntry::type(void)const +{ + return mEntryType; +} + +inline +void PakEntry::type(EntryType entryType) +{ + mEntryType=entryType; +} + +inline +const String &PakEntry::name(void)const +{ + return mName; +} + +inline +void PakEntry::name(const String &name) +{ + mName=name; +} + +inline +int PakEntry::id(void)const +{ + return mID; +} + +inline +void PakEntry::id(int id) +{ + mID=id; +} + +inline +GlobalData &PakEntry::rawData(void) +{ + return mRawData; +} + +inline +void PakEntry::rawData(GlobalData &rawData) +{ + mRawData=rawData; +} +#endif \ No newline at end of file diff --git a/proto/source/PAUSE.bmp b/proto/source/PAUSE.bmp new file mode 100644 index 0000000..1c09b7a Binary files /dev/null and b/proto/source/PAUSE.bmp differ diff --git a/proto/source/PLAY.bmp b/proto/source/PLAY.bmp new file mode 100644 index 0000000..e06b9dd Binary files /dev/null and b/proto/source/PLAY.bmp differ diff --git a/proto/source/POLYGON.HPP b/proto/source/POLYGON.HPP new file mode 100644 index 0000000..4b392b9 --- /dev/null +++ b/proto/source/POLYGON.HPP @@ -0,0 +1,55 @@ +#ifndef _PROTO_POLYGON_HPP_ +#define _PROTO_POLYGON_HPP_ +#ifndef _COMMON_GDIPOINT_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _PROTO_GDILINE_HPP_ +#include +#endif + + +class GDIPolygon : public Block +{ +public: + GDIPolygon(void); + GDIPolygon(const GDIPolygon &somePolygon); + virtual ~GDIPolygon(); + GDIPolygon &operator=(const GDIPolygon &someGDIPolygon); + GDIPolygon &operator+=(const Block &someGDILines); +private: +}; + +inline +GDIPolygon::GDIPolygon(void) +{ +} + +inline +GDIPolygon::GDIPolygon(const GDIPolygon &somePolygon) +: Block(somePolygon) +{ + +} + +inline +GDIPolygon::~GDIPolygon() +{ +} + +inline +GDIPolygon &GDIPolygon::operator=(const GDIPolygon &someGDIPolygon) +{ + (Block&)*this=(Block&)someGDIPolygon; + return *this; +} + +inline +GDIPolygon &GDIPolygon::operator+=(const Block &someGDILines) +{ + (Block&)*this+=someGDILines; + return *this; +} +#endif diff --git a/proto/source/PROTO.HPP b/proto/source/PROTO.HPP new file mode 100644 index 0000000..187f288 --- /dev/null +++ b/proto/source/PROTO.HPP @@ -0,0 +1,5 @@ +#ifndef _PROTO_PROTO_HPP_ +#define _PROTO_PROTO_HPP_ +#include +#endif + diff --git a/proto/source/PTHREAD.CPP b/proto/source/PTHREAD.CPP new file mode 100644 index 0000000..4f5e7a0 --- /dev/null +++ b/proto/source/PTHREAD.CPP @@ -0,0 +1,58 @@ +#include + +ProcessThread::ProcessThread(void) +: mIsProcessing(false) +{ + mThreadHandler.setCallback(this,&ProcessThread::threadHandler); + MessageThread::insertHandler(&mThreadHandler); +} + +ProcessThread::ProcessThread(const ProcessThread &/*someProcessThread*/) +{ // private implementation +} + +ProcessThread::~ProcessThread() +{ + stop(); + MessageThread::removeHandler(&mThreadHandler); +} + +ProcessThread &ProcessThread::operator=(const ProcessThread &/*someProcessThread*/) +{ // private implementation + return *this; +} + +void ProcessThread::startProcess(void) +{ + if(isProcessing())return; + ThreadMessage message(ThreadMessage::TM_USER,StartProcess); + sendMessage(message); +} + +DWORD ProcessThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + ::OutputDebugString("Thread is processing TM_DESTROY\n"); + break; + case ThreadMessage::TM_USER : + if(StartProcess==someThreadMessage.userDataOne()) + { + mIsProcessing=true; + ::OutputDebugString("Thread is in TM_USER\n"); + processHandler(); + mIsProcessing=false; + ::OutputDebugString("Thread is leaving TM_USER\n"); + mDestructEvent.setEvent(); + } + break; + } + return FALSE; +} + +void ProcessThread::processHandler(void) +{ +} diff --git a/proto/source/PTHREAD.HPP b/proto/source/PTHREAD.HPP new file mode 100644 index 0000000..f17e5b4 --- /dev/null +++ b/proto/source/PTHREAD.HPP @@ -0,0 +1,54 @@ +#ifndef _PROTO_PROCESSTHREAD_HPP_ +#define _PROTO_PROCESSTHREAD_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif + +class ProcessThread : private MessageThread +{ +public: + ProcessThread(void); + virtual ~ProcessThread(); + void startProcess(void); + bool isProcessing(void)const; + void waitForProcess(void); + void wait(void); +protected: + virtual void processHandler(void); +private: + enum Message{StartProcess}; + ProcessThread(const ProcessThread &someProcessThread); + ProcessThread &operator=(const ProcessThread &someProcessThread); + DWORD threadHandler(ThreadMessage &someThreadMessage); + + ThreadCallback mThreadHandler; + Event mDestructEvent; + bool mIsProcessing; +}; + +inline +bool ProcessThread::isProcessing(void)const +{ + return mIsProcessing; +} + +inline +void ProcessThread::waitForProcess(void) +{ + if(!isProcessing())return; + mDestructEvent.waitEvent(); +} + +inline +void ProcessThread::wait(void) +{ + MessageThread::stop(); + MessageThread::wait(); +} +#endif \ No newline at end of file diff --git a/proto/source/PUREOBJ.HPP b/proto/source/PUREOBJ.HPP new file mode 100644 index 0000000..5c07d7a --- /dev/null +++ b/proto/source/PUREOBJ.HPP @@ -0,0 +1,85 @@ +#ifndef _PROTO_PUREOBJECT_HPP_ +#define _PROTO_PUREOBJECT_HPP_ +#ifndef _ENGINE_DIB3D_HPP_ +#include +#endif +#ifndef _GEOMETRY_ROTATIONMATRIX_HPP_ +#include +#endif +#ifndef _GEOMETRY_TRANSLATIONMATRIX_HPP_ +#include +#endif + +class Vector3D; + +class PureObject +{ +public: + enum State{Active,Idle,Delete}; + PureObject(UINT id=0,State initState=Active); + virtual ~PureObject(); + State getState(void)const; + void setState(State state); + UINT getID(void)const; + void setID(UINT id); + virtual void rotate(const PureAngle &pureAngle,RotationMatrix::Orientation orientation)=0; + virtual void translate(const Point &uvPoint,TranslationMatrix::Orientation orientation)=0; + virtual void map(SmartPointer &displayBitmap)=0; + virtual void normalize(void)=0; + virtual bool isInView(SmartPointer &displayBitmap)=0; + virtual const Vector3D &getVector(void)const=0; +private: + PureObject(const PureObject &somePureObject); + PureObject &operator=(const PureObject &somePureObject); + + State mState; + UINT mID; +}; + +inline +PureObject::PureObject(UINT id,State initState) +: mID(id), mState(initState) +{ +} + +inline +PureObject::PureObject(const PureObject &somePureObject) +{ // private implementation + *this=somePureObject; +} + +inline +PureObject::~PureObject() +{ +} + +inline +PureObject &PureObject::operator=(const PureObject &somePureObject) +{ // private implementation + return *this; +} + +inline +PureObject::State PureObject::getState(void)const +{ + return mState; +} + +inline +void PureObject::setState(State state) +{ + mState=state; +} + +inline +UINT PureObject::getID(void)const +{ + return mID; +} + +inline +void PureObject::setID(UINT id) +{ + mID=id; +} +#endif \ No newline at end of file diff --git a/proto/source/PUREPAL.CPP b/proto/source/PUREPAL.CPP new file mode 100644 index 0000000..5ca53ab --- /dev/null +++ b/proto/source/PUREPAL.CPP @@ -0,0 +1,255 @@ +#include +#include +#include + +PurePalette::PurePalette(const PurePalette &somePurePalette) +: mhPalette(0), mhOldPalette(), mIsInUse(FALSE) +{ + ::GetPaletteEntries(somePurePalette,0,MaxColors,(PALETTEENTRY FAR *)&mPaletteData); + createPalette(); +} + +PurePalette::PurePalette(HPALETTE hPalette) +: mhPalette(0), mhOldPalette(0), mIsInUse(FALSE) +{ + ::GetPaletteEntries(hPalette,0,MaxColors,(PALETTEENTRY FAR *)&mPaletteData); + createPalette(); +} + +PurePalette::PurePalette(const BitmapInfo &someBitmapInfo) +: mhPalette(0), mhOldPalette(0), mIsInUse(FALSE) +{ + *this=someBitmapInfo; +} + +PurePalette &PurePalette::operator=(const PurePalette &somePurePalette) +{ + destroyPalette(); + ::GetPaletteEntries(somePurePalette,0,MaxColors,(PALETTEENTRY FAR*)&mPaletteData); + createPalette(); + return *this; +} + +PurePalette &PurePalette::operator=(const BitmapInfo &someBitmapInfo) +{ + destroyPalette(); + for(int entryIndex=0;entryIndex=paletteEntries())return FALSE; + someRGBColor=(RGBColor)mPaletteData[paletteIndex]; + return TRUE; +} + +RGBColor PurePalette::paletteEntry(PaletteIndex paletteIndex)const +{ + RGBColor tempColor(0,0,0); + + paletteEntry(paletteIndex,tempColor); + return tempColor; +} + +WORD PurePalette::createPalette() +{ + PaletteEntry FAR *lpPaletteEntry; + LOGPALETTE FAR *lpLogPalette; + HGLOBAL hGlobalPalette; + + if(mhPalette){::DeleteObject(mhPalette);mhPalette=0;} + hGlobalPalette=::GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE,sizeof(LOGPALETTE)+(MaxColors*sizeof(PALETTEENTRY))); + lpLogPalette=(LOGPALETTE FAR *)::GlobalLock(hGlobalPalette); + lpLogPalette->palNumEntries=MaxColors; + lpLogPalette->palVersion=0x300; + for(short paletteIndex=0;paletteIndexpalPalEntry[paletteIndex]; + *lpPaletteEntry=mPaletteData[paletteIndex]; + } + mhPalette=::CreatePalette((LOGPALETTE FAR *)lpLogPalette); + ::GlobalUnlock(hGlobalPalette); + ::GlobalFree(hGlobalPalette); + return (mhPalette?TRUE:FALSE); +} + +void PurePalette::usePalette(const PureDevice &somePureDevice,short usage) +{ + if(usage) + { + mhOldPalette=::SelectPalette(somePureDevice,mhPalette,FALSE); + ::RealizePalette(somePureDevice); + mIsInUse=TRUE; + } + else + { + ::SelectPalette(somePureDevice,mhOldPalette,FALSE); + ::RealizePalette(somePureDevice); + mIsInUse=FALSE; + } +} + +void PurePalette::getPaletteColors(PureVector &someRGBColors)const +{ + size_t paletteColors((size_t)someRGBColors.size(paletteEntries())); + for(short paletteIndex=0;paletteIndex=paletteEntries())return FALSE; + someRGBColor=(RGBColor)mPaletteData[paletteIndex]; + return TRUE; +} + +void PurePalette::setPaletteColors(PureVector &someRGBColors,PaletteEntry::PaletteFlags paletteFlag) +{ + size_t paletteColors((size_t)someRGBColors.size()); + + for(short paletteIndex=0;paletteIndex=paletteEntries())return FALSE; + mPaletteData[paletteIndex]=someRGBColor; + mPaletteData[paletteIndex].flags(paletteFlag); + ::SetPaletteEntries(mhPalette,paletteIndex,1,(PALETTEENTRY FAR*)&mPaletteData[paletteIndex]); + return TRUE; +} + +void PurePalette::clearPalette(void) +{ + short paletteColors(paletteEntries()); + RGBColor nullColor; + + for(short paletteIndex=0;paletteIndex paletteColors; + getPaletteColors(paletteColors); + setPaletteColors(paletteColors,PaletteEntry::NoCollapse); + setPaletteColor(PurePalette::MaxColors-1,RGBColor(255,255,255)); + setPaletteColor(0,RGBColor(0,0,0)); + createPalette(); + return TRUE; + } + if(SystemStaticColors!=(staticColors=::GetDeviceCaps(pureDevice,NUMCOLORS)))return FALSE; + staticColors/=2; + if(MaxColors!=::GetSystemPaletteEntries(pureDevice,0,MaxColors,(PALETTEENTRY FAR *)&paletteData))return FALSE; + for(short paletteIndex=0;paletteIndex +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif +#ifndef _COMMON_PUREVECTOR_HPP_ +#include +#endif +#ifndef _COMMON_PVECTOR_TPP_ +#include +#endif +#ifndef _COMMON_PALETTEENTRY_HPP_ +#include +#endif + +class BitmapInfo; + +class PurePalette +{ +public: + enum {MaxColors=256}; + enum InitPal{InitSys,InitNone}; + typedef int PaletteIndex; + PurePalette(InitPal initPal=InitNone); + PurePalette(HPALETTE hPalette); + PurePalette(const PurePalette &somePurePalette); + PurePalette(const BitmapInfo &someBitmapInfo); + virtual ~PurePalette(); + PurePalette &operator=(const PurePalette &somePurePalette); + PurePalette &operator=(const BitmapInfo &someBitmapInfo); + PurePalette &operator=(HPALETTE hPalette); + PaletteEntry &operator[](PaletteIndex paletteIndex); + WORD operator==(const PurePalette &somePurePalette)const; + WORD identityPalette(void); + WORD systemPalette(void); + WORD isIdentityPalette(void)const; + void cyclePalette(void); + PaletteIndex paletteIndex(const RGBColor &someRGBColor)const; + void getPaletteColors(PureVector &someRGBColors)const; + void setPaletteColors(PureVector &someRGBColors,PaletteEntry::PaletteFlags paletteFlag=PaletteEntry::NullFlag); + WORD setPaletteColor(short paletteIndex,RGBColor &someRGBColor,PaletteEntry::PaletteFlags paletteFlag=PaletteEntry::NullFlag); + WORD getPaletteColor(short paletteIndex,RGBColor &someRGBColor)const; + void clearPalette(void); + void usePalette(const PureDevice &somePureDevice,short usage); + WORD paletteEntry(PaletteIndex paletteIndex,RGBColor &someRGBColor)const; + RGBColor paletteEntry(PaletteIndex paletteIndex)const; + WORD paletteEntries(void)const; + WORD isInUse(void)const; + operator HPALETTE(void)const; +private: + enum {SystemStaticColors=20}; + WORD createPalette(void); + void clearPaletteEntries(void); + void setPaletteColors(void)const; + void destroyPalette(void); + + HPALETTE mhPalette; + HPALETTE mhOldPalette; + PaletteEntry mPaletteData[MaxColors]; + WORD mIsInUse; +}; + +inline +PurePalette::PurePalette(InitPal initPal) +: mhPalette(0), mhOldPalette(0), mIsInUse(FALSE) +{ + if(InitSys==initPal)systemPalette(); + else {clearPaletteEntries(),createPalette();} + return; +} + +inline +PurePalette::~PurePalette() +{ + destroyPalette(); + return; +} + +inline +WORD PurePalette::paletteEntries(void)const +{ + return MaxColors; +} + +inline +PurePalette::operator HPALETTE(void)const +{ + return mhPalette; +} + +inline +void PurePalette::clearPaletteEntries(void) +{ + ::memset((void*)&mPaletteData,0,sizeof(mPaletteData)); +} + +inline +void PurePalette::setPaletteColors(void)const +{ + ::SetPaletteEntries(mhPalette,0,MaxColors,(PALETTEENTRY FAR*)&mPaletteData); +} + +inline +WORD PurePalette::isInUse(void)const +{ + return mIsInUse; +} + +inline +PurePalette::PaletteIndex PurePalette::paletteIndex(const RGBColor &someRGBColor)const +{ + return ::GetNearestPaletteIndex(mhPalette,(COLORREF)someRGBColor); +} + +inline +PaletteEntry &PurePalette::operator[](PaletteIndex paletteIndex) +{ + assert(paletteIndex +#include + +char s_szCLSID[]="{8C17A191-4843-11d2-918C-808B7A063368}"; +char s_szIFaceID[]="{8C17A192-4843-11d2-918C-808B7A063368}"; + +BOOL SetRegKeyValue(LPTSTR pszKey,LPTSTR pszSubKey,LPTSTR pszValue); +void UnregisterServer(void); + +BOOL SetRegKeyValue(LPTSTR pszKey,LPTSTR pszSubKey,LPTSTR pszValue) +{ + LONG lRes; + HKEY hKey; + TCHAR szKey[256]; + + lstrcpy(szKey,pszKey); + if(NULL!=pszSubKey) + { + lstrcat(szKey,TEXT("\\")); + lstrcat(szKey,pszSubKey); + } + if(ERROR_SUCCESS!=::RegCreateKeyEx(HKEY_CLASSES_ROOT,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL))return FALSE; + if(pszValue)lRes=::RegSetValueEx(hKey,NULL,0,REG_SZ,(BYTE*)pszValue,(lstrlen(pszValue)+1)*sizeof(TCHAR)); + ::RegCloseKey(hKey); + return lRes==ERROR_SUCCESS; +} + +void DeleteRegKey(LPTSTR pszKey,LPTSTR pszSubKey) +{ + TCHAR szKey[256]; + + lstrcpy(szKey,pszKey); + if(pszSubKey) + { + lstrcat(szKey,TEXT("\\")); + lstrcat(szKey,pszSubKey); + } + ::RegDeleteKey(HKEY_CLASSES_ROOT,szKey); +} + +BOOL RegisterServer(LPSTR pszExePath) +{ + TCHAR szCLSID[129]; + TCHAR szIFace[129]; + char szFile[MAX_PATH]; + + lstrcpy(szCLSID,TEXT("CLSID\\")); + lstrcat(szCLSID,s_szCLSID); + strcpy(szFile,pszExePath); + strcat(szFile,"\\server.exe"); + ::SetRegKeyValue(szCLSID,NULL,TEXT("ISimpleObject - WDJ wire_marshal example")); + ::SetRegKeyValue(szCLSID,TEXT("LaunchPermission"),TEXT("Y")); + ::SetRegKeyValue(szCLSID,TEXT("LocalServer32"),szFile); + + strcpy(szFile,pszExePath); + strcat(szFile,"\\sobj.dll"); + + lstrcpy(szIFace,TEXT("Interface\\")); + lstrcat(szIFace,s_szIFaceID); + + ::SetRegKeyValue(szIFace,NULL,TEXT("ISimpleObject")); + ::SetRegKeyValue(szIFace,TEXT("ProxyStubClsid32"),s_szIFaceID); + ::SetRegKeyValue(szIFace,TEXT("NumMethods"),TEXT("4")); + + lstrcpy(szCLSID,TEXT("CLSID\\")); + lstrcat(szCLSID,s_szIFaceID); + ::SetRegKeyValue(szCLSID,NULL,TEXT("ISimpleObject Proxy/Stub Factory")); + ::SetRegKeyValue(szCLSID,TEXT("InProcServer32"),szFile); + return TRUE; +} + +void UnregisterServer(void) +{ + TCHAR szCLSID[129]; + TCHAR szIFace[129]; + + lstrcpy(szCLSID,TEXT("CLSID\\")); + lstrcat(szCLSID,s_szCLSID); + + ::DeleteRegKey(szCLSID,TEXT("LaunchPermission")); + ::DeleteRegKey(szCLSID,TEXT("LocalServer32")); + ::DeleteRegKey(szCLSID,NULL); + + lstrcpy(szIFace,TEXT("Interface\\")); + lstrcat(szIFace,s_szIFaceID); + + ::DeleteRegKey(szIFace,TEXT("ProxyStubClsid32")); + ::DeleteRegKey(szIFace,TEXT("NumMethods")); + ::DeleteRegKey(szIFace,NULL); + + lstrcpy(szCLSID,TEXT("CLSID\\")); + lstrcat(szCLSID,s_szIFaceID); + ::DeleteRegKey(szCLSID,TEXT("InProcServer32")); + ::DeleteRegKey(szCLSID,NULL); +} diff --git a/proto/source/RGB888.HPP b/proto/source/RGB888.HPP new file mode 100644 index 0000000..69a96a8 --- /dev/null +++ b/proto/source/RGB888.HPP @@ -0,0 +1,101 @@ +#ifndef _REMOTEPSAPP_RGB888_HPP_ +#define _REMOTEPSAPP_RGB888_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class RGB888 +{ +public: + RGB888(void); + RGB888(const RGB888 &someRGB888); + RGB888(BYTE red,BYTE green,BYTE blue); + ~RGB888(); // the destructor cannot be virtual + RGB888 &operator=(const RGB888 &someRGB888); + BOOL operator==(const RGB888 &someRGB888); + BYTE red(void)const; + void red(BYTE red); + BYTE green(void)const; + void green(BYTE green); + BYTE blue(void)const; + void blue(BYTE blue); +private: + BYTE mBlue; + BYTE mGreen; + BYTE mRed; +}; + +inline +RGB888::RGB888(void) +: mBlue(0), mGreen(0), mRed(0) +{ +} + +inline +RGB888::RGB888(BYTE red,BYTE green,BYTE blue) +: mBlue(blue), mGreen(green), mRed(red) +{ +} + +inline +RGB888::RGB888(const RGB888 &someRGB888) +{ + *this=someRGB888; +} + +inline +RGB888::~RGB888() +{ +} + +inline +RGB888 &RGB888::operator=(const RGB888 &someRGB888) +{ + red(someRGB888.red()); + green(someRGB888.green()); + blue(someRGB888.blue()); + return *this; +} + +inline +BOOL RGB888::operator==(const RGB888 &someRGB888) +{ + return red()==someRGB888.red()&&green()==someRGB888.green()&&blue()==someRGB888.blue(); +} + +inline +BYTE RGB888::red(void)const +{ + return mRed; +} + +inline +void RGB888::red(BYTE red) +{ + mRed=red; +} + +inline +BYTE RGB888::green(void)const +{ + return mGreen; +} + +inline +void RGB888::green(BYTE green) +{ + mGreen=green; +} + +inline +BYTE RGB888::blue(void)const +{ + return mBlue; +} + +inline +void RGB888::blue(BYTE blue) +{ + mBlue=blue; +} +#endif diff --git a/proto/source/RICHEDIT.HPP b/proto/source/RICHEDIT.HPP new file mode 100644 index 0000000..e4b3a3d --- /dev/null +++ b/proto/source/RICHEDIT.HPP @@ -0,0 +1,157 @@ +#ifndef _PROTO_RICHEDIT_HPP_ +#define _PROTO_RICHEDIT_HPP_ +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _COMMON_RICHEDIT_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _PROTO_CHARFORMAT_HPP_ +#include +#endif + +class RichEditControl : public Control +{ +public: + RichEditControl(void); + RichEditControl(HWND hControlWnd,BOOL destroyWindow=TRUE); + virtual ~RichEditControl(); + BOOL setTextColor(RGBColor textColor); + BOOL setBkGndColor(RGBColor bkGndColor); + BOOL wantReturn(BOOL wantReturn); + BOOL setFont(const Font &someFont); + BOOL setCharFormat(const String faceName,int charHeight); + BOOL limitText(WORD cchMax); + BOOL createControl(Window &parentWnd,const Rect &initRect,UINT controlID); +private: + void loadLibrary(void); + void freeLibrary(void); + void getLogPixelsy(void); + int mLogPixelsy; + HINSTANCE mhLibInst; +}; + +inline +RichEditControl::RichEditControl(void) +: mhLibInst(0) +{ + loadLibrary(); + getLogPixelsy(); +} + +inline +RichEditControl::RichEditControl(HWND hControlWnd,BOOL destroyWindow) +: Control(hControlWnd,destroyWindow), mhLibInst(0) +{ + loadLibrary(); + getLogPixelsy(); +} + +inline +RichEditControl::~RichEditControl() +{ + freeLibrary(); +} + +inline +BOOL RichEditControl::createControl(Window &parentWnd,const Rect &initRect,UINT controlID) +{ + Control::createControl(WS_EX_CLIENTEDGE,"RICHEDIT","",WS_VISIBLE|ES_MULTILINE|ES_SUNKEN|ES_SAVESEL|ES_AUTOHSCROLL|ES_AUTOVSCROLL|WS_VSCROLL,initRect,parentWnd,controlID); + return isValid(); +} + +inline +void RichEditControl::loadLibrary(void) +{ + freeLibrary(); + mhLibInst=::LoadLibrary("RICHED32.DLL"); +} + +inline +void RichEditControl::freeLibrary(void) +{ + if(!mhLibInst)return; + ::FreeLibrary(mhLibInst); +} + +inline +BOOL RichEditControl::setTextColor(RGBColor textColor) +{ + if(!isValid())return FALSE; + CharFormat charFormat; + sendMessage(EM_GETCHARFORMAT,0,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); + charFormat.mask(CharFormat::MaskColor); + charFormat.effects(0); + charFormat.textColor(textColor); + sendMessage(EM_SETCHARFORMAT,SCF_ALL,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); + return TRUE; +} + +#include +inline +BOOL RichEditControl::setFont(const Font &someFont) +{ + if(!isValid())return FALSE; + CharFormat charFormat; + sendMessage(EM_GETCHARFORMAT,0,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); + charFormat.mask(CharFormat::MaskCharSet|CharFormat::MaskFace|CharFormat::MaskSize); + charFormat.effects(0); + charFormat.charSet(someFont.charSet()); + charFormat.yHeight(-(((int)someFont.sizeFont()*mLogPixelsy)/72)); +// charFormat.yHeight(-((50*mLogPixelsy)/72)); +// charFormat.yHeight(200); + charFormat.pitchAndFamily(someFont.pitchAndFamily()); + charFormat.faceName(someFont.fontStyle()); + sendMessage(EM_SETCHARFORMAT,SCF_ALL,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); + return TRUE; +} + +inline +BOOL RichEditControl::setCharFormat(const String faceName,int charHeight) +{ + if(!isValid())return FALSE; + CharFormat charFormat; + charFormat.mask(CharFormat::MaskCharSet|CharFormat::MaskFace|CharFormat::MaskSize); + charFormat.effects(0); + charFormat.charSet(0); + charFormat.yHeight(charHeight); + charFormat.faceName(faceName); + sendMessage(EM_SETCHARFORMAT,SCF_ALL,(LPARAM)(LPSTR)&((CHARFORMAT&)charFormat)); + return TRUE; +} + +inline +BOOL RichEditControl::setBkGndColor(RGBColor bkGndColor) +{ + if(!isValid())return FALSE; + sendMessage(EM_SETBKGNDCOLOR,0,(COLORREF)bkGndColor); + return TRUE; +} + +inline +BOOL RichEditControl::limitText(WORD cchMax) +{ + if(!isValid())return FALSE; + sendMessage(EM_LIMITTEXT,(WPARAM)cchMax,0L); + return TRUE; +} + +inline +BOOL RichEditControl::wantReturn(BOOL wantReturn) +{ + if(!isValid())return FALSE; + sendMessage(EM_SETOPTIONS,ECOOP_OR,ECO_WANTRETURN); + return TRUE; +} + +inline +void RichEditControl::getLogPixelsy(void) +{ + PureDevice screenDevice; + screenDevice.screenDevice(); + mLogPixelsy=::GetDeviceCaps(screenDevice,LOGPIXELSY); +} +#endif \ No newline at end of file diff --git a/proto/source/Rasiface.cpp b/proto/source/Rasiface.cpp new file mode 100644 index 0000000..6c3a955 --- /dev/null +++ b/proto/source/Rasiface.cpp @@ -0,0 +1,39 @@ +#include + +WORD RasInterface::locateEntry(Block &rasEntryNames,RasEntryName &rasEntryName) +{ + for(short entryIndex=0;entryIndex entryNames; + + if(!mRemoteServerInterface.isOkay())return FALSE; + mRemoteServerInterface.rasEnumEntries(entryNames); + if(!entryNames.size())return FALSE; + rasEntryName.entryName(entryName); + if(!locateEntry(entryNames,rasEntryName))return FALSE; + rasDialParams.entryName(rasEntryName.entryName()); + rasDialParams.phoneNumber(""); + rasDialParams.callbackNumber(""); + rasDialParams.userName(userName); + rasDialParams.password(password); + rasDialParams.domain(""); + if(mRemoteServerInterface.rasDial(0,0,&((tagRASDIALPARAMSA&)rasDialParams),0,0,&mhRasConn)) + { + mRemoteServerInterface.rasHangUp(mhRasConn); + mhRasConn=0; + return FALSE; + } + mRemoteServerInterface.rasGetConnectStatus(mhRasConn,mRasConnectionStatus); + mRasConnectionState=mRasConnectionStatus.rasConnectionState(); + if(!mRasConnectionState.connected())return FALSE; + return TRUE; +} + + diff --git a/proto/source/Rasiface.hpp b/proto/source/Rasiface.hpp new file mode 100644 index 0000000..c7f3071 --- /dev/null +++ b/proto/source/Rasiface.hpp @@ -0,0 +1,58 @@ +#ifndef _NNTP_RASINTERFACE_HPP_ +#define _NNTP_RASINTERFACE_HPP_ +#ifndef _RASAPI_RASAPI_HPP_ +#include +#endif +#ifndef _RASAPI_REMOTEACCESSSERVER_HPP_ +#include +#endif +#ifndef _RASAPI_RASDIALPARAMS_HPP_ +#include +#endif + +class RasInterface +{ +public: + RasInterface(void); + virtual ~RasInterface(); + WORD login(const String &userName,const String &password,const String &entryName); + WORD enumEntries(Block &rasEntryNames); + WORD isOkay(void)const; +private: + WORD locateEntry(Block &rasEntryNames,RasEntryName &rasEntryName); + + RemoteAccessServer mRemoteServerInterface; + RasConnectionStatus mRasConnectionStatus; + RasConnectionState mRasConnectionState; + HRASCONN mhRasConn; +}; + +inline +RasInterface::RasInterface(void) +: mhRasConn(0) +{ +} + +inline +RasInterface::~RasInterface() +{ + if(!mhRasConn)return; + mRemoteServerInterface.rasHangUp(mhRasConn); + mhRasConn=0; +} + +inline +WORD RasInterface::enumEntries(Block &rasEntryNames) +{ + rasEntryNames.remove(); + if(!mRemoteServerInterface.isOkay())return FALSE; + mRemoteServerInterface.rasEnumEntries(rasEntryNames); + return (rasEntryNames.size()?TRUE:FALSE); +} + +inline +WORD RasInterface::isOkay(void)const +{ + return mRemoteServerInterface.isOkay(); +} +#endif diff --git a/proto/source/SCENE.CPP b/proto/source/SCENE.CPP new file mode 100644 index 0000000..b001d33 --- /dev/null +++ b/proto/source/SCENE.CPP @@ -0,0 +1,219 @@ +#include +#include +#include +#include +#include + +SceneManager::SceneManager(GUIWindow &displayWindow) +: DisplayManager(displayWindow,PurePalette("syspal.pal")), + mBmFighter("c:\\work\\scene\\media\\bmp\\tiea1.bmp"), + mBmBurst("c:\\work\\scene\\media\\bmp\\burst.bmp"), + mDisplayWindow(displayWindow) +{ + ASMRoutines::setMaskInfo(TRUE,0); + mFreezeFrame=false; +} + +SceneManager::~SceneManager() +{ +} + +void SceneManager::initVector(const Point3D &point3D,int width,Vector3D &vector3D)const +{ + vector3D[0]=point3D; + vector3D[1]=Point3D(point3D.x()+width,point3D.y(),point3D.z()); + vector3D[2]=Point3D(point3D.x()+width,point3D.y()-width,point3D.z()); + vector3D[3]=Point3D(point3D.x(),point3D.y()-width,point3D.z()); +} + +// virtuals + +bool SceneManager::initializeHandler(PointerPureObjectBlock &pureObjects) +{ + SimpleObject *pSimpleObject; + Vector3D vector3D; + int zBegin(350); + + pureObjects.remove(); + for(zBegin=150;zBegin<500;zBegin+=50) + { + initVector(Point3D(200,25,zBegin+100),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-25,25,zBegin),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-25,-100,zBegin),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-100,100,zBegin+25),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-150,150,zBegin+50),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(0,0,zBegin+50),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(50,0,zBegin+75),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-200,100,zBegin+100),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-400,100,zBegin+100),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-500,100,zBegin+100),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + + initVector(Point3D(-600,100,zBegin+100),50,vector3D); + pSimpleObject=::new SimpleObject(vector3D,(Ship<<16)|pureObjects.size()); + pureObjects.insert(&SmartPointer(pSimpleObject)); + pureObjects[pureObjects.size()-1].disposition(PointerDisposition::Delete); + pSimpleObject->setTexture(SmartPointer(&mBmFighter)); + } + return true; +} + +bool SceneManager::preprocessHandler(PointerPureObject &pureObject) +{ + if(mFreezeFrame)return true; + if(PureObject::Idle==pureObject->getState())return true; + if(!(pureObject->getID()%2))pureObject->translate(Point(1,-2),TranslationMatrix::AboutX); + else pureObject->translate(Point(-1,-1),TranslationMatrix::AboutX); +// pureObject->normalize(); + return true; +} + +bool SceneManager::scopeHandler(PointerPureObject &scopeObject) +{ + if(scopeObject->getID()>>16==Ship) + { + ((SimpleObject&)*scopeObject).setVector(((SimpleObject&)*scopeObject).getInitVector()); + return false; + } + return true; +} + +void SceneManager::keyDownHandler(const KeyData &keyData) +{ + int repeatIndex; + switch(keyData.virtualKey()) + { + case inKey : + break; + case outKey : + break; + case VK_UP : + for(repeatIndex=0;repeatIndex>16!=Ship)continue; + Vector3D vector3D(pureObject.getVector()); + if(!index){minDistance=cameraPoint.z()-vector3D[0].z();minIndex=index;} + else if(minDistancegetVector()); + TestObject *pTestObject=::new TestObject(vector3D,(Other<<16)|getObjects().size()); + getObjects().insert(&SmartPointer(pTestObject)); + getObjects()[getObjects().size()-1].disposition(PointerDisposition::Delete); + pTestObject->setTexture(SmartPointer(&mBmBurst)); +} diff --git a/proto/source/SCENE.HPP b/proto/source/SCENE.HPP new file mode 100644 index 0000000..ab4c295 --- /dev/null +++ b/proto/source/SCENE.HPP @@ -0,0 +1,43 @@ +#ifndef _PROTO_SCENEMANAGER_HPP_ +#define _PROTO_SCENEMANAGER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_PUREPALETTE_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _PROTO_DISPLAYMANAGER_HPP_ +#include +#endif + +class SceneManager : public DisplayManager +{ +public: + enum{Ship=0x0001,Other=0x0002}; + SceneManager(GUIWindow &displayWindow); + virtual ~SceneManager(); +protected: + virtual bool initializeHandler(PointerPureObjectBlock &pureObjects); + virtual bool preprocessHandler(PointerPureObject &pureObject); + virtual bool scopeHandler(PointerPureObject &pureObject); + virtual void keyDownHandler(const KeyData &keyData); +private: + enum {MaxRotate=360,MinRotate=-360}; + enum {ThetaDelta=5,ViewDelta=5,TurnDelta=10}; + enum {inKey=0x49,outKey=0x4F}; + void initVector(const Point3D &point3D,int width,Vector3D &vector3D)const; + void handleLeftArrow(void); + void handleRightArrow(void); + void handleUpArrow(void); + void handleDownArrow(void); + void handleFreezeFrame(void); + + Bitmap mBmFighter; + Bitmap mBmBurst; + GUIWindow &mDisplayWindow; + bool mFreezeFrame; +}; +#endif \ No newline at end of file diff --git a/proto/source/SERVER.CPP b/proto/source/SERVER.CPP new file mode 100644 index 0000000..666037b --- /dev/null +++ b/proto/source/SERVER.CPP @@ -0,0 +1,51 @@ +#define INC_OLE2 +#define _WIN32_DCOM +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern BOOL RegisterServer(LPSTR pszExeName); +extern void UnregisterServer(void); +extern HANDLE hevtDone; + +CClassFactory g_ClassFactory; + +int __cdecl main(int argc,char **argv,char **envp) +{ + HRESULT hr; + DWORD dwRegister; + + if(argc>1) + { + if(!strcmp(argv[1],"-register")) + { + if(argc!=3){printf("usage is server -register [path to server] & proxy/stub");return 0;} + if(!RegisterServer(argv[2])){printf("failed to register server and proxy/stub");return 0;} + } + else if(!strcmp(argv[1],"-unregister")) + { + UnregisterServer(); + printf("unregistered server & proxy/stub"); + return 0; + } + } + hevtDone=::CreateEvent(NULL,FALSE,FALSE,NULL); + if(!hevtDone)return 1; + hr=CoInitializeEx(NULL,COINIT_MULTITHREADED); + if(FAILED(hr))return printf("CoInitializeEx() failed %08lx",hr),hr; + hr=::CoRegisterClassObject(CLSID_SimpleObject,&g_ClassFactory,CLSCTX_SERVER,REGCLS_SINGLEUSE,&dwRegister); + if(FAILED(hr))return printf("Failed to register class object"),hr; + printf("waiting...\n"); + ::WaitForSingleObject(hevtDone,INFINITE); + ::CloseHandle(hevtDone); + ::CoUninitialize(); + printf("Press any key to exit\n"); + char ch=_getch(); + return 0; +} diff --git a/proto/source/SIGMA.bmp b/proto/source/SIGMA.bmp new file mode 100644 index 0000000..19e45fd Binary files /dev/null and b/proto/source/SIGMA.bmp differ diff --git a/proto/source/SOBJ.CPP b/proto/source/SOBJ.CPP new file mode 100644 index 0000000..9121d7e --- /dev/null +++ b/proto/source/SOBJ.CPP @@ -0,0 +1,199 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma warning(disable:4355) +CSimpleObject::CSimpleObject(PIUnknown &unkOuter,SmartPointer &server) +: mImpISimpleObject(SmartPointer(this),unkOuter), + mImpIOleInPlaceObjectWindowless(SmartPointer(this),unkOuter), + mImpIOleObject(SmartPointer(this),unkOuter), + mImpIViewObject(SmartPointer(this),unkOuter), + mRefCount(0), mUnkOuter(unkOuter), mDLLServer(server), + mIIDLib("c:\\work\\proto\\msvcobj\\guids.txt") +{ +} + +CSimpleObject::~CSimpleObject() +{ +} + +HRESULT __stdcall CSimpleObject::QueryInterface(REFIID riid,PPVOID ppv) +{ + HRESULT hr(E_NOINTERFACE); + + *ppv=0; + if(IID_IUnknown==riid)*ppv=(IUnknown*)this; + else if(IID_ISimpleObject==riid)*ppv=&mImpISimpleObject; + else if(IID_IDispatch==riid)*ppv=(IDispatch*)&mImpISimpleObject,Message::message("CSimpleObject::QueryInterface(IID_IDispatch)"); + else if(IID_IOleInPlaceObjectWindowless==riid)*ppv=(IOleInPlaceObjectWindowless*)&mImpIOleInPlaceObjectWindowless,Message::message("CSimpleObject::QueryInterface(IID_IOleInPlaceObjectWindowless)"); + else if(IID_IOleInPlaceObject==riid)*ppv=(IOleInPlaceObject*)&mImpIOleInPlaceObjectWindowless,Message::message("CSimpleObject::QueryInterface(IID_IOleInPlaceObject)"); + else if(IID_IOleObject==riid)*ppv=(IOleObject*)&mImpIOleObject,Message::message("CSimpleObject::QueryInterface(IID_IOleObject)"); + else if(IID_IViewObject==riid)*ppv=(IViewObject*)&mImpIViewObject,Message::message("CSimpleObject::QueryInterface(IID_IViewObject)"); + else if(IID_IViewObject2==riid)*ppv=(IViewObject2*)&mImpIViewObject,Message::message("CSimpleObject::QueryInterface(IID_IViewObject)"); + else + { +#if 0 + String strInterface; + String strLiteral; + + if(mIIDLib.haveIID(riid,strInterface,strLiteral))Message::message(strInterface+String(" ")+strLiteral+String("(E_NOINTERFACE)")); + else Message::message((String)SysGUID(riid)+String("E_NOINTERFACE")); +#endif + } + if(0==*ppv)return E_NOINTERFACE; + AddRef(); + return NOERROR; +} + +ULONG __stdcall CSimpleObject::AddRef(void) +{ + mRefCount++; + return mRefCount; +} + +ULONG __stdcall CSimpleObject::Release(void) +{ + mRefCount--; + if(0==mRefCount) + { + if(mDLLServer.isOkay())mDLLServer->removeObject(); + mRefCount++; + ::delete this; + } + return mRefCount; +} + +HRESULT __stdcall CSimpleObject::setByte(BYTE someByte) +{ + return S_OK; +} + +//HRESULT __stdcall CSimpleObject::windowProcedure(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) +//{ +// return S_OK; +//} + +// ***** + +CImpISimpleObject::CImpISimpleObject(SmartPointer &pBackObj,PIUnknown &pUnkOuter) +: mRefCount(0), mBackObj(pBackObj) +{ + if(!pUnkOuter.isOkay())mUnkOuter=pBackObj; + else mUnkOuter=pUnkOuter; +} + +CImpISimpleObject::~CImpISimpleObject() +{ +} + +HRESULT __stdcall CImpISimpleObject::QueryInterface(REFIID riid,PPVOID ppv) +{ + return mUnkOuter->QueryInterface(riid,ppv); +} + +ULONG __stdcall CImpISimpleObject::AddRef(void) +{ + mRefCount++; + return mUnkOuter->AddRef(); +} + +ULONG __stdcall CImpISimpleObject::Release(void) +{ + mRefCount--; + return mUnkOuter->Release(); +} + +HRESULT __stdcall CImpISimpleObject::setByte(BYTE someBYTE) +{ + return NOERROR; +} + +// ******************************** + + +CImpIOleInPlaceObjectWindowless::CImpIOleInPlaceObjectWindowless(SmartPointer &backObj,PIUnknown &unkOuter) +: IOleInPlaceObjectWindowlessCmn(backObj,unkOuter) +{ +} + +CImpIOleInPlaceObjectWindowless::~CImpIOleInPlaceObjectWindowless() +{ +} + +HRESULT __stdcall CImpIOleInPlaceObjectWindowless::QueryInterface(REFIID riid,PPVOID ppv) +{ + return mUnkOuter->QueryInterface(riid,ppv); +} + +ULONG __stdcall CImpIOleInPlaceObjectWindowless::AddRef(void) +{ + mRefCount++; + return mUnkOuter->AddRef(); +} + +ULONG __stdcall CImpIOleInPlaceObjectWindowless::Release(void) +{ + mRefCount--; + return mUnkOuter->Release(); +} + +// ************************************* + +CImpIOleObject::CImpIOleObject(SmartPointer &backObj,PIUnknown &unkOuter) +: IOleObjectCmn(backObj,unkOuter) +{ +} + +CImpIOleObject::~CImpIOleObject() +{ +} + +HRESULT __stdcall CImpIOleObject::QueryInterface(REFIID riid,PPVOID ppv) +{ + return mUnkOuter->QueryInterface(riid,ppv); +} + +ULONG __stdcall CImpIOleObject::AddRef(void) +{ + mRefCount++; + return mUnkOuter->AddRef(); +} + +ULONG __stdcall CImpIOleObject::Release(void) +{ + mRefCount--; + return mUnkOuter->Release(); +} + +// ********************************************************** + +CImpIViewObject::CImpIViewObject(SmartPointer &backObj,PIUnknown &unkOuter) +: IViewObjectCmn(backObj,unkOuter) +{ +} + +CImpIViewObject::~CImpIViewObject() +{ +} + +HRESULT __stdcall CImpIViewObject::QueryInterface(REFIID riid,PPVOID ppv) +{ + return mUnkOuter->QueryInterface(riid,ppv); +} + +ULONG __stdcall CImpIViewObject::AddRef(void) +{ + mRefCount++; + return mUnkOuter->AddRef(); +} + +ULONG __stdcall CImpIViewObject::Release(void) +{ + mRefCount--; + return mUnkOuter->Release(); +} diff --git a/proto/source/SOBJ.HPP b/proto/source/SOBJ.HPP new file mode 100644 index 0000000..d6e15e2 --- /dev/null +++ b/proto/source/SOBJ.HPP @@ -0,0 +1,105 @@ +#ifndef _PROTO_CSIMPLEOBJECT_HPP_ +#define _PROTO_CSIMPLEOBJECT_HPP_ +#ifndef _COM_OLE2_HPP_ +#include +#endif +#ifndef _PROTO_INTERFACE_HPP_ +#include +#endif +#ifndef _PROTO_DLLSERVER_HPP_ +#include +#endif +#ifndef _COM_DISPATCH_HPP_ +#include +#endif +#ifndef _COM_MESSAGEHANDLER_HPP_ +#include +#endif +#ifndef _COM_IOLEINPLACEOBJECTWINDOWLESS_HPP_ +#include +#endif +#ifndef _COM_IOLEOBJECT_HPP_ +#include +#endif +#ifndef _PROTO_GUIDS_HPP_ +#include +#endif +#ifndef _COM_IIDLIB_HPP_ +#include +#endif +#ifndef _COM_IVIEWOBJECT_HPP_ +#include +#endif + +class CSimpleObject; + +class CImpIViewObject : public IViewObjectCmn +{ +public: + CImpIViewObject(SmartPointer &backObj,PIUnknown &unkOuter); + ~CImpIViewObject(); + HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(); +private: +}; + +class CImpIOleInPlaceObjectWindowless : public IOleInPlaceObjectWindowlessCmn +{ +public: + CImpIOleInPlaceObjectWindowless(SmartPointer &backObj,PIUnknown &unkOuter); + ~CImpIOleInPlaceObjectWindowless(); + HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); +private: +}; + +class CImpIOleObject : public IOleObjectCmn +{ +public: + CImpIOleObject(SmartPointer &backObj,PIUnknown &unkOuter); + ~CImpIOleObject(); + HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); +private: +}; + +class CImpISimpleObject : public IDispatchCmn +{ +public: + CImpISimpleObject(SmartPointer &pBackObj,PIUnknown &pUnkOuter); + ~CImpISimpleObject(); + HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); + HRESULT __stdcall setByte(BYTE someBYTE); +private: + SmartPointer mBackObj; + PIUnknown mUnkOuter; + ULONG mRefCount; +}; + +class CSimpleObject : public ISimpleObject +{ +public: + CSimpleObject(PIUnknown &pUnkOuter,SmartPointer &server); + ~CSimpleObject(); + HRESULT __stdcall QueryInterface(REFIID riid,PPVOID ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); + HRESULT __stdcall setByte(BYTE someByte); +private: + CImpISimpleObject mImpISimpleObject; + CImpIOleInPlaceObjectWindowless mImpIOleInPlaceObjectWindowless; + CImpIOleObject mImpIOleObject; + CImpIViewObject mImpIViewObject; + SmartPointer mDLLServer; + IIDLib mIIDLib; + PIUnknown mUnkOuter; + ULONG mRefCount; +}; + +typedef CSimpleObject *PCSimpleObject; +#endif \ No newline at end of file diff --git a/proto/source/SOBJECT.HPP b/proto/source/SOBJECT.HPP new file mode 100644 index 0000000..b057c22 --- /dev/null +++ b/proto/source/SOBJECT.HPP @@ -0,0 +1,157 @@ +#ifndef _PROTO_SIMPLEOBJECT_HPP_ +#define _PROTO_SIMPLEOBJECT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif +#ifndef _ENGINE_TEXTURE_HPP_ +#include +#endif +#ifndef _PROTO_PUREOBJECT_HPP_ +#include +#endif + +class SimpleObject : public PureObject +{ +public: + SimpleObject(void); + SimpleObject(const Vector3D &vector3D,UINT id=0); + virtual ~SimpleObject(); + Point3D &operator[](unsigned short index); + void setVector(const Vector3D &vector3D); + const Vector3D &getInitVector(void)const; + void setTexture(SmartPointer &textureBitmap,bool ownIt=false); + const SmartPointer &getTexture(void)const; + virtual void rotate(const PureAngle &pureAngle,RotationMatrix::Orientation orientation); + virtual void translate(const Point &uvPoint,TranslationMatrix::Orientation orientation); + virtual void map(SmartPointer &displayBitmap); + virtual void normalize(void); + virtual bool isInView(SmartPointer &displayBitmap); + virtual const Vector3D &getVector(void)const; +private: + SimpleObject(const SimpleObject &someSimpleObject); + SimpleObject &operator=(const SimpleObject &someSimpleObject); + + SmartPointer mTextureBitmap; + Vector3D mVector3D; + Vector3D mInitVector3D; +}; + +inline +SimpleObject::SimpleObject(void) +{ +} + +inline +SimpleObject::SimpleObject(const Vector3D &vector3D,UINT id) +: PureObject(id), mVector3D(vector3D), mInitVector3D(vector3D) +{ +} + +inline +SimpleObject::SimpleObject(const SimpleObject &someSimpleObject) +{ // private implementation + *this=someSimpleObject; +} + +inline +SimpleObject::~SimpleObject() +{ +} + +inline +Point3D &SimpleObject::operator[](unsigned short index) +{ + return mVector3D[index]; +} + +inline +SimpleObject &SimpleObject::operator=(const SimpleObject &someSimpleObject) +{ + mVector3D=someSimpleObject.mVector3D; + mTextureBitmap=someSimpleObject.mTextureBitmap; + setState(someSimpleObject.getState()); + setID(someSimpleObject.getID()); + return *this; +} + +inline +void SimpleObject::setVector(const Vector3D &vector3D) +{ + mVector3D=vector3D; +} + +inline +const Vector3D &SimpleObject::getVector(void)const +{ + return mVector3D; +} + +inline +const Vector3D &SimpleObject::getInitVector(void)const +{ + return mInitVector3D; +} + +inline +void SimpleObject::setTexture(SmartPointer &textureBitmap,bool ownIt) +{ + mTextureBitmap=textureBitmap; + if(ownIt)mTextureBitmap.disposition(PointerDisposition::Delete); +} + +inline +const SmartPointer &SimpleObject::getTexture(void)const +{ + return mTextureBitmap; +} +// virtuals + +inline +void SimpleObject::map(SmartPointer &displayBitmap) +{ + Texture textureMapper(mVector3D,*mTextureBitmap,*displayBitmap); + textureMapper.mapTexture(); +} + +inline +void SimpleObject::rotate(const PureAngle &pureAngle,RotationMatrix::Orientation orientation) +{ + RotationMatrix rotationMatrix; + rotationMatrix.orientation(orientation); + rotationMatrix.angle(pureAngle); + rotationMatrix.evaluate(mVector3D[0]); + rotationMatrix.evaluate(mVector3D[1]); + rotationMatrix.evaluate(mVector3D[2]); + rotationMatrix.evaluate(mVector3D[3]); +} + +inline +void SimpleObject::translate(const Point &uvPoint,TranslationMatrix::Orientation orientation) +{ + TranslationMatrix translationMatrix; + translationMatrix.orientation(orientation); + translationMatrix.uvPoint(uvPoint); + translationMatrix.evaluate(mVector3D[0]); + translationMatrix.evaluate(mVector3D[1]); + translationMatrix.evaluate(mVector3D[2]); + translationMatrix.evaluate(mVector3D[3]); +} + +inline +void SimpleObject::normalize(void) +{ + mVector3D.normalize(); +} + +inline +bool SimpleObject::isInView(SmartPointer &displayBitmap) +{ + return displayBitmap->isInView(mVector3D); +} +#endif \ No newline at end of file diff --git a/proto/source/SPLINE.CPP b/proto/source/SPLINE.CPP new file mode 100644 index 0000000..45b09da --- /dev/null +++ b/proto/source/SPLINE.CPP @@ -0,0 +1,92 @@ + +#include +#include +#include +#include +#include + +BOOL readInFile(const String &pathFileName,PureVector &srcPairs); + +int main(int argc,char **argv) +{ + PureVector srcPairs; + PureVector dstPairs; + CatmullRom splineGen; + FileIO writeFile; + String strOutLine; + String srcFile; + String dstFile; + + if(3!=argc) + { + ::printf("Fortis Spline Generator Copyright(c) 1998\n"); + ::printf("USAGE: spline \n"); + ::printf("where:\n"); + ::printf(" contains point pair list (ie)\n"); + ::printf(" 1.00,4.356\n"); + ::printf(" 2.00,4.467\n"); + ::printf(" 4.00,4.393\n"); + ::printf(" 8.00,4.393\n"); + ::printf(" 20.00,4.393\n"); + ::printf(" 40.00,4.393\n"); + ::printf(" 120.00,4.393\n"); + ::printf(" is output destination\n"); + ::printf("* Don't forget to comma delimit the source file.\n"); + ::printf("* Keep in mind, the first number in the last line\n"); + ::printf(" is used to determine the size of the output data set.\n"); + return 1; + } + if(!readInFile(argv[1],srcPairs)) + { + ::printf(String("Error reading ")+String(argv[1])); + return 1; + } + dstPairs.size(srcPairs[srcPairs.size()-1].column()); + for(int index=1;index<=dstPairs.size();index++)dstPairs[index-1].column(index); + splineGen.performSpline(srcPairs,dstPairs); + writeFile.open(argv[2],FileIO::GenericWrite,FileIO::FileShareRead,FileIO::CreateAlways); + for(index=0;index &srcPairs) +{ + FileIO inFile; + String strLine; + int numEntries(0); + + inFile.open(pathFileName); + if(!inFile.isOkay())return FALSE; + while(inFile.readLine(strLine)) + { + if(strLine.isNull())break; + numEntries++; + } + if(!numEntries)return FALSE; + inFile.rewind(); + srcPairs.size(numEntries); + for(int index=0;index +#endif + +class Serializeable +{ +public: +protected: + virtual String serialize(void)=0; +private: +}; +#endif diff --git a/proto/source/SurfaceInterval.hpp b/proto/source/SurfaceInterval.hpp new file mode 100644 index 0000000..6b0d47f --- /dev/null +++ b/proto/source/SurfaceInterval.hpp @@ -0,0 +1,59 @@ +#ifndef _DIVEPLANNER_SURFACEINTERVAL_HPP_ +#define _DIVEPLANNER_SURFACEINTERVAL_HPP_ +#include + +class SurfaceInterval +{ +public: + SurfaceInterval(void); + SurfaceInterval(const SurfaceTime &minTime,const SurfaceTime &maxTime); + virtual ~SurfaceInterval(); + const SurfaceTime &minTime(void)const; + void minTime(const SurfaceTime &maxTime); + const SurfaceTime &maxTime(void)const; + void maxTime(const SurfaceTime &maxTime); +private: + SurfaceTime mMinTime; + SurfaceTime mMaxTime; +}; + +inline +SurfaceInterval::SurfaceInterval(void) +{ +} + +inline +SurfaceInterval::SurfaceInterval(const SurfaceTime &minTime,const SurfaceTime &maxTime) +: mMinTime(minTime), mMaxTime(maxTime) +{ +} + +inline +SurfaceInterval::~SurfaceInterval() +{ +} + +inline +const SurfaceTime &SurfaceInterval::minTime(void)const +{ + return mMinTime; +} + +inline +void SurfaceInterval::minTime(const SurfaceTime &maxTime) +{ + mMinTime=minTime; +} + +inline +const SurfaceTime &SurfaceInterval::maxTime(void)const +{ + return mMaxTime; +} + +inline +void SurfaceInterval::maxTime(const SurfaceTime &maxTime) +{ + mMaxTime=maxTime; +} +#endif diff --git a/proto/source/SurfaceTime.hpp b/proto/source/SurfaceTime.hpp new file mode 100644 index 0000000..b4cf3f7 --- /dev/null +++ b/proto/source/SurfaceTime.hpp @@ -0,0 +1,108 @@ +#ifndef _DIVEPLANNER_SURFACETIME_HPP_ +#define _DIVEPLANNER_SURFACETIME_HPP_ + +class SurfaceTime +{ +public: + SurfaceTime(void); + SurfaceTime(int hours,int minutes); + virtual ~SurfaceTime(); + bool operator==(const SurfaceTime &surfaceTime)const; + bool operator<(const SurfaceTime &surfaceTime)const; + bool operator>(const SurfaceTime &surfaceTime)const; + bool operator>=(const SurfaceTime &surfaceTime)const; + bool operator<=(const SurfaceTime &surfaceTime)const; + int hours(void)const; + void hours(int hours); + int minutes(void)const; + void minutes(int minutes); + bool isOkay(void)const; +private: + int mHours; + int mMinutes; +}; + +inline +SurfaceTime::SurfaceTime(void) +: mHours(-1), mMinutes(-1) +{ +} + +inline +SurfaceTime::SurfaceTime(int hours,int minutes) +: mHours(hours), mMinutes(minutes) +{ +} + +inline +SurfaceTime::~SurfaceTime() +{ +} + +inline +bool SurfaceTime::operator<(const SurfaceTime &surfaceTime)const +{ + if(hours()surfaceTime.hours())return false; + return minutes()(const SurfaceTime &surfaceTime)const +{ + if(hours()>surfaceTime.hours())return true; + if(hours()surfaceTime.minutes(); +} + +inline +bool SurfaceTime::operator==(const SurfaceTime &surfaceTime)const +{ + return hours()==surfaceTime.hours()&&minutes()==surfaceTime.minutes(); +} + +inline +bool SurfaceTime::operator>=(const SurfaceTime &surfaceTime)const +{ + if(*this>surfaceTime||*this==surfaceTime)return true; + return false; +} + +inline +bool SurfaceTime::operator<=(const SurfaceTime &surfaceTime)const +{ + if(*this +#include +#include +#include +#include +#include +#include +#include + +MapTerrain::MapTerrain(SmartPointer &parentWindow,const String &strColorBitmap,const String &strHeightBitmap) +: mSizeHandler(this,&MapTerrain::sizeHandler), mColorBitmap(strColorBitmap), mHeightBitmap(strHeightBitmap) +{ + mParentWindow=parentWindow; + mParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + mHeightBitmap.upsideDown(); + mColorBitmap.upsideDown(); +} + +MapTerrain::MapTerrain(const MapTerrain &mapTerrain) +: mSizeHandler(this,&MapTerrain::sizeHandler) +{ // private implementation + *this=mapTerrain; +} + +MapTerrain &MapTerrain::operator=(const MapTerrain &/*mapTerrain*/) +{ // private implementation + return *this; +} + +MapTerrain::~MapTerrain() +{ +} + +CallbackData::ReturnType MapTerrain::sizeHandler(CallbackData &someCallbackData) +{ + Rect winRect; + + mParentWindow->windowRect(winRect); + mAngles.screenWidth(winRect.right()); + mGeometry.screenWidth(winRect.right()); + mTrigTable.build(mAngles); + return (CallbackData::ReturnType)FALSE; +} + +void MapTerrain::mapTerrain(Display &display,ViewPoint &viewPoint) +{ + DIBitmap &bitmap=(DIBitmap&)display; + int bmWidth(bitmap.width()); + int bmHeight(bitmap.height()); + int rayCastAngle; + int currVoxelScale; + int mapAddress; + int colHeight; + int currRow; + int rayPointx; + int rayPointy; + int rayPointz; + int viewPointx; + int viewPointy; + int viewPointz; + UCHAR color; + UCHAR *pDestColPtr; + UCHAR *pDestBuffer; + int xr; + int yr; + int dx; + int dy; + int dz; + + viewPointx=(int)viewPoint.viewPos().x()<>FixedPoint::FPShift; + yr=rayPointy>>FixedPoint::FPShift; + xr=xr&(Geometry::HeightFieldWidth-1); + yr=yr&(Geometry::HeightFieldHeight-1); + mapAddress=(xr+(yr<rayPointz) + { + color=((char*)mColorBitmap.ptrData())[mapAddress]; + while(TRUE) + { + *pDestColPtr=color; + dz+=mGeometry.deltaSlope(); + rayPointz+=currVoxelScale; + pDestColPtr+=bmWidth; + if(++currRow>=bmHeight) + { + currStep=Geometry::MaxSteps; + break; + } + if(rayPointz>colHeight)break; + } + } + rayPointx+=dx; + rayPointy+=dy; + rayPointz+=dz; + currVoxelScale+=mGeometry.deltaSlope(); + } + pDestBuffer++; + rayCastAngle--; + } + ((DIBitmap&)display).bitBlt((PureDevice&)display); +} diff --git a/proto/source/TERRAIN.HPP b/proto/source/TERRAIN.HPP new file mode 100644 index 0000000..562cfa7 --- /dev/null +++ b/proto/source/TERRAIN.HPP @@ -0,0 +1,81 @@ +#ifndef _PROTO_MAPTERRAIN_HPP_ +#define _PROTO_MAPTERRAIN_HPP_ +#ifndef _PROTO_ANGLES_HPP_ +#include +#endif +#ifndef _PROTO_TRIGTABLE_HPP_ +#include +#endif +#ifndef _PROTO_GEOMETRY_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif + +class GUIWindow; +class Display; +class ViewPoint; + +class MapTerrain +{ +public: + MapTerrain(SmartPointer &parentWindow,const String &strColorBitmap,const String &strHeightBitmap); + MapTerrain(void); + virtual ~MapTerrain(); + void mapTerrain(Display &display,ViewPoint &viewPoint); + Angles &angles(void); + TrigTable &trigTable(void); + Geometry &geometry(void); + Bitmap &colorBitmap(void); + Bitmap &heightBitmap(void); +private: + MapTerrain(const MapTerrain &mapTerrain); + MapTerrain &operator=(const MapTerrain &mapTerrain); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + SmartPointer mParentWindow; + Bitmap mColorBitmap; + Bitmap mHeightBitmap; + Angles mAngles; + Geometry mGeometry; + TrigTable mTrigTable; +}; + +inline +Angles &MapTerrain::angles(void) +{ + return mAngles; +} + +inline +TrigTable &MapTerrain::trigTable(void) +{ + return mTrigTable; +} + +inline +Geometry &MapTerrain::geometry(void) +{ + return mGeometry; +} + +inline +Bitmap &MapTerrain::colorBitmap(void) +{ + return mColorBitmap; +} + +inline +Bitmap &MapTerrain::heightBitmap(void) +{ + return mHeightBitmap; +} +#endif \ No newline at end of file diff --git a/proto/source/TIME.bmp b/proto/source/TIME.bmp new file mode 100644 index 0000000..a51f82f Binary files /dev/null and b/proto/source/TIME.bmp differ diff --git a/proto/source/TOBJECT.HPP b/proto/source/TOBJECT.HPP new file mode 100644 index 0000000..f8961ce --- /dev/null +++ b/proto/source/TOBJECT.HPP @@ -0,0 +1,161 @@ +#ifndef _PROTO_TESTOBJECT_HPP_ +#define _PROTO_TESTOBJECT_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_BITMAP_HPP_ +#include +#endif +#ifndef _ENGINE_VECTOR3D_HPP_ +#include +#endif +#ifndef _ENGINE_TEXTURE_HPP_ +#include +#endif +#ifndef _PROTO_PUREOBJECT_HPP_ +#include +#endif + +class TestObject : public PureObject +{ +public: + TestObject(void); + TestObject(const Vector3D &vector3D,UINT id=0); + virtual ~TestObject(); + Point3D &operator[](unsigned short index); + void setVector(const Vector3D &vector3D); + const Vector3D &getVector(void)const; + const Vector3D &getInitVector(void)const; + void setTexture(SmartPointer &textureBitmap,bool ownIt=false); + const SmartPointer &getTexture(void)const; + virtual void rotate(const PureAngle &pureAngle,RotationMatrix::Orientation orientation); + virtual void translate(const Point &uvPoint,TranslationMatrix::Orientation orientation); + virtual void map(SmartPointer &displayBitmap); + virtual void normalize(void); + virtual bool isInView(SmartPointer &displayBitmap); +private: + TestObject(const TestObject &someTestObject); + TestObject &operator=(const TestObject &someTestObject); + + SmartPointer mTextureBitmap; + Vector3D mVector3D; + Vector3D mInitVector3D; +}; + +inline +TestObject::TestObject(void) +{ +} + +inline +TestObject::TestObject(const Vector3D &vector3D,UINT id) +: PureObject(id), mVector3D(vector3D), mInitVector3D(vector3D) +{ +} + +inline +TestObject::TestObject(const TestObject &someTestObject) +{ // private implementation + *this=someTestObject; +} + +inline +TestObject::~TestObject() +{ +} + +inline +Point3D &TestObject::operator[](unsigned short index) +{ + return mVector3D[index]; +} + +inline +TestObject &TestObject::operator=(const TestObject &someTestObject) +{ + mVector3D=someTestObject.mVector3D; + mTextureBitmap=someTestObject.mTextureBitmap; + setState(someTestObject.getState()); + setID(someTestObject.getID()); + return *this; +} + +inline +void TestObject::setVector(const Vector3D &vector3D) +{ + mVector3D=vector3D; +} + +inline +const Vector3D &TestObject::getVector(void)const +{ + return mVector3D; +} + +inline +const Vector3D &TestObject::getInitVector(void)const +{ + return mInitVector3D; +} + + +inline +void TestObject::setTexture(SmartPointer &textureBitmap,bool ownIt) +{ + mTextureBitmap=textureBitmap; + if(ownIt)mTextureBitmap.disposition(PointerDisposition::Delete); +} + +inline +const SmartPointer &TestObject::getTexture(void)const +{ + return mTextureBitmap; +} +// virtuals + +inline +void TestObject::map(SmartPointer &displayBitmap) +{ + Texture textureMapper(mVector3D,*mTextureBitmap,*displayBitmap); + textureMapper.mapTexture(); +// displayBitmap->line(displayBitmap->cameraPoint(),Point3D(0,0,0),128); +} + +inline +void TestObject::rotate(const PureAngle &pureAngle,RotationMatrix::Orientation orientation) +{ +#if 0 + RotationMatrix rotationMatrix; + rotationMatrix.orientation(orientation); + rotationMatrix.angle(pureAngle); + rotationMatrix.evaluate(mVector3D[0]); + rotationMatrix.evaluate(mVector3D[1]); + rotationMatrix.evaluate(mVector3D[2]); + rotationMatrix.evaluate(mVector3D[3]); +#endif +} + +inline +void TestObject::translate(const Point &uvPoint,TranslationMatrix::Orientation orientation) +{ + TranslationMatrix translationMatrix; + translationMatrix.orientation(orientation); + translationMatrix.uvPoint(uvPoint); + translationMatrix.evaluate(mVector3D[0]); + translationMatrix.evaluate(mVector3D[1]); + translationMatrix.evaluate(mVector3D[2]); + translationMatrix.evaluate(mVector3D[3]); +} + +inline +void TestObject::normalize(void) +{ + mVector3D.normalize(); +} + +inline +bool TestObject::isInView(SmartPointer &displayBitmap) +{ + return displayBitmap->isInView(mVector3D); +} +#endif \ No newline at end of file diff --git a/proto/source/TRIG.CPP b/proto/source/TRIG.CPP new file mode 100644 index 0000000..ecb8ae2 --- /dev/null +++ b/proto/source/TRIG.CPP @@ -0,0 +1,20 @@ +#include +#include +#include +#include + +void TrigTable::build(const Angles &angles) +{ + double angleRad; + + angle360(angles.angle360()); + mCosTable.size(angles.angle360()); + mSinTable.size(angles.angle360()); + for(int currAngle=0;currAngle +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class GUIWindow; +class Angles; + +class TrigTable +{ +public: + TrigTable(void); + virtual ~TrigTable(); + void build(const Angles &angles); + int cos(int theta); + int sin(int theta); +private: + TrigTable(const TrigTable &trigTable); + TrigTable &operator=(const TrigTable &trigTable); + int angle360(void)const; + void angle360(int angle360); + + GlobalData mCosTable; + GlobalData mSinTable; + int mAngle360; +}; + +inline +TrigTable::TrigTable(void) +: mAngle360(0) +{ +} + +inline +TrigTable::TrigTable(const TrigTable &trigTable) +: mAngle360(0) +{ // private implementation + *this=trigTable; +} + +inline +TrigTable::~TrigTable() +{ +} + +inline +TrigTable &TrigTable::operator=(const TrigTable &/*trigTable*/) +{ // private implementation + return *this; +} + +inline +int TrigTable::angle360(void)const +{ + return mAngle360; +} + +inline +void TrigTable::angle360(int angle360) +{ + mAngle360=angle360; +} + +inline +int TrigTable::cos(int theta) +{ + if(theta<0)return mCosTable.operator[](theta+angle360()); + else if(theta>=angle360())return mCosTable.operator[](theta-angle360()); + return mCosTable.operator[](theta); +} + +inline +int TrigTable::sin(int theta) +{ + if(theta<0)return mSinTable.operator[](theta+angle360()); + else if(theta>=angle360())return mSinTable.operator[](theta-angle360()); + return mSinTable.operator[](theta); +} +#endif \ No newline at end of file diff --git a/proto/source/ThreadStorage.hpp b/proto/source/ThreadStorage.hpp new file mode 100644 index 0000000..f544bd0 --- /dev/null +++ b/proto/source/ThreadStorage.hpp @@ -0,0 +1,184 @@ +#ifndef _THREAD_THREADSTORAGE_HPP_ +#define _THREAD_THREADSTORAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_PUREDWORD_HPP_ +#include +#endif +#ifndef _BSPTREE_BINARYTREE_HPP_ +#include +#endif + +template +class ThreadStorage +{ +public: + ThreadStorage(void); + ThreadStorage(const ThreadStorage &threadStorage); + virtual ~ThreadStorage(); + bool operator==(const ThreadStorage &threadStorage)const; + bool operator<(const ThreadStorage &threadStorage)const; + bool operator>(const ThreadStorage &threadStorage)const; + T &getData(void); + void setData(const T &data); + DWORD getThreadId(void)const; + void setThreadId(DWORD threadId); +private: + T mData; + DWORD mThreadId; +}; + +template +inline +ThreadStorage::ThreadStorage(void) +: mThreadId(0) +{ +} + +template +inline +ThreadStorage::ThreadStorage(const ThreadStorage &threadStorage) +{ + *this=threadStorage; +} + +template +inline +ThreadStorage::~ThreadStorage() +{ +} + +template +inline +bool ThreadStorage::operator==(const ThreadStorage &threadStorage)const +{ + return mThreadId==threadStorage.mThreadId; +} + +template +inline +bool ThreadStorage::operator<(const ThreadStorage &threadStorage)const +{ + return mThreadId +inline +bool ThreadStorage::operator>(const ThreadStorage &threadStorage)const +{ + return mThreadId +inline +T &ThreadStorage::getData(void) +{ + return mData; +} + +template +inline +void ThreadStorage::setData(const T &data) +{ + mData=data; +} + +template +inline +DWORD ThreadStorage::getThreadId(void)const +{ + return mThreadId; +} + +template +inline +void ThreadStorage::setThreadId(DWORD threadId) +{ + mThreadId=threadId; +} + + +template +class ThreadLocalStorage : private BinaryTree > +{ +public: + ThreadLocalStorage(); + bool getThreadData(SmartPointer &threadData); + bool haveThreadData(void); + void removeThreadData(void); + bool addThreadData(const T &data); +private: + ThreadLocalStorage(const ThreadLocalStorage &threadLocalStorage); + ThreadLocalStorage &operator=(const ThreadLocalStorage &threadLocalaStorage); +}; + +template +inline +ThreadLocalStorage::ThreadLocalStorage() +{ +} + +template +inline +ThreadLocalStorage::ThreadLocalStorage(const ThreadLocalStorage &threadLocalStorage) +{ // copy constructor is private +} + +template +inline +ThreadLocalStorage &ThreadLocalStorage::operator=(const ThreadLocalStorage &threadLocalaStorage) +{ // assignment operator is private + return *this; +} + +template +inline +bool ThreadLocalStorage::getThreadData(SmartPointer &threadData) +{ + ThreadStorage threadStorage; + SmartPointer > pThreadStorage; + + threadStorage.setThreadId(::GetCurrentThreadId()); + if(!searchItem(threadStorage,pThreadStorage))return false; + threadData=&pThreadStorage->getData(); + return true; +} + +template +inline +bool ThreadLocalStorage::haveThreadData(void) +{ + ThreadStorage threadStorage; + threadStorage.setThreadId(::GetCurrentThreadId()); + return searchItem(threadStorage); +} + +template +inline +void ThreadLocalStorage::removeThreadData(void) +{ + if(!haveThreadData())return; + ThreadStorage threadStorage; + threadStorage.setThreadId(::GetCurrentThreadId()); + remove(threadStorage); +} + +template +inline +bool ThreadLocalStorage::addThreadData(const T &data) +{ + if(haveThreadData())return false; + ThreadStorage threadStorage; + + threadStorage.setThreadId(::GetCurrentThreadId()); + threadStorage.setData(data); + return insert(threadStorage); +} +#endif + + + diff --git a/proto/source/TimeInterval.hpp b/proto/source/TimeInterval.hpp new file mode 100644 index 0000000..f45f8a7 --- /dev/null +++ b/proto/source/TimeInterval.hpp @@ -0,0 +1,61 @@ +#ifndef _DIVEPLANNER_TIMEINTERVAL_HPP_ +#define _DIVEPLANNER_TIMEINTERVAL_HPP_ + +class TimeInterval +{ +public: + TimeInterval(void); + TimeInterval(int rnt,int abt); + int rnt(void)const; + void rnt(int rnt); + int abt(void)const; + void abt(int abt); + bool isOkay(void)const; +private: + int mRNT; + int mABT; +}; + +inline +TimeInterval::TimeInterval(void) +: mRNT(-1), mABT(-1) +{ +} + +inline +TimeInterval::TimeInterval(int rnt,int abt) +: mRNT(rnt), mABT(abt) +{ +} + +inline +int TimeInterval::rnt(void)const +{ + return mRNT; +} + +inline +void TimeInterval::rnt(int rnt) +{ + mRNT=rnt; +} + +inline +int TimeInterval::abt(void)const +{ + return mABT; +} + +inline +void TimeInterval::abt(int abt) +{ + mABT=abt; +} + +inline +bool TimeInterval::isOkay(void)const +{ + if(-1==rnt()||-1==abt())return false; + return true; +} +#endif diff --git a/proto/source/VIEW.bmp b/proto/source/VIEW.bmp new file mode 100644 index 0000000..8b1e122 Binary files /dev/null and b/proto/source/VIEW.bmp differ diff --git a/proto/source/VIEWPT.HPP b/proto/source/VIEWPT.HPP new file mode 100644 index 0000000..99bf1a4 --- /dev/null +++ b/proto/source/VIEWPT.HPP @@ -0,0 +1,70 @@ +#ifndef _PROTO_VIEWPOINT_HPP_ +#define _PROTO_VIEWPOINT_HPP_ +#ifndef _ENGINE_POINT3D_HPP_ +#include +#endif + +class ViewPoint +{ +public: + ViewPoint(void); + ViewPoint(const ViewPoint &viewPoint); + virtual ~ViewPoint(); + ViewPoint &operator=(const ViewPoint &viewPoint); + Point3D &viewPos(void); + void viewPos(const Point3D &viewPos); + Point3D &viewAngle(void); + void viewAngle(const Point3D &viewAngle); +private: + Point3D mViewPosition; + Point3D mViewAngle; +}; + +inline +ViewPoint::ViewPoint(void) +{ +} + +inline +ViewPoint::ViewPoint(const ViewPoint &viewPoint) +{ + *this=viewPoint; +} + +inline +ViewPoint::~ViewPoint() +{ +} + +inline +ViewPoint &ViewPoint::operator=(const ViewPoint &viewPoint) +{ + mViewPosition=viewPoint.mViewPosition; + mViewAngle=viewPoint.mViewAngle; + return *this; +} + +inline +Point3D &ViewPoint::viewPos(void) +{ + return mViewPosition; +} + +inline +void ViewPoint::viewPos(const Point3D &viewPos) +{ + mViewPosition=viewPos; +} + +inline +Point3D &ViewPoint::viewAngle(void) +{ + return mViewAngle; +} + +inline +void ViewPoint::viewAngle(const Point3D &viewAngle) +{ + mViewAngle=viewAngle; +} +#endif \ No newline at end of file diff --git a/proto/source/XDISSOLVE.bmp b/proto/source/XDISSOLVE.bmp new file mode 100644 index 0000000..0aa8166 Binary files /dev/null and b/proto/source/XDISSOLVE.bmp differ diff --git a/proto/source/chatc.cpp b/proto/source/chatc.cpp new file mode 100644 index 0000000..a22030c --- /dev/null +++ b/proto/source/chatc.cpp @@ -0,0 +1,92 @@ +#include +#include +#include +#include +#include +//#include + + +#define SIO_GET_INTERFACE_LIST _IOR('t', 127, u_long) // + +typedef struct _INTERFACE_INFO +{ + u_long iiFlags; /* Interface flags */ + struct sockaddr iiAddress; /* Interface address */ + struct sockaddr iiBroadcastAddress; /* Broadcast address */ + struct sockaddr iiNetmask; /* Network mask */ +} INTERFACE_INFO, FAR * LPINTERFACE_INFO; + +void message(const String &message); + +void main(void) +{ + WSASystem wsaSystem; + String hostName("li.net"); + HostEnt hostEntry; + ServEnt serverEntry; + InternetAddress internetAddress(hostName); + INETSocketAddress inetSocketAddress; + Socket ftpControl; + + message(String("trying ")+hostName+String("...")); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + inetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return;} + if(!ftpControl.openSocket()){message("unable to create socket.");return;} + inetSocketAddress.family(PF_INET); + inetSocketAddress.port(serverEntry.port()); + if(!ftpControl.connect(inetSocketAddress)){message("unable to connect to ftp daemon");return;} +// if(!receive(mAckConnectionResponseStrings))return FALSE; + ftpControl.getSocketName(inetSocketAddress); + message(String("my IP address is..")+(String)inetSocketAddress.internetAddress()); + + + INETSocketAddress inetAddress; + int length(sizeof(sockaddr_in)); + ::getpeername(ftpControl,(sockaddr*)((sockaddr_in*)&inetAddress),&length); + message((String)inetAddress.internetAddress()); + +// return mFTPControl.isConnected(); + + +// char bigBuff[256]; +// ::memset(bigBuff,0,sizeof(bigBuff)); + INTERFACE_INFO interfaceInfo; + ::memset(&interfaceInfo,0,sizeof(interfaceInfo)); + ioctlsocket(ftpControl,SIO_GET_INTERFACE_LIST,(ULONG*)&interfaceInfo); + message("ioctl succeeded"); + INTERFACE_INFO *pI=&interfaceInfo; + return; +} + +void message(const String &message) +{ + ::OutputDebugString(message+String("\n")); +} + + +#if 0 +WORD FTPClient::open(String hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + INETSocketAddress::internetAddress((hostEntry.addresses())[0]); + if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return FALSE;} + if(!mFTPControl.openSocket()){message("unable to create socket.");return FALSE;} + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(serverEntry.port()); + if(!mFTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to ftp daemon");return FALSE;} + if(!receive(mAckConnectionResponseStrings))return FALSE; + mFTPControl.getSocketName((INETSocketAddress&)*this); + return mFTPControl.isConnected(); +} +#endif \ No newline at end of file diff --git a/proto/source/compare.cpp b/proto/source/compare.cpp new file mode 100644 index 0000000..0e73178 --- /dev/null +++ b/proto/source/compare.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include + +#define DEST_PORT 4567 +#define SOURCE_PORT 0 +#define TEST_ADDR "234.5.6.7" + +void outDebug(const String &string); + +void main(int argc,char **argv) +{ + WSASystem wsaSystem; + SocketAddress socketAddressLocal; + SocketAddress socketAddressTo; + SocketAddress socketAddressFrom; + IPMReq ipMCast; + Socket socket; + + if(!socket.create(Socket::DomainInternet,Socket::SocketDGram,Socket::ProtocolNone)) + { + outDebug("[Socket creation failed]"); + return; + } + if(!socket.reuseAddress(true)) + { + outDebug("[Error setting option REUSEADDR.]"); + socket.destroy(); + return; + } + outDebug("Socket created."); + socketAddressLocal.family(AF_INET); + socketAddressLocal.internetAddress(InternetAddress()); + socketAddressLocal.port(htons(DEST_PORT)); + if(!socket.bind(socketAddressLocal)) + { + outDebug("Bind failed."); + socket.destroy(); + return; + } + outDebug("Socket is bound."); + + if(!socket.setMulticastTTL(2)) + { + outDebug("[Error setting option SET_MULTICAST_TTL.]"); + socket.destroy(); + return; + } + + ipMCast.multicastAddress(InternetAddress(TEST_ADDR)); + ipMCast.localAddress(InternetAddress()); + if(!socket.addMembership(ipMCast)) + { + int error=WSAGetLastError(); + outDebug(String("[Error setting option ADDMEMBERSHIP.] Code=")+String().fromInt(error)); + socket.destroy(); + return; + } + socket.setMulticastLoopback(false); + + socket.destroy(); +} + +void outDebug(const String &string) +{ + String outString(string+String("\n")); + cout << ((String&)string).str() << endl; + ::OutputDebugString(outString.str()); +} diff --git a/proto/source/connection.hpp b/proto/source/connection.hpp new file mode 100644 index 0000000..c34477e --- /dev/null +++ b/proto/source/connection.hpp @@ -0,0 +1,82 @@ +#ifndef _PROTO_CONNECTION_HPP_ +#define _PROTO_CONNECTION_HPP_ +#ifndef _PROTO_INTERNET_HPP_ +#include +#endif + +class Connection +{ +public: + Connection(); + virtual ~Connection(); + bool connect(const Internet &internet,const String &strServer); + bool connect(const Internet &internet,const String &strServer,int service,int port); + bool connectURL(const Internet &internet,const String &strURL); + void close(); + HINTERNET getHANDLE(void)const; + bool isOkay(void)const; +private: + HINTERNET mhConnection; +}; + +inline +Connection::Connection() +: mhConnection(0) +{ +} + +inline +Connection::~Connection() +{ + close(); +} + +inline +bool Connection::connect(const Internet &internet,const String &strServer) +{ + if(!internet.isOkay())return false; + close(); + mhConnection=::InternetConnect(internet.getHANDLE(),strServer.str(),INTERNET_INVALID_PORT_NUMBER,NULL,NULL,INTERNET_SERVICE_HTTP,0,0); + return isOkay(); +} + +// connect(internet,"loocalhost",INTERNET_SERVICE_HTTP,INTERNET_DEFAULT_HTTP_PORT) + +inline +bool Connection::connect(const Internet &internet,const String &strServer,int service,int port) +{ + if(!internet.isOkay())return false; + close(); + mhConnection=::InternetConnect(internet.getHANDLE(),strServer.str(),port,NULL,NULL,service,0,0); + return isOkay(); +} + +inline +bool Connection::connectURL(const Internet &internet,const String &strURL) +{ + if(!internet.isOkay())return false; + close(); + mhConnection=::InternetConnect(internet.getHANDLE(),strURL.str(),INTERNET_INVALID_PORT_NUMBER,NULL,NULL,INTERNET_SERVICE_URL,0,0); + return isOkay(); +} + +inline +void Connection::close() +{ + if(!isOkay())return; + ::InternetCloseHandle(mhConnection); + mhConnection=0; +} + +inline +HINTERNET Connection::getHANDLE(void)const +{ + return mhConnection; +} + +inline +bool Connection::isOkay()const +{ + return mhConnection?true:false; +} +#endif diff --git a/proto/source/convert.cpp b/proto/source/convert.cpp new file mode 100644 index 0000000..8f0f246 --- /dev/null +++ b/proto/source/convert.cpp @@ -0,0 +1,155 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void convert(const String &strPathFileName,const String &strPathSaveFile,int width); + +Console console(Console::ConsoleType(Console::Write|Console::Read)); +Options getOptions(int argc,char **argv); + +void main(int argc,char **argv) +{ + Block entryList; + PathFind pathFind; + String strExtension(".jpg"); + String strMask("*"); + String strPathDirectory; + String strPathDestination; + String strPathHTML("index.html"); + File outFile; + Profile profile; + DiskInfo diskInfo; + Options options; + + options=getOptions(argc,argv); + if(1==argc||options.getHelp()) + { + console.writeLine("USAGE -s -d -iw -tw -q "); + console.read(); + return; + } + console.writeLine("2001 diversified software solutions \"http://www.diversified-software.com\""); + console.writeLine(String("source-path:")+options.getInputPath()); + console.writeLine(String("destination-path:")+options.getOutputPath()); + console.writeLine(String("thumbnail-width:")+String().fromInt(options.getThumbnailWidth())); + console.writeLine(String("image-width:")+String().fromInt(options.getImageWidth())); + console.writeLine(String("quality:")+String().fromInt(options.getQuality())); + strPathDirectory=options.getInputPath()+String("\\"); + strPathDestination=options.getOutputPath()+String("\\"); + pathFind.fileList(strPathDirectory+strMask+strExtension,entryList); + if(!entryList.size())return; + if(!outFile.open(strPathDestination+strPathHTML,"wb"))return; + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine("Image"); + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine("

 

"); + + diskInfo.createDirectory(strPathDestination); + for(int index=0;index")); + } + outFile.writeLine(""); + outFile.writeLine(""); +} + +void convert(const String &strPathFileName,const String &strPathSaveFile,int width) +{ + JPGImage jpgImage; + PureDevice screenDevice; + Profile profile; + String strSaveFileName; + String strPathDirectory; + DiskInfo diskInfo; + + strPathDirectory=strPathFileName; + profile.makeFileName(strPathFileName,strSaveFileName); + strSaveFileName=strSaveFileName.betweenString(0,'.'); + strSaveFileName+=".bmp"; + profile.makeDirectoryName(strPathDirectory); + strPathDirectory+=String("\\")+strSaveFileName; + screenDevice.screenDevice(); + jpgImage.decode(strPathFileName,screenDevice); + jpgImage.resample(screenDevice,width); + jpgImage.saveBitmap(strPathDirectory); + ImageConverter::convert(strPathDirectory,strPathSaveFile,100); + diskInfo.unlink(strPathDirectory); +} + + +/* + +-s sourcedir +-d destination +-iw imagewidth +-tw thumbnailwidth +-q quality +-? display help + + +*/ + +Options getOptions(int argc,char **argv) +{ + Options options; + for(int arg=1;arg +#endif + +class DeltaPos +{ +public: + DeltaPos(void); + DeltaPos(const DeltaPos &someDeltaPos); + DeltaPos(int row,int col,const RGB888 &color); + ~DeltaPos(); // destructor cannot be virtual + DeltaPos &operator=(const DeltaPos &someDeltaPos); + const RGB888 &color(void)const; + void color(const RGB888 &color); + int row(void)const; + void row(int row); + int col(void)const; + void col(int col); +private: + RGB888 mColor; + int mRow; + int mCol; +}; + +inline +DeltaPos::DeltaPos(void) +: mRow(0), mCol(0) +{ +} + +inline +DeltaPos::DeltaPos(int row,int col,const RGB888 &color) +: mColor(color), mRow(row), mCol(col) +{ +} + +inline +DeltaPos::DeltaPos(const DeltaPos &someDeltaPos) +: mColor(someDeltaPos.color()), mRow(someDeltaPos.row()), mCol(someDeltaPos.col()) +{ +} + +inline +DeltaPos::~DeltaPos() +{ +} + +DeltaPos &DeltaPos::operator=(const DeltaPos &someDeltaPos) +{ + color(someDeltaPos.color()); + row(someDeltaPos.row()); + col(someDeltaPos.col()); + return *this; +} + +inline +const RGB888 &DeltaPos::color(void)const +{ + return mColor; +} + +inline +void DeltaPos::color(const RGB888 &color) +{ + mColor=color; +} + +inline +int DeltaPos::row(void)const +{ + return mRow; +} + +inline +void DeltaPos::row(int row) +{ + mRow=row; +} + +inline +int DeltaPos::col(void)const +{ + return mCol; +} + +inline +void DeltaPos::col(int col) +{ + mCol=col; +} + +#endif \ No newline at end of file diff --git a/proto/source/factory.hpp b/proto/source/factory.hpp new file mode 100644 index 0000000..3816e37 --- /dev/null +++ b/proto/source/factory.hpp @@ -0,0 +1,30 @@ +#ifndef _COM_FACTORY_HPP_ +#define _COM_FACTORY_HPP_ +#ifndef _COMMON_CONSOLE_HPP_ +#include +#endif +#ifndef _COM_COM_HPP_ +#include +#endif +#ifndef _COM_DLLSERVER_HPP_ +#include +#endif + +class ClassFactory : public IClassFactory +{ +public: + ClassFactory(DLLServer &server,Console &winConsole); + virtual ~ClassFactory(); + HRESULT __stdcall QueryInterface(REFIID riid,void **ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); + HRESULT __stdcall CreateInstance(IUnknown *pUnkOuter,REFIID riid,void **ppvObj); + long __stdcall LockServer(int fLock); +protected: + virtual void *createInstance(void)=0; +private: + int mRefCount; + DLLServer &mServer; + Console &mWinConsole; +}; +#endif \ No newline at end of file diff --git a/proto/source/gensrv.cpp b/proto/source/gensrv.cpp new file mode 100644 index 0000000..ac63e9b --- /dev/null +++ b/proto/source/gensrv.cpp @@ -0,0 +1,160 @@ +#include +#include + +GenericServer::GenericServer(void) +: mIsRunning(TRUE) +{ +} + +GenericServer::~GenericServer() +{ + message("Server is destructing..."); +} + +void GenericServer::close(void) +{ + mIsRunning=FALSE; +} + +WORD GenericServer::send(const char &charData) +{ + return mPortControl.send(charData); +} + +WORD GenericServer::send(const String &sendString) +{ + return mPortControl.send(sendString); +} + +WORD GenericServer::receive(String &receiveString,BOOL waitForData) +{ + return mPortControl.receive(receiveString,waitForData); +} + +WORD GenericServer::receive(char &charData,BOOL waitForData) +{ + return mPortControl.receive(charData,waitForData); +} + +WORD GenericServer::receive(Block &receiveStrings) +{ + return mPortControl.receive(receiveStrings); +} + +/* +WORD GenericServer::listen(const String &hostName,short portNum) +{ + HostEnt hostEntry; + ServEnt serverEntry; + String stringData; + + message(String("trying host'")+hostName+String("'...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + mInternetSocketAddress.internetAddress((hostEntry.addresses())[0]); + mInternetSocketAddress.family(PF_INET); + mInternetSocketAddress.port(portNum); + while(TRUE) + { + INETSocketAddress internetSocketAddress; + message(String("[GenericServer::listen] host='")+(hostEntry.addresses())[0]+String("' port=")+String().fromInt(portNum)); + if(!mGenericControl.create()){message("socket initialization failure.");return FALSE;} + if(!mGenericControl.bind(mInternetSocketAddress)){message("bind failed");return FALSE;} + String strLocalHost((String)mInternetSocketAddress.internetAddress()); + message(String("local address is ")+strLocalHost); + if(!mGenericControl.listen()){message("listen failed");return FALSE;} + message("waiting for connection..."); + if(!mGenericControl.accept(mPortControl,internetSocketAddress)){message("accept returned FALSE;");return FALSE;} + message(String("service started from ")+(String)internetSocketAddress.internetAddress()); + mPortControl.bind(internetSocketAddress); + acceptHandler(); + if(mPortControl.receive(stringData))stringHandler(stringData); + mPortControl.destroy(); + mGenericControl.destroy(); + ::Sleep(TimeOut); + } + message("terminating connection"); + return TRUE; +} +*/ + +WORD GenericServer::listen(const String &hostName,short portNum) +{ + HostEnt hostEntry; + ServEnt serverEntry; + String stringData; + + message(String("trying host'")+hostName+String("'...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + mInternetSocketAddress.internetAddress((hostEntry.addresses())[0]); + mInternetSocketAddress.family(PF_INET); + mInternetSocketAddress.port(portNum); + while(TRUE) + { + INETSocketAddress internetSocketAddress; + message(String("[GenericServer::listen] host='")+(hostEntry.addresses())[0]+String("' port=")+String().fromInt(portNum)); + if(!mGenericControl.create()){message("socket initialization failure.");return FALSE;} + mGenericControl.reuseAddress(); + if(!mGenericControl.bind(mInternetSocketAddress)){message("bind failed");return FALSE;} + String strLocalHost((String)mInternetSocketAddress.internetAddress()); + message(String("local address is ")+strLocalHost); + if(!mGenericControl.listen()){message("listen failed");return FALSE;} + message("waiting for connection..."); + if(!mGenericControl.accept(mPortControl,internetSocketAddress)){message("accept returned FALSE;");return FALSE;} + message(String("service started from ")+internetSocketAddress.internetAddress().toString()); + mPortControl.bind(internetSocketAddress); + acceptHandler(); +// if(mPortControl.receive(stringData))stringHandler(stringData); + Block receiveStrings; + printf("Received data..."); + if(mPortControl.receive(receiveStrings)) + { + for(int index=0;index &msgData) +{ + for(int msgIndex=0;msgIndex +#endif +#ifndef _SOCKET_SERVENT_HPP_ +#include +#endif +#ifndef _SOCKET_INETSOCKETADDRESS_HPP_ +#include +#endif +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif + +class String; + +class GenericServer +{ +public: + GenericServer(void); + virtual ~GenericServer(); + WORD listen(const String &hostName,short portNum); + WORD send(const char &charData); + WORD send(const String &sendString); + WORD receive(String &receiveString,BOOL waitForData=TRUE); + WORD receive(Block &receiveStrings); + WORD receive(char &charData,BOOL waitForData=TRUE); + void close(void); +protected: + virtual void acceptHandler(void); + virtual BOOL stringHandler(const String &stringData); + virtual void message(const String &message); + virtual void message(Block &msgData); +private: + enum{TimeOut=1000}; + INETSocketAddress mInternetSocketAddress; + Socket mGenericControl; + Socket mPortControl; + WSASystem mWSASystem; + BOOL mIsRunning; +}; + +#endif \ No newline at end of file diff --git a/proto/source/mcastrcv.cpp b/proto/source/mcastrcv.cpp new file mode 100644 index 0000000..d8ed802 --- /dev/null +++ b/proto/source/mcastrcv.cpp @@ -0,0 +1,238 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +void outDebug(const String &string); +void mcastsnd(int destPort,String destIP,Array &message,int frequency,int ttl=1); +void mcastrcv(int destPort,String rcvIPAddress,int ttl=1); + +int main(int argc,char **argv) +{ + Internet internet; + HTTPConnection http; + HTTPHeader httpHeader; + HTTPData httpData; + + if(!internet.open())return 0; + if(!http.connect(internet,"io"))return 0; +// if(!http.getPage("//album//index.html",httpHeader,pageData))return 0; +// if(!http.get("//engineer//engineer.zip",httpHeader,httpData))return 0; +// File outFile("c:\\engineer.zip","wb"); +// outFile.write(&httpData[0],httpData.size()); + + HTTPHeader formHeader; + + + formHeader.setContentType("application/x-www-form-urlencoded"); + httpData="?mailid=10237"; + + http.get("mailclient/servlet/ReadMailServlet?mailid=10237",formHeader,httpData); + File outFile("c:\\mail.txt","wb"); + outFile.write(&httpData[0],httpData.size()); + outFile.close(); + +// File outFile("c:\\mail.txt","wb"); +// outFile.write(&httpData[0],httpData.size()); +// http.post("mailclient/servlet/ReadMailServlet",formHeader,httpData); + + formHeader.setContentType("application/x-www-form-urlencoded"); + httpData="?mailid=10237"; + +// http.post("mailclient/servlet/ReadMailServlet",formHeader,httpData); + + +// ::OutputDebugString(httpData); + ::OutputDebugString("Connected."); + return 1; +} + +/* + +void main(int argc,char **argv) +{ + String strOp; + String strIPAddress; + String strPort; + String strData; + String strFrequency="1000"; + Array message; + + outDebug("MCAST 1.00 - Sean Kessler."); + if(1==argc) + { + outDebug("USAGE: mcast send|receive address:port {frequency (ms)} {stringdata}"); + outDebug("(ie) mcast send 234.5.6.7:4567 1000 hello"); + return; + } + strOp=argv[1]; + strOp.lower(); + strIPAddress=String(argv[2]).betweenString(0,':'); + strPort=String(argv[2]).betweenString(':',0); + if(5==argc)strData=argv[4]; + else strData="hello world"; + if(argc>=4)strFrequency=argv[3]; + message.size(strData.length()+1); + ::memset(&message[0],0,message.size()); + ::strcpy((char*)&message[0],strData.str()); + outDebug(String("mode=")+strOp); + outDebug(String("address=")+strIPAddress); + outDebug(String("port=")+strPort); + if(strOp=="send")mcastsnd(strPort.toInt(),strIPAddress,message,strFrequency.toInt()); + else if(strOp=="receive")mcastrcv(strPort.toInt(),strIPAddress); + else outDebug("USAGE: mcast send|receive address:port"); +} + +void mcastrcv(int destPort,String rcvIPAddress,int ttl) +{ + WSASystem wsaSystem; + SocketAddress socketAddressLocal; + SocketAddress socketAddressTo; + SocketAddress socketAddressFrom; + IPMReq ipMCast; + Socket socket; + + outDebug("Socket create."); + if(!socket.create(Socket::DomainInternet,Socket::SocketDGram,Socket::ProtocolNone)) + { + outDebug("Socket creation failed."); + return; + } + if(!socket.reuseAddress(true)) + { + outDebug("Error setting option REUSEADDR."); + socket.destroy(); + return; + } + outDebug("Socket created."); + socketAddressLocal.family(AF_INET); + socketAddressLocal.internetAddress(InternetAddress()); + socketAddressLocal.port(htons(destPort)); + outDebug(String("Socket bind to ")+socketAddressLocal.toString()); + if(!socket.bind(socketAddressLocal)) + { + outDebug("Bind failed."); + socket.destroy(); + return; + } + outDebug("Socket is bound."); + if(!socket.setMulticastTTL(ttl)) + { + outDebug("[Error setting option SET_MULTICAST_TTL.]"); + socket.destroy(); + return; + } + ipMCast.multicastAddress(InternetAddress(rcvIPAddress)); + ipMCast.localAddress(InternetAddress()); + outDebug(String("Add membership ")+ipMCast.toString()); + if(!socket.addMembership(ipMCast)) + { + int error=WSAGetLastError(); + outDebug(String("[Error setting option ADDMEMBERSHIP.] Code=")+String().fromInt(error)); + socket.destroy(); + return; + } + outDebug(String("Joined ")+InternetAddress(rcvIPAddress).toString()); + if(!socket.setMulticastLoopback(false)) + { + int error=WSAGetLastError(); + outDebug(String("[Error setting option MULTICASTLOOPBACK.] Code=")+String().fromInt(error)); + } + outDebug(String("Loopback is disabled.")); + outDebug("Listening for messages..."); + while(true) + { + char buffer[1024]; + INETSocketAddress from; + if(!socket.receiveFrom(buffer,sizeof(buffer),0,from)) + { + outDebug("Receive Failed."); + socket.destroy(); + return; + } + else + { + SystemTime sysTime; + outDebug(String("[")+sysTime.toString()+String("]")+String("Received from [")+from.toString()+String("] \"")+String(buffer)+String("\"")); + } + } + socket.destroy(); +} + +void mcastsnd(int destPort,String destIPAddress,Array &message,int frequency,int ttl) +{ + WSASystem wsaSystem; + SocketAddress socketAddressLocal; + Socket socket; + + if(!socket.create(Socket::DomainInternet,Socket::SocketDGram,Socket::ProtocolNone)) + { + outDebug("[Socket creation failed]"); + return; + } + if(!socket.reuseAddress(true)) + { + outDebug("[Error setting option REUSEADDR.]"); + socket.destroy(); + return; + } + outDebug("Socket created."); + socketAddressLocal.family(AF_INET); + socketAddressLocal.internetAddress(InternetAddress()); + socketAddressLocal.port(htons(0)); + if(!socket.bind(socketAddressLocal)) + { + outDebug("Bind failed."); + socket.destroy(); + return; + } + outDebug("Socket is bound."); + if(!socket.setMulticastTTL(ttl)) + { + outDebug("[Error setting option SET_MULTICAST_TTL.]"); + socket.destroy(); + return; + } + INETSocketAddress inetSocketAddress; + inetSocketAddress.family(AF_INET); + inetSocketAddress.port(destPort); + inetSocketAddress.internetAddress(InternetAddress(destIPAddress)); + while(true) + { + if(!socket.sendTo((void*)&message[0],message.size(),inetSocketAddress)) + { + outDebug("Send Failed."); + socket.destroy(); + return; + } + else + { + SystemTime sysTime; + outDebug(sysTime.toString()+"Data sent."); + } + ::Sleep(frequency); + } + socket.destroy(); +} + +void outDebug(const String &string) +{ + String outString(string+String("\n")); + cout << ((String&)string).str() << endl; + ::OutputDebugString(outString.str()); +} + +*/ \ No newline at end of file diff --git a/proto/source/mcastsnd.cpp b/proto/source/mcastsnd.cpp new file mode 100644 index 0000000..fa3adc0 --- /dev/null +++ b/proto/source/mcastsnd.cpp @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include + +#define DEST_PORT 4567 +#define SOURCE_PORT 0 +#define DEST_IP_ADDRESS "234.5.6.7" + +void outDebug(const String &string); + +void main(int argc,char **argv) +{ + WSASystem wsaSystem; + SocketAddress socketAddressLocal; + Socket socket; + + if(!socket.create(Socket::DomainInternet,Socket::SocketDGram,Socket::ProtocolNone)) + { + outDebug("[Socket creation failed]"); + return; + } + if(!socket.reuseAddress(true)) + { + outDebug("[Error setting option REUSEADDR.]"); + socket.destroy(); + return; + } + outDebug("Socket created."); + socketAddressLocal.family(AF_INET); + socketAddressLocal.internetAddress(InternetAddress()); + socketAddressLocal.port(htons(SOURCE_PORT)); + if(!socket.bind(socketAddressLocal)) + { + outDebug("Bind failed."); + socket.destroy(); + return; + } + outDebug("Socket is bound."); + if(!socket.setMulticastTTL(2)) + { + outDebug("[Error setting option SET_MULTICAST_TTL.]"); + socket.destroy(); + return; + } + INETSocketAddress inetSocketAddress; + inetSocketAddress.family(AF_INET); + inetSocketAddress.port(htons(DEST_PORT)); + inetSocketAddress.internetAddress(InternetAddress(DEST_IP_ADDRESS)); + String strSend("Multicast Data"); + while(true) + { + if(!socket.sendTo(strSend.str(),strSend.length(),inetSocketAddress)) + { + outDebug("Send Failed."); + socket.destroy(); + return; + } + else + { + outDebug("Data sent."); + } + ::Sleep(10000); + } + socket.destroy(); +} + + +void outDebug(const String &string) +{ + String outString(string+String("\n")); + cout << ((String&)string).str() << endl; + ::OutputDebugString(outString.str()); +} diff --git a/proto/source/note.hpp b/proto/source/note.hpp new file mode 100644 index 0000000..32ae587 --- /dev/null +++ b/proto/source/note.hpp @@ -0,0 +1,201 @@ +#ifndef _PROTO_NOTE_HPP_ +#define _PROTO_NOTE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Note +{ +public: + typedef enum NoteType{A,ASh,B,C,CSh,D,DSh,E,F,FSh,G,GSh}; + typedef enum Step{HalfStep=1,FullStep=2}; + Note(); + Note(const Note &pureNote); + Note(NoteType note); + virtual ~Note(); + Note &operator=(const Note ¬e); + bool operator==(const Note ¬e)const; + bool operator<(const Note ¬e)const; + bool operator>(const Note ¬e)const; + const Note &operator++(); // increment by half step + const Note &operator--(); // decrement by half step + Note operator++(int postFixDummy); // postfix increment by half step + Note operator--(int postFixDummy); // postfix decrement by half step + const Note &operator+=(Step step); // increment by step + const Note &operator-=(Step step); // decrement by step + NoteType getNote(void)const; + void setNote(NoteType noteType); + int getOctave(void)const; + void setOctave(int octave); + String toString(void)const; + String toStringWithOctave(void)const; +private: + int mNote; + int mOctave; +}; + +inline +Note::Note() +: mNote(A), mOctave(0) +{ +} + +inline +Note::Note(NoteType note) +: mNote(note), mOctave(0) +{ +} + +inline +Note::Note(const Note &pureNote) +{ + *this=pureNote; +} + +inline +Note::~Note() +{ +} + +inline +Note &Note::operator=(const Note ¬e) +{ + setNote(note.getNote()); + return *this; +} + +inline +bool Note::operator==(const Note ¬e)const +{ + return mNote==note.mNote; +} + +inline +bool Note::operator<(const Note ¬e)const +{ + return mNote(const Note ¬e)const +{ + return mNote>note.mNote; +} + +inline +const Note &Note::operator++() // add half step +{ + mNote++; + if(mNote>GSh) + { + mNote=A; + mOctave++; + } + return *this; +} + +inline +const Note &Note::operator--() // add half step +{ + mNote--; + if(mNoteGSh) + { + mNote=A+(mNote-GSh)-1; + mOctave++; + } + return *this; +} + +inline +const Note &Note::operator-=(Step step) +{ + if(HalfStep==step)return --(*this); + mNote-=step; + if(mNote +#endif + +class Options +{ +public: + Options(void); + Options(const Options &options); + virtual ~Options(); + int getQuality(void)const; + void setQuality(int quality); + const String &getInputPath(void)const; + void setInputPath(const String &strInputPath); + const String &getOutputPath(void)const; + void setOutputPath(const String &strOuputPath); + int getImageWidth(void)const; + void setImageWidth(int imageWidth); + int getThumbnailWidth(void)const; + void setThumbnailWidth(int thumbnailWidth); + bool getHelp(void)const; + void setHelp(bool help); + Options &operator=(const Options &options); +private: + int mQuality; + int mThumbnailWidth; + int mImageWidth; + String mInputPath; + String mOutputPath; + bool mHelp; +}; + +inline +Options::Options(void) +: mQuality(100), mThumbnailWidth(220), mImageWidth(640), mHelp(false) +{ +} + +inline +Options::Options(const Options &options) +{ + *this=options; +} + +inline +Options::~Options() +{ +} + +inline +Options &Options::operator=(const Options &options) +{ + setQuality(options.getQuality()); + setInputPath(options.getInputPath()); + setOutputPath(options.getOutputPath()); + setImageWidth(options.getImageWidth()); + setThumbnailWidth(options.getThumbnailWidth()); + return *this; +} + +inline +int Options::getQuality(void)const +{ + return mQuality; +} + +inline +void Options::setQuality(int quality) +{ + mQuality=quality; +} + +inline +const String &Options::getInputPath(void)const +{ + return mInputPath; +} + +inline +void Options::setInputPath(const String &strInputPath) +{ + mInputPath=strInputPath; +} + +inline +const String &Options::getOutputPath(void)const +{ + return mOutputPath; +} + +inline +void Options::setOutputPath(const String &strOutputPath) +{ + mOutputPath=strOutputPath; +} + +inline +int Options::getImageWidth(void)const +{ + return mImageWidth; +} + +inline +void Options::setImageWidth(int imageWidth) +{ + mImageWidth=imageWidth; +} + +inline +int Options::getThumbnailWidth(void)const +{ + return mThumbnailWidth; +} + +inline +void Options::setThumbnailWidth(int thumbnailWidth) +{ + mThumbnailWidth=thumbnailWidth; +} + +inline +bool Options::getHelp(void)const +{ + return mHelp; +} + +inline +void Options::setHelp(bool help) +{ + mHelp=help; +} +#endif diff --git a/proto/source/patch.cpp b/proto/source/patch.cpp new file mode 100644 index 0000000..4a42624 --- /dev/null +++ b/proto/source/patch.cpp @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include + +void outDebug(const String &string); +void dump(char *buff,int size); +void patch(void); + +void main(int argc,char **argv) +{ + patch(); +} + +void patch(void) +{ + unsigned char signature[]={0x6A,0x6C,0x6A,0x01,0x9A}; + unsigned char patchbytes[]={0x6A,0x6C,0x6A,0x00,0x9A}; + +// ALREADY PATCHED +// unsigned char signature[]={0xB8,0x00,0x00,0x0B,0x46,0xFA,0x50,0x9A}; +// unsigned char patchbytes[]={0xB8,0x00,0x00,0x90,0x90,0x90,0x50,0x9A}; +// unsigned char signature[]={0x6A,0x65,0x6A,0x01,0x9A}; +// unsigned char patchbytes[]={0x6A,0x65,0x6A,0x00,0x9A}; + + unsigned char byte; + int index=0; + int occurrence=0; + int pos=0; + bool modify=true; + + File ioFile("d:\\program files\\jamwin\\jammerw.exe","r+b"); + if(!ioFile.isOkay())return; + while(true) + { + if(!index)pos=ioFile.tell(); + if(!ioFile.read(byte))break; + if(byte==signature[index]) + { + index++; + } + else index=0; + if(index==sizeof(signature)) + { + if(modify) + { + int savePos=ioFile.tell(); + ioFile.seek(pos); + ioFile.write(patchbytes,sizeof(patchbytes)); + ioFile.seek(savePos); + } + occurrence++; + index=0; + } + } + outDebug(String("Found ")+String().fromInt(occurrence)+String(" occurrences.")); + if(!modify)outDebug("No changes made because modify=false"); +} + +void dump(char *buff,int size) +{ + String outLine; + String item; + + for(int index=0;index +#include +#include +#include + +bool PureImage::draw(PureDevice &pureDevice) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(0,0,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool PureImage::draw(PureDevice &pureDevice,int xSrc,int ySrc) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(xSrc,ySrc,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool PureImage::draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(dstRect,compatibleDevice,srcPoint); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool PureImage::stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.stretchBlt(Rect(xyPoint.x(),xyPoint.y(),strwidth,strheight),compatibleDevice,Rect(0,0,width(),height())); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return FALSE; +} + +bool PureImage::resample(PureDevice &pureDevice,int newWidth) +{ + Array rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + float heightFactor; + float aspectRatio; + int newHeight; + + newWidth-=(newWidth%4); // align the width on DWORD boundary + if(!isOkay())return false; + aspectRatio=(float)width()/(float)height(); + newHeight=(float)newWidth/aspectRatio; + heightFactor=(float)newHeight/height(); + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(int((float)getBitmapInfo().height()*heightFactor)); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + tmpArray.size(bitmapInfo.width()*height()); + for(int row=0;row rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + + if(!isOkay())return false; + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(-newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + bitmapInfo.verifyDimensions(); + tmpArray.size(bitmapInfo.width()*(height()<0?-height():height())); + for(int row=0;row rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + + if(!getRGBArray().size())return false; + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(-newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + bitmapInfo.verifyDimensions(); + tmpArray.size(bitmapInfo.width()*(height()<0?-height():height())); + for(int row=0;row &rawData) +{ + return RawImage::getRawData(rawData); +} + +bool PureImage::setRawData(GlobalData &rawData,PureDevice &pureDevice) +{ + destroy(); + if(!RawImage::setRawData(rawData))return false; + mhBitmap=::CreateDIBitmap((HDC)pureDevice,(BITMAPINFOHEADER*)getBitmapInfo(),CBM_INIT,&getRGBArray()[0],(BITMAPINFO*)getBitmapInfo(),DIB_RGB_COLORS); + return true; +} + diff --git a/proto/source/pureimg.hpp b/proto/source/pureimg.hpp new file mode 100644 index 0000000..0686d32 --- /dev/null +++ b/proto/source/pureimg.hpp @@ -0,0 +1,121 @@ +#ifndef _REMOTEPSAPP_JPGIMAGE_HPP_ +#define _REMOTEPSAPP_JPGIMAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_RGB888_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_RAWIMAGE_HPP_ +#include +#endif + +class String; +class PureDevice; +class RGB888; + +class PureImage : public RawImage +{ +public: + PureImage(void); + virtual ~PureImage(); + bool draw(PureDevice &pureDevice); + bool draw(PureDevice &pureDevice,int xSrc,int ySrc); + bool draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + bool stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight); + bool resample(PureDevice &pureDevice,int width); + bool resample(PureDevice &pureDevice,int newWidth,int newHeight); + bool resample(int newWidth,int newHeight); + DWORD memoryUsage(void)const; + bool isOkay(void)const; + int width(void)const; + int height(void)const; + bool getRawData(GlobalData &rawData); + bool setRawData(GlobalData &rawData,PureDevice &pureDevice); + bool setRawData(GlobalData &rawData); + bool getAt(DWORD row,DWORD col,RGB888 &rgb888)const; +private: + PureImage(const PureImage &somePureImage); + PureImage &operator=(const PureImage &somePureImage); + void destroy(void); + + HBITMAP mhBitmap; +}; + +inline +PureImage::PureImage(void) +: mhBitmap(0) +{ +} + +inline +PureImage::PureImage(const PureImage &somePureImage) +: mhBitmap(0) +{ // private implementation + *this=somePureImage; +} + +inline +PureImage &PureImage::operator=(const PureImage &somePureImage) +{ // private implementation + return *this; +} + +inline +PureImage::~PureImage() +{ + destroy(); +} + +inline +int PureImage::width(void)const +{ + return getBitmapInfo().width(); +} + +inline +int PureImage::height(void)const +{ + if(getBitmapInfo().height()<0)return -getBitmapInfo().height(); + return getBitmapInfo().height(); +} + +inline +bool PureImage::getAt(DWORD row,DWORD col,RGB888 &rgb888)const +{ + return RawImage::getAt(row,col,rgb888); +} + +inline +bool PureImage::isOkay(void)const +{ + return mhBitmap?TRUE:FALSE; +} + +inline +void PureImage::destroy(void) +{ + if(!mhBitmap)return; + ::DeleteObject(mhBitmap); + mhBitmap=0; +} + +inline +DWORD PureImage::memoryUsage(void)const +{ + return RawImage::memoryUsage(); +} + +inline +bool PureImage::setRawData(GlobalData &rawData) +{ + destroy(); + return RawImage::setRawData(rawData); +} +#endif diff --git a/proto/source/rawimg.cpp b/proto/source/rawimg.cpp new file mode 100644 index 0000000..c85b1f7 --- /dev/null +++ b/proto/source/rawimg.cpp @@ -0,0 +1,20 @@ +#include +#include + +bool RawImage::getRawData(GlobalData &rawData) +{ + if(!isOkay())return false; + rawData.size(sizeof(BITMAPINFO)+(mRGBArray.size()*sizeof(RGB888))); + ::memcpy((BYTE*)&rawData[0],(BITMAPINFO*)mBitmapInfo,sizeof(BITMAPINFO)); + ::memcpy(((BYTE*)&rawData[0])+sizeof(BITMAPINFO),(BYTE*)&mRGBArray[0],mRGBArray.size()*sizeof(RGB888)); + return true; +} + +bool RawImage::setRawData(GlobalData &rawData) +{ + if(!rawData.size())return false; + ::memcpy((BYTE*)(BITMAPINFO*)mBitmapInfo,(BYTE*)&rawData[0],sizeof(BITMAPINFO)); + mRGBArray.size((rawData.size()-sizeof(BITMAPINFO))/sizeof(RGB888)); + ::memcpy((BYTE*)&mRGBArray[0],((BYTE*)&rawData[0])+sizeof(BITMAPINFO),rawData.size()-sizeof(BITMAPINFO)); + return true; +} diff --git a/proto/source/rawimg.hpp b/proto/source/rawimg.hpp new file mode 100644 index 0000000..6e7ca5b --- /dev/null +++ b/proto/source/rawimg.hpp @@ -0,0 +1,119 @@ +#ifndef _REMOTEPSAPP_RAWIMAGE_HPP_ +#define _REMOTEPSAPP_RAWIMAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_RGB888_HPP_ +#include +#endif + +class RawImage +{ +public: + class RawImageInvalidImage{}; + RawImage(void); + virtual ~RawImage(); + DWORD memoryUsage(void)const; + int width(void)const; + int height(void)const; + bool getRawData(GlobalData &rawData); + bool setRawData(GlobalData &rawData); + bool getAt(DWORD row,DWORD col,RGB888 &rgb888)const; + Array &getRGBArray(void); + BitmapInfo &getBitmapInfo(void); + const BitmapInfo &getBitmapInfo(void)const; + bool isOkay(void)const; +private: + RawImage(const RawImage &someRawImage); + RawImage &operator=(const RawImage &someRawImage); + + BitmapInfo mBitmapInfo; + Array mRGBArray; +}; + +inline +RawImage::RawImage(void) +{ +} + +inline +RawImage::RawImage(const RawImage &someRawImage) +{ // private implementation + *this=someRawImage; +} + +inline +RawImage &RawImage::operator=(const RawImage &someRawImage) +{ // private implementation + return *this; +} + +inline +RawImage::~RawImage() +{ +} + +inline +int RawImage::width(void)const +{ + return mBitmapInfo.width(); +} + +inline +int RawImage::height(void)const +{ + if(mBitmapInfo.height()<0)return -mBitmapInfo.height(); + return mBitmapInfo.height(); +} + +inline +Array &RawImage::getRGBArray(void) +{ + return mRGBArray; +} + +inline +BitmapInfo &RawImage::getBitmapInfo(void) +{ + return mBitmapInfo; +} + +inline +const BitmapInfo &RawImage::getBitmapInfo(void)const +{ + return mBitmapInfo; +} + +inline +bool RawImage::getAt(DWORD row,DWORD col,RGB888 &rgb888)const +{ + if(!isOkay())return false; + if(mBitmapInfo.height()<0)rgb888=((Array&)mRGBArray)[row*width()+col]; + else rgb888=((Array&)mRGBArray)[(mBitmapInfo.width()*(-mBitmapInfo.height()))-(((row*mBitmapInfo.width())+mBitmapInfo.width()))+col]; + return true; +} + +inline +DWORD RawImage::memoryUsage(void)const +{ + return mRGBArray.size()*sizeof(RGB888); +} + +inline +bool RawImage::isOkay(void)const +{ + return mRGBArray.size()?true:false; +} +#endif \ No newline at end of file diff --git a/proto/source/request.hpp b/proto/source/request.hpp new file mode 100644 index 0000000..407f28b --- /dev/null +++ b/proto/source/request.hpp @@ -0,0 +1,101 @@ +#ifndef _PROTO_HTTPREQUEST_HPP_ +#define _PROTO_HTTPREQUEST_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _PROTO_CONNECTION_HPP_ +#include +#endif + +class HttpRequest +{ +public: + HttpRequest(); + virtual ~HttpRequest(); + bool get(const Connection &connection,const String &object,Array &rawData); + bool getRawData(Array &rawData); + DWORD sizeHeaders(void); + void close(void); + bool isOkay(void)const; + HINTERNET getHANDLE(void)const; +private: + bool send(void); + HINTERNET mhRequest; +}; + +inline +HttpRequest::HttpRequest() +: mhRequest(0) +{ +} + +inline +HttpRequest::~HttpRequest() +{ + close(); +} + +inline +bool HttpRequest::get(const Connection &connection,const String &object,Array &rawData) +{ + char *accessTypes[2]={"*/*",0}; + if(!connection.isOkay())return false; + close(); + mhRequest=::HttpOpenRequest(connection.getHANDLE(),String("GET"),object.str(),HTTP_VERSION,NULL,(LPCSTR*)accessTypes,INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE,0); + if(!isOkay())return false; + if(!send())return false; + return getRawData(rawData); + return true; +} + +inline +bool HttpRequest::send(void) +{ + if(!isOkay())return false; + return ::HttpSendRequest(getHANDLE(),NULL,0,NULL,0); +} + +inline +bool HttpRequest::getRawData(Array &rawData) +{ + DWORD dwSize; + if(!isOkay())return false; + rawData.size(sizeHeaders()); + if(!rawData.size())return false; + dwSize=rawData.size(); + if(!::HttpQueryInfo(getHANDLE(),HTTP_QUERY_RAW_HEADERS_CRLF,&rawData[0],&dwSize,NULL))return false; + return true; +} + +inline +DWORD HttpRequest::sizeHeaders(void) +{ + DWORD dwSize(0); + if(!isOkay())return dwSize; + ::HttpQueryInfo(getHANDLE(),HTTP_QUERY_RAW_HEADERS_CRLF,NULL,&dwSize,NULL); + return dwSize; +} + +inline +void HttpRequest::close(void) +{ + if(!isOkay())return; + ::InternetCloseHandle(mhRequest); + mhRequest=0; +} + +inline +HINTERNET HttpRequest::getHANDLE(void)const +{ + return mhRequest; +} + +inline +bool HttpRequest::isOkay(void)const +{ + return mhRequest?true:false; +} +#endif diff --git a/proto/source/rgb555.hpp b/proto/source/rgb555.hpp new file mode 100644 index 0000000..638b414 --- /dev/null +++ b/proto/source/rgb555.hpp @@ -0,0 +1,110 @@ +#ifndef _PROTO_RGB555_HPP_ +#define _PROTO_RGB555_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class RGB555 +{ +public: + RGB555(void); + RGB555(const RGB555 &someRGB555); + RGB555(BYTE red,BYTE green,BYTE blue); + ~RGB555(); // the destructor cannot be virtual + RGB555 &operator=(const RGB555 &someRGB555); + BOOL operator==(const RGB555 &someRGB555); + BYTE red(void)const; + void red(BYTE red); + BYTE green(void)const; + void green(BYTE green); + BYTE blue(void)const; + void blue(BYTE blue); +private: + typedef struct tagBitFields + { + unsigned short Red : 5; + unsigned short Green : 5; + unsigned short Blue : 5; + unsigned short Filler : 1; + }RGBCOLOR; + RGBCOLOR mRGBColor; +}; + +inline +RGB555::RGB555(void) +{ + red(0); + green(0); + blue(0); +} + +inline +RGB555::RGB555(BYTE red,BYTE green,BYTE blue) +{ + RGB555::red(red); + RGB555::green(green); + RGB555::blue(blue); +} + +inline +RGB555::RGB555(const RGB555 &someRGB555) +{ + *this=someRGB555; +} + +inline +RGB555::~RGB555() +{ +} + +inline +RGB555 &RGB555::operator=(const RGB555 &someRGB555) +{ + red(someRGB555.red()); + green(someRGB555.green()); + blue(someRGB555.blue()); + return *this; +} + +inline +BOOL RGB555::operator==(const RGB555 &someRGB555) +{ + return red()==someRGB555.red()&&green()==someRGB555.green()&&blue()==someRGB555.blue(); +} + +inline +BYTE RGB555::red(void)const +{ + return mRGBColor.Red; +} + +inline +void RGB555::red(BYTE red) +{ + mRGBColor.Red=red; +} + +inline +BYTE RGB555::green(void)const +{ + return mRGBColor.Green; +} + +inline +void RGB555::green(BYTE green) +{ + mRGBColor.Green=green; +} + +inline +BYTE RGB555::blue(void)const +{ + return mRGBColor.Blue; +} + +inline +void RGB555::blue(BYTE blue) +{ + mRGBColor.Blue=blue; +} +#endif diff --git a/proto/source/sockaddr.hpp b/proto/source/sockaddr.hpp new file mode 100644 index 0000000..698fd7b --- /dev/null +++ b/proto/source/sockaddr.hpp @@ -0,0 +1,84 @@ +#ifndef _SOCKET_SOCKETADDRESS_HPP_ +#define _SOCKET_SOCKETADDRESS_HPP_ +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif +#ifndef _SOCKET_INTERNETADDRESS_HPP_ +#include +#endif + +class SocketAddress : private sockaddr_in +{ +public: + SocketAddress(); + virtual ~SocketAddress(); + short family(void)const; + void family(short family); + unsigned short port(void)const; + void port(unsigned short port); + InternetAddress internetAddress(void)const; + void internetAddress(const InternetAddress &internetAddress); +private: + void setZero(void); +}; + +inline +SocketAddress::SocketAddress() +{ + setZero(); +} + +inline +SocketAddress::~SocketAddress() +{ +} + +inline +short SocketAddress::family(void)const +{ + return sockaddr_in::sin_family; +} + +inline +void SocketAddress::family(short family) +{ + sockaddr_in::sin_family=family; +} + +inline +unsigned short SocketAddress::port(void)const +{ + return ntohs(sockaddr_in::sin_port); +} + +inline +void SocketAddress::port(unsigned short port) +{ + sockaddr_in::sin_port=htons(port); +} + +inline +InternetAddress SocketAddress::internetAddress(void)const +{ + return InternetAddress(sockaddr_in::sin_addr); +} + +inline +void SocketAddress::internetAddress(const InternetAddress &internetAddress) +{ + sockaddr_in::sin_addr.S_un.S_un_b.s_b1=internetAddress.b1(); + sockaddr_in::sin_addr.S_un.S_un_b.s_b2=internetAddress.b2(); + sockaddr_in::sin_addr.S_un.S_un_b.s_b3=internetAddress.b3(); + sockaddr_in::sin_addr.S_un.S_un_b.s_b4=internetAddress.b4(); +} + +inline +void SocketAddress::setZero(void) +{ + family(0); + port(0); + internetAddress(InternetAddress()); +} +#endif + + diff --git a/proto/source/toolbar.bmp b/proto/source/toolbar.bmp new file mode 100644 index 0000000..f4a8c88 Binary files /dev/null and b/proto/source/toolbar.bmp differ diff --git a/proto/table.txt b/proto/table.txt new file mode 100644 index 0000000..7b126c6 --- /dev/null +++ b/proto/table.txt @@ -0,0 +1,105 @@ +trade_date smalldatetime 4 0 +trade_date_txt varchar 10 1 +portfolio varchar 35 0 +sub_portfolio varchar 35 0 +ticker varchar 25 0 +ticker_desc varchar 60 1 +uticker varchar 25 1 +instrument varchar 3 0 +mkt_cap decimal 13 1 +wgt_ave decimal 9 1 +volume decimal 13 1 +contract_size decimal 9 1 +hedge_index varchar 4 1 +hedge_sector varchar 4 1 +area varchar 6 1 +area_sector varchar 6 1 +[close] decimal 9 1 +y_close decimal 9 1 +uticker_close decimal 9 1 +y_uticker_close decimal 9 1 +delta decimal 9 1 +y_delta decimal 9 1 +days_expire int 4 1 +strike_price decimal 9 1 +hedge_beta decimal 5 1 +area_beta decimal 5 1 +sector_beta decimal 5 1 +group_beta decimal 5 1 +qty decimal 9 0 +y_qty decimal 9 0 +qty_change decimal 9 1 +hedge_close decimal 9 1 +hedge_perc decimal 9 1 +area_close decimal 9 1 +area_perc decimal 9 1 +sector_close decimal 9 1 +sector_perc decimal 9 1 +mkt_value decimal 13 1 +y_mkt_value decimal 13 1 +pnl decimal 13 1 +exposure decimal 13 1 +y_exposure decimal 13 1 +hb_exposure decimal 13 1 +y_hb_exposure decimal 13 1 +ab_exposure decimal 13 1 +y_ab_exposure decimal 13 1 +sb_exposure decimal 13 1 +y_sb_exposure decimal 13 1 +area_pnl_amt decimal 13 1 +sector_pnl_amt decimal 13 1 +pnl_perc decimal 13 1 +price_change decimal 13 1 +price_change_perc decimal 13 1 +price_change_amt decimal 13 1 +sector_alpha_perc decimal 13 1 +group_alpha_perc decimal 13 1 +area_alpha_perc decimal 13 1 +sector_alpha_amt decimal 13 1 +group_alpha_amt decimal 13 1 +area_alpha_amt decimal 13 1 +ab_return_amt decimal 13 1 +ab_return_perc decimal 13 1 +intraday_perc decimal 13 1 +intraday_amt decimal 13 1 +optionality_amt decimal 13 1 +optionality_perc decimal 13 1 +currency varchar 5 1 +base_close decimal 9 1 +y_base_close decimal 9 1 +fx_perc decimal 9 1 +fx_amt decimal 9 1 +fx_rate decimal 9 1 +y_fx_rate decimal 9 1 +alt_index_return_perc decimal 13 1 +alt_index_return_amt decimal 13 1 +index_beta_adj_perc decimal 13 1 +index_beta_adj_amt decimal 13 1 +vwap decimal 13 1 +vwap_pnl decimal 13 1 +hedge_alpha_amt decimal 13 1 +exposure_view varchar 5 1 +market_view varchar 5 1 +call_put varchar 4 1 +[month] varchar 4 1 +private bit 1 1 +ipo bit 1 1 +ratio decimal 9 1 +source varchar 10 1 +go_around smalldatetime 4 1 +adh decimal 13 1 +aac decimal 13 1 +azap float 8 1 +exported bit 1 1 +hedge_alpha_perc decimal 13 1 +alpha_go_around decimal 13 1 +alpha_real decimal 13 1 +alpha_unreal decimal 13 1 +pnl_real decimal 13 1 +pnl_unreal decimal 13 1 +cash_flow decimal 13 1 +beta_cash_flow decimal 13 1 +last_trade_date smalldatetime 4 1 +last_trade_qty decimal 9 1 +enterprise_value decimal 13 1 +associate nvarchar 30 1 \ No newline at end of file diff --git a/psapint/PROCID.HPP b/psapint/PROCID.HPP new file mode 100644 index 0000000..a1c73b9 --- /dev/null +++ b/psapint/PROCID.HPP @@ -0,0 +1,90 @@ +#ifndef _PSAPINT_PROCESSID_HPP_ +#define _PSAPINT_PROCESSID_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class ProcessID; +typedef Array ProcessIDList; + +class ProcessID +{ +public: + ProcessID(void); + ProcessID(const ProcessID &someProcessID); + ProcessID(DWORD processID); + virtual ~ProcessID(); + ProcessID &operator=(const ProcessID &someProcessID); + bool operator==(const ProcessID &someProcessID)const; + DWORD processID(void)const; + void processID(DWORD processID); + String toString(void)const; +private: + DWORD mProcessID; +}; + +inline +ProcessID::ProcessID(void) +: mProcessID(0) +{ +} + +inline +ProcessID::ProcessID(const ProcessID &someProcessID) +: mProcessID(someProcessID.mProcessID) +{ +} + +inline +ProcessID::ProcessID(DWORD processID) +: mProcessID(processID) +{ +} + +inline +ProcessID::~ProcessID() +{ +} + +inline +ProcessID &ProcessID::operator=(const ProcessID &someProcessID) +{ + processID(someProcessID.processID()); + return *this; +} + +inline +bool ProcessID::operator==(const ProcessID &someProcessID)const +{ + return processID()==someProcessID.processID(); +} + +inline +DWORD ProcessID::processID(void)const +{ + return mProcessID; +} + +inline +void ProcessID::processID(DWORD processID) +{ + mProcessID=processID; +} + +inline +String ProcessID::toString(void)const +{ + String strProcessID; + ::sprintf(strProcessID.str(),"%d(0x%08lx)",mProcessID,mProcessID); + return strProcessID; +} +#endif \ No newline at end of file diff --git a/psapint/PROCINFO.HPP b/psapint/PROCINFO.HPP new file mode 100644 index 0000000..8dd23df --- /dev/null +++ b/psapint/PROCINFO.HPP @@ -0,0 +1,82 @@ +#ifndef _PSAPINT_PROCINFO_HPP_ +#define _PSAPINT_PROCINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _PSAPINT_PROCESSID_HPP_ +#include +#endif +#ifndef _PSAPINT_MODULEINFO_HPP_ +#include +#endif + +class ProcessInfo; +typedef Array ProcessInfoList; + +class ProcessInfo : public ModuleInfoList +{ +public: + ProcessInfo(void); + ProcessInfo(const ProcessID &processID); + ProcessInfo(const ProcessInfo &someProcessInfo); + virtual ~ProcessInfo(); + ProcessInfo &operator=(const ProcessInfo &someProcessInfo); + bool operator==(const ProcessInfo &someProcessInfo)const; + const ProcessID &processID(void)const; + void processID(const ProcessID &processID); +private: + ProcessID mProcessID; +}; + +inline +ProcessInfo::ProcessInfo(void) +{ +} + +inline +ProcessInfo::ProcessInfo(const ProcessInfo &someProcessInfo) +: mProcessID(someProcessInfo.mProcessID), ModuleInfoList(someProcessInfo) +{ +} + +inline +ProcessInfo::ProcessInfo(const ProcessID &processID) +: mProcessID(processID) +{ +} + +inline +ProcessInfo::~ProcessInfo() +{ +} + +inline +ProcessInfo &ProcessInfo::operator=(const ProcessInfo &someProcessInfo) +{ + processID(someProcessInfo.processID()); + (ModuleInfoList &)*this=(ModuleInfoList &)someProcessInfo; + return *this; +} + +inline +bool ProcessInfo::operator==(const ProcessInfo &someProcessInfo)const +{ + return (processID()==someProcessInfo.processID()&& + (ModuleInfoList&)*this==(ModuleInfoList&)someProcessInfo); +} + +inline +const ProcessID &ProcessInfo::processID(void)const +{ + return mProcessID; +} + +inline +void ProcessInfo::processID(const ProcessID &processID) +{ + mProcessID=processID; +} +#endif \ No newline at end of file diff --git a/psapint/PSAPI.CPP b/psapint/PSAPI.CPP new file mode 100644 index 0000000..7b3a7da --- /dev/null +++ b/psapint/PSAPI.CPP @@ -0,0 +1,213 @@ +#include +#include + +ProcessAPI::ProcessAPI(void) +: mpfnEnumProcesses(0), mpfnEnumProcessModules(0), mpfnGetModuleBaseName(0), mpfnGetModuleFileNameEx(0), + mpfnGetModuleInformation(0), mpfnEmptyWorkingSet(0), mpfnQueryWorkingSet(0), + mpfnInitializeProcessForWsWatch(0), mpfnGetWsChanges(0), mpfnGetMappedFileName(0), + mpfnEnumDeviceDrivers(0), mpfnGetDeviceDriverBaseName(0), mpfnGetDeviceDriverFileName(0), + mpfnGetProcessMemoryInfo(0), mPSAPILib("PSAPI.DLL") +{ + getEntryPoints(); +} + +ProcessAPI::ProcessAPI(const ProcessAPI &someProcessAPI) +{ // private implementation + *this=someProcessAPI; +} + +ProcessAPI::~ProcessAPI() +{ +} + +ProcessAPI &ProcessAPI::operator=(const ProcessAPI &/*someProcessAPI*/) +{ // private implementation + return *this; +} + +bool ProcessAPI::enumProcesses(ProcessInfoList &processInfoList) +{ + ProcessIDList processIDList; + String strModuleBaseName; + String strModuleFileName; + + processInfoList.size(0); + enumProcesses(processIDList); + processInfoList.size(processIDList.size()); + for(int procIndex=0;procIndex +#endif +#ifndef _PSAPINT_PROCESSID_HPP_ +#include +#endif +#ifndef _PSAPINT_PROCINFO_HPP_ +#include +#endif +#ifndef _PSAPINT_PROCESSMEMORYCOUNTERS_HPP_ +#include +#endif +#ifndef _PSAPI_H_ +#include +#endif + +class ProcessAPI +{ +public: + class ProcessAPIInvalidEntryPoint{}; + ProcessAPI(void); + virtual ~ProcessAPI(); + bool enumProcesses(ProcessInfoList &processInfoList); + bool enumProcesses(ProcessIDList &processList); + bool enumProcessModules(const ProcessID &processID,ModuleInfoList &moduleInfoList); + DWORD getModuleBaseName(const ProcessID &processID,HMODULE hModule,String &strModuleBaseName); + DWORD getModuleFileName(const ProcessID &processID,HMODULE hModule,String &strModuleFileName); + bool getProcessMemoryInfo(HANDLE hProcess,ProcessMemoryCounters &processMemoryCounters); + bool isOkay(void)const; +private: + typedef BOOL (WINAPI *PFNENUMPROCESSES)(DWORD *lpidProcess,DWORD cb,DWORD *cbNeeded); + typedef BOOL (WINAPI *PFNENUMPROCESSMODULES)(HANDLE hProcess,HMODULE *lphModule,DWORD cb,LPDWORD lpcbNeeded); + typedef DWORD (WINAPI *PFNGETMODULEBASENAME)(HANDLE hProcess,HMODULE hModule,LPSTR lpBaseName,DWORD nSize); + typedef DWORD (WINAPI *PFNGETMODULEFILENAMEEX)(HANDLE hProcess,HMODULE hModule,LPSTR lpFilename,DWORD nSize); + typedef BOOL (WINAPI *PFNGETMODULEINFORMATION)(HANDLE hProcess,HMODULE hModule,LPMODULEINFO lpmodinfo,DWORD cb); + typedef BOOL (WINAPI *PFNEMPTYWORKINGSET)(HANDLE hProcess); + typedef BOOL (WINAPI *PFNQUERYWORKINGSET)(HANDLE hProcess,PVOID pv,DWORD cb); + typedef BOOL (WINAPI *PFNINITIALIZEPROCESSFORWSWATCH)(HANDLE hProcess); + typedef BOOL (WINAPI *PFNGETWSCHANGES)(HANDLE hProcess,PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,DWORD cb); + typedef DWORD (WINAPI *PFNGETMAPPEDFILENAME)(HANDLE hProcess,LPVOID lpv,LPWSTR lpFilename,DWORD nSize); + typedef DWORD (WINAPI *PFNENUMDEVICEDRIVERS)(LPVOID *lpImageBase,DWORD cb,LPDWORD lpcbNeeded); + typedef DWORD (WINAPI *PFNGETDEVICEDRIVERBASENAME)(LPVOID imageBase,LPSTR lpBaseName,DWORD nSize); + typedef DWORD (WINAPI *PFNGETDEVICEDRIVERFILENAME)(LPVOID imageBase,LPSTR lpFilename,DWORD nSize); + typedef BOOL (WINAPI *PFNGETPROCESSMEMORYINFO)(HANDLE hProcess,PPROCESS_MEMORY_COUNTERS ppsmemCounters,DWORD cb); + + ProcessAPI(const ProcessAPI &someProcessAPI); + ProcessAPI &operator=(const ProcessAPI &someProcessAPI); + bool getEntryPoints(void); + bool enumProcesses(DWORD *lpidProcess,DWORD cb,DWORD *cbNeeded); + bool enumProcessModules(HANDLE hProcess,HMODULE *lphModule,DWORD cb,LPDWORD lpcbNeeded); + DWORD getModuleBaseName(HANDLE hProcess,HMODULE hModule,LPSTR lpBaseName,DWORD nSize); + DWORD getModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPSTR lpFilename,DWORD nSize); + bool emptyWorkingSet(HANDLE hProcess); + bool queryWorkingSet(HANDLE hProcess,PVOID pv,DWORD cb); + bool initializeProcessForWsWatch(HANDLE hProcess); + bool getWsChanges(HANDLE hProcess,PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,DWORD cb); + DWORD getMappedFileName(HANDLE hProcess,LPVOID lpv,LPWSTR lpFilename,DWORD nSize); + DWORD enumDeviceDrivers(LPVOID *lpImageBase,DWORD cb,LPDWORD lpcbNeeded); + DWORD getDeviceDriverBaseName(LPVOID imageBase,LPSTR lpBaseName,DWORD nSize); + DWORD getDeviceDriverFileName(LPVOID imageBase,LPSTR lpFilename,DWORD nSize); + bool getProcessMemoryInfo(HANDLE hProcess,PPROCESS_MEMORY_COUNTERS ppsmemCounters,DWORD cb); + bool getModuleInformation(HANDLE hProcess,HMODULE hModule,LPMODULEINFO lpmodinfo,DWORD cb); + + PFNENUMPROCESSES mpfnEnumProcesses; + PFNENUMPROCESSMODULES mpfnEnumProcessModules; + PFNGETMODULEBASENAME mpfnGetModuleBaseName; + PFNGETMODULEFILENAMEEX mpfnGetModuleFileNameEx; + PFNGETMODULEINFORMATION mpfnGetModuleInformation; + PFNEMPTYWORKINGSET mpfnEmptyWorkingSet; + PFNQUERYWORKINGSET mpfnQueryWorkingSet; + PFNINITIALIZEPROCESSFORWSWATCH mpfnInitializeProcessForWsWatch; + PFNGETWSCHANGES mpfnGetWsChanges; + PFNGETMAPPEDFILENAME mpfnGetMappedFileName; + PFNENUMDEVICEDRIVERS mpfnEnumDeviceDrivers; + PFNGETDEVICEDRIVERBASENAME mpfnGetDeviceDriverBaseName; + PFNGETDEVICEDRIVERFILENAME mpfnGetDeviceDriverFileName; + PFNGETPROCESSMEMORYINFO mpfnGetProcessMemoryInfo; + Library mPSAPILib; +}; + +inline +bool ProcessAPI::getProcessMemoryInfo(HANDLE hProcess,ProcessMemoryCounters &processMemoryCounters) +{ + return getProcessMemoryInfo(hProcess,&processMemoryCounters.getPROCESSMEMORYCOUNTERS(),ProcessMemoryCounters::size()); +} +#endif \ No newline at end of file diff --git a/psapint/PSAPINT.DSW b/psapint/PSAPINT.DSW new file mode 100644 index 0000000..308f189 --- /dev/null +++ b/psapint/PSAPINT.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "psapint"=.\psapint.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/psapint/PSAPINT.OPT b/psapint/PSAPINT.OPT new file mode 100644 index 0000000..30f10d8 Binary files /dev/null and b/psapint/PSAPINT.OPT differ diff --git a/psapint/PSAPINT.PLG b/psapint/PSAPINT.PLG new file mode 100644 index 0000000..6db5206 --- /dev/null +++ b/psapint/PSAPINT.PLG @@ -0,0 +1,29 @@ + + +
+

Build Log

+

+--------------------Configuration: psapint - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP2.tmp" with contents +[ +/nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/psapint.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /c +"D:\work\psapint\psapi.cpp" +"D:\work\psapint\psapi95.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP2.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\psapint.lib" .\msvcobj\psapi.obj .\msvcobj\psapi95.obj " +

Output Window

+Compiling... +psapi.cpp +psapi95.cpp +Creating library... + + + +

Results

+psapint.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/psapint/memcnt.hpp b/psapint/memcnt.hpp new file mode 100644 index 0000000..72a1043 --- /dev/null +++ b/psapint/memcnt.hpp @@ -0,0 +1,181 @@ +#ifndef _PSAPINT_PROCESSMEMORYCOUNTERS_HPP_ +#define _PSAPINT_PROCESSMEMORYCOUNTERS_HPP_ +#ifndef _PSAPI_H_ +#include +#endif + +class ProcessMemoryCounters : private PROCESS_MEMORY_COUNTERS +{ +public: + ProcessMemoryCounters(void); + virtual ~ProcessMemoryCounters(); + DWORD pageFaultCount(void)const; + void pageFaultCount(DWORD pageFaultCount); + DWORD peakWorkingSetSize(void)const; + void peakWorkingSetSize(DWORD peakWorkingSetSize); + DWORD workingSetSize(void)const; + void workingSetSize(DWORD workingSetSize); + DWORD quotaPeakPagedPoolUsage(void)const; + void quotaPeakPagedPoolUsage(DWORD quotaPeakPagedPoolUsage); + DWORD quotaPagedPoolUsage(void)const; + void quotaPagedPoolUsage(DWORD quotaPagedPoolUsage); + DWORD quotaPeakedNonPagedPoolUsage(void)const; + void quotaPeakedNonPagedPoolUsage(DWORD quotaPeakedNonPagedPoolUsage); + DWORD quotaNonPagedPoolUsage(void)const; + void quotaNonPagedPoolUsage(DWORD quotaNonPagedPoolUsage); + DWORD pageFileUsage(void)const; + void pageFileUsage(DWORD pageFileUsage); + DWORD peakPageFileUsage(void)const; + void peakPageFileUsage(DWORD peakPageFileUsage); + PROCESS_MEMORY_COUNTERS &getPROCESSMEMORYCOUNTERS(void); + static DWORD size(void); +private: + void zeroInit(void); +}; + +inline +ProcessMemoryCounters::ProcessMemoryCounters(void) +{ + zeroInit(); +} + +inline +ProcessMemoryCounters::~ProcessMemoryCounters() +{ +} + +inline +DWORD ProcessMemoryCounters::pageFaultCount(void)const +{ + return PROCESS_MEMORY_COUNTERS::PageFaultCount; +} + +inline +void ProcessMemoryCounters::pageFaultCount(DWORD pageFaultCount) +{ + PROCESS_MEMORY_COUNTERS::PageFaultCount=pageFaultCount; +} + +inline +DWORD ProcessMemoryCounters::peakWorkingSetSize(void)const +{ + return PROCESS_MEMORY_COUNTERS::PeakWorkingSetSize; +} + +inline +void ProcessMemoryCounters::peakWorkingSetSize(DWORD peakWorkingSetSize) +{ + PROCESS_MEMORY_COUNTERS::PeakWorkingSetSize=peakWorkingSetSize; +} + +inline +DWORD ProcessMemoryCounters::workingSetSize(void)const +{ + return PROCESS_MEMORY_COUNTERS::WorkingSetSize; +} + +inline +void ProcessMemoryCounters::workingSetSize(DWORD workingSetSize) +{ + PROCESS_MEMORY_COUNTERS::WorkingSetSize=workingSetSize; +} + +inline +DWORD ProcessMemoryCounters::quotaPeakPagedPoolUsage(void)const +{ + return PROCESS_MEMORY_COUNTERS::QuotaPeakPagedPoolUsage; +} + +inline +void ProcessMemoryCounters::quotaPeakPagedPoolUsage(DWORD quotaPeakPagedPoolUsage) +{ + PROCESS_MEMORY_COUNTERS::QuotaPeakPagedPoolUsage=quotaPeakPagedPoolUsage; +} + +inline +DWORD ProcessMemoryCounters::quotaPagedPoolUsage(void)const +{ + return PROCESS_MEMORY_COUNTERS::QuotaPagedPoolUsage; +} + +inline +void ProcessMemoryCounters::quotaPagedPoolUsage(DWORD quotaPagedPoolUsage) +{ + PROCESS_MEMORY_COUNTERS::QuotaPagedPoolUsage=quotaPagedPoolUsage; +} + +inline +DWORD ProcessMemoryCounters::quotaPeakedNonPagedPoolUsage(void)const +{ + return PROCESS_MEMORY_COUNTERS::QuotaPeakNonPagedPoolUsage; +} + +inline +void ProcessMemoryCounters::quotaPeakedNonPagedPoolUsage(DWORD quotaPeakedNonPagedPoolUsage) +{ + PROCESS_MEMORY_COUNTERS::QuotaPeakNonPagedPoolUsage=quotaPeakedNonPagedPoolUsage; +} + +inline +DWORD ProcessMemoryCounters::quotaNonPagedPoolUsage(void)const +{ + return PROCESS_MEMORY_COUNTERS::QuotaNonPagedPoolUsage; +} + +inline +void ProcessMemoryCounters::quotaNonPagedPoolUsage(DWORD quotaNonPagedPoolUsage) +{ + PROCESS_MEMORY_COUNTERS::QuotaNonPagedPoolUsage=quotaNonPagedPoolUsage; +} + +inline +DWORD ProcessMemoryCounters::pageFileUsage(void)const +{ + return PROCESS_MEMORY_COUNTERS::PagefileUsage; +} + +inline +void ProcessMemoryCounters::pageFileUsage(DWORD pageFileUsage) +{ + PROCESS_MEMORY_COUNTERS::PagefileUsage=pageFileUsage; +} + +inline +DWORD ProcessMemoryCounters::peakPageFileUsage(void)const +{ + return PROCESS_MEMORY_COUNTERS::PeakPagefileUsage; +} + +inline +void ProcessMemoryCounters::peakPageFileUsage(DWORD peakPageFileUsage) +{ + PROCESS_MEMORY_COUNTERS::PeakPagefileUsage; +} + +inline +void ProcessMemoryCounters::zeroInit(void) +{ + PROCESS_MEMORY_COUNTERS::cb=size(); + PROCESS_MEMORY_COUNTERS::PageFaultCount=0; + PROCESS_MEMORY_COUNTERS::PeakWorkingSetSize=0; + PROCESS_MEMORY_COUNTERS::WorkingSetSize=0; + PROCESS_MEMORY_COUNTERS::QuotaPeakPagedPoolUsage=0; + PROCESS_MEMORY_COUNTERS::QuotaPagedPoolUsage=0; + PROCESS_MEMORY_COUNTERS::QuotaPeakNonPagedPoolUsage=0; + PROCESS_MEMORY_COUNTERS::QuotaNonPagedPoolUsage=0; + PROCESS_MEMORY_COUNTERS::PagefileUsage=0; + PROCESS_MEMORY_COUNTERS::PeakPagefileUsage=0; +} + +inline +PROCESS_MEMORY_COUNTERS &ProcessMemoryCounters::getPROCESSMEMORYCOUNTERS(void) +{ + return *this; +} + +inline +DWORD ProcessMemoryCounters::size(void) +{ + return sizeof(PROCESS_MEMORY_COUNTERS); +} +#endif diff --git a/psapint/modentry.hpp b/psapint/modentry.hpp new file mode 100644 index 0000000..773e12f --- /dev/null +++ b/psapint/modentry.hpp @@ -0,0 +1,174 @@ +#ifndef _PSAPINT_MODENTRY_HPP_ +#define _PSAPINT_MODENTRY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_TOOLHELP32_HPP_ +#include +#endif + +class ModuleEntry : private MODULEENTRY32 +{ +public: + ModuleEntry(void); + virtual ~ModuleEntry(); + DWORD moduleID(void)const; + void moduleID(DWORD moduleID); + DWORD processID(void)const; + void processID(DWORD processID); + DWORD globalCntUsage(void)const; + void globalCntIUsage(DWORD globalCntUsage); + DWORD procCntUsage(void)const; + void procCntUsage(DWORD procCntUsage); + DWORD modBaseAddress(void)const; + void modBaseAddress(DWORD modBaseAddress); + DWORD modBaseSize(void)const; + void modBaseSize(DWORD modBaseSize); + HMODULE module(void)const; + void module(HMODULE hModule); + String strModule(void)const; + void szModule(const String &strModule); + String strExePath(void)const; + void strExePath(const String &strExePath); + MODULEENTRY32 &getMODULEENTRY(void); +private: + void zeroInit(void); +}; + +inline +ModuleEntry::ModuleEntry(void) +{ + zeroInit(); +} + +inline +ModuleEntry::~ModuleEntry() +{ +} + +inline +DWORD ModuleEntry::moduleID(void)const +{ + return MODULEENTRY32::th32ModuleID; +} + +inline +void ModuleEntry::moduleID(DWORD moduleID) +{ + MODULEENTRY32::th32ModuleID=moduleID; +} + +inline +DWORD ModuleEntry::processID(void)const +{ + return MODULEENTRY32::th32ProcessID; +} + +inline +void ModuleEntry::processID(DWORD processID) +{ + MODULEENTRY32::th32ProcessID=processID; +} + +inline +DWORD ModuleEntry::globalCntUsage(void)const +{ + return MODULEENTRY32::GlblcntUsage; +} + +inline +void ModuleEntry::globalCntIUsage(DWORD globalCntUsage) +{ + MODULEENTRY32::GlblcntUsage=globalCntUsage; +} + +inline +DWORD ModuleEntry::procCntUsage(void)const +{ + return MODULEENTRY32::ProccntUsage; +} + +inline +void ModuleEntry::procCntUsage(DWORD procCntUsage) +{ + MODULEENTRY32::ProccntUsage=procCntUsage; +} + +inline +DWORD ModuleEntry::modBaseAddress(void)const +{ + return DWORD(MODULEENTRY32::modBaseAddr); +} + +inline +void ModuleEntry::modBaseAddress(DWORD modBaseAddress) +{ + MODULEENTRY32::modBaseAddr=(BYTE*)modBaseAddress; +} + +inline +DWORD ModuleEntry::modBaseSize(void)const +{ + return MODULEENTRY32::modBaseSize; +} + +inline +void ModuleEntry::modBaseSize(DWORD modBaseSize) +{ + MODULEENTRY32::modBaseSize=modBaseSize; +} + +inline +HMODULE ModuleEntry::module(void)const +{ + return MODULEENTRY32::hModule; +} + +inline +void ModuleEntry::module(HMODULE hModule) +{ + MODULEENTRY32::hModule=hModule; +} + +inline +String ModuleEntry::strModule(void)const +{ + return MODULEENTRY32::szModule; +} + +inline +void ModuleEntry::szModule(const String &strModule) +{ + int strLen(strModule.length()); + if(strLen<=MAX_MODULE_NAME32)::strcpy(MODULEENTRY32::szModule,(LPSTR)(String&)strModule); + else {::strncpy(MODULEENTRY32::szModule,(LPSTR)(String&)strModule,MAX_MODULE_NAME32);MODULEENTRY32::szModule[MAX_MODULE_NAME32]=0;} +} + +inline +String ModuleEntry::strExePath(void)const +{ + return MODULEENTRY32::szExePath; +} + +inline +void ModuleEntry::strExePath(const String &strExePath) +{ + int strLen(strExePath.length()); + if(strLen +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class ModuleInfo; +typedef Array ModuleInfoList; + +class ModuleInfo +{ +public: + ModuleInfo(void); + ModuleInfo(const ModuleInfo &someModuleInfo); + ModuleInfo(HMODULE hModule,const String &strModuleBaseName=String(),const String &strModuleFileName=String()); + virtual ~ModuleInfo(); + ModuleInfo &operator=(const ModuleInfo &someModuleInfo); + bool operator==(const ModuleInfo &someModuleInfo)const; + HMODULE module(void)const; + void module(HMODULE hModule); + const String &moduleBaseName(void)const; + void moduleBaseName(const String &strModuleBaseName); + const String &moduleFileName(void)const; + void moduleFileName(const String &strModuleFileName); +private: + HMODULE mhModule; + String mModuleBaseName; + String mModuleFileName; +}; + +inline +ModuleInfo::ModuleInfo(void) +: mhModule(0) +{ +} + +inline +ModuleInfo::ModuleInfo(const ModuleInfo &someModuleInfo) +: mhModule(someModuleInfo.mhModule), mModuleBaseName(someModuleInfo.mModuleBaseName), + mModuleFileName(someModuleInfo.mModuleFileName) +{ +} + +inline +ModuleInfo::ModuleInfo(HMODULE hModule,const String &strModuleBaseName,const String &strModuleFileName) +: mhModule(hModule), mModuleBaseName(strModuleBaseName), mModuleFileName(strModuleFileName) +{ +} + +inline +ModuleInfo::~ModuleInfo() +{ +} + +inline +ModuleInfo &ModuleInfo::operator=(const ModuleInfo &someModuleInfo) +{ + module(someModuleInfo.module()); + moduleBaseName(someModuleInfo.moduleBaseName()); + moduleFileName(someModuleInfo.moduleFileName()); + return *this; +} + +inline +bool ModuleInfo::operator==(const ModuleInfo &someModuleInfo)const +{ + return (module()==someModuleInfo.module()&& + moduleBaseName()==someModuleInfo.moduleBaseName()&& + moduleFileName()==someModuleInfo.moduleFileName()); +} + +inline +HMODULE ModuleInfo::module(void)const +{ + return mhModule; +} + +inline +void ModuleInfo::module(HMODULE hModule) +{ + mhModule=hModule; +} + +inline +const String &ModuleInfo::moduleBaseName(void)const +{ + return mModuleBaseName; +} + +inline +void ModuleInfo::moduleBaseName(const String &strModuleBaseName) +{ + mModuleBaseName=strModuleBaseName; +} + +inline +const String &ModuleInfo::moduleFileName(void)const +{ + return mModuleFileName; +} + +inline +void ModuleInfo::moduleFileName(const String &strModuleFileName) +{ + mModuleFileName=strModuleFileName; +} + +#endif \ No newline at end of file diff --git a/psapint/procentry.hpp b/psapint/procentry.hpp new file mode 100644 index 0000000..2aaf194 --- /dev/null +++ b/psapint/procentry.hpp @@ -0,0 +1,171 @@ +#ifndef _PSAPINT_PROCESSENTRY_HPP_ +#define _PSAPINT_PROCESSENTRY_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_TOOLHELP32_HPP_ +#include +#endif + +class ProcessEntry : private PROCESSENTRY32 +{ +public: + ProcessEntry(void); + virtual ~ProcessEntry(); + DWORD cntUsage(void)const; + void cntUsage(DWORD cntUsage); + DWORD processID(void)const; + void processID(DWORD processID); + DWORD heapID(void)const; + void heapID(DWORD heapID); + DWORD moduleID(void)const; + void moduleID(DWORD moduleID); + DWORD cntThreads(void)const; + void cntThreads(DWORD cntThreads); + DWORD parentProcessID(void)const; + void parentProcessID(DWORD parentProcessID); + LONG priClassBase(void)const; + void priClassBase(LONG priClassBase); + DWORD flags(void)const; + void flags(DWORD flags); + String strExeFile(void)const; + void strExeFile(const String &strExeFile); + PROCESSENTRY32 &getPROCESSENTRY(void); +private: + void zeroInit(void); +}; + +inline +ProcessEntry::ProcessEntry(void) +{ + zeroInit(); +} + +inline +ProcessEntry::~ProcessEntry() +{ +} + +inline +DWORD ProcessEntry::cntUsage(void)const +{ + return PROCESSENTRY32::cntUsage; +} + +inline +void ProcessEntry::cntUsage(DWORD cntUsage) +{ + PROCESSENTRY32::cntUsage=cntUsage; +} + +inline +DWORD ProcessEntry::processID(void)const +{ + return PROCESSENTRY32::th32ProcessID; +} + +inline +void ProcessEntry::processID(DWORD processID) +{ + PROCESSENTRY32::th32ProcessID=processID; +} + +inline +DWORD ProcessEntry::heapID(void)const +{ + return PROCESSENTRY32::th32DefaultHeapID; +} + +inline +void ProcessEntry::heapID(DWORD heapID) +{ + PROCESSENTRY32::th32DefaultHeapID=heapID; +} + +inline +DWORD ProcessEntry::moduleID(void)const +{ + return PROCESSENTRY32::th32ModuleID; +} + +inline +void ProcessEntry::moduleID(DWORD moduleID) +{ + PROCESSENTRY32::th32ModuleID=moduleID; +} + +inline +DWORD ProcessEntry::cntThreads(void)const +{ + return PROCESSENTRY32::cntThreads; +} + +inline +void ProcessEntry::cntThreads(DWORD cntThreads) +{ + PROCESSENTRY32::cntThreads=cntThreads; +} + +inline +DWORD ProcessEntry::parentProcessID(void)const +{ + return PROCESSENTRY32::th32ParentProcessID; +} + +inline +void ProcessEntry::parentProcessID(DWORD parentProcessID) +{ + PROCESSENTRY32::th32ParentProcessID=parentProcessID; +} + +inline +LONG ProcessEntry::priClassBase(void)const +{ + return PROCESSENTRY32::pcPriClassBase; +} + +inline +void ProcessEntry::priClassBase(LONG priClassBase) +{ + PROCESSENTRY32::pcPriClassBase=priClassBase; +} + +inline +DWORD ProcessEntry::flags(void)const +{ + return PROCESSENTRY32::dwFlags; +} + +inline +void ProcessEntry::flags(DWORD flags) +{ + PROCESSENTRY32::dwFlags=flags; +} + +inline +String ProcessEntry::strExeFile(void)const +{ + return PROCESSENTRY32::szExeFile; +} + +inline +void ProcessEntry::strExeFile(const String &strExeFile) +{ + int strLen(strExeFile.length()); + if(strLen +#include +#include +#include + +ProcessAPI95::ProcessAPI95(void) +: mpfnProcess32First(0), mpfnProcess32Next(0), mpfnModule32First(0), mpfnModule32Next(0), + mpfnCreateToolhelp32Snapshot(0), mLibrary("KERNEL32.DLL") +{ + if(!mLibrary.isOkay())return; + mpfnProcess32First=(PFNPROCESS32FIRST)mLibrary.procAddress("Process32First"); + mpfnProcess32Next=(PFNPROCESS32NEXT)mLibrary.procAddress("Process32Next"); + mpfnModule32First=(PFNMODULE32FIRST)mLibrary.procAddress("Module32First"); + mpfnModule32Next=(PFNMODULE32NEXT)mLibrary.procAddress("Module32Next"); + mpfnCreateToolhelp32Snapshot=(PFNCREATETOOLHELP32SNAPSHOT)mLibrary.procAddress("CreateToolhelp32Snapshot"); +} + +ProcessAPI95::ProcessAPI95(const ProcessAPI95 &/*someProcessAPI*/) +{ // private implementation +} + +ProcessAPI95::~ProcessAPI95() +{ +} + +ProcessAPI95 &ProcessAPI95::operator=(const ProcessAPI95 &/*someProcessAPI*/) +{ // private implementation + return *this; +} + +bool ProcessAPI95::enumProcesses(ProcessInfoList &processInfoList) +{ + ProcessEntry processEntry; + Block processInfoBlock; + HANDLE hSnapshot; + + processInfoList.size(0); + if(!isOkay())return false; + hSnapshot=mpfnCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPMODULE,0); + if(-1==(int)hSnapshot)return false; + if(mpfnProcess32First(hSnapshot,&processEntry.getPROCESSENTRY())) + { + processInfoBlock.insert(&ProcessInfo()); + ProcessInfo &processInfo=processInfoBlock[processInfoBlock.size()-1]; + processInfo.processID(processEntry.processID()); + enumProcessModules(processInfo.processID(),processEntry,processInfo); + while(mpfnProcess32Next(hSnapshot,&processEntry.getPROCESSENTRY())) + { + processInfoBlock.insert(&ProcessInfo()); + ProcessInfo &processInfo=processInfoBlock[processInfoBlock.size()-1]; + processInfo.processID(processEntry.processID()); + enumProcessModules(processInfo.processID(),processEntry,processInfo); + } + } + ::CloseHandle(hSnapshot); + processInfoList.size(processInfoBlock.size()); + for(int index=0;index moduleInfoBlock; + HANDLE hSnapshot; + + moduleInfoList.size(0); + if(!isOkay())return false; + hSnapshot=mpfnCreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processID.processID()); + moduleEntry.processID(processID.processID()); + moduleInfoBlock.insert(&ModuleInfo()); + ModuleInfo &moduleInfo=moduleInfoBlock[moduleInfoBlock.size()-1]; + moduleInfo.module((HINSTANCE)processID.processID()); + moduleInfo.moduleBaseName(processEntry.strExeFile()); + moduleInfo.moduleFileName(processEntry.strExeFile()); + if(mpfnModule32First(hSnapshot,&moduleEntry.getMODULEENTRY())) + { + if(!(moduleEntry.strExePath()==processEntry.strExeFile())) + { + moduleInfoBlock.insert(&ModuleInfo()); + ModuleInfo &moduleInfo=moduleInfoBlock[moduleInfoBlock.size()-1]; + moduleInfo.module(moduleEntry.module()); + moduleInfo.moduleBaseName(moduleEntry.strModule()); + moduleInfo.moduleFileName(moduleEntry.strExePath()); + } + moduleEntry.processID(processID.processID()); + while(mpfnModule32Next(hSnapshot,&moduleEntry.getMODULEENTRY())) + { + if(!(moduleEntry.strExePath()==processEntry.strExeFile())) + { + moduleInfoBlock.insert(&ModuleInfo()); + ModuleInfo &moduleInfo=moduleInfoBlock[moduleInfoBlock.size()-1]; + moduleInfo.module(moduleEntry.module()); + moduleInfo.moduleBaseName(moduleEntry.strModule()); + moduleInfo.moduleFileName(moduleEntry.strExePath()); + } + moduleEntry.processID(processID.processID()); + } + } + ::CloseHandle(hSnapshot); + moduleInfoList.size(moduleInfoBlock.size()); + for(int index=0;index +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_LIBRARY_HPP_ +#include +#endif +#ifndef _COMMON_TOOLHELP32_HPP_ +#include +#endif +#ifndef _PSAPINT_PROCESSID_HPP_ +#include +#endif +#ifndef _PSAPINT_PROCINFO_HPP_ +#include +#endif + +class ProcessEntry; + +class ProcessAPI95 +{ +public: + ProcessAPI95(void); + virtual ~ProcessAPI95(); + bool enumProcesses(ProcessInfoList &processInfoList); + bool isOkay(void)const; +private: + typedef BOOL (WINAPI *PFNPROCESS32FIRST)(HANDLE hSnapshot,PROCESSENTRY32 *lppe); + typedef BOOL (WINAPI *PFNPROCESS32NEXT)(HANDLE hSnapshot,PROCESSENTRY32 *lppe); + typedef BOOL (WINAPI *PFNMODULE32FIRST)(HANDLE hSnapshot,MODULEENTRY32 *lpme); + typedef BOOL (WINAPI *PFNMODULE32NEXT)(HANDLE hSnapshot,MODULEENTRY32 *lpme); + typedef HANDLE (WINAPI *PFNCREATETOOLHELP32SNAPSHOT)(DWORD dwFlags,DWORD thProcessID); + ProcessAPI95(const ProcessAPI95 &someProcessAPI); + ProcessAPI95 &operator=(const ProcessAPI95 &someProcessAPI); + bool enumProcessModules(const ProcessID &processID,ProcessEntry &processEntry,ModuleInfoList &moduleInfoList); + + PFNPROCESS32FIRST mpfnProcess32First; + PFNPROCESS32NEXT mpfnProcess32Next; + PFNMODULE32FIRST mpfnModule32First; + PFNMODULE32NEXT mpfnModule32Next; + PFNCREATETOOLHELP32SNAPSHOT mpfnCreateToolhelp32Snapshot; + Library mLibrary; +}; + +inline +bool ProcessAPI95::isOkay(void)const +{ + if(!mpfnProcess32First||!mpfnProcess32Next||!mpfnModule32First||!mpfnModule32Next||!mpfnCreateToolhelp32Snapshot)return false; + return true; +} +#endif \ No newline at end of file diff --git a/psapint/psapint.001 b/psapint/psapint.001 new file mode 100644 index 0000000..df2a442 --- /dev/null +++ b/psapint/psapint.001 @@ -0,0 +1,86 @@ +# Microsoft Developer Studio Project File - Name="psapint" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=psapint - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "psapint.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "psapint.mak" CFG="psapint - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "psapint - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "psapint - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "psapint - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "psapint - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\psapint.lib" + +!ENDIF + +# Begin Target + +# Name "psapint - Win32 Release" +# Name "psapint - Win32 Debug" +# Begin Source File + +SOURCE=.\psapi.cpp +# End Source File +# Begin Source File + +SOURCE=.\psapi95.cpp +# End Source File +# End Target +# End Project diff --git a/psapint/psapint.dsp b/psapint/psapint.dsp new file mode 100644 index 0000000..92362c5 --- /dev/null +++ b/psapint/psapint.dsp @@ -0,0 +1,92 @@ +# Microsoft Developer Studio Project File - Name="psapint" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=psapint - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "psapint.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "psapint.mak" CFG="psapint - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "psapint - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "psapint - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "psapint - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "psapint - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\psapint.lib" + +!ENDIF + +# Begin Target + +# Name "psapint - Win32 Release" +# Name "psapint - Win32 Debug" +# Begin Source File + +SOURCE=.\psapi.cpp +# End Source File +# Begin Source File + +SOURCE=.\psapi95.cpp +# End Source File +# End Target +# End Project diff --git a/rasapi/CONNSTAT.CPP b/rasapi/CONNSTAT.CPP new file mode 100644 index 0000000..57c40ce --- /dev/null +++ b/rasapi/CONNSTAT.CPP @@ -0,0 +1,18 @@ +#include + +void RasConnectionStatus::deviceName(String deviceName) +{ + ::memset(tagRASCONNSTATUSA::szDeviceName,0,sizeof(tagRASCONNSTATUSA::szDeviceName)); + if(deviceName.isNull())return; + if(deviceName.length()>RAS_MaxDeviceName)deviceName.length(RAS_MaxDeviceName); + ::memcpy(tagRASCONNSTATUSA::szDeviceName,(LPSTR)deviceName,deviceName.length()); +} + +void RasConnectionStatus::deviceType(String deviceType) +{ + ::memset(tagRASCONNSTATUSA::szDeviceType,0,sizeof(tagRASCONNSTATUSA::szDeviceType)); + if(deviceType.isNull())return; + if(deviceType.length()>RAS_MaxDeviceType)deviceType.length(RAS_MaxDeviceType); + ::memcpy(tagRASCONNSTATUSA::szDeviceType,(LPSTR)deviceType,deviceType.length()); +} + diff --git a/rasapi/CONNSTAT.HPP b/rasapi/CONNSTAT.HPP new file mode 100644 index 0000000..73a8024 --- /dev/null +++ b/rasapi/CONNSTAT.HPP @@ -0,0 +1,129 @@ +#ifndef _RASAPI_RASCONNSTATUS_HPP_ +#define _RASAPI_RASCONNSTATUS_HPP_ +#ifndef _RASAPI_RASCONNECTIONSTATE_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class RasConnectionStatus : private tagRASCONNSTATUSA +{ +public: + RasConnectionStatus(void); + RasConnectionStatus(const RasConnectionStatus &someRasConnectionStatus); + RasConnectionStatus(const tagRASCONNSTATUSA &someRASCONNSTATUSA); + virtual ~RasConnectionStatus(); + RasConnectionStatus &operator=(const RasConnectionStatus &someRasConnectionStatus); + RasConnectionStatus &operator=(const tagRASCONNSTATUSA &someRASCONNSTATUS); + WORD operator==(const RasConnectionStatus &someRasConnectionStatus)const; + RasConnectionState rasConnectionState(void)const; + void rasConnectionState(const RasConnectionState &someRasConnectionState); + DWORD error(void)const; + void error(DWORD error); + String deviceType(void)const; + void deviceType(String deviceType); + String deviceName(void)const; + void deviceName(String deviceName); +private: + void init(void); +}; + +inline +RasConnectionStatus::RasConnectionStatus(void) +{ + init(); +} + +inline +RasConnectionStatus::RasConnectionStatus(const RasConnectionStatus &someRasConnectionStatus) +{ + *this=someRasConnectionStatus; +} + +inline +RasConnectionStatus::RasConnectionStatus(const tagRASCONNSTATUSA &someRASCONNSTATUSA) +{ + *this=someRASCONNSTATUSA; +} + +inline +RasConnectionStatus::~RasConnectionStatus() +{ +} + +inline +RasConnectionStatus &RasConnectionStatus::operator=(const RasConnectionStatus &someRasConnectionStatus) +{ + init(); + rasConnectionState(someRasConnectionStatus.rasConnectionState()); + error(someRasConnectionStatus.error()); + deviceType(someRasConnectionStatus.deviceType()); + deviceName(someRasConnectionStatus.deviceName()); + return *this; +} + +inline +RasConnectionStatus &RasConnectionStatus::operator=(const tagRASCONNSTATUSA &someRASCONNSTATUS) +{ + init(); + rasConnectionState(RasConnectionState(someRASCONNSTATUS.rasconnstate)); + error(someRASCONNSTATUS.dwError); + deviceType(someRASCONNSTATUS.szDeviceType); + deviceName(someRASCONNSTATUS.szDeviceName); + return *this; +} + +inline +WORD RasConnectionStatus::operator==(const RasConnectionStatus &someRasConnectionStatus)const +{ + return (rasConnectionState()==someRasConnectionStatus.rasConnectionState()&& + error()==someRasConnectionStatus.error()&& + deviceType()==someRasConnectionStatus.deviceType()&& + deviceName()==someRasConnectionStatus.deviceName()); +} + +inline +RasConnectionState RasConnectionStatus::rasConnectionState(void)const +{ + return RasConnectionState(tagRASCONNSTATUSA::rasconnstate); +} + +inline +void RasConnectionStatus::rasConnectionState(const RasConnectionState &someRasConnectionState) +{ + tagRASCONNSTATUSA::rasconnstate=someRasConnectionState.connState(); +} + +inline +DWORD RasConnectionStatus::error(void)const +{ + return tagRASCONNSTATUSA::dwError; +} + +inline +void RasConnectionStatus::error(DWORD error) +{ + tagRASCONNSTATUSA::dwError=error; +} + +inline +String RasConnectionStatus::deviceType(void)const +{ + return tagRASCONNSTATUSA::szDeviceType; +} + +inline +String RasConnectionStatus::deviceName(void)const +{ + return tagRASCONNSTATUSA::szDeviceName; +} + +inline +void RasConnectionStatus::init(void) +{ + ::memset(&((tagRASCONNSTATUSA&)*this),0,sizeof(tagRASCONNSTATUSA)); + tagRASCONNSTATUSA::dwSize=sizeof(tagRASCONNSTATUSA); +} +#endif + diff --git a/rasapi/CSTATE.HPP b/rasapi/CSTATE.HPP new file mode 100644 index 0000000..129ccfc --- /dev/null +++ b/rasapi/CSTATE.HPP @@ -0,0 +1,277 @@ +#ifndef _RASAPI_RASCONNECTIONSTATE_HPP_ +#define _RASAPI_RASCONNECTIONSTATE_HPP_ +#ifndef _COMMON_RAS_HPP_ +#include +#endif + +class RasConnectionState +{ +public: + RasConnectionState(void); + RasConnectionState(RASCONNSTATE rasConnState); + RasConnectionState(const RasConnectionState &someRasConnectionState); + virtual ~RasConnectionState(); + RasConnectionState &operator=(const RasConnectionState &someRasConnectionState); + WORD operator==(const RasConnectionState &someRasConnectionState); + RASCONNSTATE connState(void)const; + void connState(RASCONNSTATE rasConnState); + WORD openPort(void)const; + WORD portOpened(void)const; + WORD connectDevice(void)const; + WORD deviceConnected(void)const; + WORD allDevicesConnected(void)const; + WORD authenticate(void)const; + WORD authNotify(void)const; + WORD authRetry(void)const; + WORD authCallback(void)const; + WORD authChangePassword(void)const; + WORD authProject(void)const; + WORD authLinkSpeed(void)const; + WORD authAck(void)const; + WORD reAuthenticate(void)const; + WORD authenticated(void)const; + WORD prepareForCallback(void)const; + WORD waitForModemReset(void)const; + WORD waitForCallback(void)const; + WORD projected(void)const; + WORD startAuthentication(void)const; + WORD callbackComplete(void)const; + WORD logonNetwork(void)const; + WORD interactive(void)const; + WORD retryAuthentication(void)const; + WORD callbackSetByCaller(void)const; + WORD passwordExpired(void)const; + WORD connected(void)const; + WORD disconnected(void)const; +private: + RASCONNSTATE mRasConnState; +}; + +inline +RasConnectionState::RasConnectionState(void) +: mRasConnState((RASCONNSTATE)0) +{ +} + +inline +RasConnectionState::RasConnectionState(RASCONNSTATE rasConnState) +: mRasConnState(rasConnState) +{ +} + +inline +RasConnectionState::RasConnectionState(const RasConnectionState &someRasConnectionState) +{ + *this=someRasConnectionState; +} + +inline +RasConnectionState::~RasConnectionState() +{ +} + +inline +RasConnectionState &RasConnectionState::operator=(const RasConnectionState &someRasConnectionState) +{ + mRasConnState=someRasConnectionState.mRasConnState; + return *this; +} + +inline +WORD RasConnectionState::operator==(const RasConnectionState &someRasConnectionState) +{ + return mRasConnState==someRasConnectionState.mRasConnState; +} + +inline +WORD RasConnectionState::openPort(void)const +{ + return mRasConnState==RASCS_OpenPort; +} + +inline +WORD RasConnectionState::portOpened(void)const +{ + return mRasConnState==RASCS_PortOpened; +} + +inline +WORD RasConnectionState::connectDevice(void)const +{ + return mRasConnState==RASCS_ConnectDevice; +} + +inline +WORD RasConnectionState::deviceConnected(void)const +{ + return mRasConnState==RASCS_DeviceConnected; +} + +inline +WORD RasConnectionState::allDevicesConnected(void)const +{ + return mRasConnState==RASCS_AllDevicesConnected; +} + +inline +WORD RasConnectionState::authenticate(void)const +{ + return mRasConnState==RASCS_Authenticate; +} + +inline +WORD RasConnectionState::authNotify(void)const +{ + return mRasConnState==RASCS_AuthNotify; +} + +inline +WORD RasConnectionState::authRetry(void)const +{ + return mRasConnState==RASCS_AuthRetry; +} + +inline +WORD RasConnectionState::authCallback(void)const +{ + return mRasConnState==RASCS_AuthCallback; +} + +inline +WORD RasConnectionState::authChangePassword(void)const +{ + return mRasConnState==RASCS_AuthChangePassword; +} + +inline +WORD RasConnectionState::authProject(void)const +{ + return mRasConnState==RASCS_AuthProject; +} + +inline +WORD RasConnectionState::authLinkSpeed(void)const +{ + return mRasConnState==RASCS_AuthLinkSpeed; +} + +inline +WORD RasConnectionState::authAck(void)const +{ + return mRasConnState==RASCS_AuthAck; +} + +inline +WORD RasConnectionState::reAuthenticate(void)const +{ + return mRasConnState==RASCS_ReAuthenticate; +} + +inline +WORD RasConnectionState::authenticated(void)const +{ + return mRasConnState==RASCS_Authenticated; +} + +inline +WORD RasConnectionState::prepareForCallback(void)const +{ + return mRasConnState==RASCS_PrepareForCallback; +} + +inline +WORD RasConnectionState::waitForModemReset(void)const +{ + return mRasConnState==RASCS_WaitForModemReset; +} + +inline +WORD RasConnectionState::waitForCallback(void)const +{ + return mRasConnState==RASCS_WaitForCallback; +} + +inline +WORD RasConnectionState::projected(void)const +{ + return mRasConnState==RASCS_Projected; +} + +inline +WORD RasConnectionState::startAuthentication(void)const +{ +#if (WINVER>=0x400) + return mRasConnState==RASCS_StartAuthentication; +#else + return FALSE; +#endif +} + +inline +WORD RasConnectionState::callbackComplete(void)const +{ +#if (WINVER>=0x400) + return mRasConnState==RASCS_CallbackComplete; +#else + return FALSE; +#endif +} + +inline +WORD RasConnectionState::logonNetwork(void)const +{ +#if (WINVER>=0x400) + return mRasConnState==RASCS_LogonNetwork; +#else + return FALSE; +#endif +} + +inline +WORD RasConnectionState::interactive(void)const +{ + return mRasConnState==RASCS_Interactive; +} + +inline +WORD RasConnectionState::retryAuthentication(void)const +{ + return mRasConnState==RASCS_RetryAuthentication; +} + +inline +WORD RasConnectionState::callbackSetByCaller(void)const +{ + return mRasConnState==RASCS_CallbackSetByCaller; +} + +inline +WORD RasConnectionState::passwordExpired(void)const +{ + return mRasConnState==RASCS_PasswordExpired; +} + +inline +WORD RasConnectionState::connected(void)const +{ + return mRasConnState==RASCS_Connected; +} + +inline +WORD RasConnectionState::disconnected(void)const +{ + return mRasConnState==RASCS_Disconnected; +} + +inline +RASCONNSTATE RasConnectionState::connState(void)const +{ + return mRasConnState; +} + +inline +void RasConnectionState::connState(RASCONNSTATE rasConnState) +{ + mRasConnState=rasConnState; +} +#endif diff --git a/rasapi/Dialparm.hpp b/rasapi/Dialparm.hpp new file mode 100644 index 0000000..73be345 --- /dev/null +++ b/rasapi/Dialparm.hpp @@ -0,0 +1,174 @@ +#ifndef _RASAPI_RASDIALPARAMS_HPP_ +#define _RASAPI_RASDIALPARAMS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_RAS_HPP_ +#include +#endif + +class RasDialParams : private tagRASDIALPARAMSA +{ +public: + RasDialParams(void); + RasDialParams(const RasDialParams &someRasDialParams); + virtual ~RasDialParams(); + RasDialParams &operator=(const RasDialParams &someRasDialParams); + WORD operator==(const RasDialParams &someRasDialParams); + String entryName(void)const; + void entryName(String entryName); + String phoneNumber(void)const; + void phoneNumber(String phoneNumber); + String callbackNumber(void)const; + void callbackNumber(String callbackNumber); + String userName(void)const; + void userName(String userName); + String password(void)const; + void password(String password); + String domain(void)const; + void domain(String domain); +private: + void setZero(void); +}; + +inline +RasDialParams::RasDialParams(void) +{ + tagRASDIALPARAMSA::dwSize=sizeof(tagRASDIALPARAMSA); +} + +inline +RasDialParams::RasDialParams(const RasDialParams &someRasDialParams) +{ + *this=someRasDialParams; +} + +inline +RasDialParams::~RasDialParams() +{ +} + +inline +RasDialParams &RasDialParams::operator=(const RasDialParams &someRasDialParams) +{ + tagRASDIALPARAMSA::dwSize=sizeof(tagRASDIALPARAMSA); + entryName(someRasDialParams.entryName()); + phoneNumber(someRasDialParams.phoneNumber()); + callbackNumber(someRasDialParams.callbackNumber()); + userName(someRasDialParams.userName()); + password(someRasDialParams.password()); + domain(someRasDialParams.domain()); + return *this; +} + +inline +WORD RasDialParams::operator==(const RasDialParams &someRasDialParams) +{ + return (entryName()==someRasDialParams.entryName()&& + phoneNumber()==someRasDialParams.phoneNumber()&& + callbackNumber()==someRasDialParams.callbackNumber()&& + userName()==someRasDialParams.userName()&& + password()==someRasDialParams.password()&& + domain()==someRasDialParams.domain()); +} + +inline +String RasDialParams::entryName(void)const +{ + return tagRASDIALPARAMSA::szEntryName; +} + +inline +void RasDialParams::entryName(String entryName) +{ + ::memset(tagRASDIALPARAMSA::szEntryName,0,sizeof(tagRASDIALPARAMSA::szEntryName)); + if(entryName.isNull())return; + if(entryName.length()>RAS_MaxEntryName)entryName.length(RAS_MaxEntryName); + ::memcpy(tagRASDIALPARAMSA::szEntryName,(LPSTR)entryName,entryName.length()); +} + +inline +String RasDialParams::phoneNumber(void)const +{ + return tagRASDIALPARAMSA::szPhoneNumber; +} + +inline +void RasDialParams::phoneNumber(String phoneNumber) +{ + ::memset(tagRASDIALPARAMSA::szPhoneNumber,0,sizeof(tagRASDIALPARAMSA::szPhoneNumber)); + if(phoneNumber.isNull())return; + if(phoneNumber.length()>RAS_MaxPhoneNumber)phoneNumber.length(RAS_MaxPhoneNumber); + ::memcpy(tagRASDIALPARAMSA::szPhoneNumber,(LPSTR)phoneNumber,phoneNumber.length()); +} + +inline +String RasDialParams::callbackNumber(void)const +{ + return tagRASDIALPARAMSA::szCallbackNumber; +} + +inline +void RasDialParams::callbackNumber(String callbackNumber) +{ + ::memset(tagRASDIALPARAMSA::szCallbackNumber,0,sizeof(tagRASDIALPARAMSA::szCallbackNumber)); + if(callbackNumber.isNull())return; + if(callbackNumber.length()>RAS_MaxCallbackNumber)callbackNumber.length(RAS_MaxCallbackNumber); + ::memcpy(tagRASDIALPARAMSA::szCallbackNumber,(LPSTR)callbackNumber,callbackNumber.length()); +} + +inline +String RasDialParams::userName(void)const +{ + return tagRASDIALPARAMSA::szUserName; +} + +inline +void RasDialParams::userName(String userName) +{ + ::memset(tagRASDIALPARAMSA::szUserName,0,sizeof(tagRASDIALPARAMSA::szUserName)); + if(userName.isNull())return; + if(userName.length()>UNLEN)userName.length(UNLEN); + ::memcpy(tagRASDIALPARAMSA::szUserName,(LPSTR)userName,userName.length()); +} + +inline +String RasDialParams::password(void)const +{ + return tagRASDIALPARAMSA::szPassword; +} + +inline +void RasDialParams::password(String password) +{ + ::memset(tagRASDIALPARAMSA::szPassword,0,sizeof(tagRASDIALPARAMSA::szPassword)); + if(password.isNull())return; + if(password.length()>UNLEN)password.length(UNLEN); + ::memcpy(tagRASDIALPARAMSA::szPassword,(LPSTR)password,password.length()); +} + +inline +String RasDialParams::domain(void)const +{ + return tagRASDIALPARAMSA::szDomain; +} + +inline +void RasDialParams::domain(String domain) +{ + ::memset(tagRASDIALPARAMSA::szDomain,0,sizeof(tagRASDIALPARAMSA::szDomain)); + if(domain.isNull())return; + if(domain.length()>UNLEN)domain.length(UNLEN); + ::memcpy(tagRASDIALPARAMSA::szDomain,(LPSTR)domain,domain.length()); +} + +inline +void RasDialParams::setZero(void) +{ + ::memset(&((tagRASDIALPARAMSA&)*this),0,sizeof(tagRASDIALPARAMSA)); +} +#endif + diff --git a/rasapi/MAIN.CPP b/rasapi/MAIN.CPP new file mode 100644 index 0000000..f3f1527 --- /dev/null +++ b/rasapi/MAIN.CPP @@ -0,0 +1,42 @@ +#include +#include +#include + +WORD findEntry(Block &rasEntryNames,RasEntryName &rasEntryName); + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + RemoteAccessServer remoteServerInterface; + RasConnectionStatus rasConnectionStatus; + RasConnectionState rasConnectionState; + RasDialParams rasDialParams; + Block entryNames; + RasEntryName rasEntryName; + HRASCONN hRasConn(0); + + if(!remoteServerInterface.isOkay())return FALSE; + remoteServerInterface.rasEnumEntries(entryNames); + if(!entryNames.size())return FALSE; + rasEntryName.entryName("Long Island Link"); + if(!findEntry(entryNames,rasEntryName))return FALSE; + rasDialParams.entryName(rasEntryName.entryName()); + rasDialParams.phoneNumber(""); + rasDialParams.callbackNumber(""); + rasDialParams.userName("sean"); + rasDialParams.password("Cygnus"); + rasDialParams.domain(""); + if(remoteServerInterface.rasDial(0,0,&((tagRASDIALPARAMSA&)rasDialParams),0,0,&hRasConn))return FALSE; + remoteServerInterface.rasGetConnectStatus(hRasConn,rasConnectionStatus); + rasConnectionState=rasConnectionStatus.rasConnectionState(); + if(!rasConnectionState.connected())::MessageBox(::GetFocus(),(LPSTR)"No connection.",(LPSTR)rasDialParams.entryName(),MB_OK); + remoteServerInterface.rasHangUp(hRasConn); + return FALSE; +} + +WORD findEntry(Block &rasEntryNames,RasEntryName &rasEntryName) +{ + for(short entryIndex=0;entryIndex +#endif +#ifndef _COMMON_RAS_HPP_ +#include +#endif + +class RasApi +{ +public: + RasApi(void); + RasApi(const RasApi &someRasApi); + virtual ~RasApi(); + RasApi &operator=(const RasApi &someRasApi); + DWORD rasDial(LPRASDIALEXTENSIONS lpRasDialExtensions,LPTSTR lpszPhonebook,LPRASDIALPARAMS lpRasDialParams,DWORD dwNotifierType,LPVOID lpvNotifier,LPHRASCONN lphRasConn); + DWORD rasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections); + DWORD rasEnumEntries(LPTSTR reserved,LPTSTR lpszPhonebook,LPRASENTRYNAME lprasentryname,LPDWORD lpcb,LPDWORD lpcEntries); + DWORD rasGetConnectStatus(HRASCONN hrasconn,LPRASCONNSTATUS lprasconnstatus); + DWORD rasGetErrorString(UINT uErrorValue,LPTSTR lpszErrorString,DWORD cBufSize); + DWORD rasHangUp(HRASCONN hrasconn); + DWORD rasGetProjectionInfo(HRASCONN hrasconn,RASPROJECTION rasprojection,LPVOID lpprojection,LPDWORD lpcb); + DWORD rasCreatePhonebookEntry(HWND hwnd,LPSTR lpszPhonebook); + DWORD rasEditPhonebookEntry(HWND hwnd,LPSTR lpszPhonebook,LPSTR lpszEntryName); + DWORD rasSetEntryDialParams(LPSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,BOOL fRemovePassword); + DWORD rasGetEntryDialParams(LPTSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,LPBOOL lpfPassword); + WORD isOkay(void)const; +private: + typedef DWORD (APIENTRY *LPFNRASDIAL)(LPRASDIALEXTENSIONS,LPSTR,LPRASDIALPARAMSA,DWORD,LPVOID,LPHRASCONN); + typedef DWORD (APIENTRY *LPFNRASENUMCONNECTIONS)(LPRASCONNA,LPDWORD,LPDWORD); + typedef DWORD (APIENTRY *LPFNRASENUMENTRIES)(LPSTR,LPSTR,LPRASENTRYNAMEA,LPDWORD,LPDWORD); + typedef DWORD (APIENTRY *LPFNRASGETCONNECTSTATUS)(HRASCONN,LPRASCONNSTATUSA); + typedef DWORD (APIENTRY *LPFNRASGETERRORSTRING)(UINT,LPSTR,DWORD); + typedef DWORD (APIENTRY *LPFNRASHANGUP)(HRASCONN); + typedef DWORD (APIENTRY *LPFNRASGETPROJECTIONINFO)(HRASCONN,RASPROJECTION,LPVOID,LPDWORD); + typedef DWORD (APIENTRY *LPFNRASCREATEPHONEBOOKENTRY)(HWND,LPSTR); + typedef DWORD (APIENTRY *LPFNRASEDITPHONEBOOKENTRY)(HWND,LPSTR,LPSTR); + typedef DWORD (APIENTRY *LPFNRASSETENTRYDIALPARAMS)(LPSTR,LPRASDIALPARAMSA,BOOL); + typedef DWORD (APIENTRY *LPFNRASGETENTRYDIALPARAMS)(LPSTR,LPRASDIALPARAMSA,LPBOOL); + void loadRasLib(void); + void freeRasLib(void); + void getEntryPoints(void); + + HINSTANCE mhRasLib; + LPFNRASDIAL mlpfnRasDial; + LPFNRASENUMCONNECTIONS mlpfnRasEnumConnections; + LPFNRASENUMENTRIES mlpfnRasEnumEntries; + LPFNRASGETCONNECTSTATUS mlpfnRasGetConnectStatus; + LPFNRASGETERRORSTRING mlpfnRasGetErrorString; + LPFNRASHANGUP mlpfnRasHangup; + LPFNRASGETPROJECTIONINFO mlpfnRasGetProjectionInfo; + LPFNRASCREATEPHONEBOOKENTRY mlpfnRasCreatePhonebookEntry; + LPFNRASEDITPHONEBOOKENTRY mlpfnRasEditPhonebookEntry; + LPFNRASSETENTRYDIALPARAMS mlpfnRasSetEntryDialParams; + LPFNRASGETENTRYDIALPARAMS mlpfnRasGetEntryDialParams; +}; + +inline +RasApi::RasApi(void) +: mhRasLib(0), mlpfnRasDial(0), mlpfnRasEnumConnections(0), mlpfnRasEnumEntries(0), + mlpfnRasGetConnectStatus(0), mlpfnRasGetErrorString(0), mlpfnRasHangup(0), + mlpfnRasGetProjectionInfo(0), mlpfnRasCreatePhonebookEntry(0), + mlpfnRasEditPhonebookEntry(0), mlpfnRasSetEntryDialParams(0), + mlpfnRasGetEntryDialParams(0) +{ + loadRasLib(); + getEntryPoints(); +} + +inline +RasApi::RasApi(const RasApi &someRasApi) +{ + *this=someRasApi; +} + +inline +RasApi::~RasApi() +{ + freeRasLib(); +} + +inline +RasApi &RasApi::operator=(const RasApi &/*someRasApi*/) +{ + loadRasLib(); + getEntryPoints(); + return *this; +} + +inline +void RasApi::loadRasLib(void) +{ + freeRasLib(); + mhRasLib=::LoadLibrary("RASAPI32"); + if(!mhRasLib)return; +} + +inline +void RasApi::freeRasLib(void) +{ + if(!mhRasLib)return; + ::FreeLibrary(mhRasLib); + mhRasLib=0; +} + +inline +void RasApi::getEntryPoints(void) +{ + if(!mhRasLib)return; + mlpfnRasDial=(LPFNRASDIAL)::GetProcAddress(mhRasLib,"RasDialA"); + mlpfnRasEnumConnections=(LPFNRASENUMCONNECTIONS)::GetProcAddress(mhRasLib,"RasEnumConnectionsA"); + mlpfnRasEnumEntries=(LPFNRASENUMENTRIES)::GetProcAddress(mhRasLib,"RasEnumEntriesA"); + mlpfnRasGetConnectStatus=(LPFNRASGETCONNECTSTATUS)::GetProcAddress(mhRasLib,"RasGetConnectStatusA"); + mlpfnRasGetErrorString=(LPFNRASGETERRORSTRING)::GetProcAddress(mhRasLib,"RasGetErrorStringA"); + mlpfnRasHangup=(LPFNRASHANGUP)::GetProcAddress(mhRasLib,"RasHangUpA"); + mlpfnRasGetProjectionInfo=(LPFNRASGETPROJECTIONINFO)::GetProcAddress(mhRasLib,"RasGetProjectionInfoA"); + mlpfnRasCreatePhonebookEntry=(LPFNRASCREATEPHONEBOOKENTRY)::GetProcAddress(mhRasLib,"RasCreatePhonebookEntryA"); + mlpfnRasEditPhonebookEntry=(LPFNRASEDITPHONEBOOKENTRY)::GetProcAddress(mhRasLib,"RasEditPhonebookEntryA"); + mlpfnRasSetEntryDialParams=(LPFNRASSETENTRYDIALPARAMS)::GetProcAddress(mhRasLib,"RasSetEntryDialParamsA"); + mlpfnRasGetEntryDialParams=(LPFNRASGETENTRYDIALPARAMS)::GetProcAddress(mhRasLib,"RasGetEntryDialParamsA"); +} + +inline +DWORD RasApi::rasDial(LPRASDIALEXTENSIONS lpRasDialExtensions,LPTSTR lpszPhonebook,LPRASDIALPARAMS lpRasDialParams,DWORD dwNotifierType,LPVOID lpvNotifier,LPHRASCONN lphRasConn) +{ + if(!mlpfnRasDial)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasDial(lpRasDialExtensions,lpszPhonebook,lpRasDialParams,dwNotifierType,lpvNotifier,lphRasConn); +} + +inline +DWORD RasApi::rasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections) +{ + if(!mlpfnRasEnumConnections)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasEnumConnections(lprasconn,lpcb,lpcConnections); +} + +inline +DWORD RasApi::rasEnumEntries(LPTSTR reserved,LPTSTR lpszPhonebook,LPRASENTRYNAME lprasentryname,LPDWORD lpcb,LPDWORD lpcEntries) +{ + if(!mlpfnRasEnumEntries)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasEnumEntries(reserved,lpszPhonebook,lprasentryname,lpcb,lpcEntries); +} + +inline +DWORD RasApi::rasGetConnectStatus(HRASCONN hrasconn,LPRASCONNSTATUS lprasconnstatus) +{ + if(!mlpfnRasGetConnectStatus)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetConnectStatus(hrasconn,lprasconnstatus); +} + +inline +DWORD RasApi::rasGetErrorString(UINT uErrorValue,LPTSTR lpszErrorString,DWORD cBufSize) +{ + if(!mlpfnRasGetErrorString)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetErrorString(uErrorValue,lpszErrorString,cBufSize); +} + +inline +DWORD RasApi::rasHangUp(HRASCONN hrasconn) +{ + if(!mlpfnRasHangup)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasHangup(hrasconn); +} + +inline +DWORD RasApi::rasGetProjectionInfo(HRASCONN hrasconn,RASPROJECTION rasprojection,LPVOID lpprojection,LPDWORD lpcb) +{ + if(!mlpfnRasGetProjectionInfo)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetProjectionInfo(hrasconn,rasprojection,lpprojection,lpcb); +} + +inline +DWORD RasApi::rasCreatePhonebookEntry(HWND hwnd,LPSTR lpszPhonebook) +{ + if(!mlpfnRasCreatePhonebookEntry)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasCreatePhonebookEntry(hwnd,lpszPhonebook); +} + +inline +DWORD RasApi::rasEditPhonebookEntry(HWND hwnd,LPSTR lpszPhonebook,LPSTR lpszEntryName) +{ + if(!mlpfnRasEditPhonebookEntry)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasEditPhonebookEntry(hwnd,lpszPhonebook,lpszEntryName); +} + +inline +DWORD RasApi::rasSetEntryDialParams(LPSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,BOOL fRemovePassword) +{ + if(!mlpfnRasSetEntryDialParams)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasSetEntryDialParams(lpszPhonebook,lprasdialparams,fRemovePassword); +} + +inline +DWORD RasApi::rasGetEntryDialParams(LPTSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,LPBOOL lpfPassword) +{ + if(!mlpfnRasGetEntryDialParams)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetEntryDialParams(lpszPhonebook,lprasdialparams,lpfPassword); +} + +inline +WORD RasApi::isOkay(void)const +{ + return (mhRasLib?TRUE:FALSE); +} +#endif + diff --git a/rasapi/RASAPI.DSW b/rasapi/RASAPI.DSW new file mode 100644 index 0000000..bd15071 --- /dev/null +++ b/rasapi/RASAPI.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "rasapi"=.\rasapi.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/rasapi/RASAPI.HPP b/rasapi/RASAPI.HPP new file mode 100644 index 0000000..eb63f8b --- /dev/null +++ b/rasapi/RASAPI.HPP @@ -0,0 +1,207 @@ +#ifndef _RASAPI_RASAPI_HPP_ +#define _RASAPI_RASAPI_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_RAS_HPP_ +#include +#endif + +class RasApi +{ +public: + RasApi(void); + RasApi(const RasApi &someRasApi); + virtual ~RasApi(); + RasApi &operator=(const RasApi &someRasApi); + DWORD rasDial(LPRASDIALEXTENSIONS lpRasDialExtensions,LPTSTR lpszPhonebook,LPRASDIALPARAMS lpRasDialParams,DWORD dwNotifierType,LPVOID lpvNotifier,LPHRASCONN lphRasConn); + DWORD rasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections); + DWORD rasEnumEntries(LPTSTR reserved,LPTSTR lpszPhonebook,LPRASENTRYNAME lprasentryname,LPDWORD lpcb,LPDWORD lpcEntries); + DWORD rasGetConnectStatus(HRASCONN hrasconn,LPRASCONNSTATUS lprasconnstatus); + DWORD rasGetErrorString(UINT uErrorValue,LPTSTR lpszErrorString,DWORD cBufSize); + DWORD rasHangUp(HRASCONN hrasconn); + DWORD rasGetProjectionInfo(HRASCONN hrasconn,RASPROJECTION rasprojection,LPVOID lpprojection,LPDWORD lpcb); + DWORD rasCreatePhonebookEntry(HWND hwnd,LPSTR lpszPhonebook); + DWORD rasEditPhonebookEntry(HWND hwnd,LPSTR lpszPhonebook,LPSTR lpszEntryName); + DWORD rasSetEntryDialParams(LPSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,BOOL fRemovePassword); + DWORD rasGetEntryDialParams(LPTSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,LPBOOL lpfPassword); + WORD isOkay(void)const; +private: + typedef DWORD (APIENTRY *LPFNRASDIAL)(LPRASDIALEXTENSIONS,LPSTR,LPRASDIALPARAMSA,DWORD,LPVOID,LPHRASCONN); + typedef DWORD (APIENTRY *LPFNRASENUMCONNECTIONS)(LPRASCONNA,LPDWORD,LPDWORD); + typedef DWORD (APIENTRY *LPFNRASENUMENTRIES)(LPSTR,LPSTR,LPRASENTRYNAMEA,LPDWORD,LPDWORD); + typedef DWORD (APIENTRY *LPFNRASGETCONNECTSTATUS)(HRASCONN,LPRASCONNSTATUSA); + typedef DWORD (APIENTRY *LPFNRASGETERRORSTRING)(UINT,LPSTR,DWORD); + typedef DWORD (APIENTRY *LPFNRASHANGUP)(HRASCONN); + typedef DWORD (APIENTRY *LPFNRASGETPROJECTIONINFO)(HRASCONN,RASPROJECTION,LPVOID,LPDWORD); + typedef DWORD (APIENTRY *LPFNRASCREATEPHONEBOOKENTRY)(HWND,LPSTR); + typedef DWORD (APIENTRY *LPFNRASEDITPHONEBOOKENTRY)(HWND,LPSTR,LPSTR); + typedef DWORD (APIENTRY *LPFNRASSETENTRYDIALPARAMS)(LPSTR,LPRASDIALPARAMSA,BOOL); + typedef DWORD (APIENTRY *LPFNRASGETENTRYDIALPARAMS)(LPSTR,LPRASDIALPARAMSA,LPBOOL); + void loadRasLib(void); + void freeRasLib(void); + void getEntryPoints(void); + + HINSTANCE mhRasLib; + LPFNRASDIAL mlpfnRasDial; + LPFNRASENUMCONNECTIONS mlpfnRasEnumConnections; + LPFNRASENUMENTRIES mlpfnRasEnumEntries; + LPFNRASGETCONNECTSTATUS mlpfnRasGetConnectStatus; + LPFNRASGETERRORSTRING mlpfnRasGetErrorString; + LPFNRASHANGUP mlpfnRasHangup; + LPFNRASGETPROJECTIONINFO mlpfnRasGetProjectionInfo; + LPFNRASCREATEPHONEBOOKENTRY mlpfnRasCreatePhonebookEntry; + LPFNRASEDITPHONEBOOKENTRY mlpfnRasEditPhonebookEntry; + LPFNRASSETENTRYDIALPARAMS mlpfnRasSetEntryDialParams; + LPFNRASGETENTRYDIALPARAMS mlpfnRasGetEntryDialParams; +}; + +inline +RasApi::RasApi(void) +: mhRasLib(0), mlpfnRasDial(0), mlpfnRasEnumConnections(0), mlpfnRasEnumEntries(0), + mlpfnRasGetConnectStatus(0), mlpfnRasGetErrorString(0), mlpfnRasHangup(0), + mlpfnRasGetProjectionInfo(0), mlpfnRasCreatePhonebookEntry(0), + mlpfnRasEditPhonebookEntry(0), mlpfnRasSetEntryDialParams(0), + mlpfnRasGetEntryDialParams(0) +{ + loadRasLib(); + getEntryPoints(); +} + +inline +RasApi::RasApi(const RasApi &someRasApi) +{ + *this=someRasApi; +} + +inline +RasApi::~RasApi() +{ + freeRasLib(); +} + +inline +RasApi &RasApi::operator=(const RasApi &/*someRasApi*/) +{ + loadRasLib(); + getEntryPoints(); + return *this; +} + +inline +void RasApi::loadRasLib(void) +{ + freeRasLib(); + mhRasLib=::LoadLibrary("RASAPI32"); + if(!mhRasLib)return; +} + +inline +void RasApi::freeRasLib(void) +{ + if(!mhRasLib)return; + ::FreeLibrary(mhRasLib); + mhRasLib=0; +} + +inline +void RasApi::getEntryPoints(void) +{ + if(!mhRasLib)return; + mlpfnRasDial=(LPFNRASDIAL)::GetProcAddress(mhRasLib,"RasDialA"); + mlpfnRasEnumConnections=(LPFNRASENUMCONNECTIONS)::GetProcAddress(mhRasLib,"RasEnumConnectionsA"); + mlpfnRasEnumEntries=(LPFNRASENUMENTRIES)::GetProcAddress(mhRasLib,"RasEnumEntriesA"); + mlpfnRasGetConnectStatus=(LPFNRASGETCONNECTSTATUS)::GetProcAddress(mhRasLib,"RasGetConnectStatusA"); + mlpfnRasGetErrorString=(LPFNRASGETERRORSTRING)::GetProcAddress(mhRasLib,"RasGetErrorStringA"); + mlpfnRasHangup=(LPFNRASHANGUP)::GetProcAddress(mhRasLib,"RasHangUpA"); + mlpfnRasGetProjectionInfo=(LPFNRASGETPROJECTIONINFO)::GetProcAddress(mhRasLib,"RasGetProjectionInfoA"); + mlpfnRasCreatePhonebookEntry=(LPFNRASCREATEPHONEBOOKENTRY)::GetProcAddress(mhRasLib,"RasCreatePhonebookEntryA"); + mlpfnRasEditPhonebookEntry=(LPFNRASEDITPHONEBOOKENTRY)::GetProcAddress(mhRasLib,"RasEditPhonebookEntryA"); + mlpfnRasSetEntryDialParams=(LPFNRASSETENTRYDIALPARAMS)::GetProcAddress(mhRasLib,"RasSetEntryDialParamsA"); + mlpfnRasGetEntryDialParams=(LPFNRASGETENTRYDIALPARAMS)::GetProcAddress(mhRasLib,"RasGetEntryDialParamsA"); +} + +inline +DWORD RasApi::rasDial(LPRASDIALEXTENSIONS lpRasDialExtensions,LPTSTR lpszPhonebook,LPRASDIALPARAMS lpRasDialParams,DWORD dwNotifierType,LPVOID lpvNotifier,LPHRASCONN lphRasConn) +{ + if(!mlpfnRasDial)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasDial(lpRasDialExtensions,lpszPhonebook,lpRasDialParams,dwNotifierType,lpvNotifier,lphRasConn); +} + +inline +DWORD RasApi::rasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections) +{ + if(!mlpfnRasEnumConnections)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasEnumConnections(lprasconn,lpcb,lpcConnections); +} + +inline +DWORD RasApi::rasEnumEntries(LPTSTR reserved,LPTSTR lpszPhonebook,LPRASENTRYNAME lprasentryname,LPDWORD lpcb,LPDWORD lpcEntries) +{ + if(!mlpfnRasEnumEntries)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasEnumEntries(reserved,lpszPhonebook,lprasentryname,lpcb,lpcEntries); +} + +inline +DWORD RasApi::rasGetConnectStatus(HRASCONN hrasconn,LPRASCONNSTATUS lprasconnstatus) +{ + if(!mlpfnRasGetConnectStatus)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetConnectStatus(hrasconn,lprasconnstatus); +} + +inline +DWORD RasApi::rasGetErrorString(UINT uErrorValue,LPTSTR lpszErrorString,DWORD cBufSize) +{ + if(!mlpfnRasGetErrorString)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetErrorString(uErrorValue,lpszErrorString,cBufSize); +} + +inline +DWORD RasApi::rasHangUp(HRASCONN hrasconn) +{ + if(!mlpfnRasHangup)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasHangup(hrasconn); +} + +inline +DWORD RasApi::rasGetProjectionInfo(HRASCONN hrasconn,RASPROJECTION rasprojection,LPVOID lpprojection,LPDWORD lpcb) +{ + if(!mlpfnRasGetProjectionInfo)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetProjectionInfo(hrasconn,rasprojection,lpprojection,lpcb); +} + +inline +DWORD RasApi::rasCreatePhonebookEntry(HWND hwnd,LPSTR lpszPhonebook) +{ + if(!mlpfnRasCreatePhonebookEntry)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasCreatePhonebookEntry(hwnd,lpszPhonebook); +} + +inline +DWORD RasApi::rasEditPhonebookEntry(HWND hwnd,LPSTR lpszPhonebook,LPSTR lpszEntryName) +{ + if(!mlpfnRasEditPhonebookEntry)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasEditPhonebookEntry(hwnd,lpszPhonebook,lpszEntryName); +} + +inline +DWORD RasApi::rasSetEntryDialParams(LPSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,BOOL fRemovePassword) +{ + if(!mlpfnRasSetEntryDialParams)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasSetEntryDialParams(lpszPhonebook,lprasdialparams,fRemovePassword); +} + +inline +DWORD RasApi::rasGetEntryDialParams(LPTSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,LPBOOL lpfPassword) +{ + if(!mlpfnRasGetEntryDialParams)return ERROR_NOT_ENOUGH_MEMORY; + return mlpfnRasGetEntryDialParams(lpszPhonebook,lprasdialparams,lpfPassword); +} + +inline +WORD RasApi::isOkay(void)const +{ + return (mhRasLib?TRUE:FALSE); +} +#endif + diff --git a/rasapi/RASAPI.IDE b/rasapi/RASAPI.IDE new file mode 100644 index 0000000..2a5b50e Binary files /dev/null and b/rasapi/RASAPI.IDE differ diff --git a/rasapi/RASAPI.PLG b/rasapi/RASAPI.PLG new file mode 100644 index 0000000..453ea88 --- /dev/null +++ b/rasapi/RASAPI.PLG @@ -0,0 +1,29 @@ +--------------------Configuration: rasapi - Win32 Debug-------------------- +Begining build with project "C:\WORK\RASAPI\rasapi.dsp", at root. +Active configuration is Win32 (x86) Static Library (based on Win32 (x86) Static Library) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c " + "Browser Database Maker" with flags "/nologo /o".\msvcobj/rasapi.bsc" " + "Library Manager" with flags "/nologo /out:"..\exe\msrasapi.lib" " + "Custom Build" with flags "" + "" with flags "" + +Creating temp file "C:\WINDOWS\TEMP\RSP71A4.TMP" with contents +Creating command line "cl.exe @C:\WINDOWS\TEMP\RSP71A4.TMP" +Creating command line "link.exe -lib /nologo /out:"..\exe\msrasapi.lib" .\msvcobj\Stdtmpl.obj .\msvcobj\Rasentry.obj .\msvcobj\Rassrv.obj .\msvcobj\Connstat.obj" +Compiling... +Stdtmpl.cpp +Rasentry.cpp +Rassrv.cpp +Connstat.cpp +Creating library... + + + +msrasapi.lib - 0 error(s), 0 warning(s) diff --git a/rasapi/RASENTRY.CPP b/rasapi/RASENTRY.CPP new file mode 100644 index 0000000..709a8bf --- /dev/null +++ b/rasapi/RASENTRY.CPP @@ -0,0 +1,11 @@ +#include + +void RasEntryName::entryName(String entryName) +{ + ::memset(tagRASENTRYNAMEA::szEntryName,0,sizeof(tagRASENTRYNAMEA::szEntryName)); + if(entryName.isNull())return; + if(entryName.length()>RAS_MaxEntryName)entryName.length(RAS_MaxEntryName); + ::memcpy(tagRASENTRYNAMEA::szEntryName,(LPSTR)entryName,entryName.length()); +} + + diff --git a/rasapi/RASENTRY.HPP b/rasapi/RASENTRY.HPP new file mode 100644 index 0000000..4b0a45e --- /dev/null +++ b/rasapi/RASENTRY.HPP @@ -0,0 +1,80 @@ +#ifndef _RASAPI_RASENTRYNAME_HPP_ +#define _RASAPI_RASENTRYNAME_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_RAS_HPP_ +#include +#endif + +class RasEntryName : private tagRASENTRYNAMEA +{ +public: + RasEntryName(void); + RasEntryName(const RasEntryName &someRasEntryName); + RasEntryName(const tagRASENTRYNAMEA &someRASENTRYNAMEA); + virtual ~RasEntryName(); + RasEntryName &operator=(const RasEntryName &someRasEntryName); + WORD operator==(const RasEntryName &someRasEntryName)const; + String entryName(void)const; + void entryName(String entryName); +private: + void setZero(void); +}; + +inline +RasEntryName::RasEntryName(void) +{ + setZero(); + tagRASENTRYNAMEA::dwSize=sizeof(tagRASENTRYNAMEA); +} + +inline +RasEntryName::RasEntryName(const RasEntryName &someRasEntryName) +{ + *this=someRasEntryName; +} + +inline +RasEntryName::RasEntryName(const tagRASENTRYNAMEA &someRASENTRYNAMEA) +{ + setZero(); + tagRASENTRYNAMEA::dwSize=sizeof(tagRASENTRYNAMEA); + entryName(someRASENTRYNAMEA.szEntryName); +} + +inline +RasEntryName::~RasEntryName() +{ +} + +inline +RasEntryName &RasEntryName::operator=(const RasEntryName &someRasEntryName) +{ + tagRASENTRYNAMEA::dwSize=sizeof(tagRASENTRYNAMEA); + entryName(someRasEntryName.entryName()); + return *this; +} + +inline +WORD RasEntryName::operator==(const RasEntryName &someRasEntryName)const +{ + return entryName()==someRasEntryName.entryName(); +} + +inline +String RasEntryName::entryName(void)const +{ + return tagRASENTRYNAMEA::szEntryName; +} + +inline +void RasEntryName::setZero(void) +{ + ::memset(tagRASENTRYNAMEA::szEntryName,0,sizeof(tagRASENTRYNAMEA::szEntryName)); +} +#endif + diff --git a/rasapi/RASTST.DSW b/rasapi/RASTST.DSW new file mode 100644 index 0000000..4236af1 Binary files /dev/null and b/rasapi/RASTST.DSW differ diff --git a/rasapi/RASTST.IDE b/rasapi/RASTST.IDE new file mode 100644 index 0000000..27e634b Binary files /dev/null and b/rasapi/RASTST.IDE differ diff --git a/rasapi/Rasapi.001 b/rasapi/Rasapi.001 new file mode 100644 index 0000000..ae65e77 --- /dev/null +++ b/rasapi/Rasapi.001 @@ -0,0 +1,126 @@ +# Microsoft Developer Studio Project File - Name="rasapi" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=rasapi - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "rasapi.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "rasapi.mak" CFG="rasapi - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "rasapi - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "rasapi - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "rasapi - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "rasapi - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msrasapi.lib" + +!ENDIF + +# Begin Target + +# Name "rasapi - Win32 Release" +# Name "rasapi - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Connstat.cpp +# End Source File +# Begin Source File + +SOURCE=.\Rasentry.cpp +# End Source File +# Begin Source File + +SOURCE=.\Rassrv.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Connstat.hpp +# End Source File +# Begin Source File + +SOURCE=.\Cstate.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasapi.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasentry.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rassrv.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/rasapi/Rasapi.dsp b/rasapi/Rasapi.dsp new file mode 100644 index 0000000..5c13c4e --- /dev/null +++ b/rasapi/Rasapi.dsp @@ -0,0 +1,132 @@ +# Microsoft Developer Studio Project File - Name="rasapi" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=rasapi - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Rasapi.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Rasapi.mak" CFG="rasapi - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "rasapi - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "rasapi - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "rasapi - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "rasapi - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msrasapi.lib" + +!ENDIF + +# Begin Target + +# Name "rasapi - Win32 Release" +# Name "rasapi - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Connstat.cpp +# End Source File +# Begin Source File + +SOURCE=.\Rasentry.cpp +# End Source File +# Begin Source File + +SOURCE=.\Rassrv.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Connstat.hpp +# End Source File +# Begin Source File + +SOURCE=.\Cstate.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasapi.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rasentry.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rassrv.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/rasapi/Rasapi.mak b/rasapi/Rasapi.mak new file mode 100644 index 0000000..9a83f72 --- /dev/null +++ b/rasapi/Rasapi.mak @@ -0,0 +1,296 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on rasapi.dsp +!IF "$(CFG)" == "" +CFG=rasapi - Win32 Release +!MESSAGE No configuration specified. Defaulting to rasapi - Win32 Release. +!ENDIF + +!IF "$(CFG)" != "rasapi - Win32 Release" && "$(CFG)" != "rasapi - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "rasapi.mak" CFG="rasapi - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "rasapi - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "rasapi - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe + +!IF "$(CFG)" == "rasapi - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\rasapi.lib" + +!ELSE + +ALL : "$(OUTDIR)\rasapi.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Connstat.obj" + -@erase "$(INTDIR)\Rasentry.obj" + -@erase "$(INTDIR)\Rassrv.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\rasapi.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\rasapi.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\rasapi.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\rasapi.lib" +LIB32_OBJS= \ + "$(INTDIR)\Connstat.obj" \ + "$(INTDIR)\Rasentry.obj" \ + "$(INTDIR)\Rassrv.obj" \ + "$(INTDIR)\Stdtmpl.obj" + +"$(OUTDIR)\rasapi.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "rasapi - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +!IF "$(RECURSE)" == "0" + +ALL : "..\exe\msrasapi.lib" + +!ELSE + +ALL : "..\exe\msrasapi.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Connstat.obj" + -@erase "$(INTDIR)\Rasentry.obj" + -@erase "$(INTDIR)\Rassrv.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "..\exe\msrasapi.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\rasapi.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"..\exe\msrasapi.lib" +LIB32_OBJS= \ + "$(INTDIR)\Connstat.obj" \ + "$(INTDIR)\Rasentry.obj" \ + "$(INTDIR)\Rassrv.obj" \ + "$(INTDIR)\Stdtmpl.obj" + +"..\exe\msrasapi.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "rasapi - Win32 Release" || "$(CFG)" == "rasapi - Win32 Debug" +SOURCE=.\Connstat.cpp + +!IF "$(CFG)" == "rasapi - Win32 Release" + +DEP_CPP_CONNS=\ + ".\Connstat.hpp"\ + ".\Cstate.hpp"\ + {$(INCLUDE)}"common\ras.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Connstat.obj" : $(SOURCE) $(DEP_CPP_CONNS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "rasapi - Win32 Debug" + +DEP_CPP_CONNS=\ + ".\Connstat.hpp"\ + ".\Cstate.hpp"\ + {$(INCLUDE)}"common\ras.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Connstat.obj" : $(SOURCE) $(DEP_CPP_CONNS) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Rasentry.cpp + +!IF "$(CFG)" == "rasapi - Win32 Release" + +DEP_CPP_RASEN=\ + ".\Rasentry.hpp"\ + {$(INCLUDE)}"common\ras.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Rasentry.obj" : $(SOURCE) $(DEP_CPP_RASEN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "rasapi - Win32 Debug" + +DEP_CPP_RASEN=\ + ".\Rasentry.hpp"\ + {$(INCLUDE)}"common\ras.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Rasentry.obj" : $(SOURCE) $(DEP_CPP_RASEN) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Rassrv.cpp + +!IF "$(CFG)" == "rasapi - Win32 Release" + +DEP_CPP_RASSR=\ + ".\Connstat.hpp"\ + ".\Cstate.hpp"\ + ".\Rasapi.hpp"\ + ".\Rasentry.hpp"\ + ".\Rassrv.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\ras.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Rassrv.obj" : $(SOURCE) $(DEP_CPP_RASSR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "rasapi - Win32 Debug" + +DEP_CPP_RASSR=\ + ".\Connstat.hpp"\ + ".\Cstate.hpp"\ + ".\Rasapi.hpp"\ + ".\Rasentry.hpp"\ + ".\Rassrv.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\ras.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Rassrv.obj" : $(SOURCE) $(DEP_CPP_RASSR) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "rasapi - Win32 Release" + +DEP_CPP_STDTM=\ + ".\Rasentry.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\ras.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "rasapi - Win32 Debug" + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/rasapi/Rassrv.cpp b/rasapi/Rassrv.cpp new file mode 100644 index 0000000..cd2ecb1 --- /dev/null +++ b/rasapi/Rassrv.cpp @@ -0,0 +1,34 @@ +#include + +WORD RemoteAccessServer::rasEnumEntries(Block &rasEntryNames) +{ + tagRASENTRYNAMEA *lpEntryNames; + DWORD bytesNeeded(0); + DWORD entriesInBuff(0); + + rasEntryNames.remove(); + RasApi::rasEnumEntries(0,0,0,&bytesNeeded,&entriesInBuff); + if(!entriesInBuff)return rasEntryNames.size(); + lpEntryNames=new tagRASENTRYNAMEA[bytesNeeded/sizeof(tagRASENTRYNAMEA)]; + lpEntryNames[0].dwSize=sizeof(tagRASENTRYNAMEA); + RasApi::rasEnumEntries(0,0,lpEntryNames,&bytesNeeded,&entriesInBuff); + for(short entryIndex=0;entryIndex +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _RASAPI_RASAPI_HPP_ +#include +#endif +#ifndef _RASAPI_RASENTRYNAME_HPP_ +#include +#endif +#ifndef _RASAPI_RASCONNSTATUS_HPP_ +#include +#endif + +class RemoteAccessServer : public RasApi +{ +public: + RemoteAccessServer(void); + virtual ~RemoteAccessServer(); + WORD rasEnumEntries(Block &rasEntryNames); + DWORD rasGetConnectStatus(HRASCONN hRasConn,RasConnectionStatus &rasConnectionStatus); +private: +}; + +inline +RemoteAccessServer::RemoteAccessServer(void) +{ +} + +inline +RemoteAccessServer::~RemoteAccessServer() +{ +} +#endif diff --git a/rasapi/SCRAPS.TXT b/rasapi/SCRAPS.TXT new file mode 100644 index 0000000..907603f --- /dev/null +++ b/rasapi/SCRAPS.TXT @@ -0,0 +1,23 @@ + + + + +#if 0 +typedef struct _RASDIALPARAMS +{ + DWORD dwSize; + TCHAR szEntryName[RAS_MaxEntryName + 1]; + TCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; + TCHAR szCallbackNumber[RAS_MaxCallbackNumber + 1]; + TCHAR szUserName[UNLEN + 1]; + TCHAR szPassword[PWLEN + 1]; + TCHAR szDomain[DNLEN + 1] ; +} RASDIALPARAMS; + + +inline +RasInterface::~RasInterface() +{ + mRemoteAccessServerInterface.rasHangup(mhRasConn); +// if(mRasConnectionState.connected())mRemoteServerInterface.rasHangUp(mhRasConn); +} diff --git a/rasapi/STDTMPL.CPP b/rasapi/STDTMPL.CPP new file mode 100644 index 0000000..98b24fd --- /dev/null +++ b/rasapi/STDTMPL.CPP @@ -0,0 +1,10 @@ +#ifndef _MSC_VER +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include + +typedef Block a; +typedef Block b; +#endif diff --git a/rasapi/TDCONFIG.TDW b/rasapi/TDCONFIG.TDW new file mode 100644 index 0000000..40ac47c Binary files /dev/null and b/rasapi/TDCONFIG.TDW differ diff --git a/rasapi/TDW.TRW b/rasapi/TDW.TRW new file mode 100644 index 0000000..e3273ab Binary files /dev/null and b/rasapi/TDW.TRW differ diff --git a/rasapi/rasapi.mdp b/rasapi/rasapi.mdp new file mode 100644 index 0000000..8fffdd0 Binary files /dev/null and b/rasapi/rasapi.mdp differ diff --git a/remoteps/APISPY.BMP b/remoteps/APISPY.BMP new file mode 100644 index 0000000..ee58dff Binary files /dev/null and b/remoteps/APISPY.BMP differ diff --git a/remoteps/Debug/regsvr32.trg b/remoteps/Debug/regsvr32.trg new file mode 100644 index 0000000..7290e8b --- /dev/null +++ b/remoteps/Debug/regsvr32.trg @@ -0,0 +1 @@ +regsvr32 exec. time diff --git a/remoteps/Debug/remoteps.exe b/remoteps/Debug/remoteps.exe new file mode 100644 index 0000000..dd35c76 Binary files /dev/null and b/remoteps/Debug/remoteps.exe differ diff --git a/remoteps/Debug/remoteps.exp b/remoteps/Debug/remoteps.exp new file mode 100644 index 0000000..0cebb17 Binary files /dev/null and b/remoteps/Debug/remoteps.exp differ diff --git a/remoteps/Debug/remoteps.lib b/remoteps/Debug/remoteps.lib new file mode 100644 index 0000000..48d4eab Binary files /dev/null and b/remoteps/Debug/remoteps.lib differ diff --git a/remoteps/Debug/remoteps.res b/remoteps/Debug/remoteps.res new file mode 100644 index 0000000..7f9f4aa Binary files /dev/null and b/remoteps/Debug/remoteps.res differ diff --git a/remoteps/Debug/vc60.idb b/remoteps/Debug/vc60.idb new file mode 100644 index 0000000..805ee82 Binary files /dev/null and b/remoteps/Debug/vc60.idb differ diff --git a/remoteps/Debug/vc60.pdb b/remoteps/Debug/vc60.pdb new file mode 100644 index 0000000..92c3121 Binary files /dev/null and b/remoteps/Debug/vc60.pdb differ diff --git a/remoteps/RemoteProcess.cpp b/remoteps/RemoteProcess.cpp new file mode 100644 index 0000000..466f57d --- /dev/null +++ b/remoteps/RemoteProcess.cpp @@ -0,0 +1,48 @@ +#include "stdafx.h" +#include "remoteps.h" +#include "RemoteProcess.hpp" +#include + +RemoteProcess::RemoteProcess(void) +{ +} + +HRESULT RemoteProcess::Snapshot(VARIANT *pVariant) +{ + return mRemoteProcessImpl.snapshot(pVariant).result(); +} + +HRESULT RemoteProcess::GetProcessFirst(VARIANT *pVariant) +{ + return mRemoteProcessImpl.getProcessFirst(pVariant).result(); +} + +HRESULT RemoteProcess::GetProcessNext(VARIANT *pVariant) +{ + return mRemoteProcessImpl.getProcessNext(pVariant).result(); +} + +HRESULT RemoteProcess::GetModuleFirst(VARIANT *pVariant) +{ + return mRemoteProcessImpl.getModuleFirst(pVariant).result(); +} + +HRESULT RemoteProcess::GetModuleNext(VARIANT *pVariant) +{ + return mRemoteProcessImpl.getModuleNext(pVariant).result(); +} + +STDMETHODIMP RemoteProcess::GetProcessTimes(VARIANT *pVariant,DATE *pCreationTime,DATE *pExitTime,DATE *pKernelTime,DATE *pUserTime) +{ + return mRemoteProcessImpl.getProcessTimes(pVariant,pCreationTime,pExitTime,pKernelTime,pUserTime).result(); +} + +HRESULT RemoteProcess::GetDesktopWindow(VARIANT *pVariant) +{ + return mRemoteProcessImpl.getDesktopWindow(pVariant).result(); +} + +HRESULT RemoteProcess::Kill(VARIANT *pVariant) +{ + return mRemoteProcessImpl.kill(pVariant).result(); +} diff --git a/remoteps/RemoteProcess.hpp b/remoteps/RemoteProcess.hpp new file mode 100644 index 0000000..09d47dc --- /dev/null +++ b/remoteps/RemoteProcess.hpp @@ -0,0 +1,31 @@ +#ifndef __REMOTEPROCESS_H_ +#define __REMOTEPROCESS_H_ +#include +#ifndef _REMOTEPS_REMOTEPROCESSIMPL_HPP_ +#include +#endif + +class ATL_NO_VTABLE RemoteProcess : + public CComObjectRootEx, + public CComCoClass, + public IRemoteProcess +{ +public: + RemoteProcess(void); + virtual HRESULT __stdcall Snapshot(VARIANT *pVariant); + virtual HRESULT __stdcall GetProcessFirst(VARIANT *pVariant); + virtual HRESULT __stdcall GetProcessNext(VARIANT *pVariant); + virtual HRESULT __stdcall GetModuleFirst(VARIANT *pVariant); + virtual HRESULT __stdcall GetModuleNext(VARIANT *pVariant); + virtual HRESULT __stdcall GetDesktopWindow(VARIANT *pVariant); + virtual HRESULT __stdcall GetProcessTimes(VARIANT *pVariant,DATE *pCreationTime,DATE *pExitTime,DATE *pKernelTime,DATE *pUserTime); + virtual HRESULT __stdcall Kill(VARIANT *pVariant); + + DECLARE_REGISTRY_RESOURCEID(IDR_REMOTEPROCESS) + BEGIN_COM_MAP(RemoteProcess) + COM_INTERFACE_ENTRY(IRemoteProcess) + END_COM_MAP() +private: + RemoteProcessImpl mRemoteProcessImpl; +}; +#endif //__REMOTEPROCESS_H_ diff --git a/remoteps/RemoteProcess.rgs b/remoteps/RemoteProcess.rgs new file mode 100644 index 0000000..eef9241 --- /dev/null +++ b/remoteps/RemoteProcess.rgs @@ -0,0 +1,21 @@ +HKCR +{ + RemoteProcess.RemoteProcess.1 = s 'RemoteProcess Class' + { + CLSID = s '{BD20693F-8D8A-11D3-B2F0-0050043ED4DB}' + } + RemoteProcess.RemoteProcess = s 'RemoteProcess Class' + { + CurVer = s 'RemoteProcess.RemoteProcess.1' + } + NoRemove CLSID + { + ForceRemove {BD20693F-8D8A-11D3-B2F0-0050043ED4DB} = s 'RemoteProcess Class' + { + ProgID = s 'RemoteProcess.RemoteProcess.1' + VersionIndependentProgID = s 'RemoteProcess.RemoteProcess' + LocalServer32 = s '%MODULE%' + val AppID = s '{BD206932-8D8A-11D3-B2F0-0050043ED4DB}' + } + } +} diff --git a/remoteps/RemoteProcessImpl.cpp b/remoteps/RemoteProcessImpl.cpp new file mode 100644 index 0000000..a6d4733 --- /dev/null +++ b/remoteps/RemoteProcessImpl.cpp @@ -0,0 +1,186 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RemoteProcessImpl::RemoteProcessImpl(void) +: mCurrProcessIndex(0), mCurrModuleIndex(0) +{ +} + +RemoteProcessImpl::~RemoteProcessImpl() +{ +} + +ComResult RemoteProcessImpl::snapshot(VARIANT *pVariant) +{ + WinVersionInfo versionInfo; + + if(versionInfo.isWinNT())mProcessAPI.enumProcesses(mProcessInfoList); + else mProcessAPI95.enumProcesses(mProcessInfoList); + ::VariantInit(pVariant); + pVariant->vt=VT_I4; + pVariant->lVal=mProcessInfoList.size(); + return ComResult::Success; +} + +ComResult RemoteProcessImpl::getProcessFirst(VARIANT *pVariant) +{ + mCurrProcessIndex=0; + ::VariantInit(pVariant); + pVariant->vt=VT_I4; + if(mProcessInfoList.size()<=mCurrProcessIndex)pVariant->lVal=-1; + else pVariant->lVal=mProcessInfoList[mCurrProcessIndex].processID().processID(); + return ComResult::Success; +} + +ComResult RemoteProcessImpl::getProcessNext(VARIANT *pVariant) +{ + ::VariantInit(pVariant); + pVariant->vt=VT_I4; + if((mCurrProcessIndex+1)>=mProcessInfoList.size())pVariant->lVal=-1; + else pVariant->lVal=mProcessInfoList[++mCurrProcessIndex].processID().processID(); + return ComResult::Success; +} + +ComResult RemoteProcessImpl::getModuleFirst(VARIANT *pVariant) +{ + mCurrModuleIndex=0; + ::VariantInit(pVariant); + if(mCurrProcessIndex>=mProcessInfoList.size()||mCurrModuleIndex>=mProcessInfoList[mCurrProcessIndex].size()) + { + pVariant->vt=VT_I4; + pVariant->lVal=-1; + } + else + { + WideString wideString((mProcessInfoList[mCurrProcessIndex])[mCurrModuleIndex].moduleFileName()); + pVariant->vt=VT_BSTR; + pVariant->bstrVal=::SysAllocString(&wideString[0]); + } + return ComResult::Success; +} + +ComResult RemoteProcessImpl::getModuleNext(VARIANT *pVariant) +{ + ::VariantInit(pVariant); + if(mCurrProcessIndex>=mProcessInfoList.size()||(mCurrModuleIndex+1)>=mProcessInfoList[mCurrProcessIndex].size()) + { + pVariant->vt=VT_I4; + pVariant->lVal=-1; + } + else + { + WideString wideString((mProcessInfoList[mCurrProcessIndex])[++mCurrModuleIndex].moduleFileName()); + pVariant->vt=VT_BSTR; + pVariant->bstrVal=::SysAllocString(&wideString[0]); + } + return ComResult::Success; +} + +ComResult RemoteProcessImpl::getProcessTimes(VARIANT *pVariant,DATE *pCreationTime,DATE *pExitTime,DATE *pKernelTime,DATE *pUserTime) +{ + SystemTime sysCreationTime; + SystemTime sysExitTime; + SystemTime sysKernelTime; + SystemTime sysUserTime; + FILETIME creationTime; + FILETIME exitTime; + FILETIME kernelTime; + FILETIME userTime; + DWORD processID; + Process process; + + if(!pVariant||pVariant->vt!=VT_I4)return ComResult::Error; + processID=pVariant->lVal; + if(!process.openProcess(processID))return ComResult::Error; + if(!::GetProcessTimes(process.getProcess(),&creationTime,&exitTime,&kernelTime,&userTime))return ComResult::Error; + ::FileTimeToSystemTime(&creationTime,&sysCreationTime.getSYSTEMTIME()); + ::FileTimeToSystemTime(&exitTime,&sysExitTime.getSYSTEMTIME()); + ::FileTimeToSystemTime(&kernelTime,&sysKernelTime.getSYSTEMTIME()); + ::FileTimeToSystemTime(&userTime,&sysUserTime.getSYSTEMTIME()); + ::SystemTimeToVariantTime(&sysCreationTime.getSYSTEMTIME(),pCreationTime); + ::SystemTimeToVariantTime(&sysExitTime.getSYSTEMTIME(),pExitTime); + ::SystemTimeToVariantTime(&sysKernelTime.getSYSTEMTIME(),pKernelTime); + ::SystemTimeToVariantTime(&sysUserTime.getSYSTEMTIME(),pUserTime); + return ComResult::Success; +} + +ComResult RemoteProcessImpl::getDesktopWindow(VARIANT *pVariant) +{ + FileHandle inFile; + PureBitmap pureBitmap; + SafeArray safeArray; + ArrayBound arrayBound; + GlobalData bitmapBytes; + BYTE *pData; + HWND hDesktopWindow; + String strPathFileName; + + hDesktopWindow=::GetDesktopWindow(); + if(!hDesktopWindow)return ComResult::Fail; + pureBitmap.windowBitmap(hDesktopWindow); + if(!pureBitmap.isOkay())return ComResult::Fail; + saveBitmap(pureBitmap,strPathFileName); + inFile.open(strPathFileName,FileHandle::Read); + if(!inFile.isOkay())return ComResult::Fail; + bitmapBytes.size(inFile.size()+sizeof(DWORD)); + arrayBound.elements(bitmapBytes.size()); + safeArray.create(VTUChar,arrayBound); + safeArray.accessData((void**)&pData); + *((DWORD*)pData)=bitmapBytes.size(); + inFile.read(pData+sizeof(DWORD),inFile.size()); + inFile.close(); + ::unlink(strPathFileName); + safeArray.unaccessData(); + safeArray.disposition(SafeArray::Assume); + ::VariantInit(pVariant); + pVariant->vt=VT_ARRAY; + pVariant->parray=safeArray.getSAFEARRAY(); + return ComResult::Success; +} + +ComResult RemoteProcessImpl::kill(VARIANT *pVariant) +{ + return ComResult::Success; +} + +void RemoteProcessImpl::saveBitmap(PureBitmap &pureBitmap,String &strPathFileName) +{ + String strBitmapName("image000.bmp"); + String strPathBitmapName; + BitmapInfo bmInfo; + PathFind pathFind; + PurePalette purePalette; + GlobalData bmBits; + WinVersionInfo versionInfo; + + pathFind.getWindowsTempDirectory(strPathBitmapName); + strPathBitmapName+=strBitmapName; + strPathFileName=strPathBitmapName.betweenString(0,'.')+String(".tmp"); + bmInfo.width(pureBitmap.width()); + bmInfo.height(pureBitmap.height()); + bmInfo.planes(1); + bmInfo.compression(BI_RGB); + bmInfo.bitCount(BitmapInfo::Bit24); + bmInfo.colorUsed(0); + bmInfo.colorImportant(0); + pureBitmap.getBitmapBits(bmBits,BitmapInfo::Bit24,true); + Bitmap bitmap(strPathBitmapName,bmInfo,bmBits); + bitmap.setPalette(purePalette.getPalette(),false); + bitmap.saveBitmap(); + ImageConverter::convert(strPathBitmapName,strPathFileName,80); +} + diff --git a/remoteps/RemoteProcessImpl.hpp b/remoteps/RemoteProcessImpl.hpp new file mode 100644 index 0000000..dfa5d7c --- /dev/null +++ b/remoteps/RemoteProcessImpl.hpp @@ -0,0 +1,38 @@ +#ifndef _REMOTEPS_REMOTEPROCESSIMPL_HPP_ +#define _REMOTEPS_REMOTEPROCESSIMPL_HPP_ +#ifndef _COM_VARIANT_HPP_ +#include +#endif +#ifndef _PSAPINT_PSAPI_HPP_ +#include +#endif +#ifndef _PSAPINT_PSAPI95_HPP_ +#include +#endif + +class String; +class PureBitmap; + +class RemoteProcessImpl +{ +public: + RemoteProcessImpl(void); + virtual ~RemoteProcessImpl(); + ComResult snapshot(VARIANT *pVariant); + ComResult getProcessFirst(VARIANT *pVariant); + ComResult getProcessNext(VARIANT *pVariant); + ComResult getModuleFirst(VARIANT *pVariant); + ComResult getModuleNext(VARIANT *pVariant); + ComResult getDesktopWindow(VARIANT *pVariant); + ComResult getProcessTimes(VARIANT *pVariant,DATE *pCreationTime,DATE *pExitTime,DATE *pKernelTime,DATE *pUserTime); + ComResult kill(VARIANT *pVariant); +private: + void saveBitmap(PureBitmap &pureBitmap,String &strPathFileName); + + ProcessAPI mProcessAPI; + ProcessAPI95 mProcessAPI95; + ProcessInfoList mProcessInfoList; + int mCurrProcessIndex; + int mCurrModuleIndex; +}; +#endif diff --git a/remoteps/Resource.h b/remoteps/Resource.h new file mode 100644 index 0000000..91a654a --- /dev/null +++ b/remoteps/Resource.h @@ -0,0 +1,18 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by remoteps.rc +// +#define IDS_PROJNAME 100 +#define IDR_Remoteps 100 +#define IDR_REMOTEPROCESS 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 201 +#define _APS_NEXT_COMMAND_VALUE 32768 +#define _APS_NEXT_CONTROL_VALUE 201 +#define _APS_NEXT_SYMED_VALUE 102 +#endif +#endif diff --git a/remoteps/StdAfx.cpp b/remoteps/StdAfx.cpp new file mode 100644 index 0000000..4cf63d2 --- /dev/null +++ b/remoteps/StdAfx.cpp @@ -0,0 +1,10 @@ +// stdafx.cpp : source file that includes just the standard includes +// stdafx.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" +#ifdef _ATL_STATIC_REGISTRY +#include +#include +#endif +#include diff --git a/remoteps/StdAfx.h b/remoteps/StdAfx.h new file mode 100644 index 0000000..c75b7a8 --- /dev/null +++ b/remoteps/StdAfx.h @@ -0,0 +1,32 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#if !defined(AFX_STDAFX_H__BD206935_8D8A_11D3_B2F0_0050043ED4DB__INCLUDED_) +#define AFX_STDAFX_H__BD206935_8D8A_11D3_B2F0_0050043ED4DB__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + + +#define _WIN32_WINNT 0x0400 +#define _ATL_APARTMENT_THREADED + + +#include +//You may derive a class from CComModule and use it if you want to override +//something, but do not change the name of _Module +class CExeModule : public CComModule +{ +public: + LONG Unlock(); + DWORD dwThreadID; +}; +extern CExeModule _Module; +#include + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__BD206935_8D8A_11D3_B2F0_0050043ED4DB__INCLUDED) diff --git a/remoteps/dlldata.c b/remoteps/dlldata.c new file mode 100644 index 0000000..3f042b0 --- /dev/null +++ b/remoteps/dlldata.c @@ -0,0 +1,37 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( remoteps ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( remoteps ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */ diff --git a/remoteps/gethostbyname.ASM b/remoteps/gethostbyname.ASM new file mode 100644 index 0000000..0f141c1 --- /dev/null +++ b/remoteps/gethostbyname.ASM @@ -0,0 +1,17 @@ +:776D4A54 7773 :ja 776d4ac9 +:776D4A56 325F33 :xor bl,byte ptr ds:[edi+33h] +:776D4A59 322E :xor ch,byte ptr ds:[esi] +:776D4A5B 67657468 :je 776d4ac7 +:776D4A5F 6F :outsd +:776D4A60 7374 :jnb 776d4ad6 +:776D4A62 62796E :bound edi,dword ptr ds:[ecx+6eh] +:776D4A65 61 :popad +:776D4A66 6D :insd +:776D4A67 65006765 :add byte ptr gs:[edi+65h],ah +:776D4A6B 7468 :je 776d4ad5 +:776D4A6D 6F :outsd +:776D4A6E 7374 :jnb 776d4ae4 +:776D4A70 6E :outsb +:776D4A71 61 :popad +:776D4A72 6D :insd +:776D4A73 6500 :add byte ptr gs:[eax],bl diff --git a/remoteps/image000.jpg b/remoteps/image000.jpg new file mode 100644 index 0000000..e7dffac Binary files /dev/null and b/remoteps/image000.jpg differ diff --git a/remoteps/intercpt.cpp b/remoteps/intercpt.cpp new file mode 100644 index 0000000..f8581b9 --- /dev/null +++ b/remoteps/intercpt.cpp @@ -0,0 +1,202 @@ +#include +#include +#include + +WORD Intercept::performIntercept(Array &pureImports,DWORD baseAddress) +{ + mBaseAddress=baseAddress; + loadImportDescriptors(pureImports); + moduleEntryPoints(); + resolveImportNames(pureImports); + mImportModuleNames.remove(); + size(0); + return TRUE; +} + +void Intercept::loadImportDescriptors(Array &pureImports) +{ + DWORD importCount(pureImports.size()); + loadImportModuleNames(); + for(long importIndex=0;importIndex &importModuleNames,DWORD baseAddress) +{ + PIMAGE_DOS_HEADER npImageDosHeader; + PIMAGE_NT_HEADERS npImageNTHeader; + PIMAGE_IMPORT_DESCRIPTOR npImageImportDescriptor; + String strModuleName; + + if(!baseAddress)return; + npImageDosHeader=(PIMAGE_DOS_HEADER)baseAddress; + if(::IsBadReadPtr((void*)baseAddress,sizeof(PIMAGE_NT_HEADERS)))return; + if(npImageDosHeader->e_magic!=IMAGE_DOS_SIGNATURE)return; + npImageNTHeader=(PIMAGE_NT_HEADERS)((char*)npImageDosHeader+npImageDosHeader->e_lfanew); + if(npImageNTHeader->Signature!=IMAGE_NT_SIGNATURE)return; + npImageImportDescriptor=(PIMAGE_IMPORT_DESCRIPTOR)((char*)baseAddress+npImageNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + if((char*)npImageImportDescriptor==(char*)npImageNTHeader)return; + while(npImageImportDescriptor->Name) + { + strModuleName=(char*)(baseAddress+npImageImportDescriptor->Name); + strModuleName=strModuleName.betweenString(0,'.'); + strModuleName.upper(); + if(!strModuleName.isNull()&&isascii(*((char*)strModuleName))&&!isInModuleNames(strModuleName,mImportModuleNames))mImportModuleNames.insert(&strModuleName); + npImageImportDescriptor++; + } +} + +BOOL Intercept::isInModuleNames(const String &strModuleName,Block &strModuleNames) +{ + for(int index=0;index importEntries; + QuickSort sortImport; + + entryPoints(importEntries,mBaseAddress); + for(int index=0;index impIterator(importEntries); + PureImport *pImport; + index=0; + size(importEntries.leaves()); + while(0!=(pImport=impIterator++))operator[](index++)=*pImport; + sortImport.sortItems((Array&)*this); +} + +// ApiSpy is watching for protection faults generated by this function by the +// while(pThunk->u1.Function) loop. ApiSpy knows the code sequence of the first +// line of code to dereference pThunk->u1.Function. If the dereference generates +// a fault, ApiSpy will advance the instruction pointer to the first nop instruction. +// see "apidebug.cpp" for the counterpart. +// modified:06/29/1999 for windows NT +// Added the isWIN95Thunk() code because the WINNT entry points are pure and do not need to be +// incremented. I have not tested the if statement for protection faults generated by this +// code change. + +void Intercept::entryPoints(BinaryTree &importEntries,DWORD baseAddress) +{ + PIMAGE_DOS_HEADER npImageDosHeader; + PIMAGE_NT_HEADERS npImageNTHeader; + PIMAGE_IMPORT_DESCRIPTOR npImageImportDescriptor; + PIMAGE_THUNK_DATA pThunk; + PureImport pureImport; + String moduleName; + + npImageDosHeader=(PIMAGE_DOS_HEADER)baseAddress; + if(::IsBadReadPtr((void*)baseAddress,sizeof(PIMAGE_NT_HEADERS)))return; + if(npImageDosHeader->e_magic!=IMAGE_DOS_SIGNATURE)return; + npImageNTHeader=(PIMAGE_NT_HEADERS)((char*)npImageDosHeader+npImageDosHeader->e_lfanew); + if(npImageNTHeader->Signature!=IMAGE_NT_SIGNATURE)return; + npImageImportDescriptor=(PIMAGE_IMPORT_DESCRIPTOR)((char*)baseAddress+npImageNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + if((char*)npImageImportDescriptor==(char*)npImageNTHeader)return; + while(npImageImportDescriptor->Name) + { + pThunk=(PIMAGE_THUNK_DATA)(baseAddress+(DWORD)npImageImportDescriptor->FirstThunk); + moduleName=(char*)(baseAddress+npImageImportDescriptor->Name); + moduleName=moduleName.betweenString(0,'.'); + moduleName.upper(); + if(moduleName.isNull()||!isascii(*((char*)moduleName)))break; + while(pThunk->u1.Function) + { + if((int)pThunk->u1.Function==0xCCCCCCCC)break; + if(0xCC==HIBYTE(HIWORD((int)pThunk->u1.Function)))break; + pureImport.moduleName(moduleName); + if(isWIN95Thunk((DWORD)pThunk->u1.Function)||mVersionInfo.isWin95()) + { + pureImport.importAddress(*((DWORD*)((char*)(((DWORD)pThunk->u1.Function)+1)))); + pureImport.rewriteAddress((DWORD)&(*((DWORD*)((char*)(((DWORD)pThunk->u1.Function)+1))))); + pureImport.thunkType(PureImport::WIN95Thunk); + } + else + { + pureImport.importAddress((DWORD)pThunk->u1.Function); + pureImport.rewriteAddress((DWORD)&pThunk->u1.Function); + pureImport.thunkType(PureImport::StandardThunk); + } + _asm nop; + _asm nop; + importEntries.insert(pureImport); + pThunk++; + } + npImageImportDescriptor++; + } +} + +void Intercept::resolveImportNames(Array &pureImport) +{ + PureImport moduleImport; + DWORD importCount(pureImport.size()); + BinarySearch searchImport((Array&)*this); + int resolved(0); + + for(long importIndex=0;importIndex +#endif +#ifndef _COMMON_VERSIONINFO_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_QUICKSORT_HPP_ +#include +#endif +#ifndef _COMMON_BINARYSEARCH_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _IMAGE_PUREIMPORT_HPP_ +#include +#endif + +template +class BinaryTree; + +class Intercept : public Array +{ +public: + Intercept(void); + ~Intercept(); + WORD performIntercept(Array &pureImports,DWORD baseAddress); +private: + void loadImportDescriptors(Array &pureImports); + void loadImportModuleNames(void); + void moduleEntryPoints(void); + void resolveImportNames(Array &pureImport); + WORD importEntryPoint(PureImport &pureImport); + DWORD baseAddress(void)const; + WORD isWIN95Thunk(DWORD baseAddress); + + void loadImportModuleNamesEx(void); + void loadImportModuleNames(Block &importModuleNames,DWORD baseAddress); + BOOL isInModuleNames(const String &strModuleName,Block &strModuleNames); + void entryPoints(BinaryTree &pureImports,DWORD baseAddress); + + DWORD mBaseAddress; + Block mImportModuleNames; + WinVersionInfo mVersionInfo; +}; + +inline +Intercept::Intercept(void) +{ +} + +inline +Intercept::~Intercept() +{ +} + +inline +DWORD Intercept::baseAddress(void)const +{ + return mBaseAddress; +} + +inline +WORD Intercept::isWIN95Thunk(DWORD baseAddress) +{ + if(*((BYTE*)baseAddress)==0x68&&*(((BYTE*)baseAddress)+5)==0xE9)return TRUE; + return FALSE; +} +#endif + diff --git a/remoteps/procaddr.hpp b/remoteps/procaddr.hpp new file mode 100644 index 0000000..20d9b7f --- /dev/null +++ b/remoteps/procaddr.hpp @@ -0,0 +1,20 @@ +#ifndef _REMOTEPS_PROCADDRESS_HPP_ +#define _REMOTEPS_PROCADDRESS_HPP_ +#if defined(_MSC_VER) +#pragma warning(disable:4700) +#endif + +template +class ProcAddress +{ +public: + typedef void (T::*LPFNMETHODVOID)(void); + ProcAddress(void); + virtual ~ProcAddress(); + int getProcAddress(LPFNMETHODVOID lpfnMethod); +private: +}; +#if defined(_MSC_VER) +#include +#endif +#endif diff --git a/remoteps/procaddr.tpp b/remoteps/procaddr.tpp new file mode 100644 index 0000000..8eed9eb --- /dev/null +++ b/remoteps/procaddr.tpp @@ -0,0 +1,34 @@ + +template +ProcAddress::ProcAddress(void) +{ +} + +template +ProcAddress::~ProcAddress() +{ +} + +#if defined(_MSC_VER) +template +int ProcAddress::getProcAddress(LPFNMETHODVOID lpfnMethod) +{ + typedef void (*LPFNPROCVOID)(void); + int methodAddress=*((int*)&lpfnMethod); + return methodAddress; +} +#else +template +int ProcAddress::getProcAddress(void (T::* /*lpfnMethod*/ )(void)) +{ + typedef void (*LPFNPROCVOID)(void); + int methodAddress; + char assign[]={0x8B,0x5D,0x0C,0xC3}; + char address[]={0x00,0x00,0x00,0x00}; + *((DWORD*)address)=(DWORD)((DWORD*)assign); + ((LPFNPROCVOID)address)(); + return methodAddress; +} +#endif + + diff --git a/remoteps/remoteps.001 b/remoteps/remoteps.001 new file mode 100644 index 0000000..8ced215 --- /dev/null +++ b/remoteps/remoteps.001 @@ -0,0 +1,468 @@ +# Microsoft Developer Studio Project File - Name="remoteps" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=remoteps - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "remoteps.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "remoteps.mak" CFG="remoteps - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "remoteps - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Debug" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Release MinSize" (based on\ + "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Release MinDependency" (based on\ + "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Release MinSize" (based on\ + "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Release MinDependency" (based on\ + "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /Zp1 /MTd /Gm /Zi /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX"windows.hpp" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# Begin Custom Build - Performing registration +OutDir=.\Debug +TargetPath=.\Debug\remoteps.exe +InputPath=.\Debug\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "DebugU" +# PROP BASE Intermediate_Dir "DebugU" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "DebugU" +# PROP Intermediate_Dir "DebugU" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"wWinMainCRTStartup" /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"wWinMainCRTStartup" /subsystem:windows /debug /machine:I386 /pdbtype:sept +# Begin Custom Build - Performing registration +OutDir=.\DebugU +TargetPath=.\DebugU\remoteps.exe +InputPath=.\DebugU\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinSize" +# PROP BASE Intermediate_Dir "ReleaseMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinSize" +# PROP Intermediate_Dir "ReleaseMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseMinSize +TargetPath=.\ReleaseMinSize\remoteps.exe +InputPath=.\ReleaseMinSize\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinDependency" +# PROP BASE Intermediate_Dir "ReleaseMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinDependency" +# PROP Intermediate_Dir "ReleaseMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseMinDependency +TargetPath=.\ReleaseMinDependency\remoteps.exe +InputPath=.\ReleaseMinDependency\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinSize" +# PROP BASE Intermediate_Dir "ReleaseUMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinSize" +# PROP Intermediate_Dir "ReleaseUMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseUMinSize +TargetPath=.\ReleaseUMinSize\remoteps.exe +InputPath=.\ReleaseUMinSize\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinDependency" +# PROP BASE Intermediate_Dir "ReleaseUMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinDependency" +# PROP Intermediate_Dir "ReleaseUMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseUMinDependency +TargetPath=.\ReleaseUMinDependency\remoteps.exe +InputPath=.\ReleaseUMinDependency\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ENDIF + +# Begin Target + +# Name "remoteps - Win32 Debug" +# Name "remoteps - Win32 Unicode Debug" +# Name "remoteps - Win32 Release MinSize" +# Name "remoteps - Win32 Release MinDependency" +# Name "remoteps - Win32 Unicode Release MinSize" +# Name "remoteps - Win32 Unicode Release MinDependency" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\RemoteProcess.cpp +# End Source File +# Begin Source File + +SOURCE=.\RemoteProcessImpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\remoteps.cpp +# End Source File +# Begin Source File + +SOURCE=.\remoteps.idl + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\remoteps.rc + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.cpp +# ADD CPP /Yc"stdafx.h" +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\RemoteProcess.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resource.h +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=..\EXE\jpeg6b.lib +# End Source File +# End Group +# Begin Source File + +SOURCE=..\EXE\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\EXE\psapint.lib +# End Source File +# Begin Source File + +SOURCE=.\RemoteProcess.rgs +# End Source File +# Begin Source File + +SOURCE=.\remoteps.rgs +# End Source File +# End Target +# End Project diff --git a/remoteps/remoteps.aps b/remoteps/remoteps.aps new file mode 100644 index 0000000..07e8d98 Binary files /dev/null and b/remoteps/remoteps.aps differ diff --git a/remoteps/remoteps.clw b/remoteps/remoteps.clw new file mode 100644 index 0000000..d615683 --- /dev/null +++ b/remoteps/remoteps.clw @@ -0,0 +1,15 @@ +; CLW file contains information for the MFC ClassWizard + +[General Info] +Version=1 +LastClass= +LastTemplate=CDialog +NewFileInclude1=#include "stdafx.h" +NewFileInclude2=#include "remoteps.h" +ODLFile=remoteps.idl +LastPage=0 + +ClassCount=0 + +ResourceCount=0 + diff --git a/remoteps/remoteps.cpp b/remoteps/remoteps.cpp new file mode 100644 index 0000000..102a2b9 --- /dev/null +++ b/remoteps/remoteps.cpp @@ -0,0 +1,326 @@ +// Note: Proxy/Stub Information +// To build a separate proxy/stub DLL, +// run nmake -f remotepsps.mk in the project directory. + +#include "stdafx.h" +#include "resource.h" +#include "initguid.h" +#include "remoteps.h" + +#include "remoteps_i.c" +#include "RemoteProcess.hpp" +#include + +#include +#include +#include +#include + +class InterceptGetHostByName +{ +public: + InterceptGetHostByName(const String &masquerade); + ~InterceptGetHostByName(); +private: + enum {CodeSize=32}; + typedef hostent *(__stdcall *LPFNGETHOSTBYNAME)(const char *name); + bool intercept(void); + void createForwarderThunk(void); + bool setForwarderThunk(void); + DWORD getAddress(void); + hostent *__stdcall gethostbyname(const char *strHostName); + + BYTE mForwarderThunk[CodeSize]; + Process mThisProcess; + DWORD mBaseAddress; + hostent *mpHostEnt; + WSASystem mWSASystem; + bool mIsOkay; +}; + +InterceptGetHostByName::InterceptGetHostByName(const String &strMasquerade) +: mIsOkay(false), mBaseAddress(0) +{ + mpHostEnt=::gethostbyname(strMasquerade); + if(!mpHostEnt)return; + mThisProcess.openProcess(::GetCurrentProcessId(),Process::AllAccess); + if(!mThisProcess.isOkay())return; + createForwarderThunk(); + if(!intercept())return; + mIsOkay=true; +} + +InterceptGetHostByName::~InterceptGetHostByName() +{ +} + +bool InterceptGetHostByName::intercept(void) +{ + DWORD countBytes; + + if(0==(mBaseAddress=getAddress()))return false; + if(!setForwarderThunk())return false; + return true; +} + +void InterceptGetHostByName::createForwarderThunk(void) +{ + ProcAddress procAddress; + + mForwarderThunk[0]=0x51; // push ecx + mForwarderThunk[1]=0xB9; // mov ecx,this + *((unsigned*)(mForwarderThunk+2))=(unsigned)this; // "" "" + mForwarderThunk[6]=0x8B; // mov eax,[esp+12] + mForwarderThunk[7]=0x44; // "" + mForwarderThunk[8]=0x24; // "" + mForwarderThunk[9]=0x0C; // "" + mForwarderThunk[10]=0x50; // push eax + mForwarderThunk[11]=0x50; // push eax + mForwarderThunk[12]=0xB8; // mov eax,function address + *((unsigned*)(mForwarderThunk+13))=(unsigned)procAddress.getProcAddress((ProcAddress::LPFNMETHODVOID)&InterceptGetHostByName::gethostbyname); + mForwarderThunk[17]=0xFF; // call eax + mForwarderThunk[18]=0xD0; // "" "" + mForwarderThunk[19]=0x59; // pop ecx + mForwarderThunk[20]=0xC2; // retn 4 + *((short*)(mForwarderThunk+21))=4; // "" "" +} + +DWORD InterceptGetHostByName::getAddress(void) +{ + Library sockLib("wsock32.dll"); + + if(!sockLib.isOkay())return false; + return (DWORD)sockLib.procAddress("gethostbyname"); +} + +bool InterceptGetHostByName::setForwarderThunk(void) +{ + DWORD countBytes; + + mThisProcess.writeProcessMemory((void*)mBaseAddress,mForwarderThunk,sizeof(mForwarderThunk),&countBytes); + return countBytes==sizeof(mForwarderThunk); +} + +hostent *InterceptGetHostByName::gethostbyname(const char *hostname) +{ + InterceptGetHostByName *pInterceptGetHostByName; + _asm mov pInterceptGetHostByName,ecx; + return pInterceptGetHostByName->mpHostEnt; +} + + +// ********************************************************************************** + +class InterceptGetComputerName +{ +public: + InterceptGetComputerName(const String &masquerade); + ~InterceptGetComputerName(); +private: + enum {CodeSize=32}; + typedef int (__stdcall *LPFNGETCOMPUTERNAME)(LPSTR lpComputerName,LPDWORD cbBytes); + bool intercept(void); + void createForwarderThunk(void); + bool setForwarderThunk(void); + DWORD getAddress(void); + int __stdcall getcomputername(LPSTR lpComputerName,LPDWORD cbBytes); + + BYTE mForwarderThunk[CodeSize]; + Process mThisProcess; + DWORD mBaseAddress; + WSASystem mWSASystem; + String mComputerName; + bool mIsOkay; +}; + +InterceptGetComputerName::InterceptGetComputerName(const String &strMasquerade) +: mIsOkay(false), mBaseAddress(0) +{ + if(strMasquerade.isNull())return; + mComputerName=strMasquerade; + mThisProcess.openProcess(::GetCurrentProcessId(),Process::AllAccess); + if(!mThisProcess.isOkay())return; + createForwarderThunk(); + if(!intercept())return; + mIsOkay=true; +} + +InterceptGetComputerName::~InterceptGetComputerName() +{ +} + +bool InterceptGetComputerName::intercept(void) +{ + DWORD countBytes; + + if(0==(mBaseAddress=getAddress()))return false; + if(!setForwarderThunk())return false; + return true; +} + +void InterceptGetComputerName::createForwarderThunk(void) +{ + ProcAddress procAddress; + + mForwarderThunk[0]=0x51; // push ecx + mForwarderThunk[1]=0xB9; // mov ecx,this + *((unsigned*)(mForwarderThunk+2))=(unsigned)this; // "" "" + + mForwarderThunk[6]=0x8B; // mov eax,[esp+8] + mForwarderThunk[7]=0x44; // "" + mForwarderThunk[8]=0x24; // "" + mForwarderThunk[9]=0x0C; // "" + mForwarderThunk[10]=0x50; // push eax + + mForwarderThunk[11]=0x8B; // mov eax,[esp+16] + mForwarderThunk[12]=0x44; // "" + mForwarderThunk[13]=0x24; // "" + mForwarderThunk[14]=0x14; // "" + mForwarderThunk[15]=0x50; // push eax + + mForwarderThunk[15]=0x50; // push eax + +// mForwarderThunk[11]=0x50; // push eax + mForwarderThunk[16]=0xB8; // mov eax,function address + *((unsigned*)(mForwarderThunk+17))=(unsigned)procAddress.getProcAddress((ProcAddress::LPFNMETHODVOID)&InterceptGetComputerName::getcomputername); + mForwarderThunk[21]=0xFF; // call eax + mForwarderThunk[22]=0xD0; // "" "" + mForwarderThunk[23]=0x59; // pop ecx + mForwarderThunk[24]=0xC2; // retn 8 + *((short*)(mForwarderThunk+25))=8; // "" "" +} + +DWORD InterceptGetComputerName::getAddress(void) +{ + Library k32("kernel32.dll"); + + if(!k32.isOkay())return false; + return (DWORD)k32.procAddress("GetComputerNameW"); +} + +bool InterceptGetComputerName::setForwarderThunk(void) +{ + DWORD countBytes; + + mThisProcess.writeProcessMemory((void*)mBaseAddress,mForwarderThunk,sizeof(mForwarderThunk),&countBytes); + return countBytes==sizeof(mForwarderThunk); +} + +int InterceptGetComputerName::getcomputername(LPSTR lpComputerName,LPDWORD cbBytes) +{ + InterceptGetComputerName *pInterceptGetComputerName; + _asm mov pInterceptGetComputerName,ecx; + ::strcpy(lpComputerName,"ganymede"); + *cbBytes=::strlen("ganymede"); +// return pInterceptGetHostByName->mpHostEnt; + return 1; +} + + + + +// ****************************************************************** + + +LONG CExeModule::Unlock() +{ + LONG l = CComModule::Unlock(); + if (l == 0) + { +#if _WIN32_WINNT >= 0x0400 + if (CoSuspendClassObjects() == S_OK) + PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); +#else + PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); +#endif + } + return l; +} + +CExeModule _Module; + +BEGIN_OBJECT_MAP(ObjectMap) + OBJECT_ENTRY(CLSID_CoRemoteProcess, RemoteProcess) +END_OBJECT_MAP() + + +LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2) +{ + while (*p1 != NULL) + { + LPCTSTR p = p2; + while (*p != NULL) + { + if (*p1 == *p++) + return p1+1; + } + p1++; + } + return NULL; +} + + +///////////////////////////////////////////////////////////////////////////// + +extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/) +{ + HRESULT hRes; + ComObj comObj; + +// InterceptGetHostByName interceptGetHostByName("scas1user120.li.net"); +// InterceptGetComputerName interceptGetComputerName("ganymede"); + + + + + + lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT + +// HRESULT hRes = CoInitialize(NULL); + hRes = CoInitialize(NULL); +// If you are running on NT 4.0 or higher you can use the following call +// instead to make the EXE free threaded. +// This means that calls come in on a random RPC thread +// hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED); +// _ASSERTE(SUCCEEDED(hRes)); + _Module.Init(ObjectMap, hInstance); + _Module.dwThreadID = GetCurrentThreadId(); + TCHAR szTokens[] = _T("-/"); + + int nRet = 0; + BOOL bRun = TRUE; + LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens); + while (lpszToken != NULL) + { + if (lstrcmpi(lpszToken, _T("UnregServer"))==0) + { + _Module.UpdateRegistryFromResource(IDR_Remoteps, FALSE); + nRet = _Module.UnregisterServer(); + bRun = FALSE; + break; + } + if (lstrcmpi(lpszToken, _T("RegServer"))==0) + { + _Module.UpdateRegistryFromResource(IDR_Remoteps, TRUE); + nRet = _Module.RegisterServer(TRUE); + bRun = FALSE; + break; + } + lpszToken = FindOneOf(lpszToken, szTokens); + } + + if (bRun) + { + hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,REGCLS_MULTIPLEUSE); + _ASSERTE(SUCCEEDED(hRes)); + + MSG msg; + while (GetMessage(&msg, 0, 0, 0)) + DispatchMessage(&msg); + + _Module.RevokeClassObjects(); + } + CoUninitialize(); + return nRet; +} + diff --git a/remoteps/remoteps.dsp b/remoteps/remoteps.dsp new file mode 100644 index 0000000..b21a764 --- /dev/null +++ b/remoteps/remoteps.dsp @@ -0,0 +1,465 @@ +# Microsoft Developer Studio Project File - Name="remoteps" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=remoteps - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "remoteps.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "remoteps.mak" CFG="remoteps - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "remoteps - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Debug" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Release MinSize" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Release MinDependency" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Release MinSize" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Release MinDependency" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /Gz /MTd /Gm /ZI /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /D "_ATL_FREE_THREADED" /YX"windows.hpp" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:windows /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none +# Begin Custom Build - Performing registration +OutDir=.\Debug +TargetPath=.\Debug\remoteps.exe +InputPath=.\Debug\remoteps.exe +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "DebugU" +# PROP BASE Intermediate_Dir "DebugU" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "DebugU" +# PROP Intermediate_Dir "DebugU" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"wWinMainCRTStartup" /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"wWinMainCRTStartup" /subsystem:windows /debug /machine:I386 /pdbtype:sept +# Begin Custom Build - Performing registration +OutDir=.\DebugU +TargetPath=.\DebugU\remoteps.exe +InputPath=.\DebugU\remoteps.exe +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinSize" +# PROP BASE Intermediate_Dir "ReleaseMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinSize" +# PROP Intermediate_Dir "ReleaseMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseMinSize +TargetPath=.\ReleaseMinSize\remoteps.exe +InputPath=.\ReleaseMinSize\remoteps.exe +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseMinDependency" +# PROP BASE Intermediate_Dir "ReleaseMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseMinDependency" +# PROP Intermediate_Dir "ReleaseMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseMinDependency +TargetPath=.\ReleaseMinDependency\remoteps.exe +InputPath=.\ReleaseMinDependency\remoteps.exe +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinSize" +# PROP BASE Intermediate_Dir "ReleaseUMinSize" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinSize" +# PROP Intermediate_Dir "ReleaseUMinSize" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseUMinSize +TargetPath=.\ReleaseUMinSize\remoteps.exe +InputPath=.\ReleaseUMinSize\remoteps.exe +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "ReleaseUMinDependency" +# PROP BASE Intermediate_Dir "ReleaseUMinDependency" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "ReleaseUMinDependency" +# PROP Intermediate_Dir "ReleaseUMinDependency" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# Begin Custom Build - Performing registration +OutDir=.\ReleaseUMinDependency +TargetPath=.\ReleaseUMinDependency\remoteps.exe +InputPath=.\ReleaseUMinDependency\remoteps.exe +SOURCE="$(InputPath)" + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + +# End Custom Build + +!ENDIF + +# Begin Target + +# Name "remoteps - Win32 Debug" +# Name "remoteps - Win32 Unicode Debug" +# Name "remoteps - Win32 Release MinSize" +# Name "remoteps - Win32 Release MinDependency" +# Name "remoteps - Win32 Unicode Release MinSize" +# Name "remoteps - Win32 Unicode Release MinDependency" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\intercpt.cpp +# End Source File +# Begin Source File + +SOURCE=.\RemoteProcess.cpp +# End Source File +# Begin Source File + +SOURCE=.\RemoteProcessImpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\remoteps.cpp +# End Source File +# Begin Source File + +SOURCE=.\remoteps.idl + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build - Performing MIDL step +InputPath=.\remoteps.idl + +BuildCmds= \ + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +".\remoteps.tlb" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +".\remoteps_i.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\remoteps.rc +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.cpp +# ADD CPP /Yc"stdafx.h" +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\RemoteProcess.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resource.h +# End Source File +# Begin Source File + +SOURCE=.\StdAfx.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\APISPY.BMP +# End Source File +# Begin Source File + +SOURCE=..\EXE\com.lib +# End Source File +# End Group +# Begin Source File + +SOURCE=.\RemoteProcess.rgs +# End Source File +# Begin Source File + +SOURCE=.\remoteps.rgs +# End Source File +# Begin Source File + +SOURCE=..\EXE\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\EXE\psapint.lib +# End Source File +# End Target +# End Project diff --git a/remoteps/remoteps.dsw b/remoteps/remoteps.dsw new file mode 100644 index 0000000..f32aa15 --- /dev/null +++ b/remoteps/remoteps.dsw @@ -0,0 +1,122 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\BSPTREE\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "fileio"=..\FILEIO\fileio.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "image"=..\IMAGE\image.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpeg6b"="..\..\parts\jpeg-6b\jpeg6b.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "remoteps"=.\remoteps.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name apiparse + End Project Dependency + Begin Project Dependency + Project_Dep_Name fileio + End Project Dependency + Begin Project Dependency + Project_Dep_Name image + End Project Dependency + Begin Project Dependency + Project_Dep_Name socket + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpeg6b + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Project: "socket"=..\SOCKET\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/remoteps/remoteps.h b/remoteps/remoteps.h new file mode 100644 index 0000000..86152d8 --- /dev/null +++ b/remoteps/remoteps.h @@ -0,0 +1,353 @@ +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + +/* File created by MIDL compiler version 5.01.0164 */ +/* at Tue Jun 10 07:16:23 2003 + */ +/* Compiler settings for remoteps.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: allocation ref bounds_check enum stub_data +*/ +//@@MIDL_FILE_HEADING( ) + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 440 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __remoteps_h__ +#define __remoteps_h__ + +#ifdef __cplusplus +extern "C"{ +#endif + +/* Forward Declarations */ + +#ifndef __IRemoteProcess_FWD_DEFINED__ +#define __IRemoteProcess_FWD_DEFINED__ +typedef interface IRemoteProcess IRemoteProcess; +#endif /* __IRemoteProcess_FWD_DEFINED__ */ + + +#ifndef __CoRemoteProcess_FWD_DEFINED__ +#define __CoRemoteProcess_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class CoRemoteProcess CoRemoteProcess; +#else +typedef struct CoRemoteProcess CoRemoteProcess; +#endif /* __cplusplus */ + +#endif /* __CoRemoteProcess_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" + +void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t); +void __RPC_USER MIDL_user_free( void __RPC_FAR * ); + +#ifndef __IRemoteProcess_INTERFACE_DEFINED__ +#define __IRemoteProcess_INTERFACE_DEFINED__ + +/* interface IRemoteProcess */ +/* [object][unique][helpstring][uuid] */ + + +EXTERN_C const IID IID_IRemoteProcess; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("BD20693E-8D8A-11D3-B2F0-0050043ED4DB") + IRemoteProcess : public IUnknown + { + public: + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Snapshot( + /* [retval][out] */ VARIANT __RPC_FAR *pVariant) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetProcessFirst( + /* [retval][out] */ VARIANT __RPC_FAR *pVariant) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetProcessNext( + /* [retval][out] */ VARIANT __RPC_FAR *pVariant) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetModuleFirst( + /* [retval][out] */ VARIANT __RPC_FAR *pVariant) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetModuleNext( + /* [retval][out] */ VARIANT __RPC_FAR *pVariant) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetDesktopWindow( + /* [retval][out] */ VARIANT __RPC_FAR *pVariant) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetProcessTimes( + /* [in] */ VARIANT __RPC_FAR *pVariant, + /* [out] */ DATE __RPC_FAR *pCreationTime, + /* [out] */ DATE __RPC_FAR *pExitTime, + /* [out] */ DATE __RPC_FAR *pKernelTime, + /* [out] */ DATE __RPC_FAR *pUserTime) = 0; + + virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Kill( + /* [retval][out] */ VARIANT __RPC_FAR *pVariant) = 0; + + }; + +#else /* C style interface */ + + typedef struct IRemoteProcessVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IRemoteProcess __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IRemoteProcess __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IRemoteProcess __RPC_FAR * This); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Snapshot )( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetProcessFirst )( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetProcessNext )( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetModuleFirst )( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetModuleNext )( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetDesktopWindow )( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetProcessTimes )( + IRemoteProcess __RPC_FAR * This, + /* [in] */ VARIANT __RPC_FAR *pVariant, + /* [out] */ DATE __RPC_FAR *pCreationTime, + /* [out] */ DATE __RPC_FAR *pExitTime, + /* [out] */ DATE __RPC_FAR *pKernelTime, + /* [out] */ DATE __RPC_FAR *pUserTime); + + /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Kill )( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + END_INTERFACE + } IRemoteProcessVtbl; + + interface IRemoteProcess + { + CONST_VTBL struct IRemoteProcessVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IRemoteProcess_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IRemoteProcess_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IRemoteProcess_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IRemoteProcess_Snapshot(This,pVariant) \ + (This)->lpVtbl -> Snapshot(This,pVariant) + +#define IRemoteProcess_GetProcessFirst(This,pVariant) \ + (This)->lpVtbl -> GetProcessFirst(This,pVariant) + +#define IRemoteProcess_GetProcessNext(This,pVariant) \ + (This)->lpVtbl -> GetProcessNext(This,pVariant) + +#define IRemoteProcess_GetModuleFirst(This,pVariant) \ + (This)->lpVtbl -> GetModuleFirst(This,pVariant) + +#define IRemoteProcess_GetModuleNext(This,pVariant) \ + (This)->lpVtbl -> GetModuleNext(This,pVariant) + +#define IRemoteProcess_GetDesktopWindow(This,pVariant) \ + (This)->lpVtbl -> GetDesktopWindow(This,pVariant) + +#define IRemoteProcess_GetProcessTimes(This,pVariant,pCreationTime,pExitTime,pKernelTime,pUserTime) \ + (This)->lpVtbl -> GetProcessTimes(This,pVariant,pCreationTime,pExitTime,pKernelTime,pUserTime) + +#define IRemoteProcess_Kill(This,pVariant) \ + (This)->lpVtbl -> Kill(This,pVariant) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_Snapshot_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + +void __RPC_STUB IRemoteProcess_Snapshot_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_GetProcessFirst_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + +void __RPC_STUB IRemoteProcess_GetProcessFirst_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_GetProcessNext_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + +void __RPC_STUB IRemoteProcess_GetProcessNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_GetModuleFirst_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + +void __RPC_STUB IRemoteProcess_GetModuleFirst_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_GetModuleNext_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + +void __RPC_STUB IRemoteProcess_GetModuleNext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_GetDesktopWindow_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + +void __RPC_STUB IRemoteProcess_GetDesktopWindow_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_GetProcessTimes_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [in] */ VARIANT __RPC_FAR *pVariant, + /* [out] */ DATE __RPC_FAR *pCreationTime, + /* [out] */ DATE __RPC_FAR *pExitTime, + /* [out] */ DATE __RPC_FAR *pKernelTime, + /* [out] */ DATE __RPC_FAR *pUserTime); + + +void __RPC_STUB IRemoteProcess_GetProcessTimes_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +/* [helpstring] */ HRESULT STDMETHODCALLTYPE IRemoteProcess_Kill_Proxy( + IRemoteProcess __RPC_FAR * This, + /* [retval][out] */ VARIANT __RPC_FAR *pVariant); + + +void __RPC_STUB IRemoteProcess_Kill_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IRemoteProcess_INTERFACE_DEFINED__ */ + + + +#ifndef __REMOTEPSLib_LIBRARY_DEFINED__ +#define __REMOTEPSLib_LIBRARY_DEFINED__ + +/* library REMOTEPSLib */ +/* [helpstring][version][uuid] */ + + +EXTERN_C const IID LIBID_REMOTEPSLib; + +EXTERN_C const CLSID CLSID_CoRemoteProcess; + +#ifdef __cplusplus + +class DECLSPEC_UUID("BD20693F-8D8A-11D3-B2F0-0050043ED4DB") +CoRemoteProcess; +#endif +#endif /* __REMOTEPSLib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +unsigned long __RPC_USER VARIANT_UserSize( unsigned long __RPC_FAR *, unsigned long , VARIANT __RPC_FAR * ); +unsigned char __RPC_FAR * __RPC_USER VARIANT_UserMarshal( unsigned long __RPC_FAR *, unsigned char __RPC_FAR *, VARIANT __RPC_FAR * ); +unsigned char __RPC_FAR * __RPC_USER VARIANT_UserUnmarshal(unsigned long __RPC_FAR *, unsigned char __RPC_FAR *, VARIANT __RPC_FAR * ); +void __RPC_USER VARIANT_UserFree( unsigned long __RPC_FAR *, VARIANT __RPC_FAR * ); + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/remoteps/remoteps.idl b/remoteps/remoteps.idl new file mode 100644 index 0000000..8352b06 --- /dev/null +++ b/remoteps/remoteps.idl @@ -0,0 +1,46 @@ +// remoteps.idl : IDL source for remoteps.dll +// + +// This file will be processed by the MIDL tool to +// produce the type library (remoteps.tlb) and marshalling code. + +import "oaidl.idl"; +import "ocidl.idl"; + + [ + + uuid(BD20693E-8D8A-11D3-B2F0-0050043ED4DB), + + helpstring("IRemoteProcess Interface"), + pointer_default(unique) + ] + interface IRemoteProcess : IUnknown + { + [helpstring("method Snapshot")] HRESULT Snapshot([out, retval] VARIANT *pVariant); + [helpstring("method GetProcessFirst")] HRESULT GetProcessFirst([out, retval] VARIANT *pVariant); + [helpstring("method GetProcessNext")] HRESULT GetProcessNext([out, retval] VARIANT *pVariant); + [helpstring("method GetModuleFirst")] HRESULT GetModuleFirst([out, retval] VARIANT *pVariant); + [helpstring("method GetModuleNext")] HRESULT GetModuleNext([out, retval] VARIANT *pVariant); + [helpstring("method GetDesktopWindow")] HRESULT GetDesktopWindow([out,retval] VARIANT *pVariant); + [helpstring("method GetProcessTimes")] HRESULT GetProcessTimes([in] VARIANT *pVariant,[out] DATE *pCreationTime,[out] DATE *pExitTime,[out] DATE *pKernelTime,[out] DATE *pUserTime); + [helpstring("method Kill")] HRESULT Kill([out, retval] VARIANT *pVariant); + }; +[ + uuid(BD206931-8D8A-11D3-B2F0-0050043ED4DB), + version(1.0), + helpstring("remoteps 1.0 Type Library") +] +library REMOTEPSLib +{ + importlib("stdole32.tlb"); + importlib("stdole2.tlb"); + + [ + uuid(BD20693F-8D8A-11D3-B2F0-0050043ED4DB), + helpstring("RemoteProcess Class") + ] + coclass CoRemoteProcess + { + [default] interface IRemoteProcess; + }; +}; diff --git a/remoteps/remoteps.mak b/remoteps/remoteps.mak new file mode 100644 index 0000000..52f8a79 --- /dev/null +++ b/remoteps/remoteps.mak @@ -0,0 +1,916 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on remoteps.dsp +!IF "$(CFG)" == "" +CFG=remoteps - Win32 Debug +!MESSAGE No configuration specified. Defaulting to remoteps - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "remoteps - Win32 Debug" && "$(CFG)" !=\ + "remoteps - Win32 Unicode Debug" && "$(CFG)" !=\ + "remoteps - Win32 Release MinSize" && "$(CFG)" !=\ + "remoteps - Win32 Release MinDependency" && "$(CFG)" !=\ + "remoteps - Win32 Unicode Release MinSize" && "$(CFG)" !=\ + "remoteps - Win32 Unicode Release MinDependency" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "remoteps.mak" CFG="remoteps - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "remoteps - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Debug" (based on "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Release MinSize" (based on\ + "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Release MinDependency" (based on\ + "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Release MinSize" (based on\ + "Win32 (x86) Application") +!MESSAGE "remoteps - Win32 Unicode Release MinDependency" (based on\ + "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +OUTDIR=.\Debug +INTDIR=.\Debug +# Begin Custom Macros +OutDir=.\Debug +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ELSE + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\RemoteProcess.obj" + -@erase "$(INTDIR)\remoteps.obj" + -@erase "$(INTDIR)\remoteps.pch" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\StdAfx.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "$(OUTDIR)\remoteps.exe" + -@erase "$(OUTDIR)\remoteps.ilk" + -@erase "$(OUTDIR)\remoteps.pdb" + -@erase "$(OutDir)\regsvr32.trg" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /Zp1 /MLd /W1 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)\remoteps.pch" /Yu"stdafx.h"\ + /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Debug/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "_DEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remoteps.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)\remoteps.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)\remoteps.exe" /pdbtype:sept +LINK32_OBJS= \ + "$(INTDIR)\RemoteProcess.obj" \ + "$(INTDIR)\remoteps.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\StdAfx.obj" \ + "..\EXE\mscommon.lib" \ + "..\EXE\psapint.lib" + +"$(OUTDIR)\remoteps.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +OutDir=.\Debug +TargetPath=.\Debug\remoteps.exe +InputPath=.\Debug\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +OUTDIR=.\DebugU +INTDIR=.\DebugU +# Begin Custom Macros +OutDir=.\DebugU +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ELSE + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\RemoteProcess.obj" + -@erase "$(INTDIR)\remoteps.obj" + -@erase "$(INTDIR)\remoteps.pch" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\StdAfx.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "$(OUTDIR)\remoteps.exe" + -@erase "$(OUTDIR)\remoteps.ilk" + -@erase "$(OUTDIR)\remoteps.pdb" + -@erase "$(OutDir)\regsvr32.trg" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /MLd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "_UNICODE" /Fp"$(INTDIR)\remoteps.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\DebugU/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "_DEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remoteps.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /entry:"wWinMainCRTStartup" /subsystem:windows\ + /incremental:yes /pdb:"$(OUTDIR)\remoteps.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)\remoteps.exe" /pdbtype:sept +LINK32_OBJS= \ + "$(INTDIR)\RemoteProcess.obj" \ + "$(INTDIR)\remoteps.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\StdAfx.obj" \ + "..\EXE\mscommon.lib" \ + "..\EXE\psapint.lib" + +"$(OUTDIR)\remoteps.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +OutDir=.\DebugU +TargetPath=.\DebugU\remoteps.exe +InputPath=.\DebugU\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +OUTDIR=.\ReleaseMinSize +INTDIR=.\ReleaseMinSize +# Begin Custom Macros +OutDir=.\ReleaseMinSize +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ELSE + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\RemoteProcess.obj" + -@erase "$(INTDIR)\remoteps.obj" + -@erase "$(INTDIR)\remoteps.pch" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\StdAfx.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\remoteps.exe" + -@erase "$(OutDir)\regsvr32.trg" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_ATL_DLL"\ + /D "_ATL_MIN_CRT" /Fp"$(INTDIR)\remoteps.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\ReleaseMinSize/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remoteps.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\remoteps.pdb" /machine:I386 /out:"$(OUTDIR)\remoteps.exe" +LINK32_OBJS= \ + "$(INTDIR)\RemoteProcess.obj" \ + "$(INTDIR)\remoteps.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\StdAfx.obj" \ + "..\EXE\mscommon.lib" \ + "..\EXE\psapint.lib" + +"$(OUTDIR)\remoteps.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +OutDir=.\ReleaseMinSize +TargetPath=.\ReleaseMinSize\remoteps.exe +InputPath=.\ReleaseMinSize\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +OUTDIR=.\ReleaseMinDependency +INTDIR=.\ReleaseMinDependency +# Begin Custom Macros +OutDir=.\ReleaseMinDependency +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ELSE + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\RemoteProcess.obj" + -@erase "$(INTDIR)\remoteps.obj" + -@erase "$(INTDIR)\remoteps.pch" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\StdAfx.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\remoteps.exe" + -@erase "$(OutDir)\regsvr32.trg" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ + "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Fp"$(INTDIR)\remoteps.pch"\ + /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\ReleaseMinDependency/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remoteps.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\remoteps.pdb" /machine:I386 /out:"$(OUTDIR)\remoteps.exe" +LINK32_OBJS= \ + "$(INTDIR)\RemoteProcess.obj" \ + "$(INTDIR)\remoteps.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\StdAfx.obj" \ + "..\EXE\mscommon.lib" \ + "..\EXE\psapint.lib" + +"$(OUTDIR)\remoteps.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +OutDir=.\ReleaseMinDependency +TargetPath=.\ReleaseMinDependency\remoteps.exe +InputPath=.\ReleaseMinDependency\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +OUTDIR=.\ReleaseUMinSize +INTDIR=.\ReleaseUMinSize +# Begin Custom Macros +OutDir=.\ReleaseUMinSize +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ELSE + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\RemoteProcess.obj" + -@erase "$(INTDIR)\remoteps.obj" + -@erase "$(INTDIR)\remoteps.pch" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\StdAfx.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\remoteps.exe" + -@erase "$(OutDir)\regsvr32.trg" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE"\ + /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Fp"$(INTDIR)\remoteps.pch" /Yu"stdafx.h"\ + /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\ReleaseUMinSize/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remoteps.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\remoteps.pdb" /machine:I386 /out:"$(OUTDIR)\remoteps.exe" +LINK32_OBJS= \ + "$(INTDIR)\RemoteProcess.obj" \ + "$(INTDIR)\remoteps.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\StdAfx.obj" \ + "..\EXE\mscommon.lib" \ + "..\EXE\psapint.lib" + +"$(OUTDIR)\remoteps.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +OutDir=.\ReleaseUMinSize +TargetPath=.\ReleaseUMinSize\remoteps.exe +InputPath=.\ReleaseUMinSize\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +OUTDIR=.\ReleaseUMinDependency +INTDIR=.\ReleaseUMinDependency +# Begin Custom Macros +OutDir=.\ReleaseUMinDependency +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ELSE + +ALL : "$(OUTDIR)\remoteps.exe" "$(OutDir)\regsvr32.trg" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\RemoteProcess.obj" + -@erase "$(INTDIR)\remoteps.obj" + -@erase "$(INTDIR)\remoteps.pch" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\StdAfx.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\remoteps.exe" + -@erase "$(OutDir)\regsvr32.trg" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE"\ + /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Fp"$(INTDIR)\remoteps.pch"\ + /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\ReleaseUMinDependency/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remoteps.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\remoteps.pdb" /machine:I386 /out:"$(OUTDIR)\remoteps.exe" +LINK32_OBJS= \ + "$(INTDIR)\RemoteProcess.obj" \ + "$(INTDIR)\remoteps.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\StdAfx.obj" \ + "..\EXE\mscommon.lib" \ + "..\EXE\psapint.lib" + +"$(OUTDIR)\remoteps.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +OutDir=.\ReleaseUMinDependency +TargetPath=.\ReleaseUMinDependency\remoteps.exe +InputPath=.\ReleaseUMinDependency\remoteps.exe +SOURCE=$(InputPath) + +"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + "$(TargetPath)" /RegServer + echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" + echo Server registration done! + + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "remoteps - Win32 Debug" || "$(CFG)" ==\ + "remoteps - Win32 Unicode Debug" || "$(CFG)" ==\ + "remoteps - Win32 Release MinSize" || "$(CFG)" ==\ + "remoteps - Win32 Release MinDependency" || "$(CFG)" ==\ + "remoteps - Win32 Unicode Release MinSize" || "$(CFG)" ==\ + "remoteps - Win32 Unicode Release MinDependency" +SOURCE=.\RemoteProcess.cpp + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +DEP_CPP_REMOT=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\console.hpp"\ + {$(INCLUDE)}"common\coord.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\library.hpp"\ + {$(INCLUDE)}"common\scrnbuff.hpp"\ + {$(INCLUDE)}"common\smrect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"psapi\psapi.h"\ + {$(INCLUDE)}"psapint\modinfo.hpp"\ + {$(INCLUDE)}"psapint\procid.hpp"\ + {$(INCLUDE)}"psapint\procinfo.hpp"\ + {$(INCLUDE)}"psapint\psapi.hpp"\ + + +"$(INTDIR)\RemoteProcess.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +DEP_CPP_REMOT=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\StdAfx.h"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\console.hpp"\ + {$(INCLUDE)}"common\coord.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\library.hpp"\ + {$(INCLUDE)}"common\scrnbuff.hpp"\ + {$(INCLUDE)}"common\smrect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"psapi\psapi.h"\ + {$(INCLUDE)}"psapint\modinfo.hpp"\ + {$(INCLUDE)}"psapint\procid.hpp"\ + {$(INCLUDE)}"psapint\procinfo.hpp"\ + {$(INCLUDE)}"psapint\psapi.hpp"\ + + +"$(INTDIR)\RemoteProcess.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +DEP_CPP_REMOT=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\StdAfx.h"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\console.hpp"\ + {$(INCLUDE)}"common\coord.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\library.hpp"\ + {$(INCLUDE)}"common\scrnbuff.hpp"\ + {$(INCLUDE)}"common\smrect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"psapi\psapi.h"\ + {$(INCLUDE)}"psapint\modinfo.hpp"\ + {$(INCLUDE)}"psapint\procid.hpp"\ + {$(INCLUDE)}"psapint\procinfo.hpp"\ + {$(INCLUDE)}"psapint\psapi.hpp"\ + + +"$(INTDIR)\RemoteProcess.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +DEP_CPP_REMOT=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\StdAfx.h"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\console.hpp"\ + {$(INCLUDE)}"common\coord.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\library.hpp"\ + {$(INCLUDE)}"common\scrnbuff.hpp"\ + {$(INCLUDE)}"common\smrect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"psapi\psapi.h"\ + {$(INCLUDE)}"psapint\modinfo.hpp"\ + {$(INCLUDE)}"psapint\procid.hpp"\ + {$(INCLUDE)}"psapint\procinfo.hpp"\ + {$(INCLUDE)}"psapint\psapi.hpp"\ + + +"$(INTDIR)\RemoteProcess.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +DEP_CPP_REMOT=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\StdAfx.h"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\console.hpp"\ + {$(INCLUDE)}"common\coord.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\library.hpp"\ + {$(INCLUDE)}"common\scrnbuff.hpp"\ + {$(INCLUDE)}"common\smrect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"psapi\psapi.h"\ + {$(INCLUDE)}"psapint\modinfo.hpp"\ + {$(INCLUDE)}"psapint\procid.hpp"\ + {$(INCLUDE)}"psapint\procinfo.hpp"\ + {$(INCLUDE)}"psapint\psapi.hpp"\ + + +"$(INTDIR)\RemoteProcess.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +DEP_CPP_REMOT=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\StdAfx.h"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\console.hpp"\ + {$(INCLUDE)}"common\coord.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\library.hpp"\ + {$(INCLUDE)}"common\scrnbuff.hpp"\ + {$(INCLUDE)}"common\smrect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"psapi\psapi.h"\ + {$(INCLUDE)}"psapint\modinfo.hpp"\ + {$(INCLUDE)}"psapint\procid.hpp"\ + {$(INCLUDE)}"psapint\procinfo.hpp"\ + {$(INCLUDE)}"psapint\psapi.hpp"\ + + +"$(INTDIR)\RemoteProcess.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" + + +!ENDIF + +SOURCE=.\remoteps.cpp + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +DEP_CPP_REMOTE=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\remoteps_i.c"\ + + +"$(INTDIR)\remoteps.obj" : $(SOURCE) $(DEP_CPP_REMOTE) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" ".\remoteps_i.c" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +DEP_CPP_REMOTE=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\remoteps_i.c"\ + ".\StdAfx.h"\ + + +"$(INTDIR)\remoteps.obj" : $(SOURCE) $(DEP_CPP_REMOTE) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" ".\remoteps_i.c" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +DEP_CPP_REMOTE=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\remoteps_i.c"\ + ".\StdAfx.h"\ + + +"$(INTDIR)\remoteps.obj" : $(SOURCE) $(DEP_CPP_REMOTE) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" ".\remoteps_i.c" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +DEP_CPP_REMOTE=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\remoteps_i.c"\ + ".\StdAfx.h"\ + + +"$(INTDIR)\remoteps.obj" : $(SOURCE) $(DEP_CPP_REMOTE) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" ".\remoteps_i.c" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +DEP_CPP_REMOTE=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\remoteps_i.c"\ + ".\StdAfx.h"\ + + +"$(INTDIR)\remoteps.obj" : $(SOURCE) $(DEP_CPP_REMOTE) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" ".\remoteps_i.c" + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +DEP_CPP_REMOTE=\ + ".\RemoteProcess.hpp"\ + ".\remoteps.h"\ + ".\remoteps_i.c"\ + ".\StdAfx.h"\ + + +"$(INTDIR)\remoteps.obj" : $(SOURCE) $(DEP_CPP_REMOTE) "$(INTDIR)"\ + "$(INTDIR)\remoteps.pch" ".\remoteps.h" ".\remoteps_i.c" + + +!ENDIF + +SOURCE=.\remoteps.idl + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +InputPath=.\remoteps.idl + +".\remoteps.tlb" ".\remoteps.h" ".\remoteps_i.c" : $(SOURCE) "$(INTDIR)"\ + "$(OUTDIR)" + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +InputPath=.\remoteps.idl + +".\remoteps.tlb" ".\remoteps.h" ".\remoteps_i.c" : $(SOURCE) "$(INTDIR)"\ + "$(OUTDIR)" + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +InputPath=.\remoteps.idl + +".\remoteps.tlb" ".\remoteps.h" ".\remoteps_i.c" : $(SOURCE) "$(INTDIR)"\ + "$(OUTDIR)" + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +InputPath=.\remoteps.idl + +".\remoteps.tlb" ".\remoteps.h" ".\remoteps_i.c" : $(SOURCE) "$(INTDIR)"\ + "$(OUTDIR)" + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +InputPath=.\remoteps.idl + +".\remoteps.tlb" ".\remoteps.h" ".\remoteps_i.c" : $(SOURCE) "$(INTDIR)"\ + "$(OUTDIR)" + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +InputPath=.\remoteps.idl + +".\remoteps.tlb" ".\remoteps.h" ".\remoteps_i.c" : $(SOURCE) "$(INTDIR)"\ + "$(OUTDIR)" + midl /Oicf /h "remoteps.h" /iid "remoteps_i.c" "remoteps.idl" + +!ENDIF + +SOURCE=.\remoteps.rc +DEP_RSC_REMOTEP=\ + ".\RemoteProcess.rgs"\ + ".\remoteps.rgs"\ + ".\remoteps.tlb"\ + + +"$(INTDIR)\remoteps.res" : $(SOURCE) $(DEP_RSC_REMOTEP) "$(INTDIR)"\ + ".\remoteps.tlb" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +SOURCE=.\StdAfx.cpp +DEP_CPP_STDAF=\ + ".\StdAfx.h"\ + + +!IF "$(CFG)" == "remoteps - Win32 Debug" + +CPP_SWITCHES=/nologo /Zp1 /MLd /W1 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D\ + "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)\remoteps.pch" /Yc"stdafx.h"\ + /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\StdAfx.obj" "$(INTDIR)\remoteps.pch" : $(SOURCE) $(DEP_CPP_STDAF)\ + "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Debug" + +CPP_SWITCHES=/nologo /MLd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "_UNICODE" /Fp"$(INTDIR)\remoteps.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\StdAfx.obj" "$(INTDIR)\remoteps.pch" : $(SOURCE) $(DEP_CPP_STDAF)\ + "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinSize" + +CPP_SWITCHES=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ + "_ATL_DLL" /D "_ATL_MIN_CRT" /Fp"$(INTDIR)\remoteps.pch" /Yc"stdafx.h"\ + /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\StdAfx.obj" "$(INTDIR)\remoteps.pch" : $(SOURCE) $(DEP_CPP_STDAF)\ + "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Release MinDependency" + +CPP_SWITCHES=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ + "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Fp"$(INTDIR)\remoteps.pch"\ + /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\StdAfx.obj" "$(INTDIR)\remoteps.pch" : $(SOURCE) $(DEP_CPP_STDAF)\ + "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinSize" + +CPP_SWITCHES=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ + "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Fp"$(INTDIR)\remoteps.pch"\ + /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c + +"$(INTDIR)\StdAfx.obj" "$(INTDIR)\remoteps.pch" : $(SOURCE) $(DEP_CPP_STDAF)\ + "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ELSEIF "$(CFG)" == "remoteps - Win32 Unicode Release MinDependency" + +CPP_SWITCHES=/nologo /ML /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D\ + "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT"\ + /Fp"$(INTDIR)\remoteps.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD\ + /c + +"$(INTDIR)\StdAfx.obj" "$(INTDIR)\remoteps.pch" : $(SOURCE) $(DEP_CPP_STDAF)\ + "$(INTDIR)" + $(CPP) @<< + $(CPP_SWITCHES) $(SOURCE) +<< + + +!ENDIF + + +!ENDIF + diff --git a/remoteps/remoteps.ncb b/remoteps/remoteps.ncb new file mode 100644 index 0000000..d138d5e Binary files /dev/null and b/remoteps/remoteps.ncb differ diff --git a/remoteps/remoteps.opt b/remoteps/remoteps.opt new file mode 100644 index 0000000..34cba23 Binary files /dev/null and b/remoteps/remoteps.opt differ diff --git a/remoteps/remoteps.plg b/remoteps/remoteps.plg new file mode 100644 index 0000000..24e5eb9 --- /dev/null +++ b/remoteps/remoteps.plg @@ -0,0 +1,48 @@ + + +
+

Build Log

+

+--------------------Configuration: remoteps - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP99.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib wsock32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/remoteps.pdb" /machine:I386 /out:"Debug/remoteps.exe" /pdbtype:sept +.\Debug\intercpt.obj +.\Debug\RemoteProcess.obj +.\Debug\RemoteProcessImpl.obj +.\Debug\remoteps.obj +.\Debug\StdAfx.obj +.\Debug\remoteps.res +..\EXE\com.lib +..\EXE\mscommon.lib +..\EXE\psapint.lib +\work\exe\msbsp.lib +\work\exe\msfileio.lib +\work\exe\msimage.lib +\work\exe\mssocket.lib +"\parts\jpeg-6b\lib\jpeg6b.lib" +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP99.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP9A.bat" with contents +[ +@echo off +".\Debug\remoteps.exe" /RegServer +echo regsvr32 exec. time > ".\Debug\regsvr32.trg" +echo Server registration done! +] +Creating command line "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP9A.bat" +Linking... + Creating library Debug/remoteps.lib and object Debug/remoteps.exp +

Output Window

+Performing registration +Server registration done! + + + +

Results

+remoteps.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/remoteps/remoteps.rc b/remoteps/remoteps.rc new file mode 100644 index 0000000..0d3d618 --- /dev/null +++ b/remoteps/remoteps.rc @@ -0,0 +1,129 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + + +APISPY BITMAP "APISPY.BMP" + + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "1 TYPELIB ""remoteps.tlb""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "\0" + VALUE "FileDescription", "remoteps Module\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "REMOTEPS\0" + VALUE "LegalCopyright", "Copyright 1997\0" + VALUE "OriginalFilename", "REMOTEPS.DLL\0" + VALUE "ProductName", "remoteps Module\0" + VALUE "ProductVersion", "1, 0, 0, 1\0" + VALUE "OLESelfRegister", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// REGISTRY +// + +IDR_Remoteps REGISTRY MOVEABLE PURE "remoteps.rgs" +IDR_REMOTEPROCESS REGISTRY DISCARDABLE "RemoteProcess.rgs" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + IDS_PROJNAME "Remoteps" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +1 TYPELIB "remoteps.tlb" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/remoteps/remoteps.rgs b/remoteps/remoteps.rgs new file mode 100644 index 0000000..35dcf8b --- /dev/null +++ b/remoteps/remoteps.rgs @@ -0,0 +1,11 @@ +HKCR +{ + NoRemove AppID + { + {BD206932-8D8A-11D3-B2F0-0050043ED4DB} = s 'remoteps' + 'remoteps.EXE' + { + val AppID = s {BD206932-8D8A-11D3-B2F0-0050043ED4DB} + } + } +} diff --git a/remoteps/remoteps.tlb b/remoteps/remoteps.tlb new file mode 100644 index 0000000..2515915 Binary files /dev/null and b/remoteps/remoteps.tlb differ diff --git a/remoteps/remoteps_i.c b/remoteps/remoteps_i.c new file mode 100644 index 0000000..3ebb25f --- /dev/null +++ b/remoteps/remoteps_i.c @@ -0,0 +1,50 @@ +/* this file contains the actual definitions of */ +/* the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + +/* File created by MIDL compiler version 5.01.0164 */ +/* at Tue Jun 10 07:16:23 2003 + */ +/* Compiler settings for remoteps.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: allocation ref bounds_check enum stub_data +*/ +//@@MIDL_FILE_HEADING( ) +#ifdef __cplusplus +extern "C"{ +#endif + + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +const IID IID_IRemoteProcess = {0xBD20693E,0x8D8A,0x11D3,{0xB2,0xF0,0x00,0x50,0x04,0x3E,0xD4,0xDB}}; + + +const IID LIBID_REMOTEPSLib = {0xBD206931,0x8D8A,0x11D3,{0xB2,0xF0,0x00,0x50,0x04,0x3E,0xD4,0xDB}}; + + +const CLSID CLSID_CoRemoteProcess = {0xBD20693F,0x8D8A,0x11D3,{0xB2,0xF0,0x00,0x50,0x04,0x3E,0xD4,0xDB}}; + + +#ifdef __cplusplus +} +#endif + diff --git a/remoteps/remoteps_p.c b/remoteps/remoteps_p.c new file mode 100644 index 0000000..39ac76d --- /dev/null +++ b/remoteps/remoteps_p.c @@ -0,0 +1,1265 @@ +/* this ALWAYS GENERATED file contains the proxy stub code */ + + +/* File created by MIDL compiler version 5.01.0164 */ +/* at Tue Jun 10 07:16:23 2003 + */ +/* Compiler settings for remoteps.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: allocation ref bounds_check enum stub_data +*/ +//@@MIDL_FILE_HEADING( ) + +#define USE_STUBLESS_PROXY + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REDQ_RPCPROXY_H_VERSION__ +#define __REQUIRED_RPCPROXY_H_VERSION__ 440 +#endif + + +#include "rpcproxy.h" +#ifndef __RPCPROXY_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCPROXY_H_VERSION__ + + +#include "remoteps.h" + +#define TYPE_FORMAT_STRING_SIZE 997 +#define PROC_FORMAT_STRING_SIZE 249 + +typedef struct _MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } MIDL_TYPE_FORMAT_STRING; + +typedef struct _MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } MIDL_PROC_FORMAT_STRING; + + +extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString; +extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString; + + +/* Object interface: IUnknown, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IRemoteProcess, ver. 0.0, + GUID={0xBD20693E,0x8D8A,0x11D3,{0xB2,0xF0,0x00,0x50,0x04,0x3E,0xD4,0xDB}} */ + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IRemoteProcess_ServerInfo; + +#pragma code_seg(".orpc") +extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[1]; + +static const MIDL_STUB_DESC Object_StubDesc = + { + 0, + NdrOleAllocate, + NdrOleFree, + 0, + 0, + 0, + 0, + 0, + __MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x20000, /* Ndr library version */ + 0, + 0x50100a4, /* MIDL Version 5.1.164 */ + 0, + UserMarshalRoutines, + 0, /* notify & notify_flag routine table */ + 1, /* Flags */ + 0, /* Reserved3 */ + 0, /* Reserved4 */ + 0 /* Reserved5 */ + }; + +static const unsigned short IRemoteProcess_FormatStringOffsetTable[] = + { + 0, + 28, + 56, + 84, + 112, + 140, + 168, + 220 + }; + +static const MIDL_SERVER_INFO IRemoteProcess_ServerInfo = + { + &Object_StubDesc, + 0, + __MIDL_ProcFormatString.Format, + &IRemoteProcess_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0 + }; + +static const MIDL_STUBLESS_PROXY_INFO IRemoteProcess_ProxyInfo = + { + &Object_StubDesc, + __MIDL_ProcFormatString.Format, + &IRemoteProcess_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + +CINTERFACE_PROXY_VTABLE(11) _IRemoteProcessProxyVtbl = +{ + &IRemoteProcess_ProxyInfo, + &IID_IRemoteProcess, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *)-1 /* IRemoteProcess::Snapshot */ , + (void *)-1 /* IRemoteProcess::GetProcessFirst */ , + (void *)-1 /* IRemoteProcess::GetProcessNext */ , + (void *)-1 /* IRemoteProcess::GetModuleFirst */ , + (void *)-1 /* IRemoteProcess::GetModuleNext */ , + (void *)-1 /* IRemoteProcess::GetDesktopWindow */ , + (void *)-1 /* IRemoteProcess::GetProcessTimes */ , + (void *)-1 /* IRemoteProcess::Kill */ +}; + +const CInterfaceStubVtbl _IRemoteProcessStubVtbl = +{ + &IID_IRemoteProcess, + &IRemoteProcess_ServerInfo, + 11, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + +#pragma data_seg(".rdata") + +static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[1] = + { + + { + VARIANT_UserSize + ,VARIANT_UserMarshal + ,VARIANT_UserUnmarshal + ,VARIANT_UserFree + } + + }; + + +#if !defined(__RPC_WIN32__) +#error Invalid build platform for this stub. +#endif + +#if !(TARGET_IS_NT40_OR_LATER) +#error You need a Windows NT 4.0 or later to run this stub because it uses these features: +#error -Oif or -Oicf, [wire_marshal] or [user_marshal] attribute, more than 32 methods in the interface. +#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems. +#error This app will die there with the RPC_X_WRONG_STUB_VERSION error. +#endif + + +static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString = + { + 0, + { + + /* Procedure Snapshot */ + + 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x3 ), /* 3 */ +#ifndef _ALPHA_ +/* 8 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 10 */ NdrFcShort( 0x0 ), /* 0 */ +/* 12 */ NdrFcShort( 0x8 ), /* 8 */ +/* 14 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter pVariant */ + +/* 16 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +#ifndef _ALPHA_ +/* 18 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 20 */ NdrFcShort( 0x3c4 ), /* Type Offset=964 */ + + /* Return value */ + +/* 22 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 24 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 26 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetProcessFirst */ + +/* 28 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 30 */ NdrFcLong( 0x0 ), /* 0 */ +/* 34 */ NdrFcShort( 0x4 ), /* 4 */ +#ifndef _ALPHA_ +/* 36 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 38 */ NdrFcShort( 0x0 ), /* 0 */ +/* 40 */ NdrFcShort( 0x8 ), /* 8 */ +/* 42 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter pVariant */ + +/* 44 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +#ifndef _ALPHA_ +/* 46 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 48 */ NdrFcShort( 0x3c4 ), /* Type Offset=964 */ + + /* Return value */ + +/* 50 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 52 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 54 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetProcessNext */ + +/* 56 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 58 */ NdrFcLong( 0x0 ), /* 0 */ +/* 62 */ NdrFcShort( 0x5 ), /* 5 */ +#ifndef _ALPHA_ +/* 64 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 66 */ NdrFcShort( 0x0 ), /* 0 */ +/* 68 */ NdrFcShort( 0x8 ), /* 8 */ +/* 70 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter pVariant */ + +/* 72 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +#ifndef _ALPHA_ +/* 74 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 76 */ NdrFcShort( 0x3c4 ), /* Type Offset=964 */ + + /* Return value */ + +/* 78 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 80 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 82 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetModuleFirst */ + +/* 84 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 86 */ NdrFcLong( 0x0 ), /* 0 */ +/* 90 */ NdrFcShort( 0x6 ), /* 6 */ +#ifndef _ALPHA_ +/* 92 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 94 */ NdrFcShort( 0x0 ), /* 0 */ +/* 96 */ NdrFcShort( 0x8 ), /* 8 */ +/* 98 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter pVariant */ + +/* 100 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +#ifndef _ALPHA_ +/* 102 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 104 */ NdrFcShort( 0x3c4 ), /* Type Offset=964 */ + + /* Return value */ + +/* 106 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 108 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 110 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetModuleNext */ + +/* 112 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 114 */ NdrFcLong( 0x0 ), /* 0 */ +/* 118 */ NdrFcShort( 0x7 ), /* 7 */ +#ifndef _ALPHA_ +/* 120 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 122 */ NdrFcShort( 0x0 ), /* 0 */ +/* 124 */ NdrFcShort( 0x8 ), /* 8 */ +/* 126 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter pVariant */ + +/* 128 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +#ifndef _ALPHA_ +/* 130 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 132 */ NdrFcShort( 0x3c4 ), /* Type Offset=964 */ + + /* Return value */ + +/* 134 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 136 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 138 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetDesktopWindow */ + +/* 140 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 142 */ NdrFcLong( 0x0 ), /* 0 */ +/* 146 */ NdrFcShort( 0x8 ), /* 8 */ +#ifndef _ALPHA_ +/* 148 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 150 */ NdrFcShort( 0x0 ), /* 0 */ +/* 152 */ NdrFcShort( 0x8 ), /* 8 */ +/* 154 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter pVariant */ + +/* 156 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +#ifndef _ALPHA_ +/* 158 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 160 */ NdrFcShort( 0x3c4 ), /* Type Offset=964 */ + + /* Return value */ + +/* 162 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 164 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 166 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure GetProcessTimes */ + +/* 168 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 170 */ NdrFcLong( 0x0 ), /* 0 */ +/* 174 */ NdrFcShort( 0x9 ), /* 9 */ +#ifndef _ALPHA_ +/* 176 */ NdrFcShort( 0x1c ), /* x86, MIPS, PPC Stack size/offset = 28 */ +#else + NdrFcShort( 0x38 ), /* Alpha Stack size/offset = 56 */ +#endif +/* 178 */ NdrFcShort( 0x0 ), /* 0 */ +/* 180 */ NdrFcShort( 0x48 ), /* 72 */ +/* 182 */ 0x6, /* Oi2 Flags: clt must size, has return, */ + 0x6, /* 6 */ + + /* Parameter pVariant */ + +/* 184 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +#ifndef _ALPHA_ +/* 186 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 188 */ NdrFcShort( 0x3d6 ), /* Type Offset=982 */ + + /* Parameter pCreationTime */ + +/* 190 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 192 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 194 */ 0xc, /* FC_DOUBLE */ + 0x0, /* 0 */ + + /* Parameter pExitTime */ + +/* 196 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 198 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 200 */ 0xc, /* FC_DOUBLE */ + 0x0, /* 0 */ + + /* Parameter pKernelTime */ + +/* 202 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 204 */ NdrFcShort( 0x10 ), /* x86, MIPS, PPC Stack size/offset = 16 */ +#else + NdrFcShort( 0x20 ), /* Alpha Stack size/offset = 32 */ +#endif +/* 206 */ 0xc, /* FC_DOUBLE */ + 0x0, /* 0 */ + + /* Parameter pUserTime */ + +/* 208 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +#ifndef _ALPHA_ +/* 210 */ NdrFcShort( 0x14 ), /* x86, MIPS, PPC Stack size/offset = 20 */ +#else + NdrFcShort( 0x28 ), /* Alpha Stack size/offset = 40 */ +#endif +/* 212 */ 0xc, /* FC_DOUBLE */ + 0x0, /* 0 */ + + /* Return value */ + +/* 214 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 216 */ NdrFcShort( 0x18 ), /* x86, MIPS, PPC Stack size/offset = 24 */ +#else + NdrFcShort( 0x30 ), /* Alpha Stack size/offset = 48 */ +#endif +/* 218 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure Kill */ + +/* 220 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 222 */ NdrFcLong( 0x0 ), /* 0 */ +/* 226 */ NdrFcShort( 0xa ), /* 10 */ +#ifndef _ALPHA_ +/* 228 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 230 */ NdrFcShort( 0x0 ), /* 0 */ +/* 232 */ NdrFcShort( 0x8 ), /* 8 */ +/* 234 */ 0x5, /* Oi2 Flags: srv must size, has return, */ + 0x2, /* 2 */ + + /* Parameter pVariant */ + +/* 236 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +#ifndef _ALPHA_ +/* 238 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 240 */ NdrFcShort( 0x3c4 ), /* Type Offset=964 */ + + /* Return value */ + +/* 242 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +#ifndef _ALPHA_ +/* 244 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 246 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 4 */ NdrFcShort( 0x3c0 ), /* Offset= 960 (964) */ +/* 6 */ + 0x13, 0x0, /* FC_OP */ +/* 8 */ NdrFcShort( 0x3a8 ), /* Offset= 936 (944) */ +/* 10 */ + 0x2b, /* FC_NON_ENCAPSULATED_UNION */ + 0x9, /* FC_ULONG */ +/* 12 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 14 */ NdrFcShort( 0xfff8 ), /* -8 */ +/* 16 */ NdrFcShort( 0x2 ), /* Offset= 2 (18) */ +/* 18 */ NdrFcShort( 0x10 ), /* 16 */ +/* 20 */ NdrFcShort( 0x2b ), /* 43 */ +/* 22 */ NdrFcLong( 0x3 ), /* 3 */ +/* 26 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 28 */ NdrFcLong( 0x11 ), /* 17 */ +/* 32 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */ +/* 34 */ NdrFcLong( 0x2 ), /* 2 */ +/* 38 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 40 */ NdrFcLong( 0x4 ), /* 4 */ +/* 44 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */ +/* 46 */ NdrFcLong( 0x5 ), /* 5 */ +/* 50 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 52 */ NdrFcLong( 0xb ), /* 11 */ +/* 56 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 58 */ NdrFcLong( 0xa ), /* 10 */ +/* 62 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 64 */ NdrFcLong( 0x6 ), /* 6 */ +/* 68 */ NdrFcShort( 0xd6 ), /* Offset= 214 (282) */ +/* 70 */ NdrFcLong( 0x7 ), /* 7 */ +/* 74 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 76 */ NdrFcLong( 0x8 ), /* 8 */ +/* 80 */ NdrFcShort( 0xd0 ), /* Offset= 208 (288) */ +/* 82 */ NdrFcLong( 0xd ), /* 13 */ +/* 86 */ NdrFcShort( 0xe2 ), /* Offset= 226 (312) */ +/* 88 */ NdrFcLong( 0x9 ), /* 9 */ +/* 92 */ NdrFcShort( 0xee ), /* Offset= 238 (330) */ +/* 94 */ NdrFcLong( 0x2000 ), /* 8192 */ +/* 98 */ NdrFcShort( 0xfa ), /* Offset= 250 (348) */ +/* 100 */ NdrFcLong( 0x24 ), /* 36 */ +/* 104 */ NdrFcShort( 0x304 ), /* Offset= 772 (876) */ +/* 106 */ NdrFcLong( 0x4024 ), /* 16420 */ +/* 110 */ NdrFcShort( 0x2fe ), /* Offset= 766 (876) */ +/* 112 */ NdrFcLong( 0x4011 ), /* 16401 */ +/* 116 */ NdrFcShort( 0x2fc ), /* Offset= 764 (880) */ +/* 118 */ NdrFcLong( 0x4002 ), /* 16386 */ +/* 122 */ NdrFcShort( 0x2fa ), /* Offset= 762 (884) */ +/* 124 */ NdrFcLong( 0x4003 ), /* 16387 */ +/* 128 */ NdrFcShort( 0x2f8 ), /* Offset= 760 (888) */ +/* 130 */ NdrFcLong( 0x4004 ), /* 16388 */ +/* 134 */ NdrFcShort( 0x2f6 ), /* Offset= 758 (892) */ +/* 136 */ NdrFcLong( 0x4005 ), /* 16389 */ +/* 140 */ NdrFcShort( 0x2f4 ), /* Offset= 756 (896) */ +/* 142 */ NdrFcLong( 0x400b ), /* 16395 */ +/* 146 */ NdrFcShort( 0x2e2 ), /* Offset= 738 (884) */ +/* 148 */ NdrFcLong( 0x400a ), /* 16394 */ +/* 152 */ NdrFcShort( 0x2e0 ), /* Offset= 736 (888) */ +/* 154 */ NdrFcLong( 0x4006 ), /* 16390 */ +/* 158 */ NdrFcShort( 0x2e6 ), /* Offset= 742 (900) */ +/* 160 */ NdrFcLong( 0x4007 ), /* 16391 */ +/* 164 */ NdrFcShort( 0x2dc ), /* Offset= 732 (896) */ +/* 166 */ NdrFcLong( 0x4008 ), /* 16392 */ +/* 170 */ NdrFcShort( 0x2de ), /* Offset= 734 (904) */ +/* 172 */ NdrFcLong( 0x400d ), /* 16397 */ +/* 176 */ NdrFcShort( 0x2dc ), /* Offset= 732 (908) */ +/* 178 */ NdrFcLong( 0x4009 ), /* 16393 */ +/* 182 */ NdrFcShort( 0x2da ), /* Offset= 730 (912) */ +/* 184 */ NdrFcLong( 0x6000 ), /* 24576 */ +/* 188 */ NdrFcShort( 0x2d8 ), /* Offset= 728 (916) */ +/* 190 */ NdrFcLong( 0x400c ), /* 16396 */ +/* 194 */ NdrFcShort( 0x2d6 ), /* Offset= 726 (920) */ +/* 196 */ NdrFcLong( 0x10 ), /* 16 */ +/* 200 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */ +/* 202 */ NdrFcLong( 0x12 ), /* 18 */ +/* 206 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 208 */ NdrFcLong( 0x13 ), /* 19 */ +/* 212 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 214 */ NdrFcLong( 0x16 ), /* 22 */ +/* 218 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 220 */ NdrFcLong( 0x17 ), /* 23 */ +/* 224 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 226 */ NdrFcLong( 0xe ), /* 14 */ +/* 230 */ NdrFcShort( 0x2ba ), /* Offset= 698 (928) */ +/* 232 */ NdrFcLong( 0x400e ), /* 16398 */ +/* 236 */ NdrFcShort( 0x2c0 ), /* Offset= 704 (940) */ +/* 238 */ NdrFcLong( 0x4010 ), /* 16400 */ +/* 242 */ NdrFcShort( 0x27e ), /* Offset= 638 (880) */ +/* 244 */ NdrFcLong( 0x4012 ), /* 16402 */ +/* 248 */ NdrFcShort( 0x27c ), /* Offset= 636 (884) */ +/* 250 */ NdrFcLong( 0x4013 ), /* 16403 */ +/* 254 */ NdrFcShort( 0x27a ), /* Offset= 634 (888) */ +/* 256 */ NdrFcLong( 0x4016 ), /* 16406 */ +/* 260 */ NdrFcShort( 0x274 ), /* Offset= 628 (888) */ +/* 262 */ NdrFcLong( 0x4017 ), /* 16407 */ +/* 266 */ NdrFcShort( 0x26e ), /* Offset= 622 (888) */ +/* 268 */ NdrFcLong( 0x0 ), /* 0 */ +/* 272 */ NdrFcShort( 0x0 ), /* Offset= 0 (272) */ +/* 274 */ NdrFcLong( 0x1 ), /* 1 */ +/* 278 */ NdrFcShort( 0x0 ), /* Offset= 0 (278) */ +/* 280 */ NdrFcShort( 0xffffffff ), /* Offset= -1 (279) */ +/* 282 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 284 */ NdrFcShort( 0x8 ), /* 8 */ +/* 286 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 288 */ + 0x13, 0x0, /* FC_OP */ +/* 290 */ NdrFcShort( 0xc ), /* Offset= 12 (302) */ +/* 292 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 294 */ NdrFcShort( 0x2 ), /* 2 */ +/* 296 */ 0x9, /* Corr desc: FC_ULONG */ + 0x0, /* */ +/* 298 */ NdrFcShort( 0xfffc ), /* -4 */ +/* 300 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 302 */ + 0x17, /* FC_CSTRUCT */ + 0x3, /* 3 */ +/* 304 */ NdrFcShort( 0x8 ), /* 8 */ +/* 306 */ NdrFcShort( 0xfffffff2 ), /* Offset= -14 (292) */ +/* 308 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 310 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 312 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 314 */ NdrFcLong( 0x0 ), /* 0 */ +/* 318 */ NdrFcShort( 0x0 ), /* 0 */ +/* 320 */ NdrFcShort( 0x0 ), /* 0 */ +/* 322 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 324 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 326 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 328 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 330 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 332 */ NdrFcLong( 0x20400 ), /* 132096 */ +/* 336 */ NdrFcShort( 0x0 ), /* 0 */ +/* 338 */ NdrFcShort( 0x0 ), /* 0 */ +/* 340 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 342 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 344 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 346 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 348 */ + 0x13, 0x0, /* FC_OP */ +/* 350 */ NdrFcShort( 0x1fc ), /* Offset= 508 (858) */ +/* 352 */ + 0x2a, /* FC_ENCAPSULATED_UNION */ + 0x49, /* 73 */ +/* 354 */ NdrFcShort( 0x18 ), /* 24 */ +/* 356 */ NdrFcShort( 0xa ), /* 10 */ +/* 358 */ NdrFcLong( 0x8 ), /* 8 */ +/* 362 */ NdrFcShort( 0x58 ), /* Offset= 88 (450) */ +/* 364 */ NdrFcLong( 0xd ), /* 13 */ +/* 368 */ NdrFcShort( 0x78 ), /* Offset= 120 (488) */ +/* 370 */ NdrFcLong( 0x9 ), /* 9 */ +/* 374 */ NdrFcShort( 0x94 ), /* Offset= 148 (522) */ +/* 376 */ NdrFcLong( 0xc ), /* 12 */ +/* 380 */ NdrFcShort( 0xbc ), /* Offset= 188 (568) */ +/* 382 */ NdrFcLong( 0x24 ), /* 36 */ +/* 386 */ NdrFcShort( 0x114 ), /* Offset= 276 (662) */ +/* 388 */ NdrFcLong( 0x800d ), /* 32781 */ +/* 392 */ NdrFcShort( 0x130 ), /* Offset= 304 (696) */ +/* 394 */ NdrFcLong( 0x10 ), /* 16 */ +/* 398 */ NdrFcShort( 0x148 ), /* Offset= 328 (726) */ +/* 400 */ NdrFcLong( 0x2 ), /* 2 */ +/* 404 */ NdrFcShort( 0x160 ), /* Offset= 352 (756) */ +/* 406 */ NdrFcLong( 0x3 ), /* 3 */ +/* 410 */ NdrFcShort( 0x178 ), /* Offset= 376 (786) */ +/* 412 */ NdrFcLong( 0x14 ), /* 20 */ +/* 416 */ NdrFcShort( 0x190 ), /* Offset= 400 (816) */ +/* 418 */ NdrFcShort( 0xffffffff ), /* Offset= -1 (417) */ +/* 420 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 422 */ NdrFcShort( 0x4 ), /* 4 */ +/* 424 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 426 */ NdrFcShort( 0x0 ), /* 0 */ +/* 428 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 430 */ + 0x48, /* FC_VARIABLE_REPEAT */ + 0x49, /* FC_FIXED_OFFSET */ +/* 432 */ NdrFcShort( 0x4 ), /* 4 */ +/* 434 */ NdrFcShort( 0x0 ), /* 0 */ +/* 436 */ NdrFcShort( 0x1 ), /* 1 */ +/* 438 */ NdrFcShort( 0x0 ), /* 0 */ +/* 440 */ NdrFcShort( 0x0 ), /* 0 */ +/* 442 */ 0x13, 0x0, /* FC_OP */ +/* 444 */ NdrFcShort( 0xffffff72 ), /* Offset= -142 (302) */ +/* 446 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 448 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 450 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 452 */ NdrFcShort( 0x8 ), /* 8 */ +/* 454 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 456 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 458 */ NdrFcShort( 0x4 ), /* 4 */ +/* 460 */ NdrFcShort( 0x4 ), /* 4 */ +/* 462 */ 0x11, 0x0, /* FC_RP */ +/* 464 */ NdrFcShort( 0xffffffd4 ), /* Offset= -44 (420) */ +/* 466 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 468 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 470 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 472 */ NdrFcShort( 0x0 ), /* 0 */ +/* 474 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 476 */ NdrFcShort( 0x0 ), /* 0 */ +/* 478 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 482 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 484 */ NdrFcShort( 0xffffff54 ), /* Offset= -172 (312) */ +/* 486 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 488 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 490 */ NdrFcShort( 0x8 ), /* 8 */ +/* 492 */ NdrFcShort( 0x0 ), /* 0 */ +/* 494 */ NdrFcShort( 0x6 ), /* Offset= 6 (500) */ +/* 496 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 498 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 500 */ + 0x11, 0x0, /* FC_RP */ +/* 502 */ NdrFcShort( 0xffffffe0 ), /* Offset= -32 (470) */ +/* 504 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 506 */ NdrFcShort( 0x0 ), /* 0 */ +/* 508 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 510 */ NdrFcShort( 0x0 ), /* 0 */ +/* 512 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 516 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 518 */ NdrFcShort( 0xffffff44 ), /* Offset= -188 (330) */ +/* 520 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 522 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 524 */ NdrFcShort( 0x8 ), /* 8 */ +/* 526 */ NdrFcShort( 0x0 ), /* 0 */ +/* 528 */ NdrFcShort( 0x6 ), /* Offset= 6 (534) */ +/* 530 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 532 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 534 */ + 0x11, 0x0, /* FC_RP */ +/* 536 */ NdrFcShort( 0xffffffe0 ), /* Offset= -32 (504) */ +/* 538 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 540 */ NdrFcShort( 0x4 ), /* 4 */ +/* 542 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 544 */ NdrFcShort( 0x0 ), /* 0 */ +/* 546 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 548 */ + 0x48, /* FC_VARIABLE_REPEAT */ + 0x49, /* FC_FIXED_OFFSET */ +/* 550 */ NdrFcShort( 0x4 ), /* 4 */ +/* 552 */ NdrFcShort( 0x0 ), /* 0 */ +/* 554 */ NdrFcShort( 0x1 ), /* 1 */ +/* 556 */ NdrFcShort( 0x0 ), /* 0 */ +/* 558 */ NdrFcShort( 0x0 ), /* 0 */ +/* 560 */ 0x13, 0x0, /* FC_OP */ +/* 562 */ NdrFcShort( 0x17e ), /* Offset= 382 (944) */ +/* 564 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 566 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 568 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 570 */ NdrFcShort( 0x8 ), /* 8 */ +/* 572 */ NdrFcShort( 0x0 ), /* 0 */ +/* 574 */ NdrFcShort( 0x6 ), /* Offset= 6 (580) */ +/* 576 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 578 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 580 */ + 0x11, 0x0, /* FC_RP */ +/* 582 */ NdrFcShort( 0xffffffd4 ), /* Offset= -44 (538) */ +/* 584 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 586 */ NdrFcLong( 0x2f ), /* 47 */ +/* 590 */ NdrFcShort( 0x0 ), /* 0 */ +/* 592 */ NdrFcShort( 0x0 ), /* 0 */ +/* 594 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 596 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 598 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 600 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 602 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 604 */ NdrFcShort( 0x1 ), /* 1 */ +/* 606 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 608 */ NdrFcShort( 0x4 ), /* 4 */ +/* 610 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 612 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 614 */ NdrFcShort( 0x10 ), /* 16 */ +/* 616 */ NdrFcShort( 0x0 ), /* 0 */ +/* 618 */ NdrFcShort( 0xa ), /* Offset= 10 (628) */ +/* 620 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 622 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 624 */ NdrFcShort( 0xffffffd8 ), /* Offset= -40 (584) */ +/* 626 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 628 */ + 0x13, 0x0, /* FC_OP */ +/* 630 */ NdrFcShort( 0xffffffe4 ), /* Offset= -28 (602) */ +/* 632 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 634 */ NdrFcShort( 0x4 ), /* 4 */ +/* 636 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 638 */ NdrFcShort( 0x0 ), /* 0 */ +/* 640 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 642 */ + 0x48, /* FC_VARIABLE_REPEAT */ + 0x49, /* FC_FIXED_OFFSET */ +/* 644 */ NdrFcShort( 0x4 ), /* 4 */ +/* 646 */ NdrFcShort( 0x0 ), /* 0 */ +/* 648 */ NdrFcShort( 0x1 ), /* 1 */ +/* 650 */ NdrFcShort( 0x0 ), /* 0 */ +/* 652 */ NdrFcShort( 0x0 ), /* 0 */ +/* 654 */ 0x13, 0x0, /* FC_OP */ +/* 656 */ NdrFcShort( 0xffffffd4 ), /* Offset= -44 (612) */ +/* 658 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 660 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 662 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 664 */ NdrFcShort( 0x8 ), /* 8 */ +/* 666 */ NdrFcShort( 0x0 ), /* 0 */ +/* 668 */ NdrFcShort( 0x6 ), /* Offset= 6 (674) */ +/* 670 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 672 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 674 */ + 0x11, 0x0, /* FC_RP */ +/* 676 */ NdrFcShort( 0xffffffd4 ), /* Offset= -44 (632) */ +/* 678 */ + 0x1d, /* FC_SMFARRAY */ + 0x0, /* 0 */ +/* 680 */ NdrFcShort( 0x8 ), /* 8 */ +/* 682 */ 0x2, /* FC_CHAR */ + 0x5b, /* FC_END */ +/* 684 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 686 */ NdrFcShort( 0x10 ), /* 16 */ +/* 688 */ 0x8, /* FC_LONG */ + 0x6, /* FC_SHORT */ +/* 690 */ 0x6, /* FC_SHORT */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 692 */ 0x0, /* 0 */ + NdrFcShort( 0xfffffff1 ), /* Offset= -15 (678) */ + 0x5b, /* FC_END */ +/* 696 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 698 */ NdrFcShort( 0x18 ), /* 24 */ +/* 700 */ NdrFcShort( 0x0 ), /* 0 */ +/* 702 */ NdrFcShort( 0xa ), /* Offset= 10 (712) */ +/* 704 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 706 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 708 */ NdrFcShort( 0xffffffe8 ), /* Offset= -24 (684) */ +/* 710 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 712 */ + 0x11, 0x0, /* FC_RP */ +/* 714 */ NdrFcShort( 0xffffff0c ), /* Offset= -244 (470) */ +/* 716 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 718 */ NdrFcShort( 0x1 ), /* 1 */ +/* 720 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 722 */ NdrFcShort( 0x0 ), /* 0 */ +/* 724 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 726 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 728 */ NdrFcShort( 0x8 ), /* 8 */ +/* 730 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 732 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 734 */ NdrFcShort( 0x4 ), /* 4 */ +/* 736 */ NdrFcShort( 0x4 ), /* 4 */ +/* 738 */ 0x13, 0x0, /* FC_OP */ +/* 740 */ NdrFcShort( 0xffffffe8 ), /* Offset= -24 (716) */ +/* 742 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 744 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 746 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 748 */ NdrFcShort( 0x2 ), /* 2 */ +/* 750 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 754 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 756 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 758 */ NdrFcShort( 0x8 ), /* 8 */ +/* 760 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 762 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 764 */ NdrFcShort( 0x4 ), /* 4 */ +/* 766 */ NdrFcShort( 0x4 ), /* 4 */ +/* 768 */ 0x13, 0x0, /* FC_OP */ +/* 770 */ NdrFcShort( 0xffffffe8 ), /* Offset= -24 (746) */ +/* 772 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 774 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 776 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 778 */ NdrFcShort( 0x4 ), /* 4 */ +/* 780 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 782 */ NdrFcShort( 0x0 ), /* 0 */ +/* 784 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 786 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 788 */ NdrFcShort( 0x8 ), /* 8 */ +/* 790 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 792 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 794 */ NdrFcShort( 0x4 ), /* 4 */ +/* 796 */ NdrFcShort( 0x4 ), /* 4 */ +/* 798 */ 0x13, 0x0, /* FC_OP */ +/* 800 */ NdrFcShort( 0xffffffe8 ), /* Offset= -24 (776) */ +/* 802 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 804 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 806 */ + 0x1b, /* FC_CARRAY */ + 0x7, /* 7 */ +/* 808 */ NdrFcShort( 0x8 ), /* 8 */ +/* 810 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 812 */ NdrFcShort( 0x0 ), /* 0 */ +/* 814 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 816 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 818 */ NdrFcShort( 0x8 ), /* 8 */ +/* 820 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 822 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 824 */ NdrFcShort( 0x4 ), /* 4 */ +/* 826 */ NdrFcShort( 0x4 ), /* 4 */ +/* 828 */ 0x13, 0x0, /* FC_OP */ +/* 830 */ NdrFcShort( 0xffffffe8 ), /* Offset= -24 (806) */ +/* 832 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 834 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 836 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 838 */ NdrFcShort( 0x8 ), /* 8 */ +/* 840 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 842 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 844 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 846 */ NdrFcShort( 0x8 ), /* 8 */ +/* 848 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 850 */ NdrFcShort( 0xffd8 ), /* -40 */ +/* 852 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 854 */ NdrFcShort( 0xffffffee ), /* Offset= -18 (836) */ +/* 856 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 858 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 860 */ NdrFcShort( 0x28 ), /* 40 */ +/* 862 */ NdrFcShort( 0xffffffee ), /* Offset= -18 (844) */ +/* 864 */ NdrFcShort( 0x0 ), /* Offset= 0 (864) */ +/* 866 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 868 */ 0x38, /* FC_ALIGNM4 */ + 0x8, /* FC_LONG */ +/* 870 */ 0x8, /* FC_LONG */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 872 */ 0x0, /* 0 */ + NdrFcShort( 0xfffffdf7 ), /* Offset= -521 (352) */ + 0x5b, /* FC_END */ +/* 876 */ + 0x13, 0x0, /* FC_OP */ +/* 878 */ NdrFcShort( 0xfffffef6 ), /* Offset= -266 (612) */ +/* 880 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 882 */ 0x2, /* FC_CHAR */ + 0x5c, /* FC_PAD */ +/* 884 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 886 */ 0x6, /* FC_SHORT */ + 0x5c, /* FC_PAD */ +/* 888 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 890 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 892 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 894 */ 0xa, /* FC_FLOAT */ + 0x5c, /* FC_PAD */ +/* 896 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 898 */ 0xc, /* FC_DOUBLE */ + 0x5c, /* FC_PAD */ +/* 900 */ + 0x13, 0x0, /* FC_OP */ +/* 902 */ NdrFcShort( 0xfffffd94 ), /* Offset= -620 (282) */ +/* 904 */ + 0x13, 0x10, /* FC_OP */ +/* 906 */ NdrFcShort( 0xfffffd96 ), /* Offset= -618 (288) */ +/* 908 */ + 0x13, 0x10, /* FC_OP */ +/* 910 */ NdrFcShort( 0xfffffdaa ), /* Offset= -598 (312) */ +/* 912 */ + 0x13, 0x10, /* FC_OP */ +/* 914 */ NdrFcShort( 0xfffffdb8 ), /* Offset= -584 (330) */ +/* 916 */ + 0x13, 0x10, /* FC_OP */ +/* 918 */ NdrFcShort( 0xfffffdc6 ), /* Offset= -570 (348) */ +/* 920 */ + 0x13, 0x10, /* FC_OP */ +/* 922 */ NdrFcShort( 0x2 ), /* Offset= 2 (924) */ +/* 924 */ + 0x13, 0x0, /* FC_OP */ +/* 926 */ NdrFcShort( 0xfffffc62 ), /* Offset= -926 (0) */ +/* 928 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 930 */ NdrFcShort( 0x10 ), /* 16 */ +/* 932 */ 0x6, /* FC_SHORT */ + 0x2, /* FC_CHAR */ +/* 934 */ 0x2, /* FC_CHAR */ + 0x38, /* FC_ALIGNM4 */ +/* 936 */ 0x8, /* FC_LONG */ + 0x39, /* FC_ALIGNM8 */ +/* 938 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 940 */ + 0x13, 0x0, /* FC_OP */ +/* 942 */ NdrFcShort( 0xfffffff2 ), /* Offset= -14 (928) */ +/* 944 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x7, /* 7 */ +/* 946 */ NdrFcShort( 0x20 ), /* 32 */ +/* 948 */ NdrFcShort( 0x0 ), /* 0 */ +/* 950 */ NdrFcShort( 0x0 ), /* Offset= 0 (950) */ +/* 952 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 954 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 956 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 958 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 960 */ NdrFcShort( 0xfffffc4a ), /* Offset= -950 (10) */ +/* 962 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 964 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 966 */ NdrFcShort( 0x0 ), /* 0 */ +/* 968 */ NdrFcShort( 0x10 ), /* 16 */ +/* 970 */ NdrFcShort( 0x0 ), /* 0 */ +/* 972 */ NdrFcShort( 0xfffffc3a ), /* Offset= -966 (6) */ +/* 974 */ + 0x11, 0x0, /* FC_RP */ +/* 976 */ NdrFcShort( 0x6 ), /* Offset= 6 (982) */ +/* 978 */ + 0x12, 0x0, /* FC_UP */ +/* 980 */ NdrFcShort( 0xffffffdc ), /* Offset= -36 (944) */ +/* 982 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 984 */ NdrFcShort( 0x0 ), /* 0 */ +/* 986 */ NdrFcShort( 0x10 ), /* 16 */ +/* 988 */ NdrFcShort( 0x0 ), /* 0 */ +/* 990 */ NdrFcShort( 0xfffffff4 ), /* Offset= -12 (978) */ +/* 992 */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 994 */ 0xc, /* FC_DOUBLE */ + 0x5c, /* FC_PAD */ + + 0x0 + } + }; + +const CInterfaceProxyVtbl * _remoteps_ProxyVtblList[] = +{ + ( CInterfaceProxyVtbl *) &_IRemoteProcessProxyVtbl, + 0 +}; + +const CInterfaceStubVtbl * _remoteps_StubVtblList[] = +{ + ( CInterfaceStubVtbl *) &_IRemoteProcessStubVtbl, + 0 +}; + +PCInterfaceName const _remoteps_InterfaceNamesList[] = +{ + "IRemoteProcess", + 0 +}; + + +#define _remoteps_CHECK_IID(n) IID_GENERIC_CHECK_IID( _remoteps, pIID, n) + +int __stdcall _remoteps_IID_Lookup( const IID * pIID, int * pIndex ) +{ + + if(!_remoteps_CHECK_IID(0)) + { + *pIndex = 0; + return 1; + } + + return 0; +} + +const ExtendedProxyFileInfo remoteps_ProxyFileInfo = +{ + (PCInterfaceProxyVtblList *) & _remoteps_ProxyVtblList, + (PCInterfaceStubVtblList *) & _remoteps_StubVtblList, + (const PCInterfaceName * ) & _remoteps_InterfaceNamesList, + 0, // no delegation + & _remoteps_IID_Lookup, + 1, + 2, + 0, /* table of [async_uuid] interfaces */ + 0, /* Filler1 */ + 0, /* Filler2 */ + 0 /* Filler3 */ +}; diff --git a/remoteps/remotepsps.def b/remoteps/remotepsps.def new file mode 100644 index 0000000..7ff7486 --- /dev/null +++ b/remoteps/remotepsps.def @@ -0,0 +1,11 @@ + +LIBRARY "remotepsPS" + +DESCRIPTION 'Proxy/Stub DLL' + +EXPORTS + DllGetClassObject @1 PRIVATE + DllCanUnloadNow @2 PRIVATE + GetProxyDllInfo @3 PRIVATE + DllRegisterServer @4 PRIVATE + DllUnregisterServer @5 PRIVATE diff --git a/remoteps/remotepsps.dll b/remoteps/remotepsps.dll new file mode 100644 index 0000000..27c142d Binary files /dev/null and b/remoteps/remotepsps.dll differ diff --git a/remoteps/remotepsps.exp b/remoteps/remotepsps.exp new file mode 100644 index 0000000..3e67d23 Binary files /dev/null and b/remoteps/remotepsps.exp differ diff --git a/remoteps/remotepsps.lib b/remoteps/remotepsps.lib new file mode 100644 index 0000000..6a4a369 Binary files /dev/null and b/remoteps/remotepsps.lib differ diff --git a/remoteps/remotepsps.mk b/remoteps/remotepsps.mk new file mode 100644 index 0000000..2264587 --- /dev/null +++ b/remoteps/remotepsps.mk @@ -0,0 +1,14 @@ + +remotepsps.dll: dlldata.obj remoteps_p.obj remoteps_i.obj + link /dll /out:remotepsps.dll /def:remotepsps.def /entry:DllMain dlldata.obj remoteps_p.obj remoteps_i.obj kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib + +.c.obj: + cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL $< + +clean: + @del remotepsps.dll + @del remotepsps.lib + @del remotepsps.exp + @del dlldata.obj + @del remoteps_p.obj + @del remoteps_i.obj diff --git a/remoteps/scraps.txt b/remoteps/scraps.txt new file mode 100644 index 0000000..1507205 --- /dev/null +++ b/remoteps/scraps.txt @@ -0,0 +1,211 @@ +// Desktop desktop; +// desktop.open("Default",false,Desktop::AccessReadObjects); +// if(!desktop.isOkay())return ComResult::Fail; + + + +// getInfo(); +// WindowStation windowStation; + + + +// windowStation.open("SAWinSta",WindowStation::AccessReadScreen,false); +// if(!windowStation.isOkay()) +// { +// DWORD errorCode(::GetLastError()); +// ::sprintf(strLastError,"system error code %d(0x%08lx)",errorCode,errorCode); +// mLogFile.writeLine(String("ERROR ACCESSING WINDOW STATION ")+strLastError); +// } +// else mLogFile.writeLine("WINDOW STATION IS OPEN"); +// desktop.open("Default",false,Desktop::AccessReadObjects|Desktop::AccessSwitchDesktop); + + +void RemoteProcess::getInfo(void) +{ + WindowStationEnumerator windowStationEnumerator; + windowStationEnumerator.enumerateWindowStations(); + for(int index=0;index + +ConnectionThread::ConnectionThread(void) +: mIsInConnect(false) +{ + mThreadHandler.setCallback(this,&ConnectionThread::threadHandler); + insertHandler(&mThreadHandler); +} + +ConnectionThread::ConnectionThread(const ConnectionThread &/*someConnectionThread*/) +{ // private implementation +} + +ConnectionThread::~ConnectionThread() +{ + removeHandler(&mThreadHandler); + if(mIsInConnect){mIsInConnect=false;fatalThreadExit();} +} + +ConnectionThread &ConnectionThread::operator=(const ConnectionThread &someConnectionThread) +{ // private implementation + return *this; +} + +void ConnectionThread::handleConnect(const String &serverName) +{ + String *pComputerName=::new String(serverName); + ThreadMessage connectMessage(ThreadMessage::TM_USER,MsgConnect,(LONG)pComputerName); + mIsInConnect=true; + MessageThread::postMessage(connectMessage); +} + +DWORD ConnectionThread::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(MsgConnect==threadMessage.userDataOne()) + { + thConnect(*((String*)threadMessage.userDataTwo())); + mIsInConnect=false; + ::delete (String*)threadMessage.userDataTwo(); + } + break; + } + return FALSE; +} + +void ConnectionThread::thConnect(const String &strServerName) +{ + ComInitializer comInitializer; + mStrServerName=strServerName; + preConnect(strServerName); + if(!mRemoteProcessInfo.connect(strServerName)) + { + mConnectionMutex.releaseMutex(); + errorHandler(); + return; + } + connectionHandler(mRemoteProcessInfo); + preDisconnect(strServerName); + mRemoteProcessInfo.disconnect(); + mConnectionMutex.releaseMutex(); +} + +// ******* virtuals + +void ConnectionThread::connectionHandler(RemoteProcessInfo &/*remoteProcessInfo*/) +{ +} + +void ConnectionThread::errorHandler(void) +{ +} + +void ConnectionThread::preConnect(const String &strServerName) +{ +} + +void ConnectionThread::preDisconnect(const String &strServerName) +{ +} + diff --git a/remotepsapp/ConnectionThread.hpp b/remotepsapp/ConnectionThread.hpp new file mode 100644 index 0000000..b52d0a3 --- /dev/null +++ b/remotepsapp/ConnectionThread.hpp @@ -0,0 +1,51 @@ +#ifndef _REMOTEPSAPP_CONNECTIONTHREAD_HPP_ +#define _REMOTEPSAPP_CONNECTIONTHREAD_HPP_ +#ifndef _REMOTEPSAPP_REMOTEPROCESSINFO_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif + +class ConnectionThread : public MessageThread +{ +public: + ConnectionThread(void); + virtual ~ConnectionThread(); + void handleConnect(const String &serverName); + bool isInConnect(void)const; + const String &serverName(void)const; +protected: + virtual void connectionHandler(RemoteProcessInfo &remoteProcessInfo); + virtual void errorHandler(void); + virtual void preConnect(const String &strServerName); + virtual void preDisconnect(const String &strServerName); +private: + enum {MsgConnect}; + ConnectionThread(const ConnectionThread &someConnectionThread); + ConnectionThread &operator=(const ConnectionThread &someConnectionThread); + DWORD threadHandler(ThreadMessage &threadMessage); + void thConnect(const String &strServerName); + + ThreadCallback mThreadHandler; + Mutex mConnectionMutex; + RemoteProcessInfo mRemoteProcessInfo; + String mStrServerName; + bool mIsInConnect; +}; + +inline +bool ConnectionThread::isInConnect(void)const +{ + return mIsInConnect; +} + +inline +const String &ConnectionThread::serverName(void)const +{ + return mStrServerName; +} +#endif diff --git a/remotepsapp/Debug/remoteps.res b/remotepsapp/Debug/remoteps.res new file mode 100644 index 0000000..e961807 Binary files /dev/null and b/remotepsapp/Debug/remoteps.res differ diff --git a/remotepsapp/Debug/remotepsapp.exe b/remotepsapp/Debug/remotepsapp.exe new file mode 100644 index 0000000..4e911af Binary files /dev/null and b/remotepsapp/Debug/remotepsapp.exe differ diff --git a/remotepsapp/Debug/remotepsapp.exp b/remotepsapp/Debug/remotepsapp.exp new file mode 100644 index 0000000..10fa8d3 Binary files /dev/null and b/remotepsapp/Debug/remotepsapp.exp differ diff --git a/remotepsapp/Debug/remotepsapp.lib b/remotepsapp/Debug/remotepsapp.lib new file mode 100644 index 0000000..bf51516 Binary files /dev/null and b/remotepsapp/Debug/remotepsapp.lib differ diff --git a/remotepsapp/Debug/vc60.idb b/remotepsapp/Debug/vc60.idb new file mode 100644 index 0000000..650840a Binary files /dev/null and b/remotepsapp/Debug/vc60.idb differ diff --git a/remotepsapp/Debug/vc60.pdb b/remotepsapp/Debug/vc60.pdb new file mode 100644 index 0000000..807d547 Binary files /dev/null and b/remotepsapp/Debug/vc60.pdb differ diff --git a/remotepsapp/Mainfrm.cpp b/remotepsapp/Mainfrm.cpp new file mode 100644 index 0000000..349717c --- /dev/null +++ b/remotepsapp/Mainfrm.cpp @@ -0,0 +1,246 @@ +#include +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +MainFrame::~MainFrame() +{ + removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); +} + +CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &someCallbackData) +{ + postQuitMessage(); + ::WinHelp(*this,0,HELP_QUIT,0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::closeHandler(CallbackData &someCallbackData) +{ + destroy(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &someCallbackData) +{ + mStatusControl=::new StatusBarEx(*this,getClient(),StatusControlID); + mStatusControl.disposition(PointerDisposition::Delete); + setParts(SinglePart); + setText("Ready"); + setCaption(); + bringWindowToTop(); + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData) +{ + Rect statusRect; + Rect cRect; + + mStatusControl->windowRect(statusRect); + cRect.right(someCallbackData.loWord()); + cRect.bottom(someCallbackData.hiWord()); + getClient().moveWindow(0,0,cRect.right(),cRect.bottom()-(statusRect.bottom()-statusRect.top())); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case IDM_CASCADE : + cascade(); + break; + case IDM_TILE : + tile(); + break; + case IDM_ARRANGE : + arrange(); + break; + case IDM_CLOSEALL : + closeAll(); + break; + case IDM_MINIMIZEALL : + minimizeAll(); + break; + case IDM_RESTOREALL : + restoreAll(); + break; + case PSMENU_FILEOPEN : + handleFileOpen(); + break; + case PSMENU_FILECLOSE : + handleFileClose(); + break; + case PSMENU_FILESAVE : + handleFileSave(); + break; + case PSMENU_FILESAVEAS : + handleFileSaveAs(); + break; + case PSMENU_FILEPRINT : + handleFilePrint(); + break; + case PSMENU_FILEQUIT : + handleFileQuit(); + break; + case PSMENU_SINGLECONNECTION : + handleFileOpenSingleConnection(); + break; + case PSMENU_SELECTGROUP : + handleFileSelectGroup(); + break; + } +// if(someCallbackData.wParam()>=StartDynamicID)handleFileOpenEvent(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +void MainFrame::setParts(int numParts) +{ + GlobalData statParts; + if(1==numParts){statParts.size(1);*((int*)&statParts[0])=FirstPartWidth;} + else {statParts.size(2);*((int*)&statParts[0])=FirstPartWidth;*((int*)&statParts[0]+1)=SecondPartWidth;} + mStatusControl->setParts(statParts); +} + + +void MainFrame::setText(const String &strText) +{ + if(!mStatusControl.isOkay())return; + mStatusControl->setText(strText); + mStatusControl->update(); +} + +void MainFrame::splash(void) +{ +// SplashScreen splashScreen("APISPY","",3000); +// splashScreen.perform(); +} + +void MainFrame::setCaption(String strText) +{ + String strCaption; + + windowText(strCaption); + FrameWindow::setCaption(strCaption); +} + +void MainFrame::handleFileOpen(void) +{ + GDIPoint cursorPos; + + cursorPos.x(0); + cursorPos.y(0); + PureMenu popupMenu(PureMenu::PopupMenu); + popupMenu.insertMenu(0,PureMenu::ItemString,PSMENU_SINGLECONNECTION,"Single &Connection..."); + popupMenu.insertMenu(1,PureMenu::ItemString,PSMENU_SELECTGROUP,"Select &Group..."); + popupMenu.trackPopupMenu(*this,cursorPos,PureMenu::CenterAlign|PureMenu::TopAlign); +} + +void MainFrame::handleFileOpenSingleConnection(void) +{ + SmartPointer mdiWindow; + ProcessView *processView; + ConnectionDialog connectionDialog; + String strComputerName; + + if(!connectionDialog.perform(*this,strComputerName))return; + processView=::new ProcessView; + processView->createWindow(*this,String(STRING_PROCESSVIEWCLASSNAME),"ProcessView","viewMenu","psicon"); + insert(*processView); + processView->connect(strComputerName); +} + +void MainFrame::handleFileSelectGroup(void) +{ +} + +void MainFrame::handleFileClose(void) +{ +} + +void MainFrame::handleFileSave(void) +{ +} + +void MainFrame::handleFileSaveAs(void) +{ +} + +void MainFrame::handleFilePrint(void) +{ +} + +void MainFrame::handleFileQuit(void) +{ + postMessage(*this,WM_CLOSE,0,0L); +} + +// *** virtuals + +void MainFrame::mdiDestroy(MDIWindow &mdiWindow) +{ +} + +void MainFrame::mdiActivate(MDIWindow &mdiWindow) +{ +#if 0 + String strWindowText; + + mdiWindow.windowText(strWindowText); + if(strWindowText.betweenString(0,' ')==String("Definitions"))setParts(DoublePart); + *mStatusControl=mdiWindow.getMenu(); + mStatusControl->setSequentialResourceDescriptors(SPYMENU_FILEOPEN,STRING_DESCRIPTORFILEOPEN,(STRING_DESCRIPTORHELPABOUT-STRING_DESCRIPTORFILEOPEN)+1); + + removeHistory(mdiWindow.getMenu()); + applyHistory(mdiWindow.getMenu()); + + if(mAPIDebug.isOkay()&&mAPIDebug->isDebugging()) + { + enableMenuItems(0,SPYMENU_FILECLOSE,PureMenu::ByCommand,PureMenu::ItemEnabled); + enableMenuItems(0,SPYMENU_FILEOPEN,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + } + else if((mAPIDebug.isOkay()&&!mAPIDebug->isDebugging())||!mAPIDebug.isOkay()) + { + enableMenuItems(0,SPYMENU_FILECLOSE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + enableMenuItems(0,SPYMENU_FILEOPEN,PureMenu::ByCommand,PureMenu::ItemEnabled); + } +#endif +} + +void MainFrame::mdiDeactivate(MDIWindow &mdiWindow) +{ +// String strWindowText; +// mdiWindow.windowText(strWindowText); +// if(strWindowText.betweenString(0,' ')==String("Definitions"))setParts(SinglePart); +// mStatusControl->setText(" "); +} diff --git a/remotepsapp/Optnsreg.cpp b/remotepsapp/Optnsreg.cpp new file mode 100644 index 0000000..de39e8c --- /dev/null +++ b/remotepsapp/Optnsreg.cpp @@ -0,0 +1,121 @@ +#include +#include + +bool OptionsReg::setGroup(Group &group) +{ + RegKey regKey(RegKey::CurrentUser); + String strIndex; + + if(group.groupName().isNull()||!group.size())return false; + if(!regKey.openKey(mOptionsKeyName+mOptionsKeyGroupsPostfix+String("\\")+group.groupName())) + { + regKey.createKey(mOptionsKeyName+mOptionsKeyGroupsPostfix+String("\\")+group.groupName(),""); + regKey.openKey(mOptionsKeyName+mOptionsKeyGroupsPostfix+String("\\")+group.groupName()); + } + for(int index=0;index &groupNames) +{ + RegKey regKey(RegKey::CurrentUser); + DWORD index(0); + String strGroupName; + + groupNames.remove(); + if(!regKey.openKey(mOptionsKeyName+mOptionsKeyGroupsPostfix))return false; + while(true) + { + if(!regKey.enumKey(index++,strGroupName))break; + groupNames.insert(&strGroupName); + } + return groupNames.size()?true:false; +} + +bool OptionsReg::getConnections(Block &connectionNames) +{ + RegKey regKey(RegKey::CurrentUser); + String strConnectionName; + String strIndex; + DWORD index; + + index=0; + connectionNames.remove(); + if(!regKey.openKey(mOptionsKeyName+mOptionsKeyConnectionsPostfix))return false; + while(true) + { + ::sprintf(strIndex,"C%d",index++); + if(!regKey.queryValue(strIndex,strConnectionName))break; + connectionNames.insert(&strConnectionName); + } + return connectionNames.size()?true:false; +} + +void OptionsReg::setConnections(Block &connectionNames) +{ + RegKey regKey(RegKey::CurrentUser); + String strConnectionEntry; + String strIndex; + + if(!regKey.openKey(mOptionsKeyName+mOptionsKeyConnectionsPostfix)) + { + regKey.createKey(mOptionsKeyName+mOptionsKeyConnectionsPostfix,""); + regKey.openKey(mOptionsKeyName+mOptionsKeyConnectionsPostfix); + } + for(int index=0;index strConnections; + String cpyConnection; + String strIndex; + + if(!regKey.openKey(mOptionsKeyName+mOptionsKeyConnectionsPostfix)) + { + regKey.createKey(mOptionsKeyName+mOptionsKeyConnectionsPostfix,""); + regKey.openKey(mOptionsKeyName+mOptionsKeyConnectionsPostfix); + } + if(strConnection.isNull())return; + cpyConnection=strConnection; + cpyConnection.lower(); + getConnections(strConnections); + for(int index=0;index +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_GROUP_HPP_ +#include +#endif + +class OptionsReg +{ +public: + OptionsReg(void); + virtual ~OptionsReg(); + bool setGroup(Group &group); + bool getGroup(Group &group); + bool getGroupNames(Block &groupNames); + bool getConnections(Block &connectionNames); + void setConnections(Block &connectionNames); + void insertConnection(const String &strConnectionName); +private: + OptionsReg(const OptionsReg &someOptionsReg); + OptionsReg &operator=(const OptionsReg &someOptionsReg); + + RegKey mRegKey; + String mOptionsKeyName; + String mOptionsKeyGroupsPostfix; + String mOptionsKeyConnectionsPostfix; +}; + +inline +OptionsReg::OptionsReg(void) +: mRegKey(RegKey::CurrentUser), mOptionsKeyName("Software\\Diversified\\RemotePS\\Options"), + mOptionsKeyGroupsPostfix("\\Groups"), mOptionsKeyConnectionsPostfix("\\Connections") +{ + if(!mRegKey.openKey(mOptionsKeyName)) + { + mRegKey.createKey(mOptionsKeyName,""); + mRegKey.openKey(mOptionsKeyName); + } +} + +inline +OptionsReg::OptionsReg(const OptionsReg &someOptionsReg) +// private implementation +: mRegKey(RegKey::CurrentUser), mOptionsKeyName("Software\\Diversified\\RemotePS\\Options"), + mOptionsKeyGroupsPostfix("\\Groups"), mOptionsKeyConnectionsPostfix("\\Connections") +{ + *this=someOptionsReg; +} + +inline +OptionsReg::~OptionsReg() +{ +} + +inline +OptionsReg &OptionsReg::operator=(const OptionsReg &/*someOptionsReg*/) +{ // private implementation + return *this; +} +#endif \ No newline at end of file diff --git a/remotepsapp/ProcessItem.hpp b/remotepsapp/ProcessItem.hpp new file mode 100644 index 0000000..5915476 --- /dev/null +++ b/remotepsapp/ProcessItem.hpp @@ -0,0 +1,123 @@ +#ifndef _REMOTEPSAPP_PROCESSITEM_HPP_ +#define _REMOTEPSAPP_PROCESSITEM_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif + +typedef Block ModuleList; + +class ProcessItem : public ModuleList +{ +public: + ProcessItem(void); + virtual ~ProcessItem(); + const String &processName(void)const; + void processName(const String &processName); + DWORD processID(void)const; + void processID(DWORD processID); + const SystemTime &creationTime(void)const; + void creationTime(const SystemTime &creationTime); + const SystemTime &exitTime(void)const; + void exitTime(const SystemTime &exitTime); + const SystemTime &kernelTime(void)const; + void kernelTime(const SystemTime &kernelTime); + const SystemTime &userTime(void)const; + void userTime(const SystemTime &userTime); +private: + String mProcessName; + SystemTime mCreationTime; + SystemTime mExitTime; + SystemTime mKernelTime; + SystemTime mUserTime; + DWORD mProcessID; +}; + +inline +ProcessItem::ProcessItem(void) +: mProcessID(0) +{ +} + +inline +ProcessItem::~ProcessItem() +{ +} + +inline +const String &ProcessItem::processName(void)const +{ + return mProcessName; +} + +inline +void ProcessItem::processName(const String &processName) +{ + mProcessName=processName; +} + +inline +DWORD ProcessItem::processID(void)const +{ + return mProcessID; +} + +inline +void ProcessItem::processID(DWORD processID) +{ + mProcessID=processID; +} + +inline +const SystemTime &ProcessItem::creationTime(void)const +{ + return mCreationTime; +} + +inline +void ProcessItem::creationTime(const SystemTime &creationTime) +{ + mCreationTime=creationTime; +} + +inline +const SystemTime &ProcessItem::exitTime(void)const +{ + return mExitTime; +} + +inline +void ProcessItem::exitTime(const SystemTime &exitTime) +{ + mExitTime=exitTime; +} + +inline +const SystemTime &ProcessItem::kernelTime(void)const +{ + return mKernelTime; +} + +inline +void ProcessItem::kernelTime(const SystemTime &kernelTime) +{ + mKernelTime=kernelTime; +} + +inline +const SystemTime &ProcessItem::userTime(void)const +{ + return mUserTime; +} + +inline +void ProcessItem::userTime(const SystemTime &userTime) +{ + mUserTime=userTime; +} +#endif diff --git a/remotepsapp/ProcessList.hpp b/remotepsapp/ProcessList.hpp new file mode 100644 index 0000000..602190d --- /dev/null +++ b/remotepsapp/ProcessList.hpp @@ -0,0 +1,39 @@ +#ifndef _REMOTEPSAPP_PROCESSLIST_HPP_ +#define _REMOTEPSAPP_PROCESSLIST_HPP_ +#ifndef _REMOTEPSAPP_PROCESSITEM_HPP_ +#include +#endif + +class ProcessList : public Block +{ +public: + ProcessList(void); + virtual ~ProcessList(); + const String &computerName(void)const; + void computerName(const String &strComputerName); +private: + String mStrComputerName; +}; + +inline +ProcessList::ProcessList(void) +{ +} + +inline +ProcessList::~ProcessList() +{ +} + +inline +const String &ProcessList::computerName(void)const +{ + return mStrComputerName; +} + +inline +void ProcessList::computerName(const String &strComputerName) +{ + mStrComputerName=strComputerName; +} +#endif diff --git a/remotepsapp/RGB888.HPP b/remotepsapp/RGB888.HPP new file mode 100644 index 0000000..69a96a8 --- /dev/null +++ b/remotepsapp/RGB888.HPP @@ -0,0 +1,101 @@ +#ifndef _REMOTEPSAPP_RGB888_HPP_ +#define _REMOTEPSAPP_RGB888_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class RGB888 +{ +public: + RGB888(void); + RGB888(const RGB888 &someRGB888); + RGB888(BYTE red,BYTE green,BYTE blue); + ~RGB888(); // the destructor cannot be virtual + RGB888 &operator=(const RGB888 &someRGB888); + BOOL operator==(const RGB888 &someRGB888); + BYTE red(void)const; + void red(BYTE red); + BYTE green(void)const; + void green(BYTE green); + BYTE blue(void)const; + void blue(BYTE blue); +private: + BYTE mBlue; + BYTE mGreen; + BYTE mRed; +}; + +inline +RGB888::RGB888(void) +: mBlue(0), mGreen(0), mRed(0) +{ +} + +inline +RGB888::RGB888(BYTE red,BYTE green,BYTE blue) +: mBlue(blue), mGreen(green), mRed(red) +{ +} + +inline +RGB888::RGB888(const RGB888 &someRGB888) +{ + *this=someRGB888; +} + +inline +RGB888::~RGB888() +{ +} + +inline +RGB888 &RGB888::operator=(const RGB888 &someRGB888) +{ + red(someRGB888.red()); + green(someRGB888.green()); + blue(someRGB888.blue()); + return *this; +} + +inline +BOOL RGB888::operator==(const RGB888 &someRGB888) +{ + return red()==someRGB888.red()&&green()==someRGB888.green()&&blue()==someRGB888.blue(); +} + +inline +BYTE RGB888::red(void)const +{ + return mRed; +} + +inline +void RGB888::red(BYTE red) +{ + mRed=red; +} + +inline +BYTE RGB888::green(void)const +{ + return mGreen; +} + +inline +void RGB888::green(BYTE green) +{ + mGreen=green; +} + +inline +BYTE RGB888::blue(void)const +{ + return mBlue; +} + +inline +void RGB888::blue(BYTE blue) +{ + mBlue=blue; +} +#endif diff --git a/remotepsapp/RemoteProcessInfo.cpp b/remotepsapp/RemoteProcessInfo.cpp new file mode 100644 index 0000000..823a7a2 --- /dev/null +++ b/remotepsapp/RemoteProcessInfo.cpp @@ -0,0 +1,165 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +RemoteProcessInfo::RemoteProcessInfo(void) +: mpIRemoteProcess(0) +{ +} + +RemoteProcessInfo::~RemoteProcessInfo() +{ + disconnect(); +} + +bool RemoteProcessInfo::connect(const String &serverName) +{ + ServerInfo serverInfo(serverName); + MultiQuery multiQuery; + ComResult comResult; + ComObj comObj; + + if(isOkay())return false; + mServerName=serverName; + multiQuery.size(1); + multiQuery[0].pIID=&IID_IRemoteProcess; + comResult=comObj.createInstance(CLSID_CoRemoteProcess,0,ClassContext(RemoteServer|LocalServer),serverInfo,multiQuery); + if(!comResult.success()) + { + ErrorMessage::message(comResult.error()); + return false; + } + if(!ComResult(multiQuery[0].hr).success())return false; + mpIRemoteProcess=(IRemoteProcess*)multiQuery[0].pItf; + return isOkay(); +} + +void RemoteProcessInfo::disconnect(void) +{ + if(!isOkay())return; + mpIRemoteProcess->Release(); + mpIRemoteProcess=0; +} + +bool RemoteProcessInfo::getListItems(void) +{ + if(!isOkay())return false; + return getListItems(mpIRemoteProcess); +} + +bool RemoteProcessInfo::getDesktopWindow(WindowView &windowView) +{ + if(!isOkay())return false; + return getDesktopWindow(mpIRemoteProcess,windowView); +} + +bool RemoteProcessInfo::getListItems(IRemoteProcess *pIRemoteProcess) +{ + Variant variant; + Variant processVariant; + String ansiString; + String strParent; + DWORD processID; + int processCount; + + if(!pIRemoteProcess)return false; + processCount=0; + remove(); + computerName(mServerName); + try{pIRemoteProcess->Snapshot(&variant.getVARIANT());} + catch(...){return false;} + variant.getData(VTInt4,(void*)&processCount); + variant.clear(); + if(!processCount)return false; + pIRemoteProcess->GetProcessFirst(&variant.getVARIANT()); + variant.getData(VTInt4,&processID); + variant.clear(); + for(int index=0;indexGetModuleFirst(&variant.getVARIANT()); + if(VTInt4==variant.getType())variant.clear(); + else + { + BString string; + variant.getData(string); + ansiString=string.toString(); + ansiString.upper(); + strParent=ansiString; + insert(&ProcessItem()); + ProcessItem &processItem=operator[](size()-1); + processItem.processName(ansiString); + processItem.processID(processID); + variant.clear(); + while(true) + { + pIRemoteProcess->GetModuleNext(&variant.getVARIANT()); + if(VTInt4==variant.getType()) + { + variant.clear(); + break; + } + else + { + BString string; + variant.getData(string); + ansiString=string.toString(); + ansiString.upper(); + processItem.insert(&ansiString); + variant.clear(); + } + } + } + pIRemoteProcess->GetProcessNext(&variant.getVARIANT()); + variant.getData(VTInt4,&processID); + variant.clear(); + } + return size()?true:false; +} + +bool RemoteProcessInfo::getDesktopWindow(IRemoteProcess *pIRemoteProcess,WindowView &windowView) +{ + String strFileName("image000.tmp"); + String strPathFileName; + FileHandle outFile; + Variant variant; + SafeArray safeArray; + int upperBound; + BYTE *pData; + GlobalData imageBytes; + PathFind pathFind; + + pathFind.getWindowsTempDirectory(strPathFileName); + strPathFileName+=strFileName; + pIRemoteProcess->GetDesktopWindow(&variant.getVARIANT()); + if(VTArray!=variant.getType()){variant.clear();return false;} + if(!variant.getData(safeArray)){variant.clear();return false;} + upperBound=safeArray.getUpperBound(); + safeArray.accessData((void**)&pData); + imageBytes.size(*((DWORD*)pData)); + ::memcpy(&imageBytes[0],pData+(sizeof(DWORD)),imageBytes.size()); + outFile.open(strPathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + if(!outFile.isOkay()) + { + safeArray.unaccessData(); + safeArray.destroy(); + variant.clear(); + return false; + } + outFile.write(&imageBytes[0],imageBytes.size()); + outFile.close(); + windowView.createImage(strPathFileName); + ::unlink(strPathFileName); + safeArray.unaccessData(); + safeArray.destroy(); + variant.clear(); + return true; +} diff --git a/remotepsapp/RemoteProcessInfo.hpp b/remotepsapp/RemoteProcessInfo.hpp new file mode 100644 index 0000000..d73efcd --- /dev/null +++ b/remotepsapp/RemoteProcessInfo.hpp @@ -0,0 +1,49 @@ +#ifndef _REMOTEPSAPP_REMOTEPROCESSINFO_HPP_ +#define _REMOTEPSAPP_REMOTEPROCESSINFO_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _NNTP_JPGIMAGE_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_PROCESSLIST_HPP_ +#include +#endif +#ifndef _COM_COM_HPP_ +#include +#endif + +class IRemoteProcess; +class WindowView; + +class RemoteProcessInfo : public ProcessList +{ +public: + RemoteProcessInfo(void); + virtual ~RemoteProcessInfo(); + bool connect(const String &serverName); + void disconnect(void); + bool getListItems(void); + bool getDesktopWindow(WindowView &windowView); + const String &serverName(void)const; + bool isOkay(void)const; +private: + bool getListItems(IRemoteProcess *pIRemoteProcess); + bool getDesktopWindow(IRemoteProcess *pIRemoteProcess,WindowView &windowView); + + String mServerName; + IRemoteProcess *mpIRemoteProcess; +}; + +inline +const String &RemoteProcessInfo::serverName(void)const +{ + return mServerName; +} + +inline +bool RemoteProcessInfo::isOkay(void)const +{ + return mpIRemoteProcess?true:false; +} +#endif \ No newline at end of file diff --git a/remotepsapp/SCROLL.HPP b/remotepsapp/SCROLL.HPP new file mode 100644 index 0000000..ba744d4 --- /dev/null +++ b/remotepsapp/SCROLL.HPP @@ -0,0 +1,362 @@ +#ifndef _REMOTEPSAPP_SCROLLINFO_HPP_ +#define _REMOTEPSAPP_SCROLLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class ScrollInfo +{ +public: + ScrollInfo(void); + ScrollInfo(const ScrollInfo &someScrollInfo); + virtual ~ScrollInfo(); + ScrollInfo &operator=(const ScrollInfo &someScrollInfo); + BOOL operator==(const ScrollInfo &someScrollInfo)const; + void handleHorizontalScroll(CallbackData &someCallbackData); + void handleVerticalScroll(CallbackData &someCallbackData); + void handleSize(CallbackData &someCallbackData); + int minScrollx(void)const; + void minScrollx(int minScrollx); + int maxScrollx(void)const; + void maxScrollx(int maxScrollx); + int currScrollx(void)const;; + void currScrollx(int currScrollx); + int minScrolly(void)const; + void minScrolly(int minScrolly); + int maxScrolly(void)const; + void maxScrolly(int maxScrolly); + int currScrolly(void)const; + void currScrolly(int curScrolly); + void scrollableObjectDimensions(int width,int height); + int scrollableObjectWidth(void)const; + int scrollableObjectHeight(void)const; + BOOL scrollEvent(void)const; + void scrollEvent(BOOL scrollEvent); + BOOL sizeEvent(void)const; + void sizeEvent(BOOL sizeEvent); + HWND hwndOwner(void)const; + void hwndOwner(HWND hwndOwner); +private: + void scrollableObjectWidth(int scrollableObjectWidth); + void scrollableObjectHeight(int scrollableObjectHeight); + enum{PageIncrement=50,LineIncrement=5}; + int imax(int param1,int param2); + int imin(int param1,int param2); + + HWND mhWndOwner; + BOOL mSizeEvent; + BOOL mScrollEvent; + int mScrollableObjectWidth; + int mScrollableObjectHeight; + int mMinScrollx; + int mMaxScrollx; + int mCurrScrollx; + int mMinScrolly; + int mMaxScrolly; + int mCurrScrolly; +}; + +inline +ScrollInfo::ScrollInfo(void) +: mMinScrollx(0), mMaxScrollx(0), mCurrScrollx(0), mMinScrolly(0), mMaxScrolly(0), mCurrScrolly(0), + mScrollableObjectWidth(0), mScrollableObjectHeight(0), mSizeEvent(FALSE), mhWndOwner(0), mScrollEvent(FALSE) +{ +} + +inline +ScrollInfo::ScrollInfo(const ScrollInfo &someScrollInfo) +{ + *this=someScrollInfo; +} + +inline +ScrollInfo::~ScrollInfo() +{ +} + +inline +ScrollInfo &ScrollInfo::operator=(const ScrollInfo &someScrollInfo) +{ + minScrollx(someScrollInfo.minScrollx()); + maxScrollx(someScrollInfo.maxScrollx()); + currScrollx(someScrollInfo.currScrollx()); + maxScrolly(someScrollInfo.currScrolly()); + minScrolly(someScrollInfo.maxScrolly()); + currScrolly(someScrollInfo.minScrollx()); + sizeEvent(someScrollInfo.minScrollx()); + scrollEvent(someScrollInfo.scrollEvent()); + scrollableObjectWidth(someScrollInfo.scrollableObjectWidth()); + scrollableObjectHeight(someScrollInfo.scrollableObjectHeight()); + hwndOwner(someScrollInfo.hwndOwner()); + return *this; +} + +inline +BOOL ScrollInfo::operator==(const ScrollInfo &someScrollInfo)const +{ + return (minScrollx()==someScrollInfo.minScrollx()&& + maxScrollx()==someScrollInfo.maxScrollx()&& + currScrollx()==someScrollInfo.currScrollx()&& + minScrolly()==someScrollInfo.minScrolly()&& + maxScrolly()==someScrollInfo.maxScrolly()&& + currScrolly()==someScrollInfo.currScrolly()&& + sizeEvent()==someScrollInfo.sizeEvent()&& + scrollEvent()==someScrollInfo.scrollEvent()&& + scrollableObjectWidth()==someScrollInfo.scrollableObjectWidth()&& + scrollableObjectHeight()==someScrollInfo.scrollableObjectHeight()&& + hwndOwner()==someScrollInfo.hwndOwner()); +} + +inline +int ScrollInfo::minScrollx(void)const +{ + return mMinScrollx; +} + +inline +void ScrollInfo::minScrollx(int minScrollx) +{ + mMinScrollx=minScrollx; +} + +inline +int ScrollInfo::maxScrollx(void)const +{ + return mMaxScrollx; +} + +inline +void ScrollInfo::maxScrollx(int maxScrollx) +{ + mMaxScrollx=maxScrollx; +} + +inline +int ScrollInfo::currScrollx(void)const +{ + return mCurrScrollx; +} + +inline +void ScrollInfo::currScrollx(int currScrollx) +{ + mCurrScrollx=currScrollx; +} + +inline +int ScrollInfo::minScrolly(void)const +{ + return mMinScrolly; +} + +inline +void ScrollInfo::minScrolly(int minScrolly) +{ + mMinScrolly=minScrolly; +} + +inline +int ScrollInfo::maxScrolly(void)const +{ + return mMaxScrolly; +} + +inline +void ScrollInfo::maxScrolly(int maxScrolly) +{ + mMaxScrolly=maxScrolly; +} + +inline +int ScrollInfo::currScrolly(void)const +{ + return mCurrScrolly; +} + +inline +void ScrollInfo::currScrolly(int currScrolly) +{ + mCurrScrolly=currScrolly; +} + +inline +BOOL ScrollInfo::scrollEvent(void)const +{ + return mScrollEvent; +} + +inline +void ScrollInfo::scrollEvent(BOOL scrollEvent) +{ + mScrollEvent=scrollEvent; +} + +inline +BOOL ScrollInfo::sizeEvent(void)const +{ + return mSizeEvent; +} + +inline +void ScrollInfo::sizeEvent(BOOL sizeEvent) +{ + mSizeEvent=sizeEvent; +} + +inline +void ScrollInfo::scrollableObjectDimensions(int width,int height) +{ + RECT clientRect; + scrollableObjectWidth(width); + scrollableObjectHeight(height); + sizeEvent(FALSE); + scrollEvent(FALSE); + ::GetClientRect(hwndOwner(),&clientRect); + handleSize(CallbackData(0,MAKELPARAM(clientRect.right,clientRect.bottom))); +} + +inline +int ScrollInfo::scrollableObjectWidth(void)const +{ + return mScrollableObjectWidth; +} + +inline +void ScrollInfo::scrollableObjectWidth(int scrollableObjectWidth) +{ + mScrollableObjectWidth=scrollableObjectWidth; +} + +inline +int ScrollInfo::scrollableObjectHeight(void)const +{ + return mScrollableObjectHeight; +} + +inline +void ScrollInfo::scrollableObjectHeight(int scrollableObjectHeight) +{ + mScrollableObjectHeight=scrollableObjectHeight; +} + +inline +HWND ScrollInfo::hwndOwner(void)const +{ + return mhWndOwner; +} + +inline +void ScrollInfo::hwndOwner(HWND hwndOwner) +{ + mhWndOwner=hwndOwner; +} + +inline +void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) +{ + int xDelta; + int yDelta; + int xNew; + + yDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + xNew=currScrollx()-PageIncrement; + break; + case SB_PAGEDOWN : + xNew=currScrollx()+PageIncrement; + break; + case SB_LINEUP : + xNew=currScrollx()-LineIncrement; + break; + case SB_LINEDOWN : + xNew=currScrollx()+LineIncrement; + break; + case SB_THUMBPOSITION : + xNew= HIWORD(someCallbackData.wParam()); + break; + default : + xNew=currScrollx(); + break; + } + xNew=imax(0,xNew); + xNew=imin(maxScrollx(),xNew); + if(xNew==currScrollx())return; + scrollEvent(TRUE); + xDelta=xNew-currScrollx(); + currScrollx(xNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); +} + +inline +void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) +{ + int yDelta; + int yNew; + int xDelta; + + xDelta=0; + switch(LOWORD(someCallbackData.wParam())) + { + case SB_PAGEUP : + yNew=currScrolly()-PageIncrement; + break; + case SB_PAGEDOWN : + yNew=currScrolly()+PageIncrement; + break; + case SB_LINEUP : + yNew=currScrolly()-LineIncrement; + break; + case SB_LINEDOWN : + yNew=currScrolly()+LineIncrement; + break; + case SB_THUMBPOSITION : + yNew=HIWORD(someCallbackData.wParam()); + break; + default : + yNew=currScrolly(); + break; + } + yNew=imax(0,yNew); + yNew=imin(maxScrolly(),yNew); + if(yNew==currScrolly())return; + scrollEvent(TRUE); + yDelta=yNew-currScrolly(); + currScrolly(yNew); + ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); + ::UpdateWindow(hwndOwner()); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +void ScrollInfo::handleSize(CallbackData &someCallbackData) +{ + int xNew(someCallbackData.loWord()); + int yNew(someCallbackData.hiWord()); + + sizeEvent(TRUE); + maxScrollx(imax(scrollableObjectWidth()-xNew,0)); + ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); + currScrollx(imin(currScrollx(),maxScrollx())); + ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); + maxScrolly(imax(scrollableObjectHeight()-yNew,0)); + ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); + currScrolly(imin(currScrolly(),maxScrolly())); + ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); +} + +inline +int ScrollInfo::imax(int param1,int param2) +{ + return param1>param2?param1:param2; +} + +inline +int ScrollInfo::imin(int param1,int param2) +{ + return param1 +#endif +#ifndef _COMMON_ELASTICCONTROL_HPP_ +#include +#endif +#ifndef _JPGIMG_JPGIMAGE_HPP_ +#include +#endif +#ifndef _JPGIMG_SCROLLINFO_HPP_ +#include +#endif + +class WindowView : public ElasticControl +{ +public: + WindowView(void); + virtual ~WindowView(); + bool create(GUIWindow &parentWindow,GUIWindow &conformParent,const Rect &winRect,UINT controlID); + bool createImage(const String &strPathFileName); +private: + WindowView(const WindowView &someWindowView); + WindowView &operator=(const WindowView &someWindowView); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); + CallbackData::ReturnType eraseBackgroundHandler(CallbackData &someCallbackData); + void registerClass(void); + static const char *className(void); + + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mCloseHandler; + Callback mPaintHandler; + Callback mSizeHandler; + Callback mVerticalScrollHandler; + Callback mHorizontalScrollHandler; + Callback mEraseBackgroundHandler; + ScrollInfo mScrollInfo; + JPGImage mJPGImage; + static char mszClassName[]; +}; + +inline +const char *WindowView::className(void) +{ + return mszClassName; +} +#endif \ No newline at end of file diff --git a/remotepsapp/asmutil.asm b/remotepsapp/asmutil.asm new file mode 100644 index 0000000..5fd715f --- /dev/null +++ b/remotepsapp/asmutil.asm @@ -0,0 +1,242 @@ +INCLUDE ..\COMMON\COMMON.INC +INCLUDE ..\COMMON\MATH.INC +INCLUDE ..\NNTP\ASMUTIL.INC +SMART +LOCALS +.386 +.MODEL FLAT +.DATA +sOutColIterator DD ? +JumpTable: +TrailZero DD Trail0 +TrailOne DD Trail1 +TrailTwo DD Trail2 +TrailThree DD Trail3 + +SIZE_RGB888 EQU 3 + +.CODE +_resampleClipRow proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD outLen) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+14h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov edi,[ebp+0Ch] ; move lpOut to destination index register + mov eax,size RGB888 ; move sizeof(RGB888) to eax register + multiply eax,ecx ; multiply (outLen-1)*sizeof(RGB888) + add edi,eax ; edi=lpOut+(outLen-1L) + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov ebx,size RGB888 ; get size of RGB888 to ebx register + multiply eax,ebx ; multiply running factor by sizeof(RGB888) + mov dl,byte ptr[esi+eax] ; copy blue into dl + mov byte ptr[edi],dl ; copy blue into target + mov dl,byte ptr[esi+eax+1] ; copy green into dl + mov byte ptr[edi+1],dl ; copy green into target + mov dl,byte ptr[esi+eax+2] ; copy red into dl + mov byte ptr[edi+2],dl ; copy red into target + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + sub edi,size RGB888 ; advance (backwards) along lpOut array + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClipRow endp +_resampleClipCol proc near ; short resampleClip(char *lpIn,char *lpOut,DWORD inLen,DWORD inWidth,DWORD outLen,DWORD outWidth) +LOCAL sampleFactor:DWORD,runningFactor:DWORD=LocalLength + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + sub esp,LocalLength ; adjust stack for local + push esi ; save source index register + push edi ; save destination + push ebx ; save ebx register + mov edx,[ebp+1Ch] ; move outWidth to edx register + mov eax,size RGB888 ; move sizeof(RGB888) to eax register + multiply eax,edx ; eax=outWidth*sizeof(RGB888) + mov sOutColIterator,eax ; save column iterator + mov eax,[ebp+10h] ; move inLen to eax register + cmp eax,0000h ; compare inLen to zero + jle @@errorExit ; if it's less or equal then exit + mov ebx,[ebp+18h] ; move outLen to ebx register + cmp ebx,0000h ; compare outLen to zero + jle @@errorExit ; if it's less or equal then exit + dec eax ; decrement inLen + shl eax,10h ; multiply inLen by 65536L + divide eax,ebx ; divide ((inLen-1L)*65536L)/outLen + mov sampleFactor,eax ; store the factor + dec ebx ; ebx has (outLen-1) + mov ecx,ebx ; copy (outLen-1) to ecx + mov edi,[ebp+0Ch] ; move lpOut to destination index register + mov eax,[ebp+1Ch] ; move outWidth to eax register + multiply eax,ecx ; multiply (outLen-1)*width + mov edx,size RGB888 ; move sizeof(RGB888) to edx + multiply eax,edx ; eax has ((outLen-1)*outWidth)*sizeof(RGB888) + add edi,eax ; edi=lpOut+((outLen-1)*outWidth)*sizeof(RGB888), points to end of array + mov esi,[ebp+08h] ; move lpIn to source index register + multiply ecx,sampleFactor ; multiply (outLen-1)*sampleFactor + mov runningFactor,eax ; save this into runningFactor +@@loopControl: ; loop control sync address + cmp ecx,0000h ; make sure we're within boundary + jl @@exit ; if not then we exit + mov eax,runningFactor ; move last running factor into eax + round ; round it off + mov edx,[ebp+14h] ; move inWidth to edx register + multiply eax,edx ; eax=inWidth*runningFactor + mov edx,size RGB888 ; move sizeof(RGB888) to edx register + multiply eax,edx ; eax=(inWidth*runningFactor)*sizeof(RGB888) + mov dl,byte ptr[esi+eax] ; copy blue into dl + mov byte ptr[edi],dl ; copy blue into target + mov dl,byte ptr[esi+eax+1] ; copy green into dl + mov byte ptr[edi+1],dl ; copy green into target + mov dl,byte ptr[esi+eax+2] ; copy red into dl + mov byte ptr[edi+2],dl ; copy red into target + mov eax,sampleFactor ; move sampleFactor into eax register + sub runningFactor,eax ; subtract from running factor + dec ecx ; decrement counter + sub edi,sOutColIterator ; advance backwards along lpOutArray + jmp @@loopControl ; continue processing +@@errorExit: ; error exit return sync address + xor ax,ax ; clear ax register on error + jmp @@endProcedure ; jump to end procedure +@@exit: ; exit sync address + mov ax,01h ; set ax register on success +@@endProcedure: ; end procedure sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + add esp,LocalLength ; remove locals off stack + pop ebp ; restore previous stack frame + retn ; return near to caller +_resampleClipCol endp +copy MACRO + mov ecx,[ebx].ImageInfo@@mSrcWidthFactor ; move count of bytes into ecx register + mov edx,ecx ; move count of bytes into edx register + shr ecx,0002h ; divide count of bytes by sizeof(dword) + and edx,00003h ; get remainder into edx register + repnz movsd ; copy the column (esi->edi) + jmp dword ptr[edx*4+JumpTable] ; finish off the remaining bytes +Trail0: ; zero trailing bytes sync address + jmp @@endCopy ; we're all done +Trail1: ; 1 trailing byte sync address + mov al,byte ptr[esi] ; move source byte into al register + mov byte ptr [edi],al ; ... and copy it over to destination + inc esi ; increment source index + inc edi ; increment destination + jmp @@endCopy ; we're all done +Trail2: ; 2 trailing bytes sync address + mov ax,word ptr[esi] ; move a word value from source + mov word ptr[edi],ax ; move word value into destination + add esi,2 ; increment source index + add edi,2 ; increment destination index + jmp @@endCopy ; we're all done here +Trail3: ; 3 trailing bytes sync address + mov ax,word ptr[esi] ; move a word value from source + mov word ptr[edi],ax ; copy word value to destination + mov al,byte ptr[edi+2] ; move next byte to al + mov byte ptr[edi+2],al ; copy to destination + add esi,3 ; increment source index register + add edi,3 ; increment destination index register +@@endCopy: ; we're all done here +ENDM +_setAt proc near ; int setAt(ImageInfo *pImageInfo,DWORD row,DWORD col) + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push ebx ; save ebx register + mov ebx,[ebp+08h] ; move (ImageInfo*) to ebx register + cld ; clear the direction flag + mov eax,[ebx].ImageInfo@@mSrcWidth ; move source image width into eax register + multiply eax,SIZE_RGB888 ; multiply width by sizeof(RGB888) + mov [ebx].ImageInfo@@mSrcWidthFactor,eax ; replace factor into structure + mov eax,[ebx].ImageInfo@@mDstWidth ; move destination image width into eax register + multiply eax,SIZE_RGB888 ; multiply width by sizeof(RGB888) + mov [ebx].ImageInfo@@mDstWidthFactor,eax ; replace factor into structure + mov esi,[ebx].ImageInfo@@mSrcRGB888 ; move source RGB888* to source index + multiply [ebx].ImageInfo@@mDstRow,[ebx].ImageInfo@@mDstWidth ; multiply source width by source row->eax + add eax,[ebx].ImageInfo@@mDstCol ; add in the destination column + multiply eax,SIZE_RGB888 ; multiply result by sizeof(RGB888) + mov edi,[ebx].ImageInfo@@mDstRGB888 ; move RGB888* to esi + add edi,eax ; add in the offset, result to esi +@@rowLoop: ; row loop sync address + copy ; copy the column + mov eax,[ebx].ImageInfo@@mDstWidthFactor ; move destination width factor to eax + sub eax,[ebx].ImageInfo@@mSrcWidthFactor ; get difference between source and destination + add edi,eax ; add to destination so it sits at next row + inc [ebx].ImageInfo@@mSrcRow ; increment source row + mov eax,[ebx].ImageInfo@@mSrcRow ; replace row counter + cmp eax,[ebx].ImageInfo@@mSrcHeight ; cmp row to image height + jl @@rowLoop ; if less then keep going +@@imageDone: ; done processing sync address + pop ebx ; restore ebx register + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_setAt endp +_copyBGRRGB proc near ; void copyBGRRGB(RGB *pRGB,BGR *pBGR,int count,int output_components) + push ebp ; save frame + mov ebp,esp ; create new frame + push ebx ; save ebx register + push ecx ; save ecx register + push esi ; save source index register + push edi ; save destination index register + mov ebx,[ebp+14h] ; move output_components to ebx register + mov ecx,[ebp+10h] ; move item count to ecx, one item is a single XXX component + mov edi,[ebp+08h] ; move pRGB to edi register + mov esi,[ebp+0Ch] ; move pBGR to esi register + add esi,ebx ; add (output_components) to esi + dec esi ; subtract one to get index +@@copyLoop: ; copyLoop sync address + mov ax,word ptr[esi-1] ; get a word value from source into ax register + rol ax,08h ; swap the bytes in this word + mov word ptr[edi],ax ; write the word value out to destination + mov al,byte ptr[esi-2] ; move source blue component into al + mov byte ptr[edi+2],al ; move blue component into destination blue + add esi,ebx ; add output_components to esi + add edi,SIZE_RGB888 ; increment destination index to next component + loopnz @@copyLoop ; continue through count items + pop edi ; restore destination index register + pop esi ; restore source index register + pop ecx ; restore ecx register + pop ebx ; restore ebx register + pop ebp ; restore previous frame + retn ; return near to caller +_copyBGRRGB endp +public _resampleClipRow +public _resampleClipCol +public _copyBGRRGB +public _setAt +END diff --git a/remotepsapp/connectiondialog.cpp b/remotepsapp/connectiondialog.cpp new file mode 100644 index 0000000..d6bfe21 --- /dev/null +++ b/remotepsapp/connectiondialog.cpp @@ -0,0 +1,89 @@ +#include +#include +#include + +ConnectionDialog::ConnectionDialog(void) +{ + mInitHandler.setCallback(this,&ConnectionDialog::initHandler); + mDestroyHandler.setCallback(this,&ConnectionDialog::destroyHandler); + mCommandHandler.setCallback(this,&ConnectionDialog::commandHandler); + mCloseHandler.setCallback(this,&ConnectionDialog::closeHandler); + mDlgCodeHandler.setCallback(this,&ConnectionDialog::dlgCodeHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); +} + +ConnectionDialog::~ConnectionDialog() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::removeHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); +} + +ConnectionDialog &ConnectionDialog::operator=(const ConnectionDialog &/*someConnectionDialog*/) +{ // private implementation + return *this; +} + +bool ConnectionDialog::perform(GUIWindow &parentWindow,String &strComputerName) +{ + if(!::DialogBoxParam(processInstance(),(LPSTR)"CONNECT",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this))return false; + strComputerName=mStrComputerName; + return true; +} + +CallbackData::ReturnType ConnectionDialog::initHandler(CallbackData &/*someCallbackData*/) +{ + OptionsReg optionsReg; + Block strConnectionNames; + + mComputerNameCombo.assumeControl(getItem(CONNECT_COMPUTERNAME),CONNECT_COMPUTERNAME,false); + optionsReg.getConnections(strConnectionNames); + for(int index=0;index +#endif +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class ConnectionDialog : public DWindow +{ +public: + ConnectionDialog(void); + virtual ~ConnectionDialog(); + bool perform(GUIWindow &parentWindow,String &strComputerName); +private: + ConnectionDialog(const ConnectionDialog &someConnectionDialog); + ConnectionDialog &operator=(const ConnectionDialog &someConnectionDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + void ConnectionDialog::handleOk(void); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + Callback mDlgCodeHandler; + String mStrComputerName; + Control mComputerNameCombo; +}; + +inline +ConnectionDialog::ConnectionDialog(const ConnectionDialog &/*someConnectionDialog*/) +{ +} +#endif + diff --git a/remotepsapp/group.hpp b/remotepsapp/group.hpp new file mode 100644 index 0000000..0083167 --- /dev/null +++ b/remotepsapp/group.hpp @@ -0,0 +1,58 @@ +#ifndef _REMOTEPSAPP_GROUP_HPP_ +#define _REMOTEPSAPP_GROUP_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class Group : public Block +{ +public: + Group(void); + Group(const Group &someGroup); + virtual ~Group(); + Group &operator=(const Group &someGroup); + const String &groupName(void)const; + void groupName(const String &strGroupName); +private: + String mStrGroupName; +}; + +inline +Group::Group(void) +{ +} + +inline +Group::Group(const Group &someGroup) +{ + *this=someGroup; +} + +inline +Group::~Group() +{ +} + +inline +Group &Group::operator=(const Group &someGroup) +{ + groupName(someGroup.groupName()); + (Block &)*this=(Block&)someGroup; + return *this; +} + +inline +const String &Group::groupName(void)const +{ + return mStrGroupName; +} + +inline +void Group::groupName(const String &strGroupName) +{ + mStrGroupName=strGroupName; +} +#endif \ No newline at end of file diff --git a/remotepsapp/image000.bmp b/remotepsapp/image000.bmp new file mode 100644 index 0000000..b1a1309 Binary files /dev/null and b/remotepsapp/image000.bmp differ diff --git a/remotepsapp/image000.jpg b/remotepsapp/image000.jpg new file mode 100644 index 0000000..a1200ce Binary files /dev/null and b/remotepsapp/image000.jpg differ diff --git a/remotepsapp/main.cpp b/remotepsapp/main.cpp new file mode 100644 index 0000000..38f477f --- /dev/null +++ b/remotepsapp/main.cpp @@ -0,0 +1,10 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; + frameWindow.splash(); + frameWindow.createWindow("REMOTE-PS",String(STRING_REMOTEPS)+String(" ")+String(STRING_VERSION),"mainMenu","psicon"); + return frameWindow.messageLoop(); +} diff --git a/remotepsapp/mainfrm.hpp b/remotepsapp/mainfrm.hpp new file mode 100644 index 0000000..b6c5866 --- /dev/null +++ b/remotepsapp/mainfrm.hpp @@ -0,0 +1,51 @@ +#ifndef _REMOTEPSAPP_MAINFRAME_HPP_ +#define _REMOTEPSAPP_MAINFRAME_HPP_ +#ifndef _COMMON_MDIFRM_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif + +class StatusBarEx; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); + void splash(void); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); +private: + enum {StatusControlID=200,StartDynamicID=30000,FirstPartWidth=300,SecondPartWidth=390,SinglePart=1,DoublePart=2}; + CallbackData::ReturnType queryEndSessionHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + void handleFileOpenSingleConnection(void); + void handleFileSelectGroup(void); + + void setCaption(String strText=String()); + void setParts(int numParts); + void setText(const String &strText); + void handleFileOpen(void); + void handleFileClose(void); + void handleFileSave(void); + void handleFileSaveAs(void); + void handleFilePrint(void); + void handleFileQuit(void); + + Callback mQueryEndSessionHandler; + Callback mCloseHandler; + Callback mSizeHandler; + Callback mCommandHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + SmartPointer mStatusControl; +}; +#endif \ No newline at end of file diff --git a/remotepsapp/processview.cpp b/remotepsapp/processview.cpp new file mode 100644 index 0000000..75721e3 --- /dev/null +++ b/remotepsapp/processview.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include +#include + +ProcessView::ProcessView(void) +{ + mCreateHandler.setCallback(this,&ProcessView::createHandler); + mSizeHandler.setCallback(this,&ProcessView::sizeHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +ProcessView::~ProcessView() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +void ProcessView::connect(const String &serverName) +{ + setCaption(serverName); + mViewDialog.handleConnect(serverName); +} + +CallbackData::ReturnType ProcessView::createHandler(CallbackData &someCallbackData) +{ + Rect winRect; + Rect statRect; + + clientRect(winRect); + mStatusBar=::new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + mStatusBar->clientRect(statRect); + mViewDialog.perform(*this,mStatusBar); +// moveWindow(0,0,mViewDialog.width(),mViewDialog.height()); + return FALSE; +} + +CallbackData::ReturnType ProcessView::sizeHandler(CallbackData &someCallbackData) +{ + Rect winRect; + Rect statRect; + +// setWindowPos(InitialWidth,InitialHeight); + clientRect(winRect); + mStatusBar->clientRect(statRect); + mViewDialog.setWindowPos(width(),height()-mStatusBar->height()); + return FALSE; +} + +void ProcessView::setCaption(String strText) +{ + MDIWindow::setCaption(String("\\")+strText); +} + +// *** virtuals + +void ProcessView::preRegister(WNDCLASS &wndClass) +{ + wndClass.hbrBackground=(HBRUSH)COLOR_APPWORKSPACE; +} + +void ProcessView::preCreate(MDICREATESTRUCT &createStruct) +{ +// createStruct.cx=InitialWidth; +// createStruct.cy=InitialHeight; +} diff --git a/remotepsapp/processview.hpp b/remotepsapp/processview.hpp new file mode 100644 index 0000000..2b1995a --- /dev/null +++ b/remotepsapp/processview.hpp @@ -0,0 +1,37 @@ +#ifndef _REMOTEPSAPP_PROCESSVIEW_HPP_ +#define _REMOTEPSAPP_PROCESSVIEW_HPP_ +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_VIEWDIALOG_HPP_ +#include +#endif + +class StatusBarEx; +class IRemoteProcess; + +class ProcessView : public MDIWindow +{ +public: + ProcessView(void); + virtual ~ProcessView(); + void connect(const String &serverName); +protected: + virtual void preRegister(WNDCLASS &wndClass); + virtual void preCreate(MDICREATESTRUCT &createStruct); +private: + enum {StatusBarID=101,InitialWidth=640,InitialHeight=540}; + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + void setCaption(String strText); + void handleConnect(String *pServerName); + + Callback mCreateHandler; + Callback mSizeHandler; + SmartPointer mStatusBar; + ViewDialog mViewDialog; +}; +#endif \ No newline at end of file diff --git a/remotepsapp/psicon.ico b/remotepsapp/psicon.ico new file mode 100644 index 0000000..dea90eb Binary files /dev/null and b/remotepsapp/psicon.ico differ diff --git a/remotepsapp/pureimg.cpp b/remotepsapp/pureimg.cpp new file mode 100644 index 0000000..4915407 --- /dev/null +++ b/remotepsapp/pureimg.cpp @@ -0,0 +1,151 @@ +#include +#include +#include +#include + +bool PureImage::draw(PureDevice &pureDevice) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(0,0,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool PureImage::draw(PureDevice &pureDevice,int xSrc,int ySrc) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(xSrc,ySrc,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool PureImage::draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(dstRect,compatibleDevice,srcPoint); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool PureImage::stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.stretchBlt(Rect(xyPoint.x(),xyPoint.y(),strwidth,strheight),compatibleDevice,Rect(0,0,width(),height())); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return FALSE; +} + +bool PureImage::resample(PureDevice &pureDevice,int newWidth) +{ + Array rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + float heightFactor; + float aspectRatio; + int newHeight; + + newWidth-=(newWidth%4); // align the width on DWORD boundary + if(!isOkay())return false; + aspectRatio=(float)width()/(float)height(); + newHeight=(float)newWidth/aspectRatio; + heightFactor=(float)newHeight/height(); + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(int((float)getBitmapInfo().height()*heightFactor)); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + tmpArray.size(bitmapInfo.width()*height()); + for(int row=0;row rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + + if(!isOkay())return false; + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(-newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + bitmapInfo.verifyDimensions(); + tmpArray.size(bitmapInfo.width()*(height()<0?-height():height())); + for(int row=0;row rgbArray; + Array tmpArray; + BitmapInfo bitmapInfo; + + if(!getRGBArray().size())return false; + bitmapInfo.rgbColors(0); + bitmapInfo.bitCount(BitmapInfo::Bit24); + bitmapInfo.width(newWidth); + bitmapInfo.height(-newHeight); + bitmapInfo.planes(1); + bitmapInfo.compression(BI_RGB); + bitmapInfo.sizeImage(0); + bitmapInfo.colorUsed(0); + bitmapInfo.colorImportant(0); + bitmapInfo.verifyDimensions(); + tmpArray.size(bitmapInfo.width()*(height()<0?-height():height())); + for(int row=0;row &rawData) +{ + return RawImage::getRawData(rawData); +} + +bool PureImage::setRawData(GlobalData &rawData,PureDevice &pureDevice) +{ + destroy(); + if(!RawImage::setRawData(rawData))return false; + mhBitmap=::CreateDIBitmap((HDC)pureDevice,(BITMAPINFOHEADER*)getBitmapInfo(),CBM_INIT,&getRGBArray()[0],(BITMAPINFO*)getBitmapInfo(),DIB_RGB_COLORS); + return true; +} + diff --git a/remotepsapp/pureimg.hpp b/remotepsapp/pureimg.hpp new file mode 100644 index 0000000..3785bd5 --- /dev/null +++ b/remotepsapp/pureimg.hpp @@ -0,0 +1,121 @@ +#ifndef _REMOTEPSAPP_JPGIMAGE_HPP_ +#define _REMOTEPSAPP_JPGIMAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_RGB888_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_RAWIMAGE_HPP_ +#include +#endif + +class String; +class PureDevice; +class RGB888; + +class PureImage : public RawImage +{ +public: + PureImage(void); + virtual ~PureImage(); + bool draw(PureDevice &pureDevice); + bool draw(PureDevice &pureDevice,int xSrc,int ySrc); + bool draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + bool stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight); + bool resample(PureDevice &pureDevice,int width); + bool resample(PureDevice &pureDevice,int newWidth,int newHeight); + bool resample(int newWidth,int newHeight); + DWORD memoryUsage(void)const; + bool isOkay(void)const; + int width(void)const; + int height(void)const; + bool getRawData(GlobalData &rawData); + bool setRawData(GlobalData &rawData,PureDevice &pureDevice); + bool setRawData(GlobalData &rawData); + bool getAt(DWORD row,DWORD col,RGB888 &rgb888)const; +private: + PureImage(const PureImage &somePureImage); + PureImage &operator=(const PureImage &somePureImage); + void destroy(void); + + HBITMAP mhBitmap; +}; + +inline +PureImage::PureImage(void) +: mhBitmap(0) +{ +} + +inline +PureImage::PureImage(const PureImage &somePureImage) +: mhBitmap(0) +{ // private implementation + *this=somePureImage; +} + +inline +PureImage &PureImage::operator=(const PureImage &somePureImage) +{ // private implementation + return *this; +} + +inline +PureImage::~PureImage() +{ + destroy(); +} + +inline +int PureImage::width(void)const +{ + return getBitmapInfo().width(); +} + +inline +int PureImage::height(void)const +{ + if(getBitmapInfo().height()<0)return -getBitmapInfo().height(); + return getBitmapInfo().height(); +} + +inline +bool PureImage::getAt(DWORD row,DWORD col,RGB888 &rgb888)const +{ + return RawImage::getAt(row,col,rgb888); +} + +inline +bool PureImage::isOkay(void)const +{ + return mhBitmap?TRUE:FALSE; +} + +inline +void PureImage::destroy(void) +{ + if(!mhBitmap)return; + ::DeleteObject(mhBitmap); + mhBitmap=0; +} + +inline +DWORD PureImage::memoryUsage(void)const +{ + return RawImage::memoryUsage(); +} + +inline +bool PureImage::setRawData(GlobalData &rawData) +{ + destroy(); + return RawImage::setRawData(rawData); +} +#endif diff --git a/remotepsapp/rawimg.cpp b/remotepsapp/rawimg.cpp new file mode 100644 index 0000000..d669b32 --- /dev/null +++ b/remotepsapp/rawimg.cpp @@ -0,0 +1,66 @@ +#include + +RawImage &RawImage::operator=(const RawImage &/*rawImage*/) +{ // private implementation + return *this; +} + +bool RawImage::draw(PureDevice &pureDevice) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(0,0,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool RawImage::draw(PureDevice &pureDevice,int xSrc,int ySrc) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(Rect(xSrc,ySrc,width(),height()),compatibleDevice,Point(0,0)); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool RawImage::draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.bitBlt(dstRect,compatibleDevice,srcPoint); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return TRUE; +} + +bool RawImage::stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight) +{ + PureDevice compatibleDevice; + if(!isOkay())return FALSE; + compatibleDevice.compatibleDevice(pureDevice); + compatibleDevice.select((GDIObj)mhBitmap,TRUE); + pureDevice.stretchBlt(Rect(xyPoint.x(),xyPoint.y(),strwidth,strheight),compatibleDevice,Rect(0,0,width(),height())); + compatibleDevice.select((GDIObj)mhBitmap,FALSE); + return FALSE; +} + +bool RawImage::createImage(PureDevice &pureDevice,int width,int height,GlobalData &rawData) +{ + destroy(); + mBitmapInfo.width(width); + mBitmapInfo.height(height); + mhBitmap=::CreateCompatibleBitmap(pureDevice,width,height); + if(!mhBitmap)return false; + ::SetDIBits(pureDevice,mhBitmap,0,height,&rawData[0],(BITMAPINFO*)mBitmapInfo,DIB_RGB_COLORS); + return isOkay(); +} + + + + + diff --git a/remotepsapp/rawimg.hpp b/remotepsapp/rawimg.hpp new file mode 100644 index 0000000..b6ca341 --- /dev/null +++ b/remotepsapp/rawimg.hpp @@ -0,0 +1,89 @@ +#ifndef _REMOTEPSAPP_RAWIMAGE_HPP_ +#define _REMOTEPSAPP_RAWIMAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_RGBCOLOR_HPP_ +#include +#endif +#ifndef _COMMON_DIBITMAP_HPP_ +#include +#endif +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif + +class RawImage +{ +public: + class RawImageInvalidImage{}; + RawImage(void); + virtual ~RawImage(); + int width(void)const; + int height(void)const; + bool draw(PureDevice &pureDevice); + bool draw(PureDevice &pureDevice,int xSrc,int ySrc); + bool draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint); + bool stretch(PureDevice &pureDevice,const Point &xyPoint,int strwidth,int strheight); + bool createImage(PureDevice &pureDevice,int width,int height,GlobalData &rawData); + bool isOkay(void)const; +private: + RawImage(const RawImage &someRawImage); + RawImage &operator=(const RawImage &rawImage); + void destroy(void); + + BitmapInfo mBitmapInfo; + HBITMAP mhBitmap; +}; + +inline +RawImage::RawImage(void) +: mhBitmap(0) +{ + mBitmapInfo.bitCount(BitmapInfo::Bit24); + mBitmapInfo.colorUsed(0); + mBitmapInfo.colorImportant(0); + mBitmapInfo.compression(BI_RGB); +} + +inline +RawImage::RawImage(const RawImage &/*someRawImage*/) +{ // private implementation +} + +inline +RawImage::~RawImage() +{ + destroy(); +} + +inline +int RawImage::height(void)const +{ + if(mBitmapInfo.height()<0)return -mBitmapInfo.height(); + return mBitmapInfo.height(); +} + +inline +int RawImage::width(void)const +{ + return mBitmapInfo.width(); +} + +inline +bool RawImage::isOkay(void)const +{ + return mhBitmap?true:false; +} + +inline +void RawImage::destroy(void) +{ + if(!isOkay())return; + ::DeleteObject(mhBitmap); + mhBitmap=0; +} +#endif diff --git a/remotepsapp/remoteps.aps b/remotepsapp/remoteps.aps new file mode 100644 index 0000000..745ab12 Binary files /dev/null and b/remotepsapp/remoteps.aps differ diff --git a/remotepsapp/remoteps.h b/remotepsapp/remoteps.h new file mode 100644 index 0000000..5ae079f --- /dev/null +++ b/remotepsapp/remoteps.h @@ -0,0 +1,41 @@ +#ifndef _REMOTEPSAPP_REMOTEPS_H_ +#define _REMOTEPSAPP_REMOTEPS_H_ + + +// VIEWDIALOG +#define VIEWDIALOG_REFRESHNOW 1003 + +#define VIEWDIALOG_PROCESSLIST 1001 + + +#define CONNECT_COMPUTERNAME 1000 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 + +#define PSMENU 10000 +#define PSMENU_FILEOPEN 10001 +#define PSMENU_FILECLOSE 10002 +#define PSMENU_FILESAVE 10003 +#define PSMENU_FILESAVEAS 10004 +#define PSMENU_FILEPRINT 10005 +#define PSMENU_FILEQUIT 10006 + +#define PSMENU_OPTIONSGROUPS 10007 + +#define PSMENU_HELPCONTENTS 10008 +#define PSMENU_HELPSEARCH 10009 +#define PSMENU_REGISTRATION 10010 +#define PSMENU_HELPABOUT 10011 + +#define PSMENU_SINGLECONNECTION 20000 +#define PSMENU_SELECTGROUP 20001 + +#define STRING_REMOTEPS 100 +#define STRING_VERSION 101 +#define STRING_PROCESSVIEWCLASSNAME 102 +#endif diff --git a/remotepsapp/remoteps.hpp b/remotepsapp/remoteps.hpp new file mode 100644 index 0000000..b1deb81 --- /dev/null +++ b/remotepsapp/remoteps.hpp @@ -0,0 +1,6 @@ +#ifndef _REMOTEPSAPP_REMOTEPS_HPP_ +#define _REMOTEPSAPP_REMOTEPS_HPP_ +#ifndef _REMOTEPSAPP_REMOTEPS_H_ +#include +#endif +#endif \ No newline at end of file diff --git a/remotepsapp/remoteps.rc b/remotepsapp/remoteps.rc new file mode 100644 index 0000000..52adf7c --- /dev/null +++ b/remotepsapp/remoteps.rc @@ -0,0 +1,225 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +PSICON ICON DISCARDABLE "PSICON.ICO" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +LIST BITMAP DISCARDABLE "STRIP.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", PSMENU_FILEOPEN + MENUITEM "&Close", PSMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save", PSMENU_FILESAVE, GRAYED + MENUITEM "Save &As...", PSMENU_FILESAVEAS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Print...", PSMENU_FILEPRINT, GRAYED + MENUITEM SEPARATOR + MENUITEM "E&xit", PSMENU_FILEQUIT + END + POPUP "&Options" + BEGIN + MENUITEM "&Groups...", PSMENU_OPTIONSGROUPS + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", PSMENU_HELPCONTENTS + MENUITEM "&Search", PSMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", PSMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About RemotePS...", PSMENU_HELPABOUT + END +END + +VIEWMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", PSMENU_FILEOPEN + MENUITEM "&Close", PSMENU_FILECLOSE + MENUITEM SEPARATOR + MENUITEM "&Save", PSMENU_FILESAVE, GRAYED + MENUITEM "Save &As...", PSMENU_FILESAVEAS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Print...", PSMENU_FILEPRINT, GRAYED + MENUITEM SEPARATOR + MENUITEM "E&xit", PSMENU_FILEQUIT + END + POPUP "&Options" + BEGIN + MENUITEM "&Groups...", PSMENU_OPTIONSGROUPS + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", PSMENU_HELPCONTENTS + MENUITEM "&Search", PSMENU_HELPSEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", PSMENU_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About RemotePS...", PSMENU_HELPABOUT + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""remotepsapp\\remoteps.h""\r\n" + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +CONNECT DIALOGEX 0, 0, 201, 69 +STYLE DS_MODALFRAME | WS_POPUP | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_STATICEDGE +CAPTION "Connect Network" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,144,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,144,24,50,14 + LTEXT "Computer Name",-1,13,26,52,8 + COMBOBOX CONNECT_COMPUTERNAME,13,41,136,58,CBS_DROPDOWN | + CBS_SORT | WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE +END + +VIEWDIALOG DIALOG DISCARDABLE 0, 0, 355, 291 +STYLE WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_SYSMENU +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "Close",IDOK,291,4,50,14 + PUSHBUTTON "Refresh Now",VIEWDIALOG_REFRESHNOW,291,19,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "CONNECT", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 194 + TOPMARGIN, 7 + BOTTOMMARGIN, 62 + END + + "VIEWDIALOG", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 348 + BOTTOMMARGIN, 284 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_REMOTEPS "RemotePS" + STRING_VERSION "v1.00" + STRING_PROCESSVIEWCLASSNAME "ProcessView" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/remotepsapp/remotepsapp.001 b/remotepsapp/remotepsapp.001 new file mode 100644 index 0000000..2e02784 --- /dev/null +++ b/remotepsapp/remotepsapp.001 @@ -0,0 +1,172 @@ +# Microsoft Developer Studio Project File - Name="remotepsapp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=remotepsapp - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "remotepsapp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "remotepsapp.mak" CFG="remotepsapp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "remotepsapp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "remotepsapp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "remotepsapp - Win32 Release" +# Name "remotepsapp - Win32 Debug" +# Begin Source File + +SOURCE=..\Exe\com.lib +# End Source File +# Begin Source File + +SOURCE=.\connectiondialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\ConnectionThread.cpp +# End Source File +# Begin Source File + +SOURCE=..\EXE\imagelst.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\jpeg6b.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\jpgimg.lib +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=..\EXE\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msthread.lib +# End Source File +# Begin Source File + +SOURCE=.\Optnsreg.cpp +# End Source File +# Begin Source File + +SOURCE=.\processview.cpp +# End Source File +# Begin Source File + +SOURCE=.\psicon.ico +# End Source File +# Begin Source File + +SOURCE=.\RemoteProcessInfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\remoteps.rc + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\EXE\statbar.lib +# End Source File +# Begin Source File + +SOURCE=.\viewdialog.cpp +# End Source File +# Begin Source File + +SOURCE=..\EXE\widget.lib +# End Source File +# Begin Source File + +SOURCE=.\windowview.cpp +# End Source File +# End Target +# End Project diff --git a/remotepsapp/remotepsapp.dsp b/remotepsapp/remotepsapp.dsp new file mode 100644 index 0000000..8de038d --- /dev/null +++ b/remotepsapp/remotepsapp.dsp @@ -0,0 +1,135 @@ +# Microsoft Developer Studio Project File - Name="remotepsapp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=remotepsapp - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "remotepsapp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "remotepsapp.mak" CFG="remotepsapp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "remotepsapp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "remotepsapp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /D "_COMMON_USENLS_" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /i "\work" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "remotepsapp - Win32 Release" +# Name "remotepsapp - Win32 Debug" +# Begin Source File + +SOURCE=.\connectiondialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\ConnectionThread.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\Optnsreg.cpp +# End Source File +# Begin Source File + +SOURCE=.\processview.cpp +# End Source File +# Begin Source File + +SOURCE=.\psicon.ico +# End Source File +# Begin Source File + +SOURCE=.\RemoteProcessInfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\remoteps.rc +# End Source File +# Begin Source File + +SOURCE=.\viewdialog.cpp +# End Source File +# Begin Source File + +SOURCE=.\windowview.cpp +# End Source File +# End Target +# End Project diff --git a/remotepsapp/remotepsapp.dsw b/remotepsapp/remotepsapp.dsw new file mode 100644 index 0000000..12d29a7 --- /dev/null +++ b/remotepsapp/remotepsapp.dsw @@ -0,0 +1,164 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\BSPTREE\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "com"=..\com\com.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "imagelst"=..\IMAGELST\imagelst.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpeg6b"="..\..\parts\jpeg-6b\jpeg6b.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "remotepsapp"=.\remotepsapp.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name com + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name imagelst + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpeg6b + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name widget + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\THREAD\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "widget"=..\widget\widget.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/remotepsapp/remotepsapp.mak b/remotepsapp/remotepsapp.mak new file mode 100644 index 0000000..cf8bec7 --- /dev/null +++ b/remotepsapp/remotepsapp.mak @@ -0,0 +1,1364 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on remotepsapp.dsp +!IF "$(CFG)" == "" +CFG=remotepsapp - Win32 Debug +!MESSAGE No configuration specified. Defaulting to remotepsapp - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "remotepsapp - Win32 Release" && "$(CFG)" !=\ + "remotepsapp - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "remotepsapp.mak" CFG="remotepsapp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "remotepsapp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "remotepsapp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remotepsapp.exe" + +!ELSE + +ALL : "$(OUTDIR)\remotepsapp.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\connectiondialog.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\Mainfrm.obj" + -@erase "$(INTDIR)\Optnsreg.obj" + -@erase "$(INTDIR)\processview.obj" + -@erase "$(INTDIR)\RemoteProcessInfo.obj" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\viewdialog.obj" + -@erase "$(INTDIR)\windowview.obj" + -@erase "$(OUTDIR)\remotepsapp.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\remotepsapp.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remotepsapp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\remotepsapp.pdb" /machine:I386 /out:"$(OUTDIR)\remotepsapp.exe"\ + +LINK32_OBJS= \ + "$(INTDIR)\connectiondialog.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\Mainfrm.obj" \ + "$(INTDIR)\Optnsreg.obj" \ + "$(INTDIR)\processview.obj" \ + "$(INTDIR)\RemoteProcessInfo.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\viewdialog.obj" \ + "$(INTDIR)\windowview.obj" \ + "..\Exe\com.lib" \ + "..\EXE\imagelst.lib" \ + "..\Exe\jpeg6b.lib" \ + "..\Exe\jpgimg.lib" \ + "..\EXE\mscommon.lib" \ + "..\Exe\msthread.lib" \ + "..\EXE\statbar.lib" \ + "..\EXE\widget.lib" + +"$(OUTDIR)\remotepsapp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +OUTDIR=.\Debug +INTDIR=.\Debug +# Begin Custom Macros +OutDir=.\Debug +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\remotepsapp.exe" + +!ELSE + +ALL : "$(OUTDIR)\remotepsapp.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\connectiondialog.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\Mainfrm.obj" + -@erase "$(INTDIR)\Optnsreg.obj" + -@erase "$(INTDIR)\processview.obj" + -@erase "$(INTDIR)\RemoteProcessInfo.obj" + -@erase "$(INTDIR)\remoteps.res" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "$(INTDIR)\viewdialog.obj" + -@erase "$(INTDIR)\windowview.obj" + -@erase "$(OUTDIR)\remotepsapp.exe" + -@erase "$(OUTDIR)\remotepsapp.ilk" + -@erase "$(OUTDIR)\remotepsapp.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /I "\work" /I "\parts" /I\ + "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__"\ + /Fp"$(INTDIR)\remotepsapp.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Debug/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\remoteps.res" /d "_DEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\remotepsapp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib /nologo\ + /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\remotepsapp.pdb" /debug\ + /machine:I386 /out:"$(OUTDIR)\remotepsapp.exe" /pdbtype:sept +LINK32_OBJS= \ + "$(INTDIR)\connectiondialog.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\Mainfrm.obj" \ + "$(INTDIR)\Optnsreg.obj" \ + "$(INTDIR)\processview.obj" \ + "$(INTDIR)\RemoteProcessInfo.obj" \ + "$(INTDIR)\remoteps.res" \ + "$(INTDIR)\viewdialog.obj" \ + "$(INTDIR)\windowview.obj" \ + "..\Exe\com.lib" \ + "..\EXE\imagelst.lib" \ + "..\Exe\jpeg6b.lib" \ + "..\Exe\jpgimg.lib" \ + "..\EXE\mscommon.lib" \ + "..\Exe\msthread.lib" \ + "..\EXE\statbar.lib" \ + "..\EXE\widget.lib" + +"$(OUTDIR)\remotepsapp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "remotepsapp - Win32 Release" || "$(CFG)" ==\ + "remotepsapp - Win32 Debug" +SOURCE=.\connectiondialog.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_CONNE=\ + ".\connectiondialog.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\connectiondialog.obj" : $(SOURCE) $(DEP_CPP_CONNE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_CONNE=\ + ".\connectiondialog.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\connectiondialog.obj" : $(SOURCE) $(DEP_CPP_CONNE) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\main.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_MAIN_=\ + ".\mainfrm.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_MAIN_=\ + ".\mainfrm.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Mainfrm.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_MAINF=\ + ".\connectiondialog.hpp"\ + ".\mainfrm.hpp"\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\processview.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + ".\viewdialog.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\notify.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"sgi_stl\map"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"widget\tabctrl.hpp"\ + + +"$(INTDIR)\Mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_MAINF=\ + "..\..\parts\sgi_stl\stl_algobase.h"\ + "..\..\parts\sgi_stl\stl_alloc.h"\ + "..\..\parts\sgi_stl\stl_config.h"\ + "..\..\parts\sgi_stl\stl_construct.h"\ + "..\..\parts\sgi_stl\stl_function.h"\ + "..\..\parts\sgi_stl\stl_iterator.h"\ + "..\..\parts\sgi_stl\stl_iterator_base.h"\ + "..\..\parts\sgi_stl\stl_map.h"\ + "..\..\parts\sgi_stl\stl_multimap.h"\ + "..\..\parts\sgi_stl\stl_pair.h"\ + "..\..\parts\sgi_stl\stl_relops.h"\ + "..\..\parts\sgi_stl\stl_threads.h"\ + "..\..\parts\sgi_stl\stl_tree.h"\ + "..\..\parts\sgi_stl\type_traits.h"\ + ".\connectiondialog.hpp"\ + ".\mainfrm.hpp"\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\processview.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + ".\viewdialog.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\notify.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"widget\tabctrl.hpp"\ + + +"$(INTDIR)\Mainfrm.obj" : $(SOURCE) $(DEP_CPP_MAINF) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Optnsreg.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_OPTNS=\ + ".\group.hpp"\ + ".\optnsreg.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Optnsreg.obj" : $(SOURCE) $(DEP_CPP_OPTNS) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_OPTNS=\ + ".\group.hpp"\ + ".\optnsreg.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\regkey.hpp"\ + {$(INCLUDE)}"common\regsam.hpp"\ + {$(INCLUDE)}"common\shellapi.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Optnsreg.obj" : $(SOURCE) $(DEP_CPP_OPTNS) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\processview.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_PROCE=\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\processview.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\viewdialog.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\notify.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"imagelst\ftree.hpp"\ + {$(INCLUDE)}"imagelst\imagelst.hpp"\ + {$(INCLUDE)}"imagelst\treeview.hpp"\ + {$(INCLUDE)}"imagelst\tvinsert.hpp"\ + {$(INCLUDE)}"imagelst\tvitem.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"sgi_stl\map"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"widget\tabctrl.hpp"\ + + +"$(INTDIR)\processview.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_PROCE=\ + "..\..\parts\sgi_stl\stl_algobase.h"\ + "..\..\parts\sgi_stl\stl_alloc.h"\ + "..\..\parts\sgi_stl\stl_config.h"\ + "..\..\parts\sgi_stl\stl_construct.h"\ + "..\..\parts\sgi_stl\stl_function.h"\ + "..\..\parts\sgi_stl\stl_iterator.h"\ + "..\..\parts\sgi_stl\stl_iterator_base.h"\ + "..\..\parts\sgi_stl\stl_map.h"\ + "..\..\parts\sgi_stl\stl_multimap.h"\ + "..\..\parts\sgi_stl\stl_pair.h"\ + "..\..\parts\sgi_stl\stl_relops.h"\ + "..\..\parts\sgi_stl\stl_threads.h"\ + "..\..\parts\sgi_stl\stl_tree.h"\ + "..\..\parts\sgi_stl\type_traits.h"\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\processview.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\viewdialog.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\notify.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"imagelst\ftree.hpp"\ + {$(INCLUDE)}"imagelst\imagelst.hpp"\ + {$(INCLUDE)}"imagelst\treeview.hpp"\ + {$(INCLUDE)}"imagelst\tvinsert.hpp"\ + {$(INCLUDE)}"imagelst\tvitem.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"widget\tabctrl.hpp"\ + + +"$(INTDIR)\processview.obj" : $(SOURCE) $(DEP_CPP_PROCE) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\RemoteProcessInfo.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_REMOT=\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\windowview.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bound.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\SafeArray.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"com\variant.hpp"\ + {$(INCLUDE)}"com\vtime.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\finddata.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pathfnd.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"jpgimg\scroll.hpp"\ + {$(INCLUDE)}"remoteps\remoteps.h"\ + {$(INCLUDE)}"remoteps\remoteps_i.c"\ + {$(INCLUDE)}"sgi_stl\map"\ + + +"$(INTDIR)\RemoteProcessInfo.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_REMOT=\ + "..\..\parts\sgi_stl\stl_algobase.h"\ + "..\..\parts\sgi_stl\stl_alloc.h"\ + "..\..\parts\sgi_stl\stl_config.h"\ + "..\..\parts\sgi_stl\stl_construct.h"\ + "..\..\parts\sgi_stl\stl_function.h"\ + "..\..\parts\sgi_stl\stl_iterator.h"\ + "..\..\parts\sgi_stl\stl_iterator_base.h"\ + "..\..\parts\sgi_stl\stl_map.h"\ + "..\..\parts\sgi_stl\stl_multimap.h"\ + "..\..\parts\sgi_stl\stl_pair.h"\ + "..\..\parts\sgi_stl\stl_relops.h"\ + "..\..\parts\sgi_stl\stl_threads.h"\ + "..\..\parts\sgi_stl\stl_tree.h"\ + "..\..\parts\sgi_stl\type_traits.h"\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\windowview.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bound.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\SafeArray.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"com\variant.hpp"\ + {$(INCLUDE)}"com\vtime.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\finddata.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pathfnd.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"jpgimg\scroll.hpp"\ + {$(INCLUDE)}"remoteps\remoteps.h"\ + {$(INCLUDE)}"remoteps\remoteps_i.c"\ + + +"$(INTDIR)\RemoteProcessInfo.obj" : $(SOURCE) $(DEP_CPP_REMOT) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\remoteps.rc +DEP_RSC_REMOTE=\ + ".\psicon.ico"\ + ".\remoteps.h"\ + ".\STRIP.BMP"\ + + +"$(INTDIR)\remoteps.res" : $(SOURCE) $(DEP_RSC_REMOTE) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +SOURCE=.\viewdialog.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_VIEWD=\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + ".\viewdialog.hpp"\ + ".\windowview.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\notify.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"imagelst\ftree.hpp"\ + {$(INCLUDE)}"imagelst\imagelst.hpp"\ + {$(INCLUDE)}"imagelst\treeview.hpp"\ + {$(INCLUDE)}"imagelst\tvinsert.hpp"\ + {$(INCLUDE)}"imagelst\tvitem.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"jpgimg\scroll.hpp"\ + {$(INCLUDE)}"sgi_stl\map"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"widget\tabctrl.hpp"\ + {$(INCLUDE)}"widget\tabhandler.hpp"\ + {$(INCLUDE)}"widget\tabitem.hpp"\ + + +"$(INTDIR)\viewdialog.obj" : $(SOURCE) $(DEP_CPP_VIEWD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_VIEWD=\ + "..\..\parts\sgi_stl\stl_algobase.h"\ + "..\..\parts\sgi_stl\stl_alloc.h"\ + "..\..\parts\sgi_stl\stl_config.h"\ + "..\..\parts\sgi_stl\stl_construct.h"\ + "..\..\parts\sgi_stl\stl_function.h"\ + "..\..\parts\sgi_stl\stl_iterator.h"\ + "..\..\parts\sgi_stl\stl_iterator_base.h"\ + "..\..\parts\sgi_stl\stl_map.h"\ + "..\..\parts\sgi_stl\stl_multimap.h"\ + "..\..\parts\sgi_stl\stl_pair.h"\ + "..\..\parts\sgi_stl\stl_relops.h"\ + "..\..\parts\sgi_stl\stl_threads.h"\ + "..\..\parts\sgi_stl\stl_tree.h"\ + "..\..\parts\sgi_stl\type_traits.h"\ + ".\processitem.hpp"\ + ".\processlist.hpp"\ + ".\remoteprocessinfo.hpp"\ + ".\remoteps.h"\ + ".\remoteps.hpp"\ + ".\viewdialog.hpp"\ + ".\windowview.hpp"\ + {$(INCLUDE)}"com\atlbase.hpp"\ + {$(INCLUDE)}"com\bstring.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\cominit.hpp"\ + {$(INCLUDE)}"com\multiqi.hpp"\ + {$(INCLUDE)}"com\objbase.hpp"\ + {$(INCLUDE)}"com\objidl.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\oleauto.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"com\srvinfo.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbdatahk.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\hookproc.hpp"\ + {$(INCLUDE)}"common\mdifrm.hpp"\ + {$(INCLUDE)}"common\mdiwin.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\notify.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\widestr.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"common\winnt.hpp"\ + {$(INCLUDE)}"imagelst\ftree.hpp"\ + {$(INCLUDE)}"imagelst\imagelst.hpp"\ + {$(INCLUDE)}"imagelst\treeview.hpp"\ + {$(INCLUDE)}"imagelst\tvinsert.hpp"\ + {$(INCLUDE)}"imagelst\tvitem.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"jpgimg\scroll.hpp"\ + {$(INCLUDE)}"statbar\popup.hpp"\ + {$(INCLUDE)}"statbar\statbarx.hpp"\ + {$(INCLUDE)}"statbar\statmenu.hpp"\ + {$(INCLUDE)}"thread\context.hpp"\ + {$(INCLUDE)}"thread\event.hpp"\ + {$(INCLUDE)}"thread\msgqueue.hpp"\ + {$(INCLUDE)}"thread\mthread.hpp"\ + {$(INCLUDE)}"thread\mutex.hpp"\ + {$(INCLUDE)}"thread\ptcllbck.hpp"\ + {$(INCLUDE)}"thread\qthread.hpp"\ + {$(INCLUDE)}"thread\savearea.hpp"\ + {$(INCLUDE)}"thread\tcallbck.hpp"\ + {$(INCLUDE)}"thread\tcallbck.tpp"\ + {$(INCLUDE)}"thread\thmsg.hpp"\ + {$(INCLUDE)}"thread\thread.hpp"\ + {$(INCLUDE)}"widget\tabctrl.hpp"\ + {$(INCLUDE)}"widget\tabhandler.hpp"\ + {$(INCLUDE)}"widget\tabitem.hpp"\ + + +"$(INTDIR)\viewdialog.obj" : $(SOURCE) $(DEP_CPP_VIEWD) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\windowview.cpp + +!IF "$(CFG)" == "remotepsapp - Win32 Release" + +DEP_CPP_WINDO=\ + ".\windowview.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"jpgimg\scroll.hpp"\ + + +"$(INTDIR)\windowview.obj" : $(SOURCE) $(DEP_CPP_WINDO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "remotepsapp - Win32 Debug" + +DEP_CPP_WINDO=\ + ".\windowview.hpp"\ + {$(INCLUDE)}"common\array.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\bminfo.hpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dib.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\palentry.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\purepal.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\rgbquad.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"jpgimg\jpgimg.hpp"\ + {$(INCLUDE)}"jpgimg\rawimg.hpp"\ + {$(INCLUDE)}"jpgimg\rgb888.hpp"\ + {$(INCLUDE)}"jpgimg\scroll.hpp"\ + + +"$(INTDIR)\windowview.obj" : $(SOURCE) $(DEP_CPP_WINDO) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/remotepsapp/remotepsapp.opt b/remotepsapp/remotepsapp.opt new file mode 100644 index 0000000..973d536 Binary files /dev/null and b/remotepsapp/remotepsapp.opt differ diff --git a/remotepsapp/remotepsapp.plg b/remotepsapp/remotepsapp.plg new file mode 100644 index 0000000..ba166b3 --- /dev/null +++ b/remotepsapp/remotepsapp.plg @@ -0,0 +1,66 @@ + + +
+

Build Log

+

+--------------------Configuration: remotepsapp - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPC2.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /ZI /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /D "_COMMON_USENLS_" /Fp"Debug/remotepsapp.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c +"D:\work\remotepsapp\connectiondialog.cpp" +"D:\work\remotepsapp\ConnectionThread.cpp" +"D:\work\remotepsapp\main.cpp" +"D:\work\remotepsapp\Mainfrm.cpp" +"D:\work\remotepsapp\Optnsreg.cpp" +"D:\work\remotepsapp\processview.cpp" +"D:\work\remotepsapp\RemoteProcessInfo.cpp" +"D:\work\remotepsapp\viewdialog.cpp" +"D:\work\remotepsapp\windowview.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPC2.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPC3.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/remotepsapp.pdb" /machine:I386 /out:"Debug/remotepsapp.exe" /pdbtype:sept +.\Debug\connectiondialog.obj +.\Debug\ConnectionThread.obj +.\Debug\main.obj +.\Debug\Mainfrm.obj +.\Debug\Optnsreg.obj +.\Debug\processview.obj +.\Debug\RemoteProcessInfo.obj +.\Debug\viewdialog.obj +.\Debug\windowview.obj +.\Debug\remoteps.res +\work\exe\com.lib +\work\exe\mscommon.lib +\work\exe\imagelst.lib +"\parts\jpeg-6b\lib\jpeg6b.lib" +\work\exe\jpgimg.lib +\work\exe\statbar.lib +\work\exe\msthread.lib +\work\exe\msbsp.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPC3.tmp" +

Output Window

+Compiling... +connectiondialog.cpp +ConnectionThread.cpp +main.cpp +Mainfrm.cpp +Optnsreg.cpp +processview.cpp +RemoteProcessInfo.cpp +viewdialog.cpp +windowview.cpp +Linking... + Creating library Debug/remotepsapp.lib and object Debug/remotepsapp.exp + + + +

Results

+remotepsapp.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/remotepsapp/resource.h b/remotepsapp/resource.h new file mode 100644 index 0000000..28bf2b9 --- /dev/null +++ b/remotepsapp/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by remoteps.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 104 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1009 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/remotepsapp/scraps.txt b/remotepsapp/scraps.txt new file mode 100644 index 0000000..b1d1fba --- /dev/null +++ b/remotepsapp/scraps.txt @@ -0,0 +1,807 @@ +// if(getDocumentClass(String(STRING_PROCESSVIEWCLASSNAME),mdiWindow)) +// { +// mdiWindow->top(); +// return; +// } + + + +// if(strText.isNull())strText="None"; +// strCaption=strCaption.betweenString(0,'-'); +// strCaption.trimRight(); +// FrameWindow::setCaption(strCaption+String(" - [")+strText+String("]")); + + +// FolderTree(GUIWindow &parentWindow,const Rect &winRect=Rect(1,1,320,200),int controlID=101,RGBColor bkColor=RGBColor(::GetSysColor(COLOR_WINDOW))); + + +//inline +//LPARAM SectionDialog::makeItemID(NodeType nodeType,WORD itemID)const +//{ +// return MAKELPARAM(itemID,nodeType); +//} +// enum {RootID=0}; +// enum{EditOffsetTop=170,EditOffsetBottom=45}; +// enum{FolderOffsetTop=5,FolderOffsetBottom=155};/ +// enum {CodeMenuSave=101,CodeMenuDisplayHex=102,CodeMenuSearchInstruction=103, +// CodeMenuNextFrame=104,DataMenuSave=105,DataMenuDisplayCode=106, +// DataMenuSearchString=107}; +// enum NodeType{NullNode=0x0000,ImportTerminalNode=0x0001,ExportTerminalNode=0x0002, +// CodeTerminalNode=0x0003,DataTerminalNode=0x0004, +// ResourceTerminalNode=0x0005}; + + + + +void ProcessView::serverConnect(const String &strServerName) +{ + ComObj comObj; + ComResult comResult; + ServerInfo serverInfo(strServerName); + BString string; + MultiQuery multiQuery; + Variant variant; + + multiQuery.size(1); + multiQuery[0].pIID=&IID_IRemoteProcess; + mStatusBar->setText(String("Connecting to '")+strServerName+String("'")); + comResult=comObj.createInstance(CLSID_CoRemoteProcess,0,ClassContext(LocalServer|RemoteServer),serverInfo,multiQuery); + if(!comResult.success()) + { + ComResult::Facility facility=comResult.facility(); + WORD comError(comResult.error()); + mStatusBar->setText(String("Connection to '")+strServerName+String("' failed.")); + return; + } + mStatusBar->setText(String("Connected to '")+strServerName+String("'")); + if(!ComResult(multiQuery[0].hr).success()) + { + mStatusBar->setText("Failed to acquire interface."); + return; + } + mStatusBar->setText("Interface acquired, retrieving process list."); + IRemoteProcess *pIRemoteProcess=(IRemoteProcess*)multiQuery[0].pItf; + getListItems(pIRemoteProcess); + mStatusBar->setText("Process list retrieved, updating display..."); + showListItems(); + pIRemoteProcess->Release(); + mStatusBar->setText("Ready."); +} + +void ProcessView::getListItems(IRemoteProcess *pIRemoteProcess) +{ + Variant variant; + Variant varProcessID; + String ansiString; + String strParent; + DWORD processID; + + if(!pIRemoteProcess)return; + setCaption(mServerName); + mProcessList.remove(); + mProcessList.computerName(mServerName); + try{pIRemoteProcess->Snapshot(&variant.getVARIANT());} + catch(...) + { + mStatusBar->setText("Fatal error communicating with server."); + ::MessageBeep(0); + return; + } + int processCount(0); + variant.getData(VTInt4,(void*)&processCount); + variant.clear(); + if(!processCount) + { + mStatusBar->setText("Error retrieving remote process list."); + ::MessageBeep(0); + return; + } + pIRemoteProcess->GetProcessFirst(&variant.getVARIANT()); + variant.getData(VTInt4,&processID); + varProcessID.setData(processID); + + +// DATE kernelTime; +// SystemTime sysKernelTime; +// pIRemoteProcess->GetProcessKernelTime(&variant.getVARIANT(),&kernelTime); +// VariantTime variantTime(kernelTime); +// variantTime.getTime(sysKernelTime); + + + + variant.clear(); + for(int index=0;indexGetModuleFirst(&variant.getVARIANT()); + if(VTInt4==variant.getType())variant.clear(); + else + { + BString string; + variant.getData(string); + ansiString=string.toString(); + ansiString.upper(); + strParent=ansiString; + mProcessList.insert(&ProcessItem()); + ProcessItem &processItem=mProcessList[mProcessList.size()-1]; + processItem.processName(ansiString); + processItem.processID(processID); + variant.clear(); + + DATE kernelTime; + SystemTime sysKernelTime; + pIRemoteProcess->GetProcessKernelTime(&varProcessID.getVARIANT(),&kernelTime); + VariantTime variantTime(kernelTime); + variantTime.getTime(sysKernelTime); + ::OutputDebugString(ansiString+String(" ")+sysKernelTime.toString()+String("\n")); + + while(true) + { + pIRemoteProcess->GetModuleNext(&variant.getVARIANT()); + if(VTInt4==variant.getType()) + { + variant.clear(); + break; + } + else + { + BString string; + variant.getData(string); + ansiString=string.toString(); + ansiString.upper(); + processItem.insert(&ansiString); + variant.clear(); + } + } + } + pIRemoteProcess->GetProcessNext(&variant.getVARIANT()); + variant.getData(VTInt4,&processID); + varProcessID.setData(processID); + variant.clear(); + +// { +// DATE kernelTime; +// SystemTime sysKernelTime; +// pIRemoteProcess->GetProcessKernelTime(&variant.getVARIANT(),&kernelTime); +// VariantTime variantTime(kernelTime); +// variantTime.getTime(sysKernelTime); +// ::OutputDebugString(ansiString+String(" ")+sysKernelTime.toString()+String("\n")); +// +//} + } +} + + + + +#if 0 + VariantTime creationTime; + VariantTime exitTime; + VariantTime kernelTime; + VariantTime userTime; + SystemTime sysCreationTime; + SystemTime sysExitTime; + SystemTime sysKernelTime; + SystemTime sysUserTime; + processVariant.changeType(VTInt4); + processVariant.setData(processID); + pIRemoteProcess->GetProcessTimes(&processVariant.getVARIANT(),&creationTime.getDATE(),&exitTime.getDATE(),&kernelTime.getDATE(),&userTime.getDATE()); + processVariant.clear(); + creationTime.getTime(sysCreationTime); + exitTime.getTime(sysExitTime); + kernelTime.getTime(sysKernelTime); + userTime.getTime(sysUserTime); +#endif + + + + + + +#if 0 + +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + ComObj comObj; + ComResult comResult; + ServerInfo serverInfo(String("rocinante")); + BString string; + MultiQuery multiQuery; + Variant variant; + + multiQuery.size(1); + multiQuery[0].pIID=&IID_IRemoteProcess; + comResult=comObj.createInstance(CLSID_CoRemoteProcess,0,ClassContext(LocalServer|RemoteServer),serverInfo,multiQuery); + if(!comResult.success()) + { + ComResult::Facility facility=comResult.facility(); + WORD comError(comResult.error()); + return 0; + } + if(!ComResult(multiQuery[0].hr).success())return 0; + IRemoteProcess *pIRemoteProcess=(IRemoteProcess*)multiQuery[0].pItf; + +// pIRemoteProcess->GetRemoteProcesses(&variant.getVARIANT()); + pIRemoteProcess->Snapshot(&variant.getVARIANT()); + int processCount(0); + variant.getData(VTInt4,(void*)&processCount); + variant.clear(); + pIRemoteProcess->GetProcessFirst(&variant.getVARIANT()); + variant.clear(); + for(int index=0;indexGetModuleFirst(&variant.getVARIANT()); + if(VTInt4==variant.getType())variant.clear(); + else + { + BString string; + variant.getData(string); + ::OutputDebugString(string.toString()+String("\n")); + variant.clear(); + while(true) + { + pIRemoteProcess->GetModuleNext(&variant.getVARIANT()); + if(VTInt4==variant.getType()) + { + variant.clear(); + break; + } + else + { + BString string; + variant.getData(string); + ::OutputDebugString(string.toString()+String("\n")); + variant.clear(); + } + } + } + pIRemoteProcess->GetProcessNext(&variant.getVARIANT()); + variant.clear(); + } + + pIRemoteProcess->Release(); + + +// pIRemoteProcess->GetRemoteProcesses(&variant.getVARIANT()); +// variant.getData(string); +// ::OutputDebugString(string.toString()+String("\n")); + + + + return 0; +} + + + + +#endif + +bool PureImage::decode(const String &strPathFileName,PureDevice &pureDevice) +{ + JSAMPARRAY buffer; + int row_stride; + int row_elements; + int row(0); + jpeg_decompress_struct cinfo; + FILE *fp; + + destroy(); + if((fp=::fopen((char*)(String&)strPathFileName,"rb"))==NULL)return FALSE; + ::jpeg_create_decompress(&cinfo); + ::jpeg_stdio_src(&cinfo,fp); + try{::jpeg_read_header(&cinfo,TRUE);} + catch(JPGError){return FALSE;} + try{::jpeg_start_decompress(&cinfo);} + catch(JPGError){return FALSE;} + row_stride=cinfo.output_width*cinfo.output_components; + buffer=(*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE,row_stride,cinfo.output_height); + while(cinfo.output_scanlinealloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE,row_stride,cinfo.output_height); + while(cinfo.output_scanline &imageBytes) +{ + Variant variant; + SafeArray safeArray; + int upperBound; + BYTE *pData; + + pIRemoteProcess->GetDesktopWindow(&variant.getVARIANT()); + if(VTArray!=variant.getType()){variant.clear();return false;} + if(!variant.getData(safeArray)){variant.clear();return false;} + upperBound=safeArray.getUpperBound(); + safeArray.accessData((void**)&pData); + width=*((int*)pData); + height=(*(((int*)pData)+1)); + imageBytes.size(*(((int*)pData)+4)); + ::memcpy(&imageBytes[0],pData+(sizeof(DWORD)*5),imageBytes.size()); + safeArray.unaccessData(); + safeArray.destroy(); + variant.clear(); + return true; +} +#endif + + + +#include +#include + Group group; + OptionsReg optionsReg; + Block strGroupNames; + + group.groupName("J&R"); + optionsReg.getGroup(group); + optionsReg.getGroupNames(strGroupNames); + + group.groupName("GGG"); + group.insert(&String("192.168.1.1")); + group.insert(&String("192.168.1.2")); + optionsReg.setGroup(group); + optionsReg.getGroup(group); + + + + +#include +#include +#include +#include +#include +#include +#include +#include +//#include +//#include + +ViewDialog::ViewDialog(void) +: mIsInConnect(false) +{ + mInitHandler.setCallback(this,&ViewDialog::initHandler); + mDestroyHandler.setCallback(this,&ViewDialog::destroyHandler); + mCommandHandler.setCallback(this,&ViewDialog::commandHandler); + mCloseHandler.setCallback(this,&ViewDialog::closeHandler); +// mSelChangedHandler.setCallback(this,&ViewDialog::tvSelChangedHandler); +// mItemExpandedHandler.setCallback(this,&ViewDialog::tvItemExpandedHandler); +// mTabSelChangeHandler.setCallback(this,&ViewDialog::tabSelChangeHandler); + mThreadHandler.setCallback(this,&ViewDialog::threadHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + MessageThread::insertHandler(&mThreadHandler); +} + +ViewDialog::ViewDialog(const ViewDialog &/*someViewDialog*/) +{ // private implementation +} + +ViewDialog::~ViewDialog() +{ + if(mIsInConnect){mIsInConnect=false;fatalThreadExit();} + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + MessageThread::removeHandler(&mThreadHandler); +} + +ViewDialog &ViewDialog::operator=(const ViewDialog &/*someViewDialog*/) +{ // private implementation + return *this; +} + +void ViewDialog::handleConnect(const String &serverName) +{ + String *pComputerName=::new String(serverName); + ThreadMessage connectMessage(ThreadMessage::TM_USER,MsgConnect,(LONG)pComputerName); + mIsInConnect=true; + MessageThread::postMessage(connectMessage); +} + +bool ViewDialog::perform(MDIWindow &parentWindow,SmartPointer &statusBar) +{ + mStatusBar=statusBar; + createDialogParam(*(parentWindow.getFrame()),parentWindow,String("VIEWDIALOG"),(LPARAM)(DWindow*)this); + return isValid(); +} + +CallbackData::ReturnType ViewDialog::initHandler(CallbackData &someCallbackData) +{ +#if 0 + mTabControl=::new TabControlHandler(*this,Rect(InitTreeLeft,InitTreeTop,width(),height()-(InitTreeTop-45)),TabControlID); + mTabControl.disposition(PointerDisposition::Delete); + mTabControl->insertHandler(TabControlHandler::SelChangeHandler,&mTabSelChangeHandler); + mTabControl->insertItem(TabControl::TabIndex(0),TabItem(TabItem::TabText,0,0,String("Process List"),0,0,0L)); + mTabControl->insertItem(TabControl::TabIndex(1),TabItem(TabItem::TabText,0,0,String("Desktop Window"),0,0,0L)); + +// mFolderTree=::new FolderTree(*this,Rect(10,30,mTabControl->width()-20,mTabControl->height()-45),TreeViewControlID); + mFolderTree=::new FolderTree(*mTabControl,Rect(10,30,mTabControl->width()-20,mTabControl->height()-45),TreeViewControlID); + mFolderTree.disposition(PointerDisposition::Delete); + mFolderTree->insertHandler(FolderTree::SelChangedHandler,&mSelChangedHandler); + mFolderTree->insertHandler(FolderTree::ItemExpandedHandler,&mItemExpandedHandler); +#endif + +// mWindowView=::new WindowView(*mTabControl,Rect(10,30,mTabControl->width()-20,mTabControl->height()-45),WindowViewControlID); + mWindowView=::new WindowView(*this,Rect(10,30,width()-20,height()-45),WindowViewControlID); + mWindowView.disposition(PointerDisposition::Delete); + if(!mWindowView->isValid())return false; + mWindowView->show(SW_SHOW); + return FALSE; +} + +CallbackData::ReturnType ViewDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(mIsInConnect)break; + GUIWindow::postMessage(parent(),WM_CLOSE,0,0L); + endDialog(true); + break; + case IDCANCEL : + if(mIsInConnect)break; + GUIWindow::postMessage(parent(),WM_CLOSE,0,0L); + endDialog(false); + break; + case VIEWDIALOG_REFRESHNOW : + handleRefreshNow(); + break; + } + return FALSE; +} + +CallbackData::ReturnType ViewDialog::closeHandler(CallbackData &someCallbackData) +{ + if(mIsInConnect)return TRUE; + return FALSE; +} + +CallbackData::ReturnType ViewDialog::destroyHandler(CallbackData &someCallbackData) +{ +// if(mFolderTree.isOkay())mFolderTree.destroy(); +// if(mTabControl.isOkay())mTabControl.destroy(); + return FALSE; +} + +#if 0 +CallbackData::ReturnType ViewDialog::tabSelChangeHandler(CallbackData &someCallbackData) +{ + TabControl::TabIndex currentSelection(mTabControl->getCurrentSelection()); + if(TabControlTreeViewIndex==int(currentSelection)) + { + mWindowView->show(SW_HIDE); + mWindowView->update(); + mFolderTree->show(SW_SHOW); + mFolderTree->update(); + } + else if(TabControlDesktopWindowIndex==int(currentSelection)) + { + mFolderTree->show(SW_HIDE); + mFolderTree->update(); + mWindowView->show(SW_SHOW); + mWindowView->update(); + } + return FALSE; +} +#endif + +#if 0 +CallbackData::ReturnType ViewDialog::tvSelChangedHandler(CallbackData &someCallbackData) +{ + String strString; + WORD selector(someCallbackData.loWord()); + WORD index(someCallbackData.hiWord()); + + if(65535==selector&&65535==index)return FALSE; + if(65535==selector) + { + ::sprintf(strString,"selected process:%d\n",index); + } + else + { + ::sprintf(strString,"index(%d,%d)\n",selector,index); + } + ::OutputDebugString(strString); + return FALSE; +} + +CallbackData::ReturnType ViewDialog::tvItemExpandedHandler(CallbackData &someCallbackData) +{ + String strString; + ::sprintf(strString,"ViewDialog::tvItemExpandedHandler(%d,%d)\n",someCallbackData.hiWord(),someCallbackData.loWord()); + ::OutputDebugString(strString); + return FALSE; +} +#endif + +void ViewDialog::handleRefreshNow(void) +{ + handleConnect(mStrServerName); +} + +DWORD ViewDialog::threadHandler(ThreadMessage &threadMessage) +{ + switch(threadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(MsgConnect==threadMessage.userDataOne()) + { + HANDLE hCurrentThread(::GetCurrentThread()); + DWORD currPriority(::GetThreadPriority(hCurrentThread)); + ::SetThreadPriority(hCurrentThread,THREAD_PRIORITY_HIGHEST); + thConnect(*((String*)threadMessage.userDataTwo())); + ::SetThreadPriority(hCurrentThread,currPriority); + mIsInConnect=false; + ::delete (String*)threadMessage.userDataTwo(); + } + break; + } + return FALSE; +} + +void ViewDialog::thConnect(const String &serverName) +{ + GlobalData imageBytes; + int width; + int height; + + ::OutputDebugString("ViewDialog::thConnect\n"); + if(!mConnectionMutex.requestMutex(0)) + { + mStatusBar->setText("Connection is already in progress."); + return; + } + ComInitializer comInitializer; + mStrServerName=serverName; + mStatusBar->setText(String("Connecting to ")+serverName+String("...")); + if(!mRemoteProcessInfo.connect(serverName)) + { + mStatusBar->setText("Connection failed."); + mConnectionMutex.releaseMutex(); + return; + } +// mStatusBar->setText("Retrieving list..."); +// mRemoteProcessInfo.getListItems(); +// mStatusBar->setText("Retrieving desktop image..."); + mRemoteProcessInfo.getDesktopWindow(*mWindowView); + mRemoteProcessInfo.disconnect(); + mStatusBar->setText("Updating desktop view..."); + mWindowView->invalidate(false); +// mStatusBar->setText("Updating process list..."); +// showListItems(mRemoteProcessInfo); + mConnectionMutex.releaseMutex(); + mStatusBar->setText("Ready."); + return; +} + +#if 0 +void ViewDialog::showListItems(ProcessList &processList) +{ + String strParent; + + if(!processList.size())return; + mFolderTree->remove(); + mFolderTree->addRootNode(FolderTree::FolderClosed,processList.computerName(),MAKELPARAM(-1,-1)); + for(int pindex=0;pindexaddNode(TreeView::NodeChild,insertItem,processList.computerName()); + strParent=processName; + for(int mindex=0;mindexaddNode(TreeView::NodeChild,insertItem,strParent,FALSE); + } + else mFolderTree->appendNode(TreeView::NodeSibling,FolderTree::FolderClosed,strModuleName,MAKELPARAM(pindex,mindex)); + } + } + mFolderTree->selectRoot(); +} +#endif + + + +#ifndef _REMOTEPSAPP_VIEWDIALOG_HPP_ +#define _REMOTEPSAPP_VIEWDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif +//#ifndef _WIDGET_TABCONTROL_HPP +//#include +//#endif +#ifndef _REMOTEPSAPP_REMOTEPROCESSINFO_HPP_ +#include +#endif + +//class FolderTree; +class WindowView; +class StatusBarEx; +//class TabControlHandler; + +class ViewDialog : public DWindow, public MessageThread +{ +public: + ViewDialog(void); + virtual ~ViewDialog(); + bool perform(MDIWindow &parentWindow,SmartPointer &statusBar); + void handleConnect(const String &serverName); +private: + enum {MsgConnect}; + enum{InitTreeLeft=5,InitTreeTop=125}; + enum{TreeViewControlID=100,TabControlID=101,WindowViewControlID=102}; + enum{TabControlTreeViewIndex=0,TabControlDesktopWindowIndex=1}; + ViewDialog(const ViewDialog &someViewDialog); + ViewDialog &operator=(const ViewDialog &someViewDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); +// CallbackData::ReturnType tvSelChangedHandler(CallbackData &someCallbackData); +// CallbackData::ReturnType tvItemExpandedHandler(CallbackData &someCallbackData); +// CallbackData::ReturnType tabSelChangeHandler(CallbackData &someCallbackData); + DWORD threadHandler(ThreadMessage &threadMessage); + void thConnect(const String &strServerName); + void handleRefreshNow(void); +// void showListItems(ProcessList &processList); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; +// Callback mSelChangedHandler; +// Callback mItemExpandedHandler; +// Callback mTabSelChangeHandler; + ThreadCallback mThreadHandler; +// SmartPointer mFolderTree; + SmartPointer mWindowView; +// SmartPointer mTabControl; + SmartPointer mStatusBar; + RemoteProcessInfo mRemoteProcessInfo; + String mStrServerName; + Mutex mConnectionMutex; + bool mIsInConnect; +}; +#endif + + + + + + + enum{InitTreeLeft=5,InitTreeTop=125}; + enum{TreeViewControlID=100,TabControlID=101,WindowViewControlID=102}; + enum{TabControlTreeViewIndex=0,TabControlDesktopWindowIndex=1}; diff --git a/remotepsapp/smk b/remotepsapp/smk new file mode 100644 index 0000000..78be851 --- /dev/null +++ b/remotepsapp/smk @@ -0,0 +1,115 @@ +Comparing files mainfrm.hpp and E:mainfrm.hPP +FC: no differences encountered + +Comparing files remoteps.hpp and E:remoteps.hPP +FC: no differences encountered + +Comparing files processview.cpp and E:processview.cPP +***** processview.cpp +#include +#include +***** E:processview.cPP +#include +#include +#include +***** + +Comparing files processview.hpp and E:processview.hPP +FC: no differences encountered + +Comparing files connectiondialog.hpp and E:connectiondialog.hPP +FC: no differences encountered + +Comparing files connectiondialog.cpp and E:connectiondialog.cPP +FC: no differences encountered + +Comparing files Mainfrm.cpp and E:Mainfrm.cPP +FC: no differences encountered + +Comparing files main.cpp and E:main.cPP +FC: no differences encountered + +Comparing files viewdialog.hpp and E:viewdialog.hPP +***** viewdialog.hpp +#endif +#ifndef _THREAD_MUTEX_HPP_ +***** E:viewdialog.hPP +#endif +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +***** + +***** viewdialog.hpp + virtual ~ViewDialog(); + bool perform(GUIWindow &parentWindow,SmartPointer &statusBar); + bool handleConnect(const String &serverName); +***** E:viewdialog.hPP + virtual ~ViewDialog(); + bool perform(MDIWindow &parentWindow,SmartPointer &statusBar); + bool handleConnect(const String &serverName); +***** + +Comparing files viewdialog.cpp and E:viewdialog.cPP +***** viewdialog.cpp +#include +#include +***** E:viewdialog.cPP +#include +#include +#include +***** + +***** viewdialog.cpp + +bool ViewDialog::perform(GUIWindow &parentWindow,SmartPointer &statusBar) +{ +***** E:viewdialog.cPP + +bool ViewDialog::perform(MDIWindow &parentWindow,SmartPointer &statusBar) +{ +***** + +***** viewdialog.cpp + mStatusBar=statusBar; + return ::CreateDialogParam(processInstance(),(LPSTR)"VIEWDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); + +} +***** E:viewdialog.cPP + mStatusBar=statusBar; + createDialogParam(*(parentWindow.getFrame()),parentWindow,String("VIEWDIALOG"),(LPARAM)(DWindow*)this); + return isValid(); +} +***** + +Comparing files ProcessList.hpp and E:ProcessList.hPP +FC: no differences encountered + +Comparing files ASMUTIL.HPP and E:ASMUTIL.HPP +FC: no differences encountered + +Comparing files ProcessItem.hpp and E:ProcessItem.hPP +FC: no differences encountered + +Comparing files RemoteProcessInfo.cpp and E:RemoteProcessInfo.cPP +FC: no differences encountered + +Comparing files RGB888.HPP and E:RGB888.HPP +FC: no differences encountered + +Comparing files RemoteProcessInfo.hpp and E:RemoteProcessInfo.hPP +FC: no differences encountered + +Comparing files pureimg.cpp and E:pureimg.cPP +FC: no differences encountered + +Comparing files rawimg.hpp and E:rawimg.hPP +FC: no differences encountered + +Comparing files rawimg.cpp and E:rawimg.cPP +FC: no differences encountered + +Comparing files pureimg.hpp and E:pureimg.hPP +FC: no differences encountered + diff --git a/remotepsapp/viewdialog.cpp b/remotepsapp/viewdialog.cpp new file mode 100644 index 0000000..22949f8 --- /dev/null +++ b/remotepsapp/viewdialog.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include +#include +#include +#include + +ViewDialog::ViewDialog(void) +{ + mInitHandler.setCallback(this,&ViewDialog::initHandler); + mDestroyHandler.setCallback(this,&ViewDialog::destroyHandler); + mCommandHandler.setCallback(this,&ViewDialog::commandHandler); + mCloseHandler.setCallback(this,&ViewDialog::closeHandler); + mSizeHandler.setCallback(this,&ViewDialog::sizeHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +ViewDialog::ViewDialog(const ViewDialog &/*someViewDialog*/) +{ // private implementation +} + +ViewDialog::~ViewDialog() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +ViewDialog &ViewDialog::operator=(const ViewDialog &/*someViewDialog*/) +{ // private implementation + return *this; +} + +void ViewDialog::connect(const String &serverName) +{ + handleConnect(serverName); +} + +bool ViewDialog::perform(MDIWindow &parentWindow,SmartPointer &statusBar) +{ + mStatusBar=statusBar; + mMDIParent=&parentWindow; + createDialogParam(*(parentWindow.getFrame()),parentWindow,String("VIEWDIALOG"),(LPARAM)(DWindow*)this); + return isValid(); +} + +CallbackData::ReturnType ViewDialog::initHandler(CallbackData &someCallbackData) +{ + mCloseButton.assumeControl(getItem(IDOK),IDOK,false); + mRefreshButton.assumeControl(getItem(VIEWDIALOG_REFRESHNOW),VIEWDIALOG_REFRESHNOW,false); + mWindowView=::new WindowView; + mWindowView.disposition(PointerDisposition::Delete); +// mWindowView->create(*mMDIParent,*mMDIParent,Rect(10,height()+10,mMDIParent->width()-20,mMDIParent->height()-105),WindowViewControlID); + mWindowView->create(*this,*this,Rect(10,75,width()-20,height()-75),WindowViewControlID); + if(!mWindowView->isValid())return false; + mWindowView->show(SW_SHOW); + return FALSE; +} + +CallbackData::ReturnType ViewDialog::sizeHandler(CallbackData &someCallbackData) +{ + mCloseButton.move(Point(width()-mCloseButton.width(),10)); + mRefreshButton.move(Point(width()-mRefreshButton.width(),35)); + mWindowView->moveWindow(Rect(10,75,width(),height())); + return false; +} + +CallbackData::ReturnType ViewDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(isInConnect())break; + GUIWindow::postMessage(parent(),WM_CLOSE,0,0L); + endDialog(true); + break; + case IDCANCEL : + if(isInConnect())break; + GUIWindow::postMessage(parent(),WM_CLOSE,0,0L); + endDialog(false); + break; + case VIEWDIALOG_REFRESHNOW : + handleRefreshNow(); + break; + } + return FALSE; +} + +CallbackData::ReturnType ViewDialog::closeHandler(CallbackData &someCallbackData) +{ + if(isInConnect())return TRUE; + return FALSE; +} + +CallbackData::ReturnType ViewDialog::destroyHandler(CallbackData &someCallbackData) +{ + return FALSE; +} + +void ViewDialog::handleRefreshNow(void) +{ + handleConnect(serverName()); +} + +// virtuals + +void ViewDialog::preConnect(const String &strServerName) +{ + mStatusBar->setText(String("Connecting to '")+strServerName+String("'")); +} + +void ViewDialog::connectionHandler(RemoteProcessInfo &remoteProcessInfo) +{ + mStatusBar->setText("Retrieving desktop image."); + remoteProcessInfo.getDesktopWindow(*mWindowView); +} + +void ViewDialog::preDisconnect(const String &strServerName) +{ + mStatusBar->setText(String("Disconnected from '")+strServerName+String("'")); +} + +void ViewDialog::errorHandler(void) +{ + mStatusBar->setText(String("Remote activation failed '")); +} diff --git a/remotepsapp/viewdialog.hpp b/remotepsapp/viewdialog.hpp new file mode 100644 index 0000000..99da4de --- /dev/null +++ b/remotepsapp/viewdialog.hpp @@ -0,0 +1,66 @@ +#ifndef _REMOTEPSAPP_VIEWDIALOG_HPP_ +#define _REMOTEPSAPP_VIEWDIALOG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_MDIWIN_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif +#ifndef _REMOTEPSAPP_CONNECTIONTHREAD_HPP_ +#include +#endif + +class WindowView; +class StatusBarEx; + +class ViewDialog : public DWindow, public ConnectionThread +{ +public: + ViewDialog(void); + virtual ~ViewDialog(); + bool perform(MDIWindow &parentWindow,SmartPointer &statusBar); + void connect(const String &serverName); +protected: + virtual void connectionHandler(RemoteProcessInfo &remoteProcessInfo); + virtual void errorHandler(void); + virtual void preConnect(const String &strServerName); + virtual void preDisconnect(const String &strServerName); +private: + enum {WindowViewControlID=102}; + ViewDialog(const ViewDialog &someViewDialog); + ViewDialog &operator=(const ViewDialog &someViewDialog); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + void handleRefreshNow(void); + + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + Callback mSizeHandler; + SmartPointer mWindowView; + SmartPointer mStatusBar; + SmartPointer mMDIParent; + Control mCloseButton; + Control mRefreshButton; +}; +#endif + + + + diff --git a/remotepsapp/windowview.cpp b/remotepsapp/windowview.cpp new file mode 100644 index 0000000..3cb548b --- /dev/null +++ b/remotepsapp/windowview.cpp @@ -0,0 +1,145 @@ +#include +#include +#include + +char WindowView::mszClassName[]="WINDOWVIEW"; + +WindowView::WindowView(void) +{ + mCreateHandler.setCallback(this,&WindowView::createHandler); + mDestroyHandler.setCallback(this,&WindowView::destroyHandler); + mCloseHandler.setCallback(this,&WindowView::closeHandler); + mPaintHandler.setCallback(this,&WindowView::paintHandler); + mSizeHandler.setCallback(this,&WindowView::sizeHandler); + mVerticalScrollHandler.setCallback(this,&WindowView::verticalScrollHandler); + mHorizontalScrollHandler.setCallback(this,&WindowView::horizontalScrollHandler); + mEraseBackgroundHandler.setCallback(this,&WindowView::eraseBackgroundHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); + registerClass(); +} + +WindowView::WindowView(const WindowView &someWindowView) +{ +} + +WindowView::~WindowView() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); + removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); + removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); +} + +WindowView &WindowView::operator=(const WindowView &/*someWindowView*/) +{ // private implemnentation + return *this; +} + +bool WindowView::create(GUIWindow &parentWindow,GUIWindow &conformParent,const Rect &winRect,UINT controlID) +{ + if(isValid())return false; + createWindow(WS_EX_CLIENTEDGE,className(),className(),WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE,winRect,parentWindow,(HMENU)0,processInstance(),(LPSTR)this); + assumeControl(conformParent,*this,0); + update(); + return isValid(); +} + +void WindowView::registerClass(void) +{ + WNDCLASS wndClass; + if(::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_OWNDC|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(WindowView*); + wndClass.hInstance =processInstance(); + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =className(); + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType WindowView::createHandler(CallbackData &someCallbackData) +{ + mScrollInfo.hwndOwner(*this); + return false; +} + +CallbackData::ReturnType WindowView::destroyHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType WindowView::closeHandler(CallbackData &someCallbackData) +{ + return false; +} + +CallbackData::ReturnType WindowView::paintHandler(CallbackData &someCallbackData) +{ + if(!mJPGImage.isOkay())return false; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &paintDevice=(PureDevice&)*pPaintInfo; + if(mScrollInfo.sizeEvent()) + { + mScrollInfo.sizeEvent(false); + mJPGImage.draw(paintDevice,Rect(0,0,mJPGImage.width(),mJPGImage.height()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly())); + } + if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent())) + { + Rect paintRect(pPaintInfo->paintRect()); + mScrollInfo.scrollEvent(FALSE); + paintRect.right(paintRect.right()-paintRect.left()); + paintRect.bottom(paintRect.bottom()-paintRect.top()); + mJPGImage.draw(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); + } + return false; +} + +CallbackData::ReturnType WindowView::sizeHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleSize(someCallbackData); + return false; +} + +CallbackData::ReturnType WindowView::verticalScrollHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleVerticalScroll(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WindowView::horizontalScrollHandler(CallbackData &someCallbackData) +{ + mScrollInfo.handleHorizontalScroll(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WindowView::eraseBackgroundHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +bool WindowView::createImage(const String &strPathFileName) +{ + if(!isValid())return false; + PureDevice pureDevice(*this); + mJPGImage.decode(strPathFileName,pureDevice); + if(!mJPGImage.isOkay())return false; + mScrollInfo.scrollableObjectDimensions(mJPGImage.width(),mJPGImage.height()); + invalidate(); + return true; +} diff --git a/remotepsapp/~VCDFC.tmp b/remotepsapp/~VCDFC.tmp new file mode 100644 index 0000000..e69de29 diff --git a/sample/ChunkID.hpp b/sample/ChunkID.hpp new file mode 100644 index 0000000..48a564d --- /dev/null +++ b/sample/ChunkID.hpp @@ -0,0 +1,121 @@ +#ifndef _SAMPLE_CHUNKID_HPP_ +#define _SAMPLE_CHUNKID_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif + +class ChunkID +{ +public: + ChunkID(void); + ChunkID(const ChunkID &someChunkID); + virtual ~ChunkID(); + ChunkID &operator=(const ChunkID &someChunkID); + ChunkID &operator=(String chunkIDString); + bool operator==(const ChunkID &someChunkID)const; + bool operator==(const String &chunkIDString)const; + bool ChunkID::write(MemFile &memFile)const; + bool ChunkID::read(FileHandle &handle); + String chunkID(void)const; + WORD size(void)const; + String toString(void)const; +private: + enum {MaxLength=4}; + void initChunk(void); + + char mChunkID[MaxLength]; +}; + +inline +ChunkID::ChunkID(void) +{ + initChunk(); +} + +inline +ChunkID::ChunkID(const ChunkID &someChunkID) +{ + initChunk(); + *this=someChunkID; +} + +inline +ChunkID::~ChunkID() +{ +} + +inline +ChunkID &ChunkID::operator=(const ChunkID &someChunkID) +{ + ::memcpy(mChunkID,someChunkID.mChunkID,sizeof(mChunkID)); + return *this; +} + +inline +ChunkID &ChunkID::operator=(String chunkIDString) +{ + if(chunkIDString.length()>sizeof(mChunkID))chunkIDString.length(sizeof(mChunkID)); + return *this; +} + +inline +bool ChunkID::operator==(const ChunkID &someChunkID)const +{ + return (!::memcmp(mChunkID,someChunkID.mChunkID,sizeof(mChunkID))?true:false); +} + +inline +bool ChunkID::operator==(const String &chunkIDString)const +{ + return chunkID()==chunkIDString; +} + +inline +bool ChunkID::write(MemFile &memFile)const +{ + if(!memFile.write((char*)mChunkID,sizeof(mChunkID)))return false; + return true; +} + +inline +bool ChunkID::read(FileHandle &handle) +{ + if(!handle.read((BYTE*)mChunkID,sizeof(mChunkID)))return false; + return true; +} + +inline +String ChunkID::chunkID(void)const +{ + String chunkString; + ::memcpy(chunkString,mChunkID,sizeof(mChunkID)); + return chunkString; +} + +inline +WORD ChunkID::size(void)const +{ + return sizeof(mChunkID); +} + +inline +void ChunkID::initChunk(void) +{ + ::memset(mChunkID,0,sizeof(mChunkID)); +} + +inline +String ChunkID::toString(void)const +{ + return String(" ChunkID=")+String(mChunkID).quotes()+String(""); +} +#endif diff --git a/sample/DataChnk.cpp b/sample/DataChnk.cpp new file mode 100644 index 0000000..627b446 --- /dev/null +++ b/sample/DataChnk.cpp @@ -0,0 +1,15 @@ +#include + +bool DataChunk::read(FileHandle &handle) +{ + if(!mChunkID.read(handle))return false; + if(!handle.read((BYTE*)&mLengthData,sizeof(mLengthData)))return false; + return true; +} + +bool DataChunk::write(MemFile &memFile)const +{ + if(!mChunkID.write(memFile))return false; + if(!memFile.write((char*)&mLengthData,sizeof(mLengthData)))return false; + return true; +} diff --git a/sample/DataChnk.hpp b/sample/DataChnk.hpp new file mode 100644 index 0000000..feace81 --- /dev/null +++ b/sample/DataChnk.hpp @@ -0,0 +1,81 @@ +#ifndef _SAMPLE_DATACHUNK_HPP_ +#define _SAMPLE_DATACHUNK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class DataChunk +{ +public: + DataChunk(void); + virtual ~DataChunk(); + bool write(MemFile &memFile)const; + bool read(FileHandle &handle); + LONG length(void)const; + void length(LONG length); + DWORD size(void)const; + String toString(void)const; +private: + void initChunk(void); + + ChunkID mChunkID; + LONG mLengthData; +}; + +inline +DataChunk::DataChunk(void) +{ + initChunk(); +} + +inline +DataChunk::~DataChunk() +{ +} + +inline +LONG DataChunk::length(void)const +{ + return mLengthData; +} + +inline +void DataChunk::length(LONG length) +{ + mLengthData=length; +} + +inline +DWORD DataChunk::size(void)const +{ + return mChunkID.size()+sizeof(DWORD); +} + +inline +void DataChunk::initChunk(void) +{ + mChunkID=String("data"); + return; +} + +inline +String DataChunk::toString(void)const +{ + String strDataChunk; + strDataChunk+=String(""); + strDataChunk+=mChunkID.toString(); + strDataChunk+=String(" LengthData=")+String().fromInt(mLengthData).quotes(); + strDataChunk+=String(""); + return strDataChunk; +} +#endif + diff --git a/sample/Debug/sampletst.exe b/sample/Debug/sampletst.exe new file mode 100644 index 0000000..174e981 Binary files /dev/null and b/sample/Debug/sampletst.exe differ diff --git a/sample/Debug/sampletst.exp b/sample/Debug/sampletst.exp new file mode 100644 index 0000000..c1a268a Binary files /dev/null and b/sample/Debug/sampletst.exp differ diff --git a/sample/Debug/sampletst.lib b/sample/Debug/sampletst.lib new file mode 100644 index 0000000..909ed98 Binary files /dev/null and b/sample/Debug/sampletst.lib differ diff --git a/sample/Debug/sampletst.pdb b/sample/Debug/sampletst.pdb new file mode 100644 index 0000000..2191d97 Binary files /dev/null and b/sample/Debug/sampletst.pdb differ diff --git a/sample/Debug/vc60.idb b/sample/Debug/vc60.idb new file mode 100644 index 0000000..9e6e26a Binary files /dev/null and b/sample/Debug/vc60.idb differ diff --git a/sample/Debug/vc60.pdb b/sample/Debug/vc60.pdb new file mode 100644 index 0000000..e3301cb Binary files /dev/null and b/sample/Debug/vc60.pdb differ diff --git a/sample/DevHndlr.cpp b/sample/DevHndlr.cpp new file mode 100644 index 0000000..a10c60a --- /dev/null +++ b/sample/DevHndlr.cpp @@ -0,0 +1,77 @@ +#include +#include + +void DeviceHandler::insertHandlers(void) +{ + mWindowHandler.insertHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.insertHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.insertHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void DeviceHandler::removeHandlers(void) +{ + mWindowHandler.removeHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.removeHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.removeHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void DeviceHandler::mmSystemErrorMessage(MMRESULT mmResult)const +{ + String errorString; + ::waveOutGetErrorText(mmResult,(LPSTR)errorString,String::MaxString); + message(errorString); +} + +void DeviceHandler::genericErrorMessage(ErrorCode errorCode)const +{ + if(errorCode==InvalidFormat)message("Invalid Format."); + else if(errorCode==InvalidDeviceHandle)message("Invalid Device Handle."); + else if(errorCode==InvalidHeader)message("Invalid Header."); + else message("Unknown Error."); + return; +} + +WORD DeviceHandler::operator==(const DeviceHandler &/*someDeviceHandler*/)const +{ + return FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmOpenHandler(CallbackData &someCallbackData) +{ + openHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmCloseHandler(CallbackData &someCallbackData) +{ + closeHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmDoneHandler(CallbackData &someCallbackData) +{ + doneHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +// virtuals + +void DeviceHandler::openHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::closeHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::doneHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::message(const String &strErrorMessage)const +{ + ::MessageBox(::GetFocus(),(LPSTR)(String&)strErrorMessage,(LPSTR)"DeviceHandler",MB_OK); +} diff --git a/sample/DevHndlr.hpp b/sample/DevHndlr.hpp new file mode 100644 index 0000000..0b3454e --- /dev/null +++ b/sample/DevHndlr.hpp @@ -0,0 +1,70 @@ +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#define _SAMPLE_DEVICEHANDLER_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class DeviceHandler +{ +public: + enum PlayMode{Wait,NoWait}; + DeviceHandler(Window &windowHandler); + DeviceHandler(const DeviceHandler &someDeviceHandler); + virtual ~DeviceHandler(); + WORD operator==(const DeviceHandler &someDeviceHandler)const; + DeviceHandler &operator=(const DeviceHandler &someDeviceHandler); +protected: + enum ErrorCode{InvalidFormat,InvalidDeviceHandle,InvalidHeader}; + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; + void mmSystemErrorMessage(MMRESULT mmResult)const; + void genericErrorMessage(ErrorCode errorCode)const; +private: + void insertHandlers(void); + void removeHandlers(void); + CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData); + Callback mMMOpenHandler; + Callback mMMCloseHandler; + Callback mMMDoneHandler; + Window &mWindowHandler; +}; + +inline +DeviceHandler::DeviceHandler(Window &windowHandler) +: mWindowHandler(windowHandler) +{ + mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); + mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); + mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); + insertHandlers(); +} + +inline +DeviceHandler::DeviceHandler(const DeviceHandler &someDeviceHandler) +: mWindowHandler(someDeviceHandler.mWindowHandler) +{ + mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); + mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); + mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); + insertHandlers(); +} + +inline +DeviceHandler::~DeviceHandler() +{ + removeHandlers(); +} + +inline +DeviceHandler &DeviceHandler::operator=(const DeviceHandler &/*someDeviceHandler*/) +{ + return *this; +} +#endif diff --git a/sample/Device.cpp b/sample/Device.cpp new file mode 100644 index 0000000..71b04dc --- /dev/null +++ b/sample/Device.cpp @@ -0,0 +1,126 @@ +#include +#include + +WaveDevice::WaveDevice(UINT waveDeviceID,DeviceType waveDeviceType,Window &windowHandler) +: mMMOpenHandler(this,&WaveDevice::mmOpenHandler), + mMMCloseHandler(this,&WaveDevice::mmCloseHandler), + mMMDoneHandler(this,&WaveDevice::mmDoneHandler), + mWaveDeviceID(waveDeviceID), mDeviceType(waveDeviceType), mWindowHandler(windowHandler), + mhWaveOut(0), mGlobalWaveHeader(1,GMEM_MOVEABLE) +{ + getDeviceCapabilities(); + insertHandlers(); +} + +WaveDevice::WaveDevice(const WaveDevice &someWaveDevice) +: mMMOpenHandler(this,&WaveDevice::mmOpenHandler), + mMMCloseHandler(this,&WaveDevice::mmCloseHandler), + mMMDoneHandler(this,&WaveDevice::mmDoneHandler), + mWindowHandler(someWaveDevice.mWindowHandler), + mhWaveOut(0), mGlobalWaveHeader(1,GMEM_MOVEABLE) +{ + insertHandlers(); + *this=someWaveDevice; +} + +WaveDevice::~WaveDevice() +{ + closeDevice(); + removeHandlers(); +} + +WORD WaveDevice::openDevice(WaveFormatPCM &waveFormatPCM) +{ + MMRESULT mmResult; + closeDevice(); + mmResult=::waveOutOpen(&mhWaveOut,mWaveDeviceID,(LPWAVEFORMAT)&waveFormatPCM,(UINT)((HWND)mWindowHandler),0L,WAVE_ALLOWSYNC|CALLBACK_WINDOW); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + return TRUE; +} + +WORD WaveDevice::closeDevice(void) +{ + MMRESULT mmResult; + + if(!mhWaveOut)return FALSE; + mmResult=::waveOutReset(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutClose(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mhWaveOut=0; + return TRUE; +} + +WaveDevice &WaveDevice::operator=(const WaveDevice &someWaveDevice) +{ + mWaveDeviceID=someWaveDevice.mWaveDeviceID; + mDeviceType=someWaveDevice.mDeviceType; + mWaveInCaps=someWaveDevice.mWaveInCaps; + mWaveOutCaps=someWaveDevice.mWaveOutCaps; + return *this; +} + +void WaveDevice::insertHandlers(void) +{ + mWindowHandler.insertHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.insertHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.insertHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void WaveDevice::removeHandlers(void) +{ + mWindowHandler.removeHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.removeHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.removeHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +WORD WaveDevice::play(WaveForm &someWaveForm,PlayMode playMode) +{ + MMRESULT mmResult; + WaveFormatPCM waveFormatPCM((FormatChunk&)someWaveForm); + if(WaveFormat::PulseCodeModulation!=waveFormatPCM.formatTag()){genericErrorMessage(InvalidFormat);return FALSE;} + if(!openDevice(waveFormatPCM))return FALSE; + ((WaveHeader*)mGlobalWaveHeader)->setData((char*)(((PureSample&)someWaveForm).sampleData())); + ((WaveHeader*)mGlobalWaveHeader)->setBufferLength(((PureSample&)someWaveForm).numSamples()); + ((WaveHeader*)mGlobalWaveHeader)->userData((DWORD)this); + mmResult=::waveOutPrepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)mGlobalWaveHeader),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutWrite(mhWaveOut,(WAVEHDR*)((WaveHeader*)mGlobalWaveHeader),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + if(Wait==playMode){while(mhWaveOut)yieldTask();} + return TRUE; +} + +void WaveDevice::yieldTask(void)const +{ + MSG msg; + + if(::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } +} + +CallbackData::ReturnType WaveDevice::mmOpenHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WaveDevice::mmCloseHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WaveDevice::mmDoneHandler(CallbackData &someCallbackData) +{ + WaveHeader &waveHeader(*((WaveHeader*)someCallbackData.lParam())); + + if(waveHeader.userData()==(DWORD)this) + { + ::waveOutUnprepareHeader((HWAVEOUT)someCallbackData.wParam(),(LPWAVEHDR)someCallbackData.lParam(),sizeof(WAVEHDR)); + closeDevice(); + } + return (CallbackData::ReturnType)FALSE; +} + diff --git a/sample/Device.hpp b/sample/Device.hpp new file mode 100644 index 0000000..d7cb47f --- /dev/null +++ b/sample/Device.hpp @@ -0,0 +1,118 @@ +#ifndef _SAMPLE_DEVICE_HPP_ +#define _SAMPLE_DEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveDevice +{ +public: + enum DeviceType{InputDevice,OutputDevice,InvalidDevice}; + enum PlayMode{Wait,NoWait}; + WaveDevice(UINT waveDeviceID,DeviceType waveDeviceType,Window &windowHandler); + WaveDevice(const WaveDevice &someWaveDevice); + ~WaveDevice(); + WORD play(WaveForm &waveForm,PlayMode playMode=NoWait); + WORD operator==(const WaveDevice &someWaveDevice)const; + WaveDevice &operator=(const WaveDevice &someWaveDevice); + void waveDeviceID(UINT deviceID); + UINT waveDeviceID(void)const; + void waveDeviceType(DeviceType waveDeviceType); + DeviceType waveDeviceType(void)const; +private: + enum ErrorCode{InvalidFormat}; + void yieldTask(void)const; + void getDeviceCapabilities(void); + void insertHandlers(void); + void removeHandlers(void); + void mmSystemErrorMessage(MMRESULT mmResult)const; + void genericErrorMessage(ErrorCode errorCode)const; + WORD closeDevice(void); + WORD openDevice(WaveFormatPCM &waveFormatPCM); + CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData); + Callback mMMOpenHandler; + Callback mMMCloseHandler; + Callback mMMDoneHandler; + UINT mWaveDeviceID; + DeviceType mDeviceType; + WaveInCaps mWaveInCaps; + WaveOutCaps mWaveOutCaps; + HWAVEOUT mhWaveOut; + GlobalData mGlobalWaveHeader; + Window &mWindowHandler; +}; + +inline +void WaveDevice::waveDeviceID(UINT deviceID) +{ + mWaveDeviceID=deviceID; + getDeviceCapabilities(); +} + +inline +UINT WaveDevice::waveDeviceID(void)const +{ + return mWaveDeviceID; +} + +inline +void WaveDevice::waveDeviceType(DeviceType waveDeviceType) +{ + mDeviceType=waveDeviceType; + getDeviceCapabilities(); +} + +inline +WaveDevice::DeviceType WaveDevice::waveDeviceType(void)const +{ + return mDeviceType; +} + +inline +void WaveDevice::getDeviceCapabilities(void) +{ + if(mDeviceType==InputDevice)::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps)); + else if(mDeviceType==OutputDevice)::waveOutGetDevCaps(mWaveDeviceID,&((WAVEOUTCAPS&)mWaveOutCaps),sizeof(mWaveOutCaps)); +} + +inline +WORD WaveDevice::operator==(const WaveDevice &someWaveDevice)const +{ + return (mDeviceType==someWaveDevice.mDeviceType&&mWaveDeviceID==someWaveDevice.mWaveDeviceID); +} + +inline +void WaveDevice::mmSystemErrorMessage(MMRESULT mmResult)const +{ + String errorString; + ::waveOutGetErrorText(mmResult,(LPSTR)errorString,String::MaxString); + ::MessageBox(::GetFocus(),(LPSTR)errorString,(LPSTR)"WaveDevice",MB_OK); +} + +inline +void WaveDevice::genericErrorMessage(ErrorCode errorCode)const +{ + if(errorCode==InvalidFormat)::MessageBox(::GetFocus(),(LPSTR)"Invalid Format.",(LPSTR)"WaveDevice",MB_OK); + return; +} +#endif diff --git a/sample/FmtChnk.cpp b/sample/FmtChnk.cpp new file mode 100644 index 0000000..da46065 --- /dev/null +++ b/sample/FmtChnk.cpp @@ -0,0 +1,84 @@ +#include +#include + +FormatChunk &FormatChunk::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} + +bool FormatChunk::write(MemFile &memFile) +{ + if(!mChunkID.write(memFile))return false; + if(!memFile.write((char*)&mSize,sizeof(mSize)))return false; + if(!memFile.write((char*)&mFormatTag,sizeof(mFormatTag)))return false; + if(!memFile.write((char*)&mChannels,sizeof(mChannels)))return false; + if(!memFile.write((char*)&mSamplesPerSecond,sizeof(mSamplesPerSecond)))return false; + if(!memFile.write((char*)&mAvgBytesPerSecond,sizeof(mAvgBytesPerSecond)))return false; + if(!memFile.write((char*)&mBlockAlign,sizeof(mBlockAlign)))return false; + if(!memFile.write((char*)&mBitsPerSample,sizeof(mBitsPerSample)))return false; + if(WAVE_FORMAT_ADPCM==formatTag()) + { + mFormatChunkADPCM->write(memFile); + } + else + { + if(mExtraInfo.size()>0) + { + memFile.write((char*)(BYTE*)&mExtraInfo[0],mExtraInfo.size()); + } + } + return true; +} + +bool FormatChunk::read(FileHandle &handle) +{ + int extraBytes; + if(!mChunkID.read(handle))return false; + if(!handle.read((BYTE*)&mSize,sizeof(mSize)))return false; + if(!handle.read((BYTE*)&mFormatTag,sizeof(mFormatTag)))return false; + if(!handle.read((BYTE*)&mChannels,sizeof(mChannels)))return false; + if(!handle.read((BYTE*)&mSamplesPerSecond,sizeof(mSamplesPerSecond)))return false; + if(!handle.read((BYTE*)&mAvgBytesPerSecond,sizeof(mAvgBytesPerSecond)))return false; + if(!handle.read((BYTE*)&mBlockAlign,sizeof(mBlockAlign)))return false; + if(!handle.read((BYTE*)&mBitsPerSample,sizeof(mBitsPerSample)))return false; + if(WAVE_FORMAT_ADPCM==formatTag()) + { + mFormatChunkADPCM=new FormatChunkADPCM(); + mFormatChunkADPCM.disposition(PointerDisposition::Delete); + if(!mFormatChunkADPCM->read(handle))return false; + } + else + { + extraBytes=mSize-(sizeof(mFormatTag)+sizeof(mChannels)+sizeof(mSamplesPerSecond)+sizeof(mAvgBytesPerSecond)+sizeof(mBlockAlign)+sizeof(mBitsPerSample)); + if(extraBytes<0)extraBytes=0; + if(extraBytes) + { + mExtraInfo.size(extraBytes); + handle.read((BYTE*)&mExtraInfo[0],mExtraInfo.size()); + } + } + return true; +} + +String FormatChunk::toString(void)const +{ + String strChunk; + strChunk+=String(""); + strChunk+=mChunkID.toString(); + strChunk+=String(" Size=")+String().fromInt(mSize).quotes(); + strChunk+=String(" FormatTag=")+String().fromInt(mFormatTag).quotes(); + strChunk+=String(" Channels=")+String().fromInt(mChannels).quotes(); + strChunk+=String(" SamplesPerSecond=")+String().fromInt(mSamplesPerSecond).quotes(); + strChunk+=String(" AvgBytesPerSecond=")+String().fromInt(mAvgBytesPerSecond).quotes(); + strChunk+=String(" BlockAlign=")+String().fromInt(mBlockAlign).quotes(); + strChunk+=String(" BitsPerSample=")+String().fromInt(mBitsPerSample).quotes(); + strChunk+=String(" ExtraInfo=")+String().fromInt(mExtraInfo.size()).quotes()+String(""); + if(WAVE_FORMAT_ADPCM==formatTag())strChunk+=((SmartPointer&)mFormatChunkADPCM)->toString(); + return strChunk; +} diff --git a/sample/FmtChnk.hpp b/sample/FmtChnk.hpp new file mode 100644 index 0000000..8c253e6 --- /dev/null +++ b/sample/FmtChnk.hpp @@ -0,0 +1,176 @@ +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#define _SAMPLE_FORMATCHUNK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif +#ifndef _SAMPLE_FMTCHNKADPCM_HPP_ +#include +#endif + +class FormatChunk +{ +public: + enum {WaveFormatPCM=0x01,NumChannels=0x01,BlockAlign=0x01,BitsPerSample=0x08}; + FormatChunk(void); + FormatChunk(const FormatChunk &someFormatChunk); + virtual ~FormatChunk(); + bool write(MemFile &memFile); + bool read(FileHandle &handle); + FormatChunk &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplesPerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); + DWORD size(void)const; + String toString(void)const; +private: + void initChunk(void); + ChunkID mChunkID; // 4 bytes + DWORD mSize; // 4 bytes + WORD mFormatTag; // 2 bytes + WORD mChannels; // 2 bytes + DWORD mSamplesPerSecond; // 4 bytes + DWORD mAvgBytesPerSecond; // 4 bytes + WORD mBlockAlign; // 2 bytes + WORD mBitsPerSample; // 2 bytes + Array mExtraInfo; // extra chunk information + SmartPointer mFormatChunkADPCM; +}; + +inline +FormatChunk::FormatChunk(void) +: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0), + mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0) +{ + initChunk(); +} + +inline +FormatChunk::FormatChunk(const FormatChunk &someFormatChunk) +: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0), + mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0) +{ + initChunk(); + *this=someFormatChunk; +} + +inline +FormatChunk::~FormatChunk() +{ +} + +inline +WORD FormatChunk::formatTag(void)const +{ + return mFormatTag; +} + +inline +void FormatChunk::formatTag(WORD formatTag) +{ + mFormatTag=formatTag; +} + +inline +WORD FormatChunk::channels(void)const +{ + return mChannels; +} + +inline +void FormatChunk::channels(WORD channels) +{ + mChannels=channels; +} + +inline +DWORD FormatChunk::samplesPerSecond(void)const +{ + return mSamplesPerSecond; +} + +inline +void FormatChunk::samplesPerSecond(DWORD samplesPerSecond) +{ + mSamplesPerSecond=samplesPerSecond; +} + +inline +DWORD FormatChunk::averageBytesPerSecond(void)const +{ + return mAvgBytesPerSecond; +} + +inline +void FormatChunk::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + mAvgBytesPerSecond=averageBytesPerSecond; +} + +inline +WORD FormatChunk::blockAlign(void)const +{ + return mBlockAlign; +} + +inline +void FormatChunk::blockAlign(WORD blockAlign) +{ + mBlockAlign=blockAlign; +} + +inline +WORD FormatChunk::bitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +void FormatChunk::bitsPerSample(WORD bitsPerSample) +{ + mBitsPerSample=bitsPerSample; +} + +inline +DWORD FormatChunk::size(void)const +{ + return mSize+mChunkID.size(); +} + +inline +void FormatChunk::initChunk(void) +{ + mChunkID=String("fmt "); + mSize=(mChunkID.size()+sizeof(mSize)+sizeof(mFormatTag)+sizeof(mChannels)+sizeof(mSamplesPerSecond)+ + sizeof(mAvgBytesPerSecond)+sizeof(mBlockAlign)+sizeof(mBitsPerSample))-(mChunkID.size()+sizeof(mSize)); +} +#endif diff --git a/sample/FmtChnkADPCM.hpp b/sample/FmtChnkADPCM.hpp new file mode 100644 index 0000000..54f920e --- /dev/null +++ b/sample/FmtChnkADPCM.hpp @@ -0,0 +1,121 @@ +#ifndef _SAMPLE_FMTCHNKADPCM_HPP_ +#define _SAMPLE_FMTCHNKADPCM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMREG_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +class FormatChunkADPCM : public Array +{ +public: + FormatChunkADPCM(); + virtual ~FormatChunkADPCM(); + bool write(MemFile &memFile)const; + bool read(FileHandle &handle); + WORD extraSize(void)const; + void extraSize(WORD extraSize); + WORD samplesPerBlock(void)const; + void samplesPerBlock(WORD samplesPerBlock); + WORD numCoef(void)const; + void numCoef(WORD numCoef); + String toString(void)const; +private: + WORD mExtraSize; + WORD mSamplesPerBlock; +}; + +inline +FormatChunkADPCM::FormatChunkADPCM() +: mExtraSize(0), mSamplesPerBlock(0) +{ +} + +inline +FormatChunkADPCM::~FormatChunkADPCM() +{ +} + +inline +bool FormatChunkADPCM::write(MemFile &memFile)const +{ + WORD numCoefs; + if(!memFile.write((char*)&mExtraSize,sizeof(WORD)))return false; + if(!memFile.write((char*)&mSamplesPerBlock,sizeof(WORD)))return false; + numCoefs=size(); + if(!memFile.write((char*)&numCoefs,sizeof(WORD)))return false; + if(!memFile.write((char*)&(((Array&)*this).operator[](0)),sizeBytes()))return false; + return true; +} + +inline +bool FormatChunkADPCM::read(FileHandle &handle) +{ + WORD numCoef; + + if(!handle.read((BYTE*)&mExtraSize,sizeof(WORD)))return false; + if(!handle.read((BYTE*)&mSamplesPerBlock,sizeof(WORD)))return false; + if(!handle.read((BYTE*)&numCoef,sizeof(WORD)))return false; + size(numCoef); + if(!handle.read((BYTE*)&(((Array&)*this).operator[](0)),sizeBytes()))return false; + return true; +} + +inline +WORD FormatChunkADPCM::extraSize(void)const +{ + return mExtraSize; +} + +inline +void FormatChunkADPCM::extraSize(WORD extraSize) +{ + mExtraSize=extraSize; +} + +inline +WORD FormatChunkADPCM::samplesPerBlock(void)const +{ + return mSamplesPerBlock; +} + +inline +void FormatChunkADPCM::samplesPerBlock(WORD samplesPerBlock) +{ + mSamplesPerBlock=samplesPerBlock; +} + +inline +WORD FormatChunkADPCM::numCoef(void)const +{ + return size(); +} + +inline +void FormatChunkADPCM::numCoef(WORD numCoef) +{ + size(numCoef); +} + +inline +String FormatChunkADPCM::toString(void)const +{ + String strChunk=""; + strChunk+=String(" ExtraSize=")+String().fromInt(mExtraSize).quotes(); + strChunk+=String(" SamplesPerBlock=")+String().fromInt(mSamplesPerBlock).quotes(); + strChunk+=String(" NumCoefs=")+String().fromInt(size()).quotes(); + for(int index=0;index"; + } + strChunk+=""; + return strChunk; +} +#endif diff --git a/sample/GenChnk.cpp b/sample/GenChnk.cpp new file mode 100644 index 0000000..aee7827 --- /dev/null +++ b/sample/GenChnk.cpp @@ -0,0 +1,22 @@ +#include + +bool GenericChunk::write(MemFile &memFile)const +{ + DWORD lengthData(size()); + + if(!mChunkID.write(memFile))return false; + if(!memFile.write((char*)&lengthData,sizeof(lengthData)))return false; + if(!memFile.write((char*)(BYTE*)&(((GlobalData&)*this).operator[](0)),lengthData))return false; + return true; +} + +bool GenericChunk::read(FileHandle &handle) +{ + DWORD lengthData; + + mChunkID.read(handle); + if(!handle.read((BYTE*)&lengthData,sizeof(lengthData)))return false; + size(lengthData); + if(!handle.read(&(((GlobalData&)*this).operator[](0)),lengthData))return false; + return true; +} diff --git a/sample/GenChnk.hpp b/sample/GenChnk.hpp new file mode 100644 index 0000000..58799aa --- /dev/null +++ b/sample/GenChnk.hpp @@ -0,0 +1,76 @@ +#ifndef _SAMPLE_GENERICCHUNK_HPP_ +#define _SAMPLE_GENERICCHUNK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class GenericChunk : public GlobalData +{ +public: + GenericChunk(void); + GenericChunk(const GenericChunk &someGenericChunk); + virtual ~GenericChunk(); + GenericChunk &operator=(const GenericChunk &someGenericChunk); + bool operator==(const GenericChunk &someGenericChunk)const; + bool write(MemFile &memFile)const; + bool read(FileHandle &handle); + const ChunkID &chunkID(void)const; + DWORD chunkLength(void)const; +private: + ChunkID mChunkID; +}; + +inline +GenericChunk::GenericChunk(void) +{ +} + +inline +GenericChunk::GenericChunk(const GenericChunk &someGenericChunk) +{ + *this=someGenericChunk; +} + +inline +GenericChunk::~GenericChunk() +{ +} + +inline +GenericChunk &GenericChunk::operator=(const GenericChunk &someGenericChunk) +{ + mChunkID=someGenericChunk.mChunkID; + return *this; +} + +inline +bool GenericChunk::operator==(const GenericChunk &someGenericChunk)const +{ + return (mChunkID==someGenericChunk.mChunkID&& + (GlobalData&)*this==(GlobalData&)someGenericChunk); +} + +inline +DWORD GenericChunk::chunkLength(void)const +{ + return mChunkID.size()+size()+sizeof(DWORD); +} + +inline +const ChunkID &GenericChunk::chunkID(void)const +{ + return mChunkID; +} +#endif diff --git a/sample/InCaps.hpp b/sample/InCaps.hpp new file mode 100644 index 0000000..3cbd35e --- /dev/null +++ b/sample/InCaps.hpp @@ -0,0 +1,95 @@ +#ifndef _SAMPLE_WAVEINCAPS_HPP_ +#define _SAMPLE_WAVEINCAPS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class WaveInCaps : private WAVEINCAPS +{ +public: + WaveInCaps(const WaveInCaps &someWaveInCaps); + WaveInCaps(void); + ~WaveInCaps(); + WaveInCaps &operator=(const WaveInCaps &someWaveInCaps); + operator WAVEINCAPS &(void); + UINT manufacturerID(void)const; + UINT productID(void)const; + WORD driverVersion(void)const; + String productName(void)const; + DWORD supportedFormats(void)const; + UINT channels(void)const; +private: +}; + +inline +WaveInCaps::WaveInCaps(const WaveInCaps &someWaveInCaps) +{ + *this=someWaveInCaps; +} + +inline +WaveInCaps::WaveInCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveInCaps::~WaveInCaps() +{ +} + +inline +UINT WaveInCaps::manufacturerID(void)const +{ + return WAVEINCAPS::wMid; +} + +inline +UINT WaveInCaps::productID(void)const +{ + return WAVEINCAPS::wPid; +} + +inline +WORD WaveInCaps::driverVersion(void)const +{ + return WAVEINCAPS::vDriverVersion; +} + +inline +String WaveInCaps::productName(void)const +{ + return String(WAVEINCAPS::szPname); +} + +inline +DWORD WaveInCaps::supportedFormats(void)const +{ + return WAVEINCAPS::dwFormats; +} + +inline +UINT WaveInCaps::channels(void)const +{ + return WAVEINCAPS::wChannels; +} + +inline +WaveInCaps::operator WAVEINCAPS &(void) +{ + return *((WAVEINCAPS*)this); +} + +inline +WaveInCaps &WaveInCaps::operator=(const WaveInCaps &someWaveInCaps) +{ + ::memcpy(this,&someWaveInCaps,sizeof(*this)); + return *this; +} +#endif diff --git a/sample/OutCaps.hpp b/sample/OutCaps.hpp new file mode 100644 index 0000000..cea9262 --- /dev/null +++ b/sample/OutCaps.hpp @@ -0,0 +1,103 @@ +#ifndef _SAMPLE_WAVEOUTCAPS_HPP_ +#define _SAMPLE_WAVEOUTCAPS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WaveOutCaps : private WAVEOUTCAPS +{ +public: + WaveOutCaps(void); + WaveOutCaps(const WaveOutCaps &someWaveOutCaps); + ~WaveOutCaps(); + WaveOutCaps &operator=(const WaveOutCaps &someWaveOutCaps); + operator WAVEOUTCAPS &(void)const; + UINT manufacturerID(void)const; + UINT productID(void)const; + MMVERSION driverVersion(void)const; + String productName(void)const; + DWORD supportedFormats(void)const; + WORD channels(void)const; + DWORD optionalSupport(void)const; +private: +}; + +inline +WaveOutCaps::WaveOutCaps(const WaveOutCaps &someWaveOutCaps) +{ + *this=someWaveOutCaps; +} + +inline +WaveOutCaps::WaveOutCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveOutCaps::~WaveOutCaps() +{ +} + +inline +UINT WaveOutCaps::manufacturerID(void)const +{ + return WAVEOUTCAPS::wMid; +} + +inline +UINT WaveOutCaps::productID(void)const +{ + return WAVEOUTCAPS::wPid; +} + +inline +MMVERSION WaveOutCaps::driverVersion(void)const +{ + return WAVEOUTCAPS::vDriverVersion; +} + +inline +String WaveOutCaps::productName(void)const +{ + return WAVEOUTCAPS::szPname; +} + +inline +DWORD WaveOutCaps::supportedFormats(void)const +{ + return WAVEOUTCAPS::dwFormats; +} + +inline +WORD WaveOutCaps::channels(void)const +{ + return WAVEOUTCAPS::wChannels; +} + + +inline +DWORD WaveOutCaps::optionalSupport(void)const +{ + return WAVEOUTCAPS::dwSupport; +} + +inline +WaveOutCaps::operator WAVEOUTCAPS &(void)const +{ + return *((WAVEOUTCAPS*)this); +} + +inline +WaveOutCaps &WaveOutCaps::operator=(const WaveOutCaps &someWaveOutCaps) +{ + ::memcpy(this,&someWaveOutCaps,sizeof(*this)); + return *this; +} +#endif diff --git a/sample/PCMForm.hpp b/sample/PCMForm.hpp new file mode 100644 index 0000000..7187ef5 --- /dev/null +++ b/sample/PCMForm.hpp @@ -0,0 +1,82 @@ +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#define _SAMPLE_WAVEFORMATPCM_HPP_ +#ifndef _SAMPLE_WAVEFORMATEX_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormatPCM : public WaveFormatEx +{ +public: + WaveFormatPCM(void); + WaveFormatPCM(const WaveFormatPCM &someWaveFormatPCM); + WaveFormatPCM(const FormatChunk &someFormatChunk); + ~WaveFormatPCM(); + WaveFormatPCM &operator=(const WaveFormatPCM &someWaveFormatPCM); + WaveFormatPCM &operator=(const FormatChunk &someFormatChunk); + operator PCMWAVEFORMAT &(void)const; + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); +private: + WORD mBitsPerSample; +}; + +inline +WaveFormatPCM::WaveFormatPCM(void) +: mBitsPerSample(0) +{ +} + +inline +WaveFormatPCM::WaveFormatPCM(const WaveFormatPCM &someWaveFormatPCM) +: WaveFormatEx((WaveFormatEx&)*this), mBitsPerSample(someWaveFormatPCM.mBitsPerSample) +{ +} + +inline +WaveFormatPCM::WaveFormatPCM(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormatPCM::~WaveFormatPCM() +{ +} + +inline +WaveFormatPCM &WaveFormatPCM::operator=(const WaveFormatPCM &someWaveFormatPCM) +{ + mBitsPerSample=someWaveFormatPCM.mBitsPerSample; + (WaveFormatEx&)*this=(WaveFormatEx&)someWaveFormatPCM; + return *this; +} + +inline +WaveFormatPCM::operator PCMWAVEFORMAT &(void)const +{ + return *((PCMWAVEFORMAT*)this); +} + +inline +WORD WaveFormatPCM::bitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +void WaveFormatPCM::bitsPerSample(WORD bitsPerSample) +{ + mBitsPerSample=bitsPerSample; +} + +inline +WaveFormatPCM &WaveFormatPCM::operator=(const FormatChunk &someFormatChunk) +{ + (WaveFormatEx&)*this=someFormatChunk; + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} +#endif diff --git a/sample/PureSampleEx.hpp b/sample/PureSampleEx.hpp new file mode 100644 index 0000000..d3a8374 --- /dev/null +++ b/sample/PureSampleEx.hpp @@ -0,0 +1,291 @@ +#ifndef _SAMPLE_PURESAMPLEEX_HPP_ +#define _SAMPLE_PURESAMPLEEX_HPP_ +#ifndef _COMMON_EXCEPTION_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif + +typedef struct _SAMPLE_DATA +{ + union + { + int b4:4; + int b8:8; + int b16:16; + int b32:32; + }; +}SAMPLE_DATA; + +typedef SAMPLE_DATA SampleData; + +class PureSampleEx +{ +public: + typedef enum InitOptions{ParamIsNumSamples,ParamIsSizeBytes}; + typedef enum BitsPerSample{Bit4=4,Bit8=8,Bit16=16,Bit32=32}; + enum{BitsPerByte=8}; + PureSampleEx(); + virtual ~PureSampleEx(); + PureSampleEx &operator=(const PureSampleEx &pureSampleEx); + bool operator==(const PureSampleEx &pureSampleEx); + PureSampleEx &operator+=(const PureSampleEx &pureSampleEx); + bool write(MemFile &memFile)const; + bool read(FileHandle &handle); + bool convert(BitsPerSample bitsPerSample); + bool convert(PureSampleEx &pureSampleEx,BitsPerSample bitsPerSample); + bool initialize(BitsPerSample bitsPerSample,int param,InitOptions initOption); + bool getAt(int sampleIndex,SampleData &sampleData); + bool setAt(int sampleIndex,SampleData &sampleData); + bool isOkay(void)const; + DWORD getSizeBytes(void)const; + DWORD getNumSamples(void)const; + BitsPerSample getBitsPerSample(void)const; + BYTE *getSampleData(void); +private: + static int getRequiredLength(BitsPerSample bitsPerSample,int numSamples); + static void translate(SampleData &srcData,BitsPerSample srcBitsPerSample,SampleData &dstData,BitsPerSample &dstBitsPerSample); + static int getNumSamples(BitsPerSample bitsPerSample,int sizeBytes); + + Array mSampleData; + BitsPerSample mBitsPerSample; + DWORD mNumSamples; +}; + +inline +PureSampleEx::PureSampleEx() +: mBitsPerSample(Bit8), mNumSamples(0) +{ +} + +inline +PureSampleEx::~PureSampleEx() +{ +} + +inline +bool PureSampleEx::initialize(BitsPerSample bitsPerSample,int param,InitOptions initOption) +{ + if(ParamIsNumSamples==initOption) + { + mBitsPerSample=bitsPerSample; + mNumSamples=param; + mSampleData.size(getRequiredLength(bitsPerSample,mNumSamples)); + } + else + { + mBitsPerSample=bitsPerSample; + mNumSamples=getNumSamples(bitsPerSample,param); + mSampleData.size(param); + } + return true; +} + +inline +int PureSampleEx::getRequiredLength(BitsPerSample bitsPerSample,int numSamples) +{ + return ((float)bitsPerSample/(float)BitsPerByte)*numSamples; +} + +inline +PureSampleEx &PureSampleEx::operator=(const PureSampleEx &pureSampleEx) +{ + mSampleData=pureSampleEx.mSampleData; + mBitsPerSample=pureSampleEx.mBitsPerSample; + mNumSamples=pureSampleEx.mNumSamples; + return *this; +} + +inline +bool PureSampleEx::operator==(const PureSampleEx &pureSampleEx) +{ + if(mBitsPerSample!=pureSampleEx.mBitsPerSample || mNumSamples!=pureSampleEx.mNumSamples)return false; + return mSampleData==pureSampleEx.mSampleData; +} + +inline +PureSampleEx &PureSampleEx::operator+=(const PureSampleEx &pureSampleEx) +{ + throw Exception("PureSampleEx::operator+=() not implemented"); + return *this; +} + +inline +bool PureSampleEx::convert(BitsPerSample bitsPerSample) +{ + PureSampleEx pureSampleEx; + + convert(pureSampleEx,bitsPerSample); + *this=pureSampleEx; + return true; +} + +inline +bool PureSampleEx::convert(PureSampleEx &pureSampleEx,BitsPerSample bitsPerSample) +{ + SampleData srcData; + SampleData dstData; + + if(!isOkay())return false; + pureSampleEx.initialize(bitsPerSample,getNumSamples(),PureSampleEx::ParamIsNumSamples); + for(int index=0;index=mNumSamples)return false; + index=((float)mBitsPerSample/(float)BitsPerByte)*(float)sampleIndex; + byteIndex=index; + if(Bit4==mBitsPerSample) + { + BYTE b=mSampleData[byteIndex]; + if(0.00==(float)byteIndex-index)sampleData.b4=b; + else sampleData.b4=(b>>4); + } + else if(Bit8==mBitsPerSample) + { + sampleData.b8=mSampleData[byteIndex]; + } + else if(Bit16==mBitsPerSample) + { + sampleData.b16=*((WORD*)&mSampleData[byteIndex]); + } + else if(Bit32==mBitsPerSample) + { + sampleData.b32=*((DWORD*)&mSampleData[byteIndex]); + } + return true; +} + +inline +bool PureSampleEx::setAt(int sampleIndex,SampleData &sampleData) +{ + float index; + int byteIndex; + + if(sampleIndex>=mNumSamples)return false; + index=((float)mBitsPerSample/(float)BitsPerByte)*(float)sampleIndex; + byteIndex=index; + if(Bit4==mBitsPerSample) + { + BYTE b=mSampleData[byteIndex]; + if(0.00==(float)byteIndex-index)mSampleData[byteIndex]=(b&0xF0)|sampleData.b4; + else mSampleData[byteIndex]=(b&0x0F)|(((BYTE)sampleData.b4)<<4); + } + else if(Bit8==mBitsPerSample) + { + mSampleData[byteIndex]=sampleData.b8; + } + else if(Bit16==mBitsPerSample) + { + *((WORD*)&mSampleData[byteIndex])=sampleData.b16; + } + else if(Bit32==mBitsPerSample) + { + *((DWORD*)&mSampleData[byteIndex])=sampleData.b32; + } + return true; +} + +inline +bool PureSampleEx::write(MemFile &memFile)const +{ + if(!isOkay())return false; + if(!memFile.write((char*)&((Array&)mSampleData)[0],mSampleData.size()))return false; + return true; +} + +inline +bool PureSampleEx::read(FileHandle &handle) +{ + if(!isOkay())return false; + if(!handle.read(&mSampleData[0],mSampleData.size()))return false; + return true; +} + +inline +DWORD PureSampleEx::getSizeBytes(void)const +{ + return getRequiredLength(mBitsPerSample,getNumSamples()); +} + +inline +DWORD PureSampleEx::getNumSamples(void)const +{ + return mNumSamples; +} + +inline +PureSampleEx::BitsPerSample PureSampleEx::getBitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +int PureSampleEx::getNumSamples(BitsPerSample bitsPerSample,int sizeBytes) +{ + return ((float)BitsPerByte/(float)bitsPerSample)*(float)sizeBytes; +} + +inline +BYTE *PureSampleEx::getSampleData(void) +{ + return &mSampleData[0]; +} + +inline +bool PureSampleEx::isOkay(void)const +{ + return mNumSamples?true:false; +} +#endif diff --git a/sample/PureSmpl.cpp b/sample/PureSmpl.cpp new file mode 100644 index 0000000..a43c629 --- /dev/null +++ b/sample/PureSmpl.cpp @@ -0,0 +1,48 @@ +#include + +PureSample &PureSample::operator=(const PureSample &somePureSample) +{ + numSamples(somePureSample.numSamples()); + if(!isOkay())return *this; + copySampleData(&(((GlobalData&)mSampleData).operator[](0)),&(((GlobalData&)somePureSample.mSampleData).operator[](0)),numSamples()); + return *this; +} + +PureSample &PureSample::operator+=(const PureSample &somePureSample) +{ + PureSample mixedSample; + DWORD clampOne; + DWORD clampTwo; + UHUGE *lpMixedSample; + UHUGE *lpSampleOne; + UHUGE *lpSampleTwo; + + if(numSamples()>somePureSample.numSamples()) + { + clampOne=somePureSample.numSamples(); + clampTwo=numSamples(); + lpSampleOne=sampleData(); + lpSampleTwo=((PureSample&)somePureSample).sampleData(); + } + else + { + clampOne=numSamples(); + clampTwo=somePureSample.numSamples(); + lpSampleOne=((PureSample&)somePureSample).sampleData(); + lpSampleTwo=sampleData(); + } + mixedSample.numSamples(clampTwo); + lpMixedSample=mixedSample.sampleData(); + for(DWORD sampleIndex=0;sampleIndex>0x01; + for(;sampleIndex +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif + +// This object holds the sample data as bytes. It does not know anything about the internal +// makeup of the sample (ie) does not know how many bits per sample + +class PureSample +{ +public: + PureSample(void); + PureSample(const PureSample &somePureSample); + virtual ~PureSample(); + PureSample &operator=(const PureSample &somePureSample); + PureSample &operator+=(const PureSample &somePureSample); + DWORD numSamples(void)const; + void numSamples(DWORD numSamples); + BYTE *sampleData(void); + bool isOkay(void)const; + bool write(MemFile &memFile)const; + bool read(FileHandle &handle); + String toString(void)const; +private: + void copySampleData(BYTE *lpDstSample,BYTE *lpSrcSample,DWORD numBytes); + DWORD mNumSamples; + Array mSampleData; +}; + +inline +PureSample::PureSample(void) +: mNumSamples(0) +{ +} + +inline +PureSample::PureSample(const PureSample &somePureSample) +{ + *this=somePureSample; +} + +inline +PureSample::~PureSample() +{ +} + +inline +DWORD PureSample::numSamples(void)const +{ + return mNumSamples; +} + +inline +void PureSample::numSamples(DWORD numSamples) +{ + mNumSamples=numSamples; + mSampleData.size(mNumSamples); +} + +inline +BYTE *PureSample::sampleData(void) +{ + if(!isOkay())return (BYTE*)0; + return &mSampleData[0]; +} + +inline +bool PureSample::write(MemFile &memFile)const +{ + if(!isOkay())return false; + if(!memFile.write((char*)&((GlobalData&)mSampleData)[0],mNumSamples))return false; + return true; +} + +inline +bool PureSample::read(FileHandle &handle) +{ + if(!isOkay())return false; + if(!handle.read(&mSampleData[0],mNumSamples))return false; + return true; +} + +inline +bool PureSample::isOkay(void)const +{ + return mSampleData.size()?true:false; +} + +inline +String PureSample::toString(void)const +{ + String strPureSample; + strPureSample+=""; + strPureSample+=String(" NumSamples=")+String().fromInt(mNumSamples).quotes(); + strPureSample+=String(" SampleData=")+String().fromInt(mSampleData.size()).quotes(); + strPureSample+=String(""); + return strPureSample; +} +#endif diff --git a/sample/PureWave.cpp b/sample/PureWave.cpp new file mode 100644 index 0000000..58e36d7 --- /dev/null +++ b/sample/PureWave.cpp @@ -0,0 +1,58 @@ +#include +#include +#include + +PureWave::~PureWave() +{ + destroy(); +} + +PureWave::PureWave(void) +: mhProcessInstance(processInstance()), mClassNameString("PLAYBACKSAMPLEDOUTPUT") +{ + UINT numOutputDevices; + UINT numInputDevices; + registerClass(); + createWindow(); + numOutputDevices=::waveOutGetNumDevs(); + numInputDevices=::waveInGetNumDevs(); + for(short deviceIndex=0;deviceIndex +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#include +#endif + +class WaveForm; + +class PureWave : private Window +{ +public: + PureWave(void); + ~PureWave(); + WORD play(WaveForm &someWaveForm,DeviceHandler::PlayMode playMode=DeviceHandler::NoWait); + UINT numInputDevices(void)const; + UINT numOutputDevices(void)const; +private: + void registerClass(void)const; + void createWindow(void); + Block mWaveOutDeviceBlock; + Block mWaveInDeviceBlock; + HINSTANCE mhProcessInstance; + String mClassNameString; +}; + +inline +UINT PureWave::numInputDevices(void)const +{ + return mWaveInDeviceBlock.size(); +} + +inline +UINT PureWave::numOutputDevices(void)const +{ + return mWaveOutDeviceBlock.size(); +} +#endif diff --git a/sample/Release/sample.lib b/sample/Release/sample.lib new file mode 100644 index 0000000..e98ddd9 Binary files /dev/null and b/sample/Release/sample.lib differ diff --git a/sample/Release/vc60.idb b/sample/Release/vc60.idb new file mode 100644 index 0000000..9a89c22 Binary files /dev/null and b/sample/Release/vc60.idb differ diff --git a/sample/SAMPLE.DEF b/sample/SAMPLE.DEF new file mode 100644 index 0000000..22f0142 --- /dev/null +++ b/sample/SAMPLE.DEF @@ -0,0 +1,12 @@ +NAME SAMPLE +DESCRIPTION 'SAMPLE' +EXETYPE WINDOWS +STUB 'WINSTUB.EXE' +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE +HEAPSIZE 16384 +STACKSIZE 32767 +EXPORTS + + + diff --git a/sample/SAMPLE.DSW b/sample/SAMPLE.DSW new file mode 100644 index 0000000..401b19b --- /dev/null +++ b/sample/SAMPLE.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "sample"=.\sample.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/sample/SAMPLE.MAK b/sample/SAMPLE.MAK new file mode 100644 index 0000000..6f29277 --- /dev/null +++ b/sample/SAMPLE.MAK @@ -0,0 +1,799 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on sample.dsp +!IF "$(CFG)" == "" +CFG=sample - Win32 Release +!MESSAGE No configuration specified. Defaulting to sample - Win32 Release. +!ENDIF + +!IF "$(CFG)" != "sample - Win32 Release" && "$(CFG)" != "sample - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sample.mak" CFG="sample - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sample - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "sample - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe + +!IF "$(CFG)" == "sample - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\sample.lib" + +!ELSE + +ALL : "$(OUTDIR)\sample.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Datachnk.obj" + -@erase "$(INTDIR)\Devhndlr.obj" + -@erase "$(INTDIR)\Puresmpl.obj" + -@erase "$(INTDIR)\Purewave.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\Wave.obj" + -@erase "$(INTDIR)\Wavein.obj" + -@erase "$(INTDIR)\Waveout.obj" + -@erase "$(OUTDIR)\sample.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\sample.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\sample.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\sample.lib" +LIB32_OBJS= \ + "$(INTDIR)\Datachnk.obj" \ + "$(INTDIR)\Devhndlr.obj" \ + "$(INTDIR)\Puresmpl.obj" \ + "$(INTDIR)\Purewave.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Wave.obj" \ + "$(INTDIR)\Wavein.obj" \ + "$(INTDIR)\Waveout.obj" + +"$(OUTDIR)\sample.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +!IF "$(RECURSE)" == "0" + +ALL : "..\exe\sample.lib" + +!ELSE + +ALL : "..\exe\sample.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Datachnk.obj" + -@erase "$(INTDIR)\Devhndlr.obj" + -@erase "$(INTDIR)\Puresmpl.obj" + -@erase "$(INTDIR)\Purewave.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\Wave.obj" + -@erase "$(INTDIR)\Wavein.obj" + -@erase "$(INTDIR)\Waveout.obj" + -@erase "..\exe\sample.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\sample.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"..\exe\sample.lib" +LIB32_OBJS= \ + "$(INTDIR)\Datachnk.obj" \ + "$(INTDIR)\Devhndlr.obj" \ + "$(INTDIR)\Puresmpl.obj" \ + "$(INTDIR)\Purewave.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Wave.obj" \ + "$(INTDIR)\Wavein.obj" \ + "$(INTDIR)\Waveout.obj" + +"..\exe\sample.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "sample - Win32 Release" || "$(CFG)" == "sample - Win32 Debug" +SOURCE=.\Datachnk.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_DATAC=\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Datachnk.obj" : $(SOURCE) $(DEP_CPP_DATAC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +DEP_CPP_DATAC=\ + "..\..\parts\mssdk\include\basetsd.h"\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Datachnk.obj" : $(SOURCE) $(DEP_CPP_DATAC) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Devhndlr.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_DEVHN=\ + ".\Devhndlr.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Devhndlr.obj" : $(SOURCE) $(DEP_CPP_DEVHN) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +DEP_CPP_DEVHN=\ + "..\..\parts\mssdk\include\basetsd.h"\ + ".\Devhndlr.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Devhndlr.obj" : $(SOURCE) $(DEP_CPP_DEVHN) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Puresmpl.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_PURES=\ + ".\Puresmpl.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Puresmpl.obj" : $(SOURCE) $(DEP_CPP_PURES) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +DEP_CPP_PURES=\ + "..\..\parts\mssdk\include\basetsd.h"\ + ".\Puresmpl.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Puresmpl.obj" : $(SOURCE) $(DEP_CPP_PURES) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Purewave.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_PUREW=\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Devhndlr.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Incaps.hpp"\ + ".\Outcaps.hpp"\ + ".\Pcmform.hpp"\ + ".\Puresmpl.hpp"\ + ".\Purewave.hpp"\ + ".\Wave.hpp"\ + ".\Wavefmex.hpp"\ + ".\Wavehdr.hpp"\ + ".\Wavein.hpp"\ + ".\Waveout.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Purewave.obj" : $(SOURCE) $(DEP_CPP_PUREW) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +DEP_CPP_PUREW=\ + "..\..\parts\mssdk\include\basetsd.h"\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Devhndlr.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Incaps.hpp"\ + ".\Outcaps.hpp"\ + ".\Pcmform.hpp"\ + ".\Puresmpl.hpp"\ + ".\Purewave.hpp"\ + ".\Wave.hpp"\ + ".\Wavefmex.hpp"\ + ".\Wavehdr.hpp"\ + ".\Wavein.hpp"\ + ".\Waveout.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Purewave.obj" : $(SOURCE) $(DEP_CPP_PUREW) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_STDTM=\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Devhndlr.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Incaps.hpp"\ + ".\Outcaps.hpp"\ + ".\Pcmform.hpp"\ + ".\Puresmpl.hpp"\ + ".\Purewave.hpp"\ + ".\Wave.hpp"\ + ".\Wavefmex.hpp"\ + ".\Wavehdr.hpp"\ + ".\Wavein.hpp"\ + ".\Waveout.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Wave.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_WAVE_=\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Puresmpl.hpp"\ + ".\Wave.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Wave.obj" : $(SOURCE) $(DEP_CPP_WAVE_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +DEP_CPP_WAVE_=\ + "..\..\parts\mssdk\include\basetsd.h"\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Puresmpl.hpp"\ + ".\Wave.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Wave.obj" : $(SOURCE) $(DEP_CPP_WAVE_) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Wavein.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_WAVEI=\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Devhndlr.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Incaps.hpp"\ + ".\Pcmform.hpp"\ + ".\Puresmpl.hpp"\ + ".\Wave.hpp"\ + ".\Wavefmex.hpp"\ + ".\Wavehdr.hpp"\ + ".\Wavein.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Wavein.obj" : $(SOURCE) $(DEP_CPP_WAVEI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +DEP_CPP_WAVEI=\ + "..\..\parts\mssdk\include\basetsd.h"\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Devhndlr.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Incaps.hpp"\ + ".\Pcmform.hpp"\ + ".\Puresmpl.hpp"\ + ".\Wave.hpp"\ + ".\Wavefmex.hpp"\ + ".\Wavehdr.hpp"\ + ".\Wavein.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Wavein.obj" : $(SOURCE) $(DEP_CPP_WAVEI) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Waveout.cpp + +!IF "$(CFG)" == "sample - Win32 Release" + +DEP_CPP_WAVEO=\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Devhndlr.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Outcaps.hpp"\ + ".\Pcmform.hpp"\ + ".\Puresmpl.hpp"\ + ".\Wave.hpp"\ + ".\Wavefmex.hpp"\ + ".\Wavehdr.hpp"\ + ".\Waveout.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Waveout.obj" : $(SOURCE) $(DEP_CPP_WAVEO) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +DEP_CPP_WAVEO=\ + "..\..\parts\mssdk\include\basetsd.h"\ + ".\Chunkid.hpp"\ + ".\Datachnk.hpp"\ + ".\Devhndlr.hpp"\ + ".\Fmtchnk.hpp"\ + ".\Genchnk.hpp"\ + ".\Outcaps.hpp"\ + ".\Pcmform.hpp"\ + ".\Puresmpl.hpp"\ + ".\Wave.hpp"\ + ".\Wavefmex.hpp"\ + ".\Wavehdr.hpp"\ + ".\Waveout.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\filetime.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\intel.hpp"\ + {$(INCLUDE)}"common\memfile.hpp"\ + {$(INCLUDE)}"common\mmsystem.hpp"\ + {$(INCLUDE)}"common\openfile.hpp"\ + {$(INCLUDE)}"common\overlap.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\systime.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + {$(INCLUDE)}"fileio\fileio.hpp"\ + + +"$(INTDIR)\Waveout.obj" : $(SOURCE) $(DEP_CPP_WAVEO) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/sample/SAMPLE.MDP b/sample/SAMPLE.MDP new file mode 100644 index 0000000..0461be7 Binary files /dev/null and b/sample/SAMPLE.MDP differ diff --git a/sample/SAMPLE.OPT b/sample/SAMPLE.OPT new file mode 100644 index 0000000..cca4a5f Binary files /dev/null and b/sample/SAMPLE.OPT differ diff --git a/sample/SAMPLE.PLG b/sample/SAMPLE.PLG new file mode 100644 index 0000000..499ab4e --- /dev/null +++ b/sample/SAMPLE.PLG @@ -0,0 +1,16 @@ + + +
+

Build Log

+

+--------------------Configuration: sample - Win32 Debug-------------------- +

+

Command Lines

+ + + +

Results

+sample.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/sample/SCRAPS.TXT b/sample/SCRAPS.TXT new file mode 100644 index 0000000..4aef4d2 --- /dev/null +++ b/sample/SCRAPS.TXT @@ -0,0 +1,48 @@ + for(DWORD index=0;index>(FileIO &stream,WaveForm &waveForm); + + + +//#ifndef _COMMON_FILEIO_HPP_ +//#include +//#endif + + + + +/* +bool WaveForm::save(String wavePathFileName,const PureSample &somePureSample,DWORD samplesPerSecond,DWORD avgBytesPerSecond) +{ + DWORD waveFileLength((long)sizeof(mHeaderString)+(long)sizeof(mLengthData)+(long)sizeof(mSubHeaderString)+(long)sizeof(FormatChunk)+(long)sizeof(DataChunk)+(long)somePureSample.numSamples()); + + wavePathFileName.upper(); + if(!wavePathFileName.strstr(mExtensionString))wavePathFileName+=mExtensionString; + MemFile waveFile(wavePathFileName,waveFileLength); + mLengthData=somePureSample.numSamples()+sizeof(mSubHeaderString)+mFormatChunk.size()+mDataChunk.size(); + for(short chunkIndex=0;chunkIndex +#include +#include +#include + +PureWave *lpPureWave=0; +PureVector waveForms; + +#if defined(__FLAT__) +BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : +// createInstanceData(hInstance); + break; + case DLL_PROCESS_DETACH : +// destroyInstanceData(); + break; + } + return TRUE; +} +#else +int CALLBACK _export LibMain(HINSTANCE hInstance,WORD /*wDataSeg*/,WORD /*wHeapSize*/,LPSTR /*lpszCmdLine*/) +{ + createInstanceData(hInstance); + return TRUE; +} + +int CALLBACK _export WEP(int /*nExitType*/) +{ + destroyInstanceData(); + return TRUE; +} +#endif + +short CALLBACK _export play(WORD waveFormIndex,WORD waitFlag) +{ + if(!lpPureWave)return FALSE; + if(waveFormIndex>=waveForms.size())return FALSE; + return lpPureWave->play(waveForms[waveFormIndex],waitFlag?DeviceHandler::Wait:DeviceHandler::NoWait); +} + +short CALLBACK _export preLoadSamples(Block &pathFileNames) +{ + if(!lpPureWave)return FALSE; + + waveForms.size(pathFileNames.size()); + for(short index=0;index +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +short CALLBACK _export play(WORD waveFormIndex,WORD waitFlag); +short CALLBACK _export preLoadSamples(Block &pathFileNames); +void CALLBACK _export createInstanceData(HINSTANCE hInstance); +void CALLBACK _export destroyInstanceData(void); +#endif diff --git a/sample/Wave.cpp b/sample/Wave.cpp new file mode 100644 index 0000000..0fe97aa --- /dev/null +++ b/sample/Wave.cpp @@ -0,0 +1,237 @@ +#include +#include +#include +#include + +WaveForm::WaveForm(const String &wavePathFileName) +{ + bool result = open(wavePathFileName); +} + +/* +bool WaveForm::open(String wavePathFileName) +{ + initWaveForm(); + wavePathFileName.lower(); + if(!wavePathFileName.strstr(mExtensionString))wavePathFileName+=mExtensionString; + mWavePathFileName=wavePathFileName; + FileHandle waveFile(wavePathFileName,FileHandle::Read,FileHandle::ShareReadWrite); + + + if(!waveFile.isOkay())return false; + if(!waveFile.read((BYTE*)&mHeaderString,sizeof(mHeaderString)))return false; + if(!waveFile.read((BYTE*)&mLengthData,sizeof(mLengthData)))return false; + if(!waveFile.read((BYTE*)&mSubHeaderString,sizeof(mSubHeaderString)))return false; + if(!mFormatChunk.read(waveFile))return false; + while(true) + { + ChunkID chunkID; + if(!chunkID.read(waveFile))return false; + if(FileHandle::ErrorReturn==waveFile.seek(-chunkID.size(),FileHandle::SeekCurrent))return false; + if(chunkID==String("data")) + { + if(!mDataChunk.read(waveFile))return false; + break; + } + mGenericChunks.insert(&GenericChunk()); + mGenericChunks[mGenericChunks.size()-1].read(waveFile); + } + mSampleData.initialize(PureSampleEx::BitsPerSample(mFormatChunk.bitsPerSample()),mDataChunk.length(),PureSampleEx::ParamIsSizeBytes); + if(!mSampleData.read(waveFile))return false; + waveFile.close(); + return mSampleData.getNumSamples()?true:false; +} +*/ + +bool WaveForm::open(String wavePathFileName) +{ + if(wavePathFileName.isNull())return false; + wavePathFileName.lower(); + if(!wavePathFileName.strstr(mExtensionString))wavePathFileName+=mExtensionString; + mWavePathFileName=wavePathFileName; + FileHandle waveFile(wavePathFileName,FileHandle::Read,FileHandle::ShareReadWrite); + if(!read(waveFile))return false; + waveFile.close(); + return mSampleData.getNumSamples()?true:false; +} + +WaveForm WaveForm::operator+(const WaveForm &someWaveForm) +{ + WaveForm waveForm(*this); + waveForm+=someWaveForm; + return waveForm; +} + +WaveForm &WaveForm::operator=(const WaveForm &someWaveForm) +{ + initWaveForm(); + mLengthData=someWaveForm.mLengthData; + mFormatChunk=someWaveForm.mFormatChunk; + mDataChunk=someWaveForm.mDataChunk; + mSampleData=someWaveForm.mSampleData; + return *this; +} + +WaveForm &WaveForm::operator+=(const WaveForm &someWaveForm) +{ + if(mLengthData").append(crlf); + strWaveForm.append(" Header=").append(String(mHeaderString).quotes()).append(crlf); + strWaveForm.append(" LengthData=").append(String().fromInt(mLengthData).quotes()).append(crlf); + strWaveForm.append(" SubHeader=").append(String(mSubHeaderString).quotes()).append(crlf); + strWaveForm.append(" ").append(mFormatChunk.toString()).append(crlf); + for(int index=0;index&)mGenericChunks)[index].chunkID().toString()).append(crlf); + } + strWaveForm.append(mDataChunk.toString()).append(crlf); + strWaveForm.append(" WavePathFileName=").append(mWavePathFileName.quotes()).append(crlf); + strWaveForm.append(" Extension=").append(mExtensionString.quotes()).append(crlf); + strWaveForm.append(" WaveString=").append(mWaveString.quotes()).append(crlf); + strWaveForm.append(" RiffString=").append(mRiffString.quotes()).append(crlf); + strWaveForm.append("").append(crlf); + return strWaveForm.toString(); +} + + +/* +String WaveForm::toString(void)const +{ + String strWaveForm; + + strWaveForm+=String(""); + strWaveForm+=String(" Header=")+String(mHeaderString).quotes(); + strWaveForm+=String(" LengthData=")+String().fromInt(mLengthData).quotes(); + strWaveForm+=String(" SubHeader=")+String(mSubHeaderString).quotes(); + strWaveForm+=String(" ")+mFormatChunk.toString(); + for(int index=0;index&)mGenericChunks)[index].chunkID().toString(); + } + strWaveForm+=mDataChunk.toString(); + strWaveForm+=String(" WavePathFileName=")+mWavePathFileName.quotes(); + strWaveForm+=String(" Extension=")+mExtensionString.quotes(); + strWaveForm+=String(" WaveString=")+mWaveString.quotes(); + strWaveForm+=String(" RiffString=")+mRiffString.quotes(); + strWaveForm+=String(""); + return strWaveForm; +} +*/ diff --git a/sample/Wave.hpp b/sample/Wave.hpp new file mode 100644 index 0000000..1079986 --- /dev/null +++ b/sample/Wave.hpp @@ -0,0 +1,120 @@ +#ifndef _SAMPLE_WAVEFORM_HPP_ +#define _SAMPLE_WAVEFORM_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SAMPLE_DATACHUNK_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif +#ifndef _SAMPLE_GENERICCHUNK_HPP_ +#include +#endif + +#ifndef _SAMPLE_PURESAMPLE_HPP_ +#include +#endif +#ifndef _SAMPLE_PURESAMPLEEX_HPP_ +#include +#endif + +class WaveForm +{ +public: + WaveForm(void); + WaveForm(const String &wavePathFileName); + WaveForm(const WaveForm &someWaveForm); + virtual ~WaveForm(); + bool open(String wavePathFileName); + WaveForm &operator=(const WaveForm &someWaveForm); + WaveForm &operator=(const String &wavePathFileName); + WaveForm &operator+=(const WaveForm &someWaveForm); + WaveForm operator+(const WaveForm &someWaveForm); + bool operator==(const WaveForm &someWaveForm)const; + bool read(FileHandle &waveFile); + bool convert(PureSampleEx::BitsPerSample bitsPerSample); + FormatChunk &getFormatChunk(void); + PureSampleEx &getPureSample(void); + bool save(String wavePathFileName,const PureSampleEx &somePureSample,DWORD samplesPerSecond,DWORD avgBytesPerSecond); + bool save(String wavePathFileName); + const String &wavePathFileName(void)const; + bool isOkay(void)const; + String toString(void)const; +private: + enum {MaxLength=4}; + void initWaveForm(void); + + char mHeaderString[MaxLength]; + DWORD mLengthData; + char mSubHeaderString[MaxLength]; + FormatChunk mFormatChunk; + Block mGenericChunks; + DataChunk mDataChunk; + PureSampleEx mSampleData; + String mWavePathFileName; + String mExtensionString; + String mWaveString; + String mRiffString; +}; + +inline +WaveForm::WaveForm(void) +{ + initWaveForm(); +} + +inline +WaveForm::WaveForm(const WaveForm &someWaveForm) +{ + *this=someWaveForm; +} + +inline +WaveForm::~WaveForm() +{ +} + +inline +WaveForm &WaveForm::operator=(const String &wavePathFileName) +{ + *this=WaveForm(wavePathFileName); + return *this; +} + +inline +bool WaveForm::isOkay(void)const +{ + return mSampleData.isOkay(); +} + +inline +const String &WaveForm::wavePathFileName(void)const +{ + return mWavePathFileName; +} + +inline +FormatChunk &WaveForm::getFormatChunk(void) +{ + return mFormatChunk; +} + +inline +PureSampleEx &WaveForm::getPureSample(void) +{ + return mSampleData; +} +#endif + + diff --git a/sample/WaveFmEx.hpp b/sample/WaveFmEx.hpp new file mode 100644 index 0000000..4d1de49 --- /dev/null +++ b/sample/WaveFmEx.hpp @@ -0,0 +1,175 @@ +#ifndef _SAMPLE_WAVEFORMATEX_HPP_ +#define _SAMPLE_WAVEFORMATEX_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_MMREG_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormatEx : private WAVEFORMATEX +{ +public: + enum FormatType{PulseCodeModulation=WAVE_FORMAT_PCM,AdPulseCodeModulation=WAVE_FORMAT_ADPCM}; + WaveFormatEx(void); + WaveFormatEx(const WaveFormatEx &someWaveFormatEx); + WaveFormatEx(const FormatChunk &someFormatChunk); + ~WaveFormatEx(); + WaveFormatEx &operator=(const WaveFormatEx &someWaveFormatEx); + WaveFormatEx &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplePerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); + WORD size(void)const; + void size(WORD size); + operator WAVEFORMATEX &(void)const; +private: +}; + +inline +WaveFormatEx::WaveFormatEx(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveFormatEx::WaveFormatEx(const WaveFormatEx &someWaveFormatEx) +{ + *this=someWaveFormatEx; +} + +inline +WaveFormatEx::WaveFormatEx(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormatEx::~WaveFormatEx() +{ +} + +inline +WaveFormatEx &WaveFormatEx::operator=(const WaveFormatEx &someWaveFormatEx) +{ + ::memcpy(this,&someWaveFormatEx,sizeof(*this)); + return *this; +} + +inline +WORD WaveFormatEx::formatTag(void)const +{ + return WAVEFORMATEX::wFormatTag; +} + +inline +void WaveFormatEx::formatTag(WORD formatTag) +{ + WAVEFORMATEX::wFormatTag=formatTag; +} + +inline +WORD WaveFormatEx::channels(void)const +{ + return WAVEFORMATEX::nChannels; +} + +inline +void WaveFormatEx::channels(WORD channels) +{ + WAVEFORMATEX::nChannels=channels; +} + +inline +DWORD WaveFormatEx::samplePerSecond(void)const +{ + return WAVEFORMATEX::nSamplesPerSec; +} + +inline +void WaveFormatEx::samplesPerSecond(DWORD samplesPerSecond) +{ + WAVEFORMATEX::nSamplesPerSec=samplesPerSecond; +} + +inline +DWORD WaveFormatEx::averageBytesPerSecond(void)const +{ + return WAVEFORMATEX::nAvgBytesPerSec; +} + +inline +void WaveFormatEx::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + WAVEFORMATEX::nAvgBytesPerSec=averageBytesPerSecond; +} + +inline +WORD WaveFormatEx::blockAlign(void)const +{ + return WAVEFORMATEX::nBlockAlign; +} + +inline +void WaveFormatEx::blockAlign(WORD blockAlign) +{ + WAVEFORMATEX::nBlockAlign=blockAlign; +} + +inline +WORD WaveFormatEx::bitsPerSample(void)const +{ + return WAVEFORMATEX::wBitsPerSample; +} + +inline +void WaveFormatEx::bitsPerSample(WORD bitsPerSample) +{ + WAVEFORMATEX::wBitsPerSample=bitsPerSample; +} + +inline +WORD WaveFormatEx::size(void)const +{ + return WAVEFORMATEX::cbSize; +} + +inline +void WaveFormatEx::size(WORD size) +{ + WAVEFORMATEX::cbSize=size; +} + +inline +WaveFormatEx::operator WAVEFORMATEX &(void)const +{ + return *((WAVEFORMATEX*)this); +} + +inline +WaveFormatEx &WaveFormatEx::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} +#endif \ No newline at end of file diff --git a/sample/WaveForm.hpp b/sample/WaveForm.hpp new file mode 100644 index 0000000..43ddd73 --- /dev/null +++ b/sample/WaveForm.hpp @@ -0,0 +1,143 @@ +#ifndef _SAMPLE_WAVEFORMAT_HPP_ +#define _SAMPLE_WAVEFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormat : private WAVEFORMAT +{ +public: + enum FormatType{PulseCodeModulation=WAVE_FORMAT_PCM}; + WaveFormat(void); + WaveFormat(const WaveFormat &someWaveFormat); + WaveFormat(const FormatChunk &someFormatChunk); + virtual ~WaveFormat(); + WaveFormat &operator=(const WaveFormat &someWaveFormat); + WaveFormat &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplePerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + operator WAVEFORMAT &(void)const; +private: +}; + +inline +WaveFormat::WaveFormat(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveFormat::WaveFormat(const WaveFormat &someWaveFormat) +{ + *this=someWaveFormat; +} + +inline +WaveFormat::WaveFormat(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormat::~WaveFormat() +{ +} + +inline +WaveFormat &WaveFormat::operator=(const WaveFormat &someWaveFormat) +{ + ::memcpy(this,&someWaveFormat,sizeof(*this)); + return *this; +} + +inline +WORD WaveFormat::formatTag(void)const +{ + return WAVEFORMAT::wFormatTag; +} + +inline +void WaveFormat::formatTag(WORD formatTag) +{ + WAVEFORMAT::wFormatTag=formatTag; +} + +inline +WORD WaveFormat::channels(void)const +{ + return WAVEFORMAT::nChannels; +} + +inline +void WaveFormat::channels(WORD channels) +{ + WAVEFORMAT::nChannels=channels; +} + +inline +DWORD WaveFormat::samplePerSecond(void)const +{ + return WAVEFORMAT::nSamplesPerSec; +} + +inline +void WaveFormat::samplesPerSecond(DWORD samplesPerSecond) +{ + WAVEFORMAT::nSamplesPerSec=samplesPerSecond; +} + +inline +DWORD WaveFormat::averageBytesPerSecond(void)const +{ + return WAVEFORMAT::nAvgBytesPerSec; +} + +inline +void WaveFormat::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + WAVEFORMAT::nAvgBytesPerSec=averageBytesPerSecond; +} + +inline +WORD WaveFormat::blockAlign(void)const +{ + return WAVEFORMAT::nBlockAlign; +} + +inline +void WaveFormat::blockAlign(WORD blockAlign) +{ + WAVEFORMAT::nBlockAlign=blockAlign; +} + +inline +WaveFormat::operator WAVEFORMAT &(void)const +{ + return *((WAVEFORMAT*)this); +} + +inline +WaveFormat &WaveFormat::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + return *this; +} +#endif diff --git a/sample/WaveHdr.hpp b/sample/WaveHdr.hpp new file mode 100644 index 0000000..2222892 --- /dev/null +++ b/sample/WaveHdr.hpp @@ -0,0 +1,97 @@ +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#define _SAMPLE_WAVEHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class WaveHeader : private WAVEHDR +{ +public: + WaveHeader(void); + WaveHeader(const WaveHeader &someWaveHeader); + ~WaveHeader(); + WaveHeader &operator=(const WaveHeader &someWaveHeader); + WORD operator==(const WaveHeader &someWaveHeader); + void setData(LPSTR lpData); + void setBufferLength(DWORD bufferLength); + void userData(DWORD userData); + DWORD userData(void)const; +// operator WAVEHDR &(void)const; +private: + void initHeader(void); +}; + +inline +WaveHeader::WaveHeader(void) +{ + initHeader(); +} + +inline +WaveHeader::WaveHeader(const WaveHeader &someWaveHeader) +{ + *this=someWaveHeader; +} + +inline +WaveHeader::~WaveHeader() +{ +} + +inline +void WaveHeader::initHeader(void) +{ + ::memset(&((WAVEHDR&)*this),0,sizeof(WAVEHDR)); +} + +inline +void WaveHeader::setData(LPSTR lpData) +{ + WAVEHDR::lpData=lpData; +} + +inline +void WaveHeader::setBufferLength(DWORD bufferLength) +{ + WAVEHDR::dwBufferLength=bufferLength; +} + +inline +void WaveHeader::userData(DWORD userData) +{ + WAVEHDR::dwUser=userData; +} + +inline +DWORD WaveHeader::userData(void)const +{ + return WAVEHDR::dwUser; +} + +inline +WaveHeader &WaveHeader::operator=(const WaveHeader &someWaveHeader) +{ + initHeader(); + setData(someWaveHeader.WAVEHDR::lpData); + setBufferLength(someWaveHeader.WAVEHDR::dwBufferLength); + return *this; +} + +inline +WORD WaveHeader::operator==(const WaveHeader &someWaveHeader) +{ + return FALSE; +} + +#if 0 +inline +WaveHeader::operator WAVEHDR &(void)const +{ + return *((WAVEHDR*)this); +} +#endif +#endif + diff --git a/sample/WaveIn.cpp b/sample/WaveIn.cpp new file mode 100644 index 0000000..c956d70 --- /dev/null +++ b/sample/WaveIn.cpp @@ -0,0 +1,35 @@ +#include + +WORD WaveInDevice::openDevice(WaveFormatPCM &/*waveFormatPCM*/) +{ + return FALSE; +} + +WORD WaveInDevice::closeDevice(void) +{ + return FALSE; +} + +WORD WaveInDevice::record(WaveForm &/*waveForm*/) +{ + return FALSE; +} + +// virtuals + +void WaveInDevice::openHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::closeHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::doneHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::message(const String &strErrorMessage)const +{ + ::OutputDebugString((String&)strErrorMessage+String("\n")); +} diff --git a/sample/WaveIn.hpp b/sample/WaveIn.hpp new file mode 100644 index 0000000..d7a2b05 --- /dev/null +++ b/sample/WaveIn.hpp @@ -0,0 +1,76 @@ +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#define _SAMPLE_WAVEINDEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINCAPS_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveInDevice : public DeviceHandler +{ +public: + WaveInDevice(UINT waveDeviceID,Window &windowHandler); + WaveInDevice(const WaveInDevice &someWaveInDevice); + virtual ~WaveInDevice(); + WaveInDevice &operator=(const WaveInDevice &someWaveInDevice); + WORD record(WaveForm &waveForm); +protected: + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; +private: + WORD openDevice(WaveFormatPCM &waveFormatPCM); + WORD closeDevice(void); + UINT mWaveDeviceID; + GlobalData mGlobalWaveHeader; + WaveInCaps mWaveInCaps; + HWAVEIN mhWaveIn; + Window &mWindowHandler; +}; + +inline +WaveInDevice::WaveInDevice(UINT waveDeviceID,Window &windowHandler) +: mWaveDeviceID(waveDeviceID), mhWaveIn(0), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWindowHandler(windowHandler), DeviceHandler(windowHandler) +{ + ::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps)); +} + +inline +WaveInDevice::WaveInDevice(const WaveInDevice &someWaveInDevice) +: mWaveDeviceID(someWaveInDevice.mWaveDeviceID), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mhWaveIn(0), mWindowHandler(someWaveInDevice.mWindowHandler), DeviceHandler(someWaveInDevice.mWindowHandler) +{ + *this=someWaveInDevice; +} + +inline +WaveInDevice &WaveInDevice::operator=(const WaveInDevice &someWaveInDevice) +{ + mWaveInCaps=someWaveInDevice.mWaveInCaps; + return *this; +} + +inline +WaveInDevice::~WaveInDevice() +{ + closeDevice(); +} +#endif diff --git a/sample/WaveOut.cpp b/sample/WaveOut.cpp new file mode 100644 index 0000000..9f81b5d --- /dev/null +++ b/sample/WaveOut.cpp @@ -0,0 +1,150 @@ +#include + +WaveOutDevice::WaveOutDevice(UINT waveDeviceID,Window &windowHandler) +: mWaveDeviceID(waveDeviceID), mhWaveOut(0), + mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWindowHandler(windowHandler), DeviceHandler(windowHandler), + mDisposition(InClose) +{ + ::waveOutGetDevCaps(mWaveDeviceID,&((WAVEOUTCAPS&)mWaveOutCaps),sizeof(mWaveOutCaps)); +} + +WaveOutDevice::WaveOutDevice(const WaveOutDevice &someWaveOutDevice) +: mWindowHandler(someWaveOutDevice.mWindowHandler), mhWaveOut(0), + mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWaveDeviceID(someWaveOutDevice.mWaveDeviceID), + DeviceHandler(someWaveOutDevice.mWindowHandler), + mDisposition(someWaveOutDevice.mDisposition) +{ + *this=someWaveOutDevice; +} + +WaveOutDevice::~WaveOutDevice() +{ + closeDevice(); +} + +WaveOutDevice &WaveOutDevice::operator=(const WaveOutDevice &someWaveOutDevice) +{ + mWaveOutCaps=someWaveOutDevice.mWaveOutCaps; + return *this; +} + +BOOL WaveOutDevice::openDevice(WaveFormatPCM &waveFormatPCM) +{ + MMRESULT mmResult; + + closeDevice(); + mmResult=::waveOutOpen(&mhWaveOut,mWaveDeviceID,(LPWAVEFORMATEX)&waveFormatPCM,(UINT)((HWND)mWindowHandler),0L,WAVE_ALLOWSYNC|CALLBACK_WINDOW); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InOpen; + return TRUE; +} + +BOOL WaveOutDevice::closeDevice(void) +{ + MMRESULT mmResult; + + if(!mhWaveOut||InClose==mDisposition)return TRUE; + if(InPlay==mDisposition) + { + mmResult=::waveOutReset(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + } + while(InPlay==mDisposition)mWindowHandler.yieldTask(); + mmResult=::waveOutClose(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InClose; + mhWaveOut=0; + return TRUE; +} + +BOOL WaveOutDevice::pause(void) +{ + MMRESULT mmResult; + + if(InPlay!=mDisposition)return FALSE; + if(0!=(mmResult=::waveOutPause(mhWaveOut))){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPause; + return TRUE; +} + +BOOL WaveOutDevice::restart(void) +{ + MMRESULT mmResult; + + if(InPause!=mDisposition)return FALSE; + if(0!=(mmResult=::waveOutRestart(mhWaveOut))){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPlay; + return TRUE; +} + +BOOL WaveOutDevice::play(WaveForm &someWaveForm,DeviceHandler::PlayMode playMode) +{ + MMRESULT mmResult; + DWORD bufferLength; + + bufferLength=someWaveForm.getPureSample().getNumSamples() * (someWaveForm.getFormatChunk().bitsPerSample()/8); // bits per sample * 8 bits in a byte + WaveFormatPCM waveFormatPCM(someWaveForm.getFormatChunk()); + + if(WaveFormatEx::PulseCodeModulation!=waveFormatPCM.formatTag() && + WaveFormatEx::AdPulseCodeModulation!=waveFormatPCM.formatTag()) + { + genericErrorMessage(InvalidFormat); + return FALSE; + } + if(!openDevice(waveFormatPCM))return FALSE; + ((WaveHeader*)&mGlobalWaveHeader[0])->setData((char*)(someWaveForm.getPureSample().getSampleData())); +// ((WaveHeader*)&mGlobalWaveHeader[0])->setBufferLength(someWaveForm.getPureSample().getNumSamples()); + ((WaveHeader*)&mGlobalWaveHeader[0])->setBufferLength(bufferLength); + ((WaveHeader*)&mGlobalWaveHeader[0])->userData((DWORD)this); + mmResult=::waveOutPrepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutWrite(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPlay; + if(mmResult){mmSystemErrorMessage(mmResult);unprepareHeader();return FALSE;} + if(DeviceHandler::Wait==playMode) + { + while(InPlay==mDisposition)mWindowHandler.yieldTask(); + closeDevice(); + } + return TRUE; +} + +void WaveOutDevice::unprepareHeader(void) +{ + if(!mhWaveOut){genericErrorMessage(DeviceHandler::InvalidDeviceHandle);return;} + if(!mGlobalWaveHeader.isOkay()){genericErrorMessage(DeviceHandler::InvalidHeader);return;} + ::waveOutUnprepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WaveHeader)); +} + +// virtuals + +void WaveOutDevice::openHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void WaveOutDevice::closeHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void WaveOutDevice::doneHandler(CallbackData &someCallbackData) +{ + WaveHeader &waveHeader=(*((WaveHeader*)someCallbackData.lParam())); + + if(waveHeader.userData()==(DWORD)this) + { + unprepareHeader(); + mDisposition=InIdle; + } + return; +} + +void WaveOutDevice::message(const String &strErrorMessage)const +{ + ::OutputDebugString((String&)strErrorMessage+String("\n")); +} + diff --git a/sample/WaveOut.hpp b/sample/WaveOut.hpp new file mode 100644 index 0000000..3d408a7 --- /dev/null +++ b/sample/WaveOut.hpp @@ -0,0 +1,52 @@ +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#define _SAMPLE_WAVEOUTDEVICE_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTCAPS_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveOutDevice : public DeviceHandler +{ +public: + WaveOutDevice(UINT waveDeviceID,Window &windowHander); + WaveOutDevice(const WaveOutDevice &someWaveOutDevice); + virtual ~WaveOutDevice(); + WaveOutDevice &operator=(const WaveOutDevice &someWaveOutDevice); + BOOL play(WaveForm &waveForm,DeviceHandler::PlayMode playMode=DeviceHandler::NoWait); + BOOL pause(void); + BOOL restart(void); +protected: + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; +private: + enum Disposition{InPause,InPlay,InClose,InOpen,InIdle}; + BOOL openDevice(WaveFormatPCM &waveFormatPCM); + BOOL closeDevice(void); + void unprepareHeader(void); + WaveOutCaps mWaveOutCaps; + Window &mWindowHandler; + UINT mWaveDeviceID; + GlobalData mGlobalWaveHeader; + HWAVEOUT mhWaveOut; + Disposition mDisposition; +}; +#endif diff --git a/sample/hold/CHUNKID.HPP b/sample/hold/CHUNKID.HPP new file mode 100644 index 0000000..db27f7b --- /dev/null +++ b/sample/hold/CHUNKID.HPP @@ -0,0 +1,121 @@ +#ifndef _SAMPLE_CHUNKID_HPP_ +#define _SAMPLE_CHUNKID_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif + +class ChunkID +{ +public: + ChunkID(void); + ChunkID(const ChunkID &someChunkID); + virtual ~ChunkID(); + ChunkID &operator=(const ChunkID &someChunkID); + ChunkID &operator=(String chunkIDString); + WORD operator==(const ChunkID &someChunkID)const; + WORD operator==(const String &chunkIDString)const; + MemFile &ChunkID::operator>>(MemFile &someMemFile)const; + FileHandle &ChunkID::operator<<(FileHandle &someFileHandle); + String chunkID(void)const; + WORD size(void)const; + String toString(void)const; +private: + enum {MaxLength=4}; + void initChunk(void); + + char mChunkID[MaxLength]; +}; + +inline +ChunkID::ChunkID(void) +{ + initChunk(); +} + +inline +ChunkID::ChunkID(const ChunkID &someChunkID) +{ + initChunk(); + *this=someChunkID; +} + +inline +ChunkID::~ChunkID() +{ +} + +inline +ChunkID &ChunkID::operator=(const ChunkID &someChunkID) +{ + ::memcpy(mChunkID,someChunkID.mChunkID,sizeof(mChunkID)); + return *this; +} + +inline +ChunkID &ChunkID::operator=(String chunkIDString) +{ + if(chunkIDString.length()>sizeof(mChunkID))chunkIDString.length(sizeof(mChunkID)); + return *this; +} + +inline +WORD ChunkID::operator==(const ChunkID &someChunkID)const +{ + return (!::memcmp(mChunkID,someChunkID.mChunkID,sizeof(mChunkID))?TRUE:FALSE); +} + +inline +WORD ChunkID::operator==(const String &chunkIDString)const +{ + return chunkID()==chunkIDString; +} + +inline +MemFile &ChunkID::operator>>(MemFile &someMemFile)const +{ + someMemFile.write((char*)mChunkID,sizeof(mChunkID)); + return someMemFile; +} + +inline +FileHandle &ChunkID::operator<<(FileHandle &someFileHandle) +{ + someFileHandle.read((BYTE*)mChunkID,sizeof(mChunkID)); + return someFileHandle; +} + +inline +String ChunkID::chunkID(void)const +{ + String chunkString; + ::memcpy(chunkString,mChunkID,sizeof(mChunkID)); + return chunkString; +} + +inline +WORD ChunkID::size(void)const +{ + return sizeof(mChunkID); +} + +inline +void ChunkID::initChunk(void) +{ + ::memset(mChunkID,0,sizeof(mChunkID)); +} + +inline +String ChunkID::toString(void)const +{ + return String(" ChunkID=")+String(mChunkID).quotes()+String(""); +} +#endif diff --git a/sample/hold/DATACHNK.CPP b/sample/hold/DATACHNK.CPP new file mode 100644 index 0000000..8a47404 --- /dev/null +++ b/sample/hold/DATACHNK.CPP @@ -0,0 +1,8 @@ +#include + +FileHandle &DataChunk::operator<<(FileHandle &someFileHandle) +{ + mChunkID< +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class DataChunk +{ +public: + DataChunk(void); + virtual ~DataChunk(); + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + LONG length(void)const; + void length(LONG length); + DWORD size(void)const; + String toString(void)const; +private: + void initChunk(void); + ChunkID mChunkID; + LONG mLengthData; +}; + +inline +DataChunk::DataChunk(void) +{ + initChunk(); +} + +inline +DataChunk::~DataChunk() +{ +} + +inline +LONG DataChunk::length(void)const +{ + return mLengthData; +} + +inline +void DataChunk::length(LONG length) +{ + mLengthData=length; +} + +inline +MemFile &DataChunk::operator>>(MemFile &someMemFile)const +{ + mChunkID>>someMemFile; + someMemFile.write((char*)&mLengthData,sizeof(mLengthData)); + return someMemFile; +} + +inline +DWORD DataChunk::size(void)const +{ + return mChunkID.size()+sizeof(DWORD); +} + +inline +void DataChunk::initChunk(void) +{ + mChunkID=String("data"); + return; +} + +inline +String DataChunk::toString(void)const +{ + String strDataChunk; + strDataChunk+=String(""); + strDataChunk+=mChunkID.toString(); + strDataChunk+=String(" LengthData=")+String().fromInt(mLengthData).quotes(); + strDataChunk+=String(""); + return strDataChunk; +} +#endif + diff --git a/sample/hold/DEVHNDLR.CPP b/sample/hold/DEVHNDLR.CPP new file mode 100644 index 0000000..a10c60a --- /dev/null +++ b/sample/hold/DEVHNDLR.CPP @@ -0,0 +1,77 @@ +#include +#include + +void DeviceHandler::insertHandlers(void) +{ + mWindowHandler.insertHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.insertHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.insertHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void DeviceHandler::removeHandlers(void) +{ + mWindowHandler.removeHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.removeHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.removeHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void DeviceHandler::mmSystemErrorMessage(MMRESULT mmResult)const +{ + String errorString; + ::waveOutGetErrorText(mmResult,(LPSTR)errorString,String::MaxString); + message(errorString); +} + +void DeviceHandler::genericErrorMessage(ErrorCode errorCode)const +{ + if(errorCode==InvalidFormat)message("Invalid Format."); + else if(errorCode==InvalidDeviceHandle)message("Invalid Device Handle."); + else if(errorCode==InvalidHeader)message("Invalid Header."); + else message("Unknown Error."); + return; +} + +WORD DeviceHandler::operator==(const DeviceHandler &/*someDeviceHandler*/)const +{ + return FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmOpenHandler(CallbackData &someCallbackData) +{ + openHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmCloseHandler(CallbackData &someCallbackData) +{ + closeHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmDoneHandler(CallbackData &someCallbackData) +{ + doneHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +// virtuals + +void DeviceHandler::openHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::closeHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::doneHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::message(const String &strErrorMessage)const +{ + ::MessageBox(::GetFocus(),(LPSTR)(String&)strErrorMessage,(LPSTR)"DeviceHandler",MB_OK); +} diff --git a/sample/hold/DEVHNDLR.HPP b/sample/hold/DEVHNDLR.HPP new file mode 100644 index 0000000..0b3454e --- /dev/null +++ b/sample/hold/DEVHNDLR.HPP @@ -0,0 +1,70 @@ +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#define _SAMPLE_DEVICEHANDLER_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class DeviceHandler +{ +public: + enum PlayMode{Wait,NoWait}; + DeviceHandler(Window &windowHandler); + DeviceHandler(const DeviceHandler &someDeviceHandler); + virtual ~DeviceHandler(); + WORD operator==(const DeviceHandler &someDeviceHandler)const; + DeviceHandler &operator=(const DeviceHandler &someDeviceHandler); +protected: + enum ErrorCode{InvalidFormat,InvalidDeviceHandle,InvalidHeader}; + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; + void mmSystemErrorMessage(MMRESULT mmResult)const; + void genericErrorMessage(ErrorCode errorCode)const; +private: + void insertHandlers(void); + void removeHandlers(void); + CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData); + Callback mMMOpenHandler; + Callback mMMCloseHandler; + Callback mMMDoneHandler; + Window &mWindowHandler; +}; + +inline +DeviceHandler::DeviceHandler(Window &windowHandler) +: mWindowHandler(windowHandler) +{ + mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); + mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); + mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); + insertHandlers(); +} + +inline +DeviceHandler::DeviceHandler(const DeviceHandler &someDeviceHandler) +: mWindowHandler(someDeviceHandler.mWindowHandler) +{ + mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); + mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); + mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); + insertHandlers(); +} + +inline +DeviceHandler::~DeviceHandler() +{ + removeHandlers(); +} + +inline +DeviceHandler &DeviceHandler::operator=(const DeviceHandler &/*someDeviceHandler*/) +{ + return *this; +} +#endif diff --git a/sample/hold/DEVICE.CPP b/sample/hold/DEVICE.CPP new file mode 100644 index 0000000..71b04dc --- /dev/null +++ b/sample/hold/DEVICE.CPP @@ -0,0 +1,126 @@ +#include +#include + +WaveDevice::WaveDevice(UINT waveDeviceID,DeviceType waveDeviceType,Window &windowHandler) +: mMMOpenHandler(this,&WaveDevice::mmOpenHandler), + mMMCloseHandler(this,&WaveDevice::mmCloseHandler), + mMMDoneHandler(this,&WaveDevice::mmDoneHandler), + mWaveDeviceID(waveDeviceID), mDeviceType(waveDeviceType), mWindowHandler(windowHandler), + mhWaveOut(0), mGlobalWaveHeader(1,GMEM_MOVEABLE) +{ + getDeviceCapabilities(); + insertHandlers(); +} + +WaveDevice::WaveDevice(const WaveDevice &someWaveDevice) +: mMMOpenHandler(this,&WaveDevice::mmOpenHandler), + mMMCloseHandler(this,&WaveDevice::mmCloseHandler), + mMMDoneHandler(this,&WaveDevice::mmDoneHandler), + mWindowHandler(someWaveDevice.mWindowHandler), + mhWaveOut(0), mGlobalWaveHeader(1,GMEM_MOVEABLE) +{ + insertHandlers(); + *this=someWaveDevice; +} + +WaveDevice::~WaveDevice() +{ + closeDevice(); + removeHandlers(); +} + +WORD WaveDevice::openDevice(WaveFormatPCM &waveFormatPCM) +{ + MMRESULT mmResult; + closeDevice(); + mmResult=::waveOutOpen(&mhWaveOut,mWaveDeviceID,(LPWAVEFORMAT)&waveFormatPCM,(UINT)((HWND)mWindowHandler),0L,WAVE_ALLOWSYNC|CALLBACK_WINDOW); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + return TRUE; +} + +WORD WaveDevice::closeDevice(void) +{ + MMRESULT mmResult; + + if(!mhWaveOut)return FALSE; + mmResult=::waveOutReset(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutClose(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mhWaveOut=0; + return TRUE; +} + +WaveDevice &WaveDevice::operator=(const WaveDevice &someWaveDevice) +{ + mWaveDeviceID=someWaveDevice.mWaveDeviceID; + mDeviceType=someWaveDevice.mDeviceType; + mWaveInCaps=someWaveDevice.mWaveInCaps; + mWaveOutCaps=someWaveDevice.mWaveOutCaps; + return *this; +} + +void WaveDevice::insertHandlers(void) +{ + mWindowHandler.insertHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.insertHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.insertHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void WaveDevice::removeHandlers(void) +{ + mWindowHandler.removeHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.removeHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.removeHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +WORD WaveDevice::play(WaveForm &someWaveForm,PlayMode playMode) +{ + MMRESULT mmResult; + WaveFormatPCM waveFormatPCM((FormatChunk&)someWaveForm); + if(WaveFormat::PulseCodeModulation!=waveFormatPCM.formatTag()){genericErrorMessage(InvalidFormat);return FALSE;} + if(!openDevice(waveFormatPCM))return FALSE; + ((WaveHeader*)mGlobalWaveHeader)->setData((char*)(((PureSample&)someWaveForm).sampleData())); + ((WaveHeader*)mGlobalWaveHeader)->setBufferLength(((PureSample&)someWaveForm).numSamples()); + ((WaveHeader*)mGlobalWaveHeader)->userData((DWORD)this); + mmResult=::waveOutPrepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)mGlobalWaveHeader),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutWrite(mhWaveOut,(WAVEHDR*)((WaveHeader*)mGlobalWaveHeader),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + if(Wait==playMode){while(mhWaveOut)yieldTask();} + return TRUE; +} + +void WaveDevice::yieldTask(void)const +{ + MSG msg; + + if(::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } +} + +CallbackData::ReturnType WaveDevice::mmOpenHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WaveDevice::mmCloseHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WaveDevice::mmDoneHandler(CallbackData &someCallbackData) +{ + WaveHeader &waveHeader(*((WaveHeader*)someCallbackData.lParam())); + + if(waveHeader.userData()==(DWORD)this) + { + ::waveOutUnprepareHeader((HWAVEOUT)someCallbackData.wParam(),(LPWAVEHDR)someCallbackData.lParam(),sizeof(WAVEHDR)); + closeDevice(); + } + return (CallbackData::ReturnType)FALSE; +} + diff --git a/sample/hold/DEVICE.HPP b/sample/hold/DEVICE.HPP new file mode 100644 index 0000000..d7cb47f --- /dev/null +++ b/sample/hold/DEVICE.HPP @@ -0,0 +1,118 @@ +#ifndef _SAMPLE_DEVICE_HPP_ +#define _SAMPLE_DEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveDevice +{ +public: + enum DeviceType{InputDevice,OutputDevice,InvalidDevice}; + enum PlayMode{Wait,NoWait}; + WaveDevice(UINT waveDeviceID,DeviceType waveDeviceType,Window &windowHandler); + WaveDevice(const WaveDevice &someWaveDevice); + ~WaveDevice(); + WORD play(WaveForm &waveForm,PlayMode playMode=NoWait); + WORD operator==(const WaveDevice &someWaveDevice)const; + WaveDevice &operator=(const WaveDevice &someWaveDevice); + void waveDeviceID(UINT deviceID); + UINT waveDeviceID(void)const; + void waveDeviceType(DeviceType waveDeviceType); + DeviceType waveDeviceType(void)const; +private: + enum ErrorCode{InvalidFormat}; + void yieldTask(void)const; + void getDeviceCapabilities(void); + void insertHandlers(void); + void removeHandlers(void); + void mmSystemErrorMessage(MMRESULT mmResult)const; + void genericErrorMessage(ErrorCode errorCode)const; + WORD closeDevice(void); + WORD openDevice(WaveFormatPCM &waveFormatPCM); + CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData); + Callback mMMOpenHandler; + Callback mMMCloseHandler; + Callback mMMDoneHandler; + UINT mWaveDeviceID; + DeviceType mDeviceType; + WaveInCaps mWaveInCaps; + WaveOutCaps mWaveOutCaps; + HWAVEOUT mhWaveOut; + GlobalData mGlobalWaveHeader; + Window &mWindowHandler; +}; + +inline +void WaveDevice::waveDeviceID(UINT deviceID) +{ + mWaveDeviceID=deviceID; + getDeviceCapabilities(); +} + +inline +UINT WaveDevice::waveDeviceID(void)const +{ + return mWaveDeviceID; +} + +inline +void WaveDevice::waveDeviceType(DeviceType waveDeviceType) +{ + mDeviceType=waveDeviceType; + getDeviceCapabilities(); +} + +inline +WaveDevice::DeviceType WaveDevice::waveDeviceType(void)const +{ + return mDeviceType; +} + +inline +void WaveDevice::getDeviceCapabilities(void) +{ + if(mDeviceType==InputDevice)::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps)); + else if(mDeviceType==OutputDevice)::waveOutGetDevCaps(mWaveDeviceID,&((WAVEOUTCAPS&)mWaveOutCaps),sizeof(mWaveOutCaps)); +} + +inline +WORD WaveDevice::operator==(const WaveDevice &someWaveDevice)const +{ + return (mDeviceType==someWaveDevice.mDeviceType&&mWaveDeviceID==someWaveDevice.mWaveDeviceID); +} + +inline +void WaveDevice::mmSystemErrorMessage(MMRESULT mmResult)const +{ + String errorString; + ::waveOutGetErrorText(mmResult,(LPSTR)errorString,String::MaxString); + ::MessageBox(::GetFocus(),(LPSTR)errorString,(LPSTR)"WaveDevice",MB_OK); +} + +inline +void WaveDevice::genericErrorMessage(ErrorCode errorCode)const +{ + if(errorCode==InvalidFormat)::MessageBox(::GetFocus(),(LPSTR)"Invalid Format.",(LPSTR)"WaveDevice",MB_OK); + return; +} +#endif diff --git a/sample/hold/FMTCHNK.HPP b/sample/hold/FMTCHNK.HPP new file mode 100644 index 0000000..4a3d577 --- /dev/null +++ b/sample/hold/FMTCHNK.HPP @@ -0,0 +1,166 @@ +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#define _SAMPLE_FORMATCHUNK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class FormatChunk +{ +public: + enum {WaveFormatPCM=0x01,NumChannels=0x01,BlockAlign=0x01,BitsPerSample=0x08}; + FormatChunk(void); + FormatChunk(const FormatChunk &someFormatChunk); + virtual ~FormatChunk(); + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + FormatChunk &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplesPerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); + WORD size(void)const; + String toString(void)const; +private: + void initChunk(void); + ChunkID mChunkID; + DWORD mSize; + WORD mFormatTag; + WORD mChannels; + DWORD mSamplesPerSecond; + DWORD mAvgBytesPerSecond; + WORD mBlockAlign; + WORD mBitsPerSample; + WORD mExtraInfo; +}; + +inline +FormatChunk::FormatChunk(void) +: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0), + mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0), mExtraInfo(0) +{ + initChunk(); +} + +inline +FormatChunk::FormatChunk(const FormatChunk &someFormatChunk) +: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0), + mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0), mExtraInfo(0) +{ + initChunk(); + *this=someFormatChunk; +} + +inline +FormatChunk::~FormatChunk() +{ +} + +inline +WORD FormatChunk::formatTag(void)const +{ + return mFormatTag; +} + +inline +void FormatChunk::formatTag(WORD formatTag) +{ + mFormatTag=formatTag; +} + +inline +WORD FormatChunk::channels(void)const +{ + return mChannels; +} + +inline +void FormatChunk::channels(WORD channels) +{ + mChannels=channels; +} + +inline +DWORD FormatChunk::samplesPerSecond(void)const +{ + return mSamplesPerSecond; +} + +inline +void FormatChunk::samplesPerSecond(DWORD samplesPerSecond) +{ + mSamplesPerSecond=samplesPerSecond; +} + +inline +DWORD FormatChunk::averageBytesPerSecond(void)const +{ + return mAvgBytesPerSecond; +} + +inline +void FormatChunk::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + mAvgBytesPerSecond=averageBytesPerSecond; +} + +inline +WORD FormatChunk::blockAlign(void)const +{ + return mBlockAlign; +} + +inline +void FormatChunk::blockAlign(WORD blockAlign) +{ + mBlockAlign=blockAlign; +} + +inline +WORD FormatChunk::bitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +void FormatChunk::bitsPerSample(WORD bitsPerSample) +{ + mBitsPerSample=bitsPerSample; +} + +inline +WORD FormatChunk::size(void)const +{ + return mSize+mChunkID.size(); +} + +inline +void FormatChunk::initChunk(void) +{ + mChunkID=String("fmt "); + mSize=(mChunkID.size()+sizeof(mSize)+sizeof(mFormatTag)+sizeof(mChannels)+sizeof(mSamplesPerSecond)+ + sizeof(mAvgBytesPerSecond)+sizeof(mBlockAlign)+sizeof(mBitsPerSample))-(mChunkID.size()+sizeof(mSize)); +} +#endif diff --git a/sample/hold/GENCHNK.HPP b/sample/hold/GENCHNK.HPP new file mode 100644 index 0000000..3d212ab --- /dev/null +++ b/sample/hold/GENCHNK.HPP @@ -0,0 +1,100 @@ +#ifndef _SAMPLE_GENERICCHUNK_HPP_ +#define _SAMPLE_GENERICCHUNK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class GenericChunk : public GlobalData +{ +public: + GenericChunk(void); + GenericChunk(const GenericChunk &someGenericChunk); + virtual ~GenericChunk(); + GenericChunk &operator=(const GenericChunk &someGenericChunk); + WORD operator==(const GenericChunk &someGenericChunk)const; + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + const ChunkID &chunkID(void)const; + DWORD chunkLength(void)const; +private: + ChunkID mChunkID; +}; + +inline +GenericChunk::GenericChunk(void) +{ +} + +inline +GenericChunk::GenericChunk(const GenericChunk &someGenericChunk) +{ + *this=someGenericChunk; +} + +inline +GenericChunk::~GenericChunk() +{ +} + +inline +GenericChunk &GenericChunk::operator=(const GenericChunk &someGenericChunk) +{ + mChunkID=someGenericChunk.mChunkID; + return *this; +} + +inline +WORD GenericChunk::operator==(const GenericChunk &someGenericChunk)const +{ + return (mChunkID==someGenericChunk.mChunkID&& + (GlobalData&)*this==(GlobalData&)someGenericChunk); +} + +inline +MemFile &GenericChunk::operator>>(MemFile &someMemFile)const +{ + DWORD lengthData(size()); + + mChunkID>>someMemFile; + someMemFile.write((char*)&lengthData,sizeof(lengthData)); + someMemFile.write((char*)(BYTE*)&(((GlobalData&)*this).operator[](0)),lengthData); + return someMemFile; +} + +inline +FileHandle &GenericChunk::operator<<(FileHandle &someFileHandle) +{ + DWORD lengthData; + + mChunkID<&)*this),lengthData); + someFileHandle.read(&(((GlobalData&)*this).operator[](0)),lengthData); + return someFileHandle; +} + +inline +DWORD GenericChunk::chunkLength(void)const +{ + return mChunkID.size()+size()+sizeof(DWORD); +} + +inline +const ChunkID &GenericChunk::chunkID(void)const +{ + return mChunkID; +} +#endif diff --git a/sample/hold/INCAPS.HPP b/sample/hold/INCAPS.HPP new file mode 100644 index 0000000..3cbd35e --- /dev/null +++ b/sample/hold/INCAPS.HPP @@ -0,0 +1,95 @@ +#ifndef _SAMPLE_WAVEINCAPS_HPP_ +#define _SAMPLE_WAVEINCAPS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class WaveInCaps : private WAVEINCAPS +{ +public: + WaveInCaps(const WaveInCaps &someWaveInCaps); + WaveInCaps(void); + ~WaveInCaps(); + WaveInCaps &operator=(const WaveInCaps &someWaveInCaps); + operator WAVEINCAPS &(void); + UINT manufacturerID(void)const; + UINT productID(void)const; + WORD driverVersion(void)const; + String productName(void)const; + DWORD supportedFormats(void)const; + UINT channels(void)const; +private: +}; + +inline +WaveInCaps::WaveInCaps(const WaveInCaps &someWaveInCaps) +{ + *this=someWaveInCaps; +} + +inline +WaveInCaps::WaveInCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveInCaps::~WaveInCaps() +{ +} + +inline +UINT WaveInCaps::manufacturerID(void)const +{ + return WAVEINCAPS::wMid; +} + +inline +UINT WaveInCaps::productID(void)const +{ + return WAVEINCAPS::wPid; +} + +inline +WORD WaveInCaps::driverVersion(void)const +{ + return WAVEINCAPS::vDriverVersion; +} + +inline +String WaveInCaps::productName(void)const +{ + return String(WAVEINCAPS::szPname); +} + +inline +DWORD WaveInCaps::supportedFormats(void)const +{ + return WAVEINCAPS::dwFormats; +} + +inline +UINT WaveInCaps::channels(void)const +{ + return WAVEINCAPS::wChannels; +} + +inline +WaveInCaps::operator WAVEINCAPS &(void) +{ + return *((WAVEINCAPS*)this); +} + +inline +WaveInCaps &WaveInCaps::operator=(const WaveInCaps &someWaveInCaps) +{ + ::memcpy(this,&someWaveInCaps,sizeof(*this)); + return *this; +} +#endif diff --git a/sample/hold/MAIN.CPP b/sample/hold/MAIN.CPP new file mode 100644 index 0000000..c919dd1 --- /dev/null +++ b/sample/hold/MAIN.CPP @@ -0,0 +1,36 @@ +#include +#include +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + Array waveForms; + PureWave pureWave; + + waveForms.size(2); +// waveForms[0]="C:\\WINDOWS\\MEDIA\\DSSHOTGN.WAV"; +// waveForms[0]="c:\\winnt\\media\\ctmelody.wav"; + + + + waveForms[0]="D:\\Program Files\\FruityLoops3\\Samples\\Packs\\Basic\\Kicks\\Kick.wav"; + waveForms[1]="D:\\Program Files\\FruityLoops3\\Samples\\Packs\\Basic\\Kicks\\C_Kick.wav"; + + ::OutputDebugString(waveForms[0].toString()+String("\n")); + ::OutputDebugString(waveForms[1].toString()+String("\n")); + +// waveForms[0]+=waveForms[1]; + + + ::OutputDebugString(waveForms[0].toString()+String("\n")); + + +// return 0; + for(int index=0;index<3;index++) + { + pureWave.play(waveForms[0],DeviceHandler::Wait); + } +// pureWave.play(waveForms[0],DeviceHandler::Wait); + return FALSE; +} + diff --git a/sample/hold/OUTCAPS.HPP b/sample/hold/OUTCAPS.HPP new file mode 100644 index 0000000..cea9262 --- /dev/null +++ b/sample/hold/OUTCAPS.HPP @@ -0,0 +1,103 @@ +#ifndef _SAMPLE_WAVEOUTCAPS_HPP_ +#define _SAMPLE_WAVEOUTCAPS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WaveOutCaps : private WAVEOUTCAPS +{ +public: + WaveOutCaps(void); + WaveOutCaps(const WaveOutCaps &someWaveOutCaps); + ~WaveOutCaps(); + WaveOutCaps &operator=(const WaveOutCaps &someWaveOutCaps); + operator WAVEOUTCAPS &(void)const; + UINT manufacturerID(void)const; + UINT productID(void)const; + MMVERSION driverVersion(void)const; + String productName(void)const; + DWORD supportedFormats(void)const; + WORD channels(void)const; + DWORD optionalSupport(void)const; +private: +}; + +inline +WaveOutCaps::WaveOutCaps(const WaveOutCaps &someWaveOutCaps) +{ + *this=someWaveOutCaps; +} + +inline +WaveOutCaps::WaveOutCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveOutCaps::~WaveOutCaps() +{ +} + +inline +UINT WaveOutCaps::manufacturerID(void)const +{ + return WAVEOUTCAPS::wMid; +} + +inline +UINT WaveOutCaps::productID(void)const +{ + return WAVEOUTCAPS::wPid; +} + +inline +MMVERSION WaveOutCaps::driverVersion(void)const +{ + return WAVEOUTCAPS::vDriverVersion; +} + +inline +String WaveOutCaps::productName(void)const +{ + return WAVEOUTCAPS::szPname; +} + +inline +DWORD WaveOutCaps::supportedFormats(void)const +{ + return WAVEOUTCAPS::dwFormats; +} + +inline +WORD WaveOutCaps::channels(void)const +{ + return WAVEOUTCAPS::wChannels; +} + + +inline +DWORD WaveOutCaps::optionalSupport(void)const +{ + return WAVEOUTCAPS::dwSupport; +} + +inline +WaveOutCaps::operator WAVEOUTCAPS &(void)const +{ + return *((WAVEOUTCAPS*)this); +} + +inline +WaveOutCaps &WaveOutCaps::operator=(const WaveOutCaps &someWaveOutCaps) +{ + ::memcpy(this,&someWaveOutCaps,sizeof(*this)); + return *this; +} +#endif diff --git a/sample/hold/PCMFORM.HPP b/sample/hold/PCMFORM.HPP new file mode 100644 index 0000000..7187ef5 --- /dev/null +++ b/sample/hold/PCMFORM.HPP @@ -0,0 +1,82 @@ +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#define _SAMPLE_WAVEFORMATPCM_HPP_ +#ifndef _SAMPLE_WAVEFORMATEX_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormatPCM : public WaveFormatEx +{ +public: + WaveFormatPCM(void); + WaveFormatPCM(const WaveFormatPCM &someWaveFormatPCM); + WaveFormatPCM(const FormatChunk &someFormatChunk); + ~WaveFormatPCM(); + WaveFormatPCM &operator=(const WaveFormatPCM &someWaveFormatPCM); + WaveFormatPCM &operator=(const FormatChunk &someFormatChunk); + operator PCMWAVEFORMAT &(void)const; + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); +private: + WORD mBitsPerSample; +}; + +inline +WaveFormatPCM::WaveFormatPCM(void) +: mBitsPerSample(0) +{ +} + +inline +WaveFormatPCM::WaveFormatPCM(const WaveFormatPCM &someWaveFormatPCM) +: WaveFormatEx((WaveFormatEx&)*this), mBitsPerSample(someWaveFormatPCM.mBitsPerSample) +{ +} + +inline +WaveFormatPCM::WaveFormatPCM(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormatPCM::~WaveFormatPCM() +{ +} + +inline +WaveFormatPCM &WaveFormatPCM::operator=(const WaveFormatPCM &someWaveFormatPCM) +{ + mBitsPerSample=someWaveFormatPCM.mBitsPerSample; + (WaveFormatEx&)*this=(WaveFormatEx&)someWaveFormatPCM; + return *this; +} + +inline +WaveFormatPCM::operator PCMWAVEFORMAT &(void)const +{ + return *((PCMWAVEFORMAT*)this); +} + +inline +WORD WaveFormatPCM::bitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +void WaveFormatPCM::bitsPerSample(WORD bitsPerSample) +{ + mBitsPerSample=bitsPerSample; +} + +inline +WaveFormatPCM &WaveFormatPCM::operator=(const FormatChunk &someFormatChunk) +{ + (WaveFormatEx&)*this=someFormatChunk; + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} +#endif diff --git a/sample/hold/PURESMPL.CPP b/sample/hold/PURESMPL.CPP new file mode 100644 index 0000000..a43c629 --- /dev/null +++ b/sample/hold/PURESMPL.CPP @@ -0,0 +1,48 @@ +#include + +PureSample &PureSample::operator=(const PureSample &somePureSample) +{ + numSamples(somePureSample.numSamples()); + if(!isOkay())return *this; + copySampleData(&(((GlobalData&)mSampleData).operator[](0)),&(((GlobalData&)somePureSample.mSampleData).operator[](0)),numSamples()); + return *this; +} + +PureSample &PureSample::operator+=(const PureSample &somePureSample) +{ + PureSample mixedSample; + DWORD clampOne; + DWORD clampTwo; + UHUGE *lpMixedSample; + UHUGE *lpSampleOne; + UHUGE *lpSampleTwo; + + if(numSamples()>somePureSample.numSamples()) + { + clampOne=somePureSample.numSamples(); + clampTwo=numSamples(); + lpSampleOne=sampleData(); + lpSampleTwo=((PureSample&)somePureSample).sampleData(); + } + else + { + clampOne=numSamples(); + clampTwo=somePureSample.numSamples(); + lpSampleOne=((PureSample&)somePureSample).sampleData(); + lpSampleTwo=sampleData(); + } + mixedSample.numSamples(clampTwo); + lpMixedSample=mixedSample.sampleData(); + for(DWORD sampleIndex=0;sampleIndex>0x01; + for(;sampleIndex +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +// This object holds the sample data as bytes. It does not know anything about the internal +// makeup of the sample (ie) does not know how many bits per sample + +class PureSample +{ +public: + PureSample(void); + PureSample(const PureSample &somePureSample); + virtual ~PureSample(); + PureSample &operator=(const PureSample &somePureSample); + PureSample &operator+=(const PureSample &somePureSample); + DWORD numSamples(void)const; + void numSamples(DWORD numSamples); + UHUGE *sampleData(void); + WORD isOkay(void)const; + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + String toString(void)const; +private: + void copySampleData(UHUGE *lpDstSample,UHUGE *lpSrcSamples,DWORD numBytes); + DWORD mNumSamples; + GlobalData mSampleData; +}; + +inline +PureSample::PureSample(void) +: mNumSamples(0) +{ +} + +inline +PureSample::PureSample(const PureSample &somePureSample) +{ + *this=somePureSample; +} + +inline +PureSample::~PureSample() +{ +} + +inline +DWORD PureSample::numSamples(void)const +{ + return mNumSamples; +} + +inline +void PureSample::numSamples(DWORD numSamples) +{ + mNumSamples=numSamples; + mSampleData.size(mNumSamples,GMEM_MOVEABLE); +} + +inline +UHUGE *PureSample::sampleData(void) +{ + if(!isOkay())return (UHUGE*)0; + return (UHUGE*)&mSampleData[0]; +} + +inline +MemFile &PureSample::operator>>(MemFile &someMemFile)const +{ + if(!isOkay())return someMemFile; + someMemFile.write((char*)(UHUGE*)&(((GlobalData&)mSampleData)[0]),mNumSamples); + return someMemFile; +} + +inline +FileHandle &PureSample::operator<<(FileHandle &someFileHandle) +{ + if(!isOkay())return someFileHandle; + someFileHandle.read((BYTE*)(UHUGE*)&mSampleData[0],mNumSamples); + return someFileHandle; +} + +inline +WORD PureSample::isOkay(void)const +{ + return mSampleData.isOkay(); +} + +inline +String PureSample::toString(void)const +{ + String strPureSample; + strPureSample+=""; + strPureSample+=String(" NumSamples=")+String().fromInt(mNumSamples).quotes(); + strPureSample+=String(" SampleData=")+String().fromInt(mSampleData.size()).quotes(); + strPureSample+=String(""); + return strPureSample; +} +#endif diff --git a/sample/hold/PUREWAVE.CPP b/sample/hold/PUREWAVE.CPP new file mode 100644 index 0000000..58e36d7 --- /dev/null +++ b/sample/hold/PUREWAVE.CPP @@ -0,0 +1,58 @@ +#include +#include +#include + +PureWave::~PureWave() +{ + destroy(); +} + +PureWave::PureWave(void) +: mhProcessInstance(processInstance()), mClassNameString("PLAYBACKSAMPLEDOUTPUT") +{ + UINT numOutputDevices; + UINT numInputDevices; + registerClass(); + createWindow(); + numOutputDevices=::waveOutGetNumDevs(); + numInputDevices=::waveInGetNumDevs(); + for(short deviceIndex=0;deviceIndex +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#include +#endif + +class WaveForm; + +class PureWave : private Window +{ +public: + PureWave(void); + ~PureWave(); + WORD play(WaveForm &someWaveForm,DeviceHandler::PlayMode playMode=DeviceHandler::NoWait); + UINT numInputDevices(void)const; + UINT numOutputDevices(void)const; +private: + void registerClass(void)const; + void createWindow(void); + Block mWaveOutDeviceBlock; + Block mWaveInDeviceBlock; + HINSTANCE mhProcessInstance; + String mClassNameString; +}; + +inline +UINT PureWave::numInputDevices(void)const +{ + return mWaveInDeviceBlock.size(); +} + +inline +UINT PureWave::numOutputDevices(void)const +{ + return mWaveOutDeviceBlock.size(); +} +#endif diff --git a/sample/hold/SAMPLE.CPP b/sample/hold/SAMPLE.CPP new file mode 100644 index 0000000..6ea855a --- /dev/null +++ b/sample/hold/SAMPLE.CPP @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +PureWave *lpPureWave=0; +PureVector waveForms; + +#if defined(__FLAT__) +BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : +// createInstanceData(hInstance); + break; + case DLL_PROCESS_DETACH : +// destroyInstanceData(); + break; + } + return TRUE; +} +#else +int CALLBACK _export LibMain(HINSTANCE hInstance,WORD /*wDataSeg*/,WORD /*wHeapSize*/,LPSTR /*lpszCmdLine*/) +{ + createInstanceData(hInstance); + return TRUE; +} + +int CALLBACK _export WEP(int /*nExitType*/) +{ + destroyInstanceData(); + return TRUE; +} +#endif + +short CALLBACK _export play(WORD waveFormIndex,WORD waitFlag) +{ + if(!lpPureWave)return FALSE; + if(waveFormIndex>=waveForms.size())return FALSE; + return lpPureWave->play(waveForms[waveFormIndex],waitFlag?DeviceHandler::Wait:DeviceHandler::NoWait); +} + +short CALLBACK _export preLoadSamples(Block &pathFileNames) +{ + if(!lpPureWave)return FALSE; + + waveForms.size(pathFileNames.size()); + for(short index=0;index +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +short CALLBACK _export play(WORD waveFormIndex,WORD waitFlag); +short CALLBACK _export preLoadSamples(Block &pathFileNames); +void CALLBACK _export createInstanceData(HINSTANCE hInstance); +void CALLBACK _export destroyInstanceData(void); +#endif diff --git a/sample/hold/STDTMPL.CPP b/sample/hold/STDTMPL.CPP new file mode 100644 index 0000000..b1b79d5 --- /dev/null +++ b/sample/hold/STDTMPL.CPP @@ -0,0 +1,22 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef PureVector a; +typedef Block c; +typedef Block d; +typedef PureVector e; +typedef GlobalData f; +#endif diff --git a/sample/hold/WAVE.CPP b/sample/hold/WAVE.CPP new file mode 100644 index 0000000..df428b3 --- /dev/null +++ b/sample/hold/WAVE.CPP @@ -0,0 +1,163 @@ +#include +#include +#include + +WaveForm::WaveForm(String wavePathFileName) +{ + initWaveForm(); + wavePathFileName.lower(); + if(!wavePathFileName.strstr(mExtensionString))wavePathFileName+=mExtensionString; + mWavePathFileName=wavePathFileName; + FileHandle waveFile(wavePathFileName,FileHandle::Read,FileHandle::ShareReadWrite); + if(!waveFile.isOkay())return; + waveFile.read((BYTE*)&mHeaderString,sizeof(mHeaderString)); + waveFile.read((BYTE*)&mLengthData,sizeof(mLengthData)); + waveFile.read((BYTE*)&mSubHeaderString,sizeof(mSubHeaderString)); + mFormatChunk<>waveFile; + mDataChunk.length(mSampleData.numSamples()); + for(chunkIndex=0;chunkIndex>waveFile; + mDataChunk>>waveFile; + mSampleData>>waveFile; + return waveFile.flushBuffer(); +} + +bool WaveForm::save(String wavePathFileName,const PureSample &somePureSample,DWORD samplesPerSecond,DWORD avgBytesPerSecond) +{ + DWORD waveFileLength((long)sizeof(mHeaderString)+(long)sizeof(mLengthData)+(long)sizeof(mSubHeaderString)+(long)sizeof(FormatChunk)+(long)sizeof(DataChunk)+(long)somePureSample.numSamples()); + + wavePathFileName.upper(); + if(!wavePathFileName.strstr(mExtensionString))wavePathFileName+=mExtensionString; + MemFile waveFile(wavePathFileName,waveFileLength); + mLengthData=somePureSample.numSamples()+sizeof(mSubHeaderString)+mFormatChunk.size()+mDataChunk.size(); + for(short chunkIndex=0;chunkIndex>waveFile; + mDataChunk.length(somePureSample.numSamples()); + for(chunkIndex=0;chunkIndex>waveFile; + mDataChunk>>waveFile; + somePureSample>>waveFile; + return waveFile.flushBuffer(); +} + +String WaveForm::toString(void)const +{ + String strWaveForm; + + strWaveForm+=String(""); + strWaveForm+=String(" Header=")+String(mHeaderString).quotes(); + strWaveForm+=String(" LengthData=")+String().fromInt(mLengthData).quotes(); + strWaveForm+=String(" SubHeader=")+String(mSubHeaderString).quotes(); + strWaveForm+=String(" ")+mFormatChunk.toString(); + for(int index=0;index&)mGenericChunks)[index].chunkID().toString(); + } + strWaveForm+=mDataChunk.toString(); + strWaveForm+=mSampleData.toString(); + strWaveForm+=String(" WavePathFileName=")+mWavePathFileName.quotes(); + strWaveForm+=String(" Extension=")+mExtensionString.quotes(); + strWaveForm+=String(" WaveString=")+mWaveString.quotes(); + strWaveForm+=String(" RiffString=")+mRiffString.quotes(); + strWaveForm+=String(""); + return strWaveForm; +} diff --git a/sample/hold/WAVE.HPP b/sample/hold/WAVE.HPP new file mode 100644 index 0000000..3d4365f --- /dev/null +++ b/sample/hold/WAVE.HPP @@ -0,0 +1,114 @@ +#ifndef _SAMPLE_WAVEFORM_HPP_ +#define _SAMPLE_WAVEFORM_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SAMPLE_PURESAMPLE_HPP_ +#include +#endif +#ifndef _SAMPLE_DATACHUNK_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif +#ifndef _SAMPLE_GENERICCHUNK_HPP_ +#include +#endif + +class WaveForm +{ +public: + WaveForm(void); + WaveForm(String wavePathFileName); + WaveForm(const WaveForm &someWaveForm); + virtual ~WaveForm(); + WaveForm &operator=(const WaveForm &someWaveForm); + WaveForm &operator=(const String &wavePathFileName); + WaveForm &operator+=(const WaveForm &someWaveForm); + WaveForm operator+(const WaveForm &someWaveForm); + bool operator==(const WaveForm &someWaveForm)const; + bool operator<<(FileHandle &waveFile); + FormatChunk &getFormatChunk(void); + PureSample &getPureSample(void); + bool save(String wavePathFileName,const PureSample &somePureSample,DWORD samplesPerSecond,DWORD avgBytesPerSecond); + bool save(String wavePathFileName); + const String &wavePathFileName(void)const; + bool isOkay(void)const; + String toString(void)const; +private: + enum {MaxLength=4}; + void initWaveForm(void); + + char mHeaderString[MaxLength]; + DWORD mLengthData; + char mSubHeaderString[MaxLength]; + FormatChunk mFormatChunk; + Block mGenericChunks; + DataChunk mDataChunk; + PureSample mSampleData; + String mWavePathFileName; + String mExtensionString; + String mWaveString; + String mRiffString; +}; + +inline +WaveForm::WaveForm(void) +{ + initWaveForm(); +} + +inline +WaveForm::WaveForm(const WaveForm &someWaveForm) +{ + *this=someWaveForm; +} + +inline +WaveForm::~WaveForm() +{ +} + +inline +WaveForm &WaveForm::operator=(const String &wavePathFileName) +{ + *this=WaveForm(wavePathFileName); + return *this; +} + +inline +bool WaveForm::isOkay(void)const +{ + return mSampleData.isOkay(); +} + +inline +const String &WaveForm::wavePathFileName(void)const +{ + return mWavePathFileName; +} + +inline +FormatChunk &WaveForm::getFormatChunk(void) +{ + return mFormatChunk; +} + +inline +PureSample &WaveForm::getPureSample(void) +{ + return mSampleData; +} +#endif + + diff --git a/sample/hold/WAVEFMEX.HPP b/sample/hold/WAVEFMEX.HPP new file mode 100644 index 0000000..614a7e7 --- /dev/null +++ b/sample/hold/WAVEFMEX.HPP @@ -0,0 +1,172 @@ +#ifndef _SAMPLE_WAVEFORMATEX_HPP_ +#define _SAMPLE_WAVEFORMATEX_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormatEx : private WAVEFORMATEX +{ +public: + enum FormatType{PulseCodeModulation=WAVE_FORMAT_PCM}; + WaveFormatEx(void); + WaveFormatEx(const WaveFormatEx &someWaveFormatEx); + WaveFormatEx(const FormatChunk &someFormatChunk); + ~WaveFormatEx(); + WaveFormatEx &operator=(const WaveFormatEx &someWaveFormatEx); + WaveFormatEx &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplePerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); + WORD size(void)const; + void size(WORD size); + operator WAVEFORMATEX &(void)const; +private: +}; + +inline +WaveFormatEx::WaveFormatEx(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveFormatEx::WaveFormatEx(const WaveFormatEx &someWaveFormatEx) +{ + *this=someWaveFormatEx; +} + +inline +WaveFormatEx::WaveFormatEx(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormatEx::~WaveFormatEx() +{ +} + +inline +WaveFormatEx &WaveFormatEx::operator=(const WaveFormatEx &someWaveFormatEx) +{ + ::memcpy(this,&someWaveFormatEx,sizeof(*this)); + return *this; +} + +inline +WORD WaveFormatEx::formatTag(void)const +{ + return WAVEFORMATEX::wFormatTag; +} + +inline +void WaveFormatEx::formatTag(WORD formatTag) +{ + WAVEFORMATEX::wFormatTag=formatTag; +} + +inline +WORD WaveFormatEx::channels(void)const +{ + return WAVEFORMATEX::nChannels; +} + +inline +void WaveFormatEx::channels(WORD channels) +{ + WAVEFORMATEX::nChannels=channels; +} + +inline +DWORD WaveFormatEx::samplePerSecond(void)const +{ + return WAVEFORMATEX::nSamplesPerSec; +} + +inline +void WaveFormatEx::samplesPerSecond(DWORD samplesPerSecond) +{ + WAVEFORMATEX::nSamplesPerSec=samplesPerSecond; +} + +inline +DWORD WaveFormatEx::averageBytesPerSecond(void)const +{ + return WAVEFORMATEX::nAvgBytesPerSec; +} + +inline +void WaveFormatEx::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + WAVEFORMATEX::nAvgBytesPerSec=averageBytesPerSecond; +} + +inline +WORD WaveFormatEx::blockAlign(void)const +{ + return WAVEFORMATEX::nBlockAlign; +} + +inline +void WaveFormatEx::blockAlign(WORD blockAlign) +{ + WAVEFORMATEX::nBlockAlign=blockAlign; +} + +inline +WORD WaveFormatEx::bitsPerSample(void)const +{ + return WAVEFORMATEX::wBitsPerSample; +} + +inline +void WaveFormatEx::bitsPerSample(WORD bitsPerSample) +{ + WAVEFORMATEX::wBitsPerSample=bitsPerSample; +} + +inline +WORD WaveFormatEx::size(void)const +{ + return WAVEFORMATEX::cbSize; +} + +inline +void WaveFormatEx::size(WORD size) +{ + WAVEFORMATEX::cbSize=size; +} + +inline +WaveFormatEx::operator WAVEFORMATEX &(void)const +{ + return *((WAVEFORMATEX*)this); +} + +inline +WaveFormatEx &WaveFormatEx::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} +#endif \ No newline at end of file diff --git a/sample/hold/WAVEFORM.HPP b/sample/hold/WAVEFORM.HPP new file mode 100644 index 0000000..43ddd73 --- /dev/null +++ b/sample/hold/WAVEFORM.HPP @@ -0,0 +1,143 @@ +#ifndef _SAMPLE_WAVEFORMAT_HPP_ +#define _SAMPLE_WAVEFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormat : private WAVEFORMAT +{ +public: + enum FormatType{PulseCodeModulation=WAVE_FORMAT_PCM}; + WaveFormat(void); + WaveFormat(const WaveFormat &someWaveFormat); + WaveFormat(const FormatChunk &someFormatChunk); + virtual ~WaveFormat(); + WaveFormat &operator=(const WaveFormat &someWaveFormat); + WaveFormat &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplePerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + operator WAVEFORMAT &(void)const; +private: +}; + +inline +WaveFormat::WaveFormat(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveFormat::WaveFormat(const WaveFormat &someWaveFormat) +{ + *this=someWaveFormat; +} + +inline +WaveFormat::WaveFormat(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormat::~WaveFormat() +{ +} + +inline +WaveFormat &WaveFormat::operator=(const WaveFormat &someWaveFormat) +{ + ::memcpy(this,&someWaveFormat,sizeof(*this)); + return *this; +} + +inline +WORD WaveFormat::formatTag(void)const +{ + return WAVEFORMAT::wFormatTag; +} + +inline +void WaveFormat::formatTag(WORD formatTag) +{ + WAVEFORMAT::wFormatTag=formatTag; +} + +inline +WORD WaveFormat::channels(void)const +{ + return WAVEFORMAT::nChannels; +} + +inline +void WaveFormat::channels(WORD channels) +{ + WAVEFORMAT::nChannels=channels; +} + +inline +DWORD WaveFormat::samplePerSecond(void)const +{ + return WAVEFORMAT::nSamplesPerSec; +} + +inline +void WaveFormat::samplesPerSecond(DWORD samplesPerSecond) +{ + WAVEFORMAT::nSamplesPerSec=samplesPerSecond; +} + +inline +DWORD WaveFormat::averageBytesPerSecond(void)const +{ + return WAVEFORMAT::nAvgBytesPerSec; +} + +inline +void WaveFormat::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + WAVEFORMAT::nAvgBytesPerSec=averageBytesPerSecond; +} + +inline +WORD WaveFormat::blockAlign(void)const +{ + return WAVEFORMAT::nBlockAlign; +} + +inline +void WaveFormat::blockAlign(WORD blockAlign) +{ + WAVEFORMAT::nBlockAlign=blockAlign; +} + +inline +WaveFormat::operator WAVEFORMAT &(void)const +{ + return *((WAVEFORMAT*)this); +} + +inline +WaveFormat &WaveFormat::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + return *this; +} +#endif diff --git a/sample/hold/WAVEHDR.HPP b/sample/hold/WAVEHDR.HPP new file mode 100644 index 0000000..2222892 --- /dev/null +++ b/sample/hold/WAVEHDR.HPP @@ -0,0 +1,97 @@ +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#define _SAMPLE_WAVEHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class WaveHeader : private WAVEHDR +{ +public: + WaveHeader(void); + WaveHeader(const WaveHeader &someWaveHeader); + ~WaveHeader(); + WaveHeader &operator=(const WaveHeader &someWaveHeader); + WORD operator==(const WaveHeader &someWaveHeader); + void setData(LPSTR lpData); + void setBufferLength(DWORD bufferLength); + void userData(DWORD userData); + DWORD userData(void)const; +// operator WAVEHDR &(void)const; +private: + void initHeader(void); +}; + +inline +WaveHeader::WaveHeader(void) +{ + initHeader(); +} + +inline +WaveHeader::WaveHeader(const WaveHeader &someWaveHeader) +{ + *this=someWaveHeader; +} + +inline +WaveHeader::~WaveHeader() +{ +} + +inline +void WaveHeader::initHeader(void) +{ + ::memset(&((WAVEHDR&)*this),0,sizeof(WAVEHDR)); +} + +inline +void WaveHeader::setData(LPSTR lpData) +{ + WAVEHDR::lpData=lpData; +} + +inline +void WaveHeader::setBufferLength(DWORD bufferLength) +{ + WAVEHDR::dwBufferLength=bufferLength; +} + +inline +void WaveHeader::userData(DWORD userData) +{ + WAVEHDR::dwUser=userData; +} + +inline +DWORD WaveHeader::userData(void)const +{ + return WAVEHDR::dwUser; +} + +inline +WaveHeader &WaveHeader::operator=(const WaveHeader &someWaveHeader) +{ + initHeader(); + setData(someWaveHeader.WAVEHDR::lpData); + setBufferLength(someWaveHeader.WAVEHDR::dwBufferLength); + return *this; +} + +inline +WORD WaveHeader::operator==(const WaveHeader &someWaveHeader) +{ + return FALSE; +} + +#if 0 +inline +WaveHeader::operator WAVEHDR &(void)const +{ + return *((WAVEHDR*)this); +} +#endif +#endif + diff --git a/sample/hold/WAVEIN.CPP b/sample/hold/WAVEIN.CPP new file mode 100644 index 0000000..c956d70 --- /dev/null +++ b/sample/hold/WAVEIN.CPP @@ -0,0 +1,35 @@ +#include + +WORD WaveInDevice::openDevice(WaveFormatPCM &/*waveFormatPCM*/) +{ + return FALSE; +} + +WORD WaveInDevice::closeDevice(void) +{ + return FALSE; +} + +WORD WaveInDevice::record(WaveForm &/*waveForm*/) +{ + return FALSE; +} + +// virtuals + +void WaveInDevice::openHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::closeHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::doneHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::message(const String &strErrorMessage)const +{ + ::OutputDebugString((String&)strErrorMessage+String("\n")); +} diff --git a/sample/hold/WAVEIN.HPP b/sample/hold/WAVEIN.HPP new file mode 100644 index 0000000..d7a2b05 --- /dev/null +++ b/sample/hold/WAVEIN.HPP @@ -0,0 +1,76 @@ +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#define _SAMPLE_WAVEINDEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINCAPS_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveInDevice : public DeviceHandler +{ +public: + WaveInDevice(UINT waveDeviceID,Window &windowHandler); + WaveInDevice(const WaveInDevice &someWaveInDevice); + virtual ~WaveInDevice(); + WaveInDevice &operator=(const WaveInDevice &someWaveInDevice); + WORD record(WaveForm &waveForm); +protected: + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; +private: + WORD openDevice(WaveFormatPCM &waveFormatPCM); + WORD closeDevice(void); + UINT mWaveDeviceID; + GlobalData mGlobalWaveHeader; + WaveInCaps mWaveInCaps; + HWAVEIN mhWaveIn; + Window &mWindowHandler; +}; + +inline +WaveInDevice::WaveInDevice(UINT waveDeviceID,Window &windowHandler) +: mWaveDeviceID(waveDeviceID), mhWaveIn(0), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWindowHandler(windowHandler), DeviceHandler(windowHandler) +{ + ::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps)); +} + +inline +WaveInDevice::WaveInDevice(const WaveInDevice &someWaveInDevice) +: mWaveDeviceID(someWaveInDevice.mWaveDeviceID), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mhWaveIn(0), mWindowHandler(someWaveInDevice.mWindowHandler), DeviceHandler(someWaveInDevice.mWindowHandler) +{ + *this=someWaveInDevice; +} + +inline +WaveInDevice &WaveInDevice::operator=(const WaveInDevice &someWaveInDevice) +{ + mWaveInCaps=someWaveInDevice.mWaveInCaps; + return *this; +} + +inline +WaveInDevice::~WaveInDevice() +{ + closeDevice(); +} +#endif diff --git a/sample/hold/WAVEOUT.CPP b/sample/hold/WAVEOUT.CPP new file mode 100644 index 0000000..ede6826 --- /dev/null +++ b/sample/hold/WAVEOUT.CPP @@ -0,0 +1,140 @@ +#include + +WaveOutDevice::WaveOutDevice(UINT waveDeviceID,Window &windowHandler) +: mWaveDeviceID(waveDeviceID), mhWaveOut(0), + mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWindowHandler(windowHandler), DeviceHandler(windowHandler), + mDisposition(InClose) +{ + ::waveOutGetDevCaps(mWaveDeviceID,&((WAVEOUTCAPS&)mWaveOutCaps),sizeof(mWaveOutCaps)); +} + +WaveOutDevice::WaveOutDevice(const WaveOutDevice &someWaveOutDevice) +: mWindowHandler(someWaveOutDevice.mWindowHandler), mhWaveOut(0), + mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWaveDeviceID(someWaveOutDevice.mWaveDeviceID), + DeviceHandler(someWaveOutDevice.mWindowHandler), + mDisposition(someWaveOutDevice.mDisposition) +{ + *this=someWaveOutDevice; +} + +WaveOutDevice::~WaveOutDevice() +{ + closeDevice(); +} + +WaveOutDevice &WaveOutDevice::operator=(const WaveOutDevice &someWaveOutDevice) +{ + mWaveOutCaps=someWaveOutDevice.mWaveOutCaps; + return *this; +} + +BOOL WaveOutDevice::openDevice(WaveFormatPCM &waveFormatPCM) +{ + MMRESULT mmResult; + + closeDevice(); + mmResult=::waveOutOpen(&mhWaveOut,mWaveDeviceID,(LPWAVEFORMATEX)&waveFormatPCM,(UINT)((HWND)mWindowHandler),0L,WAVE_ALLOWSYNC|CALLBACK_WINDOW); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InOpen; + return TRUE; +} + +BOOL WaveOutDevice::closeDevice(void) +{ + MMRESULT mmResult; + + if(!mhWaveOut||InClose==mDisposition)return TRUE; + if(InPlay==mDisposition) + { + mmResult=::waveOutReset(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + } + while(InPlay==mDisposition)mWindowHandler.yieldTask(); + mmResult=::waveOutClose(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InClose; + mhWaveOut=0; + return TRUE; +} + +BOOL WaveOutDevice::pause(void) +{ + MMRESULT mmResult; + + if(InPlay!=mDisposition)return FALSE; + if(0!=(mmResult=::waveOutPause(mhWaveOut))){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPause; + return TRUE; +} + +BOOL WaveOutDevice::restart(void) +{ + MMRESULT mmResult; + + if(InPause!=mDisposition)return FALSE; + if(0!=(mmResult=::waveOutRestart(mhWaveOut))){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPlay; + return TRUE; +} + +BOOL WaveOutDevice::play(WaveForm &someWaveForm,DeviceHandler::PlayMode playMode) +{ + MMRESULT mmResult; + WaveFormatPCM waveFormatPCM((FormatChunk&)someWaveForm); + if(WaveFormatEx::PulseCodeModulation!=waveFormatPCM.formatTag()){genericErrorMessage(InvalidFormat);return FALSE;} + if(!openDevice(waveFormatPCM))return FALSE; + ((WaveHeader*)&mGlobalWaveHeader[0])->setData((char*)(((PureSample&)someWaveForm).sampleData())); + ((WaveHeader*)&mGlobalWaveHeader[0])->setBufferLength(((PureSample&)someWaveForm).numSamples()); + ((WaveHeader*)&mGlobalWaveHeader[0])->userData((DWORD)this); + mmResult=::waveOutPrepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutWrite(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPlay; + if(mmResult){mmSystemErrorMessage(mmResult);unprepareHeader();return FALSE;} + if(DeviceHandler::Wait==playMode) + { + while(InPlay==mDisposition)mWindowHandler.yieldTask(); + closeDevice(); + } + return TRUE; +} + +void WaveOutDevice::unprepareHeader(void) +{ + if(!mhWaveOut){genericErrorMessage(DeviceHandler::InvalidDeviceHandle);return;} + if(!mGlobalWaveHeader.isOkay()){genericErrorMessage(DeviceHandler::InvalidHeader);return;} + ::waveOutUnprepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WaveHeader)); +} + +// virtuals + +void WaveOutDevice::openHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void WaveOutDevice::closeHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void WaveOutDevice::doneHandler(CallbackData &someCallbackData) +{ + WaveHeader &waveHeader=(*((WaveHeader*)someCallbackData.lParam())); + + if(waveHeader.userData()==(DWORD)this) + { + unprepareHeader(); + mDisposition=InIdle; + } + return; +} + +void WaveOutDevice::message(const String &strErrorMessage)const +{ + ::OutputDebugString((String&)strErrorMessage+String("\n")); +} + diff --git a/sample/hold/WAVEOUT.HPP b/sample/hold/WAVEOUT.HPP new file mode 100644 index 0000000..3d408a7 --- /dev/null +++ b/sample/hold/WAVEOUT.HPP @@ -0,0 +1,52 @@ +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#define _SAMPLE_WAVEOUTDEVICE_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTCAPS_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveOutDevice : public DeviceHandler +{ +public: + WaveOutDevice(UINT waveDeviceID,Window &windowHander); + WaveOutDevice(const WaveOutDevice &someWaveOutDevice); + virtual ~WaveOutDevice(); + WaveOutDevice &operator=(const WaveOutDevice &someWaveOutDevice); + BOOL play(WaveForm &waveForm,DeviceHandler::PlayMode playMode=DeviceHandler::NoWait); + BOOL pause(void); + BOOL restart(void); +protected: + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; +private: + enum Disposition{InPause,InPlay,InClose,InOpen,InIdle}; + BOOL openDevice(WaveFormatPCM &waveFormatPCM); + BOOL closeDevice(void); + void unprepareHeader(void); + WaveOutCaps mWaveOutCaps; + Window &mWindowHandler; + UINT mWaveDeviceID; + GlobalData mGlobalWaveHeader; + HWAVEOUT mhWaveOut; + Disposition mDisposition; +}; +#endif diff --git a/sample/hold/fmtchnk.cpp b/sample/hold/fmtchnk.cpp new file mode 100644 index 0000000..276b081 --- /dev/null +++ b/sample/hold/fmtchnk.cpp @@ -0,0 +1,56 @@ +#include + +FormatChunk &FormatChunk::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} + +MemFile &FormatChunk::operator>>(MemFile &someMemFile)const +{ + mChunkID>>someMemFile; + someMemFile.write((char*)&mSize,sizeof(mSize)); + someMemFile.write((char*)&mFormatTag,sizeof(mFormatTag)); + someMemFile.write((char*)&mChannels,sizeof(mChannels)); + someMemFile.write((char*)&mSamplesPerSecond,sizeof(mSamplesPerSecond)); + someMemFile.write((char*)&mAvgBytesPerSecond,sizeof(mAvgBytesPerSecond)); + someMemFile.write((char*)&mBlockAlign,sizeof(mBlockAlign)); + someMemFile.write((char*)&mBitsPerSample,sizeof(mBitsPerSample)); + if(mSize==sizeof(mFormatTag)+sizeof(mChannels)+sizeof(mSamplesPerSecond)+sizeof(mAvgBytesPerSecond)+sizeof(mBlockAlign)+sizeof(mBitsPerSample)+sizeof(mExtraInfo))someMemFile.write((char*)&mExtraInfo,sizeof(mExtraInfo)); + return someMemFile; +} + +FileHandle &FormatChunk::operator<<(FileHandle &someFileHandle) +{ + mChunkID<"); + strChunk+=mChunkID.toString(); + strChunk+=String(" Size=")+String().fromInt(mSize).quotes(); + strChunk+=String(" FormatTag=")+String().fromInt(mFormatTag).quotes(); + strChunk+=String(" Channels=")+String().fromInt(mChannels).quotes(); + strChunk+=String(" SamplesPerSecond=")+String().fromInt(mSamplesPerSecond).quotes(); + strChunk+=String(" AvgBytesPerSecond=")+String().fromInt(mAvgBytesPerSecond).quotes(); + strChunk+=String(" BlockAlign=")+String().fromInt(mBlockAlign).quotes(); + strChunk+=String(" BitsPerSample=")+String().fromInt(mBitsPerSample).quotes(); + strChunk+=String(" ExtraInfo=")+String().fromInt(mExtraInfo).quotes()+String(""); + return strChunk; +} diff --git a/sample/holdii/ChunkID.hpp b/sample/holdii/ChunkID.hpp new file mode 100644 index 0000000..db27f7b --- /dev/null +++ b/sample/holdii/ChunkID.hpp @@ -0,0 +1,121 @@ +#ifndef _SAMPLE_CHUNKID_HPP_ +#define _SAMPLE_CHUNKID_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif + +class ChunkID +{ +public: + ChunkID(void); + ChunkID(const ChunkID &someChunkID); + virtual ~ChunkID(); + ChunkID &operator=(const ChunkID &someChunkID); + ChunkID &operator=(String chunkIDString); + WORD operator==(const ChunkID &someChunkID)const; + WORD operator==(const String &chunkIDString)const; + MemFile &ChunkID::operator>>(MemFile &someMemFile)const; + FileHandle &ChunkID::operator<<(FileHandle &someFileHandle); + String chunkID(void)const; + WORD size(void)const; + String toString(void)const; +private: + enum {MaxLength=4}; + void initChunk(void); + + char mChunkID[MaxLength]; +}; + +inline +ChunkID::ChunkID(void) +{ + initChunk(); +} + +inline +ChunkID::ChunkID(const ChunkID &someChunkID) +{ + initChunk(); + *this=someChunkID; +} + +inline +ChunkID::~ChunkID() +{ +} + +inline +ChunkID &ChunkID::operator=(const ChunkID &someChunkID) +{ + ::memcpy(mChunkID,someChunkID.mChunkID,sizeof(mChunkID)); + return *this; +} + +inline +ChunkID &ChunkID::operator=(String chunkIDString) +{ + if(chunkIDString.length()>sizeof(mChunkID))chunkIDString.length(sizeof(mChunkID)); + return *this; +} + +inline +WORD ChunkID::operator==(const ChunkID &someChunkID)const +{ + return (!::memcmp(mChunkID,someChunkID.mChunkID,sizeof(mChunkID))?TRUE:FALSE); +} + +inline +WORD ChunkID::operator==(const String &chunkIDString)const +{ + return chunkID()==chunkIDString; +} + +inline +MemFile &ChunkID::operator>>(MemFile &someMemFile)const +{ + someMemFile.write((char*)mChunkID,sizeof(mChunkID)); + return someMemFile; +} + +inline +FileHandle &ChunkID::operator<<(FileHandle &someFileHandle) +{ + someFileHandle.read((BYTE*)mChunkID,sizeof(mChunkID)); + return someFileHandle; +} + +inline +String ChunkID::chunkID(void)const +{ + String chunkString; + ::memcpy(chunkString,mChunkID,sizeof(mChunkID)); + return chunkString; +} + +inline +WORD ChunkID::size(void)const +{ + return sizeof(mChunkID); +} + +inline +void ChunkID::initChunk(void) +{ + ::memset(mChunkID,0,sizeof(mChunkID)); +} + +inline +String ChunkID::toString(void)const +{ + return String(" ChunkID=")+String(mChunkID).quotes()+String(""); +} +#endif diff --git a/sample/holdii/DataChnk.cpp b/sample/holdii/DataChnk.cpp new file mode 100644 index 0000000..8a47404 --- /dev/null +++ b/sample/holdii/DataChnk.cpp @@ -0,0 +1,8 @@ +#include + +FileHandle &DataChunk::operator<<(FileHandle &someFileHandle) +{ + mChunkID< +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class DataChunk +{ +public: + DataChunk(void); + virtual ~DataChunk(); + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + LONG length(void)const; + void length(LONG length); + DWORD size(void)const; + String toString(void)const; +private: + void initChunk(void); + ChunkID mChunkID; + LONG mLengthData; +}; + +inline +DataChunk::DataChunk(void) +{ + initChunk(); +} + +inline +DataChunk::~DataChunk() +{ +} + +inline +LONG DataChunk::length(void)const +{ + return mLengthData; +} + +inline +void DataChunk::length(LONG length) +{ + mLengthData=length; +} + +inline +MemFile &DataChunk::operator>>(MemFile &someMemFile)const +{ + mChunkID>>someMemFile; + someMemFile.write((char*)&mLengthData,sizeof(mLengthData)); + return someMemFile; +} + +inline +DWORD DataChunk::size(void)const +{ + return mChunkID.size()+sizeof(DWORD); +} + +inline +void DataChunk::initChunk(void) +{ + mChunkID=String("data"); + return; +} + +inline +String DataChunk::toString(void)const +{ + String strDataChunk; + strDataChunk+=String(""); + strDataChunk+=mChunkID.toString(); + strDataChunk+=String(" LengthData=")+String().fromInt(mLengthData).quotes(); + strDataChunk+=String(""); + return strDataChunk; +} +#endif + diff --git a/sample/holdii/DevHndlr.cpp b/sample/holdii/DevHndlr.cpp new file mode 100644 index 0000000..a10c60a --- /dev/null +++ b/sample/holdii/DevHndlr.cpp @@ -0,0 +1,77 @@ +#include +#include + +void DeviceHandler::insertHandlers(void) +{ + mWindowHandler.insertHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.insertHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.insertHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void DeviceHandler::removeHandlers(void) +{ + mWindowHandler.removeHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.removeHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.removeHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void DeviceHandler::mmSystemErrorMessage(MMRESULT mmResult)const +{ + String errorString; + ::waveOutGetErrorText(mmResult,(LPSTR)errorString,String::MaxString); + message(errorString); +} + +void DeviceHandler::genericErrorMessage(ErrorCode errorCode)const +{ + if(errorCode==InvalidFormat)message("Invalid Format."); + else if(errorCode==InvalidDeviceHandle)message("Invalid Device Handle."); + else if(errorCode==InvalidHeader)message("Invalid Header."); + else message("Unknown Error."); + return; +} + +WORD DeviceHandler::operator==(const DeviceHandler &/*someDeviceHandler*/)const +{ + return FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmOpenHandler(CallbackData &someCallbackData) +{ + openHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmCloseHandler(CallbackData &someCallbackData) +{ + closeHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType DeviceHandler::mmDoneHandler(CallbackData &someCallbackData) +{ + doneHandler(someCallbackData); + return (CallbackData::ReturnType)FALSE; +} + +// virtuals + +void DeviceHandler::openHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::closeHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::doneHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void DeviceHandler::message(const String &strErrorMessage)const +{ + ::MessageBox(::GetFocus(),(LPSTR)(String&)strErrorMessage,(LPSTR)"DeviceHandler",MB_OK); +} diff --git a/sample/holdii/DevHndlr.hpp b/sample/holdii/DevHndlr.hpp new file mode 100644 index 0000000..0b3454e --- /dev/null +++ b/sample/holdii/DevHndlr.hpp @@ -0,0 +1,70 @@ +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#define _SAMPLE_DEVICEHANDLER_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class DeviceHandler +{ +public: + enum PlayMode{Wait,NoWait}; + DeviceHandler(Window &windowHandler); + DeviceHandler(const DeviceHandler &someDeviceHandler); + virtual ~DeviceHandler(); + WORD operator==(const DeviceHandler &someDeviceHandler)const; + DeviceHandler &operator=(const DeviceHandler &someDeviceHandler); +protected: + enum ErrorCode{InvalidFormat,InvalidDeviceHandle,InvalidHeader}; + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; + void mmSystemErrorMessage(MMRESULT mmResult)const; + void genericErrorMessage(ErrorCode errorCode)const; +private: + void insertHandlers(void); + void removeHandlers(void); + CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData); + Callback mMMOpenHandler; + Callback mMMCloseHandler; + Callback mMMDoneHandler; + Window &mWindowHandler; +}; + +inline +DeviceHandler::DeviceHandler(Window &windowHandler) +: mWindowHandler(windowHandler) +{ + mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); + mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); + mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); + insertHandlers(); +} + +inline +DeviceHandler::DeviceHandler(const DeviceHandler &someDeviceHandler) +: mWindowHandler(someDeviceHandler.mWindowHandler) +{ + mMMOpenHandler.setCallback(this,&DeviceHandler::mmOpenHandler); + mMMCloseHandler.setCallback(this,&DeviceHandler::mmCloseHandler); + mMMDoneHandler.setCallback(this,&DeviceHandler::mmDoneHandler); + insertHandlers(); +} + +inline +DeviceHandler::~DeviceHandler() +{ + removeHandlers(); +} + +inline +DeviceHandler &DeviceHandler::operator=(const DeviceHandler &/*someDeviceHandler*/) +{ + return *this; +} +#endif diff --git a/sample/holdii/Device.cpp b/sample/holdii/Device.cpp new file mode 100644 index 0000000..71b04dc --- /dev/null +++ b/sample/holdii/Device.cpp @@ -0,0 +1,126 @@ +#include +#include + +WaveDevice::WaveDevice(UINT waveDeviceID,DeviceType waveDeviceType,Window &windowHandler) +: mMMOpenHandler(this,&WaveDevice::mmOpenHandler), + mMMCloseHandler(this,&WaveDevice::mmCloseHandler), + mMMDoneHandler(this,&WaveDevice::mmDoneHandler), + mWaveDeviceID(waveDeviceID), mDeviceType(waveDeviceType), mWindowHandler(windowHandler), + mhWaveOut(0), mGlobalWaveHeader(1,GMEM_MOVEABLE) +{ + getDeviceCapabilities(); + insertHandlers(); +} + +WaveDevice::WaveDevice(const WaveDevice &someWaveDevice) +: mMMOpenHandler(this,&WaveDevice::mmOpenHandler), + mMMCloseHandler(this,&WaveDevice::mmCloseHandler), + mMMDoneHandler(this,&WaveDevice::mmDoneHandler), + mWindowHandler(someWaveDevice.mWindowHandler), + mhWaveOut(0), mGlobalWaveHeader(1,GMEM_MOVEABLE) +{ + insertHandlers(); + *this=someWaveDevice; +} + +WaveDevice::~WaveDevice() +{ + closeDevice(); + removeHandlers(); +} + +WORD WaveDevice::openDevice(WaveFormatPCM &waveFormatPCM) +{ + MMRESULT mmResult; + closeDevice(); + mmResult=::waveOutOpen(&mhWaveOut,mWaveDeviceID,(LPWAVEFORMAT)&waveFormatPCM,(UINT)((HWND)mWindowHandler),0L,WAVE_ALLOWSYNC|CALLBACK_WINDOW); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + return TRUE; +} + +WORD WaveDevice::closeDevice(void) +{ + MMRESULT mmResult; + + if(!mhWaveOut)return FALSE; + mmResult=::waveOutReset(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutClose(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mhWaveOut=0; + return TRUE; +} + +WaveDevice &WaveDevice::operator=(const WaveDevice &someWaveDevice) +{ + mWaveDeviceID=someWaveDevice.mWaveDeviceID; + mDeviceType=someWaveDevice.mDeviceType; + mWaveInCaps=someWaveDevice.mWaveInCaps; + mWaveOutCaps=someWaveDevice.mWaveOutCaps; + return *this; +} + +void WaveDevice::insertHandlers(void) +{ + mWindowHandler.insertHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.insertHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.insertHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +void WaveDevice::removeHandlers(void) +{ + mWindowHandler.removeHandler(VectorHandler::MMOpenHandler,&mMMOpenHandler); + mWindowHandler.removeHandler(VectorHandler::MMCloseHandler,&mMMCloseHandler); + mWindowHandler.removeHandler(VectorHandler::MMDoneHandler,&mMMDoneHandler); +} + +WORD WaveDevice::play(WaveForm &someWaveForm,PlayMode playMode) +{ + MMRESULT mmResult; + WaveFormatPCM waveFormatPCM((FormatChunk&)someWaveForm); + if(WaveFormat::PulseCodeModulation!=waveFormatPCM.formatTag()){genericErrorMessage(InvalidFormat);return FALSE;} + if(!openDevice(waveFormatPCM))return FALSE; + ((WaveHeader*)mGlobalWaveHeader)->setData((char*)(((PureSample&)someWaveForm).sampleData())); + ((WaveHeader*)mGlobalWaveHeader)->setBufferLength(((PureSample&)someWaveForm).numSamples()); + ((WaveHeader*)mGlobalWaveHeader)->userData((DWORD)this); + mmResult=::waveOutPrepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)mGlobalWaveHeader),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutWrite(mhWaveOut,(WAVEHDR*)((WaveHeader*)mGlobalWaveHeader),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + if(Wait==playMode){while(mhWaveOut)yieldTask();} + return TRUE; +} + +void WaveDevice::yieldTask(void)const +{ + MSG msg; + + if(::PeekMessage(&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } +} + +CallbackData::ReturnType WaveDevice::mmOpenHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WaveDevice::mmCloseHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType WaveDevice::mmDoneHandler(CallbackData &someCallbackData) +{ + WaveHeader &waveHeader(*((WaveHeader*)someCallbackData.lParam())); + + if(waveHeader.userData()==(DWORD)this) + { + ::waveOutUnprepareHeader((HWAVEOUT)someCallbackData.wParam(),(LPWAVEHDR)someCallbackData.lParam(),sizeof(WAVEHDR)); + closeDevice(); + } + return (CallbackData::ReturnType)FALSE; +} + diff --git a/sample/holdii/Device.hpp b/sample/holdii/Device.hpp new file mode 100644 index 0000000..d7cb47f --- /dev/null +++ b/sample/holdii/Device.hpp @@ -0,0 +1,118 @@ +#ifndef _SAMPLE_DEVICE_HPP_ +#define _SAMPLE_DEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveDevice +{ +public: + enum DeviceType{InputDevice,OutputDevice,InvalidDevice}; + enum PlayMode{Wait,NoWait}; + WaveDevice(UINT waveDeviceID,DeviceType waveDeviceType,Window &windowHandler); + WaveDevice(const WaveDevice &someWaveDevice); + ~WaveDevice(); + WORD play(WaveForm &waveForm,PlayMode playMode=NoWait); + WORD operator==(const WaveDevice &someWaveDevice)const; + WaveDevice &operator=(const WaveDevice &someWaveDevice); + void waveDeviceID(UINT deviceID); + UINT waveDeviceID(void)const; + void waveDeviceType(DeviceType waveDeviceType); + DeviceType waveDeviceType(void)const; +private: + enum ErrorCode{InvalidFormat}; + void yieldTask(void)const; + void getDeviceCapabilities(void); + void insertHandlers(void); + void removeHandlers(void); + void mmSystemErrorMessage(MMRESULT mmResult)const; + void genericErrorMessage(ErrorCode errorCode)const; + WORD closeDevice(void); + WORD openDevice(WaveFormatPCM &waveFormatPCM); + CallbackData::ReturnType mmOpenHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmCloseHandler(CallbackData &someCallbackData); + CallbackData::ReturnType mmDoneHandler(CallbackData &someCallbackData); + Callback mMMOpenHandler; + Callback mMMCloseHandler; + Callback mMMDoneHandler; + UINT mWaveDeviceID; + DeviceType mDeviceType; + WaveInCaps mWaveInCaps; + WaveOutCaps mWaveOutCaps; + HWAVEOUT mhWaveOut; + GlobalData mGlobalWaveHeader; + Window &mWindowHandler; +}; + +inline +void WaveDevice::waveDeviceID(UINT deviceID) +{ + mWaveDeviceID=deviceID; + getDeviceCapabilities(); +} + +inline +UINT WaveDevice::waveDeviceID(void)const +{ + return mWaveDeviceID; +} + +inline +void WaveDevice::waveDeviceType(DeviceType waveDeviceType) +{ + mDeviceType=waveDeviceType; + getDeviceCapabilities(); +} + +inline +WaveDevice::DeviceType WaveDevice::waveDeviceType(void)const +{ + return mDeviceType; +} + +inline +void WaveDevice::getDeviceCapabilities(void) +{ + if(mDeviceType==InputDevice)::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps)); + else if(mDeviceType==OutputDevice)::waveOutGetDevCaps(mWaveDeviceID,&((WAVEOUTCAPS&)mWaveOutCaps),sizeof(mWaveOutCaps)); +} + +inline +WORD WaveDevice::operator==(const WaveDevice &someWaveDevice)const +{ + return (mDeviceType==someWaveDevice.mDeviceType&&mWaveDeviceID==someWaveDevice.mWaveDeviceID); +} + +inline +void WaveDevice::mmSystemErrorMessage(MMRESULT mmResult)const +{ + String errorString; + ::waveOutGetErrorText(mmResult,(LPSTR)errorString,String::MaxString); + ::MessageBox(::GetFocus(),(LPSTR)errorString,(LPSTR)"WaveDevice",MB_OK); +} + +inline +void WaveDevice::genericErrorMessage(ErrorCode errorCode)const +{ + if(errorCode==InvalidFormat)::MessageBox(::GetFocus(),(LPSTR)"Invalid Format.",(LPSTR)"WaveDevice",MB_OK); + return; +} +#endif diff --git a/sample/holdii/FmtChnk.cpp b/sample/holdii/FmtChnk.cpp new file mode 100644 index 0000000..276b081 --- /dev/null +++ b/sample/holdii/FmtChnk.cpp @@ -0,0 +1,56 @@ +#include + +FormatChunk &FormatChunk::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} + +MemFile &FormatChunk::operator>>(MemFile &someMemFile)const +{ + mChunkID>>someMemFile; + someMemFile.write((char*)&mSize,sizeof(mSize)); + someMemFile.write((char*)&mFormatTag,sizeof(mFormatTag)); + someMemFile.write((char*)&mChannels,sizeof(mChannels)); + someMemFile.write((char*)&mSamplesPerSecond,sizeof(mSamplesPerSecond)); + someMemFile.write((char*)&mAvgBytesPerSecond,sizeof(mAvgBytesPerSecond)); + someMemFile.write((char*)&mBlockAlign,sizeof(mBlockAlign)); + someMemFile.write((char*)&mBitsPerSample,sizeof(mBitsPerSample)); + if(mSize==sizeof(mFormatTag)+sizeof(mChannels)+sizeof(mSamplesPerSecond)+sizeof(mAvgBytesPerSecond)+sizeof(mBlockAlign)+sizeof(mBitsPerSample)+sizeof(mExtraInfo))someMemFile.write((char*)&mExtraInfo,sizeof(mExtraInfo)); + return someMemFile; +} + +FileHandle &FormatChunk::operator<<(FileHandle &someFileHandle) +{ + mChunkID<"); + strChunk+=mChunkID.toString(); + strChunk+=String(" Size=")+String().fromInt(mSize).quotes(); + strChunk+=String(" FormatTag=")+String().fromInt(mFormatTag).quotes(); + strChunk+=String(" Channels=")+String().fromInt(mChannels).quotes(); + strChunk+=String(" SamplesPerSecond=")+String().fromInt(mSamplesPerSecond).quotes(); + strChunk+=String(" AvgBytesPerSecond=")+String().fromInt(mAvgBytesPerSecond).quotes(); + strChunk+=String(" BlockAlign=")+String().fromInt(mBlockAlign).quotes(); + strChunk+=String(" BitsPerSample=")+String().fromInt(mBitsPerSample).quotes(); + strChunk+=String(" ExtraInfo=")+String().fromInt(mExtraInfo).quotes()+String(""); + return strChunk; +} diff --git a/sample/holdii/FmtChnk.hpp b/sample/holdii/FmtChnk.hpp new file mode 100644 index 0000000..4a3d577 --- /dev/null +++ b/sample/holdii/FmtChnk.hpp @@ -0,0 +1,166 @@ +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#define _SAMPLE_FORMATCHUNK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_FILEIO_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class FormatChunk +{ +public: + enum {WaveFormatPCM=0x01,NumChannels=0x01,BlockAlign=0x01,BitsPerSample=0x08}; + FormatChunk(void); + FormatChunk(const FormatChunk &someFormatChunk); + virtual ~FormatChunk(); + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + FormatChunk &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplesPerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); + WORD size(void)const; + String toString(void)const; +private: + void initChunk(void); + ChunkID mChunkID; + DWORD mSize; + WORD mFormatTag; + WORD mChannels; + DWORD mSamplesPerSecond; + DWORD mAvgBytesPerSecond; + WORD mBlockAlign; + WORD mBitsPerSample; + WORD mExtraInfo; +}; + +inline +FormatChunk::FormatChunk(void) +: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0), + mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0), mExtraInfo(0) +{ + initChunk(); +} + +inline +FormatChunk::FormatChunk(const FormatChunk &someFormatChunk) +: mSize(0), mFormatTag(WaveFormatPCM), mChannels(NumChannels), mSamplesPerSecond(0), + mAvgBytesPerSecond(0), mBlockAlign(BlockAlign), mBitsPerSample(0), mExtraInfo(0) +{ + initChunk(); + *this=someFormatChunk; +} + +inline +FormatChunk::~FormatChunk() +{ +} + +inline +WORD FormatChunk::formatTag(void)const +{ + return mFormatTag; +} + +inline +void FormatChunk::formatTag(WORD formatTag) +{ + mFormatTag=formatTag; +} + +inline +WORD FormatChunk::channels(void)const +{ + return mChannels; +} + +inline +void FormatChunk::channels(WORD channels) +{ + mChannels=channels; +} + +inline +DWORD FormatChunk::samplesPerSecond(void)const +{ + return mSamplesPerSecond; +} + +inline +void FormatChunk::samplesPerSecond(DWORD samplesPerSecond) +{ + mSamplesPerSecond=samplesPerSecond; +} + +inline +DWORD FormatChunk::averageBytesPerSecond(void)const +{ + return mAvgBytesPerSecond; +} + +inline +void FormatChunk::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + mAvgBytesPerSecond=averageBytesPerSecond; +} + +inline +WORD FormatChunk::blockAlign(void)const +{ + return mBlockAlign; +} + +inline +void FormatChunk::blockAlign(WORD blockAlign) +{ + mBlockAlign=blockAlign; +} + +inline +WORD FormatChunk::bitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +void FormatChunk::bitsPerSample(WORD bitsPerSample) +{ + mBitsPerSample=bitsPerSample; +} + +inline +WORD FormatChunk::size(void)const +{ + return mSize+mChunkID.size(); +} + +inline +void FormatChunk::initChunk(void) +{ + mChunkID=String("fmt "); + mSize=(mChunkID.size()+sizeof(mSize)+sizeof(mFormatTag)+sizeof(mChannels)+sizeof(mSamplesPerSecond)+ + sizeof(mAvgBytesPerSecond)+sizeof(mBlockAlign)+sizeof(mBitsPerSample))-(mChunkID.size()+sizeof(mSize)); +} +#endif diff --git a/sample/holdii/GenChnk.hpp b/sample/holdii/GenChnk.hpp new file mode 100644 index 0000000..3d212ab --- /dev/null +++ b/sample/holdii/GenChnk.hpp @@ -0,0 +1,100 @@ +#ifndef _SAMPLE_GENERICCHUNK_HPP_ +#define _SAMPLE_GENERICCHUNK_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _SAMPLE_CHUNKID_HPP_ +#include +#endif + +class GenericChunk : public GlobalData +{ +public: + GenericChunk(void); + GenericChunk(const GenericChunk &someGenericChunk); + virtual ~GenericChunk(); + GenericChunk &operator=(const GenericChunk &someGenericChunk); + WORD operator==(const GenericChunk &someGenericChunk)const; + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + const ChunkID &chunkID(void)const; + DWORD chunkLength(void)const; +private: + ChunkID mChunkID; +}; + +inline +GenericChunk::GenericChunk(void) +{ +} + +inline +GenericChunk::GenericChunk(const GenericChunk &someGenericChunk) +{ + *this=someGenericChunk; +} + +inline +GenericChunk::~GenericChunk() +{ +} + +inline +GenericChunk &GenericChunk::operator=(const GenericChunk &someGenericChunk) +{ + mChunkID=someGenericChunk.mChunkID; + return *this; +} + +inline +WORD GenericChunk::operator==(const GenericChunk &someGenericChunk)const +{ + return (mChunkID==someGenericChunk.mChunkID&& + (GlobalData&)*this==(GlobalData&)someGenericChunk); +} + +inline +MemFile &GenericChunk::operator>>(MemFile &someMemFile)const +{ + DWORD lengthData(size()); + + mChunkID>>someMemFile; + someMemFile.write((char*)&lengthData,sizeof(lengthData)); + someMemFile.write((char*)(BYTE*)&(((GlobalData&)*this).operator[](0)),lengthData); + return someMemFile; +} + +inline +FileHandle &GenericChunk::operator<<(FileHandle &someFileHandle) +{ + DWORD lengthData; + + mChunkID<&)*this),lengthData); + someFileHandle.read(&(((GlobalData&)*this).operator[](0)),lengthData); + return someFileHandle; +} + +inline +DWORD GenericChunk::chunkLength(void)const +{ + return mChunkID.size()+size()+sizeof(DWORD); +} + +inline +const ChunkID &GenericChunk::chunkID(void)const +{ + return mChunkID; +} +#endif diff --git a/sample/holdii/InCaps.hpp b/sample/holdii/InCaps.hpp new file mode 100644 index 0000000..3cbd35e --- /dev/null +++ b/sample/holdii/InCaps.hpp @@ -0,0 +1,95 @@ +#ifndef _SAMPLE_WAVEINCAPS_HPP_ +#define _SAMPLE_WAVEINCAPS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class WaveInCaps : private WAVEINCAPS +{ +public: + WaveInCaps(const WaveInCaps &someWaveInCaps); + WaveInCaps(void); + ~WaveInCaps(); + WaveInCaps &operator=(const WaveInCaps &someWaveInCaps); + operator WAVEINCAPS &(void); + UINT manufacturerID(void)const; + UINT productID(void)const; + WORD driverVersion(void)const; + String productName(void)const; + DWORD supportedFormats(void)const; + UINT channels(void)const; +private: +}; + +inline +WaveInCaps::WaveInCaps(const WaveInCaps &someWaveInCaps) +{ + *this=someWaveInCaps; +} + +inline +WaveInCaps::WaveInCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveInCaps::~WaveInCaps() +{ +} + +inline +UINT WaveInCaps::manufacturerID(void)const +{ + return WAVEINCAPS::wMid; +} + +inline +UINT WaveInCaps::productID(void)const +{ + return WAVEINCAPS::wPid; +} + +inline +WORD WaveInCaps::driverVersion(void)const +{ + return WAVEINCAPS::vDriverVersion; +} + +inline +String WaveInCaps::productName(void)const +{ + return String(WAVEINCAPS::szPname); +} + +inline +DWORD WaveInCaps::supportedFormats(void)const +{ + return WAVEINCAPS::dwFormats; +} + +inline +UINT WaveInCaps::channels(void)const +{ + return WAVEINCAPS::wChannels; +} + +inline +WaveInCaps::operator WAVEINCAPS &(void) +{ + return *((WAVEINCAPS*)this); +} + +inline +WaveInCaps &WaveInCaps::operator=(const WaveInCaps &someWaveInCaps) +{ + ::memcpy(this,&someWaveInCaps,sizeof(*this)); + return *this; +} +#endif diff --git a/sample/holdii/OutCaps.hpp b/sample/holdii/OutCaps.hpp new file mode 100644 index 0000000..cea9262 --- /dev/null +++ b/sample/holdii/OutCaps.hpp @@ -0,0 +1,103 @@ +#ifndef _SAMPLE_WAVEOUTCAPS_HPP_ +#define _SAMPLE_WAVEOUTCAPS_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class WaveOutCaps : private WAVEOUTCAPS +{ +public: + WaveOutCaps(void); + WaveOutCaps(const WaveOutCaps &someWaveOutCaps); + ~WaveOutCaps(); + WaveOutCaps &operator=(const WaveOutCaps &someWaveOutCaps); + operator WAVEOUTCAPS &(void)const; + UINT manufacturerID(void)const; + UINT productID(void)const; + MMVERSION driverVersion(void)const; + String productName(void)const; + DWORD supportedFormats(void)const; + WORD channels(void)const; + DWORD optionalSupport(void)const; +private: +}; + +inline +WaveOutCaps::WaveOutCaps(const WaveOutCaps &someWaveOutCaps) +{ + *this=someWaveOutCaps; +} + +inline +WaveOutCaps::WaveOutCaps(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveOutCaps::~WaveOutCaps() +{ +} + +inline +UINT WaveOutCaps::manufacturerID(void)const +{ + return WAVEOUTCAPS::wMid; +} + +inline +UINT WaveOutCaps::productID(void)const +{ + return WAVEOUTCAPS::wPid; +} + +inline +MMVERSION WaveOutCaps::driverVersion(void)const +{ + return WAVEOUTCAPS::vDriverVersion; +} + +inline +String WaveOutCaps::productName(void)const +{ + return WAVEOUTCAPS::szPname; +} + +inline +DWORD WaveOutCaps::supportedFormats(void)const +{ + return WAVEOUTCAPS::dwFormats; +} + +inline +WORD WaveOutCaps::channels(void)const +{ + return WAVEOUTCAPS::wChannels; +} + + +inline +DWORD WaveOutCaps::optionalSupport(void)const +{ + return WAVEOUTCAPS::dwSupport; +} + +inline +WaveOutCaps::operator WAVEOUTCAPS &(void)const +{ + return *((WAVEOUTCAPS*)this); +} + +inline +WaveOutCaps &WaveOutCaps::operator=(const WaveOutCaps &someWaveOutCaps) +{ + ::memcpy(this,&someWaveOutCaps,sizeof(*this)); + return *this; +} +#endif diff --git a/sample/holdii/PCMForm.hpp b/sample/holdii/PCMForm.hpp new file mode 100644 index 0000000..7187ef5 --- /dev/null +++ b/sample/holdii/PCMForm.hpp @@ -0,0 +1,82 @@ +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#define _SAMPLE_WAVEFORMATPCM_HPP_ +#ifndef _SAMPLE_WAVEFORMATEX_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormatPCM : public WaveFormatEx +{ +public: + WaveFormatPCM(void); + WaveFormatPCM(const WaveFormatPCM &someWaveFormatPCM); + WaveFormatPCM(const FormatChunk &someFormatChunk); + ~WaveFormatPCM(); + WaveFormatPCM &operator=(const WaveFormatPCM &someWaveFormatPCM); + WaveFormatPCM &operator=(const FormatChunk &someFormatChunk); + operator PCMWAVEFORMAT &(void)const; + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); +private: + WORD mBitsPerSample; +}; + +inline +WaveFormatPCM::WaveFormatPCM(void) +: mBitsPerSample(0) +{ +} + +inline +WaveFormatPCM::WaveFormatPCM(const WaveFormatPCM &someWaveFormatPCM) +: WaveFormatEx((WaveFormatEx&)*this), mBitsPerSample(someWaveFormatPCM.mBitsPerSample) +{ +} + +inline +WaveFormatPCM::WaveFormatPCM(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormatPCM::~WaveFormatPCM() +{ +} + +inline +WaveFormatPCM &WaveFormatPCM::operator=(const WaveFormatPCM &someWaveFormatPCM) +{ + mBitsPerSample=someWaveFormatPCM.mBitsPerSample; + (WaveFormatEx&)*this=(WaveFormatEx&)someWaveFormatPCM; + return *this; +} + +inline +WaveFormatPCM::operator PCMWAVEFORMAT &(void)const +{ + return *((PCMWAVEFORMAT*)this); +} + +inline +WORD WaveFormatPCM::bitsPerSample(void)const +{ + return mBitsPerSample; +} + +inline +void WaveFormatPCM::bitsPerSample(WORD bitsPerSample) +{ + mBitsPerSample=bitsPerSample; +} + +inline +WaveFormatPCM &WaveFormatPCM::operator=(const FormatChunk &someFormatChunk) +{ + (WaveFormatEx&)*this=someFormatChunk; + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} +#endif diff --git a/sample/holdii/PureSmpl.cpp b/sample/holdii/PureSmpl.cpp new file mode 100644 index 0000000..a43c629 --- /dev/null +++ b/sample/holdii/PureSmpl.cpp @@ -0,0 +1,48 @@ +#include + +PureSample &PureSample::operator=(const PureSample &somePureSample) +{ + numSamples(somePureSample.numSamples()); + if(!isOkay())return *this; + copySampleData(&(((GlobalData&)mSampleData).operator[](0)),&(((GlobalData&)somePureSample.mSampleData).operator[](0)),numSamples()); + return *this; +} + +PureSample &PureSample::operator+=(const PureSample &somePureSample) +{ + PureSample mixedSample; + DWORD clampOne; + DWORD clampTwo; + UHUGE *lpMixedSample; + UHUGE *lpSampleOne; + UHUGE *lpSampleTwo; + + if(numSamples()>somePureSample.numSamples()) + { + clampOne=somePureSample.numSamples(); + clampTwo=numSamples(); + lpSampleOne=sampleData(); + lpSampleTwo=((PureSample&)somePureSample).sampleData(); + } + else + { + clampOne=numSamples(); + clampTwo=somePureSample.numSamples(); + lpSampleOne=((PureSample&)somePureSample).sampleData(); + lpSampleTwo=sampleData(); + } + mixedSample.numSamples(clampTwo); + lpMixedSample=mixedSample.sampleData(); + for(DWORD sampleIndex=0;sampleIndex>0x01; + for(;sampleIndex +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MEMFILE_HPP_ +#include +#endif +#ifndef _COMMON_OPENFILE_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +// This object holds the sample data as bytes. It does not know anything about the internal +// makeup of the sample (ie) does not know how many bits per sample + +class PureSample +{ +public: + PureSample(void); + PureSample(const PureSample &somePureSample); + virtual ~PureSample(); + PureSample &operator=(const PureSample &somePureSample); + PureSample &operator+=(const PureSample &somePureSample); + DWORD numSamples(void)const; + void numSamples(DWORD numSamples); + UHUGE *sampleData(void); + WORD isOkay(void)const; + MemFile &operator>>(MemFile &someMemFile)const; + FileHandle &operator<<(FileHandle &someFileHandle); + String toString(void)const; +private: + void copySampleData(UHUGE *lpDstSample,UHUGE *lpSrcSamples,DWORD numBytes); + DWORD mNumSamples; + GlobalData mSampleData; +}; + +inline +PureSample::PureSample(void) +: mNumSamples(0) +{ +} + +inline +PureSample::PureSample(const PureSample &somePureSample) +{ + *this=somePureSample; +} + +inline +PureSample::~PureSample() +{ +} + +inline +DWORD PureSample::numSamples(void)const +{ + return mNumSamples; +} + +inline +void PureSample::numSamples(DWORD numSamples) +{ + mNumSamples=numSamples; + mSampleData.size(mNumSamples,GMEM_MOVEABLE); +} + +inline +UHUGE *PureSample::sampleData(void) +{ + if(!isOkay())return (UHUGE*)0; + return (UHUGE*)&mSampleData[0]; +} + +inline +MemFile &PureSample::operator>>(MemFile &someMemFile)const +{ + if(!isOkay())return someMemFile; + someMemFile.write((char*)(UHUGE*)&(((GlobalData&)mSampleData)[0]),mNumSamples); + return someMemFile; +} + +inline +FileHandle &PureSample::operator<<(FileHandle &someFileHandle) +{ + if(!isOkay())return someFileHandle; + someFileHandle.read((BYTE*)(UHUGE*)&mSampleData[0],mNumSamples); + return someFileHandle; +} + +inline +WORD PureSample::isOkay(void)const +{ + return mSampleData.isOkay(); +} + +inline +String PureSample::toString(void)const +{ + String strPureSample; + strPureSample+=""; + strPureSample+=String(" NumSamples=")+String().fromInt(mNumSamples).quotes(); + strPureSample+=String(" SampleData=")+String().fromInt(mSampleData.size()).quotes(); + strPureSample+=String(""); + return strPureSample; +} +#endif diff --git a/sample/holdii/PureWave.cpp b/sample/holdii/PureWave.cpp new file mode 100644 index 0000000..58e36d7 --- /dev/null +++ b/sample/holdii/PureWave.cpp @@ -0,0 +1,58 @@ +#include +#include +#include + +PureWave::~PureWave() +{ + destroy(); +} + +PureWave::PureWave(void) +: mhProcessInstance(processInstance()), mClassNameString("PLAYBACKSAMPLEDOUTPUT") +{ + UINT numOutputDevices; + UINT numInputDevices; + registerClass(); + createWindow(); + numOutputDevices=::waveOutGetNumDevs(); + numInputDevices=::waveInGetNumDevs(); + for(short deviceIndex=0;deviceIndex +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#include +#endif + +class WaveForm; + +class PureWave : private Window +{ +public: + PureWave(void); + ~PureWave(); + WORD play(WaveForm &someWaveForm,DeviceHandler::PlayMode playMode=DeviceHandler::NoWait); + UINT numInputDevices(void)const; + UINT numOutputDevices(void)const; +private: + void registerClass(void)const; + void createWindow(void); + Block mWaveOutDeviceBlock; + Block mWaveInDeviceBlock; + HINSTANCE mhProcessInstance; + String mClassNameString; +}; + +inline +UINT PureWave::numInputDevices(void)const +{ + return mWaveInDeviceBlock.size(); +} + +inline +UINT PureWave::numOutputDevices(void)const +{ + return mWaveOutDeviceBlock.size(); +} +#endif diff --git a/sample/holdii/Sample.cpp b/sample/holdii/Sample.cpp new file mode 100644 index 0000000..6ea855a --- /dev/null +++ b/sample/holdii/Sample.cpp @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +PureWave *lpPureWave=0; +PureVector waveForms; + +#if defined(__FLAT__) +BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : +// createInstanceData(hInstance); + break; + case DLL_PROCESS_DETACH : +// destroyInstanceData(); + break; + } + return TRUE; +} +#else +int CALLBACK _export LibMain(HINSTANCE hInstance,WORD /*wDataSeg*/,WORD /*wHeapSize*/,LPSTR /*lpszCmdLine*/) +{ + createInstanceData(hInstance); + return TRUE; +} + +int CALLBACK _export WEP(int /*nExitType*/) +{ + destroyInstanceData(); + return TRUE; +} +#endif + +short CALLBACK _export play(WORD waveFormIndex,WORD waitFlag) +{ + if(!lpPureWave)return FALSE; + if(waveFormIndex>=waveForms.size())return FALSE; + return lpPureWave->play(waveForms[waveFormIndex],waitFlag?DeviceHandler::Wait:DeviceHandler::NoWait); +} + +short CALLBACK _export preLoadSamples(Block &pathFileNames) +{ + if(!lpPureWave)return FALSE; + + waveForms.size(pathFileNames.size()); + for(short index=0;index +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +short CALLBACK _export play(WORD waveFormIndex,WORD waitFlag); +short CALLBACK _export preLoadSamples(Block &pathFileNames); +void CALLBACK _export createInstanceData(HINSTANCE hInstance); +void CALLBACK _export destroyInstanceData(void); +#endif diff --git a/sample/holdii/Wave.cpp b/sample/holdii/Wave.cpp new file mode 100644 index 0000000..8b11507 --- /dev/null +++ b/sample/holdii/Wave.cpp @@ -0,0 +1,169 @@ +#include +#include +#include + +WaveForm::WaveForm(const String &wavePathFileName) +{ + open(wavePathFileName); +} + +bool WaveForm::open(String wavePathFileName) +{ + initWaveForm(); + wavePathFileName.lower(); + if(!wavePathFileName.strstr(mExtensionString))wavePathFileName+=mExtensionString; + mWavePathFileName=wavePathFileName; + FileHandle waveFile(wavePathFileName,FileHandle::Read,FileHandle::ShareReadWrite); + if(!waveFile.isOkay())return false; + waveFile.read((BYTE*)&mHeaderString,sizeof(mHeaderString)); + waveFile.read((BYTE*)&mLengthData,sizeof(mLengthData)); + waveFile.read((BYTE*)&mSubHeaderString,sizeof(mSubHeaderString)); + mFormatChunk<>waveFile; + mDataChunk.length(mSampleData.numSamples()); + for(chunkIndex=0;chunkIndex>waveFile; + mDataChunk>>waveFile; + mSampleData>>waveFile; + return waveFile.flushBuffer(); +} + +bool WaveForm::save(String wavePathFileName,const PureSample &somePureSample,DWORD samplesPerSecond,DWORD avgBytesPerSecond) +{ + DWORD waveFileLength((long)sizeof(mHeaderString)+(long)sizeof(mLengthData)+(long)sizeof(mSubHeaderString)+(long)sizeof(FormatChunk)+(long)sizeof(DataChunk)+(long)somePureSample.numSamples()); + + wavePathFileName.upper(); + if(!wavePathFileName.strstr(mExtensionString))wavePathFileName+=mExtensionString; + MemFile waveFile(wavePathFileName,waveFileLength); + mLengthData=somePureSample.numSamples()+sizeof(mSubHeaderString)+mFormatChunk.size()+mDataChunk.size(); + for(short chunkIndex=0;chunkIndex>waveFile; + mDataChunk.length(somePureSample.numSamples()); + for(chunkIndex=0;chunkIndex>waveFile; + mDataChunk>>waveFile; + somePureSample>>waveFile; + return waveFile.flushBuffer(); +} + +String WaveForm::toString(void)const +{ + String strWaveForm; + + strWaveForm+=String(""); + strWaveForm+=String(" Header=")+String(mHeaderString).quotes(); + strWaveForm+=String(" LengthData=")+String().fromInt(mLengthData).quotes(); + strWaveForm+=String(" SubHeader=")+String(mSubHeaderString).quotes(); + strWaveForm+=String(" ")+mFormatChunk.toString(); + for(int index=0;index&)mGenericChunks)[index].chunkID().toString(); + } + strWaveForm+=mDataChunk.toString(); + strWaveForm+=mSampleData.toString(); + strWaveForm+=String(" WavePathFileName=")+mWavePathFileName.quotes(); + strWaveForm+=String(" Extension=")+mExtensionString.quotes(); + strWaveForm+=String(" WaveString=")+mWaveString.quotes(); + strWaveForm+=String(" RiffString=")+mRiffString.quotes(); + strWaveForm+=String(""); + return strWaveForm; +} diff --git a/sample/holdii/Wave.hpp b/sample/holdii/Wave.hpp new file mode 100644 index 0000000..2fa4e30 --- /dev/null +++ b/sample/holdii/Wave.hpp @@ -0,0 +1,115 @@ +#ifndef _SAMPLE_WAVEFORM_HPP_ +#define _SAMPLE_WAVEFORM_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SAMPLE_PURESAMPLE_HPP_ +#include +#endif +#ifndef _SAMPLE_DATACHUNK_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif +#ifndef _SAMPLE_GENERICCHUNK_HPP_ +#include +#endif + +class WaveForm +{ +public: + WaveForm(void); + WaveForm(const String &wavePathFileName); + WaveForm(const WaveForm &someWaveForm); + virtual ~WaveForm(); + bool open(String wavePathFileName); + WaveForm &operator=(const WaveForm &someWaveForm); + WaveForm &operator=(const String &wavePathFileName); + WaveForm &operator+=(const WaveForm &someWaveForm); + WaveForm operator+(const WaveForm &someWaveForm); + bool operator==(const WaveForm &someWaveForm)const; + bool operator<<(FileHandle &waveFile); + FormatChunk &getFormatChunk(void); + PureSample &getPureSample(void); + bool save(String wavePathFileName,const PureSample &somePureSample,DWORD samplesPerSecond,DWORD avgBytesPerSecond); + bool save(String wavePathFileName); + const String &wavePathFileName(void)const; + bool isOkay(void)const; + String toString(void)const; +private: + enum {MaxLength=4}; + void initWaveForm(void); + + char mHeaderString[MaxLength]; + DWORD mLengthData; + char mSubHeaderString[MaxLength]; + FormatChunk mFormatChunk; + Block mGenericChunks; + DataChunk mDataChunk; + PureSample mSampleData; + String mWavePathFileName; + String mExtensionString; + String mWaveString; + String mRiffString; +}; + +inline +WaveForm::WaveForm(void) +{ + initWaveForm(); +} + +inline +WaveForm::WaveForm(const WaveForm &someWaveForm) +{ + *this=someWaveForm; +} + +inline +WaveForm::~WaveForm() +{ +} + +inline +WaveForm &WaveForm::operator=(const String &wavePathFileName) +{ + *this=WaveForm(wavePathFileName); + return *this; +} + +inline +bool WaveForm::isOkay(void)const +{ + return mSampleData.isOkay(); +} + +inline +const String &WaveForm::wavePathFileName(void)const +{ + return mWavePathFileName; +} + +inline +FormatChunk &WaveForm::getFormatChunk(void) +{ + return mFormatChunk; +} + +inline +PureSample &WaveForm::getPureSample(void) +{ + return mSampleData; +} +#endif + + diff --git a/sample/holdii/WaveFmEx.hpp b/sample/holdii/WaveFmEx.hpp new file mode 100644 index 0000000..614a7e7 --- /dev/null +++ b/sample/holdii/WaveFmEx.hpp @@ -0,0 +1,172 @@ +#ifndef _SAMPLE_WAVEFORMATEX_HPP_ +#define _SAMPLE_WAVEFORMATEX_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormatEx : private WAVEFORMATEX +{ +public: + enum FormatType{PulseCodeModulation=WAVE_FORMAT_PCM}; + WaveFormatEx(void); + WaveFormatEx(const WaveFormatEx &someWaveFormatEx); + WaveFormatEx(const FormatChunk &someFormatChunk); + ~WaveFormatEx(); + WaveFormatEx &operator=(const WaveFormatEx &someWaveFormatEx); + WaveFormatEx &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplePerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + WORD bitsPerSample(void)const; + void bitsPerSample(WORD bitsPerSample); + WORD size(void)const; + void size(WORD size); + operator WAVEFORMATEX &(void)const; +private: +}; + +inline +WaveFormatEx::WaveFormatEx(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveFormatEx::WaveFormatEx(const WaveFormatEx &someWaveFormatEx) +{ + *this=someWaveFormatEx; +} + +inline +WaveFormatEx::WaveFormatEx(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormatEx::~WaveFormatEx() +{ +} + +inline +WaveFormatEx &WaveFormatEx::operator=(const WaveFormatEx &someWaveFormatEx) +{ + ::memcpy(this,&someWaveFormatEx,sizeof(*this)); + return *this; +} + +inline +WORD WaveFormatEx::formatTag(void)const +{ + return WAVEFORMATEX::wFormatTag; +} + +inline +void WaveFormatEx::formatTag(WORD formatTag) +{ + WAVEFORMATEX::wFormatTag=formatTag; +} + +inline +WORD WaveFormatEx::channels(void)const +{ + return WAVEFORMATEX::nChannels; +} + +inline +void WaveFormatEx::channels(WORD channels) +{ + WAVEFORMATEX::nChannels=channels; +} + +inline +DWORD WaveFormatEx::samplePerSecond(void)const +{ + return WAVEFORMATEX::nSamplesPerSec; +} + +inline +void WaveFormatEx::samplesPerSecond(DWORD samplesPerSecond) +{ + WAVEFORMATEX::nSamplesPerSec=samplesPerSecond; +} + +inline +DWORD WaveFormatEx::averageBytesPerSecond(void)const +{ + return WAVEFORMATEX::nAvgBytesPerSec; +} + +inline +void WaveFormatEx::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + WAVEFORMATEX::nAvgBytesPerSec=averageBytesPerSecond; +} + +inline +WORD WaveFormatEx::blockAlign(void)const +{ + return WAVEFORMATEX::nBlockAlign; +} + +inline +void WaveFormatEx::blockAlign(WORD blockAlign) +{ + WAVEFORMATEX::nBlockAlign=blockAlign; +} + +inline +WORD WaveFormatEx::bitsPerSample(void)const +{ + return WAVEFORMATEX::wBitsPerSample; +} + +inline +void WaveFormatEx::bitsPerSample(WORD bitsPerSample) +{ + WAVEFORMATEX::wBitsPerSample=bitsPerSample; +} + +inline +WORD WaveFormatEx::size(void)const +{ + return WAVEFORMATEX::cbSize; +} + +inline +void WaveFormatEx::size(WORD size) +{ + WAVEFORMATEX::cbSize=size; +} + +inline +WaveFormatEx::operator WAVEFORMATEX &(void)const +{ + return *((WAVEFORMATEX*)this); +} + +inline +WaveFormatEx &WaveFormatEx::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + bitsPerSample(someFormatChunk.bitsPerSample()); + return *this; +} +#endif \ No newline at end of file diff --git a/sample/holdii/WaveForm.hpp b/sample/holdii/WaveForm.hpp new file mode 100644 index 0000000..43ddd73 --- /dev/null +++ b/sample/holdii/WaveForm.hpp @@ -0,0 +1,143 @@ +#ifndef _SAMPLE_WAVEFORMAT_HPP_ +#define _SAMPLE_WAVEFORMAT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _SAMPLE_FORMATCHUNK_HPP_ +#include +#endif + +class WaveFormat : private WAVEFORMAT +{ +public: + enum FormatType{PulseCodeModulation=WAVE_FORMAT_PCM}; + WaveFormat(void); + WaveFormat(const WaveFormat &someWaveFormat); + WaveFormat(const FormatChunk &someFormatChunk); + virtual ~WaveFormat(); + WaveFormat &operator=(const WaveFormat &someWaveFormat); + WaveFormat &operator=(const FormatChunk &someFormatChunk); + WORD formatTag(void)const; + void formatTag(WORD formatTag); + WORD channels(void)const; + void channels(WORD channels); + DWORD samplePerSecond(void)const; + void samplesPerSecond(DWORD samplesPerSecond); + DWORD averageBytesPerSecond(void)const; + void averageBytesPerSecond(DWORD averageBytesPerSecond); + WORD blockAlign(void)const; + void blockAlign(WORD blockAlign); + operator WAVEFORMAT &(void)const; +private: +}; + +inline +WaveFormat::WaveFormat(void) +{ + ::memset(this,0,sizeof(*this)); +} + +inline +WaveFormat::WaveFormat(const WaveFormat &someWaveFormat) +{ + *this=someWaveFormat; +} + +inline +WaveFormat::WaveFormat(const FormatChunk &someFormatChunk) +{ + *this=someFormatChunk; +} + +inline +WaveFormat::~WaveFormat() +{ +} + +inline +WaveFormat &WaveFormat::operator=(const WaveFormat &someWaveFormat) +{ + ::memcpy(this,&someWaveFormat,sizeof(*this)); + return *this; +} + +inline +WORD WaveFormat::formatTag(void)const +{ + return WAVEFORMAT::wFormatTag; +} + +inline +void WaveFormat::formatTag(WORD formatTag) +{ + WAVEFORMAT::wFormatTag=formatTag; +} + +inline +WORD WaveFormat::channels(void)const +{ + return WAVEFORMAT::nChannels; +} + +inline +void WaveFormat::channels(WORD channels) +{ + WAVEFORMAT::nChannels=channels; +} + +inline +DWORD WaveFormat::samplePerSecond(void)const +{ + return WAVEFORMAT::nSamplesPerSec; +} + +inline +void WaveFormat::samplesPerSecond(DWORD samplesPerSecond) +{ + WAVEFORMAT::nSamplesPerSec=samplesPerSecond; +} + +inline +DWORD WaveFormat::averageBytesPerSecond(void)const +{ + return WAVEFORMAT::nAvgBytesPerSec; +} + +inline +void WaveFormat::averageBytesPerSecond(DWORD averageBytesPerSecond) +{ + WAVEFORMAT::nAvgBytesPerSec=averageBytesPerSecond; +} + +inline +WORD WaveFormat::blockAlign(void)const +{ + return WAVEFORMAT::nBlockAlign; +} + +inline +void WaveFormat::blockAlign(WORD blockAlign) +{ + WAVEFORMAT::nBlockAlign=blockAlign; +} + +inline +WaveFormat::operator WAVEFORMAT &(void)const +{ + return *((WAVEFORMAT*)this); +} + +inline +WaveFormat &WaveFormat::operator=(const FormatChunk &someFormatChunk) +{ + formatTag(someFormatChunk.formatTag()); + channels(someFormatChunk.channels()); + samplesPerSecond(someFormatChunk.samplesPerSecond()); + averageBytesPerSecond(someFormatChunk.averageBytesPerSecond()); + blockAlign(someFormatChunk.blockAlign()); + return *this; +} +#endif diff --git a/sample/holdii/WaveHdr.hpp b/sample/holdii/WaveHdr.hpp new file mode 100644 index 0000000..2222892 --- /dev/null +++ b/sample/holdii/WaveHdr.hpp @@ -0,0 +1,97 @@ +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#define _SAMPLE_WAVEHEADER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif + +class WaveHeader : private WAVEHDR +{ +public: + WaveHeader(void); + WaveHeader(const WaveHeader &someWaveHeader); + ~WaveHeader(); + WaveHeader &operator=(const WaveHeader &someWaveHeader); + WORD operator==(const WaveHeader &someWaveHeader); + void setData(LPSTR lpData); + void setBufferLength(DWORD bufferLength); + void userData(DWORD userData); + DWORD userData(void)const; +// operator WAVEHDR &(void)const; +private: + void initHeader(void); +}; + +inline +WaveHeader::WaveHeader(void) +{ + initHeader(); +} + +inline +WaveHeader::WaveHeader(const WaveHeader &someWaveHeader) +{ + *this=someWaveHeader; +} + +inline +WaveHeader::~WaveHeader() +{ +} + +inline +void WaveHeader::initHeader(void) +{ + ::memset(&((WAVEHDR&)*this),0,sizeof(WAVEHDR)); +} + +inline +void WaveHeader::setData(LPSTR lpData) +{ + WAVEHDR::lpData=lpData; +} + +inline +void WaveHeader::setBufferLength(DWORD bufferLength) +{ + WAVEHDR::dwBufferLength=bufferLength; +} + +inline +void WaveHeader::userData(DWORD userData) +{ + WAVEHDR::dwUser=userData; +} + +inline +DWORD WaveHeader::userData(void)const +{ + return WAVEHDR::dwUser; +} + +inline +WaveHeader &WaveHeader::operator=(const WaveHeader &someWaveHeader) +{ + initHeader(); + setData(someWaveHeader.WAVEHDR::lpData); + setBufferLength(someWaveHeader.WAVEHDR::dwBufferLength); + return *this; +} + +inline +WORD WaveHeader::operator==(const WaveHeader &someWaveHeader) +{ + return FALSE; +} + +#if 0 +inline +WaveHeader::operator WAVEHDR &(void)const +{ + return *((WAVEHDR*)this); +} +#endif +#endif + diff --git a/sample/holdii/WaveIn.cpp b/sample/holdii/WaveIn.cpp new file mode 100644 index 0000000..c956d70 --- /dev/null +++ b/sample/holdii/WaveIn.cpp @@ -0,0 +1,35 @@ +#include + +WORD WaveInDevice::openDevice(WaveFormatPCM &/*waveFormatPCM*/) +{ + return FALSE; +} + +WORD WaveInDevice::closeDevice(void) +{ + return FALSE; +} + +WORD WaveInDevice::record(WaveForm &/*waveForm*/) +{ + return FALSE; +} + +// virtuals + +void WaveInDevice::openHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::closeHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::doneHandler(CallbackData &/*someCallbackData*/) +{ +} + +void WaveInDevice::message(const String &strErrorMessage)const +{ + ::OutputDebugString((String&)strErrorMessage+String("\n")); +} diff --git a/sample/holdii/WaveIn.hpp b/sample/holdii/WaveIn.hpp new file mode 100644 index 0000000..d7a2b05 --- /dev/null +++ b/sample/holdii/WaveIn.hpp @@ -0,0 +1,76 @@ +#ifndef _SAMPLE_WAVEINDEVICE_HPP_ +#define _SAMPLE_WAVEINDEVICE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEINCAPS_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveInDevice : public DeviceHandler +{ +public: + WaveInDevice(UINT waveDeviceID,Window &windowHandler); + WaveInDevice(const WaveInDevice &someWaveInDevice); + virtual ~WaveInDevice(); + WaveInDevice &operator=(const WaveInDevice &someWaveInDevice); + WORD record(WaveForm &waveForm); +protected: + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; +private: + WORD openDevice(WaveFormatPCM &waveFormatPCM); + WORD closeDevice(void); + UINT mWaveDeviceID; + GlobalData mGlobalWaveHeader; + WaveInCaps mWaveInCaps; + HWAVEIN mhWaveIn; + Window &mWindowHandler; +}; + +inline +WaveInDevice::WaveInDevice(UINT waveDeviceID,Window &windowHandler) +: mWaveDeviceID(waveDeviceID), mhWaveIn(0), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWindowHandler(windowHandler), DeviceHandler(windowHandler) +{ + ::waveInGetDevCaps(mWaveDeviceID,&((WAVEINCAPS&)mWaveInCaps),sizeof(mWaveInCaps)); +} + +inline +WaveInDevice::WaveInDevice(const WaveInDevice &someWaveInDevice) +: mWaveDeviceID(someWaveInDevice.mWaveDeviceID), mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mhWaveIn(0), mWindowHandler(someWaveInDevice.mWindowHandler), DeviceHandler(someWaveInDevice.mWindowHandler) +{ + *this=someWaveInDevice; +} + +inline +WaveInDevice &WaveInDevice::operator=(const WaveInDevice &someWaveInDevice) +{ + mWaveInCaps=someWaveInDevice.mWaveInCaps; + return *this; +} + +inline +WaveInDevice::~WaveInDevice() +{ + closeDevice(); +} +#endif diff --git a/sample/holdii/WaveOut.cpp b/sample/holdii/WaveOut.cpp new file mode 100644 index 0000000..eec8387 --- /dev/null +++ b/sample/holdii/WaveOut.cpp @@ -0,0 +1,140 @@ +#include + +WaveOutDevice::WaveOutDevice(UINT waveDeviceID,Window &windowHandler) +: mWaveDeviceID(waveDeviceID), mhWaveOut(0), + mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWindowHandler(windowHandler), DeviceHandler(windowHandler), + mDisposition(InClose) +{ + ::waveOutGetDevCaps(mWaveDeviceID,&((WAVEOUTCAPS&)mWaveOutCaps),sizeof(mWaveOutCaps)); +} + +WaveOutDevice::WaveOutDevice(const WaveOutDevice &someWaveOutDevice) +: mWindowHandler(someWaveOutDevice.mWindowHandler), mhWaveOut(0), + mGlobalWaveHeader(1,GMEM_MOVEABLE|GMEM_ZEROINIT), + mWaveDeviceID(someWaveOutDevice.mWaveDeviceID), + DeviceHandler(someWaveOutDevice.mWindowHandler), + mDisposition(someWaveOutDevice.mDisposition) +{ + *this=someWaveOutDevice; +} + +WaveOutDevice::~WaveOutDevice() +{ + closeDevice(); +} + +WaveOutDevice &WaveOutDevice::operator=(const WaveOutDevice &someWaveOutDevice) +{ + mWaveOutCaps=someWaveOutDevice.mWaveOutCaps; + return *this; +} + +BOOL WaveOutDevice::openDevice(WaveFormatPCM &waveFormatPCM) +{ + MMRESULT mmResult; + + closeDevice(); + mmResult=::waveOutOpen(&mhWaveOut,mWaveDeviceID,(LPWAVEFORMATEX)&waveFormatPCM,(UINT)((HWND)mWindowHandler),0L,WAVE_ALLOWSYNC|CALLBACK_WINDOW); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InOpen; + return TRUE; +} + +BOOL WaveOutDevice::closeDevice(void) +{ + MMRESULT mmResult; + + if(!mhWaveOut||InClose==mDisposition)return TRUE; + if(InPlay==mDisposition) + { + mmResult=::waveOutReset(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + } + while(InPlay==mDisposition)mWindowHandler.yieldTask(); + mmResult=::waveOutClose(mhWaveOut); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InClose; + mhWaveOut=0; + return TRUE; +} + +BOOL WaveOutDevice::pause(void) +{ + MMRESULT mmResult; + + if(InPlay!=mDisposition)return FALSE; + if(0!=(mmResult=::waveOutPause(mhWaveOut))){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPause; + return TRUE; +} + +BOOL WaveOutDevice::restart(void) +{ + MMRESULT mmResult; + + if(InPause!=mDisposition)return FALSE; + if(0!=(mmResult=::waveOutRestart(mhWaveOut))){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPlay; + return TRUE; +} + +BOOL WaveOutDevice::play(WaveForm &someWaveForm,DeviceHandler::PlayMode playMode) +{ + MMRESULT mmResult; + WaveFormatPCM waveFormatPCM(someWaveForm.getFormatChunk()); + if(WaveFormatEx::PulseCodeModulation!=waveFormatPCM.formatTag()){genericErrorMessage(InvalidFormat);return FALSE;} + if(!openDevice(waveFormatPCM))return FALSE; + ((WaveHeader*)&mGlobalWaveHeader[0])->setData((char*)(someWaveForm.getPureSample().sampleData())); + ((WaveHeader*)&mGlobalWaveHeader[0])->setBufferLength(someWaveForm.getPureSample().numSamples()); + ((WaveHeader*)&mGlobalWaveHeader[0])->userData((DWORD)this); + mmResult=::waveOutPrepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mmResult=::waveOutWrite(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WAVEHDR)); + if(mmResult){mmSystemErrorMessage(mmResult);return FALSE;} + mDisposition=InPlay; + if(mmResult){mmSystemErrorMessage(mmResult);unprepareHeader();return FALSE;} + if(DeviceHandler::Wait==playMode) + { + while(InPlay==mDisposition)mWindowHandler.yieldTask(); + closeDevice(); + } + return TRUE; +} + +void WaveOutDevice::unprepareHeader(void) +{ + if(!mhWaveOut){genericErrorMessage(DeviceHandler::InvalidDeviceHandle);return;} + if(!mGlobalWaveHeader.isOkay()){genericErrorMessage(DeviceHandler::InvalidHeader);return;} + ::waveOutUnprepareHeader(mhWaveOut,(WAVEHDR*)((WaveHeader*)&mGlobalWaveHeader[0]),sizeof(WaveHeader)); +} + +// virtuals + +void WaveOutDevice::openHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void WaveOutDevice::closeHandler(CallbackData &/*someCallbackData*/) +{ + return; +} + +void WaveOutDevice::doneHandler(CallbackData &someCallbackData) +{ + WaveHeader &waveHeader=(*((WaveHeader*)someCallbackData.lParam())); + + if(waveHeader.userData()==(DWORD)this) + { + unprepareHeader(); + mDisposition=InIdle; + } + return; +} + +void WaveOutDevice::message(const String &strErrorMessage)const +{ + ::OutputDebugString((String&)strErrorMessage+String("\n")); +} + diff --git a/sample/holdii/WaveOut.hpp b/sample/holdii/WaveOut.hpp new file mode 100644 index 0000000..3d408a7 --- /dev/null +++ b/sample/holdii/WaveOut.hpp @@ -0,0 +1,52 @@ +#ifndef _SAMPLE_WAVEOUTDEVICE_HPP_ +#define _SAMPLE_WAVEOUTDEVICE_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _SAMPLE_DEVICEHANDLER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEOUTCAPS_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEHEADER_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORM_HPP_ +#include +#endif +#ifndef _SAMPLE_WAVEFORMATPCM_HPP_ +#include +#endif + +class WaveOutDevice : public DeviceHandler +{ +public: + WaveOutDevice(UINT waveDeviceID,Window &windowHander); + WaveOutDevice(const WaveOutDevice &someWaveOutDevice); + virtual ~WaveOutDevice(); + WaveOutDevice &operator=(const WaveOutDevice &someWaveOutDevice); + BOOL play(WaveForm &waveForm,DeviceHandler::PlayMode playMode=DeviceHandler::NoWait); + BOOL pause(void); + BOOL restart(void); +protected: + virtual void openHandler(CallbackData &someCallbackData); + virtual void closeHandler(CallbackData &someCallbackData); + virtual void doneHandler(CallbackData &someCallbackData); + virtual void message(const String &strErrorMessage)const; +private: + enum Disposition{InPause,InPlay,InClose,InOpen,InIdle}; + BOOL openDevice(WaveFormatPCM &waveFormatPCM); + BOOL closeDevice(void); + void unprepareHeader(void); + WaveOutCaps mWaveOutCaps; + Window &mWindowHandler; + UINT mWaveDeviceID; + GlobalData mGlobalWaveHeader; + HWAVEOUT mhWaveOut; + Disposition mDisposition; +}; +#endif diff --git a/sample/holdii/main.cpp b/sample/holdii/main.cpp new file mode 100644 index 0000000..eb108eb --- /dev/null +++ b/sample/holdii/main.cpp @@ -0,0 +1,34 @@ +#include +#include +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + Array waveForms; + PureWave pureWave; + + waveForms.size(2); +// waveForms[0]="C:\\WINDOWS\\MEDIA\\DSSHOTGN.WAV"; +// waveForms[0].loadWaveFile("c:\\winnt\\media\\ctmelody.wav"); + + waveForms[0].open("D:\\Program Files\\FruityLoops3\\Samples\\Packs\\Basic\\Kicks\\Kick.wav"); +// waveForms[1]="D:\\Program Files\\FruityLoops3\\Samples\\Packs\\Basic\\Kicks\\C_Kick.wav"; + +// ::OutputDebugString(waveForms[0].toString()+String("\n")); +// ::OutputDebugString(waveForms[1].toString()+String("\n")); + +// waveForms[0]+=waveForms[1]; + + +// ::OutputDebugString(waveForms[0].toString()+String("\n")); + + +// return 0; +// for(int index=0;index<3;index++) + { + pureWave.play(waveForms[0],DeviceHandler::Wait); + } +// pureWave.play(waveForms[0],DeviceHandler::Wait); + return FALSE; +} + diff --git a/sample/main.cpp b/sample/main.cpp new file mode 100644 index 0000000..b49b21b --- /dev/null +++ b/sample/main.cpp @@ -0,0 +1,39 @@ +#include +#include +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + Array waveForms; + PureWave pureWave; + + waveForms.size(2); + + try + { +// waveForms[0].open("D:\\Program Files\\FruityLoops3\\Samples\\Packs\\Basic\\Kicks\\Kick.wav"); +// waveForms[0].open("D:\\Program Files\\FruityLoops3\\Samples\\Packs\\Basic\\snares\\xr10Snare.wav"); + waveForms[0].open("D:\\200308.wav"); + } + catch(Exception &exception) + { + ::OutputDebugString("Failed to open sample"); + return false; + } + ::OutputDebugString(waveForms[0].toString()+String("\n")); + +// waveForms[0].convert(PureSampleEx::Bit16); + + pureWave.play(waveForms[0],DeviceHandler::Wait); + ::Sleep(125); + pureWave.play(waveForms[0],DeviceHandler::Wait); + ::Sleep(125); +/* + pureWave.play(waveForms[1],DeviceHandler::Wait); + ::Sleep(250); + pureWave.play(waveForms[1],DeviceHandler::Wait); + ::Sleep(125); +*/ + return false; +} + diff --git a/sample/sample.dsp b/sample/sample.dsp new file mode 100644 index 0000000..9f1cf96 --- /dev/null +++ b/sample/sample.dsp @@ -0,0 +1,192 @@ +# Microsoft Developer Studio Project File - Name="sample" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=sample - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sample.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sample.mak" CFG="sample - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sample - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "sample - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sample - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "sample - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /FR /Fp"\work\exe\msvc42.pch" /YX"windows.h" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\sample.lib" + +!ENDIF + +# Begin Target + +# Name "sample - Win32 Release" +# Name "sample - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Datachnk.cpp +# End Source File +# Begin Source File + +SOURCE=.\Devhndlr.cpp +# End Source File +# Begin Source File + +SOURCE=.\fmtchnk.cpp +# End Source File +# Begin Source File + +SOURCE=.\GenChnk.cpp +# End Source File +# Begin Source File + +SOURCE=.\Puresmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Purewave.cpp +# End Source File +# Begin Source File + +SOURCE=.\Wave.cpp +# End Source File +# Begin Source File + +SOURCE=.\Wavein.cpp +# End Source File +# Begin Source File + +SOURCE=.\Waveout.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Chunkid.hpp +# End Source File +# Begin Source File + +SOURCE=.\Datachnk.hpp +# End Source File +# Begin Source File + +SOURCE=.\Devhndlr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Fmtchnk.hpp +# End Source File +# Begin Source File + +SOURCE=.\Genchnk.hpp +# End Source File +# Begin Source File + +SOURCE=.\Incaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\Outcaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\Pcmform.hpp +# End Source File +# Begin Source File + +SOURCE=.\Puresmpl.hpp +# End Source File +# Begin Source File + +SOURCE=.\Purewave.hpp +# End Source File +# Begin Source File + +SOURCE=.\Wave.hpp +# End Source File +# Begin Source File + +SOURCE=.\Wavefmex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Wavehdr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Wavein.hpp +# End Source File +# Begin Source File + +SOURCE=.\Waveout.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/sample/sampletst.dsp b/sample/sampletst.dsp new file mode 100644 index 0000000..14a6e58 --- /dev/null +++ b/sample/sampletst.dsp @@ -0,0 +1,142 @@ +# Microsoft Developer Studio Project File - Name="sampletst" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=sampletst - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sampletst.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sampletst.mak" CFG="sampletst - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sampletst - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "sampletst - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sampletst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "sampletst___Win32_Release" +# PROP BASE Intermediate_Dir "sampletst___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "sampletst___Win32_Release" +# PROP Intermediate_Dir "sampletst___Win32_Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "sampletst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "sampletst - Win32 Release" +# Name "sampletst - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\DATACHNK.CPP +# End Source File +# Begin Source File + +SOURCE=.\DEVHNDLR.CPP +# End Source File +# Begin Source File + +SOURCE=.\fmtchnk.cpp +# End Source File +# Begin Source File + +SOURCE=.\GenChnk.cpp +# End Source File +# Begin Source File + +SOURCE=.\MAIN.CPP +# End Source File +# Begin Source File + +SOURCE=.\PURESMPL.CPP +# End Source File +# Begin Source File + +SOURCE=.\PUREWAVE.CPP +# End Source File +# Begin Source File + +SOURCE=.\WAVE.CPP +# End Source File +# Begin Source File + +SOURCE=.\WAVEIN.CPP +# End Source File +# Begin Source File + +SOURCE=.\WAVEOUT.CPP +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/sample/sampletst.dsw b/sample/sampletst.dsw new file mode 100644 index 0000000..efc0dd6 --- /dev/null +++ b/sample/sampletst.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "sampletst"=.\sampletst.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/sample/sampletst.opt b/sample/sampletst.opt new file mode 100644 index 0000000..a0053c5 Binary files /dev/null and b/sample/sampletst.opt differ diff --git a/sample/sampletst.plg b/sample/sampletst.plg new file mode 100644 index 0000000..fb5bcc6 --- /dev/null +++ b/sample/sampletst.plg @@ -0,0 +1,42 @@ + + +
+

Build Log

+

+--------------------Configuration: sampletst - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPF.tmp" with contents +[ +/nologo /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fp"Debug/sampletst.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"D:\work\sample\MAIN.CPP" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSPF.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP10.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/sampletst.pdb" /debug /machine:I386 /out:"Debug/sampletst.exe" /pdbtype:sept +.\Debug\DATACHNK.OBJ +.\Debug\DEVHNDLR.OBJ +.\Debug\fmtchnk.obj +.\Debug\GenChnk.obj +.\Debug\MAIN.OBJ +.\Debug\PURESMPL.OBJ +.\Debug\PUREWAVE.OBJ +.\Debug\WAVE.OBJ +.\Debug\WAVEIN.OBJ +.\Debug\WAVEOUT.OBJ +\work\exe\mscommon.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP10.tmp" +

Output Window

+Compiling... +MAIN.CPP +Linking... + + + +

Results

+sampletst.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/service/EventLog.cpp b/service/EventLog.cpp new file mode 100644 index 0000000..0036fbb --- /dev/null +++ b/service/EventLog.cpp @@ -0,0 +1,19 @@ +#include + +bool EventLog::open(const String &strSourceName,const String &strServerName) +{ + close(); + mServerName=strServerName; + mSourceName=strSourceName; + if(!mSourceName.length())mSourceName="Application"; + mhEventLog=::RegisterEventSource(mServerName.isNull()?0:mServerName.str(),mSourceName.isNull()?0:mSourceName.str()); + return isOkay(); +} + +bool EventLog::reportEvent(const String &strMessage,EventType eventType,DWORD eventID,WORD category,PSID userSID) +{ + char const *str[]={strMessage.str()}; + if(!isOkay()||!strMessage.length())return false; + return ::ReportEvent(mhEventLog,int(eventType),category,eventID,userSID,1,0,str,0)?true:false; +} + diff --git a/service/EventLog.hpp b/service/EventLog.hpp new file mode 100644 index 0000000..3f4ab34 --- /dev/null +++ b/service/EventLog.hpp @@ -0,0 +1,63 @@ +#ifndef _SERVICE_EVENTLOG_HPP_ +#define _SERVICE_EVENTLOG_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class EventLog +{ +public: + enum EventType{Error=EVENTLOG_ERROR_TYPE,Warning=EVENTLOG_WARNING_TYPE,Information=EVENTLOG_INFORMATION_TYPE}; + EventLog(void); + virtual ~EventLog(); + bool open(const String &strSourceName=String(),const String &strServerName=String()); + void close(void); + bool reportEvent(const String &strMessage,EventType eventType=Error,DWORD eventID=0,WORD category=0,PSID userSID=0); + bool isOkay(void)const; +private: + enum {MaxNameLength=256}; + EventLog &operator=(const EventLog &eventLog); + EventLog(const EventLog &eventLog); + + HANDLE mhEventLog; + String mServerName; + String mSourceName; +}; + +inline +EventLog::EventLog(void) +: mhEventLog(0) +{ +} + +inline +EventLog::EventLog(const EventLog &/*eventLog*/) +{ // private implementation +} + +inline +EventLog::~EventLog() +{ + close(); +} + +inline +EventLog &EventLog::operator=(const EventLog &/*eventLog*/) +{ // private implementation + return *this; +} + +inline +void EventLog::close(void) +{ + if(!mhEventLog)return; + ::DeregisterEventSource(mhEventLog); + mhEventLog=0; +} + +inline +bool EventLog::isOkay(void)const +{ + return mhEventLog?true:false; +} +#endif diff --git a/service/GenericService.cpp b/service/GenericService.cpp new file mode 100644 index 0000000..074fad2 --- /dev/null +++ b/service/GenericService.cpp @@ -0,0 +1,110 @@ +#include +#include + +GenericService::GenericService(void) +: mhServiceHandle(0), mState(Stopped) +{ +} + +GenericService::GenericService(const GenericService &/*someGenericService*/) +{ // private implementation +} + +GenericService::~GenericService() +{ +} + +GenericService &GenericService::operator=(const GenericService &/*someGenericService*/) +{ // private implementation + return *this; +} + +bool GenericService::startService(const String &strServiceName) +{ + SERVICE_TABLE_ENTRY serviceEntry[2]; + bool result; + + ::memset(&serviceEntry,0,sizeof(serviceEntry)); + mServiceName=strServiceName; + mEventLog.open(mServiceName); + serviceEntry[0].lpServiceName=(char*)mServiceName; + serviceEntry[0].lpServiceProc=getServiceMainBase(); + result=::StartServiceCtrlDispatcher(&serviceEntry[0])?true:false; + if(!result){::OutputDebugString(" StartServiceCtrlDispatcher(FAILED)\n");return false;} + ::OutputDebugString(" StartServiceCtrlDispatcher(OK)\n"); + return true; +} + +void GenericService::svcMain(DWORD dwArg,LPTSTR *lpszArg) +{ + ServiceStatus serviceStatus(SERVICE_WIN32_OWN_PROCESS,SERVICE_START_PENDING,SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN,NO_ERROR,NO_ERROR,0,WaitHint); + mhServiceHandle=::RegisterServiceCtrlHandler(mServiceName,getServiceHandlerBase()); + if(!mhServiceHandle)return; + serviceMain(dwArg,lpszArg); +} + +void GenericService::svcHandler(DWORD dwControl) +{ + switch(dwControl) + { + case SERVICE_CONTROL_STOP : + ::OutputDebugString(" (OK)\n"); + ctrlStop(); + break; + case SERVICE_CONTROL_PAUSE : + ::OutputDebugString(" (OK)\n"); + ctrlPause(); + break; + case SERVICE_CONTROL_CONTINUE : + ::OutputDebugString(" (OK)\n"); + ctrlContinue(); + break; + case SERVICE_CONTROL_INTERROGATE : + ::OutputDebugString(" (OK)\n"); + ctrlInterrogate(); + break; + case SERVICE_CONTROL_SHUTDOWN : + ::OutputDebugString(" (OK)\n"); + ctrlShutdown(); + break; + } +} + +// virtuals +void GenericService::serviceMain(DWORD dwArg,LPTSTR *lpszArg) +{ + ServiceStatus serviceStatus(SERVICE_WIN32_OWN_PROCESS,SERVICE_RUNNING,SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN,NO_ERROR,NO_ERROR,0,0); + setServiceStatus(serviceStatus); + while(Stopped!=state()){::Sleep(1000);} + return; +} + +void GenericService::ctrlStop(void) +{ + ServiceStatus serviceStatus(SERVICE_WIN32_OWN_PROCESS,SERVICE_STOPPED,SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN,NO_ERROR,NO_ERROR,0,0); + setServiceStatus(serviceStatus); +} + +void GenericService::ctrlPause(void) +{ + ServiceStatus serviceStatus(SERVICE_WIN32_OWN_PROCESS,SERVICE_PAUSED,SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN,NO_ERROR,NO_ERROR,0,0); + setServiceStatus(serviceStatus); +} + +void GenericService::ctrlContinue(void) +{ + ServiceStatus serviceStatus(SERVICE_WIN32_OWN_PROCESS,SERVICE_RUNNING,SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN,NO_ERROR,NO_ERROR,0,0); + setServiceStatus(serviceStatus); +} + +void GenericService::ctrlShutdown(void) +{ + ServiceStatus serviceStatus(SERVICE_WIN32_OWN_PROCESS,SERVICE_STOPPED,SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN,NO_ERROR,NO_ERROR,0,0); + setServiceStatus(serviceStatus); +} + +void GenericService::ctrlInterrogate(void) +{ + ServiceStatus serviceStatus(SERVICE_WIN32_OWN_PROCESS,state(),SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN,NO_ERROR,NO_ERROR,0,0); + setServiceStatus(serviceStatus); +} diff --git a/service/GenericService.hpp b/service/GenericService.hpp new file mode 100644 index 0000000..d6ea5f4 --- /dev/null +++ b/service/GenericService.hpp @@ -0,0 +1,103 @@ +#ifndef _SERVICE_GENERICSERVICE_HPP_ +#define _SERVICE_GENERICSERVICE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINSVC_HPP_ +#include +#endif +#ifndef _SERVICE_SERVICEHOOK_HPP_ +#include +#endif +#ifndef _SERVICE_SERVICESTATUS_HPP_ +#include +#endif +#ifndef _SERVICE_EVENTLOG_HPP_ +#include +#endif + +class GenericService : private ServiceHook +{ +public: + enum State{Paused,Running,Stopped}; + GenericService(void); + virtual ~GenericService(); + bool setServiceStatus(const ServiceStatus &serviceStatus); + bool startService(const String &strServiceName); + bool isOkay(void)const; + bool isPaused(void)const; + bool isRunning(void)const; + bool isStopped(void)const; + State state(void)const; + bool reportEvent(const String &strMessage,EventLog::EventType eventType,DWORD eventID=0,DWORD category=0,PSID userSID=0); +protected: + virtual void serviceMain(DWORD dwArgc,LPTSTR *lpszArg); + virtual void ctrlStop(void); + virtual void ctrlPause(void); + virtual void ctrlContinue(void); + virtual void ctrlInterrogate(void); + virtual void ctrlShutdown(void); +private: + enum{WaitHint=5000}; + GenericService(const GenericService &someGenericService); + GenericService &operator=(const GenericService &someGenericService); + virtual void svcMain(DWORD dwArg,LPTSTR *lpszArg); + virtual void svcHandler(DWORD dwControl); + void state(State state); + + SERVICE_STATUS_HANDLE mhServiceHandle; + String mServiceName; + EventLog mEventLog; + State mState; +}; + +inline +bool GenericService::isOkay(void)const +{ + return mhServiceHandle?true:false; +} + +inline +GenericService::State GenericService::state(void)const +{ + return mState; +} + +inline +void GenericService::state(State state) +{ + mState=state; +} + +inline +bool GenericService::isPaused(void)const +{ + return Paused==state(); +} + +inline +bool GenericService::isRunning(void)const +{ + return Running==state(); +} + +inline +bool GenericService::isStopped(void)const +{ + return Stopped==state(); +} + +inline +bool GenericService::setServiceStatus(const ServiceStatus &serviceStatus) +{ + if(!isOkay())return false; + state(State(serviceStatus.currentState())); + return ::SetServiceStatus(mhServiceHandle,&((ServiceStatus&)serviceStatus).getSERVICESTATUS())?true:false; +} + +inline +bool GenericService::reportEvent(const String &strMessage,EventLog::EventType eventType,DWORD eventID,DWORD category,PSID userSID) +{ + return mEventLog.reportEvent(strMessage,eventType,eventID,category,userSID); +} +#endif diff --git a/service/ServiceHook.hpp b/service/ServiceHook.hpp new file mode 100644 index 0000000..b3539d3 --- /dev/null +++ b/service/ServiceHook.hpp @@ -0,0 +1,60 @@ +#ifndef _SERVICE_SERVICEHOOK_HPP_ +#define _SERVICE_SERVICEHOOK_HPP_ +#ifndef _HOOKPROC_APIENTRY_HPP_ +#include +#endif +#ifndef _HOOKPROC_PROCADDRESS_HPP_ +#include +#endif + +class ServiceHook; +typedef ProcAddress ServiceHookProc; + +class ServiceHook : private ServiceHookProc +{ +public: + typedef void (__stdcall *LPFNSERVICEMAIN)(DWORD dwArgc,LPTSTR *lpszArg); + typedef void (__stdcall *LPFNSERVICEHANDLER)(DWORD dwControl); + ServiceHook(void); + virtual ~ServiceHook(); + LPFNSERVICEMAIN getServiceMainBase(void)const; + LPFNSERVICEHANDLER getServiceHandlerBase(void)const; +protected: + virtual void svcMain(DWORD dwArgc,LPTSTR *lpszArg); + virtual void svcHandler(DWORD dwControl); +private: + enum {ParamLength=8}; + enum {ServiceMainParamLength=8,ServiceHandlerParamLength=4}; + ServiceHook &operator=(const ServiceHook &someServiceHook); + void serviceMainEntryProc(DWORD dwArgc,LPTSTR *lpszArg); + void serviceHandlerEntryProc(DWORD dwControl); + + APIEntry mServiceMainEntry; + APIEntry mServiceHandlerEntry; +}; + +inline +ServiceHook::ServiceHook(void) +: mServiceMainEntry(ServiceMainParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&ServiceHook::serviceMainEntryProc)), + mServiceHandlerEntry(ServiceHandlerParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&ServiceHook::serviceHandlerEntryProc)) +{ +} + +inline +ServiceHook &ServiceHook::operator=(const ServiceHook &someServiceHook) +{ // private implementation + return *this; +} + +inline +ServiceHook::LPFNSERVICEMAIN ServiceHook::getServiceMainBase(void)const +{ + return (LPFNSERVICEMAIN)mServiceMainEntry.codeBase(); +} + +inline +ServiceHook::LPFNSERVICEHANDLER ServiceHook::getServiceHandlerBase(void)const +{ + return (LPFNSERVICEHANDLER)mServiceHandlerEntry.codeBase(); +} +#endif \ No newline at end of file diff --git a/service/ServiceManager.cpp b/service/ServiceManager.cpp new file mode 100644 index 0000000..d6d29b3 --- /dev/null +++ b/service/ServiceManager.cpp @@ -0,0 +1,91 @@ +#include +#include + +ServiceManager::ServiceManager() +: mhServiceControl(0) +{ + open(); +} + +ServiceManager::~ServiceManager() +{ + close(); +} + +bool ServiceManager::open(void) +{ + close(); + mhServiceControl=::OpenSCManager(0,0,SC_MANAGER_CONNECT|SC_MANAGER_CREATE_SERVICE|SC_MANAGER_ENUMERATE_SERVICE|GENERIC_READ|GENERIC_WRITE); + return isOkay(); +} + +void ServiceManager::close(void) +{ + if(!isOkay())return; + ::CloseServiceHandle(mhServiceControl); + mhServiceControl=0; +} + +bool ServiceManager::createService(const String &strServiceName,const String &strDisplayName,const String &strBinPath,const String &strAccountName,const String &strPassword) +{ + SC_HANDLE hService; + + if(!isOkay())return false; + hService=::CreateService(mhServiceControl,strServiceName,strDisplayName, + SERVICE_ALL_ACCESS|GENERIC_READ|GENERIC_WRITE, + SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,strBinPath, + 0,0,0,0,0); + if(!hService)return false; + ::CloseServiceHandle(hService); + createEventLogEntry(strServiceName,strBinPath); + return true; +} + +bool ServiceManager::deleteService(const String &strServiceName) +{ + SC_HANDLE hService; + bool returnCode; + + if(!isOkay())return false; + hService=::OpenService(mhServiceControl,strServiceName,SERVICE_ALL_ACCESS); + if(!hService)return false; + returnCode=::DeleteService(hService)?true:false; + ::CloseServiceHandle(hService); + removeEventLogEntry(strServiceName); + return returnCode; +} + +void ServiceManager::createEventLogEntry(const String &strServiceName,const String &strBinPath) +{ + RegKey regKey(RegKey::LocalMachine); + String strTopLevelKey("SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application"); + String strKeyName; + + if(strServiceName.isNull())return; + strKeyName=strTopLevelKey+String("\\")+strServiceName; + if(!regKey.openKey(strKeyName)) + { + if(!regKey.createKey(strKeyName,""))return; + if(!regKey.openKey(strKeyName))return; + } + regKey.setValue("EventMessageFile",strBinPath); + regKey.setValue("TypesSupported",7); + regKey.closeKey(); +} + +void ServiceManager::removeEventLogEntry(const String &strServiceName) +{ + RegKey regKey(RegKey::LocalMachine); + String strTopLevelKey("SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application"); + + if(strServiceName.isNull())return; + if(!regKey.openKey(strTopLevelKey))return; + regKey.deleteKey(strServiceName); +} + +bool ServiceManager::isOkay(void)const +{ + return mhServiceControl?true:false; +} + + diff --git a/service/ServiceManager.hpp b/service/ServiceManager.hpp new file mode 100644 index 0000000..585df45 --- /dev/null +++ b/service/ServiceManager.hpp @@ -0,0 +1,26 @@ +#ifndef _TRANSACTIONSERVER_SERVICEMANAGER_H_ +#define _TRANSACTIONSERVER_SERVICEMANAGER_H_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINSVC_HPP_ +#include +#endif + +class ServiceManager +{ +public: + ServiceManager(); + virtual ~ServiceManager(); + bool createService(const String &strServiceName,const String &strDisplayName,const String &strBinPath,const String &strAccountName=String(),const String &strPassword=String()); + bool deleteService(const String &strServiceName); + bool isOkay(void)const; +private: + void createEventLogEntry(const String &strServiceName,const String &strBinPath); + void removeEventLogEntry(const String &strServiceName); + bool open(void); + void close(void); + + SC_HANDLE mhServiceControl; +}; +#endif diff --git a/service/ServiceStatus.hpp b/service/ServiceStatus.hpp new file mode 100644 index 0000000..2865f86 --- /dev/null +++ b/service/ServiceStatus.hpp @@ -0,0 +1,156 @@ +#ifndef _SERVICE_SERVICESTATUS_HPP_ +#define _SERVICE_SERVICESTATUS_HPP_ +#ifndef _COMMON_WINSVC_HPP_ +#include +#endif + +class ServiceStatus : private SERVICE_STATUS +{ +public: + ServiceStatus(void); + ServiceStatus(DWORD svcType,DWORD svcState,DWORD ctlsAccept,DWORD w32Exit,DWORD svcExit,DWORD ckPoint,DWORD waitHint); + virtual ~ServiceStatus(); + DWORD serviceType(void)const; + void serviceType(DWORD serviceType); + DWORD currentState(void)const; + void currentState(DWORD currentState); + DWORD controlsAccepted(void)const; + void controlsAccepted(DWORD controlsAccepted); + DWORD win32ExitCode(void)const; + void win32ExitCode(DWORD win32ExitCode); + DWORD serviceExitCode(void)const; + void serviceExitCode(DWORD serviceExitCode); + DWORD checkPoint(void)const; + void checkPoint(DWORD checkPoint); + DWORD waitHint(void)const; + void waitHint(DWORD waitHint); + SERVICE_STATUS &getSERVICESTATUS(void); +private: + void zeroInit(void); +}; + +inline +ServiceStatus::ServiceStatus(void) +{ + zeroInit(); +} + +inline +ServiceStatus::ServiceStatus(DWORD svcType,DWORD svcState,DWORD ctlsAccept,DWORD w32Exit,DWORD svcExit,DWORD ckPoint,DWORD waitHint) +{ + SERVICE_STATUS::dwServiceType=svcType; + SERVICE_STATUS::dwCurrentState=svcState; + SERVICE_STATUS::dwControlsAccepted=ctlsAccept; + SERVICE_STATUS::dwWin32ExitCode=w32Exit; + SERVICE_STATUS::dwServiceSpecificExitCode=svcExit; + SERVICE_STATUS::dwCheckPoint=ckPoint; + SERVICE_STATUS::dwWaitHint=waitHint; +} + +inline +ServiceStatus::~ServiceStatus() +{ +} + +inline +DWORD ServiceStatus::serviceType(void)const +{ + return SERVICE_STATUS::dwServiceType; +} + +inline +void ServiceStatus::serviceType(DWORD serviceType) +{ + SERVICE_STATUS::dwServiceType=serviceType; +} + +inline +DWORD ServiceStatus::currentState(void)const +{ + return SERVICE_STATUS::dwCurrentState; +} + +inline +void ServiceStatus::currentState(DWORD currentState) +{ + SERVICE_STATUS::dwCurrentState=currentState; +} + +inline +DWORD ServiceStatus::controlsAccepted(void)const +{ + return SERVICE_STATUS::dwControlsAccepted; +} + +inline +void ServiceStatus::controlsAccepted(DWORD controlsAccepted) +{ + SERVICE_STATUS::dwControlsAccepted=controlsAccepted; +} + +inline +DWORD ServiceStatus::win32ExitCode(void)const +{ + return SERVICE_STATUS::dwWin32ExitCode; +} + +inline +void ServiceStatus::win32ExitCode(DWORD win32ExitCode) +{ + SERVICE_STATUS::dwWin32ExitCode=win32ExitCode; +} + +inline +DWORD ServiceStatus::serviceExitCode(void)const +{ + return SERVICE_STATUS::dwServiceSpecificExitCode; +} + +inline +void ServiceStatus::serviceExitCode(DWORD serviceExitCode) +{ + SERVICE_STATUS::dwServiceSpecificExitCode=serviceExitCode; +} + +inline +DWORD ServiceStatus::checkPoint(void)const +{ + return SERVICE_STATUS::dwCheckPoint; +} + +inline +void ServiceStatus::checkPoint(DWORD checkPoint) +{ + SERVICE_STATUS::dwCheckPoint=checkPoint; +} + +inline +DWORD ServiceStatus::waitHint(void)const +{ + return SERVICE_STATUS::dwWaitHint; +} + +inline +void ServiceStatus::waitHint(DWORD waitHint) +{ + SERVICE_STATUS::dwWaitHint=waitHint; +} + +inline +SERVICE_STATUS &ServiceStatus::getSERVICESTATUS(void) +{ + return *this; +} + +inline +void ServiceStatus::zeroInit(void) +{ + SERVICE_STATUS::dwServiceType=0; + SERVICE_STATUS::dwCurrentState=0; + SERVICE_STATUS::dwControlsAccepted=0; + SERVICE_STATUS::dwWin32ExitCode=0; + SERVICE_STATUS::dwServiceSpecificExitCode=0; + SERVICE_STATUS::dwCheckPoint=0; + SERVICE_STATUS::dwWaitHint=0; +} +#endif diff --git a/service/scraps.txt b/service/scraps.txt new file mode 100644 index 0000000..0e029f9 --- /dev/null +++ b/service/scraps.txt @@ -0,0 +1,133 @@ +#include +#include +#include + +#include + +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow) +{ + +// char *pszCmd=::GetCommandLine(); + +// ::WinExec("D:\\Program Files\\jakarta-tomcat-3.2.1\\bin\\startup.bat",SW_SHOWNORMAL); +// ::WinExec("D:\\parts\\JBoss-2.2.1\\bin\\run.bat",SW_SHOWNORMAL); + +/* +HKLM/Diversified/WatchDog +name +apppath +args +method +address + + +*/ + + +// return 0; + + ProcessAPI processAPI; + ProcessInfoList processInfoList; + ModuleInfoList moduleInfoList; + + processAPI.enumProcesses(processInfoList); + + for(int index=0;index +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=service - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "service.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "service.mak" CFG="service - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "service - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "service - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "service - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "service - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /Zp8 /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\service.lib" + +!ENDIF + +# Begin Target + +# Name "service - Win32 Release" +# Name "service - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\EventLog.cpp +# End Source File +# Begin Source File + +SOURCE=.\GenericService.cpp +# End Source File +# Begin Source File + +SOURCE=.\servicehook.cpp +# End Source File +# Begin Source File + +SOURCE=.\ServiceManager.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/service/service.dsw b/service/service.dsw new file mode 100644 index 0000000..92a6b45 --- /dev/null +++ b/service/service.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "service"=.\service.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/service/service.opt b/service/service.opt new file mode 100644 index 0000000..e75e166 Binary files /dev/null and b/service/service.opt differ diff --git a/service/service.plg b/service/service.plg new file mode 100644 index 0000000..782d223 --- /dev/null +++ b/service/service.plg @@ -0,0 +1,33 @@ + + +
+

Build Log

+

+--------------------Configuration: service - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP1C.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /Fp"Debug/service.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"D:\work\service\EventLog.cpp" +"D:\work\service\GenericService.cpp" +"D:\work\service\servicehook.cpp" +"D:\work\service\ServiceManager.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP1C.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\service.lib" .\Debug\EventLog.obj .\Debug\GenericService.obj .\Debug\servicehook.obj .\Debug\ServiceManager.obj " +

Output Window

+Compiling... +EventLog.cpp +GenericService.cpp +servicehook.cpp +ServiceManager.cpp +Creating library... + + + +

Results

+service.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/service/servicehook.cpp b/service/servicehook.cpp new file mode 100644 index 0000000..4592ff2 --- /dev/null +++ b/service/servicehook.cpp @@ -0,0 +1,30 @@ +#include +#include + +ServiceHook::~ServiceHook() +{ +} + +void ServiceHook::serviceMainEntryProc(DWORD dwArgc,LPTSTR *lpszArg) +{ + svcMain(dwArgc,lpszArg); +} + +void ServiceHook::serviceHandlerEntryProc(DWORD dwControl) +{ + svcHandler(dwControl); +} + +// *** virtuals + +void ServiceHook::svcMain(DWORD dwArgc,LPTSTR *lpszArg) +{ + ::OutputDebugString("ServiceHook::serviceMain\n"); + return; +} + +void ServiceHook::svcHandler(DWORD dwControl) +{ + ::OutputDebugString("ServiceHook::serviceHandler\n"); + return; +} diff --git a/smtp/MAIL.H b/smtp/MAIL.H new file mode 100644 index 0000000..105b2e4 --- /dev/null +++ b/smtp/MAIL.H @@ -0,0 +1,32 @@ + +// mail dialog defines +#define MAIL_TEXT 103 +#define MAIL_SERVER 105 +#define MAIL_ATTACH 106 +#define MAIL_FROM 102 +#define MAIL_SUBJECT 104 +#define MAIL_TO 101 + +// mail server dialog defines +#define MS_SERVERNAME 100 + +// string table defines +#define STRING_MAILKEYNAME 100 +#define STRING_SERVERKEYNAME 101 +#define STRING_MAILRECIPIENTSKEYNAME 102 +#define STRING_MAILREVERSEPATHKEYNAME 103 +#define STRING_ERROR 104 +#define STRING_NOSERVER 105 +#define STRING_NOREVERSEPATH 106 +#define STRING_NORECIPIENT 107 +#define STRING_NODATA 108 +#define STRING_TO 109 +#define STRING_REPLYTO 110 +#define STRING_SUBJECT 111 +#define STRING_DATE 112 +#define STRING_MAILSENT 113 +#define STRING_RECIPIENTS 114 +#define STRING_REVERSEPATH 115 +#define STRING_DOMAINNAMEKEYNAME 116 +#define STRING_DOMAINNAMEKEYENTRY 117 +#define STRING_LOCALHOST 118 diff --git a/smtp/MAIL.HPP b/smtp/MAIL.HPP new file mode 100644 index 0000000..b0731f1 --- /dev/null +++ b/smtp/MAIL.HPP @@ -0,0 +1,4 @@ +#ifndef _SMTP_MAIL_HPP_ +#define _SMTP_MAIL_HPP_ +#include +#endif diff --git a/smtp/MAIL.RC b/smtp/MAIL.RC new file mode 100644 index 0000000..473ac4e --- /dev/null +++ b/smtp/MAIL.RC @@ -0,0 +1,56 @@ +#include +#include + +MAIL ICON "SMTP.ICO" + +Mail DIALOG 1, 11, 277, 217 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX +CAPTION "Mail" +FONT 8, "MS Sans Serif" +{ + COMBOBOX MAIL_TO, 30, 4, 189, 59, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | WS_TABSTOP + COMBOBOX MAIL_FROM, 30, 17, 189, 59, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | WS_TABSTOP + EDITTEXT MAIL_SUBJECT, 30, 30, 179, 12 + EDITTEXT MAIL_TEXT, 6, 61, 262, 140, ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "S&end", IDOK, 223, 2, 50, 14 + PUSHBUTTON "Qui&t", IDCANCEL, 223, 16, 50, 14 + PUSHBUTTON "&Server...", MAIL_SERVER, 223, 30, 50, 14 + LTEXT "To:", -1, 2, 6, 16, 8, NOT WS_GROUP + LTEXT "From:", -1, 2, 19, 17, 8 + LTEXT "Subject:", -1, 2, 32, 27, 8 + PUSHBUTTON "&Attach...", MAIL_ATTACH, 30, 44, 58, 14 +} + +ServerDialog DIALOG 6, 15, 202, 49 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Mail Server" +FONT 8, "MS Sans Serif" +{ + LTEXT "Mail Server:", -1, 6, 11, 49, 8 + EDITTEXT MS_SERVERNAME, 51, 10, 144, 12, ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 145, 27, 50, 14 +} + +STRINGTABLE +{ + STRING_MAILKEYNAME, "Software\\Diversified\\SimpleMail\\ServerName" + STRING_MAILRECIPIENTSKEYNAME, "Software\\Diversified\\SimpleMail\\Recipients" + STRING_MAILREVERSEPATHKEYNAME,"Software\\Diversified\\SimpleMail\\ReversePath" + STRING_DOMAINNAMEKEYNAME, "System\\CurrentControlSet\\Services\\VxD\\MSTCP" + STRING_DOMAINNAMEKEYENTRY, "Domain" + STRING_LOCALHOST, "localhost" + STRING_SERVERKEYNAME, "SMTPServer" + STRING_NOSERVER, "Please specify your SMTP server." + STRING_ERROR, "ERROR" + STRING_NOREVERSEPATH, "Please specify a reverse path." + STRING_NORECIPIENT, "Please specify a recipient." + STRING_NODATA, "There is nothing to send." + STRING_TO, "to:" + STRING_REPLYTO, "reply-to:" + STRING_SUBJECT, "subject:" + STRING_DATE, "date:" + STRING_MAILSENT, "Mail sent." + STRING_RECIPIENTS, "Recipients" + STRING_REVERSEPATH, "ReversePath" +} + diff --git a/smtp/MAIL.RWS b/smtp/MAIL.RWS new file mode 100644 index 0000000..2c8f509 Binary files /dev/null and b/smtp/MAIL.RWS differ diff --git a/smtp/MAIL.~RC b/smtp/MAIL.~RC new file mode 100644 index 0000000..5fe34bb --- /dev/null +++ b/smtp/MAIL.~RC @@ -0,0 +1,56 @@ +#include +#include + +MAIL ICON "SMTP.ICO" + +Mail DIALOG 1, 11, 277, 217 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX +CAPTION "Mail" +FONT 8, "MS Sans Serif" +{ + COMBOBOX MAIL_TO, 30, 4, 189, 59, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_GROUP | WS_TABSTOP + COMBOBOX MAIL_FROM, 30, 17, 189, 59, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | WS_TABSTOP + EDITTEXT MAIL_SUBJECT, 30, 30, 179, 12 + EDITTEXT MAIL_TEXT, 6, 61, 262, 140, ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP + PUSHBUTTON "S&end", IDOK, 223, 2, 50, 14 + PUSHBUTTON "Qui&t", IDCANCEL, 223, 16, 50, 14 + PUSHBUTTON "&Server...", MAIL_SERVER, 223, 30, 50, 14 + LTEXT "To:", -1, 2, 6, 16, 8, NOT WS_GROUP + LTEXT "From:", -1, 2, 19, 17, 8 + LTEXT "Subject:", -1, 2, 32, 27, 8 + PUSHBUTTON "&Attach...", MAIL_ATTACH, 30, 44, 58, 14 +} + +ServerDialog DIALOG 6, 15, 202, 49 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Mail Server" +FONT 8, "MS Sans Serif" +{ + LTEXT "Mail Server:", -1, 6, 11, 49, 8 + EDITTEXT MS_SERVERNAME, 51, 10, 144, 12, ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 145, 27, 50, 14 +} + +STRINGTABLE +{ + STRING_MAILKEYNAME, "Software\\Diversified\\SimpleMail\\ServerName" + STRING_MAILRECIPIENTSKEYNAME, "Software\\Diversified\\SimpleMail\\Recipients" + STRING_MAILREVERSEPATHKEYNAME,"Software\\Diversified\\SimpleMail\\ReversePath" + STRING_DOMAINNAMEKEYNAME, "System\\CurrentControlSet\\Services\\VxD\\MSTCP" + STRING_DOMAINNAMEKEYENTRY, "Domain" + STRING_LOCALHOST, "localhost" + STRING_SERVERKEYNAME, "SMTPServer" + STRING_NOSERVER, "Please specify your SMTP server." + STRING_ERROR, "ERROR" + STRING_NOREVERSEPATH, "Please specify a reverse path." + STRING_NORECIPIENT, "Please specify a recipient." + STRING_NODATA, "There is nothing to send." + STRING_TO, "to:" + STRING_REPLYTO, "reply-to:" + STRING_SUBJECT, "subject:" + STRING_DATE, "date:" + STRING_MAILSENT, "Mail sent." + STRING_RECIPIENTS, "Recipients" + STRING_REVERSEPATH, "ReversePath" +} + diff --git a/smtp/MAILDLG.CPP b/smtp/MAILDLG.CPP new file mode 100644 index 0000000..9de97f2 --- /dev/null +++ b/smtp/MAILDLG.CPP @@ -0,0 +1,288 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +MailDlg::MailDlg(void) +{ + mInitHandler.setCallback(this,&MailDlg::initHandler); + mDestroyHandler.setCallback(this,&MailDlg::destroyHandler); + mCommandHandler.setCallback(this,&MailDlg::commandHandler); + mCloseHandler.setCallback(this,&MailDlg::closeHandler); + mDlgCodeHandler.setCallback(this,&MailDlg::dlgCodeHandler); + mOpenHandler.setCallback(this,&MailDlg::openHandler); + mPreOpenHandler.setCallback(this,&MailDlg::preOpenHandler); + DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); + SMTPThread::insertHandler(&mOpenHandler,SMTPThread::MsgOpen); + SMTPThread::insertHandler(&mPreOpenHandler,SMTPThread::MsgPreOpen); +} + +MailDlg::~MailDlg() +{ + DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); + DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + DWindow::removeHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); + SMTPThread::removeHandler(SMTPThread::MsgOpen); + SMTPThread::removeHandler(SMTPThread::MsgPreOpen); +} + +MailDlg &MailDlg::operator=(const MailDlg &/*someMailDlg*/) +{ // private implementation + return *this; +} + +BOOL MailDlg::perform(const String &strCommandLine) +{ + if(!strCommandLine.isNull())mCommandLine=strCommandLine; + return ::DialogBoxParam(processInstance(),(LPSTR)"Mail",(HWND)0,DWindow::DlgProc,(LPARAM)(DWindow*)this); +} + +CallbackData::ReturnType MailDlg::initHandler(CallbackData &/*someCallbackData*/) +{ + ::SetClassLong(*this,GCL_HICON,(long)(HICON)::LoadIcon(processInstance(),"MAIL")); + mStatusBar=new StatusBar(*this); + mStatusBar.disposition(PointerDisposition::Delete); + initializeRecipients(); + initializeReversePaths(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MailDlg::destroyHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MailDlg::dlgCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS; +} + +CallbackData::ReturnType MailDlg::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + if(getFields())open(mMailInfo.server()); + break; + case IDCANCEL : + endDialog(FALSE); + break; + case MailServer : + handleMailServer(); + break; + case MailTo : + handleMailTo(someCallbackData); + break; + case MailFrom : + handleMailFrom(someCallbackData); + break; + case MailAttach : + handleMailAttach(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MailDlg::closeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +DWORD MailDlg::preOpenHandler(ThreadMessage &someThreadMessage) +{ + enableControls(FALSE); + return FALSE; +} + +DWORD MailDlg::openHandler(ThreadMessage &someThreadMessage) +{ + if(!someThreadMessage.userDataOne()) + { + enableControls(TRUE); + return TRUE; + } + sendMail(); + enableControls(TRUE); + return FALSE; +} + +void MailDlg::handleMailTo(CallbackData &someCallbackData) +{ + if(CBN_KILLFOCUS!=someCallbackData.wmCommandCommand())return; + MailReg mailReg; + String comboText; + getText(MailTo,comboText); + mailReg.addRecipient(comboText); +} + +void MailDlg::handleMailFrom(CallbackData &someCallbackData) +{ + if(CBN_KILLFOCUS!=someCallbackData.wmCommandCommand())return; + MailReg mailReg; + String comboText; + getText(MailFrom,comboText); + mailReg.addReversePath(comboText); +} + +void MailDlg::handleMailServer(void) +{ + String serverName; + ServerDialog serverDialog(*this); + serverDialog.performDialog(serverName); +} + +void MailDlg::handleMailAttach(void) +{ + OpenDialog openFile; + String pathFileName; + UUEncode uuEncode; + + if(!openFile.getOpenFileName(*this,"*.*","Open File","",pathFileName))return; + if(!uuEncode.encode(*this,pathFileName,mAttachment,FALSE)) + mStatusBar->setText(pathFileName+String(" is not attached.")); + else mStatusBar->setText(pathFileName+String(" is attached.")); +} + +BOOL MailDlg::getFields(void) +{ + String workString; + DWORD lineCount; + + getText(MailFrom,workString); + mMailInfo.reversePath(workString); + getText(MailTo,workString); + mMailInfo.toField(workString); + getText(MailSubject,workString); + mMailInfo.subjectField(workString); + lineCount=DWindow::sendMessage(MailText,EM_GETLINECOUNT,0,0L); + mMailInfo.mailData().remove(); + for(int itemIndex=0;itemIndex mailData; + Block recipients; + String headerString; + String strDomain; + + if(regKey.openKey(String(STRING_DOMAINNAMEKEYNAME)))regKey.queryValue(String(STRING_DOMAINNAMEKEYENTRY),strDomain); + if(strDomain.isNull())strDomain=String(STRING_LOCALHOST); + if(!helo(strDomain))return; + if(!mail(mMailInfo.reversePath()))return; + mMailInfo.recipients(recipients); + for(int rcptIndex=0;rcptIndex"):mMailInfo.subjectField()); + mailData.insert(&headerString); + SystemTime systemTime; + headerString=String(STRING_DATE)+systemTime.toString(); + mailData.insert(&headerString); + for(int lineIndex=0;lineIndexsetText(STRING_MAILSENT); + clearEditControl(); +} + +void MailDlg::initializeRecipients(void) +{ + MailReg mailReg; + Block strBlock; + + if(!mCommandLine.isNull())DWindow::sendMessage(MailTo,CB_INSERTSTRING,-1,(LPARAM)(LPSTR)mCommandLine); + mailReg.getRecipients(strBlock); + for(int itemIndex=0;itemIndex strBlock; + mailReg.getReversePaths(strBlock); + for(int itemIndex=0;itemIndexsetText(messageString); +} + +void MailDlg::message(Block &messageStrings) +{ + if(!mStatusBar.isOkay())return; + for(int lineIndex=0;lineIndexsetText(messageStrings[lineIndex]); +} diff --git a/smtp/MAILDLG.HPP b/smtp/MAILDLG.HPP new file mode 100644 index 0000000..da563d1 --- /dev/null +++ b/smtp/MAILDLG.HPP @@ -0,0 +1,64 @@ +#ifndef _SMTP_MAILDLG_HPP_ +#define _SMTP_MAILDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _SMTP_MAIL_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _SMTP_MAILINFO_HPP_ +#include +#endif +#ifndef _SMTP_SMTPTHREAD_HPP_ +#include +#endif + +class MailInfo; +class StatusBar; + +class MailDlg : public DWindow, public SMTPThread +{ +public: + MailDlg(void); + virtual ~MailDlg(); + BOOL perform(const String &strCommandLine); +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum {MailTo=MAIL_TO,MailText=MAIL_TEXT,MailSubject=MAIL_SUBJECT,MailFrom=MAIL_FROM,MailServer=MAIL_SERVER,MailAttach=MAIL_ATTACH}; + MailDlg &operator=(const MailDlg &someMailDlg); + BOOL getFields(void); + void sendMail(void); + void handleMailServer(void); + void handleMailTo(CallbackData &someCallbackData); + void handleMailFrom(CallbackData &someCallbackData); + void handleMailAttach(void); + void clearEditControl(void); + void initializeRecipients(void); + void initializeReversePaths(void); + void enableControls(BOOL enableFlag); + CallbackData::ReturnType initHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType closeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + DWORD preOpenHandler(ThreadMessage &someThreadMessage); + DWORD openHandler(ThreadMessage &someThreadMessage); + + ThreadCallback mOpenHandler; + ThreadCallback mPreOpenHandler; + Callback mInitHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mCloseHandler; + Callback mDlgCodeHandler; + SmartPointer mStatusBar; + MailInfo mMailInfo; + Block mAttachment; + String mCommandLine; +}; +#endif \ No newline at end of file diff --git a/smtp/MAILINFO.CPP b/smtp/MAILINFO.CPP new file mode 100644 index 0000000..a92084a --- /dev/null +++ b/smtp/MAILINFO.CPP @@ -0,0 +1,21 @@ +#include + +BOOL MailInfo::recipients(Block &recipients)const +{ + String lineString; + char *ptrString; + + recipients.remove(); + lineString=toField(); + lineString.replaceToken(';',' '); + lineString.replaceToken(',',' '); + ptrString=(LPSTR)lineString; + ptrString=::strtok(ptrString," \0"); + while(TRUE) + { + if(!ptrString)break; + recipients.insert(&String(ptrString)); + ptrString=::strtok(0," \0"); + } + return (recipients.size()?TRUE:FALSE); +} diff --git a/smtp/MAILINFO.HPP b/smtp/MAILINFO.HPP new file mode 100644 index 0000000..536b4d3 --- /dev/null +++ b/smtp/MAILINFO.HPP @@ -0,0 +1,168 @@ +#ifndef _SMTP_MAILINFO_HPP_ +#define _SMTP_MAILINFO_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class MailInfo +{ +public: + MailInfo(void); + MailInfo(const MailInfo &someMailInfo); + MailInfo &operator=(const MailInfo &someMailInfo); + BOOL operator==(const MailInfo &someMailInfo)const; + virtual ~MailInfo(); + const String &reversePath(void)const; + void reversePath(const String &reversePath); + const String &subjectField(void)const; + void subjectField(const String &subjectField); + const String &carbonField(void)const; + void carbonField(const String &carbonField); + const String &dateField(void)const; + void dateField(const String &dateField); + const String &toField(void)const; + void toField(const String &toField); + const String &server(void)const; + void server(const String &serverName); + BOOL recipients(Block &recipients)const; + void mailData(Block &mailData); + Block &mailData(void); +private: + String mReversePath; + String mSubjectField; + String mCarbonField; + String mDateField; + String mToField; + String mServer; + Block mMailData; +}; + +inline +MailInfo::MailInfo(void) +{ +} + +inline +MailInfo::MailInfo(const MailInfo &someMailInfo) +{ + *this=someMailInfo; +} + +inline +MailInfo &MailInfo::operator=(const MailInfo &someMailInfo) +{ + reversePath(someMailInfo.reversePath()); + subjectField(someMailInfo.subjectField()); + carbonField(someMailInfo.carbonField()); + dateField(someMailInfo.dateField()); + toField(someMailInfo.toField()); + server(someMailInfo.server()); + mMailData=someMailInfo.mMailData; + return *this; +} + +inline +BOOL MailInfo::operator==(const MailInfo &someMailInfo)const +{ + return (reversePath()==someMailInfo.reversePath()&& + subjectField()==someMailInfo.subjectField()&& + carbonField()==someMailInfo.carbonField()&& + dateField()==someMailInfo.dateField()&& + toField()==someMailInfo.toField()&& + server()==someMailInfo.server()&& + mMailData==someMailInfo.mMailData); +} + +inline +MailInfo::~MailInfo() +{ +} + +inline +const String &MailInfo::reversePath(void)const +{ + return mReversePath; +} + +inline +void MailInfo::reversePath(const String &reversePath) +{ + mReversePath=reversePath; +} + +inline +const String &MailInfo::subjectField(void)const +{ + return mSubjectField; +} + +inline +void MailInfo::subjectField(const String &subjectField) +{ + mSubjectField=subjectField; +} + +inline +const String &MailInfo::carbonField(void)const +{ + return mCarbonField; +} + +inline +void MailInfo::carbonField(const String &carbonField) +{ + mCarbonField=carbonField; +} + +inline +const String &MailInfo::dateField(void)const +{ + return mDateField; +} + +inline +void MailInfo::dateField(const String &dateField) +{ + mDateField=dateField; +} + +inline +const String &MailInfo::toField(void)const +{ + return mToField; +} + +inline +void MailInfo::toField(const String &toField) +{ + mToField=toField; +} + +inline +const String &MailInfo::server(void)const +{ + return mServer; +} + +inline +void MailInfo::server(const String &serverName) +{ + mServer=serverName; +} + +inline +void MailInfo::mailData(Block &mailData) +{ + mMailData=mailData; +} + +inline +Block &MailInfo::mailData(void) +{ + return mMailData; +} +#endif + diff --git a/smtp/MAILREG.CPP b/smtp/MAILREG.CPP new file mode 100644 index 0000000..6f396e2 --- /dev/null +++ b/smtp/MAILREG.CPP @@ -0,0 +1,118 @@ +#include +#include +#include +#include + +BOOL MailReg::getRecipients(Block &recipients) +{ + DWORD itemIndex(0); + RegKey regKey; + String recipient; + + recipients.remove(); + if(!regKey.openKey(STRING_MAILRECIPIENTSKEYNAME))return FALSE; + while(regKey.enumValue(itemIndex++,String(STRING_RECIPIENTS),recipient))recipients.insert(&recipient); + return (recipients.size()?TRUE:FALSE); +} + +void MailReg::setRecipients(const Block &recipients) +{ + String namePrefix; + RegKey regKey; + + if(!regKey.openKey(STRING_MAILRECIPIENTSKEYNAME)) + { + regKey.createKey(STRING_MAILRECIPIENTSKEYNAME,""); + regKey.openKey(STRING_MAILRECIPIENTSKEYNAME); + } + for(int lineIndex=0;lineIndex&)recipients)[lineIndex])); + } +} + +BOOL MailReg::addRecipient(const String &recipient) +{ + Block recipients; + String namePrefix; + RegKey regKey; + + if(recipient.isNull())return FALSE; + getRecipients(recipients); + if(isInBlock(recipient,recipients)){setRecipients(recipients);return FALSE;} + ::sprintf(namePrefix,"R%02d",recipients.size()); + if(!regKey.openKey(STRING_MAILRECIPIENTSKEYNAME)) + { + regKey.createKey(STRING_MAILRECIPIENTSKEYNAME,""); + regKey.openKey(STRING_MAILRECIPIENTSKEYNAME); + } + regKey.setValue(namePrefix,recipient); + return TRUE; +} + +BOOL MailReg::getReversePaths(Block &reversePaths) +{ + DWORD itemIndex(0); + RegKey regKey; + String reversePath; + + reversePaths.remove(); + if(!regKey.openKey(STRING_MAILREVERSEPATHKEYNAME))return FALSE; + while(regKey.enumValue(itemIndex++,String(STRING_REVERSEPATH),reversePath))reversePaths.insert(&reversePath); + return (reversePaths.size()?TRUE:FALSE); +} + +void MailReg::setReversePaths(const Block &reversePaths) +{ + String namePrefix; + RegKey regKey; + + if(!regKey.openKey(STRING_MAILREVERSEPATHKEYNAME)) + { + regKey.createKey(STRING_MAILREVERSEPATHKEYNAME,""); + regKey.openKey(STRING_MAILREVERSEPATHKEYNAME); + } + for(int lineIndex=0;lineIndex&)reversePaths)[lineIndex])); + } +} + +BOOL MailReg::addReversePath(const String &reversePath) +{ + Block reversePaths; + String namePrefix; + RegKey regKey; + + if(reversePath.isNull())return FALSE; + getReversePaths(reversePaths); + if(isInBlock(reversePath,reversePaths)){setReversePaths(reversePaths);return FALSE;} + ::sprintf(namePrefix,"R%02d",reversePaths.size()); + if(!regKey.openKey(STRING_MAILREVERSEPATHKEYNAME)) + { + regKey.createKey(STRING_MAILREVERSEPATHKEYNAME,""); + regKey.openKey(STRING_MAILREVERSEPATHKEYNAME); + } + regKey.setValue(namePrefix,reversePath); + return TRUE; +} + +BOOL MailReg::isInBlock(const String &string,Block &strings) +{ + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _SMTP_MAIL_HPP_ +#include +#endif + +class MailReg +{ +public: + MailReg(void); + MailReg(const MailReg &someMailReg); + virtual ~MailReg(); + MailReg &operator=(const MailReg &someMailReg); + BOOL getRecipients(Block &recipients); + void setRecipients(const Block &recipients); + BOOL addRecipient(const String &recipient); + BOOL getReversePaths(Block &reversePaths); + void setReversePaths(const Block &reversePaths); + BOOL addReversePath(const String &reversePath); + const String &server(void)const; + void server(const String &serverName); +private: + BOOL isInBlock(const String &recipient,Block &recipients); + + RegKey mRegKey; + String mMailKeyName; + String mServerKeyName; + String mRecipientsKeyName; + String mServerName; +}; + +inline +MailReg::MailReg(void) +: mMailKeyName(STRING_MAILKEYNAME), mServerKeyName(STRING_SERVERKEYNAME) +{ + if(!mRegKey.openKey(mMailKeyName)) + { + mRegKey.createKey(mMailKeyName,""); + mRegKey.openKey(mMailKeyName); + } + mRegKey.queryValue(mServerKeyName,mServerName); +} + +inline +MailReg::MailReg(const MailReg &someMailReg) +: mMailKeyName(STRING_MAILKEYNAME), mServerKeyName(STRING_SERVERKEYNAME) +{ + *this=someMailReg; +} + +inline +MailReg::~MailReg() +{ +} + +inline +MailReg &MailReg::operator=(const MailReg &someMailReg) +{ + server(someMailReg.server()); + return *this; +} + +inline +const String &MailReg::server(void)const +{ + return mServerName; +} + +inline +void MailReg::server(const String &serverName) +{ + mServerName=serverName; + mRegKey.setValue(mServerKeyName,mServerName); +} +#endif diff --git a/smtp/MAIN.CPP b/smtp/MAIN.CPP new file mode 100644 index 0000000..8c97d9c --- /dev/null +++ b/smtp/MAIN.CPP @@ -0,0 +1,11 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + MailDlg mailDlg; + String strString(lpszCmdLine); + if(!strString.isNull()&&strString.strstr("mailto:"))strString=strString.betweenString(':',0); + mailDlg.perform(strString); + return FALSE; +} diff --git a/smtp/MAIN.HPP b/smtp/MAIN.HPP new file mode 100644 index 0000000..37684ea --- /dev/null +++ b/smtp/MAIN.HPP @@ -0,0 +1,66 @@ +#ifndef _HTTP_MAIN_HPP_ +#define _HTTP_MAIN_HPP_ +#include + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/smtp/PTREX.HPP b/smtp/PTREX.HPP new file mode 100644 index 0000000..9c30e0c --- /dev/null +++ b/smtp/PTREX.HPP @@ -0,0 +1,52 @@ +#ifndef _SMTP_SMARTPOINTEREX_HPP_ +#define _SMTP_SMARTPOINTEREX_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif + +template +class SmartPointerEx : public SmartPointer +{ +public: + SmartPointerEx(void); + SmartPointerEx(T FAR *lpSmartPointer,PointerDisposition::Disposition disposition=PointerDisposition::Assume); + SmartPointerEx(const SmartPointer &someSmartPointer); + virtual ~SmartPointerEx(); + int operator < (const SmartPointerEx &someSmartPointerEx)const; +private: +}; + + +template +inline +SmartPointerEx::SmartPointerEx(void) +{ +} + +template +inline +SmartPointerEx::SmartPointerEx(T *lpSmartPointer,PointerDisposition::Disposition disposition) +: SmartPointer(lpSmartPointer,disposition) +{ +} + +template +inline +SmartPointerEx::SmartPointerEx(const SmartPointer &someSmartPointer) +{ + (SmartPointer&)*this=someSmartPointer; +} + +template +inline +SmartPointerEx::~SmartPointerEx() +{ +} + +template +inline +int SmartPointerEx::operator <(const SmartPointerEx &someSmartPointerEx)const +{ + return *((T FAR*)((SmartPointer&)*this))<*((T FAR*)((SmartPointer&)someSmartPointerEx)); +} +#endif \ No newline at end of file diff --git a/smtp/RESPONSE.CPP b/smtp/RESPONSE.CPP new file mode 100644 index 0000000..79f588a --- /dev/null +++ b/smtp/RESPONSE.CPP @@ -0,0 +1,168 @@ +#include +#include +#include + +SMTPResponse::SMTPResponse(void) +{ + createResponse(); +} + +SMTPResponse::~SMTPResponse() +{ +} + +SMTPResponse::SMTPResponse(const SMTPResponse &/*someSMTPResponse*/) +{ // private implementation +} + +SMTPResponse &SMTPResponse::operator=(const SMTPResponse &/*someSMTPResponse*/) +{ // private implementation + return *this; +} + +BOOL SMTPResponse::isInResponse(const String &responseString,RspType responseType) +{ + String srchString(responseString); + + return mSMTPResponseTree[responseType].searchItem(StringPointer(&srchString)); +} + +void SMTPResponse::createResponse(void) +{ + createResponseBlock(); + createResponseTree(); +} + +void SMTPResponse::createResponseTree(void) +{ + mSMTPResponseTree.size(NakQuit+1); + mSMTPResponseTree[AckConnect].insert(StringPointer(&mSMTPResponse[R211])); + mSMTPResponseTree[AckConnect].insert(StringPointer(&mSMTPResponse[R220])); + mSMTPResponseTree[NakConnect].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckHelo].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakHelo].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakHelo].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakHelo].insert(StringPointer(&mSMTPResponse[R504])); + mSMTPResponseTree[NakHelo].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckMail].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakMail].insert(StringPointer(&mSMTPResponse[R552])); + mSMTPResponseTree[NakMail].insert(StringPointer(&mSMTPResponse[R451])); + mSMTPResponseTree[NakMail].insert(StringPointer(&mSMTPResponse[R452])); + mSMTPResponseTree[NakMail].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakMail].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakMail].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckRecipient].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[AckRecipient].insert(StringPointer(&mSMTPResponse[R251])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R550])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R551])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R552])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R553])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R450])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R451])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R452])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R503])); + mSMTPResponseTree[NakRecipient].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckData].insert(StringPointer(&mSMTPResponse[R354])); + mSMTPResponseTree[AckData].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R552])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R554])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R451])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R452])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R451])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R554])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R503])); + mSMTPResponseTree[NakData].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckReset].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakReset].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakReset].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakReset].insert(StringPointer(&mSMTPResponse[R504])); + mSMTPResponseTree[NakReset].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckSend].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakSend].insert(StringPointer(&mSMTPResponse[R552])); + mSMTPResponseTree[NakSend].insert(StringPointer(&mSMTPResponse[R451])); + mSMTPResponseTree[NakSend].insert(StringPointer(&mSMTPResponse[R452])); + mSMTPResponseTree[NakSend].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakSend].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakSend].insert(StringPointer(&mSMTPResponse[R502])); + mSMTPResponseTree[NakSend].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckSendOrMail].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakSendOrMail].insert(StringPointer(&mSMTPResponse[R552])); + mSMTPResponseTree[NakSendOrMail].insert(StringPointer(&mSMTPResponse[R451])); + mSMTPResponseTree[NakSendOrMail].insert(StringPointer(&mSMTPResponse[R452])); + mSMTPResponseTree[NakSendOrMail].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakSendOrMail].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakSendOrMail].insert(StringPointer(&mSMTPResponse[R502])); + mSMTPResponseTree[NakSendOrMail].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckSendAndMail].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakSendAndMail].insert(StringPointer(&mSMTPResponse[R552])); + mSMTPResponseTree[NakSendAndMail].insert(StringPointer(&mSMTPResponse[R451])); + mSMTPResponseTree[NakSendAndMail].insert(StringPointer(&mSMTPResponse[R452])); + mSMTPResponseTree[NakSendAndMail].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakSendAndMail].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakSendAndMail].insert(StringPointer(&mSMTPResponse[R502])); + mSMTPResponseTree[NakSendAndMail].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckVerify].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[AckVerify].insert(StringPointer(&mSMTPResponse[R251])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R550])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R551])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R553])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R502])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R504])); + mSMTPResponseTree[NakVerify].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckExpand].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakExpand].insert(StringPointer(&mSMTPResponse[R550])); + mSMTPResponseTree[NakExpand].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakExpand].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakExpand].insert(StringPointer(&mSMTPResponse[R502])); + mSMTPResponseTree[NakExpand].insert(StringPointer(&mSMTPResponse[R504])); + mSMTPResponseTree[NakExpand].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckHelp].insert(StringPointer(&mSMTPResponse[R211])); + mSMTPResponseTree[AckHelp].insert(StringPointer(&mSMTPResponse[R214])); + mSMTPResponseTree[NakHelp].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakHelp].insert(StringPointer(&mSMTPResponse[R501])); + mSMTPResponseTree[NakHelp].insert(StringPointer(&mSMTPResponse[R502])); + mSMTPResponseTree[NakHelp].insert(StringPointer(&mSMTPResponse[R504])); + mSMTPResponseTree[NakHelp].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckNoop].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakNoop].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakNoop].insert(StringPointer(&mSMTPResponse[R421])); + mSMTPResponseTree[AckTurn].insert(StringPointer(&mSMTPResponse[R250])); + mSMTPResponseTree[NakTurn].insert(StringPointer(&mSMTPResponse[R502])); + mSMTPResponseTree[NakTurn].insert(StringPointer(&mSMTPResponse[R500])); + mSMTPResponseTree[NakTurn].insert(StringPointer(&mSMTPResponse[R503])); + mSMTPResponseTree[AckQuit].insert(StringPointer(&mSMTPResponse[R221])); + mSMTPResponseTree[NakQuit].insert(StringPointer(&mSMTPResponse[R500])); +} + +void SMTPResponse::createResponseBlock(void) +{ + mSMTPResponse.remove(); + mSMTPResponse.insert(&String("211")); + mSMTPResponse.insert(&String("214")); + mSMTPResponse.insert(&String("220")); + mSMTPResponse.insert(&String("221")); + mSMTPResponse.insert(&String("250")); + mSMTPResponse.insert(&String("251")); + mSMTPResponse.insert(&String("354")); + mSMTPResponse.insert(&String("421")); + mSMTPResponse.insert(&String("450")); + mSMTPResponse.insert(&String("451")); + mSMTPResponse.insert(&String("452")); + mSMTPResponse.insert(&String("500")); + mSMTPResponse.insert(&String("501")); + mSMTPResponse.insert(&String("502")); + mSMTPResponse.insert(&String("503")); + mSMTPResponse.insert(&String("504")); + mSMTPResponse.insert(&String("550")); + mSMTPResponse.insert(&String("551")); + mSMTPResponse.insert(&String("552")); + mSMTPResponse.insert(&String("553")); + mSMTPResponse.insert(&String("554")); +} + diff --git a/smtp/RESPONSE.HPP b/smtp/RESPONSE.HPP new file mode 100644 index 0000000..a95eb03 --- /dev/null +++ b/smtp/RESPONSE.HPP @@ -0,0 +1,45 @@ +#ifndef _SMTP_SMTPRESPONSE_HPP_ +#define _SMTP_SMTPRESPONSE_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_ARRAY_HPP_ +#include +#endif +#ifndef _SMTP_SMARTPOINTEREX_HPP_ +#include +#endif +#ifndef _BSPTREE_BTREE_HPP_ +#include +#endif + +class SMTPResponse +{ +public: + enum RspOrd{R211,R214,R220,R221,R250,R251,R354,R421,R450,R451,R452,R500,R501, + R502,R503,R504,R550,R551,R552,R553,R554}; + enum RspType{AckConnect,NakConnect,AckHelo,NakHelo,AckMail,NakMail,AckRecipient, + NakRecipient,AckData,NakData,AckReset,NakReset,AckSend,NakSend,AckSendOrMail, + NakSendOrMail,AckSendAndMail,NakSendAndMail,AckVerify,NakVerify,AckExpand, + NakExpand,AckHelp,NakHelp,AckNoop,NakNoop,AckTurn,NakTurn,AckQuit,NakQuit}; + SMTPResponse(void); + virtual ~SMTPResponse(); + BOOL isInResponse(const String &responseString,RspType responseType); +private: + typedef Block ResponseBlock; + typedef SmartPointerEx StringPointer; + typedef BTree ResponseTree; + + SMTPResponse(const SMTPResponse &someSMTPResponse); + SMTPResponse &operator=(const SMTPResponse &someSMTPResponse); + void createResponse(void); + void createResponseBlock(void); + void createResponseTree(void); + + ResponseBlock mSMTPResponse; + Array mSMTPResponseTree; +}; +#endif diff --git a/smtp/Release/vc50.idb b/smtp/Release/vc50.idb new file mode 100644 index 0000000..d9364f9 Binary files /dev/null and b/smtp/Release/vc50.idb differ diff --git a/smtp/SCRAPS.TXT b/smtp/SCRAPS.TXT new file mode 100644 index 0000000..3f26443 --- /dev/null +++ b/smtp/SCRAPS.TXT @@ -0,0 +1,1158 @@ + + + if(pCurrNode==mlpRootNode) + { + if(!pCurrNode->leftNode()&&!pCurrNode->rightNode()) + { + delete mlpRootNode; + mlpRootNode=0; + leaves(leaves()-1); + } + else if(!pCurrNode->rightNode()) + { + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode()); + else pParentNode->rightNode(pCurrNode->leftNode()); + } + else if(!pCurrNode->leftNode()) + { + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode()); + else pParentNode->rightNode(pCurrNode->leftNode()); + } + else + { + TreeNode *pCursorNode; + pTmpNode=pCursorNode=pCurrNode->leftNode(); + while(pTmpNode->rightNode()){pCursorNode=pTmpNode;pTmpNode=pTmpNode->rightNode();} + if(pCursorNode)pCursorNode->rightNode(0); + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pTmpNode); + else pParentNode->rightNode(pTmpNode); + } + delete pCurrNode; + leaves(leaves()-1); + +// else +// { +// pTmpNode=(pCurrNode->leftNode()?pCurrNode->leftNode():pCurrNode->rightNode()); +// delete mlpRootNode; +// mlpRootNode=pTmpNode; +// leaves(leaves()-1); +// } + } + else + { + + +#if 0 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +WORD open(void); +void writeLines(Block &stringBlock); +void saveLines(Block &stringBlock,const String &saveName); + +Console winConsole; + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + open(); + winConsole.read(); + return FALSE; +} + + +void writeLines(Block &stringBlock) +{ + for(short itemIndex=0;itemIndex &stringBlock,const String &saveName) +{ + FileHandle saveFile(saveName,FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite); + + for(short itemIndex=0;itemIndex receiveStrings; + + smtpControl.receive(receiveStrings); + for(int lineIndex=0;lineIndex +#include +#include + +SMTPClient::SMTPClient(void) +{ + mSMTPResponse.isInResponse("251",SMTPResponse::AckConnect); + createCmds(); + createResponseStrings(); +} + +SMTPClient::~SMTPClient() +{ + mWinConsole.read(); +} + +BOOL SMTPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mSMTPControl.isConnected())mSMTPControl.closeSocket(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){return FALSE;}} + else if(!hostEntry.hostByName(hostName)){return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("smtp","tcp")) + { + if(!mSMTPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mSMTPControl.openSocket()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(SMTPPort)); + } + if(!mSMTPControl.connect(internetSocketAddress)){message("unable to connect to smtp server");return FALSE;} + mSMTPControl.getSocketName(internetSocketAddress); + if(!mSMTPControl.isConnected())return FALSE; + if(!mSMTPControl.receive(responseLines)||!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckConnectResponseStrings)) + { + mSMTPControl.closeSocket(); + return FALSE; + } + return TRUE; +} + +BOOL SMTPClient::helo(const String &domainName) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||domainName.isNull())return FALSE; + controlData=mSMTPCmds[Helo]; + controlData+=" "; + controlData+=domainName; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckHeloResponseStrings))return FALSE; + return TRUE; +} + +BOOL SMTPClient::quit(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Quit]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckQuitResponseStrings))return FALSE; + return TRUE; +} + +BOOL SMTPClient::mail(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[Mail]; + controlData+=" "; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckMailResponseStrings))return FALSE; + return TRUE; +} + +BOOL SMTPClient::rcpt(const String &forwardPath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE; + controlData=mSMTPCmds[Recipient]; + controlData+=" "; + controlData+=mSMTPCmds[To]; + controlData+=forwardPath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckRecipientResponseStrings))return FALSE; + return TRUE; +} + +BOOL SMTPClient::data(const Block &mailData) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||!mailData.size())return FALSE; + controlData=mSMTPCmds[Data]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckDataResponseStrings))return FALSE; + for(int lineIndex=0;lineIndex&)mailData)[lineIndex]); + mSMTPControl.send("."); + if(!mSMTPControl.receive(responseLines))return FALSE; + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckDataResponseStrings))return FALSE; + return TRUE; +} + +BOOL SMTPClient::vrfy(const String &forwardPath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE; + controlData=mSMTPCmds[Verify]; + controlData+=" "; + controlData+=forwardPath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),mAckVerifyResponseStrings))return FALSE; + return TRUE; +} + +BOOL SMTPClient::isInResponse(const String &responseString,Block &responseStrings) +{ + if(responseString.isNull())return FALSE; + for(int itemIndex=0;itemIndex responseStrings; + mSMTPControl.receive(responseStrings); + return responseStrings.size(); +} + +// virtuals + +void SMTPClient::message(const String &messageString) +{ + mWinConsole.writeLine(messageString); +} + +void SMTPClient::message(Block &messageStrings) +{ + for(int lineIndex=0;lineIndex mAckConnectResponseStrings; + Block mNakConnectResponseStrings; + Block mAckHeloResponseStrings; + Block mNakHeloResponseStrings; + Block mAckMailResponseStrings; + Block mNakMailResponseStrings; + Block mAckRecipientResponseStrings; + Block mNakRecipientResponseStrings; + Block mAckDataResponseStrings; + Block mNakDataResponseStrings; + Block mAckResetResponseStrings; + Block mNakResetResponseStrings; + Block mAckSendResponseStrings; + Block mNakSendResponseStrings; + Block mAckSendOrMailResponseStrings; + Block mNakSendOrMailResponseStrings; + Block mAckSendAndMailResponseStrings; + Block mNakSendAndMailResponseStrings; + Block mAckVerifyResponseStrings; + Block mNakVerifyResponseStrings; + Block mAckExpandResponseStrings; + Block mNakExpandResponseStrings; + Block mAckHelpResponseStrings; + Block mNakHelpResponseStrings; + Block mAckNoopResponseStrings; + Block mNakNoopResponseStrings; + Block mAckTurnResponseStrings; + Block mNakTurnResponseStrings; + Block mAckQuitResponseStrings; + Block mNakQuitResponseStrings; + + + +void SMTPClient::createResponseStrings(void) +{ + mAckConnectResponseStrings.insert(&String("220")); + mNakConnectResponseStrings.insert(&String("421")); + mAckHeloResponseStrings.insert(&String("250")); + mNakHeloResponseStrings.insert(&String("500")); + mNakHeloResponseStrings.insert(&String("501")); + mNakHeloResponseStrings.insert(&String("504")); + mNakHeloResponseStrings.insert(&String("421")); + mAckMailResponseStrings.insert(&String("250")); + mNakMailResponseStrings.insert(&String("552")); + mNakMailResponseStrings.insert(&String("451")); + mNakMailResponseStrings.insert(&String("452")); + mNakMailResponseStrings.insert(&String("500")); + mNakMailResponseStrings.insert(&String("501")); + mNakMailResponseStrings.insert(&String("421")); + mAckRecipientResponseStrings.insert(&String("250")); + mAckRecipientResponseStrings.insert(&String("251")); + mNakRecipientResponseStrings.insert(&String("550")); + mNakRecipientResponseStrings.insert(&String("551")); + mNakRecipientResponseStrings.insert(&String("552")); + mNakRecipientResponseStrings.insert(&String("553")); + mNakRecipientResponseStrings.insert(&String("450")); + mNakRecipientResponseStrings.insert(&String("451")); + mNakRecipientResponseStrings.insert(&String("452")); + mNakRecipientResponseStrings.insert(&String("500")); + mNakRecipientResponseStrings.insert(&String("501")); + mNakRecipientResponseStrings.insert(&String("503")); + mNakRecipientResponseStrings.insert(&String("421")); + mAckDataResponseStrings.insert(&String("354")); + mAckDataResponseStrings.insert(&String("250")); + mNakDataResponseStrings.insert(&String("552")); + mNakDataResponseStrings.insert(&String("554")); + mNakDataResponseStrings.insert(&String("451")); + mNakDataResponseStrings.insert(&String("452")); + mNakDataResponseStrings.insert(&String("451")); + mNakDataResponseStrings.insert(&String("554")); + mNakDataResponseStrings.insert(&String("500")); + mNakDataResponseStrings.insert(&String("501")); + mNakDataResponseStrings.insert(&String("503")); + mNakDataResponseStrings.insert(&String("421")); + mAckResetResponseStrings.insert(&String("250")); + mNakResetResponseStrings.insert(&String("500")); + mNakResetResponseStrings.insert(&String("501")); + mNakResetResponseStrings.insert(&String("504")); + mNakResetResponseStrings.insert(&String("421")); + mAckSendResponseStrings.insert(&String("250")); + mNakSendResponseStrings.insert(&String("552")); + mNakSendResponseStrings.insert(&String("451")); + mNakSendResponseStrings.insert(&String("452")); + mNakSendResponseStrings.insert(&String("500")); + mNakSendResponseStrings.insert(&String("501")); + mNakSendResponseStrings.insert(&String("502")); + mNakSendResponseStrings.insert(&String("421")); + mAckSendOrMailResponseStrings.insert(&String("250")); + mNakSendOrMailResponseStrings.insert(&String("552")); + mNakSendOrMailResponseStrings.insert(&String("451")); + mNakSendOrMailResponseStrings.insert(&String("452")); + mNakSendOrMailResponseStrings.insert(&String("500")); + mNakSendOrMailResponseStrings.insert(&String("501")); + mNakSendOrMailResponseStrings.insert(&String("502")); + mNakSendOrMailResponseStrings.insert(&String("421")); + mAckSendAndMailResponseStrings.insert(&String("250")); + mNakSendAndMailResponseStrings.insert(&String("552")); + mNakSendAndMailResponseStrings.insert(&String("451")); + mNakSendAndMailResponseStrings.insert(&String("452")); + mNakSendAndMailResponseStrings.insert(&String("500")); + mNakSendAndMailResponseStrings.insert(&String("501")); + mNakSendAndMailResponseStrings.insert(&String("502")); + mNakSendAndMailResponseStrings.insert(&String("421")); + mAckVerifyResponseStrings.insert(&String("250")); + mAckVerifyResponseStrings.insert(&String("251")); + mNakVerifyResponseStrings.insert(&String("550")); + mNakVerifyResponseStrings.insert(&String("551")); + mNakVerifyResponseStrings.insert(&String("553")); + mNakVerifyResponseStrings.insert(&String("500")); + mNakVerifyResponseStrings.insert(&String("501")); + mNakVerifyResponseStrings.insert(&String("502")); + mNakVerifyResponseStrings.insert(&String("504")); + mNakVerifyResponseStrings.insert(&String("421")); + mAckExpandResponseStrings.insert(&String("250")); + mNakExpandResponseStrings.insert(&String("550")); + mNakExpandResponseStrings.insert(&String("500")); + mNakExpandResponseStrings.insert(&String("501")); + mNakExpandResponseStrings.insert(&String("502")); + mNakExpandResponseStrings.insert(&String("504")); + mNakExpandResponseStrings.insert(&String("421")); + mAckHelpResponseStrings.insert(&String("211")); + mAckHelpResponseStrings.insert(&String("214")); + mNakHelpResponseStrings.insert(&String("500")); + mNakHelpResponseStrings.insert(&String("501")); + mNakHelpResponseStrings.insert(&String("502")); + mNakHelpResponseStrings.insert(&String("504")); + mNakHelpResponseStrings.insert(&String("421")); + mAckNoopResponseStrings.insert(&String("250")); + mNakNoopResponseStrings.insert(&String("500")); + mNakNoopResponseStrings.insert(&String("421")); + mAckTurnResponseStrings.insert(&String("250")); + mNakTurnResponseStrings.insert(&String("502")); + mNakTurnResponseStrings.insert(&String("500")); + mNakTurnResponseStrings.insert(&String("503")); + mAckQuitResponseStrings.insert(&String("221")); + mNakQuitResponseStrings.insert(&String("500")); +} + + + + + +// BOOL isInResponse(const String &responseString,RspType responseType); + + + + mailData.insert(&String("subject: My SMTP Client")); + mailData.insert(&String("date: 09/29/1997")); + mailData.insert(&String("from: Sean Kessler ")); + mailData.insert(&String("to: Russ (Big Guy) Le Blang ")); + mailData.insert(&String("Hey Russ,")); + + +// smtpClient.verify("europa@li.net"); // verify command + + + +template +void BTree::remove(const T &someItem,TreeNode *pCurrNode,TreeNode *pParentNode) +{ + TreeNode *pTmpNode; + + if(!pCurrNode)return; + if(someItemitem())remove(someItem,pCurrNode->leftNode(),pCurrNode); + else if(someItem>pCurrNode->item())remove(someItem,pCurrNode->rightNode(),pCurrNode); + else + { + if(pCurrNode==mlpRootNode) + { + if(!pCurrNode->leftNode()&&!pCurrNode->rightNode()) + { + delete mlpRootNode; + mlpRootNode=0; + leaves(leaves()-1); + } + else if(!pCurrNode->rightNode()) + { + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode()); + else pParentNode->rightNode(pCurrNode->leftNode()); + } + else if(!pCurrNode->leftNode()) + { + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode()); + else pParentNode->rightNode(pCurrNode->leftNode()); + } + else + { + TreeNode *pCursorNode; + pTmpNode=pCursorNode=pCurrNode->leftNode(); + while(pTmpNode->rightNode()){pCursorNode=pTmpNode;pTmpNode=pTmpNode->rightNode();} + if(pCursorNode)pCursorNode->rightNode(0); + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pTmpNode); + else pParentNode->rightNode(pTmpNode); + } + delete pCurrNode; + leaves(leaves()-1); + +// else +// { +// pTmpNode=(pCurrNode->leftNode()?pCurrNode->leftNode():pCurrNode->rightNode()); +// delete mlpRootNode; +// mlpRootNode=pTmpNode; +// leaves(leaves()-1); +// } + } + else + { + if(!pCurrNode->leftNode()&&!pCurrNode->rightNode()) + { + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(0); + else pParentNode->rightNode(0); + } + else if(!pCurrNode->rightNode()) + { + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->leftNode()); + else pParentNode->rightNode(pCurrNode->leftNode()); + } + else if(!pCurrNode->leftNode()) + { + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pCurrNode->rightNode()); + else pParentNode->rightNode(pCurrNode->rightNode()); + } + else + { + TreeNode *pCursorNode; + pTmpNode=pCursorNode=pCurrNode->leftNode(); + while(pTmpNode->rightNode()){pCursorNode=pTmpNode;pTmpNode=pTmpNode->rightNode();} + if(pCursorNode)pCursorNode->rightNode(0); + if(pParentNode->leftNode()==pCurrNode)pParentNode->leftNode(pTmpNode); + else pParentNode->rightNode(pTmpNode); + } + delete pCurrNode; + leaves(leaves()-1); + } + } +} + + + + + + + +// pRootNode->rightNode(mlpRootNode->rightNode()); + pRootNode->rightNode(pCurrNode->rightNode); + + + +//#include +//#include + +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ +// Console winConsole; + BTree wordTree; + Block wordBlock; + String lineString; + +// wordTree.insert(PureDWORD(500)); // root removal with both subtrees +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(400)); +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // root removal with left subtree +// wordTree.insert(PureDWORD(400)); +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // root removal with right subtree +// wordTree.insert(PureDWORD(600)); +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // root removal with no subtrees +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // subtree removal with both subtrees +// wordTree.insert(PureDWORD(250)); +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(275)); +// wordTree.insert(PureDWORD(650)); +// wordTree.insert(PureDWORD(249)); +// wordTree.remove(PureDWORD(250)); + +// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree +// wordTree.insert(PureDWORD(250)); +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(275)); +// wordTree.insert(PureDWORD(650)); +// wordTree.remove(PureDWORD(250)); + +// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree +// wordTree.insert(PureDWORD(250)); +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(650)); +// wordTree.remove(PureDWORD(250)); + + wordTree.treeItems(wordBlock); +// for(int lineIndex=0;lineIndex mailData; + + mailData.insert(&String("TEST LINE 1")); + mailData.insert(&String("TEST LINE 2")); + mailData.insert(&String("TEST LINE 3")); + + SMTPClient smtpClient; + if(!smtpClient.open("europa.com"))return FALSE; // open server + if(!smtpClient.helo("sean@europa.com"))return FALSE; // identify myself + if(!smtpClient.verify("sean@europa.com"))return FALSE; // verify + if(!smtpClient.send("sean@europa.com"))return FALSE; // send(reversePath) + if(!smtpClient.expand("mailhost.li.net"))return FALSE; // expand(mailList) + if(!smtpClient.sendAndMail("europa@li.net"))return FALSE; // sendAndMail(reversePath) + if(!smtpClient.sendOrMail("europa@li.net"))return FALSE; // sendOrMail(reversePath) + if(!smtpClient.reset())return FALSE; // reset server + if(!smtpClient.help("send"))return FALSE; // help(command) + +// smtpClient.mail("sean@europa.com"); // send in reverse path for mail (from) +// if(!smtpClient.rcpt("sean@europa.com"))return FALSE; // specify recipient of mail +// if(!smtpClient.data(mailData))return FALSE; // message text lines + smtpClient.quit(); + + +// if(!smtpClient.open("mailhost.li.net"))return FALSE; // europa.com +// if(!smtpClient.helo("europa@li.net"))return FALSE; // identify myself +// if(!smtpClient.noop())return FALSE; // ping smtp server +// smtpClient.mail("europa@li.net"); // send in reverse path for mail (from) +// if(!smtpClient.rcpt("europa@li.net"))return FALSE; // specify recipient of mail +// if(!smtpClient.data(mailData))return FALSE; // message text lines +// smtpClient.quit(); +#endif + return FALSE; +} + + +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ +// Console winConsole; + BTree wordTree; + Block wordBlock; + String lineString; + +// wordTree.insert(PureDWORD(500)); // root removal with both subtrees +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(400)); +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // root removal with left subtree +// wordTree.insert(PureDWORD(400)); +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // root removal with right subtree +// wordTree.insert(PureDWORD(600)); +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // root removal with no subtrees +// wordTree.remove(PureDWORD(500)); + +// wordTree.insert(PureDWORD(500)); // subtree removal with both subtrees +// wordTree.insert(PureDWORD(250)); +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(275)); +// wordTree.insert(PureDWORD(650)); +// wordTree.insert(PureDWORD(249)); +// wordTree.remove(PureDWORD(250)); + +// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree +// wordTree.insert(PureDWORD(250)); +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(275)); +// wordTree.insert(PureDWORD(650)); +// wordTree.remove(PureDWORD(250)); + +// wordTree.insert(PureDWORD(500)); // subtree removal with right subtree +// wordTree.insert(PureDWORD(250)); +// wordTree.insert(PureDWORD(600)); +// wordTree.insert(PureDWORD(650)); +// wordTree.remove(PureDWORD(250)); + + wordTree.treeItems(wordBlock); +// for(int lineIndex=0;lineIndex mailData; + + mailData.insert(&String("TEST LINE 1")); + mailData.insert(&String("TEST LINE 2")); + mailData.insert(&String("TEST LINE 3")); + + SMTPClient smtpClient; + if(!smtpClient.open("europa.com"))return FALSE; // open server + if(!smtpClient.helo("sean@europa.com"))return FALSE; // identify myself + if(!smtpClient.verify("sean@europa.com"))return FALSE; // verify + if(!smtpClient.send("sean@europa.com"))return FALSE; // send(reversePath) + if(!smtpClient.expand("mailhost.li.net"))return FALSE; // expand(mailList) + if(!smtpClient.sendAndMail("europa@li.net"))return FALSE; // sendAndMail(reversePath) + if(!smtpClient.sendOrMail("europa@li.net"))return FALSE; // sendOrMail(reversePath) + if(!smtpClient.reset())return FALSE; // reset server + if(!smtpClient.help("send"))return FALSE; // help(command) + smtpClient.quit(); +#endif + + + +void MailDlg::sendMail(MailInfo &mailInfo) +{ + Block mailData; + String headerString; + +// SMTPClient smtpClient; +// smtpClient.open(mailInfo.server()); +// smtpClient.mail(mailInfo.reversePath()); +// smtpClient.rcpt(mailInfo.toField()); + open(mailInfo.server()); + mail(mailInfo.reversePath()); + rcpt(mailInfo.toField()); + + headerString="subject:"; + headerString+=mailInfo.subjectField(); + mailData.insert(&headerString); + SystemTime systemTime; + headerString="date:"; + headerString+=(String)systemTime; + mailData.insert(&headerString); + for(int lineIndex=0;lineIndex &lineStrings,BOOL initBlock)const +{ + Profile iniProfile; + char readBuff[45]; + int readCount; + int byteCount; + int lineCount; + char *ptrBuff; + String outLine; + int ch; + + if(initBlock)lineStrings.remove(); + if(srcPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + iniProfile.makeFileName(srcPathFileName); + ::sprintf(outLine,"begin %d %s\n",644,srcPathFileName); + lineStrings.insert(&outLine); + Progress encodeProgress(parentWindow,srcPathFileName); + encodeProgress.canCancel(TRUE); + encodeProgress.show(TRUE); + encodeProgress.setText("encoding... (press ESC to cancel)."); + while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;} + readView.rewind(); + encodeProgress.range(lineCount); + while(readCount=readView.read(readBuff,sizeof(readBuff))) + { + String lineString; + lineString+=(char)chEncode(readCount); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + ch=*ptrBuff>>2; + lineString+=(char)chEncode(ch); + ch=(*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F; + lineString+=(char)chEncode(ch); + ch=(ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03; + lineString+=(char)chEncode(ch); + ch=ptrBuff[2]&0x3F; + lineString+=(char)chEncode(ch); + parentWindow.yieldTask(); + } + lineString+='\n'; + lineStrings.insert(&lineString); + encodeProgress++; + if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;} + if(readCount!=45)break; + } + ch=('\0'?('\0'&0x3F)+' ':'`'); + String lastLine; + lastLine+=(char)ch; + lastLine+='\n'; + lineStrings.insert(&lastLine); + lineStrings.insert(&String("end")); + return TRUE; +} +#endif + + + +#include + FileHandle writeFile("uuencode.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + for(int lineIndex=0;lineIndex + FileHandle writeFile("uuencode.txt",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + for(int lineIndex=0;lineIndex +#include +#include +#include +#include +#include + +BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block &lineStrings,BOOL initBlock)const +{ + Profile iniProfile; + char readBuff[45]; + int readCount; + int byteCount; + int lineCount; + char *ptrBuff; + String outLine; + int ch; + + if(initBlock)lineStrings.remove(); + if(srcPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + iniProfile.makeFileName(srcPathFileName); + srcPathFileName.removeTokens("\\/"); + ::sprintf(outLine,"begin %d %s",644,(char*)srcPathFileName); + lineStrings.insert(&outLine); + Progress encodeProgress(parentWindow,srcPathFileName); + encodeProgress.canCancel(TRUE); + encodeProgress.show(TRUE); + encodeProgress.setText("encoding... (press ESC to cancel)."); + while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;} + readView.rewind(); + encodeProgress.range(lineCount); + while(readCount=readView.read(readBuff,sizeof(readBuff))) + { + String lineString; + char *ptrLine=(LPSTR)lineString; + *(ptrLine++)=chEncode(readCount); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + parentWindow.yieldTask(); + } +// *(ptrLine++)=0x0D; +// *(ptrLine++)=0x0A; + lineStrings.insert(&lineString); + encodeProgress++; + if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;} + if(readCount!=sizeof(readBuff))break; + } + String lastLine; + lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`'); +// lastLine+="\r\n"; + lineStrings.insert(&lastLine); + lineStrings.insert(&String("end")); + return TRUE; +} + +#if 0 +BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block &lineStrings,BOOL initBlock)const +{ + Profile iniProfile; + char readBuff[45]; + int readCount; + int byteCount; + int lineCount; + char *ptrBuff; + String outLine; + int ch; + + if(initBlock)lineStrings.remove(); + if(srcPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + iniProfile.makeFileName(srcPathFileName); + srcPathFileName.removeTokens("\\/"); + ::sprintf(outLine,"begin %d %s\r\n",644,srcPathFileName); + lineStrings.insert(&outLine); + Progress encodeProgress(parentWindow,srcPathFileName); + encodeProgress.canCancel(TRUE); + encodeProgress.show(TRUE); + encodeProgress.setText("encoding... (press ESC to cancel)."); + while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;} + readView.rewind(); + encodeProgress.range(lineCount); + while(readCount=readView.read(readBuff,sizeof(readBuff))) + { + String lineString; + char *ptrLine=(LPSTR)lineString; + *(ptrLine++)=chEncode(readCount); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + parentWindow.yieldTask(); + } + *(ptrLine++)=0x0D; + *(ptrLine++)=0x0A; + lineStrings.insert(&lineString); + encodeProgress++; + if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;} + if(readCount!=sizeof(readBuff))break; + } + String lastLine; + lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`'); + lastLine+="\r\n"; + lineStrings.insert(&lastLine); + lineStrings.insert(&String("end")); + return TRUE; +} +#endif + + + +// void fatalThreadExit(void); + + + +//inline +//void SMTPThread::fatalThreadExit(void) +//{ +// MessageThread::fatalThreadExit(); +//} diff --git a/smtp/SMTP.BAK b/smtp/SMTP.BAK new file mode 100644 index 0000000..1976c34 --- /dev/null +++ b/smtp/SMTP.BAK @@ -0,0 +1,1526 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=smtp - Win32 Debug +!MESSAGE No configuration specified. Defaulting to smtp - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "smtp - Win32 Release" && "$(CFG)" != "smtp - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Smtp.mak" CFG="smtp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "smtp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "smtp - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "smtp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Smtp.exe" + +CLEAN : + -@erase "$(INTDIR)\Mail.res" + -@erase "$(INTDIR)\maildlg.obj" + -@erase "$(INTDIR)\mailinfo.obj" + -@erase "$(INTDIR)\mailreg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\response.obj" + -@erase "$(INTDIR)\smtp.obj" + -@erase "$(INTDIR)\smtpthrd.obj" + -@erase "$(INTDIR)\Srvrdlg.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(OUTDIR)\Smtp.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Smtp.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Mail.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Smtp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Smtp.pdb" /machine:I386 /out:"$(OUTDIR)/Smtp.exe" +LINK32_OBJS= \ + "$(INTDIR)\Mail.res" \ + "$(INTDIR)\maildlg.obj" \ + "$(INTDIR)\mailinfo.obj" \ + "$(INTDIR)\mailreg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\response.obj" \ + "$(INTDIR)\smtp.obj" \ + "$(INTDIR)\smtpthrd.obj" \ + "$(INTDIR)\Srvrdlg.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" \ + "..\exe\msthread.lib" \ + "..\exe\statbar.lib" + +"$(OUTDIR)\Smtp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Smtp.exe" + +CLEAN : + -@erase "$(INTDIR)\maildlg.obj" + -@erase "$(INTDIR)\mailinfo.obj" + -@erase "$(INTDIR)\mailreg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\response.obj" + -@erase "$(INTDIR)\smtp.obj" + -@erase "$(INTDIR)\smtpthrd.obj" + -@erase "$(INTDIR)\Srvrdlg.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(OUTDIR)\Smtp.exe" + -@erase "$(OUTDIR)\Smtp.map" + -@erase ".\mail.res" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo"mail.res" /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"mail.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Smtp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib wsock32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib wsock32.lib winmm.lib comctl32.lib /nologo\ + /subsystem:windows /pdb:none /map:"$(INTDIR)/Smtp.map" /debug /machine:I386\ + /out:"$(OUTDIR)/Smtp.exe" +LINK32_OBJS= \ + "$(INTDIR)\maildlg.obj" \ + "$(INTDIR)\mailinfo.obj" \ + "$(INTDIR)\mailreg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\response.obj" \ + "$(INTDIR)\smtp.obj" \ + "$(INTDIR)\smtpthrd.obj" \ + "$(INTDIR)\Srvrdlg.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" \ + "..\exe\msthread.lib" \ + "..\exe\statbar.lib" \ + ".\mail.res" + +"$(OUTDIR)\Smtp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "smtp - Win32 Release" +# Name "smtp - Win32 Debug" + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\smtp.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_SMTP_=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\smtp.obj" : $(SOURCE) $(DEP_CPP_SMTP_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_SMTP_=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\smtp.obj" : $(SOURCE) $(DEP_CPP_SMTP_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mssocket.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\response.cpp +DEP_CPP_RESPO=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\response.obj" : $(SOURCE) $(DEP_CPP_RESPO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\maildlg.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_MAILD=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\Statbar.hpp"\ + {$(INCLUDE)}"\Statbar\Statinfo.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\maildlg.obj" : $(SOURCE) $(DEP_CPP_MAILD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_MAILD=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\Statbar.hpp"\ + {$(INCLUDE)}"\Statbar\Statinfo.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\maildlg.obj" : $(SOURCE) $(DEP_CPP_MAILD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mail.rc +DEP_RSC_MAIL_=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +!IF "$(CFG)" == "smtp - Win32 Release" + + +"$(INTDIR)\Mail.res" : $(SOURCE) $(DEP_RSC_MAIL_) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + + +".\mail.res" : $(SOURCE) $(DEP_RSC_MAIL_) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Srvrdlg.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_SRVRD=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_SRVRD=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\statbar.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\smtpthrd.cpp +DEP_CPP_SMTPT=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\smtpthrd.obj" : $(SOURCE) $(DEP_CPP_SMTPT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\msthread.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mailreg.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_MAILR=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\mailreg.obj" : $(SOURCE) $(DEP_CPP_MAILR) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_MAILR=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\mailreg.obj" : $(SOURCE) $(DEP_CPP_MAILR) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mailinfo.cpp +DEP_CPP_MAILI=\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\mailinfo.obj" : $(SOURCE) $(DEP_CPP_MAILI) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\uuencode.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commctrl.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Direct.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commctrl.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/smtp/SMTP.BMP b/smtp/SMTP.BMP new file mode 100644 index 0000000..8910f16 Binary files /dev/null and b/smtp/SMTP.BMP differ diff --git a/smtp/SMTP.CPP b/smtp/SMTP.CPP new file mode 100644 index 0000000..e8941ac --- /dev/null +++ b/smtp/SMTP.CPP @@ -0,0 +1,344 @@ +#include +#include +#include + +SMTPClient::SMTPClient(void) +: mSpace(" ") +{ + createCmds(); +} + +SMTPClient::~SMTPClient() +{ + mSMTPControl.destroy(); +} + +BOOL SMTPClient::open(const String &hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + Block responseLines; + INETSocketAddress internetSocketAddress; + + if(hostName.isNull())return FALSE; + if(mSMTPControl.isConnected())mSMTPControl.destroy(); + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName+String("."));return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName+String("."));return FALSE;} + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + internetSocketAddress.internetAddress((hostEntry.addresses())[0]); + if(serverEntry.serviceByName("smtp","tcp")) + { + if(!mSMTPControl.create()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(serverEntry.port()); + } + else + { + if(!mSMTPControl.create()){message("unable to create socket.");return FALSE;} + internetSocketAddress.family(PF_INET); + internetSocketAddress.port(htons(SMTPPort)); + } + if(!mSMTPControl.connect(internetSocketAddress)){message("unable to connect to smtp server");return FALSE;} + mSMTPControl.getSocketName(internetSocketAddress); + if(!mSMTPControl.isConnected())return FALSE; + if(!mSMTPControl.receive(responseLines)||!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckConnect)) + { + mSMTPControl.destroy(); + return FALSE; + } + return TRUE; +} + +BOOL SMTPClient::helo(const String &domainName) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||domainName.isNull())return FALSE; + controlData=mSMTPCmds[Helo]; + controlData+=mSpace; + controlData+=domainName; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckHelo))return FALSE; + return TRUE; +} + +BOOL SMTPClient::quit(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Quit]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckQuit))return FALSE; + return TRUE; +} + +BOOL SMTPClient::mail(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[Mail]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckMail))return FALSE; + return TRUE; +} + +BOOL SMTPClient::rcpt(const String &forwardPath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE; + controlData=mSMTPCmds[Recipient]; + controlData+=mSpace; + controlData+=mSMTPCmds[To]; + controlData+=forwardPath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckRecipient))return FALSE; + return TRUE; +} + +BOOL SMTPClient::data(const Block &mailData) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||!mailData.size())return FALSE; + controlData=mSMTPCmds[Data]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckData))return FALSE; + for(int lineIndex=0;lineIndex&)mailData)[lineIndex]); + mSMTPControl.send("."); + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckData))return FALSE; + return TRUE; +} + +BOOL SMTPClient::verify(const String &forwardPath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE; + controlData=mSMTPCmds[Verify]; + controlData+=mSpace; + controlData+=forwardPath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckVerify))return FALSE; + return TRUE; +} + +BOOL SMTPClient::expand(const String &mailList) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||mailList.isNull())return FALSE; + controlData=mSMTPCmds[Expand]; + controlData+=mSpace; + controlData+=mailList; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckExpand))return FALSE; + return TRUE; +} + +BOOL SMTPClient::send(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[Send]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSend))return FALSE; + return TRUE; +} + +BOOL SMTPClient::sendOrMail(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[SendOrMail]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSendOrMail))return FALSE; + return TRUE; +} + +BOOL SMTPClient::sendAndMail(const String &reversePath) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE; + controlData=mSMTPCmds[SendAndMail]; + controlData+=mSpace; + controlData+=mSMTPCmds[From]; + controlData+=reversePath; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSendAndMail))return FALSE; + return TRUE; +} + +BOOL SMTPClient::reset(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Reset]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckReset))return FALSE; + return TRUE; +} + +BOOL SMTPClient::help(const String &commandName) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Help]; + if(!commandName.isNull()) + { + controlData+=mSpace; + controlData+=commandName; + } + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckHelp))return FALSE; + return TRUE; +} + +BOOL SMTPClient::noop(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Noop]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckNoop))return FALSE; + return TRUE; +} + +BOOL SMTPClient::turn(void) +{ + String controlData; + Block responseLines; + + if(!mSMTPControl.isConnected())return FALSE; + controlData=mSMTPCmds[Turn]; + if(!putControlData(controlData,FALSE))return FALSE; + if(!mSMTPControl.receive(responseLines))return FALSE; + message(responseLines); + if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckTurn))return FALSE; + return TRUE; +} + +void SMTPClient::createCmds(void) +{ + mSMTPCmds.remove(); + mSMTPCmds.insert(&String("HELO")); + mSMTPCmds.insert(&String("QUIT")); + mSMTPCmds.insert(&String("MAIL")); + mSMTPCmds.insert(&String("FROM:")); + mSMTPCmds.insert(&String("RCPT")); + mSMTPCmds.insert(&String("TO:")); + mSMTPCmds.insert(&String("DATA")); + mSMTPCmds.insert(&String("VRFY")); + mSMTPCmds.insert(&String("EXPN")); + mSMTPCmds.insert(&String("SEND")); + mSMTPCmds.insert(&String("SOML")); + mSMTPCmds.insert(&String("SAML")); + mSMTPCmds.insert(&String("TURN")); + mSMTPCmds.insert(&String("RSET")); + mSMTPCmds.insert(&String("HELP")); + mSMTPCmds.insert(&String("NOOP")); +} + +WORD SMTPClient::putControlData(const String &stringData,WORD waitForResponse) +{ + if(!mSMTPControl.isConnected())return FALSE; + if(!mSMTPControl.send(stringData)) + { + mSMTPControl.destroy(); + String errorString(String("error sending '")+stringData+String("' to SMTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + if(waitForResponse&&!getControlData()) + { + mSMTPControl.destroy(); + String errorString(String("error reading result of '")+stringData+String("' command from NNTP server.")); + message(errorString); + errorString+="\n"; + ::OutputDebugString(errorString); + return FALSE; + } + return TRUE; +} + +WORD SMTPClient::getControlData(void) +{ + Block responseStrings; + mSMTPControl.receive(responseStrings); + return responseStrings.size(); +} + +// virtuals + +void SMTPClient::message(const String &messageString) +{ +} + +void SMTPClient::message(Block &messageStrings) +{ +} diff --git a/smtp/SMTP.HPP b/smtp/SMTP.HPP new file mode 100644 index 0000000..8786c64 --- /dev/null +++ b/smtp/SMTP.HPP @@ -0,0 +1,80 @@ +#ifndef _SMTP_SMTPCLIENT_HPP_ +#define _SMTP_SMTPCLIENT_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_CONSOLE_HPP_ +#include +#endif +#ifndef _SMTP_SMTPRESPONSE_HPP_ +#include +#endif + +class String; + +class SMTPClient +{ +public: + SMTPClient(void); + virtual ~SMTPClient(); + BOOL open(const String &hostName); + void close(void); + BOOL helo(const String &domainName); + BOOL mail(const String &reversePath); + BOOL rcpt(const String &forwardPath); + BOOL data(const Block &mailData); + BOOL verify(const String &forwardPath); + BOOL expand(const String &mailList); + BOOL send(const String &reversePath); + BOOL sendOrMail(const String &reversePath); + BOOL sendAndMail(const String &reversePath); + BOOL help(const String &commandName=String()); + BOOL noop(void); + BOOL reset(void); + BOOL turn(void); + BOOL quit(void); + BOOL isConnected(void)const; +protected: + virtual void message(const String &messageString); + virtual void message(Block &messageStrings); +private: + enum {SMTPPort=25}; + enum SMTPCmds{Helo,Quit,Mail,From,Recipient,To,Data,Verify,Expand,Send,SendOrMail,SendAndMail,Turn,Reset,Help,Noop}; + SMTPClient(const SMTPClient &someSMTPClient); + SMTPClient &operator=(const SMTPClient &someSMTPClient); + WORD putControlData(const String &stringData,WORD waitForResponse=TRUE); + BOOL isInResponse(const String &responseString,SMTPResponse::RspType responseType); + WORD getControlData(void); + void createCmds(void); + + SMTPResponse mSMTPResponse; + Socket mSMTPControl; + WSASystem mWSASystem; + Block mSMTPCmds; + String mSpace; +}; + +inline +BOOL SMTPClient::isInResponse(const String &responseString,SMTPResponse::RspType responseType) +{ + return mSMTPResponse.isInResponse(responseString,responseType); +} + +inline +BOOL SMTPClient::isConnected(void)const +{ + return mSMTPControl.isConnected(); +} + +inline +void SMTPClient::close(void) +{ + mSMTPControl.destroy(); +} +#endif \ No newline at end of file diff --git a/smtp/SMTP.ICO b/smtp/SMTP.ICO new file mode 100644 index 0000000..d4aab18 Binary files /dev/null and b/smtp/SMTP.ICO differ diff --git a/smtp/SMTP.PLG b/smtp/SMTP.PLG new file mode 100644 index 0000000..25ed56a --- /dev/null +++ b/smtp/SMTP.PLG @@ -0,0 +1,53 @@ + + +
+

Build Log

+

+--------------------Configuration: smtp - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP33.tmp" with contents +[ +/nologo /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\smtp\maildlg.cpp" +"D:\work\smtp\mailreg.cpp" +"D:\work\smtp\Main.cpp" +"D:\work\smtp\Srvrdlg.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP33.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP34.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib wsock32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /pdb:none /map:".\msvcobj/Smtp.map" /debug /machine:I386 /out:".\msvcobj/Smtp.exe" +.\msvcobj\maildlg.obj +.\msvcobj\mailinfo.obj +.\msvcobj\mailreg.obj +.\msvcobj\Main.obj +.\msvcobj\response.obj +.\msvcobj\smtp.obj +.\msvcobj\smtpthrd.obj +.\msvcobj\Srvrdlg.obj +.\msvcobj\uuencode.obj +.\mail.res +\work\exe\mscommon.lib +\work\exe\mssocket.lib +\work\exe\statbar.lib +\work\exe\msthread.lib +\work\exe\msbsp.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP34.tmp" +

Output Window

+Compiling... +maildlg.cpp +mailreg.cpp +Main.cpp +Srvrdlg.cpp +Linking... + Creating library .\msvcobj/Smtp.lib and object .\msvcobj/Smtp.exp + + + +

Results

+Smtp.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/smtp/SMTP.~IC b/smtp/SMTP.~IC new file mode 100644 index 0000000..694f632 Binary files /dev/null and b/smtp/SMTP.~IC differ diff --git a/smtp/SMTPTHRD.CPP b/smtp/SMTPTHRD.CPP new file mode 100644 index 0000000..142fd1f --- /dev/null +++ b/smtp/SMTPTHRD.CPP @@ -0,0 +1,82 @@ +#include + +#if defined(_MSC_VER) +#pragma warning(disable:4355) +#endif +SMTPThread::SMTPThread(void) +: mStartTime(0), mDeltaTime(0) +{ + mThreadHandler.setCallback(this,&SMTPThread::threadHandler); + mHookHandler.setCallback(this,&SMTPThread::hookHandler); + mEventHandlers.size((MsgPostOpen-MsgPreOpen)+1); + MessageThread::insertHandler(&mThreadHandler); + mBlockHooker.setHandler(&mHookHandler); +} + +SMTPThread::SMTPThread(const SMTPThread &someSMTPThread) +{ // private implementation + mThreadHandler.setCallback(this,&SMTPThread::threadHandler); + MessageThread::insertHandler(&mThreadHandler); +} + +SMTPThread::~SMTPThread() +{ + stop(); + MessageThread::removeHandler(&mThreadHandler); +} + +CallbackData::ReturnType SMTPThread::hookHandler(CallbackData &someCallbackData) +{ + mDeltaTime=(::GetTickCount()-mStartTime); + if(mDeltaTime>TimeOut){::OutputDebugString("SMTPThread::hookHandler TIMEOUT\n");return TRUE;} + return (CallbackData::ReturnType)FALSE; +} + +DWORD SMTPThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(MsgOpen==someThreadMessage.userDataOne())handleOpen((String*)someThreadMessage.userDataTwo()); + break; + } + return FALSE; +} + +void SMTPThread::handleOpen(String *pServerName) +{ + ThreadMessage openMessage; + String serverName(*pServerName); + int currentPriority; + BOOL openResult; + + delete pServerName; + currentPriority=::GetThreadPriority(::GetCurrentThread()); + ::SetThreadPriority(::GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL); + if(callHandler(openMessage,MsgPreOpen)) + { + ::SetThreadPriority(::GetCurrentThread(),currentPriority); + return; + } + mStartTime=::GetTickCount(); + mBlockHooker.hookBlock(); + SMTPClient::open(serverName); + mBlockHooker.unhookBlock(); + openMessage.userDataOne(isConnected()); + ::SetThreadPriority(::GetCurrentThread(),currentPriority); + callHandler(openMessage,MsgOpen); + callHandler(openMessage,MsgPostOpen); + SMTPClient::close(); +} + +BOOL SMTPThread::open(const String &serverName) +{ + String *pString=new String(serverName); + ThreadMessage openMessage(ThreadMessage::TM_USER,MsgOpen,(LONG)pString); + return postMessage(openMessage); +} + diff --git a/smtp/SMTPTHRD.HPP b/smtp/SMTPTHRD.HPP new file mode 100644 index 0000000..4761d88 --- /dev/null +++ b/smtp/SMTPTHRD.HPP @@ -0,0 +1,62 @@ +#ifndef _SMTP_SMTPTHREAD_HPP_ +#define _SMTP_SMTPTHREAD_HPP_ +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif +#ifndef _SMTP_SMTPCLIENT_HPP_ +#include +#endif +#ifndef _SOCKET_BLOCKHOOKER_HPP_ +#include +#endif + +class SMTPThread : private MessageThread, public SMTPClient +{ +public: + enum HandlerType{MsgPreOpen,MsgOpen,MsgPostOpen}; + SMTPThread(void); + SMTPThread(const SMTPThread &someSMTPThread); + virtual ~SMTPThread(); + BOOL open(const String &serverName); + void insertHandler(ThreadCallbackPointer pThreadCallback,HandlerType typeHandler); + void removeHandler(HandlerType typeHandler); + void stop(void); +private: + enum {TimeOut=10000}; + void handleOpen(String *pServerName); + DWORD callHandler(ThreadMessage &someThreadMessage,HandlerType typeHandler); + DWORD threadHandler(ThreadMessage &someThreadMessage); + CallbackData::ReturnType hookHandler(CallbackData &someCallbackData); + + ThreadCallback mThreadHandler; + Array mEventHandlers; + Callback mHookHandler; + BlockHooker mBlockHooker; + DWORD mStartTime; + DWORD mDeltaTime; +}; + +inline +void SMTPThread::insertHandler(ThreadCallbackPointer pThreadCallback,HandlerType typeHandler) +{ + mEventHandlers[typeHandler]=ThreadCallbackPointer(pThreadCallback); +} + +inline +void SMTPThread::removeHandler(HandlerType typeHandler) +{ + mEventHandlers[typeHandler]=ThreadCallbackPointer(); +} + +inline +DWORD SMTPThread::callHandler(ThreadMessage &someThreadMessage,HandlerType typeHandler) +{ + return mEventHandlers[typeHandler].callback(someThreadMessage); +} + +inline +void SMTPThread::stop(void) +{ + MessageThread::stop(); +} +#endif diff --git a/smtp/SRVRDLG.CPP b/smtp/SRVRDLG.CPP new file mode 100644 index 0000000..f21c26b --- /dev/null +++ b/smtp/SRVRDLG.CPP @@ -0,0 +1,37 @@ +#include + +WORD ServerDialog::performDialog(String &serverName) +{ + ::DialogBoxParam(processInstance(),(LPSTR)"ServerDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return FALSE; +} + +CallbackData::ReturnType ServerDialog::initDialogHandler(CallbackData &someCallbackData) +{ + if(!mMailReg.server().isNull())setText(ServerName,mMailReg.server()); + return (CallbackData::ReturnType)FALSE; +} + +void ServerDialog::getServerName(void) +{ + String serverName; + + getText(ServerName,serverName); + if(serverName.isNull())return; + mMailReg.server(serverName); +} + +CallbackData::ReturnType ServerDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + getServerName(); + endDialog(TRUE); + break; + case IDCANCEL : + endDialog(TRUE); + break; + } + return (CallbackData::ReturnType)FALSE; +} diff --git a/smtp/SRVRDLG.HPP b/smtp/SRVRDLG.HPP new file mode 100644 index 0000000..d4e93a4 --- /dev/null +++ b/smtp/SRVRDLG.HPP @@ -0,0 +1,68 @@ +#ifndef _SMTP_SERVERDLG_HPP_ +#define _SMTP_SERVERDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _SMTP_MAIL_HPP_ +#include +#endif +#ifndef _SMTP_MAILREG_HPP_ +#include +#endif + +class String; + +class ServerDialog : private DWindow +{ +public: + ServerDialog(const GUIWindow &parentWindow); + virtual ~ServerDialog(); + WORD performDialog(String &serverName); +private: + enum{ServerName=MS_SERVERNAME}; + ServerDialog(const ServerDialog &someServerDialog); + ServerDialog &operator=(const ServerDialog &someServerDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + void getServerName(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + MailReg mMailReg; + HWND mhParent; +}; + +inline +ServerDialog::ServerDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog::ServerDialog(const ServerDialog &someServerDialog) +: mhParent(someServerDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&ServerDialog::initDialogHandler); + mCommandHandler.setCallback(this,&ServerDialog::commandHandler); +} + +inline +ServerDialog::~ServerDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); +} + +inline +ServerDialog &ServerDialog::operator=(const ServerDialog &/*someServerDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/smtp/Smtp.001 b/smtp/Smtp.001 new file mode 100644 index 0000000..12fb64e --- /dev/null +++ b/smtp/Smtp.001 @@ -0,0 +1,207 @@ +# Microsoft Developer Studio Project File - Name="smtp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=smtp - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Smtp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Smtp.mak" CFG="smtp - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "smtp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "smtp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo".\mail.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib wsock32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "smtp - Win32 Release" +# Name "smtp - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Mail.rc + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\maildlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\mailinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\mailreg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=..\exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\mssocket.lib +# End Source File +# Begin Source File + +SOURCE=..\exe\msthread.lib +# End Source File +# Begin Source File + +SOURCE=.\response.cpp +# End Source File +# Begin Source File + +SOURCE=.\smtp.cpp +# End Source File +# Begin Source File + +SOURCE=.\smtpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.cpp +# End Source File +# Begin Source File + +SOURCE=..\exe\statbar.lib +# End Source File +# Begin Source File + +SOURCE=.\uuencode.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Mail.h +# End Source File +# Begin Source File + +SOURCE=.\Mail.hpp +# End Source File +# Begin Source File + +SOURCE=.\Maildlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mailinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mailreg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ptrex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Response.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Uuencode.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/smtp/Smtp.dsp b/smtp/Smtp.dsp new file mode 100644 index 0000000..521bf68 --- /dev/null +++ b/smtp/Smtp.dsp @@ -0,0 +1,185 @@ +# Microsoft Developer Studio Project File - Name="smtp" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=smtp - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Smtp.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Smtp.mak" CFG="smtp - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "smtp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "smtp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp8 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo".\mail.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib wsock32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "smtp - Win32 Release" +# Name "smtp - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Mail.rc +# End Source File +# Begin Source File + +SOURCE=.\maildlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\mailinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\mailreg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\response.cpp +# End Source File +# Begin Source File + +SOURCE=.\smtp.cpp +# End Source File +# Begin Source File + +SOURCE=.\smtpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\uuencode.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Mail.h +# End Source File +# Begin Source File + +SOURCE=.\Mail.hpp +# End Source File +# Begin Source File + +SOURCE=.\Maildlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mailinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mailreg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ptrex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Response.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Srvrdlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Uuencode.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/smtp/Smtp.mak b/smtp/Smtp.mak new file mode 100644 index 0000000..30333a6 --- /dev/null +++ b/smtp/Smtp.mak @@ -0,0 +1,1046 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=smtp - Win32 Debug +!MESSAGE No configuration specified. Defaulting to smtp - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "smtp - Win32 Release" && "$(CFG)" != "smtp - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Smtp.mak" CFG="smtp - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtp - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "smtp - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "smtp - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "smtp - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Smtp.exe" + +CLEAN : + -@erase "$(INTDIR)\Mail.res" + -@erase "$(INTDIR)\maildlg.obj" + -@erase "$(INTDIR)\mailinfo.obj" + -@erase "$(INTDIR)\mailreg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\response.obj" + -@erase "$(INTDIR)\smtp.obj" + -@erase "$(INTDIR)\smtpthrd.obj" + -@erase "$(INTDIR)\Srvrdlg.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(OUTDIR)\Smtp.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Smtp.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Mail.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Smtp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Smtp.pdb" /machine:I386 /out:"$(OUTDIR)/Smtp.exe" +LINK32_OBJS= \ + "$(INTDIR)\Mail.res" \ + "$(INTDIR)\maildlg.obj" \ + "$(INTDIR)\mailinfo.obj" \ + "$(INTDIR)\mailreg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\response.obj" \ + "$(INTDIR)\smtp.obj" \ + "$(INTDIR)\smtpthrd.obj" \ + "$(INTDIR)\Srvrdlg.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" \ + "..\exe\msthread.lib" \ + "..\exe\statbar.lib" + +"$(OUTDIR)\Smtp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\smtp.exe" + +CLEAN : + -@erase "$(INTDIR)\Mail.res" + -@erase "$(INTDIR)\maildlg.obj" + -@erase "$(INTDIR)\mailinfo.obj" + -@erase "$(INTDIR)\mailreg.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\response.obj" + -@erase "$(INTDIR)\smtp.obj" + -@erase "$(INTDIR)\smtpthrd.obj" + -@erase "$(INTDIR)\Srvrdlg.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\smtp.pdb" + -@erase "..\exe\smtp.exe" + -@erase "..\exe\smtp.ilk" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Mail.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Smtp.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib wsock32.lib winmm.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\exe\smtp.exe" +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib wsock32.lib winmm.lib comctl32.lib /nologo\ + /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)/smtp.pdb" /debug\ + /machine:I386 /out:"..\exe\smtp.exe" +LINK32_OBJS= \ + "$(INTDIR)\Mail.res" \ + "$(INTDIR)\maildlg.obj" \ + "$(INTDIR)\mailinfo.obj" \ + "$(INTDIR)\mailreg.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\response.obj" \ + "$(INTDIR)\smtp.obj" \ + "$(INTDIR)\smtpthrd.obj" \ + "$(INTDIR)\Srvrdlg.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\mssocket.lib" \ + "..\exe\msthread.lib" \ + "..\exe\statbar.lib" + +"..\exe\smtp.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "smtp - Win32 Release" +# Name "smtp - Win32 Debug" + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\uuencode.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\maildlg.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_MAILD=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\Statbar.hpp"\ + {$(INCLUDE)}"\Statbar\Statinfo.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\maildlg.obj" : $(SOURCE) $(DEP_CPP_MAILD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_MAILD=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commdlg.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Opendlg.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Statbar\Popup.hpp"\ + {$(INCLUDE)}"\Statbar\Statbar.hpp"\ + {$(INCLUDE)}"\Statbar\Statinfo.hpp"\ + {$(INCLUDE)}"\Statbar\Statmenu.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\maildlg.obj" : $(SOURCE) $(DEP_CPP_MAILD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mailinfo.cpp +DEP_CPP_MAILI=\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\mailinfo.obj" : $(SOURCE) $(DEP_CPP_MAILI) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\mailreg.cpp +DEP_CPP_MAILR=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\mailreg.obj" : $(SOURCE) $(DEP_CPP_MAILR) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Maildlg.hpp"\ + {$(INCLUDE)}"\.\Mailinfo.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\response.cpp +DEP_CPP_RESPO=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\response.obj" : $(SOURCE) $(DEP_CPP_RESPO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\smtp.cpp +DEP_CPP_SMTP_=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\smtp.obj" : $(SOURCE) $(DEP_CPP_SMTP_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\smtpthrd.cpp + +!IF "$(CFG)" == "smtp - Win32 Release" + +DEP_CPP_SMTPT=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\smtpthrd.obj" : $(SOURCE) $(DEP_CPP_SMTPT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +DEP_CPP_SMTPT=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\smtpthrd.obj" : $(SOURCE) $(DEP_CPP_SMTPT) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Srvrdlg.cpp +DEP_CPP_SRVRD=\ + {$(INCLUDE)}"\.\Mail.h"\ + {$(INCLUDE)}"\.\Mail.hpp"\ + {$(INCLUDE)}"\.\Mailreg.hpp"\ + {$(INCLUDE)}"\.\Srvrdlg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Regkey.hpp"\ + {$(INCLUDE)}"\Common\Regsam.hpp"\ + {$(INCLUDE)}"\Common\Shellapi.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Srvrdlg.obj" : $(SOURCE) $(DEP_CPP_SRVRD) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mail.rc +DEP_RSC_MAIL_=\ + ".\SMTP.ICO"\ + {$(INCLUDE)}"\.\Mail.h"\ + + +"$(INTDIR)\Mail.res" : $(SOURCE) $(DEP_RSC_MAIL_) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mssocket.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\msthread.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\statbar.lib + +!IF "$(CFG)" == "smtp - Win32 Release" + +!ELSEIF "$(CFG)" == "smtp - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/smtp/Smtplib.001 b/smtp/Smtplib.001 new file mode 100644 index 0000000..70f57f9 --- /dev/null +++ b/smtp/Smtplib.001 @@ -0,0 +1,134 @@ +# Microsoft Developer Studio Project File - Name="smtplib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=smtplib - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Smtplib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Smtplib.mak" CFG="smtplib - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "smtplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "smtplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\smtplib.lib" + +!ENDIF + +# Begin Target + +# Name "smtplib - Win32 Release" +# Name "smtplib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Mailinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\Response.cpp +# End Source File +# Begin Source File + +SOURCE=.\Smtp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Smtpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Uuencode.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\mailinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ptrex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Response.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Uuencode.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/smtp/Smtplib.bak b/smtp/Smtplib.bak new file mode 100644 index 0000000..451e851 --- /dev/null +++ b/smtp/Smtplib.bak @@ -0,0 +1,477 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=smtplib - Win32 Debug +!MESSAGE No configuration specified. Defaulting to smtplib - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "smtplib - Win32 Release" && "$(CFG)" !=\ + "smtplib - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "smtplib.mak" CFG="smtplib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "smtplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "smtplib - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "smtplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\smtplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Mailinfo.obj" + -@erase "$(INTDIR)\Response.obj" + -@erase "$(INTDIR)\Smtp.obj" + -@erase "$(INTDIR)\Smtpthrd.obj" + -@erase "$(INTDIR)\Uuencode.obj" + -@erase "$(OUTDIR)\smtplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/smtplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/smtplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/smtplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Mailinfo.obj" \ + "$(INTDIR)\Response.obj" \ + "$(INTDIR)\Smtp.obj" \ + "$(INTDIR)\Smtpthrd.obj" \ + "$(INTDIR)\Uuencode.obj" + +"$(OUTDIR)\smtplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\smtplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Mailinfo.obj" + -@erase "$(INTDIR)\Response.obj" + -@erase "$(INTDIR)\Smtp.obj" + -@erase "$(INTDIR)\Smtpthrd.obj" + -@erase "$(INTDIR)\Uuencode.obj" + -@erase "..\exe\smtplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/smtplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/smtplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\smtplib.lib" +LIB32_FLAGS=/nologo /out:"..\exe\smtplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Mailinfo.obj" \ + "$(INTDIR)\Response.obj" \ + "$(INTDIR)\Smtp.obj" \ + "$(INTDIR)\Smtpthrd.obj" \ + "$(INTDIR)\Uuencode.obj" + +"..\exe\smtplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "smtplib - Win32 Release" +# Name "smtplib - Win32 Debug" + +!IF "$(CFG)" == "smtplib - Win32 Release" + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Uuencode.cpp + +!IF "$(CFG)" == "smtplib - Win32 Release" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Response.cpp +DEP_CPP_RESPO=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Response.obj" : $(SOURCE) $(DEP_CPP_RESPO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Smtp.cpp +DEP_CPP_SMTP_=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Smtp.obj" : $(SOURCE) $(DEP_CPP_SMTP_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Smtpthrd.cpp +DEP_CPP_SMTPT=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\codegen.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\socket\hooker.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\socket\procaddr.hpp"\ + {$(INCLUDE)}"\socket\procaddr.tpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Smtpthrd.obj" : $(SOURCE) $(DEP_CPP_SMTPT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mailinfo.cpp +DEP_CPP_MAILI=\ + {$(INCLUDE)}"\.\mailinfo.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Mailinfo.obj" : $(SOURCE) $(DEP_CPP_MAILI) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/smtp/Smtplib.dsp b/smtp/Smtplib.dsp new file mode 100644 index 0000000..511a8b0 --- /dev/null +++ b/smtp/Smtplib.dsp @@ -0,0 +1,140 @@ +# Microsoft Developer Studio Project File - Name="smtplib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=smtplib - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Smtplib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Smtplib.mak" CFG="smtplib - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "smtplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "smtplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\smtplib.lib" + +!ENDIF + +# Begin Target + +# Name "smtplib - Win32 Release" +# Name "smtplib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Mailinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\Response.cpp +# End Source File +# Begin Source File + +SOURCE=.\Smtp.cpp +# End Source File +# Begin Source File + +SOURCE=.\Smtpthrd.cpp +# End Source File +# Begin Source File + +SOURCE=.\Uuencode.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\mailinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ptrex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Response.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtp.hpp +# End Source File +# Begin Source File + +SOURCE=.\Smtpthrd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Uuencode.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/smtp/Smtplib.dsw b/smtp/Smtplib.dsw new file mode 100644 index 0000000..6349da5 --- /dev/null +++ b/smtp/Smtplib.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "smtplib"=.\Smtplib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/smtp/Smtplib.mak b/smtp/Smtplib.mak new file mode 100644 index 0000000..451e851 --- /dev/null +++ b/smtp/Smtplib.mak @@ -0,0 +1,477 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=smtplib - Win32 Debug +!MESSAGE No configuration specified. Defaulting to smtplib - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "smtplib - Win32 Release" && "$(CFG)" !=\ + "smtplib - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "smtplib.mak" CFG="smtplib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smtplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "smtplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "smtplib - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "smtplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\smtplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Mailinfo.obj" + -@erase "$(INTDIR)\Response.obj" + -@erase "$(INTDIR)\Smtp.obj" + -@erase "$(INTDIR)\Smtpthrd.obj" + -@erase "$(INTDIR)\Uuencode.obj" + -@erase "$(OUTDIR)\smtplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/smtplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/smtplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/smtplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Mailinfo.obj" \ + "$(INTDIR)\Response.obj" \ + "$(INTDIR)\Smtp.obj" \ + "$(INTDIR)\Smtpthrd.obj" \ + "$(INTDIR)\Uuencode.obj" + +"$(OUTDIR)\smtplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\smtplib.lib" + +CLEAN : + -@erase "$(INTDIR)\Mailinfo.obj" + -@erase "$(INTDIR)\Response.obj" + -@erase "$(INTDIR)\Smtp.obj" + -@erase "$(INTDIR)\Smtpthrd.obj" + -@erase "$(INTDIR)\Uuencode.obj" + -@erase "..\exe\smtplib.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/smtplib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/smtplib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\smtplib.lib" +LIB32_FLAGS=/nologo /out:"..\exe\smtplib.lib" +LIB32_OBJS= \ + "$(INTDIR)\Mailinfo.obj" \ + "$(INTDIR)\Response.obj" \ + "$(INTDIR)\Smtp.obj" \ + "$(INTDIR)\Smtpthrd.obj" \ + "$(INTDIR)\Uuencode.obj" + +"..\exe\smtplib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "smtplib - Win32 Release" +# Name "smtplib - Win32 Debug" + +!IF "$(CFG)" == "smtplib - Win32 Release" + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Uuencode.cpp + +!IF "$(CFG)" == "smtplib - Win32 Release" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "smtplib - Win32 Debug" + +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Font.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Iconbmp.hpp"\ + {$(INCLUDE)}"\Common\Iconfrm.hpp"\ + {$(INCLUDE)}"\Common\Iconinfo.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Mmtimer.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Progress.hpp"\ + {$(INCLUDE)}"\Common\Purebmp.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pureicon.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\Uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Response.cpp +DEP_CPP_RESPO=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Response.obj" : $(SOURCE) $(DEP_CPP_RESPO) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Smtp.cpp +DEP_CPP_SMTP_=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\Socket\Hostent.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\Socket\Servent.hpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + + +"$(INTDIR)\Smtp.obj" : $(SOURCE) $(DEP_CPP_SMTP_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Smtpthrd.cpp +DEP_CPP_SMTPT=\ + {$(INCLUDE)}"\.\Ptrex.hpp"\ + {$(INCLUDE)}"\.\Response.hpp"\ + {$(INCLUDE)}"\.\Smtp.hpp"\ + {$(INCLUDE)}"\.\Smtpthrd.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.hpp"\ + {$(INCLUDE)}"\Bsptree\Btree.tpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.hpp"\ + {$(INCLUDE)}"\Bsptree\Treenode.tpp"\ + {$(INCLUDE)}"\Common\array.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\common\codegen.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + {$(INCLUDE)}"\Socket\Cache.hpp"\ + {$(INCLUDE)}"\socket\hooker.hpp"\ + {$(INCLUDE)}"\Socket\Inaddr.hpp"\ + {$(INCLUDE)}"\Socket\Intsaddr.hpp"\ + {$(INCLUDE)}"\socket\procaddr.hpp"\ + {$(INCLUDE)}"\socket\procaddr.tpp"\ + {$(INCLUDE)}"\Socket\Socket.hpp"\ + {$(INCLUDE)}"\Socket\Timeinfo.hpp"\ + {$(INCLUDE)}"\Socket\Wsadata.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Smtpthrd.obj" : $(SOURCE) $(DEP_CPP_SMTPT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mailinfo.cpp +DEP_CPP_MAILI=\ + {$(INCLUDE)}"\.\mailinfo.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Mailinfo.obj" : $(SOURCE) $(DEP_CPP_MAILI) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/smtp/Smtplib.mdp b/smtp/Smtplib.mdp new file mode 100644 index 0000000..099aeba Binary files /dev/null and b/smtp/Smtplib.mdp differ diff --git a/smtp/Smtplib.opt b/smtp/Smtplib.opt new file mode 100644 index 0000000..aad369a Binary files /dev/null and b/smtp/Smtplib.opt differ diff --git a/smtp/Smtplib.plg b/smtp/Smtplib.plg new file mode 100644 index 0000000..0f61bb0 --- /dev/null +++ b/smtp/Smtplib.plg @@ -0,0 +1,35 @@ + + +
+

Build Log

+

+--------------------Configuration: smtplib - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP56.tmp" with contents +[ +/nologo /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp".\msvcobj/Smtplib.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\smtp\Mailinfo.cpp" +"D:\work\smtp\Response.cpp" +"D:\work\smtp\Smtp.cpp" +"D:\work\smtp\Smtpthrd.cpp" +"D:\work\smtp\Uuencode.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP56.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\smtplib.lib" .\msvcobj\Mailinfo.obj .\msvcobj\Response.obj .\msvcobj\Smtp.obj .\msvcobj\Smtpthrd.obj .\msvcobj\Uuencode.obj " +

Output Window

+Compiling... +Mailinfo.cpp +Response.cpp +Smtp.cpp +Smtpthrd.cpp +Uuencode.cpp +Creating library... + + + +

Results

+smtplib.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/smtp/UUENCODE.CPP b/smtp/UUENCODE.CPP new file mode 100644 index 0000000..dac986d --- /dev/null +++ b/smtp/UUENCODE.CPP @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include + +BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block &lineStrings,BOOL initBlock)const +{ + Profile iniProfile; + char readBuff[45]; + int readCount; + int byteCount; + int lineCount; + char *ptrBuff; + String outLine; + int ch; + + if(initBlock)lineStrings.remove(); + if(srcPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + iniProfile.makeFileName(srcPathFileName); + srcPathFileName.removeTokens("\\/"); + ::sprintf(outLine,"begin %d %s",644,(char*)srcPathFileName); + lineStrings.insert(&outLine); + Progress encodeProgress(parentWindow,srcPathFileName); + encodeProgress.canCancel(TRUE); + encodeProgress.show(TRUE); + encodeProgress.setText("encoding... (press ESC to cancel)."); + while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;} + readView.rewind(); + encodeProgress.range(lineCount); + while(readCount=readView.read(readBuff,sizeof(readBuff))) + { + String lineString; + char *ptrLine=(LPSTR)lineString; + *(ptrLine++)=chEncode(readCount); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + parentWindow.yieldTask(); + } + lineStrings.insert(&lineString); + encodeProgress++; + if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;} + if(readCount!=sizeof(readBuff))break; + } + String lastLine; + lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`'); + lineStrings.insert(&lastLine); + lineStrings.insert(&String("end")); + return TRUE; +} + diff --git a/smtp/UUENCODE.HPP b/smtp/UUENCODE.HPP new file mode 100644 index 0000000..0a9e089 --- /dev/null +++ b/smtp/UUENCODE.HPP @@ -0,0 +1,37 @@ +#ifndef _SMTP_UUENCODE_HPP_ +#define _SMTP_UUENCODE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +template +class Block; +class String; +class GUIWindow; + +class UUEncode +{ +public: + UUEncode(void); + virtual ~UUEncode(); + BOOL encode(GUIWindow &parentWindow,String srcPathFileName,Block &lineStrings,BOOL initBlock=TRUE)const; +private: + BYTE chEncode(int ch)const; +}; + +inline +UUEncode::UUEncode(void) +{ +} + +inline +UUEncode::~UUEncode() +{ +} + +inline +BYTE UUEncode::chEncode(int ch)const +{ + return (ch?(ch&0x3F)+' ':'`'); +} +#endif \ No newline at end of file diff --git a/smtp/mail.res b/smtp/mail.res new file mode 100644 index 0000000..2a0f6cb Binary files /dev/null and b/smtp/mail.res differ diff --git a/smtp/smtp.dsw b/smtp/smtp.dsw new file mode 100644 index 0000000..c1f62fd --- /dev/null +++ b/smtp/smtp.dsw @@ -0,0 +1,104 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\BSPTREE\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "smtp"=.\Smtp.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name socket + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name thread + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency +}}} + +############################################################################### + +Project: "socket"=..\SOCKET\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thread"=..\THREAD\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/smtp/smtp.mdp b/smtp/smtp.mdp new file mode 100644 index 0000000..da4d7b1 Binary files /dev/null and b/smtp/smtp.mdp differ diff --git a/smtp/smtp.opt b/smtp/smtp.opt new file mode 100644 index 0000000..9e3f779 Binary files /dev/null and b/smtp/smtp.opt differ diff --git a/socket/CACHE.CPP b/socket/CACHE.CPP new file mode 100644 index 0000000..a29e2fa --- /dev/null +++ b/socket/CACHE.CPP @@ -0,0 +1,62 @@ +#include + +WORD ReceiveCache::receive(char *pBuffer,DWORD lengthBuffer,DWORD &itemCount,BOOL waitForData) +{ + itemCount=0; + if(!hasData(waitForData))return FALSE; + if(itemsInCache()<=lengthBuffer) + { + ::memcpy(pBuffer,&mReceiveCache[cursor()],itemsInCache()); + itemCount=itemsInCache(); + cursor(cursor()+itemsInCache()); + itemsInCache(0); + } + else + { + ::memcpy(pBuffer,&mReceiveCache[cursor()],lengthBuffer); + itemCount=lengthBuffer; + cursor(cursor()+lengthBuffer); + itemsInCache(itemsInCache()-lengthBuffer); + } + return TRUE; +} + +WORD ReceiveCache::receive(char &charData,BOOL waitForData) +{ + if(!hasData(waitForData))return FALSE; + charData=mReceiveCache[cursor()]; + cursor(cursor()+1); + itemsInCache(itemsInCache()-1); + return TRUE; +} + +WORD ReceiveCache::cacheData(void) +{ + int receiveCount; + + while(!isReady(TRUE)); + if(!isReady(TRUE))return FALSE; + if((receiveCount=::recv(socket(),(char*)(BYTE*)&mReceiveCache[0],mReceiveCache.size(),0L))==SOCKET_ERROR||!receiveCount)return FALSE; + itemsInCache(receiveCount); + cursor(0); + return TRUE; +} + +WORD ReceiveCache::hasData(BOOL acquireData) +{ + if(itemsInCache()>0)return TRUE; + if(!isReady(FALSE)&&!acquireData)return FALSE; + return cacheData(); +} + +WORD ReceiveCache::isReady(WORD waitForData)const +{ + fd_set setDescriptor; + timeval waitTime; + + setDescriptor.fd_count=1; + setDescriptor.fd_array[0]=socket(); + if(waitForData){waitTime.tv_sec=WaitTime;waitTime.tv_usec=0;} + else {waitTime.tv_sec=0;waitTime.tv_usec=500;} + return ::select(0,&setDescriptor,0,0,&waitTime); +} diff --git a/socket/CACHE.HPP b/socket/CACHE.HPP new file mode 100644 index 0000000..b113c26 --- /dev/null +++ b/socket/CACHE.HPP @@ -0,0 +1,114 @@ +#ifndef _SOCKET_RECEIVECACHE_HPP_ +#define _SOCKET_RECEIVECACHE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif + +class ReceiveCache +{ +public: + ReceiveCache(void); + ReceiveCache(const ReceiveCache &someReceiveCache); + virtual ~ReceiveCache(); + SOCKET socket(void)const; + void socket(SOCKET socket); + void reset(void); + WORD hasData(BOOL acquireData=TRUE); + WORD isReady(WORD waitForData=TRUE)const; + WORD receive(char &charData,BOOL waitForData=TRUE); + WORD receive(char *pBuffer,DWORD lengthBuffer,DWORD &itemCount,BOOL waitForData=TRUE); +private: + enum {CacheSize=16384,WaitTime=1}; + ReceiveCache &operator=(const ReceiveCache &someReceiveCache); + WORD cacheData(void); + int itemsInCache(void)const; + void itemsInCache(int itemsInCache); + DWORD cursor(void)const; + void cursor(DWORD cursor); + + GlobalData mReceiveCache; + DWORD mCursor; + int mItemsInCache; + SOCKET mSocket; +}; + +inline +ReceiveCache::ReceiveCache(void) +: mCursor(0), mItemsInCache(0), mSocket(INVALID_SOCKET) +{ + mReceiveCache.size(CacheSize); +} + +inline +ReceiveCache::ReceiveCache(const ReceiveCache &someReceiveCache) +{ + *this=someReceiveCache; +} + +inline +ReceiveCache::~ReceiveCache() +{ +} + +inline +ReceiveCache &ReceiveCache::operator=(const ReceiveCache &someReceiveCache) +{ + mReceiveCache=someReceiveCache.mReceiveCache; + mCursor=someReceiveCache.mCursor; + mItemsInCache=someReceiveCache.mItemsInCache; + mSocket=someReceiveCache.mSocket; + return *this; +} + +inline +SOCKET ReceiveCache::socket(void)const +{ + return mSocket; +} + +inline +void ReceiveCache::socket(SOCKET socket) +{ + mSocket=socket; + cursor(0); + itemsInCache(0); +} + +inline +int ReceiveCache::itemsInCache(void)const +{ + return mItemsInCache; +} + +inline +void ReceiveCache::itemsInCache(int itemsInCache) +{ + mItemsInCache=itemsInCache; +} + +inline +DWORD ReceiveCache::cursor(void)const +{ + return mCursor; +} + +inline +void ReceiveCache::cursor(DWORD cursor) +{ + mCursor=cursor; +} + +inline +void ReceiveCache::reset(void) +{ + socket(INVALID_SOCKET); + cursor(0); + itemsInCache(0); +} +#endif diff --git a/socket/DOCS/RFC1866.TXT b/socket/DOCS/RFC1866.TXT new file mode 100644 index 0000000..6d04425 --- /dev/null +++ b/socket/DOCS/RFC1866.TXT @@ -0,0 +1,4315 @@ + + + + + + +Network Working Group T. Berners-Lee +Request for Comments: 1866 MIT/W3C +Category: Standards Track D. Connolly + November 1995 + + + Hypertext Markup Language - 2.0 + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Abstract + + The Hypertext Markup Language (HTML) is a simple markup language used + to create hypertext documents that are platform independent. HTML + documents are SGML documents with generic semantics that are + appropriate for representing information from a wide range of + domains. HTML markup can represent hypertext news, mail, + documentation, and hypermedia; menus of options; database query + results; simple structured documents with in-lined graphics; and + hypertext views of existing bodies of information. + + HTML has been in use by the World Wide Web (WWW) global information + initiative since 1990. This specification roughly corresponds to the + capabilities of HTML in common use prior to June 1994. HTML is an + application of ISO Standard 8879:1986 Information Processing Text and + Office Systems; Standard Generalized Markup Language (SGML). + + The "text/html" Internet Media Type (RFC 1590) and MIME Content Type + (RFC 1521) is defined by this specification. + +Table of Contents + + 1. Introduction ........................................... 2 + 1.1 Scope .................................................. 3 + 1.2 Conformance ............................................ 3 + 2. Terms .................................................. 6 + 3. HTML as an Application of SGML .........................10 + 3.1 SGML Documents .........................................10 + 3.2 HTML Lexical Syntax ................................... 12 + 3.3 HTML Public Text Identifiers .......................... 17 + 3.4 Example HTML Document ................................. 17 + 4. HTML as an Internet Media Type ........................ 18 + + + +Berners-Lee & Connolly Standards Track [Page 1] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + 4.1 text/html media type .................................. 18 + 4.2 HTML Document Representation .......................... 19 + 5. Document Structure .................................... 20 + 5.1 Document Element: HTML ................................ 21 + 5.2 Head: HEAD ............................................ 21 + 5.3 Body: BODY ............................................ 24 + 5.4 Headings: H1 ... H6 ................................... 24 + 5.5 Block Structuring Elements ............................ 25 + 5.6 List Elements ......................................... 28 + 5.7 Phrase Markup ......................................... 30 + 5.8 Line Break: BR ........................................ 34 + 5.9 Horizontal Rule: HR ................................... 34 + 5.10 Image: IMG ............................................ 34 + 6. Characters, Words, and Paragraphs ..................... 35 + 6.1 The HTML Document Character Set ....................... 36 + 7. Hyperlinks ............................................ 36 + 7.1 Accessing Resources ................................... 37 + 7.2 Activation of Hyperlinks .............................. 38 + 7.3 Simultaneous Presentation of Image Resources .......... 38 + 7.4 Fragment Identifiers .................................. 38 + 7.5 Queries and Indexes ................................... 39 + 7.6 Image Maps ............................................ 39 + 8. Forms ................................................. 40 + 8.1 Form Elements ......................................... 40 + 8.2 Form Submission ....................................... 45 + 9. HTML Public Text ...................................... 49 + 9.1 HTML DTD .............................................. 49 + 9.2 Strict HTML DTD ....................................... 61 + 9.3 Level 1 HTML DTD ...................................... 62 + 9.4 Strict Level 1 HTML DTD ............................... 63 + 9.5 SGML Declaration for HTML ............................. 64 + 9.6 Sample SGML Open Entity Catalog for HTML .............. 65 + 9.7 Character Entity Sets ................................. 66 + 10. Security Considerations ............................... 69 + 11. References ............................................ 69 + 12. Acknowledgments ....................................... 71 + 12.1 Authors' Addresses .................................... 71 + 13. The HTML Coded Character Set .......................... 72 + 14. Proposed Entities ..................................... 75 + +1. Introduction + + The HyperText Markup Language (HTML) is a simple data format used to + create hypertext documents that are portable from one platform to + another. HTML documents are SGML documents with generic semantics + that are appropriate for representing information from a wide range + of domains. + + + + +Berners-Lee & Connolly Standards Track [Page 2] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + As HTML is an application of SGML, this specification assumes a + working knowledge of [SGML]. + +1.1. Scope + + HTML has been in use by the World-Wide Web (WWW) global information + initiative since 1990. Previously, informal documentation on HTML has + been available from a number of sources on the Internet. This + specification brings together, clarifies, and formalizes a set of + features that roughly corresponds to the capabilities of HTML in + common use prior to June 1994. A number of new features to HTML are + being proposed and experimented in the Internet community. + + This document thus defines a HTML 2.0 (to distinguish it from the + previous informal specifications). Future (generally upwardly + compatible) versions of HTML with new features will be released with + higher version numbers. + + HTML is an application of ISO Standard 8879:1986, "Information + Processing Text and Office Systems; Standard Generalized Markup + Language" (SGML). The HTML Document Type Definition (DTD) is a formal + definition of the HTML syntax in terms of SGML. + + This specification also defines HTML as an Internet Media + Type[IMEDIA] and MIME Content Type[MIME] called `text/html'. As such, + it defines the semantics of the HTML syntax and how that syntax + should be interpreted by user agents. + +1.2. Conformance + + This specification governs the syntax of HTML documents and aspects + of the behavior of HTML user agents. + +1.2.1. Documents + + A document is a conforming HTML document if: + + * It is a conforming SGML document, and it conforms to the + HTML DTD (see 9.1, "HTML DTD"). + + NOTE - There are a number of syntactic idioms that + are not supported or are supported inconsistently in + some historical user agent implementations. These + idioms are identified in notes like this throughout + this specification. + + * It conforms to the application conventions in this + specification. For example, the value of the HREF attribute + + + +Berners-Lee & Connolly Standards Track [Page 3] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + of the
element must conform to the URI syntax. + + * Its document character set includes [ISO-8859-1] and + agrees with [ISO-10646]; that is, each code position listed + in 13, "The HTML Coded Character Set" is included, and each + code position in the document character set is mapped to the + same character as [ISO-10646] designates for that code + position. + + NOTE - The document character set is somewhat + independent of the character encoding scheme used to + represent a document. For example, the `ISO-2022-JP' + character encoding scheme can be used for HTML + documents, since its repertoire is a subset of the + [ISO-10646] repertoire. The critical distinction is + that numeric character references agree with + [ISO-10646] regardless of how the document is + encoded. + +1.2.2. Feature Test Entities + + The HTML DTD defines a standard HTML document type and several + variations, by way of feature test entities. Feature test entities + are declarations in the HTML DTD that control the inclusion or + exclusion of portions of the DTD. + + HTML.Recommended + Certain features of the language are necessary for + compatibility with widespread usage, but they may + compromise the structural integrity of a document. This + feature test entity selects a more prescriptive document + type definition that eliminates those features. It is + set to `IGNORE' by default. + + For example, in order to preserve the structure of a + document, an editing user agent may translate HTML + documents to the recommended subset, or it may require + that the documents be in the recommended subset for + import. + + HTML.Deprecated + Certain features of the language are necessary for + compatibility with earlier versions of the + specification, but they tend to be used and implemented + inconsistently, and their use is deprecated. This + feature test entity enables a document type definition + that allows these features. It is set to `INCLUDE' by + default. + + + +Berners-Lee & Connolly Standards Track [Page 4] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + Documents generated by translation software or editing + software should not contain deprecated idioms. + +1.2.3. User Agents + + An HTML user agent conforms to this specification if: + + * It parses the characters of an HTML document into data + characters and markup according to [SGML]. + + NOTE - In the interest of robustness and + extensibility, there are a number of widely deployed + conventions for handling non-conforming documents. + See 4.2.1, "Undeclared Markup Error Handling" for + details. + + * It supports the `ISO-8859-1' character encoding scheme and + processes each character in the ISO Latin Alphabet No. 1 as + specified in 6.1, "The HTML Document Character Set". + + NOTE - To support non-western writing systems, HTML + user agents are encouraged to support + `ISO-10646-UCS-2' or similar character encoding + schemes and as much of the character repertoire of + [ISO-10646] as is practical. + + * It behaves identically for documents whose parsed token + sequences are identical. + + For example, comments and the whitespace in tags disappear + during tokenization, and hence they do not influence the + behavior of conforming user agents. + + * It allows the user to traverse (or at least attempt to + traverse, resources permitting) all hyperlinks from + elements in an HTML document. + + An HTML user agent is a level 2 user agent if, additionally: + + * It allows the user to express all form field values + specified in an HTML document and to (attempt to) submit the + values as requests to information services. + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 5] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +2. Terms + + absolute URI + a URI in absolute form; for example, as per [URL] + + anchor + one of two ends of a hyperlink; typically, a phrase + marked as an element. + + base URI + an absolute URI used in combination with a relative URI + to determine another absolute URI. + + character + An atom of information, for example a letter or a digit. + Graphic characters have associated glyphs, whereas + control characters have associated processing semantics. + + character encoding + scheme + A function whose domain is the set of sequences of + octets, and whose range is the set of sequences of + characters from a character repertoire; that is, a + sequence of octets and a character encoding scheme + determines a sequence of characters. + + character repertoire + A finite set of characters; e.g. the range of a coded + character set. + + code position + An integer. A coded character set and a code position + from its domain determine a character. + + coded character set + A function whose domain is a subset of the integers and + whose range is a character repertoire. That is, for some + set of integers (usually of the form {0, 1, 2, ..., N} + ), a coded character set and an integer in that set + determine a character. Conversely, a character and a + coded character set determine the character's code + position (or, in rare cases, a few code positions). + + conforming HTML user + agent + A user agent that conforms to this specification in its + processing of the Internet Media Type `text/html'. + + + + +Berners-Lee & Connolly Standards Track [Page 6] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + data character + Characters other than markup, which make up the content + of elements. + + document character set + a coded character set whose range includes all + characters used in a document. Every SGML document has + exactly one document character set. Numeric character + references are resolved via the document character set. + + DTD + document type definition. Rules that apply SGML to the + markup of documents of a particular type, including a + set of element and entity declarations. [SGML] + + element + A component of the hierarchical structure defined by a + document type definition; it is identified in a document + instance by descriptive markup, usually a start-tag and + end-tag. [SGML] + + end-tag + Descriptive markup that identifies the end of an + element. [SGML] + + entity + data with an associated notation or interpretation; for + example, a sequence of octets associated with an + Internet Media Type. [SGML] + + fragment identifier + the portion of an HREF attribute value following the `#' + character which modifies the presentation of the + destination of a hyperlink. + + form data set + a sequence of name/value pairs; the names are given by + an HTML document and the values are given by a user. + + HTML document + An SGML document conforming to this document type + definition. + + hyperlink + a relationship between two anchors, called the head and + the tail. The link goes from the tail to the head. The + head and tail are also known as destination and source, + respectively. + + + +Berners-Lee & Connolly Standards Track [Page 7] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + markup + Syntactically delimited characters added to the data of + a document to represent its structure. There are four + different kinds of markup: descriptive markup (tags), + references, markup declarations, and processing + instructions. [SGML] + + may + A document or user interface is conforming whether this + statement applies or not. + + media type + an Internet Media Type, as per [IMEDIA]. + + message entity + a head and body. The head is a collection of name/value + fields, and the body is a sequence of octets. The head + defines the content type and content transfer encoding + of the body. [MIME] + + minimally conforming + HTML user agent + A user agent that conforms to this specification except + for form processing. It may only process level 1 HTML + documents. + + must + Documents or user agents in conflict with this statement + are not conforming. + + numeric character + reference + markup that refers to a character by its code position + in the document character set. + + SGML document + A sequence of characters organized physically as a set + of entities and logically into a hierarchy of elements. + An SGML document consists of data characters and markup; + the markup describes the structure of the information + and an instance of that structure. [SGML] + + shall + If a document or user agent conflicts with this + statement, it does not conform to this specification. + + + + + + +Berners-Lee & Connolly Standards Track [Page 8] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + should + If a document or user agent conflicts with this + statement, undesirable results may occur in practice + even though it conforms to this specification. + + start-tag + Descriptive markup that identifies the start of an + element and specifies its generic identifier and + attributes. [SGML] + + syntax-reference + character set + A coded character set whose range includes all + characters used for markup; e.g. name characters and + delimiter characters. + + tag + Markup that delimits an element. A tag includes a name + which refers to an element declaration in the DTD, and + may include attributes. [SGML] + + text entity + A finite sequence of characters. A text entity typically + takes the form of a sequence of octets with some + associated character encoding scheme, transmitted over + the network or stored in a file. [SGML] + + typical + Typical processing is described for many elements. This + is not a mandatory part of the specification but is + given as guidance for designers and to help explain the + uses for which the elements were intended. + + URI + A Uniform Resource Identifier is a formatted string that + serves as an identifier for a resource, typically on the + Internet. URIs are used in HTML to identify the anchors + of hyperlinks. URIs in common practice include Uniform + Resource Locators (URLs)[URL] and Relative URLs + [RELURL]. + + user agent + A component of a distributed system that presents an + interface and processes requests on behalf of a user; + for example, a www browser or a mail user agent. + + + + + + +Berners-Lee & Connolly Standards Track [Page 9] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + WWW + The World-Wide Web is a hypertext-based, distributed + information system created by researchers at CERN in + Switzerland. + +3. HTML as an Application of SGML + + HTML is an application of ISO 8879:1986 -- Standard Generalized + Markup Language (SGML). SGML is a system for defining structured + document types and markup languages to represent instances of those + document types[SGML]. The public text -- DTD and SGML declaration -- + of the HTML document type definition are provided in 9, "HTML Public + Text". + + The term "HTML" refers to both the document type defined here and the + markup language for representing instances of this document type. + +3.1. SGML Documents + + An HTML document is an SGML document; that is, a sequence of + characters organized physically into a set of entities, and logically + as a hierarchy of elements. + + In the SGML specification, the first production of the SGML syntax + grammar separates an SGML document into three parts: an SGML + declaration, a prologue, and an instance. For the purposes of this + specification, the prologue is a DTD. This DTD describes another + grammar: the start symbol is given in the doctype declaration, the + terminals are data characters and tags, and the productions are + determined by the element declarations. The instance must conform to + the DTD, that is, it must be in the language defined by this grammar. + + The SGML declaration determines the lexicon of the grammar. It + specifies the document character set, which determines a character + repertoire that contains all characters that occur in all text + entities in the document, and the code positions associated with + those characters. + + The SGML declaration also specifies the syntax-reference character + set of the document, and a few other parameters that bind the + abstract syntax of SGML to a concrete syntax. This concrete syntax + determines how the sequence of characters of the document is mapped + to a sequence of terminals in the grammar of the prologue. + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 10] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + For example, consider the following document: + + + Parsing Example +

Some text. *wow*

+ + An HTML user agent should use the SGML declaration that is given in + 9.5, "SGML Declaration for HTML". According to its document character + set, `*' refers to an asterisk character, `*'. + + The instance above is regarded as the following sequence of + terminals: + + 1. start-tag: TITLE + + 2. data characters: "Parsing Example" + + 3. end-tag: TITLE + + 4. start-tag: P + + 5. data characters "Some text." + + 6. start-tag: EM + + 7. data characters: "*wow*" + + 8. end-tag: EM + + 9. end-tag: P + + + + + + + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 11] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + The start symbol of the DTD grammar is HTML, and the productions are + given in the public text identified by `-//IETF//DTD HTML 2.0//EN' + (9.1, "HTML DTD"). The terminals above parse as: + + HTML + | + \-HEAD + | | + | \-TITLE + | | + | \- + | | + | \-"Parsing Example" + | | + | \- + | + \-BODY + | + \-P + | + \-

+ | + \-"Some text. " + | + \-EM + | | + | \- + | | + | \-"*wow*" + | | + | \- + | + \-

+ + Some of the elements are delimited explicitly by tags, while the + boundaries of others are inferred. The element contains a + element and a element. The contains , + which is explicitly delimited by start- and end-tags. + +3.2. HTML Lexical Syntax + + SGML specifies an abstract syntax and a reference concrete syntax. + Aside from certain quantities and capacities (e.g. the limit on the + length of a name), all HTML documents use the reference concrete + syntax. In particular, all markup characters are in the repertoire of + [ISO-646]. Data characters are drawn from the document character set + (see 6, "Characters, Words, and Paragraphs"). + + + + +Berners-Lee & Connolly Standards Track [Page 12] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + A complete discussion of SGML parsing, e.g. the mapping of a sequence + of characters to a sequence of tags and data, is left to the SGML + standard[SGML]. This section is only a summary. + +3.2.1. Data Characters + + Any sequence of characters that do not constitute markup (see 9.6 + "Delimiter Recognition" of [SGML]) are mapped directly to strings of + data characters. Some markup also maps to data character strings. + Numeric character references map to single-character strings, via the + document character set. Each reference to one of the general entities + defined in the HTML DTD maps to a single-character string. + + For example, + + abc<def => "abc","<","def" + abc<def => "abc","<","def" + + The terminating semicolon on entity or numeric character references + is only necessary when the character following the reference would + otherwise be recognized as part of the name (see 9.4.5 "Reference + End" in [SGML]). + + abc < def => "abc ","<"," def" + abc < def => "abc ","<"," def" + + An ampersand is only recognized as markup when it is followed by a + letter or a `#' and a digit: + + abc & lt def => "abc & lt def" + abc &# 60 def => "abc &# 60 def" + + A useful technique for translating plain text to HTML is to replace + each '<', '&', and '>' by an entity reference or numeric character + reference as follows: + + ENTITY NUMERIC + CHARACTER REFERENCE CHAR REF CHARACTER DESCRIPTION + --------- ---------- ----------- --------------------- + & & & Ampersand + < < < Less than + > > > Greater than + + NOTE - There are SGML mechanisms, CDATA and RCDATA + declared content, that allow most `<', `>', and `&' + characters to be entered without the use of entity + references. Because these mechanisms tend to be used and + implemented inconsistently, and because they conflict + + + +Berners-Lee & Connolly Standards Track [Page 13] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + with techniques for reducing HTML to 7 bit ASCII for + transport, they are deprecated in this version of HTML. + See 5.5.2.1, "Example and Listing: XMP, LISTING". + +3.2.2. Tags + + Tags delimit elements such as headings, paragraphs, lists, character + highlighting, and links. Most HTML elements are identified in a + document as a start-tag, which gives the element name and attributes, + followed by the content, followed by the end tag. Start-tags are + delimited by `<' and `>'; end tags are delimited by `</' and `>'. An + example is: + + <H1>This is a Heading</H1> + + Some elements only have a start-tag without an end-tag. For example, + to create a line break, use the `<BR>' tag. Additionally, the end + tags of some other elements, such as Paragraph (`</P>'), List Item + (`</LI>'), Definition Term (`</DT>'), and Definition Description + (`</DD>') elements, may be omitted. + + The content of an element is a sequence of data character strings and + nested elements. Some elements, such as anchors, cannot be nested. + Anchors and character highlighting may be put inside other + constructs. See the HTML DTD, 9.1, "HTML DTD" for full details. + + NOTE - The SGML declaration for HTML specifies SHORTTAG YES, which + means that there are other valid syntaxes for tags, such as NET + tags, `<EM/.../'; empty start tags, `<>'; and empty end-tags, + `</>'. Until support for these idioms is widely deployed, their + use is strongly discouraged. + +3.2.3. Names + + A name consists of a letter followed by letters, digits, periods, or + hyphens. The length of a name is limited to 72 characters by the + `NAMELEN' parameter in the SGML declaration for HTML, 9.5, "SGML + Declaration for HTML". Element and attribute names are not case + sensitive, but entity names are. For example, `<BLOCKQUOTE>', + `<BlockQuote>', and `<blockquote>' are equivalent, whereas `&' is + different from `&'. + + In a start-tag, the element name must immediately follow the tag open + delimiter `<'. + + + + + + + +Berners-Lee & Connolly Standards Track [Page 14] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +3.2.4. Attributes + + In a start-tag, white space and attributes are allowed between the + element name and the closing delimiter. An attribute specification + typically consists of an attribute name, an equal sign, and a value, + though some attribute specifications may be just a name token. White + space is allowed around the equal sign. + + The value of the attribute may be either: + + * A string literal, delimited by single quotes or double + quotes and not containing any occurrences of the delimiting + character. + + NOTE - Some historical implementations consider any + occurrence of the `>' character to signal the end of + a tag. For compatibility with such implementations, + when `>' appears in an attribute value, it should be + represented with a numeric character reference. For + example, `<IMG SRC="eq1.jpg" alt="a>b">' should be + written `<IMG SRC="eq1.jpg" alt="a>b">' or `<IMG + SRC="eq1.jpg" alt="a>b">'. + + * A name token (a sequence of letters, digits, periods, or + hyphens). Name tokens are not case sensitive. + + NOTE - Some historical implementations allow any + character except space or `>' in a name token. + + In this example, <img> is the element name, src is the attribute + name, and `http://host/dir/file.gif' is the attribute value: + + <img src='http://host/dir/file.gif'> + + A useful technique for computing an attribute value literal for a + given string is to replace each quote and white space character by an + entity reference or numeric character reference as follows: + + ENTITY NUMERIC + CHARACTER REFERENCE CHAR REF CHARACTER DESCRIPTION + --------- ---------- ----------- --------------------- + HT Tab + LF Line Feed + CR Carriage Return + SP Space + " " " Quotation mark + & & & Ampersand + + + + +Berners-Lee & Connolly Standards Track [Page 15] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + For example: + + <IMG SRC="image.jpg" alt="First "real" example"> + + The `NAMELEN' parameter in the SGML declaration (9.5, "SGML + Declaration for HTML") limits the length of an attribute value to + 1024 characters. + + Attributes such as ISMAP and COMPACT may be written using a minimized + syntax (see 7.9.1.2 "Omitted Attribute Name" in [SGML]). The markup: + + <UL COMPACT="compact"> + + can be written using a minimized syntax: + + <UL COMPACT> + + NOTE - Some historical implementations only understand the minimized + syntax. + +3.2.5. Comments + + To include comments in an HTML document, use a comment declaration. A + comment declaration consists of `<!' followed by zero or more + comments followed by `>'. Each comment starts with `--' and includes + all text up to and including the next occurrence of `--'. In a + comment declaration, white space is allowed after each comment, but + not before the first comment. The entire comment declaration is + ignored. + + NOTE - Some historical HTML implementations incorrectly consider + any `>' character to be the termination of a comment. + + For example: + + <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> + <HEAD> + <TITLE>HTML Comment Example + + + + + +

+ + + + + + + +Berners-Lee & Connolly Standards Track [Page 16] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +3.3. HTML Public Text Identifiers + + To identify information as an HTML document conforming to this + specification, each document must start with one of the following + document type declarations. + + + + This document type declaration refers to the HTML DTD in 9.1, "HTML + DTD". + + NOTE - If the body of a `text/html' message entity does not begin + with a document type declaration, an HTML user agent should infer + the above document type declaration. + + + + This document type declaration also refers to the HTML DTD which + appears in 9.1, "HTML DTD". + + + + This document type declaration refers to the level 1 HTML DTD in 9.3, + "Level 1 HTML DTD". Form elements must not occur in level 1 + documents. + + + + + These two document type declarations refer to the HTML DTD in 9.2, + "Strict HTML DTD" and 9.4, "Strict Level 1 HTML DTD". They refer to + the more structurally rigid definition of HTML. + + HTML user agents may support other document types. In particular, + they may support other formal public identifiers, or other document + types altogether. They may support an internal declaration subset + with supplemental entity, element, and other markup declarations. + +3.4. Example HTML Document + + + + + + Structural Example + +

First Header

+

This is a paragraph in the example HTML file. Keep in mind + + + +Berners-Lee & Connolly Standards Track [Page 17] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + that the title does not appear in the document text, but that + the header (defined by H1) does.

+
    +
  1. First item in an ordered list. +
  2. Second item in an ordered list. +
      +
    • Note that lists can be nested; +
    • Whitespace may be used to assist in reading the + HTML source. +
    +
  3. Third item in an ordered list. +
+

This is an additional paragraph. Technically, end tags are + not required for paragraphs, although they are allowed. You can + include character highlighting in a paragraph. This sentence + of the paragraph is emphasized. Note that the </P> + end tag has been omitted. +

+ Warning: + Be sure to read these bold instructions. + + +4. HTML as an Internet Media Type + + An HTML user agent allows users to interact with resources which have + HTML representations. At a minimum, it must allow users to examine + and navigate the content of HTML level 1 documents. HTML user agents + should be able to preserve all formatting distinctions represented in + an HTML document, and be able to simultaneously present resources + referred to by IMG elements (they may ignore some formatting + distinctions or IMG resources at the request of the user). Level 2 + HTML user agents should support form entry and submission. + +4.1. text/html media type + + This specification defines the Internet Media Type [IMEDIA] (formerly + referred to as the Content Type [MIME]) called `text/html'. The + following is to be registered with [IANA]. + + Media Type name + text + + Media subtype name + html + + Required parameters + none + + + + +Berners-Lee & Connolly Standards Track [Page 18] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + Optional parameters + level, charset + + Encoding considerations + any encoding is allowed + + Security considerations + see 10, "Security Considerations" + + The optional parameters are defined as follows: + + Level + The level parameter specifies the feature set used in + the document. The level is an integer number, implying + that any features of same or lower level may be present + in the document. Level 1 is all features defined in this + specification except those that require the

+ element. Level 2 includes form processing. Level 2 is + the default. + + Charset + The charset parameter (as defined in section 7.1.1 of + RFC 1521[MIME]) may be given to specify the character + encoding scheme used to represent the HTML document as a + sequence of octets. The default value is outside the + scope of this specification; but for example, the + default is `US-ASCII' in the context of MIME mail, and + `ISO-8859-1' in the context of HTTP [HTTP]. + +4.2. HTML Document Representation + + A message entity with a content type of `text/html' represents an + HTML document, consisting of a single text entity. The `charset' + parameter (whether implicit or explicit) identifies a character + encoding scheme. The text entity consists of the characters + determined by this character encoding scheme and the octets of the + body of the message entity. + +4.2.1. Undeclared Markup Error Handling + + To facilitate experimentation and interoperability between + implementations of various versions of HTML, the installed base of + HTML user agents supports a superset of the HTML 2.0 language by + reducing it to HTML 2.0: markup in the form of a start-tag or end- + tag, whose generic identifier is not declared is mapped to nothing + during tokenization. Undeclared attributes are treated similarly. The + entire attribute specification of an unknown attribute (i.e., the + unknown attribute and its value, if any) should be ignored. On the + + + +Berners-Lee & Connolly Standards Track [Page 19] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + other hand, references to undeclared entities should be treated as + data characters. + + For example: + +

foo

...

+ =>

,"foo",

,

,"..." + xxx

yyy + => "xxx ",

," yyy + Let α & β be finite sets. + => "Let α & β be finite sets." + + Support for notifying the user of such errors is encouraged. + + Information providers are warned that this convention is not binding: + unspecified behavior may result, as such markup does not conform to + this specification. + +4.2.2. Conventional Representation of Newlines + + SGML specifies that a text entity is a sequence of records, each + beginning with a record start character and ending with a record end + character (code positions 10 and 13 respectively) (section 7.6.1, + "Record Boundaries" in [SGML]). + + [MIME] specifies that a body of type `text/*' is a sequence of lines, + each terminated by CRLF, that is, octets 13, 10. + + In practice, HTML documents are frequently represented and + transmitted using an end of line convention that depends on the + conventions of the source of the document; frequently, that + representation consists of CR only, LF only, or a CR LF sequence. + Hence the decoding of the octets will often result in a text entity + with some missing record start and record end characters. + + Since there is no ambiguity, HTML user agents are encouraged to infer + the missing record start and end characters. + + An HTML user agent should treat end of line in any of its variations + as a word space in all contexts except preformatted text. Within + preformatted text, an HTML user agent should treat any of the three + common representations of end-of-line as starting a new line. + +5. Document Structure + + An HTML document is a tree of elements, including a head and body, + headings, paragraphs, lists, etc. Form elements are discussed in 8, + "Forms". + + + +Berners-Lee & Connolly Standards Track [Page 20] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.1. Document Element: HTML + + The HTML document element consists of a head and a body, much like a + memo or a mail message. The head contains the title and optional + elements. The body is a text flow consisting of paragraphs, lists, + and other elements. + +5.2. Head: HEAD + + The head of an HTML document is an unordered collection of + information about the document. For example: + + + + Introduction to HTML + + ... + +5.2.1. Title: TITLE + + Every HTML document must contain a element. + + The title should identify the contents of the document in a global + context. A short title, such as "Introduction" may be meaningless out + of context. A title such as "Introduction to HTML Elements" is more + appropriate. + + NOTE - The length of a title is not limited; however, long titles + may be truncated in some applications. To minimize this + possibility, titles should be fewer than 64 characters. + + A user agent may display the title of a document in a history list or + as a label for the window displaying the document. This differs from + headings (5.4, "Headings: H1 ... H6"), which are typically displayed + within the body text flow. + +5.2.2. Base Address: BASE + + The optional <BASE> element provides a base address for interpreting + relative URLs when the document is read out of context (see 7, + "Hyperlinks"). The value of the HREF attribute must be an absolute + URI. + +5.2.3. Keyword Index: ISINDEX + + The <ISINDEX> element indicates that the user agent should allow the + user to search an index by giving keywords. See 7.5, "Queries and + Indexes" for details. + + + +Berners-Lee & Connolly Standards Track [Page 21] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.2.4. Link: LINK + + The <LINK> element represents a hyperlink (see 7, "Hyperlinks"). Any + number of LINK elements may occur in the <HEAD> element of an HTML + document. It has the same attributes as the <A> element (see 5.7.3, + "Anchor: A"). + + The <LINK> element is typically used to indicate authorship, related + indexes and glossaries, older or more recent versions, document + hierarchy, associated resources such as style sheets, etc. + +5.2.5. Associated Meta-information: META + + The <META> element is an extensible container for use in identifying + specialized document meta-information. Meta-information has two main + functions: + + * to provide a means to discover that the data set exists + and how it might be obtained or accessed; and + + * to document the content, quality, and features of a data + set, indicating its fitness for use. + + Each <META> element specifies a name/value pair. If multiple META + elements are provided with the same name, their combined contents-- + concatenated as a comma-separated list--is the value associated with + that name. + + NOTE - The <META> element should not be used where a + specific element, such as <TITLE>, would be more + appropriate. Rather than a <META> element with a URI as + the value of the CONTENT attribute, use a <LINK> + element. + + HTTP servers may read the content of the document <HEAD> to generate + header fields corresponding to any elements defining a value for the + attribute HTTP-EQUIV. + + NOTE - The method by which the server extracts document + meta-information is unspecified and not mandatory. The + <META> element only provides an extensible mechanism for + identifying and embedding document meta-information -- + how it may be used is up to the individual server + implementation and the HTML user agent. + + + + + + + +Berners-Lee & Connolly Standards Track [Page 22] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + Attributes of the META element: + + HTTP-EQUIV + binds the element to an HTTP header field. An HTTP + server may use this information to process the document. + In particular, it may include a header field in the + responses to requests for this document: the header name + is taken from the HTTP-EQUIV attribute value, and the + header value is taken from the value of the CONTENT + attribute. HTTP header names are not case sensitive. + + NAME + specifies the name of the name/value pair. If not + present, HTTP-EQUIV gives the name. + + CONTENT + specifies the value of the name/value pair. + + Examples + + If the document contains: + + <META HTTP-EQUIV="Expires" + CONTENT="Tue, 04 Dec 1993 21:29:02 GMT"> + <meta http-equiv="Keywords" CONTENT="Fred"> + <META HTTP-EQUIV="Reply-to" + content="fielding@ics.uci.edu (Roy Fielding)"> + <Meta Http-equiv="Keywords" CONTENT="Barney"> + + then the server may include the following header fields: + + Expires: Tue, 04 Dec 1993 21:29:02 GMT + Keywords: Fred, Barney + Reply-to: fielding@ics.uci.edu (Roy Fielding) + + as part of the HTTP response to a `GET' or `HEAD' request for + that document. + + An HTTP server must not use the <META> element to form an HTTP + response header unless the HTTP-EQUIV attribute is present. + + An HTTP server may disregard any <META> elements that specify + information controlled by the HTTP server, for example `Server', + + `Date', and `Last-modified'. + + + + + + +Berners-Lee & Connolly Standards Track [Page 23] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.2.6. Next Id: NEXTID + + The <NEXTID> element is included for historical reasons only. HTML + documents should not contain <NEXTID> elements. + + The <NEXTID> element gives a hint for the name to use for a new <A> + element when editing an HTML document. It should be distinct from all + NAME attribute values on <A> elements. For example: + + <NEXTID N=Z27> + +5.3. Body: BODY + + The <BODY> element contains the text flow of the document, including + headings, paragraphs, lists, etc. + + For example: + + <BODY> + <h1>Important Stuff</h1> + <p>Explanation about important stuff... + </BODY> + +5.4. Headings: H1 ... H6 + + The six heading elements, <H1> through <H6>, denote section headings. + Although the order and occurrence of headings is not constrained by + the HTML DTD, documents should not skip levels (for example, from H1 + to H3), as converting such documents to other representations is + often problematic. + + Example of use: + + <H1>This is a heading</H1> + Here is some text + <H2>Second level heading</H2> + Here is some more text. + + Typical renderings are: + + H1 + Bold, very-large font, centered. One or two blank lines + above and below. + + H2 + Bold, large font, flush-left. One or two blank lines + above and below. + + + + +Berners-Lee & Connolly Standards Track [Page 24] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + H3 + Italic, large font, slightly indented from the left + margin. One or two blank lines above and below. + + H4 + Bold, normal font, indented more than H3. One blank line + above and below. + + H5 + Italic, normal font, indented as H4. One blank line + above. + + H6 + Bold, indented same as normal text, more than H5. One + blank line above. + +5.5. Block Structuring Elements + + Block structuring elements include paragraphs, lists, and block + quotes. They must not contain heading elements, but they may contain + phrase markup, and in some cases, they may be nested. + +5.5.1. Paragraph: P + + The <P> element indicates a paragraph. The exact indentation, leading + space, etc. of a paragraph is not specified and may be a function of + other tags, style sheets, etc. + + Typically, paragraphs are surrounded by a vertical space of one line + or half a line. The first line in a paragraph is indented in some + cases. + + Example of use: + + <H1>This Heading Precedes the Paragraph</H1> + <P>This is the text of the first paragraph. + <P>This is the text of the second paragraph. Although you do not + need to start paragraphs on new lines, maintaining this + convention facilitates document maintenance.</P> + <P>This is the text of a third paragraph.</P> + +5.5.2. Preformatted Text: PRE + + The <PRE> element represents a character cell block of text and is + suitable for text that has been formatted for a monospaced font. + + The <PRE> tag may be used with the optional WIDTH attribute. The + WIDTH attribute specifies the maximum number of characters for a line + + + +Berners-Lee & Connolly Standards Track [Page 25] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + and allows the HTML user agent to select a suitable font and + indentation. + + Within preformatted text: + + * Line breaks within the text are rendered as a move to the + beginning of the next line. + + NOTE - References to the "beginning of a new line" + do not imply that the renderer is forbidden from + using a constant left indent for rendering + preformatted text. The left indent may be + constrained by the width required. + + * Anchor elements and phrase markup may be used. + + NOTE - Constraints on the processing of <PRE> + content may limit or prevent the ability of the HTML + user agent to faithfully render phrase markup. + + * Elements that define paragraph formatting (headings, + address, etc.) must not be used. + + NOTE - Some historical documents contain <P> tags in + <PRE> elements. User agents are encouraged to treat + this as a line break. A <P> tag followed by a + newline character should produce only one line + break, not a line break plus a blank line. + + * The horizontal tab character (code position 9 in the HTML + document character set) must be interpreted as the smallest + positive nonzero number of spaces which will leave the + number of characters so far on the line as a multiple of 8. + Documents should not contain tab characters, as they are not + supported consistently. + + Example of use: + + <PRE> + Line 1. + Line 2 is to the right of line 1. <a href="abc">abc</a> + Line 3 aligns with line 2. <a href="def">def</a> + </PRE> + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 26] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.5.2.1. Example and Listing: XMP, LISTING + + The <XMP> and <LISTING> elements are similar to the <PRE> element, + but they have a different syntax. Their content is declared as CDATA, + which means that no markup except the end-tag open delimiter-in- + context is recognized (see 9.6 "Delimiter Recognition" of [SGML]). + + NOTE - In a previous draft of the HTML specification, the syntax + of <XMP> and <LISTING> elements allowed closing tags to be treated + as data characters, as long as the tag name was not <XMP> or + <LISTING>, respectively. + + Since CDATA declared content has a number of unfortunate interactions + with processing techniques and tends to be used and implemented + inconsistently, HTML documents should not contain <XMP> nor <LISTING> + elements -- the <PRE> tag is more expressive and more consistently + supported. + + The <LISTING> element should be rendered so that at least 132 + characters fit on a line. The <XMP> element should be rendered so + that at least 80 characters fit on a line but is otherwise identical + to the <LISTING> element. + + NOTE - In a previous draft, HTML included a <PLAINTEXT> element + that is similar to the <LISTING> element, except that there is no + closing tag: all characters after the <PLAINTEXT> start-tag are + data. + +5.5.3. Address: ADDRESS + + The <ADDRESS> element contains such information as address, signature + and authorship, often at the beginning or end of the body of a + document. + + Typically, the <ADDRESS> element is rendered in an italic typeface + and may be indented. + + Example of use: + + <ADDRESS> + Newsletter editor<BR> + J.R. Brown<BR> + JimquickPost News, Jimquick, CT 01234<BR> + Tel (123) 456 7890 + </ADDRESS> + + + + + + +Berners-Lee & Connolly Standards Track [Page 27] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.5.4. Block Quote: BLOCKQUOTE + + The <BLOCKQUOTE> element contains text quoted from another source. + + A typical rendering might be a slight extra left and right indent, + and/or italic font. The <BLOCKQUOTE> typically provides space above + and below the quote. + + Single-font rendition may reflect the quotation style of Internet + mail by putting a vertical line of graphic characters, such as the + greater than symbol (>), in the left margin. + + Example of use: + + I think the play ends + <BLOCKQUOTE> + <P>Soft you now, the fair Ophelia. Nymph, in thy orisons, be all + my sins remembered. + </BLOCKQUOTE> + but I am not sure. + +5.6. List Elements + + HTML includes a number of list elements. They may be used in + combination; for example, a <OL> may be nested in an <LI> element of + a <UL>. + + The COMPACT attribute suggests that a compact rendering be used. + +5.6.1. Unordered List: UL, LI + + The <UL> represents a list of items -- typically rendered as a + bulleted list. + + The content of a <UL> element is a sequence of <LI> elements. For + example: + + <UL> + <LI>First list item + <LI>Second list item + <p>second paragraph of second item + <LI>Third list item + </UL> + +5.6.2. Ordered List: OL + + The <OL> element represents an ordered list of items, sorted by + sequence or order of importance. It is typically rendered as a + + + +Berners-Lee & Connolly Standards Track [Page 28] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + numbered list. + + The content of a <OL> element is a sequence of <LI> elements. For + example: + + <OL> + <LI>Click the Web button to open URI window. + <LI>Enter the URI number in the text field of the Open URI + window. The Web document you specified is displayed. + <ol> + <li>substep 1 + <li>substep 2 + </ol> + <LI>Click highlighted text to move from one link to another. + </OL> + +5.6.3. Directory List: DIR + + The <DIR> element is similar to the <UL> element. It represents a + list of short items, typically up to 20 characters each. Items in a + directory list may be arranged in columns, typically 24 characters + wide. + + The content of a <DIR> element is a sequence of <LI> elements. + Nested block elements are not allowed in the content of <DIR> + elements. For example: + + <DIR> + <LI>A-H<LI>I-M + <LI>M-R<LI>S-Z + </DIR> + +5.6.4. Menu List: MENU + + The <MENU> element is a list of items with typically one line per + item. The menu list style is typically more compact than the style of + an unordered list. + + The content of a <MENU> element is a sequence of <LI> elements. + Nested block elements are not allowed in the content of <MENU> + elements. For example: + + <MENU> + <LI>First item in the list. + <LI>Second item in the list. + <LI>Third item in the list. + </MENU> + + + + +Berners-Lee & Connolly Standards Track [Page 29] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.6.5. Definition List: DL, DT, DD + + A definition list is a list of terms and corresponding definitions. + Definition lists are typically formatted with the term flush-left and + the definition, formatted paragraph style, indented after the term. + + The content of a <DL> element is a sequence of <DT> elements and/or + <DD> elements, usually in pairs. Multiple <DT> may be paired with a + single <DD> element. Documents should not contain multiple + consecutive <DD> elements. + + Example of use: + + <DL> + <DT>Term<DD>This is the definition of the first term. + <DT>Term<DD>This is the definition of the second term. + </DL> + + If the DT term does not fit in the DT column (typically one third of + the display area), it may be extended across the page with the DD + section moved to the next line, or it may be wrapped onto successive + lines of the left hand column. + + The optional COMPACT attribute suggests that a compact rendering be + used, because the list items are small and/or the entire list is + large. + + Unless the COMPACT attribute is present, an HTML user agent may leave + white space between successive DT, DD pairs. The COMPACT attribute + may also reduce the width of the left-hand (DT) column. + + <DL COMPACT> + <DT>Term<DD>This is the first definition in compact format. + <DT>Term<DD>This is the second definition in compact format. + </DL> + +5.7. Phrase Markup + + Phrases may be marked up according to idiomatic usage, typographic + appearance, or for use as hyperlink anchors. + + User agents must render highlighted phrases distinctly from plain + text. Additionally, <EM> content must be rendered as distinct from + <STRONG> content, and <B> content must rendered as distinct from <I> + content. + + Phrase elements may be nested within the content of other phrase + elements; however, HTML user agents may render nested phrase elements + + + +Berners-Lee & Connolly Standards Track [Page 30] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + indistinctly from non-nested elements: + + plain <B>bold <I>italic</I></B> may be rendered + the same as plain <B>bold </B><I>italic</I> + +5.7.1. Idiomatic Elements + + Phrases may be marked up to indicate certain idioms. + + NOTE - User agents may support the <DFN> element, not included in + this specification, as it has been deployed to some extent. It is + used to indicate the defining instance of a term, and it is + typically rendered in italic or bold italic. + +5.7.1.1. Citation: CITE + + The <CITE> element is used to indicate the title of a book or + other citation. It is typically rendered as italics. For example: + + He just couldn't get enough of <cite>The Grapes of Wrath</cite>. + +5.7.1.2. Code: CODE + + The <CODE> element indicates an example of code, typically + rendered in a mono-spaced font. The <CODE> element is intended for + short words or phrases of code; the <PRE> block structuring + element (5.5.2, "Preformatted Text: PRE") is more appropriate + for multiple-line listings. For example: + + The expression <code>x += 1</code> + is short for <code>x = x + 1</code>. + +5.7.1.3. Emphasis: EM + + The <EM> element indicates an emphasized phrase, typically + rendered as italics. For example: + + A singular subject <em>always</em> takes a singular verb. + +5.7.1.4. Keyboard: KBD + + The <KBD> element indicates text typed by a user, typically + rendered in a mono-spaced font. This is commonly used in + instruction manuals. For example: + + Enter <kbd>FIND IT</kbd> to search the database. + + + + + +Berners-Lee & Connolly Standards Track [Page 31] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.7.1.5. Sample: SAMP + + The <SAMP> element indicates a sequence of literal characters, + typically rendered in a mono-spaced font. For example: + + The only word containing the letters <samp>mt</samp> is dreamt. + +5.7.1.6. Strong Emphasis: STRONG + + The <STRONG> element indicates strong emphasis, typically rendered + in bold. For example: + + <strong>STOP</strong>, or I'll say "<strong>STOP</strong>" again! + +5.7.1.7. Variable: VAR + + The <VAR> element indicates a placeholder variable, typically + rendered as italic. For example: + + Type <SAMP>html-check <VAR>file</VAR> | more</SAMP> + to check <VAR>file</VAR> for markup errors. + +5.7.2. Typographic Elements + + Typographic elements are used to specify the format of marked + text. + + Typical renderings for idiomatic elements may vary between user + agents. If a specific rendering is necessary -- for example, when + referring to a specific text attribute as in "The italic parts are + mandatory" -- a typographic element can be used to ensure that the + intended typography is used where possible. + + NOTE - User agents may support some typographic elements not + included in this specification, as they have been deployed to some + extent. The <STRIKE> element indicates horizontal line through the + characters, and the <U> element indicates an underline. + +5.7.2.1. Bold: B + + The <B> element indicates bold text. Where bold typography is + unavailable, an alternative representation may be used. + +5.7.2.2. Italic: I + + The <I> element indicates italic text. Where italic typography is + unavailable, an alternative representation may be used. + + + + +Berners-Lee & Connolly Standards Track [Page 32] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +5.7.2.3. Teletype: TT + + The <TT> element indicates teletype (monospaced )text. Where a + teletype font is unavailable, an alternative representation may be + used. + +5.7.3. Anchor: A + + The <A> element indicates a hyperlink anchor (see 7, "Hyperlinks"). + At least one of the NAME and HREF attributes should be present. + Attributes of the <A> element: + + HREF + gives the URI of the head anchor of a hyperlink. + + NAME + gives the name of the anchor, and makes it available as + a head of a hyperlink. + + TITLE + suggests a title for the destination resource -- + advisory only. The TITLE attribute may be used: + + * for display prior to accessing the destination + resource, for example, as a margin note or on a + small box while the mouse is over the anchor, or + while the document is being loaded; + + * for resources that do not include a title, such as + graphics, plain text and Gopher menus, for use as a + window title. + + REL + The REL attribute gives the relationship(s) described by + the hyperlink. The value is a whitespace separated list + of relationship names. The semantics of link + relationships are not specified in this document. + + REV + same as the REL attribute, but the semantics of the + relationship are in the reverse direction. A link from A + to B with REL="X" expresses the same relationship as a + link from B to A with REV="X". An anchor may have both + REL and REV attributes. + + URN + specifies a preferred, more persistent identifier for + the head anchor of the hyperlink. The syntax and + + + +Berners-Lee & Connolly Standards Track [Page 33] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + semantics of the URN attribute are not yet specified. + + METHODS + specifies methods to be used in accessing the + destination, as a whitespace-separated list of names. + The set of applicable names is a function of the scheme + of the URI in the HREF attribute. For similar reasons as + for the TITLE attribute, it may be useful to include the + information in advance in the link. For example, the + HTML user agent may chose a different rendering as a + function of the methods allowed; for example, something + that is searchable may get a different icon. + +5.8. Line Break: BR + + The <BR> element specifies a line break between words (see 6, + "Characters, Words, and Paragraphs"). For example: + + <P> Pease porridge hot<BR> + Pease porridge cold<BR> + Pease porridge in the pot<BR> + Nine days old. + +5.9. Horizontal Rule: HR + + The <HR> element is a divider between sections of text; typically a + full width horizontal rule or equivalent graphic. For example: + + <HR> + <ADDRESS>February 8, 1995, CERN</ADDRESS> + </BODY> + +5.10. Image: IMG + + The <IMG> element refers to an image or icon via a hyperlink (see + 7.3, "Simultaneous Presentation of Image Resources"). + + HTML user agents may process the value of the ALT attribute as an + alternative to processing the image resource indicated by the SRC + attribute. + + NOTE - Some HTML user agents can process graphics linked via + anchors, but not <IMG> graphics. If a graphic is essential, it + should be referenced from an <A> element rather than an <IMG> + element. If the graphic is not essential, then the <IMG> element + is appropriate. + + Attributes of the <IMG> element: + + + +Berners-Lee & Connolly Standards Track [Page 34] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + ALIGN + alignment of the image with respect to the text + baseline. + + * `TOP' specifies that the top of the image aligns + with the tallest item on the line containing the + image. + + * `MIDDLE' specifies that the center of the image + aligns with the baseline of the line containing the + image. + + * `BOTTOM' specifies that the bottom of the image + aligns with the baseline of the line containing the + image. + + ALT + text to use in place of the referenced image resource, + for example due to processing constraints or user + preference. + + ISMAP + indicates an image map (see 7.6, "Image Maps"). + + SRC + specifies the URI of the image resource. + + NOTE - In practice, the media types of image + resources are limited to a few raster graphic + formats: typically `image/gif', `image/jpeg'. In + particular, `text/html' resources are not + intended to be used as image resources. + + Examples of use: + + <IMG SRC="triangle.xbm" ALT="Warning:"> Be sure + to read these instructions. + + <a href="http://machine/htbin/imagemap/sample"> + <IMG SRC="sample.xbm" ISMAP> + </a> + +6. Characters, Words, and Paragraphs + + An HTML user agent should present the body of an HTML document as a + collection of typeset paragraphs and preformatted text. Except for + preformatted elements (<PRE>, <XMP>, <LISTING>, <TEXTAREA>), each + block structuring element is regarded as a paragraph by taking the + + + +Berners-Lee & Connolly Standards Track [Page 35] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + data characters in its content and the content of its descendant + elements, concatenating them, and splitting the result into words, + separated by space, tab, or record end characters (and perhaps hyphen + characters). The sequence of words is typeset as a paragraph by + breaking it into lines. + +6.1. The HTML Document Character Set + + The document character set specified in 9.5, "SGML Declaration for + HTML" must be supported by HTML user agents. It includes the graphic + characters of Latin Alphabet No. 1, or simply Latin-1. Latin-1 + comprises 191 graphic characters, including the alphabets of most + Western European languages. + + NOTE - Use of the non-breaking space and soft hyphen indicator + characters is discouraged because support for them is not widely + deployed. + + NOTE - To support non-western writing systems, a larger character + repertoire will be specified in a future version of HTML. The + document character set will be [ISO-10646], or some subset that + agrees with [ISO-10646]; in particular, all numeric character + references must use code positions assigned by [ISO-10646]. + + In SGML applications, the use of control characters is limited in + order to maximize the chance of successful interchange over + heterogeneous networks and operating systems. In the HTML document + character set only three control characters are allowed: Horizontal + Tab, Carriage Return, and Line Feed (code positions 9, 13, and 10). + + The HTML DTD references the Added Latin 1 entity set, to allow + mnemonic representation of selected Latin 1 characters using only the + widely supported ASCII character repertoire. For example: + + Kurt Gödel was a famous logician and mathematician. + + See 9.7.2, "ISO Latin 1 Character Entity Set" for a table of the + "Added Latin 1" entities, and 13, "The HTML Coded Character Set" for + a table of the code positions of [ISO 8859-1] and the control + characters in the HTML document character set. + +7. Hyperlinks + + In addition to general purpose elements such as paragraphs and lists, + HTML documents can express hyperlinks. An HTML user agent allows the + user to navigate these hyperlinks. + + + + + +Berners-Lee & Connolly Standards Track [Page 36] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + A hyperlink is a relationship between two anchors, called the head + and the tail of the hyperlink[DEXTER]. Anchors are identified by an + anchor address: an absolute Uniform Resource Identifier (URI), + optionally followed by a '#' and a sequence of characters called a + fragment identifier. For example: + + http://www.w3.org/hypertext/WWW/TheProject.html + http://www.w3.org/hypertext/WWW/TheProject.html#z31 + + In an anchor address, the URI refers to a resource; it may be used in + a variety of information retrieval protocols to obtain an entity that + represents the resource, such as an HTML document. The fragment + identifier, if present, refers to some view on, or portion of the + resource. + + Each of the following markup constructs indicates the tail anchor of + a hyperlink or set of hyperlinks: + + * <A> elements with HREF present. + + * <LINK> elements. + + * <IMG> elements. + + * <INPUT> elements with the SRC attribute present. + + * <ISINDEX> elements. + + * <FORM> elements with `METHOD=GET'. + + These markup constructs refer to head anchors by a URI, either + absolute or relative, or a fragment identifier, or both. + + In the case of a relative URI, the absolute URI in the address of the + head anchor is the result of combining the relative URI with a base + absolute URI as in [RELURL]. The base document is taken from the + document's <BASE> element, if present; else, it is determined as in + [RELURL]. + +7.1. Accessing Resources + + Once the address of the head anchor is determined, the user agent may + obtain a representation of the resource. + + For example, if the base URI is `http://host/x/y.html' and the + document contains: + + <img src="../icons/abc.gif"> + + + +Berners-Lee & Connolly Standards Track [Page 37] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + then the user agent uses the URI `http://host/icons/abc.gif' to + access the resource, as in [URL].. + +7.2. Activation of Hyperlinks + + An HTML user agent allows the user to navigate the content of the + document and request activation of hyperlinks denoted by <A> + elements. HTML user agents should also allow activation of <LINK> + element hyperlinks. + + To activate a link, the user agent obtains a representation of the + resource identified in the address of the head anchor. If the + representation is another HTML document, navigation may begin again + with this new document. + +7.3. Simultaneous Presentation of Image Resources + + An HTML user agent may activate hyperlinks indicated by <IMG> and + <INPUT> elements concurrently with processing the document; that is, + image hyperlinks may be processed without explicit request by the + user. Image resources should be embedded in the presentation at the + point of the tail anchor, that is the <IMG> or <INPUT> element. + + <LINK> hyperlinks may also be processed without explicit user + request; for example, style sheet resources may be processed before + or during the processing of the document. + +7.4. Fragment Identifiers + + Any characters following a `#' character in a hypertext address + constitute a fragment identifier. In particular, an address of the + form `#fragment' refers to an anchor in the same document. + + The meaning of fragment identifiers depends on the media type of the + representation of the anchor's resource. For `text/html' + representations, it refers to the <A> element with a NAME attribute + whose value is the same as the fragment identifier. The matching is + case sensitive. The document should have exactly one such element. + The user agent should indicate the anchor element, for example by + scrolling to and/or highlighting the phrase. + + For example, if the base URI is `http://host/x/y.html' and the user + activated the link denoted by the following markup: + + <p> See: <a href="app1.html#bananas">appendix 1</a> + for more detail on bananas. + + + + + +Berners-Lee & Connolly Standards Track [Page 38] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + Then the user agent accesses the resource identified by + `http://host/x/app1.html'. Assuming the resource is represented using + the `text/html' media type, the user agent must locate the <A> + element whose NAME attribute is `bananas' and begin navigation there. + +7.5. Queries and Indexes + + The <ISINDEX> element represents a set of hyperlinks. The user can + choose from the set by providing keywords to the user agent. The + user agent computes the head URI by appending `?' and the keywords to + the base URI. The keywords are escaped according to [URL] and joined + by `+'. For example, if a document contains: + + <BASE HREF="http://host/index"> + <ISINDEX> + + and the user provides the keywords `apple' and `berry', then the + user agent must access the resource + `http://host/index?apple+berry'. + + <FORM> elements with `METHOD=GET' also represent sets of + hyperlinks. See 8.2.2, "Query Forms: METHOD=GET" for details. + +7.6. Image Maps + + If the ISMAP attribute is present on an <IMG> element, the <IMG> + element must be contained in an <A> element with an HREF present. + This construct represents a set of hyperlinks. The user can choose + from the set by choosing a pixel of the image. The user agent + computes the head URI by appending `?' and the x and y coordinates of + the pixel to the URI given in the <A> element. For example, if a + document contains: + + <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> + <head><title>ImageMap Example + + +

Choose any of these icons:
+
+ + and the user chooses the upper-leftmost pixel, the chosen + hyperlink is the one with the URI + `http://host/cgi-bin/imagemap?0,0'. + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 39] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +8. Forms + + A form is a template for a form data set and an associated + method and action URI. A form data set is a sequence of + name/value pair fields. The names are specified on the NAME + attributes of form input elements, and the values are given + initial values by various forms of markup and edited by the + user. The resulting form data set is used to access an + information service as a function of the action and method. + + Forms elements can be mixed in with document structuring + elements. For example, a

 element may contain a 
+   element, or a  element may contain lists which contain
+    elements. This gives considerable flexibility in
+   designing the layout of forms.
+
+   Form processing is a level 2 feature.
+
+8.1. Form Elements
+
+8.1.1. Form: FORM
+
+   The  element contains a sequence of input elements, along
+   with document structuring elements. The attributes are:
+
+    ACTION
+            specifies the action URI for the form. The action URI of
+            a form defaults to the base URI of the document (see 7,
+            "Hyperlinks").
+
+    METHOD
+            selects a method of accessing the action URI. The set of
+            applicable methods is a function of the scheme of the
+            action URI of the form. See 8.2.2, "Query Forms:
+            METHOD=GET" and 8.2.3, "Forms with Side-Effects:
+            METHOD=POST".
+
+    ENCTYPE
+            specifies the media type used to encode the name/value
+            pairs for transport, in case the protocol does not
+            itself impose a format. See 8.2.1, "The form-urlencoded
+            Media Type".
+
+8.1.2. Input Field: INPUT
+
+   The  element represents a field for user input. The TYPE
+   attribute discriminates between several variations of fields.
+
+
+
+
+Berners-Lee & Connolly      Standards Track                    [Page 40]
+
+RFC 1866            Hypertext Markup Language - 2.0        November 1995
+
+
+   The  element has a number of attributes. The set of applicable
+   attributes depends on the value of the TYPE attribute.
+
+8.1.2.1. Text Field: INPUT TYPE=TEXT
+
+   The default value of the TYPE attribute is `TEXT', indicating a
+   single line text entry field. (Use the 
+
+   The content of the 
+    
+    Nickname: 
+    

Thank you for responding to this questionnaire. +

+

+ + + + +Berners-Lee & Connolly Standards Track [Page 47] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + The initial state of the form data set is: + + name + "" + + gender + "male" + + family + "" + + other + "" + + nickname + "" + + Note that the radio input has an initial value, while the + checkbox has none. + + The user might edit the fields and request that the form be + submitted. At that point, suppose the values are: + + name + "John Doe" + + gender + "male" + + family + "5" + + city + "kent" + + city + "miami" + + other + "abc\ndefk" + + nickname + "J&D" + + The user agent then conducts an HTTP POST transaction using the URI + `http://www.w3.org/sample'. The message body would be (ignore the + line break): + + + + +Berners-Lee & Connolly Standards Track [Page 48] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + name=John+Doe&gender=male&family=5&city=kent&city=miami& + other=abc%0D%0Adef&nickname=J%26D + +9. HTML Public Text + +9.1. HTML DTD + + This is the Document Type Definition for the HyperText Markup + Language, level 2. + + + + + + ... + + -- + > + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 49] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +]]> + + + + + + + + + + + + + + + + + + + + + + + +%ISOlat1; + + + + + +Berners-Lee & Connolly Standards Track [Page 50] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + +Heading + is preferred to +

Heading

+ --> +]]> + + + + +" + > + + + + + + + + + + + + + +#AttVal(Alt)" + > + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 53] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + +Berners-Lee & Connolly Standards Track [Page 54] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + +Directory" + > + + + +Berners-Lee & Connolly Standards Track [Page 56] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +Menu" + > + + + + + + + + + + + + + +Heading +

Text ... + is preferred to +

Heading

+ Text ... + --> +]]> + + + + + + + + + + + + + + + + + + + + + +Form:" + %SDASUFF; "Form End." + > + + + + + + + + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 58] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + +Select #AttVal(Multiple)" + > + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + +]]> + + + + + + + + + + + + + + +" > + + + + + + + + + + +[Document is indexed/searchable.]"> + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 60] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + + + + + + + + + + + + +]]> + + + + + + + + + +9.2. Strict HTML DTD + + This document type declaration refers to the HTML DTD with the + `HTML.Recommended' entity defined as `INCLUDE' rather than IGNORE; + that is, it refers to the more structurally rigid definition of HTML. + + + + + + +Berners-Lee & Connolly Standards Track [Page 61] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + ... + + -- + > + + + + + +%html; + +9.3. Level 1 HTML DTD + + This document type declaration refers to the HTML DTD with the + `HTML.Forms' entity defined as `IGNORE' rather than `INCLUDE'. + Documents which contain
elements do not conform to this DTD, + and must use the level 2 DTD. + + + + + + ... + + + + +Berners-Lee & Connolly Standards Track [Page 62] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + -- + > + + + + + +%html; + +9.4. Strict Level 1 HTML DTD + + This document type declaration refers to the level 1 HTML DTD with + the `HTML.Recommended' entity defined as `INCLUDE' rather than + IGNORE; that is, it refers to the more structurally rigid definition + of HTML. + + + + + + ... + + -- + > + + + + + + + +%html-1; + + + + +Berners-Lee & Connolly Standards Track [Page 63] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +9.5. SGML Declaration for HTML + + This is the SGML Declaration for HyperText Markup Language. + + + + +9.6. Sample SGML Open Entity Catalog for HTML + + The SGML standard describes an "entity manager" as the portion or + component of an SGML system that maps SGML entities into the actual + storage model (e.g., the file system). The standard itself does not + + + +Berners-Lee & Connolly Standards Track [Page 65] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + define a particular mapping methodology or notation. + + To assist the interoperability among various SGML tools and systems, + the SGML Open consortium has passed a technical resolution that + defines a format for an application-independent entity catalog that + maps external identifiers and/or entity names to file names. + + Each entry in the catalog associates a storage object identifier + (such as a file name) with information about the external entity that + appears in the SGML document. In addition to entries that associate + public identifiers, a catalog entry can associate an entity name with + a storage object identifier. For example, the following are possible + catalog entries: + + -- catalog: SGML Open style entity catalog for HTML -- + -- $Id: catalog,v 1.3 1995/09/21 23:30:23 connolly Exp $ -- + + -- Ways to refer to Level 2: most general to most specific -- +PUBLIC "-//IETF//DTD HTML//EN" html.dtd +PUBLIC "-//IETF//DTD HTML 2.0//EN" html.dtd +PUBLIC "-//IETF//DTD HTML Level 2//EN" html.dtd +PUBLIC "-//IETF//DTD HTML 2.0 Level 2//EN" html.dtd + + -- Ways to refer to Level 1: most general to most specific -- +PUBLIC "-//IETF//DTD HTML Level 1//EN" html-1.dtd +PUBLIC "-//IETF//DTD HTML 2.0 Level 1//EN" html-1.dtd + + -- Ways to refer to + Strict Level 2: most general to most specific -- +PUBLIC "-//IETF//DTD HTML Strict//EN" html-s.dtd +PUBLIC "-//IETF//DTD HTML 2.0 Strict//EN" html-s.dtd +PUBLIC "-//IETF//DTD HTML Strict Level 2//EN" html-s.dtd +PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN" html-s.dtd + + -- Ways to refer to + Strict Level 1: most general to most specific -- +PUBLIC "-//IETF//DTD HTML Strict Level 1//EN" html-1s.dtd +PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 1//EN" html-1s.dtd + + -- ISO latin 1 entity set for HTML -- +PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML" ISOlat1\ +sgml + +9.7. Character Entity Sets + + The HTML DTD defines the following entities. They represent + particular graphic characters which have special meanings in places + in the markup, or may not be part of the character set available to + + + +Berners-Lee & Connolly Standards Track [Page 66] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + the writer. + +9.7.1. Numeric and Special Graphic Entity Set + + The following table lists each of the characters included from the + Numeric and Special Graphic entity set, along with its name, syntax + for use, and description. This list is derived from `ISO Standard + 8879:1986//ENTITIES Numeric and Special Graphic//EN'. However, HTML + does not include for the entire entity set -- only the entities + listed below are included. + + GLYPH NAME SYNTAX DESCRIPTION + < lt < Less than sign + > gt > Greater than signn + & amp & Ampersand + " quot " Double quote sign + +9.7.2. ISO Latin 1 Character Entity Set + + The following public text lists each of the characters specified in + the Added Latin 1 entity set, along with its name, syntax for use, + and description. This list is derived from ISO Standard + 8879:1986//ENTITIES Added Latin 1//EN. HTML includes the entire + entity set. + + + + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 67] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 68] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + + +10. Security Considerations + + Anchors, embedded images, and all other elements which contain URIs + as parameters may cause the URI to be dereferenced in response to + user input. In this case, the security considerations of [URL] apply. + + The widely deployed methods for submitting forms requests -- HTTP and + SMTP -- provide little assurance of confidentiality. Information + providers who request sensitive information via forms -- especially + by way of the `PASSWORD' type input field (see 8.1.2, "Input Field: + INPUT") -- should be aware and make their users aware of the lack of + confidentiality. + +11. References + + [URI] + Berners-Lee, T., "Universal Resource Identifiers in WWW: + A Unifying Syntax for the Expression of Names and + Addresses of Objects on the Network as used in the + World- Wide Web", RFC 1630, CERN, June 1994. + + + [URL] + Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform + Resource Locators (URL)", RFC 1738, CERN, Xerox PARC, + University of Minnesota, December 1994. + + + [HTTP] + Berners-Lee, T., Fielding, R., and H. Frystyk Nielsen, + "Hypertext Transfer Protocol - HTTP/1.0", Work in + Progress, MIT, UC Irvine, CERN, March 1995. + + [MIME] + Borenstein, N., and N. Freed. "MIME (Multipurpose + Internet Mail Extensions) Part One: Mechanisms for + Specifying and Describing the Format of Internet Message + Bodies", RFC 1521, Bellcore, Innosoft, September 1993. + + + [RELURL] + Fielding, R., "Relative Uniform Resource Locators", RFC + 1808, June 1995 + + + + +Berners-Lee & Connolly Standards Track [Page 69] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + [GOLD90] + Goldfarb, C., "The SGML Handbook", Y. Rubinsky, Ed., + Oxford University Press, 1990. + + [DEXTER] + Frank Halasz and Mayer Schwartz, "The Dexter Hypertext + Reference Model", Communications of the ACM, pp. + 30-39, vol. 37 no. 2, Feb 1994. + + [IMEDIA] + Postel, J., "Media Type Registration Procedure", + RFC 1590, USC/Information Sciences Institute, March 1994. + + + [IANA] + Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, + RFC 1700, USC/Information Sciecnes Institute, October + 1994. + + [SQ91] + SoftQuad. "The SGML Primer", 3rd ed., SoftQuad Inc., + 1991. + + [ISO-646] + ISO/IEC 646:1991 Information technology -- ISO 7-bit + coded character set for information interchange + + + [ISO-10646] + ISO/IEC 10646-1:1993 Information technology -- Universal + Multiple-Octet Coded Character Set (UCS) -- Part 1: + Architecture and Basic Multilingual Plane + + + [ISO-8859-1] + ISO 8859. International Standard -- Information + Processing -- 8-bit Single-Byte Coded Graphic Character + Sets -- Part 1: Latin Alphabet No. 1, ISO 8859-1:1987. + + + [SGML] + ISO 8879. Information Processing -- Text and Office + Systems - Standard Generalized Markup Language (SGML), + 1986. + + + + + + + +Berners-Lee & Connolly Standards Track [Page 70] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +12. Acknowledgments + + The HTML document type was designed by Tim Berners-Lee at CERN as + part of the 1990 World Wide Web project. In 1992, Dan Connolly wrote + the HTML Document Type Definition (DTD) and a brief HTML + specification. + + Since 1993, a wide variety of Internet participants have contributed + to the evolution of HTML, which has included the addition of in-line + images introduced by the NCSA Mosaic software for WWW. Dave Raggett + played an important role in deriving the forms material from the + HTML+ specification. + + Dan Connolly and Karen Olson Muldrow rewrote the HTML Specification + in 1994. The document was then edited by the HTML working group as a + whole, with updates being made by Eric Schieler, Mike Knezovich, and + Eric W. Sink at Spyglass, Inc. Finally, Roy Fielding restructured + the entire draft into its current form. + + Special thanks to the many active participants in the HTML working + group, too numerous to list individually, without whom there would be + no standards process and no standard. That this document approaches + its objective of carefully converging a description of current + practice and formalization of HTML's relationship to SGML is a + tribute to their effort. + +12.1. Authors' Addresses + + Tim Berners-Lee + Director, W3 Consortium + MIT Laboratory for Computer Science + 545 Technology Square + Cambridge, MA 02139, U.S.A. + + Phone: +1 (617) 253 9670 + Fax: +1 (617) 258 8682 + EMail: timbl@w3.org + + + Daniel W. Connolly + Research Technical Staff, W3 Consortium + MIT Laboratory for Computer Science + 545 Technology Square + Cambridge, MA 02139, U.S.A. + + Phone: +1 (617) 258 8682 + EMail: connolly@w3.org + URI: http://www.w3.org/hypertext/WWW/People/Connolly/ + + + +Berners-Lee & Connolly Standards Track [Page 71] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + +13. The HTML Coded Character Set + + This list details the code positions and characters of the HTML + document character set, specified in 9.5, "SGML Declaration for + HTML". This coded character set is based on [ISO-8859-1]. + + REFERENCE DESCRIPTION + -------------- ----------- + � -  Unused + Horizontal tab + Line feed + - Unused + Carriage Return +  -  Unused + Space + ! Exclamation mark + " Quotation mark + # Number sign + $ Dollar sign + % Percent sign + & Ampersand + ' Apostrophe + ( Left parenthesis + ) Right parenthesis + * Asterisk + + Plus sign + , Comma + - Hyphen + . Period (fullstop) + / Solidus (slash) + 0 - 9 Digits 0-9 + : Colon + ; Semi-colon + < Less than + = Equals sign + > Greater than + ? Question mark + @ Commercial at + A - Z Letters A-Z + [ Left square bracket + \ Reverse solidus (backslash) + ] Right square bracket + ^ Caret + _ Horizontal bar (underscore) + ` Acute accent + a - z Letters a-z + { Left curly brace + | Vertical bar + + + +Berners-Lee & Connolly Standards Track [Page 72] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + } Right curly brace + ~ Tilde +  - Ÿ Unused +   Non-breaking Space + ¡ Inverted exclamation + ¢ Cent sign + £ Pound sterling + ¤ General currency sign + ¥ Yen sign + ¦ Broken vertical bar + § Section sign + ¨ Umlaut (dieresis) + © Copyright + ª Feminine ordinal + « Left angle quote, guillemotleft + ¬ Not sign + ­ Soft hyphen + ® Registered trademark + ¯ Macron accent + ° Degree sign + ± Plus or minus + ² Superscript two + ³ Superscript three + ´ Acute accent + µ Micro sign + ¶ Paragraph sign + · Middle dot + ¸ Cedilla + ¹ Superscript one + º Masculine ordinal + » Right angle quote, guillemotright + ¼ Fraction one-fourth + ½ Fraction one-half + ¾ Fraction three-fourths + ¿ Inverted question mark + À Capital A, grave accent + Á Capital A, acute accent + Â Capital A, circumflex accent + Ã Capital A, tilde + Ä Capital A, dieresis or umlaut mark + Å Capital A, ring + Æ Capital AE dipthong (ligature) + Ç Capital C, cedilla + È Capital E, grave accent + É Capital E, acute accent + Ê Capital E, circumflex accent + Ë Capital E, dieresis or umlaut mark + Ì Capital I, grave accent + + + +Berners-Lee & Connolly Standards Track [Page 73] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + Í Capital I, acute accent + Î Capital I, circumflex accent + Ï Capital I, dieresis or umlaut mark + Ð Capital Eth, Icelandic + Ñ Capital N, tilde + Ò Capital O, grave accent + Ó Capital O, acute accent + Ô Capital O, circumflex accent + Õ Capital O, tilde + Ö Capital O, dieresis or umlaut mark + × Multiply sign + Ø Capital O, slash + Ù Capital U, grave accent + Ú Capital U, acute accent + Û Capital U, circumflex accent + Ü Capital U, dieresis or umlaut mark + Ý Capital Y, acute accent + Þ Capital THORN, Icelandic + ß Small sharp s, German (sz ligature) + à Small a, grave accent + á Small a, acute accent + â Small a, circumflex accent + ã Small a, tilde + ä Small a, dieresis or umlaut mark + å Small a, ring + æ Small ae dipthong (ligature) + ç Small c, cedilla + è Small e, grave accent + é Small e, acute accent + ê Small e, circumflex accent + ë Small e, dieresis or umlaut mark + ì Small i, grave accent + í Small i, acute accent + î Small i, circumflex accent + ï Small i, dieresis or umlaut mark + ð Small eth, Icelandic + ñ Small n, tilde + ò Small o, grave accent + ó Small o, acute accent + ô Small o, circumflex accent + õ Small o, tilde + ö Small o, dieresis or umlaut mark + ÷ Division sign + ø Small o, slash + ù Small u, grave accent + ú Small u, acute accent + û Small u, circumflex accent + ü Small u, dieresis or umlaut mark + + + +Berners-Lee & Connolly Standards Track [Page 74] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + ý Small y, acute accent + þ Small thorn, Icelandic + ÿ Small y, dieresis or umlaut mark + +14. Proposed Entities + + The HTML DTD references the "Added Latin 1" entity set, which only + supplies named entities for a subset of the non-ASCII characters in + [ISO-8859-1], namely the accented characters. The following entities + should be supported so that all ISO 8859-1 characters may only be + referenced symbolically. The names for these entities are taken from + the appendixes of [SGML]. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 75] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 76] + +RFC 1866 Hypertext Markup Language - 2.0 November 1995 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Berners-Lee & Connolly Standards Track [Page 77] + diff --git a/socket/DOCS/RFC2068.TXT b/socket/DOCS/RFC2068.TXT new file mode 100644 index 0000000..bccd609 --- /dev/null +++ b/socket/DOCS/RFC2068.TXT @@ -0,0 +1,8175 @@ +rfc2068 + +Press here to go to the top of the rfc 'tree'. + +Network Working Group R. Fielding +Request for Comments: 2068 UC Irvine +Category: Standards Track J. Gettys + J. Mogul + DEC + H. Frystyk + T. Berners-Lee + MIT/LCS + January 1997 + + Hypertext Transfer Protocol -- HTTP/1.1 + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Abstract + + The Hypertext Transfer Protocol (HTTP) is an application-level + protocol for distributed, collaborative, hypermedia information + systems. It is a generic, stateless, object-oriented protocol which + can be used for many tasks, such as name servers and distributed + object management systems, through extension of its request methods. + A feature of HTTP is the typing and negotiation of data + representation, allowing systems to be built independently of the + data being transferred. + + HTTP has been in use by the World-Wide Web global information + initiative since 1990. This specification defines the protocol + referred to as "HTTP/1.1". + +Table of Contents + + 1 Introduction.............................................7 + 1.1 Purpose ..............................................7 + 1.2 Requirements .........................................7 + 1.3 Terminology ..........................................8 + 1.4 Overall Operation ...................................11 + 2 Notational Conventions and Generic Grammar..............13 + 2.1 Augmented BNF .......................................13 + 2.2 Basic Rules .........................................15 + 3 Protocol Parameters.....................................17 + 3.1 HTTP Version ........................................17 + +Fielding, et. al. Standards Track [Page 1] + +RFC 2068 HTTP/1.1 January 1997 + + 3.2 Uniform Resource Identifiers ........................18 + 3.2.1 General Syntax ...................................18 + 3.2.2 http URL .........................................19 + 3.2.3 URI Comparison ...................................20 + 3.3 Date/Time Formats ...................................21 + 3.3.1 Full Date ........................................21 + 3.3.2 Delta Seconds ....................................22 + 3.4 Character Sets ......................................22 + 3.5 Content Codings .....................................23 + 3.6 Transfer Codings ....................................24 + 3.7 Media Types .........................................25 + 3.7.1 Canonicalization and Text Defaults ...............26 + 3.7.2 Multipart Types ..................................27 + 3.8 Product Tokens ......................................28 + 3.9 Quality Values ......................................28 + 3.10 Language Tags ......................................28 + 3.11 Entity Tags ........................................29 + 3.12 Range Units ........................................30 + 4 HTTP Message............................................30 + 4.1 Message Types .......................................30 + 4.2 Message Headers .....................................31 + 4.3 Message Body ........................................32 + 4.4 Message Length ......................................32 + 4.5 General Header Fields ...............................34 + 5 Request.................................................34 + 5.1 Request-Line ........................................34 + 5.1.1 Method ...........................................35 + 5.1.2 Request-URI ......................................35 + 5.2 The Resource Identified by a Request ................37 + 5.3 Request Header Fields ...............................37 + 6 Response................................................38 + 6.1 Status-Line .........................................38 + 6.1.1 Status Code and Reason Phrase ....................39 + 6.2 Response Header Fields ..............................41 + 7 Entity..................................................41 + 7.1 Entity Header Fields ................................41 + 7.2 Entity Body .........................................42 + 7.2.1 Type .............................................42 + 7.2.2 Length ...........................................43 + 8 Connections.............................................43 + 8.1 Persistent Connections ..............................43 + 8.1.1 Purpose ..........................................43 + 8.1.2 Overall Operation ................................44 + 8.1.3 Proxy Servers ....................................45 + 8.1.4 Practical Considerations .........................45 + 8.2 Message Transmission Requirements ...................46 + 9 Method Definitions......................................48 + 9.1 Safe and Idempotent Methods .........................48 + +Fielding, et. al. Standards Track [Page 2] + +RFC 2068 HTTP/1.1 January 1997 + + 9.1.1 Safe Methods .....................................48 + 9.1.2 Idempotent Methods ...............................49 + 9.2 OPTIONS .............................................49 + 9.3 GET .................................................50 + 9.4 HEAD ................................................50 + 9.5 POST ................................................51 + 9.6 PUT .................................................52 + 9.7 DELETE ..............................................53 + 9.8 TRACE ...............................................53 + 10 Status Code Definitions................................53 + 10.1 Informational 1xx ..................................54 + 10.1.1 100 Continue ....................................54 + 10.1.2 101 Switching Protocols .........................54 + 10.2 Successful 2xx .....................................54 + 10.2.1 200 OK ..........................................54 + 10.2.2 201 Created .....................................55 + 10.2.3 202 Accepted ....................................55 + 10.2.4 203 Non-Authoritative Information ...............55 + 10.2.5 204 No Content ..................................55 + 10.2.6 205 Reset Content ...............................56 + 10.2.7 206 Partial Content .............................56 + 10.3 Redirection 3xx ....................................56 + 10.3.1 300 Multiple Choices ............................57 + 10.3.2 301 Moved Permanently ...........................57 + 10.3.3 302 Moved Temporarily ...........................58 + 10.3.4 303 See Other ...................................58 + 10.3.5 304 Not Modified ................................58 + 10.3.6 305 Use Proxy ...................................59 + 10.4 Client Error 4xx ...................................59 + 10.4.1 400 Bad Request .................................60 + 10.4.2 401 Unauthorized ................................60 + 10.4.3 402 Payment Required ............................60 + 10.4.4 403 Forbidden ...................................60 + 10.4.5 404 Not Found ...................................60 + 10.4.6 405 Method Not Allowed ..........................61 + 10.4.7 406 Not Acceptable ..............................61 + 10.4.8 407 Proxy Authentication Required ...............61 + 10.4.9 408 Request Timeout .............................62 + 10.4.10 409 Conflict ...................................62 + 10.4.11 410 Gone .......................................62 + 10.4.12 411 Length Required ............................63 + 10.4.13 412 Precondition Failed ........................63 + 10.4.14 413 Request Entity Too Large ...................63 + 10.4.15 414 Request-URI Too Long .......................63 + 10.4.16 415 Unsupported Media Type .....................63 + 10.5 Server Error 5xx ...................................64 + 10.5.1 500 Internal Server Error .......................64 + 10.5.2 501 Not Implemented .............................64 + +Fielding, et. al. Standards Track [Page 3] + +RFC 2068 HTTP/1.1 January 1997 + + 10.5.3 502 Bad Gateway .................................64 + 10.5.4 503 Service Unavailable .........................64 + 10.5.5 504 Gateway Timeout .............................64 + 10.5.6 505 HTTP Version Not Supported ..................65 + 11 Access Authentication..................................65 + 11.1 Basic Authentication Scheme ........................66 + 11.2 Digest Authentication Scheme .......................67 + 12 Content Negotiation....................................67 + 12.1 Server-driven Negotiation ..........................68 + 12.2 Agent-driven Negotiation ...........................69 + 12.3 Transparent Negotiation ............................70 + 13 Caching in HTTP........................................70 + 13.1.1 Cache Correctness ...............................72 + 13.1.2 Warnings ........................................73 + 13.1.3 Cache-control Mechanisms ........................74 + 13.1.4 Explicit User Agent Warnings ....................74 + 13.1.5 Exceptions to the Rules and Warnings ............75 + 13.1.6 Client-controlled Behavior ......................75 + 13.2 Expiration Model ...................................75 + 13.2.1 Server-Specified Expiration .....................75 + 13.2.2 Heuristic Expiration ............................76 + 13.2.3 Age Calculations ................................77 + 13.2.4 Expiration Calculations .........................79 + 13.2.5 Disambiguating Expiration Values ................80 + 13.2.6 Disambiguating Multiple Responses ...............80 + 13.3 Validation Model ...................................81 + 13.3.1 Last-modified Dates .............................82 + 13.3.2 Entity Tag Cache Validators .....................82 + 13.3.3 Weak and Strong Validators ......................82 + 13.3.4 Rules for When to Use Entity Tags and Last- + modified Dates..........................................85 + 13.3.5 Non-validating Conditionals .....................86 + 13.4 Response Cachability ...............................86 + 13.5 Constructing Responses From Caches .................87 + 13.5.1 End-to-end and Hop-by-hop Headers ...............88 + 13.5.2 Non-modifiable Headers ..........................88 + 13.5.3 Combining Headers ...............................89 + 13.5.4 Combining Byte Ranges ...........................90 + 13.6 Caching Negotiated Responses .......................90 + 13.7 Shared and Non-Shared Caches .......................91 + 13.8 Errors or Incomplete Response Cache Behavior .......91 + 13.9 Side Effects of GET and HEAD .......................92 + 13.10 Invalidation After Updates or Deletions ...........92 + 13.11 Write-Through Mandatory ...........................93 + 13.12 Cache Replacement .................................93 + 13.13 History Lists .....................................93 + 14 Header Field Definitions...............................94 + 14.1 Accept .............................................95 + +Fielding, et. al. Standards Track [Page 4] + +RFC 2068 HTTP/1.1 January 1997 + + 14.2 Accept-Charset .....................................97 + 14.3 Accept-Encoding ....................................97 + 14.4 Accept-Language ....................................98 + 14.5 Accept-Ranges ......................................99 + 14.6 Age ................................................99 + 14.7 Allow .............................................100 + 14.8 Authorization .....................................100 + 14.9 Cache-Control .....................................101 + 14.9.1 What is Cachable ...............................103 + 14.9.2 What May be Stored by Caches ...................103 + 14.9.3 Modifications of the Basic Expiration Mechanism 104 + 14.9.4 Cache Revalidation and Reload Controls .........105 + 14.9.5 No-Transform Directive .........................107 + 14.9.6 Cache Control Extensions .......................108 + 14.10 Connection .......................................109 + 14.11 Content-Base .....................................109 + 14.12 Content-Encoding .................................110 + 14.13 Content-Language .................................110 + 14.14 Content-Length ...................................111 + 14.15 Content-Location .................................112 + 14.16 Content-MD5 ......................................113 + 14.17 Content-Range ....................................114 + 14.18 Content-Type .....................................116 + 14.19 Date .............................................116 + 14.20 ETag .............................................117 + 14.21 Expires ..........................................117 + 14.22 From .............................................118 + 14.23 Host .............................................119 + 14.24 If-Modified-Since ................................119 + 14.25 If-Match .........................................121 + 14.26 If-None-Match ....................................122 + 14.27 If-Range .........................................123 + 14.28 If-Unmodified-Since ..............................124 + 14.29 Last-Modified ....................................124 + 14.30 Location .........................................125 + 14.31 Max-Forwards .....................................125 + 14.32 Pragma ...........................................126 + 14.33 Proxy-Authenticate ...............................127 + 14.34 Proxy-Authorization ..............................127 + 14.35 Public ...........................................127 + 14.36 Range ............................................128 + 14.36.1 Byte Ranges ...................................128 + 14.36.2 Range Retrieval Requests ......................130 + 14.37 Referer ..........................................131 + 14.38 Retry-After ......................................131 + 14.39 Server ...........................................132 + 14.40 Transfer-Encoding ................................132 + 14.41 Upgrade ..........................................132 + +Fielding, et. al. Standards Track [Page 5] + +RFC 2068 HTTP/1.1 January 1997 + + 14.42 User-Agent .......................................134 + 14.43 Vary .............................................134 + 14.44 Via ..............................................135 + 14.45 Warning ..........................................137 + 14.46 WWW-Authenticate .................................139 + 15 Security Considerations...............................139 + 15.1 Authentication of Clients .........................139 + 15.2 Offering a Choice of Authentication Schemes .......140 + 15.3 Abuse of Server Log Information ...................141 + 15.4 Transfer of Sensitive Information .................141 + 15.5 Attacks Based On File and Path Names ..............142 + 15.6 Personal Information ..............................143 + 15.7 Privacy Issues Connected to Accept Headers ........143 + 15.8 DNS Spoofing ......................................144 + 15.9 Location Headers and Spoofing .....................144 + 16 Acknowledgments.......................................144 + 17 References............................................146 + 18 Authors' Addresses....................................149 + 19 Appendices............................................150 + 19.1 Internet Media Type message/http ..................150 + 19.2 Internet Media Type multipart/byteranges ..........150 + 19.3 Tolerant Applications .............................151 + 19.4 Differences Between HTTP Entities and + MIME Entities...........................................152 + 19.4.1 Conversion to Canonical Form ...................152 + 19.4.2 Conversion of Date Formats .....................153 + 19.4.3 Introduction of Content-Encoding ...............153 + 19.4.4 No Content-Transfer-Encoding ...................153 + 19.4.5 HTTP Header Fields in Multipart Body-Parts .....153 + 19.4.6 Introduction of Transfer-Encoding ..............154 + 19.4.7 MIME-Version ...................................154 + 19.5 Changes from HTTP/1.0 .............................154 + 19.5.1 Changes to Simplify Multi-homed Web Servers and + Conserve IP Addresses .................................155 + 19.6 Additional Features ...............................156 + 19.6.1 Additional Request Methods .....................156 + 19.6.2 Additional Header Field Definitions ............156 + 19.7 Compatibility with Previous Versions ..............160 + 19.7.1 Compatibility with HTTP/1.0 Persistent + Connections............................................161 + +Fielding, et. al. Standards Track [Page 6] + +RFC 2068 HTTP/1.1 January 1997 + +1 Introduction + +1.1 Purpose + + The Hypertext Transfer Protocol (HTTP) is an application-level + protocol for distributed, collaborative, hypermedia information + systems. HTTP has been in use by the World-Wide Web global + information initiative since 1990. The first version of HTTP, + referred to as HTTP/0.9, was a simple protocol for raw data transfer + across the Internet. HTTP/1.0, as defined by RFC 1945 [6], improved + the protocol by allowing messages to be in the format of MIME-like + messages, containing metainformation about the data transferred and + modifiers on the request/response semantics. However, HTTP/1.0 does + not sufficiently take into consideration the effects of hierarchical + proxies, caching, the need for persistent connections, and virtual + hosts. In addition, the proliferation of incompletely-implemented + applications calling themselves "HTTP/1.0" has necessitated a + protocol version change in order for two communicating applications + to determine each other's true capabilities. + + This specification defines the protocol referred to as "HTTP/1.1". + This protocol includes more stringent requirements than HTTP/1.0 in + order to ensure reliable implementation of its features. + + Practical information systems require more functionality than simple + retrieval, including search, front-end update, and annotation. HTTP + allows an open-ended set of methods that indicate the purpose of a + request. It builds on the discipline of reference provided by the + Uniform Resource Identifier (URI) [3][20], as a location (URL) [4] or + name (URN) , for indicating the resource to which a method is to be + applied. Messages are passed in a format similar to that used by + Internet mail as defined by the Multipurpose Internet Mail Extensions + (MIME). + + HTTP is also used as a generic protocol for communication between + user agents and proxies/gateways to other Internet systems, including + those supported by the SMTP [16], NNTP [13], FTP [18], Gopher [2], + and WAIS [10] protocols. In this way, HTTP allows basic hypermedia + access to resources available from diverse applications. + +1.2 Requirements + + This specification uses the same words as RFC 1123 [8] for defining + the significance of each particular requirement. These words are: + + MUST + This word or the adjective "required" means that the item is an + absolute requirement of the specification. + +Fielding, et. al. Standards Track [Page 7] + +RFC 2068 HTTP/1.1 January 1997 + + SHOULD + This word or the adjective "recommended" means that there may + exist valid reasons in particular circumstances to ignore this + item, but the full implications should be understood and the case + carefully weighed before choosing a different course. + + MAY + This word or the adjective "optional" means that this item is + truly optional. One vendor may choose to include the item because + a particular marketplace requires it or because it enhances the + product, for example; another vendor may omit the same item. + + An implementation is not compliant if it fails to satisfy one or more + of the MUST requirements for the protocols it implements. An + implementation that satisfies all the MUST and all the SHOULD + requirements for its protocols is said to be "unconditionally + compliant"; one that satisfies all the MUST requirements but not all + the SHOULD requirements for its protocols is said to be + "conditionally compliant." + +1.3 Terminology + + This specification uses a number of terms to refer to the roles + played by participants in, and objects of, the HTTP communication. + + connection + A transport layer virtual circuit established between two programs + for the purpose of communication. + + message + The basic unit of HTTP communication, consisting of a structured + sequence of octets matching the syntax defined in section 4 and + transmitted via the connection. + + request + An HTTP request message, as defined in section 5. + + response + An HTTP response message, as defined in section 6. + + resource + A network data object or service that can be identified by a URI, + as defined in section 3.2. Resources may be available in multiple + representations (e.g. multiple languages, data formats, size, + resolutions) or vary in other ways. + +Fielding, et. al. Standards Track [Page 8] + +RFC 2068 HTTP/1.1 January 1997 + + entity + The information transferred as the payload of a request or + response. An entity consists of metainformation in the form of + entity-header fields and content in the form of an entity-body, as + described in section 7. + + representation + An entity included with a response that is subject to content + negotiation, as described in section 12. There may exist multiple + representations associated with a particular response status. + + content negotiation + The mechanism for selecting the appropriate representation when + servicing a request, as described in section 12. The + representation of entities in any response can be negotiated + (including error responses). + + variant + A resource may have one, or more than one, representation(s) + associated with it at any given instant. Each of these + representations is termed a `variant.' Use of the term `variant' + does not necessarily imply that the resource is subject to content + negotiation. + + client + A program that establishes connections for the purpose of sending + requests. + + user agent + The client which initiates a request. These are often browsers, + editors, spiders (web-traversing robots), or other end user tools. + + server + An application program that accepts connections in order to + service requests by sending back responses. Any given program may + be capable of being both a client and a server; our use of these + terms refers only to the role being performed by the program for a + particular connection, rather than to the program's capabilities + in general. Likewise, any server may act as an origin server, + proxy, gateway, or tunnel, switching behavior based on the nature + of each request. + + origin server + The server on which a given resource resides or is to be created. + +Fielding, et. al. Standards Track [Page 9] + +RFC 2068 HTTP/1.1 January 1997 + + proxy + An intermediary program which acts as both a server and a client + for the purpose of making requests on behalf of other clients. + Requests are serviced internally or by passing them on, with + possible translation, to other servers. A proxy must implement + both the client and server requirements of this specification. + + gateway + A server which acts as an intermediary for some other server. + Unlike a proxy, a gateway receives requests as if it were the + origin server for the requested resource; the requesting client + may not be aware that it is communicating with a gateway. + + tunnel + An intermediary program which is acting as a blind relay between + two connections. Once active, a tunnel is not considered a party + to the HTTP communication, though the tunnel may have been + initiated by an HTTP request. The tunnel ceases to exist when both + ends of the relayed connections are closed. + + cache + A program's local store of response messages and the subsystem + that controls its message storage, retrieval, and deletion. A + cache stores cachable responses in order to reduce the response + time and network bandwidth consumption on future, equivalent + requests. Any client or server may include a cache, though a cache + cannot be used by a server that is acting as a tunnel. + + cachable + A response is cachable if a cache is allowed to store a copy of + the response message for use in answering subsequent requests. The + rules for determining the cachability of HTTP responses are + defined in section 13. Even if a resource is cachable, there may + be additional constraints on whether a cache can use the cached + copy for a particular request. + + first-hand + A response is first-hand if it comes directly and without + unnecessary delay from the origin server, perhaps via one or more + proxies. A response is also first-hand if its validity has just + been checked directly with the origin server. + + explicit expiration time + The time at which the origin server intends that an entity should + no longer be returned by a cache without further validation. + +Fielding, et. al. Standards Track [Page 10] + +RFC 2068 HTTP/1.1 January 1997 + + heuristic expiration time + An expiration time assigned by a cache when no explicit expiration + time is available. + + age + The age of a response is the time since it was sent by, or + successfully validated with, the origin server. + + freshness lifetime + The length of time between the generation of a response and its + expiration time. + + fresh + A response is fresh if its age has not yet exceeded its freshness + lifetime. + + stale + A response is stale if its age has passed its freshness lifetime. + + semantically transparent + A cache behaves in a "semantically transparent" manner, with + respect to a particular response, when its use affects neither the + requesting client nor the origin server, except to improve + performance. When a cache is semantically transparent, the client + receives exactly the same response (except for hop-by-hop headers) + that it would have received had its request been handled directly + by the origin server. + + validator + A protocol element (e.g., an entity tag or a Last-Modified time) + that is used to find out whether a cache entry is an equivalent + copy of an entity. + +1.4 Overall Operation + + The HTTP protocol is a request/response protocol. A client sends a + request to the server in the form of a request method, URI, and + protocol version, followed by a MIME-like message containing request + modifiers, client information, and possible body content over a + connection with a server. The server responds with a status line, + including the message's protocol version and a success or error code, + followed by a MIME-like message containing server information, entity + metainformation, and possible entity-body content. The relationship + between HTTP and MIME is described in appendix 19.4. + +Fielding, et. al. Standards Track [Page 11] + +RFC 2068 HTTP/1.1 January 1997 + + Most HTTP communication is initiated by a user agent and consists of + a request to be applied to a resource on some origin server. In the + simplest case, this may be accomplished via a single connection (v) + between the user agent (UA) and the origin server (O). + + request chain ------------------------> + UA -------------------v------------------- O + <----------------------- response chain + + A more complicated situation occurs when one or more intermediaries + are present in the request/response chain. There are three common + forms of intermediary: proxy, gateway, and tunnel. A proxy is a + forwarding agent, receiving requests for a URI in its absolute form, + rewriting all or part of the message, and forwarding the reformatted + request toward the server identified by the URI. A gateway is a + receiving agent, acting as a layer above some other server(s) and, if + necessary, translating the requests to the underlying server's + protocol. A tunnel acts as a relay point between two connections + without changing the messages; tunnels are used when the + communication needs to pass through an intermediary (such as a + firewall) even when the intermediary cannot understand the contents + of the messages. + + request chain --------------------------------------> + UA -----v----- A -----v----- B -----v----- C -----v----- O + <------------------------------------- response chain + + The figure above shows three intermediaries (A, B, and C) between the + user agent and origin server. A request or response message that + travels the whole chain will pass through four separate connections. + This distinction is important because some HTTP communication options + may apply only to the connection with the nearest, non-tunnel + neighbor, only to the end-points of the chain, or to all connections + along the chain. Although the diagram is linear, each participant + may be engaged in multiple, simultaneous communications. For example, + B may be receiving requests from many clients other than A, and/or + forwarding requests to servers other than C, at the same time that it + is handling A's request. + + Any party to the communication which is not acting as a tunnel may + employ an internal cache for handling requests. The effect of a cache + is that the request/response chain is shortened if one of the + participants along the chain has a cached response applicable to that + request. The following illustrates the resulting chain if B has a + cached copy of an earlier response from O (via C) for a request which + has not been cached by UA or A. + +Fielding, et. al. Standards Track [Page 12] + +RFC 2068 HTTP/1.1 January 1997 + + request chain ----------> + UA -----v----- A -----v----- B - - - - - - C - - - - - - O + <--------- response chain + + Not all responses are usefully cachable, and some requests may + contain modifiers which place special requirements on cache behavior. + HTTP requirements for cache behavior and cachable responses are + defined in section 13. + + In fact, there are a wide variety of architectures and configurations + of caches and proxies currently being experimented with or deployed + across the World Wide Web; these systems include national hierarchies + of proxy caches to save transoceanic bandwidth, systems that + broadcast or multicast cache entries, organizations that distribute + subsets of cached data via CD-ROM, and so on. HTTP systems are used + in corporate intranets over high-bandwidth links, and for access via + PDAs with low-power radio links and intermittent connectivity. The + goal of HTTP/1.1 is to support the wide diversity of configurations + already deployed while introducing protocol constructs that meet the + needs of those who build web applications that require high + reliability and, failing that, at least reliable indications of + failure. + + HTTP communication usually takes place over TCP/IP connections. The + default port is TCP 80, but other ports can be used. This does not + preclude HTTP from being implemented on top of any other protocol on + the Internet, or on other networks. HTTP only presumes a reliable + transport; any protocol that provides such guarantees can be used; + the mapping of the HTTP/1.1 request and response structures onto the + transport data units of the protocol in question is outside the scope + of this specification. + + In HTTP/1.0, most implementations used a new connection for each + request/response exchange. In HTTP/1.1, a connection may be used for + one or more request/response exchanges, although connections may be + closed for a variety of reasons (see section 8.1). + +2 Notational Conventions and Generic Grammar + +2.1 Augmented BNF + + All of the mechanisms specified in this document are described in + both prose and an augmented Backus-Naur Form (BNF) similar to that + used by RFC 822 [9]. Implementers will need to be familiar with the + notation in order to understand this specification. The augmented BNF + includes the following constructs: + +Fielding, et. al. Standards Track [Page 13] + +RFC 2068 HTTP/1.1 January 1997 + +name = definition + The name of a rule is simply the name itself (without any enclosing + "<" and ">") and is separated from its definition by the equal "=" + character. Whitespace is only significant in that indentation of + continuation lines is used to indicate a rule definition that spans + more than one line. Certain basic rules are in uppercase, such as + SP, LWS, HT, CRLF, DIGIT, ALPHA, etc. Angle brackets are used + within definitions whenever their presence will facilitate + discerning the use of rule names. + +"literal" + Quotation marks surround literal text. Unless stated otherwise, the + text is case-insensitive. + +rule1 | rule2 + Elements separated by a bar ("|") are alternatives, e.g., "yes | + no" will accept yes or no. + +(rule1 rule2) + Elements enclosed in parentheses are treated as a single element. + Thus, "(elem (foo | bar) elem)" allows the token sequences "elem + foo elem" and "elem bar elem". + +*rule + The character "*" preceding an element indicates repetition. The + full form is "*element" indicating at least and at most + occurrences of element. Default values are 0 and infinity so + that "*(element)" allows any number, including zero; "1*element" + requires at least one; and "1*2element" allows one or two. + +[rule] + Square brackets enclose optional elements; "[foo bar]" is + equivalent to "*1(foo bar)". + +N rule + Specific repetition: "(element)" is equivalent to + "*(element)"; that is, exactly occurrences of (element). + Thus 2DIGIT is a 2-digit number, and 3ALPHA is a string of three + alphabetic characters. + +#rule + A construct "#" is defined, similar to "*", for defining lists of + elements. The full form is "#element " indicating at least + and at most elements, each separated by one or more commas + (",") and optional linear whitespace (LWS). This makes the usual + form of lists very easy; a rule such as "( *LWS element *( *LWS "," + *LWS element )) " can be shown as "1#element". Wherever this + construct is used, null elements are allowed, but do not contribute + +Fielding, et. al. Standards Track [Page 14] + +RFC 2068 HTTP/1.1 January 1997 + + to the count of elements present. That is, "(element), , (element) + " is permitted, but counts as only two elements. Therefore, where + at least one element is required, at least one non-null element + must be present. Default values are 0 and infinity so that + "#element" allows any number, including zero; "1#element" requires + at least one; and "1#2element" allows one or two. + +; comment + A semi-colon, set off some distance to the right of rule text, + starts a comment that continues to the end of line. This is a + simple way of including useful notes in parallel with the + specifications. + +implied *LWS + The grammar described by this specification is word-based. Except + where noted otherwise, linear whitespace (LWS) can be included + between any two adjacent words (token or quoted-string), and + between adjacent tokens and delimiters (tspecials), without + changing the interpretation of a field. At least one delimiter + (tspecials) must exist between any two tokens, since they would + otherwise be interpreted as a single token. + +2.2 Basic Rules + + The following rules are used throughout this specification to + describe basic parsing constructs. The US-ASCII coded character set + is defined by ANSI X3.4-1986 [21]. + + OCTET = + CHAR = + UPALPHA = + LOALPHA = + ALPHA = UPALPHA | LOALPHA + DIGIT = + CTL = + CR = + LF = + SP = + HT = + <"> = + +Fielding, et. al. Standards Track [Page 15] + +RFC 2068 HTTP/1.1 January 1997 + + HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all + protocol elements except the entity-body (see appendix 19.3 for + tolerant applications). The end-of-line marker within an entity-body + is defined by its associated media type, as described in section 3.7. + + CRLF = CR LF + + HTTP/1.1 headers can be folded onto multiple lines if the + continuation line begins with a space or horizontal tab. All linear + white space, including folding, has the same semantics as SP. + + LWS = [CRLF] 1*( SP | HT ) + + The TEXT rule is only used for descriptive field contents and values + that are not intended to be interpreted by the message parser. Words + of *TEXT may contain characters from character sets other than ISO + 8859-1 [22] only when encoded according to the rules of RFC 1522 + [14]. + + TEXT = + + Hexadecimal numeric characters are used in several protocol elements. + + HEX = "A" | "B" | "C" | "D" | "E" | "F" + | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT + + Many HTTP/1.1 header field values consist of words separated by LWS + or special characters. These special characters MUST be in a quoted + string to be used within a parameter value. + + token = 1* + + tspecials = "(" | ")" | "<" | ">" | "@" + | "," | ";" | ":" | "\" | <"> + | "/" | "[" | "]" | "?" | "=" + | "{" | "}" | SP | HT + + Comments can be included in some HTTP header fields by surrounding + the comment text with parentheses. Comments are only allowed in + fields containing "comment" as part of their field value definition. + In all other fields, parentheses are considered part of the field + value. + + comment = "(" *( ctext | comment ) ")" + ctext = + +Fielding, et. al. Standards Track [Page 16] + +RFC 2068 HTTP/1.1 January 1997 + + A string of text is parsed as a single word if it is quoted using + double-quote marks. + + quoted-string = ( <"> *(qdtext) <"> ) + + qdtext = > + + The backslash character ("\") may be used as a single-character quoting + mechanism only within quoted-string and comment constructs. + + quoted-pair = "\" CHAR + +3 Protocol Parameters + +3.1 HTTP Version + + HTTP uses a "." numbering scheme to indicate versions + of the protocol. The protocol versioning policy is intended to allow + the sender to indicate the format of a message and its capacity for + understanding further HTTP communication, rather than the features + obtained via that communication. No change is made to the version + number for the addition of message components which do not affect + communication behavior or which only add to extensible field values. + The number is incremented when the changes made to the + protocol add features which do not change the general message parsing + algorithm, but which may add to the message semantics and imply + additional capabilities of the sender. The number is + incremented when the format of a message within the protocol is + changed. + + The version of an HTTP message is indicated by an HTTP-Version field + in the first line of the message. + + HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT + + Note that the major and minor numbers MUST be treated as separate + integers and that each may be incremented higher than a single digit. + Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is + lower than HTTP/12.3. Leading zeros MUST be ignored by recipients and + MUST NOT be sent. + + Applications sending Request or Response messages, as defined by this + specification, MUST include an HTTP-Version of "HTTP/1.1". Use of + this version number indicates that the sending application is at + least conditionally compliant with this specification. + + The HTTP version of an application is the highest HTTP version for + which the application is at least conditionally compliant. + +Fielding, et. al. Standards Track [Page 17] + +RFC 2068 HTTP/1.1 January 1997 + + Proxy and gateway applications must be careful when forwarding + messages in protocol versions different from that of the application. + Since the protocol version indicates the protocol capability of the + sender, a proxy/gateway MUST never send a message with a version + indicator which is greater than its actual version; if a higher + version request is received, the proxy/gateway MUST either downgrade + the request version, respond with an error, or switch to tunnel + behavior. Requests with a version lower than that of the + proxy/gateway's version MAY be upgraded before being forwarded; the + proxy/gateway's response to that request MUST be in the same major + version as the request. + + Note: Converting between versions of HTTP may involve modification + of header fields required or forbidden by the versions involved. + +3.2 Uniform Resource Identifiers + + URIs have been known by many names: WWW addresses, Universal Document + Identifiers, Universal Resource Identifiers , and finally the + combination of Uniform Resource Locators (URL) and Names (URN). As + far as HTTP is concerned, Uniform Resource Identifiers are simply + formatted strings which identify--via name, location, or any other + characteristic--a resource. + +3.2.1 General Syntax + + URIs in HTTP can be represented in absolute form or relative to some + known base URI, depending upon the context of their use. The two + forms are differentiated by the fact that absolute URIs always begin + with a scheme name followed by a colon. + + URI = ( absoluteURI | relativeURI ) [ "#" fragment ] + + absoluteURI = scheme ":" *( uchar | reserved ) + + relativeURI = net_path | abs_path | rel_path + + net_path = "//" net_loc [ abs_path ] + abs_path = "/" rel_path + rel_path = [ path ] [ ";" params ] [ "?" query ] + + path = fsegment *( "/" segment ) + fsegment = 1*pchar + segment = *pchar + + params = param *( ";" param ) + param = *( pchar | "/" ) + +Fielding, et. al. Standards Track [Page 18] + +RFC 2068 HTTP/1.1 January 1997 + + scheme = 1*( ALPHA | DIGIT | "+" | "-" | "." ) + net_loc = *( pchar | ";" | "?" ) + + query = *( uchar | reserved ) + fragment = *( uchar | reserved ) + + pchar = uchar | ":" | "@" | "&" | "=" | "+" + uchar = unreserved | escape + unreserved = ALPHA | DIGIT | safe | extra | national + + escape = "%" HEX HEX + reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" + extra = "!" | "*" | "'" | "(" | ")" | "," + safe = "$" | "-" | "_" | "." + unsafe = CTL | SP | <"> | "#" | "%" | "<" | ">" + national = + + For definitive information on URL syntax and semantics, see RFC 1738 + [4] and RFC 1808 [11]. The BNF above includes national characters not + allowed in valid URLs as specified by RFC 1738, since HTTP servers + are not restricted in the set of unreserved characters allowed to + represent the rel_path part of addresses, and HTTP proxies may + receive requests for URIs not defined by RFC 1738. + + The HTTP protocol does not place any a priori limit on the length of + a URI. Servers MUST be able to handle the URI of any resource they + serve, and SHOULD be able to handle URIs of unbounded length if they + provide GET-based forms that could generate such URIs. A server + SHOULD return 414 (Request-URI Too Long) status if a URI is longer + than the server can handle (see section 10.4.15). + + Note: Servers should be cautious about depending on URI lengths + above 255 bytes, because some older client or proxy implementations + may not properly support these lengths. + +3.2.2 http URL + + The "http" scheme is used to locate network resources via the HTTP + protocol. This section defines the scheme-specific syntax and + semantics for http URLs. + +Fielding, et. al. Standards Track [Page 19] + +RFC 2068 HTTP/1.1 January 1997 + + http_URL = "http:" "//" host [ ":" port ] [ abs_path ] + + host = + + port = *DIGIT + + If the port is empty or not given, port 80 is assumed. The semantics + are that the identified resource is located at the server listening + for TCP connections on that port of that host, and the Request-URI + for the resource is abs_path. The use of IP addresses in URL's SHOULD + be avoided whenever possible (see RFC 1900 [24]). If the abs_path is + not present in the URL, it MUST be given as "/" when used as a + Request-URI for a resource (section 5.1.2). + +3.2.3 URI Comparison + + When comparing two URIs to decide if they match or not, a client + SHOULD use a case-sensitive octet-by-octet comparison of the entire + URIs, with these exceptions: + + o A port that is empty or not given is equivalent to the default + port for that URI; + + o Comparisons of host names MUST be case-insensitive; + + o Comparisons of scheme names MUST be case-insensitive; + + o An empty abs_path is equivalent to an abs_path of "/". + + Characters other than those in the "reserved" and "unsafe" sets (see + section 3.2) are equivalent to their ""%" HEX HEX" encodings. + + For example, the following three URIs are equivalent: + + http://abc.com:80/~smith/home.html + http://ABC.com/%7Esmith/home.html + http://ABC.com:/%7esmith/home.html + +Fielding, et. al. Standards Track [Page 20] + +RFC 2068 HTTP/1.1 January 1997 + +3.3 Date/Time Formats + +3.3.1 Full Date + + HTTP applications have historically allowed three different formats + for the representation of date/time stamps: + + Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 + Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 + Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format + + The first format is preferred as an Internet standard and represents + a fixed-length subset of that defined by RFC 1123 (an update to RFC + 822). The second format is in common use, but is based on the + obsolete RFC 850 [12] date format and lacks a four-digit year. + HTTP/1.1 clients and servers that parse the date value MUST accept + all three formats (for compatibility with HTTP/1.0), though they MUST + only generate the RFC 1123 format for representing HTTP-date values + in header fields. + + Note: Recipients of date values are encouraged to be robust in + accepting date values that may have been sent by non-HTTP + applications, as is sometimes the case when retrieving or posting + messages via proxies/gateways to SMTP or NNTP. + + All HTTP date/time stamps MUST be represented in Greenwich Mean Time + (GMT), without exception. This is indicated in the first two formats + by the inclusion of "GMT" as the three-letter abbreviation for time + zone, and MUST be assumed when reading the asctime format. + + HTTP-date = rfc1123-date | rfc850-date | asctime-date + + rfc1123-date = wkday "," SP date1 SP time SP "GMT" + rfc850-date = weekday "," SP date2 SP time SP "GMT" + asctime-date = wkday SP date3 SP time SP 4DIGIT + + date1 = 2DIGIT SP month SP 4DIGIT + ; day month year (e.g., 02 Jun 1982) + date2 = 2DIGIT "-" month "-" 2DIGIT + ; day-month-year (e.g., 02-Jun-82) + date3 = month SP ( 2DIGIT | ( SP 1DIGIT )) + ; month day (e.g., Jun 2) + + time = 2DIGIT ":" 2DIGIT ":" 2DIGIT + ; 00:00:00 - 23:59:59 + + wkday = "Mon" | "Tue" | "Wed" + | "Thu" | "Fri" | "Sat" | "Sun" + +Fielding, et. al. Standards Track [Page 21] + +RFC 2068 HTTP/1.1 January 1997 + + weekday = "Monday" | "Tuesday" | "Wednesday" + | "Thursday" | "Friday" | "Saturday" | "Sunday" + + month = "Jan" | "Feb" | "Mar" | "Apr" + | "May" | "Jun" | "Jul" | "Aug" + | "Sep" | "Oct" | "Nov" | "Dec" + + Note: HTTP requirements for the date/time stamp format apply only + to their usage within the protocol stream. Clients and servers are + not required to use these formats for user presentation, request + logging, etc. + +3.3.2 Delta Seconds + + Some HTTP header fields allow a time value to be specified as an + integer number of seconds, represented in decimal, after the time + that the message was received. + + delta-seconds = 1*DIGIT + +3.4 Character Sets + + HTTP uses the same definition of the term "character set" as that + described for MIME: + + The term "character set" is used in this document to refer to a + method used with one or more tables to convert a sequence of octets + into a sequence of characters. Note that unconditional conversion + in the other direction is not required, in that not all characters + may be available in a given character set and a character set may + provide more than one sequence of octets to represent a particular + character. This definition is intended to allow various kinds of + character encodings, from simple single-table mappings such as US- + ASCII to complex table switching methods such as those that use ISO + 2022's techniques. However, the definition associated with a MIME + character set name MUST fully specify the mapping to be performed + from octets to characters. In particular, use of external profiling + information to determine the exact mapping is not permitted. + + Note: This use of the term "character set" is more commonly + referred to as a "character encoding." However, since HTTP and MIME + share the same registry, it is important that the terminology also + be shared. + +Fielding, et. al. Standards Track [Page 22] + +RFC 2068 HTTP/1.1 January 1997 + + HTTP character sets are identified by case-insensitive tokens. The + complete set of tokens is defined by the IANA Character Set registry + [19]. + + charset = token + + Although HTTP allows an arbitrary token to be used as a charset + value, any token that has a predefined value within the IANA + Character Set registry MUST represent the character set defined by + that registry. Applications SHOULD limit their use of character sets + to those defined by the IANA registry. + +3.5 Content Codings + + Content coding values indicate an encoding transformation that has + been or can be applied to an entity. Content codings are primarily + used to allow a document to be compressed or otherwise usefully + transformed without losing the identity of its underlying media type + and without loss of information. Frequently, the entity is stored in + coded form, transmitted directly, and only decoded by the recipient. + + content-coding = token + + All content-coding values are case-insensitive. HTTP/1.1 uses + content-coding values in the Accept-Encoding (section 14.3) and + Content-Encoding (section 14.12) header fields. Although the value + describes the content-coding, what is more important is that it + indicates what decoding mechanism will be required to remove the + encoding. + + The Internet Assigned Numbers Authority (IANA) acts as a registry for + content-coding value tokens. Initially, the registry contains the + following tokens: + + gzip An encoding format produced by the file compression program "gzip" + (GNU zip) as described in RFC 1952 [25]. This format is a Lempel- + Ziv coding (LZ77) with a 32 bit CRC. + + compress + The encoding format produced by the common UNIX file compression + program "compress". This format is an adaptive Lempel-Ziv-Welch + coding (LZW). + +Fielding, et. al. Standards Track [Page 23] + +RFC 2068 HTTP/1.1 January 1997 + + Note: Use of program names for the identification of encoding + formats is not desirable and should be discouraged for future + encodings. Their use here is representative of historical practice, + not good design. For compatibility with previous implementations of + HTTP, applications should consider "x-gzip" and "x-compress" to be + equivalent to "gzip" and "compress" respectively. + + deflate The "zlib" format defined in RFC 1950[31] in combination with + the "deflate" compression mechanism described in RFC 1951[29]. + + New content-coding value tokens should be registered; to allow + interoperability between clients and servers, specifications of the + content coding algorithms needed to implement a new value should be + publicly available and adequate for independent implementation, and + conform to the purpose of content coding defined in this section. + +3.6 Transfer Codings + + Transfer coding values are used to indicate an encoding + transformation that has been, can be, or may need to be applied to an + entity-body in order to ensure "safe transport" through the network. + This differs from a content coding in that the transfer coding is a + property of the message, not of the original entity. + + transfer-coding = "chunked" | transfer-extension + + transfer-extension = token + + All transfer-coding values are case-insensitive. HTTP/1.1 uses + transfer coding values in the Transfer-Encoding header field (section + 14.40). + + Transfer codings are analogous to the Content-Transfer-Encoding + values of MIME , which were designed to enable safe transport of + binary data over a 7-bit transport service. However, safe transport + has a different focus for an 8bit-clean transfer protocol. In HTTP, + the only unsafe characteristic of message-bodies is the difficulty in + determining the exact body length (section 7.2.2), or the desire to + encrypt data over a shared transport. + + The chunked encoding modifies the body of a message in order to + transfer it as a series of chunks, each with its own size indicator, + followed by an optional footer containing entity-header fields. This + allows dynamically-produced content to be transferred along with the + information necessary for the recipient to verify that it has + received the full message. + +Fielding, et. al. Standards Track [Page 24] + +RFC 2068 HTTP/1.1 January 1997 + + Chunked-Body = *chunk + "0" CRLF + footer + CRLF + + chunk = chunk-size [ chunk-ext ] CRLF + chunk-data CRLF + + hex-no-zero = + + chunk-size = hex-no-zero *HEX + chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] ) + chunk-ext-name = token + chunk-ext-val = token | quoted-string + chunk-data = chunk-size(OCTET) + + footer = *entity-header + + The chunked encoding is ended by a zero-sized chunk followed by the + footer, which is terminated by an empty line. The purpose of the + footer is to provide an efficient way to supply information about an + entity that is generated dynamically; applications MUST NOT send + header fields in the footer which are not explicitly defined as being + appropriate for the footer, such as Content-MD5 or future extensions + to HTTP for digital signatures or other facilities. + + An example process for decoding a Chunked-Body is presented in + appendix 19.4.6. + + All HTTP/1.1 applications MUST be able to receive and decode the + "chunked" transfer coding, and MUST ignore transfer coding extensions + they do not understand. A server which receives an entity-body with a + transfer-coding it does not understand SHOULD return 501 + (Unimplemented), and close the connection. A server MUST NOT send + transfer-codings to an HTTP/1.0 client. + +3.7 Media Types + + HTTP uses Internet Media Types in the Content-Type (section 14.18) + and Accept (section 14.1) header fields in order to provide open and + extensible data typing and type negotiation. + + media-type = type "/" subtype *( ";" parameter ) + type = token + subtype = token + + Parameters may follow the type/subtype in the form of attribute/value + pairs. + +Fielding, et. al. Standards Track [Page 25] + +RFC 2068 HTTP/1.1 January 1997 + + parameter = attribute "=" value + attribute = token + value = token | quoted-string + + The type, subtype, and parameter attribute names are case- + insensitive. Parameter values may or may not be case-sensitive, + depending on the semantics of the parameter name. Linear white space + (LWS) MUST NOT be used between the type and subtype, nor between an + attribute and its value. User agents that recognize the media-type + MUST process (or arrange to be processed by any external applications + used to process that type/subtype by the user agent) the parameters + for that MIME type as described by that type/subtype definition to + the and inform the user of any problems discovered. + + Note: some older HTTP applications do not recognize media type + parameters. When sending data to older HTTP applications, + implementations should only use media type parameters when they are + required by that type/subtype definition. + + Media-type values are registered with the Internet Assigned Number + Authority (IANA). The media type registration process is outlined in + RFC 2048 [17]. Use of non-registered media types is discouraged. + +3.7.1 Canonicalization and Text Defaults + + Internet media types are registered with a canonical form. In + general, an entity-body transferred via HTTP messages MUST be + represented in the appropriate canonical form prior to its + transmission; the exception is "text" types, as defined in the next + paragraph. + + When in canonical form, media subtypes of the "text" type use CRLF as + the text line break. HTTP relaxes this requirement and allows the + transport of text media with plain CR or LF alone representing a line + break when it is done consistently for an entire entity-body. HTTP + applications MUST accept CRLF, bare CR, and bare LF as being + representative of a line break in text media received via HTTP. In + addition, if the text is represented in a character set that does not + use octets 13 and 10 for CR and LF respectively, as is the case for + some multi-byte character sets, HTTP allows the use of whatever octet + sequences are defined by that character set to represent the + equivalent of CR and LF for line breaks. This flexibility regarding + line breaks applies only to text media in the entity-body; a bare CR + or LF MUST NOT be substituted for CRLF within any of the HTTP control + structures (such as header fields and multipart boundaries). + + If an entity-body is encoded with a Content-Encoding, the underlying + data MUST be in a form defined above prior to being encoded. + +Fielding, et. al. Standards Track [Page 26] + +RFC 2068 HTTP/1.1 January 1997 + + The "charset" parameter is used with some media types to define the + character set (section 3.4) of the data. When no explicit charset + parameter is provided by the sender, media subtypes of the "text" + type are defined to have a default charset value of "ISO-8859-1" when + received via HTTP. Data in character sets other than "ISO-8859-1" or + its subsets MUST be labeled with an appropriate charset value. + + Some HTTP/1.0 software has interpreted a Content-Type header without + charset parameter incorrectly to mean "recipient should guess." + Senders wishing to defeat this behavior MAY include a charset + parameter even when the charset is ISO-8859-1 and SHOULD do so when + it is known that it will not confuse the recipient. + + Unfortunately, some older HTTP/1.0 clients did not deal properly with + an explicit charset parameter. HTTP/1.1 recipients MUST respect the + charset label provided by the sender; and those user agents that have + a provision to "guess" a charset MUST use the charset from the + content-type field if they support that charset, rather than the + recipient's preference, when initially displaying a document. + +3.7.2 Multipart Types + + MIME provides for a number of "multipart" types -- encapsulations of + one or more entities within a single message-body. All multipart + types share a common syntax, as defined in MIME [7], and MUST + include a boundary parameter as part of the media type value. The + message body is itself a protocol element and MUST therefore use only + CRLF to represent line breaks between body-parts. Unlike in MIME, the + epilogue of any multipart message MUST be empty; HTTP applications + MUST NOT transmit the epilogue (even if the original multipart + contains an epilogue). + + In HTTP, multipart body-parts MAY contain header fields which are + significant to the meaning of that part. A Content-Location header + field (section 14.15) SHOULD be included in the body-part of each + enclosed entity that can be identified by a URL. + + In general, an HTTP user agent SHOULD follow the same or similar + behavior as a MIME user agent would upon receipt of a multipart type. + If an application receives an unrecognized multipart subtype, the + application MUST treat it as being equivalent to "multipart/mixed". + + Note: The "multipart/form-data" type has been specifically defined + for carrying form data suitable for processing via the POST request + method, as described in RFC 1867 [15]. + +Fielding, et. al. Standards Track [Page 27] + +RFC 2068 HTTP/1.1 January 1997 + +3.8 Product Tokens + + Product tokens are used to allow communicating applications to + identify themselves by software name and version. Most fields using + product tokens also allow sub-products which form a significant part + of the application to be listed, separated by whitespace. By + convention, the products are listed in order of their significance + for identifying the application. + + product = token ["/" product-version] + product-version = token + + Examples: + + User-Agent: CERN-LineMode/2.15 libwww/2.17b3 + Server: Apache/0.8.4 + + Product tokens should be short and to the point -- use of them for + advertising or other non-essential information is explicitly + forbidden. Although any token character may appear in a product- + version, this token SHOULD only be used for a version identifier + (i.e., successive versions of the same product SHOULD only differ in + the product-version portion of the product value). + +3.9 Quality Values + + HTTP content negotiation (section 12) uses short "floating point" + numbers to indicate the relative importance ("weight") of various + negotiable parameters. A weight is normalized to a real number in the + range 0 through 1, where 0 is the minimum and 1 the maximum value. + HTTP/1.1 applications MUST NOT generate more than three digits after + the decimal point. User configuration of these values SHOULD also be + limited in this fashion. + + qvalue = ( "0" [ "." 0*3DIGIT ] ) + | ( "1" [ "." 0*3("0") ] ) + + "Quality values" is a misnomer, since these values merely represent + relative degradation in desired quality. + +3.10 Language Tags + + A language tag identifies a natural language spoken, written, or + otherwise conveyed by human beings for communication of information + to other human beings. Computer languages are explicitly excluded. + HTTP uses language tags within the Accept-Language and Content- + Language fields. + +Fielding, et. al. Standards Track [Page 28] + +RFC 2068 HTTP/1.1 January 1997 + + The syntax and registry of HTTP language tags is the same as that + defined by RFC 1766 [1]. In summary, a language tag is composed of 1 + or more parts: A primary language tag and a possibly empty series of + subtags: + + language-tag = primary-tag *( "-" subtag ) + + primary-tag = 1*8ALPHA + subtag = 1*8ALPHA + + Whitespace is not allowed within the tag and all tags are case- + insensitive. The name space of language tags is administered by the + IANA. Example tags include: + + en, en-US, en-cockney, i-cherokee, x-pig-latin + + where any two-letter primary-tag is an ISO 639 language abbreviation + and any two-letter initial subtag is an ISO 3166 country code. (The + last three tags above are not registered tags; all but the last are + examples of tags which could be registered in future.) + +3.11 Entity Tags + + Entity tags are used for comparing two or more entities from the same + requested resource. HTTP/1.1 uses entity tags in the ETag (section + 14.20), If-Match (section 14.25), If-None-Match (section 14.26), and + If-Range (section 14.27) header fields. The definition of how they + are used and compared as cache validators is in section 13.3.3. An + entity tag consists of an opaque quoted string, possibly prefixed by + a weakness indicator. + + entity-tag = [ weak ] opaque-tag + + weak = "W/" + opaque-tag = quoted-string + + A "strong entity tag" may be shared by two entities of a resource + only if they are equivalent by octet equality. + + A "weak entity tag," indicated by the "W/" prefix, may be shared by + two entities of a resource only if the entities are equivalent and + could be substituted for each other with no significant change in + semantics. A weak entity tag can only be used for weak comparison. + + An entity tag MUST be unique across all versions of all entities + associated with a particular resource. A given entity tag value may + be used for entities obtained by requests on different URIs without + implying anything about the equivalence of those entities. + +Fielding, et. al. Standards Track [Page 29] + +RFC 2068 HTTP/1.1 January 1997 + +3.12 Range Units + + HTTP/1.1 allows a client to request that only part (a range of) the + response entity be included within the response. HTTP/1.1 uses range + units in the Range (section 14.36) and Content-Range (section 14.17) + header fields. An entity may be broken down into subranges according + to various structural units. + + range-unit = bytes-unit | other-range-unit + + bytes-unit = "bytes" + other-range-unit = token + +The only range unit defined by HTTP/1.1 is "bytes". HTTP/1.1 + implementations may ignore ranges specified using other units. + HTTP/1.1 has been designed to allow implementations of applications + that do not depend on knowledge of ranges. + +4 HTTP Message + +4.1 Message Types + + HTTP messages consist of requests from client to server and responses + from server to client. + + HTTP-message = Request | Response ; HTTP/1.1 messages + + Request (section 5) and Response (section 6) messages use the generic + message format of RFC 822 [9] for transferring entities (the payload + of the message). Both types of message consist of a start-line, one + or more header fields (also known as "headers"), an empty line (i.e., + a line with nothing preceding the CRLF) indicating the end of the + header fields, and an optional message-body. + + generic-message = start-line + *message-header + CRLF + [ message-body ] + + start-line = Request-Line | Status-Line + + In the interest of robustness, servers SHOULD ignore any empty + line(s) received where a Request-Line is expected. In other words, if + the server is reading the protocol stream at the beginning of a + message and receives a CRLF first, it should ignore the CRLF. + +Fielding, et. al. Standards Track [Page 30] + +RFC 2068 HTTP/1.1 January 1997 + + Note: certain buggy HTTP/1.0 client implementations generate an + extra CRLF's after a POST request. To restate what is explicitly + forbidden by the BNF, an HTTP/1.1 client must not preface or follow + a request with an extra CRLF. + +4.2 Message Headers + + HTTP header fields, which include general-header (section 4.5), + request-header (section 5.3), response-header (section 6.2), and + entity-header (section 7.1) fields, follow the same generic format as + that given in Section 3.1 of RFC 822 [9]. Each header field consists + of a name followed by a colon (":") and the field value. Field names + are case-insensitive. The field value may be preceded by any amount + of LWS, though a single SP is preferred. Header fields can be + extended over multiple lines by preceding each extra line with at + least one SP or HT. Applications SHOULD follow "common form" when + generating HTTP constructs, since there might exist some + implementations that fail to accept anything beyond the common forms. + + message-header = field-name ":" [ field-value ] CRLF + + field-name = token + field-value = *( field-content | LWS ) + + field-content = + + The order in which header fields with differing field names are + received is not significant. However, it is "good practice" to send + general-header fields first, followed by request-header or response- + header fields, and ending with the entity-header fields. + + Multiple message-header fields with the same field-name may be + present in a message if and only if the entire field-value for that + header field is defined as a comma-separated list [i.e., #(values)]. + It MUST be possible to combine the multiple header fields into one + "field-name: field-value" pair, without changing the semantics of the + message, by appending each subsequent field-value to the first, each + separated by a comma. The order in which header fields with the same + field-name are received is therefore significant to the + interpretation of the combined field value, and thus a proxy MUST NOT + change the order of these field values when a message is forwarded. + +Fielding, et. al. Standards Track [Page 31] + +RFC 2068 HTTP/1.1 January 1997 + +4.3 Message Body + + The message-body (if any) of an HTTP message is used to carry the + entity-body associated with the request or response. The message-body + differs from the entity-body only when a transfer coding has been + applied, as indicated by the Transfer-Encoding header field (section + 14.40). + + message-body = entity-body + | + + Transfer-Encoding MUST be used to indicate any transfer codings + applied by an application to ensure safe and proper transfer of the + message. Transfer-Encoding is a property of the message, not of the + entity, and thus can be added or removed by any application along the + request/response chain. + + The rules for when a message-body is allowed in a message differ for + requests and responses. + + The presence of a message-body in a request is signaled by the + inclusion of a Content-Length or Transfer-Encoding header field in + the request's message-headers. A message-body MAY be included in a + request only when the request method (section 5.1.1) allows an + entity-body. + + For response messages, whether or not a message-body is included with + a message is dependent on both the request method and the response + status code (section 6.1.1). All responses to the HEAD request method + MUST NOT include a message-body, even though the presence of entity- + header fields might lead one to believe they do. All 1xx + (informational), 204 (no content), and 304 (not modified) responses + MUST NOT include a message-body. All other responses do include a + message-body, although it may be of zero length. + +4.4 Message Length + + When a message-body is included with a message, the length of that + body is determined by one of the following (in order of precedence): + + 1. Any response message which MUST NOT include a message-body + (such as the 1xx, 204, and 304 responses and any response to a HEAD + request) is always terminated by the first empty line after the + header fields, regardless of the entity-header fields present in the + message. + + 2. If a Transfer-Encoding header field (section 14.40) is present and + indicates that the "chunked" transfer coding has been applied, then + +Fielding, et. al. Standards Track [Page 32] + +RFC 2068 HTTP/1.1 January 1997 + + the length is defined by the chunked encoding (section 3.6). + + 3. If a Content-Length header field (section 14.14) is present, its + value in bytes represents the length of the message-body. + + 4. If the message uses the media type "multipart/byteranges", which is + self-delimiting, then that defines the length. This media type MUST + NOT be used unless the sender knows that the recipient can parse it; + the presence in a request of a Range header with multiple byte-range + specifiers implies that the client can parse multipart/byteranges + responses. + + 5. By the server closing the connection. (Closing the connection + cannot be used to indicate the end of a request body, since that + would leave no possibility for the server to send back a response.) + + For compatibility with HTTP/1.0 applications, HTTP/1.1 requests + containing a message-body MUST include a valid Content-Length header + field unless the server is known to be HTTP/1.1 compliant. If a + request contains a message-body and a Content-Length is not given, + the server SHOULD respond with 400 (bad request) if it cannot + determine the length of the message, or with 411 (length required) if + it wishes to insist on receiving a valid Content-Length. + + All HTTP/1.1 applications that receive entities MUST accept the + "chunked" transfer coding (section 3.6), thus allowing this mechanism + to be used for messages when the message length cannot be determined + in advance. + + Messages MUST NOT include both a Content-Length header field and the + "chunked" transfer coding. If both are received, the Content-Length + MUST be ignored. + + When a Content-Length is given in a message where a message-body is + allowed, its field value MUST exactly match the number of OCTETs in + the message-body. HTTP/1.1 user agents MUST notify the user when an + invalid length is received and detected. + +Fielding, et. al. Standards Track [Page 33] + +RFC 2068 HTTP/1.1 January 1997 + +4.5 General Header Fields + + There are a few header fields which have general applicability for + both request and response messages, but which do not apply to the + entity being transferred. These header fields apply only to the + message being transmitted. + + general-header = Cache-Control ; Section 14.9 + | Connection ; Section 14.10 + | Date ; Section 14.19 + | Pragma ; Section 14.32 + | Transfer-Encoding ; Section 14.40 + | Upgrade ; Section 14.41 + | Via ; Section 14.44 + + General-header field names can be extended reliably only in + combination with a change in the protocol version. However, new or + experimental header fields may be given the semantics of general + header fields if all parties in the communication recognize them to + be general-header fields. Unrecognized header fields are treated as + entity-header fields. + +5 Request + + A request message from a client to a server includes, within the + first line of that message, the method to be applied to the resource, + the identifier of the resource, and the protocol version in use. + + Request = Request-Line ; Section 5.1 + *( general-header ; Section 4.5 + | request-header ; Section 5.3 + | entity-header ) ; Section 7.1 + CRLF + [ message-body ] ; Section 7.2 + +5.1 Request-Line + + The Request-Line begins with a method token, followed by the + Request-URI and the protocol version, and ending with CRLF. The + elements are separated by SP characters. No CR or LF are allowed + except in the final CRLF sequence. + + Request-Line = Method SP Request-URI SP HTTP-Version CRLF + +Fielding, et. al. Standards Track [Page 34] + +RFC 2068 HTTP/1.1 January 1997 + +5.1.1 Method + + The Method token indicates the method to be performed on the resource + identified by the Request-URI. The method is case-sensitive. + + Method = "OPTIONS" ; Section 9.2 + | "GET" ; Section 9.3 + | "HEAD" ; Section 9.4 + | "POST" ; Section 9.5 + | "PUT" ; Section 9.6 + | "DELETE" ; Section 9.7 + | "TRACE" ; Section 9.8 + | extension-method + + extension-method = token + + The list of methods allowed by a resource can be specified in an + Allow header field (section 14.7). The return code of the response + always notifies the client whether a method is currently allowed on a + resource, since the set of allowed methods can change dynamically. + Servers SHOULD return the status code 405 (Method Not Allowed) if the + method is known by the server but not allowed for the requested + resource, and 501 (Not Implemented) if the method is unrecognized or + not implemented by the server. The list of methods known by a server + can be listed in a Public response-header field (section 14.35). + + The methods GET and HEAD MUST be supported by all general-purpose + servers. All other methods are optional; however, if the above + methods are implemented, they MUST be implemented with the same + semantics as those specified in section 9. + +5.1.2 Request-URI + + The Request-URI is a Uniform Resource Identifier (section 3.2) and + identifies the resource upon which to apply the request. + + Request-URI = "*" | absoluteURI | abs_path + + The three options for Request-URI are dependent on the nature of the + request. The asterisk "*" means that the request does not apply to a + particular resource, but to the server itself, and is only allowed + when the method used does not necessarily apply to a resource. One + example would be + + OPTIONS * HTTP/1.1 + + The absoluteURI form is required when the request is being made to a + proxy. The proxy is requested to forward the request or service it + +Fielding, et. al. Standards Track [Page 35] + +RFC 2068 HTTP/1.1 January 1997 + + from a valid cache, and return the response. Note that the proxy MAY + forward the request on to another proxy or directly to the server + specified by the absoluteURI. In order to avoid request loops, a + proxy MUST be able to recognize all of its server names, including + any aliases, local variations, and the numeric IP address. An example + Request-Line would be: + + GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 + + To allow for transition to absoluteURIs in all requests in future + versions of HTTP, all HTTP/1.1 servers MUST accept the absoluteURI + form in requests, even though HTTP/1.1 clients will only generate + them in requests to proxies. + + The most common form of Request-URI is that used to identify a + resource on an origin server or gateway. In this case the absolute + path of the URI MUST be transmitted (see section 3.2.1, abs_path) as + the Request-URI, and the network location of the URI (net_loc) MUST + be transmitted in a Host header field. For example, a client wishing + to retrieve the resource above directly from the origin server would + create a TCP connection to port 80 of the host "www.w3.org" and send + the lines: + + GET /pub/WWW/TheProject.html HTTP/1.1 + Host: www.w3.org + + followed by the remainder of the Request. Note that the absolute path + cannot be empty; if none is present in the original URI, it MUST be + given as "/" (the server root). + + If a proxy receives a request without any path in the Request-URI and + the method specified is capable of supporting the asterisk form of + request, then the last proxy on the request chain MUST forward the + request with "*" as the final Request-URI. For example, the request + + OPTIONS http://www.ics.uci.edu:8001 HTTP/1.1 + + would be forwarded by the proxy as + + OPTIONS * HTTP/1.1 + Host: www.ics.uci.edu:8001 + + after connecting to port 8001 of host "www.ics.uci.edu". + + The Request-URI is transmitted in the format specified in section + 3.2.1. The origin server MUST decode the Request-URI in order to + properly interpret the request. Servers SHOULD respond to invalid + Request-URIs with an appropriate status code. + +Fielding, et. al. Standards Track [Page 36] + +RFC 2068 HTTP/1.1 January 1997 + + In requests that they forward, proxies MUST NOT rewrite the + "abs_path" part of a Request-URI in any way except as noted above to + replace a null abs_path with "*", no matter what the proxy does in + its internal implementation. + + Note: The "no rewrite" rule prevents the proxy from changing the + meaning of the request when the origin server is improperly using a + non-reserved URL character for a reserved purpose. Implementers + should be aware that some pre-HTTP/1.1 proxies have been known to + rewrite the Request-URI. + +5.2 The Resource Identified by a Request + + HTTP/1.1 origin servers SHOULD be aware that the exact resource + identified by an Internet request is determined by examining both the + Request-URI and the Host header field. + + An origin server that does not allow resources to differ by the + requested host MAY ignore the Host header field value. (But see + section 19.5.1 for other requirements on Host support in HTTP/1.1.) + + An origin server that does differentiate resources based on the host + requested (sometimes referred to as virtual hosts or vanity + hostnames) MUST use the following rules for determining the requested + resource on an HTTP/1.1 request: + + 1. If Request-URI is an absoluteURI, the host is part of the + Request-URI. Any Host header field value in the request MUST be + ignored. + + 2. If the Request-URI is not an absoluteURI, and the request + includes a Host header field, the host is determined by the Host + header field value. + + 3. If the host as determined by rule 1 or 2 is not a valid host on + the server, the response MUST be a 400 (Bad Request) error + message. + + Recipients of an HTTP/1.0 request that lacks a Host header field MAY + attempt to use heuristics (e.g., examination of the URI path for + something unique to a particular host) in order to determine what + exact resource is being requested. + +5.3 Request Header Fields + + The request-header fields allow the client to pass additional + information about the request, and about the client itself, to the + server. These fields act as request modifiers, with semantics + +Fielding, et. al. Standards Track [Page 37] + +RFC 2068 HTTP/1.1 January 1997 + + equivalent to the parameters on a programming language method + invocation. + + request-header = Accept ; Section 14.1 + | Accept-Charset ; Section 14.2 + | Accept-Encoding ; Section 14.3 + | Accept-Language ; Section 14.4 + | Authorization ; Section 14.8 + | From ; Section 14.22 + | Host ; Section 14.23 + | If-Modified-Since ; Section 14.24 + | If-Match ; Section 14.25 + | If-None-Match ; Section 14.26 + | If-Range ; Section 14.27 + | If-Unmodified-Since ; Section 14.28 + | Max-Forwards ; Section 14.31 + | Proxy-Authorization ; Section 14.34 + | Range ; Section 14.36 + | Referer ; Section 14.37 + | User-Agent ; Section 14.42 + + Request-header field names can be extended reliably only in + combination with a change in the protocol version. However, new or + experimental header fields MAY be given the semantics of request- + header fields if all parties in the communication recognize them to + be request-header fields. Unrecognized header fields are treated as + entity-header fields. + +6 Response + + After receiving and interpreting a request message, a server responds + with an HTTP response message. + + Response = Status-Line ; Section 6.1 + *( general-header ; Section 4.5 + | response-header ; Section 6.2 + | entity-header ) ; Section 7.1 + CRLF + [ message-body ] ; Section 7.2 + +6.1 Status-Line + + The first line of a Response message is the Status-Line, consisting + of the protocol version followed by a numeric status code and its + associated textual phrase, with each element separated by SP + characters. No CR or LF is allowed except in the final CRLF + sequence. + +Fielding, et. al. Standards Track [Page 38] + +RFC 2068 HTTP/1.1 January 1997 + + Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF + +6.1.1 Status Code and Reason Phrase + + The Status-Code element is a 3-digit integer result code of the + attempt to understand and satisfy the request. These codes are fully + defined in section 10. The Reason-Phrase is intended to give a short + textual description of the Status-Code. The Status-Code is intended + for use by automata and the Reason-Phrase is intended for the human + user. The client is not required to examine or display the Reason- + Phrase. + + The first digit of the Status-Code defines the class of response. The + last two digits do not have any categorization role. There are 5 + values for the first digit: + + o 1xx: Informational - Request received, continuing process + + o 2xx: Success - The action was successfully received, understood, + and accepted + + o 3xx: Redirection - Further action must be taken in order to + complete the request + + o 4xx: Client Error - The request contains bad syntax or cannot be + fulfilled + + o 5xx: Server Error - The server failed to fulfill an apparently + valid request + + The individual values of the numeric status codes defined for + HTTP/1.1, and an example set of corresponding Reason-Phrase's, are + presented below. The reason phrases listed here are only recommended + -- they may be replaced by local equivalents without affecting the + protocol. + + Status-Code = "100" ; Continue + | "101" ; Switching Protocols + | "200" ; OK + | "201" ; Created + | "202" ; Accepted + | "203" ; Non-Authoritative Information + | "204" ; No Content + | "205" ; Reset Content + | "206" ; Partial Content + | "300" ; Multiple Choices + | "301" ; Moved Permanently + | "302" ; Moved Temporarily + +Fielding, et. al. Standards Track [Page 39] + +RFC 2068 HTTP/1.1 January 1997 + + | "303" ; See Other + | "304" ; Not Modified + | "305" ; Use Proxy + | "400" ; Bad Request + | "401" ; Unauthorized + | "402" ; Payment Required + | "403" ; Forbidden + | "404" ; Not Found + | "405" ; Method Not Allowed + | "406" ; Not Acceptable + | "407" ; Proxy Authentication Required + | "408" ; Request Time-out + | "409" ; Conflict + | "410" ; Gone + | "411" ; Length Required + | "412" ; Precondition Failed + | "413" ; Request Entity Too Large + | "414" ; Request-URI Too Large + | "415" ; Unsupported Media Type + | "500" ; Internal Server Error + | "501" ; Not Implemented + | "502" ; Bad Gateway + | "503" ; Service Unavailable + | "504" ; Gateway Time-out + | "505" ; HTTP Version not supported + | extension-code + + extension-code = 3DIGIT + + Reason-Phrase = * + + HTTP status codes are extensible. HTTP applications are not required + to understand the meaning of all registered status codes, though such + understanding is obviously desirable. However, applications MUST + understand the class of any status code, as indicated by the first + digit, and treat any unrecognized response as being equivalent to the + x00 status code of that class, with the exception that an + unrecognized response MUST NOT be cached. For example, if an + unrecognized status code of 431 is received by the client, it can + safely assume that there was something wrong with its request and + treat the response as if it had received a 400 status code. In such + cases, user agents SHOULD present to the user the entity returned + with the response, since that entity is likely to include human- + readable information which will explain the unusual status. + +Fielding, et. al. Standards Track [Page 40] + +RFC 2068 HTTP/1.1 January 1997 + +6.2 Response Header Fields + + The response-header fields allow the server to pass additional + information about the response which cannot be placed in the Status- + Line. These header fields give information about the server and about + further access to the resource identified by the Request-URI. + + response-header = Age ; Section 14.6 + | Location ; Section 14.30 + | Proxy-Authenticate ; Section 14.33 + | Public ; Section 14.35 + | Retry-After ; Section 14.38 + | Server ; Section 14.39 + | Vary ; Section 14.43 + | Warning ; Section 14.45 + | WWW-Authenticate ; Section 14.46 + + Response-header field names can be extended reliably only in + combination with a change in the protocol version. However, new or + experimental header fields MAY be given the semantics of response- + header fields if all parties in the communication recognize them to + be response-header fields. Unrecognized header fields are treated as + entity-header fields. + +7 Entity + + Request and Response messages MAY transfer an entity if not otherwise + restricted by the request method or response status code. An entity + consists of entity-header fields and an entity-body, although some + responses will only include the entity-headers. + + In this section, both sender and recipient refer to either the client + or the server, depending on who sends and who receives the entity. + +7.1 Entity Header Fields + + Entity-header fields define optional metainformation about the + entity-body or, if no body is present, about the resource identified + by the request. + +Fielding, et. al. Standards Track [Page 41] + +RFC 2068 HTTP/1.1 January 1997 + + entity-header = Allow ; Section 14.7 + | Content-Base ; Section 14.11 + | Content-Encoding ; Section 14.12 + | Content-Language ; Section 14.13 + | Content-Length ; Section 14.14 + | Content-Location ; Section 14.15 + | Content-MD5 ; Section 14.16 + | Content-Range ; Section 14.17 + | Content-Type ; Section 14.18 + | ETag ; Section 14.20 + | Expires ; Section 14.21 + | Last-Modified ; Section 14.29 + | extension-header + + extension-header = message-header + + The extension-header mechanism allows additional entity-header fields + to be defined without changing the protocol, but these fields cannot + be assumed to be recognizable by the recipient. Unrecognized header + fields SHOULD be ignored by the recipient and forwarded by proxies. + +7.2 Entity Body + + The entity-body (if any) sent with an HTTP request or response is in + a format and encoding defined by the entity-header fields. + + entity-body = *OCTET + + An entity-body is only present in a message when a message-body is + present, as described in section 4.3. The entity-body is obtained + from the message-body by decoding any Transfer-Encoding that may have + been applied to ensure safe and proper transfer of the message. + +7.2.1 Type + + When an entity-body is included with a message, the data type of that + body is determined via the header fields Content-Type and Content- + Encoding. These define a two-layer, ordered encoding model: + + entity-body := Content-Encoding( Content-Type( data ) ) + + Content-Type specifies the media type of the underlying data. + Content-Encoding may be used to indicate any additional content + codings applied to the data, usually for the purpose of data + compression, that are a property of the requested resource. There is + no default encoding. + +Fielding, et. al. Standards Track [Page 42] + +RFC 2068 HTTP/1.1 January 1997 + + Any HTTP/1.1 message containing an entity-body SHOULD include a + Content-Type header field defining the media type of that body. If + and only if the media type is not given by a Content-Type field, the + recipient MAY attempt to guess the media type via inspection of its + content and/or the name extension(s) of the URL used to identify the + resource. If the media type remains unknown, the recipient SHOULD + treat it as type "application/octet-stream". + +7.2.2 Length + + The length of an entity-body is the length of the message-body after + any transfer codings have been removed. Section 4.4 defines how the + length of a message-body is determined. + +8 Connections + +8.1 Persistent Connections + +8.1.1 Purpose + + Prior to persistent connections, a separate TCP connection was + established to fetch each URL, increasing the load on HTTP servers + and causing congestion on the Internet. The use of inline images and + other associated data often requires a client to make multiple + requests of the same server in a short amount of time. Analyses of + these performance problems are available [30][27]; analysis and + results from a prototype implementation are in [26]. + + Persistent HTTP connections have a number of advantages: + + o By opening and closing fewer TCP connections, CPU time is saved, + and memory used for TCP protocol control blocks is also saved. + o HTTP requests and responses can be pipelined on a connection. + Pipelining allows a client to make multiple requests without + waiting for each response, allowing a single TCP connection to be + used much more efficiently, with much lower elapsed time. + o Network congestion is reduced by reducing the number of packets + caused by TCP opens, and by allowing TCP sufficient time to + determine the congestion state of the network. + o HTTP can evolve more gracefully; since errors can be reported + without the penalty of closing the TCP connection. Clients using + future versions of HTTP might optimistically try a new feature, but + if communicating with an older server, retry with old semantics + after an error is reported. + + HTTP implementations SHOULD implement persistent connections. + +Fielding, et. al. Standards Track [Page 43] + +RFC 2068 HTTP/1.1 January 1997 + +8.1.2 Overall Operation + + A significant difference between HTTP/1.1 and earlier versions of + HTTP is that persistent connections are the default behavior of any + HTTP connection. That is, unless otherwise indicated, the client may + assume that the server will maintain a persistent connection. + + Persistent connections provide a mechanism by which a client and a + server can signal the close of a TCP connection. This signaling takes + place using the Connection header field. Once a close has been + signaled, the client MUST not send any more requests on that + connection. + +8.1.2.1 Negotiation + + An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to + maintain a persistent connection unless a Connection header including + the connection-token "close" was sent in the request. If the server + chooses to close the connection immediately after sending the + response, it SHOULD send a Connection header including the + connection-token close. + + An HTTP/1.1 client MAY expect a connection to remain open, but would + decide to keep it open based on whether the response from a server + contains a Connection header with the connection-token close. In case + the client does not want to maintain a connection for more than that + request, it SHOULD send a Connection header including the + connection-token close. + + If either the client or the server sends the close token in the + Connection header, that request becomes the last one for the + connection. + + Clients and servers SHOULD NOT assume that a persistent connection is + maintained for HTTP versions less than 1.1 unless it is explicitly + signaled. See section 19.7.1 for more information on backwards + compatibility with HTTP/1.0 clients. + + In order to remain persistent, all messages on the connection must + have a self-defined message length (i.e., one not defined by closure + of the connection), as described in section 4.4. + +8.1.2.2 Pipelining + + A client that supports persistent connections MAY "pipeline" its + requests (i.e., send multiple requests without waiting for each + response). A server MUST send its responses to those requests in the + same order that the requests were received. + +Fielding, et. al. Standards Track [Page 44] + +RFC 2068 HTTP/1.1 January 1997 + + Clients which assume persistent connections and pipeline immediately + after connection establishment SHOULD be prepared to retry their + connection if the first pipelined attempt fails. If a client does + such a retry, it MUST NOT pipeline before it knows the connection is + persistent. Clients MUST also be prepared to resend their requests if + the server closes the connection before sending all of the + corresponding responses. + +8.1.3 Proxy Servers + + It is especially important that proxies correctly implement the + properties of the Connection header field as specified in 14.2.1. + + The proxy server MUST signal persistent connections separately with + its clients and the origin servers (or other proxy servers) that it + connects to. Each persistent connection applies to only one transport + link. + + A proxy server MUST NOT establish a persistent connection with an + HTTP/1.0 client. + +8.1.4 Practical Considerations + + Servers will usually have some time-out value beyond which they will + no longer maintain an inactive connection. Proxy servers might make + this a higher value since it is likely that the client will be making + more connections through the same server. The use of persistent + connections places no requirements on the length of this time-out for + either the client or the server. + + When a client or server wishes to time-out it SHOULD issue a graceful + close on the transport connection. Clients and servers SHOULD both + constantly watch for the other side of the transport close, and + respond to it as appropriate. If a client or server does not detect + the other side's close promptly it could cause unnecessary resource + drain on the network. + + A client, server, or proxy MAY close the transport connection at any + time. For example, a client MAY have started to send a new request at + the same time that the server has decided to close the "idle" + connection. From the server's point of view, the connection is being + closed while it was idle, but from the client's point of view, a + request is in progress. + + This means that clients, servers, and proxies MUST be able to recover + from asynchronous close events. Client software SHOULD reopen the + transport connection and retransmit the aborted request without user + interaction so long as the request method is idempotent (see section + +Fielding, et. al. Standards Track [Page 45] + +RFC 2068 HTTP/1.1 January 1997 + + 9.1.2); other methods MUST NOT be automatically retried, although + user agents MAY offer a human operator the choice of retrying the + request. + + However, this automatic retry SHOULD NOT be repeated if the second + request fails. + + Servers SHOULD always respond to at least one request per connection, + if at all possible. Servers SHOULD NOT close a connection in the + middle of transmitting a response, unless a network or client failure + is suspected. + + Clients that use persistent connections SHOULD limit the number of + simultaneous connections that they maintain to a given server. A + single-user client SHOULD maintain AT MOST 2 connections with any + server or proxy. A proxy SHOULD use up to 2*N connections to another + server or proxy, where N is the number of simultaneously active + users. These guidelines are intended to improve HTTP response times + and avoid congestion of the Internet or other networks. + +8.2 Message Transmission Requirements + +General requirements: + +o HTTP/1.1 servers SHOULD maintain persistent connections and use + TCP's flow control mechanisms to resolve temporary overloads, + rather than terminating connections with the expectation that + clients will retry. The latter technique can exacerbate network + congestion. + +o An HTTP/1.1 (or later) client sending a message-body SHOULD monitor + the network connection for an error status while it is transmitting + the request. If the client sees an error status, it SHOULD + immediately cease transmitting the body. If the body is being sent + using a "chunked" encoding (section 3.6), a zero length chunk and + empty footer MAY be used to prematurely mark the end of the + message. If the body was preceded by a Content-Length header, the + client MUST close the connection. + +o An HTTP/1.1 (or later) client MUST be prepared to accept a 100 + (Continue) status followed by a regular response. + +o An HTTP/1.1 (or later) server that receives a request from a + HTTP/1.0 (or earlier) client MUST NOT transmit the 100 (continue) + response; it SHOULD either wait for the request to be completed + normally (thus avoiding an interrupted request) or close the + connection prematurely. + +Fielding, et. al. Standards Track [Page 46] + +RFC 2068 HTTP/1.1 January 1997 + + Upon receiving a method subject to these requirements from an + HTTP/1.1 (or later) client, an HTTP/1.1 (or later) server MUST either + respond with 100 (Continue) status and continue to read from the + input stream, or respond with an error status. If it responds with an + error status, it MAY close the transport (TCP) connection or it MAY + continue to read and discard the rest of the request. It MUST NOT + perform the requested method if it returns an error status. + + Clients SHOULD remember the version number of at least the most + recently used server; if an HTTP/1.1 client has seen an HTTP/1.1 or + later response from the server, and it sees the connection close + before receiving any status from the server, the client SHOULD retry + the request without user interaction so long as the request method is + idempotent (see section 9.1.2); other methods MUST NOT be + automatically retried, although user agents MAY offer a human + operator the choice of retrying the request.. If the client does + retry the request, the client + + o MUST first send the request header fields, and then + + o MUST wait for the server to respond with either a 100 (Continue) + response, in which case the client should continue, or with an + error status. + + If an HTTP/1.1 client has not seen an HTTP/1.1 or later response from + the server, it should assume that the server implements HTTP/1.0 or + older and will not use the 100 (Continue) response. If in this case + the client sees the connection close before receiving any status from + the server, the client SHOULD retry the request. If the client does + retry the request to this HTTP/1.0 server, it should use the + following "binary exponential backoff" algorithm to be assured of + obtaining a reliable response: + + 1. Initiate a new connection to the server + + 2. Transmit the request-headers + + 3. Initialize a variable R to the estimated round-trip time to the + server (e.g., based on the time it took to establish the + connection), or to a constant value of 5 seconds if the round-trip + time is not available. + + 4. Compute T = R * (2**N), where N is the number of previous retries + of this request. + + 5. Wait either for an error response from the server, or for T seconds + (whichever comes first) + +Fielding, et. al. Standards Track [Page 47] + +RFC 2068 HTTP/1.1 January 1997 + + 6. If no error response is received, after T seconds transmit the body + of the request. + + 7. If client sees that the connection is closed prematurely, repeat + from step 1 until the request is accepted, an error response is + received, or the user becomes impatient and terminates the retry + process. + + No matter what the server version, if an error status is received, + the client + + o MUST NOT continue and + + o MUST close the connection if it has not completed sending the + message. + + An HTTP/1.1 (or later) client that sees the connection close after + receiving a 100 (Continue) but before receiving any other status + SHOULD retry the request, and need not wait for 100 (Continue) + response (but MAY do so if this simplifies the implementation). + +9 Method Definitions + + The set of common methods for HTTP/1.1 is defined below. Although + this set can be expanded, additional methods cannot be assumed to + share the same semantics for separately extended clients and servers. + + The Host request-header field (section 14.23) MUST accompany all + HTTP/1.1 requests. + +9.1 Safe and Idempotent Methods + +9.1.1 Safe Methods + + Implementers should be aware that the software represents the user in + their interactions over the Internet, and should be careful to allow + the user to be aware of any actions they may take which may have an + unexpected significance to themselves or others. + + In particular, the convention has been established that the GET and + HEAD methods should never have the significance of taking an action + other than retrieval. These methods should be considered "safe." This + allows user agents to represent other methods, such as POST, PUT and + DELETE, in a special way, so that the user is made aware of the fact + that a possibly unsafe action is being requested. + + Naturally, it is not possible to ensure that the server does not + generate side-effects as a result of performing a GET request; in + +Fielding, et. al. Standards Track [Page 48] + +RFC 2068 HTTP/1.1 January 1997 + + fact, some dynamic resources consider that a feature. The important + distinction here is that the user did not request the side-effects, + so therefore cannot be held accountable for them. + +9.1.2 Idempotent Methods + + Methods may also have the property of "idempotence" in that (aside + from error or expiration issues) the side-effects of N > 0 identical + requests is the same as for a single request. The methods GET, HEAD, + PUT and DELETE share this property. + +9.2 OPTIONS + + The OPTIONS method represents a request for information about the + communication options available on the request/response chain + identified by the Request-URI. This method allows the client to + determine the options and/or requirements associated with a resource, + or the capabilities of a server, without implying a resource action + or initiating a resource retrieval. + + Unless the server's response is an error, the response MUST NOT + include entity information other than what can be considered as + communication options (e.g., Allow is appropriate, but Content-Type + is not). Responses to this method are not cachable. + + If the Request-URI is an asterisk ("*"), the OPTIONS request is + intended to apply to the server as a whole. A 200 response SHOULD + include any header fields which indicate optional features + implemented by the server (e.g., Public), including any extensions + not defined by this specification, in addition to any applicable + general or response-header fields. As described in section 5.1.2, an + "OPTIONS *" request can be applied through a proxy by specifying the + destination server in the Request-URI without any path information. + + If the Request-URI is not an asterisk, the OPTIONS request applies + only to the options that are available when communicating with that + resource. A 200 response SHOULD include any header fields which + indicate optional features implemented by the server and applicable + to that resource (e.g., Allow), including any extensions not defined + by this specification, in addition to any applicable general or + response-header fields. If the OPTIONS request passes through a + proxy, the proxy MUST edit the response to exclude those options + which apply to a proxy's capabilities and which are known to be + unavailable through that proxy. + +Fielding, et. al. Standards Track [Page 49] + +RFC 2068 HTTP/1.1 January 1997 + +9.3 GET + + The GET method means retrieve whatever information (in the form of an + entity) is identified by the Request-URI. If the Request-URI refers + to a data-producing process, it is the produced data which shall be + returned as the entity in the response and not the source text of the + process, unless that text happens to be the output of the process. + + The semantics of the GET method change to a "conditional GET" if the + request message includes an If-Modified-Since, If-Unmodified-Since, + If-Match, If-None-Match, or If-Range header field. A conditional GET + method requests that the entity be transferred only under the + circumstances described by the conditional header field(s). The + conditional GET method is intended to reduce unnecessary network + usage by allowing cached entities to be refreshed without requiring + multiple requests or transferring data already held by the client. + + The semantics of the GET method change to a "partial GET" if the + request message includes a Range header field. A partial GET requests + that only part of the entity be transferred, as described in section + 14.36. The partial GET method is intended to reduce unnecessary + network usage by allowing partially-retrieved entities to be + completed without transferring data already held by the client. + + The response to a GET request is cachable if and only if it meets the + requirements for HTTP caching described in section 13. + +9.4 HEAD + + The HEAD method is identical to GET except that the server MUST NOT + return a message-body in the response. The metainformation contained + in the HTTP headers in response to a HEAD request SHOULD be identical + to the information sent in response to a GET request. This method can + be used for obtaining metainformation about the entity implied by the + request without transferring the entity-body itself. This method is + often used for testing hypertext links for validity, accessibility, + and recent modification. + + The response to a HEAD request may be cachable in the sense that the + information contained in the response may be used to update a + previously cached entity from that resource. If the new field values + indicate that the cached entity differs from the current entity (as + would be indicated by a change in Content-Length, Content-MD5, ETag + or Last-Modified), then the cache MUST treat the cache entry as + stale. + +Fielding, et. al. Standards Track [Page 50] + +RFC 2068 HTTP/1.1 January 1997 + +9.5 POST + + The POST method is used to request that the destination server accept + the entity enclosed in the request as a new subordinate of the + resource identified by the Request-URI in the Request-Line. POST is + designed to allow a uniform method to cover the following functions: + + o Annotation of existing resources; + + o Posting a message to a bulletin board, newsgroup, mailing list, + or similar group of articles; + + o Providing a block of data, such as the result of submitting a + form, to a data-handling process; + + o Extending a database through an append operation. + + The actual function performed by the POST method is determined by the + server and is usually dependent on the Request-URI. The posted entity + is subordinate to that URI in the same way that a file is subordinate + to a directory containing it, a news article is subordinate to a + newsgroup to which it is posted, or a record is subordinate to a + database. + + The action performed by the POST method might not result in a + resource that can be identified by a URI. In this case, either 200 + (OK) or 204 (No Content) is the appropriate response status, + depending on whether or not the response includes an entity that + describes the result. + + If a resource has been created on the origin server, the response + SHOULD be 201 (Created) and contain an entity which describes the + status of the request and refers to the new resource, and a Location + header (see section 14.30). + + Responses to this method are not cachable, unless the response + includes appropriate Cache-Control or Expires header fields. However, + the 303 (See Other) response can be used to direct the user agent to + retrieve a cachable resource. + + POST requests must obey the message transmission requirements set out + in section 8.2. + +Fielding, et. al. Standards Track [Page 51] + +RFC 2068 HTTP/1.1 January 1997 + +9.6 PUT + + The PUT method requests that the enclosed entity be stored under the + supplied Request-URI. If the Request-URI refers to an already + existing resource, the enclosed entity SHOULD be considered as a + modified version of the one residing on the origin server. If the + Request-URI does not point to an existing resource, and that URI is + capable of being defined as a new resource by the requesting user + agent, the origin server can create the resource with that URI. If a + new resource is created, the origin server MUST inform the user agent + via the 201 (Created) response. If an existing resource is modified, + either the 200 (OK) or 204 (No Content) response codes SHOULD be sent + to indicate successful completion of the request. If the resource + could not be created or modified with the Request-URI, an appropriate + error response SHOULD be given that reflects the nature of the + problem. The recipient of the entity MUST NOT ignore any Content-* + (e.g. Content-Range) headers that it does not understand or implement + and MUST return a 501 (Not Implemented) response in such cases. + + If the request passes through a cache and the Request-URI identifies + one or more currently cached entities, those entries should be + treated as stale. Responses to this method are not cachable. + + The fundamental difference between the POST and PUT requests is + reflected in the different meaning of the Request-URI. The URI in a + POST request identifies the resource that will handle the enclosed + entity. That resource may be a data-accepting process, a gateway to + some other protocol, or a separate entity that accepts annotations. + In contrast, the URI in a PUT request identifies the entity enclosed + with the request -- the user agent knows what URI is intended and the + server MUST NOT attempt to apply the request to some other resource. + If the server desires that the request be applied to a different URI, + it MUST send a 301 (Moved Permanently) response; the user agent MAY + then make its own decision regarding whether or not to redirect the + request. + + A single resource MAY be identified by many different URIs. For + example, an article may have a URI for identifying "the current + version" which is separate from the URI identifying each particular + version. In this case, a PUT request on a general URI may result in + several other URIs being defined by the origin server. + + HTTP/1.1 does not define how a PUT method affects the state of an + origin server. + + PUT requests must obey the message transmission requirements set out + in section 8.2. + +Fielding, et. al. Standards Track [Page 52] + +RFC 2068 HTTP/1.1 January 1997 + +9.7 DELETE + + The DELETE method requests that the origin server delete the resource + identified by the Request-URI. This method MAY be overridden by human + intervention (or other means) on the origin server. The client cannot + be guaranteed that the operation has been carried out, even if the + status code returned from the origin server indicates that the action + has been completed successfully. However, the server SHOULD not + indicate success unless, at the time the response is given, it + intends to delete the resource or move it to an inaccessible + location. + + A successful response SHOULD be 200 (OK) if the response includes an + entity describing the status, 202 (Accepted) if the action has not + yet been enacted, or 204 (No Content) if the response is OK but does + not include an entity. + + If the request passes through a cache and the Request-URI identifies + one or more currently cached entities, those entries should be + treated as stale. Responses to this method are not cachable. + +9.8 TRACE + + The TRACE method is used to invoke a remote, application-layer loop- + back of the request message. The final recipient of the request + SHOULD reflect the message received back to the client as the + entity-body of a 200 (OK) response. The final recipient is either the + origin server or the first proxy or gateway to receive a Max-Forwards + value of zero (0) in the request (see section 14.31). A TRACE request + MUST NOT include an entity. + + TRACE allows the client to see what is being received at the other + end of the request chain and use that data for testing or diagnostic + information. The value of the Via header field (section 14.44) is of + particular interest, since it acts as a trace of the request chain. + Use of the Max-Forwards header field allows the client to limit the + length of the request chain, which is useful for testing a chain of + proxies forwarding messages in an infinite loop. + + If successful, the response SHOULD contain the entire request message + in the entity-body, with a Content-Type of "message/http". Responses + to this method MUST NOT be cached. + +10 Status Code Definitions + + Each Status-Code is described below, including a description of which + method(s) it can follow and any metainformation required in the + response. + +Fielding, et. al. Standards Track [Page 53] + +RFC 2068 HTTP/1.1 January 1997 + +10.1 Informational 1xx + + This class of status code indicates a provisional response, + consisting only of the Status-Line and optional headers, and is + terminated by an empty line. Since HTTP/1.0 did not define any 1xx + status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 + client except under experimental conditions. + +10.1.1 100 Continue + + The client may continue with its request. This interim response is + used to inform the client that the initial part of the request has + been received and has not yet been rejected by the server. The client + SHOULD continue by sending the remainder of the request or, if the + request has already been completed, ignore this response. The server + MUST send a final response after the request has been completed. + +10.1.2 101 Switching Protocols + + The server understands and is willing to comply with the client's + request, via the Upgrade message header field (section 14.41), for a + change in the application protocol being used on this connection. The + server will switch protocols to those defined by the response's + Upgrade header field immediately after the empty line which + terminates the 101 response. + + The protocol should only be switched when it is advantageous to do + so. For example, switching to a newer version of HTTP is + advantageous over older versions, and switching to a real-time, + synchronous protocol may be advantageous when delivering resources + that use such features. + +10.2 Successful 2xx + + This class of status code indicates that the client's request was + successfully received, understood, and accepted. + +10.2.1 200 OK + + The request has succeeded. The information returned with the response + is dependent on the method used in the request, for example: + + GET an entity corresponding to the requested resource is sent in the + response; + + HEAD the entity-header fields corresponding to the requested resource + are sent in the response without any message-body; + +Fielding, et. al. Standards Track [Page 54] + +RFC 2068 HTTP/1.1 January 1997 + + POST an entity describing or containing the result of the action; + + TRACE an entity containing the request message as received by the end + server. + +10.2.2 201 Created + + The request has been fulfilled and resulted in a new resource being + created. The newly created resource can be referenced by the URI(s) + returned in the entity of the response, with the most specific URL + for the resource given by a Location header field. The origin server + MUST create the resource before returning the 201 status code. If the + action cannot be carried out immediately, the server should respond + with 202 (Accepted) response instead. + +10.2.3 202 Accepted + + The request has been accepted for processing, but the processing has + not been completed. The request MAY or MAY NOT eventually be acted + upon, as it MAY be disallowed when processing actually takes place. + There is no facility for re-sending a status code from an + asynchronous operation such as this. + + The 202 response is intentionally non-committal. Its purpose is to + allow a server to accept a request for some other process (perhaps a + batch-oriented process that is only run once per day) without + requiring that the user agent's connection to the server persist + until the process is completed. The entity returned with this + response SHOULD include an indication of the request's current status + and either a pointer to a status monitor or some estimate of when the + user can expect the request to be fulfilled. + +10.2.4 203 Non-Authoritative Information + + The returned metainformation in the entity-header is not the + definitive set as available from the origin server, but is gathered + from a local or a third-party copy. The set presented MAY be a subset + or superset of the original version. For example, including local + annotation information about the resource MAY result in a superset of + the metainformation known by the origin server. Use of this response + code is not required and is only appropriate when the response would + otherwise be 200 (OK). + +10.2.5 204 No Content + + The server has fulfilled the request but there is no new information + to send back. If the client is a user agent, it SHOULD NOT change its + document view from that which caused the request to be sent. This + +Fielding, et. al. Standards Track [Page 55] + +RFC 2068 HTTP/1.1 January 1997 + + response is primarily intended to allow input for actions to take + place without causing a change to the user agent's active document + view. The response MAY include new metainformation in the form of + entity-headers, which SHOULD apply to the document currently in the + user agent's active view. + + The 204 response MUST NOT include a message-body, and thus is always + terminated by the first empty line after the header fields. + +10.2.6 205 Reset Content + + The server has fulfilled the request and the user agent SHOULD reset + the document view which caused the request to be sent. This response + is primarily intended to allow input for actions to take place via + user input, followed by a clearing of the form in which the input is + given so that the user can easily initiate another input action. The + response MUST NOT include an entity. + +10.2.7 206 Partial Content + + The server has fulfilled the partial GET request for the resource. + The request must have included a Range header field (section 14.36) + indicating the desired range. The response MUST include either a + Content-Range header field (section 14.17) indicating the range + included with this response, or a multipart/byteranges Content-Type + including Content-Range fields for each part. If multipart/byteranges + is not used, the Content-Length header field in the response MUST + match the actual number of OCTETs transmitted in the message-body. + + A cache that does not support the Range and Content-Range headers + MUST NOT cache 206 (Partial) responses. + +10.3 Redirection 3xx + + This class of status code indicates that further action needs to be + taken by the user agent in order to fulfill the request. The action + required MAY be carried out by the user agent without interaction + with the user if and only if the method used in the second request is + GET or HEAD. A user agent SHOULD NOT automatically redirect a request + more than 5 times, since such redirections usually indicate an + infinite loop. + +Fielding, et. al. Standards Track [Page 56] + +RFC 2068 HTTP/1.1 January 1997 + +10.3.1 300 Multiple Choices + + The requested resource corresponds to any one of a set of + representations, each with its own specific location, and agent- + driven negotiation information (section 12) is being provided so that + the user (or user agent) can select a preferred representation and + redirect its request to that location. + + Unless it was a HEAD request, the response SHOULD include an entity + containing a list of resource characteristics and location(s) from + which the user or user agent can choose the one most appropriate. The + entity format is specified by the media type given in the Content- + Type header field. Depending upon the format and the capabilities of + the user agent, selection of the most appropriate choice may be + performed automatically. However, this specification does not define + any standard for such automatic selection. + + If the server has a preferred choice of representation, it SHOULD + include the specific URL for that representation in the Location + field; user agents MAY use the Location field value for automatic + redirection. This response is cachable unless indicated otherwise. + +10.3.2 301 Moved Permanently + + The requested resource has been assigned a new permanent URI and any + future references to this resource SHOULD be done using one of the + returned URIs. Clients with link editing capabilities SHOULD + automatically re-link references to the Request-URI to one or more of + the new references returned by the server, where possible. This + response is cachable unless indicated otherwise. + + If the new URI is a location, its URL SHOULD be given by the Location + field in the response. Unless the request method was HEAD, the entity + of the response SHOULD contain a short hypertext note with a + hyperlink to the new URI(s). + + If the 301 status code is received in response to a request other + than GET or HEAD, the user agent MUST NOT automatically redirect the + request unless it can be confirmed by the user, since this might + change the conditions under which the request was issued. + + Note: When automatically redirecting a POST request after receiving + a 301 status code, some existing HTTP/1.0 user agents will + erroneously change it into a GET request. + +Fielding, et. al. Standards Track [Page 57] + +RFC 2068 HTTP/1.1 January 1997 + +10.3.3 302 Moved Temporarily + + The requested resource resides temporarily under a different URI. + Since the redirection may be altered on occasion, the client SHOULD + continue to use the Request-URI for future requests. This response is + only cachable if indicated by a Cache-Control or Expires header + field. + + If the new URI is a location, its URL SHOULD be given by the Location + field in the response. Unless the request method was HEAD, the entity + of the response SHOULD contain a short hypertext note with a + hyperlink to the new URI(s). + + If the 302 status code is received in response to a request other + than GET or HEAD, the user agent MUST NOT automatically redirect the + request unless it can be confirmed by the user, since this might + change the conditions under which the request was issued. + + Note: When automatically redirecting a POST request after receiving + a 302 status code, some existing HTTP/1.0 user agents will + erroneously change it into a GET request. + +10.3.4 303 See Other + + The response to the request can be found under a different URI and + SHOULD be retrieved using a GET method on that resource. This method + exists primarily to allow the output of a POST-activated script to + redirect the user agent to a selected resource. The new URI is not a + substitute reference for the originally requested resource. The 303 + response is not cachable, but the response to the second (redirected) + request MAY be cachable. + + If the new URI is a location, its URL SHOULD be given by the Location + field in the response. Unless the request method was HEAD, the entity + of the response SHOULD contain a short hypertext note with a + hyperlink to the new URI(s). + +10.3.5 304 Not Modified + + If the client has performed a conditional GET request and access is + allowed, but the document has not been modified, the server SHOULD + respond with this status code. The response MUST NOT contain a + message-body. + +Fielding, et. al. Standards Track [Page 58] + +RFC 2068 HTTP/1.1 January 1997 + + The response MUST include the following header fields: + + o Date + + o ETag and/or Content-Location, if the header would have been sent in + a 200 response to the same request + + o Expires, Cache-Control, and/or Vary, if the field-value might + differ from that sent in any previous response for the same variant + + If the conditional GET used a strong cache validator (see section + 13.3.3), the response SHOULD NOT include other entity-headers. + Otherwise (i.e., the conditional GET used a weak validator), the + response MUST NOT include other entity-headers; this prevents + inconsistencies between cached entity-bodies and updated headers. + + If a 304 response indicates an entity not currently cached, then the + cache MUST disregard the response and repeat the request without the + conditional. + + If a cache uses a received 304 response to update a cache entry, the + cache MUST update the entry to reflect any new field values given in + the response. + + The 304 response MUST NOT include a message-body, and thus is always + terminated by the first empty line after the header fields. + +10.3.6 305 Use Proxy + + The requested resource MUST be accessed through the proxy given by + the Location field. The Location field gives the URL of the proxy. + The recipient is expected to repeat the request via the proxy. + +10.4 Client Error 4xx + + The 4xx class of status code is intended for cases in which the + client seems to have erred. Except when responding to a HEAD request, + the server SHOULD include an entity containing an explanation of the + error situation, and whether it is a temporary or permanent + condition. These status codes are applicable to any request method. + User agents SHOULD display any included entity to the user. + + Note: If the client is sending data, a server implementation using + TCP should be careful to ensure that the client acknowledges + receipt of the packet(s) containing the response, before the server + closes the input connection. If the client continues sending data + to the server after the close, the server's TCP stack will send a + reset packet to the client, which may erase the client's + +Fielding, et. al. Standards Track [Page 59] + +RFC 2068 HTTP/1.1 January 1997 + + unacknowledged input buffers before they can be read and + interpreted by the HTTP application. + +10.4.1 400 Bad Request + + The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without + modifications. + +10.4.2 401 Unauthorized + + The request requires user authentication. The response MUST include a + WWW-Authenticate header field (section 14.46) containing a challenge + applicable to the requested resource. The client MAY repeat the + request with a suitable Authorization header field (section 14.8). If + the request already included Authorization credentials, then the 401 + response indicates that authorization has been refused for those + credentials. If the 401 response contains the same challenge as the + prior response, and the user agent has already attempted + authentication at least once, then the user SHOULD be presented the + entity that was given in the response, since that entity MAY include + relevant diagnostic information. HTTP access authentication is + explained in section 11. + +10.4.3 402 Payment Required + + This code is reserved for future use. + +10.4.4 403 Forbidden + + The server understood the request, but is refusing to fulfill it. + Authorization will not help and the request SHOULD NOT be repeated. + If the request method was not HEAD and the server wishes to make + public why the request has not been fulfilled, it SHOULD describe the + reason for the refusal in the entity. This status code is commonly + used when the server does not wish to reveal exactly why the request + has been refused, or when no other response is applicable. + +10.4.5 404 Not Found + + The server has not found anything matching the Request-URI. No + indication is given of whether the condition is temporary or + permanent. + +Fielding, et. al. Standards Track [Page 60] + +RFC 2068 HTTP/1.1 January 1997 + + If the server does not wish to make this information available to the + client, the status code 403 (Forbidden) can be used instead. The 410 + (Gone) status code SHOULD be used if the server knows, through some + internally configurable mechanism, that an old resource is + permanently unavailable and has no forwarding address. + +10.4.6 405 Method Not Allowed + + The method specified in the Request-Line is not allowed for the + resource identified by the Request-URI. The response MUST include an + Allow header containing a list of valid methods for the requested + resource. + +10.4.7 406 Not Acceptable + + The resource identified by the request is only capable of generating + response entities which have content characteristics not acceptable + according to the accept headers sent in the request. + + Unless it was a HEAD request, the response SHOULD include an entity + containing a list of available entity characteristics and location(s) + from which the user or user agent can choose the one most + appropriate. The entity format is specified by the media type given + in the Content-Type header field. Depending upon the format and the + capabilities of the user agent, selection of the most appropriate + choice may be performed automatically. However, this specification + does not define any standard for such automatic selection. + + Note: HTTP/1.1 servers are allowed to return responses which are + not acceptable according to the accept headers sent in the request. + In some cases, this may even be preferable to sending a 406 + response. User agents are encouraged to inspect the headers of an + incoming response to determine if it is acceptable. If the response + could be unacceptable, a user agent SHOULD temporarily stop receipt + of more data and query the user for a decision on further actions. + +10.4.8 407 Proxy Authentication Required + + This code is similar to 401 (Unauthorized), but indicates that the + client MUST first authenticate itself with the proxy. The proxy MUST + return a Proxy-Authenticate header field (section 14.33) containing a + challenge applicable to the proxy for the requested resource. The + client MAY repeat the request with a suitable Proxy-Authorization + header field (section 14.34). HTTP access authentication is explained + in section 11. + +Fielding, et. al. Standards Track [Page 61] + +RFC 2068 HTTP/1.1 January 1997 + +10.4.9 408 Request Timeout + + The client did not produce a request within the time that the server + was prepared to wait. The client MAY repeat the request without + modifications at any later time. + +10.4.10 409 Conflict + + The request could not be completed due to a conflict with the current + state of the resource. This code is only allowed in situations where + it is expected that the user might be able to resolve the conflict + and resubmit the request. The response body SHOULD include enough + information for the user to recognize the source of the conflict. + Ideally, the response entity would include enough information for the + user or user agent to fix the problem; however, that may not be + possible and is not required. + + Conflicts are most likely to occur in response to a PUT request. If + versioning is being used and the entity being PUT includes changes to + a resource which conflict with those made by an earlier (third-party) + request, the server MAY use the 409 response to indicate that it + can't complete the request. In this case, the response entity SHOULD + contain a list of the differences between the two versions in a + format defined by the response Content-Type. + +10.4.11 410 Gone + + The requested resource is no longer available at the server and no + forwarding address is known. This condition SHOULD be considered + permanent. Clients with link editing capabilities SHOULD delete + references to the Request-URI after user approval. If the server does + not know, or has no facility to determine, whether or not the + condition is permanent, the status code 404 (Not Found) SHOULD be + used instead. This response is cachable unless indicated otherwise. + + The 410 response is primarily intended to assist the task of web + maintenance by notifying the recipient that the resource is + intentionally unavailable and that the server owners desire that + remote links to that resource be removed. Such an event is common for + limited-time, promotional services and for resources belonging to + individuals no longer working at the server's site. It is not + necessary to mark all permanently unavailable resources as "gone" or + to keep the mark for any length of time -- that is left to the + discretion of the server owner. + +Fielding, et. al. Standards Track [Page 62] + +RFC 2068 HTTP/1.1 January 1997 + +10.4.12 411 Length Required + + The server refuses to accept the request without a defined Content- + Length. The client MAY repeat the request if it adds a valid + Content-Length header field containing the length of the message-body + in the request message. + +10.4.13 412 Precondition Failed + + The precondition given in one or more of the request-header fields + evaluated to false when it was tested on the server. This response + code allows the client to place preconditions on the current resource + metainformation (header field data) and thus prevent the requested + method from being applied to a resource other than the one intended. + +10.4.14 413 Request Entity Too Large + + The server is refusing to process a request because the request + entity is larger than the server is willing or able to process. The + server may close the connection to prevent the client from continuing + the request. + + If the condition is temporary, the server SHOULD include a Retry- + After header field to indicate that it is temporary and after what + time the client may try again. + +10.4.15 414 Request-URI Too Long + + The server is refusing to service the request because the Request-URI + is longer than the server is willing to interpret. This rare + condition is only likely to occur when a client has improperly + converted a POST request to a GET request with long query + information, when the client has descended into a URL "black hole" of + redirection (e.g., a redirected URL prefix that points to a suffix of + itself), or when the server is under attack by a client attempting to + exploit security holes present in some servers using fixed-length + buffers for reading or manipulating the Request-URI. + +10.4.16 415 Unsupported Media Type + + The server is refusing to service the request because the entity of + the request is in a format not supported by the requested resource + for the requested method. + +Fielding, et. al. Standards Track [Page 63] + +RFC 2068 HTTP/1.1 January 1997 + +10.5 Server Error 5xx + + Response status codes beginning with the digit "5" indicate cases in + which the server is aware that it has erred or is incapable of + performing the request. Except when responding to a HEAD request, the + server SHOULD include an entity containing an explanation of the + error situation, and whether it is a temporary or permanent + condition. User agents SHOULD display any included entity to the + user. These response codes are applicable to any request method. + +10.5.1 500 Internal Server Error + + The server encountered an unexpected condition which prevented it + from fulfilling the request. + +10.5.2 501 Not Implemented + + The server does not support the functionality required to fulfill the + request. This is the appropriate response when the server does not + recognize the request method and is not capable of supporting it for + any resource. + +10.5.3 502 Bad Gateway + + The server, while acting as a gateway or proxy, received an invalid + response from the upstream server it accessed in attempting to + fulfill the request. + +10.5.4 503 Service Unavailable + + The server is currently unable to handle the request due to a + temporary overloading or maintenance of the server. The implication + is that this is a temporary condition which will be alleviated after + some delay. If known, the length of the delay may be indicated in a + Retry-After header. If no Retry-After is given, the client SHOULD + handle the response as it would for a 500 response. + + Note: The existence of the 503 status code does not imply that a + server must use it when becoming overloaded. Some servers may wish + to simply refuse the connection. + +10.5.5 504 Gateway Timeout + + The server, while acting as a gateway or proxy, did not receive a + timely response from the upstream server it accessed in attempting to + complete the request. + +Fielding, et. al. Standards Track [Page 64] + +RFC 2068 HTTP/1.1 January 1997 + +10.5.6 505 HTTP Version Not Supported + + The server does not support, or refuses to support, the HTTP protocol + version that was used in the request message. The server is + indicating that it is unable or unwilling to complete the request + using the same major version as the client, as described in section + 3.1, other than with this error message. The response SHOULD contain + an entity describing why that version is not supported and what other + protocols are supported by that server. + +11 Access Authentication + + HTTP provides a simple challenge-response authentication mechanism + which MAY be used by a server to challenge a client request and by a + client to provide authentication information. It uses an extensible, + case-insensitive token to identify the authentication scheme, + followed by a comma-separated list of attribute-value pairs which + carry the parameters necessary for achieving authentication via that + scheme. + + auth-scheme = token + + auth-param = token "=" quoted-string + + The 401 (Unauthorized) response message is used by an origin server + to challenge the authorization of a user agent. This response MUST + include a WWW-Authenticate header field containing at least one + challenge applicable to the requested resource. + + challenge = auth-scheme 1*SP realm *( "," auth-param ) + + realm = "realm" "=" realm-value + realm-value = quoted-string + + The realm attribute (case-insensitive) is required for all + authentication schemes which issue a challenge. The realm value + (case-sensitive), in combination with the canonical root URL (see + section 5.1.2) of the server being accessed, defines the protection + space. These realms allow the protected resources on a server to be + partitioned into a set of protection spaces, each with its own + authentication scheme and/or authorization database. The realm value + is a string, generally assigned by the origin server, which may have + additional semantics specific to the authentication scheme. + + A user agent that wishes to authenticate itself with a server-- + usually, but not necessarily, after receiving a 401 or 411 response- + -MAY do so by including an Authorization header field with the + request. The Authorization field value consists of credentials + +Fielding, et. al. Standards Track [Page 65] + +RFC 2068 HTTP/1.1 January 1997 + + containing the authentication information of the user agent for the + realm of the resource being requested. + + credentials = basic-credentials + | auth-scheme #auth-param + + The domain over which credentials can be automatically applied by a + user agent is determined by the protection space. If a prior request + has been authorized, the same credentials MAY be reused for all other + requests within that protection space for a period of time determined + by the authentication scheme, parameters, and/or user preference. + Unless otherwise defined by the authentication scheme, a single + protection space cannot extend outside the scope of its server. + + If the server does not wish to accept the credentials sent with a + request, it SHOULD return a 401 (Unauthorized) response. The response + MUST include a WWW-Authenticate header field containing the (possibly + new) challenge applicable to the requested resource and an entity + explaining the refusal. + + The HTTP protocol does not restrict applications to this simple + challenge-response mechanism for access authentication. Additional + mechanisms MAY be used, such as encryption at the transport level or + via message encapsulation, and with additional header fields + specifying authentication information. However, these additional + mechanisms are not defined by this specification. + + Proxies MUST be completely transparent regarding user agent + authentication. That is, they MUST forward the WWW-Authenticate and + Authorization headers untouched, and follow the rules found in + section 14.8. + + HTTP/1.1 allows a client to pass authentication information to and + from a proxy via the Proxy-Authenticate and Proxy-Authorization + headers. + +11.1 Basic Authentication Scheme + + The "basic" authentication scheme is based on the model that the user + agent must authenticate itself with a user-ID and a password for each + realm. The realm value should be considered an opaque string which + can only be compared for equality with other realms on that server. + The server will service the request only if it can validate the + user-ID and password for the protection space of the Request-URI. + There are no optional authentication parameters. + +Fielding, et. al. Standards Track [Page 66] + +RFC 2068 HTTP/1.1 January 1997 + + Upon receipt of an unauthorized request for a URI within the + protection space, the server MAY respond with a challenge like the + following: + + WWW-Authenticate: Basic realm="WallyWorld" + + where "WallyWorld" is the string assigned by the server to identify + the protection space of the Request-URI. + + To receive authorization, the client sends the userid and password, + separated by a single colon (":") character, within a base64 encoded + string in the credentials. + + basic-credentials = "Basic" SP basic-cookie + + basic-cookie = + + user-pass = userid ":" password + + userid = * + + password = *TEXT + + Userids might be case sensitive. + + If the user agent wishes to send the userid "Aladdin" and password + "open sesame", it would use the following header field: + + Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== + + See section 15 for security considerations associated with Basic + authentication. + +11.2 Digest Authentication Scheme + + A digest authentication for HTTP is specified in RFC 2069 [32]. + +12 Content Negotiation + + Most HTTP responses include an entity which contains information for + interpretation by a human user. Naturally, it is desirable to supply + the user with the "best available" entity corresponding to the + request. Unfortunately for servers and caches, not all users have + the same preferences for what is "best," and not all user agents are + equally capable of rendering all entity types. For that reason, HTTP + has provisions for several mechanisms for "content negotiation" -- + the process of selecting the best representation for a given response + +Fielding, et. al. Standards Track [Page 67] + +RFC 2068 HTTP/1.1 January 1997 + + when there are multiple representations available. + + Note: This is not called "format negotiation" because the alternate + representations may be of the same media type, but use different + capabilities of that type, be in different languages, etc. + + Any response containing an entity-body MAY be subject to negotiation, + including error responses. + + There are two kinds of content negotiation which are possible in + HTTP: server-driven and agent-driven negotiation. These two kinds of + negotiation are orthogonal and thus may be used separately or in + combination. One method of combination, referred to as transparent + negotiation, occurs when a cache uses the agent-driven negotiation + information provided by the origin server in order to provide + server-driven negotiation for subsequent requests. + +12.1 Server-driven Negotiation + + If the selection of the best representation for a response is made by + an algorithm located at the server, it is called server-driven + negotiation. Selection is based on the available representations of + the response (the dimensions over which it can vary; e.g. language, + content-coding, etc.) and the contents of particular header fields in + the request message or on other information pertaining to the request + (such as the network address of the client). + + Server-driven negotiation is advantageous when the algorithm for + selecting from among the available representations is difficult to + describe to the user agent, or when the server desires to send its + "best guess" to the client along with the first response (hoping to + avoid the round-trip delay of a subsequent request if the "best + guess" is good enough for the user). In order to improve the server's + guess, the user agent MAY include request header fields (Accept, + Accept-Language, Accept-Encoding, etc.) which describe its + preferences for such a response. + + Server-driven negotiation has disadvantages: + +1. It is impossible for the server to accurately determine what might be + "best" for any given user, since that would require complete + knowledge of both the capabilities of the user agent and the intended + use for the response (e.g., does the user want to view it on screen + or print it on paper?). + +2. Having the user agent describe its capabilities in every request can + be both very inefficient (given that only a small percentage of + responses have multiple representations) and a potential violation of + +Fielding, et. al. Standards Track [Page 68] + +RFC 2068 HTTP/1.1 January 1997 + + the user's privacy. + +3. It complicates the implementation of an origin server and the + algorithms for generating responses to a request. + +4. It may limit a public cache's ability to use the same response for + multiple user's requests. + + HTTP/1.1 includes the following request-header fields for enabling + server-driven negotiation through description of user agent + capabilities and user preferences: Accept (section 14.1), Accept- + Charset (section 14.2), Accept-Encoding (section 14.3), Accept- + Language (section 14.4), and User-Agent (section 14.42). However, an + origin server is not limited to these dimensions and MAY vary the + response based on any aspect of the request, including information + outside the request-header fields or within extension header fields + not defined by this specification. + + HTTP/1.1 origin servers MUST include an appropriate Vary header field + (section 14.43) in any cachable response based on server-driven + negotiation. The Vary header field describes the dimensions over + which the response might vary (i.e. the dimensions over which the + origin server picks its "best guess" response from multiple + representations). + + HTTP/1.1 public caches MUST recognize the Vary header field when it + is included in a response and obey the requirements described in + section 13.6 that describes the interactions between caching and + content negotiation. + +12.2 Agent-driven Negotiation + + With agent-driven negotiation, selection of the best representation + for a response is performed by the user agent after receiving an + initial response from the origin server. Selection is based on a list + of the available representations of the response included within the + header fields (this specification reserves the field-name Alternates, + as described in appendix 19.6.2.1) or entity-body of the initial + response, with each representation identified by its own URI. + Selection from among the representations may be performed + automatically (if the user agent is capable of doing so) or manually + by the user selecting from a generated (possibly hypertext) menu. + + Agent-driven negotiation is advantageous when the response would vary + over commonly-used dimensions (such as type, language, or encoding), + when the origin server is unable to determine a user agent's + capabilities from examining the request, and generally when public + caches are used to distribute server load and reduce network usage. + +Fielding, et. al. Standards Track [Page 69] + +RFC 2068 HTTP/1.1 January 1997 + + Agent-driven negotiation suffers from the disadvantage of needing a + second request to obtain the best alternate representation. This + second request is only efficient when caching is used. In addition, + this specification does not define any mechanism for supporting + automatic selection, though it also does not prevent any such + mechanism from being developed as an extension and used within + HTTP/1.1. + + HTTP/1.1 defines the 300 (Multiple Choices) and 406 (Not Acceptable) + status codes for enabling agent-driven negotiation when the server is + unwilling or unable to provide a varying response using server-driven + negotiation. + +12.3 Transparent Negotiation + + Transparent negotiation is a combination of both server-driven and + agent-driven negotiation. When a cache is supplied with a form of the + list of available representations of the response (as in agent-driven + negotiation) and the dimensions of variance are completely understood + by the cache, then the cache becomes capable of performing server- + driven negotiation on behalf of the origin server for subsequent + requests on that resource. + + Transparent negotiation has the advantage of distributing the + negotiation work that would otherwise be required of the origin + server and also removing the second request delay of agent-driven + negotiation when the cache is able to correctly guess the right + response. + + This specification does not define any mechanism for transparent + negotiation, though it also does not prevent any such mechanism from + being developed as an extension and used within HTTP/1.1. An HTTP/1.1 + cache performing transparent negotiation MUST include a Vary header + field in the response (defining the dimensions of its variance) if it + is cachable to ensure correct interoperation with all HTTP/1.1 + clients. The agent-driven negotiation information supplied by the + origin server SHOULD be included with the transparently negotiated + response. + +13 Caching in HTTP + + HTTP is typically used for distributed information systems, where + performance can be improved by the use of response caches. The + HTTP/1.1 protocol includes a number of elements intended to make + caching work as well as possible. Because these elements are + inextricable from other aspects of the protocol, and because they + interact with each other, it is useful to describe the basic caching + design of HTTP separately from the detailed descriptions of methods, + +Fielding, et. al. Standards Track [Page 70] + +RFC 2068 HTTP/1.1 January 1997 + + headers, response codes, etc. + + Caching would be useless if it did not significantly improve + performance. The goal of caching in HTTP/1.1 is to eliminate the need + to send requests in many cases, and to eliminate the need to send + full responses in many other cases. The former reduces the number of + network round-trips required for many operations; we use an + "expiration" mechanism for this purpose (see section 13.2). The + latter reduces network bandwidth requirements; we use a "validation" + mechanism for this purpose (see section 13.3). + + Requirements for performance, availability, and disconnected + operation require us to be able to relax the goal of semantic + transparency. The HTTP/1.1 protocol allows origin servers, caches, + and clients to explicitly reduce transparency when necessary. + However, because non-transparent operation may confuse non-expert + users, and may be incompatible with certain server applications (such + as those for ordering merchandise), the protocol requires that + transparency be relaxed + + o only by an explicit protocol-level request when relaxed by client + or origin server + + o only with an explicit warning to the end user when relaxed by cache + or client + +Fielding, et. al. Standards Track [Page 71] + +RFC 2068 HTTP/1.1 January 1997 + + Therefore, the HTTP/1.1 protocol provides these important elements: + + 1. Protocol features that provide full semantic transparency when this + is required by all parties. + + 2. Protocol features that allow an origin server or user agent to + explicitly request and control non-transparent operation. + + 3. Protocol features that allow a cache to attach warnings to + responses that do not preserve the requested approximation of + semantic transparency. + + A basic principle is that it must be possible for the clients to + detect any potential relaxation of semantic transparency. + + Note: The server, cache, or client implementer may be faced with + design decisions not explicitly discussed in this specification. If + a decision may affect semantic transparency, the implementer ought + to err on the side of maintaining transparency unless a careful and + complete analysis shows significant benefits in breaking + transparency. + +13.1.1 Cache Correctness + + A correct cache MUST respond to a request with the most up-to-date + response held by the cache that is appropriate to the request (see + sections 13.2.5, 13.2.6, and 13.12) which meets one of the following + conditions: + + 1. It has been checked for equivalence with what the origin server + would have returned by revalidating the response with the origin + server (section 13.3); + + 2. It is "fresh enough" (see section 13.2). In the default case, this + means it meets the least restrictive freshness requirement of the + client, server, and cache (see section 14.9); if the origin server + so specifies, it is the freshness requirement of the origin server + alone. + + 3. It includes a warning if the freshness demand of the client or the + origin server is violated (see section 13.1.5 and 14.45). + + 4. It is an appropriate 304 (Not Modified), 305 (Proxy Redirect), or + error (4xx or 5xx) response message. + + If the cache can not communicate with the origin server, then a + correct cache SHOULD respond as above if the response can be + correctly served from the cache; if not it MUST return an error or + +Fielding, et. al. Standards Track [Page 72] + +RFC 2068 HTTP/1.1 January 1997 + + warning indicating that there was a communication failure. + + If a cache receives a response (either an entire response, or a 304 + (Not Modified) response) that it would normally forward to the + requesting client, and the received response is no longer fresh, the + cache SHOULD forward it to the requesting client without adding a new + Warning (but without removing any existing Warning headers). A cache + SHOULD NOT attempt to revalidate a response simply because that + response became stale in transit; this might lead to an infinite + loop. An user agent that receives a stale response without a Warning + MAY display a warning indication to the user. + +13.1.2 Warnings + + Whenever a cache returns a response that is neither first-hand nor + "fresh enough" (in the sense of condition 2 in section 13.1.1), it + must attach a warning to that effect, using a Warning response- + header. This warning allows clients to take appropriate action. + + Warnings may be used for other purposes, both cache-related and + otherwise. The use of a warning, rather than an error status code, + distinguish these responses from true failures. + + Warnings are always cachable, because they never weaken the + transparency of a response. This means that warnings can be passed to + HTTP/1.0 caches without danger; such caches will simply pass the + warning along as an entity-header in the response. + + Warnings are assigned numbers between 0 and 99. This specification + defines the code numbers and meanings of each currently assigned + warnings, allowing a client or cache to take automated action in some + (but not all) cases. + + Warnings also carry a warning text. The text may be in any + appropriate natural language (perhaps based on the client's Accept + headers), and include an optional indication of what character set is + used. + + Multiple warnings may be attached to a response (either by the origin + server or by a cache), including multiple warnings with the same code + number. For example, a server may provide the same warning with texts + in both English and Basque. + + When multiple warnings are attached to a response, it may not be + practical or reasonable to display all of them to the user. This + version of HTTP does not specify strict priority rules for deciding + which warnings to display and in what order, but does suggest some + heuristics. + +Fielding, et. al. Standards Track [Page 73] + +RFC 2068 HTTP/1.1 January 1997 + + The Warning header and the currently defined warnings are described + in section 14.45. + +13.1.3 Cache-control Mechanisms + + The basic cache mechanisms in HTTP/1.1 (server-specified expiration + times and validators) are implicit directives to caches. In some + cases, a server or client may need to provide explicit directives to + the HTTP caches. We use the Cache-Control header for this purpose. + + The Cache-Control header allows a client or server to transmit a + variety of directives in either requests or responses. These + directives typically override the default caching algorithms. As a + general rule, if there is any apparent conflict between header + values, the most restrictive interpretation should be applied (that + is, the one that is most likely to preserve semantic transparency). + However, in some cases, Cache-Control directives are explicitly + specified as weakening the approximation of semantic transparency + (for example, "max-stale" or "public"). + + The Cache-Control directives are described in detail in section 14.9. + +13.1.4 Explicit User Agent Warnings + + Many user agents make it possible for users to override the basic + caching mechanisms. For example, the user agent may allow the user to + specify that cached entities (even explicitly stale ones) are never + validated. Or the user agent might habitually add "Cache-Control: + max-stale=3600" to every request. The user should have to explicitly + request either non-transparent behavior, or behavior that results in + abnormally ineffective caching. + + If the user has overridden the basic caching mechanisms, the user + agent should explicitly indicate to the user whenever this results in + the display of information that might not meet the server's + transparency requirements (in particular, if the displayed entity is + known to be stale). Since the protocol normally allows the user agent + to determine if responses are stale or not, this indication need only + be displayed when this actually happens. The indication need not be a + dialog box; it could be an icon (for example, a picture of a rotting + fish) or some other visual indicator. + + If the user has overridden the caching mechanisms in a way that would + abnormally reduce the effectiveness of caches, the user agent should + continually display an indication (for example, a picture of currency + in flames) so that the user does not inadvertently consume excess + resources or suffer from excessive latency. + +Fielding, et. al. Standards Track [Page 74] + +RFC 2068 HTTP/1.1 January 1997 + +13.1.5 Exceptions to the Rules and Warnings + + In some cases, the operator of a cache may choose to configure it to + return stale responses even when not requested by clients. This + decision should not be made lightly, but may be necessary for reasons + of availability or performance, especially when the cache is poorly + connected to the origin server. Whenever a cache returns a stale + response, it MUST mark it as such (using a Warning header). This + allows the client software to alert the user that there may be a + potential problem. + + It also allows the user agent to take steps to obtain a first-hand or + fresh response. For this reason, a cache SHOULD NOT return a stale + response if the client explicitly requests a first-hand or fresh one, + unless it is impossible to comply for technical or policy reasons. + +13.1.6 Client-controlled Behavior + + While the origin server (and to a lesser extent, intermediate caches, + by their contribution to the age of a response) are the primary + source of expiration information, in some cases the client may need + to control a cache's decision about whether to return a cached + response without validating it. Clients do this using several + directives of the Cache-Control header. + + A client's request may specify the maximum age it is willing to + accept of an unvalidated response; specifying a value of zero forces + the cache(s) to revalidate all responses. A client may also specify + the minimum time remaining before a response expires. Both of these + options increase constraints on the behavior of caches, and so cannot + further relax the cache's approximation of semantic transparency. + + A client may also specify that it will accept stale responses, up to + some maximum amount of staleness. This loosens the constraints on the + caches, and so may violate the origin server's specified constraints + on semantic transparency, but may be necessary to support + disconnected operation, or high availability in the face of poor + connectivity. + +13.2 Expiration Model + +13.2.1 Server-Specified Expiration + + HTTP caching works best when caches can entirely avoid making + requests to the origin server. The primary mechanism for avoiding + requests is for an origin server to provide an explicit expiration + time in the future, indicating that a response may be used to satisfy + subsequent requests. In other words, a cache can return a fresh + +Fielding, et. al. Standards Track [Page 75] + +RFC 2068 HTTP/1.1 January 1997 + + response without first contacting the server. + + Our expectation is that servers will assign future explicit + expiration times to responses in the belief that the entity is not + likely to change, in a semantically significant way, before the + expiration time is reached. This normally preserves semantic + transparency, as long as the server's expiration times are carefully + chosen. + + The expiration mechanism applies only to responses taken from a cache + and not to first-hand responses forwarded immediately to the + requesting client. + + If an origin server wishes to force a semantically transparent cache + to validate every request, it may assign an explicit expiration time + in the past. This means that the response is always stale, and so the + cache SHOULD validate it before using it for subsequent requests. See + section 14.9.4 for a more restrictive way to force revalidation. + + If an origin server wishes to force any HTTP/1.1 cache, no matter how + it is configured, to validate every request, it should use the + "must-revalidate" Cache-Control directive (see section 14.9). + + Servers specify explicit expiration times using either the Expires + header, or the max-age directive of the Cache-Control header. + + An expiration time cannot be used to force a user agent to refresh + its display or reload a resource; its semantics apply only to caching + mechanisms, and such mechanisms need only check a resource's + expiration status when a new request for that resource is initiated. + See section 13.13 for explanation of the difference between caches + and history mechanisms. + +13.2.2 Heuristic Expiration + + Since origin servers do not always provide explicit expiration times, + HTTP caches typically assign heuristic expiration times, employing + algorithms that use other header values (such as the Last-Modified + time) to estimate a plausible expiration time. The HTTP/1.1 + specification does not provide specific algorithms, but does impose + worst-case constraints on their results. Since heuristic expiration + times may compromise semantic transparency, they should be used + cautiously, and we encourage origin servers to provide explicit + expiration times as much as possible. + +Fielding, et. al. Standards Track [Page 76] + +RFC 2068 HTTP/1.1 January 1997 + +13.2.3 Age Calculations + + In order to know if a cached entry is fresh, a cache needs to know if + its age exceeds its freshness lifetime. We discuss how to calculate + the latter in section 13.2.4; this section describes how to calculate + the age of a response or cache entry. + + In this discussion, we use the term "now" to mean "the current value + of the clock at the host performing the calculation." Hosts that use + HTTP, but especially hosts running origin servers and caches, should + use NTP [28] or some similar protocol to synchronize their clocks to + a globally accurate time standard. + + Also note that HTTP/1.1 requires origin servers to send a Date header + with every response, giving the time at which the response was + generated. We use the term "date_value" to denote the value of the + Date header, in a form appropriate for arithmetic operations. + + HTTP/1.1 uses the Age response-header to help convey age information + between caches. The Age header value is the sender's estimate of the + amount of time since the response was generated at the origin server. + In the case of a cached response that has been revalidated with the + origin server, the Age value is based on the time of revalidation, + not of the original response. + + In essence, the Age value is the sum of the time that the response + has been resident in each of the caches along the path from the + origin server, plus the amount of time it has been in transit along + network paths. + + We use the term "age_value" to denote the value of the Age header, in + a form appropriate for arithmetic operations. + + A response's age can be calculated in two entirely independent ways: + + 1. now minus date_value, if the local clock is reasonably well + synchronized to the origin server's clock. If the result is + negative, the result is replaced by zero. + + 2. age_value, if all of the caches along the response path + implement HTTP/1.1. + + Given that we have two independent ways to compute the age of a + response when it is received, we can combine these as + + corrected_received_age = max(now - date_value, age_value) + + and as long as we have either nearly synchronized clocks or all- + +Fielding, et. al. Standards Track [Page 77] + +RFC 2068 HTTP/1.1 January 1997 + + HTTP/1.1 paths, one gets a reliable (conservative) result. + + Note that this correction is applied at each HTTP/1.1 cache along the + path, so that if there is an HTTP/1.0 cache in the path, the correct + received age is computed as long as the receiving cache's clock is + nearly in sync. We don't need end-to-end clock synchronization + (although it is good to have), and there is no explicit clock + synchronization step. + + Because of network-imposed delays, some significant interval may pass + from the time that a server generates a response and the time it is + received at the next outbound cache or client. If uncorrected, this + delay could result in improperly low ages. + + Because the request that resulted in the returned Age value must have + been initiated prior to that Age value's generation, we can correct + for delays imposed by the network by recording the time at which the + request was initiated. Then, when an Age value is received, it MUST + be interpreted relative to the time the request was initiated, not + the time that the response was received. This algorithm results in + conservative behavior no matter how much delay is experienced. So, we + compute: + + corrected_initial_age = corrected_received_age + + (now - request_time) + + where "request_time" is the time (according to the local clock) when + the request that elicited this response was sent. + + Summary of age calculation algorithm, when a cache receives a + response: + + /* + * age_value + * is the value of Age: header received by the cache with + * this response. + * date_value + * is the value of the origin server's Date: header + * request_time + * is the (local) time when the cache made the request + * that resulted in this cached response + * response_time + * is the (local) time when the cache received the + * response + * now + * is the current (local) time + */ + apparent_age = max(0, response_time - date_value); + +Fielding, et. al. Standards Track [Page 78] + +RFC 2068 HTTP/1.1 January 1997 + + corrected_received_age = max(apparent_age, age_value); + response_delay = response_time - request_time; + corrected_initial_age = corrected_received_age + response_delay; + resident_time = now - response_time; + current_age = corrected_initial_age + resident_time; + + When a cache sends a response, it must add to the + corrected_initial_age the amount of time that the response was + resident locally. It must then transmit this total age, using the Age + header, to the next recipient cache. + + Note that a client cannot reliably tell that a response is first- + hand, but the presence of an Age header indicates that a response + is definitely not first-hand. Also, if the Date in a response is + earlier than the client's local request time, the response is + probably not first-hand (in the absence of serious clock skew). + +13.2.4 Expiration Calculations + + In order to decide whether a response is fresh or stale, we need to + compare its freshness lifetime to its age. The age is calculated as + described in section 13.2.3; this section describes how to calculate + the freshness lifetime, and to determine if a response has expired. + In the discussion below, the values can be represented in any form + appropriate for arithmetic operations. + + We use the term "expires_value" to denote the value of the Expires + header. We use the term "max_age_value" to denote an appropriate + value of the number of seconds carried by the max-age directive of + the Cache-Control header in a response (see section 14.10. + + The max-age directive takes priority over Expires, so if max-age is + present in a response, the calculation is simply: + + freshness_lifetime = max_age_value + + Otherwise, if Expires is present in the response, the calculation is: + + freshness_lifetime = expires_value - date_value + + Note that neither of these calculations is vulnerable to clock skew, + since all of the information comes from the origin server. + + If neither Expires nor Cache-Control: max-age appears in the + response, and the response does not include other restrictions on + caching, the cache MAY compute a freshness lifetime using a + heuristic. If the value is greater than 24 hours, the cache must + attach Warning 13 to any response whose age is more than 24 hours if + +Fielding, et. al. Standards Track [Page 79] + +RFC 2068 HTTP/1.1 January 1997 + + such warning has not already been added. + + Also, if the response does have a Last-Modified time, the heuristic + expiration value SHOULD be no more than some fraction of the interval + since that time. A typical setting of this fraction might be 10%. + + The calculation to determine if a response has expired is quite + simple: + + response_is_fresh = (freshness_lifetime > current_age) + +13.2.5 Disambiguating Expiration Values + + Because expiration values are assigned optimistically, it is possible + for two caches to contain fresh values for the same resource that are + different. + + If a client performing a retrieval receives a non-first-hand response + for a request that was already fresh in its own cache, and the Date + header in its existing cache entry is newer than the Date on the new + response, then the client MAY ignore the response. If so, it MAY + retry the request with a "Cache-Control: max-age=0" directive (see + section 14.9), to force a check with the origin server. + + If a cache has two fresh responses for the same representation with + different validators, it MUST use the one with the more recent Date + header. This situation may arise because the cache is pooling + responses from other caches, or because a client has asked for a + reload or a revalidation of an apparently fresh cache entry. + +13.2.6 Disambiguating Multiple Responses + + Because a client may be receiving responses via multiple paths, so + that some responses flow through one set of caches and other + responses flow through a different set of caches, a client may + receive responses in an order different from that in which the origin + server sent them. We would like the client to use the most recently + generated response, even if older responses are still apparently + fresh. + + Neither the entity tag nor the expiration value can impose an + ordering on responses, since it is possible that a later response + intentionally carries an earlier expiration time. However, the + HTTP/1.1 specification requires the transmission of Date headers on + every response, and the Date values are ordered to a granularity of + one second. + +Fielding, et. al. Standards Track [Page 80] + +RFC 2068 HTTP/1.1 January 1997 + + When a client tries to revalidate a cache entry, and the response it + receives contains a Date header that appears to be older than the one + for the existing entry, then the client SHOULD repeat the request + unconditionally, and include + + Cache-Control: max-age=0 + + to force any intermediate caches to validate their copies directly + with the origin server, or + + Cache-Control: no-cache + + to force any intermediate caches to obtain a new copy from the origin + server. + + If the Date values are equal, then the client may use either response + (or may, if it is being extremely prudent, request a new response). + Servers MUST NOT depend on clients being able to choose + deterministically between responses generated during the same second, + if their expiration times overlap. + +13.3 Validation Model + + When a cache has a stale entry that it would like to use as a + response to a client's request, it first has to check with the origin + server (or possibly an intermediate cache with a fresh response) to + see if its cached entry is still usable. We call this "validating" + the cache entry. Since we do not want to have to pay the overhead of + retransmitting the full response if the cached entry is good, and we + do not want to pay the overhead of an extra round trip if the cached + entry is invalid, the HTTP/1.1 protocol supports the use of + conditional methods. + + The key protocol features for supporting conditional methods are + those concerned with "cache validators." When an origin server + generates a full response, it attaches some sort of validator to it, + which is kept with the cache entry. When a client (user agent or + proxy cache) makes a conditional request for a resource for which it + has a cache entry, it includes the associated validator in the + request. + + The server then checks that validator against the current validator + for the entity, and, if they match, it responds with a special status + code (usually, 304 (Not Modified)) and no entity-body. Otherwise, it + returns a full response (including entity-body). Thus, we avoid + transmitting the full response if the validator matches, and we avoid + an extra round trip if it does not match. + +Fielding, et. al. Standards Track [Page 81] + +RFC 2068 HTTP/1.1 January 1997 + + Note: the comparison functions used to decide if validators match + are defined in section 13.3.3. + + In HTTP/1.1, a conditional request looks exactly the same as a normal + request for the same resource, except that it carries a special + header (which includes the validator) that implicitly turns the + method (usually, GET) into a conditional. + + The protocol includes both positive and negative senses of cache- + validating conditions. That is, it is possible to request either that + a method be performed if and only if a validator matches or if and + only if no validators match. + + Note: a response that lacks a validator may still be cached, and + served from cache until it expires, unless this is explicitly + prohibited by a Cache-Control directive. However, a cache cannot do + a conditional retrieval if it does not have a validator for the + entity, which means it will not be refreshable after it expires. + +13.3.1 Last-modified Dates + + The Last-Modified entity-header field value is often used as a cache + validator. In simple terms, a cache entry is considered to be valid + if the entity has not been modified since the Last-Modified value. + +13.3.2 Entity Tag Cache Validators + + The ETag entity-header field value, an entity tag, provides for an + "opaque" cache validator. This may allow more reliable validation in + situations where it is inconvenient to store modification dates, + where the one-second resolution of HTTP date values is not + sufficient, or where the origin server wishes to avoid certain + paradoxes that may arise from the use of modification dates. + + Entity Tags are described in section 3.11. The headers used with + entity tags are described in sections 14.20, 14.25, 14.26 and 14.43. + +13.3.3 Weak and Strong Validators + + Since both origin servers and caches will compare two validators to + decide if they represent the same or different entities, one normally + would expect that if the entity (the entity-body or any entity- + headers) changes in any way, then the associated validator would + change as well. If this is true, then we call this validator a + "strong validator." + + However, there may be cases when a server prefers to change the + validator only on semantically significant changes, and not when + +Fielding, et. al. Standards Track [Page 82] + +RFC 2068 HTTP/1.1 January 1997 + + insignificant aspects of the entity change. A validator that does not + always change when the resource changes is a "weak validator." + + Entity tags are normally "strong validators," but the protocol + provides a mechanism to tag an entity tag as "weak." One can think of + a strong validator as one that changes whenever the bits of an entity + changes, while a weak value changes whenever the meaning of an entity + changes. Alternatively, one can think of a strong validator as part + of an identifier for a specific entity, while a weak validator is + part of an identifier for a set of semantically equivalent entities. + + Note: One example of a strong validator is an integer that is + incremented in stable storage every time an entity is changed. + + An entity's modification time, if represented with one-second + resolution, could be a weak validator, since it is possible that + the resource may be modified twice during a single second. + + Support for weak validators is optional; however, weak validators + allow for more efficient caching of equivalent objects; for + example, a hit counter on a site is probably good enough if it is + updated every few days or weeks, and any value during that period + is likely "good enough" to be equivalent. + + A "use" of a validator is either when a client generates a request + and includes the validator in a validating header field, or when a + server compares two validators. + + Strong validators are usable in any context. Weak validators are only + usable in contexts that do not depend on exact equality of an entity. + For example, either kind is usable for a conditional GET of a full + entity. However, only a strong validator is usable for a sub-range + retrieval, since otherwise the client may end up with an internally + inconsistent entity. + + The only function that the HTTP/1.1 protocol defines on validators is + comparison. There are two validator comparison functions, depending + on whether the comparison context allows the use of weak validators + or not: + + o The strong comparison function: in order to be considered equal, + both validators must be identical in every way, and neither may be + weak. + o The weak comparison function: in order to be considered equal, both + validators must be identical in every way, but either or both of + them may be tagged as "weak" without affecting the result. + + The weak comparison function MAY be used for simple (non-subrange) + +Fielding, et. al. Standards Track [Page 83] + +RFC 2068 HTTP/1.1 January 1997 + + GET requests. The strong comparison function MUST be used in all + other cases. + + An entity tag is strong unless it is explicitly tagged as weak. + Section 3.11 gives the syntax for entity tags. + + A Last-Modified time, when used as a validator in a request, is + implicitly weak unless it is possible to deduce that it is strong, + using the following rules: + + o The validator is being compared by an origin server to the actual + current validator for the entity and, + o That origin server reliably knows that the associated entity did + not change twice during the second covered by the presented + validator. +or + + o The validator is about to be used by a client in an If-Modified- + Since or If-Unmodified-Since header, because the client has a cache + entry for the associated entity, and + o That cache entry includes a Date value, which gives the time when + the origin server sent the original response, and + o The presented Last-Modified time is at least 60 seconds before the + Date value. +or + + o The validator is being compared by an intermediate cache to the + validator stored in its cache entry for the entity, and + o That cache entry includes a Date value, which gives the time when + the origin server sent the original response, and + o The presented Last-Modified time is at least 60 seconds before the + Date value. + + This method relies on the fact that if two different responses were + sent by the origin server during the same second, but both had the + same Last-Modified time, then at least one of those responses would + have a Date value equal to its Last-Modified time. The arbitrary 60- + second limit guards against the possibility that the Date and Last- + Modified values are generated from different clocks, or at somewhat + different times during the preparation of the response. An + implementation may use a value larger than 60 seconds, if it is + believed that 60 seconds is too short. + + If a client wishes to perform a sub-range retrieval on a value for + which it has only a Last-Modified time and no opaque validator, it + may do this only if the Last-Modified time is strong in the sense + described here. + +Fielding, et. al. Standards Track [Page 84] + +RFC 2068 HTTP/1.1 January 1997 + + A cache or origin server receiving a cache-conditional request, other + than a full-body GET request, MUST use the strong comparison function + to evaluate the condition. + + These rules allow HTTP/1.1 caches and clients to safely perform sub- + range retrievals on values that have been obtained from HTTP/1.0 + servers. + +13.3.4 Rules for When to Use Entity Tags and Last-modified Dates + + We adopt a set of rules and recommendations for origin servers, + clients, and caches regarding when various validator types should be + used, and for what purposes. + + HTTP/1.1 origin servers: + + o SHOULD send an entity tag validator unless it is not feasible to + generate one. + o MAY send a weak entity tag instead of a strong entity tag, if + performance considerations support the use of weak entity tags, or + if it is unfeasible to send a strong entity tag. + o SHOULD send a Last-Modified value if it is feasible to send one, + unless the risk of a breakdown in semantic transparency that could + result from using this date in an If-Modified-Since header would + lead to serious problems. + + In other words, the preferred behavior for an HTTP/1.1 origin server + is to send both a strong entity tag and a Last-Modified value. + + In order to be legal, a strong entity tag MUST change whenever the + associated entity value changes in any way. A weak entity tag SHOULD + change whenever the associated entity changes in a semantically + significant way. + + Note: in order to provide semantically transparent caching, an + origin server must avoid reusing a specific strong entity tag value + for two different entities, or reusing a specific weak entity tag + value for two semantically different entities. Cache entries may + persist for arbitrarily long periods, regardless of expiration + times, so it may be inappropriate to expect that a cache will never + again attempt to validate an entry using a validator that it + obtained at some point in the past. + + HTTP/1.1 clients: + + o If an entity tag has been provided by the origin server, MUST + use that entity tag in any cache-conditional request (using + If-Match or If-None-Match). + +Fielding, et. al. Standards Track [Page 85] + +RFC 2068 HTTP/1.1 January 1997 + + o If only a Last-Modified value has been provided by the origin + server, SHOULD use that value in non-subrange cache-conditional + requests (using If-Modified-Since). + o If only a Last-Modified value has been provided by an HTTP/1.0 + origin server, MAY use that value in subrange cache-conditional + requests (using If-Unmodified-Since:). The user agent should + provide a way to disable this, in case of difficulty. + o If both an entity tag and a Last-Modified value have been + provided by the origin server, SHOULD use both validators in + cache-conditional requests. This allows both HTTP/1.0 and + HTTP/1.1 caches to respond appropriately. + + An HTTP/1.1 cache, upon receiving a request, MUST use the most + restrictive validator when deciding whether the client's cache entry + matches the cache's own cache entry. This is only an issue when the + request contains both an entity tag and a last-modified-date + validator (If-Modified-Since or If-Unmodified-Since). + + A note on rationale: The general principle behind these rules is + that HTTP/1.1 servers and clients should transmit as much non- + redundant information as is available in their responses and + requests. HTTP/1.1 systems receiving this information will make the + most conservative assumptions about the validators they receive. + + HTTP/1.0 clients and caches will ignore entity tags. Generally, + last-modified values received or used by these systems will support + transparent and efficient caching, and so HTTP/1.1 origin servers + should provide Last-Modified values. In those rare cases where the + use of a Last-Modified value as a validator by an HTTP/1.0 system + could result in a serious problem, then HTTP/1.1 origin servers + should not provide one. + +13.3.5 Non-validating Conditionals + + The principle behind entity tags is that only the service author + knows the semantics of a resource well enough to select an + appropriate cache validation mechanism, and the specification of any + validator comparison function more complex than byte-equality would + open up a can of worms. Thus, comparisons of any other headers + (except Last-Modified, for compatibility with HTTP/1.0) are never + used for purposes of validating a cache entry. + +13.4 Response Cachability + + Unless specifically constrained by a Cache-Control (section 14.9) + directive, a caching system may always store a successful response + (see section 13.8) as a cache entry, may return it without validation + if it is fresh, and may return it after successful validation. If + +Fielding, et. al. Standards Track [Page 86] + +RFC 2068 HTTP/1.1 January 1997 + + there is neither a cache validator nor an explicit expiration time + associated with a response, we do not expect it to be cached, but + certain caches may violate this expectation (for example, when little + or no network connectivity is available). A client can usually detect + that such a response was taken from a cache by comparing the Date + header to the current time. + + Note that some HTTP/1.0 caches are known to violate this + expectation without providing any Warning. + + However, in some cases it may be inappropriate for a cache to retain + an entity, or to return it in response to a subsequent request. This + may be because absolute semantic transparency is deemed necessary by + the service author, or because of security or privacy considerations. + Certain Cache-Control directives are therefore provided so that the + server can indicate that certain resource entities, or portions + thereof, may not be cached regardless of other considerations. + + Note that section 14.8 normally prevents a shared cache from saving + and returning a response to a previous request if that request + included an Authorization header. + + A response received with a status code of 200, 203, 206, 300, 301 or + 410 may be stored by a cache and used in reply to a subsequent + request, subject to the expiration mechanism, unless a Cache-Control + directive prohibits caching. However, a cache that does not support + the Range and Content-Range headers MUST NOT cache 206 (Partial + Content) responses. + + A response received with any other status code MUST NOT be returned + in a reply to a subsequent request unless there are Cache-Control + directives or another header(s) that explicitly allow it. For + example, these include the following: an Expires header (section + 14.21); a "max-age", "must-revalidate", "proxy-revalidate", "public" + or "private" Cache-Control directive (section 14.9). + +13.5 Constructing Responses From Caches + + The purpose of an HTTP cache is to store information received in + response to requests, for use in responding to future requests. In + many cases, a cache simply returns the appropriate parts of a + response to the requester. However, if the cache holds a cache entry + based on a previous response, it may have to combine parts of a new + response with what is held in the cache entry. + +Fielding, et. al. Standards Track [Page 87] + +RFC 2068 HTTP/1.1 January 1997 + +13.5.1 End-to-end and Hop-by-hop Headers + + For the purpose of defining the behavior of caches and non-caching + proxies, we divide HTTP headers into two categories: + + o End-to-end headers, which must be transmitted to the + ultimate recipient of a request or response. End-to-end + headers in responses must be stored as part of a cache entry + and transmitted in any response formed from a cache entry. + o Hop-by-hop headers, which are meaningful only for a single + transport-level connection, and are not stored by caches or + forwarded by proxies. + + The following HTTP/1.1 headers are hop-by-hop headers: + + o Connection + o Keep-Alive + o Public + o Proxy-Authenticate + o Transfer-Encoding + o Upgrade + + All other headers defined by HTTP/1.1 are end-to-end headers. + + Hop-by-hop headers introduced in future versions of HTTP MUST be + listed in a Connection header, as described in section 14.10. + +13.5.2 Non-modifiable Headers + + Some features of the HTTP/1.1 protocol, such as Digest + Authentication, depend on the value of certain end-to-end headers. A + cache or non-caching proxy SHOULD NOT modify an end-to-end header + unless the definition of that header requires or specifically allows + that. + + A cache or non-caching proxy MUST NOT modify any of the following + fields in a request or response, nor may it add any of these fields + if not already present: + + o Content-Location + o ETag + o Expires + o Last-Modified + +Fielding, et. al. Standards Track [Page 88] + +RFC 2068 HTTP/1.1 January 1997 + + A cache or non-caching proxy MUST NOT modify or add any of the + following fields in a response that contains the no-transform Cache- + Control directive, or in any request: + + o Content-Encoding + o Content-Length + o Content-Range + o Content-Type + + A cache or non-caching proxy MAY modify or add these fields in a + response that does not include no-transform, but if it does so, it + MUST add a Warning 14 (Transformation applied) if one does not + already appear in the response. + + Warning: unnecessary modification of end-to-end headers may cause + authentication failures if stronger authentication mechanisms are + introduced in later versions of HTTP. Such authentication + mechanisms may rely on the values of header fields not listed here. + +13.5.3 Combining Headers + + When a cache makes a validating request to a server, and the server + provides a 304 (Not Modified) response, the cache must construct a + response to send to the requesting client. The cache uses the + entity-body stored in the cache entry as the entity-body of this + outgoing response. The end-to-end headers stored in the cache entry + are used for the constructed response, except that any end-to-end + headers provided in the 304 response MUST replace the corresponding + headers from the cache entry. Unless the cache decides to remove the + cache entry, it MUST also replace the end-to-end headers stored with + the cache entry with corresponding headers received in the incoming + response. + + In other words, the set of end-to-end headers received in the + incoming response overrides all corresponding end-to-end headers + stored with the cache entry. The cache may add Warning headers (see + section 14.45) to this set. + + If a header field-name in the incoming response matches more than one + header in the cache entry, all such old headers are replaced. + + Note: this rule allows an origin server to use a 304 (Not Modified) + response to update any header associated with a previous response + for the same entity, although it might not always be meaningful or + correct to do so. This rule does not allow an origin server to use + a 304 (not Modified) response to entirely delete a header that it + had provided with a previous response. + +Fielding, et. al. Standards Track [Page 89] + +RFC 2068 HTTP/1.1 January 1997 + +13.5.4 Combining Byte Ranges + + A response may transfer only a subrange of the bytes of an entity- + body, either because the request included one or more Range + specifications, or because a connection was broken prematurely. After + several such transfers, a cache may have received several ranges of + the same entity-body. + + If a cache has a stored non-empty set of subranges for an entity, and + an incoming response transfers another subrange, the cache MAY + combine the new subrange with the existing set if both the following + conditions are met: + + o Both the incoming response and the cache entry must have a cache + validator. + o The two cache validators must match using the strong comparison + function (see section 13.3.3). + + If either requirement is not meant, the cache must use only the most + recent partial response (based on the Date values transmitted with + every response, and using the incoming response if these values are + equal or missing), and must discard the other partial information. + +13.6 Caching Negotiated Responses + + Use of server-driven content negotiation (section 12), as indicated + by the presence of a Vary header field in a response, alters the + conditions and procedure by which a cache can use the response for + subsequent requests. + + A server MUST use the Vary header field (section 14.43) to inform a + cache of what header field dimensions are used to select among + multiple representations of a cachable response. A cache may use the + selected representation (the entity included with that particular + response) for replying to subsequent requests on that resource only + when the subsequent requests have the same or equivalent values for + all header fields specified in the Vary response-header. Requests + with a different value for one or more of those header fields would + be forwarded toward the origin server. + + If an entity tag was assigned to the representation, the forwarded + request SHOULD be conditional and include the entity tags in an If- + None-Match header field from all its cache entries for the Request- + URI. This conveys to the server the set of entities currently held by + the cache, so that if any one of these entities matches the requested + entity, the server can use the ETag header in its 304 (Not Modified) + response to tell the cache which entry is appropriate. If the + entity-tag of the new response matches that of an existing entry, the + +Fielding, et. al. Standards Track [Page 90] + +RFC 2068 HTTP/1.1 January 1997 + + new response SHOULD be used to update the header fields of the + existing entry, and the result MUST be returned to the client. + + The Vary header field may also inform the cache that the + representation was selected using criteria not limited to the + request-headers; in this case, a cache MUST NOT use the response in a + reply to a subsequent request unless the cache relays the new request + to the origin server in a conditional request and the server responds + with 304 (Not Modified), including an entity tag or Content-Location + that indicates which entity should be used. + + If any of the existing cache entries contains only partial content + for the associated entity, its entity-tag SHOULD NOT be included in + the If-None-Match header unless the request is for a range that would + be fully satisfied by that entry. + + If a cache receives a successful response whose Content-Location + field matches that of an existing cache entry for the same Request- + URI, whose entity-tag differs from that of the existing entry, and + whose Date is more recent than that of the existing entry, the + existing entry SHOULD NOT be returned in response to future requests, + and should be deleted from the cache. + +13.7 Shared and Non-Shared Caches + + For reasons of security and privacy, it is necessary to make a + distinction between "shared" and "non-shared" caches. A non-shared + cache is one that is accessible only to a single user. Accessibility + in this case SHOULD be enforced by appropriate security mechanisms. + All other caches are considered to be "shared." Other sections of + this specification place certain constraints on the operation of + shared caches in order to prevent loss of privacy or failure of + access controls. + +13.8 Errors or Incomplete Response Cache Behavior + + A cache that receives an incomplete response (for example, with fewer + bytes of data than specified in a Content-Length header) may store + the response. However, the cache MUST treat this as a partial + response. Partial responses may be combined as described in section + 13.5.4; the result might be a full response or might still be + partial. A cache MUST NOT return a partial response to a client + without explicitly marking it as such, using the 206 (Partial + Content) status code. A cache MUST NOT return a partial response + using a status code of 200 (OK). + + If a cache receives a 5xx response while attempting to revalidate an + entry, it may either forward this response to the requesting client, + +Fielding, et. al. Standards Track [Page 91] + +RFC 2068 HTTP/1.1 January 1997 + + or act as if the server failed to respond. In the latter case, it MAY + return a previously received response unless the cached entry + includes the "must-revalidate" Cache-Control directive (see section + 14.9). + +13.9 Side Effects of GET and HEAD + + Unless the origin server explicitly prohibits the caching of their + responses, the application of GET and HEAD methods to any resources + SHOULD NOT have side effects that would lead to erroneous behavior if + these responses are taken from a cache. They may still have side + effects, but a cache is not required to consider such side effects in + its caching decisions. Caches are always expected to observe an + origin server's explicit restrictions on caching. + + We note one exception to this rule: since some applications have + traditionally used GETs and HEADs with query URLs (those containing a + "?" in the rel_path part) to perform operations with significant side + effects, caches MUST NOT treat responses to such URLs as fresh unless + the server provides an explicit expiration time. This specifically + means that responses from HTTP/1.0 servers for such URIs should not + be taken from a cache. See section 9.1.1 for related information. + +13.10 Invalidation After Updates or Deletions + + The effect of certain methods at the origin server may cause one or + more existing cache entries to become non-transparently invalid. That + is, although they may continue to be "fresh," they do not accurately + reflect what the origin server would return for a new request. + + There is no way for the HTTP protocol to guarantee that all such + cache entries are marked invalid. For example, the request that + caused the change at the origin server may not have gone through the + proxy where a cache entry is stored. However, several rules help + reduce the likelihood of erroneous behavior. + + In this section, the phrase "invalidate an entity" means that the + cache should either remove all instances of that entity from its + storage, or should mark these as "invalid" and in need of a mandatory + revalidation before they can be returned in response to a subsequent + request. + +Fielding, et. al. Standards Track [Page 92] + +RFC 2068 HTTP/1.1 January 1997 + + Some HTTP methods may invalidate an entity. This is either the entity + referred to by the Request-URI, or by the Location or Content- + Location response-headers (if present). These methods are: + + o PUT + o DELETE + o POST + + In order to prevent denial of service attacks, an invalidation based + on the URI in a Location or Content-Location header MUST only be + performed if the host part is the same as in the Request-URI. + +13.11 Write-Through Mandatory + + All methods that may be expected to cause modifications to the origin + server's resources MUST be written through to the origin server. This + currently includes all methods except for GET and HEAD. A cache MUST + NOT reply to such a request from a client before having transmitted + the request to the inbound server, and having received a + corresponding response from the inbound server. This does not prevent + a cache from sending a 100 (Continue) response before the inbound + server has replied. + + The alternative (known as "write-back" or "copy-back" caching) is not + allowed in HTTP/1.1, due to the difficulty of providing consistent + updates and the problems arising from server, cache, or network + failure prior to write-back. + +13.12 Cache Replacement + + If a new cachable (see sections 14.9.2, 13.2.5, 13.2.6 and 13.8) + response is received from a resource while any existing responses for + the same resource are cached, the cache SHOULD use the new response + to reply to the current request. It may insert it into cache storage + and may, if it meets all other requirements, use it to respond to any + future requests that would previously have caused the old response to + be returned. If it inserts the new response into cache storage it + should follow the rules in section 13.5.3. + + Note: a new response that has an older Date header value than + existing cached responses is not cachable. + +13.13 History Lists + + User agents often have history mechanisms, such as "Back" buttons and + history lists, which can be used to redisplay an entity retrieved + earlier in a session. + +Fielding, et. al. Standards Track [Page 93] + +RFC 2068 HTTP/1.1 January 1997 + + History mechanisms and caches are different. In particular history + mechanisms SHOULD NOT try to show a semantically transparent view of + the current state of a resource. Rather, a history mechanism is meant + to show exactly what the user saw at the time when the resource was + retrieved. + + By default, an expiration time does not apply to history mechanisms. + If the entity is still in storage, a history mechanism should display + it even if the entity has expired, unless the user has specifically + configured the agent to refresh expired history documents. + + This should not be construed to prohibit the history mechanism from + telling the user that a view may be stale. + + Note: if history list mechanisms unnecessarily prevent users from + viewing stale resources, this will tend to force service authors to + avoid using HTTP expiration controls and cache controls when they + would otherwise like to. Service authors may consider it important + that users not be presented with error messages or warning messages + when they use navigation controls (such as BACK) to view previously + fetched resources. Even though sometimes such resources ought not + to cached, or ought to expire quickly, user interface + considerations may force service authors to resort to other means + of preventing caching (e.g. "once-only" URLs) in order not to + suffer the effects of improperly functioning history mechanisms. + +14 Header Field Definitions + + This section defines the syntax and semantics of all standard + HTTP/1.1 header fields. For entity-header fields, both sender and + recipient refer to either the client or the server, depending on who + sends and who receives the entity. + +Fielding, et. al. Standards Track [Page 94] + +RFC 2068 HTTP/1.1 January 1997 + +14.1 Accept + + The Accept request-header field can be used to specify certain media + types which are acceptable for the response. Accept headers can be + used to indicate that the request is specifically limited to a small + set of desired types, as in the case of a request for an in-line + image. + + Accept = "Accept" ":" + #( media-range [ accept-params ] ) + + media-range = ( "*/*" + | ( type "/" "*" ) + | ( type "/" subtype ) + ) *( ";" parameter ) + + accept-params = ";" "q" "=" qvalue *( accept-extension ) + + accept-extension = ";" token [ "=" ( token | quoted-string ) ] + + The asterisk "*" character is used to group media types into ranges, + with "*/*" indicating all media types and "type/*" indicating all + subtypes of that type. The media-range MAY include media type + parameters that are applicable to that range. + + Each media-range MAY be followed by one or more accept-params, + beginning with the "q" parameter for indicating a relative quality + factor. The first "q" parameter (if any) separates the media-range + parameter(s) from the accept-params. Quality factors allow the user + or user agent to indicate the relative degree of preference for that + media-range, using the qvalue scale from 0 to 1 (section 3.9). The + default value is q=1. + + Note: Use of the "q" parameter name to separate media type + parameters from Accept extension parameters is due to historical + practice. Although this prevents any media type parameter named + "q" from being used with a media range, such an event is believed + to be unlikely given the lack of any "q" parameters in the IANA + media type registry and the rare usage of any media type parameters + in Accept. Future media types should be discouraged from + registering any parameter named "q". + + The example + + Accept: audio/*; q=0.2, audio/basic + + SHOULD be interpreted as "I prefer audio/basic, but send me any audio + type if it is the best available after an 80% mark-down in quality." + +Fielding, et. al. Standards Track [Page 95] + +RFC 2068 HTTP/1.1 January 1997 + + If no Accept header field is present, then it is assumed that the + client accepts all media types. If an Accept header field is present, + and if the server cannot send a response which is acceptable + according to the combined Accept field value, then the server SHOULD + send a 406 (not acceptable) response. + + A more elaborate example is + + Accept: text/plain; q=0.5, text/html, + text/x-dvi; q=0.8, text/x-c + + Verbally, this would be interpreted as "text/html and text/x-c are + the preferred media types, but if they do not exist, then send the + text/x-dvi entity, and if that does not exist, send the text/plain + entity." + + Media ranges can be overridden by more specific media ranges or + specific media types. If more than one media range applies to a given + type, the most specific reference has precedence. For example, + + Accept: text/*, text/html, text/html;level=1, */* + + have the following precedence: + + 1) text/html;level=1 + 2) text/html + 3) text/* + 4) */* + + The media type quality factor associated with a given type is + determined by finding the media range with the highest precedence + which matches that type. For example, + + Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, + text/html;level=2;q=0.4, */*;q=0.5 + + would cause the following values to be associated: + + text/html;level=1 = 1 + text/html = 0.7 + text/plain = 0.3 + image/jpeg = 0.5 + text/html;level=2 = 0.4 + text/html;level=3 = 0.7 + + Note: A user agent may be provided with a default set of quality + values for certain media ranges. However, unless the user agent is + a closed system which cannot interact with other rendering agents, + +Fielding, et. al. Standards Track [Page 96] + +RFC 2068 HTTP/1.1 January 1997 + + this default set should be configurable by the user. + +14.2 Accept-Charset + + The Accept-Charset request-header field can be used to indicate what + character sets are acceptable for the response. This field allows + clients capable of understanding more comprehensive or special- + purpose character sets to signal that capability to a server which is + capable of representing documents in those character sets. The ISO- + 8859-1 character set can be assumed to be acceptable to all user + agents. + + Accept-Charset = "Accept-Charset" ":" + 1#( charset [ ";" "q" "=" qvalue ] ) + + Character set values are described in section 3.4. Each charset may + be given an associated quality value which represents the user's + preference for that charset. The default value is q=1. An example is + + Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 + + If no Accept-Charset header is present, the default is that any + character set is acceptable. If an Accept-Charset header is present, + and if the server cannot send a response which is acceptable + according to the Accept-Charset header, then the server SHOULD send + an error response with the 406 (not acceptable) status code, though + the sending of an unacceptable response is also allowed. + +14.3 Accept-Encoding + + The Accept-Encoding request-header field is similar to Accept, but + restricts the content-coding values (section 14.12) which are + acceptable in the response. + + Accept-Encoding = "Accept-Encoding" ":" + #( content-coding ) + + An example of its use is + + Accept-Encoding: compress, gzip + + If no Accept-Encoding header is present in a request, the server MAY + assume that the client will accept any content coding. If an Accept- + Encoding header is present, and if the server cannot send a response + which is acceptable according to the Accept-Encoding header, then the + server SHOULD send an error response with the 406 (Not Acceptable) + status code. + +Fielding, et. al. Standards Track [Page 97] + +RFC 2068 HTTP/1.1 January 1997 + + An empty Accept-Encoding value indicates none are acceptable. + +14.4 Accept-Language + + The Accept-Language request-header field is similar to Accept, but + restricts the set of natural languages that are preferred as a + response to the request. + + Accept-Language = "Accept-Language" ":" + 1#( language-range [ ";" "q" "=" qvalue ] ) + + language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" ) + + Each language-range MAY be given an associated quality value which + represents an estimate of the user's preference for the languages + specified by that range. The quality value defaults to "q=1". For + example, + + Accept-Language: da, en-gb;q=0.8, en;q=0.7 + + would mean: "I prefer Danish, but will accept British English and + other types of English." A language-range matches a language-tag if + it exactly equals the tag, or if it exactly equals a prefix of the + tag such that the first tag character following the prefix is "-". + The special range "*", if present in the Accept-Language field, + matches every tag not matched by any other range present in the + Accept-Language field. + + Note: This use of a prefix matching rule does not imply that + language tags are assigned to languages in such a way that it is + always true that if a user understands a language with a certain + tag, then this user will also understand all languages with tags + for which this tag is a prefix. The prefix rule simply allows the + use of prefix tags if this is the case. + + The language quality factor assigned to a language-tag by the + Accept-Language field is the quality value of the longest language- + range in the field that matches the language-tag. If no language- + range in the field matches the tag, the language quality factor + assigned is 0. If no Accept-Language header is present in the + request, the server SHOULD assume that all languages are equally + acceptable. If an Accept-Language header is present, then all + languages which are assigned a quality factor greater than 0 are + acceptable. + + It may be contrary to the privacy expectations of the user to send an + Accept-Language header with the complete linguistic preferences of + the user in every request. For a discussion of this issue, see + +Fielding, et. al. Standards Track [Page 98] + +RFC 2068 HTTP/1.1 January 1997 + + section 15.7. + + Note: As intelligibility is highly dependent on the individual + user, it is recommended that client applications make the choice of + linguistic preference available to the user. If the choice is not + made available, then the Accept-Language header field must not be + given in the request. + +14.5 Accept-Ranges + + The Accept-Ranges response-header field allows the server to indicate + its acceptance of range requests for a resource: + + Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges + + acceptable-ranges = 1#range-unit | "none" + + Origin servers that accept byte-range requests MAY send + + Accept-Ranges: bytes + + but are not required to do so. Clients MAY generate byte-range + requests without having received this header for the resource + involved. + + Servers that do not accept any kind of range request for a resource + MAY send + + Accept-Ranges: none + + to advise the client not to attempt a range request. + +14.6 Age + + The Age response-header field conveys the sender's estimate of the + amount of time since the response (or its revalidation) was generated + at the origin server. A cached response is "fresh" if its age does + not exceed its freshness lifetime. Age values are calculated as + specified in section 13.2.3. + + Age = "Age" ":" age-value + + age-value = delta-seconds + + Age values are non-negative decimal integers, representing time in + seconds. + +Fielding, et. al. Standards Track [Page 99] + +RFC 2068 HTTP/1.1 January 1997 + + If a cache receives a value larger than the largest positive integer + it can represent, or if any of its age calculations overflows, it + MUST transmit an Age header with a value of 2147483648 (2^31). + HTTP/1.1 caches MUST send an Age header in every response. Caches + SHOULD use an arithmetic type of at least 31 bits of range. + +14.7 Allow + + The Allow entity-header field lists the set of methods supported by + the resource identified by the Request-URI. The purpose of this field + is strictly to inform the recipient of valid methods associated with + the resource. An Allow header field MUST be present in a 405 (Method + Not Allowed) response. + + Allow = "Allow" ":" 1#method + + Example of use: + + Allow: GET, HEAD, PUT + + This field cannot prevent a client from trying other methods. + However, the indications given by the Allow header field value SHOULD + be followed. The actual set of allowed methods is defined by the + origin server at the time of each request. + + The Allow header field MAY be provided with a PUT request to + recommend the methods to be supported by the new or modified + resource. The server is not required to support these methods and + SHOULD include an Allow header in the response giving the actual + supported methods. + + A proxy MUST NOT modify the Allow header field even if it does not + understand all the methods specified, since the user agent MAY have + other means of communicating with the origin server. + + The Allow header field does not indicate what methods are implemented + at the server level. Servers MAY use the Public response-header field + (section 14.35) to describe what methods are implemented on the + server as a whole. + +14.8 Authorization + + A user agent that wishes to authenticate itself with a server-- + usually, but not necessarily, after receiving a 401 response--MAY do + so by including an Authorization request-header field with the + request. The Authorization field value consists of credentials + containing the authentication information of the user agent for the + realm of the resource being requested. + +Fielding, et. al. Standards Track [Page 100] + +RFC 2068 HTTP/1.1 January 1997 + + Authorization = "Authorization" ":" credentials + + HTTP access authentication is described in section 11. If a request + is authenticated and a realm specified, the same credentials SHOULD + be valid for all other requests within this realm. + + When a shared cache (see section 13.7) receives a request containing + an Authorization field, it MUST NOT return the corresponding response + as a reply to any other request, unless one of the following specific + exceptions holds: + + 1. If the response includes the "proxy-revalidate" Cache-Control + directive, the cache MAY use that response in replying to a + subsequent request, but a proxy cache MUST first revalidate it with + the origin server, using the request-headers from the new request + to allow the origin server to authenticate the new request. + 2. If the response includes the "must-revalidate" Cache-Control + directive, the cache MAY use that response in replying to a + subsequent request, but all caches MUST first revalidate it with + the origin server, using the request-headers from the new request + to allow the origin server to authenticate the new request. + 3. If the response includes the "public" Cache-Control directive, it + may be returned in reply to any subsequent request. + +14.9 Cache-Control + + The Cache-Control general-header field is used to specify directives + that MUST be obeyed by all caching mechanisms along the + request/response chain. The directives specify behavior intended to + prevent caches from adversely interfering with the request or + response. These directives typically override the default caching + algorithms. Cache directives are unidirectional in that the presence + of a directive in a request does not imply that the same directive + should be given in the response. + + Note that HTTP/1.0 caches may not implement Cache-Control and may + only implement Pragma: no-cache (see section 14.32). + + Cache directives must be passed through by a proxy or gateway + application, regardless of their significance to that application, + since the directives may be applicable to all recipients along the + request/response chain. It is not possible to specify a cache- + directive for a specific cache. + + Cache-Control = "Cache-Control" ":" 1#cache-directive + + cache-directive = cache-request-directive + | cache-response-directive + +Fielding, et. al. Standards Track [Page 101] + +RFC 2068 HTTP/1.1 January 1997 + + cache-request-directive = + "no-cache" [ "=" <"> 1#field-name <"> ] + | "no-store" + | "max-age" "=" delta-seconds + | "max-stale" [ "=" delta-seconds ] + | "min-fresh" "=" delta-seconds + | "only-if-cached" + | cache-extension + + cache-response-directive = + "public" + | "private" [ "=" <"> 1#field-name <"> ] + | "no-cache" [ "=" <"> 1#field-name <"> ] + | "no-store" + | "no-transform" + | "must-revalidate" + | "proxy-revalidate" + | "max-age" "=" delta-seconds + | cache-extension + + cache-extension = token [ "=" ( token | quoted-string ) ] + + When a directive appears without any 1#field-name parameter, the + directive applies to the entire request or response. When such a + directive appears with a 1#field-name parameter, it applies only to + the named field or fields, and not to the rest of the request or + response. This mechanism supports extensibility; implementations of + future versions of the HTTP protocol may apply these directives to + header fields not defined in HTTP/1.1. + + The cache-control directives can be broken down into these general + categories: + + o Restrictions on what is cachable; these may only be imposed by the + origin server. + o Restrictions on what may be stored by a cache; these may be imposed + by either the origin server or the user agent. + o Modifications of the basic expiration mechanism; these may be + imposed by either the origin server or the user agent. + o Controls over cache revalidation and reload; these may only be + imposed by a user agent. + o Control over transformation of entities. + o Extensions to the caching system. + +Fielding, et. al. Standards Track [Page 102] + +RFC 2068 HTTP/1.1 January 1997 + +14.9.1 What is Cachable + + By default, a response is cachable if the requirements of the request + method, request header fields, and the response status indicate that + it is cachable. Section 13.4 summarizes these defaults for + cachability. The following Cache-Control response directives allow an + origin server to override the default cachability of a response: + +public + Indicates that the response is cachable by any cache, even if it + would normally be non-cachable or cachable only within a non-shared + cache. (See also Authorization, section 14.8, for additional + details.) + +private + Indicates that all or part of the response message is intended for a + single user and MUST NOT be cached by a shared cache. This allows an + origin server to state that the specified parts of the response are + intended for only one user and are not a valid response for requests + by other users. A private (non-shared) cache may cache the response. + + Note: This usage of the word private only controls where the + response may be cached, and cannot ensure the privacy of the + message content. + +no-cache + Indicates that all or part of the response message MUST NOT be cached + anywhere. This allows an origin server to prevent caching even by + caches that have been configured to return stale responses to client + requests. + + Note: Most HTTP/1.0 caches will not recognize or obey this + directive. + +14.9.2 What May be Stored by Caches + + The purpose of the no-store directive is to prevent the inadvertent + release or retention of sensitive information (for example, on backup + tapes). The no-store directive applies to the entire message, and may + be sent either in a response or in a request. If sent in a request, a + cache MUST NOT store any part of either this request or any response + to it. If sent in a response, a cache MUST NOT store any part of + either this response or the request that elicited it. This directive + applies to both non-shared and shared caches. "MUST NOT store" in + this context means that the cache MUST NOT intentionally store the + information in non-volatile storage, and MUST make a best-effort + attempt to remove the information from volatile storage as promptly + as possible after forwarding it. + +Fielding, et. al. Standards Track [Page 103] + +RFC 2068 HTTP/1.1 January 1997 + + Even when this directive is associated with a response, users may + explicitly store such a response outside of the caching system (e.g., + with a "Save As" dialog). History buffers may store such responses as + part of their normal operation. + + The purpose of this directive is to meet the stated requirements of + certain users and service authors who are concerned about accidental + releases of information via unanticipated accesses to cache data + structures. While the use of this directive may improve privacy in + some cases, we caution that it is NOT in any way a reliable or + sufficient mechanism for ensuring privacy. In particular, malicious + or compromised caches may not recognize or obey this directive; and + communications networks may be vulnerable to eavesdropping. + +14.9.3 Modifications of the Basic Expiration Mechanism + + The expiration time of an entity may be specified by the origin + server using the Expires header (see section 14.21). Alternatively, + it may be specified using the max-age directive in a response. + + If a response includes both an Expires header and a max-age + directive, the max-age directive overrides the Expires header, even + if the Expires header is more restrictive. This rule allows an origin + server to provide, for a given response, a longer expiration time to + an HTTP/1.1 (or later) cache than to an HTTP/1.0 cache. This may be + useful if certain HTTP/1.0 caches improperly calculate ages or + expiration times, perhaps due to desynchronized clocks. + + Note: most older caches, not compliant with this specification, do + not implement any Cache-Control directives. An origin server + wishing to use a Cache-Control directive that restricts, but does + not prevent, caching by an HTTP/1.1-compliant cache may exploit the + requirement that the max-age directive overrides the Expires + header, and the fact that non-HTTP/1.1-compliant caches do not + observe the max-age directive. + + Other directives allow an user agent to modify the basic expiration + mechanism. These directives may be specified on a request: + + max-age + Indicates that the client is willing to accept a response whose age + is no greater than the specified time in seconds. Unless max-stale + directive is also included, the client is not willing to accept a + stale response. + + min-fresh + Indicates that the client is willing to accept a response whose + freshness lifetime is no less than its current age plus the + +Fielding, et. al. Standards Track [Page 104] + +RFC 2068 HTTP/1.1 January 1997 + + specified time in seconds. That is, the client wants a response + that will still be fresh for at least the specified number of + seconds. + + max-stale + Indicates that the client is willing to accept a response that has + exceeded its expiration time. If max-stale is assigned a value, + then the client is willing to accept a response that has exceeded + its expiration time by no more than the specified number of + seconds. If no value is assigned to max-stale, then the client is + willing to accept a stale response of any age. + + If a cache returns a stale response, either because of a max-stale + directive on a request, or because the cache is configured to + override the expiration time of a response, the cache MUST attach a + Warning header to the stale response, using Warning 10 (Response is + stale). + +14.9.4 Cache Revalidation and Reload Controls + + Sometimes an user agent may want or need to insist that a cache + revalidate its cache entry with the origin server (and not just with + the next cache along the path to the origin server), or to reload its + cache entry from the origin server. End-to-end revalidation may be + necessary if either the cache or the origin server has overestimated + the expiration time of the cached response. End-to-end reload may be + necessary if the cache entry has become corrupted for some reason. + + End-to-end revalidation may be requested either when the client does + not have its own local cached copy, in which case we call it + "unspecified end-to-end revalidation", or when the client does have a + local cached copy, in which case we call it "specific end-to-end + revalidation." + + The client can specify these three kinds of action using Cache- + Control request directives: + + End-to-end reload + The request includes a "no-cache" Cache-Control directive or, for + compatibility with HTTP/1.0 clients, "Pragma: no-cache". No field + names may be included with the no-cache directive in a request. The + server MUST NOT use a cached copy when responding to such a + request. + + Specific end-to-end revalidation + The request includes a "max-age=0" Cache-Control directive, which + forces each cache along the path to the origin server to revalidate + its own entry, if any, with the next cache or server. The initial + +Fielding, et. al. Standards Track [Page 105] + +RFC 2068 HTTP/1.1 January 1997 + + request includes a cache-validating conditional with the client's + current validator. + + Unspecified end-to-end revalidation + The request includes "max-age=0" Cache-Control directive, which + forces each cache along the path to the origin server to revalidate + its own entry, if any, with the next cache or server. The initial + request does not include a cache-validating conditional; the first + cache along the path (if any) that holds a cache entry for this + resource includes a cache-validating conditional with its current + validator. + + When an intermediate cache is forced, by means of a max-age=0 + directive, to revalidate its own cache entry, and the client has + supplied its own validator in the request, the supplied validator may + differ from the validator currently stored with the cache entry. In + this case, the cache may use either validator in making its own + request without affecting semantic transparency. + + However, the choice of validator may affect performance. The best + approach is for the intermediate cache to use its own validator when + making its request. If the server replies with 304 (Not Modified), + then the cache should return its now validated copy to the client + with a 200 (OK) response. If the server replies with a new entity and + cache validator, however, the intermediate cache should compare the + returned validator with the one provided in the client's request, + using the strong comparison function. If the client's validator is + equal to the origin server's, then the intermediate cache simply + returns 304 (Not Modified). Otherwise, it returns the new entity with + a 200 (OK) response. + + If a request includes the no-cache directive, it should not include + min-fresh, max-stale, or max-age. + + In some cases, such as times of extremely poor network connectivity, + a client may want a cache to return only those responses that it + currently has stored, and not to reload or revalidate with the origin + server. To do this, the client may include the only-if-cached + directive in a request. If it receives this directive, a cache SHOULD + either respond using a cached entry that is consistent with the other + constraints of the request, or respond with a 504 (Gateway Timeout) + status. However, if a group of caches is being operated as a unified + system with good internal connectivity, such a request MAY be + forwarded within that group of caches. + + Because a cache may be configured to ignore a server's specified + expiration time, and because a client request may include a max-stale + directive (which has a similar effect), the protocol also includes a + +Fielding, et. al. Standards Track [Page 106] + +RFC 2068 HTTP/1.1 January 1997 + + mechanism for the origin server to require revalidation of a cache + entry on any subsequent use. When the must-revalidate directive is + present in a response received by a cache, that cache MUST NOT use + the entry after it becomes stale to respond to a subsequent request + without first revalidating it with the origin server. (I.e., the + cache must do an end-to-end revalidation every time, if, based solely + on the origin server's Expires or max-age value, the cached response + is stale.) + + The must-revalidate directive is necessary to support reliable + operation for certain protocol features. In all circumstances an + HTTP/1.1 cache MUST obey the must-revalidate directive; in + particular, if the cache cannot reach the origin server for any + reason, it MUST generate a 504 (Gateway Timeout) response. + + Servers should send the must-revalidate directive if and only if + failure to revalidate a request on the entity could result in + incorrect operation, such as a silently unexecuted financial + transaction. Recipients MUST NOT take any automated action that + violates this directive, and MUST NOT automatically provide an + unvalidated copy of the entity if revalidation fails. + + Although this is not recommended, user agents operating under severe + connectivity constraints may violate this directive but, if so, MUST + explicitly warn the user that an unvalidated response has been + provided. The warning MUST be provided on each unvalidated access, + and SHOULD require explicit user confirmation. + + The proxy-revalidate directive has the same meaning as the must- + revalidate directive, except that it does not apply to non-shared + user agent caches. It can be used on a response to an authenticated + request to permit the user's cache to store and later return the + response without needing to revalidate it (since it has already been + authenticated once by that user), while still requiring proxies that + service many users to revalidate each time (in order to make sure + that each user has been authenticated). Note that such authenticated + responses also need the public cache control directive in order to + allow them to be cached at all. + +14.9.5 No-Transform Directive + + Implementers of intermediate caches (proxies) have found it useful to + convert the media type of certain entity bodies. A proxy might, for + example, convert between image formats in order to save cache space + or to reduce the amount of traffic on a slow link. HTTP has to date + been silent on these transformations. + +Fielding, et. al. Standards Track [Page 107] + +RFC 2068 HTTP/1.1 January 1997 + + Serious operational problems have already occurred, however, when + these transformations have been applied to entity bodies intended for + certain kinds of applications. For example, applications for medical + imaging, scientific data analysis and those using end-to-end + authentication, all depend on receiving an entity body that is bit + for bit identical to the original entity-body. + + Therefore, if a response includes the no-transform directive, an + intermediate cache or proxy MUST NOT change those headers that are + listed in section 13.5.2 as being subject to the no-transform + directive. This implies that the cache or proxy must not change any + aspect of the entity-body that is specified by these headers. + +14.9.6 Cache Control Extensions + + The Cache-Control header field can be extended through the use of one + or more cache-extension tokens, each with an optional assigned value. + Informational extensions (those which do not require a change in + cache behavior) may be added without changing the semantics of other + directives. Behavioral extensions are designed to work by acting as + modifiers to the existing base of cache directives. Both the new + directive and the standard directive are supplied, such that + applications which do not understand the new directive will default + to the behavior specified by the standard directive, and those that + understand the new directive will recognize it as modifying the + requirements associated with the standard directive. In this way, + extensions to the Cache-Control directives can be made without + requiring changes to the base protocol. + + This extension mechanism depends on a HTTP cache obeying all of the + cache-control directives defined for its native HTTP-version, obeying + certain extensions, and ignoring all directives that it does not + understand. + + For example, consider a hypothetical new response directive called + "community" which acts as a modifier to the "private" directive. We + define this new directive to mean that, in addition to any non-shared + cache, any cache which is shared only by members of the community + named within its value may cache the response. An origin server + wishing to allow the "UCI" community to use an otherwise private + response in their shared cache(s) may do so by including + + Cache-Control: private, community="UCI" + + A cache seeing this header field will act correctly even if the cache + does not understand the "community" cache-extension, since it will + also see and understand the "private" directive and thus default to + the safe behavior. + +Fielding, et. al. Standards Track [Page 108] + +RFC 2068 HTTP/1.1 January 1997 + + Unrecognized cache-directives MUST be ignored; it is assumed that any + cache-directive likely to be unrecognized by an HTTP/1.1 cache will + be combined with standard directives (or the response's default + cachability) such that the cache behavior will remain minimally + correct even if the cache does not understand the extension(s). + +14.10 Connection + + The Connection general-header field allows the sender to specify + options that are desired for that particular connection and MUST NOT + be communicated by proxies over further connections. + + The Connection header has the following grammar: + + Connection-header = "Connection" ":" 1#(connection-token) + connection-token = token + + HTTP/1.1 proxies MUST parse the Connection header field before a + message is forwarded and, for each connection-token in this field, + remove any header field(s) from the message with the same name as the + connection-token. Connection options are signaled by the presence of + a connection-token in the Connection header field, not by any + corresponding additional header field(s), since the additional header + field may not be sent if there are no parameters associated with that + connection option. HTTP/1.1 defines the "close" connection option + for the sender to signal that the connection will be closed after + completion of the response. For example, + + Connection: close + + in either the request or the response header fields indicates that + the connection should not be considered `persistent' (section 8.1) + after the current request/response is complete. + + HTTP/1.1 applications that do not support persistent connections MUST + include the "close" connection option in every message. + +14.11 Content-Base + + The Content-Base entity-header field may be used to specify the base + URI for resolving relative URLs within the entity. This header field + is described as Base in RFC 1808, which is expected to be revised. + + Content-Base = "Content-Base" ":" absoluteURI + + If no Content-Base field is present, the base URI of an entity is + defined either by its Content-Location (if that Content-Location URI + is an absolute URI) or the URI used to initiate the request, in that + +Fielding, et. al. Standards Track [Page 109] + +RFC 2068 HTTP/1.1 January 1997 + + order of precedence. Note, however, that the base URI of the contents + within the entity-body may be redefined within that entity-body. + +14.12 Content-Encoding + + The Content-Encoding entity-header field is used as a modifier to the + media-type. When present, its value indicates what additional content + codings have been applied to the entity-body, and thus what decoding + mechanisms MUST be applied in order to obtain the media-type + referenced by the Content-Type header field. Content-Encoding is + primarily used to allow a document to be compressed without losing + the identity of its underlying media type. + + Content-Encoding = "Content-Encoding" ":" 1#content-coding + + Content codings are defined in section 3.5. An example of its use is + + Content-Encoding: gzip + + The Content-Encoding is a characteristic of the entity identified by + the Request-URI. Typically, the entity-body is stored with this + encoding and is only decoded before rendering or analogous usage. + + If multiple encodings have been applied to an entity, the content + codings MUST be listed in the order in which they were applied. + + Additional information about the encoding parameters MAY be provided + by other entity-header fields not defined by this specification. + +14.13 Content-Language + + The Content-Language entity-header field describes the natural + language(s) of the intended audience for the enclosed entity. Note + that this may not be equivalent to all the languages used within the + entity-body. + + Content-Language = "Content-Language" ":" 1#language-tag + + Language tags are defined in section 3.10. The primary purpose of + Content-Language is to allow a user to identify and differentiate + entities according to the user's own preferred language. Thus, if the + body content is intended only for a Danish-literate audience, the + appropriate field is + + Content-Language: da + + If no Content-Language is specified, the default is that the content + is intended for all language audiences. This may mean that the sender + +Fielding, et. al. Standards Track [Page 110] + +RFC 2068 HTTP/1.1 January 1997 + + does not consider it to be specific to any natural language, or that + the sender does not know for which language it is intended. + + Multiple languages MAY be listed for content that is intended for + multiple audiences. For example, a rendition of the "Treaty of + Waitangi," presented simultaneously in the original Maori and English + versions, would call for + + Content-Language: mi, en + + However, just because multiple languages are present within an entity + does not mean that it is intended for multiple linguistic audiences. + An example would be a beginner's language primer, such as "A First + Lesson in Latin," which is clearly intended to be used by an + English-literate audience. In this case, the Content-Language should + only include "en". + + Content-Language may be applied to any media type -- it is not + limited to textual documents. + +14.14 Content-Length + + The Content-Length entity-header field indicates the size of the + message-body, in decimal number of octets, sent to the recipient or, + in the case of the HEAD method, the size of the entity-body that + would have been sent had the request been a GET. + + Content-Length = "Content-Length" ":" 1*DIGIT + + An example is + + Content-Length: 3495 + + Applications SHOULD use this field to indicate the size of the + message-body to be transferred, regardless of the media type of the + entity. It must be possible for the recipient to reliably determine + the end of HTTP/1.1 requests containing an entity-body, e.g., because + the request has a valid Content-Length field, uses Transfer-Encoding: + chunked or a multipart body. + + Any Content-Length greater than or equal to zero is a valid value. + Section 4.4 describes how to determine the length of a message-body + if a Content-Length is not given. + +Fielding, et. al. Standards Track [Page 111] + +RFC 2068 HTTP/1.1 January 1997 + + Note: The meaning of this field is significantly different from the + corresponding definition in MIME, where it is an optional field + used within the "message/external-body" content-type. In HTTP, it + SHOULD be sent whenever the message's length can be determined + prior to being transferred. + +14.15 Content-Location + + The Content-Location entity-header field may be used to supply the + resource location for the entity enclosed in the message. In the case + where a resource has multiple entities associated with it, and those + entities actually have separate locations by which they might be + individually accessed, the server should provide a Content-Location + for the particular variant which is returned. In addition, a server + SHOULD provide a Content-Location for the resource corresponding to + the response entity. + + Content-Location = "Content-Location" ":" + ( absoluteURI | relativeURI ) + + If no Content-Base header field is present, the value of Content- + Location also defines the base URL for the entity (see section + 14.11). + + The Content-Location value is not a replacement for the original + requested URI; it is only a statement of the location of the resource + corresponding to this particular entity at the time of the request. + Future requests MAY use the Content-Location URI if the desire is to + identify the source of that particular entity. + + A cache cannot assume that an entity with a Content-Location + different from the URI used to retrieve it can be used to respond to + later requests on that Content-Location URI. However, the Content- + Location can be used to differentiate between multiple entities + retrieved from a single requested resource, as described in section + 13.6. + + If the Content-Location is a relative URI, the URI is interpreted + relative to any Content-Base URI provided in the response. If no + Content-Base is provided, the relative URI is interpreted relative to + the Request-URI. + +Fielding, et. al. Standards Track [Page 112] + +RFC 2068 HTTP/1.1 January 1997 + +14.16 Content-MD5 + + The Content-MD5 entity-header field, as defined in RFC 1864 [23], is + an MD5 digest of the entity-body for the purpose of providing an + end-to-end message integrity check (MIC) of the entity-body. (Note: a + MIC is good for detecting accidental modification of the entity-body + in transit, but is not proof against malicious attacks.) + + Content-MD5 = "Content-MD5" ":" md5-digest + + md5-digest = + + The Content-MD5 header field may be generated by an origin server to + function as an integrity check of the entity-body. Only origin + servers may generate the Content-MD5 header field; proxies and + gateways MUST NOT generate it, as this would defeat its value as an + end-to-end integrity check. Any recipient of the entity-body, + including gateways and proxies, MAY check that the digest value in + this header field matches that of the entity-body as received. + + The MD5 digest is computed based on the content of the entity-body, + including any Content-Encoding that has been applied, but not + including any Transfer-Encoding that may have been applied to the + message-body. If the message is received with a Transfer-Encoding, + that encoding must be removed prior to checking the Content-MD5 value + against the received entity. + + This has the result that the digest is computed on the octets of the + entity-body exactly as, and in the order that, they would be sent if + no Transfer-Encoding were being applied. + + HTTP extends RFC 1864 to permit the digest to be computed for MIME + composite media-types (e.g., multipart/* and message/rfc822), but + this does not change how the digest is computed as defined in the + preceding paragraph. + + Note: There are several consequences of this. The entity-body for + composite types may contain many body-parts, each with its own MIME + and HTTP headers (including Content-MD5, Content-Transfer-Encoding, + and Content-Encoding headers). If a body-part has a Content- + Transfer-Encoding or Content-Encoding header, it is assumed that + the content of the body-part has had the encoding applied, and the + body-part is included in the Content-MD5 digest as is -- i.e., + after the application. The Transfer-Encoding header field is not + allowed within body-parts. + + Note: while the definition of Content-MD5 is exactly the same for + HTTP as in RFC 1864 for MIME entity-bodies, there are several ways + +Fielding, et. al. Standards Track [Page 113] + +RFC 2068 HTTP/1.1 January 1997 + + in which the application of Content-MD5 to HTTP entity-bodies + differs from its application to MIME entity-bodies. One is that + HTTP, unlike MIME, does not use Content-Transfer-Encoding, and does + use Transfer-Encoding and Content-Encoding. Another is that HTTP + more frequently uses binary content types than MIME, so it is worth + noting that, in such cases, the byte order used to compute the + digest is the transmission byte order defined for the type. Lastly, + HTTP allows transmission of text types with any of several line + break conventions and not just the canonical form using CRLF. + Conversion of all line breaks to CRLF should not be done before + computing or checking the digest: the line break convention used in + the text actually transmitted should be left unaltered when + computing the digest. + +14.17 Content-Range + + The Content-Range entity-header is sent with a partial entity-body to + specify where in the full entity-body the partial body should be + inserted. It also indicates the total size of the full entity-body. + When a server returns a partial response to a client, it must + describe both the extent of the range covered by the response, and + the length of the entire entity-body. + + Content-Range = "Content-Range" ":" content-range-spec + + content-range-spec = byte-content-range-spec + + byte-content-range-spec = bytes-unit SP first-byte-pos "-" + last-byte-pos "/" entity-length + + entity-length = 1*DIGIT + + Unlike byte-ranges-specifier values, a byte-content-range-spec may + only specify one range, and must contain absolute byte positions for + both the first and last byte of the range. + + A byte-content-range-spec whose last-byte-pos value is less than its + first-byte-pos value, or whose entity-length value is less than or + equal to its last-byte-pos value, is invalid. The recipient of an + invalid byte-content-range-spec MUST ignore it and any content + transferred along with it. + +Fielding, et. al. Standards Track [Page 114] + +RFC 2068 HTTP/1.1 January 1997 + + Examples of byte-content-range-spec values, assuming that the entity + contains a total of 1234 bytes: + + o The first 500 bytes: + + bytes 0-499/1234 + + o The second 500 bytes: + + bytes 500-999/1234 + + o All except for the first 500 bytes: + + bytes 500-1233/1234 + + o The last 500 bytes: + + bytes 734-1233/1234 + + When an HTTP message includes the content of a single range (for + example, a response to a request for a single range, or to a request + for a set of ranges that overlap without any holes), this content is + transmitted with a Content-Range header, and a Content-Length header + showing the number of bytes actually transferred. For example, + + HTTP/1.1 206 Partial content + Date: Wed, 15 Nov 1995 06:25:24 GMT + Last-modified: Wed, 15 Nov 1995 04:58:08 GMT + Content-Range: bytes 21010-47021/47022 + Content-Length: 26012 + Content-Type: image/gif + + When an HTTP message includes the content of multiple ranges (for + example, a response to a request for multiple non-overlapping + ranges), these are transmitted as a multipart MIME message. The + multipart MIME content-type used for this purpose is defined in this + specification to be "multipart/byteranges". See appendix 19.2 for its + definition. + + A client that cannot decode a MIME multipart/byteranges message + should not ask for multiple byte-ranges in a single request. + + When a client requests multiple byte-ranges in one request, the + server SHOULD return them in the order that they appeared in the + request. + + If the server ignores a byte-range-spec because it is invalid, the + server should treat the request as if the invalid Range header field + +Fielding, et. al. Standards Track [Page 115] + +RFC 2068 HTTP/1.1 January 1997 + + did not exist. (Normally, this means return a 200 response containing + the full entity). The reason is that the only time a client will make + such an invalid request is when the entity is smaller than the entity + retrieved by a prior request. + +14.18 Content-Type + + The Content-Type entity-header field indicates the media type of the + entity-body sent to the recipient or, in the case of the HEAD method, + the media type that would have been sent had the request been a GET. + + Content-Type = "Content-Type" ":" media-type + Media types are defined in section 3.7. An example of the field is + + Content-Type: text/html; charset=ISO-8859-4 + + Further discussion of methods for identifying the media type of an + entity is provided in section 7.2.1. + +14.19 Date + + The Date general-header field represents the date and time at which + the message was originated, having the same semantics as orig-date in + RFC 822. The field value is an HTTP-date, as described in section + 3.3.1. + + Date = "Date" ":" HTTP-date + + An example is + + Date: Tue, 15 Nov 1994 08:12:31 GMT + + If a message is received via direct connection with the user agent + (in the case of requests) or the origin server (in the case of + responses), then the date can be assumed to be the current date at + the receiving end. However, since the date--as it is believed by the + origin--is important for evaluating cached responses, origin servers + MUST include a Date header field in all responses. Clients SHOULD + only send a Date header field in messages that include an entity- + body, as in the case of the PUT and POST requests, and even then it + is optional. A received message which does not have a Date header + field SHOULD be assigned one by the recipient if the message will be + cached by that recipient or gatewayed via a protocol which requires a + Date. + +Fielding, et. al. Standards Track [Page 116] + +RFC 2068 HTTP/1.1 January 1997 + + In theory, the date SHOULD represent the moment just before the + entity is generated. In practice, the date can be generated at any + time during the message origination without affecting its semantic + value. + + The format of the Date is an absolute date and time as defined by + HTTP-date in section 3.3; it MUST be sent in RFC1123 [8]-date format. + +14.20 ETag + + The ETag entity-header field defines the entity tag for the + associated entity. The headers used with entity tags are described in + sections 14.20, 14.25, 14.26 and 14.43. The entity tag may be used + for comparison with other entities from the same resource (see + section 13.3.2). + + ETag = "ETag" ":" entity-tag + + Examples: + + ETag: "xyzzy" + ETag: W/"xyzzy" + ETag: "" + +14.21 Expires + + The Expires entity-header field gives the date/time after which the + response should be considered stale. A stale cache entry may not + normally be returned by a cache (either a proxy cache or an user + agent cache) unless it is first validated with the origin server (or + with an intermediate cache that has a fresh copy of the entity). See + section 13.2 for further discussion of the expiration model. + + The presence of an Expires field does not imply that the original + resource will change or cease to exist at, before, or after that + time. + + The format is an absolute date and time as defined by HTTP-date in + section 3.3; it MUST be in RFC1123-date format: + + Expires = "Expires" ":" HTTP-date + +Fielding, et. al. Standards Track [Page 117] + +RFC 2068 HTTP/1.1 January 1997 + + An example of its use is + + Expires: Thu, 01 Dec 1994 16:00:00 GMT + + Note: if a response includes a Cache-Control field with the max-age + directive, that directive overrides the Expires field. + + HTTP/1.1 clients and caches MUST treat other invalid date formats, + especially including the value "0", as in the past (i.e., "already + expired"). + + To mark a response as "already expired," an origin server should use + an Expires date that is equal to the Date header value. (See the + rules for expiration calculations in section 13.2.4.) + + To mark a response as "never expires," an origin server should use an + Expires date approximately one year from the time the response is + sent. HTTP/1.1 servers should not send Expires dates more than one + year in the future. + + The presence of an Expires header field with a date value of some + time in the future on an response that otherwise would by default be + non-cacheable indicates that the response is cachable, unless + indicated otherwise by a Cache-Control header field (section 14.9). + +14.22 From + + The From request-header field, if given, SHOULD contain an Internet + e-mail address for the human user who controls the requesting user + agent. The address SHOULD be machine-usable, as defined by mailbox + in RFC 822 (as updated by RFC 1123 ): + + From = "From" ":" mailbox + + An example is: + + From: webmaster@w3.org + + This header field MAY be used for logging purposes and as a means for + identifying the source of invalid or unwanted requests. It SHOULD NOT + be used as an insecure form of access protection. The interpretation + of this field is that the request is being performed on behalf of the + person given, who accepts responsibility for the method performed. In + particular, robot agents SHOULD include this header so that the + person responsible for running the robot can be contacted if problems + occur on the receiving end. + +Fielding, et. al. Standards Track [Page 118] + +RFC 2068 HTTP/1.1 January 1997 + + The Internet e-mail address in this field MAY be separate from the + Internet host which issued the request. For example, when a request + is passed through a proxy the original issuer's address SHOULD be + used. + + Note: The client SHOULD not send the From header field without the + user's approval, as it may conflict with the user's privacy + interests or their site's security policy. It is strongly + recommended that the user be able to disable, enable, and modify + the value of this field at any time prior to a request. + +14.23 Host + + The Host request-header field specifies the Internet host and port + number of the resource being requested, as obtained from the original + URL given by the user or referring resource (generally an HTTP URL, + as described in section 3.2.2). The Host field value MUST represent + the network location of the origin server or gateway given by the + original URL. This allows the origin server or gateway to + differentiate between internally-ambiguous URLs, such as the root "/" + URL of a server for multiple host names on a single IP address. + + Host = "Host" ":" host [ ":" port ] ; Section 3.2.2 + + A "host" without any trailing port information implies the default + port for the service requested (e.g., "80" for an HTTP URL). For + example, a request on the origin server for + MUST include: + + GET /pub/WWW/ HTTP/1.1 + Host: www.w3.org + + A client MUST include a Host header field in all HTTP/1.1 request + messages on the Internet (i.e., on any message corresponding to a + request for a URL which includes an Internet host address for the + service being requested). If the Host field is not already present, + an HTTP/1.1 proxy MUST add a Host field to the request message prior + to forwarding it on the Internet. All Internet-based HTTP/1.1 servers + MUST respond with a 400 status code to any HTTP/1.1 request message + which lacks a Host header field. + + See sections 5.2 and 19.5.1 for other requirements relating to Host. + +14.24 If-Modified-Since + + The If-Modified-Since request-header field is used with the GET + method to make it conditional: if the requested variant has not been + modified since the time specified in this field, an entity will not + +Fielding, et. al. Standards Track [Page 119] + +RFC 2068 HTTP/1.1 January 1997 + + be returned from the server; instead, a 304 (not modified) response + will be returned without any message-body. + + If-Modified-Since = "If-Modified-Since" ":" HTTP-date + + An example of the field is: + + If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT + + A GET method with an If-Modified-Since header and no Range header + requests that the identified entity be transferred only if it has + been modified since the date given by the If-Modified-Since header. + The algorithm for determining this includes the following cases: + + a)If the request would normally result in anything other than a 200 + (OK) status, or if the passed If-Modified-Since date is invalid, the + response is exactly the same as for a normal GET. A date which is + later than the server's current time is invalid. + + b)If the variant has been modified since the If-Modified-Since date, + the response is exactly the same as for a normal GET. + + c)If the variant has not been modified since a valid If-Modified-Since + date, the server MUST return a 304 (Not Modified) response. + + The purpose of this feature is to allow efficient updates of cached + information with a minimum amount of transaction overhead. + + Note that the Range request-header field modifies the meaning of + If-Modified-Since; see section 14.36 for full details. + + Note that If-Modified-Since times are interpreted by the server, + whose clock may not be synchronized with the client. + + Note that if a client uses an arbitrary date in the If-Modified-Since + header instead of a date taken from the Last-Modified header for the + same request, the client should be aware of the fact that this date + is interpreted in the server's understanding of time. The client + should consider unsynchronized clocks and rounding problems due to + the different encodings of time between the client and server. This + includes the possibility of race conditions if the document has + changed between the time it was first requested and the If-Modified- + Since date of a subsequent request, and the possibility of clock- + skew-related problems if the If-Modified-Since date is derived from + the client's clock without correction to the server's clock. + Corrections for different time bases between client and server are at + best approximate due to network latency. + +Fielding, et. al. Standards Track [Page 120] + +RFC 2068 HTTP/1.1 January 1997 + +14.25 If-Match + + The If-Match request-header field is used with a method to make it + conditional. A client that has one or more entities previously + obtained from the resource can verify that one of those entities is + current by including a list of their associated entity tags in the + If-Match header field. The purpose of this feature is to allow + efficient updates of cached information with a minimum amount of + transaction overhead. It is also used, on updating requests, to + prevent inadvertent modification of the wrong version of a resource. + As a special case, the value "*" matches any current entity of the + resource. + + If-Match = "If-Match" ":" ( "*" | 1#entity-tag ) + + If any of the entity tags match the entity tag of the entity that + would have been returned in the response to a similar GET request + (without the If-Match header) on that resource, or if "*" is given + and any current entity exists for that resource, then the server MAY + perform the requested method as if the If-Match header field did not + exist. + + A server MUST use the strong comparison function (see section 3.11) + to compare the entity tags in If-Match. + + If none of the entity tags match, or if "*" is given and no current + entity exists, the server MUST NOT perform the requested method, and + MUST return a 412 (Precondition Failed) response. This behavior is + most useful when the client wants to prevent an updating method, such + as PUT, from modifying a resource that has changed since the client + last retrieved it. + + If the request would, without the If-Match header field, result in + anything other than a 2xx status, then the If-Match header MUST be + ignored. + + The meaning of "If-Match: *" is that the method SHOULD be performed + if the representation selected by the origin server (or by a cache, + possibly using the Vary mechanism, see section 14.43) exists, and + MUST NOT be performed if the representation does not exist. + +Fielding, et. al. Standards Track [Page 121] + +RFC 2068 HTTP/1.1 January 1997 + + A request intended to update a resource (e.g., a PUT) MAY include an + If-Match header field to signal that the request method MUST NOT be + applied if the entity corresponding to the If-Match value (a single + entity tag) is no longer a representation of that resource. This + allows the user to indicate that they do not wish the request to be + successful if the resource has been changed without their knowledge. + Examples: + + If-Match: "xyzzy" + If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" + If-Match: * + +14.26 If-None-Match + + The If-None-Match request-header field is used with a method to make + it conditional. A client that has one or more entities previously + obtained from the resource can verify that none of those entities is + current by including a list of their associated entity tags in the + If-None-Match header field. The purpose of this feature is to allow + efficient updates of cached information with a minimum amount of + transaction overhead. It is also used, on updating requests, to + prevent inadvertent modification of a resource which was not known to + exist. + + As a special case, the value "*" matches any current entity of the + resource. + + If-None-Match = "If-None-Match" ":" ( "*" | 1#entity-tag ) + + If any of the entity tags match the entity tag of the entity that + would have been returned in the response to a similar GET request + (without the If-None-Match header) on that resource, or if "*" is + given and any current entity exists for that resource, then the + server MUST NOT perform the requested method. Instead, if the request + method was GET or HEAD, the server SHOULD respond with a 304 (Not + Modified) response, including the cache-related entity-header fields + (particularly ETag) of one of the entities that matched. For all + other request methods, the server MUST respond with a status of 412 + (Precondition Failed). + + See section 13.3.3 for rules on how to determine if two entity tags + match. The weak comparison function can only be used with GET or HEAD + requests. + + If none of the entity tags match, or if "*" is given and no current + entity exists, then the server MAY perform the requested method as if + the If-None-Match header field did not exist. + +Fielding, et. al. Standards Track [Page 122] + +RFC 2068 HTTP/1.1 January 1997 + + If the request would, without the If-None-Match header field, result + in anything other than a 2xx status, then the If-None-Match header + MUST be ignored. + + The meaning of "If-None-Match: *" is that the method MUST NOT be + performed if the representation selected by the origin server (or by + a cache, possibly using the Vary mechanism, see section 14.43) + exists, and SHOULD be performed if the representation does not exist. + This feature may be useful in preventing races between PUT + operations. + + Examples: + + If-None-Match: "xyzzy" + If-None-Match: W/"xyzzy" + If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" + If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz" + If-None-Match: * + +14.27 If-Range + + If a client has a partial copy of an entity in its cache, and wishes + to have an up-to-date copy of the entire entity in its cache, it + could use the Range request-header with a conditional GET (using + either or both of If-Unmodified-Since and If-Match.) However, if the + condition fails because the entity has been modified, the client + would then have to make a second request to obtain the entire current + entity-body. + + The If-Range header allows a client to "short-circuit" the second + request. Informally, its meaning is `if the entity is unchanged, send + me the part(s) that I am missing; otherwise, send me the entire new + entity.' + + If-Range = "If-Range" ":" ( entity-tag | HTTP-date ) + + If the client has no entity tag for an entity, but does have a Last- + Modified date, it may use that date in a If-Range header. (The server + can distinguish between a valid HTTP-date and any form of entity-tag + by examining no more than two characters.) The If-Range header should + only be used together with a Range header, and must be ignored if the + request does not include a Range header, or if the server does not + support the sub-range operation. + +Fielding, et. al. Standards Track [Page 123] + +RFC 2068 HTTP/1.1 January 1997 + + If the entity tag given in the If-Range header matches the current + entity tag for the entity, then the server should provide the + specified sub-range of the entity using a 206 (Partial content) + response. If the entity tag does not match, then the server should + return the entire entity using a 200 (OK) response. + +14.28 If-Unmodified-Since + + The If-Unmodified-Since request-header field is used with a method to + make it conditional. If the requested resource has not been modified + since the time specified in this field, the server should perform the + requested operation as if the If-Unmodified-Since header were not + present. + + If the requested variant has been modified since the specified time, + the server MUST NOT perform the requested operation, and MUST return + a 412 (Precondition Failed). + + If-Unmodified-Since = "If-Unmodified-Since" ":" HTTP-date + + An example of the field is: + + If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT + + If the request normally (i.e., without the If-Unmodified-Since + header) would result in anything other than a 2xx status, the If- + Unmodified-Since header should be ignored. + + If the specified date is invalid, the header is ignored. + +14.29 Last-Modified + + The Last-Modified entity-header field indicates the date and time at + which the origin server believes the variant was last modified. + + Last-Modified = "Last-Modified" ":" HTTP-date + + An example of its use is + + Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT + + The exact meaning of this header field depends on the implementation + of the origin server and the nature of the original resource. For + files, it may be just the file system last-modified time. For + entities with dynamically included parts, it may be the most recent + of the set of last-modify times for its component parts. For database + gateways, it may be the last-update time stamp of the record. For + virtual objects, it may be the last time the internal state changed. + +Fielding, et. al. Standards Track [Page 124] + +RFC 2068 HTTP/1.1 January 1997 + + An origin server MUST NOT send a Last-Modified date which is later + than the server's time of message origination. In such cases, where + the resource's last modification would indicate some time in the + future, the server MUST replace that date with the message + origination date. + + An origin server should obtain the Last-Modified value of the entity + as close as possible to the time that it generates the Date value of + its response. This allows a recipient to make an accurate assessment + of the entity's modification time, especially if the entity changes + near the time that the response is generated. + + HTTP/1.1 servers SHOULD send Last-Modified whenever feasible. + +14.30 Location + + The Location response-header field is used to redirect the recipient + to a location other than the Request-URI for completion of the + request or identification of a new resource. For 201 (Created) + responses, the Location is that of the new resource which was created + by the request. For 3xx responses, the location SHOULD indicate the + server's preferred URL for automatic redirection to the resource. The + field value consists of a single absolute URL. + + Location = "Location" ":" absoluteURI + + An example is + + Location: http://www.w3.org/pub/WWW/People.html + + Note: The Content-Location header field (section 14.15) differs + from Location in that the Content-Location identifies the original + location of the entity enclosed in the request. It is therefore + possible for a response to contain header fields for both Location + and Content-Location. Also see section 13.10 for cache requirements + of some methods. + +14.31 Max-Forwards + + The Max-Forwards request-header field may be used with the TRACE + method (section 14.31) to limit the number of proxies or gateways + that can forward the request to the next inbound server. This can be + useful when the client is attempting to trace a request chain which + appears to be failing or looping in mid-chain. + + Max-Forwards = "Max-Forwards" ":" 1*DIGIT + +Fielding, et. al. Standards Track [Page 125] + +RFC 2068 HTTP/1.1 January 1997 + + The Max-Forwards value is a decimal integer indicating the remaining + number of times this request message may be forwarded. + + Each proxy or gateway recipient of a TRACE request containing a Max- + Forwards header field SHOULD check and update its value prior to + forwarding the request. If the received value is zero (0), the + recipient SHOULD NOT forward the request; instead, it SHOULD respond + as the final recipient with a 200 (OK) response containing the + received request message as the response entity-body (as described in + section 9.8). If the received Max-Forwards value is greater than + zero, then the forwarded message SHOULD contain an updated Max- + Forwards field with a value decremented by one (1). + + The Max-Forwards header field SHOULD be ignored for all other methods + defined by this specification and for any extension methods for which + it is not explicitly referred to as part of that method definition. + +14.32 Pragma + + The Pragma general-header field is used to include implementation- + specific directives that may apply to any recipient along the + request/response chain. All pragma directives specify optional + behavior from the viewpoint of the protocol; however, some systems + MAY require that behavior be consistent with the directives. + + Pragma = "Pragma" ":" 1#pragma-directive + + pragma-directive = "no-cache" | extension-pragma + extension-pragma = token [ "=" ( token | quoted-string ) ] + + When the no-cache directive is present in a request message, an + application SHOULD forward the request toward the origin server even + if it has a cached copy of what is being requested. This pragma + directive has the same semantics as the no-cache cache-directive (see + section 14.9) and is defined here for backwards compatibility with + HTTP/1.0. Clients SHOULD include both header fields when a no-cache + request is sent to a server not known to be HTTP/1.1 compliant. + + Pragma directives MUST be passed through by a proxy or gateway + application, regardless of their significance to that application, + since the directives may be applicable to all recipients along the + request/response chain. It is not possible to specify a pragma for a + specific recipient; however, any pragma directive not relevant to a + recipient SHOULD be ignored by that recipient. + +Fielding, et. al. Standards Track [Page 126] + +RFC 2068 HTTP/1.1 January 1997 + + HTTP/1.1 clients SHOULD NOT send the Pragma request-header. HTTP/1.1 + caches SHOULD treat "Pragma: no-cache" as if the client had sent + "Cache-Control: no-cache". No new Pragma directives will be defined + in HTTP. + +14.33 Proxy-Authenticate + + The Proxy-Authenticate response-header field MUST be included as part + of a 407 (Proxy Authentication Required) response. The field value + consists of a challenge that indicates the authentication scheme and + parameters applicable to the proxy for this Request-URI. + + Proxy-Authenticate = "Proxy-Authenticate" ":" challenge + + The HTTP access authentication process is described in section 11. + Unlike WWW-Authenticate, the Proxy-Authenticate header field applies + only to the current connection and SHOULD NOT be passed on to + downstream clients. However, an intermediate proxy may need to obtain + its own credentials by requesting them from the downstream client, + which in some circumstances will appear as if the proxy is forwarding + the Proxy-Authenticate header field. + +14.34 Proxy-Authorization + + The Proxy-Authorization request-header field allows the client to + identify itself (or its user) to a proxy which requires + authentication. The Proxy-Authorization field value consists of + credentials containing the authentication information of the user + agent for the proxy and/or realm of the resource being requested. + + Proxy-Authorization = "Proxy-Authorization" ":" credentials + + The HTTP access authentication process is described in section 11. + Unlike Authorization, the Proxy-Authorization header field applies + only to the next outbound proxy that demanded authentication using + the Proxy-Authenticate field. When multiple proxies are used in a + chain, the Proxy-Authorization header field is consumed by the first + outbound proxy that was expecting to receive credentials. A proxy MAY + relay the credentials from the client request to the next proxy if + that is the mechanism by which the proxies cooperatively authenticate + a given request. + +14.35 Public + + The Public response-header field lists the set of methods supported + by the server. The purpose of this field is strictly to inform the + recipient of the capabilities of the server regarding unusual + methods. The methods listed may or may not be applicable to the + +Fielding, et. al. Standards Track [Page 127] + +RFC 2068 HTTP/1.1 January 1997 + + Request-URI; the Allow header field (section 14.7) MAY be used to + indicate methods allowed for a particular URI. + + Public = "Public" ":" 1#method + + Example of use: + + Public: OPTIONS, MGET, MHEAD, GET, HEAD + + This header field applies only to the server directly connected to + the client (i.e., the nearest neighbor in a chain of connections). If + the response passes through a proxy, the proxy MUST either remove the + Public header field or replace it with one applicable to its own + capabilities. + +14.36 Range + +14.36.1 Byte Ranges + + Since all HTTP entities are represented in HTTP messages as sequences + of bytes, the concept of a byte range is meaningful for any HTTP + entity. (However, not all clients and servers need to support byte- + range operations.) + + Byte range specifications in HTTP apply to the sequence of bytes in + the entity-body (not necessarily the same as the message-body). + + A byte range operation may specify a single range of bytes, or a set + of ranges within a single entity. + + ranges-specifier = byte-ranges-specifier + + byte-ranges-specifier = bytes-unit "=" byte-range-set + + byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec ) + + byte-range-spec = first-byte-pos "-" [last-byte-pos] + + first-byte-pos = 1*DIGIT + + last-byte-pos = 1*DIGIT + + The first-byte-pos value in a byte-range-spec gives the byte-offset + of the first byte in a range. The last-byte-pos value gives the + byte-offset of the last byte in the range; that is, the byte + positions specified are inclusive. Byte offsets start at zero. + +Fielding, et. al. Standards Track [Page 128] + +RFC 2068 HTTP/1.1 January 1997 + + If the last-byte-pos value is present, it must be greater than or + equal to the first-byte-pos in that byte-range-spec, or the byte- + range-spec is invalid. The recipient of an invalid byte-range-spec + must ignore it. + + If the last-byte-pos value is absent, or if the value is greater than + or equal to the current length of the entity-body, last-byte-pos is + taken to be equal to one less than the current length of the entity- + body in bytes. + + By its choice of last-byte-pos, a client can limit the number of + bytes retrieved without knowing the size of the entity. + + suffix-byte-range-spec = "-" suffix-length + + suffix-length = 1*DIGIT + + A suffix-byte-range-spec is used to specify the suffix of the + entity-body, of a length given by the suffix-length value. (That is, + this form specifies the last N bytes of an entity-body.) If the + entity is shorter than the specified suffix-length, the entire + entity-body is used. + + Examples of byte-ranges-specifier values (assuming an entity-body of + length 10000): + + o The first 500 bytes (byte offsets 0-499, inclusive): + + bytes=0-499 + + o The second 500 bytes (byte offsets 500-999, inclusive): + + bytes=500-999 + + o The final 500 bytes (byte offsets 9500-9999, inclusive): + + bytes=-500 + + o Or + + bytes=9500- + + o The first and last bytes only (bytes 0 and 9999): + + bytes=0-0,-1 + +Fielding, et. al. Standards Track [Page 129] + +RFC 2068 HTTP/1.1 January 1997 + + o Several legal but not canonical specifications of the second + 500 bytes (byte offsets 500-999, inclusive): + + bytes=500-600,601-999 + + bytes=500-700,601-999 + +14.36.2 Range Retrieval Requests + + HTTP retrieval requests using conditional or unconditional GET + methods may request one or more sub-ranges of the entity, instead of + the entire entity, using the Range request header, which applies to + the entity returned as the result of the request: + + Range = "Range" ":" ranges-specifier + + A server MAY ignore the Range header. However, HTTP/1.1 origin + servers and intermediate caches SHOULD support byte ranges when + possible, since Range supports efficient recovery from partially + failed transfers, and supports efficient partial retrieval of large + entities. + + If the server supports the Range header and the specified range or + ranges are appropriate for the entity: + + o The presence of a Range header in an unconditional GET modifies + what is returned if the GET is otherwise successful. In other + words, the response carries a status code of 206 (Partial + Content) instead of 200 (OK). + + o The presence of a Range header in a conditional GET (a request + using one or both of If-Modified-Since and If-None-Match, or + one or both of If-Unmodified-Since and If-Match) modifies what + is returned if the GET is otherwise successful and the condition + is true. It does not affect the 304 (Not Modified) response + returned if the conditional is false. + + In some cases, it may be more appropriate to use the If-Range header + (see section 14.27) in addition to the Range header. + + If a proxy that supports ranges receives a Range request, forwards + the request to an inbound server, and receives an entire entity in + reply, it SHOULD only return the requested range to its client. It + SHOULD store the entire received response in its cache, if that is + consistent with its cache allocation policies. + +Fielding, et. al. Standards Track [Page 130] + +RFC 2068 HTTP/1.1 January 1997 + +14.37 Referer + + The Referer[sic] request-header field allows the client to specify, + for the server's benefit, the address (URI) of the resource from + which the Request-URI was obtained (the "referrer", although the + header field is misspelled.) The Referer request-header allows a + server to generate lists of back-links to resources for interest, + logging, optimized caching, etc. It also allows obsolete or mistyped + links to be traced for maintenance. The Referer field MUST NOT be + sent if the Request-URI was obtained from a source that does not have + its own URI, such as input from the user keyboard. + + Referer = "Referer" ":" ( absoluteURI | relativeURI ) + + Example: + + Referer: http://www.w3.org/hypertext/DataSources/Overview.html + + If the field value is a partial URI, it SHOULD be interpreted + relative to the Request-URI. The URI MUST NOT include a fragment. + + Note: Because the source of a link may be private information or + may reveal an otherwise private information source, it is strongly + recommended that the user be able to select whether or not the + Referer field is sent. For example, a browser client could have a + toggle switch for browsing openly/anonymously, which would + respectively enable/disable the sending of Referer and From + information. + +14.38 Retry-After + + The Retry-After response-header field can be used with a 503 (Service + Unavailable) response to indicate how long the service is expected to + be unavailable to the requesting client. The value of this field can + be either an HTTP-date or an integer number of seconds (in decimal) + after the time of the response. + + Retry-After = "Retry-After" ":" ( HTTP-date | delta-seconds ) + + Two examples of its use are + + Retry-After: Fri, 31 Dec 1999 23:59:59 GMT + Retry-After: 120 + + In the latter example, the delay is 2 minutes. + +Fielding, et. al. Standards Track [Page 131] + +RFC 2068 HTTP/1.1 January 1997 + +14.39 Server + + The Server response-header field contains information about the + software used by the origin server to handle the request. The field + can contain multiple product tokens (section 3.8) and comments + identifying the server and any significant subproducts. The product + tokens are listed in order of their significance for identifying the + application. + + Server = "Server" ":" 1*( product | comment ) + + Example: + + Server: CERN/3.0 libwww/2.17 + + If the response is being forwarded through a proxy, the proxy + application MUST NOT modify the Server response-header. Instead, it + SHOULD include a Via field (as described in section 14.44). + + Note: Revealing the specific software version of the server may + allow the server machine to become more vulnerable to attacks + against software that is known to contain security holes. Server + implementers are encouraged to make this field a configurable + option. + +14.40 Transfer-Encoding + + The Transfer-Encoding general-header field indicates what (if any) + type of transformation has been applied to the message body in order + to safely transfer it between the sender and the recipient. This + differs from the Content-Encoding in that the transfer coding is a + property of the message, not of the entity. + + Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer- + coding + + Transfer codings are defined in section 3.6. An example is: + + Transfer-Encoding: chunked + + Many older HTTP/1.0 applications do not understand the Transfer- + Encoding header. + +14.41 Upgrade + + The Upgrade general-header allows the client to specify what + additional communication protocols it supports and would like to use + if the server finds it appropriate to switch protocols. The server + +Fielding, et. al. Standards Track [Page 132] + +RFC 2068 HTTP/1.1 January 1997 + + MUST use the Upgrade header field within a 101 (Switching Protocols) + response to indicate which protocol(s) are being switched. + + Upgrade = "Upgrade" ":" 1#product + + For example, + + Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 + + The Upgrade header field is intended to provide a simple mechanism + for transition from HTTP/1.1 to some other, incompatible protocol. It + does so by allowing the client to advertise its desire to use another + protocol, such as a later version of HTTP with a higher major version + number, even though the current request has been made using HTTP/1.1. + This eases the difficult transition between incompatible protocols by + allowing the client to initiate a request in the more commonly + supported protocol while indicating to the server that it would like + to use a "better" protocol if available (where "better" is determined + by the server, possibly according to the nature of the method and/or + resource being requested). + + The Upgrade header field only applies to switching application-layer + protocols upon the existing transport-layer connection. Upgrade + cannot be used to insist on a protocol change; its acceptance and use + by the server is optional. The capabilities and nature of the + application-layer communication after the protocol change is entirely + dependent upon the new protocol chosen, although the first action + after changing the protocol MUST be a response to the initial HTTP + request containing the Upgrade header field. + + The Upgrade header field only applies to the immediate connection. + Therefore, the upgrade keyword MUST be supplied within a Connection + header field (section 14.10) whenever Upgrade is present in an + HTTP/1.1 message. + + The Upgrade header field cannot be used to indicate a switch to a + protocol on a different connection. For that purpose, it is more + appropriate to use a 301, 302, 303, or 305 redirection response. + + This specification only defines the protocol name "HTTP" for use by + the family of Hypertext Transfer Protocols, as defined by the HTTP + version rules of section 3.1 and future updates to this + specification. Any token can be used as a protocol name; however, it + will only be useful if both the client and server associate the name + with the same protocol. + +Fielding, et. al. Standards Track [Page 133] + +RFC 2068 HTTP/1.1 January 1997 + +14.42 User-Agent + + The User-Agent request-header field contains information about the + user agent originating the request. This is for statistical purposes, + the tracing of protocol violations, and automated recognition of user + agents for the sake of tailoring responses to avoid particular user + agent limitations. User agents SHOULD include this field with + requests. The field can contain multiple product tokens (section 3.8) + and comments identifying the agent and any subproducts which form a + significant part of the user agent. By convention, the product tokens + are listed in order of their significance for identifying the + application. + + User-Agent = "User-Agent" ":" 1*( product | comment ) + + Example: + + User-Agent: CERN-LineMode/2.15 libwww/2.17b3 + +14.43 Vary + + The Vary response-header field is used by a server to signal that the + response entity was selected from the available representations of + the response using server-driven negotiation (section 12). Field- + names listed in Vary headers are those of request-headers. The Vary + field value indicates either that the given set of header fields + encompass the dimensions over which the representation might vary, or + that the dimensions of variance are unspecified ("*") and thus may + vary over any aspect of future requests. + + Vary = "Vary" ":" ( "*" | 1#field-name ) + + An HTTP/1.1 server MUST include an appropriate Vary header field with + any cachable response that is subject to server-driven negotiation. + Doing so allows a cache to properly interpret future requests on that + resource and informs the user agent about the presence of negotiation + on that resource. A server SHOULD include an appropriate Vary header + field with a non-cachable response that is subject to server-driven + negotiation, since this might provide the user agent with useful + information about the dimensions over which the response might vary. + + The set of header fields named by the Vary field value is known as + the "selecting" request-headers. + + When the cache receives a subsequent request whose Request-URI + specifies one or more cache entries including a Vary header, the + cache MUST NOT use such a cache entry to construct a response to the + new request unless all of the headers named in the cached Vary header + +Fielding, et. al. Standards Track [Page 134] + +RFC 2068 HTTP/1.1 January 1997 + + are present in the new request, and all of the stored selecting + request-headers from the previous request match the corresponding + headers in the new request. + + The selecting request-headers from two requests are defined to match + if and only if the selecting request-headers in the first request can + be transformed to the selecting request-headers in the second request + by adding or removing linear whitespace (LWS) at places where this is + allowed by the corresponding BNF, and/or combining multiple message- + header fields with the same field name following the rules about + message headers in section 4.2. + + A Vary field value of "*" signals that unspecified parameters, + possibly other than the contents of request-header fields (e.g., the + network address of the client), play a role in the selection of the + response representation. Subsequent requests on that resource can + only be properly interpreted by the origin server, and thus a cache + MUST forward a (possibly conditional) request even when it has a + fresh response cached for the resource. See section 13.6 for use of + the Vary header by caches. + + A Vary field value consisting of a list of field-names signals that + the representation selected for the response is based on a selection + algorithm which considers ONLY the listed request-header field values + in selecting the most appropriate representation. A cache MAY assume + that the same selection will be made for future requests with the + same values for the listed field names, for the duration of time in + which the response is fresh. + + The field-names given are not limited to the set of standard + request-header fields defined by this specification. Field names are + case-insensitive. + +14.44 Via + + The Via general-header field MUST be used by gateways and proxies to + indicate the intermediate protocols and recipients between the user + agent and the server on requests, and between the origin server and + the client on responses. It is analogous to the "Received" field of + RFC 822 and is intended to be used for tracking message forwards, + avoiding request loops, and identifying the protocol capabilities of + all senders along the request/response chain. + +Fielding, et. al. Standards Track [Page 135] + +RFC 2068 HTTP/1.1 January 1997 + + Via = "Via" ":" 1#( received-protocol received-by [ comment ] ) + + received-protocol = [ protocol-name "/" ] protocol-version + protocol-name = token + protocol-version = token + received-by = ( host [ ":" port ] ) | pseudonym + pseudonym = token + + The received-protocol indicates the protocol version of the message + received by the server or client along each segment of the + request/response chain. The received-protocol version is appended to + the Via field value when the message is forwarded so that information + about the protocol capabilities of upstream applications remains + visible to all recipients. + + The protocol-name is optional if and only if it would be "HTTP". The + received-by field is normally the host and optional port number of a + recipient server or client that subsequently forwarded the message. + However, if the real host is considered to be sensitive information, + it MAY be replaced by a pseudonym. If the port is not given, it MAY + be assumed to be the default port of the received-protocol. + + Multiple Via field values represent each proxy or gateway that has + forwarded the message. Each recipient MUST append its information + such that the end result is ordered according to the sequence of + forwarding applications. + + Comments MAY be used in the Via header field to identify the software + of the recipient proxy or gateway, analogous to the User-Agent and + Server header fields. However, all comments in the Via field are + optional and MAY be removed by any recipient prior to forwarding the + message. + + For example, a request message could be sent from an HTTP/1.0 user + agent to an internal proxy code-named "fred", which uses HTTP/1.1 to + forward the request to a public proxy at nowhere.com, which completes + the request by forwarding it to the origin server at www.ics.uci.edu. + The request received by www.ics.uci.edu would then have the following + Via header field: + + Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) + + Proxies and gateways used as a portal through a network firewall + SHOULD NOT, by default, forward the names and ports of hosts within + the firewall region. This information SHOULD only be propagated if + explicitly enabled. If not enabled, the received-by host of any host + behind the firewall SHOULD be replaced by an appropriate pseudonym + for that host. + +Fielding, et. al. Standards Track [Page 136] + +RFC 2068 HTTP/1.1 January 1997 + + For organizations that have strong privacy requirements for hiding + internal structures, a proxy MAY combine an ordered subsequence of + Via header field entries with identical received-protocol values into + a single such entry. For example, + + Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy + + could be collapsed to + + Via: 1.0 ricky, 1.1 mertz, 1.0 lucy + + Applications SHOULD NOT combine multiple entries unless they are all + under the same organizational control and the hosts have already been + replaced by pseudonyms. Applications MUST NOT combine entries which + have different received-protocol values. + +14.45 Warning + + The Warning response-header field is used to carry additional + information about the status of a response which may not be reflected + by the response status code. This information is typically, though + not exclusively, used to warn about a possible lack of semantic + transparency from caching operations. + + Warning headers are sent with responses using: + + Warning = "Warning" ":" 1#warning-value + + warning-value = warn-code SP warn-agent SP warn-text + warn-code = 2DIGIT + warn-agent = ( host [ ":" port ] ) | pseudonym + ; the name or pseudonym of the server adding + ; the Warning header, for use in debugging + warn-text = quoted-string + + A response may carry more than one Warning header. + + The warn-text should be in a natural language and character set that + is most likely to be intelligible to the human user receiving the + response. This decision may be based on any available knowledge, + such as the location of the cache or user, the Accept-Language field + in a request, the Content-Language field in a response, etc. The + default language is English and the default character set is ISO- + 8859-1. + + If a character set other than ISO-8859-1 is used, it MUST be encoded + in the warn-text using the method described in RFC 1522 [14]. + +Fielding, et. al. Standards Track [Page 137] + +RFC 2068 HTTP/1.1 January 1997 + + Any server or cache may add Warning headers to a response. New + Warning headers should be added after any existing Warning headers. A + cache MUST NOT delete any Warning header that it received with a + response. However, if a cache successfully validates a cache entry, + it SHOULD remove any Warning headers previously attached to that + entry except as specified for specific Warning codes. It MUST then + add any Warning headers received in the validating response. In other + words, Warning headers are those that would be attached to the most + recent relevant response. + + When multiple Warning headers are attached to a response, the user + agent SHOULD display as many of them as possible, in the order that + they appear in the response. If it is not possible to display all of + the warnings, the user agent should follow these heuristics: + + o Warnings that appear early in the response take priority over those + appearing later in the response. + o Warnings in the user's preferred character set take priority over + warnings in other character sets but with identical warn-codes and + warn-agents. + + Systems that generate multiple Warning headers should order them with + this user agent behavior in mind. + + This is a list of the currently-defined warn-codes, each with a + recommended warn-text in English, and a description of its meaning. + +10 Response is stale + MUST be included whenever the returned response is stale. A cache may + add this warning to any response, but may never remove it until the + response is known to be fresh. + +11 Revalidation failed + MUST be included if a cache returns a stale response because an + attempt to revalidate the response failed, due to an inability to + reach the server. A cache may add this warning to any response, but + may never remove it until the response is successfully revalidated. + +12 Disconnected operation + SHOULD be included if the cache is intentionally disconnected from + the rest of the network for a period of time. + +13 Heuristic expiration + MUST be included if the cache heuristically chose a freshness + lifetime greater than 24 hours and the response's age is greater than + 24 hours. + +Fielding, et. al. Standards Track [Page 138] + +RFC 2068 HTTP/1.1 January 1997 + +14 Transformation applied + MUST be added by an intermediate cache or proxy if it applies any + transformation changing the content-coding (as specified in the + Content-Encoding header) or media-type (as specified in the + Content-Type header) of the response, unless this Warning code + already appears in the response. MUST NOT be deleted from a response + even after revalidation. + +99 Miscellaneous warning + The warning text may include arbitrary information to be presented to + a human user, or logged. A system receiving this warning MUST NOT + take any automated action. + +14.46 WWW-Authenticate + + The WWW-Authenticate response-header field MUST be included in 401 + (Unauthorized) response messages. The field value consists of at + least one challenge that indicates the authentication scheme(s) and + parameters applicable to the Request-URI. + + WWW-Authenticate = "WWW-Authenticate" ":" 1#challenge + + The HTTP access authentication process is described in section 11. + User agents MUST take special care in parsing the WWW-Authenticate + field value if it contains more than one challenge, or if more than + one WWW-Authenticate header field is provided, since the contents of + a challenge may itself contain a comma-separated list of + authentication parameters. + +15 Security Considerations + + This section is meant to inform application developers, information + providers, and users of the security limitations in HTTP/1.1 as + described by this document. The discussion does not include + definitive solutions to the problems revealed, though it does make + some suggestions for reducing security risks. + +15.1 Authentication of Clients + + The Basic authentication scheme is not a secure method of user + authentication, nor does it in any way protect the entity, which is + transmitted in clear text across the physical network used as the + carrier. HTTP does not prevent additional authentication schemes and + encryption mechanisms from being employed to increase security or the + addition of enhancements (such as schemes to use one-time passwords) + to Basic authentication. + +Fielding, et. al. Standards Track [Page 139] + +RFC 2068 HTTP/1.1 January 1997 + + The most serious flaw in Basic authentication is that it results in + the essentially clear text transmission of the user's password over + the physical network. It is this problem which Digest Authentication + attempts to address. + + Because Basic authentication involves the clear text transmission of + passwords it SHOULD never be used (without enhancements) to protect + sensitive or valuable information. + + A common use of Basic authentication is for identification purposes + -- requiring the user to provide a user name and password as a means + of identification, for example, for purposes of gathering accurate + usage statistics on a server. When used in this way it is tempting to + think that there is no danger in its use if illicit access to the + protected documents is not a major concern. This is only correct if + the server issues both user name and password to the users and in + particular does not allow the user to choose his or her own password. + The danger arises because naive users frequently reuse a single + password to avoid the task of maintaining multiple passwords. + + If a server permits users to select their own passwords, then the + threat is not only illicit access to documents on the server but also + illicit access to the accounts of all users who have chosen to use + their account password. If users are allowed to choose their own + password that also means the server must maintain files containing + the (presumably encrypted) passwords. Many of these may be the + account passwords of users perhaps at distant sites. The owner or + administrator of such a system could conceivably incur liability if + this information is not maintained in a secure fashion. + + Basic Authentication is also vulnerable to spoofing by counterfeit + servers. If a user can be led to believe that he is connecting to a + host containing information protected by basic authentication when in + fact he is connecting to a hostile server or gateway then the + attacker can request a password, store it for later use, and feign an + error. This type of attack is not possible with Digest Authentication + [32]. Server implementers SHOULD guard against the possibility of + this sort of counterfeiting by gateways or CGI scripts. In particular + it is very dangerous for a server to simply turn over a connection to + a gateway since that gateway can then use the persistent connection + mechanism to engage in multiple transactions with the client while + impersonating the original server in a way that is not detectable by + the client. + +15.2 Offering a Choice of Authentication Schemes + + An HTTP/1.1 server may return multiple challenges with a 401 + (Authenticate) response, and each challenge may use a different + +Fielding, et. al. Standards Track [Page 140] + +RFC 2068 HTTP/1.1 January 1997 + + scheme. The order of the challenges returned to the user agent is in + the order that the server would prefer they be chosen. The server + should order its challenges with the "most secure" authentication + scheme first. A user agent should choose as the challenge to be made + to the user the first one that the user agent understands. + + When the server offers choices of authentication schemes using the + WWW-Authenticate header, the "security" of the authentication is only + as malicious user could capture the set of challenges and try to + authenticate him/herself using the weakest of the authentication + schemes. Thus, the ordering serves more to protect the user's + credentials than the server's information. + + A possible man-in-the-middle (MITM) attack would be to add a weak + authentication scheme to the set of choices, hoping that the client + will use one that exposes the user's credentials (e.g. password). For + this reason, the client should always use the strongest scheme that + it understands from the choices accepted. + + An even better MITM attack would be to remove all offered choices, + and to insert a challenge that requests Basic authentication. For + this reason, user agents that are concerned about this kind of attack + could remember the strongest authentication scheme ever requested by + a server and produce a warning message that requires user + confirmation before using a weaker one. A particularly insidious way + to mount such a MITM attack would be to offer a "free" proxy caching + service to gullible users. + +15.3 Abuse of Server Log Information + + A server is in the position to save personal data about a user's + requests which may identify their reading patterns or subjects of + interest. This information is clearly confidential in nature and its + handling may be constrained by law in certain countries. People using + the HTTP protocol to provide data are responsible for ensuring that + such material is not distributed without the permission of any + individuals that are identifiable by the published results. + +15.4 Transfer of Sensitive Information + + Like any generic data transfer protocol, HTTP cannot regulate the + content of the data that is transferred, nor is there any a priori + method of determining the sensitivity of any particular piece of + information within the context of any given request. Therefore, + applications SHOULD supply as much control over this information as + possible to the provider of that information. Four header fields are + worth special mention in this context: Server, Via, Referer and From. + +Fielding, et. al. Standards Track [Page 141] + +RFC 2068 HTTP/1.1 January 1997 + + Revealing the specific software version of the server may allow the + server machine to become more vulnerable to attacks against software + that is known to contain security holes. Implementers SHOULD make the + Server header field a configurable option. + + Proxies which serve as a portal through a network firewall SHOULD + take special precautions regarding the transfer of header information + that identifies the hosts behind the firewall. In particular, they + SHOULD remove, or replace with sanitized versions, any Via fields + generated behind the firewall. + + The Referer field allows reading patterns to be studied and reverse + links drawn. Although it can be very useful, its power can be abused + if user details are not separated from the information contained in + the Referer. Even when the personal information has been removed, the + Referer field may indicate a private document's URI whose publication + would be inappropriate. + + The information sent in the From field might conflict with the user's + privacy interests or their site's security policy, and hence it + SHOULD NOT be transmitted without the user being able to disable, + enable, and modify the contents of the field. The user MUST be able + to set the contents of this field within a user preference or + application defaults configuration. + + We suggest, though do not require, that a convenient toggle interface + be provided for the user to enable or disable the sending of From and + Referer information. + +15.5 Attacks Based On File and Path Names + + Implementations of HTTP origin servers SHOULD be careful to restrict + the documents returned by HTTP requests to be only those that were + intended by the server administrators. If an HTTP server translates + HTTP URIs directly into file system calls, the server MUST take + special care not to serve files that were not intended to be + delivered to HTTP clients. For example, UNIX, Microsoft Windows, and + other operating systems use ".." as a path component to indicate a + directory level above the current one. On such a system, an HTTP + server MUST disallow any such construct in the Request-URI if it + would otherwise allow access to a resource outside those intended to + be accessible via the HTTP server. Similarly, files intended for + reference only internally to the server (such as access control + files, configuration files, and script code) MUST be protected from + inappropriate retrieval, since they might contain sensitive + information. Experience has shown that minor bugs in such HTTP server + implementations have turned into security risks. + +Fielding, et. al. Standards Track [Page 142] + +RFC 2068 HTTP/1.1 January 1997 + +15.6 Personal Information + + HTTP clients are often privy to large amounts of personal information + (e.g. the user's name, location, mail address, passwords, encryption + keys, etc.), and SHOULD be very careful to prevent unintentional + leakage of this information via the HTTP protocol to other sources. + We very strongly recommend that a convenient interface be provided + for the user to control dissemination of such information, and that + designers and implementers be particularly careful in this area. + History shows that errors in this area are often both serious + security and/or privacy problems, and often generate highly adverse + publicity for the implementer's company. + +15.7 Privacy Issues Connected to Accept Headers + + Accept request-headers can reveal information about the user to all + servers which are accessed. The Accept-Language header in particular + can reveal information the user would consider to be of a private + nature, because the understanding of particular languages is often + strongly correlated to the membership of a particular ethnic group. + User agents which offer the option to configure the contents of an + Accept-Language header to be sent in every request are strongly + encouraged to let the configuration process include a message which + makes the user aware of the loss of privacy involved. + + An approach that limits the loss of privacy would be for a user agent + to omit the sending of Accept-Language headers by default, and to ask + the user whether it should start sending Accept-Language headers to a + server if it detects, by looking for any Vary response-header fields + generated by the server, that such sending could improve the quality + of service. + + Elaborate user-customized accept header fields sent in every request, + in particular if these include quality values, can be used by servers + as relatively reliable and long-lived user identifiers. Such user + identifiers would allow content providers to do click-trail tracking, + and would allow collaborating content providers to match cross-server + click-trails or form submissions of individual users. Note that for + many users not behind a proxy, the network address of the host + running the user agent will also serve as a long-lived user + identifier. In environments where proxies are used to enhance + privacy, user agents should be conservative in offering accept header + configuration options to end users. As an extreme privacy measure, + proxies could filter the accept headers in relayed requests. General + purpose user agents which provide a high degree of header + configurability should warn users about the loss of privacy which can + be involved. + +Fielding, et. al. Standards Track [Page 143] + +RFC 2068 HTTP/1.1 January 1997 + +15.8 DNS Spoofing + + Clients using HTTP rely heavily on the Domain Name Service, and are + thus generally prone to security attacks based on the deliberate + mis-association of IP addresses and DNS names. Clients need to be + cautious in assuming the continuing validity of an IP number/DNS name + association. + + In particular, HTTP clients SHOULD rely on their name resolver for + confirmation of an IP number/DNS name association, rather than + caching the result of previous host name lookups. Many platforms + already can cache host name lookups locally when appropriate, and + they SHOULD be configured to do so. These lookups should be cached, + however, only when the TTL (Time To Live) information reported by the + name server makes it likely that the cached information will remain + useful. + + If HTTP clients cache the results of host name lookups in order to + achieve a performance improvement, they MUST observe the TTL + information reported by DNS. + + If HTTP clients do not observe this rule, they could be spoofed when + a previously-accessed server's IP address changes. As network + renumbering is expected to become increasingly common, the + possibility of this form of attack will grow. Observing this + requirement thus reduces this potential security vulnerability. + + This requirement also improves the load-balancing behavior of clients + for replicated servers using the same DNS name and reduces the + likelihood of a user's experiencing failure in accessing sites which + use that strategy. + +15.9 Location Headers and Spoofing + + If a single server supports multiple organizations that do not trust + one another, then it must check the values of Location and Content- + Location headers in responses that are generated under control of + said organizations to make sure that they do not attempt to + invalidate resources over which they have no authority. + +16 Acknowledgments + + This specification makes heavy use of the augmented BNF and generic + constructs defined by David H. Crocker for RFC 822. Similarly, it + reuses many of the definitions provided by Nathaniel Borenstein and + Ned Freed for MIME. We hope that their inclusion in this + specification will help reduce past confusion over the relationship + between HTTP and Internet mail message formats. + +Fielding, et. al. Standards Track [Page 144] + +RFC 2068 HTTP/1.1 January 1997 + + The HTTP protocol has evolved considerably over the past four years. + It has benefited from a large and active developer community--the + many people who have participated on the www-talk mailing list--and + it is that community which has been most responsible for the success + of HTTP and of the World-Wide Web in general. Marc Andreessen, Robert + Cailliau, Daniel W. Connolly, Bob Denny, John Franks, Jean-Francois + Groff, Phillip M. Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob + McCool, Lou Montulli, Dave Raggett, Tony Sanders, and Marc + VanHeyningen deserve special recognition for their efforts in + defining early aspects of the protocol. + + This document has benefited greatly from the comments of all those + participating in the HTTP-WG. In addition to those already mentioned, + the following individuals have contributed to this specification: + + Gary Adams Albert Lunde + Harald Tveit Alvestrand John C. Mallery + Keith Ball Jean-Philippe Martin-Flatin + Brian Behlendorf Larry Masinter + Paul Burchard Mitra + Maurizio Codogno David Morris + Mike Cowlishaw Gavin Nicol + Roman Czyborra Bill Perry + Michael A. Dolan Jeffrey Perry + David J. Fiander Scott Powers + Alan Freier Owen Rees + Marc Hedlund Luigi Rizzo + Greg Herlihy David Robinson + Koen Holtman Marc Salomon + Alex Hopmann Rich Salz + Bob Jernigan Allan M. Schiffman + Shel Kaphan Jim Seidman + Rohit Khare Chuck Shotton + John Klensin Eric W. Sink + Martijn Koster Simon E. Spero + Alexei Kosut Richard N. Taylor + David M. Kristol Robert S. Thau + Daniel LaLiberte Bill (BearHeart) Weinman + Ben Laurie Francois Yergeau + Paul J. Leach Mary Ellen Zurko + Daniel DuBois + + Much of the content and presentation of the caching design is due to + suggestions and comments from individuals including: Shel Kaphan, + Paul Leach, Koen Holtman, David Morris, and Larry Masinter. + +Fielding, et. al. Standards Track [Page 145] + +RFC 2068 HTTP/1.1 January 1997 + + Most of the specification of ranges is based on work originally done + by Ari Luotonen and John Franks, with additional input from Steve + Zilles. + + Thanks to the "cave men" of Palo Alto. You know who you are. + + Jim Gettys (the current editor of this document) wishes particularly + to thank Roy Fielding, the previous editor of this document, along + with John Klensin, Jeff Mogul, Paul Leach, Dave Kristol, Koen + Holtman, John Franks, Alex Hopmann, and Larry Masinter for their + help. + +17 References + + [1] Alvestrand, H., "Tags for the identification of languages", RFC + 1766, UNINETT, March 1995. + + [2] Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., Torrey, + D., and B. Alberti. "The Internet Gopher Protocol: (a distributed + document search and retrieval protocol)", RFC 1436, University of + Minnesota, March 1993. + + [3] Berners-Lee, T., "Universal Resource Identifiers in WWW", A + Unifying Syntax for the Expression of Names and Addresses of Objects + on the Network as used in the World-Wide Web", RFC 1630, CERN, June + 1994. + + [4] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform Resource + Locators (URL)", RFC 1738, CERN, Xerox PARC, University of Minnesota, + December 1994. + + [5] Berners-Lee, T., and D. Connolly, "HyperText Markup Language + Specification - 2.0", RFC 1866, MIT/LCS, November 1995. + + [6] Berners-Lee, T., Fielding, R., and H. Frystyk, "Hypertext + Transfer Protocol -- HTTP/1.0.", RFC 1945 MIT/LCS, UC Irvine, May + 1996. + + [7] Freed, N., and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part One: Format of Internet Message Bodies", RFC + 2045, Innosoft, First Virtual, November 1996. + + [8] Braden, R., "Requirements for Internet hosts - application and + support", STD 3, RFC 1123, IETF, October 1989. + + [9] Crocker, D., "Standard for the Format of ARPA Internet Text + Messages", STD 11, RFC 822, UDEL, August 1982. + +Fielding, et. al. Standards Track [Page 146] + +RFC 2068 HTTP/1.1 January 1997 + + [10] Davis, F., Kahle, B., Morris, H., Salem, J., Shen, T., Wang, R., + Sui, J., and M. Grinbaum. "WAIS Interface Protocol Prototype + Functional Specification", (v1.5), Thinking Machines Corporation, + April 1990. + + [11] Fielding, R., "Relative Uniform Resource Locators", RFC 1808, UC + Irvine, June 1995. + + [12] Horton, M., and R. Adams. "Standard for interchange of USENET + messages", RFC 1036, AT&T Bell Laboratories, Center for Seismic + Studies, December 1987. + + [13] Kantor, B., and P. Lapsley. "Network News Transfer Protocol." A + Proposed Standard for the Stream-Based Transmission of News", RFC + 977, UC San Diego, UC Berkeley, February 1986. + + [14] Moore, K., "MIME (Multipurpose Internet Mail Extensions) Part + Three: Message Header Extensions for Non-ASCII Text", RFC 2047, + University of Tennessee, November 1996. + + [15] Nebel, E., and L. Masinter. "Form-based File Upload in HTML", + RFC 1867, Xerox Corporation, November 1995. + + [16] Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821, + USC/ISI, August 1982. + + [17] Postel, J., "Media Type Registration Procedure", RFC 2048, + USC/ISI, November 1996. + + [18] Postel, J., and J. Reynolds, "File Transfer Protocol (FTP)", STD + 9, RFC 959, USC/ISI, October 1985. + + [19] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC + 1700, USC/ISI, October 1994. + + [20] Sollins, K., and L. Masinter, "Functional Requirements for + Uniform Resource Names", RFC 1737, MIT/LCS, Xerox Corporation, + December 1994. + + [21] US-ASCII. Coded Character Set - 7-Bit American Standard Code for + Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986. + + [22] ISO-8859. International Standard -- Information Processing -- + 8-bit Single-Byte Coded Graphic Character Sets -- + Part 1: Latin alphabet No. 1, ISO 8859-1:1987. + Part 2: Latin alphabet No. 2, ISO 8859-2, 1987. + Part 3: Latin alphabet No. 3, ISO 8859-3, 1988. + Part 4: Latin alphabet No. 4, ISO 8859-4, 1988. + +Fielding, et. al. Standards Track [Page 147] + +RFC 2068 HTTP/1.1 January 1997 + + Part 5: Latin/Cyrillic alphabet, ISO 8859-5, 1988. + Part 6: Latin/Arabic alphabet, ISO 8859-6, 1987. + Part 7: Latin/Greek alphabet, ISO 8859-7, 1987. + Part 8: Latin/Hebrew alphabet, ISO 8859-8, 1988. + Part 9: Latin alphabet No. 5, ISO 8859-9, 1990. + + [23] Meyers, J., and M. Rose "The Content-MD5 Header Field", RFC + 1864, Carnegie Mellon, Dover Beach Consulting, October, 1995. + + [24] Carpenter, B., and Y. Rekhter, "Renumbering Needs Work", RFC + 1900, IAB, February 1996. + + [25] Deutsch, P., "GZIP file format specification version 4.3." RFC + 1952, Aladdin Enterprises, May 1996. + + [26] Venkata N. Padmanabhan and Jeffrey C. Mogul. Improving HTTP + Latency. Computer Networks and ISDN Systems, v. 28, pp. 25-35, Dec. + 1995. Slightly revised version of paper in Proc. 2nd International + WWW Conf. '94: Mosaic and the Web, Oct. 1994, which is available at + http://www.ncsa.uiuc.edu/SDG/IT94/Proceedings/DDay/mogul/ + HTTPLatency.html. + + [27] Joe Touch, John Heidemann, and Katia Obraczka, "Analysis of HTTP + Performance", , + USC/Information Sciences Institute, June 1996 + + [28] Mills, D., "Network Time Protocol, Version 3, Specification, + Implementation and Analysis", RFC 1305, University of Delaware, March + 1992. + + [29] Deutsch, P., "DEFLATE Compressed Data Format Specification + version 1.3." RFC 1951, Aladdin Enterprises, May 1996. + + [30] Spero, S., "Analysis of HTTP Performance Problems" + . + + [31] Deutsch, P., and J-L. Gailly, "ZLIB Compressed Data Format + Specification version 3.3", RFC 1950, Aladdin Enterprises, Info-ZIP, + May 1996. + + [32] Franks, J., Hallam-Baker, P., Hostetler, J., Leach, P., + Luotonen, A., Sink, E., and L. Stewart, "An Extension to HTTP : + Digest Access Authentication", RFC 2069, January 1997. + +Fielding, et. al. Standards Track [Page 148] + +RFC 2068 HTTP/1.1 January 1997 + +18 Authors' Addresses + + Roy T. Fielding + Department of Information and Computer Science + University of California + Irvine, CA 92717-3425, USA + + Fax: +1 (714) 824-4056 + EMail: fielding@ics.uci.edu + + Jim Gettys + MIT Laboratory for Computer Science + 545 Technology Square + Cambridge, MA 02139, USA + + Fax: +1 (617) 258 8682 + EMail: jg@w3.org + + Jeffrey C. Mogul + Western Research Laboratory + Digital Equipment Corporation + 250 University Avenue + Palo Alto, California, 94305, USA + + EMail: mogul@wrl.dec.com + + Henrik Frystyk Nielsen + W3 Consortium + MIT Laboratory for Computer Science + 545 Technology Square + Cambridge, MA 02139, USA + + Fax: +1 (617) 258 8682 + EMail: frystyk@w3.org + + Tim Berners-Lee + Director, W3 Consortium + MIT Laboratory for Computer Science + 545 Technology Square + Cambridge, MA 02139, USA + + Fax: +1 (617) 258 8682 + EMail: timbl@w3.org + +Fielding, et. al. Standards Track [Page 149] + +RFC 2068 HTTP/1.1 January 1997 + +19 Appendices + +19.1 Internet Media Type message/http + + In addition to defining the HTTP/1.1 protocol, this document serves + as the specification for the Internet media type "message/http". The + following is to be registered with IANA. + + Media Type name: message + Media subtype name: http + Required parameters: none + Optional parameters: version, msgtype + + version: The HTTP-Version number of the enclosed message + (e.g., "1.1"). If not present, the version can be + determined from the first line of the body. + + msgtype: The message type -- "request" or "response". If not + present, the type can be determined from the first + line of the body. + + Encoding considerations: only "7bit", "8bit", or "binary" are + permitted + + Security considerations: none + +19.2 Internet Media Type multipart/byteranges + + When an HTTP message includes the content of multiple ranges (for + example, a response to a request for multiple non-overlapping + ranges), these are transmitted as a multipart MIME message. The + multipart media type for this purpose is called + "multipart/byteranges". + + The multipart/byteranges media type includes two or more parts, each + with its own Content-Type and Content-Range fields. The parts are + separated using a MIME boundary parameter. + + Media Type name: multipart + Media subtype name: byteranges + Required parameters: boundary + Optional parameters: none + + Encoding considerations: only "7bit", "8bit", or "binary" are + permitted + + Security considerations: none + +Fielding, et. al. Standards Track [Page 150] + +RFC 2068 HTTP/1.1 January 1997 + +For example: + + HTTP/1.1 206 Partial content + Date: Wed, 15 Nov 1995 06:25:24 GMT + Last-modified: Wed, 15 Nov 1995 04:58:08 GMT + Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES + + --THIS_STRING_SEPARATES + Content-type: application/pdf + Content-range: bytes 500-999/8000 + + ...the first range... + --THIS_STRING_SEPARATES + Content-type: application/pdf + Content-range: bytes 7000-7999/8000 + + ...the second range + --THIS_STRING_SEPARATES-- + +19.3 Tolerant Applications + + Although this document specifies the requirements for the generation + of HTTP/1.1 messages, not all applications will be correct in their + implementation. We therefore recommend that operational applications + be tolerant of deviations whenever those deviations can be + interpreted unambiguously. + + Clients SHOULD be tolerant in parsing the Status-Line and servers + tolerant when parsing the Request-Line. In particular, they SHOULD + accept any amount of SP or HT characters between fields, even though + only a single SP is required. + + The line terminator for message-header fields is the sequence CRLF. + However, we recommend that applications, when parsing such headers, + recognize a single LF as a line terminator and ignore the leading CR. + + The character set of an entity-body should be labeled as the lowest + common denominator of the character codes used within that body, with + the exception that no label is preferred over the labels US-ASCII or + ISO-8859-1. + + Additional rules for requirements on parsing and encoding of dates + and other potential problems with date encodings include: + + o HTTP/1.1 clients and caches should assume that an RFC-850 date + which appears to be more than 50 years in the future is in fact + in the past (this helps solve the "year 2000" problem). + +Fielding, et. al. Standards Track [Page 151] + +RFC 2068 HTTP/1.1 January 1997 + + o An HTTP/1.1 implementation may internally represent a parsed + Expires date as earlier than the proper value, but MUST NOT + internally represent a parsed Expires date as later than the + proper value. + + o All expiration-related calculations must be done in GMT. The + local time zone MUST NOT influence the calculation or comparison + of an age or expiration time. + + o If an HTTP header incorrectly carries a date value with a time + zone other than GMT, it must be converted into GMT using the most + conservative possible conversion. + +19.4 Differences Between HTTP Entities and MIME Entities + + HTTP/1.1 uses many of the constructs defined for Internet Mail (RFC + 822) and the Multipurpose Internet Mail Extensions (MIME ) to allow + entities to be transmitted in an open variety of representations and + with extensible mechanisms. However, MIME [7] discusses mail, and + HTTP has a few features that are different from those described in + MIME. These differences were carefully chosen to optimize + performance over binary connections, to allow greater freedom in the + use of new media types, to make date comparisons easier, and to + acknowledge the practice of some early HTTP servers and clients. + + This appendix describes specific areas where HTTP differs from MIME. + Proxies and gateways to strict MIME environments SHOULD be aware of + these differences and provide the appropriate conversions where + necessary. Proxies and gateways from MIME environments to HTTP also + need to be aware of the differences because some conversions may be + required. + +19.4.1 Conversion to Canonical Form + + MIME requires that an Internet mail entity be converted to canonical + form prior to being transferred. Section 3.7.1 of this document + describes the forms allowed for subtypes of the "text" media type + when transmitted over HTTP. MIME requires that content with a type of + "text" represent line breaks as CRLF and forbids the use of CR or LF + outside of line break sequences. HTTP allows CRLF, bare CR, and bare + LF to indicate a line break within text content when a message is + transmitted over HTTP. + + Where it is possible, a proxy or gateway from HTTP to a strict MIME + environment SHOULD translate all line breaks within the text media + types described in section 3.7.1 of this document to the MIME + canonical form of CRLF. Note, however, that this may be complicated + by the presence of a Content-Encoding and by the fact that HTTP + +Fielding, et. al. Standards Track [Page 152] + +RFC 2068 HTTP/1.1 January 1997 + + allows the use of some character sets which do not use octets 13 and + 10 to represent CR and LF, as is the case for some multi-byte + character sets. + +19.4.2 Conversion of Date Formats + + HTTP/1.1 uses a restricted set of date formats (section 3.3.1) to + simplify the process of date comparison. Proxies and gateways from + other protocols SHOULD ensure that any Date header field present in a + message conforms to one of the HTTP/1.1 formats and rewrite the date + if necessary. + +19.4.3 Introduction of Content-Encoding + + MIME does not include any concept equivalent to HTTP/1.1's Content- + Encoding header field. Since this acts as a modifier on the media + type, proxies and gateways from HTTP to MIME-compliant protocols MUST + either change the value of the Content-Type header field or decode + the entity-body before forwarding the message. (Some experimental + applications of Content-Type for Internet mail have used a media-type + parameter of ";conversions=" to perform an equivalent + function as Content-Encoding. However, this parameter is not part of + MIME.) + +19.4.4 No Content-Transfer-Encoding + + HTTP does not use the Content-Transfer-Encoding (CTE) field of MIME. + Proxies and gateways from MIME-compliant protocols to HTTP MUST + remove any non-identity CTE ("quoted-printable" or "base64") encoding + prior to delivering the response message to an HTTP client. + + Proxies and gateways from HTTP to MIME-compliant protocols are + responsible for ensuring that the message is in the correct format + and encoding for safe transport on that protocol, where "safe + transport" is defined by the limitations of the protocol being used. + Such a proxy or gateway SHOULD label the data with an appropriate + Content-Transfer-Encoding if doing so will improve the likelihood of + safe transport over the destination protocol. + +19.4.5 HTTP Header Fields in Multipart Body-Parts + + In MIME, most header fields in multipart body-parts are generally + ignored unless the field name begins with "Content-". In HTTP/1.1, + multipart body-parts may contain any HTTP header fields which are + significant to the meaning of that part. + +Fielding, et. al. Standards Track [Page 153] + +RFC 2068 HTTP/1.1 January 1997 + +19.4.6 Introduction of Transfer-Encoding + + HTTP/1.1 introduces the Transfer-Encoding header field (section + 14.40). Proxies/gateways MUST remove any transfer coding prior to + forwarding a message via a MIME-compliant protocol. + + A process for decoding the "chunked" transfer coding (section 3.6) + can be represented in pseudo-code as: + + length := 0 + read chunk-size, chunk-ext (if any) and CRLF + while (chunk-size > 0) { + read chunk-data and CRLF + append chunk-data to entity-body + length := length + chunk-size + read chunk-size and CRLF + } + read entity-header + while (entity-header not empty) { + append entity-header to existing header fields + read entity-header + } + Content-Length := length + Remove "chunked" from Transfer-Encoding + +19.4.7 MIME-Version + + HTTP is not a MIME-compliant protocol (see appendix 19.4). However, + HTTP/1.1 messages may include a single MIME-Version general-header + field to indicate what version of the MIME protocol was used to + construct the message. Use of the MIME-Version header field indicates + that the message is in full compliance with the MIME protocol. + Proxies/gateways are responsible for ensuring full compliance (where + possible) when exporting HTTP messages to strict MIME environments. + + MIME-Version = "MIME-Version" ":" 1*DIGIT "." 1*DIGIT + + MIME version "1.0" is the default for use in HTTP/1.1. However, + HTTP/1.1 message parsing and semantics are defined by this document + and not the MIME specification. + +19.5 Changes from HTTP/1.0 + + This section summarizes major differences between versions HTTP/1.0 + and HTTP/1.1. + +Fielding, et. al. Standards Track [Page 154] + +RFC 2068 HTTP/1.1 January 1997 + +19.5.1 Changes to Simplify Multi-homed Web Servers and Conserve IP + Addresses + + The requirements that clients and servers support the Host request- + header, report an error if the Host request-header (section 14.23) is + missing from an HTTP/1.1 request, and accept absolute URIs (section + 5.1.2) are among the most important changes defined by this + specification. + + Older HTTP/1.0 clients assumed a one-to-one relationship of IP + addresses and servers; there was no other established mechanism for + distinguishing the intended server of a request than the IP address + to which that request was directed. The changes outlined above will + allow the Internet, once older HTTP clients are no longer common, to + support multiple Web sites from a single IP address, greatly + simplifying large operational Web servers, where allocation of many + IP addresses to a single host has created serious problems. The + Internet will also be able to recover the IP addresses that have been + allocated for the sole purpose of allowing special-purpose domain + names to be used in root-level HTTP URLs. Given the rate of growth of + the Web, and the number of servers already deployed, it is extremely + important that all implementations of HTTP (including updates to + existing HTTP/1.0 applications) correctly implement these + requirements: + + o Both clients and servers MUST support the Host request-header. + + o Host request-headers are required in HTTP/1.1 requests. + + o Servers MUST report a 400 (Bad Request) error if an HTTP/1.1 + request does not include a Host request-header. + + o Servers MUST accept absolute URIs. + +Fielding, et. al. Standards Track [Page 155] + +RFC 2068 HTTP/1.1 January 1997 + +19.6 Additional Features + + This appendix documents protocol elements used by some existing HTTP + implementations, but not consistently and correctly across most + HTTP/1.1 applications. Implementers should be aware of these + features, but cannot rely upon their presence in, or interoperability + with, other HTTP/1.1 applications. Some of these describe proposed + experimental features, and some describe features that experimental + deployment found lacking that are now addressed in the base HTTP/1.1 + specification. + +19.6.1 Additional Request Methods + +19.6.1.1 PATCH + + The PATCH method is similar to PUT except that the entity contains a + list of differences between the original version of the resource + identified by the Request-URI and the desired content of the resource + after the PATCH action has been applied. The list of differences is + in a format defined by the media type of the entity (e.g., + "application/diff") and MUST include sufficient information to allow + the server to recreate the changes necessary to convert the original + version of the resource to the desired version. + + If the request passes through a cache and the Request-URI identifies + a currently cached entity, that entity MUST be removed from the + cache. Responses to this method are not cachable. + + The actual method for determining how the patched resource is placed, + and what happens to its predecessor, is defined entirely by the + origin server. If the original version of the resource being patched + included a Content-Version header field, the request entity MUST + include a Derived-From header field corresponding to the value of the + original Content-Version header field. Applications are encouraged to + use these fields for constructing versioning relationships and + resolving version conflicts. + + PATCH requests must obey the message transmission requirements set + out in section 8.2. + + Caches that implement PATCH should invalidate cached responses as + defined in section 13.10 for PUT. + +19.6.1.2 LINK + + The LINK method establishes one or more Link relationships between + the existing resource identified by the Request-URI and other + existing resources. The difference between LINK and other methods + +Fielding, et. al. Standards Track [Page 156] + +RFC 2068 HTTP/1.1 January 1997 + + allowing links to be established between resources is that the LINK + method does not allow any message-body to be sent in the request and + does not directly result in the creation of new resources. + + If the request passes through a cache and the Request-URI identifies + a currently cached entity, that entity MUST be removed from the + cache. Responses to this method are not cachable. + + Caches that implement LINK should invalidate cached responses as + defined in section 13.10 for PUT. + +19.6.1.3 UNLINK + + The UNLINK method removes one or more Link relationships from the + existing resource identified by the Request-URI. These relationships + may have been established using the LINK method or by any other + method supporting the Link header. The removal of a link to a + resource does not imply that the resource ceases to exist or becomes + inaccessible for future references. + + If the request passes through a cache and the Request-URI identifies + a currently cached entity, that entity MUST be removed from the + cache. Responses to this method are not cachable. + + Caches that implement UNLINK should invalidate cached responses as + defined in section 13.10 for PUT. + +19.6.2 Additional Header Field Definitions + +19.6.2.1 Alternates + + The Alternates response-header field has been proposed as a means for + the origin server to inform the client about other available + representations of the requested resource, along with their + distinguishing attributes, and thus providing a more reliable means + for a user agent to perform subsequent selection of another + representation which better fits the desires of its user (described + as agent-driven negotiation in section 12). + +Fielding, et. al. Standards Track [Page 157] + +RFC 2068 HTTP/1.1 January 1997 + + The Alternates header field is orthogonal to the Vary header field in + that both may coexist in a message without affecting the + interpretation of the response or the available representations. It + is expected that Alternates will provide a significant improvement + over the server-driven negotiation provided by the Vary field for + those resources that vary over common dimensions like type and + language. + + The Alternates header field will be defined in a future + specification. + +19.6.2.2 Content-Version + + The Content-Version entity-header field defines the version tag + associated with a rendition of an evolving entity. Together with the + Derived-From field described in section 19.6.2.3, it allows a group + of people to work simultaneously on the creation of a work as an + iterative process. The field should be used to allow evolution of a + particular work along a single path rather than derived works or + renditions in different representations. + + Content-Version = "Content-Version" ":" quoted-string + + Examples of the Content-Version field include: + + Content-Version: "2.1.2" + Content-Version: "Fred 19950116-12:26:48" + Content-Version: "2.5a4-omega7" + +19.6.2.3 Derived-From + + The Derived-From entity-header field can be used to indicate the + version tag of the resource from which the enclosed entity was + derived before modifications were made by the sender. This field is + used to help manage the process of merging successive changes to a + resource, particularly when such changes are being made in parallel + and from multiple sources. + + Derived-From = "Derived-From" ":" quoted-string + + An example use of the field is: + + Derived-From: "2.1.1" + + The Derived-From field is required for PUT and PATCH requests if the + entity being sent was previously retrieved from the same URI and a + Content-Version header was included with the entity when it was last + retrieved. + +Fielding, et. al. Standards Track [Page 158] + +RFC 2068 HTTP/1.1 January 1997 + +19.6.2.4 Link + + The Link entity-header field provides a means for describing a + relationship between two resources, generally between the requested + resource and some other resource. An entity MAY include multiple Link + values. Links at the metainformation level typically indicate + relationships like hierarchical structure and navigation paths. The + Link field is semantically equivalent to the element in + HTML.[5] + + Link = "Link" ":" #("<" URI ">" *( ";" link-param ) + + link-param = ( ( "rel" "=" relationship ) + | ( "rev" "=" relationship ) + | ( "title" "=" quoted-string ) + | ( "anchor" "=" <"> URI <"> ) + | ( link-extension ) ) + + link-extension = token [ "=" ( token | quoted-string ) ] + + relationship = sgml-name + | ( <"> sgml-name *( SP sgml-name) <"> ) + + sgml-name = ALPHA *( ALPHA | DIGIT | "." | "-" ) + + Relationship values are case-insensitive and MAY be extended within + the constraints of the sgml-name syntax. The title parameter MAY be + used to label the destination of a link such that it can be used as + identification within a human-readable menu. The anchor parameter MAY + be used to indicate a source anchor other than the entire current + resource, such as a fragment of this resource or a third resource. + + Examples of usage include: + + Link: ; rel="Previous" + + Link: ; rev="Made"; title="Tim Berners-Lee" + + The first example indicates that chapter2 is previous to this + resource in a logical navigation path. The second indicates that the + person responsible for making the resource available is identified by + the given e-mail address. + +19.6.2.5 URI + + The URI header field has, in past versions of this specification, + been used as a combination of the existing Location, Content- + Location, and Vary header fields as well as the future Alternates + +Fielding, et. al. Standards Track [Page 159] + +RFC 2068 HTTP/1.1 January 1997 + + field (above). Its primary purpose has been to include a list of + additional URIs for the resource, including names and mirror + locations. However, it has become clear that the combination of many + different functions within this single field has been a barrier to + consistently and correctly implementing any of those functions. + Furthermore, we believe that the identification of names and mirror + locations would be better performed via the Link header field. The + URI header field is therefore deprecated in favor of those other + fields. + + URI-header = "URI" ":" 1#( "<" URI ">" ) + +19.7 Compatibility with Previous Versions + + It is beyond the scope of a protocol specification to mandate + compliance with previous versions. HTTP/1.1 was deliberately + designed, however, to make supporting previous versions easy. It is + worth noting that at the time of composing this specification, we + would expect commercial HTTP/1.1 servers to: + + o recognize the format of the Request-Line for HTTP/0.9, 1.0, and 1.1 + requests; + + o understand any valid request in the format of HTTP/0.9, 1.0, or + 1.1; + + o respond appropriately with a message in the same major version used + by the client. + + And we would expect HTTP/1.1 clients to: + + o recognize the format of the Status-Line for HTTP/1.0 and 1.1 + responses; + + o understand any valid response in the format of HTTP/0.9, 1.0, or + 1.1. + + For most implementations of HTTP/1.0, each connection is established + by the client prior to the request and closed by the server after + sending the response. A few implementations implement the Keep-Alive + version of persistent connections described in section 19.7.1.1. + +Fielding, et. al. Standards Track [Page 160] + +RFC 2068 HTTP/1.1 January 1997 + +19.7.1 Compatibility with HTTP/1.0 Persistent Connections + + Some clients and servers may wish to be compatible with some previous + implementations of persistent connections in HTTP/1.0 clients and + servers. Persistent connections in HTTP/1.0 must be explicitly + negotiated as they are not the default behavior. HTTP/1.0 + experimental implementations of persistent connections are faulty, + and the new facilities in HTTP/1.1 are designed to rectify these + problems. The problem was that some existing 1.0 clients may be + sending Keep-Alive to a proxy server that doesn't understand + Connection, which would then erroneously forward it to the next + inbound server, which would establish the Keep-Alive connection and + result in a hung HTTP/1.0 proxy waiting for the close on the + response. The result is that HTTP/1.0 clients must be prevented from + using Keep-Alive when talking to proxies. + + However, talking to proxies is the most important use of persistent + connections, so that prohibition is clearly unacceptable. Therefore, + we need some other mechanism for indicating a persistent connection + is desired, which is safe to use even when talking to an old proxy + that ignores Connection. Persistent connections are the default for + HTTP/1.1 messages; we introduce a new keyword (Connection: close) for + declaring non-persistence. + + The following describes the original HTTP/1.0 form of persistent + connections. + + When it connects to an origin server, an HTTP client MAY send the + Keep-Alive connection-token in addition to the Persist connection- + token: + + Connection: Keep-Alive + + An HTTP/1.0 server would then respond with the Keep-Alive connection + token and the client may proceed with an HTTP/1.0 (or Keep-Alive) + persistent connection. + + An HTTP/1.1 server may also establish persistent connections with + HTTP/1.0 clients upon receipt of a Keep-Alive connection token. + However, a persistent connection with an HTTP/1.0 client cannot make + use of the chunked transfer-coding, and therefore MUST use a + Content-Length for marking the ending boundary of each message. + + A client MUST NOT send the Keep-Alive connection token to a proxy + server as HTTP/1.0 proxy servers do not obey the rules of HTTP/1.1 + for parsing the Connection header field. + +Fielding, et. al. Standards Track [Page 161] + +RFC 2068 HTTP/1.1 January 1997 + +19.7.1.1 The Keep-Alive Header + + When the Keep-Alive connection-token has been transmitted with a + request or a response, a Keep-Alive header field MAY also be + included. The Keep-Alive header field takes the following form: + + Keep-Alive-header = "Keep-Alive" ":" 0# keepalive-param + + keepalive-param = param-name "=" value + + The Keep-Alive header itself is optional, and is used only if a + parameter is being sent. HTTP/1.1 does not define any parameters. + + If the Keep-Alive header is sent, the corresponding connection token + MUST be transmitted. The Keep-Alive header MUST be ignored if + received without the connection token. + +Fielding, et. al. Standards Track [Page 162] diff --git a/socket/DOCS/RFC821.TXT b/socket/DOCS/RFC821.TXT new file mode 100644 index 0000000..4b45150 --- /dev/null +++ b/socket/DOCS/RFC821.TXT @@ -0,0 +1,4117 @@ + + + + + + SIMPLE MAIL TRANSFER PROTOCOL + + + + Jonathan B. Postel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + August 1982 + + + + Information Sciences Institute + University of Southern California + 4676 Admiralty Way + Marina del Rey, California 90291 + + (213) 822-1511 + + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + TABLE OF CONTENTS + + 1. INTRODUCTION .................................................. 1 + + 2. THE SMTP MODEL ................................................ 2 + + 3. THE SMTP PROCEDURE ............................................ 4 + + 3.1. Mail ..................................................... 4 + 3.2. Forwarding ............................................... 7 + 3.3. Verifying and Expanding .................................. 8 + 3.4. Sending and Mailing ..................................... 11 + 3.5. Opening and Closing ..................................... 13 + 3.6. Relaying ................................................ 14 + 3.7. Domains ................................................. 17 + 3.8. Changing Roles .......................................... 18 + + 4. THE SMTP SPECIFICATIONS ...................................... 19 + + 4.1. SMTP Commands ........................................... 19 + 4.1.1. Command Semantics ..................................... 19 + 4.1.2. Command Syntax ........................................ 27 + 4.2. SMTP Replies ............................................ 34 + 4.2.1. Reply Codes by Function Group ......................... 35 + 4.2.2. Reply Codes in Numeric Order .......................... 36 + 4.3. Sequencing of Commands and Replies ...................... 37 + 4.4. State Diagrams .......................................... 39 + 4.5. Details ................................................. 41 + 4.5.1. Minimum Implementation ................................ 41 + 4.5.2. Transparency .......................................... 41 + 4.5.3. Sizes ................................................. 42 + + APPENDIX A: TCP ................................................. 44 + APPENDIX B: NCP ................................................. 45 + APPENDIX C: NITS ................................................ 46 + APPENDIX D: X.25 ................................................ 47 + APPENDIX E: Theory of Reply Codes ............................... 48 + APPENDIX F: Scenarios ........................................... 51 + + GLOSSARY ......................................................... 64 + + REFERENCES ....................................................... 67 + + + + + +Network Working Group J. Postel +Request for Comments: DRAFT ISI +Replaces: RFC 788, 780, 772 August 1982 + + SIMPLE MAIL TRANSFER PROTOCOL + + +1. INTRODUCTION + + The objective of Simple Mail Transfer Protocol (SMTP) is to transfer + mail reliably and efficiently. + + SMTP is independent of the particular transmission subsystem and + requires only a reliable ordered data stream channel. Appendices A, + B, C, and D describe the use of SMTP with various transport services. + A Glossary provides the definitions of terms as used in this + document. + + An important feature of SMTP is its capability to relay mail across + transport service environments. A transport service provides an + interprocess communication environment (IPCE). An IPCE may cover one + network, several networks, or a subset of a network. It is important + to realize that transport systems (or IPCEs) are not one-to-one with + networks. A process can communicate directly with another process + through any mutually known IPCE. Mail is an application or use of + interprocess communication. Mail can be communicated between + processes in different IPCEs by relaying through a process connected + to two (or more) IPCEs. More specifically, mail can be relayed + between hosts on different transport systems by a host on both + transport systems. + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 1] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +2. THE SMTP MODEL + + The SMTP design is based on the following model of communication: as + the result of a user mail request, the sender-SMTP establishes a + two-way transmission channel to a receiver-SMTP. The receiver-SMTP + may be either the ultimate destination or an intermediate. SMTP + commands are generated by the sender-SMTP and sent to the + receiver-SMTP. SMTP replies are sent from the receiver-SMTP to the + sender-SMTP in response to the commands. + + Once the transmission channel is established, the SMTP-sender sends a + MAIL command indicating the sender of the mail. If the SMTP-receiver + can accept mail it responds with an OK reply. The SMTP-sender then + sends a RCPT command identifying a recipient of the mail. If the + SMTP-receiver can accept mail for that recipient it responds with an + OK reply; if not, it responds with a reply rejecting that recipient + (but not the whole mail transaction). The SMTP-sender and + SMTP-receiver may negotiate several recipients. When the recipients + have been negotiated the SMTP-sender sends the mail data, terminating + with a special sequence. If the SMTP-receiver successfully processes + the mail data it responds with an OK reply. The dialog is purposely + lock-step, one-at-a-time. + + ------------------------------------------------------------- + + + +----------+ +----------+ + +------+ | | | | + | User |<-->| | SMTP | | + +------+ | Sender- |Commands/Replies| Receiver-| + +------+ | SMTP |<-------------->| SMTP | +------+ + | File |<-->| | and Mail | |<-->| File | + |System| | | | | |System| + +------+ +----------+ +----------+ +------+ + + + Sender-SMTP Receiver-SMTP + + Model for SMTP Use + + Figure 1 + + ------------------------------------------------------------- + + The SMTP provides mechanisms for the transmission of mail; directly + from the sending user's host to the receiving user's host when the + + + +[Page 2] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + two host are connected to the same transport service, or via one or + more relay SMTP-servers when the source and destination hosts are not + connected to the same transport service. + + To be able to provide the relay capability the SMTP-server must be + supplied with the name of the ultimate destination host as well as + the destination mailbox name. + + The argument to the MAIL command is a reverse-path, which specifies + who the mail is from. The argument to the RCPT command is a + forward-path, which specifies who the mail is to. The forward-path + is a source route, while the reverse-path is a return route (which + may be used to return a message to the sender when an error occurs + with a relayed message). + + When the same message is sent to multiple recipients the SMTP + encourages the transmission of only one copy of the data for all the + recipients at the same destination host. + + The mail commands and replies have a rigid syntax. Replies also have + a numeric code. In the following, examples appear which use actual + commands and replies. The complete lists of commands and replies + appears in Section 4 on specifications. + + Commands and replies are not case sensitive. That is, a command or + reply word may be upper case, lower case, or any mixture of upper and + lower case. Note that this is not true of mailbox user names. For + some hosts the user name is case sensitive, and SMTP implementations + must take case to preserve the case of user names as they appear in + mailbox arguments. Host names are not case sensitive. + + Commands and replies are composed of characters from the ASCII + character set [1]. When the transport service provides an 8-bit byte + (octet) transmission channel, each 7-bit character is transmitted + right justified in an octet with the high order bit cleared to zero. + + When specifying the general form of a command or reply, an argument + (or special symbol) will be denoted by a meta-linguistic variable (or + constant), for example, "" or "". Here the + angle brackets indicate these are meta-linguistic variables. + However, some arguments use the angle brackets literally. For + example, an actual reverse-path is enclosed in angle brackets, i.e., + "" is an instance of (the + angle brackets are actually transmitted in the command or reply). + + + + + +Postel [Page 3] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +3. THE SMTP PROCEDURES + + This section presents the procedures used in SMTP in several parts. + First comes the basic mail procedure defined as a mail transaction. + Following this are descriptions of forwarding mail, verifying mailbox + names and expanding mailing lists, sending to terminals instead of or + in combination with mailboxes, and the opening and closing exchanges. + At the end of this section are comments on relaying, a note on mail + domains, and a discussion of changing roles. Throughout this section + are examples of partial command and reply sequences, several complete + scenarios are presented in Appendix F. + + 3.1. MAIL + + There are three steps to SMTP mail transactions. The transaction + is started with a MAIL command which gives the sender + identification. A series of one or more RCPT commands follows + giving the receiver information. Then a DATA command gives the + mail data. And finally, the end of mail data indicator confirms + the transaction. + + The first step in the procedure is the MAIL command. The + contains the source mailbox. + + MAIL FROM: + + This command tells the SMTP-receiver that a new mail + transaction is starting and to reset all its state tables and + buffers, including any recipients or mail data. It gives the + reverse-path which can be used to report errors. If accepted, + the receiver-SMTP returns a 250 OK reply. + + The can contain more than just a mailbox. The + is a reverse source routing list of hosts and + source mailbox. The first host in the should be + the host sending this command. + + The second step in the procedure is the RCPT command. + + RCPT TO: + + This command gives a forward-path identifying one recipient. + If accepted, the receiver-SMTP returns a 250 OK reply, and + stores the forward-path. If the recipient is unknown the + receiver-SMTP returns a 550 Failure reply. This second step of + the procedure can be repeated any number of times. + + + +[Page 4] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + The can contain more than just a mailbox. The + is a source routing list of hosts and the + destination mailbox. The first host in the + should be the host receiving this command. + + The third step in the procedure is the DATA command. + + DATA + + If accepted, the receiver-SMTP returns a 354 Intermediate reply + and considers all succeeding lines to be the message text. + When the end of text is received and stored the SMTP-receiver + sends a 250 OK reply. + + Since the mail data is sent on the transmission channel the end + of the mail data must be indicated so that the command and + reply dialog can be resumed. SMTP indicates the end of the + mail data by sending a line containing only a period. A + transparency procedure is used to prevent this from interfering + with the user's text (see Section 4.5.2). + + Please note that the mail data includes the memo header + items such as Date, Subject, To, Cc, From [2]. + + The end of mail data indicator also confirms the mail + transaction and tells the receiver-SMTP to now process the + stored recipients and mail data. If accepted, the + receiver-SMTP returns a 250 OK reply. The DATA command should + fail only if the mail transaction was incomplete (for example, + no recipients), or if resources are not available. + + The above procedure is an example of a mail transaction. These + commands must be used only in the order discussed above. + Example 1 (below) illustrates the use of these commands in a mail + transaction. + + + + + + + + + + + + + + +Postel [Page 5] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example of the SMTP Procedure + + This SMTP example shows mail sent by Smith at host Alpha.ARPA, + to Jones, Green, and Brown at host Beta.ARPA. Here we assume + that host Alpha contacts host Beta directly. + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 550 No such user here + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + The mail has now been accepted for Jones and Brown. Green did + not have a mailbox at host Beta. + + Example 1 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + +[Page 6] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.2. FORWARDING + + There are some cases where the destination information in the + is incorrect, but the receiver-SMTP knows the + correct destination. In such cases, one of the following replies + should be used to allow the sender to contact the correct + destination. + + 251 User not local; will forward to + + This reply indicates that the receiver-SMTP knows the user's + mailbox is on another host and indicates the correct + forward-path to use in the future. Note that either the + host or user or both may be different. The receiver takes + responsibility for delivering the message. + + 551 User not local; please try + + This reply indicates that the receiver-SMTP knows the user's + mailbox is on another host and indicates the correct + forward-path to use. Note that either the host or user or + both may be different. The receiver refuses to accept mail + for this user, and the sender must either redirect the mail + according to the information provided or return an error + response to the originating user. + + Example 2 illustrates the use of these responses. + + ------------------------------------------------------------- + + Example of Forwarding + + Either + + S: RCPT TO: + R: 251 User not local; will forward to + + Or + + S: RCPT TO: + R: 551 User not local; please try + + Example 2 + + ------------------------------------------------------------- + + + + +Postel [Page 7] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 3.3. VERIFYING AND EXPANDING + + SMTP provides as additional features, commands to verify a user + name or expand a mailing list. This is done with the VRFY and + EXPN commands, which have character string arguments. For the + VRFY command, the string is a user name, and the response may + include the full name of the user and must include the mailbox of + the user. For the EXPN command, the string identifies a mailing + list, and the multiline response may include the full name of the + users and must give the mailboxes on the mailing list. + + "User name" is a fuzzy term and used purposely. If a host + implements the VRFY or EXPN commands then at least local mailboxes + must be recognized as "user names". If a host chooses to + recognize other strings as "user names" that is allowed. + + In some hosts the distinction between a mailing list and an alias + for a single mailbox is a bit fuzzy, since a common data structure + may hold both types of entries, and it is possible to have mailing + lists of one mailbox. If a request is made to verify a mailing + list a positive response can be given if on receipt of a message + so addressed it will be delivered to everyone on the list, + otherwise an error should be reported (e.g., "550 That is a + mailing list, not a user"). If a request is made to expand a user + name a positive response can be formed by returning a list + containing one name, or an error can be reported (e.g., "550 That + is a user name, not a mailing list"). + + In the case of a multiline reply (normal for EXPN) exactly one + mailbox is to be specified on each line of the reply. In the case + of an ambiguous request, for example, "VRFY Smith", where there + are two Smith's the response must be "553 User ambiguous". + + The case of verifying a user name is straightforward as shown in + example 3. + + + + + + + + + + + + + + +[Page 8] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example of Verifying a User Name + + Either + + S: VRFY Smith + R: 250 Fred Smith + + Or + + S: VRFY Smith + R: 251 User not local; will forward to + + Or + + S: VRFY Jones + R: 550 String does not match anything. + + Or + + S: VRFY Jones + R: 551 User not local; please try + + Or + + S: VRFY Gourzenkyinplatz + R: 553 User ambiguous. + + Example 3 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + +Postel [Page 9] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The case of expanding a mailbox list requires a multiline reply as + shown in example 4. + + ------------------------------------------------------------- + + Example of Expanding a Mailing List + + Either + + S: EXPN Example-People + R: 250-Jon Postel + R: 250-Fred Fonebone + R: 250-Sam Q. Smith + R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250- + R: 250 + + Or + + S: EXPN Executive-Washroom-List + R: 550 Access Denied to You. + + Example 4 + + ------------------------------------------------------------- + + The character string arguments of the VRFY and EXPN commands + cannot be further restricted due to the variety of implementations + of the user name and mailbox list concepts. On some systems it + may be appropriate for the argument of the EXPN command to be a + file name for a file containing a mailing list, but again there is + a variety of file naming conventions in the Internet. + + The VRFY and EXPN commands are not included in the minimum + implementation (Section 4.5.1), and are not required to work + across relays when they are implemented. + + + + + + + + + + + + + +[Page 10] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.4. SENDING AND MAILING + + The main purpose of SMTP is to deliver messages to user's + mailboxes. A very similar service provided by some hosts is to + deliver messages to user's terminals (provided the user is active + on the host). The delivery to the user's mailbox is called + "mailing", the delivery to the user's terminal is called + "sending". Because in many hosts the implementation of sending is + nearly identical to the implementation of mailing these two + functions are combined in SMTP. However the sending commands are + not included in the required minimum implementation + (Section 4.5.1). Users should have the ability to control the + writing of messages on their terminals. Most hosts permit the + users to accept or refuse such messages. + + The following three command are defined to support the sending + options. These are used in the mail transaction instead of the + MAIL command and inform the receiver-SMTP of the special semantics + of this transaction: + + SEND FROM: + + The SEND command requires that the mail data be delivered to + the user's terminal. If the user is not active (or not + accepting terminal messages) on the host a 450 reply may + returned to a RCPT command. The mail transaction is + successful if the message is delivered the terminal. + + SOML FROM: + + The Send Or MaiL command requires that the mail data be + delivered to the user's terminal if the user is active (and + accepting terminal messages) on the host. If the user is + not active (or not accepting terminal messages) then the + mail data is entered into the user's mailbox. The mail + transaction is successful if the message is delivered either + to the terminal or the mailbox. + + SAML FROM: + + The Send And MaiL command requires that the mail data be + delivered to the user's terminal if the user is active (and + accepting terminal messages) on the host. In any case the + mail data is entered into the user's mailbox. The mail + transaction is successful if the message is delivered the + mailbox. + + + +Postel [Page 11] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The same reply codes that are used for the MAIL commands are used + for these commands. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 12] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.5. OPENING AND CLOSING + + At the time the transmission channel is opened there is an + exchange to ensure that the hosts are communicating with the hosts + they think they are. + + The following two commands are used in transmission channel + opening and closing: + + HELO + + QUIT + + In the HELO command the host sending the command identifies + itself; the command may be interpreted as saying "Hello, I am + ". + + ------------------------------------------------------------- + + Example of Connection Opening + + R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIF.ARPA + R: 250 BBN-UNIX.ARPA + + Example 5 + + ------------------------------------------------------------- + + ------------------------------------------------------------- + + Example of Connection Closing + + S: QUIT + R: 221 BBN-UNIX.ARPA Service closing transmission channel + + Example 6 + + ------------------------------------------------------------- + + + + + + + + + + +Postel [Page 13] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 3.6. RELAYING + + The forward-path may be a source route of the form + "@ONE,@TWO:JOE@THREE", where ONE, TWO, and THREE are hosts. This + form is used to emphasize the distinction between an address and a + route. The mailbox is an absolute address, and the route is + information about how to get there. The two concepts should not + be confused. + + Conceptually the elements of the forward-path are moved to the + reverse-path as the message is relayed from one server-SMTP to + another. The reverse-path is a reverse source route, (i.e., a + source route from the current location of the message to the + originator of the message). When a server-SMTP deletes its + identifier from the forward-path and inserts it into the + reverse-path, it must use the name it is known by in the + environment it is sending into, not the environment the mail came + from, in case the server-SMTP is known by different names in + different environments. + + If when the message arrives at an SMTP the first element of the + forward-path is not the identifier of that SMTP the element is not + deleted from the forward-path and is used to determine the next + SMTP to send the message to. In any case, the SMTP adds its own + identifier to the reverse-path. + + Using source routing the receiver-SMTP receives mail to be relayed + to another server-SMTP The receiver-SMTP may accept or reject the + task of relaying the mail in the same way it accepts or rejects + mail for a local user. The receiver-SMTP transforms the command + arguments by moving its own identifier from the forward-path to + the beginning of the reverse-path. The receiver-SMTP then becomes + a sender-SMTP, establishes a transmission channel to the next SMTP + in the forward-path, and sends it the mail. + + The first host in the reverse-path should be the host sending the + SMTP commands, and the first host in the forward-path should be + the host receiving the SMTP commands. + + Notice that the forward-path and reverse-path appear in the SMTP + commands and replies, but not necessarily in the message. That + is, there is no need for these paths and especially this syntax to + appear in the "To:" , "From:", "CC:", etc. fields of the message + header. + + If a server-SMTP has accepted the task of relaying the mail and + + + +[Page 14] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + later finds that the forward-path is incorrect or that the mail + cannot be delivered for whatever reason, then it must construct an + "undeliverable mail" notification message and send it to the + originator of the undeliverable mail (as indicated by the + reverse-path). + + This notification message must be from the server-SMTP at this + host. Of course, server-SMTPs should not send notification + messages about problems with notification messages. One way to + prevent loops in error reporting is to specify a null reverse-path + in the MAIL command of a notification message. When such a + message is relayed it is permissible to leave the reverse-path + null. A MAIL command with a null reverse-path appears as follows: + + MAIL FROM:<> + + An undeliverable mail notification message is shown in example 7. + This notification is in response to a message originated by JOE at + HOSTW and sent via HOSTX to HOSTY with instructions to relay it on + to HOSTZ. What we see in the example is the transaction between + HOSTY and HOSTX, which is the first step in the return of the + notification message. + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 15] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example Undeliverable Mail Notification Message + + S: MAIL FROM:<> + R: 250 ok + S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA> + R: 250 ok + S: DATA + R: 354 send the mail data, end with . + S: Date: 23 Oct 81 11:22:33 + S: From: SMTP@HOSTY.ARPA + S: To: JOE@HOSTW.ARPA + S: Subject: Mail System Problem + S: + S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost. + S: HOSTZ.ARPA said this: + S: "550 No Such User" + S: . + R: 250 ok + + Example 7 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 16] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 3.7. DOMAINS + + Domains are a recently introduced concept in the ARPA Internet + mail system. The use of domains changes the address space from a + flat global space of simple character string host names to a + hierarchically structured rooted tree of global addresses. The + host name is replaced by a domain and host designator which is a + sequence of domain element strings separated by periods with the + understanding that the domain elements are ordered from the most + specific to the most general. + + For example, "USC-ISIF.ARPA", "Fred.Cambridge.UK", and + "PC7.LCS.MIT.ARPA" might be host-and-domain identifiers. + + Whenever domain names are used in SMTP only the official names are + used, the use of nicknames or aliases is not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 17] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 3.8. CHANGING ROLES + + The TURN command may be used to reverse the roles of the two + programs communicating over the transmission channel. + + If program-A is currently the sender-SMTP and it sends the TURN + command and receives an ok reply (250) then program-A becomes the + receiver-SMTP. + + If program-B is currently the receiver-SMTP and it receives the + TURN command and sends an ok reply (250) then program-B becomes + the sender-SMTP. + + To refuse to change roles the receiver sends the 502 reply. + + Please note that this command is optional. It would not normally + be used in situations where the transmission channel is TCP. + However, when the cost of establishing the transmission channel is + high, this command may be quite useful. For example, this command + may be useful in supporting be mail exchange using the public + switched telephone system as a transmission channel, especially if + some hosts poll other hosts for mail exchanges. + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 18] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +4. THE SMTP SPECIFICATIONS + + 4.1. SMTP COMMANDS + + 4.1.1. COMMAND SEMANTICS + + The SMTP commands define the mail transfer or the mail system + function requested by the user. SMTP commands are character + strings terminated by . The command codes themselves are + alphabetic characters terminated by if parameters follow + and otherwise. The syntax of mailboxes must conform to + receiver site conventions. The SMTP commands are discussed + below. The SMTP replies are discussed in the Section 4.2. + + A mail transaction involves several data objects which are + communicated as arguments to different commands. The + reverse-path is the argument of the MAIL command, the + forward-path is the argument of the RCPT command, and the mail + data is the argument of the DATA command. These arguments or + data objects must be transmitted and held pending the + confirmation communicated by the end of mail data indication + which finalizes the transaction. The model for this is that + distinct buffers are provided to hold the types of data + objects, that is, there is a reverse-path buffer, a + forward-path buffer, and a mail data buffer. Specific commands + cause information to be appended to a specific buffer, or cause + one or more buffers to be cleared. + + HELLO (HELO) + + This command is used to identify the sender-SMTP to the + receiver-SMTP. The argument field contains the host name of + the sender-SMTP. + + The receiver-SMTP identifies itself to the sender-SMTP in + the connection greeting reply, and in the response to this + command. + + This command and an OK reply to it confirm that both the + sender-SMTP and the receiver-SMTP are in the initial state, + that is, there is no transaction in progress and all state + tables and buffers are cleared. + + + + + + + +Postel [Page 19] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + MAIL (MAIL) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more mailboxes. The + argument field contains a reverse-path. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). In some types of error + reporting messages (for example, undeliverable mail + notifications) the reverse-path may be null (see Example 7). + + This command clears the reverse-path buffer, the + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + RECIPIENT (RCPT) + + This command is used to identify an individual recipient of + the mail data; multiple recipients are specified by multiple + use of this command. + + The forward-path consists of an optional list of hosts and a + required destination mailbox. When the list of hosts is + present, it is a source route and indicates that the mail + must be relayed to the next host on the list. If the + receiver-SMTP does not implement the relay function it may + user the same reply it would for an unknown local user + (550). + + When mail is relayed, the relay host must remove itself from + the beginning forward-path and put itself at the beginning + of the reverse-path. When mail reaches its ultimate + destination (the forward-path contains only a destination + mailbox), the receiver-SMTP inserts it into the destination + mailbox in accordance with its host mail conventions. + + + + + +[Page 20] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + For example, mail received at relay host A with arguments + + FROM: + TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA> + + will be relayed on to host B with arguments + + FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA> + TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>. + + This command causes its forward-path argument to be appended + to the forward-path buffer. + + DATA (DATA) + + The receiver treats the lines following the command as mail + data from the sender. This command causes the mail data + from this command to be appended to the mail data buffer. + The mail data may contain any of the 128 ASCII character + codes. + + The mail data is terminated by a line containing only a + period, that is the character sequence "." (see + Section 4.5.2 on Transparency). This is the end of mail + data indication. + + The end of mail data indication requires that the receiver + must now process the stored mail transaction information. + This processing consumes the information in the reverse-path + buffer, the forward-path buffer, and the mail data buffer, + and on the completion of this command these buffers are + cleared. If the processing is successful the receiver must + send an OK reply. If the processing fails completely the + receiver must send a failure reply. + + When the receiver-SMTP accepts a message either for relaying + or for final delivery it inserts at the beginning of the + mail data a time stamp line. The time stamp line indicates + the identity of the host that sent the message, and the + identity of the host that received the message (and is + inserting this time stamp), and the date and time the + message was received. Relayed messages will have multiple + time stamp lines. + + When the receiver-SMTP makes the "final delivery" of a + message it inserts at the beginning of the mail data a + + + +Postel [Page 21] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + return path line. The return path line preserves the + information in the from the MAIL command. + Here, final delivery means the message leaves the SMTP + world. Normally, this would mean it has been delivered to + the destination user, but in some cases it may be further + processed and transmitted by another mail system. + + It is possible for the mailbox in the return path be + different from the actual sender's mailbox, for example, + if error responses are to be delivered a special error + handling mailbox rather than the message senders. + + The preceding two paragraphs imply that the final mail data + will begin with a return path line, followed by one or more + time stamp lines. These lines will be followed by the mail + data header and body [2]. See Example 8. + + Special mention is needed of the response and further action + required when the processing following the end of mail data + indication is partially successful. This could arise if + after accepting several recipients and the mail data, the + receiver-SMTP finds that the mail data can be successfully + delivered to some of the recipients, but it cannot be to + others (for example, due to mailbox space allocation + problems). In such a situation, the response to the DATA + command must be an OK reply. But, the receiver-SMTP must + compose and send an "undeliverable mail" notification + message to the originator of the message. Either a single + notification which lists all of the recipients that failed + to get the message, or separate notification messages must + be sent for each failed recipient (see Example 7). All + undeliverable mail notification messages are sent using the + MAIL command (even if they result from processing a SEND, + SOML, or SAML command). + + + + + + + + + + + + + + + +[Page 22] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Example of Return Path and Received Time Stamps + + Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA> + Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST + Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST + Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST + Date: 27 Oct 81 15:01:01 PST + From: JOE@ABC.ARPA + Subject: Improved Mailing System Installed + To: SAM@JKL.ARPA + + This is to inform you that ... + + Example 8 + + ------------------------------------------------------------- + + SEND (SEND) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more terminals. The + argument field contains a reverse-path. This command is + successful if the message is delivered to a terminal. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). + + This command clears the reverse-path buffer, the + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + SEND OR MAIL (SOML) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more terminals or + + + +Postel [Page 23] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + mailboxes. For each recipient the mail data is delivered to + the recipient's terminal if the recipient is active on the + host (and accepting terminal messages), otherwise to the + recipient's mailbox. The argument field contains a + reverse-path. This command is successful if the message is + delivered to a terminal or the mailbox. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). + + This command clears the reverse-path buffer, the + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + SEND AND MAIL (SAML) + + This command is used to initiate a mail transaction in which + the mail data is delivered to one or more terminals and + mailboxes. For each recipient the mail data is delivered to + the recipient's terminal if the recipient is active on the + host (and accepting terminal messages), and for all + recipients to the recipient's mailbox. The argument field + contains a reverse-path. This command is successful if the + message is delivered to the mailbox. + + The reverse-path consists of an optional list of hosts and + the sender mailbox. When the list of hosts is present, it + is a "reverse" source route and indicates that the mail was + relayed through each host on the list (the first host in the + list was the most recent relay). This list is used as a + source route to return non-delivery notices to the sender. + As each relay host adds itself to the beginning of the list, + it must use its name as known in the IPCE to which it is + relaying the mail rather than the IPCE from which the mail + came (if they are different). + + This command clears the reverse-path buffer, the + + + +[Page 24] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + forward-path buffer, and the mail data buffer; and inserts + the reverse-path information from this command into the + reverse-path buffer. + + RESET (RSET) + + This command specifies that the current mail transaction is + to be aborted. Any stored sender, recipients, and mail data + must be discarded, and all buffers and state tables cleared. + The receiver must send an OK reply. + + VERIFY (VRFY) + + This command asks the receiver to confirm that the argument + identifies a user. If it is a user name, the full name of + the user (if known) and the fully specified mailbox are + returned. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + EXPAND (EXPN) + + This command asks the receiver to confirm that the argument + identifies a mailing list, and if so, to return the + membership of that list. The full name of the users (if + known) and the fully specified mailboxes are returned in a + multiline reply. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + HELP (HELP) + + This command causes the receiver to send helpful information + to the sender of the HELP command. The command may take an + argument (e.g., any command name) and return more specific + information as a response. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + + + + + + + +Postel [Page 25] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + NOOP (NOOP) + + This command does not affect any parameters or previously + entered commands. It specifies no action other than that + the receiver send an OK reply. + + This command has no effect on any of the reverse-path + buffer, the forward-path buffer, or the mail data buffer. + + QUIT (QUIT) + + This command specifies that the receiver must send an OK + reply, and then close the transmission channel. + + The receiver should not close the transmission channel until + it receives and replies to a QUIT command (even if there was + an error). The sender should not close the transmission + channel until it send a QUIT command and receives the reply + (even if there was an error response to a previous command). + If the connection is closed prematurely the receiver should + act as if a RSET command had been received (canceling any + pending transaction, but not undoing any previously + completed transaction), the sender should act as if the + command or transaction in progress had received a temporary + error (4xx). + + TURN (TURN) + + This command specifies that the receiver must either (1) + send an OK reply and then take on the role of the + sender-SMTP, or (2) send a refusal reply and retain the role + of the receiver-SMTP. + + If program-A is currently the sender-SMTP and it sends the + TURN command and receives an OK reply (250) then program-A + becomes the receiver-SMTP. Program-A is then in the initial + state as if the transmission channel just opened, and it + then sends the 220 service ready greeting. + + If program-B is currently the receiver-SMTP and it receives + the TURN command and sends an OK reply (250) then program-B + becomes the sender-SMTP. Program-B is then in the initial + state as if the transmission channel just opened, and it + then expects to receive the 220 service ready greeting. + + To refuse to change roles the receiver sends the 502 reply. + + + +[Page 26] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + There are restrictions on the order in which these command may + be used. + + The first command in a session must be the HELO command. + The HELO command may be used later in a session as well. If + the HELO command argument is not acceptable a 501 failure + reply must be returned and the receiver-SMTP must stay in + the same state. + + The NOOP, HELP, EXPN, and VRFY commands can be used at any + time during a session. + + The MAIL, SEND, SOML, or SAML commands begin a mail + transaction. Once started a mail transaction consists of + one of the transaction beginning commands, one or more RCPT + commands, and a DATA command, in that order. A mail + transaction may be aborted by the RSET command. There may + be zero or more transactions in a session. + + If the transaction beginning command argument is not + acceptable a 501 failure reply must be returned and the + receiver-SMTP must stay in the same state. If the commands + in a transaction are out of order a 503 failure reply must + be returned and the receiver-SMTP must stay in the same + state. + + The last command in a session must be the QUIT command. The + QUIT command can not be used at any other time in a session. + + 4.1.2. COMMAND SYNTAX + + The commands consist of a command code followed by an argument + field. Command codes are four alphabetic characters. Upper + and lower case alphabetic characters are to be treated + identically. Thus, any of the following may represent the mail + command: + + MAIL Mail mail MaIl mAIl + + This also applies to any symbols representing parameter values, + such as "TO" or "to" for the forward-path. Command codes and + the argument fields are separated by one or more spaces. + However, within the reverse-path and forward-path arguments + case is important. In particular, in some hosts the user + "smith" is different from the user "Smith". + + + + +Postel [Page 27] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The argument field consists of a variable length character + string ending with the character sequence . The receiver + is to take no action until this sequence is received. + + Square brackets denote an optional argument field. If the + option is not taken, the appropriate default is implied. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 28] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + The following are the SMTP commands: + + HELO + + MAIL FROM: + + RCPT TO: + + DATA + + RSET + + SEND FROM: + + SOML FROM: + + SAML FROM: + + VRFY + + EXPN + + HELP [ ] + + NOOP + + QUIT + + TURN + + + + + + + + + + + + + + + + + + + + + +Postel [Page 29] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The syntax of the above argument fields (using BNF notation + where applicable) is given below. The "..." notation indicates + that a field may be repeated one or more times. + + ::= + + ::= + + ::= "<" [ ":" ] ">" + + ::= | "," + + ::= "@" + + ::= | "." + + ::= | "#" | "[" "]" + + ::= "@" + + ::= | + + ::= + + ::= | + + ::= | + + ::= | | "-" + + ::= | "." + + ::= | + + ::= """ """ + + ::= "\" | "\" | | + + ::= | "\" + + ::= "." "." "." + + ::= | + + ::= + + + + +[Page 30] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ::= the carriage return character (ASCII code 13) + + ::= the line feed character (ASCII code 10) + + ::= the space character (ASCII code 32) + + ::= one, two, or three digits representing a decimal + integer value in the range 0 through 255 + + ::= any one of the 52 alphabetic characters A through Z + in upper case and a through z in lower case + + ::= any one of the 128 ASCII characters, but not any + or + + ::= any one of the ten digits 0 through 9 + + ::= any one of the 128 ASCII characters except , + , quote ("), or backslash (\) + + ::= any one of the 128 ASCII characters (no exceptions) + + ::= "<" | ">" | "(" | ")" | "[" | "]" | "\" | "." + | "," | ";" | ":" | "@" """ | the control + characters (ASCII codes 0 through 31 inclusive and + 127) + + Note that the backslash, "\", is a quote character, which is + used to indicate that the next character is to be used + literally (instead of its normal interpretation). For example, + "Joe\,Smith" could be used to indicate a single nine character + user field with comma being the fourth character of the field. + + Hosts are generally known by names which are translated to + addresses in each host. Note that the name elements of domains + are the official names -- no use of nicknames or aliases is + allowed. + + Sometimes a host is not known to the translation function and + communication is blocked. To bypass this barrier two numeric + forms are also allowed for host "names". One form is a decimal + integer prefixed by a pound sign, "#", which indicates the + number is the address of the host. Another form is four small + decimal integers separated by dots and enclosed by brackets, + e.g., "[123.255.37.2]", which indicates a 32-bit ARPA Internet + Address in four 8-bit fields. + + + +Postel [Page 31] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + The time stamp line and the return path line are formally + defined as follows: + + ::= "Return-Path:" + + ::= "Received:" + + ::= ";" + + + ::= "FROM" + + ::= "BY" + + ::= [] [] [] [] + + ::= "VIA" + + ::= "WITH" + + ::= "ID" + + ::= "FOR" + + ::= The standard names for links are registered with + the Network Information Center. + + ::= The standard names for protocols are + registered with the Network Information Center. + + ::=
::= the one or two decimal integer day of the month in + the range 1 to 31. + + ::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" | + "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC" + + ::= the two decimal integer year of the century in the + range 00 to 99. + + + + + +[Page 32] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + ::= the two decimal integer hour of the day in the + range 00 to 24. + + ::= the two decimal integer minute of the hour in the + range 00 to 59. + + ::= the two decimal integer second of the minute in the + range 00 to 59. + + ::= "UT" for Universal Time (the default) or other + time zone designator (as in [2]). + + + + ------------------------------------------------------------- + + Return Path Example + + Return-Path: <@CHARLIE.ARPA,@BAKER.ARPA:JOE@ABLE.ARPA> + + Example 9 + + ------------------------------------------------------------- + + ------------------------------------------------------------- + + Time Stamp Line Example + + Received: FROM ABC.ARPA BY XYZ.ARPA ; 22 OCT 81 09:23:59 PDT + + Received: from ABC.ARPA by XYZ.ARPA via TELENET with X25 + id M12345 for Smith@PDQ.ARPA ; 22 OCT 81 09:23:59 PDT + + Example 10 + + ------------------------------------------------------------- + + + + + + + + + + + + + +Postel [Page 33] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 4.2. SMTP REPLIES + + Replies to SMTP commands are devised to ensure the synchronization + of requests and actions in the process of mail transfer, and to + guarantee that the sender-SMTP always knows the state of the + receiver-SMTP. Every command must generate exactly one reply. + + The details of the command-reply sequence are made explicit in + Section 5.3 on Sequencing and Section 5.4 State Diagrams. + + An SMTP reply consists of a three digit number (transmitted as + three alphanumeric characters) followed by some text. The number + is intended for use by automata to determine what state to enter + next; the text is meant for the human user. It is intended that + the three digits contain enough encoded information that the + sender-SMTP need not examine the text and may either discard it or + pass it on to the user, as appropriate. In particular, the text + may be receiver-dependent and context dependent, so there are + likely to be varying texts for each reply code. A discussion of + the theory of reply codes is given in Appendix E. Formally, a + reply is defined to be the sequence: a three-digit code, , + one line of text, and , or a multiline reply (as defined in + Appendix E). Only the EXPN and HELP commands are expected to + result in multiline replies in normal circumstances, however + multiline replies are allowed for any command. + + + + + + + + + + + + + + + + + + + + + + + + +[Page 34] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.2.1. REPLY CODES BY FUNCTION GROUPS + + 500 Syntax error, command unrecognized + [This may include errors such as command line too long] + 501 Syntax error in parameters or arguments + 502 Command not implemented + 503 Bad sequence of commands + 504 Command parameter not implemented + + 211 System status, or system help reply + 214 Help message + [Information on how to use the receiver or the meaning of a + particular non-standard command; this reply is useful only + to the human user] + + 220 Service ready + 221 Service closing transmission channel + 421 Service not available, + closing transmission channel + [This may be a reply to any command if the service knows it + must shut down] + + 250 Requested mail action okay, completed + 251 User not local; will forward to + 450 Requested mail action not taken: mailbox unavailable + [E.g., mailbox busy] + 550 Requested action not taken: mailbox unavailable + [E.g., mailbox not found, no access] + 451 Requested action aborted: error in processing + 551 User not local; please try + 452 Requested action not taken: insufficient system storage + 552 Requested mail action aborted: exceeded storage allocation + 553 Requested action not taken: mailbox name not allowed + [E.g., mailbox syntax incorrect] + 354 Start mail input; end with . + 554 Transaction failed + + + + + + + + + + + + + +Postel [Page 35] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + 4.2.2. NUMERIC ORDER LIST OF REPLY CODES + + 211 System status, or system help reply + 214 Help message + [Information on how to use the receiver or the meaning of a + particular non-standard command; this reply is useful only + to the human user] + 220 Service ready + 221 Service closing transmission channel + 250 Requested mail action okay, completed + 251 User not local; will forward to + + 354 Start mail input; end with . + + 421 Service not available, + closing transmission channel + [This may be a reply to any command if the service knows it + must shut down] + 450 Requested mail action not taken: mailbox unavailable + [E.g., mailbox busy] + 451 Requested action aborted: local error in processing + 452 Requested action not taken: insufficient system storage + + 500 Syntax error, command unrecognized + [This may include errors such as command line too long] + 501 Syntax error in parameters or arguments + 502 Command not implemented + 503 Bad sequence of commands + 504 Command parameter not implemented + 550 Requested action not taken: mailbox unavailable + [E.g., mailbox not found, no access] + 551 User not local; please try + 552 Requested mail action aborted: exceeded storage allocation + 553 Requested action not taken: mailbox name not allowed + [E.g., mailbox syntax incorrect] + 554 Transaction failed + + + + + + + + + + + + + +[Page 36] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.3. SEQUENCING OF COMMANDS AND REPLIES + + The communication between the sender and receiver is intended to + be an alternating dialogue, controlled by the sender. As such, + the sender issues a command and the receiver responds with a + reply. The sender must wait for this response before sending + further commands. + + One important reply is the connection greeting. Normally, a + receiver will send a 220 "Service ready" reply when the connection + is completed. The sender should wait for this greeting message + before sending any commands. + + Note: all the greeting type replies have the official name of + the server host as the first word following the reply code. + + For example, + + 220 USC-ISIF.ARPA Service ready + + The table below lists alternative success and failure replies for + each command. These must be strictly adhered to; a receiver may + substitute text in the replies, but the meaning and action implied + by the code numbers and by the specific command reply sequence + cannot be altered. + + COMMAND-REPLY SEQUENCES + + Each command is listed with its possible replies. The prefixes + used before the possible replies are "P" for preliminary (not + used in SMTP), "I" for intermediate, "S" for success, "F" for + failure, and "E" for error. The 421 reply (service not + available, closing transmission channel) may be given to any + command if the SMTP-receiver knows it must shut down. This + listing forms the basis for the State Diagrams in Section 4.4. + + CONNECTION ESTABLISHMENT + S: 220 + F: 421 + HELO + S: 250 + E: 500, 501, 504, 421 + MAIL + S: 250 + F: 552, 451, 452 + E: 500, 501, 421 + + + +Postel [Page 37] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + RCPT + S: 250, 251 + F: 550, 551, 552, 553, 450, 451, 452 + E: 500, 501, 503, 421 + DATA + I: 354 -> data -> S: 250 + F: 552, 554, 451, 452 + F: 451, 554 + E: 500, 501, 503, 421 + RSET + S: 250 + E: 500, 501, 504, 421 + SEND + S: 250 + F: 552, 451, 452 + E: 500, 501, 502, 421 + SOML + S: 250 + F: 552, 451, 452 + E: 500, 501, 502, 421 + SAML + S: 250 + F: 552, 451, 452 + E: 500, 501, 502, 421 + VRFY + S: 250, 251 + F: 550, 551, 553 + E: 500, 501, 502, 504, 421 + EXPN + S: 250 + F: 550 + E: 500, 501, 502, 504, 421 + HELP + S: 211, 214 + E: 500, 501, 502, 504, 421 + NOOP + S: 250 + E: 500, 421 + QUIT + S: 221 + E: 500 + TURN + S: 250 + F: 502 + E: 500, 503 + + + + +[Page 38] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.4. STATE DIAGRAMS + + Following are state diagrams for a simple-minded SMTP + implementation. Only the first digit of the reply codes is used. + There is one state diagram for each group of SMTP commands. The + command groupings were determined by constructing a model for each + command and then collecting together the commands with + structurally identical models. + + For each command there are three possible outcomes: "success" + (S), "failure" (F), and "error" (E). In the state diagrams below + we use the symbol B for "begin", and the symbol W for "wait for + reply". + + First, the diagram that represents most of the SMTP commands: + + + 1,3 +---+ + ----------->| E | + | +---+ + | + +---+ cmd +---+ 2 +---+ + | B |---------->| W |---------->| S | + +---+ +---+ +---+ + | + | 4,5 +---+ + ----------->| F | + +---+ + + + This diagram models the commands: + + HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP, + NOOP, QUIT, TURN. + + + + + + + + + + + + + + + +Postel [Page 39] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + A more complex diagram models the DATA command: + + + +---+ DATA +---+ 1,2 +---+ + | B |---------->| W |-------------------->| E | + +---+ +---+ ------------>+---+ + 3| |4,5 | + | | | + -------------- ----- | + | | | +---+ + | ---------- -------->| S | + | | | | +---+ + | | ------------ + | | | | + V 1,3| |2 | + +---+ data +---+ --------------->+---+ + | |---------->| W | | F | + +---+ +---+-------------------->+---+ + 4,5 + + + Note that the "data" here is a series of lines sent from the + sender to the receiver with no response expected until the last + line is sent. + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 40] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + 4.5. DETAILS + + 4.5.1. MINIMUM IMPLEMENTATION + + In order to make SMTP workable, the following minimum + implementation is required for all receivers: + + COMMANDS -- HELO + MAIL + RCPT + DATA + RSET + NOOP + QUIT + + 4.5.2. TRANSPARENCY + + Without some provision for data transparency the character + sequence "." ends the mail text and cannot be sent + by the user. In general, users are not aware of such + "forbidden" sequences. To allow all user composed text to be + transmitted transparently the following procedures are used. + + 1. Before sending a line of mail text the sender-SMTP checks + the first character of the line. If it is a period, one + additional period is inserted at the beginning of the line. + + 2. When a line of mail text is received by the receiver-SMTP + it checks the line. If the line is composed of a single + period it is the end of mail. If the first character is a + period and there are other characters on the line, the first + character is deleted. + + The mail data may contain any of the 128 ASCII characters. All + characters are to be delivered to the recipient's mailbox + including format effectors and other control characters. If + the transmission channel provides an 8-bit byte (octets) data + stream, the 7-bit ASCII codes are transmitted right justified + in the octets with the high order bits cleared to zero. + + In some systems it may be necessary to transform the data as + it is received and stored. This may be necessary for hosts + that use a different character set than ASCII as their local + character set, or that store data in records rather than + + + + + +Postel [Page 41] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + strings. If such transforms are necessary, they must be + reversible -- especially if such transforms are applied to + mail being relayed. + + 4.5.3. SIZES + + There are several objects that have required minimum maximum + sizes. That is, every implementation must be able to receive + objects of at least these sizes, but must not send objects + larger than these sizes. + + + **************************************************** + * * + * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION * + * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH * + * OF THESE OBJECTS SHOULD BE USED. * + * * + **************************************************** + + user + + The maximum total length of a user name is 64 characters. + + domain + + The maximum total length of a domain name or number is 64 + characters. + + path + + The maximum total length of a reverse-path or + forward-path is 256 characters (including the punctuation + and element separators). + + command line + + The maximum total length of a command line including the + command word and the is 512 characters. + + reply line + + The maximum total length of a reply line including the + reply code and the is 512 characters. + + + + + +[Page 42] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + text line + + The maximum total length of a text line including the + is 1000 characters (but not counting the leading + dot duplicated for transparency). + + recipients buffer + + The maximum total number of recipients that must be + buffered is 100 recipients. + + + **************************************************** + * * + * TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION * + * TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH * + * OF THESE OBJECTS SHOULD BE USED. * + * * + **************************************************** + + Errors due to exceeding these limits may be reported by using + the reply codes, for example: + + 500 Line too long. + + 501 Path too long + + 552 Too many recipients. + + 552 Too much mail data. + + + + + + + + + + + + + + + + + + + +Postel [Page 43] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +APPENDIX A + + TCP Transport service + + The Transmission Control Protocol [3] is used in the ARPA + Internet, and in any network following the US DoD standards for + internetwork protocols. + + Connection Establishment + + The SMTP transmission channel is a TCP connection established + between the sender process port U and the receiver process port + L. This single full duplex connection is used as the + transmission channel. This protocol is assigned the service + port 25 (31 octal), that is L=25. + + Data Transfer + + The TCP connection supports the transmission of 8-bit bytes. + The SMTP data is 7-bit ASCII characters. Each character is + transmitted as an 8-bit byte with the high-order bit cleared to + zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 44] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +APPENDIX B + + NCP Transport service + + The ARPANET Host-to-Host Protocol [4] (implemented by the Network + Control Program) may be used in the ARPANET. + + Connection Establishment + + The SMTP transmission channel is established via NCP between + the sender process socket U and receiver process socket L. The + Initial Connection Protocol [5] is followed resulting in a pair + of simplex connections. This pair of connections is used as + the transmission channel. This protocol is assigned the + contact socket 25 (31 octal), that is L=25. + + Data Transfer + + The NCP data connections are established in 8-bit byte mode. + The SMTP data is 7-bit ASCII characters. Each character is + transmitted as an 8-bit byte with the high-order bit cleared to + zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 45] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +APPENDIX C + + NITS + + The Network Independent Transport Service [6] may be used. + + Connection Establishment + + The SMTP transmission channel is established via NITS between + the sender process and receiver process. The sender process + executes the CONNECT primitive, and the waiting receiver + process executes the ACCEPT primitive. + + Data Transfer + + The NITS connection supports the transmission of 8-bit bytes. + The SMTP data is 7-bit ASCII characters. Each character is + transmitted as an 8-bit byte with the high-order bit cleared to + zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 46] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +APPENDIX D + + X.25 Transport service + + It may be possible to use the X.25 service [7] as provided by the + Public Data Networks directly, however, it is suggested that a + reliable end-to-end protocol such as TCP be used on top of X.25 + connections. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 47] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +APPENDIX E + + Theory of Reply Codes + + The three digits of the reply each have a special significance. + The first digit denotes whether the response is good, bad or + incomplete. An unsophisticated sender-SMTP will be able to + determine its next action (proceed as planned, redo, retrench, + etc.) by simply examining this first digit. A sender-SMTP that + wants to know approximately what kind of error occurred (e.g., + mail system error, command syntax error) may examine the second + digit, reserving the third digit for the finest gradation of + information. + + There are five values for the first digit of the reply code: + + 1yz Positive Preliminary reply + + The command has been accepted, but the requested action + is being held in abeyance, pending confirmation of the + information in this reply. The sender-SMTP should send + another command specifying whether to continue or abort + the action. + + [Note: SMTP does not have any commands that allow this + type of reply, and so does not have the continue or + abort commands.] + + 2yz Positive Completion reply + + The requested action has been successfully completed. A + new request may be initiated. + + 3yz Positive Intermediate reply + + The command has been accepted, but the requested action + is being held in abeyance, pending receipt of further + information. The sender-SMTP should send another command + specifying this information. This reply is used in + command sequence groups. + + 4yz Transient Negative Completion reply + + The command was not accepted and the requested action did + not occur. However, the error condition is temporary and + the action may be requested again. The sender should + + + +[Page 48] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + return to the beginning of the command sequence (if any). + It is difficult to assign a meaning to "transient" when + two different sites (receiver- and sender- SMTPs) must + agree on the interpretation. Each reply in this category + might have a different time value, but the sender-SMTP is + encouraged to try again. A rule of thumb to determine if + a reply fits into the 4yz or the 5yz category (see below) + is that replies are 4yz if they can be repeated without + any change in command form or in properties of the sender + or receiver. (E.g., the command is repeated identically + and the receiver does not put up a new implementation.) + + 5yz Permanent Negative Completion reply + + The command was not accepted and the requested action did + not occur. The sender-SMTP is discouraged from repeating + the exact request (in the same sequence). Even some + "permanent" error conditions can be corrected, so the + human user may want to direct the sender-SMTP to + reinitiate the command sequence by direct action at some + point in the future (e.g., after the spelling has been + changed, or the user has altered the account status). + + The second digit encodes responses in specific categories: + + x0z Syntax -- These replies refer to syntax errors, + syntactically correct commands that don't fit any + functional category, and unimplemented or superfluous + commands. + + x1z Information -- These are replies to requests for + information, such as status or help. + + x2z Connections -- These are replies referring to the + transmission channel. + + x3z Unspecified as yet. + + x4z Unspecified as yet. + + x5z Mail system -- These replies indicate the status of + the receiver mail system vis-a-vis the requested + transfer or other mail system action. + + The third digit gives a finer gradation of meaning in each + category specified by the second digit. The list of replies + + + +Postel [Page 49] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + illustrates this. Each reply text is recommended rather than + mandatory, and may even change according to the command with + which it is associated. On the other hand, the reply codes + must strictly follow the specifications in this section. + Receiver implementations should not invent new codes for + slightly different situations from the ones described here, but + rather adapt codes already defined. + + For example, a command such as NOOP whose successful execution + does not offer the sender-SMTP any new information will return + a 250 reply. The response is 502 when the command requests an + unimplemented non-site-specific action. A refinement of that + is the 504 reply for a command that is implemented, but that + requests an unimplemented parameter. + + The reply text may be longer than a single line; in these cases + the complete text must be marked so the sender-SMTP knows when it + can stop reading the reply. This requires a special format to + indicate a multiple line reply. + + The format for multiline replies requires that every line, + except the last, begin with the reply code, followed + immediately by a hyphen, "-" (also known as minus), followed by + text. The last line will begin with the reply code, followed + immediately by , optionally some text, and . + + For example: + 123-First line + 123-Second line + 123-234 text beginning with numbers + 123 The last line + + In many cases the sender-SMTP then simply needs to search for + the reply code followed by at the beginning of a line, and + ignore all preceding lines. In a few cases, there is important + data for the sender in the reply "text". The sender will know + these cases from the current context. + + + + + + + + + + + + +[Page 50] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +APPENDIX F + + Scenarios + + This section presents complete scenarios of several types of SMTP + sessions. + + A Typical SMTP Transaction Scenario + + This SMTP example shows mail sent by Smith at host USC-ISIF, to + Jones, Green, and Brown at host BBN-UNIX. Here we assume that + host USC-ISIF contacts host BBN-UNIX directly. The mail is + accepted for Jones and Brown. Green does not have a mailbox at + host BBN-UNIX. + + ------------------------------------------------------------- + + R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIF.ARPA + R: 250 BBN-UNIX.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 550 No such user here + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 BBN-UNIX.ARPA Service closing transmission channel + + Scenario 1 + + ------------------------------------------------------------- + + + +Postel [Page 51] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Aborted SMTP Transaction Scenario + + ------------------------------------------------------------- + + R: 220 MIT-Multics.ARPA Simple Mail Transfer Service Ready + S: HELO ISI-VAXA.ARPA + R: 250 MIT-Multics.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 550 No such user here + + S: RSET + R: 250 OK + + S: QUIT + R: 221 MIT-Multics.ARPA Service closing transmission channel + + Scenario 2 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + +[Page 52] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Relayed Mail Scenario + + ------------------------------------------------------------- + + Step 1 -- Source Host to Relay Host + + R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-AI.ARPA + R: 250 USC-ISIE.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO:<@USC-ISIE.ARPA:Jones@BBN-VAX.ARPA> + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Date: 2 Nov 81 22:33:44 + S: From: John Q. Public + S: Subject: The Next Meeting of the Board + S: To: Jones@BBN-Vax.ARPA + S: + S: Bill: + S: The next meeting of the board of directors will be + S: on Tuesday. + S: John. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIE.ARPA Service closing transmission channel + + + + + + + + + + + + + + + + + +Postel [Page 53] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Step 2 -- Relay Host to Destination Host + + R: 220 BBN-VAX.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIE.ARPA + R: 250 BBN-VAX.ARPA + + S: MAIL FROM:<@USC-ISIE.ARPA:JQP@MIT-AI.ARPA> + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Received: from MIT-AI.ARPA by USC-ISIE.ARPA ; + 2 Nov 81 22:40:10 UT + S: Date: 2 Nov 81 22:33:44 + S: From: John Q. Public + S: Subject: The Next Meeting of the Board + S: To: Jones@BBN-Vax.ARPA + S: + S: Bill: + S: The next meeting of the board of directors will be + S: on Tuesday. + S: John. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIE.ARPA Service closing transmission channel + + Scenario 3 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + +[Page 54] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Verifying and Sending Scenario + + ------------------------------------------------------------- + + R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-MC.ARPA + R: 250 SU-SCORE.ARPA + + S: VRFY Crispin + R: 250 Mark Crispin + + S: SEND FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 SU-SCORE.ARPA Service closing transmission channel + + Scenario 4 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + +Postel [Page 55] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Sending and Mailing Scenarios + + First the user's name is verified, then an attempt is made to + send to the user's terminal. When that fails, the messages is + mailed to the user's mailbox. + + ------------------------------------------------------------- + + R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-MC.ARPA + R: 250 SU-SCORE.ARPA + + S: VRFY Crispin + R: 250 Mark Crispin + + S: SEND FROM: + R: 250 OK + + S: RCPT TO: + R: 450 User not active now + + S: RSET + R: 250 OK + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 SU-SCORE.ARPA Service closing transmission channel + + Scenario 5 + + ------------------------------------------------------------- + + + + + + +[Page 56] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Doing the preceding scenario more efficiently. + + ------------------------------------------------------------- + + R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready + S: HELO MIT-MC.ARPA + R: 250 SU-SCORE.ARPA + + S: VRFY Crispin + R: 250 Mark Crispin + + S: SOML FROM: + R: 250 OK + + S: RCPT TO: + R: 250 User not active now, so will do mail. + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 SU-SCORE.ARPA Service closing transmission channel + + Scenario 6 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + +Postel [Page 57] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Mailing List Scenario + + First each of two mailing lists are expanded in separate sessions + with different hosts. Then the message is sent to everyone that + appeared on either list (but no duplicates) via a relay host. + + ------------------------------------------------------------- + + Step 1 -- Expanding the First List + + R: 220 MIT-AI.ARPA Simple Mail Transfer Service Ready + S: HELO SU-SCORE.ARPA + R: 250 MIT-AI.ARPA + + S: EXPN Example-People + R: 250- + R: 250-Fred Fonebone + R: 250-Xenon Y. Zither + R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250- + R: 250 + + S: QUIT + R: 221 MIT-AI.ARPA Service closing transmission channel + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 58] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Step 2 -- Expanding the Second List + + R: 220 MIT-MC.ARPA Simple Mail Transfer Service Ready + S: HELO SU-SCORE.ARPA + R: 250 MIT-MC.ARPA + + S: EXPN Interested-Parties + R: 250-Al Calico + R: 250- + R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250- + R: 250 + + S: QUIT + R: 221 MIT-MC.ARPA Service closing transmission channel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 59] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + Step 3 -- Mailing to All via a Relay Host + + R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready + S: HELO SU-SCORE.ARPA + R: 250 USC-ISIE.ARPA + + S: MAIL FROM: + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:ABC@MIT-MC.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:Fonebone@USC-ISIQA.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:XYZ@MIT-AI.ARPA> + R: 250 OK + S: RCPT + TO:<@USC-ISIE.ARPA,@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:joe@FOO-UNIX.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:xyz@BAR-UNIX.ARPA> + R: 250 OK + S: RCPT TO:<@USC-ISIE.ARPA:fred@BBN-UNIX.ARPA> + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIE.ARPA Service closing transmission channel + + Scenario 7 + + ------------------------------------------------------------- + + + + + + + + + + + + +[Page 60] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Forwarding Scenarios + + ------------------------------------------------------------- + + R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready + S: HELO LBL-UNIX.ARPA + R: 250 USC-ISIF.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 251 User not local; will forward to + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISIF.ARPA Service closing transmission channel + + Scenario 8 + + ------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + +Postel [Page 61] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + ------------------------------------------------------------- + + Step 1 -- Trying the Mailbox at the First Host + + R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready + S: HELO LBL-UNIX.ARPA + R: 250 USC-ISIF.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 251 User not local; will forward to + + S: RSET + R: 250 OK + + S: QUIT + R: 221 USC-ISIF.ARPA Service closing transmission channel + + Step 2 -- Delivering the Mail at the Second Host + + R: 220 USC-ISI.ARPA Simple Mail Transfer Service Ready + S: HELO LBL-UNIX.ARPA + R: 250 USC-ISI.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 USC-ISI.ARPA Service closing transmission channel + + Scenario 9 + + ------------------------------------------------------------- + + + + +[Page 62] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + Too Many Recipients Scenario + + ------------------------------------------------------------- + + R: 220 BERKELEY.ARPA Simple Mail Transfer Service Ready + S: HELO USC-ISIF.ARPA + R: 250 BERKELEY.ARPA + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: RCPT TO: + R: 552 Recipient storage full, try again in another transaction + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: MAIL FROM: + R: 250 OK + + S: RCPT TO: + R: 250 OK + + S: DATA + R: 354 Start mail input; end with . + S: Blah blah blah... + S: ...etc. etc. etc. + S: . + R: 250 OK + + S: QUIT + R: 221 BERKELEY.ARPA Service closing transmission channel + + Scenario 10 + + ------------------------------------------------------------- + + Note that a real implementation must handle many recipients as + specified in Section 4.5.3. + + + +Postel [Page 63] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + +GLOSSARY + + ASCII + + American Standard Code for Information Interchange [1]. + + command + + A request for a mail service action sent by the sender-SMTP to the + receiver-SMTP. + + domain + + The hierarchially structured global character string address of a + host computer in the mail system. + + end of mail data indication + + A special sequence of characters that indicates the end of the + mail data. In particular, the five characters carriage return, + line feed, period, carriage return, line feed, in that order. + + host + + A computer in the internetwork environment on which mailboxes or + SMTP processes reside. + + line + + A a sequence of ASCII characters ending with a . + + mail data + + A sequence of ASCII characters of arbitrary length, which conforms + to the standard set in the Standard for the Format of ARPA + Internet Text Messages (RFC 822 [2]). + + mailbox + + A character string (address) which identifies a user to whom mail + is to be sent. Mailbox normally consists of the host and user + specifications. The standard mailbox naming convention is defined + to be "user@domain". Additionally, the "container" in which mail + is stored. + + + + + +[Page 64] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + + receiver-SMTP process + + A process which transfers mail in cooperation with a sender-SMTP + process. It waits for a connection to be established via the + transport service. It receives SMTP commands from the + sender-SMTP, sends replies, and performs the specified operations. + + reply + + A reply is an acknowledgment (positive or negative) sent from + receiver to sender via the transmission channel in response to a + command. The general form of a reply is a completion code + (including error codes) followed by a text string. The codes are + for use by programs and the text is usually intended for human + users. + + sender-SMTP process + + A process which transfers mail in cooperation with a receiver-SMTP + process. A local language may be used in the user interface + command/reply dialogue. The sender-SMTP initiates the transport + service connection. It initiates SMTP commands, receives replies, + and governs the transfer of mail. + + session + + The set of exchanges that occur while the transmission channel is + open. + + transaction + + The set of exchanges required for one message to be transmitted + for one or more recipients. + + transmission channel + + A full-duplex communication path between a sender-SMTP and a + receiver-SMTP for the exchange of commands, replies, and mail + text. + + transport service + + Any reliable stream-oriented data communication services. For + example, NCP, TCP, NITS. + + + + + +Postel [Page 65] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + user + + A human being (or a process on behalf of a human being) wishing to + obtain mail transfer service. In addition, a recipient of + computer mail. + + word + + A sequence of printing characters. + + + + The characters carriage return and line feed (in that order). + + + + The space character. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 66] Postel + + + + +RFC 821 August 1982 + Simple Mail Transfer Protocol + + + +REFERENCES + + [1] ASCII + + ASCII, "USA Code for Information Interchange", United States of + America Standards Institute, X3.4, 1968. Also in: Feinler, E. + and J. Postel, eds., "ARPANET Protocol Handbook", NIC 7104, for + the Defense Communications Agency by SRI International, Menlo + Park, California, Revised January 1978. + + [2] RFC 822 + + Crocker, D., "Standard for the Format of ARPA Internet Text + Messages," RFC 822, Department of Electrical Engineering, + University of Delaware, August 1982. + + [3] TCP + + Postel, J., ed., "Transmission Control Protocol - DARPA Internet + Program Protocol Specification", RFC 793, USC/Information Sciences + Institute, NTIS AD Number A111091, September 1981. Also in: + Feinler, E. and J. Postel, eds., "Internet Protocol Transition + Workbook", SRI International, Menlo Park, California, March 1982. + + [4] NCP + + McKenzie,A., "Host/Host Protocol for the ARPA Network", NIC 8246, + January 1972. Also in: Feinler, E. and J. Postel, eds., "ARPANET + Protocol Handbook", NIC 7104, for the Defense Communications + Agency by SRI International, Menlo Park, California, Revised + January 1978. + + [5] Initial Connection Protocol + + Postel, J., "Official Initial Connection Protocol", NIC 7101, + 11 June 1971. Also in: Feinler, E. and J. Postel, eds., "ARPANET + Protocol Handbook", NIC 7104, for the Defense Communications + Agency by SRI International, Menlo Park, California, Revised + January 1978. + + [6] NITS + + PSS/SG3, "A Network Independent Transport Service", Study Group 3, + The Post Office PSS Users Group, February 1980. Available from + the DCPU, National Physical Laboratory, Teddington, UK. + + + + +Postel [Page 67] + + + + +August 1982 RFC 821 +Simple Mail Transfer Protocol + + + + [7] X.25 + + CCITT, "Recommendation X.25 - Interface Between Data Terminal + Equipment (DTE) and Data Circuit-terminating Equipment (DCE) for + Terminals Operating in the Packet Mode on Public Data Networks," + CCITT Orange Book, Vol. VIII.2, International Telephone and + Telegraph Consultative Committee, Geneva, 1976. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Page 68] Postel + + diff --git a/socket/DOCS/RFC854.TXT b/socket/DOCS/RFC854.TXT new file mode 100644 index 0000000..ace0c66 --- /dev/null +++ b/socket/DOCS/RFC854.TXT @@ -0,0 +1,742 @@ +rfc854 + +Press here to go to the top of the rfc 'tree'. + +Network Working Group J. Postel +Request for Comments: 854 J. Reynolds + ISI +Obsoletes: NIC 18639 May 1983 + + TELNET PROTOCOL SPECIFICATION + +This RFC specifies a standard for the ARPA Internet community. Hosts on +the ARPA Internet are expected to adopt and implement this standard. + +INTRODUCTION + + The purpose of the TELNET Protocol is to provide a fairly general, + bi-directional, eight-bit byte oriented communications facility. Its + primary goal is to allow a standard method of interfacing terminal + devices and terminal-oriented processes to each other. It is + envisioned that the protocol may also be used for terminal-terminal + communication ("linking") and process-process communication + (distributed computation). + +GENERAL CONSIDERATIONS + + A TELNET connection is a Transmission Control Protocol (TCP) + connection used to transmit data with interspersed TELNET control + information. + + The TELNET Protocol is built upon three main ideas: first, the + concept of a "Network Virtual Terminal"; second, the principle of + negotiated options; and third, a symmetric view of terminals and + processes. + + 1. When a TELNET connection is first established, each end is + assumed to originate and terminate at a "Network Virtual Terminal", + or NVT. An NVT is an imaginary device which provides a standard, + network-wide, intermediate representation of a canonical terminal. + This eliminates the need for "server" and "user" hosts to keep + information about the characteristics of each other's terminals and + terminal handling conventions. All hosts, both user and server, map + their local device characteristics and conventions so as to appear to + be dealing with an NVT over the network, and each can assume a + similar mapping by the other party. The NVT is intended to strike a + balance between being overly restricted (not providing hosts a rich + enough vocabulary for mapping into their local character sets), and + being overly inclusive (penalizing users with modest terminals). + + NOTE: The "user" host is the host to which the physical terminal + is normally attached, and the "server" host is the host which is + normally providing some service. As an alternate point of view, + +Postel & Reynolds [Page 1] + +RFC 854 May 1983 + + applicable even in terminal-to-terminal or process-to-process + communications, the "user" host is the host which initiated the + communication. + + 2. The principle of negotiated options takes cognizance of the fact + that many hosts will wish to provide additional services over and + above those available within an NVT, and many users will have + sophisticated terminals and would like to have elegant, rather than + minimal, services. Independent of, but structured within the TELNET + Protocol are various "options" that will be sanctioned and may be + used with the "DO, DON'T, WILL, WON'T" structure (discussed below) to + allow a user and server to agree to use a more elaborate (or perhaps + just different) set of conventions for their TELNET connection. Such + options could include changing the character set, the echo mode, etc. + + The basic strategy for setting up the use of options is to have + either party (or both) initiate a request that some option take + effect. The other party may then either accept or reject the + request. If the request is accepted the option immediately takes + effect; if it is rejected the associated aspect of the connection + remains as specified for an NVT. Clearly, a party may always refuse + a request to enable, and must never refuse a request to disable some + option since all parties must be prepared to support the NVT. + + The syntax of option negotiation has been set up so that if both + parties request an option simultaneously, each will see the other's + request as the positive acknowledgment of its own. + + 3. The symmetry of the negotiation syntax can potentially lead to + nonterminating acknowledgment loops -- each party seeing the incoming + commands not as acknowledgments but as new requests which must be + acknowledged. To prevent such loops, the following rules prevail: + + a. Parties may only request a change in option status; i.e., a + party may not send out a "request" merely to announce what mode it + is in. + + b. If a party receives what appears to be a request to enter some + mode it is already in, the request should not be acknowledged. + This non-response is essential to prevent endless loops in the + negotiation. It is required that a response be sent to requests + for a change of mode -- even if the mode is not changed. + + c. Whenever one party sends an option command to a second party, + whether as a request or an acknowledgment, and use of the option + will have any effect on the processing of the data being sent from + the first party to the second, then the command must be inserted + in the data stream at the point where it is desired that it take + +Postel & Reynolds [Page 2] + +RFC 854 May 1983 + + effect. (It should be noted that some time will elapse between + the transmission of a request and the receipt of an + acknowledgment, which may be negative. Thus, a host may wish to + buffer data, after requesting an option, until it learns whether + the request is accepted or rejected, in order to hide the + "uncertainty period" from the user.) + + Option requests are likely to flurry back and forth when a TELNET + connection is first established, as each party attempts to get the + best possible service from the other party. Beyond that, however, + options can be used to dynamically modify the characteristics of the + connection to suit changing local conditions. For example, the NVT, + as will be explained later, uses a transmission discipline well + suited to the many "line at a time" applications such as BASIC, but + poorly suited to the many "character at a time" applications such as + NLS. A server might elect to devote the extra processor overhead + required for a "character at a time" discipline when it was suitable + for the local process and would negotiate an appropriate option. + However, rather than then being permanently burdened with the extra + processing overhead, it could switch (i.e., negotiate) back to NVT + when the detailed control was no longer necessary. + + It is possible for requests initiated by processes to stimulate a + nonterminating request loop if the process responds to a rejection by + merely re-requesting the option. To prevent such loops from + occurring, rejected requests should not be repeated until something + changes. Operationally, this can mean the process is running a + different program, or the user has given another command, or whatever + makes sense in the context of the given process and the given option. + A good rule of thumb is that a re-request should only occur as a + result of subsequent information from the other end of the connection + or when demanded by local human intervention. + + Option designers should not feel constrained by the somewhat limited + syntax available for option negotiation. The intent of the simple + syntax is to make it easy to have options -- since it is + correspondingly easy to profess ignorance about them. If some + particular option requires a richer negotiation structure than + possible within "DO, DON'T, WILL, WON'T", the proper tack is to use + "DO, DON'T, WILL, WON'T" to establish that both parties understand + the option, and once this is accomplished a more exotic syntax can be + used freely. For example, a party might send a request to alter + (establish) line length. If it is accepted, then a different syntax + can be used for actually negotiating the line length -- such a + "sub-negotiation" might include fields for minimum allowable, maximum + allowable and desired line lengths. The important concept is that + +Postel & Reynolds [Page 3] + +RFC 854 May 1983 + + such expanded negotiations should never begin until some prior + (standard) negotiation has established that both parties are capable + of parsing the expanded syntax. + + In summary, WILL XXX is sent, by either party, to indicate that + party's desire (offer) to begin performing option XXX, DO XXX and + DON'T XXX being its positive and negative acknowledgments; similarly, + DO XXX is sent to indicate a desire (request) that the other party + (i.e., the recipient of the DO) begin performing option XXX, WILL XXX + and WON'T XXX being the positive and negative acknowledgments. Since + the NVT is what is left when no options are enabled, the DON'T and + WON'T responses are guaranteed to leave the connection in a state + which both ends can handle. Thus, all hosts may implement their + TELNET processes to be totally unaware of options that are not + supported, simply returning a rejection to (i.e., refusing) any + option request that cannot be understood. + + As much as possible, the TELNET protocol has been made server-user + symmetrical so that it easily and naturally covers the user-user + (linking) and server-server (cooperating processes) cases. It is + hoped, but not absolutely required, that options will further this + intent. In any case, it is explicitly acknowledged that symmetry is + an operating principle rather than an ironclad rule. + + A companion document, "TELNET Option Specifications," should be + consulted for information about the procedure for establishing new + options. + +THE NETWORK VIRTUAL TERMINAL + + The Network Virtual Terminal (NVT) is a bi-directional character + device. The NVT has a printer and a keyboard. The printer responds + to incoming data and the keyboard produces outgoing data which is + sent over the TELNET connection and, if "echoes" are desired, to the + NVT's printer as well. "Echoes" will not be expected to traverse the + network (although options exist to enable a "remote" echoing mode of + operation, no host is required to implement this option). The code + set is seven-bit USASCII in an eight-bit field, except as modified + herein. Any code conversion and timing considerations are local + problems and do not affect the NVT. + + TRANSMISSION OF DATA + + Although a TELNET connection through the network is intrinsically + full duplex, the NVT is to be viewed as a half-duplex device + operating in a line-buffered mode. That is, unless and until + +Postel & Reynolds [Page 4] + +RFC 854 May 1983 + + options are negotiated to the contrary, the following default + conditions pertain to the transmission of data over the TELNET + connection: + + 1) Insofar as the availability of local buffer space permits, + data should be accumulated in the host where it is generated + until a complete line of data is ready for transmission, or + until some locally-defined explicit signal to transmit occurs. + This signal could be generated either by a process or by a + human user. + + The motivation for this rule is the high cost, to some hosts, + of processing network input interrupts, coupled with the + default NVT specification that "echoes" do not traverse the + network. Thus, it is reasonable to buffer some amount of data + at its source. Many systems take some processing action at the + end of each input line (even line printers or card punches + frequently tend to work this way), so the transmission should + be triggered at the end of a line. On the other hand, a user + or process may sometimes find it necessary or desirable to + provide data which does not terminate at the end of a line; + therefore implementers are cautioned to provide methods of + locally signaling that all buffered data should be transmitted + immediately. + + 2) When a process has completed sending data to an NVT printer + and has no queued input from the NVT keyboard for further + processing (i.e., when a process at one end of a TELNET + connection cannot proceed without input from the other end), + the process must transmit the TELNET Go Ahead (GA) command. + + This rule is not intended to require that the TELNET GA command + be sent from a terminal at the end of each line, since server + hosts do not normally require a special signal (in addition to + end-of-line or other locally-defined characters) in order to + commence processing. Rather, the TELNET GA is designed to help + a user's local host operate a physically half duplex terminal + which has a "lockable" keyboard such as the IBM 2741. A + description of this type of terminal may help to explain the + proper use of the GA command. + + The terminal-computer connection is always under control of + either the user or the computer. Neither can unilaterally + seize control from the other; rather the controlling end must + relinguish its control explicitly. At the terminal end, the + hardware is constructed so as to relinquish control each time + that a "line" is terminated (i.e., when the "New Line" key is + typed by the user). When this occurs, the attached (local) + +Postel & Reynolds [Page 5] + +RFC 854 May 1983 + + computer processes the input data, decides if output should be + generated, and if not returns control to the terminal. If + output should be generated, control is retained by the computer + until all output has been transmitted. + + The difficulties of using this type of terminal through the + network should be obvious. The "local" computer is no longer + able to decide whether to retain control after seeing an + end-of-line signal or not; this decision can only be made by + the "remote" computer which is processing the data. Therefore, + the TELNET GA command provides a mechanism whereby the "remote" + (server) computer can signal the "local" (user) computer that + it is time to pass control to the user of the terminal. It + should be transmitted at those times, and only at those times, + when the user should be given control of the terminal. Note + that premature transmission of the GA command may result in the + blocking of output, since the user is likely to assume that the + transmitting system has paused, and therefore he will fail to + turn the line around manually. + + The foregoing, of course, does not apply to the user-to-server + direction of communication. In this direction, GAs may be sent at + any time, but need not ever be sent. Also, if the TELNET + connection is being used for process-to-process communication, GAs + need not be sent in either direction. Finally, for + terminal-to-terminal communication, GAs may be required in + neither, one, or both directions. If a host plans to support + terminal-to-terminal communication it is suggested that the host + provide the user with a means of manually signaling that it is + time for a GA to be sent over the TELNET connection; this, + however, is not a requirement on the implementer of a TELNET + process. + + Note that the symmetry of the TELNET model requires that there is + an NVT at each end of the TELNET connection, at least + conceptually. + + STANDARD REPRESENTATION OF CONTROL FUNCTIONS + + As stated in the Introduction to this document, the primary goal + of the TELNET protocol is the provision of a standard interfacing + of terminal devices and terminal-oriented processes through the + network. Early experiences with this type of interconnection have + shown that certain functions are implemented by most servers, but + that the methods of invoking these functions differ widely. For a + human user who interacts with several server systems, these + differences are highly frustrating. TELNET, therefore, defines a + standard representation for five of these functions, as described + +Postel & Reynolds [Page 6] + +RFC 854 May 1983 + + below. These standard representations have standard, but not + required, meanings (with the exception that the Interrupt Process + (IP) function may be required by other protocols which use + TELNET); that is, a system which does not provide the function to + local users need not provide it to network users and may treat the + standard representation for the function as a No-operation. On + the other hand, a system which does provide the function to a + local user is obliged to provide the same function to a network + user who transmits the standard representation for the function. + + Interrupt Process (IP) + + Many systems provide a function which suspends, interrupts, + aborts, or terminates the operation of a user process. This + function is frequently used when a user believes his process is + in an unending loop, or when an unwanted process has been + inadvertently activated. IP is the standard representation for + invoking this function. It should be noted by implementers + that IP may be required by other protocols which use TELNET, + and therefore should be implemented if these other protocols + are to be supported. + + Abort Output (AO) + + Many systems provide a function which allows a process, which + is generating output, to run to completion (or to reach the + same stopping point it would reach if running to completion) + but without sending the output to the user's terminal. + Further, this function typically clears any output already + produced but not yet actually printed (or displayed) on the + user's terminal. AO is the standard representation for + invoking this function. For example, some subsystem might + normally accept a user's command, send a long text string to + the user's terminal in response, and finally signal readiness + to accept the next command by sending a "prompt" character + (preceded by ) to the user's terminal. If the AO were + received during the transmission of the text string, a + reasonable implementation would be to suppress the remainder of + the text string, but transmit the prompt character and the + preceding . (This is possibly in distinction to the + action which might be taken if an IP were received; the IP + might cause suppression of the text string and an exit from the + subsystem.) + + It should be noted, by server systems which provide this + function, that there may be buffers external to the system (in + +Postel & Reynolds [Page 7] + +RFC 854 May 1983 + + the network and the user's local host) which should be cleared; + the appropriate way to do this is to transmit the "Synch" + signal (described below) to the user system. + + Are You There (AYT) + + Many systems provide a function which provides the user with + some visible (e.g., printable) evidence that the system is + still up and running. This function may be invoked by the user + when the system is unexpectedly "silent" for a long time, + because of the unanticipated (by the user) length of a + computation, an unusually heavy system load, etc. AYT is the + standard representation for invoking this function. + + Erase Character (EC) + + Many systems provide a function which deletes the last + preceding undeleted character or "print position"* from the + stream of data being supplied by the user. This function is + typically used to edit keyboard input when typing mistakes are + made. EC is the standard representation for invoking this + function. + + *NOTE: A "print position" may contain several characters + which are the result of overstrikes, or of sequences such as + BS ... + + Erase Line (EL) + + Many systems provide a function which deletes all the data in + the current "line" of input. This function is typically used + to edit keyboard input. EL is the standard representation for + invoking this function. + + THE TELNET "SYNCH" SIGNAL + + Most time-sharing systems provide mechanisms which allow a + terminal user to regain control of a "runaway" process; the IP and + AO functions described above are examples of these mechanisms. + Such systems, when used locally, have access to all of the signals + supplied by the user, whether these are normal characters or + special "out of band" signals such as those supplied by the + teletype "BREAK" key or the IBM 2741 "ATTN" key. This is not + necessarily true when terminals are connected to the system + through the network; the network's flow control mechanisms may + cause such a signal to be buffered elsewhere, for example in the + user's host. + +Postel & Reynolds [Page 8] + +RFC 854 May 1983 + + To counter this problem, the TELNET "Synch" mechanism is + introduced. A Synch signal consists of a TCP Urgent notification, + coupled with the TELNET command DATA MARK. The Urgent + notification, which is not subject to the flow control pertaining + to the TELNET connection, is used to invoke special handling of + the data stream by the process which receives it. In this mode, + the data stream is immediately scanned for "interesting" signals + as defined below, discarding intervening data. The TELNET command + DATA MARK (DM) is the synchronizing mark in the data stream which + indicates that any special signal has already occurred and the + recipient can return to normal processing of the data stream. + + The Synch is sent via the TCP send operation with the Urgent + flag set and the DM as the last (or only) data octet. + + When several Synchs are sent in rapid succession, the Urgent + notifications may be merged. It is not possible to count Urgents + since the number received will be less than or equal the number + sent. When in normal mode, a DM is a no operation; when in urgent + mode, it signals the end of the urgent processing. + + If TCP indicates the end of Urgent data before the DM is found, + TELNET should continue the special handling of the data stream + until the DM is found. + + If TCP indicates more Urgent data after the DM is found, it can + only be because of a subsequent Synch. TELNET should continue + the special handling of the data stream until another DM is + found. + + "Interesting" signals are defined to be: the TELNET standard + representations of IP, AO, and AYT (but not EC or EL); the local + analogs of these standard representations (if any); all other + TELNET commands; other site-defined signals which can be acted on + without delaying the scan of the data stream. + + Since one effect of the SYNCH mechanism is the discarding of + essentially all characters (except TELNET commands) between the + sender of the Synch and its recipient, this mechanism is specified + as the standard way to clear the data path when that is desired. + For example, if a user at a terminal causes an AO to be + transmitted, the server which receives the AO (if it provides that + function at all) should return a Synch to the user. + + Finally, just as the TCP Urgent notification is needed at the + TELNET level as an out-of-band signal, so other protocols which + make use of TELNET may require a TELNET command which can be + viewed as an out-of-band signal at a different level. + +Postel & Reynolds [Page 9] + +RFC 854 May 1983 + + By convention the sequence [IP, Synch] is to be used as such a + signal. For example, suppose that some other protocol, which uses + TELNET, defines the character string STOP analogously to the + TELNET command AO. Imagine that a user of this protocol wishes a + server to process the STOP string, but the connection is blocked + because the server is processing other commands. The user should + instruct his system to: + + 1. Send the TELNET IP character; + + 2. Send the TELNET SYNC sequence, that is: + + Send the Data Mark (DM) as the only character + in a TCP urgent mode send operation. + + 3. Send the character string STOP; and + + 4. Send the other protocol's analog of the TELNET DM, if any. + + The user (or process acting on his behalf) must transmit the + TELNET SYNCH sequence of step 2 above to ensure that the TELNET IP + gets through to the server's TELNET interpreter. + + The Urgent should wake up the TELNET process; the IP should + wake up the next higher level process. + + THE NVT PRINTER AND KEYBOARD + + The NVT printer has an unspecified carriage width and page length + and can produce representations of all 95 USASCII graphics (codes + 32 through 126). Of the 33 USASCII control codes (0 through 31 + and 127), and the 128 uncovered codes (128 through 255), the + following have specified meaning to the NVT printer: + + NAME CODE MEANING + + NULL (NUL) 0 No Operation + Line Feed (LF) 10 Moves the printer to the + next print line, keeping the + same horizontal position. + Carriage Return (CR) 13 Moves the printer to the left + margin of the current line. + +Postel & Reynolds [Page 10] + +RFC 854 May 1983 + + In addition, the following codes shall have defined, but not + required, effects on the NVT printer. Neither end of a TELNET + connection may assume that the other party will take, or will + have taken, any particular action upon receipt or transmission + of these: + + BELL (BEL) 7 Produces an audible or + visible signal (which does + NOT move the print head). + Back Space (BS) 8 Moves the print head one + character position towards + the left margin. + Horizontal Tab (HT) 9 Moves the printer to the + next horizontal tab stop. + It remains unspecified how + either party determines or + establishes where such tab + stops are located. + Vertical Tab (VT) 11 Moves the printer to the + next vertical tab stop. It + remains unspecified how + either party determines or + establishes where such tab + stops are located. + Form Feed (FF) 12 Moves the printer to the top + of the next page, keeping + the same horizontal position. + + All remaining codes do not cause the NVT printer to take any + action. + + The sequence "CR LF", as defined, will cause the NVT to be + positioned at the left margin of the next print line (as would, + for example, the sequence "LF CR"). However, many systems and + terminals do not treat CR and LF independently, and will have to + go to some effort to simulate their effect. (For example, some + terminals do not have a CR independent of the LF, but on such + terminals it may be possible to simulate a CR by backspacing.) + Therefore, the sequence "CR LF" must be treated as a single "new + line" character and used whenever their combined action is + intended; the sequence "CR NUL" must be used where a carriage + return alone is actually desired; and the CR character must be + avoided in other contexts. This rule gives assurance to systems + which must decide whether to perform a "new line" function or a + multiple-backspace that the TELNET stream contains a character + following a CR that will allow a rational decision. + + Note that "CR LF" or "CR NUL" is required in both directions + +Postel & Reynolds [Page 11] + +RFC 854 May 1983 + + (in the default ASCII mode), to preserve the symmetry of the + NVT model. Even though it may be known in some situations + (e.g., with remote echo and suppress go ahead options in + effect) that characters are not being sent to an actual + printer, nonetheless, for the sake of consistency, the protocol + requires that a NUL be inserted following a CR not followed by + a LF in the data stream. The converse of this is that a NUL + received in the data stream after a CR (in the absence of + options negotiations which explicitly specify otherwise) should + be stripped out prior to applying the NVT to local character + set mapping. + + The NVT keyboard has keys, or key combinations, or key sequences, + for generating all 128 USASCII codes. Note that although many + have no effect on the NVT printer, the NVT keyboard is capable of + generating them. + + In addition to these codes, the NVT keyboard shall be capable of + generating the following additional codes which, except as noted, + have defined, but not reguired, meanings. The actual code + assignments for these "characters" are in the TELNET Command + section, because they are viewed as being, in some sense, generic + and should be available even when the data stream is interpreted + as being some other character set. + + Synch + + This key allows the user to clear his data path to the other + party. The activation of this key causes a DM (see command + section) to be sent in the data stream and a TCP Urgent + notification is associated with it. The pair DM-Urgent is to + have required meaning as defined previously. + + Break (BRK) + + This code is provided because it is a signal outside the + USASCII set which is currently given local meaning within many + systems. It is intended to indicate that the Break Key or the + Attention Key was hit. Note, however, that this is intended to + provide a 129th code for systems which require it, not as a + synonym for the IP standard representation. + + Interrupt Process (IP) + + Suspend, interrupt, abort or terminate the process to which the + NVT is connected. Also, part of the out-of-band signal for + other protocols which use TELNET. + +Postel & Reynolds [Page 12] + +RFC 854 May 1983 + + Abort Output (AO) + + Allow the current process to (appear to) run to completion, but + do not send its output to the user. Also, send a Synch to the + user. + + Are You There (AYT) + + Send back to the NVT some visible (i.e., printable) evidence + that the AYT was received. + + Erase Character (EC) + + The recipient should delete the last preceding undeleted + character or "print position" from the data stream. + + Erase Line (EL) + + The recipient should delete characters from the data stream + back to, but not including, the last "CR LF" sequence sent over + the TELNET connection. + + The spirit of these "extra" keys, and also the printer format + effectors, is that they should represent a natural extension of + the mapping that already must be done from "NVT" into "local". + Just as the NVT data byte 68 (104 octal) should be mapped into + whatever the local code for "uppercase D" is, so the EC character + should be mapped into whatever the local "Erase Character" + function is. Further, just as the mapping for 124 (174 octal) is + somewhat arbitrary in an environment that has no "vertical bar" + character, the EL character may have a somewhat arbitrary mapping + (or none at all) if there is no local "Erase Line" facility. + Similarly for format effectors: if the terminal actually does + have a "Vertical Tab", then the mapping for VT is obvious, and + only when the terminal does not have a vertical tab should the + effect of VT be unpredictable. + +TELNET COMMAND STRUCTURE + + All TELNET commands consist of at least a two byte sequence: the + "Interpret as Command" (IAC) escape character followed by the code + for the command. The commands dealing with option negotiation are + three byte sequences, the third byte being the code for the option + referenced. This format was chosen so that as more comprehensive use + of the "data space" is made -- by negotiations from the basic NVT, of + course -- collisions of data bytes with reserved command values will + be minimized, all such collisions requiring the inconvenience, and + +Postel & Reynolds [Page 13] + +RFC 854 May 1983 + + inefficiency, of "escaping" the data bytes into the stream. With the + current set-up, only the IAC need be doubled to be sent as data, and + the other 255 codes may be passed transparently. + + The following are the defined TELNET commands. Note that these codes + and code sequences have the indicated meaning only when immediately + preceded by an IAC. + + NAME CODE MEANING + + SE 240 End of subnegotiation parameters. + NOP 241 No operation. + Data Mark 242 The data stream portion of a Synch. + This should always be accompanied + by a TCP Urgent notification. + Break 243 NVT character BRK. + Interrupt Process 244 The function IP. + Abort output 245 The function AO. + Are You There 246 The function AYT. + Erase character 247 The function EC. + Erase Line 248 The function EL. + Go ahead 249 The GA signal. + SB 250 Indicates that what follows is + subnegotiation of the indicated + option. + WILL (option code) 251 Indicates the desire to begin + performing, or confirmation that + you are now performing, the + indicated option. + WON'T (option code) 252 Indicates the refusal to perform, + or continue performing, the + indicated option. + DO (option code) 253 Indicates the request that the + other party perform, or + confirmation that you are expecting + the other party to perform, the + indicated option. + DON'T (option code) 254 Indicates the demand that the + other party stop performing, + or confirmation that you are no + longer expecting the other party + to perform, the indicated option. + IAC 255 Data Byte 255. + +Postel & Reynolds [Page 14] + +RFC 854 May 1983 + +CONNECTION ESTABLISHMENT + + The TELNET TCP connection is established between the user's port U + and the server's port L. The server listens on its well known port L + for such connections. Since a TCP connection is full duplex and + identified by the pair of ports, the server can engage in many + simultaneous connections involving its port L and different user + ports U. + + Port Assignment + + When used for remote user access to service hosts (i.e., remote + terminal access) this protocol is assigned server port 23 + (27 octal). That is L=23. + +Postel & Reynolds [Page 15] diff --git a/socket/DOCS/RFC856.TXT b/socket/DOCS/RFC856.TXT new file mode 100644 index 0000000..5ecdd7f --- /dev/null +++ b/socket/DOCS/RFC856.TXT @@ -0,0 +1,235 @@ +RFC 856 + + + +

RFC 856

+


+
+
+Network Working Group                                          J. Postel
+Request for Comments: 856                                    J. Reynolds
+                                                                     ISI
+Obsoletes: NIC 15389                                            May 1983
+
+                       TELNET BINARY TRANSMISSION
+
+
+This RFC specifies a standard for the ARPA Internet community.  Hosts on
+the ARPA Internet are expected to adopt and implement this standard.
+
+1.  Command Name and Code
+
+   TRANSMIT-BINARY      0
+
+2.  Command Meanings
+
+   IAC WILL TRANSMIT-BINARY
+
+      The sender of this command REQUESTS permission to begin
+      transmitting, or confirms that it will now begin transmitting
+      characters which are to be interpreted as 8 bits of binary data by
+      the receiver of the data.
+
+   IAC WON'T TRANSMIT-BINARY
+
+      If the connection is already being operated in binary transmission
+      mode, the sender of this command DEMANDS to begin transmitting
+      data characters which are to be interpreted as standard NVT ASCII
+      characters by the receiver of the data.  If the connection is not
+      already being operated in binary transmission mode, the sender of
+      this command REFUSES to begin transmitting characters which are to
+      be interpreted as binary characters by the receiver of the data
+      (i.e., the sender of the data demands to continue transmitting
+      characters in its present mode).
+
+      A connection is being operated in binary transmission mode only
+      when one party has requested it and the other has acknowledged it.
+
+   IAC DO TRANSMIT-BINARY
+
+      The sender of this command REQUESTS that the sender of the data
+      start transmitting, or confirms that the sender of data is
+      expected to transmit, characters which are to be interpreted as 8
+      bits of binary data (i.e., by the party sending this command).
+
+   IAC DON'T TRANSMIT-BINARY
+
+      If the connection is already being operated in binary transmission
+      mode, the sender of this command DEMANDS that the sender of the
+      data start transmitting characters which are to be interpreted as
+
+
+Postel & Reynolds                                               [Page 1]
+
+ + +RFC 856 May 1983 + + + standard NVT ASCII characters by the receiver of the data (i.e., + the party sending this command). If the connection is not already + being operated in binary transmission mode, the sender of this + command DEMANDS that the sender of data continue transmitting + characters which are to be interpreted in the present mode. + + A connection is being operated in binary transmission mode only + when one party has requested it and the other has acknowledged it. + +3. Default + + WON'T TRANSMIT-BINARY + + DON'T TRANSMIT-BINARY + + The connection is not operated in binary mode. + +4. Motivation for the Option + + It is sometimes useful to have available a binary transmission path + within TELNET without having to utilize one of the more efficient, + higher level protocols providing binary transmission (such as the + File Transfer Protocol). The use of the IAC prefix within the basic + TELNET protocol provides the option of binary transmission in a + natural way, requiring only the addition of a mechanism by which the + parties involved can agree to INTERPRET the characters transmitted + over a TELNET connection as binary data. + +5. Description of the Option + + With the binary transmission option in effect, the receiver should + interpret characters received from the transmitter which are not + preceded with IAC as 8 bit binary data, with the exception of IAC + followed by IAC which stands for the 8 bit binary data with the + decimal value 255. IAC followed by an effective TELNET command (plus + any additional characters required to complete the command) is still + the command even with the binary transmission option in effect. IAC + followed by a character which is not a defined TELNET command has the + same meaning as IAC followed by NOP, although an IAC followed by an + undefined command should not normally be sent in this mode. + +6. Implementation Suggestions + + It is foreseen that implementations of the binary transmission option + will choose to refuse some other options (such as the EBCDIC + transmission option) while the binary transmission option is in + + + + +Postel & Reynolds [Page 2] +
+ + +RFC 856 May 1983 + + + effect. However, if a pair of hosts can understand being in binary + transmission mode simultaneous with being in, for example, echo mode, + then it is all right if they negotiate that combination. + + It should be mentioned that the meanings of WON'T and DON'T are + dependent upon whether the connection is presently being operated in + binary mode or not. Consider a connection operating in, say, EBCDIC + mode which involves a system which has chosen not to implement any + knowledge of the binary command. If this system were to receive a DO + TRANSMIT-BINARY, it would not recognize the TRANSMIT-BINARY option + and therefore would return a WON'T TRANSMIT-BINARY. If the default + for the WON'T TRANSMIT-BINARY were always NVT ASCII, the sender of + the DO TRANSMIT-BINARY would expect the recipient to have switched to + NVT ASCII, whereas the receiver of the DO TRANSMIT-BINARY would not + make this interpretation. + + Thus, we have the rule that when a connection is not presently + operating in binary mode, the default (i.e., the interpretation of + WON'T and DON'T) is to continue operating in the current mode, + whether that is NVT ASCII, EBCDIC, or some other mode. This rule, + however, is not applied once a connection is operating in a binary + mode (as agreed to by both ends); this would require each end of the + connection to maintain a stack, containing all of the encoding-method + transitions which had previously occurred on the connection, in order + to properly interpret a WON'T or DON'T. Thus, a WON'T or DON'T + received after the connection is operating in binary mode causes the + encoding method to revert to NVT ASCII. + + It should be remembered that a TELNET connection is a two way + communication channel. The binary transmission mode must be + negotiated separately for each direction of data flow, if that is + desired. + + Implementation of the binary transmission option, as is the case with + implementations of all other TELNET options, must follow the loop + preventing rules given in the General Considerations section of the + TELNET Protocol Specification. + + Consider now some issues of binary transmission both to and from + both a process and a terminal: + + a. Binary transmission from a terminal. + + The implementer of the binary transmission option should + consider how (or whether) a terminal transmitting over a TELNET + connection with binary transmission in effect is allowed to + generate all eight bit characters, ignoring parity + considerations, etc., on input from the terminal. + + +Postel & Reynolds [Page 3] +
+ + +RFC 856 May 1983 + + + b. Binary transmission to a process. + + The implementer of the binary transmission option should + consider how (or whether) all characters are passed to a + process receiving over a connection with binary transmission in + effect. As an example of the possible problem, TOPS-20 + intercepts certain characters (e.g., ETX, the terminal + control-C) at monitor level and does not pass them to the + process. + + c. Binary transmission from a process. + + The implementer of the binary transmission option should + consider how (or whether) a process transmitting over a + connection with binary transmission in effect is allowed to + send all eight bit characters with no characters intercepted by + the monitor and changed to other characters. An example of + such a conversion may be found in the TOPS-20 system where + certain non-printing characters are normally converted to a + Circumflex (up-arrow) followed by a printing character. + + d. Binary transmission to a terminal. + + The implementer of the binary transmission option should + consider how (or whether) all characters received over a + connection with binary transmission in effect are sent to a + local terminal. At issue may be the addition of timing + characters normally inserted locally, parity calculations, and + any normal code conversion. + + + + + + + + + + + + + + + + + + + + + +Postel & Reynolds [Page 4] +
+
diff --git a/socket/DOCS/RFC861.TXT b/socket/DOCS/RFC861.TXT new file mode 100644 index 0000000..edcd60a --- /dev/null +++ b/socket/DOCS/RFC861.TXT @@ -0,0 +1,121 @@ +RFC 861 + + + +

RFC 861

+


+
+
+
+Network Working Group                                          J. Postel
+Request for Comments: 861                                    J. Reynolds
+                                                                     ISI
+Obsoletes: NIC 16239                                            May 1983
+
+                 TELNET EXTENDED OPTIONS - LIST OPTION
+
+
+This RFC specifies a standard for the ARPA Internet community.  Hosts on
+the ARPA Internet are expected to adopt and implement this standard.
+
+1.  Command Name and Code
+
+   EXTENDED-OPTIONS-LIST (EXOPL)     255
+
+2.  Command Meanings
+
+   IAC DO EXOPL
+
+      The sender of this command REQUESTS that the receiver of this
+      command begin negotiating, or confirms that the receiver of this
+      command is expected to begin negotiating, TELNET options which are
+      on the "Extended Options List".
+
+   IAC WILL EXOPL
+
+      The sender of this command requests permission to begin
+      negotiating, or confirms that it will begin negotiating, TELNET
+      options which are on the "Extended Options List".
+
+   IAC WON'T EXOPL
+
+      The sender of this command REFUSES to negotiate, or to continue
+      negotiating, options on the "Extended Options List".
+
+   IAC DON'T EXOPL
+
+      The sender of this command DEMANDS that the receiver conduct no
+      further negotiation of options on the "Extended Options List".
+
+   IAC SB EXOPL <subcommand>
+
+      The subcommand contains information required for the negotiation
+      of an option of the "Extended Options List".  The format of the
+      subcommand is discussed in section 5 below.
+
+3.  Default
+
+   WON'T EXOPL, DON'T EXOPL
+
+
+
+
+Postel & Reynolds                                               [Page 1]
+
+ + +RFC 861 May 1983 + + + Negotiation of options on the "Extended Options List" is not + permitted. + + +4. Motivation for the Option + + Eventually, a 257th TELNET option will be needed. This option will + extend the option list for another 256 options in a manner which is + easy to implement. The option is proposed now, rather than later + (probably much later), in order to reserve the option number (255). + +5. An Abstract Description of the Option + + The EXOPL option has five subcommand codes: WILL, WON'T, DO, DON'T, + and SB. They have exactly the same meanings as the TELNET commands + with the same names, and are used in exactly the same way. For + consistency, these subcommand codes will have the same values as the + TELNET command codes (250-254). Thus, the format for negotiating a + specific option on the "Extended Options List" (once both parties + have agreed to use it) is: + + IAC SB EXOPL DO/DON'T/WILL/WON'T/<option code> IAC SE + + Once both sides have agreed to use the specific option specified by + <option code>, subnegotiation may be required. In this case the + format to be used is: + + IAC SB EXOPL SB <option code> <parameters> SE IAC SE + + + + + + + + + + + + + + + + + + + + + +Postel & Reynolds [Page 2] +
+
diff --git a/socket/DOCS/RFC959.TXT b/socket/DOCS/RFC959.TXT new file mode 100644 index 0000000..5cd9c99 --- /dev/null +++ b/socket/DOCS/RFC959.TXT @@ -0,0 +1,3351 @@ +rfc959 + +Press here to go to the top of the rfc 'tree'. + + +Network Working Group J. Postel +Request for Comments: 959 J. Reynolds + ISI +Obsoletes RFC: 765 (IEN 149) October 1985 + + FILE TRANSFER PROTOCOL (FTP) + +Status of this Memo + + This memo is the official specification of the File Transfer + Protocol (FTP). Distribution of this memo is unlimited. + + The following new optional commands are included in this edition of + the specification: + + CDUP (Change to Parent Directory), SMNT (Structure Mount), STOU + (Store Unique), RMD (Remove Directory), MKD (Make Directory), PWD + (Print Directory), and SYST (System). + + Note that this specification is compatible with the previous edition. + +1. INTRODUCTION + + The objectives of FTP are 1) to promote sharing of files (computer + programs and/or data), 2) to encourage indirect or implicit (via + programs) use of remote computers, 3) to shield a user from + variations in file storage systems among hosts, and 4) to transfer + data reliably and efficiently. FTP, though usable directly by a user + at a terminal, is designed mainly for use by programs. + + The attempt in this specification is to satisfy the diverse needs of + users of maxi-hosts, mini-hosts, personal workstations, and TACs, + with a simple, and easily implemented protocol design. + + This paper assumes knowledge of the Transmission Control Protocol + (TCP) [2] and the Telnet Protocol [3]. These documents are contained + in the ARPA-Internet protocol handbook [1]. + +2. OVERVIEW + + In this section, the history, the terminology, and the FTP model are + discussed. The terms defined in this section are only those that + have special significance in FTP. Some of the terminology is very + specific to the FTP model; some readers may wish to turn to the + section on the FTP model while reviewing the terminology. + +Postel & Reynolds [Page 1] + + +RFC 959 October 1985 +File Transfer Protocol + + 2.1. HISTORY + + FTP has had a long evolution over the years. Appendix III is a + chronological compilation of Request for Comments documents + relating to FTP. These include the first proposed file transfer + mechanisms in 1971 that were developed for implementation on hosts + at M.I.T. (RFC 114), plus comments and discussion in RFC 141. + + RFC 172 provided a user-level oriented protocol for file transfer + between host computers (including terminal IMPs). A revision of + this as RFC 265, restated FTP for additional review, while RFC 281 + suggested further changes. The use of a "Set Data Type" + transaction was proposed in RFC 294 in January 1982. + + RFC 354 obsoleted RFCs 264 and 265. The File Transfer Protocol + was now defined as a protocol for file transfer between HOSTs on + the ARPANET, with the primary function of FTP defined as + transfering files efficiently and reliably among hosts and + allowing the convenient use of remote file storage capabilities. + RFC 385 further commented on errors, emphasis points, and + additions to the protocol, while RFC 414 provided a status report + on the working server and user FTPs. RFC 430, issued in 1973, + (among other RFCs too numerous to mention) presented further + comments on FTP. Finally, an "official" FTP document was + published as RFC 454. + + By July 1973, considerable changes from the last versions of FTP + were made, but the general structure remained the same. RFC 542 + was published as a new "official" specification to reflect these + changes. However, many implementations based on the older + specification were not updated. + + In 1974, RFCs 607 and 614 continued comments on FTP. RFC 624 + proposed further design changes and minor modifications. In 1975, + RFC 686 entitled, "Leaving Well Enough Alone", discussed the + differences between all of the early and later versions of FTP. + RFC 691 presented a minor revision of RFC 686, regarding the + subject of print files. + + Motivated by the transition from the NCP to the TCP as the + underlying protocol, a phoenix was born out of all of the above + efforts in RFC 765 as the specification of FTP for use on TCP. + + This current edition of the FTP specification is intended to + correct some minor documentation errors, to improve the + explanation of some protocol features, and to add some new + optional commands. + +Postel & Reynolds [Page 2] + + +RFC 959 October 1985 +File Transfer Protocol + + In particular, the following new optional commands are included in + this edition of the specification: + + CDUP - Change to Parent Directory + + SMNT - Structure Mount + + STOU - Store Unique + + RMD - Remove Directory + + MKD - Make Directory + + PWD - Print Directory + + SYST - System + + This specification is compatible with the previous edition. A + program implemented in conformance to the previous specification + should automatically be in conformance to this specification. + + 2.2. TERMINOLOGY + + ASCII + + The ASCII character set is as defined in the ARPA-Internet + Protocol Handbook. In FTP, ASCII characters are defined to be + the lower half of an eight-bit code set (i.e., the most + significant bit is zero). + + access controls + + Access controls define users' access privileges to the use of a + system, and to the files in that system. Access controls are + necessary to prevent unauthorized or accidental use of files. + It is the prerogative of a server-FTP process to invoke access + controls. + + byte size + + There are two byte sizes of interest in FTP: the logical byte + size of the file, and the transfer byte size used for the + transmission of the data. The transfer byte size is always 8 + bits. The transfer byte size is not necessarily the byte size + in which data is to be stored in a system, nor the logical byte + size for interpretation of the structure of the data. + +Postel & Reynolds [Page 3] + + +RFC 959 October 1985 +File Transfer Protocol + + control connection + + The communication path between the USER-PI and SERVER-PI for + the exchange of commands and replies. This connection follows + the Telnet Protocol. + + data connection + + A full duplex connection over which data is transferred, in a + specified mode and type. The data transferred may be a part of + a file, an entire file or a number of files. The path may be + between a server-DTP and a user-DTP, or between two + server-DTPs. + + data port + + The passive data transfer process "listens" on the data port + for a connection from the active transfer process in order to + open the data connection. + + DTP + + The data transfer process establishes and manages the data + connection. The DTP can be passive or active. + + End-of-Line + + The end-of-line sequence defines the separation of printing + lines. The sequence is Carriage Return, followed by Line Feed. + + EOF + + The end-of-file condition that defines the end of a file being + transferred. + + EOR + + The end-of-record condition that defines the end of a record + being transferred. + + error recovery + + A procedure that allows a user to recover from certain errors + such as failure of either host system or transfer process. In + FTP, error recovery may involve restarting a file transfer at a + given checkpoint. + +Postel & Reynolds [Page 4] + + +RFC 959 October 1985 +File Transfer Protocol + + FTP commands + + A set of commands that comprise the control information flowing + from the user-FTP to the server-FTP process. + + file + + An ordered set of computer data (including programs), of + arbitrary length, uniquely identified by a pathname. + + mode + + The mode in which data is to be transferred via the data + connection. The mode defines the data format during transfer + including EOR and EOF. The transfer modes defined in FTP are + described in the Section on Transmission Modes. + + NVT + + The Network Virtual Terminal as defined in the Telnet Protocol. + + NVFS + + The Network Virtual File System. A concept which defines a + standard network file system with standard commands and + pathname conventions. + + page + + A file may be structured as a set of independent parts called + pages. FTP supports the transmission of discontinuous files as + independent indexed pages. + + pathname + + Pathname is defined to be the character string which must be + input to a file system by a user in order to identify a file. + Pathname normally contains device and/or directory names, and + file name specification. FTP does not yet specify a standard + pathname convention. Each user must follow the file naming + conventions of the file systems involved in the transfer. + + PI + + The protocol interpreter. The user and server sides of the + protocol have distinct roles implemented in a user-PI and a + server-PI. + +Postel & Reynolds [Page 5] + + +RFC 959 October 1985 +File Transfer Protocol + + record + + A sequential file may be structured as a number of contiguous + parts called records. Record structures are supported by FTP + but a file need not have record structure. + + reply + + A reply is an acknowledgment (positive or negative) sent from + server to user via the control connection in response to FTP + commands. The general form of a reply is a completion code + (including error codes) followed by a text string. The codes + are for use by programs and the text is usually intended for + human users. + + server-DTP + + The data transfer process, in its normal "active" state, + establishes the data connection with the "listening" data port. + It sets up parameters for transfer and storage, and transfers + data on command from its PI. The DTP can be placed in a + "passive" state to listen for, rather than initiate a + connection on the data port. + + server-FTP process + + A process or set of processes which perform the function of + file transfer in cooperation with a user-FTP process and, + possibly, another server. The functions consist of a protocol + interpreter (PI) and a data transfer process (DTP). + + server-PI + + The server protocol interpreter "listens" on Port L for a + connection from a user-PI and establishes a control + communication connection. It receives standard FTP commands + from the user-PI, sends replies, and governs the server-DTP. + + type + + The data representation type used for data transfer and + storage. Type implies certain transformations between the time + of data storage and data transfer. The representation types + defined in FTP are described in the Section on Establishing + Data Connections. + +Postel & Reynolds [Page 6] + + +RFC 959 October 1985 +File Transfer Protocol + + user + + A person or a process on behalf of a person wishing to obtain + file transfer service. The human user may interact directly + with a server-FTP process, but use of a user-FTP process is + preferred since the protocol design is weighted towards + automata. + + user-DTP + + The data transfer process "listens" on the data port for a + connection from a server-FTP process. If two servers are + transferring data between them, the user-DTP is inactive. + + user-FTP process + + A set of functions including a protocol interpreter, a data + transfer process and a user interface which together perform + the function of file transfer in cooperation with one or more + server-FTP processes. The user interface allows a local + language to be used in the command-reply dialogue with the + user. + + user-PI + + The user protocol interpreter initiates the control connection + from its port U to the server-FTP process, initiates FTP + commands, and governs the user-DTP if that process is part of + the file transfer. + +Postel & Reynolds [Page 7] + + +RFC 959 October 1985 +File Transfer Protocol + + 2.3. THE FTP MODEL + + With the above definitions in mind, the following model (shown in + Figure 1) may be diagrammed for an FTP service. + + ------------- + |/---------\| + || User || -------- + ||Interface|<--->| User | + |\----^----/| -------- + ---------- | | | + |/------\| FTP Commands |/----V----\| + ||Server|<---------------->| User || + || PI || FTP Replies || PI || + |\--^---/| |\----^----/| + | | | | | | + -------- |/--V---\| Data |/----V----\| -------- + | File |<--->|Server|<---------------->| User |<--->| File | + |System| || DTP || Connection || DTP || |System| + -------- |\------/| |\---------/| -------- + ---------- ------------- + + Server-FTP USER-FTP + + NOTES: 1. The data connection may be used in either direction. + 2. The data connection need not exist all of the time. + + Figure 1 Model for FTP Use + + In the model described in Figure 1, the user-protocol interpreter + initiates the control connection. The control connection follows + the Telnet protocol. At the initiation of the user, standard FTP + commands are generated by the user-PI and transmitted to the + server process via the control connection. (The user may + establish a direct control connection to the server-FTP, from a + TAC terminal for example, and generate standard FTP commands + independently, bypassing the user-FTP process.) Standard replies + are sent from the server-PI to the user-PI over the control + connection in response to the commands. + + The FTP commands specify the parameters for the data connection + (data port, transfer mode, representation type, and structure) and + the nature of file system operation (store, retrieve, append, + delete, etc.). The user-DTP or its designate should "listen" on + the specified data port, and the server initiate the data + connection and data transfer in accordance with the specified + parameters. It should be noted that the data port need not be in + +Postel & Reynolds [Page 8] + + +RFC 959 October 1985 +File Transfer Protocol + + the same host that initiates the FTP commands via the control + connection, but the user or the user-FTP process must ensure a + "listen" on the specified data port. It ought to also be noted + that the data connection may be used for simultaneous sending and + receiving. + + In another situation a user might wish to transfer files between + two hosts, neither of which is a local host. The user sets up + control connections to the two servers and then arranges for a + data connection between them. In this manner, control information + is passed to the user-PI but data is transferred between the + server data transfer processes. Following is a model of this + server-server interaction. + + + Control ------------ Control + ---------->| User-FTP |<----------- + | | User-PI | | + | | "C" | | + V ------------ V + -------------- -------------- + | Server-FTP | Data Connection | Server-FTP | + | "A" |<---------------------->| "B" | + -------------- Port (A) Port (B) -------------- + + + Figure 2 + + The protocol requires that the control connections be open while + data transfer is in progress. It is the responsibility of the + user to request the closing of the control connections when + finished using the FTP service, while it is the server who takes + the action. The server may abort data transfer if the control + connections are closed without command. + + The Relationship between FTP and Telnet: + + The FTP uses the Telnet protocol on the control connection. + This can be achieved in two ways: first, the user-PI or the + server-PI may implement the rules of the Telnet Protocol + directly in their own procedures; or, second, the user-PI or + the server-PI may make use of the existing Telnet module in the + system. + + Ease of implementaion, sharing code, and modular programming + argue for the second approach. Efficiency and independence + +Postel & Reynolds [Page 9] + + +RFC 959 October 1985 +File Transfer Protocol + + argue for the first approach. In practice, FTP relies on very + little of the Telnet Protocol, so the first approach does not + necessarily involve a large amount of code. + +3. DATA TRANSFER FUNCTIONS + + Files are transferred only via the data connection. The control + connection is used for the transfer of commands, which describe the + functions to be performed, and the replies to these commands (see the + Section on FTP Replies). Several commands are concerned with the + transfer of data between hosts. These data transfer commands include + the MODE command which specify how the bits of the data are to be + transmitted, and the STRUcture and TYPE commands, which are used to + define the way in which the data are to be represented. The + transmission and representation are basically independent but the + "Stream" transmission mode is dependent on the file structure + attribute and if "Compressed" transmission mode is used, the nature + of the filler byte depends on the representation type. + + 3.1. DATA REPRESENTATION AND STORAGE + + Data is transferred from a storage device in the sending host to a + storage device in the receiving host. Often it is necessary to + perform certain transformations on the data because data storage + representations in the two systems are different. For example, + NVT-ASCII has different data storage representations in different + systems. DEC TOPS-20s's generally store NVT-ASCII as five 7-bit + ASCII characters, left-justified in a 36-bit word. IBM Mainframe's + store NVT-ASCII as 8-bit EBCDIC codes. Multics stores NVT-ASCII + as four 9-bit characters in a 36-bit word. It is desirable to + convert characters into the standard NVT-ASCII representation when + transmitting text between dissimilar systems. The sending and + receiving sites would have to perform the necessary + transformations between the standard representation and their + internal representations. + + A different problem in representation arises when transmitting + binary data (not character codes) between host systems with + different word lengths. It is not always clear how the sender + should send data, and the receiver store it. For example, when + transmitting 32-bit bytes from a 32-bit word-length system to a + 36-bit word-length system, it may be desirable (for reasons of + efficiency and usefulness) to store the 32-bit bytes + right-justified in a 36-bit word in the latter system. In any + case, the user should have the option of specifying data + representation and transformation functions. It should be noted + +Postel & Reynolds [Page 10] + + +RFC 959 October 1985 +File Transfer Protocol + + that FTP provides for very limited data type representations. + Transformations desired beyond this limited capability should be + performed by the user directly. + + 3.1.1. DATA TYPES + + Data representations are handled in FTP by a user specifying a + representation type. This type may implicitly (as in ASCII or + EBCDIC) or explicitly (as in Local byte) define a byte size for + interpretation which is referred to as the "logical byte size." + Note that this has nothing to do with the byte size used for + transmission over the data connection, called the "transfer + byte size", and the two should not be confused. For example, + NVT-ASCII has a logical byte size of 8 bits. If the type is + Local byte, then the TYPE command has an obligatory second + parameter specifying the logical byte size. The transfer byte + size is always 8 bits. + + 3.1.1.1. ASCII TYPE + + This is the default type and must be accepted by all FTP + implementations. It is intended primarily for the transfer + of text files, except when both hosts would find the EBCDIC + type more convenient. + + The sender converts the data from an internal character + representation to the standard 8-bit NVT-ASCII + representation (see the Telnet specification). The receiver + will convert the data from the standard form to his own + internal form. + + In accordance with the NVT standard, the sequence + should be used where necessary to denote the end of a line + of text. (See the discussion of file structure at the end + of the Section on Data Representation and Storage.) + + Using the standard NVT-ASCII representation means that data + must be interpreted as 8-bit bytes. + + The Format parameter for ASCII and EBCDIC types is discussed + below. + +Postel & Reynolds [Page 11] + + +RFC 959 October 1985 +File Transfer Protocol + + 3.1.1.2. EBCDIC TYPE + + This type is intended for efficient transfer between hosts + which use EBCDIC for their internal character + representation. + + For transmission, the data are represented as 8-bit EBCDIC + characters. The character code is the only difference + between the functional specifications of EBCDIC and ASCII + types. + + End-of-line (as opposed to end-of-record--see the discussion + of structure) will probably be rarely used with EBCDIC type + for purposes of denoting structure, but where it is + necessary the character should be used. + + 3.1.1.3. IMAGE TYPE + + The data are sent as contiguous bits which, for transfer, + are packed into the 8-bit transfer bytes. The receiving + site must store the data as contiguous bits. The structure + of the storage system might necessitate the padding of the + file (or of each record, for a record-structured file) to + some convenient boundary (byte, word or block). This + padding, which must be all zeros, may occur only at the end + of the file (or at the end of each record) and there must be + a way of identifying the padding bits so that they may be + stripped off if the file is retrieved. The padding + transformation should be well publicized to enable a user to + process a file at the storage site. + + Image type is intended for the efficient storage and + retrieval of files and for the transfer of binary data. It + is recommended that this type be accepted by all FTP + implementations. + + 3.1.1.4. LOCAL TYPE + + The data is transferred in logical bytes of the size + specified by the obligatory second parameter, Byte size. + The value of Byte size must be a decimal integer; there is + no default value. The logical byte size is not necessarily + the same as the transfer byte size. If there is a + difference in byte sizes, then the logical bytes should be + packed contiguously, disregarding transfer byte boundaries + and with any necessary padding at the end. + +Postel & Reynolds [Page 12] + + +RFC 959 October 1985 +File Transfer Protocol + + When the data reaches the receiving host, it will be + transformed in a manner dependent on the logical byte size + and the particular host. This transformation must be + invertible (i.e., an identical file can be retrieved if the + same parameters are used) and should be well publicized by + the FTP implementors. + + For example, a user sending 36-bit floating-point numbers to + a host with a 32-bit word could send that data as Local byte + with a logical byte size of 36. The receiving host would + then be expected to store the logical bytes so that they + could be easily manipulated; in this example putting the + 36-bit logical bytes into 64-bit double words should + suffice. + + In another example, a pair of hosts with a 36-bit word size + may send data to one another in words by using TYPE L 36. + The data would be sent in the 8-bit transmission bytes + packed so that 9 transmission bytes carried two host words. + + 3.1.1.5. FORMAT CONTROL + + The types ASCII and EBCDIC also take a second (optional) + parameter; this is to indicate what kind of vertical format + control, if any, is associated with a file. The following + data representation types are defined in FTP: + + A character file may be transferred to a host for one of + three purposes: for printing, for storage and later + retrieval, or for processing. If a file is sent for + printing, the receiving host must know how the vertical + format control is represented. In the second case, it must + be possible to store a file at a host and then retrieve it + later in exactly the same form. Finally, it should be + possible to move a file from one host to another and process + the file at the second host without undue trouble. A single + ASCII or EBCDIC format does not satisfy all these + conditions. Therefore, these types have a second parameter + specifying one of the following three formats: + + 3.1.1.5.1. NON PRINT + + This is the default format to be used if the second + (format) parameter is omitted. Non-print format must be + accepted by all FTP implementations. + +Postel & Reynolds [Page 13] + + +RFC 959 October 1985 +File Transfer Protocol + + The file need contain no vertical format information. If + it is passed to a printer process, this process may + assume standard values for spacing and margins. + + Normally, this format will be used with files destined + for processing or just storage. + + 3.1.1.5.2. TELNET FORMAT CONTROLS + + The file contains ASCII/EBCDIC vertical format controls + (i.e., , , , , ) which the printer + process will interpret appropriately. , in exactly + this sequence, also denotes end-of-line. + + 3.1.1.5.2. CARRIAGE CONTROL (ASA) + + The file contains ASA (FORTRAN) vertical format control + characters. (See RFC 740 Appendix C; and Communications + of the ACM, Vol. 7, No. 10, p. 606, October 1964.) In a + line or a record formatted according to the ASA Standard, + the first character is not to be printed. Instead, it + should be used to determine the vertical movement of the + paper which should take place before the rest of the + record is printed. + + The ASA Standard specifies the following control + characters: + + Character Vertical Spacing + + blank Move paper up one line + 0 Move paper up two lines + 1 Move paper to top of next page + + No movement, i.e., overprint + + Clearly there must be some way for a printer process to + distinguish the end of the structural entity. If a file + has record structure (see below) this is no problem; + records will be explicitly marked during transfer and + storage. If the file has no record structure, the + end-of-line sequence is used to separate printing lines, + but these format effectors are overridden by the ASA + controls. + +Postel & Reynolds [Page 14] + + +RFC 959 October 1985 +File Transfer Protocol + + 3.1.2. DATA STRUCTURES + + In addition to different representation types, FTP allows the + structure of a file to be specified. Three file structures are + defined in FTP: + + file-structure, where there is no internal structure and + the file is considered to be a + continuous sequence of data bytes, + + record-structure, where the file is made up of sequential + records, + + and page-structure, where the file is made up of independent + indexed pages. + + File-structure is the default to be assumed if the STRUcture + command has not been used but both file and record structures + must be accepted for "text" files (i.e., files with TYPE ASCII + or EBCDIC) by all FTP implementations. The structure of a file + will affect both the transfer mode of a file (see the Section + on Transmission Modes) and the interpretation and storage of + the file. + + The "natural" structure of a file will depend on which host + stores the file. A source-code file will usually be stored on + an IBM Mainframe in fixed length records but on a DEC TOPS-20 + as a stream of characters partitioned into lines, for example + by . If the transfer of files between such disparate + sites is to be useful, there must be some way for one site to + recognize the other's assumptions about the file. + + With some sites being naturally file-oriented and others + naturally record-oriented there may be problems if a file with + one structure is sent to a host oriented to the other. If a + text file is sent with record-structure to a host which is file + oriented, then that host should apply an internal + transformation to the file based on the record structure. + Obviously, this transformation should be useful, but it must + also be invertible so that an identical file may be retrieved + using record structure. + + In the case of a file being sent with file-structure to a + record-oriented host, there exists the question of what + criteria the host should use to divide the file into records + which can be processed locally. If this division is necessary, + the FTP implementation should use the end-of-line sequence, + +Postel & Reynolds [Page 15] + + +RFC 959 October 1985 +File Transfer Protocol + + for ASCII, or for EBCDIC text files, as the + delimiter. If an FTP implementation adopts this technique, it + must be prepared to reverse the transformation if the file is + retrieved with file-structure. + + 3.1.2.1. FILE STRUCTURE + + File structure is the default to be assumed if the STRUcture + command has not been used. + + In file-structure there is no internal structure and the + file is considered to be a continuous sequence of data + bytes. + + 3.1.2.2. RECORD STRUCTURE + + Record structures must be accepted for "text" files (i.e., + files with TYPE ASCII or EBCDIC) by all FTP implementations. + + In record-structure the file is made up of sequential + records. + + 3.1.2.3. PAGE STRUCTURE + + To transmit files that are discontinuous, FTP defines a page + structure. Files of this type are sometimes known as + "random access files" or even as "holey files". In these + files there is sometimes other information associated with + the file as a whole (e.g., a file descriptor), or with a + section of the file (e.g., page access controls), or both. + In FTP, the sections of the file are called pages. + + To provide for various page sizes and associated + information, each page is sent with a page header. The page + header has the following defined fields: + + Header Length + + The number of logical bytes in the page header + including this byte. The minimum header length is 4. + + Page Index + + The logical page number of this section of the file. + This is not the transmission sequence number of this + page, but the index used to identify this page of the + file. + +Postel & Reynolds [Page 16] + + +RFC 959 October 1985 +File Transfer Protocol + + Data Length + + The number of logical bytes in the page data. The + minimum data length is 0. + + Page Type + + The type of page this is. The following page types + are defined: + + 0 = Last Page + + This is used to indicate the end of a paged + structured transmission. The header length must + be 4, and the data length must be 0. + + 1 = Simple Page + + This is the normal type for simple paged files + with no page level associated control + information. The header length must be 4. + + 2 = Descriptor Page + + This type is used to transmit the descriptive + information for the file as a whole. + + 3 = Access Controlled Page + + This type includes an additional header field + for paged files with page level access control + information. The header length must be 5. + + Optional Fields + + Further header fields may be used to supply per page + control information, for example, per page access + control. + + All fields are one logical byte in length. The logical byte + size is specified by the TYPE command. See Appendix I for + further details and a specific case at the page structure. + + A note of caution about parameters: a file must be stored and + retrieved with the same parameters if the retrieved version is to + +Postel & Reynolds [Page 17] + + +RFC 959 October 1985 +File Transfer Protocol + + be identical to the version originally transmitted. Conversely, + FTP implementations must return a file identical to the original + if the parameters used to store and retrieve a file are the same. + + 3.2. ESTABLISHING DATA CONNECTIONS + + The mechanics of transferring data consists of setting up the data + connection to the appropriate ports and choosing the parameters + for transfer. Both the user and the server-DTPs have a default + data port. The user-process default data port is the same as the + control connection port (i.e., U). The server-process default + data port is the port adjacent to the control connection port + (i.e., L-1). + + The transfer byte size is 8-bit bytes. This byte size is relevant + only for the actual transfer of the data; it has no bearing on + representation of the data within a host's file system. + + The passive data transfer process (this may be a user-DTP or a + second server-DTP) shall "listen" on the data port prior to + sending a transfer request command. The FTP request command + determines the direction of the data transfer. The server, upon + receiving the transfer request, will initiate the data connection + to the port. When the connection is established, the data + transfer begins between DTP's, and the server-PI sends a + confirming reply to the user-PI. + + Every FTP implementation must support the use of the default data + ports, and only the USER-PI can initiate a change to non-default + ports. + + It is possible for the user to specify an alternate data port by + use of the PORT command. The user may want a file dumped on a TAC + line printer or retrieved from a third party host. In the latter + case, the user-PI sets up control connections with both + server-PI's. One server is then told (by an FTP command) to + "listen" for a connection which the other will initiate. The + user-PI sends one server-PI a PORT command indicating the data + port of the other. Finally, both are sent the appropriate + transfer commands. The exact sequence of commands and replies + sent between the user-controller and the servers is defined in the + Section on FTP Replies. + + In general, it is the server's responsibility to maintain the data + connection--to initiate it and to close it. The exception to this + +Postel & Reynolds [Page 18] + + +RFC 959 October 1985 +File Transfer Protocol + + is when the user-DTP is sending the data in a transfer mode that + requires the connection to be closed to indicate EOF. The server + MUST close the data connection under the following conditions: + + 1. The server has completed sending data in a transfer mode + that requires a close to indicate EOF. + + 2. The server receives an ABORT command from the user. + + 3. The port specification is changed by a command from the + user. + + 4. The control connection is closed legally or otherwise. + + 5. An irrecoverable error condition occurs. + + Otherwise the close is a server option, the exercise of which the + server must indicate to the user-process by either a 250 or 226 + reply only. + + 3.3. DATA CONNECTION MANAGEMENT + + Default Data Connection Ports: All FTP implementations must + support use of the default data connection ports, and only the + User-PI may initiate the use of non-default ports. + + Negotiating Non-Default Data Ports: The User-PI may specify a + non-default user side data port with the PORT command. The + User-PI may request the server side to identify a non-default + server side data port with the PASV command. Since a connection + is defined by the pair of addresses, either of these actions is + enough to get a different data connection, still it is permitted + to do both commands to use new ports on both ends of the data + connection. + + Reuse of the Data Connection: When using the stream mode of data + transfer the end of the file must be indicated by closing the + connection. This causes a problem if multiple files are to be + transfered in the session, due to need for TCP to hold the + connection record for a time out period to guarantee the reliable + communication. Thus the connection can not be reopened at once. + + There are two solutions to this problem. The first is to + negotiate a non-default port. The second is to use another + transfer mode. + + A comment on transfer modes. The stream transfer mode is + +Postel & Reynolds [Page 19] + + +RFC 959 October 1985 +File Transfer Protocol + + inherently unreliable, since one can not determine if the + connection closed prematurely or not. The other transfer modes + (Block, Compressed) do not close the connection to indicate the + end of file. They have enough FTP encoding that the data + connection can be parsed to determine the end of the file. + Thus using these modes one can leave the data connection open + for multiple file transfers. + + 3.4. TRANSMISSION MODES + + The next consideration in transferring data is choosing the + appropriate transmission mode. There are three modes: one which + formats the data and allows for restart procedures; one which also + compresses the data for efficient transfer; and one which passes + the data with little or no processing. In this last case the mode + interacts with the structure attribute to determine the type of + processing. In the compressed mode, the representation type + determines the filler byte. + + All data transfers must be completed with an end-of-file (EOF) + which may be explicitly stated or implied by the closing of the + data connection. For files with record structure, all the + end-of-record markers (EOR) are explicit, including the final one. + For files transmitted in page structure a "last-page" page type is + used. + + NOTE: In the rest of this section, byte means "transfer byte" + except where explicitly stated otherwise. + + For the purpose of standardized transfer, the sending host will + translate its internal end of line or end of record denotation + into the representation prescribed by the transfer mode and file + structure, and the receiving host will perform the inverse + translation to its internal denotation. An IBM Mainframe record + count field may not be recognized at another host, so the + end-of-record information may be transferred as a two byte control + code in Stream mode or as a flagged bit in a Block or Compressed + mode descriptor. End-of-line in an ASCII or EBCDIC file with no + record structure should be indicated by or , + respectively. Since these transformations imply extra work for + some systems, identical systems transferring non-record structured + text files might wish to use a binary representation and stream + mode for the transfer. + +Postel & Reynolds [Page 20] + + +RFC 959 October 1985 +File Transfer Protocol + + The following transmission modes are defined in FTP: + + 3.4.1. STREAM MODE + + The data is transmitted as a stream of bytes. There is no + restriction on the representation type used; record structures + are allowed. + + In a record structured file EOR and EOF will each be indicated + by a two-byte control code. The first byte of the control code + will be all ones, the escape character. The second byte will + have the low order bit on and zeros elsewhere for EOR and the + second low order bit on for EOF; that is, the byte will have + value 1 for EOR and value 2 for EOF. EOR and EOF may be + indicated together on the last byte transmitted by turning both + low order bits on (i.e., the value 3). If a byte of all ones + was intended to be sent as data, it should be repeated in the + second byte of the control code. + + If the structure is a file structure, the EOF is indicated by + the sending host closing the data connection and all bytes are + data bytes. + + 3.4.2. BLOCK MODE + + The file is transmitted as a series of data blocks preceded by + one or more header bytes. The header bytes contain a count + field, and descriptor code. The count field indicates the + total length of the data block in bytes, thus marking the + beginning of the next data block (there are no filler bits). + The descriptor code defines: last block in the file (EOF) last + block in the record (EOR), restart marker (see the Section on + Error Recovery and Restart) or suspect data (i.e., the data + being transferred is suspected of errors and is not reliable). + This last code is NOT intended for error control within FTP. + It is motivated by the desire of sites exchanging certain types + of data (e.g., seismic or weather data) to send and receive all + the data despite local errors (such as "magnetic tape read + errors"), but to indicate in the transmission that certain + portions are suspect). Record structures are allowed in this + mode, and any representation type may be used. + + The header consists of the three bytes. Of the 24 bits of + header information, the 16 low order bits shall represent byte + count, and the 8 high order bits shall represent descriptor + codes as shown below. + +Postel & Reynolds [Page 21] + + +RFC 959 October 1985 +File Transfer Protocol + + Block Header + + +----------------+----------------+----------------+ + | Descriptor | Byte Count | + | 8 bits | 16 bits | + +----------------+----------------+----------------+ + + + The descriptor codes are indicated by bit flags in the + descriptor byte. Four codes have been assigned, where each + code number is the decimal value of the corresponding bit in + the byte. + + Code Meaning + + 128 End of data block is EOR + 64 End of data block is EOF + 32 Suspected errors in data block + 16 Data block is a restart marker + + With this encoding, more than one descriptor coded condition + may exist for a particular block. As many bits as necessary + may be flagged. + + The restart marker is embedded in the data stream as an + integral number of 8-bit bytes representing printable + characters in the language being used over the control + connection (e.g., default--NVT-ASCII). (Space, in the + appropriate language) must not be used WITHIN a restart marker. + + For example, to transmit a six-character marker, the following + would be sent: + + +--------+--------+--------+ + |Descrptr| Byte count | + |code= 16| = 6 | + +--------+--------+--------+ + + +--------+--------+--------+ + | Marker | Marker | Marker | + | 8 bits | 8 bits | 8 bits | + +--------+--------+--------+ + + +--------+--------+--------+ + | Marker | Marker | Marker | + | 8 bits | 8 bits | 8 bits | + +--------+--------+--------+ + +Postel & Reynolds [Page 22] + + +RFC 959 October 1985 +File Transfer Protocol + + 3.4.3. COMPRESSED MODE + + There are three kinds of information to be sent: regular data, + sent in a byte string; compressed data, consisting of + replications or filler; and control information, sent in a + two-byte escape sequence. If n>0 bytes (up to 127) of regular + data are sent, these n bytes are preceded by a byte with the + left-most bit set to 0 and the right-most 7 bits containing the + number n. + + Byte string: + + 1 7 8 8 + +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ + |0| n | | d(1) | ... | d(n) | + +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ + ^ ^ + |---n bytes---| + of data + + String of n data bytes d(1),..., d(n) + Count n must be positive. + + To compress a string of n replications of the data byte d, the + following 2 bytes are sent: + + Replicated Byte: + + 2 6 8 + +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ + |1 0| n | | d | + +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ + + A string of n filler bytes can be compressed into a single + byte, where the filler byte varies with the representation + type. If the type is ASCII or EBCDIC the filler byte is + (Space, ASCII code 32, EBCDIC code 64). If the type is Image + or Local byte the filler is a zero byte. + + Filler String: + + 2 6 + +-+-+-+-+-+-+-+-+ + |1 1| n | + +-+-+-+-+-+-+-+-+ + + The escape sequence is a double byte, the first of which is the + +Postel & Reynolds [Page 23] + + +RFC 959 October 1985 +File Transfer Protocol + + escape byte (all zeros) and the second of which contains + descriptor codes as defined in Block mode. The descriptor + codes have the same meaning as in Block mode and apply to the + succeeding string of bytes. + + Compressed mode is useful for obtaining increased bandwidth on + very large network transmissions at a little extra CPU cost. + It can be most effectively used to reduce the size of printer + files such as those generated by RJE hosts. + + 3.5. ERROR RECOVERY AND RESTART + + There is no provision for detecting bits lost or scrambled in data + transfer; this level of error control is handled by the TCP. + However, a restart procedure is provided to protect users from + gross system failures (including failures of a host, an + FTP-process, or the underlying network). + + The restart procedure is defined only for the block and compressed + modes of data transfer. It requires the sender of data to insert + a special marker code in the data stream with some marker + information. The marker information has meaning only to the + sender, but must consist of printable characters in the default or + negotiated language of the control connection (ASCII or EBCDIC). + The marker could represent a bit-count, a record-count, or any + other information by which a system may identify a data + checkpoint. The receiver of data, if it implements the restart + procedure, would then mark the corresponding position of this + marker in the receiving system, and return this information to the + user. + + In the event of a system failure, the user can restart the data + transfer by identifying the marker point with the FTP restart + procedure. The following example illustrates the use of the + restart procedure. + + The sender of the data inserts an appropriate marker block in the + data stream at a convenient point. The receiving host marks the + corresponding data point in its file system and conveys the last + known sender and receiver marker information to the user, either + directly or over the control connection in a 110 reply (depending + on who is the sender). In the event of a system failure, the user + or controller process restarts the server at the last server + marker by sending a restart command with server's marker code as + its argument. The restart command is transmitted over the control + +Postel & Reynolds [Page 24] + + +RFC 959 October 1985 +File Transfer Protocol + + connection and is immediately followed by the command (such as + RETR, STOR or LIST) which was being executed when the system + failure occurred. + +4. FILE TRANSFER FUNCTIONS + + The communication channel from the user-PI to the server-PI is + established as a TCP connection from the user to the standard server + port. The user protocol interpreter is responsible for sending FTP + commands and interpreting the replies received; the server-PI + interprets commands, sends replies and directs its DTP to set up the + data connection and transfer the data. If the second party to the + data transfer (the passive transfer process) is the user-DTP, then it + is governed through the internal protocol of the user-FTP host; if it + is a second server-DTP, then it is governed by its PI on command from + the user-PI. The FTP replies are discussed in the next section. In + the description of a few of the commands in this section, it is + helpful to be explicit about the possible replies. + + 4.1. FTP COMMANDS + + 4.1.1. ACCESS CONTROL COMMANDS + + The following commands specify access control identifiers + (command codes are shown in parentheses). + + USER NAME (USER) + + The argument field is a Telnet string identifying the user. + The user identification is that which is required by the + server for access to its file system. This command will + normally be the first command transmitted by the user after + the control connections are made (some servers may require + this). Additional identification information in the form of + a password and/or an account command may also be required by + some servers. Servers may allow a new USER command to be + entered at any point in order to change the access control + and/or accounting information. This has the effect of + flushing any user, password, and account information already + supplied and beginning the login sequence again. All + transfer parameters are unchanged and any file transfer in + progress is completed under the old access control + parameters. + +Postel & Reynolds [Page 25] + + +RFC 959 October 1985 +File Transfer Protocol + + PASSWORD (PASS) + + The argument field is a Telnet string specifying the user's + password. This command must be immediately preceded by the + user name command, and, for some sites, completes the user's + identification for access control. Since password + information is quite sensitive, it is desirable in general + to "mask" it or suppress typeout. It appears that the + server has no foolproof way to achieve this. It is + therefore the responsibility of the user-FTP process to hide + the sensitive password information. + + ACCOUNT (ACCT) + + The argument field is a Telnet string identifying the user's + account. The command is not necessarily related to the USER + command, as some sites may require an account for login and + others only for specific access, such as storing files. In + the latter case the command may arrive at any time. + + There are reply codes to differentiate these cases for the + automation: when account information is required for login, + the response to a successful PASSword command is reply code + 332. On the other hand, if account information is NOT + required for login, the reply to a successful PASSword + command is 230; and if the account information is needed for + a command issued later in the dialogue, the server should + return a 332 or 532 reply depending on whether it stores + (pending receipt of the ACCounT command) or discards the + command, respectively. + + CHANGE WORKING DIRECTORY (CWD) + + This command allows the user to work with a different + directory or dataset for file storage or retrieval without + altering his login or accounting information. Transfer + parameters are similarly unchanged. The argument is a + pathname specifying a directory or other system dependent + file group designator. + + CHANGE TO PARENT DIRECTORY (CDUP) + + This command is a special case of CWD, and is included to + simplify the implementation of programs for transferring + directory trees between operating systems having different + +Postel & Reynolds [Page 26] + + +RFC 959 October 1985 +File Transfer Protocol + + syntaxes for naming the parent directory. The reply codes + shall be identical to the reply codes of CWD. See + Appendix II for further details. + + STRUCTURE MOUNT (SMNT) + + This command allows the user to mount a different file + system data structure without altering his login or + accounting information. Transfer parameters are similarly + unchanged. The argument is a pathname specifying a + directory or other system dependent file group designator. + + REINITIALIZE (REIN) + + This command terminates a USER, flushing all I/O and account + information, except to allow any transfer in progress to be + completed. All parameters are reset to the default settings + and the control connection is left open. This is identical + to the state in which a user finds himself immediately after + the control connection is opened. A USER command may be + expected to follow. + + LOGOUT (QUIT) + + This command terminates a USER and if file transfer is not + in progress, the server closes the control connection. If + file transfer is in progress, the connection will remain + open for result response and the server will then close it. + If the user-process is transferring files for several USERs + but does not wish to close and then reopen connections for + each, then the REIN command should be used instead of QUIT. + + An unexpected close on the control connection will cause the + server to take the effective action of an abort (ABOR) and a + logout (QUIT). + + 4.1.2. TRANSFER PARAMETER COMMANDS + + All data transfer parameters have default values, and the + commands specifying data transfer parameters are required only + if the default parameter values are to be changed. The default + value is the last specified value, or if no value has been + specified, the standard default value is as stated here. This + implies that the server must "remember" the applicable default + values. The commands may be in any order except that they must + precede the FTP service request. The following commands + specify data transfer parameters: + +Postel & Reynolds [Page 27] + + +RFC 959 October 1985 +File Transfer Protocol + + DATA PORT (PORT) + + The argument is a HOST-PORT specification for the data port + to be used in data connection. There are defaults for both + the user and server data ports, and under normal + circumstances this command and its reply are not needed. If + this command is used, the argument is the concatenation of a + 32-bit internet host address and a 16-bit TCP port address. + This address information is broken into 8-bit fields and the + value of each field is transmitted as a decimal number (in + character string representation). The fields are separated + by commas. A port command would be: + + PORT h1,h2,h3,h4,p1,p2 + + where h1 is the high order 8 bits of the internet host + address. + + PASSIVE (PASV) + + This command requests the server-DTP to "listen" on a data + port (which is not its default data port) and to wait for a + connection rather than initiate one upon receipt of a + transfer command. The response to this command includes the + host and port address this server is listening on. + + REPRESENTATION TYPE (TYPE) + + The argument specifies the representation type as described + in the Section on Data Representation and Storage. Several + types take a second parameter. The first parameter is + denoted by a single Telnet character, as is the second + Format parameter for ASCII and EBCDIC; the second parameter + for local byte is a decimal integer to indicate Bytesize. + The parameters are separated by a (Space, ASCII code + 32). + + The following codes are assigned for type: + + \ / + A - ASCII | | N - Non-print + |-><-| T - Telnet format effectors + E - EBCDIC| | C - Carriage Control (ASA) + / \ + I - Image + + L - Local byte Byte size + +Postel & Reynolds [Page 28] + + +RFC 959 October 1985 +File Transfer Protocol + + The default representation type is ASCII Non-print. If the + Format parameter is changed, and later just the first + argument is changed, Format then returns to the Non-print + default. + + FILE STRUCTURE (STRU) + + The argument is a single Telnet character code specifying + file structure described in the Section on Data + Representation and Storage. + + The following codes are assigned for structure: + + F - File (no record structure) + R - Record structure + P - Page structure + + The default structure is File. + + TRANSFER MODE (MODE) + + The argument is a single Telnet character code specifying + the data transfer modes described in the Section on + Transmission Modes. + + The following codes are assigned for transfer modes: + + S - Stream + B - Block + C - Compressed + + The default transfer mode is Stream. + + 4.1.3. FTP SERVICE COMMANDS + + The FTP service commands define the file transfer or the file + system function requested by the user. The argument of an FTP + service command will normally be a pathname. The syntax of + pathnames must conform to server site conventions (with + standard defaults applicable), and the language conventions of + the control connection. The suggested default handling is to + use the last specified device, directory or file name, or the + standard default defined for local users. The commands may be + in any order except that a "rename from" command must be + followed by a "rename to" command and the restart command must + be followed by the interrupted service command (e.g., STOR or + RETR). The data, when transferred in response to FTP service + +Postel & Reynolds [Page 29] + + +RFC 959 October 1985 +File Transfer Protocol + + commands, shall always be sent over the data connection, except + for certain informative replies. The following commands + specify FTP service requests: + + RETRIEVE (RETR) + + This command causes the server-DTP to transfer a copy of the + file, specified in the pathname, to the server- or user-DTP + at the other end of the data connection. The status and + contents of the file at the server site shall be unaffected. + + STORE (STOR) + + This command causes the server-DTP to accept the data + transferred via the data connection and to store the data as + a file at the server site. If the file specified in the + pathname exists at the server site, then its contents shall + be replaced by the data being transferred. A new file is + created at the server site if the file specified in the + pathname does not already exist. + + STORE UNIQUE (STOU) + + This command behaves like STOR except that the resultant + file is to be created in the current directory under a name + unique to that directory. The 250 Transfer Started response + must include the name generated. + + APPEND (with create) (APPE) + + This command causes the server-DTP to accept the data + transferred via the data connection and to store the data in + a file at the server site. If the file specified in the + pathname exists at the server site, then the data shall be + appended to that file; otherwise the file specified in the + pathname shall be created at the server site. + + ALLOCATE (ALLO) + + This command may be required by some servers to reserve + sufficient storage to accommodate the new file to be + transferred. The argument shall be a decimal integer + representing the number of bytes (using the logical byte + size) of storage to be reserved for the file. For files + sent with record or page structure a maximum record or page + size (in logical bytes) might also be necessary; this is + indicated by a decimal integer in a second argument field of + +Postel & Reynolds [Page 30] + + +RFC 959 October 1985 +File Transfer Protocol + + the command. This second argument is optional, but when + present should be separated from the first by the three + Telnet characters R . This command shall be + followed by a STORe or APPEnd command. The ALLO command + should be treated as a NOOP (no operation) by those servers + which do not require that the maximum size of the file be + declared beforehand, and those servers interested in only + the maximum record or page size should accept a dummy value + in the first argument and ignore it. + + RESTART (REST) + + The argument field represents the server marker at which + file transfer is to be restarted. This command does not + cause file transfer but skips over the file to the specified + data checkpoint. This command shall be immediately followed + by the appropriate FTP service command which shall cause + file transfer to resume. + + RENAME FROM (RNFR) + + This command specifies the old pathname of the file which is + to be renamed. This command must be immediately followed by + a "rename to" command specifying the new file pathname. + + RENAME TO (RNTO) + + This command specifies the new pathname of the file + specified in the immediately preceding "rename from" + command. Together the two commands cause a file to be + renamed. + + ABORT (ABOR) + + This command tells the server to abort the previous FTP + service command and any associated transfer of data. The + abort command may require "special action", as discussed in + the Section on FTP Commands, to force recognition by the + server. No action is to be taken if the previous command + has been completed (including data transfer). The control + connection is not to be closed by the server, but the data + connection must be closed. + + There are two cases for the server upon receipt of this + command: (1) the FTP service command was already completed, + or (2) the FTP service command is still in progress. + +Postel & Reynolds [Page 31] + + +RFC 959 October 1985 +File Transfer Protocol + + In the first case, the server closes the data connection + (if it is open) and responds with a 226 reply, indicating + that the abort command was successfully processed. + + In the second case, the server aborts the FTP service in + progress and closes the data connection, returning a 426 + reply to indicate that the service request terminated + abnormally. The server then sends a 226 reply, + indicating that the abort command was successfully + processed. + + DELETE (DELE) + + This command causes the file specified in the pathname to be + deleted at the server site. If an extra level of protection + is desired (such as the query, "Do you really wish to + delete?"), it should be provided by the user-FTP process. + + REMOVE DIRECTORY (RMD) + + This command causes the directory specified in the pathname + to be removed as a directory (if the pathname is absolute) + or as a subdirectory of the current working directory (if + the pathname is relative). See Appendix II. + + MAKE DIRECTORY (MKD) + + This command causes the directory specified in the pathname + to be created as a directory (if the pathname is absolute) + or as a subdirectory of the current working directory (if + the pathname is relative). See Appendix II. + + PRINT WORKING DIRECTORY (PWD) + + This command causes the name of the current working + directory to be returned in the reply. See Appendix II. + + LIST (LIST) + + This command causes a list to be sent from the server to the + passive DTP. If the pathname specifies a directory or other + group of files, the server should transfer a list of files + in the specified directory. If the pathname specifies a + file then the server should send current information on the + file. A null argument implies the user's current working or + default directory. The data transfer is over the data + connection in type ASCII or type EBCDIC. (The user must + +Postel & Reynolds [Page 32] + + +RFC 959 October 1985 +File Transfer Protocol + + ensure that the TYPE is appropriately ASCII or EBCDIC). + Since the information on a file may vary widely from system + to system, this information may be hard to use automatically + in a program, but may be quite useful to a human user. + + NAME LIST (NLST) + + This command causes a directory listing to be sent from + server to user site. The pathname should specify a + directory or other system-specific file group descriptor; a + null argument implies the current directory. The server + will return a stream of names of files and no other + information. The data will be transferred in ASCII or + EBCDIC type over the data connection as valid pathname + strings separated by or . (Again the user must + ensure that the TYPE is correct.) This command is intended + to return information that can be used by a program to + further process the files automatically. For example, in + the implementation of a "multiple get" function. + + SITE PARAMETERS (SITE) + + This command is used by the server to provide services + specific to his system that are essential to file transfer + but not sufficiently universal to be included as commands in + the protocol. The nature of these services and the + specification of their syntax can be stated in a reply to + the HELP SITE command. + + SYSTEM (SYST) + + This command is used to find out the type of operating + system at the server. The reply shall have as its first + word one of the system names listed in the current version + of the Assigned Numbers document [4]. + + STATUS (STAT) + + This command shall cause a status response to be sent over + the control connection in the form of a reply. The command + may be sent during a file transfer (along with the Telnet IP + and Synch signals--see the Section on FTP Commands) in which + case the server will respond with the status of the + operation in progress, or it may be sent between file + transfers. In the latter case, the command may have an + argument field. If the argument is a pathname, the command + is analogous to the "list" command except that data shall be + +Postel & Reynolds [Page 33] + + +RFC 959 October 1985 +File Transfer Protocol + + transferred over the control connection. If a partial + pathname is given, the server may respond with a list of + file names or attributes associated with that specification. + If no argument is given, the server should return general + status information about the server FTP process. This + should include current values of all transfer parameters and + the status of connections. + + HELP (HELP) + + This command shall cause the server to send helpful + information regarding its implementation status over the + control connection to the user. The command may take an + argument (e.g., any command name) and return more specific + information as a response. The reply is type 211 or 214. + It is suggested that HELP be allowed before entering a USER + command. The server may use this reply to specify + site-dependent parameters, e.g., in response to HELP SITE. + + NOOP (NOOP) + + This command does not affect any parameters or previously + entered commands. It specifies no action other than that the + server send an OK reply. + + The File Transfer Protocol follows the specifications of the Telnet + protocol for all communications over the control connection. Since + the language used for Telnet communication may be a negotiated + option, all references in the next two sections will be to the + "Telnet language" and the corresponding "Telnet end-of-line code". + Currently, one may take these to mean NVT-ASCII and . No other + specifications of the Telnet protocol will be cited. + + FTP commands are "Telnet strings" terminated by the "Telnet end of + line code". The command codes themselves are alphabetic characters + terminated by the character (Space) if parameters follow and + Telnet-EOL otherwise. The command codes and the semantics of + commands are described in this section; the detailed syntax of + commands is specified in the Section on Commands, the reply sequences + are discussed in the Section on Sequencing of Commands and Replies, + and scenarios illustrating the use of commands are provided in the + Section on Typical FTP Scenarios. + + FTP commands may be partitioned as those specifying access-control + identifiers, data transfer parameters, or FTP service requests. + Certain commands (such as ABOR, STAT, QUIT) may be sent over the + control connection while a data transfer is in progress. Some + +Postel & Reynolds [Page 34] + + +RFC 959 October 1985 +File Transfer Protocol + + servers may not be able to monitor the control and data connections + simultaneously, in which case some special action will be necessary + to get the server's attention. The following ordered format is + tentatively recommended: + + 1. User system inserts the Telnet "Interrupt Process" (IP) signal + in the Telnet stream. + + 2. User system sends the Telnet "Synch" signal. + + 3. User system inserts the command (e.g., ABOR) in the Telnet + stream. + + 4. Server PI, after receiving "IP", scans the Telnet stream for + EXACTLY ONE FTP command. + + (For other servers this may not be necessary but the actions listed + above should have no unusual effect.) + + 4.2. FTP REPLIES + + Replies to File Transfer Protocol commands are devised to ensure + the synchronization of requests and actions in the process of file + transfer, and to guarantee that the user process always knows the + state of the Server. Every command must generate at least one + reply, although there may be more than one; in the latter case, + the multiple replies must be easily distinguished. In addition, + some commands occur in sequential groups, such as USER, PASS and + ACCT, or RNFR and RNTO. The replies show the existence of an + intermediate state if all preceding commands have been successful. + A failure at any point in the sequence necessitates the repetition + of the entire sequence from the beginning. + + The details of the command-reply sequence are made explicit in + a set of state diagrams below. + + An FTP reply consists of a three digit number (transmitted as + three alphanumeric characters) followed by some text. The number + is intended for use by automata to determine what state to enter + next; the text is intended for the human user. It is intended + that the three digits contain enough encoded information that the + user-process (the User-PI) will not need to examine the text and + may either discard it or pass it on to the user, as appropriate. + In particular, the text may be server-dependent, so there are + likely to be varying texts for each reply code. + + A reply is defined to contain the 3-digit code, followed by Space + +Postel & Reynolds [Page 35] + + +RFC 959 October 1985 +File Transfer Protocol + + , followed by one line of text (where some maximum line length + has been specified), and terminated by the Telnet end-of-line + code. There will be cases however, where the text is longer than + a single line. In these cases the complete text must be bracketed + so the User-process knows when it may stop reading the reply (i.e. + stop processing input on the control connection) and go do other + things. This requires a special format on the first line to + indicate that more than one line is coming, and another on the + last line to designate it as the last. At least one of these must + contain the appropriate reply code to indicate the state of the + transaction. To satisfy all factions, it was decided that both + the first and last line codes should be the same. + + Thus the format for multi-line replies is that the first line + will begin with the exact required reply code, followed + immediately by a Hyphen, "-" (also known as Minus), followed by + text. The last line will begin with the same code, followed + immediately by Space , optionally some text, and the Telnet + end-of-line code. + + For example: + 123-First line + Second line + 234 A line beginning with numbers + 123 The last line + + The user-process then simply needs to search for the second + occurrence of the same reply code, followed by (Space), at + the beginning of a line, and ignore all intermediary lines. If + an intermediary line begins with a 3-digit number, the Server + must pad the front to avoid confusion. + + This scheme allows standard system routines to be used for + reply information (such as for the STAT reply), with + "artificial" first and last lines tacked on. In rare cases + where these routines are able to generate three digits and a + Space at the beginning of any line, the beginning of each + text line should be offset by some neutral text, like Space. + + This scheme assumes that multi-line replies may not be nested. + + The three digits of the reply each have a special significance. + This is intended to allow a range of very simple to very + sophisticated responses by the user-process. The first digit + denotes whether the response is good, bad or incomplete. + (Referring to the state diagram), an unsophisticated user-process + will be able to determine its next action (proceed as planned, + +Postel & Reynolds [Page 36] + + +RFC 959 October 1985 +File Transfer Protocol + + redo, retrench, etc.) by simply examining this first digit. A + user-process that wants to know approximately what kind of error + occurred (e.g. file system error, command syntax error) may + examine the second digit, reserving the third digit for the finest + gradation of information (e.g., RNTO command without a preceding + RNFR). + + There are five values for the first digit of the reply code: + + 1yz Positive Preliminary reply + + The requested action is being initiated; expect another + reply before proceeding with a new command. (The + user-process sending another command before the + completion reply would be in violation of protocol; but + server-FTP processes should queue any commands that + arrive while a preceding command is in progress.) This + type of reply can be used to indicate that the command + was accepted and the user-process may now pay attention + to the data connections, for implementations where + simultaneous monitoring is difficult. The server-FTP + process may send at most, one 1yz reply per command. + + 2yz Positive Completion reply + + The requested action has been successfully completed. A + new request may be initiated. + + 3yz Positive Intermediate reply + + The command has been accepted, but the requested action + is being held in abeyance, pending receipt of further + information. The user should send another command + specifying this information. This reply is used in + command sequence groups. + + 4yz Transient Negative Completion reply + + The command was not accepted and the requested action did + not take place, but the error condition is temporary and + the action may be requested again. The user should + return to the beginning of the command sequence, if any. + It is difficult to assign a meaning to "transient", + particularly when two distinct sites (Server- and + User-processes) have to agree on the interpretation. + Each reply in the 4yz category might have a slightly + different time value, but the intent is that the + +Postel & Reynolds [Page 37] + + +RFC 959 October 1985 +File Transfer Protocol + + user-process is encouraged to try again. A rule of thumb + in determining if a reply fits into the 4yz or the 5yz + (Permanent Negative) category is that replies are 4yz if + the commands can be repeated without any change in + command form or in properties of the User or Server + (e.g., the command is spelled the same with the same + arguments used; the user does not change his file access + or user name; the server does not put up a new + implementation.) + + 5yz Permanent Negative Completion reply + + The command was not accepted and the requested action did + not take place. The User-process is discouraged from + repeating the exact request (in the same sequence). Even + some "permanent" error conditions can be corrected, so + the human user may want to direct his User-process to + reinitiate the command sequence by direct action at some + point in the future (e.g., after the spelling has been + changed, or the user has altered his directory status.) + + The following function groupings are encoded in the second + digit: + + x0z Syntax - These replies refer to syntax errors, + syntactically correct commands that don't fit any + functional category, unimplemented or superfluous + commands. + + x1z Information - These are replies to requests for + information, such as status or help. + + x2z Connections - Replies referring to the control and + data connections. + + x3z Authentication and accounting - Replies for the login + process and accounting procedures. + + x4z Unspecified as yet. + + x5z File system - These replies indicate the status of the + Server file system vis-a-vis the requested transfer or + other file system action. + + The third digit gives a finer gradation of meaning in each of + the function categories, specified by the second digit. The + list of replies below will illustrate this. Note that the text + +Postel & Reynolds [Page 38] + + +RFC 959 October 1985 +File Transfer Protocol + + associated with each reply is recommended, rather than + mandatory, and may even change according to the command with + which it is associated. The reply codes, on the other hand, + must strictly follow the specifications in the last section; + that is, Server implementations should not invent new codes for + situations that are only slightly different from the ones + described here, but rather should adapt codes already defined. + + A command such as TYPE or ALLO whose successful execution + does not offer the user-process any new information will + cause a 200 reply to be returned. If the command is not + implemented by a particular Server-FTP process because it + has no relevance to that computer system, for example ALLO + at a TOPS20 site, a Positive Completion reply is still + desired so that the simple User-process knows it can proceed + with its course of action. A 202 reply is used in this case + with, for example, the reply text: "No storage allocation + necessary." If, on the other hand, the command requests a + non-site-specific action and is unimplemented, the response + is 502. A refinement of that is the 504 reply for a command + that is implemented, but that requests an unimplemented + parameter. + + 4.2.1 Reply Codes by Function Groups + + 200 Command okay. + 500 Syntax error, command unrecognized. + This may include errors such as command line too long. + 501 Syntax error in parameters or arguments. + 202 Command not implemented, superfluous at this site. + 502 Command not implemented. + 503 Bad sequence of commands. + 504 Command not implemented for that parameter. + + +Postel & Reynolds [Page 39] + + +RFC 959 October 1985 +File Transfer Protocol + + 110 Restart marker reply. + In this case, the text is exact and not left to the + particular implementation; it must read: + MARK yyyy = mmmm + Where yyyy is User-process data stream marker, and mmmm + server's equivalent marker (note the spaces between markers + and "="). + 211 System status, or system help reply. + 212 Directory status. + 213 File status. + 214 Help message. + On how to use the server or the meaning of a particular + non-standard command. This reply is useful only to the + human user. + 215 NAME system type. + Where NAME is an official system name from the list in the + Assigned Numbers document. + + 120 Service ready in nnn minutes. + 220 Service ready for new user. + 221 Service closing control connection. + Logged out if appropriate. + 421 Service not available, closing control connection. + This may be a reply to any command if the service knows it + must shut down. + 125 Data connection already open; transfer starting. + 225 Data connection open; no transfer in progress. + 425 Can't open data connection. + 226 Closing data connection. + Requested file action successful (for example, file + transfer or file abort). + 426 Connection closed; transfer aborted. + 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). + + 230 User logged in, proceed. + 530 Not logged in. + 331 User name okay, need password. + 332 Need account for login. + 532 Need account for storing files. + + +Postel & Reynolds [Page 40] + + +RFC 959 October 1985 +File Transfer Protocol + + 150 File status okay; about to open data connection. + 250 Requested file action okay, completed. + 257 "PATHNAME" created. + 350 Requested file action pending further information. + 450 Requested file action not taken. + File unavailable (e.g., file busy). + 550 Requested action not taken. + File unavailable (e.g., file not found, no access). + 451 Requested action aborted. Local error in processing. + 551 Requested action aborted. Page type unknown. + 452 Requested action not taken. + Insufficient storage space in system. + 552 Requested file action aborted. + Exceeded storage allocation (for current directory or + dataset). + 553 Requested action not taken. + File name not allowed. + + + 4.2.2 Numeric Order List of Reply Codes + + 110 Restart marker reply. + In this case, the text is exact and not left to the + particular implementation; it must read: + MARK yyyy = mmmm + Where yyyy is User-process data stream marker, and mmmm + server's equivalent marker (note the spaces between markers + and "="). + 120 Service ready in nnn minutes. + 125 Data connection already open; transfer starting. + 150 File status okay; about to open data connection. + + +Postel & Reynolds [Page 41] + + +RFC 959 October 1985 +File Transfer Protocol + + 200 Command okay. + 202 Command not implemented, superfluous at this site. + 211 System status, or system help reply. + 212 Directory status. + 213 File status. + 214 Help message. + On how to use the server or the meaning of a particular + non-standard command. This reply is useful only to the + human user. + 215 NAME system type. + Where NAME is an official system name from the list in the + Assigned Numbers document. + 220 Service ready for new user. + 221 Service closing control connection. + Logged out if appropriate. + 225 Data connection open; no transfer in progress. + 226 Closing data connection. + Requested file action successful (for example, file + transfer or file abort). + 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). + 230 User logged in, proceed. + 250 Requested file action okay, completed. + 257 "PATHNAME" created. + + 331 User name okay, need password. + 332 Need account for login. + 350 Requested file action pending further information. + + 421 Service not available, closing control connection. + This may be a reply to any command if the service knows it + must shut down. + 425 Can't open data connection. + 426 Connection closed; transfer aborted. + 450 Requested file action not taken. + File unavailable (e.g., file busy). + 451 Requested action aborted: local error in processing. + 452 Requested action not taken. + Insufficient storage space in system. + + +Postel & Reynolds [Page 42] + + +RFC 959 October 1985 +File Transfer Protocol + + 500 Syntax error, command unrecognized. + This may include errors such as command line too long. + 501 Syntax error in parameters or arguments. + 502 Command not implemented. + 503 Bad sequence of commands. + 504 Command not implemented for that parameter. + 530 Not logged in. + 532 Need account for storing files. + 550 Requested action not taken. + File unavailable (e.g., file not found, no access). + 551 Requested action aborted: page type unknown. + 552 Requested file action aborted. + Exceeded storage allocation (for current directory or + dataset). + 553 Requested action not taken. + File name not allowed. + + +5. DECLARATIVE SPECIFICATIONS + + 5.1. MINIMUM IMPLEMENTATION + + In order to make FTP workable without needless error messages, the + following minimum implementation is required for all servers: + + TYPE - ASCII Non-print + MODE - Stream + STRUCTURE - File, Record + COMMANDS - USER, QUIT, PORT, + TYPE, MODE, STRU, + for the default values + RETR, STOR, + NOOP. + + The default values for transfer parameters are: + + TYPE - ASCII Non-print + MODE - Stream + STRU - File + + All hosts must accept the above as the standard defaults. + +Postel & Reynolds [Page 43] + + +RFC 959 October 1985 +File Transfer Protocol + + 5.2. CONNECTIONS + + The server protocol interpreter shall "listen" on Port L. The + user or user protocol interpreter shall initiate the full-duplex + control connection. Server- and user- processes should follow the + conventions of the Telnet protocol as specified in the + ARPA-Internet Protocol Handbook [1]. Servers are under no + obligation to provide for editing of command lines and may require + that it be done in the user host. The control connection shall be + closed by the server at the user's request after all transfers and + replies are completed. + + The user-DTP must "listen" on the specified data port; this may be + the default user port (U) or a port specified in the PORT command. + The server shall initiate the data connection from his own default + data port (L-1) using the specified user data port. The direction + of the transfer and the port used will be determined by the FTP + service command. + + Note that all FTP implementation must support data transfer using + the default port, and that only the USER-PI may initiate the use + of non-default ports. + + When data is to be transferred between two servers, A and B (refer + to Figure 2), the user-PI, C, sets up control connections with + both server-PI's. One of the servers, say A, is then sent a PASV + command telling him to "listen" on his data port rather than + initiate a connection when he receives a transfer service command. + When the user-PI receives an acknowledgment to the PASV command, + which includes the identity of the host and port being listened + on, the user-PI then sends A's port, a, to B in a PORT command; a + reply is returned. The user-PI may then send the corresponding + service commands to A and B. Server B initiates the connection + and the transfer proceeds. The command-reply sequence is listed + below where the messages are vertically synchronous but + horizontally asynchronous: + +Postel & Reynolds [Page 44] + + +RFC 959 October 1985 +File Transfer Protocol + + User-PI - Server A User-PI - Server B + ------------------ ------------------ + + C->A : Connect C->B : Connect + C->A : PASV + A->C : 227 Entering Passive Mode. A1,A2,A3,A4,a1,a2 + C->B : PORT A1,A2,A3,A4,a1,a2 + B->C : 200 Okay + C->A : STOR C->B : RETR + B->A : Connect to HOST-A, PORT-a + + Figure 3 + + The data connection shall be closed by the server under the + conditions described in the Section on Establishing Data + Connections. If the data connection is to be closed following a + data transfer where closing the connection is not required to + indicate the end-of-file, the server must do so immediately. + Waiting until after a new transfer command is not permitted + because the user-process will have already tested the data + connection to see if it needs to do a "listen"; (remember that the + user must "listen" on a closed data port BEFORE sending the + transfer request). To prevent a race condition here, the server + sends a reply (226) after closing the data connection (or if the + connection is left open, a "file transfer completed" reply (250) + and the user-PI should wait for one of these replies before + issuing a new transfer command). + + Any time either the user or server see that the connection is + being closed by the other side, it should promptly read any + remaining data queued on the connection and issue the close on its + own side. + + 5.3. COMMANDS + + The commands are Telnet character strings transmitted over the + control connections as described in the Section on FTP Commands. + The command functions and semantics are described in the Section + on Access Control Commands, Transfer Parameter Commands, FTP + Service Commands, and Miscellaneous Commands. The command syntax + is specified here. + + The commands begin with a command code followed by an argument + field. The command codes are four or fewer alphabetic characters. + Upper and lower case alphabetic characters are to be treated + identically. Thus, any of the following may represent the + retrieve command: + +Postel & Reynolds [Page 45] + + +RFC 959 October 1985 +File Transfer Protocol + + RETR Retr retr ReTr rETr + + This also applies to any symbols representing parameter values, + such as A or a for ASCII TYPE. The command codes and the argument + fields are separated by one or more spaces. + + The argument field consists of a variable length character string + ending with the character sequence (Carriage Return, Line + Feed) for NVT-ASCII representation; for other negotiated languages + a different end of line character might be used. It should be + noted that the server is to take no action until the end of line + code is received. + + The syntax is specified below in NVT-ASCII. All characters in the + argument field are ASCII characters including any ASCII + represented decimal integers. Square brackets denote an optional + argument field. If the option is not taken, the appropriate + default is implied. + +Postel & Reynolds [Page 46] + + +RFC 959 October 1985 +File Transfer Protocol + + 5.3.1. FTP COMMANDS + + The following are the FTP commands: + + USER + PASS + ACCT + CWD + CDUP + SMNT + QUIT + REIN + PORT + PASV + TYPE + STRU + MODE + RETR + STOR + STOU + APPE + ALLO + [ R ] + REST + RNFR + RNTO + ABOR + DELE + RMD + MKD + PWD + LIST [ ] + NLST [ ] + SITE + SYST + STAT [ ] + HELP [ ] + NOOP + +Postel & Reynolds [Page 47] + + +RFC 959 October 1985 +File Transfer Protocol + + 5.3.2. FTP COMMAND ARGUMENTS + + The syntax of the above argument fields (using BNF notation + where applicable) is: + + ::= + ::= + ::= + ::= | + ::= any of the 128 ASCII characters except and + + ::= + ::= | + ::= printable characters, any + ASCII code 33 through 126 + ::= + ::= , + ::= ,,, + ::= , + ::= any decimal integer 1 through 255 + ::= N | T | C + ::= A [ ] + | E [ ] + | I + | L + ::= F | R | P + ::= S | B | C + ::= + ::= any decimal integer + +Postel & Reynolds [Page 48] + + +RFC 959 October 1985 +File Transfer Protocol + + 5.4. SEQUENCING OF COMMANDS AND REPLIES + + The communication between the user and server is intended to be an + alternating dialogue. As such, the user issues an FTP command and + the server responds with a prompt primary reply. The user should + wait for this initial primary success or failure response before + sending further commands. + + Certain commands require a second reply for which the user should + also wait. These replies may, for example, report on the progress + or completion of file transfer or the closing of the data + connection. They are secondary replies to file transfer commands. + + One important group of informational replies is the connection + greetings. Under normal circumstances, a server will send a 220 + reply, "awaiting input", when the connection is completed. The + user should wait for this greeting message before sending any + commands. If the server is unable to accept input right away, a + 120 "expected delay" reply should be sent immediately and a 220 + reply when ready. The user will then know not to hang up if there + is a delay. + + Spontaneous Replies + + Sometimes "the system" spontaneously has a message to be sent + to a user (usually all users). For example, "System going down + in 15 minutes". There is no provision in FTP for such + spontaneous information to be sent from the server to the user. + It is recommended that such information be queued in the + server-PI and delivered to the user-PI in the next reply + (possibly making it a multi-line reply). + + The table below lists alternative success and failure replies for + each command. These must be strictly adhered to; a server may + substitute text in the replies, but the meaning and action implied + by the code numbers and by the specific command reply sequence + cannot be altered. + + Command-Reply Sequences + + In this section, the command-reply sequence is presented. Each + command is listed with its possible replies; command groups are + listed together. Preliminary replies are listed first (with + their succeeding replies indented and under them), then + positive and negative completion, and finally intermediary + +Postel & Reynolds [Page 49] + + +RFC 959 October 1985 +File Transfer Protocol + + replies with the remaining commands from the sequence + following. This listing forms the basis for the state + diagrams, which will be presented separately. + + Connection Establishment + 120 + 220 + 220 + 421 + Login + USER + 230 + 530 + 500, 501, 421 + 331, 332 + PASS + 230 + 202 + 530 + 500, 501, 503, 421 + 332 + ACCT + 230 + 202 + 530 + 500, 501, 503, 421 + CWD + 250 + 500, 501, 502, 421, 530, 550 + CDUP + 200 + 500, 501, 502, 421, 530, 550 + SMNT + 202, 250 + 500, 501, 502, 421, 530, 550 + Logout + REIN + 120 + 220 + 220 + 421 + 500, 502 + QUIT + 221 + 500 + +Postel & Reynolds [Page 50] + + +RFC 959 October 1985 +File Transfer Protocol + + Transfer parameters + PORT + 200 + 500, 501, 421, 530 + PASV + 227 + 500, 501, 502, 421, 530 + MODE + 200 + 500, 501, 504, 421, 530 + TYPE + 200 + 500, 501, 504, 421, 530 + STRU + 200 + 500, 501, 504, 421, 530 + File action commands + ALLO + 200 + 202 + 500, 501, 504, 421, 530 + REST + 500, 501, 502, 421, 530 + 350 + STOR + 125, 150 + (110) + 226, 250 + 425, 426, 451, 551, 552 + 532, 450, 452, 553 + 500, 501, 421, 530 + STOU + 125, 150 + (110) + 226, 250 + 425, 426, 451, 551, 552 + 532, 450, 452, 553 + 500, 501, 421, 530 + RETR + 125, 150 + (110) + 226, 250 + 425, 426, 451 + 450, 550 + 500, 501, 421, 530 + +Postel & Reynolds [Page 51] + + +RFC 959 October 1985 +File Transfer Protocol + + LIST + 125, 150 + 226, 250 + 425, 426, 451 + 450 + 500, 501, 502, 421, 530 + NLST + 125, 150 + 226, 250 + 425, 426, 451 + 450 + 500, 501, 502, 421, 530 + APPE + 125, 150 + (110) + 226, 250 + 425, 426, 451, 551, 552 + 532, 450, 550, 452, 553 + 500, 501, 502, 421, 530 + RNFR + 450, 550 + 500, 501, 502, 421, 530 + 350 + RNTO + 250 + 532, 553 + 500, 501, 502, 503, 421, 530 + DELE + 250 + 450, 550 + 500, 501, 502, 421, 530 + RMD + 250 + 500, 501, 502, 421, 530, 550 + MKD + 257 + 500, 501, 502, 421, 530, 550 + PWD + 257 + 500, 501, 502, 421, 550 + ABOR + 225, 226 + 500, 501, 502, 421 + +Postel & Reynolds [Page 52] + + +RFC 959 October 1985 +File Transfer Protocol + + Informational commands + SYST + 215 + 500, 501, 502, 421 + STAT + 211, 212, 213 + 450 + 500, 501, 502, 421, 530 + HELP + 211, 214 + 500, 501, 502, 421 + Miscellaneous commands + SITE + 200 + 202 + 500, 501, 530 + NOOP + 200 + 500 421 + +Postel & Reynolds [Page 53] + + +RFC 959 October 1985 +File Transfer Protocol + +6. STATE DIAGRAMS + + Here we present state diagrams for a very simple minded FTP + implementation. Only the first digit of the reply codes is used. + There is one state diagram for each group of FTP commands or command + sequences. + + The command groupings were determined by constructing a model for + each command then collecting together the commands with structurally + identical models. + + For each command or command sequence there are three possible + outcomes: success (S), failure (F), and error (E). In the state + diagrams below we use the symbol B for "begin", and the symbol W for + "wait for reply". + + We first present the diagram that represents the largest group of FTP + commands: + + + 1,3 +---+ + ----------->| E | + | +---+ + | + +---+ cmd +---+ 2 +---+ + | B |---------->| W |---------->| S | + +---+ +---+ +---+ + | + | 4,5 +---+ + ----------->| F | + +---+ + + + This diagram models the commands: + + ABOR, ALLO, DELE, CWD, CDUP, SMNT, HELP, MODE, NOOP, PASV, + QUIT, SITE, PORT, SYST, STAT, RMD, MKD, PWD, STRU, and TYPE. + +Postel & Reynolds [Page 54] + + +RFC 959 October 1985 +File Transfer Protocol + + The other large group of commands is represented by a very similar + diagram: + + + 3 +---+ + ----------->| E | + | +---+ + | + +---+ cmd +---+ 2 +---+ + | B |---------->| W |---------->| S | + +---+ --->+---+ +---+ + | | | + | | | 4,5 +---+ + | 1 | ----------->| F | + ----- +---+ + + + This diagram models the commands: + + APPE, LIST, NLST, REIN, RETR, STOR, and STOU. + + Note that this second model could also be used to represent the first + group of commands, the only difference being that in the first group + the 100 series replies are unexpected and therefore treated as error, + while the second group expects (some may require) 100 series replies. + Remember that at most, one 100 series reply is allowed per command. + + The remaining diagrams model command sequences, perhaps the simplest + of these is the rename sequence: + + + +---+ RNFR +---+ 1,2 +---+ + | B |---------->| W |---------->| E | + +---+ +---+ -->+---+ + | | | + 3 | | 4,5 | + -------------- ------ | + | | | +---+ + | ------------->| S | + | | 1,3 | | +---+ + | 2| -------- + | | | | + V | | | + +---+ RNTO +---+ 4,5 ----->+---+ + | |---------->| W |---------->| F | + +---+ +---+ +---+ + + +Postel & Reynolds [Page 55] + + +RFC 959 October 1985 +File Transfer Protocol + + The next diagram is a simple model of the Restart command: + + + +---+ REST +---+ 1,2 +---+ + | B |---------->| W |---------->| E | + +---+ +---+ -->+---+ + | | | + 3 | | 4,5 | + -------------- ------ | + | | | +---+ + | ------------->| S | + | | 3 | | +---+ + | 2| -------- + | | | | + V | | | + +---+ cmd +---+ 4,5 ----->+---+ + | |---------->| W |---------->| F | + +---+ -->+---+ +---+ + | | + | 1 | + ------ + + + Where "cmd" is APPE, STOR, or RETR. + + We note that the above three models are similar. The Restart differs + from the Rename two only in the treatment of 100 series replies at + the second stage, while the second group expects (some may require) + 100 series replies. Remember that at most, one 100 series reply is + allowed per command. + +Postel & Reynolds [Page 56] + + +RFC 959 October 1985 +File Transfer Protocol + + The most complicated diagram is for the Login sequence: + + + 1 + +---+ USER +---+------------->+---+ + | B |---------->| W | 2 ---->| E | + +---+ +---+------ | -->+---+ + | | | | | + 3 | | 4,5 | | | + -------------- ----- | | | + | | | | | + | | | | | + | --------- | + | 1| | | | + V | | | | + +---+ PASS +---+ 2 | ------>+---+ + | |---------->| W |------------->| S | + +---+ +---+ ---------->+---+ + | | | | | + 3 | |4,5| | | + -------------- -------- | + | | | | | + | | | | | + | ----------- + | 1,3| | | | + V | 2| | | + +---+ ACCT +---+-- | ----->+---+ + | |---------->| W | 4,5 -------->| F | + +---+ +---+------------->+---+ + +Postel & Reynolds [Page 57] + + +RFC 959 October 1985 +File Transfer Protocol + + Finally, we present a generalized diagram that could be used to model + the command and reply interchange: + + + ------------------------------------ + | | + Begin | | + | V | + | +---+ cmd +---+ 2 +---+ | + -->| |------->| |---------->| | | + | | | W | | S |-----| + -->| | -->| |----- | | | + | +---+ | +---+ 4,5 | +---+ | + | | | | | | | + | | | 1| |3 | +---+ | + | | | | | | | | | + | | ---- | ---->| F |----- + | | | | | + | | | +---+ + ------------------- + | + | + V + End + + +Postel & Reynolds [Page 58] + + +RFC 959 October 1985 +File Transfer Protocol + +7. TYPICAL FTP SCENARIO + + User at host U wanting to transfer files to/from host S: + + In general, the user will communicate to the server via a mediating + user-FTP process. The following may be a typical scenario. The + user-FTP prompts are shown in parentheses, '---->' represents + commands from host U to host S, and '<----' represents replies from + host S to host U. + + LOCAL COMMANDS BY USER ACTION INVOLVED + + ftp (host) multics Connect to host S, port L, + establishing control connections. + <---- 220 Service ready . + username Doe USER Doe----> + <---- 331 User name ok, + need password. + password mumble PASS mumble----> + <---- 230 User logged in. + retrieve (local type) ASCII + (local pathname) test 1 User-FTP opens local file in ASCII. + (for. pathname) test.pl1 RETR test.pl1 ----> + <---- 150 File status okay; + about to open data + connection. + Server makes data connection + to port U. + + <---- 226 Closing data connection, + file transfer successful. + type Image TYPE I ----> + <---- 200 Command OK + store (local type) image + (local pathname) file dump User-FTP opens local file in Image. + (for.pathname) >udd>cn>fd STOR >udd>cn>fd ----> + <---- 550 Access denied + terminate QUIT ----> + Server closes all + connections. + +8. CONNECTION ESTABLISHMENT + + The FTP control connection is established via TCP between the user + process port U and the server process port L. This protocol is + assigned the service port 21 (25 octal), that is L=21. + +Postel & Reynolds [Page 59] + + +RFC 959 October 1985 +File Transfer Protocol + +APPENDIX I - PAGE STRUCTURE + + The need for FTP to support page structure derives principally from + the need to support efficient transmission of files between TOPS-20 + systems, particularly the files used by NLS. + + The file system of TOPS-20 is based on the concept of pages. The + operating system is most efficient at manipulating files as pages. + The operating system provides an interface to the file system so that + many applications view files as sequential streams of characters. + However, a few applications use the underlying page structures + directly, and some of these create holey files. + + A TOPS-20 disk file consists of four things: a pathname, a page + table, a (possibly empty) set of pages, and a set of attributes. + + The pathname is specified in the RETR or STOR command. It includes + the directory name, file name, file name extension, and generation + number. + + The page table contains up to 2**18 entries. Each entry may be + EMPTY, or may point to a page. If it is not empty, there are also + some page-specific access bits; not all pages of a file need have the + same access protection. + + A page is a contiguous set of 512 words of 36 bits each. + + The attributes of the file, in the File Descriptor Block (FDB), + contain such things as creation time, write time, read time, writer's + byte-size, end-of-file pointer, count of reads and writes, backup + system tape numbers, etc. + + Note that there is NO requirement that entries in the page table be + contiguous. There may be empty page table slots between occupied + ones. Also, the end of file pointer is simply a number. There is no + requirement that it in fact point at the "last" datum in the file. + Ordinary sequential I/O calls in TOPS-20 will cause the end of file + pointer to be left after the last datum written, but other operations + may cause it not to be so, if a particular programming system so + requires. + + In fact, in both of these special cases, "holey" files and + end-of-file pointers NOT at the end of the file, occur with NLS data + files. + +Postel & Reynolds [Page 60] + + +RFC 959 October 1985 +File Transfer Protocol + + The TOPS-20 paged files can be sent with the FTP transfer parameters: + TYPE L 36, STRU P, and MODE S (in fact, any mode could be used). + + Each page of information has a header. Each header field, which is a + logical byte, is a TOPS-20 word, since the TYPE is L 36. + + The header fields are: + + Word 0: Header Length. + + The header length is 5. + + Word 1: Page Index. + + If the data is a disk file page, this is the number of that + page in the file's page map. Empty pages (holes) in the file + are simply not sent. Note that a hole is NOT the same as a + page of zeros. + + Word 2: Data Length. + + The number of data words in this page, following the header. + Thus, the total length of the transmission unit is the Header + Length plus the Data Length. + + Word 3: Page Type. + + A code for what type of chunk this is. A data page is type 3, + the FDB page is type 2. + + Word 4: Page Access Control. + + The access bits associated with the page in the file's page + map. (This full word quantity is put into AC2 of an SPACS by + the program reading from net to disk.) + + After the header are Data Length data words. Data Length is + currently either 512 for a data page or 31 for an FDB. Trailing + zeros in a disk file page may be discarded, making Data Length less + than 512 in that case. + +Postel & Reynolds [Page 61] + + +RFC 959 October 1985 +File Transfer Protocol + +APPENDIX II - DIRECTORY COMMANDS + + Since UNIX has a tree-like directory structure in which directories + are as easy to manipulate as ordinary files, it is useful to expand + the FTP servers on these machines to include commands which deal with + the creation of directories. Since there are other hosts on the + ARPA-Internet which have tree-like directories (including TOPS-20 and + Multics), these commands are as general as possible. + + Four directory commands have been added to FTP: + + MKD pathname + + Make a directory with the name "pathname". + + RMD pathname + + Remove the directory with the name "pathname". + + PWD + + Print the current working directory name. + + CDUP + + Change to the parent of the current working directory. + + The "pathname" argument should be created (removed) as a + subdirectory of the current working directory, unless the "pathname" + string contains sufficient information to specify otherwise to the + server, e.g., "pathname" is an absolute pathname (in UNIX and + Multics), or pathname is something like "" to + TOPS-20. + + REPLY CODES + + The CDUP command is a special case of CWD, and is included to + simplify the implementation of programs for transferring directory + trees between operating systems having different syntaxes for + naming the parent directory. The reply codes for CDUP be + identical to the reply codes of CWD. + + The reply codes for RMD be identical to the reply codes for its + file analogue, DELE. + + The reply codes for MKD, however, are a bit more complicated. A + freshly created directory will probably be the object of a future + +Postel & Reynolds [Page 62] + + +RFC 959 October 1985 +File Transfer Protocol + + CWD command. Unfortunately, the argument to MKD may not always be + a suitable argument for CWD. This is the case, for example, when + a TOPS-20 subdirectory is created by giving just the subdirectory + name. That is, with a TOPS-20 server FTP, the command sequence + + MKD MYDIR + CWD MYDIR + + will fail. The new directory may only be referred to by its + "absolute" name; e.g., if the MKD command above were issued while + connected to the directory , the new subdirectory + could only be referred to by the name . + + Even on UNIX and Multics, however, the argument given to MKD may + not be suitable. If it is a "relative" pathname (i.e., a pathname + which is interpreted relative to the current directory), the user + would need to be in the same current directory in order to reach + the subdirectory. Depending on the application, this may be + inconvenient. It is not very robust in any case. + + To solve these problems, upon successful completion of an MKD + command, the server should return a line of the form: + + 257"" + + That is, the server will tell the user what string to use when + referring to the created directory. The directory name can + contain any character; embedded double-quotes should be escaped by + double-quotes (the "quote-doubling" convention). + + For example, a user connects to the directory /usr/dm, and creates + a subdirectory, named pathname: + + CWD /usr/dm + 200 directory changed to /usr/dm + MKD pathname + 257 "/usr/dm/pathname" directory created + + An example with an embedded double quote: + + MKD foo"bar + 257 "/usr/dm/foo""bar" directory created + CWD /usr/dm/foo"bar + 200 directory changed to /usr/dm/foo"bar + +Postel & Reynolds [Page 63] + + +RFC 959 October 1985 +File Transfer Protocol + + The prior existence of a subdirectory with the same name is an + error, and the server must return an "access denied" error reply + in that case. + + CWD /usr/dm + 200 directory changed to /usr/dm + MKD pathname + 521-"/usr/dm/pathname" directory already exists; + 521 taking no action. + + The failure replies for MKD are analogous to its file creating + cousin, STOR. Also, an "access denied" return is given if a file + name with the same name as the subdirectory will conflict with the + creation of the subdirectory (this is a problem on UNIX, but + shouldn't be one on TOPS-20). + + Essentially because the PWD command returns the same type of + information as the successful MKD command, the successful PWD + command uses the 257 reply code as well. + + SUBTLETIES + + Because these commands will be most useful in transferring + subtrees from one machine to another, carefully observe that the + argument to MKD is to be interpreted as a sub-directory of the + current working directory, unless it contains enough information + for the destination host to tell otherwise. A hypothetical + example of its use in the TOPS-20 world: + + CWD + 200 Working directory changed + MKD overrainbow + 257 "" directory created + CWD overrainbow + 431 No such directory + CWD + 200 Working directory changed + + CWD + 200 Working directory changed to + MKD + 257 "" directory created + CWD + + Note that the first example results in a subdirectory of the + connected directory. In contrast, the argument in the second + example contains enough information for TOPS-20 to tell that the + +Postel & Reynolds [Page 64] + + +RFC 959 October 1985 +File Transfer Protocol + + directory is a top-level directory. Note also that + in the first example the user "violated" the protocol by + attempting to access the freshly created directory with a name + other than the one returned by TOPS-20. Problems could have + resulted in this case had there been an directory; + this is an ambiguity inherent in some TOPS-20 implementations. + Similar considerations apply to the RMD command. The point is + this: except where to do so would violate a host's conventions for + denoting relative versus absolute pathnames, the host should treat + the operands of the MKD and RMD commands as subdirectories. The + 257 reply to the MKD command must always contain the absolute + pathname of the created directory. + +Postel & Reynolds [Page 65] + + +RFC 959 October 1985 +File Transfer Protocol + +APPENDIX III - RFCs on FTP + + Bhushan, Abhay, "A File Transfer Protocol", RFC 114 (NIC 5823), + MIT-Project MAC, 16 April 1971. + + Harslem, Eric, and John Heafner, "Comments on RFC 114 (A File + Transfer Protocol)", RFC 141 (NIC 6726), RAND, 29 April 1971. + + Bhushan, Abhay, et al, "The File Transfer Protocol", RFC 172 + (NIC 6794), MIT-Project MAC, 23 June 1971. + + Braden, Bob, "Comments on DTP and FTP Proposals", RFC 238 (NIC 7663), + UCLA/CCN, 29 September 1971. + + Bhushan, Abhay, et al, "The File Transfer Protocol", RFC 265 + (NIC 7813), MIT-Project MAC, 17 November 1971. + + McKenzie, Alex, "A Suggested Addition to File Transfer Protocol", + RFC 281 (NIC 8163), BBN, 8 December 1971. + + Bhushan, Abhay, "The Use of "Set Data Type" Transaction in File + Transfer Protocol", RFC 294 (NIC 8304), MIT-Project MAC, + 25 January 1972. + + Bhushan, Abhay, "The File Transfer Protocol", RFC 354 (NIC 10596), + MIT-Project MAC, 8 July 1972. + + Bhushan, Abhay, "Comments on the File Transfer Protocol (RFC 354)", + RFC 385 (NIC 11357), MIT-Project MAC, 18 August 1972. + + Hicks, Greg, "User FTP Documentation", RFC 412 (NIC 12404), Utah, + 27 November 1972. + + Bhushan, Abhay, "File Transfer Protocol (FTP) Status and Further + Comments", RFC 414 (NIC 12406), MIT-Project MAC, 20 November 1972. + + Braden, Bob, "Comments on File Transfer Protocol", RFC 430 + (NIC 13299), UCLA/CCN, 7 February 1973. + + Thomas, Bob, and Bob Clements, "FTP Server-Server Interaction", + RFC 438 (NIC 13770), BBN, 15 January 1973. + + Braden, Bob, "Print Files in FTP", RFC 448 (NIC 13299), UCLA/CCN, + 27 February 1973. + + McKenzie, Alex, "File Transfer Protocol", RFC 454 (NIC 14333), BBN, + 16 February 1973. + +Postel & Reynolds [Page 66] + + +RFC 959 October 1985 +File Transfer Protocol + + Bressler, Bob, and Bob Thomas, "Mail Retrieval via FTP", RFC 458 + (NIC 14378), BBN-NET and BBN-TENEX, 20 February 1973. + + Neigus, Nancy, "File Transfer Protocol", RFC 542 (NIC 17759), BBN, + 12 July 1973. + + Krilanovich, Mark, and George Gregg, "Comments on the File Transfer + Protocol", RFC 607 (NIC 21255), UCSB, 7 January 1974. + + Pogran, Ken, and Nancy Neigus, "Response to RFC 607 - Comments on the + File Transfer Protocol", RFC 614 (NIC 21530), BBN, 28 January 1974. + + Krilanovich, Mark, George Gregg, Wayne Hathaway, and Jim White, + "Comments on the File Transfer Protocol", RFC 624 (NIC 22054), UCSB, + Ames Research Center, SRI-ARC, 28 February 1974. + + Bhushan, Abhay, "FTP Comments and Response to RFC 430", RFC 463 + (NIC 14573), MIT-DMCG, 21 February 1973. + + Braden, Bob, "FTP Data Compression", RFC 468 (NIC 14742), UCLA/CCN, + 8 March 1973. + + Bhushan, Abhay, "FTP and Network Mail System", RFC 475 (NIC 14919), + MIT-DMCG, 6 March 1973. + + Bressler, Bob, and Bob Thomas "FTP Server-Server Interaction - II", + RFC 478 (NIC 14947), BBN-NET and BBN-TENEX, 26 March 1973. + + White, Jim, "Use of FTP by the NIC Journal", RFC 479 (NIC 14948), + SRI-ARC, 8 March 1973. + + White, Jim, "Host-Dependent FTP Parameters", RFC 480 (NIC 14949), + SRI-ARC, 8 March 1973. + + Padlipsky, Mike, "An FTP Command-Naming Problem", RFC 506 + (NIC 16157), MIT-Multics, 26 June 1973. + + Day, John, "Memo to FTP Group (Proposal for File Access Protocol)", + RFC 520 (NIC 16819), Illinois, 25 June 1973. + + Merryman, Robert, "The UCSD-CC Server-FTP Facility", RFC 532 + (NIC 17451), UCSD-CC, 22 June 1973. + + Braden, Bob, "TENEX FTP Problem", RFC 571 (NIC 18974), UCLA/CCN, + 15 November 1973. + +Postel & Reynolds [Page 67] + + +RFC 959 October 1985 +File Transfer Protocol + + McKenzie, Alex, and Jon Postel, "Telnet and FTP Implementation - + Schedule Change", RFC 593 (NIC 20615), BBN and MITRE, + 29 November 1973. + + Sussman, Julie, "FTP Error Code Usage for More Reliable Mail + Service", RFC 630 (NIC 30237), BBN, 10 April 1974. + + Postel, Jon, "Revised FTP Reply Codes", RFC 640 (NIC 30843), + UCLA/NMC, 5 June 1974. + + Harvey, Brian, "Leaving Well Enough Alone", RFC 686 (NIC 32481), + SU-AI, 10 May 1975. + + Harvey, Brian, "One More Try on the FTP", RFC 691 (NIC 32700), SU-AI, + 28 May 1975. + + Lieb, J., "CWD Command of FTP", RFC 697 (NIC 32963), 14 July 1975. + + Harrenstien, Ken, "FTP Extension: XSEN", RFC 737 (NIC 42217), SRI-KL, + 31 October 1977. + + Harrenstien, Ken, "FTP Extension: XRSQ/XRCP", RFC 743 (NIC 42758), + SRI-KL, 30 December 1977. + + Lebling, P. David, "Survey of FTP Mail and MLFL", RFC 751, MIT, + 10 December 1978. + + Postel, Jon, "File Transfer Protocol Specification", RFC 765, ISI, + June 1980. + + Mankins, David, Dan Franklin, and Buzz Owen, "Directory Oriented FTP + Commands", RFC 776, BBN, December 1980. + + Padlipsky, Michael, "FTP Unique-Named Store Command", RFC 949, MITRE, + July 1985. + +Postel & Reynolds [Page 68] + + +RFC 959 October 1985 +File Transfer Protocol + +REFERENCES + + [1] Feinler, Elizabeth, "Internet Protocol Transition Workbook", + Network Information Center, SRI International, March 1982. + + [2] Postel, Jon, "Transmission Control Protocol - DARPA Internet + Program Protocol Specification", RFC 793, DARPA, September 1981. + + [3] Postel, Jon, and Joyce Reynolds, "Telnet Protocol + Specification", RFC 854, ISI, May 1983. + + [4] Reynolds, Joyce, and Jon Postel, "Assigned Numbers", RFC 943, + ISI, April 1985. + +Postel & Reynolds [Page 69] diff --git a/socket/EXEOBJ32/TDCONFIG.TD2 b/socket/EXEOBJ32/TDCONFIG.TD2 new file mode 100644 index 0000000..a221544 Binary files /dev/null and b/socket/EXEOBJ32/TDCONFIG.TD2 differ diff --git a/socket/HOOKER.CPP b/socket/HOOKER.CPP new file mode 100644 index 0000000..219eefd --- /dev/null +++ b/socket/HOOKER.CPP @@ -0,0 +1,78 @@ +#include +#include + +BlockHooker::BlockHooker(void) +: mIsHooked(FALSE) +{ + ProcAddress procAddress; + mCodeGenerator.push(procAddress.getProcAddress(BlockHooker::hookProc)); + mCodeGenerator.movECX(int(this)); + mCodeGenerator.popEAX(); + mCodeGenerator.callEAX(); + mCodeGenerator.retn(); + mCodeGenerator.execute(); +} + +BlockHooker::BlockHooker(const BlockHooker &someBlockHooker) +{ // private implementation +} + +BlockHooker::~BlockHooker() +{ + unhookBlock(); +} + +BlockHooker &BlockHooker::operator=(const BlockHooker &/*someBlockHooker*/) +{ // private implementation + return *this; +} + +BOOL BlockHooker::operator==(const BlockHooker &/*someBlockHooker*/)const +{ // private implementation + return FALSE; +} + +BOOL BlockHooker::hookProc(void) +{ + if(mCallback.callback(CallbackData()))cancelBlockingCall(); + return yield(); +} + +BOOL BlockHooker::yield(void) +{ + BOOL haveMessage(FALSE); + MSG msg; + + while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + haveMessage=TRUE; + } + return haveMessage; +} + +BOOL BlockHooker::hookBlock(void) +{ + if(mIsHooked)return FALSE; + mIsHooked=TRUE; + return (::WSASetBlockingHook((FARPROC)mCodeGenerator.base())?TRUE:FALSE); +} + +BOOL BlockHooker::unhookBlock(void) +{ + if(!mIsHooked)return FALSE; + mIsHooked=FALSE; + return ::WSAUnhookBlockingHook(); +} + +BOOL BlockHooker::isBlocking(void) +{ + return ::WSAIsBlocking(); +} + +BOOL BlockHooker::cancelBlockingCall(void) +{ + return ::WSACancelBlockingCall(); +} + diff --git a/socket/HOOKER.HPP b/socket/HOOKER.HPP new file mode 100644 index 0000000..271dc07 --- /dev/null +++ b/socket/HOOKER.HPP @@ -0,0 +1,44 @@ +#ifndef _SOCKET_BLOCKHOOKER_HPP_ +#define _SOCKET_BLOCKHOOKER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CODEGEN_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _SOCKET_PROCADDRESS_HPP_ +#include +#endif + +class BlockHooker +{ +public: + BlockHooker(void); + virtual ~BlockHooker(); + BOOL hookBlock(void); + BOOL unhookBlock(void); + BOOL cancelBlocking(void); + void setHandler(PureCallback *lpCallback); +private: + BlockHooker(const BlockHooker &someBlockHooker); + BlockHooker &operator=(const BlockHooker &someBlockHooker); + BOOL operator==(const BlockHooker &someBlockHooker)const; + BOOL cancelBlockingCall(void); + BOOL isBlocking(void); + BOOL hookProc(void); + BOOL yield(void); + + CodeGen mCodeGenerator; + BOOL mIsHooked; + CallbackPointer mCallback; +}; + +inline +void BlockHooker::setHandler(PureCallback *lpCallback) +{ + mCallback=CallbackPointer(lpCallback); +} +#endif \ No newline at end of file diff --git a/socket/HOSTENT.CPP b/socket/HOSTENT.CPP new file mode 100644 index 0000000..0fbf6b8 --- /dev/null +++ b/socket/HOSTENT.CPP @@ -0,0 +1,52 @@ +#include + +WORD HostEnt::hostByName(const String &hostName) +{ + struct hostent *lpHostEnt; + + if(0==(lpHostEnt=::gethostbyname((LPSTR)hostName)))return FALSE; + if(AddressTypeInternet!=(AddressType)lpHostEnt->h_addrtype)return FALSE; + pureName(lpHostEnt->h_name); + pureAliases(lpHostEnt->h_aliases); + pureAddressType(lpHostEnt->h_addrtype); + pureLength(lpHostEnt->h_length); + pureAddressList(lpHostEnt->h_addr_list); + return TRUE; +} + +WORD HostEnt::hostByAddress(const InternetAddress &hostAddress) +{ + struct hostent *lpHostEnt=0; + + try{lpHostEnt=::gethostbyaddr((char*)&((in_addr&)hostAddress),sizeof(in_addr),AddressTypeInternet);} + catch(...){return FALSE;} + if(!lpHostEnt)return FALSE; +// if(0==(lpHostEnt=::gethostbyaddr((char*)&((in_addr&)hostAddress),sizeof(in_addr),AddressTypeInternet)))return FALSE; + pureName(lpHostEnt->h_name); +// pureAliases(lpHostEnt->h_aliases); + pureAddressType(lpHostEnt->h_addrtype); + pureLength(lpHostEnt->h_length); + pureAddressList(lpHostEnt->h_addr_list); + return TRUE; +} + +void HostEnt::pureAliases(char **lpPureAliases) +{ + mAliasNames.remove(); + if(!lpPureAliases)return; + while(*(lpPureAliases)) + { + mAliasNames.insert(&String(*lpPureAliases)); + lpPureAliases++; + } +} + +void HostEnt::pureAddressList(char **lpPureAddressList) +{ + struct in_addr *lpInAddr; + mAddressList.remove(); + while(0!=(lpInAddr=(struct in_addr*)*lpPureAddressList++)) + mAddressList.insert(&InternetAddress(*lpInAddr)); +} + + diff --git a/socket/HOSTENT.HPP b/socket/HOSTENT.HPP new file mode 100644 index 0000000..2a2fe7b --- /dev/null +++ b/socket/HOSTENT.HPP @@ -0,0 +1,184 @@ +#ifndef _SOCKET_HOSTENT_HPP_ +#define _SOCKET_HOSTENT_HPP_ +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SOCKET_INTERNETADDRESS_HPP_ +#include +#endif + +class HostEnt +{ +public: + enum AddressType{AddressTypeInternet=AF_INET}; + HostEnt(void); + HostEnt(const HostEnt &someHostEnt); + HostEnt(const String &hostName); + HostEnt(const InternetAddress &internetAddress); + virtual ~HostEnt(); + HostEnt &operator=(const HostEnt &someHostEnt); + WORD operator==(const HostEnt &someHostEnt)const; + WORD hostByName(const String &hostName); + WORD hostByAddress(const InternetAddress &hostAddress); + String hostName(void)const; + Block aliases(void)const; + short addressType(void)const; + short addressLength(void)const; + Block addresses(void)const; +private: + void hostName(const String &hostName); + void aliases(Block &aliases); + void addressType(short addressType); + void addressLength(short addressLength); + void addresses(Block &addresses); + void pureName(char *lpPureName); + void pureAliases(char **lpPureAliases); + void pureAddressType(short pureAddressType); + void pureLength(short pureLength); + void pureAddressList(char **lpPureAddressList); + + String mHostName; + Block mAliasNames; + short mAddressType; + short mAddressLength; + Block mAddressList; +}; + +inline +HostEnt::HostEnt(void) +: mAddressType(0), mAddressLength(0) +{ +} + +inline +HostEnt::HostEnt(const String &hostName) +{ + hostByName(hostName); +} + +inline +HostEnt::HostEnt(const InternetAddress &internetAddress) +{ + hostByAddress(internetAddress); +} + +inline +HostEnt::HostEnt(const HostEnt &someHostEnt) +{ + *this=someHostEnt; +} + +inline +HostEnt::~HostEnt() +{ +} + +inline +HostEnt &HostEnt::operator=(const HostEnt &someHostEnt) +{ + hostName(someHostEnt.hostName()); + aliases(someHostEnt.aliases()); + addressType(someHostEnt.addressType()); + addressLength(someHostEnt.addressLength()); + addresses(someHostEnt.addresses()); + return *this; +} + +inline +WORD HostEnt::operator==(const HostEnt &someHostEnt)const +{ + return (hostName()==someHostEnt.hostName()&& + aliases()==someHostEnt.aliases()&& + addressType()==someHostEnt.addressType()&& + addressLength()==someHostEnt.addressLength()&& + addresses()==someHostEnt.addresses()); +} + +inline +String HostEnt::hostName(void)const +{ + return mHostName; +} + +inline +void HostEnt::hostName(const String &hostName) +{ + mHostName=hostName; +} + +inline +Block HostEnt::aliases(void)const +{ + return mAliasNames; +} + +inline +void HostEnt::aliases(Block &aliases) +{ + mAliasNames=aliases; +} + +inline +short HostEnt::addressType(void)const +{ + return mAddressType; +} + +inline +void HostEnt::addressType(short addressType) +{ + mAddressType=addressType; +} + +inline +short HostEnt::addressLength(void)const +{ + return mAddressLength; +} + +inline +void HostEnt::addressLength(short addressLength) +{ + mAddressLength=addressLength; +} + +inline +Block HostEnt::addresses(void)const +{ + return mAddressList; +} + +inline +void HostEnt::addresses(Block &addresses) +{ + mAddressList=addresses; +} + +inline +void HostEnt::pureName(char *lpPureName) +{ + if(!lpPureName)return; + mHostName=lpPureName; +} + +inline +void HostEnt::pureAddressType(short pureAddressType) +{ + addressType(pureAddressType); +} + +inline +void HostEnt::pureLength(short pureLength) +{ + addressLength(pureLength); +} +#endif + + + diff --git a/socket/INADDR.HPP b/socket/INADDR.HPP new file mode 100644 index 0000000..db8cbba --- /dev/null +++ b/socket/INADDR.HPP @@ -0,0 +1,214 @@ +#ifndef _SOCKET_INTERNETADDRESS_HPP_ +#define _SOCKET_INTERNETADDRESS_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif + +class InternetAddress : private in_addr +{ +public: + InternetAddress(void); + InternetAddress(BYTE a1,BYTE a2,BYTE a3,BYTE a4); + InternetAddress(const InternetAddress &someInternetAddress); + InternetAddress(const in_addr &someInAddr); + InternetAddress(const String &dottedString); + InternetAddress(unsigned value); + virtual ~InternetAddress(); + InternetAddress &operator=(const InternetAddress &someInternetAddress); + InternetAddress &operator=(const in_addr &someInAddr); + WORD operator==(const InternetAddress &someInternetAddress)const; + operator String(void); + operator in_addr&(void); + String toString(void)const; + WORD isZero(void)const; + void l1(unsigned value); + unsigned l1(void)const; + BYTE b1(void)const; + void b1(BYTE b1); + BYTE b2(void)const; + void b2(BYTE b2); + BYTE b3(void)const; + void b3(BYTE b3); + BYTE b4(void)const; + void b4(BYTE b4); +private: + void setZero(void); +}; + +inline +InternetAddress::InternetAddress(void) +{ + setZero(); +} + +inline +InternetAddress::InternetAddress(const InternetAddress &someInternetAddress) +{ + *this=someInternetAddress; +} + +inline +InternetAddress::InternetAddress(const in_addr &someInAddr) +{ + *this=someInAddr; +} + +inline +InternetAddress::InternetAddress(unsigned value) +{ + l1(value); +} + +inline +InternetAddress::InternetAddress(BYTE a1,BYTE a2,BYTE a3,BYTE a4) +{ + b1(a1); + b2(a2); + b3(a3); + b4(a4); +} + +inline +InternetAddress::InternetAddress(const String &dottedString) +{ + DWORD internetAddress; + + b1(0); + b2(0); + b3(0); + b4(0); + if(INADDR_NONE==(internetAddress=inet_addr((LPSTR)dottedString)))return; + *this=(in_addr&)internetAddress; +} + +inline +InternetAddress::~InternetAddress() +{ +} + +inline +InternetAddress &InternetAddress::operator=(const InternetAddress &someInternetAddress) +{ + b1(someInternetAddress.b1()); + b2(someInternetAddress.b2()); + b3(someInternetAddress.b3()); + b4(someInternetAddress.b4()); + return *this; +} + +inline +InternetAddress &InternetAddress::operator=(const in_addr &someInAddr) +{ + b1(someInAddr.S_un.S_un_b.s_b1); + b2(someInAddr.S_un.S_un_b.s_b2); + b3(someInAddr.S_un.S_un_b.s_b3); + b4(someInAddr.S_un.S_un_b.s_b4); + return *this; +} + +inline +WORD InternetAddress::operator==(const InternetAddress &someInternetAddress)const +{ + return (b1()==someInternetAddress.b1()&& + b2()==someInternetAddress.b2()&& + b3()==someInternetAddress.b3()&& + b4()==someInternetAddress.b4()); +} + +inline +InternetAddress::operator String(void) +{ + return toString(); +} + +inline +String InternetAddress::toString(void)const +{ + return inet_ntoa((in_addr&)*this); +} + +inline +InternetAddress::operator in_addr&(void) +{ + return *this; +} + +inline +unsigned InternetAddress::l1(void)const +{ + return in_addr::S_un.S_addr; +} + +inline +void InternetAddress::l1(unsigned value) +{ + in_addr::S_un.S_addr=value; +} + +inline +BYTE InternetAddress::b1(void)const +{ + return in_addr::S_un.S_un_b.s_b1; +} + +inline +void InternetAddress::b1(BYTE b1) +{ + in_addr::S_un.S_un_b.s_b1=b1; +} + +inline +BYTE InternetAddress::b2(void)const +{ + return in_addr::S_un.S_un_b.s_b2; +} + +inline +void InternetAddress::b2(BYTE b2) +{ + in_addr::S_un.S_un_b.s_b2=b2; +} + +inline +BYTE InternetAddress::b3(void)const +{ + return in_addr::S_un.S_un_b.s_b3; +} + +inline +void InternetAddress::b3(BYTE b3) +{ + in_addr::S_un.S_un_b.s_b3=b3; +} + +inline +BYTE InternetAddress::b4(void)const +{ + return in_addr::S_un.S_un_b.s_b4; +} + +inline +void InternetAddress::b4(BYTE b4) +{ + in_addr::S_un.S_un_b.s_b4=b4; +} + +inline +WORD InternetAddress::isZero(void)const +{ + return (!b1()&&!b2()&&!b3()&&!b4()); +} + +inline +void InternetAddress::setZero(void) +{ + b1(0); + b2(0); + b3(0); + b4(0); +} +#endif + diff --git a/socket/INTSADDR.HPP b/socket/INTSADDR.HPP new file mode 100644 index 0000000..7076bac --- /dev/null +++ b/socket/INTSADDR.HPP @@ -0,0 +1,152 @@ +#ifndef _SOCKET_INETSOCKETADDRESS_HPP_ +#define _SOCKET_INETSOCKETADDRESS_HPP_ +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SOCKET_INTERNETADDRESS_HPP_ +#include +#endif + +class INETSocketAddress : private sockaddr_in +{ +public: + INETSocketAddress(void); + INETSocketAddress(const INETSocketAddress &someINETSocketAddress); + virtual ~INETSocketAddress(); + INETSocketAddress &operator=(const INETSocketAddress &someINETSocketAddress); + WORD operator==(const INETSocketAddress &someINETSocketAddress); + operator sockaddr_in&(void); + short family(void)const; + void family(short family); + short port(void)const; + void port(short port); + InternetAddress internetAddress(void)const; + void internetAddress(const InternetAddress &someInternetAddress); + sockaddr_in &getsockaddr(void); + String toString(void)const; + static int length(void); +private: + short purePort(void)const; + void purePort(short purePort); + void setZero(void); +}; + +inline +INETSocketAddress::INETSocketAddress(void) +{ + setZero(); +} + +inline +INETSocketAddress::INETSocketAddress(const INETSocketAddress &someINETSocketAddress) +{ + *this=someINETSocketAddress; +} + +inline +INETSocketAddress::~INETSocketAddress() +{ +} + +inline +INETSocketAddress &INETSocketAddress::operator=(const INETSocketAddress &someINETSocketAddress) +{ + family(someINETSocketAddress.family()); + purePort(someINETSocketAddress.purePort()); + internetAddress(someINETSocketAddress.internetAddress()); + return *this; +} + +inline +WORD INETSocketAddress::operator==(const INETSocketAddress &someINETSocketAddress) +{ + return (family()==someINETSocketAddress.family()&& + purePort()==someINETSocketAddress.purePort()&& + internetAddress()==someINETSocketAddress.internetAddress()); +} + +inline +INETSocketAddress::operator sockaddr_in&(void) +{ + return *this; +} + +inline +short INETSocketAddress::family(void)const +{ + return sockaddr_in::sin_family; +} + +inline +void INETSocketAddress::family(short family) +{ + sockaddr_in::sin_family=family; +} + +inline +short INETSocketAddress::port(void)const +{ + return ntohs(sockaddr_in::sin_port); +} + +inline +void INETSocketAddress::port(short port) +{ + sockaddr_in::sin_port=htons(port); +} + +inline +short INETSocketAddress::purePort(void)const +{ + return sockaddr_in::sin_port; +} + +inline +void INETSocketAddress::purePort(short purePort) +{ + sockaddr_in::sin_port=purePort; +} + +inline +InternetAddress INETSocketAddress::internetAddress(void)const +{ + return InternetAddress(sockaddr_in::sin_addr); +} + +inline +void INETSocketAddress::internetAddress(const InternetAddress &someInternetAddress) +{ + ::memcpy((char*)&(((sockaddr_in&)*this).sin_addr),(char*)&((in_addr&)someInternetAddress),sizeof(in_addr)); +} + +inline +sockaddr_in &INETSocketAddress::getsockaddr(void) +{ + return *this; +} + +inline +void INETSocketAddress::setZero(void) +{ + ::memset((char*)&((sockaddr_in&)*this),0,sizeof(sockaddr_in)); +} + +inline +String INETSocketAddress::toString(void)const +{ + String str=internetAddress().toString()+String(":")+String().fromInt(port())+String(":"); + if(PF_INET==family())str+="PF_INET"; + else str+=String("Family:")+String().fromInt(family()); + return str; +} + +inline +int INETSocketAddress::length(void) +{ + return sizeof(sockaddr_in); +} +#endif + diff --git a/socket/PROCADDR.HPP b/socket/PROCADDR.HPP new file mode 100644 index 0000000..ee1c540 --- /dev/null +++ b/socket/PROCADDR.HPP @@ -0,0 +1,20 @@ +#ifndef _SOCKET_PROCADDRESS_HPP_ +#define _SOCKET_PROCADDRESS_HPP_ +#if defined(_MSC_VER) +#pragma warning(disable:4700) +#endif + +template +class ProcAddress +{ +public: + typedef BOOL (T::*LPFNMETHODVOID)(void); + ProcAddress(void); + virtual ~ProcAddress(); + int getProcAddress(LPFNMETHODVOID lpfnMethod); +private: +}; +#if defined(_MSC_VER) +#include +#endif +#endif diff --git a/socket/PROCADDR.TPP b/socket/PROCADDR.TPP new file mode 100644 index 0000000..b9105a9 --- /dev/null +++ b/socket/PROCADDR.TPP @@ -0,0 +1,34 @@ + +template +ProcAddress::ProcAddress(void) +{ +} + +template +ProcAddress::~ProcAddress() +{ +} + +#if defined(_MSC_VER) +template +int ProcAddress::getProcAddress(LPFNMETHODVOID lpfnMethod) +{ + typedef BOOL (*LPFNPROCVOID)(void); + int methodAddress=*((int*)&lpfnMethod); + return methodAddress; +} +#else +template +int ProcAddress::getProcAddress(void (T::* /*lpfnMethod*/ )(void)) +{ + typedef BOOL (*LPFNPROCVOID)(void); + int methodAddress; + char assign[]={0x8B,0x5D,0x0C,0xC3}; + char address[]={0x00,0x00,0x00,0x00}; + *((DWORD*)address)=(DWORD)((DWORD*)assign); + ((LPFNPROCVOID)address)(); + return methodAddress; +} +#endif + + diff --git a/socket/RESOLVE.CPP b/socket/RESOLVE.CPP new file mode 100644 index 0000000..377fa7f --- /dev/null +++ b/socket/RESOLVE.CPP @@ -0,0 +1,20 @@ +#include + +void AddressResolution::resolveFTPDataAddress(void) +{ + CSADDR_INFO *lpAddressInfo; + char addressInfo[255]; + char aliasInfo[255]; + DWORD addressInfoBufferLength(sizeof(addressInfo)); + DWORD aliasInfoBufferLength(sizeof(aliasInfo)); + LONG addressInfoEntries; + + ::memset(&addressInfo,0,sizeof(addressInfo)); + ::memset(&aliasInfo,0,sizeof(aliasInfo)); + GUID ftpDataGUID=SVCID_FTP_DATA_TCP; + addressInfoEntries=::GetAddressByName(NS_DEFAULT,&ftpDataGUID,"ftp-data",0,RES_SERVICE,0,addressInfo,&addressInfoBufferLength,aliasInfo,&aliasInfoBufferLength); + if(addressInfoEntries<=0)return; + lpAddressInfo=(CSADDR_INFO*)addressInfo; + if(!lpAddressInfo)return; +} + diff --git a/socket/RESOLVE.HPP b/socket/RESOLVE.HPP new file mode 100644 index 0000000..5979ba9 --- /dev/null +++ b/socket/RESOLVE.HPP @@ -0,0 +1,25 @@ +#ifndef _SOCKET_ADDRESSRESOLUTION_HPP_ +#define _SOCKET_ADDRESSRESOLUTION_HPP_ +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif + +class AddressResolution +{ +public: + AddressResolution(void); + ~AddressResolution(); + void resolveFTPDataAddress(void); +private: +}; + +inline +AddressResolution::AddressResolution(void) +{ +} + +inline +AddressResolution::~AddressResolution() +{ +} +#endif diff --git a/socket/Release/socket.lib b/socket/Release/socket.lib new file mode 100644 index 0000000..2d666c6 Binary files /dev/null and b/socket/Release/socket.lib differ diff --git a/socket/Release/vc60.idb b/socket/Release/vc60.idb new file mode 100644 index 0000000..fe60c3f Binary files /dev/null and b/socket/Release/vc60.idb differ diff --git a/socket/SCRAPS.TXT b/socket/SCRAPS.TXT new file mode 100644 index 0000000..c7803e4 --- /dev/null +++ b/socket/SCRAPS.TXT @@ -0,0 +1,611 @@ +DialogTemplate::operator DLGTEMPLATE *(void) +{ + DLGTEMPLATE *lpDLGTEMPLATE(0); + DLGITEMTEMPLATE *lpDLGITEMTEMPLATE; + String workString; + BYTE *lpCharByte; + DWORD sizeData; + + if(!itemCount())return lpDLGTEMPLATE; + sizeData=sizeof(DLGITEMTEMPLATE)*itemCount()+sizeof(DLGTEMPLATE); + for(short itemIndex=0;itemIndex +#include +#include + + + +// ***************************** + +void finger(String userHostName); +void ftp(String userHostName); +void errorMessage(String messageString); + +#if 0 +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + WSADATA wskData; + WORD wVersion=MAKEWORD(1,1); + + if(!::WSAStartup(wVersion,&wskData)) + { + ftp("sean@cnct.com"); + } + ::WSACleanup(); + return FALSE; +} +#endif + +void finger(String userHostName) +{ + struct hostent FAR *lpHostEntry; + struct sockaddr_in anaddr; + struct servent FAR *lpServent; + short fingerPort; + SOCKET clientSocket; + WORD receiveCount; + WORD stringLength(4096); + String receiveString; + String userName; + String hostName; + + userName=userHostName.betweenString(0,'@'); + hostName=userHostName.betweenString('@','\0'); + receiveString.reserve(stringLength); + if((lpHostEntry=::gethostbyname(hostName))==NULL){errorMessage("unknown host");return;} + ::memcpy(&anaddr.sin_addr.s_addr,lpHostEntry->h_addr,lpHostEntry->h_length); + if((lpServent=::getservbyname("finger","tcp"))==NULL){errorMessage("cannot determine port number for finger daemon.");return;} + fingerPort=::htons(lpServent->s_port); + if((clientSocket=::socket(PF_INET,SOCK_STREAM,0))==INVALID_SOCKET){errorMessage("unable to create socket.");return;} + anaddr.sin_family=PF_INET; + anaddr.sin_port=::htons(fingerPort); + if(::connect(clientSocket,(struct sockaddr FAR *)&anaddr,sizeof(anaddr))) + {errorMessage("unable to connect to finger daemon");::closesocket(clientSocket);return;} + userName+="\r\n"; + if(::send(clientSocket,userName,userName.length(),0)h_addr,lpHostEntry->h_length); + if((lpServent=::getservbyname("ftp","tcp"))==NULL){errorMessage("cannot determine port number for ftp daemon.");return;} + ftpPort=::htons(lpServent->s_port); + if((clientSocket=::socket(PF_INET,SOCK_STREAM,0))==INVALID_SOCKET){errorMessage("unable to create socket.");return;} + anaddr.sin_family=PF_INET; + anaddr.sin_port=::htons(ftpPort); + if(::connect(clientSocket,(struct sockaddr FAR *)&anaddr,sizeof(anaddr))) + {errorMessage("unable to connect to ftp daemon");::closesocket(clientSocket);return;} + if((receiveCount=::recv(clientSocket,receiveString,stringLength,0L))==SOCKET_ERROR) + {errorMessage("error reading data from ftp daemon");::closesocket(clientSocket);return;} + if(!receiveCount){errorMessage("no data received from ftp daemon");::closesocket(clientSocket);return;} + errorMessage(receiveString); + String ftpString("USER sean@cnct.com"); + ftpString+="\r\n"; + if(::send(clientSocket,ftpString,ftpString.length(),0)0)return TRUE; + if(!acquireData)return FALSE; + return cacheData(); +} + + + if(!(itemsInCache()>0)) + { + if(!waitForData&&!isReady(TRUE))return FALSE; + if(!cacheData())return FALSE; + } + + + +//WORD Socket::hasData(WORD useWait)const +//{ +// fd_set setDescriptor; +// timeval waitTime; +// +// setDescriptor.fd_count=1; +// setDescriptor.fd_array[0]=mSocket; +// if(useWait){waitTime.tv_sec=WaitTime;waitTime.tv_usec=0;} +// else {waitTime.tv_sec=0;waitTime.tv_usec=500;} +// return ::select(0,&setDescriptor,0,0,&waitTime); +//} + + + + +class EchoServer : public GenericServer +{ +public: + EchoServer(void); + virtual ~EchoServer(); +protected: + WORD charHandler(const char &charData); + void acceptHandler(void); + void message(const String &message); +private: + Console mWinConsole; +}; + +EchoServer::EchoServer(void) +{ +} + +EchoServer::~EchoServer() +{ + mWinConsole.writeLine("ECHO server is destructing..."); + mWinConsole.read(); +} + +void EchoServer::acceptHandler(void) +{ + char charData; + + send(TelnetPacket::InterpretAsCommand); + send(TelnetPacket::Do); + send(TelnetPacket::TermType); + + send(TelnetPacket::InterpretAsCommand); + send(TelnetPacket::Do); + send(TelnetPacket::Authentication); + + receive(charData); + receive(charData); + receive(charData); + + receive(charData); + receive(charData); + receive(charData); + + send("welcome to generic server, please login:"); +} + +WORD EchoServer::charHandler(const char &charData) +{ + String strVal; + char rcvChar; + + ::sprintf(strVal,"received : (%lx)(%c)",(int)charData,charData); + message(strVal); + return TRUE; +} + +void EchoServer::message(const String &message) +{ + mWinConsole.writeLine(message); +} + + + + +#if 0 +WORD FTPClient::open(String hostName) +{ + HostEnt hostEntry; + ServEnt serverEntry; + + message(String("trying ")+hostName+String("...")); + if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;} + InternetAddress internetAddress(hostName); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}} + else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} + message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + INETSocketAddress::internetAddress((hostEntry.addresses())[0]); + if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return FALSE;} + if(!mFTPControl.openSocket()){message("unable to create socket.");return FALSE;} + INETSocketAddress::family(PF_INET); + INETSocketAddress::port(serverEntry.port()); + if(!mFTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to ftp daemon");return FALSE;} + if(!receive(mAckConnectionResponseStrings))return FALSE; + mFTPControl.getSocketName((INETSocketAddress&)*this); + return mFTPControl.isConnected(); +} +#endif + + + +WORD Socket::receiveBinary(String pathFileName,TimeInfo &someTimeInfo) +{ + Profile iniProfile; + char rcvChar[BlockLength]; + DWORD bufferLength(sizeof(rcvChar)); + DWORD receiveCount(0); + + if(!isConnected())return FALSE; +// mReceiveCache.reset(); + iniProfile.makeFileName(pathFileName); + if(pathFileName.isNull())return FALSE; + FileHandle writeFile(pathFileName,FileHandle::Write,FileHandle::ShareNone,FileHandle::Create); + someTimeInfo.startTime(); + while(TRUE) + { + while(!mReceiveCache.isReady(FALSE)); +// if((bufferLength=::recv(mSocket,rcvChar,bufferLength,0L))==SOCKET_ERROR||!bufferLength)break; + if(!mReceiveCache.receive(rcvChar,sizeof(rcvChar),bufferLength))break; + writeFile.write((unsigned char*)rcvChar,bufferLength); + receiveCount+=bufferLength; + if(!isConnected())break; + } + someTimeInfo.endTime(receiveCount); + return TRUE; +} + + +WORD Socket::receiveBinary(String pathFileName,DWORD sizeData,TimeInfo &someTimeInfo) +{ + String strDirectory(pathFileName); + DiskInfo diskInfo; + Profile iniProfile; + char rcvChar[BlockLength]; + DWORD bufferLength; + DWORD receiveCount(0); + + if(!isConnected())return FALSE; +// mReceiveCache.reset(); + if(diskInfo.getDiskFreeSpace()sizeData)bufferLength=sizeData-receiveCount; + else bufferLength=sizeof(rcvChar); + while(!mReceiveCache.isReady(FALSE)); +// if((bufferLength=::recv(mSocket,rcvChar,bufferLength,0L))==SOCKET_ERROR||!bufferLength)return FALSE; + if(!mReceiveCache.receive(rcvChar,sizeof(rcvChar),bufferLength))break; + writeFile.write((unsigned char*)rcvChar,bufferLength); + receiveCount+=bufferLength; + if(!isConnected())break; + } + someTimeInfo.endTime(sizeData); + return TRUE; +} diff --git a/socket/SERVENT.CPP b/socket/SERVENT.CPP new file mode 100644 index 0000000..5fc3942 --- /dev/null +++ b/socket/SERVENT.CPP @@ -0,0 +1,24 @@ +#include + +WORD ServEnt::serviceByName(const String &serviceName,const String &protocol) +{ + struct servent *lpServent; + + if(0==(lpServent=::getservbyname((LPSTR)serviceName,(LPSTR)protocol)))return FALSE; + pureServiceName(lpServent->s_name); + purePort(lpServent->s_port); + pureAliases(lpServent->s_aliases); + pureProtocol(lpServent->s_proto); + return TRUE; +} + +void ServEnt::pureAliases(char **lpAliases) +{ + mAliasNames.remove(); + if(!lpAliases)return; + while(*(lpAliases)) + { + mAliasNames.insert(&String(*lpAliases)); + lpAliases++; + } +} diff --git a/socket/SERVENT.HPP b/socket/SERVENT.HPP new file mode 100644 index 0000000..b8c8377 --- /dev/null +++ b/socket/SERVENT.HPP @@ -0,0 +1,144 @@ +#ifndef _SOCKET_SERVENT_HPP_ +#define _SOCKET_SERVENT_HPP_ +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class ServEnt +{ +public: + ServEnt(void); + ServEnt(const ServEnt &someServEnt); + virtual ~ServEnt(); + ServEnt &operator=(const ServEnt &someServEnt); + WORD operator==(const ServEnt &someServEnt)const; + WORD serviceByName(const String &serverName,const String &protocol); + String serviceName(void)const; + void serviceName(const String &serviceName); + Block aliases(void)const; + void aliases(Block &aliases); + short port(void)const; + void port(short port); + String protocol(void)const; + void protocol(const String &protocol); +private: + void pureServiceName(char *lpServiceName); + void pureAliases(char **lpAliases); + void purePort(short port); + void pureProtocol(char *lpProtocol); + + String mNameService; + Block mAliasNames; + short mPort; + String mProtocol; +}; + +inline +ServEnt::ServEnt(void) +: mPort(0) +{ +} + +inline +ServEnt::ServEnt(const ServEnt &someServEnt) +{ + *this=someServEnt; +} + +inline +ServEnt::~ServEnt() +{ +} + +inline +ServEnt &ServEnt::operator=(const ServEnt &someServEnt) +{ + serviceName(someServEnt.serviceName()); + aliases(someServEnt.aliases()); + port(someServEnt.port()); + protocol(someServEnt.protocol()); + return *this; +} + +inline +WORD ServEnt::operator==(const ServEnt &someServEnt)const +{ + return (serviceName()==someServEnt.serviceName()&& + aliases()==someServEnt.aliases()&& + port()==someServEnt.port()&& + protocol()==someServEnt.protocol()); +} + +inline +String ServEnt::serviceName(void)const +{ + return mNameService; +} + +inline +void ServEnt::serviceName(const String &serviceName) +{ + mNameService=serviceName; +} + +inline +Block ServEnt::aliases(void)const +{ + return mAliasNames; +} + +inline +void ServEnt::aliases(Block &aliases) +{ + mAliasNames=aliases; +} + +inline +short ServEnt::port(void)const +{ + return ntohs(mPort); +} + +inline +void ServEnt::port(short port) +{ + mPort=htons(port); +} + +inline +String ServEnt::protocol(void)const +{ + return mProtocol; +} + +inline +void ServEnt::protocol(const String &protocol) +{ + mProtocol=protocol; +} + +inline +void ServEnt::pureServiceName(char *lpServiceName) +{ + serviceName(lpServiceName); +} + +inline +void ServEnt::purePort(short portNumber) +{ + mPort=portNumber; +} + +inline +void ServEnt::pureProtocol(char *lpProtocol) +{ + protocol(lpProtocol); +} +#endif + diff --git a/socket/SOCKET.BAK b/socket/SOCKET.BAK new file mode 100644 index 0000000..4fecec4 --- /dev/null +++ b/socket/SOCKET.BAK @@ -0,0 +1,507 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=socket - Win32 Debug +!MESSAGE No configuration specified. Defaulting to socket - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "socket - Win32 Release" && "$(CFG)" != "socket - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Socket.mak" CFG="socket - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "socket - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "socket - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "socket - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "socket - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Socket.lib" + +CLEAN : + -@erase "$(INTDIR)\cache.obj" + -@erase "$(INTDIR)\hooker.obj" + -@erase "$(INTDIR)\Hostent.obj" + -@erase "$(INTDIR)\Resolve.obj" + -@erase "$(INTDIR)\Servent.obj" + -@erase "$(INTDIR)\Socket.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Wsadata.obj" + -@erase "$(OUTDIR)\Socket.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Socket.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Socket.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Socket.lib" +LIB32_OBJS= \ + "$(INTDIR)\cache.obj" \ + "$(INTDIR)\hooker.obj" \ + "$(INTDIR)\Hostent.obj" \ + "$(INTDIR)\Resolve.obj" \ + "$(INTDIR)\Servent.obj" \ + "$(INTDIR)\Socket.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Wsadata.obj" + +"$(OUTDIR)\Socket.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\mssocket.lib" + +CLEAN : + -@erase "$(INTDIR)\cache.obj" + -@erase "$(INTDIR)\hooker.obj" + -@erase "$(INTDIR)\Hostent.obj" + -@erase "$(INTDIR)\Resolve.obj" + -@erase "$(INTDIR)\Servent.obj" + -@erase "$(INTDIR)\Socket.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Wsadata.obj" + -@erase "..\exe\mssocket.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)/" /c\ + +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Socket.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mssocket.lib" +LIB32_FLAGS=/nologo /out:"..\exe\mssocket.lib" +LIB32_OBJS= \ + "$(INTDIR)\cache.obj" \ + "$(INTDIR)\hooker.obj" \ + "$(INTDIR)\Hostent.obj" \ + "$(INTDIR)\Resolve.obj" \ + "$(INTDIR)\Servent.obj" \ + "$(INTDIR)\Socket.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Wsadata.obj" + +"..\exe\mssocket.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "socket - Win32 Release" +# Name "socket - Win32 Debug" + +!IF "$(CFG)" == "socket - Win32 Release" + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Wsadata.cpp + +!IF "$(CFG)" == "socket - Win32 Release" + +DEP_CPP_WSADA=\ + {$(INCLUDE)}"\.\Wsadata.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Wsadata.obj" : $(SOURCE) $(DEP_CPP_WSADA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +DEP_CPP_WSADA=\ + {$(INCLUDE)}"\.\Wsadata.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Wsadata.obj" : $(SOURCE) $(DEP_CPP_WSADA) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Resolve.cpp +DEP_CPP_RESOL=\ + {$(INCLUDE)}"\.\Resolve.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Resolve.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Servent.cpp + +!IF "$(CFG)" == "socket - Win32 Release" + +DEP_CPP_SERVE=\ + {$(INCLUDE)}"\.\Servent.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Servent.obj" : $(SOURCE) $(DEP_CPP_SERVE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +DEP_CPP_SERVE=\ + {$(INCLUDE)}"\.\Servent.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Servent.obj" : $(SOURCE) $(DEP_CPP_SERVE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Socket.cpp + +!IF "$(CFG)" == "socket - Win32 Release" + +DEP_CPP_SOCKE=\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Inaddr.hpp"\ + {$(INCLUDE)}"\.\Intsaddr.hpp"\ + {$(INCLUDE)}"\.\Socket.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\.\Wsadata.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Socket.obj" : $(SOURCE) $(DEP_CPP_SOCKE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +DEP_CPP_SOCKE=\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\.\Inaddr.hpp"\ + {$(INCLUDE)}"\.\Intsaddr.hpp"\ + {$(INCLUDE)}"\.\Socket.hpp"\ + {$(INCLUDE)}"\.\Timeinfo.hpp"\ + {$(INCLUDE)}"\.\Wsadata.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Socket.obj" : $(SOURCE) $(DEP_CPP_SOCKE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "socket - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Inaddr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Inaddr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Hostent.cpp + +!IF "$(CFG)" == "socket - Win32 Release" + +DEP_CPP_HOSTE=\ + {$(INCLUDE)}"\.\Hostent.hpp"\ + {$(INCLUDE)}"\.\Inaddr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Hostent.obj" : $(SOURCE) $(DEP_CPP_HOSTE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +DEP_CPP_HOSTE=\ + {$(INCLUDE)}"\.\Hostent.hpp"\ + {$(INCLUDE)}"\.\Inaddr.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\Hostent.obj" : $(SOURCE) $(DEP_CPP_HOSTE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\cache.cpp +DEP_CPP_CACHE=\ + {$(INCLUDE)}"\.\Cache.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\cache.obj" : $(SOURCE) $(DEP_CPP_CACHE) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\hooker.cpp +DEP_CPP_HOOKE=\ + {$(INCLUDE)}"\.\hooker.hpp"\ + {$(INCLUDE)}"\.\procaddr.hpp"\ + {$(INCLUDE)}"\.\procaddr.tpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\codegen.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Gdata.hpp"\ + {$(INCLUDE)}"\Common\Gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winsock.hpp"\ + + +"$(INTDIR)\hooker.obj" : $(SOURCE) $(DEP_CPP_HOOKE) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/socket/SOCKET.HPP b/socket/SOCKET.HPP new file mode 100644 index 0000000..47ec920 --- /dev/null +++ b/socket/SOCKET.HPP @@ -0,0 +1,215 @@ +#ifndef _SOCKET_SOCKET_HPP_ +#define _SOCKET_SOCKET_HPP_ +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif +#ifndef _SOCKET_INETSOCKETADDRESS_HPP_ +#include +#endif +#ifndef _SOCKET_SOCKETADDRESS_HPP_ +#include +#endif +#ifndef _SOCKET_IPMULTICAST_HPP_ +#include +#endif +#ifndef _SOCKET_WSADATA_HPP_ +#include +#endif +#ifndef _SOCKET_TIMEINFO_HPP_ +#include +#endif +#ifndef _SOCKET_RECEIVECACHE_HPP_ +#include +#endif + +template +class Block; + +class Socket +{ +public: + enum Type{SocketStream=SOCK_STREAM,SocketDGram=SOCK_DGRAM,SocketRaw=SOCK_RAW,SocketSeqPacket=SOCK_SEQPACKET,SocketRdm=SOCK_RDM}; + enum Protocol{ProtocolNone=0,ProtocolIPTCP=IPPROTO_TCP}; + enum Domain{DomainUnix=AF_UNIX,DomainInternet=AF_INET}; + enum Disposition{CloseSocket,AssumedSocket}; + enum MsgType{None=0,OutOfBand=MSG_OOB,Peek=MSG_PEEK,DontRoute=MSG_DONTROUTE}; + Socket(void); + Socket(const Socket &someSocket); + Socket(SOCKET someSOCKET); + virtual ~Socket(); + Socket &operator=(const Socket &someSocket); + Socket &operator=(SOCKET someSOCKET); + bool operator==(const Socket &someSocket)const; + operator SOCKET&(void); + bool create(Domain domain=DomainInternet,Type type=SocketStream,Protocol protocol=ProtocolIPTCP); + void destroy(void); + bool connect(INETSocketAddress &internetSocketAddress); + bool bind(INETSocketAddress &internetSocketAddress); + bool bind(SocketAddress &socketAddress); + bool listen(int maxPendingRequests=1); + bool accept(Socket &someSocket); + bool accept(Socket &someSocket,INETSocketAddress &internetSocketAddress); + DWORD receive(char *buffer,DWORD count,bool waitForData=true); + bool receive(char &charData,bool waitForData=true); + bool receive(String &receiveString,bool waitForData=true); + bool receive(Block &receiveStrings); + bool receiveFrom(void *pBuffer,int buflen,DWORD msgType,INETSocketAddress &from); + bool receivePage(Block &receiveStrings); + bool receiveHeader(Block &headerLines); + bool receiveImage(String pathFileName,TimeInfo &someTimeInfo); + bool receiveBinary(String pathFileName,DWORD sizeData,TimeInfo &someTimeInfo); + bool receiveBinary(String pathFileName,TimeInfo &someTimeInfo); + bool sendBinary(String pathFileName,TimeInfo &someTimeInfo); + bool getSocketName(INETSocketAddress &internetSocketAddress); + bool getPeerName(INETSocketAddress &internetSocketAddress); + bool send(const char *buffer,DWORD count); + bool send(const char &charData); + bool send(const String &sendString); + bool send(Block &strings); + bool sendTo(void *pBuffer,int buflen,INETSocketAddress &inetSocketAddress); + bool hasData(void)const; + bool isConnected(void)const; + bool isBound(void)const; + bool isListening(void)const; + bool isInitialized(void)const; + bool isOkay(void)const; + SOCKET getSocket(void)const; + bool reuseAddress(bool reuseAddress=true); + bool setLinger(int seconds); + bool setDontLinger(void); + bool addMembership(IPMReq &ipMReq); + bool dropMembership(IPMReq &ipMReq); + bool setMulticastTTL(int ttl); + bool setMulticastLoopback(bool loopback); +private: + enum Status{StatusConnect=0x0001,StatusBind=0x0002,StatusListen=0x0004}; + enum {MaxLength=32768,BlockLength=16384}; + bool canWrite(void)const; + void isConnected(bool isConnected); + void isBound(bool isBound); + void isListening(bool isListening); + + SOCKET mSocket; + WORD mStatusBits; + WSASystem mWSASystem; + ReceiveCache mReceiveCache; + Disposition mDisposition; +}; + +inline +Socket::Socket(void) +: mSocket(INVALID_SOCKET), mDisposition(CloseSocket), mStatusBits(0L) +{ +} + +inline +Socket::Socket(const Socket &someSocket) +{ + *this=someSocket; +} + +inline +Socket::Socket(SOCKET someSOCKET) +{ + *this=someSOCKET; +} + +inline +Socket::~Socket() +{ + destroy(); +} + +inline +bool Socket::operator==(const Socket &someSocket)const +{ + return mSocket==someSocket.mSocket; +} + +inline +Socket::operator SOCKET&(void) +{ + return mSocket; +} + +inline +bool Socket::isOkay(void)const +{ + return (INVALID_SOCKET==mSocket?false:true); +} + +inline +bool Socket::canWrite(void)const +{ + fd_set setDescriptor; + + setDescriptor.fd_count=1; + setDescriptor.fd_array[0]=mSocket; + return ::select(0,0,&setDescriptor,0,0); +} + +inline +bool Socket::hasData(void)const +{ + fd_set setDescriptor; + timeval waitTime; + + setDescriptor.fd_count=1; + setDescriptor.fd_array[0]=mSocket; + waitTime.tv_sec=0; + waitTime.tv_usec=0; + return ::select(0,&setDescriptor,0,0,&waitTime); +} + +inline +bool Socket::isInitialized(void)const +{ + return mWSASystem.isInitialized(); +} + +inline +bool Socket::isConnected(void)const +{ + return (mStatusBits&StatusConnect?true:false); +} + +inline +void Socket::isConnected(bool isConnected) +{ + if(isConnected)mStatusBits|=StatusConnect; + else mStatusBits&=~StatusConnect; +} + +inline +bool Socket::isBound(void)const +{ + return (mStatusBits&StatusBind?true:false); +} + +inline +void Socket::isBound(bool isBound) +{ + if(isBound)mStatusBits|=StatusBind; + else mStatusBits&=~StatusBind; +} + +inline +bool Socket::isListening(void)const +{ + return (mStatusBits&StatusListen?true:false); +} + +inline +void Socket::isListening(bool isListening) +{ + if(isListening)mStatusBits|=StatusListen; + else mStatusBits&=~StatusListen; +} + +inline +SOCKET Socket::getSocket(void)const +{ + return mSocket; +} +#endif + diff --git a/socket/SOCKET.IDE b/socket/SOCKET.IDE new file mode 100644 index 0000000..a6e7c67 Binary files /dev/null and b/socket/SOCKET.IDE differ diff --git a/socket/SOCKET.PLG b/socket/SOCKET.PLG new file mode 100644 index 0000000..c003ed4 --- /dev/null +++ b/socket/SOCKET.PLG @@ -0,0 +1,41 @@ + + +
+

Build Log

+

+--------------------Configuration: socket - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP5D.tmp" with contents +[ +/nologo /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\socket\cache.cpp" +"D:\work\socket\hooker.cpp" +"D:\work\socket\Hostent.cpp" +"D:\work\socket\Resolve.cpp" +"D:\work\socket\Servent.cpp" +"D:\work\socket\Socket.cpp" +"D:\work\socket\Stdtmpl.cpp" +"D:\work\socket\Wsadata.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP5D.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mssocket.lib" .\msvcobj\cache.obj .\msvcobj\hooker.obj .\msvcobj\Hostent.obj .\msvcobj\Resolve.obj .\msvcobj\Servent.obj .\msvcobj\Socket.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Wsadata.obj " +

Output Window

+Compiling... +cache.cpp +hooker.cpp +Hostent.cpp +Resolve.cpp +Servent.cpp +Socket.cpp +Stdtmpl.cpp +Wsadata.cpp +Creating library... + + + +

Results

+mssocket.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/socket/STDTMPL.CPP b/socket/STDTMPL.CPP new file mode 100644 index 0000000..f51ffa8 --- /dev/null +++ b/socket/STDTMPL.CPP @@ -0,0 +1,13 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include + +typedef Block a; +#endif + + diff --git a/socket/Socket.cpp b/socket/Socket.cpp new file mode 100644 index 0000000..6d31ea6 --- /dev/null +++ b/socket/Socket.cpp @@ -0,0 +1,424 @@ +#include +#include +#include +#include +#include +#include +#include + +bool Socket::create(Domain domain,Type type,Protocol protocol) +{ + destroy(); + if(!isInitialized())return isOkay(); + mSocket=::socket((int)domain,(int)type,(int)protocol); + mReceiveCache.socket(mSocket); + mDisposition=CloseSocket; + return isOkay(); +} + +void Socket::destroy(void) +{ + if(!isOkay()||!isInitialized())return; + if(CloseSocket==mDisposition)::closesocket(mSocket); + mSocket=INVALID_SOCKET; + isConnected(FALSE); + isBound(FALSE); + isListening(FALSE); +} + +Socket &Socket::operator=(const Socket &someSocket) +{ + destroy(); + mSocket=someSocket.mSocket; + mReceiveCache.socket(mSocket); + mDisposition=AssumedSocket; + isConnected(someSocket.isConnected()); + isBound(someSocket.isBound()); + isListening(someSocket.isListening()); + return *this; +} + +Socket &Socket::operator=(SOCKET someSOCKET) +{ + destroy(); + mSocket=someSOCKET; + mReceiveCache.socket(mSocket); + mDisposition=CloseSocket; + isConnected(FALSE); + isBound(FALSE); + isListening(FALSE); + return *this; +} + +DWORD Socket::receive(char *buffer,DWORD count,bool waitForData) +{ + DWORD cbytes(0); + + for(;cbytes &receiveStrings) +{ + String stringData; + String seriesItem; + + receiveStrings.remove(); + while(TRUE) + { + if(!receive(stringData))break; + if(!receiveStrings.size())seriesItem=stringData.substr(0,2); + receiveStrings.insert(&stringData); + if(!(stringData.operator[](3)=='-'&&stringData.substr(0,2)==seriesItem))break; + if(!isConnected())break; + } + return true; +} + +bool Socket::receiveFrom(void *pBuffer,int buflen,DWORD msgType,INETSocketAddress &from) +{ + int fromLength(sizeof(sockaddr_in)); + if(!isOkay()||!pBuffer||buflen<=0)return false; + return !(-1==::recvfrom(mSocket,(char*)pBuffer,buflen,msgType,(sockaddr*)&(from.getsockaddr()),&fromLength)); +} + +bool Socket::receivePage(Block &receiveStrings) +{ + String stringData; + + receiveStrings.remove(); + while(TRUE) + { + if(!receive(stringData))break; + receiveStrings.insert(&stringData); + if(stringData.substr(0,6)==String("")||stringData.substr(0,6)==String(""))break; + else if(stringData.substr(0,13)==String("")||stringData.substr(0,13)==String(""))break; + } + return true; +} + +bool Socket::receiveHeader(Block &headerLines) +{ + String stringData; + + headerLines.remove(); + while(true) + { + if(!receive(stringData))break; + if(stringData.isNull())break; + stringData.lower(); + headerLines.insert(&stringData); + } + return true; +} + +bool Socket::receiveImage(String pathFileName,TimeInfo &someTimeInfo) +{ + String strDirectory(pathFileName); + DiskInfo diskInfo; + Profile iniProfile; + char rcvChar[BlockLength]; + DWORD bufferLength; + DWORD receiveCount(0); + Block headerLines; + DWORD sizeData(0); + + if(!isConnected())return false; + if(diskInfo.getDiskFreeSpace()sizeData)bufferLength=sizeData-receiveCount; + else bufferLength=sizeof(rcvChar); + while(!mReceiveCache.isReady(FALSE)); + mReceiveCache.receive(rcvChar,bufferLength,bufferLength); + if(!bufferLength)continue; + writeFile.write((unsigned char*)rcvChar,bufferLength); + receiveCount+=bufferLength; + if(!isConnected())break; + } + someTimeInfo.endTime(sizeData); + writeFile.close(); + return true; +} + +bool Socket::receiveBinary(String pathFileName,DWORD sizeData,TimeInfo &someTimeInfo) +{ + String strDirectory(pathFileName); + DiskInfo diskInfo; + Profile iniProfile; + char rcvChar[BlockLength]; + DWORD bufferLength; + DWORD receiveCount(0); + + if(!isConnected())return false; + if(diskInfo.getDiskFreeSpace()sizeData)bufferLength=sizeData-receiveCount; + else bufferLength=sizeof(rcvChar); + while(!mReceiveCache.isReady(FALSE)); + if(!mReceiveCache.receive(rcvChar,sizeof(rcvChar),bufferLength))break; + writeFile.write((unsigned char*)rcvChar,bufferLength); + receiveCount+=bufferLength; + if(!isConnected())break; + } + someTimeInfo.endTime(sizeData); + return false; +} + +bool Socket::receiveBinary(String pathFileName,TimeInfo &someTimeInfo) +{ + Profile iniProfile; + char rcvChar[BlockLength]; + DWORD bufferLength(sizeof(rcvChar)); + DWORD receiveCount(0); + + if(!isConnected())return false; + iniProfile.makeFileName(pathFileName); + if(pathFileName.isNull())return false; + FileHandle writeFile(pathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + someTimeInfo.startTime(); + while(true) + { + while(!mReceiveCache.isReady(false)); + if(!mReceiveCache.receive(rcvChar,sizeof(rcvChar),bufferLength))break; + writeFile.write((unsigned char*)rcvChar,bufferLength); + receiveCount+=bufferLength; + if(!isConnected())break; + } + someTimeInfo.endTime(receiveCount); + return true; +} + +bool Socket::send(const char *buffer,DWORD count) +{ + if(!isConnected())return false; + if(!count)return false; + canWrite(); + if(SOCKET_ERROR==::send(mSocket,buffer,count,0))return false; + return true; +} + +bool Socket::send(const char &charData) +{ + if(!isConnected())return false; + canWrite(); + if(SOCKET_ERROR==::send(mSocket,&((char&)charData),sizeof(charData),0))return false; + return true; +} + +bool Socket::send(Block &strings) +{ + for(int index=0;index +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class TimeInfo +{ +public: + TimeInfo(void); + TimeInfo(const TimeInfo &timeInfo); + virtual ~TimeInfo(); + TimeInfo &operator=(const TimeInfo &someTimeInfo); + void startTime(void); + void endTime(DWORD byteCount); + operator String(void)const; +private: + double mSecondsElapsed; + double mBytesPerSecond; + DWORD mBytesReceived; +}; + +inline +TimeInfo::TimeInfo(void) +: mSecondsElapsed(0.00), mBytesPerSecond(0.00), mBytesReceived(0) +{ +} + +inline +TimeInfo::TimeInfo(const TimeInfo &someTimeInfo) +{ + *this=someTimeInfo; +} + +inline +TimeInfo::~TimeInfo() +{ +} + +inline +TimeInfo &TimeInfo::operator=(const TimeInfo &someTimeInfo) +{ + mSecondsElapsed=someTimeInfo.mSecondsElapsed; + mBytesPerSecond=someTimeInfo.mBytesPerSecond; + mBytesReceived=someTimeInfo.mBytesReceived; + return *this; +} + +inline +void TimeInfo::startTime(void) +{ + mSecondsElapsed=(double)::GetTickCount(); + mBytesPerSecond=0; + mBytesReceived=0; +} + +inline +void TimeInfo::endTime(DWORD byteCount) +{ + mBytesReceived=byteCount; + mSecondsElapsed=(double)::GetTickCount()-mSecondsElapsed; + mSecondsElapsed/=1000.00; + if(0.00==mSecondsElapsed)mBytesPerSecond=byteCount; + else mBytesPerSecond=(1.00/mSecondsElapsed)*(double)byteCount; +} + +inline +TimeInfo::operator String(void)const +{ + String stringValue; + + ::sprintf(stringValue,"%ld bytes transferred in %lf seconds. (%lf KBS)",mBytesReceived,mSecondsElapsed,mBytesPerSecond/1000.00); + return stringValue; +} +#endif diff --git a/socket/WSADATA.CPP b/socket/WSADATA.CPP new file mode 100644 index 0000000..54422db --- /dev/null +++ b/socket/WSADATA.CPP @@ -0,0 +1,60 @@ +#include + +WORD WSASystem::smIsInitialized; +WORD WSASystem::smInstanceCount; +WSADATA WSASystem::smWSAData; + +WSASystem::WSASystem(void) +{ + WORD wsaVersion(MAKEWORD(1,1)); + ++smInstanceCount; + if(1==smInstanceCount) + { + ::memset(&smWSAData,0,sizeof(smWSAData)); + if(!(::WSAStartup(wsaVersion,&smWSAData)))smIsInitialized=TRUE; + } +} + +String WSASystem::getLastError(void)const +{ + switch(::WSAGetLastError()) + { + case WSANOTINITIALISED : + return "WSANOTINITIALISED : A successful WSAStartup must occur before using this function."; + case WSAENETDOWN : + return "WSAENETDOWN : The network subsystem has failed. "; + case WSAEFAULT : + return "WSAEFAULT : The buf or from parameters are not part of the user address space, or the fromlen parameter is too small to accommodate the peer address."; + case WSAEINTR : + return "WSAEINTR : The (blocking) call was canceled through WSACancelBlockingCall. "; + case WSAEINPROGRESS : + return "WSAEINPROGRESS : A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function. "; + case WSAEINVAL : + return "WSAEINVAL : The socket has not been bound with bind, or an unknown flag was specified, or MSG_OOB was specified for a socket with SO_OOBINLINE enabled, or (for byte stream style sockets only) len was zero or negative. "; + case WSAENETRESET : + return "WSAENETRESET : The connection has been broken due to the remote host resetting."; + case WSAENOTCONN : + return "WSAENOTCONN : The socket is not connected (connection-oriented sockets only)."; + case WSAENOTSOCK : + return "WSAENOTSOCK : The descriptor is not a socket."; + case WSAEOPNOTSUPP : + return "WSAEOPNOTSUPP : MSG_OOB was specified, but the socket is not stream style such as type SOCK_STREAM, out-of-band data is not supported in the communication domain associated with this socket, or the socket is unidirectional and supports only send operations."; + case WSAESHUTDOWN : + return "WSAESHUTDOWN : The socket has been shut down; it is not possible to recvfrom on a socket after shutdown has been invoked with how set to SD_RECEIVE or SD_BOTH."; + case WSAEWOULDBLOCK : + return "WSAEWOULDBLOCK : The socket is marked as nonblocking and the recvfrom operation would block."; + case WSAEMSGSIZE : + return "WSAEMSGSIZE : The message was too large to fit into the specified buffer and was truncated."; + case WSAECONNABORTED : + return "WSAECONNABORTED : The virtual circuit was terminated due to a time-out or other failure. The application should close the socket as it is no longer usable."; + case WSAETIMEDOUT : + return "WSAETIMEDOUT : The connection has been dropped, because of a network failure or because the system on the other end went down without notice."; + case WSAECONNRESET : + return "The virtual circuit was reset by the remote side executing a “hard” or “abortive” close. The application should close the socket as it is no longer usable. On a UDP datagram socket this error would indicate that a previous send operation resulted in an ICMP \"Port Unreachable\" message."; + case WSAEADDRINUSE : + return "The specified address is already in use. (See the SO_REUSEADDR socket option under setsockopt.)"; + default : + return "WSADATA.CPP: Unknown socket error"; + } +} + diff --git a/socket/WSADATA.HPP b/socket/WSADATA.HPP new file mode 100644 index 0000000..9821712 --- /dev/null +++ b/socket/WSADATA.HPP @@ -0,0 +1,106 @@ +#ifndef _SOCKET_WSADATA_HPP_ +#define _SOCKET_WSADATA_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif + +class WSASystem +{ +public: + WSASystem(void); + WSASystem(const WSASystem &someWSASystem); + WSASystem &operator=(const WSASystem &someWSASystem); + WORD operator==(const WSASystem &someWSASystem); + virtual ~WSASystem(); + operator WSAData&(void); + WORD versionLow(void)const; + WORD versionHigh(void)const; + String description(void)const; + String systemStatus(void)const; + WORD maxSockets(void)const; + WORD isInitialized(void)const; + BOOL cancelBlockingCall(void)const; + BOOL isBlocking(void)const; + String getLastError(void)const; +private: + static WORD smIsInitialized; + static WORD smInstanceCount; + static WSADATA smWSAData; +}; + +inline +WSASystem::WSASystem(const WSASystem &someWSASystem) +{ + *this=someWSASystem; +} + +inline +WSASystem::~WSASystem() +{ + --smInstanceCount; + if(!smInstanceCount&&smIsInitialized){::WSACleanup();smIsInitialized=FALSE;} +} + +inline +WSASystem &WSASystem::operator=(const WSASystem &/*someWSASystem*/) +{ + return *this; +} + +inline +WSASystem::operator WSAData&(void) +{ + return smWSAData; +} + +inline +WORD WSASystem::isInitialized(void)const +{ + return smIsInitialized; +} + +inline +WORD WSASystem::versionLow(void)const +{ + return smWSAData.wVersion; +} + +inline +WORD WSASystem::versionHigh(void)const +{ + return smWSAData.wHighVersion; +} + +inline +String WSASystem::description(void)const +{ + return smWSAData.szDescription; +} + +inline +String WSASystem::systemStatus(void)const +{ + return smWSAData.szSystemStatus; +} + +inline +WORD WSASystem::maxSockets(void)const +{ + return smWSAData.iMaxSockets; +} + +inline +BOOL WSASystem::cancelBlockingCall(void)const +{ + return !::WSACancelBlockingCall(); +} + +inline +BOOL WSASystem::isBlocking(void)const +{ + return ::WSAIsBlocking(); +} +#endif diff --git a/socket/ipmcast.hpp b/socket/ipmcast.hpp new file mode 100644 index 0000000..4c22edc --- /dev/null +++ b/socket/ipmcast.hpp @@ -0,0 +1,82 @@ +#ifndef _SOCKET_IPMULTICAST_HPP_ +#define _SOCKET_IPMULTICAST_HPP_ +#ifndef _SOCKET_SOCKET_HPP_ +#include +#endif +#ifndef _SOCKET_INTERNETADDRESS_HPP_ +#include +#endif + +class IPMReq : private ip_mreq +{ +public: + IPMReq(); + virtual ~IPMReq(); + operator ip_mreq &(void); + InternetAddress multicastAddress(void)const; + void multicastAddress(const InternetAddress &multicastAddress); + InternetAddress localAddress(void)const; + void localAddress(const InternetAddress &localAddress); + static int length(void); + String toString(void)const; +private: +}; + +inline +IPMReq::IPMReq() +{ +} + +inline +IPMReq::~IPMReq() +{ +} + +inline +IPMReq::operator ip_mreq &(void) +{ + return *this; +} + +inline +InternetAddress IPMReq::multicastAddress(void)const +{ + return InternetAddress(ip_mreq::imr_multiaddr); +} + +inline +void IPMReq::multicastAddress(const InternetAddress &multicastAddress) +{ + ip_mreq::imr_multiaddr.S_un.S_un_b.s_b1=multicastAddress.b1(); + ip_mreq::imr_multiaddr.S_un.S_un_b.s_b2=multicastAddress.b2(); + ip_mreq::imr_multiaddr.S_un.S_un_b.s_b3=multicastAddress.b3(); + ip_mreq::imr_multiaddr.S_un.S_un_b.s_b4=multicastAddress.b4(); +} + +inline +InternetAddress IPMReq::localAddress(void)const +{ + return InternetAddress(ip_mreq::imr_interface); +} + +inline +void IPMReq::localAddress(const InternetAddress &localAddress) +{ + ip_mreq::imr_interface.S_un.S_un_b.s_b1=localAddress.b1(); + ip_mreq::imr_interface.S_un.S_un_b.s_b2=localAddress.b2(); + ip_mreq::imr_interface.S_un.S_un_b.s_b3=localAddress.b3(); + ip_mreq::imr_interface.S_un.S_un_b.s_b4=localAddress.b4(); +} + +inline +String IPMReq::toString(void)const +{ + return String("mcast:")+multicastAddress().toString()+String(", local:")+localAddress().toString(); +} + +inline +int IPMReq::length(void) +{ + return sizeof(ip_mreq); +} +#endif \ No newline at end of file diff --git a/socket/sockaddr.hpp b/socket/sockaddr.hpp new file mode 100644 index 0000000..43eefe3 --- /dev/null +++ b/socket/sockaddr.hpp @@ -0,0 +1,105 @@ +#ifndef _SOCKET_SOCKETADDRESS_HPP_ +#define _SOCKET_SOCKETADDRESS_HPP_ +#ifndef _COMMON_WINSOCK_HPP_ +#include +#endif +#ifndef _SOCKET_INTERNETADDRESS_HPP_ +#include +#endif + +class SocketAddress : private sockaddr_in +{ +public: + SocketAddress(); + virtual ~SocketAddress(); + operator sockaddr_in&(void); + short family(void)const; + void family(short family); + unsigned short port(void)const; + void port(unsigned short port); + InternetAddress internetAddress(void)const; + void internetAddress(const InternetAddress &internetAddress); + static int length(void); + String toString(void)const; +private: + void setZero(void); +}; + +inline +SocketAddress::SocketAddress() +{ + setZero(); +} + +inline +SocketAddress::~SocketAddress() +{ +} + +inline +SocketAddress::operator sockaddr_in&(void) +{ + return *this; +} + +inline +short SocketAddress::family(void)const +{ + return sockaddr_in::sin_family; +} + +inline +void SocketAddress::family(short family) +{ + sockaddr_in::sin_family=family; +} + +inline +unsigned short SocketAddress::port(void)const +{ + return sockaddr_in::sin_port; +} + +inline +void SocketAddress::port(unsigned short port) +{ + sockaddr_in::sin_port=port; +} + +inline +InternetAddress SocketAddress::internetAddress(void)const +{ + return InternetAddress(sockaddr_in::sin_addr); +} + +inline +void SocketAddress::internetAddress(const InternetAddress &internetAddress) +{ + sockaddr_in::sin_addr.S_un.S_un_b.s_b1=internetAddress.b1(); + sockaddr_in::sin_addr.S_un.S_un_b.s_b2=internetAddress.b2(); + sockaddr_in::sin_addr.S_un.S_un_b.s_b3=internetAddress.b3(); + sockaddr_in::sin_addr.S_un.S_un_b.s_b4=internetAddress.b4(); +} + +inline +void SocketAddress::setZero(void) +{ + family(0); + port(0); + internetAddress(InternetAddress()); +} + +inline +String SocketAddress::toString(void)const +{ + return internetAddress().toString()+String(":")+String().fromInt(port()); +} + +inline +int SocketAddress::length(void) +{ + return sizeof(sockaddr_in); +} +#endif + + diff --git a/socket/socket.001 b/socket/socket.001 new file mode 100644 index 0000000..30bc619 --- /dev/null +++ b/socket/socket.001 @@ -0,0 +1,170 @@ +# Microsoft Developer Studio Project File - Name="socket" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=socket - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "socket.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "socket.mak" CFG="socket - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "socket - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "socket - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "socket - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mssocket.lib" + +!ENDIF + +# Begin Target + +# Name "socket - Win32 Release" +# Name "socket - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cache.cpp +# End Source File +# Begin Source File + +SOURCE=.\hooker.cpp +# End Source File +# Begin Source File + +SOURCE=.\Hostent.cpp +# End Source File +# Begin Source File + +SOURCE=.\Resolve.cpp +# End Source File +# Begin Source File + +SOURCE=.\Servent.cpp +# End Source File +# Begin Source File + +SOURCE=.\Socket.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Wsadata.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Cache.hpp +# End Source File +# Begin Source File + +SOURCE=.\hooker.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hostent.hpp +# End Source File +# Begin Source File + +SOURCE=.\Inaddr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Intsaddr.hpp +# End Source File +# Begin Source File + +SOURCE=.\procaddr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resolve.hpp +# End Source File +# Begin Source File + +SOURCE=.\Servent.hpp +# End Source File +# Begin Source File + +SOURCE=.\Socket.hpp +# End Source File +# Begin Source File + +SOURCE=.\Timeinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Wsadata.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\procaddr.tpp +# End Source File +# End Target +# End Project diff --git a/socket/socket.dsp b/socket/socket.dsp new file mode 100644 index 0000000..d26a59e --- /dev/null +++ b/socket/socket.dsp @@ -0,0 +1,176 @@ +# Microsoft Developer Studio Project File - Name="socket" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=socket - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "socket.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "socket.mak" CFG="socket - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "socket - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "socket - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "socket - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "socket - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mssocket.lib" + +!ENDIF + +# Begin Target + +# Name "socket - Win32 Release" +# Name "socket - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cache.cpp +# End Source File +# Begin Source File + +SOURCE=.\hooker.cpp +# End Source File +# Begin Source File + +SOURCE=.\Hostent.cpp +# End Source File +# Begin Source File + +SOURCE=.\Resolve.cpp +# End Source File +# Begin Source File + +SOURCE=.\Servent.cpp +# End Source File +# Begin Source File + +SOURCE=.\Socket.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Wsadata.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Cache.hpp +# End Source File +# Begin Source File + +SOURCE=.\hooker.hpp +# End Source File +# Begin Source File + +SOURCE=.\Hostent.hpp +# End Source File +# Begin Source File + +SOURCE=.\Inaddr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Intsaddr.hpp +# End Source File +# Begin Source File + +SOURCE=.\procaddr.hpp +# End Source File +# Begin Source File + +SOURCE=.\Resolve.hpp +# End Source File +# Begin Source File + +SOURCE=.\Servent.hpp +# End Source File +# Begin Source File + +SOURCE=.\Socket.hpp +# End Source File +# Begin Source File + +SOURCE=.\Timeinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Wsadata.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\procaddr.tpp +# End Source File +# End Target +# End Project diff --git a/socket/socket.dsw b/socket/socket.dsw new file mode 100644 index 0000000..c73d83f --- /dev/null +++ b/socket/socket.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "socket"=.\socket.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/socket/socket.mdp b/socket/socket.mdp new file mode 100644 index 0000000..7e6b3f8 Binary files /dev/null and b/socket/socket.mdp differ diff --git a/socket/socket.opt b/socket/socket.opt new file mode 100644 index 0000000..60130f3 Binary files /dev/null and b/socket/socket.opt differ diff --git a/source/ANALYTIC.ZIP b/source/ANALYTIC.ZIP new file mode 100644 index 0000000..0537601 Binary files /dev/null and b/source/ANALYTIC.ZIP differ diff --git a/source/APIPROF.ZIP b/source/APIPROF.ZIP new file mode 100644 index 0000000..92b1baa Binary files /dev/null and b/source/APIPROF.ZIP differ diff --git a/source/APISPY.ZIP b/source/APISPY.ZIP new file mode 100644 index 0000000..f05a90b Binary files /dev/null and b/source/APISPY.ZIP differ diff --git a/source/ARCHIVE.ZIP b/source/ARCHIVE.ZIP new file mode 100644 index 0000000..87cabe9 Binary files /dev/null and b/source/ARCHIVE.ZIP differ diff --git a/source/ATB.ZIP b/source/ATB.ZIP new file mode 100644 index 0000000..a1b910e Binary files /dev/null and b/source/ATB.ZIP differ diff --git a/source/AVIFILE.ZIP b/source/AVIFILE.ZIP new file mode 100644 index 0000000..5ff2ebe Binary files /dev/null and b/source/AVIFILE.ZIP differ diff --git a/source/CHAT.ZIP b/source/CHAT.ZIP new file mode 100644 index 0000000..edbc0d1 Binary files /dev/null and b/source/CHAT.ZIP differ diff --git a/source/CLIENT.ZIP b/source/CLIENT.ZIP new file mode 100644 index 0000000..58c3392 Binary files /dev/null and b/source/CLIENT.ZIP differ diff --git a/source/COM.ZIP b/source/COM.ZIP new file mode 100644 index 0000000..23c8a7a Binary files /dev/null and b/source/COM.ZIP differ diff --git a/source/COMMSRV.ZIP b/source/COMMSRV.ZIP new file mode 100644 index 0000000..a868ffd Binary files /dev/null and b/source/COMMSRV.ZIP differ diff --git a/source/COMTST.ZIP b/source/COMTST.ZIP new file mode 100644 index 0000000..7727b07 Binary files /dev/null and b/source/COMTST.ZIP differ diff --git a/source/COOLBAR.ZIP b/source/COOLBAR.ZIP new file mode 100644 index 0000000..4993203 Binary files /dev/null and b/source/COOLBAR.ZIP differ diff --git a/source/DRIVER.ZIP b/source/DRIVER.ZIP new file mode 100644 index 0000000..c1b7eba Binary files /dev/null and b/source/DRIVER.ZIP differ diff --git a/source/FINGER.ZIP b/source/FINGER.ZIP new file mode 100644 index 0000000..2d6553f Binary files /dev/null and b/source/FINGER.ZIP differ diff --git a/source/FML.ZIP b/source/FML.ZIP new file mode 100644 index 0000000..2e5e5d1 Binary files /dev/null and b/source/FML.ZIP differ diff --git a/source/FTPMAIL.ZIP b/source/FTPMAIL.ZIP new file mode 100644 index 0000000..f8d3ef7 Binary files /dev/null and b/source/FTPMAIL.ZIP differ diff --git a/source/GL.ZIP b/source/GL.ZIP new file mode 100644 index 0000000..7567342 Binary files /dev/null and b/source/GL.ZIP differ diff --git a/source/JAVACLS.ZIP b/source/JAVACLS.ZIP new file mode 100644 index 0000000..86afafc Binary files /dev/null and b/source/JAVACLS.ZIP differ diff --git a/source/LAUNCH.ZIP b/source/LAUNCH.ZIP new file mode 100644 index 0000000..8d55c2e Binary files /dev/null and b/source/LAUNCH.ZIP differ diff --git a/source/LISTEN.ZIP b/source/LISTEN.ZIP new file mode 100644 index 0000000..9999311 Binary files /dev/null and b/source/LISTEN.ZIP differ diff --git a/source/LOGFILE.ZIP b/source/LOGFILE.ZIP new file mode 100644 index 0000000..333f29d Binary files /dev/null and b/source/LOGFILE.ZIP differ diff --git a/source/LOUISE.ZIP b/source/LOUISE.ZIP new file mode 100644 index 0000000..3e52055 Binary files /dev/null and b/source/LOUISE.ZIP differ diff --git a/source/MBL.ZIP b/source/MBL.ZIP new file mode 100644 index 0000000..2c044bd Binary files /dev/null and b/source/MBL.ZIP differ diff --git a/source/MDIFRM.ZIP b/source/MDIFRM.ZIP new file mode 100644 index 0000000..357c16e Binary files /dev/null and b/source/MDIFRM.ZIP differ diff --git a/source/MEMMAP.ZIP b/source/MEMMAP.ZIP new file mode 100644 index 0000000..54b04ba Binary files /dev/null and b/source/MEMMAP.ZIP differ diff --git a/source/PROTO.ZIP b/source/PROTO.ZIP new file mode 100644 index 0000000..6b5e846 Binary files /dev/null and b/source/PROTO.ZIP differ diff --git a/source/SETUP.ZIP b/source/SETUP.ZIP new file mode 100644 index 0000000..9329e01 Binary files /dev/null and b/source/SETUP.ZIP differ diff --git a/source/SIWVID.ZIP b/source/SIWVID.ZIP new file mode 100644 index 0000000..6f09201 Binary files /dev/null and b/source/SIWVID.ZIP differ diff --git a/source/SUBEDIT.ZIP b/source/SUBEDIT.ZIP new file mode 100644 index 0000000..bbc8743 Binary files /dev/null and b/source/SUBEDIT.ZIP differ diff --git a/source/TELNET.ZIP b/source/TELNET.ZIP new file mode 100644 index 0000000..6f1f8ce Binary files /dev/null and b/source/TELNET.ZIP differ diff --git a/source/TERMINAL.ZIP b/source/TERMINAL.ZIP new file mode 100644 index 0000000..031e81a Binary files /dev/null and b/source/TERMINAL.ZIP differ diff --git a/source/TOOLBAR.ZIP b/source/TOOLBAR.ZIP new file mode 100644 index 0000000..911e11c Binary files /dev/null and b/source/TOOLBAR.ZIP differ diff --git a/source/TREAS.ZIP b/source/TREAS.ZIP new file mode 100644 index 0000000..2f7b22d Binary files /dev/null and b/source/TREAS.ZIP differ diff --git a/source/VFAULT.ZIP b/source/VFAULT.ZIP new file mode 100644 index 0000000..5e15682 Binary files /dev/null and b/source/VFAULT.ZIP differ diff --git a/source/VFAULT2.ZIP b/source/VFAULT2.ZIP new file mode 100644 index 0000000..abf5fb9 Binary files /dev/null and b/source/VFAULT2.ZIP differ diff --git a/source/WINCOM.ZIP b/source/WINCOM.ZIP new file mode 100644 index 0000000..a543014 Binary files /dev/null and b/source/WINCOM.ZIP differ diff --git a/source/WINDBG.ZIP b/source/WINDBG.ZIP new file mode 100644 index 0000000..1d1ed9e Binary files /dev/null and b/source/WINDBG.ZIP differ diff --git a/source/asm.zip b/source/asm.zip new file mode 100644 index 0000000..2768e43 Binary files /dev/null and b/source/asm.zip differ diff --git a/source/backup.ZIP b/source/backup.ZIP new file mode 100644 index 0000000..ac68edd Binary files /dev/null and b/source/backup.ZIP differ diff --git a/source/feb2003.ZIP b/source/feb2003.ZIP new file mode 100644 index 0000000..d693dae Binary files /dev/null and b/source/feb2003.ZIP differ diff --git a/splitter/Debug/NewsTree.obj b/splitter/Debug/NewsTree.obj new file mode 100644 index 0000000..25f5116 Binary files /dev/null and b/splitter/Debug/NewsTree.obj differ diff --git a/splitter/Debug/RCa01004 b/splitter/Debug/RCa01004 new file mode 100644 index 0000000..4e64ec1 Binary files /dev/null and b/splitter/Debug/RCa01004 differ diff --git a/splitter/Debug/SplitterWnd.obj b/splitter/Debug/SplitterWnd.obj new file mode 100644 index 0000000..c36175d Binary files /dev/null and b/splitter/Debug/SplitterWnd.obj differ diff --git a/splitter/Debug/main.obj b/splitter/Debug/main.obj new file mode 100644 index 0000000..8500650 Binary files /dev/null and b/splitter/Debug/main.obj differ diff --git a/splitter/Debug/mainfrm.obj b/splitter/Debug/mainfrm.obj new file mode 100644 index 0000000..ca8af65 Binary files /dev/null and b/splitter/Debug/mainfrm.obj differ diff --git a/splitter/Debug/splitter.exe b/splitter/Debug/splitter.exe new file mode 100644 index 0000000..983bff9 Binary files /dev/null and b/splitter/Debug/splitter.exe differ diff --git a/splitter/Debug/splitter.exp b/splitter/Debug/splitter.exp new file mode 100644 index 0000000..ed117c4 Binary files /dev/null and b/splitter/Debug/splitter.exp differ diff --git a/splitter/Debug/splitter.lib b/splitter/Debug/splitter.lib new file mode 100644 index 0000000..4499f12 Binary files /dev/null and b/splitter/Debug/splitter.lib differ diff --git a/splitter/Debug/splitter.res b/splitter/Debug/splitter.res new file mode 100644 index 0000000..0da448a Binary files /dev/null and b/splitter/Debug/splitter.res differ diff --git a/splitter/Debug/splitterlib.lib b/splitter/Debug/splitterlib.lib new file mode 100644 index 0000000..e637a6b Binary files /dev/null and b/splitter/Debug/splitterlib.lib differ diff --git a/splitter/Debug/splittertest.exe b/splitter/Debug/splittertest.exe new file mode 100644 index 0000000..fbd7b7a Binary files /dev/null and b/splitter/Debug/splittertest.exe differ diff --git a/splitter/Debug/splittertest.exp b/splitter/Debug/splittertest.exp new file mode 100644 index 0000000..a69f8d5 Binary files /dev/null and b/splitter/Debug/splittertest.exp differ diff --git a/splitter/Debug/splittertest.ilk b/splitter/Debug/splittertest.ilk new file mode 100644 index 0000000..1c25e7a Binary files /dev/null and b/splitter/Debug/splittertest.ilk differ diff --git a/splitter/Debug/splittertest.lib b/splitter/Debug/splittertest.lib new file mode 100644 index 0000000..cab8acb Binary files /dev/null and b/splitter/Debug/splittertest.lib differ diff --git a/splitter/Debug/splittertest.pdb b/splitter/Debug/splittertest.pdb new file mode 100644 index 0000000..b4918e5 Binary files /dev/null and b/splitter/Debug/splittertest.pdb differ diff --git a/splitter/Debug/vc60.idb b/splitter/Debug/vc60.idb new file mode 100644 index 0000000..0ee078b Binary files /dev/null and b/splitter/Debug/vc60.idb differ diff --git a/splitter/Debug/vc60.pdb b/splitter/Debug/vc60.pdb new file mode 100644 index 0000000..c9b6ccc Binary files /dev/null and b/splitter/Debug/vc60.pdb differ diff --git a/splitter/NEWSSRC b/splitter/NEWSSRC new file mode 100644 index 0000000..0aa210a --- /dev/null +++ b/splitter/NEWSSRC @@ -0,0 +1,26779 @@ +a.bsu.programming +a.bsu.religion +a.bsu.talk +aaa.inu-chan +ab.arnet +ab.general +ab.jobs +ab.politics +abg.acf-jugend +abg.acf-termine +abg.acf-vor +abg.amiga +abg.atari +abg.biete +abg.dfue +abg.diskussion +abg.gewerblich +abg.gruesse +abg.intern +abg.kultur +abg.mampf +abg.member +abg.ms-dos +abg.suche +abg.test +abg.tip-info +abg.unix +abg.uucp +abg.uucp.sta +abg.uucp.waffle +abg.witziges +acadia.bulletin-board +acadia.chat +acs.nntp +acs.osu-mentor +acs.test +adass.archiving +adass.fits.oirfits +ahn.config +ahn.general +ahn.tech +ahn.tech.linux +ahn.test +airmail.analog +airmail.announce +airmail.flame +airmail.general +airmail.isdn +airmail.support +airnews.alt.announce +airnews.alt.binaries.fan.letterman +airnews.alt.company.wsps +airnews.alt.culture.etiquette +airnews.alt.paranoia.black.helicopters +airnews.alt.travel.air.airports.bicker +airnews.announce +airnews.flame +airnews.general +airnews.support +airnews.test +ak.admin +ak.bushnet.thing +ak.config +ak.test +akr.biz +akr.freenet +akr.internet +akr.jobs +alabama.announce +alabama.birmingham.forsale +alabama.birmingham.general +alabama.birmingham.jobs +alabama.birmingham.radio.amateur +alabama.birmingham.sports +alabama.birmingham.students +alabama.config +alabama.decatur.general +alabama.education +alabama.general +alabama.jobs +alabama.mobile.general +alabama.politics +alabama.shoals.general +alabama.sports.alabama +alabama.sports.auburn +alabama.sports.misc +alabama.test +alabama.tuscaloosa.general +alc.alc.bier.pils +alc.alc.c2h5oh +alc.archive +alc.general +alc.market +alc.stat +alc.suicide +alc.test +alc.tools.clearcase +alc.tools.misc +alc.tools.ovw +alt.0d +alt.12hr +alt.1d +alt.23is.strange +alt.2600 +alt.2600.414 +alt.2600.cardz +alt.2600.codez +alt.2600.crackz +alt.2600.debate +alt.2600.hackerz +alt.2600.hope.announce +alt.2600.hope.d +alt.2600.hope.tech +alt.2600.moderated +alt.2600.phreakz +alt.2600.programz +alt.2600.warez +alt.2600d +alt.2600hz +alt.2d +alt.2eggs.sausage.beans.tomatoes.2toast.largetea.cheerslove +alt.3d +alt.3d.misc +alt.3d.rhino +alt.3d.sirds +alt.3d.studio +alt.3djam-tv +alt.aac +alt.aapg.announce +alt.aapg.general +alt.aber +alt.ablecommerce +alt.abortion +alt.abortion.inequity +alt.abuse +alt.abuse-recovery +alt.abuse.offender +alt.abuse.offender.recovery +alt.abuse.recovery +alt.abuse.transcendence +alt.accounting +alt.acme.exploding.newsgroup +alt.acting +alt.activism +alt.activism.children +alt.activism.community +alt.activism.d +alt.activism.death-penalty +alt.activism.drug-war.mj-millennium +alt.activism.latino-youth +alt.activism.peacefire +alt.activism.student +alt.activism.youth-rights +alt.actor.dustin-hoffman +alt.adam-hotz +alt.addell.news +alt.adjective +alt.adjective.noun.verb.verb +alt.adjective.noun.verb.verb.verb +alt.adopt.latvian.babies +alt.adoption +alt.adoption.adoptive.parenting +alt.adoption.agency +alt.adoption.agency.losninos +alt.adoption.issues +alt.adoption.korean +alt.adoption.searching +alt.advocacy.pico +alt.aeffle +alt.aeffle.und +alt.aeffle.und.pferdle +alt.agriculture +alt.agriculture.beef +alt.agriculture.commodities +alt.agriculture.dean-stark +alt.agriculture.fruit +alt.agriculture.misc +alt.agriculture.technology +alt.ahbqs.com.sucks +alt.airbrush.art +alt.airline.schedules +alt.airports +alt.airstream +alt.airwarrior.squads.black-roses +alt.alala +alt.alcohol +alt.aldus.freehand +alt.aldus.misc +alt.aldus.pagemaker +alt.algebra.help +alt.algonetics +alt.alien.research +alt.alien.vampire.flonk.flonk.flonk +alt.alien.visitors +alt.alien.wanderers +alt.aliens.they-are-here +alt.allsysop +alt.alt +alt.alt.alt.alt.alt +alt.alt.life.the-universe.and-everything +alt.alt.music.g-fibbers +alt.alt.test +alt.alumni.bronx-science +alt.amanda.g.is.a.superstar +alt.amateur-comp +alt.amazon-women +alt.amazon-women.admirers +alt.america +alt.america-online.wurk +alt.america.online +alt.american.automobile.breakdown.breakdown.breakdown +alt.american.caribbean +alt.ameritech.jim.bayless.must.perish +alt.amiga.demos +alt.amiga.slip +alt.ammonia.refrigeration +alt.anagrams +alt.anarchism +alt.anarchy.rules +alt.angels +alt.anger +alt.angst +alt.angst.xibo.sex +alt.animals +alt.animals.badgers +alt.animals.bears +alt.animals.breeders.rabbits +alt.animals.dogs.collies.open-forum +alt.animals.dolphins +alt.animals.ethics.vegetarian +alt.animals.felines +alt.animals.felines.diseases +alt.animals.foxes +alt.animals.furtrapping +alt.animals.giraffes +alt.animals.horses.breeding +alt.animals.horses.icelandic +alt.animals.humans.dishonesty.ubiquitous +alt.animals.lampreys +alt.animals.mules +alt.animals.otters +alt.animals.pandas +alt.animals.ponies +alt.animals.raccoons +alt.animals.whales +alt.animation.mike-judge +alt.animation.nick-park +alt.animation.spumco +alt.animation.warner-bros +alt.anime.shoujo +alt.anonymous +alt.anonymous.domains +alt.anonymous.messages +alt.anonymous.messages.luciferslegion +alt.anonymous.messages.skuznet +alt.answers +alt.anthrax.binaries +alt.anthrax.binaries.pictures +alt.anthrax.chat +alt.anthrax.comp +alt.antichristnet +alt.antiques.delaware.joe +alt.anybody +alt.anything +alt.aol-sucks +alt.aol-sucks.moderated +alt.aol-sucks.rejects +alt.aol.overbilling +alt.aol.rejects +alt.aol.tricks +alt.apocalypse +alt.appalachian +alt.april +alt.april.fool +alt.aquaria +alt.aquaria.killies +alt.archaeology +alt.archeology +alt.archery +alt.archery.traditional +alt.archimedes.bugs +alt.architecture +alt.architecture.alternative +alt.architecture.int-design +alt.argen +alt.argus +alt.armourers +alt.aromatherapy +alt.arriflex.sucks +alt.art.bodypainting +alt.art.caricature +alt.art.colleges +alt.art.hirez +alt.art.illustration +alt.art.marketplace +alt.art.scene +alt.art.video +alt.art.virtual-beret +alt.artcom +alt.artcrime +alt.arthritis.spondy.risg.info +alt.arts.anthro +alt.arts.ballet +alt.arts.ballet-dance.uk +alt.arts.bujinkan +alt.arts.contortion +alt.arts.murky-pond +alt.arts.nomad +alt.arts.origami +alt.arts.poetry.comments +alt.arts.storytelling +alt.ascii-art +alt.ascii-art.animation +alt.asian-movies +alt.asian.american.chat +alt.assassination.jfk +alt.assassination.jfk.uncensored +alt.asshole.reinhold.aman +alt.astrology +alt.astrology.asian +alt.astrology.marketplace +alt.astrology.metapsych +alt.astrology.scam +alt.atari-jaguar.discussion +alt.atari.2600vcs +alt.atheism +alt.atheism.moderated +alt.atheism.satire +alt.athiesm +alt.atlanta +alt.august +alt.auletta.auletta +alt.aus.bonehead.dawn-mcgatney.bloody.convict.bitch +alt.aus.bonehead.jimo-ngygook.bulletstopper.poofter +alt.aus.bonehead.joey-thoi +alt.authorware +alt.auto.mercedes +alt.auto.parts.wanted +alt.autographs.transactions +alt.autos +alt.autos.antique +alt.autos.audi +alt.autos.bmw +alt.autos.camaro.firebird +alt.autos.classic-trucks +alt.autos.corvette +alt.autos.dean-stark +alt.autos.dodge.trucks +alt.autos.dsm +alt.autos.ferrari +alt.autos.ford +alt.autos.ford.festiva +alt.autos.ford.flathead +alt.autos.gm +alt.autos.gm.monza-hspecial +alt.autos.grand-national +alt.autos.grand.national +alt.autos.isuzu +alt.autos.italian +alt.autos.karting +alt.autos.kitcars +alt.autos.macho-trucks +alt.autos.mercury.cougar +alt.autos.microcars +alt.autos.mini +alt.autos.mitsubishi +alt.autos.nissan +alt.autos.nissan.z-car +alt.autos.peugeot.sucks +alt.autos.pontiac +alt.autos.porsche +alt.autos.porsche928 +alt.autos.rod-n-custom +alt.autos.saab +alt.autos.sport.nhra +alt.autos.sport.rally +alt.autos.studebaker +alt.autos.subaru +alt.autos.toyota +alt.autos.volvo +alt.aviation.fun +alt.aviation.safety +alt.awe32.files +alt.b.moylan.needle.prick.the.bug-fucker +alt.babylon5.uk +alt.bacchus +alt.backrubs +alt.bad.clams +alt.bainaries.games.encrypted +alt.bainaries.pictures.babies +alt.bainaries.pictures.black.erotic.females +alt.bainaries.pictures.boys.barefoot +alt.bainaries.pictures.cemetaries +alt.bainaries.pictures.child.erotica.female +alt.bainaries.pictures.child.erotica.male +alt.bainaries.pictures.comix +alt.bainaries.pictures.erotica.amateur.female +alt.bainaries.pictures.erotica.amateur.male +alt.bainaries.pictures.erotica.ani +alt.bainaries.pictures.erotica.animals +alt.bainaries.pictures.erotica.anime +alt.bainaries.pictures.erotica.art.pin-up +alt.bainaries.pictures.erotica.asian-indian +alt.bainaries.pictures.erotica.asian.male +alt.bainaries.pictures.erotica.autos +alt.bainaries.pictures.erotica.babies +alt.bainaries.pictures.erotica.balls +alt.bainaries.pictures.erotica.bears +alt.bainaries.pictures.erotica.bestiality +alt.bainaries.pictures.erotica.bestiality.hamster.duct-tape +alt.bainaries.pictures.erotica.big-folks +alt.bainaries.pictures.erotica.black.female +alt.bainaries.pictures.erotica.black.male +alt.bainaries.pictures.erotica.blondes +alt.bainaries.pictures.erotica.breasts +alt.bainaries.pictures.erotica.butts +alt.bainaries.pictures.erotica.cartoons +alt.bainaries.pictures.erotica.cheerleaders +alt.bainaries.pictures.erotica.child +alt.bainaries.pictures.erotica.child.female +alt.bainaries.pictures.erotica.child.male +alt.bainaries.pictures.erotica.children +alt.bainaries.pictures.erotica.close-up +alt.bainaries.pictures.erotica.d +alt.bainaries.pictures.erotica.d.moderated +alt.bainaries.pictures.erotica.denise-lester +alt.bainaries.pictures.erotica.disney +alt.bainaries.pictures.erotica.empty-nest +alt.bainaries.pictures.erotica.facials +alt.bainaries.pictures.erotica.female +alt.bainaries.pictures.erotica.female.anal +alt.bainaries.pictures.erotica.fetish +alt.bainaries.pictures.erotica.fetish.barbie +alt.bainaries.pictures.erotica.fetish.diapers +alt.bainaries.pictures.erotica.fetish.feet +alt.bainaries.pictures.erotica.fetish.hair +alt.bainaries.pictures.erotica.fetish.latex +alt.bainaries.pictures.erotica.fetish.leather +alt.bainaries.pictures.erotica.furry +alt.bainaries.pictures.erotica.gaymen +alt.bainaries.pictures.erotica.groupsex +alt.bainaries.pictures.erotica.gymnast-girls +alt.bainaries.pictures.erotica.high-heels +alt.bainaries.pictures.erotica.hornyrob +alt.bainaries.pictures.erotica.indian-asian +alt.bainaries.pictures.erotica.interracial +alt.bainaries.pictures.erotica.istar.diapers +alt.bainaries.pictures.erotica.koo.sisters +alt.bainaries.pictures.erotica.kwakiutl +alt.bainaries.pictures.erotica.latimo +alt.bainaries.pictures.erotica.latina +alt.bainaries.pictures.erotica.latino +alt.bainaries.pictures.erotica.lesbians +alt.bainaries.pictures.erotica.lolita +alt.bainaries.pictures.erotica.male +alt.bainaries.pictures.erotica.male.chubby +alt.bainaries.pictures.erotica.marcusvilliers +alt.bainaries.pictures.erotica.mardi-gres +alt.bainaries.pictures.erotica.midgets +alt.bainaries.pictures.erotica.moderated +alt.bainaries.pictures.erotica.oral +alt.bainaries.pictures.erotica.oriental +alt.bainaries.pictures.erotica.orientals +alt.bainaries.pictures.erotica.panties +alt.bainaries.pictures.erotica.plushies +alt.bainaries.pictures.erotica.pornstar +alt.bainaries.pictures.erotica.pornstars +alt.bainaries.pictures.erotica.pre-teen +alt.bainaries.pictures.erotica.redheads +alt.bainaries.pictures.erotica.scanmater +alt.bainaries.pictures.erotica.schoolgirls +alt.bainaries.pictures.erotica.spanking +alt.bainaries.pictures.erotica.spatch +alt.bainaries.pictures.erotica.tasteless +alt.bainaries.pictures.erotica.teen +alt.bainaries.pictures.erotica.teen.d +alt.bainaries.pictures.erotica.teen.female +alt.bainaries.pictures.erotica.teens +alt.bainaries.pictures.erotica.uniform +alt.bainaries.pictures.fine-art.d +alt.bainaries.pictures.fine-art.digitized +alt.bainaries.pictures.fine-art.graphics +alt.bainaries.pictures.fine-art.misc +alt.bainaries.pictures.fractals +alt.bainaries.pictures.furniture +alt.bainaries.pictures.furry +alt.bainaries.pictures.girlfriend +alt.bainaries.pictures.girlfriends +alt.bainaries.pictures.groupsex +alt.bainaries.pictures.horny.nurses +alt.bainaries.pictures.leek +alt.bainaries.pictures.lesbians +alt.bainaries.pictures.lingerie +alt.bainaries.pictures.lingerie.bigbutts +alt.bainaries.pictures.lolita.fucking +alt.bainaries.pictures.lolita.misc +alt.bainaries.pictures.misc +alt.bainaries.pictures.misc.d +alt.bainaries.pictures.nude.celebrities +alt.bainaries.pictures.nudism +alt.bainaries.pictures.nudism.celebrities +alt.bainaries.pictures.nylons +alt.bainaries.pictures.pantyhouse +alt.bainaries.pictures.personal +alt.bainaries.pictures.photo-modeling +alt.bainaries.pictures.sex +alt.bainaries.pictures.sex.fetish +alt.bainaries.pictures.sex.fetish.fish +alt.bainaries.pictures.supe +alt.bainaries.pictures.supermodels +alt.bainaries.pictures.supermodels.kate-moss +alt.bainaries.pictures.tasteless +alt.bainaries.pictures.teen-idols +alt.bainaries.pictures.teen-starlets +alt.bainaries.pictures.tools +alt.bainaries.pictures.utilities +alt.bainaries.pictures.vehicles +alt.bainaries.pictures.victoria.secret +alt.bainaries.pictures.voyeurism +alt.baldspot +alt.baldurs-gate +alt.balloon.pop.pop.pop +alt.banjo +alt.banjo.clawhammer +alt.banjo.minstrel +alt.barefoot +alt.barney.dinosaur.die.die.die +alt.barter +alt.base-jumping.sheep.bounce.bounce.bounce +alt.basement.graveyard +alt.bastard.strayhorn +alt.bathroom +alt.bbc.the_net +alt.bbs +alt.bbs.ads +alt.bbs.allsysop +alt.bbs.allsysup +alt.bbs.amiga.cnet +alt.bbs.amiga.trion +alt.bbs.beeline +alt.bbs.citadel +alt.bbs.citadel.prism +alt.bbs.doors +alt.bbs.doors.binaries +alt.bbs.doors.lord +alt.bbs.doors.lord.binaries +alt.bbs.excalibur +alt.bbs.first-class +alt.bbs.gigo-gateway +alt.bbs.iniquity +alt.bbs.internet +alt.bbs.jds +alt.bbs.lists +alt.bbs.lists.d +alt.bbs.majorbbs +alt.bbs.maxs +alt.bbs.metal +alt.bbs.omnibbs +alt.bbs.pcboard +alt.bbs.pcbuucp +alt.bbs.powerboard +alt.bbs.proboard +alt.bbs.public-address +alt.bbs.ra +alt.bbs.renegade +alt.bbs.rip +alt.bbs.searchlight +alt.bbs.telefinder +alt.bbs.tribbs +alt.bbs.unixbbs +alt.bbs.uupcb +alt.bbs.waffle +alt.bbs.watergate +alt.bbs.wildcat +alt.bbs.wildcat.wccode +alt.bbs.wwiv +alt.beadworld +alt.beer +alt.beer.alt +alt.beer.breweriana +alt.beer.like-molson-eh +alt.beograd +alt.best.of.internet +alt.bestjobsusa +alt.bestjobsusa.computer +alt.bestjobsusa.computer.jobs +alt.bible +alt.bible-errancy +alt.bible.errancy +alt.bible.memorize +alt.bible.prophecy +alt.bible.rapture.mod +alt.bidon +alt.bigfoot +alt.bigfoot.research +alt.bikermice +alt.bill-gates.kind.benificent.loving.big-brother +alt.binaires.games.squaresoft +alt.binaires.pictures.anime +alt.binaires.pictures.erotica.anime +alt.binaires.pictures.erotica.teen +alt.binaires.pictures.monsters +alt.binaries +alt.binaries.3d.bryce +alt.binaries.3d.lightwave +alt.binaries.3d.truespace +alt.binaries.3dstudio +alt.binaries.activism.militia +alt.binaries.allmanbrothers +alt.binaries.andrew.lloyd-webber +alt.binaries.appalachian +alt.binaries.applications.mac +alt.binaries.atari +alt.binaries.atari.cancelbots +alt.binaries.atari.d +alt.binaries.atari.dead +alt.binaries.autographs +alt.binaries.band.in.a.box +alt.binaries.bbs +alt.binaries.bbs.doors +alt.binaries.bbs.pcboard +alt.binaries.bbs.renegade +alt.binaries.butthedd +alt.binaries.calc-ti +alt.binaries.cancelbots +alt.binaries.cd.image +alt.binaries.cd.image.discussion.tools +alt.binaries.cd.image.other +alt.binaries.cd.image.parts +alt.binaries.cd.image.tools.d +alt.binaries.clip-art +alt.binaries.comp +alt.binaries.comp-graphics +alt.binaries.comp.atari8bit +alt.binaries.comp.databases.omnis +alt.binaries.cores +alt.binaries.cracked +alt.binaries.cracks +alt.binaries.cracks.encrypted +alt.binaries.cracks.phrozen-crew +alt.binaries.crafts.pictures +alt.binaries.custard +alt.binaries.dawsons-creek +alt.binaries.demo-scene.ibm-pc +alt.binaries.descent +alt.binaries.dominion +alt.binaries.dominion.abuse +alt.binaries.dominion.bad.serial.nums +alt.binaries.dominion.bugger +alt.binaries.dominion.bugger.snot +alt.binaries.dominion.bugger.snot.slime +alt.binaries.dominion.bugger.snot.slime.ball +alt.binaries.dominion.bugger.snot.slime.ball.dominion +alt.binaries.dominion.cabal +alt.binaries.dominion.classact.kissass.join +alt.binaries.dominion.cracks +alt.binaries.dominion.dads.account +alt.binaries.dominion.dads.computer +alt.binaries.dominion.discussion +alt.binaries.dominion.dominoes.pizza +alt.binaries.dominion.dongles +alt.binaries.dominion.ego-strokes +alt.binaries.dominion.erotica.female +alt.binaries.dominion.erotica.male +alt.binaries.dominion.erotica.mydick.ishard +alt.binaries.dominion.freeware +alt.binaries.dominion.games +alt.binaries.dominion.mail +alt.binaries.dominion.moms.account +alt.binaries.dominion.moms.computer +alt.binaries.dominion.mydick.ishard +alt.binaries.dominion.powerno1 +alt.binaries.dominion.request +alt.binaries.dominion.serial-nums +alt.binaries.dominion.shareware +alt.binaries.dominion.silly-group +alt.binaries.dominion.slackware +alt.binaries.dominion.spam-moderated +alt.binaries.dominion.support +alt.binaries.dominion.traders +alt.binaries.dominion.tripp +alt.binaries.dominion.troll +alt.binaries.dominion.warez +alt.binaries.dominion.warez.decrypted +alt.binaries.dominion.warez.in.here +alt.binaries.dominion.with.fries.on.the.side +alt.binaries.doom +alt.binaries.dragonz +alt.binaries.dragonz.elusive +alt.binaries.dragonz.ephemeral +alt.binaries.drwho +alt.binaries.drwho.pictures +alt.binaries.electric-veh +alt.binaries.emulator +alt.binaries.emulators +alt.binaries.emulators.amiga +alt.binaries.emulators.cbm +alt.binaries.emulators.gameboy +alt.binaries.emulators.misc +alt.binaries.emulators.nintendo +alt.binaries.emulators.nintendo-64 +alt.binaries.emulators.nintendo.d +alt.binaries.emulators.sega +alt.binaries.erotic.children +alt.binaries.erotica +alt.binaries.erotica.beanie-babies +alt.binaries.erotica.breasts +alt.binaries.erotica.butts +alt.binaries.erotica.dicks +alt.binaries.erotica.duff +alt.binaries.erotica.female.plumpers +alt.binaries.erotica.fetish +alt.binaries.erotica.fetish.wet-and-messy +alt.binaries.erotica.fettish +alt.binaries.erotica.pornstar +alt.binaries.erotica.sex.in.the.morning +alt.binaries.erotica.teen.female.nonude +alt.binaries.faces.thomas-nunn +alt.binaries.fashion.magazines +alt.binaries.fetish.scat +alt.binaries.fitness.centerfolds +alt.binaries.fonts +alt.binaries.freemasonry +alt.binaries.fukengruven +alt.binaries.fz +alt.binaries.games +alt.binaries.games-sports +alt.binaries.games.anime +alt.binaries.games.aquazone +alt.binaries.games.battlezone +alt.binaries.games.civ2 +alt.binaries.games.command-n-conq +alt.binaries.games.discussion +alt.binaries.games.empire-deluxe +alt.binaries.games.encrypted +alt.binaries.games.golf +alt.binaries.games.kidstuff +alt.binaries.games.lucas-arts +alt.binaries.games.moo2 +alt.binaries.games.quake +alt.binaries.games.squaresoft +alt.binaries.games.worms +alt.binaries.gdead +alt.binaries.gothic +alt.binaries.great.ass.paulina +alt.binaries.hacking.utilities +alt.binaries.hebrew +alt.binaries.hebrew.fonts +alt.binaries.hebrew.mac +alt.binaries.heretic +alt.binaries.howard-stern +alt.binaries.humor.skewed +alt.binaries.images +alt.binaries.images.afos-fans +alt.binaries.images.afos.fans +alt.binaries.images.fun +alt.binaries.images.underwater +alt.binaries.joker +alt.binaries.karaoke +alt.binaries.lingerie +alt.binaries.lucas-arts +alt.binaries.mac +alt.binaries.mac.applications +alt.binaries.mac.applications.retro +alt.binaries.mac.cd-images +alt.binaries.mac.fonts +alt.binaries.mac.games +alt.binaries.mac.games.adult +alt.binaries.mac.hebrew +alt.binaries.misc +alt.binaries.missing-adults +alt.binaries.missing-kids +alt.binaries.models +alt.binaries.models.petite +alt.binaries.models.scale +alt.binaries.moesart2000 +alt.binaries.mp3.bootlegs +alt.binaries.mp3.zappa +alt.binaries.mtv.animation +alt.binaries.multimedia +alt.binaries.multimedia.3-stooges +alt.binaries.multimedia.babylon5 +alt.binaries.multimedia.boys +alt.binaries.multimedia.d +alt.binaries.multimedia.disney +alt.binaries.multimedia.erotica +alt.binaries.multimedia.erotica.d +alt.binaries.multimedia.erotica.lesbians +alt.binaries.multimedia.erotica.tickling +alt.binaries.multimedia.flonk +alt.binaries.multimedia.help +alt.binaries.multimedia.horror +alt.binaries.multimedia.rap +alt.binaries.multimedia.the-bundys +alt.binaries.multimedia.utilities +alt.binaries.multimedia.xena-herc +alt.binaries.music +alt.binaries.music.faith.and.wisdom +alt.binaries.music.makers.samples +alt.binaries.music.mike-keneally +alt.binaries.music.santangelo +alt.binaries.music.steve-vai +alt.binaries.music.the-doors +alt.binaries.music.the-doors.d +alt.binaries.natnl-secrets +alt.binaries.nospam.analfem +alt.binaries.nospam.breasts.natural +alt.binaries.nospam.cc +alt.binaries.nospam.cheerleaders +alt.binaries.nospam.denim +alt.binaries.nospam.denim.shorts +alt.binaries.nospam.female.bodyhair +alt.binaries.nospam.female.forearm-hair +alt.binaries.nospam.julia-hayes +alt.binaries.nospam.multimedia.erotica +alt.binaries.nospam.plumpers +alt.binaries.nospam.sappho +alt.binaries.nospam.teenfeem.repost +alt.binaries.nospam.teenfem +alt.binaries.nospam.teenfem.d +alt.binaries.nospam.teenfem.nonude +alt.binaries.nospam.teenfem.repost +alt.binaries.nospam.teenfem.reposts +alt.binaries.nospam.toons +alt.binaries.nude +alt.binaries.nude.celebrities +alt.binaries.nude.celebrities.female +alt.binaries.nude.celebrities.male +alt.binaries.nude.celebrities.male.moderated +alt.binaries.nudism +alt.binaries.paxer +alt.binaries.pearl-jam +alt.binaries.phish +alt.binaries.phonecards +alt.binaries.photography.glamour +alt.binaries.photos.nude-art +alt.binaries.photos.nude-art.moderated +alt.binaries.pics.kodomos.mankos.musyuuseis +alt.binaries.pictures +alt.binaries.pictures.12hr +alt.binaries.pictures.abba +alt.binaries.pictures.alley-baggett +alt.binaries.pictures.animals +alt.binaries.pictures.animated.gifs +alt.binaries.pictures.animations +alt.binaries.pictures.anime +alt.binaries.pictures.art.bodyart +alt.binaries.pictures.artpics +alt.binaries.pictures.arts.bodyart +alt.binaries.pictures.ascii +alt.binaries.pictures.asparagus +alt.binaries.pictures.astro +alt.binaries.pictures.autos +alt.binaries.pictures.aviation +alt.binaries.pictures.bigbutts +alt.binaries.pictures.bikini.central +alt.binaries.pictures.bisexuals +alt.binaries.pictures.black.erotic.females +alt.binaries.pictures.bluebird +alt.binaries.pictures.bodyart +alt.binaries.pictures.bondage +alt.binaries.pictures.boys +alt.binaries.pictures.boys.barefoot +alt.binaries.pictures.boys.d +alt.binaries.pictures.boys.retromod +alt.binaries.pictures.bras +alt.binaries.pictures.candid.beach +alt.binaries.pictures.cartoons +alt.binaries.pictures.cartoons.cancel +alt.binaries.pictures.cd-covers +alt.binaries.pictures.celebrities +alt.binaries.pictures.celebrities.portraits.large +alt.binaries.pictures.cemetaries +alt.binaries.pictures.centerfolds.playboy +alt.binaries.pictures.cheerleaders.professional +alt.binaries.pictures.child.erotica.female +alt.binaries.pictures.child.erotica.male +alt.binaries.pictures.children +alt.binaries.pictures.chimera +alt.binaries.pictures.civil-war.usa +alt.binaries.pictures.cocks +alt.binaries.pictures.comics +alt.binaries.pictures.cops +alt.binaries.pictures.cori-nadine +alt.binaries.pictures.d +alt.binaries.pictures.dark-fantasy +alt.binaries.pictures.disabled-dev +alt.binaries.pictures.disabled-devo +alt.binaries.pictures.diva +alt.binaries.pictures.dorks +alt.binaries.pictures.drag-racing +alt.binaries.pictures.erotic.animated.gifs +alt.binaries.pictures.erotic.anime +alt.binaries.pictures.erotic.centerfolds +alt.binaries.pictures.erotic.cowgirls +alt.binaries.pictures.erotica +alt.binaries.pictures.erotica.admiralkrag +alt.binaries.pictures.erotica.als +alt.binaries.pictures.erotica.amateur +alt.binaries.pictures.erotica.amateur-action.gifs +alt.binaries.pictures.erotica.amateur.d +alt.binaries.pictures.erotica.amateur.facials +alt.binaries.pictures.erotica.amateur.female +alt.binaries.pictures.erotica.amateur.male +alt.binaries.pictures.erotica.ani +alt.binaries.pictures.erotica.animal +alt.binaries.pictures.erotica.animals +alt.binaries.pictures.erotica.anime +alt.binaries.pictures.erotica.anna +alt.binaries.pictures.erotica.art.pin-up +alt.binaries.pictures.erotica.asian +alt.binaries.pictures.erotica.asian-indian +alt.binaries.pictures.erotica.asian.male +alt.binaries.pictures.erotica.australians.dropbears +alt.binaries.pictures.erotica.autos +alt.binaries.pictures.erotica.babies +alt.binaries.pictures.erotica.balck.male +alt.binaries.pictures.erotica.balls +alt.binaries.pictures.erotica.barefoot +alt.binaries.pictures.erotica.bears +alt.binaries.pictures.erotica.bears.moderated +alt.binaries.pictures.erotica.bestiality +alt.binaries.pictures.erotica.bestiality.hamster.duct-tape +alt.binaries.pictures.erotica.betharnold +alt.binaries.pictures.erotica.big-folks +alt.binaries.pictures.erotica.biker-chicks +alt.binaries.pictures.erotica.black +alt.binaries.pictures.erotica.black.female +alt.binaries.pictures.erotica.black.females +alt.binaries.pictures.erotica.black.male +alt.binaries.pictures.erotica.black.male.feet +alt.binaries.pictures.erotica.blondes +alt.binaries.pictures.erotica.bob.houston +alt.binaries.pictures.erotica.bondage +alt.binaries.pictures.erotica.bondage.male +alt.binaries.pictures.erotica.bondage.moderated +alt.binaries.pictures.erotica.bondes +alt.binaries.pictures.erotica.boys +alt.binaries.pictures.erotica.breasts +alt.binaries.pictures.erotica.breasts.natural +alt.binaries.pictures.erotica.breasts.saggy +alt.binaries.pictures.erotica.breasts.small +alt.binaries.pictures.erotica.brunette +alt.binaries.pictures.erotica.butts +alt.binaries.pictures.erotica.cancel +alt.binaries.pictures.erotica.cartoons +alt.binaries.pictures.erotica.cartoons.moderated +alt.binaries.pictures.erotica.centerfolds +alt.binaries.pictures.erotica.cheerleaders +alt.binaries.pictures.erotica.child +alt.binaries.pictures.erotica.child.female +alt.binaries.pictures.erotica.child.male +alt.binaries.pictures.erotica.children +alt.binaries.pictures.erotica.close-up +alt.binaries.pictures.erotica.creampie +alt.binaries.pictures.erotica.cypher +alt.binaries.pictures.erotica.d +alt.binaries.pictures.erotica.d.moderated +alt.binaries.pictures.erotica.dark-fantasy +alt.binaries.pictures.erotica.dbg +alt.binaries.pictures.erotica.dean-stark +alt.binaries.pictures.erotica.denise-lester +alt.binaries.pictures.erotica.disney +alt.binaries.pictures.erotica.early-teens +alt.binaries.pictures.erotica.earty-teens +alt.binaries.pictures.erotica.empty-nest +alt.binaries.pictures.erotica.ex-erols +alt.binaries.pictures.erotica.exhibitionism +alt.binaries.pictures.erotica.exhibitionism.public +alt.binaries.pictures.erotica.facials +alt.binaries.pictures.erotica.female +alt.binaries.pictures.erotica.female.anal +alt.binaries.pictures.erotica.female.bodybuilder +alt.binaries.pictures.erotica.female.cosmetic +alt.binaries.pictures.erotica.female.genitalia +alt.binaries.pictures.erotica.female.genitalia.large +alt.binaries.pictures.erotica.female.gym +alt.binaries.pictures.erotica.female.toys +alt.binaries.pictures.erotica.fetish +alt.binaries.pictures.erotica.fetish.armpits +alt.binaries.pictures.erotica.fetish.barbie +alt.binaries.pictures.erotica.fetish.diapers +alt.binaries.pictures.erotica.fetish.feet +alt.binaries.pictures.erotica.fetish.hair +alt.binaries.pictures.erotica.fetish.latex +alt.binaries.pictures.erotica.fetish.leather +alt.binaries.pictures.erotica.fetish.neck +alt.binaries.pictures.erotica.filipinas +alt.binaries.pictures.erotica.firesign +alt.binaries.pictures.erotica.fisting +alt.binaries.pictures.erotica.freckles +alt.binaries.pictures.erotica.fuck.betharnold +alt.binaries.pictures.erotica.furry +alt.binaries.pictures.erotica.g-string +alt.binaries.pictures.erotica.gaymen +alt.binaries.pictures.erotica.gaymen.moderated +alt.binaries.pictures.erotica.gaymen.twinks +alt.binaries.pictures.erotica.girlfriends +alt.binaries.pictures.erotica.gothic +alt.binaries.pictures.erotica.groupsex +alt.binaries.pictures.erotica.gwar +alt.binaries.pictures.erotica.gymnast-girls +alt.binaries.pictures.erotica.gynecologist +alt.binaries.pictures.erotica.hermaphrodites +alt.binaries.pictures.erotica.high-heels +alt.binaries.pictures.erotica.hornyrob +alt.binaries.pictures.erotica.indian-asian +alt.binaries.pictures.erotica.interracial +alt.binaries.pictures.erotica.istar.diapers +alt.binaries.pictures.erotica.jap.schoolgirl +alt.binaries.pictures.erotica.jay.t.carrigan.wife +alt.binaries.pictures.erotica.karl-malden.nose +alt.binaries.pictures.erotica.kerri-maskol +alt.binaries.pictures.erotica.koo.sisters +alt.binaries.pictures.erotica.kwakiutl +alt.binaries.pictures.erotica.lame +alt.binaries.pictures.erotica.latina +alt.binaries.pictures.erotica.latino +alt.binaries.pictures.erotica.legs +alt.binaries.pictures.erotica.lesbian +alt.binaries.pictures.erotica.lesbians +alt.binaries.pictures.erotica.lesbians.french-kiss +alt.binaries.pictures.erotica.lolita +alt.binaries.pictures.erotica.male +alt.binaries.pictures.erotica.male.anal +alt.binaries.pictures.erotica.male.bodybuilder +alt.binaries.pictures.erotica.male.bodybuilder.moderated +alt.binaries.pictures.erotica.male.burly +alt.binaries.pictures.erotica.male.chubby +alt.binaries.pictures.erotica.male.oral +alt.binaries.pictures.erotica.male.oral.cumshots +alt.binaries.pictures.erotica.male.piercing +alt.binaries.pictures.erotica.male.shirt-and-tie +alt.binaries.pictures.erotica.male.tattoos +alt.binaries.pictures.erotica.mardi-gras +alt.binaries.pictures.erotica.mf-action +alt.binaries.pictures.erotica.midgets +alt.binaries.pictures.erotica.moderated +alt.binaries.pictures.erotica.nativeamerican +alt.binaries.pictures.erotica.nipples.large +alt.binaries.pictures.erotica.nose +alt.binaries.pictures.erotica.oldermen +alt.binaries.pictures.erotica.oral +alt.binaries.pictures.erotica.oriental +alt.binaries.pictures.erotica.orientals +alt.binaries.pictures.erotica.panties +alt.binaries.pictures.erotica.party-girls +alt.binaries.pictures.erotica.partygirls +alt.binaries.pictures.erotica.pirate.mag +alt.binaries.pictures.erotica.plushies +alt.binaries.pictures.erotica.pornstar +alt.binaries.pictures.erotica.pornstar.jenna-jameson +alt.binaries.pictures.erotica.pornstar.marilyn.chambers +alt.binaries.pictures.erotica.pornstars +alt.binaries.pictures.erotica.pornstars.ariana +alt.binaries.pictures.erotica.pornstars.janine.moderated +alt.binaries.pictures.erotica.pre-teen +alt.binaries.pictures.erotica.pre-teens +alt.binaries.pictures.erotica.pregnant +alt.binaries.pictures.erotica.puffies +alt.binaries.pictures.erotica.pw-series +alt.binaries.pictures.erotica.rape +alt.binaries.pictures.erotica.redheads +alt.binaries.pictures.erotica.safetyvest +alt.binaries.pictures.erotica.scanmaster +alt.binaries.pictures.erotica.scheherazade +alt.binaries.pictures.erotica.schoolgirls +alt.binaries.pictures.erotica.shave +alt.binaries.pictures.erotica.spam +alt.binaries.pictures.erotica.spanking +alt.binaries.pictures.erotica.spanking.teen +alt.binaries.pictures.erotica.spatch +alt.binaries.pictures.erotica.stacey-owen +alt.binaries.pictures.erotica.tasteless +alt.binaries.pictures.erotica.teen +alt.binaries.pictures.erotica.teen.d +alt.binaries.pictures.erotica.teen.fe +alt.binaries.pictures.erotica.teen.female +alt.binaries.pictures.erotica.teen.female.fuck +alt.binaries.pictures.erotica.teen.female.masterbation +alt.binaries.pictures.erotica.teen.female.masturbation +alt.binaries.pictures.erotica.teen.female.nonude +alt.binaries.pictures.erotica.teen.female.orgasm +alt.binaries.pictures.erotica.teen.fuck +alt.binaries.pictures.erotica.teen.male +alt.binaries.pictures.erotica.teen.masturbation +alt.binaries.pictures.erotica.teens +alt.binaries.pictures.erotica.teensex +alt.binaries.pictures.erotica.terry.agar +alt.binaries.pictures.erotica.thigh-highs +alt.binaries.pictures.erotica.torture +alt.binaries.pictures.erotica.transvestites +alt.binaries.pictures.erotica.uncut +alt.binaries.pictures.erotica.uniform +alt.binaries.pictures.erotica.uniform.male.moderated +alt.binaries.pictures.erotica.unix +alt.binaries.pictures.erotica.urine +alt.binaries.pictures.erotica.vintage +alt.binaries.pictures.erotica.violence +alt.binaries.pictures.erotica.voyeurism +alt.binaries.pictures.erotica.voyeurism.hidden-camera +alt.binaries.pictures.erotica.wetspot +alt.binaries.pictures.erotica.yong +alt.binaries.pictures.erotica.young +alt.binaries.pictures.erotica.zig.and.zag +alt.binaries.pictures.erotics.breasts +alt.binaries.pictures.fan.televisionx +alt.binaries.pictures.fantasy-sci-fi +alt.binaries.pictures.fashion.youth +alt.binaries.pictures.female +alt.binaries.pictures.fine-art +alt.binaries.pictures.fine-art.d +alt.binaries.pictures.fine-art.digitized +alt.binaries.pictures.fine-art.graphics +alt.binaries.pictures.fine-art.misc +alt.binaries.pictures.fine-art.photos +alt.binaries.pictures.firemen +alt.binaries.pictures.fishing +alt.binaries.pictures.flags.desecrated +alt.binaries.pictures.fractals +alt.binaries.pictures.fun +alt.binaries.pictures.furniture +alt.binaries.pictures.furry +alt.binaries.pictures.gardens +alt.binaries.pictures.girlfriend +alt.binaries.pictures.girlfriends +alt.binaries.pictures.girlfriends.ex +alt.binaries.pictures.girls +alt.binaries.pictures.grotesque +alt.binaries.pictures.groupsex +alt.binaries.pictures.hockey +alt.binaries.pictures.honey-b-sweet +alt.binaries.pictures.horny.nurses +alt.binaries.pictures.horses +alt.binaries.pictures.joanne-guest +alt.binaries.pictures.joder.burros +alt.binaries.pictures.leek +alt.binaries.pictures.lesbians +alt.binaries.pictures.lexx +alt.binaries.pictures.lingerie +alt.binaries.pictures.lolita.fucking +alt.binaries.pictures.lolita.misc +alt.binaries.pictures.military +alt.binaries.pictures.misc +alt.binaries.pictures.models +alt.binaries.pictures.monsters +alt.binaries.pictures.motorcycles +alt.binaries.pictures.motorcycles.harley +alt.binaries.pictures.motorcycles.sportbike +alt.binaries.pictures.movie-posters +alt.binaries.pictures.naturism.family +alt.binaries.pictures.nicki-lewis +alt.binaries.pictures.nude +alt.binaries.pictures.nude.celebrities +alt.binaries.pictures.nude.celebrities.fake +alt.binaries.pictures.nude.celebrities.male +alt.binaries.pictures.nudism +alt.binaries.pictures.nudism.adults +alt.binaries.pictures.nudism.wolfpack +alt.binaries.pictures.nudism.youth.and.families +alt.binaries.pictures.nylons +alt.binaries.pictures.origami +alt.binaries.pictures.pantyhose +alt.binaries.pictures.pantyhouse +alt.binaries.pictures.personal +alt.binaries.pictures.petra-verkaik +alt.binaries.pictures.phil-oliver +alt.binaries.pictures.pink-floyd +alt.binaries.pictures.plushies +alt.binaries.pictures.poodles.grep +alt.binaries.pictures.radio +alt.binaries.pictures.radio.control.models +alt.binaries.pictures.raik +alt.binaries.pictures.rail +alt.binaries.pictures.sailor-moon +alt.binaries.pictures.sarenna-lee +alt.binaries.pictures.scenic +alt.binaries.pictures.sex +alt.binaries.pictures.sex.fetish +alt.binaries.pictures.sex.fetish.fish +alt.binaries.pictures.spam +alt.binaries.pictures.spice-girls +alt.binaries.pictures.sports +alt.binaries.pictures.sports.gymnastics +alt.binaries.pictures.sports.ocean +alt.binaries.pictures.sports.pictures.ocean +alt.binaries.pictures.stereo +alt.binaries.pictures.strippers +alt.binaries.pictures.sunshineboys +alt.binaries.pictures.supermodels +alt.binaries.pictures.supermodels.cindy-crawford +alt.binaries.pictures.supermodels.kate-moss +alt.binaries.pictures.supermodels.kathy-ireland +alt.binaries.pictures.suze +alt.binaries.pictures.suze.repost +alt.binaries.pictures.tasteless +alt.binaries.pictures.tasteless.dedman-sisters +alt.binaries.pictures.teen-idols +alt.binaries.pictures.teen-idols.princewilliam +alt.binaries.pictures.teen-idols.shirtless +alt.binaries.pictures.teen-starlets +alt.binaries.pictures.tools +alt.binaries.pictures.utilities +alt.binaries.pictures.vehicles +alt.binaries.pictures.victoria.secret +alt.binaries.pictures.voyeurism +alt.binaries.pictures.weather +alt.binaries.pictures.young.celebrities.retromod +alt.binaries.picutes.nude.celebrities +alt.binaries.pinups +alt.binaries.pro-wrestling +alt.binaries.punk +alt.binaries.radio-control +alt.binaries.radio.pictures +alt.binaries.railroad.twofoot +alt.binaries.rec.photo.equipment +alt.binaries.rock-n-roll +alt.binaries.satellite-tv +alt.binaries.scanmaster +alt.binaries.schematics.electronic +alt.binaries.scientology +alt.binaries.screen-savers +alt.binaries.shareware +alt.binaries.shareware.ibm.pc +alt.binaries.simulators.autos +alt.binaries.skewed +alt.binaries.slack +alt.binaries.sliders +alt.binaries.smash-pumpkins +alt.binaries.soccer +alt.binaries.sound.radio.oldtime +alt.binaries.sounds +alt.binaries.sounds.1950s.mp3 +alt.binaries.sounds.1960s.mp3 +alt.binaries.sounds.1970s.mp3 +alt.binaries.sounds.1980s.mp3 +alt.binaries.sounds.1990s.mp3 +alt.binaries.sounds.78rpm-era +alt.binaries.sounds.anime +alt.binaries.sounds.cartoons +alt.binaries.sounds.d +alt.binaries.sounds.erotica +alt.binaries.sounds.karaoke +alt.binaries.sounds.m +alt.binaries.sounds.macintosh +alt.binaries.sounds.midi +alt.binaries.sounds.midi-tools +alt.binaries.sounds.midi.beatles +alt.binaries.sounds.midi.blues +alt.binaries.sounds.midi.classical +alt.binaries.sounds.midi.country +alt.binaries.sounds.midi.d +alt.binaries.sounds.midi.ethnic +alt.binaries.sounds.midi.final-fantasy +alt.binaries.sounds.midi.funk +alt.binaries.sounds.midi.games +alt.binaries.sounds.midi.jazz +alt.binaries.sounds.midi.originals +alt.binaries.sounds.midi.pop +alt.binaries.sounds.midi.rap +alt.binaries.sounds.midi.rock +alt.binaries.sounds.midi.soul +alt.binaries.sounds.midi.to.wav +alt.binaries.sounds.misc +alt.binaries.sounds.mods +alt.binaries.sounds.mods.d +alt.binaries.sounds.mods.techno +alt.binaries.sounds.moesart2000 +alt.binaries.sounds.monty-python +alt.binaries.sounds.movies +alt.binaries.sounds.mp3 +alt.binaries.sounds.mp3.1950s +alt.binaries.sounds.mp3.1960s +alt.binaries.sounds.mp3.1970s +alt.binaries.sounds.mp3.1980s +alt.binaries.sounds.mp3.1990s +alt.binaries.sounds.mp3.bootlegs +alt.binaries.sounds.mp3.d +alt.binaries.sounds.mp3.indie +alt.binaries.sounds.mp3.kcuf +alt.binaries.sounds.mp3.ninja.music +alt.binaries.sounds.mp3.zappa +alt.binaries.sounds.music +alt.binaries.sounds.music.amateur +alt.binaries.sounds.ninja +alt.binaries.sounds.radio.oldtime +alt.binaries.sounds.realaudio +alt.binaries.sounds.samples.music +alt.binaries.sounds.tv +alt.binaries.sounds.tv-commercials +alt.binaries.sounds.tv-themes +alt.binaries.sounds.twinvq +alt.binaries.sounds.twinvq.d +alt.binaries.sounds.utilities +alt.binaries.sounds.utilities.d +alt.binaries.sounds.vqf +alt.binaries.sounds.vqf.d +alt.binaries.sounds.wav +alt.binaries.sounds.wav.music.1950s +alt.binaries.sounds.wav.music.1960s +alt.binaries.sounds.wav.music.1970s +alt.binaries.southpark +alt.binaries.squaresoft +alt.binaries.startrek +alt.binaries.startrek.adult +alt.binaries.starwars +alt.binaries.stories.sex +alt.binaries.strip-poker +alt.binaries.teri-weigel +alt.binaries.test +alt.binaries.this.needs.cracking +alt.binaries.tori-amos +alt.binaries.toy-cars +alt.binaries.tv.friends +alt.binaries.ufo.files +alt.binaries.wallacegromit +alt.binaries.warcraft +alt.binaries.wares.ibm-pc-graphic +alt.binaries.warex.ibm-pc.fumbles-harem +alt.binaries.warez +alt.binaries.warez.adolescent +alt.binaries.warez.amiga +alt.binaries.warez.autocad +alt.binaries.warez.commodore64 +alt.binaries.warez.educational +alt.binaries.warez.fukengruven +alt.binaries.warez.games.adolescent +alt.binaries.warez.ibm-pc +alt.binaries.warez.ibm-pc.0-day +alt.binaries.warez.ibm-pc.d +alt.binaries.warez.ibm-pc.dos +alt.binaries.warez.ibm-pc.encrypted +alt.binaries.warez.ibm-pc.games +alt.binaries.warez.ibm-pc.insomniac +alt.binaries.warez.ibm-pc.kidnapd-harem +alt.binaries.warez.ibm-pc.old +alt.binaries.warez.ibm-pc.os +alt.binaries.warez.insomniac +alt.binaries.warez.internet.video.phones.ibm.pc +alt.binaries.warez.linux +alt.binaries.warez.mac +alt.binaries.warez.mac.req +alt.binaries.warez.macintosh +alt.binaries.warez.nt +alt.binaries.warez.nt.d +alt.binaries.warez.os2 +alt.binaries.warez.snes +alt.binaries.warez.steganography +alt.binaries.warez.uk +alt.binaries.warez.win95 +alt.binaries.warez.win95-apps +alt.binaries.warez.windows31 +alt.binaries.webcam.pictures +alt.binaries.x +alt.binaries.x-files +alt.binaries.x-files.ga +alt.binaries.x.upper-case +alt.binaries.zines +alt.binary.carring-female +alt.binaties.startrek.adult +alt.bio.hackers +alt.bio.minority +alt.bio.technology +alt.bio.technology.cloning +alt.bio.technology.gene-testing +alt.bio.technology.misc +alt.birthright +alt.bitch.ewokie +alt.bitch.pork +alt.bite-me +alt.bitterness +alt.blackbayou +alt.blasphemy +alt.bmx +alt.bobby +alt.bogus.group +alt.bonehead.anti-rush +alt.bonehead.bill-palmer +alt.bonehead.captain-bligh +alt.bonehead.clayton-oneill +alt.bonehead.dr-turi +alt.bonehead.head-librarian +alt.bonehead.higby +alt.bonehead.jai-maharaj +alt.bonehead.james-koput +alt.bonehead.jesse-garon +alt.bonehead.john-grubor +alt.bonehead.john-siwinski +alt.bonehead.josh-kramer +alt.bonehead.kevin-mitnick +alt.bonehead.lee-latham +alt.bonehead.oliver1 +alt.bonehead.phil-lawlor +alt.bonehead.phil-oliver +alt.bonehead.ralph.reed.sucks +alt.bonehead.sander.von.minnen +alt.bonehead.sandy-wallace +alt.bonehead.steve-crisp +alt.bonehead.steve-day +alt.bonehead.steve-lake +alt.bonehead.teddy-bear +alt.bonehead.waldby +alt.bonehead.walt-rines +alt.bonhead.johnny-grubor +alt.bonsai +alt.books +alt.books.anne-rice +alt.books.arthur-clarke +alt.books.beatgeneration +alt.books.brian-lumley +alt.books.bukowski +alt.books.cait-r-kiernan +alt.books.carl-sagan +alt.books.chesterton +alt.books.clive-barker +alt.books.crichton +alt.books.cs-lewis +alt.books.dan-simmons +alt.books.david-weber +alt.books.dean-koontz +alt.books.deryni +alt.books.destroyer +alt.books.dylan-thomas +alt.books.george-fraser +alt.books.george-orwell +alt.books.ghost-fiction +alt.books.gor +alt.books.h-g-wells +alt.books.iain-banks +alt.books.inklings +alt.books.isaac-asimov +alt.books.jack-chalker +alt.books.james-joyce +alt.books.jean-auel +alt.books.jerry-chavez +alt.books.john-grisham +alt.books.julian-may +alt.books.kurt-vonnegut +alt.books.larry-niven +alt.books.lars-eighner +alt.books.louis-lamour +alt.books.m-lackey +alt.books.moorcock +alt.books.mysteries +alt.books.nabokov +alt.books.nancy-drew +alt.books.orson-s-card +alt.books.outlander +alt.books.pat-conroy +alt.books.peter-straub +alt.books.phil-k-dick +alt.books.poppy-z-brite +alt.books.pratchett +alt.books.purefiction +alt.books.ray-bradbury +alt.books.raymond-feist +alt.books.reviews +alt.books.robert-rankin +alt.books.roger-zelazny +alt.books.sebar +alt.books.sf.melanie-rawn +alt.books.stephen-king +alt.books.technical +alt.books.terry-brooks +alt.books.thomas-ligotti +alt.books.thomas-pynchon +alt.books.toffler +alt.books.tom-clancy +alt.books.valdemar.fanfic +alt.books.zogoiby +alt.boomerang +alt.bored +alt.bork +alt.boxer-shorts +alt.braces +alt.brad.jesness.die.die.die +alt.brain +alt.brain.teasers +alt.brallen +alt.brandon +alt.breast-implant.moderated +alt.brewing +alt.brother-jed +alt.brown-cow-moo +alt.bucky-fuller +alt.buddha.short.fat.guy +alt.building.announcements +alt.building.architecture +alt.building.construction +alt.building.contractors +alt.building.elevators +alt.building.engineering +alt.building.environment +alt.building.finance +alt.building.jobs +alt.building.landscape +alt.building.manufacturing +alt.building.realestate +alt.building.survey-mapping +alt.bullshit +alt.business +alt.business.accountability +alt.business.consulting +alt.business.consulting.utilities +alt.business.franchise +alt.business.home.pc +alt.business.hospitality +alt.business.import-export +alt.business.import-export.computer +alt.business.import-export.food +alt.business.import-export.only +alt.business.import-export.raw-material +alt.business.import-export.services +alt.business.insurance +alt.business.internal-audit +alt.business.misc +alt.business.multi-level +alt.business.multi-level.exceltel +alt.business.multi-level.moderated +alt.business.multi-level.scam +alt.business.multi-level.scam.scam.scam +alt.business.offshore +alt.business.pornpig.industries +alt.business.propertry +alt.business.property +alt.business.seminars +alt.business.telemarketing +alt.butt.flame.karl-malden.cascade +alt.butt.harp +alt.butt.harp.die.die.die +alt.buttholes +alt.butts +alt.bytebrothers +alt.c64 +alt.cable-ip +alt.cable-tv.re-regulate +alt.cad +alt.cad.archicad +alt.cad.autocad +alt.cad.cadkey +alt.cad.cadvance +alt.cad.chiefarchitect +alt.cad.helix +alt.cad.intellicad +alt.cake +alt.california +alt.california.illegals +alt.callahans +alt.can.creat.whatever.news.group.i.want +alt.canadian.beaver +alt.captain.sarcastic +alt.cardgame.magic +alt.cardgame.spellfire +alt.carlos-n-jen +alt.cars.ferrari +alt.cars.ford-probe +alt.cars.lotus +alt.cartoon.reboot +alt.cascade +alt.cascade.fuckhead +alt.cascade.shut-up-cunter +alt.cascade.vest.sweater.vest +alt.casinos.chequers.chips.tokens +alt.castlenet +alt.catastrophism +alt.cats +alt.cats.world.domination +alt.caving +alt.cbs-sucks +alt.cd-rom +alt.cd-rom.reviews +alt.celebrities +alt.cellular +alt.cellular.clearnet +alt.cellular.data +alt.cellular.ericsson +alt.cellular.fido +alt.cellular.gsm +alt.cellular.motorola +alt.cellular.nokia +alt.cellular.sprintpcs +alt.censorship +alt.centipede +alt.cereal +alt.cesium +alt.change +alt.change.lightbulb +alt.chaos +alt.charlie.rules.rules.rules +alt.chat-programs.icq +alt.cheese +alt.chess.ics +alt.child-support +alt.childcare +alt.chinchilla +alt.chinese.computing +alt.chinese.fengshui +alt.chinese.story +alt.chinese.text +alt.chinese.text.big5 +alt.chinese.text.hz +alt.chips.salt-n-vinegar +alt.christnet +alt.christnet.beanie-babies +alt.christnet.bible +alt.christnet.christianlife +alt.christnet.demonology +alt.christnet.ethics +alt.christnet.evangelical +alt.christnet.hypocrisy +alt.christnet.nudism +alt.christnet.philosophy +alt.christnet.prayer +alt.christnet.racism +alt.christnet.rightwing.loonies +alt.christnet.satanism +alt.christnet.second-coming.real-soon-now +alt.christnet.sex +alt.christnet.sodomy +alt.christnet.songwriters +alt.christnet.theology +alt.cic.sfsu.edu +alt.circumcision +alt.circus.arts +alt.citadel.alumni +alt.city.ideafarm +alt.clearing.technology +alt.clerks +alt.clerks.binaries +alt.clip-joint +alt.cloned-sheep.bah.bah.bah +alt.cloning +alt.clothes.designer +alt.clothes.designer.versace +alt.clothing.lingerie +alt.clothing.sneakers +alt.cloudshapes +alt.club.merlino +alt.club.raaf +alt.clubs.club-anime.toronto +alt.clubs.emperorshammer +alt.clubs.just-for-fun +alt.clueless +alt.cmsg.test +alt.co-evolution +alt.co-ops +alt.coatings.paint +alt.cobol +alt.coffee +alt.collecting.8-track-tapes +alt.collecting.autographs +alt.collecting.barbie +alt.collecting.beanie-babies +alt.collecting.beanie-babies.forsale +alt.collecting.bicycles +alt.collecting.breweriana +alt.collecting.casino-tokens +alt.collecting.juke-boxes +alt.collecting.pens-pencils +alt.collecting.postcard +alt.collecting.sports-figures +alt.collecting.stamp +alt.collecting.stamps +alt.collecting.stamps.david.ross.sucks +alt.collecting.stamps.jay.carrigan.blackmail +alt.collecting.stamps.software +alt.collecting.stamps.us +alt.collecting.stamps.worldwide +alt.collecting.teddy-bears +alt.collecting.topper-dawn +alt.collecting.toy-robot +alt.collecting.warner-bros +alt.college.bromley-uk +alt.college.bromley-uk.announce +alt.college.bromley-uk.events +alt.college.bromley-uk.misc +alt.college.college-bowl +alt.college.college-meow +alt.college.democrats +alt.college.food +alt.college.fraternities +alt.college.fraternities.dlta-sigma-phi +alt.college.fraternities.sigma-pi +alt.college.greek.organizations +alt.college.sororities +alt.college.tunnels +alt.college.us +alt.comedy.air-farce +alt.comedy.bill-hicks +alt.comedy.british +alt.comedy.british.blackadder +alt.comedy.firesgn-thtre +alt.comedy.george-carlin +alt.comedy.improvisation +alt.comedy.jerrylewis +alt.comedy.laurel-hardy +alt.comedy.marx-bros +alt.comedy.paul-reubens +alt.comedy.slapstick +alt.comedy.slapstick.3-stooges +alt.comedy.standup +alt.comedy.vaudeville +alt.comics.2000ad +alt.comics.alan-moore +alt.comics.alternative +alt.comics.batman +alt.comics.classic +alt.comics.dilbert +alt.comics.elfquest +alt.comics.fan-fiction +alt.comics.fandom +alt.comics.gunnm +alt.comics.image +alt.comics.jack-kirby +alt.comics.lnh +alt.comics.peanuts +alt.comics.sip +alt.comics.strips.footrot-flats +alt.comics.super-villains +alt.comics.superman +alt.commahead +alt.community.intentional +alt.community.local-money +alt.comp +alt.comp.4d +alt.comp.acad-freedom.news +alt.comp.acad-freedom.talk +alt.comp.baan +alt.comp.blind-users +alt.comp.casewise +alt.comp.compression +alt.comp.convergence +alt.comp.databases.omnis +alt.comp.databases.xbase++ +alt.comp.databases.xbase.clipper +alt.comp.dcom.sys.xyplex +alt.comp.dymax +alt.comp.editors.batch +alt.comp.freeware +alt.comp.freeware.gdp +alt.comp.goldmine +alt.comp.hardware.aptiva +alt.comp.hardware.homebuilt +alt.comp.hardware.homedesigned +alt.comp.hardware.overclocking +alt.comp.hardware.pc-homebuilt +alt.comp.hardware.superdisk +alt.comp.hello-world +alt.comp.jgaa +alt.comp.jgaa.binaries +alt.comp.lang.borland-delphi +alt.comp.lang.learn.c-c++ +alt.comp.lang.reportsmith +alt.comp.lang.scriptease +alt.comp.lang.superlang +alt.comp.lang.visualbasic.ver3 +alt.comp.lang.visulabasic.ver3 +alt.comp.pacnet.support +alt.comp.periphs.cdr +alt.comp.periphs.cdr.mac +alt.comp.periphs.dcameras +alt.comp.periphs.keyboard +alt.comp.periphs.mainboard.abit +alt.comp.periphs.mainboard.asus +alt.comp.periphs.mainboard.elitegroup +alt.comp.periphs.mainboard.fic +alt.comp.periphs.mainboard.giga-byte +alt.comp.periphs.mainboard.m-tech +alt.comp.periphs.mainboard.octek +alt.comp.periphs.mainboard.shuttle +alt.comp.periphs.mainboard.supermicro +alt.comp.periphs.mainboard.tacos +alt.comp.periphs.mainboard.tyan +alt.comp.periphs.multifunctions +alt.comp.periphs.scanner +alt.comp.periphs.soundcard.avm +alt.comp.pheriphs.mainboard.supermicro +alt.comp.shareware +alt.comp.shareware.authors +alt.comp.shareware.for-kids +alt.comp.shareware.nettamer +alt.comp.shareware.programmer +alt.comp.software.easter-eggs +alt.comp.software.financial.peachtree +alt.comp.software.njdm +alt.comp.software.tools +alt.comp.sys.mainboard.macintosh +alt.comp.sys.palmtops.hp +alt.comp.sys.palmtops.pilot +alt.comp.tandem-users +alt.comp.tess +alt.comp.virus +alt.comp.virus.pro-virus +alt.comp.virus.source.code +alt.complainers.bitch-n-moan +alt.computer +alt.computer.consultants +alt.computer.consultants.ads +alt.computer.consultants.ads.norecruiters +alt.computer.consultants.moderated +alt.computer.drivers.wanted +alt.computer.security +alt.computer.workshop.live +alt.computerlink.online +alt.confag +alt.conference-ctr +alt.config +alt.config.cypher +alt.config.cypher-abuse +alt.config.flame +alt.config.jeffery-d-hunt +alt.config.newtons +alt.config.phil-oliver +alt.config.rmgroup.maniacs.david.guntner +alt.consciousness +alt.consciousness.4th-way +alt.consciousness.jancox +alt.consciousness.mysticism +alt.consciousness.near-death-exp +alt.consciousness.slyman +alt.consciousness.slyman.flame +alt.conspiracy +alt.conspiracy.abe-lincoln +alt.conspiracy.alt-config +alt.conspiracy.antichrist +alt.conspiracy.area51 +alt.conspiracy.beyondweird +alt.conspiracy.black.helicopters +alt.conspiracy.cabal +alt.conspiracy.dean-stark +alt.conspiracy.im-taking.over-the.world.starting.with-alt.config +alt.conspiracy.im-taking.over-the.world.starting.with-aol +alt.conspiracy.im-taking.over-the.world.starting.with-christmas +alt.conspiracy.im-taking.over-the.world.starting.with-usenet +alt.conspiracy.im-taking.over-the.world.starting.with-yalta +alt.conspiracy.im.taking.over.the.world.starting.with.usenet +alt.conspiracy.jeffery-hunt +alt.conspiracy.jfk +alt.conspiracy.jfk.moderated +alt.conspiracy.kunm +alt.conspiracy.lady-di +alt.conspiracy.microsoft +alt.conspiracy.netcom +alt.conspiracy.princess-diana +alt.conspiracy.right-wing +alt.conspiracy.spy +alt.construction +alt.consumers.auto-service +alt.consumers.experiences +alt.consumers.free-stuff +alt.consumers.pest-control +alt.consumers.sweepstakes +alt.contest.addiction +alt.contest.recovery +alt.contraceptives +alt.control.bladder +alt.control.cabal +alt.control.cabal.bladder +alt.control.test.test.test +alt.cookies.yum.yum.yum +alt.cooking-chat +alt.coptic.australia +alt.corel.graphics +alt.corn.sucks-polenta.rules-do.the.butt.dance-man +alt.corporate.accountability +alt.cosuard +alt.coupons +alt.coven +alt.coven.binaries +alt.coven.cthulhu +alt.coven.humor +alt.coven.moderated +alt.coven.test +alt.cows.are.nice +alt.cows.moo.moo.moo +alt.crackers +alt.cracks +alt.crafts.blacksmithing +alt.crafts.candlemaking.soapmaking +alt.crafts.candlemaking.soapmaking.moderated +alt.crafts.plastic-canvas +alt.crafts.print-artist +alt.crafts.professional +alt.creative-cook +alt.crime +alt.crime.bail-enforce +alt.crime.peacemaking.criminology +alt.crossover +alt.cuddle +alt.cult-movies +alt.cult-movies.alien +alt.cult-movies.clue +alt.cult-movies.cronenberg +alt.cult-movies.evil-deads +alt.cult-movies.rocky-horror +alt.cult.jeff-mcdonald +alt.cult.maharaji +alt.cult.nudism +alt.culture.african.american.arts +alt.culture.african.american.business +alt.culture.african.american.history +alt.culture.african.american.issues +alt.culture.alaska +alt.culture.argentina +alt.culture.armenian +alt.culture.assam +alt.culture.austrian +alt.culture.azerbaijan +alt.culture.beaches +alt.culture.bullfight +alt.culture.cacophony +alt.culture.cajun +alt.culture.caucasia +alt.culture.chechnya +alt.culture.china +alt.culture.crimea +alt.culture.cyber-psychos +alt.culture.dagestan +alt.culture.egyptian +alt.culture.fabulous +alt.culture.fil-am.relationships +alt.culture.gard-trask +alt.culture.gods +alt.culture.hawaii +alt.culture.hessian +alt.culture.indonesia +alt.culture.internet +alt.culture.james-koput +alt.culture.jesse-garon +alt.culture.jollyroger +alt.culture.karnataka +alt.culture.kashmir +alt.culture.kazakhstan +alt.culture.kerala +alt.culture.knights +alt.culture.kuwait +alt.culture.lounge +alt.culture.luddites +alt.culture.malta +alt.culture.military-brats +alt.culture.mobydick +alt.culture.morocco +alt.culture.net-viking +alt.culture.ny-upstate +alt.culture.ny.upstate +alt.culture.openair-market +alt.culture.oregon +alt.culture.outerspace +alt.culture.saudi +alt.culture.somalia +alt.culture.taiwan +alt.culture.tamil +alt.culture.tamil-eelam +alt.culture.tibet +alt.culture.tunisia +alt.culture.turkestan +alt.culture.turkish +alt.culture.turkish.azerbaijan +alt.culture.turkish.cyprus +alt.culture.turkish.diaspora +alt.culture.turkish.history +alt.culture.turkish.internet +alt.culture.turkish.media +alt.culture.turkish.politics +alt.culture.turkish.publications +alt.culture.turkish.religions +alt.culture.turkish.travel +alt.culture.turkmenistan +alt.culture.uganda +alt.culture.us.1960s +alt.culture.us.1970s +alt.culture.us.1980s +alt.culture.us.1990s +alt.culture.us.asian-indian +alt.culture.us.hispanics +alt.culture.us.southwest +alt.culture.usenet +alt.culture.vampires +alt.culture.virtual.oceania +alt.culture.warrior-women +alt.culture.wo9ld.culture +alt.culture.www +alt.current-events.blizzard-of-93 +alt.current-events.blizzard-of-93.agff-cowards +alt.current-events.bosnia +alt.current-events.cebit +alt.current-events.cia.crack-dealing +alt.current-events.clinton.whitewater +alt.current-events.earth-changes +alt.current-events.haiti +alt.current-events.massacre.high-school +alt.current-events.net-abuse +alt.current-events.net-abuse.spam +alt.current-events.russia +alt.current-events.ukraine +alt.current-events.usa +alt.cyberangels +alt.cybercafes +alt.cyberpromo.com.spammers.revenge +alt.cyberpunk +alt.cyberpunk.chatsubo +alt.cyberpunk.cypher +alt.cyberpunk.movement +alt.cyberpunk.tech +alt.cyberspace +alt.cyberspace.construction.busines +alt.cyberspace.construction.business +alt.cyberspace.rebels +alt.cyberspace.rebels.kai.kai.kai +alt.cyberwitness +alt.cyberworld +alt.cynicism +alt.cynics +alt.cypher +alt.cypherpunks +alt.cypherpunks.announce +alt.cypherpunks.social +alt.cypherpunks.technical +alt.dads-rights +alt.dads-rights.unmoderated +alt.damians.lovely.pants +alt.dan.loves.ninou +alt.darkside +alt.dating.uk.north-west +alt.dating.uk.south-east +alt.dave-wheeler.usenet.troll +alt.david +alt.david.is.an.idiot +alt.david.lawrence.no.right +alt.david.lawrence.tale.censor.censor.censor +alt.dbs.echostar +alt.dbs.primestar +alt.dcom.slip-emulators +alt.dcom.telecom +alt.dcom.telecom.radius +alt.ddd.ddd +alt.dead.porn.stars +alt.deadmolly.woodchipper +alt.dear.whitehouse +alt.debord.collectors +alt.december +alt.deepfix +alt.demogroups +alt.demogroups.paranoids +alt.deposit +alt.depressed.as.fuck +alt.desert-storm +alt.design.graphics +alt.design.product +alt.despair3 +alt.destroy.microsoft +alt.destroy.the.earth +alt.destroy.the.internet +alt.dev.null +alt.devilbunnies +alt.diamonds +alt.diamonds.marketplace +alt.dick-weasel.michael-zander +alt.dick-weasel.phil-oliver +alt.digitiser +alt.digitiser.moderated +alt.digitiser.sucks.cheesy.nobs +alt.disability.blind.social +alt.disasters.aviation +alt.disasters.dean-stark +alt.disasters.drought +alt.disasters.misc +alt.discordia +alt.discordian +alt.discrimination +alt.disney +alt.disney.beauty+beast +alt.disney.collecting +alt.disney.criticism +alt.disney.disneyland +alt.disney.disneyworld +alt.disney.secrets +alt.disney.tech +alt.disney.vacation-club +alt.divination +alt.dobbins.milkbaby +alt.dolcett +alt.dont.get.even.get.odd +alt.doobry +alt.dork.coder1 +alt.dorks +alt.dot.dot.dot.lets.use.square.brackets.in.cascades +alt.doug-bashford.spank.spank.spank +alt.dragons-inn +alt.drdoom +alt.dreams +alt.dreams.castaneda +alt.dreams.edgar-cayce +alt.dreams.impero.nascosto +alt.dreams.lucid +alt.drinks.beer +alt.drinks.kool-aid +alt.drinks.scotch-whisky +alt.drinks.snapple +alt.drugs +alt.drugs.busts +alt.drugs.caffeine +alt.drugs.chemistry +alt.drugs.crack +alt.drugs.culture +alt.drugs.datura +alt.drugs.dmt +alt.drugs.hard +alt.drugs.leri +alt.drugs.melatonin +alt.drugs.mushrooms +alt.drugs.pot +alt.drugs.pot.cultivation +alt.drugs.pot.cultivation.hydroponics +alt.drugs.psychedelics +alt.drugs.uk +alt.drugs.usenet +alt.drumcorps +alt.drunken.bastards +alt.drunken.bastards.camp-gumby +alt.drunken.bastards.cypher +alt.drunken.bastards.richard-healey +alt.drwho.creative +alt.dss +alt.dss.tech +alt.duck.quack.quack.quack +alt.duffman.was.here +alt.duh +alt.duh-ceichels +alt.dumpster +alt.dur.general +alt.dx.tropical +alt.e-mail.lists +alt.earth.crisis +alt.ebonics.b.fun.yo.yo.yo +alt.ecommerce +alt.ecommerce.intershop +alt.education +alt.education.alternative +alt.education.bangkok +alt.education.business +alt.education.disabled +alt.education.distance +alt.education.email-project +alt.education.higher.stu-affairs +alt.education.home-school.christian +alt.education.home-school.disabilities +alt.education.ib +alt.education.nontrad-degree +alt.education.research +alt.education.tip +alt.egyptians.copts +alt.elpigo +alt.elvis.king +alt.emergency.services.dispatcher +alt.emulators.amiga +alt.emulators.classic-arcade +alt.emulators.uae +alt.emusic +alt.energy.homepower +alt.energy.nuclear +alt.energy.renewable +alt.engineering +alt.engineering.electrical +alt.engineering.nuclear +alt.engr.explosives +alt.ensign.wesley.die.die.die +alt.enviro-p2 +alt.environment-p2 +alt.environment.p2 +alt.eod.tech +alt.epix.sucks +alt.er.sex +alt.ernic +alt.escape.from.greenville +alt.esperanto +alt.esperanto.amuzo.varia +alt.esperanto.anfaenger +alt.esperanto.beginner +alt.esperanto.debutant +alt.esperanto.homanstudaro.varia +alt.esperanto.humanstudaro.varia +alt.esperanto.katolika +alt.esperanto.komencanto +alt.esperanto.komencanto.nacilingve +alt.esperanto.komp.varia +alt.esperanto.konfig +alt.esperanto.latina-3 +alt.esperanto.negoco.varia +alt.esperanto.parolado.varia +alt.esperanto.principiante +alt.esperanto.sci.varia +alt.esperanto.sekso.varia +alt.esperanto.shoshin-sha +alt.esperanto.soc.varia +alt.esperanto.varia.varia +alt.espn.sucks +alt.etext +alt.eunuchs.questions +alt.euro.hydro +alt.evil +alt.evil.hfw-dipshits +alt.exotic-music +alt.ezines +alt.ezines.rad +alt.ezines.set +alt.ezines.spire +alt.fa.tim-henman +alt.fag-lamer.tj.spark-miller.fuckhead +alt.fairs.renaissance +alt.fairs.renaissance.livingchess +alt.family-name.goodpaster +alt.family-name.luquette +alt.family-name.snider +alt.family-name.stokley +alt.family-name.walter +alt.family-name.whitlow +alt.family-names +alt.family-names.abair +alt.family-names.achterhoff +alt.family-names.adair +alt.family-names.anderson +alt.family-names.armand +alt.family-names.bever +alt.family-names.bicknell +alt.family-names.boettcher +alt.family-names.broyles +alt.family-names.brujo +alt.family-names.casada +alt.family-names.cavolack +alt.family-names.cavolick +alt.family-names.charnock +alt.family-names.chumbley +alt.family-names.clark +alt.family-names.clinton +alt.family-names.cole +alt.family-names.collingridge +alt.family-names.collins +alt.family-names.comito +alt.family-names.cooper +alt.family-names.cronkite +alt.family-names.cullop +alt.family-names.cypher +alt.family-names.dailey +alt.family-names.daily +alt.family-names.daley +alt.family-names.daly +alt.family-names.daniels +alt.family-names.daugherty +alt.family-names.davis +alt.family-names.deveau +alt.family-names.dewald +alt.family-names.dews +alt.family-names.doolittle +alt.family-names.duff +alt.family-names.dunnegan +alt.family-names.durman +alt.family-names.eichenberg +alt.family-names.elliott +alt.family-names.engler +alt.family-names.etenbaum +alt.family-names.forsberg +alt.family-names.frught +alt.family-names.gabriel +alt.family-names.ganson +alt.family-names.gates +alt.family-names.gee +alt.family-names.goodpaster +alt.family-names.gould +alt.family-names.gramling +alt.family-names.hackley +alt.family-names.hemson +alt.family-names.henderson +alt.family-names.hendren +alt.family-names.hendricks +alt.family-names.higby +alt.family-names.hittle +alt.family-names.hodges +alt.family-names.hoffman +alt.family-names.huband +alt.family-names.hughes +alt.family-names.isbell +alt.family-names.jackson +alt.family-names.jacobi +alt.family-names.jacoby +alt.family-names.jenkins +alt.family-names.jensen +alt.family-names.johnson +alt.family-names.jones +alt.family-names.julian +alt.family-names.kahle +alt.family-names.konde +alt.family-names.kressel +alt.family-names.lane +alt.family-names.leger +alt.family-names.lenard +alt.family-names.lloyd +alt.family-names.lucas +alt.family-names.luquette +alt.family-names.mac_gregor +alt.family-names.makemson +alt.family-names.manson +alt.family-names.mars +alt.family-names.martin +alt.family-names.mattix +alt.family-names.meyer +alt.family-names.miller +alt.family-names.muellerleile +alt.family-names.norton +alt.family-names.oneill +alt.family-names.palmjob +alt.family-names.pruitt +alt.family-names.putnam +alt.family-names.raynes +alt.family-names.reedy +alt.family-names.rice +alt.family-names.rosenthal +alt.family-names.roush +alt.family-names.schauss +alt.family-names.schleck +alt.family-names.shouse +alt.family-names.shows +alt.family-names.sims +alt.family-names.smith +alt.family-names.snider +alt.family-names.soderberg +alt.family-names.starr +alt.family-names.stephenson +alt.family-names.stevens +alt.family-names.strong +alt.family-names.supak +alt.family-names.teachout +alt.family-names.thompson +alt.family-names.tietsoort +alt.family-names.vanminnen +alt.family-names.vannorman +alt.family-names.varner +alt.family-names.von_gausig +alt.family-names.warren +alt.family-names.webb +alt.family-names.wilhite +alt.family-names.wood +alt.family-names.wooten +alt.family-names.wright +alt.family-names.xemblinosky +alt.family-names.xemblinosky.yes.its.a.real.name +alt.family-names.yeltsin +alt.family-names.zadvinskis +alt.family-names.zerbe +alt.fan +alt.fan.aavfff +alt.fan.abstinence +alt.fan.actors +alt.fan.actors.dead +alt.fan.adam-allard +alt.fan.addams.pugsley +alt.fan.addams.wednesday +alt.fan.admiral-twin +alt.fan.adolf-hitler +alt.fan.adolf-hitler.and.crumpets +alt.fan.aimee-lortskel +alt.fan.air +alt.fan.alan-keyes +alt.fan.alan-shearer +alt.fan.alan.tam +alt.fan.all-blacks +alt.fan.alyssa-milano +alt.fan.ana-voog +alt.fan.andrew.lloyd-webber +alt.fan.andy-kaufman +alt.fan.anita.mui +alt.fan.ariana +alt.fan.arianarichards +alt.fan.art-bell +alt.fan.ashley-judd +alt.fan.ashley-lauren +alt.fan.asprin +alt.fan.audrey-hepburn +alt.fan.authors.stephen-king +alt.fan.babe-ruth +alt.fan.backstreet.boys +alt.fan.bahamut-zero +alt.fan.barbra.streisand +alt.fan.barry-manilow +alt.fan.beable +alt.fan.ben-polen +alt.fan.bettina.fink +alt.fan.bgcrisis +alt.fan.bill-clinton +alt.fan.bill-gates +alt.fan.bill-nye +alt.fan.bill.cheek +alt.fan.billy-idol +alt.fan.blackskull +alt.fan.blade-runner +alt.fan.blessid-union +alt.fan.blues-brothers +alt.fan.bob-abraham +alt.fan.bob-dole +alt.fan.bob-larson +alt.fan.bonzo-dog +alt.fan.brad-pitt +alt.fan.brad.tripp +alt.fan.brandon-cotton +alt.fan.brent-spiner +alt.fan.bridget +alt.fan.british-accent +alt.fan.british-actors +alt.fan.broken-gizmo +alt.fan.bruce-campbell +alt.fan.bruce-kettler +alt.fan.buddy-holly +alt.fan.buster-n-missy +alt.fan.cameron-diaz +alt.fan.camille-paglia +alt.fan.capt-beefheart +alt.fan.capt-tractor +alt.fan.carly-shea +alt.fan.carmen-grasso +alt.fan.cbc.urban-peasant +alt.fan.cecil-adams +alt.fan.cfny +alt.fan.charlie.liberal +alt.fan.chastity +alt.fan.chaz.beastiality +alt.fan.chaz.jerry +alt.fan.chris-cornell +alt.fan.chris-elliott +alt.fan.chris-stokoe +alt.fan.christi +alt.fan.christy-canyon +alt.fan.claire-danes +alt.fan.classic.movies +alt.fan.cliff.at.ihop +alt.fan.cock-sucking +alt.fan.coli2 +alt.fan.colleen.card.hot.hot.hot +alt.fan.conan-obrien +alt.fan.conwaysteckler +alt.fan.coondog +alt.fan.corey-feldman +alt.fan.courteney-cox +alt.fan.courtney-love +alt.fan.created-worlds +alt.fan.crispin-glover +alt.fan.cropcircles +alt.fan.cypher +alt.fan.daeron +alt.fan.daisy-fuentes +alt.fan.dan-jimenez +alt.fan.dan-quayle +alt.fan.dan-scott +alt.fan.danica.mckellar +alt.fan.danni-ashe +alt.fan.daphnes-corner +alt.fan.dave-taira +alt.fan.dave_barry +alt.fan.david-bowie +alt.fan.david-cassidy +alt.fan.david-duchovny +alt.fan.david-reynolds.alien.vampire.flonk.flonk.flonk +alt.fan.david-reynolds.asswipe +alt.fan.david-reynolds.buttface +alt.fan.david-reynolds.fartknocker +alt.fan.david-reynolds.goatfucker +alt.fan.david-reynolds.wanker +alt.fan.david-starr +alt.fan.david.barker +alt.fan.david.duchovny +alt.fan.dean-erickson +alt.fan.dean-stark +alt.fan.dean-stark.advice.legal +alt.fan.dean-stark.alcoholism +alt.fan.dean-stark.alt.peeves.ex-girlfriends +alt.fan.dean-stark.alt.support.migraines +alt.fan.dean-stark.alt.support.molestation +alt.fan.dean-stark.alt.tasteless.childhood +alt.fan.dean-stark.and.laura-lemay +alt.fan.dean-stark.apparatus +alt.fan.dean-stark.bed-wetting +alt.fan.dean-stark.broken.arm +alt.fan.dean-stark.brother.insane +alt.fan.dean-stark.brother.loves.cats +alt.fan.dean-stark.canceling +alt.fan.dean-stark.cant.own.gun +alt.fan.dean-stark.cant.play.piano.anymore +alt.fan.dean-stark.chips-ahoy +alt.fan.dean-stark.comp.lang.forth +alt.fan.dean-stark.conspiracy +alt.fan.dean-stark.cripple +alt.fan.dean-stark.cypher +alt.fan.dean-stark.death-threats +alt.fan.dean-stark.diaper-play +alt.fan.dean-stark.enclave +alt.fan.dean-stark.failed.photography.class +alt.fan.dean-stark.fast-typist +alt.fan.dean-stark.fired.from.novell +alt.fan.dean-stark.first.girlfriend +alt.fan.dean-stark.flying-saucer.hard-drives +alt.fan.dean-stark.garret +alt.fan.dean-stark.glock.owner.wanna-be +alt.fan.dean-stark.goths +alt.fan.dean-stark.hearing.voices +alt.fan.dean-stark.high-school.dropout +alt.fan.dean-stark.hourly-rate +alt.fan.dean-stark.insanity.is.hereditary +alt.fan.dean-stark.killfile.artist +alt.fan.dean-stark.kkk.member +alt.fan.dean-stark.laxative-abuse +alt.fan.dean-stark.lying +alt.fan.dean-stark.many.female.friends +alt.fan.dean-stark.mediocrity +alt.fan.dean-stark.memories +alt.fan.dean-stark.missing-kim +alt.fan.dean-stark.more-for-you +alt.fan.dean-stark.my-gang +alt.fan.dean-stark.nambla-member +alt.fan.dean-stark.no-dad.calling.in.sick +alt.fan.dean-stark.no-dad.do.mom.instead +alt.fan.dean-stark.no-dad.ouch.stop +alt.fan.dean-stark.no-dad.please.dont +alt.fan.dean-stark.no.dates.in.five.years +alt.fan.dean-stark.perpetual.victim +alt.fan.dean-stark.poor +alt.fan.dean-stark.professional.unemployed.writer +alt.fan.dean-stark.psychotic.little.wanker +alt.fan.dean-stark.punkchild +alt.fan.dean-stark.quality.assurance +alt.fan.dean-stark.ranting +alt.fan.dean-stark.ranting.endlessly +alt.fan.dean-stark.restraining.order +alt.fan.dean-stark.retromoderator +alt.fan.dean-stark.rmgroup-expert +alt.fan.dean-stark.scsi.not.ide +alt.fan.dean-stark.software.tester +alt.fan.dean-stark.spamming +alt.fan.dean-stark.stalk.stalk.stalk +alt.fan.dean-stark.stalking.victim +alt.fan.dean-stark.suitcase.of.pills +alt.fan.dean-stark.tech-writer.bad +alt.fan.dean-stark.vampyres +alt.fan.dean-stark.viscera +alt.fan.dean-stark.walking-papers +alt.fan.dean-stark.wheezing.chevy +alt.fan.dean-stark.white.cockade.reject +alt.fan.dean-stark.worth.his.salt +alt.fan.dean-stark.writing +alt.fan.dean-stark.writing.poorly +alt.fan.debbie.gibson +alt.fan.debi-diamond +alt.fan.debi.diamond +alt.fan.dejanews +alt.fan.demon-local.sig-wars +alt.fan.dennis-miller +alt.fan.depeche-mode +alt.fan.devo +alt.fan.diane-witt.hair.hair.hair +alt.fan.dice-man +alt.fan.digi +alt.fan.dimitri-vulis +alt.fan.dirk-hine +alt.fan.dirk-pitt +alt.fan.dirty-whores +alt.fan.disney.afternoon +alt.fan.disney.gargoyles +alt.fan.dmitri-vulis +alt.fan.doc-savage +alt.fan.doctor.bashir.grind.thrust.drool +alt.fan.don-cherry +alt.fan.don-imus +alt.fan.don-n-mike +alt.fan.don.baker-fupa +alt.fan.don.no-soul.simmons +alt.fan.donnas-nipples +alt.fan.doofer-mouse +alt.fan.dopefish +alt.fan.douglas-adams +alt.fan.douglas-adams.forty-two +alt.fan.dpk +alt.fan.dr-pepper +alt.fan.dragonlance +alt.fan.dragons +alt.fan.drew-barrymore +alt.fan.drmellow +alt.fan.dudikoff +alt.fan.dune +alt.fan.dunkahn +alt.fan.e-t-b +alt.fan.earl-curley +alt.fan.echo-johnson +alt.fan.ed-conrad +alt.fan.eddie-izzard +alt.fan.eddings +alt.fan.edward-furlong +alt.fan.edward.furlong +alt.fan.elite +alt.fan.elite.project +alt.fan.elton-john +alt.fan.elvis-costello +alt.fan.elvis-presley +alt.fan.enya +alt.fan.eric-cantona +alt.fan.erik.max.francis.is.mc2 +alt.fan.errol-flynn +alt.fan.eva-ionesco.moderated +alt.fan.fairuza-balk +alt.fan.felix-p-thomas +alt.fan.finnish.booty.shakers +alt.fan.fiona-apple +alt.fan.flintstone.fred +alt.fan.foobar +alt.fan.frank-zappa +alt.fan.fratellibros +alt.fan.fred-perry +alt.fan.funky.buttlovin +alt.fan.furry +alt.fan.furry.bleachers +alt.fan.furry.fleas +alt.fan.furry.muck +alt.fan.furry.sny-windstrup +alt.fan.g-gordon-liddy +alt.fan.gary.johnson.control-freak +alt.fan.gburnore +alt.fan.geezer-seeger +alt.fan.gene-scott +alt.fan.geoff.miller +alt.fan.george-clooney +alt.fan.george-maharis +alt.fan.george-michael +alt.fan.gill-anderson +alt.fan.ginger-lynn +alt.fan.gloriamundi +alt.fan.goat +alt.fan.godzilla +alt.fan.goons +alt.fan.grady-ward +alt.fan.graveyard +alt.fan.greaseman +alt.fan.greg-kinnear +alt.fan.greg_gardner +alt.fan.gregorsamsa +alt.fan.guusje +alt.fan.gwyn-paltrow +alt.fan.hall-and-oates +alt.fan.hannigan +alt.fan.hanson +alt.fan.hanson.die.die.die +alt.fan.harlan-ellison +alt.fan.harrison-ford +alt.fan.hawaii-five-o +alt.fan.haye-lau +alt.fan.head-librarian +alt.fan.hedgehog +alt.fan.heinlein +alt.fan.helen-hunt +alt.fan.hello-kitty +alt.fan.heman-shera +alt.fan.henry-rollins +alt.fan.hofstadter +alt.fan.holmes +alt.fan.howard-stern +alt.fan.howard-stern.fartman +alt.fan.howard-stern.humor.suffering +alt.fan.howard-stern.jew.jew.jew +alt.fan.howard-stern.kip-kinkel.lovetoy +alt.fan.howard-stern.subtle-racism +alt.fan.hudson-leick +alt.fan.icky-shuffle +alt.fan.italian.anime.dragonball +alt.fan.ivan +alt.fan.ivor-cutler +alt.fan.jai-maharaj +alt.fan.james-bond +alt.fan.james-koput.net-god +alt.fan.james-rothaar +alt.fan.janet-jackson +alt.fan.jason-miller +alt.fan.jason.black +alt.fan.jay-leno +alt.fan.jean-auel +alt.fan.jean_auel +alt.fan.jeff-goldblum +alt.fan.jeff-workman +alt.fan.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt.jeffery.hunt +alt.fan.jello-biafra +alt.fan.jen-aniston +alt.fan.jenny-mccarthy +alt.fan.jeremy-reimer +alt.fan.jeri-ryan +alt.fan.jerky-boys +alt.fan.jerry-springer +alt.fan.jessica-alba +alt.fan.jesus-christ +alt.fan.jewel +alt.fan.jim-carrey +alt.fan.jim-rome +alt.fan.jim-rose +alt.fan.jimi-hendrix +alt.fan.jimmy-buffett +alt.fan.jmjarre +alt.fan.joe-crummey +alt.fan.joe-crummy +alt.fan.joe-satriani +alt.fan.joel-furr +alt.fan.john-cusack +alt.fan.john-denver +alt.fan.john-gary +alt.fan.john-travolta +alt.fan.john-turmel +alt.fan.john-winston +alt.fan.john.mackey +alt.fan.johnny-winter +alt.fan.josef-mengele +alt.fan.joshua-kramer +alt.fan.jph +alt.fan.julia-hayes +alt.fan.julian.macassey +alt.fan.julius +alt.fan.karl-malden.cypher +alt.fan.karl-malden.kidneys +alt.fan.karl-malden.nose +alt.fan.karla-homolka +alt.fan.kate-moss +alt.fan.kate-winslet +alt.fan.katerena.eiermann +alt.fan.kathy-jo +alt.fan.katie-holmes +alt.fan.kay-dekker +alt.fan.kd-lang +alt.fan.keanu-reeves +alt.fan.keanu-reeves.moderated +alt.fan.kerri-kendall +alt.fan.kia-mennie +alt.fan.kieran-snyder +alt.fan.kim-bach.cheater +alt.fan.kim-bach.depraved +alt.fan.kim-bach.forger +alt.fan.kim-bach.slut.slut.slut +alt.fan.kinks +alt.fan.kipland-kinkel +alt.fan.kipland-kinkel.shootist +alt.fan.kirsten-dunst +alt.fan.kournikova +alt.fan.kristiina.johansson +alt.fan.kroq +alt.fan.la-femme.nikita +alt.fan.la-radio +alt.fan.labin +alt.fan.landmark +alt.fan.landrover +alt.fan.lara-croft +alt.fan.larisa-oleynik +alt.fan.laurie.anderson +alt.fan.lava.lamps +alt.fan.lemurs +alt.fan.leo-dicaprio +alt.fan.letterman +alt.fan.letterman.top-ten +alt.fan.linda-hamilton +alt.fan.lion-king +alt.fan.lisa-boyle +alt.fan.liv-tyler +alt.fan.liz-phair +alt.fan.louise +alt.fan.loveline +alt.fan.ltte +alt.fan.machnhead +alt.fan.macross +alt.fan.madonna +alt.fan.major.kira.pant.pant.pant +alt.fan.mandy-patinkin +alt.fan.marcia-clark +alt.fan.marieke +alt.fan.mark-brian +alt.fan.mark-falzmann +alt.fan.mark-harrison +alt.fan.martin-amis +alt.fan.martin-donovan +alt.fan.marv-albert +alt.fan.marys-danish +alt.fan.matchbox20 +alt.fan.mduell +alt.fan.meg-ryan +alt.fan.megahal +alt.fan.mel-brooks +alt.fan.melinda.messenger +alt.fan.metal +alt.fan.metal.burzum +alt.fan.metal.demilich +alt.fan.metal.graveland +alt.fan.metal.monstrosity +alt.fan.metal.suffocation +alt.fan.mich-pfeiffer +alt.fan.michael-ball +alt.fan.michael-biehn +alt.fan.michael-bolton +alt.fan.michaela.strachan +alt.fan.mike-jittlov +alt.fan.mike-myers +alt.fan.milla-jovovich +alt.fan.mira-furlan +alt.fan.mk-flynn +alt.fan.moesart2000 +alt.fan.monica-potter +alt.fan.monty-python +alt.fan.morganna.queen.of.the.damned +alt.fan.movie.willy-wonka +alt.fan.moxy.fruvous +alt.fan.mozilla +alt.fan.mr-kabc +alt.fan.mr-kfi +alt.fan.mr.tribe +alt.fan.mrclean +alt.fan.mst3k +alt.fan.muchmusic +alt.fan.muchmusic.bill-welychka +alt.fan.naked-guy +alt.fan.nance +alt.fan.nathan.brazil +alt.fan.neil-gaiman +alt.fan.neve +alt.fan.news-admins +alt.fan.newt-gingrich +alt.fan.nicki-lewis +alt.fan.nietzsche +alt.fan.niina.reiju +alt.fan.nike +alt.fan.nikita-borisov +alt.fan.ninja-turtles +alt.fan.no-doubt +alt.fan.noah-wyle +alt.fan.noam-chomsky +alt.fan.norm-macdonald +alt.fan.oingo-boingo +alt.fan.oj-simpson +alt.fan.oj-simpson.and.cypher +alt.fan.ok-soda +alt.fan.okies +alt.fan.oksana-bayul.small-tits +alt.fan.oksana.bayul +alt.fan.oliver1 +alt.fan.orbitz +alt.fan.pallindromes.racecar.semordnillap.naf.tla +alt.fan.pam-anderson +alt.fan.pamwatch +alt.fan.pat-richardson +alt.fan.pat-robertson +alt.fan.patricia +alt.fan.patty-smyth +alt.fan.patty.smyth +alt.fan.paul-clapman +alt.fan.paul-crissy +alt.fan.paul.bradley +alt.fan.pauline.hanson +alt.fan.pegas +alt.fan.penn-n-teller +alt.fan.pern +alt.fan.perry-rhodan +alt.fan.peter-david +alt.fan.peter-hammill +alt.fan.petra-verkaik +alt.fan.phil-cox +alt.fan.philip-dick +alt.fan.philippa.forrester +alt.fan.phoebe-cates +alt.fan.pierce-brosnan +alt.fan.piers +alt.fan.piers-anthony +alt.fan.pingu.marp.marp +alt.fan.pj-orourke +alt.fan.plushies +alt.fan.pooh +alt.fan.pornstar.darrian +alt.fan.pornstar.janine +alt.fan.pornstar.shane +alt.fan.power-rangers +alt.fan.pratchett +alt.fan.pratchett.announce +alt.fan.pratchett.bofh +alt.fan.pratchett.old-farts +alt.fan.princess-diana +alt.fan.publius +alt.fan.q +alt.fan.r-takahashi +alt.fan.rachael-l-cook +alt.fan.rachel-perkins.bah.bah.bah +alt.fan.ram-samudrala +alt.fan.ray-cobb +alt.fan.ray-taliaferro +alt.fan.rdm +alt.fan.red.green +alt.fan.regular-guys +alt.fan.ren-and-stimpy +alt.fan.renee-oconnor +alt.fan.ricci.christina +alt.fan.rich-conaty +alt.fan.richard-nixon +alt.fan.ritchie-valens +alt.fan.rmimulvex +alt.fan.roadrunner +alt.fan.rob-bartlett +alt.fan.robert-beltran +alt.fan.robert-cray +alt.fan.robert-jordan +alt.fan.robert-tilton +alt.fan.roberta.hatch +alt.fan.robin-williams +alt.fan.robotech +alt.fan.ronald-reagan +alt.fan.rosalina +alt.fan.rosieodonnell +alt.fan.rowan-atkinson +alt.fan.roya +alt.fan.rspwwcw +alt.fan.rumpole +alt.fan.rush-limbaugh +alt.fan.rush-limbaugh.tv-show +alt.fan.sailor-moon +alt.fan.salmonella +alt.fan.sam-raimi +alt.fan.samantha-fox +alt.fan.samanthamathis +alt.fan.sana-chan +alt.fan.sandra-bullock +alt.fan.sandra-bullock.binaries +alt.fan.sandy-duncan.eye-on-rmt +alt.fan.satan +alt.fan.schlanger.sports-monster +alt.fan.schwarzenegger +alt.fan.scream +alt.fan.sean-obrien +alt.fan.secret.org +alt.fan.sexy-wings +alt.fan.shania-twain +alt.fan.shirley-manson +alt.fan.shostakovich +alt.fan.sister-pooh +alt.fan.skidmore.catherine +alt.fan.skinny +alt.fan.snopes +alt.fan.sodomy +alt.fan.sodomy.christian +alt.fan.sodomy.uncontrollable +alt.fan.soft-targets +alt.fan.soledad-obrien +alt.fan.sonic-hedgehog +alt.fan.sophie-marceau +alt.fan.southpark.kenny.die.die.die +alt.fan.space-ghost +alt.fan.spalding-gray +alt.fan.speedbump +alt.fan.spinal-tap +alt.fan.stamp.collecting +alt.fan.starwars +alt.fan.steffi-graf +alt.fan.steve-winter +alt.fan.steve.ward.gr8roc.records.desperate.loser +alt.fan.steven.algieri +alt.fan.sting +alt.fan.stonage +alt.fan.stonecutters +alt.fan.stretchpants +alt.fan.strokrace +alt.fan.suckdotcom +alt.fan.surak +alt.fan.susan-thunder +alt.fan.taneli.suikkanen +alt.fan.tank-girl +alt.fan.tarantino +alt.fan.tazerfish +alt.fan.tea-leoni +alt.fan.ted-neeley +alt.fan.teen.idols +alt.fan.teen.idols.princewilliam +alt.fan.teen.starlets +alt.fan.televisionx.linda-leigh +alt.fan.televisionx.lynda-leigh +alt.fan.terhi.rama +alt.fan.teri-weigel +alt.fan.terri.disisto +alt.fan.terry-venables +alt.fan.the-bob +alt.fan.the.legend.of.oliver1.the.mad.newsgrouper +alt.fan.thedavid +alt.fan.thewurm +alt.fan.thomas-pynchon +alt.fan.thorntonwilder +alt.fan.thundercats +alt.fan.thursday +alt.fan.tigger +alt.fan.tim-sutter +alt.fan.tito +alt.fan.toiya-prather +alt.fan.tolkien +alt.fan.tom-clancy +alt.fan.tom-leykis +alt.fan.tom-robbins +alt.fan.tom-snyder +alt.fan.tonester +alt.fan.tonya-harding.whack.whack.whack +alt.fan.traci-lords +alt.fan.tractors +alt.fan.tupac.dead.dead.dead +alt.fan.turboslug +alt.fan.u.pornpig.ass +alt.fan.u2 +alt.fan.unabomber +alt.fan.unigrouper +alt.fan.val-kilmer +alt.fan.van-damme +alt.fan.velocity.girl +alt.fan.veronika-moser +alt.fan.vic-reeves +alt.fan.voltron +alt.fan.wacky.crackheads +alt.fan.warlord +alt.fan.webgod +alt.fan.wedge +alt.fan.wednesday +alt.fan.wesley-willis +alt.fan.whitevampire +alt.fan.wil-wheaton +alt.fan.winona-ryder +alt.fan.wodehouse +alt.fan.woody-allen +alt.fan.xlock-rotor +alt.fan.young.celebrities.retromod +alt.fan.zathras +alt.fan.zelong +alt.fan.zerodragon +alt.fan.zmienna.wiadomokto +alt.fan.zoe-ball +alt.fan.zoogz-rift +alt.fandom.cons +alt.fandom.misc +alt.fans.chat2 +alt.fans.danhoffman +alt.fans.maw +alt.fans.tim_skirvin.die.die.die +alt.fans.uiuc.spank.spank.spank +alt.fantasy +alt.fantasy.conan +alt.fantasy.er-burroughs +alt.fashion +alt.fashion.craig-oldfield.cheap-suit +alt.fashion.crossdressing +alt.fashion.men +alt.fashion.petite +alt.fax +alt.faxmail.com +alt.february +alt.feedme +alt.feminazis +alt.feminism +alt.feminism.individualism +alt.fenphen +alt.fetish.beatrix-potter +alt.fetish.long-nails.male +alt.fetish.tongue +alt.feudalism +alt.fff.fff +alt.fiction.original +alt.fiesta-bowl.irish +alt.fifty-plus.friends +alt.fiftyplus +alt.filesystems.afs +alt.filtration.dust +alt.final.conflict +alt.final.test.i.promise +alt.final.test.i.promise2 +alt.firefighters +alt.firefighters.binaries +alt.firefighters.mike-austin +alt.fishing +alt.fishing.catfish +alt.fishing.minnesota +alt.fitness.marketplace +alt.flaagg.sucks.sucks.sucks +alt.flame +alt.flame.abcdi +alt.flame.abortion +alt.flame.airlines +alt.flame.baja-rat +alt.flame.bass-laffer +alt.flame.bertrand-meyer +alt.flame.bon-giovanni +alt.flame.cincinnati +alt.flame.dean-stark +alt.flame.dr-tom.4d.vamps.acid +alt.flame.feminazis +alt.flame.football.notre-dame +alt.flame.frogs +alt.flame.fwli +alt.flame.girlfriend +alt.flame.graham-newsham +alt.flame.ic +alt.flame.icanect.net +alt.flame.inner-circle +alt.flame.james-koput +alt.flame.james.ngygook +alt.flame.james.tiberius.kirk +alt.flame.jay-stevens +alt.flame.jesus.christ +alt.flame.jews +alt.flame.kevin-keegan +alt.flame.macintosh +alt.flame.michael-hirtes +alt.flame.nerds.jn +alt.flame.net-abuse +alt.flame.net.illiterates +alt.flame.nice-people +alt.flame.niggers +alt.flame.preps +alt.flame.psychiatry +alt.flame.rush-limbaugh +alt.flame.spanks +alt.flame.spelling +alt.flame.spice-girls +alt.flame.sports-suck.moderated +alt.flame.suburbanazis +alt.flame.tcs.die.die.die +alt.flame.tim-law +alt.flame.tripp.snitch.snitch.snitch +alt.flame.tsr +alt.flame.unigrouper +alt.flame.uunet +alt.flame.whites +alt.flamenet +alt.flamenet.lame.lame.lame +alt.flarf.fnord +alt.flarf.parp +alt.flarf.rulez.the.net +alt.flashback +alt.flute +alt.flying.cows +alt.folklore.college +alt.folklore.computer +alt.folklore.computers +alt.folklore.gemstones +alt.folklore.ghost-stories +alt.folklore.ghost-stories.binaries +alt.folklore.herbs +alt.folklore.info +alt.folklore.internet +alt.folklore.military +alt.folklore.music +alt.folklore.peter-dubuque +alt.folklore.science +alt.folklore.suburban +alt.folklore.urban +alt.foo +alt.foo.bar +alt.foo.bar.qux.xyzxyz +alt.food +alt.food.asian +alt.food.barbecue +alt.food.bw3 +alt.food.chocolate +alt.food.cocacola +alt.food.coffee +alt.food.dennys +alt.food.diabetic +alt.food.fast-food +alt.food.fat-free +alt.food.grits +alt.food.hamburger +alt.food.ice-cream +alt.food.low-fat +alt.food.lutefisk +alt.food.mcdonalds +alt.food.mentos +alt.food.olestra +alt.food.pancakes +alt.food.peeps +alt.food.pez +alt.food.professionals +alt.food.red-lobster +alt.food.safety +alt.food.sushi +alt.food.taco-bell +alt.food.vegan +alt.food.waffle-house +alt.food.wine +alt.foot.fat-free +alt.ford.falcon +alt.foreplay +alt.forestry +alt.forsale +alt.forsale.grandjunction +alt.forsale.nutrition +alt.forsale.spam +alt.fozzybear.wokka.wokka.wokka +alt.fractal-design.painter +alt.fractals +alt.fractals.pictures +alt.france +alt.franco.sexe.rencontre +alt.francosexe.rencontre +alt.frank.magazine +alt.frankv +alt.fraternity.sorority +alt.freaks +alt.freedom +alt.freedom.jbpe +alt.freedom.jbpe.d +alt.freedom.jbpe.i-colla +alt.freedom.jbpe.sm +alt.freedom.jbpel +alt.freedom.jbpel-s +alt.freedom.of.information.act +alt.freedomain.discuss +alt.freedomain.registry +alt.freemasonry +alt.freenet +alt.freespeech +alt.freewebhosting +alt.freewebhosting.support +alt.friday +alt.friend.emoji +alt.frisco +alt.fuck +alt.fuck.jay.t.carrigan.stamps +alt.fuck.menjy.in.the.ass +alt.fuck.niggers +alt.fuck.racists +alt.fuck.the.skull.of.alan.bstard +alt.fuckhead.guy-polis.thinks.everyone.is.dmitri-vulis +alt.fuckhead.mao-tse-tung +alt.fuckin.rowin.mate +alt.fukengruven +alt.fun.with.luc +alt.funk-you +alt.funnytown +alt.future.millennium +alt.galactic-guide +alt.galactically.pointless +alt.gambling +alt.games +alt.games.3dfx +alt.games.3dfx.brother +alt.games.adnd +alt.games.air-warrior +alt.games.apba +alt.games.apogee +alt.games.aquazone +alt.games.atari +alt.games.atr +alt.games.atr.rpg +alt.games.baldurs-gate +alt.games.basketball.pro.fantasy.topofthekey +alt.games.battlezone +alt.games.bc3000ad +alt.games.bladerunner +alt.games.blood +alt.games.builder.dcgames +alt.games.carmageddon +alt.games.civ2 +alt.games.civnet +alt.games.classic-crpgs +alt.games.command-n-conq +alt.games.command-n-conq.red-alert +alt.games.command.and.conquer +alt.games.cosmic-wimpout +alt.games.creatures +alt.games.daggerfall +alt.games.dark-colony +alt.games.dark-forces +alt.games.dark-reign +alt.games.dean-stark +alt.games.descent +alt.games.descent.flame +alt.games.diablo +alt.games.dice +alt.games.doom +alt.games.doom.announce +alt.games.doom.ii +alt.games.doom.newplayers +alt.games.down-economy +alt.games.duke3d +alt.games.duke3d.binaries +alt.games.duke3d.editing +alt.games.dune-2000 +alt.games.dune-ii.virgin-games +alt.games.dungeon-keeper +alt.games.dungeon.keeper +alt.games.dur-trs-trap +alt.games.dust +alt.games.eamon +alt.games.elder-scrolls +alt.games.empire-deluxe +alt.games.enix +alt.games.everquest +alt.games.final-fantasy +alt.games.final-fantasy.cypher +alt.games.final-fantasy.fiction +alt.games.final-fantasy.hentai +alt.games.final-fantasy.meow +alt.games.final-fantasy.music +alt.games.final-fantasy.rpg +alt.games.forsaken +alt.games.fps-football +alt.games.frp.dnd-util +alt.games.frp.live-action +alt.games.frp.verge +alt.games.galileo +alt.games.gazillionaire +alt.games.gb +alt.games.glider-pro +alt.games.haven +alt.games.heavy-gear +alt.games.heretic +alt.games.hexen +alt.games.ideas +alt.games.illuminati +alt.games.interplay +alt.games.interplay.freespace +alt.games.irps +alt.games.jedi-knight +alt.games.kali +alt.games.kesmai-legends +alt.games.ki +alt.games.lands-of-lore +alt.games.lynx +alt.games.mame +alt.games.marathon +alt.games.mechwarrior2 +alt.games.mk +alt.games.mk.mk3 +alt.games.moo2 +alt.games.mordor +alt.games.mornington.crescent +alt.games.mornington.cresent +alt.games.mtrek +alt.games.myst +alt.games.myth +alt.games.netrek.paradise +alt.games.nettvshows.gamasutratv +alt.games.nettvshows.game.time.prime.time +alt.games.nettvshows.gametime +alt.games.nettvshows.inside.the.pgl +alt.games.nettvshows.newsexpress +alt.games.nettvshows.quakecast +alt.games.outlaws +alt.games.phantasy-star +alt.games.ping-pong +alt.games.play-by-mail.quest +alt.games.powervr +alt.games.quake2 +alt.games.rac-rally +alt.games.redalert +alt.games.redbaron +alt.games.resident-evil +alt.games.riddler +alt.games.riven +alt.games.rpg.ix +alt.games.rpg.live-action.high-fantasy +alt.games.rpg.quadrant +alt.games.rpg.startrek.quadrant +alt.games.sensi-soccer +alt.games.sf2 +alt.games.shadow-warrior +alt.games.shared-reality.fed-frontier +alt.games.shared-world.nexus +alt.games.sierra.therealm +alt.games.soccer +alt.games.sony.yaroze +alt.games.starcraft +alt.games.starshield +alt.games.startrek.ssg +alt.games.stunt-island +alt.games.subspace +alt.games.tetrinet +alt.games.thol-far +alt.games.tiberian-sun +alt.games.tolkien.rpg +alt.games.tombraider +alt.games.torg +alt.games.total-annihil +alt.games.total-annihil.editing +alt.games.treasurequest +alt.games.ultima-online +alt.games.unidom +alt.games.unreal +alt.games.upcoming-3d +alt.games.vampire.the.masquerade +alt.games.vampire.tremere +alt.games.vga-planets +alt.games.video.classic +alt.games.video.digitiser +alt.games.video.emulation +alt.games.video.import.japanese +alt.games.video.nintendo-64 +alt.games.video.nintendo-64.faqs +alt.games.video.sega-saturn +alt.games.video.sega-saturn.faqs +alt.games.video.tiger.game-com +alt.games.warcraft +alt.games.warcraft.draenor +alt.games.wargames +alt.games.warlords3 +alt.games.wc3 +alt.games.whitewolf +alt.games.whitewolf.mage +alt.games.whitewolf.rage +alt.games.wing-commander +alt.games.wireplay +alt.games.worms +alt.games.wrestling +alt.games.xpilot +alt.games.xtrek +alt.gammaforce +alt.gammaforce.irc +alt.gammaforce.warez +alt.gangs +alt.gangs.bloods +alt.gap.international.chat +alt.gap.international.enquiries +alt.gap.international.sales +alt.gap.international.support +alt.gathering.rainbow +alt.gathering.woodstock +alt.geek +alt.geek.supremacy +alt.gehirn.los +alt.genealogy +alt.genealogy.surnames.collingridge +alt.genius.alan-bstard +alt.genius.anus +alt.genius.big-daddy-zeus +alt.genius.bill-palmer +alt.genius.cuchulain +alt.genius.cypher +alt.genius.dave-ratcliffe +alt.genius.doom +alt.genius.panikovsky +alt.genius.tom-harden +alt.gib +alt.gibraltar +alt.gicho +alt.gnashing-teeth +alt.gnn.exodus +alt.go.go.nancy +alt.goat +alt.gobment.lones +alt.god.cypher +alt.god.grubor +alt.goddess.ayla +alt.goddess.timothy.sutter +alt.gods +alt.good.morning +alt.good.news +alt.goodpaster +alt.goohead +alt.gossip.celebrities +alt.gossip.chs97 +alt.gossip.royalty +alt.gothic +alt.gothic.announce +alt.gothic.architecture +alt.gothic.convergence +alt.gothic.culture +alt.gothic.fashion +alt.gothic.imperia +alt.gothic.music +alt.gothic.nightclubs +alt.gothic.nights +alt.gothic.pretentions +alt.gothic.suicide +alt.gourmand +alt.government.abuse +alt.government.employees +alt.government.ssd-benefits.moderated +alt.government.ssdi-benefits +alt.government.ssdi-benefits.moderated +alt.government.ssdi.benefits +alt.grad-student.tenured +alt.graffiti +alt.graphics +alt.graphics.bryce +alt.graphics.electrogig.ex-worker +alt.graphics.electrogig.users +alt.graphics.gifanimation +alt.graphics.illustrator +alt.graphics.photoshop +alt.graphics.pixutils +alt.graphics.truespace +alt.great-lakes +alt.great.ass.paulina +alt.grelb +alt.grok +alt.groppi +alt.groppi.die.die.die +alt.guinea.pig.conspiracy +alt.guitar +alt.guitar.amps +alt.guitar.bass +alt.guitar.effects +alt.guitar.lap-pedal +alt.guitar.rickenbacker +alt.guitar.tab +alt.hacker +alt.hackers +alt.hackers.discuss +alt.hackers.groups +alt.hackers.groups.moderated +alt.hackers.malicious +alt.hacking +alt.hacking.in.progress +alt.hackintosh +alt.hale-bobb +alt.halloween.boo +alt.ham-radio.marketplace +alt.ham-radio.packet +alt.ham-radio.vhf-uhf +alt.hangover +alt.happy.birthday.to.me +alt.happy.valley +alt.happyclown +alt.hardcore +alt.harpa +alt.healing.flower-essence +alt.healing.reiki +alt.health +alt.health.ayurveda +alt.health.cfids-action +alt.health.cfs +alt.health.dental-amalgam +alt.health.fasting +alt.health.hmo +alt.health.oxygen-therapy +alt.health.systems +alt.health.virus.cure.alternatives +alt.help.businesscalc +alt.hemp +alt.hemp.octa +alt.hemp.politics +alt.hentai.sailor-moon +alt.heraldry.sca +alt.heritage.front +alt.herpes.personals +alt.hey.quad.nice.ass +alt.hi-po.mopars +alt.hi.are.you.cute +alt.highfields.school +alt.hindu +alt.history.abe-lincoln +alt.history.ancient-worlds +alt.history.british +alt.history.colonial +alt.history.costuming +alt.history.exile +alt.history.future +alt.history.living +alt.history.ocean-liners.titanic +alt.history.punitive.expedition +alt.history.what-if +alt.hobbies.beekeeping +alt.hobbies.boyscouts +alt.hobbies.boyscouts.oa +alt.hobbies.racing-pigeons +alt.hobbies.slotcars +alt.hocom +alt.holoworld.rpg +alt.home-theater.marketplace +alt.home-theater.misc +alt.home.repair +alt.homebrewing +alt.homepages.designtips.uk +alt.homepages.geocities +alt.homosexual +alt.homosexual.falimortis +alt.homosexual.lesbian +alt.homosexuality.death-metal +alt.honesty +alt.horology +alt.horror +alt.horror.creative +alt.horror.cthulhu +alt.horror.elmstreet +alt.horror.video.collectable +alt.horror.werewolves +alt.horseback.riding +alt.horsecare.basics +alt.hotel666 +alt.housing.nontrad +alt.how-to +alt.how.to.create.a.newsgroup +alt.how.to.moderate.a.newsgroup +alt.html +alt.html.editors.enhanced-html +alt.html.editors.webedit +alt.html.webedit +alt.human-brain +alt.humor +alt.humor.best-of-usenet +alt.humor.best-of-usenet.d +alt.humor.bluesman +alt.humor.dutch +alt.humor.holocaust +alt.humor.jewish +alt.humor.jewish.anti-goy +alt.humor.jewish.genocide +alt.humor.jewish.mendacious +alt.humor.jewish.netcop +alt.humor.net-abuse +alt.humor.parodies +alt.humor.puns +alt.hvac +alt.hypertext +alt.hypnosis +alt.hypnosis.hypnotherapy +alt.hypnotherapy +alt.i-love-you +alt.i.love.abbie.cummings +alt.ibc +alt.ibc.guide.badge.trading +alt.ibc.scout.badge.trading +alt.icelandic.waif.bjork.bjork.bjork +alt.iceman +alt.idiot.andrew-gierth +alt.idiot.anti-oliver +alt.idiot.cypher +alt.idiot.david-farrar +alt.idiot.fred-bloggs +alt.idiot.hens +alt.idiot.kalisch +alt.idiot.moo2 +alt.idiot.shut-up-cunter +alt.idiot.sputers +alt.idiot.w-van-heusden +alt.idiot.wolf-moonchild +alt.idiots +alt.illuminati +alt.illustration +alt.im.angry +alt.im.having.a.rotten.day +alt.image.medical +alt.immersion +alt.immersion.d +alt.immersion.duffman +alt.immortal +alt.immortal.super-grover +alt.impeach.clinton +alt.incompetence.phil-oliver +alt.india.cricket +alt.india.hockey +alt.india.progressive +alt.india.table-tennis +alt.india.tennis +alt.individualism +alt.industrial +alt.infertility +alt.infertility.alternatives +alt.infertility.pregnancy +alt.infertility.primary +alt.infertility.secondary +alt.infertility.surrogacy +alt.internet +alt.internet.access.wanted +alt.internet.appliances +alt.internet.commerce +alt.internet.free-services +alt.internet.guru +alt.internet.i-box +alt.internet.media-coverage +alt.internet.newservers +alt.internet.providers.africa +alt.internet.providers.america +alt.internet.providers.asia-oceany +alt.internet.providers.europe +alt.internet.providers.europe.relcom-sucks +alt.internet.providers.uk +alt.internet.services +alt.internet.stuff +alt.internet.talk +alt.internet.talk-radio +alt.internet.talk.bizarre +alt.internet.yokota.general +alt.internic.billing.problems +alt.intsec +alt.inventors +alt.inventorworld +alt.invest.market.crash +alt.invest.penny-stocks +alt.invest.real-estate +alt.iomega.zip.jazz +alt.ipl.business +alt.ipl.discussion +alt.ipl.messages +alt.ipl.mp3.encrypted +alt.ipl.req +alt.irc +alt.irc.announce +alt.irc.bitchx +alt.irc.bots +alt.irc.bots.eggdrop +alt.irc.brasirc +alt.irc.camelot +alt.irc.channel.fortress +alt.irc.channel.macintosh +alt.irc.dal-net.tiny-toons +alt.irc.dalnet +alt.irc.efnet +alt.irc.fan.slackie +alt.irc.fan.slackie.nude +alt.irc.fefnet +alt.irc.hottub +alt.irc.ircii +alt.irc.jungle +alt.irc.kewl +alt.irc.lamer.redknapp.die.die.die +alt.irc.mirc +alt.irc.mirc.scripts +alt.irc.network.wwfin +alt.irc.peacefull +alt.irc.psycloud +alt.irc.questions +alt.irc.ratsnest +alt.irc.recovery +alt.irc.romance +alt.irc.sirc +alt.irc.starlink +alt.irc.undernet +alt.irc.undernet.authors +alt.irc.undernet.channels +alt.irc.undernet.channels.new2irc +alt.irc.undernet.ska +alt.irc.webnet +alt.irc.za +alt.irony +alt.irs.class-action +alt.irs.general +alt.is +alt.is.bill.gates.satan +alt.is.doomed +alt.is.too +alt.islam.sufism +alt.ita.anime +alt.ita.anime.commercial +alt.ita.anime.info +alt.ita.anime.manga +alt.ita.anime.marketplace +alt.italia +alt.italian.anime-manga +alt.january +alt.japanese.aidoru.honmono.nuudo.or.sekusii.gazou +alt.japanese.bbs.asciinet +alt.japanese.misc +alt.japanese.neojapan.b.p.kodomo +alt.japanese.neojapan.bainari.gazou.eroero.rorikon +alt.japanese.neojapan.facism.japan.news-admin +alt.japanese.neojapan.fairu.gazou.loliloli +alt.japanese.neojapan.feed +alt.japanese.neojapan.fetish.lolita +alt.japanese.neojapan.fetish.lolita.anime +alt.japanese.neojapan.fj-sucker.die.die.die +alt.japanese.neojapan.gazou.shoujo +alt.japanese.neojapan.hackers.nifty +alt.japanese.neojapan.hackers.pay-site +alt.japanese.neojapan.hackers.swpw +alt.japanese.neojapan.hackintosh +alt.japanese.neojapan.lolita +alt.japanese.neojapan.pedophilia +alt.japanese.neojapan.providers +alt.japanese.neojapan.rorikon +alt.japanese.neojapan.sakura +alt.japanese.neojapan.swpw +alt.japanese.neojapan.warez.ibm-pc +alt.japanese.neojapan.warez.ibmpc +alt.japanese.text +alt.jay.and.jeanne.bitch.here +alt.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh.jdh +alt.jeep-l +alt.jeff.dr +alt.jeffery-hunt.newgroup.newgroup.newgroup.does.this.make.me.a.hypocrite +alt.jen-is-beavis +alt.jerry.kuntz.cool.dude +alt.jerzu +alt.jesse-helms.sucks +alt.jimmy.t.sharbuck.3d.god.god.god +alt.jjj.jjj +alt.jmj97 +alt.jobs +alt.jobs.nw-arkansas +alt.jobs.offered +alt.jobs.overseas +alt.jobs.spam +alt.john-denver.dead.dead.dead +alt.jokes.limericks +alt.jokes.pentium +alt.journalism +alt.journalism.criticism +alt.journalism.drudge +alt.journalism.drudgereport +alt.journalism.freelance +alt.journalism.gay-press +alt.journalism.gonzo +alt.journalism.music +alt.journalism.newspapers +alt.journalism.newspapers.wkly-worldnews +alt.journalism.photo +alt.journalism.print +alt.journalism.students +alt.jpw +alt.jraxis +alt.juddians +alt.juddians.bbb +alt.july +alt.june +alt.just-a-student.like-you +alt.just.testing +alt.justnormal +alt.jyotish +alt.kalbo +alt.karen +alt.kawaly +alt.kc.bbs +alt.ken.starr.traitor.traitor.traitor +alt.ketchup +alt.kids-talk +alt.kids-talk.penpals +alt.kill.spammers +alt.kill.the.whales +alt.knoxfreevoice +alt.kook.of.month.phil-oliver +alt.kook.of.month.phil-oliver.win.win.win +alt.kooky.scientists +alt.lambda.education +alt.lamers.atma +alt.lamers.atma.owww.dad.stop.it.not.tonight +alt.lamers.james-koput.net-abuser +alt.lamers.janet-reno +alt.lamers.netcop +alt.lamers.netcop.david-farrar +alt.lamers.news.admin.net-abuse.misc +alt.lamers.news.admin.net-abuse.usenet +alt.lamers.pagan.donal +alt.lamers.rage-machine +alt.lamers.usa.janet-reno +alt.lampiao +alt.landscape.architecture +alt.lang +alt.lang.4gl +alt.lang.asm +alt.lang.basic +alt.lang.ca-realizer +alt.lang.delphi +alt.lang.euphoria +alt.lang.layout +alt.lang.powerbasic +alt.lang.vb5.rumors +alt.language +alt.language.artificial +alt.language.artificial.ngl +alt.language.balita-news +alt.language.cebuano +alt.language.ebonics +alt.language.english.spelling.reform +alt.language.eubonics +alt.language.hindi +alt.language.kapampangan +alt.language.patterns +alt.language.poetry.pure-silk +alt.language.spanish +alt.language.tanji +alt.language.urdu.poetry +alt.larryville +alt.las-vegas.gambling +alt.lasers +alt.lasik-eyes +alt.law.enforcement.wurk +alt.lawyers.sue.sue.sue +alt.leaks +alt.lefthanders +alt.legend.atlantis +alt.legend.king-arthur +alt.legends.atlantis +alt.legio-darkyard +alt.lemmings +alt.lenny +alt.lesbian.feminist.poetry +alt.lets.kill.yuri.rutman +alt.letzebuerger +alt.liberty-vs.conspiracy +alt.licker.store +alt.life.afterlife +alt.life.internet +alt.life.itself +alt.life.sucks +alt.life.sucks.cypher +alt.life.universe.everything +alt.lifestyle.barefoot +alt.lifestyle.furry +alt.lifestyle.substance-free +alt.lighters +alt.limpdick.james-koput +alt.limpdick.paul-zanca +alt.linux.slakware +alt.lite.bulb +alt.litterbox +alt.locksmithing +alt.lonworks.controls +alt.look.at.me.i.am.a.fish +alt.loser.ron-echeverri +alt.loser.wolf-moonchild +alt.lotto.players +alt.louise.beaudoin.nazi.bitch +alt.love +alt.lucien.bouchard.die.die.die +alt.lucky.w +alt.lunatics +alt.luser.recovery +alt.lycra +alt.lycra.pictures +alt.mac.bin.req.only +alt.mac.copy-protect.kdt-terminator +alt.mac.games.binaries +alt.mac.updates +alt.machines.cnc +alt.macintosh.kaleidoscope +alt.macintosh.warez +alt.macintosh.warez.applications +alt.macintosh.warez.games +alt.macintosh.warez.sitez +alt.macintosh.warez.utilities +alt.macomb.college +alt.madcrew +alt.madhousebbs +alt.mag.high-society +alt.mag.hustler +alt.mag.penthouse +alt.mag.playboy +alt.mag.playgirl +alt.mag.puritan +alt.magazine.2600hz +alt.magazines.pornographic +alt.magic +alt.magic.history +alt.magic.secrets +alt.magick +alt.magick.chaos +alt.magick.goetia +alt.magick.marketplace +alt.magick.serious +alt.magick.sex +alt.magick.sex.angst +alt.magick.tantra +alt.magick.theurgia +alt.magick.tyagi +alt.magick.virtual-adepts +alt.mahesh.duitser +alt.make.fast.cash +alt.make.money.fast +alt.make.your.own.spam +alt.malta +alt.man.diary +alt.management.tech-support +alt.manga +alt.manufacturing.misc +alt.march +alt.marching-band.texas +alt.mark-atwood.die.die.die +alt.marketplace.books +alt.marketplace.books-on-tape +alt.marketplace.books.sf +alt.marketplace.cassettes +alt.marketplace.collectables +alt.marketplace.compact-disc +alt.marketplace.funky-stuff.forsale +alt.marketplace.videotapes +alt.martial-arts.karate.shotokan +alt.martial-arts.karate.uechi-ryu +alt.martial-arts.marketplace +alt.martial-arts.tae-kwon-do +alt.martial-arts.tae-kwon.do +alt.masonic.members +alt.math.iams +alt.math.recreational +alt.matthew-davies +alt.mauritius +alt.may +alt.mayday-mayday +alt.mbone +alt.mcdonalds +alt.mcdonalds.crew +alt.mcdonalds.crew.crew-trainer +alt.mcdonalds.crew.management +alt.mcdonalds.kissimmee.heavyg +alt.mcdonalds.promotions +alt.mckinstry.pencil-dick +alt.me.so.horny +alt.meaningless +alt.meaningless.shit +alt.mechwarrior2 +alt.med.allergy +alt.med.behavioral +alt.med.cfs +alt.med.cfs.chat +alt.med.cfs.info +alt.med.cfs.open +alt.med.cure-paralysis +alt.med.ems +alt.med.endometriosis +alt.med.equipment +alt.med.fibromyalgia +alt.med.podiatry +alt.med.software +alt.med.veterinary +alt.medical.sales.jobs.offered +alt.meditation +alt.meditation.moderated +alt.meditation.shabda +alt.meditation.transcendental +alt.mega-ego.yonderboy +alt.memetics +alt.memoriam.princess-di +alt.men.alpha +alt.men.politics +alt.men.support +alt.men.with.high.sperm.counts +alt.mens-rights +alt.meridian.rpg +alt.messianic +alt.metaphysics.a-a-bailey +alt.metaphysics.rebirthing +alt.mexico +alt.microsoft.crash.crash.crash +alt.microsoft.sucks +alt.mikey.gwar +alt.military.cadet +alt.military.collecting +alt.military.collecting.medals +alt.military.retired +alt.mind.bending +alt.mindcontrol +alt.mining.recreational +alt.mink.grrr +alt.minnesota.connection +alt.minnesota.forsale +alt.mirc +alt.misanthropy.thedavid +alt.misc +alt.misc.forteana +alt.misogyny +alt.missing-adults +alt.missing-kids +alt.missouri.clinton +alt.mobilehome +alt.models +alt.models.petite +alt.models.railroad.ho +alt.mof +alt.moja.test +alt.monday +alt.monsthers +alt.moogles +alt.moogles.cypher +alt.moron.phil-oliver +alt.morons +alt.motd +alt.motherjones +alt.motorcycle.sportbike +alt.motorcycles.harley +alt.motss.bisexua-l +alt.mountain-bike +alt.movies +alt.movies.branagh-thmpsn +alt.movies.bruce-lee +alt.movies.chaplin +alt.movies.christian-bale +alt.movies.cinematography +alt.movies.coen-brothers +alt.movies.coppola +alt.movies.david-lynch +alt.movies.deep-impact +alt.movies.empire-records +alt.movies.ghostbusters +alt.movies.grease +alt.movies.hitchcock +alt.movies.independent +alt.movies.indian +alt.movies.indiana-jones +alt.movies.jackie-chan +alt.movies.james-cameron +alt.movies.joe-vs-volcano +alt.movies.john-carpenter +alt.movies.jurassic-park +alt.movies.kevin-smith +alt.movies.kubrick +alt.movies.labyrinth +alt.movies.luis-bunuel +alt.movies.marilyn-monroe +alt.movies.monster +alt.movies.mortal-kombat +alt.movies.oliver-stone +alt.movies.one.flew.over.the.cuckoos.nest.famous.lines.mr.turkle.oh.shit.the.supervisor +alt.movies.robert-deniro +alt.movies.scorsese +alt.movies.serials +alt.movies.sig-weaver +alt.movies.silent +alt.movies.siskel+ebert +alt.movies.spielberg +alt.movies.spike-lee +alt.movies.terry-gilliam +alt.movies.tim-burton +alt.movies.titanic +alt.movies.truffaut +alt.movies.uk +alt.movies.visual-effects +alt.msdos.batch +alt.msdos.programmer +alt.mtv-sucks +alt.mud +alt.mud.cellars +alt.mud.crystal-shard +alt.mud.eos2 +alt.mud.lp +alt.mud.majormud +alt.mud.programming +alt.multimedia.cu-seeme +alt.multimedia.director +alt.multimedia.tk +alt.multimedia.vadz +alt.music +alt.music-lover.audiophile +alt.music-lover.audiophile.hardware +alt.music.2-belo +alt.music.4-track +alt.music.4ad +alt.music.a-cappella +alt.music.abba +alt.music.acid-jazz +alt.music.aerosmith +alt.music.african +alt.music.air-supply +alt.music.alanis +alt.music.alanis.morissette +alt.music.alice-cooper +alt.music.aliceinchains +alt.music.all-saints +alt.music.alternative +alt.music.alternative.female +alt.music.america +alt.music.amy-grant +alt.music.anthrax +alt.music.aor +alt.music.arabic +alt.music.ash +alt.music.atlanta +alt.music.b-52s +alt.music.babybird +alt.music.banana-truffle +alt.music.band-director +alt.music.beach-boys +alt.music.beastie-boys +alt.music.beck +alt.music.beckley-bunnel +alt.music.bedroom.producers +alt.music.bee-gees +alt.music.bela-fleck +alt.music.ben-folds-five +alt.music.betterthanezra +alt.music.big-band +alt.music.bill-laswell +alt.music.bill-miller +alt.music.billy-joe.winghead +alt.music.billy-joel +alt.music.bjork +alt.music.black-metal +alt.music.black-metal.nazi +alt.music.black-sabbath +alt.music.bloodhound.gang +alt.music.blue-rodeo +alt.music.bluegrass +alt.music.blueoystercult +alt.music.blues +alt.music.blues-traveler +alt.music.blues.delta +alt.music.blues.johnny-winter +alt.music.blur +alt.music.bob-wiseman +alt.music.bodeans +alt.music.boedans +alt.music.bon-jovi +alt.music.bonepony +alt.music.bootlegs +alt.music.bosstones +alt.music.boyz-2-men +alt.music.brian-eno +alt.music.bugtussle +alt.music.built-to-spill +alt.music.bush +alt.music.bush.sux +alt.music.butholesurfers +alt.music.buzzpoets +alt.music.byrds +alt.music.cake +alt.music.canada +alt.music.candy-dulfer +alt.music.cardiacs +alt.music.carnival +alt.music.category-freak +alt.music.cavedogs +alt.music.ccr +alt.music.celine-dion +alt.music.chameleons +alt.music.chapel-hill +alt.music.charlatans +alt.music.cheap-trick +alt.music.chemical-bros +alt.music.cher +alt.music.chicago +alt.music.christian.rock +alt.music.clannad +alt.music.clarinet +alt.music.clash +alt.music.cliff-richard +alt.music.complex-arrang +alt.music.corrs +alt.music.counting-crows +alt.music.country.classic +alt.music.cranberries +alt.music.creeker +alt.music.ct-dummies +alt.music.dan-fogelberg +alt.music.dance +alt.music.dance.euro +alt.music.dance.freestyle +alt.music.dance.made-in-italy +alt.music.danzig +alt.music.darkwave +alt.music.dave-hawkins +alt.music.dave-matthews +alt.music.dead-kennedys +alt.music.deep-purple +alt.music.def-leppard +alt.music.deftones.moderated +alt.music.delirious +alt.music.delphines +alt.music.depeche-mode +alt.music.dio +alt.music.dire-straits +alt.music.diva +alt.music.divine-comedy +alt.music.drain +alt.music.dream-theater +alt.music.duran-duran +alt.music.dutch +alt.music.eagles +alt.music.echoing-green +alt.music.elastica +alt.music.elo +alt.music.embo +alt.music.embrace +alt.music.enigma-dcd-etc +alt.music.enya +alt.music.erasure +alt.music.everclear +alt.music.faith-no-more +alt.music.fates-warning +alt.music.fatwreckchords +alt.music.festivals +alt.music.filk +alt.music.flamenco +alt.music.fleetwood-mac +alt.music.foetus +alt.music.folklore +alt.music.foo-fighters +alt.music.frank-zappa +alt.music.franticdogpadl +alt.music.funkpoparoll +alt.music.g-fibbers +alt.music.galaxie-500 +alt.music.gangsta.rap +alt.music.garbage +alt.music.garth-brooks +alt.music.gene +alt.music.genesis +alt.music.girlgroups +alt.music.gnawa +alt.music.golden-earring +alt.music.goo-goo-dolls +alt.music.gospel.southern +alt.music.green-day +alt.music.grindcore +alt.music.guidedbyvoices +alt.music.guthrie +alt.music.gwar +alt.music.h-blockx +alt.music.h-h-hippeaux +alt.music.hammond-organ +alt.music.hamsters +alt.music.hardcore +alt.music.harmonica +alt.music.harry-chapin +alt.music.hawaiian +alt.music.heath +alt.music.hertz +alt.music.hole +alt.music.holly-cole +alt.music.hootie +alt.music.house +alt.music.iggy-pop +alt.music.independent +alt.music.independent.ads +alt.music.indigo-girls +alt.music.industrial +alt.music.info-society +alt.music.inxs +alt.music.j-s-bach +alt.music.jade-warrior +alt.music.jamc +alt.music.james-taylor +alt.music.jamiroquai +alt.music.jamiroquai.trading-post +alt.music.janes-addictn +alt.music.jeff-buckley +alt.music.jenn-harmer +alt.music.jethro-tull +alt.music.jewish +alt.music.jim-croce +alt.music.jimi.hendrix +alt.music.joan-jett +alt.music.joan-osborne +alt.music.jon-spencer +alt.music.journalism +alt.music.journey +alt.music.judas-priest +alt.music.jungle +alt.music.karaoke +alt.music.kelani +alt.music.kenickie +alt.music.kiss +alt.music.kmfdm +alt.music.korn +alt.music.kraftwerk +alt.music.kula-shaker +alt.music.kyle-vincent +alt.music.kylie-minogue +alt.music.la-guns +alt.music.led-zeppelin +alt.music.lennon +alt.music.leonard-cohen +alt.music.lesley-rankine +alt.music.lightfoot +alt.music.limp-bizkit +alt.music.live.the.band +alt.music.lloyd-webber +alt.music.london-am +alt.music.lor-mckennitt +alt.music.lou-reed +alt.music.luis-miguel +alt.music.luna +alt.music.lyrics +alt.music.lyrics.spanish +alt.music.machine-head +alt.music.makers.dj +alt.music.makers.dj.bedroom +alt.music.makers.electric-piano +alt.music.makers.electronic +alt.music.makers.sampling +alt.music.makers.soloact +alt.music.makers.theremin +alt.music.makers.woodwind +alt.music.manics +alt.music.manowar +alt.music.mansun +alt.music.mariah.carey +alt.music.marillion +alt.music.marilyn-manson +alt.music.marys-danish +alt.music.massive-attack +alt.music.maxwell +alt.music.mazzy-star +alt.music.mcb +alt.music.mccartney +alt.music.mecano +alt.music.mexican +alt.music.michael-franks +alt.music.mid-evil +alt.music.midi +alt.music.midiweb +alt.music.mike-keneally +alt.music.mike.keneally +alt.music.ministry +alt.music.misc +alt.music.misfits +alt.music.mobile-djs +alt.music.moby +alt.music.modern-rock +alt.music.mods +alt.music.monkees +alt.music.moody-blues +alt.music.morrissey +alt.music.moxy-fruvous +alt.music.mp3 +alt.music.mr-bungle +alt.music.mylene-farmer +alt.music.nailbomb +alt.music.nat-imbruglia +alt.music.new-order +alt.music.nick-cave +alt.music.night-ranger +alt.music.nils-lofgren +alt.music.nin +alt.music.nin.creative +alt.music.nin.d +alt.music.nin.old-school +alt.music.nirvana +alt.music.nirvana.bootlegs +alt.music.nirvana.wasteland.useless.personal.flames +alt.music.no-doubt +alt.music.nofx +alt.music.nomeansno +alt.music.novelty +alt.music.nrbq +alt.music.oasis +alt.music.ocs +alt.music.offspring +alt.music.operation-ivy +alt.music.orb +alt.music.ourladypeace +alt.music.ozzy +alt.music.pantera +alt.music.pat-mccurdy +alt.music.pat-metheny +alt.music.pat-metheny.moderated +alt.music.paul-simon +alt.music.paul-weller +alt.music.pavement +alt.music.pearl-jam +alt.music.performance.band.high-school +alt.music.pet-shop-boys +alt.music.pet-shop.boys +alt.music.peter-gabriel +alt.music.phil-collins +alt.music.philip-glass +alt.music.pink-floyd +alt.music.placebo +alt.music.plasmatics +alt.music.pogues +alt.music.polkas +alt.music.pop-eat-itself +alt.music.portishead +alt.music.posterkids +alt.music.primus +alt.music.prince +alt.music.prodigy-the +alt.music.prodigy-the.lyrics +alt.music.producer +alt.music.progressive +alt.music.psychedelic +alt.music.pulp +alt.music.pus +alt.music.pusa +alt.music.queen +alt.music.rachid +alt.music.radiators +alt.music.radiohead +alt.music.rage-machine +alt.music.rammstein +alt.music.ramones +alt.music.rap-metal +alt.music.rat-pack +alt.music.ratt +alt.music.redd-kross +alt.music.refreshments +alt.music.replacements +alt.music.riot-grrl +alt.music.roadie +alt.music.rockabilly +alt.music.roger-waters +alt.music.rory-gallagher +alt.music.roxette +alt.music.ruby +alt.music.rush +alt.music.rvamusic +alt.music.s-mclachlan +alt.music.s7g +alt.music.saxophone +alt.music.seal +alt.music.seven-seconds +alt.music.sex-pistols +alt.music.sex.pistols +alt.music.shamen +alt.music.shonen-knife +alt.music.ska +alt.music.ska-core +alt.music.skeg +alt.music.sloan +alt.music.small-faces +alt.music.small-world +alt.music.smash-pumpkins +alt.music.smithereens +alt.music.smiths +alt.music.sneaker-pimps +alt.music.sondheim +alt.music.sonic-youth +alt.music.sophie-hawkins +alt.music.soul +alt.music.soul.asylum +alt.music.soulcoughing +alt.music.soundgarden +alt.music.southern-rock +alt.music.spacerock +alt.music.spanish.lyrics +alt.music.speedmcqueen +alt.music.spice-girls +alt.music.squeeze +alt.music.status-quo +alt.music.steely-dan +alt.music.stereophonics +alt.music.steve-harley +alt.music.steve-miller +alt.music.steve-vai +alt.music.steve.vai +alt.music.stone-roses +alt.music.stone-temple +alt.music.strange +alt.music.suede +alt.music.superfurries +alt.music.supergrass +alt.music.supersuckers +alt.music.swedish-pop +alt.music.sylvian +alt.music.symposium +alt.music.synth.kurzweil +alt.music.synth.roland.tb303 +alt.music.synth.roland.u20 +alt.music.synthpop +alt.music.t-rex +alt.music.tango +alt.music.tape-culture +alt.music.tea-party +alt.music.techno +alt.music.texas +alt.music.that-dog +alt.music.the-band +alt.music.the-corrs +alt.music.the-damned +alt.music.the-doors +alt.music.the-fall +alt.music.the-pist +alt.music.the-sweet +alt.music.the-tubes +alt.music.the-verve +alt.music.the.police +alt.music.thecars +alt.music.thecure +alt.music.thunder +alt.music.tlc +alt.music.tmbg +alt.music.todd-rundgren +alt.music.tom-petty +alt.music.tom-waits +alt.music.tonic +alt.music.tool +alt.music.total-touch +alt.music.toten-hosen +alt.music.trading.dat +alt.music.tragically-hip +alt.music.trombone +alt.music.tuba +alt.music.tune-inn +alt.music.u2 +alt.music.uk +alt.music.underground.grindcore +alt.music.underground.metal +alt.music.underground.metal.ambient +alt.music.underground.metal.black +alt.music.underground.metal.death +alt.music.underground.metal.doom +alt.music.underground.metal.nihilism +alt.music.underground.metal.philosophy +alt.music.underground.metal.satanism +alt.music.underworld +alt.music.van-halen +alt.music.vanhalen +alt.music.velvets +alt.music.veruca-salt +alt.music.video-games +alt.music.vivian-lai +alt.music.voivod +alt.music.warehouse.of.hate +alt.music.ween +alt.music.weezer +alt.music.weird +alt.music.weird-al +alt.music.wesley-willis +alt.music.white-power +alt.music.white.town +alt.music.who +alt.music.wilderness +alt.music.wildhearts +alt.music.world +alt.music.wu-tang-clan +alt.music.yes +alt.music.yngwie +alt.music.zz-top +alt.my.head.hurts +alt.mysteries +alt.mythology +alt.mythology.jinn +alt.mythology.mythic-animals +alt.naggamanteh +alt.namaste +alt.nanny.helpme.help.help.help +alt.natall +alt.native +alt.native.law +alt.nature.mushrooms +alt.naughty.pictures +alt.necronomicon +alt.neo-tech +alt.nerd.obsessive +alt.net +alt.net.and +alt.net.and.modem +alt.netcom +alt.netcom.emeritus +alt.netcom.sucks +alt.netgames.bolo +alt.netscape.buggy-products +alt.netscape.sucks +alt.nettime +alt.netzilla.die.die.die +alt.new-england +alt.newbie +alt.newbies +alt.newgroup.dean-stark +alt.newgroup.for.fun.fun.fun +alt.newlywed +alt.news-admins.japan.fascist.fascist.fascist +alt.news-media +alt.news.boys +alt.news.cyprus +alt.news.macedonia +alt.news.microsoft +alt.news.newusers-mac +alt.newsgroup.moderators +alt.newsgroupname +alt.niggers +alt.night-club.review.uk +alt.night-life.bradford.uk +alt.nijntje +alt.niteclub.alternative +alt.niteclub.commercial +alt.nl +alt.nocem.misc +alt.nocem.policy +alt.noise +alt.non.sequitur +alt.nosebeeping +alt.november +alt.npractitioners +alt.nswpp +alt.nuke.europe +alt.nuke.france +alt.nuke.the.usa +alt.null.xi +alt.nzjnet +alt.obituaries +alt.occult.kabbalah.golden-dawn +alt.october +alt.office.management +alt.old-west +alt.olympic.studies +alt.olympics.housing.low-cost +alt.online-service +alt.online-service.america-online +alt.online-service.att-worldnet +alt.online-service.att-worldnet.alumni +alt.online-service.att-worldnet.ex-users +alt.online-service.compuserve +alt.online-service.cyberpromo +alt.online-service.delphi +alt.online-service.dennon-online +alt.online-service.freenet +alt.online-service.genie +alt.online-service.gnn +alt.online-service.imagination +alt.online-service.microsoft +alt.online-service.msn-0wns-j00 +alt.online-service.pacbell +alt.online-service.prodigy +alt.online-service.ten +alt.online-service.webtv +alt.ontario.north-bay +alt.ooga.booga +alt.open-servers.news.west-tech.com +alt.opengroup.org.kaleb.keithley +alt.org.beta-sigma-phi +alt.org.clan-macdude +alt.org.data-proc-mgmt +alt.org.db-nl.misc +alt.org.earth-first +alt.org.earth-first.eco-terrorists +alt.org.food-not-bombs +alt.org.jaycees +alt.org.legio-darkyard +alt.org.pla +alt.org.promisekeepers +alt.org.royal-rangers +alt.org.scoutnet +alt.org.sierra-club +alt.org.ski-patrol +alt.org.starfleet +alt.org.team-os2 +alt.org.toastmasters +alt.org.triple9 +alt.org.zencor +alt.os +alt.os.assembly +alt.os.development +alt.os.free-dos +alt.os.freedows +alt.os.linux +alt.os.linux.caldera +alt.os.linux.slackware +alt.os.multics +alt.os.security +alt.os.tlerll +alt.os.windows95 +alt.os.windows95.crash.crash.crash +alt.out-of-body +alt.oxford.talk +alt.oyp +alt.oyp.alumni +alt.oyp.announce +alt.oyp.corp +alt.oyp.eoryp +alt.oyp.norp +alt.oyp.scopy +alt.oyp.sworp +alt.p +alt.pagan +alt.pagan.contacts +alt.pagan.magick +alt.palm.springs.ca +alt.pantyhose +alt.pantyhose.as.a.mask.doesnt.work +alt.parallel.universes +alt.paranet.abduct +alt.paranet.esp-help +alt.paranet.metaphysics +alt.paranet.paranormal +alt.paranet.psi +alt.paranet.science +alt.paranet.skeptic +alt.paranet.ufo +alt.paranoia +alt.paranoia.damned-fish +alt.paranoia.delusional +alt.paranoia.rampant +alt.paranoia.spambots +alt.paranormal +alt.paranormal.channeling +alt.paranormal.crop-circles +alt.paranormal.moderated +alt.paranormal.pyramid +alt.paranormal.reincarnation +alt.paranormal.spells.hexes.magic +alt.parenting.attachment +alt.parenting.grandparents +alt.parenting.solutions +alt.parenting.spanking +alt.parenting.spanking.moderated +alt.parenting.twins-triplets +alt.parents-teens +alt.party +alt.pave.the.earth +alt.pbem.ryn +alt.pbi.premier +alt.pc.kelt +alt.peace +alt.peace-corps +alt.peanut-butter.electricity +alt.pedophilia.announce +alt.pedophilia.boys +alt.pedophilia.girls +alt.pedophilia.pictures +alt.pedophilia.swaps +alt.peepsk +alt.peeves +alt.penguin-fetish.recovery +alt.penguins.bondage.latex.springs.bounce.bounce.bounce +alt.penpals.50-plus +alt.penpals.college +alt.penpals.erotic +alt.penpals.forty-plus-yrs +alt.periodismo +alt.periphs.multifunctions +alt.periphs.pcmcia +alt.perl +alt.perl.sockets +alt.personals +alt.personals.abbotsford +alt.personals.ads +alt.personals.aliens +alt.personals.bi +alt.personals.big-folks +alt.personals.black +alt.personals.bodyart +alt.personals.bondage +alt.personals.bondage.gay +alt.personals.calgary +alt.personals.edmonton +alt.personals.fags +alt.personals.fat +alt.personals.fetish +alt.personals.gay +alt.personals.gothic +alt.personals.herpes +alt.personals.hiv-positive +alt.personals.intercultural +alt.personals.intergen +alt.personals.interracial +alt.personals.jewish +alt.personals.misc +alt.personals.montreal +alt.personals.motss +alt.personals.motss.women +alt.personals.nanaimo +alt.personals.ottawa +alt.personals.phone +alt.personals.poly +alt.personals.psychedelic +alt.personals.spanking +alt.personals.spanking.punishment +alt.personals.sudbury +alt.personals.tall +alt.personals.teen +alt.personals.toronto +alt.personals.transgendered +alt.personals.universities.csu.sacramento +alt.personals.vancouver +alt.personals.where.are.you.now +alt.pessimism +alt.pets.arachnids +alt.pets.birds.dutch +alt.pets.birds.softbills +alt.pets.birds.softbills.crows +alt.pets.birds.softbills.starlings +alt.pets.dogs.aussies +alt.pets.dogs.pitbull +alt.pets.dogs.sharpei +alt.pets.dogs.telepathic.yogi +alt.pets.ferrets +alt.pets.guinea-pigs +alt.pets.hamsters +alt.pets.hedgehogs +alt.pets.mice +alt.pets.parrots.african-grey +alt.pets.parrots.amazons +alt.pets.parrots.cockatiels +alt.pets.parrots.jardines +alt.pets.parrots.marketplace +alt.pets.parrots.misc +alt.pets.prairie-dogs +alt.pets.rabbits +alt.pets.rodents +alt.pets.skunks +alt.pets.sugar-glider +alt.pets.tamagotchi +alt.ph.uk +alt.ph.za +alt.phil-oliver.bambi.bambi.bambi +alt.phil-oliver.die.die.die +alt.phil-oliver.gehzober.gehzober.gehzober +alt.phil-oliver.has.no.life +alt.phil-oliver.roar.roar.roar +alt.philatelic.com +alt.philez +alt.philips.cdr.discussion +alt.philosophy.debate +alt.philosophy.kant +alt.philosophy.law +alt.philosophy.objectivism +alt.philosophy.taoism +alt.philosophy.zen +alt.phreaking +alt.pictures.fuzzy.animals +alt.pictures.monsters +alt.pimpz.org +alt.pinecone +alt.pirate.radio +alt.pizza.delivery.drivers +alt.pl +alt.pl.dupa +alt.pl.muzyka.bin +alt.pl.rec.muzyka +alt.pl.rec.muzyka.punk +alt.pl.uzywki +alt.pl.wolnosc +alt.places.tybee.island +alt.planning.transportation +alt.planning.urban +alt.podiatry.misc +alt.podiatry.surgery +alt.politics.british +alt.politics.bush +alt.politics.carlos-may +alt.politics.clinton +alt.politics.communism +alt.politics.correct +alt.politics.datahighway +alt.politics.democrats.d +alt.politics.ec +alt.politics.economics +alt.politics.elections +alt.politics.equality +alt.politics.europe.misc +alt.politics.gossip +alt.politics.greens +alt.politics.harry-browne +alt.politics.homosexuality +alt.politics.homosexuality.hatemongers.phelps +alt.politics.homosexuality.hatemongers.rev-white +alt.politics.immigration +alt.politics.jaffo +alt.politics.jaffo.dammit +alt.politics.jason-steiner +alt.politics.korea +alt.politics.liberal.bleed.bleed.bleed +alt.politics.liberalism +alt.politics.libertarian +alt.politics.libertarian.creative +alt.politics.libertarian.gay +alt.politics.media +alt.politics.metal.anti-christian +alt.politics.micronations +alt.politics.nationalism.black +alt.politics.nationalism.texas +alt.politics.nationalism.white +alt.politics.nationalism.white.announce +alt.politics.neil-simpson +alt.politics.org.batf +alt.politics.org.cia +alt.politics.org.fbi +alt.politics.org.misc +alt.politics.org.nsa +alt.politics.org.un +alt.politics.perot +alt.politics.radical-left +alt.politics.reform +alt.politics.republicans +alt.politics.satanism +alt.politics.sex +alt.politics.socialism +alt.politics.socialism.mao +alt.politics.socialism.trotsky +alt.politics.socialist.nazi +alt.politics.turn-left +alt.politics.usa.congress +alt.politics.usa.constitution +alt.politics.usa.death-metal +alt.politics.usa.misc +alt.politics.usa.mock.government +alt.politics.usa.newt-gingrich +alt.politics.usa.republican +alt.politics.usa.usa-parliament +alt.politics.white-power +alt.politics.world.federalism +alt.politics.youth +alt.polyamory +alt.pootergeek.lesbian +alt.popcollectief.denbosch +alt.possessive.its.has.no.apostrophe +alt.postmodern +alt.pot.kettle.black +alt.pouting.sandwich +alt.prank-calls +alt.preferedalt +alt.president.clinton +alt.president.clinton.penis.intern +alt.prisoner.rights +alt.prisons +alt.prisons.officer +alt.privacy +alt.privacy.anon-server +alt.privacy.clipper +alt.private.investigator +alt.pro-wrestling.dx +alt.pro-wrestling.nwo +alt.pro-wrestling.wcw +alt.pro-wrestling.wolfpac +alt.pro-wrestling.wwf +alt.projectmng +alt.prophecies.cayce +alt.prophecies.drturi +alt.prophecies.nostradamus +alt.prophecies.sloggy +alt.prose +alt.prose.memoir +alt.prose.postmodern +alt.psst.hoy +alt.psychoactives +alt.psychology +alt.psychology.help +alt.psychology.jung +alt.psychology.mindmachine +alt.psychology.nlp +alt.psychology.personality +alt.psychology.psychoanalysis +alt.psychology.transpersonal +alt.psychotic.roommates +alt.pt.groups.funex +alt.pub.coffeehouse.amethyst +alt.pub.kacees +alt.pub.thistle+joe +alt.pub.wills-place +alt.publish.books +alt.pud +alt.pulp +alt.pumpkin.militia +alt.punk +alt.punk.europe +alt.punk.straight-edge +alt.ql.creative +alt.quake2 +alt.queenfan.irc +alt.quit.smoking.support +alt.quotations +alt.radio +alt.radio.amateur.club.taparc +alt.radio.broadcasting +alt.radio.broadcasting.open +alt.radio.college +alt.radio.digital +alt.radio.family +alt.radio.highschool +alt.radio.internet.kcuf +alt.radio.networks.cbc +alt.radio.networks.npr +alt.radio.oldtime +alt.radio.parg +alt.radio.paul-harvey +alt.radio.pirate +alt.radio.scanner +alt.radio.scanner.flame_fest +alt.radio.scanner.uk +alt.radio.stations.wsia +alt.radio.talk +alt.radio.talk.dr-laura +alt.radio.talk.kmpc +alt.radio.talk.wattenburg +alt.radio.uk +alt.radio.uk.talk-radio +alt.railroad +alt.railroad.steam +alt.railroad.twofoot +alt.railway.locomotives.uk.class37 +alt.railway.rail-gen.follow-up +alt.random.noise +alt.rap +alt.rap-gdead +alt.rap.cypher +alt.rave +alt.ray +alt.real-estate.aust +alt.real-estate.commercial.az +alt.real-estate.commercial.ca-central +alt.real-estate.commercial.ca-north +alt.real-estate.commercial.ca-south +alt.real-estate.commercial.co +alt.real-estate.commercial.fl-central +alt.real-estate.commercial.fl-north +alt.real-estate.commercial.fl-south +alt.real-estate.commercial.ga +alt.real-estate.commercial.ma +alt.real-estate.commercial.md +alt.real-estate.commercial.mn +alt.real-estate.commercial.mo +alt.real-estate.commercial.nc +alt.real-estate.commercial.nh +alt.real-estate.commercial.nj +alt.real-estate.commercial.nm +alt.real-estate.commercial.ny +alt.real-estate.commercial.oh +alt.real-estate.commercial.or +alt.real-estate.commercial.pa +alt.real-estate.commercial.tx-northeast +alt.real-estate.commercial.tx-northwest +alt.real-estate.commercial.tx-southeast +alt.real-estate.commercial.tx-southwest +alt.realtor.relocation +alt.rec.bicycles.fatcity +alt.rec.bicycles.recumbent +alt.rec.brucetrail +alt.rec.camping +alt.rec.collecting.stamps.discuss +alt.rec.collecting.stamps.flame +alt.rec.collecting.stamps.marketplace +alt.rec.hiking +alt.rec.hovercraft +alt.recipes.babies +alt.recortes +alt.recovery +alt.recovery.aa +alt.recovery.aa_germany +alt.recovery.addiction.gambling +alt.recovery.addiction.sexual +alt.recovery.adult-children +alt.recovery.catholicism +alt.recovery.christian.abuse +alt.recovery.clutter +alt.recovery.codependency +alt.recovery.compulsive-eat +alt.recovery.cow-fetish +alt.recovery.dean-stark +alt.recovery.family+friends +alt.recovery.from-12-steps +alt.recovery.fundamentalism +alt.recovery.lipbalm +alt.recovery.mania.beanie-babies +alt.recovery.mlm +alt.recovery.na +alt.recovery.nettalk +alt.recovery.nicotine +alt.recovery.panic-anxiety.self-help +alt.recovery.procrastinate +alt.recovery.rational +alt.recovery.religion +alt.recovery.small-town +alt.recovery.unitarian-univ +alt.redheads +alt.reform.fresh-start +alt.regional.usa.fl.west-volusia +alt.relationships.deaf-hearing +alt.religio.konfuceo +alt.religion.afterburner +alt.religion.all-worlds +alt.religion.amiga +alt.religion.amos +alt.religion.angels +alt.religion.anticrust +alt.religion.apologetics +alt.religion.apparitions +alt.religion.asatru +alt.religion.autos.yugo +alt.religion.ayse-sercan +alt.religion.bahai +alt.religion.broadcast +alt.religion.buddhism.nichiren +alt.religion.buddhism.nkt +alt.religion.buddhism.theravada +alt.religion.buddhism.tibetan +alt.religion.christian +alt.religion.christian-teen +alt.religion.christian.20-something +alt.religion.christian.adventist +alt.religion.christian.anabaptist.brethren +alt.religion.christian.baptist +alt.religion.christian.biblestudy +alt.religion.christian.boston-church +alt.religion.christian.calvary-chapel +alt.religion.christian.east-orthodox +alt.religion.christian.elbrujo +alt.religion.christian.episcopal +alt.religion.christian.last-days +alt.religion.christian.lutheran +alt.religion.christian.methodist +alt.religion.christian.pentecostal +alt.religion.christian.presbyterian +alt.religion.christian.roman-catholic +alt.religion.christian.youth-ministry +alt.religion.clergy +alt.religion.computers +alt.religion.course-miracle +alt.religion.dean-stark +alt.religion.drew-hamilton +alt.religion.druid +alt.religion.eckankar +alt.religion.end-times.prophecies +alt.religion.fishisim +alt.religion.gnostic +alt.religion.gnostic.orders +alt.religion.goddess +alt.religion.gods +alt.religion.hindu +alt.religion.islam +alt.religion.islam.shia +alt.religion.jaffo +alt.religion.jain +alt.religion.jehovahs-witn +alt.religion.jewish.daf-discuss +alt.religion.kibology +alt.religion.kibology.is.dead.dead.dead +alt.religion.liet.santoy +alt.religion.louis-nick +alt.religion.macarena +alt.religion.monica +alt.religion.mormon +alt.religion.mormon.fellowship +alt.religion.pagan.evil +alt.religion.pagan.nazi +alt.religion.pagan.texas +alt.religion.paulo-dimas +alt.religion.paulo-dimas.deveras +alt.religion.paulo-dimas.misc +alt.religion.paulo-dimas.newcomers +alt.religion.paulo-dimas.philosophy +alt.religion.paulo-dimas.study +alt.religion.paulo-dimas.temples +alt.religion.paulo-dimas.worship +alt.religion.psychedelic.moderated +alt.religion.rabbet +alt.religion.sabbath-keeper +alt.religion.scientology +alt.religion.scientology.squick.squick.squick +alt.religion.scientology.xenu +alt.religion.sexuality +alt.religion.shamanism +alt.religion.simpsons +alt.religion.smerpology +alt.religion.spiritism.spiritualism.moderated +alt.religion.tolkienology +alt.religion.totology +alt.religion.triplegoddess +alt.religion.unification +alt.religion.unifier.flash-inc +alt.religion.universal-life +alt.religion.urantia-book +alt.religion.vaisnava +alt.religion.vran +alt.religion.w-w-chuch-god +alt.religion.w-w-church-god +alt.religion.watchtower +alt.religion.watchtower.judicial +alt.religion.watchtower.reform +alt.religion.wicca +alt.religion.wicca.moderated +alt.religion.zakkology +alt.relocate +alt.research.monroe-inst +alt.restaurants +alt.retail.category.management +alt.retribution +alt.revenge +alt.revisionism +alt.revolution.american.second +alt.revolution.counter +alt.rhode_island +alt.rmgroup.d +alt.robotwars +alt.rock-n-roll +alt.rock-n-roll.acdc +alt.rock-n-roll.aerosmith +alt.rock-n-roll.classic +alt.rock-n-roll.hard +alt.rock-n-roll.metal +alt.rock-n-roll.metal.bad-grrrl +alt.rock-n-roll.metal.black.nazi +alt.rock-n-roll.metal.death +alt.rock-n-roll.metal.doom +alt.rock-n-roll.metal.drain +alt.rock-n-roll.metal.gnr +alt.rock-n-roll.metal.groove +alt.rock-n-roll.metal.heavy +alt.rock-n-roll.metal.ironmaiden +alt.rock-n-roll.metal.megadeth +alt.rock-n-roll.metal.metallica +alt.rock-n-roll.metal.motley-crue +alt.rock-n-roll.metal.nihilism +alt.rock-n-roll.metal.personalities +alt.rock-n-roll.metal.personalities.airmaster +alt.rock-n-roll.metal.personalities.brandubh +alt.rock-n-roll.metal.personalities.daemonic +alt.rock-n-roll.metal.personalities.goden +alt.rock-n-roll.metal.personalities.gortician +alt.rock-n-roll.metal.personalities.hatred +alt.rock-n-roll.metal.personalities.pimpbot-5000 +alt.rock-n-roll.metal.philosophy +alt.rock-n-roll.metal.philosophy.evil +alt.rock-n-roll.metal.progressive +alt.rock-n-roll.moderated.crue +alt.rock-n-roll.moderated.crue.moderated.crue.moderated.crue.carlos.kick-ass.newsgroup +alt.rock-n-roll.motley.crue.m +alt.rock-n-roll.oldies +alt.rock-n-roll.stones +alt.rock-n-roll.ufo +alt.rodney-king +alt.romance +alt.romance.chat +alt.romance.chinese +alt.romance.mature-adult +alt.romance.online +alt.romance.teen +alt.romance.unhappy +alt.rosalina.love.love.love +alt.rosalina.will.you.marry.me +alt.roundtable +alt.rpg.chesley +alt.rpg.chesley.trials +alt.rpg.imperia +alt.rpg.imperia.imperium +alt.rpg.juanolia +alt.rpg.secfenia +alt.running.out.of.newsgroup.names +alt.rush-limbaugh +alt.rv +alt.rv.airstream +alt.sabmag +alt.sad-people.microsoft.lovers +alt.sad-people.vidders +alt.sadistic +alt.sadistic.dentists +alt.sage.john-grubor +alt.sailing +alt.sailing.asa +alt.sailing.boats.crew +alt.sailing.pbsa +alt.sandy.claws +alt.satanism +alt.satanism.art +alt.satanism.murder +alt.satanism.sex +alt.satanville +alt.satellite.direcpc +alt.satellite.radio.europe +alt.satellite.tv.australasia +alt.satellite.tv.crypt +alt.satellite.tv.europe +alt.satellite.tv.forsale +alt.saturday +alt.save.the.earth +alt.sb.programmer +alt.sca.combat.archer +alt.sca.yenta +alt.scary.exe.files +alt.schlock +alt.school.homework-help +alt.school.it.stinks +alt.sci +alt.sci.astro.hale.bopp +alt.sci.criminology +alt.sci.geology.jobs +alt.sci.joe-bay +alt.sci.math.combinatorics +alt.sci.math.design_theory +alt.sci.math.galois_fields +alt.sci.math.probability +alt.sci.math.statistics.prediction +alt.sci.mbe +alt.sci.multi-d +alt.sci.nanotech +alt.sci.natural.phenomena.unusual +alt.sci.physics.acoustics +alt.sci.physics.new-theories +alt.sci.planetary +alt.sci.sociology +alt.sci.tech.indonesian +alt.sci.time-travel +alt.scooter +alt.scottish.clans +alt.screw.interlink +alt.sculpture +alt.security +alt.security.alarms +alt.security.announce +alt.security.espionage +alt.security.index +alt.security.keydist +alt.security.neighborhood +alt.security.pgp +alt.security.terrorism +alt.security.terrorism.atlanta +alt.security.terrorism.flight800 +alt.seduction.fast +alt.sega.genesis +alt.self-esteem +alt.self-improve +alt.self-reliance +alt.september +alt.sewing +alt.sewing.mach-embroider +alt.sex +alt.sex.abstinance +alt.sex.advocacy +alt.sex.aliens +alt.sex.alt.syntax.tactical +alt.sex.aluminum.baseball.bat +alt.sex.anal +alt.sex.animals +alt.sex.asphyx +alt.sex.balls +alt.sex.bdragon.and.jimdana +alt.sex.bears +alt.sex.beer-bottle +alt.sex.ben-mesander +alt.sex.bestiality +alt.sex.bestiality.alix.piantadosi +alt.sex.bestiality.barney +alt.sex.bestiality.hamster.duct-tape +alt.sex.bestiality.pictures +alt.sex.biblical +alt.sex.bondage +alt.sex.bondage.furtoonia +alt.sex.bondage.particle.physics +alt.sex.bondage.sco.unix +alt.sex.boredom +alt.sex.boys +alt.sex.breast +alt.sex.breathless +alt.sex.brothels +alt.sex.cancel +alt.sex.car-crash +alt.sex.carasso +alt.sex.carl.loves.kernal +alt.sex.carl.loves.kernel +alt.sex.cd-rom +alt.sex.children +alt.sex.chris_schaefer.onhold +alt.sex.clinton.bill +alt.sex.clinton.chelsa +alt.sex.clinton.hillary +alt.sex.couples.hetero.interchange.amateur +alt.sex.couples.hetero.interchange.amateur.all-gratis +alt.sex.cthulhu +alt.sex.cu-seeme +alt.sex.cypher +alt.sex.disney +alt.sex.doof +alt.sex.doom.with-sound +alt.sex.drew-hamilton +alt.sex.dyaln +alt.sex.dylan +alt.sex.enemas +alt.sex.erotica +alt.sex.erotica.market.place +alt.sex.erotica.marketplace +alt.sex.escort.ads +alt.sex.escorts.ads +alt.sex.escorts.ads.d +alt.sex.exhibitionism +alt.sex.extropians +alt.sex.fat +alt.sex.femdom +alt.sex.fencing +alt.sex.fetish.amputee +alt.sex.fetish.barbie +alt.sex.fetish.beans +alt.sex.fetish.biting.marv-albert +alt.sex.fetish.boyfeet +alt.sex.fetish.cost.benefit.analysis +alt.sex.fetish.cost.benifit.analysis +alt.sex.fetish.custard +alt.sex.fetish.diapers +alt.sex.fetish.dirty.used.q-tips +alt.sex.fetish.dollari.ven +alt.sex.fetish.drew-barrymore +alt.sex.fetish.drmellow +alt.sex.fetish.fa +alt.sex.fetish.fashion +alt.sex.fetish.feet +alt.sex.fetish.feet.toes.opps +alt.sex.fetish.giants +alt.sex.fetish.hair +alt.sex.fetish.head-librarian +alt.sex.fetish.hermunen +alt.sex.fetish.jello +alt.sex.fetish.kitty.litter +alt.sex.fetish.ladies.short-track.speed-skaters +alt.sex.fetish.linux +alt.sex.fetish.motorcycles +alt.sex.fetish.news-servers +alt.sex.fetish.orientals +alt.sex.fetish.panties +alt.sex.fetish.peterds.momma +alt.sex.fetish.power-rangers.kimberly.tight-spandex +alt.sex.fetish.rmgroup +alt.sex.fetish.robots +alt.sex.fetish.sailor-moon +alt.sex.fetish.scat +alt.sex.fetish.size +alt.sex.fetish.sleepy +alt.sex.fetish.smoking +alt.sex.fetish.sportswear +alt.sex.fetish.startrek +alt.sex.fetish.the-bob +alt.sex.fetish.thedavid +alt.sex.fetish.tickling +alt.sex.fetish.tinygirls +alt.sex.fetish.tongue +alt.sex.fetish.trent-reznor +alt.sex.fetish.waifs +alt.sex.fetish.watersports +alt.sex.fetish.wednesday +alt.sex.fetish.wet-and-messy +alt.sex.fetish.wet-walrus +alt.sex.fetish.white-mommas +alt.sex.fetish.wrestling +alt.sex.fetish.x-men +alt.sex.fetishes.sleepy +alt.sex.filipina-wives +alt.sex.first-time +alt.sex.fish +alt.sex.furry +alt.sex.gangbang +alt.sex.girl.watchers +alt.sex.girls +alt.sex.glory-hole.sites +alt.sex.glory-holes.sites +alt.sex.graphics +alt.sex.guns +alt.sex.hello-kitty +alt.sex.historical +alt.sex.homosexual +alt.sex.incest +alt.sex.intergen +alt.sex.jbinoche +alt.sex.jeff-cantwell +alt.sex.jesus +alt.sex.joey.loves.sheep +alt.sex.jp +alt.sex.kinky.chicago +alt.sex.leri +alt.sex.lesbian.antirush.squick.squick.squawk +alt.sex.magazines +alt.sex.marsha-clark +alt.sex.masterbation +alt.sex.masterbation.pictures.female.teen +alt.sex.masturbation +alt.sex.masturbation.bill-palmer +alt.sex.masturbation.pictures.female.teen +alt.sex.men +alt.sex.menstruation +alt.sex.midgets +alt.sex.miguel-lopes.necrophilia +alt.sex.modem-kamikaze +alt.sex.motss +alt.sex.motss.clamato +alt.sex.movies +alt.sex.mud.darkover.asmodean +alt.sex.mud.sojourn-diku +alt.sex.mythical +alt.sex.nasal-hair +alt.sex.necrophilia +alt.sex.necrophilia.royal-family +alt.sex.nfs +alt.sex.nigelw.loves.sheep +alt.sex.nudels.me.too +alt.sex.oral +alt.sex.orgy +alt.sex.parper +alt.sex.passwords +alt.sex.pedophilia +alt.sex.pedophilia.boys +alt.sex.pedophilia.girls +alt.sex.pedophilia.pictures +alt.sex.pedophilia.swaps +alt.sex.phone +alt.sex.phone.ads +alt.sex.pictures +alt.sex.pictures.d +alt.sex.pictures.female +alt.sex.pictures.male +alt.sex.pictures.nospam +alt.sex.pictures.thedavid +alt.sex.plushies +alt.sex.pre-teens +alt.sex.prevost +alt.sex.prom +alt.sex.prostitution +alt.sex.prostitution.tijuana +alt.sex.ramsey.forum +alt.sex.reggie-white.hamster.duct-tape +alt.sex.reptiles +alt.sex.sadurski +alt.sex.safe +alt.sex.senator-exon +alt.sex.services +alt.sex.sexzilla +alt.sex.sexzilla.com +alt.sex.sexzilla.com.bizarre +alt.sex.sexzilla.com.teen +alt.sex.sgml +alt.sex.sheep.baaa.baaa.baaa.moo +alt.sex.sheep.heavyg.glenn +alt.sex.sissy +alt.sex.sissy.slut +alt.sex.skydiving.bondage +alt.sex.sm.fig +alt.sex.snakes +alt.sex.snuff.cannibalism +alt.sex.society.indonesia +alt.sex.sonja +alt.sex.sounds +alt.sex.spam +alt.sex.spanking +alt.sex.stories +alt.sex.stories.babies +alt.sex.stories.bondage +alt.sex.stories.cuckold +alt.sex.stories.d +alt.sex.stories.gay +alt.sex.stories.gay.moderated +alt.sex.stories.hetero +alt.sex.stories.incest +alt.sex.stories.moderated +alt.sex.stories.so +alt.sex.stories.tg +alt.sex.strip-clubs +alt.sex.strippers.jobs +alt.sex.super-size +alt.sex.swingers +alt.sex.swingers.thedavid +alt.sex.swingers.uk +alt.sex.tasteless +alt.sex.teddy-ruxpin +alt.sex.teens +alt.sex.tel-bailliet +alt.sex.telephone +alt.sex.telephone.ads +alt.sex.testeless +alt.sex.toonces +alt.sex.toons +alt.sex.toupee +alt.sex.trans +alt.sex.trio.hetero.for-she.amateur +alt.sex.trio.hetero.for-she.amateur.all-gratis +alt.sex.ugly +alt.sex.uncut +alt.sex.unnatural-acts.jesse-helms +alt.sex.video-swap +alt.sex.virtual.internet.tele-coitus +alt.sex.voxmeet +alt.sex.voyeurism +alt.sex.wanted +alt.sex.wanted.escorts.ads +alt.sex.wanted.escorts.ads.d +alt.sex.wanted.models +alt.sex.wanted.thedavid +alt.sex.watersports +alt.sex.weight-gain +alt.sex.wizards +alt.sex.women +alt.sex.www.sexzilla.com +alt.sex.young +alt.sex.zoophile +alt.sex.zoophilia +alt.sexo.relatos +alt.sexual.abuse.recovery +alt.sexual.abuse.recovery.moderated +alt.sexy.bald.captains +alt.sexzilla +alt.sexzilla.com +alt.sf.scale-models +alt.sf4m +alt.shared-reality.sf-and-fantasy +alt.shared-reality.startrek.klingon +alt.shenanigans +alt.shoe.lesbians +alt.shoe.lesbians.moderated +alt.showbiz.gossip +alt.shut.the.hell.up.geek +alt.shut.the.hell.up.geek.andrew-mckay +alt.shut.the.hell.up.geek.phil-oliver +alt.sigsnip.recovery +alt.silly-group.im-matt +alt.silly-group.persian +alt.silly.group.names.d +alt.silly.little.newsgroup +alt.skate +alt.skate-board +alt.skate.figure +alt.skeezewockers +alt.skincare +alt.skincare.acne +alt.skinheads +alt.skinheads.are.sexxxy.bastards +alt.skinheads.kill.jenn-starkman +alt.skinheads.moderated +alt.skinheads.personals +alt.skunks +alt.skuznet.anonymous +alt.skuznet.general +alt.skuznet.web2news +alt.sl9 +alt.slack +alt.slack.eraserhead +alt.slack.sputum +alt.sleazy-weasel +alt.smee +alt.smee.smeeter.smee.smee.smee.smeeter.smee +alt.smokers +alt.smokers.camel +alt.smokers.camel.filters.100s +alt.smokers.cigars +alt.smokers.cigars-rectal +alt.smokers.cigars.clubhouse +alt.smokers.cigars.reviews +alt.smokers.glamour +alt.smokers.glamour.cigars +alt.smokers.herfers +alt.smokers.marlboro +alt.smokers.pipes +alt.smouldering.frat.house +alt.snail-mail +alt.snizzlebucket +alt.snowmobiles +alt.snowmobiles.old +alt.soc.germans.overseas.tw +alt.soc.indonesia.mature +alt.society.anarchy +alt.society.boomers +alt.society.civil-liberty +alt.society.conservatism +alt.society.economic-dev +alt.society.fruitopia +alt.society.futures +alt.society.generation-x +alt.society.generation-x.ls-bumgarner +alt.society.homeless +alt.society.labor-unions +alt.society.liberalism +alt.society.mental-health +alt.society.modern-life +alt.society.monarchy +alt.society.neutopia +alt.society.nottingham +alt.society.outsiders.uk +alt.society.resistance +alt.society.revolution +alt.society.sovereign +alt.society.sustainable +alt.society.underwear +alt.society.zeitgeist +alt.soda.moxie +alt.soft-sys.corel.draw +alt.solar.photovoltaic +alt.solar.thermal +alt.solaris.x86 +alt.solipsism +alt.something.good +alt.soulmates +alt.sounds.midi.originals +alt.source-code.mac +alt.sources +alt.sources.crypto +alt.sources.mac +alt.sources.wanted +alt.southampton.goth.commandoes +alt.spam +alt.spamhaus +alt.spamhaus.audio +alt.spamhaus.video +alt.spammers.post.here +alt.spanking.reality +alt.spanners +alt.spartacus.netscape.bologna +alt.speech.debate +alt.spiritual.enhancement +alt.spirituality.circle +alt.spirituality.radical-faerie +alt.spleen +alt.spooky +alt.sport.air-hockey +alt.sport.basketball.coaching +alt.sport.basketball.nba.orl-magic +alt.sport.basketball.pro.fantasy +alt.sport.bowling +alt.sport.bungee +alt.sport.darts +alt.sport.dean-stark +alt.sport.dive.rebreather +alt.sport.dragracing +alt.sport.falconry +alt.sport.foosball +alt.sport.go-ped +alt.sport.gymnast.moceanu +alt.sport.hockey.women +alt.sport.horse-racing +alt.sport.horse-racing.systems +alt.sport.icehockey.women +alt.sport.jet-ski +alt.sport.lacrosse +alt.sport.lasertag +alt.sport.lasertag.laserquest +alt.sport.littleleague.admin +alt.sport.llama-tipping +alt.sport.officiating +alt.sport.paintball +alt.sport.photon +alt.sport.pool +alt.sport.qzar +alt.sport.racquetball +alt.sport.shooting +alt.sport.soccer.indoor +alt.sport.squash +alt.sport.street-hockey +alt.sport.synchro +alt.sport.table-tennis +alt.sport.table-tennis.espanol +alt.sport.table-tennis.francais +alt.sport.table-tennis.german.deutsch +alt.sport.table-tennis.italiano +alt.sport.table-tennis.nederlands.dutch +alt.sport.table-tennis.portuguese +alt.sport.table-tennis.suomeksi +alt.sport.track-field +alt.sport.tractorpulling +alt.sport.weightlifting +alt.sport.weightlifting.eas.12week.contest +alt.sport.wrestling.amateur +alt.sport.wrestling.amateur.gay +alt.sport.yo-yo +alt.sports.badminton +alt.sports.baseball.atlanta-braves +alt.sports.baseball.balt-orioles +alt.sports.baseball.bos-redsox +alt.sports.baseball.calif-angels +alt.sports.baseball.card-traders +alt.sports.baseball.chi-whitesox +alt.sports.baseball.chicago-cubs +alt.sports.baseball.cinci-reds +alt.sports.baseball.cleve-indians +alt.sports.baseball.col-rockies +alt.sports.baseball.detroit-tigers +alt.sports.baseball.fla-marlins +alt.sports.baseball.houston-astros +alt.sports.baseball.kc-royals +alt.sports.baseball.la-dodgers +alt.sports.baseball.memorabilia +alt.sports.baseball.minor-leagues +alt.sports.baseball.mke-brewers +alt.sports.baseball.mn-twins +alt.sports.baseball.montreal-expos +alt.sports.baseball.ny-mets +alt.sports.baseball.ny-yankees +alt.sports.baseball.oakland-as +alt.sports.baseball.phila-phillies +alt.sports.baseball.pitt-pirates +alt.sports.baseball.sd-padres +alt.sports.baseball.sea-mariners +alt.sports.baseball.sf-giants +alt.sports.baseball.stl-cardinals +alt.sports.baseball.tb-devilrays +alt.sports.baseball.texas-rangers +alt.sports.baseball.tor-bluejays +alt.sports.basketball.college.big-5 +alt.sports.basketball.ivy.penn +alt.sports.basketball.nba.atlanta-hawks +alt.sports.basketball.nba.boston-celtics +alt.sports.basketball.nba.char-hornets +alt.sports.basketball.nba.chicago-bulls +alt.sports.basketball.nba.clev-cavaliers +alt.sports.basketball.nba.dallas-mavs +alt.sports.basketball.nba.denver-nuggets +alt.sports.basketball.nba.det-pistons +alt.sports.basketball.nba.gs-warriors +alt.sports.basketball.nba.hou-rockets +alt.sports.basketball.nba.ind-pacers +alt.sports.basketball.nba.la-clippers +alt.sports.basketball.nba.la-lakers +alt.sports.basketball.nba.miami-heat +alt.sports.basketball.nba.mil-bucks +alt.sports.basketball.nba.mn-wolves +alt.sports.basketball.nba.nj-nets +alt.sports.basketball.nba.orlando-magic +alt.sports.basketball.nba.phila-76ers +alt.sports.basketball.nba.phx-suns +alt.sports.basketball.nba.port-blazers +alt.sports.basketball.nba.sa-spurs +alt.sports.basketball.nba.sac-kings +alt.sports.basketball.nba.seattle-sonics +alt.sports.basketball.nba.tor-raptors +alt.sports.basketball.nba.utah-jazz +alt.sports.basketball.nba.vanc-grizzlies +alt.sports.basketball.nba.wash-bullets +alt.sports.basketball.pro.ny-knicks +alt.sports.college.acc +alt.sports.college.acc.unc +alt.sports.college.america-east +alt.sports.college.atl10 +alt.sports.college.big-12 +alt.sports.college.big-east +alt.sports.college.big10 +alt.sports.college.conference-usa +alt.sports.college.hawgball +alt.sports.college.ivy-league +alt.sports.college.lsu +alt.sports.college.michigan +alt.sports.college.nebraska.sucks.sucks.sucks +alt.sports.college.notre-dame +alt.sports.college.ohio-state +alt.sports.college.ohio-state.football +alt.sports.college.pac-10 +alt.sports.college.sec +alt.sports.college.sec.kentucky +alt.sports.college.sec.tennessee +alt.sports.college.seton-hall +alt.sports.college.syracuse +alt.sports.college.utexas +alt.sports.darts +alt.sports.football.arena +alt.sports.football.college.fsu-seminoles +alt.sports.football.mn-vikings +alt.sports.football.oak-raiders +alt.sports.football.pro.ariz-cardinals +alt.sports.football.pro.atl-falcons +alt.sports.football.pro.baltimore +alt.sports.football.pro.buffalo-bills +alt.sports.football.pro.car-panthers +alt.sports.football.pro.chicago-bears +alt.sports.football.pro.cinci-bengals +alt.sports.football.pro.cleve-browns +alt.sports.football.pro.dallas-cowboys +alt.sports.football.pro.dallas-cowboys.erik.williams.rape.rape.rape +alt.sports.football.pro.denver-broncos +alt.sports.football.pro.detroit-lions +alt.sports.football.pro.gb-packers +alt.sports.football.pro.houston-oilers +alt.sports.football.pro.indy-colts +alt.sports.football.pro.jville-jaguars +alt.sports.football.pro.kc-chiefs +alt.sports.football.pro.la-raiders +alt.sports.football.pro.la-rams +alt.sports.football.pro.miami-dolphins +alt.sports.football.pro.ne-patriots +alt.sports.football.pro.no-saints +alt.sports.football.pro.ny-giants +alt.sports.football.pro.ny-jets +alt.sports.football.pro.oak-raiders +alt.sports.football.pro.phila-eagles +alt.sports.football.pro.phoe-cardinals +alt.sports.football.pro.pitt-steelers +alt.sports.football.pro.sd-chargers +alt.sports.football.pro.sea-seahawks +alt.sports.football.pro.sf-49ers +alt.sports.football.pro.stl-rams +alt.sports.football.pro.tampabay-bucs +alt.sports.football.pro.wash-redskins +alt.sports.gaelic-games +alt.sports.greed +alt.sports.gymnastics +alt.sports.hockey.ahl +alt.sports.hockey.cohl +alt.sports.hockey.echl +alt.sports.hockey.fantasy +alt.sports.hockey.hclugano +alt.sports.hockey.ihl +alt.sports.hockey.ihl.manitoba-moose +alt.sports.hockey.junior +alt.sports.hockey.nhl.boston-bruins +alt.sports.hockey.nhl.buffalo-sabres +alt.sports.hockey.nhl.chat +alt.sports.hockey.nhl.chi-blackhawks +alt.sports.hockey.nhl.clgry-flames +alt.sports.hockey.nhl.col-avalanche +alt.sports.hockey.nhl.dallas-stars +alt.sports.hockey.nhl.det-redwings +alt.sports.hockey.nhl.edm-oilers +alt.sports.hockey.nhl.fla-panthers +alt.sports.hockey.nhl.hford-whalers +alt.sports.hockey.nhl.la-kings +alt.sports.hockey.nhl.mn-wild +alt.sports.hockey.nhl.mtl-canadiens +alt.sports.hockey.nhl.nash-predators +alt.sports.hockey.nhl.nj-devils +alt.sports.hockey.nhl.ny-islanders +alt.sports.hockey.nhl.ny-rangers +alt.sports.hockey.nhl.ott-senators +alt.sports.hockey.nhl.phila-flyers +alt.sports.hockey.nhl.phx-coyotes +alt.sports.hockey.nhl.pit-penguins +alt.sports.hockey.nhl.pitt-penguins +alt.sports.hockey.nhl.que-nordiques +alt.sports.hockey.nhl.sj-sharks +alt.sports.hockey.nhl.stl-blues +alt.sports.hockey.nhl.tor-mapleleafs +alt.sports.hockey.nhl.vanc-canucks +alt.sports.hockey.nhl.wash-capitals +alt.sports.hockey.nhl.winnipeg-jets +alt.sports.hockey.rhi +alt.sports.nba.basketball.wash-wizards +alt.sports.radio.the-ticket +alt.sports.soccer.coventry-city +alt.sports.soccer.derby.county +alt.sports.soccer.euronet.tournament +alt.sports.soccer.european +alt.sports.soccer.european.uk +alt.sports.soccer.european.uk.no-bigotry +alt.sports.soccer.european.uk.no-scots +alt.sports.soccer.european.uk.premiership +alt.sports.soccer.everton +alt.sports.soccer.liverpool +alt.sports.soccer.manchester.united +alt.sports.soccer.non-league +alt.sports.soccer.portsmouth.footbll.club +alt.sports.soccer.sunderland +alt.sports.soccer.worldcup98 +alt.sports.spurs +alt.stagecraft +alt.stamps +alt.stamps.www.philatelic.com +alt.stan-kalisch.no-ethics +alt.stanley.j.kalish.has.two.feet.and.a.mustache.and.smells.like.tabasco.sauce +alt.star-chamber +alt.star-chamber.louise.woodward +alt.starfleet.rpg +alt.starfleet.rpg.german +alt.startrek.bajoran +alt.startrek.books +alt.startrek.borg +alt.startrek.cardassian +alt.startrek.creative +alt.startrek.creative.all-ages +alt.startrek.creative.erotica +alt.startrek.creative.erotica.moderated +alt.startrek.klingon +alt.startrek.role-playing +alt.startrek.romulan +alt.startrek.soul.rpg +alt.startrek.tos.trekmuse +alt.startrek.trill +alt.startrek.uss-amagosa +alt.startrek.vs.dr-who +alt.startrek.vs.starwars +alt.startrek.vulcan +alt.starwars.xvt +alt.steinberg.cubase +alt.stereo +alt.stereo.awareness +alt.stereo.bigot-enabler +alt.stereo.buddha +alt.stereo.caesium +alt.stereo.caesium.toast +alt.stereo.canadian.humour +alt.stereo.crescent.oblong-juice +alt.stereo.cuddly.subgenii +alt.stereo.curveball.halogen +alt.stereo.death.bork.bork.bork +alt.stereo.disappointment.in.a.can +alt.stereo.embargo.bill-palmer +alt.stereo.golf-stains +alt.stereo.gordita +alt.stereo.grape-shuttle.rant +alt.stereo.grape-shuttle.sanctum +alt.stereo.grape-shuttle.silence +alt.stereo.guest.sheep +alt.stereo.hard-boiled.planets +alt.stereo.heebie-jeebies +alt.stereo.kia +alt.stereo.love-removal.machine +alt.stereo.meow +alt.stereo.mexico.bandwidth +alt.stereo.nuke.tasmania +alt.stereo.placekicker.cornstarch +alt.stereo.second.sakura +alt.stereo.soybean +alt.stereo.spork +alt.stereo.stoopid.cn-tower +alt.stereo.therapy-slime +alt.stereo.thursday.evening +alt.stereo.toast +alt.stereo.toast.with-cheese +alt.stereo.viagra +alt.steve-walter +alt.stink +alt.stolen.property +alt.stories.erotic +alt.stories.incest +alt.stories.transformation +alt.stories.urban-harvest +alt.stormfront.bbs +alt.student.affairs.net +alt.students.aberdeen +alt.students.nontraditional +alt.stupid-ass.bill-palmer +alt.stupid.idiots +alt.stupid.morons +alt.stupidity +alt.stupidity.me-too +alt.stupidity.spatch +alt.sublime +alt.sublime.d +alt.subspace +alt.sufi +alt.suicide.holiday +alt.suicide.methods +alt.sunday +alt.super.nes +alt.superhelp +alt.supermodels +alt.supermodels.cindy-crawford +alt.support +alt.support.abortion +alt.support.abuse-partners +alt.support.acre-shifting +alt.support.addisons +alt.support.adoption.advocacy +alt.support.aids.partners +alt.support.alzheimers +alt.support.amputee +alt.support.angioplasty +alt.support.anhedonia +alt.support.anxiety-panic +alt.support.arthritis +alt.support.arthritis.risg-spondy.info +alt.support.arthritis.spondyloarthro.moderated +alt.support.artists-way +alt.support.asthma +alt.support.asthma.buteyko +alt.support.ataxia +alt.support.attn-deficit +alt.support.attn-deficit.doesnt-exist +alt.support.attn-deficit.mates +alt.support.autism +alt.support.big-folks +alt.support.birth-parent +alt.support.boy-lovers +alt.support.breast-implant +alt.support.breast-implant.moderated +alt.support.breastfeeding +alt.support.bruderhof +alt.support.cancer +alt.support.cancer.prostate +alt.support.cancer.testicular +alt.support.celiac +alt.support.cerebral-palsy +alt.support.childfree +alt.support.chronic-hives +alt.support.chronic-pain +alt.support.crohns-colitis +alt.support.crossdressing +alt.support.crossliving +alt.support.dental-phobia +alt.support.depression +alt.support.depression.manic +alt.support.depression.medication +alt.support.depression.recovery +alt.support.depression.seasonal +alt.support.depression.teens +alt.support.desupernet +alt.support.dev-delays +alt.support.diabetes.kids +alt.support.diet +alt.support.diet.fit-for-life +alt.support.diet.low-carb +alt.support.diet.rx +alt.support.diet.zone +alt.support.disabled.artists +alt.support.disabled.caregivers +alt.support.disabled.sexuality +alt.support.disorders.neurological +alt.support.dissociation +alt.support.divorce +alt.support.divorce.jewish +alt.support.dwarfism +alt.support.dying-well +alt.support.dying-well.moderated +alt.support.dyspraxia +alt.support.dystonia +alt.support.eating-disord +alt.support.endometriosis +alt.support.epilepsy +alt.support.ex-cult +alt.support.ex-cult.siddha-yoga +alt.support.food-allergies +alt.support.foster-parents +alt.support.glaucoma +alt.support.grief +alt.support.grief.pet-loss +alt.support.headaches.migraine +alt.support.hearing-loss +alt.support.heart-defects +alt.support.heartburn +alt.support.hemophilia +alt.support.herpes +alt.support.hospice +alt.support.hypermobility +alt.support.ibs +alt.support.impotence +alt.support.incontinence +alt.support.inter-cystitis +alt.support.invertebrate +alt.support.ipl-recovery +alt.support.ipl-recovery.its.his.fault.no.its.his +alt.support.jaw-disorders +alt.support.jock-strap +alt.support.kidney-failure +alt.support.learning-disab +alt.support.leprosy +alt.support.loneliness +alt.support.lupus +alt.support.marfan +alt.support.marriage +alt.support.menopause +alt.support.menopause.husbands +alt.support.ms-recovery +alt.support.mult-sclerosis +alt.support.mult-sclerosis.alternatives +alt.support.myasthe-gravis +alt.support.narcolepsy +alt.support.non-smokers +alt.support.non-smokers.moderated +alt.support.norplant +alt.support.obesity +alt.support.ocd +alt.support.opp-defiant +alt.support.ostomy +alt.support.parents.with-custody +alt.support.pco +alt.support.personality +alt.support.personality.schizoid +alt.support.post-polio +alt.support.premature-baby +alt.support.prostate.prostatitis +alt.support.pulmonary +alt.support.road-rage +alt.support.rsd +alt.support.schizophrenia +alt.support.scleroderma +alt.support.self-esteem +alt.support.self-harm +alt.support.sexreassign +alt.support.short +alt.support.shyness +alt.support.single-parents +alt.support.sinusitis +alt.support.skin-diseases +alt.support.skin-diseases.hidradenitis +alt.support.skin-diseases.psoriasis +alt.support.sleep-disorder +alt.support.social-phobia +alt.support.spina-bifida +alt.support.srs +alt.support.step-parents +alt.support.stop-smoking +alt.support.stuttering +alt.support.survivors.prozac +alt.support.tall +alt.support.telecommute +alt.support.thyroid +alt.support.tinnitus +alt.support.tourette +alt.support.trauma-ptsd +alt.support.tuberculosis +alt.support.turner-syndrom +alt.support.warez.recovery +alt.surfing +alt.surfing.bodyboard +alt.surfing.longboard +alt.surfing.luddite.homophobe +alt.surrealism +alt.surveyor +alt.sustainable.agriculture +alt.swedish.chef.bork.bork.bork +alt.swingers +alt.syncronys +alt.syntax.tactical +alt.syquest +alt.sys.abox +alt.sys.amiga.blitz +alt.sys.amiga.demos +alt.sys.amiga.e +alt.sys.amiga.miami +alt.sys.amiga.thor +alt.sys.intergraph +alt.sys.mac.newuser-help +alt.sys.pc-clone.acer +alt.sys.pc-clone.compaq +alt.sys.pc-clone.dell +alt.sys.pc-clone.gateway2000 +alt.sys.pc-clone.micron +alt.sys.pc-clone.packardbell +alt.sys.pc-clone.zeos +alt.sys.pdp10 +alt.sys.pdp11 +alt.sys.pdp8 +alt.sys.perq +alt.sys.sun +alt.sysadmin.recovery +alt.table-tennis.mike-lewis +alt.taiwan.republic +alt.taker +alt.talk.bestiality +alt.talk.commonwealth +alt.talk.creationism +alt.talk.esperanto +alt.talk.korean +alt.talk.mended-drum +alt.talk.rec.soc.biz.news.comp.humanities.meow.misc.moderated.meow +alt.talk.royalty +alt.talk.ulster +alt.talk.weather +alt.talk.weather.snow +alt.talkers.cruise +alt.talkers.ewtoo +alt.talkers.jeamland +alt.talkers.joot +alt.talkers.ncohafmuta +alt.talkers.nuts +alt.talkers.programming +alt.talkers.snowplains +alt.tamsyn.die.die.die +alt.tanya.shalayeva +alt.tarot +alt.tasteless +alt.tasteless.hank-becker +alt.tasteless.jokes +alt.tasteless.penis +alt.tasteless.pictures +alt.taxi.world +alt.tech-gadgets +alt.tech-support.recovery +alt.technology.misc +alt.technology.smartcards +alt.teens +alt.teens.advice +alt.teens.anti-idiot +alt.teens.gay +alt.teens.intelligent.insanity +alt.teens.lesbian +alt.teens.penpals +alt.teens.poetry.and.stuff +alt.teens.sexuality +alt.teenstation.bollywood +alt.telaviv +alt.telecom.phones.plain-tariff +alt.telescopes.meade.lx200 +alt.telia-suger +alt.tennis +alt.terry.knab.is.a.twat +alt.test +alt.test-ns +alt.test.a +alt.test.abc.xyz.lmn +alt.test.big.al +alt.test.binaries +alt.test.cjc +alt.test.control.approved.header +alt.test.d +alt.test.demon.nl +alt.test.ds +alt.test.fest +alt.test.fishing +alt.test.fishing.spin +alt.test.flyfishing +alt.test.group +alt.test.headers +alt.test.hello-world +alt.test.hulabaloo +alt.test.ignore.yes.its.that.easy +alt.test.jamie +alt.test.mis3 +alt.test.my.new.group +alt.test.not-r +alt.test.one +alt.test.only +alt.test.signature +alt.test.test +alt.test.test.jojo +alt.test.test.wow +alt.test.two +alt.test.wombat +alt.test.yer.posts +alt.testing.dammit +alt.testing.it +alt.testing.testing +alt.tests.high-school.new-york.regents +alt.tfn.flame +alt.tfn.flame.dork +alt.thanatos +alt.thanksgiving.turkey.cockadoodledoo +alt.the-chaps +alt.thebird +alt.thebird.copwatch +alt.thebird.hippie +alt.thebird.liberal +alt.theosophy +alt.there.is.only.one.newgrouper.in.this.town.and.his.name.sure.aint.jeffery.jeffary.jeffory.boyd +alt.thinking.hurts +alt.thinkquest +alt.this.is.yet.another.test +alt.this.sucks +alt.thought.southern +alt.thrash +alt.thursday +alt.timewasters.roddel +alt.timothy.sutter +alt.tinygirls +alt.titty.fuck.the.skull.of.oliver1 +alt.tmo +alt.toilet-paper.1-ply +alt.toilet-paper.2-ply +alt.toilet-paper.3-ply +alt.toilet-paper.leaves +alt.toilet-paper.shirtsleeve +alt.tools.repair+advice +alt.toon-pics +alt.torture +alt.tos.members.d +alt.townhouse.phillip-st +alt.toys.gi-joe +alt.toys.gi-joe.1980s +alt.toys.hi-tech +alt.toys.lego +alt.toys.my-little-pony +alt.toys.transformers +alt.toys.transformers.classic.moderated +alt.toys.transformers.fanfic +alt.toys.transformers.marketplace +alt.toys.virtual-pets +alt.trade.spareparts +alt.traditional.witchcraft +alt.training.technology +alt.transformation.stories +alt.transgendered +alt.travel.canada +alt.travel.road-trip +alt.travel.uk.air +alt.travel.uk.marketplace +alt.treasure.hunting +alt.treasurequest.com +alt.troll +alt.true-crime +alt.tuesday +alt.turin-shroud +alt.tv +alt.tv.3djam-tv +alt.tv.3rd-rock +alt.tv.7th-heaven +alt.tv.a-team +alt.tv.aaron-spelling +alt.tv.ab-fab +alt.tv.airwolf +alt.tv.ally-mcbeal +alt.tv.amer-gothic +alt.tv.animaniacs +alt.tv.animaniacs.pinky-brain +alt.tv.another-world +alt.tv.avengers +alt.tv.babylon-5 +alt.tv.barney +alt.tv.baywatch +alt.tv.beakmans-world +alt.tv.beauty+beast +alt.tv.bh90210 +alt.tv.blues-clues +alt.tv.bnn +alt.tv.boston-common +alt.tv.brady-bunch +alt.tv.brisco-county +alt.tv.broadcasting +alt.tv.buffy-v-slayer +alt.tv.buffy-v-slayer.creative +alt.tv.caroline-city +alt.tv.cell-block-h +alt.tv.chicago-hope +alt.tv.chips +alt.tv.christy +alt.tv.comedy-central +alt.tv.commercials +alt.tv.cow-n-chicken +alt.tv.dallas +alt.tv.daria +alt.tv.dark-skies +alt.tv.dark_shadows +alt.tv.dawsons-creek +alt.tv.dawsons-creek.sucks +alt.tv.daytime-shows +alt.tv.dean-stark +alt.tv.dharma-greg +alt.tv.dinosaurs +alt.tv.dinosaurs.barney.die.die.die +alt.tv.discovery.canada +alt.tv.dr-katz +alt.tv.dr-quinn +alt.tv.duckman +alt.tv.due-south +alt.tv.due-south.creative +alt.tv.early-edition +alt.tv.earth2 +alt.tv.eek-the-cat +alt.tv.emergency +alt.tv.er +alt.tv.er.creative +alt.tv.expedientes-x +alt.tv.forever-knight +alt.tv.foxab +alt.tv.frasier +alt.tv.freakazoid +alt.tv.friends +alt.tv.friends.northamerica +alt.tv.game-shows +alt.tv.game-shows.price-is-right +alt.tv.gerbert +alt.tv.gold-monkey +alt.tv.hercules +alt.tv.hermans-head +alt.tv.highlander +alt.tv.hogans-heroes +alt.tv.home-and-away +alt.tv.home-imprvment +alt.tv.hometime +alt.tv.homicide +alt.tv.ilovelucy +alt.tv.infomercials +alt.tv.iron-chef +alt.tv.kids-in-hall +alt.tv.kids-inc +alt.tv.kindred +alt.tv.king-of-hill +alt.tv.knight-rider +alt.tv.kungfu +alt.tv.lafemme-nikita +alt.tv.law-and-order +alt.tv.lexx +alt.tv.liquid-tv +alt.tv.lois-n-clark +alt.tv.lois-n-clark.fanfic +alt.tv.lost-in-space.danger.will-robinson.danger.danger.danger +alt.tv.macross +alt.tv.mad-about-you +alt.tv.magnum-pi +alt.tv.mannix +alt.tv.martha-stewart +alt.tv.mash +alt.tv.mathnet +alt.tv.max-headroom +alt.tv.melrose-place +alt.tv.miami-vice +alt.tv.millenium +alt.tv.millenium.uk +alt.tv.millennium +alt.tv.millennium.uk +alt.tv.mission-imposs +alt.tv.mr-belvedere +alt.tv.mst3k +alt.tv.mtv +alt.tv.mtv-europe +alt.tv.muppets +alt.tv.murder-one +alt.tv.mwc +alt.tv.my-s-c-life +alt.tv.networks.cbc +alt.tv.newsradio +alt.tv.nick-at-nite +alt.tv.nickelodeon +alt.tv.night-tracks +alt.tv.northern-exp +alt.tv.nowhere-man +alt.tv.nypd-blue +alt.tv.outer-limits +alt.tv.party-of-five +alt.tv.pee-wee-herman +alt.tv.pi +alt.tv.picket-fences +alt.tv.pirate +alt.tv.pizzacats +alt.tv.pol-incorrect +alt.tv.port-charles +alt.tv.pretender +alt.tv.prisoner +alt.tv.profiler +alt.tv.psi-factor +alt.tv.public-access +alt.tv.quantum-leap.creative +alt.tv.quincy-me +alt.tv.raw +alt.tv.real-world +alt.tv.reboot +alt.tv.red-dwarf +alt.tv.red-dwarf.discussion +alt.tv.red-dwarf.fans +alt.tv.red-dwarf.fans-only +alt.tv.red-dwarf.moderated +alt.tv.remember-wenn +alt.tv.ren-n-stimpy +alt.tv.road-rules +alt.tv.robotech +alt.tv.rockford-files +alt.tv.roseanne +alt.tv.sabrina +alt.tv.saved-bell +alt.tv.scott-bakula +alt.tv.sctv +alt.tv.seaquest +alt.tv.seinfeld +alt.tv.sentai +alt.tv.sentinel +alt.tv.sesame-street +alt.tv.silk-stalkings +alt.tv.simpsons +alt.tv.simpsons.itchy-scratchy +alt.tv.singled-out +alt.tv.sitcom +alt.tv.sliders +alt.tv.sliders.creative +alt.tv.smk +alt.tv.snl +alt.tv.southpark +alt.tv.space-a-n-b +alt.tv.space-cases +alt.tv.sports +alt.tv.star-trek.ds9 +alt.tv.star-trek.jeffery-hunt +alt.tv.star-trek.next-gen +alt.tv.star-trek.tos +alt.tv.star-trek.voyager +alt.tv.stargate-sg1 +alt.tv.stars.d-fishel +alt.tv.swamp-thing +alt.tv.swatkats +alt.tv.tales-crypt +alt.tv.talkshows.daytime +alt.tv.talkshows.late +alt.tv.tech.hdtv +alt.tv.tech.misc +alt.tv.tech.plain-tv +alt.tv.teletubbies +alt.tv.the-critic +alt.tv.the-goodies +alt.tv.the-jihad +alt.tv.the-practice +alt.tv.the-state +alt.tv.the-tick +alt.tv.thebox +alt.tv.thepractice +alt.tv.this-old-house +alt.tv.thundercats +alt.tv.tiny-toon +alt.tv.tiny-toon.sex +alt.tv.tiny-toon.ttbssex +alt.tv.toute-fabienne +alt.tv.traders +alt.tv.tv-nation +alt.tv.twin-peaks +alt.tv.v +alt.tv.voice-artists +alt.tv.vr5 +alt.tv.wings +alt.tv.wiseguy +alt.tv.wnn +alt.tv.wonder-years +alt.tv.working +alt.tv.world-news-now.moderated +alt.tv.x-files +alt.tv.x-files.analysis +alt.tv.x-files.creative +alt.tv.x-files.x-ville +alt.tv.xena +alt.tv.xena-subtext +alt.tv.xena-subtext.misc +alt.tv.xena.creative +alt.tv.xena.creative.mature +alt.tv.xena.creative.subtext +alt.tv.xena.subtext.creative +alt.tv.xuxa +alt.two.zero.four +alt.ufc +alt.ufo.reports +alt.uhaul.good.bad.ugly +alt.uk.a-levels +alt.uk.customer.service.issues +alt.uk.customer.service.issues.pc +alt.uk.games.video.playstation +alt.uk.late.teens +alt.uk.law +alt.uk.law.and.order +alt.uk.north.ellesmere-port +alt.uk.virgin-net.oldbies +alt.uk.york.classifieds +alt.umist.computer.users.society +alt.union.iatse +alt.union.natl-writers +alt.univ.collegiate.uk +alt.unix.wizards +alt.upa +alt.urokosodoji +alt.usa-sucks +alt.usage.english +alt.usage.german +alt.usage.spanish +alt.useless.newsgroup.delete.me +alt.usenet.kooks +alt.usenet.legends +alt.usenet.manifestoes +alt.usenet.offline-reader +alt.usenet.offline-reader.forte-agent +alt.usenet.offline-reader.forte-agent.jehad +alt.usenet.offline-reader.forte-agent.modified +alt.usenet.pirated.agent +alt.usenet.reposts +alt.usenet.satellite +alt.usenet.surveys +alt.usenetmud +alt.utensils.spork +alt.uu.announce +alt.uu.comp.os.linux.questions +alt.uu.lang.esperanto.misc +alt.uu.lang.russian.misc +alt.uu.math.misc +alt.uunet.anti-trust +alt.vacation.las-vegas +alt.vampyres +alt.vancouver.white.pride +alt.video.digital-tv +alt.video.dvd +alt.video.dvd.complain +alt.video.dvd.software +alt.video.dvd.tech +alt.video.games.reviews +alt.video.laserdisc +alt.video.letterbox +alt.video.letterbox.bernie-faber.moron-freak +alt.video.satellite.4dtv +alt.video.sound +alt.video.tape-trading +alt.video.tape-trading.pal +alt.video.vcr +alt.videos.bootlegs +alt.videotron.general +alt.vinocur.replies +alt.virasoft.info +alt.virasoft.vso +alt.visa.us +alt.visa.us.marriage-based +alt.visio +alt.volkswagen.beetle +alt.w3life +alt.wally +alt.war +alt.war.civil.usa +alt.war.cypher +alt.war.mercenary +alt.war.nuclear +alt.war.pow-mia +alt.war.vietnam +alt.warez.burnout +alt.warez.consoles +alt.warez.godz +alt.warez.ibm-pc +alt.warez.ibm-pc.apps +alt.warez.ibm-pc.games +alt.warez.ibm-pc.old +alt.wastewater +alt.wavcatcher +alt.waves +alt.we.love.bob.payne.not +alt.webcom.form-users +alt.webcom.users +alt.webedit +alt.webrings.announce +alt.wedding +alt.wedding.marketplace +alt.wednesday +alt.wee +alt.wee.goaway.goaway.goaway +alt.weemba +alt.welch-family +alt.wesley.crusher.die.die.die +alt.wh +alt.what-to-do +alt.who.is.bob +alt.wholesale +alt.wicware +alt.wildland.firefighting +alt.windows.cde +alt.windows95 +alt.winsock +alt.winsock.programming +alt.winsock.trumpet +alt.wired +alt.witchcraft +alt.wolves +alt.wolves.hybrid +alt.women.attitudes +alt.women.petite +alt.women.shesaid +alt.women.supremacy +alt.worldsaway +alt.worms.out.of.a.hot.cheese-log +alt.writing +alt.writing.scams +alt.www +alt.www.authoring +alt.www.hotjava +alt.www.imdb.us +alt.www.marketing +alt.www.marketing.adverts +alt.www.sexzilla.com +alt.www.sites +alt.www.stupid-idiots.com +alt.www.webguild +alt.www.webmaster +alt.www.webmaster.xxx +alt.x +alt.x.upper-case +alt.x.y +alt.xyzzy +alt.yang.sux +alt.yang.suxor +alt.yet.another.loser.consoles.himself.with.a.vanity.group +alt.ygdrasil +alt.ygdrasil.film +alt.yoga +alt.yogmael +alt.yowie +alt.yule.log +alt.zen +alt.zencor +alt.zezon +alt.zima +alt.zines +alt.zoom +arc.ccf.services +arc.ccf.super +arc.ccf.unix +arc.news.aar +arkane.announce +arkane.answers +arkane.cancel +arkane.config +arkane.control +arkane.ether.misc +arkane.fan.breasts.lara-beaton +arkane.fan.kate-nepveu +arkane.fan.widderslainte +arkane.misc +arkane.personal.alistair-young +arkane.policy +arkane.test +arnet.general +asu.acad_prof.announce +asu.admin.misc +asu.books.exchange +asu.comp.academic.transition +asu.comp.distributed +asu.comp.micro +asu.cs.ai +asu.cs.talk +asu.culture.homosexual +asu.culture.indian +asu.ecs.news +asu.ecs.talk +asu.forsale.dept +asu.forsale.misc +asu.gammage.announce +asu.general.announce +asu.general.crime_stop +asu.general.events +asu.general.lectures +asu.general.public +asu.general.rideshare +asu.general.trans_catalyst +asu.group.gundevils +asu.group.misc +asu.group.paradox +asu.group.uc +asu.group.ucw +asu.group.uug +asu.humanresources.announce +asu.investigates.info-highway +asu.library.announce +asu.mu.announce +asu.music.notes +asu.odysseyville.mayorsmessages +asu.odysseyville.problemunit1 +asu.odysseyville.problemunit2 +asu.odysseyville.problemunit3 +asu.odysseyville.problemunit4 +asu.odysseyville.problemunit5 +asu.odysseyville.soapbox +asu.org.acm +asu.org.toastmasters.announce +asu.org.toastmasters.talk +asu.permias.tempe +asu.politics.speech +asu.politics.talk +asu.research.announce +asu.research.modelling +asu.sports.misc +asu.src.announce +asu.staff.announce +asu.staff.faculty +asu.staff.training +asu.student.graduate +asu.student.international +asu.student.residence +asu.sys.mac +asu.test +asu.theater.announce +asu.wanted +asu.west.announce +at.anzeigen.arbeitsmarkt +at.anzeigen.gewerblich.allgemein +at.anzeigen.gewerblich.computer +at.anzeigen.privat.allgemein +at.anzeigen.privat.computer +at.blackbox +at.blackbox.behinderte +at.blackbox.gpa.wien.fcg +at.blackbox.gruene.planet +at.blackbox.gruene.wien.diskussionen +at.blackbox.gruene.wien.umwelt+verkehr +at.blackbox.jvp.wien +at.blackbox.lomographie +at.blackbox.lomographie.galerie +at.blackbox.meine-meinung.europa +at.blackbox.meine-meinung.innenpolitik +at.blackbox.meine-meinung.kultur +at.blackbox.meine-meinung.medien +at.blackbox.meine-meinung.sport +at.blackbox.meine-meinung.weltpolitik +at.blackbox.meine-meinung.wirtschaft +at.blackbox.profil.feedback +at.blackbox.profil.kommentare +at.blackbox.profil.leitartikel +at.blackbox.spoe.wien +at.blackbox.spoe.wien.caspar-einem +at.blackbox.spoe.wien.disput +at.blackbox.spoe.wien.presse +at.blackbox.spoe.wien.termine +at.blackbox.trend.feedback +at.blackbox.trend.kommentare +at.blackbox.trend.leitartikel +at.blackbox.umweltberatung +at.blackbox.vsstoe +at.blackbox.wien.jugendzentren +at.blackbox.wo-men +at.blackbox.zivildienst +at.fido.aon +at.fido.kurzwelle +at.fido.segeln +at.fido.sicherheit +at.fido.startrek +at.freizeit.motorrad +at.freizeit.rollenspiele +at.freizeit.sonstiges +at.infosystems +at.internet.provider +at.internet.sonstiges +at.mail.edv-recht +at.mail.mbone +at.musik.macher +at.ping.pcfranz +at.region.graz +at.region.steiermark +at.tuwien.general +at.tuwien.se.next +at.umwelt +at.univie.innovation +at.usenet +at.usenet.announce +at.usenet.cancel-reports +athena.announcements +athena.forsale +athena.gamit +athena.housing +athena.misc +athena.test +atl.arno +atl.general +atl.housing +atl.jobs +atl.olympics +atl.resumes +atl.singles +atl.test +ats.dos.resnet +ats.homenet.misc +ats.mac.resnet +ats.windows.resnet +aurora.general +aus.ads.commercial +aus.ads.forsale +aus.ads.forsale.computers.new +aus.ads.forsale.computers.used +aus.ads.jobs +aus.ads.jobs.moderated +aus.ads.jobs.resumes +aus.ads.personals +aus.ads.wanted +aus.aviation +aus.aviation.airspace +aus.bicycle +aus.books +aus.bushwalking +aus.cars +aus.censorship +aus.comms +aus.comms.mobile +aus.comms.videocon +aus.computers +aus.computers.ai +aus.computers.amiga +aus.computers.cdrom +aus.computers.ibm-pc +aus.computers.linux +aus.computers.logic-prog +aus.computers.mac +aus.computers.os2 +aus.computers.parallel +aus.computers.sun +aus.computers.tex +aus.consumers +aus.culture.china +aus.culture.gothic +aus.culture.hellenic +aus.culture.lesbigay +aus.culture.ultimo +aus.dvd +aus.education +aus.education.bio-newtech +aus.education.open-learning +aus.electronics +aus.environment.conservation +aus.environment.misc +aus.films +aus.flame +aus.flame.gareth-powell +aus.flame.usa +aus.games +aus.games.bridge +aus.games.roleplay +aus.gardens +aus.general +aus.hi-fi +aus.invest +aus.jokes +aus.legal +aus.legal.moderated +aus.mathematics +aus.mbio +aus.media-watch +aus.motorcycles +aus.music +aus.net.access +aus.net.announce +aus.net.directory +aus.net.irc +aus.net.mail +aus.net.news +aus.net.policy +aus.net.status +aus.org.acs +aus.org.acs.books +aus.org.auug +aus.org.awpa +aus.org.efa +aus.org.hisa +aus.org.rmaa +aus.org.sage +aus.org.scouting +aus.org.waia +aus.personals +aus.pets +aus.photo +aus.politics +aus.radio.amateur.digital +aus.radio.amateur.misc +aus.radio.amateur.wicen +aus.radio.broadcast +aus.radio.scanner +aus.radio.showprep +aus.rail +aus.rail.models +aus.religion +aus.religion.christian +aus.sf +aus.sf.babylon5 +aus.sf.star-trek +aus.snow +aus.sport +aus.sport.aussie-rules +aus.sport.motor +aus.sport.rugby-league +aus.sport.scuba +aus.stats.s +aus.students +aus.students.overseas +aus.talk.ltuae +aus.test +aus.theatre +aus.transport +aus.tv +aus.tv.community +aus.tv.pay +aus.tv.x-files +aus.tv.x-files.d +austin.announce +austin.autos +austin.flame +austin.food +austin.forsale +austin.gardening +austin.general +austin.internet +austin.jobs +austin.music +austin.org.sca +austin.politics +austin.talk +austin.test +austin.usenet.config +austin.usenet.stats +av.avid +av.computer +av.config +av.dining +av.forsale +av.general +av.jobs +av.mug +av.news +av.personals +av.qnet +av.seminars +av.test +av.user +av.wanted +az.config +az.forsale +az.general +az.internet +az.jobs +az.politics +az.swusrgrp +az.teens +az.test +az.wanted +ba.announce +ba.art +ba.bicycles +ba.broadcast +ba.consumers +ba.dance +ba.food +ba.gardens +ba.general +ba.helping-hand +ba.internet +ba.jobs.agency +ba.jobs.contract.agency +ba.jobs.contract.direct +ba.jobs.direct +ba.jobs.discussion +ba.jobs.resumes +ba.market.computers +ba.market.housing +ba.market.misc +ba.market.vehicles +ba.motorcycles +ba.motss +ba.mountain-folk +ba.music +ba.music.drumming +ba.news.config +ba.news.group +ba.news.stats +ba.personals +ba.politics +ba.seminars +ba.singles +ba.smartvalley +ba.sports +ba.startup +ba.test +ba.transportation +ba.weather +backbone.general +balt.config +balt.general +balt.jobs +balt.music +bc.bcnet +bc.cycling +bc.general +bc.jobs +bc.news.stats +bc.politics +bc.unix +bc.weather +bcs.activists +bcs.announce +bcs.announce.d +bcs.answers +bcs.config +bcs.misc +bcs.olsc +bcs.sig.mac +bcs.sig.misc +bcs.test +bda.config +bda.forum.bda +bda.forum.hfa +bda.forum.jp +bda.forum.zeit.feuilleton +bda.forum.zeit.job +bda.forum.zeit.kolumnen +bda.forum.zeit.thema +bda.jp.misc +bda.news +bda.test +be.announce +be.arts +be.burgerrechten +be.commercial +be.comp +be.comp.internet +be.comp.internet.irc +be.comp.os.linux +be.education +be.forsale +be.jobs +be.misc +be.politics +be.providers +be.providers.freenet +be.science +be.sport +be.telecom +be.tv +belwue.sw +belwue.test +bionet.agroforestry +bionet.announce +bionet.audiology +bionet.biology.cardiovascular +bionet.biology.computational +bionet.biology.deepsea +bionet.biology.grasses +bionet.biology.n2-fixation +bionet.biology.symbiosis +bionet.biology.tropical +bionet.biology.vectors +bionet.biophysics +bionet.celegans +bionet.cellbiol +bionet.cellbiol.cytonet +bionet.cellbiol.insulin +bionet.chlamydomonas +bionet.diagnostics +bionet.diagnostics.prenatal +bionet.drosophila +bionet.ecology.physiology +bionet.emf-bio +bionet.general +bionet.genome.arabidopsis +bionet.genome.autosequencing +bionet.genome.chromosomes +bionet.genome.gene-structure +bionet.glycosci +bionet.immunology +bionet.info-theory +bionet.jobs.offered +bionet.jobs.wanted +bionet.journals.contents +bionet.journals.letters.biotechniques +bionet.journals.letters.tibs +bionet.journals.note +bionet.maize +bionet.metabolic-reg +bionet.microbiology +bionet.microbiology.biofilms +bionet.molbio.ageing +bionet.molbio.bio-matrix +bionet.molbio.embldatabank +bionet.molbio.evolution +bionet.molbio.gdb +bionet.molbio.genbank +bionet.molbio.genbank.updates +bionet.molbio.gene-linkage +bionet.molbio.genome-program +bionet.molbio.hiv +bionet.molbio.methds-reagnts +bionet.molbio.molluscs +bionet.molbio.proteins +bionet.molbio.proteins.7tms_r +bionet.molbio.proteins.fluorescent +bionet.molbio.rapd +bionet.molbio.recombination +bionet.molbio.yeast +bionet.molec-model +bionet.molecules.free-radicals +bionet.molecules.p450 +bionet.molecules.peptides +bionet.molecules.repertoires +bionet.mycology +bionet.neuroscience +bionet.neuroscience.amyloid +bionet.organisms.pseudomonas +bionet.organisms.schistosoma +bionet.organisms.urodeles +bionet.organisms.zebrafish +bionet.parasitology +bionet.photosynthesis +bionet.plants +bionet.plants.education +bionet.plants.signaltransduc +bionet.population-bio +bionet.prof-society.afcr +bionet.prof-society.aibs +bionet.prof-society.biophysics +bionet.prof-society.cfbs +bionet.prof-society.csm +bionet.prof-society.navbo +bionet.protista +bionet.sci-resources +bionet.software +bionet.software.acedb +bionet.software.gcg +bionet.software.sources +bionet.software.srs +bionet.software.staden +bionet.software.www +bionet.software.x-plor +bionet.structural-nmr +bionet.toxicology +bionet.users.addresses +bionet.virology +bionet.women-in-bio +bionet.xtallography +bit.admin +bit.general +bit.lang.neder-l +bit.listproc.stockphoto +bit.listserv.2000ad-l +bit.listserv.9370-l +bit.listserv.ada-law +bit.listserv.advise-l +bit.listserv.aect-l +bit.listserv.aera +bit.listserv.aix-l +bit.listserv.albanian +bit.listserv.allmusic +bit.listserv.arlis-l +bit.listserv.ashe-l +bit.listserv.asis-l +bit.listserv.asm370 +bit.listserv.atlas-l +bit.listserv.authorware +bit.listserv.autism +bit.listserv.autocat +bit.listserv.axslib-l +bit.listserv.banyan-l +bit.listserv.basque-l +bit.listserv.berita +bit.listserv.berita.d +bit.listserv.bgrass-l +bit.listserv.big-lan +bit.listserv.billing +bit.listserv.biomch-l +bit.listserv.blindnws +bit.listserv.blues-l +bit.listserv.bosnet +bit.listserv.buslib-l +bit.listserv.c370-l +bit.listserv.calc-ti +bit.listserv.candle-l +bit.listserv.catala +bit.listserv.catholic +bit.listserv.celiac +bit.listserv.cfs.newsletter +bit.listserv.christia +bit.listserv.cics-l +bit.listserv.cinema-l +bit.listserv.circplus +bit.listserv.clayart +bit.listserv.cloaks-daggers +bit.listserv.cmspip-l +bit.listserv.coco +bit.listserv.confocal +bit.listserv.conyers +bit.listserv.croatia +bit.listserv.cumrec-l +bit.listserv.cw-email +bit.listserv.cwis-l +bit.listserv.cyber-l +bit.listserv.dasig +bit.listserv.db2-l +bit.listserv.deaf-l +bit.listserv.dectei-l +bit.listserv.devel-l +bit.listserv.devmedia +bit.listserv.disarm-l +bit.listserv.dorothyl +bit.listserv.down-syn +bit.listserv.dsshe-l +bit.listserv.e-europe +bit.listserv.easi +bit.listserv.edi-l +bit.listserv.edpolyan +bit.listserv.edtech +bit.listserv.edusig-l +bit.listserv.envbeh-l +bit.listserv.ethics-l +bit.listserv.euearn-l +bit.listserv.fire-l +bit.listserv.fnord-l +bit.listserv.frac-l +bit.listserv.free-l +bit.listserv.freemasonry +bit.listserv.games-l +bit.listserv.gaynet +bit.listserv.gddm-l +bit.listserv.geodesic +bit.listserv.geograph +bit.listserv.govdoc-l +bit.listserv.graph-ti +bit.listserv.hdesk-l +bit.listserv.helix-l +bit.listserv.hellas +bit.listserv.help-net +bit.listserv.hrvatska +bit.listserv.humage-l +bit.listserv.hungary +bit.listserv.hytel-l +bit.listserv.i-amiga +bit.listserv.ibm-hesc +bit.listserv.ibm-main +bit.listserv.ibmtcp-l +bit.listserv.idms-l +bit.listserv.imagelib +bit.listserv.ioob-l +bit.listserv.ipct-l +bit.listserv.ispf-l +bit.listserv.japan +bit.listserv.jes2-l +bit.listserv.jnet-l +bit.listserv.l-hcap +bit.listserv.l-vmctr +bit.listserv.labmgr +bit.listserv.lawsch-l +bit.listserv.lawsch.internships +bit.listserv.liaison +bit.listserv.libref-l +bit.listserv.libres +bit.listserv.linkfail +bit.listserv.lis-l +bit.listserv.lsoft-announce +bit.listserv.mail-l +bit.listserv.mailbook +bit.listserv.makedon +bit.listserv.mba-l +bit.listserv.mbu-l +bit.listserv.mdphd-l +bit.listserv.medforum +bit.listserv.medlib-l +bit.listserv.mideur-l +bit.listserv.mla-l +bit.listserv.movie.memorabilia +bit.listserv.museum-l +bit.listserv.muslims +bit.listserv.nettrain +bit.listserv.new-list +bit.listserv.nodmgt-l +bit.listserv.notis-l +bit.listserv.novell +bit.listserv.nppa-l +bit.listserv.opers-l +bit.listserv.os2-l +bit.listserv.pacs-l +bit.listserv.page-l +bit.listserv.pagemakr +bit.listserv.pakistan +bit.listserv.pchealth +bit.listserv.pmail +bit.listserv.pmdf-l +bit.listserv.pns-l +bit.listserv.politics +bit.listserv.powerh-l +bit.listserv.psycgrad +bit.listserv.quaker-p +bit.listserv.quality +bit.listserv.qualrs-l +bit.listserv.radio-l +bit.listserv.railroad +bit.listserv.rcath-l +bit.listserv.relusr-l +bit.listserv.rra-l +bit.listserv.rscs-l +bit.listserv.rscsmods +bit.listserv.screen-l +bit.listserv.script-l +bit.listserv.scuba-l +bit.listserv.seasia-l +bit.listserv.seds-l +bit.listserv.sfs-l +bit.listserv.sganet +bit.listserv.simula +bit.listserv.skywarn +bit.listserv.slart-l +bit.listserv.slovak-l +bit.listserv.snamgt-l +bit.listserv.snurse-l +bit.listserv.sos-data +bit.listserv.spires-l +bit.listserv.sportpsy +bit.listserv.sqlinfo +bit.listserv.superguy +bit.listserv.tbi-support +bit.listserv.techwr-l +bit.listserv.tesl-l +bit.listserv.test +bit.listserv.tn3270-l +bit.listserv.toolb-l +bit.listserv.transplant +bit.listserv.travel-l +bit.listserv.tsorexx +bit.listserv.urep-l +bit.listserv.vfort-l +bit.listserv.vm-util +bit.listserv.vmesa-l +bit.listserv.vnews-l +bit.listserv.vocnet +bit.listserv.vpiej-l +bit.listserv.vse-l +bit.listserv.wac-l +bit.listserv.words-l +bit.listserv.wpcorp-l +bit.listserv.wpwin-l +bit.listserv.www-vm +bit.listserv.wx-chase +bit.listserv.wx-talk +bit.listserv.x400-l +bit.listserv.xedit-l +bit.listserv.xmailer +bit.listserv.xtropy-l +bit.mailserv.word-pc +bit.med.mxdiag-l +bit.med.resp-care.world +bit.org.peace-corps +bit.tech.africana +biz.books.technical +biz.clarinet +biz.clarinet.sample +biz.clarinet.web.sample +biz.clarinet.web.xcache.large +biz.clarinet.web.xcache.small +biz.clarinet.webnews.biz +biz.clarinet.webnews.living +biz.clarinet.webnews.sports +biz.clarinet.webnews.techwire +biz.clarinet.webnews.top +biz.clarinet.webnews.usa +biz.clarinet.webnews.world +biz.comp.accounting +biz.comp.mcs +biz.comp.telebit +biz.comp.telebit.netblazer +biz.config +biz.control +biz.digex.announce +biz.digital.announce +biz.digital.articles +biz.general +biz.marketplace.computers.discussion +biz.marketplace.computers.mac +biz.marketplace.computers.other +biz.marketplace.computers.pc-clone +biz.marketplace.computers.workstation +biz.marketplace.discussion +biz.marketplace.international +biz.marketplace.international.discussion +biz.marketplace.non-computer +biz.marketplace.services.computers +biz.marketplace.services.discussion +biz.marketplace.services.non-computer +biz.oreilly.announce +biz.pagesat +biz.pagesat.weather +biz.stolen +biz.tadpole.sparcbook +biz.test +blgtn.arts +blgtn.business +blgtn.cohorts +blgtn.education +blgtn.forsale +blgtn.government +blgtn.health +blgtn.jobs +blgtn.libraries +blgtn.socserv +blgtn.sports +bln.announce.berlinet +bln.announce.berlinet.d +bln.announce.fhtwbln +bln.announce.fub +bln.announce.fub.chemie +bln.announce.fub.cs +bln.announce.fub.cs.d +bln.announce.fub.d +bln.announce.fub.math +bln.announce.fub.math.d +bln.announce.fub.publizistik +bln.announce.fub.zedat +bln.announce.fub.zedat.d +bln.announce.gfz +bln.announce.hub +bln.announce.hub.informatik +bln.announce.hub.informatik.d +bln.announce.in-berlin +bln.announce.in-berlin.d +bln.announce.tub.cs +bln.announce.tub.cs.d +bln.announce.tub.math +bln.announce.tub.physik +bln.announce.tub.zrz +bln.announce.tub.zrz.d +bln.announce.virtualcollege +bln.announce.zib +bln.announce.zib.t3d +bln.archiv +bln.comp.lang.opal +bln.comp.misc +bln.comp.pc +bln.comp.pub +bln.comp.sun +bln.comp.unix +bln.freizeit.essen +bln.freizeit.technik +bln.humor +bln.jugend.kontakte +bln.jugend.reisen +bln.jugend.schule +bln.jugend.sonstiges +bln.jugend.talk +bln.jugend.termine +bln.kultur +bln.kultur.tuerkisch +bln.lehre.informatik +bln.lehre.mathematik +bln.lehre.misc +bln.lehre.schule +bln.lehre.tech-inf +bln.lists +bln.lv.tub.cs.informatik1 +bln.lv.tub.cs.informatik2 +bln.lv.tub.cs.informatik3 +bln.lv.tub.cs.prolog-prak +bln.lv.tub.cs.unix-praktikum +bln.lv.tub.ee.pthl +bln.markt +bln.markt.arbeit +bln.medien +bln.misc +bln.net.internet +bln.net.mail +bln.net.maps +bln.net.news +bln.net.statistik +bln.net.www +bln.politik +bln.politik.rassismus +bln.sci.informatik +bln.sci.jura +bln.sci.mathematik +bln.sci.misc +bln.sci.umwelt +bln.termine +bln.test +bln.verkehr +bnr.software-eng +bofh.leeks +boulder.ads +boulder.general +boulder.pk +br.bras-net +br.colmeia +br.comp-net +br.listas.enecomp-l +br.listas.sbis-l +br.opera +br.pc-l +br.piadas +br.rec.esporte.futebol.flamengo +br.rec.esporte.futebol.tricolor +br.rec.piadas +brasil.anuncios +brasil.ciencia.capes +brasil.ciencia.cnpq +brasil.ciencia.computacao +brasil.ciencia.fisica +brasil.ciencia.matematica +brasil.computacao.paralela +brasil.ecologia +brasil.esportes.formula1 +brasil.esportes.futebol +brasil.esportes.voleibol +brasil.geral +brasil.noticias +brasil.politica +brasil.teste +brasil.unix +braunschweig.allgemeines +braunschweig.crossposting +braunschweig.hochschule +braunschweig.katzen +braunschweig.kaufrausch +braunschweig.kommerzielles +braunschweig.listen_plaene +braunschweig.newfiles +braunschweig.politisches +braunschweig.smalltalk +braunschweig.sysops +btnet.users +byu.news +ca.driving +ca.earthquakes +ca.environment +ca.forsale +ca.general +ca.news +ca.news.group +ca.politics +ca.seminars +ca.test +ca.unix +ca.usenet +ca.wanted +ca.water +calgary.announce +calgary.forsale +calgary.general +calgary.test +calstate.capp +calstate.gina.support +calstate.news.csunet +calstate.news.misc +calstate.stats +calstate.test +cam.announce +cam.misc +cam.net.announce +cam.sug +cam.test +cam.transport +can.ai +can.arts.sf +can.aviation.misc +can.aviation.rgs +can.canet.stats +can.com.ad-agencies +can.com.misc +can.community.asian +can.community.military +can.config +can.consumers +can.domain +can.english +can.francais +can.general +can.infobahn +can.infohighway +can.jobs +can.jobs.gov +can.legal +can.med.misc +can.military-brats +can.motss +can.newprod +can.org.cata +can.org.cips +can.org.cusen +can.org.misc +can.politics +can.scout-guide +can.shad-valley +can.sun-stroke +can.talk.bilingualism +can.talk.guns +can.talk.smoking +can.taxes +can.test +can.travel.citc +can.university.grad +can.usrgroup +can.uucp +can.uucp.maps +can.vlsi +capdist.admin +capdist.announce +capdist.misc +capdist.seminars +capdist.test +carleton.alumni +carleton.clubs.cheerleading +carleton.clubs.debating +carleton.clubs.ndp-youth +carleton.clubs.young-liberals +carleton.general +carleton.org.virtual-ventur +carleton.psychology.general +carleton.public.general +carleton.public.gnctr +carleton.scs.gradnews +carleton.scs.undergraduate +cbd.awards +cbd.procurements +cc.general +cern.alice +cern.alpha +cern.asis +cern.badmarket +cern.cern +cern.cernmpp +cern.cernsp +cern.cmz +cern.computing +cern.dxplus +cern.equipment +cern.est +cern.factorylink +cern.foot +cern.geant +cern.guides-ideas +cern.heplib +cern.hpplus +cern.linux +cern.market +cern.newmass +cern.nice.info +cern.nomad.daq +cern.oracle.cde +cern.root +cern.security.unix +cern.sgi +cern.skiclub +cern.softball +cern.sting +cern.telecom +cern.vmtodc +cern.volleyball +cern.www.talk +cern.ycc +ch.avalanche +ch.chuug +ch.comp +ch.ewish +ch.general +ch.market +ch.network +ch.philo.agenda +ch.pollen +ch.rec +ch.si.choose +ch.si.general +ch.si.sgaico +ch.soc.sidos +ch.sun-managers +ch.talk +chi.eats +chi.forsale +chi.general +chi.internet +chi.jobs +chi.mail +chi.media +chi.news.stats +chi.personals +chi.places +chi.politics +chi.test +chi.wanted +chi.weather +chile.anuncios +chile.binarios.imagenes +chile.binarios.misc +chile.binarios.para-mayores +chile.binarios.software +chile.binarios.sonidos +chile.ciencia.misc +chile.comp.mac +chile.comp.misc +chile.comp.pc +chile.comp.unix +chile.comp.virus +chile.comp.www +chile.consultas +chile.grupos +chile.grupos.anuncios +chile.mercado.electricos +chile.mercado.hardware +chile.mercado.juegos +chile.mercado.misc +chile.mercado.software +chile.mercado.trabajos +chile.mercado.vehiculos +chile.org.scout +chile.rec.cf +chile.rec.cine +chile.rec.cocina +chile.rec.comics +chile.rec.deportes.ajedrez +chile.rec.deportes.futbol +chile.rec.deportes.misc +chile.rec.humor +chile.rec.irc +chile.rec.juegos.misc +chile.rec.juegos.mud +chile.rec.juegos.rol +chile.rec.licores +chile.rec.literatura +chile.rec.misc +chile.rec.musica.metal +chile.rec.musica.misc +chile.rec.musica.sub +chile.rec.radio +chile.rec.sexo +chile.rec.tv +chile.regiones.misc +chile.regiones.quinta +chile.soc.censura +chile.soc.consumidor +chile.soc.ecologia +chile.soc.economia +chile.soc.historia +chile.soc.misc +chile.soc.politica +chile.soc.religion +chile.soc.salud +chile.test +chile.varios.misc +chinese.comp.software +chinese.flame +chinese.newsgroups.announce +chinese.newsgroups.answers +chinese.newsgroups.discussion +chinese.newsgroups.newusers +chinese.rec.magazines.multiworld +chinese.rec.misc +chinese.rec.sports +chinese.talk.misc +chinese.talk.politics +chinese.test +chinese.text.unicode +christnet.admin +christnet.bible +christnet.bible.revelation +christnet.christianlife +christnet.christnews +christnet.ethics +christnet.evangelical +christnet.general +christnet.healing.herbs +christnet.ladies +christnet.philosophy +christnet.poetry +christnet.prayer +christnet.religion +christnet.theology +christnet.writers +cl.adressen.allgemein +cl.adressen.e-mail +cl.adressen.suche +cl.adressen.systemdaten +cl.afrika.aktionen +cl.afrika.allgemein +cl.afrika.diskussion +cl.aktuelles.allgemein +cl.aktuelles.diskussion +cl.anarchie.aktionen +cl.anarchie.allgemein +cl.anarchie.diskussion +cl.anarchie.theorie +cl.antifa.aktionen +cl.antifa.allgemein +cl.antifa.diskussion +cl.antifa.magazine +cl.antifa.neue_rechte +cl.arbeit.aktionen +cl.arbeit.allgemein +cl.arbeit.diskussion +cl.arbeit.erwerbslos +cl.arbeit.fortbildung +cl.arbeit.frauen +cl.arbeit.recht +cl.artenschutz.aktionen +cl.artenschutz.allgemein +cl.artenschutz.bedroht +cl.artenschutz.diskussion +cl.asien.aktionen +cl.asien.allgemein +cl.asien.diskussion +cl.asien.ostasien +cl.asien.suedasien +cl.asien.suedostasien +cl.atom.aktionen +cl.atom.akw +cl.atom.allgemein +cl.atom.diskussion +cl.atom.gewinnung +cl.atom.muell +cl.atom.waffen+tests +cl.behindert.aktionen +cl.behindert.allgemein +cl.behindert.diskussion +cl.bildung.aktionen +cl.bildung.allgemein +cl.bildung.diskussion +cl.bildung.hochschule +cl.bildung.schule +cl.boden.aktionen +cl.boden.allgemein +cl.boden.altlasten +cl.boden.diskussion +cl.boden.landwirtschaft +cl.chemie.aktionen +cl.chemie.allgemein +cl.chemie.diskussion +cl.chemie.politik +cl.chemie.produktion +cl.chemie.stoffe +cl.datenschutz.aktionen +cl.datenschutz.allgemein +cl.datenschutz.diskussion +cl.datenschutz.g10 +cl.datenschutz.isdn +cl.demokratie.aktionen +cl.demokratie.allgemein +cl.demokratie.diskussion +cl.demokratie.grundrechte +cl.drogenpolitik.aktionen +cl.drogenpolitik.allgemein +cl.drogenpolitik.diskussion +cl.energie.aktionen +cl.energie.allgemein +cl.energie.alternativen +cl.energie.diskussion +cl.energie.fossile +cl.energie.politik +cl.energie.sparen +cl.energie.umweltbilanz +cl.europa.aktionen +cl.europa.allgemein +cl.europa.balkan +cl.europa.baltikum +cl.europa.cr +cl.europa.deutschland +cl.europa.diskussion +cl.europa.eu +cl.europa.italien +cl.europa.oesterreich +cl.europa.polen +cl.europa.recht +cl.europa.sr +cl.europa.tuerkei +cl.europa.ungarn +cl.fluechtlinge.aktionen +cl.fluechtlinge.allgemein +cl.fluechtlinge.diskussion +cl.frauen.aktionen +cl.frauen.allgemein +cl.frauen.diskussion +cl.frauen.only +cl.freie_liebe.aktionen +cl.freie_liebe.allgemein +cl.freie_liebe.diskussion +cl.freie_liebe.hetero +cl.freie_liebe.lesben +cl.freie_liebe.lesben-only +cl.freie_liebe.schwule +cl.frieden.aktionen +cl.frieden.allgemein +cl.frieden.diskussion +cl.frieden.kdv +cl.frieden.ruestung +cl.gentechnik.aktionen +cl.gentechnik.allgemein +cl.gentechnik.diskussion +cl.gentechnik.freiland +cl.gentechnik.medizin +cl.gentechnik.politik +cl.geschichte.aktionen +cl.geschichte.allgemein +cl.geschichte.diskussion +cl.gesundheit.aids +cl.gesundheit.aktionen +cl.gesundheit.allgemein +cl.gesundheit.diskussion +cl.glauben.aberglauben +cl.glauben.aktionen +cl.glauben.allgemein +cl.glauben.atheismus +cl.glauben.buddhismus +cl.glauben.christen +cl.glauben.diskussion +cl.glauben.humanismus +cl.glauben.islam +cl.glauben.juden +cl.glauben.osho +cl.glauben.sekten +cl.glauben.sonstige +cl.gruppen.ai +cl.gruppen.apc +cl.gruppen.bund +cl.gruppen.diskussion +cl.gruppen.dkp +cl.gruppen.falken +cl.gruppen.fiff +cl.gruppen.fzs +cl.gruppen.gewerkschaften +cl.gruppen.greenpeace +cl.gruppen.gruene +cl.gruppen.gruene_jugend +cl.gruppen.gruene_liga +cl.gruppen.icc +cl.gruppen.ig_medien +cl.gruppen.jre +cl.gruppen.jungdemokraten +cl.gruppen.krisis +cl.gruppen.kunm +cl.gruppen.nabu +cl.gruppen.oekoli +cl.gruppen.pds +cl.gruppen.robin_wood +cl.gruppen.sofo +cl.gruppen.sonstige +cl.gruppen.spd +cl.gruppen.spw +cl.gruppen.svd +cl.gruppen.transfair +cl.gus.aktionen +cl.gus.allgemein +cl.gus.diskussion +cl.international.aktionen +cl.international.allgemein +cl.international.diskussion +cl.jugendpresse.aktionen +cl.jugendpresse.allgemein +cl.jugendpresse.diskussion +cl.jugendpresse.kontakte +cl.jugendpresse.publikationen +cl.jugendpresse.zensur +cl.kinder.aktionen +cl.kinder.allgemein +cl.kinder.diskussion +cl.klima.aktionen +cl.klima.allgemein +cl.klima.diskussion +cl.klima.international +cl.klima.ozonschicht +cl.klima.tropenwald +cl.kontakte +cl.koordination.einstellungen +cl.koordination.netinfo +cl.koordination.systeminfo +cl.koordination.wahlurne +cl.kultur.aktionen +cl.kultur.allgemein +cl.kultur.diskussion +cl.kultur.kunst +cl.kultur.musik +cl.kultur.politik +cl.kultur.sport +cl.kultur.szene +cl.kultur.texte +cl.kultur.tv +cl.maenner.aktionen +cl.maenner.allgemein +cl.maenner.diskussion +cl.magazine.anna +cl.magazine.diskussion +cl.magazine.geheim +cl.magazine.inprekorr +cl.magazine.mik +cl.magazine.rbi +cl.magazine.sonstige +cl.magazine.stachel +cl.magazine.tatblatt +cl.magazine.telegraph +cl.medien.aktionen +cl.medien.allgemein +cl.medien.datenbanken +cl.medien.diskussion +cl.medien.funk +cl.medien.internet +cl.medien.text +cl.medien.vernetzung +cl.menschenrechte.afrika +cl.menschenrechte.aktionen +cl.menschenrechte.allgemein +cl.menschenrechte.asien +cl.menschenrechte.diskussion +cl.menschenrechte.europa +cl.menschenrechte.gus +cl.menschenrechte.mittelamerika +cl.menschenrechte.nahost +cl.menschenrechte.nordamerika +cl.menschenrechte.ozeanien +cl.menschenrechte.suedamerika +cl.mittelamerika.aktionen +cl.mittelamerika.allgemein +cl.mittelamerika.cuba +cl.mittelamerika.diskussion +cl.mittelamerika.el_salvador +cl.mittelamerika.nicaragua +cl.muell.aktionen +cl.muell.allgemein +cl.muell.deponie +cl.muell.diskussion +cl.muell.export +cl.muell.gruener_punkt +cl.muell.sondermuell +cl.muell.verbrennung +cl.muell.vermeidung +cl.nahost.aktionen +cl.nahost.allgemein +cl.nahost.diskussion +cl.nahost.irak +cl.nahost.kurdistan +cl.nahost.palaestina +cl.nordamerika.aktionen +cl.nordamerika.allgemein +cl.nordamerika.diskussion +cl.ozeanien.aktionen +cl.ozeanien.allgemein +cl.ozeanien.diskussion +cl.ozeanien.polargebiete +cl.presse.aktionen +cl.presse.diskussion +cl.presse.know-how +cl.presse.ticker +cl.recht.aktionen +cl.recht.allgemein +cl.recht.diskussion +cl.repression.aktionen +cl.repression.allgemein +cl.repression.diskussion +cl.soziales.aktionen +cl.soziales.allgemein +cl.soziales.diskussion +cl.soziales.jugendarbeit +cl.soziales.recht +cl.soziales.schuldner +cl.soziales.wohnen +cl.sozialismus.aktionen +cl.sozialismus.allgemein +cl.sozialismus.diskussion +cl.sozialismus.theorie +cl.suedamerika.aktionen +cl.suedamerika.allgemein +cl.suedamerika.diskussion +cl.technik.aktionen +cl.technik.allgemein +cl.technik.diskussion +cl.technik.folgen +cl.umwelt.aktionen +cl.umwelt.allgemein +cl.umwelt.beratung +cl.umwelt.diskussion +cl.umwelt.eu +cl.umwelt.laerm +cl.umwelt.pflanzen +cl.umwelt.politik +cl.umwelt.publikationen +cl.umwelt.recht +cl.umwelt.tiere +cl.umwelt.wald +cl.uno.aktionen +cl.uno.allgemein +cl.uno.diskussion +cl.userforum.aktionen +cl.userforum.cl-treffen +cl.userforum.diskussion +cl.userforum.handbuecher +cl.userforum.hilfe +cl.userforum.vorschlaege +cl.utopien.aktionen +cl.utopien.allgemein +cl.utopien.diskussion +cl.verkehr.aktionen +cl.verkehr.allgemein +cl.verkehr.diskussion +cl.wasser.aktionen +cl.wasser.allgemein +cl.wasser.aquadata +cl.wasser.diskussion +cl.wasser.meeresschutz +cl.wirtschaft.aktionen +cl.wirtschaft.allgemein +cl.wirtschaft.branchen +cl.wirtschaft.diskussion +cl.wirtschaft.geld +cl.wirtschaft.politik +cl.wirtschaft.steuern +cl.wirtschaft.verbraucher +clari.biz.briefs +clari.biz.currencies +clari.biz.currencies.euro +clari.biz.currencies.misc +clari.biz.currencies.us_dollar +clari.biz.earnings +clari.biz.earnings.releases +clari.biz.economy +clari.biz.economy.usa +clari.biz.economy.world +clari.biz.features +clari.biz.front_page +clari.biz.headlines +clari.biz.industry +clari.biz.industry.agriculture +clari.biz.industry.agriculture.releases +clari.biz.industry.automotive +clari.biz.industry.automotive.cbd +clari.biz.industry.automotive.releases +clari.biz.industry.aviation +clari.biz.industry.aviation.releases +clari.biz.industry.banking +clari.biz.industry.banking.releases +clari.biz.industry.conglomerates +clari.biz.industry.construction.cbd.acquisition +clari.biz.industry.construction.cbd.architect+eng +clari.biz.industry.construction.cbd.hardware +clari.biz.industry.construction.cbd.maintenance +clari.biz.industry.construction.cbd.misc +clari.biz.industry.construction.cbd.supplies +clari.biz.industry.energy +clari.biz.industry.energy.releases +clari.biz.industry.food +clari.biz.industry.food.cbd +clari.biz.industry.food.releases +clari.biz.industry.food.retail.releases +clari.biz.industry.health +clari.biz.industry.health.care +clari.biz.industry.health.care.releases +clari.biz.industry.health.cbd +clari.biz.industry.health.pharma +clari.biz.industry.health.pharma.releases +clari.biz.industry.household +clari.biz.industry.household.cbd +clari.biz.industry.information.cbd +clari.biz.industry.insurance +clari.biz.industry.insurance.releases +clari.biz.industry.machinery +clari.biz.industry.machinery.cbd.components +clari.biz.industry.machinery.cbd.engines +clari.biz.industry.machinery.cbd.misc +clari.biz.industry.manufacturing.releases +clari.biz.industry.media +clari.biz.industry.media.entertainment +clari.biz.industry.media.entertainment.releases +clari.biz.industry.media.releases +clari.biz.industry.metals+mining +clari.biz.industry.metals+mining.cbd +clari.biz.industry.metals+mining.releases +clari.biz.industry.misc +clari.biz.industry.misc.cbd.electric +clari.biz.industry.misc.cbd.equip_maint +clari.biz.industry.misc.cbd.equip_services +clari.biz.industry.misc.cbd.housekeeping +clari.biz.industry.misc.cbd.lab_supplies +clari.biz.industry.misc.cbd.management +clari.biz.industry.misc.cbd.misc_services +clari.biz.industry.misc.cbd.misc_supplies +clari.biz.industry.misc.cbd.research +clari.biz.industry.misc.cbd.studies +clari.biz.industry.misc.releases +clari.biz.industry.others +clari.biz.industry.real_est+const +clari.biz.industry.real_est+const.releases +clari.biz.industry.retail +clari.biz.industry.retail.releases +clari.biz.industry.textiles +clari.biz.industry.textiles.cbd +clari.biz.industry.transportation +clari.biz.industry.transportation.cbd +clari.biz.industry.transportation.releases +clari.biz.industry.travel+leisure +clari.biz.industry.travel+leisure.cbd +clari.biz.industry.travel+leisure.releases +clari.biz.industry.utilities +clari.biz.market.commodities +clari.biz.market.commodities.agricultural +clari.biz.market.commodities.misc +clari.biz.market.misc +clari.biz.mergers +clari.biz.mergers.releases +clari.biz.misc +clari.biz.misc.releases +clari.biz.personnel.releases +clari.biz.privatization +clari.biz.stocks +clari.biz.stocks.corporate_news +clari.biz.stocks.dividend.releases +clari.biz.stocks.report.asia +clari.biz.stocks.report.elsewhere +clari.biz.stocks.report.europe.eastern +clari.biz.stocks.report.europe.western +clari.biz.stocks.report.top +clari.biz.stocks.report.usa +clari.biz.stocks.report.usa.misc +clari.biz.stocks.report.usa.nyse +clari.biz.top +clari.biz.tradeshows.releases +clari.biz.world_trade +clari.editorial.cartoons.toles +clari.editorial.cartoons.worldviews +clari.editorial.commentary.misc +clari.editorial.commentary.political +clari.editorial.essays +clari.feature.dave_barry +clari.feature.dilbert +clari.feature.experimental +clari.feature.forbetter +clari.feature.mike_royko +clari.hot.a +clari.hot.b +clari.hot.c +clari.hot.d +clari.hot.e +clari.hot.f +clari.hot.g +clari.hot.h +clari.hot.i +clari.hot.j +clari.hot.k +clari.hot.l +clari.hot.m +clari.hot.n +clari.hot.o +clari.living +clari.living.animals +clari.living.arts +clari.living.bizarre +clari.living.books +clari.living.celebrities +clari.living.columns.joebob +clari.living.columns.lipton +clari.living.columns.miss_manners +clari.living.comics.bizarro +clari.living.comics.cafe_angst +clari.living.comics.doonesbury +clari.living.comics.forbetter +clari.living.comics.foxtrot +clari.living.comics.ozone_patrol +clari.living.consumer +clari.living.entertainment +clari.living.entertainment.briefs +clari.living.entertainment.misc +clari.living.fashion +clari.living.history +clari.living.history.today +clari.living.human_interest +clari.living.leisure +clari.living.misc +clari.living.movies +clari.living.music +clari.living.royalty +clari.living.top +clari.living.tv +clari.local.alabama +clari.local.alaska +clari.local.arizona +clari.local.arkansas +clari.local.california.briefs +clari.local.california.gov +clari.local.california.los_angeles +clari.local.california.lottery +clari.local.california.misc +clari.local.california.northern +clari.local.california.sfbay.biz +clari.local.california.sfbay.briefs +clari.local.california.sfbay.crime +clari.local.california.sfbay.education +clari.local.california.sfbay.fire +clari.local.california.sfbay.gov +clari.local.california.sfbay.health +clari.local.california.sfbay.law +clari.local.california.sfbay.living +clari.local.california.sfbay.misc +clari.local.california.sfbay.transport +clari.local.california.sfbay.transport.conditions +clari.local.california.sfbay.trouble +clari.local.california.sfbay.weather +clari.local.california.southern +clari.local.california.southern.misc +clari.local.colorado +clari.local.connecticut +clari.local.delaware +clari.local.florida +clari.local.georgia +clari.local.hawaii +clari.local.idaho +clari.local.illinois.chicago +clari.local.illinois.misc +clari.local.indiana +clari.local.iowa +clari.local.kansas +clari.local.kentucky +clari.local.louisiana +clari.local.maine +clari.local.maryland +clari.local.massachusetts +clari.local.michigan +clari.local.minnesota +clari.local.mississippi +clari.local.missouri +clari.local.montana +clari.local.nebraska +clari.local.nevada +clari.local.new_hampshire +clari.local.new_jersey +clari.local.new_mexico +clari.local.new_york.misc +clari.local.new_york.nyc +clari.local.north_carolina +clari.local.north_dakota +clari.local.ohio +clari.local.oklahoma +clari.local.oregon +clari.local.pennsylvania +clari.local.rhode_island +clari.local.south_carolina +clari.local.south_dakota +clari.local.tennessee +clari.local.texas +clari.local.utah +clari.local.vermont +clari.local.virginia+dc +clari.local.washington +clari.local.west_virginia +clari.local.wisconsin +clari.local.wyoming +clari.net.admin +clari.net.announce +clari.net.info +clari.net.newusers +clari.net.newusers.group_info.edu +clari.net.newusers.group_info.four-star +clari.net.newusers.group_info.three-star +clari.net.newusers.group_info.two-star +clari.net.talk +clari.news.aging +clari.news.alcohol+drugs +clari.news.blacks +clari.news.briefs +clari.news.childrn+family +clari.news.conflict +clari.news.conflict.misc +clari.news.conflict.peace_talks +clari.news.conflict.peacekeeping +clari.news.corruption +clari.news.crime +clari.news.crime.abductions +clari.news.crime.assaults +clari.news.crime.fraud+embezzle +clari.news.crime.general +clari.news.crime.hate +clari.news.crime.juvenile +clari.news.crime.misc +clari.news.crime.murders +clari.news.crime.murders.misc +clari.news.crime.murders.political +clari.news.crime.organized +clari.news.crime.sex +clari.news.crime.theft +clari.news.crime.top +clari.news.crime.war +clari.news.disabilities +clari.news.education +clari.news.education.higher +clari.news.education.misc +clari.news.education.releases +clari.news.features +clari.news.flash +clari.news.front_page +clari.news.gays +clari.news.immigration +clari.news.immigration.misc +clari.news.issues +clari.news.issues.censorship +clari.news.issues.death_penalty +clari.news.issues.guns +clari.news.issues.human_rights +clari.news.issues.misc +clari.news.issues.poverty +clari.news.issues.reproduction +clari.news.issues.smoking +clari.news.jews +clari.news.labor +clari.news.labor.employment +clari.news.labor.misc +clari.news.labor.strike +clari.news.law_enforce +clari.news.minorities +clari.news.minorities.misc +clari.news.misc.releases +clari.news.obituaries +clari.news.photos +clari.news.protests +clari.news.refugees +clari.news.religion +clari.news.sex +clari.news.trouble +clari.news.trouble.accidents +clari.news.trouble.disaster +clari.news.trouble.misc +clari.news.usa.terrorism +clari.news.weather +clari.news.women +clari.sports.baseball +clari.sports.baseball.major +clari.sports.baseball.major.al.games +clari.sports.baseball.major.al.stats +clari.sports.baseball.major.nl.games +clari.sports.baseball.major.nl.stats +clari.sports.baseball.minor +clari.sports.basketball +clari.sports.basketball.college +clari.sports.basketball.college.men +clari.sports.basketball.college.men.games +clari.sports.basketball.college.men.stats +clari.sports.basketball.college.women +clari.sports.basketball.minor +clari.sports.basketball.nba +clari.sports.basketball.nba.games +clari.sports.basketball.nba.stats +clari.sports.bowling +clari.sports.boxing +clari.sports.briefs +clari.sports.championships +clari.sports.features +clari.sports.football +clari.sports.football.cfl +clari.sports.football.college +clari.sports.football.college.games +clari.sports.football.college.stats +clari.sports.football.nfl +clari.sports.football.nfl.games +clari.sports.football.nfl.stats +clari.sports.golf +clari.sports.hockey +clari.sports.hockey.ahl +clari.sports.hockey.ihl +clari.sports.hockey.nhl +clari.sports.hockey.nhl.games +clari.sports.hockey.nhl.stats +clari.sports.horse_racing +clari.sports.local.canada.atlantic_provs +clari.sports.local.canada.brit_columbia +clari.sports.local.canada.eastern +clari.sports.local.canada.ontario +clari.sports.local.canada.ontario.misc +clari.sports.local.canada.ontario.toronto +clari.sports.local.canada.prairie_provs +clari.sports.local.canada.quebec +clari.sports.local.mid-atlantic.new_jersey +clari.sports.local.mid-atlantic.new_york +clari.sports.local.mid-atlantic.new_york.nyc +clari.sports.local.mid-atlantic.pennsylvania +clari.sports.local.mid-atlantic.pennsylvania.philadelphia +clari.sports.local.midwest +clari.sports.local.midwest.illinois +clari.sports.local.midwest.indiana +clari.sports.local.midwest.michigan +clari.sports.local.midwest.minnesota +clari.sports.local.midwest.misc +clari.sports.local.midwest.missouri +clari.sports.local.midwest.ohio +clari.sports.local.midwest.wisconsin +clari.sports.local.new_england +clari.sports.local.new_england.connecticut +clari.sports.local.new_england.massachusetts +clari.sports.local.new_england.misc +clari.sports.local.northwest +clari.sports.local.northwest.misc +clari.sports.local.northwest.washington +clari.sports.local.south +clari.sports.local.south.florida +clari.sports.local.south.florida.miami +clari.sports.local.south.florida.misc +clari.sports.local.south.florida.tampa_bay +clari.sports.local.south.georgia +clari.sports.local.south.maryland +clari.sports.local.south.maryland+dc +clari.sports.local.south.north_carolina +clari.sports.local.south.washington_dc +clari.sports.local.southwest +clari.sports.local.southwest.arizona +clari.sports.local.southwest.california +clari.sports.local.southwest.california.los_angeles +clari.sports.local.southwest.california.sfbay +clari.sports.local.southwest.colorado +clari.sports.local.southwest.misc +clari.sports.local.southwest.texas.dallas-fw +clari.sports.local.southwest.texas.misc +clari.sports.local.southwest.utah +clari.sports.misc +clari.sports.motor +clari.sports.olympic +clari.sports.others +clari.sports.photos +clari.sports.releases +clari.sports.schedules +clari.sports.skiing +clari.sports.soccer +clari.sports.tennis +clari.sports.top +clari.tw.aerospace +clari.tw.aerospace.cbd.components +clari.tw.aerospace.cbd.misc +clari.tw.aerospace.releases +clari.tw.briefs +clari.tw.chemicals +clari.tw.chemicals.cbd +clari.tw.chemicals.releases +clari.tw.columns.imprb_research +clari.tw.computers.apple +clari.tw.computers.apple.releases +clari.tw.computers.cbd +clari.tw.computers.entertainment.releases +clari.tw.computers.in_use +clari.tw.computers.industry_news +clari.tw.computers.misc +clari.tw.computers.networking +clari.tw.computers.networking.releases +clari.tw.computers.pc.hardware +clari.tw.computers.pc.hardware.releases +clari.tw.computers.pc.software +clari.tw.computers.pc.software.releases +clari.tw.computers.peripherals.releases +clari.tw.computers.releases +clari.tw.computers.retail.releases +clari.tw.computers.unix +clari.tw.computers.unix.releases +clari.tw.defense +clari.tw.defense.cbd +clari.tw.electronics +clari.tw.electronics.cbd +clari.tw.electronics.releases +clari.tw.environment +clari.tw.environment.cbd +clari.tw.environment.releases +clari.tw.features +clari.tw.health +clari.tw.health.aids +clari.tw.health.misc +clari.tw.issues +clari.tw.misc +clari.tw.new_media +clari.tw.new_media.matrix_news +clari.tw.new_media.online.releases +clari.tw.new_media.releases +clari.tw.nuclear +clari.tw.science +clari.tw.science+space +clari.tw.space +clari.tw.stocks +clari.tw.telecom +clari.tw.telecom.cbd +clari.tw.telecom.misc +clari.tw.telecom.phone_service +clari.tw.telecom.releases +clari.tw.top +clari.usa.briefs +clari.usa.gov +clari.usa.gov.briefs +clari.usa.gov.general +clari.usa.gov.misc +clari.usa.gov.personalities +clari.usa.gov.policy.biz +clari.usa.gov.policy.financial +clari.usa.gov.policy.foreign +clari.usa.gov.policy.foreign.mideast +clari.usa.gov.policy.foreign.misc +clari.usa.gov.policy.misc +clari.usa.gov.policy.social +clari.usa.gov.politics +clari.usa.gov.releases +clari.usa.gov.state+local +clari.usa.gov.white_house +clari.usa.hot.election.clinton +clari.usa.hot.election.congress +clari.usa.hot.election.dole +clari.usa.law +clari.usa.law.misc +clari.usa.law.supreme +clari.usa.military +clari.usa.misc +clari.usa.politics +clari.usa.politics.personalities +clari.usa.terrorism +clari.usa.top +clari.web.biz.currencies.euro +clari.web.editorial.essays +clari.web.hot.a +clari.web.hot.b +clari.web.hot.c +clari.web.hot.d +clari.web.hot.e +clari.web.hot.f +clari.web.hot.g +clari.web.hot.h +clari.web.hot.i +clari.web.hot.j +clari.web.hot.k +clari.web.hot.l +clari.web.hot.m +clari.web.hot.n +clari.web.hot.o +clari.web.living.top +clari.web.sports.olympic +clari.web.sports.skiing +clari.web.world.gov.politics.personalities +clari.world.africa.eastern +clari.world.africa.northwestern +clari.world.africa.south_africa +clari.world.africa.southern +clari.world.africa.western +clari.world.americas +clari.world.americas.argentina +clari.world.americas.brazil +clari.world.americas.canada +clari.world.americas.canada.biz +clari.world.americas.canada.briefs +clari.world.americas.canada.general +clari.world.americas.caribbean +clari.world.americas.central +clari.world.americas.meso +clari.world.americas.mexico +clari.world.americas.peru +clari.world.americas.south +clari.world.americas.south.misc +clari.world.asia+oceania +clari.world.asia.central +clari.world.asia.central+south +clari.world.asia.china +clari.world.asia.china.biz +clari.world.asia.hong_kong +clari.world.asia.india +clari.world.asia.indochina +clari.world.asia.indochina.misc +clari.world.asia.japan +clari.world.asia.japan.biz +clari.world.asia.koreas +clari.world.asia.philippines +clari.world.asia.south +clari.world.asia.southeast +clari.world.asia.taiwan +clari.world.asia.vietnam +clari.world.briefs +clari.world.europe +clari.world.europe.alpine +clari.world.europe.balkans +clari.world.europe.benelux +clari.world.europe.british_isles +clari.world.europe.british_isles.biz +clari.world.europe.british_isles.ireland +clari.world.europe.british_isles.uk +clari.world.europe.british_isles.uk.biz +clari.world.europe.british_isles.uk.n-ireland +clari.world.europe.central +clari.world.europe.eastern +clari.world.europe.france +clari.world.europe.france.biz +clari.world.europe.germany +clari.world.europe.germany.biz +clari.world.europe.greece +clari.world.europe.iberia +clari.world.europe.italy +clari.world.europe.northern +clari.world.europe.russia +clari.world.europe.union +clari.world.gov.budgets +clari.world.gov.intl.relations +clari.world.gov.intl_relations +clari.world.gov.politics +clari.world.gov.politics.personalities +clari.world.law +clari.world.mideast +clari.world.mideast+africa +clari.world.mideast.arabia +clari.world.mideast.egypt +clari.world.mideast.iran +clari.world.mideast.iraq +clari.world.mideast.israel +clari.world.mideast.kuwait +clari.world.mideast.misc +clari.world.mideast.palestine +clari.world.mideast.turkey +clari.world.military +clari.world.oceania +clari.world.oceania.australia +clari.world.oceania.new_zealand +clari.world.organizations +clari.world.organizations.misc +clari.world.organizations.un +clari.world.organizations.un.conferences +clari.world.terrorism +clari.world.top +cle.biz +cle.music +cle.sports +cmh.forsale +cmh.general +cmh.groups +cmh.jobs +cmh.network +cmh.opinion +cmh.test +cmu.student.acf +co.ads +co.bike-events +co.cos.ads +co.cos.general +co.fort-collins.ads +co.fort-collins.general +co.general +co.jobs +co.media.rmn +co.politics +co.politics.amend2.discuss +co.politics.amend2.info +co.test +comp.admin.policy +comp.ai +comp.ai.alife +comp.ai.doc-analysis.misc +comp.ai.doc-analysis.ocr +comp.ai.edu +comp.ai.fuzzy +comp.ai.games +comp.ai.genetic +comp.ai.jair.announce +comp.ai.jair.papers +comp.ai.nat-lang +comp.ai.neural-nets +comp.ai.nlang-know-rep +comp.ai.philosophy +comp.ai.shells +comp.ai.vision +comp.answers +comp.apps.spreadsheets +comp.arch +comp.arch.arithmetic +comp.arch.bus.vmebus +comp.arch.embedded +comp.arch.fpga +comp.arch.storage +comp.archives +comp.archives.admin +comp.archives.ms-windows.announce +comp.archives.ms-windows.discuss +comp.archives.msdos.announce +comp.archives.msdos.d +comp.bbs.majorbbs +comp.bbs.misc +comp.bbs.tbbs +comp.bbs.tsx +comp.bbs.waffle +comp.benchmarks +comp.binaries.acorn +comp.binaries.amiga +comp.binaries.apple2 +comp.binaries.cbm +comp.binaries.geos +comp.binaries.ibm.pc +comp.binaries.ibm.pc.d +comp.binaries.ibm.pc.wanted +comp.binaries.mac +comp.binaries.ms-windows +comp.binaries.newton +comp.binaries.os2 +comp.binaries.psion +comp.bugs.2bsd +comp.bugs.4bsd +comp.bugs.4bsd.ucb-fixes +comp.bugs.misc +comp.bugs.sys5 +comp.cad.autocad +comp.cad.cadence +comp.cad.compass +comp.cad.i-deas +comp.cad.microstation +comp.cad.microstation.programmer +comp.cad.pro-engineer +comp.cad.solidworks +comp.cad.synthesis +comp.client-server +comp.cog-eng +comp.compilers +comp.compilers.tools.javacc +comp.compilers.tools.pccts +comp.compression +comp.compression.research +comp.constraints +comp.data.administration +comp.databases +comp.databases.adabas +comp.databases.btrieve +comp.databases.filemaker +comp.databases.gupta +comp.databases.ibm-db2 +comp.databases.informix +comp.databases.ingres +comp.databases.ms-access +comp.databases.ms-sqlserver +comp.databases.object +comp.databases.olap +comp.databases.oracle.marketplace +comp.databases.oracle.misc +comp.databases.oracle.server +comp.databases.oracle.tools +comp.databases.paradox +comp.databases.pick +comp.databases.progress +comp.databases.rdb +comp.databases.revelation +comp.databases.sybase +comp.databases.theory +comp.databases.visual-dbase +comp.databases.xbase.codebase +comp.databases.xbase.fox +comp.databases.xbase.misc +comp.dcom.cabling +comp.dcom.cell-relay +comp.dcom.fax +comp.dcom.frame-relay +comp.dcom.isdn +comp.dcom.isdn.capi +comp.dcom.lans.ethernet +comp.dcom.lans.fddi +comp.dcom.lans.hyperchannel +comp.dcom.lans.misc +comp.dcom.lans.token-ring +comp.dcom.modems +comp.dcom.modems.cable +comp.dcom.net-analysis +comp.dcom.net-management +comp.dcom.servers +comp.dcom.sys.bay-networks +comp.dcom.sys.cisco +comp.dcom.sys.nortel +comp.dcom.telecom +comp.dcom.telecom.tech +comp.dcom.videoconf +comp.dcom.wan +comp.dcom.xdsl +comp.doc.management +comp.doc.techreports +comp.dsp +comp.editors +comp.edu +comp.edu.composition +comp.edu.languages.natural +comp.emacs +comp.emacs.xemacs +comp.emulators.announce +comp.emulators.apple2 +comp.emulators.cbm +comp.emulators.game-consoles +comp.emulators.mac.executor +comp.emulators.misc +comp.emulators.ms-windows.wine +comp.fonts +comp.graphics.algorithms +comp.graphics.animation +comp.graphics.api.inventor +comp.graphics.api.misc +comp.graphics.api.opengl +comp.graphics.api.pexlib +comp.graphics.apps.alias +comp.graphics.apps.avs +comp.graphics.apps.corel +comp.graphics.apps.data-explorer +comp.graphics.apps.freehand +comp.graphics.apps.gnuplot +comp.graphics.apps.iris-explorer +comp.graphics.apps.lightwave +comp.graphics.apps.pagemaker +comp.graphics.apps.paint-shop-pro +comp.graphics.apps.photoshop +comp.graphics.apps.softimage +comp.graphics.apps.ulead +comp.graphics.apps.wavefront +comp.graphics.misc +comp.graphics.packages.3dstudio +comp.graphics.rendering.misc +comp.graphics.rendering.raytracing +comp.graphics.rendering.renderman +comp.graphics.visualization +comp.groupware +comp.groupware.groupwise +comp.groupware.lotus-notes.admin +comp.groupware.lotus-notes.apps +comp.groupware.lotus-notes.misc +comp.groupware.lotus-notes.programmer +comp.home.automation +comp.home.misc +comp.human-factors +comp.infosystems +comp.infosystems.announce +comp.infosystems.gis +comp.infosystems.gopher +comp.infosystems.harvest +comp.infosystems.hyperg +comp.infosystems.interpedia +comp.infosystems.intranet +comp.infosystems.kiosks +comp.infosystems.search +comp.infosystems.wais +comp.infosystems.www.advocacy +comp.infosystems.www.announce +comp.infosystems.www.authoring.cgi +comp.infosystems.www.authoring.html +comp.infosystems.www.authoring.images +comp.infosystems.www.authoring.misc +comp.infosystems.www.authoring.site-design +comp.infosystems.www.authoring.stylesheets +comp.infosystems.www.authoring.tools +comp.infosystems.www.browsers.mac +comp.infosystems.www.browsers.misc +comp.infosystems.www.browsers.ms-windows +comp.infosystems.www.browsers.x +comp.infosystems.www.misc +comp.infosystems.www.servers.mac +comp.infosystems.www.servers.misc +comp.infosystems.www.servers.ms-windows +comp.infosystems.www.servers.unix +comp.internet.library +comp.internet.net-happenings +comp.ivideodisc +comp.lang.ada +comp.lang.apl +comp.lang.asm.x86 +comp.lang.asm370 +comp.lang.awk +comp.lang.basic.misc +comp.lang.basic.visual.3rdparty +comp.lang.basic.visual.announce +comp.lang.basic.visual.database +comp.lang.basic.visual.misc +comp.lang.beta +comp.lang.c +comp.lang.c++ +comp.lang.c++.leda +comp.lang.c++.moderated +comp.lang.c.moderated +comp.lang.clarion +comp.lang.clipper +comp.lang.clipper.visual-objects +comp.lang.clos +comp.lang.clu +comp.lang.cobol +comp.lang.dylan +comp.lang.eiffel +comp.lang.forth +comp.lang.forth.mac +comp.lang.fortran +comp.lang.functional +comp.lang.hermes +comp.lang.icon +comp.lang.idl +comp.lang.idl-pvwave +comp.lang.java.advocacy +comp.lang.java.announce +comp.lang.java.beans +comp.lang.java.corba +comp.lang.java.databases +comp.lang.java.gui +comp.lang.java.help +comp.lang.java.machine +comp.lang.java.programmer +comp.lang.java.security +comp.lang.java.softwaretools +comp.lang.javascript +comp.lang.labview +comp.lang.limbo +comp.lang.lisp +comp.lang.lisp.franz +comp.lang.lisp.mcl +comp.lang.lisp.x +comp.lang.logo +comp.lang.misc +comp.lang.ml +comp.lang.modula2 +comp.lang.modula3 +comp.lang.mumps +comp.lang.oberon +comp.lang.objective-c +comp.lang.pascal.ansi-iso +comp.lang.pascal.borland +comp.lang.pascal.delphi.advocacy +comp.lang.pascal.delphi.announce +comp.lang.pascal.delphi.components.misc +comp.lang.pascal.delphi.components.usage +comp.lang.pascal.delphi.components.writing +comp.lang.pascal.delphi.databases +comp.lang.pascal.delphi.misc +comp.lang.pascal.mac +comp.lang.pascal.misc +comp.lang.perl.announce +comp.lang.perl.misc +comp.lang.perl.modules +comp.lang.perl.tk +comp.lang.pl1 +comp.lang.pop +comp.lang.postscript +comp.lang.prograph +comp.lang.prolog +comp.lang.python +comp.lang.python.announce +comp.lang.rexx +comp.lang.sather +comp.lang.scheme +comp.lang.scheme.c +comp.lang.scheme.scsh +comp.lang.sigplan +comp.lang.smalltalk +comp.lang.tcl +comp.lang.tcl.announce +comp.lang.verilog +comp.lang.vhdl +comp.lang.visual +comp.lang.vrml +comp.laser-printers +comp.lsi +comp.lsi.cad +comp.lsi.testing +comp.mail.elm +comp.mail.eudora.mac +comp.mail.eudora.ms-windows +comp.mail.headers +comp.mail.imap +comp.mail.list-admin.policy +comp.mail.list-admin.software +comp.mail.maps +comp.mail.mh +comp.mail.mime +comp.mail.misc +comp.mail.multi-media +comp.mail.mush +comp.mail.mutt +comp.mail.pegasus-mail.misc +comp.mail.pegasus-mail.ms-windows +comp.mail.pine +comp.mail.sendmail +comp.mail.smail +comp.mail.uucp +comp.mail.zmail +comp.misc +comp.multimedia +comp.music.midi +comp.music.misc +comp.music.research +comp.networks.noctools.announce +comp.networks.noctools.bugs +comp.networks.noctools.d +comp.networks.noctools.submissions +comp.networks.noctools.tools +comp.networks.noctools.wanted +comp.newprod +comp.object +comp.object.corba +comp.object.logic +comp.org.acm +comp.org.cauce +comp.org.cpsr.announce +comp.org.cpsr.talk +comp.org.decus +comp.org.eff.news +comp.org.eff.talk +comp.org.fidonet +comp.org.ieee +comp.org.isoc.interest +comp.org.issnnet +comp.org.lisp-users +comp.org.sug +comp.org.team-os2 +comp.org.uniforum +comp.org.usenix +comp.org.usenix.roomshare +comp.org.user-groups.apcug +comp.org.user-groups.management +comp.org.user-groups.meetings +comp.org.user-groups.misc +comp.org.user-groups.newsletters +comp.os.aos +comp.os.chorus +comp.os.coherent +comp.os.cpm +comp.os.cpm.amethyst +comp.os.geos.misc +comp.os.geos.programmer +comp.os.inferno +comp.os.lantastic +comp.os.linux.advocacy +comp.os.linux.alpha +comp.os.linux.announce +comp.os.linux.answers +comp.os.linux.development.apps +comp.os.linux.development.system +comp.os.linux.hardware +comp.os.linux.m68k +comp.os.linux.misc +comp.os.linux.networking +comp.os.linux.powerpc +comp.os.linux.setup +comp.os.linux.x +comp.os.lynx +comp.os.mach +comp.os.magic-cap +comp.os.minix +comp.os.misc +comp.os.ms-windows.advocacy +comp.os.ms-windows.announce +comp.os.ms-windows.apps.comm +comp.os.ms-windows.apps.compatibility.win95 +comp.os.ms-windows.apps.financial +comp.os.ms-windows.apps.misc +comp.os.ms-windows.apps.utilities.win3x +comp.os.ms-windows.apps.utilities.win95 +comp.os.ms-windows.apps.winsock.mail +comp.os.ms-windows.apps.winsock.misc +comp.os.ms-windows.apps.winsock.news +comp.os.ms-windows.apps.word-proc +comp.os.ms-windows.ce +comp.os.ms-windows.misc +comp.os.ms-windows.networking.misc +comp.os.ms-windows.networking.ras +comp.os.ms-windows.networking.tcp-ip +comp.os.ms-windows.networking.win95 +comp.os.ms-windows.networking.windows +comp.os.ms-windows.nt.admin.misc +comp.os.ms-windows.nt.admin.networking +comp.os.ms-windows.nt.admin.security +comp.os.ms-windows.nt.advocacy +comp.os.ms-windows.nt.announce +comp.os.ms-windows.nt.misc +comp.os.ms-windows.nt.pre-release +comp.os.ms-windows.nt.setup.hardware +comp.os.ms-windows.nt.setup.misc +comp.os.ms-windows.nt.software.backoffice +comp.os.ms-windows.nt.software.compatibility +comp.os.ms-windows.nt.software.services +comp.os.ms-windows.pre-release +comp.os.ms-windows.programmer.controls +comp.os.ms-windows.programmer.graphics +comp.os.ms-windows.programmer.memory +comp.os.ms-windows.programmer.misc +comp.os.ms-windows.programmer.multimedia +comp.os.ms-windows.programmer.networks +comp.os.ms-windows.programmer.nt.kernel-mode +comp.os.ms-windows.programmer.ole +comp.os.ms-windows.programmer.tools.mfc +comp.os.ms-windows.programmer.tools.misc +comp.os.ms-windows.programmer.tools.owl +comp.os.ms-windows.programmer.tools.winsock +comp.os.ms-windows.programmer.vxd +comp.os.ms-windows.programmer.win32 +comp.os.ms-windows.programmer.winhelp +comp.os.ms-windows.setup.win3x +comp.os.ms-windows.setup.win95 +comp.os.ms-windows.video +comp.os.ms-windows.win95.misc +comp.os.ms-windows.win95.moderated +comp.os.ms-windows.win95.setup +comp.os.msdos.4dos +comp.os.msdos.apps +comp.os.msdos.desqview +comp.os.msdos.djgpp +comp.os.msdos.mail-news +comp.os.msdos.misc +comp.os.msdos.programmer +comp.os.msdos.programmer.turbovision +comp.os.netware.announce +comp.os.netware.connectivity +comp.os.netware.misc +comp.os.netware.security +comp.os.os2.advocacy +comp.os.os2.announce +comp.os.os2.apps +comp.os.os2.beta +comp.os.os2.bugs +comp.os.os2.comm +comp.os.os2.games +comp.os.os2.mail-news +comp.os.os2.marketplace +comp.os.os2.misc +comp.os.os2.moderated +comp.os.os2.multimedia +comp.os.os2.networking.misc +comp.os.os2.networking.server +comp.os.os2.networking.tcp-ip +comp.os.os2.networking.www +comp.os.os2.programmer.misc +comp.os.os2.programmer.oop +comp.os.os2.programmer.porting +comp.os.os2.programmer.tools +comp.os.os2.scitech +comp.os.os2.setup.misc +comp.os.os2.setup.storage +comp.os.os2.setup.video +comp.os.os2.utilities +comp.os.os9 +comp.os.parix +comp.os.plan9 +comp.os.qnx +comp.os.research +comp.os.rsts +comp.os.v +comp.os.vms +comp.os.vxworks +comp.os.xinu +comp.parallel +comp.parallel.mpi +comp.parallel.pvm +comp.patents +comp.periphs +comp.periphs.printers +comp.periphs.scanners +comp.periphs.scsi +comp.programming +comp.programming.contests +comp.programming.literate +comp.programming.threads +comp.protocols.appletalk +comp.protocols.dicom +comp.protocols.dns.bind +comp.protocols.dns.ops +comp.protocols.dns.std +comp.protocols.ibm +comp.protocols.iso +comp.protocols.iso.dev-environ +comp.protocols.iso.x400 +comp.protocols.iso.x400.gateway +comp.protocols.kerberos +comp.protocols.kermit.announce +comp.protocols.kermit.misc +comp.protocols.misc +comp.protocols.nfs +comp.protocols.pcnet +comp.protocols.ppp +comp.protocols.smb +comp.protocols.snmp +comp.protocols.tcp-ip +comp.protocols.tcp-ip.domains +comp.protocols.tcp-ip.ibmpc +comp.protocols.time.ntp +comp.publish.cdrom.hardware +comp.publish.cdrom.multimedia +comp.publish.cdrom.software +comp.publish.electronic.developer +comp.publish.electronic.end-user +comp.publish.electronic.misc +comp.publish.prepress +comp.realtime +comp.research.japan +comp.risks +comp.robotics.misc +comp.robotics.research +comp.security.announce +comp.security.firewalls +comp.security.gss-api +comp.security.misc +comp.security.pgp.announce +comp.security.pgp.discuss +comp.security.pgp.resources +comp.security.pgp.tech +comp.security.pgp.test +comp.security.ssh +comp.security.unix +comp.simulation +comp.society +comp.society.cu-digest +comp.society.development +comp.society.folklore +comp.society.futures +comp.society.privacy +comp.soft-sys.ace +comp.soft-sys.andrew +comp.soft-sys.app-builder.appware +comp.soft-sys.app-builder.dynasty +comp.soft-sys.app-builder.forte +comp.soft-sys.app-builder.uniface +comp.soft-sys.business.sap +comp.soft-sys.dce +comp.soft-sys.gis.esri +comp.soft-sys.khoros +comp.soft-sys.math.mathematica +comp.soft-sys.math.scilab +comp.soft-sys.matlab +comp.soft-sys.middleware.bea-tuxedo +comp.soft-sys.middleware.opendoc +comp.soft-sys.nextstep +comp.soft-sys.powerbuilder +comp.soft-sys.ptolemy +comp.soft-sys.sas +comp.soft-sys.shazam +comp.soft-sys.stat.spss +comp.soft-sys.stat.systat +comp.software-eng +comp.software.arabic +comp.software.config-mgmt +comp.software.international +comp.software.licensing +comp.software.measurement +comp.software.testing +comp.software.year-2000 +comp.sources.acorn +comp.sources.amiga +comp.sources.apple2 +comp.sources.bugs +comp.sources.d +comp.sources.delphi +comp.sources.games +comp.sources.games.bugs +comp.sources.hp48 +comp.sources.mac +comp.sources.misc +comp.sources.postscript +comp.sources.reviewed +comp.sources.sun +comp.sources.testers +comp.sources.unix +comp.sources.wanted +comp.sources.x +comp.specification.larch +comp.specification.misc +comp.specification.z +comp.speech +comp.speech.research +comp.speech.users +comp.std.announce +comp.std.c +comp.std.c++ +comp.std.internat +comp.std.lisp +comp.std.misc +comp.std.unix +comp.std.wireless +comp.sw.components +comp.sys.3b1 +comp.sys.acorn.advocacy +comp.sys.acorn.announce +comp.sys.acorn.apps +comp.sys.acorn.extra-cpu +comp.sys.acorn.games +comp.sys.acorn.hardware +comp.sys.acorn.misc +comp.sys.acorn.networking +comp.sys.acorn.programmer +comp.sys.alliant +comp.sys.amiga.advocacy +comp.sys.amiga.announce +comp.sys.amiga.applications +comp.sys.amiga.audio +comp.sys.amiga.cd32 +comp.sys.amiga.datacomm +comp.sys.amiga.emulations +comp.sys.amiga.games +comp.sys.amiga.graphics +comp.sys.amiga.hardware +comp.sys.amiga.introduction +comp.sys.amiga.marketplace +comp.sys.amiga.misc +comp.sys.amiga.multimedia +comp.sys.amiga.networking +comp.sys.amiga.programmer +comp.sys.amiga.reviews +comp.sys.amiga.uucp +comp.sys.amstrad.8bit +comp.sys.apollo +comp.sys.apple2 +comp.sys.apple2.comm +comp.sys.apple2.gno +comp.sys.apple2.marketplace +comp.sys.apple2.programmer +comp.sys.apple2.usergroups +comp.sys.arm +comp.sys.atari.8bit +comp.sys.atari.advocacy +comp.sys.atari.announce +comp.sys.atari.programmer +comp.sys.atari.st +comp.sys.atari.st.tech +comp.sys.att +comp.sys.be.advocacy +comp.sys.be.announce +comp.sys.be.help +comp.sys.be.misc +comp.sys.be.programmer +comp.sys.cbm +comp.sys.cdc +comp.sys.concurrent +comp.sys.convex +comp.sys.dec +comp.sys.dec.micro +comp.sys.encore +comp.sys.handhelds +comp.sys.harris +comp.sys.hp.apps +comp.sys.hp.hardware +comp.sys.hp.hpux +comp.sys.hp.misc +comp.sys.hp.mpe +comp.sys.hp48 +comp.sys.ibm.as400.misc +comp.sys.ibm.pc.classic +comp.sys.ibm.pc.demos +comp.sys.ibm.pc.digest +comp.sys.ibm.pc.games.action +comp.sys.ibm.pc.games.adventure +comp.sys.ibm.pc.games.announce +comp.sys.ibm.pc.games.flight-sim +comp.sys.ibm.pc.games.marketplace +comp.sys.ibm.pc.games.misc +comp.sys.ibm.pc.games.naval +comp.sys.ibm.pc.games.rpg +comp.sys.ibm.pc.games.space-sim +comp.sys.ibm.pc.games.sports +comp.sys.ibm.pc.games.strategic +comp.sys.ibm.pc.games.war-historical +comp.sys.ibm.pc.hardware.cd-rom +comp.sys.ibm.pc.hardware.chips +comp.sys.ibm.pc.hardware.comm +comp.sys.ibm.pc.hardware.misc +comp.sys.ibm.pc.hardware.networking +comp.sys.ibm.pc.hardware.storage +comp.sys.ibm.pc.hardware.systems +comp.sys.ibm.pc.hardware.video +comp.sys.ibm.pc.misc +comp.sys.ibm.pc.rt +comp.sys.ibm.pc.soundcard.advocacy +comp.sys.ibm.pc.soundcard.games +comp.sys.ibm.pc.soundcard.misc +comp.sys.ibm.pc.soundcard.music +comp.sys.ibm.pc.soundcard.tech +comp.sys.ibm.ps2.hardware +comp.sys.ibm.sys3x.misc +comp.sys.intel +comp.sys.intel.ipsc310 +comp.sys.intergraph +comp.sys.isis +comp.sys.laptops +comp.sys.m6809 +comp.sys.m68k +comp.sys.m88k +comp.sys.mac.advocacy +comp.sys.mac.announce +comp.sys.mac.apps +comp.sys.mac.comm +comp.sys.mac.databases +comp.sys.mac.digest +comp.sys.mac.games.action +comp.sys.mac.games.adventure +comp.sys.mac.games.announce +comp.sys.mac.games.flight-sim +comp.sys.mac.games.marketplace +comp.sys.mac.games.misc +comp.sys.mac.games.strategic +comp.sys.mac.graphics +comp.sys.mac.hardware.misc +comp.sys.mac.hardware.storage +comp.sys.mac.hardware.video +comp.sys.mac.hypercard +comp.sys.mac.misc +comp.sys.mac.oop.macapp3 +comp.sys.mac.oop.misc +comp.sys.mac.oop.powerplant +comp.sys.mac.oop.tcl +comp.sys.mac.portables +comp.sys.mac.printing +comp.sys.mac.programmer.codewarrior +comp.sys.mac.programmer.games +comp.sys.mac.programmer.help +comp.sys.mac.programmer.info +comp.sys.mac.programmer.misc +comp.sys.mac.programmer.tools +comp.sys.mac.scitech +comp.sys.mac.system +comp.sys.mac.wanted +comp.sys.mentor +comp.sys.mips +comp.sys.misc +comp.sys.msx +comp.sys.ncr +comp.sys.net-computer.advocacy +comp.sys.net-computer.announce +comp.sys.net-computer.misc +comp.sys.newton.announce +comp.sys.newton.marketplace +comp.sys.newton.misc +comp.sys.newton.programmer +comp.sys.next.advocacy +comp.sys.next.announce +comp.sys.next.bugs +comp.sys.next.hardware +comp.sys.next.marketplace +comp.sys.next.misc +comp.sys.next.programmer +comp.sys.next.software +comp.sys.next.sysadmin +comp.sys.northstar +comp.sys.nsc.32k +comp.sys.oric +comp.sys.palmtops +comp.sys.palmtops.pilot +comp.sys.pen +comp.sys.powerpc.advocacy +comp.sys.powerpc.misc +comp.sys.powerpc.tech +comp.sys.prime +comp.sys.proteon +comp.sys.psion.announce +comp.sys.psion.apps +comp.sys.psion.comm +comp.sys.psion.marketplace +comp.sys.psion.misc +comp.sys.psion.programmer +comp.sys.psion.reviews +comp.sys.pyramid +comp.sys.ridge +comp.sys.sequent +comp.sys.sgi.admin +comp.sys.sgi.announce +comp.sys.sgi.apps +comp.sys.sgi.audio +comp.sys.sgi.bugs +comp.sys.sgi.graphics +comp.sys.sgi.hardware +comp.sys.sgi.marketplace +comp.sys.sgi.misc +comp.sys.sinclair +comp.sys.stratus +comp.sys.sun.admin +comp.sys.sun.announce +comp.sys.sun.apps +comp.sys.sun.hardware +comp.sys.sun.misc +comp.sys.sun.wanted +comp.sys.super +comp.sys.tahoe +comp.sys.tandem +comp.sys.tandy +comp.sys.ti +comp.sys.ti.explorer +comp.sys.transputer +comp.sys.unisys +comp.sys.wearables +comp.sys.xerox +comp.sys.zenith +comp.sys.zenith.z100 +comp.terminals +comp.terminals.bitgraph +comp.terminals.tty5620 +comp.text +comp.text.desktop +comp.text.frame +comp.text.interleaf +comp.text.pdf +comp.text.sgml +comp.text.tex +comp.theory +comp.theory.cell-automata +comp.theory.dynamic-sys +comp.theory.info-retrieval +comp.theory.self-org-sys +comp.unix.admin +comp.unix.advocacy +comp.unix.aix +comp.unix.amiga +comp.unix.aux +comp.unix.bsd.386bsd.announce +comp.unix.bsd.386bsd.misc +comp.unix.bsd.bsdi.announce +comp.unix.bsd.bsdi.misc +comp.unix.bsd.freebsd.announce +comp.unix.bsd.freebsd.misc +comp.unix.bsd.misc +comp.unix.bsd.netbsd.announce +comp.unix.bsd.netbsd.misc +comp.unix.bsd.openbsd.announce +comp.unix.bsd.openbsd.misc +comp.unix.cde +comp.unix.cray +comp.unix.dos-under-unix +comp.unix.internals +comp.unix.large +comp.unix.machten +comp.unix.misc +comp.unix.osf.misc +comp.unix.osf.osf1 +comp.unix.pc-clone.16bit +comp.unix.pc-clone.32bit +comp.unix.programmer +comp.unix.questions +comp.unix.sco.announce +comp.unix.sco.misc +comp.unix.sco.programmer +comp.unix.shell +comp.unix.solaris +comp.unix.sys3 +comp.unix.sys5.misc +comp.unix.sys5.r3 +comp.unix.sys5.r4 +comp.unix.ultrix +comp.unix.unixware.announce +comp.unix.unixware.misc +comp.unix.user-friendly +comp.unix.xenix.misc +comp.unix.xenix.sco +comp.virus +comp.windows.garnet +comp.windows.interviews +comp.windows.misc +comp.windows.news +comp.windows.open-look +comp.windows.suit +comp.windows.ui-builders.teleuse +comp.windows.ui-builders.uimx +comp.windows.x +comp.windows.x.announce +comp.windows.x.apps +comp.windows.x.i386unix +comp.windows.x.intrinsics +comp.windows.x.motif +computer42.admin +computer42.announce +computer42.mail2news.germnews +computer42.mail2news.linux-alert +computer42.mail2news.pgp-freunde +computer42.mail2news.radio-vatikan +computer42.statistik +computer42.test +concordia.general +control +control.cancel +control.checkgroups +control.newgroup +control.rmgroup +control.sendsys +cor.forsale +cor.gamers +cor.single +cornell.talk.italian +courts.usa.config +courts.usa.federal.supreme +courts.usa.state.ohio.appls-8th +courts.usa.state.ohio.config +courts.usa.state.ohio.supreme +creighton.dental +cris.fido.asian_link +crosslink.announce +crosslink.general +crosslink.test +crosslink.www +crs.buy_sell +cruzio.general +cruzio.network +cs-monolit.gated.lists.bsdi-users +cs-monolit.gated.lists.net-happenings +cs.logs.mirror +cscuk.news +csd.aflb +csd.bboard +csd.building +csd.cmsc426 +csd.cmsc620 +csd.cmsc724 +csd.cmsc818x +csd.cmsc818z +csd.logic +csd.machines.hp +csd.new-phd +csd.sports +csn.ads +csn.ml.com-priv +csn.ml.kids +csn.ml.kidsnet +csn.ml.nisus-info +csn.ml.saturn +csn.test +csstu.general +ct.diskussion +ct.talk.projekte +ctdl.lang.c +ctdl.lang.c++ +ctdl.lang.pascal +ctdl.sys.atari.st +ctdl.sys.atari8 +ctdl.sys.mac +cu-den.general +cu.applmath +cu.business.general +cu.business.general.distance +cu.business.grad.mba +cu.business.grad.ms +cu.business.grad.phd +cu.business.ugrad +cu.courses.acct3220 +cu.courses.acct4430 +cu.courses.acct4440 +cu.courses.acct6420 +cu.courses.appm1350 +cu.courses.aren2010 +cu.courses.aren2020 +cu.courses.aren3010 +cu.courses.aren4010 +cu.courses.aren4570 +cu.courses.cdss2010 +cu.courses.chem1131-l250 +cu.courses.chem1131-l294 +cu.courses.chen4330 +cu.courses.chen5360 +cu.courses.clas2100 +cu.courses.comm1600-010 +cu.courses.comm1600-011 +cu.courses.cs1300-030 +cu.courses.cs2010 +cu.courses.cs2250 +cu.courses.cs3155 +cu.courses.cs3245 +cu.courses.cs3287 +cu.courses.cs5573 +cu.courses.cs5673 +cu.courses.csci-networks +cu.courses.csci-realtime +cu.courses.csci-sysadmin +cu.courses.csci7212 +cu.courses.cven5060 +cu.courses.cven5276 +cu.courses.ecen1000 +cu.courses.ecen4013 +cu.courses.ecen5254 +cu.courses.ecen5523 +cu.courses.ecen5593 +cu.courses.econ4111 +cu.courses.econ4999 +cu.courses.engl1191-013 +cu.courses.engl1260 +cu.courses.engl1500 +cu.courses.engl4032 +cu.courses.envd3002 +cu.courses.envd4352 +cu.courses.epob4410 +cu.courses.fnce4400 +cu.courses.fren3120 +cu.courses.fren5120 +cu.courses.geen1400-010 +cu.courses.geen1400-030 +cu.courses.grmn3520 +cu.courses.hist1020-3 +cu.courses.hist1020-5 +cu.courses.hist4623 +cu.courses.hist4723 +cu.courses.hist4733 +cu.courses.humn3093 +cu.courses.infs3050 +cu.courses.infs6150 +cu.courses.laws5223 +cu.courses.laws8428 +cu.courses.ling1000-011 +cu.courses.mbac6130 +cu.courses.mbat6450 +cu.courses.phil1440 +cu.courses.phys1230 +cu.courses.phys2010 +cu.courses.phys2170 +cu.courses.phys3220 +cu.courses.phys3330 +cu.courses.pmus5526 +cu.courses.psci1101 +cu.courses.psci3011 +cu.courses.psyc4145 +cu.courses.tlen5190 +cu.courses.uwrp3020 +cu.coursese.ecen5254 +cu.cs.clim +cu.cs.grads +cu.cs.macl.info +cu.cs.srl +cu.cs.systat +cu.cs.systat.tmr +cu.cs.ugrads +cu.decstation.managers +cu.garnet +cu.general +cu.grads.teaching +cu.grads.teaching.leads +cu.ics +cu.indonesia +cu.iscabbs +cu.its +cu.misc +cu.misc.misc +cu.motif-talk +cu.netmanagers +cu.netstat +cu.physics.ugrads +cu.slug +cu.test +cu.vlsi +cuug.announce +cuug.answers +cuug.help +cuug.jobs +cuug.marketplace +cuug.misc +cuug.networking +cuug.sig +cwo.x11.intrinsics +cwo.x11.mltalk +cz.answers +cz.comp.amiga +cz.comp.cstex +cz.comp.editors +cz.comp.grafika +cz.comp.ibmpc +cz.comp.lang.basic.visual +cz.comp.lang.java +cz.comp.lang.perl +cz.comp.lang.python +cz.comp.linux +cz.comp.linux.czman +cz.comp.mac +cz.comp.microsoft.asp +cz.comp.microsoft.msx +cz.comp.microsoft.sql +cz.comp.multimedia +cz.comp.os2 +cz.comp.sgi +cz.comp.vms +cz.comp.windows.apps.misc +cz.comp.windows.apps.msmail +cz.comp.windows.ms +cz.comp.windows.nt +cz.net.abuse.misc +cz.net.announce +cz.net.csinfo +cz.net.hiedu +cz.net.inetnls +cz.net.internet +cz.net.netware +cz.net.providers +cz.net.resources +cz.net.smajlik +cz.net.tcpip +cz.net.www +cz.news.admin +cz.news.user +cz.rec.foto +cz.rec.sport +cz.sci.informatics.announce.seminar +cz.sci.informatics.contact +cz.sci.med.monkin +cz.soc.announce +cz.soc.carolina-cs +cz.soc.christian +cz.soc.cimrman +cz.soc.hrad.info +cz.soc.mensa +cz.soc.misc +cz.soc.orient +cz.soc.pen-friends +cz.soc.school.open.misc +cz.talk +cz.talk.drogy +cz.talk.politika +cz.test +cz.zamestnani.hledam +cz.zamestnani.nabidky +dal.general +dal.test +dc.biking +dc.config +dc.dining +dc.driving +dc.forsale.computers +dc.forsale.misc +dc.general +dc.housing +dc.jobs +dc.media +dc.music +dc.org.linux-users +dc.politics +dc.redskins +dc.romance +dc.smithsonian +dc.test +de.admin.archiv +de.admin.lists +de.admin.misc +de.admin.net-abuse.announce +de.admin.net-abuse.mail +de.admin.net-abuse.misc +de.admin.net-abuse.news +de.admin.news.announce +de.admin.news.groups +de.admin.news.misc +de.admin.news.regeln +de.admin.submaps +de.alt.0d +de.alt.admin +de.alt.anime +de.alt.arnooo +de.alt.astrologie +de.alt.augenoptik +de.alt.auto +de.alt.binaries.pictures.erotica.male +de.alt.binaries.pictures.male +de.alt.comics +de.alt.comm.isdn4linux +de.alt.comm.mgetty +de.alt.comp.sap-r3 +de.alt.dateien.mannsbilder +de.alt.dateien.weibsbilder +de.alt.dummschwatz +de.alt.fan.bluemchen +de.alt.fan.comedy +de.alt.fan.dudenhoeffer +de.alt.fan.fruehstyxradio +de.alt.fan.furry +de.alt.fan.haraldschmidt +de.alt.fan.helgeschneider +de.alt.fan.konsumterror +de.alt.fan.pluesch +de.alt.fan.prince +de.alt.fan.rrr +de.alt.fan.swf3 +de.alt.fan.tabak +de.alt.fan.tastische4 +de.alt.flame +de.alt.folklore.computer +de.alt.games.pbem +de.alt.games.quake +de.alt.games.unreal +de.alt.gblf +de.alt.geschichten +de.alt.gruppenkasper +de.alt.hoerfunk +de.alt.jahr2000 +de.alt.messe +de.alt.mud +de.alt.music.dj +de.alt.music.jazz +de.alt.naturheilkunde +de.alt.netdigest +de.alt.paranormal +de.alt.punk +de.alt.radio-scanner +de.alt.sci.ergonomie +de.alt.soc.transgendered +de.alt.sources.linux.patches +de.alt.sysadmin.recovery +de.alt.szene.gothic +de.alt.technik.waffen +de.alt.test +de.alt.tierrechte +de.alt.tv.mash +de.alt.tv.wissenschaft +de.alt.ufo +de.alt.umfragen +de.alt.wg-geschichten +de.alt.windsurfen +de.alt.zotty.answers +de.answers +de.comm.chatsystems +de.comm.ham +de.comm.infosystems.misc +de.comm.infosystems.www.authoring +de.comm.infosystems.www.browsers +de.comm.infosystems.www.pages +de.comm.infosystems.www.servers +de.comm.internet.misc +de.comm.internet.routing +de.comm.isdn.computer +de.comm.isdn.misc +de.comm.isdn.technik +de.comm.isdn.telefon +de.comm.isdn.tk-anlage +de.comm.misc +de.comm.mobil.geraete +de.comm.mobil.misc +de.comm.mobil.netze +de.comm.mobil.pager +de.comm.mobil.technik +de.comm.modem +de.comm.protocols.misc +de.comm.protocols.tcp-ip +de.comm.protocols.zconnect +de.comm.provider.metronet +de.comm.provider.misc +de.comm.provider.suche +de.comm.provider.t-online +de.comm.software.crosspoint +de.comm.software.forte-agent +de.comm.software.mailreader.pegasus +de.comm.software.misc +de.comm.software.newsreader +de.comm.software.ums +de.comm.uucp +de.comp.advocacy +de.comp.cad +de.comp.datenbanken.misc +de.comp.datenbanken.ms-access +de.comp.gnu +de.comp.graphik +de.comp.lang.assembler.misc +de.comp.lang.assembler.x86 +de.comp.lang.c +de.comp.lang.forth +de.comp.lang.java +de.comp.lang.javascript +de.comp.lang.misc +de.comp.lang.pascal.delphi +de.comp.lang.pascal.misc +de.comp.lang.perl +de.comp.misc +de.comp.objekt +de.comp.office-pakete.misc +de.comp.office-pakete.staroffice +de.comp.os.be +de.comp.os.bsd +de.comp.os.linux.hardware +de.comp.os.linux.misc +de.comp.os.linux.networking +de.comp.os.linux.x +de.comp.os.misc +de.comp.os.ms-windows.misc +de.comp.os.ms-windows.programmer +de.comp.os.msdos +de.comp.os.os2.advocacy +de.comp.os.os2.apps +de.comp.os.os2.misc +de.comp.os.os2.networking +de.comp.os.os2.programmer +de.comp.os.os2.setup +de.comp.os.sinix +de.comp.os.unix +de.comp.os.vms +de.comp.periph.cdrom +de.comp.periph.misc +de.comp.security +de.comp.shareware.entwicklung +de.comp.shareware.misc +de.comp.standards +de.comp.sys.amiga.advocacy +de.comp.sys.amiga.archive +de.comp.sys.amiga.comm +de.comp.sys.amiga.misc +de.comp.sys.amiga.tech +de.comp.sys.amiga.unix +de.comp.sys.ibm-pc +de.comp.sys.mac +de.comp.sys.misc +de.comp.sys.next +de.comp.sys.novell +de.comp.sys.st +de.comp.text.dtp +de.comp.text.misc +de.comp.text.ms-word +de.comp.text.tex +de.comp.x11 +de.etc.bahn.announce +de.etc.bahn.eisenbahn +de.etc.bahn.misc +de.etc.bahn.stadtverkehr +de.etc.beruf.misc +de.etc.beruf.selbstaendig +de.etc.finanz.banken+broker +de.etc.finanz.boerse +de.etc.finanz.misc +de.etc.haushalt +de.etc.lists +de.etc.misc +de.etc.notfallrettung +de.etc.selbsthilfe.angst +de.etc.selbsthilfe.gehoer +de.etc.selbsthilfe.misc +de.etc.sprache.deutsch +de.etc.sprache.klassisch +de.etc.sprache.misc +de.markt.arbeit.biete +de.markt.arbeit.d +de.markt.arbeit.suche +de.markt.comp.hardware +de.markt.comp.misc +de.markt.misc +de.markt.wohnen +de.newusers.infos +de.newusers.questions +de.org.ccc +de.org.in +de.org.mensa +de.org.misc +de.org.politik.misc +de.org.politik.spd +de.rec.alpinismus +de.rec.buecher +de.rec.drachen +de.rec.fahrrad +de.rec.film.kritiken +de.rec.film.misc +de.rec.fotografie +de.rec.garten +de.rec.heimwerken +de.rec.hoerspiel +de.rec.kunst.misc +de.rec.kunst.theater +de.rec.luftfahrt +de.rec.mampf +de.rec.misc +de.rec.modelle.bahn +de.rec.modelle.misc +de.rec.motorrad +de.rec.motorroller +de.rec.music.audio +de.rec.music.elektronisch +de.rec.music.klassik +de.rec.music.misc +de.rec.orakel +de.rec.outdoors +de.rec.reisen.camping +de.rec.reisen.misc +de.rec.sammeln +de.rec.sf.misc +de.rec.sf.perry-rhodan +de.rec.sf.startrek.misc +de.rec.sf.startrek.technologie +de.rec.sf.starwars +de.rec.spiele.computer.action +de.rec.spiele.computer.adventure +de.rec.spiele.computer.misc +de.rec.spiele.computer.rpg +de.rec.spiele.computer.simulation +de.rec.spiele.computer.strategie +de.rec.spiele.computer.technik +de.rec.spiele.misc +de.rec.spiele.rpg.live +de.rec.spiele.rpg.misc +de.rec.sport.budo +de.rec.sport.eishockey +de.rec.sport.fallschirm +de.rec.sport.fussball +de.rec.sport.misc +de.rec.sport.segeln +de.rec.sport.tanzen +de.rec.sport.tauchen +de.rec.tiere.aquaristik +de.rec.tiere.hunde +de.rec.tiere.katzen +de.rec.tiere.misc +de.rec.tiere.pferde +de.rec.tiere.ratten +de.rec.tiere.terraristik +de.rec.tv.akte-x +de.rec.tv.lindenstrasse +de.rec.tv.misc +de.rec.tv.simpsons +de.rec.tv.technik +de.sci.announce +de.sci.astronomie +de.sci.biologie +de.sci.chemie +de.sci.electronics +de.sci.geschichte +de.sci.informatik.ki +de.sci.informatik.misc +de.sci.ing +de.sci.mathematik +de.sci.medizin.cannabis +de.sci.medizin.diabetes +de.sci.medizin.logopaedie +de.sci.medizin.misc +de.sci.medizin.psychiatrie +de.sci.misc +de.sci.museum +de.sci.oekonomie +de.sci.paedagogik +de.sci.philosophie +de.sci.physik +de.sci.politologie +de.sci.psychologie +de.sci.raumfahrt +de.sci.sci-theorie +de.sci.soziologie +de.sci.theologie +de.soc.arbeit +de.soc.datenschutz +de.soc.drogen +de.soc.familie.misc +de.soc.familie.vaeter +de.soc.handicap +de.soc.jugendarbeit +de.soc.kultur +de.soc.medien +de.soc.menschenrechte +de.soc.misc +de.soc.netzkultur +de.soc.pflichtdienste +de.soc.politik.misc +de.soc.politik.texte +de.soc.recht.announce +de.soc.recht.datennetze +de.soc.recht.misc +de.soc.senioren +de.soc.studium +de.soc.studium.verbindungen +de.soc.umwelt +de.soc.verkehr +de.soc.weltanschauung.buddhismus +de.soc.weltanschauung.christentum +de.soc.weltanschauung.misc +de.soc.weltanschauung.scientology +de.soc.wirtschaft +de.soc.zensur +de.talk.bizarre +de.talk.jokes +de.talk.jokes.d +de.talk.jugend +de.talk.liebesakt +de.talk.misc +de.talk.romance +de.test +demon.adverts +demon.adverts.d +demon.announce +demon.answers +demon.archives.announce +demon.archives.d +demon.homepages.adverts +demon.homepages.authoring +demon.ip.cppnews +demon.ip.developers +demon.ip.discoveries +demon.ip.support +demon.ip.support.amiga +demon.ip.support.archimedes +demon.ip.support.atari +demon.ip.support.ie4 +demon.ip.support.mac +demon.ip.support.nt +demon.ip.support.other +demon.ip.support.pc +demon.ip.support.pc.announce +demon.ip.support.turnpike +demon.ip.support.unix +demon.ip.support.win95 +demon.ip.winsock +demon.ip.winsock.dics +demon.ip.www +demon.local +demon.news +demon.nl.announce +demon.nl.babbel +demon.nl.support +demon.pops +demon.sales +demon.sales.d +demon.security +demon.security.keys +demon.service +demon.service.homepages +demon.service.isdn +demon.tech.pc +demon.test +dfw.eats +dfw.flame +dfw.forsale +dfw.general +dfw.internet.providers +dfw.jobs +dfw.maps +dfw.personals +dfw.politics +dfw.singles +dfw.test +dfw.usenet.config +dfw.usenet.stats +dk.admin +dk.admin.netikette +dk.admin.netmisbrug +dk.admin.opslag +dk.admin.usenetregler +dk.bolig +dk.edb +dk.edb.aar2000problem +dk.edb.database +dk.edb.grafik +dk.edb.hardware +dk.edb.internet +dk.edb.internet.software +dk.edb.internet.udbydere +dk.edb.internet.webdesign +dk.edb.internet.webdesign.asp +dk.edb.mac +dk.edb.ms-windows +dk.edb.ms-windows.nt +dk.edb.netvaerk +dk.edb.netware +dk.edb.os2 +dk.edb.programmering +dk.edb.programpakker.ms-office +dk.edb.regneark +dk.edb.spil +dk.edb.spil.nintendo +dk.edb.spil.playstation +dk.edb.spil.simulator.fly +dk.edb.tekst +dk.edb.unix +dk.erhverv +dk.familie.adoption +dk.familie.barn +dk.forbruger +dk.fritid +dk.fritid.bil +dk.fritid.boern-og-unge +dk.fritid.dykning +dk.fritid.foto +dk.fritid.hamradio +dk.fritid.hus-og-have +dk.fritid.jagt +dk.fritid.jernbaner +dk.fritid.kaeledyr +dk.fritid.lystfiskeri +dk.fritid.motorcykel +dk.fritid.ornitologi +dk.fritid.rejse +dk.fritid.rollespil +dk.general +dk.helbred.slank +dk.historie.genealogi +dk.kultur.film +dk.kultur.litteratur +dk.kultur.mad+drikke +dk.kultur.musik +dk.kultur.musik.klassisk +dk.kultur.sprog +dk.kultur.tegneserier +dk.livssyn +dk.lokalsamfund.bornholm +dk.lokalsamfund.fyn +dk.loppemarked +dk.loppemarked.bil +dk.loppemarked.blad+bog +dk.loppemarked.bolig +dk.loppemarked.dyr +dk.loppemarked.edb.mac +dk.loppemarked.edb.spil +dk.loppemarked.moebel +dk.loppemarked.motorcykel +dk.loppemarked.musik +dk.loppemarked.radio+hifi +dk.loppemarked.tv+video +dk.marked.kommerciel +dk.marked.kommerciel.edb +dk.marked.privat +dk.marked.privat.bil +dk.marked.privat.blad+bog +dk.marked.privat.bolig +dk.marked.privat.dyr +dk.marked.privat.edb +dk.medier.radio +dk.medier.satellit +dk.medier.tv +dk.natur +dk.opslag.foredrag +dk.opslag.internet +dk.opslag.stillinger +dk.politik +dk.politik.indvandring +dk.politik.miljoe +dk.politik.trafik +dk.politik.ungdom +dk.snak +dk.snak.vittigheder +dk.sport +dk.sport.fodbold +dk.sport.motorsport +dk.sport.rulleskoejter +dk.sport.squash +dk.sport.volleyball +dk.teknik.elektronik +dk.teknik.radio.scanner +dk.teknik.telefoni +dk.test +dk.undervisning.fjern +dk.velkommen +dk.videnskab +dk.videnskab.psykologi +dk.videnskab.sundhed +dk.videnskab.teologi +dn.supers +dn.supers.disc +dod.jobs +dorsai.helpdesk +dsm.network +dungeon.announce +dungeon.announce.msdos-archive +dungeon.announce.os2-archive +dungeon.chatter +dungeon.chatter.doom +dungeon.forsale +dungeon.support +dungeon.support.amiga +dungeon.support.mac +dungeon.support.msdos +dwitten.general +ed.accommodation +ed.followup +ed.general +ed.linux +ed.prolog +ed.review +ed.sources +ed.test +ed.unix-wizards +ed.vr +ed.windows.x +edm.announce +edm.forsale +edm.general +edm.news.stats +edm.politics +edm.usrgrp +emrl.audio+video.experiment +emrl.audio+video.hardware +emrl.moo +emrl.multiplicity.virtuality +emrl.retrotek +erg.general +es.binarios.astronomia +es.binarios.macintosh +es.binarios.misc +es.binarios.sexo +es.binarios.sonido.misc +es.binarios.sonido.mp3 +es.charla.actualidad +es.charla.conexion.misc +es.charla.conexion.tarifa-plana +es.charla.cooperacion +es.charla.economia.bolsa +es.charla.economia.contabilidad +es.charla.economia.misc +es.charla.educacion.ciencia +es.charla.educacion.distancia +es.charla.educacion.drogas +es.charla.educacion.educ-fisica +es.charla.educacion.misc +es.charla.enfermedad +es.charla.enfermedad.cancer +es.charla.enfermedad.diabetes +es.charla.enfermedad.ela +es.charla.enfermedad.misc +es.charla.enfermeria +es.charla.gastronomia +es.charla.gay-lesbiana +es.charla.integracion.misc +es.charla.integracion.sindrome-down +es.charla.medio-ambiente +es.charla.misc +es.charla.moteros +es.charla.motor +es.charla.politica +es.charla.religion +es.charla.sexo +es.charla.utopia +es.ciencia.astrofisica.misc +es.ciencia.astrofisica.telescopios +es.ciencia.electronica +es.ciencia.enologia +es.ciencia.matematicas +es.ciencia.medicina.lab-clinico +es.ciencia.medicina.misc +es.ciencia.misc +es.ciencia.quimicas +es.ciencia.zootecnia.misc +es.ciencia.zootecnia.vacuno +es.comp.amiga +es.comp.artes-graficas +es.comp.bd.misc +es.comp.bd.ms-access +es.comp.cad.autocad +es.comp.cad.misc +es.comp.demos +es.comp.emuladores +es.comp.hackers +es.comp.hardware.cd-rw +es.comp.hardware.misc +es.comp.infosistemas.bbs +es.comp.infosistemas.internet +es.comp.infosistemas.listas.anuncios +es.comp.infosistemas.misc +es.comp.infosistemas.www +es.comp.lenguajes.c +es.comp.lenguajes.c++ +es.comp.lenguajes.clipper +es.comp.lenguajes.delphi +es.comp.lenguajes.java +es.comp.lenguajes.misc +es.comp.lenguajes.tex +es.comp.lenguajes.visual-basic +es.comp.macintosh.misc +es.comp.macintosh.programacion +es.comp.misc +es.comp.neuronal +es.comp.os.as400 +es.comp.os.linux +es.comp.os.misc +es.comp.os.ms-windows.misc +es.comp.os.ms-windows.programacion +es.comp.os.os2 +es.comp.programas +es.comp.seguridad.pgp +es.comp.sistemas.hp48 +es.comp.sistemas.inteligentes +es.comp.sistemas.misc +es.comp.super +es.comp.virus +es.humanidades.derecho +es.humanidades.gramatica +es.humanidades.literatura +es.humanidades.misc +es.humanidades.psicologia +es.misc.anuncios.compra-venta +es.misc.anuncios.misc +es.misc.anuncios.trabajo.demandas +es.misc.anuncios.trabajo.misc +es.misc.anuncios.trabajo.ofertas +es.misc.misc +es.news +es.news.admin +es.news.anuncios +es.news.grupos +es.news.misc +es.news.preguntas +es.pruebas +es.rec.aviacion +es.rec.cine +es.rec.comics +es.rec.deportes.atletismo +es.rec.deportes.aventura +es.rec.deportes.buceo +es.rec.deportes.futbol +es.rec.deportes.misc +es.rec.deportes.motor +es.rec.deportes.natacion +es.rec.deportes.nautica +es.rec.ficcion.misc +es.rec.fotografia +es.rec.humor +es.rec.ilusionismo +es.rec.juegos.ajedrez +es.rec.juegos.comp.arcade +es.rec.juegos.comp.aventuras +es.rec.juegos.comp.misc +es.rec.juegos.comp.simuladores.misc +es.rec.juegos.comp.simuladores.vuelo +es.rec.juegos.estrategia +es.rec.juegos.magic +es.rec.juegos.misc +es.rec.juegos.rol +es.rec.labores +es.rec.manga +es.rec.mascotas.misc +es.rec.mascotas.peces +es.rec.misc +es.rec.modelismo +es.rec.motor.4x4 +es.rec.musica.alternativas +es.rec.musica.blues +es.rec.musica.clasica +es.rec.musica.grupos.beatles +es.rec.musica.grupos.misc +es.rec.musica.jazz +es.rec.musica.misc +es.rec.musica.techno +es.rec.naturismo +es.rec.pasatiempos +es.rec.radio.amateur +es.rec.radio.misc +es.rec.radio.ondacorta +es.rec.trenes +es.rec.tv.misc +es.rec.tv.series +es.rec.viajes +es.soc.cultura.agenda +es.soc.cultura.misc +es.soc.misc +es.tecnica.arquitectura +es.tecnica.misc +escape.announce +escape.flame +escape.misc +escape.questions +escape.test +esp.bienvenida +esp.binarios.discusion +esp.binarios.imagenes +esp.binarios.misc +esp.binarios.sonidos +esp.charla.actualidad +esp.charla.ecologismo +esp.charla.politica +esp.charla.religion +esp.charla.sexo +esp.ciencia.biologia +esp.ciencia.misc +esp.comp.misc +esp.comp.sistemas.macintosh +esp.comp.sistemas.misc +esp.comp.sistemas.pc +esp.comp.so.linux +esp.comp.so.misc +esp.comp.so.ms-windows +esp.humanidades.historia +esp.humanidades.misc +esp.mercado.hardware +esp.mercado.misc +esp.mercado.software +esp.mercado.trabajos +esp.news.administracion +esp.news.anuncios +esp.news.faqs +esp.news.misc +esp.news.propuestas +esp.rec.arte.cine +esp.rec.arte.literatura +esp.rec.arte.misc +esp.rec.arte.musica +esp.rec.cf +esp.rec.deportes.futbol +esp.rec.deportes.misc +esp.rec.humor +esp.rec.juegos +esp.rec.misc +esp.rec.viajes +esp.test +esp.test-moderado +esp.varios +essug.copt +essug.misc +essug.telco +eug.access.video +eug.arts.photography +eug.bbs.excelsior +eug.comp.sys.macintosh +eug.config +eug.education.homeschooling +eug.forsale +eug.housing +eug.jobs +eug.local.activists +eug.local.connectivity.politics +eug.local.connectivity.tech +eug.nwmusic.news +eug.register.guard +eug.test +eunet.aviation +eunet.bugs.4bsd +eunet.bugs.uucp +eunet.checkgroups +eunet.cyberrights +eunet.esprit +eunet.esprit.eurochip +eunet.europen +eunet.jokes +eunet.misc +eunet.newprod +eunet.news +eunet.news.group +eunet.politics +eunet.sources +eunet.test +eunet.works +evv.config +evv.politics +evv.riverboat +evv.sport.aces +evv.toyota +eye.config +eye.general +eye.letters +eye.news +fcn.general +fcn.tor.comm +fcn.tor.finance +fcn.tor.misc +fcn.tor.org +fcn.tor.tech +fcn.tor.tfn +fcn.tor.vote +fhg.ilt +fido.24000-ger +fido.386-ger +fido.4dos +fido.amiga-ger +fido.amiga.prog +fido.belg.beurs-data +fido.belg.computer.widows +fido.belg.cprog +fido.belg.files +fido.belg.fra.asbl.rtfm +fido.belg.fra.commerce +fido.belg.fra.scoutisme +fido.belg.news +fido.ccc-ger +fido.clipper +fido.desqview +fido.ebbauser-ger +fido.elektronik-ger +fido.eur.genealogy +fido.fidoguide-ger +fido.flea-ger +fido.ger.4dos +fido.ger.abfahrer +fido.ger.abled +fido.ger.amiga +fido.ger.amiprog +fido.ger.amnesty +fido.ger.antifa +fido.ger.archimedes +fido.ger.astronomie +fido.ger.atari +fido.ger.auge +fido.ger.auto +fido.ger.autoren +fido.ger.aviation +fido.ger.basic +fido.ger.binkley +fido.ger.boerse +fido.ger.book +fido.ger.btx +fido.ger.c_echo +fido.ger.c_plusplus +fido.ger.cadcam +fido.ger.ccc +fido.ger.ccitt-fax +fido.ger.cfos_help +fido.ger.chauvi +fido.ger.chemie +fido.ger.clipper +fido.ger.comms +fido.ger.compilerbau +fido.ger.control +fido.ger.crosspoint +fido.ger.ct +fido.ger.darc +fido.ger.dbase +fido.ger.desqview +fido.ger.dfue +fido.ger.dtp +fido.ger.elektronik +fido.ger.fantasy +fido.ger.fastfood +fido.ger.fidoguide +fido.ger.flea +fido.ger.frauen +fido.ger.frust +fido.ger.garten +fido.ger.gay +fido.ger.gem +fido.ger.genealogy +fido.ger.grafik +fido.ger.greenp +fido.ger.grenzwis +fido.ger.hardware +fido.ger.hifi +fido.ger.hp48sx +fido.ger.hst +fido.ger.ibm +fido.ger.informatik +fido.ger.internet +fido.ger.isdn +fido.ger.jokes +fido.ger.kirche +fido.ger.kochen +fido.ger.kommerz +fido.ger.konsolen +fido.ger.kontakt +fido.ger.lan +fido.ger.linux +fido.ger.mac +fido.ger.magie +fido.ger.mailbox +fido.ger.maximus +fido.ger.medizin +fido.ger.midi +fido.ger.modem +fido.ger.modula-2 +fido.ger.motorrad +fido.ger.movie +fido.ger.movie.horror +fido.ger.msdos5xx +fido.ger.musik +fido.ger.musiker +fido.ger.net_dev +fido.ger.next +fido.ger.novell +fido.ger.oops +fido.ger.os2 +fido.ger.pascal +fido.ger.pc_geos +fido.ger.pgmrs +fido.ger.philo +fido.ger.photo +fido.ger.platt +fido.ger.politik +fido.ger.polizei +fido.ger.produkte +fido.ger.recht +fido.ger.request +fido.ger.rhodan +fido.ger.rpg +fido.ger.sat +fido.ger.sex +fido.ger.shareware +fido.ger.soundkarten +fido.ger.spiele +fido.ger.storage +fido.ger.tex +fido.ger.transputer +fido.ger.tv +fido.ger.umwelt +fido.ger.unix +fido.ger.urlaub +fido.ger.virus +fido.ger.windows +fido.ger.windows.prog +fido.ger.windows.tp +fido.ger.wissen +fido.ger.zivi +fido.ger.zyxel +fido.hardware-ger +fido.hst +fido.jokes-ger +fido.kirche-ger +fido.kommerz-ger +fido.kontakt-ger +fido.linux-ger +fido.mac.dev +fido.magie-ger +fido.movie-ger +fido.music +fido.musik-ger +fido.novell +fido.ot.support +fido.pascal-ger +fido.phones +fido.politik-ger +fido.recht-ger +fido.sat-ger +fido.sex-ger +fido.shareware-ger +fido.spiele-ger +fido.thunder +fido.trek +fido.win32 +fido.windows-ger +fido.wissen-ger +fido.zyxel-ger +fido7.aaa.support +fido7.adinf.support +fido7.aids-arc +fido7.aids-hiv +fido7.aids.data +fido7.aids.dialogue +fido7.aids.drugs +fido7.aids.fr +fido7.aids.law +fido7.aids.nl +fido7.aids.spiritual +fido7.aids.women +fido7.alex.echo +fido7.allfix-help +fido7.amm.links +fido7.amm.robots +fido7.announce.f2000 +fido7.announce.newgroups +fido7.argus +fido7.arjz.support +fido7.asian-nm.pvt +fido7.asy-s.talk +fido7.asy.info +fido7.at.beer +fido7.at.talk +fido7.atom.info +fido7.atom.pvt +fido7.aus.jokes +fido7.aviation.team +fido7.avp.support +fido7.bbs-doors +fido7.bbslist.support +fido7.before.sysopka.after +fido7.bel.files +fido7.bel.general +fido7.bink.plus +fido7.bink.plus.e +fido7.binkley.rus +fido7.bk.talks +fido7.blc.gate.ukraine +fido7.bocharoff.sux +fido7.bocharoff.unplugged +fido7.bocharov.rulezz +fido7.bpack.support +fido7.brake-s.mailer.support +fido7.bynk.support.rus +fido7.ca.echo +fido7.cafe.anonim +fido7.calm.delirium +fido7.calm.echo +fido7.cardinal.pvt +fido7.castle.info +fido7.cb.radio +fido7.cherlite.pvt +fido7.crack +fido7.crack.talks +fido7.crazy-lovers +fido7.crazy.travels +fido7.crimea.talk +fido7.cris.fileecho +fido7.cris.hard +fido7.cris.lang +fido7.cris.talk +fido7.cris.test +fido7.ctpahhoe.mecto +fido7.dec-fan.pvt +fido7.delta.news +fido7.demex.news +fido7.demo.design +fido7.demo.design.uue +fido7.demo.design.wanted +fido7.demo.dessign.uue +fido7.dig.fidotech +fido7.dig.fileecho +fido7.dig.hacker +fido7.dig.modem +fido7.dn.allfix +fido7.dn.debate +fido7.dn.fileecho +fido7.dn.games +fido7.dn.intim +fido7.dn.longlink-hub +fido7.dn.music +fido7.dn.netgames +fido7.dn.student +fido7.dn.talks +fido7.dn.tech-qa +fido7.dn.tech-qa-home +fido7.dn.test +fido7.dnz.humor +fido7.donbass +fido7.donbass.books +fido7.donbass.commerce +fido7.donbass.fileecho +fido7.donbass.flirt +fido7.donbass.games +fido7.donbass.internet +fido7.donbass.maniak +fido7.donbass.music +fido7.donbass.netgame +fido7.donbass.network +fido7.donbass.ottyag +fido7.donbass.talk +fido7.donbass.test +fido7.donbass.unix +fido7.donbass.virus +fido7.eagle-s.echo +fido7.eagle-s.technical.support +fido7.echobman.rus +fido7.edgecity +fido7.eleven.files +fido7.eleven.talks +fido7.elf.ca +fido7.enet.soft +fido7.erop +fido7.esib.fileecho +fido7.esib.games +fido7.esib.general +fido7.esib.humor +fido7.esib.programming +fido7.esib.sex +fido7.esib.test +fido7.esib.test.computer +fido7.esib.virtual.world +fido7.esib.vplanets +fido7.esperanto.rus +fido7.express.pvt +fido7.f.comp.pvt.sex +fido7.f109.pvt +fido7.f115.link +fido7.f118.pvt +fido7.f118.robots +fido7.f118.sport.autoinfo +fido7.f13.pvt +fido7.f130.link.pvt +fido7.f130.link.talk +fido7.f140.pvt +fido7.f140.robots +fido7.f144.announce +fido7.f144.echo +fido7.f144.links +fido7.f144.statistics +fido7.f146.pvt +fido7.f157.pvt +fido7.f157.robots +fido7.f157.test +fido7.f159.pvt +fido7.f199.robots +fido7.f201.pvt +fido7.f201.robots +fido7.f204.pvt +fido7.f204.robots +fido7.f21.news +fido7.f214.announce +fido7.f214.echo +fido7.f214.pvt +fido7.f231.pvt +fido7.f268.pvt +fido7.f268.robots +fido7.f269.local +fido7.f269.official +fido7.f269.robots +fido7.f269.xla +fido7.f306.pvt +fido7.f308.radio.roks +fido7.f350.local +fido7.f352.pvt +fido7.f366.pvt +fido7.f392.local +fido7.f400.file +fido7.f400.link +fido7.f400.link.bridge +fido7.f400.sysop +fido7.f400.test +fido7.f41.echo +fido7.f41.files +fido7.f41.vgaplanets +fido7.f413.pvt +fido7.f431.pvt +fido7.f431.techinfo +fido7.f441.robots +fido7.f441.stat +fido7.f443.links +fido7.f443.official +fido7.f487.talk +fido7.f5026-18.info +fido7.f50314.local +fido7.f68.downlink +fido7.f68.pulse +fido7.f68.pvt +fido7.f68.techinfo +fido7.f69.pvt +fido7.f6i.support +fido7.f75.pvt +fido7.far.support +fido7.fe-help +fido7.fe.business +fido7.fe.chainik +fido7.fe.fileecho +fido7.fe.game +fido7.fe.general +fido7.fe.os2 +fido7.fe.q-a +fido7.fformat.support +fido7.fido-122.pvt +fido7.fido-122.robots +fido7.fido.anywhere +fido7.fido.registration +fido7.fido7.sound.uue.report +fido7.fidonet.history +fido7.fidonews +fido7.filefix.f199 +fido7.filgen.support +fido7.filtered.humor +fido7.francophone.russe +fido7.friends.pvt.talks +fido7.galaxy.game +fido7.gcreate.support +fido7.ger.rus +fido7.german.rus +fido7.gpc.mailcommander +fido7.graphlog.support +fido7.greyrat-tech.f403 +fido7.greyrat.f403 +fido7.greyrat.link +fido7.group +fido7.group.blin +fido7.group.dm.sqcc +fido7.group.softmarket +fido7.group.technology +fido7.gs.echo +fido7.gs.files +fido7.gs.techinfo +fido7.gss.beta.testing +fido7.gss.general +fido7.gss.partoss +fido7.guitar.songs +fido7.hacking +fido7.hfro.local +fido7.hippy.talks +fido7.hottab.links +fido7.house.of.fire +fido7.houston.fileecho +fido7.houston.humor +fido7.houston.softhard +fido7.houston.talks +fido7.humor.filtered +fido7.humor.other +fido7.id.echo +fido7.id.news +fido7.ifmail +fido7.ifmail.plus +fido7.imail-help +fido7.inec.links +fido7.info.link +fido7.info.prog +fido7.interlink.programming +fido7.interlink.talk +fido7.irc.fidorus +fido7.iskra.fileecho +fido7.isra.rus +fido7.itasm.support +fido7.iv.echo +fido7.iv.general +fido7.iv.music +fido7.iv.planets +fido7.iv.pvt.exch +fido7.izh.drink +fido7.ja-moscow +fido7.kaktus.talk +fido7.kazan.general +fido7.kharkov +fido7.kharkov.anekdot +fido7.kharkov.announce +fido7.kharkov.anomal +fido7.kharkov.aon.club +fido7.kharkov.as.ukrainian.city +fido7.kharkov.ats +fido7.kharkov.authors +fido7.kharkov.balka +fido7.kharkov.balka.pvt +fido7.kharkov.beer +fido7.kharkov.blacklog +fido7.kharkov.blin +fido7.kharkov.blin.test +fido7.kharkov.bratki +fido7.kharkov.bridge +fido7.kharkov.business +fido7.kharkov.business.robots +fido7.kharkov.buying.proposals +fido7.kharkov.car +fido7.kharkov.chu +fido7.kharkov.commerce.prmr +fido7.kharkov.culture +fido7.kharkov.delphi +fido7.kharkov.doom +fido7.kharkov.education +fido7.kharkov.engl +fido7.kharkov.files +fido7.kharkov.foreign.languages +fido7.kharkov.fox +fido7.kharkov.friends +fido7.kharkov.ftp +fido7.kharkov.gamer +fido7.kharkov.halyava +fido7.kharkov.hardw.pvt +fido7.kharkov.images +fido7.kharkov.internet.html +fido7.kharkov.internet.provider +fido7.kharkov.job +fido7.kharkov.medic +fido7.kharkov.moda +fido7.kharkov.music +fido7.kharkov.naezd +fido7.kharkov.netgame +fido7.kharkov.os2 +fido7.kharkov.planets +fido7.kharkov.point +fido7.kharkov.pvt.balka +fido7.kharkov.pvt.delphi +fido7.kharkov.pvt.hardw +fido7.kharkov.pvt.magick +fido7.kharkov.pvt.news +fido7.kharkov.pvt.talks +fido7.kharkov.sale.chemical +fido7.kharkov.sale.computers +fido7.kharkov.sale.consume +fido7.kharkov.sale.energy +fido7.kharkov.sale.food +fido7.kharkov.sale.machinery +fido7.kharkov.sale.misc +fido7.kharkov.searching +fido7.kharkov.semenyaka +fido7.kharkov.sex +fido7.kharkov.software +fido7.kharkov.sport +fido7.kharkov.star +fido7.kharkov.star.info +fido7.kharkov.star.test +fido7.kharkov.student +fido7.kharkov.tormoz +fido7.kharkov.tpp +fido7.kharkov.univer +fido7.kharkov.zoo +fido7.ki.ev.tor.moz +fido7.kiev.allfix +fido7.kiev.allfix.announce +fido7.kiev.anecdot +fido7.kiev.anekdot +fido7.kiev.ats +fido7.kiev.baby +fido7.kiev.bike +fido7.kiev.blackwhite +fido7.kiev.boba.eb +fido7.kiev.cars +fido7.kiev.chainik +fido7.kiev.chainik.fido +fido7.kiev.chainik.hard +fido7.kiev.chainik.soft +fido7.kiev.club +fido7.kiev.exchange +fido7.kiev.fileecho +fido7.kiev.flame +fido7.kiev.friends +fido7.kiev.home +fido7.kiev.job +fido7.kiev.money +fido7.kiev.music +fido7.kiev.music.exchange +fido7.kiev.netgames +fido7.kiev.school +fido7.kiev.sport +fido7.kiev.students +fido7.kiev.talks +fido7.kiev.video +fido7.kiev.xchg.audvid +fido7.kiev.xchg.cd +fido7.kiev.xchg.comp +fido7.kiev.xchg.info +fido7.kiev.xchg.other +fido7.klm.logs +fido7.kmr.fileecho +fido7.kmr.game +fido7.kmr.general +fido7.kmr.softw +fido7.kmr.verses +fido7.kn.bank +fido7.kn.commonplace +fido7.kn.filefind +fido7.kn.forward +fido7.kn.hardware +fido7.kn.holiday +fido7.kn.naezd +fido7.kn.politic +fido7.kn.software +fido7.kn.stat +fido7.krs.business +fido7.krs.fileecho +fido7.krs.flame +fido7.krs.flirt +fido7.krs.general +fido7.krs.link +fido7.krs.test +fido7.kus-ka.talks +fido7.kwachi.prileteli +fido7.lars.allfix +fido7.layder.freedom +fido7.links.f322 +fido7.links.f49 +fido7.links.f54 +fido7.links.fws +fido7.linux +fido7.local.f153 +fido7.local.f290 +fido7.local.f441 +fido7.local.f50 +fido7.lugansk.commerce +fido7.lugansk.files +fido7.lugansk.games +fido7.lugansk.talks +fido7.lv.oracle +fido7.lv.pgpkeys +fido7.lviv.files +fido7.lviv.talks +fido7.madi.tu +fido7.magnetic.announce +fido7.magnetic.echo +fido7.magnetic.stat +fido7.mar.tm +fido7.mariupol.talkes +fido7.max.klochkov +fido7.maximus.planets +fido7.med.echo +fido7.memento.mori +fido7.mentant.news +fido7.mentant.robots +fido7.mfe.allfix.mail +fido7.mfe.info +fido7.mfe.soft +fido7.mg.business +fido7.mgsp.mgvk.army.mo +fido7.miem.talk +fido7.mik-local +fido7.mikdim.link +fido7.mikdim.robots +fido7.mikdim.test +fido7.minkevich.talk +fido7.mistress.pvt +fido7.mistress.rus +fido7.mixed.alcohol +fido7.mj.club +fido7.mkt-dn.orgtech +fido7.mkt-dn.other +fido7.mo.advice +fido7.mo.aeroport +fido7.mo.akademicheskay +fido7.mo.apartment +fido7.mo.babka +fido7.mo.baby.mgsu +fido7.mo.balashikha +fido7.mo.beer +fido7.mo.bike +fido7.mo.blusys-modtalk +fido7.mo.books.wanted +fido7.mo.brateevo +fido7.mo.cars +fido7.mo.cars.repair +fido7.mo.chertanovo +fido7.mo.connect +fido7.mo.d-d.ad-d +fido7.mo.dec +fido7.mo.echo +fido7.mo.economics +fido7.mo.feelee +fido7.mo.football +fido7.mo.football.realplay +fido7.mo.gang +fido7.mo.gau +fido7.mo.go +fido7.mo.good.people.talks +fido7.mo.halyava +fido7.mo.halyava.wanted +fido7.mo.hardw.repair.wanted +fido7.mo.hi-fi +fido7.mo.horoshevo-mnev +fido7.mo.house +fido7.mo.inter.tourism +fido7.mo.interesting.inf +fido7.mo.izmailovo +fido7.mo.job +fido7.mo.job.haltura +fido7.mo.job.service +fido7.mo.job.talk +fido7.mo.krasnogorsk.talk +fido7.mo.kuncevo +fido7.mo.lan.construction +fido7.mo.legal.soft +fido7.mo.limonozovo +fido7.mo.live +fido7.mo.lublino +fido7.mo.mai +fido7.mo.mami +fido7.mo.medic.student +fido7.mo.mei +fido7.mo.meliss +fido7.mo.mephi +fido7.mo.metallica +fido7.mo.mgapi +fido7.mo.mgatu +fido7.mo.mggu +fido7.mo.mgimo +fido7.mo.mgiu +fido7.mo.mgta +fido7.mo.miem.talk +fido7.mo.miigaik +fido7.mo.mirea +fido7.mo.misis +fido7.mo.mitino +fido7.mo.msu.phys +fido7.mo.msuc +fido7.mo.mtusi +fido7.mo.music.exchange +fido7.mo.nagatino +fido7.mo.nagornaya +fido7.mo.ochakovo +fido7.mo.onegod +fido7.mo.os2.prog +fido7.mo.party +fido7.mo.party.club +fido7.mo.pelmeni +fido7.mo.peredelkino +fido7.mo.perovo +fido7.mo.phrases +fido7.mo.phystech +fido7.mo.porno.video +fido7.mo.povremenka +fido7.mo.preobragenka +fido7.mo.presnya +fido7.mo.proezdnoy +fido7.mo.questions +fido7.mo.radiostat +fido7.mo.repair +fido7.mo.rollers +fido7.mo.rsuh +fido7.mo.sails +fido7.mo.sale +fido7.mo.ski +fido7.mo.softexchange +fido7.mo.softexchange.arvid +fido7.mo.softmarket +fido7.mo.solntsevo +fido7.mo.story +fido7.mo.sysoeff +fido7.mo.sysoeff.talks +fido7.mo.talk +fido7.mo.teply.stan +fido7.mo.timiryazevskay +fido7.mo.tourism +fido7.mo.transport +fido7.mo.trash +fido7.mo.tv +fido7.mo.university +fido7.mo.uz-univer +fido7.mo.videomovies +fido7.mo.vikhino +fido7.mo.wanted +fido7.mo.weather +fido7.mo.whirlpoo +fido7.mo.xpicsex.talk +fido7.mo.yasenevo +fido7.mo.zgrad +fido7.mo.zgrad.cars +fido7.mo.zgrad.findfirst +fido7.mo.zgrad.miee +fido7.mo.zgrad.talk +fido7.moldova.bektop +fido7.moldova.business +fido7.moldova.cmex +fido7.moldova.computers +fido7.moldova.consumer +fido7.moldova.dtp +fido7.moldova.echo +fido7.moldova.files +fido7.moldova.general.chat +fido7.moldova.new.files +fido7.moldova.point +fido7.moldova.soft +fido7.moldova.tech.f999 +fido7.moldova.testing +fido7.moldova.youth +fido7.monkey.island +fido7.moscow-oklahom +fido7.moscow.pvt +fido7.mp.lazy +fido7.mp.link +fido7.mp.robots +fido7.mstu.talks +fido7.mu.general +fido7.mu.red-burda +fido7.n5020.autotest +fido7.n5020.new.nodes +fido7.n5020.point +fido7.n5020.point.talk +fido7.n5026.info +fido7.n5026.robo +fido7.n5028.echo +fido7.n5039.delphi +fido7.n5039.echo +fido7.n5039.firewalls +fido7.n5039.interest +fido7.n5039.music +fido7.n5039.news.weather +fido7.n5039.news.www.announce +fido7.n5039.robot +fido7.n5049.os2 +fido7.n5050.files +fido7.n5050.game.doom +fido7.n5050.general +fido7.n5050.notify +fido7.n5050.os2 +fido7.n5050.vp +fido7.n5050.x +fido7.n50509.general +fido7.n5053.common +fido7.n5053.exchange +fido7.n5053.files +fido7.n5053.games +fido7.n5053.music +fido7.n5053.programming +fido7.n5060.talks +fido7.nd.talk +fido7.net467.talks +fido7.news.answers +fido7.nice.sources +fido7.nice.sources.d +fido7.night.talks +fido7.nikolaev.bazar +fido7.nikolaev.computers +fido7.nikolaev.fileecho +fido7.nikolaev.joy +fido7.nikolaev.talks +fido7.nino.bardak +fido7.nino.general +fido7.nino.music.talks +fido7.nkz.internet +fido7.no.carrier +fido7.nonprofit.technology +fido7.nordlink.talk +fido7.nordlink.wanted +fido7.nsk.cheers +fido7.nsk.general +fido7.nsk.job +fido7.nsk.music.exchange +fido7.nsk.planets +fido7.nsk.soft +fido7.nv.echo +fido7.obec.3boh +fido7.obec.filtered +fido7.obec.pactet +fido7.odessa.broadcast +fido7.odessa.exchange +fido7.odessa.fileecho +fido7.odessa.game +fido7.odessa.joker +fido7.odessa.music +fido7.odessa.netgame +fido7.odessa.talks +fido7.odessa.unix +fido7.old-nick-s.magazine +fido7.omni.nethack +fido7.omni.news +fido7.os2inet +fido7.paradox.link.echo +fido7.pavlograd.talks +fido7.pc.coding +fido7.peheccahc +fido7.perm.os2 +fido7.pk.madmed +fido7.pk.sqafix +fido7.podolsk.talk +fido7.policom.pro.info +fido7.postmasters +fido7.profi.cpm +fido7.province.talk +fido7.pskov.test +fido7.pvt-hck +fido7.pvt.bala-gun +fido7.pvt.bibirevo +fido7.pvt.black-arrow +fido7.pvt.cat.club +fido7.pvt.christmas +fido7.pvt.club +fido7.pvt.demex +fido7.pvt.dismember.support +fido7.pvt.end.of.the.world +fido7.pvt.esoteric.club +fido7.pvt.evil +fido7.pvt.exch.audiovideo +fido7.pvt.exch.black.log +fido7.pvt.exch.black.log.talk +fido7.pvt.exch.cars +fido7.pvt.exch.cd +fido7.pvt.exch.comm +fido7.pvt.exch.comp +fido7.pvt.exch.computer +fido7.pvt.exch.computer.keywords +fido7.pvt.exch.el.parts +fido7.pvt.exch.mobile +fido7.pvt.exch.other +fido7.pvt.exch.pc +fido7.pvt.exch.pricelist +fido7.pvt.exch.pricelist.comp +fido7.pvt.exch.service +fido7.pvt.exch.talk +fido7.pvt.exler +fido7.pvt.exo +fido7.pvt.f113 +fido7.pvt.f48 +fido7.pvt.flirt +fido7.pvt.golos.off +fido7.pvt.highhill +fido7.pvt.horror +fido7.pvt.jack +fido7.pvt.keds +fido7.pvt.law +fido7.pvt.lbcat.talk +fido7.pvt.lehin +fido7.pvt.lws +fido7.pvt.m.c.tech +fido7.pvt.medvedkovo +fido7.pvt.melodic.metal +fido7.pvt.mies +fido7.pvt.minkevich +fido7.pvt.ms.satan +fido7.pvt.mute.raven +fido7.pvt.newspaper +fido7.pvt.niichavo +fido7.pvt.nimnull +fido7.pvt.notax +fido7.pvt.owl.club +fido7.pvt.points-party +fido7.pvt.polis +fido7.pvt.prices +fido7.pvt.prool +fido7.pvt.rusar.talks +fido7.pvt.sale-exchang +fido7.pvt.sale-exchang.talk +fido7.pvt.skull.c0der +fido7.pvt.sound.pro +fido7.pvt.sound.turtlebeach +fido7.pvt.sova.club +fido7.pvt.sysop +fido7.pvt.tctube +fido7.pvt.ut5ude.packet +fido7.pvt.victory +fido7.pvt.virii +fido7.pvt.zelimhan +fido7.qaz.allfix +fido7.qaz.pvt +fido7.qview.support +fido7.r46.b.buy +fido7.r46.b.change +fido7.r46.b.sale +fido7.r46.b.talks +fido7.r46.b.tech +fido7.r46.exch +fido7.r46.game +fido7.r46.general +fido7.r46.warez.new +fido7.r50.tsc +fido7.radiomax +fido7.radiomax.hitparade +fido7.rar.support +fido7.rc.infoserv +fido7.rc.jobs +fido7.real.speccy +fido7.robots.f49 +fido7.rockabilly.50s +fido7.rockwell.modem +fido7.rou.bchinsky +fido7.ru.1csoft +fido7.ru.3ds-lw +fido7.ru.4dos +fido7.ru.about.life +fido7.ru.acad +fido7.ru.accounting +fido7.ru.admin +fido7.ru.adv-ftnsoft.gates +fido7.ru.adv-ftnsoft.info +fido7.ru.advertisement +fido7.ru.agni +fido7.ru.agny +fido7.ru.ai +fido7.ru.algorithms +fido7.ru.allfix-help +fido7.ru.amadeus +fido7.ru.amiga +fido7.ru.anecdot +fido7.ru.anekdot +fido7.ru.anekdot.filtered +fido7.ru.anekdot.the.best +fido7.ru.anomalia +fido7.ru.anti-ment +fido7.ru.anti.ats +fido7.ru.anti.beer +fido7.ru.antisex +fido7.ru.antiviza +fido7.ru.aon +fido7.ru.aon.rom +fido7.ru.aquanavt +fido7.ru.aquaria +fido7.ru.argus +fido7.ru.aria +fido7.ru.army +fido7.ru.army.phrases +fido7.ru.art +fido7.ru.as400 +fido7.ru.asd-track.support +fido7.ru.autopilot +fido7.ru.autostop +fido7.ru.aviation +fido7.ru.awk +fido7.ru.baby +fido7.ru.baby.mail +fido7.ru.baby.medic +fido7.ru.babylon5.game +fido7.ru.bachelors +fido7.ru.bank-support +fido7.ru.bank-support.post +fido7.ru.bank-technolog +fido7.ru.bardak +fido7.ru.battletech +fido7.ru.baynetworks +fido7.ru.bbsnews +fido7.ru.bbsnews.talk +fido7.ru.bbsoftware.other +fido7.ru.beatle.club +fido7.ru.beer +fido7.ru.bible +fido7.ru.binkd +fido7.ru.biology +fido7.ru.biotech +fido7.ru.blues +fido7.ru.bodun +fido7.ru.bodybuilding +fido7.ru.bomond.rhyme +fido7.ru.bookmaker +fido7.ru.books.computing +fido7.ru.books.talk +fido7.ru.borland.ao +fido7.ru.brief +fido7.ru.bug +fido7.ru.c +fido7.ru.c-cpp.market +fido7.ru.cars.chainik +fido7.ru.cars.custom +fido7.ru.cars.foreign +fido7.ru.cars.from.usa +fido7.ru.cbuilder +fido7.ru.ccmail +fido7.ru.cd.record +fido7.ru.cdrom +fido7.ru.cgi.perl +fido7.ru.childs +fido7.ru.christianity +fido7.ru.chudiks +fido7.ru.cisco +fido7.ru.clarion +fido7.ru.clipper +fido7.ru.coffee.club +fido7.ru.collectors +fido7.ru.compress +fido7.ru.congratulation +fido7.ru.coolture +fido7.ru.corbina +fido7.ru.crazy-rollers +fido7.ru.crazy.support +fido7.ru.crosstools +fido7.ru.crypt +fido7.ru.culture +fido7.ru.customs +fido7.ru.cyborg +fido7.ru.dacha +fido7.ru.dance +fido7.ru.danger.sport +fido7.ru.dbvista +fido7.ru.death +fido7.ru.delphi +fido7.ru.delphi.info +fido7.ru.delphi.uue +fido7.ru.depression +fido7.ru.dharma +fido7.ru.dj +fido7.ru.djatlov +fido7.ru.dos.basic +fido7.ru.dpg +fido7.ru.dream +fido7.ru.drugs +fido7.ru.dsp +fido7.ru.dtp +fido7.ru.dtp.fonts +fido7.ru.duel +fido7.ru.duel.rhyme +fido7.ru.dvd +fido7.ru.echo-rules +fido7.ru.echoprocessors +fido7.ru.echoprocessors.nice.tosser +fido7.ru.educator +fido7.ru.elections +fido7.ru.embedded +fido7.ru.emulators +fido7.ru.english +fido7.ru.english.translator +fido7.ru.equestrian +fido7.ru.espanol +fido7.ru.excel +fido7.ru.expo +fido7.ru.f3dfx +fido7.ru.family +fido7.ru.fantasy +fido7.ru.fastuue +fido7.ru.fax +fido7.ru.fdecho +fido7.ru.feelings +fido7.ru.fhmail +fido7.ru.fido-pickup +fido7.ru.fido.nextgen +fido7.ru.fidoschool +fido7.ru.file.appsnd +fido7.ru.file.xsnd.midi +fido7.ru.file.xsnd.mod +fido7.ru.file.xsnd.patch +fido7.ru.file.xsnd.s3m +fido7.ru.file.xsnd.xm +fido7.ru.fileechoproces +fido7.ru.film +fido7.ru.finsoft +fido7.ru.fips +fido7.ru.fishing +fido7.ru.fishing.club +fido7.ru.fleetstreet +fido7.ru.fm.radio +fido7.ru.foxpro +fido7.ru.france +fido7.ru.frip +fido7.ru.game +fido7.ru.game.action.internet +fido7.ru.game.bridge +fido7.ru.game.cdrom +fido7.ru.game.cheat +fido7.ru.game.deathmatch +fido7.ru.game.design +fido7.ru.game.diablo +fido7.ru.game.doom +fido7.ru.game.doom.uue +fido7.ru.game.flight +fido7.ru.game.flight.dynamix +fido7.ru.game.flight.peaceful +fido7.ru.game.modem +fido7.ru.game.mud +fido7.ru.game.pbm +fido7.ru.game.quest +fido7.ru.game.rpg +fido7.ru.game.strategy +fido7.ru.gamenet +fido7.ru.gang +fido7.ru.gay-club +fido7.ru.gay.n +fido7.ru.gay.talk +fido7.ru.gemtoss.beta +fido7.ru.geology +fido7.ru.geosystem +fido7.ru.glum +fido7.ru.gnu +fido7.ru.golded +fido7.ru.golovolomka +fido7.ru.good.drink +fido7.ru.guitar +fido7.ru.guitar.tab +fido7.ru.hacker +fido7.ru.hacker.dummy +fido7.ru.hacker.uue +fido7.ru.hardw +fido7.ru.hardw.check +fido7.ru.hhgttg +fido7.ru.hi-fi.chainik +fido7.ru.hip-hop +fido7.ru.home +fido7.ru.home-cinema +fido7.ru.home.lan +fido7.ru.hrg.scene +fido7.ru.hsmodems +fido7.ru.hunter +fido7.ru.ida +fido7.ru.illusion +fido7.ru.informatica +fido7.ru.insurance +fido7.ru.interlink.essay +fido7.ru.internet +fido7.ru.internet.chainik +fido7.ru.internet.filtered +fido7.ru.internet.irc +fido7.ru.internet.moscow +fido7.ru.internet.provider +fido7.ru.internet.provider.price +fido7.ru.internet.soft +fido7.ru.internet.technology +fido7.ru.internet.www +fido7.ru.internet.www.news +fido7.ru.intranet +fido7.ru.invalife +fido7.ru.ip.exchange +fido7.ru.ipex +fido7.ru.itrax +fido7.ru.java +fido7.ru.java.chainik +fido7.ru.jump +fido7.ru.kin-dza-dza +fido7.ru.lan.nw +fido7.ru.lesbian +fido7.ru.lifespring +fido7.ru.lingvo +fido7.ru.link.alt +fido7.ru.linux +fido7.ru.lisp +fido7.ru.lolita +fido7.ru.love +fido7.ru.mac +fido7.ru.magic +fido7.ru.magic.the.gathering +fido7.ru.mailtools.uue +fido7.ru.martial-arts +fido7.ru.math +fido7.ru.maxes +fido7.ru.medic.profy +fido7.ru.metaphysics +fido7.ru.migration +fido7.ru.miit +fido7.ru.military +fido7.ru.military.navi +fido7.ru.military.navy +fido7.ru.militia +fido7.ru.mis +fido7.ru.mitky +fido7.ru.mixed.alcohol +fido7.ru.mnlink +fido7.ru.mod.music.uue +fido7.ru.modem +fido7.ru.moderator +fido7.ru.moderator.talk +fido7.ru.mpeg +fido7.ru.msaccess +fido7.ru.msx +fido7.ru.multiedit +fido7.ru.multimedia +fido7.ru.multios.config +fido7.ru.mumps +fido7.ru.music.agata.kristi +fido7.ru.music.scorpions +fido7.ru.music.uue +fido7.ru.musician +fido7.ru.mylene.club +fido7.ru.mythology +fido7.ru.naturism +fido7.ru.nautilus +fido7.ru.net.hard +fido7.ru.net.soft +fido7.ru.net.tech +fido7.ru.net.union +fido7.ru.nethack +fido7.ru.netmgr +fido7.ru.networks +fido7.ru.new.thought +fido7.ru.news +fido7.ru.news.answers +fido7.ru.news.club +fido7.ru.news.talk +fido7.ru.nhlhockey +fido7.ru.ninja +fido7.ru.nlp +fido7.ru.notebooks +fido7.ru.notes +fido7.ru.nuclear +fido7.ru.ocx +fido7.ru.opengl +fido7.ru.oracle.ug +fido7.ru.os.cmp +fido7.ru.os.interface +fido7.ru.othernet.talk +fido7.ru.page.making +fido7.ru.pagers +fido7.ru.pagers.operator +fido7.ru.paging +fido7.ru.paint.ball +fido7.ru.paintball +fido7.ru.palmtop +fido7.ru.paragliding +fido7.ru.parnas +fido7.ru.pascal +fido7.ru.pascal.sources +fido7.ru.pccts +fido7.ru.perl +fido7.ru.phocus.pocus +fido7.ru.photo +fido7.ru.phreaks +fido7.ru.pickup +fido7.ru.pickup.guru +fido7.ru.pictures.psevdo.graf +fido7.ru.pink.floyd +fido7.ru.pl-i +fido7.ru.plastic.cards +fido7.ru.playstation +fido7.ru.poet +fido7.ru.point.othernet +fido7.ru.poison +fido7.ru.policy +fido7.ru.portal +fido7.ru.poruchik +fido7.ru.powerbuilder +fido7.ru.pravoslavie.talk +fido7.ru.pretty.girls +fido7.ru.prikol +fido7.ru.problem +fido7.ru.program.games +fido7.ru.psychology +fido7.ru.punk.rock +fido7.ru.pupil +fido7.ru.qnx +fido7.ru.radio.modern +fido7.ru.railways +fido7.ru.rakurs +fido7.ru.rdbms.oracle +fido7.ru.road +fido7.ru.rockwell +fido7.ru.rpg +fido7.ru.rpg.bazar +fido7.ru.rpg.sagas +fido7.ru.rpg.strugatskie +fido7.ru.rpg.text +fido7.ru.rpgt.ad-d +fido7.ru.rpgt.cyberpunk +fido7.ru.rpgt.gaming +fido7.ru.rpgt.other +fido7.ru.rpgt.play +fido7.ru.rsbank +fido7.ru.russian +fido7.ru.rybinsky +fido7.ru.safeguard +fido7.ru.sale-exchange.comp +fido7.ru.sat +fido7.ru.sat.chainik +fido7.ru.sat.tv.guide +fido7.ru.satellite.tv.crypt +fido7.ru.satire +fido7.ru.scada +fido7.ru.scandinavian +fido7.ru.school +fido7.ru.sector-gaza.etc +fido7.ru.security +fido7.ru.selfmake +fido7.ru.sen-prod +fido7.ru.sex +fido7.ru.sex.adv +fido7.ru.sex.adv.talk +fido7.ru.sex.exchange +fido7.ru.sex.gay +fido7.ru.sex.pictures.uue +fido7.ru.sex.text +fido7.ru.sf.bibliography +fido7.ru.sf.news +fido7.ru.sfmail +fido7.ru.shares +fido7.ru.shell +fido7.ru.shell.dn +fido7.ru.ships +fido7.ru.skydiving +fido7.ru.smodem +fido7.ru.soft.protect +fido7.ru.softad +fido7.ru.space +fido7.ru.space.news +fido7.ru.spelling +fido7.ru.sport.basketball +fido7.ru.sport.football +fido7.ru.sport.games +fido7.ru.sport.hockey +fido7.ru.sport.other +fido7.ru.squish +fido7.ru.star.wars +fido7.ru.star.wars.games +fido7.ru.stars +fido7.ru.strack +fido7.ru.strack.gus +fido7.ru.student.talks +fido7.ru.style +fido7.ru.subway +fido7.ru.suicide +fido7.ru.syntone.club +fido7.ru.t-r +fido7.ru.tarantino +fido7.ru.team.kefir +fido7.ru.telecom +fido7.ru.terekhov +fido7.ru.terminate +fido7.ru.tetris +fido7.ru.tex +fido7.ru.thelema +fido7.ru.theology.general +fido7.ru.timed +fido7.ru.tobacco +fido7.ru.toon +fido7.ru.topspeed +fido7.ru.tourclub.talks +fido7.ru.tourism +fido7.ru.trade-equipmen +fido7.ru.tradesoft +fido7.ru.triz +fido7.ru.ufo +fido7.ru.unix +fido7.ru.unix.aix +fido7.ru.unix.bsd +fido7.ru.unix.linux +fido7.ru.unix.sco +fido7.ru.up-n-down +fido7.ru.usa +fido7.ru.usr +fido7.ru.usr.chainik +fido7.ru.uucp +fido7.ru.uue.sysop.pic +fido7.ru.uue.sysop.wav +fido7.ru.uue.talk +fido7.ru.uuencode +fido7.ru.vac +fido7.ru.vc +fido7.ru.vegetarian +fido7.ru.venture +fido7.ru.video +fido7.ru.video.exch +fido7.ru.video.films +fido7.ru.video.laserdisc +fido7.ru.video.x-files +fido7.ru.vist +fido7.ru.visual.basic +fido7.ru.visual.cpp +fido7.ru.visual.foxpro +fido7.ru.visualage.cpp +fido7.ru.vp +fido7.ru.vrml +fido7.ru.weapon +fido7.ru.weapon.uue +fido7.ru.web.construction +fido7.ru.website +fido7.ru.who-are-they +fido7.ru.windows.nt.beta +fido7.ru.windows.nt.chainik +fido7.ru.windows.nt.faq +fido7.ru.windows.nt.hatch +fido7.ru.windows.nt.news +fido7.ru.windows.nt.ug +fido7.ru.windows.nt.wanted +fido7.ru.wine +fido7.ru.www.favorites +fido7.ru.x25.fr +fido7.ru.xenia +fido7.ru.xpicmusic.hatch +fido7.ru.xyz +fido7.ru.yablonsky +fido7.ru.yachting +fido7.ru.yaff +fido7.ru.znatok +fido7.ruoz.chat +fido7.rus.flora +fido7.rus.pcad +fido7.rus.pets +fido7.russian.freedom.anekdot +fido7.russian.sex +fido7.russian.z1 +fido7.sebastopol.talk +fido7.sib.fileecho +fido7.skazki.forever +fido7.sl.announce +fido7.sl.echo +fido7.sl.statistics +fido7.sl.talk +fido7.smaster.announce +fido7.smaster.talk +fido7.smr.general +fido7.spb.anti.ats +fido7.spb.book-keeping +fido7.spb.books +fido7.spb.business +fido7.spb.cars +fido7.spb.cdrom +fido7.spb.copoka +fido7.spb.drozdov +fido7.spb.echoes +fido7.spb.ecology +fido7.spb.economy +fido7.spb.efl +fido7.spb.electr.component +fido7.spb.exchange +fido7.spb.f09 +fido7.spb.fec +fido7.spb.files +fido7.spb.files.allfix +fido7.spb.files.new +fido7.spb.flats +fido7.spb.formula1 +fido7.spb.game +fido7.spb.games +fido7.spb.general +fido7.spb.hardw +fido7.spb.hardw.repair +fido7.spb.hardw.rom +fido7.spb.humor +fido7.spb.internet +fido7.spb.internet.providers +fido7.spb.job +fido7.spb.job.talk +fido7.spb.kids +fido7.spb.ksp +fido7.spb.ksp.tex +fido7.spb.leei +fido7.spb.music +fido7.spb.netcon +fido7.spb.os2.q-a +fido7.spb.palmpilot +fido7.spb.planets +fido7.spb.point +fido7.spb.rules +fido7.spb.science +fido7.spb.softw +fido7.spb.speccy +fido7.spb.sport.fans +fido7.spb.stat +fido7.spb.student +fido7.spb.student.gaap +fido7.spb.sysprg +fido7.spb.tourism +fido7.spb.travel +fido7.star.dreck +fido7.starper.unlimited +fido7.su.absolute.text +fido7.su.absolute.text.cs +fido7.su.absolute.text.em +fido7.su.absolute.text.sq +fido7.su.alko +fido7.su.alt.tolkien +fido7.su.announce.mp3 +fido7.su.anybody +fido7.su.astroclub +fido7.su.astronomy +fido7.su.autotest +fido7.su.azart +fido7.su.books +fido7.su.business +fido7.su.c-cpp +fido7.su.card.game +fido7.su.cars +fido7.su.cars.bmw +fido7.su.cbcs +fido7.su.chainik +fido7.su.chainik.faq +fido7.su.chainik.general +fido7.su.chess +fido7.su.chess.play +fido7.su.chicago +fido7.su.civil-law +fido7.su.cm +fido7.su.cool.stars +fido7.su.crisis.situation +fido7.su.crisis.situation.talks +fido7.su.culture.underground +fido7.su.dacha +fido7.su.dbms +fido7.su.dbms.borland +fido7.su.dbms.case +fido7.su.dbms.cronos +fido7.su.dbms.db2 +fido7.su.dbms.foxpro +fido7.su.dbms.hytech +fido7.su.dbms.interbase +fido7.su.dbms.sql +fido7.su.dragonlance +fido7.su.dsa +fido7.su.f3ds.max +fido7.su.fidotech +fido7.su.fileecho +fido7.su.flame +fido7.su.flirt +fido7.su.football.funs.news +fido7.su.formula1 +fido7.su.formula1.around +fido7.su.forth +fido7.su.game +fido7.su.game.arcade +fido7.su.game.auto +fido7.su.game.chainik +fido7.su.game.flight +fido7.su.game.hardw +fido7.su.game.logic +fido7.su.game.modem +fido7.su.game.news +fido7.su.game.news.announce +fido7.su.game.news.uue +fido7.su.game.sol +fido7.su.game.strategy +fido7.su.game.trade +fido7.su.game.uue +fido7.su.game.video +fido7.su.game.wanted +fido7.su.general +fido7.su.graphics +fido7.su.hamradio +fido7.su.hardw +fido7.su.hardw.audio +fido7.su.hardw.cdrom +fido7.su.hardw.chainik +fido7.su.hardw.game.devices +fido7.su.hardw.hsmodem +fido7.su.hardw.microwave +fido7.su.hardw.notebook +fido7.su.hardw.other +fido7.su.hardw.pbx +fido7.su.hardw.pc.cpu +fido7.su.hardw.pc.media +fido7.su.hardw.pc.microwave +fido7.su.hardw.pc.motherboard +fido7.su.hardw.pc.net +fido7.su.hardw.pc.peripheral +fido7.su.hardw.pc.sound +fido7.su.hardw.pc.video +fido7.su.hardw.pc.video.card +fido7.su.hardw.pc.video.monitor +fido7.su.hardw.phones +fido7.su.hardw.schemes +fido7.su.hardw.support.arvid +fido7.su.hardw.tv.video +fido7.su.hardw.tv.video.profi +fido7.su.hardw.uuencode +fido7.su.hatch +fido7.su.history +fido7.su.hitech +fido7.su.human.rights +fido7.su.humor +fido7.su.humor.answer +fido7.su.humor.poetry +fido7.su.inpro +fido7.su.ip.point +fido7.su.ip.sysop.dns +fido7.su.isr-jews +fido7.su.itrack +fido7.su.jews +fido7.su.jrrt.club +fido7.su.kbh +fido7.su.kitchen +fido7.su.komandor +fido7.su.ksp +fido7.su.ksp.texts +fido7.su.ksp.unpublished +fido7.su.left +fido7.su.lottery +fido7.su.magic +fido7.su.maiden +fido7.su.mailer +fido7.su.mailtools.uue +fido7.su.mainframe +fido7.su.manowar +fido7.su.medic +fido7.su.microsoft.talk +fido7.su.mn.culture-life +fido7.su.mn.society +fido7.su.modem +fido7.su.mtask +fido7.su.music +fido7.su.music.creation +fido7.su.music.gothic +fido7.su.music.heavy-death +fido7.su.music.jazz +fido7.su.music.lyrics +fido7.su.music.metal +fido7.su.music.pictures +fido7.su.music.prodigy +fido7.su.music.russian +fido7.su.music.techno +fido7.su.naezd +fido7.su.net +fido7.su.net.prog +fido7.su.net.wanted +fido7.su.niennah +fido7.su.oop +fido7.su.os2 +fido7.su.os2.apps +fido7.su.os2.beta +fido7.su.os2.comm +fido7.su.os2.drv +fido7.su.os2.faq +fido7.su.os2.faq.d +fido7.su.os2.marginal +fido7.su.os2.prog +fido7.su.os2.src +fido7.su.os2.team +fido7.su.os2.wanted +fido7.su.owl +fido7.su.pascal.modula.ada +fido7.su.pascal.modula.ada.uue +fido7.su.pern +fido7.su.perumov +fido7.su.philosophy +fido7.su.pma.uue +fido7.su.pol +fido7.su.quake.tf +fido7.su.ra +fido7.su.referat +fido7.su.render +fido7.su.rus.travels +fido7.su.satanism +fido7.su.science +fido7.su.science.chemistry +fido7.su.scientologie +fido7.su.sf-f.fandom +fido7.su.sff.fandom +fido7.su.smith +fido7.su.softw +fido7.su.soul +fido7.su.spy +fido7.su.student +fido7.su.suvorov +fido7.su.sysadmin.recovery +fido7.su.toast +fido7.su.tolkien +fido7.su.tolkien.texts +fido7.su.tolkien.uuencode +fido7.su.tormoz +fido7.su.tost +fido7.su.travel +fido7.su.underground +fido7.su.virus +fido7.su.w-d +fido7.su.white.gooses +fido7.su.win32.prog +fido7.su.win95 +fido7.su.win95.chainik +fido7.su.win95.comm +fido7.su.win95.exchange +fido7.su.win95.faq +fido7.su.win95.games +fido7.su.win95.hardw +fido7.su.win95.netw +fido7.su.win95.news +fido7.su.win95.prog +fido7.su.win95.rus-team +fido7.su.win95.softw +fido7.su.windows +fido7.su.windows.nt +fido7.su.windows.nt.prog +fido7.su.windows.prog +fido7.su.windows.wanted +fido7.sumy.files +fido7.super.tormoz +fido7.survival.guide +fido7.symbolic.proc +fido7.t-mail.chainik +fido7.t-mail.fiction +fido7.t-mail.nt.rus +fido7.t-mail.ru +fido7.t-mail.support +fido7.t-mail.util +fido7.t-series.ru +fido7.talks.asm +fido7.teach.pro +fido7.telebook.support +fido7.testing +fido7.tetragraph.public +fido7.tiger-s.claw.echo +fido7.tiger-s.claw.robots +fido7.tmn.games +fido7.tmn.general +fido7.tower.pvt +fido7.trans.info +fido7.trueblue.news +fido7.tver.talk +fido7.ua.abiturient +fido7.ua.agny +fido7.ua.banktech +fido7.ua.business +fido7.ua.contract.bridge +fido7.ua.fidotech +fido7.ua.graphics +fido7.ua.os2 +fido7.ua.os2.crack +fido7.ua.os2.prog +fido7.ua.os2.soft.wanted +fido7.ua.pol +fido7.ua.prlist +fido7.ua.unix +fido7.ublist +fido7.ublist.updates +fido7.uhc.talks +fido7.ural.business +fido7.ural.files +fido7.ural.files.report +fido7.ural.music +fido7.ural.os2 +fido7.ural.q-a +fido7.us-russ-talk +fido7.uu2 +fido7.uuug.general +fido7.uz.business +fido7.uz.fileecho +fido7.uz.games +fido7.uz.general +fido7.uz.internet +fido7.uz.mitya +fido7.uz.philosophy +fido7.uz.relax +fido7.uz.teic +fido7.uz.video +fido7.uz.virus +fido7.vc.news +fido7.vladimir.business +fido7.vladimir.flirt +fido7.vladimir.general +fido7.vladimir.techhelp +fido7.vladimir.video +fido7.watcom.c +fido7.watcom.c.pf +fido7.watcom.c32.pf +fido7.watcom.dos4gwpro +fido7.watcom.general +fido7.wb.q-a +fido7.west.region +fido7.whisky.bar +fido7.white.bear.club +fido7.windows.prog +fido7.wined.support +fido7.wish.you.were.here +fido7.worldcup.f94 +fido7.ws.chat +fido7.ws.extract +fido7.ws.humor +fido7.ws.technics +fido7.www.station.ru +fido7.xap6kob +fido7.xpress.pvt +fido7.xsu.pma.faq +fido7.z7.news +fido7.z7.test +fido7.z7.z2.zone7 +fido7.zc.allfix +fido7.zc.commerce +fido7.zc.files +fido7.zc.fun +fido7.zc.gamez +fido7.zc.gamez.planets +fido7.zc.music +fido7.zc.talks +fido7.zone7 +fido7.zx.spectrum +fido7.zxc.club +fidonet.filk +fidonet.midi-net +finet.asiointi.kunnat +finet.asiointi.pankit +finet.atk.kielet +finet.atk.kielet.c +finet.atk.kielet.elisp +finet.atk.suometus +finet.atk.yllapito +finet.evl.keskustelu +finet.fan.airisto.lenita +finet.fan.linda +finet.fan.warlord +finet.freenet.eok +finet.freenet.harrastus.hevoset +finet.freenet.harrastus.judo +finet.freenet.harrastus.koirat +finet.freenet.harrastus.luontoseuranta +finet.freenet.harrastus.partio +finet.freenet.keskustelu +finet.freenet.kidlink.kidcafe +finet.freenet.kidlink.kidforum +finet.freenet.kidlink.kidleadr +finet.freenet.kidlink.kidlink +finet.freenet.kidlink.kidplan +finet.freenet.kidlink.kidproj +finet.freenet.kidlink.response +finet.freenet.kidlink.suomi +finet.freenet.koti.perhe +finet.freenet.lastensuojelu.asiantuntijat +finet.freenet.lastensuojelu.keskustelu +finet.freenet.lastensuojelu.nimeton +finet.freenet.lists.freenet-otol +finet.freenet.lists.new-patents +finet.freenet.mediateekki.keskustelu +finet.freenet.mediateekki.kirjasto +finet.freenet.mediateekki.kirjat.uutuudet +finet.freenet.mediateekki.lasten-osasto.kirja-uutuudet +finet.freenet.mediateekki.lasten-osasto.kirjat +finet.freenet.mediateekki.lasten-osasto.omat-jutut +finet.freenet.mediateekki.lasten-osasto.pahkina +finet.freenet.mediateekki.lasten-osasto.sadut +finet.freenet.mediateekki.leffat +finet.freenet.mediateekki.lukusali +finet.freenet.mediateekki.viestinta +finet.freenet.mediateekki.yle.radio.mafia +finet.freenet.mediateekki.yle.radio.opetusohjelmat +finet.freenet.mediateekki.yle.televisio.ekoisti +finet.freenet.mediateekki.yle.televisio.nyt +finet.freenet.mediateekki.yle.televisio.opetusohjelmat.aikuisopetus +finet.freenet.mediateekki.yle.televisio.opetusohjelmat.kieliohjelmat +finet.freenet.mediateekki.yle.televisio.opetusohjelmat.koulu-tv +finet.freenet.mediateekki.yle.televisio.talking-heads +finet.freenet.monitoimitalo.korvkiosk +finet.freenet.neuro96 +finet.freenet.oppiaineet.aidinkieli.keskustelu +finet.freenet.oppiaineet.kadentaidot.keskustelu +finet.freenet.oppiaineet.katsomusaineet.keskustelu +finet.freenet.oppiaineet.keskustelu +finet.freenet.oppiaineet.matemaattiset.keskustelu +finet.freenet.oppiaineet.muut +finet.freenet.oppiaineet.psykologia.keskustelu +finet.freenet.oppiaineet.taideaineet.keskustelu +finet.freenet.oppiaineet.vieraat-kielet.keskustelu +finet.freenet.oppimiskeskus.akvaariokoulut.arviointi +finet.freenet.oppimiskeskus.akvaariokoulut.keskustelu +finet.freenet.oppimiskeskus.akvaariokoulut.oppilaat +finet.freenet.oppimiskeskus.ammatilliset.kauppaopetus +finet.freenet.oppimiskeskus.ammatilliset.kehittaminen +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.aikuis.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.aikuis.tietoa +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.didaktiset +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.eettiset +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.jatko.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.jatko.tietoa +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.oppisopimus.keskustelu +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.oppisopimus.tietoa +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.perus.akk +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.perus.opisto +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.perus.yliopisto +finet.freenet.oppimiskeskus.ammatilliset.sos+terv.tieto +finet.freenet.oppimiskeskus.aurora-press +finet.freenet.oppimiskeskus.erityisopetus.kehitys +finet.freenet.oppimiskeskus.euroschool +finet.freenet.oppimiskeskus.kontaktit +finet.freenet.oppimiskeskus.ksv-kasvatus.keskustelu +finet.freenet.oppimiskeskus.ksv-kasvatus.sage +finet.freenet.oppimiskeskus.ksv-kasvatus.sarajevo +finet.freenet.oppimiskeskus.projektit.cpaw +finet.freenet.oppimiskeskus.projektit.etk +finet.freenet.oppimiskeskus.projektit.haitek +finet.freenet.oppimiskeskus.projektit.i-earn +finet.freenet.oppimiskeskus.projektit.ideat +finet.freenet.oppimiskeskus.projektit.imtec +finet.freenet.oppimiskeskus.projektit.imtec.koulu2020 +finet.freenet.oppimiskeskus.projektit.itameri +finet.freenet.oppimiskeskus.projektit.juhlapaivat +finet.freenet.oppimiskeskus.projektit.luova-koulu +finet.freenet.oppimiskeskus.projektit.metsapaiva +finet.freenet.oppimiskeskus.projektit.nycenet +finet.freenet.oppimiskeskus.projektit.telemetso +finet.freenet.oppimiskeskus.projektit.teleolympiadi +finet.freenet.oppimiskeskus.projektit.tiedotteet +finet.freenet.oppimiskeskus.projektit.unesco +finet.freenet.oppimiskeskus.projektit.yhteistyo +finet.freenet.oppimiskeskus.puhe.lapset +finet.freenet.oppimiskeskus.puhe.luokanopettaja +finet.freenet.oppimiskeskus.puhe.nuoret +finet.freenet.oppimiskeskus.puhe.opettajat +finet.freenet.oppimiskeskus.puhe.vanhemmat +finet.freenet.oppimiskeskus.sakki +finet.freenet.partnerit.art-print +finet.freenet.partnerit.kesayliopistot +finet.freenet.partnerit.keskustelu +finet.freenet.partnerit.lahetysseura +finet.freenet.partnerit.sak +finet.freenet.partnerit.sanoma-oy +finet.freenet.partnerit.yle +finet.freenet.raatihuone.hyde_park +finet.freenet.terveyskeskus.keskustelu +finet.freenet.test +finet.freenet.tiedottaa +finet.freenet.tyoryhmat.kaytannot +finet.freenet.tyoryhmat.kehitys +finet.freenet.tyoryhmat.koulutus +finet.freenet.tyoryhmat.tiedotus +finet.freenet.tyoryhmat.varainhankinta +finet.freenet.tyoryhmat.yhteydet +finet.freenet.tyoryhmat.yllapito +finet.freenet.wyn.pressiklubi +finet.freenet.wyn.uutiset +finet.freenet.ymparisto.globe +finet.freenet.ymparisto.metsat +finet.freenet.ymparisto.tekoja +finet.general +finet.harrastus.amnesty +finet.harrastus.babylon5 +finet.harrastus.hamppu +finet.harrastus.kilju +finet.harrastus.kissat +finet.harrastus.olut +finet.harrastus.rautatiet +finet.harrastus.siideri +finet.harrastus.startrek +finet.harrastus.startrek.spocks-hut +finet.harrastus.tolkien +finet.helsinki.hankinnat +finet.helsinki.hoas +finet.helsinki.liikenne +finet.helsinki.puhe +finet.helsinki.ravintolat +finet.helsinki.tapahtumat +finet.ilmot.henkkoht +finet.ilmot.sekal +finet.keskustelu.seksuaalisuus +finet.keskustelu.yleinen +finet.kielet +finet.kielet.englanti +finet.kielet.japani +finet.kielet.suomi +finet.kielet.venaja +finet.kielet.viro +finet.kirjastot.kirjakaapeli +finet.korkeakoulut.atk-politiikka +finet.koti.asuminen +finet.koti.tee-se-itse +finet.koulutus.opintotuki +finet.koulutus.yliopistot +finet.kulttuurit.suomi +finet.kulttuurit.venaja +finet.kulttuurit.viro +finet.kysy.mykset +finet.kysy.osoitteista +finet.kysy.unixista +finet.markkinat.kaupalliset +finet.markkinat.menovesi +finet.markkinat.pc +finet.markkinat.tietokoneet +finet.markkinat.tietopalvelut +finet.olemisen.tarkoitus +finet.opiskelu.matematiikka +finet.paskanjauhanta +finet.politiikka.vaalit +finet.politiikka.yk +finet.puhe +finet.puhe.laihdutus +finet.ryhmat +finet.salaliitot +finet.seurat.king.olavi +finet.sex +finet.svenska.info +finet.svenska.prat +finet.taidot.kirjoittaminen +finet.testi +finet.tiedotteet.lehdisto +finet.tyo +finet.tyo.ammattijarj +finet.unet +finet.uutiset.baltia +finet.uutiset.suomi +finet.valtiot.usa +finet.viestinta.bbs +finet.viestinta.freenet +finet.viestinta.internet +finet.viestinta.televerkot +finet.viestinta.usenet +finet.yhteiskunta.anarkismi +finet.yhteiskunta.vaikuttaminen +finet.yhteiskunta.yksilonvapaus +fiod7.du.net +fiod7.other.news.answers +fiod7.other.russian.sex +fiod7.ru.sex +fiod7.su.cars +fiod7.su.chainik +fiod7.su.game +fiod7.su.humor +fiod7.su.music +fiod7.su.os2 +fiod7.su.windows +fj.1st-readme +fj.archives.answers +fj.archives.d +fj.archives.documents +fj.archives.misc +fj.archives.programs.discussion +fj.archives.programs.mac +fj.archives.programs.misc +fj.archives.programs.ms-windows +fj.archives.programs.msdos +fj.archives.programs.sources +fj.books +fj.comp.ai +fj.comp.announce +fj.comp.arch +fj.comp.databases +fj.comp.dev.cdrom +fj.comp.dev.digital-camera +fj.comp.dev.disk +fj.comp.dev.display +fj.comp.dev.keyboard +fj.comp.dev.memory +fj.comp.dev.misc +fj.comp.dev.pcmcia +fj.comp.dev.pointing +fj.comp.dev.power +fj.comp.dev.printer +fj.comp.dev.scanner +fj.comp.dev.scsi +fj.comp.dev.tape +fj.comp.dsp +fj.comp.image +fj.comp.lang.ada +fj.comp.lang.awk +fj.comp.lang.basic +fj.comp.lang.c +fj.comp.lang.c++ +fj.comp.lang.cobol +fj.comp.lang.forth +fj.comp.lang.fortran +fj.comp.lang.functional +fj.comp.lang.implementation +fj.comp.lang.java +fj.comp.lang.javascript +fj.comp.lang.lisp +fj.comp.lang.misc +fj.comp.lang.pascal +fj.comp.lang.perl +fj.comp.lang.postscript +fj.comp.lang.prolog +fj.comp.lang.ruby +fj.comp.lang.st80 +fj.comp.lang.tcl +fj.comp.lang.verilog +fj.comp.lang.vhdl +fj.comp.lang.visualbasic +fj.comp.misc +fj.comp.mobile +fj.comp.music +fj.comp.oops +fj.comp.parallel +fj.comp.security +fj.comp.security.pgp +fj.comp.sgml +fj.comp.speech +fj.comp.texhax +fj.comp.text +fj.comp.theory +fj.comp.x11 +fj.disaster.earthquake +fj.disaster.oil-spill +fj.disaster.volunteers +fj.editor.emacs +fj.editor.misc +fj.editor.mule +fj.editor.xemacs +fj.education +fj.education.announce +fj.education.math +fj.engr.arch +fj.engr.civil +fj.engr.control +fj.engr.elec +fj.engr.materials +fj.engr.mech +fj.engr.misc +fj.engr.robotics +fj.fleamarket.appliances +fj.fleamarket.autos +fj.fleamarket.books +fj.fleamarket.books.comics +fj.fleamarket.books.comp +fj.fleamarket.books.sci +fj.fleamarket.books.soc +fj.fleamarket.comp +fj.fleamarket.misc +fj.fleamarket.tickets +fj.fleamarket.video-game +fj.jokes +fj.jokes.d +fj.kanakan.misc +fj.kanakan.wnn +fj.kanji +fj.lan +fj.life.children +fj.life.health +fj.life.hometown +fj.life.housing +fj.life.in-hokubei +fj.life.in-japan +fj.life.money +fj.life.religion +fj.life.school +fj.living +fj.mail +fj.mail-lists.fj-committee +fj.mail.lists +fj.meetings +fj.misc +fj.misc.announce +fj.misc.handicap +fj.net-people +fj.net.announce +fj.net.fax +fj.net.fddi +fj.net.ftp +fj.net.ftp.archie +fj.net.gopher +fj.net.guideline +fj.net.ip +fj.net.ip.dns +fj.net.isdn +fj.net.kermit +fj.net.media.ethernet +fj.net.mime +fj.net.misc +fj.net.modems +fj.net.modems.fax +fj.net.phones +fj.net.phones.manners +fj.net.phones.mobile +fj.net.phones.phs +fj.net.programming +fj.net.providers +fj.net.uucp +fj.net.wais +fj.net.www +fj.net.www.authoring +fj.net.www.browsers +fj.net.www.pages +fj.net.www.servers +fj.news.adm +fj.news.announce +fj.news.config +fj.news.group +fj.news.group.archives +fj.news.group.comp +fj.news.group.misc +fj.news.group.net +fj.news.group.rec +fj.news.group.sci +fj.news.group.soc +fj.news.lists +fj.news.misc +fj.news.net-abuse +fj.news.policy +fj.news.reader +fj.news.reader.gn +fj.news.reader.gnus +fj.news.reader.mnews +fj.news.reader.msin +fj.news.reader.rn +fj.news.reader.tin +fj.news.reader.winvn +fj.news.system +fj.news.system.b +fj.news.system.c +fj.news.system.dnas +fj.news.system.inn +fj.news.system.nntp +fj.news.usage +fj.org.ieee +fj.org.ipsj +fj.org.jsai +fj.org.jssst +fj.org.jus +fj.org.ptt +fj.os.bsd.bsd-os +fj.os.bsd.freebsd +fj.os.bsd.misc +fj.os.bsd.netbsd +fj.os.hurd +fj.os.linux +fj.os.minix +fj.os.misc +fj.os.ms-windows +fj.os.ms-windows.programming +fj.os.msdos +fj.os.os2 +fj.os.plan9 +fj.os.windows-nt +fj.personal-ads.friends +fj.personal-ads.misc +fj.personal-ads.penpals +fj.questions.fj +fj.questions.internet +fj.questions.misc +fj.questions.unix +fj.rec.aerospace +fj.rec.aerospace.simulators +fj.rec.animation +fj.rec.animation.oldies +fj.rec.announce +fj.rec.autos +fj.rec.autos.sports +fj.rec.autos.wagon +fj.rec.av +fj.rec.bicycles +fj.rec.bus +fj.rec.comics +fj.rec.dance +fj.rec.disney +fj.rec.drink +fj.rec.drink.liquor +fj.rec.fine-arts +fj.rec.fishing +fj.rec.food +fj.rec.fortunetelling +fj.rec.games +fj.rec.games.arcade.pinball +fj.rec.games.go +fj.rec.games.mahjong +fj.rec.games.pachinko +fj.rec.games.roguelike +fj.rec.games.roleplaying +fj.rec.games.shogi +fj.rec.games.video.arcade +fj.rec.games.video.arcade.kakutou +fj.rec.games.video.characters +fj.rec.games.video.home +fj.rec.games.video.home.nintendo64 +fj.rec.games.video.home.playstation +fj.rec.games.video.home.saturn +fj.rec.games.video.home.superfamicom +fj.rec.games.video.pc +fj.rec.gardens +fj.rec.ham +fj.rec.history +fj.rec.idol +fj.rec.marine +fj.rec.misc +fj.rec.models +fj.rec.motorcycles +fj.rec.movies +fj.rec.music +fj.rec.music.alternative +fj.rec.music.classical +fj.rec.music.creators +fj.rec.music.j-pop +fj.rec.music.newage +fj.rec.music.progressive +fj.rec.music.winds +fj.rec.mystery +fj.rec.novels +fj.rec.outdoor +fj.rec.pets +fj.rec.pets.aqua +fj.rec.photo +fj.rec.play +fj.rec.poems +fj.rec.radio +fj.rec.rail +fj.rec.rail.cars +fj.rec.rail.historical +fj.rec.rail.tickets +fj.rec.rubber-duckie +fj.rec.seiyu +fj.rec.sf +fj.rec.sf.startrek +fj.rec.ships +fj.rec.smoking +fj.rec.sports +fj.rec.sports.american.football +fj.rec.sports.baseball +fj.rec.sports.basketball +fj.rec.sports.football +fj.rec.sports.golf +fj.rec.sports.keiba +fj.rec.sports.prowrestling +fj.rec.sports.rugby +fj.rec.sports.scuba-diving +fj.rec.sports.ski +fj.rec.sports.snowboard +fj.rec.sports.soccer +fj.rec.sports.tennis +fj.rec.sports.volleyball +fj.rec.tokei +fj.rec.tokusatsu +fj.rec.trading-cards +fj.rec.travel +fj.rec.travel.air +fj.rec.travel.japan +fj.rec.travel.world +fj.rec.tv +fj.rec.tv.cm +fj.rec.wine +fj.sci.astro +fj.sci.bio +fj.sci.chem +fj.sci.cognitive +fj.sci.economics +fj.sci.geo +fj.sci.human-factors +fj.sci.informatics +fj.sci.lang +fj.sci.math +fj.sci.matter +fj.sci.medical +fj.sci.military +fj.sci.misc +fj.sci.philosophy +fj.sci.physics +fj.sci.psychology +fj.soc.agriculture +fj.soc.announce +fj.soc.copyright +fj.soc.culture +fj.soc.culture.chinese +fj.soc.economy +fj.soc.environment +fj.soc.history +fj.soc.human-rights +fj.soc.internet +fj.soc.internet.censorship +fj.soc.law +fj.soc.media +fj.soc.medical +fj.soc.men-women +fj.soc.misc +fj.soc.nuclear +fj.soc.politics +fj.soc.pseudo-science +fj.soc.smoking +fj.soc.tech +fj.soc.traffic +fj.soc.traffic.manners +fj.soc.war-and-peace +fj.sources +fj.sources.d +fj.sys.alpha +fj.sys.ews4800 +fj.sys.hp +fj.sys.ibmpc +fj.sys.j3100 +fj.sys.luna +fj.sys.mac +fj.sys.mac.advocacy +fj.sys.mac.comm +fj.sys.mac.programming +fj.sys.misc +fj.sys.news +fj.sys.newton +fj.sys.next +fj.sys.pc98 +fj.sys.rs6000 +fj.sys.sgi +fj.sys.sun +fj.sys.vax +fj.sys.x68000 +fj.sys.zaurus +fj.test +fj.unix +fj.wanted +fl.announce +fl.attractions +fl.biz +fl.config +fl.config.control +fl.environment +fl.forsale +fl.forsale.auto +fl.gardening +fl.general +fl.jobs.computers.application +fl.jobs.computers.misc +fl.jobs.computers.programming +fl.jobs.misc +fl.jobs.resumes +fl.jobs.telecommute +fl.jobs.www +fl.media.radio +fl.media.tv +fl.politics +fl.real-estate +fl.restaurant +fl.test +fl.travel +fl.uug +flora.action-forum +flora.admin.design +flora.admin.help +flora.afo +flora.announce +flora.ask-doctor +flora.canvis-l +flora.cbcc +flora.cfsc +flora.comnet-www +flora.general +flora.mai-not +flora.opirg-events +flora.ovs +flora.ovs.recipe +flora.perc +flora.status +flora.test.automoderated +fnet.afuu +fnet.c3 +fnet.combinatoire +fnet.common-lp +fnet.culture +fnet.followup +fnet.formel +fnet.general +fnet.greco-prog +fnet.hypercubes +fnet.ia +fnet.lang +fnet.lelisp +fnet.lmastat +fnet.seminaires +fnet.sm90 +fnet.sps9 +fnet.test +fnet.tietoliikenne.televerkot +fr.announce.divers +fr.announce.important +fr.announce.newgroups +fr.announce.seminaires +fr.bienvenue +fr.bienvenue.questions +fr.bio.biolmol +fr.bio.canauxioniques +fr.bio.general +fr.bio.genome +fr.bio.logiciel +fr.bio.medecine +fr.biz.d +fr.biz.produits +fr.biz.publicite +fr.biz.teletravail +fr.comp.applications.emacs +fr.comp.applications.libres +fr.comp.applications.x11 +fr.comp.divers +fr.comp.emulateurs +fr.comp.ia +fr.comp.infosystemes +fr.comp.infosystemes.www.annonces +fr.comp.infosystemes.www.annonces.d +fr.comp.infosystemes.www.auteurs +fr.comp.infosystemes.www.divers +fr.comp.infosystemes.www.navigateurs +fr.comp.infosystemes.www.pages-perso +fr.comp.infosystemes.www.serveurs +fr.comp.lang.ada +fr.comp.lang.basic +fr.comp.lang.c +fr.comp.lang.c++ +fr.comp.lang.general +fr.comp.lang.java +fr.comp.lang.lisp +fr.comp.lang.pascal +fr.comp.lang.perl +fr.comp.lang.tcl +fr.comp.mail +fr.comp.objet +fr.comp.os.bsd +fr.comp.os.divers +fr.comp.os.linux +fr.comp.os.linux.annonces +fr.comp.os.linux.moderated +fr.comp.os.mac-os +fr.comp.os.ms-windows.programmation +fr.comp.os.ms-windows.win3 +fr.comp.os.ms-windows.win95 +fr.comp.os.ms-windows.winnt +fr.comp.os.msdos +fr.comp.os.os2 +fr.comp.os.unix +fr.comp.os.unix.mac +fr.comp.os.vms +fr.comp.pao +fr.comp.securite +fr.comp.sys.amiga +fr.comp.sys.atari +fr.comp.sys.be +fr.comp.sys.divers +fr.comp.sys.mac +fr.comp.sys.mac.annonces +fr.comp.sys.mac.communication +fr.comp.sys.mac.materiel +fr.comp.sys.mac.programmation +fr.comp.sys.next +fr.comp.sys.parallele.sp.utilisateurs +fr.comp.sys.pc +fr.comp.text.tex +fr.doc.biblio +fr.doc.divers +fr.doc.magazines +fr.education.divers +fr.education.medias +fr.emplois.d +fr.emplois.demandes +fr.emplois.offres +fr.lettres.langue.francaise +fr.misc.bavardages.dinosaures +fr.misc.cryptologie +fr.misc.divers +fr.misc.droit +fr.misc.droit.internet +fr.misc.finance +fr.misc.handicap +fr.misc.transport.autostop +fr.misc.transport.rail +fr.network.divers +fr.network.internet +fr.network.internet.fournisseurs +fr.network.modems +fr.rec.anime +fr.rec.apiculture +fr.rec.aquariophilie +fr.rec.arts.bd +fr.rec.arts.litterature +fr.rec.arts.plastiques +fr.rec.arts.sf +fr.rec.arts.spectacles +fr.rec.bateaux +fr.rec.bibliophilie +fr.rec.boissons.vins +fr.rec.bricolage +fr.rec.brocante +fr.rec.cinema.affiches +fr.rec.cinema.discussion +fr.rec.cinema.selection +fr.rec.cuisine +fr.rec.divers +fr.rec.genealogie +fr.rec.humour +fr.rec.jardinage +fr.rec.jeux.cartes +fr.rec.jeux.divers +fr.rec.jeux.jdr +fr.rec.jeux.societe +fr.rec.jeux.video +fr.rec.jeux.video.tombraider +fr.rec.jeux.wargames +fr.rec.moto +fr.rec.musiques +fr.rec.musiques.hip-hop +fr.rec.oracle +fr.rec.peche-chasse +fr.rec.philatelie +fr.rec.photo +fr.rec.plongee +fr.rec.radio +fr.rec.sport.divers +fr.rec.sport.equitation +fr.rec.sport.football +fr.rec.sport.rugby +fr.rec.sport.vtt +fr.rec.tv.satellite +fr.rec.tv.series +fr.rec.voyages +fr.res-doct.archi +fr.reseaux.telecoms.mobiles +fr.reseaux.telecoms.operateurs +fr.reseaux.telecoms.rnis +fr.reseaux.telecoms.techniques +fr.sci.astronomie +fr.sci.automatique +fr.sci.biometrie +fr.sci.cogni.discussion +fr.sci.cogni.incognito +fr.sci.cogni.info +fr.sci.cogni.outil +fr.sci.cogni.publication +fr.sci.divers +fr.sci.electronique +fr.sci.jargon +fr.sci.maths +fr.sci.philo +fr.soc.alternatives +fr.soc.divers +fr.soc.homosexualite +fr.soc.internet +fr.soc.politique +fr.soc.religion +fr.test +fr.usenet.8bits +fr.usenet.abus.d +fr.usenet.abus.rapports +fr.usenet.distribution +fr.usenet.divers +fr.usenet.forums.annonces +fr.usenet.forums.evolution +fr.usenet.logiciels +fr.usenet.reponses +fr.usenet.stats +francom.automobile +francom.aviation +francom.biere_vins +francom.chatting.amitie +francom.chatting.generale +francom.cinema_video +francom.comp.amiga +francom.comp.ibm +francom.comp.macintosh +francom.echecs +francom.electronique +francom.environnement +francom.esoterisme +francom.infos +francom.jeux.ordinateurs +francom.justice +francom.lhl +francom.logiciels.dos +francom.medical +francom.ms.windows +francom.multimedia +francom.musique +francom.nouveaux.groupes +francom.opinions +francom.parents +francom.programmation +fras.mini-bins +fras.text.allgemein +frmug.general +fsu.freenet.youth.the.cafe +fsu.weather +fub.general +ga.atl-braves +ga.forsale +ga.general +ga.motss +ga.test +gac.physics.astronomy +gac.student.ggs +gay-net.aids +gay-net.artikel +gay-net.behinderte +gay-net.btx-ecke +gay-net.buchtips +gay-net.coming-out +gay-net.computer +gay-net.dfue +gay-net.diskussionen +gay-net.fundgrube +gay-net.general +gay-net.gruppen.general +gay-net.guide.bundesweit +gay-net.guide.weltweit +gay-net.haushalt +gay-net.heteros +gay-net.international +gay-net.kontakte +gay-net.labern +gay-net.lederecke +gay-net.lesben +gay-net.mailboxen +gay-net.medien +gay-net.recht +gay-net.spiele +gay-net.sprachen +gay-net.sysop-mail +gay-net.test +gay-net.witze +geometry.announcements +geometry.college +geometry.forum +geometry.institutes +geometry.pre-college +geometry.puzzles +geometry.research +geometry.software.dynamic +georgia.announce +ger.amiga +ger.atari +ger.binaer.ct.adressen +ger.binaer.ct.bugs +ger.binaer.ct.inhalt +ger.binaer.ct.listings +ger.binaer.ct.pc_config +ger.binaer.ct.pci_corner +ger.binaer.ct.share +ger.binaer.ct.soft +ger.binaer.gw.inhalt +ger.binaer.ix.inhalt +ger.binaer.swt.inhalt +ger.ct +ger.ct.projekte +ger.ct.pruefstand +ger.ct.schulen +ger.ct.support +ger.gernet +ger.mac +ger.pc.dos +ger.pc.hard +ger.pc.linux +ger.pc.os2 +ger.pc.win +gernet.ct +git.ads +git.arch.durfee +git.cc.alums +git.cc.class.150x +git.cc.class.4803a +git.cc.class.8011p +git.cc.class.8011r +git.cc.class.8113g +git.cc.class.8113h +git.cc.class.8113p +git.cc.class.8113r +git.cc.colloquia +git.cc.community +git.cc.cscw +git.cc.general +git.cc.help +git.cc.morale +git.cc.systems.mac +git.cc.systems.ug +git.ce.concrete.canoe +git.ce.construction +git.ce.steel.bridge +git.ce.sustainability +git.ce.systems +git.class.compe.1700a +git.class.compe.1770a +git.class.isye.3027b +git.club.aao +git.club.aiasgt +git.club.amsa +git.club.anachronism +git.club.ans +git.club.asa +git.club.asme +git.club.bgsa +git.club.cambodia +git.club.ccf +git.club.chi-alpha +git.club.crew +git.club.csa +git.club.cycling +git.club.entrepreneur +git.club.fieldhockey +git.club.gspe +git.club.guns +git.club.habitat +git.club.ifc +git.club.ihss +git.club.juggling +git.club.lacrosse +git.club.lcm +git.club.musicians-net +git.club.odk +git.club.opa +git.club.panh +git.club.prisa +git.club.prolife +git.club.rotaract +git.club.sailing +git.club.satf.prevention +git.club.satf.response +git.club.sca +git.club.seds +git.club.sfl +git.club.snag +git.club.sos +git.club.spc +git.club.sport.announce +git.club.sps +git.club.squash +git.club.suth +git.club.swarm +git.club.swim +git.club.sword +git.club.tef +git.club.ultimate +git.club.water-polo +git.club.water-ski +git.club.womens-union +git.club.wrek.techtalk +git.club.wrekage +git.cont-ed +git.dining.menu +git.edutech +git.edutech.ms +git.edutech.ms.problems +git.edutech.ms.software +git.ee.class.1300d +git.ee.class.390x +git.ee.compass +git.enve.ers.s1 +git.events.greekweek +git.events.homecoming +git.fin-aid.announce +git.general +git.grad +git.grad.gta +git.gtri.co-op +git.gtri.www +git.hideout +git.housing.esa +git.housing.resnet.availability +git.housing.resnet.questions +git.housing.woodruff +git.ieee +git.infosystems +git.isye.general +git.isye.healthsystems +git.isye.mot +git.lcc.class.1001j +git.lcc.class.2020j2 +git.lcc.class.2310p +git.lcc.class.3020o +git.lcc.class.6303a +git.leadershape +git.manufacturing.prc +git.maple.questions +git.math.class.1507a4 +git.math.class.1509n4 +git.math.class.3012a1 +git.math.class.3308ca +git.math.class.4803a +git.math.symbolic +git.me.class.2016b +git.me.research +git.me.scholarship +git.mechatronics +git.media-talk +git.mgt.club.entrepreneur +git.msm.general +git.news.groups +git.nrotc +git.ohr.jobs.digest +git.oit.availability +git.oit.questions +git.olympics.official +git.olympics.volunteer +git.options +git.os2 +git.outreach +git.physics.announce +git.physics.class.2122c +git.police.parking +git.politics +git.psych.class.1010a +git.psych.class.1010b +git.psych.class.1010c +git.psych.class.1010d +git.psych.class.1010e +git.psych.class.1010f +git.psych.class.1010g +git.psych.class.1010h +git.quality +git.rha.east +git.rha.general +git.rha.grad +git.rha.west +git.sga.coursecritique +git.sga.usc +git.sql-help +git.studctr.center4arts +git.studctr.movie.announce +git.studctr.movie.committee +git.studctr.movie.discussion +git.talk.abortion +git.talk.cars +git.talk.international +git.talk.middleast +git.talk.objectivism +git.talk.philosophy +git.talk.policy +git.talk.ps +git.talk.quake +git.talk.religion +git.tech.futures +git.telework +git.test +git.test.moderated +git.unix.linux.mailing-lists.ale +git.unix.solaris +git.win95.questions +git.year2000 +gnu.announce +gnu.bash.bug +gnu.cfengine.bug +gnu.cfengine.help +gnu.chess +gnu.emacs.announce +gnu.emacs.bug +gnu.emacs.gnews +gnu.emacs.gnus +gnu.emacs.help +gnu.emacs.sources +gnu.emacs.vm.bug +gnu.emacs.vm.info +gnu.emacs.vms +gnu.epoch.misc +gnu.g++.announce +gnu.g++.bug +gnu.g++.help +gnu.g++.lib.bug +gnu.gcc.announce +gnu.gcc.bug +gnu.gcc.help +gnu.gdb.bug +gnu.ghostscript.bug +gnu.gnusenet.config +gnu.gnusenet.test +gnu.gnustep.announce +gnu.gnustep.bug +gnu.gnustep.discuss +gnu.gnustep.help +gnu.groff.bug +gnu.misc.discuss +gnu.smalltalk.bug +gnu.utils.bug +gnu.utils.help +gov.org.admin.financenet +gov.org.g7.announce +gov.org.g7.environment +gov.org.g7.misc +gov.topic.admin.finance.accounting +gov.topic.admin.finance.asset-liab-mgt +gov.topic.admin.finance.audits +gov.topic.admin.finance.budgeting +gov.topic.admin.finance.calendar +gov.topic.admin.finance.int-controls +gov.topic.admin.finance.misc +gov.topic.admin.finance.municipalities +gov.topic.admin.finance.news +gov.topic.admin.finance.payroll +gov.topic.admin.finance.perf-measures +gov.topic.admin.finance.policy +gov.topic.admin.finance.procurement +gov.topic.admin.finance.reporting +gov.topic.admin.finance.state-county +gov.topic.admin.finance.systems +gov.topic.admin.finance.training +gov.topic.admin.finance.travel-admin +gov.topic.admin.privatization +gov.topic.finance.banks +gov.topic.finance.securities +gov.topic.forsale.misc +gov.topic.info.systems.epub +gov.topic.info.systems.year2000 +gov.topic.telecom.announce +gov.topic.telecom.misc +gov.topic.transport.air +gov.topic.transport.misc +gov.topic.transport.navigation +gov.topic.transport.rail +gov.topic.transport.road +gov.topic.transport.shipping +gov.topic.transport.water +gov.us.fed.cia.announce +gov.us.fed.congress.announce +gov.us.fed.congress.bills.house +gov.us.fed.congress.bills.senate +gov.us.fed.congress.calendar.house +gov.us.fed.congress.calendar.senate +gov.us.fed.congress.discuss +gov.us.fed.congress.documents +gov.us.fed.congress.gao.announce +gov.us.fed.congress.gao.decisions +gov.us.fed.congress.gao.discuss +gov.us.fed.congress.gao.reports +gov.us.fed.congress.record.digest +gov.us.fed.congress.record.extensions +gov.us.fed.congress.record.house +gov.us.fed.congress.record.index +gov.us.fed.congress.record.senate +gov.us.fed.congress.reports +gov.us.fed.courts.announce +gov.us.fed.dhhs.announce +gov.us.fed.dhhs.fda.announce +gov.us.fed.dhhs.ssa.announce +gov.us.fed.doc.announce +gov.us.fed.doc.cbd.awards +gov.us.fed.doc.cbd.forsale +gov.us.fed.doc.cbd.notices +gov.us.fed.doc.cbd.solicitations +gov.us.fed.doc.cbd.standards +gov.us.fed.doc.census.announce +gov.us.fed.doc.noaa.announce +gov.us.fed.dod.announce +gov.us.fed.dod.army.announce +gov.us.fed.dod.army.reserve +gov.us.fed.dod.navy.announce +gov.us.fed.dod.usaf.announce +gov.us.fed.doe.announce +gov.us.fed.doi.announce +gov.us.fed.doj.announce +gov.us.fed.dol.announce +gov.us.fed.dot.announce +gov.us.fed.dot.faa.announce +gov.us.fed.dot.nhtsa.announce +gov.us.fed.dot.uscg.announce +gov.us.fed.ed.announce +gov.us.fed.eop.announce +gov.us.fed.eop.white-house.announce +gov.us.fed.epa.announce +gov.us.fed.fcc.announce +gov.us.fed.fdic.announce +gov.us.fed.fema.announce +gov.us.fed.ferc.announce +gov.us.fed.fmc.announce +gov.us.fed.frs.announce +gov.us.fed.gsa.announce +gov.us.fed.hud.announce +gov.us.fed.nara.announce +gov.us.fed.nara.fed-register.announce +gov.us.fed.nara.fed-register.authoring +gov.us.fed.nara.fed-register.contents +gov.us.fed.nara.fed-register.corrections +gov.us.fed.nara.fed-register.notices +gov.us.fed.nara.fed-register.presidential +gov.us.fed.nara.fed-register.proposed-rules +gov.us.fed.nara.fed-register.rules +gov.us.fed.nasa.announce +gov.us.fed.nasa.ksc.announce +gov.us.fed.nrc.announce +gov.us.fed.nsf.announce +gov.us.fed.nsf.documents +gov.us.fed.nsf.grants +gov.us.fed.opm.announce +gov.us.fed.sba.announce +gov.us.fed.sec.announce +gov.us.fed.state.announce +gov.us.fed.treasury.announce +gov.us.fed.treasury.irs.announce +gov.us.fed.usaid.announce +gov.us.fed.usaid.pib +gov.us.fed.usda.announce +gov.us.fed.va.announce +gov.us.org.admin.aga +gov.us.org.admin.fasab +gov.us.org.admin.gfoa +gov.us.org.info.ace +gov.us.org.info.ala +gov.us.topic.agri.farms +gov.us.topic.agri.food +gov.us.topic.agri.misc +gov.us.topic.agri.statistics +gov.us.topic.ecommerce.announce +gov.us.topic.ecommerce.misc +gov.us.topic.ecommerce.standards +gov.us.topic.emergency.alerts +gov.us.topic.emergency.misc +gov.us.topic.energy.misc +gov.us.topic.energy.nuclear +gov.us.topic.energy.utilities +gov.us.topic.environment.air +gov.us.topic.environment.announce +gov.us.topic.environment.misc +gov.us.topic.environment.toxics +gov.us.topic.environment.waste +gov.us.topic.environment.water +gov.us.topic.finance.banks +gov.us.topic.finance.securities +gov.us.topic.foreign.news +gov.us.topic.foreign.trade.leads +gov.us.topic.foreign.trade.misc +gov.us.topic.foreign.trade.statistics +gov.us.topic.gov-jobs.employee.issues +gov.us.topic.gov-jobs.employee.news +gov.us.topic.gov-jobs.hr-admin +gov.us.topic.gov-jobs.offered.admin +gov.us.topic.gov-jobs.offered.admin.finance +gov.us.topic.gov-jobs.offered.admin.ses +gov.us.topic.gov-jobs.offered.announce +gov.us.topic.gov-jobs.offered.clerical +gov.us.topic.gov-jobs.offered.engineering +gov.us.topic.gov-jobs.offered.foreign +gov.us.topic.gov-jobs.offered.health +gov.us.topic.gov-jobs.offered.law-enforce +gov.us.topic.gov-jobs.offered.math-comp +gov.us.topic.gov-jobs.offered.misc +gov.us.topic.gov-jobs.offered.questions +gov.us.topic.gov-jobs.offered.science +gov.us.topic.gov-jobs.offered.technical +gov.us.topic.grants.research +gov.us.topic.info.abstracts.cdrom +gov.us.topic.info.abstracts.epub +gov.us.topic.info.abstracts.infosystems +gov.us.topic.info.abstracts.print +gov.us.topic.info.libraries.govdocs +gov.us.topic.info.libraries.technology +gov.us.topic.info.policy.announce +gov.us.topic.info.policy.misc +gov.us.topic.law.pub-contract +gov.us.topic.nat-resources.forests +gov.us.topic.nat-resources.land +gov.us.topic.nat-resources.marine +gov.us.topic.nat-resources.minerals +gov.us.topic.nat-resources.oil-gas +gov.us.topic.nat-resources.parks +gov.us.topic.nat-resources.wildlife +gov.us.topic.statistics.announce +gov.us.topic.statistics.reports +gov.us.topic.telecom.announce +gov.us.topic.telecom.misc +gov.us.topic.transport.air +gov.us.topic.transport.misc +gov.us.topic.transport.rail +gov.us.topic.transport.road +gov.us.topic.transport.shipping +gov.us.topic.transport.water +gov.us.usenet.admin +gov.us.usenet.announce +gov.us.usenet.answers +gov.us.usenet.control +gov.us.usenet.groups +gov.us.usenet.lists +gov.us.usenet.questions +gov.us.usenet.software +gov.us.usenet.test +gov.usenet.admin +gov.usenet.announce +gov.usenet.answers +gov.usenet.control +gov.usenet.groups +gov.usenet.lists +gov.usenet.questions +gov.usenet.software +gov.usenet.test +gstv.computing +gstv.control +gstv.general +gstv.linux +gstv.newsgroups +gstv.questions +gstv.rumor +gstv.shows +gstv.shows.24fps +gstv.shows.da-spot +gstv.staff +gstv.test +gvnc.arts +gvnc.config +gvnc.forsale +gvnc.general +gvnc.jobs +gvnc.politics +gvnc.soc +gvnc.test +gwu.greenu +gwu.msfinance +gwu.seas.cs219 +hackercorp.statistics +hactar.aminet.daily +hactar.aminet.weekly +hactar.cnews +hactar.config +hactar.fish +hactar.general +hactar.meeting +hactar.mime +hactar.space-1999 +hactar.stats +hactar.test +halcyon.announce +halcyon.answers +halcyon.forsale +halcyon.general +halcyon.slip +halcyon.test +han.announce +han.answers +han.arts.architecture +han.arts.design +han.arts.fine-art +han.arts.misc +han.arts.music.classical +han.arts.music.gayo +han.arts.music.gugak +han.arts.music.jazz +han.arts.music.misc +han.arts.music.movie +han.arts.music.pop +han.arts.music.progressive +han.arts.music.rock +han.arts.theater +han.binaries.photo +han.comp.database +han.comp.hangul +han.comp.internet +han.comp.lang.c +han.comp.lang.c++ +han.comp.lang.fortran +han.comp.lang.java +han.comp.lang.lisp +han.comp.lang.misc +han.comp.lang.perl +han.comp.lang.tcltk +han.comp.mail +han.comp.misc +han.comp.os.freebsd +han.comp.os.linux +han.comp.os.misc +han.comp.os.ms-windows.programming.misc +han.comp.os.ms-windows.programming.vb +han.comp.os.unix +han.comp.os.winnt +han.comp.periphs.input +han.comp.periphs.networking +han.comp.periphs.output +han.comp.periphs.storage +han.comp.questions +han.comp.security +han.comp.sys.cray +han.comp.sys.hp +han.comp.sys.ibmpc +han.comp.sys.mac +han.comp.sys.misc +han.comp.sys.sgi +han.comp.sys.sun +han.comp.text +han.comp.www.authoring +han.comp.www.browsers +han.comp.www.info +han.comp.www.misc +han.comp.www.servers +han.misc.forsale +han.misc.jobs +han.misc.misc +han.net.announce +han.net.hana +han.net.kornet +han.net.kren +han.net.kreonet +han.net.misc +han.net.nuri +han.net.services +han.news.admin +han.news.groups +han.news.net-abuse +han.news.stats +han.news.users +han.politics +han.rec.baduk +han.rec.books +han.rec.cars +han.rec.food +han.rec.games +han.rec.humor +han.rec.manhwa +han.rec.misc +han.rec.movie +han.rec.photo +han.rec.sf +han.rec.sports.baseball +han.rec.sports.basketball +han.rec.sports.football +han.rec.sports.golf +han.rec.sports.misc +han.rec.sports.tennis +han.rec.sports.volleyball +han.rec.tv +han.school.elementary +han.school.high +han.school.middle +han.school.pta +han.sci.agriculture +han.sci.astro +han.sci.bio +han.sci.chem +han.sci.dentistry +han.sci.earth +han.sci.engr +han.sci.math +han.sci.med +han.sci.misc +han.sci.physics +han.sci.stat +han.soc.culture.chejudo +han.soc.culture.chollado +han.soc.culture.chungchongdo +han.soc.culture.kangwondo +han.soc.culture.kyonggido +han.soc.culture.kyongsangdo +han.soc.culture.seoul +han.soc.movements +han.soc.religion.buddhism +han.soc.religion.christianity.catholic +han.soc.religion.christianity.protestant +han.soc.religion.misc +han.talk.economy +han.test +hannet.fragen +hannet.games +hannet.general +hannet.info +hannet.ip +hannet.map +hannet.ml-info +hannet.ml.atari.gem +hannet.ml.bsdi +hannet.ml.cycle.hpv +hannet.ml.firewalls +hannet.ml.genesis +hannet.ml.germnews +hannet.ml.ietf +hannet.ml.linux.680x0 +hannet.ml.linux.config +hannet.ml.linux.kernel +hannet.ml.linux.linuxnews +hannet.ml.linux.net +hannet.ml.linux.new-channels +hannet.ml.linux.news +hannet.ml.linux.nrao.linux-alert +hannet.ml.linux.nrao.linux-security +hannet.ml.linux.redhat.axp +hannet.ml.linux.rutgers.linux-680x0 +hannet.ml.linux.rutgers.linux-admin +hannet.ml.linux.rutgers.linux-announce +hannet.ml.linux.rutgers.linux-bbs +hannet.ml.linux.rutgers.linux-config +hannet.ml.linux.rutgers.linux-doc +hannet.ml.linux.rutgers.linux-fido +hannet.ml.linux.rutgers.linux-ftp +hannet.ml.linux.rutgers.linux-gcc +hannet.ml.linux.rutgers.linux-kernel +hannet.ml.linux.rutgers.linux-mips +hannet.ml.linux.rutgers.linux-msdos +hannet.ml.linux.rutgers.linux-net +hannet.ml.linux.rutgers.linux-newbie +hannet.ml.linux.rutgers.linux-normal +hannet.ml.linux.rutgers.linux-ppc +hannet.ml.linux.rutgers.linux-qag +hannet.ml.linux.rutgers.linux-scsi +hannet.ml.linux.rutgers.linux-seyon +hannet.ml.linux.rutgers.linux-sound +hannet.ml.linux.rutgers.linux-svgalib +hannet.ml.linux.rutgers.linux-tape +hannet.ml.linux.rutgers.linux-uucp +hannet.ml.linux.rutgers.linux-wabi +hannet.ml.linux.rutgers.linux-x11 +hannet.ml.linux.scsi +hannet.ml.linux.slip +hannet.ml.linux.uucp +hannet.ml.linux.x11 +hannet.ml.litprog +hannet.ml.lst-erlangen +hannet.ml.mac.anf +hannet.ml.mac.think-c +hannet.ml.med.mmatrix-l +hannet.ml.medinf +hannet.ml.medinf.hl7 +hannet.ml.netbsd.amiga +hannet.ml.netbsd.amiga-dev +hannet.ml.netbsd.amiga-x +hannet.ml.netbsd.current +hannet.ml.netbsd.current-users +hannet.ml.netbsd.netbsd-bugs +hannet.ml.netbsd.netbsd-help +hannet.ml.netbsd.netbsd-ports +hannet.ml.netbsd.netbsd-users +hannet.ml.netbsd.port-m68k +hannet.ml.next +hannet.ml.pci +hannet.ml.rfc +hannet.ml.sun.sunflash +hannet.ml.taylor +hannet.ml.test +hannet.ml.tex.auc-tex +hannet.ml.tex.emtex +hannet.ml.tex.tex-d-l +hannet.ml.ultrasound +hannet.ml.watchtower +hannet.ml.www.netscape +hannet.ml.www.squid.digest-x +hannet.statistik +hannet.test +hannet.tools.binaries +hannet.tools.d +hannet.tools.sources +hannover.allgemeines +hannover.diskussion +hannover.expo +hannover.fundgrube +hannover.funk.amateurfunk +hannover.funk.cb-funk +hannover.kino +hannover.messe +hannover.messe.cebit +hannover.messe.industrie +hannover.mhh.allgemeines +hannover.mhh.mhrz.aktuelles +hannover.mhh.mhrz.aktuelles.d +hannover.mhh.mhrz.ftp +hannover.mhh.mhrz.info +hannover.mhh.mhrz.statistik +hannover.mhh.termine +hannover.mhh.test +hannover.netze +hannover.netze.fido +hannover.netze.maus +hannover.netze.uucp +hannover.netze.z-netz +hannover.pd-info +hannover.politik +hannover.politik.diskussion +hannover.systemdaten +hannover.uni.comp +hannover.uni.comp.aix +hannover.uni.comp.dec +hannover.uni.comp.hp +hannover.uni.comp.linux +hannover.uni.comp.oracle +hannover.uni.comp.pc +hannover.uni.comp.rtos-uh +hannover.uni.comp.soft.spss +hannover.uni.comp.sun +hannover.uni.comp.sun.flash +hannover.uni.comp.sun.flash.d +hannover.uni.comp.tex +hannover.uni.comp.unix +hannover.uni.misc +hannover.uni.news +hannover.uni.rrzn.aftp +hannover.uni.rrzn.aktuelles +hannover.uni.rrzn.aktuelles.d +hannover.uni.sci +hannover.uni.studenten.netz +hannover.uni.termine +hannover.uni.test +hannover.uni.videoconf +hannover.uni.vorlesungen.kbs.informatik1 +hannover.uni.vorlesungen.kbs.informatik1.announce +hannover.uni.vorlesungen.kbs.informatik1.cafe +hannover.uni.vorlesungen.kbs.informatik1.discussion +hannover.uni.vorlesungen.kbs.ki +hannover.uni.vorlesungen.kbs.ki.announce +hannover.uni.vorlesungen.kbs.ki.cafe +hannover.uni.vorlesungen.kbs.ki.discussion +hannover.uni.vorlesungen.kbs.labor.announce +hannover.uni.vorlesungen.kbs.labor.cafe +hannover.uni.vorlesungen.kbs.labor.discussion +hannover.uni.vorlesungen.kbs.swt.announce +hannover.uni.vorlesungen.kbs.swt.cafe +hannover.uni.vorlesungen.kbs.swt.discussion +hannover.uni.www +hanse.anleitung +hanse.config +hanse.ev +hanse.flohmarkt +hanse.general +hanse.hardware +hanse.infos +hanse.internet +hanse.linux +hanse.maps +hanse.schweinske +hanse.software +hanse.test +harvard.announce.freshman +harvard.course.espp90b +harvard.course.math121 +harvard.course.phys143a +harvard.course.phys143b +harvard.course.phys15a +harvard.course.phys15b +harvard.course.phys15c +harvard.course.phys5 +harvard.course.physics11a.homework +harvard.course.physics11a.q-a +harvard.course.physics11a.suggestions +harvard.org.gsc +harvard.org.hrc +harvard.org.hub +harvard.org.indy +harvard.org.perspective +harvard.org.tangents +harvard.org.wishr +harvard.physics.sps +harvard.test +hawaii.ads.forsale +hawaii.ads.misc +hawaii.ads.wanted +hawaii.announce +hawaii.config +hawaii.education +hawaii.expatriates +hawaii.gardening +hawaii.inet-providers +hawaii.military +hawaii.misc +hawaii.politics +hawaii.sports +hawaii.test +hfx.general +hildesheim.allgemeines +hildesheim.fundgrube +hildesheim.uni.berichte +hildesheim.uni.lang.modula2 +hildesheim.uni.misc +hildesheim.uni.num-approx +hildesheim.uni.pdsoft +hildesheim.uni.pdsoft.atari-st +hildesheim.uni.rz +hildesheim.uni.rz.statistik +hildesheim.uni.test +hiss.general +hiss.local +hiss.ml.news-ak +hiss.sources +hiss.test +hk.binaries.photo.photography +hk.biz.general +hk.comp.hacker +hk.comp.os.unix +hk.comp.software +hk.jobs.recruit +hk.rec.alt-music +hk.rec.audio-visual +hk.rec.books +hk.rec.cars +hk.rec.comics +hk.rec.horse-racing +hk.rec.movies +hk.rec.music +hk.rec.music.classical +hk.rec.photo +hk.rec.scouting +hk.rec.sport.soccer +hk.rec.travel +hk.rec.videogame +hk.soc.religion.christianity +hk.talk.feelings +hk.talk.love +hk.talk.sex +houston.eats +houston.efh.talk +houston.forsale +houston.general +houston.internet.providers +houston.jobs.offered +houston.jobs.wanted +houston.music +houston.personals +houston.politics +houston.singles +houston.sports +houston.usenet.config +houston.usenet.stats +houston.usenet.test +houston.wanted +houston.weather +hsv.flame +hsv.forsale +hsv.general +hsv.jobs +hsv.politics +hsv.religion +hsv.tech +humanities.answers +humanities.classics +humanities.design.misc +humanities.language.sanskrit +humanities.lit.authors.shakespeare +humanities.misc +humanities.music.composers.wagner +humanities.philosophy.objectivism +hun.admin.news +hun.business.allas +hun.business.egyeb +hun.business.reklam +hun.comp.lang.java +hun.comp.net +hun.comp.os.os2 +hun.comp.os.solaris +hun.comp.text.tex +hun.flame +hun.general +hun.hobbi +hun.hobbi.repules +hun.internet.egyeb +hun.internet.etikett +hun.internet.policy +hun.lists.elektro +hun.lists.hix.coder +hun.lists.hix.guru +hun.lists.hix.jatek +hun.lists.hix.kornyesz +hun.lists.hix.kultura +hun.lists.hix.moka +hun.lists.hix.otthon +hun.lists.hix.randi +hun.lists.hix.sport +hun.lists.hix.tanc +hun.lists.hix.tipp +hun.lists.hix.tudomany +hun.lists.hix.vita +hun.lists.hix.webmester +hun.lists.mlf.gimp +hun.lists.mlf.hurd +hun.lists.mlf.linux +hun.lists.mlf.linux-doc +hun.lists.mlf.linux-flame +hun.lists.mlf.linux-hw +hun.lists.mlf.linux-kezdo +hun.lists.mlf.shell-l +hun.lists.mlf.unix +hun.news.neirjide +hun.nyelv +hun.org.hungarnet.egyeni-kutatok +hun.piac.comp +hun.piac.egyeb +hun.politika +hun.test +hw.general +ia.answers +ia.comp.infosystems.misc +ia.dot.road-work +ia.flame +ia.gov.house +ia.gov.senate +ia.org.eee +ia.org.freenet +ia.talk.misc +ia.test +ia.weather +ic.orgs.shp +ie.announce +ie.checkgroups +ie.comp +ie.forsale +ie.general +ie.jobs +ie.news.group +ie.politics +ie.test +ieee.announce +ieee.bbs.help +ieee.bbs.info +ieee.ces.audio-visual +ieee.config +ieee.eab.announce +ieee.eab.general +ieee.general +ieee.pcnfs +ieee.pcs.general +ieee.pub.announce +ieee.pub.general +ieee.rab.announce +ieee.rab.general +ieee.region1 +ieee.stds.announce +ieee.stds.general +ieee.students +ieee.tab.announce +ieee.tab.general +ieee.tcos +ieee.usab.announce +ieee.usab.general +iij.announce +iij.faq +iij.general +iij.mail +iij.misc +iij.newsgroup +iij.newsletter +iij.questions +iij.requests +iij.sunflash +iij.test +iijnet.announce +iijnet.arts +iijnet.chem +iijnet.cm +iijnet.databases +iijnet.dcom +iijnet.dcom.carrier +iijnet.dcom.isdn +iijnet.dcom.modem +iijnet.diy +iijnet.event +iijnet.examination +iijnet.food +iijnet.forsale +iijnet.games +iijnet.general +iijnet.internauts +iijnet.internet +iijnet.jobs +iijnet.literature +iijnet.living +iijnet.mail +iijnet.med +iijnet.mpu +iijnet.mpu.i486 +iijnet.mpu.sparc +iijnet.multimedia +iijnet.music +iijnet.netnews +iijnet.os +iijnet.os.dosv +iijnet.os.msdos +iijnet.os.unix +iijnet.real-estate +iijnet.sci +iijnet.sports +iijnet.sys.ibm-pc +iijnet.travel +iijnet.wanted +imsi.mail.framers +imsi.mail.www-talk +imsi.mail.x.prv.fontwork +imsi.mail.x.prv.mtserver +imsi.mail.x.prv.trackers +in.bizarre +in.forsale +in.general +in.ham-radio +in.jobs +in.misc +in.pc.mac +in.test +in.unix +info.admin +info.big-internet +info.bind +info.bsdi.users +info.bytecounters +info.firearms +info.firearms.politics +info.gated +info.grass.programmer +info.grass.user +info.ietf +info.ietf.hosts +info.ietf.isoc +info.ietf.njm +info.ietf.smtp +info.isode +info.jethro-tull +info.labmgr +info.mach +info.mh.workers +info.nets +info.nsf.grants +info.nsfnet.cert +info.nsfnet.status +info.nupop +info.nysersnmp +info.ph +info.rfc +info.slug +info.snmp +info.solbourne +info.sun-managers +info.sun-nets +info.theorynt +info.unix-sw +info.wisenet +interlog.eye +is.auglysingar +is.auglysingar.atvinna +is.auglysingar.tilsolu +is.islenska +is.isnet +is.logfraedi +is.matur +is.matur.uppskriftir +is.skemmtun +is.skemmtun.bokmenntir +is.skemmtun.brandarar +is.skemmtun.hlaup +is.skemmtun.kali +is.skemmtun.kvikmyndir +is.skemmtun.sjonvarp +is.skemmtun.sport +is.skemmtun.tonlist +is.stjornmal +is.test +is.tolvur +is.tolvur.hugbunadargerd +is.tolvur.leikir +is.tolvur.leikir.kali +is.tolvur.mac +is.tolvur.pc +is.tolvur.unix +is.tolvur.vms +is.vedur +is.ymislegt +israel.ads.personals +israel.dcom.isdn +israel.food +israel.francophones +israel.internet +israel.irc +israel.israel-mideast +israel.israeline +israel.jobs.misc +israel.jobs.offered +israel.jobs.resumes +israel.lists.aix-il +israel.lists.il-ads +israel.lists.il-board +israel.lists.il-fail +israel.lists.il-talk +israel.lists.ioudaios-l +israel.lists.nov-il +israel.news.admin +israel.radio.kol-israel.interbet +israel.sport.football +israel.test +it.aiuto +it.annunci.commerciali +it.annunci.contacts +it.annunci.immobiliari +it.annunci.primepagine +it.annunci.usato +it.annunci.usato.informatico +it.annunci.varie +it.arti.architettura +it.arti.ballo.lat-americano +it.arti.cartoni +it.arti.cartoni.anime +it.arti.cartoni.mercatino +it.arti.cinema +it.arti.fantasy +it.arti.fotografia +it.arti.fumetti +it.arti.fumetti.bonelli +it.arti.musica +it.arti.musica.cantautori +it.arti.musica.classica +it.arti.musica.jazz +it.arti.musica.recensioni +it.arti.musica.rock.progressive +it.arti.musica.rockitalia +it.arti.musica.spartiti +it.arti.scrivere +it.arti.trash +it.arti.varie +it.associazioni.cri +it.associazioni.lipu +it.binari.cartoni +it.binari.fantascienza +it.binari.file +it.binari.x.erotismo +it.binari.x.erotismo.amatoriale +it.binari.x.erotismo.animazioni +it.binari.x.erotismo.cremeria +it.binari.x.erotismo.scanseries +it.binari.x.hentai +it.comp.aiuto +it.comp.amiga +it.comp.amiga.moderato +it.comp.amiga.sviluppo +it.comp.as400 +it.comp.cad +it.comp.console +it.comp.console.playstation +it.comp.database +it.comp.database.access +it.comp.delphi +it.comp.demos +it.comp.dos +it.comp.emulatori +it.comp.giochi +it.comp.giochi.annunci +it.comp.giochi.mud +it.comp.giochi.pbem +it.comp.grafica +it.comp.grafica.photoshop +it.comp.hardware +it.comp.hardware.cd +it.comp.hardware.cpu +it.comp.hardware.modem +it.comp.hardware.overclock +it.comp.hardware.scsi +it.comp.hardware.storage +it.comp.hardware.video-3d +it.comp.ia +it.comp.irc +it.comp.java +it.comp.lang.c +it.comp.lang.c++ +it.comp.lang.javascript +it.comp.lang.pascal +it.comp.lang.perl +it.comp.lang.visual-basic +it.comp.lang.vrml +it.comp.linux +it.comp.linux.annunci +it.comp.linux.development +it.comp.linux.setup +it.comp.macintosh +it.comp.musica +it.comp.musica.mp3 +it.comp.os.dibattiti +it.comp.os2 +it.comp.prog +it.comp.recensioni +it.comp.reti.cisco +it.comp.reti.ip-admin +it.comp.reti.locali +it.comp.reti.wireless +it.comp.retrocomputing +it.comp.shareware +it.comp.sicurezza.cert-it +it.comp.sicurezza.pgp +it.comp.sicurezza.unix +it.comp.sicurezza.varie +it.comp.sicurezza.virus +it.comp.sist-operativi.dibattiti +it.comp.software.eudora +it.comp.software.newsreader +it.comp.tex +it.comp.unix +it.comp.win-nt +it.comp.win95 +it.comp.win95.software +it.comp.www +it.comp.www.annunci +it.comp.www.cgi +it.comp.www.homepages +it.comp.www.html +it.cultura +it.cultura.cattolica +it.cultura.cybersocieta +it.cultura.fantascienza +it.cultura.filosofia +it.cultura.libri +it.cultura.linguistica.italiano +it.cultura.musicologia +it.cultura.newage +it.cultura.orientale +it.cultura.single +it.cultura.storia +it.diritto +it.diritto.assicurazioni +it.discussioni.animali.cani +it.discussioni.animali.gatti +it.discussioni.auto +it.discussioni.censura.internet +it.discussioni.consumatori.rete +it.discussioni.consumatori.tutela +it.discussioni.droghe +it.discussioni.folli +it.discussioni.geometri +it.discussioni.giustizia +it.discussioni.ingegneria +it.discussioni.iso9000 +it.discussioni.litigi +it.discussioni.misteri +it.discussioni.pena-di-morte +it.discussioni.telecom +it.discussioni.ufo +it.discussioni.universita +it.discussioni.universita.dottorato +it.discussioni.universita.tesi-di-laurea +it.discussioni.varie +it.economia +it.economia.analisi-tecn +it.economia.aziendale +it.economia.borsa +it.economia.fisco +it.economia.fondicomuni +it.economia.investire +it.fan.carmen-consoli +it.fan.culo +it.fan.cuore +it.fan.dewdney +it.fan.elio +it.fan.er +it.fan.guccini +it.fan.lunediretta +it.fan.mai-dire-gol +it.fan.musica.lucio-battisti +it.fan.r-takahashi +it.fan.radio-deejay +it.fan.sailor-moon +it.fan.simpsons +it.fan.startrek +it.fan.starwars +it.fan.stephen-king +it.fan.studio-vit +it.fan.x-files +it.faq +it.hobby.acquari +it.hobby.audiovisivi +it.hobby.cicloturismo +it.hobby.cucina +it.hobby.elettronica +it.hobby.enigmi +it.hobby.fantasport +it.hobby.giochi +it.hobby.giochi.gdr +it.hobby.hi-fi +it.hobby.lotto +it.hobby.modellismo +it.hobby.motociclismo +it.hobby.nautica +it.hobby.pescare +it.hobby.radioamatori +it.hobby.satellite-tv +it.hobby.satellite-tv.digitale +it.hobby.satyra +it.hobby.scacchi +it.hobby.scuba +it.hobby.umorismo +it.hobby.vari +it.hobby.viaggi +it.hobby.volo.ultraleggero +it.industria.varie +it.lavoro.informatica +it.lavoro.mlm +it.lavoro.offerte +it.lavoro.prevenzione +it.lavoro.richieste +it.lavoro.sindacato +it.media.internet.disinformare +it.media.tv +it.media.tv.mediamente +it.medicina +it.medicina.aids +it.medicina.alimentazione +it.medicina.cefalee +it.medicina.diabete +it.medicina.primosoccorso +it.medicina.tumori +it.news.aiuto +it.news.annunci +it.news.gcn +it.news.gestione +it.news.gruppi +it.news.net-abuse +it.news.votazioni +it.politica +it.politica.cattolici +it.politica.destra +it.politica.lega-nord +it.politica.libertaria +it.politica.pds +it.politica.polo +it.politica.rifondazione +it.politica.ulivo +it.reticiviche.bologna.ambiente +it.reticiviche.bologna.barzellette +it.reticiviche.bologna.bilancio98 +it.reticiviche.bologna.bolognabynight +it.reticiviche.bologna.cerco-offro +it.reticiviche.bologna.computers +it.reticiviche.bologna.cucina +it.reticiviche.bologna.cultura +it.reticiviche.bologna.cultura.cinema +it.reticiviche.bologna.cultura.libri +it.reticiviche.bologna.cultura.musica +it.reticiviche.bologna.eurocittadini +it.reticiviche.bologna.futura +it.reticiviche.bologna.iperbole +it.reticiviche.bologna.lavoro +it.reticiviche.bologna.metropoli +it.reticiviche.bologna.metropoli.atc +it.reticiviche.bologna.metropoli.comunicazione +it.reticiviche.bologna.metropoli.ferrovie +it.reticiviche.bologna.metropoli.turismo +it.reticiviche.bologna.multietnica +it.reticiviche.bologna.nuovigruppi +it.reticiviche.bologna.polemica +it.reticiviche.bologna.politica +it.reticiviche.bologna.rpg +it.reticiviche.bologna.sanita +it.reticiviche.bologna.sindacato +it.reticiviche.bologna.spettacolo +it.reticiviche.bologna.sport +it.reticiviche.bologna.test +it.reticiviche.bologna.traffico +it.reticiviche.bologna.tutelacons +it.reticiviche.bologna.universita +it.reticiviche.bologna.valsialinea-av +it.reticiviche.bologna.viaggi +it.reticiviche.discussioni +it.scienza +it.scienza.alimenti +it.scienza.ambiente +it.scienza.astronomia +it.scienza.fisica +it.scienza.informatica +it.scienza.matematica +it.scienza.psicologia +it.scuola +it.scuola.informatica +it.sesso.annunci +it.sesso.discussioni +it.sesso.racconti +it.sociale.handicap +it.sociale.obiezione +it.sociale.scout +it.sociale.volontariato +it.sport +it.sport.americani +it.sport.arti-marziali +it.sport.basket +it.sport.calcio +it.sport.calcio.genoa +it.sport.calcio.inter +it.sport.cricket +it.sport.formula1 +it.sport.montagna +it.sport.volley +it.test +it.test.mailing-list +it.test.moderato +it.tlc.cellulari +it.tlc.cellulari.omnitel +it.tlc.cellulari.tim +it.tlc.policy +it.tlc.provider +it.tlc.provider.disservizi +it.tlc.telefonia +it.tlc.telefonia.isdn +ithaca.jobs +ithaca.marketplace +ithaca.personals +japan.actress +japan.ad.announce +japan.ad.exhibition +japan.ad.misc +japan.ad.personal +japan.ad.products +japan.admin.abuse +japan.admin.abuse.lists +japan.admin.announce +japan.admin.feed +japan.admin.feed-check +japan.admin.groups +japan.admin.lists +japan.admin.misc +japan.admin.policy +japan.aisatsu +japan.animal.cat +japan.animal.penguin +japan.anime +japan.anime.evangelion +japan.anime.evangelion.asuka +japan.anime.evangelion.ayanami +japan.anime.gundam +japan.anime.pretty +japan.app.macromedia +japan.app.postpet +japan.asia.china +japan.asia.korea +japan.audio +japan.autos.bike +japan.autos.enthu +japan.bar.loft-plus-one +japan.bbs.asciinet +japan.bbs.nifty-serve +japan.binaries.pictures.anime +japan.binaries.pictures.erotica +japan.binaries.pictures.erotica.lolita +japan.binaries.pictures.erotica.loose-socks +japan.binaries.pictures.fine-arts +japan.binaries.pictures.misc +japan.binaries.pictures.under-water +japan.books +japan.budo.judo +japan.budo.kyudo +japan.cad +japan.chacha-jokes +japan.chacha-jokes.hneta +japan.chat +japan.chat.military +japan.club.clubasia +japan.comike.chat +japan.comike.info +japan.comp +japan.comp.be +japan.comp.cd-r +japan.comp.emulators.misc +japan.comp.freebsd +japan.comp.gnu +japan.comp.hpux +japan.comp.lang.basic +japan.comp.lang.c +japan.comp.lang.javascript +japan.comp.lang.misc +japan.comp.lang.perl +japan.comp.lang.visual-basic +japan.comp.lang.visual-c++ +japan.comp.lang.vrml +japan.comp.lang.xml +japan.comp.linux +japan.comp.mac +japan.comp.mobile +japan.comp.mobile.ruputer +japan.comp.next +japan.comp.open-gl +japan.comp.os2 +japan.comp.pc98 +japan.comp.rc5-64 +japan.comp.sgi +japan.comp.sony-news +japan.comp.sun +japan.comp.sys.intel +japan.comp.sys.motorola +japan.comp.windows-nt +japan.comp.windows95 +japan.comp.windows98 +japan.comp.x11 +japan.config +japan.cooking +japan.cosplay +japan.dajare +japan.disney +japan.dtp +japan.engeki +japan.enkai +japan.enkai.yoin +japan.fan.artists.maywa-denki +japan.fan.netnews-people +japan.fan.netnews-people.void +japan.fetish.pantyhose +japan.fetish.rubber +japan.fetish.tights +japan.finance.invest +japan.fishing +japan.fishing.lure +japan.food +japan.food.rahmen +japan.food.softdrink +japan.fusigi +japan.gakkou.chuugaku +japan.gakkou.highschool +japan.games.go +japan.games.shogi +japan.gardening +japan.gegebo.food-drink +japan.guchi +japan.ham-radio +japan.ham-radio.dxcc +japan.handmade.comp +japan.handmade.electronics +japan.handmade.photo +japan.happy +japan.herbs-spices +japan.idobata.highschool.kunitachi +japan.idobata.jaist +japan.idobata.kyoto-u +japan.idobata.nagoya-u +japan.idobata.osaka-u +japan.idol +japan.idol.cona-milk +japan.idol.enomoto-kanako +japan.idol.hinagata +japan.idol.hirosue +japan.idol.johnnys +japan.idol.kato.noriko +japan.idol.male +japan.idol.max +japan.idol.mediagirls +japan.idol.mizuki +japan.idol.okina +japan.idol.sakai.noriko +japan.idol.speed +japan.idol.takahashi.yumiko +japan.idol.tomosaka +japan.idol.uchida.yuki +japan.internet.future +japan.internet.personal +japan.internet.phone +japan.internet.providers +japan.irc +japan.jiei-tai +japan.jiji +japan.kakutou-gi +japan.karaoke +japan.kissa +japan.kissa.mountain +japan.lang.english.communication +japan.lang.japanese +japan.lang.klingon +japan.lang.latina +japan.life.abroad.america +japan.life.abroad.asia +japan.life.abroad.europe +japan.life.abroad.misc +japan.life.abroad.oseania +japan.life.family +japan.life.single +japan.life.students +japan.life.sumai +japan.mail +japan.mail.mailing-lists +japan.mail.reader +japan.mail.system +japan.manga +japan.manga.fss +japan.manga.nagano-noriko +japan.mania.shota +japan.mirai-yosoku +japan.mono +japan.movies.bladerunner +japan.music +japan.music.alternative +japan.music.black +japan.music.blues +japan.music.classical +japan.music.comic-band +japan.music.compose +japan.music.dtm +japan.music.fusion +japan.music.girlpop +japan.music.girlpop.elt +japan.music.girlpop.m-kawamoto +japan.music.girlpop.moritaka +japan.music.girlpop.puffy +japan.music.guitar +japan.music.hard-rock +japan.music.heavy-metal +japan.music.house +japan.music.jazz +japan.music.komuro +japan.music.newage +japan.music.niagara +japan.music.punk +japan.music.techno +japan.music.uk-indie +japan.music.urakata +japan.naplps +japan.net.isdn +japan.net.keitai +japan.net.phs +japan.net.router +japan.net.uucp +japan.netgames.nazonazo +japan.netgames.nazonazo.d +japan.netgames.shiritori +japan.netgames.shiritori.d +japan.netnews +japan.netnews.beginners +japan.netnews.crime +japan.netnews.reader.gnus +japan.netnews.reader.mnews +japan.netnews.reader.msin +japan.netnews.reader.others +japan.netnews.reader.slrn +japan.owarai +japan.owarai.2chome +japan.pets.hamster +japan.photo.book +japan.photo.exhibition +japan.photo.www +japan.puzzle.cube +japan.puzzle.misc +japan.puzzle.slither-link +japan.q-and-a.misc +japan.q-and-a.netnews +japan.race.keiba +japan.radio +japan.radio.bcl +japan.radio.cf +japan.rail +japan.rekishi +japan.ren-ai +japan.robamimi +japan.rossia +japan.ryoko-chokin +japan.ryugaku +japan.sake +japan.sci.algorithm +japan.sci.misc +japan.sci.space +japan.security.pgp +japan.seiyu +japan.seiyu.hekiru +japan.seiyu.k-mariko +japan.sf.misc +japan.sf.perry-rohdan +japan.sf.phil-k-dick +japan.sf.tsutsui +japan.shousetsu.jidai +japan.shousetsu.suiri +japan.sigoto.d +japan.sigoto.kyu-jin +japan.sigoto.kyu-syoku +japan.sigoto.welfare +japan.soc.audit +japan.soc.aum +japan.soc.crime +japan.soc.crime.internet +japan.soc.cult +japan.soc.denjiha +japan.soc.transgender +japan.soramimi +japan.soramimi.d +japan.sports.baseball +japan.sports.baseball.baystars +japan.sports.baseball.bluewave +japan.sports.baseball.buffaloes +japan.sports.baseball.carp +japan.sports.baseball.dragons +japan.sports.baseball.fighters +japan.sports.baseball.hawks +japan.sports.baseball.lions +japan.sports.baseball.marines +japan.sports.baseball.tigers +japan.sports.bowling +japan.sports.football.association +japan.sports.kuruma.kansen +japan.sports.marine +japan.sports.prowrestling +japan.sports.scubadiving +japan.sports.ski +japan.sports.sky +japan.sports.snowboard +japan.startrek +japan.sukisuki.meganekko +japan.sukisuki.pony-tail +japan.sukisuki.yurikko +japan.sumo +japan.test +japan.tickets +japan.tmp.usage +japan.town +japan.town.akiba +japan.town.kyoto +japan.town.nara +japan.town.new-york +japan.town.oosu +japan.town.osaka +japan.town.ponbashi +japan.town.sapporo +japan.town.shinjuku +japan.travel.abroad +japan.travel.domestic +japan.trends +japan.tv +japan.tv.channel.misc +japan.tv.channel.movie +japan.tv.channel.music +japan.tv.channel.news +japan.tv.channel.sports +japan.tv.cm +japan.tv.drama +japan.tv.satellite +japan.tv.satellite.overseas +japan.tv.show.knight-scoop +japan.video.hardware +japan.video.soft +japan.videogames +japan.videogames.datsui-mahjong +japan.videogames.finalfantasy +japan.videogames.gals +japan.videogames.ibm-pc +japan.videogames.kusoge +japan.videogames.pc-fx +japan.videogames.playstation +japan.videogames.ultimaonline +japan.videogames.win95 +japan.www.browser +japan.www.browser.lynx +japan.www.browser.mozilla +japan.www.browser.msie +japan.www.design +japan.www.info-design +japan.www.proxy.squid +japan.www.server.apache +japan.www.server.cern +japan.www.server.ms-iis +japan.www.visual-design +japan.yoso +joelnet.config +junk +k12.chat.teacher +k12.ed.art +k12.ed.business +k12.ed.comp.literacy +k12.ed.health-pe +k12.ed.life-skills +k12.ed.math +k12.ed.music +k12.ed.science +k12.ed.soc-studies +k12.ed.special +k12.ed.tag +k12.ed.tech +k12.lang.art +k12.lang.deutsch-eng +k12.lang.esp-eng +k12.lang.francais +k12.lang.japanese +k12.lang.russian +k12.library +k12.sys.channel0 +k12.sys.channel1 +k12.sys.channel10 +k12.sys.channel11 +k12.sys.channel12 +k12.sys.channel2 +k12.sys.channel3 +k12.sys.channel4 +k12.sys.channel5 +k12.sys.channel6 +k12.sys.channel7 +k12.sys.channel8 +k12.sys.channel9 +k12.sys.projects +ka.comp.mac +ka.comp.misc +ka.comp.pc +ka.lauer +ka.markt.computer +ka.markt.mfg +ka.markt.misc +ka.newusers +ka.org.hadiko +ka.schwul +ka.talk +ka.uni.dial-in +ka.uni.jobs +ka.uni.rz.sp +ka.verkehr +kanto.airport.haneda +kanto.airport.narita +kanto.jokes.post +kanto.meetings.enkai +kanto.meetings.jps +kanto.misc.recycle +kanto.net.people +kanto.news.followup +kanto.news.general +kanto.news.group +kanto.news.network +kanto.rec.food +kanto.rec.misc +kanto.rec.rail +kanto.route.joban +kanto.seminar.chem-phys +kanto.test.admin +kanto.test.user +kanto.town.akihabara +kanto.town.bunkyo-ku +kanto.town.chiba +kanto.town.gunma +kanto.town.ibaraki +kanto.town.kanagawa +kanto.town.koga-city +kanto.town.misc +kanto.town.saitama +kanto.town.tochigi +kanto.town.tokyu.toyoko-line +kanto.town.tsuchiura-city +kanto.town.tsukuba +kaz.paper.kst.chance +kc.chat +kc.config +kc.forsale +kc.general +kc.jobs +kc.rail +kc.test +kc.wanted +kiel.allgemein +kiel.ascii-art +kiel.biete +kiel.computer +kiel.computer.amiga +kiel.computer.mac +kiel.computer.os2 +kiel.computer.spiele +kiel.computer.unix +kiel.computer.windows +kiel.dfue +kiel.drogen +kiel.fh +kiel.film +kiel.flame +kiel.freizeit.biken +kiel.freizeit.segeln +kiel.gruesse +kiel.hilfe +kiel.infos +kiel.kommerz +kiel.kommerz.d +kiel.literatur +kiel.mailbox.advocacy +kiel.musik +kiel.rollenspiele +kiel.sport +kiel.suche +kiel.sysop +kiel.sysop.cancelmsgs +kiel.sysop.robots +kiel.szene +kiel.talk.bizarre +kiel.talk.politik +kiel.test +kiel.umwelt +kiel.uni +kiel.verkehr +kingston.bbs.fido.users249 +ks.admin +ks.misc +kw.ads.business +kw.ads.events +kw.config +kw.eats +kw.events +kw.forsale +kw.general +kw.housing +kw.jobs +kw.networks +kw.news.stats +kw.reviews +kwnet.general +kwnet.ops +kwnet.tech +ky.motorcycles +ky.weather +ky.weather.d +la.config +la.eats +la.forsale +la.general +la.jobs +la.media +la.news +la.personals +la.seminars +la.test +la.transportation +la.wanted +laf.forsale +latech.stis +law.court.federal +law.listserv.election-law +law.school.anti-trust +law.school.antitrust +law.school.clinic.info-law +law.school.corps +law.school.gradtax.partner +law.school.gradtax.s-corp +law.school.legal-prof +law.school.tax.busiplan +li.events +li.forsale +li.jobs +li.misc +li.politics +li.wanted +list.tpc-rp +lon.misc +lon.test +lou.config +lou.general +lou.lft.config +lou.lft.forsale +lou.lft.general +lou.lft.jobs +lou.sun +ls.amnesty +ls.olnews +ls.ussr +mail.cypherpunks +malta.announce +malta.config +malta.fan.trekwho +malta.news.admin +malta.test +maus.info +mcgill.general +mcmaster.announce +mcmaster.artsci.announce +mcmaster.artsci.talk +mcmaster.buysell +mcmaster.comp.xwindows +mcmaster.conduct +mcmaster.courses.coe4hf3 +mcmaster.courses.coe4ma3 +mcmaster.courses.cs2mf3 +mcmaster.courses.cs2mj3 +mcmaster.courses.cs2sb3 +mcmaster.courses.econ4a03 +mcmaster.courses.econ789 +mcmaster.courses.geog4cc3 +mcmaster.courses.kin1b06 +mcmaster.courses.kin2b06 +mcmaster.courses.phys1bb3 +mcmaster.courses.pol2e6 +mcmaster.courses.psych3fb3 +mcmaster.courses.sci4j3 +mcmaster.courses.soc206 +mcmaster.fhs.med.news +mcmaster.fhs.med.social +mcmaster.grad +mcmaster.msu.clubs.computer +mcmaster.msu.clubs.magic +mcmaster.netserv.gopher +mcmaster.news.config +mcmaster.newuser +mcmaster.science.announce +mcmaster.science.talk +mcmaster.services.network.modempool +mcmaster.talk.pagic +mcmaster.talk.soapbox +mcmaster.test +mcnc.cad +mcnc.concert.video +mcnc.dcom +mcnc.general +mcnc.ncsulab +mcnc.pc +mcnc.programmers +mcnc.systems +mcnc.talks +mcnc.teleclass +mcnc.text +md.annapolis +md.announcements +md.config +md.eastern-shore +md.forsale +md.general +md.jobs +md.mont +md.personals +md.pg +md.pg.tricentennial +md.politics +md.test +me.communities.biddeford +me.communities.can +me.communities.portland +me.communities.yarmouth +me.config +me.forsale +me.general +me.internet +me.jobs +me.politics +medlux.dept.docs +medlux.dept.lic +medlux.dept.qual.doc +medlux.doc.acc +medlux.doc.apt +medlux.doc.ministry +medlux.doc.mos +medlux.doc.rus +medlux.doc.spb +medlux.drugs.reg +medlux.drugs.safety +medlux.fido.ru.baby.medic +medlux.fido.ru.medic.profy +medlux.fido.su.medic +medlux.firmhist +medlux.health +medlux.journal.cg +medlux.journal.top +medlux.journal.umo.science +medlux.journal.umo.z +medlux.journal.vit +medlux.medsci.anes +medlux.medsci.cardiol +medlux.medsci.contents +medlux.medsci.dent +medlux.medsci.dermatol +medlux.medsci.diag +medlux.medsci.endocrin +medlux.medsci.gastroent +medlux.medsci.gyn +medlux.medsci.hematol +medlux.medsci.homoeopathy +medlux.medsci.immunol +medlux.medsci.inform +medlux.medsci.neurol +medlux.medsci.oncology +medlux.medsci.ophthalm +medlux.medsci.orthopaedics +medlux.medsci.pediatr +medlux.medsci.pharmacol +medlux.medsci.pulmonol +medlux.medsci.san-hyg +medlux.medsci.surg +medlux.medsci.talk +medlux.medsci.therapy +medlux.medsci.urol +medlux.medsci.z +medlux.mfy.exhibitions +medlux.mfy.expo +medlux.mfy.public +medlux.misc.advert +medlux.misc.gossips +medlux.misc.jobs +medlux.newspaper.szs +medlux.newusers +medlux.postmasters +medlux.request +medlux.test +medlux.trade.cosm +medlux.trade.dent +medlux.trade.drugs +medlux.trade.herb +medlux.trade.lab +medlux.trade.mtechn +medlux.trade.optika +medlux.trade.rubber +medlux.trade.service +memphis.dining +memphis.employment +memphis.events +memphis.for-sale +memphis.general +memphis.mecca +memphis.networking +memphis.newsgroups +memphis.test +memphis.wanted +mensa.au.announce +mensa.au.events +mensa.config +mensa.de.announce +mensa.de.events +mensa.sigs.giftedchildren +mensa.talk.misc +mensa.uk.announce +mensa.uk.events +mensa.us.announce +mensa.us.events +mentorg.admin.hints +mercury.general +mex.artes +mex.artes.musica +mex.ciencia +mex.comp +mex.deportes +mex.edu +mex.empresarial +mex.general +mex.general.anuncios +mex.general.charla +mex.indigena +mex.joven +mex.noticias +mex.noticias.disc +mex.politica +mex.productividad +mex.rec +mex.rec.chistes +mex.red +mex.tradiciones +mex.tradiciones.cocina +mex.turismo +mi.jobs +mi.map +mi.misc +mi.news +mi.sources +mi.sun +mi.wanted +miami.general +microsoft.beta.iis4.ftp +microsoft.beta.iis4.mmc +microsoft.beta.iis4.msmq +microsoft.beta.iis4.remotesvc +microsoft.public.access.3rdpartyusrgrp +microsoft.public.access.activexcontrol +microsoft.public.access.chat +microsoft.public.access.commandbarsui +microsoft.public.access.conversion +microsoft.public.access.devtoolkits +microsoft.public.access.externaldata +microsoft.public.access.forms +microsoft.public.access.formscoding +microsoft.public.access.gettingstarted +microsoft.public.access.internet +microsoft.public.access.interopoledde +microsoft.public.access.macros +microsoft.public.access.modulesdaovba +microsoft.public.access.multiuser +microsoft.public.access.odbcclientsvr +microsoft.public.access.queries +microsoft.public.access.replication +microsoft.public.access.reports +microsoft.public.access.security +microsoft.public.access.setupconfig +microsoft.public.access.tablesdbdesign +microsoft.public.accessibility.axa +microsoft.public.accessibility.developer +microsoft.public.accessibility.ieaccess +microsoft.public.accessibility.issues +microsoft.public.active.directory.interfaces +microsoft.public.activex.controls.chatcontrol +microsoft.public.activex.programming.control.webdc +microsoft.public.activex.programming.control.webwiz +microsoft.public.activex.programming.java.afc +microsoft.public.activex.programming.java.cab +microsoft.public.activex.programming.java.sdk +microsoft.public.activex.programming.java.visualj +microsoft.public.activex.programming.java.vm +microsoft.public.adc +microsoft.public.adcbeta +microsoft.public.ado +microsoft.public.ado.wincebeta +microsoft.public.automap +microsoft.public.basic.dos +microsoft.public.basic.other +microsoft.public.bookshelf +microsoft.public.br.ie30 +microsoft.public.carpoint +microsoft.public.catapult.beta +microsoft.public.cinemania +microsoft.public.cn.inetexplorer.ie5beta +microsoft.public.consumer.products +microsoft.public.cryptoapi +microsoft.public.cs.ie30 +microsoft.public.cts +microsoft.public.de.access +microsoft.public.de.excel +microsoft.public.de.exchange +microsoft.public.de.flugsimulator +microsoft.public.de.fox +microsoft.public.de.frontpage +microsoft.public.de.german.frontpage98 +microsoft.public.de.german.ie30 +microsoft.public.de.german.ie40 +microsoft.public.de.german.ie40.outlookexpress +microsoft.public.de.german.ie40.win3 +microsoft.public.de.german.siteserver +microsoft.public.de.german.siteserver.commerce +microsoft.public.de.german.win95 +microsoft.public.de.german.windowsce +microsoft.public.de.inetexplorer.ie4 +microsoft.public.de.inetserver.iis +microsoft.public.de.outlook +microsoft.public.de.project +microsoft.public.de.sms +microsoft.public.de.snaserver +microsoft.public.de.sqlserver +microsoft.public.de.vb +microsoft.public.de.vc +microsoft.public.de.windowsnt.server +microsoft.public.de.windowsnt.workstation +microsoft.public.de.word +microsoft.public.directx +microsoft.public.dxmanimation +microsoft.public.el.ie30 +microsoft.public.el.ie4 +microsoft.public.encarta +microsoft.public.es.amigosie +microsoft.public.es.desarrollo +microsoft.public.es.espanol.soporte.entre.usuarios.exchange +microsoft.public.es.espanol.soporte.entre.usuarios.internet +microsoft.public.es.espanol.soporte.entre.usuarios.office97 +microsoft.public.es.espanol.soporte.entre.usuarios.windows95 +microsoft.public.es.ie30 +microsoft.public.es.isp +microsoft.public.es.java +microsoft.public.es.office97 +microsoft.public.es.vb +microsoft.public.es.vc +microsoft.public.es.vfoxpro +microsoft.public.es.vfoxpro.controles +microsoft.public.es.vfoxpro.lenguaje +microsoft.public.es.webmasters +microsoft.public.es.windows95 +microsoft.public.es.windowsnt +microsoft.public.excel.123quattro +microsoft.public.excel.charting +microsoft.public.excel.crashesgpfs +microsoft.public.excel.datamap +microsoft.public.excel.interopoledde +microsoft.public.excel.links +microsoft.public.excel.macintosh +microsoft.public.excel.misc +microsoft.public.excel.printing +microsoft.public.excel.programming +microsoft.public.excel.querydao +microsoft.public.excel.sdk +microsoft.public.excel.setup +microsoft.public.excel.templates +microsoft.public.exchange.admin +microsoft.public.exchange.applications +microsoft.public.exchange.clients +microsoft.public.exchange.connectivity +microsoft.public.exchange.misc +microsoft.public.exchange.setup +microsoft.public.fortran +microsoft.public.fox.3rdparty +microsoft.public.fox.books +microsoft.public.fox.chatter +microsoft.public.fox.events +microsoft.public.fox.fox2x.browse +microsoft.public.fox.fox2x.language-menus +microsoft.public.fox.fox2x.lck-api +microsoft.public.fox.fox2x.mac-specific +microsoft.public.fox.fox2x.queries-sql +microsoft.public.fox.fox2x.screens +microsoft.public.fox.fox2x.xplat +microsoft.public.fox.helpwanted +microsoft.public.fox.internet +microsoft.public.fox.programmer.exchange +microsoft.public.fox.vfp.dbc +microsoft.public.fox.vfp.forms +microsoft.public.fox.vfp.grids +microsoft.public.fox.vfp.language-menus +microsoft.public.fox.vfp.lck-api +microsoft.public.fox.vfp.mac-specific +microsoft.public.fox.vfp.oop +microsoft.public.fox.vfp.queries-sql +microsoft.public.fox.vfp.web +microsoft.public.fox.vfp.xplat +microsoft.public.fr.ageofempire +microsoft.public.fr.frontpage +microsoft.public.fr.ie30 +microsoft.public.fr.inetexplorer.ie5beta +microsoft.public.fr.start.actualite +microsoft.public.fr.start.culture +microsoft.public.fr.start.education +microsoft.public.fr.start.entreprises +microsoft.public.fr.start.finances +microsoft.public.fr.start.informatique +microsoft.public.fr.start.jeux +microsoft.public.fr.start.loisirs +microsoft.public.fr.start.societe +microsoft.public.fr.start.sports +microsoft.public.fr.start.voyages +microsoft.public.fr.windows95 +microsoft.public.frontpage.client +microsoft.public.frontpage.extensions.unix +microsoft.public.frontpage.extensions.windowsnt +microsoft.public.frontpage.mac +microsoft.public.frontpage98.eval +microsoft.public.games +microsoft.public.games.discussion +microsoft.public.games.zone +microsoft.public.games.zone.action +microsoft.public.games.zone.beta +microsoft.public.games.zone.board +microsoft.public.games.zone.card +microsoft.public.games.zone.fighterace.wishes +microsoft.public.games.zone.mindaerobics +microsoft.public.games.zone.role_playing +microsoft.public.games.zone.simulation +microsoft.public.games.zone.sport +microsoft.public.games.zone.strategy +microsoft.public.games.zone.ultracorps +microsoft.public.games.zone.zonelan +microsoft.public.gifanimator.discussion +microsoft.public.hu.ie30 +microsoft.public.iis4.beta.administration +microsoft.public.iis4.beta.certificatesvr +microsoft.public.iis4.beta.database +microsoft.public.iis4.beta.frontpageextns +microsoft.public.iis4.beta.ftp +microsoft.public.iis4.beta.general +microsoft.public.iis4.beta.indexserver20 +microsoft.public.iis4.beta.internetras +microsoft.public.iis4.beta.mcis +microsoft.public.iis4.beta.mmc +microsoft.public.iis4.beta.msmq +microsoft.public.iis4.beta.nntpserver +microsoft.public.iis4.beta.remotesvc +microsoft.public.iis4.beta.setup +microsoft.public.iis4.beta.smtpserver +microsoft.public.iis4.beta.tools +microsoft.public.iis4.beta.transactionsvr +microsoft.public.iis4.beta.webpost +microsoft.public.il.hebrew.excel +microsoft.public.il.hebrew.exchange +microsoft.public.il.hebrew.fun +microsoft.public.il.hebrew.groupware +microsoft.public.il.hebrew.ie3 +microsoft.public.il.hebrew.ie4 +microsoft.public.il.hebrew.iis +microsoft.public.il.hebrew.mcse +microsoft.public.il.hebrew.ntserver +microsoft.public.il.hebrew.ntworkstation +microsoft.public.il.hebrew.powerpoint +microsoft.public.il.hebrew.proxyserver +microsoft.public.il.hebrew.sbs +microsoft.public.il.hebrew.sql7 +microsoft.public.il.hebrew.sqlserver +microsoft.public.il.hebrew.vb +microsoft.public.il.hebrew.vc +microsoft.public.il.hebrew.vfoxpro +microsoft.public.il.hebrew.win95 +microsoft.public.il.hebrew.win98 +microsoft.public.il.hebrew.word +microsoft.public.il.israeli.sitebuilder +microsoft.public.imagecomposer.discussion +microsoft.public.industry.accounting +microsoft.public.industry.banking.wosa-xfs +microsoft.public.industry.health +microsoft.public.industry.insurance +microsoft.public.industry.manufacturing +microsoft.public.industry.retailpos +microsoft.public.inetexplorer.ie3 +microsoft.public.inetexplorer.ie4 +microsoft.public.inetexplorer.ie4.active_desktop +microsoft.public.inetexplorer.ie4.activex_contrl +microsoft.public.inetexplorer.ie4.announcements +microsoft.public.inetexplorer.ie4.app_compat +microsoft.public.inetexplorer.ie4.browser +microsoft.public.inetexplorer.ie4.connect_wizard +microsoft.public.inetexplorer.ie4.docs_help +microsoft.public.inetexplorer.ie4.favorites +microsoft.public.inetexplorer.ie4.feedback +microsoft.public.inetexplorer.ie4.frontpad +microsoft.public.inetexplorer.ie4.java_applets +microsoft.public.inetexplorer.ie4.mschat +microsoft.public.inetexplorer.ie4.multimedia_con +microsoft.public.inetexplorer.ie4.netmeeting +microsoft.public.inetexplorer.ie4.outlookexpress +microsoft.public.inetexplorer.ie4.printing +microsoft.public.inetexplorer.ie4.scripting +microsoft.public.inetexplorer.ie4.setup +microsoft.public.inetexplorer.ie4.shell +microsoft.public.inetexplorer.ie4.taskscheduler +microsoft.public.inetexplorer.ie4.web_delivery +microsoft.public.inetexplorer.ie4.web_publishing +microsoft.public.inetexplorer.ie4.web_server +microsoft.public.inetexplorer.ie5beta.add_ons +microsoft.public.inetexplorer.ie5beta.browser +microsoft.public.inetexplorer.ie5beta.info_delivery +microsoft.public.inetexplorer.ie5beta.netmeetingchat +microsoft.public.inetexplorer.ie5beta.onlineservices +microsoft.public.inetexplorer.ie5beta.outlookexpress +microsoft.public.inetexplorer.ie5beta.programming.active_desktop +microsoft.public.inetexplorer.ie5beta.programming.activexcontrol +microsoft.public.inetexplorer.ie5beta.programming.codedownload +microsoft.public.inetexplorer.ie5beta.programming.components.dhtml_editing +microsoft.public.inetexplorer.ie5beta.programming.components.webbrowser_ctl +microsoft.public.inetexplorer.ie5beta.programming.data_access +microsoft.public.inetexplorer.ie5beta.programming.dhtml.authoring +microsoft.public.inetexplorer.ie5beta.programming.dhtml.behaviors +microsoft.public.inetexplorer.ie5beta.programming.dhtml.scripting +microsoft.public.inetexplorer.ie5beta.programming.dhtml.scriptlets +microsoft.public.inetexplorer.ie5beta.programming.misc +microsoft.public.inetexplorer.ie5beta.programming.multimedia +microsoft.public.inetexplorer.ie5beta.programming.offline +microsoft.public.inetexplorer.ie5beta.programming.sbnworkshop +microsoft.public.inetexplorer.ie5beta.programming.urlmonikers +microsoft.public.inetexplorer.ie5beta.programming.wininet +microsoft.public.inetexplorer.ie5beta.programming.xml +microsoft.public.inetexplorer.ie5beta.setup +microsoft.public.inetexplorer.ie5beta.shell +microsoft.public.inetexplorer.win3 +microsoft.public.inetsdk.announcements +microsoft.public.inetsdk.control_pad +microsoft.public.inetsdk.doc_errors +microsoft.public.inetsdk.html_authoring +microsoft.public.inetsdk.programming.active_desktop +microsoft.public.inetsdk.programming.active_scrptng +microsoft.public.inetsdk.programming.comctl32 +microsoft.public.inetsdk.programming.components.design_time +microsoft.public.inetsdk.programming.components.dev +microsoft.public.inetsdk.programming.components.packaging +microsoft.public.inetsdk.programming.components.usage +microsoft.public.inetsdk.programming.data_awareness +microsoft.public.inetsdk.programming.dhtml_editing +microsoft.public.inetsdk.programming.docobjects +microsoft.public.inetsdk.programming.html_objmodel +microsoft.public.inetsdk.programming.info_delivery +microsoft.public.inetsdk.programming.mshtml_hosting +microsoft.public.inetsdk.programming.mstask +microsoft.public.inetsdk.programming.multimedia +microsoft.public.inetsdk.programming.scripting.jscript +microsoft.public.inetsdk.programming.scripting.vbscript +microsoft.public.inetsdk.programming.urlmonikers +microsoft.public.inetsdk.programming.wininet +microsoft.public.inetsdk.sdk_setup +microsoft.public.inetserver.dbweb +microsoft.public.inetserver.iis +microsoft.public.inetserver.iis.tripoli +microsoft.public.inetserver.misc +microsoft.public.internet.cm_cmak +microsoft.public.internet.cps +microsoft.public.internet.mail +microsoft.public.internet.mail.mac +microsoft.public.internet.mschat +microsoft.public.internet.netmeeting +microsoft.public.internet.netmeeting.beta +microsoft.public.internet.news +microsoft.public.internet.news.mac +microsoft.public.internet.radius +microsoft.public.investor +microsoft.public.investor40.beta +microsoft.public.it.ie30 +microsoft.public.it.win98.beta +microsoft.public.ja.inetexplorer.ie5beta +microsoft.public.java.activex +microsoft.public.java.afc +microsoft.public.java.cab +microsoft.public.java.directxj +microsoft.public.java.macvm +microsoft.public.java.sdk +microsoft.public.java.security +microsoft.public.java.visualj++ +microsoft.public.java.visualj++.techpreview +microsoft.public.java.visualj++.techpreview.debugger +microsoft.public.java.visualj++.techpreview.installation +microsoft.public.java.visualj++.techpreview.wfc +microsoft.public.java.vm +microsoft.public.java.win16vm +microsoft.public.jp.activex +microsoft.public.jp.frontpage +microsoft.public.jp.ie30 +microsoft.public.jp.ie40 +microsoft.public.jp.ie40.mac +microsoft.public.jp.ie40.win31 +microsoft.public.jp.vinterdev +microsoft.public.jp.visualj +microsoft.public.kids +microsoft.public.knowledgemgmt +microsoft.public.ko.ie30 +microsoft.public.ko.ie40 +microsoft.public.ko.ie40.beta +microsoft.public.ko.inetexplorer.ie5beta +microsoft.public.kr.win98beta.qna +microsoft.public.kr.winntsrv.qna +microsoft.public.kr.winntwks.qna +microsoft.public.liquidmotion +microsoft.public.liquidmotion.beta +microsoft.public.mail.admin +microsoft.public.mail.connectivity +microsoft.public.mail.misc +microsoft.public.management.mmc +microsoft.public.masm +microsoft.public.mcis.addressbook +microsoft.public.mcis.announcements +microsoft.public.mcis.beta.crs.sdk +microsoft.public.mcis.beta.webmapper.issues +microsoft.public.mcis.chatserver +microsoft.public.mcis.crs +microsoft.public.mcis.locatorserver +microsoft.public.mcis.mailserver +microsoft.public.mcis.membership +microsoft.public.mcis.mps +microsoft.public.mcis.newserver +microsoft.public.mcis.suggestions +microsoft.public.mdac +microsoft.public.mediamanager.discussion +microsoft.public.merchantserver +microsoft.public.messaging.misc +microsoft.public.mifst.client +microsoft.public.mifst.gateway +microsoft.public.money +microsoft.public.msagent +microsoft.public.msdn.general +microsoft.public.msdn.general.subscriber.downloads +microsoft.public.msdn.win98.beta.unmonitored.discussion +microsoft.public.msinvester +microsoft.public.msn.discussion +microsoft.public.msn.netnews.discussion +microsoft.public.multimedia.beta.mediaplayer +microsoft.public.music.products +microsoft.public.musicproducer.discussion +microsoft.public.netiquette +microsoft.public.netshow.live +microsoft.public.netshow.ondemand +microsoft.public.news.server.lists +microsoft.public.nl.ie30 +microsoft.public.nordic.ie30 +microsoft.public.nordic.win98.beta +microsoft.public.odbc.sdk +microsoft.public.ofc +microsoft.public.office.binders +microsoft.public.office.misc +microsoft.public.office.setup +microsoft.public.office.shortcutbar +microsoft.public.officedev +microsoft.public.oledb +microsoft.public.oledb.olap +microsoft.public.oledb.providers +microsoft.public.oledb.sdk +microsoft.public.oledb.specification +microsoft.public.oleds.beta +microsoft.public.outlook +microsoft.public.outlook.addin_utility +microsoft.public.outlook.configuration +microsoft.public.outlook.environment +microsoft.public.outlook.imep +microsoft.public.outlook.installation +microsoft.public.outlook.interop +microsoft.public.outlook.migration +microsoft.public.outlook.printing +microsoft.public.outlook.program_forms +microsoft.public.outlook.usage +microsoft.public.pictureit +microsoft.public.pl.ie30 +microsoft.public.pl.ie4 +microsoft.public.plus +microsoft.public.powerpoint +microsoft.public.powerpoint.mac +microsoft.public.pptp95.beta.discussion +microsoft.public.project +microsoft.public.proxy +microsoft.public.pt.ie30 +microsoft.public.publisher +microsoft.public.publisher.webdesign +microsoft.public.repository +microsoft.public.ru.ie30 +microsoft.public.ru.ie40 +microsoft.public.ru.outlook +microsoft.public.sbs.pre-rel.general +microsoft.public.schedule+ +microsoft.public.scripting.debugger +microsoft.public.scripting.hosting +microsoft.public.scripting.jscript +microsoft.public.scripting.remote +microsoft.public.scripting.scriptlets +microsoft.public.scripting.vbscript +microsoft.public.scripting.wsh +microsoft.public.simulators +microsoft.public.site-server.postingacceptr +microsoft.public.site-server.site-mgmt +microsoft.public.site-server.webpost +microsoft.public.siteserver.analysis +microsoft.public.siteserver.commerce +microsoft.public.siteserver.css +microsoft.public.siteserver.general +microsoft.public.siteserver.knowledgemgr +microsoft.public.siteserver.per-mbr +microsoft.public.siteserver.publishing +microsoft.public.siteserver.push +microsoft.public.siteserver.sdk +microsoft.public.siteserver.search +microsoft.public.sl.ie30 +microsoft.public.smallbiz.sbsisp +microsoft.public.sms.admin +microsoft.public.sms.inventory +microsoft.public.sms.misc +microsoft.public.sms.netmon +microsoft.public.sms.rcdiags +microsoft.public.sms.setup +microsoft.public.sms.sharedapps +microsoft.public.sms.sitecomm +microsoft.public.sms.swdist +microsoft.public.sms.tools +microsoft.public.snaserver.administration +microsoft.public.snaserver.aftp +microsoft.public.snaserver.applets +microsoft.public.snaserver.client.unix +microsoft.public.snaserver.misc +microsoft.public.snaserver.odbcdrda +microsoft.public.snaserver.programming.lu62 +microsoft.public.snaserver.programming.lua +microsoft.public.snaserver.programming.other +microsoft.public.snaserver.setup.as400 +microsoft.public.snaserver.setup.client +microsoft.public.snaserver.setup.host +microsoft.public.snaserver.setup.other +microsoft.public.snaserver.snaras +microsoft.public.snaserver.thirdparty +microsoft.public.snaserver.tn3270 +microsoft.public.speech_tech +microsoft.public.speech_tech.sdk +microsoft.public.sqlserver.connect +microsoft.public.sqlserver.odbc +microsoft.public.sqlserver.programming +microsoft.public.sqlserver.replication +microsoft.public.sqlserver.server +microsoft.public.sqlserver.workshop +microsoft.public.teammanager +microsoft.public.technet +microsoft.public.tr.ie30 +microsoft.public.tw.ie30 +microsoft.public.tw.ie40 +microsoft.public.tw.inetexplorer.ie5beta +microsoft.public.usageanalyst +microsoft.public.usasalesinfo.backoffice +microsoft.public.usasalesinfo.developer.access +microsoft.public.usasalesinfo.developer.foxpro +microsoft.public.usasalesinfo.developer.internet +microsoft.public.usasalesinfo.developer.multimedia +microsoft.public.usasalesinfo.developer.sdk-ddk +microsoft.public.usasalesinfo.developer.visualbasic +microsoft.public.usasalesinfo.developer.visualc++ +microsoft.public.usasalesinfo.developer.visualtools +microsoft.public.usasalesinfo.exchange +microsoft.public.usasalesinfo.internetserver +microsoft.public.usasalesinfo.msmail +microsoft.public.usasalesinfo.ntserver +microsoft.public.usasalesinfo.sna-sms +microsoft.public.usasalesinfo.sqlserver +microsoft.public.vb.3rdparty +microsoft.public.vb.addins +microsoft.public.vb.bugs +microsoft.public.vb.controls +microsoft.public.vb.controls.creation +microsoft.public.vb.controls.databound +microsoft.public.vb.controls.internet +microsoft.public.vb.crystal +microsoft.public.vb.database +microsoft.public.vb.database.dao +microsoft.public.vb.database.odbc +microsoft.public.vb.database.rdo +microsoft.public.vb.dos +microsoft.public.vb.enterprise +microsoft.public.vb.general.discussion +microsoft.public.vb.installation +microsoft.public.vb.ole +microsoft.public.vb.ole.automation +microsoft.public.vb.ole.cdk +microsoft.public.vb.ole.servers +microsoft.public.vb.setupwiz +microsoft.public.vb.syntax +microsoft.public.vb.vbce +microsoft.public.vb.visual_modeler +microsoft.public.vb.winapi +microsoft.public.vb.winapi.graphics +microsoft.public.vb.winapi.networks +microsoft.public.vc.database +microsoft.public.vc.debugger +microsoft.public.vc.etk +microsoft.public.vc.events +microsoft.public.vc.language +microsoft.public.vc.language.macintosh +microsoft.public.vc.mfc +microsoft.public.vc.mfc.docview +microsoft.public.vc.mfc.macintosh +microsoft.public.vc.mfcole +microsoft.public.vc.stl +microsoft.public.vc.utilities +microsoft.public.vc.vcce +microsoft.public.vchat +microsoft.public.vinterdev.beta98 +microsoft.public.vision_tech.sdk +microsoft.public.visualj.com-support +microsoft.public.visualj.compiler +microsoft.public.visualj.debugger +microsoft.public.visualj.discussion +microsoft.public.visualj.installation +microsoft.public.visualj.misc-tools +microsoft.public.visualtest +microsoft.public.wallet.discussion +microsoft.public.wbem +microsoft.public.win16.programmer.gdi +microsoft.public.win16.programmer.kernel +microsoft.public.win16.programmer.networks +microsoft.public.win16.programmer.pen +microsoft.public.win16.programmer.tools +microsoft.public.win16.programmer.ui +microsoft.public.win32.programmer.gdi +microsoft.public.win32.programmer.installwizard.beta +microsoft.public.win32.programmer.international +microsoft.public.win32.programmer.kernel +microsoft.public.win32.programmer.mapi +microsoft.public.win32.programmer.mmedia +microsoft.public.win32.programmer.networks +microsoft.public.win32.programmer.ole +microsoft.public.win32.programmer.pen +microsoft.public.win32.programmer.tapi +microsoft.public.win32.programmer.tapi.beta +microsoft.public.win32.programmer.tools +microsoft.public.win32.programmer.ui +microsoft.public.win32.programmer.wince +microsoft.public.win3x_wfw_dos +microsoft.public.win95.coffeehouse.chat +microsoft.public.win95.commtelephony +microsoft.public.win95.exchangefax +microsoft.public.win95.msdosapps +microsoft.public.win95.multimedia +microsoft.public.win95.networking +microsoft.public.win95.setup +microsoft.public.win95.shellui +microsoft.public.win95.win95applets +microsoft.public.windows95.oemdsp.preinstall +microsoft.public.windowsce +microsoft.public.windowsce.developer.betas +microsoft.public.windowsce.developer.embedded.beta +microsoft.public.windowsdnafs.discussion +microsoft.public.windowsnt.apps +microsoft.public.windowsnt.dfs +microsoft.public.windowsnt.dns +microsoft.public.windowsnt.domain +microsoft.public.windowsnt.dsmnfpnw +microsoft.public.windowsnt.fsft +microsoft.public.windowsnt.mac +microsoft.public.windowsnt.mail +microsoft.public.windowsnt.misc +microsoft.public.windowsnt.oemdsp.preinstall +microsoft.public.windowsnt.personalfax +microsoft.public.windowsnt.print +microsoft.public.windowsnt.protocol.ipx +microsoft.public.windowsnt.protocol.misc +microsoft.public.windowsnt.protocol.ras +microsoft.public.windowsnt.protocol.tcpip +microsoft.public.windowsnt.setup +microsoft.public.windowsnt.steelhead +microsoft.public.windowsnt.wolfpack +microsoft.public.windowsnt.wolfpack.sdk +microsoft.public.winnt50.beta.administration +microsoft.public.winnt50.beta.applications +microsoft.public.winnt50.beta.dial_up.networking +microsoft.public.winnt50.beta.directory.services +microsoft.public.winnt50.beta.distributed.file_system +microsoft.public.winnt50.beta.file_system +microsoft.public.winnt50.beta.general +microsoft.public.winnt50.beta.hardware +microsoft.public.winnt50.beta.internet.iexplorer +microsoft.public.winnt50.beta.internet.server +microsoft.public.winnt50.beta.macintosh.interop +microsoft.public.winnt50.beta.netware.interop +microsoft.public.winnt50.beta.networking +microsoft.public.winnt50.beta.networking.protocols +microsoft.public.winnt50.beta.other +microsoft.public.winnt50.beta.pnp_powermgmt +microsoft.public.winnt50.beta.printing +microsoft.public.winnt50.beta.ras_routing +microsoft.public.winnt50.beta.security +microsoft.public.winnt50.beta.setup.installation +microsoft.public.winnt50.beta.setup.installation.deployment +microsoft.public.winnt50.beta.setup.installation.drivers +microsoft.public.winnt50.beta.setup.installation.other +microsoft.public.winnt50.beta.setup.installation.plug_and_play +microsoft.public.winnt50.beta.setup.installation.upgrade +microsoft.public.winnt50.beta.setup.installation.upgrade.windows95 +microsoft.public.winnt50.beta.user_interface +microsoft.public.winnt50.beta.zero_admin +microsoft.public.word.conversions +microsoft.public.word.docmanagement +microsoft.public.word.macword5-6 +microsoft.public.word.macword98 +microsoft.public.word.nonwindows +microsoft.public.word.numbering +microsoft.public.word.oleinterop +microsoft.public.word.pagelayout +microsoft.public.word.printingfonts +microsoft.public.word.tables +microsoft.public.word.word6-7macros +microsoft.public.word.word97vba +microsoft.public.works.dos +microsoft.public.works.mac +microsoft.public.works.win +microsoft.public.xml +microsoft.public.zone.beta +microsoft.test +milw.general +milw.jobs +milw.unix +misc.activism.anti-fascism.announce +misc.activism.anti-fascism.tactics +misc.activism.militia +misc.activism.progressive +misc.answers +misc.books.technical +misc.business.consulting +misc.business.credit +misc.business.facilitators +misc.business.marketing.moderated +misc.business.moderated +misc.business.records-mgmt +misc.consumers +misc.consumers.frugal-living +misc.consumers.house +misc.consumers.house.homeowner-assn +misc.creativity +misc.education +misc.education.adult +misc.education.home-school.christian +misc.education.home-school.misc +misc.education.language.english +misc.education.medical +misc.education.multimedia +misc.education.science +misc.emerg-services +misc.entrepreneurs +misc.entrepreneurs.moderated +misc.fitness.aerobic +misc.fitness.misc +misc.fitness.walking +misc.fitness.weights +misc.forsale.computers.discussion +misc.forsale.computers.mac-specific.cards.misc +misc.forsale.computers.mac-specific.cards.video +misc.forsale.computers.mac-specific.misc +misc.forsale.computers.mac-specific.portables +misc.forsale.computers.mac-specific.software +misc.forsale.computers.mac-specific.systems +misc.forsale.computers.memory +misc.forsale.computers.modems +misc.forsale.computers.monitors +misc.forsale.computers.net-hardware +misc.forsale.computers.other.misc +misc.forsale.computers.other.software +misc.forsale.computers.other.systems +misc.forsale.computers.pc-specific.audio +misc.forsale.computers.pc-specific.cards.misc +misc.forsale.computers.pc-specific.cards.video +misc.forsale.computers.pc-specific.misc +misc.forsale.computers.pc-specific.motherboards +misc.forsale.computers.pc-specific.portables +misc.forsale.computers.pc-specific.software +misc.forsale.computers.pc-specific.systems +misc.forsale.computers.printers +misc.forsale.computers.storage +misc.forsale.computers.workstation +misc.forsale.non-computer +misc.handicap +misc.headlines +misc.health.aids +misc.health.alternative +misc.health.arthritis +misc.health.diabetes +misc.health.infertility +misc.health.injuries.rsi.misc +misc.health.injuries.rsi.moderated +misc.health.therapy.occupational +misc.immigration.australia+nz +misc.immigration.canada +misc.immigration.misc +misc.immigration.usa +misc.industry.electronics.marketplace +misc.industry.insurance +misc.industry.printing +misc.industry.pulp-and-paper +misc.industry.quality +misc.industry.safety.personal +misc.industry.utilities.electric +misc.int-property +misc.invest.canada +misc.invest.financial-plan +misc.invest.futures +misc.invest.marketplace +misc.invest.misc +misc.invest.mutual-funds +misc.invest.options +misc.invest.real-estate +misc.invest.stocks +misc.invest.technical +misc.jobs.contract +misc.jobs.fields.chemistry +misc.jobs.misc +misc.jobs.offered +misc.jobs.offered.entry +misc.jobs.resumes +misc.kids +misc.kids.breastfeeding +misc.kids.computer +misc.kids.consumers +misc.kids.health +misc.kids.info +misc.kids.moderated +misc.kids.pregnancy +misc.kids.vacation +misc.legal +misc.legal.computing +misc.legal.moderated +misc.misc +misc.news.bosnia +misc.news.east-europe.rferl +misc.news.internet.announce +misc.news.internet.discuss +misc.news.southasia +misc.predictions.registry +misc.rural +misc.survivalism +misc.taxes +misc.taxes.moderated +misc.test +misc.test.moderated +misc.transport.air-industry +misc.transport.air-industry.cargo +misc.transport.marine +misc.transport.misc +misc.transport.rail.americas +misc.transport.rail.australia-nz +misc.transport.rail.europe +misc.transport.rail.misc +misc.transport.road +misc.transport.trucking +misc.transport.urban-transit +misc.wanted +misc.writing +misc.writing.screenplays +mit.aero.unified +mit.bboard +mit.eecs.discuss +mit.evat +mit.lcs.announce +mit.lcs.ciis-building.announce +mit.lcs.ciis-building.misc +mit.lcs.misc +mit.lcs.seminar +mit.media-lab.mas001 +mit.test +mn.archive +mn.arts +mn.aviation +mn.forsale +mn.general +mn.map +mn.net +mn.politics +mn.sf +mn.sources +mn.test +mn.traffic +mn.uum +mn.women +monterey.config +monterey.events +monterey.forsale +monterey.general +monterey.test +mtl.activism +mtl.freenet.org +mtl.general +mtl.test +mtl.vendre-forsale +muc.announce +muc.archive.admin +muc.archive.general +muc.archive.update +muc.buergernetz +muc.infoforum +muc.infosystems +muc.lists.53c810 +muc.lists.admin +muc.lists.amd +muc.lists.as5200 +muc.lists.atarix +muc.lists.bind.users +muc.lists.bind.workers +muc.lists.bsdi +muc.lists.cn +muc.lists.dec-managers +muc.lists.dire-straits +muc.lists.enlightenment +muc.lists.fidogate +muc.lists.finance +muc.lists.finance-abstrc +muc.lists.firewalls +muc.lists.flexfax +muc.lists.frame +muc.lists.freebsd.announce +muc.lists.freebsd.bugs +muc.lists.freebsd.current +muc.lists.freebsd.hackers +muc.lists.freebsd.questions +muc.lists.freebsd.scsi +muc.lists.frua-dev +muc.lists.fwf.announce +muc.lists.fwf.bugs +muc.lists.fwf.development +muc.lists.ifmail +muc.lists.indians +muc.lists.info-solbourne +muc.lists.intcon +muc.lists.linux.international +muc.lists.linux68k +muc.lists.logic +muc.lists.loureed +muc.lists.mbox +muc.lists.mint +muc.lists.neijia +muc.lists.netblazer +muc.lists.netbsd.port.powerpc +muc.lists.new-lists +muc.lists.nren-d +muc.lists.osf-managers +muc.lists.pp +muc.lists.scsi +muc.lists.seyon +muc.lists.seyon.dev +muc.lists.smail3.users +muc.lists.smail3.wizards +muc.lists.snns +muc.lists.stern.computer +muc.lists.stern.infomat +muc.lists.suns-at-home +muc.lists.taylor-uucp +muc.lists.tpc-rp +muc.lists.uupc-info +muc.lists.v-modell +muc.lists.www-announce +muc.lists.www-literature +muc.lists.www-proxy +muc.lists.www-speed +muc.lists.www-talk +muc.lists.zmailer +muc.markt.misc +muc.misc +muc.rec +muc.test +muc.verkehr +mx.anuncios +nashville.general +nb.biz +nb.forsale +nb.francais +nb.general +nb.jobs +nbg.config +nbg.flame +nbg.hack +nbg.lists +nbg.markt +nbg.motorrad +nbg.online +nbg.sonstiges +nbg.test +nbn.housing +nbn.market +nbn.misc +nbn.novato +nbn.westmarin +nc.charlotte.entertainment +nc.charlotte.sports +nc.config +nc.forsale +nc.general +nc.western +ncar.weather +ncku.talk +ncsc.chemistry +ncsc.general +ncsc.systems +ncsc.training +nctu.ac.general +nctu.academic +nctu.activities +nctu.adm +nctu.adm.academic-affs +nctu.adm.alumni-center +nctu.adm.chancellor +nctu.adm.general-affs +nctu.adm.mirc +nctu.adm.sport +nctu.adm.student-affs +nctu.adm.traffic +nctu.alumni +nctu.announce +nctu.answers +nctu.applied.math +nctu.ccca +nctu.ccca.ftp.announce +nctu.ccca.ftp.d +nctu.ccca.ftp.newfiles +nctu.ccca.hytelnet +nctu.ccca.mirror +nctu.ce.general +nctu.chss +nctu.club.aboriginal +nctu.club.aiesec +nctu.club.anime +nctu.club.astronomy +nctu.club.av +nctu.club.ballroomdance +nctu.club.baseball +nctu.club.bicycle +nctu.club.buddhism +nctu.club.central-alumni +nctu.club.chinese-music +nctu.club.chorus +nctu.club.cie +nctu.club.counseling +nctu.club.ctbs +nctu.club.drama +nctu.club.fhl +nctu.club.fine-art +nctu.club.guitar +nctu.club.harmonica +nctu.club.heart +nctu.club.hsnu-alumni +nctu.club.jindan +nctu.club.kan-fu +nctu.club.karate +nctu.club.ks-alumni +nctu.club.midi +nctu.club.mingdao +nctu.club.mountain +nctu.club.nature +nctu.club.nctumovie +nctu.club.ocsa +nctu.club.orchestra +nctu.club.photo +nctu.club.popdance +nctu.club.rail +nctu.club.rover +nctu.club.skating +nctu.club.spring-shine +nctu.club.stamp +nctu.club.tai-chn +nctu.club.track-field +nctu.club.uu +nctu.cm.general +nctu.com.ecology +nctu.consult +nctu.cte +nctu.dept.cn +nctu.ee.general +nctu.ee.vlsi-cad +nctu.ensys +nctu.general +nctu.iim.general +nctu.lib.book +nctu.lib.news +nctu.mat-sci-eng +nctu.me.general +nctu.newgroups.announce +nctu.newgroups.d +nctu.newusers.questions +nctu.rec.cinema +nctu.rec.music +nctu.student-union.news +nctu.student-union.talk +nctu.talk +nctu.tem.general +nctu.test +ncu.bbs.activities +ncu.bbs.cdr +ncu.bbs.club.aborigines +ncu.bbs.club.akido +ncu.bbs.club.baseball +ncu.bbs.club.child +ncu.bbs.club.chorus +ncu.bbs.club.debate +ncu.bbs.club.folkdance +ncu.bbs.club.gf +ncu.bbs.club.guitar +ncu.bbs.club.hotdance +ncu.bbs.club.lulala +ncu.bbs.club.ms +ncu.bbs.club.photo +ncu.bbs.club.rover +ncu.bbs.club.serverlove +ncu.bbs.club.soccer +ncu.bbs.club.st +ncu.bbs.club.string +ncu.bbs.club.youth +ncu.bbs.csie +ncu.bbs.dormitory +ncu.bbs.fashion +ncu.bbs.ncudcn +ncu.bbs.netgame +ne.arts +ne.config +ne.food +ne.forsale +ne.general +ne.general.selected +ne.housing +ne.internet.services +ne.internet.services.ads +ne.internet.services.selected +ne.jobs +ne.jobs.company +ne.jobs.contract +ne.motorcycles +ne.motss +ne.nearnet.general +ne.nearnet.tech +ne.org.bcs +ne.org.decus +ne.org.neci.announce +ne.org.neci.general +ne.org.neci.nsp +ne.org.neci.software +ne.politics +ne.seminars +ne.singles +ne.transportation +ne.wanted +ne.weather +nebr.biz +nebr.edu +nebr.flame +nebr.gov +nebr.humor +nebr.jobs +nebr.marketplace +nebr.misc +nebr.news.announce +nebr.news.general +nebr.news.test +nebr.rec +nebr.sports.misc +nebr.sports.unl +nersc.announce +nersc.applications +nersc.basis +nersc.c++ +nersc.dce.pilot +nersc.dcom +nersc.down_times +nersc.ersug.disk +nersc.ersug.hpss +nersc.fusion.computing +nersc.general +nersc.grafl3 +nersc.graphics +nersc.meetings.workshops +nersc.move +nersc.rfc.software +nersc.sas +nersc.smp +nersc.software.shared +nersc.software.updates +nersc.spp +nersc.staff +nersc.test +nersc.tutorials +nersc.unitree +nersc.unix.differences +nersc.windows.x +net.announce +net.aquaria +net.aquaria.config +net.aquaria.marine +net.aviation.aerobatics +net.aviation.announcements +net.aviation.homebuilt +net.aviation.ifr +net.aviation.marketplace +net.aviation.military +net.aviation.piloting +net.aviation.rotorcraft +net.aviation.simulators +net.aviation.students +net.aviation.ultralight +net.bicycles.activism +net.bicycles.config +net.bicycles.general +net.bicycles.marketplace +net.bizarre +net.computers.datacom +net.computers.email.qmail +net.computers.embedded +net.computers.os.other +net.computers.os.unix.linux +net.computers.os.unix.rhapsody +net.computers.os.unix.solaris +net.computers.other +net.computers.telecom +net.config +net.config.feed-requests +net.config.leaks +net.config.unsound-sites +net.control +net.crafts.general +net.crafts.general.marketplace.commercial +net.crafts.general.marketplace.private +net.crafts.metalworking.general +net.crafts.textiles.general +net.crafts.textiles.marketplace.commercial +net.crafts.textiles.marketplace.private +net.crafts.woodworking.general +net.crafts.zymurgy.general +net.current-events.general +net.education.general +net.food.advocacy +net.food.announce +net.food.asian +net.food.bread +net.food.chocolate +net.food.coffee-klatch +net.food.desserts +net.food.drink.beer +net.food.drink.liquor +net.food.drink.wine +net.food.healthy +net.food.japanese +net.food.pizza +net.food.spicy +net.food.veg.cookery +net.food.veg.lifestyle +net.games.roleplaying.advocacy +net.games.roleplaying.announce +net.games.roleplaying.general +net.games.roleplaying.marketplace +net.games.roleplaying.theory +net.general +net.genre.config +net.genre.other +net.genre.sf.babylon5 +net.genre.sf.config +net.genre.sf.fandom +net.genre.sf.movies +net.genre.sf.other +net.genre.sf.star-trek +net.genre.sf.star-wars +net.genre.sf.tv +net.genre.sf.written +net.history.general +net.humour.bawdy +net.humour.config +net.humour.funny +net.humour.off-colour +net.humour.religion +net.internet.dns.names +net.internet.dns.policy +net.media.electronic +net.media.film-industry +net.media.movies +net.media.other +net.media.print +net.media.tv +net.medicine.clinical.general +net.medicine.education.general +net.medicine.policy.general +net.medicine.public-health.drugs +net.medicine.public-health.general +net.medicine.research.general +net.medicine.support.general +net.medicine.veterinary.general +net.music.classical.general +net.music.general +net.music.style.metal +net.music.style.ska +net.music.world.general +net.origins +net.religion.announce +net.religion.flame +net.religion.interfaith +net.religion.policy +net.science.biology.evolution +net.science.biology.misc +net.science.chemistry.misc +net.science.geology.misc +net.science.misc +net.science.physics.misc +net.sexuality.bondage +net.sexuality.general +net.sexuality.motss +net.sexuality.stories +net.sexuality.stories.discuss +net.sport.config +net.sport.football.ncaa +net.sport.football.nfl +net.sport.general +net.sport.hockey +net.subculture.tasteless +net.subculture.usenet +net.support.abuse.sexual +net.support.addiction.misc +net.support.announce +net.support.config +net.support.grief +net.support.psych.misc +net.test +net.theatre.acting +net.theatre.announce +net.theatre.musicals +net.theatre.plays +net.theatre.stagecraft +net.writing.general +net.writing.roleplaying.in-character.announce +net.writing.roleplaying.in-character.misc +net157.chat157 +net157.region11 +netbsd.current-users +netbsd.netbsd-bugs +netbsd.source-changes +netcom.general +netcom.shell.general +netcom.shell.mail +netcom.shell.software.nuglops +netcom.uk.jobs +netcom.uk.press-releases +netlink.announce +netlink.service +netlink.support +netlink.talk +netlink.users +netscape.public.admin +netscape.public.general +netscape.public.mozilla.announce +netscape.public.mozilla.beos +netscape.public.mozilla.builds +netscape.public.mozilla.crypto +netscape.public.mozilla.documentation +netscape.public.mozilla.general +netscape.public.mozilla.gtk +netscape.public.mozilla.i18n +netscape.public.mozilla.java +netscape.public.mozilla.layout +netscape.public.mozilla.license +netscape.public.mozilla.mail-news +netscape.public.mozilla.os2 +netscape.public.mozilla.patches +netscape.public.mozilla.qt +netscape.public.mozilla.rdf +netscape.public.mozilla.rhapsody +netscape.public.mozilla.ui +netscape.public.mozilla.wishlist +netscape.public.test +neworleans.general +neworleans.info +news.admin.announce +news.admin.censorship +news.admin.hierarchies +news.admin.misc +news.admin.net-abuse.bulletins +news.admin.net-abuse.email +news.admin.net-abuse.misc +news.admin.net-abuse.policy +news.admin.net-abuse.sightings +news.admin.net-abuse.usenet +news.admin.nocem +news.admin.technical +news.announce.conferences +news.announce.important +news.announce.newgroups +news.announce.newusers +news.answers +news.groups +news.groups.questions +news.groups.reviews +news.lists.filters +news.lists.misc +news.misc +news.newusers.questions +news.software.anu-news +news.software.b +news.software.misc +news.software.nn +news.software.nntp +news.software.readers +newsguy.announce +newsguy.general +newsguy.pub.biz.headlines +newsguy.pub.headlines +newsguy.pub.sports.headlines +newsguy.pub.us.gov.contracts.budgets +newsguy.pub.us.gov.defense +newsguy.pub.us.gov.faa +newsguy.pub.us.gov.fcc +newsguy.pub.us.gov.fda +newsguy.pub.us.gov.federal.reserve.fdic +newsguy.pub.us.gov.finance +newsguy.pub.us.gov.ftc +newsguy.pub.us.gov.military +newsguy.pub.us.gov.nasa +newsguy.pub.us.gov.society +newsguy.pub.us.gov.supreme-court +newsguy.pub.us.politics +newsguy.pub.world.africa.gov +newsguy.pub.world.asia.gov +newsguy.pub.world.australia.nz.oceania.gov +newsguy.pub.world.canada.gov +newsguy.pub.world.europe.russia-cis.gov +newsguy.pub.world.gov +newsguy.pub.world.gov.analysis +newsguy.pub.world.gov.democracy.human-rights +newsguy.pub.world.gov.diplomatic.security +newsguy.pub.world.gov.economic +newsguy.pub.world.gov.fire.police +newsguy.pub.world.gov.global.communications +newsguy.pub.world.gov.press-review +newsguy.pub.world.gov.public-service +newsguy.pub.world.gov.summary.48hours +newsguy.pub.world.gov.summary.french +newsguy.pub.world.gov.summary.russian +newsguy.pub.world.gov.summary.spanish +newsguy.pub.world.latin-american.caribbean.gov +newsguy.pub.world.mid-east.nafrica.sasia.gov +newsguy.pub.world.politics +nf.arts +nh.config +nh.forsale +nh.general +nh.housing +ni.announce +ni.business.chat +ni.buy-and-sell +ni.chat +ni.entertainment +ni.games.multiplayer +ni.motorcycles +ni.music +ni.net +ni.politics +ni.support +ni.test +ni.www +niagara.announce +niagara.arts +niagara.config +niagara.falls +niagara.falls.barrel +niagara.falls.cam +niagara.forsale +niagara.freenet +niagara.general +niagara.jobs +niagara.personals +niagara.police +niagara.test +niagara.wine +nil.general +nil.maps +nj.config +nj.events +nj.forsale +nj.general +nj.jobs +nj.jobs.resumes +nj.market.autos +nj.market.computers +nj.market.housing +nj.market.misc +nj.misc +nj.politics +nj.test +nj.wanted +nj.weather +nl.announce +nl.architectuur +nl.belastingen +nl.beurs +nl.burgerrechten +nl.comp.crypt +nl.comp.games +nl.comp.games.quake +nl.comp.isdn +nl.comp.os.linux +nl.comp.os.ms-windows +nl.comp.os.os2 +nl.comp.overig +nl.comp.programmeren +nl.comp.sys.mac +nl.culinair +nl.eeuwig.september +nl.erotiek.bdsm +nl.fiets +nl.foto +nl.gezondheid.medisch +nl.gezondheid.psychiatrie +nl.gezondheid.voeding +nl.huisdier.algemeen +nl.humor +nl.internet.algemeen +nl.internet.irc +nl.internet.misbruik +nl.internet.providers +nl.internet.welkom +nl.internet.www.announce +nl.internet.www.ontwerp +nl.juridisch +nl.kunst.film +nl.kunst.literatuur +nl.kunst.sf+fantasy +nl.markt.banen +nl.markt.comp +nl.markt.muziek +nl.markt.overig +nl.markt.vervoer +nl.markt.wonen +nl.media.e-zine +nl.media.krant +nl.media.radio +nl.media.satelliet +nl.media.tv +nl.misc +nl.motorfiets +nl.muziek +nl.naturisme +nl.newsgroups +nl.o+w.aio +nl.onderwijs.nieuwe-media +nl.politiek +nl.radio.amateur +nl.radio.scanners +nl.reizen +nl.religie +nl.roze +nl.scientology +nl.scouting +nl.sport.algemeen +nl.sport.bridge +nl.sport.duiken +nl.sport.overig +nl.sport.schaken +nl.sport.vissen +nl.sport.voetbal +nl.support.alcoholisme +nl.support.chronisch-ziek.algemeen +nl.support.transseksueel +nl.taal +nl.telecom +nl.test +nl.tuinen +nl.vogels.vogelaar +nl.wandel +nl.wetenschap +nlnet.announce +nlnet.misc +nlnet.test +nm.config +nm.forsale +nm.general +nm.jobs +nm.test +no.alkohol +no.alt.arkiv +no.alt.config +no.alt.diskusjoner +no.alt.fan.de-lillos +no.alt.flame +no.alt.frustrasjoner +no.alt.gledesutbrudd +no.alt.god.jul +no.alt.gullkorn +no.alt.hunder +no.alt.irc-treff +no.alt.katter +no.alt.mat +no.alt.mat.drikke +no.alt.motorsykler +no.alt.pompel-og-pilt +no.alt.radio-tv.irma-1000 +no.alt.sjokolade +no.alt.tegneserier +no.bil +no.biz.annonser +no.biz.annonser.data +no.biz.diskusjoner +no.biz.nettilbydere +no.ef +no.film +no.folklore.generelt +no.folklore.overtro +no.general +no.it.diverse +no.it.emacs +no.it.os.os2 +no.it.programmering.c +no.it.programmering.diverse +no.it.programmering.lisp +no.it.programmering.perl +no.it.tjenester.www.design +no.it.tjenester.www.diverse +no.it.tjenester.www.html +no.it.tjenester.www.programmering +no.jus +no.kjemi +no.kultur.fritid.friluftsliv +no.linux +no.mac +no.mail.drift +no.marked +no.marked.bil +no.marked.bolig +no.marked.data +no.marked.diskusjon +no.marked.jobb +no.ms-windows +no.musikk +no.musikk.klassisk +no.net +no.news.diverse +no.news.drift +no.org.efn.diskusjon +no.org.efn.nyheter +no.pc +no.prat.politikk +no.prat.seksualitet +no.psykologi +no.reiser +no.religion +no.skole.diverse +no.slekt +no.slekt.etterlysning +no.slekt.programmer +no.spill +no.spill.rollespill +no.sport.diverse +no.sport.fotball +no.sport.orientering +no.sport.volleyball +no.stortinget +no.svar +no.tele +no.test +no.unix +no.velkommen +no.x +nord.admin +nord.allgemein +nord.fundgrube +nord.kultur.misc +nord.kultur.theater +nord.org.buergernetz-sh +nord.org.misc +nord.regio.daenemark +nord.regio.mecklenburg-vp +nord.regio.niedersachs +nord.regio.schleswig-h.flensburg +nord.regio.schleswig-h.misc +nord.regio.schleswig-h.neumuenster +nord.regio.schleswig-h.rendsburg +nord.termine +nordunet.edu.suppl-instr +nordunet.talk.skandinaviska +north.allgemein +north.bremen +north.bremen.deceased +north.config.maps +north.hardware +north.markt +north.politik +north.software +north.test +north.verwaltung +ns.announce +ns.biz.adiac +ns.education +ns.education.faculty +ns.general +ns.nstn.usergroup +ntu.club.cie +nv.bi +nv.config +nv.forsale +nv.general +nv.jobs +nv.motss +nv.personals +nv.personals.fsf +nv.personals.fsm +nv.personals.msf +nv.personals.msm +nv.personals.swingers +nv.singles +nv.test +ny.config +ny.forsale +ny.general +ny.nysernet +ny.nysernet.map +ny.nysernet.maps +ny.nysernet.nic +ny.nysernet.nysertech +ny.politics +ny.seminars +ny.syr +ny.syr.educators +ny.test +ny.wanted +nyc.announce +nyc.config +nyc.food +nyc.general +nyc.jobs.contract +nyc.jobs.misc +nyc.jobs.offered +nyc.jobs.wanted +nyc.market.housing +nyc.motorcycles +nyc.personals +nyc.politics +nyc.seminars +nyc.singles +nyc.test +nyc.transit +nynex.trd.eslab +nyu.comp-priv +nyu.nupop +nyu.pmail +nyu.pop +nz.arts +nz.biz.misc +nz.comp +nz.general +nz.net.admin +nz.net.announce +nz.org.isocnz +nz.politics +nz.politics.announce +nz.rec +nz.reg.auckland.general +nz.reg.bay-of-plenty.general +nz.reg.christchurch.general +nz.reg.dunedin.general +nz.reg.gisborne.general +nz.reg.hamilton.general +nz.reg.hawkes-bay.general +nz.reg.manawatu.general +nz.reg.nelson.general +nz.reg.northland.general +nz.reg.southland.general +nz.reg.taranaki.general +nz.reg.wellington.general +nz.reg.west-coast.general +nz.soc +nz.soc.green +nz.soc.queer +nz.soc.religion +nz.test +nz.wanted +oar.noc +oar.tech +oar.users +oau.biz +oau.config +oau.forsale +oau.news +oau.sources +oau.test +oc.acm +oc.eats +oc.forsale +oc.general +oc.test +oc.wanted +ogi.general +oh.acad-sci +oh.biz +oh.cast +oh.chem +oh.forsale +oh.general +oh.jobs +oh.k12 +oh.news +oh.newsadmin +oh.osc.software +oh.test +ok.admin +ok.announce +ok.edmond.online +ok.general +ok.marketplace +ok.test +ok.tulsa.general +okinawa.books +okinawa.chat +okinawa.comp.editors +okinawa.comp.misc +okinawa.events +okinawa.food.misc +okinawa.general +okinawa.life.misc +okinawa.mail-lists.nirai-kanai +okinawa.misc +okinawa.networks +okinawa.networks.bbs +okinawa.networks.isdn +okinawa.networks.uucp +okinawa.news.groups +okinawa.news.lists +okinawa.news.usage +okinawa.os.linux +okinawa.os.misc +okinawa.os.unix +okinawa.rec.games +okinawa.rec.misc +okinawa.rec.music +okinawa.rec.travel +okinawa.recycle +okinawa.soc.misc +okinawa.sources +okinawa.sources.d +okinawa.sports.misc +okinawa.sys.amiga +okinawa.sys.ibmpc +okinawa.sys.mac +okinawa.sys.misc +okinawa.sys.next +okinawa.sys.sun +okinawa.test +on-line.air-warrior.666th-etal +ont.archives +ont.bicycle +ont.conditions +ont.events +ont.forsale +ont.general +ont.jobs +ont.micro +ont.politics +ont.sf-lovers +ont.singles +ont.test +ont.uucp +or.forsale +or.general +or.ojgse.cis641 +or.politics +or.test +osu.acm +osu.ai +osu.ai.aim +osu.ai.hardware.sun +osu.ai.software.ext.excl +osu.ai.software.ext.frame +osu.chinese +osu.faculty.council +osu.for-sale +osu.general +osu.grads +osu.ibm.pc +osu.ibmpc +osu.indian +osu.international +osu.jobs +osu.journalism.general +osu.lisp +osu.mac +osu.magnus +osu.music +osu.network +osu.opinion +osu.opinion.libertarian +osu.sports +osu.sybase +osu.tex +osu.women +ott.business.ads +ott.business.ads.computing +ott.community.lets +ott.community.motss +ott.config +ott.education.homeschooling +ott.events +ott.forsale.computing +ott.forsale.other +ott.general +ott.housing +ott.jobs +ott.motorcycles +ott.online +ott.personals +ott.politics +ott.rec.canoe-kayak +ott.rec.sailing +ott.rides +ott.singles +ott.test +ott.vietnamese +ott.weather +own.answers +own.eco.lets +own.eco.permaculture +own.health.aromatherapy +own.health.bach_flowers +own.health.herbs +own.health.homoeopathy +own.health.misc +own.music +own.natives +own.news.announce +own.news.groups +own.rainbow +own.tibet.misc +own.tibet.wtn +pa.admin +pa.config +pa.environment +pa.forsale +pa.general +pa.hbg.forsale +pa.hbg.general +pa.hbg.wanted +pa.jobs.offered +pa.jobs.wanted +pa.lv.forsale +pa.lv.general +pa.lv.wanted +pa.motorcycle +pa.motss +pa.ne.forsale +pa.ne.general +pa.ne.politics +pa.ne.wanted +pa.politics +pa.rdg.forsale +pa.rdg.general +pa.rdg.wanted +pa.smallbusiness +pa.test +pa.wanted +pagesat.stats +pbinfo.amiga +pdaxs.ads.antiques +pdaxs.ads.apartments +pdaxs.ads.appliances +pdaxs.ads.audio_video +pdaxs.ads.boats +pdaxs.ads.books +pdaxs.ads.cars +pdaxs.ads.cars.audio +pdaxs.ads.cars.misc +pdaxs.ads.cars.rv +pdaxs.ads.cars.service +pdaxs.ads.clothing +pdaxs.ads.computers +pdaxs.ads.fencing +pdaxs.ads.food +pdaxs.ads.furniture +pdaxs.ads.homes.n +pdaxs.ads.homes.ne +pdaxs.ads.homes.nw +pdaxs.ads.homes.se +pdaxs.ads.homes.sw +pdaxs.ads.hotels +pdaxs.ads.jewelry +pdaxs.ads.lostrfound +pdaxs.ads.misc +pdaxs.ads.movies +pdaxs.ads.music +pdaxs.ads.notices +pdaxs.ads.office +pdaxs.ads.personals +pdaxs.ads.printing +pdaxs.ads.real_estate +pdaxs.ads.restaurants +pdaxs.ads.sales +pdaxs.ads.sports +pdaxs.ads.tickets +pdaxs.ads.tools +pdaxs.ads.wanted +pdaxs.arts.auditions +pdaxs.arts.museums +pdaxs.arts.music +pdaxs.arts.print +pdaxs.arts.radio +pdaxs.arts.tv +pdaxs.calendar.art +pdaxs.calendar.business +pdaxs.calendar.computers +pdaxs.calendar.misc +pdaxs.calendar.music +pdaxs.calendar.volunteers +pdaxs.games.board +pdaxs.games.bridge +pdaxs.games.chess +pdaxs.games.misc +pdaxs.games.rpg +pdaxs.issues.democrats +pdaxs.issues.education +pdaxs.issues.portland +pdaxs.issues.republicans +pdaxs.jobs.clerical +pdaxs.jobs.computers +pdaxs.jobs.construction +pdaxs.jobs.delivery +pdaxs.jobs.domestic +pdaxs.jobs.engineering +pdaxs.jobs.management +pdaxs.jobs.misc +pdaxs.jobs.restaurants +pdaxs.jobs.resumes +pdaxs.jobs.retail +pdaxs.jobs.sales +pdaxs.jobs.secretary +pdaxs.jobs.temporary +pdaxs.jobs.volunteers +pdaxs.jobs.wanted +pdaxs.religion.christian +pdaxs.religion.jewish +pdaxs.religion.misc +pdaxs.religion.moslem +pdaxs.religion.newage +pdaxs.schools.acting +pdaxs.schools.cooking +pdaxs.schools.dance +pdaxs.schools.fitness +pdaxs.schools.kids +pdaxs.schools.martial +pdaxs.schools.misc +pdaxs.schools.music +pdaxs.schools.sports +pdaxs.services.accounting +pdaxs.services.appliance +pdaxs.services.carpentry +pdaxs.services.children +pdaxs.services.cleaning +pdaxs.services.computers +pdaxs.services.consulting +pdaxs.services.counseling +pdaxs.services.electrical +pdaxs.services.financial +pdaxs.services.fitness +pdaxs.services.gardening +pdaxs.services.graphics +pdaxs.services.insurance +pdaxs.services.int_design +pdaxs.services.landscaping +pdaxs.services.legal +pdaxs.services.massage +pdaxs.services.misc +pdaxs.services.moving +pdaxs.services.music +pdaxs.services.painting +pdaxs.services.pets +pdaxs.services.photo +pdaxs.services.plumbing +pdaxs.services.roofing +pdaxs.services.security +pdaxs.services.storage +pdaxs.services.wordproc +pdaxs.sports.baseball +pdaxs.sports.basketball +pdaxs.sports.football +pdaxs.sports.golf +pdaxs.sports.rotisserie +pdx.arts +pdx.books +pdx.computing +pdx.forsale +pdx.games +pdx.general +pdx.golf +pdx.movies +pdx.music +pdx.online +pdx.running +pdx.singles +pdx.slug +pdx.soc +pdx.sports +pdx.telecom +pdx.test +pdx.utek +pdx.weather +pei.crafts +pgh.apartments +pgh.config +pgh.cpsr +pgh.food +pgh.forsale +pgh.freenet +pgh.general +pgh.jobs.offered +pgh.jobs.wanted +pgh.motss +pgh.next-users +pgh.opinion +pgh.org.cnbc +pgh.org.sca +pgh.org.uccp +pgh.singles +pgh.test +phl.announce +phl.bicycles +phl.config +phl.dance +phl.food +phl.forsale +phl.housing +phl.internet +phl.jobs.offered +phl.jobs.wanted +phl.media +phl.misc +phl.motss +phl.music +phl.outdoors +phl.pagan +phl.scanner +phl.singles +phl.sports +phl.test +phl.theatre +phl.transportation +phl.wanted +phl.weather +phri.general +phx.buy-sell-trade +phx.eats +phx.general +phx.indirect.announce +phx.indirect.bud +phx.indirect.help +phx.indirect.help.mac +phx.indirect.help.pc +phx.indirect.techsuport +phx.indirect.test +phx.jobs.wanted +phx.onramp.announce +phx.onramp.general +phx.onramp.help +phx.onramp.support +phx.test +pipex.admin +pipex.dialup +pipex.info +pipex.news +pipex.techs +pipex.tickets +pitt.comp.general +pitt.comp.sys.ibm-pc +pitt.comp.sys.mac +pitt.comp.sys.unix +pitt.comp.sys.vms +pitt.config +pl.announce.newgroups +pl.answers +pl.biznes +pl.biznes.banki +pl.biznes.wgpw +pl.comp.bazy-danych +pl.comp.demoscena +pl.comp.dtp +pl.comp.dtp.tex +pl.comp.dtp.tex.gust +pl.comp.grafika +pl.comp.intranet +pl.comp.lang.c +pl.comp.lang.delphi +pl.comp.lang.java +pl.comp.lang.perl +pl.comp.lang.vbasic +pl.comp.mail +pl.comp.mail.mta +pl.comp.networking +pl.comp.nowe-programy +pl.comp.objects +pl.comp.ogonki +pl.comp.os.advocacy +pl.comp.os.freebsd +pl.comp.os.hp-ux +pl.comp.os.linux +pl.comp.os.os2 +pl.comp.os.unix +pl.comp.os.win3 +pl.comp.os.win95 +pl.comp.os.winnt +pl.comp.pecet +pl.comp.programming +pl.comp.security +pl.comp.sys.amiga +pl.comp.sys.atari +pl.comp.sys.macintosh +pl.comp.sys.novell +pl.comp.sys.sun.admin +pl.comp.sys.xwindow +pl.comp.tlumaczenia +pl.comp.www +pl.comp.www.nowe-strony +pl.fidonet.bramka +pl.gazety.donosy +pl.gazety.dyrdymalki +pl.gazety.gazeta +pl.hum.poezja +pl.hum.tlumaczenia +pl.internet.komunikaty +pl.internet.nowosci +pl.irc +pl.listserv.chomor-l +pl.listserv.dziennikarz +pl.listserv.plotki +pl.listserv.polwro +pl.misc.budowanie +pl.misc.elektronika +pl.misc.kolej +pl.misc.militaria +pl.misc.paranauki +pl.misc.samochody +pl.misc.telefonia +pl.misc.telefonia.gsm +pl.misc.telefonia.isdn +pl.misc.transport +pl.news.admin +pl.news.czytniki +pl.news.nowe-grupy +pl.ogloszenia.kupie +pl.ogloszenia.rozne +pl.ogloszenia.sprzedam +pl.org.psi +pl.praca.dyskusje +pl.praca.oferowana +pl.praca.szukana +pl.rec.anime +pl.rec.audio +pl.rec.fantastyka.sf-f +pl.rec.fantastyka.starwars +pl.rec.film +pl.rec.film.animowany +pl.rec.foto +pl.rec.gry.karciane +pl.rec.gry.komputerowe +pl.rec.gry.komputerowe.sprzet +pl.rec.gry.konsole +pl.rec.gry.mud +pl.rec.gry.rpg +pl.rec.gry.szachy +pl.rec.hihot +pl.rec.humor.najlepsze +pl.rec.kino-domowe +pl.rec.ksiazki +pl.rec.kuchnia +pl.rec.lotnictwo +pl.rec.modelarstwo +pl.rec.motocykle +pl.rec.muzyka +pl.rec.muzyka.bin +pl.rec.muzyka.gitara +pl.rec.muzyka.jazz +pl.rec.muzyka.rock +pl.rec.muzyka.techno +pl.rec.nurkowanie +pl.rec.ogrody +pl.rec.paralotnie +pl.rec.radio +pl.rec.radio.amatorskie +pl.rec.radio.cb +pl.rec.rowery +pl.rec.sport +pl.rec.sport.koszykowka +pl.rec.sport.motorowe +pl.rec.sport.pilka-nozna +pl.rec.telewizja +pl.rec.travel +pl.rec.wedkarstwo +pl.rec.windsurfing +pl.rec.zbieractwo +pl.rec.zeglarstwo +pl.rec.zeglarstwo.szanty +pl.rec.zwierzaki +pl.regionalne.krakow +pl.regionalne.lublin +pl.regionalne.szczecin +pl.regionalne.trojmiasto +pl.regionalne.warszawa +pl.regionalne.wroclaw +pl.sci.chemia +pl.sci.filozofia +pl.sci.fizyka +pl.sci.historia +pl.sci.kosmos +pl.sci.matematyka +pl.sci.medycyna +pl.sci.psychologia +pl.soc.dekadentyzm +pl.soc.dzieci +pl.soc.edukacja +pl.soc.edukacja.szkola +pl.soc.inwalidzi +pl.soc.polityka +pl.soc.polityka.wybory +pl.soc.prawo +pl.soc.prawo.podatki +pl.soc.religia +pl.soc.seks +pl.soc.seks.towarzyskie +pl.soc.wegetarianizm +pl.soc.zieloni +pl.test +pnw.education +pnw.forsale +pnw.general +pnw.motss +pnw.news +pnw.personals +pnw.sys.sun +pnw.test +posc.announce +posc.application.views +posc.change_request +posc.change_request.bcs +posc.change_request.browser +posc.change_request.data_access +posc.change_request.data_model +posc.change_request.ref_entity +posc.change_request.si +posc.change_request.ui +posc.migration +posc.sysadm +posc.test +prg.jobs +princeton.general +princeton.grad +private.lab.lcs +private.wmnst01.bulletin.board +pronet.kneipe +psi.general +psi.nrg +psi.nwg +psi.psilink +psi.psinet +psi.stats +psi.test +psi.tickets +pt.binarios +pt.ciencia.geral +pt.comp.geral +pt.comp.so.linux +pt.geral +pt.internet +pt.internet.usenet +pt.internet.www +pt.mercado +pt.mercado.emprego +pt.mercado.imobiliario +pt.mercado.informatica +pt.mercado.veiculos +pt.rec.aquaria +pt.rec.artes +pt.rec.desporto +pt.rec.geral +pt.rec.jogos.computador +pt.rec.musica.geral +pt.rec.radio.amadorismo +pt.soc.economia +pt.soc.ensino +pt.soc.escutismo +pt.soc.geral +pt.soc.politica +pt.soc.sexologia +pt.tec.geral +qc.general +qc.jobs +qc.politique +qtp.bulletin +qtp.general +rabbit.config +rabbit.customers +rabbit.maps +rabbit.net-config +rabbit.q-and-a +rabbit.tech-info +rain.bsdi-users +rain.firewalls +rain.smail3 +rain.sources +rain.sources.d +realtynet.canada-intl +realtynet.commercial +realtynet.commercial.ak-northern +realtynet.commercial.ak-southern +realtynet.commercial.al +realtynet.commercial.az +realtynet.commercial.ca-central +realtynet.commercial.ca-northern +realtynet.commercial.ca-southern +realtynet.commercial.co +realtynet.commercial.ct +realtynet.commercial.dc +realtynet.commercial.de +realtynet.commercial.fl-central +realtynet.commercial.fl-northern +realtynet.commercial.fl-southern +realtynet.commercial.ga +realtynet.commercial.hi +realtynet.commercial.ia +realtynet.commercial.id +realtynet.commercial.il +realtynet.commercial.in +realtynet.commercial.ks +realtynet.commercial.ky +realtynet.commercial.ma +realtynet.commercial.md +realtynet.commercial.me +realtynet.commercial.mi +realtynet.commercial.mn +realtynet.commercial.mo +realtynet.commercial.ms +realtynet.commercial.mt +realtynet.commercial.nc +realtynet.commercial.nd +realtynet.commercial.ne +realtynet.commercial.nh +realtynet.commercial.nj +realtynet.commercial.nm +realtynet.commercial.ny +realtynet.commercial.oh +realtynet.commercial.ok +realtynet.commercial.or +realtynet.commercial.pa +realtynet.commercial.ri +realtynet.commercial.sc +realtynet.commercial.sd +realtynet.commercial.tn +realtynet.commercial.tx-northeast +realtynet.commercial.tx-northwest +realtynet.commercial.tx-southeast +realtynet.commercial.tx-southwest +realtynet.commercial.ut +realtynet.commercial.va +realtynet.commercial.vi +realtynet.commercial.vt +realtynet.commercial.wa +realtynet.commercial.wi +realtynet.commercial.wv +realtynet.commercial.wy +realtynet.east +realtynet.general +realtynet.government +realtynet.invest +realtynet.lending +realtynet.mid +realtynet.qa +realtynet.residential +realtynet.south +realtynet.west +rec.animals.wildlife +rec.answers +rec.antiques +rec.antiques.bottles +rec.antiques.marketplace +rec.antiques.radio+phono +rec.aquaria.freshwater.cichlids +rec.aquaria.freshwater.goldfish +rec.aquaria.freshwater.misc +rec.aquaria.freshwater.plants +rec.aquaria.marine.misc +rec.aquaria.marine.reefs +rec.aquaria.marketplace +rec.aquaria.misc +rec.aquaria.tech +rec.arts.animation +rec.arts.anime.creative +rec.arts.anime.fandom +rec.arts.anime.games +rec.arts.anime.info +rec.arts.anime.marketplace +rec.arts.anime.misc +rec.arts.anime.models +rec.arts.anime.music +rec.arts.ascii +rec.arts.bodyart +rec.arts.bonsai +rec.arts.books +rec.arts.books.childrens +rec.arts.books.hist-fiction +rec.arts.books.marketplace +rec.arts.books.reviews +rec.arts.books.tolkien +rec.arts.comics.alternative +rec.arts.comics.creative +rec.arts.comics.dc.lsh +rec.arts.comics.dc.universe +rec.arts.comics.dc.vertigo +rec.arts.comics.elfquest +rec.arts.comics.european +rec.arts.comics.info +rec.arts.comics.marketplace +rec.arts.comics.marvel.universe +rec.arts.comics.marvel.xbooks +rec.arts.comics.misc +rec.arts.comics.other-media +rec.arts.comics.reviews +rec.arts.comics.strips +rec.arts.dance +rec.arts.disney.animation +rec.arts.disney.announce +rec.arts.disney.merchandise +rec.arts.disney.misc +rec.arts.disney.parks +rec.arts.drwho +rec.arts.drwho.info +rec.arts.erotica +rec.arts.fine +rec.arts.henson+muppets +rec.arts.int-fiction +rec.arts.manga +rec.arts.marching.band.college +rec.arts.marching.band.high-school +rec.arts.marching.colorguard +rec.arts.marching.drumcorps +rec.arts.marching.misc +rec.arts.marching.percussion +rec.arts.misc +rec.arts.movies.announce +rec.arts.movies.current-films +rec.arts.movies.erotica +rec.arts.movies.international +rec.arts.movies.lists+surveys +rec.arts.movies.local.indian +rec.arts.movies.misc +rec.arts.movies.movie-going +rec.arts.movies.past-films +rec.arts.movies.people +rec.arts.movies.production +rec.arts.movies.production.sound +rec.arts.movies.reviews +rec.arts.movies.tech +rec.arts.mystery +rec.arts.origami +rec.arts.poems +rec.arts.prose +rec.arts.puppetry +rec.arts.sf.announce +rec.arts.sf.composition +rec.arts.sf.fandom +rec.arts.sf.marketplace +rec.arts.sf.misc +rec.arts.sf.movies +rec.arts.sf.reviews +rec.arts.sf.science +rec.arts.sf.starwars.collecting.customizing +rec.arts.sf.starwars.collecting.misc +rec.arts.sf.starwars.collecting.vintage +rec.arts.sf.starwars.games +rec.arts.sf.starwars.info +rec.arts.sf.starwars.misc +rec.arts.sf.tv +rec.arts.sf.tv.babylon5 +rec.arts.sf.tv.babylon5.info +rec.arts.sf.tv.babylon5.moderated +rec.arts.sf.tv.quantum-leap +rec.arts.sf.written +rec.arts.sf.written.robert-jordan +rec.arts.startrek.current +rec.arts.startrek.fandom +rec.arts.startrek.info +rec.arts.startrek.misc +rec.arts.startrek.reviews +rec.arts.startrek.tech +rec.arts.theatre.misc +rec.arts.theatre.musicals +rec.arts.theatre.plays +rec.arts.theatre.stagecraft +rec.arts.tv +rec.arts.tv.interactive +rec.arts.tv.mst3k.announce +rec.arts.tv.mst3k.misc +rec.arts.tv.soaps.abc +rec.arts.tv.soaps.cbs +rec.arts.tv.soaps.misc +rec.arts.tv.uk.comedy +rec.arts.tv.uk.coronation-st +rec.arts.tv.uk.eastenders +rec.arts.tv.uk.emmerdale +rec.arts.tv.uk.misc +rec.arts.wobegon +rec.audio.car +rec.audio.high-end +rec.audio.marketplace +rec.audio.misc +rec.audio.opinion +rec.audio.pro +rec.audio.tech +rec.audio.tubes +rec.autos.4x4 +rec.autos.antique +rec.autos.driving +rec.autos.makers.chrysler +rec.autos.makers.ford.explorer +rec.autos.makers.ford.mustang +rec.autos.makers.honda +rec.autos.makers.jeep+willys +rec.autos.makers.mazda.miata +rec.autos.makers.saturn +rec.autos.makers.vw.aircooled +rec.autos.makers.vw.watercooled +rec.autos.marketplace +rec.autos.misc +rec.autos.rod-n-custom +rec.autos.rotary +rec.autos.simulators +rec.autos.sport.f1 +rec.autos.sport.indy +rec.autos.sport.info +rec.autos.sport.misc +rec.autos.sport.nascar +rec.autos.sport.rally +rec.autos.sport.tech +rec.autos.tech +rec.aviation.aerobatics +rec.aviation.announce +rec.aviation.answers +rec.aviation.balloon +rec.aviation.hang-gliding +rec.aviation.homebuilt +rec.aviation.ifr +rec.aviation.marketplace +rec.aviation.military +rec.aviation.military.naval +rec.aviation.misc +rec.aviation.owning +rec.aviation.piloting +rec.aviation.powerchutes +rec.aviation.products +rec.aviation.questions +rec.aviation.restoration +rec.aviation.rotorcraft +rec.aviation.simulators +rec.aviation.soaring +rec.aviation.stories +rec.aviation.student +rec.aviation.ultralight +rec.backcountry +rec.bicycles.marketplace +rec.bicycles.misc +rec.bicycles.off-road +rec.bicycles.racing +rec.bicycles.rides +rec.bicycles.soc +rec.bicycles.tech +rec.birds +rec.boats +rec.boats.building +rec.boats.cruising +rec.boats.electronics +rec.boats.marketplace +rec.boats.paddle +rec.boats.racing +rec.boats.racing.power +rec.climbing +rec.collecting +rec.collecting.books +rec.collecting.cards.discuss +rec.collecting.cards.non-sports +rec.collecting.coins +rec.collecting.dolls +rec.collecting.paper-money +rec.collecting.phonecards +rec.collecting.pins +rec.collecting.postal-history +rec.collecting.sport.baseball +rec.collecting.sport.basketball +rec.collecting.sport.football +rec.collecting.sport.hockey +rec.collecting.sport.misc +rec.collecting.stamps +rec.collecting.stamps.discuss +rec.collecting.stamps.marketplace +rec.collecting.villages +rec.crafts.beads +rec.crafts.brewing +rec.crafts.carving +rec.crafts.dollhouses +rec.crafts.glass +rec.crafts.jewelry +rec.crafts.knots +rec.crafts.marketplace +rec.crafts.metalworking +rec.crafts.misc +rec.crafts.polymer-clay +rec.crafts.pottery +rec.crafts.rubberstamps +rec.crafts.textiles.machine-knit +rec.crafts.textiles.marketplace +rec.crafts.textiles.misc +rec.crafts.textiles.needlework +rec.crafts.textiles.quilting +rec.crafts.textiles.sewing +rec.crafts.textiles.yarn +rec.crafts.winemaking +rec.crafts.woodturning +rec.drugs.announce +rec.drugs.cannabis +rec.drugs.chemistry +rec.drugs.misc +rec.drugs.psychedelic +rec.drugs.smart +rec.equestrian +rec.folk-dancing +rec.food.baking +rec.food.chocolate +rec.food.cooking +rec.food.cuisine.jewish +rec.food.drink +rec.food.drink.beer +rec.food.drink.coffee +rec.food.drink.tea +rec.food.equipment +rec.food.historic +rec.food.marketplace +rec.food.preserving +rec.food.recipes +rec.food.restaurants +rec.food.sourdough +rec.food.veg +rec.food.veg.cooking +rec.gambling.blackjack +rec.gambling.blackjack.moderated +rec.gambling.craps +rec.gambling.lottery +rec.gambling.misc +rec.gambling.other-games +rec.gambling.poker +rec.gambling.racing +rec.gambling.sports +rec.games.abstract +rec.games.backgammon +rec.games.board +rec.games.board.ce +rec.games.board.marketplace +rec.games.bolo +rec.games.bridge +rec.games.bridge.okbridge +rec.games.chess.analysis +rec.games.chess.computer +rec.games.chess.misc +rec.games.chess.play-by-email +rec.games.chess.politics +rec.games.chinese-chess +rec.games.computer.doom.announce +rec.games.computer.doom.editing +rec.games.computer.doom.help +rec.games.computer.doom.misc +rec.games.computer.doom.playing +rec.games.computer.puzzle +rec.games.computer.quake.announce +rec.games.computer.quake.editing +rec.games.computer.quake.misc +rec.games.computer.quake.playing +rec.games.computer.quake.quake-c +rec.games.computer.quake.servers +rec.games.computer.stars +rec.games.computer.ultima.dragons +rec.games.computer.ultima.online +rec.games.computer.ultima.series +rec.games.computer.xpilot +rec.games.corewar +rec.games.design +rec.games.diplomacy +rec.games.empire +rec.games.frp.advocacy +rec.games.frp.announce +rec.games.frp.archives +rec.games.frp.cyber +rec.games.frp.dnd +rec.games.frp.gurps +rec.games.frp.industry +rec.games.frp.live-action +rec.games.frp.marketplace +rec.games.frp.misc +rec.games.frp.storyteller +rec.games.frp.super-heroes +rec.games.go +rec.games.int-fiction +rec.games.mahjong +rec.games.mecha +rec.games.miniatures.historical +rec.games.miniatures.misc +rec.games.miniatures.warhammer +rec.games.misc +rec.games.mud.admin +rec.games.mud.announce +rec.games.mud.diku +rec.games.mud.lp +rec.games.mud.misc +rec.games.mud.tiny +rec.games.netrek +rec.games.pbm +rec.games.pinball +rec.games.playing-cards +rec.games.programmer +rec.games.roguelike.adom +rec.games.roguelike.angband +rec.games.roguelike.announce +rec.games.roguelike.development +rec.games.roguelike.misc +rec.games.roguelike.moria +rec.games.roguelike.nethack +rec.games.roguelike.rogue +rec.games.trading-cards.announce +rec.games.trading-cards.jyhad +rec.games.trading-cards.magic.misc +rec.games.trading-cards.magic.rules +rec.games.trading-cards.magic.strategy +rec.games.trading-cards.marketplace.magic.auctions +rec.games.trading-cards.marketplace.magic.sales +rec.games.trading-cards.marketplace.magic.trades +rec.games.trading-cards.marketplace.misc +rec.games.trading-cards.misc +rec.games.trading-cards.startrek +rec.games.trivia +rec.games.vectrex +rec.games.video.3do +rec.games.video.advocacy +rec.games.video.arcade +rec.games.video.arcade.collecting +rec.games.video.arcade.marketplace +rec.games.video.atari +rec.games.video.cd-i +rec.games.video.cd32 +rec.games.video.classic +rec.games.video.marketplace +rec.games.video.misc +rec.games.video.nintendo +rec.games.video.sega +rec.games.video.sony +rec.games.xtank.play +rec.games.xtank.programmer +rec.gardens +rec.gardens.ecosystems +rec.gardens.edible +rec.gardens.orchids +rec.gardens.roses +rec.guns +rec.heraldry +rec.humor +rec.humor.d +rec.humor.funny +rec.humor.funny.reruns +rec.humor.jewish +rec.humor.oracle +rec.humor.oracle.d +rec.hunting +rec.hunting.dogs +rec.juggling +rec.kites +rec.knives +rec.mag +rec.mag.dargon +rec.martial-arts +rec.martial-arts.moderated +rec.misc +rec.models.railroad +rec.models.rc.air +rec.models.rc.helicopter +rec.models.rc.land +rec.models.rc.misc +rec.models.rc.soaring +rec.models.rc.water +rec.models.rockets +rec.models.scale +rec.motorcycles +rec.motorcycles.dirt +rec.motorcycles.harley +rec.motorcycles.racing +rec.motorcycles.tech +rec.music.a-cappella +rec.music.afro-latin +rec.music.ambient +rec.music.arabic +rec.music.artists.amy-grant +rec.music.artists.ani-difranco +rec.music.artists.beach-boys +rec.music.artists.bruce-hornsby +rec.music.artists.danny-elfman +rec.music.artists.debbie-gibson +rec.music.artists.emmylou-harris +rec.music.artists.extreme +rec.music.artists.kings-x +rec.music.artists.kiss +rec.music.artists.mariah-carey +rec.music.artists.paul-mccartney +rec.music.artists.queensryche +rec.music.artists.reb-st-james +rec.music.artists.springsteen +rec.music.artists.stevie-nicks +rec.music.artists.wallflowers +rec.music.beatles +rec.music.beatles.info +rec.music.beatles.moderated +rec.music.bluenote +rec.music.bluenote.blues +rec.music.brazilian +rec.music.celtic +rec.music.christian +rec.music.classical +rec.music.classical.contemporary +rec.music.classical.guitar +rec.music.classical.performing +rec.music.classical.recordings +rec.music.collecting.cd +rec.music.collecting.misc +rec.music.collecting.vinyl +rec.music.compose +rec.music.country.old-time +rec.music.country.western +rec.music.dementia +rec.music.dylan +rec.music.early +rec.music.filipino +rec.music.filk +rec.music.folk +rec.music.folk.tablature +rec.music.funky +rec.music.gaffa +rec.music.gdead +rec.music.hip-hop +rec.music.indian.classical +rec.music.indian.misc +rec.music.industrial +rec.music.info +rec.music.iranian +rec.music.makers +rec.music.makers.bagpipe +rec.music.makers.bands +rec.music.makers.bass +rec.music.makers.bowed-strings +rec.music.makers.builders +rec.music.makers.choral +rec.music.makers.dulcimer +rec.music.makers.french-horn +rec.music.makers.guitar +rec.music.makers.guitar.acoustic +rec.music.makers.guitar.jazz +rec.music.makers.guitar.tablature +rec.music.makers.marketplace +rec.music.makers.percussion +rec.music.makers.percussion.hand-drum +rec.music.makers.piano +rec.music.makers.saxophone +rec.music.makers.songwriting +rec.music.makers.squeezebox +rec.music.makers.synth +rec.music.makers.trumpet +rec.music.marketplace.cd +rec.music.marketplace.misc +rec.music.marketplace.vinyl +rec.music.misc +rec.music.movies +rec.music.newage +rec.music.opera +rec.music.phish +rec.music.progressive +rec.music.promotional +rec.music.ragtime +rec.music.reggae +rec.music.rem +rec.music.reviews +rec.music.rock-pop-r+b.1950s +rec.music.rock-pop-r+b.1960s +rec.music.rock-pop-r+b.1970s +rec.music.theory +rec.music.tori-amos +rec.music.video +rec.nude +rec.org.mensa +rec.org.sca +rec.outdoors.camping +rec.outdoors.fishing +rec.outdoors.fishing.bass +rec.outdoors.fishing.fly +rec.outdoors.fishing.fly.tying +rec.outdoors.fishing.saltwater +rec.outdoors.marketplace +rec.outdoors.national-parks +rec.outdoors.rv-travel +rec.parks.theme +rec.pets +rec.pets.birds +rec.pets.birds.pigeons +rec.pets.cats.anecdotes +rec.pets.cats.announce +rec.pets.cats.community +rec.pets.cats.health+behav +rec.pets.cats.misc +rec.pets.cats.rescue +rec.pets.dogs.activities +rec.pets.dogs.behavior +rec.pets.dogs.breeds +rec.pets.dogs.health +rec.pets.dogs.info +rec.pets.dogs.misc +rec.pets.dogs.rescue +rec.pets.herp +rec.photo.darkroom +rec.photo.digital +rec.photo.equipment.35mm +rec.photo.equipment.large-format +rec.photo.equipment.medium-format +rec.photo.equipment.misc +rec.photo.film+labs +rec.photo.marketplace +rec.photo.misc +rec.photo.moderated +rec.photo.technique.art +rec.photo.technique.misc +rec.photo.technique.nature +rec.photo.technique.people +rec.ponds +rec.puzzles +rec.puzzles.crosswords +rec.pyrotechnics +rec.radio.amateur.antenna +rec.radio.amateur.boatanchors +rec.radio.amateur.digital.misc +rec.radio.amateur.dx +rec.radio.amateur.equipment +rec.radio.amateur.homebrew +rec.radio.amateur.misc +rec.radio.amateur.policy +rec.radio.amateur.space +rec.radio.broadcasting +rec.radio.cb +rec.radio.info +rec.radio.noncomm +rec.radio.scanner +rec.radio.shortwave +rec.radio.swap +rec.roller-coaster +rec.running +rec.scouting.guide+girl +rec.scouting.issues +rec.scouting.misc +rec.scouting.usa +rec.scuba +rec.scuba.equipment +rec.scuba.locations +rec.skiing.alpine +rec.skiing.announce +rec.skiing.backcountry +rec.skiing.marketplace +rec.skiing.nordic +rec.skiing.resorts.europe +rec.skiing.resorts.misc +rec.skiing.resorts.north-america +rec.skiing.snowboard +rec.skydiving +rec.sport.archery +rec.sport.baseball +rec.sport.baseball.analysis +rec.sport.baseball.college +rec.sport.baseball.data +rec.sport.baseball.fantasy +rec.sport.basketball.college +rec.sport.basketball.europe +rec.sport.basketball.misc +rec.sport.basketball.pro +rec.sport.basketball.women +rec.sport.billiard +rec.sport.boxing +rec.sport.cricket +rec.sport.cricket.info +rec.sport.curling +rec.sport.disc +rec.sport.fencing +rec.sport.footbag +rec.sport.football.australian +rec.sport.football.canadian +rec.sport.football.college +rec.sport.football.fantasy +rec.sport.football.misc +rec.sport.football.pro +rec.sport.golf +rec.sport.hockey +rec.sport.hockey.field +rec.sport.jetski +rec.sport.misc +rec.sport.officiating +rec.sport.olympics +rec.sport.orienteering +rec.sport.paintball +rec.sport.pro-wrestling +rec.sport.pro-wrestling.fantasy +rec.sport.pro-wrestling.info +rec.sport.pro-wrestling.moderated +rec.sport.rodeo +rec.sport.rowing +rec.sport.rugby.league +rec.sport.rugby.union +rec.sport.skating.ice.figure +rec.sport.skating.ice.recreational +rec.sport.skating.inline +rec.sport.skating.misc +rec.sport.skating.racing +rec.sport.skating.roller +rec.sport.snowmobiles +rec.sport.soccer +rec.sport.softball +rec.sport.squash +rec.sport.sumo +rec.sport.swimming +rec.sport.table-soccer +rec.sport.table-tennis +rec.sport.tennis +rec.sport.triathlon +rec.sport.unicycling +rec.sport.volleyball +rec.sport.water-polo +rec.sport.waterski +rec.toys.action-figures +rec.toys.action-figures.discuss +rec.toys.action-figures.marketplace +rec.toys.cars +rec.toys.lego +rec.toys.misc +rec.toys.transformers.marketplace +rec.toys.transformers.moderated +rec.toys.vintage +rec.travel.africa +rec.travel.air +rec.travel.asia +rec.travel.australia+nz +rec.travel.bed+breakfast +rec.travel.budget.backpack +rec.travel.caribbean +rec.travel.cruises +rec.travel.europe +rec.travel.latin-america +rec.travel.marketplace +rec.travel.misc +rec.travel.resorts.all-inclusive +rec.travel.usa-canada +rec.video +rec.video.cable-tv +rec.video.desktop +rec.video.desktop.toaster +rec.video.dvd.advocacy +rec.video.dvd.marketplace +rec.video.dvd.misc +rec.video.dvd.players +rec.video.dvd.tech +rec.video.dvd.titles +rec.video.marketplace +rec.video.production +rec.video.professional +rec.video.releases +rec.video.satellite.dbs +rec.video.satellite.europe +rec.video.satellite.misc +rec.video.satellite.tvro +rec.windsurfing +rec.woodworking +relcom-list.internic.net-happenings +relcom.accounting +relcom.ads +relcom.advertising.theory +relcom.answers +relcom.archives +relcom.archives.d +relcom.arts.epic +relcom.arts.magick +relcom.arts.obec.pactet +relcom.arts.photo.img +relcom.arts.qwerty +relcom.auto +relcom.banktech +relcom.cinema +relcom.cinema.soap +relcom.commerce.audio-video +relcom.commerce.chemical +relcom.commerce.communications +relcom.commerce.computers +relcom.commerce.construction +relcom.commerce.consume +relcom.commerce.ctrlsystems +relcom.commerce.energy +relcom.commerce.estate +relcom.commerce.food +relcom.commerce.food.drinks +relcom.commerce.food.sweet +relcom.commerce.household +relcom.commerce.infoserv +relcom.commerce.jobs +relcom.commerce.machinery +relcom.commerce.medicine +relcom.commerce.mega.comp +relcom.commerce.mega.tech +relcom.commerce.metals +relcom.commerce.money +relcom.commerce.orgtech +relcom.commerce.other +relcom.commerce.publishing +relcom.commerce.raw-materials +relcom.commerce.reckoning +relcom.commerce.software +relcom.commerce.software.demo +relcom.commerce.stocks +relcom.commerce.talk +relcom.commerce.tobacco +relcom.commerce.tour +relcom.commerce.tradeserv +relcom.commerce.transport +relcom.comp.ai +relcom.comp.animation +relcom.comp.binaries +relcom.comp.binaries.d +relcom.comp.clarion +relcom.comp.crosstools +relcom.comp.dbms.clipper +relcom.comp.dbms.foxpro +relcom.comp.dbms.oracle +relcom.comp.dbms.powerbuilder +relcom.comp.dbms.vista +relcom.comp.gis +relcom.comp.lan +relcom.comp.lan.wanted +relcom.comp.lang.basic +relcom.comp.lang.c-c++ +relcom.comp.lang.forth +relcom.comp.lang.pascal +relcom.comp.lang.pascal.misc +relcom.comp.lang.perl +relcom.comp.law +relcom.comp.newmedia +relcom.comp.os.cmp +relcom.comp.os.os2 +relcom.comp.os.os2.comm +relcom.comp.os.os2.drv +relcom.comp.os.os2.faq.d +relcom.comp.os.os2.marginal +relcom.comp.os.os2.prog +relcom.comp.os.os2.src +relcom.comp.os.os2.wanted +relcom.comp.os.unix +relcom.comp.os.vms +relcom.comp.os.windows +relcom.comp.os.windows.nt +relcom.comp.os.windows.prog +relcom.comp.security +relcom.comp.software-eng +relcom.comp.sources.d +relcom.comp.sources.misc +relcom.comp.speccy +relcom.comp.virus +relcom.consumers +relcom.culture.ministry +relcom.culture.ministry.art +relcom.culture.ministry.library +relcom.culture.ministry.memorial +relcom.culture.ministry.region +relcom.culture.ministry.social +relcom.culture.underground +relcom.currency +relcom.dtp +relcom.ecology +relcom.education +relcom.expo +relcom.extro +relcom.fantasy +relcom.fido.adinf.support +relcom.fido.flirt +relcom.fido.mo.phystech +relcom.fido.mo.sails +relcom.fido.ru.acad +relcom.fido.ru.baby +relcom.fido.ru.fax +relcom.fido.ru.hacker +relcom.fido.ru.java +relcom.fido.ru.linux +relcom.fido.ru.military +relcom.fido.ru.modem +relcom.fido.ru.networks +relcom.fido.ru.notes +relcom.fido.ru.photo +relcom.fido.ru.rsbank +relcom.fido.ru.shell.dn +relcom.fido.ru.strack +relcom.fido.ru.thelema +relcom.fido.ru.unix +relcom.fido.ru.unix.bsd +relcom.fido.ru.yachting +relcom.fido.ru.znatok +relcom.fido.su.astroclub +relcom.fido.su.astronomy +relcom.fido.su.books +relcom.fido.su.c-c++ +relcom.fido.su.c-c++.visualage +relcom.fido.su.dbms +relcom.fido.su.dbms.borland +relcom.fido.su.dbms.hytech +relcom.fido.su.dbms.interbase +relcom.fido.su.dbms.sql +relcom.fido.su.forth +relcom.fido.su.general +relcom.fido.su.hardw +relcom.fido.su.magic +relcom.fido.su.softw +relcom.fido.su.tolkien +relcom.fido.su.virus +relcom.games +relcom.games.big +relcom.games.pbem +relcom.glb +relcom.hot-news +relcom.humor +relcom.humor.lus +relcom.kids +relcom.lan +relcom.lan.prog +relcom.maps +relcom.medicine.blood-service +relcom.msdos +relcom.music +relcom.netnews +relcom.netnews.big +relcom.newusers +relcom.penpals +relcom.politics +relcom.postmasters +relcom.postmasters.d +relcom.radio +relcom.radio.diagrams +relcom.radio.ham +relcom.railways +relcom.rec.flirt +relcom.rec.puzzles +relcom.rec.puzzles.aux +relcom.rec.tourism +relcom.relarn.general +relcom.relarn.science +relcom.religion +relcom.sci.libraries +relcom.sci.philosophy +relcom.talk +relcom.talk.sport +relcom.tcpip +relcom.technology +relcom.terms +relcom.test +relcom.triz +relcom.video +relcom.wheels +relcom.wtc +relcom.www.support +relcom.www.users +relcom.x +revue.rrze.test +rhein.unibn.rhrz.aktuelles +rhein.unibn.rhrz.misc +ri.admin +ri.general +ri.k12.experiences +ri.k12.providers.funding +ri.k12.providers.staff +ri.k12.providers.tech +ri.k12.socialstudies +ri.politics +ri.test +rich.buysell +roanoke.community-news +roanoke.news-talk +roanoke.talk +robin.advocacy +robin.bla +robin.gate +robin.logs +robin.lsmpf +robin.lyrik +robin.main +robin.maps +robin.spiele +robin.test +robin.uni +ru.general +ruhr.infosystems +saar.admin.archiv +saar.admin.mail +saar.admin.news +saar.alt.crosspoint +saar.alt.droehn +saar.alt.fan.oskar +saar.alt.fan.torstenb +saar.alt.geruechte +saar.alt.vga-planets +saar.comp.infosysteme +saar.comp.misc +saar.comp.os.linux +saar.comp.os.os2 +saar.general +saar.hilfe +saar.htw +saar.lists.fvwm +saar.lists.hpv +saar.lists.linux-m68k +saar.lists.sun-managers +saar.markt.arbeit +saar.markt.bazar +saar.markt.gewerbe +saar.markt.mfg +saar.markt.wohnung +saar.org.handshake.aktuell +saar.org.handshake.diskussion +saar.org.handshake.gastinfo +saar.org.handshake.hilfe +saar.org.handshake.offizielles +saar.org.ip.general +saar.org.ip.hom +saar.org.ip.intern.in-info +saar.org.ip.intern.sex-am-staden +saar.org.ip.praesidium +saar.org.ip.sb +saar.org.ip.sls +saar.org.mpii +saar.rec.humor +saar.rec.kino +saar.rec.kultur +saar.rec.misc +saar.rec.rollenspiele +saar.rec.sport +saar.soc.misc +saar.soc.politik +saar.soc.singles +saar.soc.umwelt +saar.stammtisch +saar.test +saar.uni.admin +saar.uni.fachschaft.informatik +saar.uni.fachschaft.misc +saar.uni.infowiss +saar.uni.mensa +saar.uni.misc +saar.uni.misswirtschaft +saar.uni.rz.misc +saar.uni.rz.stud +saar.uni.studium +saar.uni.vortraege +sac.announce +sac.csus +sac.general +sac.internet +sac.jobs +sac.motts +sac.music +sac.politics +sac.singles +sac.sports +sac.swap +sac.test +sachsnet.chemnitz.land +sachsnet.chemnitz.stadt +sachsnet.dresden.oberlausitz +sachsnet.dresden.stadt +sachsnet.forum.diskussion +sachsnet.hobby.allgemeines +sachsnet.hobby.clubs +sachsnet.hobby.computer.amiga +sachsnet.hobby.computer.dfue +sachsnet.hobby.computer.ibm +sachsnet.hobby.computer.robotron +sachsnet.hobby.kino +sachsnet.hobby.sport +sachsnet.kleinanzeigen.biete +sachsnet.kleinanzeigen.suche +sachsnet.kleinanzeigen.werbung +sachsnet.kontakte +sachsnet.kultur +sachsnet.leipzig.land +sachsnet.leipzig.stadt +sachsnet.musik +sachsnet.sachsen +sachsnet.spass +sanet.adverts +sanet.announce +sanet.config +sanet.flame +sanet.fun +sanet.ibmpc +sanet.lang.c +sanet.maps +sanet.modems +sanet.monty-python +sanet.newsletters +sanet.newsletters.d +sanet.radio.packet +sanet.sources.d +sanet.talk.politics +sanet.talk.religion +sanet.tech +sanet.test +sanet.uniforum +sanet.unix.questions +sanet.unix.sources +sanet.unix.talk +sat.announce +sat.eff +sat.food +sat.forsale +sat.general +sat.jobs +sat.music +sat.personals +sat.test +sat.usenet.config +sbay.forsale +sbay.general +sbay.hams +sbay.linux +sbay.news.config +sbay.news.group +sbay.news.stats +sbay.sports +sbay.test +sbay.waffle +schl.kids.kidcafe +schl.sig.k12admin +schl.sig.lmnet +schl.sig.tag +school.config +school.general +school.project.esp +school.project.pluto +school.pupils +school.subjects.humanities +school.subjects.languages +school.subjects.science +school.teachers +school.test +schule.admin +schule.berufsbildung.innovationen +schule.informatik +schule.internet.einsatz +schule.internet.technik +schule.klassenfahrten +schule.schueler.forum +schule.umwelt.aerodata +schule.umwelt.globe-g +schule.umwelt.terradata +schule.verwaltung +sci.aeronautics +sci.aeronautics.airliners +sci.aeronautics.simulation +sci.agriculture +sci.agriculture.beekeeping +sci.agriculture.fruit +sci.agriculture.poultry +sci.agriculture.ratites +sci.answers +sci.anthropology +sci.anthropology.paleo +sci.aquaria +sci.archaeology +sci.archaeology.mesoamerican +sci.archaeology.moderated +sci.astro +sci.astro.amateur +sci.astro.ccd-imaging +sci.astro.fits +sci.astro.hubble +sci.astro.planetarium +sci.astro.research +sci.astro.satellites.visual-observe +sci.bio.botany +sci.bio.conservation +sci.bio.ecology +sci.bio.entomology.homoptera +sci.bio.entomology.lepidoptera +sci.bio.entomology.misc +sci.bio.ethology +sci.bio.evolution +sci.bio.fisheries +sci.bio.food-science +sci.bio.herp +sci.bio.immunocytochem +sci.bio.microbiology +sci.bio.misc +sci.bio.paleontology +sci.bio.phytopathology +sci.bio.systematics +sci.bio.technology +sci.chem +sci.chem.analytical +sci.chem.coatings +sci.chem.electrochem +sci.chem.electrochem.battery +sci.chem.labware +sci.chem.organic.synthesis +sci.chem.organomet +sci.cognitive +sci.comp-aided +sci.cryonics +sci.crypt +sci.crypt.research +sci.data.formats +sci.econ +sci.econ.research +sci.edu +sci.electronics.basics +sci.electronics.cad +sci.electronics.components +sci.electronics.design +sci.electronics.equipment +sci.electronics.misc +sci.electronics.repair +sci.energy +sci.energy.hydrogen +sci.engr +sci.engr.analysis +sci.engr.biomed +sci.engr.chem +sci.engr.civil +sci.engr.color +sci.engr.control +sci.engr.electrical.compliance +sci.engr.electrical.sys-protection +sci.engr.geomechanics +sci.engr.heat-vent-ac +sci.engr.joining.misc +sci.engr.joining.welding +sci.engr.lighting +sci.engr.manufacturing +sci.engr.marine.hydrodynamics +sci.engr.mech +sci.engr.metallurgy +sci.engr.micromachining +sci.engr.mining +sci.engr.safety +sci.engr.semiconductors +sci.engr.surveying +sci.engr.television.advanced +sci.engr.television.broadcast +sci.environment +sci.environment.waste +sci.finance.abstracts +sci.fractals +sci.geo.earthquakes +sci.geo.eos +sci.geo.fluids +sci.geo.geology +sci.geo.hydrology +sci.geo.meteorology +sci.geo.mineralogy +sci.geo.oceanography +sci.geo.petroleum +sci.geo.rivers+lakes +sci.geo.satellite-nav +sci.image.processing +sci.lang +sci.lang.japan +sci.lang.translation +sci.lang.translation.marketplace +sci.life-extension +sci.logic +sci.materials +sci.materials.ceramics +sci.math +sci.math.num-analysis +sci.math.research +sci.math.symbolic +sci.mech.fluids +sci.med +sci.med.aids +sci.med.cannabis +sci.med.cardiology +sci.med.dentistry +sci.med.diseases.als +sci.med.diseases.cancer +sci.med.diseases.hepatitis +sci.med.diseases.lyme +sci.med.diseases.osteoporosis +sci.med.immunology +sci.med.informatics +sci.med.laboratory +sci.med.midwifery +sci.med.nursing +sci.med.nutrition +sci.med.obgyn +sci.med.occupational +sci.med.orthopedics +sci.med.pathology +sci.med.pharmacy +sci.med.physics +sci.med.prostate.bph +sci.med.prostate.cancer +sci.med.prostate.prostatitis +sci.med.psychobiology +sci.med.radiology +sci.med.radiology.interventional +sci.med.telemedicine +sci.med.transcription +sci.med.vision +sci.military.moderated +sci.military.naval +sci.misc +sci.nanotech +sci.nonlinear +sci.op-research +sci.optics +sci.optics.fiber +sci.philosophy.meta +sci.philosophy.tech +sci.physics +sci.physics.accelerators +sci.physics.computational.fluid-dynamics +sci.physics.cond-matter +sci.physics.electromag +sci.physics.fusion +sci.physics.particle +sci.physics.plasma +sci.physics.relativity +sci.physics.research +sci.polymers +sci.psychology.announce +sci.psychology.consciousness +sci.psychology.journals.psyche +sci.psychology.journals.psycoloquy +sci.psychology.misc +sci.psychology.personality +sci.psychology.psychotherapy +sci.psychology.psychotherapy.moderated +sci.psychology.research +sci.psychology.theory +sci.research +sci.research.careers +sci.research.postdoc +sci.skeptic +sci.space.history +sci.space.news +sci.space.policy +sci.space.science +sci.space.shuttle +sci.space.tech +sci.stat.consult +sci.stat.edu +sci.stat.math +sci.systems +sci.techniques.mag-resonance +sci.techniques.mass-spec +sci.techniques.microscopy +sci.techniques.spectroscopy +sci.techniques.testing.misc +sci.techniques.testing.nondestructive +sci.techniques.xtallography +sci.virtual-worlds +sco.forsale +sco.opendesktop +scot.announce +scot.bairns +scot.birds +scot.environment +scot.followup +scot.general +scot.jobs +scot.politics +scot.scots +scot.sports.soccer +scot.test +scruz.config +scruz.events +scruz.general +scruz.market +scruz.poetry +scruz.politics +scruz.sysops +scruz.test +scruz.transportation +sdnet.books +sdnet.cablemodems +sdnet.cerfnet +sdnet.computing +sdnet.config +sdnet.crl +sdnet.eats +sdnet.events +sdnet.forsale +sdnet.freenet +sdnet.general +sdnet.hemp +sdnet.housing +sdnet.jobs +sdnet.jobs.discuss +sdnet.jobs.offered +sdnet.jobs.services +sdnet.jobs.wanted +sdnet.lit +sdnet.misc +sdnet.motss +sdnet.movies +sdnet.music +sdnet.next +sdnet.personals +sdnet.politics +sdnet.real-estate +sdnet.real-estate.agents +sdnet.rideshare +sdnet.seminars +sdnet.singles +sdnet.sports +sdnet.test +sdnet.theatre +sdnet.tv +sdnet.waffle +sdnet.wanted +sdnet.weather +sdnet.wireless.pcs +sdnet.writing +sdsu.c++ +sdsu.cs520 +sdsu.cs560 +sdsu.cs596 +sdsu.cs662 +se.internet.news.diskussion +se.internet.news.meddelanden +se.test +seattle.admin +seattle.business +seattle.eats +seattle.forsale.computers +seattle.forsale.housing +seattle.forsale.misc +seattle.forsale.transportation +seattle.gay.news +seattle.general +seattle.jobs.offered +seattle.jobs.wanted +seattle.politics +seattle.test +seismic.general +sfnet.aloittelijat.kysymykset +sfnet.aloittelijat.testit +sfnet.alueet.suur-helsinki +sfnet.arkistot.ftp +sfnet.arkistot.halutaan +sfnet.atk +sfnet.atk.4dos +sfnet.atk.amiga +sfnet.atk.atari +sfnet.atk.cad +sfnet.atk.cbm +sfnet.atk.cpm +sfnet.atk.grafiikka +sfnet.atk.kannettavat +sfnet.atk.kerhot +sfnet.atk.kulttuuri +sfnet.atk.laitteet +sfnet.atk.laitteet.pc +sfnet.atk.linux +sfnet.atk.mac +sfnet.atk.ms-dos +sfnet.atk.ms-windows +sfnet.atk.nextstep +sfnet.atk.nt +sfnet.atk.ohjelmistot +sfnet.atk.ohjelmointi +sfnet.atk.ohjelmointi.alkeet +sfnet.atk.os2 +sfnet.atk.sodat +sfnet.atk.tex +sfnet.atk.turvallisuus +sfnet.atk.unix +sfnet.atk.varoitus +sfnet.atk.vms +sfnet.atk.yllapito +sfnet.checkgroups +sfnet.csc +sfnet.csc.tiedotukset +sfnet.funet.tiedotukset +sfnet.fuug.tiedotukset +sfnet.harrastus +sfnet.harrastus.aseet +sfnet.harrastus.astronomia +sfnet.harrastus.audio+video +sfnet.harrastus.audio+video.autohifi +sfnet.harrastus.autot +sfnet.harrastus.autovanhukset +sfnet.harrastus.biljardi +sfnet.harrastus.dx-kuuntelu +sfnet.harrastus.elektroniikka +sfnet.harrastus.elokuvat +sfnet.harrastus.filatelia +sfnet.harrastus.fillarit +sfnet.harrastus.ham +sfnet.harrastus.ilmailu +sfnet.harrastus.itsepuolustus +sfnet.harrastus.kalastus +sfnet.harrastus.kiipeily +sfnet.harrastus.kirjoittaminen +sfnet.harrastus.kulttuuri +sfnet.harrastus.kulttuuri.sarjakuvat +sfnet.harrastus.kulttuuri.sf +sfnet.harrastus.lemmikit.akvaario +sfnet.harrastus.lemmikit.muut +sfnet.harrastus.linnut +sfnet.harrastus.melonta +sfnet.harrastus.mensa +sfnet.harrastus.metsastys +sfnet.harrastus.mp +sfnet.harrastus.musiikki +sfnet.harrastus.musiikki.klassinen +sfnet.harrastus.nisakas +sfnet.harrastus.partio +sfnet.harrastus.pelit +sfnet.harrastus.pelit.go +sfnet.harrastus.pelit.kerailykortit +sfnet.harrastus.pelit.rooli +sfnet.harrastus.pelit.shakki +sfnet.harrastus.pelit.strategia +sfnet.harrastus.perhoset +sfnet.harrastus.puutarha +sfnet.harrastus.rahapelit +sfnet.harrastus.retkeily +sfnet.harrastus.ruoka+juoma +sfnet.harrastus.sienet +sfnet.harrastus.sukellus +sfnet.harrastus.sukututkimus +sfnet.harrastus.tanssi +sfnet.harrastus.valokuvaus +sfnet.harrastus.veneet +sfnet.harrastus.viinit +sfnet.harrastus.visailu +sfnet.huuhaa +sfnet.ieee +sfnet.keskustelu +sfnet.keskustelu.avaruus +sfnet.keskustelu.eu +sfnet.keskustelu.evoluutio +sfnet.keskustelu.filosofia +sfnet.keskustelu.foreigners +sfnet.keskustelu.homo-lesbo-bi +sfnet.keskustelu.huumeet +sfnet.keskustelu.huumori +sfnet.keskustelu.ihmissuhteet +sfnet.keskustelu.kieli +sfnet.keskustelu.koulutus +sfnet.keskustelu.kuluttaja +sfnet.keskustelu.laki +sfnet.keskustelu.lapset +sfnet.keskustelu.libertarismi +sfnet.keskustelu.liikenne +sfnet.keskustelu.liikenne.julkinen +sfnet.keskustelu.maanpuolustus +sfnet.keskustelu.maatalous +sfnet.keskustelu.museot +sfnet.keskustelu.perhejuhlat +sfnet.keskustelu.pk-yritykset +sfnet.keskustelu.politiikka +sfnet.keskustelu.psykologia +sfnet.keskustelu.rajatieteet +sfnet.keskustelu.rakentaminen +sfnet.keskustelu.seksi +sfnet.keskustelu.sivarit +sfnet.keskustelu.skeptismi +sfnet.keskustelu.syrjinta +sfnet.keskustelu.taide +sfnet.keskustelu.talous +sfnet.keskustelu.terveys +sfnet.keskustelu.tietoverkot +sfnet.keskustelu.ulkonako +sfnet.keskustelu.uskonto +sfnet.keskustelu.uskonto.kristinusko +sfnet.keskustelu.uutiset +sfnet.keskustelu.varaventtiili +sfnet.keskustelu.vegetaristit +sfnet.keskustelu.viestinta +sfnet.keskustelu.vitsit +sfnet.keskustelu.yhteiskunta +sfnet.keskustelu.ymparisto +sfnet.lists.allegro-cl +sfnet.lists.bind +sfnet.lists.test +sfnet.matkustaminen +sfnet.nocem +sfnet.opiskelu +sfnet.opiskelu.etaopetus +sfnet.opiskelu.kult +sfnet.opiskelu.opintotuki +sfnet.opiskelu.sospsyk +sfnet.opiskelu.ymp +sfnet.opiskelu.ymp.kurssit +sfnet.ryhmat+listat +sfnet.tapahtumat +sfnet.test +sfnet.tiede +sfnet.tiede.arkeologia +sfnet.tiede.astronomia +sfnet.tiede.bio +sfnet.tiede.didaktiikka +sfnet.tiede.filologia.englanti +sfnet.tiede.fysiikka +sfnet.tiede.geofysiikka +sfnet.tiede.historia +sfnet.tiede.hypermedia +sfnet.tiede.kasvatus +sfnet.tiede.kemia +sfnet.tiede.kielitiede +sfnet.tiede.kirjastot +sfnet.tiede.kulttutk +sfnet.tiede.laake.kemia.kliininen +sfnet.tiede.maantiede +sfnet.tiede.matematiikka +sfnet.tiede.metsantutkimus +sfnet.tiede.nonlinear +sfnet.tiede.tekoaly +sfnet.tiede.tietokannat.tuhti +sfnet.tiede.tietotekniikka +sfnet.tiede.tietotekniikka.tohtorix +sfnet.tiede.tilastotiede +sfnet.tiede.vedet +sfnet.tiede.yhdyskuntaslu +sfnet.tiede.yt.info +sfnet.tiede.yt.kurssit +sfnet.tiede.yt.kvaltut +sfnet.tiede.yt.metodit +sfnet.tiede.yt.yleis +sfnet.tiedostot +sfnet.tietoliikenne +sfnet.tietoliikenne.katko +sfnet.tietoliikenne.palvelimet +sfnet.tietoliikenne.tekniikka +sfnet.tietoliikenne.televerkot +sfnet.tietoliikenne.tilastot +sfnet.tietoliikenne.viestinviejat +sfnet.tori.asunnot +sfnet.tori.kyydit +sfnet.tori.muut +sfnet.tori.myydaan.atk +sfnet.tori.myydaan.menopelit +sfnet.tori.myydaan.musiikki +sfnet.tori.myydaan.muut +sfnet.tori.myydaan.video +sfnet.tori.ostetaan.atk +sfnet.tori.ostetaan.menopelit +sfnet.tori.ostetaan.musiikki +sfnet.tori.ostetaan.muut +sfnet.tori.ostetaan.video +sfnet.tori.seura +sfnet.tori.tyopaikat +sfnet.tori.tyopaikat.halutaan +sfnet.tori.tyopaikat.tarjotaan +sfnet.tori.uutuudet +sfnet.urheilu +sfnet.urheilu.jaakiekko +sfnet.urheilu.jalkapallo +sfnet.urheilu.judo +sfnet.urheilu.paintball +sfnet.urheilu.pesapallo +sfnet.urheilu.rullaluistelu +sfnet.urheilu.salibandy +sfnet.urheilu.sulkapallo +sfnet.urheilu.suunnistus +sfnet.urheilu.yleisurheilu +sfnet.viestinta +sfnet.viestinta.irc +sfnet.viestinta.journalismi +sfnet.viestinta.meili +sfnet.viestinta.nyyssit +sfnet.viestinta.radio +sfnet.viestinta.roskapostit +sfnet.viestinta.tv +sfnet.viestinta.tv.babylon5 +sfnet.viestinta.www +sfnet.viestinta.www.uutuudet +sg.announce +sg.comp.mac +sg.comp.os2 +sg.comp.win31 +sg.comp.win95 +sg.consumers +sg.general +sg.jobs.offer +sg.marketplace +sg.online-service +sg.rec.tv +sg.research.general +sg.research.software +sg.test +sh.admin +shout.general +shout.help +si.alt.filatelija +si.org.edus.mss.devetletka +si.org.zrss.ro.anglescina +si.org.zrss.ro.lesarstvo +si.org.zrss.ro.ravnatelj +si.org.zveza.tabornikov +si.org.zveza.tabornikov.tabor +sk.comp.asm +sk.comp.business +sk.comp.cecko +sk.comp.pascal +sk.comp.pc-prog +sk.comp.security +sk.comp.software +sk.comp.unix-prog +sk.didaktika.informatika +sk.didaktika.kms +sk.misc.burza +sk.net.abuse +sk.net.announce +sk.net.gopher +sk.net.news +sk.net.www +sk.politics.conservativism +sk.politics.liberal +sk.rec.hockey +sk.rec.hudba +sk.rec.sport +sk.rec.tatry +sk.sanet.services +sk.sci.astro +sk.sux.microsoft +sk.talk.adnd +sk.talk.drd +sk.talk.fltsk +sk.talk.irc +sk.talk.karmel +sk.talk.mst +sk.talk.slovak-world +sk.talk.users +sk.talk.vtip +slac.announce.important +slac.announce.outages.lan +slac.announce.outages.mac +slac.announce.outages.network +slac.announce.outages.wan +slac.announce.scs +slac.announce.slacvm +slac.announce.slacvx +slac.announce.unixhub +slac.aps.news +slac.b-factory.2gamma +slac.b-factory.calorimeter +slac.b-factory.comp +slac.b-factory.ir +slac.b-factory.magnet +slac.b-factory.parameters +slac.b-factory.particleid +slac.b-factory.physics +slac.b-factory.tracking +slac.b-factory.vertex +slac.bes.status +slac.bsd.cqi +slac.bsd.minutes +slac.building-mgr +slac.ccg.minutes +slac.cesr.news +slac.comp.computefarm +slac.comp.nt.admin +slac.comp.nt.users +slac.database.oracle +slac.database.spires +slac.database.spires.eldreq +slac.e142.minutes +slac.eld.fbsim +slac.emergency-ops +slac.esh.escorts +slac.general +slac.group-c.general +slac.groups +slac.jobs +slac.lang.c +slac.lang.c++ +slac.lang.fortran +slac.lang.maple +slac.lang.pascal +slac.lang.postscript +slac.lang.rexx +slac.library.hepths +slac.library.ppf +slac.library.ppf.string +slac.listserv.sldphy-l +slac.market +slac.net.usenet +slac.networks +slac.news.stats +slac.newusers.unix +slac.physapps.cernlib +slac.rec.books +slac.rec.food +slac.rec.garden +slac.rec.ham_radio +slac.rec.health +slac.rec.music +slac.scs.ibm-pc +slac.scs.minutes +slac.scs.sitewide +slac.scs.tigerteam +slac.scs.trips +slac.seminars.comp +slac.seminars.physics +slac.silicon.tracking +slac.slacvx +slac.slc.news +slac.slc.polariz +slac.slc.reports +slac.sld.ida3 +slac.sld.lacsoft +slac.sld.newusers.taskforce +slac.sld.offline.minutes +slac.sluo.computing.minutes +slac.sluo.minutes +slac.snowmass.proceedings +slac.soc.women +slac.ssc.news +slac.tau-charm.comp +slac.tau-charm.detector +slac.test +slac.test.mod +slac.text.frame +slac.text.tex +slac.users.aix +slac.users.amiga +slac.users.ecad +slac.users.excel +slac.users.ibm-pc +slac.users.mac +slac.users.ncd +slac.users.next +slac.users.unix +slac.users.windows.x +slac.vcg.minutes +slac.vm.pipelines +slo.biz.computers +slo.biz.misc +slo.config +slo.flame +slo.for-sale +slo.games +slo.general +slo.housing +slo.humor +slo.ibm-pc +slo.jobs +slo.mac +slo.music +slo.net +slo.personals +slo.politics +slo.punks +slo.rideshare +slo.scifi +slo.sex +slo.stats +slo.sun +slo.test +slo.unix +slo.unix.linux +slo.www +soc.adoption.adoptees +soc.adoption.parenting +soc.answers +soc.atheism +soc.bi +soc.college +soc.college.admissions +soc.college.financial-aid +soc.college.grad +soc.college.gradinfo +soc.college.org.aiesec +soc.college.teaching-asst +soc.couples +soc.couples.intercultural +soc.couples.wedding +soc.culture.afghanistan +soc.culture.african +soc.culture.african.american +soc.culture.african.american.moderated +soc.culture.albanian +soc.culture.algeria +soc.culture.arabic +soc.culture.argentina +soc.culture.asean +soc.culture.asian.american +soc.culture.assyrian +soc.culture.asturies +soc.culture.australian +soc.culture.austria +soc.culture.baltics +soc.culture.bangladesh +soc.culture.basque +soc.culture.belarus +soc.culture.belgium +soc.culture.bengali +soc.culture.berber +soc.culture.bolivia +soc.culture.bosna-herzgvna +soc.culture.brazil +soc.culture.breton +soc.culture.british +soc.culture.bulgaria +soc.culture.burma +soc.culture.cambodia +soc.culture.canada +soc.culture.caribbean +soc.culture.catalan +soc.culture.celtic +soc.culture.chile +soc.culture.china +soc.culture.colombia +soc.culture.cornish +soc.culture.costa-rica +soc.culture.croatia +soc.culture.cuba +soc.culture.czecho-slovak +soc.culture.dominican-rep +soc.culture.ecuador +soc.culture.egyptian +soc.culture.el-salvador +soc.culture.esperanto +soc.culture.estonia +soc.culture.ethiopia.misc +soc.culture.ethiopia.moderated +soc.culture.europe +soc.culture.filipino +soc.culture.french +soc.culture.galiza +soc.culture.german +soc.culture.greek +soc.culture.guinea-conakry +soc.culture.haiti +soc.culture.hawaii +soc.culture.hmong +soc.culture.honduras +soc.culture.hongkong +soc.culture.hongkong.entertainment +soc.culture.indian +soc.culture.indian.delhi +soc.culture.indian.gujarati +soc.culture.indian.info +soc.culture.indian.jammu-kashmir +soc.culture.indian.karnataka +soc.culture.indian.kerala +soc.culture.indian.marathi +soc.culture.indian.telugu +soc.culture.indonesia +soc.culture.intercultural +soc.culture.iranian +soc.culture.iraq +soc.culture.irish +soc.culture.israel +soc.culture.italian +soc.culture.japan +soc.culture.japan.moderated +soc.culture.jewish +soc.culture.jewish.holocaust +soc.culture.jewish.parenting +soc.culture.jordan +soc.culture.kenya +soc.culture.korean +soc.culture.kurdish +soc.culture.kuwait +soc.culture.kuwait.moderated +soc.culture.laos +soc.culture.latin-america +soc.culture.lebanon +soc.culture.liberia +soc.culture.maghreb +soc.culture.magyar +soc.culture.malagasy +soc.culture.malaysia +soc.culture.mexican +soc.culture.mexican.american +soc.culture.misc +soc.culture.mongolian +soc.culture.native +soc.culture.nepal +soc.culture.netherlands +soc.culture.new-zealand +soc.culture.nicaragua +soc.culture.nigeria +soc.culture.nordic +soc.culture.occitan +soc.culture.pacific-island +soc.culture.pakistan +soc.culture.pakistan.education +soc.culture.pakistan.history +soc.culture.pakistan.moderated +soc.culture.pakistan.politics +soc.culture.pakistan.religion +soc.culture.pakistan.sports +soc.culture.palestine +soc.culture.peru +soc.culture.polish +soc.culture.portuguese +soc.culture.puerto-rico +soc.culture.punjab +soc.culture.quebec +soc.culture.rep-of-georgia +soc.culture.romanian +soc.culture.russian +soc.culture.russian.moderated +soc.culture.scientists +soc.culture.scottish +soc.culture.sierra-leone +soc.culture.singapore +soc.culture.singapore.moderated +soc.culture.slovenia +soc.culture.somalia +soc.culture.south-africa +soc.culture.south-africa.afrikaans +soc.culture.soviet +soc.culture.spain +soc.culture.sri-lanka +soc.culture.swiss +soc.culture.syria +soc.culture.taiwan +soc.culture.tamil +soc.culture.thai +soc.culture.turkish +soc.culture.turkish.moderated +soc.culture.ukrainian +soc.culture.uruguay +soc.culture.usa +soc.culture.venezuela +soc.culture.vietnamese +soc.culture.welsh +soc.culture.yugoslavia +soc.culture.zimbabwe +soc.feminism +soc.genealogy.african +soc.genealogy.australia+nz +soc.genealogy.benelux +soc.genealogy.britain +soc.genealogy.computing +soc.genealogy.french +soc.genealogy.german +soc.genealogy.hispanic +soc.genealogy.ireland +soc.genealogy.italian +soc.genealogy.jewish +soc.genealogy.marketplace +soc.genealogy.medieval +soc.genealogy.methods +soc.genealogy.misc +soc.genealogy.nordic +soc.genealogy.slavic +soc.genealogy.surnames.britain +soc.genealogy.surnames.canada +soc.genealogy.surnames.german +soc.genealogy.surnames.global +soc.genealogy.surnames.ireland +soc.genealogy.surnames.misc +soc.genealogy.surnames.usa +soc.genealogy.west-indies +soc.history +soc.history.african.biafra +soc.history.ancient +soc.history.living +soc.history.medieval +soc.history.moderated +soc.history.science +soc.history.war.misc +soc.history.war.us-civil-war +soc.history.war.us-revolution +soc.history.war.vietnam +soc.history.war.world-war-ii +soc.history.what-if +soc.libraries.talk +soc.men +soc.misc +soc.motss +soc.net-people +soc.org.freemasonry +soc.org.nonprofit +soc.org.service-clubs.misc +soc.penpals +soc.personals +soc.politics +soc.politics.anti-fascism +soc.politics.arms-d +soc.politics.marxism +soc.religion.bahai +soc.religion.christian +soc.religion.christian.bible-study +soc.religion.christian.promisekeepers +soc.religion.christian.youth-work +soc.religion.eastern +soc.religion.gnosis +soc.religion.hindu +soc.religion.islam +soc.religion.mormon +soc.religion.paganism +soc.religion.quaker +soc.religion.shamanism +soc.religion.sikhism +soc.religion.unitarian-univ +soc.religion.vaishnava +soc.retirement +soc.rights.human +soc.senior.health+fitness +soc.senior.issues +soc.sexuality.general +soc.sexuality.spanking +soc.singles +soc.singles.moderated +soc.subculture.bondage-bdsm +soc.subculture.bondage-bdsm.femdom +soc.subculture.expatriate +soc.support.depression.crisis +soc.support.depression.family +soc.support.depression.manic +soc.support.depression.misc +soc.support.depression.seasonal +soc.support.depression.treatment +soc.support.fat-acceptance +soc.support.loneliness +soc.support.pregnancy.loss +soc.support.transgendered +soc.support.youth.gay-lesbian-bi +soc.veterans +soc.women +soc.women.lesbian-and-bi +spb.test +sqnt-public.forsale +srg.drs1 +srg.drs2 +srg.drs3 +srg.info +srg.programme +srg.ticker +srg.tvdrs +sri.market +sta.general +sta.test +stgt.amiga +stgt.atari +stgt.classified +stgt.games +stgt.general +stgt.ibm +stgt.kleinanzeigen +stgt.maps +stgt.minix +stgt.net +stgt.next +stgt.suecrates +stgt.test +stgt.uni-s.aix +stgt.uni-s.archiv +stgt.uni-s.chemie.misc +stgt.uni-s.e-technik.pruefungen +stgt.uni-s.energietechnik +stgt.uni-s.faveve +stgt.uni-s.general +stgt.uni-s.ims.general +stgt.uni-s.ivs +stgt.uni-s.markt +stgt.uni-s.rus +stgt.uni-s.rus.afs +stgt.uni-s.rus.paragon +stgt.uni-s.rus.paris +stgt.uni-s.rus.pools +stgt.uni-s.rus.rsyst +stgt.uni-s.rus.servus +stgt.uni-s.sun +stgt.unix +stl.config +stl.dining +stl.forsale +stl.general +stl.jobs +stl.news +stl.rec +stl.test +su.admin +su.admin.tips +su.class.aa236 +su.class.aa257 +su.class.aa278a +su.class.anthro161a +su.class.art342 +su.class.ce214 +su.class.ce288 +su.class.ce294 +su.class.chem135 +su.class.chem275 +su.class.chem31 +su.class.chem33 +su.class.cheme130 +su.class.cheme230 +su.class.comm1 +su.class.comm177h +su.class.cs001u +su.class.cs022 +su.class.cs040 +su.class.cs050 +su.class.cs105a +su.class.cs106a +su.class.cs106b +su.class.cs106x +su.class.cs107 +su.class.cs108 +su.class.cs109a +su.class.cs109b +su.class.cs110 +su.class.cs137 +su.class.cs140 +su.class.cs143 +su.class.cs145 +su.class.cs147 +su.class.cs154 +su.class.cs157 +su.class.cs161 +su.class.cs193c +su.class.cs193d +su.class.cs193e +su.class.cs193l +su.class.cs193m +su.class.cs193u +su.class.cs193x +su.class.cs194 +su.class.cs194a +su.class.cs196 +su.class.cs197 +su.class.cs198 +su.class.cs200 +su.class.cs201 +su.class.cs202 +su.class.cs205 +su.class.cs221 +su.class.cs221b +su.class.cs222 +su.class.cs222.lab +su.class.cs223 +su.class.cs223a +su.class.cs223b +su.class.cs225a +su.class.cs226 +su.class.cs227 +su.class.cs228a +su.class.cs229 +su.class.cs229b +su.class.cs240a +su.class.cs240b +su.class.cs242 +su.class.cs243 +su.class.cs244 +su.class.cs244a +su.class.cs244b +su.class.cs244c +su.class.cs245 +su.class.cs245a +su.class.cs247 +su.class.cs248 +su.class.cs248a +su.class.cs249 +su.class.cs254 +su.class.cs256 +su.class.cs257 +su.class.cs258 +su.class.cs260 +su.class.cs304 +su.class.cs306 +su.class.cs309a +su.class.cs309c +su.class.cs315 +su.class.cs315a +su.class.cs315b +su.class.cs323 +su.class.cs325 +su.class.cs327b +su.class.cs340 +su.class.cs342 +su.class.cs343 +su.class.cs345 +su.class.cs346 +su.class.cs347 +su.class.cs348a +su.class.cs348b +su.class.cs348c +su.class.cs349 +su.class.cs363 +su.class.cs367a +su.class.cs369 +su.class.cs377-2 +su.class.cs377b +su.class.cs378 +su.class.cs394 +su.class.cs403 +su.class.cs426 +su.class.cs443 +su.class.cs446 +su.class.drama065 +su.class.e235 +su.class.econ001 +su.class.econ051 +su.class.econ080 +su.class.econ1 +su.class.econ103 +su.class.econ149 +su.class.econ206 +su.class.econ51 +su.class.econ90 +su.class.ed103x +su.class.ed106x +su.class.ed224 +su.class.ed234 +su.class.ed242 +su.class.ed250c +su.class.ed257 +su.class.ed317 +su.class.ed347 +su.class.ed350b +su.class.ed350c +su.class.ed431 +su.class.ee101 +su.class.ee113 +su.class.ee121 +su.class.ee133 +su.class.ee141 +su.class.ee182 +su.class.ee214 +su.class.ee216 +su.class.ee241 +su.class.ee247 +su.class.ee271 +su.class.ee272a +su.class.ee272b +su.class.ee278 +su.class.ee282 +su.class.ee311 +su.class.ee313 +su.class.ee314 +su.class.ee314.announce +su.class.ee315 +su.class.ee318 +su.class.ee353 +su.class.ee363 +su.class.ee366 +su.class.ee368 +su.class.ee371 +su.class.ee373 +su.class.ee377 +su.class.ee381 +su.class.ee382 +su.class.ee384 +su.class.ee392v +su.class.ee392x +su.class.ee479 +su.class.ee482 +su.class.ee487 +su.class.ee488 +su.class.ees221a +su.class.ees231b +su.class.engl.nabokov +su.class.engl187k +su.class.engl1b12 +su.class.eur004 +su.class.french23c +su.class.french24 +su.class.french3 +su.class.german1 +su.class.german2-1 +su.class.german2-2 +su.class.german2-3 +su.class.ges499 +su.class.gsb.m240-4 +su.class.gsb.m240-5 +su.class.history152 +su.class.humbio11 +su.class.humbio4a +su.class.humbio4b +su.class.ie225 +su.class.ie261 +su.class.ie275 +su.class.law314 +su.class.law623 +su.class.ling130 +su.class.lougee +su.class.math103dh +su.class.math173 +su.class.math43 +su.class.me100 +su.class.me201a +su.class.me201b +su.class.me201c +su.class.me217c +su.class.me218 +su.class.me238c +su.class.me239 +su.class.me251a +su.class.me252a +su.class.me309 +su.class.mehr-mensch +su.class.mla031 +su.class.or251 +su.class.or351 +su.class.phil160a +su.class.phil80 +su.class.physics51 +su.class.physics53 +su.class.ps142k +su.class.ps170 +su.class.ps247g +su.class.psych252 +su.class.sitn +su.class.soc383 +su.class.ss201 +su.class.stat061 +su.class.stat110 +su.class.stat207 +su.class.stat340 +su.class.stat372 +su.class.sts160 +su.class.su.class.wct3b-07 +su.class.swopsi096 +su.class.ugs117 +su.class.vtss160 +su.class.wct3a-05 +su.class.wct3b-07 +su.computers +su.computers.afs +su.computers.amiga +su.computers.dialin +su.computers.ibm +su.computers.mac +su.computers.nethax +su.computers.next +su.computers.ntp +su.computers.rcc +su.computers.terman.cluster +su.computers.unix +su.etc +su.events +su.events.residences +su.gay +su.jobs +su.library.math-cs +su.lost-and-found +su.market +su.market.textbooks +su.math +su.news +su.news-service.announcements +su.news-service.press-releases +su.org.ac.announcements +su.org.acsss +su.org.amnesty.international +su.org.archeology +su.org.assu +su.org.assu.elections +su.org.bridgeclub +su.org.ccrma.bboard +su.org.ccrma.gripes +su.org.cogsci +su.org.cycling +su.org.disabled +su.org.ecohouse +su.org.ham-radio +su.org.hillel +su.org.hpp-aerobics +su.org.i-center +su.org.ieee +su.org.india +su.org.irish +su.org.lsa +su.org.lsjumb +su.org.multimedia +su.org.orch +su.org.redwood +su.org.review +su.org.review.d +su.org.rotc +su.org.running +su.org.scca +su.org.see +su.org.sharp +su.org.ski-club +su.org.spoon +su.org.sscp +su.org.stems +su.org.swe +su.org.teaching +su.org.womens-center +su.school.med +su.school.or +su.school.polisci +su.software.tools +su.sports +su.test +su.transportation +sudbury.misc +sunet.biomed.neurosci.motorctrl.clin +sunet.biomed.neurosci.neurophysiol.clin +sunet.doktorand +sunet.humfak.engelska.doktorander +sura.announce +sura.config +sura.noc.status +sura.security +sura.techs +swnet.ai.neural-nets +swnet.appl.matlab +swnet.conferences +swnet.diverse +swnet.filosofi +swnet.finans +swnet.followup +swnet.fordon.bilar +swnet.fordon.motorcyklar +swnet.foto +swnet.fritid.friluftsliv +swnet.fritid.jakt +swnet.fritid.segling +swnet.fritid.sportdykning +swnet.fritid.sportfiske +swnet.general +swnet.husdjur.hundar +swnet.infosystems.gis +swnet.infosystems.gopher +swnet.infosystems.www +swnet.internet.irc +swnet.internet.news +swnet.internet.policy +swnet.jobs +swnet.juridik +swnet.kultur.litteratur +swnet.kultur.serier +swnet.lans +swnet.lans.novell +swnet.mail +swnet.media +swnet.media.film +swnet.media.tv +swnet.moral +swnet.musik +swnet.org.abc-klubben +swnet.org.europen +swnet.org.global-one +swnet.org.skolverket.skol-net +swnet.org.snus +swnet.org.sunet +swnet.org.telegate +swnet.politik +swnet.pryltorg +swnet.reklam +swnet.risks +swnet.sci.astro +swnet.sci.genealogi +swnet.sci.medicin +swnet.sci.ufo +swnet.sf +swnet.sis.bibliotek +swnet.sis.samtalisalong +swnet.sources +swnet.sport +swnet.sport.boule +swnet.sport.cykel +swnet.sport.hockey +swnet.svenska +swnet.sys.amiga +swnet.sys.dec +swnet.sys.dnix +swnet.sys.hp +swnet.sys.ibm.pc +swnet.sys.mac +swnet.sys.os2 +swnet.sys.sun +swnet.sys.sun.flash +swnet.sys.windows-nt +swnet.teknik.elektronik +swnet.teknik.telefoni +swnet.test +swnet.unix +swnet.utbildning.datapedagogik +swnet.utbildning.internetteknik +swnet.utbildning.kemi +swnet.utbildning.media +swnet.wanted +sybase.server.bugnews.oahu +tacoma.events +tacoma.general +tacoma.politics +talk.abortion +talk.answers +talk.atheism +talk.bizarre +talk.environment +talk.euthanasia +talk.origins +talk.philosophy.humanism +talk.philosophy.misc +talk.politics.animals +talk.politics.china +talk.politics.crypto +talk.politics.drugs +talk.politics.european-union +talk.politics.guns +talk.politics.libertarian +talk.politics.medicine +talk.politics.mideast +talk.politics.misc +talk.politics.soviet +talk.politics.theory +talk.politics.tibet +talk.rape +talk.religion.buddhism +talk.religion.course-miracle +talk.religion.misc +talk.religion.newage +talk.religion.pantheism +talk.rumors +tamu.aasg +tamu.amateur +tamu.cray +tamu.electronic.library.resources +tamu.flame +tamu.forsale +tamu.fuzzy +tamu.general +tamu.gopher +tamu.horticulture.rose-hybrid +tamu.jobs +tamu.kanm.radio +tamu.micro.mac +tamu.micro.msdos +tamu.micro.os2 +tamu.music +tamu.news +tamu.religion.christian +tamu.test +tamu.unix.general +tamu.unix.sgi +tamu.vm.general +tamu.vms.general +taos.config +taos.dining +taos.forsale +taos.general +taos.jobs +taos.reviews +taos.test +taos.wanted +taronga.misc +taronga.worldview +tdr.problems +tfcn.comm +tfcn.finance +tfcn.misc +tfcn.org +tfcn.tech +tfcn.tfn +tfcn.vote +thelinq.admin +thelinq.counselors +thelinq.e-books +thelinq.elem.homework-help +thelinq.elem.lesson-plans +thelinq.elem.writing +thelinq.geography +thelinq.goals-2000 +thelinq.grants +thelinq.health-workers +thelinq.high.homework-help +thelinq.high.lesson-plans +thelinq.high.writing +thelinq.home-schooling +thelinq.middle.homework-help +thelinq.middle.lesson-plans +thelinq.middle.writing +thelinq.parent.elem +thelinq.parent.high +thelinq.parent.middle +thelinq.poli-sci +thelinq.pta-pto +thelinq.school-council +thelinq.soc-workers +thelinq.student.career +thelinq.student.college-talk +thelinq.student.health +thelinq.student.motivation +thelinq.student.peer-pressure +thenet.downtime +thenet.support.bsd +thenet.support.cixgateway +thenet.support.dos +thenet.support.irix +thenet.support.linux +thenet.support.os2 +thenet.support.windows +thenet.support.windows95 +thenet.support.windowsmail +thenet.support.windowsnt +tn.flame +tn.general +tn.linux +tn.msdos +tn.talk +tn.test +tn.unix +tnn.admin +tnn.announce +tnn.architect +tnn.archives +tnn.archives.mirrors +tnn.arts +tnn.astro +tnn.benchmark +tnn.bio +tnn.bonsai +tnn.books +tnn.books.magazine +tnn.books.new +tnn.business +tnn.business.computer +tnn.business.network +tnn.cafe +tnn.chem +tnn.cm +tnn.cm.new-product +tnn.comm.pager +tnn.config +tnn.culture.asia +tnn.culture.kansai +tnn.current-events +tnn.databases +tnn.dcom +tnn.dcom.atm +tnn.dcom.carrier +tnn.dcom.giga-bit +tnn.dcom.isdn +tnn.dcom.modems +tnn.dcom.routers +tnn.dcom.satellite +tnn.disasters.earthquake +tnn.diy +tnn.events +tnn.examination +tnn.faq-list +tnn.foods +tnn.foods.b-class +tnn.foods.kansai +tnn.foods.liquor +tnn.foods.recipes +tnn.foods.tokyo +tnn.forsale +tnn.forum +tnn.forum.asia-economy-p +tnn.forum.avs +tnn.forum.bridge +tnn.forum.canna +tnn.forum.dokokyo.cals +tnn.forum.global-brain +tnn.forum.hello-tokyo +tnn.forum.high-school +tnn.forum.ican +tnn.forum.info-city +tnn.forum.jus +tnn.forum.kansai-ri +tnn.forum.nature +tnn.forum.nsug +tnn.forum.soft-sys.tippler +tnn.forum.splus +tnn.forum.tottori +tnn.forum.tron +tnn.forum.ventures +tnn.forum.wnn +tnn.games +tnn.games.rpg +tnn.general +tnn.hardware +tnn.horoscope +tnn.internauts +tnn.internet +tnn.internet.address +tnn.internet.broadcast +tnn.internet.firewall +tnn.internet.isode +tnn.internet.itr +tnn.internet.library +tnn.internet.life +tnn.internet.mobile +tnn.internet.routing +tnn.internet.www +tnn.interv.saigai.access-guide +tnn.interv.saigai.hq +tnn.interv.saigai.lifeinfo +tnn.interv.saigai.lifeline +tnn.interv.saigai.ngo-npo +tnn.interv.saigai.official +tnn.interv.saigai.pcnet-info +tnn.interv.saigai.press +tnn.interv.saigai.volunteer.offers +tnn.interv.saigai.volunteer.wanted +tnn.interv.saigai.wanted +tnn.jobs +tnn.kanji +tnn.lang +tnn.law +tnn.law.copyright +tnn.law.patent +tnn.literature +tnn.living +tnn.living.child-care +tnn.living.health +tnn.living.insurance +tnn.mail +tnn.mail.uucp +tnn.marketing.internet +tnn.math +tnn.medical +tnn.mpu +tnn.mpu.i386 +tnn.mpu.mips +tnn.mpu.sparc +tnn.multimedia +tnn.multimedia.cdrom +tnn.music +tnn.music.early +tnn.music.early.lute +tnn.music.jazz-fusion +tnn.music.players +tnn.music.techno +tnn.netnews +tnn.netnews.cnews +tnn.netnews.dream +tnn.netnews.inn +tnn.netnews.stats +tnn.netusers +tnn.newsgroups +tnn.newsite +tnn.os +tnn.os.44bsd +tnn.os.aix +tnn.os.bsd-on-386 +tnn.os.bsd386.announce +tnn.os.bsd386.applications +tnn.os.bsd386.bugs +tnn.os.bsd386.development +tnn.os.bsd386.japanese +tnn.os.bsd386.x-window +tnn.os.dosv +tnn.os.freebsd +tnn.os.linux +tnn.os.mach +tnn.os.msdos +tnn.os.netbsd +tnn.os.netware +tnn.os.os2 +tnn.os.research +tnn.os.spring +tnn.os.unix +tnn.os.windows-nt +tnn.os.windows95 +tnn.physics +tnn.protocols.edi +tnn.protocols.mhs +tnn.protocols.snmp +tnn.protocols.x500 +tnn.questions +tnn.radio.amateur +tnn.radio.life +tnn.real-estate +tnn.rec.4wd +tnn.rec.dance +tnn.rec.motorcycles +tnn.rec.motorsport +tnn.rec.pre-idol +tnn.religion.buddhism.shinshu +tnn.religion.catholic +tnn.rfc +tnn.robot +tnn.soccer +tnn.soccer.j-league +tnn.soccer.j-league.antlers +tnn.soccer.j-league.grampus-eight +tnn.soccer.j-league.jubilo +tnn.soccer.j-league.marinos +tnn.soccer.world-cup +tnn.software +tnn.sports +tnn.sports.surfing +tnn.sports.tennis +tnn.sports.triathlon +tnn.support +tnn.support.hucom.fibrechannel +tnn.support.hucom.modem +tnn.sys +tnn.sys.amiga +tnn.sys.apple2 +tnn.sys.arch +tnn.sys.be +tnn.sys.ibm-pc +tnn.sys.mac +tnn.sys.news +tnn.sys.next +tnn.sys.palmtops +tnn.sys.realtime +tnn.sys.sgi +tnn.sys.sun +tnn.sys.zaurus +tnn.test +tnn.text.postscript +tnn.text.tex +tnn.travel +tnn.travel.globe +tnn.travel.report +tnn.wanted +tnn.window.gui.motif +tnn.window.gui.open-look +tnn.window.windows +tnn.window.x +to +tor.arts +tor.bizarre +tor.config +tor.eats +tor.events +tor.forsale.computers +tor.forsale.misc +tor.general +tor.housing +tor.ieee +tor.jobs +tor.journalism +tor.news +tor.news.stats +tor.pagan +tor.test +tor.uucp +tor.www.commerce +tor.www.misc +tp.archiv +tp.eintraege +tp.forum +tp.hilfe +tp.isdn +tp.pd-soft.algorithmen +tp.pd-soft.amiga +tp.pd-soft.atari +tp.pd-soft.cdrom +tp.pd-soft.ibm +tp.pd-soft.next +tp.pd-soft.os2 +tp.pd-soft.unix +tp.pranger +tp.protokolle +tp.statistik +tp.stellenmarkt +tp.sysinfo +tp.test +trentu.general +trentu.seminar +triangle.arts +triangle.bizarre +triangle.config +triangle.decus +triangle.dining +triangle.forsale +triangle.gamers +triangle.gardens +triangle.general +triangle.graphics +triangle.java +triangle.jobs +triangle.libsci +triangle.motss +triangle.movies +triangle.neural-nets +triangle.online-access +triangle.personals +triangle.personals.bi +triangle.personals.friendship +triangle.personals.m-seeking-m +triangle.personals.m-seeking-w +triangle.personals.motss +triangle.personals.variations +triangle.personals.w-seeking-m +triangle.personals.w-seeking-w +triangle.politics +triangle.radio +triangle.singles +triangle.singles.announce +triangle.sports +triangle.sun +triangle.talks +triangle.test +triangle.transport +triangle.vlsi +triangle.wanted +trumpet.announce +trumpet.bugs +trumpet.feedback +trumpet.questions +trumpet.test +tub.general +tub.wanted +tum.e-technik.eikon +tum.e-technik.general +tum.e-technik.studium +tum.format.werkstoffe +tum.fsmpi.general +tum.general +tum.info.atari +tum.info.didaktik +tum.info.general +tum.info.medizin +tum.info.modem +tum.info.progber +tum.info.questions +tum.info.sfb0342 +tum.info.soft +tum.info.studium +tum.info.topsys +tum.info.tsm +tum.info.verwalter +tum.iwb.general +tum.physik.bl.general +tum.physik.bl.mlle +tum.physik.cip +tum.questions +tum.soft +tum.test +tum.wirtschaft +tvontario.teleguide +tw.bbs.admin +tw.bbs.admin.installbbs +tw.bbs.aiesec +tw.bbs.alumni +tw.bbs.alumni.ccshs +tw.bbs.alumni.chengkung +tw.bbs.alumni.chien-kuo-hs +tw.bbs.alumni.chingmei +tw.bbs.alumni.chungli +tw.bbs.alumni.chushishs +tw.bbs.alumni.cy +tw.bbs.alumni.fengho +tw.bbs.alumni.fshs +tw.bbs.alumni.fushing +tw.bbs.alumni.hchs +tw.bbs.alumni.hsinchuang +tw.bbs.alumni.hsntnu +tw.bbs.alumni.hwachyau +tw.bbs.alumni.ilanhs +tw.bbs.alumni.jhs +tw.bbs.alumni.kavalan +tw.bbs.alumni.kcchs +tw.bbs.alumni.keeshs +tw.bbs.alumni.kshs +tw.bbs.alumni.lanyanghs +tw.bbs.alumni.lotunghs +tw.bbs.alumni.skshs +tw.bbs.alumni.stdm +tw.bbs.alumni.sungshan +tw.bbs.alumni.taochung +tw.bbs.alumni.tcsshs +tw.bbs.alumni.tfg +tw.bbs.alumni.tfhs +tw.bbs.alumni.tfshs +tw.bbs.alumni.touchung +tw.bbs.alumni.tshs +tw.bbs.alumni.tssh-ccgsh +tw.bbs.alumni.viator +tw.bbs.alumni.whshs +tw.bbs.alumni.wuling +tw.bbs.alumni.yangming +tw.bbs.announce +tw.bbs.answers +tw.bbs.campus +tw.bbs.campus.activity +tw.bbs.campus.advancededu +tw.bbs.campus.education +tw.bbs.campus.fju +tw.bbs.campus.graduate +tw.bbs.campus.job +tw.bbs.campus.ltc +tw.bbs.campus.nccu +tw.bbs.campus.nchu +tw.bbs.campus.ncku +tw.bbs.campus.nctu +tw.bbs.campus.ncu +tw.bbs.campus.nthu +tw.bbs.campus.ntu +tw.bbs.campus.pu +tw.bbs.campus.tit +tw.bbs.campus.ttit +tw.bbs.campus.yuntech +tw.bbs.comp.386bsd +tw.bbs.comp.activex +tw.bbs.comp.book +tw.bbs.comp.cad +tw.bbs.comp.chinese +tw.bbs.comp.database +tw.bbs.comp.dos +tw.bbs.comp.graphics +tw.bbs.comp.hacker +tw.bbs.comp.hardware +tw.bbs.comp.hardware.cdrom +tw.bbs.comp.hardware.comm +tw.bbs.comp.hardware.cpu +tw.bbs.comp.hardware.marketplace +tw.bbs.comp.hardware.misc +tw.bbs.comp.hardware.network +tw.bbs.comp.hardware.soundcard +tw.bbs.comp.hardware.storage +tw.bbs.comp.hardware.systems +tw.bbs.comp.irc +tw.bbs.comp.lang.fortran +tw.bbs.comp.lang.java +tw.bbs.comp.lang.perl +tw.bbs.comp.language +tw.bbs.comp.linux +tw.bbs.comp.mac +tw.bbs.comp.midi +tw.bbs.comp.modem +tw.bbs.comp.mswindows +tw.bbs.comp.mswindows.nt +tw.bbs.comp.mswindows.win95 +tw.bbs.comp.multimedia +tw.bbs.comp.network +tw.bbs.comp.novell +tw.bbs.comp.oop +tw.bbs.comp.os.nextstep +tw.bbs.comp.os2 +tw.bbs.comp.pda +tw.bbs.comp.security +tw.bbs.comp.semiconductor +tw.bbs.comp.shareware +tw.bbs.comp.software +tw.bbs.comp.sources +tw.bbs.comp.tex +tw.bbs.comp.unix +tw.bbs.comp.virii +tw.bbs.comp.virus +tw.bbs.comp.winsock +tw.bbs.comp.www +tw.bbs.comp.xwindow +tw.bbs.config +tw.bbs.csbbs +tw.bbs.csbbs.pbbs +tw.bbs.edu.normal +tw.bbs.forsale +tw.bbs.forsale.computer +tw.bbs.forsale.house +tw.bbs.general +tw.bbs.help +tw.bbs.lang.chinese +tw.bbs.lang.english +tw.bbs.lang.francais +tw.bbs.lang.japanese +tw.bbs.lang.spanish +tw.bbs.lists +tw.bbs.literal.article +tw.bbs.literal.asciiart +tw.bbs.literal.book +tw.bbs.literal.chinese +tw.bbs.literal.emprisenovel +tw.bbs.literal.lyrics +tw.bbs.literal.mystery +tw.bbs.literal.poem +tw.bbs.literal.romance +tw.bbs.literal.sfnovel +tw.bbs.literal.story +tw.bbs.music.chinese +tw.bbs.music.classical +tw.bbs.music.heavy_metal +tw.bbs.music.japan +tw.bbs.music.jazz +tw.bbs.music.pop +tw.bbs.music.rocknroll +tw.bbs.netnews +tw.bbs.newgroups +tw.bbs.org.cie +tw.bbs.rec.aquarium +tw.bbs.rec.art +tw.bbs.rec.audiophile +tw.bbs.rec.beautysalon +tw.bbs.rec.bicycle +tw.bbs.rec.bridge +tw.bbs.rec.car +tw.bbs.rec.chess +tw.bbs.rec.cidol +tw.bbs.rec.coffee +tw.bbs.rec.comic +tw.bbs.rec.cuteness +tw.bbs.rec.dance +tw.bbs.rec.drama +tw.bbs.rec.entertainment +tw.bbs.rec.flight-sim +tw.bbs.rec.flower +tw.bbs.rec.foodstuff +tw.bbs.rec.guitar +tw.bbs.rec.harmonica +tw.bbs.rec.instrument +tw.bbs.rec.japan-idol +tw.bbs.rec.japan-idol.uchida-yuki +tw.bbs.rec.marvel +tw.bbs.rec.mj +tw.bbs.rec.model +tw.bbs.rec.motorcycle +tw.bbs.rec.movie +tw.bbs.rec.mud +tw.bbs.rec.palmardrama +tw.bbs.rec.pcgame +tw.bbs.rec.pcgame.foreign +tw.bbs.rec.pet +tw.bbs.rec.photo +tw.bbs.rec.radio +tw.bbs.rec.radio.amateur +tw.bbs.rec.rail +tw.bbs.rec.scouting +tw.bbs.rec.sport-cards +tw.bbs.rec.stamp +tw.bbs.rec.startrek +tw.bbs.rec.starwars +tw.bbs.rec.tea +tw.bbs.rec.travel +tw.bbs.rec.tv +tw.bbs.rec.tv.x-files +tw.bbs.rec.video +tw.bbs.rec.videogame +tw.bbs.rec.weapon +tw.bbs.rec.wine +tw.bbs.sci.astrology +tw.bbs.sci.astronomy +tw.bbs.sci.biology +tw.bbs.sci.chemistry +tw.bbs.sci.design +tw.bbs.sci.economics +tw.bbs.sci.electronics +tw.bbs.sci.entomology +tw.bbs.sci.finance +tw.bbs.sci.finance.funds +tw.bbs.sci.first_aid +tw.bbs.sci.history +tw.bbs.sci.history.sango +tw.bbs.sci.insurance +tw.bbs.sci.law +tw.bbs.sci.math +tw.bbs.sci.mba +tw.bbs.sci.mechanics +tw.bbs.sci.medicine +tw.bbs.sci.mis +tw.bbs.sci.philosophy +tw.bbs.sci.physics +tw.bbs.sci.psychology +tw.bbs.sci.sex +tw.bbs.soc.birds +tw.bbs.soc.canada +tw.bbs.soc.changhua +tw.bbs.soc.charity +tw.bbs.soc.chiayi +tw.bbs.soc.consumers +tw.bbs.soc.feminism +tw.bbs.soc.green-earth +tw.bbs.soc.hakka +tw.bbs.soc.handicapped +tw.bbs.soc.hsinchu +tw.bbs.soc.hualien +tw.bbs.soc.i-lan +tw.bbs.soc.japan +tw.bbs.soc.kaohsiung +tw.bbs.soc.keelung +tw.bbs.soc.malaysia +tw.bbs.soc.media +tw.bbs.soc.motss +tw.bbs.soc.overseas +tw.bbs.soc.pingtung +tw.bbs.soc.politics +tw.bbs.soc.politics.dpp +tw.bbs.soc.politics.kmt +tw.bbs.soc.politics.np +tw.bbs.soc.religion +tw.bbs.soc.religion.buddhism +tw.bbs.soc.sccid +tw.bbs.soc.socialwelfare +tw.bbs.soc.society +tw.bbs.soc.tai-tung +tw.bbs.soc.taichung +tw.bbs.soc.tainan +tw.bbs.soc.taipei +tw.bbs.soc.taiwanese +tw.bbs.soc.taoyuan +tw.bbs.soc.tayal +tw.bbs.soc.transport +tw.bbs.soc.tzuchi +tw.bbs.sports +tw.bbs.sports.baseball +tw.bbs.sports.baseball.bears +tw.bbs.sports.baseball.dragons +tw.bbs.sports.baseball.eagles +tw.bbs.sports.baseball.elephants +tw.bbs.sports.baseball.lions +tw.bbs.sports.baseball.tigers +tw.bbs.sports.baseball.whales +tw.bbs.sports.basketball +tw.bbs.sports.basketball.nba +tw.bbs.sports.fishing +tw.bbs.sports.inlineskate +tw.bbs.sports.kongfu +tw.bbs.sports.mountain +tw.bbs.sports.mountain.diversity +tw.bbs.sports.pro-wrestling +tw.bbs.sports.soccer +tw.bbs.sports.swimming +tw.bbs.sports.table-tennis +tw.bbs.sports.tennis +tw.bbs.sports.volleyball +tw.bbs.talk +tw.bbs.talk.boy-girl +tw.bbs.talk.feeling +tw.bbs.talk.francophone +tw.bbs.talk.friends +tw.bbs.talk.joke +tw.bbs.talk.ladytalk +tw.bbs.talk.love +tw.bbs.talk.mentalk +tw.bbs.talk.newscast +tw.bbs.talk.notepad +tw.bbs.test +tw.bbs.udnie +tw.k-12.class +tw.k-12.education +tw.k-12.english +tw.k-12.guide +tw.k-12.health +tw.k-12.information +tw.k-12.junior +tw.k-12.junior.art +tw.k-12.junior.biology +tw.k-12.junior.chinese +tw.k-12.junior.english +tw.k-12.junior.history +tw.k-12.junior.math +tw.k-12.junior.music +tw.k-12.kindergarten +tw.k-12.life-tech +tw.k-12.physchemical +tw.k-12.policy +tw.k-12.primary +tw.k-12.primary.art +tw.k-12.primary.chinese +tw.k-12.primary.math +tw.k-12.primary.music +tw.k-12.primary.nature +tw.k-12.primary.society +tw.k-12.primary.sport +tw.k-12.senior +tw.k-12.special.education +tw.k-12.students +tw.k-12.teachers +tx-bcs.forsale +tx-bcs.general +tx-bcs.internet.providers +tx-bcs.internet.usersgroup +tx-bcs.jobs +tx-bcs.usenet.config +tx-bcs.usenet.test +tx-bcs.wanted +tx.evolution.vs.abortion +tx.flame +tx.forsale +tx.general +tx.guns +tx.jobs +tx.maps +tx.motorcycles +tx.politics +tx.politics.republic +tx.religion.pagan +tx.telecom +tx.test +tx.usenet.config +tx.usenet.stats +tx.usenet.test +tx.wanted +u3b.config +u3b.misc +u3b.sources +u3b.tech +u3b.test +ualberta.general +ualberta.phys.general +uark.asg +uark.config +uark.forsale +uark.general +uark.jobs +uark.orgs +uark.sports +ubc.courses.cpsc.537b +uberlin.general +uc.general +uc.grads.union +uc.motss +uc.news +uc.test +ucb.alt.uclink +ucb.alumni +ucb.arts +ucb.becmug +ucb.boalt +ucb.building-coord +ucb.cchem +ucb.ce.grads +ucb.ce.undergrads +ucb.ced +ucb.china.hk-roc +ucb.class.ba100 +ucb.class.ba120 +ucb.class.ba202a +ucb.class.ce131 +ucb.class.chem1a +ucb.class.complit60ac-3 +ucb.class.cs150 +ucb.class.cs152 +ucb.class.cs160 +ucb.class.cs162 +ucb.class.cs164 +ucb.class.cs169 +ucb.class.cs170 +ucb.class.cs172 +ucb.class.cs174 +ucb.class.cs184 +ucb.class.cs186 +ucb.class.cs188 +ucb.class.cs189 +ucb.class.cs195 +ucb.class.cs198 +ucb.class.cs198-4 +ucb.class.cs250 +ucb.class.cs252 +ucb.class.cs254 +ucb.class.cs260 +ucb.class.cs262 +ucb.class.cs263 +ucb.class.cs264 +ucb.class.cs265 +ucb.class.cs266 +ucb.class.cs267 +ucb.class.cs268 +ucb.class.cs270 +ucb.class.cs274 +ucb.class.cs276 +ucb.class.cs277 +ucb.class.cs282 +ucb.class.cs283 +ucb.class.cs284 +ucb.class.cs285 +ucb.class.cs286 +ucb.class.cs287 +ucb.class.cs288 +ucb.class.cs294-4 +ucb.class.cs294-5 +ucb.class.cs3 +ucb.class.cs30s +ucb.class.cs3s +ucb.class.cs61a +ucb.class.cs61b +ucb.class.cs61c +ucb.class.cs8 +ucb.class.cs9a +ucb.class.cs9b +ucb.class.cs9c +ucb.class.cs9d +ucb.class.cs9e +ucb.class.cs9f +ucb.class.cs9g +ucb.class.econ201a +ucb.class.ee1 +ucb.class.ee105 +ucb.class.ee117a +ucb.class.ee117b +ucb.class.ee118 +ucb.class.ee120 +ucb.class.ee121 +ucb.class.ee122 +ucb.class.ee123 +ucb.class.ee125 +ucb.class.ee126 +ucb.class.ee128 +ucb.class.ee130 +ucb.class.ee136 +ucb.class.ee140 +ucb.class.ee141 +ucb.class.ee142 +ucb.class.ee143 +ucb.class.ee145a +ucb.class.ee145b +ucb.class.ee146 +ucb.class.ee192 +ucb.class.ee20 +ucb.class.ee219 +ucb.class.ee221a +ucb.class.ee224 +ucb.class.ee225a +ucb.class.ee225b +ucb.class.ee225c +ucb.class.ee225d +ucb.class.ee226 +ucb.class.ee227 +ucb.class.ee227a +ucb.class.ee227b +ucb.class.ee228a +ucb.class.ee228b +ucb.class.ee229 +ucb.class.ee231 +ucb.class.ee240 +ucb.class.ee241 +ucb.class.ee242 +ucb.class.ee243 +ucb.class.ee244 +ucb.class.ee246 +ucb.class.ee254 +ucb.class.ee290a +ucb.class.ee290b +ucb.class.ee290d +ucb.class.ee290h +ucb.class.ee290j +ucb.class.ee290l +ucb.class.ee290n +ucb.class.ee290t +ucb.class.ee290w +ucb.class.ee40 +ucb.class.ee40i +ucb.class.ee42 +ucb.class.ee43 +ucb.class.ee77s +ucb.class.eecsba1 +ucb.class.german5a +ucb.class.hist163a +ucb.class.infosys206 +ucb.class.la237 +ucb.class.math1a +ucb.class.n241 +ucb.class.physics7a +ucb.class.physics7b +ucb.class.stat2 +ucb.cogsci +ucb.computing.announce +ucb.cs.alphas +ucb.cs.grads +ucb.cs.hpux.sysadmins +ucb.cs.hpux.users +ucb.cs.jobs +ucb.cs.msgs +ucb.cs.sww.announce +ucb.cs.undergrads +ucb.digital-video +ucb.discuss.japan +ucb.eats +ucb.econ.grads +ucb.education.dte +ucb.ee.grads +ucb.ee.msgs +ucb.ee.undergrads +ucb.eecs.net.stats +ucb.eecs.sww.announce +ucb.english +ucb.ephemerata +ucb.erg +ucb.erotica.sensual +ucb.extension.general +ucb.film-program +ucb.flame +ucb.games.magic +ucb.general +ucb.geography.comp-facility +ucb.geology +ucb.german +ucb.grads +ucb.hsb.announce +ucb.hsb.calendar +ucb.hsb.cbw +ucb.hsb.computers +ucb.hsb.gbc +ucb.hsb.general +ucb.hsb.haas-online.market +ucb.hsb.ibc +ucb.hsb.mba.announce +ucb.hsb.mba.general +ucb.hsb.mbaa +ucb.hsb.phd.announce +ucb.hsb.phd.general +ucb.hsb.undergrads.announce +ucb.hsb.undergrads.general +ucb.icsi +ucb.icsi.computing +ucb.icsi.talks +ucb.ieor.grads +ucb.ieor.undergrads +ucb.itp +ucb.jobs +ucb.journalism +ucb.linguistics +ucb.market.books +ucb.market.housing +ucb.market.misc +ucb.market.vehicles +ucb.math +ucb.math.seminars +ucb.math.undergrads +ucb.mcb.grad +ucb.me.grads +ucb.me.grads.announce +ucb.me.undergrads +ucb.net +ucb.net.announce +ucb.net.discussion +ucb.net.home-ip.announce +ucb.net.home-ip.discussion +ucb.net.linkfail +ucb.net.mbone +ucb.net.stats +ucb.net.www.providers +ucb.news +ucb.news.stats +ucb.nuc.grads +ucb.nuc.undergrads +ucb.org.aclu +ucb.org.agse +ucb.org.aquaria +ucb.org.asuc +ucb.org.aswg +ucb.org.bcr +ucb.org.bicycal +ucb.org.bio-scholars +ucb.org.bis +ucb.org.bridge-club +ucb.org.cal-animage +ucb.org.cal-cycling +ucb.org.calhev +ucb.org.callug +ucb.org.calsurfteam +ucb.org.clignet +ucb.org.csgsa +ucb.org.csu +ucb.org.csua +ucb.org.ficb +ucb.org.filmstuds +ucb.org.golden-key +ucb.org.grad-assembly +ucb.org.hiking-club +ucb.org.hillel +ucb.org.indus +ucb.org.iran-club +ucb.org.kbsu +ucb.org.lt-weight-crew +ucb.org.lyceum +ucb.org.mcbusa +ucb.org.mystique +ucb.org.nihonjin-kai +ucb.org.ntug +ucb.org.ocf +ucb.org.pasae +ucb.org.quiz-bowl +ucb.org.rc-scholars +ucb.org.scibugs +ucb.org.ses +ucb.org.squelch +ucb.org.thai-club +ucb.org.tsa +ucb.org.ucsee +ucb.org.upe +ucb.org.upsa +ucb.org.xcf +ucb.org.yearbook +ucb.os.freebsd +ucb.os.linux +ucb.os.nt +ucb.os.os2 +ucb.parents +ucb.peoples-park +ucb.personals +ucb.physics.grads +ucb.politics +ucb.politics.progressive +ucb.ppcs.facilities +ucb.reshall.ckc +ucb.reviews.class +ucb.scholarship +ucb.seminars +ucb.socrates.announce +ucb.socrates.discuss +ucb.sports +ucb.staff.healthcare +ucb.students.cambodian +ucb.students.chinese +ucb.students.disabled +ucb.students.filipino +ucb.students.india +ucb.students.internat +ucb.students.japanese +ucb.students.korean +ucb.students.taiwan +ucb.students.uc-village +ucb.study.abroad +ucb.study.abroad.japan +ucb.sysadmin +ucb.test +ucb.trash +ucb.uclink.announce +ucd.ag.explore +ucd.agecon +ucd.comp.instruction +ucd.comp.questions +ucd.cs.club +ucd.cs.grad +ucd.cs.jobs +ucd.cs.programming +ucd.cs.ugrad +ucd.ece.ieee +ucd.general +ucd.geology +ucd.gis +ucd.grad.lit-forum.theory +ucd.grad.ptxgg +ucd.gsa +ucd.housing +ucd.irc +ucd.itcap +ucd.jobs +ucd.life +ucd.listserv.ucdnet-admin +ucd.org.aiche +ucd.org.anime-club +ucd.org.apac +ucd.org.artsworks +ucd.org.asce +ucd.org.asme +ucd.org.caless +ucd.org.cambodia +ucd.org.collegedems +ucd.org.exercise-sci +ucd.org.filcro +ucd.org.fraternity.a-phi-o +ucd.org.fraternity.a-phi-o.d +ucd.org.mga-kapatid +ucd.org.pcbtg +ucd.org.proj-recycle +ucd.org.pssa +ucd.org.seed +ucd.org.swe +ucd.org.transfers.srjc +ucd.q-news +ucd.rec.dragon +ucd.rec.poetry +ucd.rideshare +ucd.snowboarding +ucd.sports.volleyball.mens +ucd.swap +ucd.swap.books +ucd.talk.bugculture +ucd.talk.bugnews +ucd.talk.medical.entomology +ucd.test +ucd.wef +uch.general +ucsb.compsci.cs160 +ucsb.compsci.cs170 +ucsb.compsci.cs180 +ucsb.compsci.cs270b +ucsb.compsci.faculty +ucsb.compsci.grad +ucsb.general +ucsb.humanities +ucsb.net.help +ucsc.admin.grants +ucsc.baskin.general +ucsc.class.cmp101 +ucsc.class.cmp104a +ucsc.class.cmpe185 +ucsc.messages +ucsc.plan +ucsc.research +ucsc.research.morph +ufra.allgemein +ufra.amiga +ufra.dfue +ufra.fido.net +ufra.flame +ufra.incubus.lists +ufra.incubus.talk +ufra.kultur +ufra.markt.hard +ufra.markt.kommerz +ufra.markt.soft +ufra.markt.sonst +ufra.pc +ufra.politik +ufra.prog +ufra.termine +ufra.test +ufra.unix +ufra.users +ug.general +uiuc.announce +uiuc.beckman +uiuc.beckman.consortium +uiuc.campusnet +uiuc.class.biol303 +uiuc.class.cs125 +uiuc.class.cs225 +uiuc.class.cs497smk +uiuc.class.cs497snk +uiuc.class.ece125 +uiuc.class.esl113u +uiuc.class.fr314f +uiuc.class.rhet105 +uiuc.class.span214 +uiuc.class.span214a +uiuc.class.span214c +uiuc.class.span252 +uiuc.class.span274 +uiuc.class.stout +uiuc.cs.alumni +uiuc.cs.announce +uiuc.cs.emacs +uiuc.cs.general +uiuc.cs.gwm +uiuc.cs.jobs +uiuc.cs.sun +uiuc.general +uiuc.misc.bookcoop +uiuc.misc.consumers +uiuc.misc.environment +uiuc.misc.games +uiuc.misc.gourmand +uiuc.misc.jobs +uiuc.misc.politics +uiuc.misc.safety +uiuc.ncsa.hci +uiuc.org.aaa +uiuc.org.acm +uiuc.org.acm.sigarch +uiuc.org.acm.sigbio +uiuc.org.acm.sigmicro +uiuc.org.acm.signet +uiuc.org.acm.sigops +uiuc.org.acm.sigsoft +uiuc.org.acm.sigunix +uiuc.org.aiss +uiuc.org.aisus +uiuc.org.anime +uiuc.org.apo +uiuc.org.asia +uiuc.org.awis +uiuc.org.bicycles +uiuc.org.biophysics +uiuc.org.blades +uiuc.org.cbsu +uiuc.org.ccsm +uiuc.org.civil +uiuc.org.cogsci +uiuc.org.compvision +uiuc.org.csa +uiuc.org.cse +uiuc.org.csl +uiuc.org.csoc +uiuc.org.css +uiuc.org.cten +uiuc.org.dance +uiuc.org.economics +uiuc.org.engcouncil +uiuc.org.eoh +uiuc.org.eoh.announce +uiuc.org.eoh.design +uiuc.org.eoh.general +uiuc.org.ews +uiuc.org.grads +uiuc.org.gsac +uiuc.org.hev +uiuc.org.homebrewers +uiuc.org.ieee +uiuc.org.india +uiuc.org.iranian +uiuc.org.isds +uiuc.org.isds.tech +uiuc.org.isfcu +uiuc.org.issc +uiuc.org.ivcf +uiuc.org.japanese +uiuc.org.koinonia +uiuc.org.life-sciences +uiuc.org.math +uiuc.org.med +uiuc.org.medieval +uiuc.org.men +uiuc.org.mi +uiuc.org.mrl +uiuc.org.msp +uiuc.org.music.cmp +uiuc.org.muslim +uiuc.org.nug +uiuc.org.org-research +uiuc.org.os2ug +uiuc.org.outdoor +uiuc.org.prevet +uiuc.org.psa +uiuc.org.sage +uiuc.org.sage.security +uiuc.org.sem +uiuc.org.shpe +uiuc.org.sil +uiuc.org.skeet +uiuc.org.slm +uiuc.org.sts +uiuc.org.synton +uiuc.org.tbp +uiuc.org.tbp.projects +uiuc.org.tsa +uiuc.org.volunteer +uiuc.org.vsa +uiuc.pubs.in-illinois +uiuc.pubs.messenger +uiuc.pubs.misc +uiuc.pubs.uiucnet +uiuc.rha.allen +uiuc.rha.assembly +uiuc.rha.busey +uiuc.rha.far +uiuc.rha.gregory +uiuc.rha.isr +uiuc.rha.lar +uiuc.rha.par +uiuc.rha.peabody +uiuc.rha.triad +uiuc.rha.tvd +uiuc.sport.basketball +uiuc.sport.football +uiuc.sw.bsdi +uiuc.sw.linux +uiuc.sw.mathematica +uiuc.sw.mentorg +uiuc.sw.mosaic +uiuc.sw.mosiac +uiuc.sw.paradox +uiuc.sw.pctcp +uiuc.sw.softimage +uiuc.sw.troff +uiuc.sw.win95 +uiuc.sys.aix +uiuc.sys.amiga +uiuc.sys.apple2 +uiuc.sys.dec +uiuc.sys.explorer +uiuc.sys.hp +uiuc.sys.ibm-pc +uiuc.sys.ibm-rt +uiuc.sys.mac +uiuc.sys.msnet +uiuc.sys.next +uiuc.sys.sgi +uiuc.sys.sun +uiuc.test +uiuc.women +uk.adverts.books +uk.adverts.computer +uk.adverts.other +uk.adverts.personals +uk.adverts.personals.gay-lesbian-bi +uk.adverts.stolen.announce +uk.adverts.stolen.d +uk.announce +uk.announce.d +uk.announce.events +uk.announce.events.d +uk.answers +uk.business.accountancy +uk.business.telework +uk.community.firefighting +uk.community.social-housing +uk.community.voluntary +uk.comp.ikbs +uk.comp.misc +uk.comp.os.linux +uk.comp.os.win95 +uk.comp.sys.sun +uk.comp.training +uk.comp.vendors +uk.consultants +uk.current-events.general +uk.current-events.n-ireland +uk.d-i-y +uk.education.16plus +uk.education.expeditions +uk.education.governors +uk.education.home-education +uk.education.maths +uk.education.misc +uk.education.schools-it +uk.education.staffroom +uk.education.teachers +uk.environment +uk.environment.conservation +uk.finance +uk.food+drink.archives +uk.food+drink.misc +uk.food+drink.real-ale +uk.food+drink.restaurants +uk.games.board +uk.games.computer.quake +uk.games.computer.quake2 +uk.games.misc +uk.games.roleplay +uk.games.trading-cards.marketplace +uk.games.trading-cards.misc +uk.games.video.misc +uk.games.video.playstation +uk.games.video.playstation.forsale +uk.gay-lesbian-bi +uk.gov.agency.csa +uk.gov.local +uk.jobs.contract +uk.jobs.d +uk.jobs.offered +uk.jobs.wanted +uk.legal +uk.local.birmingham +uk.local.channel-isles +uk.local.geordie +uk.local.hampshire +uk.local.kent +uk.local.london +uk.local.midlands +uk.local.north-wales +uk.local.nw-england +uk.local.south-wales +uk.local.southwest +uk.local.surrey +uk.local.thames-valley +uk.local.yorkshire +uk.media +uk.media.animation.anime +uk.media.books.sf +uk.media.films +uk.media.films.carry-on +uk.media.home-cinema +uk.media.radio.archers +uk.media.radio.bbc-r1 +uk.media.radio.bbc-r2 +uk.media.radio.bbc-r4 +uk.media.radio.bbc-r5 +uk.media.radio.hospital +uk.media.radio.misc +uk.media.radio.radcliffe +uk.media.tv.brookside +uk.media.tv.childrens +uk.media.tv.er +uk.media.tv.friends +uk.media.tv.misc +uk.media.tv.sf.babylon5 +uk.media.tv.sf.babylon5.misc +uk.media.tv.sf.babylon5.social +uk.media.tv.sf.drwho +uk.media.tv.sf.misc +uk.media.tv.sf.startrek +uk.media.tv.sf.x-files +uk.media.tv.simpsons +uk.media.tv.sky +uk.media.tv.time-team +uk.misc +uk.music.alternative +uk.music.breakbeat +uk.music.folk +uk.music.guitar +uk.music.makers.dj +uk.music.misc +uk.music.rave +uk.music.rhythm-n-blues +uk.net +uk.net.jips +uk.net.news.announce +uk.net.news.config +uk.net.news.management +uk.org.bcs.announce +uk.org.bcs.misc +uk.org.community +uk.org.epsrc.hpc.news +uk.org.mensa +uk.org.starlink.announce +uk.org.starlink.misc +uk.org.ukuug +uk.org.women-in-comp +uk.org.youth-clubs.fury +uk.org.youth-clubs.mayc +uk.people.bdsm +uk.people.consumers +uk.people.deaf +uk.people.disability +uk.people.fathers +uk.people.gothic +uk.people.health +uk.people.rural +uk.people.sf-fans +uk.people.support.epilepsy +uk.people.support.mult-sclerosis +uk.people.teens +uk.politics.animals +uk.politics.announce +uk.politics.censorship +uk.politics.constitution +uk.politics.crime +uk.politics.drugs +uk.politics.economics +uk.politics.electoral +uk.politics.environment +uk.politics.guns +uk.politics.misc +uk.politics.parliament +uk.politics.philosophy +uk.radio.amateur +uk.railway +uk.rec.audio +uk.rec.audio.car +uk.rec.aviation +uk.rec.birdwatching +uk.rec.boats.paddle +uk.rec.bodybuilding +uk.rec.caravanning +uk.rec.cars.4x4 +uk.rec.cars.classic +uk.rec.cars.maintenance +uk.rec.cars.tvr +uk.rec.cars.vw.aircooled +uk.rec.caving +uk.rec.climbing +uk.rec.collecting.misc +uk.rec.competitions +uk.rec.crafts +uk.rec.cycling +uk.rec.engines.stationary +uk.rec.equestrian +uk.rec.fishing.coarse +uk.rec.fishing.game +uk.rec.fishing.sea +uk.rec.gambling.misc +uk.rec.gardening +uk.rec.metaldetecting +uk.rec.models.rail +uk.rec.motorcycles +uk.rec.motorcycles.trailriding +uk.rec.motorsport.misc +uk.rec.motorsport.oval-racing +uk.rec.naturist +uk.rec.pets.misc +uk.rec.photo.adverts +uk.rec.photo.misc +uk.rec.psychic +uk.rec.sailing +uk.rec.scouting +uk.rec.scuba +uk.rec.sheds +uk.rec.subterranea +uk.rec.ufo +uk.rec.walking +uk.rec.waterways +uk.rec.youth-hostel +uk.religion.buddhist +uk.religion.christian +uk.religion.hindu +uk.religion.interfaith +uk.religion.islam +uk.religion.jewish +uk.religion.misc +uk.religion.other-faiths +uk.sci.med.pharmacy +uk.sci.misc +uk.sci.weather +uk.singles +uk.sport.athletics +uk.sport.cricket +uk.sport.football.american +uk.sport.golf +uk.sport.horseracing +uk.sport.ice-hockey +uk.sport.misc +uk.tech.broadcast +uk.tech.misc +uk.tech.y2k +uk.telecom +uk.telecom.mobile +uk.test +uk.transport +uk.transport.air +uk.transport.ferry +uk.transport.london +uk.transport.ride-sharing +ukr.archives +ukr.business.vestlan +ukr.commerce.auto +ukr.commerce.chemical +ukr.commerce.construction +ukr.commerce.energy +ukr.commerce.estate +ukr.commerce.food +ukr.commerce.household +ukr.commerce.infoserv +ukr.commerce.machinery +ukr.commerce.metals +ukr.commerce.misc +ukr.commerce.money +ukr.commerce.orgtech +ukr.commerce.price-lists +ukr.commerce.talk +ukr.comp.binaries +ukr.comp.hardware +ukr.comp.software +ukr.fido.os2 +ukr.finance +ukr.flames +ukr.gc.chronical +ukr.gc.normativ +ukr.law +ukr.netnews +ukr.nodes +ukr.politics +ukr.rules +ukr.science +ukr.test +ukr.usis +um.chinese +um.comp-iss +um.forsale +um.general +um.h19 +um.housing +um.music +um.network +um.org.mac-usergroup +um.test +um.umcptalk +um.wam +um.wam.bmgt301 +umiami.cs.announce +umiami.general +umich.academic.competitions +umich.announce.umnet +umich.biking +umich.class.test +umich.class.testing.once.again.ignore +umich.confer +umich.eecs.announce +umich.eecs.ce.students +umich.eecs.dco.announce +umich.eecs.dco.stats +umich.eecs.dco.test +umich.geo +umich.housing.ethernet +umich.ifs.outages +umich.interesting.people +umich.isr.ahead +umich.itd.stats +umich.kinesiology.gradvice +umich.linux +umich.michigan.review +umich.novell +umich.org.bsn +umich.org.continuum +umich.org.lsasg +umich.org.tbp +umich.org.umec +umich.org.umec.graduation +umich.physics.general +umich.rha +umich.sports +umich.test.2mod +umich.test.mod +umich.test.mod3 +umich.test.woof +umich.umce.dialin +umich.umce.dns +umich.umce.ifs +umich.umce.lars+mars +umich.umce.usenet +umich.umd.general +umn.aem.general +umn.aem.gradst +umn.aem.net +umn.aem.seminars +umn.aem.ugrads +umn.avian.turkey +umn.cbs.announce +umn.cbs.general +umn.cbs.test +umn.cems.ugrads +umn.cis.announce +umn.cis.general +umn.cis.minnext +umn.cis.systems +umn.cis.test +umn.coled.alumni +umn.comp.ftp-mirror +umn.comp.os.unix +umn.comp.os.vms +umn.comp.sys.ibm +umn.comp.sys.mac +umn.comp.sys.sgi +umn.comp.sys.sun +umn.config +umn.cs.bldg +umn.cs.class.3317ext +umn.cs.class.3321ext +umn.cs.class.8011-scic +umn.cs.curriculum +umn.cs.dept +umn.cs.faculty +umn.cs.general +umn.cs.gradst +umn.cs.gripes +umn.cs.jobs +umn.cs.labs.ai +umn.cs.labs.grad +umn.cs.lang.c +umn.cs.lang.c++ +umn.cs.lang.misc +umn.cs.net +umn.cs.seminars +umn.cs.soc +umn.cs.test +umn.cs.text.framemaker +umn.cs.text.tex +umn.cs.ugrads +umn.cs.windows.x +umn.csom.class.oms8995 +umn.csom.general +umn.csom.ids5410 +umn.csom.ids8110 +umn.csom.ids8450 +umn.csom.test +umn.daily.forum +umn.ee.announce +umn.ee.chatter +umn.ee.computer +umn.ee.dept +umn.ee.faculty +umn.ee.general +umn.ee.grads +umn.ee.seminar +umn.ee.test +umn.ee.undergrads +umn.epsy.deaf.students +umn.epsy.deaf.teacher-parent +umn.fan.serge-rudaz +umn.fscn.general +umn.fscn.ift +umn.general.energy +umn.general.events +umn.general.food +umn.general.forsale +umn.general.housing +umn.general.jobs +umn.general.lost+found +umn.general.misc +umn.general.movies +umn.general.music +umn.general.sports +umn.ioft.class.1001h +umn.itlab.bldg +umn.itlab.curriculum +umn.itlab.dept +umn.itlab.faculty +umn.itlab.general +umn.itlab.gradst +umn.itlab.gripes +umn.itlab.jobs +umn.itlab.lang.c +umn.itlab.lang.c++ +umn.itlab.lang.misc +umn.itlab.net +umn.itlab.soc +umn.itlab.systems.mac +umn.itlab.systems.misc +umn.itlab.systems.pc +umn.itlab.systems.status +umn.itlab.systems.sun +umn.itlab.systems.unix +umn.itlab.test +umn.itlab.text.framemaker +umn.itlab.text.tex +umn.itlab.ugrads +umn.itlab.windows.x +umn.local-lists.aci-4d +umn.local-lists.austrian-cultu +umn.local-lists.cnug-dss +umn.local-lists.decstation-man +umn.local-lists.disc-env +umn.local-lists.disc-evidence +umn.local-lists.disc-nordic +umn.local-lists.disc-nordlib +umn.local-lists.disc-sar +umn.local-lists.disc-tacfanout +umn.local-lists.disc-vis-graph +umn.local-lists.epixinfo +umn.local-lists.ethnic-theater +umn.local-lists.infotech-disc +umn.local-lists.mac-consort +umn.local-lists.net-ops +umn.local-lists.net-people +umn.local-lists.news +umn.local-lists.news-stats +umn.local-lists.novell +umn.local-lists.security +umn.local-lists.sgi-admins +umn.local-lists.siren +umn.local-lists.sun-news +umn.local-lists.techc-admin +umn.local-lists.techc-all +umn.local-lists.techc-atm +umn.local-lists.techc-backup +umn.local-lists.techc-cal +umn.local-lists.techc-email +umn.local-lists.techc-general +umn.local-lists.techc-microlan +umn.local-lists.techc-modems +umn.local-lists.techc-public +umn.local-lists.techc-sgi +umn.local-lists.techc-site +umn.local-lists.techc-unix +umn.local-lists.techc-web +umn.local-lists.techc-workst +umn.local-lists.ubike-info +umn.local-lists.umn-email +umn.local-lists.umn-www +umn.local-lists.users-mlre +umn.local-lists.wg-cscc +umn.local-lists.writingc +umn.local-lists.x3j9-admin +umn.local-lists.x3j9-tech +umn.math.dept +umn.math.zoo +umn.morris.general +umn.morris.misc +umn.net-lists.explorer +umn.net-lists.info-appletalk +umn.net-lists.rfc931-users +umn.news-server.announce +umn.news-server.questions +umn.news-server.test +umn.news-server.traffic +umn.ophth.isrk +umn.org.acm +umn.org.china +umn.org.india +umn.org.sps +umn.ortta.general +umn.rhet.general +umn.rhet.gradst +umn.soc.faculty +umn.soc.general +umn.soc.grad +umn.socsci.applications +umn.socsci.general +umn.socsci.system +umn.socsci.test +umn.tc.systems +umontreal.cerca +umontreal.general +un.public.dha.reliefweb +un.public.itu.announce +un.public.itu.telecom.cyberforum +unicef.test +unihigh.agora +unihigh.alumni +unihigh.announce +unihigh.arts +unihigh.classifieds +unihigh.clubs +unihigh.comp +unihigh.freshmen +unihigh.gargoyle +unihigh.gargoyle.d +unihigh.german +unihigh.juniors +unihigh.library +unihigh.misc +unihigh.monitors +unihigh.parents +unihigh.policy +unihigh.questions +unihigh.seniors +unihigh.sophomores +unihigh.sports +unihigh.sports.scores +unihigh.subfreshmen +unihigh.yearbook +uog.ccs.unix_support +us.arts +us.arts.tv.soaps +us.config +us.events.ok-explosion +us.legal +us.marketplace.computers.hardware +us.marketplace.computers.software +us.marketplace.games +us.marketplace.other +us.military.army +us.misc +us.misc.family-radio +us.politics +us.politics.abortion +us.rec.scouting +us.sport +us.sport.baseball +us.sport.basketball +us.sport.football +us.state.iowa +us.taxes +us.test +usf.alumni +ut.ai +ut.bizarre +ut.chinese +ut.config +ut.dcs.db +ut.dcs.gradnews +ut.dcs.na +ut.ecf.announce +ut.ecf.aps105 +ut.ecf.beam95 +ut.ecf.cdrom +ut.ecf.che221 +ut.ecf.comp9t5 +ut.ecf.csc190 +ut.ecf.csc326 +ut.ecf.ece1753 +ut.ecf.ece1755 +ut.ecf.ece203 +ut.ecf.ece242 +ut.ecf.ece253 +ut.ecf.ece344 +ut.ecf.ece385 +ut.ecf.ece443 +ut.ecf.engsci +ut.ecf.general +ut.ecf.mat186 +ut.ecf.pey +ut.ecf.student +ut.eng.gradnews +ut.engineering.general +ut.engineering.seminars +ut.erin.csc354e +ut.erin.eco206e +ut.erin.eco220e +ut.erin.mgt206e +ut.flame +ut.followup +ut.general +ut.gradnews +ut.jobs +ut.nets.reports +ut.org.seta +ut.physics.general +ut.physics.gradnews +ut.physics.seminars +ut.scar.announce +ut.scar.cscb28 +ut.scar.ecoc11 +ut.scar.eesb03s +ut.scar.lina01 +ut.scar.linc06 +ut.scar.opinion.bio +ut.scar.vpaa99 +ut.stardate +ut.test +ut.text +ut.trin.general +utah.forsale +utah.linux +utcs.general +utcs.grad +utcs.graphics +utcs.jobs +utcs.lispm +utcs.projects +utcs.talks +utcs.techreports +utcs.under +utcs.upe +utece.general +utexas.cba.cba-board +utexas.cc.hpcf.sysmod +utexas.cc.hpcf.system +utexas.cc.math +utexas.cc.sysmod +utexas.cc.sysmod.dvf +utexas.cc.sysmod.nt +utexas.cc.sysmod.vms +utexas.cc.utxvm.notices +utexas.class.acc380k2 +utexas.class.acc382k +utexas.class.acc384 +utexas.class.acc456 +utexas.class.ase201 +utexas.class.ase211 +utexas.class.ba358t +utexas.class.ba385t +utexas.class.ba389t-3 +utexas.class.ba389t-4 +utexas.class.ch301-lagowski +utexas.class.ch301-lagowski.data +utexas.class.cs105.c++ +utexas.class.cs105.c++-dianelaw +utexas.class.cs105.lisp +utexas.class.cs304p +utexas.class.cs310 +utexas.class.cs315 +utexas.class.cs328 +utexas.class.cs336 +utexas.class.cs336a +utexas.class.cs345-richards +utexas.class.cs345.lin +utexas.class.cs347-a +utexas.class.cs347-b +utexas.class.cs352 +utexas.class.cs352j +utexas.class.cs354 +utexas.class.cs356 +utexas.class.cs367 +utexas.class.cs372 +utexas.class.cs372-brice +utexas.class.cs373 +utexas.class.cs378-ci +utexas.class.cs378-crypto +utexas.class.cs378-downing +utexas.class.cs378-lavender +utexas.class.cs378-net +utexas.class.cs378-richards +utexas.class.cs378.formal-methods +utexas.class.cs380d +utexas.class.cs384g +utexas.class.cs395t-novak +utexas.class.cs395t.multimedia +utexas.class.csd367k +utexas.class.e306-ca-prev +utexas.class.e309k-ca +utexas.class.e309m +utexas.class.e316k-american +utexas.class.e384k-biblio +utexas.class.edc385g +utexas.class.edp363 +utexas.class.ee302 +utexas.class.ee302h +utexas.class.ee312 +utexas.class.ee360c +utexas.class.ee360r +utexas.class.ee371m +utexas.class.ee371r +utexas.class.ee381k +utexas.class.ee382c +utexas.class.ee382c-ja +utexas.class.ee382m +utexas.class.ee440 +utexas.class.fin357 +utexas.class.hisf315k +utexas.class.hmn350 +utexas.class.lin340 +utexas.class.lis322t +utexas.class.lis341-ivins +utexas.class.lis341-moore +utexas.class.lis341-trybula +utexas.class.lis382l-9 +utexas.class.lis384k-7 +utexas.class.lis384k9 +utexas.class.lis386-1 +utexas.class.lis388k-12 +utexas.class.m408d +utexas.class.me202 +utexas.class.me326 +utexas.class.me328sch +utexas.class.me333t +utexas.class.mic128c +utexas.class.mic368 +utexas.class.mis333k +utexas.class.phl304-pennock +utexas.class.phl313k +utexas.class.phl325c +utexas.class.rtf305 +utexas.class.rtf309 +utexas.class.rtf365 +utexas.class.spe390r +utexas.class.spef390r +utexas.class.spn378h +utexas.class.zoo370c +utexas.comp.windows-nt +utexas.csr.aussie +utexas.dorms.general +utexas.ece.announce +utexas.ece.general +utexas.ecelrc.sysmod +utexas.general +utexas.geo.discussion +utexas.gslis.general +utexas.gslis.iplab +utexas.intoffice.news +utexas.law +utexas.lib.online +utexas.math.actuarial +utexas.math.courses +utexas.multimedia +utexas.nat-sci.deans-scholars +utexas.org.cons-bio +utexas.org.democrats +utexas.org.fea +utexas.org.gec +utexas.org.gradstudents +utexas.org.ksa +utexas.org.philosophy +utexas.org.plan2 +utexas.org.sota +utexas.org.st-athanasius +utexas.org.tusa +utexas.org.uthabitat +utexas.religion.christian +utexas.sqi.soft +utexas.sqi.soft.aseg +utexas.sqi.soft.ootech +utexas.sqi.soft.projectmgt +utexas.sqi.soft.quality +utexas.zoo.general +uunet.alternet +uunet.announce +uunet.forum +uunet.products +uunet.status +uunet.tech +uw.acct.acc121 +uw.acct.acc131 +uw.acct.acc228 +uw.acct.acc231 +uw.acct.acc232 +uw.acct.acc241 +uw.acct.acc251 +uw.acct.acc291 +uw.acct.acc371 +uw.acct.acc372 +uw.acct.acc381 +uw.acct.acc382 +uw.acct.acc392 +uw.acct.acc401 +uw.acct.acc401a +uw.acct.acc418y +uw.acct.acc431 +uw.acct.acc432 +uw.acct.acc442 +uw.acct.acc443 +uw.acct.acc451 +uw.acct.acc453 +uw.acct.acc454 +uw.acct.acc461 +uw.acct.acc462 +uw.acct.acc463a +uw.acct.acc480 +uw.acct.acc491 +uw.acct.acc601 +uw.acct.acc610 +uw.acct.acc611 +uw.acct.acc630 +uw.acct.acc650 +uw.acct.acc651 +uw.acct.acc660 +uw.acct.acc661 +uw.acct.acc663 +uw.acct.acc670 +uw.acct.acc680 +uw.acct.acc681 +uw.acct.acc692 +uw.acct.acc771 +uw.acct.acc782 +uw.acct.general +uw.acct.macc +uw.acct.research +uw.aco.system +uw.ahs.ahsum +uw.ahs.general +uw.ahs.system +uw.ai.learning +uw.aix.support +uw.alt.sex.beastiality +uw.alt.sex.bestiality +uw.alt.sex.bondage +uw.alt.sex.stories +uw.alt.sex.stories.d +uw.alt.tasteless +uw.anth.anth300 +uw.archive +uw.arts.general +uw.arts.grad +uw.arts.ugrad +uw.asplos +uw.assignments +uw.biol.biol456 +uw.biol.biol461 +uw.business-club +uw.campus-news +uw.casi +uw.ccng.general +uw.ccng.system +uw.cgl +uw.cgl.software +uw.che.che045 +uw.che.che4a +uw.che.che562 +uw.che.che572 +uw.chem116.ahs +uw.chinese +uw.cive.cive221 +uw.cive.cive222 +uw.cive.cive265 +uw.cive.cive306 +uw.cive.cive375 +uw.cive.cive381 +uw.cive.cive403 +uw.cive.cive404 +uw.cive.cive414 +uw.cive.cive422 +uw.cive.cive472 +uw.cive.cive473 +uw.cive.cive483 +uw.cive.cive486 +uw.cive.cive498 +uw.cive.cive640 +uw.cive.cive701 +uw.cive.general +uw.cive.tick +uw.club.badminton +uw.clubs.act-sci +uw.clubs.african +uw.clubs.badminton +uw.clubs.bridge +uw.clubs.ccf +uw.clubs.chemclub +uw.clubs.chinese +uw.clubs.econsociety +uw.clubs.invest +uw.clubs.konnichi-wa +uw.clubs.konnichi-wa.japan +uw.clubs.korean +uw.clubs.navs +uw.clubs.objectivism +uw.clubs.psa +uw.clubs.ssa +uw.clubs.triathlon +uw.clubs.twsa +uw.clubs.ultimate +uw.clubs.waveform.transmission +uw.co.co331 +uw.co.co342 +uw.co.co437 +uw.co.co666 +uw.combopt +uw.computing.support.staff +uw.cong.system +uw.coop.sac +uw.cray +uw.cs.cs100 +uw.cs.cs100.lab21back +uw.cs.cs100.lab21front +uw.cs.cs100.lab22back +uw.cs.cs100.lab22front +uw.cs.cs100.lab23back +uw.cs.cs100.lab23front +uw.cs.cs100.lab24back +uw.cs.cs100.lab24front +uw.cs.cs100.lab31back +uw.cs.cs100.lab31front +uw.cs.cs100.lab32back +uw.cs.cs100.lab32front +uw.cs.cs100.lab33back +uw.cs.cs100.lab33front +uw.cs.cs100.lab34back +uw.cs.cs100.lab34front +uw.cs.cs100.lab41back +uw.cs.cs100.lab41front +uw.cs.cs100.lab42back +uw.cs.cs100.lab42front +uw.cs.cs100.lab43back +uw.cs.cs100.lab43front +uw.cs.cs100.lab44back +uw.cs.cs100.lab44front +uw.cs.cs100.lab51back +uw.cs.cs100.lab51front +uw.cs.cs100.lab52back +uw.cs.cs100.lab52front +uw.cs.cs120 +uw.cs.cs134 +uw.cs.cs200 +uw.cs.cs212 +uw.cs.cs230 +uw.cs.cs240 +uw.cs.cs241 +uw.cs.cs242 +uw.cs.cs242.c++ +uw.cs.cs246 +uw.cs.cs316 +uw.cs.cs330 +uw.cs.cs338 +uw.cs.cs342 +uw.cs.cs370 +uw.cs.cs436 +uw.cs.cs444 +uw.cs.cs445 +uw.cs.cs498p +uw.cs.cs746 +uw.cs.cs788 +uw.cs.cs798d +uw.cs.dept +uw.cs.eee +uw.cs.faculty +uw.cs.general +uw.cs.grad +uw.cs.grad.topics +uw.cs.ugrad +uw.csc +uw.csg +uw.dcs.changes +uw.dcs.courses +uw.dcs.gripe +uw.dcs.news +uw.dcs.operations +uw.dcs.suggestions +uw.dcs.system +uw.dcs.watserv1 +uw.dcs.watshine +uw.disspla +uw.dp.changes +uw.dp.staff +uw.dsgroup +uw.dsgroup.misc +uw.ece.com1a +uw.ece.com1b +uw.ece.ece150 +uw.ece.ece209 +uw.ece.ece304 +uw.ece.ece405 +uw.ece.ece411 +uw.ece.ece443 +uw.ece.ece451 +uw.ece.ece453 +uw.ece.ece471 +uw.ece.ece482 +uw.ece.ece621 +uw.ece.ece647 +uw.ece.ece652 +uw.ece.ele1a +uw.ece.ele1b +uw.ece.jobs +uw.econ.eco101 +uw.econ.eco201 +uw.econ.eco221 +uw.econ.eco301 +uw.econ.econ102 +uw.ee.ee621 +uw.ee.grad +uw.ee.opt +uw.engl.engl102a +uw.engl.engl210e +uw.engl.engl210f +uw.engl.engl794f +uw.engl.grad.research +uw.english-usage +uw.engsoc.athletics +uw.enve.enve320 +uw.enve.enve322 +uw.enve.enve330 +uw.envst.arch171 +uw.envst.arch171.discuss1 +uw.envst.arch171.discuss2 +uw.envst.envs200 +uw.envst.envs220 +uw.envst.ers285 +uw.envst.ers301 +uw.envst.ers305 +uw.envst.ers496 +uw.envst.general +uw.envst.geog165 +uw.envst.geog255 +uw.envst.geog303 +uw.envst.plan220 +uw.envst.plan355 +uw.envst.plan474p +uw.envst.system +uw.ers.ers241 +uw.fass +uw.feds +uw.forsale +uw.gams +uw.gene.gene16x +uw.gene.gene412 +uw.gene.gene452 +uw.gene121.compeng +uw.general +uw.geoeng +uw.gllow +uw.gnu +uw.harmony +uw.history.hist106 +uw.history.hist264a +uw.history.hist264b +uw.history.hist326 +uw.history.hist403 +uw.history.hist653 +uw.icr +uw.icr.forum +uw.icr.hardware +uw.ieee +uw.image-proc +uw.imprint +uw.kin +uw.kin.kin346 +uw.kin.kin401 +uw.kin.kin425 +uw.kin425 +uw.lang +uw.laurel +uw.laurelcreek +uw.library +uw.logic +uw.lpaig +uw.lpaig.changes +uw.lpaig.system +uw.mac-users +uw.mail-list.biomech +uw.mail-list.comp-chem +uw.mail-list.fractals +uw.mail-list.s +uw.mail-list.sun-managers +uw.maple +uw.math.faculty +uw.math.faculty.planning +uw.math.grad +uw.math.math136 +uw.math.math235 +uw.math.mathsoc +uw.math.tsa +uw.mathcad +uw.matlab +uw.me.me262 +uw.me.me269 +uw.me.me2a +uw.me.me2b +uw.me.me300 +uw.me.me3a +uw.me.me3b +uw.me.me423 +uw.me.me4a +uw.me.me4b +uw.mech.system +uw.mfcf.bugs +uw.mfcf.gripe +uw.mfcf.hardware +uw.mfcf.hardware.mac +uw.mfcf.people +uw.mfcf.questions +uw.mfcf.software +uw.mfcf.software.mac +uw.mfcf.suggestions +uw.mfcf.system +uw.mfcf.updates +uw.minos +uw.msci.msci211 +uw.msci.msci261 +uw.msci.msci311 +uw.msci.msci311ta +uw.msci.msci33 +uw.msci.msci331 +uw.msci.msci431 +uw.msci.msci432 +uw.msci.msci441 +uw.msci.msci442 +uw.msci.msci442.reviews +uw.msci.msci442.thoughts +uw.msci.msci601 +uw.msci.msci604 +uw.msci.msci642 +uw.msci.msci646 +uw.msci.msci723 +uw.msci.mssa +uw.nag +uw.network +uw.network.external +uw.network.stats +uw.neural-nets +uw.newsgroups +uw.opinion +uw.os.research +uw.os2-users +uw.outers +uw.pami +uw.pami.bsd +uw.pami.gripe +uw.pami.system +uw.phil.phil256 +uw.phil.phil322 +uw.phys.phys123 +uw.pmath.pmath336 +uw.pmath.pmath399c +uw.pmc +uw.progressive.conservatives.club +uw.psychology +uw.psychology.psyc101b +uw.psychology.psyc207 +uw.psychology.psyc212 +uw.psychology.psyc261 +uw.psychology.psyc292 +uw.psychology.psyc304 +uw.psychology.psyc306 +uw.psychology.psyc311 +uw.psychology.psyc393 +uw.psychology.psyc463a +uw.psychology.psyc631 +uw.psychology.psyc647a +uw.psychology.ugrad +uw.psychology.ugrad.research +uw.recycling +uw.scicom +uw.sd.grad +uw.sgi.support +uw.shoshin +uw.shoshin.changes +uw.shoshin.system +uw.staffassoc +uw.stats +uw.stats.s +uw.stats.stat204 +uw.stats.stat211 +uw.stats.stat231 +uw.stats.stat331 +uw.stv.stv204 +uw.sun-owners +uw.swen +uw.syde.syde114 +uw.syde.syde121 +uw.syde.syde182 +uw.syde.syde1b +uw.syde.syde311 +uw.syde.syde312 +uw.syde.syde321 +uw.syde.syde381 +uw.syde.syde3a +uw.syde.syde3b +uw.syde.syde422 +uw.syde.syde533 +uw.syde.syde536 +uw.syde.syde621 +uw.syde.syde632 +uw.sylvan +uw.sylvan.os +uw.sys.amiga +uw.sys.apollo +uw.sys.atari +uw.sytek +uw.talks +uw.test +uw.tex +uw.ucc.fortrade +uw.ucc.review +uw.ugrad.cs +uw.unix +uw.unix.sysadmin +uw.usystem +uw.utility.shutdowns +uw.uwinfo +uw.virtual-worlds +uw.visualization +uw.vlsi +uw.vlsi.software +uw.vlsi.system +uw.vm-migration +uw.vms +uw.watgreen +uw.watstar +uw.weef +uw.win95-users +uw.wlu.bus +uw.wordperfect.users +uw.wpirg +uw.x-hints +uw.x-windows +uwcsa.general +uwisc.forsale +uwisc.forum +uwisc.general +uwisc.nsfdoc +uwm.general +uwo.astro.ast021 +uwo.biochem +uwo.biology.bio221a +uwo.biomed.engrg +uwo.biomed.inroads +uwo.ccs.changes +uwo.clubs.wow-kayak +uwo.comp.general +uwo.comp.helpdesk +uwo.comp.ibm.announce +uwo.comp.micro +uwo.comp.net-status +uwo.comp.nupop +uwo.comp.packet +uwo.comp.pine +uwo.comp.progress +uwo.comp.security +uwo.comp.sgi.announce +uwo.comp.sun.announce +uwo.comp.wais +uwo.comp.x500 +uwo.csd.acm +uwo.csd.cs175 +uwo.csd.cs201 +uwo.csd.cs304 +uwo.csd.cs305 +uwo.csd.cs319 +uwo.csd.cs331 +uwo.csd.cs333 +uwo.csd.cs333y +uwo.csd.cs346 +uwo.csd.cs357a +uwo.csd.cs402 +uwo.csd.cs434 +uwo.csd.cs619 +uwo.csd.cs650a +uwo.engrg.es391b +uwo.engrg.general +uwo.events +uwo.geog.308b +uwo.iaa.research +uwo.its.cmsteam +uwo.library +uwo.med +uwo.med.research +uwo.med.talk +uwo.physics.optics +uwo.pma +uwo.slis.c558 +uwo.slis.c591 +uwo.slis.c601 +uwo.slis.c640 +uwo.slis.c705 +uwo.slis.c706 +uwo.slis.c707 +uwo.slis.c708 +uwo.slis.review +uwo.sogs +uwo.ssc.network +uwo.test +uwo.wbs.general +uwo.wbs.hba +uwo.wbs.mba +uwo.wbs.phd +uwo.wbs.techtalk +va.config +va.forsale +va.general +va.jobs +va.politics +va.test +van.chatter +van.forsale +van.general +van.jobs +van.test +van.vpcus.announce +van.vpcus.general +van.vpcus.sigs.internet +van.vpcus.sigs.os2 +vegas.bi +vegas.config +vegas.food +vegas.for-sale +vegas.general +vegas.jobs +vegas.motss +vegas.personals +vegas.personals.fsf +vegas.personals.fsm +vegas.personals.msf +vegas.personals.msm +vegas.personals.swingers +vegas.singles +vegas.test +vgc.announce +vgc.archives +vgc.config +vgc.jp.announce +vgc.jp.games.calssical +vgc.jp.games.kingofbattle +vgc.jp.games.quiz +vgc.jp.games.winbattle +vgc.jp.misc +vgc.jp.newgames +vgc.jp.test +vgc.jp.updateinfo +vgc.jp.users.newusers +vgc.jp.users.questions +vgc.jp.wanted +viwa.a.xep.bam +viwa.annimals +viwa.anti_virus +viwa.any.humor +viwa.bbs.talk +viwa.books +viwa.cinema +viwa.cobet +viwa.commerce +viwa.crack.and.hack +viwa.elite +viwa.english.talks +viwa.formula.one +viwa.forward +viwa.forward.talk +viwa.gama +viwa.gr.ob +viwa.grafoman +viwa.guitar +viwa.hardware +viwa.history +viwa.inet +viwa.ipex.flame +viwa.local_talks +viwa.mailer +viwa.make-a-fake +viwa.metaphisic.rpg +viwa.military.music +viwa.military.sex +viwa.motherland +viwa.music.lyrics +viwa.music.talks +viwa.music.talks.rap +viwa.music.talks.rave +viwa.music.uue +viwa.os2 +viwa.os2.soft +viwa.photo.uue +viwa.point +viwa.point.discuss +viwa.politics +viwa.programming +viwa.pvt.aqualangers.club +viwa.pvt.newspaper +viwa.ru.djatlov +viwa.sex +viwa.shells +viwa.sobutilnik +viwa.sport +viwa.sysop.gad +viwa.talks.about.nothing +viwa.tormoz +viwa.tosser +viwa.tracker.sampler +viwa.unix +viwa.vampire +viwa.zze +vmsnet.alpha +vmsnet.announce +vmsnet.announce.newusers +vmsnet.decus.journal +vmsnet.decus.lugs +vmsnet.employment +vmsnet.epsilon-cd +vmsnet.groups +vmsnet.infosystems.gopher +vmsnet.infosystems.misc +vmsnet.internals +vmsnet.mail.misc +vmsnet.mail.mx +vmsnet.mail.pmdf +vmsnet.misc +vmsnet.networks.desktop.misc +vmsnet.networks.desktop.pathworks +vmsnet.networks.management.decmcc +vmsnet.networks.management.misc +vmsnet.networks.misc +vmsnet.networks.tcp-ip.cmu-tek +vmsnet.networks.tcp-ip.misc +vmsnet.networks.tcp-ip.multinet +vmsnet.networks.tcp-ip.tcpware +vmsnet.networks.tcp-ip.ucx +vmsnet.networks.tcp-ip.wintcp +vmsnet.pdp-11 +vmsnet.sdk.openvms.fieldtest +vmsnet.sources +vmsnet.sources.d +vmsnet.sources.games +vmsnet.sysmgt +vmsnet.test +vmsnet.tpu +vmsnet.uucp +vmsnet.vms-posix +vnet.general +vu.org.mac101 +vuw.general +wash.assistive-tech +wash.general +wash.politics +wash.test +well.general +wesley.general +wi.forsale +wi.general +wi.transit +witten.flohmarkt +witten.kultur +witten.politik +witten.test +wiz.bmw +wiz.mopar +wiz.motorace +wiz.nren +wiz.roadsters +wny.events +wny.general +wny.motss +wny.news +wny.rochester.freenet +wny.rocslug +wny.seminar +wny.test +wny.unix-wizards +wny.wanted +wny.wbfo +wny.yumyum +wolfhh.admin +wolfhh.archive +wolfhh.config +wolfhh.general +wolfhh.sources +wolfhh.test +wpg.forsale.computers +wpg.forsale.misc +wpg.general +wpg.politics +wpi.ccc +wpi.ccc.training +wpi.clubs.hsa +wpi.cs.cs3013 +wpi.cs.cs4513 +wpi.cs.cs502 +wpi.en.en1251 +wpi.events +wpi.faculty +wpi.flame +wpi.library +wpi.net.roadmap +wpi.philosophy +wpi.spanish +wpi.steercom +wpi.test +wtby.announce +wu.bus.fin5411 +wu.bus.mgt5050 +wu.bus.mgt513f +wu.cait.3-tier +wu.cec.general +wu.cs.general +wyo.education +wyo.energy +wyo.general +wyo.internet +wyo.jobs +wyo.recreation +xs4all.announce +xs4all.be.announce +xs4all.be.general +xs4all.be.isdn +xs4all.be.test +xs4all.be.www +xs4all.isdn +xs4all.mediacul +xs4all.mediacul.zandbak +xs4all.test +xs4all.uucp +xs4all.www +yakima.general +yolo.general +yolo.life +yolo.news +yolo.news.admin +yolo.test +york.announce +york.ariel +york.arts.course.pols4110 +york.atk.course.nats1720 +york.atk.course.nats1900 +york.atkinson.huma1790 +york.bethune.course.bc1800c +york.calumet +york.chry +york.club.physclub +york.club.seds +york.doc +york.email +york.english.course.ak-eng3100z +york.english.course.ak-eng3780 +york.english.course.ak3770 +york.english.course.ak3780 +york.english.course.en2690 +york.english.course.eng319006a +york.english.course.eng777 +york.fes.undercurrents +york.fes.writers-cafe +york.general +york.history.course.hist1000c +york.history.course.hist3930a +york.history.discussion +york.humanities.course.huma2810 +york.mathstat.course.math2221 +york.mathstat.course.math4100 +york.natsci.course.nats1770 +york.philosophy.course.ak-phil2410 +york.philosophy.course.modr1714 +york.philosophy.course.phil2050 +york.philosophy.course.phil2080 +york.philosophy.course.phil2170 +york.philosophy.course.phil2240 +york.philosophy.course.phil2250 +york.philosophy.course.phil3220 +york.philosophy.course.phil3990 +york.philosophy.course.phil6100 +york.pols.dept +york.psychology.course.psyc3010 +york.psychology.course.psyc3010c +york.psychology.course.psyc3030 +york.science.course.phys5290 +york.science.course.phys5390 +york.science.maxwell +york.science.microlabs +york.socialscience.course.sosc3990h +york.test.multimedia +yuba.general +z-netz.alt.adventure +z-netz.alt.americansports +z-netz.alt.amiga-dos.helpline +z-netz.alt.apc+tcp.nocover +z-netz.alt.apc+tcp.support.databench +z-netz.alt.apc+tcp.usertreffen +z-netz.alt.astronomie.ereignisse +z-netz.alt.astronomie.texte +z-netz.alt.auto.schnell+tiefer +z-netz.alt.bayernanzeiger +z-netz.alt.bescheuert +z-netz.alt.bier +z-netz.alt.bikers-corner +z-netz.alt.binaer.hackreport +z-netz.alt.blueboxing +z-netz.alt.boerse +z-netz.alt.btx-gate +z-netz.alt.c64 +z-netz.alt.cadcam +z-netz.alt.chat.african-link +z-netz.alt.computerclub.auge +z-netz.alt.computerclub.ihc +z-netz.alt.draco.allgemein +z-netz.alt.drogen +z-netz.alt.duemmlich +z-netz.alt.ebm+electro +z-netz.alt.eigener_chef +z-netz.alt.eisenbahn +z-netz.alt.eishockey +z-netz.alt.elektronik +z-netz.alt.erotik.geschichten +z-netz.alt.erotik.talk +z-netz.alt.esoterik +z-netz.alt.essen +z-netz.alt.familie +z-netz.alt.fan.admin-4-stock +z-netz.alt.fan.bifff +z-netz.alt.fan.helmut_goj +z-netz.alt.fan.holzmann +z-netz.alt.fan.kaeptnblaubaer +z-netz.alt.fan.rudi-pohlen +z-netz.alt.fileserver +z-netz.alt.firm-net.werbung +z-netz.alt.fractint +z-netz.alt.freizeit.battletech +z-netz.alt.gate-bau +z-netz.alt.geos.allgemein +z-netz.alt.geos.binaer +z-netz.alt.geruechte +z-netz.alt.gesunde_schule +z-netz.alt.handicap.allgemein +z-netz.alt.handicap.blind +z-netz.alt.hilfe +z-netz.alt.hoersturz +z-netz.alt.ig-metall.aktuelles +z-netz.alt.ingenieure +z-netz.alt.ingenieure.vdi +z-netz.alt.jokes +z-netz.alt.jonglieren +z-netz.alt.knobel-ecke +z-netz.alt.kochbuch +z-netz.alt.kommerzielles +z-netz.alt.koordination.user+sysops +z-netz.alt.kultur.vernetzt +z-netz.alt.kunst +z-netz.alt.lightwave +z-netz.alt.linux +z-netz.alt.listen +z-netz.alt.magazine.pakt +z-netz.alt.mailbox.recht +z-netz.alt.mailboxwerbung +z-netz.alt.med.allgemein +z-netz.alt.med.mta +z-netz.alt.med.notfall +z-netz.alt.med.pflege +z-netz.alt.med.studenten +z-netz.alt.med.therapie +z-netz.alt.miteinander.stammtisch +z-netz.alt.modellbahn +z-netz.alt.modellbau +z-netz.alt.modem.pep +z-netz.alt.modem.usr +z-netz.alt.modem.zyxel +z-netz.alt.musik +z-netz.alt.musik.pink-floyd +z-netz.alt.musiker.allgemein +z-netz.alt.musiker.binaer +z-netz.alt.musiker.midi +z-netz.alt.obskur +z-netz.alt.only.frauen +z-netz.alt.only.maenner +z-netz.alt.partnerwahl +z-netz.alt.pbem.allgemein.allgemein +z-netz.alt.pbem.allgemein.anleitungen +z-netz.alt.pbem.allgemein.spielersuche +z-netz.alt.pbem.allgemein.spielsuche +z-netz.alt.pbem.allgemein.tools +z-netz.alt.pbem.imperium.allgemein +z-netz.alt.pbem.imperium.anleitungen +z-netz.alt.pbem.imperium.intern.news +z-netz.alt.pbem.imperium.intern.updates +z-netz.alt.pbem.imperium.news +z-netz.alt.pbem.imperium.spielersuche +z-netz.alt.pbem.imperium.spielsuche +z-netz.alt.pbem.imperium.tools +z-netz.alt.pbem.wichtig +z-netz.alt.pgp.allgemein +z-netz.alt.pgp.schluessel +z-netz.alt.pgp.tools.msdos +z-netz.alt.pgp.tools.sonstige +z-netz.alt.portrait.software +z-netz.alt.presse.mitteilungen +z-netz.alt.punk +z-netz.alt.pyrotechnik +z-netz.alt.rave-bin +z-netz.alt.raver +z-netz.alt.raver.strike +z-netz.alt.raytracing +z-netz.alt.rechner.amiga.binaer +z-netz.alt.rechner.amiga.diskussion +z-netz.alt.rechner.amiga.quellen +z-netz.alt.rechner.apple.binaer +z-netz.alt.rechner.apple.diskussion +z-netz.alt.rechner.apple.quellen +z-netz.alt.rechner.atari.8bit +z-netz.alt.rechner.atari.binaer +z-netz.alt.rechner.atari.diskussion +z-netz.alt.rechner.atari.quellen +z-netz.alt.rechner.c64+c128.binaer +z-netz.alt.rechner.c64+c128.diskussion +z-netz.alt.rechner.c64+c128.quellen +z-netz.alt.rechner.dokumentation +z-netz.alt.rechner.hinweis +z-netz.alt.rechner.ibm.binaer +z-netz.alt.rechner.ibm.diskussion +z-netz.alt.rechner.ibm.quellen +z-netz.alt.rechner.pocket-pool +z-netz.alt.rechner.psion.allgemein +z-netz.alt.rechner.psion.binaer +z-netz.alt.rechner.sonstiges +z-netz.alt.rechner.unix.diskussion +z-netz.alt.rechner.unix.quellen +z-netz.alt.rechnerkrieg +z-netz.alt.rollenspiele.dsa +z-netz.alt.rollenspiele.shadowrun +z-netz.alt.rollenspiele.tradecards +z-netz.alt.sat-tv +z-netz.alt.sauger-info.allgemein +z-netz.alt.sauger-info.amiga +z-netz.alt.sauger-info.apple +z-netz.alt.sauger-info.atari +z-netz.alt.sauger-info.ibm +z-netz.alt.sauger-info.sonstige +z-netz.alt.schach +z-netz.alt.schule.waldorf +z-netz.alt.scientology +z-netz.alt.spiele.infocom +z-netz.alt.spiele.infocom-binaer +z-netz.alt.support.dinoex +z-netz.alt.support.dpoint +z-netz.alt.support.emfido +z-netz.alt.support.fidozc +z-netz.alt.support.fidozerb +z-netz.alt.support.fserv +z-netz.alt.support.isdn-master +z-netz.alt.support.maczpoint +z-netz.alt.support.microdot +z-netz.alt.support.microdot-beta +z-netz.alt.support.mp2.allgemein +z-netz.alt.support.mp2.binaer +z-netz.alt.support.msgbase +z-netz.alt.support.mybox +z-netz.alt.support.natascha +z-netz.alt.support.ncbmail.allgemein +z-netz.alt.support.ncbmail.batch+script +z-netz.alt.support.ncbmail.bin.bugfix +z-netz.alt.support.ncbmail.bin.delta-up +z-netz.alt.support.ncbmail.bin.exe-upda +z-netz.alt.support.ncbmail.bin.tools +z-netz.alt.support.ncbmail.bugfix +z-netz.alt.support.ncbmail.fidogate +z-netz.alt.support.ncbmail.tools +z-netz.alt.support.ncbmail.vorschlaege +z-netz.alt.support.ncbmail.wichtig +z-netz.alt.support.ncbmail.windows +z-netz.alt.support.pmzpoint +z-netz.alt.support.postmaster +z-netz.alt.support.speedpascal +z-netz.alt.support.the_dot +z-netz.alt.support.theanswer.allgemein +z-netz.alt.support.theanswer.binaer +z-netz.alt.support.theanswer.meldungen +z-netz.alt.support.tm-software +z-netz.alt.support.turbo +z-netz.alt.support.turbomail.allgemein +z-netz.alt.support.turbomail.binaer +z-netz.alt.support.turbomail.frage+bugs +z-netz.alt.support.uucpfz +z-netz.alt.support.uzercp +z-netz.alt.support.xpoint.allgemeines +z-netz.alt.support.xpoint.fido +z-netz.alt.support.xpoint.meldungen +z-netz.alt.support.xpoint.tools +z-netz.alt.support.xpoint.updates +z-netz.alt.support.z-man +z-netz.alt.support.zclick.bugreport +z-netz.alt.support.zerberus.bugmeldunge +z-netz.alt.support.zerberus.charon +z-netz.alt.support.zerberus.charon.faq +z-netz.alt.support.zerberus.diskussion +z-netz.alt.support.zerberus.frage+antwo +z-netz.alt.support.zerberus.os2 +z-netz.alt.support.zerberus.tools +z-netz.alt.support.zerberus.vorschlaege +z-netz.alt.support.zerberus.wichtig +z-netz.alt.support.zeusbox +z-netz.alt.support.znews +z-netz.alt.support.zodiacs_point +z-netz.alt.support.zufsig +z-netz.alt.tagebuch +z-netz.alt.telefonkarten +z-netz.alt.test +z-netz.alt.tiere +z-netz.alt.turbo_pool +z-netz.alt.tv.babylon5 +z-netz.alt.tv.lindenstrasse +z-netz.alt.vegetarier +z-netz.alt.verschwoerung +z-netz.alt.vfiz.diskurs +z-netz.alt.vfiz.meldungen +z-netz.alt.videoschniit.vlabmotion +z-netz.alt.viren.intern +z-netz.alt.werbung +z-netz.alt.wichtig +z-netz.alt.windows.binaer +z-netz.alt.windows.treiber +z-netz.alt.wirtschaft.allgemein +z-netz.alt.wirtschaft.boersen +z-netz.alt.wirtschaft.service +z-netz.alt.wrestling +z-netz.alt.wrestling.wcw +z-netz.alt.wrestling.wwf +z-netz.alt.zconnect.diskussion +z-netz.alt.zconnect.gremium.diskussion +z-netz.alt.zconnect.gremium.vorschlag +z-netz.alt.zconnect.gremium.wahlurne +z-netz.alt.zconnect.meldungen +z-netz.alt.zconnect.wahlurne +z-netz.alt.zivildienst +z-netz.bildung.allgemein +z-netz.bildung.schule +z-netz.bildung.uni +z-netz.datenschutz.allgemein +z-netz.datenschutz.spionage +z-netz.forum.diskussion.aktuelles +z-netz.forum.diskussion.allgemein +z-netz.forum.diskussion.beziehungen +z-netz.forum.diskussion.militaer+kdv +z-netz.forum.diskussion.philosophie +z-netz.forum.diskussion.politik +z-netz.forum.diskussion.sexualitaet +z-netz.forum.frage+antwort +z-netz.forum.krisen +z-netz.forum.netzwesen +z-netz.forum.news +z-netz.forum.religion +z-netz.forum.soziales +z-netz.forum.umweltschutz +z-netz.forum.verbrauchertip +z-netz.forum.verkehr +z-netz.forum.versicherung +z-netz.freizeit.allgemein +z-netz.freizeit.brettspiele +z-netz.freizeit.consolen +z-netz.freizeit.filme.allgemein +z-netz.freizeit.filme.faq +z-netz.freizeit.foto +z-netz.freizeit.motorrad +z-netz.freizeit.musik.allgemein +z-netz.freizeit.musik.elektro +z-netz.freizeit.musik.on_stage +z-netz.freizeit.musik.pop +z-netz.freizeit.rollenspiele.ad+d +z-netz.freizeit.rollenspiele.allgemein +z-netz.freizeit.rollenspiele.dsa +z-netz.freizeit.rollenspiele.shadowrun +z-netz.freizeit.rollenspiele.tradecards +z-netz.freizeit.sammler +z-netz.freizeit.theater +z-netz.freizeit.tiere +z-netz.freizeit.tv.allgemein +z-netz.freizeit.urlaub +z-netz.freizeit.video +z-netz.freizeit.zeitschriften +z-netz.fundgrube.biete.allgemein +z-netz.fundgrube.biete.elektronik +z-netz.fundgrube.diskussion +z-netz.fundgrube.gratis +z-netz.fundgrube.job-boerse +z-netz.fundgrube.suche.allgemein +z-netz.fundgrube.suche.elektronik +z-netz.fundgrube.wohnraum +z-netz.gesundheit.aids +z-netz.gesundheit.allgemein +z-netz.gesundheit.diskussion +z-netz.gesundheit.drogen +z-netz.gesundheit.forschung +z-netz.gesundheit.krankheiten +z-netz.gesundheit.pharmaka +z-netz.gesundheit.tips +z-netz.koordination.einstellungen +z-netz.koordination.meldungen +z-netz.koordination.systemdaten +z-netz.koordination.tips+tricks +z-netz.koordination.user+sysops +z-netz.koordination.wahlurne +z-netz.koordination.z-netz-alt +z-netz.literatur.allgemein +z-netz.literatur.sf+fantasy +z-netz.magazine.allgemein +z-netz.magazine.cj-page +z-netz.magazine.forum +z-netz.magazine.mjm +z-netz.miteinander.fahren +z-netz.miteinander.kontakte +z-netz.miteinander.wohnen +z-netz.netzwerke.allgemein +z-netz.netzwerke.lan +z-netz.netzwerke.peer-to-peer +z-netz.netzwerke.wan +z-netz.rechner.acorn.allgemein +z-netz.rechner.amiga.allgemein +z-netz.rechner.amiga.hardware +z-netz.rechner.amiga.programmieren +z-netz.rechner.amiga.software +z-netz.rechner.amiga.spiele +z-netz.rechner.amiga.viren +z-netz.rechner.apple.allgemein +z-netz.rechner.apple.hardware +z-netz.rechner.apple.programmieren +z-netz.rechner.apple.spiele +z-netz.rechner.apple.viren +z-netz.rechner.atari.8-bit +z-netz.rechner.atari.allgemein +z-netz.rechner.atari.hardware +z-netz.rechner.atari.programmieren +z-netz.rechner.atari.spiele +z-netz.rechner.atari.viren +z-netz.rechner.c64+c128.allgemein +z-netz.rechner.c64+c128.hardware +z-netz.rechner.c64+c128.programmieren +z-netz.rechner.c64+c128.spiele +z-netz.rechner.c64+c128.viren +z-netz.rechner.cd-rom +z-netz.rechner.graphik +z-netz.rechner.hardware +z-netz.rechner.ibm.allgemein +z-netz.rechner.ibm.hardware +z-netz.rechner.ibm.os2 +z-netz.rechner.ibm.programmieren +z-netz.rechner.ibm.spiele +z-netz.rechner.ibm.viren +z-netz.rechner.ibm.windows.win3 +z-netz.rechner.ibm.windows.win95 +z-netz.rechner.ibm.windows.winnt +z-netz.rechner.programmieren +z-netz.rechner.spiele +z-netz.rechner.unix +z-netz.rechtswesen.diskurs.allgemein +z-netz.rechtswesen.diskurs.arbeitsrecht +z-netz.rechtswesen.diskurs.edvrecht +z-netz.rechtswesen.diskurs.mietrecht +z-netz.rechtswesen.diskurs.reiserecht +z-netz.rechtswesen.diskurs.steuerrecht +z-netz.rechtswesen.diskurs.verkehrsrech +z-netz.rechtswesen.diskurs.wehrrecht +z-netz.rechtswesen.urteile.allgemein +z-netz.rechtswesen.urteile.arbeitsrecht +z-netz.rechtswesen.urteile.edvrecht +z-netz.rechtswesen.urteile.mietrecht +z-netz.rechtswesen.urteile.reiserecht +z-netz.rechtswesen.urteile.steuerrecht +z-netz.rechtswesen.urteile.verkehrsrech +z-netz.rechtswesen.urteile.wehrrecht +z-netz.sf+fantasy.allgemein +z-netz.sf+fantasy.babylon5.allgemein +z-netz.sf+fantasy.daten +z-netz.sf+fantasy.startrek.allgemein +z-netz.sf+fantasy.startrek.daten +z-netz.sf+fantasy.startrek.magazin +z-netz.sf+fantasy.starwars.allgemein +z-netz.sport.allgemein +z-netz.sport.eishockey.allgemein +z-netz.sport.fahrrad.allgemein +z-netz.sport.fussball.allgemein +z-netz.sport.fussball.tipspiel +z-netz.sprachen.algorithmen +z-netz.sprachen.allgemein +z-netz.sprachen.basic +z-netz.sprachen.c +z-netz.sprachen.dbase +z-netz.sprachen.delphi +z-netz.sprachen.forth +z-netz.sprachen.modula +z-netz.sprachen.oberon +z-netz.sprachen.pascal +z-netz.sprachen.rexx +z-netz.telecom.allgemein +z-netz.telecom.amateurfunk +z-netz.telecom.btx +z-netz.telecom.cb-funk +z-netz.telecom.datex +z-netz.telecom.fax +z-netz.telecom.frage+antwort +z-netz.telecom.gateway +z-netz.telecom.isdn +z-netz.telecom.mobilfunk +z-netz.telecom.modem.allgemein +z-netz.telecom.null130 +z-netz.telecom.points +z-netz.telecom.satellit +z-netz.telecom.telefon +z-netz.test +z-netz.wichtig +z-netz.wissenschaft.allgemein +z-netz.wissenschaft.archaeologie +z-netz.wissenschaft.astronomie.allgem +z-netz.wissenschaft.astronomie.daten +z-netz.wissenschaft.biologie +z-netz.wissenschaft.chemie +z-netz.wissenschaft.geisteswschaft +z-netz.wissenschaft.geo +z-netz.wissenschaft.informatik +z-netz.wissenschaft.mathematik +z-netz.wissenschaft.philosophie +z-netz.wissenschaft.physik +z-netz.wissenschaft.psychologie +z-netz.wissenschaft.soziologie +z-netz.wissenschaft.technik +za.ads.jobs +za.ads.lifts +za.ads.misc +za.archives +za.culture.xhosa +za.edu.comp +za.environment +za.events +za.flame +za.frd.announce +za.humour +za.info-policy +za.misc +za.net.maps +za.net.misc +za.net.stats +za.net.uninet +za.org.cssa +za.politics +za.schools +za.sport +za.test +za.travel +za.tv.misc +za.tv.satellite +za.unix.misc +zipnews.announce +zipnews.control +zipnews.general +zipnews.gov.news.general +zipnews.gov.news.summary.48hours +zipnews.gov.pub-ser.electricity.utilities +zipnews.gov.pub-ser.fire.public-safety.police +zipnews.gov.pub-ser.general +zipnews.gov.pub-ser.museums.zoos.gardens +zipnews.gov.pub-ser.sanitation +zipnews.gov.pub-ser.services.utilities.general +zipnews.gov.us.contracts.budgets +zipnews.gov.us.defense +zipnews.gov.us.faa +zipnews.gov.us.fcc +zipnews.gov.us.fda +zipnews.gov.us.federal.reserve.fdic +zipnews.gov.us.military +zipnews.gov.us.nasa +zipnews.gov.us.national.politics +zipnews.gov.us.sec-cftc +zipnews.gov.us.society +zipnews.gov.us.society.demographics.social-trends +zipnews.gov.us.society.ethnic.special.interest.groups +zipnews.gov.us.society.social-issues +zipnews.gov.us.supreme-court +zipnews.gov.world.analysis +zipnews.gov.world.democracy.human-rights +zipnews.gov.world.diplomatic.security +zipnews.gov.world.economic +zipnews.gov.world.global.communications +zipnews.gov.world.news +zipnews.gov.world.politics +zipnews.gov.world.press-review +zipnews.gov.world.regional.africa +zipnews.gov.world.regional.east-asia.pacific +zipnews.gov.world.regional.europe-canada.russia-cis +zipnews.gov.world.regional.latin-american.caribbean +zipnews.gov.world.regional.middle-east.north-africa.south-asia +zipnews.gov.world.special-report +zipnews.gov.world.summary.french +zipnews.gov.world.summary.russian +zipnews.gov.world.summary.spanish +zipnews.sports.baseball.d +zipnews.sports.basketball.d +zipnews.sports.football.d +zipnews.sports.hockey.d +zippo.announce +zippo.editorial +zippo.general +zippo.spamhippo.top100 +linet.misc +alt.politics.fans.izquierdaunida +alt.music.midi.keydisk-terminator +no.alt.news-treff +alt.twosixhundred.uk +alt.usage.icelandic +alt.tv.tellytubbies.hardcore.binaries +alt.binaries.pictures.n0rp.raver +alt.binaries.pictures.n0rp +alt.flame.wankadia +alt.reddingsbrigade +alt.law-enforcement +alt.alt2600 +alt.picture-framing +alt.binaries.pictures.erotica.stockingsex +alt.fan.southpark.chef +alt.uk.penpals +alt.conspiracy.finast +de.rec.spiele.brett+karten +alt.binaries.pictures.erotica.spanking.schoolgirl +alt.fan.geri-halliwell +alt.smokers.cigars.marketplace +alt.uk.stevenage.bohemian +alt.kmart +alt.binaries.pictures.erotica.fetish.female.socks +alt.dreams.toltec +alt.sewing.extraspecial.fabric.and.custom.sewing +alt.politics.marijuana +alt.tv.fools-and-horses +alt.michael.l.kilbourn +alt.fan.emma-bunton +alt.fan.victoria-adams +alt.fan.melanie-brown +alt.support.domestic-violence +alt.games.video.sony-playstation +alt.edgar +de.alt.fan.die-aerzte +alt.arts.bujinkan-sucks +alt.disney.beanies +alt.health.biofeedback +tw.bbs.alumni.hgsh +alt.walmart +alt.binaries.screen-savers.mac +alt.quake.god.global.all.round.cool.master.of.the.world.who.likes.to.make.up.groups.with.big.names.who.is.it +alt.desert.restoration +alt.fan.pere-ubu +alt.music.lisa-loeb +alt.smokers.cigars.flame +alt.smokers.cigars.cuban +alt.religion.subgenius.is.lame +alt.zuzu +alt.stupidass +alt.binaries.pictures.nudism.wolfpack.repost +alt.binaries.pictures.nudism.wolfpack.floodgates +it.discussioni.leggende.metropolitane +alt.music.pere-ubu +alt.sports.soccer.worldcup.england +alt.politics.usa.constitution.gun-rights +alt.fan.yasmine-bleeth +alt.binaries.nospam.female.bodyhair.pubes +alt.humor.dutch.terrace +hannet.ml.tex.tetex +hannet.ml.text.sgml-tools +hannet.ml.misc.brand-names +hannet.ml.cad.catia-l +hannet.ml.cad.proe-users +de.alt.sci.architektur +alt.walter-cronkite.stereo.dean-stark +alt.walter-cronkite.mutual-fund +alt.walter-cronkite.zamboni.moderated +alt.walter-cronkite.i-see-a.great-need +alt.genius.only-sane-man +alt.who.the.feck.is.walter.cronkite +alt.activism.noise-pollution +alt.binaries.pictures.erotica.kmart +alt.binaries.global.quake +alt.schmuck.follower.dead.bad.lady.novelist +alt.planets.mercury +alt.planets.venus +alt.planets.earth +alt.planets.mars +alt.planets.asteroid-belt +alt.planets.jupiter +alt.planets.saturn +alt.planets.uranus +alt.planets.neptune +alt.planets.pluto +alt.planets.earth.moon +alt.planets.mars.moons.phobos +alt.planets.mars.moons.deimos +alt.planets.jupiter.moons.metis +alt.planets.jupiter.moons.amalthea +alt.planets.jupiter.moons.adrastea +alt.planets.jupiter.moons.thebe +alt.planets.jupiter.moons.io +alt.planets.jupiter.moons.europa +alt.planets.jupiter.moons.ganymede +alt.planets.jupiter.moons.callisto +alt.planets.jupiter.moons.leda +alt.planets.jupiter.moons.himalia +alt.planets.jupiter.moons.lysithea +alt.planets.jupiter.moons.elara +alt.planets.jupiter.moons.ananke +alt.planets.jupiter.moons.carme +alt.planets.jupiter.moons.pasiphae +alt.planets.jupiter.moons.sinope +alt.planets.saturn.moons.pan +alt.planets.saturn.moons.atlas +alt.planets.saturn.moons.prometheus +alt.planets.saturn.moons.janus +alt.planets.saturn.moons.enceladus +alt.planets.saturn.moons.phoebe +alt.planets.uranus.moons.miranda +alt.planets.uranus.moons.ariel +alt.planets.uranus.moons.umbriel +alt.planets.uranus.moons.titania +alt.planets.uranus.moons.oberon +alt.planets.uranus.moons.cordelia +alt.planets.uranus.moons.cressidia +alt.planets.uranus.moons.desdemona +alt.planets.uranus.moons.juliet +alt.planets.uranus.moons.portia +alt.planets.uranus.moons.puck +alt.planets.uranus.moons.sycorax +alt.planets.neptune.moons.proteus +alt.planets.neptune.moons.triton +alt.planets.neptune.moons.nereid +alt.planets.pluto.moons.charon +alt.planets.misc +de.etc.finanz.software +de.comp.os.unix.apps +de.comp.os.unix.misc +de.comp.os.unix.programming +de.comp.os.unix.discussion +de.comp.os.unix.linux.misc +de.comp.os.unix.linux.newusers +de.comp.os.unix.linux.hardware +de.comp.os.unix.sinix +de.comp.os.unix.bsd +de.comp.os.unix.x11 +de.comp.os.unix.networking +alt.geld +alt.binaries.gdead.d +alt.uk.squat +alt.goddess.finkelstein +alt.flame.hammer +alt.mcdonalds.flame +alt.agnosticism +alt.tv.magnificent-7 +alt.binaries.pictures.humor.babies +alt.walter-cronkite.metallurgy +alt.walter-cronkite.bedroom.deutschland +alt.walter-cronkite.nubile-dentist.1975 +alt.walter-cronkite.erotica.hummus.moderated +alt.walter-cronkite.revenge-of.singe-de-noel +alt.walter-cronkite.heimlich.tori-amos +alt.walter-cronkite.gasoline.implants +alt.binaries.spanking +alt.sex.gaymen.porn +alt.dur.test +alt.fan.static +alt.games.draughts +alt.comedy +alt.tv.absolutely-fabulous +alt.talk.year2000 +alt.walter-cronkite.mcdonalds.crew +alt.walter-cronkite.bathtub.assassination +alt.walter-cronkite.swedish-chef.bork.bork.bork +alt.walter-cronkite.civil-war.history +alt.walter-cronkite.jeffery-hunt.peas.peas.peas +alt.walter-cronkite.montanabob43.rules.rules.rules +alt.walter-cronkite.new-york.mets +alt.walter-cronkite.blenders +alt.walter-cronkite.john-grubor.forsale +alt.sports.soccer.worldcup2002 +alt.smokers.cigars.smoking +alt.fan.walter-cronkite.nose +alt.binaries.games.creatures +alt.localmusic.chi +alt.binaries.multimedia.naturism +alt.aquaria.oscars +alt.usage.chinese +alt.usenet.newbies +alt.usage.italiano +alt.binaries.humanoidifarmi +alt.global.chat +alt.binaries.unoffical.global.chat +alt.games.commandos +alt.flame.david-beckham.thick.english.football.player +alt.music.tricky +alt.mr-men +alt.global.quake.team-fortress +alt.binaries.education.distance +alt.cow.tipping +alt.i.cant.type +tw.bbs.campus.ntnu-mtc +alt.binaries.full.post.verified.playboy +alt.quake.barrysworld +alt.binaries.pictures.erotica.female.spreadwide +alt.binaries.scary.exe.files +alt.io +alt.binaries.scary.exe-files +alt.binaries.music.mp3 +alt.binaries.pictures.erotica.pussy +alt.binaries.pictures.erotica.pussy.firsthair +alt.binaries.pictures.erotica.pussy.tattoo +alt.binaries.pictures.erotica.early-teens.firsthair +alt.binaries.pictures.erotica.nude.runaway-girls +alt.autos.chevelle +alt.fan.toby-smith +alt.fool.aaron-welch +alt.movies.armageddon +alt.fan.de-kast +alt.spippolatori +alt.religion.satanism +alt.find.a.friend.for.aaron.welch +alt.family-names.welch +alt.binaries.pictures.erotica.male.underwear +alt.n.dex.de +alt.binaries.pictures.landscapes.amateur +alt.jncreativethinking +alt.comp.periphs.mainboard.qdi +alt.binaries.pictures.ballbusting +alt.cult-movies.phantasm +alt.movies.phantasm +it.annunci.usato.informatico.nord +it.arti.musica.strumenti.chitarra +it.binari.emulatori +no.it.tjenester.mail.diverse +no.it.programmering.delphi +no.it.programmering.java +no.it.programmering.visual-basic +alt.sport.air-guns +alt.support.agoraphobia +alt.geo.emblaze-support.audio-support +alt.multimedia.emblaze +alt.geo.emblaze-support.webcharger-support +alt.geo.emblaze-support +alt.geo.emblaze-support.hotspots-support +alt.geo.emblaze-support.creator-support.developer-support +alt.geo.emblaze-support.creator-support +alt.underground.yalta +alt.geo.emblaze-support.video-support +alt.sports.soccer.celtic +alt.romath +alt.scum +alt.sports.soccer.hearts +alt.games.final-fantasy.tech-support +alt.mcdonalds.cheese +alt.slak +alt.movies.cinematography.super8 +alt.mcdonalds.fries +alt.support.relationships.long-distance +alt.mcdonalds.beef +alt.books.harry-turtledove +alt.games.metal-knights +alt.bonehead.john-weir +alt.bonehead.julian-macassey +alt.bonehead.julian-macasseyr +alt.bonehead.geoff-miller +alt.bonehead.andy-banta +alt.music.wilco +alt.disgusting.stories.my-imagination +alt.music.blink-182 +alt.stories.amateur +z-netz.alt.support.dbox +z-netz.alt.telecom.gateway +z-netz.alt.forum.netzwesen +z-netz.alt.videoschnitt.vlabmotion +alt.binaries.nospam.panties +alt.binaries.pictures.erotica.panties.sheer +alt.binaries.pictures.lingerie.panties.sheer +alt.binaries.pictures.erotica.pornstar.cameo +alt.binaries.pictures.erotica.teen.male.hardon +alt.binaries.pictures.erotica.male.hardon +alt.walmart.censor.censor.censor +alt.drunken.bastards.ruediger-landmann +alt.music.swing +alt.fan.ben-morss +alt.fan.sacramento.music +alt.slak.binariez +alt.binaries.pictures.erotica.fuckpix +alt.siol.test +alt.fan.spanky_the_verbose +alt.awelch.test +alt.stereo.karl-malden.nose +alt.jobs.jobsearch +alt.movies.truman-show +alt.equamour.lunatic +alt.current-events.cc-news +alt.fan.bread.whole-wheat +alt.orgonomy +alt.binaries.tv.teletubbies +alt.rock-n-roll.asia +it.arti.teatro +alt.comp.sfdm.ug +alt.fan.penny-hardaway +alt.music.lo-fi +alt.support.srs.celeste +free.pencils +alt.comp.periphs.mainboard.soyo +free.control +free.hipcrime +free.willey +free.bharat +free.lunch.no-such-thing +free.mars +free.meowing +free.news.answers.why-free +free.money +free.test +alt.binaries.goat +free.vanity.ashley-yakeley +free.grubor +free.boursy +alt.bread.recipes +alt.cannabis.seed-banks +tw.bbs.rec.mobilecomm +free.sex +alt.fan.vesa.ahonen +alt.gossip.celeberties +alt.support.cancer.breast +alt.jankenpon.test +free.hipcrime.whack +free.free.stuff +free.big.name.news.group.the.biggest.in.the.free.bit.is.it.the.largest +free.dom +free.newsadmins.jonas.luster +free.slack +free.tibet +free.talk.persian.politics +free.activism.walmart +free.news.config +free.mumia-abu-jamal +alt.animals.wombat +alt.animals.cat +free.talk.config +free.alt.config +alt.animals.lemur +alt.animals.rabbit +alt.animals.dog +free.fan.free +alt.animals.gibbon +free.source.support +free.unclothed.chinese.kooks +free.spam +free.software +free.fan.karl-malden.nose +free.sports.soccer.english +free.sports.soccer +free.sports.soccer.scottish +free.sports.soccer.man-united +free.jokes +free.answers +free.chicken +alt.animals.scorpion +free.hayes +free.aquaria +alt.binaries.pictures.rika-nishimura +alt.jankenpon.admin +alt.animals.tiger +alt.animals.bear +free.kevin +alt.animals.llama +alt.animals.hawk +alt.animals.sealion +alt.animals.gull +alt.animals.eagle.bald +alt.animals.peacock +free.radical +alt.anthony-ciolli +alt.religion.anthony-ciolli +alt.animals.zebu +free.soc.config +free.misc.config +free.rec.config +free.comp.config +alt.games.mule +alt.animals.falcon +alt.animals.gorilla +alt.cult-movies.erotica +alt.lemons +alt.internet.research +free.drugs +alt.fan.mac-wisler +free.config.not +alt.support.srs.m-to-f +alt.support.srs.misc +alt.support.srs.f-to-m +alt.binaries.emulators.tg16 +alt.jobs.as400 +free.rrevved +free.nin +free.alt.iran.irc +free.biz.config +free.sci.iran +free.talk.jr-state +free.megabozo.john-palmer +free.biz +free.comp +free.misc +alt.fan.pst +free.reverend.david-voth +free.radicals +free.janet-reno +alt.binaries.pictures.erotica.hardcore +free.misc.forteana +free.rec.juggling +free.cascade +alt.activism.noise.pollution +alt.comp.periphs.videocards.matrox +alt.jankenpon +alt.test.aaronw +free.football.but.not.fecking.american.ok.its.football.not.fecking.soccer.americans.realise.this +free.mumia +alt.support.hiatal-hernia +alt.music.ipecac-loop +alt.humor.mad-magazine +no.sport.paintball +no.fritid.spill.data +no.fritid.spill.diverse +no.fritid.spill.rollespill +free.config +free.your-mind +free.flame +free.spirit +free.your-mind.and-your-ass-will-follow +alt.sex.pedophilia.jim-kennemur +free.eaves.family +free.jbel +free.cthulhu +alt.binaries.emulators.neogeo +free.slave +free.loader.phoenix +free.get.out.of.jail +free.abstinence +free.advice +free.megabozo.bill-palmer +alt.radio.wktu +alt.astronomy +alt.aviation.roswell.wannabe.wannabe.wannabe +israel.gardening +it.hobby.birra +free.porno.flicks +free.porno +free.porno.mags +alt.hollywood +alt.sport.snooker +de.alt.sport.american +alt.y2k.end-of-the-world +alt.fan.drew-carey +alt.music.chinese-pop +free.fr.config +free.fr +free.whales +free.at-last +free.willie +free.two.one.blast-off +free.s_company +free.way +alt.pets.senegal-parrots +free.nl.newsgroups +alt.tv.mst3k.mstings +free.country.usa +alt.fan.michael-ohannon +alt.fan.fabienne +free.two.one.contact +alt.binaries.penthouse +free.fr.rec.chasse.newbies +alt.support.incest +alt.cdr.panasonic +free.fr.soc.democratie-liberale +free.fr.sci.cogni.incognito +alt.energy.hydrogen +free.music.throwing-muses +alt.comp.periphs.mainboard.aopen +cz.comp.mail.sendmail +alt.fan.mugabe +de.alt.music.metal +alt.fan.george-kennedy +free.villetti +alt.music.no-wave +free.radish.therapy +alt.binaries.pictures.erotica.australian.female +alt.binaries.pictures.erotica.age.13-17 +alt.binaries.pictures.erotica.orientals.spread-wide +alt.binaries.pictures.erotica.oriental.spread-wide +alt.fan.frank-zappa-fans-are-assholes +alt.culture.orientalism +alt.culture.swahili +alt.conspiracy.abiola +alt.html.critique +tw.bbs.alumni.tcgshs +alt.park.avenue.festival.pizza.choke +alt.fan.den-van.outen +alt.jankenpon.binaries.studio-r +alt.jankenpon.binaries.rose-leaf_club +alt.hydrogen.research +alt.fan.sarah-m-gellar +free.binaries.first.one.so.there.nah.nah.nah.nah.nah +alt.support.diet.low-fat +free.it.lamers +it.comp.musica.midi +it.hobby.home-cinema +it.comp.appl.icq +it.comp.giochi.simulatori.volo +alt.games.x-com +free.sex.moderated +free.beer +free.rec.iran.kungfu-toa +free.it.hackers.per.modo.di.dire +free.it.hackers.patetici.lamers +free.it.lamers.mentore.lame.lame.lame +alt.fan.john-engler.kick-fiegers-ass +alt.amsoil +alt.ziopino +alt.personals.whites-only +no.fritid.dykking +no.fritid.friluftsliv +alt.binaries.pictures.erotica.chastity-belt +free.junkfax.discuss +alt.fan.jason-currell +alt.censorship.vancouver-community-net +alt.games.mechcommander +alt.fan.vanessa-paradis +alt.flame.chinese +alt.fan.gabbi-glickman +alt.flame.hispanics +alt.flame.gypsies +alt.tv.angel +alt.flame.pakis +alt.olympics.3000 +alt.binaries.sounds.mp3.requests +alt.fan.dank.strut +alt.games.champ-man +alt.culture.malawi +alt.fan.aly-walansky +alt.fan.lyle-gardiner +alt.flame.monica-lewinsky +alt.sports.olympics.3000 +alt.teens.penpals.icq +alt.personals.viagra-users +alt.music.doors +alt.support.addiction +alt.fan.frank-dimant +alt.chinese.nonstop-breeding +alt.chinese.plus.viagra.equals.end.of.the.world +free.haggis +free.homer-j-simpson +free.jesus.saves +free.americans.suck +free.footy +free.chicken.tika.masala +free.chicken.vindaloo +free.shit +alt.staralliance +alt.binaries.pictures.erotica.fullbush +alt.fan.christina-applegate +alt.0.0.0.0.0.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1 +alt.radio.international +alt.binaries.pictures.erotica.female.orgasm +alt.binaries.pictures.erotica.panty-lines +alt.binaries.pictures.realestate.fsbo +alt.binaries.nospam.female.panties.seethru +alt.binaries.pictures.pantylines +alt.binaries.pictures.tease +de.talk.tagesgeschehen +de.comm.software.mailreader.misc +alt.tv.simpsons.simpsons +alt.flame.dykes +alt.sex.fetish.hair.manic-panic-muppet-crotch +alt.music.power-pop +alt.pimpsup.hozdown +alt.hate.lemonhead +alt.fan.prozac +alt.law-enforcement.m +alt.flame.det-redwings +alt.binaries.pictures.erotica.mclt +alt.family-names.gendreau +alt.music.van-halen.gary-sucks +alt.kyles.mom.is.a.stupid.bitch +alt.energy.over-unity +alt.binaries.pictures.erotica.young.orientals +alt.parenting.paranormal +alt.books.electronic +biz.marketplace.investors +alt.spacebastards +free.alt.freedom.japan +free.alt.freedom.japan.repost +free.alt.freedom.japan.sm +free.alt.freedom.japan.loose-socks +free.alt.freedom.japan.loli +alt.binaries.nospam.female.panty-lines.seethru +alt.tv.ally-mcbeal.uk +alt.deism +alt.fan.women.australian +alt.tv.jerry-springer +alt.slack.midatlantic.crusades +alt.slack.mid-atlantic.crusades +alt.music.smash-pumpkins.dead-carmance +alt.poverty +alt.pocket-rocket +alt.binaries.pictures.contortion.nude +alt.pave.waldon.pond +alt.recovery.disease.muppet-crotch +alt.sylvia-saint +alt.games.omega +alt.sources.d +alt.religion.deism +alt.music.pj-harvey +pl.rec.ascii-art +pl.rec.harcerstwo +alt.binaries.pictures.erotica.traci-lords +alt.sylvia-saint.multimedia +alt.binaries.sounds.mp3.video-games +alt.fan.jim.dove +alt.president.clinton.important.work.to.do.blowjob.blowjob.mrph.blowjob +alt.thebird.liberal-communists +alt.fan.habanec +alt.balkan-papci +free.baba.naga +alt.fan.will-smith +alt.acorn.demos +triangle.bbq +alt.tastless.jokes +alt.binaries.pictures.erotica.breasts.large +free.slack.bring.me.an.imac +alt.culture.zaire +alt.binaries.pictures.realestate.realtors +alt.fan.trinity-loren +alt.hate.a2000 +alt.culture.hongkong +de.rec.film.heimkino +de.soc.kontakte.freizuegig +de.soc.kontakte.misc +alt.conspiracy.british-telecom +alt.binaries.sounds.patches +alt.binaries.pictures.tiffany.towers +alt.ihatebr +alt.exe +alt.culture.zambia +alt.bonehead.john-henry +alt.music.kreviazuk +alt.realestate.fsob +alt.binaries.nospam.spandex.nation +alt.lang.basic.compiler +alt.irc-progs.megaliths.virc +alt.irc-progs.virc +alt.fan.porkwoman +alt.culture.arabic.non-politics +alt.ihatebr.moderated +alt.fan.william-burroughs +alt.games.cheats +alt.binaries.pictures.erotica.teen.female.toys +alt.binaries.pictures.erotica.young.australian.female +alt.binaries.pictures.erotica.nudist-camp +alt.binaries.pictures.erotica.spread-open +alt.binaries.pictures.erotica.13-17 +alt.binaries.pictures.erotica.teen.female.lesbians +alt.med.fibromyalgia.guaifenisin +pl.comp.gis +alt.fan.the-crow +alt.binaries.beatles +alt.binaries.sounds.mp3.beatles +alt.binaries.pictures.erotica.bookstores +pl.rec.gry.brydz +pl.rec.komiks +pl.regionalne.lodz +pl.misc.telefonia.gsm.sms +pl.misc.telefonia.gsm.gielda +alt.digitiser.digi-98boyz +alt.irc.digi-98 +alt.fan.stanley-matthews +alt.politics.rightgrrl +alt.rock-n-roll.metal.slayer +alt.startrek.imperial +alt.abuse.minton +alt.pedophile.guy-macon +alt.pedophile.colin-leech +alt.pedophile.nat-makarevitch +alt.pedophile.grady-booch +alt.pedophile.zoli-fekete +alt.pedophile.bruce-ediger +alt.pedophile.john-milburn +alt.pedophile.peter-vorobiev +alt.pedophile.jonathan-grobe +alt.pedophile.alan-bostick +alt.pedophile.guy-polis +alt.pedophile.david-delaney +alt.pedophile.bill-stewart-cole +alt.pedophile.matt-cable +alt.pedophile.ken-lucke +alt.pedophile.bruce-baugh +alt.pedophile.peter-dasilva +alt.pedophile.kenneth-mcvay +alt.pedophile.stephan-burr +alt.pedophile.charles-platt +alt.pedophile.rick-buchanan +alt.pedophile.daniel-norton +alt.pedophile.sameer-parekh +alt.pedophile.robert-braver +alt.pedophile.tzimon-yliaster +alt.pedophile.david-cathey +alt.pedophile.james-stricherz +alt.pedophile.felix-tilley +alt.pedophile.david-bromage +alt.pedophile.ronald-guilmette +alt.pedophile.richard-tietjens +alt.pedophile.sam-varshavchik +alt.pedophile.nick-sandru +alt.pedophile.scott-southwick +alt.pedophile.roger-wemyss +alt.pedophile.barry-shein +alt.pedophile.gardner-trask +alt.pedophile.dave-barr +alt.pedophile.michael-maxfield +alt.pedophile.aaron-marquez +alt.pedophile.thomas-allard +alt.pedophile.bob-curtis +alt.pedophile.steven-slamon +alt.pedophile.werner-uhrig +alt.pedophile.karl-jahr +alt.pedophile.otto-makela +alt.pedophile.david-westebbe +alt.pedophile.jan-isley +alt.pedophile.jason-durbin +alt.pedophile.stan-kalisch +alt.pedophile.robbie-honerkamp +alt.pedophile.jonathan-kamens +alt.pedophile.magnus-kempe +alt.pedophile.daniel-hartung +alt.pedophile.matthew-fields +alt.pedophile.david-ratcliffe +alt.pedophile.patrick-volk +alt.pedophile.dennis-mcclain-furmanski +alt.pedophile.erland-sommarskog +alt.pedophile.gary-burnore +alt.pedophile.jack-mingo +alt.hotrod +alt.pedophile.craig-sherwood +alt.pedophile.ian-hayes +alt.pedophile.john-gilmore +alt.windows98 +alt.politics.the-revolution +alt.fan.mogul +alt.sci.amateur +alt.fan.tibo +alt.fan.vind +alt.binaries.midibeep.denmark.files +alt.binaries.news-server-comparison +alt.binaries.pictures.bc-series +alt.skeptic.magazine +alt.skeptic.society +alt.ny.gruppe +alt.dk.snak +alt.books.tom-holt +alt.mindcontrol.kids-help-kids +alt.mag.playboy.pussy +alt.trades.construction.us +alt.trades.construction.canadian +alt.sex.net-abuse.hipcrime +alt.fan.bobo +alt.tv.whose-line +alt.cult-movies.zombies +alt.fan.mr-biffo +free.pl.silesia +alt.binaries.music.rebirth +alt.ex-con.john-grubor +alt.pothead.john-grubor +alt.nitwit.john-grubor +alt.disbarred-lawyer.john-grubor +alt.numnut.john-grubor +alt.alt.canada.threatened-invaasion.john-grubor +alt.escaped.mental.patient.john-grubor +alt.kook-of-the-month.nov95.john-grubor +alt.music.bob-mould +alt.chocobo +alt.tv.aeon-flux +alt.dk +alt.sjat +alt.digi +alt.binaries.cd.image.other.d +alt.fan.chocobo +alt.dk.sjat +alt.teens.penpals.canada +alt.sports.football.pro.tennessee +alt.holoworld.rpg.startrek +alt.retail.loss-prevention +alt.fan.asia-carrera +alt.trold +alt.music.reef +alt.binaries.cd.image.other.parts +alt.military.cap +alt.binaries.pictures.erotica.peachfuzz +alt.fan.labu +alt.fan.dark_and_gloomy_persons +de.rec.tiere.voegel +alt.flame.nick-mooney +alt.digitiser.nick-mooney.we.cuss.him.bad +alt.digitiser.newbies.dont.meddle.with.things.you.dont.understand +alt.fan.zygotes +alt.binaries.pictures.erotica.bobby-sox +alt.fan.cybill-shepherd +alt.support.intimacy-reclaim +alt.binaries.pictures.erotica.linsey-dawn-mckenzie +alt.binaries.sounds.mp3.m +alt.binaries.pictures.scenic.amateur +alt.suicide.recovery +alt.fan.cybill.shepherd +alt.religion.afterlife +alt.fan.lakshmi +alt.fan.twister +alt.chocobo.wark.wark.wark +de.alt.soc.antifa +alt.fan.lea-thompson +alt.alt.spamtrap +alt.uk.games.video.digitiser +alt.hobbies.serial-murder +alt.fan.bettie-page +alt.fan.shortland-street +alt.binaries.pictures.child.starlets +alt.audio.dts +alt.personals.furry +alt.acorn.adverts +pt.conversa +pt.rec.artes.cinema +pt.rec.radio.cb +alt.radio.cb.skip +alt.support.intergendered +alt.games.tanarus +alt.binaries.pictures.nature +alt.animation.mainframe +alt.fan.jayne-middlemiss +alt.binaries.cracks.discussion +nctu.adm.student-cnas +nctu.adm.president +alt.legend.the-bob.rock +alt.zvjezdana.volim-te +alt.pastel.developer.forum +alt.fiction.interactive +alt.binaries.warez.win95-games +alt.surfing.usa +alt.surfing.europe +alt.surfing.ausnz +alt.i-love-you.zvjezdana +alt.fan.mike-bullard +alt.fan.isla-fisher +alt.music.ear-training +alt.trades.building.construction.canada +alt.i.cuss.you.bad +alt.personals.asian +alt.personals.new-zealand +alt.music.education +alt.support.nf +alt.binaries.games.starcraft +alt.chat-programs.icq.dating +alt.binaries.hentai.sailor-moon +alt.soc.reformation +tw.bbs.campus.stjctc +alt.sex.fetish.smee +alt.pedophile.aaron-henne +alt.fan.brooke-shields +alt.hair-removal +alt.dk.warez +alt.games.creekys-cafe +alt.startrek.teroknor +alt.nocne.polakow.rozmowy.dk_i_dp +alt.support.hepatitis-c +alt.netheism +alt.pave.the.earth.with.asphalt +alt.usenet.supernews-talk +alt.dk.helbred.handicap +alt.games.video.n64links +alt.os.citrix +alt.autos.nissan.maxima +alt.religion.vim +alt.arts.balloon-sculpting +no.fritid.spill.sjakk +no.it.tjenester.irc +alt.k12.hat.junior +alt.binaries.tv.us-sitcoms +alt.rock-n-roll.metal.bruce-dickinson +alt.k12.chat.junior +alt.html.tags +alt.internet.providers.uk.free +alt.binaries.cd.image.d +alt.apocalypso +alt.magick.jinn +alt.cyberjockey +alt.fan.dannii-minogue +alt.fan.spinnwebe +alt.fan.mothers-of-invention +alt.personals.bi.newjersey +alt.burning-man +alt.ku86s6 +alt.soft-sys.avantgo +alt.bloopers +alt.fan.paula-abdul +alt.music.glen-ballard +alt.games.need-for-speed +alt.yogananda +alt.meditation.qigong +alt.john-oneill +alt.dreams.mythic +alt.toys.furby +alt.pets.dogs +free.fr.fan.cagoles +alt.life.sucks.moderated +maus.computer.archimedes +maus.computer.atari.falcon +maus.computer.atari.gemini +maus.computer.atari.hardware +maus.computer.atari.dtp +maus.computer.atari.spiele +maus.computer.atari.mint_mtos +maus.computer.emulatoren +maus.computer.atari.software +maus.technik.amateurfunk +maus.computer.groupware-syst +maus.computer.hardware +maus.computer.atari.talk +maus.computer.beos +maus.computer.linux.m68k +maus.computer.hardware.dsp +maus.computer.linux +maus.computer.atari.internet +maus.computer.amiga +maus.computer.os2.talk +maus.computer.mac.allgemeines +maus.computer.mac.hardware +maus.computer.mac.emulatoren +maus.computer.mac.kommunikation +maus.computer.mac.programmieren +maus.computer.mac.spiele +maus.computer.mac.software +maus.computer.os2 +maus.computer.os2.programmierung +maus.computer.os2.setup +maus.computer.pc.ibm +maus.computer.ql.intl +maus.computer.ql.de +maus.computer.sicherheit.virus +maus.freizeit.f+sf +maus.computer.software.medusa +maus.freizeit.bigfood +maus.computer.software.compiler +maus.net.gate +maus.computer.sprache.oberon +maus.markt.suche +maus.markt.suche.diskussion +maus.freizeit.fernweh +maus.computer.sprache.modula-2 +maus.computer.transputer +maus.computer.sprache.c +maus.computer.software.udo +maus.kultur.literatur.buecher +maus.computer.ql.c +maus.kreativ.handarbeiten +maus.computer.unix +maus.freizeit.kites +maus.kultur.literatur.comics +maus.freizeit.wandern +maus.info.diskussion +maus.regional.bremen +maus.freizeit.kino +maus.markt.biete.diskussion +maus.markt.biete +maus.soziales.politik +maus.soziales.pflege +maus.soziales.handicap.talk +maus.soziales.recht +maus.tausch.okami +maus.sciencefiction.babylon5 +maus.spiele.planets +maus.technik.midi +maus.technik.laserdiscs +maus.wissenschaft.astronomie +maus.regional.oecher +maus.wissenschaft.geographie +maus.spiele.netzspiele.allgemein +maus.wissenschaft.medizin +maus.soziales.handicap +maus.soziales.schuelerakadem +maus.technik.elektronik +maus.spiele.computerspiele +maus.wissenschaft.mathematik +maus.spiele.schach +maus.spiele.rollenspiele +maus.talk.landrock +maus.technik.foto+film +maus.technik.gps +maus.wirtschaft.finanzen +maus.wissenschaft.fernuni +maus.wissenschaft.genealogie +maus.wissenschaft.informatik +alt.games.shogo-mad +alt.music.cranes +alt.binaries.warez.ibm-pc.japan +alt.dementia +alt.conspiracy.coventry.morph +alt.telemarketing-professionals +alt.fan.gary.spell +alt.binaries.images.suntan +alt.tv.viper +alt.music.mixman +alt.lang.s-lang +no.alt.rykter +alt.cuddle.rebels +no.fag.filosofi +no.fritid.jakt +no.it.telekom.diverse +no.it.telekom.mobil +no.it.telekom.isdn +alt.binaries.tiffany-towers +alt.binaries.tv.er +de.alt.games.schach +alt.fan.cyndi-lauper +alt.fan.annie-lennox +alt.military.aas.area2 +z-netz.alt.esoterik.reiki +tnn.games.pokemon +alt.binaries.pictures.erotica.furby +alt.binaries.games.champ-man +maus.talk.english +alt.equestrian.draft +alt.irc.virc +alt.music.gossip +alt.irc.gamez.net +alt.games.nintendo.pokemon +pl.rec.gry.komputerowe.klasyka +pl.rec.akwarium +pl.hum.polszczyzna +alt.animals.rights.promotion +alt.idiot.swallow +alt.shut.the.hell.up.geek.yiri-t-kohl +alt.music.ellectrika +pl.rec.muzyka.metal +alt.games.pokemon +alt.binaries.games.adult +pl.rec.gry.komputerowe.roguelike +pl.rec.fantastyka.startrek +alt.binaries.games.int-fiction +alt.music.cravin-melon +bofh.cannon-fodder +alt.activism.microsoft.public.de.sqlserver +alt.fan.vore +alt.comp.symix +alt.sports.soccer.arsenal +pl.regionalne.szczecin.ogloszenia +pl.rec.fantastyka.x-files +pl.rec.fantastyka.babylon5 +pl.regionalne.warszawa.ogloszenia +alt.binaries.nospam.coed.repost +alt.binaries.nospam.coed +alt.binaries.nospam.coed.d +alt.gamepoint +alt.fan.yati +alt.fan.patrick-oonk +alt.fan.eddings.creative +alt.nuke.paxnet +alt.at.fido.startrek +alt.nuke.norway +alt.newsangels +alt.fan.asia-argento +alt.koby.wuz.here +alt.fan.calvin-and-hobbes +alt.fan.space-ghost.binaries +it.annunci.usato.amiga +it.sport.ciclismo +it.sport.tennis +it.sesso.marpionismo +it.comp.pubblicazioni +it.comp.giochi.action +it.comp.giochi.simulatori +it.comp.giochi.strategici +alt.music.x +it.hobby.totoscommesse +it.comp.giochi.sportivi +it.comp.giochi.rpg +alt.uk.a-level.business +bln.lv.tub.cs.infet +alt.tv.buddy-faro +alt.binaries.moderated +alt.binaries.pictures.erotica.cpath +alt.binaries.images.vintage-engineering +alt.herp.med +alt.herp +pl.comp.bazy-danych.msaccess +alt.schools.lhhs +alt.binaries.dragonz.chimerical +alt.fan.spencer-soloway +alt.comp.lang.applescript +alt.sport.adv-racing +alt.video.avid_editors +alt.binaries.moderated.pinup-art +za.sport.rugby +alt.tv.cartoon-network +alt.tv.beavis-n-butthead +alt.games.video.sega-dreamcast +alt.lynn +alt.fan.bill-bell +alt.trucks.ford +alt.comp.periphs.soundcard.sblive +alt.holy.ofm +alt.politics.socialism.democratic +alt.year +alt.binaries.sounds.midnightoil +alt.binaries.pictures.nude.celebrities.hwest +alt.fan.eva-habermann +alt.autos.chevrolet.malibu +alt.fan.victoria-paris +alt.tv.just-shoot-me +alt.krecik.berecik +alt.talk.zoophilia +de.alt.ballett+tanz +bln.net.dialup +alt.fan.kellie-martin +alt.music.catatonia +alt.fan.andy-kyle +alt.fan.melissa-j-hart +alt.culture.arabic.friends +free.arabic.friends +free.kuwait +alt.tv.nash-bridges +alt.games.microsift +alt.games.microsoft +alt.games.microsoft.age-of-empires +alt.games.microsoft.age-of-kings +alt.games.microsoft.rise-of-rome +pl.rec.gory +alt.penthouse.sex.fetish.feet +alt.penthouse.sex.pictures.male +alt.penthouse.sex.orgy +alt.penthouse.sex.masterbation.pictures.female +alt.penthouse.sex.stories.cuckold +alt.penthouse.sex.girls +alt.penthouse.sex.sm.fig +alt.penthouse.sex.fetish.wet-and-messy +alt.penthouse.sex.jp +alt.penthouse.sex.stories.tg +alt.penthouse.sex.fetish.waifs +alt.penthouse.sex.gangbang +alt.penthouse.sex.strippers.jobs +alt.penthouse.sex.sissy +alt.penthouse.sex.magazines +alt.penthouse.sex.breast +alt.penthouse.sex.wanted +alt.penthouse.sex.menstruation +alt.penthouse.sex.testeless +alt.penthouse.sex.strip-clubs +alt.penthouse.sex.wanted.escorts.ads +alt.penthouse.sex.safe +alt.penthouse.sex.pictures.female +alt.penthouse.sex.movies +alt.penthouse.sex.wanted.models +alt.penthouse.sex.swingers.uk +alt.penthouse.sex.weight-gain +alt.penthouse.sex.sissy.slut +alt.penthouse.sex.spanking +alt.penthouse.sex.phone +alt.penthouse.sex.stories.bondage +alt.penthouse.sex.stories +alt.penthouse.sex.fans +alt.penthouse.sex.letters +alt.penthouse.sex.telephone +alt.penthouse.sex.services +alt.penthouse.sex.fetish.fashion +alt.penthouse.sex.trans +alt.penthouse.sex.masterbation +alt.penthouse.sex.tasteless +alt.penthouse.sex.video-swap +alt.penthouse.sex.homosexual +alt.penthouse.sex.femdom +alt.penthouse.sex.trio.hetero.for-she.amateur +alt.penthouse.sex.women +alt.penthouse.sex.swingers +alt.penthouse.sex.fetish.tongue +alt.penthouse.sex.voyeurism +alt.penthouse.sex.masturbation +alt.penthouse.sex.midgets +alt.penthouse.sex.prostitution +alt.penthouse.sex.stories.gay +alt.penthouse.sex.oral +alt.penthouse.sex.fetish.tickling +alt.penthouse.sex.watersports +alt.penthouse.sex.ugly +alt.penthouse.sex.internet +alt.penthouse.sex.sounds +alt.penthouse.sex.fetish.size +alt.penthouse.sex.enemas +alt.penthouse.sex.intergen +alt.penthouse.sex.super-size +alt.penthouse.sex.international +alt.penthouse.sex.anal +alt.penthouse.sex.exhibitionism +alt.penthouse.sex.fetish.panties +alt.penthouse.sex.breasts +alt.penthouse.sex.europe +alt.penthouse.sex.erotica +alt.penthouse.sex.first-time +alt.penthouse.sex.fetish.scat +alt.penthouse.sex.pictures +alt.penthouse.sex.fat +alt.penthouse.sex.fetish.watersports +alt.penthouse.sex.stories.hetero +alt.penthouse.sex.gaymen.porn +alt.os.linux.turbolinux +alt.fan.denise-richards +alt.fan.lacey-chabert +alt.fan.shannen-doherty +alt.lifestyle.gorean +alt.tv.bold-beautiful +alt.film-festivals +alt.film-festivals.sundance +alt.binaries.goonies +alt.movies.goonies +alt.fan.oskana-bayul.small-tits +alt.dreams.sexual +alt.pets.dogs.pomeranians +alt.binaries.games.microsoft.age-of-kings +alt.binaries.games.microsoft.age-of-empires +alt.binaries.games.microsoft.rise-of-rome +alt.binaries.games.microsoft +alt.lifestyle.freethinkers +alt.binaries.cleannews.test +alt.uk.men.seeking.woman +alt.fan.brent-gore +alt.uk.woman.seeking.man +alt.music.superchunk +alt.fan.sung-hi-lee +alt.workingholiday +alt.lifestyle.earth-based +alt.tira +alt.auricchio +alt.nespoli +alt.digitiser.whinging-kids +alt.astrology.toadology +alt.vampyres.flap.flap.flap +alt.dentella +alt.costam +free.newsangels +alt.ftpsearch.com +alt.music.kenny-wayne-shepherd +alt.games.microsoft.cheat-codes +alt.games.microsoft.fighter-ace +alt.games.microsoft.tanarus +alt.comp.periphs.videocards.nvidia +alt.games.microsoft.zone +alt.kuwait.news +alt.cult-movies.eros +alt.politics.org.nsa.echelon +alt.games.microsoft.motocross-mad +alt.games.microsoft.ants +alt.poltics.socialism.democratic +alt.games.microsoft.flight-sim +alt.fan.joseph-holl +alt.bonehead.joseph-holl +alt.tv.brimstone +alt.romance.latinas +alt.tv.felicity +alt.games.microsoft.baseball-3d +alt.games.microsoft.barney +alt.games.microsoft.cart-racing +alt.games.microsoft.arcade +alt.games.microsoft.pinball-arcade +alt.med.fibromyalgia.recovery-info +alt.games.microsoft.urban-assault +alt.games.microsoft.neverhood +alt.games.microsoft.old +alt.games.microsoft.close-combat +alt.games.microsoft.chaos-island +alt.games.microsoft.dilbert +alt.games.microsoft.bridge-too-far +alt.games.microsoft.golf +alt.games.microsoft.windows-ce +alt.games.microsoft.monster-truck +alt.games.microsoft.websites +alt.games.microsoft.macintosh +alt.games.microsoft.input-devices +alt.pub.oddbins +alt.med.fibromyalgia.recovery.info +alt.math.moderated +bln.announce.fub.studienberatung +alt.fan.jennifer-love-hewitt +alt.fan.natalie-portman +alt.binaries.mp3.throttle.news.and.piss.off.sabrina +alt.binaries.webcam.videos +alt.binaries.pictures.erotica.ll-series +alt.games.final-fantasy.moderated +alt.flame.macintosh.flame.todd +alt.aviation.kooks +alt.pota +alt.games.v2000 +alt.games.delta-force +alt.binaries.warez.your.mammy +alt.games.microprose +alt.binaries.games.microprose +alt.games.microprose.klingon-honor +alt.games.microprose.m1-tank +alt.games.microprose.falcon +alt.games.microprose.x-com +alt.games.microprose.worms +alt.games.microprose.addict-pinball +alt.games.microprose.mech-commander +alt.games.microprose.the-gathering +alt.games.microprose.european-air +alt.games.microprose.7th-legion +alt.games.microprose.civilization +alt.games.microprose.1942 +alt.games.microprose.gunship +alt.games.microprose.master-magic +alt.games.microprose.master-orion +alt.games.microprose.qwirks +alt.games.microprose.dark-earth +alt.games.microprose.railroad-tyc +alt.games.microprose.generations +alt.games.microprose.final-unity +alt.games.microprose.ultimate-race +alt.games.microprose.fleet-defender +alt.games.microprose.cheat-codes +alt.games.microprose.websites +alt.games.microprose.pirates-gold +alt.games.microprose.old +alt.games.microprose.playstation +alt.games.microprose.grand-prix +alt.games.microprose.knight-moves +alt.games.microprose.colonization +alt.games.microprose.transport-tyc +alt.games.microprose.breakthru +alt.games.microprose.top-gun +alt.games.microprose.tetris +alt.music.madness +alt.binaries.pictures.comic-strips +alt.fysh +alt.binaries.sounds.aac +alt.binaries.sounds.aac.d +alt.warez.borje-hagsten +alt.autos.chrysler.sebring +alt.autos.toyota.camry +alt.fan.buckaroo-banzai +alt.history.richard-iii +pl.rec.gry.scrabble +pl.misc.samochody.garbusy +alt.binaries.pictures.erotica.charmaine +alt.test.yeah +alt.test.paratransit +alt.test.pope-john-paul-ii +alt.test.tsetse +alt.test.cmsg +alt.japanese.neojapan.telephone-club +alt.freedom.telephone-club +de.etc.selbsthilfe.missbrauch +free.milwaukee +alt.collecting.beanie-babies.discussion.moderated +alt.talk.bfd +alt.tv.california-dreams +alt.tv.pattlestar-gayactica +it.cultura.ateismo +it.diritto.condominio +it.aziende.ford +it.sport.calcio.torino +it.media.tv.fantascienza +it.associazioni.pluto +alt.binaries.thebird +no.samfunn.foreldre+barn +no.it.grafikk.diverse +alt.comp.periphs.gigabyte +alt.conspiracy.timo-salami +alt.activism.eco-action +alt.games.mdestiny +alt.fan.carmen-electra +alt.fan.dankitti +alt.holocaust.kpn +alt.collecting.beanie-babies.charlie-witt +alt.als.zelfhulpgroep.be +alt.toys.marbles.bc +alt.talk.charlie-witt +alt.comics.spider-man +alt.collecting.pens-pencils.binary +alt.nihilism +alt.uk.stevenage.bohemian.binaries +alt.fan.papa +alt.fan.piglow +alt.binaries.stargate-sg1 +alt.fan.tanya-mur +alt.tv.father-ted +alt.sex.fetish.agriculture +alt.support.rape-survivors +alt.fan.raquel-welch +alt.guitar.beginner +alt.beer.home-brewing +alt.education.management +alt.games.half-life +alt.startrek.rpg.gsc +no.fritid.fiske +no.samfunn.naturvern +no.it.sikkerhet.diverse +no.org.diverse +no.kultur.genre.sf +no.teknologi.audio +no.teknologi.video +alt.abide +alt.fan.sifl-olly +alt.binaries.aoi +alt.games.ea.westwood.kyrandia +alt.games.ea.westwood.games-ppl-play +alt.games.ea.westwood.tiberian-sun +alt.games.ea.westwood.monopoly +alt.games.ea.westwood.dune +alt.games.ea.westwood.lands-of-lore +alt.games.ea.westwood.blade-runner +alt.games.ea.westwood.command-n-conq +alt.games.ea.westwood +alt.games.ea.square-ea.brave-fencer +alt.games.ea.square-ea.final-fantasy +alt.games.ea.square-ea.bushido-blade +alt.games.ea.square-ea.parasite-eve +alt.games.ea.square-ea +alt.games.ea.square-ea.xenogears +alt.games.ea.maxis.sim-isle +alt.games.ea.maxis.sim-town +alt.games.ea.maxis.sim-life +alt.games.ea.maxis.sim-golf +alt.games.ea.maxis.sim-park +alt.games.ea.maxis.sim-tower +alt.games.ea.maxis +alt.games.ea.maxis.marble-drop +alt.games.ea.maxis.sim-city +alt.games.ea.maxis.sim-farm +alt.games.ea.maxis.sim-safari +alt.games.ea.maxis.sim-earth +alt.games.ea.maxis.full-tilt +alt.games.ea.maxis.sim-ant +alt.games.ea.bullfrog +alt.games.ea.bullfrog.gene-wars +alt.games.ea.bullfrog.magic-carpet +alt.games.ea.bullfrog.populous +alt.games.ea.bullfrog.high-octane +alt.games.ea.bullfrog.syndicate-wars +alt.games.ea.bullfrog.dungeon-keeper +alt.games.ea.bullfrog.theme-park +alt.games.ea.bullfrog.theme-hospital +alt.games.ea.origin.strike-command +alt.games.ea.origin.system-shock +alt.games.ea.origin.wings-of-glory +alt.games.ea.origin.shadowcaster +alt.games.ea.origin.ultima +alt.games.ea.origin.wing-commander +alt.games.ea.origin.abuse +alt.games.ea.origin.bioforge +alt.games.ea.origin.crusader +alt.games.ea.origin.cybermage +alt.games.ea.origin.privateer +alt.games.ea.origin +alt.games.ea.janes.fighter-anth +alt.games.ea.janes.longbow +alt.games.ea.janes.688i +alt.games.ea.ea-studio.strike-series +alt.comms.powerline +alt.binaries.cd +alt.binaries.cd.image.playstation.d +alt.binaries.cd.image.playstation +alt.kuwait.irc +alt.kuwait.icq +alt.arabic +alt.arabic.general +alt.arabic.politics +alt.os.linux.dial-up +alt.arabic.comp +alt.binaries.picutres.erotica.pantyhose +free.nicholas.morgan.phillips +alt.sports.football +alt.sports +alt.sports.football.pro +alt.flyfishing +alt.binaries.pictures.raquel-welch +alt.binaries.celebrities.fake.moderated +alt.cuddlebot +alt.religion.christian.campus-crusade +alt.books.terry-goodkind +alt.binaries.pictures.erotica.pantyhose +alt.pets.reptiles.snakes.pythons.reticulated +alt.pets.reptiles.snakes.pythons.burmese +alt.pets.reptiles.snakes.pythons.ball +alt.pets.reptiles.lizards +alt.pets.reptiles.lizards.gecko +biz.marketplace.web-design +biz.marketplace.real-estate +alt.binaries.pictures.erotica.black.amateurs +alt.binaries.pictures.erotica.interracial.amateurs +alt.fan.david-peel +alt.god.timothy.sutter +alt.tv.father_ted +no.fag.diverse +no.teknologi.elektronikk +no.fritid.diverse +no.samfunn.aksjer +no.fritid.speiding +alt.binaries.vcd +alt.binaries.vcd.xxx +alt.music.greek +alt.binaries.music.greek +alt.fan.yardbirds +alt.fan.manfredmann +alt.fan.fugs +alt.binaries.movies +alt.digitiser.snakes +alt.binaries.frans.bauer.r-mod +alt.tv.young+restless +alt.tv.cartoon-network.toonami +alt.drugs.abuse +alt.support.drug-abuse +alt.hackers.hackerzlair +alt.alternative.health.drrush +alt.comp.hardware.overclocking.amd +alt.culture.macedonia.moderated +biz.healthcare +alt.comp.virus.binaries +alt.religion.raelian +alt.comp.periphs.videocards.ati +alt.fan.cristian-redferne +bofh.ykybhtlw +uta.animaatio +alt.tv.the-andy-griffith-show +alt.tv.threes-company +pl.comp.lang.pascal +alt.binaries.cracks.akula +alt.binaries.pictures.jetski +alt.culture.macedonia +pl.sci.weterynaria +alt.games.video.nintendo-64.zelda.hwest +it.comp.hardware.schede-audio +it.fan.musica.baglioni +it.sport.windsurf +it.cultura.proverbi +it.tlc.telefonia.infostrada +it.arti.cartoni.animati +it.comp.software.pegasus-mail +it.hobby.giardinaggio +it.media.video.produzione +alt.binaries.pictures.sports.ocean.surfing +alt.tv.charmed +alt.binaries.pictures.sports.ocean.windsurfing +alt.music.bruce-cockburn +alt.certification.mcse +alt.binaries.sounds.mp3.brazilian +alt.fan.jennicam +alt.fan.noodles +alt.surfing.hawaii +alt.games.gangsters +alt.surfing.europe.uk +alt.certification.cne +alt.certification.a-plus +alt.fan.dima +alt.music.skratch-picklz +alt.binaries.cheer.dance +alt.prueba +alt.games.n64 +alt.tv.days-of-our-lives +alt.cna +alt.teens.girls +alt.menwhoswallow +hun.piac.comp.keres +hun.piac.comp.kinal +alt.hit2000.nl +alt.binaries.multimedia.space-ghost +alt.tv.cupid +alt.fan.jesse.ventura +alt.fan.jesse.ventura.gov +de.comp.sys.handhelds.misc +de.comp.sys.handhelds.palm-pilot +de.comp.sys.handhelds.newton +de.comp.sys.handhelds.psion +de.comp.sys.handhelds.windows-ce +alt.teens.parents +pl.rec.humor.monty-python +alt.i.love.rabbit.grrl +alt.music.alabama +alt.music.rat-salad +alt.games.ta-kingdoms +alt.games.castlevania +alt.prueba2 +alt.argentina.adolecentes +alt.news.fyrom +alt.music.bis +alt.rec.crafts.metalworking +alt.fan.pikachu +alt.think.tank +alt.babe-land.com +de.alt.music.alternative +it.arti.musica.strumenti +it.binari.visual-basic +it.discussioni.commercialisti +it.hobby.fai-da-te +it.hobby.vino +alt.lifestyle.simplicity +alt.culture.thrace +alt.culture.epirus +alt.culture.crete +alt.culture.rhodes +alt.fan.dean-cain +alt.games.nintendo.pokemon.hentai +alt.culture.cyprus +alt.music.hunter-mott +alt.tv.rugrats +alt.music.sinead-oconnor +alt.games.spiritwars +pl.comp.os.linux.sieci +alt.fan.kurt-busiek +alt.comics.green-lantern +alt.culture.former-yugosalv-republic-of-macedonia +alt.culture.fyrom +alt.fan.jerkcity +alt.binaries.pics.otonas.mankos.musyuuseis +alt.mottola.riccardo +alt.key.west +alt.music.moffatts +alt.music.jazz.squirrel-nut-zippers +alt.fan.christy-turlington +alt.binaries.ipl.audio.encrypted +alt.fan.wim.stoltenberg +alt.music.runrig +alt.music.wales +alt.binaries.samantha-fox +alt.fan.juli-ashton +alt.tv.clueless +alt.starwars.leagues.euro-fighter +free.music.crocketts +alt.music.rob-zombie +alt.kill.whitey +alt.zombie +alt.fan.amiga-power +alt.fan.fransbauer +alt.tv.alf +alt.binaries.pictures.erotica.female.crying +alt.binaries.nospam.facials +alt.support.grief.suicide +alt.fan.prettyboy +alt.food.burgerchef +alt.jfif.rose.leaf.club +alt.fan.doc-thompson +alt.autos.t-buckets +alt.games.firaxis.gettysburg +alt.games.firaxis.alpha-centauri +it.fan.pikappa +it.comp.hardware.palmari +it.sport.calcio.milan +alt.religion.christian.plymouth.brethren +it.cultura.horror +alt.test.clienttest +alt.nintendo64.zelda +alt.test.clienttest3 +alt.games.frp.gammaworld +alt.unix.geeks +alt.nl.radio.zendamateur.gelicentieerd +alt.food.olives-or-olive-oil +alt.music.aqua +alt.tv.hey-arnold +alt.music.squirrel-nut-zippers +alt.sex.realdoll +alt.fan.billie-piper +alt.language.cebunews +alt.language.balita-business +alt.fan.tori-amos +alt.fan.zsazsa +alt.pets.dogs.vizsla +alt.fan.amiga-action.die.die.die +alt.hobbies.reenactor +alt.music.space +alt.teletext.megazine +alt.umr.student.babble +alt.binaries.mac.playstation +alt.garden.pond.chat +alt.binaries.sounds.1940s.mp3 +alt.binaries.soccer.images +alt.html.server-side +alt.culture.macedonia-is-greek +alt.west-virginia.bluefieldnet +alt.comp.software.energy +alt.binaries.nospam.plumpers.amateur +alt.fashion.corsetry +alt.religion.christian.intervarsity +alt.religion.christian.ywam +alt.games.stellar-civ +alt.games.earth2025 +alt.rv.nash +alt.binaries.pictures.fuzzy-sweaters.female +alt.books.tanya-huff +alt.cracks.nl +alt.fan.phiberoptik +alt.politics.socialism.binaries +alt.games.microsoft.flight-sim.efis98 +alt.politics.socialism.libertarian +alt.trebel +alt.pets.dogs.flame-wars +no.samfunn.media.radio-tv +alt.media.studies +alt.binaries.pics.musumes.mankos.musyuuseis +no.alt.hjemmesider +alt.binaries.pics.paipans.mankos.musyuuseis +alt.trebel.music +alt.nl.binaries.hack +alt.trebel.demos +alt.talk.miet.mp.g3 +alt.music.eels +alt.music.culture-club +alt.mountain-bike.van-delay +alt.music.green-day.vacant5150.aka.kayte +alt.transgendered.jeffy-boyd +alt.frank.sanders.is.a.woman.beater +alt.aol.cypher +alt.fan.jackie-jokeman +alt.pets.dogs.labrador +alt.music.adiemus +de.comm.infosystems.www.pages.misc +alt.pro-wrestling.ecw +alt.trebel.party +alt.trebel.country +alt.trebel.country.netherlands +alt.survival.millenium +alt.disney.sucks +alt.trebel.diskmag +alt.music.skinny-puppy +alt.esada +alt.military.seacadets +alt.domain-names.forsale +alt.domain-names.disputes +alt.domain-names.registries +alt.domain-names.wanted +alt.music.beastie-boys.punk-liar +alt.music.crocketts +alt.binaries.smokers.glamour.cigars +alt.yerevan +alt.trebel.country.france +alt.survival.year2000 +alt.psychology.dramatherapy +alt.tea +pl.soc.seks.moderowana +alt.bru +alt.bitoparty +alt.autos.turbocharged +alt.comp.tandem-users.sigs +alt.modpol.discussion +alt.tfn.flame.dork.allisat +nctu.adm.health +alt.fan.stuttering-john +alt.fan.bababooey +alt.fan.oppy.music +alt.fan.disguising.godiva +alt.fan.nick-humphrey +alt.movies.legionnaires +alt.binaries.actvism.radical-left +alt.fan.mike.dumas-is-an-asshole +alt.fan.zoogz-rift-fans-are-assholes +alt.binaries.zoogz-rift +alt.fan.frank-zappa-digital-traders +alt.genius.rupert-hangnail +alt.fan.monkeylove +alt.family-name.skomp +alt.modpol.discusssion +alt.greek-lawyers +alt.tony-net +alt.binaries.christy-turlington +alt.fan.rockpalast +alt.music.nits +alt.life.sucks.spork +alt.fan.danny.gatton +no.kultur.musikk.korps +alt.familiy-names.harperink +alt.h0e +alt.engineering.fire-protection +alt.cover.the.world.with.snow +alt.fan.exotic-weapons +alt.saladpuncher +alt.loopy.fungus +alt.aardvark +alt.meow +it.fan.musica.battiato +it.sport.palestra +it.comp.emulatori.console.recenti +alt.security.dealers.ads +alt.security.doityourself.ads +alt.binaries.warez.ibm-pc.fills +alt.personals.sanfrancisco.married-attach +alt.binaries.drew-barrymore +alt.security.doityourself +alt.security.dealers +de.comm.infosystems.www.pages.announce +alt.music.eric-clapton +pl.comp.cad +alt.comp.software.financial.quicken +alt.homepages.xoom +alt.anonymous.email +alt.music.beastie-boys.punk-liar.gwedoking +alt.comp.sesoft +alt.sex.sleeping-girls +alt.anime.escaflowne +alt.tv.adam-12 +alt.family-names.thijssen +alt.binaries.pictures.celine-dion +de.markt.buecher +alt.icq +alt.petz +alt.anarchism.communist +alt.org.iww +alt.anarchism.syndicalist +alt.unix.geeks.moderated +alt.medien.fernsehen +alt.support.girl-lovers +alt.binaries.vcdz +alt.fan.russ-hamner +alt.binaries.music.heavy-metal +alt.music.terrorvision +de.markt.comp.software.misc +alt.pl.popieram.ateizm +alt.hgo +alt.tv.touched-by-an-angel +alt.books.patrick-jones +alt.binaries.cd.image.playstation.reposts +alt.games.starsiege.tribes +alt.fan.sallymae.hogsby +alt.music.smash-pumpkins.jimmy-addict.tasty-smack +alt.binaries.pictures.erotica.rape.loki +alt.books.david-gemmell +alt.games.quake3 +alt.binaries.sounds.mp3.indian.movies +it.hobby.radio-cb +alt.binaries.sounds.mp3.indian.movies.old +alt.binaries.sounds.mp3.indian.remixes +alt.binaries.sounds.mp3.indian.bhangra +alt.binaries.sounds.mp3.indian.pop +alt.binaries.sounds.mp3.indian.requests +it.sport.calcio.fiorentina +it.scienza.meteo +it.fan.musica.u2 +alt.sailing.tall-ships +alt.astronomy.solar +alt.binaries.worship.goescrunch +free.politics.arena1 +alt.pro-wrestling.nostalgia +alt.music.dance.mp3.binaries +alt.fan.laura-harris +no.fag.medisin.diverse +alt.arts.limericks +alt.pets.parrots.budgerigars +free.testbourne +alt.fan.furry.politics +seattle.freenet.scn +alt.audio.equipment +alt.binaries.sounds.jpop +alt.cars.clubgti +alt.binaries.pictures.tall-ships +alt.tasteless.bottomfeeders +alt.sink.the.ship +alt.games.unreal.ed +alt.hack.tr +it.discussioni.ristoranti +it.hobby.satellite-tv.digitale.mod +de.rec.sf.babylon5.infos +alt.video.divx.bloatedsack +alt.binaries.pictures.kids +alt.collecting.beanie-babies.uk +de.alt.soc.tierrechte +alt.scarborough +alt.video.dvd.friends-of-joe +alt.binaries.pictures.erotica.cartoons.mythical-creatures +alt.binaries.sounds.mp3.comedy +alt.music.man +alt.startrek.steg +alt.binaries.pictures.erotica.sistas.charmaine +alt.binaries.gdead.reposts +de.alt.soc.punk +alt.earth.confederation +alt.binaries.warez.ibm-pc.german +alt.games.half-life.editing +alt.tv.x-files.creative.mature +alt.bbs.mystic +alt.unix.interix +alt.fan.sabrina-lloyd +alt.binaries.sabrina-lloyd +maus.talk.francais +maus.computer.sprache.oops +alt.cellular.nokia.ringtones +alt.music.tea-party.moderated +alt.games.petz +alt.tv.sevendays +alt.tv.sinbad +alt.tv.mortal-kombat +alt.tv.red-dwarf.series8 +alt.bbs.telegard.moderated +de.rec.sf.babylon5.misc +de.sci.medizin.allergie +de.soc.subkultur.gothic +de.soc.subkultur.bdsm +de.soc.subkultur.misc +de.admin.infos +alt.binaries.pictures.erotica.pigtails +no.org.nuug +no.it.os.amiga.diverse +no.kultur.musikk.gitar +no.it.os.amiga.maskinvare +no.it.os.amiga.programvare +no.fritid.dyr.diverse +alt.games.homm +it.discussioni.anni80 +alt.tiernan +alt.binaries.mac.cd-images.parts +alt.binaries.mac.cd-images.d +alt.binaries.pictures.erotica.sistas.dominique +alt.binaries.pictures.erotica.sistas.jeannie-pepper +alt.fan.dominique +alt.binaries.games.homm-maps +alt.music.feelers +alt.binaries.mac.playstation.d +alt.binaries.mac.playstation.parts +alt.fan.edge102 +alt.fan.torok.urine-soaked-rags +alt.fan.alicia-silverstone +de.comp.audio +alt.comp.sys.laptops.alcam +alt.breakdancing +alt.games.creatures.moderated +alt.fan.nina-hagen +alt.irc.corruption.log.log.log +alt.fan.britney-spears +alt.binaries.pictures.erotica.dita +alt.binaries.pictures.dita +alt.binaries.barbarella +alt.support.sex-workers +alt.plague +alt.animation.batman +alt.new-hampshire +alt.snowchyld.bounce.bounce.bounce +alt.fan.tiffany-smith +alt.music.ub40 +alt.lets.all.earn.a.living.through.lotteries +pl.comp.grafika.grafika3d +pl.regionalne.poznan +pl.internet.polip +alt.comics.spacemoose +alt.fan.frank-zappa-fans-are-losers +alt.binaries.sarah-m-gellar +alt.topper.pantscat.spank.spank.spank +alt.music.bloem +alt.music.insane-clown-posse +alt.macamp +alt.fan.robert-ghostwolf +alt.fan.robert.ghostwolf +alt.hack +alt.binaries.pictures.erotica.adsl +alt.blake-isms +alt.tv.ocean-girl +alt.games.rctycoon +alt.fan.richard-hoaxland +alt.sex.necrophilia.mother-theresa +alt.sex.necrophilia.princess-diana +alt.binaries.nospam.danni-ashe +alt.fan.robert.franzone +it.comp.sicurezza.windows +alt.hackers.cough.cough.cough +alt.binaries.fetish.scat.roger +alt.music.dave-matthews.tapetrading +alt.radio.talk.richard-dolce +alt.vinny.cahill.ok.ok.ok.ok.ok +alt.cable-tv.tci-digital +alt.binaries.3d.poser +alt.garden.commando +alt.fan.richard-silver +alt.games.the-yow +alt.games.the-sloan +alt.vinny.cahill.ok.ok.ok +alt.fan.alare +alt.starfleet.primedirective.rpg +alt.cafe-vortex +alt.music.metallica.songs.turn-the-page +alt.music.beautiful-south +alt.sports.soccer.manchester.united.scum-haters +alt.games.simcity +alt.games.simcity.2000 +alt.games.simcity.3000 +alt.binaries.games.simcity +alt.music.osmonds +free.divx-sucks +alt.pictures.ana-voog +alt.prehensile +alt.internet.search-engines +alt.music.levellers +free.naturism.wales +alt.collecting.barbies +alt.comedy.british.fast-show +alt.collecting.beanie-babies.tradingcards +alt.fan.silly-pillows +alt.fan.artelevision +alt.dance.breaking +alt.cable-tv.disney +alt.stonecarvers +alt.music.chinese.a-mei +alt.video.satellite.mpeg-dvb +alt.society.kindness +free.clinton.scandals.moderated +alt.binaries.partycaps +alt.tv.the-net +alt.music.eighties +alt.conspiracy.fbi.karczewski-files +alt.foodl.authentic-only +alt.clnis.daily.club +alt.military.uk.agc +alt.military.uk +alt.music.makers.ukulele +it.arti.musica.classica.mod +alt.support.bells-palsy +it.comp.programmare.win32 +it.cultura.letteratura.italiana +it.medicina.allergie +it.sesso.gnocca +it.tlc.cellulari.motorola +alt.flame.bannerservices +alt.toronto-jews +alt.dreams.lucid.entities +alt.newsbear +alt.binaries.sounds.netjam.mp3 +alt.newsangels.lamers +free.clinton.china.scandals +free.dick.morris.fans +alt.seafarers +alt.seafarers.deck +alt.seafarers.engineroom +alt.seafarers.ratings +alt.games.clanlord +free.clinton.indian.scandals +alt.fan.teresa-may +free.clinton.and.assholes.who.like.to.trash.him +alt.sport.shooting.silhouette +alt.binaries.photography.people +free.clinton.fbi.files.blackmail +free.clinton.wag.the.dog +free.clinton.travel.gate +free.poodles.standard +alt.school.mates +alt.fan.arale +free.clinton.monica.lewinsky.scandals +alt.rec.robotica.es +free.clinton.impeachment.trial +free.clinton.paula.jones.scandal +free.clinton.kathleen.wiley.scandals +free.clinton.linda.tripp +free.clinton.fbi.files +alt.atv +alt.music.makers.mpeg +de.alt.sport.winter +free.clinton.campaign.finance.scandals +alt.rec.robotica +alt.robotica.es +alt.robotica +free.clinton.tainted.blood.scandals +alt.binaries.webcam.babetv +free.clinton.vince.foster +alt.autos.jaguar +free.clinton.department.of.justice.abuse +it.cultura.fantascienza.startrek +it.hobby.elettronica.riparazioni +alt.graphics.scanning +alt.binaries.fontscomp +alt.sys +alt.msdos +alt.periphs +alt.binaries.pop.will.eat.itself +gnu.cvs.bug +gnu.cvs.help +free.tim-skirvin-is-god +alt.prisons.moderated +free.underwater +alt.talk.prisons.moderated +alt.music.themepark +alt.music.local-h +alt.binaries.pictures.erotica.pickaninnies +alt.binaries.pictures.erotica.sistas.melissa-sade +free.clinton.ron.brown +free.milwauke +alt.engineering.maintenance +alt.lifestyle.master-slave +de.rec.sf.startrek.deep-space-9 +de.rec.sf.startrek.voyager +de.rec.sf.startrek.enterprise +de.rec.sport.motor.misc +de.rec.sport.motor.auto +de.rec.sport.motor.motorrad +alt.music.beatles +alt.music.boyzone +alt.music.pennywise +free.talk.prisons.moderated +alt.fan.thebigshow +alt.business.multi-level.watkins +free.jkfisher +alt.fan.momus +alt.tv.pretender.creative +alt.magic.marketplace +free.clinton.arkansas.mena +free.brookfield.connecticut.education +free.clinton.judicial.watch +alt.binaries.mpeg +alt.multimedia.mpeg +alt.fan.marijane-blaine +alt.pcdos +alt.binaries.pictures.erotica.female.young.moderated +it.comp.software.mailreader +alt.games.video.nintendo-entertainment-system +alt.games.video.super-nintendo +alt.games.video.game-boy +it.hobby.hi-fi.car +it.comp.software.browser +alt.binaries.hacking.computers +it.cultura.linguistica.inglese +alt.binaries.hacking.beginner +alt.fan.sade +it.istruzione.formazione +alt.binaries.hacking.websites +alt.music.mdfmk +alt.fan.susan-golding +alt.fan.john-norquist +alt.flame.serbs +alt.fan.rudy-perpich +alt.romance.conflict-of-interest +alt.biz.infighting +alt.romance.conflict-of-interest.poetry +alt.music.vacuum +alt.bonehead.kristian-tanner +de.alt.talk.kasper +alt.binaries.e-book +alt.binaries.pictures.erotica.intercourse +free.clitnon.mary.mahoney +free.uk.london.young-adults +free.war.on.drugs +free.clinton.bombed.sudan.afghanistan +alt.fan.travis-mcgee +free.clinton.mary.mahoney +free.clinton.oklahoma.city.bombing +alt.pbem.blackfuture +free.clinton.ken.starr +alt.fan.laura-love +alt.fan.kirin-landsgaard +alt.fan.katie-holmes.binaries +alt.fan.really-big-button +alt.francosexe.pictures +alt.tv.sunset-beach +alt.games.axisandallies +alt.fan.laura-hall +alt.binaries.multimedia.buffy-v-slayer +alt.binaries.multimedia.gloves +alt.null.bandwagons +alt.tv.rescue-77 +alt.battlestar-galactica +alt.binaries.multimedia.cartoons +alt.music.no-depression +alt.visa.australia +alt.music.autechre +alt.fan.usandwilbur +alt.games.civ-call-to-power +alt.digitiser.binaries +alt.comics.pokey +alt.mottola +alt.binaries.multimedia.erotica.rm +alt.binaries.sounds.midi.classical.sequencing +alt.binaries.nine.inch.nails +alt.binaries.sounds.mp3.dance +alt.nl.kabel.eneco +alt.cars.lotus.elan +alt.fan.kid-rock +alt.global-warming +alt.games.asherons-call +alt.tv.queerasfolk.uk +alt.solly +alt.music.b-witched +alt.games.jagged-alliance +alt.dreams.prophetic +alt.culture.euskalherria +alt.furniture.moroccan +alt.furniture.mid-century-modern +alt.dreams.recurring +alt.binaries.hudson-leick +alt.books.george-behe +free.uk.greyhounds +free.uk.guns +alt.binaries.asianscans +alt.binaries.asianscans.icyscans +alt.impero +alt.fan.natalieportman.binaries +alt.online-service.webtv.abuse +no.kultur.diverse +no.kultur.litteratur.diverse +no.kultur.film +no.it.nostalgi +no.kultur.folklore.ufo +no.fritid.slektsforsking.etterlysing +alt.fan.john-d +no.annonser.diverse +alt.online-service.webtv.sucks +no.it.programvare.ms-office +no.annonser.it.telekom +no.annonser.sykkel +no.annonser.foto +no.annonser.spill.tv +no.annonser.spill.diverse +no.annonser.spill.data +no.annonser.bil +no.annonser.bolig +no.teknologi.bil +no.fag.spraak.diverse +no.samfunn.diverse +no.it.maskinvare.diverse +no.it.programvare.tex +no.it.os.mac.diverse +no.fritid.foto +no.fag.spraak.fagord +no.it.maskinvare.pda +alt.religion.tantra +no.teknologi.diverse +no.samfunn.seksualitet +no.fag.jus +no.it.os.ms-windows.diverse +alt.fan.fica +de.markt.tiere +alt.politics.religion +alt.games.final-fantasy.edwynsvoice +alt.waukesha.schools.meadowbrook +alt.fan.culo.lega +it.annunci.usato.motociclismo +it.arti.fotografia.digitale +it.fan.musica.queen +it.industria.elettrotecnica.normative +it.comp.software.architettura +it.discussioni.abolizione-tut +it.discussioni.sentimenti +it.sport.rally +it.istruzione.universita.ingegneria +it.comp.hardware.motherboard +it.fan.asimov +alt.games.quake2.nl +pl.comp.lang.delphi.bazy-danych +alt.music.makers.nederland +alt.music.makers.nederland.markt +alt.tv.food-network +alt.satellite.direcpc.stupid.moron.dpc-dealers +gnu.gnats.bug +alt.binaries.sounds.radio.misc +alt.games.freeciv +de.alt.soc.anarchie +alt.nl.taalbederf +alt.books.thomasbernhard +alt.www.authoring.homesite +alt.binaries.nospam.indexes +de.comm.telefonie.misc +de.comm.telefonie.tarife +de.comm.telefonie.service +free.fan.redwordsmith +free.kosovo +alt.magick.scam +alt.music.radiohead.what.does.the.guy.say.at.the.end.of.the.just.video +alt.england.sux.scotland.and.wales.rule.the.world +alt.england.sux.wales.and.scotland.rule.the.world +alt.fan.vittoriosgarbi +it.eventi.guerrakosovo +alt.fan.frank-zappa-tape-trading +alt.carnival +it.sociale.handicap.intellettivo +alt.tv.crime-drama +alt.irc.channels.lucca +alt.fan.keatonfox +alt.fan.sara.di-scienze-politiche +alt.masturbation +alt.tv.futurama +alt.sci.astro.eclipses +alt.hate.kelvinmckenzie +alt.culture.friesland.frysk +alt.binaries.pictures.fashion.youth.d +alt.binaries.pictures.fashion.youth.oldies-repost +alt.collecting.records +alt.binaries.rebecca-lord +alt.os.linux.mandrake +free.uk.music.swing +free.soc.culture.english +free.software.open-source +free.uk.housing.misc +alt.support.childfree.moderated +alt.kosovo-relief.missing.persons.register.yourself +alt.binaries.music.manics +alt.games.video.shooters +free.uk.pigeons +alt.fan.ariel +alt.kosovo-relief +alt.fun-pizza.frankj.frankj.frankj +alt.fan.pizza.frankj.frankj.frankj +alt.irc.mirc.scripts.pizza +alt.books.bernard-cornwell +alt.pets.pet-rights +alt.multimedia.tk.terri-disisto +alt.binaries.sounds.mp3.rap-hiphop.full-albums +alt.binaries.sounds.mp3.rap-hiphop.mixtapes +alt.binaries.sounds.mp3.rap-hiphop +alt.music.lords-of-acid +alt.ticklish.guys.eric-miller +alt.tickling +alt.hackers.debate +alt.music.jpop +it.comp.hardware.cd.moderato +it.cultura.religioni +it.scienza.informatica.software-eng +alt.tv.tmf +alt.fan.lisa-kudrow +alt.binaries.games.half-life +alt.kosovo-relief.what.do.you.need +alt.media.dvd.cracked +alt.flame.pizza +alt.fan.kubrick +alt.fan.bobo-vieri +alt.lang.intercal +alt.culture.welsh +alt.ali.howell.is.tidy +alt.music.derrero +alt.music.oxygum +alt.binaries.pictures.erotica.jennicam +alt.binaries.warez.riscos +free.comp.linux.misc +alt.bogus +free.beenz +alt.fan.flat-eric +alt.fan.nick-mooney +de.alt.fan.aldi +de.alt.comp.gnome +alt.movies.wim-wenders +alt.discussioni.figa-gratis +alt.fan.leonardo-serni +alt.fan.pirotti.prospero +alt.fan.marco-ditri +alt.it.arte.videogiochi +alt.fan.villetti.maiuscolo +alt.fan.pirotti.prospero.net-abuse +alt.fan.janis +alt.fan.culo.max_adamo +alt.free.newsservers +alt.fan.culo.bjork +alt.fan.simon-nash +alt.ticklish.guys.alex-rose +alt.tv.familyguy +alt.ray.vanlandingham.is.a.stoopid.fuckwit.who.smells.like.shit.and.sucks.mens.cocks +alt.fan.nutella +alt.binaries.pictures.erotica.sheep +alt.porno.images.lesbo +alt.porno.images.homosex +alt.religion.ray-karczewski +alt.fan.madredeus +alt.fan.rosy-bindi +alt.fan.punti.fa.il.servizio.civile +alt.internet.worldsaway +alt.previdenza.sociale +alt.coccinella.alexa.zepher.maltrattamenti +alt.fan.punti.ha.deciso.di.disertare +no.kultur.folklore.diverse +no.it.os.ms-windows.nt +no.annonser.motorsykkel +no.annonser.it.maskinvare.diverse +alt.tv.sopranos +free.brian-baird +alt.tv.tom-green +alt.binari +alt.tech.digital-tv.select401 +alt.airports.uk.edinburgh +alt.fan.il.maestro.re.del.bakkaglio +alt.freedom.jbpe.gam +alt.employees.compusa +alt.autos.rolls-royce-bentley +alt.org.young-enterprise +alt.satellite.direcpc.stupid.moron.dpc-dealers.2k-networks +alt.comics.sluggy-freelance +de.rec.music.rock+pop +alt.emulators.freemware +alt.pets.degus +alt.aquaria.guppy +alt.dare.sucks +alt.tv.the-jeffersons +alt.forsale.children +alt.music.smash-pumpkins.my-name-is.what.my-name-is.who.my-name-is.huh.wikka-wikka.dead-carmance +free.alt.freedom.jbpe.gam +alt.dmc +alt.turismo.camper +free.uk.genealogy +alt.bonehead.jay-denebeim +alt.shut.the.hell.up.jay-denebeim +alt.idiot.jay-denebeim +alt.get.a.life.jay-denebeim +alt.sex.fetish.rmgroup.jay-denebeim +alt.fuck.jay-denebeim.up.the.ass.with.a.chainsaw +alt.rmgroup.this.jay-denebeim +alt.sex.bondage.jay-denebeim +free.uk.nature.ponds +free.uk.gardening +free.uk.sport.orienteering +free.uk.sport.wrestling +alt.comp.periphs.mainboard.epox +alt.aaaaaa +alt.pets.parrots.breeding +alt.jeff78.n.natalie.griffith.are.pathetic.morons +free.uk.paranormal +free.uk.astrology +free.uk.numerology +free.uk.herbs +alt.religion.gay-les-bi-tran +free.uk.anarchy-in-the +free.uk.surveillance-technology +free.uk.tv.soaps +free.uk.music.festivals +alt.music.everything-but-the-girl +free.kijfhoek.noo-noo +free.fan.rupert-hangnail +it.comp.appl.macromedia +alt.cx +alt.support.host-u-internet +free.host-u.support +alt.fuck.imran.up.the.ass.with.a.chainsaw +alt.sports.hockey.nhl.atl-thrashers +alt.nudism.moderated +alt.fan.jay-denebeim +alt.fans.kant.navel-gazing +pl.sci.geodezja +de.sci.medizin.physiotherapie +alt.comics.user-friendly +alt.religion.unitarian-univ +alt.crackhead.jay-denebeim +alt.music.bluetones +alt.certification.network-plus +alt.this.newsgroup.has.a.really.long.name.just.to.frustrate.jay-denebeim.fan.rupert-hangnail.romath.admin.net-abuse.usenet.fan.karl-malden.nose +alt.lick.my.sweaty.nutsack.jay-denebeim +alt.fuck.you.jay-denebeim +alt.usenet.pedophiles.jay-denebeim +alt.tv.happy-hour +free.virtualglasgow-net.support +alt.team11.techtips +alt.nl.markt.telecom.gsm +alt.fan.dave-foley +free.email +free.phone-calls +alt.uk.virtual-glasgow +alt.culture.mods-modernists +alt.drugs.pot.cultivation.no-spooks +alt.tv.farscape +alt.tv.first-wave +alt.tv.martial-law +no.it.nettverk +alt.i.rmgroup.therefore.i.am.jay-denebeim +alt.skinheads.jay-denebeim +alt.sex.beastiality.jay-denebeim +alt.family-names.hangnail +alt.music.mike-oldfield +alt.control.delete +alt.support.spousal-abuse.jay-denebeim +alt.gays.jay-denebeim +alt.cretinous.reprobate.jay-denebeim +alt.binaries.emulators.playstation +alt.usenet.god.dr-hangnail +alt.provider.ibm +alt.fan.nicole-kidman +de.alt.fock +alt.fresh.steamy.dog-turds.jay-denebeim +alt.motherfucker.jay-denebeim +alt.music.duke-ellington +de.comm.software.mailtraq +de.alt.1 +de.etc.schreiben.misc +cz.sci.alife +de.alt.jugendschutz +de.etc.schreiben.prosa +de.etc.schreiben.lyrik +alt.support.depression.recovery.sanctuary +alt.fan.trenchcoat-mafia +no.fritid.hage +alt.music.black-crowes +alt.binaries.paranormal +nz.reg.canterbury.general +alt.fan.bryan.shea +alt.hackers.groups.lod +de.alt.adhclub +alt.free.party-lines +alt.binaries.sounds.realaudio.rush-limbaugh +alt.my.name.is.jay-denebeim.and.i.rmgroup.for.sexual.gratification +alt.support.diet.paleolithic +free.noo-noo +alt.beeotch.jay-denebeim +alt.games.final-fantasy.aggta +alt.bonehead.hangnail +alt.fan.olsen-twins +alt.fashion.crossdressing.jay-denebeim +alt.overweight.trailer-trash.jay-denebeim +alt.bad.personal-hygiene.jay-denebeim +alt.vietnam.veterans +alt.binaries.pictures.erotica.nuns +alt.games.fallout +alt.binaries.jeri-ryan +alt.binaries.pictures.wallpaper +alt.nl.detachering.it +alt.fan.miss-manners +alt.tv.showtime +alt.bobgoblin-extraordinaire +alt.current-events.massacre.columbine +alt.tv.spin-city +alt.binaries.pictures.phedz +alt.fan.dragonball +alt.rmgroup.addict.j.a.y-d.e.n.e.b.e.i.m +alt.fan.britney-spears.binaries +alt.music.deftones +alt.go.to.hell.j.a.y-d.e.n.e.b.e.i.m +de.etc.fahrzeug.auto +alt.religion.christianity.hypocrisy +alt.religion.christian.hypocrisy +alt.music.mogwai +de.etc.fahrzeug.misc +alt.sport.roller-derby +alt.music.tangerine-dream +alt.vr-www +alt.scott-abraham.sucks +alt.music.dandy-warhols +alt.fan.jim-dove +alt.autos.alfa-romeo +it.comp.giochi.avventure.testuali +it.discussioni.notut +it.fan.musica.de-andre +alt.fan.bas +alt.macromedia.flash +alt.drugs.dare-sucks +alt.bonehead.scott-abraham +alt.comms.lounge +alt.boston.moderated +alt.tv.sabrina.salem.sucks +alt.boston.unmoderated +alt.webcam.camgirls +alt.binaries.emulators.nintendo-64.d +free.binaries.software +alt.support.vasectomy +alt.fan.randy_pepe +alt.fan.theo-fokkema +alt.fan.hydrocodone +alt.psycho.jay-denebeim +alt.homosexual.jay-denebeim +alt.hoogbegaafd.nl +alt.truntfest +de.comm.mobil.geraete.nokia +de.comm.mobil.geraete.misc +alt.2600.announce +alt.military.air-cadets +alt.religion.buddhism.ris-med +it.hobby.viaggi.inter-rail +alt.law.war-crimes.tribunals +it.discussioni.sogni +it.hobby.pattinaggio +alt.fan.ricky-martin +it.scienza.biologia +alt.binaries.guitar.tab +it.comp.appl.notes-domino +it.tlc.telefonia.wind +alt.nl.gratis.bellen.kpn-prepay +alt.music.emo +alt.nl.telebankieren +alt.binaries.pictures.erotica.krystal diff --git a/splitter/NewsTree.cpp b/splitter/NewsTree.cpp new file mode 100644 index 0000000..1910fdd --- /dev/null +++ b/splitter/NewsTree.cpp @@ -0,0 +1,95 @@ +#include +#include +#include + +NewsTree::NewsTree(GUIWindow &parentWindow,const Rect &winRect,int controlID) +: FolderTree(parentWindow,winRect,controlID) +{ + mSelChangedHandler.setCallback(this,&NewsTree::selChangedHandler); + mSelChangingHandler.setCallback(this,&NewsTree::selChangingHandler); + mItemExpandingHandler.setCallback(this,&NewsTree::itemExpandingHandler); + mItemExpandedHandler.setCallback(this,&NewsTree::itemExpandedHandler); + mBeginDragHandler.setCallback(this,&NewsTree::beginDragHandler); + insertHandler(FolderTree::SelChangedHandler,&mSelChangedHandler); + insertHandler(FolderTree::SelChangingHandler,&mSelChangingHandler); + insertHandler(FolderTree::ItemExpandingHandler,&mItemExpandingHandler); + insertHandler(FolderTree::ItemExpandedHandler,&mItemExpandedHandler); + insertHandler(FolderTree::BeginDragHandler,&mBeginDragHandler); + addItems(); +} + +NewsTree::~NewsTree() +{ +} + +CallbackData::ReturnType NewsTree::selChangedHandler(CallbackData &cbData) +{ + String currentSelection; + + ::OutputDebugString("MainFrame::selChangedHandler\n"); + currentSelection=this->currentSelection(); + ItemType itemType=getItemType(cbData.lParam()); + if(GroupNode==itemType)::OutputDebugString("GroupNode"); + else if(RootNode==itemType)::OutputDebugString("RootNode"); + else if(NewsNode==itemType)::OutputDebugString("NewsNode"); + return false; +} + +CallbackData::ReturnType NewsTree::selChangingHandler(CallbackData &cbData) +{ + ::OutputDebugString("MainFrame::selChangingHandler\n"); + return false; +} + +CallbackData::ReturnType NewsTree::itemExpandingHandler(CallbackData &cbData) +{ + ::OutputDebugString("MainFrame::itemExpandingHandler\n"); + return false; +} + +CallbackData::ReturnType NewsTree::itemExpandedHandler(CallbackData &cbData) +{ + ::OutputDebugString("MainFrame::itemExpandedHandler\n"); + return false; +} + +CallbackData::ReturnType NewsTree::beginDragHandler(CallbackData &cbData) +{ + ::OutputDebugString("MainFrame::beginDragHandler\n"); + return false; +} + +// ******************************************************************************** + +void NewsTree::addItems() +{ + Block groupNames; + TreeView::NodeType nodeType; + + String rootNodeName("news.optonline.net"); + addRootNode(0,rootNodeName,makeItemID(RootNode,0)); + loadGroups(groupNames); + for(int index=0;index &strLines) +{ + QuickSort stringSorter; + File inFile("newssrc","rb"); + String strLine; + int max=4; + int count=0; + + if(!inFile.isOkay())return; + strLines.remove(); + while(inFile.readLine(strLine)&&count++ +#endif + +class NewsTree : public FolderTree +{ +public: + NewsTree(GUIWindow &parentWindow,const Rect &winRect,int controlID); + virtual ~NewsTree(); +private: + enum ItemType{GroupNode=1,RootNode,NewsNode}; + CallbackData::ReturnType selChangedHandler(CallbackData &cbData); + CallbackData::ReturnType selChangingHandler(CallbackData &cbData); + CallbackData::ReturnType itemExpandingHandler(CallbackData &cbData); + CallbackData::ReturnType itemExpandedHandler(CallbackData &cbData); + CallbackData::ReturnType beginDragHandler(CallbackData &cbData); + DWORD makeItemID(int id,int index); + ItemType getItemType(DWORD itemID); + DWORD getIndex(DWORD itemID); + void addItems(); + void loadGroups(Block &strLines); + + Callback mSelChangedHandler; + Callback mSelChangingHandler; + Callback mItemExpandingHandler; + Callback mItemExpandedHandler; + Callback mBeginDragHandler; +}; + +inline +DWORD NewsTree::makeItemID(int id,int index) +{ + return (id<<16)|index; +} + +inline +NewsTree::ItemType NewsTree::getItemType(DWORD itemID) +{ + return ItemType(itemID>>16); +} + +inline +DWORD NewsTree::getIndex(DWORD itemID) +{ + return (itemID&0xFFFF); +} +#endif + diff --git a/splitter/RESOURCE.H b/splitter/RESOURCE.H new file mode 100644 index 0000000..f38ddd0 --- /dev/null +++ b/splitter/RESOURCE.H @@ -0,0 +1,27 @@ +#ifndef _SPLITTER_RESOURCE_H_ +#define _SPLITTER_RESOURCE_H_ + +// string table defines + +#define STRING_SPLITTER 1000 +#define STRING_VERSION 1001 +#define STRING_MAINVIEWCLASSNAME 1002 + +// news group add/modify dialog + +// nntp menu items +#define SPLITTER_FILE_OPEN 40000 +#define SPLITTER_FILE_BROWSE 40001 +#define SPLITTER_FILE_EXIT 40002 +#define SPLITTER_HELP_CONTENTS 40003 +#define SPLITTER_HELP_SEARCH 40004 +#define SPLITTER_REGISTRATION 40005 +#define SPLITTER_HELP_ABOUT 40006 + +#define IDM_CASCADE 10014 +#define IDM_TILE 10015 +#define IDM_ARRANGE 10016 +#define IDM_CLOSEALL 10017 +#define IDM_MINIMIZEALL 10018 +#define IDM_RESTOREALL 10019 +#endif diff --git a/splitter/STRIP.BMP b/splitter/STRIP.BMP new file mode 100644 index 0000000..68746ea Binary files /dev/null and b/splitter/STRIP.BMP differ diff --git a/splitter/SplitterWnd.cpp b/splitter/SplitterWnd.cpp new file mode 100644 index 0000000..ea6ddb9 --- /dev/null +++ b/splitter/SplitterWnd.cpp @@ -0,0 +1,184 @@ +#include +#include + +char SplitterWnd::smszClassName[]="SplitterWnd"; + +SplitterWnd::SplitterWnd(GUIWindow &parent,GUIWindow &pane1,GUIWindow &pane2,int splitRatio) +: mBkGndBrush(RGBColor(COLORREF(::GetSysColor(COLOR_3DFACE)))), + mParent(&parent), mPane1(&pane1), mPane2(&pane2), mSplitRatio(splitRatio), + mSplitWidth(SplitWidth), mLightPen(RGBColor((COLORREF)::GetSysColor(COLOR_3DLIGHT))), + mHiLightPen(RGBColor((COLORREF)::GetSysColor(COLOR_3DHILIGHT))), + mShadowPen(RGBColor((COLORREF)::GetSysColor(COLOR_3DSHADOW))), + mDkShadowPen(RGBColor((COLORREF)::GetSysColor(COLOR_3DDKSHADOW))) +{ + mCreateHandler.setCallback(this,&SplitterWnd::createHandler); + mPaintHandler.setCallback(this,&SplitterWnd::paintHandler); + mLeftButtonDownHandler.setCallback(this,&SplitterWnd::leftButtonDownHandler); + mLeftButtonUpHandler.setCallback(this,&SplitterWnd::leftButtonUpHandler); + mMouseMoveHandler.setCallback(this,&SplitterWnd::mouseMoveHandler); + mCaptureChangedHandler.setCallback(this,&SplitterWnd::captureChangedHandler); + mDestroyHandler.setCallback(this,&SplitterWnd::destroyHandler); + mSizeHandler.setCallback(this,&SplitterWnd::parentSizeHandler); + registerClass(); + insertHandlers(); + Rect winRect(CW_USEDEFAULT,CW_USEDEFAULT,SplitWidth,mParent->height()); + createWindow(smszClassName,"Splitter",WS_VISIBLE|WS_CHILD,winRect,parent,(HMENU)ControlID,processInstance(),this); + show(SW_SHOW); + update(); +} + +SplitterWnd::~SplitterWnd() +{ + removeHandlers(); +} + +void SplitterWnd::registerClass() +{ + WNDCLASS wndClass; + HINSTANCE hInstance; + + hInstance=processInstance(); + if(::GetClassInfo(hInstance,smszClassName,(WNDCLASS FAR *)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW; + wndClass.lpfnWndProc =(WNDPROC)GUIWindow::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplitterWnd*); + wndClass.hInstance =hInstance; + wndClass.hIcon =0; + wndClass.hCursor =::LoadCursor(NULL,IDC_SIZEWE); + wndClass.hbrBackground =mBkGndBrush.getBrush(); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =smszClassName; + ::RegisterClass(&wndClass); +} + +void SplitterWnd::insertHandlers() +{ + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + insertHandler(VectorHandler::CaptureChangedHandler,&mCaptureChangedHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + mParent->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +void SplitterWnd::removeHandlers() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::LeftButtonDownHandler,&mLeftButtonDownHandler); + removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler); + removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler); + removeHandler(VectorHandler::CaptureChangedHandler,&mCaptureChangedHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + mParent->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +CallbackData::ReturnType SplitterWnd::createHandler(CallbackData &cbData) +{ + sizeControls(); + return true; +} + +CallbackData::ReturnType SplitterWnd::paintHandler(CallbackData &cbData) +{ + PaintInformation *pPaintInfo=(PaintInformation*)cbData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + + pureDevice.line(Point(0,0),Point(0,height()-1),mLightPen); + pureDevice.line(Point(1,0),Point(1,height()-1),mHiLightPen); + pureDevice.line(Point(width()-2,0),Point(width()-2,height()-1),mShadowPen); + pureDevice.line(Point(width()-1,0),Point(width()-1,height()-1),mDkShadowPen); + return false; +} + +CallbackData::ReturnType SplitterWnd::parentSizeHandler(CallbackData &cbData) +{ + sizeControls(); + return false; +} + +CallbackData::ReturnType SplitterWnd::leftButtonDownHandler(CallbackData &cbData) +{ + Rect parentRect; + Rect currRect; + Point clickPoint; + + clickPoint.x(cbData.loWord()); + clickPoint.y(cbData.hiWord()); + setCapture(); + mParent->clientRect(parentRect); + mParent->clientToScreen(parentRect); + clientRect(currRect); + clientToScreen(currRect); + mDragStart=currRect.left()-parentRect.left()+width()/2-clickPoint.x(); + mDragx=mDragStart+clickPoint.x(); + PureDevice pureDevice(*mParent); + pureDevice.setDrawMode(PureDevice::R2NOTXORPEN); + pureDevice.line(Point(mDragx,0),Point(mDragx,height()-1)); + return false; +} + +CallbackData::ReturnType SplitterWnd::leftButtonUpHandler(CallbackData &cbData) +{ + Point mousePoint; + + mousePoint.x(cbData.loWord()); + mousePoint.y(cbData.hiWord()); + releaseCapture(); + moveSplitter(mDragStart+mousePoint.x()); + return false; +} + +CallbackData::ReturnType SplitterWnd::mouseMoveHandler(CallbackData &cbData) +{ + if(!hasCapture())return false; + Point mousePoint; + + mousePoint.x(cbData.loWord()); + mousePoint.y(cbData.hiWord()); + PureDevice pureDevice(*mParent); + pureDevice.setDrawMode(PureDevice::R2NOTXORPEN); + pureDevice.line(Point(mDragx,0),Point(mDragx,height()-1)); + mDragx=mDragStart+mousePoint.x(); + pureDevice.line(Point(mDragx,0),Point(mDragx,height()-1)); + return false; +} + +CallbackData::ReturnType SplitterWnd::captureChangedHandler(CallbackData &cbData) +{ + PureDevice pureDevice(*mParent); + pureDevice.setDrawMode(PureDevice::R2NOTXORPEN); + pureDevice.line(Point(mDragx,0),Point(mDragx,height()-1)); + return false; +} + +CallbackData::ReturnType SplitterWnd::destroyHandler(CallbackData &cbData) +{ + return false; +} + +void SplitterWnd::sizeControls() +{ + int parentWidth=mParent->width(); + int parentHeight=mParent->height(); + int xsplit=(parentWidth*mSplitRatio)/100.00; + if(xsplit<0)xsplit=0; + if(xsplit+mSplitWidth>=parentWidth)xsplit=parentWidth-mSplitWidth; + moveWindow(xsplit,0,mSplitWidth,parentHeight,false); + mPane1->moveWindow(0,0,xsplit,parentHeight,true); + mPane2->moveWindow(xsplit+mSplitWidth,0,parentWidth-xsplit-mSplitWidth,parentHeight,true); + update(); +} + +void SplitterWnd::moveSplitter(int xLoc) +{ + mSplitRatio=xLoc*100.00/mParent->width(); + if(mSplitRatio<0)mSplitRatio=0; + else if(mSplitRatio>100)mSplitRatio=100; + sizeControls(); +} + + diff --git a/splitter/SplitterWnd.hpp b/splitter/SplitterWnd.hpp new file mode 100644 index 0000000..ed23c4e --- /dev/null +++ b/splitter/SplitterWnd.hpp @@ -0,0 +1,61 @@ +#ifndef _SPLITTER_SPLITTERWND_HPP_ +#define _SPLITTER_SPLITTERWND_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_BRUSH_HPP_ +#include +#endif +#ifndef _COMMON_PEN_HPP_ +#include +#endif + +class SplitterWnd : public Window +{ +public: + enum {SplitRatio=50,SplitWidth=8}; + SplitterWnd(GUIWindow &parent,GUIWindow &pane1,GUIWindow &pane2,int splitRatio=SplitRatio); + virtual ~SplitterWnd(); + void moveSplitter(int xLoc); +private: + enum {ControlID=5000}; + void registerClass(void); + void insertHandlers(void); + void removeHandlers(void); + CallbackData::ReturnType createHandler(CallbackData &cbData); + CallbackData::ReturnType paintHandler(CallbackData &cbData); + CallbackData::ReturnType leftButtonDownHandler(CallbackData &cbData); + CallbackData::ReturnType leftButtonUpHandler(CallbackData &cbData); + CallbackData::ReturnType mouseMoveHandler(CallbackData &cbData); + CallbackData::ReturnType captureChangedHandler(CallbackData &cbData); + CallbackData::ReturnType destroyHandler(CallbackData &cbData); + CallbackData::ReturnType parentSizeHandler(CallbackData &cbData); + void sizeControls(void); + + Callback mCreateHandler; + Callback mPaintHandler; + Callback mLeftButtonDownHandler; + Callback mLeftButtonUpHandler; + Callback mMouseMoveHandler; + Callback mCaptureChangedHandler; + Callback mDestroyHandler; + Callback mSizeHandler; + SmartPointer mParent; + SmartPointer mPane1; + SmartPointer mPane2; + + Pen mLightPen; + Pen mHiLightPen; + Pen mShadowPen; + Pen mDkShadowPen; + int mSplitRatio; + int mSplitWidth; + int mDragStart; + int mDragx; + Brush mBkGndBrush; + static char smszClassName[]; +}; +#endif diff --git a/splitter/hold/splitter.dsp b/splitter/hold/splitter.dsp new file mode 100644 index 0000000..686dfaa --- /dev/null +++ b/splitter/hold/splitter.dsp @@ -0,0 +1,122 @@ +# Microsoft Developer Studio Project File - Name="splitter" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=splitter - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "splitter.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "splitter.mak" CFG="splitter - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "splitter - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "splitter - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "splitter - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "splitter - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "splitter - Win32 Release" +# Name "splitter - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\NewsTree.cpp +# End Source File +# Begin Source File + +SOURCE=.\SplitterWnd.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\splitter.rc +# End Source File +# End Group +# End Target +# End Project diff --git a/splitter/hold/splitter.dsw b/splitter/hold/splitter.dsw new file mode 100644 index 0000000..09b59a6 --- /dev/null +++ b/splitter/hold/splitter.dsw @@ -0,0 +1,74 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "imagelst"=..\imagelst\imagelst.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "splitter"=.\splitter.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name imagelst + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/splitter/hold/splitter.opt b/splitter/hold/splitter.opt new file mode 100644 index 0000000..65e6bc5 Binary files /dev/null and b/splitter/hold/splitter.opt differ diff --git a/splitter/hold/splitter.plg b/splitter/hold/splitter.plg new file mode 100644 index 0000000..d4f1ce5 --- /dev/null +++ b/splitter/hold/splitter.plg @@ -0,0 +1,32 @@ + + +
+

Build Log

+

+--------------------Configuration: splitter - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP179.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib comctl32.lib /nologo /subsystem:windows /incremental:yes /pdb:"debug/splitter.pdb" /debug /machine:I386 /out:"debug/splitter.exe" /pdbtype:sept +.\debug\main.obj +.\debug\mainfrm.obj +.\debug\SplitterWnd.obj +.\debug\splitter.res +.\debug\NewsTree.obj +\work\exe\msbsp.lib +\work\exe\mscommon.lib +\work\exe\imagelst.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP179.tmp" +

Output Window

+Linking... + Creating library debug/splitter.lib and object debug/splitter.exp + + + +

Results

+splitter.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/splitter/main.cpp b/splitter/main.cpp new file mode 100644 index 0000000..6b3465c --- /dev/null +++ b/splitter/main.cpp @@ -0,0 +1,12 @@ +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + MainFrame frameWindow; + + frameWindow.createWindow("NNTP",String(STRING_SPLITTER)+String(" ")+String(STRING_VERSION),"mainMenu","NNTP"); + return ((FrameWindow&)frameWindow).messageLoop(); +} + diff --git a/splitter/mainfrm.cpp b/splitter/mainfrm.cpp new file mode 100644 index 0000000..386df46 --- /dev/null +++ b/splitter/mainfrm.cpp @@ -0,0 +1,149 @@ +#include +#include +#include +#include +#include + +MainFrame::MainFrame(void) +{ + mPaintHandler.setCallback(this,&MainFrame::paintHandler); + mCloseHandler.setCallback(this,&MainFrame::closeHandler); + mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler); + mDestroyHandler.setCallback(this,&MainFrame::destroyHandler); + mCommandHandler.setCallback(this,&MainFrame::commandHandler); + mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler); + mSizeHandler.setCallback(this,&MainFrame::sizeHandler); + mCreateHandler.setCallback(this,&MainFrame::createHandler); + insertHandlers(); +} + +MainFrame::~MainFrame() +{ + removeHandlers(); +} + +void MainFrame::insertHandlers(void) +{ + FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler); + FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); + FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler); +} + +void MainFrame::removeHandlers(void) +{ + FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); + FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler); +} + +CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + case IDM_CASCADE : + cascade(); + break; + case IDM_TILE : + tile(); + break; + case IDM_ARRANGE : + arrange(); + break; + case IDM_CLOSEALL : + closeAll(); + break; + case IDM_MINIMIZEALL : + minimizeAll(); + break; + case IDM_RESTOREALL : + restoreAll(); + break; + case SPLITTER_FILE_OPEN : + break; + case SPLITTER_FILE_BROWSE : + break; + case SPLITTER_FILE_EXIT : + break; + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/) +{ + show(SW_SHOW); + update(); + + mControl2=::new Control(); + mControl2.disposition(PointerDisposition::Delete); + mControl2->createControl("EDIT","pane2",WS_VISIBLE,Rect(CW_USEDEFAULT,CW_USEDEFAULT,100,100),*this,102); + + mNewsTree=::new NewsTree(*this,Rect(0,0,100,100),105); + mNewsTree.disposition(PointerDisposition::Delete); + + mSplitterWnd=::new SplitterWnd(*this,*mNewsTree,*mControl2); + mSplitterWnd.disposition(PointerDisposition::Delete); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData) +{ + if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE; + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::closeHandler(CallbackData &someCallbackData) +{ + destroy(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + + +// ** virtuals + +void MainFrame::mdiDestroy(MDIWindow &mdiWindow) +{ +} + +void MainFrame::mdiActivate(MDIWindow &mdiWindow) +{ +} + +void MainFrame::mdiDeactivate(MDIWindow &mdiWindow) +{ +} + + diff --git a/splitter/mainfrm.hpp b/splitter/mainfrm.hpp new file mode 100644 index 0000000..a205208 --- /dev/null +++ b/splitter/mainfrm.hpp @@ -0,0 +1,60 @@ +#ifndef _SPLITTER_MAINFRAME_HPP_ +#define _SPLITTER_MAINFRAME_HPP_ +#ifndef _COMMON_MDIFRM_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _SPLITTER_NEWSTREE_HPP_ +#include +#endif + +class SplitterWnd; + +class MainFrame : public FrameWindow +{ +public: + MainFrame(void); + virtual ~MainFrame(); +protected: + virtual void mdiDestroy(MDIWindow &mdiWindow); + virtual void mdiActivate(MDIWindow &mdiWindow); + virtual void mdiDeactivate(MDIWindow &mdiWindow); +private: + enum{StatusBarID=101}; + CallbackData::ReturnType closeHandler(CallbackData &cbData); + CallbackData::ReturnType queryEndSessionHandler(CallbackData &cbData); + CallbackData::ReturnType paintHandler(CallbackData &cbData); + CallbackData::ReturnType destroyHandler(CallbackData &cbData); + CallbackData::ReturnType commandHandler(CallbackData &cbData); + CallbackData::ReturnType keyDownHandler(CallbackData &cbData); + CallbackData::ReturnType sizeHandler(CallbackData &cbData); + CallbackData::ReturnType createHandler(CallbackData &cbData); + CallbackData::ReturnType lineHandler(CallbackData &cbData); + CallbackData::ReturnType browseSelectHandler(CallbackData &cbData); + void insertHandlers(void); + void removeHandlers(void); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + Callback mCloseHandler; + Callback mQueryEndSessionHandler; + Callback mBrowseSelectHandler; + + SmartPointer mSplitterWnd; + SmartPointer mControl1; + SmartPointer mControl2; + SmartPointer mNewsTree; +}; +#endif diff --git a/splitter/scraps.txt b/splitter/scraps.txt new file mode 100644 index 0000000..c0a12fb --- /dev/null +++ b/splitter/scraps.txt @@ -0,0 +1,53 @@ + size(mParent->width(),mParent->height()); +void SplitterWnd::size(int width,int height) +{ + sizeControls(); +/* + int splitx; + + splitx=(mParent->width()*mSplitRatio)/100.00; + if(splitx<0)splitx=0; + if(splitx+mSplitWidth>=mParent->width())splitx=mParent->width()+mSplitWidth; + moveWindow(splitx,0,mSplitWidth,mParent->height(),false); + mPane1->moveWindow(0,0,splitx,mParent->height()); + mPane2->moveWindow(splitx+mSplitWidth,0,mParent->width()-splitx-mSplitWidth,mParent->height()); + update(); */ +} + + + +void MainFrame::addItem(const String &item,String &pathItem,String &parent,TreeView::NodeType nodeType) +{ + String strNode; + HTREEITEM hTreeItem; + + if(!item.strstr(".")) + { + hTreeItem=mFolderTree->searchItem(parent); + if(hTreeItem && (mFolderTree->getChild(hTreeItem) || hTreeItem==mFolderTree->getRoot() ) )nodeType=TreeView::NodeSibling; + else nodeType=TreeView::NodeChild; + ::OutputDebugString(String("Add")+getNodeType(nodeType)+String("2: Item='")+item+String("' ")+String("Parent='")+parent+String("'\n")); + TreeViewItem insertItem(0,0,0,0,(char*)item.str(),item.length(),FolderTree::FolderClosed,FolderTree::FolderOpen,0,(0<<16)|(0+1)); // makeItemID(nodeType,index+1) + mFolderTree->addNode(nodeType,insertItem,parent); + return; + } + strNode=item.betweenString('\0','.'); + TreeViewItem insertItem(0,0,0,0,(char*)strNode.str(),strNode.length(),FolderTree::FolderClosed,FolderTree::FolderOpen,0,(0<<16)|(++mItemCount+1)); // makeItemID(nodeType,index+1) + ::OutputDebugString(String("Looking for '")+strNode+String("'")+String("\n")); + if(!(hTreeItem=mFolderTree->searchItem(strNode))) + { + ::OutputDebugString(String("Add")+getNodeType(nodeType)+String("1: Item='")+strNode+String("' ")+String("Parent='")+parent+String("'\n")); + mFolderTree->addNode(nodeType,insertItem,parent); + } + else + { + ::OutputDebugString(String("Item '")+strNode+String("' is already in tree\n")); + } + addItem(item.betweenString('.','\0'),strNode,pathItem,TreeView::NodeChild); +} + +String MainFrame::getNodeType(TreeView::NodeType nodeType) +{ + if(TreeView::NodeChild==nodeType)return "NodeChild"; + return "NodeSibling"; +} diff --git a/splitter/splitter.aps b/splitter/splitter.aps new file mode 100644 index 0000000..06ce880 Binary files /dev/null and b/splitter/splitter.aps differ diff --git a/splitter/splitter.dsp b/splitter/splitter.dsp new file mode 100644 index 0000000..04a405a --- /dev/null +++ b/splitter/splitter.dsp @@ -0,0 +1,96 @@ +# Microsoft Developer Studio Project File - Name="splitter" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=splitter - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "splitter.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "splitter.mak" CFG="splitter - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "splitter - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "splitter - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "splitter - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "splitter - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "splitter___Win32_Debug" +# PROP BASE Intermediate_Dir "splitter___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MDd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "splitter - Win32 Release" +# Name "splitter - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\SplitterWnd.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/splitter/splitter.dsw b/splitter/splitter.dsw new file mode 100644 index 0000000..a9879d8 --- /dev/null +++ b/splitter/splitter.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "splitter"=.\splitter.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/splitter/splitter.hpp b/splitter/splitter.hpp new file mode 100644 index 0000000..e724343 --- /dev/null +++ b/splitter/splitter.hpp @@ -0,0 +1,6 @@ +#ifndef _SPLITTER_SPLITTER_HPP_ +#define _SPLITTER_SPLITTER_HPP_ +#ifndef _SPLITTER_RESOURCE_H_ +#include +#endif +#endif diff --git a/splitter/splitter.opt b/splitter/splitter.opt new file mode 100644 index 0000000..34b2dc1 Binary files /dev/null and b/splitter/splitter.opt differ diff --git a/splitter/splitter.plg b/splitter/splitter.plg new file mode 100644 index 0000000..b7aeec5 --- /dev/null +++ b/splitter/splitter.plg @@ -0,0 +1,19 @@ + + +
+

Build Log

+

+--------------------Configuration: splitter - Win32 Debug-------------------- +

+

Command Lines

+Creating command line "link.exe -lib /nologo /out:"debug\splitter.lib" .\debug\SplitterWnd.obj " +

Output Window

+Creating library... + + + +

Results

+splitter.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/splitter/splitter.rc b/splitter/splitter.rc new file mode 100644 index 0000000..c9f1021 --- /dev/null +++ b/splitter/splitter.rc @@ -0,0 +1,155 @@ +//Microsoft Developer Studio generated resource script. +// + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +#include "splitter\resource.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +LIST BITMAP "STRIP.BMP" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MAINMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", SPLITTER_FILE_OPEN + MENUITEM "&Browse...", SPLITTER_FILE_BROWSE + MENUITEM "E&xit", SPLITTER_FILE_EXIT + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SPLITTER_HELP_CONTENTS + MENUITEM "&Search", SPLITTER_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SPLITTER_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...", SPLITTER_HELP_ABOUT + END +END + +LOGMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", SPLITTER_FILE_OPEN + MENUITEM "&Browse...", SPLITTER_FILE_BROWSE + MENUITEM "E&xit", SPLITTER_FILE_EXIT + END + POPUP "&Window" + BEGIN + MENUITEM "&Cascade\tShift+F5", IDM_CASCADE + MENUITEM "&Tile\tShift+F4", IDM_TILE + MENUITEM "&Arrange &icons", IDM_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Close &all", IDM_CLOSEALL + MENUITEM "Mi&nimize all", IDM_MINIMIZEALL + MENUITEM "&Restore all", IDM_RESTOREALL + END + POPUP "&Help" + BEGIN + MENUITEM "&Contents", SPLITTER_HELP_CONTENTS + MENUITEM "&Search", SPLITTER_HELP_SEARCH + MENUITEM SEPARATOR + MENUITEM "&Registration...", SPLITTER_REGISTRATION + MENUITEM SEPARATOR + MENUITEM "&About NewsCrawler...", SPLITTER_HELP_ABOUT + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resrc1.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""splitter\\resource.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + STRING_SPLITTER "Splitter" + STRING_VERSION "v1.00" + STRING_MAINVIEWCLASSNAME "SplitterView" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/splitter/splittertest.dsp b/splitter/splittertest.dsp new file mode 100644 index 0000000..0057436 --- /dev/null +++ b/splitter/splittertest.dsp @@ -0,0 +1,123 @@ +# Microsoft Developer Studio Project File - Name="splittertest" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=splittertest - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "splittertest.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "splittertest.mak" CFG="splittertest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "splittertest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "splittertest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "splittertest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "splittertest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "splittertest___Win32_Debug" +# PROP BASE Intermediate_Dir "splittertest___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib wsock32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "splittertest - Win32 Release" +# Name "splittertest - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\mainfrm.cpp +# End Source File +# Begin Source File + +SOURCE=.\NewsTree.cpp +# End Source File +# Begin Source File + +SOURCE=.\splitter.rc +# End Source File +# Begin Source File + +SOURCE=.\SplitterWnd.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/splitter/splittertest.dsw b/splitter/splittertest.dsw new file mode 100644 index 0000000..54b1ce4 --- /dev/null +++ b/splitter/splittertest.dsw @@ -0,0 +1,59 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "imagelst"=..\imagelst\imagelst.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "splittertest"=.\splittertest.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name imagelst + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/splitter/splittertest.ncb b/splitter/splittertest.ncb new file mode 100644 index 0000000..3510ac3 Binary files /dev/null and b/splitter/splittertest.ncb differ diff --git a/splitter/splittertest.opt b/splitter/splittertest.opt new file mode 100644 index 0000000..641f26a Binary files /dev/null and b/splitter/splittertest.opt differ diff --git a/splitter/splittertest.plg b/splitter/splittertest.plg new file mode 100644 index 0000000..4c5c50c --- /dev/null +++ b/splitter/splittertest.plg @@ -0,0 +1,67 @@ + + +
+

Build Log

+

+--------------------Configuration: imagelst - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP10.tmp" with contents +[ +/nologo /MTd /GX /ZI /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp".\msvcobj/imagelst.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\imagelst\Ftree.cpp" +"D:\work\imagelst\Imagelst.cpp" +"D:\work\imagelst\Stdtmpl.cpp" +"D:\work\imagelst\Treeview.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP10.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\imagelst.lib" .\msvcobj\Ftree.obj .\msvcobj\Imagelst.obj .\msvcobj\Stdtmpl.obj .\msvcobj\Treeview.obj " +

Output Window

+Compiling... +Ftree.cpp +Imagelst.cpp +Stdtmpl.cpp +Treeview.cpp +Creating library... +

+--------------------Configuration: splittertest - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP11.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "STRICT" /D "__FLAT__" /Fo"debug/" /Fd"debug/" /FD /GZ /c +"D:\work\splitter\main.cpp" +"D:\work\splitter\mainfrm.cpp" +"D:\work\splitter\NewsTree.cpp" +"D:\work\splitter\SplitterWnd.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP11.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP12.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib wsock32.lib /nologo /subsystem:windows /incremental:yes /pdb:"debug/splittertest.pdb" /debug /machine:I386 /out:"debug/splittertest.exe" /pdbtype:sept +.\debug\main.obj +.\debug\mainfrm.obj +.\debug\NewsTree.obj +.\debug\SplitterWnd.obj +.\debug\splitter.res +\work\exe\mscommon.lib +\work\exe\imagelst.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP12.tmp" +

Output Window

+Compiling... +main.cpp +mainfrm.cpp +NewsTree.cpp +SplitterWnd.cpp +Generating Code... +Linking... + Creating library debug/splittertest.lib and object debug/splittertest.exp + + + +

Results

+splittertest.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/sql/DATAITEM.HPP b/sql/DATAITEM.HPP new file mode 100644 index 0000000..e2525a7 --- /dev/null +++ b/sql/DATAITEM.HPP @@ -0,0 +1,87 @@ +#ifndef _SQL_DATAITEM_HPP_ +#define _SQL_DATAITEM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class DataItem +{ +public: + DataItem(void); + DataItem(const DataItem &someDataItem); + DataItem(const String &sourceName,const String &sourceDescription); + virtual ~DataItem(); + DataItem &operator=(const DataItem &someDataItem); + WORD operator==(const DataItem &someDataItem); + const String &sourceName(void)const; + void sourceName(const String &sourceName); + const String &sourceDescription(void)const; + void sourceDescription(const String &sourceDescription); +private: + String mSourceName; + String mSourceDescription; +}; + +inline +DataItem::DataItem(void) +{ +} + +DataItem::DataItem(const DataItem &someDataItem) +{ + *this=someDataItem; +} + +inline +DataItem::DataItem(const String &sourceName,const String &sourceDescription) +: mSourceName(sourceName), mSourceDescription(sourceDescription) +{ +} + +inline +DataItem::~DataItem() +{ +} + +inline +DataItem &DataItem::operator=(const DataItem &someDataItem) +{ + sourceName(someDataItem.sourceName()); + sourceDescription(someDataItem.sourceDescription()); + return *this; +} + +inline +WORD DataItem::operator==(const DataItem &someDataItem) +{ + return (sourceName()==someDataItem.sourceName()&& + sourceDescription()==someDataItem.sourceDescription()); +} + +inline +const String &DataItem::sourceName(void)const +{ + return mSourceName; +} + +inline +void DataItem::sourceName(const String &sourceName) +{ + mSourceName=sourceName; +} + +inline +const String &DataItem::sourceDescription(void)const +{ + return mSourceDescription; +} + +inline +void DataItem::sourceDescription(const String &sourceDescription) +{ + mSourceDescription=sourceDescription; +} +#endif \ No newline at end of file diff --git a/sql/HDBC.HPP b/sql/HDBC.HPP new file mode 100644 index 0000000..5371f59 --- /dev/null +++ b/sql/HDBC.HPP @@ -0,0 +1,70 @@ +#ifndef _SQL_HDBC_HPP_ +#define _SQL_HDBC_HPP_ +#ifndef _SQL_SQL_HPP_ +#include +#endif + +class HandleDatabase +{ +public: + HandleDatabase(void); + HandleDatabase(HDBC hDBC); + HandleDatabase(const HandleDatabase &someHandleDatabase); + ~HandleDatabase(); + HandleDatabase &operator=(const HandleDatabase &someHandleDatabase); + HandleDatabase &operator=(HDBC hDBC); + WORD operator==(const HandleDatabase &someHandleDatabase)const; + operator HDBC(void)const; +private: + HDBC mhDBC; +}; + +inline +HandleDatabase::HandleDatabase(void) +: mhDBC(0) +{ +} + +inline +HandleDatabase::HandleDatabase(const HandleDatabase &someHandleDatabase) +{ + *this=someHandleDatabase; +} + +inline +HandleDatabase::HandleDatabase(HDBC hDBC) +: mhDBC(hDBC) +{ +} + +inline +HandleDatabase::~HandleDatabase() +{ +} + +inline +HandleDatabase &HandleDatabase::operator=(const HandleDatabase &someHandleDatabase) +{ + mhDBC=someHandleDatabase.mhDBC; + return *this; +} + +inline +HandleDatabase &HandleDatabase::operator=(HDBC hDBC) +{ + mhDBC=hDBC; + return *this; +} + +inline +WORD HandleDatabase::operator==(const HandleDatabase &someHandleDatabase)const +{ + return (WORD)(mhDBC==someHandleDatabase.mhDBC); +} + +inline +HandleDatabase::operator HDBC(void)const +{ + return mhDBC; +} +#endif diff --git a/sql/HENV.HPP b/sql/HENV.HPP new file mode 100644 index 0000000..90c034d --- /dev/null +++ b/sql/HENV.HPP @@ -0,0 +1,71 @@ +#ifndef _SQL_HENV_HPP_ +#define _SQL_HENV_HPP_ +#ifndef _SQL_SQL_HPP_ +#include +#endif + +class HandleEnvironment +{ +public: + HandleEnvironment(void); + HandleEnvironment(HandleEnvironment &someHandleEnvironment); + HandleEnvironment(HENV hEnvironment); + ~HandleEnvironment(); + HandleEnvironment &operator=(HandleEnvironment &someHandleEnvironment); + HandleEnvironment &operator=(HENV hENV); + WORD operator==(const HandleEnvironment &someHandleEnvironment)const; + operator HENV(void)const; +private: + HENV mhEnv; +}; + +inline +HandleEnvironment::HandleEnvironment(void) +: mhEnv(0) +{ +} + +inline +HandleEnvironment::HandleEnvironment(HandleEnvironment &someHandleEnvironment) +{ + *this=someHandleEnvironment; +} + +inline +HandleEnvironment::HandleEnvironment(HENV hEnvironment) +: mhEnv(hEnvironment) +{ +} + +inline +HandleEnvironment::~HandleEnvironment() +{ +} + +inline +HandleEnvironment &HandleEnvironment::operator=(HandleEnvironment &someHandleEnvironment) +{ + mhEnv=someHandleEnvironment; + return *this; +} + +inline +HandleEnvironment &HandleEnvironment::operator=(HENV hEnvironment) +{ + mhEnv=hEnvironment; + return *this; +} + +inline +WORD HandleEnvironment::operator==(const HandleEnvironment &someHandleEnvironment)const +{ + return (WORD)(mhEnv==someHandleEnvironment.mhEnv); +} + +inline +HandleEnvironment::operator HENV(void)const +{ + return mhEnv; +} +#endif + diff --git a/sql/SQL.BAK b/sql/SQL.BAK new file mode 100644 index 0000000..5289bab --- /dev/null +++ b/sql/SQL.BAK @@ -0,0 +1,307 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=sql - Win32 Debug +!MESSAGE No configuration specified. Defaulting to sql - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "sql - Win32 Release" && "$(CFG)" != "sql - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Sql.mak" CFG="sql - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sql - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "sql - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "sql - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "sql - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Sql.lib" + +CLEAN : + -@erase "$(INTDIR)\sqldata.obj" + -@erase "$(INTDIR)\SQLDB.OBJ" + -@erase "$(INTDIR)\SQLSTMT.OBJ" + -@erase "$(OUTDIR)\Sql.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Sql.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Sql.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Sql.lib" +LIB32_OBJS= \ + "$(INTDIR)\sqldata.obj" \ + "$(INTDIR)\SQLDB.OBJ" \ + "$(INTDIR)\SQLSTMT.OBJ" + +"$(OUTDIR)\Sql.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\mssql.lib" + +CLEAN : + -@erase "$(INTDIR)\sqldata.obj" + -@erase "$(INTDIR)\SQLDB.OBJ" + -@erase "$(INTDIR)\SQLSTMT.OBJ" + -@erase "..\exe\mssql.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Sql.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mssql.lib" +LIB32_FLAGS=/nologo /out:"..\exe\mssql.lib" +LIB32_OBJS= \ + "$(INTDIR)\sqldata.obj" \ + "$(INTDIR)\SQLDB.OBJ" \ + "$(INTDIR)\SQLSTMT.OBJ" + +"..\exe\mssql.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "sql - Win32 Release" +# Name "sql - Win32 Debug" + +!IF "$(CFG)" == "sql - Win32 Release" + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\SQLSTMT.CPP + +!IF "$(CFG)" == "sql - Win32 Release" + +DEP_CPP_SQLST=\ + {$(INCLUDE)}"\.\Hdbc.hpp"\ + {$(INCLUDE)}"\.\Henv.hpp"\ + {$(INCLUDE)}"\.\Sql.hpp"\ + {$(INCLUDE)}"\.\Sqlbind.hpp"\ + {$(INCLUDE)}"\.\Sqldata.hpp"\ + {$(INCLUDE)}"\.\Sqldb.hpp"\ + {$(INCLUDE)}"\.\Sqlerror.hpp"\ + {$(INCLUDE)}"\.\Sqlstmt.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\SQLSTMT.OBJ" : $(SOURCE) $(DEP_CPP_SQLST) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +DEP_CPP_SQLST=\ + {$(INCLUDE)}"\.\Sqlbind.hpp"\ + {$(INCLUDE)}"\.\Sqlerror.hpp"\ + {$(INCLUDE)}"\.\Sqlstmt.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\SQLSTMT.OBJ" : $(SOURCE) $(DEP_CPP_SQLST) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\SQLDB.CPP + +!IF "$(CFG)" == "sql - Win32 Release" + +DEP_CPP_SQLDB=\ + {$(INCLUDE)}"\.\Hdbc.hpp"\ + {$(INCLUDE)}"\.\Henv.hpp"\ + {$(INCLUDE)}"\.\Sql.hpp"\ + {$(INCLUDE)}"\.\Sqldata.hpp"\ + {$(INCLUDE)}"\.\Sqldb.hpp"\ + {$(INCLUDE)}"\.\Sqlerror.hpp"\ + {$(INCLUDE)}"\.\Sqlstmt.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\SQLDB.OBJ" : $(SOURCE) $(DEP_CPP_SQLDB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +DEP_CPP_SQLDB=\ + {$(INCLUDE)}"\.\Hdbc.hpp"\ + {$(INCLUDE)}"\.\Henv.hpp"\ + {$(INCLUDE)}"\.\Sql.hpp"\ + {$(INCLUDE)}"\.\Sqldb.hpp"\ + {$(INCLUDE)}"\.\Sqlerror.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\SQLDB.OBJ" : $(SOURCE) $(DEP_CPP_SQLDB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\sqldata.cpp + +!IF "$(CFG)" == "sql - Win32 Release" + +DEP_CPP_SQLDA=\ + {$(INCLUDE)}"\.\Sql.hpp"\ + {$(INCLUDE)}"\.\Sqldata.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\sqldata.obj" : $(SOURCE) $(DEP_CPP_SQLDA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +DEP_CPP_SQLDA=\ + {$(INCLUDE)}"\.\Sql.hpp"\ + {$(INCLUDE)}"\.\Sqldata.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\sqldata.obj" : $(SOURCE) $(DEP_CPP_SQLDA) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/sql/SQL.HPP b/sql/SQL.HPP new file mode 100644 index 0000000..b975a3f --- /dev/null +++ b/sql/SQL.HPP @@ -0,0 +1,15 @@ +#ifndef _SQL_SQL_HPP_ +#define _SQL_SQL_HPP_ +#ifdef _MSC_VER +#include +#include +#else +#ifndef WIN32_NT +#define WIN32_NT +#endif +#include +#define _SQL_OS_WINNT +#include +#include +#endif +#endif diff --git a/sql/SQL.PLG b/sql/SQL.PLG new file mode 100644 index 0000000..c95c5c7 --- /dev/null +++ b/sql/SQL.PLG @@ -0,0 +1,31 @@ + + +
+

Build Log

+

+--------------------Configuration: sql - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP41.tmp" with contents +[ +/nologo /MTd /GX /Zi /Od /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\SQL\sqldata.cpp" +"D:\work\SQL\SQLDB.CPP" +"D:\work\SQL\SQLSTMT.CPP" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP41.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mssql.lib" .\msvcobj\sqldata.obj .\msvcobj\SQLDB.OBJ .\msvcobj\SQLSTMT.OBJ " +

Output Window

+Compiling... +sqldata.cpp +SQLDB.CPP +SQLSTMT.CPP +Creating library... + + + +

Results

+mssql.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/sql/SQL32.IDE b/sql/SQL32.IDE new file mode 100644 index 0000000..265bcc7 Binary files /dev/null and b/sql/SQL32.IDE differ diff --git a/sql/SQLBIND.HPP b/sql/SQLBIND.HPP new file mode 100644 index 0000000..ad13d47 --- /dev/null +++ b/sql/SQLBIND.HPP @@ -0,0 +1,49 @@ +#ifndef _SQL_SQLBIND_HPP_ +#define _SQL_SQLBIND_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _SQL_SQLDATA_HPP_ +#include +#endif + +class SQLBind +{ +public: + SQLBind(void); + virtual ~SQLBind(); + virtual WORD getColumnData(Block &someSQLData)=0; +private: + SQLBind(const SQLBind &someSQLBind); + SQLBind &operator=(const SQLBind &someSQLBind); +}; + +inline +SQLBind::SQLBind(void) +{ +} + +inline +SQLBind::SQLBind(const SQLBind &/*someSQLBind*/) +{ // operation is undefined for this class +} + +inline +SQLBind::~SQLBind() +{ +} + +inline +SQLBind &SQLBind::operator=(const SQLBind &/*someSQLBind*/) +{ // operation is undefined for this class + return *this; +} + +inline +WORD SQLBind::getColumnData(Block &someSQLData) +{ + someSQLData.remove(); + return FALSE; +} +#endif + diff --git a/sql/SQLDATA.CPP b/sql/SQLDATA.CPP new file mode 100644 index 0000000..307b535 --- /dev/null +++ b/sql/SQLDATA.CPP @@ -0,0 +1,50 @@ +#include + +SQLString SQLData::toString(void) +{ + SQLString stringData; + + if(!mSqlData.isOkay())return stringData; + switch(type()) + { + case SQLDataBit : + case SQLDataVarChar : + case SQLDataLongVarChar : + case SQLDataCChar : + return (char*)(BYTE*)mSqlData; + case SQLDataCLong : + case SQLDataBigInt : + case SQLDataLongVarBinary : + ::sprintf(stringData,"%ld",*((long*)(BYTE*)mSqlData)); + return stringData; + case SQLDataCShort : + case SQLDataTinyInt : + ::sprintf(stringData,"%d",*((short*)(BYTE*)mSqlData)); + return stringData; + case SQLDataCFloat : + case SQLDataFloat : + ::sprintf(stringData,"%lf",*((float*)(BYTE*)mSqlData)); + return stringData; + case SQLDataCDouble : + ::sprintf(stringData,"%lf",*((double*)(BYTE*)mSqlData)); + return stringData; + case SQLDataTimeStamp : + handleTimeStamp(stringData); + break; + case SQLDataDate : + case SQLDataTime : + case SQLDataBinary : + case SQLDataDecimal : + case SQLDataNumeric : + case SQLDataVarBinary : + break; + } + return stringData; +} + +void SQLData::handleTimeStamp(String &stringData) +{ + TIMESTAMP_STRUCT *pTimeStamp=(TIMESTAMP_STRUCT*)(BYTE*)mSqlData; + ::sprintf(stringData,"%04d-%02d-%02d %02d:%02d:%02d.%09d", + pTimeStamp->year,pTimeStamp->month,pTimeStamp->day,pTimeStamp->hour,pTimeStamp->minute,pTimeStamp->second,pTimeStamp->fraction); +} diff --git a/sql/SQLDATA.HPP b/sql/SQLDATA.HPP new file mode 100644 index 0000000..7113478 --- /dev/null +++ b/sql/SQLDATA.HPP @@ -0,0 +1,215 @@ +#ifndef _SQL_SQLDATA_HPP_ +#define _SQL_SQLDATA_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SQL_SQLSTRING_HPP_ +#include +#endif +#ifndef _SQL_SQL_HPP_ +#include +#endif + +class SQLData +{ +public: + enum DataType{SQLDataCChar=SQL_C_CHAR, + SQLDataCLong=SQL_C_LONG, + SQLDataCShort=SQL_C_SHORT, + SQLDataCFloat=SQL_C_FLOAT, + SQLDataCDouble=SQL_C_DOUBLE, + SQLDataDate=SQL_DATE, + SQLDataTime=SQL_TIME, + SQLDataTimeStamp=SQL_TIMESTAMP, + SQLDataLongVarChar=SQL_LONGVARCHAR, + SQLDataBigInt=SQL_BIGINT, + SQLDataBinary=SQL_BINARY, + SQLDataBit=SQL_BIT, + SQLDataChar=SQL_CHAR, + SQLDataDecimal=SQL_DECIMAL, + SQLDataDouble=SQL_DOUBLE, + SQLDataFloat=SQL_FLOAT, + SQLDataInteger=SQL_INTEGER, + SQLDataLongVarBinary=SQL_LONGVARBINARY, + SQLDataNumeric=SQL_NUMERIC, + SQLDataReal=SQL_REAL, + SQLDataSmallInt=SQL_SMALLINT, + SQLTimeStamp=SQL_TIMESTAMP, + SQLDataTinyInt=SQL_TINYINT, + SQLDataVarBinary=SQL_VARBINARY, + SQLDataVarChar=SQL_VARCHAR}; + enum Disposition{Assume,Delete}; + SQLData(void); + SQLData(DWORD sizeData,DataType typeData); + SQLData(SmartPointer &sqlData,DWORD sizeData,DataType typeData); + SQLData(const SQLData &somePureData); + virtual ~SQLData(); + WORD operator==(const SQLData &someSQLData)const; + SQLData &operator=(const SQLData &someSQLData); + DWORD size(void)const; + void size(DWORD sizeData); + void type(DataType typeData); + DataType type(void)const; + const String &name(void)const; + void name(const String &name); + LONG *resultLength(void); + SmartPointer &sqlData(void); + void sqlData(const SmartPointer &sqlData); + SQLString toString(void); + int toInt(void); + bool toBool(void); + float toFloat(void); + double toDouble(void); +private: + void handleTimeStamp(String &stringData); + + SmartPointer mSqlData; + DWORD mSizeData; + DataType mDataType; + LONG mResultLength; + String mNameData; +}; + +inline +SQLData::SQLData(void) +: mSizeData(0), mDataType(SQLDataChar), mResultLength(0) +{ +} + +inline +SQLData::SQLData(DWORD sizeData,DataType typeData) +: mSizeData(sizeData), mDataType(typeData), mResultLength(0) +{ + mSqlData=new BYTE[sizeData]; + ::memset((BYTE*)mSqlData,0,sizeData); + mSqlData.disposition(PointerDisposition::Delete); +} + +inline +SQLData::SQLData(SmartPointer &sqlData,DWORD sizeData,DataType typeData) +: mResultLength(0) +{ + mSqlData=sqlData; + size(sizeData); + type(typeData); +} + +inline +SQLData::SQLData(const SQLData &someSQLData) +: mSizeData(someSQLData.mSizeData), mDataType(someSQLData.mDataType), mResultLength(someSQLData.mResultLength) +{ + *this=someSQLData; +} + +inline +SQLData::~SQLData() +{ +} + +inline +WORD SQLData::operator==(const SQLData &someSQLData)const +{ + return FALSE; +} + +inline +SQLData &SQLData::operator=(const SQLData &someSQLData) +{ + size(someSQLData.size()); + type(someSQLData.type()); + sqlData(((SQLData&)someSQLData).sqlData()); + name(someSQLData.name()); + return *this; +} + +inline +DWORD SQLData::size()const +{ + return mSizeData; +} + +inline +void SQLData::size(DWORD size) +{ + mSizeData=size; +} + +inline +SQLData::DataType SQLData::type(void)const +{ + return mDataType; +} + +inline +void SQLData::type(DataType type) +{ + mDataType=type; +} + +inline +const String &SQLData::name(void)const +{ + return mNameData; +} + +inline +void SQLData::name(const String &name) +{ + mNameData=name; +} + +inline +LONG *SQLData::resultLength(void) +{ + return &mResultLength; +} + +inline +SmartPointer &SQLData::sqlData(void) +{ + return mSqlData; +} + +inline +void SQLData::sqlData(const SmartPointer &sqlData) +{ + mSqlData=sqlData; +} + +inline +bool SQLData::toBool(void) +{ + if(!mSqlData.isOkay())return false; + return *((BYTE*)mSqlData)&0x01; +} + +inline +int SQLData::toInt(void) +{ + if(!mSqlData.isOkay())return 0; + return *((int*)(BYTE*)mSqlData); +} + +inline +float SQLData::toFloat(void) +{ + if(!mSqlData.isOkay())return 0.00; + return *((float*)(BYTE*)mSqlData); +} + +inline +double SQLData::toDouble(void) +{ + if(!mSqlData.isOkay())return 0.00; + return *((double*)(BYTE*)mSqlData); +} +#endif \ No newline at end of file diff --git a/sql/SQLDB.CPP b/sql/SQLDB.CPP new file mode 100644 index 0000000..ea5f24f --- /dev/null +++ b/sql/SQLDB.CPP @@ -0,0 +1,81 @@ +#include +#include + +SQLDb::SQLDb(const String &nameData,const String &userID,const String &password) +: mhEnvironment(0), mhConnection(0), mIsOkay(FALSE), mNameData(nameData), mUserID(userID), + mPassword(password), mDisposition(InvalidDB) +{ + if(mPassword.isNull())mPassword=" "; + open(); +} + +SQLDb::~SQLDb() +{ + close(); +} + +SQLDb &SQLDb::operator=(const SQLDb &someSQLDb) +{ + close(); + mhEnvironment=someSQLDb.mhEnvironment; + mhConnection=someSQLDb.mhConnection; + mNameData=someSQLDb.mNameData; + mUserID=someSQLDb.mUserID; + mPassword=someSQLDb.mPassword; + mIsOkay=someSQLDb.mIsOkay; + mDisposition=AssumeDB; + return *this; +} + +WORD SQLDb::open(const String &nameData,const String &userID,const String &password) +{ + close(); + mNameData=nameData; + mUserID=userID; + mPassword=password; + return open(); +} + +WORD SQLDb::open(void) +{ + RETCODE sqlReturn; + close(); + if(SQL_SUCCESS!=::SQLAllocEnv((HENV*)&mhEnvironment))return FALSE; + if(SQL_SUCCESS!=::SQLAllocConnect(mhEnvironment,(HDBC*)&mhConnection)){::SQLFreeEnv(mhEnvironment);return FALSE;} + sqlReturn=::SQLConnect(mhConnection,(unsigned char*)((char*)mNameData),SQL_NTS,(unsigned char*)((char*)mUserID),SQL_NTS,(unsigned char*)((char*)mPassword),SQL_NTS); + if(SQL_SUCCESS!=sqlReturn&&SQL_SUCCESS_WITH_INFO!=sqlReturn) + { + sqlReturn=::SQLConnect(mhConnection,(unsigned char*)((char*)mNameData),SQL_NTS,(unsigned char*)((char*)mUserID),SQL_NTS,(unsigned char*)((char*)mPassword),SQL_NTS); + if(SQL_SUCCESS!=sqlReturn&&SQL_SUCCESS_WITH_INFO!=sqlReturn) + { + ::SQLFreeConnect(&mhConnection); + ::SQLFreeEnv(mhEnvironment); + return FALSE; + } + } + mDisposition=CloseDB; + return (mIsOkay=TRUE); +} + +WORD SQLDb::close(void) +{ + if(!mIsOkay)return FALSE; + if(CloseDB==mDisposition) + { + __try{if(mhConnection){::SQLDisconnect(mhConnection);::SQLFreeConnect(mhConnection);mhConnection=0;}} + __except(0,EXCEPTION_EXECUTE_HANDLER){mIsOkay=FALSE;mDisposition=InvalidDB;return FALSE;} + } + mIsOkay=FALSE; + mDisposition=InvalidDB; + return TRUE; +} + +WORD SQLDb::transact(TransactType transactType) +{ + RETCODE sqlReturn; + + if(!isOkay())return FALSE; + sqlReturn=::SQLTransact(mhEnvironment,mhConnection,(UINT)transactType); + if(SQL_SUCCESS!=sqlReturn||SQL_SUCCESS_WITH_INFO!=sqlReturn)return FALSE; + return TRUE; +} diff --git a/sql/SQLDB.HPP b/sql/SQLDB.HPP new file mode 100644 index 0000000..85a2ccb --- /dev/null +++ b/sql/SQLDB.HPP @@ -0,0 +1,106 @@ +#ifndef _SQL_SQLDB_HPP_ +#define _SQL_SQLDB_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SQL_HDBC_HPP_ +#include +#endif +#ifndef _SQL_HENV_HPP_ +#include +#endif + +class SQLDb +{ +public: + enum TransactType{TransactCommit=SQL_COMMIT,TransactRollback=SQL_ROLLBACK}; + SQLDb(void); + SQLDb(const String &nameData,const String &userID,const String &password); + SQLDb(HENV hEnvironment,HDBC hConnection); + SQLDb(const SQLDb &someSQLDb); + virtual ~SQLDb(); + SQLDb &operator=(const SQLDb &someSQLDb); + operator HandleDatabase(void)const; + operator HandleEnvironment(void)const; + WORD open(const String &nameData,const String &userID,const String &password); + WORD transact(TransactType transactType); + WORD close(void); + WORD isOkay(void)const; + WORD isAssigned(void)const; + String nameData(void)const; + String userID(void)const; + String password(void)const; +private: + enum Disposition{AssumeDB,CloseDB,InvalidDB}; + WORD open(void); + Disposition mDisposition; + HandleEnvironment mhEnvironment; + HandleDatabase mhConnection; + WORD mIsOkay; + String mNameData; + String mUserID; + String mPassword; +}; + +inline +SQLDb::SQLDb(void) +: mDisposition(InvalidDB), mhEnvironment(0), mhConnection(0), mIsOkay(FALSE), + mNameData("UNSET"), mUserID("UNSET"), mPassword("UNSET") +{ +} + +inline +SQLDb::SQLDb(HENV hEnvironment,HDBC hConnection) +: mhEnvironment(hEnvironment), mhConnection(hConnection), mDisposition(AssumeDB), + mIsOkay(TRUE), mNameData("UNSET"), mUserID("UNSET"), mPassword("UNSET") +{ +} + +inline +SQLDb::SQLDb(const SQLDb &someSQLDb) +{ + *this=someSQLDb; +} + +inline +SQLDb::operator HandleDatabase(void)const +{ + return mhConnection; +} + +inline +SQLDb::operator HandleEnvironment(void)const +{ + return mhEnvironment; +} + +inline +WORD SQLDb::isAssigned(void)const +{ + return (AssumeDB==mDisposition); +} + +inline +WORD SQLDb::isOkay(void)const +{ + return mIsOkay; +} + +inline +String SQLDb::nameData(void)const +{ + return mNameData; +} + +inline +String SQLDb::userID(void)const +{ + return mUserID; +} + +inline +String SQLDb::password(void)const +{ + return mPassword; +} +#endif diff --git a/sql/SQLDBND.HPP b/sql/SQLDBND.HPP new file mode 100644 index 0000000..3e98dfe --- /dev/null +++ b/sql/SQLDBND.HPP @@ -0,0 +1,12 @@ +#ifndef _SQL_SQLDYNAMICBIND_HPP_ +#define _SQL_SQLDYNAMICBIND_HPP_ +#ifndef _SQL_SQLDATA_HPP_ +#include +#endif + +class SQLDynamicBind : public Block +{ +public: +private: +}; +#endif \ No newline at end of file diff --git a/sql/SQLDSN.HPP b/sql/SQLDSN.HPP new file mode 100644 index 0000000..6fa9e07 --- /dev/null +++ b/sql/SQLDSN.HPP @@ -0,0 +1,61 @@ +#ifndef _SQL_DATASOURCE_HPP_ +#define _SQL_DATASOURCE_HPP_ +#ifndef _SQL_DATAITEM_HPP_ +#include +#endif + +class DataSource +{ +public: + enum Fetch{First=SQL_FETCH_FIRST,Next=SQL_FETCH_NEXT}; + DataSource(HandleEnvironment &handleEnvironment); + virtual ~DataSource(); + WORD sourceFirst(DataItem &someDataItem); + WORD sourceNext(DataItem &someDataItem); +private: + WORD sourceName(DataItem &someDataItem,Fetch sourceFetch); + HandleEnvironment &mhEnvironment; +}; + +inline +DataSource::DataSource(HandleEnvironment &handleEnvironment) +: mhEnvironment(handleEnvironment) +{ +} + +inline +DataSource::~DataSource() +{ +} + +inline +WORD DataSource::sourceFirst(DataItem &someDataItem) +{ + return sourceName(someDataItem,First); +} + +inline +WORD DataSource::sourceNext(DataItem &someDataItem) +{ + return sourceName(someDataItem,Next); +} + +inline +WORD DataSource::sourceName(DataItem &someDataItem,Fetch sourceFetch) +{ + RETCODE sqlReturn; + UCHAR sourceName[SQL_MAX_DSN_LENGTH+1]; + UCHAR sourceDescription[1024]; + SWORD cbNameLength(sizeof(sourceName)); + SWORD cbDescriptionLength(sizeof(sourceDescription)); + SWORD outNameLength; + SWORD outDescriptionLength; + + sqlReturn=::SQLDataSources(mhEnvironment,sourceFetch,sourceName,cbNameLength,&outNameLength,sourceDescription,cbDescriptionLength,&outDescriptionLength); + if(sqlReturn!=SQL_SUCCESS&&sqlReturn!=SQL_SUCCESS_WITH_INFO)return TRUE; + someDataItem.sourceName((char*)sourceName); + someDataItem.sourceDescription((char*)sourceDescription); + return FALSE; +} +#endif + diff --git a/sql/SQLERROR.HPP b/sql/SQLERROR.HPP new file mode 100644 index 0000000..7b1951f --- /dev/null +++ b/sql/SQLERROR.HPP @@ -0,0 +1,63 @@ +#ifndef _SQL_ERROR_HPP_ +#define _SQL_ERROR_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _SQL_SQLSTATEMENT_HPP_ +#include +#endif + +class SQLErr +{ +public: + SQLErr(void); + virtual ~SQLErr(); + void sqlErr(const SQLStatement &sqlStatement); + void sqlErr(const SQLStatement &sqlStatement,String &strResult); + void sqlErr(void); +private: + enum {MaxErrorLength=512}; +}; + +inline +SQLErr::SQLErr(void) +{ +} + +inline +SQLErr::~SQLErr() +{ +} + +inline +void SQLErr::sqlErr(const SQLStatement &sqlStatement) +{ + String sqlMessageString; + SWORD outlen; + + sqlMessageString.reserve(MaxErrorLength+1); + ::SQLError(0,0,(SQLStatement&)sqlStatement,0,0,(UCHAR*)(LPSTR)sqlMessageString,MaxErrorLength,&outlen); + ::MessageBox(::GetFocus(),(LPSTR)sqlMessageString,(LPSTR)"SQLERROR",MB_OK); +} + +inline +void SQLErr::sqlErr(const SQLStatement &sqlStatement,String &strResult) +{ + SWORD outlen; + + strResult.reserve(MaxErrorLength+1); + ::SQLError(0,0,(SQLStatement&)sqlStatement,0,0,(UCHAR*)(LPSTR)strResult,MaxErrorLength,&outlen); +} + +inline +void SQLErr::sqlErr(void) +{ + String sqlMessageString; + String sqlState; + SWORD outlen; + + sqlMessageString.reserve(MaxErrorLength+1); + ::SQLError(0,0,0,(UCHAR*)(LPSTR)sqlState,0,(UCHAR*)(LPSTR)sqlMessageString,MaxErrorLength,&outlen); + ::MessageBox(::GetFocus(),(LPSTR)sqlState,(LPSTR)"SQLERROR",MB_OK); +} +#endif diff --git a/sql/SQLFloat.hpp b/sql/SQLFloat.hpp new file mode 100644 index 0000000..8aeb225 --- /dev/null +++ b/sql/SQLFloat.hpp @@ -0,0 +1,107 @@ +#ifndef _SQL_SQLFLOAT_HPP_ +#define _SQL_SQLFLOAT_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _SQL_SQLSTRING_HPP_ +#include +#endif + +class SQLFloat +{ +public: + SQLFloat(void); + SQLFloat(float someFloat); + SQLFloat &operator=(float value); + bool operator==(const SQLFloat &someSQLFloat)const; + bool operator<(const SQLFloat &someSQLFloat)const; + bool operator>(const SQLFloat &someSQLFloat)const; + SQLFloat operator*(const SQLFloat &someSQLFloat)const; + SQLFloat operator/(const SQLFloat &someSQLFloat)const; + SQLFloat operator+(const SQLFloat &someSQLFloat)const; + float getValue(void)const; + void setValue(float value); + SQLString toString(void)const; +private: + float mData; +}; + +inline +SQLFloat::SQLFloat(void) +: mData(0.00) +{ +} + +inline +SQLFloat::SQLFloat(float someFloat) +: mData(someFloat) +{ +} + +inline +SQLFloat &SQLFloat::operator=(float value) +{ + mData=value; + return *this; +} + +inline +bool SQLFloat::operator==(const SQLFloat &someSQLFloat)const +{ + return getValue()==someSQLFloat.getValue(); +} + +inline +bool SQLFloat::operator<(const SQLFloat &someSQLFloat)const +{ + return mData(const SQLFloat &someSQLFloat)const +{ + return mData>someSQLFloat.mData; +} + +inline +SQLFloat SQLFloat::operator*(const SQLFloat &someSQLFloat)const +{ + return getValue()*someSQLFloat.getValue(); +} + +inline +SQLFloat SQLFloat::operator/(const SQLFloat &someSQLFloat)const +{ + if(0.00==someSQLFloat.getValue())return 0.00; + return getValue()/someSQLFloat.getValue(); +} + +inline +SQLFloat SQLFloat::operator+(const SQLFloat &someSQLFloat)const +{ + return getValue()+someSQLFloat.getValue(); +} + +inline +float SQLFloat::getValue(void)const +{ + return mData; +} + +inline +void SQLFloat::setValue(float value) +{ + mData=value; +} + +inline +SQLString SQLFloat::toString(void)const +{ + SQLString strString; + ::sprintf(strString,"%lf",mData); + return strString; +} +#endif \ No newline at end of file diff --git a/sql/SQLSTMT.CPP b/sql/SQLSTMT.CPP new file mode 100644 index 0000000..b00689c --- /dev/null +++ b/sql/SQLSTMT.CPP @@ -0,0 +1,163 @@ +#include +#include +#include +#include + +SQLStatement::SQLStatement(void) +: mIsOkay(FALSE), mhStatement(FALSE) +{ +} + +SQLStatement::SQLStatement(SQLDb &someSQLDb,SQLBind &sqlBind) +: mIsOkay(FALSE), mhStatement(FALSE), mSQLDb(someSQLDb) +{ + sqlBind.getColumnData(mSQLColumnData); + open(); +} + +SQLStatement::SQLStatement(SQLDb &someSQLDb) +: mIsOkay(FALSE), mhStatement(FALSE), mSQLDb(someSQLDb) +{ + open(); +} + +SQLStatement::~SQLStatement() +{ + close(); +} + +SQLStatement &SQLStatement::operator=(const SQLDb &someSQLDb) +{ + close(); + mSQLDb=someSQLDb; + open(); + return *this; +} + +BOOL SQLStatement::executeDirect(const String &sqlStatementString) +{ + RETCODE sqlReturn; + + if(!isOkay())return FALSE; + sqlReturn=SQLExecDirect(mhStatement,(UCHAR*)(LPSTR)(String&)sqlStatementString,SQL_NTS); + if(SQL_SUCCESS!=sqlReturn&&SQL_SUCCESS_WITH_INFO!=sqlReturn) + {SQLErr sqlError;sqlError.sqlErr(*this);return FALSE;} + for(int index=0;index +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_ASSERT_HPP_ +#include +#endif +#ifndef _SQL_SQLDATA_HPP_ +#include +#endif +#ifndef _SQL_SQLDB_HPP_ +#include +#endif +#ifndef _SQL_SQL_HPP_ +#include +#endif + +class SQLBind; + +class SQLStatement +{ +friend class SQLErr; +public: + class SQLColumnNotFound{}; + SQLStatement(void); + SQLStatement(SQLDb &someSQLDb,SQLBind &sqlBind); + SQLStatement(SQLDb &someSQLDb); + virtual ~SQLStatement(); + SQLStatement &operator=(const SQLDb &someSQLDb); + SQLData &operator[](int colIndex); + SQLData &operator[](const String &strNameData); + DWORD size(void)const; + BOOL executeDirect(const String &sqlStatementString); + BOOL executeDirect(const String &sqlStatementString,String &strResult); + BOOL call(const String &procName); + WORD sqlResults(void); + WORD tables(String database,String owner,String name,String type); + WORD tables(void); + void close(void); + WORD open(void); + WORD commit(void); + WORD fetch(bool silent=false)const; + WORD cancel(void)const; + int rowCount(void)const; + WORD isOkay(void)const; +private: + enum {MaxColName=255,MaxImageLength=768000}; + operator HSTMT(void)const; + WORD mIsOkay; + HSTMT mhStatement; + Block mSQLColumnData; + SQLDb mSQLDb; +}; + +inline +SQLData &SQLStatement::operator[](int colIndex) +{ + assert(colIndex + +class SQLMessage : public ThreadMessage +{ +public: + SQLMessage(void); + virtual ~SQLMessage(); + DWORD &operator[](int indexData); +private: + enum {SQLDataElements=4}; + DWORD mSQLDataArray[SQLDataElements]; +}; + +SQLMessage::SQLMessage(void) +{ +} + +SQLMessage::~SQLMessage() +{ +} + +DWORD &SQLMessage::operator[](int indexData) +{ + return mSQLDataArray[indexData] +} + +DWORD SQLThread::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + break; + } +} + +BOOL SQLThread::open(const String &nameData,const String &userID,const String &password) +{ +} + +BOOL SQLThread::openHandler(void) +{ +} + + + diff --git a/sql/SQLTHRD.HPP b/sql/SQLTHRD.HPP new file mode 100644 index 0000000..5068a09 --- /dev/null +++ b/sql/SQLTHRD.HPP @@ -0,0 +1,65 @@ +#ifndef _SQL_SQLTHREAD_HPP_ +#define _SQL_SQLTHREAD_HPP_ +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#include +#endif + +template +class PureVector; +template +class SmartPointer; +class ThreadCallbackPointer; +class SQLDb; + +class SQLThread : public MessageThread +{ +public: + enum Mode{Sync,Async}; + SQLThread(void); + virtual ~SQLThread(); + BOOL open(const String &nameData,const String &userID,const String &password); + void insertHandler(ThreadCallbackPointer pThreadCallback); + void removeHandler(void); +private: + SQLThread(const SQLThread &someSQLThread); + SQLThread &operator=(const SQLThread &someSQLThread); + DWORD threadHandler(ThreadMessage &someThreadMessage); + + ThreadCallback mThreadHandler; + ThreadCallbackPointer mEventHandler; + SmartPointer mSQLDb; +}; + +inline +SQLThread::SQLThread(void) +: mThreadHandler(this,&SQLThread::threadHandler), mlpSQLDb(0) +{ +} + +inline +SQLThread::~SQLThread() +{ +} + +inline +SQLThread(const SQLThread &someSQLThread) +{ // private implementation +} + +inline +SQLThread &operator=(const SQLThread &someSQLThread) +{ // private implementation +} + +inline +void SQLThread::insertHandler(ThreadCallbackPointer pThreadCallback) +{ + mEventHandler=pThreadCallback; +} + +inline +void SQLThread::removeHandler(void) +{ + mEventHandler=ThreadCallbackPointer(); +} +#endif \ No newline at end of file diff --git a/sql/money.hpp b/sql/money.hpp new file mode 100644 index 0000000..800994d --- /dev/null +++ b/sql/money.hpp @@ -0,0 +1,112 @@ +#ifndef _SQL_MONEY_HPP_ +#define _SQL_MONEY_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_STDIO_HPP_ +#include +#endif + +class Money +{ +public: + Money(void); + Money(double value); + Money(const Money &someMoney); + virtual ~Money(); + Money &operator=(const Money &someMoney); + operator String(void); + void format(const String &strFormat); + const String &format(void)const; + double value(void)const; + void value(double value); + String toString(void)const; +private: + double mValue; + String mFormat; +}; + + +inline +Money::Money(void) +: mValue(0.00), mFormat("% 12.2lf") +{ +} + +inline +Money::Money(double value) +: mValue(value), mFormat("% 12.2lf") +{ +} + +inline +Money::Money(const Money &someMoney) +{ + *this=someMoney; +} + +inline +Money::~Money() +{ +} + +inline +Money &Money::operator=(const Money &someMoney) +{ + format(someMoney.format()); + value(someMoney.value()); + return *this; +} + +inline +Money::operator String(void) +{ + return toString(); +} + +inline +String Money::toString(void)const +{ + String strString; + String moneyString; + + ::sprintf(strString,mFormat,mValue); + char *strPtr=strString; + char *strRoot=strPtr; + while(*strPtr!='.')strPtr++; + while(TRUE) + { + for(int count=0;count<3&&strPtr>strRoot&&*strPtr!=' ';count++)strPtr--; + if(strPtr<=strRoot)break; + moneyString.insert(strPtr); + if(*(strPtr-1)!=' ')moneyString.insert(","); + *strPtr=0; + } + moneyString.insert("$"); + return moneyString; +} + +inline +void Money::format(const String &strFormat) +{ + mFormat=strFormat; +} + +inline +const String &Money::format(void)const +{ + return mFormat; +} + +inline +double Money::value(void)const +{ + return mValue; +} + +inline +void Money::value(double value) +{ + mValue=value; +} +#endif diff --git a/sql/sql.001 b/sql/sql.001 new file mode 100644 index 0000000..9fdc2e1 --- /dev/null +++ b/sql/sql.001 @@ -0,0 +1,134 @@ +# Microsoft Developer Studio Project File - Name="sql" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=sql - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sql.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sql.mak" CFG="sql - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sql - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "sql - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "sql - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mssql.lib" + +!ENDIF + +# Begin Target + +# Name "sql - Win32 Release" +# Name "sql - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\sqldata.cpp +# End Source File +# Begin Source File + +SOURCE=.\SQLDB.CPP +# End Source File +# Begin Source File + +SOURCE=.\SQLSTMT.CPP +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Hdbc.hpp +# End Source File +# Begin Source File + +SOURCE=.\Henv.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sql.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqlbind.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqldata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqldb.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqlerror.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqlstmt.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/sql/sql.dsp b/sql/sql.dsp new file mode 100644 index 0000000..fd9b27d --- /dev/null +++ b/sql/sql.dsp @@ -0,0 +1,140 @@ +# Microsoft Developer Studio Project File - Name="sql" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=sql - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sql.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sql.mak" CFG="sql - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sql - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "sql - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sql - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MTd /GX /Zi /Od /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mssql.lib" + +!ENDIF + +# Begin Target + +# Name "sql - Win32 Release" +# Name "sql - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\sqldata.cpp +# End Source File +# Begin Source File + +SOURCE=.\SQLDB.CPP +# End Source File +# Begin Source File + +SOURCE=.\SQLSTMT.CPP +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Hdbc.hpp +# End Source File +# Begin Source File + +SOURCE=.\Henv.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sql.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqlbind.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqldata.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqldb.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqlerror.hpp +# End Source File +# Begin Source File + +SOURCE=.\Sqlstmt.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/sql/sql.dsw b/sql/sql.dsw new file mode 100644 index 0000000..87b5b32 --- /dev/null +++ b/sql/sql.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "sql"=.\sql.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/sql/sql.mak b/sql/sql.mak new file mode 100644 index 0000000..69555aa --- /dev/null +++ b/sql/sql.mak @@ -0,0 +1,338 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on sql.dsp +!IF "$(CFG)" == "" +CFG=sql - Win32 Release +!MESSAGE No configuration specified. Defaulting to sql - Win32 Release. +!ENDIF + +!IF "$(CFG)" != "sql - Win32 Release" && "$(CFG)" != "sql - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sql.mak" CFG="sql - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sql - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "sql - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(CFG)" == "sql - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\sql.lib" + +!ELSE + +ALL : "$(OUTDIR)\sql.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\sqldata.obj" + -@erase "$(INTDIR)\SQLDB.OBJ" + -@erase "$(INTDIR)\SQLSTMT.OBJ" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\sql.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\sql.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\sql.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\sql.lib" +LIB32_OBJS= \ + "$(INTDIR)\sqldata.obj" \ + "$(INTDIR)\SQLDB.OBJ" \ + "$(INTDIR)\SQLSTMT.OBJ" + +"$(OUTDIR)\sql.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +!IF "$(RECURSE)" == "0" + +ALL : "..\exe\mssql.lib" + +!ELSE + +ALL : "..\exe\mssql.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\sqldata.obj" + -@erase "$(INTDIR)\SQLDB.OBJ" + -@erase "$(INTDIR)\SQLSTMT.OBJ" + -@erase "$(INTDIR)\vc50.idb" + -@erase "..\exe\mssql.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\sql.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"..\exe\mssql.lib" +LIB32_OBJS= \ + "$(INTDIR)\sqldata.obj" \ + "$(INTDIR)\SQLDB.OBJ" \ + "$(INTDIR)\SQLSTMT.OBJ" + +"..\exe\mssql.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + + +!IF "$(CFG)" == "sql - Win32 Release" || "$(CFG)" == "sql - Win32 Debug" +SOURCE=.\sqldata.cpp + +!IF "$(CFG)" == "sql - Win32 Release" + +DEP_CPP_SQLDA=\ + ".\Sql.hpp"\ + ".\Sqldata.hpp"\ + ".\sqlstring.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\sqldata.obj" : $(SOURCE) $(DEP_CPP_SQLDA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +DEP_CPP_SQLDA=\ + ".\Sql.hpp"\ + ".\Sqldata.hpp"\ + ".\sqlstring.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\sqldata.obj" : $(SOURCE) $(DEP_CPP_SQLDA) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\SQLDB.CPP + +!IF "$(CFG)" == "sql - Win32 Release" + +DEP_CPP_SQLDB=\ + ".\Hdbc.hpp"\ + ".\Henv.hpp"\ + ".\Sql.hpp"\ + ".\Sqldata.hpp"\ + ".\Sqldb.hpp"\ + ".\Sqlerror.hpp"\ + ".\Sqlstmt.hpp"\ + ".\sqlstring.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\SQLDB.OBJ" : $(SOURCE) $(DEP_CPP_SQLDB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +DEP_CPP_SQLDB=\ + ".\Hdbc.hpp"\ + ".\Henv.hpp"\ + ".\Sql.hpp"\ + ".\Sqldata.hpp"\ + ".\Sqldb.hpp"\ + ".\Sqlerror.hpp"\ + ".\Sqlstmt.hpp"\ + ".\sqlstring.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\SQLDB.OBJ" : $(SOURCE) $(DEP_CPP_SQLDB) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\SQLSTMT.CPP + +!IF "$(CFG)" == "sql - Win32 Release" + +DEP_CPP_SQLST=\ + ".\Hdbc.hpp"\ + ".\Henv.hpp"\ + ".\Sql.hpp"\ + ".\Sqlbind.hpp"\ + ".\Sqldata.hpp"\ + ".\Sqldb.hpp"\ + ".\Sqlerror.hpp"\ + ".\Sqlstmt.hpp"\ + ".\sqlstring.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\SQLSTMT.OBJ" : $(SOURCE) $(DEP_CPP_SQLST) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "sql - Win32 Debug" + +DEP_CPP_SQLST=\ + ".\Hdbc.hpp"\ + ".\Henv.hpp"\ + ".\Sql.hpp"\ + ".\Sqlbind.hpp"\ + ".\Sqldata.hpp"\ + ".\Sqldb.hpp"\ + ".\Sqlerror.hpp"\ + ".\Sqlstmt.hpp"\ + ".\sqlstring.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\SQLSTMT.OBJ" : $(SOURCE) $(DEP_CPP_SQLST) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/sql/sql.mdp b/sql/sql.mdp new file mode 100644 index 0000000..882aa86 Binary files /dev/null and b/sql/sql.mdp differ diff --git a/sql/sqlbool.hpp b/sql/sqlbool.hpp new file mode 100644 index 0000000..93079ca --- /dev/null +++ b/sql/sqlbool.hpp @@ -0,0 +1,80 @@ +#ifndef _SQL_SQLBOOL_HPP_ +#define _SQL_SQLBOOL_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class SQLBool +{ +public: + SQLBool(void); + SQLBool(const SQLBool &sqlBool); + SQLBool(bool value); + SQLBool &operator=(const SQLBool &sqlBool); + SQLBool &operator=(bool value); + operator String(void)const; + bool getValue(void)const; + void setValue(bool value); + String toString(void)const; +private: + bool mValue; +}; + +inline +SQLBool::SQLBool(void) +: mValue(false) +{ +} + +inline +SQLBool::SQLBool(const SQLBool &sqlBool) +: mValue(sqlBool.mValue) +{ +} + +inline +SQLBool::SQLBool(bool value) +: mValue(value) +{ +} + +inline +SQLBool &SQLBool::operator=(const SQLBool &sqlBool) +{ + mValue=sqlBool.mValue; + return *this; +} + +inline +SQLBool &SQLBool::operator=(bool value) +{ + mValue=value; + return *this; +} + +inline +SQLBool::operator String(void)const +{ + return toString(); +} + +inline +bool SQLBool::getValue(void)const +{ + return mValue; +} + +inline +void SQLBool::setValue(bool value) +{ + mValue=value; +} + +inline +String SQLBool::toString(void)const +{ + String strString; + ::sprintf(strString,"%d",int(mValue)); + return strString; +} +#endif diff --git a/sql/sqldate.hpp b/sql/sqldate.hpp new file mode 100644 index 0000000..faca08a --- /dev/null +++ b/sql/sqldate.hpp @@ -0,0 +1,114 @@ +#ifndef _SQL_SQLDATE_HPP_ +#define _SQL_SQLDATE_HPP_ +#ifndef _SQL_SQLSTRING_HPP_ +#include +#endif +#ifndef _COMMON_SDATE_HPP_ +#include +#endif +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif + +class SQLDate : public SDate +{ +public: + SQLDate(void); + SQLDate(const SQLDate &someDate); + SQLDate(const SDate &someDate); + SQLDate(const String &sqlDateString); + SQLDate(const SystemTime &systemTime); + virtual ~SQLDate(); + SQLDate &operator=(const SQLDate &someDate); + SQLDate &operator=(const SDate &someDate); + SQLDate &operator=(const String &sqlDateString); + SQLDate &operator=(const SystemTime &systemTime); + SQLString toString()const; + void fromString(const SQLString &sqlDateString); +private: +}; + +inline +SQLDate::SQLDate(void) +{ +} + +inline +SQLDate::SQLDate(const SQLDate &someDate) +{ + *this=someDate; +} + +inline +SQLDate::SQLDate(const SDate &someDate) +{ + *this=someDate; +} + +inline +SQLDate::SQLDate(const SystemTime &systemTime) +{ + *this=systemTime; +} + +inline +SQLDate::SQLDate(const String &sqlDateString) +{ + fromString(sqlDateString); +} + +inline +SQLDate::~SQLDate() +{ +} + +inline +SQLDate &SQLDate::operator=(const SQLDate &someDate) +{ + *this=(SDate&)someDate; + return *this; +} + +inline +SQLDate &SQLDate::operator=(const SDate &someDate) +{ + (SDate&)*this=someDate; + return *this; +} + +inline +SQLDate &SQLDate::operator=(const SystemTime &systemTime) +{ + day(systemTime.day()); + month(systemTime.month()); + year(systemTime.year()); + return *this; +} + +inline +SQLDate &SQLDate::operator=(const String &sqlDateString) +{ + fromString(sqlDateString); + return *this; +} + +inline +SQLString SQLDate::toString()const +{ + SQLString sqlDateString; + ::sprintf(sqlDateString,"%04d-%02d-%02d 00:00:00.0",year()?year():1900,month()?month():1,day()?day():1); + return sqlDateString; +} + +inline +void SQLDate::fromString(const SQLString &sqlDateString) +{ + if(sqlDateString.isNull())return; + year(::atoi(sqlDateString.betweenString(0,'-'))); + month(::atoi(sqlDateString.betweenString('-','-'))); + day(::atoi(sqlDateString.betweenString('-',' ').betweenString('-',0))); +} +#endif \ No newline at end of file diff --git a/sql/sqlint.hpp b/sql/sqlint.hpp new file mode 100644 index 0000000..9006aac --- /dev/null +++ b/sql/sqlint.hpp @@ -0,0 +1,68 @@ +#ifndef _SQL_SQLINT_HPP_ +#define _SQL_SQLINT_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _SQL_SQLSTRING_HPP_ +#include +#endif + +class SQLInt +{ +public: + SQLInt(void); + SQLInt(int someInt); + SQLInt &operator=(int value); + bool operator==(const SQLInt &someSQLInt)const; + int getValue(void)const; + void setValue(int value); + SQLString toString(void)const; +private: + int mData; +}; + +inline +SQLInt::SQLInt(void) +: mData(0) +{ +} + +inline +SQLInt::SQLInt(int someInt) +: mData(someInt) +{ +} + +inline +SQLInt &SQLInt::operator=(int value) +{ + mData=value; + return *this; +} + +inline +bool SQLInt::operator==(const SQLInt &someSQLInt)const +{ + return getValue()==someSQLInt.getValue(); +} + +inline +int SQLInt::getValue(void)const +{ + return mData; +} + +inline +void SQLInt::setValue(int value) +{ + mData=value; +} + +inline +SQLString SQLInt::toString(void)const +{ + SQLString strString; + ::sprintf(strString,"%d",mData); + return strString; +} +#endif \ No newline at end of file diff --git a/sql/sqlstring.hpp b/sql/sqlstring.hpp new file mode 100644 index 0000000..e186734 --- /dev/null +++ b/sql/sqlstring.hpp @@ -0,0 +1,55 @@ +#ifndef _SQL_SQLSTRING_HPP_ +#define _SQL_SQLSTRING_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class SQLString : public String +{ +public: + SQLString(void); + SQLString(const char *pString); + SQLString(const SQLString &sqlString); + SQLString(const String &string); + virtual ~SQLString(); + String toString(void)const; +private: +}; + +inline +SQLString::SQLString(void) +{ +} + +inline +SQLString::SQLString(const SQLString &sqlString) +: String((String&)sqlString) +{ +} + +inline +SQLString::SQLString(const String &string) +: String(string) +{ +} + +inline +SQLString::SQLString(const char *lpString) +: String(lpString) +{ +} + +inline +SQLString::~SQLString() +{ +} + +inline +String SQLString::toString(void)const +{ + if(isNull())return "NULL"; + String copyString(*this); + copyString.replaceToken('\'',' '); + return String("'")+copyString+String("'"); +} +#endif \ No newline at end of file diff --git a/statbar/HOLD/MSSCCPRJ.SCC b/statbar/HOLD/MSSCCPRJ.SCC new file mode 100644 index 0000000..3ddb18a --- /dev/null +++ b/statbar/HOLD/MSSCCPRJ.SCC @@ -0,0 +1,4 @@ +SCC = This is a Source Code Control file + +[STATBAR.MAK] +SCC_Project_Name = "$/statbar", DJAAAAAA diff --git a/statbar/HOLD/POPUP.CPP b/statbar/HOLD/POPUP.CPP new file mode 100644 index 0000000..2906933 --- /dev/null +++ b/statbar/HOLD/POPUP.CPP @@ -0,0 +1,62 @@ +#include + +PopUpMenu::PopUpMenu(void) +: mSize(0), mlpMenuItem(0) +{ +} + +PopUpMenu::PopUpMenu(const PureMenu &topLevelMenu) +: PureMenu((HMENU)topLevelMenu), mlpMenuItem(0) +{ + size(::GetMenuItemCount((PureMenu&)*this)); +} + +void PopUpMenu::size(long newSize) +{ + if(mlpMenuItem) + { +#ifdef __FLAT__ + while(::GlobalUnlock((HGLOBAL)::GlobalHandle((LPCVOID)mlpMenuItem))); + ::GlobalFree((HGLOBAL)::GlobalHandle((LPCVOID)mlpMenuItem)); +#else + while(::GlobalUnlock((HGLOBAL)(FP_SEG(mlpMenuItem)-1))); + ::GlobalFree((HGLOBAL)(FP_SEG(mlpMenuItem)-1)); +#endif + mlpMenuItem=0; + } + if(0==(mSize=newSize)){mlpMenuItem=0;return;} + mlpMenuItem=(MenuItem FAR*)::GlobalLock(::GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT,sizeof(MenuItem)*newSize)); +} + +PopUpMenu::~PopUpMenu() +{ + size(0); +} + +//PopUpMenu &PopUpMenu::operator=(const PureMenu &somePureMenu) +//{ +// (PureMenu&)*this=somePureMenu; +// return *this; +//} + +PopUpMenu &PopUpMenu::operator=(const PureMenu &somePureMenu) +{ + (PureMenu&)*this=(HMENU)somePureMenu; + return *this; +} + +WORD PopUpMenu::operator==(const PopUpMenu &somePopUpMenu)const +{ + return (PureMenu&)*this==(PureMenu&)somePopUpMenu; +} + +String PopUpMenu::menuLabel(void)const +{ + return mMenuLabel; +} + +void PopUpMenu::menuLabel(String menuLabel) +{ + mMenuLabel=menuLabel; +} + diff --git a/statbar/HOLD/POPUP.HPP b/statbar/HOLD/POPUP.HPP new file mode 100644 index 0000000..014cb91 --- /dev/null +++ b/statbar/HOLD/POPUP.HPP @@ -0,0 +1,46 @@ +#ifndef _STATBAR_POPUPMENU_HPP_ +#define _STATBAR_POPUPMENU_HPP_ +#ifndef _COMMON_PUREMENU_HPP_ +#include +#endif +#ifndef _COMMON_MENUITEM_HPP_ +#include +#endif +#ifndef _COMMON_PUREVECTOR_HPP_ +#include +#endif + +class PopUpMenu : public PureMenu +{ +public: + PopUpMenu(void); + PopUpMenu(const PureMenu &topLevelMenu); + ~PopUpMenu(); + String menuLabel(void)const; + void menuLabel(String menuLabel); + PopUpMenu &operator=(const PureMenu &somePureMenu); + PopUpMenu &operator=(HMENU hMenu); + WORD operator==(const PopUpMenu &somePopUpMenu)const; + MenuItem &operator[](long itemIndex); + long size(void)const; + void size(long newSize); +private: + String mMenuLabel; + MenuItem *mlpMenuItem; + WORD mSize; +}; + +inline +MenuItem &PopUpMenu::operator[](long itemIndex) +{ + assert(0!=mlpMenuItem); + return mlpMenuItem[itemIndex]; +} + +inline +long PopUpMenu::size(void)const +{ + return mSize; +} +#endif + diff --git a/statbar/HOLD/SMK.LST b/statbar/HOLD/SMK.LST new file mode 100644 index 0000000..4d141c0 --- /dev/null +++ b/statbar/HOLD/SMK.LST @@ -0,0 +1,120 @@ +Comparing files STATINFO.CPP and ..\STATINFO.Cpp +FC: no differences encountered + +Comparing files STATBAR.CPP and ..\STATBAR.Cpp +FC: no differences encountered + +Comparing files STATMENU.HPP and ..\STATMENU.Hpp +FC: no differences encountered + +Comparing files STATMENU.CPP and ..\STATMENU.Cpp +FC: no differences encountered + +Comparing files POPUP.HPP and ..\POPUP.Hpp +FC: no differences encountered + +Comparing files POPUP.CPP and ..\POPUP.Cpp +FC: no differences encountered + +Comparing files STATBAR.HPP and ..\STATBAR.Hpp +FC: no differences encountered + +Comparing files STATLOGO.HPP and ..\STATLOGO.Hpp +****** STATLOGO.HPP + void setBitmap(GUIWindow &guiWindow,const String &nameBitmap); + void centerxy(BOOL centerx,BOOL centery); + void stretchBlt(BOOL stretchBlt); +protected: +****** ..\STATLOGO.Hpp + void setBitmap(GUIWindow &guiWindow,const String &nameBitmap); +protected: +****** + +****** STATLOGO.HPP + BOOL mStretchBlt; + BOOL mCentery; + BOOL mCenterx; +}; +****** ..\STATLOGO.Hpp + BOOL mStretchBlt; +}; +****** + +****** STATLOGO.HPP +StatusBarLogo::StatusBarLogo(GUIWindow &guiWindow,const String &nameBitmap,BOOL stretchBlt) +: StatusBar(guiWindow), mPureBitmap(nameBitmap,guiWindow.processInstance()), mStretchBlt(stretchBlt), + mCenterx(FALSE), mCentery(FALSE) +{ +****** ..\STATLOGO.Hpp +StatusBarLogo::StatusBarLogo(GUIWindow &guiWindow,const String &nameBitmap,BOOL stretchBlt) +: StatusBar(guiWindow), mPureBitmap(nameBitmap,guiWindow.processInstance()), mStretchBlt(stretchBlt) +{ +****** + +****** STATLOGO.HPP +inline +void StatusBarLogo::centerxy(BOOL centerx,BOOL centery) +{ + mCenterx=centerx; + mCentery=centery; +} +****** ..\STATLOGO.Hpp +inline +void StatusBarLogo::setBitmap(GUIWindow &guiWindow,const String &nameBitmap) +{ + mPureBitmap=PureBitmap(nameBitmap,guiWindow.processInstance()); + PureDevice screenDevice(guiWindow); + postPaint(screenDevice,postPaintRect()); +} +****** + +****** STATLOGO.HPP +inline +void StatusBarLogo::stretchBlt(BOOL stretchBlt) +{ + mStretchBlt=stretchBlt; +} + +inline +void StatusBarLogo::setBitmap(GUIWindow &guiWindow,const String &nameBitmap) +{ + mPureBitmap=PureBitmap(nameBitmap,guiWindow.processInstance()); + PureDevice screenDevice(guiWindow); + postPaint(screenDevice,postPaintRect()); +} + +inline +void StatusBarLogo::postPaint(PureDevice &screenDevice,const Rect &paintRect) +{ + PureDevice memDevice(screenDevice); +****** ..\STATLOGO.Hpp +inline +void StatusBarLogo::postPaint(PureDevice &screenDevice,const Rect &paintRect) +{ + PureDevice memDevice(screenDevice); +****** + +****** STATLOGO.HPP + if(mStretchBlt)screenDevice.stretchBlt(paintRect,memDevice,Rect(0,0,mPureBitmap.width(),mPureBitmap.height())); + else + { + if(!mCenterx&&!mCentery)screenDevice.bitBlt(paintRect,memDevice,Point(0,0)); + else + { + Rect bltRect(paintRect); + if(mCentery)bltRect.top(bltRect.top()+((paintRect.bottom()-mPureBitmap.height())/2)); + if(mCenterx)bltRect.left(bltRect.left()+((paintRect.right()-mPureBitmap.width())/2)); + screenDevice.bitBlt(bltRect,memDevice,Point(0,0)); + } + } +} +****** ..\STATLOGO.Hpp + if(mStretchBlt)screenDevice.stretchBlt(paintRect,memDevice,Rect(0,0,mPureBitmap.width(),mPureBitmap.height())); + else screenDevice.bitBlt(paintRect,memDevice,Point(0,0)); +} +****** + + +Comparing files STATINFO.HPP and ..\STATINFO.Hpp +FC: no differences encountered + diff --git a/statbar/HOLD/STATBAR.BAK b/statbar/HOLD/STATBAR.BAK new file mode 100644 index 0000000..70ffab8 --- /dev/null +++ b/statbar/HOLD/STATBAR.BAK @@ -0,0 +1,809 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=statbar - Win32 Debug +!MESSAGE No configuration specified. Defaulting to statbar - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "statbar - Win32 Release" && "$(CFG)" !=\ + "statbar - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "statbar.mak" CFG="statbar - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "statbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "statbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "statbar - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "statbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\statbar.lib" + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "$(OUTDIR)\statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/statbar.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"$(OUTDIR)\statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\statbar.lib" + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "..\exe\statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\statbar.lib" +LIB32_FLAGS=/nologo /out:"..\exe\statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"..\exe\statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "statbar - Win32 Release" +# Name "statbar - Win32 Debug" + +!IF "$(CFG)" == "statbar - Win32 Release" + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Statmenu.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATM=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATM=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Statinfo.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATI=\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statinfo.obj" : $(SOURCE) $(DEP_CPP_STATI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATI=\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statinfo.obj" : $(SOURCE) $(DEP_CPP_STATI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Statbar.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATB=\ + {$(INCLUDE)}"\.\Statbar.hpp"\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATB=\ + {$(INCLUDE)}"\.\Statbar.hpp"\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Popup.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_POPUP=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_POPUP=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/statbar/HOLD/STATBAR.CPP b/statbar/HOLD/STATBAR.CPP new file mode 100644 index 0000000..f08cbf5 --- /dev/null +++ b/statbar/HOLD/STATBAR.CPP @@ -0,0 +1,460 @@ +#include +#include + +StatusBar::StatusBar(Window &mainWindow) +: mDisplayWindow(mainWindow), mLastCapLockState(FALSE), mLastNumLockState(FALSE), mLastItemID(-1), + mCapLockString("CAPS"), mNumLockString("NUM"), mBlankString(" "), mKeyDownState(FALSE), + StatusBarMenu(mainWindow), mLastDisplayString(mBlankString) +{ + mPaintCallback.setCallback(this,&StatusBar::paintHandler); + mSetFocusCallback.setCallback(this,&StatusBar::setFocusHandler); + mKeyUpCallback.setCallback(this,&StatusBar::keyUpHandler); + mKeyDownCallback.setCallback(this,&StatusBar::keyDownHandler); + mSizeCallback.setCallback(this,&StatusBar::sizeHandler); + mMinMaxCallback.setCallback(this,&StatusBar::minMaxHandler); + mMenuSelectCallback.setCallback(this,&StatusBar::menuSelectHandler); + mDestroyCallback.setCallback(this,&StatusBar::destroyHandler); + mDisplayWindow.insertHandler(VectorHandler::PaintHandler,&mPaintCallback,VectorHandler::FirstHandler); + mDisplayWindow.insertHandler(VectorHandler::SetFocusHandler,&mSetFocusCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyUpHandler,&mKeyUpCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyDownHandler,&mKeyDownCallback); + mDisplayWindow.insertHandler(VectorHandler::SizeHandler,&mSizeCallback); + mDisplayWindow.insertHandler(VectorHandler::MinMaxHandler,&mMinMaxCallback); + mDisplayWindow.insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectCallback); + mDisplayWindow.insertHandler(VectorHandler::DestroyHandler,&mDestroyCallback); + ::InvalidateRect(mainWindow,0,TRUE); +} + +StatusBar::StatusBar(GUIWindow &guiWindow) +: mDisplayWindow(guiWindow), mLastCapLockState(FALSE), mLastNumLockState(FALSE), mLastItemID(-1), + mCapLockString("CAPS"), mNumLockString("NUM"), mBlankString(" "), mKeyDownState(FALSE), + mLastDisplayString(mBlankString) +{ + mSetFocusCallback.setCallback(this,&StatusBar::setFocusHandler); + mKeyUpCallback.setCallback(this,&StatusBar::keyUpHandler); + mKeyDownCallback.setCallback(this,&StatusBar::keyDownHandler); + mSizeCallback.setCallback(this,&StatusBar::sizeHandler); + mMinMaxCallback.setCallback(this,&StatusBar::minMaxHandler); + mMenuSelectCallback.setCallback(this,&StatusBar::menuSelectHandler); + mDestroyCallback.setCallback(this,&StatusBar::destroyHandler); + mPaintCallback.setCallback(this,&StatusBar::paintHandler); + mDisplayWindow.insertHandler(VectorHandler::PaintHandler,&mPaintCallback,VectorHandler::FirstHandler); + mDisplayWindow.insertHandler(VectorHandler::SetFocusHandler,&mSetFocusCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyUpHandler,&mKeyUpCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyDownHandler,&mKeyDownCallback); + mDisplayWindow.insertHandler(VectorHandler::SizeHandler,&mSizeCallback); + mDisplayWindow.insertHandler(VectorHandler::MinMaxHandler,&mMinMaxCallback); + mDisplayWindow.insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectCallback); + mDisplayWindow.insertHandler(VectorHandler::DestroyHandler,&mDestroyCallback); + ::InvalidateRect(guiWindow,0,TRUE); +} + +StatusBar::~StatusBar() +{ + removeHandlers(); +} + +CallbackData::ReturnType StatusBar::keyUpHandler(CallbackData &/*someCallbackData*/) +{ + mKeyDownState=FALSE; + return (CallbackData::ReturnType)0; +} + +CallbackData::ReturnType StatusBar::keyDownHandler(CallbackData &someCallbackData) +{ + if(!mKeyDownState) + { + if(VK_CAPITAL==someCallbackData.wParam())setCapLockText(); + else if(VK_NUMLOCK==someCallbackData.wParam())setNumLockText(); + mKeyDownState=TRUE; + } + return (CallbackData::ReturnType)0; +} + +CallbackData::ReturnType StatusBar::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + setCapLockText(); + setNumLockText(); + return (CallbackData::ReturnType)0; +} + +CallbackData::ReturnType StatusBar::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + return (CallbackData::ReturnType)0; +} + +void StatusBar::removeHandlers(void) +{ + mDisplayWindow.removeHandler(VectorHandler::PaintHandler,&mPaintCallback); + mDisplayWindow.removeHandler(VectorHandler::SetFocusHandler,&mSetFocusCallback); + mDisplayWindow.removeHandler(VectorHandler::KeyUpHandler,&mKeyUpCallback); + mDisplayWindow.removeHandler(VectorHandler::KeyDownHandler,&mKeyDownCallback); + mDisplayWindow.removeHandler(VectorHandler::SizeHandler,&mSizeCallback); + mDisplayWindow.removeHandler(VectorHandler::MinMaxHandler,&mMinMaxCallback); + mDisplayWindow.removeHandler(VectorHandler::MenuSelectHandler,&mMenuSelectCallback); + mDisplayWindow.removeHandler(VectorHandler::DestroyHandler,&mDestroyCallback); +} + +void StatusBar::setCapLockText(void) +{ + RECT clientRect; + RECT tempRectOne; + RECT tempRectTwo; + HFONT hOldFont; + String tempString; + PureDevice windowDevice; + WORD capLockLeft; + + if(::GetKeyState(VK_CAPITAL)&0x0001) + { + if(TRUE==mLastCapLockState)return; + mLastCapLockState=TRUE; + tempString=mCapLockString; + } + else + { + if(FALSE==mLastCapLockState)return; + mLastCapLockState=FALSE; + tempString=mBlankString; + } + windowDevice=mDisplayWindow; + ::GetClientRect(mDisplayWindow,(RECT FAR*)&clientRect); + clientRect.top=clientRect.bottom-statusBarHeight(); + capLockLeft=clientRect.left+systemBorderDeltaTimesNine()+statusInfoWidth(); + hOldFont=(HFONT)::SelectObject((HDC)windowDevice,statusFont()); + ::SetTextColor((HDC)windowDevice,::GetSysColor(COLOR_BTNTEXT)); + ::SetBkColor((HDC)windowDevice,::GetSysColor(COLOR_BTNFACE)); + tempRectOne.top=clientRect.top+systemBorderDelta()*4; + tempRectOne.bottom=clientRect.bottom-systemBorderDeltaTimesThree(); + tempRectOne.left=capLockLeft+systemBorderDeltaTimesNine(); + tempRectOne.right=tempRectOne.left+stateInfoWidth()-systemBorderDelta(); + tempRectTwo=tempRectOne; + ::ExtTextOut((HDC)windowDevice,tempRectOne.left+systemBorderDeltaTimesTwo(),tempRectOne.top, + ETO_OPAQUE|ETO_CLIPPED,&tempRectTwo,(LPSTR)tempString,tempString.length(),0); + ::SelectObject((HDC)windowDevice,hOldFont); +} + +void StatusBar::setNumLockText(void) +{ + RECT clientRect; + RECT tempRectOne; + RECT tempRectTwo; + HFONT hOldFont; + WORD numLockLeft; + WORD capLockLeft; + PureDevice windowDevice; + String tempString; + + if(::GetKeyState(VK_NUMLOCK)&0x0001) + { + if(TRUE==mLastNumLockState)return; + mLastNumLockState=TRUE; + tempString=mNumLockString; + } + else + { + if(FALSE==mLastNumLockState)return; + mLastNumLockState=FALSE; + tempString=mBlankString; + } + windowDevice=mDisplayWindow; + ::GetClientRect(mDisplayWindow,(RECT FAR*)&clientRect); + clientRect.top=clientRect.bottom-statusBarHeight(); + capLockLeft=clientRect.left+systemBorderDeltaTimesNine()+statusInfoWidth(); + numLockLeft=capLockLeft+systemBorderDeltaTimesNine()+stateInfoWidth(); + hOldFont=(HFONT)::SelectObject((HDC)windowDevice,statusFont()); + ::SetTextColor((HDC)windowDevice,::GetSysColor(COLOR_BTNTEXT)); + ::SetBkColor((HDC)windowDevice,::GetSysColor(COLOR_BTNFACE)); + tempRectOne.top=clientRect.top+systemBorderDelta()*4; + tempRectOne.bottom=clientRect.bottom-systemBorderDeltaTimesThree(); + tempRectOne.left=numLockLeft+systemBorderDeltaTimesNine(); + tempRectOne.right=tempRectOne.left+stateInfoWidth()-systemBorderDelta(); + tempRectTwo=tempRectOne; + ::ExtTextOut((HDC)windowDevice,tempRectOne.left+systemBorderDeltaTimesTwo(), + tempRectOne.top,ETO_OPAQUE | ETO_CLIPPED,&tempRectTwo,(LPSTR)tempString,tempString.length(),0); + ::SelectObject(windowDevice,hOldFont); +} + +CallbackData::ReturnType StatusBar::sizeHandler(CallbackData &/*someCallbackData*/) +{ + RECT clientRect; + + ::GetClientRect(mDisplayWindow,(RECT FAR*)&clientRect); + clientRect.top=clientRect.bottom-statusBarHeight(); + if(clientRect.top menuLabels; + + for(int itemIndex=0;itemIndex +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=statbar - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Statbar.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Statbar.mak" CFG="statbar - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "statbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "statbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "statbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\statbar.lib" + +!ENDIF + +# Begin Target + +# Name "statbar - Win32 Release" +# Name "statbar - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Popup.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statbar.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statmenu.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Popup.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statbar.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statmenu.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/statbar/HOLD/STATBAR.DSW b/statbar/HOLD/STATBAR.DSW new file mode 100644 index 0000000..3096b1c --- /dev/null +++ b/statbar/HOLD/STATBAR.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "statbar"=.\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/statbar/HOLD/STATBAR.HPP b/statbar/HOLD/STATBAR.HPP new file mode 100644 index 0000000..9363217 --- /dev/null +++ b/statbar/HOLD/STATBAR.HPP @@ -0,0 +1,63 @@ +#ifndef _STATBAR_STATBAR_HPP_ +#define _STATBAR_STATBAR_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSINFO_HPP_ +#include +#endif +#ifndef _STATBAR_STATBARMENU_HPP_ +#include +#endif + +class StatusBar : public StatusBarMenu, public StatusInfo +{ +public: + StatusBar(Window &mainWindow); + StatusBar(GUIWindow &guiWindow); + virtual ~StatusBar(); + WORD setSequentialResourceDescriptors(UINT menuId,UINT stringID,WORD itemCount); + WORD setSequentialResourceLabels(UINT stringID,WORD itemCount); + void setText(const String &displayString); +protected: + virtual void postPaint(PureDevice &screenDevice,const Rect &paintRect); + Rect postPaintRect(void)const; +private: + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType minMaxHandler(CallbackData &someCallbackData); + CallbackData::ReturnType menuSelectHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + void removeHandlers(void); + void setStatBarText(int itemID,WORD redrawFlag); + void setStatBarText(PureMenu &somePureMenu,WORD redrawFlag); + void setCapLockText(void); + void setNumLockText(void); + void paintBar(void); + + Callback mPaintCallback; + Callback mSetFocusCallback; + Callback mKeyUpCallback; + Callback mKeyDownCallback; + Callback mSizeCallback; + Callback mMinMaxCallback; + Callback mMenuSelectCallback; + Callback mDestroyCallback; + GUIWindow &mDisplayWindow; + String mCapLockString; + String mNumLockString; + String mBlankString; + String mLastDisplayString; + WORD mLastCapLockState; + WORD mLastNumLockState; + int mLastItemID; + WORD mKeyDownState; + RECT mStatRectSizeAdv; +}; +#endif diff --git a/statbar/HOLD/STATBAR.MAK b/statbar/HOLD/STATBAR.MAK new file mode 100644 index 0000000..70ffab8 --- /dev/null +++ b/statbar/HOLD/STATBAR.MAK @@ -0,0 +1,809 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=statbar - Win32 Debug +!MESSAGE No configuration specified. Defaulting to statbar - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "statbar - Win32 Release" && "$(CFG)" !=\ + "statbar - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "statbar.mak" CFG="statbar - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "statbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "statbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "statbar - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "statbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\statbar.lib" + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "$(OUTDIR)\statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/statbar.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"$(OUTDIR)\statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\statbar.lib" + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "..\exe\statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\statbar.lib" +LIB32_FLAGS=/nologo /out:"..\exe\statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"..\exe\statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "statbar - Win32 Release" +# Name "statbar - Win32 Debug" + +!IF "$(CFG)" == "statbar - Win32 Release" + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Statmenu.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATM=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATM=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Statinfo.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATI=\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statinfo.obj" : $(SOURCE) $(DEP_CPP_STATI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATI=\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statinfo.obj" : $(SOURCE) $(DEP_CPP_STATI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Statbar.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATB=\ + {$(INCLUDE)}"\.\Statbar.hpp"\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATB=\ + {$(INCLUDE)}"\.\Statbar.hpp"\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Popup.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_POPUP=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_POPUP=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/statbar/HOLD/STATBAR.MDP b/statbar/HOLD/STATBAR.MDP new file mode 100644 index 0000000..d08d5cb Binary files /dev/null and b/statbar/HOLD/STATBAR.MDP differ diff --git a/statbar/HOLD/STATBAR.PLG b/statbar/HOLD/STATBAR.PLG new file mode 100644 index 0000000..3914187 --- /dev/null +++ b/statbar/HOLD/STATBAR.PLG @@ -0,0 +1,15 @@ +--------------------Configuration: statbar - Win32 Debug-------------------- +Begining build with project "C:\work\statbar\Statbar.dsp", at root. +Active configuration is Win32 (x86) Static Library (based on Win32 (x86) Static Library) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c " + "Browser Database Maker" with flags "/nologo /o".\msvcobj/Statbar.bsc" " + "Library Manager" with flags "/nologo /out:"..\exe\statbar.lib" " + "Custom Build" with flags "" + "" with flags "" + + + + +statbar.lib - 0 error(s), 0 warning(s) diff --git a/statbar/HOLD/STATINFO.CPP b/statbar/HOLD/STATINFO.CPP new file mode 100644 index 0000000..a7cb5b6 --- /dev/null +++ b/statbar/HOLD/STATINFO.CPP @@ -0,0 +1,36 @@ +#include +#include +#include + +StatusInfo::StatusInfo(void) +: mSystemBorderDelta(0), mSystemBorderDeltaTimesTwo(0), + mSystemBorderDeltaTimesThree(0), mSystemBorderDeltaTimesEight(0), + mSystemBorderDeltaTimesNine(0), mStatusBarHeight(0), mStatusInfoWidth(), + mStateInfoWidth(0), mhStatusBarFont(0), mWindowsVersion(WIN30) +{ + TEXTMETRIC tm; + WORD fontHeight; + HFONT hOldFont; + HDC hDC(::GetDC(0)); + DWORD windowsVersion; + + mSystemBorderDelta=::GetSystemMetrics(SM_CYBORDER); + mSystemBorderDeltaTimesTwo=mSystemBorderDelta*2; + mSystemBorderDeltaTimesThree=mSystemBorderDelta*3; + mSystemBorderDeltaTimesEight=mSystemBorderDelta*8; + mSystemBorderDeltaTimesNine=mSystemBorderDelta*9; + fontHeight=::MulDiv(12,::GetDeviceCaps(hDC,LOGPIXELSY),72); + mhStatusBarFont=::CreateFont(fontHeight,0,0,0,400,0,0,0, + ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY,VARIABLE_PITCH|FF_SWISS,"Helv"); + hOldFont=(HFONT)::SelectObject(hDC,mhStatusBarFont); + ::GetTextMetrics(hDC,&tm); + ::SelectObject(hDC,hOldFont); + ::ReleaseDC(NULL, hDC); + mStatusBarHeight=tm.tmHeight+tm.tmExternalLeading+(7*mSystemBorderDelta); + mStatusInfoWidth=tm.tmMaxCharWidth*21; + mStateInfoWidth=tm.tmMaxCharWidth*3; + windowsVersion=::GetVersion(); + if(LOWORD(windowsVersion)>=3&&HIWORD(windowsVersion)<10)mWindowsVersion=WIN30; + else mWindowsVersion=WIN3X; +} diff --git a/statbar/HOLD/STATINFO.HPP b/statbar/HOLD/STATINFO.HPP new file mode 100644 index 0000000..4d64dba --- /dev/null +++ b/statbar/HOLD/STATINFO.HPP @@ -0,0 +1,102 @@ +#ifndef _STATBAR_STATUSINFO_HPP_ +#define _STATBAR_STATUSINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class StatusInfo +{ +public: + enum WinVer{WIN30,WIN3X}; + StatusInfo(void); + virtual ~StatusInfo(); + WORD systemBorderDelta(void)const; + WORD systemBorderDeltaTimesTwo(void)const; + WORD systemBorderDeltaTimesThree(void)const; + WORD systemBorderDeltaTimesEight(void)const; + WORD systemBorderDeltaTimesNine(void)const; + WORD statusBarHeight(void)const; + WORD statusInfoWidth(void)const; + WORD stateInfoWidth(void)const; + HFONT statusFont(void)const; + WinVer windowsVersion(void)const; +private: + WORD mSystemBorderDelta; // System border width/height + WORD mSystemBorderDeltaTimesTwo; // System border width/height*2 + WORD mSystemBorderDeltaTimesThree; // System border width/height*3 + WORD mSystemBorderDeltaTimesEight; // System border width/height*8 + WORD mSystemBorderDeltaTimesNine; // System border width/height*9 + WORD mStatusBarHeight; // Status bar height + WORD mStatusInfoWidth; // Width reserved for Status Info + WORD mStateInfoWidth; // Width reserved for State Info + HFONT mhStatusBarFont; // Font used in status bar + WinVer mWindowsVersion; // windows version number +}; + +inline +StatusInfo::~StatusInfo() +{ + if(mhStatusBarFont)::DeleteObject(mhStatusBarFont); +} + +inline +WORD StatusInfo:: systemBorderDelta(void)const +{ + return mSystemBorderDelta; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesTwo(void)const +{ + return mSystemBorderDeltaTimesTwo; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesThree(void)const +{ + return mSystemBorderDeltaTimesThree; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesEight(void)const +{ + return mSystemBorderDeltaTimesEight; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesNine(void)const +{ + return mSystemBorderDeltaTimesNine; +} + +inline +WORD StatusInfo::statusBarHeight(void)const +{ + return mStatusBarHeight; +} + +inline +WORD StatusInfo::statusInfoWidth(void)const +{ + return mStatusInfoWidth; +} + +inline +WORD StatusInfo::stateInfoWidth(void)const +{ + return mStateInfoWidth; +} + +inline +StatusInfo::WinVer StatusInfo::windowsVersion(void)const +{ + return mWindowsVersion; +} + +inline +HFONT StatusInfo::statusFont(void)const +{ + return mhStatusBarFont; +} +#endif + diff --git a/statbar/HOLD/STATLOGO.HPP b/statbar/HOLD/STATLOGO.HPP new file mode 100644 index 0000000..dffeadb --- /dev/null +++ b/statbar/HOLD/STATLOGO.HPP @@ -0,0 +1,78 @@ +#ifndef _STATBAR_STATUSBARLOGO_HPP_ +#define _STATBAR_STATUSBARLOGO_HPP_ +#ifndef _STATBAR_STATBAR_HPP_ +#include +#endif +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif + +class StatusBarLogo : public StatusBar +{ +public: + StatusBarLogo(GUIWindow &guiWindow,const String &nameBitmap,BOOL stretchBlt=TRUE); + virtual ~StatusBarLogo(); + void setBitmap(GUIWindow &guiWindow,const String &nameBitmap); + void centerxy(BOOL centerx,BOOL centery); + void stretchBlt(BOOL stretchBlt); +protected: + virtual void postPaint(PureDevice &screenDevice,const Rect &paintRect); +private: + PureBitmap mPureBitmap; + BOOL mStretchBlt; + BOOL mCentery; + BOOL mCenterx; +}; + +inline +StatusBarLogo::StatusBarLogo(GUIWindow &guiWindow,const String &nameBitmap,BOOL stretchBlt) +: StatusBar(guiWindow), mPureBitmap(nameBitmap,guiWindow.processInstance()), mStretchBlt(stretchBlt), + mCenterx(FALSE), mCentery(FALSE) +{ +} + +inline +StatusBarLogo::~StatusBarLogo() +{ +} + +inline +void StatusBarLogo::centerxy(BOOL centerx,BOOL centery) +{ + mCenterx=centerx; + mCentery=centery; +} + +inline +void StatusBarLogo::stretchBlt(BOOL stretchBlt) +{ + mStretchBlt=stretchBlt; +} + +inline +void StatusBarLogo::setBitmap(GUIWindow &guiWindow,const String &nameBitmap) +{ + mPureBitmap=PureBitmap(nameBitmap,guiWindow.processInstance()); + PureDevice screenDevice(guiWindow); + postPaint(screenDevice,postPaintRect()); +} + +inline +void StatusBarLogo::postPaint(PureDevice &screenDevice,const Rect &paintRect) +{ + PureDevice memDevice(screenDevice); + memDevice.select((GDIObj)mPureBitmap); + if(mStretchBlt)screenDevice.stretchBlt(paintRect,memDevice,Rect(0,0,mPureBitmap.width(),mPureBitmap.height())); + else + { + if(!mCenterx&&!mCentery)screenDevice.bitBlt(paintRect,memDevice,Point(0,0)); + else + { + Rect bltRect(paintRect); + if(mCentery)bltRect.top(bltRect.top()+((paintRect.bottom()-mPureBitmap.height())/2)); + if(mCenterx)bltRect.left(bltRect.left()+((paintRect.right()-mPureBitmap.width())/2)); + screenDevice.bitBlt(bltRect,memDevice,Point(0,0)); + } + } +} +#endif diff --git a/statbar/HOLD/STATMENU.CPP b/statbar/HOLD/STATMENU.CPP new file mode 100644 index 0000000..9459c23 --- /dev/null +++ b/statbar/HOLD/STATMENU.CPP @@ -0,0 +1,120 @@ +#include +#include +#include + +StatusBarMenu::StatusBarMenu(void) +{ +} + +StatusBarMenu::StatusBarMenu(const Window &someWindow) +: mTopLevelMenu((HMENU)someWindow) +{ + sizeMenuItems(mTopLevelMenu); +} + +StatusBarMenu::~StatusBarMenu() +{ +} + +void StatusBarMenu::sizeMenuItems(HMENU hTopLevelMenu) +{ + WORD menuItems(::GetMenuItemCount(mTopLevelMenu=hTopLevelMenu)); + + if(0xFFFF==menuItems||!menuItems)return; + mPopUpMenu.size(menuItems); + for(int i=0;i &menuLabels) +{ + size_t labelItems((WORD)menuLabels.size()); + size_t menuItems((WORD)mPopUpMenu.size()); + + for(int itemIndex=0;itemIndex=labelItems)return FALSE; + if(itemIndex>=menuItems)return FALSE; + String menuLabelString=menuLabels[itemIndex]; + mPopUpMenu[itemIndex].menuLabel(menuLabelString); + } + return TRUE; +} + +WORD StatusBarMenu::setMenuItemDescriptors(Block &menuItems) +{ + size_t size((WORD)menuItems.size()); + WORD returnCode(0); + + for(int i=0;i +#endif +#ifndef _COMMON_PUREMENU_HPP_ +#include +#endif +#ifndef _STATBAR_POPUPMENU_HPP_ +#include +#endif + +class Window; +template +class Block; + +class StatusBarMenu +{ +public: + StatusBarMenu(void); + StatusBarMenu(const Window &someWindow); + virtual ~StatusBarMenu(); + void sizeMenuItems(HMENU hTopLevelMenu); + WORD setMenuItemDescriptors(Block &menuItems); + WORD setMenuItemDescriptor(const MenuItem &someMenuItem); + WORD setMenuLabelDescriptors(Block &menuLabels); + WORD getMenuItemDescriptor(MenuItem &menuItem); + WORD getMenuItemDescriptor(PureMenu &somePureMenu,MenuItem &menuItem); +private: + PureMenu mTopLevelMenu; + PureVector mPopUpMenu; +}; +#endif diff --git a/statbar/MSSCCPRJ.SCC b/statbar/MSSCCPRJ.SCC new file mode 100644 index 0000000..3ddb18a --- /dev/null +++ b/statbar/MSSCCPRJ.SCC @@ -0,0 +1,4 @@ +SCC = This is a Source Code Control file + +[STATBAR.MAK] +SCC_Project_Name = "$/statbar", DJAAAAAA diff --git a/statbar/POPUP.CPP b/statbar/POPUP.CPP new file mode 100644 index 0000000..37cae8d --- /dev/null +++ b/statbar/POPUP.CPP @@ -0,0 +1,62 @@ +#include + +PopUpMenu::PopUpMenu(void) +: mSize(0), mlpMenuItem(0) +{ +} + +PopUpMenu::PopUpMenu(const PureMenu &topLevelMenu) +: PureMenu((HMENU)topLevelMenu), mlpMenuItem(0) +{ + size(::GetMenuItemCount((PureMenu&)*this)); +} + +void PopUpMenu::size(long newSize) +{ + if(mlpMenuItem) + { +#ifdef __FLAT__ + ::GlobalUnlock((HGLOBAL)::GlobalHandle((LPCVOID)mlpMenuItem)); + ::GlobalFree((HGLOBAL)::GlobalHandle((LPCVOID)mlpMenuItem)); +#else + while(::GlobalUnlock((HGLOBAL)(FP_SEG(mlpMenuItem)-1))); + ::GlobalFree((HGLOBAL)(FP_SEG(mlpMenuItem)-1)); +#endif + mlpMenuItem=0; + } + if(0==(mSize=newSize)){mlpMenuItem=0;return;} + mlpMenuItem=(MenuItem FAR*)::GlobalLock(::GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT,sizeof(MenuItem)*newSize)); +} + +PopUpMenu::~PopUpMenu() +{ + size(0); +} + +//PopUpMenu &PopUpMenu::operator=(const PureMenu &somePureMenu) +//{ +// (PureMenu&)*this=somePureMenu; +// return *this; +//} + +PopUpMenu &PopUpMenu::operator=(const PureMenu &somePureMenu) +{ + (PureMenu&)*this=(HMENU)somePureMenu; + return *this; +} + +WORD PopUpMenu::operator==(const PopUpMenu &somePopUpMenu)const +{ + return (PureMenu&)*this==(PureMenu&)somePopUpMenu; +} + +String PopUpMenu::menuLabel(void)const +{ + return mMenuLabel; +} + +void PopUpMenu::menuLabel(String menuLabel) +{ + mMenuLabel=menuLabel; +} + diff --git a/statbar/POPUP.HPP b/statbar/POPUP.HPP new file mode 100644 index 0000000..a50a2f0 --- /dev/null +++ b/statbar/POPUP.HPP @@ -0,0 +1,46 @@ +#ifndef _STATBAR_POPUPMENU_HPP_ +#define _STATBAR_POPUPMENU_HPP_ +#ifndef _COMMON_PUREMENU_HPP_ +#include +#endif +#ifndef _COMMON_MENUITEM_HPP_ +#include +#endif +#ifndef _COMMON_EXCEPTION_HPP_ +#include +#endif + +class PopUpMenu : public PureMenu +{ +public: + PopUpMenu(void); + PopUpMenu(const PureMenu &topLevelMenu); + ~PopUpMenu(); + String menuLabel(void)const; + void menuLabel(String menuLabel); + PopUpMenu &operator=(const PureMenu &somePureMenu); + PopUpMenu &operator=(HMENU hMenu); + WORD operator==(const PopUpMenu &somePopUpMenu)const; + MenuItem &operator[](long itemIndex); + long size(void)const; + void size(long newSize); +private: + String mMenuLabel; + MenuItem *mlpMenuItem; + WORD mSize; +}; + +inline +MenuItem &PopUpMenu::operator[](long itemIndex) +{ + if(!mlpMenuItem)throw(NullError()); + return mlpMenuItem[itemIndex]; +} + +inline +long PopUpMenu::size(void)const +{ + return mSize; +} +#endif + diff --git a/statbar/Release/Statbar.lib b/statbar/Release/Statbar.lib new file mode 100644 index 0000000..4efc0a9 Binary files /dev/null and b/statbar/Release/Statbar.lib differ diff --git a/statbar/Release/vc60.idb b/statbar/Release/vc60.idb new file mode 100644 index 0000000..e9ad08b Binary files /dev/null and b/statbar/Release/vc60.idb differ diff --git a/statbar/SCRAPS.TXT b/statbar/SCRAPS.TXT new file mode 100644 index 0000000..215fa97 --- /dev/null +++ b/statbar/SCRAPS.TXT @@ -0,0 +1,127 @@ +#if 0 +void StatusBar::paintBarBitmap(void) +{ + RECT tempRectOne; + RECT tempRectTwo; + RECT clientRect; + HFONT hOldFont; + HBRUSH hTempBrush; + PureDevice windowDevice; + WORD capLockLeft; + WORD numLockLeft; + String tempString; + + windowDevice=mDisplayWindow; + ::GetClientRect(mDisplayWindow,(RECT FAR *)&clientRect); + clientRect.top=clientRect.bottom-statusBarHeight(); + capLockLeft=clientRect.left+systemBorderDeltaTimesNine()+statusInfoWidth(); + numLockLeft=capLockLeft+systemBorderDeltaTimesNine()+stateInfoWidth(); + hTempBrush=::CreateSolidBrush(::GetSysColor(COLOR_BTNFACE)); + + tempRectOne=clientRect; + tempRectOne.bottom=tempRectOne.top+systemBorderDeltaTimesThree(); + tempRectOne.top+=systemBorderDeltaTimesTwo(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + + tempRectOne=clientRect; + tempRectOne.top=tempRectOne.bottom-systemBorderDeltaTimesTwo(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + + tempRectOne=clientRect; + tempRectOne.right=systemBorderDeltaTimesEight(); + tempRectOne.top+=systemBorderDeltaTimesTwo(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + ::DeleteObject(hTempBrush); + + hTempBrush=::CreateSolidBrush(::GetSysColor(COLOR_BTNSHADOW)); + tempRectOne=clientRect; + tempRectOne.top=clientRect.top+systemBorderDeltaTimesThree(); + tempRectOne.bottom=tempRectOne.top+systemBorderDelta(); + tempRectOne.left=systemBorderDeltaTimesEight(); + tempRectOne.right=tempRectOne.left+statusInfoWidth(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + + tempRectOne=clientRect; + tempRectOne.top+=systemBorderDeltaTimesThree(); + tempRectOne.bottom-=systemBorderDeltaTimesTwo(); + tempRectOne.left=systemBorderDeltaTimesEight(); + tempRectOne.right=tempRectOne.left+systemBorderDelta(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + ::DeleteObject(hTempBrush); + + if(WIN30==windowsVersion()){hTempBrush=(HBRUSH)::GetStockObject(WHITE_BRUSH);::MessageBeep(0);} + else hTempBrush=::CreateSolidBrush(::GetSysColor(COLOR_BTNHIGHLIGHT)); + + tempRectOne=clientRect; + tempRectOne.top=clientRect.bottom-systemBorderDeltaTimesThree(); + tempRectOne.bottom=tempRectOne.top+systemBorderDelta(); + tempRectOne.left=systemBorderDeltaTimesEight(); + tempRectOne.right=tempRectOne.left+statusInfoWidth(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + + tempRectOne=clientRect; + tempRectOne.top+=systemBorderDeltaTimesThree(); + tempRectOne.bottom-=systemBorderDeltaTimesTwo(); + tempRectOne.left=capLockLeft-systemBorderDelta(); + tempRectOne.right=tempRectOne.left+systemBorderDelta(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + + tempRectOne=clientRect; + tempRectOne.top+=systemBorderDelta(); + tempRectOne.bottom=tempRectOne.top+systemBorderDelta(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + ::DeleteObject(hTempBrush); + + hTempBrush=::CreateSolidBrush(::GetSysColor(COLOR_WINDOWTEXT)); + tempRectOne=clientRect; + tempRectOne.bottom=tempRectOne.top; + tempRectOne.bottom+=systemBorderDelta(); + ::FillRect((HDC)windowDevice,(RECT FAR*)&tempRectOne,hTempBrush); + ::DeleteObject(hTempBrush); + + hOldFont=(HFONT)::SelectObject((HDC)windowDevice,statusFont()); + ::SetTextColor((HDC)windowDevice,::GetSysColor(COLOR_BTNTEXT)); + ::SetBkColor((HDC)windowDevice,::GetSysColor(COLOR_BTNFACE)); + + tempRectOne.top=clientRect.top+(systemBorderDelta()*4); + tempRectOne.bottom=clientRect.bottom-systemBorderDeltaTimesThree(); + tempRectOne.left=systemBorderDeltaTimesNine(); + tempRectOne.right=tempRectOne.left+statusInfoWidth()-systemBorderDelta(); + tempRectTwo=tempRectOne; + ::ExtTextOut((HDC)windowDevice,tempRectOne.left+systemBorderDeltaTimesTwo(),tempRectOne.top, + ETO_OPAQUE|ETO_CLIPPED,&tempRectTwo,(LPSTR)mLastDisplayString,mLastDisplayString.length(),0); + ::SelectObject(windowDevice,hOldFont); + +// Rect bmRect(capLockLeft,clientRect.top+systemBorderDeltaTimesThree(),systemBorderDeltaTimesEight(),clientRect.bottom-systemBorderDeltaTimesTwo()); + Rect bmRect(capLockLeft,clientRect.top+systemBorderDeltaTimesThree(),numLockLeft+systemBorderDeltaTimesNine(),clientRect.bottom-systemBorderDeltaTimesTwo()); + + hTempBrush=::CreateSolidBrush(RGB(255,0,0)); + ::FillRect((HDC)windowDevice,(RECT FAR*)&bmRect,hTempBrush); + + + +// PureDevice memDevice(windowDevice); +// memDevice.select((GDIObj)mPureBitmap); +// windowDevice.stretchBlt(bmRect,memDevice,Rect(0,0,mPureBitmap.width(),mPureBitmap.height())); +} +#endif + + + + bmRect.right(bmRect.right()-bmRect.left()); + bmRect.bottom(bmRect.bottom()-bmRect.top()); +// PureDevice memDevice(windowDevice); +// memDevice.select((GDIObj)mPureBitmap); +// windowDevice.bitBlt(bmRect,memDevice,Point(0,0)); +// windowDevice.stretchBlt(bmRect,memDevice,Rect(0,0,mPureBitmap.width(),mPureBitmap.height())); + + + +// Rect paintRect(numLockLeft+systemBorderDeltaTimesNine()+stateInfoWidth()+1,clientRect.top+systemBorderDeltaTimesThree(),clientRect.right-systemBorderDeltaTimesNine(),clientRect.bottom-systemBorderDeltaTimesTwo()); +// paintRect.right(paintRect.right()-paintRect.left()); +// paintRect.bottom(paintRect.bottom()-paintRect.top()); + Rect paintRect; + getPostPaintRect(paintRect); + postPaint(windowDevice,paintRect); + + diff --git a/statbar/STATBAR.BAK b/statbar/STATBAR.BAK new file mode 100644 index 0000000..70ffab8 --- /dev/null +++ b/statbar/STATBAR.BAK @@ -0,0 +1,809 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=statbar - Win32 Debug +!MESSAGE No configuration specified. Defaulting to statbar - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "statbar - Win32 Release" && "$(CFG)" !=\ + "statbar - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "statbar.mak" CFG="statbar - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "statbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "statbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "statbar - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "statbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\statbar.lib" + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "$(OUTDIR)\statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/statbar.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"$(OUTDIR)\statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\statbar.lib" + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "..\exe\statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\statbar.lib" +LIB32_FLAGS=/nologo /out:"..\exe\statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"..\exe\statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "statbar - Win32 Release" +# Name "statbar - Win32 Debug" + +!IF "$(CFG)" == "statbar - Win32 Release" + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Statmenu.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATM=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATM=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Statinfo.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATI=\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statinfo.obj" : $(SOURCE) $(DEP_CPP_STATI) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATI=\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdio.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statinfo.obj" : $(SOURCE) $(DEP_CPP_STATI) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Statbar.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATB=\ + {$(INCLUDE)}"\.\Statbar.hpp"\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATB=\ + {$(INCLUDE)}"\.\Statbar.hpp"\ + {$(INCLUDE)}"\.\Statinfo.hpp"\ + {$(INCLUDE)}"\.\Statmenu.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Popup.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_POPUP=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Cguid.h"\ + {$(INCLUDE)}"\Commdlg.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Imm.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Mcx.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Mswsock.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Oaidl.h"\ + {$(INCLUDE)}"\Objbase.h"\ + {$(INCLUDE)}"\Objidl.h"\ + {$(INCLUDE)}"\Ole.h"\ + {$(INCLUDE)}"\Ole2.h"\ + {$(INCLUDE)}"\Oleauto.h"\ + {$(INCLUDE)}"\Oleidl.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Prsht.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Pshpack8.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcndr.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnsip.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Shellapi.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Unknwn.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Wincrypt.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winperf.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winsock.h"\ + {$(INCLUDE)}"\Winsock2.h"\ + {$(INCLUDE)}"\Winspool.h"\ + {$(INCLUDE)}"\Winsvc.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + {$(INCLUDE)}"\Wtypes.h"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_POPUP=\ + {$(INCLUDE)}"\.\Popup.hpp"\ + {$(INCLUDE)}"\Assert.h"\ + {$(INCLUDE)}"\Cderr.h"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Dwindow.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Menuitem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Puremenu.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Ctype.h"\ + {$(INCLUDE)}"\Dde.h"\ + {$(INCLUDE)}"\Ddeml.h"\ + {$(INCLUDE)}"\Dlgs.h"\ + {$(INCLUDE)}"\Excpt.h"\ + {$(INCLUDE)}"\Lzexpand.h"\ + {$(INCLUDE)}"\Memory.h"\ + {$(INCLUDE)}"\Mmsystem.h"\ + {$(INCLUDE)}"\Nb30.h"\ + {$(INCLUDE)}"\Poppack.h"\ + {$(INCLUDE)}"\Pshpack1.h"\ + {$(INCLUDE)}"\Pshpack2.h"\ + {$(INCLUDE)}"\Pshpack4.h"\ + {$(INCLUDE)}"\Rpc.h"\ + {$(INCLUDE)}"\Rpcdce.h"\ + {$(INCLUDE)}"\Rpcdcep.h"\ + {$(INCLUDE)}"\Rpcnsi.h"\ + {$(INCLUDE)}"\Rpcnterr.h"\ + {$(INCLUDE)}"\Stdarg.h"\ + {$(INCLUDE)}"\Stdlib.h"\ + {$(INCLUDE)}"\String.h"\ + {$(INCLUDE)}"\Winbase.h"\ + {$(INCLUDE)}"\Wincon.h"\ + {$(INCLUDE)}"\Windef.h"\ + {$(INCLUDE)}"\Windows.h"\ + {$(INCLUDE)}"\Windowsx.h"\ + {$(INCLUDE)}"\Winerror.h"\ + {$(INCLUDE)}"\Wingdi.h"\ + {$(INCLUDE)}"\Winnetwk.h"\ + {$(INCLUDE)}"\Winnls.h"\ + {$(INCLUDE)}"\Winnt.h"\ + {$(INCLUDE)}"\Winreg.h"\ + {$(INCLUDE)}"\Winuser.h"\ + {$(INCLUDE)}"\Winver.h"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/statbar/STATBAR.PLG b/statbar/STATBAR.PLG new file mode 100644 index 0000000..40bfc44 --- /dev/null +++ b/statbar/STATBAR.PLG @@ -0,0 +1,43 @@ + + +
+

Build Log

+

+--------------------Configuration: statbar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP10.tmp" with contents +[ +/nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"\work\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"F:\STATBAR\Popup.cpp" +"F:\STATBAR\Statbar.cpp" +"F:\STATBAR\statbarx.cpp" +"F:\STATBAR\Statinfo.cpp" +"F:\STATBAR\statlogo.cpp" +"F:\STATBAR\Statmenu.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP10.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\statbar.lib" .\msvcobj\Popup.obj .\msvcobj\Statbar.obj .\msvcobj\statbarx.obj .\msvcobj\Statinfo.obj .\msvcobj\statlogo.obj .\msvcobj\Statmenu.obj " +

Output Window

+Compiling... +Popup.cpp +F:\STATBAR\Popup.cpp(3) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Statbar.cpp +F:\STATBAR\Statbar.cpp(4) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +statbarx.cpp +F:\STATBAR\statbarx.cpp(3) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Statinfo.cpp +F:\STATBAR\Statinfo.cpp(5) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +statlogo.cpp +F:\STATBAR\statlogo.cpp(3) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Statmenu.cpp +F:\STATBAR\Statmenu.cpp(5) : fatal error C1083: Cannot open precompiled header file: '\work\exe\msvc42.pch': No such file or directory +Error executing cl.exe. + + + +

Results

+statbar.lib - 6 error(s), 0 warning(s) +
+ + diff --git a/statbar/STATINFO.CPP b/statbar/STATINFO.CPP new file mode 100644 index 0000000..a7cb5b6 --- /dev/null +++ b/statbar/STATINFO.CPP @@ -0,0 +1,36 @@ +#include +#include +#include + +StatusInfo::StatusInfo(void) +: mSystemBorderDelta(0), mSystemBorderDeltaTimesTwo(0), + mSystemBorderDeltaTimesThree(0), mSystemBorderDeltaTimesEight(0), + mSystemBorderDeltaTimesNine(0), mStatusBarHeight(0), mStatusInfoWidth(), + mStateInfoWidth(0), mhStatusBarFont(0), mWindowsVersion(WIN30) +{ + TEXTMETRIC tm; + WORD fontHeight; + HFONT hOldFont; + HDC hDC(::GetDC(0)); + DWORD windowsVersion; + + mSystemBorderDelta=::GetSystemMetrics(SM_CYBORDER); + mSystemBorderDeltaTimesTwo=mSystemBorderDelta*2; + mSystemBorderDeltaTimesThree=mSystemBorderDelta*3; + mSystemBorderDeltaTimesEight=mSystemBorderDelta*8; + mSystemBorderDeltaTimesNine=mSystemBorderDelta*9; + fontHeight=::MulDiv(12,::GetDeviceCaps(hDC,LOGPIXELSY),72); + mhStatusBarFont=::CreateFont(fontHeight,0,0,0,400,0,0,0, + ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY,VARIABLE_PITCH|FF_SWISS,"Helv"); + hOldFont=(HFONT)::SelectObject(hDC,mhStatusBarFont); + ::GetTextMetrics(hDC,&tm); + ::SelectObject(hDC,hOldFont); + ::ReleaseDC(NULL, hDC); + mStatusBarHeight=tm.tmHeight+tm.tmExternalLeading+(7*mSystemBorderDelta); + mStatusInfoWidth=tm.tmMaxCharWidth*21; + mStateInfoWidth=tm.tmMaxCharWidth*3; + windowsVersion=::GetVersion(); + if(LOWORD(windowsVersion)>=3&&HIWORD(windowsVersion)<10)mWindowsVersion=WIN30; + else mWindowsVersion=WIN3X; +} diff --git a/statbar/STATINFO.HPP b/statbar/STATINFO.HPP new file mode 100644 index 0000000..4d64dba --- /dev/null +++ b/statbar/STATINFO.HPP @@ -0,0 +1,102 @@ +#ifndef _STATBAR_STATUSINFO_HPP_ +#define _STATBAR_STATUSINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class StatusInfo +{ +public: + enum WinVer{WIN30,WIN3X}; + StatusInfo(void); + virtual ~StatusInfo(); + WORD systemBorderDelta(void)const; + WORD systemBorderDeltaTimesTwo(void)const; + WORD systemBorderDeltaTimesThree(void)const; + WORD systemBorderDeltaTimesEight(void)const; + WORD systemBorderDeltaTimesNine(void)const; + WORD statusBarHeight(void)const; + WORD statusInfoWidth(void)const; + WORD stateInfoWidth(void)const; + HFONT statusFont(void)const; + WinVer windowsVersion(void)const; +private: + WORD mSystemBorderDelta; // System border width/height + WORD mSystemBorderDeltaTimesTwo; // System border width/height*2 + WORD mSystemBorderDeltaTimesThree; // System border width/height*3 + WORD mSystemBorderDeltaTimesEight; // System border width/height*8 + WORD mSystemBorderDeltaTimesNine; // System border width/height*9 + WORD mStatusBarHeight; // Status bar height + WORD mStatusInfoWidth; // Width reserved for Status Info + WORD mStateInfoWidth; // Width reserved for State Info + HFONT mhStatusBarFont; // Font used in status bar + WinVer mWindowsVersion; // windows version number +}; + +inline +StatusInfo::~StatusInfo() +{ + if(mhStatusBarFont)::DeleteObject(mhStatusBarFont); +} + +inline +WORD StatusInfo:: systemBorderDelta(void)const +{ + return mSystemBorderDelta; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesTwo(void)const +{ + return mSystemBorderDeltaTimesTwo; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesThree(void)const +{ + return mSystemBorderDeltaTimesThree; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesEight(void)const +{ + return mSystemBorderDeltaTimesEight; +} + +inline +WORD StatusInfo::systemBorderDeltaTimesNine(void)const +{ + return mSystemBorderDeltaTimesNine; +} + +inline +WORD StatusInfo::statusBarHeight(void)const +{ + return mStatusBarHeight; +} + +inline +WORD StatusInfo::statusInfoWidth(void)const +{ + return mStatusInfoWidth; +} + +inline +WORD StatusInfo::stateInfoWidth(void)const +{ + return mStateInfoWidth; +} + +inline +StatusInfo::WinVer StatusInfo::windowsVersion(void)const +{ + return mWindowsVersion; +} + +inline +HFONT StatusInfo::statusFont(void)const +{ + return mhStatusBarFont; +} +#endif + diff --git a/statbar/STATLOGO.CPP b/statbar/STATLOGO.CPP new file mode 100644 index 0000000..59c0454 --- /dev/null +++ b/statbar/STATLOGO.CPP @@ -0,0 +1,19 @@ +#include + +void StatusBarLogo::postPaint(PureDevice &screenDevice,const Rect &paintRect) +{ + PureDevice memDevice(screenDevice); + memDevice.select((GDIObj)mPureBitmap); + if(mStretchBlt)screenDevice.stretchBlt(paintRect,memDevice,Rect(0,0,mPureBitmap.width(),mPureBitmap.height())); + else + { + if(!mCenterx&&!mCentery)screenDevice.bitBlt(paintRect,memDevice,Point(0,0)); + else + { + Rect bltRect(paintRect); + if(mCentery)bltRect.top(bltRect.top()+((paintRect.bottom()-mPureBitmap.height())/2)); + if(mCenterx)bltRect.left(bltRect.left()+((paintRect.right()-mPureBitmap.width())/2)); + screenDevice.bitBlt(bltRect,memDevice,Point(0,0)); + } + } +} diff --git a/statbar/STATLOGO.HPP b/statbar/STATLOGO.HPP new file mode 100644 index 0000000..4ec335c --- /dev/null +++ b/statbar/STATLOGO.HPP @@ -0,0 +1,59 @@ +#ifndef _STATBAR_STATUSBARLOGO_HPP_ +#define _STATBAR_STATUSBARLOGO_HPP_ +#ifndef _STATBAR_STATBAR_HPP_ +#include +#endif +#ifndef _COMMON_PUREBITMAP_HPP_ +#include +#endif + +class StatusBarLogo : public StatusBar +{ +public: + StatusBarLogo(GUIWindow &guiWindow,const String &nameBitmap,BOOL stretchBlt=TRUE); + virtual ~StatusBarLogo(); + void setBitmap(GUIWindow &guiWindow,const String &nameBitmap); + void centerxy(BOOL centerx,BOOL centery); + void stretchBlt(BOOL stretchBlt); +protected: + virtual void postPaint(PureDevice &screenDevice,const Rect &paintRect); +private: + PureBitmap mPureBitmap; + BOOL mStretchBlt; + BOOL mCentery; + BOOL mCenterx; +}; + +inline +StatusBarLogo::StatusBarLogo(GUIWindow &guiWindow,const String &nameBitmap,BOOL stretchBlt) +: StatusBar(guiWindow), mPureBitmap(nameBitmap,guiWindow.processInstance()), mStretchBlt(stretchBlt), + mCenterx(FALSE), mCentery(FALSE) +{ +} + +inline +StatusBarLogo::~StatusBarLogo() +{ +} + +inline +void StatusBarLogo::centerxy(BOOL centerx,BOOL centery) +{ + mCenterx=centerx; + mCentery=centery; +} + +inline +void StatusBarLogo::stretchBlt(BOOL stretchBlt) +{ + mStretchBlt=stretchBlt; +} + +inline +void StatusBarLogo::setBitmap(GUIWindow &guiWindow,const String &nameBitmap) +{ + mPureBitmap=PureBitmap(nameBitmap,guiWindow.processInstance()); + PureDevice screenDevice(guiWindow); + postPaint(screenDevice,postPaintRect()); +} +#endif diff --git a/statbar/STATMENU.CPP b/statbar/STATMENU.CPP new file mode 100644 index 0000000..1b78a73 --- /dev/null +++ b/statbar/STATMENU.CPP @@ -0,0 +1,146 @@ +#include +#include +#include + +StatusBarMenu::StatusBarMenu(void) +{ +} + +StatusBarMenu::StatusBarMenu(const StatusBarMenu &someStatusBarMenu) +{ // private implementation + *this=someStatusBarMenu; +} + +StatusBarMenu::StatusBarMenu(const GUIWindow &someGUIWindow) +: mTopLevelMenu(someGUIWindow.getMenu()) +{ + sizeMenuItems(mTopLevelMenu); +} + +StatusBarMenu::~StatusBarMenu() +{ +} + +StatusBarMenu &StatusBarMenu::operator=(const GUIWindow &someGUIWindow) +{ + mTopLevelMenu=someGUIWindow.getMenu(); + sizeMenuItems(mTopLevelMenu); + return *this; +} + +StatusBarMenu &StatusBarMenu::operator=(const PureMenu &somePureMenu) +{ + mTopLevelMenu=(HMENU)somePureMenu; + sizeMenuItems(mTopLevelMenu); + return *this; +} + +StatusBarMenu &StatusBarMenu::operator=(const StatusBarMenu &/*someStatusBarMenu*/) +{ + return *this; +} + +void StatusBarMenu::sizeMenuItems(HMENU hTopLevelMenu) +{ + WORD menuItems(::GetMenuItemCount(mTopLevelMenu=hTopLevelMenu)); + + if(0xFFFF==menuItems||!menuItems)return; + mPopUpMenu.size(menuItems); + for(int i=0;i &menuLabels) +{ + size_t labelItems((WORD)menuLabels.size()); + size_t menuItems((WORD)mPopUpMenu.size()); + + for(int itemIndex=0;itemIndex=labelItems)return FALSE; + if(itemIndex>=menuItems)return FALSE; + String menuLabelString=menuLabels[itemIndex]; + mPopUpMenu[itemIndex].menuLabel(menuLabelString); + } + return TRUE; +} + +WORD StatusBarMenu::setMenuItemDescriptors(Block &menuItems) +{ + size_t size((WORD)menuItems.size()); + WORD returnCode(0); + + for(int i=0;i +#endif +#ifndef _COMMON_PUREMENU_HPP_ +#include +#endif +#ifndef _STATBAR_POPUPMENU_HPP_ +#include +#endif + +class Window; +template +class Block; + +class StatusBarMenu +{ +public: + StatusBarMenu(void); + StatusBarMenu(const GUIWindow &someGUIWindow); + virtual ~StatusBarMenu(); + StatusBarMenu &operator=(const GUIWindow &someGUIWindow); + StatusBarMenu &operator=(const PureMenu &somePureMenu); + WORD setMenuItemDescriptor(const MenuItem &someMenuItem); + WORD setMenuLabelDescriptors(Block &menuLabels); + WORD getMenuItemDescriptor(MenuItem &menuItem); + WORD getMenuItemDescriptor(PureMenu &somePureMenu,MenuItem &menuItem); +private: + StatusBarMenu(const StatusBarMenu &someStatusBarMenu); + StatusBarMenu &operator=(const StatusBarMenu &someStatusBarMenu); + void sizeMenuItems(HMENU hTopLevelMenu); + WORD setMenuItemDescriptors(Block &menuItems); + + PureMenu mTopLevelMenu; + Array mPopUpMenu; +}; +#endif diff --git a/statbar/Statbar.001 b/statbar/Statbar.001 new file mode 100644 index 0000000..7b85246 --- /dev/null +++ b/statbar/Statbar.001 @@ -0,0 +1,130 @@ +# Microsoft Developer Studio Project File - Name="statbar" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=statbar - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Statbar.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Statbar.mak" CFG="statbar - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "statbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "statbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "statbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"\work\exe\msvc42.pch" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\statbar.lib" + +!ENDIF + +# Begin Target + +# Name "statbar - Win32 Release" +# Name "statbar - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Popup.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statbar.cpp +# End Source File +# Begin Source File + +SOURCE=.\statbarx.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\statlogo.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statmenu.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Popup.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statbar.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statmenu.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/statbar/Statbar.cpp b/statbar/Statbar.cpp new file mode 100644 index 0000000..d4c0430 --- /dev/null +++ b/statbar/Statbar.cpp @@ -0,0 +1,460 @@ +#include +#include + +StatusBar::StatusBar(Window &mainWindow) +: mDisplayWindow(mainWindow), mLastCapLockState(FALSE), mLastNumLockState(FALSE), mLastItemID(-1), + mCapLockString("CAPS"), mNumLockString("NUM"), mBlankString(" "), mKeyDownState(FALSE), + StatusBarMenu(mainWindow), mLastDisplayString(mBlankString) +{ + mPaintCallback.setCallback(this,&StatusBar::paintHandler); + mSetFocusCallback.setCallback(this,&StatusBar::setFocusHandler); + mKeyUpCallback.setCallback(this,&StatusBar::keyUpHandler); + mKeyDownCallback.setCallback(this,&StatusBar::keyDownHandler); + mSizeCallback.setCallback(this,&StatusBar::sizeHandler); + mMinMaxCallback.setCallback(this,&StatusBar::minMaxHandler); + mMenuSelectCallback.setCallback(this,&StatusBar::menuSelectHandler); + mDestroyCallback.setCallback(this,&StatusBar::destroyHandler); + mDisplayWindow.insertHandler(VectorHandler::PaintHandler,&mPaintCallback,VectorHandler::FirstHandler); + mDisplayWindow.insertHandler(VectorHandler::SetFocusHandler,&mSetFocusCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyUpHandler,&mKeyUpCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyDownHandler,&mKeyDownCallback); + mDisplayWindow.insertHandler(VectorHandler::SizeHandler,&mSizeCallback); + mDisplayWindow.insertHandler(VectorHandler::MinMaxHandler,&mMinMaxCallback); + mDisplayWindow.insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectCallback); + mDisplayWindow.insertHandler(VectorHandler::DestroyHandler,&mDestroyCallback); + ::InvalidateRect(mainWindow,0,TRUE); +} + +StatusBar::StatusBar(GUIWindow &guiWindow) +: mDisplayWindow(guiWindow), mLastCapLockState(FALSE), mLastNumLockState(FALSE), mLastItemID(-1), + mCapLockString("CAPS"), mNumLockString("NUM"), mBlankString(" "), mKeyDownState(FALSE), + StatusBarMenu(guiWindow), mLastDisplayString(mBlankString) +{ + mSetFocusCallback.setCallback(this,&StatusBar::setFocusHandler); + mKeyUpCallback.setCallback(this,&StatusBar::keyUpHandler); + mKeyDownCallback.setCallback(this,&StatusBar::keyDownHandler); + mSizeCallback.setCallback(this,&StatusBar::sizeHandler); + mMinMaxCallback.setCallback(this,&StatusBar::minMaxHandler); + mMenuSelectCallback.setCallback(this,&StatusBar::menuSelectHandler); + mDestroyCallback.setCallback(this,&StatusBar::destroyHandler); + mPaintCallback.setCallback(this,&StatusBar::paintHandler); + mDisplayWindow.insertHandler(VectorHandler::PaintHandler,&mPaintCallback,VectorHandler::FirstHandler); + mDisplayWindow.insertHandler(VectorHandler::SetFocusHandler,&mSetFocusCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyUpHandler,&mKeyUpCallback); + mDisplayWindow.insertHandler(VectorHandler::KeyDownHandler,&mKeyDownCallback); + mDisplayWindow.insertHandler(VectorHandler::SizeHandler,&mSizeCallback); + mDisplayWindow.insertHandler(VectorHandler::MinMaxHandler,&mMinMaxCallback); + mDisplayWindow.insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectCallback); + mDisplayWindow.insertHandler(VectorHandler::DestroyHandler,&mDestroyCallback); + ::InvalidateRect(guiWindow,0,TRUE); +} + +StatusBar::~StatusBar() +{ + removeHandlers(); +} + +CallbackData::ReturnType StatusBar::keyUpHandler(CallbackData &/*someCallbackData*/) +{ + mKeyDownState=FALSE; + return (CallbackData::ReturnType)0; +} + +CallbackData::ReturnType StatusBar::keyDownHandler(CallbackData &someCallbackData) +{ + if(!mKeyDownState) + { + if(VK_CAPITAL==someCallbackData.wParam())setCapLockText(); + else if(VK_NUMLOCK==someCallbackData.wParam())setNumLockText(); + mKeyDownState=TRUE; + } + return (CallbackData::ReturnType)0; +} + +CallbackData::ReturnType StatusBar::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + setCapLockText(); + setNumLockText(); + return (CallbackData::ReturnType)0; +} + +CallbackData::ReturnType StatusBar::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + return (CallbackData::ReturnType)0; +} + +void StatusBar::removeHandlers(void) +{ + mDisplayWindow.removeHandler(VectorHandler::PaintHandler,&mPaintCallback); + mDisplayWindow.removeHandler(VectorHandler::SetFocusHandler,&mSetFocusCallback); + mDisplayWindow.removeHandler(VectorHandler::KeyUpHandler,&mKeyUpCallback); + mDisplayWindow.removeHandler(VectorHandler::KeyDownHandler,&mKeyDownCallback); + mDisplayWindow.removeHandler(VectorHandler::SizeHandler,&mSizeCallback); + mDisplayWindow.removeHandler(VectorHandler::MinMaxHandler,&mMinMaxCallback); + mDisplayWindow.removeHandler(VectorHandler::MenuSelectHandler,&mMenuSelectCallback); + mDisplayWindow.removeHandler(VectorHandler::DestroyHandler,&mDestroyCallback); +} + +void StatusBar::setCapLockText(void) +{ + RECT clientRect; + RECT tempRectOne; + RECT tempRectTwo; + HFONT hOldFont; + String tempString; + PureDevice windowDevice; + WORD capLockLeft; + + if(::GetKeyState(VK_CAPITAL)&0x0001) + { + if(TRUE==mLastCapLockState)return; + mLastCapLockState=TRUE; + tempString=mCapLockString; + } + else + { + if(FALSE==mLastCapLockState)return; + mLastCapLockState=FALSE; + tempString=mBlankString; + } + windowDevice=mDisplayWindow; + ::GetClientRect(mDisplayWindow,(RECT FAR*)&clientRect); + clientRect.top=clientRect.bottom-statusBarHeight(); + capLockLeft=clientRect.left+systemBorderDeltaTimesNine()+statusInfoWidth(); + hOldFont=(HFONT)::SelectObject((HDC)windowDevice,statusFont()); + ::SetTextColor((HDC)windowDevice,::GetSysColor(COLOR_BTNTEXT)); + ::SetBkColor((HDC)windowDevice,::GetSysColor(COLOR_BTNFACE)); + tempRectOne.top=clientRect.top+systemBorderDelta()*4; + tempRectOne.bottom=clientRect.bottom-systemBorderDeltaTimesThree(); + tempRectOne.left=capLockLeft+systemBorderDeltaTimesNine(); + tempRectOne.right=tempRectOne.left+stateInfoWidth()-systemBorderDelta(); + tempRectTwo=tempRectOne; + ::ExtTextOut((HDC)windowDevice,tempRectOne.left+systemBorderDeltaTimesTwo(),tempRectOne.top, + ETO_OPAQUE|ETO_CLIPPED,&tempRectTwo,(LPSTR)tempString,tempString.length(),0); + ::SelectObject((HDC)windowDevice,hOldFont); +} + +void StatusBar::setNumLockText(void) +{ + RECT clientRect; + RECT tempRectOne; + RECT tempRectTwo; + HFONT hOldFont; + WORD numLockLeft; + WORD capLockLeft; + PureDevice windowDevice; + String tempString; + + if(::GetKeyState(VK_NUMLOCK)&0x0001) + { + if(TRUE==mLastNumLockState)return; + mLastNumLockState=TRUE; + tempString=mNumLockString; + } + else + { + if(FALSE==mLastNumLockState)return; + mLastNumLockState=FALSE; + tempString=mBlankString; + } + windowDevice=mDisplayWindow; + ::GetClientRect(mDisplayWindow,(RECT FAR*)&clientRect); + clientRect.top=clientRect.bottom-statusBarHeight(); + capLockLeft=clientRect.left+systemBorderDeltaTimesNine()+statusInfoWidth(); + numLockLeft=capLockLeft+systemBorderDeltaTimesNine()+stateInfoWidth(); + hOldFont=(HFONT)::SelectObject((HDC)windowDevice,statusFont()); + ::SetTextColor((HDC)windowDevice,::GetSysColor(COLOR_BTNTEXT)); + ::SetBkColor((HDC)windowDevice,::GetSysColor(COLOR_BTNFACE)); + tempRectOne.top=clientRect.top+systemBorderDelta()*4; + tempRectOne.bottom=clientRect.bottom-systemBorderDeltaTimesThree(); + tempRectOne.left=numLockLeft+systemBorderDeltaTimesNine(); + tempRectOne.right=tempRectOne.left+stateInfoWidth()-systemBorderDelta(); + tempRectTwo=tempRectOne; + ::ExtTextOut((HDC)windowDevice,tempRectOne.left+systemBorderDeltaTimesTwo(), + tempRectOne.top,ETO_OPAQUE | ETO_CLIPPED,&tempRectTwo,(LPSTR)tempString,tempString.length(),0); + ::SelectObject(windowDevice,hOldFont); +} + +CallbackData::ReturnType StatusBar::sizeHandler(CallbackData &/*someCallbackData*/) +{ + RECT clientRect; + + ::GetClientRect(mDisplayWindow,(RECT FAR*)&clientRect); + clientRect.top=clientRect.bottom-statusBarHeight(); + if(clientRect.top menuLabels; + + for(int itemIndex=0;itemIndex +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=statbar - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Statbar.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Statbar.mak" CFG="statbar - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "statbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "statbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "statbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /Zi /Od /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"\work\exe\msvc42.pch" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\statbar.lib" + +!ENDIF + +# Begin Target + +# Name "statbar - Win32 Release" +# Name "statbar - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Popup.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statbar.cpp +# End Source File +# Begin Source File + +SOURCE=.\statbarx.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\statlogo.cpp +# End Source File +# Begin Source File + +SOURCE=.\Statmenu.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Popup.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statbar.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Statmenu.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/statbar/Statbar.hpp b/statbar/Statbar.hpp new file mode 100644 index 0000000..9363217 --- /dev/null +++ b/statbar/Statbar.hpp @@ -0,0 +1,63 @@ +#ifndef _STATBAR_STATBAR_HPP_ +#define _STATBAR_STATBAR_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSINFO_HPP_ +#include +#endif +#ifndef _STATBAR_STATBARMENU_HPP_ +#include +#endif + +class StatusBar : public StatusBarMenu, public StatusInfo +{ +public: + StatusBar(Window &mainWindow); + StatusBar(GUIWindow &guiWindow); + virtual ~StatusBar(); + WORD setSequentialResourceDescriptors(UINT menuId,UINT stringID,WORD itemCount); + WORD setSequentialResourceLabels(UINT stringID,WORD itemCount); + void setText(const String &displayString); +protected: + virtual void postPaint(PureDevice &screenDevice,const Rect &paintRect); + Rect postPaintRect(void)const; +private: + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyUpHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType minMaxHandler(CallbackData &someCallbackData); + CallbackData::ReturnType menuSelectHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + void removeHandlers(void); + void setStatBarText(int itemID,WORD redrawFlag); + void setStatBarText(PureMenu &somePureMenu,WORD redrawFlag); + void setCapLockText(void); + void setNumLockText(void); + void paintBar(void); + + Callback mPaintCallback; + Callback mSetFocusCallback; + Callback mKeyUpCallback; + Callback mKeyDownCallback; + Callback mSizeCallback; + Callback mMinMaxCallback; + Callback mMenuSelectCallback; + Callback mDestroyCallback; + GUIWindow &mDisplayWindow; + String mCapLockString; + String mNumLockString; + String mBlankString; + String mLastDisplayString; + WORD mLastCapLockState; + WORD mLastNumLockState; + int mLastItemID; + WORD mKeyDownState; + RECT mStatRectSizeAdv; +}; +#endif diff --git a/statbar/Statbar.mak b/statbar/Statbar.mak new file mode 100644 index 0000000..ab2bab6 --- /dev/null +++ b/statbar/Statbar.mak @@ -0,0 +1,634 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on Statbar.dsp +!IF "$(CFG)" == "" +CFG=statbar - Win32 Release +!MESSAGE No configuration specified. Defaulting to statbar - Win32 Release. +!ENDIF + +!IF "$(CFG)" != "statbar - Win32 Release" && "$(CFG)" !=\ + "statbar - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Statbar.mak" CFG="statbar - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "statbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "statbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +!IF "$(CFG)" == "statbar - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\Statbar.lib" + +!ELSE + +ALL : "$(OUTDIR)\Statbar.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\statbarx.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\statlogo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\Statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\Statbar.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\Statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"$(OUTDIR)\Statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\statbarx.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\statlogo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"$(OUTDIR)\Statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +!IF "$(RECURSE)" == "0" + +ALL : "..\exe\statbar.lib" + +!ELSE + +ALL : "..\exe\statbar.lib" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\Popup.obj" + -@erase "$(INTDIR)\Statbar.obj" + -@erase "$(INTDIR)\statbarx.obj" + -@erase "$(INTDIR)\Statinfo.obj" + -@erase "$(INTDIR)\statlogo.obj" + -@erase "$(INTDIR)\Statmenu.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "..\exe\statbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP=cl.exe +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo"$(INTDIR)\\"\ + /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\Statbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +LIB32_FLAGS=/nologo /out:"..\exe\statbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\Popup.obj" \ + "$(INTDIR)\Statbar.obj" \ + "$(INTDIR)\statbarx.obj" \ + "$(INTDIR)\Statinfo.obj" \ + "$(INTDIR)\statlogo.obj" \ + "$(INTDIR)\Statmenu.obj" + +"..\exe\statbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + + +!IF "$(CFG)" == "statbar - Win32 Release" || "$(CFG)" ==\ + "statbar - Win32 Debug" +SOURCE=.\Popup.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_POPUP=\ + ".\Popup.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_POPUP=\ + ".\Popup.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Popup.obj" : $(SOURCE) $(DEP_CPP_POPUP) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Statbar.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATB=\ + ".\Popup.hpp"\ + ".\Statbar.hpp"\ + ".\Statinfo.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATB=\ + ".\Popup.hpp"\ + ".\Statbar.hpp"\ + ".\Statinfo.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Statbar.obj" : $(SOURCE) $(DEP_CPP_STATB) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\statbarx.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATBA=\ + ".\Popup.hpp"\ + ".\statbarx.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\statbarx.obj" : $(SOURCE) $(DEP_CPP_STATBA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATBA=\ + ".\Popup.hpp"\ + ".\statbarx.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\commctrl.hpp"\ + {$(INCLUDE)}"common\control.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\status.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\statbarx.obj" : $(SOURCE) $(DEP_CPP_STATBA) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Statinfo.cpp +DEP_CPP_STATI=\ + ".\Statinfo.hpp"\ + {$(INCLUDE)}"common\stdio.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\Statinfo.obj" : $(SOURCE) $(DEP_CPP_STATI) "$(INTDIR)" + + +SOURCE=.\statlogo.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATL=\ + ".\Popup.hpp"\ + ".\Statbar.hpp"\ + ".\Statinfo.hpp"\ + ".\statlogo.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\statlogo.obj" : $(SOURCE) $(DEP_CPP_STATL) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATL=\ + ".\Popup.hpp"\ + ".\Statbar.hpp"\ + ".\Statinfo.hpp"\ + ".\statlogo.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\assert.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdata.hpp"\ + {$(INCLUDE)}"common\gdata.tpp"\ + {$(INCLUDE)}"common\gdiobj.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\pen.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\purebmp.hpp"\ + {$(INCLUDE)}"common\purehdc.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\rgbcolor.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\statlogo.obj" : $(SOURCE) $(DEP_CPP_STATL) "$(INTDIR)" + + +!ENDIF + +SOURCE=.\Statmenu.cpp + +!IF "$(CFG)" == "statbar - Win32 Release" + +DEP_CPP_STATM=\ + ".\Popup.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "statbar - Win32 Debug" + +DEP_CPP_STATM=\ + ".\Popup.hpp"\ + ".\Statmenu.hpp"\ + {$(INCLUDE)}"common\block.hpp"\ + {$(INCLUDE)}"common\block.tpp"\ + {$(INCLUDE)}"common\callback.hpp"\ + {$(INCLUDE)}"common\callback.tpp"\ + {$(INCLUDE)}"common\cbdata.hpp"\ + {$(INCLUDE)}"common\cbptr.hpp"\ + {$(INCLUDE)}"common\dwindow.hpp"\ + {$(INCLUDE)}"common\except.hpp"\ + {$(INCLUDE)}"common\fixup.hpp"\ + {$(INCLUDE)}"common\gdipoint.hpp"\ + {$(INCLUDE)}"common\guiwnd.hpp"\ + {$(INCLUDE)}"common\menuitem.hpp"\ + {$(INCLUDE)}"common\pcallbck.hpp"\ + {$(INCLUDE)}"common\point.hpp"\ + {$(INCLUDE)}"common\puremenu.hpp"\ + {$(INCLUDE)}"common\pvector.hpp"\ + {$(INCLUDE)}"common\pvector.tpp"\ + {$(INCLUDE)}"common\rect.hpp"\ + {$(INCLUDE)}"common\stdlib.hpp"\ + {$(INCLUDE)}"common\string.hpp"\ + {$(INCLUDE)}"common\types.hpp"\ + {$(INCLUDE)}"common\vhandler.hpp"\ + {$(INCLUDE)}"common\window.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + {$(INCLUDE)}"common\windowsx.hpp"\ + + +"$(INTDIR)\Statmenu.obj" : $(SOURCE) $(DEP_CPP_STATM) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/statbar/statbar.dsw b/statbar/statbar.dsw new file mode 100644 index 0000000..20ec670 --- /dev/null +++ b/statbar/statbar.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "statbar"=.\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/statbar/statbar.mdp b/statbar/statbar.mdp new file mode 100644 index 0000000..74cbe5e Binary files /dev/null and b/statbar/statbar.mdp differ diff --git a/statbar/statbarx.cpp b/statbar/statbarx.cpp new file mode 100644 index 0000000..f04219d --- /dev/null +++ b/statbar/statbarx.cpp @@ -0,0 +1,114 @@ +#include + +StatusBarEx::StatusBarEx(GUIWindow &frameWindow,GUIWindow &clientWindow,UINT controlID) +: StatusBarMenu(frameWindow), mParentWindow(&frameWindow), mClientWindow(&clientWindow) +{ + mMenuSelectHandler.setCallback(this,&StatusBarEx::menuSelectHandler); + mSizeHandler.setCallback(this,&StatusBarEx::sizeHandler); + mParentWindow->insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectHandler); + mParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + createControl("",*mParentWindow,controlID); +} + +StatusBarEx::StatusBarEx(GUIWindow &parentWindow,UINT controlID) +: StatusBarMenu(parentWindow), mParentWindow(&parentWindow) +{ + mMenuSelectHandler.setCallback(this,&StatusBarEx::menuSelectHandler); + mSizeHandler.setCallback(this,&StatusBarEx::sizeHandler); + mParentWindow->insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectHandler); + mParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + createControl("",*mParentWindow,controlID); +} + +StatusBarEx::~StatusBarEx() +{ + mParentWindow->removeHandler(VectorHandler::MenuSelectHandler,&mMenuSelectHandler); + mParentWindow->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); +} + +StatusBarEx &StatusBarEx::operator=(const StatusBarEx &someStatusBarEx) +{ // private implementation + return *this; +} + +StatusBarEx &StatusBarEx::operator=(const GUIWindow &someGUIWindow) +{ + (StatusBarMenu&)*this=someGUIWindow; + return *this; +} + +StatusBarEx &StatusBarEx::operator=(const PureMenu &somePureMenu) +{ + (StatusBarMenu&)*this=somePureMenu; + return *this; +} + +CallbackData::ReturnType StatusBarEx::sizeHandler(CallbackData &someCallbackData) +{ + moveWindow(0,0,0,0); + return (CallbackData::ReturnType)TRUE; +} + +CallbackData::ReturnType StatusBarEx::menuSelectHandler(CallbackData &someCallbackData) +{ + UINT itemID(someCallbackData.menuSelectID()); + WORD menuFlags(someCallbackData.menuSelectFlags()); + HMENU hMenu(someCallbackData.menuSelectMenu()); + + if((0==hMenu&&0xFFFF==menuFlags)||!itemID){setText(" ");return (CallbackData::ReturnType)0;} + if(menuFlags&MF_POPUP)setStatBarText(PureMenu(someCallbackData.menuSelectIDPopup()),TRUE); + else if(!setStatBarText(itemID,TRUE)) + { + PureMenu pureMenu(hMenu); + setText(pureMenu.menuItemString(itemID,PureMenu::ByCommand)); + } + return (CallbackData::ReturnType)FALSE; +} + +BOOL StatusBarEx::setSequentialResourceDescriptors(UINT menuID,UINT stringID,WORD itemCount) +{ + for(int i=0;i menuLabels; + + for(int itemIndex=0;itemIndex +#endif +#ifndef _COMMON_STATUSWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _STATBAR_STATBARMENU_HPP_ +#include +#endif + +class StatusBarEx : public StatusControl, public StatusBarMenu +{ +public: + StatusBarEx(GUIWindow &parentWindow,UINT controlID); + StatusBarEx(GUIWindow &frameWindow,GUIWindow &clientWindow,UINT controlID); + virtual ~StatusBarEx(); + StatusBarEx &operator=(const GUIWindow &someGUIWindow); + StatusBarEx &operator=(const PureMenu &somePureMenu); + BOOL setSequentialResourceDescriptors(UINT menuId,UINT stringID,WORD itemCount); + BOOL setSequentialResourceLabels(UINT stringID,WORD itemCount); + void setText(const String &strText); + void setText(const String &strText,UINT partIndex); +private: + StatusBarEx &operator=(const StatusBarEx &someStatusBarEx); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType menuSelectHandler(CallbackData &someCallbackData); + + BOOL setStatBarText(PureMenu &somePureMenu,WORD redrawFlag); + BOOL setStatBarText(int itemID,WORD redrawFlag); + + Callback mMenuSelectHandler; + Callback mSizeHandler; + SmartPointer mParentWindow; + SmartPointer mClientWindow; +}; +#endif \ No newline at end of file diff --git a/sytrus/Debug/sytrus.dll b/sytrus/Debug/sytrus.dll new file mode 100644 index 0000000..b49a978 Binary files /dev/null and b/sytrus/Debug/sytrus.dll differ diff --git a/sytrus/Debug/sytrus.exp b/sytrus/Debug/sytrus.exp new file mode 100644 index 0000000..a2dc024 Binary files /dev/null and b/sytrus/Debug/sytrus.exp differ diff --git a/sytrus/Debug/sytrus.ilk b/sytrus/Debug/sytrus.ilk new file mode 100644 index 0000000..a2578a0 Binary files /dev/null and b/sytrus/Debug/sytrus.ilk differ diff --git a/sytrus/Debug/sytrus.lib b/sytrus/Debug/sytrus.lib new file mode 100644 index 0000000..3ab1c1a Binary files /dev/null and b/sytrus/Debug/sytrus.lib differ diff --git a/sytrus/Debug/sytrus.pdb b/sytrus/Debug/sytrus.pdb new file mode 100644 index 0000000..1aea6f8 Binary files /dev/null and b/sytrus/Debug/sytrus.pdb differ diff --git a/sytrus/Debug/vc60.idb b/sytrus/Debug/vc60.idb new file mode 100644 index 0000000..f571c89 Binary files /dev/null and b/sytrus/Debug/vc60.idb differ diff --git a/sytrus/Debug/vc60.pdb b/sytrus/Debug/vc60.pdb new file mode 100644 index 0000000..7cff18d Binary files /dev/null and b/sytrus/Debug/vc60.pdb differ diff --git a/sytrus/sytrus.cpp b/sytrus/sytrus.cpp new file mode 100644 index 0000000..6bbd29e --- /dev/null +++ b/sytrus/sytrus.cpp @@ -0,0 +1,33 @@ +#include + +extern "C" +{ +BOOL _stdcall DllMain(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/); +} +void messageBox(char *message,char *title); +__declspec(dllexport) void CreatePlugInstance(void); + + +BOOL _stdcall DllMain(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : + messageBox("process attach","sytrus"); + break; + case DLL_PROCESS_DETACH : + messageBox("process detach","sytrus"); + break; + } + return TRUE; +} + +void CreatePlugInstance(void) +{ + messageBox("Create Plug Instance","sytrus"); +} + +void messageBox(char *message,char *title) +{ + ::MessageBox(::GetFocus(),message,title,MB_OK); +} diff --git a/sytrus/sytrus.dsp b/sytrus/sytrus.dsp new file mode 100644 index 0000000..a40bf9c --- /dev/null +++ b/sytrus/sytrus.dsp @@ -0,0 +1,105 @@ +# Microsoft Developer Studio Project File - Name="sytrus" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=sytrus - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sytrus.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sytrus.mak" CFG="sytrus - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sytrus - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "sytrus - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sytrus - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYTRUS_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYTRUS_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 + +!ELSEIF "$(CFG)" == "sytrus - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYTRUS_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SYTRUS_EXPORTS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "sytrus - Win32 Release" +# Name "sytrus - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\sytrus.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/sytrus/sytrus.dsw b/sytrus/sytrus.dsw new file mode 100644 index 0000000..03b1812 --- /dev/null +++ b/sytrus/sytrus.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "sytrus"=.\sytrus.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/sytrus/sytrus.ncb b/sytrus/sytrus.ncb new file mode 100644 index 0000000..c408774 Binary files /dev/null and b/sytrus/sytrus.ncb differ diff --git a/sytrus/sytrus.opt b/sytrus/sytrus.opt new file mode 100644 index 0000000..c993632 Binary files /dev/null and b/sytrus/sytrus.opt differ diff --git a/sytrus/sytrus.plg b/sytrus/sytrus.plg new file mode 100644 index 0000000..266f8ee --- /dev/null +++ b/sytrus/sytrus.plg @@ -0,0 +1,24 @@ + + +
+

Build Log

+

+--------------------Configuration: sytrus - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP7C.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/sytrus.pdb" /debug /machine:I386 /out:"Debug/sytrus.dll" /implib:"Debug/sytrus.lib" /pdbtype:sept +.\Debug\sytrus.obj +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP7C.tmp" +

Output Window

+Linking... + + + +

Results

+sytrus.dll - 0 error(s), 0 warning(s) +
+ + diff --git a/test/ABORTDLG.HPP b/test/ABORTDLG.HPP new file mode 100644 index 0000000..09f75cc --- /dev/null +++ b/test/ABORTDLG.HPP @@ -0,0 +1,57 @@ +#ifndef _TEST_ABORTDLG_HPP_ +#define _TEST_ABORTDLG_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif + +class AbortDlg : private DynamicDialog +{ +public: + AbortDlg(void); + virtual ~AbortDlg(); + void perform(GUIWindow &parentWindow); + BOOL isDestroyed(void)const; + BOOL isCancelled(void)const; + void destroy(void); + void yieldTask(void); +protected: + virtual void init(void); +private: + AbortDlg(const AbortDlg &AbortDlg); + AbortDlg &operator=(const AbortDlg &AbortDlg); + void create(GUIWindow &parentWindow); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + + BOOL mIsDestroyed; + BOOL mIsCancelled; +}; + +inline +BOOL AbortDlg::isDestroyed(void)const +{ + return mIsDestroyed; +} + +inline +BOOL AbortDlg::isCancelled(void)const +{ + return mIsCancelled; +} + +inline +void AbortDlg::destroy(void) +{ + GUIWindow::destroy(); +} + +inline +void AbortDlg::yieldTask(void) +{ + GUIWindow::yieldTask(); +} +#endif diff --git a/test/ATOM.HPP b/test/ATOM.HPP new file mode 100644 index 0000000..38b662e --- /dev/null +++ b/test/ATOM.HPP @@ -0,0 +1,109 @@ +#ifndef _TEST_ATOM_HPP_ +#define _TEST_ATOM_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Atom +{ +public: + Atom(void); + virtual ~Atom(); + BOOL operator==(const Atom &someAtom)const; + BOOL create(const String &strAtomName); + BOOL assume(const String &strAtomName); + BOOL getName(String &strAtomName)const; + BOOL isOkay(void)const; + void destroy(void); +private: + enum Disposition{Assume,Destroy,None}; + enum {MaxString=256}; + Atom(const Atom &someAtom); + Atom &operator=(const Atom &someAtom); + Disposition disposition(void)const; + void disposition(Disposition disposition); + + ATOM mhAtom; + Disposition mDisposition; +}; + +inline +Atom::Atom(void) +: mhAtom(0), mDisposition(None) +{ +} + +inline +Atom::Atom(const Atom &someAtom) +{ // private implementation + *this=someAtom; +} + +inline +Atom::~Atom() +{ + destroy(); +} + +inline +Atom &Atom::operator=(const Atom &someAtom) +{ // private implementation + return *this; +} + +inline +BOOL Atom::operator==(const Atom &someAtom)const +{ + return mhAtom==someAtom.mhAtom; +} + +inline +BOOL Atom::create(const String &strAtomName) +{ + destroy(); + mhAtom=::GlobalAddAtom((LPSTR)(String&)strAtomName); + mDisposition=Destroy; + return isOkay(); +} + +inline +BOOL Atom::assume(const String &strAtomName) +{ + destroy(); + if(strAtomName.isNull())return FALSE; + mhAtom=::GlobalFindAtom((LPSTR)(String&)strAtomName); + if(!isOkay())return FALSE; + mDisposition=Assume; + return TRUE; +} + +inline +void Atom::destroy(void) +{ + if(!isOkay())return; + ::GlobalDeleteAtom(mhAtom); + mhAtom=0; + mDisposition=None; +} + +inline +BOOL Atom::getName(String &strAtomName)const +{ + String varAtomName; + + if(!isOkay())return FALSE; + varAtomName.reserve(MaxString); + if(!::GlobalGetAtomName(mhAtom,varAtomName,MaxString))return FALSE; + strAtomName=varAtomName; + return !(strAtomName.isNull()); +} + +inline +BOOL Atom::isOkay(void)const +{ + return (mhAtom?TRUE:FALSE); +} +#endif \ No newline at end of file diff --git a/test/Abortdlg.cpp b/test/Abortdlg.cpp new file mode 100644 index 0000000..b07b966 --- /dev/null +++ b/test/Abortdlg.cpp @@ -0,0 +1,82 @@ +#include +#include + +AbortDlg::AbortDlg(void) +: mIsDestroyed(FALSE), mIsCancelled(FALSE) +{ +} + +AbortDlg::AbortDlg(const AbortDlg &someAbortDlg) +{ // private implementation + *this=someAbortDlg; +} + +AbortDlg::~AbortDlg() +{ + destroy(); +} + +AbortDlg &AbortDlg::operator=(const AbortDlg &someAbortDlg) +{ // private implementation + return *this; +} + +void AbortDlg::perform(GUIWindow &parentWindow) +{ + mIsDestroyed=FALSE; + mIsCancelled=FALSE; + create(parentWindow); +} + +void AbortDlg::create(GUIWindow &parentWindow) +{ + String buttonName("BUTTON"); + + DialogTemplate dlgTemplate; + DialogItemTemplate cancelButton; + + dlgTemplate.titleText("Printing..."); + dlgTemplate.posRect(Rect(10,73,220,42)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); + + cancelButton.className(buttonName); + cancelButton.titleText("Cancel"); + cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP); + cancelButton.posRect(Rect(85,22,50,14)); + cancelButton.itemID(IDCANCEL); + + dlgTemplate+=cancelButton; + createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog); +} + +WORD AbortDlg::dlgCommand(DWORD commandID,CallbackData &someCallbackData) +{ + switch(commandID) + { + case IDCANCEL : + mIsCancelled=TRUE; + destroy(); + break; + } + return FALSE; +} + +BOOL AbortDlg::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + init(); + return TRUE; +} + +void AbortDlg::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ + mIsDestroyed=TRUE; + return; +} + +// virtuals + +void AbortDlg::init(void) +{ +} diff --git a/test/Applet1.java b/test/Applet1.java new file mode 100644 index 0000000..b0dc86c --- /dev/null +++ b/test/Applet1.java @@ -0,0 +1,116 @@ +import java.awt.*; +import java.applet.*; + +/** + * This class reads PARAM tags from its HTML host page and sets + * the color and label properties of the applet. Program execution + * begins with the init() method. + */ +public class Applet1 extends Applet +{ + /** + * The entry point for the applet. + */ + public void init() + { + initForm(); + + usePageParams(); + + // TODO: Add any constructor code after initForm call. + } + + private final String labelParam = "label"; + private final String backgroundParam = "background"; + private final String foregroundParam = "foreground"; + + /** + * Reads parameters from the applet's HTML host and sets applet + * properties. + */ + private void usePageParams() + { + final String defaultLabel = "Default label"; + final String defaultBackground = "C0C0C0"; + final String defaultForeground = "000000"; + String labelValue; + String backgroundValue; + String foregroundValue; + + /** + * Read the , + * , + * and tags from + * the applet's HTML host. + */ + labelValue = getParameter(labelParam); + backgroundValue = getParameter(backgroundParam); + foregroundValue = getParameter(foregroundParam); + + if ((labelValue == null) || (backgroundValue == null) || + (foregroundValue == null)) + { + /** + * There was something wrong with the HTML host tags. + * Generate default values. + */ + labelValue = defaultLabel; + backgroundValue = defaultBackground; + foregroundValue = defaultForeground; + } + + /** + * Set the applet's string label, background color, and + * foreground colors. + */ + label1.setText(labelValue); + label1.setBackground(stringToColor(backgroundValue)); + label1.setForeground(stringToColor(foregroundValue)); + this.setBackground(stringToColor(backgroundValue)); + this.setForeground(stringToColor(foregroundValue)); + } + + /** + * Converts a string formatted as "rrggbb" to an awt.Color object + */ + private Color stringToColor(String paramValue) + { + int red; + int green; + int blue; + + red = (Integer.decode("0x" + paramValue.substring(0,2))).intValue(); + green = (Integer.decode("0x" + paramValue.substring(2,4))).intValue(); + blue = (Integer.decode("0x" + paramValue.substring(4,6))).intValue(); + + return new Color(red,green,blue); + } + + /** + * External interface used by design tools to show properties of an applet. + */ + public String[][] getParameterInfo() + { + String[][] info = + { + { labelParam, "String", "Label string to be displayed" }, + { backgroundParam, "String", "Background color, format \"rrggbb\"" }, + { foregroundParam, "String", "Foreground color, format \"rrggbb\"" }, + }; + return info; + } + + Label label1 = new Label(); + + /** + * Intializes values for the applet and its components + */ + void initForm() + { + this.setBackground(Color.lightGray); + this.setForeground(Color.black); + label1.setText("label1"); + this.setLayout(new BorderLayout()); + this.add("North",label1); + } +} diff --git a/test/CHAR.HPP b/test/CHAR.HPP new file mode 100644 index 0000000..df39cf6 --- /dev/null +++ b/test/CHAR.HPP @@ -0,0 +1,85 @@ +#ifndef _TEST_CHAR_HPP_ +#define _TEST_CHAR_HPP_ + +typedef char Attribute; + +class Char +{ +public: + Char(void); + Char(char charData,Attribute attribute=0); + Char(const Char &someChar); + Char &operator=(const Char &someChar); + bool operator==(const Char &someChar)const; + ~Char(); // must not be virtual + char getChar(void)const; + void setChar(char someChar); + Attribute getAttribute(void)const; + void setAttribute(Attribute attribute); +private: + char mChar; + Attribute mAttribute; +}; + +inline +Char::Char(void) +: mChar(0), mAttribute(0) +{ +} + +inline +Char::Char(char charData,Attribute attribute) +: mChar(charData), mAttribute(attribute) +{ +} + +inline +Char::Char(const Char &someChar) +: mChar(someChar.mChar), mAttribute(someChar.mAttribute) +{ +} + +inline +Char::~Char() +{ +} + +inline +Char &Char::operator=(const Char &someChar) +{ + setChar(someChar.getChar()); + setAttribute(someChar.getAttribute()); + return *this; +} + +inline +bool Char::operator==(const Char &someChar)const +{ + return (getChar()==someChar.getChar()&& + getAttribute()==someChar.getAttribute()); +} + +inline +char Char::getChar(void)const +{ + return mChar; +} + +inline +void Char::setChar(char someChar) +{ + mChar=someChar; +} + +inline +Attribute Char::getAttribute(void)const +{ + return mAttribute; +} + +inline +void Char::setAttribute(Attribute attribute) +{ + mAttribute=attribute; +} +#endif \ No newline at end of file diff --git a/test/CODEBASE.DAT b/test/CODEBASE.DAT new file mode 100644 index 0000000..25f4bee --- /dev/null +++ b/test/CODEBASE.DAT @@ -0,0 +1 @@ +file:/d:\work\test diff --git a/test/ChildFrm.cpp b/test/ChildFrm.cpp new file mode 100644 index 0000000..9643fb6 --- /dev/null +++ b/test/ChildFrm.cpp @@ -0,0 +1,65 @@ +// ChildFrm.cpp : implementation of the CChildFrame class +// + +#include "stdafx.h" +#include "test.h" + +#include "ChildFrm.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame + +IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd) + +BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd) + //{{AFX_MSG_MAP(CChildFrame) + // NOTE - the ClassWizard will add and remove mapping macros here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame construction/destruction + +CChildFrame::CChildFrame() +{ + // TODO: add member initialization code here + +} + +CChildFrame::~CChildFrame() +{ +} + +BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) +{ + // TODO: Modify the Window class or styles here by modifying + // the CREATESTRUCT cs + + return CMDIChildWnd::PreCreateWindow(cs); +} + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame diagnostics + +#ifdef _DEBUG +void CChildFrame::AssertValid() const +{ + CMDIChildWnd::AssertValid(); +} + +void CChildFrame::Dump(CDumpContext& dc) const +{ + CMDIChildWnd::Dump(dc); +} + +#endif //_DEBUG + +///////////////////////////////////////////////////////////////////////////// +// CChildFrame message handlers diff --git a/test/ChildFrm.h b/test/ChildFrm.h new file mode 100644 index 0000000..089fffc --- /dev/null +++ b/test/ChildFrm.h @@ -0,0 +1,40 @@ +// ChildFrm.h : interface of the CChildFrame class +// +///////////////////////////////////////////////////////////////////////////// + +class CChildFrame : public CMDIChildWnd +{ + DECLARE_DYNCREATE(CChildFrame) +public: + CChildFrame(); + +// Attributes +public: + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CChildFrame) + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + //}}AFX_VIRTUAL + +// Implementation +public: + virtual ~CChildFrame(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +// Generated message map functions +protected: + //{{AFX_MSG(CChildFrame) + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +///////////////////////////////////////////////////////////////////////////// diff --git a/test/ConnectionManager.class b/test/ConnectionManager.class new file mode 100644 index 0000000..bca6dcb Binary files /dev/null and b/test/ConnectionManager.class differ diff --git a/test/ConnectionManager.java b/test/ConnectionManager.java new file mode 100644 index 0000000..95465fb --- /dev/null +++ b/test/ConnectionManager.java @@ -0,0 +1,21 @@ +import java.awt.*; +import java.awt.event.*; +import java.applet.Applet.*; +import java.net.*; +import java.io.*; +import com.ms.security.*; + +public class ConnectionManager extends SecurityManager +{ + ConnectionManager() + { + super(); + } + public void checkConnect(String host, int port) + { + return; + } +}; + + + diff --git a/test/DEMO.C b/test/DEMO.C new file mode 100644 index 0000000..f77a85e --- /dev/null +++ b/test/DEMO.C @@ -0,0 +1,50 @@ +/* this file contains the actual definitions of */ +/* the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + +/* File created by MIDL compiler version 3.01.75 */ +/* at Fri Sep 24 11:09:58 1999 + */ +/* Compiler settings for demo.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: none +*/ +//@@MIDL_FILE_HEADING( ) +#ifdef __cplusplus +extern "C"{ +#endif + + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +const IID IID_IDemo = {0x994620E2,0x724B,0x11d3,{0xA1,0x28,0xF7,0x39,0xCB,0x1A,0xAC,0x6C}}; + + +const IID LIBID_DemoLib = {0x994620E4,0x724B,0x11d3,{0xA1,0x28,0xF7,0x39,0xCB,0x1A,0xAC,0x6C}}; + + +const CLSID CLSID_Demo = {0x994620E5,0x724B,0x11d3,{0xA1,0x28,0xF7,0x39,0xCB,0x1A,0xAC,0x6C}}; + + +#ifdef __cplusplus +} +#endif + diff --git a/test/DEMO.H b/test/DEMO.H new file mode 100644 index 0000000..4405d94 --- /dev/null +++ b/test/DEMO.H @@ -0,0 +1,201 @@ +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + +/* File created by MIDL compiler version 3.01.75 */ +/* at Fri Sep 24 11:09:58 1999 + */ +/* Compiler settings for demo.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: none +*/ +//@@MIDL_FILE_HEADING( ) +#include "rpc.h" +#include "rpcndr.h" +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __demo_h__ +#define __demo_h__ + +#ifdef __cplusplus +extern "C"{ +#endif + +/* Forward Declarations */ + +#ifndef __IDemo_FWD_DEFINED__ +#define __IDemo_FWD_DEFINED__ +typedef interface IDemo IDemo; +#endif /* __IDemo_FWD_DEFINED__ */ + + +#ifndef __Demo_FWD_DEFINED__ +#define __Demo_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class Demo Demo; +#else +typedef struct Demo Demo; +#endif /* __cplusplus */ + +#endif /* __Demo_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" + +void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t); +void __RPC_USER MIDL_user_free( void __RPC_FAR * ); + +#ifndef __IDemo_INTERFACE_DEFINED__ +#define __IDemo_INTERFACE_DEFINED__ + +/**************************************** + * Generated header for interface: IDemo + * at Fri Sep 24 11:09:58 1999 + * using MIDL 3.01.75 + ****************************************/ +/* [object][uuid] */ + + + +EXTERN_C const IID IID_IDemo; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + interface DECLSPEC_UUID("994620E2-724B-11d3-A128-F739CB1AAC6C") + IDemo : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE getValue( + /* [retval][out] */ int __RPC_FAR *pout) = 0; + + virtual HRESULT STDMETHODCALLTYPE setValue( + /* [in] */ int value) = 0; + + }; + +#else /* C style interface */ + + typedef struct IDemoVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( + IDemo __RPC_FAR * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( + IDemo __RPC_FAR * This); + + ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( + IDemo __RPC_FAR * This); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *getValue )( + IDemo __RPC_FAR * This, + /* [retval][out] */ int __RPC_FAR *pout); + + HRESULT ( STDMETHODCALLTYPE __RPC_FAR *setValue )( + IDemo __RPC_FAR * This, + /* [in] */ int value); + + END_INTERFACE + } IDemoVtbl; + + interface IDemo + { + CONST_VTBL struct IDemoVtbl __RPC_FAR *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IDemo_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IDemo_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IDemo_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IDemo_getValue(This,pout) \ + (This)->lpVtbl -> getValue(This,pout) + +#define IDemo_setValue(This,value) \ + (This)->lpVtbl -> setValue(This,value) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE IDemo_getValue_Proxy( + IDemo __RPC_FAR * This, + /* [retval][out] */ int __RPC_FAR *pout); + + +void __RPC_STUB IDemo_getValue_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IDemo_setValue_Proxy( + IDemo __RPC_FAR * This, + /* [in] */ int value); + + +void __RPC_STUB IDemo_setValue_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IDemo_INTERFACE_DEFINED__ */ + + + +#ifndef __DemoLib_LIBRARY_DEFINED__ +#define __DemoLib_LIBRARY_DEFINED__ + +/**************************************** + * Generated header for library: DemoLib + * at Fri Sep 24 11:09:58 1999 + * using MIDL 3.01.75 + ****************************************/ +/* [uuid] */ + + + +EXTERN_C const IID LIBID_DemoLib; + +#ifdef __cplusplus +EXTERN_C const CLSID CLSID_Demo; + +class DECLSPEC_UUID("994620E5-724B-11d3-A128-F739CB1AAC6C") +Demo; +#endif +#endif /* __DemoLib_LIBRARY_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/test/DEMO.HPP b/test/DEMO.HPP new file mode 100644 index 0000000..6a8eb9e --- /dev/null +++ b/test/DEMO.HPP @@ -0,0 +1,4 @@ +#ifndef _TEST_DEMO_HPP_ +#define _TEST_DEMO_HPP_ +#include +#endif diff --git a/test/DEMO.IDL b/test/DEMO.IDL new file mode 100644 index 0000000..267c291 --- /dev/null +++ b/test/DEMO.IDL @@ -0,0 +1,33 @@ +import "oaidl.idl"; +import "ocidl.idl"; + +[ + uuid(994620E2-724B-11d3-A128-F739CB1AAC6C) +] + +interface IDemo : IUnknown +{ + HRESULT getValue([out,retval]int *pout); + HRESULT setValue([in] int value); +} + + +[ + uuid(994620E4-724B-11d3-A128-F739CB1AAC6C) +] +library DemoLib +{ + importlib("stdole32.tlb"); + importlib("stdole2.tlb"); + [ + uuid(994620E5-724B-11d3-A128-F739CB1AAC6C) + ] + coclass Demo + { + [default] interface IDemo; + }; +}; + + + + diff --git a/test/DEMO.TLB b/test/DEMO.TLB new file mode 100644 index 0000000..11b9173 Binary files /dev/null and b/test/DEMO.TLB differ diff --git a/test/DEMO_P.C b/test/DEMO_P.C new file mode 100644 index 0000000..9b31262 --- /dev/null +++ b/test/DEMO_P.C @@ -0,0 +1,276 @@ +/* this ALWAYS GENERATED file contains the proxy stub code */ + + +/* File created by MIDL compiler version 3.01.75 */ +/* at Fri Sep 24 11:09:58 1999 + */ +/* Compiler settings for demo.idl: + Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext + error checks: none +*/ +//@@MIDL_FILE_HEADING( ) + +#define USE_STUBLESS_PROXY + +#include "rpcproxy.h" +#include "demo.h" + +#define TYPE_FORMAT_STRING_SIZE 5 +#define PROC_FORMAT_STRING_SIZE 49 + +typedef struct _MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } MIDL_TYPE_FORMAT_STRING; + +typedef struct _MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } MIDL_PROC_FORMAT_STRING; + + +extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString; +extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString; + + +/* Object interface: IUnknown, ver. 0.0, + GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */ + + +/* Object interface: IDemo, ver. 0.0, + GUID={0x994620E2,0x724B,0x11d3,{0xA1,0x28,0xF7,0x39,0xCB,0x1A,0xAC,0x6C}} */ + + +extern const MIDL_STUB_DESC Object_StubDesc; + + +extern const MIDL_SERVER_INFO IDemo_ServerInfo; + +#pragma code_seg(".orpc") + +static const MIDL_STUB_DESC Object_StubDesc = + { + 0, + NdrOleAllocate, + NdrOleFree, + 0, + 0, + 0, + 0, + 0, + __MIDL_TypeFormatString.Format, + 0, /* -error bounds_check flag */ + 0x20000, /* Ndr library version */ + 0, + 0x301004b, /* MIDL Version 3.1.75 */ + 0, + 0, + 0, /* Reserved1 */ + 0, /* Reserved2 */ + 0, /* Reserved3 */ + 0, /* Reserved4 */ + 0 /* Reserved5 */ + }; + +static const unsigned short IDemo_FormatStringOffsetTable[] = + { + 0, + 24 + }; + +static const MIDL_SERVER_INFO IDemo_ServerInfo = + { + &Object_StubDesc, + 0, + __MIDL_ProcFormatString.Format, + &IDemo_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0 + }; + +static const MIDL_STUBLESS_PROXY_INFO IDemo_ProxyInfo = + { + &Object_StubDesc, + __MIDL_ProcFormatString.Format, + &IDemo_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + +CINTERFACE_PROXY_VTABLE(5) _IDemoProxyVtbl = +{ + &IDemo_ProxyInfo, + &IID_IDemo, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + (void *)-1 /* IDemo::getValue */ , + (void *)-1 /* IDemo::setValue */ +}; + +const CInterfaceStubVtbl _IDemoStubVtbl = +{ + &IID_IDemo, + &IDemo_ServerInfo, + 5, + 0, /* pure interpreted */ + CStdStubBuffer_METHODS +}; + +#pragma data_seg(".rdata") + +#if !defined(__RPC_WIN32__) +#error Invalid build platform for this stub. +#endif + +#if !(TARGET_IS_NT40_OR_LATER) +#error You need a Windows NT 4.0 or later to run this stub because it uses these features: +#error -Oif or -Oicf. +#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems. +#error This app will die there with the RPC_X_WRONG_STUB_VERSION error. +#endif + + +static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString = + { + 0, + { + + /* Procedure getValue */ + + 0x33, /* FC_AUTO_HANDLE */ + 0x64, /* 100 */ +/* 2 */ NdrFcShort( 0x3 ), /* 3 */ +#ifndef _ALPHA_ +/* 4 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 6 */ NdrFcShort( 0x0 ), /* 0 */ +/* 8 */ NdrFcShort( 0x10 ), /* 16 */ +/* 10 */ 0x4, /* 4 */ + 0x2, /* 2 */ + + /* Parameter pout */ + +/* 12 */ NdrFcShort( 0x2150 ), /* 8528 */ +#ifndef _ALPHA_ +/* 14 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 16 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 18 */ NdrFcShort( 0x70 ), /* 112 */ +#ifndef _ALPHA_ +/* 20 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 22 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure setValue */ + +/* 24 */ 0x33, /* FC_AUTO_HANDLE */ + 0x64, /* 100 */ +/* 26 */ NdrFcShort( 0x4 ), /* 4 */ +#ifndef _ALPHA_ +/* 28 */ NdrFcShort( 0xc ), /* x86, MIPS, PPC Stack size/offset = 12 */ +#else + NdrFcShort( 0x18 ), /* Alpha Stack size/offset = 24 */ +#endif +/* 30 */ NdrFcShort( 0x8 ), /* 8 */ +/* 32 */ NdrFcShort( 0x8 ), /* 8 */ +/* 34 */ 0x4, /* 4 */ + 0x2, /* 2 */ + + /* Parameter value */ + +/* 36 */ NdrFcShort( 0x48 ), /* 72 */ +#ifndef _ALPHA_ +/* 38 */ NdrFcShort( 0x4 ), /* x86, MIPS, PPC Stack size/offset = 4 */ +#else + NdrFcShort( 0x8 ), /* Alpha Stack size/offset = 8 */ +#endif +/* 40 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 42 */ NdrFcShort( 0x70 ), /* 112 */ +#ifndef _ALPHA_ +/* 44 */ NdrFcShort( 0x8 ), /* x86, MIPS, PPC Stack size/offset = 8 */ +#else + NdrFcShort( 0x10 ), /* Alpha Stack size/offset = 16 */ +#endif +/* 46 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString = + { + 0, + { + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 2 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ + + 0x0 + } + }; + +const CInterfaceProxyVtbl * _demo_ProxyVtblList[] = +{ + ( CInterfaceProxyVtbl *) &_IDemoProxyVtbl, + 0 +}; + +const CInterfaceStubVtbl * _demo_StubVtblList[] = +{ + ( CInterfaceStubVtbl *) &_IDemoStubVtbl, + 0 +}; + +PCInterfaceName const _demo_InterfaceNamesList[] = +{ + "IDemo", + 0 +}; + + +#define _demo_CHECK_IID(n) IID_GENERIC_CHECK_IID( _demo, pIID, n) + +int __stdcall _demo_IID_Lookup( const IID * pIID, int * pIndex ) +{ + + if(!_demo_CHECK_IID(0)) + { + *pIndex = 0; + return 1; + } + + return 0; +} + +const ExtendedProxyFileInfo demo_ProxyFileInfo = +{ + (PCInterfaceProxyVtblList *) & _demo_ProxyVtblList, + (PCInterfaceStubVtblList *) & _demo_StubVtblList, + (const PCInterfaceName * ) & _demo_InterfaceNamesList, + 0, // no delegation + & _demo_IID_Lookup, + 1, + 2 +}; diff --git a/test/DLLDATA.C b/test/DLLDATA.C new file mode 100644 index 0000000..cbad312 --- /dev/null +++ b/test/DLLDATA.C @@ -0,0 +1,37 @@ +/********************************************************* + DllData file -- generated by MIDL compiler + + DO NOT ALTER THIS FILE + + This file is regenerated by MIDL on every IDL file compile. + + To completely reconstruct this file, delete it and rerun MIDL + on all the IDL files in this DLL, specifying this file for the + /dlldata command line option + +*********************************************************/ + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +EXTERN_PROXY_FILE( demo ) + + +PROXYFILE_LIST_START +/* Start of list */ + REFERENCE_PROXY_FILE( demo ), +/* End of list */ +PROXYFILE_LIST_END + + +DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) + +#ifdef __cplusplus +} /*extern "C" */ +#endif + +/* end of generated dlldata file */ diff --git a/test/EXE32.DSW b/test/EXE32.DSW new file mode 100644 index 0000000..fe89756 Binary files /dev/null and b/test/EXE32.DSW differ diff --git a/test/EXPORT.LOG b/test/EXPORT.LOG new file mode 100644 index 0000000..9800eea --- /dev/null +++ b/test/EXPORT.LOG @@ -0,0 +1,3652 @@ +@17 @17 0xbff71319 +@7 @7 0xbff713d4 +@6 @6 0xbff713d4 +@9 @9 0xbff713d4 +@8 @8 0xbff713d4 +@2 @2 0xbff713d4 +@1 @1 0xbff713d4 +@3 @3 0xbff713d4 +@5 @5 0xbff713d4 +@4 @4 0xbff713d4 +@45 @45 0xbff71511 +@43 @43 0xbff7165a +@41 @41 0xbff71677 +@46 @46 0xbff71736 +@47 @47 0xbff71798 +@44 @44 0xbff7179b +@42 @42 0xbff7179e +@40 @40 0xbff717a1 +K32Thk1632Prolog @491 0xbff718e2 +K32Thk1632Epilog @490 0xbff71907 +MapHInstLS_PN @517 0xbff71ad7 +MapHInstLS @516 0xbff71adc +MapHInstSL_PN @519 0xbff71b01 +MapHInstSL @518 0xbff71b08 +MapHModuleLS @520 0xbff71b59 +MapHModuleSL @521 0xbff71b68 +MapSLFix @524 0xbff71b78 +MapSL @523 0xbff71bc1 +UnMapSLFixArray @701 0xbff71c4e +SMapLS @592 0xbff71ec8 +SUnMapLS_IP_EBP_40 @610 0xbff71f19 +SUnMapLS_IP_EBP_36 @609 0xbff71f1e +SUnMapLS_IP_EBP_32 @608 0xbff71f23 +SUnMapLS_IP_EBP_28 @607 0xbff71f28 +SUnMapLS_IP_EBP_24 @606 0xbff71f2d +SUnMapLS_IP_EBP_20 @605 0xbff71f32 +SUnMapLS_IP_EBP_16 @604 0xbff71f37 +SUnMapLS_IP_EBP_12 @603 0xbff71f3c +SUnMapLS_IP_EBP_8 @611 0xbff71f41 +SUnMapLS @602 0xbff71f46 +SMapLS_IP_EBP_40 @600 0xbff71f5b +SMapLS_IP_EBP_36 @599 0xbff71f60 +SMapLS_IP_EBP_32 @598 0xbff71f65 +SMapLS_IP_EBP_28 @597 0xbff71f6a +SMapLS_IP_EBP_24 @596 0xbff71f6f +SMapLS_IP_EBP_20 @595 0xbff71f74 +SMapLS_IP_EBP_16 @594 0xbff71f79 +SMapLS_IP_EBP_12 @593 0xbff71f7e +SMapLS_IP_EBP_8 @601 0xbff71f83 +MapLS @522 0xbff71fdf +UnMapLS @700 0xbff71feb +@38 @38 0xbff7203d +@39 @39 0xbff72074 +@48 @48 0xbff722cb +@49 @49 0xbff722f4 +@68 @68 0xbff72326 +@69 @69 0xbff72382 +@51 @51 0xbff723d8 +@89 @89 0xbff726f4 +FT_Prolog @233 0xbff72791 +@90 @90 0xbff72843 +QT_Thunk @559 0xbff728d0 +FT_Thunk @234 0xbff72a57 +FT_Exit0 @218 0xbff72c2d +FT_Exit4 @226 0xbff72c43 +FT_Exit8 @232 0xbff72c5b +FT_Exit12 @219 0xbff72c73 +FT_Exit16 @220 0xbff72c8b +FT_Exit20 @221 0xbff72ca3 +FT_Exit24 @222 0xbff72cbb +FT_Exit28 @223 0xbff72cd3 +FT_Exit32 @224 0xbff72ceb +FT_Exit36 @225 0xbff72d03 +FT_Exit40 @227 0xbff72d1b +FT_Exit44 @228 0xbff72d33 +FT_Exit48 @229 0xbff72d4b +FT_Exit52 @230 0xbff72d63 +FT_Exit56 @231 0xbff72d7b +ThunkConnect32 @688 0xbff72dff +@56 @56 0xbff73747 +@70 @70 0xbff737bd +@97 @97 0xbff74230 +@98 @98 0xbff7426d +@86 @86 0xbff74320 +LocalAlloc @501 0xbff74904 +GlobalAlloc @436 0xbff74904 +GlobalWire @454 0xbff74913 +GlobalUnWire @451 0xbff74918 +GlobalCompact @437 0xbff74937 +@33 @33 0xbff74966 +LocalFree @505 0xbff74a20 +GetLogicalDrives @346 0xbff74b9c +GetStdHandle @395 0xbff75650 +SetStdHandle @663 0xbff75694 +GetFileType @332 0xbff75761 +ReadFile @577 0xbff75806 +WriteFile @738 0xbff7580d +FindClose @246 0xbff7632f +DebugBreak @181 0xbff76693 +GetTickCount @421 0xbff7683c +@72 @72 0xbff76850 +@73 @73 0xbff76864 +@77 @77 0xbff76870 +@78 @78 0xbff76900 +@83 @83 0xbff76958 +GetProcAddress @372 0xbff76c18 +GlobalLock @447 0xbff76c47 +GlobalHandle @446 0xbff76c69 +GlobalUnlock @453 0xbff76c8b +GlobalFree @443 0xbff76cad +LocalReAlloc @508 0xbff76ccf +LocalSize @510 0xbff76cf1 +HeapDestroy @462 0xbff76d13 +HeapAlloc @459 0xbff76d34 +HeapReAlloc @465 0xbff76d55 +HeapFree @463 0xbff76d80 +HeapSize @467 0xbff76dab +CreateThread @178 0xbff76dd6 +ReleaseSemaphore @583 0xbff76e00 +WaitForMultipleObjects @721 0xbff76e21 +GetFileSize @330 0xbff76e60 +DeviceIoControl @188 0xbff76f24 +SetFilePointer @649 0xbff76fa0 +GetFileTime @331 0xbff76fc1 +SetFileTime @650 0xbff77000 +GetLocalTime @341 0xbff77039 +CompareFileTime @142 0xbff7705c +FileTimeToDosDateTime @238 0xbff77086 +FormatMessageA @265 0xbff770b7 +CreateMailslotA @164 0xbff770fa +lstrcmpA @767 0xbff7712c +lstrcmp @766 0xbff7712c +lstrcmpiA @770 0xbff77166 +lstrcmpi @769 0xbff77166 +lstrcpy @772 0xbff771a0 +lstrcpyA @773 0xbff771a0 +lstrcpynA @776 0xbff771da +lstrcpyn @775 0xbff771da +lstrcat @763 0xbff77217 +lstrcatA @764 0xbff77217 +lstrlenA @779 0xbff77251 +lstrlen @778 0xbff77251 +GlobalAddAtomA @434 0xbff77288 +_lopen @759 0xbff772b7 +_hread @754 0xbff772e1 +_lread @760 0xbff772e1 +WaitForMultipleObjectsEx @722 0xbff7731f +CreateMutexA @166 0xbff7733f +CreateEventA @156 0xbff77375 +OpenEventA @536 0xbff773ab +CreateSemaphoreA @174 0xbff773d2 +CreateFileMappingA @159 0xbff773fd +LoadLibraryA @495 0xbff77433 +GetModuleFileNameA @348 0xbff7745a +GetModuleHandleA @350 0xbff77479 +CreateProcessA @171 0xbff774a4 +GetStartupInfoA @393 0xbff77510 +GetProfileStringA @386 0xbff77533 +GetPrivateProfileStringA @368 0xbff775aa +WritePrivateProfileStringA @742 0xbff7762c +GetDriveTypeA @317 0xbff77680 +GetSystemDirectoryA @402 0xbff776ab +GetWindowsDirectoryA @432 0xbff776e4 +SetCurrentDirectoryA @635 0xbff7771d +GetCurrentDirectoryA @304 0xbff77744 +GetDiskFreeSpaceA @315 0xbff77781 +GetFullPathNameA @333 0xbff777c1 +CreateFileA @158 0xbff77817 +SetFileAttributesA @647 0xbff7784c +GetFileAttributesA @327 0xbff7786c +FindFirstFileA @250 0xbff77893 +FindNextFileA @253 0xbff778cb +SearchPathA @614 0xbff778f1 +GetVolumeInformationA @430 0xbff7795b +FindFirstChangeNotificationA @248 0xbff779eb +GetComputerNameA @293 0xbff77a0b +GetTimeFormatA @422 0xbff77a57 +GetStringTypeA @396 0xbff77a8d +LCMapStringA @492 0xbff77ab3 +MultiByteToWideChar @534 0xbff77ad1 +WideCharToMultiByte @727 0xbff77aef +GetCPInfo @282 0xbff77b1e +GetNumberFormatA @355 0xbff77b41 +RtlMoveMemory @589 0xbff77b6a +RtlZeroMemory @591 0xbff77ba7 +FileTimeToLocalFileTime @239 0xbff77be3 +LocalFileTimeToFileTime @503 0xbff77c0f +FileTimeToSystemTime @240 0xbff77c3b +FindResourceA @255 0xbff77c67 +CreateDirectoryA @152 0xbff77ca9 +GetDateFormatA @310 0xbff77cdb +IsBadHugeWritePtr @479 0xbff784f0 +IsBadWritePtr @483 0xbff784f0 +EnterCriticalSection @195 0xbff79883 +LeaveCriticalSection @494 0xbff798a9 +IsBadReadPtr @480 0xbff798c1 +IsBadHugeReadPtr @478 0xbff798c1 +IsBadStringPtrA @481 0xbff79a35 +GetUserDefaultLCID @425 0xbff79ab0 +@15 @15 0xbff7a48b +WaitForSingleObject @723 0xbff7a83d +IsBadCodePtr @477 0xbff7adaf +CloseHandle @137 0xbff7bc72 +FindCloseChangeNotification @247 0xbff7bc72 +@18 @18 0xbff7c132 +SetLastError @654 0xbff7daca +VirtualAlloc @711 0xbff7dae8 +LoadResource @500 0xbff7e620 +@14 @14 0xbff7e6db +GetCurrentThreadId @309 0xbff7eeed +@12 @12 0xbff7f3ab +MapViewOfFileEx @526 0xbff7f9b1 +MapViewOfFile @525 0xbff7fbf4 +GetLocaleInfoA @342 0xbff7fc11 +UnmapViewOfFile @706 0xbff81750 +InterlockedDecrement @473 0xbff81b89 +VirtualFree @712 0xbff81bef +@10 @10 0xbff81c6e +InitializeCriticalSection @472 0xbff81cd2 +GetCurrentProcessId @307 0xbff82347 +ConvertToGlobalHandle @148 0xbff82354 +SetErrorMode @643 0xbff82434 +ReinitializeCriticalSection @581 0xbff828fd +GetLastError @340 0xbff82a1f +VirtualQueryEx @717 0xbff82b69 +RtlUnwind @590 0xbff85d79 +SleepEx @680 0xbff8657e +HeapCreate @461 0xbff865d7 +MakeCriticalSectionGlobal @515 0xbff869f9 +ExitThread @215 0xbff8795f +GetEnvironmentStrings @319 0xbff885f8 +GetEnvironmentStringsA @320 0xbff885f8 +DeleteCriticalSection @185 0xbff88636 +FindNextChangeNotification @252 0xbff8893b +IsDBCSLeadByte @484 0xbff88988 +GetCommandLineA @289 0xbff8a047 +TlsAlloc @689 0xbff8a05f +TlsAllocInternal @690 0xbff8a05f +InterlockedIncrement @475 0xbff8a506 +GetProcessHeap @375 0xbff8a590 +ExitProcess @214 0xbff8afb0 +FreeLibrary @271 0xbff8bb98 +GetACP @276 0xbff8bc1f +@99 @99 0xbff8bcd0 +RegisterServiceProcess @580 0xbff8bfc2 +@93 @93 0xbff8c000 +SetThreadPriority @672 0xbff8cf81 +SetPriorityClass @660 0xbff8cffe +@13 @13 0xbff8d164 +UninitializeCriticalSection @703 0xbff8e0ed +GetProcessFlags @374 0xbff8e422 +ResumeThread @587 0xbff8e510 +GetOEMCP @359 0xbff8e576 +LoadLibraryExA @496 0xbff8eae9 +@92 @92 0xbff8ebb1 +GetVersionExA @428 0xbff8efaf +@11 @11 0xbff8f146 +@100 @100 0xbff904c6 +@23 @23 0xbff90e8b +SetEvent @644 0xbff90eb4 +PulseEvent @557 0xbff90eec +ResetEvent @586 0xbff90f24 +ReleaseMutex @582 0xbff90f5c +WaitForSingleObjectEx @724 0xbff90fd4 +Sleep @679 0xbff91059 +GetVersion @427 0xbff913d3 +FreeResource @273 0xbff913ed +LockResource @514 0xbff913f2 +VerLanguageNameA @709 0xbff91766 +MulDiv @533 0xbff91857 +Callback4 @129 0xbff91940 +Callback8 @134 0xbff9194c +Callback12 @119 0xbff91959 +Callback16 @120 0xbff91966 +Callback20 @121 0xbff91973 +Callback24 @122 0xbff91980 +Callback28 @123 0xbff9198d +Callback32 @124 0xbff9199a +Callback36 @125 0xbff919a7 +Callback40 @126 0xbff919b4 +Callback44 @127 0xbff919c1 +Callback48 @128 0xbff919ce +Callback52 @130 0xbff919db +Callback56 @131 0xbff919e8 +Callback60 @132 0xbff919f5 +Callback64 @133 0xbff91a02 +AllocLSCallback @104 0xbff91af6 +AllocSLCallback @105 0xbff91b29 +IsLSCallback @486 0xbff91c35 +IsSLCallback @487 0xbff91c69 +GetLSCallbackTemplate @338 0xbff91ca2 +GetLSCallbackTarget @337 0xbff91cc9 +GetSLCallbackTemplate @390 0xbff91cec +GetSLCallbackTarget @389 0xbff91d14 +FreeLSCallback @270 0xbff91d72 +FreeSLCallback @274 0xbff91dad +@54 @54 0xbff91e49 +@55 @55 0xbff91e7b +UTRegister @698 0xbff91ef9 +UTUnRegister @699 0xbff91f24 +TlsSetValue @694 0xbff92adf +TlsGetValue @693 0xbff92b0d +ContinueDebugEvent @146 0xbff92c10 +DebugActiveProcess @180 0xbff92cb0 +ReadProcessMemory @579 0xbff92e3e +WriteProcessMemory @746 0xbff92f34 +FatalExit @237 0xbff932f7 +FlushInstructionCache @261 0xbff9336c +GetCurrentThread @308 0xbff93ed8 +TerminateThread @685 0xbff93ede +SuspendThread @681 0xbff93f2d +FreeLibraryAndExitThread @272 0xbff93f86 +DisableThreadLibraryCalls @189 0xbff93f9b +@71 @71 0xbff93fcb +OpenProcess @543 0xbff9404c +TerminateProcess @684 0xbff940b6 +GetCommandLineW @290 0xbff94287 +FreeEnvironmentStringsA @268 0xbff942eb +GetCurrentProcess @306 0xbff94633 +GetProcessVersion @379 0xbff94639 +GetSystemInfo @404 0xbff946f8 +SetThreadAffinityMask @669 0xbff947ac +QueueUserAPC @566 0xbff94ae8 +@34 @34 0xbff96573 +InterlockedExchange @474 0xbff9662a +CloseSystemHandle @139 0xbff9688d +OpenVxDHandle @547 0xbff968fc +VirtualProtectEx @715 0xbff969c3 +LocalCompact @502 0xbff96ba6 +LocalFlags @504 0xbff96bba +FlushViewOfFile @262 0xbff9751c +@59 @59 0xbff978b4 +@62 @62 0xbff978ce +@60 @60 0xbff978e5 +@63 @63 0xbff97903 +@64 @64 0xbff9792f +@65 @65 0xbff97945 +@36 @36 0xbff97a57 +@27 @27 0xbff97a5b +@28 @28 0xbff97a5f +@29 @29 0xbff97a63 +@30 @30 0xbff97a67 +@37 @37 0xbff97a7e +@24 @24 0xbff97b6c +@32 @32 0xbff97bae +GetProductName @381 0xbff97dc3 +GetErrorMode @324 0xbff97dec +@61 @61 0xbff97e32 +@25 @25 0xbff97e4a +@35 @35 0xbff97e6e +DeleteAtom @184 0xbff97e9b +@31 @31 0xbff97eab +GlobalDeleteAtom @438 0xbff97eb7 +InitAtomTable @471 0xbff97f06 +@26 @26 0xbff97f0a +@66 @66 0xbff97fc9 +@91 @91 0xbff97fe6 +@67 @67 0xbff98010 +_lclose @756 0xbff980cf +_llseek @758 0xbff980e0 +ReadFileEx @578 0xbff985c0 +WriteFileEx @739 0xbff985dd +SetHandleCount @652 0xbff98f3c +LockFile @512 0xbff98f54 +UnlockFile @704 0xbff98ff3 +SetEndOfFile @640 0xbff990fe +FlushFileBuffers @260 0xbff991d6 +GetFileInformationByHandle @329 0xbff99262 +@101 @101 0xbff9930a +@20 @20 0xbff997cc +@22 @22 0xbff99804 +@21 @21 0xbff99827 +IsBadStringPtrW @482 0xbff9a00e +SetUnhandledExceptionFilter @674 0xbff9a17d +UnhandledExceptionFilter @702 0xbff9a25f +@87 @87 0xbff9a7a8 +@88 @88 0xbff9a7e8 +TlsFree @691 0xbff9a97b +TlsFreeInternal @692 0xbff9a97b +GetThreadPriority @418 0xbff9aa2c +GetPriorityClass @361 0xbff9aa65 +GetDaylightFlag @312 0xbff9adb5 +SetDaylightFlag @637 0xbff9adc5 +@74 @74 0xbff9b47c +@75 @75 0xbff9b488 +@76 @76 0xbff9b4a8 +@79 @79 0xbff9b4f8 +@80 @80 0xbff9b520 +@81 @81 0xbff9b548 +@82 @82 0xbff9b574 +@84 @84 0xbff9b588 +@85 @85 0xbff9b590 +GetThreadLocale @417 0xbff9b599 +Beep @110 0xbff9b59f +GetSystemPowerStatus @405 0xbff9b63f +SetSystemPowerState @664 0xbff9b6cd +@19 @19 0xbff9b73e +@57 @57 0xbff9b76f +@58 @58 0xbff9b7b6 +lstrlenW @780 0xbff9b7ec +GetQueuedCompletionStatus @388 0xbff9b881 +SizeofResource @678 0xbff9bcd9 +EnumResourceTypesA @204 0xbff9bd60 +EnumResourceTypesW @205 0xbff9c465 +RtlFillMemory @588 0xbff9ca39 +_lcreat @757 0xbff9ca76 +_hwrite @755 0xbff9caa0 +_lwrite @761 0xbff9caa0 +LocalLock @507 0xbff9cae4 +GetProfileIntA @382 0xbff9cb06 +GetPrivateProfileIntA @362 0xbff9cb38 +WriteProfileStringA @749 0xbff9cb75 +GlobalReAlloc @449 0xbff9cbbe +GlobalSize @450 0xbff9cbe0 +GlobalFlags @442 0xbff9cc02 +GlobalFix @441 0xbff9cc24 +GlobalUnfix @452 0xbff9cc4b +GlobalMemoryStatus @448 0xbff9cc72 +LocalHandle @506 0xbff9cc95 +LocalUnlock @511 0xbff9ccb7 +LocalShrink @509 0xbff9ccd9 +VirtualProtect @714 0xbff9ccfb +VirtualQuery @716 0xbff9cd1b +GetExitCodeProcess @325 0xbff9cd3e +RaiseException @567 0xbff9cd5e +CreateKernelThread @163 0xbff9cda1 +GetExitCodeThread @326 0xbff9cdcb +GetThreadSelectorEntry @419 0xbff9cdea +GetOverlappedResult @360 0xbff9ce0d +GetThreadContext @416 0xbff9cebf +SetThreadContext @670 0xbff9cee5 +WaitForDebugEvent @720 0xbff9cf0b +GetShortPathNameA @391 0xbff9cf2c +GetSystemTimeAsFileTime @408 0xbff9cf74 +DuplicateHandle @192 0xbff9cf97 +LoadModule @499 0xbff9cfb8 +WinExec @728 0xbff9cfe8 +ClearCommError @136 0xbff9d00f +GetCommMask @284 0xbff9d03b +GetCommProperties @286 0xbff9d05a +GetCommModemStatus @285 0xbff9d07d +GetCommState @287 0xbff9d09c +GetCommTimeouts @288 0xbff9d0bf +SetCommState @619 0xbff9d0e2 +SetCommTimeouts @620 0xbff9d103 +WaitCommEvent @719 0xbff9d124 +GetSystemTime @406 0xbff9d14e +SetSystemTime @665 0xbff9d171 +SetLocalTime @655 0xbff9d192 +GetTimeZoneInformation @424 0xbff9d1b3 +SetTimeZoneInformation @673 0xbff9d1d9 +SystemTimeToFileTime @682 0xbff9d1fd +DosDateTimeToFileTime @191 0xbff9d229 +CreatePipe @170 0xbff9d24c +SetNamedPipeHandleState @659 0xbff9d27d +GetNamedPipeInfo @354 0xbff9d2ad +PeekNamedPipe @552 0xbff9d2e9 +TransactNamedPipe @696 0xbff9d347 +GetMailslotInfo @347 0xbff9d3c3 +OpenFile @538 0xbff9d3ff +OpenMutexA @541 0xbff9d4d7 +OpenSemaphoreA @545 0xbff9d502 +OpenFileMappingA @539 0xbff9d522 +GetLogicalDriveStringsA @344 0xbff9d549 +FatalAppExitA @235 0xbff9d5b3 +GetEnvironmentVariableA @322 0xbff9d5de +SetEnvironmentVariableA @641 0xbff9d626 +ExpandEnvironmentStringsA @216 0xbff9d64e +OutputDebugStringA @548 0xbff9d67c +FindResourceExA @256 0xbff9d6a7 +EnumResourceNamesA @202 0xbff9d6e9 +EnumResourceLanguagesA @200 0xbff9d718 +FindResourceW @258 0xbff9d75a +FindResourceExW @257 0xbff9d79e +EnumResourceNamesW @203 0xbff9d7e2 +EnumResourceLanguagesW @201 0xbff9d812 +GlobalFindAtomA @439 0xbff9d856 +GlobalGetAtomNameA @444 0xbff9d885 +AddAtomA @50 0xbff9d8b0 +FindAtomA @244 0xbff9d8df +GetAtomNameA @277 0xbff9d90e +GetProfileSectionA @384 0xbff9d94d +WriteProfileSectionA @747 0xbff9d98d +GetPrivateProfileSectionA @364 0xbff9d9c7 +WritePrivateProfileSectionA @740 0xbff9da17 +GetPrivateProfileStructA @370 0xbff9da60 +WritePrivateProfileStructA @744 0xbff9dabf +GetPrivateProfileSectionNamesA @365 0xbff9db15 +GetTempPathA @414 0xbff9db54 +GetTempFileNameA @412 0xbff9db91 +CreateDirectoryExA @153 0xbff9dbca +RemoveDirectoryA @584 0xbff9dc07 +QueryDosDeviceA @560 0xbff9dc27 +DeleteFileA @186 0xbff9dc5a +CopyFileA @149 0xbff9dc81 +MoveFileA @529 0xbff9dca9 +CallNamedPipeA @117 0xbff9dcd1 +SetVolumeLabelA @675 0xbff9dd4a +QueryPerformanceCounter @564 0xbff9dd72 +QueryPerformanceFrequency @565 0xbff9dd95 +BuildCommDCBA @113 0xbff9ddb8 +BuildCommDCBAndTimeoutsA @114 0xbff9dde3 +SetComputerNameA @621 0xbff9de19 +GetProcessAffinityMask @373 0xbff9de5c +GetStringTypeExA @397 0xbff9de82 +CompareStringA @143 0xbff9dea8 +GetCurrencyFormatA @302 0xbff9def3 +GenerateConsoleCtrlEvent @275 0xbff9e64b +SetFileApisToANSI @645 0xbff9e6f3 +SetFileApisToOEM @646 0xbff9e6ff +AreFileApisANSI @106 0xbff9e70b +WriteConsoleA @729 0xbff9e74e +ReadConsoleA @568 0xbff9e794 +SetConsoleMode @628 0xbff9e7c8 +GetConsoleMode @297 0xbff9e84c +SetConsoleCursorInfo @626 0xbff9e8c5 +SetConsoleCursorPosition @627 0xbff9e926 +GetConsoleScreenBufferInfo @299 0xbff9e973 +GetConsoleTitleA @300 0xbff9e9bd +SetConsoleTitleA @632 0xbff9ea0c +PeekConsoleInputA @550 0xbff9ea90 +ReadConsoleInputA @569 0xbff9eadc +CreateConsoleScreenBuffer @151 0xbff9eb4f +SetConsoleActiveScreenBuffer @623 0xbff9ec11 +SetConsoleCtrlHandler @625 0xbff9ec41 +WriteConsoleOutputA @732 0xbff9ec7d +WriteConsoleOutputCharacterA @734 0xbff9ecd6 +ReadConsoleOutputCharacterA @573 0xbff9ed75 +ReadConsoleOutputAttribute @572 0xbff9ee11 +FillConsoleOutputCharacterA @242 0xbff9eead +FillConsoleOutputAttribute @241 0xbff9ef4d +FlushConsoleInputBuffer @259 0xbff9efee +GetNumberOfConsoleInputEvents @357 0xbff9f043 +SetConsoleTextAttribute @631 0xbff9f085 +WriteConsoleInputA @730 0xbff9f0d5 +WriteConsoleOutputAttribute @733 0xbff9f122 +GetConsoleCursorInfo @296 0xbff9f1b5 +GetNumberOfConsoleMouseButtons @358 0xbff9f203 +ReadConsoleOutputA @571 0xbff9f23b +ScrollConsoleScreenBufferA @612 0xbff9f291 +SetConsoleScreenBufferSize @630 0xbff9f2e9 +GetLargestConsoleWindowSize @339 0xbff9f34f +SetConsoleWindowInfo @634 0xbff9f3aa +AllocConsole @103 0xbff9f3fb +FreeConsole @267 0xbff9f491 +GetConsoleCP @295 0xbffa2260 +GetConsoleOutputCP @298 0xbffa2281 +CreateSocketHandle @176 0xbffa2448 +SetHandleContext @651 0xbffa25a7 +GetHandleContext @335 0xbffa25db +WaitNamedPipeA @725 0xbffa263a +GetNamedPipeHandleStateA @352 0xbffa288f +SetMailslotInfo @658 0xbffa2e27 +SetupComm @677 0xbffa3c5a +ClearCommBreak @135 0xbffa3ca6 +EscapeCommFunction @213 0xbffa3d00 +PurgeComm @558 0xbffa3e86 +SetCommBreak @616 0xbffa3ece +SetCommMask @618 0xbffa3edc +TransmitCommChar @697 0xbffa3f6c +CommConfigDialogA @140 0xbffa47e0 +GetDefaultCommConfigA @313 0xbffa48a2 +SetDefaultCommConfigA @638 0xbffa4964 +GetCommConfig @283 0xbffa4a26 +SetCommConfig @617 0xbffa4a67 +CloseProfileUserMapping @138 0xbffa4c40 +GetEnvironmentStringsW @321 0xbffa4c40 +OpenProfileUserMapping @544 0xbffa4c40 +SetCurrentDirectoryW @636 0xbffa4c49 +GetDriveTypeW @318 0xbffa4c49 +RemoveDirectoryW @585 0xbffa4c49 +GetVersionExW @429 0xbffa4c49 +SetComputerNameW @622 0xbffa4c49 +AddAtomW @102 0xbffa4c49 +FindAtomW @245 0xbffa4c49 +DeleteFileW @187 0xbffa4c49 +HeapUnlock @468 0xbffa4c49 +DisconnectNamedPipe @190 0xbffa4c49 +HeapLock @464 0xbffa4c49 +GlobalAddAtomW @435 0xbffa4c49 +GlobalFindAtomW @440 0xbffa4c49 +SetConsoleCP @624 0xbffa4c49 +SetThreadLocale @671 0xbffa4c49 +GetStartupInfoW @394 0xbffa4c49 +SetConsoleTitleW @633 0xbffa4c49 +FreeEnvironmentStringsW @269 0xbffa4c49 +GetModuleHandleW @351 0xbffa4c49 +OutputDebugStringW @549 0xbffa4c49 +LoadLibraryW @498 0xbffa4c49 +SetConsoleOutputCP @629 0xbffa4c49 +GetTapeStatus @411 0xbffa4c52 +GetFileAttributesW @328 0xbffa4c5b +BeginUpdateResourceW @112 0xbffa4c64 +BeginUpdateResourceA @111 0xbffa4c64 +SetEnvironmentVariableW @642 0xbffa4c64 +SetFileAttributesW @648 0xbffa4c64 +FindNextFileW @254 0xbffa4c64 +WriteProfileSectionW @748 0xbffa4c64 +GetProcessShutdownParameters @377 0xbffa4c64 +lstrcatW @765 0xbffa4c64 +GetProcessHeaps @376 0xbffa4c64 +GetSystemDirectoryW @403 0xbffa4c64 +WaitNamedPipeW @726 0xbffa4c64 +EnumSystemLocalesW @209 0xbffa4c64 +FatalAppExitW @236 0xbffa4c64 +GetTempPathW @415 0xbffa4c64 +GetWindowsDirectoryW @433 0xbffa4c64 +GetBinaryTypeW @281 0xbffa4c64 +GetBinaryTypeA @280 0xbffa4c64 +GetCurrentDirectoryW @305 0xbffa4c64 +GetComputerNameW @294 0xbffa4c64 +GetConsoleTitleW @301 0xbffa4c64 +GetBinaryType @279 0xbffa4c64 +lstrcmpiW @771 0xbffa4c64 +lstrcmpW @768 0xbffa4c64 +GetLogicalDriveStringsW @345 0xbffa4c64 +lstrcpyW @774 0xbffa4c64 +GetHandleInformation @336 0xbffa4c64 +ConnectNamedPipe @145 0xbffa4c64 +MoveFileW @532 0xbffa4c64 +EndUpdateResourceA @193 0xbffa4c64 +CreateDirectoryW @155 0xbffa4c64 +SetVolumeLabelW @676 0xbffa4c64 +QueryOldestEventLogRecord @563 0xbffa4c64 +SetProcessShutdownParameters @661 0xbffa4c64 +SetSystemTimeAdjustment @666 0xbffa4c64 +QueryNumberOfEventLogRecords @562 0xbffa4c64 +BuildCommDCBW @116 0xbffa4c64 +HeapWalk @470 0xbffa4c64 +EnumSystemCodePagesW @207 0xbffa4c64 +HeapCompact @460 0xbffa4c64 +EndUpdateResourceW @194 0xbffa4c64 +VirtualUnlock @718 0xbffa4c6d +VirtualLock @713 0xbffa4c6d +GetCompressedFileSizeA @291 0xbffa4c76 +GetCompressedFileSizeW @292 0xbffa4c76 +FindFirstFileW @251 0xbffa4c76 +HeapSetFlags @466 0xbffa4c76 +SetLocaleInfoW @657 0xbffa4c7f +lstrcpynW @777 0xbffa4c7f +VerLanguageNameW @710 0xbffa4c7f +WriteProfileStringW @750 0xbffa4c7f +WritePrivateProfileSectionW @741 0xbffa4c7f +SetProcessWorkingSetSize @662 0xbffa4c7f +SetHandleInformation @653 0xbffa4c7f +SystemTimeToTzSpecificLocalTime @683 0xbffa4c7f +OpenFileMappingW @540 0xbffa4c7f +OpenMutexW @542 0xbffa4c7f +CopyFileW @150 0xbffa4c7f +OpenEventW @537 0xbffa4c7f +OpenSemaphoreW @546 0xbffa4c7f +FindFirstChangeNotificationW @249 0xbffa4c7f +QueryDosDeviceW @561 0xbffa4c7f +GlobalGetAtomNameW @445 0xbffa4c7f +ExpandEnvironmentStringsW @217 0xbffa4c7f +DefineDosDeviceA @182 0xbffa4c7f +DefineDosDeviceW @183 0xbffa4c7f +CreateMutexW @167 0xbffa4c7f +LoadLibraryExW @497 0xbffa4c7f +EnumDateFormatsW @199 0xbffa4c7f +MoveFileExA @530 0xbffa4c7f +MoveFileExW @531 0xbffa4c7f +CreateDirectoryExW @154 0xbffa4c7f +EnumTimeFormatsW @211 0xbffa4c7f +CommConfigDialogW @141 0xbffa4c7f +GetProcessWorkingSetSize @380 0xbffa4c7f +GetProfileSectionW @385 0xbffa4c7f +GetProfileIntW @383 0xbffa4c7f +GetPrivateProfileSectionNamesW @366 0xbffa4c7f +GetModuleFileNameW @349 0xbffa4c7f +BuildCommDCBAndTimeoutsW @115 0xbffa4c7f +GetAtomNameW @278 0xbffa4c7f +GetDefaultCommConfigW @314 0xbffa4c7f +GetSystemTimeAdjustment @407 0xbffa4c7f +SetDefaultCommConfigW @639 0xbffa4c7f +GetShortPathNameW @392 0xbffa4c7f +GetEnvironmentVariableW @323 0xbffa4c7f +HeapValidate @469 0xbffa4c88 +EraseTape @212 0xbffa4c91 +PrepareTape @554 0xbffa4c91 +SetTapeParameters @667 0xbffa4c91 +GetFullPathNameW @334 0xbffa4c9a +EnumCalendarInfoW @197 0xbffa4c9a +CreateSemaphoreW @175 0xbffa4c9a +GetStringTypeW @399 0xbffa4c9a +GetTempFileNameW @413 0xbffa4c9a +WritePrivateProfileStringW @743 0xbffa4c9a +WriteConsoleInputW @731 0xbffa4c9a +GetLocaleInfoW @343 0xbffa4c9a +GetPrivateProfileIntW @363 0xbffa4c9a +GetPrivateProfileSectionW @367 0xbffa4c9a +CreateEventW @157 0xbffa4c9a +ReadConsoleInputW @570 0xbffa4c9a +CreateIoCompletionPort @162 0xbffa4c9a +PeekConsoleInputW @551 0xbffa4c9a +CreateMailslotW @165 0xbffa4c9a +PostQueuedCompletionStatus @553 0xbffa4c9a +WriteTapemark @751 0xbffa4ca3 +GetTapeParameters @409 0xbffa4ca3 +CreateTapePartition @177 0xbffa4ca3 +WriteConsoleOutputW @736 0xbffa4cac +WriteConsoleOutputCharacterW @735 0xbffa4cac +GetThreadTimes @420 0xbffa4cac +WriteConsoleW @737 0xbffa4cac +ScrollConsoleScreenBufferW @613 0xbffa4cac +GetDiskFreeSpaceW @316 0xbffa4cac +FillConsoleOutputCharacterW @243 0xbffa4cac +FoldStringW @264 0xbffa4cac +FoldStringA @263 0xbffa4cac +ReadConsoleOutputW @575 0xbffa4cac +GetProcessTimes @378 0xbffa4cac +ReadConsoleW @576 0xbffa4cac +GetProfileStringW @387 0xbffa4cac +GetPrivateProfileStructW @371 0xbffa4cac +WritePrivateProfileStructW @745 0xbffa4cac +GetStringTypeExW @398 0xbffa4cac +ReadConsoleOutputCharacterW @574 0xbffa4cac +UnlockFileEx @705 0xbffa4cac +GetTapePosition @410 0xbffa4cb5 +LCMapStringW @493 0xbffa4cbe +CreateFileMappingW @160 0xbffa4cbe +GetTimeFormatW @423 0xbffa4cbe +UpdateResourceW @708 0xbffa4cbe +UpdateResourceA @707 0xbffa4cbe +CompareStringW @144 0xbffa4cbe +SearchPathW @615 0xbffa4cbe +GetDateFormatW @311 0xbffa4cbe +GetCurrencyFormatW @303 0xbffa4cbe +GetNumberFormatW @356 0xbffa4cbe +LockFileEx @513 0xbffa4cbe +GetPrivateProfileStringW @369 0xbffa4cbe +BackupSeek @108 0xbffa4cbe +SetTapePosition @668 0xbffa4cc7 +CreateFileW @161 0xbffa4cd0 +FormatMessageW @266 0xbffa4cd0 +CallNamedPipeW @118 0xbffa4cd0 +CreateRemoteThread @173 0xbffa4cd0 +BackupWrite @109 0xbffa4cd0 +BackupRead @107 0xbffa4cd0 +GetNamedPipeHandleStateW @353 0xbffa4cd0 +CreateNamedPipeA @168 0xbffa4cd9 +CreateNamedPipeW @169 0xbffa4cd9 +GetVolumeInformationW @431 0xbffa4cd9 +CreateProcessW @172 0xbffa4ce2 +@16 @16 0xbffa66ee +Toolhelp32ReadProcessMemory @695 0xbffa6f75 +CreateToolhelp32Snapshot @179 0xbffa6fb2 +Heap32ListFirst @456 0xbffa75c7 +Heap32ListNext @457 0xbffa7632 +Heap32First @455 0xbffa76b4 +Heap32Next @458 0xbffa7746 +Process32First @555 0xbffa7752 +Process32Next @556 0xbffa77dd +Thread32First @686 0xbffa788a +Thread32Next @687 0xbffa78f8 +Module32First @527 0xbffa797d +Module32Next @528 0xbffa79f1 +@52 @52 0xbffa7a94 +@53 @53 0xbffa7acd +@95 @95 0xbffae965 +@96 @96 0xbffae968 +@94 @94 0xbffae98b +_DebugOut @752 0xbffae99a +_DebugPrintf @753 0xbffaea4d +dprintf @762 0xbffaea4d +IsValidLocale @489 0xbffaea50 +ConvertDefaultLocale @147 0xbffaebbe +GetSystemDefaultLangID @401 0xbffaec17 +GetUserDefaultLangID @426 0xbffaec1e +GetSystemDefaultLCID @400 0xbffaec32 +InvalidateNLSCache @476 0xbffaec38 +SetLocaleInfoA @656 0xbffaec48 +EnumSystemLocalesA @208 0xbffb0f78 +EnumSystemCodePagesA @206 0xbffb1030 +EnumCalendarInfoA @196 0xbffb11e2 +EnumTimeFormatsA @210 0xbffb16c0 +EnumDateFormatsA @198 0xbffb17ac +IsValidCodePage @488 0xbffb1bee +IsDBCSLeadByteEx @485 0xbffb1c17 +NotifyNLSUserCache @535 0xbffb2c5d +EditWndProc @169 0xbff61000 +DrawFrame @158 0xbff61000 +ClientThreadConnect @53 0xbff61000 +UserClientDllInitialize @558 0xbff61000 +YieldTask @574 0xbff61009 +GetInputDesktop @240 0xbff61009 +GetProcessWindowStation @277 0xbff61009 +wsprintfW @578 0xbff61012 +LoadCursorFromFileW @361 0xbff61014 +CloseWindowStation @59 0xbff61014 +RegisterClassW @426 0xbff61014 +RegisterClassExW @425 0xbff61014 +DdeImpersonateClient @105 0xbff61014 +CharNextW @34 0xbff61014 +CharUpperW @46 0xbff61014 +LockWindowStation @375 0xbff61014 +CloseDesktop @57 0xbff61014 +UnlockWindowStation @552 0xbff61014 +LoadMenuIndirectW @371 0xbff61014 +IsCharUpperW @338 0xbff61014 +GetWindowTextLengthW @309 0xbff61014 +DispatchMessageW @141 0xbff61014 +RegisterWindowMessageW @435 0xbff61014 +GetKeyboardLayoutNameW @250 0xbff61014 +SetDeskWallpaper @469 0xbff61014 +SetProcessWindowStation @490 0xbff61014 +InitTask @321 0xbff61014 +IsCharAlphaW @334 0xbff61014 +IsCharLowerW @336 0xbff61014 +RegisterClipboardFormatW @428 0xbff61014 +RegisterTasklist @433 0xbff61014 +SwitchDesktop @529 0xbff61014 +IsCharAlphaNumericW @333 0xbff61014 +CharLowerW @30 0xbff61014 +VkKeyScanW @565 0xbff61014 +MessageBoxIndirectW @391 0xbff61014 +MapVirtualKeyW @383 0xbff6101d +CallMsgFilterW @16 0xbff6101d +RegisterLogonProcess @430 0xbff6101d +SetLogonNotifyWindow @480 0xbff6101d +IsDialogMessageW @343 0xbff6101d +LoadIconW @364 0xbff6101d +CreateAcceleratorTableW @67 0xbff6101d +LoadKeyboardLayoutW @368 0xbff6101d +LoadCursorW @362 0xbff6101d +LoadAcceleratorsW @356 0xbff6101d +LoadBitmapW @358 0xbff6101d +ChangeDisplaySettingsW @24 0xbff6101d +CalcChildScroll @13 0xbff6101d +EnumWindowStationsA @190 0xbff6101d +EnumPropsW @188 0xbff6101d +SetWindowFullScreenState @508 0xbff6101d +FindWindowW @200 0xbff6101d +GetPropW @279 0xbff6101d +EnumWindowStationsW @191 0xbff6101d +SetWindowsHookW @520 0xbff6101d +RemovePropW @440 0xbff6101d +ImpersonateDdeClientWindow @317 0xbff6101d +SetWindowTextW @515 0xbff6101d +GetClassLongW @214 0xbff6101d +GetWindowLongW @303 0xbff6101d +VkKeyScanExW @564 0xbff6101d +CharToOemW @42 0xbff6101d +CharPrevW @38 0xbff6101d +OemToCharW @402 0xbff6101d +CharLowerBuffW @29 0xbff6101d +LoadMenuW @372 0xbff6101d +CharUpperBuffW @45 0xbff6101d +UnregisterClassW @555 0xbff6101d +OpenWindowStationA @409 0xbff61026 +wvsprintfW @580 0xbff61026 +OpenWindowStationW @410 0xbff61026 +DdeCreateStringHandleW @97 0xbff61026 +GetClassNameW @216 0xbff61026 +CharNextExW @33 0xbff61026 +GetClassInfoW @212 0xbff61026 +CharToOemBuffW @41 0xbff61026 +OpenInputDesktop @408 0xbff61026 +CopyAcceleratorTableW @61 0xbff61026 +DdeSetQualityOfService @116 0xbff61026 +TranslateAcceleratorW @545 0xbff61026 +GetInternalWindowPos @242 0xbff61026 +SetPropW @492 0xbff61026 +MapVirtualKeyExW @382 0xbff61026 +GetWindowTextW @310 0xbff61026 +SetDesktopBitmap @470 0xbff61026 +InternalGetWindowText @326 0xbff61026 +GetClipboardFormatNameW @222 0xbff61026 +GetClassInfoExW @211 0xbff61026 +ModifyAccess @393 0xbff61026 +OemToCharBuffW @401 0xbff61026 +SetUserObjectSecurity @506 0xbff61026 +SetDlgItemTextW @473 0xbff61026 +SetClassLongW @462 0xbff61026 +EnumPropsExW @187 0xbff61026 +EnumDisplaySettingsW @184 0xbff61026 +EnumDesktopsA @181 0xbff61026 +EnumDesktopWindows @180 0xbff61026 +SetWindowLongW @510 0xbff61026 +GetKeyNameTextW @245 0xbff61026 +EnumDesktopsW @182 0xbff61026 +DefWindowProcW @127 0xbff6102f +InsertMenuItemW @324 0xbff6102f +SetUserObjectInformationA @504 0xbff6102f +SendNotifyMessageW @456 0xbff6102f +DefDlgProcW @121 0xbff6102f +DefMDIChildProcW @125 0xbff6102f +GetMessageW @270 0xbff6102f +SendMessageW @454 0xbff6102f +LoadStringW @374 0xbff6102f +SetWindowsHookExW @519 0xbff6102f +AppendMenuW @6 0xbff6102f +SetMenuItemInfoW @486 0xbff6102f +FindWindowExW @199 0xbff6102f +DlgDirSelectExW @149 0xbff6102f +CharPrevExW @37 0xbff6102f +GetMenuItemInfoW @261 0xbff6102f +OpenDesktopA @405 0xbff6102f +DlgDirSelectComboBoxExW @147 0xbff6102f +SetUserObjectInformationW @505 0xbff6102f +SystemParametersInfoW @533 0xbff6102f +SetInternalWindowPos @477 0xbff6102f +WinHelpW @570 0xbff6102f +GetDlgItemTextW @235 0xbff6102f +PostMessageW @417 0xbff6102f +PostThreadMessageW @420 0xbff6102f +CreateWindowStationA @86 0xbff6102f +DdeInitializeW @107 0xbff6102f +OpenDesktopW @406 0xbff6102f +CreateWindowStationW @87 0xbff6102f +DlgDirListW @145 0xbff61038 +PeekMessageW @414 0xbff61038 +ModifyMenuW @395 0xbff61038 +GetMenuStringW @265 0xbff61038 +SendDlgItemMessageW @448 0xbff61038 +GetTabbedTextExtentW @291 0xbff61038 +CreateDialogIndirectParamW @73 0xbff61038 +CreateDialogParamW @75 0xbff61038 +ChangeMenuW @26 0xbff61038 +GetUserObjectInformationW @297 0xbff61038 +GetUserObjectSecurity @298 0xbff61038 +GetUserObjectInformationA @296 0xbff61038 +DrawTextW @168 0xbff61038 +DlgDirListComboBoxW @144 0xbff61038 +CallWindowProcW @19 0xbff61038 +DialogBoxIndirectParamW @137 0xbff61038 +InsertMenuW @325 0xbff61038 +DdeQueryStringW @114 0xbff61038 +DialogBoxParamW @139 0xbff61038 +DefFrameProcW @123 0xbff61038 +DrawCaptionTempW @155 0xbff61041 +CreateDesktopA @70 0xbff61041 +DrawTextExW @167 0xbff61041 +CreateDesktopW @71 0xbff61041 +SendMessageCallbackW @451 0xbff61041 +LoadImageW @366 0xbff61041 +ToUnicode @540 0xbff61041 +SendMessageTimeoutW @453 0xbff6104a +TabbedTextOutW @535 0xbff61053 +GrayStringW @314 0xbff6105c +DrawStateW @164 0xbff61065 +CreateMDIWindowW @81 0xbff61065 +CreateWindowExW @85 0xbff6106e +keybd_event @575 0xbff6108e +mouse_event @576 0xbff6109c +CopyAcceleratorTableA @60 0xbff610a5 +CreateAcceleratorTableA @66 0xbff610ae +FreeDDElParam @203 0xbff610b7 +UnpackDDElParam @553 0xbff610c0 +PackDDElParam @411 0xbff610c9 +DdeClientTransaction @91 0xbff610d2 +DdeQueryConvInfo @111 0xbff610db +DdeConnect @93 0xbff610e4 +DdeConnectList @94 0xbff610ed +WinHelpA @569 0xbff610f6 +UnhookWindowsHook @548 0xbff610ff +SetWindowsHookExA @518 0xbff61108 +ModifyMenuA @394 0xbff61111 +InsertMenuA @322 0xbff6111d +InsertMenuItemA @323 0xbff61129 +SetMenuItemInfoA @485 0xbff61135 +GetMenuItemInfoA @260 0xbff61141 +ChangeMenuA @25 0xbff6114d +LoadMenuIndirectA @370 0xbff61159 +GetClipboardData @220 0xbff61165 +SetClipboardData @464 0xbff61171 +DialogBoxIndirectParamA @136 0xbff6117d +CreateDialogIndirectParamA @72 0xbff61189 +SystemParametersInfoA @532 0xbff61195 +GetClassInfoExA @210 0xbff611b9 +LoadImageA @365 0xbff6120e +LoadMenuA @369 0xbff61249 +LoadAcceleratorsA @355 0xbff6124d +LoadKeyboardLayoutA @367 0xbff61278 +ActivateKeyboardLayout @1 0xbff612a1 +CreateCursor @69 0xbff612c2 +CreateIcon @76 0xbff61308 +UnregisterClassA @554 0xbff6134e +GetIconInfo @239 0xbff61377 +CreateIconIndirect @79 0xbff613c5 +RegisterWindowMessageA @434 0xbff613fb +DrawAnimatedRects @152 0xbff6141c +SetWindowPos @512 0xbff61476 +DeferWindowPos @128 0xbff614a6 +MoveWindow @396 0xbff614dc +SetWindowTextA @514 0xbff61508 +GetKeyboardLayoutList @248 0xbff6150c +AdjustWindowRectEx @3 0xbff6152f +FindWindowExA @198 0xbff61584 +SetDlgItemInt @471 0xbff6160f +SetDlgItemTextA @472 0xbff61631 +GetDlgItemTextA @234 0xbff61657 +CheckDlgButton @47 0xbff61681 +CheckRadioButton @50 0xbff616a0 +MapDialogRect @379 0xbff616c1 +GetClipboardFormatNameA @221 0xbff61710 +GetClassNameA @215 0xbff61714 +GetWindowTextA @307 0xbff61718 +BeginPaint @10 0xbff6173f +EndPaint @176 0xbff61790 +GetUpdateRect @294 0xbff617d1 +SetKeyboardState @478 0xbff6181a +GetKeyboardLayoutNameA @249 0xbff6181e +GetKeyboardState @251 0xbff61822 +GetKeyNameTextA @244 0xbff61841 +ToAsciiEx @539 0xbff61867 +VkKeyScanExA @563 0xbff618a0 +IsDlgButtonChecked @344 0xbff618a4 +ToAscii @538 0xbff618c1 +MsgWaitForMultipleObjects @397 0xbff618f7 +GetMenuDefaultItem @257 0xbff61929 +GetMenuStringA @264 0xbff6194f +GetMenuItemRect @262 0xbff6197e +MenuItemFromPoint @385 0xbff619cb +DrawFrameControl @159 0xbff619ef +DrawEdge @156 0xbff619f5 +GetSubMenu @285 0xbff61a4c +SetParent @489 0xbff61a50 +GetWindow @299 0xbff61a54 +MapVirtualKeyA @380 0xbff61a58 +GetSystemMenu @288 0xbff61a5c +SetMenuItemBitmaps @484 0xbff61a7a +GetMenuCheckMarkDimensions @255 0xbff61aa2 +SetWindowContextHelpId @507 0xbff61aba +EndDialog @175 0xbff61abe +KillTimer @354 0xbff61ac2 +SetMenuContextHelpId @482 0xbff61ac6 +SetScrollInfo @495 0xbff61ae1 +GetScrollInfo @281 0xbff61b12 +TrackPopupMenuEx @542 0xbff61b39 +ScrollWindowEx @446 0xbff61b88 +ScrollDC @444 0xbff61c15 +GetScrollPos @282 0xbff61c9e +ClipCursor @55 0xbff61cea +DrawIconEx @161 0xbff61d20 +CreateCaret @68 0xbff61d58 +HiliteMenuItem @316 0xbff61d5c +DestroyCaret @131 0xbff61d80 +WaitMessage @568 0xbff61d84 +InSendMessage @318 0xbff61d88 +AnyPopup @4 0xbff61d8c +EmptyClipboard @170 0xbff61d90 +ReleaseCapture @436 0xbff61d94 +GetInputState @241 0xbff61d98 +GetCaretPos @208 0xbff61daa +GetCursorPos @226 0xbff61db0 +WindowFromPoint @573 0xbff61dee +ChildWindowFromPointEx @52 0xbff61e0c +DlgDirListComboBoxA @143 0xbff61e32 +DlgDirListA @142 0xbff61e36 +DlgDirSelectComboBoxExA @146 0xbff61e65 +DlgDirSelectExA @148 0xbff61e69 +DrawTextExA @166 0xbff61e94 +ReleaseDC @437 0xbff61f52 +ShowOwnedPopups @523 0xbff61f56 +ShowWindow @525 0xbff61f5a +ShowWindowAsync @526 0xbff61f5e +FlashWindow @201 0xbff61f62 +EnableWindow @173 0xbff61f66 +IsChild @339 0xbff61f6a +ChangeClipboardChain @22 0xbff61f6e +ExcludeUpdateRgn @194 0xbff61f72 +GetWindowRgn @306 0xbff61f76 +ValidateRgn @561 0xbff61f7a +SetMenu @481 0xbff61f7e +SetCursorPos @467 0xbff61f86 +SetCaretPos @460 0xbff61f8a +GetDCEx @228 0xbff61fa6 +MapVirtualKeyExA @381 0xbff61faa +SwitchToThisWindow @530 0xbff61fcb +InvertRect @330 0xbff61fe6 +ValidateRect @560 0xbff61fec +DrawFocusRect @157 0xbff61ff2 +FrameRect @202 0xbff6202c +InvalidateRect @328 0xbff62032 +FillRect @196 0xbff62038 +GetCursor @225 0xbff62076 +CreateMenu @82 0xbff6207a +CreatePopupMenu @83 0xbff6207e +DdePostAdvise @110 0xbff62092 +DdeSetUserHandle @117 0xbff62096 +DdeAbandonTransaction @88 0xbff6209a +DdeNameService @109 0xbff620b7 +DdeCreateDataHandle @95 0xbff620de +DdeGetData @103 0xbff62117 +DdeAddData @90 0xbff6211b +DdeAccessData @89 0xbff62149 +DdeGetLastError @104 0xbff62173 +DdeCreateStringHandleA @96 0xbff6218c +DdeQueryStringA @113 0xbff621b8 +DdeCmpStringHandles @92 0xbff621ea +ExitWindowsEx @195 0xbff621ee +DdeFreeStringHandle @102 0xbff621f2 +DdeKeepStringHandle @108 0xbff621f6 +EnableScrollBar @172 0xbff62210 +GetUpdateRgn @295 0xbff62214 +SetWindowRgn @513 0xbff62218 +InvalidateRgn @329 0xbff6221c +SetMenuDefaultItem @483 0xbff62220 +RemoveMenu @438 0xbff62224 +DeleteMenu @129 0xbff62228 +ShowScrollBar @524 0xbff6222c +GetClipCursor @219 0xbff6224c +RedrawWindow @422 0xbff6228d +OemKeyScan @398 0xbff622cf +GetWindowTextLengthA @308 0xbff622d3 +GetQueueStatus @280 0xbff622d7 +GetMenu @254 0xbff622db +GetMenuContextHelpId @256 0xbff622df +GetWindowContextHelpId @300 0xbff622e3 +GetNextDlgGroupItem @271 0xbff62305 +GetNextDlgTabItem @272 0xbff62309 +BeginDeferWindowPos @9 0xbff6232f +GetParent @275 0xbff62333 +GetLastActivePopup @253 0xbff62337 +GetTopWindow @293 0xbff6233b +EnumClipboardFormats @179 0xbff6233f +SetClipboardViewer @465 0xbff62343 +SetFocus @475 0xbff62347 +SetActiveWindow @457 0xbff6234b +SetCapture @458 0xbff6234f +VkKeyScanA @562 0xbff62353 +ArrangeIconicWindows @7 0xbff62357 +GetWindowDC @301 0xbff6235b +GetDC @227 0xbff6235f +WindowFromDC @572 0xbff62363 +SetForegroundWindow @476 0xbff6237d +PostQuitMessage @418 0xbff62381 +SwapMouseButton @528 0xbff62385 +OpenIcon @407 0xbff62389 +CloseWindow @58 0xbff6238d +DestroyWindow @135 0xbff62391 +EndDeferWindowPos @174 0xbff62395 +BringWindowToTop @11 0xbff62399 +LockWindowUpdate @376 0xbff6239d +SetShellWindow @498 0xbff623a1 +IsMenu @347 0xbff623a5 +UpdateWindow @557 0xbff623a9 +GetKeyState @246 0xbff623ad +GetAsyncKeyState @205 0xbff623b1 +DrawMenuBar @162 0xbff623b5 +DestroyMenu @134 0xbff623b9 +GetMenuItemCount @258 0xbff623bd +MessageBeep @386 0xbff623c1 +DestroyAcceleratorTable @130 0xbff623c5 +SetCaretBlinkTime @459 0xbff623c9 +HideCaret @315 0xbff623cd +ShowCaret @521 0xbff623d1 +PaintDesktop @412 0xbff623d5 +GetWindowThreadProcessId @311 0xbff623ed +GetPropA @278 0xbff623f1 +RemovePropA @439 0xbff623f5 +WaitForInputIdle @567 0xbff6241e +DdeQueryNextServer @112 0xbff62422 +UserSignalProc @559 0xbff62466 +AttachThreadInput @8 0xbff62487 +DdeEnableCallback @100 0xbff6248b +PlaySoundEvent @415 0xbff624a9 +UnloadKeyboardLayout @551 0xbff624ad +ReplyMessage @441 0xbff624b1 +DdeUninitialize @119 0xbff624b5 +DdeDisconnectList @99 0xbff624b9 +DdeDisconnect @98 0xbff624bd +DdeUnaccessData @118 0xbff624c1 +DdeFreeDataHandle @101 0xbff624c5 +RegisterSystemThread @432 0xbff624dc +SysErrorBox @531 0xbff624f5 +WinOldAppHackoMatic @571 0xbff6252b +GetKeyboardLayout @247 0xbff6252f +DdeReconnect @115 0xbff62533 +MapWindowPoints @384 0xbff6258b +GetPriorityClipboardFormat @276 0xbff6261d +TabbedTextOutA @534 0xbff626ac +GetTabbedTextExtentA @290 0xbff6275a +CreateIconFromResourceEx @78 0xbff627fc +SetSysColors @499 0xbff62867 +SetSysColorsTemp @500 0xbff628fd +TileWindows @537 0xbff62993 +CascadeWindows @21 0xbff62999 +DragDetect @150 0xbff62a55 +DragObject @151 0xbff62a75 +SetWindowPlacement @511 0xbff62aa2 +GetWindowPlacement @304 0xbff62ae2 +CloseClipboard @56 0xbff62b48 +SetCursor @466 0xbff62b5a +GetMenuItemID @259 0xbff62b74 +CheckMenuItem @48 0xbff62b96 +GetMenuState @263 0xbff62b9a +EnableMenuItem @171 0xbff62b9e +CheckMenuRadioItem @49 0xbff62bc4 +MessageBoxExA @388 0xbff62bec +LookupIconIdFromDirectoryEx @378 0xbff62c21 +GetKBCodePage @243 0xbff62c50 +GetKeyboardType @252 0xbff62c64 +ShowCursor @522 0xbff62c68 +SetDoubleClickTime @474 0xbff62c6c +OpenClipboard @404 0xbff62c70 +RegisterClassExA @424 0xbff62d11 +CreateDialogParamA @74 0xbff62d94 +DialogBoxParamA @138 0xbff62dc9 +GrayStringA @313 0xbff62e02 +DrawStateA @163 0xbff62e40 +SetTimer @503 0xbff62e82 +EnumPropsExA @186 0xbff62ea9 +DdeInitializeA @106 0xbff62ee8 +IsHungThread @345 0xbff62f12 +UnhookWindowsHookEx @549 0xbff62f16 +EndTask @177 0xbff62f2d +RegisterNetworkCapabilities @431 0xbff62f5c +TileChildWindows @536 0xbff62f75 +CascadeChildWindows @20 0xbff62f79 +DrawCaptionTempA @154 0xbff62f95 +RegisterHotKey @429 0xbff62ff8 +SetSystemCursor @501 0xbff6301b +EnumPropsA @185 0xbff6301f +UnregisterHotKey @556 0xbff63023 +ChangeDisplaySettingsA @23 0xbff6303e +EnumDisplaySettingsA @183 0xbff63066 +GetNextQueueWindow @273 0xbff63097 +WNDPROC_CALLBACK @566 0xbff632d0 +InitSharedTable @320 0xbff63895 +SetWindowsHookA @517 0xbff638ab +IsWindowUnicode @351 0xbff638c4 +GetThreadDesktop @292 0xbff638c9 +SetThreadDesktop @502 0xbff638d1 +MessageBoxA @387 0xbff638d9 +MessageBoxExW @389 0xbff638f3 +MessageBoxW @392 0xbff639a4 +SubtractRect @527 0xbff639be +UnionRect @550 0xbff63a85 +RegisterClassA @423 0xbff63b0d +GetClassInfoA @209 0xbff63b6f +ScrollWindow @445 0xbff63bdd +AppendMenuA @5 0xbff63c0b +DrawTextA @165 0xbff63c2a +TrackPopupMenu @541 0xbff63c6c +GetScrollRange @283 0xbff63c89 +SetScrollRange @497 0xbff63cca +SetScrollPos @496 0xbff63d24 +GetDlgItemInt @233 0xbff63d57 +MessageBoxIndirectA @390 0xbff63d71 +BroadcastSystemMessage @12 0xbff63e1e +CallMsgFilterA @15 0xbff63e29 +CallMsgFilter @14 0xbff63e29 +CallNextHookEx @17 0xbff63e32 +SendMessageCallbackA @450 0xbff63e44 +SendMessageTimeoutA @452 0xbff63e4d +DispatchMessageA @140 0xbff63e5f +CharLowerA @27 0xbff64040 +CharUpperA @43 0xbff64055 +CharNextA @31 0xbff6406a +CharNextExA @32 0xbff640a1 +CharPrevA @35 0xbff640f5 +CharPrevExA @36 0xbff6413d +CharLowerBuffA @28 0xbff6419c +CharUpperBuffA @44 0xbff641c2 +IsCharLowerA @335 0xbff641e8 +IsCharUpperA @337 0xbff64222 +IsCharAlphaNumericA @332 0xbff64256 +IsCharAlphaA @331 0xbff64290 +GetSysColor @286 0xbff6437e +GetSysColorBrush @287 0xbff6439f +GetDialogBaseUnits @230 0xbff643c1 +GetDoubleClickTime @236 0xbff643f9 +GetCaretBlinkTime @207 0xbff64406 +CountClipboardFormats @65 0xbff64413 +IsWindow @349 0xbff644bf +GetDlgItem @232 0xbff64516 +GetDlgCtrlID @231 0xbff64550 +GetWindowRect @305 0xbff6456d +GetClientRect @218 0xbff645ad +ScreenToClient @443 0xbff64627 +ClientToScreen @54 0xbff6465f +IsIconic @346 0xbff64697 +IsZoomed @353 0xbff646bc +IsWindowEnabled @350 0xbff646e1 +IsWindowVisible @352 0xbff64706 +GetDesktopWindow @229 0xbff64746 +GetShellWindow @284 0xbff6474d +GetClipboardOwner @223 0xbff64754 +GetClipboardViewer @224 0xbff6475b +GetOpenClipboardWindow @274 0xbff64762 +GetForegroundWindow @238 0xbff6478a +GetActiveWindow @204 0xbff647aa +GetCapture @206 0xbff647b1 +GetFocus @237 0xbff647b8 +GetMessagePos @268 0xbff647df +GetMessageTime @269 0xbff647e6 +GetMessageExtraInfo @267 0xbff647ed +SetMessageExtraInfo @487 0xbff647fe +IsClipboardFormatAvailable @340 0xbff6480f +GetSystemMetrics @289 0xbff6488b +SetLastErrorEx @479 0xbff64922 +SetDebugErrorLevel @468 0xbff6492f +ReuseDDElParam @442 0xbff6493f +SetRect @493 0xbff64954 +SetRectEmpty @494 0xbff64976 +CopyRect @64 0xbff64993 +IsRectEmpty @348 0xbff649b9 +PtInRect @421 0xbff649dd +OffsetRect @403 0xbff64a0f +InflateRect @319 0xbff64a33 +IntersectRect @327 0xbff64a57 +EqualRect @193 0xbff64ace +CharToOemA @39 0xbff64af8 +CharToOemBuffA @40 0xbff64afd +OemToCharA @399 0xbff64b02 +OemToCharBuffA @400 0xbff64b07 +LoadStringA @373 0xbff64b0c +wsprintfA @577 0xbff64b11 +wvsprintfA @579 0xbff64b16 +RegisterClipboardFormatA @427 0xbff64b1b +GetWindowWord @312 0xbff64b20 +GetWindowLongA @302 0xbff64b27 +SetWindowWord @516 0xbff64bb2 +SetWindowLongA @509 0xbff64bcd +GetClassWord @217 0xbff64bed +GetClassLongA @213 0xbff64bf4 +SetClassWord @463 0xbff64c03 +SetClassLongA @461 0xbff64c1e +SetPropA @491 0xbff64c3e +EnumWindows @192 0xbff64c5e +EnumChildWindows @178 0xbff64c6b +EnumThreadWindows @189 0xbff64c73 +PostThreadMessageA @419 0xbff64c7f +PostMessageA @416 0xbff64c88 +GetMessageA @266 0xbff64cbd +TranslateMessage @547 0xbff64ce9 +TranslateAcceleratorA @544 0xbff64d22 +TranslateAccelerator @543 0xbff64d22 +TranslateMDISysAccel @546 0xbff64d57 +IsDialogMessageA @342 0xbff64d7c +IsDialogMessage @341 0xbff64d7c +PeekMessageA @413 0xbff64d8d +DefDlgProcA @120 0xbff64d9b +SendDlgItemMessageA @447 0xbff64da8 +SendMessageA @449 0xbff64db6 +CallWindowProcA @18 0xbff64e40 +SendNotifyMessageA @455 0xbff64e77 +FindWindowA @197 0xbff64e98 +ChildWindowFromPoint @51 0xbff64ea3 +AdjustWindowRect @2 0xbff64ec0 +CreateMDIWindowA @80 0xbff64edd +DrawCaption @153 0xbff64efe +DestroyCursor @132 0xbff64f21 +DestroyIcon @133 0xbff64f21 +LookupIconIdFromDirectory @377 0xbff64f2c +CreateIconFromResource @77 0xbff64f3d +CopyIcon @62 0xbff64f65 +CopyImage @63 0xbff64f70 +LoadIconA @363 0xbff64f79 +LoadCursorA @359 0xbff64f8f +LoadCursorFromFileA @360 0xbff64fa5 +LoadBitmapA @357 0xbff64fb8 +DrawIcon @160 0xbff64fcb +SetMessageQueue @488 0xbff64ff9 +DefWindowProcA @126 0xbff6512b +DefMDIChildProcA @124 0xbff65163 +DefFrameProcA @122 0xbff6519b +CreateWindowExA @84 0xbff651cf +GetTextExtentExPointA @303 0xbff31024 +GetKerningPairs @266 0xbff3102d +GetKerningPairsA @267 0xbff3102d +GetOutlineTextMetricsA @282 0xbff31036 +GetGlyphOutlineA @261 0xbff3103f +GetGlyphOutline @260 0xbff3103f +GetFontData @257 0xbff31048 +SetAbortProc @370 0xbff31051 +StartDocA @415 0xbff31063 +LineDDA @322 0xbff3106c +StretchDIBits @419 0xbff3107e +SetDIBits @381 0xbff31087 +PlayMetaFileRecord @338 0xbff31090 +GetDIBits @247 0xbff31099 +EnumObjects @195 0xbff310a5 +CreateBitmap @130 0xbff310b1 +SetBitmapBits @372 0xbff310bd +SetDIBitsToDevice @382 0xbff310c9 +SetMetaFileBitsEx @392 0xbff310d5 +GetTextMetricsA @311 0xbff310e1 +GetObjectA @279 0xbff310ed +GetBitmapBits @221 0xbff310f9 +CreateBitmapIndirect @131 0xbff31105 +DeleteMetaFile @174 0xbff31111 +SetEnhMetaFileBits @384 0xbff3111d +GetEnhMetaFilePaletteEntries @255 0xbff31135 +GetEnhMetaFileDescriptionA @252 0xbff31141 +GetEnhMetaFileBits @251 0xbff3114d +GdiComment @212 0xbff31158 +GetPath @285 0xbff31161 +Escape @197 0xbff311b7 +ExtEscape @201 0xbff312d1 +GetDeviceCaps @248 0xbff3134f +DrawEscape @180 0xbff315b4 +CreatePolygonRgn @163 0xbff315e3 +PolyBezierTo @341 0xbff31675 +Polyline @348 0xbff3167b +PolylineTo @349 0xbff31681 +Polygon @347 0xbff31687 +PolyBezier @340 0xbff3168d +LPtoDP @321 0xbff31882 +DPtoLP @170 0xbff31888 +ExtTextOutW @205 0xbff31912 +ExtTextOutA @204 0xbff31918 +GetClipBox @239 0xbff31a7c +AnimatePalette @110 0xbff31ac1 +GetBitmapDimensionEx @222 0xbff31aee +GetTextExtentPoint32W @306 0xbff31b30 +GetTextExtentPointA @307 0xbff31b36 +GetTextExtentPoint32A @305 0xbff31b3c +GetTextExtentPointW @308 0xbff31b42 +ScaleWindowExtEx @365 0xbff31ba1 +ScaleViewportExtEx @364 0xbff31ba7 +MoveToEx @326 0xbff31bf9 +OffsetViewportOrgEx @329 0xbff31bff +OffsetWindowOrgEx @330 0xbff31c05 +SetBitmapDimensionEx @373 0xbff31c0b +SetViewportExtEx @409 0xbff31c11 +SetViewportOrgEx @410 0xbff31c17 +SetWindowExtEx @412 0xbff31c1d +SetWindowOrgEx @413 0xbff31c23 +ExtCreatePen @199 0xbff31c6d +SetMiterLimit @394 0xbff31c9c +CreateEnhMetaFileA @146 0xbff31cc2 +GetEnhMetaFileHeader @254 0xbff31cfd +SetDIBColorTable @380 0xbff31d29 +SetPaletteEntries @396 0xbff31d2d +GetPaletteEntries @284 0xbff31d31 +GetSystemPaletteEntries @296 0xbff31d35 +GetDIBColorTable @246 0xbff31d39 +CheckColorsInGamut @117 0xbff31da5 +GetLogColorSpaceA @269 0xbff31dd6 +CreateColorSpaceA @133 0xbff31dfd +CreateMetaFileA @156 0xbff31e01 +CreatePalette @158 0xbff31e05 +GetEnhMetaFileA @250 0xbff31e09 +GetICMProfileA @264 0xbff31e2a +RoundRect @362 0xbff31e58 +Pie @334 0xbff31e88 +Arc @111 0xbff31e8c +Chord @119 0xbff31e90 +PatBlt @332 0xbff31ec8 +BitBlt @114 0xbff31ef3 +StretchBlt @418 0xbff31f2a +SetPixel @397 0xbff31f69 +GetPixel @286 0xbff31f92 +ExtFloodFill @202 0xbff31fb8 +FloodFill @210 0xbff31fdf +CreatePen @160 0xbff32002 +CreateSolidBrush @169 0xbff32023 +GetNearestColor @277 0xbff320bb +SetMapperFlags @391 0xbff320c7 +UpdateColors @427 0xbff3210c +GetSystemPaletteUse @297 0xbff32124 +CreateHalftonePalette @152 0xbff32128 +CloseEnhMetaFile @120 0xbff3212c +GetColorSpace @242 0xbff32130 +CreateCompatibleDC @136 0xbff32134 +CreatePatternBrush @159 0xbff32138 +CloseMetaFile @122 0xbff3213c +SetSystemPaletteUse @404 0xbff32156 +SelectObject @368 0xbff3215a +SetTextAlign @405 0xbff3215e +TextOutW @424 0xbff321a5 +TextOutA @423 0xbff321a9 +GetMiterLimit @276 0xbff321dc +SetICMProfileA @388 0xbff321e0 +GetDeviceGammaRamp @249 0xbff321e4 +SetDeviceGammaRamp @383 0xbff321e8 +ResetDCA @358 0xbff32251 +CopyMetaFileA @128 0xbff32255 +CopyEnhMetaFileA @126 0xbff32259 +CreateFontA @148 0xbff3227e +CreateFontIndirectA @149 0xbff322dc +CreateHatchBrush @153 0xbff32319 +GetNearestPaletteIndex @278 0xbff3231d +CreatePenIndirect @161 0xbff3233a +ExtSelectClipRgn @203 0xbff32374 +ColorMatchToTarget @123 0xbff32378 +LineTo @323 0xbff3237c +OffsetClipRgn @327 0xbff32380 +PtVisible @351 0xbff32384 +OffsetRgn @328 0xbff32388 +SetTextJustification @408 0xbff3238c +PtInRegion @350 0xbff32390 +Rectangle @355 0xbff323b4 +Ellipse @181 0xbff323b8 +IntersectClipRect @319 0xbff323bc +ExcludeClipRect @198 0xbff323c0 +RectInRegion @353 0xbff323e8 +ExtCreateRegion @200 0xbff32428 +StartPage @417 0xbff32457 +AbortPath @106 0xbff3245b +BeginPath @113 0xbff3245f +CloseFigure @121 0xbff32463 +EndPath @184 0xbff32467 +FillPath @206 0xbff3246b +FlattenPath @209 0xbff3246f +PathToRegion @333 0xbff32473 +StrokeAndFillPath @420 0xbff32477 +StrokePath @421 0xbff3247b +WidenPath @431 0xbff3247f +GetArcDirection @219 0xbff32483 +SetMetaRgn @393 0xbff32487 +DeleteEnhMetaFile @173 0xbff3248b +DeleteColorSpace @171 0xbff3248f +UnrealizeObject @426 0xbff32493 +DeleteDC @172 0xbff32497 +SaveDC @363 0xbff3249b +DeleteObject @175 0xbff3249f +GetTextCharacterExtra @299 0xbff324a3 +GetTextCharset @300 0xbff324a7 +AbortDoc @105 0xbff324ab +EndDoc @182 0xbff324af +EndPage @183 0xbff324b3 +SelectClipPath @366 0xbff324cf +SetArcDirection @371 0xbff324d3 +SetICMMode @387 0xbff324d7 +SetColorSpace @379 0xbff324db +RestoreDC @361 0xbff324df +SelectClipRgn @367 0xbff324e3 +SetBkMode @375 0xbff324e7 +SetROP2 @401 0xbff324ef +SetStretchBltMode @403 0xbff324f3 +SetPolyFillMode @400 0xbff324f7 +SetMapMode @390 0xbff324fb +EqualRgn @196 0xbff324ff +SetTextCharacterExtra @406 0xbff32503 +PlayMetaFile @337 0xbff32507 +ResizePalette @360 0xbff3250b +GetRasterizerCaps @291 0xbff3252f +GetBoundsRect @225 0xbff32552 +SetBoundsRect @376 0xbff3259b +GetFontLanguageInfo @258 0xbff326f7 +@100 @100 0xbff327a0 +@102 @102 0xbff327dc +@103 @103 0xbff3282f +CreateScalableFontResourceA @167 0xbff32833 +@101 @101 0xbff32837 +@104 @104 0xbff32870 +AddFontResourceA @107 0xbff328be +RemoveFontResourceA @356 0xbff328c2 +GetTextFaceA @309 0xbff32903 +CreateCompatibleBitmap @135 0xbff3298a +SelectPalette @369 0xbff32c02 +RealizePalette @352 0xbff32c08 +PolyPolyline @344 0xbff32c2f +GetCharWidthA @233 0xbff32c46 +GetCharWidthW @236 0xbff32c57 +GetCharABCWidthsA @227 0xbff32c68 +CreateDCA @137 0xbff32cf0 +CreateICA @154 0xbff32d0d +SetPixelV @399 0xbff32d2a +PlayEnhMetaFileRecord @336 0xbff32d4a +CreateDIBSection @141 0xbff32d66 +CreateDiscardableBitmap @143 0xbff32e03 +CreateDIBitmap @142 0xbff32e17 +CreateBrushIndirect @132 0xbff32e80 +CreateDIBPatternBrush @139 0xbff32f36 +CreateDIBPatternBrushPt @140 0xbff32f5d +SetGraphicsMode @386 0xbff3309a +GetGraphicsMode @263 0xbff330b3 +GdiSetBatchLimit @218 0xbff330bb +GdiGetBatchLimit @214 0xbff330c3 +GdiFlush @213 0xbff330c9 +EnumFontsA @190 0xbff3314c +EnumFontFamiliesA @186 0xbff33168 +EnumFontFamiliesExA @187 0xbff33184 +TranslateCharsetInfo @425 0xbff33208 +GetCharacterPlacementA @237 0xbff3339d +EnumMetaFile @194 0xbff3354e +EnumEnhMetaFile @185 0xbff339b3 +PlayEnhMetaFile @335 0xbff339db +SetObjectOwner @395 0xbff33a6f +ByeByeGDI @115 0xbff33a91 +PolyPolygon @343 0xbff33bd5 +CreatePolyPolygonRgn @162 0xbff33c13 +GetCurrentObject @243 0xbff3439c +GetBkMode @224 0xbff343bd +GetMapMode @271 0xbff343c3 +GetPolyFillMode @288 0xbff343c9 +GetROP2 @289 0xbff343cf +GetStretchBltMode @295 0xbff343d5 +GetTextAlign @298 0xbff34424 +GetBkColor @223 0xbff3443c +GetTextColor @302 0xbff34442 +GetAspectRatioFilterEx @220 0xbff34492 +GetCurrentPositionEx @244 0xbff34498 +GetDCOrgEx @245 0xbff3449e +GetViewportExtEx @313 0xbff344a4 +GetViewportOrgEx @314 0xbff344aa +GetWindowExtEx @316 0xbff344b0 +GetWindowOrgEx @317 0xbff344b6 +GetStockObject @294 0xbff34517 +GetRegionData @292 0xbff3452f +CombineRgn @124 0xbff34618 +GetRgnBox @293 0xbff347c7 +GetObjectType @280 0xbff349a5 +GetMetaRgn @275 0xbff34a9c +GetClipRgn @240 0xbff34aa0 +GetRandomRgn @290 0xbff34ab2 +CreateEllipticRgn @144 0xbff34c75 +CreateRectRgn @164 0xbff34c7f +CreateEllipticRgnIndirect @145 0xbff34c89 +CreateRectRgnIndirect @165 0xbff34c90 +RectVisible @354 0xbff34cb8 +CreateRoundRectRgn @166 0xbff34cdf +SetRectRgn @402 0xbff34ce9 +SetTextColor @407 0xbff34d39 +SetBkColor @374 0xbff34d40 +PaintRgn @331 0xbff34db3 +FillRgn @207 0xbff34dbc +FrameRgn @211 0xbff34dc5 +InvertRgn @320 0xbff34dce +EnumICMProfilesA @192 0xbff34f04 +FixBrushOrgEx @208 0xbff34f72 +SetBrushOrgEx @377 0xbff34f72 +GetBrushOrgEx @226 0xbff34ffc +GetWinMetaFileBits @315 0xbff350ba +SetWinMetaFileBits @411 0xbff35332 +GetMetaFileA @272 0xbff35605 +GetMetaFileBitsEx @273 0xbff35613 +gdiPlaySpoolStream @432 0xbff36fe2 +ChoosePixelFormat @118 0xbff37436 +DescribePixelFormat @176 0xbff3746a +GetPixelFormat @287 0xbff374a6 +SetPixelFormat @398 0xbff374d6 +SwapBuffers @422 0xbff3750e +GetMetaFileW @274 0xbff37549 +SetFontEnumeration @385 0xbff37549 +AddFontResourceW @108 0xbff37549 +CreateColorSpaceW @134 0xbff37549 +CancelDC @116 0xbff37549 +GetEnhMetaFileW @256 0xbff37549 +RemoveFontResourceW @357 0xbff37549 +CreateMetaFileW @157 0xbff37549 +CreateFontIndirectW @150 0xbff37549 +GetWorldTransform @318 0xbff37552 +GetColorAdjustment @241 0xbff37552 +ResetDCW @359 0xbff37552 +SetWorldTransform @414 0xbff37552 +GetTextMetricsW @312 0xbff37552 +StartDocW @416 0xbff37552 +SetICMProfileW @389 0xbff37552 +CopyEnhMetaFileW @127 0xbff37552 +CopyMetaFileW @129 0xbff37552 +SetColorAdjustment @378 0xbff37552 +GetLogColorSpaceW @270 0xbff3755b +GetObjectW @281 0xbff3755b +GetOutlineTextMetricsW @283 0xbff3755b +GetKerningPairsW @268 0xbff3755b +EnumICMProfilesW @193 0xbff3755b +GetEnhMetaFileDescriptionW @253 0xbff3755b +GetICMProfileW @265 0xbff3755b +CombineTransform @125 0xbff3755b +ModifyWorldTransform @325 0xbff3755b +PolyTextOutA @345 0xbff3755b +PolyTextOutW @346 0xbff3755b +GetTextFaceW @310 0xbff3755b +EnumFontsW @191 0xbff37564 +GetCharABCWidthsW @230 0xbff37564 +GetCharABCWidthsFloatA @228 0xbff37564 +GetCharABCWidthsFloatW @229 0xbff37564 +CreateDCW @138 0xbff37564 +CreateICW @155 0xbff37564 +CreateEnhMetaFileW @147 0xbff37564 +EnumFontFamiliesW @189 0xbff37564 +CreateScalableFontResourceW @168 0xbff37564 +UpdateICMRegKeyW @430 0xbff37564 +PolyDraw @342 0xbff37564 +GetCharWidthFloatW @235 0xbff37564 +GetFontResourceInfo @259 0xbff37564 +GetCharWidth32W @232 0xbff37564 +GetCharWidth32A @231 0xbff37564 +GetCharWidthFloatA @234 0xbff37564 +EnumFontFamiliesExW @188 0xbff3756d +GdiPlayJournal @216 0xbff3756d +DeviceCapabilitiesExA @178 0xbff37576 +DeviceCapabilitiesEx @177 0xbff37576 +AngleArc @109 0xbff37576 +GdiPlayDCScript @215 0xbff37576 +GetCharacterPlacementW @238 0xbff37576 +DeviceCapabilitiesExW @179 0xbff37576 +GetTextExtentExPointW @304 0xbff3757f +GetGlyphOutlineW @262 0xbff3757f +GdiPlayScript @217 0xbff3757f +ArcTo @112 0xbff37588 +PlgBlt @339 0xbff37591 +MaskBlt @324 0xbff3759a +CreateFontW @151 0xbff375a3 +UpdateICMRegKeyA @429 0xbff388a1 +UpdateICMRegKey @428 0xbff388ba +GetTextCharsetInfo @301 0xbff398f0 +pfnSelectPalette @434 0xbff4b0a4 +pfnRealizePalette @433 0xbff4b0a8 +@219 @219 0xbff00000 +@220 @220 0xbff00000 +@218 @218 0xbff00000 +@216 @216 0xbff00000 +@217 @217 0xbff00000 +@224 @224 0xbff00000 +@225 @225 0xbff00000 +@223 @223 0xbff00000 +@221 @221 0xbff00000 +@222 @222 0xbff00000 +@209 @209 0xbff00000 +@210 @210 0xbff00000 +@208 @208 0xbff00000 +@206 @206 0xbff00000 +@207 @207 0xbff00000 +@214 @214 0xbff00000 +@215 @215 0xbff00000 +@213 @213 0xbff00000 +@211 @211 0xbff00000 +@212 @212 0xbff00000 +@241 @241 0xbff00000 +@242 @242 0xbff00000 +@240 @240 0xbff00000 +@238 @238 0xbff00000 +@239 @239 0xbff00000 +@246 @246 0xbff00000 +@247 @247 0xbff00000 +@245 @245 0xbff00000 +@243 @243 0xbff00000 +@244 @244 0xbff00000 +@229 @229 0xbff00000 +@230 @230 0xbff00000 +@228 @228 0xbff00000 +@226 @226 0xbff00000 +@227 @227 0xbff00000 +@236 @236 0xbff00000 +@237 @237 0xbff00000 +@235 @235 0xbff00000 +@231 @231 0xbff00000 +@232 @232 0xbff00000 +@179 @179 0xbff00000 +@180 @180 0xbff00000 +@178 @178 0xbff00000 +@176 @176 0xbff00000 +@177 @177 0xbff00000 +@184 @184 0xbff00000 +@185 @185 0xbff00000 +@183 @183 0xbff00000 +@181 @181 0xbff00000 +@182 @182 0xbff00000 +@168 @168 0xbff00000 +@170 @170 0xbff00000 +@166 @166 0xbff00000 +@162 @162 0xbff00000 +@165 @165 0xbff00000 +@174 @174 0xbff00000 +@175 @175 0xbff00000 +@173 @173 0xbff00000 +@171 @171 0xbff00000 +@172 @172 0xbff00000 +@199 @199 0xbff00000 +@200 @200 0xbff00000 +@198 @198 0xbff00000 +@196 @196 0xbff00000 +@197 @197 0xbff00000 +@204 @204 0xbff00000 +@205 @205 0xbff00000 +@203 @203 0xbff00000 +@201 @201 0xbff00000 +@202 @202 0xbff00000 +@189 @189 0xbff00000 +@190 @190 0xbff00000 +@188 @188 0xbff00000 +@186 @186 0xbff00000 +@187 @187 0xbff00000 +@194 @194 0xbff00000 +@195 @195 0xbff00000 +@193 @193 0xbff00000 +@191 @191 0xbff00000 +@192 @192 0xbff00000 +@301 @301 0xbff00000 +@302 @302 0xbff00000 +@300 @300 0xbff00000 +@298 @298 0xbff00000 +@299 @299 0xbff00000 +@306 @306 0xbff00000 +@307 @307 0xbff00000 +@305 @305 0xbff00000 +@303 @303 0xbff00000 +@304 @304 0xbff00000 +@291 @291 0xbff00000 +@292 @292 0xbff00000 +@290 @290 0xbff00000 +@288 @288 0xbff00000 +@289 @289 0xbff00000 +@296 @296 0xbff00000 +@297 @297 0xbff00000 +@295 @295 0xbff00000 +@293 @293 0xbff00000 +@294 @294 0xbff00000 +@343 @343 0xbff00000 +@344 @344 0xbff00000 +@342 @342 0xbff00000 +@318 @318 0xbff00000 +@319 @319 0xbff00000 +@348 @348 0xbff00000 +@349 @349 0xbff00000 +@347 @347 0xbff00000 +@345 @345 0xbff00000 +@346 @346 0xbff00000 +@311 @311 0xbff00000 +@312 @312 0xbff00000 +@310 @310 0xbff00000 +@308 @308 0xbff00000 +@309 @309 0xbff00000 +@316 @316 0xbff00000 +@317 @317 0xbff00000 +@315 @315 0xbff00000 +@313 @313 0xbff00000 +@314 @314 0xbff00000 +@261 @261 0xbff00000 +@262 @262 0xbff00000 +@260 @260 0xbff00000 +@258 @258 0xbff00000 +@259 @259 0xbff00000 +@266 @266 0xbff00000 +@267 @267 0xbff00000 +@265 @265 0xbff00000 +@263 @263 0xbff00000 +@264 @264 0xbff00000 +@251 @251 0xbff00000 +@252 @252 0xbff00000 +@250 @250 0xbff00000 +@248 @248 0xbff00000 +@249 @249 0xbff00000 +@256 @256 0xbff00000 +@257 @257 0xbff00000 +@255 @255 0xbff00000 +@253 @253 0xbff00000 +@254 @254 0xbff00000 +@281 @281 0xbff00000 +@282 @282 0xbff00000 +@280 @280 0xbff00000 +@278 @278 0xbff00000 +@279 @279 0xbff00000 +@286 @286 0xbff00000 +@287 @287 0xbff00000 +@285 @285 0xbff00000 +@283 @283 0xbff00000 +@284 @284 0xbff00000 +@271 @271 0xbff00000 +@272 @272 0xbff00000 +@270 @270 0xbff00000 +@268 @268 0xbff00000 +@269 @269 0xbff00000 +@276 @276 0xbff00000 +@277 @277 0xbff00000 +@275 @275 0xbff00000 +@273 @273 0xbff00000 +@274 @274 0xbff00000 +@98 @98 0xbff00000 +@97 @97 0xbff00000 +@96 @96 0xbff00000 +@101 @101 0xbff00000 +@100 @100 0xbff00000 +@99 @99 0xbff00000 +@92 @92 0xbff00000 +@91 @91 0xbff00000 +@90 @90 0xbff00000 +@95 @95 0xbff00000 +@94 @94 0xbff00000 +@93 @93 0xbff00000 +@102 @102 0xbff00000 +@111 @111 0xbff00000 +@110 @110 0xbff00000 +@109 @109 0xbff00000 +@114 @114 0xbff00000 +@113 @113 0xbff00000 +@112 @112 0xbff00000 +@105 @105 0xbff00000 +@104 @104 0xbff00000 +@103 @103 0xbff00000 +@108 @108 0xbff00000 +@107 @107 0xbff00000 +@106 @106 0xbff00000 +@89 @89 0xbff00000 +@68 @68 0xbff00000 +@67 @67 0xbff00000 +@66 @66 0xbff00000 +@75 @75 0xbff00000 +@70 @70 0xbff00000 +@69 @69 0xbff00000 +@62 @62 0xbff00000 +@61 @61 0xbff00000 +@60 @60 0xbff00000 +@65 @65 0xbff00000 +@64 @64 0xbff00000 +@63 @63 0xbff00000 +@76 @76 0xbff00000 +@85 @85 0xbff00000 +@84 @84 0xbff00000 +@83 @83 0xbff00000 +@88 @88 0xbff00000 +@87 @87 0xbff00000 +@86 @86 0xbff00000 +@79 @79 0xbff00000 +@78 @78 0xbff00000 +@77 @77 0xbff00000 +@82 @82 0xbff00000 +@81 @81 0xbff00000 +@80 @80 0xbff00000 +@141 @141 0xbff00000 +@140 @140 0xbff00000 +@142 @142 0xbff00000 +@144 @144 0xbff00000 +@143 @143 0xbff00000 +@136 @136 0xbff00000 +@135 @135 0xbff00000 +@137 @137 0xbff00000 +@139 @139 0xbff00000 +@138 @138 0xbff00000 +@145 @145 0xbff00000 +@158 @158 0xbff00000 +@157 @157 0xbff00000 +@159 @159 0xbff00000 +@161 @161 0xbff00000 +@160 @160 0xbff00000 +@147 @147 0xbff00000 +@146 @146 0xbff00000 +@148 @148 0xbff00000 +@150 @150 0xbff00000 +@149 @149 0xbff00000 +@123 @123 0xbff00000 +@122 @122 0xbff00000 +@124 @124 0xbff00000 +@126 @126 0xbff00000 +@125 @125 0xbff00000 +@118 @118 0xbff00000 +@119 @119 0xbff00000 +@117 @117 0xbff00000 +@121 @121 0xbff00000 +@120 @120 0xbff00000 +@133 @133 0xbff00000 +@132 @132 0xbff00000 +@134 @134 0xbff00000 +@115 @115 0xbff00000 +@116 @116 0xbff00000 +@128 @128 0xbff00000 +@127 @127 0xbff00000 +@129 @129 0xbff00000 +@131 @131 0xbff00000 +@130 @130 0xbff00000 +@350 @350 0xbff01009 +@332 @332 0xbff01038 +@234 @234 0xbff01055 +@71 @71 0xbff01367 +@73 @73 0xbff01ef1 +ImageList_GetImageRect @43 0xbff01f06 +@323 @323 0xbff01f6d +ImageList_DrawEx @35 0xbff02598 +@334 @334 0xbff03995 +@72 @72 0xbff039fa +@341 @341 0xbff04163 +@233 @233 0xbff04435 +@339 @339 0xbff053fe +@330 @330 0xbff05e7c +@324 @324 0xbff05ee2 +@336 @336 0xbff063ff +@335 @335 0xbff07c3f +@357 @357 0xbff07c7f +@328 @328 0xbff0891a +@329 @329 0xbff08a01 +@320 @320 0xbff08a42 +ImageList_GetBkColor @37 0xbff08b50 +@338 @338 0xbff0953a +@321 @321 0xbff0956a +ImageList_Draw @34 0xbff0a59d +DrawStatusText @5 0xbff0a7ae +DrawStatusTextA @22 0xbff0a7ae +@337 @337 0xbff0b1f2 +@340 @340 0xbff0b67b +GetEffectiveClientRect @4 0xbff0bf25 +ImageList_GetIconSize @40 0xbff0c863 +@151 @151 0xbff0d55f +@326 @326 0xbff0d9e2 +@152 @152 0xbff0dcea +@169 @169 0xbff0ddc0 +ImageList_GetIcon @39 0xbff0e245 +@356 @356 0xbff0e6dd +@167 @167 0xbff0e942 +@333 @333 0xbff0f455 +ImageList_ReplaceIcon @51 0xbff107e6 +@327 @327 0xbff10f55 +@325 @325 0xbff1133b +@331 @331 0xbff1186d +ImageList_SetOverlayImage @55 0xbff1218f +@154 @154 0xbff1260a +CreateMappedBitmap @8 0xbff12a4f +ImageList_SetBkColor @52 0xbff13343 +@163 @163 0xbff13490 +CreateStatusWindowA @18 0xbff146ad +CreateStatusWindow @6 0xbff146ad +ImageList_Create @28 0xbff15450 +@351 @351 0xbff16757 +CreatePropertySheetPage @10 0xbff1695c +CreatePropertySheetPageA @11 0xbff1695c +ImageList_Read @48 0xbff16cb6 +DestroyPropertySheetPage @21 0xbff17160 +@153 @153 0xbff17bb9 +PropertySheet @57 0xbff17eeb +PropertySheetA @58 0xbff17eeb +ImageList_Remove @49 0xbff1a045 +InitCommonControls @17 0xbff1a0d1 +@156 @156 0xbff1a10e +@155 @155 0xbff1a185 +@74 @74 0xbff1a21e +@322 @322 0xbff1a233 +MakeDragList @13 0xbff1f04e +LBItemFromPt @14 0xbff1f0b9 +DrawInsert @15 0xbff1f1e1 +MenuHelp @2 0xbff1fa9e +ShowHideMenuCtl @3 0xbff1fbc9 +CreateToolbarEx @20 0xbff2172d +CreateToolbar @7 0xbff217de +CreateUpDownControl @16 0xbff22708 +@352 @352 0xbff227d5 +@353 @353 0xbff2283e +@354 @354 0xbff2287b +@355 @355 0xbff228b8 +ImageList_LoadImage @44 0xbff229c3 +ImageList_LoadImageA @45 0xbff229c3 +ImageList_Destroy @29 0xbff22a7d +ImageList_GetImageCount @41 0xbff22b58 +ImageList_SetIconSize @54 0xbff22b72 +ImageList_Add @24 0xbff22bae +ImageList_AddMasked @26 0xbff22bfe +ImageList_Replace @50 0xbff22d44 +ImageList_GetImageInfo @42 0xbff22f2e +ImageList_AddIcon @25 0xbff22f76 +ImageList_DragMove @32 0xbff23117 +ImageList_BeginDrag @27 0xbff23336 +ImageList_DragEnter @30 0xbff233d3 +ImageList_DragLeave @31 0xbff23426 +ImageList_DragShowNolock @33 0xbff23469 +ImageList_GetDragImage @38 0xbff2357a +ImageList_SetDragCursorImage @53 0xbff2369c +ImageList_EndDrag @36 0xbff23717 +ImageList_Merge @47 0xbff23888 +ImageList_Write @56 0xbff239d0 +@164 @164 0xbff242db +DrawStatusTextW @23 0xbff243dd +CreateStatusWindowW @19 0xbff243ea +PropertySheetW @59 0xbff243f9 +CreatePropertySheetPageW @12 0xbff2440b +ImageList_LoadImageW @46 0xbff2441a +Cctl1632_ThunkData32 @9 0xbff25000 +@811 @811 0x7fe00000 +@812 @812 0x7fe00000 +@809 @809 0x7fe00000 +@810 @810 0x7fe00000 +@813 @813 0x7fe00000 +@816 @816 0x7fe00000 +@817 @817 0x7fe00000 +@814 @814 0x7fe00000 +@815 @815 0x7fe00000 +@802 @802 0x7fe00000 +@803 @803 0x7fe00000 +@800 @800 0x7fe00000 +@801 @801 0x7fe00000 +@804 @804 0x7fe00000 +@807 @807 0x7fe00000 +@808 @808 0x7fe00000 +@805 @805 0x7fe00000 +@806 @806 0x7fe00000 +@818 @818 0x7fe00000 +@830 @830 0x7fe00000 +@831 @831 0x7fe00000 +@828 @828 0x7fe00000 +@829 @829 0x7fe00000 +@832 @832 0x7fe00000 +@835 @835 0x7fe00000 +@836 @836 0x7fe00000 +@833 @833 0x7fe00000 +@834 @834 0x7fe00000 +@821 @821 0x7fe00000 +@822 @822 0x7fe00000 +@819 @819 0x7fe00000 +@820 @820 0x7fe00000 +@823 @823 0x7fe00000 +@826 @826 0x7fe00000 +@827 @827 0x7fe00000 +@824 @824 0x7fe00000 +@825 @825 0x7fe00000 +@799 @799 0x7fe00000 +@773 @773 0x7fe00000 +@774 @774 0x7fe00000 +@771 @771 0x7fe00000 +@772 @772 0x7fe00000 +@775 @775 0x7fe00000 +@778 @778 0x7fe00000 +@779 @779 0x7fe00000 +@776 @776 0x7fe00000 +@777 @777 0x7fe00000 +@764 @764 0x7fe00000 +@765 @765 0x7fe00000 +@762 @762 0x7fe00000 +@763 @763 0x7fe00000 +@766 @766 0x7fe00000 +@769 @769 0x7fe00000 +@770 @770 0x7fe00000 +@767 @767 0x7fe00000 +@768 @768 0x7fe00000 +@780 @780 0x7fe00000 +@792 @792 0x7fe00000 +@793 @793 0x7fe00000 +@790 @790 0x7fe00000 +@791 @791 0x7fe00000 +@794 @794 0x7fe00000 +@797 @797 0x7fe00000 +@798 @798 0x7fe00000 +@795 @795 0x7fe00000 +@796 @796 0x7fe00000 +@783 @783 0x7fe00000 +@784 @784 0x7fe00000 +@781 @781 0x7fe00000 +@782 @782 0x7fe00000 +@785 @785 0x7fe00000 +@788 @788 0x7fe00000 +@789 @789 0x7fe00000 +@786 @786 0x7fe00000 +@787 @787 0x7fe00000 +@837 @837 0x7fe00000 +@887 @887 0x7fe00000 +@888 @888 0x7fe00000 +@885 @885 0x7fe00000 +@886 @886 0x7fe00000 +@889 @889 0x7fe00000 +@892 @892 0x7fe00000 +@893 @893 0x7fe00000 +@890 @890 0x7fe00000 +@891 @891 0x7fe00000 +@878 @878 0x7fe00000 +@879 @879 0x7fe00000 +@876 @876 0x7fe00000 +@877 @877 0x7fe00000 +@880 @880 0x7fe00000 +@883 @883 0x7fe00000 +@884 @884 0x7fe00000 +@881 @881 0x7fe00000 +@882 @882 0x7fe00000 +@894 @894 0x7fe00000 +@906 @906 0x7fe00000 +@907 @907 0x7fe00000 +@904 @904 0x7fe00000 +@905 @905 0x7fe00000 +@908 @908 0x7fe00000 +@911 @911 0x7fe00000 +@912 @912 0x7fe00000 +@909 @909 0x7fe00000 +@910 @910 0x7fe00000 +@897 @897 0x7fe00000 +@898 @898 0x7fe00000 +@895 @895 0x7fe00000 +@896 @896 0x7fe00000 +@899 @899 0x7fe00000 +@902 @902 0x7fe00000 +@903 @903 0x7fe00000 +@900 @900 0x7fe00000 +@901 @901 0x7fe00000 +@875 @875 0x7fe00000 +@849 @849 0x7fe00000 +@850 @850 0x7fe00000 +@847 @847 0x7fe00000 +@848 @848 0x7fe00000 +@851 @851 0x7fe00000 +@854 @854 0x7fe00000 +@855 @855 0x7fe00000 +@852 @852 0x7fe00000 +@853 @853 0x7fe00000 +@840 @840 0x7fe00000 +@841 @841 0x7fe00000 +@838 @838 0x7fe00000 +@839 @839 0x7fe00000 +@842 @842 0x7fe00000 +@845 @845 0x7fe00000 +@846 @846 0x7fe00000 +@843 @843 0x7fe00000 +@844 @844 0x7fe00000 +@856 @856 0x7fe00000 +@868 @868 0x7fe00000 +@869 @869 0x7fe00000 +@866 @866 0x7fe00000 +@867 @867 0x7fe00000 +@870 @870 0x7fe00000 +@873 @873 0x7fe00000 +@874 @874 0x7fe00000 +@871 @871 0x7fe00000 +@872 @872 0x7fe00000 +@859 @859 0x7fe00000 +@860 @860 0x7fe00000 +@857 @857 0x7fe00000 +@858 @858 0x7fe00000 +@861 @861 0x7fe00000 +@864 @864 0x7fe00000 +@865 @865 0x7fe00000 +@862 @862 0x7fe00000 +@863 @863 0x7fe00000 +@761 @761 0x7fe00000 +@659 @659 0x7fe00000 +@660 @660 0x7fe00000 +@657 @657 0x7fe00000 +@658 @658 0x7fe00000 +@661 @661 0x7fe00000 +@664 @664 0x7fe00000 +@665 @665 0x7fe00000 +@662 @662 0x7fe00000 +@663 @663 0x7fe00000 +@650 @650 0x7fe00000 +@651 @651 0x7fe00000 +@648 @648 0x7fe00000 +@649 @649 0x7fe00000 +@652 @652 0x7fe00000 +@655 @655 0x7fe00000 +@656 @656 0x7fe00000 +@653 @653 0x7fe00000 +@654 @654 0x7fe00000 +@666 @666 0x7fe00000 +@678 @678 0x7fe00000 +@679 @679 0x7fe00000 +@676 @676 0x7fe00000 +@677 @677 0x7fe00000 +@680 @680 0x7fe00000 +@683 @683 0x7fe00000 +@684 @684 0x7fe00000 +@681 @681 0x7fe00000 +@682 @682 0x7fe00000 +@669 @669 0x7fe00000 +@670 @670 0x7fe00000 +@667 @667 0x7fe00000 +@668 @668 0x7fe00000 +@671 @671 0x7fe00000 +@674 @674 0x7fe00000 +@675 @675 0x7fe00000 +@672 @672 0x7fe00000 +@673 @673 0x7fe00000 +@647 @647 0x7fe00000 +@621 @621 0x7fe00000 +@622 @622 0x7fe00000 +@619 @619 0x7fe00000 +@620 @620 0x7fe00000 +@623 @623 0x7fe00000 +@626 @626 0x7fe00000 +@627 @627 0x7fe00000 +@624 @624 0x7fe00000 +@625 @625 0x7fe00000 +@612 @612 0x7fe00000 +@613 @613 0x7fe00000 +@610 @610 0x7fe00000 +@611 @611 0x7fe00000 +@614 @614 0x7fe00000 +@617 @617 0x7fe00000 +@618 @618 0x7fe00000 +@615 @615 0x7fe00000 +@616 @616 0x7fe00000 +@628 @628 0x7fe00000 +@640 @640 0x7fe00000 +@641 @641 0x7fe00000 +@638 @638 0x7fe00000 +@639 @639 0x7fe00000 +@642 @642 0x7fe00000 +@645 @645 0x7fe00000 +@646 @646 0x7fe00000 +@643 @643 0x7fe00000 +@644 @644 0x7fe00000 +@631 @631 0x7fe00000 +@632 @632 0x7fe00000 +@629 @629 0x7fe00000 +@630 @630 0x7fe00000 +@633 @633 0x7fe00000 +@636 @636 0x7fe00000 +@637 @637 0x7fe00000 +@634 @634 0x7fe00000 +@635 @635 0x7fe00000 +@685 @685 0x7fe00000 +@735 @735 0x7fe00000 +@736 @736 0x7fe00000 +@733 @733 0x7fe00000 +@734 @734 0x7fe00000 +@737 @737 0x7fe00000 +@740 @740 0x7fe00000 +@741 @741 0x7fe00000 +@738 @738 0x7fe00000 +@739 @739 0x7fe00000 +@726 @726 0x7fe00000 +@727 @727 0x7fe00000 +@724 @724 0x7fe00000 +@725 @725 0x7fe00000 +@728 @728 0x7fe00000 +@731 @731 0x7fe00000 +@732 @732 0x7fe00000 +@729 @729 0x7fe00000 +@730 @730 0x7fe00000 +@742 @742 0x7fe00000 +@754 @754 0x7fe00000 +@755 @755 0x7fe00000 +@752 @752 0x7fe00000 +@753 @753 0x7fe00000 +@756 @756 0x7fe00000 +@759 @759 0x7fe00000 +@760 @760 0x7fe00000 +@757 @757 0x7fe00000 +@758 @758 0x7fe00000 +@745 @745 0x7fe00000 +@746 @746 0x7fe00000 +@743 @743 0x7fe00000 +@744 @744 0x7fe00000 +@747 @747 0x7fe00000 +@750 @750 0x7fe00000 +@751 @751 0x7fe00000 +@748 @748 0x7fe00000 +@749 @749 0x7fe00000 +@723 @723 0x7fe00000 +@697 @697 0x7fe00000 +@698 @698 0x7fe00000 +@695 @695 0x7fe00000 +@696 @696 0x7fe00000 +@699 @699 0x7fe00000 +@702 @702 0x7fe00000 +@703 @703 0x7fe00000 +@700 @700 0x7fe00000 +@701 @701 0x7fe00000 +@688 @688 0x7fe00000 +@689 @689 0x7fe00000 +@686 @686 0x7fe00000 +@687 @687 0x7fe00000 +@690 @690 0x7fe00000 +@693 @693 0x7fe00000 +@694 @694 0x7fe00000 +@691 @691 0x7fe00000 +@692 @692 0x7fe00000 +@704 @704 0x7fe00000 +@716 @716 0x7fe00000 +@717 @717 0x7fe00000 +@714 @714 0x7fe00000 +@715 @715 0x7fe00000 +@718 @718 0x7fe00000 +@721 @721 0x7fe00000 +@722 @722 0x7fe00000 +@719 @719 0x7fe00000 +@720 @720 0x7fe00000 +@707 @707 0x7fe00000 +@708 @708 0x7fe00000 +@705 @705 0x7fe00000 +@706 @706 0x7fe00000 +@709 @709 0x7fe00000 +@712 @712 0x7fe00000 +@713 @713 0x7fe00000 +@710 @710 0x7fe00000 +@711 @711 0x7fe00000 +@913 @913 0x7fe00000 +@1115 @1115 0x7fe00000 +@1116 @1116 0x7fe00000 +@1113 @1113 0x7fe00000 +@1114 @1114 0x7fe00000 +@1117 @1117 0x7fe00000 +@1120 @1120 0x7fe00000 +@1121 @1121 0x7fe00000 +@1118 @1118 0x7fe00000 +@1119 @1119 0x7fe00000 +@1106 @1106 0x7fe00000 +@1107 @1107 0x7fe00000 +@1104 @1104 0x7fe00000 +@1105 @1105 0x7fe00000 +@1108 @1108 0x7fe00000 +@1111 @1111 0x7fe00000 +@1112 @1112 0x7fe00000 +@1109 @1109 0x7fe00000 +@1110 @1110 0x7fe00000 +@1122 @1122 0x7fe00000 +@1134 @1134 0x7fe00000 +@1135 @1135 0x7fe00000 +@1132 @1132 0x7fe00000 +@1133 @1133 0x7fe00000 +@1136 @1136 0x7fe00000 +@1139 @1139 0x7fe00000 +@1140 @1140 0x7fe00000 +@1137 @1137 0x7fe00000 +@1138 @1138 0x7fe00000 +@1125 @1125 0x7fe00000 +@1126 @1126 0x7fe00000 +@1123 @1123 0x7fe00000 +@1124 @1124 0x7fe00000 +@1127 @1127 0x7fe00000 +@1130 @1130 0x7fe00000 +@1131 @1131 0x7fe00000 +@1128 @1128 0x7fe00000 +@1129 @1129 0x7fe00000 +@1103 @1103 0x7fe00000 +@1077 @1077 0x7fe00000 +@1078 @1078 0x7fe00000 +@1075 @1075 0x7fe00000 +@1076 @1076 0x7fe00000 +@1079 @1079 0x7fe00000 +@1082 @1082 0x7fe00000 +@1083 @1083 0x7fe00000 +@1080 @1080 0x7fe00000 +@1081 @1081 0x7fe00000 +@1068 @1068 0x7fe00000 +@1069 @1069 0x7fe00000 +@1066 @1066 0x7fe00000 +@1067 @1067 0x7fe00000 +@1070 @1070 0x7fe00000 +@1073 @1073 0x7fe00000 +@1074 @1074 0x7fe00000 +@1071 @1071 0x7fe00000 +@1072 @1072 0x7fe00000 +@1084 @1084 0x7fe00000 +@1096 @1096 0x7fe00000 +@1097 @1097 0x7fe00000 +@1094 @1094 0x7fe00000 +@1095 @1095 0x7fe00000 +@1098 @1098 0x7fe00000 +@1101 @1101 0x7fe00000 +@1102 @1102 0x7fe00000 +@1099 @1099 0x7fe00000 +@1100 @1100 0x7fe00000 +@1087 @1087 0x7fe00000 +@1088 @1088 0x7fe00000 +@1085 @1085 0x7fe00000 +@1086 @1086 0x7fe00000 +@1089 @1089 0x7fe00000 +@1092 @1092 0x7fe00000 +@1093 @1093 0x7fe00000 +@1090 @1090 0x7fe00000 +@1091 @1091 0x7fe00000 +@1141 @1141 0x7fe00000 +@1191 @1191 0x7fe00000 +@1192 @1192 0x7fe00000 +@1189 @1189 0x7fe00000 +@1190 @1190 0x7fe00000 +@1193 @1193 0x7fe00000 +@1196 @1196 0x7fe00000 +@1197 @1197 0x7fe00000 +@1194 @1194 0x7fe00000 +@1195 @1195 0x7fe00000 +@1182 @1182 0x7fe00000 +@1183 @1183 0x7fe00000 +@1180 @1180 0x7fe00000 +@1181 @1181 0x7fe00000 +@1184 @1184 0x7fe00000 +@1187 @1187 0x7fe00000 +@1188 @1188 0x7fe00000 +@1185 @1185 0x7fe00000 +@1186 @1186 0x7fe00000 +@1198 @1198 0x7fe00000 +@1210 @1210 0x7fe00000 +@1211 @1211 0x7fe00000 +@1208 @1208 0x7fe00000 +@1209 @1209 0x7fe00000 +@1212 @1212 0x7fe00000 +@1215 @1215 0x7fe00000 +@1216 @1216 0x7fe00000 +@1213 @1213 0x7fe00000 +@1214 @1214 0x7fe00000 +@1201 @1201 0x7fe00000 +@1202 @1202 0x7fe00000 +@1199 @1199 0x7fe00000 +@1200 @1200 0x7fe00000 +@1203 @1203 0x7fe00000 +@1206 @1206 0x7fe00000 +@1207 @1207 0x7fe00000 +@1204 @1204 0x7fe00000 +@1205 @1205 0x7fe00000 +@1179 @1179 0x7fe00000 +@1153 @1153 0x7fe00000 +@1154 @1154 0x7fe00000 +@1151 @1151 0x7fe00000 +@1152 @1152 0x7fe00000 +@1155 @1155 0x7fe00000 +@1158 @1158 0x7fe00000 +@1159 @1159 0x7fe00000 +@1156 @1156 0x7fe00000 +@1157 @1157 0x7fe00000 +@1144 @1144 0x7fe00000 +@1145 @1145 0x7fe00000 +@1142 @1142 0x7fe00000 +@1143 @1143 0x7fe00000 +@1146 @1146 0x7fe00000 +@1149 @1149 0x7fe00000 +@1150 @1150 0x7fe00000 +@1147 @1147 0x7fe00000 +@1148 @1148 0x7fe00000 +@1160 @1160 0x7fe00000 +@1172 @1172 0x7fe00000 +@1173 @1173 0x7fe00000 +@1170 @1170 0x7fe00000 +@1171 @1171 0x7fe00000 +@1174 @1174 0x7fe00000 +@1177 @1177 0x7fe00000 +@1178 @1178 0x7fe00000 +@1175 @1175 0x7fe00000 +@1176 @1176 0x7fe00000 +@1163 @1163 0x7fe00000 +@1164 @1164 0x7fe00000 +@1161 @1161 0x7fe00000 +@1162 @1162 0x7fe00000 +@1165 @1165 0x7fe00000 +@1168 @1168 0x7fe00000 +@1169 @1169 0x7fe00000 +@1166 @1166 0x7fe00000 +@1167 @1167 0x7fe00000 +@1065 @1065 0x7fe00000 +@963 @963 0x7fe00000 +@964 @964 0x7fe00000 +@961 @961 0x7fe00000 +@962 @962 0x7fe00000 +@965 @965 0x7fe00000 +@968 @968 0x7fe00000 +@969 @969 0x7fe00000 +@966 @966 0x7fe00000 +@967 @967 0x7fe00000 +@954 @954 0x7fe00000 +@955 @955 0x7fe00000 +@952 @952 0x7fe00000 +@953 @953 0x7fe00000 +@956 @956 0x7fe00000 +@959 @959 0x7fe00000 +@960 @960 0x7fe00000 +@957 @957 0x7fe00000 +@958 @958 0x7fe00000 +@970 @970 0x7fe00000 +@982 @982 0x7fe00000 +@983 @983 0x7fe00000 +@980 @980 0x7fe00000 +@981 @981 0x7fe00000 +@984 @984 0x7fe00000 +@987 @987 0x7fe00000 +@988 @988 0x7fe00000 +@985 @985 0x7fe00000 +@986 @986 0x7fe00000 +@973 @973 0x7fe00000 +@974 @974 0x7fe00000 +@971 @971 0x7fe00000 +@972 @972 0x7fe00000 +@975 @975 0x7fe00000 +@978 @978 0x7fe00000 +@979 @979 0x7fe00000 +@976 @976 0x7fe00000 +@977 @977 0x7fe00000 +@951 @951 0x7fe00000 +@925 @925 0x7fe00000 +@926 @926 0x7fe00000 +@923 @923 0x7fe00000 +@924 @924 0x7fe00000 +@927 @927 0x7fe00000 +@930 @930 0x7fe00000 +@931 @931 0x7fe00000 +@928 @928 0x7fe00000 +@929 @929 0x7fe00000 +@916 @916 0x7fe00000 +@917 @917 0x7fe00000 +@914 @914 0x7fe00000 +@915 @915 0x7fe00000 +@918 @918 0x7fe00000 +@921 @921 0x7fe00000 +@922 @922 0x7fe00000 +@919 @919 0x7fe00000 +@920 @920 0x7fe00000 +@932 @932 0x7fe00000 +@944 @944 0x7fe00000 +@945 @945 0x7fe00000 +@942 @942 0x7fe00000 +@943 @943 0x7fe00000 +@946 @946 0x7fe00000 +@949 @949 0x7fe00000 +@950 @950 0x7fe00000 +@947 @947 0x7fe00000 +@948 @948 0x7fe00000 +@935 @935 0x7fe00000 +@936 @936 0x7fe00000 +@933 @933 0x7fe00000 +@934 @934 0x7fe00000 +@937 @937 0x7fe00000 +@940 @940 0x7fe00000 +@941 @941 0x7fe00000 +@938 @938 0x7fe00000 +@939 @939 0x7fe00000 +@989 @989 0x7fe00000 +@1039 @1039 0x7fe00000 +@1040 @1040 0x7fe00000 +@1037 @1037 0x7fe00000 +@1038 @1038 0x7fe00000 +@1041 @1041 0x7fe00000 +@1044 @1044 0x7fe00000 +@1045 @1045 0x7fe00000 +@1042 @1042 0x7fe00000 +@1043 @1043 0x7fe00000 +@1030 @1030 0x7fe00000 +@1031 @1031 0x7fe00000 +@1028 @1028 0x7fe00000 +@1029 @1029 0x7fe00000 +@1032 @1032 0x7fe00000 +@1035 @1035 0x7fe00000 +@1036 @1036 0x7fe00000 +@1033 @1033 0x7fe00000 +@1034 @1034 0x7fe00000 +@1046 @1046 0x7fe00000 +@1058 @1058 0x7fe00000 +@1059 @1059 0x7fe00000 +@1056 @1056 0x7fe00000 +@1057 @1057 0x7fe00000 +@1060 @1060 0x7fe00000 +@1063 @1063 0x7fe00000 +@1064 @1064 0x7fe00000 +@1061 @1061 0x7fe00000 +@1062 @1062 0x7fe00000 +@1049 @1049 0x7fe00000 +@1050 @1050 0x7fe00000 +@1047 @1047 0x7fe00000 +@1048 @1048 0x7fe00000 +@1051 @1051 0x7fe00000 +@1054 @1054 0x7fe00000 +@1055 @1055 0x7fe00000 +@1052 @1052 0x7fe00000 +@1053 @1053 0x7fe00000 +@1027 @1027 0x7fe00000 +@1001 @1001 0x7fe00000 +@1002 @1002 0x7fe00000 +@999 @999 0x7fe00000 +@1000 @1000 0x7fe00000 +@1003 @1003 0x7fe00000 +@1006 @1006 0x7fe00000 +@1007 @1007 0x7fe00000 +@1004 @1004 0x7fe00000 +@1005 @1005 0x7fe00000 +@992 @992 0x7fe00000 +@993 @993 0x7fe00000 +@990 @990 0x7fe00000 +@991 @991 0x7fe00000 +@994 @994 0x7fe00000 +@997 @997 0x7fe00000 +@998 @998 0x7fe00000 +@995 @995 0x7fe00000 +@996 @996 0x7fe00000 +@1008 @1008 0x7fe00000 +@1020 @1020 0x7fe00000 +@1021 @1021 0x7fe00000 +@1018 @1018 0x7fe00000 +@1019 @1019 0x7fe00000 +@1022 @1022 0x7fe00000 +@1025 @1025 0x7fe00000 +@1026 @1026 0x7fe00000 +@1023 @1023 0x7fe00000 +@1024 @1024 0x7fe00000 +@1011 @1011 0x7fe00000 +@1012 @1012 0x7fe00000 +@1009 @1009 0x7fe00000 +@1010 @1010 0x7fe00000 +@1013 @1013 0x7fe00000 +@1016 @1016 0x7fe00000 +@1017 @1017 0x7fe00000 +@1014 @1014 0x7fe00000 +@1015 @1015 0x7fe00000 +@609 @609 0x7fe00000 +@371 @371 0x7fe00000 +@370 @370 0x7fe00000 +@372 @372 0x7fe00000 +@374 @374 0x7fe00000 +@373 @373 0x7fe00000 +@369 @369 0x7fe00000 +@365 @365 0x7fe00000 +@364 @364 0x7fe00000 +@366 @366 0x7fe00000 +@368 @368 0x7fe00000 +@367 @367 0x7fe00000 +@382 @382 0x7fe00000 +@381 @381 0x7fe00000 +@383 @383 0x7fe00000 +@385 @385 0x7fe00000 +@384 @384 0x7fe00000 +@380 @380 0x7fe00000 +@376 @376 0x7fe00000 +@375 @375 0x7fe00000 +@377 @377 0x7fe00000 +@379 @379 0x7fe00000 +@378 @378 0x7fe00000 +@349 @349 0x7fe00000 +@348 @348 0x7fe00000 +@350 @350 0x7fe00000 +@352 @352 0x7fe00000 +@351 @351 0x7fe00000 +@347 @347 0x7fe00000 +@343 @343 0x7fe00000 +@342 @342 0x7fe00000 +@344 @344 0x7fe00000 +@346 @346 0x7fe00000 +@345 @345 0x7fe00000 +@360 @360 0x7fe00000 +@359 @359 0x7fe00000 +@361 @361 0x7fe00000 +@363 @363 0x7fe00000 +@362 @362 0x7fe00000 +@358 @358 0x7fe00000 +@354 @354 0x7fe00000 +@353 @353 0x7fe00000 +@355 @355 0x7fe00000 +@357 @357 0x7fe00000 +@356 @356 0x7fe00000 +@386 @386 0x7fe00000 +@416 @416 0x7fe00000 +@415 @415 0x7fe00000 +@417 @417 0x7fe00000 +@419 @419 0x7fe00000 +@418 @418 0x7fe00000 +@414 @414 0x7fe00000 +@410 @410 0x7fe00000 +@409 @409 0x7fe00000 +@411 @411 0x7fe00000 +@413 @413 0x7fe00000 +@412 @412 0x7fe00000 +@427 @427 0x7fe00000 +@426 @426 0x7fe00000 +@428 @428 0x7fe00000 +@430 @430 0x7fe00000 +@429 @429 0x7fe00000 +@425 @425 0x7fe00000 +@421 @421 0x7fe00000 +@420 @420 0x7fe00000 +@422 @422 0x7fe00000 +@424 @424 0x7fe00000 +@423 @423 0x7fe00000 +@394 @394 0x7fe00000 +@393 @393 0x7fe00000 +@395 @395 0x7fe00000 +@397 @397 0x7fe00000 +@396 @396 0x7fe00000 +@392 @392 0x7fe00000 +@388 @388 0x7fe00000 +@387 @387 0x7fe00000 +@389 @389 0x7fe00000 +@391 @391 0x7fe00000 +@390 @390 0x7fe00000 +@405 @405 0x7fe00000 +@404 @404 0x7fe00000 +@406 @406 0x7fe00000 +@408 @408 0x7fe00000 +@407 @407 0x7fe00000 +@403 @403 0x7fe00000 +@399 @399 0x7fe00000 +@398 @398 0x7fe00000 +@400 @400 0x7fe00000 +@402 @402 0x7fe00000 +@401 @401 0x7fe00000 +@282 @282 0x7fe00000 +@281 @281 0x7fe00000 +@283 @283 0x7fe00000 +@285 @285 0x7fe00000 +@284 @284 0x7fe00000 +@280 @280 0x7fe00000 +@276 @276 0x7fe00000 +@275 @275 0x7fe00000 +@277 @277 0x7fe00000 +@279 @279 0x7fe00000 +@278 @278 0x7fe00000 +@293 @293 0x7fe00000 +@292 @292 0x7fe00000 +@294 @294 0x7fe00000 +@296 @296 0x7fe00000 +@295 @295 0x7fe00000 +@291 @291 0x7fe00000 +@287 @287 0x7fe00000 +@286 @286 0x7fe00000 +@288 @288 0x7fe00000 +@290 @290 0x7fe00000 +@289 @289 0x7fe00000 +@260 @260 0x7fe00000 +@259 @259 0x7fe00000 +@261 @261 0x7fe00000 +@263 @263 0x7fe00000 +@262 @262 0x7fe00000 +@258 @258 0x7fe00000 +@254 @254 0x7fe00000 +@253 @253 0x7fe00000 +@255 @255 0x7fe00000 +@257 @257 0x7fe00000 +@256 @256 0x7fe00000 +@271 @271 0x7fe00000 +@270 @270 0x7fe00000 +@272 @272 0x7fe00000 +@274 @274 0x7fe00000 +@273 @273 0x7fe00000 +@269 @269 0x7fe00000 +@265 @265 0x7fe00000 +@264 @264 0x7fe00000 +@266 @266 0x7fe00000 +@268 @268 0x7fe00000 +@267 @267 0x7fe00000 +@297 @297 0x7fe00000 +@327 @327 0x7fe00000 +@326 @326 0x7fe00000 +@328 @328 0x7fe00000 +@330 @330 0x7fe00000 +@329 @329 0x7fe00000 +@325 @325 0x7fe00000 +@321 @321 0x7fe00000 +@320 @320 0x7fe00000 +@322 @322 0x7fe00000 +@324 @324 0x7fe00000 +@323 @323 0x7fe00000 +@338 @338 0x7fe00000 +@337 @337 0x7fe00000 +@339 @339 0x7fe00000 +@341 @341 0x7fe00000 +@340 @340 0x7fe00000 +@336 @336 0x7fe00000 +@332 @332 0x7fe00000 +@331 @331 0x7fe00000 +@333 @333 0x7fe00000 +@335 @335 0x7fe00000 +@334 @334 0x7fe00000 +@305 @305 0x7fe00000 +@304 @304 0x7fe00000 +@306 @306 0x7fe00000 +@308 @308 0x7fe00000 +@307 @307 0x7fe00000 +@303 @303 0x7fe00000 +@299 @299 0x7fe00000 +@298 @298 0x7fe00000 +@300 @300 0x7fe00000 +@302 @302 0x7fe00000 +@301 @301 0x7fe00000 +@316 @316 0x7fe00000 +@315 @315 0x7fe00000 +@317 @317 0x7fe00000 +@319 @319 0x7fe00000 +@318 @318 0x7fe00000 +@314 @314 0x7fe00000 +@310 @310 0x7fe00000 +@309 @309 0x7fe00000 +@311 @311 0x7fe00000 +@313 @313 0x7fe00000 +@312 @312 0x7fe00000 +@549 @549 0x7fe00000 +@548 @548 0x7fe00000 +@550 @550 0x7fe00000 +@552 @552 0x7fe00000 +@551 @551 0x7fe00000 +@547 @547 0x7fe00000 +@543 @543 0x7fe00000 +@542 @542 0x7fe00000 +@544 @544 0x7fe00000 +@546 @546 0x7fe00000 +@545 @545 0x7fe00000 +@560 @560 0x7fe00000 +@559 @559 0x7fe00000 +@561 @561 0x7fe00000 +@563 @563 0x7fe00000 +@562 @562 0x7fe00000 +@558 @558 0x7fe00000 +@554 @554 0x7fe00000 +@553 @553 0x7fe00000 +@555 @555 0x7fe00000 +@557 @557 0x7fe00000 +@556 @556 0x7fe00000 +@527 @527 0x7fe00000 +@526 @526 0x7fe00000 +@528 @528 0x7fe00000 +@530 @530 0x7fe00000 +@529 @529 0x7fe00000 +@525 @525 0x7fe00000 +@521 @521 0x7fe00000 +@520 @520 0x7fe00000 +@522 @522 0x7fe00000 +@524 @524 0x7fe00000 +@523 @523 0x7fe00000 +@538 @538 0x7fe00000 +@537 @537 0x7fe00000 +@539 @539 0x7fe00000 +@541 @541 0x7fe00000 +@540 @540 0x7fe00000 +@536 @536 0x7fe00000 +@532 @532 0x7fe00000 +@531 @531 0x7fe00000 +@533 @533 0x7fe00000 +@535 @535 0x7fe00000 +@534 @534 0x7fe00000 +@564 @564 0x7fe00000 +@594 @594 0x7fe00000 +@593 @593 0x7fe00000 +@595 @595 0x7fe00000 +@597 @597 0x7fe00000 +@596 @596 0x7fe00000 +@592 @592 0x7fe00000 +@588 @588 0x7fe00000 +@587 @587 0x7fe00000 +@589 @589 0x7fe00000 +@591 @591 0x7fe00000 +@590 @590 0x7fe00000 +@605 @605 0x7fe00000 +@604 @604 0x7fe00000 +@606 @606 0x7fe00000 +@608 @608 0x7fe00000 +@607 @607 0x7fe00000 +@603 @603 0x7fe00000 +@599 @599 0x7fe00000 +@598 @598 0x7fe00000 +@600 @600 0x7fe00000 +@602 @602 0x7fe00000 +@601 @601 0x7fe00000 +@572 @572 0x7fe00000 +@571 @571 0x7fe00000 +@573 @573 0x7fe00000 +@575 @575 0x7fe00000 +@574 @574 0x7fe00000 +@570 @570 0x7fe00000 +@566 @566 0x7fe00000 +@565 @565 0x7fe00000 +@567 @567 0x7fe00000 +@569 @569 0x7fe00000 +@568 @568 0x7fe00000 +@583 @583 0x7fe00000 +@582 @582 0x7fe00000 +@584 @584 0x7fe00000 +@586 @586 0x7fe00000 +@585 @585 0x7fe00000 +@581 @581 0x7fe00000 +@577 @577 0x7fe00000 +@576 @576 0x7fe00000 +@578 @578 0x7fe00000 +@580 @580 0x7fe00000 +@579 @579 0x7fe00000 +@460 @460 0x7fe00000 +@459 @459 0x7fe00000 +@461 @461 0x7fe00000 +@463 @463 0x7fe00000 +@462 @462 0x7fe00000 +@458 @458 0x7fe00000 +@454 @454 0x7fe00000 +@453 @453 0x7fe00000 +@455 @455 0x7fe00000 +@457 @457 0x7fe00000 +@456 @456 0x7fe00000 +@471 @471 0x7fe00000 +@470 @470 0x7fe00000 +@472 @472 0x7fe00000 +@474 @474 0x7fe00000 +@473 @473 0x7fe00000 +@469 @469 0x7fe00000 +@465 @465 0x7fe00000 +@464 @464 0x7fe00000 +@466 @466 0x7fe00000 +@468 @468 0x7fe00000 +@467 @467 0x7fe00000 +@438 @438 0x7fe00000 +@437 @437 0x7fe00000 +@439 @439 0x7fe00000 +@441 @441 0x7fe00000 +@440 @440 0x7fe00000 +@436 @436 0x7fe00000 +@432 @432 0x7fe00000 +@431 @431 0x7fe00000 +@433 @433 0x7fe00000 +@435 @435 0x7fe00000 +@434 @434 0x7fe00000 +@449 @449 0x7fe00000 +@448 @448 0x7fe00000 +@450 @450 0x7fe00000 +@452 @452 0x7fe00000 +@451 @451 0x7fe00000 +@447 @447 0x7fe00000 +@443 @443 0x7fe00000 +@442 @442 0x7fe00000 +@444 @444 0x7fe00000 +@446 @446 0x7fe00000 +@445 @445 0x7fe00000 +@475 @475 0x7fe00000 +@505 @505 0x7fe00000 +@504 @504 0x7fe00000 +@506 @506 0x7fe00000 +@508 @508 0x7fe00000 +@507 @507 0x7fe00000 +@503 @503 0x7fe00000 +@499 @499 0x7fe00000 +@498 @498 0x7fe00000 +@500 @500 0x7fe00000 +@502 @502 0x7fe00000 +@501 @501 0x7fe00000 +@516 @516 0x7fe00000 +@515 @515 0x7fe00000 +@517 @517 0x7fe00000 +@519 @519 0x7fe00000 +@518 @518 0x7fe00000 +@514 @514 0x7fe00000 +@510 @510 0x7fe00000 +@509 @509 0x7fe00000 +@511 @511 0x7fe00000 +@513 @513 0x7fe00000 +@512 @512 0x7fe00000 +@483 @483 0x7fe00000 +@482 @482 0x7fe00000 +@484 @484 0x7fe00000 +@486 @486 0x7fe00000 +@485 @485 0x7fe00000 +@481 @481 0x7fe00000 +@477 @477 0x7fe00000 +@476 @476 0x7fe00000 +@478 @478 0x7fe00000 +@480 @480 0x7fe00000 +@479 @479 0x7fe00000 +@494 @494 0x7fe00000 +@493 @493 0x7fe00000 +@495 @495 0x7fe00000 +@497 @497 0x7fe00000 +@496 @496 0x7fe00000 +@492 @492 0x7fe00000 +@488 @488 0x7fe00000 +@487 @487 0x7fe00000 +@489 @489 0x7fe00000 +@491 @491 0x7fe00000 +@490 @490 0x7fe00000 +@152 @152 0x7fe01084 +@196 @196 0x7fe010a9 +@195 @195 0x7fe010d4 +@155 @155 0x7fe010fa +@40 @40 0x7fe0111c +@39 @39 0x7fe01143 +@32 @32 0x7fe01171 +@37 @37 0x7fe0129b +@25 @25 0x7fe01426 +@31 @31 0x7fe014f1 +@18 @18 0x7fe01522 +SHGetPathFromIDList @221 0x7fe02503 +SHGetPathFromIDListA @222 0x7fe02503 +@16 @16 0x7fe02515 +@34 @34 0x7fe02539 +@52 @52 0x7fe02742 +DllGetClassObject @14 0x7fe02d73 +@128 @128 0x7fe02d73 +@102 @102 0x7fe02e08 +@78 @78 0x7fe036ce +@96 @96 0x7fe04077 +@35 @35 0x7fe0498a +@21 @21 0x7fe04d79 +@64 @64 0x7fe05da0 +@147 @147 0x7fe061c8 +@105 @105 0x7fe062bd +@26 @26 0x7fe06c77 +@163 @163 0x7fe071e3 +@30 @30 0x7fe07249 +@68 @68 0x7fe072ca +@157 @157 0x7fe07dd2 +@79 @79 0x7fe07dfa +@28 @28 0x7fe07e18 +@27 @27 0x7fe08145 +@23 @23 0x7fe08452 +@77 @77 0x7fe0863a +@67 @67 0x7fe08674 +@45 @45 0x7fe08918 +@109 @109 0x7fe08d44 +@100 @100 0x7fe0911f +@57 @57 0x7fe098c7 +@33 @33 0x7fe09a3a +@112 @112 0x7fe09c20 +@154 @154 0x7fe09e4f +@29 @29 0x7fe09f3b +@99 @99 0x7fe0a275 +@20 @20 0x7fe0a4d8 +@115 @115 0x7fe0aed6 +@85 @85 0x7fe0affb +@72 @72 0x7fe0b187 +@89 @89 0x7fe0b404 +@1217 @1217 0x7fe0b404 +@43 @43 0x7fe0b7db +@159 @159 0x7fe0b8e6 +@86 @86 0x7fe0c05e +@2 @2 0x7fe0cbe5 +@156 @156 0x7fe0dade +ShellExecuteEx @246 0x7fe0ec88 +ShellExecuteExA @247 0x7fe0ec88 +@119 @119 0x7fe0ed83 +@19 @19 0x7fe0ee78 +@144 @144 0x7fe0efbc +@70 @70 0x7fe0f090 +@36 @36 0x7fe0f10b +@87 @87 0x7fe10596 +@71 @71 0x7fe11038 +DragAcceptFiles @41 0x7fe111fd +@114 @114 0x7fe11376 +@174 @174 0x7fe119a4 +@116 @116 0x7fe11d49 +DoEnvironmentSubstA @22 0x7fe12164 +DragQueryFileA @50 0x7fe12afc +DragQueryFile @44 0x7fe12afc +@98 @98 0x7fe14be4 +SHGetFileInfoA @218 0x7fe14fc6 +SHGetFileInfo @217 0x7fe14fc6 +@103 @103 0x7fe155f5 +@121 @121 0x7fe157ff +@61 @61 0x7fe15916 +@113 @113 0x7fe15c3b +@107 @107 0x7fe15cc3 +@104 @104 0x7fe15ea5 +@117 @117 0x7fe16083 +@66 @66 0x7fe162ed +@4 @4 0x7fe1664e +@162 @162 0x7fe17287 +@51 @51 0x7fe17437 +@110 @110 0x7fe17c77 +@175 @175 0x7fe17fe8 +@120 @120 0x7fe18022 +@49 @49 0x7fe1802d +Shell_NotifyIconA @250 0x7fe1883f +Shell_NotifyIcon @249 0x7fe1883f +@149 @149 0x7fe18e9f +@146 @146 0x7fe19cca +@151 @151 0x7fe19d4b +@73 @73 0x7fe1bd7b +SHChangeNotify @210 0x7fe1f05c +@65 @65 0x7fe1f300 +@83 @83 0x7fe1f830 +@15 @15 0x7fe1fda3 +@153 @153 0x7fe1fdf5 +@17 @17 0x7fe208ac +@24 @24 0x7fe20d76 +@60 @60 0x7fe212e3 +DuplicateIcon @80 0x7fe235a9 +SheChangeDirA @226 0x7fe235b6 +SheChangeDirW @229 0x7fe235c3 +SheFullPathA @231 0x7fe235d0 +SheFullPathW @232 0x7fe235dd +SheGetDirA @234 0x7fe235ea +SheGetDirW @236 0x7fe235f7 +SheGetCurDrive @233 0x7fe23604 +SheSetCurDrive @240 0x7fe2360f +RealShellExecuteA @193 0x7fe2361c +RealShellExecuteW @204 0x7fe23629 +ShellExecuteW @248 0x7fe23636 +FindExecutableW @187 0x7fe23643 +ShellAboutW @244 0x7fe23650 +ExtractAssociatedIconW @125 0x7fe2365d +ExtractIconW @180 0x7fe2366a +DragQueryFileW @54 0x7fe23677 +DoEnvironmentSubstW @38 0x7fe23684 +CheckEscapesA @3 0x7fe23691 +CheckEscapesW @6 0x7fe2369e +CommandLineToArgvW @7 0x7fe236ab +DragQueryFileAorW @53 0x7fe236b8 +ExtractAssociatedIconExA @101 0x7fe236c5 +ExtractAssociatedIconExW @124 0x7fe236d2 +ExtractIconResInfoA @148 0x7fe236df +ExtractIconResInfoW @150 0x7fe236ec +ExtractVersionResource16W @182 0x7fe236f9 +FreeIconList @188 0x7fe23706 +InternalExtractIconListA @189 0x7fe23713 +InternalExtractIconListW @190 0x7fe23720 +RealShellExecuteExA @194 0x7fe2372d +RealShellExecuteExW @203 0x7fe2373a +RegenerateUserEnvironment @205 0x7fe23747 +SheChangeDirExA @227 0x7fe23754 +SheChangeDirExW @228 0x7fe23761 +SheConvertPathW @230 0x7fe2376e +SheGetDirExW @235 0x7fe2377b +SheGetPathOffsetW @237 0x7fe23788 +SheRemoveQuotesA @238 0x7fe23795 +SheRemoveQuotesW @239 0x7fe237a2 +SheShortenPathA @241 0x7fe237af +SheShortenPathW @242 0x7fe237bc +@118 @118 0x7fe246cd +@111 @111 0x7fe246e3 +@106 @106 0x7fe24716 +@108 @108 0x7fe2484b +@140 @140 0x7fe24978 +@141 @141 0x7fe24a7b +@142 @142 0x7fe24b26 +@143 @143 0x7fe24b9d +@129 @129 0x7fe26796 +DragQueryPoint @76 0x7fe270df +DragFinish @42 0x7fe27135 +@84 @84 0x7fe27142 +@123 @123 0x7fe271d1 +@173 @173 0x7fe28cbb +ShellExecuteA @245 0x7fe28e67 +SHAddToRecentDocs @206 0x7fe29b88 +FindExecutableA @186 0x7fe29ca9 +@97 @97 0x7fe29e34 +@145 @145 0x7fe2b8d1 +SHGetSpecialFolderLocation @223 0x7fe2b8e3 +@158 @158 0x7fe2bcbc +@171 @171 0x7fe2bf37 +@48 @48 0x7fe2c2b5 +@47 @47 0x7fe2c80b +@75 @75 0x7fe2c828 +@92 @92 0x7fe2c9e3 +@56 @56 0x7fe2ca1c +@55 @55 0x7fe2ca4a +@46 @46 0x7fe2cabe +@59 @59 0x7fe2d035 +@63 @63 0x7fe2e81a +@184 @184 0x7fe2f889 +@81 @81 0x7fe2fa69 +@168 @168 0x7fe2fbc6 +@169 @169 0x7fe2fcd3 +@167 @167 0x7fe2fd00 +@170 @170 0x7fe2fd5c +@62 @62 0x7fe3047c +ExtractIconA @133 0x7fe304de +ExtractAssociatedIconA @82 0x7fe30531 +ExtractIconEx @135 0x7fe30589 +ExtractIconExA @138 0x7fe30589 +@183 @183 0x7fe30808 +@5 @5 0x7fe30d09 +@164 @164 0x7fe310ad +@93 @93 0x7fe310ef +@94 @94 0x7fe31119 +@58 @58 0x7fe31430 +@127 @127 0x7fe315a0 +SHFreeNameMappings @214 0x7fe32774 +@165 @165 0x7fe3326b +SHFileOperationA @212 0x7fe35c73 +SHFileOperation @211 0x7fe35c73 +@137 @137 0x7fe36570 +@136 @136 0x7fe366c5 +@177 @177 0x7fe3688b +@131 @131 0x7fe36918 +@130 @130 0x7fe369db +@134 @134 0x7fe36a11 +@132 @132 0x7fe36a52 +@185 @185 0x7fe3b9a5 +@161 @161 0x7fe3c35c +Control_RunDLL @12 0x7fe3c411 +Control_FillCache_RunDLL @8 0x7fe3c4ee +PrintersGetCommand_RunDLL @192 0x7fe3dda1 +SHGetDesktopFolder @216 0x7fe44f02 +@95 @95 0x7fe4525f +@126 @126 0x7fe45332 +@69 @69 0x7fe474f4 +@160 @160 0x7fe47867 +@179 @179 0x7fe483c8 +@172 @172 0x7fe4882b +@199 @199 0x7fe4ab49 +SHGetDataFromIDListA @215 0x7fe4ab7d +@139 @139 0x7fe4cdea +OpenAs_RunDLL @191 0x7fe4df12 +SHAppBarMessage @207 0x7fe4df22 +SHLoadInProc @225 0x7fe4dfd0 +@176 @176 0x7fe4e025 +SHGetInstanceExplorer @219 0x7fe4e031 +@90 @90 0x7fe50263 +@91 @91 0x7fe5029b +SHBrowseForFolder @208 0x7fe575ea +SHBrowseForFolderA @209 0x7fe575ea +SHHelpShortcuts_RunDLL @224 0x7fe59b54 +@178 @178 0x7fe59c9b +@198 @198 0x7fe59db7 +SHGetMalloc @220 0x7fe59f31 +@200 @200 0x7fe59f5b +@202 @202 0x7fe59f6c +@201 @201 0x7fe59f81 +ShellAboutA @243 0x7fe5adce +@88 @88 0x7fe5b1e8 +@74 @74 0x7fe5b3e6 +@166 @166 0x7fe5c0af +SHFormatDrive @213 0x7fe5c20f +@9 @9 0x7fe5c239 +@11 @11 0x7fe5c26b +@10 @10 0x7fe5c26f +@13 @13 0x7fe5c2a5 +@181 @181 0x7fe5c2a9 +@197 @197 0x7fe5c2c5 +@122 @122 0x7fe5c2db +Shl1632_ThunkData32 @251 0x7fe68004 +Shl3216_ThunkData32 @252 0x7fe6802c +@3 @3 0xbfe612ba +@1 @1 0xbfe612d0 +joySetCapture @35 0xbfe613b3 +joySetThreshold @36 0xbfe613d9 +auxSetVolume @26 0xbfe61a15 +mixerGetNumDevs @109 0xbfe61ab0 +joyGetNumDevs @30 0xbfe61ab4 +midiOutGetNumDevs @81 0xbfe61ab8 +midiInGetNumDevs @65 0xbfe61abc +auxGetNumDevs @23 0xbfe61ac0 +waveOutGetNumDevs @168 0xbfe61ac4 +waveInGetNumDevs @152 0xbfe61ac8 +mciGetCreatorTask @41 0xbfe61c05 +joyReleaseCapture @34 0xbfe61c09 +PlaySoundW @19 0xbfe6216e +sndPlaySoundW @137 0xbfe6217b +mciSendCommandW @51 0xbfe62188 +mciSendStringW @53 0xbfe62198 +mciGetErrorStringW @47 0xbfe621a8 +mciGetDeviceIDW @44 0xbfe621b5 +mciGetDeviceIDFromElementIDW @43 0xbfe621c2 +mmioOpenW @124 0xbfe621cf +mmioRenameW @127 0xbfe621dc +mmioInstallIOProc16 @120 0xbfe621ec +mmioStringToFOURCCW @133 0xbfe621f9 +mmioInstallIOProcW @122 0xbfe62206 +joyGetDevCapsW @29 0xbfe62213 +midiOutGetDevCapsW @77 0xbfe62223 +midiOutGetErrorTextW @79 0xbfe62233 +midiInGetDevCapsW @61 0xbfe62243 +midiInGetErrorTextW @63 0xbfe62253 +auxGetDevCapsW @22 0xbfe62263 +waveOutGetDevCapsW @164 0xbfe62273 +waveOutGetErrorTextW @166 0xbfe62283 +waveInGetDevCapsW @148 0xbfe62293 +waveInGetErrorTextW @150 0xbfe622a3 +mixerGetDevCapsW @103 0xbfe622b3 +mixerGetLineInfoW @108 0xbfe622c3 +mixerGetLineControlsW @106 0xbfe622d3 +mixerGetControlDetailsW @101 0xbfe622e3 +mciDriverNotify @37 0xbfe622f3 +mciDriverYield @38 0xbfe62300 +mciFreeCommandResource @40 0xbfe6230d +mciSetDriverData @54 0xbfe6231a +mciGetDriverData @45 0xbfe62327 +mciLoadCommandResource @49 0xbfe62334 +GetDriverModuleHandle @15 0xbfe6263f +DrvGetModuleHandle @10 0xbfe6263f +GetDriverFlags @14 0xbfe6268d +DrvOpen @11 0xbfe62d93 +OpenDriver @16 0xbfe62d93 +DrvOpenA @12 0xbfe62dab +OpenDriverA @17 0xbfe62dab +CloseDriver @5 0xbfe62dc3 +DrvClose @8 0xbfe62dc3 +DrvSendMessage @13 0xbfe62fd3 +SendDriverMessage @20 0xbfe62fd3 +DrvDefDriverProc @9 0xbfe630cc +DefDriverProc @6 0xbfe630cc +DriverCallback @7 0xbfe630ff +mmsystemGetVersion @135 0xbfe631c3 +midiOutOpen @85 0xbfe63d35 +midiInOpen @67 0xbfe63d57 +midiStreamOpen @92 0xbfe63d79 +midiStreamClose @91 0xbfe63e02 +waveOutOpen @174 0xbfe63f6e +waveInOpen @155 0xbfe63f93 +mixerMessage @110 0xbfe6428f +mixerGetID @104 0xbfe642af +mixerSetControlDetails @112 0xbfe64326 +mixerGetLineInfoA @107 0xbfe6439d +mixerGetLineControlsA @105 0xbfe64417 +mixerGetControlDetailsA @100 0xbfe6448e +mixerOpen @111 0xbfe64505 +mixerClose @99 0xbfe6459b +mixerGetDevCapsA @102 0xbfe645e7 +joyGetDevCapsA @28 0xbfe6468c +joyGetPos @31 0xbfe646fb +joyGetPosEx @32 0xbfe6474a +joyConfigChanged @27 0xbfe6479e +joyGetThreshold @33 0xbfe647aa +waveOutPrepareHeader @176 0xbfe64be8 +waveInPrepareHeader @156 0xbfe64c01 +midiOutPrepareHeader @86 0xbfe64c1a +midiInPrepareHeader @68 0xbfe64c33 +waveOutUnprepareHeader @182 0xbfe64c4c +waveInUnprepareHeader @160 0xbfe64c65 +midiOutUnprepareHeader @90 0xbfe64c7e +midiInUnprepareHeader @72 0xbfe64c97 +midiOutGetID @80 0xbfe64cb0 +midiOutGetVolume @82 0xbfe64d0c +midiOutSetVolume @88 0xbfe64d80 +midiStreamProperty @96 0xbfe64ddd +midiOutShortMsg @89 0xbfe64e3c +midiStreamPosition @95 0xbfe64e7f +midiOutGetDevCapsA @76 0xbfe64ee4 +midiOutMessage @84 0xbfe64f88 +midiStreamOut @93 0xbfe65079 +midiOutClose @75 0xbfe65092 +midiInGetDevCapsA @60 0xbfe650de +midiInGetID @64 0xbfe65182 +midiDisconnect @57 0xbfe65258 +midiConnect @56 0xbfe6526a +midiInMessage @66 0xbfe6527c +midiInClose @59 0xbfe6529c +midiInReset @69 0xbfe652e8 +midiOutReset @87 0xbfe65334 +midiStreamPause @94 0xbfe65380 +midiStreamRestart @97 0xbfe653c0 +midiStreamStop @98 0xbfe65400 +midiInStart @70 0xbfe65440 +midiInStop @71 0xbfe65480 +waveOutPause @175 0xbfe654c0 +waveOutRestart @178 0xbfe65500 +waveOutReset @177 0xbfe65540 +waveOutBreakLoop @161 0xbfe6558c +waveInStart @158 0xbfe655cc +waveInStop @159 0xbfe6560c +waveInReset @157 0xbfe6564c +waveOutGetDevCapsA @163 0xbfe65698 +waveOutGetPosition @171 0xbfe65759 +waveOutGetPitch @169 0xbfe657be +waveOutSetPitch @179 0xbfe6581a +waveOutGetPlaybackRate @170 0xbfe6585d +waveOutSetPlaybackRate @180 0xbfe658b9 +waveOutGetID @167 0xbfe658fc +waveOutGetVolume @172 0xbfe65958 +waveOutSetVolume @181 0xbfe659cc +waveOutMessage @173 0xbfe65a29 +waveOutClose @162 0xbfe65a49 +waveInGetDevCapsA @147 0xbfe65a95 +waveInGetPosition @153 0xbfe65b4a +waveInMessage @154 0xbfe65baf +waveInGetID @151 0xbfe65bcf +waveInClose @146 0xbfe65c2b +waveOutWrite @183 0xbfe65c77 +midiOutLongMsg @83 0xbfe65d4a +waveInAddBuffer @145 0xbfe65d63 +midiInAddBuffer @58 0xbfe65e30 +midiOutGetErrorTextA @78 0xbfe65efd +midiOutCachePatches @74 0xbfe65f28 +midiOutCacheDrumPatches @73 0xbfe65f8d +midiInGetErrorTextA @62 0xbfe65ff2 +auxOutMessage @25 0xbfe6601d +auxGetVolume @24 0xbfe6603d +waveOutGetErrorTextA @165 0xbfe66062 +waveInGetErrorTextA @149 0xbfe6608d +mciExecute @39 0xbfe660b8 +mciGetDeviceIDA @42 0xbfe660dc +mciGetErrorStringA @46 0xbfe66100 +mciGetYieldProc @48 0xbfe6612b +mciSetYieldProc @55 0xbfe66130 +auxGetDevCapsA @21 0xbfe66135 +timeGetSystemTime @141 0xbfe661b4 +timeGetTime @142 0xbfe661fd +timeGetDevCaps @140 0xbfe66225 +timeSetEvent @144 0xbfe66464 +timeKillEvent @143 0xbfe66640 +timeBeginPeriod @138 0xbfe666e5 +timeEndPeriod @139 0xbfe66712 +mciSendCommandA @50 0xbfe66ea0 +mciSendStringA @52 0xbfe67197 +mmioRenameA @126 0xbfe673f7 +mmioOpenA @123 0xbfe67474 +mmioClose @115 0xbfe675af +mmioRead @125 0xbfe67611 +mmioWrite @134 0xbfe676fd +mmioSeek @128 0xbfe67801 +mmioGetInfo @119 0xbfe678d2 +mmioSetInfo @131 0xbfe67922 +mmioSetBuffer @130 0xbfe679d9 +mmioFlush @118 0xbfe67b7f +mmioAdvance @113 0xbfe67c00 +mmioStringToFOURCCA @132 0xbfe67cee +mmioInstallIOProcA @121 0xbfe67d4b +mmioSendMessage @129 0xbfe67e0f +mmioDescend @117 0xbfe682bd +mmioAscend @114 0xbfe6840c +mmioCreateChunk @116 0xbfe684e7 +PlaySoundA @2 0xbfe68c35 +PlaySound @18 0xbfe68c35 +sndPlaySoundA @136 0xbfe68c8f +@4 @4 0xbfe6956f +winmmf_ThunkData32 @184 0xbfe6a000 +winmmsl_ThunkData32 @185 0xbfe6a064 +RegRestoreKeyA @164 0xbfef1025 +RegSetKeySecurity @168 0xbfef1025 +RegGetKeySecurity @145 0xbfef102e +RegNotifyChangeKeyValue @148 0xbfef1037 +RevertToSelf @181 0xbfef1040 +GetSidLengthRequired @64 0xbfef1049 +GetSidIdentifierAuthority @63 0xbfef1049 +GetSidSubAuthorityCount @66 0xbfef1049 +CloseEventLog @22 0xbfef1049 +CloseServiceHandle @23 0xbfef1049 +DestroyPrivateObjectSecurity @34 0xbfef1049 +GetLengthSid @49 0xbfef1049 +FreeSid @43 0xbfef1049 +GetSecurityDescriptorLength @56 0xbfef1049 +DeleteService @32 0xbfef1049 +DeregisterEventSource @33 0xbfef1049 +StartServiceCtrlDispatcherA @197 0xbfef1049 +StartServiceCtrlDispatcherW @198 0xbfef1049 +IsValidAcl @79 0xbfef1049 +IsValidSid @81 0xbfef1049 +AbortSystemShutdownW @2 0xbfef1049 +AbortSystemShutdownA @1 0xbfef1049 +LockServiceDatabase @82 0xbfef1049 +UnlockServiceDatabase @200 0xbfef1049 +NotifyBootConfigStatus @98 0xbfef1049 +ImpersonateSelf @72 0xbfef1049 +AllocateLocallyUniqueId @13 0xbfef1049 +ImpersonateLoggedOnUser @70 0xbfef1049 +ImpersonateNamedPipeClient @71 0xbfef1049 +IsValidSecurityDescriptor @80 0xbfef1052 +RegDeleteKeyW @135 0xbfef105b +OpenEventLogA @108 0xbfef105b +OpenBackupEventLogW @107 0xbfef105b +GetUserNameW @69 0xbfef105b +OpenBackupEventLogA @106 0xbfef105b +RegDeleteValueW @137 0xbfef105b +GetNumberOfEventLogRecords @50 0xbfef105b +MapGenericMask @97 0xbfef105b +QueryServiceStatus @124 0xbfef105b +NotifyChangeEventLog @99 0xbfef105b +GetSidSubAuthority @65 0xbfef105b +GetOldestEventLogRecord @51 0xbfef105b +OpenEventLogW @109 0xbfef105b +RegisterServiceCtrlHandlerA @177 0xbfef105b +RegisterServiceCtrlHandlerW @178 0xbfef105b +ClearEventLogW @21 0xbfef105b +RegUnLoadKeyW @174 0xbfef105b +RegisterEventSourceA @175 0xbfef105b +RegisterEventSourceW @176 0xbfef105b +ClearEventLogA @20 0xbfef105b +AreAllAccessesGranted @14 0xbfef105b +SetServiceStatus @193 0xbfef105b +SetThreadToken @194 0xbfef105b +BackupEventLogW @17 0xbfef105b +BackupEventLogA @16 0xbfef105b +AreAnyAccessesGranted @15 0xbfef105b +EqualSid @41 0xbfef105b +FindFirstFreeAce @42 0xbfef105b +EqualPrefixSid @40 0xbfef105b +DeleteAce @31 0xbfef105b +InitializeSecurityDescriptor @74 0xbfef1064 +SetKernelObjectSecurity @185 0xbfef106d +ObjectCloseAuditAlarmA @100 0xbfef106d +SetFileSecurityW @184 0xbfef106d +SetServiceObjectSecurity @192 0xbfef106d +LookupPrivilegeValueW @94 0xbfef106d +LookupPrivilegeValueA @93 0xbfef106d +StartServiceW @199 0xbfef106d +MakeSelfRelativeSD @96 0xbfef106d +StartServiceA @196 0xbfef106d +RegCreateKeyW @133 0xbfef106d +RegSaveKeyW @167 0xbfef106d +OpenServiceA @113 0xbfef106d +OpenServiceW @114 0xbfef106d +OpenSCManagerW @112 0xbfef106d +OpenSCManagerA @111 0xbfef106d +OpenProcessToken @110 0xbfef106d +PrivilegeCheck @116 0xbfef106d +ObjectCloseAuditAlarmW @101 0xbfef106d +RegLoadKeyW @147 0xbfef106d +RegConnectRegistryW @129 0xbfef106d +RegRestoreKeyW @165 0xbfef106d +RegOpenKeyW @152 0xbfef106d +SetFileSecurityA @183 0xbfef106d +GetSecurityDescriptorControl @53 0xbfef106d +GetAce @44 0xbfef106d +IsTextUnicode @78 0xbfef106d +InitializeAcl @73 0xbfef106d +InitializeSid @75 0xbfef106d +DuplicateToken @35 0xbfef106d +GetSecurityDescriptorOwner @57 0xbfef106d +CopySid @25 0xbfef106d +ControlService @24 0xbfef106d +GetSecurityDescriptorGroup @55 0xbfef106d +SetSecurityDescriptorGroup @188 0xbfef1076 +SetSecurityDescriptorOwner @189 0xbfef1076 +QueryServiceLockStatusW @122 0xbfef107f +GetSecurityDescriptorDacl @54 0xbfef107f +QueryServiceLockStatusA @121 0xbfef107f +OpenThreadToken @115 0xbfef107f +QueryServiceConfigA @119 0xbfef107f +QueryServiceConfigW @120 0xbfef107f +RegQueryValueW @160 0xbfef107f +SetServiceBits @191 0xbfef107f +RegReplaceKeyW @163 0xbfef107f +SetAclInformation @182 0xbfef107f +RegEnumKeyW @141 0xbfef107f +AddAccessDeniedAce @7 0xbfef107f +AddAccessAllowedAce @6 0xbfef107f +GetAclInformation @45 0xbfef107f +SetTokenInformation @195 0xbfef107f +GetServiceKeyNameW @62 0xbfef107f +LookupPrivilegeNameW @92 0xbfef107f +LookupPrivilegeNameA @91 0xbfef107f +GetServiceKeyNameA @61 0xbfef107f +GetServiceDisplayNameA @59 0xbfef107f +GetSecurityDescriptorSacl @58 0xbfef107f +GetServiceDisplayNameW @60 0xbfef107f +SetSecurityDescriptorSacl @190 0xbfef1088 +SetSecurityDescriptorDacl @187 0xbfef1088 +RegQueryMultipleValuesW @156 0xbfef1091 +InitiateSystemShutdownW @77 0xbfef1091 +RegOpenKeyExW @151 0xbfef1091 +AddAce @8 0xbfef1091 +InitiateSystemShutdownA @76 0xbfef1091 +GetFileSecurityA @46 0xbfef1091 +SetPrivateObjectSecurity @186 0xbfef1091 +GetFileSecurityW @47 0xbfef1091 +GetKernelObjectSecurity @48 0xbfef1091 +GetTokenInformation @67 0xbfef1091 +RegSetValueW @172 0xbfef1091 +PrivilegedServiceAuditAlarmA @117 0xbfef1091 +PrivilegedServiceAuditAlarmW @118 0xbfef1091 +LookupPrivilegeDisplayNameA @89 0xbfef1091 +LookupPrivilegeDisplayNameW @90 0xbfef1091 +GetPrivateObjectSecurity @52 0xbfef1091 +QueryServiceObjectSecurity @123 0xbfef1091 +LogonUserW @84 0xbfef109a +EnumDependentServicesW @37 0xbfef109a +RegSetValueExW @171 0xbfef109a +CreatePrivateObjectSecurity @26 0xbfef109a +EnumDependentServicesA @36 0xbfef109a +AdjustTokenPrivileges @11 0xbfef109a +RegQueryValueExW @159 0xbfef109a +AddAuditAccessAce @9 0xbfef109a +AdjustTokenGroups @10 0xbfef109a +ObjectPrivilegeAuditAlarmA @104 0xbfef109a +ObjectPrivilegeAuditAlarmW @105 0xbfef109a +LogonUserA @83 0xbfef109a +LookupAccountSidW @88 0xbfef10a3 +ReadEventLogA @125 0xbfef10a3 +ReadEventLogW @126 0xbfef10a3 +LookupAccountNameW @86 0xbfef10a3 +LookupAccountSidA @87 0xbfef10a3 +LookupAccountNameA @85 0xbfef10a3 +RegEnumKeyExW @140 0xbfef10ac +EnumServicesStatusA @38 0xbfef10ac +RegEnumValueW @143 0xbfef10ac +AccessCheck @3 0xbfef10ac +EnumServicesStatusW @39 0xbfef10ac +ReportEventW @180 0xbfef10b5 +RegCreateKeyExW @132 0xbfef10b5 +ReportEventA @179 0xbfef10b5 +CreateProcessAsUserA @27 0xbfef10be +CreateProcessAsUserW @28 0xbfef10be +ChangeServiceConfigW @19 0xbfef10be +AccessCheckAndAuditAlarmW @5 0xbfef10be +AllocateAndInitializeSid @12 0xbfef10be +MakeAbsoluteSD @95 0xbfef10be +AccessCheckAndAuditAlarmA @4 0xbfef10be +ChangeServiceConfigA @18 0xbfef10be +ObjectOpenAuditAlarmA @102 0xbfef10c7 +RegQueryInfoKeyW @154 0xbfef10c7 +ObjectOpenAuditAlarmW @103 0xbfef10c7 +CreateServiceW @30 0xbfef10d0 +CreateServiceA @29 0xbfef10d0 +RegDeleteValueA @136 0xbfef1188 +RegEnumValueA @142 0xbfef11c9 +RegFlushKey @144 0xbfef12b6 +RegOpenKeyExA @150 0xbfef12ef +RegQueryValueExA @158 0xbfef1352 +RegSetValueExA @170 0xbfef1412 +RegCloseKey @127 0xbfef146c +RegCreateKeyExA @131 0xbfef14a5 +RegCreateKeyA @130 0xbfef1550 +RegDeleteKeyA @134 0xbfef15ad +RegEnumKeyA @138 0xbfef15ee +RegEnumKeyExA @139 0xbfef1652 +RegOpenKeyA @149 0xbfef17ef +RegQueryValueA @157 0xbfef184c +RegSetValueA @169 0xbfef18e3 +RegQueryInfoKeyA @153 0xbfef1937 +RegLoadKeyA @146 0xbfef1b3b +RegUnLoadKeyA @173 0xbfef1bba +RegSaveKeyA @166 0xbfef1bfb +RegReplaceKeyA @162 0xbfef1c7a +RegQueryMultipleValuesA @155 0xbfef1d2e +RegRemapPreDefKey @161 0xbfef1db6 +RegConnectRegistryA @128 0xbfef1dcc +GetUserNameA @68 0xbfef1e35 diff --git a/test/FILEHELP.CPP b/test/FILEHELP.CPP new file mode 100644 index 0000000..5baee9b --- /dev/null +++ b/test/FILEHELP.CPP @@ -0,0 +1,351 @@ +#include +#include +//#include +#include +//#include +#include +#include +#include + +SelectFile::SelectFile(HWND hParent,Mode readWrite) +: mwFileAttribute((WORD)DefaultAttribute), mhParent(hParent), + mMode(readWrite), mhInstance(processInstance()), + mOwnerDraw(OwnerDraw::UseInstance) +{ + mszFileName[0]='\0'; + ::strcpy(mszDefExt,".DAT"); + ::strcpy(mszFileSpec,"*.*"); +// mLastDrive=::getdisk(); +// ::getcwd(mszDirectory,sizeof(mszDirectory)); + ::strcpy(mszDirectory,"c:\\"); +} +SelectFile::~SelectFile() +{ +// char Path[132]; +// ::wsprintf(Path,"%c:\\",mLastDrive+65); + // ::setdisk(mLastDrive); + // ::strcat(Path,mszDirectory); +// ::chdir(Path); +} + +int SelectFile::GetFileName(char *szNameBuf,WORD nMaxChars) +{ + WORD returnCode; + + returnCode=::DialogBoxParam(mhInstance,(LPSTR)"FileSelect",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + if(returnCode) + ::strncpy(szNameBuf,mszFileName,nMaxChars>sizeof(mszFileName)?sizeof(mszFileName):nMaxChars); + return returnCode; +} + +void SelectFile::Initialize() +{ + ::SendDlgItemMessage(*this,IDS_FNAME,EM_LIMITTEXT,80,0L); + ::SendDlgItemMessage(*this,IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + ::DlgDirList(*this,mszFileSpec,IDS_FLIST,IDS_FPATH,mwFileAttribute); + waitCursor(FALSE); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SendMessage(GetDlgItem(GetHandle(),IDS_FLIST),LB_GETTEXT,0,(LONG)mszFileName); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETCURSEL,0,0L); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::SelChange() +{ +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + ::lstrcat(mszFileName,mszFileSpec); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); +} + +void SelectFile::DoubleClick() +{ + waitCursor(TRUE); +#if defined(__FLAT__) + if(DlgDirSelectExA(GetHandle(),mszFileName,sizeof(mszFileName),IDS_FLIST)) +#else + if(DlgDirSelect(GetHandle(),mszFileName,IDS_FLIST)) +#endif + { + ::lstrcat(mszFileName,mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + ::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute); + SetExtended(); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else + { + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileName); + ::SendMessage(GetHandle(),WM_COMMAND,IDOK,0L); + } + waitCursor(FALSE); +} + +int SelectFile::CheckFileNameSpec() +{ + ::GetDlgItemText(GetHandle(),IDS_FNAME,mszFileName,sizeof(mszFileName)); + mnEditLen=::lstrlen(mszFileName); + mcLastChar=*::AnsiPrev(mszFileName,mszFileName+mnEditLen); + if(mcLastChar=='\\'||mcLastChar==':')::lstrcat(mszFileName,mszFileSpec); + if(lstrchr(mszFileName,'*')||lstrchr(mszFileName,'?')) + { + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + } + else ::MessageBeep(0); + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + return FALSE; + } + ::lstrcat(lstrcat(mszFileName,"\\"),mszFileSpec); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,FALSE,0L); + waitCursor(TRUE); + if(::DlgDirList(GetHandle(),mszFileName,IDS_FLIST,IDS_FPATH,mwFileAttribute)) + { + waitCursor(FALSE); + SetExtended(); + ::strcpy(mszFileSpec,mszFileName); + ::SetDlgItemText(GetHandle(),IDS_FNAME,mszFileSpec); + return FALSE; + } + waitCursor(FALSE); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,WM_SETREDRAW,TRUE,0L); + mszFileName[mnEditLen]='\0'; + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + if(Write==mMode) + { + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_WRITE|OF_CREATE))) + { + ::MessageBeep(0); + return FALSE; + } + ::_lclose(mfd); + ::unlink(mszFileName); + return TRUE; + } + ::lstrcat(mszFileName,mszDefExt); + if(-1==(mfd=::OpenFile(mszFileName,&mPof,OF_READ|OF_EXIST))) + { + ::MessageBeep(0); + return FALSE; + } + else ::_lclose(mfd); + } + else ::_lclose(mfd); + ::strcpy(mszFileName,mPof.szPathName); + ::OemToAnsi(mszFileName,mszFileName); + if(Write==mMode) + { + ::MessageBeep(0); + switch( + ::MessageBox(GetHandle(),(LPSTR)"Overwrite this file?",(LPSTR)mszFileName,MB_OKCANCEL)) + { + case IDOK : + return TRUE; + case IDCANCEL : + return FALSE; + } + } + return TRUE; +} + +LPSTR SelectFile::lstrchr(LPSTR str,char ch) +{ + while(*str) + { + if(ch==*str)return str; + str=::AnsiNext(str); + } + return NULL; +} + +LPSTR SelectFile::lstrrchr(LPSTR str,char ch) +{ + LPSTR strl=str+lstrlen(str); + + do + { + if(ch==*strl)return strl; + strl=::AnsiPrev(str,strl); + }while(strl>str); + return NULL; +} + +int SelectFile::DlgProc(UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) + { + case WM_INITDIALOG : + { + int TabStopList[3]; + WORD DlgWidthUnits; + String windowText; + + DlgWidthUnits=LOWORD(::GetDialogBaseUnits())/4; + Main::smhBitmap.associate(IDOK, + String(STRING_BITMAPOKFOCUSUP,mhInstance), + String(STRING_BITMAPOKNOFUP,mhInstance), + String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Main::smhBitmap.associate(IDCANCEL, + String(STRING_BITMAPCAFOCUSUP,mhInstance), + String(STRING_BITMAPCANOFUP,mhInstance), + String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS); + Initialize(); + TabStopList[0]=DlgWidthUnits*13*2; + TabStopList[1]=DlgWidthUnits*28*2; + TabStopList[2]=DlgWidthUnits*38*2; + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_SETTABSTOPS,3,(LONG)(LPSTR)TabStopList); + ::GetDlgItemText(GetHandle(),(Write==mMode?IDS_FILESAVE:IDS_FILEOPEN),windowText,String::MaxString); + ::SetWindowText(GetHandle(),windowText); + } + return TRUE; + case WM_DRAWITEM : + switch(((LPDRAWITEMSTRUCT)lParam)->CtlID) + { + case IDOK : + Main::smhBitmap.handleOwnerButton(IDOK,lParam); + return TRUE; + case IDCANCEL : + Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam); + return TRUE; + } + return TRUE; + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam,lParam)) + { + case IDS_FLIST : + switch(GET_WM_COMMAND_CMD(wParam,lParam)) + { + case LBN_SELCHANGE : + SelChange(); + return TRUE; + case LBN_DBLCLK : + DoubleClick(); + return TRUE; + } + break; + case IDS_FNAME : + if(GET_WM_COMMAND_CMD(wParam,lParam)==EN_CHANGE) + ::EnableWindow(::GetDlgItem(GetHandle(),IDOK), + (BOOL)::SendMessage(GET_WM_COMMAND_HWND(wParam,lParam), + WM_GETTEXTLENGTH,0,0L)); + return TRUE; + case IDOK : + if(CheckFileNameSpec()) + { + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),TRUE); + } + return TRUE; + case IDCANCEL : + Main::smhBitmap.freeButton(IDOK); + Main::smhBitmap.freeButton(IDCANCEL); + ::EndDialog(GetHandle(),FALSE); + return TRUE; + } + } + return FALSE; +} + +void SelectFile::SetExtended() +{ + HCURSOR hCursor; + ffblk mffblk; + char szBuffer[100]; + char szFormat[100]; + char minBuf[5]; + char hrBuf[5]; + char moBuf[5]; + char dayBuf[5]; + int nIndex=0; + unsigned Year; + unsigned Month; + unsigned Day; + unsigned Hour; + unsigned Minute; + char cAmPm; + + int nItems=(int)::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_GETCOUNT,0,0L); + if(!nItems)return; + hCursor=::SetCursor(::LoadCursor(NULL,IDC_WAIT)); + ::ShowCursor(TRUE); + for(nIndex=0;nIndex>9)+1980; + Month=(mffblk.ff_fdate>>5)&0x0F; + Day=mffblk.ff_fdate&0x1F; + Hour=(mffblk.ff_ftime>>11)&0x1F; + Minute=(mffblk.ff_ftime>>5)&0x3F; + if(Hour>=12 && Minute) + { + Hour=Hour==12?1:Hour-12; + if(Hour==12)cAmPm='a'; + else cAmPm='p'; + } + else + { + if(!Hour)Hour=12; + cAmPm='a'; + } + ::wsprintf(minBuf,"%d",Minute); + if(1==::lstrlen(minBuf)) + { + minBuf[2]='\0'; + minBuf[1]=minBuf[0]; + minBuf[0]='0'; + } + ::wsprintf(hrBuf,"%d",Hour); + if(1==::lstrlen(hrBuf)) + { + hrBuf[3]='\0'; + hrBuf[2]=hrBuf[0]; + hrBuf[1]=' '; + hrBuf[0]=' '; + } + ::wsprintf(moBuf,"%d",Month); + if(1==::lstrlen(moBuf)) + { + moBuf[2]='\0'; + moBuf[1]=moBuf[0]; + moBuf[0]='0'; + } + ::wsprintf(dayBuf,"%d",Day); + if(1==::lstrlen(dayBuf)) + { + dayBuf[2]='\0'; + dayBuf[1]=dayBuf[0]; + dayBuf[0]='0'; + } + ::wsprintf(szFormat,"\t%s-%s-%d\t%9ld\t%s:%s%c", + (LPSTR)moBuf,(LPSTR)dayBuf,Year,mffblk.ff_fsize,(LPSTR)hrBuf,(LPSTR)minBuf,cAmPm); + ::lstrcat(szBuffer,szFormat); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_DELETESTRING,nIndex,0L); + ::SendDlgItemMessage(GetHandle(),IDS_FLIST,LB_INSERTSTRING,nIndex,(LPARAM)(LPCSTR)szBuffer); + } + } + ::ShowCursor(FALSE); + ::SetCursor(hCursor); +} + \ No newline at end of file diff --git a/test/FILEHELP.HPP b/test/FILEHELP.HPP new file mode 100644 index 0000000..1fef8c2 --- /dev/null +++ b/test/FILEHELP.HPP @@ -0,0 +1,68 @@ +#ifndef _FILEHELP_HPP +#define _FILEHELP_HPP +#include +#include +//#include +#include +#include + +class SelectFile : public DWindow +{ +public: + enum Mode{Read,Write}; + SelectFile(HWND hParent,Mode readWrite=Read); + ~SelectFile(); + void SetAttribute(WORD attribute); + void SetExtension(const char * extension); + void SetFileSpec(const char * fileSpec); + int GetFileName(char *buffer,WORD length); +private: + enum {MaxTextLength=96}; + enum {DefaultAttribute=0x4010}; + int DlgProc(UINT message,WPARAM wParam,LPARAM lParam); + void Initialize(); + void SelChange(); + void DoubleClick(); + void SetExtended(); + int CheckFileNameSpec(); + LPSTR lstrrchr(LPSTR,char); + LPSTR lstrchr(LPSTR,char); + + + char mszDefExt[MaxTextLength]; + char mszFileName[MaxTextLength]; + char mszFileSpec[MaxTextLength]; + char mszDirectory[MaxTextLength]; + char mcLastChar; + short mnEditLen; + int mLastDrive; + WORD mwFileAttribute; + OFSTRUCT mPof; + HFILE mfd; + HWND mhParent; + HINSTANCE mhInstance; + Mode mMode; + OwnerDraw mOwnerDraw; +}; + +inline +void SelectFile::SetAttribute(WORD nAttribute) +{ + mwFileAttribute=nAttribute; +} + +inline +void SelectFile::SetExtension(const char *szExtension) +{ + ::strncpy(mszDefExt,szExtension,sizeof(mszDefExt)-1); + mszDefExt[sizeof(mszDefExt)-1]='\0'; +} + +inline +void SelectFile::SetFileSpec(const char *szFileSpec) +{ + ::strncpy(mszFileSpec,szFileSpec,sizeof(mszFileSpec)-1); + mszFileSpec[sizeof(mszFileSpec)-1]='\0'; +} +#endif + \ No newline at end of file diff --git a/test/FIND.CPP b/test/FIND.CPP new file mode 100644 index 0000000..951501b --- /dev/null +++ b/test/FIND.CPP @@ -0,0 +1,191 @@ +#include +#include + +Find::Find(void) +: mLastFindIndex(-1) +{ + mKeyDownHandler.setCallback(this,&Find::keyDownHandler); + mDlgCodeHandler.setCallback(this,&Find::dlgCodeHandler); + mEditHook.insertHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); + mEditHook.insertHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); +} + +Find::Find(const Find &find) +{ // private implementation + *this=find; +} + +Find::~Find() +{ + mEditHook.removeHandler(WinHookProc::KeyDownHandler,&mKeyDownHandler); + mEditHook.removeHandler(WinHookProc::DialogCodeHandler,&mDlgCodeHandler); +} + +Find &Find::operator=(const Find &find) +{ // private implementation + return *this; +} + +void Find::perform(GUIWindow &parentWindow) +{ + create(parentWindow); +} + +void Find::create(GUIWindow &parentWindow) +{ + String staticName("STATIC"); + String editName("EDIT"); + String buttonName("BUTTON"); + + DialogTemplate dlgTemplate; + DialogItemTemplate staticFind; + DialogItemTemplate editFind; + DialogItemTemplate cancelButton; + DialogItemTemplate fnButton; + DialogItemTemplate wmButton; + + dlgTemplate.titleText("Find"); + dlgTemplate.posRect(Rect(10,73,236,62)); + dlgTemplate.pointSize(8); + dlgTemplate.typeFace("Helv"); + dlgTemplate.style(DS_MODALFRAME|WS_VISIBLE|WS_CAPTION|DS_3DLOOK|WS_SYSMENU|DS_SETFONT|WS_POPUP); // WS_POPUP + + staticFind.className(staticName); + staticFind.titleText("Fi&nd what:"); + staticFind.style(WS_CHILD|WS_VISIBLE); + staticFind.posRect(Rect(4,8,42,8)); + staticFind.itemID(-1); + + editFind.className(editName); + editFind.titleText(""); + editFind.style(WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP|WS_GROUP); + editFind.posRect(Rect(47,7,128,12)); + editFind.itemID(FindText); + + fnButton.className(buttonName); + fnButton.titleText("&Find Next"); + fnButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP|BS_DEFPUSHBUTTON); + fnButton.posRect(Rect(182,5,50,14)); + fnButton.itemID(FindNext); + + wmButton.className(buttonName); + wmButton.titleText("Match &whole word only"); + wmButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX|WS_GROUP); + wmButton.posRect(Rect(4,26,100,12)); + wmButton.itemID(FindWhole); + + cancelButton.className(buttonName); + cancelButton.titleText("Cancel"); + cancelButton.style(WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_GROUP); + cancelButton.posRect(Rect(182,23,50,14)); + cancelButton.itemID(CancelFind); + + dlgTemplate+=staticFind; + dlgTemplate+=editFind; + dlgTemplate+=cancelButton; + dlgTemplate+=fnButton; + dlgTemplate+=wmButton; + createDialog(parentWindow,dlgTemplate,DynamicDialog::ModelessDialog); +} + +CallbackData::ReturnType Find::keyDownHandler(CallbackData &someCallbackData) +{ + KeyData keyData(someCallbackData); + String strEditText; + + if(!keyData.isEnterKey())return (CallbackData::ReturnType)FALSE; + getText(strEditText); + leaveEdit(strEditText); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType Find::dlgCodeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +WORD Find::dlgCommand(DWORD commandID,CallbackData &someCallbackData) +{ + switch(commandID) + { + case FindText : + break; + case FindNext : + handleFindNext(); + break; + case CancelFind : + destroy(); + break; + } + return FALSE; +} + +WORD Find::dlgCode(CallbackData &someCallbackData) +{ + return DLGC_WANTALLKEYS; +} + +BOOL Find::dlgInitDialog(CallbackData &/*someCallbackData*/) +{ + mEditHook.hookWin(getItem(FindText)); + init(); + return TRUE; +} + +void Find::dlgDestroyDialog(CallbackData &/*someCallbackData*/) +{ + mEditHook.unhookWin(); + return; +} + +void Find::getText(String &strEditText) +{ + String strText; + + DynamicDialog::getText(FindText,strText); + strEditText=strText; +} + +BOOL Find::matchWholeWordOnly(void)const +{ + return ::SendMessage(getItem(FindWhole),BM_GETCHECK,0,0L); +} + +void Find::handleFind(void) +{ + find(); +} + +void Find::handleFindNext(void) +{ + findNext(); +} + +// virtuals + +void Find::init(void) +{ +} + +void Find::find(void) +{ + String currText; + + getText(currText); + lastSearchText(currText); +} + +void Find::findNext(void) +{ + String currText; + + getText(currText); + lastSearchText(currText); +} + +void Find::leaveEdit(const String &strEditText) +{ + lastSearchText(strEditText); +} + + diff --git a/test/FIND.HPP b/test/FIND.HPP new file mode 100644 index 0000000..c8e1de2 --- /dev/null +++ b/test/FIND.HPP @@ -0,0 +1,74 @@ +#ifndef _APISPY_FIND_HPP_ +#define _APISPY_FIND_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _DIALOG_DYNAMICDIALOG_HPP_ +#include +#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif + +class Find : private DynamicDialog +{ +public: + Find(void); + virtual ~Find(); + void perform(GUIWindow &parentWindow); + int lastFindIndex(void)const; + const String &lastSearchText(void)const; +protected: + virtual void init(void); + virtual void find(void); + virtual void findNext(void); + virtual void leaveEdit(const String &strText); + void getText(String &strEditText); + void lastFindIndex(int lastFindIndex); + void lastSearchText(const String &lastSearchText); + BOOL matchWholeWordOnly(void)const; +private: + enum{FindText=101,CancelFind=IDCANCEL,FindNext=103,FindWhole=104}; + Find(const Find &find); + Find &operator=(const Find &find); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dlgCodeHandler(CallbackData &someCallbackData); + void handleFind(void); + void handleFindNext(void); + void create(GUIWindow &parentWindow); + WORD dlgCommand(DWORD commandID,CallbackData &someCallbackData); + WORD dlgCode(CallbackData &someCallbackData); + BOOL dlgInitDialog(CallbackData &someCallbackData); + void dlgDestroyDialog(CallbackData &someCallbackData); + + Callback mKeyDownHandler; + Callback mDlgCodeHandler; + String mLastSearchText; + int mLastFindIndex; + WinHookProc mEditHook; +}; + +inline +const String &Find::lastSearchText(void)const +{ + return mLastSearchText; +} + +inline +void Find::lastSearchText(const String &lastSearchText) +{ + mLastSearchText=lastSearchText; +} + +inline +void Find::lastFindIndex(int lastFindIndex) +{ + mLastFindIndex=lastFindIndex; +} + +inline +int Find::lastFindIndex(void)const +{ + return mLastFindIndex; +} +#endif diff --git a/test/Form1.java b/test/Form1.java new file mode 100644 index 0000000..899ad51 --- /dev/null +++ b/test/Form1.java @@ -0,0 +1,55 @@ +import com.ms.wfc.app.*; +import com.ms.wfc.core.*; +import com.ms.wfc.ui.*; +import com.ms.wfc.html.*; + +/** + * This class can take a variable number of parameters on the command + * line. Program execution begins with the main() method. The class + * constructor is not invoked unless an object of type 'Form1' is + * created in the main() method. + */ +public class Form1 extends Form +{ + public Form1() + { + // Required for Visual J++ Form Designer support + initForm(); + + // TODO: Add any constructor code after initForm call + } + + /** + * Form1 overrides dispose so it can clean up the + * component list. + */ + public void dispose() + { + super.dispose(); + components.dispose(); + } + + /** + * NOTE: The following code is required by the Visual J++ form + * designer. It can be modified using the form editor. Do not + * modify it using the code editor. + */ + Container components = new Container(); + + private void initForm() + { + this.setSize (new Point(300,300)); + this.setText ("Form1"); + } + + /** + * The main entry point for the application. + * + * @param args Array of parameters passed to the application + * via the command line. + */ + public static void main(String args[]) + { + Application.run(new Form1()); + } +} diff --git a/test/Fund.suo b/test/Fund.suo new file mode 100644 index 0000000..9849a79 Binary files /dev/null and b/test/Fund.suo differ diff --git a/test/Fund.vjp b/test/Fund.vjp new file mode 100644 index 0000000..2dd7604 Binary files /dev/null and b/test/Fund.vjp differ diff --git a/test/INPROC.DEF b/test/INPROC.DEF new file mode 100644 index 0000000..1232f49 --- /dev/null +++ b/test/INPROC.DEF @@ -0,0 +1,5 @@ +LIBRARY INPROC.DLL + +EXPORTS + DllCanUnloadNow @1 PRIVATE + DllGetClassObject @2 PRIVATE diff --git a/test/INPROC.DSW b/test/INPROC.DSW new file mode 100644 index 0000000..a0b9a06 --- /dev/null +++ b/test/INPROC.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "inproc"=.\inproc.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/test/INPROC.MAK b/test/INPROC.MAK new file mode 100644 index 0000000..51a2836 --- /dev/null +++ b/test/INPROC.MAK @@ -0,0 +1,233 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on inproc.dsp +!IF "$(CFG)" == "" +CFG=inproc - Win32 Debug +!MESSAGE No configuration specified. Defaulting to inproc - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "inproc - Win32 Release" && "$(CFG)" != "inproc - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "inproc.mak" CFG="inproc - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "inproc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "inproc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "inproc - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\inproc.dll" + +!ELSE + +ALL : "$(OUTDIR)\inproc.dll" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\demo.obj" + -@erase "$(INTDIR)\test.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\inproc.dll" + -@erase "$(OUTDIR)\inproc.exp" + -@erase "$(OUTDIR)\inproc.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\inproc.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\inproc.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)\inproc.pdb" /machine:I386 /def:".\inproc.def"\ + /out:"$(OUTDIR)\inproc.dll" /implib:"$(OUTDIR)\inproc.lib" +DEF_FILE= \ + ".\inproc.def" +LINK32_OBJS= \ + "$(INTDIR)\demo.obj" \ + "$(INTDIR)\test.obj" \ + "..\com\msvcobj\inproc.lib" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\inproc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "inproc - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj +# Begin Custom Macros +OutDir=.\msvcobj +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\inproc.dll" + +!ELSE + +ALL : "$(OUTDIR)\inproc.dll" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\demo.obj" + -@erase "$(INTDIR)\test.obj" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "$(OUTDIR)\inproc.dll" + -@erase "$(OUTDIR)\inproc.exp" + -@erase "$(OUTDIR)\inproc.ilk" + -@erase "$(OUTDIR)\inproc.lib" + -@erase "$(OUTDIR)\inproc.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\inproc.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\inproc.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:yes\ + /pdb:"$(OUTDIR)\inproc.pdb" /debug /machine:I386 /def:".\inproc.def"\ + /out:"$(OUTDIR)\inproc.dll" /implib:"$(OUTDIR)\inproc.lib" /pdbtype:sept +DEF_FILE= \ + ".\inproc.def" +LINK32_OBJS= \ + "$(INTDIR)\demo.obj" \ + "$(INTDIR)\test.obj" \ + "..\com\msvcobj\inproc.lib" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\inproc.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "inproc - Win32 Release" || "$(CFG)" == "inproc - Win32 Debug" +SOURCE=.\demo.c + +"$(INTDIR)\demo.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\test.cpp + +!IF "$(CFG)" == "inproc - Win32 Release" + +DEP_CPP_TEST_=\ + ".\demo.h"\ + ".\demo.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\initguid.hpp"\ + {$(INCLUDE)}"com\inproc.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\test.obj" : $(SOURCE) $(DEP_CPP_TEST_) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "inproc - Win32 Debug" + +DEP_CPP_TEST_=\ + "..\..\parts\mssdk\include\basetsd.h"\ + "..\..\parts\mssdk\include\msxml.h"\ + "..\..\parts\mssdk\include\rpcasync.h"\ + ".\demo.h"\ + ".\demo.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\initguid.hpp"\ + {$(INCLUDE)}"com\inproc.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\test.obj" : $(SOURCE) $(DEP_CPP_TEST_) "$(INTDIR)" + + +!ENDIF + + +!ENDIF + diff --git a/test/INPROC.PLG b/test/INPROC.PLG new file mode 100644 index 0000000..6a651b0 --- /dev/null +++ b/test/INPROC.PLG @@ -0,0 +1,15 @@ +--------------------Configuration: inproc - Win32 Debug-------------------- +Begining build with project "E:\work\TEST\inproc.dsp", with item "inproc.cpp" +Active configuration is Win32 (x86) Dynamic-Link Library (based on Win32 (x86) Dynamic-Link Library) + + +Creating temp file "E:\WINDOWS\TEMP\RSP80B2.TMP" with contents +Creating command line "cl.exe @E:\WINDOWS\TEMP\RSP80B2.TMP" +Compiling... +inproc.cpp + + + +inproc.obj - 0 error(s), 0 warning(s) diff --git a/test/INTERCPT.CPP b/test/INTERCPT.CPP new file mode 100644 index 0000000..6741ef9 --- /dev/null +++ b/test/INTERCPT.CPP @@ -0,0 +1,147 @@ +#include + +WORD Intercept::performIntercept(PureVector &pureImports,DWORD baseAddress) +{ + mBaseAddress=baseAddress; + loadImportDescriptors(pureImports); + moduleEntryPoints(); + resolveImportNames(pureImports); + mImportModuleNames.remove(); + size(0); + return TRUE; +} + +void Intercept::loadImportDescriptors(PureVector &pureImports) +{ + Block moduleNameStrings; + DWORD importCount(pureImports.size()); + loadImportModuleNames(); + for(long importIndex=0;importIndexe_magic!=IMAGE_DOS_SIGNATURE)return; + npImageNTHeader=(PIMAGE_NT_HEADERS)((char*)npImageDosHeader+npImageDosHeader->e_lfanew); + if(npImageNTHeader->Signature!=IMAGE_NT_SIGNATURE)return; + npImageImportDescriptor=(PIMAGE_IMPORT_DESCRIPTOR)((char*)baseAddress()+npImageNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + if((char*)npImageImportDescriptor==(char*)npImageNTHeader)return; + while(npImageImportDescriptor->Name) + { + moduleString=(char*)(baseAddress()+npImageImportDescriptor->Name); + moduleString=moduleString.betweenString(0,'.'); + moduleString.upper(); + mImportModuleNames.insert(&moduleString); + npImageImportDescriptor++; + } +} + +WORD Intercept::importEntryPoint(PureImport &pureImport) +{ + DWORD entryPoint; + + if(!pureImport.moduleName().isNull()) + { + if(0!=(entryPoint=(DWORD)::GetProcAddress(::GetModuleHandle(pureImport.moduleName()),pureImport.importName()))) + { + if(isWIN95Thunk((DWORD)entryPoint))pureImport.importAddress(*((DWORD*)(((char*)entryPoint)+1))); + else pureImport.importAddress(entryPoint); +// else pureImport.importAddress(*((DWORD*)entryPoint)); + return TRUE; + } + } + for(short moduleIndex=0;moduleIndex sortImport; + + npImageDosHeader=(PIMAGE_DOS_HEADER)baseAddress(); + if(::IsBadReadPtr((void*)baseAddress(),sizeof(PIMAGE_NT_HEADERS)))return; + if(npImageDosHeader->e_magic!=IMAGE_DOS_SIGNATURE)return; + npImageNTHeader=(PIMAGE_NT_HEADERS)((char*)npImageDosHeader+npImageDosHeader->e_lfanew); + if(npImageNTHeader->Signature!=IMAGE_NT_SIGNATURE)return; + npImageImportDescriptor=(PIMAGE_IMPORT_DESCRIPTOR)((char*)baseAddress()+npImageNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + if((char*)npImageImportDescriptor==(char*)npImageNTHeader)return; + while(npImageImportDescriptor->Name) + { + pThunk=(PIMAGE_THUNK_DATA)(baseAddress()+(DWORD)npImageImportDescriptor->FirstThunk); + while(pThunk->u1.Function){importCount++;pThunk++;} + npImageImportDescriptor++; + } + npImageImportDescriptor=(PIMAGE_IMPORT_DESCRIPTOR)((char*)baseAddress()+npImageNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + size(importCount); + while(npImageImportDescriptor->Name) + { + pThunk=(PIMAGE_THUNK_DATA)(baseAddress()+(DWORD)npImageImportDescriptor->FirstThunk); + moduleName=(char*)(baseAddress()+npImageImportDescriptor->Name); + while(pThunk->u1.Function) + { + if(isWIN95Thunk((DWORD)pThunk->u1.Function)) + { + operator[](importIndex).moduleName(moduleName); + operator[](importIndex).importAddress(*((DWORD*)((char*)(((DWORD)pThunk->u1.Function)+1)))); + operator[](importIndex).rewriteAddress((DWORD)&(*((DWORD*)((char*)(((DWORD)pThunk->u1.Function)+1))))); + operator[](importIndex).thunkType(PureImport::WIN95Thunk); + importIndex++; + } + else + { + operator[](importIndex).moduleName(moduleName); + operator[](importIndex).importAddress((DWORD)pThunk->u1.Function); + operator[](importIndex).rewriteAddress((DWORD)&(pThunk->u1.Function)); + operator[](importIndex).thunkType(PureImport::StandardThunk); + importIndex++; + } + pThunk++; + } + npImageImportDescriptor++; + } + sortImport.sortItems((PureVector&)*this); +} + +void Intercept::resolveImportNames(PureVector &pureImport) +{ + PureImport moduleImport; + DWORD importCount(pureImport.size()); + BinarySearch searchImport((PureVector&)*this); + + for(long importIndex=0;importIndex +#include +#include +#include +#include +#include + +class Intercept : public PureVector +{ +public: + Intercept(void); + ~Intercept(); + WORD performIntercept(PureVector &pureImports,DWORD baseAddress); +private: + void loadImportDescriptors(PureVector &pureImports); + void loadImportModuleNames(void); + void moduleEntryPoints(void); + void resolveImportNames(PureVector &pureImport); + WORD importEntryPoint(PureImport &pureImport); + DWORD baseAddress(void)const; + WORD isWIN95Thunk(DWORD baseAddress); + + DWORD mBaseAddress; + Block mImportModuleNames; +}; + +inline +Intercept::Intercept(void) +{ +} + +inline +Intercept::~Intercept() +{ +} + +inline +DWORD Intercept::baseAddress(void)const +{ + return mBaseAddress; +} + +inline +WORD Intercept::isWIN95Thunk(DWORD baseAddress) +{ + if(*((BYTE*)baseAddress)==0x68&&*(((BYTE*)baseAddress)+5)==0xE9)return TRUE; + return FALSE; +} +#endif + diff --git a/test/LAUNCH32.DSW b/test/LAUNCH32.DSW new file mode 100644 index 0000000..37c1843 Binary files /dev/null and b/test/LAUNCH32.DSW differ diff --git a/test/LAUNCH32.IDE b/test/LAUNCH32.IDE new file mode 100644 index 0000000..89e2f6e Binary files /dev/null and b/test/LAUNCH32.IDE differ diff --git a/test/MAIN.HPP b/test/MAIN.HPP new file mode 100644 index 0000000..c13f6f3 --- /dev/null +++ b/test/MAIN.HPP @@ -0,0 +1,66 @@ +#ifndef _TEST_MAIN_HPP_ +#define _TEST_MAIN_HPP_ +#include + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + + \ No newline at end of file diff --git a/test/MAINWND.HPP b/test/MAINWND.HPP new file mode 100644 index 0000000..5651703 --- /dev/null +++ b/test/MAINWND.HPP @@ -0,0 +1,53 @@ +#ifndef _TEST_MAINWINDOW_HPP_ +#define _TEST_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(void); + virtual ~MainWindow(); + static String className(void); +private: + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType activateAppHandler(CallbackData &someCallbackData); + CallbackData::ReturnType displayChangeHandler(CallbackData &someCallbackData); + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void handleFilePrint(void); + void handleFileOpen(void); + + Callback mActivateAppHandler; + Callback mDisplayChangeHandler; + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mTimerHandler; + Callback mCreateHandler; + static char szClassName[]; + static char szMenuName[]; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif diff --git a/test/MSTEST.DSW b/test/MSTEST.DSW new file mode 100644 index 0000000..35744b9 Binary files /dev/null and b/test/MSTEST.DSW differ diff --git a/test/MSTEST.IDE b/test/MSTEST.IDE new file mode 100644 index 0000000..2710e09 Binary files /dev/null and b/test/MSTEST.IDE differ diff --git a/test/Main.cpp b/test/Main.cpp new file mode 100644 index 0000000..9e6549d --- /dev/null +++ b/test/Main.cpp @@ -0,0 +1,11 @@ +#include + +int main(int argc,char **argv) +{ + for(int index=0;index +#include +#include + +char MainWindow::szClassName[]="Proto"; +char MainWindow::szMenuName[]="mainMenu"; + +MainWindow::MainWindow(void) +{ + mPaintHandler.setCallback(this,&MainWindow::paintHandler); + mDestroyHandler.setCallback(this,&MainWindow::destroyHandler); + mCommandHandler.setCallback(this,&MainWindow::commandHandler); + mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler); + mSizeHandler.setCallback(this,&MainWindow::sizeHandler); + mCreateHandler.setCallback(this,&MainWindow::createHandler); + mTimerHandler.setCallback(this,&MainWindow::timerHandler); + mActivateAppHandler.setCallback(this,&MainWindow::activateAppHandler); + mDisplayChangeHandler.setCallback(this,&MainWindow::displayChangeHandler); + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN|WS_SIZEBOX, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); +// insertHandler(VectorHandler::ActivateAppHandler,&mActivateAppHandler); +// insertHandler(VectorHandler::DisplayChangeHandler,&mDisplayChangeHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); +// removeHandler(VectorHandler::ActivateAppHandler,&mActivateAppHandler); +// removeHandler(VectorHandler::DisplayChangeHandler,&mDisplayChangeHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW; //|CS_OWNDC|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =processInstance(); + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::activateAppHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::displayChangeHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case MAINMENU_FILEPRINT : + handleFilePrint(); + break; + case MAINMENU_FILEOPEN : + handleFileOpen(); + break; + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +void MainWindow::handleFilePrint(void) +{ +} + + +void MainWindow::handleFileOpen(void) +{ + return; +} + diff --git a/test/PAGE.CPP b/test/PAGE.CPP new file mode 100644 index 0000000..cad8e94 --- /dev/null +++ b/test/PAGE.CPP @@ -0,0 +1,77 @@ +#include + +PurePage::PurePage(int rows,int cols) +{ + createPage(rows,cols); + setState(Created); +} + +PurePage::PurePage(const PurePage &somePurePage) +{ + *this=somePurePage; +} + +PurePage::~PurePage() +{ +} + +PurePage &PurePage::operator=(const PurePage &somePurePage) +{ + return *this; +} + +bool PurePage::operator==(const PurePage &somePurePage)const +{ + return false; +} + +bool PurePage::setAt(Page &page) +{ + return false; +} + +bool PurePage::getAt(int row,int col,Char &charData) +{ + return false; +} + +bool PurePage::getAt(int row,Row &rowData) +{ + return false; +} + +bool PurePage::setAt(int row,int col,Char &charData) +{ + return false; +} + +bool PurePage::setAt(int row,Row &rowData) +{ + return false; +} + +void PurePage::setState(State state) +{ + mState|=int(state); +} + +void PurePage::clearState(State state) +{ + mState|=int(~state); +} + +bool PurePage::queryState(State state)const +{ + return mState&state; +} + +void PurePage::createPage(int rows,int cols) +{ + mPage.reserve(rows); + for(int index=0;index +#endif +#ifndef __SGI_STL_VECTOR_H +#include +#endif + +typedef vector CharRow; +typedef vector AttributeRow; +typedef vector PageData; +typedef vector PageAttributes; +typedef SmartPointer CharRowPointer; +typedef SmartPointer AttributeRowPointer; +typedef SmartPointer PageDataPointer; +typedef SmartPointer PageAttributesPointer; + +class PurePage +{ +public: + enum{InitialRows=25,InitialCols=80}; + enum State{Created=0x0001,Updated=0x0002,Clear=0x0004,Published=0x0008}; + PurePage(unsigned rows=InitialRows,unsigned cols=InitialCols); + PurePage(const PurePage &somePurePage); + virtual ~PurePage(); + PurePage &operator=(const PurePage &somePurePage); + bool operator==(const PurePage &somePurePage)const; + unsigned getRows(void); + unsigned getCols(void); + + bool getAt(unsigned row,unsigned col,char &charData,Attribute &attribute); + bool getAt(unsigned row,CharRowPointer &charRowPointer,AttributeRowPointer &attributeRowPointer); + bool setAt(unsigned row,unsigned col,char &charData); + bool setAt(unsigned row,CharRowPointer &charRowPointer,AttributeRowPointer &attributeRowPointer); + + bool queryState(State state)const; + void setState(State state); + void clearState(State state); + void clearPage(void); +private: + void createPage(unsigned rows,unsigned cols); + bool copyPage(PurePage &purePage); + + unsigned mRows; + unsigned mCols; + int mState; + PageData mPageData; + PageAttributes mPageAttributes; +}; + +inline +PurePage::PurePage(unsigned rows,unsigned cols) +{ + createPage(rows,cols); + setState(Created); +} + +inline +PurePage::PurePage(const PurePage &somePurePage) +{ + *this=somePurePage; +} + +inline +PurePage::~PurePage() +{ +} + +inline +PurePage &PurePage::operator=(const PurePage &somePurePage) +{ + copyPage(somePurePage); + return *this; +} + +inline +bool PurePage::operator==(const PurePage &somePurePage)const +{ + return false; +} + +inline +unsigned PurePage::getRows(void) +{ + return mRows; +} + +inline +unsigned PurePage::getCols(void) +{ + return mCols; +} + +inline +bool PurePage::getAt(unsigned row,unsigned col,char &charData,Attribute &attribute) +{ + return false; +} + +inline +bool PurePage::getAt(unsigned row,CharRowPointer &charRowPointer,AttributeRowPointer &attributeRowPointer) +{ + return false; +} + +inline +bool PurePage::setAt(unsigned row,unsigned col,char &charData) +{ + return false; +} + +inline +bool PurePage::setAt(unsigned row,CharRowPointer &charRowPointer,AttributeRowPointer &attributeRowPointer) +{ + return false; +} + +inline +void PurePage::setState(State state) +{ + mState|=int(state); +} + +inline +void PurePage::clearState(State state) +{ + mState|=int(~state); +} + +inline +bool PurePage::queryState(State state)const +{ + return mState&state; +} + +inline +void PurePage::createPage(unsigned rows,unsigned cols) +{ + unsigned row; + unsigned col; + + mPageData.empty(); + mPageAttributes.empty(); + for(row=0;row + + + + + +

 

+ + + + + + + + + + + \ No newline at end of file diff --git a/test/PRINTER.HPP b/test/PRINTER.HPP new file mode 100644 index 0000000..49eab7f --- /dev/null +++ b/test/PRINTER.HPP @@ -0,0 +1,98 @@ +#ifndef _TEST_PRINTER_HPP_ +#define _TEST_PRINTER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Printer +{ +public: + Printer(void); + Printer(const Printer &somePrinter); + virtual ~Printer(); + Printer &operator=(const Printer &somePrinter); + BOOL operator==(const Printer &somePrinter); + const String &printerName(void)const; + void printerName(const String &printerName); + const String &driverName(void)const; + void driverName(const String &driverName); + const String &portName(void)const; + void portName(const String &portName); +private: + String mPrinterName; + String mDriverName; + String mPortName; +}; + +inline +Printer::Printer(void) +{ +} + +inline +Printer::Printer(const Printer &somePrinter) +{ + *this=somePrinter; +} + +inline +Printer::~Printer() +{ +} + +inline +Printer &Printer::operator=(const Printer &somePrinter) +{ + printerName(somePrinter.printerName()); + driverName(somePrinter.driverName()); + portName(somePrinter.portName()); + return *this; +} + +inline +BOOL Printer::operator==(const Printer &somePrinter) +{ + return (printerName()==somePrinter.printerName()&& + driverName()==somePrinter.driverName()&& + portName()==somePrinter.portName()); +} + +inline +const String &Printer::printerName(void)const +{ + return mPrinterName; +} + +inline +void Printer::printerName(const String &printerName) +{ + mPrinterName=printerName; +} + +inline +const String &Printer::driverName(void)const +{ + return mDriverName; +} + +inline +void Printer::driverName(const String &driverName) +{ + mDriverName=driverName; +} + +inline +const String &Printer::portName(void)const +{ + return mPortName; +} + +inline +void Printer::portName(const String &portName) +{ + mPortName=portName; +} +#endif \ No newline at end of file diff --git a/test/PROJECT1.SLN b/test/PROJECT1.SLN new file mode 100644 index 0000000..941cdda --- /dev/null +++ b/test/PROJECT1.SLN @@ -0,0 +1,13 @@ +Microsoft Visual Studio Solution File, Format Version 1.00 +Project("{66355F20-A65B-11D0-BFB5-00A0C91EBFA0}") = "Project1", "Project1.vjp", "{A191E3D0-2E95-11D3-810B-961FD4A96668}" +EndProject +Global + GlobalSection(LocalDeployment) = postSolution + StartupProject = {A191E3D0-2E95-11D3-810B-961FD4A96668} + EndGlobalSection + GlobalSection(BuildOrder) = postSolution + 0 = {A191E3D0-2E95-11D3-810B-961FD4A96668} + EndGlobalSection + GlobalSection(DeploymentRoot) = postSolution + EndGlobalSection +EndGlobal diff --git a/test/PROJECT1.SUO b/test/PROJECT1.SUO new file mode 100644 index 0000000..9be4976 Binary files /dev/null and b/test/PROJECT1.SUO differ diff --git a/test/PROJECT1.VJP b/test/PROJECT1.VJP new file mode 100644 index 0000000..e964393 Binary files /dev/null and b/test/PROJECT1.VJP differ diff --git a/test/Printman.cpp b/test/Printman.cpp new file mode 100644 index 0000000..40c6683 --- /dev/null +++ b/test/Printman.cpp @@ -0,0 +1,147 @@ +#include +#include +#include +#include + +Block PrintManager::smVInfoBlock; + +BOOL PrintManager::getPrinters(void) +{ + String strPrinterKey("System\\CurrentControlSet\\Control\\Print\\Printers"); + String strDefaultPrinter; + RegKey cfgKey(RegKey::CurrentConfig); + Printer printer; + String strPrinter; + int enumKey(0); + + mPrinters.remove(); + if(!cfgKey.openKey(strPrinterKey))return FALSE; + cfgKey.queryValue("Default",strDefaultPrinter); + if(getPrinter(strPrinterKey+String("\\")+strDefaultPrinter,printer))mDefaultPrinter=printer; + while(TRUE) + { + if(!cfgKey.enumKey(enumKey++,strPrinter))break; + if(getPrinter(strPrinterKey+String("\\")+strPrinter,printer))mPrinters.insert(&printer); + } + cfgKey.closeKey(); + return TRUE; +} + +BOOL PrintManager::getPrinter(String &strPrinterKey,Printer &printer) +{ + RegKey mchKey(RegKey::LocalMachine); + String strPrinterNameKey("Name"); + String strPrinterDriverKey("Printer Driver"); + String strPrinterPortKey("Port"); + String strQuery; + + if(!mchKey.openKey(strPrinterKey))return FALSE; + mchKey.queryValue(strPrinterNameKey,strQuery); + printer.printerName(strQuery); + mchKey.queryValue(strPrinterDriverKey,strQuery); + printer.driverName(strQuery); + mchKey.queryValue(strPrinterPortKey,strQuery); + printer.portName(strQuery); + mchKey.closeKey(); + return TRUE; +} + +BOOL PrintManager::openPrinter(const String &strPrinterName,GUIWindow &parentWindow,const String &strPrintDocName) +{ + mParentWindow=&parentWindow; + return openPrinter(strPrinterName,strPrintDocName); +} + +BOOL PrintManager::openPrinter(const String &strPrinterName,const String &strPrintDocName) +{ + Printer printer; + int index; + + closePrinter(); + if(strPrinterName==mDefaultPrinter.printerName())printer=mDefaultPrinter; + else for(index=0;index &strLines,Font &pageFont,Point xyPoint) +{ + SIZE sizeData; + + if(!isInDoc()||!mPrinterDevice.isOkay())return FALSE; + if(isInPage())endPage(); + startPage(); + mPrinterDevice.select((GDIObj)pageFont,TRUE); + for(int index=0;indexdestroy();mAbortDlg.destroy();} + mAbortDlg=::new AbortDlg; + mAbortDlg.disposition(PointerDisposition::Delete); + mAbortDlg->perform(*mParentWindow); + return TRUE; +} + +BOOL CALLBACK PrintManager::abortProc(HDC hDC,int nCode) +{ + SmartPointer printManager; + MSG msg; + + if(smVInfoBlock.size())for(int index=0;indexmAbortDlg.isOkay()&&!printManager->mAbortDlg->isDestroyed()) + { + printManager->mAbortDlg->yieldTask(); + if(printManager->mAbortDlg->isCancelled())return FALSE; + } + while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + } + return TRUE; +} + + diff --git a/test/Printman.hpp b/test/Printman.hpp new file mode 100644 index 0000000..41cbf86 --- /dev/null +++ b/test/Printman.hpp @@ -0,0 +1,216 @@ +#ifndef _TEST_PRINTMANAGER_HPP_ +#define _TEST_PRINMANAGER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _COMMON_PUREDEVICE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _BONEYARD_PRINTER_HPP_ +#include +#endif +#ifndef _TEST_VINFO_HPP_ +#include +#endif +#ifndef _TEST_ABORTDLG_HPP_ +#include +#endif + +class GUIWindow; + +class PrintManager +{ +public: + PrintManager(void); + virtual ~PrintManager(); + const String &strDefaultPrinter(void)const; + BOOL openPrinter(const String &strPrinterName,GUIWindow &parentWindow,const String &strPrintDocName=String()); + BOOL openPrinter(const String &strPrinterName,const String &strPrintDocName=String()); + void closePrinter(void); + PureDevice &printerDevice(void); + BOOL startPage(void); + BOOL endPage(void); + BOOL endDoc(void); + BOOL abortDoc(void); + BOOL printLines(Block &strLines,Font &pageFont,Point xyPoint); + WORD getCount(void)const; + const Printer &getDefaultPrinter(void)const; + BOOL getFirstPrinter(Printer &printer); + BOOL getNextPrinter(Printer &printer); +private: + BOOL getPrinters(void); + BOOL getPrinter(String &strPrinterKey,Printer &printer); + PrintManager(const PrintManager &somePrintmanager); + PrintManager &operator=(const PrintManager &somePrintManager); + BOOL operator==(const PrintManager &somePrintManager); + BOOL isInPage(void)const; + void isInPage(BOOL isInPage); + BOOL isInDoc(void)const; + void isInDoc(BOOL isInDoc); + BOOL startDoc(const String &strPrintDocName); + BOOL createAbortDlg(void); + static BOOL CALLBACK abortProc(HDC hDC,int nCode); + + static Block smVInfoBlock; + SmartPointer mParentWindow; + SmartPointer mAbortDlg; + Block mPrinters; + Printer mDefaultPrinter; + PureDevice mPrinterDevice; + WORD mIndexPrinter; + BOOL mIsInDoc; + BOOL mIsInPage; +}; + +inline +PrintManager::PrintManager(void) +: mIndexPrinter(0), mIsInDoc(FALSE), mIsInPage(FALSE) +{ + getPrinters(); +} + +inline +PrintManager::PrintManager(const PrintManager &somePrintManager) +{ // private implementation + *this=somePrintManager; +} + +inline +PrintManager::~PrintManager() +{ + closePrinter(); +} + +inline +PrintManager &PrintManager::operator=(const PrintManager &/*somePrintManager*/) +{ // private implementation + return *this; +} + +inline +BOOL PrintManager::operator==(const PrintManager &somePrintManager) +{ // private implementation + return FALSE; +} + +inline +WORD PrintManager::getCount(void)const +{ + return mPrinters.size(); +} + +inline +const Printer &PrintManager::getDefaultPrinter(void)const +{ + return mDefaultPrinter; +} + +inline +BOOL PrintManager::getFirstPrinter(Printer &printer) +{ + if(!mPrinters.size())return FALSE; + printer=mPrinters[(mIndexPrinter=0)]; + return TRUE; +} + +inline +BOOL PrintManager::getNextPrinter(Printer &printer) +{ + if(++mIndexPrinter>=mPrinters.size())return FALSE; + printer=mPrinters[mIndexPrinter]; + return TRUE; +} + +inline +void PrintManager::closePrinter(void) +{ + if(isInPage())endPage(); + if(isInDoc())endDoc(); + mPrinterDevice.destroyDevice(); +} + +inline +BOOL PrintManager::startPage(void) +{ + if(!isInDoc()||!mPrinterDevice.isOkay())return FALSE; + if(isInPage())endPage(); + ::StartPage(mPrinterDevice); + isInPage(TRUE); + return TRUE; +} + +inline +BOOL PrintManager::endPage(void) +{ + BOOL returnCode(FALSE); + + if(!isInPage()||!isInDoc()||!mPrinterDevice.isOkay())return returnCode; + returnCode=::EndPage(mPrinterDevice)?TRUE:FALSE; + isInPage(FALSE); + return returnCode; +} + +inline +BOOL PrintManager::endDoc(void) +{ + BOOL returnCode(FALSE); + + if(!isInDoc()||!mPrinterDevice.isOkay())return returnCode; + if(isInPage())endPage(); + if(mAbortDlg.isOkay()){mAbortDlg->destroy();mAbortDlg.destroy();} + returnCode=::EndDoc(mPrinterDevice)?TRUE:FALSE; + isInDoc(FALSE); + return returnCode; +} + +inline +BOOL PrintManager::abortDoc(void) +{ + BOOL returnCode(FALSE); + + if(!isInDoc()||!mPrinterDevice.isOkay())return returnCode; + returnCode=::AbortDoc(mPrinterDevice)?TRUE:FALSE; + isInPage(FALSE); + return returnCode; +} + +inline +PureDevice &PrintManager::printerDevice(void) +{ + assert(FALSE!=mPrinterDevice.isOkay()); + return mPrinterDevice; +} + +inline +BOOL PrintManager::isInDoc(void)const +{ + return mIsInDoc; +} + +inline +void PrintManager::isInDoc(BOOL isInDoc) +{ + mIsInDoc=isInDoc; +} + +inline +BOOL PrintManager::isInPage(void)const +{ + return mIsInPage; +} + +inline +void PrintManager::isInPage(BOOL isInPage) +{ + mIsInPage=isInPage; +} +#endif \ No newline at end of file diff --git a/test/Proto.class b/test/Proto.class new file mode 100644 index 0000000..f91bfe8 Binary files /dev/null and b/test/Proto.class differ diff --git a/test/Proto.java b/test/Proto.java new file mode 100644 index 0000000..756e675 --- /dev/null +++ b/test/Proto.java @@ -0,0 +1,109 @@ +import java.awt.*; +import java.awt.event.*; +import java.applet.Applet.*; +import java.net.*; +import java.io.*; +import com.ms.security.*; + +public class Proto extends java.applet.Applet +{ + private SocketControl mSocketControl; +// private SocketPermission mSocketPermission; +// ConnectionManager mConnectionManager; + String mStrAddress=null; + SocketControl socketControl=null; + private Label mLabelMessage; + private Button mButtonEvaluate; + + public void init() + { + mStrAddress=new String("209.139.139.200"); + performLayout(); + try{if(Class.forName("com.ms.security.PolicyEngine") != null) + { + mLabelMessage.setText("asserting permissions"); + PolicyEngine.assertPermission(PermissionID.NETIO);} + } + catch(Throwable cnfe){mLabelMessage.setText("policy assertion failed");return;} + +// SecurityManager securityManager=System.getSecurityManager(); +// try{securityManager.checkConnect(mStrAddress,1024);} +// catch(SecurityException securityException){mLabelMessage.setText("checkConnect failed");return;} + + try{mSocketControl=new SocketControl(mStrAddress,1024);} + catch(SecurityExceptionEx exception) + { + exception.printStackTrace(); + mLabelMessage.setText("SecurityExceptionEx"); + return; + }; + catch(IOException ioException){mLabelMessage.setText("java.io.IOException");return;} + try{mSocketControl.closeSocket();} + catch(IOException ioException){mLabelMessage.setText("java.io.IOException");return;} + mLabelMessage.setText("Success!"); + + + +// try{if(Class.forName("com.ms.security.PolicyEngine") != null)PolicyEngine.assertPermission(PermissionID.NETIO);} +// catch(Throwable cnfe){;} +// mSocketPermission=new SocketPermission("192.168.1.2","connect"); +// performLayout(); +// mLabelMessage.setText("attempting connection..."); + +// try{SocketControl socketControl=new SocketControl("209.139.139.200",1024);} +// catch(IOException ioException){mLabelMessage.setText("java.io.IOException");} + +// try{socketControl.closeSocket();} +// catch(IOException ioException){mLabelMessage.setText("IOException closing socket");} + +// public SocketControl(String strHost,int port)throws IOException + +// try{mSocketControl=new SocketControl("209.139.139.200",1024);} +// catch(IOException ioException){mLabelMessage.setText("java.io.IOException");} +// catch(SecurityException exception){mLabelMessage.setText("security exception");} +// try{mSocketControl.closeSocket();} +// catch(IOException ioException){;} + + + + +/* + if(!mSocketControl.isConnected())mLabelMessage.setText("Connection failed."); + else + { + mLabelMessage.setText("Connected..."); + String strLine=new String(); + strLine=mSocketControl.readLine(); + if(null==strLine)mLabelMessage.setText("nothing received."); + else mLabelMessage.setText(strLine); + try{mSocketControl.closeSocket();} + catch(IOException ioException){mLabelMessage.setText("java.io.Exception");} + } +*/ + } + public void update(Graphics graphics) + { + } + public void paint(Graphics graphics) + { + } + public void performLayout() + { + GridBagLayout layout=new GridBagLayout(); + GridBagConstraints constraints=new GridBagConstraints(); + setFont(new Font("Arial",Font.PLAIN,12)); + setLayout(layout); + constraints.gridwidth=1; + constraints.fill=GridBagConstraints.BOTH; + constraints.weightx=0.25; + mButtonEvaluate=new Button("Evaluate"); + constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mButtonEvaluate,constraints); + add(mButtonEvaluate); + + mLabelMessage=new Label("Ready.",Label.LEFT); + constraints.gridwidth=GridBagConstraints.REMAINDER; + layout.setConstraints(mLabelMessage,constraints); + add(mLabelMessage); + } +}; \ No newline at end of file diff --git a/test/Proto.sln b/test/Proto.sln new file mode 100644 index 0000000..95d5db1 --- /dev/null +++ b/test/Proto.sln @@ -0,0 +1,13 @@ +Microsoft Visual Studio Solution File, Format Version 1.00 +Project("{66355F20-A65B-11D0-BFB5-00A0C91EBFA0}") = "Proto", "Proto.vjp", "{0781BB40-CEC8-11D3-B501-005004E82B58}" +EndProject +Global + GlobalSection(LocalDeployment) = postSolution + StartupProject = {0781BB40-CEC8-11D3-B501-005004E82B58} + EndGlobalSection + GlobalSection(BuildOrder) = postSolution + 0 = {0781BB40-CEC8-11D3-B501-005004E82B58} + EndGlobalSection + GlobalSection(DeploymentRoot) = postSolution + EndGlobalSection +EndGlobal diff --git a/test/Proto.suo b/test/Proto.suo new file mode 100644 index 0000000..325d7e5 Binary files /dev/null and b/test/Proto.suo differ diff --git a/test/Proto.vjp b/test/Proto.vjp new file mode 100644 index 0000000..23d227b Binary files /dev/null and b/test/Proto.vjp differ diff --git a/test/REGS.RC b/test/REGS.RC new file mode 100644 index 0000000..59dbf38 --- /dev/null +++ b/test/REGS.RC @@ -0,0 +1,83 @@ + +#define DEBUG_FLAGS_DIRECTION 121 +#define DEBUG_FLAGS_INTERRUPT 122 +#define DEBUG_CONTINUE 123 +#define DEBUG_DEBUGSTRING 124 +#define DEBUG_CS 125 +#define DEBUG_SS 126 +#define DEBUG_CODE 114 +#define DEBUG_FLAGS_A 120 +#define DEBUG_FLAGS_PARITY 119 +#define DEBUG_FLAGS_OVERFLOW 118 +#define DEBUG_FLAGS_SIGN 117 +#define DEBUG_FLAGS_ZERO 116 +#define DEBUG_FLAGS_CARRY 115 +#define DEBUG_GS 112 +#define DEBUG_FS 111 +#define DEBUG_ES 110 +#define DEBUG_DS 109 +#define DEBUG_EIP 113 +#define DEBUG_EBP 108 +#define DEBUG_ESP 107 +#define DEBUG_EDI 106 +#define DEBUG_EDX 104 +#define DEBUG_ECX 103 +#define DEBUG_EBX 102 +#define DEBUG_ESI 105 +#define DEBUG_EAX 101 + +DEBUG DIALOG 6, 15, 336, 145 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "DEBUG" +FONT 6, "Helv" +{ + LTEXT "EAX:", -1, 2, 9, 19, 8 + EDITTEXT DEBUG_EAX, 22, 7, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + LTEXT "EBX:", -1, 72, 9, 17, 8 + LTEXT "ECX:", -1, 143, 9, 16, 8 + LTEXT "EDX:", -1, 213, 9, 16, 8 + LTEXT "ESI:", -1, 2, 23, 19, 8 + EDITTEXT DEBUG_EBX, 92, 7, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_ECX, 162, 7, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_EDX, 231, 7, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_ESI, 22, 21, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_EDI, 92, 21, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + LTEXT "EDI:", -1, 72, 23, 14, 8 + EDITTEXT DEBUG_ESP, 162, 21, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_EBP, 231, 20, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + LTEXT "ESP:", -1, 143, 23, 16, 8 + LTEXT "EBP:", -1, 213, 23, 17, 8 + LTEXT "DS:", -1, 282, 10, 13, 8 + LTEXT "ES:", -1, 282, 22, 12, 8 + LTEXT "FS:", -1, 282, 35, 13, 8 + LTEXT "GS:", -1, 282, 48, 13, 8 + EDITTEXT DEBUG_DS, 295, 7, 26, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_ES, 295, 20, 26, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FS, 295, 33, 26, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_GS, 295, 46, 26, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_EIP, 231, 33, 48, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + LTEXT "EIP:", -1, 213, 35, 13, 8 + LTEXT "CF:", -1, 232, 52, 12, 8 + LTEXT "ZF:", -1, 232, 65, 12, 8 + LTEXT "SF:", -1, 232, 78, 12, 8 + LTEXT "OV:", -1, 232, 92, 12, 8 + LTEXT "PF:", -1, 257, 52, 12, 8 + LTEXT "AF:", -1, 257, 65, 12, 8 + LTEXT "IF:", -1, 257, 92, 12, 8 + LTEXT "DF:", -1, 257, 78, 12, 8 + LISTBOX DEBUG_CODE, 3, 49, 225, 72, LBS_NOTIFY | WS_BORDER | LBS_NOINTEGRALHEIGHT | WS_BORDER | WS_HSCROLL + EDITTEXT DEBUG_FLAGS_CARRY, 244, 51, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FLAGS_ZERO, 244, 64, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FLAGS_SIGN, 244, 77, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FLAGS_OVERFLOW, 244, 90, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FLAGS_PARITY, 269, 51, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FLAGS_A, 269, 64, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FLAGS_DIRECTION, 269, 77, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_FLAGS_INTERRUPT, 269, 90, 10, 12, WS_BORDER | WS_TABSTOP + EDITTEXT DEBUG_DEBUGSTRING, 4, 128, 326, 13, WS_BORDER | WS_TABSTOP + PUSHBUTTON "Continue", DEBUG_CONTINUE, 283, 88, 50, 14, WS_DISABLED | WS_TABSTOP + EDITTEXT DEBUG_CS, 295, 59, 26, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + LTEXT "CS:", -1, 282, 62, 13, 8 + EDITTEXT DEBUG_SS, 295, 72, 26, 12, ES_MULTILINE | WS_BORDER | WS_TABSTOP + LTEXT "SS:", -1, 282, 74, 13, 8 +} diff --git a/test/REGS.RWS b/test/REGS.RWS new file mode 100644 index 0000000..972f3c3 Binary files /dev/null and b/test/REGS.RWS differ diff --git a/test/RISKS.BMP b/test/RISKS.BMP new file mode 100644 index 0000000..bacf574 Binary files /dev/null and b/test/RISKS.BMP differ diff --git a/test/RISKS.~BM b/test/RISKS.~BM new file mode 100644 index 0000000..fa6b6a1 Binary files /dev/null and b/test/RISKS.~BM differ diff --git a/test/ReadMe.txt b/test/ReadMe.txt new file mode 100644 index 0000000..01d8636 --- /dev/null +++ b/test/ReadMe.txt @@ -0,0 +1,102 @@ +======================================================================== + MICROSOFT FOUNDATION CLASS LIBRARY : test +======================================================================== + + +AppWizard has created this test application for you. This application +not only demonstrates the basics of using the Microsoft Foundation classes +but is also a starting point for writing your application. + +This file contains a summary of what you will find in each of the files that +make up your test application. + +test.h + This is the main header file for the application. It includes other + project specific headers (including Resource.h) and declares the + CTestApp application class. + +test.cpp + This is the main application source file that contains the application + class CTestApp. + +test.rc + This is a listing of all of the Microsoft Windows resources that the + program uses. It includes the icons, bitmaps, and cursors that are stored + in the RES subdirectory. This file can be directly edited in Microsoft + Developer Studio. + +res\test.ico + This is an icon file, which is used as the application's icon. This + icon is included by the main resource file test.rc. + +res\test.rc2 + This file contains resources that are not edited by Microsoft + Developer Studio. You should place all resources not + editable by the resource editor in this file. + +test.clw + This file contains information used by ClassWizard to edit existing + classes or add new classes. ClassWizard also uses this file to store + information needed to create and edit message maps and dialog data + maps and to create prototype member functions. + +///////////////////////////////////////////////////////////////////////////// + +For the main frame window: + +MainFrm.h, MainFrm.cpp + These files contain the frame class CMainFrame, which is derived from + CMDIFrameWnd and controls all MDI frame features. + +res\Toolbar.bmp + This bitmap file is used to create tiled images for the toolbar. + The initial toolbar and status bar are constructed in the + CMainFrame class. Edit this toolbar bitmap along with the + array in MainFrm.cpp to add more toolbar buttons. + +///////////////////////////////////////////////////////////////////////////// + +AppWizard creates one document type and one view: + +testDoc.h, testDoc.cpp - the document + These files contain your CTestDoc class. Edit these files to + add your special document data and to implement file saving and loading + (via CTestDoc::Serialize). + +testView.h, testView.cpp - the view of the document + These files contain your CTestView class. + CTestView objects are used to view CTestDoc objects. + +res\testDoc.ico + This is an icon file, which is used as the icon for MDI child windows + for the CTestDoc class. This icon is included by the main + resource file test.rc. + + +///////////////////////////////////////////////////////////////////////////// +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named test.pch and a precompiled types file named StdAfx.obj. + +Resource.h + This is the standard header file, which defines new resource IDs. + Microsoft Developer Studio reads and updates this file. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" to indicate parts of the source code you +should add to or customize. + +If your application uses MFC in a shared DLL, and your application is +in a language other than the operating system's current language, you +will need to copy the corresponding localized resources MFC40XXX.DLL +from the Microsoft Visual C++ CD-ROM onto the system or system32 directory, +and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation. +For example, MFC40DEU.DLL contains resources translated to German.) If you +don't do this, some of the UI elements of your application will remain in the +language of the operating system. + +///////////////////////////////////////////////////////////////////////////// diff --git a/test/Resource.h b/test/Resource.h new file mode 100644 index 0000000..f5e24ce --- /dev/null +++ b/test/Resource.h @@ -0,0 +1,19 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by TEST.RC +// +#define IDR_MAINFRAME 128 +#define IDR_TESTTYPE 129 +#define IDD_ABOUTBOX 100 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_3D_CONTROLS 1 +#define _APS_NEXT_RESOURCE_VALUE 130 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 32771 +#endif +#endif diff --git a/test/SCRAPS.TXT b/test/SCRAPS.TXT new file mode 100644 index 0000000..ebc1623 --- /dev/null +++ b/test/SCRAPS.TXT @@ -0,0 +1,265 @@ + HostEnt hostEntry; + WSASystem wsaSystem; + Socket socket; + String strHost("li.net"); + + winConsole.writeLine("Initializing sockets..."); + if(!wsaSystem.isInitialized()){winConsole.writeLine("Cannot initialize sockets.");winConsole.read();return FALSE;} + winConsole.writeLine("Socket initialization complete."); + if(!wsaSystem.description().isNull())winConsole.writeLine(String("<")+wsaSystem.description()+String(">")); + winConsole.writeLine("Opening socket..."); + socket.openSocket(); + if(!socket.isOkay()){winConsole.writeLine("Cannot open socket.");winConsole.read();return FALSE;} + winConsole.writeLine("Open complete."); + winConsole.writeLine(String("Trying ")+strHost+String(" ....")); + InternetAddress internetAddress(strHost); + if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){winConsole.writeLine(String("no DNS entry for ")+strHost);winConsole.read();return FALSE;}} + else if(!hostEntry.hostByName(strHost)){winConsole.writeLine(String("no DNS entry for ")+strHost);winConsole.read();return FALSE;} + winConsole.writeLine(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); + socket.closeSocket(); + winConsole.writeLine("Internet is available on this machine. :) Later Peach."); +// else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;} +// message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")")); +// INETSocketAddress::internetAddress((hostEntry.addresses())[0]); +// if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return FALSE;} +// if(!mFTPControl.openSocket()){message("unable to create socket.");return FALSE;} +// INETSocketAddress::family(PF_INET); +// INETSocketAddress::port(serverEntry.port()); +// if(!mFTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to ftp daemon");return FALSE;} +// if(!receive(mAckConnectionResponseStrings))return FALSE; +// mFTPControl.getSocketName((INETSocketAddress&)*this); +// return mFTPControl.isConnected(); + + + + +// InternetAddress internetAddress(void)const; +// void internetAddress(const InternetAddress &someInternetAddress); + + + + winConsole.read(); + + +#include +#include +#include +#include +#include +#include +#include + + + + + + + + + int index; + BYTE currByte; + BYTE lastByte; + BYTE repCount; + bool reset; + + index=0; + reset=true; + mInputCount=0; + mOutputCount=0; + while(index +#include +#include + +class RLECompress +{ +public: + RLECompress(void); + virtual ~RLECompress(); + bool compress(GlobalData &inData,GlobalData &outData); + bool decompress(GlobalData &inData,GlobalData &outData); + float getCompressionRatio(void)const; + unsigned getOutputCount(void)const; + unsigned getInputCount(void)const; +private: + enum{MaxRep=128}; + unsigned compress(unsigned char *pInData,unsigned char *pOutData,unsigned inLength,bool emit); + void output(unsigned char repCount,unsigned char charData,unsigned char *pOutData,unsigned &outIndex,bool emit); + + unsigned mOutputCount; + unsigned mInputCount; +}; + +inline +RLECompress::RLECompress(void) +{ +} + +inline +RLECompress::~RLECompress() +{ +} + +inline +bool RLECompress::compress(GlobalData &inData,GlobalData &outData) +{ + unsigned requiredLength; + unsigned char charData; + + requiredLength=compress(&inData[0],&charData,inData.size(),false); + outData.size(requiredLength+4); + *((unsigned*)&outData[0])=mInputCount; + compress(&inData[0],&outData[4],inData.size(),true); + return true; +} + +inline +unsigned RLECompress::compress(unsigned char *pInData,unsigned char *pOutData,unsigned inLength,bool emit) +{ + unsigned char currByte; + unsigned char lastByte; + unsigned char repCount; + unsigned srcIndex; + unsigned dstIndex; + bool reset; + + srcIndex=0; + dstIndex=0; + reset=true; + mInputCount=0; + mOutputCount=0; + while(srcIndex &inData,GlobalData &outData) +{ + return true; +} + +inline +unsigned RLECompress::getOutputCount(void)const +{ + return mOutputCount; +} + +inline +unsigned RLECompress::getInputCount(void)const +{ + return mInputCount; +} + +//int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +int main(int argc,char **argv) +{ + FileHandle openFile; + GlobalData inData; + GlobalData outData; + RLECompress rleCompress; + String strMessage; + String strPathFileName; + Console winConsole; + + + winConsole.getConsoleScreenBufferInfo(); + if(1==argc)return 0; + +// if(!lpszCmdLine)return 0; +// strPathFileName=lpszCmdLine; + strPathFileName=argv[1]; + if(!openFile.open(strPathFileName)) + { + winConsole.writeLine(String("can't open '")+strPathFileName+String("'")); + winConsole.read(); + return 0; + } + inData.size(openFile.size()); + openFile.read(&inData[0],inData.size()); + rleCompress.compress(inData,outData); + ::sprintf(strMessage,"compression ratio:%lf",rleCompress.getCompressionRatio()); + winConsole.writeLine(strMessage); + ::sprintf(strMessage,"input length:%d",rleCompress.getInputCount()); + winConsole.writeLine(strMessage); + ::sprintf(strMessage,"output length:%d",rleCompress.getOutputCount()); + winConsole.writeLine(strMessage); + winConsole.read(); + return 0; +} + diff --git a/test/SPLASH.CPP b/test/SPLASH.CPP new file mode 100644 index 0000000..11c436a --- /dev/null +++ b/test/SPLASH.CPP @@ -0,0 +1,147 @@ +#include +#include +#include +#include + +char SplashScreen::szClassName[]="SplashScreen"; + +SplashScreen::SplashScreen(const String &strBitmap,const String &strCaption,BOOL useTimer) +: mBitmapName(strBitmap), mStrCaption(strCaption), mUseTimer(useTimer), + mTextFont("Times New Roman",12,Font::PitchVariable|Font::FamilySwiss,Font::WeightBold) +{ + mResBitmap=new ResBitmap(mBitmapName); + mResBitmap.disposition(PointerDisposition::Delete); + mCreateHandler.setCallback(this,&SplashScreen::createHandler); + mPaintHandler.setCallback(this,&SplashScreen::paintHandler); + mDestroyHandler.setCallback(this,&SplashScreen::destroyHandler); + mPaletteChangedHandler.setCallback(this,&SplashScreen::paletteChangedHandler); + mSetFocusHandler.setCallback(this,&SplashScreen::setFocusHandler); + mTimerHandler.setCallback(this,&SplashScreen::timerHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); + registerClass(); +} + +SplashScreen::SplashScreen(const SplashScreen &someSplashScreen) +{ // private implementation +} + +SplashScreen::~SplashScreen() +{ + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaletteChangedHandler,&mPaletteChangedHandler); + removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +void SplashScreen::registerClass(void) +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(SplashScreen*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH); + wndClass.lpszMenuName =0; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,szClassName,(WNDCLASS FAR*)&wndClass)); +} + +SplashScreen &SplashScreen::operator=(const SplashScreen &someSplashScreen) +{ // private implementation + return *this; +} + +BOOL SplashScreen::perform(Rect initRect) +{ + UINT style(0); + if(CW_USEDEFAULT==initRect.right())initRect.right(mResBitmap->width()); + if(CW_USEDEFAULT==initRect.bottom())initRect.bottom(mResBitmap->height()); + if(useTimer()) + { + PureDevice pureDevice; + pureDevice.screenDevice(); + initRect.left((pureDevice.horizontalResolution()-mResBitmap->width())/2); + initRect.top((pureDevice.verticalResolution()-mResBitmap->height())/2); + style=WS_POPUP|WS_CLIPSIBLINGS|0x04|WS_DLGFRAME; + } + else style=WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS; + createWindow(WS_EX_CONTROLPARENT,szClassName,useTimer()?(char*)0:(char*)mStrCaption,style,initRect,NULL,NULL,processInstance(),(LPSTR)this); // WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|0x04|WS_CLIPSIBLINGS + show(SW_SHOW); + update(); + return messageLoop(); +} + +CallbackData::ReturnType SplashScreen::destroyHandler(CallbackData &someCallbackData) +{ + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,FALSE); + postQuitMessage(onDestroy()); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::createHandler(CallbackData &someCallbackData) +{ + mPureDevice=new PureDevice(*this); + mPureDevice.disposition(PointerDisposition::Delete); + mDIBitmap=new DIBitmap(*mPureDevice,mResBitmap->width(),mResBitmap->height(),*mResBitmap); + mDIBitmap.disposition(PointerDisposition::Delete); + if(useTimer())setTimer(TimerID,TimeOut); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::timerHandler(CallbackData &someCallbackData) +{ + killTimer(TimerID); + postMessage(*this,WM_CLOSE,0,0L); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paletteChangedHandler(CallbackData &someCallbackData) +{ + if(!mDIBitmap.isOkay()||((HWND)*this==(HWND)someCallbackData.wParam()))return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + update(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::setFocusHandler(CallbackData &/*someCallbackData*/) +{ + if(!mDIBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PureDevice pureDevice(*this); + ((PurePalette&)*mDIBitmap).usePalette(pureDevice,TRUE); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SplashScreen::paintHandler(CallbackData &someCallbackData) +{ + if(!mResBitmap.isOkay())return (CallbackData::ReturnType)FALSE; + PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); + PureDevice &pureDevice=(PureDevice&)*pPaintInfo; + mDIBitmap->copyBits(mResBitmap->ptrData(),mResBitmap->imageExtent()); + mDIBitmap->stretchBlt(pureDevice,Rect(0,0,width(),height())); + return (CallbackData::ReturnType)FALSE; +} + + +// virtuals +int SplashScreen::onDestroy(void) +{ + return 0; +} + + diff --git a/test/SPLASH.HPP b/test/SPLASH.HPP new file mode 100644 index 0000000..0b406da --- /dev/null +++ b/test/SPLASH.HPP @@ -0,0 +1,67 @@ +#ifndef _RISK_SPLASHSCREEN_HPP_ +#define _RISK_SPLASHSCREEN_HPP_ +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif +#ifndef _COMMON_FONT_HPP_ +#include +#endif + +class ResBitmap; +class DIBitmap; + +class SplashScreen : public Window +{ +public: + SplashScreen(const String &strBitmap,const String &strCaption,BOOL useTimer); + virtual ~SplashScreen(); + BOOL perform(Rect initRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT)); +protected: + virtual int onDestroy(void); +private: + enum {TimerID=0,TimeOut=5000}; + SplashScreen(const SplashScreen &someSplashScreen); + SplashScreen &operator=(const SplashScreen &someSplashScreen); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType paletteChangedHandler(CallbackData &someCallbackData); + CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + void registerClass(void); + BOOL useTimer(void)const; + + Callback mPaintHandler; + Callback mCreateHandler; + Callback mDestroyHandler; + Callback mPaletteChangedHandler; + Callback mSetFocusHandler; + Callback mTimerHandler; + + SmartPointer mResBitmap; + SmartPointer mDIBitmap; + SmartPointer mPureDevice; + String mBitmapName; + String mStrCaption; + String mInstallLine; + BOOL mUseTimer; + Font mTextFont; + static char szClassName[]; +}; + +inline +BOOL SplashScreen::useTimer(void)const +{ + return mUseTimer; +} + +#endif diff --git a/test/STDTMPL.CPP b/test/STDTMPL.CPP new file mode 100644 index 0000000..33d70f2 --- /dev/null +++ b/test/STDTMPL.CPP @@ -0,0 +1,27 @@ +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef PureVector a; +typedef PureVector b; +typedef Block c; +typedef GlobalData e; +typedef QuickSort f; +typedef BinarySearch g; + diff --git a/test/ServerSocketControl.class b/test/ServerSocketControl.class new file mode 100644 index 0000000..d0dddcb Binary files /dev/null and b/test/ServerSocketControl.class differ diff --git a/test/ServerSocketControl.java b/test/ServerSocketControl.java new file mode 100644 index 0000000..bb05f79 --- /dev/null +++ b/test/ServerSocketControl.java @@ -0,0 +1,18 @@ +import java.net.*; +import java.io.*; + +public class ServerSocketControl extends ServerSocket +{ + public ServerSocketControl(int port)throws IOException + { + super(port); + } + public void accept(SocketControl socketControl)throws IOException + { + implAccept(socketControl); + } +} + + + + diff --git a/test/SocketControl.class b/test/SocketControl.class new file mode 100644 index 0000000..5834ef8 Binary files /dev/null and b/test/SocketControl.class differ diff --git a/test/SocketControl.java b/test/SocketControl.java new file mode 100644 index 0000000..1380313 --- /dev/null +++ b/test/SocketControl.java @@ -0,0 +1,202 @@ +import java.net.*; +import java.io.*; + +public class SocketControl extends Socket +{ + public final int OkResult=220; + public final int ErrorResult=500; + private InputStream mInputStream=null; + private OutputStream mOutputStream=null; + private boolean mIsConnected=false; + + public SocketControl() + { + } + public SocketControl(String strHost,int port)throws IOException + { + super(strHost,port); +// try{mInputStream=getInputStream();} +// catch(IOException exception){close();return;} +// try{mOutputStream=getOutputStream();} +// catch(IOException exception){close();return;} + isConnected(true); + } + public SocketControl(InetAddress inetAddress,int port)throws IOException + { + super(inetAddress,port); + try{mInputStream=getInputStream();} + catch(IOException exception){close();return;} + try{mOutputStream=getOutputStream();} + catch(IOException exception){close();return;} + isConnected(true); + } + public void closeSocket()throws IOException + { + isConnected(false); + close(); + } + public boolean isConnected() + { + return mIsConnected; + } + private void isConnected(boolean isConnected) + { + mIsConnected=isConnected; + } + public String readLine() + { + byte streamByte[]; + String strLine=new String(); + + if(!isConnected())return strLine; + strLine=new String(); + while(true) + { + streamByte=new byte[1]; + try{mInputStream.read(streamByte);} + catch(IOException exception){break;} + if(13==streamByte[0])continue; + else if(10==streamByte[0])break; + strLine+=new String(streamByte); + } + return strLine; + } + public boolean writeLine(String strLine) + { + if(!isConnected()||0==strLine.length())return false; + strLine+=new String("\r\n"); + byte streamData[]=strLine.getBytes(); + try{mOutputStream.write(streamData);} + catch(IOException exception){return false;} + return true; + } + public int getResultCode(String strLine) + { + if(0==strLine.length())return 0; + String strResult=new String(); + int strIndex=0; + while(true) + { + if(strIndex>=3)break; + if(' '==strLine.charAt(strIndex))break; + strResult+=strLine.charAt(strIndex); + strIndex++; + } + if(0==strResult.length())return 0; + return Integer.parseInt(strResult); + } + public String getResult(String strLine) + { + String strResult=new String(); + int strIndex=0; + int strLength=strLine.length(); + if(0==strLength)return strResult; + while(' '!=strLine.charAt(strIndex)&&strIndex=strLength)return strResult; + while(strIndex // MFC core and standard components +#include // MFC extensions +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + + + + diff --git a/test/StringArray.class b/test/StringArray.class new file mode 100644 index 0000000..aa9b600 Binary files /dev/null and b/test/StringArray.class differ diff --git a/test/StringArray.java b/test/StringArray.java new file mode 100644 index 0000000..bc8c7b7 --- /dev/null +++ b/test/StringArray.java @@ -0,0 +1,67 @@ +import java.lang.ArrayIndexOutOfBoundsException; + +class StringArray +{ + private final int BlockSize=16; + private int mGrowBy=BlockSize; + private int mActualItemCount=0; + private int mVirtualItemCount=mGrowBy; + private String mStringArray[]=new String[mGrowBy]; + + public String getAt(int arrayIndex)throws ArrayIndexOutOfBoundsException + { + if(arrayIndex>=size())throw new ArrayIndexOutOfBoundsException(); + return mStringArray[arrayIndex]; + } + public void setAt(String strItem,int arrayIndex)throws ArrayIndexOutOfBoundsException + { + if(arrayIndex>=size())throw new ArrayIndexOutOfBoundsException(); + mStringArray[arrayIndex]=strItem; + } + public boolean insert(String strItem) + { + guarantee(size()+1); + mStringArray[size()]=strItem; + size(size()+1); + return true; + } + public void guarantee(int requiredSize) + { + if(virtualSize()>=requiredSize)return; + String tmpArray[]=new String[virtualSize()+growBy()]; + for(int index=0;index +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=test - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "test.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "test - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:windows /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /debug + +!ENDIF + +# Begin Target + +# Name "test - Win32 Release" +# Name "test - Win32 Debug" +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\work\exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\..\work\exe\mssocket.lib +# End Source File +# End Target +# End Project diff --git a/test/TEST.002 b/test/TEST.002 new file mode 100644 index 0000000..c2c5aca --- /dev/null +++ b/test/TEST.002 @@ -0,0 +1,128 @@ +# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=test - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "test.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "test - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL" +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL" +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "test - Win32 Release" +# Name "test - Win32 Debug" +# Begin Source File + +SOURCE=..\printman\Abortdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\work\exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\..\work\exe\msdialog.lib +# End Source File +# Begin Source File + +SOURCE=..\printman\pickdlg.cpp +# End Source File +# Begin Source File + +SOURCE=..\printman\Printman.cpp +# End Source File +# Begin Source File + +SOURCE=.\test.rc + +!IF "$(CFG)" == "test - Win32 Release" + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project diff --git a/test/TEST.PLG b/test/TEST.PLG new file mode 100644 index 0000000..43c216b --- /dev/null +++ b/test/TEST.PLG @@ -0,0 +1,34 @@ + + +
+

Build Log

+

+--------------------Configuration: test - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\TEMP\RSP4C.tmp" with contents +[ +/nologo /Zp1 /MTd /GX /ZI /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp"msvcobj/test.pch" /YX /Fo"msvcobj/" /Fd"msvcobj/" /FD /I /work" /I /parts" /c +"E:\work\TEST\main.cpp" +] +Creating command line "cl.exe @C:\TEMP\RSP4C.tmp" +Creating temporary file "C:\TEMP\RSP4D.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib wsock32.lib ole32.lib /nologo /subsystem:console /incremental:no /pdb:"msvcobj/test.pdb" /debug /machine:I386 /out:"msvcobj/test.exe" /pdbtype:sept +.\msvcobj\main.obj +..\exe\mscommon.lib +] +Creating command line "link.exe @C:\TEMP\RSP4D.tmp" +

Output Window

+Compiling... +main.cpp +Linking... +LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /INCREMENTAL:NO specification + + + +

Results

+test.exe - 0 error(s), 1 warning(s) +
+ + diff --git a/test/TEST.RES b/test/TEST.RES new file mode 100644 index 0000000..935a7e5 Binary files /dev/null and b/test/TEST.RES differ diff --git a/test/TEST.RWS b/test/TEST.RWS new file mode 100644 index 0000000..4d23d53 Binary files /dev/null and b/test/TEST.RWS differ diff --git a/test/TEST.~RC b/test/TEST.~RC new file mode 100644 index 0000000..b3f6670 --- /dev/null +++ b/test/TEST.~RC @@ -0,0 +1,26 @@ +#include +#include + +RISK BITMAP "risks.bmp" + +mainMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "File &Open...", MAINMENU_FILEOPEN + MENUITEM "File &Print...", MAINMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MAINMENU_FILEQUIT + END +END + + + +PRINTING DIALOG 36, 49, 165, 41 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Printing" +FONT 8, "MS Sans Serif" +{ + PUSHBUTTON "Cancel", IDCANCEL, 57, 20, 50, 14 +} + diff --git a/test/Test.dsw b/test/Test.dsw new file mode 100644 index 0000000..b5c03bc --- /dev/null +++ b/test/Test.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "test"=.\test.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/test/Test.opt b/test/Test.opt new file mode 100644 index 0000000..6dc60b6 Binary files /dev/null and b/test/Test.opt differ diff --git a/test/TestCert.spc b/test/TestCert.spc new file mode 100644 index 0000000..610489a Binary files /dev/null and b/test/TestCert.spc differ diff --git a/test/UPDATE.HPP b/test/UPDATE.HPP new file mode 100644 index 0000000..0ef2dea --- /dev/null +++ b/test/UPDATE.HPP @@ -0,0 +1,15 @@ +class UpdateRegion +{ +public: + UpdateRegion(void); + UpdateRegion(const UpdateRegion &someUpdateRegion); + virtual ~UpdateRegion(); + UpdateRegion &operator=(const UpdateRegion &someUpdateRegion); + bool operator==(const UpdateRegion &someUpdateRegion)const; + Page &getUpdateRegion(); + bool setUpdateRegion(unsigned startRow,unsigned startCol,Page &page); +private: + unsigned mStartRow; + unsigned mStartCol; + Page mPage; +}; diff --git a/test/VINFO.HPP b/test/VINFO.HPP new file mode 100644 index 0000000..5868e8b --- /dev/null +++ b/test/VINFO.HPP @@ -0,0 +1,86 @@ +#ifndef _TEST_VINFO_HPP_ +#define _TEST_VINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class VInfo +{ +public: + VInfo(void); + VInfo(const VInfo &someVInfo); + VInfo(DWORD baseAddress,HDC hDC); + virtual ~VInfo(); + VInfo &operator=(const VInfo &someVInfo); + BOOL operator==(const VInfo &someVInfo)const; + DWORD baseAddress(void)const; + void baseAddress(DWORD baseAddress); + HDC hDC(void)const; + void hDC(HDC hDC); +private: + DWORD mBaseAddress; + HDC mhDC; +}; + +inline +VInfo::VInfo(void) +: mBaseAddress(0), mhDC(0) +{ +} + +inline +VInfo::VInfo(DWORD baseAddress,HDC hDC) +: mBaseAddress(baseAddress), mhDC(hDC) +{ +} + +inline +VInfo::VInfo(const VInfo &someVInfo) +{ + *this=someVInfo; +} + +inline +VInfo::~VInfo() +{ +} + +inline +VInfo &VInfo::operator=(const VInfo &someVInfo) +{ + baseAddress(someVInfo.baseAddress()); + hDC(someVInfo.hDC()); + return *this; +} + +inline +BOOL VInfo::operator==(const VInfo &someVInfo)const +{ + return (baseAddress()==someVInfo.baseAddress()&& + hDC()==someVInfo.hDC()); +} + +inline +DWORD VInfo::baseAddress(void)const +{ + return mBaseAddress; +} + +inline +void VInfo::baseAddress(DWORD baseAddress) +{ + mBaseAddress=baseAddress; +} + +inline +HDC VInfo::hDC(void)const +{ + return mhDC; +} + +inline +void VInfo::hDC(HDC hDC) +{ + mhDC=hDC; +} +#endif \ No newline at end of file diff --git a/test/index.html b/test/index.html new file mode 100644 index 0000000..bf00c6b --- /dev/null +++ b/test/index.html @@ -0,0 +1,27 @@ + + + + + + + + + +

Mutual Fund Analysis

+ +

+ + +

+ +

Although the information +provided is gathered from sources deemed reliable, +it's accuracy is not guaranteed.

+ +
+


+

+ + diff --git a/test/inproc.cpp b/test/inproc.cpp new file mode 100644 index 0000000..f9a60aa --- /dev/null +++ b/test/inproc.cpp @@ -0,0 +1,70 @@ +#include + +void *InProcServerDemoInstantiator::instantiate(IUnknown *pUnkOuter,REFIID riid,void **ppv) +{ + ComResult comResult; + InProcServerDemo *pInProcServerDemo; + pInProcServerDemo=::new InProcServerDemo(pUnkOuter,riid); + if(!pInProcServerDemo)throw Instantiator::NoMemory(); + comResult=pInProcServerDemo->QueryInterface(riid,ppv); + if(comResult.isFailure()) + { + ::delete pInProcServerDemo; + throw Instantiator::NoInterface(); + } + return pInProcServerDemo; +} + +InProcServerDemo::InProcServerDemo(IUnknown *pUnkOuter,REFIID riid) +: mValue(0), mRefCount(0) +{ +// getConsole().writeLine(""); + if(!IsEqualIID(riid,IID_IDemo))throw Instantiator::NoInterface(); +} + +InProcServerDemo::~InProcServerDemo() +{ +// getConsole().writeLine(""); +} + +HRESULT __stdcall InProcServerDemo::getValue(int *pvalue) +{ +// getConsole().writeLine(""); + if(!pvalue)return ComResult::InvalidArg; + *pvalue=mValue; + return ComResult::NoError; +} + +HRESULT __stdcall InProcServerDemo::setValue(int value) +{ +// getConsole().writeLine(""); + mValue=value; + return ComResult::NoError; +} + +HRESULT __stdcall InProcServerDemo::QueryInterface(REFIID riid,void **ppv) +{ +// getConsole().writeLine(""); + *ppv=0; + if(IsEqualIID(riid,IID_IUnknown)||IsEqualIID(riid,IID_IDemo)) + { + *ppv=this; + AddRef(); + return NOERROR; + } + return ComResult::NoInterface; +} + +ULONG __stdcall InProcServerDemo::AddRef(void) +{ +// getConsole().writeLine(""); + return ++mRefCount; +} + +ULONG __stdcall InProcServerDemo::Release(void) +{ +// getConsole().writeLine(""); + if(0==--mRefCount)::delete this; + return mRefCount; +} + diff --git a/test/inproc.dsp b/test/inproc.dsp new file mode 100644 index 0000000..0d846de --- /dev/null +++ b/test/inproc.dsp @@ -0,0 +1,113 @@ +# Microsoft Developer Studio Project File - Name="inproc" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=inproc - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "inproc.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "inproc.mak" CFG="inproc - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "inproc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "inproc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "inproc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 + +!ELSEIF "$(CFG)" == "inproc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "inproc - Win32 Release" +# Name "inproc - Win32 Debug" +# Begin Source File + +SOURCE=.\demo.c +# End Source File +# Begin Source File + +SOURCE=.\inproc.cpp +# End Source File +# Begin Source File + +SOURCE=.\inproc.def +# End Source File +# Begin Source File + +SOURCE=..\com\msvcobj\inproc.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=.\test.cpp +# End Source File +# End Target +# End Project diff --git a/test/inproc.hpp b/test/inproc.hpp new file mode 100644 index 0000000..e9cded9 --- /dev/null +++ b/test/inproc.hpp @@ -0,0 +1,37 @@ +#ifndef _TEST_INPROCSERVERDEMO_HPP_ +#define _TEST_INPROCSERVERDEMO_HPP_ +#ifndef _COMMON_CONSOLE_HPP_ +#include +#endif +#ifndef _COM_COM_HPP_ +#include +#endif +#ifndef _COM_INSTANTIATOR_HPP_ +#include +#endif +#ifndef _TEST_DEMO_HPP_ +#include +#endif + +class InProcServerDemoInstantiator : public Instantiator +{ +public: + virtual void *instantiate(IUnknown *pUnkOuter,REFIID riid,void **ppv); +}; + +class InProcServerDemo : public IDemo +{ +public: + InProcServerDemo(IUnknown *pUnkOuter,REFIID riid); + ~InProcServerDemo(); + HRESULT __stdcall QueryInterface(REFIID riid,void **ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); + HRESULT __stdcall getValue(int *pvalue); + HRESULT __stdcall setValue(int value); +private: + int mValue; + int mRefCount; +}; + +#endif \ No newline at end of file diff --git a/test/ipdemo.cpp b/test/ipdemo.cpp new file mode 100644 index 0000000..da1ad4b --- /dev/null +++ b/test/ipdemo.cpp @@ -0,0 +1,96 @@ +#include +#include + + +InProcServerDemo::InProcServerDemo(IUnknown *pUnkOuter,REFIID riid,Console &winConsole) +//: InProcServer(pUnkOuter,riid,winConsole), mValue(0) +: mValue(0), mRefCount(0), mWinConsole(winConsole) +{ + getConsole().writeLine(""); + if(!IsEqualIID(riid,IID_IDemo))throw InProcServerDemo::InProcServerDemoNoInterface(); +} + +InProcServerDemo::~InProcServerDemo() +{ + getConsole().writeLine(""); +} + +REFIID InProcServerDemo::getREFIID(void) +{ + getConsole().writeLine(""); + return IID_IDemo; +} + +void *InProcServerDemo::getInstance(void) +{ + getConsole().writeLine(""); + return (void*)this; +} + +HRESULT __stdcall InProcServerDemo::getValue(int *pvalue) +{ + getConsole().writeLine(""); + if(!pvalue)return ComResult::InvalidArg; + *pvalue=mValue; + return ComResult::NoError; +} + +HRESULT __stdcall InProcServerDemo::setValue(int value) +{ + getConsole().writeLine(""); + mValue=value; + return ComResult::NoError; +} + +HRESULT __stdcall InProcServerDemo::QueryInterface(REFIID riid,void **ppv) +{ + getConsole().writeLine(""); + *ppv=0; + if(IsEqualIID(riid,IID_IUnknown)||IsEqualIID(riid,getREFIID())) + { + *ppv=getInstance(); +// *ppv=this; + AddRef(); + return NOERROR; + } + return ComResult::NoInterface; +} + +ULONG __stdcall InProcServerDemo::AddRef(void) +{ + getConsole().writeLine(""); + return ++mRefCount; +} + +ULONG __stdcall InProcServerDemo::Release(void) +{ + getConsole().writeLine(""); + if(0==--mRefCount)::delete this; + return mRefCount; +} + + +#if 0 +HRESULT __stdcall InProcServerDemo::QueryInterface(REFIID riid,void **ppv) +{ + getConsole().writeLine(""); + return InProcServer::QueryInterface(riid,ppv); +} + +ULONG __stdcall InProcServerDemo::AddRef(void) +{ + getConsole().writeLine(""); + return InProcServer::AddRef(); +} + +ULONG __stdcall InProcServerDemo::Release(void) +{ + getConsole().writeLine(""); + return InProcServer::Release(); +} +#endif + +Console &InProcServerDemo::getConsole(void) +{ + return mWinConsole; +} \ No newline at end of file diff --git a/test/ipdemo.hpp b/test/ipdemo.hpp new file mode 100644 index 0000000..f758886 --- /dev/null +++ b/test/ipdemo.hpp @@ -0,0 +1,32 @@ +#ifndef _TEST_INPROCSERVERDEMO_HPP_ +#define _TEST_INPROCSERVERDEMO_HPP_ +#ifndef _COMMON_CONSOLE_HPP_ +#include +#endif +#ifndef _TEST_DEMO_HPP_ +#include +#endif + +//class InProcServerDemo : public InProcServer, public IDemo +class InProcServerDemo : public IDemo +{ +public: + class InProcServerDemoNoInterface{}; + InProcServerDemo(IUnknown *pUnkOuter,REFIID riid,Console &winConsole); + ~InProcServerDemo(); + HRESULT __stdcall QueryInterface(REFIID riid,void **ppv); + ULONG __stdcall AddRef(void); + ULONG __stdcall Release(void); + HRESULT __stdcall getValue(int *pvalue); + HRESULT __stdcall setValue(int value); +protected: + virtual REFIID getREFIID(void); + virtual void *getInstance(void); + Console &getConsole(void); +private: + int mValue; + int mRefCount; + Console &mWinConsole; +}; + +#endif \ No newline at end of file diff --git a/test/jtest.dsp b/test/jtest.dsp new file mode 100644 index 0000000..17c7edc --- /dev/null +++ b/test/jtest.dsp @@ -0,0 +1,121 @@ +# Microsoft Developer Studio Project File - Name="jtest" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=jtest - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "jtest.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "jtest.mak" CFG="jtest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "jtest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "jtest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "jtest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "jtest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "jtest - Win32 Release" +# Name "jtest - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\Proto.java + +!IF "$(CFG)" == "jtest - Win32 Release" + +!ELSEIF "$(CFG)" == "jtest - Win32 Debug" + +# Begin Custom Build +OutDir=.\Debug +InputPath=.\Proto.java + +"$(OutDir)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\parts\jdk\bin\javac -deprecation $(InputPath) + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/test/jtest.dsw b/test/jtest.dsw new file mode 100644 index 0000000..90ad028 --- /dev/null +++ b/test/jtest.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "jtest"=.\jtest.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/test/jtest.opt b/test/jtest.opt new file mode 100644 index 0000000..20eaefb Binary files /dev/null and b/test/jtest.opt differ diff --git a/test/jtest.sln b/test/jtest.sln new file mode 100644 index 0000000..b6224f1 --- /dev/null +++ b/test/jtest.sln @@ -0,0 +1,13 @@ +Microsoft Visual Studio Solution File, Format Version 1.00 +Project("{66355F20-A65B-11D0-BFB5-00A0C91EBFA0}") = "jtest", "jtest.vjp", "{5EE5BA03-CEC1-11D3-B501-005004E82B58}" +EndProject +Global + GlobalSection(LocalDeployment) = postSolution + StartupProject = {5EE5BA03-CEC1-11D3-B501-005004E82B58} + EndGlobalSection + GlobalSection(BuildOrder) = postSolution + 0 = {5EE5BA03-CEC1-11D3-B501-005004E82B58} + EndGlobalSection + GlobalSection(DeploymentRoot) = postSolution + EndGlobalSection +EndGlobal diff --git a/test/jtest.suo b/test/jtest.suo new file mode 100644 index 0000000..4ffe4e4 Binary files /dev/null and b/test/jtest.suo differ diff --git a/test/jtest.vjp b/test/jtest.vjp new file mode 100644 index 0000000..d203b11 Binary files /dev/null and b/test/jtest.vjp differ diff --git a/test/proto.cab b/test/proto.cab new file mode 100644 index 0000000..94d019f Binary files /dev/null and b/test/proto.cab differ diff --git a/test/res/Toolbar.bmp b/test/res/Toolbar.bmp new file mode 100644 index 0000000..d501723 Binary files /dev/null and b/test/res/Toolbar.bmp differ diff --git a/test/res/test.ico b/test/res/test.ico new file mode 100644 index 0000000..7eef0bc Binary files /dev/null and b/test/res/test.ico differ diff --git a/test/res/test.rc2 b/test/res/test.rc2 new file mode 100644 index 0000000..f3b43e0 --- /dev/null +++ b/test/res/test.rc2 @@ -0,0 +1,13 @@ +// +// TEST.RC2 - resources Microsoft Visual C++ does not edit directly +// + +#ifdef APSTUDIO_INVOKED + #error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// Add manually edited resources here... + +///////////////////////////////////////////////////////////////////////////// diff --git a/test/res/testDoc.ico b/test/res/testDoc.ico new file mode 100644 index 0000000..2a1f1ae Binary files /dev/null and b/test/res/testDoc.ico differ diff --git a/test/test.003 b/test/test.003 new file mode 100644 index 0000000..7bcd684 --- /dev/null +++ b/test/test.003 @@ -0,0 +1,126 @@ +# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=test - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "test.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "test - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /GX /Zi /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /I /work" /I /parts" /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL" +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL" +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib wsock32.lib ole32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "test - Win32 Release" +# Name "test - Win32 Debug" +# Begin Source File + +SOURCE=.\demo.c +# End Source File +# Begin Source File + +SOURCE=.\demo.idl + +!IF "$(CFG)" == "test - Win32 Release" + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\work\exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=.\test.rc + +!IF "$(CFG)" == "test - Win32 Release" + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project diff --git a/test/test.clw b/test/test.clw new file mode 100644 index 0000000..a29fbbb --- /dev/null +++ b/test/test.clw @@ -0,0 +1,141 @@ +; CLW file contains information for the MFC ClassWizard + +[General Info] +Version=1 +LastClass=CTestView +LastTemplate=CDialog +NewFileInclude1=#include "stdafx.h" +NewFileInclude2=#include "test.h" +LastPage=0 + +ClassCount=8 +Class1=CTestApp +Class2=CTestDoc +Class3=CTestView +Class4=CMainFrame +Class7=CAboutDlg +Class8=CChildFrame + +ResourceCount=7 +Resource1=IDD_ABOUTBOX +Resource2=IDR_MAINFRAME +Resource3=IDR_TESTTYPE + +[CLS:CTestApp] +Type=0 +HeaderFile=test.h +ImplementationFile=test.cpp +Filter=N + +[CLS:CTestDoc] +Type=0 +HeaderFile=testDoc.h +ImplementationFile=testDoc.cpp +Filter=N + +[CLS:CTestView] +Type=0 +HeaderFile=testView.h +ImplementationFile=testView.cpp +Filter=C + +[CLS:CMainFrame] +Type=0 +HeaderFile=MainFrm.h +ImplementationFile=MainFrm.cpp +Filter=T + + +[CLS:CChildFrame] +Type=0 +HeaderFile=ChildFrm.h +ImplementationFile=ChildFrm.cpp +Filter=M + +[CLS:CAboutDlg] +Type=0 +HeaderFile=test.cpp +ImplementationFile=test.cpp +Filter=D + +[DLG:IDD_ABOUTBOX] +Type=1 +ControlCount=4 +Control1=IDC_STATIC,static,1342177283 +Control2=IDC_STATIC,static,1342308352 +Control3=IDC_STATIC,static,1342308352 +Control4=IDOK,button,1342373889 +Class=CAboutDlg + +[MNU:IDR_MAINFRAME] +Type=1 +Class=CMainFrame +Command1=ID_FILE_NEW +Command2=ID_FILE_OPEN +Command3=ID_FILE_PRINT_SETUP +Command4=ID_FILE_MRU_FILE1 +Command5=ID_APP_EXIT +Command6=ID_VIEW_TOOLBAR +Command7=ID_VIEW_STATUS_BAR +Command9=ID_APP_ABOUT +CommandCount=9 + +[TB:IDR_MAINFRAME] +Type=1 +Class=CMainFrame +Command1=ID_FILE_NEW +Command2=ID_FILE_OPEN +Command3=ID_FILE_SAVE +Command4=ID_EDIT_CUT +Command5=ID_EDIT_COPY +Command6=ID_EDIT_PASTE +Command7=ID_FILE_PRINT +Command12=ID_APP_ABOUT +CommandCount=13 + +[MNU:IDR_TESTTYPE] +Type=1 +Class=CTestView +Command1=ID_FILE_NEW +Command2=ID_FILE_OPEN +Command3=ID_FILE_CLOSE +Command4=ID_FILE_SAVE +Command5=ID_FILE_SAVE_AS +Command6=ID_FILE_PRINT +Command7=ID_FILE_PRINT_PREVIEW +Command8=ID_FILE_PRINT_SETUP +Command9=ID_FILE_MRU_FILE1 +Command10=ID_APP_EXIT +Command11=ID_EDIT_UNDO +Command12=ID_EDIT_CUT +Command13=ID_EDIT_COPY +Command14=ID_EDIT_PASTE +Command29=ID_VIEW_TOOLBAR +Command30=ID_VIEW_STATUS_BAR +Command31=ID_WINDOW_NEW +Command32=ID_WINDOW_CASCADE +Command33=ID_WINDOW_TILE_HORZ +Command34=ID_WINDOW_ARRANGE +Command36=ID_APP_ABOUT +CommandCount=36 + +[ACL:IDR_MAINFRAME] +Type=1 +Class=CMainFrame +Command1=ID_FILE_NEW +Command2=ID_FILE_OPEN +Command3=ID_FILE_SAVE +Command4=ID_FILE_PRINT +Command5=ID_EDIT_UNDO +Command6=ID_EDIT_CUT +Command7=ID_EDIT_COPY +Command8=ID_EDIT_PASTE +Command9=ID_EDIT_UNDO +Command10=ID_EDIT_CUT +Command11=ID_EDIT_COPY +Command12=ID_EDIT_PASTE +Command17=ID_NEXT_PANE +Command18=ID_PREV_PANE +CommandCount=21 + + diff --git a/test/test.cpp b/test/test.cpp new file mode 100644 index 0000000..df1e6df --- /dev/null +++ b/test/test.cpp @@ -0,0 +1,38 @@ +#include +#include +#include +#include + +DLLServer sDLLServer; +Console sWinConsole(Console::ConsoleType(Console::Write|Console::Read),true); +InProcServerDemoInstantiator inProcServerDemoInstantiator; +ClassFactory sClassFactory(sDLLServer,sWinConsole); + +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid,void **ppv) +{ + sWinConsole.writeLine(""); + *ppv=0; + return sClassFactory.QueryInterface(riid,ppv); +} + +STDAPI DllCanUnloadNow(void) +{ + sWinConsole.writeLine(""); + return (0==sDLLServer.getRefCount()&&0==sDLLServer.getLockCount()?S_OK:S_FALSE); +} + +BOOL _stdcall DllMain(HINSTANCE /*hInstance*/,DWORD reasonCode,LPVOID /*lpvReserved*/) +{ + switch(reasonCode) + { + case DLL_PROCESS_ATTACH : + sClassFactory.setInstantiator(&inProcServerDemoInstantiator); + sWinConsole.writeLine(""); + break; + case DLL_PROCESS_DETACH : + sWinConsole.writeLine(""); + sWinConsole.read(); + break; + } + return TRUE; +} diff --git a/test/test.dsp b/test/test.dsp new file mode 100644 index 0000000..6a40511 --- /dev/null +++ b/test/test.dsp @@ -0,0 +1,120 @@ +# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=test - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "test.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "test - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Zp1 /MTd /GX /ZI /Od /I "\work" /I "\parts" /I "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /I /work" /I /parts" /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL" +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL" +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib wsock32.lib ole32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "test - Win32 Release" +# Name "test - Win32 Debug" +# Begin Source File + +SOURCE=.\demo.c +# End Source File +# Begin Source File + +SOURCE=.\demo.idl + +!IF "$(CFG)" == "test - Win32 Release" + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\test.rc +# End Source File +# Begin Source File + +SOURCE=..\..\work\exe\mscommon.lib +# End Source File +# End Target +# End Project diff --git a/test/test.h b/test/test.h new file mode 100644 index 0000000..57e53f6 --- /dev/null +++ b/test/test.h @@ -0,0 +1,11 @@ + +#define MAINMENU_FILEOPEN 500 +#define MAINMENU_FILEPRINT 501 +#define MAINMENU_FILEQUIT 502 + + +#define IDS_FLIST 0x0B +#define IDS_FNAME 0x0C +#define IDS_FPATH 0x0D +#define IDS_FILEOPEN 0x0E +#define IDS_FILESAVE 0x0F diff --git a/test/test.mak b/test/test.mak new file mode 100644 index 0000000..67840e2 --- /dev/null +++ b/test/test.mak @@ -0,0 +1,218 @@ +# Microsoft Developer Studio Generated NMAKE File, Based on test.dsp +!IF "$(CFG)" == "" +CFG=test - Win32 Debug +!MESSAGE No configuration specified. Defaulting to test - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "test - Win32 Release" && "$(CFG)" != "test - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF + +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "test - Win32 Release" + +OUTDIR=.\Release +INTDIR=.\Release +# Begin Custom Macros +OutDir=.\Release +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\test.exe" + +!ELSE + +ALL : "$(OUTDIR)\test.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\demo.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\test.res" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(OUTDIR)\test.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)\test.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c +CPP_OBJS=.\Release/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\test.res" /d "NDEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\test.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)\test.pdb" /machine:I386 /out:"$(OUTDIR)\test.exe" +LINK32_OBJS= \ + "$(INTDIR)\demo.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\test.res" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +OUTDIR=.\msvcobj +INTDIR=.\msvcobj +# Begin Custom Macros +OutDir=.\msvcobj +# End Custom Macros + +!IF "$(RECURSE)" == "0" + +ALL : "$(OUTDIR)\test.exe" + +!ELSE + +ALL : "$(OUTDIR)\test.exe" + +!ENDIF + +CLEAN : + -@erase "$(INTDIR)\demo.obj" + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\test.res" + -@erase "$(INTDIR)\vc50.idb" + -@erase "$(INTDIR)\vc50.pdb" + -@erase "$(OUTDIR)\test.exe" + -@erase "$(OUTDIR)\test.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +CPP_PROJ=/nologo /Zp1 /MTd /GX /Zi /Od /I "\work" /I "\parts" /I\ + "\parts\sgi_stl" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__"\ + /Fp"$(INTDIR)\test.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /I\ + /work" /I /parts" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=. +MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)\test.res" /d "_DEBUG" +BSC32=bscmake.exe +BSC32_FLAGS=/nologo /o"$(OUTDIR)\test.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib wsock32.lib ole32.lib /nologo /subsystem:console\ + /incremental:no /pdb:"$(OUTDIR)\test.pdb" /debug /machine:I386\ + /out:"$(OUTDIR)\test.exe" /pdbtype:sept +LINK32_OBJS= \ + "$(INTDIR)\demo.obj" \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\test.res" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_OBJS)}.obj:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.c{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cpp{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + +.cxx{$(CPP_SBRS)}.sbr:: + $(CPP) @<< + $(CPP_PROJ) $< +<< + + +!IF "$(CFG)" == "test - Win32 Release" || "$(CFG)" == "test - Win32 Debug" +SOURCE=.\demo.c + +"$(INTDIR)\demo.obj" : $(SOURCE) "$(INTDIR)" + + +SOURCE=.\demo.idl + +!IF "$(CFG)" == "test - Win32 Release" + +!ELSEIF "$(CFG)" == "test - Win32 Debug" + +!ENDIF + +SOURCE=.\main.cpp +DEP_CPP_MAIN_=\ + ".\demo.h"\ + ".\demo.hpp"\ + {$(INCLUDE)}"com\clsctx.hpp"\ + {$(INCLUDE)}"com\com.hpp"\ + {$(INCLUDE)}"com\ole2.hpp"\ + {$(INCLUDE)}"com\result.hpp"\ + {$(INCLUDE)}"common\pointer.hpp"\ + {$(INCLUDE)}"common\windows.hpp"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +SOURCE=.\test.rc +DEP_RSC_TEST_=\ + ".\risks.bmp"\ + ".\test.h"\ + + +"$(INTDIR)\test.res" : $(SOURCE) $(DEP_RSC_TEST_) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + + +!ENDIF + diff --git a/test/test.mdp b/test/test.mdp new file mode 100644 index 0000000..ae809b8 Binary files /dev/null and b/test/test.mdp differ diff --git a/test/test.rc b/test/test.rc new file mode 100644 index 0000000..d94d704 --- /dev/null +++ b/test/test.rc @@ -0,0 +1,42 @@ +#include +#include + +RISK BITMAP "risks.bmp" + +mainMenu MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "File &Open...", MAINMENU_FILEOPEN + MENUITEM "File &Print...", MAINMENU_FILEPRINT + MENUITEM SEPARATOR + MENUITEM "E&xit", MAINMENU_FILEQUIT + END +END + +PRINTING DIALOG 36, 49, 165, 41 +STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Printing" +FONT 8, "MS Sans Serif" +{ + PUSHBUTTON "Cancel", IDCANCEL, 57, 20, 50, 14 +} + +FileSelect DIALOG 31, 27, 211, 145 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +FONT 6,"Helv" +BEGIN + CONTROL "", IDS_FLIST, "LISTBOX", LBS_STANDARD | LBS_USETABSTOPS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 53, 201, 88 + CONTROL "", IDS_FNAME, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 42, 6, 84, 12 + CONTROL "Ok", IDOK, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 131, 3, 36, 24 + CONTROL "Cancel", IDCANCEL, "BUTTON", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 170, 3, 36, 24 + LTEXT "File Name:", -1, 2, 8, 38, 8 + LTEXT "Path:", -1, 4, 24, 17, 8 + LTEXT "", IDS_FPATH, 25, 24, 98, 9, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File", -1, 20, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Date", -1, 68, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Size", -1, 129, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Time", -1, 159, 38, 16, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File Save", IDS_FILESAVE, 90, 155, 38, 8, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "File Open", IDS_FILEOPEN, 90, 168, 34, 8, WS_CHILD | WS_VISIBLE | WS_GROUP +END diff --git a/test/testDoc.cpp b/test/testDoc.cpp new file mode 100644 index 0000000..551506f --- /dev/null +++ b/test/testDoc.cpp @@ -0,0 +1,82 @@ +// testDoc.cpp : implementation of the CTestDoc class +// + +#include "stdafx.h" +#include "test.h" + +#include "testDoc.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CTestDoc + +IMPLEMENT_DYNCREATE(CTestDoc, CDocument) + +BEGIN_MESSAGE_MAP(CTestDoc, CDocument) + //{{AFX_MSG_MAP(CTestDoc) + // NOTE - the ClassWizard will add and remove mapping macros here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CTestDoc construction/destruction + +CTestDoc::CTestDoc() +{ + // TODO: add one-time construction code here + +} + +CTestDoc::~CTestDoc() +{ +} + +BOOL CTestDoc::OnNewDocument() +{ + if (!CDocument::OnNewDocument()) + return FALSE; + + // TODO: add reinitialization code here + // (SDI documents will reuse this document) + + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////// +// CTestDoc serialization + +void CTestDoc::Serialize(CArchive& ar) +{ + if (ar.IsStoring()) + { + // TODO: add storing code here + } + else + { + // TODO: add loading code here + } +} + +///////////////////////////////////////////////////////////////////////////// +// CTestDoc diagnostics + +#ifdef _DEBUG +void CTestDoc::AssertValid() const +{ + CDocument::AssertValid(); +} + +void CTestDoc::Dump(CDumpContext& dc) const +{ + CDocument::Dump(dc); +} +#endif //_DEBUG + +///////////////////////////////////////////////////////////////////////////// +// CTestDoc commands diff --git a/test/testDoc.h b/test/testDoc.h new file mode 100644 index 0000000..9420b25 --- /dev/null +++ b/test/testDoc.h @@ -0,0 +1,44 @@ +// testDoc.h : interface of the CTestDoc class +// +///////////////////////////////////////////////////////////////////////////// + +class CTestDoc : public CDocument +{ +protected: // create from serialization only + CTestDoc(); + DECLARE_DYNCREATE(CTestDoc) + +// Attributes +public: + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CTestDoc) + public: + virtual BOOL OnNewDocument(); + virtual void Serialize(CArchive& ar); + //}}AFX_VIRTUAL + +// Implementation +public: + virtual ~CTestDoc(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +protected: + +// Generated message map functions +protected: + //{{AFX_MSG(CTestDoc) + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +///////////////////////////////////////////////////////////////////////////// diff --git a/test/testView.cpp b/test/testView.cpp new file mode 100644 index 0000000..76aeace --- /dev/null +++ b/test/testView.cpp @@ -0,0 +1,105 @@ +// testView.cpp : implementation of the CTestView class +// + +#include "stdafx.h" +#include "test.h" + +#include "testDoc.h" +#include "testView.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CTestView + +IMPLEMENT_DYNCREATE(CTestView, CView) + +BEGIN_MESSAGE_MAP(CTestView, CView) + //{{AFX_MSG_MAP(CTestView) + // NOTE - the ClassWizard will add and remove mapping macros here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG_MAP + // Standard printing commands + ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) + ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) + ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CTestView construction/destruction + +CTestView::CTestView() +{ + // TODO: add construction code here + +} + +CTestView::~CTestView() +{ +} + +BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs) +{ + // TODO: Modify the Window class or styles here by modifying + // the CREATESTRUCT cs + + return CView::PreCreateWindow(cs); +} + +///////////////////////////////////////////////////////////////////////////// +// CTestView drawing + +void CTestView::OnDraw(CDC* pDC) +{ + CTestDoc* pDoc = GetDocument(); + ASSERT_VALID(pDoc); + + // TODO: add draw code for native data here +} + +///////////////////////////////////////////////////////////////////////////// +// CTestView printing + +BOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo) +{ + // default preparation + return DoPreparePrinting(pInfo); +} + +void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) +{ + // TODO: add extra initialization before printing +} + +void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) +{ + // TODO: add cleanup after printing +} + +///////////////////////////////////////////////////////////////////////////// +// CTestView diagnostics + +#ifdef _DEBUG +void CTestView::AssertValid() const +{ + CView::AssertValid(); +} + +void CTestView::Dump(CDumpContext& dc) const +{ + CView::Dump(dc); +} + +CTestDoc* CTestView::GetDocument() // non-debug version is inline +{ + ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc))); + return (CTestDoc*)m_pDocument; +} +#endif //_DEBUG + +///////////////////////////////////////////////////////////////////////////// +// CTestView message handlers diff --git a/test/testView.h b/test/testView.h new file mode 100644 index 0000000..b50cb53 --- /dev/null +++ b/test/testView.h @@ -0,0 +1,54 @@ +// testView.h : interface of the CTestView class +// +///////////////////////////////////////////////////////////////////////////// + +class CTestView : public CView +{ +protected: // create from serialization only + CTestView(); + DECLARE_DYNCREATE(CTestView) + +// Attributes +public: + CTestDoc* GetDocument(); + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CTestView) + public: + virtual void OnDraw(CDC* pDC); // overridden to draw this view + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + protected: + virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); + virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); + virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); + //}}AFX_VIRTUAL + +// Implementation +public: + virtual ~CTestView(); +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +protected: + +// Generated message map functions +protected: + //{{AFX_MSG(CTestView) + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +#ifndef _DEBUG // debug version in testView.cpp +inline CTestDoc* CTestView::GetDocument() + { return (CTestDoc*)m_pDocument; } +#endif + +///////////////////////////////////////////////////////////////////////////// diff --git a/thread/CONTEXT.HPP b/thread/CONTEXT.HPP new file mode 100644 index 0000000..1394a12 --- /dev/null +++ b/thread/CONTEXT.HPP @@ -0,0 +1,507 @@ +#ifndef _THREAD_CONTEXT_HPP_ +#define _THREAD_CONTEXT_HPP_ +#include +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _THREAD_FLOATINGSAVEAREA_HPP_ +#include +#endif + +class Context : private CONTEXT +{ +public: + enum ContextType{FloatingPoint=CONTEXT_FLOATING_POINT,Integer=CONTEXT_INTEGER, + Control=CONTEXT_CONTROL,Segments=CONTEXT_SEGMENTS,Full=CONTEXT_FULL, + DebugRegisters=CONTEXT_DEBUG_REGISTERS}; + Context(void); + Context(const Context &someContext); + Context(const CONTEXT &someCONTEXT); + virtual ~Context(void); + Context &operator=(const Context &someContext); + Context &operator=(const CONTEXT &someCONTEXT); + WORD operator==(const Context &someContext)const; + WORD operator==(const CONTEXT &someCONTEXT)const; + operator String(void)const; + WORD getThreadContext(HANDLE hThread); + WORD setThreadContext(HANDLE hThread); + DWORD contextFlags(void)const; + void contextFlags(DWORD contextFlags); + DWORD dr0(void)const; + void dr0(DWORD dr0); + DWORD dr1(void)const; + void dr1(DWORD dr1); + DWORD dr2(void)const; + void dr2(DWORD dr2); + DWORD dr3(void)const; + void dr3(DWORD dr3); + DWORD dr6(void)const; + void dr6(DWORD dr6); + DWORD dr7(void)const; + void dr7(DWORD dr7); + FloatingSaveArea floatingSaveArea(void)const; + void floatingSaveArea(const FloatingSaveArea &someFloatingSaveArea); + DWORD segCS(void)const; + void segCS(DWORD segCS); + DWORD segGS(void)const; + void segGS(DWORD segGS); + DWORD segFS(void)const; + void segFS(DWORD segGS); + DWORD segES(void)const; + void segES(DWORD segGS); + DWORD segDS(void)const; + void segDS(DWORD segGS); + DWORD segSS(void)const; + void segSS(DWORD segSS); + DWORD edi(void)const; + void edi(DWORD edi); + DWORD esi(void)const; + void esi(DWORD esi); + DWORD ebx(void)const; + void ebx(DWORD ebx); + DWORD edx(void)const; + void edx(DWORD edx); + DWORD ecx(void)const; + void ecx(DWORD ecx); + DWORD eax(void)const; + void eax(DWORD eax); + DWORD ebp(void)const; + void ebp(DWORD ebp); + DWORD eip(void)const; + void eip(DWORD eip); + DWORD esp(void)const; + void esp(DWORD esp); + DWORD eFlags(void)const; + void eFlags(DWORD eFlags); + BOOL cf(void)const; + BOOL zf(void)const; + BOOL sf(void)const; + BOOL of(void)const; + BOOL pf(void)const; + BOOL af(void)const; + BOOL ie(void)const; + BOOL df(void)const; +private: + enum FlagMask{MaskCarry=0x0001,MaskZero=0x0040,MaskSign=0x0080,MaskOverflow=0x0800,MaskParity=0x0004, + MaskAuxiliaryCarry=0x0010,MaskInterruptEnable=0x0200,MaskDirection=0x0400}; + void setZero(void); +}; + +inline +Context::Context(void) +{ + setZero(); + contextFlags(Full); +} + +inline +Context::Context(const Context &someContext) +{ + *this=someContext; +} + +inline +Context::Context(const CONTEXT &someCONTEXT) +{ + *this=someCONTEXT; +} + +inline +Context::~Context(void) +{ +} + +inline +Context &Context::operator=(const Context &someContext) +{ + ::memcpy((char*)&((CONTEXT&)*this),(char*)&((CONTEXT&)someContext),sizeof(CONTEXT)); + return *this; +} + +inline +Context &Context::operator=(const CONTEXT &someCONTEXT) +{ + ::memcpy((char*)&((CONTEXT&)*this),(char*)&someCONTEXT,sizeof(CONTEXT)); + return *this; +} + +inline +WORD Context::operator==(const Context &someContext)const +{ + return (::memcmp((char*)&((CONTEXT&)*this),(char*)&((CONTEXT&)someContext),sizeof(CONTEXT))?FALSE:TRUE); +} + +inline +WORD Context::operator==(const CONTEXT &someCONTEXT)const +{ + return (::memcmp((char*)&((CONTEXT&)*this),(char*)&someCONTEXT,sizeof(CONTEXT))?FALSE:TRUE); +} + +inline +Context::operator String(void)const +{ + String contextString; + + contextString.reserve(String::MaxString*4); + ::sprintf(contextString,"EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx EIP:%08lx EBP:%08lx ESP:%08lx EDI:%08lx ESI:%08lx\nDR0:%08lx DR1:%08lx DR2:%08lx DR3:%08lx DR6:%08lx DR7:%08lx\nCS:%08lx GS:%08lx FS:%08lx ES:%08lx DS:%08lx SS:%08lx Flags:%08lx", + eax(),ebx(),ecx(),edx(),eip(),ebp(),esp(),edi(),esi(), + dr0(),dr1(),dr2(),dr3(),dr6(),dr7(), + segCS(),segGS(),segFS(),segES(),segDS(),segSS(),eFlags()); + return contextString; +} + +inline +DWORD Context::contextFlags(void)const +{ + return CONTEXT::ContextFlags; +} + +inline +void Context::contextFlags(DWORD contextFlags) +{ + CONTEXT::ContextFlags=contextFlags; +} + +inline +DWORD Context::dr0(void)const +{ + return CONTEXT::Dr0; +} + +inline +void Context::dr0(DWORD dr0) +{ + CONTEXT::Dr0=dr0; +} + +inline +DWORD Context::dr1(void)const +{ + return CONTEXT::Dr1; +} + +inline +void Context::dr1(DWORD dr1) +{ + CONTEXT::Dr1=dr1; +} + +inline +DWORD Context::dr2(void)const +{ + return CONTEXT::Dr2; +} + +inline +void Context::dr2(DWORD dr2) +{ + CONTEXT::Dr2=dr2; +} + +inline +DWORD Context::dr3(void)const +{ + return CONTEXT::Dr3; +} + +inline +void Context::dr3(DWORD dr3) +{ + CONTEXT::Dr3=dr3; +} + +inline +DWORD Context::dr6(void)const +{ + return CONTEXT::Dr6; +} + +inline +void Context::dr6(DWORD dr6) +{ + CONTEXT::Dr6=dr6; +} + +inline +DWORD Context::dr7(void)const +{ + return CONTEXT::Dr7; +} + +inline +void Context::dr7(DWORD dr7) +{ + CONTEXT::Dr7=dr7; +} + +inline +FloatingSaveArea Context::floatingSaveArea(void)const +{ + return FloatingSaveArea(CONTEXT::FloatSave); +} + +inline +void Context::floatingSaveArea(const FloatingSaveArea &someFloatingSaveArea) +{ + ::memcpy((char*)&FloatSave,(char*)&((FLOATING_SAVE_AREA&)someFloatingSaveArea),sizeof(FLOATING_SAVE_AREA)); +} + +inline +DWORD Context::segCS(void)const +{ + return CONTEXT::SegCs; +} + +inline +void Context::segCS(DWORD segCS) +{ + CONTEXT::SegCs=segCS; +} + +inline +DWORD Context::segGS(void)const +{ + return CONTEXT::SegGs; +} + +inline +void Context::segGS(DWORD segGS) +{ + CONTEXT::SegGs=segGS; +} + +inline +DWORD Context::segFS(void)const +{ + return CONTEXT::SegFs; +} + +inline +void Context::segFS(DWORD segFS) +{ + CONTEXT::SegFs=segFS; +} + +inline +DWORD Context::segES(void)const +{ + return CONTEXT::SegEs; +} + +inline +void Context::segES(DWORD segES) +{ + CONTEXT::SegEs=segES; +} + +inline +DWORD Context::segDS(void)const +{ + return CONTEXT::SegDs; +} + +inline +void Context::segDS(DWORD segDS) +{ + CONTEXT::SegDs=segDS; +} + +inline +DWORD Context::segSS(void)const +{ + return CONTEXT::SegSs; +} + +inline +void Context::segSS(DWORD segSS) +{ + CONTEXT::SegSs=segSS; +} + +inline +DWORD Context::edi(void)const +{ + return CONTEXT::Edi; +} + +inline +void Context::edi(DWORD edi) +{ + CONTEXT::Edi=edi; +} + +inline +DWORD Context::esi(void)const +{ + return CONTEXT::Esi; +} + +inline +void Context::esi(DWORD esi) +{ + CONTEXT::Esi=esi; +} + +inline +DWORD Context::ebx(void)const +{ + return CONTEXT::Ebx; + +} + +inline +void Context::ebx(DWORD ebx) +{ + CONTEXT::Ebx=ebx; +} + +inline +DWORD Context::edx(void)const +{ + return CONTEXT::Edx; +} + +inline +void Context::edx(DWORD edx) +{ + CONTEXT::Edx=edx; +} + +inline +DWORD Context::ecx(void)const +{ + return CONTEXT::Ecx; +} + +inline +void Context::ecx(DWORD ecx) +{ + CONTEXT::Ecx=ecx; +} + +inline +DWORD Context::eax(void)const +{ + return CONTEXT::Eax; +} + +inline +void Context::eax(DWORD eax) +{ + CONTEXT::Eax=eax; +} + +inline +DWORD Context::ebp(void)const +{ + return CONTEXT::Ebp; +} + +inline +void Context::ebp(DWORD ebp) +{ + CONTEXT::Ebp=ebp; +} + +inline +DWORD Context::eip(void)const +{ + return CONTEXT::Eip; +} + +inline +void Context::eip(DWORD eip) +{ + CONTEXT::Eip=eip; +} + +inline +DWORD Context::esp(void)const +{ + return CONTEXT::Esp; +} + +inline +void Context::esp(DWORD esp) +{ + CONTEXT::Esp=esp; +} + +inline +DWORD Context::eFlags(void)const +{ + return CONTEXT::EFlags; +} + +inline +void Context::eFlags(DWORD eFlags) +{ + CONTEXT::EFlags=eFlags; +} + +inline +BOOL Context::cf(void)const +{ + return eFlags()&MaskCarry?TRUE:FALSE; +} + +inline +BOOL Context::zf(void)const +{ + return eFlags()&MaskZero?TRUE:FALSE; +} + +inline +BOOL Context::sf(void)const +{ + return eFlags()&MaskSign?TRUE:FALSE; +} + +inline +BOOL Context::of(void)const +{ + return eFlags()&MaskOverflow?TRUE:FALSE; +} + +inline +BOOL Context::pf(void)const +{ + return eFlags()&MaskParity?TRUE:FALSE; +} + +inline +BOOL Context::af(void)const +{ + return eFlags()&MaskAuxiliaryCarry?TRUE:FALSE; +} + +inline +BOOL Context::ie(void)const +{ + return eFlags()&&MaskInterruptEnable?TRUE:FALSE; +} + +inline +BOOL Context::df(void)const +{ + return eFlags()&MaskDirection?TRUE:FALSE; +} + +inline +void Context::setZero(void) +{ + ::memset((char*)&((CONTEXT&)*this),0,sizeof(CONTEXT)); +} + +inline +WORD Context::getThreadContext(HANDLE hThread) +{ + return ::GetThreadContext(hThread,&((CONTEXT&)*this)); +} + +inline +WORD Context::setThreadContext(HANDLE hThread) +{ + return ::SetThreadContext(hThread,&((CONTEXT&)*this)); +} +#endif diff --git a/thread/EVENT.CPP b/thread/EVENT.CPP new file mode 100644 index 0000000..858c226 --- /dev/null +++ b/thread/EVENT.CPP @@ -0,0 +1,40 @@ +#include +#include + +Event::Event(BOOL manualReset) +: mhEvent(0), mEventName("Event") +{ + PostFix postFix; + postFix.postFix(mEventName); + mhEvent=::CreateEvent((LPSECURITY_ATTRIBUTES)0,manualReset,FALSE,mEventName); +} + +Event::Event(const String &eventName,BOOL postFixup,BOOL manualReset) +: mhEvent(0) +{ + PostFix postFix; + if(eventName.isNull())return; + mEventName=eventName; + if(postFixup)postFix.postFix(mEventName); + mhEvent=::CreateEvent((LPSECURITY_ATTRIBUTES)0,manualReset,FALSE,mEventName); +} + +WORD Event::waitEvent(DWORD timeOut,WORD alertable)const +{ + DWORD waitResult; + + if(!isOkay())return FALSE; + waitResult=::WaitForSingleObjectEx(mhEvent,timeOut,alertable); + if(WAIT_ABANDONED==waitResult)return FALSE; + else if(WAIT_TIMEOUT==waitResult)return FALSE; + else if(WAIT_OBJECT_0==waitResult)return TRUE; + else return TRUE; +} + +WORD Event::closeEvent(void) +{ + if(!isOkay())return FALSE; + ::CloseHandle(mhEvent); + mhEvent=0; + return TRUE; +} diff --git a/thread/EVENT.HPP b/thread/EVENT.HPP new file mode 100644 index 0000000..0272564 --- /dev/null +++ b/thread/EVENT.HPP @@ -0,0 +1,86 @@ +#ifndef _THREAD_EVENT_HPP_ +#define _THREAD_EVENT_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Event +{ +public: + Event(BOOL manualReset=TRUE); + Event(const String &eventName,BOOL postFixup=TRUE,BOOL manualReset=TRUE); + virtual ~Event(); + operator HANDLE(void); + WORD setEvent(void)const; + WORD pulseEvent(void)const; + WORD resetEvent(void)const; + WORD waitEvent(DWORD timeOut=INFINITE,WORD alertable=FALSE)const; + WORD closeEvent(void); + BOOL openEvent(const String &strEventName); + BOOL isOkay(void)const; + const String &eventName(void)const; +private: + HANDLE mhEvent; + String mEventName; +}; + +inline +Event::~Event() +{ + closeEvent(); +} + +inline +Event::operator HANDLE(void) +{ + return mhEvent; +} + +inline +WORD Event::setEvent(void)const +{ + if(!mhEvent)return FALSE; + return ::SetEvent(mhEvent); +} + +inline +WORD Event::pulseEvent(void)const +{ + if(!mhEvent)return FALSE; + return ::PulseEvent(mhEvent); +} + +inline +WORD Event::resetEvent(void)const +{ + if(!mhEvent)return FALSE; + return ::ResetEvent(mhEvent); +} + +inline +const String &Event::eventName(void)const +{ + return mEventName; +} + +inline +BOOL Event::isOkay(void)const +{ + return mhEvent?TRUE:FALSE; +} + +inline +BOOL Event::openEvent(const String &strEventName) +{ + closeEvent(); + mEventName=strEventName; + mhEvent=::OpenEvent(EVENT_ALL_ACCESS,TRUE,(LPSTR)(String&)strEventName); + return isOkay(); +} +#endif diff --git a/thread/MONITOR.HPP b/thread/MONITOR.HPP new file mode 100644 index 0000000..23099e8 --- /dev/null +++ b/thread/MONITOR.HPP @@ -0,0 +1,71 @@ +#ifndef _THREAD_MONITOR_HPP_ +#define _THREAD_MONITOR_HPP_ +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif + +template +class Monitor +{ +public: + Monitor(void); + virtual ~Monitor(); + void enter(void); + void leave(void); + T *operator->(void); + operator T*(void); + Monitor &operator=(T *pObj); +private: + T *mlpObj; + Mutex mMutex; +}; + +template +inline +Monitor::Monitor(void) +: mlpObj(0) +{ +} + +template +inline +Monitor::~Monitor() +{ +} + +template +inline +T *Monitor::operator->(void) +{ + return mlpObj; +} + +template +inline +Monitor::operator T*(void) +{ + return mlpObj; +} + +template +inline +Monitor &Monitor::operator=(T *pObj) +{ + mlpObj=pObj; + return *this; +} + +template +inline +void Monitor::enter(void) +{ + mMutex.requestMutex(); +} + +template +inline +void Monitor::leave(void) +{ + mMutex.releaseMutex(); +} +#endif \ No newline at end of file diff --git a/thread/MSGQUEUE.CPP b/thread/MSGQUEUE.CPP new file mode 100644 index 0000000..c8a70b3 --- /dev/null +++ b/thread/MSGQUEUE.CPP @@ -0,0 +1,123 @@ +#include + +WORD MessageQueue::postMessage(ThreadMessage &someThreadMessage) +{ + mMutexSemaphore.requestMutex(); + mNamedEvent.resetEvent(); + if(isQueueLocked()){mMutexSemaphore.releaseMutex();return FALSE;} + putQueueMessage(someThreadMessage); + mNamedEvent.setEvent(); + mMutexSemaphore.releaseMutex(); + return TRUE; +} + +WORD MessageQueue::itemsInQueue(void) +{ + WORD queueMessages; + + mMutexSemaphore.requestMutex(); + queueMessages=mMessageQueueHigh.size(); + queueMessages+=mMessageQueueNormal.size(); + queueMessages+=mMessageQueueLow.size(); + mMutexSemaphore.releaseMutex(); + return queueMessages; +} + +WORD MessageQueue::waitMessage(ThreadMessage &someThreadMessage) +{ + mNamedEvent.waitEvent(INFINITE,mIsAlertable); + mMutexSemaphore.requestMutex(); + if(!getQueueMessage(someThreadMessage)) + { + mMutexSemaphore.releaseMutex(); + mNamedEvent.resetEvent(); + return FALSE; + } + if(isQueueEmpty())mNamedEvent.resetEvent(); + mMutexSemaphore.releaseMutex(); + return TRUE; +} + +WORD MessageQueue::peekMessage(ThreadMessage &someThreadMessage) +{ + WORD returnCode; + mMutexSemaphore.requestMutex(); + returnCode=peekQueueMessage(someThreadMessage); + mMutexSemaphore.releaseMutex(); + return returnCode; +} + +WORD MessageQueue::putQueueMessage(ThreadMessage &someThreadMessage) +{ + if(ThreadMessage::PriorityNormal==someThreadMessage.priority()) + mMessageQueueNormal.insert(&someThreadMessage); + else if(ThreadMessage::PriorityHigh==someThreadMessage.priority()) + mMessageQueueHigh.insert(&someThreadMessage); + else mMessageQueueLow.insert(&someThreadMessage); + return TRUE; +} + +WORD MessageQueue::getQueueMessage(ThreadMessage &someThreadMessage) +{ + if(isQueueEmpty())return FALSE; + + if(mMessageQueueHigh.size()) + { + someThreadMessage=mMessageQueueHigh[0]; + mMessageQueueHigh.remove(0L); + } + else if(mMessageQueueNormal.size()) + { + someThreadMessage=mMessageQueueNormal[0]; + mMessageQueueNormal.remove(0L); + } + else + { + someThreadMessage=mMessageQueueLow[0]; + mMessageQueueLow.remove(0L); + } + return TRUE; +} + +WORD MessageQueue::peekQueueMessage(ThreadMessage &someThreadMessage) +{ + if(isQueueEmpty())return FALSE; + if(mMessageQueueHigh.size())someThreadMessage=mMessageQueueHigh[mMessageQueueHigh.size()-1]; + else if(mMessageQueueNormal.size())someThreadMessage=mMessageQueueNormal[mMessageQueueNormal.size()-1]; + else if(mMessageQueueLow.size())someThreadMessage=mMessageQueueLow[mMessageQueueLow.size()-1]; + else return FALSE; + return TRUE; +} + +WORD MessageQueue::isQueueEmpty(void)const +{ + WORD queueMessages; + + queueMessages=mMessageQueueHigh.size(); + queueMessages+=mMessageQueueNormal.size(); + queueMessages+=mMessageQueueLow.size(); + return (0==queueMessages); +} + +void MessageQueue::shutdownQueue(void) +{ + mMutexSemaphore.requestMutex(); + mMessageQueueHigh.remove(); + mMessageQueueNormal.remove(); + mMessageQueueLow.remove(); + mQueueStatus=QueueLocked; + mMutexSemaphore.releaseMutex(); + mNamedEvent.setEvent(); +} + +void MessageQueue::restartQueue(void) +{ + mMutexSemaphore.requestMutex(); + mMessageQueueHigh.remove(); + mMessageQueueNormal.remove(); + mMessageQueueLow.remove(); + mQueueStatus=QueueOpen; + mMutexSemaphore.releaseMutex(); + mNamedEvent.setEvent(); +} + diff --git a/thread/MSGQUEUE.HPP b/thread/MSGQUEUE.HPP new file mode 100644 index 0000000..162fa85 --- /dev/null +++ b/thread/MSGQUEUE.HPP @@ -0,0 +1,71 @@ +#ifndef _THREAD_MESSAGEQUEUE_HPP_ +#define _THREAD_MESSAGEQUEUE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif +#ifndef _THREAD_THREADMESSAGE_HPP_ +#include +#endif + +class MessageQueue +{ +public: + enum QueueStatus{QueueLocked,QueueOpen}; + MessageQueue(void); + virtual ~MessageQueue(); + WORD postMessage(ThreadMessage &someThreadMessage); + WORD peekMessage(ThreadMessage &someThreadMessage); + WORD waitMessage(ThreadMessage &someThreadMessage); + WORD itemsInQueue(void); + void shutdownQueue(void); + void restartQueue(void); + void isAlertable(WORD isAlertable); +private: + WORD putQueueMessage(ThreadMessage &someThreadMessage); + WORD peekQueueMessage(ThreadMessage &someThreadMessage); + WORD getQueueMessage(ThreadMessage &someThreadMessage); + WORD isQueueEmpty(void)const; + WORD isQueueLocked(void)const; + + WORD mIsAlertable; + Event mNamedEvent; + Mutex mMutexSemaphore; + QueueStatus mQueueStatus; + Block mMessageQueueHigh; + Block mMessageQueueNormal; + Block mMessageQueueLow; +}; + +inline +MessageQueue::MessageQueue(void) +: mNamedEvent("MESSAGEQUEUENAMEDEVENT"), mMutexSemaphore("MESSAGEQUEUENAMEDMUTEX"), + mQueueStatus(QueueOpen), mIsAlertable(FALSE) +{ +} + +inline +MessageQueue::~MessageQueue() +{ +} + +inline +WORD MessageQueue::isQueueLocked(void)const +{ + return QueueLocked==mQueueStatus; +} + +inline +void MessageQueue::isAlertable(WORD isAlertable) +{ + mIsAlertable=isAlertable; +} +#endif diff --git a/thread/MTHREAD.BAK b/thread/MTHREAD.BAK new file mode 100644 index 0000000..97855f2 --- /dev/null +++ b/thread/MTHREAD.BAK @@ -0,0 +1,104 @@ +#ifndef _THREAD_MESSAGETHREAD_HPP_ +#define _THREAD_MESSAGETHREAD_HPP_ +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _THREAD_QUEUETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGEQUEUE_HPP_ +#include +#endif +#ifndef _THREAD_THREADCALLBACK_HPP_ +#include +#endif + +class MessageThread : private QueueThread +{ +public: + MessageThread(void); + virtual ~MessageThread(); + WORD postMessage(ThreadMessage &someThreadMessage); + WORD sendMessage(ThreadMessage &someThreadMessage); + WORD peekMessage(ThreadMessage &someThreadMessage); + WORD messageCount(void); + DWORD suspend(void); + DWORD resume(void); + DWORD wait(DWORD timeout)const; + void stop(void); + void isAlertable(WORD isAlertable); + WORD insertHandler(PureThreadCallback *lpThreadCallback); + void removeHandler(PureThreadCallback *lpThreadCallback); +private: + WORD getMessage(ThreadMessage &someThreadMessage); + void dispatchMessage(ThreadMessage &someThreadMessage); + void startup(void); + void shutdown(void); + void messageLoop(void); + void removeHandlers(void); + + MessageQueue mMessageQueue; + Mutex mMessageThreadMutex; + Block mThreadCallback; +}; + +inline +WORD MessageThread::postMessage(ThreadMessage &someThreadMessage) +{ + someThreadMessage.messageTime().refresh(); + mMessageQueue.postMessage(someThreadMessage); + return TRUE; +} + +inline +WORD MessageThread::sendMessage(ThreadMessage &someThreadMessage) +{ + someThreadMessage.messageTime().refresh(); + someThreadMessage.priority(ThreadMessage::PriorityHigh); + postMessage(someThreadMessage); + ::SleepEx(0,FALSE); // give up remainder of quantum so message can be processed + return TRUE; +} + +inline +WORD MessageThread::getMessage(ThreadMessage &someThreadMessage) +{ + return mMessageQueue.waitMessage(someThreadMessage); +} + +inline +WORD MessageThread::peekMessage(ThreadMessage &someThreadMessage) +{ + return mMessageQueue.peekMessage(someThreadMessage); +} + +inline +WORD MessageThread::messageCount(void) +{ + return mMessageQueue.itemsInQueue(); +} + +inline +DWORD MessageThread::suspend(void) +{ + return QueueThread::suspend(); +} + +inline +DWORD MessageThread::resume(void) +{ + return QueueThread::resume(); +} + +inline +DWORD MessageThread::wait(DWORD timeout)const +{ + return QueueThread::wait(timeout); +} + +inline +void MessageThread::isAlertable(WORD isAlertable) +{ + mMessageQueue.isAlertable(isAlertable); +} +#endif diff --git a/thread/MTHREAD.CPP b/thread/MTHREAD.CPP new file mode 100644 index 0000000..c53fed8 --- /dev/null +++ b/thread/MTHREAD.CPP @@ -0,0 +1,93 @@ +#include + +MessageThread::MessageThread(bool startup) +: mMessageThreadMutex("MessageThreadMutex") +{ + if(startup)start(); +} + +MessageThread::~MessageThread() +{ + stop(); +} + +void MessageThread::stop(void) +{ + ThreadMessage threadMessage(ThreadMessage::TM_DESTROY,0L,0L,ThreadMessage::PriorityHigh); + + if(!isRunning())return; + QueueThread::stop(); + resume(); + sendMessage(threadMessage); + removeHandlers(); + wait(INFINITE); + mMessageQueue.shutdownQueue(); +} + +WORD MessageThread::insertHandler(PureThreadCallback *lpThreadCallback) +{ + WORD returnCode; + + mMessageThreadMutex.requestMutex(); + mThreadCallback.insert(&ThreadCallbackPointer(lpThreadCallback)); + returnCode=mThreadCallback.size(); + mMessageThreadMutex.releaseMutex(); + return returnCode; +} + +void MessageThread::removeHandler(PureThreadCallback *lpThreadCallback) +{ + size_t itemCount; + + mMessageThreadMutex.requestMutex(); + itemCount=(size_t)mThreadCallback.size(); + for(short vectorIndex=0;vectorIndex +#endif +#ifndef _THREAD_QUEUETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_MESSAGEQUEUE_HPP_ +#include +#endif +#ifndef _THREAD_THREADCALLBACK_HPP_ +#include +#endif + +class MessageThread : protected QueueThread +{ +public: + MessageThread(bool startup=true); + virtual ~MessageThread(); + WORD postMessage(ThreadMessage &someThreadMessage); + WORD sendMessage(ThreadMessage &someThreadMessage); + WORD peekMessage(ThreadMessage &someThreadMessage); + WORD messageCount(void); + DWORD suspend(void); + DWORD resume(void); + DWORD wait(DWORD timeout=INFINITE,bool alertable=false)const; + void stop(void); + void isAlertable(WORD isAlertable); + WORD insertHandler(PureThreadCallback *lpThreadCallback); + void removeHandler(PureThreadCallback *lpThreadCallback); +protected: + void startup(void); + void shutdown(void); + void messageLoop(void); +private: + WORD getMessage(ThreadMessage &someThreadMessage); + void dispatchMessage(ThreadMessage &someThreadMessage); + void removeHandlers(void); + + MessageQueue mMessageQueue; + Mutex mMessageThreadMutex; + Block mThreadCallback; +}; + +inline +WORD MessageThread::postMessage(ThreadMessage &someThreadMessage) +{ + someThreadMessage.messageTime().refresh(); + mMessageQueue.postMessage(someThreadMessage); + return TRUE; +} + +inline +WORD MessageThread::sendMessage(ThreadMessage &someThreadMessage) +{ + someThreadMessage.messageTime().refresh(); + someThreadMessage.priority(ThreadMessage::PriorityHigh); + postMessage(someThreadMessage); + ::SleepEx(0,FALSE); // give up remainder of quantum so message can be processed + return TRUE; +} + +inline +WORD MessageThread::getMessage(ThreadMessage &someThreadMessage) +{ + return mMessageQueue.waitMessage(someThreadMessage); +} + +inline +WORD MessageThread::peekMessage(ThreadMessage &someThreadMessage) +{ + return mMessageQueue.peekMessage(someThreadMessage); +} + +inline +WORD MessageThread::messageCount(void) +{ + return mMessageQueue.itemsInQueue(); +} + +inline +DWORD MessageThread::suspend(void) +{ + return QueueThread::suspend(); +} + +inline +DWORD MessageThread::resume(void) +{ + return QueueThread::resume(); +} + +inline +DWORD MessageThread::wait(DWORD timeout,bool alertable)const +{ + return QueueThread::wait(timeout,alertable); +} + +inline +void MessageThread::isAlertable(WORD isAlertable) +{ + mMessageQueue.isAlertable(isAlertable); +} +#endif diff --git a/thread/MUTEX.CPP b/thread/MUTEX.CPP new file mode 100644 index 0000000..9a1a3b3 --- /dev/null +++ b/thread/MUTEX.CPP @@ -0,0 +1,48 @@ +#include +#include + +Mutex::Mutex(void) +: mhMutex(0), mMutexName("Mutex") +{ + PostFix postFix; + postFix.postFix(mMutexName); + mhMutex=::CreateMutex((LPSECURITY_ATTRIBUTES)0,FALSE,mMutexName); +} + +Mutex::Mutex(const String &mutexName,BOOL postFixup) +: mhMutex(0) +{ + PostFix postFix; + if(mutexName.isNull())return; + mMutexName=mutexName; + if(postFixup)postFix.postFix(mMutexName); + mhMutex=::CreateMutex((LPSECURITY_ATTRIBUTES)0,FALSE,mMutexName); +} + +WORD Mutex::requestMutex(DWORD waitTime,WORD alertable)const +{ + DWORD waitResult; + + if(!isOkay())return FALSE; + waitResult=::WaitForSingleObjectEx(mhMutex,waitTime,alertable); + if(WAIT_ABANDONED==waitResult)return FALSE; + else if(WAIT_TIMEOUT==waitResult)return FALSE; + else if(WAIT_OBJECT_0==waitResult)return TRUE; + else return TRUE; + return TRUE; +} + +WORD Mutex::releaseMutex(void)const +{ + if(!isOkay())return FALSE; + return ::ReleaseMutex(mhMutex); +} + +WORD Mutex::closeMutex(void) +{ + if(!isOkay())return FALSE; + ::CloseHandle(mhMutex); + mhMutex=0; + return TRUE; +} + diff --git a/thread/MUTEX.HPP b/thread/MUTEX.HPP new file mode 100644 index 0000000..bdbc6f2 --- /dev/null +++ b/thread/MUTEX.HPP @@ -0,0 +1,56 @@ +#ifndef _THREAD_MUTEX_HPP_ +#define _THREAD_MUTEX_HPP_ +#ifndef _COMMON_STDIO_HPP_ +#include +#endif +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class Mutex +{ +public: + Mutex(void); + Mutex(const String &mutexName,BOOL postFixup=TRUE); + virtual ~Mutex(); + WORD requestMutex(DWORD waitTime=INFINITE,WORD alertable=FALSE)const; + WORD releaseMutex(void)const; + WORD closeMutex(void); + BOOL openMutex(const String &strMutexName); + const String &mutexName(void)const; + BOOL isOkay(void)const; +private: + HANDLE mhMutex; + String mMutexName; +}; + +inline +Mutex::~Mutex() +{ + closeMutex(); +} + +inline +BOOL Mutex::openMutex(const String &strMutexName) +{ + closeMutex(); + mMutexName=strMutexName; + mhMutex=::OpenMutex(EVENT_ALL_ACCESS,TRUE,(LPSTR)(String&)strMutexName); + return isOkay(); +} + +inline +const String &Mutex::mutexName(void)const +{ + return mMutexName; +} + +inline +BOOL Mutex::isOkay(void)const +{ + return mhMutex?TRUE:FALSE; +} +#endif diff --git a/thread/POSTFIX.HPP b/thread/POSTFIX.HPP new file mode 100644 index 0000000..ef6eabb --- /dev/null +++ b/thread/POSTFIX.HPP @@ -0,0 +1,47 @@ +#ifndef _THREAD_POSTFIX_HPP_ +#define _THREAD_POSTFIX_HPP_ + +class PostFix +{ +public: + PostFix(void); + virtual ~PostFix(); + void postFix(String &eventName)const; +private: + PostFix(const PostFix &somePostFix); + PostFix &operator=(const PostFix &somePostFix); +}; + +inline +PostFix::PostFix(void) +{ +} + +inline +PostFix::PostFix(const PostFix &/*somePostFix*/) +{ +} + +inline +PostFix::~PostFix() +{ +} + +inline +PostFix &PostFix::operator=(const PostFix &/*somePostFix*/) +{ + return *this; +} + +inline +void PostFix::postFix(String &eventName)const +{ + String eventNamePostFix; + String invalidTokens(":./\\"); + + eventName.removeTokens(invalidTokens); + ::sprintf(eventNamePostFix,"@%ld@%ld",(LONG)this,::GetTickCount()); + eventName+=eventNamePostFix; +} +#endif + diff --git a/thread/PTCLLBCK.CPP b/thread/PTCLLBCK.CPP new file mode 100644 index 0000000..8bff16d --- /dev/null +++ b/thread/PTCLLBCK.CPP @@ -0,0 +1,6 @@ +#include + +DWORD PureThreadCallback::operator*(ThreadMessage &/*someCallbackData*/) +{ + return 0; +} diff --git a/thread/PTCLLBCK.HPP b/thread/PTCLLBCK.HPP new file mode 100644 index 0000000..c8026eb --- /dev/null +++ b/thread/PTCLLBCK.HPP @@ -0,0 +1,25 @@ +#ifndef _THREAD_PURETHREADCALLBACK_HPP_ +#define _THREAD_PURETHREADCALLBACK_HPP_ +#ifndef _THREAD_THREADMESSAGE_HPP_ +#include +#endif + +class PureThreadCallback +{ +public: + PureThreadCallback(void); + virtual ~PureThreadCallback(); + virtual DWORD operator*(ThreadMessage &someThreadMessage)=0; +private: +}; + +inline +PureThreadCallback::PureThreadCallback(void) +{ +} + +inline +PureThreadCallback::~PureThreadCallback() +{ +} +#endif diff --git a/thread/QTHREAD.CPP b/thread/QTHREAD.CPP new file mode 100644 index 0000000..4fd88f8 --- /dev/null +++ b/thread/QTHREAD.CPP @@ -0,0 +1,43 @@ +#include +#include + +DWORD WINAPI QueueThread::sThreadProc(LPVOID lpInstanceData) +{ + String infoBuff; + + ::sprintf(infoBuff," Thread 0x%08lx started.\n",::GetCurrentThreadId()); + ::OutputDebugString(infoBuff); + QueueThread &queueThread=(*((QueueThread*)lpInstanceData)); + queueThread.mQueueThreadDestructorMutex.requestMutex(); + queueThread.startupex(); + queueThread.startup(); + queueThread.messageLoop(); + queueThread.shutdown(); + queueThread.mQueueThreadDestructorMutex.releaseMutex(); + ::sprintf(infoBuff," Thread 0x%08lx exited normally.\n",::GetCurrentThreadId()); + ::OutputDebugString(infoBuff); + return FALSE; +} + +void QueueThread::startupex(void) +{ + mQueueThreadStartupEvent.setEvent(); +} + +// virtual defaults + +void QueueThread::startup(void) +{ + return; +} + +void QueueThread::messageLoop(void) +{ + return; +} + +void QueueThread::shutdown(void) +{ + return; +} + diff --git a/thread/QTHREAD.HPP b/thread/QTHREAD.HPP new file mode 100644 index 0000000..89e563a --- /dev/null +++ b/thread/QTHREAD.HPP @@ -0,0 +1,71 @@ +#ifndef _THREAD_QUEUETHREAD_HPP_ +#define _THREAD_QUEUETHREAD_HPP_ +#ifndef _THREAD_PURETHREAD_HPP_ +#include +#endif +#ifndef _THREAD_THREADMESSAGE_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif +#ifndef _THREAD_EVENT_HPP_ +#include +#endif + +class QueueThread : public PureThread +{ +public: + QueueThread(void); + virtual ~QueueThread(); + WORD start(void); + void stop(void); + WORD isRunning(void)const; +protected: + virtual void startup(void); + virtual void shutdown(void); + virtual void messageLoop(void); +private: + void startupex(void); + static DWORD WINAPI sThreadProc(LPVOID lpInstanceData); + WORD mIsRunning; + Mutex mQueueThreadDestructorMutex; + Event mQueueThreadStartupEvent; +}; + +inline +QueueThread::QueueThread(void) +: PureThread(sThreadProc), mIsRunning(FALSE), + mQueueThreadDestructorMutex("QUEUETHREADDESTRUCTORMUTEX"), + mQueueThreadStartupEvent("QUEUETHREADSTARTUPEVENT") +{ +} + +inline +QueueThread::~QueueThread() +{ + mQueueThreadDestructorMutex.requestMutex(); + mQueueThreadDestructorMutex.releaseMutex(); +} + +inline +WORD QueueThread::start(void) +{ + if(!PureThread::start((void*)this))return FALSE; + if(!(mIsRunning=PureThread::resume()))return FALSE; + mQueueThreadStartupEvent.waitEvent(); + return mIsRunning; +} + +inline +void QueueThread::stop(void) +{ + mIsRunning=FALSE; +} + +inline +WORD QueueThread::isRunning(void)const +{ + return mIsRunning; +} +#endif diff --git a/thread/Release/thread.lib b/thread/Release/thread.lib new file mode 100644 index 0000000..4e213c1 Binary files /dev/null and b/thread/Release/thread.lib differ diff --git a/thread/Release/vc60.idb b/thread/Release/vc60.idb new file mode 100644 index 0000000..3b30745 Binary files /dev/null and b/thread/Release/vc60.idb differ diff --git a/thread/SAVEAREA.HPP b/thread/SAVEAREA.HPP new file mode 100644 index 0000000..e7e4e8b --- /dev/null +++ b/thread/SAVEAREA.HPP @@ -0,0 +1,186 @@ +#ifndef _THREAD_FLOATINGSAVEAREA_HPP_ +#define _THREAD_FLOATINGSAVEAREA_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_WINNT_HPP_ +#include +#endif + +class FloatingSaveArea : private FLOATING_SAVE_AREA +{ +public: + FloatingSaveArea(void); + FloatingSaveArea(const FloatingSaveArea &someFloatingSaveArea); + FloatingSaveArea(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA); + virtual ~FloatingSaveArea(); + FloatingSaveArea &operator=(const FloatingSaveArea &someFloatingSaveArea); + FloatingSaveArea &operator=(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA); + WORD operator==(const FloatingSaveArea &someFloatingSaveArea); + WORD operator==(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA); + BYTE &operator[](WORD itemIndex); + DWORD statusWord(void)const; + void statusWord(DWORD statusWord); + DWORD tagWord(void)const; + void tagWord(DWORD tagWord); + DWORD errorOffset(void)const; + void errorOffset(DWORD errorOffset); + DWORD errorSelector(void)const; + void errorSelector(DWORD errorSelector); + DWORD dataOffset(void)const; + void dataOffset(DWORD dataOffset); + DWORD dataSelector(void)const; + void dataSelector(DWORD dataSelector); + DWORD cr0NpxState(void)const; + void cr0NpxState(DWORD cr0NpxState); +private: + void setZero(void); +}; + +inline +FloatingSaveArea::FloatingSaveArea(void) +{ + setZero(); +} + +inline +FloatingSaveArea::FloatingSaveArea(const FloatingSaveArea &someFloatingSaveArea) +{ + *this=someFloatingSaveArea; +} + +inline +FloatingSaveArea::FloatingSaveArea(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA) +{ + *this=someFLOATINGSAVEAREA; +} + +inline +FloatingSaveArea::~FloatingSaveArea() +{ +} + +inline +FloatingSaveArea &FloatingSaveArea::operator=(const FloatingSaveArea &someFloatingSaveArea) +{ + ::memcpy((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&((FLOATING_SAVE_AREA&)someFloatingSaveArea),sizeof(FLOATING_SAVE_AREA)); + return *this; +} + +inline +FloatingSaveArea &FloatingSaveArea::operator=(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA) +{ + ::memcpy((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&(someFLOATINGSAVEAREA),sizeof(FLOATING_SAVE_AREA)); + return *this; +} + +inline +WORD FloatingSaveArea::operator==(const FloatingSaveArea &someFloatingSaveArea) +{ + return (::memcmp((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&((FLOATING_SAVE_AREA&)someFloatingSaveArea),sizeof(FLOATING_SAVE_AREA))?FALSE:TRUE); +} + +inline +WORD FloatingSaveArea::operator==(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA) +{ + return (::memcmp((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&((FLOATING_SAVE_AREA&)someFLOATINGSAVEAREA),sizeof(FLOATING_SAVE_AREA))?FALSE:TRUE); +} + +inline +BYTE &FloatingSaveArea::operator[](WORD itemIndex) +{ + if(itemIndex>=SIZE_OF_80387_REGISTERS)itemIndex=0; + return FLOATING_SAVE_AREA::RegisterArea[itemIndex]; +} + +inline +DWORD FloatingSaveArea::statusWord(void)const +{ + return FLOATING_SAVE_AREA::StatusWord; +} + +inline +void FloatingSaveArea::statusWord(DWORD statusWord) +{ + FLOATING_SAVE_AREA::StatusWord=statusWord; +} + +inline +DWORD FloatingSaveArea::tagWord(void)const +{ + return FLOATING_SAVE_AREA::TagWord; +} + +inline +void FloatingSaveArea::tagWord(DWORD tagWord) +{ + FLOATING_SAVE_AREA::TagWord=tagWord; +} + +inline +DWORD FloatingSaveArea::errorOffset(void)const +{ + return FLOATING_SAVE_AREA::ErrorOffset; +} + +inline +void FloatingSaveArea::errorOffset(DWORD errorOffset) +{ + FLOATING_SAVE_AREA::ErrorOffset=errorOffset; +} + +inline +DWORD FloatingSaveArea::errorSelector(void)const +{ + return FLOATING_SAVE_AREA::ErrorSelector; +} + +inline +void FloatingSaveArea::errorSelector(DWORD errorSelector) +{ + FLOATING_SAVE_AREA::ErrorSelector=errorSelector; +} + +inline +DWORD FloatingSaveArea::dataOffset(void)const +{ + return FLOATING_SAVE_AREA::DataOffset; +} + +inline +void FloatingSaveArea::dataOffset(DWORD dataOffset) +{ + FLOATING_SAVE_AREA::DataOffset=dataOffset; +} + +inline +DWORD FloatingSaveArea::dataSelector(void)const +{ + return FLOATING_SAVE_AREA::DataSelector; +} + +inline +void FloatingSaveArea::dataSelector(DWORD dataSelector) +{ + FLOATING_SAVE_AREA::DataSelector=dataSelector; +} + +inline +DWORD FloatingSaveArea::cr0NpxState(void)const +{ + return FLOATING_SAVE_AREA::Cr0NpxState; +} + +inline +void FloatingSaveArea::cr0NpxState(DWORD cr0NpxState) +{ + FLOATING_SAVE_AREA::Cr0NpxState=cr0NpxState; +} + +inline +void FloatingSaveArea::setZero(void) +{ + ::memset((char*)&((FLOATING_SAVE_AREA&)*this),0,sizeof(FLOATING_SAVE_AREA)); +} +#endif + diff --git a/thread/SCRAPS.TXT b/thread/SCRAPS.TXT new file mode 100644 index 0000000..6c93bf5 --- /dev/null +++ b/thread/SCRAPS.TXT @@ -0,0 +1,348 @@ +WORD MessageQueue::waitMessage(ThreadMessage &someThreadMessage) +{ + mNamedEvent.waitEvent(INFINITE,mIsAlertable); +// mNamedEvent.resetEvent(); + mMutexSemaphore.requestMutex(); + if(isQueueEmpty()){mMutexSemaphore.releaseMutex();mNamedEvent.resetEvent();return FALSE;} + getQueueMessage(someThreadMessage); + mMutexSemaphore.releaseMutex(); + return TRUE; +} + +WORD MessageQueue::getQueueMessage(ThreadMessage &someThreadMessage) +{ + if(isQueueEmpty())return FALSE; + + if(mMessageQueueHigh.size()) + { + someThreadMessage=mMessageQueueHigh[0]; + mMessageQueueHigh.remove(0L); +// someThreadMessage=mMessageQueueHigh[mMessageQueueHigh.size()-1]; +// mMessageQueueHigh.remove(mMessageQueueHigh.size()-1); + } + else if(mMessageQueueNormal.size()) + { + someThreadMessage=mMessageQueueNormal[0]; + mMessageQueueNormal.remove(0L); +// someThreadMessage=mMessageQueueNormal[mMessageQueueNormal.size()-1]; +// mMessageQueueNormal.remove(mMessageQueueNormal.size()-1); + } + else + { + someThreadMessage=mMessageQueueLow[0]; + mMessageQueueLow.remove(0L); +// someThreadMessage=mMessageQueueLow[mMessageQueueLow.size()-1]; +// mMessageQueueLow.remove(mMessageQueueLow.size()-1); + } + return TRUE; +} + + + + + +WORD PureThread::start(LPVOID lpCreationData) +{ + if(isOkay()||!mlpfnThreadProc)return FALSE; + mhThread=::CreateThread((SECURITY_ATTRIBUTES*)0,InitialStack,mlpfnThreadProc,lpCreationData,CREATE_SUSPENDED,&mThreadID); + mhThread=:: + if(!mhThread)return FALSE; + mThreadStatus=InSuspend; + return TRUE; +} + + +unsigned long _beginthread( void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist ); +unsigned long _beginthreadex( void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr ); +Routine +Required Header +Optional Headers +Compatibility +_beginthread + +Win 95, Win NT +_beginthreadex + +Win 95, Win NT +For additional compatibility information, see Compatibility in the Introduction. +Libraries +LIBCMT.LIB +Multithread static library, retail version +MSVCRT.LIB +Import library for MSVCRTx0.DLL, retail version +MSVCRTx0.DLL +Multithread DLL library, retail version +To use _beginthread or _beginthreadex, the application must link with one of the multithreaded C run-time libraries. +Return Value +If successful, each of these functions returns a handle to the newly created thread. _beginthread returns –1 on an error, in which case errno is set to EAGAIN if there are too many threads, or to EINVAL if the argument is invalid or the stack size is incorrect. _beginthreadex returns 0 on an error, in which case errno and doserrno are set. +Parameters +start_address Start address of routine that begins execution of new thread +stack_size Stack size for new thread or 0 +arglist Argument list to be passed to new thread or NULL +security Security descriptor for new thread; must be NULL for Windows 95 applications +initflag Initial state of new thread (running or suspended) +thrdaddr Address of new thread +_CRTIMP unsigned long __cdecl _beginthreadex(void *, unsigned, + unsigned (__stdcall *) (void *), void *, unsigned, unsigned *); + + + + +inline +BOOL Event::isOkay(void)const +{ +// return mhEvent?TRUE:FALSE; + return (mhEvent&&WAIT_TIMEOUT==::WaitForSingleObject(mhEvent,0)); +} + + + +WORD Event::waitEvent(DWORD timeOut,WORD alertable)const +{ + DWORD waitResult; + +// if(!mhEvent)return FALSE; + if(!isOkay())return FALSE; + waitResult=::WaitForSingleObjectEx(mhEvent,timeOut,alertable); + if(WAIT_ABANDONED==waitResult)return FALSE; + else if(WAIT_TIMEOUT==waitResult)return FALSE; + else if(WAIT_OBJECT_0==waitResult)return TRUE; + else return TRUE; +} + +WORD Event::closeEvent(void) +{ +// if(!mhEvent)return FALSE; + if(!isOkay())return FALSE; + ::CloseHandle(mhEvent); + mhEvent=0; + return TRUE; +} + + + + + +CallbackData::ReturnType TabPage::keyDownHandler(CallbackData &someCallbackData) +{ + GlobalDefs::outDebug("TabPage::keyDownHandler"); + KeyData keyData(someCallbackData); + + if(keyData.controlKeyPressed()&&Home==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=0; + showCurrent(); + } + else if(keyData.controlKeyPressed()&&End==keyData.virtualKey()) + { + clearUpdate(); + mCurrEntryIndex=mTabEntries.size()-1; + showCurrent(); + } + else if(RightArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+1getDevice(),false); + } + else ::MessageBeep(0); + } + else if(LeftArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-1>=0) + { + mCurrEntryIndex--; + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else ::MessageBeep(0); + } + else if(DownArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex+mItemsPerTab+1>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + else mCurrEntryIndex+=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(UpArrow==keyData.virtualKey()) + { + if(mCurrEntryIndex-(mItemsPerTab+1)<0)mCurrEntryIndex=0; + else mCurrEntryIndex-=(mItemsPerTab+1); + clearUpdate(); + showCurrent(); + TabEntry &entry=mTabEntries[mCurrEntryIndex]; + entry.play(mMIDIDevice->getDevice(),false); + } + else if(!keyData.shiftKeyPressed()&&Delete==keyData.virtualKey()) + { + cut(); + } + else if(!keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert after current position + { + Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + mCurrEntryIndex--; // smk + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + +/* Rect outlineRect; + GDIPoint cursorPos; + + ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + mTabEntries.insert(&TabEntry()); + mCurrEntryIndex=mTabEntries.size()-1; + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + clearUpdate(); + showCurrent(); + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); */ + } + else if(keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert at end + { + + + Rect outlineRect; + GDIPoint cursorPos; + +// ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + mTabEntries.insert(&TabEntry()); + mCurrEntryIndex=mTabEntries.size()-1; + if(!getFretEntry()) + { + mCurrEntryIndex--; + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + clearUpdate(); + showCurrent(); + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + + +/* Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); */ + } + GlobalDefs::outDebug(String("Key Code=")+String().fromInt(keyData.virtualKey())); + return false; +} + + + + + + else if(keyData.shiftKeyPressed()&&Insert==keyData.virtualKey()) // insert at end + { + + + Rect outlineRect; + GDIPoint cursorPos; + +// ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + mTabEntries.insert(&TabEntry()); + mCurrEntryIndex=mTabEntries.size()-1; + if(!getFretEntry()) + { + mCurrEntryIndex--; + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + clearUpdate(); + showCurrent(); + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + cursorPos.y(outlineRect.top()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); + + +/* Rect outlineRect; + TabEntry entry; + GDIPoint cursorPos; + + ::GetCursorPos(&cursorPos.getPOINT()); + clearUpdate(); + if(!mTabEntries.size()) + { + mTabEntries.insert(&entry); + mCurrEntryIndex=0; + } + else + { + mTabEntries.insertAfter(mCurrEntryIndex,&entry); + mCurrEntryIndex++; + } + if(!getFretEntry()) + { + mTabEntries.remove(mCurrEntryIndex); + if(mCurrEntryIndex>=mTabEntries.size())mCurrEntryIndex=mTabEntries.size()-1; + } + getOutlineRect(mCurrEntryIndex,outlineRect); + mParent->clientToScreen(outlineRect); + cursorPos.x(outlineRect.left()); + ::SetCursorPos(cursorPos.x(),cursorPos.y()); */ + } \ No newline at end of file diff --git a/thread/STDTMPL.CPP b/thread/STDTMPL.CPP new file mode 100644 index 0000000..0978854 --- /dev/null +++ b/thread/STDTMPL.CPP @@ -0,0 +1,16 @@ +#ifndef _MSC_VER +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Block a; +typedef Block b; +typedef Block c; +#endif diff --git a/thread/TCALLBCK.HPP b/thread/TCALLBCK.HPP new file mode 100644 index 0000000..7fa22ae --- /dev/null +++ b/thread/TCALLBCK.HPP @@ -0,0 +1,93 @@ +#ifndef _THREAD_THREADCALLBACK_HPP_ +#define _THREAD_THREADCALLBACK_HPP_ +#ifndef _THREAD_THREADMESSAGE_HPP_ +#include +#endif +#ifndef _THREAD_PURETHREADCALLBACK_HPP_ +#include +#endif +#ifndef _MSC_VER +#ifdef _EXPAND_THREAD_TEMPLATES_ +#pragma option -Jgd +#endif +#endif + +class ThreadCallbackPointer +{ +public: + ThreadCallbackPointer(void); + ThreadCallbackPointer(PureThreadCallback *lpCallback); + ThreadCallbackPointer(const ThreadCallbackPointer &someThreadCallbackPointer); + virtual ~ThreadCallbackPointer(); + void operator=(ThreadCallbackPointer &someThreadCallbackPointer); + WORD operator==(const ThreadCallbackPointer &someThreadCallbackPointer)const; + DWORD callback(ThreadMessage &someThreadMessage); +private: + PureThreadCallback *mlpCallback; +}; + +inline +ThreadCallbackPointer::ThreadCallbackPointer(void) +: mlpCallback(0) +{ +} + +inline +ThreadCallbackPointer::ThreadCallbackPointer(PureThreadCallback *lpCallback) +: mlpCallback(lpCallback) +{ +} + +inline +ThreadCallbackPointer::ThreadCallbackPointer(const ThreadCallbackPointer &someThreadCallbackPointer) +: mlpCallback(someThreadCallbackPointer.mlpCallback) +{ +} + +inline +ThreadCallbackPointer::~ThreadCallbackPointer() +{ +} + +inline +void ThreadCallbackPointer::operator=(ThreadCallbackPointer &someThreadCallbackPointer) +{ + mlpCallback=someThreadCallbackPointer.mlpCallback; +} + +inline +WORD ThreadCallbackPointer::operator==(const ThreadCallbackPointer &someThreadCallbackPointer)const +{ + return (mlpCallback==someThreadCallbackPointer.mlpCallback); +} + +inline +DWORD ThreadCallbackPointer::callback(ThreadMessage &someThreadMessage) +{ + if(!mlpCallback)return FALSE; + return mlpCallback->operator*(someThreadMessage); +} + +template +class ThreadCallback : public PureThreadCallback +{ +public: + typedef DWORD (T::*LPFNMETHOD)(ThreadMessage &someThreadMessage); + ThreadCallback(void); + ThreadCallback(const ThreadCallback &someThreadCallback); + ThreadCallback(T *lpObject,LPFNMETHOD lpMethod); + virtual ~ThreadCallback(); + void setObject(T *lpObject); + void setMethod(LPFNMETHOD lpMethod); + void setCallback(T *lpObject,LPFNMETHOD lpMethod); + WORD operator==(const ThreadCallback &someThreadCallback)const; + void operator=(const ThreadCallback &someThreadCallback); + DWORD operator*(ThreadMessage &someThreadMessage); +private: + T *mlpObject; + DWORD (T::*mlpMethod)(ThreadMessage &someThreadMessage); +}; +#if defined(_MSC_VER) +#include +#endif +#endif \ No newline at end of file diff --git a/thread/TCALLBCK.TPP b/thread/TCALLBCK.TPP new file mode 100644 index 0000000..8565c3c --- /dev/null +++ b/thread/TCALLBCK.TPP @@ -0,0 +1,74 @@ +#ifndef _THREAD_THREADCALLBACK_HPP_ +#error TCALLBCK.HPP MUST PRECEDE TCALLBCK.TPP +#endif + +template +ThreadCallback::ThreadCallback(void) +: mlpObject(0), mlpMethod(0) +{ +} + +template +ThreadCallback::ThreadCallback(const ThreadCallback &someThreadCallback) +: mlpObject(someThreadCallback.mlpObject), mlpMethod(someThreadCallback.mlpMethod) +{ +} +template +ThreadCallback::ThreadCallback(T *lpObject,LPFNMETHOD lpMethod) +: mlpObject(lpObject), mlpMethod(lpMethod) +{ +} + +template +ThreadCallback::~ThreadCallback() +{ +} + +template +WORD ThreadCallback::operator==(const ThreadCallback &someThreadCallback)const +{ + return (mlpObject==someThreadCallback.mlpObject && mlpMethod==someThreadCallback.mlpMethod); +} + +template +void ThreadCallback::operator=(const ThreadCallback &someThreadCallback) +{ + mlpObject=someThreadCallback.mlpObject; + mlpMethod=someThreadCallback.mlpMethod; +} + +template +void ThreadCallback::setObject(T *lpObject) +{ + mlpObject=lpObject; +} + +template +void ThreadCallback::setMethod(LPFNMETHOD lpMethod) +{ + mlpMethod=lpMethod; +} + +template +void ThreadCallback::setCallback(T *lpObject,LPFNMETHOD lpMethod) +{ + mlpObject=lpObject; + mlpMethod=lpMethod; +} + +#if defined(_MSC_VER) +template +DWORD ThreadCallback::operator*(ThreadMessage &someThreadMessage) +{ + DWORD (T::*lpMethod)(ThreadMessage &someThreadMessage)=0; + if((lpMethod==mlpMethod)||!mlpObject)return 0L; + return (mlpObject->*mlpMethod)(someThreadMessage); +} +#else +template +DWORD ThreadCallback::operator*(ThreadMessage &someThreadMessage) +{ + if(!mlpObject||!mlpMethod)return 0L; + return (mlpObject->*mlpMethod)(someThreadMessage); +} +#endif diff --git a/thread/TDCONFIG.TDW b/thread/TDCONFIG.TDW new file mode 100644 index 0000000..40ac47c Binary files /dev/null and b/thread/TDCONFIG.TDW differ diff --git a/thread/TDW.TRW b/thread/TDW.TRW new file mode 100644 index 0000000..e3273ab Binary files /dev/null and b/thread/TDW.TRW differ diff --git a/thread/THMSG.HPP b/thread/THMSG.HPP new file mode 100644 index 0000000..e9db762 --- /dev/null +++ b/thread/THMSG.HPP @@ -0,0 +1,138 @@ +#ifndef _THREAD_THREADMESSAGE_HPP_ +#define _THREAD_THREADMESSAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SYSTEMTIME_HPP_ +#include +#endif + +class ThreadMessage +{ +public: + enum TMMsg{TM_VOID,TM_CREATE,TM_DESTROY,TM_USER}; + enum TMPriority{PriorityLow,PriorityNormal,PriorityHigh}; + ThreadMessage(void); + ThreadMessage(TMMsg message,DWORD userDataOne=0L,DWORD userDataTwo=0L,TMPriority priority=PriorityNormal); + ThreadMessage(const ThreadMessage &someThreadMessage); + virtual ~ThreadMessage(); + ThreadMessage &operator=(const ThreadMessage &someThreadMessage); + WORD operator==(const ThreadMessage &someThreadMessage)const; + TMMsg message(void)const; + void message(TMMsg message); + DWORD userDataOne(void)const; + void userDataOne(DWORD userDataOne); + DWORD userDataTwo(void)const; + void userDataTwo(DWORD userDataTwo); + TMPriority priority(void)const; + void priority(TMPriority priority); + SystemTime &messageTime(void); + void messageTime(const SystemTime &messageTime); +private: + TMMsg mMessage; + TMPriority mPriority; + SystemTime mMessageTime; + DWORD mUserDataOne; + DWORD mUserDataTwo; +}; + +inline +ThreadMessage::ThreadMessage(void) +: mMessage(TM_VOID), mUserDataOne(0L), mUserDataTwo(0L), mPriority(PriorityNormal) +{ +} + +inline +ThreadMessage::ThreadMessage(TMMsg message,DWORD userDataOne,DWORD userDataTwo,TMPriority priority) +: mMessage(message), mUserDataOne(userDataOne), mUserDataTwo(userDataTwo), + mPriority(priority) +{ +} + +inline +ThreadMessage::ThreadMessage(const ThreadMessage &someThreadMessage) +{ + *this=someThreadMessage; +} + +inline +ThreadMessage::~ThreadMessage() +{ +} + +inline +ThreadMessage &ThreadMessage::operator=(const ThreadMessage &someThreadMessage) +{ + message(someThreadMessage.message()); + userDataOne(someThreadMessage.userDataOne()); + userDataTwo(someThreadMessage.userDataTwo()); + priority(someThreadMessage.priority()); + return *this; +} + +inline +WORD ThreadMessage::operator==(const ThreadMessage &someThreadMessage)const +{ + return message()==someThreadMessage.message(); +} + +inline +ThreadMessage::TMMsg ThreadMessage::message(void)const +{ + return mMessage; +} + +inline +void ThreadMessage::message(TMMsg message) +{ + mMessage=message; +} + +inline +DWORD ThreadMessage::userDataOne(void)const +{ + return mUserDataOne; +} + +inline +void ThreadMessage::userDataOne(DWORD userDataOne) +{ + mUserDataOne=userDataOne; +} + +inline +DWORD ThreadMessage::userDataTwo(void)const +{ + return mUserDataTwo; +} + +inline +void ThreadMessage::userDataTwo(DWORD userDataTwo) +{ + mUserDataTwo=userDataTwo; +} + +inline +ThreadMessage::TMPriority ThreadMessage::priority(void)const +{ + return mPriority; +} + +inline +void ThreadMessage::priority(TMPriority priority) +{ + mPriority=priority; +} + +inline +SystemTime &ThreadMessage::messageTime(void) +{ + return mMessageTime; +} + +inline +void ThreadMessage::messageTime(const SystemTime &messageTime) +{ + mMessageTime=messageTime; +} +#endif diff --git a/thread/THREAD.BAK b/thread/THREAD.BAK new file mode 100644 index 0000000..81a7993 --- /dev/null +++ b/thread/THREAD.BAK @@ -0,0 +1,30 @@ +#include + +WORD PureThread::start(LPVOID lpCreationData) +{ + if(isOkay()||!mlpfnThreadProc)return FALSE; + mhThread=::CreateThread((SECURITY_ATTRIBUTES*)0,InitialStack,mlpfnThreadProc,lpCreationData,CREATE_SUSPENDED,&mThreadID); + if(!mhThread)return FALSE; + mThreadStatus=InSuspend; + return TRUE; +} + +WORD PureThread::fatalThreadExit(void) +{ + WORD returnCode(FALSE); + + if(!isOkay())return returnCode; + returnCode=::TerminateThread(mhThread,exitCode()); + mThreadStatus=InStop;mhThread=0;mThreadID=0; + return returnCode; +} + +DWORD PureThread::exitCode(void)const +{ + DWORD exitCodeThread(0L); + + if(!isOkay())return exitCodeThread; + ::GetExitCodeThread(mhThread,&exitCodeThread); + return exitCodeThread; +} + diff --git a/thread/THREAD.CPP b/thread/THREAD.CPP new file mode 100644 index 0000000..1c9d385 --- /dev/null +++ b/thread/THREAD.CPP @@ -0,0 +1,41 @@ +#include + +WORD PureThread::start(LPVOID lpCreationData) +{ + if(isOkay()||!mlpfnThreadProc)return FALSE; + mhThread=::CreateThread((SECURITY_ATTRIBUTES*)0,InitialStack,mlpfnThreadProc,lpCreationData,CREATE_SUSPENDED,&mThreadID); + if(!mhThread)return FALSE; + mThreadStatus=InSuspend; + return TRUE; +} + +WORD PureThread::fatalThreadExit(void) +{ + WORD returnCode(FALSE); + + if(!isOkay())return returnCode; + returnCode=::TerminateThread(mhThread,exitCode()); + mThreadStatus=InStop;mhThread=0;mThreadID=0; + return returnCode; +} + +DWORD PureThread::exitCode(void)const +{ + DWORD exitCodeThread(0L); + + if(!isOkay())return exitCodeThread; + ::GetExitCodeThread(mhThread,&exitCodeThread); + return exitCodeThread; +} + +PureThread::ThreadPriority PureThread::getThreadPriority(void)const +{ + if(!isOkay())return ThreadPriorityNormal; + return ThreadPriority(::GetThreadPriority(mhThread)); +} + +PureThread::ThreadPriority PureThread::setThreadPriority(ThreadPriority threadPriority)const +{ + if(!isOkay())return ThreadPriorityNormal; + return ThreadPriority(::SetThreadPriority(mhThread,(int)threadPriority)); +} diff --git a/thread/THREAD.HPP b/thread/THREAD.HPP new file mode 100644 index 0000000..170d4f9 --- /dev/null +++ b/thread/THREAD.HPP @@ -0,0 +1,106 @@ +#ifndef _THREAD_PURETHREAD_HPP_ +#define _THREAD_PURETHREAD_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _THREAD_CONTEXT_HPP_ +#include +#endif + +class PureThread +{ +public: + typedef DWORD (WINAPI *LPFNTHREADPROC)(LPVOID lpInstanceData); + enum Status{InSuspend,InTerminate,InRun,InStop,InNothing}; + enum ThreadPriority{ThreadPriorityAboveNormal=THREAD_PRIORITY_ABOVE_NORMAL, + ThreadPriorityBelowNormal=THREAD_PRIORITY_BELOW_NORMAL, + ThreadPriorityHighest=THREAD_PRIORITY_HIGHEST, + ThreadPriorityIdle=THREAD_PRIORITY_IDLE, + ThreadPriorityLowest=THREAD_PRIORITY_LOWEST, + ThreadPriorityNormal=THREAD_PRIORITY_NORMAL, + ThreadPriorityTimeCritical=THREAD_PRIORITY_TIME_CRITICAL}; + PureThread(HANDLE hThread=GetCurrentThread()); + PureThread(LPFNTHREADPROC lpfnThreadProc); + virtual ~PureThread(); + WORD start(LPVOID lpCreationData=0); + WORD fatalThreadExit(void); + DWORD wait(DWORD timeout=INFINITE,bool alertable=false)const; + DWORD resume(void); + DWORD suspend(void); + DWORD exitCode(void)const; + WORD context(Context &contextThread)const; + ThreadPriority getThreadPriority(void)const; + ThreadPriority setThreadPriority(ThreadPriority threadPriority)const; + WORD isOkay(void)const; + String getThreadName(void)const; +private: + enum{InitialStack=8192}; + PureThread &operator=(const PureThread &somePureThread); + + HANDLE mhThread; + DWORD mThreadID; + LPFNTHREADPROC mlpfnThreadProc; + Status mThreadStatus; +}; + +inline +PureThread::PureThread(HANDLE hThread) +: mhThread(hThread), mThreadID(0), mlpfnThreadProc(0), mThreadStatus(InRun) +{ +} + +inline +PureThread::PureThread(LPFNTHREADPROC lpfnThreadProc) +: mhThread(0), mThreadID(0), mlpfnThreadProc(lpfnThreadProc), mThreadStatus(InNothing) +{ +} + +inline +PureThread::~PureThread() +{ +} + +inline +DWORD PureThread::suspend(void) +{ + if(!isOkay()||InRun!=mThreadStatus)return FALSE; + mThreadStatus=InSuspend; + return ::SuspendThread(mhThread); +} + +inline +DWORD PureThread::resume(void) +{ + if(!isOkay()||InSuspend!=mThreadStatus)return FALSE; + mThreadStatus=InRun; + return ::ResumeThread(mhThread); +} + +inline +DWORD PureThread::wait(DWORD timeout,bool alertable)const +{ + if(!isOkay()||InRun!=mThreadStatus)return WAIT_ABANDONED; + return ::WaitForSingleObjectEx(mhThread,timeout,alertable); +} + +inline +WORD PureThread::context(Context &contextThread)const +{ + if(!isOkay())return FALSE; + return contextThread.getThreadContext(mhThread); +} + +inline +WORD PureThread::isOkay(void)const +{ + return (0==mhThread?FALSE:TRUE); +} + +inline +String PureThread::getThreadName(void)const +{ + String strThreadName; + ::sprintf(strThreadName.str(),"%08lx",mThreadID); + return strThreadName; +} +#endif diff --git a/thread/THREAD.PLG b/thread/THREAD.PLG new file mode 100644 index 0000000..18f20d0 --- /dev/null +++ b/thread/THREAD.PLG @@ -0,0 +1,16 @@ + + +
+

Build Log

+

+--------------------Configuration: thread - Win32 Debug-------------------- +

+

Command Lines

+ + + +

Results

+msthread.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/thread/THREAD32.IDE b/thread/THREAD32.IDE new file mode 100644 index 0000000..9706d1e Binary files /dev/null and b/thread/THREAD32.IDE differ diff --git a/thread/THREAD32.~DE b/thread/THREAD32.~DE new file mode 100644 index 0000000..a0e4edb Binary files /dev/null and b/thread/THREAD32.~DE differ diff --git a/thread/THTIMER.CPP b/thread/THTIMER.CPP new file mode 100644 index 0000000..e0b4209 --- /dev/null +++ b/thread/THTIMER.CPP @@ -0,0 +1,81 @@ +#include + +ThreadTimer::ThreadTimer(void) +: mMinResolution(0), mIsOkay(FALSE), mHasTimedEvent(FALSE), mTimerID(0), mIsFirstBreak(TRUE) +{ + if(::timeGetDevCaps(&mTimerCapability,sizeof(TIMECAPS)))return; + mMinResolution=mTimerCapability.wPeriodMin; + if(::timeBeginPeriod(mMinResolution))return; + mIsOkay=TRUE; +} + +ThreadTimer::ThreadTimer(WORD minResolution) +: mMinResolution(minResolution), mIsOkay(FALSE), mHasTimedEvent(FALSE), mTimerID(0), mIsFirstBreak(TRUE) +{ + if(::timeGetDevCaps(&mTimerCapability,sizeof(TIMECAPS)))return; + if(mMinResolutionmTimerMutex.requestMutex(); + if(((ThreadTimer*)dwUser)->isFirstBreak()) + { + ((ThreadTimer*)dwUser)->isFirstBreak(FALSE); + ((ThreadTimer*)dwUser)->timerStarted(); + } + if(((CallbackData::ReturnType)FALSE)==((ThreadTimer*)dwUser)->mCallbackPointer.callback(callbackData)) + { + ((ThreadTimer*)dwUser)->timerStopped(); + ((ThreadTimer*)dwUser)->stopTimer(); + } + ((ThreadTimer*)dwUser)->mTimerMutex.releaseMutex(); + return; +} + +// virtuals + +void ThreadTimer::timerStarted(void) +{ + return; +} + +void ThreadTimer::timerStopped(void) +{ + return; +} diff --git a/thread/THTIMER.HPP b/thread/THTIMER.HPP new file mode 100644 index 0000000..1dec06c --- /dev/null +++ b/thread/THTIMER.HPP @@ -0,0 +1,81 @@ +#ifndef _THREAD_THREADTIMER_HPP_ +#define _COMMON_THREADTIMER_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +#ifndef _COMMON_MMSYSTEM_HPP_ +#include +#endif +#ifndef _THREAD_MUTEX_HPP_ +#include +#endif + +class ThreadTimer +{ +public: + ThreadTimer(void); + ThreadTimer(WORD minResolution); + virtual ~ThreadTimer(); + DWORD getSystemTime(void)const; + WORD startTimer(UINT deltaTime); + WORD stopTimer(void); + WORD isRunning(void)const; + void insertHandler(PureCallback *lpCallback); + void removeHandler(void); +protected: + virtual void timerStarted(void); + virtual void timerStopped(void); +private: + static void CALLBACK timerProc(UINT wTimerID,UINT mMsg,DWORD dwUser,DWORD dummyOne,DWORD dummyTwo); + WORD isFirstBreak(void)const; + void isFirstBreak(WORD isFirstBreak); + + TIMECAPS mTimerCapability; + WORD mMinResolution; + WORD mIsOkay; + WORD mHasTimedEvent; + WORD mIsFirstBreak; + UINT mTimerID; + Mutex mTimerMutex; + CallbackPointer mCallbackPointer; +}; + +inline +DWORD ThreadTimer::getSystemTime(void)const +{ + return ::timeGetTime(); +} + +inline +WORD ThreadTimer::isRunning(void)const +{ + return mHasTimedEvent; +} + +inline +void ThreadTimer::insertHandler(PureCallback *lpCallback) +{ + mCallbackPointer=CallbackPointer(lpCallback); +} + +inline +void ThreadTimer::removeHandler(void) +{ + mCallbackPointer=CallbackPointer(); +} + +inline +WORD ThreadTimer::isFirstBreak(void)const +{ + return mIsFirstBreak; +} + +inline +void ThreadTimer::isFirstBreak(WORD isFirstBreak) +{ + mIsFirstBreak=isFirstBreak; +} +#endif diff --git a/thread/Thread.mak b/thread/Thread.mak new file mode 100644 index 0000000..ced8520 --- /dev/null +++ b/thread/Thread.mak @@ -0,0 +1,456 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=thread - Win32 Debug +!MESSAGE No configuration specified. Defaulting to thread - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "thread - Win32 Release" && "$(CFG)" != "thread - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Thread.mak" CFG="thread - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "thread - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "thread - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "thread - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "thread - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Thread.lib" + +CLEAN : + -@erase "$(INTDIR)\Event.obj" + -@erase "$(INTDIR)\Msgqueue.obj" + -@erase "$(INTDIR)\Mthread.obj" + -@erase "$(INTDIR)\Mutex.obj" + -@erase "$(INTDIR)\Ptcllbck.obj" + -@erase "$(INTDIR)\Qthread.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Thread.obj" + -@erase "$(INTDIR)\thtimer.obj" + -@erase "$(OUTDIR)\Thread.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Thread.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Thread.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Thread.lib" +LIB32_OBJS= \ + "$(INTDIR)\Event.obj" \ + "$(INTDIR)\Msgqueue.obj" \ + "$(INTDIR)\Mthread.obj" \ + "$(INTDIR)\Mutex.obj" \ + "$(INTDIR)\Ptcllbck.obj" \ + "$(INTDIR)\Qthread.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Thread.obj" \ + "$(INTDIR)\thtimer.obj" + +"$(OUTDIR)\Thread.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "thread - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\msthread.lib" + +CLEAN : + -@erase "$(INTDIR)\Event.obj" + -@erase "$(INTDIR)\Msgqueue.obj" + -@erase "$(INTDIR)\Mthread.obj" + -@erase "$(INTDIR)\Mutex.obj" + -@erase "$(INTDIR)\Ptcllbck.obj" + -@erase "$(INTDIR)\Qthread.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Thread.obj" + -@erase "$(INTDIR)\thtimer.obj" + -@erase "..\exe\msthread.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /Fo"$(INTDIR)/" /c\ + +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Thread.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msthread.lib" +LIB32_FLAGS=/nologo /out:"..\exe\msthread.lib" +LIB32_OBJS= \ + "$(INTDIR)\Event.obj" \ + "$(INTDIR)\Msgqueue.obj" \ + "$(INTDIR)\Mthread.obj" \ + "$(INTDIR)\Mutex.obj" \ + "$(INTDIR)\Ptcllbck.obj" \ + "$(INTDIR)\Qthread.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Thread.obj" \ + "$(INTDIR)\thtimer.obj" + +"..\exe\msthread.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "thread - Win32 Release" +# Name "thread - Win32 Debug" + +!IF "$(CFG)" == "thread - Win32 Release" + +!ELSEIF "$(CFG)" == "thread - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Thread.cpp +DEP_CPP_THREA=\ + {$(INCLUDE)}"\.\Context.hpp"\ + {$(INCLUDE)}"\.\Savearea.hpp"\ + {$(INCLUDE)}"\.\Thread.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + + +"$(INTDIR)\Thread.obj" : $(SOURCE) $(DEP_CPP_THREA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Msgqueue.cpp +DEP_CPP_MSGQU=\ + {$(INCLUDE)}"\.\Event.hpp"\ + {$(INCLUDE)}"\.\Msgqueue.hpp"\ + {$(INCLUDE)}"\.\Mutex.hpp"\ + {$(INCLUDE)}"\.\Thmsg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Msgqueue.obj" : $(SOURCE) $(DEP_CPP_MSGQU) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mthread.cpp + +!IF "$(CFG)" == "thread - Win32 Release" + +DEP_CPP_MTHRE=\ + {$(INCLUDE)}"\.\Context.hpp"\ + {$(INCLUDE)}"\.\Event.hpp"\ + {$(INCLUDE)}"\.\Msgqueue.hpp"\ + {$(INCLUDE)}"\.\Mthread.hpp"\ + {$(INCLUDE)}"\.\Mutex.hpp"\ + {$(INCLUDE)}"\.\Ptcllbck.hpp"\ + {$(INCLUDE)}"\.\Qthread.hpp"\ + {$(INCLUDE)}"\.\Savearea.hpp"\ + {$(INCLUDE)}"\.\Tcallbck.hpp"\ + {$(INCLUDE)}"\.\Tcallbck.tpp"\ + {$(INCLUDE)}"\.\Thmsg.hpp"\ + {$(INCLUDE)}"\.\Thread.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + + +"$(INTDIR)\Mthread.obj" : $(SOURCE) $(DEP_CPP_MTHRE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "thread - Win32 Debug" + +DEP_CPP_MTHRE=\ + {$(INCLUDE)}"\.\Mthread.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Mthread.obj" : $(SOURCE) $(DEP_CPP_MTHRE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mutex.cpp +DEP_CPP_MUTEX=\ + {$(INCLUDE)}"\.\Mutex.hpp"\ + {$(INCLUDE)}"\.\Postfix.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Mutex.obj" : $(SOURCE) $(DEP_CPP_MUTEX) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Ptcllbck.cpp +DEP_CPP_PTCLL=\ + {$(INCLUDE)}"\.\Ptcllbck.hpp"\ + {$(INCLUDE)}"\.\Thmsg.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Ptcllbck.obj" : $(SOURCE) $(DEP_CPP_PTCLL) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Qthread.cpp + +!IF "$(CFG)" == "thread - Win32 Release" + +DEP_CPP_QTHRE=\ + {$(INCLUDE)}"\.\Context.hpp"\ + {$(INCLUDE)}"\.\Event.hpp"\ + {$(INCLUDE)}"\.\Msgqueue.hpp"\ + {$(INCLUDE)}"\.\Mutex.hpp"\ + {$(INCLUDE)}"\.\Qthread.hpp"\ + {$(INCLUDE)}"\.\Savearea.hpp"\ + {$(INCLUDE)}"\.\Thmsg.hpp"\ + {$(INCLUDE)}"\.\Thread.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + + +"$(INTDIR)\Qthread.obj" : $(SOURCE) $(DEP_CPP_QTHRE) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "thread - Win32 Debug" + +DEP_CPP_QTHRE=\ + {$(INCLUDE)}"\.\Context.hpp"\ + {$(INCLUDE)}"\.\Event.hpp"\ + {$(INCLUDE)}"\.\Msgqueue.hpp"\ + {$(INCLUDE)}"\.\Mutex.hpp"\ + {$(INCLUDE)}"\.\Qthread.hpp"\ + {$(INCLUDE)}"\.\Savearea.hpp"\ + {$(INCLUDE)}"\.\Thmsg.hpp"\ + {$(INCLUDE)}"\.\Thread.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + + +"$(INTDIR)\Qthread.obj" : $(SOURCE) $(DEP_CPP_QTHRE) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Ptcllbck.hpp"\ + {$(INCLUDE)}"\.\Tcallbck.hpp"\ + {$(INCLUDE)}"\.\Tcallbck.tpp"\ + {$(INCLUDE)}"\.\Thmsg.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Event.cpp +DEP_CPP_EVENT=\ + {$(INCLUDE)}"\.\Event.hpp"\ + {$(INCLUDE)}"\.\Postfix.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\Event.obj" : $(SOURCE) $(DEP_CPP_EVENT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\thtimer.cpp +DEP_CPP_THTIM=\ + {$(INCLUDE)}"\.\Mutex.hpp"\ + {$(INCLUDE)}"\.\thtimer.hpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Mmsystem.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\thtimer.obj" : $(SOURCE) $(DEP_CPP_THTIM) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/thread/ThreadStorage.hpp b/thread/ThreadStorage.hpp new file mode 100644 index 0000000..f544bd0 --- /dev/null +++ b/thread/ThreadStorage.hpp @@ -0,0 +1,184 @@ +#ifndef _THREAD_THREADSTORAGE_HPP_ +#define _THREAD_THREADSTORAGE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_PUREDWORD_HPP_ +#include +#endif +#ifndef _BSPTREE_BINARYTREE_HPP_ +#include +#endif + +template +class ThreadStorage +{ +public: + ThreadStorage(void); + ThreadStorage(const ThreadStorage &threadStorage); + virtual ~ThreadStorage(); + bool operator==(const ThreadStorage &threadStorage)const; + bool operator<(const ThreadStorage &threadStorage)const; + bool operator>(const ThreadStorage &threadStorage)const; + T &getData(void); + void setData(const T &data); + DWORD getThreadId(void)const; + void setThreadId(DWORD threadId); +private: + T mData; + DWORD mThreadId; +}; + +template +inline +ThreadStorage::ThreadStorage(void) +: mThreadId(0) +{ +} + +template +inline +ThreadStorage::ThreadStorage(const ThreadStorage &threadStorage) +{ + *this=threadStorage; +} + +template +inline +ThreadStorage::~ThreadStorage() +{ +} + +template +inline +bool ThreadStorage::operator==(const ThreadStorage &threadStorage)const +{ + return mThreadId==threadStorage.mThreadId; +} + +template +inline +bool ThreadStorage::operator<(const ThreadStorage &threadStorage)const +{ + return mThreadId +inline +bool ThreadStorage::operator>(const ThreadStorage &threadStorage)const +{ + return mThreadId +inline +T &ThreadStorage::getData(void) +{ + return mData; +} + +template +inline +void ThreadStorage::setData(const T &data) +{ + mData=data; +} + +template +inline +DWORD ThreadStorage::getThreadId(void)const +{ + return mThreadId; +} + +template +inline +void ThreadStorage::setThreadId(DWORD threadId) +{ + mThreadId=threadId; +} + + +template +class ThreadLocalStorage : private BinaryTree > +{ +public: + ThreadLocalStorage(); + bool getThreadData(SmartPointer &threadData); + bool haveThreadData(void); + void removeThreadData(void); + bool addThreadData(const T &data); +private: + ThreadLocalStorage(const ThreadLocalStorage &threadLocalStorage); + ThreadLocalStorage &operator=(const ThreadLocalStorage &threadLocalaStorage); +}; + +template +inline +ThreadLocalStorage::ThreadLocalStorage() +{ +} + +template +inline +ThreadLocalStorage::ThreadLocalStorage(const ThreadLocalStorage &threadLocalStorage) +{ // copy constructor is private +} + +template +inline +ThreadLocalStorage &ThreadLocalStorage::operator=(const ThreadLocalStorage &threadLocalaStorage) +{ // assignment operator is private + return *this; +} + +template +inline +bool ThreadLocalStorage::getThreadData(SmartPointer &threadData) +{ + ThreadStorage threadStorage; + SmartPointer > pThreadStorage; + + threadStorage.setThreadId(::GetCurrentThreadId()); + if(!searchItem(threadStorage,pThreadStorage))return false; + threadData=&pThreadStorage->getData(); + return true; +} + +template +inline +bool ThreadLocalStorage::haveThreadData(void) +{ + ThreadStorage threadStorage; + threadStorage.setThreadId(::GetCurrentThreadId()); + return searchItem(threadStorage); +} + +template +inline +void ThreadLocalStorage::removeThreadData(void) +{ + if(!haveThreadData())return; + ThreadStorage threadStorage; + threadStorage.setThreadId(::GetCurrentThreadId()); + remove(threadStorage); +} + +template +inline +bool ThreadLocalStorage::addThreadData(const T &data) +{ + if(haveThreadData())return false; + ThreadStorage threadStorage; + + threadStorage.setThreadId(::GetCurrentThreadId()); + threadStorage.setData(data); + return insert(threadStorage); +} +#endif + + + diff --git a/thread/thread.001 b/thread/thread.001 new file mode 100644 index 0000000..59e0551 --- /dev/null +++ b/thread/thread.001 @@ -0,0 +1,182 @@ +# Microsoft Developer Studio Project File - Name="thread" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=thread - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "thread.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "thread.mak" CFG="thread - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "thread - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "thread - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "thread - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "thread - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msthread.lib" + +!ENDIF + +# Begin Target + +# Name "thread - Win32 Release" +# Name "thread - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Event.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msgqueue.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mthread.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mutex.cpp +# End Source File +# Begin Source File + +SOURCE=.\Ptcllbck.cpp +# End Source File +# Begin Source File + +SOURCE=.\Qthread.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Thread.cpp +# End Source File +# Begin Source File + +SOURCE=.\thtimer.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Context.hpp +# End Source File +# Begin Source File + +SOURCE=.\Event.hpp +# End Source File +# Begin Source File + +SOURCE=.\Msgqueue.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mthread.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mutex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Postfix.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ptcllbck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Qthread.hpp +# End Source File +# Begin Source File + +SOURCE=.\Savearea.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tcallbck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thmsg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thread.hpp +# End Source File +# Begin Source File + +SOURCE=.\thtimer.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\Tcallbck.tpp +# End Source File +# End Target +# End Project diff --git a/thread/thread.dsp b/thread/thread.dsp new file mode 100644 index 0000000..8690414 --- /dev/null +++ b/thread/thread.dsp @@ -0,0 +1,188 @@ +# Microsoft Developer Studio Project File - Name="thread" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=thread - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "thread.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "thread.mak" CFG="thread - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "thread - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "thread - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "thread - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MT /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "thread - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /Zi /Od /I "\work" /I "\parts" /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"..\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\msthread.lib" + +!ENDIF + +# Begin Target + +# Name "thread - Win32 Release" +# Name "thread - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Event.cpp +# End Source File +# Begin Source File + +SOURCE=.\Msgqueue.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mthread.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mutex.cpp +# End Source File +# Begin Source File + +SOURCE=.\Ptcllbck.cpp +# End Source File +# Begin Source File + +SOURCE=.\Qthread.cpp +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Thread.cpp +# End Source File +# Begin Source File + +SOURCE=.\thtimer.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Context.hpp +# End Source File +# Begin Source File + +SOURCE=.\Event.hpp +# End Source File +# Begin Source File + +SOURCE=.\Msgqueue.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mthread.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mutex.hpp +# End Source File +# Begin Source File + +SOURCE=.\Postfix.hpp +# End Source File +# Begin Source File + +SOURCE=.\Ptcllbck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Qthread.hpp +# End Source File +# Begin Source File + +SOURCE=.\Savearea.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tcallbck.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thmsg.hpp +# End Source File +# Begin Source File + +SOURCE=.\Thread.hpp +# End Source File +# Begin Source File + +SOURCE=.\thtimer.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\Tcallbck.tpp +# End Source File +# End Target +# End Project diff --git a/thread/thread.dsw b/thread/thread.dsw new file mode 100644 index 0000000..980477f --- /dev/null +++ b/thread/thread.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "thread"=.\thread.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/thread/thread.mdp b/thread/thread.mdp new file mode 100644 index 0000000..64a6d3e Binary files /dev/null and b/thread/thread.mdp differ diff --git a/thtest/EXEOBJ32/THREAD.RES b/thtest/EXEOBJ32/THREAD.RES new file mode 100644 index 0000000..d0c011c Binary files /dev/null and b/thtest/EXEOBJ32/THREAD.RES differ diff --git a/thtest/FOO.CPP b/thtest/FOO.CPP new file mode 100644 index 0000000..78b758f --- /dev/null +++ b/thtest/FOO.CPP @@ -0,0 +1,80 @@ +#include +#include + +Foo::Foo(void) +: mhDisplay(0), mCounter(0), mlpLedDisplay(0) +{ + mThreadHandler.setCallback(this,&Foo::threadHandler); + mTimerHandler.setCallback(this,&Foo::timerHandler); + MessageThread::insertHandler(&mThreadHandler); + Window::insertHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +Foo::~Foo() +{ + stop(); + destroyWindow(); + MessageThread::removeHandler(&mThreadHandler); +} + +DWORD Foo::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + createWindow(GetModuleHandle(0),mWindowPoint); + break; + case ThreadMessage::TM_DESTROY : + destroyWindow(); + break; + case ThreadMessage::TM_USER : + if(someThreadMessage.userDataOne()==FooStart)cycle(); + break; + } + return FALSE; +} + +void Foo::cycle(void) +{ + ThreadMessage threadMessage(ThreadMessage::TM_USER,FooStart,0L); + if(!Window::isValid()||!mlpLedDisplay)return; + if(mCounter>999)mCounter=0; + mlpLedDisplay->setNumber(mCounter++); + mlpLedDisplay->paint(); + update(); + MessageThread::postMessage(threadMessage); + ::Sleep(50); +} + +void Foo::createWindow(HINSTANCE hInstance,const Point &windowPoint) +{ + if(mhDisplay)return; + Window::createWindow("BUTTON","",WS_POPUP|WS_CAPTION,Rect(windowPoint.x(),windowPoint.y(),50,50),0,0,0); + show(SW_SHOW); + update(); + mlpLedDisplay=new LedDisplay((HWND)(Window&)*this,Point(0,0)); +// setTimer(0,25); +} + +void Foo::destroyWindow(void) +{ + if(mlpLedDisplay){delete mlpLedDisplay;mlpLedDisplay=0;} +// killTimer(1); + Window::destroy(); +} + +CallbackData::ReturnType Foo::timerHandler(CallbackData &someCallbackData) +{ +// ThreadMessage threadMessage(ThreadMessage::TM_USER,FooStart,0L); + if(!Window::isValid()||!mlpLedDisplay)return 0; + if(mCounter>999)mCounter=0; + mlpLedDisplay->setNumber(mCounter++); + mlpLedDisplay->paint(); + update(); +// MessageThread::postMessage(threadMessage); + return 0; +} + + + + diff --git a/thtest/FOO.HPP b/thtest/FOO.HPP new file mode 100644 index 0000000..ae1b922 --- /dev/null +++ b/thtest/FOO.HPP @@ -0,0 +1,43 @@ +#ifndef _THREAD_FOO_HPP_ +#define _THREAD_FOO_HPP_ +#include +#include +#include + +class Foo : public MessageThread, public Window +{ +public: + enum{FooStart}; + Foo(void); + virtual ~Foo(); + WORD operator==(const Foo &someFoo)const; + void setPoint(const Point &windowPoint); +private: + void createWindow(HINSTANCE hInstance,const Point &windowPoint); + DWORD threadHandler(ThreadMessage &someThreadMessage); + void destroyWindow(void); + void cycle(void); + + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + Callback mTimerHandler; + HWND mhDisplay; + WORD mCounter; + LedDisplay *mlpLedDisplay; + ThreadCallback mThreadHandler; + Point mWindowPoint; +}; + +inline +WORD Foo::operator==(const Foo &/*someFoo*/)const +{ + return FALSE; +} + +inline +void Foo::setPoint(const Point &windowPoint) +{ + mWindowPoint=windowPoint; +} + +#endif + diff --git a/thtest/LED.BMP b/thtest/LED.BMP new file mode 100644 index 0000000..dd4a23b Binary files /dev/null and b/thtest/LED.BMP differ diff --git a/thtest/LED.CPP b/thtest/LED.CPP new file mode 100644 index 0000000..25c0f5a --- /dev/null +++ b/thtest/LED.CPP @@ -0,0 +1,78 @@ +#include +#include +#include + +LedDisplay::LedDisplay(HWND hDisplayWindow,Point windowPoint) +: mWindowPoint(windowPoint), mhDisplayWindow(hDisplayWindow), mCurrentNumber(0), + mHasSpecialChar(TRUE), mCurrentSpecialChar(DashChar), +#if defined(__FLAT__) + mhFilm(::LoadBitmap((HINSTANCE)::GetWindowLong(hDisplayWindow,GWL_HINSTANCE),"LED")) +#else + mhFilm(::LoadBitmap((HINSTANCE)::GetWindowWord(hDisplayWindow,GWW_HINSTANCE),"LED")) +#endif +{ +} + +LedDisplay::~LedDisplay() +{ + if(mhFilm){::DeleteObject(mhFilm);mhFilm=0;} +} + +void LedDisplay::setNumber(SpecialChar specialChar) +{ + mHasSpecialChar=TRUE; + mCurrentSpecialChar=specialChar; + paint(); +} + +void LedDisplay::setNumber(WORD someNumber) +{ + mHasSpecialChar=FALSE; + mCurrentNumber=someNumber; + paint(); +} + +void LedDisplay::paint(void) +{ + HBITMAP hOldBitmap; + HDC hDisplayDC; + HDC hMemDC; + WORD firstOffset; + WORD secondOffset; + WORD thirdOffset; + + hDisplayDC=::GetDC(mhDisplayWindow); + hMemDC=::CreateCompatibleDC(hDisplayDC); + hOldBitmap=(HBITMAP)::SelectObject(hMemDC,mhFilm); + positions(firstOffset,secondOffset,thirdOffset); + ::BitBlt(hDisplayDC,mWindowPoint.x(),mWindowPoint.y(),Width,Height, + hMemDC,0,firstOffset*Height,SRCCOPY); + ::BitBlt(hDisplayDC,mWindowPoint.x()+Width,mWindowPoint.y(),Width,Height, + hMemDC,0,secondOffset*Height,SRCCOPY); + ::BitBlt(hDisplayDC,mWindowPoint.x()+(Width*2),mWindowPoint.y(),Width,Height, + hMemDC,0,thirdOffset*Height,SRCCOPY); + ::SelectObject(hMemDC,hOldBitmap); + ::DeleteObject(hMemDC); + ::ReleaseDC(mhDisplayWindow,hDisplayDC); +} + +void LedDisplay::positions(WORD &firstOffset,WORD &secondOffset,WORD &thirdOffset)const +{ + String numberString; + + if(mHasSpecialChar) + { + if(BlankChar==mCurrentSpecialChar) + firstOffset=secondOffset=thirdOffset=OffsetBlankChar; + else + firstOffset=secondOffset=thirdOffset=OffsetDashChar; + } + else + { + ::sprintf(numberString,"%03d",mCurrentNumber); + firstOffset=charPosition(*(numberString)); + secondOffset=charPosition(*((LPSTR)numberString+1)); + thirdOffset=charPosition(*((LPSTR)numberString+2)); + } +} + diff --git a/thtest/LED.HPP b/thtest/LED.HPP new file mode 100644 index 0000000..1437006 --- /dev/null +++ b/thtest/LED.HPP @@ -0,0 +1,40 @@ +#ifndef _LEDDISPLAY_HPP_ +#define _LEDDISPLAY_HPP_ +#include +#include + +class LedDisplay +{ +public: + enum SpecialChar{BlankChar,DashChar}; + LedDisplay(HWND hDisplayWindow,Point windowPoint); + virtual ~LedDisplay(); + void setNumber(WORD someNumber); + void setNumber(SpecialChar specialChar); + WORD getNumber(void)const; + void paint(void); +private: + enum {Width=13,Height=22,Frames=12}; + enum {OffsetDashChar,OffsetBlankChar}; + WORD charPosition(char someDisplayChar)const; + void positions(WORD &firstOffset,WORD &secondOffset,WORD &thirdOffset)const; + HBITMAP mhFilm; + WORD mCurrentNumber; + SpecialChar mCurrentSpecialChar; + WORD mHasSpecialChar; + Point mWindowPoint; + HWND mhDisplayWindow; +}; + +inline +WORD LedDisplay::charPosition(char someChar)const +{ + return ((Frames-1)-((int)someChar-'0')); +} + +inline +WORD LedDisplay::getNumber(void)const +{ + return mCurrentNumber; +} +#endif \ No newline at end of file diff --git a/thtest/MAIN.CPP b/thtest/MAIN.CPP new file mode 100644 index 0000000..ac43846 --- /dev/null +++ b/thtest/MAIN.CPP @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include +#include + +void yieldTask(void); +void parseCommandLine(DWORD &itemCount,DWORD &timeToLive); + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) +{ + PureVector > vectorFoo; + DWORD itemCount(25); + DWORD timeToLive(30000); + DWORD endTime(::GetTickCount()); + Point windowPoint; + + parseCommandLine(itemCount,timeToLive); + vectorFoo.size(itemCount); + + for(int itemIndex=0;itemIndexsetPoint(windowPoint); + ThreadMessage userMessage(ThreadMessage::TM_USER,Foo::FooStart,0); + ((MessageThread*)(vectorFoo[itemIndex]))->postMessage(userMessage); + windowPoint.x(windowPoint.x()+50); + if(windowPoint.x()>760) + { + windowPoint.x(0); + windowPoint.y(windowPoint.y()+50); + } + } + while(endTime+timeToLive>::GetTickCount())yieldTask(); +#if 0 + for(itemIndex=0;itemIndexsuspend(); +// ::Sleep(50); + } +#endif + return FALSE; +} + +void yieldTask(void) +{ + MSG msg; + + while(::PeekMessage((MSG far *)&msg,0,0,0,PM_REMOVE)) + { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + ::Sleep(50); + } +} + +void parseCommandLine(DWORD &itemCount,DWORD &timeToLive) +{ + Profile thProfile("THREADS.INI","UNSET"); + String strTimeToLive; + String strThreads; + + thProfile.readProfileString(String("THREADS"),String("COUNT"),strThreads); + ::OutputDebugString(strThreads+String("\n")); + thProfile.readProfileString(String("THREADS"),String("TIMETOLIVE"),strTimeToLive); + ::OutputDebugString(strTimeToLive+String("\n")); + if(!(String("UNSET")==strThreads))itemCount=::atoi((LPSTR)strThreads); + if(!(String("UNSET")==strTimeToLive))timeToLive=::atoi((LPSTR)strTimeToLive); +} + + diff --git a/thtest/STDTMPL.CPP b/thtest/STDTMPL.CPP new file mode 100644 index 0000000..5ed9f88 --- /dev/null +++ b/thtest/STDTMPL.CPP @@ -0,0 +1,20 @@ +#ifndef _MSC_VER +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class FTPData; + +typedef ThreadCallback a; +typedef PureVector > b; +typedef ThreadCallback c; +#endif \ No newline at end of file diff --git a/thtest/TDCONFIG.TDW b/thtest/TDCONFIG.TDW new file mode 100644 index 0000000..40ac47c Binary files /dev/null and b/thtest/TDCONFIG.TDW differ diff --git a/thtest/TDW.TRW b/thtest/TDW.TRW new file mode 100644 index 0000000..e3273ab Binary files /dev/null and b/thtest/TDW.TRW differ diff --git a/thtest/THLNCH.CPP b/thtest/THLNCH.CPP new file mode 100644 index 0000000..5a67553 --- /dev/null +++ b/thtest/THLNCH.CPP @@ -0,0 +1,57 @@ +#include +#include + +template +ThreadLaunch::ThreadLaunch(void) +: mThreadHandler(this,&ThreadLaunch::threadHandler), mhDisplay(0) +{ + insertHandler(&mThreadHandler); +} + +template +ThreadLaunch::~ThreadLaunch() +{ + stop(); + destroyWindow(); + removeHandler(&mThreadHandler); +} + +template +DWORD ThreadLaunch::threadHandler(ThreadMessage &someThreadMessage) +{ + switch(someThreadMessage.message()) + { + case ThreadMessage::TM_CREATE : + break; + case ThreadMessage::TM_DESTROY : + break; + case ThreadMessage::TM_USER : + if(someThreadMessage.userDataOne()==ThreadStart)cycle(); + break; + } + return FALSE; +} + +template +void ThreadLaunch::cycle(void) +{ + ThreadMessage threadMessage(ThreadMessage::TM_USER,ThreadStart,0L); + if(!mhDisplay)return; + postMessage(threadMessage); +} + +template +void ThreadLaunch::createWindow(HINSTANCE hInstance,const Point &windowPoint) +{ + if(mhDisplay)return; + mhDisplay=::CreateWindow("BUTTON","",WS_POPUP|WS_CAPTION,windowPoint.x(),windowPoint.y(),50,50,0,(HMENU)0,hInstance,0); + ::ShowWindow(mhDisplay,SW_SHOW); + ::UpdateWindow(mhDisplay); +} + +template +void ThreadLaunch::destroyWindow(void) +{ + if(mhDisplay){::DestroyWindow(mhDisplay);mhDisplay=0;} +} + diff --git a/thtest/THLNCH.HPP b/thtest/THLNCH.HPP new file mode 100644 index 0000000..b401267 --- /dev/null +++ b/thtest/THLNCH.HPP @@ -0,0 +1,30 @@ +#ifndef _THTEST_THLAUNCH_HPP_ +#define _THTEST_THLAUNCH_HPP_ +#include + +template +class ThreadLaunch : public MessageThread +{ +public: + enum{ThreadStart}; + ThreadLaunch(void); + virtual ~ThreadLaunch(); + WORD operator==(const ThreadLaunch &someThreadLaunch)const; + void createWindow(HINSTANCE hInstance,const Point &windowPoint); +private: + DWORD threadHandler(ThreadMessage &someThreadMessage); + void destroyWindow(void); + void cycle(void); + + HWND mhDisplay; + WORD mCounter; + ThreadCallback mThreadHandler; +}; + +inline +WORD ThreadLaunch::operator==(const ThreadLaunch &/*someFoo*/)const +{ + return FALSE; +} +#endif + diff --git a/thtest/THREAD.DSW b/thtest/THREAD.DSW new file mode 100644 index 0000000..5898e49 Binary files /dev/null and b/thtest/THREAD.DSW differ diff --git a/thtest/THREAD.IDE b/thtest/THREAD.IDE new file mode 100644 index 0000000..33934a7 Binary files /dev/null and b/thtest/THREAD.IDE differ diff --git a/thtest/THREAD.RC b/thtest/THREAD.RC new file mode 100644 index 0000000..279aabe --- /dev/null +++ b/thtest/THREAD.RC @@ -0,0 +1,3 @@ + + +LED BITMAP LED.BMP diff --git a/thtest/THTEST.BAK b/thtest/THTEST.BAK new file mode 100644 index 0000000..90ec56f --- /dev/null +++ b/thtest/THTEST.BAK @@ -0,0 +1,387 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=thtest - Win32 Debug +!MESSAGE No configuration specified. Defaulting to thtest - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "thtest - Win32 Release" && "$(CFG)" != "thtest - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Thtest.mak" CFG="thtest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "thtest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "thtest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "thtest - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "thtest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Thtest.exe" + +CLEAN : + -@erase "$(INTDIR)\Foo.obj" + -@erase "$(INTDIR)\Led.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Thread.res" + -@erase "$(OUTDIR)\Thtest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Thtest.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Thread.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Thtest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Thtest.pdb" /machine:I386 /out:"$(OUTDIR)/Thtest.exe" +LINK32_OBJS= \ + "$(INTDIR)\Foo.obj" \ + "$(INTDIR)\Led.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Thread.res" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Thtest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Thtest.exe" + +CLEAN : + -@erase "$(INTDIR)\Foo.obj" + -@erase "$(INTDIR)\Led.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Thread.res" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Thtest.exe" + -@erase "$(OUTDIR)\Thtest.ilk" + -@erase "$(OUTDIR)\Thtest.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /Gi /Zi /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /Gi /Zi /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/Thtest.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Thread.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Thtest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/Thtest.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Thtest.exe" +LINK32_OBJS= \ + "$(INTDIR)\Foo.obj" \ + "$(INTDIR)\Led.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Thread.res" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Thtest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "thtest - Win32 Release" +# Name "thtest - Win32 Debug" + +!IF "$(CFG)" == "thtest - Win32 Release" + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Thread.rc +DEP_RSC_THREA=\ + ".\LED.BMP"\ + + +"$(INTDIR)\Thread.res" : $(SOURCE) $(DEP_RSC_THREA) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Led.cpp +DEP_CPP_LED_C=\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Led.obj" : $(SOURCE) $(DEP_CPP_LED_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Foo.hpp"\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Foo.hpp"\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Foo.cpp +DEP_CPP_FOO_C=\ + {$(INCLUDE)}"\.\Foo.hpp"\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Foo.obj" : $(SOURCE) $(DEP_CPP_FOO_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "thtest - Win32 Release" + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib + +!IF "$(CFG)" == "thtest - Win32 Release" + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/thtest/THTEST.DSP b/thtest/THTEST.DSP new file mode 100644 index 0000000..821f814 --- /dev/null +++ b/thtest/THTEST.DSP @@ -0,0 +1,141 @@ +# Microsoft Developer Studio Project File - Name="thtest" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=thtest - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Thtest.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Thtest.mak" CFG="thtest - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "thtest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "thtest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "thtest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /Gi /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "thtest - Win32 Release" +# Name "thtest - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Foo.cpp +# End Source File +# Begin Source File + +SOURCE=.\Led.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=..\Exe\msthread.lib +# End Source File +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +# End Source File +# Begin Source File + +SOURCE=.\Thread.rc +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Foo.hpp +# End Source File +# Begin Source File + +SOURCE=.\led.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\LED.BMP +# End Source File +# End Group +# End Target +# End Project diff --git a/thtest/THTEST.DSW b/thtest/THTEST.DSW new file mode 100644 index 0000000..0a32899 --- /dev/null +++ b/thtest/THTEST.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "thtest"=.\Thtest.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/thtest/THTEST.MAK b/thtest/THTEST.MAK new file mode 100644 index 0000000..90ec56f --- /dev/null +++ b/thtest/THTEST.MAK @@ -0,0 +1,387 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=thtest - Win32 Debug +!MESSAGE No configuration specified. Defaulting to thtest - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "thtest - Win32 Release" && "$(CFG)" != "thtest - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Thtest.mak" CFG="thtest - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "thtest - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "thtest - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "thtest - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "thtest - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Thtest.exe" + +CLEAN : + -@erase "$(INTDIR)\Foo.obj" + -@erase "$(INTDIR)\Led.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Thread.res" + -@erase "$(OUTDIR)\Thtest.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Thtest.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Thread.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Thtest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Thtest.pdb" /machine:I386 /out:"$(OUTDIR)/Thtest.exe" +LINK32_OBJS= \ + "$(INTDIR)\Foo.obj" \ + "$(INTDIR)\Led.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Thread.res" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Thtest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Thtest.exe" + +CLEAN : + -@erase "$(INTDIR)\Foo.obj" + -@erase "$(INTDIR)\Led.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Thread.res" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Thtest.exe" + -@erase "$(OUTDIR)\Thtest.ilk" + -@erase "$(OUTDIR)\Thtest.pdb" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /Gi /Zi /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /Gi /Zi /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/Thtest.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Thread.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Thtest.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/Thtest.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Thtest.exe" +LINK32_OBJS= \ + "$(INTDIR)\Foo.obj" \ + "$(INTDIR)\Led.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Thread.res" \ + "..\Exe\mscommon.lib" \ + "..\Exe\msthread.lib" + +"$(OUTDIR)\Thtest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "thtest - Win32 Release" +# Name "thtest - Win32 Debug" + +!IF "$(CFG)" == "thtest - Win32 Release" + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Thread.rc +DEP_RSC_THREA=\ + ".\LED.BMP"\ + + +"$(INTDIR)\Thread.res" : $(SOURCE) $(DEP_RSC_THREA) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Led.cpp +DEP_CPP_LED_C=\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Led.obj" : $(SOURCE) $(DEP_CPP_LED_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Foo.hpp"\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\Foo.hpp"\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Pointer.tpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Foo.cpp +DEP_CPP_FOO_C=\ + {$(INCLUDE)}"\.\Foo.hpp"\ + {$(INCLUDE)}"\.\led.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\Common\Winnt.hpp"\ + {$(INCLUDE)}"\Thread\Context.hpp"\ + {$(INCLUDE)}"\Thread\Event.hpp"\ + {$(INCLUDE)}"\Thread\Msgqueue.hpp"\ + {$(INCLUDE)}"\Thread\Mthread.hpp"\ + {$(INCLUDE)}"\Thread\Mutex.hpp"\ + {$(INCLUDE)}"\Thread\Ptcllbck.hpp"\ + {$(INCLUDE)}"\Thread\Qthread.hpp"\ + {$(INCLUDE)}"\Thread\Savearea.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.hpp"\ + {$(INCLUDE)}"\Thread\Tcallbck.tpp"\ + {$(INCLUDE)}"\Thread\Thmsg.hpp"\ + {$(INCLUDE)}"\Thread\Thread.hpp"\ + + +"$(INTDIR)\Foo.obj" : $(SOURCE) $(DEP_CPP_FOO_C) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "thtest - Win32 Release" + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\msthread.lib + +!IF "$(CFG)" == "thtest - Win32 Release" + +!ELSEIF "$(CFG)" == "thtest - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/thtest/THTEST.MDP b/thtest/THTEST.MDP new file mode 100644 index 0000000..56d1005 Binary files /dev/null and b/thtest/THTEST.MDP differ diff --git a/thtest/THTEST.PLG b/thtest/THTEST.PLG new file mode 100644 index 0000000..1cf1d48 --- /dev/null +++ b/thtest/THTEST.PLG @@ -0,0 +1,35 @@ +--------------------Configuration: thtest - Win32 Debug-------------------- +Begining build with project "C:\WORK\THTEST\Thtest.dsp", at root. +Active configuration is Win32 (x86) Application (based on Win32 (x86) Application) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /Zp1 /MTd /Gm /Gi /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp".\msvcobj/Thtest.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c " + "OLE Type Library Maker" with flags "/nologo /D "_DEBUG" /mktyplib203 /win32 " + "Win32 Resource Compiler" with flags "/l 0x409 /fo".\msvcobj/Thread.res" /d "_DEBUG" " + "Browser Database Maker" with flags "/nologo /o".\msvcobj/Thtest.bsc" " + "COFF Linker for 80x86" with flags "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes /pdb:".\msvcobj/Thtest.pdb" /debug /machine:I386 /out:".\msvcobj/Thtest.exe" " + "Custom Build" with flags "" + "" with flags "" + +Creating temp file "D:\TEMP\RSP163.tmp" with contents +Creating command line "cl.exe @D:\TEMP\RSP163.tmp" +Creating temp file "D:\TEMP\RSP164.tmp" with contents +Creating command line "link.exe @D:\TEMP\RSP164.tmp" +Compiling... +Foo.cpp +Linking... +LINK : fatal error LNK1168: cannot open .\msvcobj/Thtest.exe for writing +Error executing link.exe. + + + +Thtest.exe - 1 error(s), 0 warning(s) diff --git a/thumbnail/Debug/Main.obj b/thumbnail/Debug/Main.obj new file mode 100644 index 0000000..5ee52ff Binary files /dev/null and b/thumbnail/Debug/Main.obj differ diff --git a/thumbnail/Debug/thumbnail.exe b/thumbnail/Debug/thumbnail.exe new file mode 100644 index 0000000..66dd581 Binary files /dev/null and b/thumbnail/Debug/thumbnail.exe differ diff --git a/thumbnail/Debug/thumbnail.exp b/thumbnail/Debug/thumbnail.exp new file mode 100644 index 0000000..8e33d36 Binary files /dev/null and b/thumbnail/Debug/thumbnail.exp differ diff --git a/thumbnail/Debug/thumbnail.ilk b/thumbnail/Debug/thumbnail.ilk new file mode 100644 index 0000000..110e735 Binary files /dev/null and b/thumbnail/Debug/thumbnail.ilk differ diff --git a/thumbnail/Debug/thumbnail.lib b/thumbnail/Debug/thumbnail.lib new file mode 100644 index 0000000..1e227b6 Binary files /dev/null and b/thumbnail/Debug/thumbnail.lib differ diff --git a/thumbnail/Debug/thumbnail.pch b/thumbnail/Debug/thumbnail.pch new file mode 100644 index 0000000..b8ccf7a Binary files /dev/null and b/thumbnail/Debug/thumbnail.pch differ diff --git a/thumbnail/Debug/thumbnail.pdb b/thumbnail/Debug/thumbnail.pdb new file mode 100644 index 0000000..360cad0 Binary files /dev/null and b/thumbnail/Debug/thumbnail.pdb differ diff --git a/thumbnail/Debug/vc60.idb b/thumbnail/Debug/vc60.idb new file mode 100644 index 0000000..d087629 Binary files /dev/null and b/thumbnail/Debug/vc60.idb differ diff --git a/thumbnail/Debug/vc60.pdb b/thumbnail/Debug/vc60.pdb new file mode 100644 index 0000000..21f3ba9 Binary files /dev/null and b/thumbnail/Debug/vc60.pdb differ diff --git a/thumbnail/Main.cpp b/thumbnail/Main.cpp new file mode 100644 index 0000000..2bb09ee --- /dev/null +++ b/thumbnail/Main.cpp @@ -0,0 +1,168 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void convert(const String &strPathFileName,const String &strPathSaveFile,int width); + +//Console console(Console::ConsoleType(Console::Write|Console::Read),false); +void writeLine(const String &string); +Options getOptions(int argc,char **argv); + +void main(int argc,char **argv) +{ + Block entryList; + PathFind pathFind; + String strExtension(".jpg"); + String strMask("*"); + String strPathDirectory; + String strPathDestination; + String strPathHTML("index.html"); + File outFile; + Profile profile; + DiskInfo diskInfo; + Options options; + + options=getOptions(argc,argv); + if(1==argc||options.getHelp()) + { + writeLine("USAGE -s -d -iw -tw -q "); + return; + } + writeLine("2001 diversified software solutions \"http://www.diversified-software.com\""); + writeLine(String("source-path:")+options.getInputPath()); + writeLine(String("destination-path:")+options.getOutputPath()); + writeLine(String("thumbnail-width:")+String().fromInt(options.getThumbnailWidth())); + writeLine(String("image-width:")+String().fromInt(options.getImageWidth())); + writeLine(String("quality:")+String().fromInt(options.getQuality())); + strPathDirectory=options.getInputPath()+String("\\"); + strPathDestination=options.getOutputPath()+String("\\"); + pathFind.fileList(strPathDirectory+strMask+strExtension,entryList); + if(!entryList.size()) + { + writeLine("No entries found."); + return; + } + if(!outFile.open(strPathDestination+strPathHTML,"wb")) + { + writeLine(String("Unable to create ")+String("'")+strPathDestination+strPathHTML+String("'.")); + return; + } + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine("Image"); + outFile.writeLine(""); + outFile.writeLine(""); + outFile.writeLine("

 

"); + + diskInfo.createDirectory(strPathDestination); + for(int index=0;index")); + } + outFile.writeLine(""); + outFile.writeLine(""); +} + +void convert(const String &strPathFileName,const String &strPathSaveFile,int width) +{ + JPGImage jpgImage; + PureDevice screenDevice; + Profile profile; + String strSaveFileName; + String strPathDirectory; + DiskInfo diskInfo; + + strPathDirectory=strPathFileName; + profile.makeFileName(strPathFileName,strSaveFileName); + strSaveFileName=strSaveFileName.betweenString(0,'.'); + strSaveFileName+=".bmp"; + profile.makeDirectoryName(strPathDirectory); + strPathDirectory+=String("\\")+strSaveFileName; + screenDevice.screenDevice(); + jpgImage.decode(strPathFileName,screenDevice); + jpgImage.resample(screenDevice,width); + jpgImage.saveBitmap(strPathDirectory); + ImageConverter::convert(strPathDirectory,strPathSaveFile,100); + diskInfo.unlink(strPathDirectory); +} + + +/* + +-s sourcedir +-d destination +-iw imagewidth +-tw thumbnailwidth +-q quality +-? display help + + +*/ + +Options getOptions(int argc,char **argv) +{ + Options options; + for(int arg=1;arg +#endif + +class Options +{ +public: + Options(void); + Options(const Options &options); + virtual ~Options(); + int getQuality(void)const; + void setQuality(int quality); + const String &getInputPath(void)const; + void setInputPath(const String &strInputPath); + const String &getOutputPath(void)const; + void setOutputPath(const String &strOuputPath); + int getImageWidth(void)const; + void setImageWidth(int imageWidth); + int getThumbnailWidth(void)const; + void setThumbnailWidth(int thumbnailWidth); + bool getHelp(void)const; + void setHelp(bool help); + Options &operator=(const Options &options); +private: + int mQuality; + int mThumbnailWidth; + int mImageWidth; + String mInputPath; + String mOutputPath; + bool mHelp; +}; + +inline +Options::Options(void) +: mQuality(100), mThumbnailWidth(220), mImageWidth(640), mHelp(false) +{ +} + +inline +Options::Options(const Options &options) +{ + *this=options; +} + +inline +Options::~Options() +{ +} + +inline +Options &Options::operator=(const Options &options) +{ + setQuality(options.getQuality()); + setInputPath(options.getInputPath()); + setOutputPath(options.getOutputPath()); + setImageWidth(options.getImageWidth()); + setThumbnailWidth(options.getThumbnailWidth()); + return *this; +} + +inline +int Options::getQuality(void)const +{ + return mQuality; +} + +inline +void Options::setQuality(int quality) +{ + mQuality=quality; +} + +inline +const String &Options::getInputPath(void)const +{ + return mInputPath; +} + +inline +void Options::setInputPath(const String &strInputPath) +{ + mInputPath=strInputPath; +} + +inline +const String &Options::getOutputPath(void)const +{ + return mOutputPath; +} + +inline +void Options::setOutputPath(const String &strOutputPath) +{ + mOutputPath=strOutputPath; +} + +inline +int Options::getImageWidth(void)const +{ + return mImageWidth; +} + +inline +void Options::setImageWidth(int imageWidth) +{ + mImageWidth=imageWidth; +} + +inline +int Options::getThumbnailWidth(void)const +{ + return mThumbnailWidth; +} + +inline +void Options::setThumbnailWidth(int thumbnailWidth) +{ + mThumbnailWidth=thumbnailWidth; +} + +inline +bool Options::getHelp(void)const +{ + return mHelp; +} + +inline +void Options::setHelp(bool help) +{ + mHelp=help; +} +#endif diff --git a/thumbnail/thumbnail.dsp b/thumbnail/thumbnail.dsp new file mode 100644 index 0000000..206466c --- /dev/null +++ b/thumbnail/thumbnail.dsp @@ -0,0 +1,101 @@ +# Microsoft Developer Studio Project File - Name="thumbnail" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=thumbnail - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "thumbnail.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "thumbnail.mak" CFG="thumbnail - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "thumbnail - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "thumbnail - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "thumbnail - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "thumbnail - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MT /GX /Zi /O2 /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "WIN32" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "thumbnail - Win32 Release" +# Name "thumbnail - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/thumbnail/thumbnail.dsw b/thumbnail/thumbnail.dsw new file mode 100644 index 0000000..9f2a9b9 --- /dev/null +++ b/thumbnail/thumbnail.dsw @@ -0,0 +1,89 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bsptree"=..\bsptree\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\common\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpeg6b"="..\..\parts\jpeg-6b\jpeg6b.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "thumbnail"=.\thumbnail.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpeg6b + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/thumbnail/thumbnail.ncb b/thumbnail/thumbnail.ncb new file mode 100644 index 0000000..3422ec4 Binary files /dev/null and b/thumbnail/thumbnail.ncb differ diff --git a/thumbnail/thumbnail.opt b/thumbnail/thumbnail.opt new file mode 100644 index 0000000..e62744c Binary files /dev/null and b/thumbnail/thumbnail.opt differ diff --git a/thumbnail/thumbnail.plg b/thumbnail/thumbnail.plg new file mode 100644 index 0000000..57bc27a --- /dev/null +++ b/thumbnail/thumbnail.plg @@ -0,0 +1,30 @@ + + +
+

Build Log

+

+--------------------Configuration: thumbnail - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP1543.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/thumbnail.pdb" /debug /machine:I386 /out:"Debug/thumbnail.exe" /pdbtype:sept +.\Debug\Main.obj +\work\exe\msbsp.lib +\work\exe\mscommon.lib +"\parts\jpeg-6b\lib\jpeg6b.lib" +\work\exe\jpgimg.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP1543.tmp" +

Output Window

+Linking... + Creating library Debug/thumbnail.lib and object Debug/thumbnail.exp +LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library + + + +

Results

+thumbnail.exe - 0 error(s), 1 warning(s) +
+ + diff --git a/toolbar/Addbmp.hpp b/toolbar/Addbmp.hpp new file mode 100644 index 0000000..e7b4067 --- /dev/null +++ b/toolbar/Addbmp.hpp @@ -0,0 +1,157 @@ +#ifndef _TOOLBAR_ADDBITMAP_HPP_ +#define _TOOLBAR_ADDBITMAP_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class AddBitmap : private TBADDBITMAP +{ +public: + AddBitmap(void); + AddBitmap(UINT bitmapID,HINSTANCE hProcessInstance=GetModuleHandle(0)); + AddBitmap(const String &strBitmapName,HINSTANCE hProcessInstance=GetModuleHandle(0)); + AddBitmap(const AddBitmap &someAddBitmap); + AddBitmap(const TBADDBITMAP &someTBADDBITMAP); + virtual ~AddBitmap(); + AddBitmap &operator=(const AddBitmap &someAddBitmap); + AddBitmap &operator=(const TBADDBITMAP &someTBADDBITMAP); + BOOL operator==(const AddBitmap &someAddBitmap)const; + BOOL operator==(const TBADDBITMAP &someTBADDBITMAP)const; + HINSTANCE processInstance(void)const; + void processInstance(HINSTANCE hProcessInstance); + UINT bitmapID(void)const; + void bitmapID(UINT bitmapID); + TBADDBITMAP &getTBADDBITMAP(void); + static UINT makeIntResource(const String &strResName); +private: + void init(void); +}; + +inline +AddBitmap::AddBitmap(void) +{ + init(); +} + +inline +AddBitmap::AddBitmap(UINT bitmapID,HINSTANCE hProcessInstance) +{ + TBADDBITMAP::hInst=hProcessInstance; + TBADDBITMAP::nID=bitmapID; +} + +inline +AddBitmap::AddBitmap(const String &strBitmapName,HINSTANCE hProcessInstance) +{ + if(HINST_COMMCTRL==hProcessInstance) + { + TBADDBITMAP::hInst=hProcessInstance; + TBADDBITMAP::nID=(UINT)MAKEINTRESOURCE((char*)(String&)strBitmapName); + } + else + { + TBADDBITMAP::hInst=0; + TBADDBITMAP::nID=(UINT)::LoadBitmap(hProcessInstance,strBitmapName); + } +// TBADDBITMAP::hInst=hProcessInstance; +// TBADDBITMAP::nID=(UINT)MAKEINTRESOURCE((char*)(String&)strBitmapName); +} + +inline +AddBitmap::AddBitmap(const AddBitmap &someAddBitmap) +{ + init(); + *this=someAddBitmap; +} + +inline +AddBitmap::AddBitmap(const TBADDBITMAP &someTBADDBITMAP) +{ + init(); + *this=someTBADDBITMAP; +} + +inline +AddBitmap::~AddBitmap() +{ +} + +inline +AddBitmap &AddBitmap::operator=(const AddBitmap &someAddBitmap) +{ + processInstance(someAddBitmap.processInstance()); + bitmapID(someAddBitmap.bitmapID()); + return *this; +} + +inline +AddBitmap &AddBitmap::operator=(const TBADDBITMAP &someTBADDBITMAP) +{ + processInstance(someTBADDBITMAP.hInst); + bitmapID(someTBADDBITMAP.nID); + return *this; +} + +inline +BOOL AddBitmap::operator==(const AddBitmap &someAddBitmap)const +{ + return (processInstance()==someAddBitmap.processInstance()&& + bitmapID()==someAddBitmap.bitmapID()); +} + +inline +BOOL AddBitmap::operator==(const TBADDBITMAP &someTBADDBITMAP)const +{ + return (processInstance()==someTBADDBITMAP.hInst&& + bitmapID()==someTBADDBITMAP.nID); +} + +inline +HINSTANCE AddBitmap::processInstance(void)const +{ + return TBADDBITMAP::hInst; +} + +inline +void AddBitmap::processInstance(HINSTANCE hProcessInstance) +{ + TBADDBITMAP::hInst=hProcessInstance; +} + +inline +UINT AddBitmap::bitmapID(void)const +{ + return TBADDBITMAP::nID; +} + +inline +void AddBitmap::bitmapID(UINT bitmapID) +{ + TBADDBITMAP::nID=bitmapID; +} + +inline +TBADDBITMAP &AddBitmap::getTBADDBITMAP(void) +{ + return (TBADDBITMAP&)*this; +} + +inline +void AddBitmap::init(void) +{ + TBADDBITMAP::hInst=0; + TBADDBITMAP::nID=0; +} + +inline +UINT AddBitmap::makeIntResource(const String &strResName) +{ + return (UINT)MAKEINTRESOURCE((char*)strResName.str()); +} +#endif diff --git a/toolbar/HOLD/ADDBMP.HPP b/toolbar/HOLD/ADDBMP.HPP new file mode 100644 index 0000000..83c2563 --- /dev/null +++ b/toolbar/HOLD/ADDBMP.HPP @@ -0,0 +1,141 @@ +#ifndef _TOOLBAR_ADDBITMAP_HPP_ +#define _TOOLBAR_ADDBITMAP_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +class AddBitmap : private TBADDBITMAP +{ +public: + AddBitmap(void); + AddBitmap(UINT bitmapID,HINSTANCE hProcessInstance=::GetModuleHandle(0)); + AddBitmap(const String &strBitmapName,HINSTANCE hProcessInstance=::GetModuleHandle(0)); + AddBitmap(const AddBitmap &someAddBitmap); + AddBitmap(const TBADDBITMAP &someTBADDBITMAP); + virtual ~AddBitmap(); + AddBitmap &operator=(const AddBitmap &someAddBitmap); + AddBitmap &operator=(const TBADDBITMAP &someTBADDBITMAP); + BOOL operator==(const AddBitmap &someAddBitmap)const; + BOOL operator==(const TBADDBITMAP &someTBADDBITMAP)const; + HINSTANCE processInstance(void)const; + void processInstance(HINSTANCE hProcessInstance); + UINT bitmapID(void)const; + void bitmapID(UINT bitmapID); + TBADDBITMAP &getTBADDBITMAP(void); +private: + void init(void); +}; + +inline +AddBitmap::AddBitmap(void) +{ + init(); +} + +inline +AddBitmap::AddBitmap(UINT bitmapID,HINSTANCE hProcessInstance) +{ + TBADDBITMAP::hInst=hProcessInstance; + TBADDBITMAP::nID=bitmapID; +} + +inline +AddBitmap::AddBitmap(const String &strBitmapName,HINSTANCE hProcessInstance) +{ + TBADDBITMAP::hInst=hProcessInstance; + TBADDBITMAP::nID=(UINT)MAKEINTRESOURCE((char*)(String&)strBitmapName); +} + + +inline +AddBitmap::AddBitmap(const AddBitmap &someAddBitmap) +{ + init(); + *this=someAddBitmap; +} + +inline +AddBitmap::AddBitmap(const TBADDBITMAP &someTBADDBITMAP) +{ + init(); + *this=someTBADDBITMAP; +} + +inline +AddBitmap::~AddBitmap() +{ +} + +inline +AddBitmap &AddBitmap::operator=(const AddBitmap &someAddBitmap) +{ + processInstance(someAddBitmap.processInstance()); + bitmapID(someAddBitmap.bitmapID()); + return *this; +} + +inline +AddBitmap &AddBitmap::operator=(const TBADDBITMAP &someTBADDBITMAP) +{ + processInstance(someTBADDBITMAP.hInst); + bitmapID(someTBADDBITMAP.nID); + return *this; +} + +inline +BOOL AddBitmap::operator==(const AddBitmap &someAddBitmap)const +{ + return (processInstance()==someAddBitmap.processInstance()&& + bitmapID()==someAddBitmap.bitmapID()); +} + +inline +BOOL AddBitmap::operator==(const TBADDBITMAP &someTBADDBITMAP)const +{ + return (processInstance()==someTBADDBITMAP.hInst&& + bitmapID()==someTBADDBITMAP.nID); +} + +inline +HINSTANCE AddBitmap::processInstance(void)const +{ + return TBADDBITMAP::hInst; +} + +inline +void AddBitmap::processInstance(HINSTANCE hProcessInstance) +{ + TBADDBITMAP::hInst=hProcessInstance; +} + +inline +UINT AddBitmap::bitmapID(void)const +{ + return TBADDBITMAP::nID; +} + +inline +void AddBitmap::bitmapID(UINT bitmapID) +{ + TBADDBITMAP::nID=bitmapID; +} + +inline +TBADDBITMAP &AddBitmap::getTBADDBITMAP(void) +{ + return (TBADDBITMAP&)*this; +} + +inline +void AddBitmap::init(void) +{ + TBADDBITMAP::hInst=0; + TBADDBITMAP::nID=0; +} +#endif diff --git a/toolbar/HOLD/TBBTN.HPP b/toolbar/HOLD/TBBTN.HPP new file mode 100644 index 0000000..9df5a3a --- /dev/null +++ b/toolbar/HOLD/TBBTN.HPP @@ -0,0 +1,216 @@ +#ifndef _TOOLBAR_TOOLBARBUTTON_HPP_ +#define _TOOLBAR_TOOLBARBUTTON_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif + +class ToolBarButton : private TBBUTTON +{ +public: + enum StateFlags{StateChecked=TBSTATE_CHECKED,StatePressed=TBSTATE_PRESSED,StateEnabled=TBSTATE_ENABLED, + StateHidden=TBSTATE_HIDDEN,StateIndeterminate=TBSTATE_INDETERMINATE,StateWrap=TBSTATE_WRAP, + StateEllipses=TBSTATE_ELLIPSES}; + enum StyleFlags{StyleButton=TBSTYLE_BUTTON,StyleSEP=TBSTYLE_SEP,StyleCheck=TBSTYLE_CHECK,StyleGroup=TBSTYLE_GROUP, + StyleCheckGroup=TBSTYLE_CHECKGROUP,StyleDropDown=TBSTYLE_DROPDOWN}; + ToolBarButton(void); + ToolBarButton(int indexBitmap,int commandID,BYTE stateFlags=StateEnabled,BYTE styleFlags=StyleButton,DWORD userData=0,DWORD indexString=0); + ToolBarButton(const ToolBarButton &someToolBarButton); + ToolBarButton(const TBBUTTON &someTBBUTTON); + virtual ~ToolBarButton(); + ToolBarButton &operator=(const ToolBarButton &someToolBarButton); + ToolBarButton &operator=(const TBBUTTON &someTBBUTTON); + BOOL operator==(const ToolBarButton &someToolBarButton)const; + BOOL operator==(const TBBUTTON &someTBBUTTON)const; + int indexBitmap(void)const; + void indexBitmap(int indexBitmap); + int commandID(void)const; + void commandID(int commandID); + BYTE stateFlags(void)const; + void stateFlags(BYTE stateFlags); + BYTE style(void)const; + void style(BYTE style); + DWORD userData(void)const; + void userData(DWORD userData); + int indexString(void)const; + void indexString(int indexString); + TBBUTTON &getTBBUTTON(void); +private: + void init(void); +}; + +inline +ToolBarButton::ToolBarButton(void) +{ + init(); +} + +inline +ToolBarButton::ToolBarButton(int indexBitmap,int commandID,BYTE stateFlags,BYTE styleFlags,DWORD userData,DWORD indexString) +{ + TBBUTTON::iBitmap=indexBitmap; + TBBUTTON::idCommand=commandID; + TBBUTTON::fsState=stateFlags; + TBBUTTON::fsStyle=styleFlags; + TBBUTTON::dwData=userData; + TBBUTTON::iString=indexString; +} + +inline +ToolBarButton::ToolBarButton(const ToolBarButton &someToolBarButton) +{ + init(); + *this=someToolBarButton; +} + +inline +ToolBarButton::ToolBarButton(const TBBUTTON &someTBBUTTON) +{ + init(); + *this=someTBBUTTON; +} + +inline +ToolBarButton::~ToolBarButton() +{ +} + +inline +ToolBarButton &ToolBarButton::operator=(const ToolBarButton &someToolBarButton) +{ + indexBitmap(someToolBarButton.indexBitmap()); + commandID(someToolBarButton.commandID()); + stateFlags(someToolBarButton.stateFlags()); + style(someToolBarButton.style()); + userData(someToolBarButton.userData()); + indexString(someToolBarButton.indexString()); + return *this; +} + +inline +ToolBarButton &ToolBarButton::operator=(const TBBUTTON &someTBBUTTON) +{ + indexBitmap(someTBBUTTON.iBitmap); + commandID(someTBBUTTON.idCommand); + stateFlags(someTBBUTTON.fsState); + style(someTBBUTTON.fsStyle); + userData(someTBBUTTON.dwData); + indexString(someTBBUTTON.iString); + return *this; +} + +inline +BOOL ToolBarButton::operator==(const ToolBarButton &someToolBarButton)const +{ + return (indexBitmap()==someToolBarButton.indexBitmap()&& + commandID()==someToolBarButton.commandID()&& + stateFlags()==someToolBarButton.stateFlags()&& + style()==someToolBarButton.style()&& + userData()==someToolBarButton.userData()&& + indexString()==someToolBarButton.indexString()); +} + +inline +BOOL ToolBarButton::operator==(const TBBUTTON &someTBBUTTON)const +{ + return (indexBitmap()==someTBBUTTON.iBitmap&& + commandID()==someTBBUTTON.idCommand&& + stateFlags()==someTBBUTTON.fsState&& + style()==someTBBUTTON.fsStyle&& + userData()==someTBBUTTON.dwData&& + indexString()==someTBBUTTON.iString); +} + +inline +int ToolBarButton::indexBitmap(void)const +{ + return TBBUTTON::iBitmap; +} + +inline +void ToolBarButton::indexBitmap(int indexBitmap) +{ + TBBUTTON::iBitmap=indexBitmap; +} + +inline +int ToolBarButton::commandID(void)const +{ + return TBBUTTON::idCommand; +} + +inline +void ToolBarButton::commandID(int commandID) +{ + TBBUTTON::idCommand=commandID; +} + +inline +BYTE ToolBarButton::stateFlags(void)const +{ + return TBBUTTON::fsState; +} + +inline +void ToolBarButton::stateFlags(BYTE stateFlags) +{ + TBBUTTON::fsState=stateFlags; +} + +inline +BYTE ToolBarButton::style(void)const +{ + return TBBUTTON::fsStyle; +} + +inline +void ToolBarButton::style(BYTE style) +{ + TBBUTTON::fsStyle=style; +} + +inline +DWORD ToolBarButton::userData(void)const +{ + return TBBUTTON::dwData; +} + +inline +void ToolBarButton::userData(DWORD userData) +{ + TBBUTTON::dwData=userData; +} + +inline +int ToolBarButton::indexString(void)const +{ + return TBBUTTON::iString; +} + +inline +void ToolBarButton::indexString(int indexString) +{ + TBBUTTON::iString=indexString; +} + +inline +void ToolBarButton::init(void) +{ + TBBUTTON::iBitmap=0; + TBBUTTON::idCommand=0; + TBBUTTON::fsState=0; + TBBUTTON::fsStyle=0; + TBBUTTON::bReserved[0]=0; + TBBUTTON::bReserved[1]=0; + TBBUTTON::dwData=0; + TBBUTTON::iString=0; +} + +inline +TBBUTTON &ToolBarButton::getTBBUTTON(void) +{ + return (TBBUTTON&)*this; +} +#endif diff --git a/toolbar/HOLD/TOOLBAR.CPP b/toolbar/HOLD/TOOLBAR.CPP new file mode 100644 index 0000000..6fe3730 --- /dev/null +++ b/toolbar/HOLD/TOOLBAR.CPP @@ -0,0 +1,272 @@ +#include +#include +#include + +ToolBar::ToolBar(void) +{ + CommonControlsEx commonControlsEx; + commonControlsEx.flags(CommonControlsEx::InitBar); + commonControlsEx.initCommonControlsEx(); +} + +ToolBar::ToolBar(const ToolBar &someToolBar) +{ // private implementation + *this=someToolBar; +} + +ToolBar::~ToolBar() +{ + destroy(); +} + +ToolBar &ToolBar::operator=(const ToolBar &/*someToolBar*/) +{ // private implementation + return *this; +} + +BOOL ToolBar::create(GUIWindow &parentWindow,UINT controlID,const Rect &initRect,UINT styles) +{ + if(isValid())return FALSE; + createControl(0L,TOOLBARCLASSNAME,String(),WS_CHILD|WS_BORDER|WS_VISIBLE|styles,initRect,parentWindow,controlID); + buttonStructSize(); + return isValid(); +} + +BOOL ToolBar::addBitmap(const AddBitmap &addBitmap)const +{ + if(!isValid())return FALSE; + return !(-1==sendMessage(TB_ADDBITMAP,1,(LPARAM)&((AddBitmap&)addBitmap).getTBADDBITMAP())); +} + +BOOL ToolBar::addBitmaps(Block &addBitmaps)const +{ + TBADDBITMAP *pTBADDBITMAP; + BOOL result; + + pTBADDBITMAP=::new TBADDBITMAP[addBitmaps.size()]; + for(int bmIndex=0;bmIndex &toolBarButtons)const +{ + BOOL result; + TBBUTTON *pTBBUTTONS; + + pTBBUTTONS=::new TBBUTTON[toolBarButtons.size()]; + for(int bmIndex=0;bmIndex +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _TOOLBAR_ADDBITMAP_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBARBUTTON_HPP_ +#include +#endif + + +class Rect; + +class ToolBar : public Control +{ +public: + enum Styles{StyleToolTips=TBSTYLE_TOOLTIPS,StyleWrapable=TBSTYLE_WRAPABLE,StyleAltDrag=TBSTYLE_ALTDRAG, + StyleFlat=TBSTYLE_FLAT,StyleList=TBSTYLE_LIST,StyleCustomErase=TBSTYLE_CUSTOMERASE}; + ToolBar(void); + virtual ~ToolBar(); + BOOL create(GUIWindow &parentWindow,UINT controlID,const Rect &initRect=Rect(0,0,100,30),UINT styles=StyleList); + BOOL addBitmap(const AddBitmap &addBitmap)const; + BOOL addBitmaps(Block &addBitmaps)const; + BOOL addButton(const ToolBarButton &toolBarButton)const; + BOOL addButtons(Block &toolBarButtons)const; + BOOL deleteButton(WORD indexButton)const; + BOOL changeBitmap(WORD indexBitmapFrom,WORD indexBitmapTo)const; + BOOL checkButton(UINT buttonID,BOOL checkState)const; + BOOL enableButton(UINT buttonID,BOOL enable)const; + BOOL canHandleLargeBitmaps(void)const; + BOOL getButtonInfo(WORD indexButton,ToolBarButton &toolBarButton)const; + BOOL getButtonText(WORD buttonID,String &strButtonText)const; + BOOL getItemRect(WORD indexButton,Rect &itemRect)const; + BOOL hideButton(UINT buttonID,BOOL hide)const; + BOOL indeterminate(UINT buttonID,BOOL isIndeterminate)const; + BOOL insertButton(WORD indexButton,const ToolBarButton &toolBarButton)const; + BOOL isButtonChecked(UINT buttonID)const; + BOOL isButtonEnabled(UINT buttonID)const; + BOOL isButtonHidden(UINT buttonID)const; + BOOL isButtonIndeterminate(UINT buttonID)const; + BOOL isButtonPressed(UINT buttonID)const; + BOOL pressButton(UINT buttonID,BOOL pressed)const; + BOOL setBitmapSize(WORD xBitmap,WORD yBitmap)const; + BOOL setButtonSize(WORD xButton,WORD yButton)const; + BOOL setCommandID(WORD indexButton,UINT commandID)const; + WORD countButtons(void)const; + WORD getButtonIndex(UINT buttonID)const; + WORD getBitmapIndex(UINT buttonID)const; + WORD getRows(void)const; + DWORD getButtonState(UINT buttonID)const; + HANDLE getToolTipControl(void)const; + void resize(void)const; + void customize(void)const; + void setParent(GUIWindow &parentWindow)const; + void setToolTips(HANDLE hToolTips)const; +private: + void buttonStructSize(void)const; + ToolBar(const ToolBar &someToolBar); + ToolBar &operator=(const ToolBar &someToolBar); +}; +#endif + diff --git a/toolbar/SCRAPS.TXT b/toolbar/SCRAPS.TXT new file mode 100644 index 0000000..b477065 --- /dev/null +++ b/toolbar/SCRAPS.TXT @@ -0,0 +1,973 @@ + + + +//====== TOOLBAR CONTROL ====================================================== +  +#ifndef NOTOOLBAR +  +#ifdef _WIN32 +#define TOOLBARCLASSNAMEW L"ToolbarWindow32" +#define TOOLBARCLASSNAMEA "ToolbarWindow32" +  +#ifdef UNICODE +#define TOOLBARCLASSNAME TOOLBARCLASSNAMEW +#else +#define TOOLBARCLASSNAME TOOLBARCLASSNAMEA +#endif +  +#else +#define TOOLBARCLASSNAME "ToolbarWindow" +#endif +  +typedef struct _TBBUTTON { +    int iBitmap; +    int idCommand; +    BYTE fsState; +    BYTE fsStyle; +#ifdef _WIN32 +    BYTE bReserved[2]; +#endif +    DWORD dwData; +    int iString; +} TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON; +typedef const TBBUTTON FAR* LPCTBBUTTON; +  +  +typedef struct _COLORMAP { +    COLORREF from; +    COLORREF to; +} COLORMAP, FAR* LPCOLORMAP; +  +WINCOMMCTRLAPI HWND WINAPI CreateToolbarEx(HWND hwnd, DWORD ws, UINT wID, int nBitmaps, +                        HINSTANCE hBMInst, UINT wBMID, LPCTBBUTTON lpButtons, +                        int iNumButtons, int dxButton, int dyButton, +                        int dxBitmap, int dyBitmap, UINT uStructSize); +  +WINCOMMCTRLAPI HBITMAP WINAPI CreateMappedBitmap(HINSTANCE hInstance, int idBitmap, +                                  UINT wFlags, LPCOLORMAP lpColorMap, +                                  int iNumMaps); +  +#define CMB_MASKED 0x02 +  +#define TBSTATE_CHECKED 0x01 +#define TBSTATE_PRESSED 0x02 +#define TBSTATE_ENABLED 0x04 +#define TBSTATE_HIDDEN 0x08 +#define TBSTATE_INDETERMINATE 0x10 +#define TBSTATE_WRAP 0x20 +#define TBSTATE_ELLIPSES 0x40 +  +  +  +#define TB_ENABLEBUTTON (WM_USER + 1) +#define TB_CHECKBUTTON (WM_USER + 2) +#define TB_PRESSBUTTON (WM_USER + 3) +#define TB_HIDEBUTTON (WM_USER + 4) +#define TB_INDETERMINATE (WM_USER + 5) +#define TB_ISBUTTONENABLED (WM_USER + 9) +#define TB_ISBUTTONCHECKED (WM_USER + 10) +#define TB_ISBUTTONPRESSED (WM_USER + 11) +#define TB_ISBUTTONHIDDEN (WM_USER + 12) +#define TB_ISBUTTONINDETERMINATE (WM_USER + 13) +#define TB_SETSTATE (WM_USER + 17) +#define TB_GETSTATE (WM_USER + 18) +#define TB_ADDBITMAP (WM_USER + 19) +  +#ifdef _WIN32 +typedef struct tagTBADDBITMAP { +        HINSTANCE hInst; +        UINT nID; +} TBADDBITMAP, *LPTBADDBITMAP; +  +#define HINST_COMMCTRL ((HINSTANCE)-1) +#define IDB_STD_SMALL_COLOR 0 +#define IDB_STD_LARGE_COLOR 1 +#define IDB_VIEW_SMALL_COLOR 4 +#define IDB_VIEW_LARGE_COLOR 5 +#define IDB_HIST_SMALL_COLOR 8 +#define IDB_HIST_LARGE_COLOR 9 +  +// icon indexes for standard bitmap +  +#define STD_CUT 0 +#define STD_COPY 1 +#define STD_PASTE 2 +#define STD_UNDO 3 +#define STD_REDOW 4 +#define STD_DELETE 5 +#define STD_FILENEW 6 +#define STD_FILEOPEN 7 +#define STD_FILESAVE 8 +#define STD_PRINTPRE 9 +#define STD_PROPERTIES 10 +#define STD_HELP 11 +#define STD_FIND 12 +#define STD_REPLACE 13 +#define STD_PRINT 14 +  +// icon indexes for standard view bitmap +  +#define VIEW_LARGEICONS 0 +#define VIEW_SMALLICONS 1 +#define VIEW_LIST 2 +#define VIEW_DETAILS 3 +#define VIEW_SORTNAME 4 +#define VIEW_SORTSIZE 5 +#define VIEW_SORTDATE 6 +#define VIEW_SORTTYPE 7 +#define VIEW_PARENTFOLDER 8 +#define VIEW_NETCONNECT 9 +#define VIEW_NETDISCONNECT 10 +#define VIEW_NEWFOLDER 11 +  +#define HIST_BACK 0 +#define HIST_FORWARD 1 +#define HIST_FAVORITES 2 +#define HIST_ADDTOFAVORITES 3 +#define HIST_VIEWTREE 4 +  +#endif +  +#define TB_ADDBUTTONS (WM_USER + 20) +#define TB_INSERTBUTTON (WM_USER + 21) +#define TB_DELETEBUTTON (WM_USER + 22) +#define TB_GETBUTTON (WM_USER + 23) +#define TB_BUTTONCOUNT (WM_USER + 24) +#define TB_COMMANDTOINDEX (WM_USER + 25) +  +#ifdef _WIN32 +  +typedef struct tagTBSAVEPARAMSA { +    HKEY hkr; +    LPCSTR pszSubKey; +    LPCSTR pszValueName; +} TBSAVEPARAMSA, FAR* LPTBSAVEPARAMSA; +  +typedef struct tagTBSAVEPARAMSW { +    HKEY hkr; +    LPCWSTR pszSubKey; +    LPCWSTR pszValueName; +} TBSAVEPARAMSW, FAR *LPTBSAVEPARAMW; +  +#ifdef UNICODE +#define TBSAVEPARAMS TBSAVEPARAMSW +#define LPTBSAVEPARAMS LPTBSAVEPARAMSW +#else +#define TBSAVEPARAMS TBSAVEPARAMSA +#define LPTBSAVEPARAMS LPTBSAVEPARAMSA +#endif +  +#endif +  +#define TB_SAVERESTOREA (WM_USER + 26) + + +  + +#define TB_SAVERESTOREW (WM_USER + 76) +#define TB_CUSTOMIZE (WM_USER + 27) +#define TB_ADDSTRINGA (WM_USER + 28) +#define TB_ADDSTRINGW (WM_USER + 77) +#define TB_GETITEMRECT (WM_USER + 29) +#define TB_BUTTONSTRUCTSIZE (WM_USER + 30) +#define TB_SETBUTTONSIZE (WM_USER + 31) +#define TB_SETBITMAPSIZE (WM_USER + 32) +#define TB_AUTOSIZE (WM_USER + 33) +#define TB_GETTOOLTIPS (WM_USER + 35) +#define TB_SETTOOLTIPS (WM_USER + 36) +#define TB_SETPARENT (WM_USER + 37) +#define TB_SETROWS (WM_USER + 39) +#define TB_GETROWS (WM_USER + 40) +#define TB_SETCMDID (WM_USER + 42) +#define TB_CHANGEBITMAP (WM_USER + 43) +#define TB_GETBITMAP (WM_USER + 44) +#define TB_GETBUTTONTEXTA (WM_USER + 45) +#define TB_GETBUTTONTEXTW (WM_USER + 75) +#define TB_REPLACEBITMAP (WM_USER + 46) +#define TB_SETINDENT (WM_USER + 47) +#define TB_SETIMAGELIST (WM_USER + 48) +#define TB_GETIMAGELIST (WM_USER + 49) +#define TB_LOADIMAGES (WM_USER + 50) +#define TB_GETRECT (WM_USER + 51) // wParam is the Cmd instead of index +#define TB_SETHOTIMAGELIST (WM_USER + 52) +#define TB_GETHOTIMAGELIST (WM_USER + 53) +#define TB_SETDISABLEDIMAGELIST (WM_USER + 54) +#define TB_GETDISABLEDIMAGELIST (WM_USER + 55) +#define TB_SETSTYLE (WM_USER + 56) +#define TB_GETSTYLE (WM_USER + 57) +#define TB_GETBUTTONSIZE (WM_USER + 58) +#define TB_SETBUTTONWIDTH (WM_USER + 59) +#define TB_SETMAXTEXTROWS (WM_USER + 60) +#define TB_GETTEXTROWS (WM_USER + 61) +#ifdef UNICODE +#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW +#define TB_SAVERESTORE TB_SAVERESTOREW +#define TB_ADDSTRING TB_ADDSTRINGW +#else +#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA +#define TB_SAVERESTORE TB_SAVERESTOREA +#define TB_ADDSTRING TB_ADDSTRINGA +#endif +  +typedef struct { +        HINSTANCE hInstOld; +        UINT nIDOld; +        HINSTANCE hInstNew; +        UINT nIDNew; +        int nButtons; +} TBREPLACEBITMAP, *LPTBREPLACEBITMAP; +  +#ifdef _WIN32 +  +#define TBBF_LARGE 0x0001 +  +#define TB_GETBITMAPFLAGS (WM_USER + 41) +  +#define TBN_GETBUTTONINFOA (TBN_FIRST-0) +#define TBN_GETBUTTONINFOW (TBN_FIRST-20) +#define TBN_BEGINDRAG (TBN_FIRST-1) +#define TBN_ENDDRAG (TBN_FIRST-2) +#define TBN_BEGINADJUST (TBN_FIRST-3) +#define TBN_ENDADJUST (TBN_FIRST-4) +#define TBN_RESET (TBN_FIRST-5) +#define TBN_QUERYINSERT (TBN_FIRST-6) +#define TBN_QUERYDELETE (TBN_FIRST-7) +#define TBN_TOOLBARCHANGE (TBN_FIRST-8) +#define TBN_CUSTHELP (TBN_FIRST-9) +#define TBN_DROPDOWN (TBN_FIRST - 10) +#define TBN_CLOSEUP (TBN_FIRST - 11) +  +#ifdef UNICODE +#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOW +#else +#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOA +#endif +  +typedef struct tagNMTOOLBARA { +    NMHDR hdr; +    int iItem; +    TBBUTTON tbButton; +    int cchText; +    LPSTR pszText; +} NMTOOLBARA, FAR* LPNMTOOLBARA; +  +  +typedef struct tagNMTOOLBARW { +    NMHDR hdr; +    int iItem; +    TBBUTTON tbButton; +    int cchText; +    LPWSTR pszText; +} NMTOOLBARW, FAR* LPNMTOOLBARW; +  +#ifdef UNICODE +#define NMTOOLBAR NMTOOLBARW +#define LPNMTOOLBAR LPNMTOOLBARW +#else +#define NMTOOLBAR NMTOOLBARA +#define LPNMTOOLBAR LPNMTOOLBARA +#endif +  +#define TBNOTIFYA NMTOOLBARA +#define TBNOTIFYW NMTOOLBARW +#define TBNOTIFY NMTOOLBAR +#define LPTBNOTIFY LPNMTOOLBAR +#define LPTBNOTIFYA LPNMTOOLBARA +#define LPTBNOTIFYW LPNMTOOLBARW +  +#endif +  +#endif + + + +Toolbar Styles and Default Behavior + +The window procedure for the toolbar automatically positions and sets the size of the toolbar window. +By default, the toolbar appears at the top of its parent window's client area; however, you can place +the toolbar at the bottom of the client area by specifying CCS_BOTTOM. + +The only new window style associated with the new toolbar control is TBSTYLE_TOOLTIPS. This new style allows the toolbar to display ToolTips (that neat little box that pops up when you rest the mouse cursor on a toolbar button). The system will send a WM_NOTIFY message to the toolbar whenever it needs to display text in a pop-up. The code example below shows the implementation of the ToolTips feature. + +Creating a Toolbar Window + +As mentioned above, creating a toolbar is simple: You fill out a button structure, create a large +bitmap containing the buttons, then call the CreateWindowEx function, +specifying the TOOLBARCLASSNAME style. Once the toolbar is created, you need to send messages to +add the buttons and bitmaps to the toolbar. Then, unless there is something special you want to do, +you can just let the system take care of handling the toolbar processing. The following code creates +a toolbar, loads the bitmaps for the toolbar, and adds the buttons to the toolbar. + +// Fill out a structure describing the buttons in the toolbar. +TBBUTTON tbButtons[] = { + { 0, IDM_OPT1, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, + { 1, IDM_OPT2, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, + { 2, IDM_OPT3, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}, + { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, -1}, + { 3, IDM_EXIT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0} +}; + +// Declare a bitmap structure if working under Win32. +TBADDBITMAP tbBitamps; + +// Initialize the members. +. +. +. +tbBitamps.hInst = hInstance; // current instance +tbBitmaps.nID = IDB_TOOLBAR; // ID of the bitmap resource +. +. +. +// Function that creates a Win32 toolbar. +// Parameters: +// HWND hWndParent - Handle to the parent window. +// LONG lNumBitmaps - Number of bitmaps for the toolbar. +// TBADDBITMAP tbBItmaps - Bitmap structure for Win32. +// LONG lNumButtons - Number of buttons on the toolbar. +// TBBUTON tbButtons - Pointer to button structure. +// DWORD dwStyle - Special toolbar window styles. Can be a combination +// of generic common control styles or specific toolbar styles. +// int iToolBarID - ID for the toolbar window. +// Returns: +// Handle to the toolbar window if successful; otherwise NULL. +// + + if (hWndToolBar) + { + // Load the bitmaps for the toolbar. + if (SendMessage(hWndToolBar, TB_ADDBITMAP, lNumBitmaps, + (LONG) &tbBitmaps) == -1) + return (NULL); + // Add the buttons to the toolbar. + SendMessage(hWndToolBar, TB_ADDBUTTONS, lNumButtons, (LONG) &tbButtons); + // The toolbar was created with the buttons successfully. + // Return the handle to the toolbar. + return (hWndToolBar); + } + // There was an error creating the toolbar; return NULL. + return NULL; +} + + +Another method of creating a toolbar is to call the CreateToolBarEx function. This function performs the same actions that I outlined above in MyCreateToolBar. The CreateToolBarEx function takes the following parameters: + + + +•HWND hwnd: Handle to the parent window for the toolbar.•DWORD ws: The window styles for the toolbar.•WORD wID: The identifier for the toolbar.•int nBitmaps: The number of images contained in the bitmap specified by hBMInst and wBMID.•HINSTANCE hBMInst: The module instance with the executable file that contains the bitmap resource.•WORD wBMID: The resource identifier for the bitmap resource. If hBMInst is NULL, this must be a valid bitmap handle.•LPCTTBBUTTON lpButtons: The address of the TBBUTTON structure.•int iNumButtons: The number of buttons to add to the toolbar.•int dxButton, dyButton: The width and height, in pixels, of the buttons.•int dxBitmap, dyBitmap: The width and height, in pixels, of the bitmaps.•UINT uStructSize: The size of the TBBUTTON structure. + + + +You can add ToolTips support to your toolbar by specifying the TBSTYLE_TOOLTIPS style and creating a STRINGTABLE that contains the text to display in your .RC file. Once you have done this, you process the WM_NOTIFY message that is sent to the parent window procedure of the toolbar, as shown in the code below. + +// This code goes in your .RC file. +STRINGTABLE +BEGIN + IDM_OPT1, "Option 1" + IDM_OPT2, "Option 2" + IDM_OPT3, "Option 3" + IDM_EXIT, "Exit Tool bar Sample" +END + +// This code goes in your .C file. +TOOLINFO tbToolInfo; + +// Trap the WM_NOTIFY message. +case WM_NOTIFY: + lpToolTipText = (LPTOOLTIPTEXT)lParam; + if (lpToolTipText->hdr.code == TTN_NEEDTEXT) + { + // If the system needs text, load it from the resource. + LoadString (hInst, + lpToolTipText->hdr.idFrom, // string ID == cmd ID + szBuf, + sizeof(szBuf)); + // Point the structure to the string. + lpToolTipText->lpszText = szBuf; + } + break; + + +To see how the code above behaves, click to open the Toolbar project files and run TOOLBAR.EXE. + +Warning: The Toolbar executable file was built and tested using the Windows 95 Preliminary Development Kit. The executable will run only on Windows 95; it will not run under Windows 3.1 or Windows NT 3.5. If you have Windows 95 installed on your computer but you have problems running this sample, copy the project files to your system, rebuild the project, and run the executable. + +Toolbar Structures + +This section describes the new structures that you can use in Win32 to create and manipulate toolbars and their buttons. Each button that you add to a toolbar can have one of the styles listed in the table below. These button styles can be used in combination and are included in the TBBUTTON structure described below. + +Table 2. Toolbar Button Styles + + + +Style + + + +Use + + + +TBSTYLE_BUTTON +Creates a standard button. + + + +TBSTYLE_CHECK +Creates a button that stays pressed until released. + + + +TBSTYLE_CHECKGROUP +Creates a checked button that stays pressed until released or until another button in the group is pressed. + + + +TBSTYLE_GROUP +Creates a checked button that stays pressed until another button in the group is pressed. + + + +TBSTYLE_SEP + + + +Creates a separator, which provides a small gap between button groups. + + + + +Once you specify your toolbar and its buttons, you may need to query the toolbar for +information about the current state of a button. The current state is kept in a TBBUTTON +structure, as described below. If you need to determine the state of a button dynamically, +you can send the TB_GETSTATE message to the toolbar. + +Table 3. Toolbar Button States + + + +State + + + +Meaning + + + +TBSTATE_CHECKED + + + +The button is checked. + + + +TBSTATE_ENABLED + + + +The button is enabled. + + + +TBSTATE_HIDDEN + + + +The button is hidden. + + + +TBSTATE_INDETERMINATE + + + +The button is indeterminate. + + + +TBSTATE_PRESSED + + + +The button is pressed. + + + + +TBBUTTON + +typedef struct tagTBBUTTON { + int iBitmap; \\ index of the bitmap image of the button + int idCommand; \\ command identifier of the button + BYTE fsState; \\ button state flags, as listed in Table 3 + BYTE fsStyle; \\ button style, as listed in Table 2 + DWORD dwData; \\ application-defined data + int iString; \\ index of the help text string for the button +} TBBUTTON; + + +The TBBUTTON structure contains information about a button in a toolbar. TBBUTTON includes the following members: + + + +•int iBitmap: Zero-based index that identifies the location of the button image in the bitmap.•int idCommand: Command identifier associated with the button. This identifier is used in a WM_COMMAND message when the button is pressed. This member must be zero if the fsStyle member is TBSTYLE_SEP.•BYTE fsState: Button state flags. This can be a combination of the values listed in Table 3.•BYTE fsStyle: Button style flags. This can be a combination of the values listed in Table 2.•DWORD dwData: Application-defined value.•int iString: Index of the help text string in the string list for the button. + + + +ADJUSTINFO + +typedef struct tagADJUSTINFO { + TBBUTTON tbButton; \\ structure containing button information + char szDescription[1]; \\ TBD +}; + + +The ADJUSTINFO structure contains information about a button in a toolbar that is being +customized by the user. The structure includes the following members: + + + +•TBBUTTON tbButton: A structure that contains information about a button.•char szDescription: +The use of this member has not been determined yet. + +TBADDBITMAP + +typedef struct tagTBADDBITMAP { + HINSTANCE hInst; \\ handle to the instance containing the bitmaps + UINT nID; \\ resource identifier for the bitmap +} TBADDBITMAP; + + +The TBADDBITMAP structure contains information about the bitmaps to add to a toolbar. It is used when writing a Win32 application. TBADDBITMAP includes the following members: + + + +•HINSTANCE hInst: Handle to the instance that contains the bitmaps.•UINT nID: Resource identifier for the bitmap. + + + +Toolbar Messages + +The system and applications send messages to toolbars, just as they send messages to any other window. This section lists the messages that can be sent to toolbar controls and the values for the wParam and lParam for each message. + +TB_ADDBITMAP + +wParam = nButtons; \\ number of buttons in the bitmap +lParam = (LPTBADDBITMAP)lptbab; \\ handle of the bitmap + + +Description: The TB_ADDBITMAP message adds a new bitmap to the list of bitmaps available for a toolbar. This message is for non-Win32 applications only. + +Parameters: wParam represents the number of buttons in the bitmap. lParam is a pointer to the TBADDBITMAP structure. + +Return value: The low-order word contains the index of the first button bitmap. The high-order word is not used if the call is successful; otherwise, the low-order word is –1. + +TB_ADDBUTTONS + +wParam = nButtons; \\ number of buttons +lParam = (LPTBBUTTON)lpButtons; \\ address of array of button structures + + +Description: The TB_ADDBUTTONS message adds one or more buttons to a toolbar. + +Parameters: wParam represents the number of buttons to add to the toolbar. lParam is the address of an array of TBBUTTON structures containing information about the buttons to add. The array must contain the same number of elements as buttons specified by wParam. + +Return value: TRUE if successful; FALSE otherwise. + +TB_ADDSTRING + +wParam = (HINSTANCE)hInst; \\ module instance containing the string +lParam = (MAKELONG)(idString, 0); \\ string identifier or string buffer + + +Description: The TB_ADDSTRING message adds a new string to the list of strings available for a toolbar. + +Parameters: wParam is the handle of the module instance with an executable file that contains the string resource. This parameter is zero if lParam points to one or more strings. lParam is the resource identifier for the string resource or the address of a buffer that contains one or more null-terminated strings to add to the list, depending on the value of wParam. The last string must be terminated with two NULL characters. + +Return value: The index of the first new string if successful; otherwise –1. + +TB_AUTOSIZE + +wParam = 0; \\ not used +lParam = 0; \\ not used + + +Description: The TB_AUTOSIZE message causes a toolbar to be resized. An application sends this message whenever it does something (sets the button or bitmap size or adds strings) to change the size of a toolbar. + +Parameters: wParam and lParam are not used. + +Return value: None. + +TB_BUTTONCOUNT + +wParam = 0; \\ not used +lParam = 0; \\ not used + + +Description: The TB_BUTTONCOUNT message gets a count of the buttons currently in the toolbar. + +Parameters: wParam and lParam are not used. + +Return value: The number of buttons in the toolbar. + +TB_BUTTONSTRUCTSIZE + +wParam = cb; \\ size of the TBBUTTON structure in bytes +lParam = 0; \\ not used + + +Description: The TB_BUTTONSTRUCTSIZE specifies the size of the TBBUTTON structure. The system uses this size to determine the version of COMMCTRL.DLL that is being used. If an application uses CreateWindow to create the toolbar, it must send this message before adding any buttons to the toolbar. The CreateToolBarEx function automatically sends this message, and the size of the TBBUTTON structure is a parameter to the CreateToolbarEx function. + +Parameters: wParam is the size, in bytes, of the TBBUTTON structure. lParam is not used. + +Return value: None. + +TB_CHECKBUTTON + +wParam = idButton; \\ command identifier of the button to check +lParam = MAKELONG(fCheck, 0); \\ Check flag - TRUE to add, FALSE to remove + + +Description: The TB_CHECKBUTTON message checks or unchecks a given button. When a button has been checked, it appears pressed. + +Parameters: wParam is the command identifier of the button to check. If lParam is TRUE, the check is added; if lParam is FALSE, the check is removed. + +Return value: TRUE if successful; FALSE otherwise. + +TB_COMMANDTOINDEX + +wParam = idButton; \\ command identifier of the button +lParam = 0; \\ not used + + +Description: The TB_COMMANDTOINDEX message gets the zero-based index for the button associated with the specified command identifier. + +Parameters: wParam is the command identifier associated with the button. lParam is not used. + +Return value: The zero-based index for the button. + +TB_CUSTOMIZE + +wParam = 0; \\ not used +lParam = 0; \\ not used + + +Description: The TB_CUSTOMIZE message displays the Customize Toolbar dialog box. + +Parameters: wParam and lParam are not used. + +Return value: None. + +TB_DELETEBUTTON + +wParam = iButton; \\ zero-based index of the button to delete +lParam = 0; \\ not used + + +Description: The TB_DELETEBUTTON message deletes a button from the toolbar. + +Parameters: wParam is the zero-based index of the button to delete. lParam is not used. + +Return value: TRUE if successful; FALSE otherwise. + +TB_ENABLEBUTTON + +wParam = idButton; \\ command identifier of the button +lParam = MAKELONG(fEnable, 0); \\ flag - TRUE to enable, FALSE to disable + + +Description: The TB_ENABLEBUTTON message enables or disables the specified button. When a button has been enabled, it can be pressed and checked. + +Parameters: wParam is the command identifier of the button to enable or disable. If lParam is TRUE, the button is enabled; if lParam is FALSE, the button is disabled. + +Return value: TRUE if successful; FALSE otherwise. + +TB_GETBUTTON + +wParam = iButton; \\ zero-based index of the button to get +lParam = (LPTBBUTTON)lpButton; \\ buffer that receives the button information + + +Description: The TB_GETBUTTON message retrieves information about the given button. + +Parameters: wParam is the zero-based index of the button for which to get information. lParam is the address of the TBBUTTON structure that receives the button information. + +Return value: TRUE if successful; FALSE otherwise. + +TB_GETITEMRECT + +wParam = iButton; \\ zero-based index of the button +lParam = (LPRECT)lprc; \\ array that receives the rectangle values + + +Description: The TB_GETITEMRECT message gets the bounding rectangle of a button in a toolbar. This message does not get the bounding rectangle for buttons whose state is set to TBSTATE_HIDDEN. + +Parameters: wParam is the zero-based index of the button for which to get information. lParam is the address of a RECT structure that receives the coordinates of the bounding rectangle. + +Return value: TRUE if successful; FALSE otherwise. + +TB_GETSTATE + +wParam = idButton; \\ command identifier of the button +lParam = 0; \\ not used + + +Description: The TB_GETSTATE message gets information about the state of the button, such as whether it is enabled, pressed, or checked. + +Parameters: wParam is the command identifier of the button for which to get information. lParam is not used. + +Return value: If the call is successful, the message returns the button state information as listed in Table 3. If the call is not successful, the message returns –1. + +TB_HIDEBUTTON + +wParam = idButton; \\ command identifier of the button +lParam = MAKELONG(fShow, 0); \\ TRUE to show and FALSE to hide + + +Description: The TB_HIDEBUTTON message hides or shows the specified button. + +Parameters: wParam is the command identifier of the button to hide or show. If lParam is TRUE, the button is hidden; if lParam is FALSE, the button is shown. + +Return value: TRUE if successful; FALSE otherwise. + +TB_INDETERMINATE + +wParam = idButton; \\ command identifier of the button +lParam = MAKELONG(fIndeterminate, 0); \\ TRUE to set and FALSE to clear + + +Description: The TB_INDETERMINATE message sets or clears the indeterminate state of the specified button. + +Parameters: wParam is the command identifier of the button whose indeterminate state is to be set or cleared. If lParam is TRUE, the indeterminate state is set; if lParam is FALSE, the indeterminate state is cleared. + +Return value: TRUE if successful; FALSE otherwise. + +TB_INSERTBUTTON + +wParam = iButton; \\ zero-based index of the button +lParam = (LPTBBUTTON)lpButton; \\ button information structure + + +Description: The TB_INSERTBUTTON message inserts a button in the toolbar. + +Parameters: wParam is the zero-based index of a button. The TB_INSERTBUTTON message inserts the new button in front of the button identified by wParam. lParam is the address of a TBBUTTON structure containing information about the button to insert. + +Return value: TRUE if successful; FALSE otherwise. + +TB_ISBUTTONCHECKED, TB_ISBUTTONENABLED, TB_ISBUTTONHIDDEN, TB_ISBUTTONINDETERMINATE, TB_ISBUTTONPRESSED + +wParam = idButton; \\ command identifier of the button +lParam = 0; \\ not used + + +Description: These messages determine whether the given button is checked, enabled, hidden, indeterminate, or pressed. + +Parameters: wParam is the command identifier of the button. lParam is not used. + +Return value: Nonzero if the button if TRUE; otherwise, returns zero. + +TB_PRESSBUTTON + +wParam = idButton; \\ command identifier of the button +lParam = MAKELONG(fPress, 0); \\ TRUE to press and FALSE to release + + +Description: The TB_PRESSBUTTON message presses or releases the given button. + +Parameters: wParam is the command identifier of the button to press or release. If lParam is TRUE, the button is pressed; if lParam is FALSE, the button is released. + +Return value: TRUE if successful; FALSE otherwise. + +TB_SAVERESTORE + +wParam = (BOOL)fSave; \\ TRUE to save and FALSE to restore +lParam = (LPSTR)lpszSectionFile; \\ strings used to save the information + + +Description: The TB_SAVERESTORE message saves or restores the state of the toolbar. + +Parameters: If wParam is TRUE, the information is saved; otherwise, it is restored. lParam is the address of two consecutive null-terminated strings. The first string specifies the name of a section in an initialization file. The second string specifies the name of the initialization file. If the second string is empty, the message uses the WIN.INI file by default. + +Return value: None. + +TB_SETBITMAPSIZE + +wParam = 0; \\ not used +lParam = MAKELONG(dxBitmap, dyBitmap); \\ width and height to set + + +Description: The TB_SETBITMAPSIZE message sets the size of the bitmapped images to be added to a toolbar. The size can be set only before adding any bitmaps to the toolbar. If an application does not explicitly set the bitmap size, the size defaults to 16-by-15 pixels. + +Parameters: wParam is not used. lParam is the width and height, in pixels, of the bitmapped images. + +Return value: TRUE if successful; FALSE otherwise. + +TB_SETBUTTONSIZE + +wParam = 0; \\ not used +lParam = MAKELONG(dxButton, dyButton); \\ width and height to set + + +Description: The TB_SETBUTTONSIZE message sets the size of the buttons to be added to a toolbar. You can set the button size only before you add any buttons to the toolbar. If an application does not explicitly set the button size, the size defaults to 24-by-22 pixels. + +Parameters: wParam is not used. lParam is the width and height, in pixels, of the buttons. + +Return value: TRUE if successful; FALSE otherwise. + +TB_SETSTATE + +wParam = idButton; \\ command identifier of the button +lParam = MAKELONG(fState,0); \\ state to set as listed in Table 3 + + +Description: The TB_SETSTATE message sets the state for the given button. + +Parameters: wParam is the command identifier of the button. lParam consists of the state flags, as listed in Table 3. + +Return value: TRUE if successful; FALSE otherwise. + +Toolbar Notification Messages + +This section lists the notification messages that Windows sends to toolbar windows. The parent window of the toolbar receives these messages via a WM_COMMAND message. Unless otherwise noted, Windows ignores the return value from these messages. In all cases, the wParam contains the identifier for the toolbar. + +Table 4. Toolbar Notification Messages + + + +Message + + + +Description + + + +lParam + + + +TBN_ADJUSTINFO + + + +Sent when the user is customizing a toolbar. Returns a handle to a global memory object containing an ADJUSTINFO structure. + + + +Button index + + + +TBN_BEGINADJUST + + + +Sent when the user begins customizing a toolbar. + + + +0—not used + + + +TBN_BEGINDRAG + + + +Sent when the user begins dragging a button in a toolbar. + + + +Button command ID + + + +TBN_CUSTHELP + + + +Sent when the user chooses the Help button in the Customize Toolbar dialog box. + + + +Customize Toolbar dialog box handle + + + +TBN_ENDADJUST + + + +Sent when the user finishes customizing a toolbar. + + + +0—not used + + + +TBN_ENDDRAG + + + +Sent when the user stops dragging a button in a toolbar. + + + +Button command ID + + + +TBN_QUERYDELETE + + + +Sent when the user attempts to delete a button while customizing a toolbar. Returns TRUE to delete the button, or FALSE to prevent the button from being deleted. + + + +Button index + + + +TBN_QUERYINSERT + + + +Sent when the user attempts to insert a button while customizing a toolbar. Returns TRUE to insert the new button in front of the given button, or FALSE to prevent the button from being inserted. + + + +Button index + + + +TBN_RESET + + + +Sent when the user resets a customized toolbar. + + + +0—not used + + + +TBN_TOOLBARCHANGE + + + +Sent when the user has customized a toolbar. + + + +Toolbar handle + + + + +Summary + +Status bars and toolbars are very handy controls that are familiar to users and easy to implement. These controls are built into Windows 95, so you will no longer have to worry about whether your toolbar or status bar conforms to the way the operating system or other companies implement these controls. If you are planning to add status bars or toolbars to your existing application, I suggest that you give these new common controls a try. Adding value to your application can hardly get any easier th \ No newline at end of file diff --git a/toolbar/SMK b/toolbar/SMK new file mode 100644 index 0000000..fe1a5ca --- /dev/null +++ b/toolbar/SMK @@ -0,0 +1,104 @@ +Comparing files tbbtn.hpp and hold\tbbtn.hpp +FC: no differences encountered + +Comparing files addbmp.hpp and hold\addbmp.hpp +****** addbmp.hpp +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +****** hold\addbmp.hpp +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +****** + + +Comparing files toolbar.hpp and hold\toolbar.hpp +****** toolbar.hpp +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +****** hold\toolbar.hpp +#endif +#ifndef _COMMON_CONTROL_HPP_ +****** + +****** toolbar.hpp + +class Rect; +****** hold\toolbar.hpp + + +class Rect; +****** + +****** toolbar.hpp + ToolBar &operator=(const ToolBar &someToolBar); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + +****** hold\toolbar.hpp + ToolBar &operator=(const ToolBar &someToolBar); +}; +#endif + +****** + +****** toolbar.hpp + Callback mSizeHandler; + SmartPointer mParentWindow; +}; +#endif + +****** hold\toolbar.hpp +****** + + +Comparing files toolbar.cpp and hold\toolbar.cpp +****** toolbar.cpp +{ + mSizeHandler.setCallback(this,&ToolBar::sizeHandler); + CommonControlsEx commonControlsEx; +****** hold\toolbar.cpp +{ + CommonControlsEx commonControlsEx; +****** + +****** toolbar.cpp +{ + if(mParentWindow.isOkay())mParentWindow->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + destroy(); +****** hold\toolbar.cpp +{ + destroy(); +****** + +****** toolbar.cpp + +CallbackData::ReturnType ToolBar::sizeHandler(CallbackData &someCallbackData) +{ + resize(); + return (CallbackData::ReturnType)FALSE; +} + +BOOL ToolBar::create(GUIWindow &parentWindow,UINT controlID,const Rect &initRect,UINT styles) +****** hold\toolbar.cpp + +BOOL ToolBar::create(GUIWindow &parentWindow,UINT controlID,const Rect &initRect,UINT styles) +****** + +****** toolbar.cpp + if(isValid())return FALSE; + mParentWindow=&parentWindow; + mParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + createControl(0L,TOOLBARCLASSNAME,String(),WS_CHILD|WS_BORDER|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|styles,initRec +t,parentWindow,controlID); + buttonStructSize(); +****** hold\toolbar.cpp + if(isValid())return FALSE; + createControl(0L,TOOLBARCLASSNAME,String(),WS_CHILD|WS_BORDER|WS_VISIBLE|styles,initRect,parentWindow,controlID); + buttonStructSize(); +****** + + diff --git a/toolbar/TBBTN.HPP b/toolbar/TBBTN.HPP new file mode 100644 index 0000000..9df5a3a --- /dev/null +++ b/toolbar/TBBTN.HPP @@ -0,0 +1,216 @@ +#ifndef _TOOLBAR_TOOLBARBUTTON_HPP_ +#define _TOOLBAR_TOOLBARBUTTON_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif + +class ToolBarButton : private TBBUTTON +{ +public: + enum StateFlags{StateChecked=TBSTATE_CHECKED,StatePressed=TBSTATE_PRESSED,StateEnabled=TBSTATE_ENABLED, + StateHidden=TBSTATE_HIDDEN,StateIndeterminate=TBSTATE_INDETERMINATE,StateWrap=TBSTATE_WRAP, + StateEllipses=TBSTATE_ELLIPSES}; + enum StyleFlags{StyleButton=TBSTYLE_BUTTON,StyleSEP=TBSTYLE_SEP,StyleCheck=TBSTYLE_CHECK,StyleGroup=TBSTYLE_GROUP, + StyleCheckGroup=TBSTYLE_CHECKGROUP,StyleDropDown=TBSTYLE_DROPDOWN}; + ToolBarButton(void); + ToolBarButton(int indexBitmap,int commandID,BYTE stateFlags=StateEnabled,BYTE styleFlags=StyleButton,DWORD userData=0,DWORD indexString=0); + ToolBarButton(const ToolBarButton &someToolBarButton); + ToolBarButton(const TBBUTTON &someTBBUTTON); + virtual ~ToolBarButton(); + ToolBarButton &operator=(const ToolBarButton &someToolBarButton); + ToolBarButton &operator=(const TBBUTTON &someTBBUTTON); + BOOL operator==(const ToolBarButton &someToolBarButton)const; + BOOL operator==(const TBBUTTON &someTBBUTTON)const; + int indexBitmap(void)const; + void indexBitmap(int indexBitmap); + int commandID(void)const; + void commandID(int commandID); + BYTE stateFlags(void)const; + void stateFlags(BYTE stateFlags); + BYTE style(void)const; + void style(BYTE style); + DWORD userData(void)const; + void userData(DWORD userData); + int indexString(void)const; + void indexString(int indexString); + TBBUTTON &getTBBUTTON(void); +private: + void init(void); +}; + +inline +ToolBarButton::ToolBarButton(void) +{ + init(); +} + +inline +ToolBarButton::ToolBarButton(int indexBitmap,int commandID,BYTE stateFlags,BYTE styleFlags,DWORD userData,DWORD indexString) +{ + TBBUTTON::iBitmap=indexBitmap; + TBBUTTON::idCommand=commandID; + TBBUTTON::fsState=stateFlags; + TBBUTTON::fsStyle=styleFlags; + TBBUTTON::dwData=userData; + TBBUTTON::iString=indexString; +} + +inline +ToolBarButton::ToolBarButton(const ToolBarButton &someToolBarButton) +{ + init(); + *this=someToolBarButton; +} + +inline +ToolBarButton::ToolBarButton(const TBBUTTON &someTBBUTTON) +{ + init(); + *this=someTBBUTTON; +} + +inline +ToolBarButton::~ToolBarButton() +{ +} + +inline +ToolBarButton &ToolBarButton::operator=(const ToolBarButton &someToolBarButton) +{ + indexBitmap(someToolBarButton.indexBitmap()); + commandID(someToolBarButton.commandID()); + stateFlags(someToolBarButton.stateFlags()); + style(someToolBarButton.style()); + userData(someToolBarButton.userData()); + indexString(someToolBarButton.indexString()); + return *this; +} + +inline +ToolBarButton &ToolBarButton::operator=(const TBBUTTON &someTBBUTTON) +{ + indexBitmap(someTBBUTTON.iBitmap); + commandID(someTBBUTTON.idCommand); + stateFlags(someTBBUTTON.fsState); + style(someTBBUTTON.fsStyle); + userData(someTBBUTTON.dwData); + indexString(someTBBUTTON.iString); + return *this; +} + +inline +BOOL ToolBarButton::operator==(const ToolBarButton &someToolBarButton)const +{ + return (indexBitmap()==someToolBarButton.indexBitmap()&& + commandID()==someToolBarButton.commandID()&& + stateFlags()==someToolBarButton.stateFlags()&& + style()==someToolBarButton.style()&& + userData()==someToolBarButton.userData()&& + indexString()==someToolBarButton.indexString()); +} + +inline +BOOL ToolBarButton::operator==(const TBBUTTON &someTBBUTTON)const +{ + return (indexBitmap()==someTBBUTTON.iBitmap&& + commandID()==someTBBUTTON.idCommand&& + stateFlags()==someTBBUTTON.fsState&& + style()==someTBBUTTON.fsStyle&& + userData()==someTBBUTTON.dwData&& + indexString()==someTBBUTTON.iString); +} + +inline +int ToolBarButton::indexBitmap(void)const +{ + return TBBUTTON::iBitmap; +} + +inline +void ToolBarButton::indexBitmap(int indexBitmap) +{ + TBBUTTON::iBitmap=indexBitmap; +} + +inline +int ToolBarButton::commandID(void)const +{ + return TBBUTTON::idCommand; +} + +inline +void ToolBarButton::commandID(int commandID) +{ + TBBUTTON::idCommand=commandID; +} + +inline +BYTE ToolBarButton::stateFlags(void)const +{ + return TBBUTTON::fsState; +} + +inline +void ToolBarButton::stateFlags(BYTE stateFlags) +{ + TBBUTTON::fsState=stateFlags; +} + +inline +BYTE ToolBarButton::style(void)const +{ + return TBBUTTON::fsStyle; +} + +inline +void ToolBarButton::style(BYTE style) +{ + TBBUTTON::fsStyle=style; +} + +inline +DWORD ToolBarButton::userData(void)const +{ + return TBBUTTON::dwData; +} + +inline +void ToolBarButton::userData(DWORD userData) +{ + TBBUTTON::dwData=userData; +} + +inline +int ToolBarButton::indexString(void)const +{ + return TBBUTTON::iString; +} + +inline +void ToolBarButton::indexString(int indexString) +{ + TBBUTTON::iString=indexString; +} + +inline +void ToolBarButton::init(void) +{ + TBBUTTON::iBitmap=0; + TBBUTTON::idCommand=0; + TBBUTTON::fsState=0; + TBBUTTON::fsStyle=0; + TBBUTTON::bReserved[0]=0; + TBBUTTON::bReserved[1]=0; + TBBUTTON::dwData=0; + TBBUTTON::iString=0; +} + +inline +TBBUTTON &ToolBarButton::getTBBUTTON(void) +{ + return (TBBUTTON&)*this; +} +#endif diff --git a/toolbar/TOOLBAR.BAK b/toolbar/TOOLBAR.BAK new file mode 100644 index 0000000..eed6b51 --- /dev/null +++ b/toolbar/TOOLBAR.BAK @@ -0,0 +1,241 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=toolbar - Win32 Debug +!MESSAGE No configuration specified. Defaulting to toolbar - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "toolbar - Win32 Release" && "$(CFG)" !=\ + "toolbar - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "toolbar.mak" CFG="toolbar - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "toolbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "toolbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "toolbar - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "toolbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\toolbar.lib" + +CLEAN : + -@erase "$(INTDIR)\toolbar.obj" + -@erase "$(OUTDIR)\toolbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/toolbar.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/toolbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/toolbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\toolbar.obj" + +"$(OUTDIR)\toolbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\toolbar.lib" + +CLEAN : + -@erase "$(INTDIR)\toolbar.obj" + -@erase "..\exe\toolbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/toolbar.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/toolbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\toolbar.lib" +LIB32_FLAGS=/nologo /out:"..\exe\toolbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\toolbar.obj" + +"..\exe\toolbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "toolbar - Win32 Release" +# Name "toolbar - Win32 Debug" + +!IF "$(CFG)" == "toolbar - Win32 Release" + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\toolbar.cpp + +!IF "$(CFG)" == "toolbar - Win32 Release" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\addbmp.hpp"\ + {$(INCLUDE)}"\.\tbbtn.hpp"\ + {$(INCLUDE)}"\.\toolbar.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\comctlex.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\addbmp.hpp"\ + {$(INCLUDE)}"\.\tbbtn.hpp"\ + {$(INCLUDE)}"\.\toolbar.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\comctlex.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/toolbar/TOOLBAR.CPP b/toolbar/TOOLBAR.CPP new file mode 100644 index 0000000..b7338bc --- /dev/null +++ b/toolbar/TOOLBAR.CPP @@ -0,0 +1,288 @@ +#include +#include +#include + +ToolBar::ToolBar(void) +{ + mSizeHandler.setCallback(this,&ToolBar::sizeHandler); + CommonControlsEx commonControlsEx; + commonControlsEx.flags(CommonControlsEx::InitBar); + commonControlsEx.initCommonControlsEx(); +} + +ToolBar::ToolBar(const ToolBar &someToolBar) +{ // private implementation + *this=someToolBar; +} + +ToolBar::~ToolBar() +{ + if(mParentWindow.isOkay())mParentWindow->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + destroy(); +} + +ToolBar &ToolBar::operator=(const ToolBar &/*someToolBar*/) +{ // private implementation + return *this; +} + +CallbackData::ReturnType ToolBar::sizeHandler(CallbackData &someCallbackData) +{ + resize(); + return (CallbackData::ReturnType)FALSE; +} + +BOOL ToolBar::create(GUIWindow &parentWindow,UINT controlID,const Rect &initRect,UINT styles) +{ + if(isValid())return FALSE; + mParentWindow=&parentWindow; + mParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + createControl(0L,TOOLBARCLASSNAME,String(),WS_CHILD|WS_BORDER|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|styles,initRect,parentWindow,controlID); + buttonStructSize(); + return isValid(); +} + +BOOL ToolBar::addBitmap(const AddBitmap &addBitmap,UINT imageCount)const +{ + if(!isValid())return FALSE; + return !(-1==sendMessage(TB_ADDBITMAP,imageCount,(LPARAM)&((AddBitmap&)addBitmap).getTBADDBITMAP())); +} + +BOOL ToolBar::addBitmaps(Block &addBitmaps)const +{ + TBADDBITMAP *pTBADDBITMAP; + BOOL result; + + pTBADDBITMAP=::new TBADDBITMAP[addBitmaps.size()]; + for(int bmIndex=0;bmIndex &toolBarButtons)const +{ + BOOL result; + TBBUTTON *pTBBUTTONS; + + pTBBUTTONS=::new TBBUTTON[toolBarButtons.size()]; + for(int bmIndex=0;bmIndex + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/toolbar/TOOLBAR.HPP b/toolbar/TOOLBAR.HPP new file mode 100644 index 0000000..00a3ca1 --- /dev/null +++ b/toolbar/TOOLBAR.HPP @@ -0,0 +1,79 @@ +#ifndef _TOOLBAR_TOOLBAR_HPP_ +#define _TOOLBAR_TOOLBAR_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif +#ifndef _TOOLBAR_ADDBITMAP_HPP_ +#include +#endif +#ifndef _TOOLBAR_TOOLBARBUTTON_HPP_ +#include +#endif + +class Rect; + +class ToolBar : public Control +{ +public: + enum Styles{StyleToolTips=TBSTYLE_TOOLTIPS,StyleWrapable=TBSTYLE_WRAPABLE,StyleAltDrag=TBSTYLE_ALTDRAG, + StyleFlat=TBSTYLE_FLAT,StyleList=TBSTYLE_LIST,StyleCustomErase=TBSTYLE_CUSTOMERASE}; + enum States{Checked=TBSTATE_CHECKED,Enabled=TBSTATE_ENABLED,Hidden=TBSTATE_HIDDEN, + Indeterminate=TBSTATE_INDETERMINATE,Pressed=TBSTATE_PRESSED,Wrap=TBSTATE_WRAP}; + ToolBar(void); + virtual ~ToolBar(); + BOOL create(GUIWindow &parentWindow,UINT controlID,const Rect &initRect=Rect(0,0,100,30),UINT styles=StyleList); + BOOL addBitmap(const AddBitmap &addBitmap,UINT imageCount=1)const; + BOOL addBitmaps(Block &addBitmaps)const; + BOOL addButton(const ToolBarButton &toolBarButton)const; + BOOL addButtons(Block &toolBarButtons)const; + BOOL deleteButton(WORD indexButton)const; + BOOL changeBitmap(WORD indexBitmapFrom,WORD indexBitmapTo)const; + BOOL checkButton(UINT buttonID,BOOL checkState)const; + BOOL enableButton(UINT buttonID,BOOL enable)const; + BOOL setState(UINT buttonID,int state); + BOOL canHandleLargeBitmaps(void)const; + BOOL getButtonInfo(WORD indexButton,ToolBarButton &toolBarButton)const; + BOOL getButtonText(WORD buttonID,String &strButtonText)const; + BOOL getItemRect(WORD indexButton,Rect &itemRect)const; + BOOL hideButton(UINT buttonID,BOOL hide)const; + BOOL indeterminate(UINT buttonID,BOOL isIndeterminate)const; + BOOL insertButton(WORD indexButton,const ToolBarButton &toolBarButton)const; + BOOL isButtonChecked(UINT buttonID)const; + BOOL isButtonEnabled(UINT buttonID)const; + BOOL isButtonHidden(UINT buttonID)const; + BOOL isButtonIndeterminate(UINT buttonID)const; + BOOL isButtonPressed(UINT buttonID)const; + BOOL pressButton(UINT buttonID,BOOL pressed)const; + BOOL setBitmapSize(WORD xBitmap,WORD yBitmap)const; + BOOL setButtonSize(WORD xButton,WORD yButton)const; + BOOL setCommandID(WORD indexButton,UINT commandID)const; + WORD countButtons(void)const; + WORD getButtonIndex(UINT buttonID)const; + WORD getBitmapIndex(UINT buttonID)const; + WORD getRows(void)const; + DWORD getButtonState(UINT buttonID)const; + HANDLE getToolTipControl(void)const; + void resize(void)const; + void customize(void)const; + void setParent(GUIWindow &parentWindow)const; + void setToolTips(HANDLE hToolTips)const; +private: + void buttonStructSize(void)const; + ToolBar(const ToolBar &someToolBar); + ToolBar &operator=(const ToolBar &someToolBar); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + + Callback mSizeHandler; + SmartPointer mParentWindow; +}; +#endif + diff --git a/toolbar/TOOLBAR.PLG b/toolbar/TOOLBAR.PLG new file mode 100644 index 0000000..d8b69eb --- /dev/null +++ b/toolbar/TOOLBAR.PLG @@ -0,0 +1,27 @@ + + +
+

Build Log

+

+--------------------Configuration: toolbar - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINDOWS\TEMP\RSP81B2.TMP" with contents +[ +/nologo /Zp1 /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/toolbar.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"C:\work\TOOLBAR\toolbar.cpp" +] +Creating command line "cl.exe @C:\WINDOWS\TEMP\RSP81B2.TMP" +Creating command line "link.exe -lib /nologo /out:"..\exe\toolbar.lib" .\msvcobj\toolbar.obj " +

Output Window

+Compiling... +toolbar.cpp +Creating library... + + + +

Results

+toolbar.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/toolbar/Toolbar.dsp b/toolbar/Toolbar.dsp new file mode 100644 index 0000000..5275945 --- /dev/null +++ b/toolbar/Toolbar.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="toolbar" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=toolbar - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Toolbar.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Toolbar.mak" CFG="toolbar - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "toolbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "toolbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "toolbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /I "\work" /I "\parts" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\toolbar.lib" + +!ENDIF + +# Begin Target + +# Name "toolbar - Win32 Release" +# Name "toolbar - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\toolbar.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\addbmp.hpp +# End Source File +# Begin Source File + +SOURCE=.\tbbtn.hpp +# End Source File +# Begin Source File + +SOURCE=.\toolbar.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/toolbar/Toolbar.mak b/toolbar/Toolbar.mak new file mode 100644 index 0000000..eed6b51 --- /dev/null +++ b/toolbar/Toolbar.mak @@ -0,0 +1,241 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=toolbar - Win32 Debug +!MESSAGE No configuration specified. Defaulting to toolbar - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "toolbar - Win32 Release" && "$(CFG)" !=\ + "toolbar - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "toolbar.mak" CFG="toolbar - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "toolbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "toolbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "toolbar - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "toolbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\toolbar.lib" + +CLEAN : + -@erase "$(INTDIR)\toolbar.obj" + -@erase "$(OUTDIR)\toolbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/toolbar.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/toolbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/toolbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\toolbar.obj" + +"$(OUTDIR)\toolbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\toolbar.lib" + +CLEAN : + -@erase "$(INTDIR)\toolbar.obj" + -@erase "..\exe\toolbar.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/toolbar.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/toolbar.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\toolbar.lib" +LIB32_FLAGS=/nologo /out:"..\exe\toolbar.lib" +LIB32_OBJS= \ + "$(INTDIR)\toolbar.obj" + +"..\exe\toolbar.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "toolbar - Win32 Release" +# Name "toolbar - Win32 Debug" + +!IF "$(CFG)" == "toolbar - Win32 Release" + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\toolbar.cpp + +!IF "$(CFG)" == "toolbar - Win32 Release" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\addbmp.hpp"\ + {$(INCLUDE)}"\.\tbbtn.hpp"\ + {$(INCLUDE)}"\.\toolbar.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\comctlex.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +DEP_CPP_TOOLB=\ + {$(INCLUDE)}"\.\addbmp.hpp"\ + {$(INCLUDE)}"\.\tbbtn.hpp"\ + {$(INCLUDE)}"\.\toolbar.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\comctlex.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\common\pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\toolbar.obj" : $(SOURCE) $(DEP_CPP_TOOLB) "$(INTDIR)" + + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/toolbar/toolbar.001 b/toolbar/toolbar.001 new file mode 100644 index 0000000..4ebbb2c --- /dev/null +++ b/toolbar/toolbar.001 @@ -0,0 +1,106 @@ +# Microsoft Developer Studio Project File - Name="toolbar" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=toolbar - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "toolbar.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "toolbar.mak" CFG="toolbar - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "toolbar - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "toolbar - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "toolbar - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "toolbar - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\toolbar.lib" + +!ENDIF + +# Begin Target + +# Name "toolbar - Win32 Release" +# Name "toolbar - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\toolbar.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\addbmp.hpp +# End Source File +# Begin Source File + +SOURCE=.\tbbtn.hpp +# End Source File +# Begin Source File + +SOURCE=.\toolbar.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/toolbar/toolbar.mdp b/toolbar/toolbar.mdp new file mode 100644 index 0000000..6e33a1f Binary files /dev/null and b/toolbar/toolbar.mdp differ diff --git a/tooltip/HITTEST.HPP b/tooltip/HITTEST.HPP new file mode 100644 index 0000000..be52062 --- /dev/null +++ b/tooltip/HITTEST.HPP @@ -0,0 +1,110 @@ +#ifndef _TOOLTIP_HITTESTINFO_HPP_ +#define _TOOLTIP_HITTESTINFO_HPP_ +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _TOOLTIP_TOOLINFO_HPP_ +#include +#endif +#ifndef _COMMON_POINT_HPP_ +#include +#endif + +class PureHitTestInfo : private TTHITTESTINFO +{ +public: + PureHitTestInfo(void); + PureHitTestInfo(const PureHitTestInfo &somePureHitTestInfo); + ~PureHitTestInfo(); + PureHitTestInfo &operator=(const PureHitTestInfo &somePureHitTestInfo); + WORD operator==(const PureHitTestInfo &somePureHitTestInfo)const; + HWND hwnd(void)const; + void hwnd(HWND hWnd); + Point point(void)const; + void point(const Point &point); + PureToolInfo toolInfo(void)const; + void toolInfo(const PureToolInfo &somePureToolInfo); +private: + void zeroInit(void); +}; + +inline +PureHitTestInfo::PureHitTestInfo(void) +{ + zeroInit(); +} + +inline +PureHitTestInfo::PureHitTestInfo(const PureHitTestInfo &somePureHitTestInfo) +{ + *this=somePureHitTestInfo; +} + +inline +PureHitTestInfo::~PureHitTestInfo() +{ +} + +inline +PureHitTestInfo &PureHitTestInfo::operator=(const PureHitTestInfo &somePureHitTestInfo) +{ + hwnd(somePureHitTestInfo.hwnd()); + point(somePureHitTestInfo.point()); + toolInfo(somePureHitTestInfo.toolInfo()); + return *this; +} + +inline +WORD PureHitTestInfo::operator==(const PureHitTestInfo &somePureHitTestInfo)const +{ + return (hwnd()==somePureHitTestInfo.hwnd()&& + point()==somePureHitTestInfo.point()&& + toolInfo()==somePureHitTestInfo.toolInfo()); +} + +inline +HWND PureHitTestInfo::hwnd(void)const +{ + return TTHITTESTINFO::hwnd; +} + +inline +void PureHitTestInfo::hwnd(HWND hWnd) +{ + TTHITTESTINFO::hwnd=hWnd; +} + +inline +Point PureHitTestInfo::point(void)const +{ + return Point(TTHITTESTINFO::pt.x,TTHITTESTINFO::pt.y); +} + +inline +void PureHitTestInfo::point(const Point &point) +{ + TTHITTESTINFO::pt.x=point.x(); + TTHITTESTINFO::pt.y=point.y(); +} + +inline +PureToolInfo PureHitTestInfo::toolInfo(void)const +{ + return PureToolInfo(TTHITTESTINFO::ti); +} + +inline +void PureHitTestInfo::toolInfo(const PureToolInfo &somePureToolInfo) +{ + ((PureToolInfo&)TTHITTESTINFO::ti)=somePureToolInfo; +} + +inline +void PureHitTestInfo::zeroInit(void) +{ + TTHITTESTINFO::hwnd=0; + TTHITTESTINFO::pt.x=0; + TTHITTESTINFO::pt.y=0; + ((PureToolInfo&)TTHITTESTINFO::ti)=PureToolInfo(); +} +#endif \ No newline at end of file diff --git a/tooltip/MAIN.CPP b/tooltip/MAIN.CPP new file mode 100644 index 0000000..2170fe3 --- /dev/null +++ b/tooltip/MAIN.CPP @@ -0,0 +1,27 @@ +#include +#include +#include + +HINSTANCE Main::smhInstance=0; +HINSTANCE Main::smhPrevInstance=0; +int Main::smnCmdShow=0; + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + Main::processInstance(hInstance); + Main::previousProcessInstance(hPrevInstance); + Main::cmdShow(nCmdShow); + if(Main::previousProcessInstance()) + { + HWND hWnd=::FindWindow(MainWindow::className(),MainWindow::className()); + if(!hWnd) + { + ::MessageBox(::GetFocus(),(LPSTR)"Failed to maximize previous instance",(LPSTR)"Error",MB_ICONSTOP|MB_SYSTEMMODAL); + return FALSE; + } + ::PostMessage(hWnd,WM_REACTIVATE,0,0L); + return FALSE; + } + MainWindow applicationWindow; + return applicationWindow.messageLoop(); +} diff --git a/tooltip/MAIN.HLD b/tooltip/MAIN.HLD new file mode 100644 index 0000000..6047c82 --- /dev/null +++ b/tooltip/MAIN.HLD @@ -0,0 +1,6 @@ +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + return FALSE; +} diff --git a/tooltip/MAIN.HPP b/tooltip/MAIN.HPP new file mode 100644 index 0000000..1257eef --- /dev/null +++ b/tooltip/MAIN.HPP @@ -0,0 +1,67 @@ +#ifndef _TOOLTIP_MAIN_HPP_ +#define _TOOLTIP_MAIN_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/tooltip/MAINWND.BAK b/tooltip/MAINWND.BAK new file mode 100644 index 0000000..d20b931 --- /dev/null +++ b/tooltip/MAINWND.BAK @@ -0,0 +1,67 @@ +#ifndef _TOOLTIP_MAINWINDOW_HPP_ +#define _TOOLTIP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _HOOKPROC_MESSAGEHOOK_HPP_ +#include +#endif + +class ToolTip; + +class MainWindow : public Window, private MsgHook +{ +public: + MainWindow(void); + virtual ~MainWindow(); + int messageLoop(void)const; + static String className(void); +protected: + virtual int hookProc(int code,WPARAM wParam,LPARAM lParam); +private: + enum{TimerID=0}; + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + + static char szClassName[]; + static char szMenuName[]; + SmartPointer mToolTipControl; + Control mControlWnd; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} + +inline +int MainWindow::messageLoop(void)const +{ + return Window::messageLoop(); +} +#endif diff --git a/tooltip/MAINWND.CPP b/tooltip/MAINWND.CPP new file mode 100644 index 0000000..24ddd6f --- /dev/null +++ b/tooltip/MAINWND.CPP @@ -0,0 +1,168 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +char MainWindow::szClassName[]="ToolTip"; +char MainWindow::szMenuName[]="TOOLTIP"; + +MainWindow::MainWindow(void) +: mPaintHandler(this,&MainWindow::paintHandler), + mDestroyHandler(this,&MainWindow::destroyHandler), + mCommandHandler(this,&MainWindow::commandHandler), + mKeyDownHandler(this,&MainWindow::keyDownHandler), + mSizeHandler(this,&MainWindow::sizeHandler), + mCreateHandler(this,&MainWindow::createHandler) +{ + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN, + CW_USEDEFAULT,CW_USEDEFAULT, + CW_USEDEFAULT,CW_USEDEFAULT, + NULL,NULL,processInstance(),(LPSTR)this); + show(SW_SHOW); + update(); + + mControlWnd.createControl("BUTTON","",WS_CHILD|WS_VISIBLE|WS_BORDER|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,Rect(10,10,140,20),*this,115); // WS_EX_TRANSPARENT, + mControlWnd.show(SW_SHOW); + mControlWnd.update(); + + Rect clientRect; + mControlWnd.clientRect(clientRect); +// screenToClient(clientRect); + mToolTipControl=new ToolTip(*this,ToolTip::AlwaysTip); + mToolTipControl.disposition(PointerDisposition::Delete); + PureToolInfo pureToolInfo; + pureToolInfo.flags((UINT)PureToolInfo::IDIsHwnd|(UINT)PureToolInfo::SubClass); // |(UINT)PureToolInfo::CenterTip +// pureToolInfo.flags((UINT)PureToolInfo::CenterTip); + pureToolInfo.hwnd(mControlWnd); + pureToolInfo.toolID((UINT)(HWND)mControlWnd); + +// pureToolInfo.hwnd(mControlWnd); +// pureToolInfo.hwnd((HWND)mControlWnd); +// pureToolInfo.toolID((UINT)(HWND)mControlWnd); + + + +// pureToolInfo.rect(Rect()); +// pureToolInfo.rect(clientRect); +// pureToolInfo.rect(Rect(10,10,140,20)); + pureToolInfo.resInst(processInstance()); + pureToolInfo.szText("This is an edit control."); + mToolTipControl->addTool(pureToolInfo); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + Window::insertHandler(Window::DestroyHandler,&mDestroyHandler); + Window::insertHandler(Window::PaintHandler,&mPaintHandler); + Window::insertHandler(Window::CommandHandler,&mCommandHandler); + Window::insertHandler(Window::SizeHandler,&mSizeHandler); + Window::insertHandler(Window::KeyDownHandler,&mKeyDownHandler); + Window::insertHandler(Window::CreateHandler,&mCreateHandler); +} + +void MainWindow::removeHandlers(void) +{ + Window::removeHandler(Window::DestroyHandler,&mDestroyHandler); + Window::removeHandler(Window::PaintHandler,&mPaintHandler); + Window::removeHandler(Window::CommandHandler,&mCommandHandler); + Window::removeHandler(Window::SizeHandler,&mSizeHandler); + Window::removeHandler(Window::KeyDownHandler,&mKeyDownHandler); + Window::removeHandler(Window::CreateHandler,&mCreateHandler); +} + +void MainWindow::registerClass(void)const +{ + HINSTANCE hInstance(processInstance()); + WNDCLASS wndClass; + + if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =hInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wParam()) + { + default : + break; + } + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData) +{ + return (CallbackData::ReturnType)FALSE; +} + +int MainWindow::hookProc(int code,WPARAM wParam,LPARAM lParam) +{ + if(mToolTipControl.isOkay()) + { + WinMsg winMsg(*((MSG*)lParam)); + switch(winMsg.message()) + { + case WM_LBUTTONDOWN : + break; + case WM_LBUTTONUP : + break; + case WM_MBUTTONDOWN : + break; + case WM_MBUTTONUP : + break; + case WM_MOUSEMOVE : +// ::SendMessage(mToolTipControl->operator HWND(),WM_MOUSEMOVE,winMsg.wParam(),winMsg.lParam()); + mToolTipControl->relayEvent(winMsg); + break; + case WM_RBUTTONDOWN : + break; + case WM_RBUTTONUP : + break; + } + } + return FALSE; +} diff --git a/tooltip/MAINWND.HPP b/tooltip/MAINWND.HPP new file mode 100644 index 0000000..c79be54 --- /dev/null +++ b/tooltip/MAINWND.HPP @@ -0,0 +1,70 @@ +#ifndef _TOOLTIP_MAINWINDOW_HPP_ +#define _TOOLTIP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +//#ifndef _HOOKPROC_MESSAGEHOOK_HPP_ +//#include +//#endif +#ifndef _COMMON_HOOKPROC_HPP_ +#include +#endif + +class ToolTip; + +class MainWindow : public Window, private WinHookProc //private MsgHook +{ +public: + MainWindow(void); + virtual ~MainWindow(); + int messageLoop(void)const; + static String className(void); +protected: + virtual int hookProc(int code,WPARAM wParam,LPARAM lParam); +private: + enum{TimerID=0}; + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mCreateHandler; + + static char szClassName[]; + static char szMenuName[]; + SmartPointer mToolTipControl; + Control mControlWnd; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} + +inline +int MainWindow::messageLoop(void)const +{ + return Window::messageLoop(); +} +#endif diff --git a/tooltip/SCRAPS.TXT b/tooltip/SCRAPS.TXT new file mode 100644 index 0000000..170243a --- /dev/null +++ b/tooltip/SCRAPS.TXT @@ -0,0 +1,24 @@ +#if 0 + Rect toolRect(30,30,100,100); + PureToolInfo toolInfo; +// toolInfo.flags((UINT)PureToolInfo::IDIsHwnd|(UINT)PureToolInfo::SubClass); + toolInfo.hwnd(*this); +// toolInfo.toolID((UINT)(HWND)*this); + toolInfo.toolID(110); + toolInfo.rect(toolRect); + toolInfo.resInst(processInstance()); + toolInfo.szText("You're in the hot region."); + +// mToolTipControl->addTool(pureToolInfo); + if(!mToolTipControl->addTool(toolInfo))::OutputDebugString("mToolTipControl->addTool returned FALSE.\n"); + toolInfo.szText(0); + toolInfo.rect(Rect()); + if(!mToolTipControl->getToolInfo(toolInfo))::OutputDebugString("mToolTipControl->getToolInfo - returned FALSE.\n"); + mToolTipControl->activate(TRUE); +#endif + + + +// mhControlWnd=::CreateWindowEx(WS_EX_TOPMOST|WS_EX_STATICEDGE|WS_EX_TOOLWINDOW,TOOLTIPS_CLASS,"",WS_VISIBLE|WS_CHILD|style, +// CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, +// mParentWindow,(HMENU)controlID(),mParentWindow.processInstance(),0); diff --git a/tooltip/STDTMPL.BAK b/tooltip/STDTMPL.BAK new file mode 100644 index 0000000..6aaf4d6 --- /dev/null +++ b/tooltip/STDTMPL.BAK @@ -0,0 +1,29 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MsgHook; +class MainWindow; + +typedef ProcAddress a; +typedef Callback b; +typedef SmartPointer c; +typedef Block d; +typedef Block e; +typedef Block f; +typedef PureVector g; +#endif diff --git a/tooltip/STDTMPL.CPP b/tooltip/STDTMPL.CPP new file mode 100644 index 0000000..6aaf4d6 --- /dev/null +++ b/tooltip/STDTMPL.CPP @@ -0,0 +1,29 @@ +#ifndef _MSC_VER +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MsgHook; +class MainWindow; + +typedef ProcAddress a; +typedef Callback b; +typedef SmartPointer c; +typedef Block d; +typedef Block e; +typedef Block f; +typedef PureVector g; +#endif diff --git a/tooltip/TIPTEXT.HPP b/tooltip/TIPTEXT.HPP new file mode 100644 index 0000000..40ea2b0 --- /dev/null +++ b/tooltip/TIPTEXT.HPP @@ -0,0 +1,99 @@ +#ifndef _TOOLTIP_TOOLTIPTEXT_HPP_ +#define _TOOLTIP_TOOLTIPTEXT_HPP_ +#ifndef _COMMON_NOTIFYMESSAGEHEADER_HPP_ +#include +#endif + +class ToolTipText : private TOOLTIPTEXT +{ +public: + ToolTipText(void); + ToolTipText(const ToolTipText &someToolTipText); + virtual ~ToolTipText(); + ToolTipText &operator=(const ToolTipText &someToolTipText); + WORD operator==(const ToolTipText &someToolTipText)const; + operator TOOLTIPTEXT &(void); + + + + +typedef struct { // ttt + NMHDR hdr; + LPTSTR lpszText; + char szText[80]; + HINSTANCE hinst; + UINT uFlags; +} TOOLTIPTEXT, FAR *LPTOOLTIPTEXT; + + + + NotifyMessageHeader &hdr(void); + LPSTR pszText(void); + LPSTR szText(void); + HINSTANCE hInstance(void); + UINT uFlags(void); +private: + void zeroInit(void); +}; + +ToolTipText::ToolTipText(void) +{ +} + +ToolTipText::ToolTipText(const ToolTipText &someToolTipText) +{ +} + +virtual ToolTipText::~ToolTipText() +{ +} + +ToolTipText &ToolTipText::operator=(const ToolTipText &someToolTipText) +{ +} + +WORD ToolTipText::operator==(const ToolTipText &someToolTipText)const +{ + return (hdr()==someToolTipText.hdr()&& + +} + +ToolTipText::operator TOOLTIPTEXT &(void) +{ + return *this; +} + +NMHDR ToolTipText::hdr(void) +{ + return NotifyMessageHeader(TOOLTIPTEXT +} + +LPSTR ToolTipText::pszText(void) +{ + return TOOLTIPTEXT::lpSzText;; +} + +LPSTR ToolTipText::szText(void) +{ + return TOOLTIPTEXT::szText; +} + +HINSTANCE ToolTipText::hInstance(void) +{ + return TOOLTIPTEXT::hinst; +} + +UINT ToolTipText::uFlags(void) +{ + return TOOLTIPTEXT::uFlags; +} + +void ToolTipText::zeroInit(void) +{ + ::memset(&TOOLTIPTEXT::hdr,0,sizeof(TOOLTIPTEXT::hdr)); + ::memset(TOOLTIPTEXT::szText,0,sizeof(TOOLTIPTEXT::szText);); + TOOLTIPTEXT::lpszText=0; + TOOLTIPTEXT::hinst=0; + TOOLTIPTEXT::uFlags=0; +} +#endif \ No newline at end of file diff --git a/tooltip/TOOLINFO.BAK b/tooltip/TOOLINFO.BAK new file mode 100644 index 0000000..20373c3 --- /dev/null +++ b/tooltip/TOOLINFO.BAK @@ -0,0 +1,209 @@ +#ifndef _TOOLTIP_TOOLINFO_HPP_ +#define _TOOLTIP_TOOLINFO_HPP_ +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif + +class PureToolInfo : private TOOLINFO +{ +public: + enum Flags{IDIsHwnd=TTF_IDISHWND,CenterTip=TTF_CENTERTIP,RTLReading=TTF_RTLREADING,SubClass=TTF_SUBCLASS}; + PureToolInfo(void); + PureToolInfo(const PureToolInfo &somePureToolInfo); + PureToolInfo(const TOOLINFO &someTOOLINFO); + ~PureToolInfo(); + PureToolInfo &operator=(const PureToolInfo &somePureToolInfo); + PureToolInfo &operator=(const TOOLINFO &someTOOLINFO); + WORD operator==(const PureToolInfo somePureToolInfo)const; + operator TOOLINFO&(void); + UINT flags(void)const; + void flags(UINT flags); + HWND hwnd(void)const; + void hwnd(HWND hWnd); + UINT toolID(void)const; + void toolID(UINT toolID); + Rect rect(void)const; + void rect(const Rect &toolRect); + HINSTANCE resInst(void)const; + void resInst(HINSTANCE resInst); + LPTSTR szText(void)const; + void szText(LPTSTR szText); +private: + UINT sizeInfo(void)const; + void sizeInfo(UINT sizeInfo); + void zeroInit(void); +}; + +inline +PureToolInfo::PureToolInfo(void) +{ + zeroInit(); + sizeInfo(sizeof(TOOLINFO)); +} + +inline +PureToolInfo::PureToolInfo(const PureToolInfo &somePureToolInfo) +{ + sizeInfo(sizeof(TOOLINFO)); + *this=somePureToolInfo; +} + +inline +PureToolInfo::PureToolInfo(const TOOLINFO &someTOOLINFO) +{ + sizeInfo(sizeof(TOOLINFO)); + *this=someTOOLINFO; +} + +inline +PureToolInfo::~PureToolInfo() +{ +} + +inline +PureToolInfo::operator TOOLINFO&(void) +{ + return *this; +} + +inline +PureToolInfo &PureToolInfo::operator=(const PureToolInfo &somePureToolInfo) +{ + flags(somePureToolInfo.flags()); + hwnd(somePureToolInfo.hwnd()); + toolID(somePureToolInfo.toolID()); + rect(somePureToolInfo.rect()); + resInst(somePureToolInfo.resInst()); + szText(somePureToolInfo.szText()); + return *this; +} + +inline +PureToolInfo &PureToolInfo::operator=(const TOOLINFO &someTOOLINFO) +{ + flags(someTOOLINFO.uFlags); + hwnd(someTOOLINFO.hwnd); + toolID(someTOOLINFO.uId); + rect(someTOOLINFO.rect); + resInst(someTOOLINFO.hinst); + szText(someTOOLINFO.lpszText); + return *this; +} + +inline +WORD PureToolInfo::operator==(const PureToolInfo somePureToolInfo)const +{ + return (flags()==somePureToolInfo.flags()&& + hwnd()==somePureToolInfo.hwnd()&& + toolID()==somePureToolInfo.toolID()&& + rect()==somePureToolInfo.rect()&& + resInst()==somePureToolInfo.resInst()&& + szText()==somePureToolInfo.szText()); +} + +inline +UINT PureToolInfo::flags(void)const +{ + return TOOLINFO::uFlags; +} + +inline +void PureToolInfo::flags(UINT flags) +{ + TOOLINFO::uFlags=flags; +} + +inline +HWND PureToolInfo::hwnd(void)const +{ + return TOOLINFO::hwnd; +} + +inline +void PureToolInfo::hwnd(HWND hWnd) +{ + TOOLINFO::hwnd=hWnd; +} + +inline +UINT PureToolInfo::toolID(void)const +{ + return TOOLINFO::uId; +} + +inline +void PureToolInfo::toolID(UINT toolID) +{ + TOOLINFO::uId=toolID; +} + +inline +Rect PureToolInfo::rect(void)const +{ + return TOOLINFO::rect; +} + +inline +void PureToolInfo::rect(const Rect &toolRect) +{ + TOOLINFO::rect.left=toolRect.left(); + TOOLINFO::rect.top=toolRect.top(); + TOOLINFO::rect.right=toolRect.right(); + TOOLINFO::rect.bottom=toolRect.bottom(); +} + +inline +HINSTANCE PureToolInfo::resInst(void)const +{ + return TOOLINFO::hinst; + +} + +inline +void PureToolInfo::resInst(HINSTANCE resInst) +{ + TOOLINFO::hinst=resInst; +} + +inline +LPTSTR PureToolInfo::szText(void)const +{ + return TOOLINFO::lpszText; +} + +inline +void PureToolInfo::szText(LPTSTR szText) +{ + TOOLINFO::lpszText=szText; +} + +inline +UINT PureToolInfo::sizeInfo(void)const +{ + return TOOLINFO::cbSize; +} + +inline +void PureToolInfo::sizeInfo(UINT sizeInfo) +{ + TOOLINFO::cbSize=sizeInfo; +} + +inline +void PureToolInfo::zeroInit(void) +{ + TOOLINFO::cbSize=0; + TOOLINFO::uFlags=0; + TOOLINFO::hwnd=0; + TOOLINFO::uId=0; + TOOLINFO::rect.left=0; + TOOLINFO::rect.top=0; + TOOLINFO::rect.right=0; + TOOLINFO::rect.bottom=0; + TOOLINFO::hinst=0; + TOOLINFO::lpszText=0; +} +#endif \ No newline at end of file diff --git a/tooltip/TOOLINFO.CPP b/tooltip/TOOLINFO.CPP new file mode 100644 index 0000000..2577333 --- /dev/null +++ b/tooltip/TOOLINFO.CPP @@ -0,0 +1,148 @@ +#include + +PureToolInfo::PureToolInfo(void) +{ + zeroInit(); + sizeInfo(sizeof(TOOLINFO)); +} + +PureToolInfo::PureToolInfo(const PureToolInfo &somePureToolInfo) +{ + sizeInfo(sizeof(TOOLINFO)); + *this=somePureToolInfo; +} + +PureToolInfo::PureToolInfo(const TOOLINFO &someTOOLINFO) +{ + sizeInfo(sizeof(TOOLINFO)); + *this=someTOOLINFO; +} + +PureToolInfo::~PureToolInfo() +{ +} + +PureToolInfo::operator TOOLINFO&(void) +{ + return *this; +} + +PureToolInfo &PureToolInfo::operator=(const PureToolInfo &somePureToolInfo) +{ + flags(somePureToolInfo.flags()); + hwnd(somePureToolInfo.hwnd()); + toolID(somePureToolInfo.toolID()); + rect(somePureToolInfo.rect()); + resInst(somePureToolInfo.resInst()); + szText(somePureToolInfo.szText()); + return *this; +} + +PureToolInfo &PureToolInfo::operator=(const TOOLINFO &someTOOLINFO) +{ + flags(someTOOLINFO.uFlags); + hwnd(someTOOLINFO.hwnd); + toolID(someTOOLINFO.uId); + rect(someTOOLINFO.rect); + resInst(someTOOLINFO.hinst); + szText(someTOOLINFO.lpszText); + return *this; +} + +WORD PureToolInfo::operator==(const PureToolInfo somePureToolInfo)const +{ + return (flags()==somePureToolInfo.flags()&& + hwnd()==somePureToolInfo.hwnd()&& + toolID()==somePureToolInfo.toolID()&& + rect()==somePureToolInfo.rect()&& + resInst()==somePureToolInfo.resInst()&& + szText()==somePureToolInfo.szText()); +} + +UINT PureToolInfo::flags(void)const +{ + return TOOLINFO::uFlags; +} + +void PureToolInfo::flags(UINT flags) +{ + TOOLINFO::uFlags=flags; +} + +HWND PureToolInfo::hwnd(void)const +{ + return TOOLINFO::hwnd; +} + +void PureToolInfo::hwnd(HWND hWnd) +{ + TOOLINFO::hwnd=hWnd; +} + +inline +UINT PureToolInfo::toolID(void)const +{ + return TOOLINFO::uId; +} + +void PureToolInfo::toolID(UINT toolID) +{ + TOOLINFO::uId=toolID; +} + +Rect PureToolInfo::rect(void)const +{ + return TOOLINFO::rect; +} + +void PureToolInfo::rect(const Rect &toolRect) +{ + TOOLINFO::rect.left=toolRect.left(); + TOOLINFO::rect.top=toolRect.top(); + TOOLINFO::rect.right=toolRect.right(); + TOOLINFO::rect.bottom=toolRect.bottom(); +} + +HINSTANCE PureToolInfo::resInst(void)const +{ + return TOOLINFO::hinst; +} + +void PureToolInfo::resInst(HINSTANCE resInst) +{ + TOOLINFO::hinst=resInst; +} + +LPTSTR PureToolInfo::szText(void)const +{ + return TOOLINFO::lpszText; +} + +void PureToolInfo::szText(LPTSTR szText) +{ + TOOLINFO::lpszText=szText; +} + +UINT PureToolInfo::sizeInfo(void)const +{ + return TOOLINFO::cbSize; +} + +void PureToolInfo::sizeInfo(UINT sizeInfo) +{ + TOOLINFO::cbSize=sizeInfo; +} + +void PureToolInfo::zeroInit(void) +{ + TOOLINFO::cbSize=0; + TOOLINFO::uFlags=0; + TOOLINFO::hwnd=0; + TOOLINFO::uId=0; + TOOLINFO::rect.left=0; + TOOLINFO::rect.top=0; + TOOLINFO::rect.right=0; + TOOLINFO::rect.bottom=0; + TOOLINFO::hinst=0; + TOOLINFO::lpszText=0; +} diff --git a/tooltip/TOOLINFO.HPP b/tooltip/TOOLINFO.HPP new file mode 100644 index 0000000..e191488 --- /dev/null +++ b/tooltip/TOOLINFO.HPP @@ -0,0 +1,42 @@ +#ifndef _TOOLTIP_TOOLINFO_HPP_ +#define _TOOLTIP_TOOLINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_RECTANGLE_HPP_ +#include +#endif + +class PureToolInfo : private TOOLINFO +{ +public: + enum Flags{None=0,IDIsHwnd=TTF_IDISHWND,CenterTip=TTF_CENTERTIP,RTLReading=TTF_RTLREADING,SubClass=TTF_SUBCLASS}; + PureToolInfo(void); + PureToolInfo(const PureToolInfo &somePureToolInfo); + PureToolInfo(const TOOLINFO &someTOOLINFO); + virtual ~PureToolInfo(); + PureToolInfo &operator=(const PureToolInfo &somePureToolInfo); + PureToolInfo &operator=(const TOOLINFO &someTOOLINFO); + WORD operator==(const PureToolInfo somePureToolInfo)const; + operator TOOLINFO&(void); + UINT flags(void)const; + void flags(UINT flags); + HWND hwnd(void)const; + void hwnd(HWND hWnd); + UINT toolID(void)const; + void toolID(UINT toolID); + Rect rect(void)const; + void rect(const Rect &toolRect); + HINSTANCE resInst(void)const; + void resInst(HINSTANCE resInst); + LPTSTR szText(void)const; + void szText(LPTSTR szText); +private: + UINT sizeInfo(void)const; + void sizeInfo(UINT sizeInfo); + void zeroInit(void); +}; +#endif \ No newline at end of file diff --git a/tooltip/TOOLTEST.DSW b/tooltip/TOOLTEST.DSW new file mode 100644 index 0000000..6cb2e17 Binary files /dev/null and b/tooltip/TOOLTEST.DSW differ diff --git a/tooltip/TOOLTEST.IDE b/tooltip/TOOLTEST.IDE new file mode 100644 index 0000000..9723710 Binary files /dev/null and b/tooltip/TOOLTEST.IDE differ diff --git a/tooltip/TOOLTIP.001 b/tooltip/TOOLTIP.001 new file mode 100644 index 0000000..0350a70 --- /dev/null +++ b/tooltip/TOOLTIP.001 @@ -0,0 +1,228 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=tooltip - Win32 Debug +!MESSAGE No configuration specified. Defaulting to tooltip - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "tooltip - Win32 Release" && "$(CFG)" !=\ + "tooltip - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Tooltip.mak" CFG="tooltip - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "tooltip - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "tooltip - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "tooltip - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "tooltip - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Tooltip.lib" "$(OUTDIR)\Tooltip.pch" + +CLEAN : + -@erase "$(INTDIR)\tooltip.obj" + -@erase "$(INTDIR)\Tooltip.pch" + -@erase "$(OUTDIR)\Tooltip.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /Z7 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Yc"msvc42.pch" /c +CPP_PROJ=/nologo /G4 /Zp1 /MTd /Z7 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Tooltip.pch" /Yc"msvc42.pch"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltip.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Tooltip.lib" +LIB32_OBJS= \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Tooltip.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\mstool.lib" + +CLEAN : + -@erase "$(INTDIR)\tooltip.obj" + -@erase "..\exe\mstool.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /G4 /Zp1 /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D\ + "WIN32" /D "_WINDOWS" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltip.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mstool.lib" +LIB32_FLAGS=/nologo /out:"..\exe\mstool.lib" +LIB32_OBJS= \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"..\exe\mstool.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "tooltip - Win32 Release" +# Name "tooltip - Win32 Debug" + +!IF "$(CFG)" == "tooltip - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\tooltip.cpp +DEP_CPP_TOOLT=\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\.\Tooltip.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winmsg.hpp"\ + + +!IF "$(CFG)" == "tooltip - Win32 Release" + + +"$(INTDIR)\tooltip.obj" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + +"$(INTDIR)\Tooltip.pch" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + + +"$(INTDIR)\tooltip.obj" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "tooltip - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/tooltip/TOOLTIP.BAK b/tooltip/TOOLTIP.BAK new file mode 100644 index 0000000..3fb46b6 --- /dev/null +++ b/tooltip/TOOLTIP.BAK @@ -0,0 +1,181 @@ +#include +#include +#include +#include +#include +#include + +ToolTip::ToolTip(GUIWindow &parentWindow,Style style,int controlID) +: mNotifyHandler(this,&ToolTip::notifyHandler), mParentWindow(parentWindow), + mhControlWnd(0), mControlID(controlID) +{ + ::InitCommonControls(); + mParentWindow.insertHandler(VectorHandler::NotifyHandler,&mNotifyHandler); + createToolTip((int)style); +} + +ToolTip::~ToolTip() +{ + if(mhControlWnd){::DestroyWindow(mhControlWnd);mhControlWnd=0;} + mParentWindow.removeHandler(VectorHandler::NotifyHandler,&mNotifyHandler); +} + +ToolTip &ToolTip::operator=(const ToolTip &/*someToolTip*/) +{ // no implementation + return *this; +} + +void ToolTip::createToolTip(int style) +{ + mhControlWnd=::CreateWindowEx(WS_EX_TOPMOST|WS_EX_STATICEDGE,TOOLTIPS_CLASS,"",WS_CHILD|WS_VISIBLE|style, + CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, + mParentWindow,(HMENU)controlID(),mParentWindow.processInstance(),0); +} + +void ToolTip::activate(WORD activate)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_ACTIVATE,(WPARAM)activate,(LPARAM)0); +} + +WORD ToolTip::addTool(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_ADDTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::delTool(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_DELTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +WORD ToolTip::enumTools(UINT indexTool,const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_ENUMTOOLS,(WPARAM)indexTool,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +WORD ToolTip::getCurrentTool(PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_GETCURRENTTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::getText(PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_GETTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +DWORD ToolTip::getToolCount(void)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLCOUNT,0,0L); +} + +WORD ToolTip::getToolInfo(PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +WORD ToolTip::hitTest(const PureHitTestInfo &somePureHitTestInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_HITTEST,0,(LPARAM)&((TTHITTESTINFO&)((PureHitTestInfo&)somePureHitTestInfo))); +} + +void ToolTip::newToolInfo(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_NEWTOOLRECT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::relayEvent(const WinMsg &someWinMsg)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_RELAYEVENT,0,(LPARAM)&((MSG&)((WinMsg&)someWinMsg))); +} + +void ToolTip::setDelayTime(DelayFlag typeDelay,int timeDelay)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_SETDELAYTIME,(WPARAM)typeDelay,(LPARAM)timeDelay); +} + +void ToolTip::setToolInfo(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_SETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::updateTipText(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_UPDATETIPTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +HWND ToolTip::windowFromPoint(const GDIPoint &someGDIPoint)const +{ + if(!isOkay())return (HWND)0; + return (HWND)mParentWindow.sendMessage(mhControlWnd,TTM_WINDOWFROMPOINT,0,(LPARAM)&((POINT&)someGDIPoint)); +} + +UINT ToolTip::controlID(void)const +{ + return mControlID; +} + +void ToolTip::controlID(UINT controlID) +{ + mControlID=controlID; +} + +WORD ToolTip::isOkay(void)const +{ + return (mhControlWnd?TRUE:FALSE); +} + +CallbackData::ReturnType ToolTip::notifyHandler(CallbackData &someCallbackData) +{ + NMHDR &nmHdr=*((NMHDR*)someCallbackData.lParam()); + + if(controlID()==nmHdr.idFrom) + { + switch(nmHdr.code) + { + case TTN_NEEDTEXT : + ::OutputDebugString("TTN_NEEDTEXT\n"); + ttnNeedText(nmHdr); + break; + case TTN_POP : + ::OutputDebugString("TTN_POP\n"); + ttnPop(nmHdr); + break; + case TTN_SHOW : + ::OutputDebugString("TTN_SHOW\n"); + ttnShow(nmHdr); + break; + default : + break; + } + } + return (CallbackData::ReturnType)FALSE; +} + +// *** virtuals + +void ToolTip::ttnNeedText(NMHDR &/*someNMHDR*/) +{ +} + +void ToolTip::ttnPop(NMHDR &/*someNMHDR*/) +{ +} + +void ToolTip::ttnShow(NMHDR &/*someNMHDR*/) +{ +} + + diff --git a/tooltip/TOOLTIP.CPP b/tooltip/TOOLTIP.CPP new file mode 100644 index 0000000..2d914ce --- /dev/null +++ b/tooltip/TOOLTIP.CPP @@ -0,0 +1,168 @@ +#include +#include +#include +#include +#include +#include + +ToolTip::ToolTip(GUIWindow &parentWindow,Style style) +: mNotifyHandler(this,&ToolTip::notifyHandler), mParentWindow(parentWindow), + mhControlWnd(0) +{ + ::InitCommonControls(); + mParentWindow.insertHandler(VectorHandler::NotifyHandler,&mNotifyHandler); + createToolTip((int)style); +} + +ToolTip::~ToolTip() +{ + if(mhControlWnd){::DestroyWindow(mhControlWnd);mhControlWnd=0;} + mParentWindow.removeHandler(VectorHandler::NotifyHandler,&mNotifyHandler); +} + +ToolTip &ToolTip::operator=(const ToolTip &/*someToolTip*/) +{ // no implementation + return *this; +} + +void ToolTip::createToolTip(int style) +{ + mhControlWnd=::CreateWindowEx(0,TOOLTIPS_CLASS,"",WS_VISIBLE|WS_POPUP|style, + CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, + mParentWindow,0,mParentWindow.processInstance(),0); +} + +void ToolTip::activate(WORD activate)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_ACTIVATE,(WPARAM)activate,(LPARAM)0); +} + +WORD ToolTip::addTool(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_ADDTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::delTool(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_DELTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +WORD ToolTip::enumTools(UINT indexTool,const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_ENUMTOOLS,(WPARAM)indexTool,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +WORD ToolTip::getCurrentTool(PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_GETCURRENTTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::getText(PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_GETTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +DWORD ToolTip::getToolCount(void)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLCOUNT,0,0L); +} + +WORD ToolTip::getToolInfo(PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +WORD ToolTip::hitTest(const PureHitTestInfo &somePureHitTestInfo)const +{ + if(!isOkay())return FALSE; + return mParentWindow.sendMessage(mhControlWnd,TTM_HITTEST,0,(LPARAM)&((TTHITTESTINFO&)((PureHitTestInfo&)somePureHitTestInfo))); +} + +void ToolTip::newToolInfo(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_NEWTOOLRECT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::relayEvent(const WinMsg &someWinMsg)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_RELAYEVENT,0,(LPARAM)&((MSG&)((WinMsg&)someWinMsg))); +} + +void ToolTip::setDelayTime(DelayFlag typeDelay,int timeDelay)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_SETDELAYTIME,(WPARAM)typeDelay,(LPARAM)timeDelay); +} + +void ToolTip::setToolInfo(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_SETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +void ToolTip::updateTipText(const PureToolInfo &somePureToolInfo)const +{ + if(!isOkay())return; + mParentWindow.sendMessage(mhControlWnd,TTM_UPDATETIPTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); +} + +HWND ToolTip::windowFromPoint(const GDIPoint &someGDIPoint)const +{ + if(!isOkay())return (HWND)0; + return (HWND)mParentWindow.sendMessage(mhControlWnd,TTM_WINDOWFROMPOINT,0,(LPARAM)&((POINT&)someGDIPoint)); +} + +WORD ToolTip::isOkay(void)const +{ + return (mhControlWnd?TRUE:FALSE); +} + +CallbackData::ReturnType ToolTip::notifyHandler(CallbackData &someCallbackData) +{ + NMHDR &nmHdr=*((NMHDR*)someCallbackData.lParam()); + + if(mhControlWnd==nmHdr.hwndFrom) + { + switch(nmHdr.code) + { + case TTN_NEEDTEXT : + ttnNeedText(nmHdr); + break; + case TTN_POP : + ttnPop(nmHdr); + break; + case TTN_SHOW : + ttnShow(nmHdr); + break; + default : + break; + } + } + return (CallbackData::ReturnType)FALSE; +} + +// *** virtuals + +void ToolTip::ttnNeedText(NMHDR &/*someNMHDR*/) +{ +} + +void ToolTip::ttnPop(NMHDR &/*someNMHDR*/) +{ +} + +void ToolTip::ttnShow(NMHDR &/*someNMHDR*/) +{ +} + + diff --git a/tooltip/TOOLTIP.DSP b/tooltip/TOOLTIP.DSP new file mode 100644 index 0000000..2d8d8fa --- /dev/null +++ b/tooltip/TOOLTIP.DSP @@ -0,0 +1,117 @@ +# Microsoft Developer Studio Project File - Name="tooltip" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=tooltip - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "TOOLTIP.MAK". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "TOOLTIP.MAK" CFG="tooltip - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "tooltip - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "tooltip - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "tooltip - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /Z7 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Yc"msvc42.pch" /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mstool.lib" + +!ENDIF + +# Begin Target + +# Name "tooltip - Win32 Release" +# Name "tooltip - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\toolinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\tooltip.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Hittest.hpp +# End Source File +# Begin Source File + +SOURCE=.\Toolinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tooltip.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/tooltip/TOOLTIP.DSW b/tooltip/TOOLTIP.DSW new file mode 100644 index 0000000..6783e2a --- /dev/null +++ b/tooltip/TOOLTIP.DSW @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "tooltip"=.\TOOLTIP.DSP - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/tooltip/TOOLTIP.HPP b/tooltip/TOOLTIP.HPP new file mode 100644 index 0000000..8565052 --- /dev/null +++ b/tooltip/TOOLTIP.HPP @@ -0,0 +1,64 @@ +#ifndef _TOOLTIP_TOOLTIP_HPP_ +#define _TOOLTIP_TOOLTIP_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_COMMCTRL_HPP_ +#include +#endif +#ifndef _COMMON_CALLBACK_HPP_ +#include +#endif +class WinMsg; +class GUIWindow; +class GDIPoint; +class PureToolInfo; +class PureHitTestInfo; + +class ToolTip +{ +public: + enum{ControlID=101}; + enum Style{AlwaysTip=TTS_ALWAYSTIP,NoPrefix=TTS_NOPREFIX}; + enum DelayFlag{Automatic=TTDT_AUTOMATIC,Autopop=TTDT_AUTOPOP,Initial=TTDT_INITIAL,Reshow=TTDT_RESHOW}; + ToolTip(GUIWindow &parentWindow,Style style=AlwaysTip); + virtual ~ToolTip(); + operator HWND(void); + void activate(WORD activate)const; + WORD addTool(const PureToolInfo &somePureToolInfo)const; + void delTool(const PureToolInfo &somePureToolInfo)const; + WORD enumTools(UINT indexTool,const PureToolInfo &somePureToolInfo)const; + WORD getCurrentTool(PureToolInfo &somePureToolInfo)const; + void getText(PureToolInfo &somePureToolInfo)const; + DWORD getToolCount(void)const; + WORD getToolInfo(PureToolInfo &somePureToolInfo)const; + WORD hitTest(const PureHitTestInfo &somePureHitTestInfo)const; + void newToolInfo(const PureToolInfo &somePureToolInfo)const; + void relayEvent(const WinMsg &someWinMsg)const; + void setDelayTime(DelayFlag typeDelay,int timeDelay)const; + void setToolInfo(const PureToolInfo &somePureToolInfo)const; + void updateTipText(const PureToolInfo &somePureToolInfo)const; + HWND windowFromPoint(const GDIPoint &someGDIPoint)const; + WORD isOkay(void)const; +protected: + virtual void ttnShow(NMHDR &someNMHDR); + virtual void ttnPop(NMHDR &someNMHDR); + virtual void ttnNeedText(NMHDR &someNMHDR); +private: + ToolTip &operator=(const ToolTip &someToolTip); + void createToolTip(int viewFlags); + CallbackData::ReturnType notifyHandler(CallbackData &someCallbackData); + + Callback mNotifyHandler; + GUIWindow &mParentWindow; + HWND mhControlWnd; +}; + +inline +ToolTip::operator HWND(void) +{ + return mhControlWnd; +} +#endif + + diff --git a/tooltip/TOOLTIP.IDE b/tooltip/TOOLTIP.IDE new file mode 100644 index 0000000..05380bf Binary files /dev/null and b/tooltip/TOOLTIP.IDE differ diff --git a/tooltip/TOOLTIP.MAK b/tooltip/TOOLTIP.MAK new file mode 100644 index 0000000..0350a70 --- /dev/null +++ b/tooltip/TOOLTIP.MAK @@ -0,0 +1,228 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=tooltip - Win32 Debug +!MESSAGE No configuration specified. Defaulting to tooltip - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "tooltip - Win32 Release" && "$(CFG)" !=\ + "tooltip - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Tooltip.mak" CFG="tooltip - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "tooltip - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "tooltip - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "tooltip - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "tooltip - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Tooltip.lib" "$(OUTDIR)\Tooltip.pch" + +CLEAN : + -@erase "$(INTDIR)\tooltip.obj" + -@erase "$(INTDIR)\Tooltip.pch" + -@erase "$(OUTDIR)\Tooltip.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /Z7 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Yc"msvc42.pch" /c +CPP_PROJ=/nologo /G4 /Zp1 /MTd /Z7 /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Tooltip.pch" /Yc"msvc42.pch"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltip.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/Tooltip.lib" +LIB32_OBJS= \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Tooltip.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\mstool.lib" + +CLEAN : + -@erase "$(INTDIR)\tooltip.obj" + -@erase "..\exe\mstool.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /G4 /Zp1 /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /G4 /Zp1 /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D\ + "WIN32" /D "_WINDOWS" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltip.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\mstool.lib" +LIB32_FLAGS=/nologo /out:"..\exe\mstool.lib" +LIB32_OBJS= \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"..\exe\mstool.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "tooltip - Win32 Release" +# Name "tooltip - Win32 Debug" + +!IF "$(CFG)" == "tooltip - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\tooltip.cpp +DEP_CPP_TOOLT=\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\.\Tooltip.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winmsg.hpp"\ + + +!IF "$(CFG)" == "tooltip - Win32 Release" + + +"$(INTDIR)\tooltip.obj" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + +"$(INTDIR)\Tooltip.pch" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + + +"$(INTDIR)\tooltip.obj" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "tooltip - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltip - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/tooltip/TOOLTIP.MDP b/tooltip/TOOLTIP.MDP new file mode 100644 index 0000000..ba239a0 Binary files /dev/null and b/tooltip/TOOLTIP.MDP differ diff --git a/tooltip/TOOLTIP.OPT b/tooltip/TOOLTIP.OPT new file mode 100644 index 0000000..3b8a982 Binary files /dev/null and b/tooltip/TOOLTIP.OPT differ diff --git a/tooltip/TOOLTIP.PLG b/tooltip/TOOLTIP.PLG new file mode 100644 index 0000000..b8c3cfa --- /dev/null +++ b/tooltip/TOOLTIP.PLG @@ -0,0 +1,304 @@ + + +
+

Build Log

+

+--------------------Configuration: common - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP698.bat" with contents +[ +@echo off +e:\parts\ddk\bin\ml -c MSFIX32.asm +] +Creating command line "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP698.bat" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP699.tmp" with contents +[ +/nologo /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"E:\work\COMMON\Bitmap.cpp" +"E:\work\COMMON\Bminfo.cpp" +"E:\work\COMMON\Bmplnk.cpp" +"E:\work\COMMON\Brush.cpp" +"E:\work\COMMON\Btnlnk.cpp" +"E:\work\COMMON\calendar.cpp" +"E:\work\COMMON\Catmull.cpp" +"E:\work\COMMON\Cbdata.cpp" +"E:\work\COMMON\Cbdatahk.cpp" +"E:\work\COMMON\Clipbrd.cpp" +"E:\work\COMMON\Console.cpp" +"E:\work\COMMON\Control.cpp" +"E:\work\COMMON\Crsctrl.cpp" +"E:\work\COMMON\Ddemsg.cpp" +"E:\work\COMMON\Dib.cpp" +"E:\work\COMMON\Diskinfo.cpp" +"E:\work\COMMON\Drawbmp.cpp" +"E:\work\COMMON\Dwindow.cpp" +"E:\work\COMMON\elastic.cpp" +"E:\work\COMMON\errormsg.cpp" +"E:\work\COMMON\File.cpp" +"E:\work\COMMON\Fileio.cpp" +"E:\work\COMMON\Filemap.cpp" +"E:\work\COMMON\Finddata.cpp" +"E:\work\COMMON\Font.cpp" +"E:\work\COMMON\gdipoint.cpp" +"E:\work\COMMON\Guiwnd.cpp" +"E:\work\COMMON\Hookproc.cpp" +"E:\work\COMMON\Iconfrm.cpp" +"E:\work\COMMON\Infowin.cpp" +"E:\work\COMMON\Intel.cpp" +"E:\work\COMMON\Iobuff.cpp" +"E:\work\COMMON\Logowin.cpp" +"E:\work\COMMON\Macro.cpp" +"E:\work\COMMON\Math.cpp" +"E:\work\COMMON\Mdifrm.cpp" +"E:\work\COMMON\Mdiwin.cpp" +"E:\work\COMMON\Memfile.cpp" +"E:\work\COMMON\Mmtimer.cpp" +"E:\work\COMMON\Odbutton.cpp" +"E:\work\COMMON\Odlist.cpp" +"E:\work\COMMON\Odlstalt.cpp" +"E:\work\COMMON\Odlstchk.cpp" +"E:\work\COMMON\opendlg.Cpp" +"E:\work\COMMON\Openfile.cpp" +"E:\work\COMMON\opndlgex.cpp" +"E:\work\COMMON\Owner.cpp" +"E:\work\COMMON\Pathfnd.cpp" +"E:\work\COMMON\Point.cpp" +"E:\work\COMMON\Process.cpp" +"E:\work\COMMON\Profile.cpp" +"E:\work\COMMON\Progress.cpp" +"E:\work\COMMON\Purebmp.cpp" +"E:\work\COMMON\Purebyte.cpp" +"E:\work\COMMON\puredbl.cpp" +"E:\work\COMMON\Puredwrd.cpp" +"E:\work\COMMON\Purehdc.cpp" +"E:\work\COMMON\puremenu.Cpp" +"E:\work\COMMON\Purepal.cpp" +"E:\work\COMMON\purewrd.cpp" +"E:\work\COMMON\Pview.cpp" +"E:\work\COMMON\Regkey.cpp" +"E:\work\COMMON\resbmp.cpp" +"E:\work\COMMON\Richedit.cpp" +"E:\work\COMMON\rubber.cpp" +"E:\work\COMMON\Sdate.cpp" +"E:\work\COMMON\Smrtstrm.cpp" +"E:\work\COMMON\snapshot.cpp" +"E:\work\COMMON\static.cpp" +"E:\work\COMMON\String.cpp" +"E:\work\COMMON\Systime.cpp" +"E:\work\COMMON\Vhandler.cpp" +"E:\work\COMMON\Vxdctrl.cpp" +"E:\work\COMMON\widestr.Cpp" +"E:\work\COMMON\Window.cpp" +"E:\work\COMMON\Wintimer.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP699.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP69A.tmp" with contents +[ +/nologo /MTd /GX /Zi /Od /I "\work" /I "\parts" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /D "WIN32" /Fp".\msvcobj/common.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /I /work" /I /parts" /I /work" /I /parts" " " " " /c +"E:\work\COMMON\Bmdata.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP69A.tmp" +Performing Custom Build Step on .\MSFIX32.ASM +Microsoft (R) Macro Assembler Version 6.11c +Copyright (C) Microsoft Corp 1981-1994. All rights reserved. + + Assembling: MSFIX32.asm +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP69B.tmp" with contents +[ +/nologo /out:"..\exe\mscommon.lib" +.\msvcobj\Bitmap.obj +.\msvcobj\Bmdata.obj +.\msvcobj\Bminfo.obj +.\msvcobj\Bmplnk.obj +.\msvcobj\Brush.obj +.\msvcobj\Btnlnk.obj +.\msvcobj\calendar.obj +.\msvcobj\Catmull.obj +.\msvcobj\Cbdata.obj +.\msvcobj\Cbdatahk.obj +.\msvcobj\Clipbrd.obj +.\msvcobj\Console.obj +.\msvcobj\Control.obj +.\msvcobj\Crsctrl.obj +.\msvcobj\Ddemsg.obj +.\msvcobj\Dib.obj +.\msvcobj\Diskinfo.obj +.\msvcobj\Drawbmp.obj +.\msvcobj\Dwindow.obj +.\msvcobj\elastic.obj +.\msvcobj\errormsg.obj +.\msvcobj\File.obj +.\msvcobj\Fileio.obj +.\msvcobj\Filemap.obj +.\msvcobj\Finddata.obj +.\msvcobj\Font.obj +.\msvcobj\gdipoint.obj +.\msvcobj\Guiwnd.obj +.\msvcobj\Hookproc.obj +.\msvcobj\Iconfrm.obj +.\msvcobj\Infowin.obj +.\msvcobj\Intel.obj +.\msvcobj\Iobuff.obj +.\msvcobj\Logowin.obj +.\msvcobj\Macro.obj +.\msvcobj\Math.obj +.\msvcobj\Mdifrm.obj +.\msvcobj\Mdiwin.obj +.\msvcobj\Memfile.obj +.\msvcobj\Mmtimer.obj +.\msvcobj\Odbutton.obj +.\msvcobj\Odlist.obj +.\msvcobj\Odlstalt.obj +.\msvcobj\Odlstchk.obj +.\msvcobj\opendlg.obj +.\msvcobj\Openfile.obj +.\msvcobj\opndlgex.obj +.\msvcobj\Owner.obj +.\msvcobj\Pathfnd.obj +.\msvcobj\Point.obj +.\msvcobj\Process.obj +.\msvcobj\Profile.obj +.\msvcobj\Progress.obj +.\msvcobj\Purebmp.obj +.\msvcobj\Purebyte.obj +.\msvcobj\puredbl.obj +.\msvcobj\Puredwrd.obj +.\msvcobj\Purehdc.obj +.\msvcobj\puremenu.obj +.\msvcobj\Purepal.obj +.\msvcobj\purewrd.obj +.\msvcobj\Pview.obj +.\msvcobj\Regkey.obj +.\msvcobj\resbmp.obj +.\msvcobj\Richedit.obj +.\msvcobj\rubber.obj +.\msvcobj\Sdate.obj +.\msvcobj\Smrtstrm.obj +.\msvcobj\snapshot.obj +.\msvcobj\static.obj +.\msvcobj\String.obj +.\msvcobj\Systime.obj +.\msvcobj\Vhandler.obj +.\msvcobj\Vxdctrl.obj +.\msvcobj\widestr.obj +.\msvcobj\Window.obj +.\msvcobj\Wintimer.obj +.\MSFIX32.obj +] +Creating command line "link.exe -lib @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP69B.tmp" +

Output Window

+Compiling... +Bitmap.cpp +Bminfo.cpp +Bmplnk.cpp +Brush.cpp +Btnlnk.cpp +calendar.cpp +Catmull.cpp +Cbdata.cpp +Cbdatahk.cpp +Clipbrd.cpp +Console.cpp +Control.cpp +Crsctrl.cpp +Ddemsg.cpp +Dib.cpp +Diskinfo.cpp +Drawbmp.cpp +Dwindow.cpp +elastic.cpp +errormsg.cpp +Generating Code... +Compiling... +File.cpp +Fileio.cpp +Filemap.cpp +Finddata.cpp +Font.cpp +gdipoint.cpp +Guiwnd.cpp +Hookproc.cpp +Iconfrm.cpp +Infowin.cpp +Intel.cpp +Iobuff.cpp +Logowin.cpp +Macro.cpp +Math.cpp +Mdifrm.cpp +Mdiwin.cpp +Memfile.cpp +Mmtimer.cpp +Odbutton.cpp +Generating Code... +Compiling... +Odlist.cpp +Odlstalt.cpp +Odlstchk.cpp +opendlg.Cpp +Openfile.cpp +opndlgex.cpp +Owner.cpp +Pathfnd.cpp +Point.cpp +Process.cpp +Profile.cpp +Progress.cpp +Purebmp.cpp +Purebyte.cpp +puredbl.cpp +Puredwrd.cpp +Purehdc.cpp +puremenu.Cpp +Purepal.cpp +purewrd.cpp +Generating Code... +Compiling... +Pview.cpp +Regkey.cpp +resbmp.cpp +Richedit.cpp +rubber.cpp +Sdate.cpp +Smrtstrm.cpp +snapshot.cpp +static.cpp +String.cpp +Systime.cpp +Vhandler.cpp +Vxdctrl.cpp +widestr.Cpp +Window.cpp +Wintimer.cpp +Generating Code... +Compiling... +Bmdata.cpp +Creating library... +.\MSFIX32.obj : warning LNK4033: converting object format from OMF to COFF +

+--------------------Configuration: tooltip - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP6A0.tmp" with contents +[ +/nologo /G4 /Zp1 /MTd /Z7 /O2 /D "_DEBUG" /D "__FLAT__" /D "STRICT" /D "WIN32" /D "_WINDOWS" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"E:\work\TOOLTIP\tooltip.cpp" +"E:\work\TOOLTIP\toolinfo.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP6A0.tmp" +Creating command line "link.exe -lib /nologo /out:"..\exe\mstool.lib" .\msvcobj\tooltip.obj .\msvcobj\toolinfo.obj \work\exe\mscommon.lib " +

Output Window

+Compiling... +tooltip.cpp +toolinfo.cpp +Generating Code... +Creating library... + + + +

Results

+mstool.lib - 0 error(s), 1 warning(s) +
+ + diff --git a/tooltip/TOOLTST.001 b/tooltip/TOOLTST.001 new file mode 100644 index 0000000..e206ed4 --- /dev/null +++ b/tooltip/TOOLTST.001 @@ -0,0 +1,342 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=tooltst - Win32 Debug +!MESSAGE No configuration specified. Defaulting to tooltst - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "tooltst - Win32 Release" && "$(CFG)" !=\ + "tooltst - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Tooltst.mak" CFG="tooltst - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "tooltst - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "tooltst - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "tooltst - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "tooltst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Tooltst.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\toolinfo.obj" + -@erase "$(INTDIR)\tooltip.obj" + -@erase "$(OUTDIR)\Tooltst.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Tooltst.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltst.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Tooltst.pdb" /machine:I386 /out:"$(OUTDIR)/Tooltst.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\toolinfo.obj" \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Tooltst.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "tooltst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Tooltst.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\toolinfo.obj" + -@erase "$(INTDIR)\tooltip.obj" + -@erase "$(OUTDIR)\Tooltst.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Tooltst.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltst.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib comctl32.lib uuid.lib /nologo /subsystem:windows\ + /pdb:none /debug /debugtype:both /machine:I386 /out:"$(OUTDIR)/Tooltst.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\toolinfo.obj" \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Tooltst.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "tooltst - Win32 Release" +# Name "tooltst - Win32 Debug" + +!IF "$(CFG)" == "tooltst - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltst - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\tooltip.cpp +DEP_CPP_TOOLT=\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\.\Tooltip.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winmsg.hpp"\ + + +"$(INTDIR)\tooltip.obj" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\.\Tooltip.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winmsg.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "tooltst - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltst - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\toolinfo.cpp +DEP_CPP_TOOLI=\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\toolinfo.obj" : $(SOURCE) $(DEP_CPP_TOOLI) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/tooltip/TOOLTST.DSP b/tooltip/TOOLTST.DSP new file mode 100644 index 0000000..5d5a75d --- /dev/null +++ b/tooltip/TOOLTST.DSP @@ -0,0 +1,138 @@ +# Microsoft Developer Studio Project File - Name="tooltst" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=tooltst - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "TOOLTST.MAK". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "TOOLTST.MAK" CFG="tooltst - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "tooltst - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "tooltst - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "tooltst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "tooltst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Zi /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 + +!ENDIF + +# Begin Target + +# Name "tooltst - Win32 Release" +# Name "tooltst - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\toolinfo.cpp +# End Source File +# Begin Source File + +SOURCE=.\tooltip.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Hittest.hpp +# End Source File +# Begin Source File + +SOURCE=.\Main.hpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\Toolinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Tooltip.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/tooltip/TOOLTST.DSW b/tooltip/TOOLTST.DSW new file mode 100644 index 0000000..f1ab142 --- /dev/null +++ b/tooltip/TOOLTST.DSW @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "tooltst"=.\TOOLTST.DSP - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/tooltip/TOOLTST.MAK b/tooltip/TOOLTST.MAK new file mode 100644 index 0000000..e206ed4 --- /dev/null +++ b/tooltip/TOOLTST.MAK @@ -0,0 +1,342 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=tooltst - Win32 Debug +!MESSAGE No configuration specified. Defaulting to tooltst - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "tooltst - Win32 Release" && "$(CFG)" !=\ + "tooltst - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Tooltst.mak" CFG="tooltst - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "tooltst - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "tooltst - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "tooltst - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "tooltst - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Tooltst.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\toolinfo.obj" + -@erase "$(INTDIR)\tooltip.obj" + -@erase "$(OUTDIR)\Tooltst.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Tooltst.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltst.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Tooltst.pdb" /machine:I386 /out:"$(OUTDIR)/Tooltst.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\toolinfo.obj" \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Tooltst.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "tooltst - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Tooltst.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\toolinfo.obj" + -@erase "$(INTDIR)\tooltip.obj" + -@erase "$(OUTDIR)\Tooltst.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Tooltst.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Tooltst.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib comctl32.lib uuid.lib /nologo /subsystem:windows\ + /pdb:none /debug /debugtype:both /machine:I386 /out:"$(OUTDIR)/Tooltst.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\toolinfo.obj" \ + "$(INTDIR)\tooltip.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Tooltst.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "tooltst - Win32 Release" +# Name "tooltst - Win32 Debug" + +!IF "$(CFG)" == "tooltst - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltst - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\tooltip.cpp +DEP_CPP_TOOLT=\ + {$(INCLUDE)}"\.\Hittest.hpp"\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\.\Tooltip.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winmsg.hpp"\ + + +"$(INTDIR)\tooltip.obj" : $(SOURCE) $(DEP_CPP_TOOLT) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\.\Tooltip.hpp"\ + {$(INCLUDE)}"\Common\Assert.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Gdiobj.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Pen.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Purehdc.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Rgbcolor.hpp"\ + {$(INCLUDE)}"\Common\Stdio.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + {$(INCLUDE)}"\Common\Winmsg.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\Main.hpp"\ + {$(INCLUDE)}"\.\Mainwnd.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Callback.hpp"\ + {$(INCLUDE)}"\Common\Callback.tpp"\ + {$(INCLUDE)}"\Common\Cbdata.hpp"\ + {$(INCLUDE)}"\Common\Cbdatahk.hpp"\ + {$(INCLUDE)}"\Common\Cbptr.hpp"\ + {$(INCLUDE)}"\Common\Control.hpp"\ + {$(INCLUDE)}"\common\except.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Guiwnd.hpp"\ + {$(INCLUDE)}"\Common\Hookproc.hpp"\ + {$(INCLUDE)}"\Common\Pcallbck.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Pointer.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Vhandler.hpp"\ + {$(INCLUDE)}"\Common\Window.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + {$(INCLUDE)}"\Common\Windowsx.hpp"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "tooltst - Win32 Release" + +!ELSEIF "$(CFG)" == "tooltst - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\toolinfo.cpp +DEP_CPP_TOOLI=\ + {$(INCLUDE)}"\.\Toolinfo.hpp"\ + {$(INCLUDE)}"\Common\Commctrl.hpp"\ + {$(INCLUDE)}"\Common\Gdipoint.hpp"\ + {$(INCLUDE)}"\Common\Point.hpp"\ + {$(INCLUDE)}"\Common\Rect.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\toolinfo.obj" : $(SOURCE) $(DEP_CPP_TOOLI) "$(INTDIR)" + + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/tooltip/TOOLTST.MDP b/tooltip/TOOLTST.MDP new file mode 100644 index 0000000..746c4f4 Binary files /dev/null and b/tooltip/TOOLTST.MDP differ diff --git a/tooltip/TOOLTST.OPT b/tooltip/TOOLTST.OPT new file mode 100644 index 0000000..8f33c8e Binary files /dev/null and b/tooltip/TOOLTST.OPT differ diff --git a/tooltip/TOOLTST.PLG b/tooltip/TOOLTST.PLG new file mode 100644 index 0000000..9a5c2e8 --- /dev/null +++ b/tooltip/TOOLTST.PLG @@ -0,0 +1,43 @@ + + +
+

Build Log

+

+--------------------Configuration: tooltst - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP205.tmp" with contents +[ +/nologo /Zp1 /MTd /Zi /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /Fp".\msvcobj/TOOLTST.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\tooltip\main.cpp" +"D:\work\tooltip\Mainwnd.cpp" +"D:\work\tooltip\toolinfo.cpp" +"D:\work\tooltip\tooltip.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP205.tmp" +Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP206.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib comctl32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /debugtype:both /machine:I386 /out:".\msvcobj/TOOLTST.exe" +.\msvcobj\main.obj +.\msvcobj\Mainwnd.obj +.\msvcobj\toolinfo.obj +.\msvcobj\tooltip.obj +\work\exe\mscommon.lib +] +Creating command line "link.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP206.tmp" +

Output Window

+Compiling... +main.cpp +Mainwnd.cpp +toolinfo.cpp +tooltip.cpp +Linking... + Creating library .\msvcobj/TOOLTST.lib and object .\msvcobj/TOOLTST.exp + + + +

Results

+TOOLTST.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/uudecode/16888.new b/uudecode/16888.new new file mode 100644 index 0000000..558f950 --- /dev/null +++ b/uudecode/16888.new @@ -0,0 +1,983 @@ +Path: iad-spool.news.verio.net!iad-artgen.news.verio.net!nuq-peer.news.verio.net!news.verio.net!logbridge.uoregon.edu!su-news-hub1.bbnplanet.com!washdc3-snh1.gtei.net!news.gtei.net!dfiatx1-snr1.gtei.net.POSTED!not-for-mail +From: Virgil@Home.com (Virgil) +Subject: ** Jenes ** 1st Time Post - jenes01.jpg(1/1) 41511 bytes +Organization: What Me Organized? +Reply-To: Comments Welcome +Newsgroups: alt.binaries.nospam.denim +Post-Count: 000017 +Lines: 932 +Message-ID: +X-Trace: 9/mo+5aPextSzx+/aETev+b+3gyi/jlFFjAQFVhGS1Jlq3uQ/UB17C8mpuulYmB+qWgA+VxGAEHX!3dohhEwwcLDrcvw39UT6cMeOkt/pjXhYbEfPVaOAMcTp/h3N/y+kKKk9SobJ1as24qB9sO8= +X-Complaints-To: abuse@gte.net +X-Abuse-Info: Please be sure to forward a copy of ALL headers +X-Abuse-Info: Otherwise we will be unable to process your complaint properly +NNTP-Posting-Date: Fri, 06 Aug 1999 23:44:55 GMT +Distribution: world +Date: Fri, 06 Aug 1999 23:44:55 GMT +Xref: iad-artgen.news.verio.net alt.binaries.nospam.denim:16887 +***** Comments Welcome ***** +BEGIN --- CUT HERE --- Cut Here --- cut here --- jenes01.jpg +begin 644 jenes01.jpg +M_]C_X``02D9)1@`!`0$`R`#(``#_VP!#``4#!`0$`P4$!`0%!04&!PP(!P<' +M!P\+"PD,$0\2$A$/$1$3%AP7$Q0:%1$1&"$8&AT='Q\?$Q)!P>'Q[_ +MVP!#`04%!0<&!PX("`X>%!$4'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX> +M'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A[_P``1"`'@`H`#`2(``A$!`Q$!_\0` +M'````@,!`0$!`````````````@,!!`4`!@<(_\0`11```@$#`P,"!`4!!08% +M`P0# +`0(#``01!1(A(C%!$S(&0E%A%"-2<8%B!W*1H;$5)#.2P?!#@J+1X1:R +M\25CPM)D<[/_Q``:`0`#`0$!`0```````````````0(#!`4&_\0`*Q$``@(" +M`@$$`@$%`0$!``````$"$0,A$C$B!!,R05%A0@44(U)Q,V(5_]H`#`,!``(1 +M`Q$`/P#\^[O=_71*W7MI;=53O*LUK^[7V379C=6<&J6S?E2$K)CQWQ_I +M7I>GR.KL?VK,T>?\P*QZAYKT +M!%NTRI(BNI'<=Q7;&5G&\=+8B.!&N`)DD"\D,.V:N3F.2W-JX.!R"/K4[4MX +M&C4F6''S=Q2EM9%B#F4/D\C-68M7IE=(.AX.Z2<5T\1M](GCER`(V"_X5=M8 +M9%N#EHSM`W"D_&,J'2KB495E5V&.W8T28W'6CX3NS=3M_P#Y$G__`$:K"MUM +M26XGD;;[I7_^YJ?'MSS7B^IE_D/<]'CXX2Y".%J[$%8[3VJI;O[E\5>1.RUR +MO*)%;MXS2;'Q=C`,)^SYJU`6WJ*4G?A:; +M'G:&`[TI1MCO\#TV\'R#5F$EF)`X[54`;.?!.:MQG:&V]P,T4"6QTZE@0/I7 +M1>UD\DYID;9P1R#2TR)LM@'M5,ENG0R'F#9]S5A<&"3'@9_FDCB1D\=Z&&*D)/09ZE<9[JN/W%,=N@X[@9I41",01VQ_A1R,/MR-AH8?98"EH@5]W. +M139,9C;Y2<4JWQJC1LIY=>0:4@/X7CN&%6+G\Q(9".0< +M']JB/`+<=)[53%==E@Y=$E'[4F($QK$O<<4=KQ!Z3'I!�JQ2<28X'/\T-A +M6QBYRX'[5*'$+)\W<5RJSS,ZD=1W8^U'+@E6(P3D4,))/3)97(23ZG;1'(B) +M/@T()V!2>0V:9#AXBI^M'9+BT]CK?!:*4.)A +MCZ\U"@Y(`'DT-AQ`,Q64@CAJ-FW2*W\4,D6X!VQQBI1<*6SP#2>RFJV1*`)S +M$3PHSFD-D#'DTQE]1_5)\]JD*6((&1V%#_`-'*N4'TJ)P>W@44*+%T3M"'&1SSBH=UW+Z?(\4Q8P`Q;W=J&!`BDD#@<4,.Q4K%2<= +MP:A5W#+GD=@*F53D>2>?WJ45L`MPPI=`WHYH@4.3U%NU)D.T'ZC_`%JU*!@- +MCMQ5F94C*CD5QX!"G)/UJ +MF0VA"KC32Y@OR]J0]=%=VQ)@=J&0C&?F\TXIT$G&?-)*' +M//:F#1(C[_6A."Q!\44EI"U66`QU4F08)`_:DPV +MGL_)BM[JYAS4>QZEN]=LO]3A_P#./B%`-K;*^M?V?:JM[I$FEW+GTY$9/V/U +MKY+[69*]?\`WBQ7VPG:-U;XW)2,,R]Q4?3;>)K6;T)2"02$D'9Q6KITSBX*2 +M#(''\5A&:25O0"[XO7/'?9=DD*+A@=M%;SHY$ +M)C.Y>Q'8U-^F"T7.T`$&G:L+X\:./X7O9"K,ZPOTCYAM/\`G2^P3XH^'0MN +M+LWN]1NK_P`S5:3W?U57A7;G=U;F:K,"]5>-ZF/+(?1>FE6,NV_?]ZT+<<[? +M-4[=1E:T(!^>5^M8LW5-ENW3L3YJWC]'>E)[2OD-3,]/.ZH<36[=#X@U-`SC +M/F@'3CZ&G)G)0\X[&H>V:)<3I$!&::$R=PKD"[2#X.#3`0LJ@^W.#^U3Q&B( +M^"QJU"I"G/UI<2'!+=Q4EMI4?3C--F=-/0U0>4SRIIP!4E?(.*5\RL/-/#`D +M?4<&DRMO1S<4QN-[#MV/I\^#5^?\S3G!P63''UJ@XVI(@[C'^%7EP67;["< +M4B7HDL=ZD#&0/],5!``9/!.14WJF,MM.0K8_<5R@,I)[E3BF^RKLN,%9(MIZ +M7C!_GS59'//]+9IENI$2#.2HV\_2E\9F!X.[(_:DR5WL?&Q<28`&3G%=<9V' +M';N,4M245"".LTV8,I96'M`XILJ]C +8\QO&,\^F*9(H8*P(Y-)7#R(,CD<5(. +M!&IXW-2>P980KZ3Y'6IQ4(AR6#8\TM.9&7(R6H!(RV05&USV\T +MWTRQVJ1R<4F`B5'R>1Q7;BLA`/.<@T&=6RPI;U26';BAC#)(G.1F@$I61@3G +M-,/**0>:;&[L)^S;>V&Q0T.PR^4(/85"ACD#D?2@96]-F +M\'-3$[*A/DFAE]:`N.F1D!_PIL>XA>P4=L4GW,23R*=N"QA1X/\`E12$[!"[ +M26P-^5/CS1$LC;5[46T`8 +M\X%'8K!GXRHY`I#H6)\XSBK#`YR,8IINNAHF_JI;,FYOTUZ''E\CS:TXC<6=SL"DO"X() +M\BO!_!NH">6*8ORWFOH<\C>JKN,L>Q\$5VXG9Y_J;NT7[F9KF,-&1VPLX +M_3"R*QR.>*RHF1DPJX8H#_A6AITA>-2/:?\`2NBZ.=I(T4Z^H!3GZ]Q7E_[1 +M%*_"FHAMP/X>3M[L;3VKT\31HI&.#7G/C_;+\-7Z[^?0MPWNW=54XE_*V^:OVPV +MC;]*R9U<*=ER-.S585`5X_FD1%@G%6+?I/5W-)C2V-[9XX!IL84A7%``=Y4< +MTU!M@&&X!Q6;T:O0_8H)8=J-E!0%OK2QR?VJP<>FOUS2;_!3V$F2&YYKF7,8 +M'G%&A`E(`[U,0+#8PZNYI-!>SHPN0#VIL2Y9CY;C^:Y8^<_2FHN"#]\4RN0W +MY=B]P:>3F,+]:JD8GX['_6K<6&`QW%#5,1%DET;G:?\J,,1;X[XY_BI?I +M<=N:A616P>PX_@T-#M4"Q+*2!^_[5;@.U0/(8$4J +-AZGIG`SP#3-VT!L>2*3 +MT7RT.#JTXSV((-/B8!U7(P6'\55)0,#LXJTGI-*.1AE'^-3$5KZ+%[CT@WC` +M%+5]J#)[4Z+$EN8_(JI*R"-<@]R#5O9*TR]"Z_B8BQZ6R*ZX1-[$$8'_`+4M +M&B9(3@@Y&:=+M,\A`[]JB@O>ROSZ`?/`/%6VQ,9 +M5@1E2*3+JPT&&CW<$-@XIDL9,6XHC)$N[.2?%`[3+L.PR!%."<9HFQZBCZFJT;@39INX&0<>>* +MIHRO8Z=%#@KVIX`"@^#WI#/G'U_Z4U00P`[4K*?5!J3O<,?;R*.-LOCZC-5[ +MC_C'![FF]4H446X1/@YX[4GV +M/;)5BTC'//:A?!#4`XD"D\;J&"ELB0L(<$\?2ISG!'%=.F\%@>>V*4I(B;)'%#*;"0,6;:,X_ +MUHR1MRQ`8FHYCBRIY:H=":),'`&!@G.:!F!8D8)^E!@KP3]:EA1$D(+[CW!J$SO8?0\41D`"EN^,_S +M7!2HW'@_2@IS^F$8L$9/;BE-DD@>.U,$A*@$=1J'&`"O2#VKG)3E<$FI:`%A +M1O)[\T!SSCL:,=\]A0E@.`.U'8G^P&)!/U-+F#@Y^M,SEJ$]63XS0'Z/R)<2 +MOZC;:1,[U:O(W4-A/;5;=O1M]>J>!/R_D+??U=="K/O]],V([]-<\7_+6R?$ +M)PYGJ?@N_:.^$1ERK3K[/H8(],G;WYY_Z5 +MYOXW$,/P_=,23&L3C)]XZ36W:2"0D,YP1Q63\<6ZO\-WL;Y;=`XX^FT]ZI-, +MQG<3XQ%[6S^IJM0U0@9O3;JW?F-_]U7[)NG:U>1G^1[V#4;1I0[=W/:K\0W- +MM'>J2%3CIJY`ZE]W:L&=$96RV@ZCU5<105##]55%R9.GM5N!FQS +VJ.-,U[Z+ +M)&V8,IXHH]I7[$TJ(_F[2O%6$*X`7M2LML:(P333ACD>#01[MZGQVIPC&2W@ +MT5L?(81UEC3(>S2=L'&:64.2">`>_P!J?&!AXSR&_P#:@7(,#(YX';_YIC`F +M`Y]P[TM01'D\E1@U8B`_$X;E7%2#T*52[D)WP,?Q5B(DXD4=^<4M`8W.1VR5 +MIA8@D)Q@DC]C3:'))C;V$*0^..X_FJSKD`CN*O,#(G?I\9JD-H!'D<4NR$FB +M6!,0<8W=_P":8"64*>QI$9.#C]\48X:;+(LD09>.V0:2[C>V,=0SBF!`8U([[N?VH>@"!24 +MC&QE8Y/_`$KA*-Z;O;0Z*&^H0JJ#E3D&F'&01WS593MSN[`TX%,9R.>:3'4> +MQL7J;MI`/BCR4D`')6E"4JNX?7BB8R,[2@=-`JW9<5Q@9'/U^U,#G(P:HK(2 +M0/!IR,,!23FF2T['3,QF.,<]/D?TX">_VJ;V4ZH`';@D<4MP50_J(S5"B_H"(L/=@FFD;9B2P(YI0+&,``97&?O0`DL.?;2 +M97Z+!F**V`"30J!M)SSD$YH(Y0<*P[YY-6.AEND0[\-Q0L..34GN:`#``/-'_!71&[<>>!29N2?I1-PQJ)",'-50-[`QD\ +M&N+])'U/>N^H%0P&SC]JEA)GY3NXW(9*HLG6U>JU*S63=-%V:O.SQ^FS;J]F +M1X&.$$4MO5_535=/FJ+ADW]/NI&.O?FHXRD+W9&A;,DBE38SU]9_L]O?QNB&!3N=#FK7R-\K2CXGL+.6:';3+@+W>,C[=C6?\)VQN-)5)&+VS\`_0U9F66SF-G=',)_X;'S +M_P#-5'HG)IT?%($V221_IFD'_J:KMON5POBO5_&/PHL*RZKIF6B>0F6/R-Q_ +MTYKREJRLPKS_`%,:=GL>F:<>)I1MEUVU>C*A^.QXJA!P35L%C)D+7-*1V?R- +M.'V'/:K:<$MXK/@DYV^*MVYW;V!Y\#[UD4M%X$$ADID2[C@\#-(4].!TXJY' +MM,>1V`J6A^XF.MW&0".,YIR#`8=\'(JO#W8CFK=NP(R>]#9;2[)`8S%#V/:B +M4X/.>.]%C!!^]$RXN&0^QAP:EB56'\S9[/DT<7!'/GB@0[E(^>,D?N*.$HT. +M_P`9_P`*H+0V1MV#QQR/\>:,!3&&\@X/[4OC;G':I4*%<>X-FB_R-+\ER+*Q +M^DWNY`%59(PLF\=NU'ZA;\[/(_U%,91);@]MV32;L?13D`#$X['FI^H[NM3+ +MDS"@)].Y1Q5*%S')Z;>:B2IA#L+=R@;W8Q3A((Y2IYR*JW"G> +M6!\\4QCD@\9%%%W98)S+G.`P%`Z\''`!H6SL#`^*Z1B(0WGL*3!O8R4\<]C2 +MP_0J?Q42-[=W:IVXEZ.PYYH8ZLL@@;HV.<&GB0[BH[&JBRJS\KU-WHXW;U,^ +M!2#[+&-DG[43,?=X)I;,9)`5/-'AC)Z?T-,&RRA5O1!![TZ%R"XSSXJO')LE +MCR.Q.:9&X]20CQ5$=B'D]*=C\HJRSKZ"YYR*I7+A@V1R#3'),$?C(I/L%T-= +MP6&/`KB:&/2"`8K(QXP<"DKD!SYSBI9F",&\ +MFAR4W$XP.]25865"D#W#ZU+RJS;1[1V_:A?85QYS0LJEL+3Z&W1(<*2>_>C) +MVL"O@YQ222I)P.]$[8YQBD#UT6(Y5+G?]]=N&,#Q2 +M93D$5.\8)I`W86X#QSGM4'M0Q@DL3]:YFW#Z4/0-6P*.PU]GYZNY[=HWA5E5?U5YK557UY$5MU:QLYI3Z*+ZCM\M( +MN]+>'<95P_\`57N-<3Y?E_L>?^;V5$BT^39ZC=%+D9*S.K@5/_$K:^%]=N]$ +MODFMI`82W5'^I:R)8^IJ''YG:G,YN,[/NV@ZM;ZQ&KPNIE;'"UJ^FKM)#-!N +MC((P17P+2]6O],N$GLIBK1M@@M7J(O[0M:#Y98V;=CO6V/)79&3&UY(^N?!F +MLQZ/K,FA:@KK9R$O"Y^4G<:^A:I86=W:+$WYB,2%D'RGFOSQ=_&5[?VJ&:VM +M_6!9U8#FOJ']G'QA;7VFQV=Q.OXR,`E&;AJI9X.3VS4O+:;3CZ-R-\;= +MCX(S7S?XGTI-.U,O`O\`NTG*?I7CM7V^]6VU6T],E5E0\*W^-?-?CBRF%A)$ +MP.Z+E`>_:M,N-36BO3YG&9XJW/YISVJXGN#;JSTW*[_WJNVS;^G]5>/+QD?0 +M5$N1/U\]]M7;5BJD_2J/INI+.M6;4Y8*&[M6>0M6(3EM_8TF6H_9J6Y3T\>1DBFPDI(_Z6JK:L'Y\BK/R8\<8I/79;WV6 +MH2&S36RP'`R``:1""'"8X/-683TL?-)[8)4K.C;;=Y`[DP4;`&54(1SW!HF/Y(9/WQ]/M1$$Y'BA0@Y!XS_K2&Z8 +M<*XW*.S=0S5J(_DLHP0.5S516ZL^<\4^T.9R#[#S5,>F!Y-*1B9N>U".":K9&T`=R:(N?4)R>P&*4B6OLO1N?6/&0?K3;=P9I01WYJLDQ_% +MJ,#`IMI(HWY^IJJ,_H1=F,^H0>:0'[X[?6N9B2:.@NRTS!@3CC +MS02MGI^7.:6LF(\-]*YY# +N/'T-#%3LZ12QRN!Y-''V/TQ7,RDD`\4"L5=D\" +ME93T$VX2$_2BR2Q![U#-^9]C4.>IF\^*.A-G;QL(/?.:`D@Y':NX(Y\4&\ID +M#G..]#*6V-!RG/>I('&WOW-*5NI@>Q[5S,5)7//FD#6PLC!W'BID16C8@XYI +M:G<.KL:ECA"!VHZ85:T,R,=^:A\!2/YH`P'N[XH"Y8GZ]J&P89(R2.U#(.<<]J$Y[9H<]0HG]M&P:H8N-P..*"4Y8@=J$/DD>*AF +MP3GP:&K)XT"S`Y&.:6Y.#@_:B?G.*0Y)&1P,]J*'=C"W2<]J62!79`!\YKF( +M9?O2D)I(_.4]]-;2^I%$P9?F6JUQ=2732"5F8M^JO4:U#;>F!&R*&^:L=[-? +M4=8O3?;\PKW>1\TL?*1@W]DP@]5?=5"*S:ZF6-?FDM9(Y?3VMEEJD]B1, +MS6_3(K=--HS;GS_^3%O+*6&1E/NJN$ZZW=474))V:YBCRO3^75&6!&5GV=53 +M+H[8PY>10VI]:%]B.U-EBVNU5Q_Q.N.N)I?;3E&2D9+_`"?(^S?#'Q'>?@H9Y7]10O6?G/%>PCN- +M-U9?]ZA8%T/)'-?`='UJXT\[E+,B]6VO=:'\7P7,XA;*.5KMQ9;5''FQJ,]& +M]K/P=!-9U30-7THEIH7*!^ZK7L;/7H4D&7`^F:U)M7AO;-HGD +MAE]0$Y/)[&KGAA,VAZR4='@M&NK:[37-+TRLZ?[F]Q,\EPI!7$@?L?WI\ +M1?8<#FM:W33[Y5+U";I]A6_;]QFK +MT;8BR>P-4K=D"]2]JLQMF0>4(%*-3 +MO8.!U>:3LE.NBVQR05/J0.U-!*2$=P?\`.E1CW`_4U)5ULG'=/\***3*[?(YI8)!)^93FB;`; +M/@T,KL?$2TFQ3U5>;$D'/.#S65&2)@0=IS5^V;8WIDY7S0C.>BO,K)V[XS_- +M09.D'R:N74?!(\'_`"K/+8.`,]Z)JF-=!!]L^['2X[F[&JRLA)`[ +MFB#?E-E,D\TJ&RTO6V5/`-&9#ER,9-5D;;D@\$\BF%@8VQ[@:!K1:5\R!NQI +MT;':Y`^N*KP-&4;U`=X&!BG%L(2#@D441RWL6PP-K=\T"MB*1L9!X&:4[NP& +M#DCR?-:<5.\!&W=R:&-C4;:)'&TY`W4AR33&ANIMN.],`81LYY\?S517 +MVMM/D]Z:)"`%R<458MCE6`SQFE&0A\CQS1,X8#CM2["4:8Q9,+ +MU>W-`>:)!M!"D8%,=*QSD;-WWP*@'<>>^:`ON*$,0<$\4`.>*G/=`.`:&%ULF<@`D4$@PI`./O09.[[4;D%6H +M'T2SJ010K)A6!%*&2"3Q4J>>:!I(ECD*X[GG!J>=O!R<>:@@=_K41R<;NU22 +MV["SM!SY-"S`YYH9&+`8[4#G"X/?O0T#=O8UCY%5FSC&3]*/?TC/?P*!NP([ +M4Q_>B#_G4'VG[5P[G)J2>G/B@IJWL_/$DJ74O=,SR1X3Y?FIMZL4K)=V +M4D.\MU1-^JJDBV,4WIRQR*[;NM?;5JRTU;RY2))1%M^>E'D5DQOH4S(W7M]S5C01)>78A]1=S5O'9CE4E+C&1Y +MZ>/JV,G55*I +M%M;W5B>UF_35BQF$,Z_IK*?B=D(QD;S(RM[:.`S6\JR)W7YJL6DJR1KN^:M) +M+97CXZJJ,3/)",NRQ9:VLJIZ_2PKUMA+;W&G*]JZ@A<=/>O"7.E,X]2)>JNL +M[S4=+=L*WI?,*Z5D:[.2>*$I:/J&@7+A;BQ>;$Q;=%O/WSBFRR0S0.FI)MF_ +MI[>:\7;:[;7*1RHQ2\"GDU[73T750@D:I*-C)X- +$RE#ZBG/UJM&P(YIT +M;GL>U)Z$F,DQZ0D'GG%=``'#?+4!@"!CI%0V0S;3TTFP6NAN=LQ'RT+,4:NS +MN0Y\T,O(!\CO^U2QJT%*,_8^*4<<_6FJ,XR>0>*5..I2O>FRM@-QN;S4G&W% +M3)5<_S5,R[GW<8-'O!4<]Z!6GL8""2`<8J"_^[G/;O2(V +M&7![FA:3$3C.<50:'RN,+M.!4QOF<@XP,\U68@H#GFB1@-Y\&I[+XEE^,E3Q +M0H49AN["D!\J0#WJ2=O!Y)I-;*33T6%P%;GALT`8AB3YI6\$@>!1[@P)[&AB +M6NAK$$C';/-+9MK8'UH?4P2/-<6QDCG/FI*=D,=QSFFY/J;">`*KJ#G`H]S9 +M)/>@NT6"0#V[T);!Q2B[8)[@]J@O2#^0X,=Q!Q]ZF-L/C^*KLV7+"C5\DT-6 +M)J]E@$9X[U'SD]A2V8+N/D5S29[_`,4,E)AD]?!KBQ!/VI7[/BDMA(9NR30$C]ZECE:!AC-%C21!^_>I)SQVI9;DX[U. +M>2**L;M=!$CD_>HW'!%+RP-=N[_6E0FS\S+,RR,RLRLU-ANY(]T>YMK?-36T +M^+W[<3YSW)1-)=226`QO"K*WEO=3'OV@1)"NW;^FJ\2 +M1JW7M55_55F]-O=V@C9560]+;:.-$2R2[*VI:Q)J4*PQ'T\=/]ZALX6@E]3_ +M`,5:H7EIZ#[HVHK:[GW;6ZJTEXG-P\]&C=7*]3,K*[-65X8EU%MEV?+59_?6E>VLJR,[5GR1;7?=6.6,F=\ +M)L:+>8'I2/7J+";'S=-?/T_*??\`6O0Z/?APL;-U5/+B#E+B>WBD4H62 +ML?6[A@^U(V8-5FTF]M78XXW&UT5@U=496.0Q1JK;NG%3\*ZNND:Q%=L2CI("333X%9 +M%&71]GTF[&IR1Q:F\=KJ$+&$^HB=]GI)K6*YLS2^G)"H,.,NS?%F<=&7-H^JF81VXCE"N0X'/'-;%E\.QF9$N+ +MQ(W;');`S6AH@%M-ZSRL<+M`S[OWINH2B6V$D:VYVKB%Y5MV,0) +MYQXI<,[`=0PV,XKSSN652Z+I&8]@[T`(Y!^E+2;G@]ZD$#)^M9-&JD$ +M"1^XJ2`0<'FN9DR#XSB@8C=D55%ZO1+8)/.!0(`!G')HSADSQNJ&7I'@`TF. +M3V0.@CG)HNY9AVI9`P1SNS0N)(QC/?FD2V_H)1ECU8SS5B&8^B`:=)+B +M,"I:+M+LMD[@H\BN#'9C/*0K99B>]&SGV^:713'*W+8-0Q!XS25;;V[DU)9>])H.QI8JQ`/2.U1VQ] +M!4'MGQ0M(`-H[4#K!KOGP?%(?)=%DL$`P.#Q4%@,_>E%CV\5!X/-!G2^B9I#O`P<&NS7$T,G! +M^]-Z"+=DGZ9YJ=RX/WI>X@DGL*$L"QHLJ^0T-AL^*YCAL?>E`@@YH)92,D?6 +MDP<+8\L-Q'WH7JL$H3Y']M!J%W^*'7:6\,O4 +M?R +QA:=H^GSQ?#IN$W^JY8,K>VLZ\A:TE]-IED*_1JF+*S2_)DZP65UZNFIT! +M;'_:R?[0:7\-GKV]]M6;J#UU7U-M4)8&CN&6-6K5QY$8\GF>XM]`T8(9UN+C +MT_D7?W_O5/\`L_3_`,,BJB^H3U,?I7E%U?66@_"-'$L2;MK*>JJ5S/?-)O-S +M-%_3NZ:RX2*E7S@CU5SHD=XLK6+QOU?\+S7E?B#0[FTD82HP/Z:?;7VI:<[3 +M0."9%V[OFKT>FZI;ZAI7J:C/;)..ZS-U&CR.CN/E\CYK<*ZML:BCD:&X1U>M +M[XEMK1;D/"R@_P!->?E1.I%J91+C*.3Q/5:-J6^+:?CMY\ITM7S2UG:&1 +M6C;:U>MTJ_9XE-5%\2L^*,SUJ!2ZL=K!N:1J>C6\\32JOS4JRF7:%W<5JVTO +MY;*W:NE4SC=P,:P'Q-HMREUH=Z8P.Z;\5](TK^T#5C:`:YI-I-<#/YD:;F/[ +MFO+=)S]!3+=B.G=R.*U2_!E.2FO'LV==^.19EI9]*W1GYD3P:P=`UM=3!F"[ +M'+@JK?IJ_-&MS9/$^&'C->9T?2[JSU=]G_"!7O3F]:,L6*G4YGT?19XXQO>< +M#+G@GZUJP[?5N`""2^4-?+KW6A;:B;<*W'UKV&G7VVW_`!,C'&_'VQ0I;HIQ +MM6CU]G=QR&2T9U6>$AA]U-584MYM0-W%<,(U3!1CT9JE+/"LINX(S)N`P5^A +MJ[;K;O&T1VJ\C]OO6I@Y;V>B_P!IQ0VL<$$EJ[J,LI^;Q2+&]AC1A':1*@RY +M4+QGS7FELY4)::+TY48C@>,U?T^Y@LB(]09HUN.F.4]LY[4VJ-)37R2[#M42QJ6C3'EEC=V94_P_J,19@``#@9I5[8S6^6]2-\$\*>:TKN +M\;4[=/2NI=VXL"IZ:2=.T^8QW,=_()V;:5+].:YI>CQOI'5_?Y+Z,664K(R. +M-I!(P:K65\MSJRZ?"ZO,U>QU2PBE>WL[J&,2/[94'<8[DU&GZ+I&C7Z1VD"S +M7)B)]9AG+9[9KG?H4GV=+_J"K]GG6CN8RVZ)CSQ@5#2X(1SQ7J]4>WT^*>&V +M7UKR;+!7Y"_:L*^FMDAFAGMB;V,@%%'.<43]`I;1'_ZGTT44=6<@.,CFN,L; +M-P<@]JBSOM&FU![5[*_$R=L)5VYT6U>3:LLML!@`N<`>.:YI^CFNCHQ^M4S/ +M=U&4X\TF5TP02"0:N:E\-:O;,TEJZW<#H-EK#;F:SF&W&X;>W-4I&E5"T\)C/\` +M4*GVIQ+62$F%/ +$KG(!R:I7=E,&7TVV\U9:8^J$#KO/85%R-0##,;[<9R1Q3X +MBID338;^]3FT^$1DB1P"?-'&A2;,8FZ +MC;>6R#7?BI489K:]/3(E&Z0LYX4"J9BM)YP(6WE6Y`I\;$YM:$1:K&K[7;!% +M6/\`:D"`C>/K5JP^'[[5KH16.CS@*V#,\?3P/K6Y;_V+7]R'DU?4XX3)\L+8 +M[5LO2RET3[J3[HPHK]'RF[@U<_%AF';ZUVN?V?II*220:C(=K8"N_)\#%>(N +MM3UBQG,;:1>O"K=+A.]3/TZMJ+48IE$L+JP^M<\X2CV=/,W6G.>.<5"2@KMW=ZS([KG@T])D\=J +MR:*QLT5D.OS1(QQD_6J7K<$TQ&;<0".#2:'V7W;''BNE(P.W%5-X+ +M\YIAYC*YY-#1%T-8D$8[&B9^!GM5??U`;@34DY-05=ED-N<$=LT1;'>J:2E6 +MQX%,63).:;&[+!.#[J[W%<6;R +MU4T)NNAY8?:@8KRXI3-@U#,,XJ:&MC`W430EP?%0S9YI);$A&,"@T5CBW)H2 +M_!`\4MWP/OVI;2,,K]:&Q=CPV=S5!D7G/[U69R&'TH7EYI67QMCG?&<-2Y). +MO=FD%\9P>*!Y5!;[4$R9\H^(]`D5FO+>&1L]6U:=H'PPY8MJD4T8]J\5]`N[ +MB/8MJ\:1G&2Q%9=QK-M^)]4RB01]D+=Z]N4G+Q/EN,,1G:*.&3?\JTEU6!?SHV5_T_-3]+^*(XGDGU:!B[+T^@OS +M5/\`]26A>4&U261PRYE7J5OU5IJLI[/6+::^=%,$?"%*'*49%Y +M,5JN1\SEL)Y&9<^VLRXA=96>OIFN:/'#&)+97=CNX7Y:\;K=E)%)ZICVQM^J +MFGR.6"EBE9YUHNNKND7/IMZ3/PS4%U%\FRJ;;U;9\U8Y8\3TH2E*1ZJSOY() +M/2F_YJ]+87\K,'99U:-E;YJ +]'9WL;@;9/=7;#(<63'&!I6TNQ0/!-6)9$"% +MQTU11F<;^G8*:LBN=WN^U:IT<\TF]%76]'%W<&_MOK5G1%U&"1[:[])[7.!M +MJW!.P8P\@X_BG1=))+<4ZMFGN<51JRZFMO:BVLT&2G2?`KSFG7.HSW4\8N'] +M6&4%CGO\U:$4J'(*C^*1('M;\:A9)O.S$R'L15,PCCY]GN]$U*ZNK./\0L4\ +MF,.%Y?(XJG\77Z_@%CGTRXC@MI?4_,3!_BLW3WM;R&WGMKF2SDW]>#@_S5C6 +M;[5=1N8K"V0W<+)^;(W.!1RIDSQRR3I:-&RN5TX+>6UX0LO>.4\'[`5L:+KF +MH7NHR1ZC86IB4'G;Q@UA0V1_`A9[.25XAP<9Y%.AU25H@TD8MX\;<$8;/WII +MV7)*#HT9M5U9+]8+'185LPQVL(^XS5S7GM9G-B+7\/.HW%D&`*S9_B*&QL4= +MO5+CL!V`JS;:Q^/87"6DDXG]Q49(\5;:,I.0RRGN%@M[6&4W-VV4#$Y"_P#> +M*K-JETNJ[8ES);RA3]/O6AJ]R]I\/R7&AV(-V658UV\CD9/^&:\U=M#:WLVZ +MRNM=U#47@7,:8!Q[F`K +MST5_:H_JO)N=HL?L:;8:A$(=L3APQY^]*D7R;8W2K&>74SJ4P2*21BVWL.&\].1R#G/:DV^HQS2PQ3=!?(C([9`.,TN'44MYG]>)XI%.-P&%/ +M'_S2:1LLDF5(]3N+?6+BUMY76%25`!XR"1Q6II>O732H'EE*1MSN/>JXELXB +M]SZ2DD9!(\TJ2070CEBB6-9FP,#`)HXWLERBM?9MZA(EY,?2RC,O5M['-9NH +MZ+'J]M`91#$T669NP('UJK#$U]?-8B6XM[L9"\X!(JIIFHZEI?Q#:L2QFWME]:)BBMN52.15 +M/3K^8*U[&6W3D'T9.P_BCVX_@SCERW?(+4='T"=6FND6W)'2J<$?]BK&CZ/H +MVEHM[##%*.>&&33M5%J8%_%Q%YI$W$*.Q/:GVMG%/9ED]1,@A0>V>U+VXWI% +M/-/[8Z#XDU$A+;3]-*H>K;&G-4-3USXLN+G;:Z/=`'AC(GC[47PX=1M;NY_$ +MR*DGIMZ3*>,BG6>M:L;6W@>24R/+RQ/89JG%F#<^5R=F:[7ZRE[O3IY95(.V +M2/(^O%3-K\QDQ)\.QNA(4!H>P->EN]9EL&D +>95N)F'"]RH^]!;?$%AZ+_BH( +M?7;&WCCZ5--&O)1^+9X/4K?X1OY?3U+X<$-U*XQH=S< +MJN0-CMVK[/#J5IUGG%[1W1SPGTST"39)SC%,2 +M<9_:L2.[W`\\TX3Y.[=631LV;+2@GZ&C68>ISVK'2YZSD\BFQ3%NHG@BI;"4 +MMTS5,B[F*]\DT0?G/T-9@GP3D^::)CSSG%*BJ-%F5AP12@ZX8Y.1599U92OD +MU+2@$X[T,6FZ+B2;N#4[WY^E4EER3]*F2XR#4M#>BXSX!YYH6D)Q582XYJ/5 +MZ._:@4JO18,A89Q7&0GGS5M$D.!I2W')4=C59[G[_O6/<:FO.SJ\54>]G=SL1L=5-1"459YR/4;^X?= +M)/;6Q\36-M?6SM);VT31]*^DN`6^6K%M);I:EP_4O&! +M7/<2G327MP1MW^WFL>7*5G7)N$>*/(7?PE)^%_%K,-XW;46O+W]O+:W+V]Q& +MPE'N->_M=:CU"&41,(KF+_PG\K]J\_\`%44MY<,\D>V8-Q6B^5,Y\C>27*:22X651&.-A;FLW6-+C +MN=/"@JT@6O&6=SJ=D"R2>NK>[U*UX?B.)I8XWW1CI61FK#C*)M)1,VW^'M6E +M!DG,!1F88Q5;XCTD6,,8`5NK;N6OH+2V122:UG$UHGM96KQGQA9$\GL*C/GM+FVV20JVW:K5K:9+#,^UVV-)YK8C2-K=&,:^Q>EO[M +M9(M%AO'7;PW4M:+%4;1T +O(I5$B,N6^6J5] +MI\+O'+'&K1GR/TT%U\,;8Q=:;=S`>[:6^:JJ2,9\?XFO^+(<$KS5Q)\G.[^* +M\LIU:UGEWJLL7]/+5B0H7X95)I_K+&^Q/ +M-8MO=03H-DZ;^?FJQ'*P[MNQYIVF2^4=$WFG7=U?HRS_`(<'])Q6_H^H:AI2 +MX4PME"#^U9F0S+)#*F_`.2OW%"0Y*35_8KXB^*K![ +MR.QLXFDN7X*^%KWFD:B-'LH],MT_-DC)F<_*,GM7Q.[)L]=DN/3Z@2RM_P`U +M?:;!+?6M$>XC.V]$1&T=SW[54VN2,\<'QZMM-U&&.[MW(*2/C +M.*H:[HFM:D#-'&KR?^"RC(^E>+GT:!=1?T=UO>LYWE.&S7H=);5H+5[>+4[T +MR1_*6\U5J+.>2D]0B64TR]^&OAJ^_&RI>ZM3Y_BO'?V6Z^]MJ`M +M=7>4H.SO_P"6O26XUFYUM;:997@)(>63OCGS6YK_`,#7%O=NME8QS01("&1, +ML>,T2::XE0QNU*?T7;;6/A>ZFBM6U%!=%BT2!^KM5X:A;_AG-R@M5U-I[>U=+J+`,A7J!KSVA?$>J6FJW&E7]M>7:ROL1U7)`;YJ&J*ESK1] +M?BNXS;7$K1^H20:RU"Z5I<6H&*?,D8 +M*JX[_P#>:PKSXVU*&_28:8\5O'("S;<<4[OHPW"5R/?ZW*X^*;F\M=JB&7,8 +M_CFK$\EE-?\`^V8K4RS,.RC@&O,?!GQC\.:_K;Q0I<_CD0L4D&%8\UZ31[RQ +MNT-I&QM7=3T-P12M&T9<_P`EX:E?LKMZEC:B10?S.&S]J??07UTT>-2B&%W. +M`_>LV^CFFM0HAMKLQ8VNHR3^]>,B^*=7?6Y]+U;0[NW24;(+B*/"@8QR?YHE +M^BGDC%4]L](U[-BZ5BDY1B`>X&*P8H]2;5;4Q*OX=,M)^]7+J*\L?AV2/3U$ +MT\A]QY[G-1(UU8I!="6/.\>HC']A2-8MC6NYFN6DG3)8'OV%7;;5;BS],O$' +MB;/&/O63\0ZA!8+)=.#*B9_+C\UC3:YJ^H)8ZC9V9BTZ9\'>.KO@_P"E+[)< +ME>T>RN;B:XC)4+&W?![TJ,NRG#$,&[U2TS4;N\NVMH[0E8P2TS#C]LU;M?Q0 +M66:YLY]F2>E>*J[)E-15%FPL1<37;I.\TR=1YSY[5H7NFZ+%8"<$F>7*+N[* +MU>5T'XBL8/C^?3H3+#.UMN:.;@$AC6W>0+R9/:!2G.BZA\2JEK:-#]7+J/7[ +M)YECA6:V$76@&6P!GB@F7E^C(^)(KJUAN+M4>>W!)XYK)M[2VU.S$S6T98G` +M"CDY->DM]6L+[2S;L9;-9.@_B>!FJEE8OI.H1.$+6P5E#+VSX-3*FS7%.45= +MT>:U7X77\7*UN[QJ%)0-QY-8LNE:L)%BM8FFDD(`5!DU[:[&H?[1,C@20%CM +M/\FM73$G@O&EM8QZI7"M],_2N>?I\TE+)PS`=B, +MTB.^5U&&Q^]?9;9&A,\6HVZ3"Z/46&2,_2L?XB^&-+U;5H1:VT=J@7&U1@<# +MFN:?H(_1UX_ZDOY=GSPW2'/--CN,'O7JK+^S>QO["66WOW$D1*LI?G([UDZY +M_9Y\1Z4@D@D2YC"[@`,DC%<.]&9SZAZJPKY[JPE5+N +M%XY6\$4H:HNT,W26^M83PR1O"<);1Z(S=1(;GOBB>X`'[5YX:G&`7WKM_54O +MJ:'A75@:QE$TLWA.V*YKG![\5A/J:G*T*Z@?:$[4G$;-XW65XJ#[&WOS5:;4(D#99<>:S!;74BJTDC*5^E-337EJ]A+_`&/DY\^-0-.UUW4K2!X8/1E!^:0]5#>W^L7^<+\N[W5[HFU30(+1'BDDQG>O>E_(TA4\?&1XNVDFL[A7;<[K[F^:O +M;6(M==TI9H3Z=X%ZU?PVZO,7=BEQ*S;MLGNJ(I]2TTNUF(CN]S&JR1E*16+C +M&/'^)HRQ>B?3FV[_`.FD>E&_N7I6LJ[O'E=I)V9';]568?6G*-ZRM&WMVU7( +MRC@Y2\#01(U#*R_W:4Z;XF5/EIEM&R[8WW87YFJU;:?)>)*T5S#%Z8WX<]1_ +M:KE+0YQE&6S+N-J1MZG]VHN+.*2W_P"%NZ:L7=N)HS"S]:+U8@H9EH+B+=*C_`*?=3XRQ(5=HH;EU8E=O)YZ: +MUC\2ING5!VW!.SO6I;&*Y!2=%;=S64CK[NU68IE24;.U4;/+71<;2`R$P3NF +M6[;N`*E;/5;./;&R31$C@)4^RTNP_!W:V88;%)"TRKO+4NWT_3 +MYC'(KK&V0#]>YS3:#+4Y;$31W5G.&WH\6TY&7\2 +M7%K).'BD0MN\5ZGX%UF2UD@E63LV2-U>&70;UP\HA=U"Y8A:]5H_P]J"P)+% +M)&NQLX/>H=MFT(Q<;?1J?VO6\UJD/QSH]PH4[%N(2W2Q\$#]VJ_\$_&6BWLE +MU./0&HN,E']N:L7=A:ZI\,QZ%K`9(I-H1HNP*8;G[=->*^(/[&-5TY6OOAW5 +MT8C'N;+97O6C3DC",'">GXGVVSU)+W3%D2VM"91MD:,*._O\`4!!'<:=. +M8YXER8Y3A6`KX_\`V4:UJ^A:N^@_$Z20*['T9I.%8C_\5]EU=HX[>3,)99.` +MZ#M553IF4I.3Y/H&PCAGF;4/1A%S(H]:-ATYQXJA>6<.G7<-[%I=HSNP]0^G +M]*T;031PP3)$K](#`#D\?ZUH&XMKF-]-DC(RO1,!R#]S^]4XT$LS^CRWQ##> +M:AJ]M=2`"Q:/**OM7[5YS5?AV\U&[EM8YMELR\DGMQ7J]0N_]GSMI-Y'+E0/ +M3E'L)S_\5H_A8&M_Q<&]E(ZL?7Z4G12E>VCY.G]FMQIUQ'=Z5K?IW'J#.).1 +MWKZ1I44BQI+=0Q//#E3(@]PSYIIM+&2U%R(IHY.6.!WJO:QRVI>.)W*9[,:5 +M(VEF>3546;\7UO;>G8Q-"9"""!@5?M_Q4FS=%',K+C+C)'[5FMK][;2%9(HW +MB0;>H5QU26>,K'FW#K\W[U4T[XSLYIVM+JT*-&_I;D +M'4O/AVQU:XEUIH'AU.V=A+M&'`SXK:NM.6UMK:ZT^X:> +MVE)#NYRRFML2"2*/58(`K/E;J/'?GG(H$M+6TEEV/_\`IES@X/9&[>Y22"2&U6X`RK8Y;BK:6R)<7-G*NXL2U +MO*OT/;FDWL7Y3S64X2]MR-R9[C_L5+I&JRV_$I:C-?6"1QLT#HF5>(?J'T%4 +M[RTF.I6<3)^7-&\@^GBB^+'G>ZM+VQL+FX>4X81+D9QR:*U]0:];V\\^^6&) +ME5<]BV"0:&*2;=LK6^F^G(]R6,5Y&[(,=F`KFL[ +M.U-LN^T]1P,AMN3G%.CTS3U&1IRGC`#)0J&FKV?/M3T72;VQD1YT,P.=N>QK +M$M]*^*-/E0VJM?V6"RF0;AC&:^PKI]D&=ETN',# +M"H#C(I2HVN#^K9\A36H+B8VDD7I7,1ZTQCFME[\1JC+!@^"@K0U[1[/7M4-O +MI^ES6LA)S=^GA6[\YKR&IZ-\1_!^I(\MP+_3Y>,D[BF#YK.3:+6'W%XNCTND +MW,NHZ_%;7A00-GTV'?[4<]T;76%22$NJ$C"CG'UK%T?5H=3O0]FFV>U?NO8X +M_P#S5GXK^)K?2-0BU.");CU!L9`,D<`$TG-+9SR@UX_9ZJRN-%NK:Y:P38WJ +M;9@O<-YS5AK3UX?3:\*;1M&6YQ7E?AOXF^'Y8Y9(?3@:X8NX/&2:WKFZT^50 +M([N+U/=[JER4AJ+AV96KZ%IZ!I9;:&Z9?:TBY/%>3UF'X?M;1KF]TR&*0>U- +MF,_6O1:W\7:-H\/69;JZ'`5.4R#YKYGK=[>:]?&YNUV+XC'85ADRQ@=>#GD= +M='G=>V:CJ4WI6T<%JK'8L8QQFHM[!5QT<+6U':HOR\U:CAQC`X/?->7DR\I' +MMXH3C';,1-/4GE<8JVEDF/9WK76#DY`IBV^3],5DS=-&6+%?:%7&: +M#@+5TKSPO>EJI[D<_2AH:3$"`8.:GT,YSVJQ&A(S3MO?Z$U,EL.BEZ8SMHO2 +M&3Q5@1Y3TUYNPOYLF.6XEQ\J;NFMR+6 ++B*Q_"I%`T9]SXZJ-Q,WD7/<2LT3;MQI1 +M2/?U;E']5')/N;LUM;,S,S;5C6L'Y;.Z +M$N,3W-MJ&BZLAD.RTCC;@/TLX^E:T&GP0::LYB0B7V-YVYKYVFB:O*BO^$>- +M-R[6D%>O^#);^&XEL+Z42+;H2@F;C^*S +MNO=+CN)/5D4(7\)VJ=.M+>PFN)&MXYHY.QD'L/VK9RN)#A&$MGD6A=H_4:VE +M5-S+N9:\M92)#\0,?I)7N]7^(Y8=62!(+?T$^5AQ7A=4N8)=>EF@5%1FW&DS +MFFN612B>^MRS*LGBF.C;RRU2TR7U;9"K=.W=5]-^_P!O%:8C:FBP[`L."M.W\U@Q67Q"D@V`L[-G_\`K7T*[V-&).<_F':/ +MVI$4[\<#_`!K7M_C)8.\"I(5) +MVN*O64$:VL,[%'D9YU<']>*SI]&LI[*)YUQ17C?@OX]W(^G_%#"=68KZIY( +M/[U[G4[*`Q-<64RRPGVE3GCD[LG7\J5N>WU-0_P"-:[AMP!("[;W3 +ML,9_]J]).[V^GI))'ZT8;(4\G'FI8YI1E;)M-8=HUMXO1VGRO<$5*WDGJF+T +MF`[[\4B/3]/N9)+_`$Z9((Y.X8XP35QTLCIDUPDLLKY],!#GJI62ZNZ#GO[: +M:$>K`L[QGNPS0Z9<-:F::PEBE@9LF*4YP/L/\:R;2"Z>214!A8]_4X^IIYL[ +M6TE>)9F:?'93QFAHI-UIZ/31-HU];A9GDMI"2/HOWQ5.Z^')I(I&TO4K:61Q +MA-[^:PI(IKFV,3Y!`[CZU1@2^MK*&SN)YHF5O^ +,AQSGZTFF.$XK[V;=M\$?$ +MEU!)%JES:+-S@Q'C'BF:C\)ZR(HHEO+$2``#)Y/_`&*RK>QN4GBO9OB>]$:R +M<(T_?OQ6?KD6ISZVDUM>W_HQN9%);W*.*+8Y3FG;BC=M(I8;8)'%M@)')'S5Z1;9M[V<]R02I$3@^>XQ5-T0G: +MT'.DGV^G-' +M?211:G8H"LC?-X[UY_4_[3](34$;2X9)IY$VSX7*CC%1/)&/8E&37BK/7.W3 +M!K,,A%C.H2>+/M/[5F7NJZ+IOXW3I[WU('S+;[GR0Q&AR9-OH]Q/_`&A2 +MR/!;6UI(WX9O39P/=]Z8O]H7X*:>X;2Q+-)P3Z>G'1)C*YRK)#T@4>H_$OP[JVM65S96 +M=Q:W+-NE;9@`@@'->4L(H[8LR8,F._TI@>+TRY&%!Y/DTGZN8/\`IR;^3/IT +M>I:3>7J:/IVKR"Z:/WB3HR?'^5->XLVN;EX=;E"6^&E5Y.>%\?X5\K40))ZE +MHZPR]]Z<$&ADGZ4W) +M/<_Y&NGU'X0L3#9:AP-8^JW% +M]+&D-JJ`.-KO]J/[I_Q0_P"S4N]'U_4O[6=#M#)96=M.8HCL$NWI(%9T7]J/ +MPQ/;W%M<:=>W#+R-T8(;.>U?*K;2IC:B.>3<#[A6K';PQJ%1!@=C2?JIF/\` +M8U_)EO4]2>ZU&6?3(AI\#L2%CZ6Y)-4"YV8ED:0C)RU%)G=QVI+1$Y![=JPR +M9I2>SLAZ==O96F`*LD:[/TD4<379)474V3GG-6?0Z]V*?';XR`*R]R2Z-'Z> +M$W;156%V8.YWGODU92%<$GO5N.`9VXI_H`'@`FHG)LW]N,'2*2P\\I1HG5C% +M7"N!DC%&D0QQW-9,V2*OI$OM`XIR0X._>B5!N&>U +M/*$YQW!HPF`?K2"]E_DU#1C/':D_V:70E$Y-_\5(6[$"/OQQS1&/(^U.'`/34DHS*?TM7 +MO2V?*.4GXF1EUZZT8]3S&JLOM^:NO+)HHI&PNVJ2KN7I]M!"Q<#9N-0@]';% +M61-*[,SJ\J+1956ZEZ?Z:O;M+MT_*W3+^DTG(G+Q<3.$1E_WB.+U6]VY:N:; +M=26-X)1W#;MM-FU-9)%6*$6Z?T+0ZH]FR?[M')N_52D;PR04?&)ZB;XS@*_[ +MA%*RJBKMN!C:VWFG2:Y;7/PS)>O:G\<0HD:!#7>SLFZB,DX@DCCGDCB; +MW*K=+5/#B*4I\)2/2V_QC>V=DT5O$DK;FZ[@9VUD7^K:I?Q-&)G'5G$+5L:) +MI/PU+I<5Q<371N5?;(&/1BO4:19Z/;+ZUM8,T;[0D@7H_?\`NTN4?H?IU*,/ +M\QX"+3-1NL,QVK(WNFK*US2[G3[LP3-&T@^9/;7T'6KB%=1>&&2+:C=2_P!5 +M>'^+[DOJ3.77T>U:MQ;B)^HQ1=(V_AU_]U5?_`"UZ`%@-IKROPM)^0_\` +M37JHCN4L?E]M5C-\W&41JC`W#N:=;(JC=CW>T4J)_P`Q6V])S5M.AQ'71V5#?RR1/O@;T6<_8BNGM +MD6:-%!2:.[,61VY%#0J=['7922U6;>(Y7M(B/N4/FLKXDM[&\_&3QJ7G?TWP +M/)Q29K:9H;9;B=][^K$1N]F,G%>7GU*^CCA-LY:9HN_]5*;H(K)>BXGP9J]\ +M9Y;=8X@&SLD&#_>KZ;\'Z1<6-@K74Y8,?;G@PMT,EHQ()"D$`=R*S@D]FN1SCJ9W^S=$EN/7F023KD&054&FZ/;7&Z& +M2Z8D\KXHK&WFNYKBZP\%I;NRG/&3G%.97B66YV9=L*HK4YGC4MC1(L,2K%`- +MO)R!S1W$Q#<$E=G"_P"M(,FVY2VS^<%#2+]":W8+#U[8/%$?53CD<\>!0DWN0C@^*II+H2DFZ8C2]1%U?%9/3==P)(^AJS_:+`EE\ +M.M\1Z?`[R02%72,>[Q_TJ)5T:SGMVM8W]>Y4D@>U>*V]$N7?2'CE$$JDG,4G +M(SXR*37V*K\4>0T>*6Y_":C(]Q$IC#F!N/'D?S6E<6\ESH*VRNDD\X:2-N^, +M9-7M6NIQ<0336L449S&JQK@_S2H[>:%XHAMCM7)C24_)GZ&E=FG%7XH\W9:: +M\GIVUQ(OJAB!N[$X\5NV&GW+F57W"XC@<;#V/GBK^GV,;'\)W#VY`]6-&Z4/WK+UWXWM(M0M;O2`[2N_IS*GL//77-!::=:V]PWHHJCM6O"0I,@`)88P?%& +MT4<4(?(R2,US3RR9W8\&.'Q.2WCM[(>2PXH46*.!9F!1I,@?N#6C/&@LU;SW +M%8.HW)9R#[5Y`%9\C51V>@L=HMVE8@D>/H*I3740,EP_?&$%9Z3SM%TMB,CG +M%5)Y7D5N@X[@&E;8VD:-G?J;Z3?VX&*1J=ZJQD9*+O'-9<,CAWW?\0_2J_X. +MXO+C=Z"-45\9%6(+%(QQ&"_UK +M0M;49&5XS0%V9T%G+)<>O-*QSXJZD2Y(]H2K1B)`4#!!KO08FG=!QY]BS@#@ +M>:':<8/;-66A&,#ZT0BSWJ'+8^,2FR-G=CM1B'=5P0\?:B$7&WQ3;17%%41` +M-N\U8C0<]/%-]+)YIH0#&/YK%O97&Q(7@KC^::%`S1J@!'^%.5/M2L=6)**0 +MV>WTHO2^E,1!N^],"\@4K*Z%+%DX^U&$-&%VG)[T8&2>>U*R9;8MQAJ(`&C9 +M,MNSVJ0N#1V-)=BR`.XJ-N#5AE&?KS4!#@FDRHTV)VX/W%2%YQ3MIQ]S7$`9 +M(HL;0D)UXJ,]#)8@9S]S1%3@MM[5.TG-3R&*CO3*H_,MA$WK +M,K^HM:5Q>K;-M:'7?:OZ?TM5 +MR.5HMR[F_P#XU;2WMIK9I9)HUD7J:G=]D3Q2:XQ,]'D565965?T_+5BXU35& +MM8K2.[G@ +@1=JI&>FH_",S,Z.OI_U4$T3*VZ/VM^FAQ!I2A16+7#*K-(S-O\` +M=\U9^J,_JC<]:3)M9=W36=J?6WK'V-529BO3<5Q/0?#$F;;EOZ:?:J]Q)N=@B')7-)]-GZ"BX9<`?XXI]K"YCDQCU7'1G] +MZ=_03[&1P%K4*QX7*IGOE'KL0P3237$>8#(ZX_OI1R\W0!D011/)_I4R%+R. +M&-U9%,L1)/@6VBAPS(B_ML?_XKTWP[\0Z?K4[J`1(L +MHEYK)N_A.PO;HDH5D2>12#].2*P)/AS5+91>:9.80MJTK#.-QS2G;=HM1A-= +M[/HU_IT-Y=*R."JR.1M^IKQVI?".JQ7L26,D30]7N]PHK)?B734EO)9U;TUC +M8H3WWU:?XU9M26U:W:.17VRX7VEJ+;[0U>'K9[+X'M)AH7^S[B5&N;7(P#XK +MUN@Z/(^H175S*Z6L!"A0>9"?]:\IITN-7;\#MMPNX# +M"Y\'GFDE](C,WD?)FOJ4^FQ63VRI'NSDH.^?ZOO7EFBGN=5@MK8%D''\UF6B +MRV\MR9+B2229VQ?/(K1O=1N(Y3J5O-$L*XW1`_]*H0Z=;+^/AO9WBO)9O4E8G!Y.:H +MWMK)J3VUK8YCM",22GYL76+C6!,)5].TC/\`S_\`9I5\@O+N.Y7/ +MHH,JA[5%Y$+>%8XBBVPZ=OS<"IL45TMDN)&2)V`)!YQNI"E&D`QA$INIG#*! +MD+'XYYK0A-@]G+=SSSVT4F2"#CM]:5X':F]%\EDV-M1.)8KZ5_P`5I(&2YY(_[S6E>SVMI"]G?NOX"0EH +MICX./!KSFH:W;Z=.+?1RLUB5*M$W*CGZ5XW7I=1U-8;=[N001=QGCM7+E]1& +M!TXO3SGT>D^)?C2U"'3K2$-+!)T7,8\`_6O):J;_`%!S?SW>XQCFF +M6-EZ(]0QY7N`?-.W/(K$H`03VKS>*N:?9[ +M;=[@IP'INEF`">XF?MQDU;GO`Z-'''A">0!7*\GY.]8JTC)DPLS)X'(%;6FV +MWX:'U67JD\5D&+?(3G#Y\^*OV]U-+,$<](I.17%](1)MAN'!7`[C_P!JJ33- +MZJAL8#U8OX9I6:3/2#2 +A:R32=0VX.:G_`*7'6BWJ%S*RJD:=`K/MK12)';); +ML!6O=P[4;+KN!\=J4B];[!D#-6B9IHSW_*5[=4(P,<_6@>WDFW?(,5=C4M.S +MGGG/-.E0DX4<>:JR3,CLHHAD9)[T]X$VER!]:MQQ9.UOU4R2'&X>*'(:CLIV +MT3.S#'&:LO&J<9[T<86-3GN>34O$9%RQP!S46:I`E3S4E1D_:FJHVU#+@D#S +MQ4\P2_(HJF>G]%YHXUZ2?K2;*K8`7I(J3'S]J:$)>B`XQBABK=`; +M!D@BI4!FW>#364EL_P`U(3;QC@4A;`53_A1+G!^E$JG)IB+ABI[4FPE&F"%Y +M&*['4*:B8/WKE7@F@?1`7<23^]=LP2/%,0;3@UTF=Y`[5!6VQ1!VDCO4!7#9 +M/;FFLO20.^*8HX):@?0,:X_:BVG)J>#3`..?%5^B7V*VD8)H67_$T]N<\=Z@ +MJ.:5%W0HKACYP:DY[^*,+Q@?M18RO'WI$RVQ#*,'%1LY!\T_9@Y\43#!_:J! +ML_)FW[E*M=2JP_I +MHE$REDEDEX@+8)ZBLS-M7]-/:U7;N6-6;Y=M6@(XV;JZ57YJD[O3]1%;I]NV +MGP)Y\I>1AW5J\,*JN[J]VZJ3*GN;=7HKN%9X-DGO_IK#O8V@N&C^7^JDURD* +M#X>,2))6>)EW,O\`=HK65HRNY]T:]6VD*OJ2;-VVF30M%<;6I=E\8\N1?>XL +M%*2*K2.K-N5O;65K]XMWM$<,<,:_+&M6_2LXF_-;=_\`ZZR]2F20LT:[5JE) +M`E.,B]\,2;;AUKV]EVW;J^>Z+,R7FZO>Z8RLHW5CC^1V9%&79JQ!7D57W8-6 +M_39E2(?XU45UW!?&ZM!&:1C%&W5MXKM1ROK5C<)HSG] +MZMW=NDMH]PN01/$B*/.!FBUST1JMPH0^H;;<<^12)KMTNWEB4;!.&2/[;*K_ +M`(83WV`C2*XO)E.&>4X'D]J:MNQTUBQV2?@P`A\$F@N9V-LES(N&BMR2/&31 +M7HN)Y9Y$'M@CCY^YI]A%<2S=VRNC&MY=1O)L!]+G[^*I?$%C; +:E9W44$B^O'>ID>>0<4VK5%MRB[,O0 +M&O(+BWN'8RVY)7)\$"O87*WC,DUDQ/I@Y3P:\MHUY<:%%-;W]L;B#\4X`49* +M5[KX;UC1-4O0+&55?MM8_P"M9*X]E3<9(/29+.YC'X]&5P,%0.:.\UJQL;>: +MXTZ+?)&-ZMCZ!G_"H-)?H2T<4.FB?4 +MV:6\((V0\BBLDM[I5*+.P1@V/H>^*3>O:-J\MY=W*B)\M#'&>,^16;+?SW+" +M2S+6ZN1D+QGBLLF:,.V..&6343>U+XDM+:!C,LTLJ8!0<@\UF76N6-S+,&CO +M8;9TR8H^!V^E8]K:R];R,79I"Q+?3)J["F';(SN%>=E]:V]'IXOZ3*U98T:8R-W-+E@'IB,J":QL[>*JC+L[= +M9[,)MPK\G]ZNB'T[E@<83Q3X4]/"`>>U=.NX$KR3WH;!?@S77==.X'G-/6&, +MSJV<"K8AP%Z!DFI%JQD9R!L`IMCE)(5=)B,!<;>[YHC$0V\8`/%$Z[W^B@^: +M%Y,LP\CBFM&,G]HKRJ6E=3C:#BN"8)VY'[4[!`P>V:Y@?4)'[U7V-JW968"% +MC]#_`*U,8R>5(/TISH)&!8#!-<1EFQW/UJ'^A-"Q"@<5.W))Q1D8 +M(1?VJ67&4!X-#%)JP%4L>&[>:H%0)'(%%(O(^E%MX.:+!*\TV)6F +M*`R3Q3BHQD]J@+P31')(!H+8&S!)`[U)'('^--/)^U1M.3CN#0R>@,9;'G-< +M5.TTS:220.:D@WIID +M^D:K#(QD,.SMO^7=2DPQP2RG,ZO +MZ;/N]RUF7.QI-^]=M*1L\<9$I)_S5TDLLC;FZJ*RV27:Q*ONIVN))8WOX3;M +M([4<2(0C_(JM%+LZNFD7B]/OHFDE9MN_II$Z^ZE(VG'C(ZS?;.M?0M)??"K+ +M7S=>EZ]O\+R[H8XV;-9J7&14HR/5VJL9!GVCFM6.,;]R'&\$5D6$R"01N?M6 +MF)?_`!?D7A:[4SG?%%J-8MH;;OX&33)W220K&O)/8>*K1PRQ1HL;9C/NS3[; +MTHBSK[C_`)UK_P`,I?IA1K#(O6./4QL/V-87PNLIUQX=N8UD`_SK1UV\.G67 +MYF&EW[^CW<\UJ?V8Z5Z:W.N:F"MI&S28^9B.P_RI2_!./R=,U_C>6"#4P(^' +MCLPK9\DK7AK>\U>607$$1EV.GJJ![5VUN:W97&L:E/>22R)-)*[(O@)S@?X5 +MYV&_U;09/Q6U)(9`NX?4?-3;:*7":\CW-E/;:A9E(@KNG$@/BMF]TV5;8RQR +MQ?G>`?IP*\M\$ZL;R66\&D3PJ['?F/I->N-J$CD>&=Y(0V_!/*\U]1@V5&.1VS7F[>>S@ +M@,;7#&4OPLA_TK?TG4Q=:9+`@4;UYSW[^*:DR)QO[*6M?"%U9V*W4,@N87N/ +M5D(Y/([&O&VWP_(DL4MJ+BUFEF=LIQ7U?0WG>);<3;E8G",>#5C5+:6Q>+%O +M$R%NY':K4A*"7?1\TT#XI=_6^'OBTK'<(66UO!\R#MS_`!_G7I;IB=(@N,_B +M58F&7;R/.#_@*K_%OPCH^O6)2=3'<;\Q/'[5\\TFP^'?BG3OA.+2[(I/<1NJ +MLS\[@"4MLD@7J'G%)U)ECMWL)B'L[F$O$?HX[ +M4RT2\M)]-TRYTZ%-=\30*+>Z,:,4M)2$QX&W-3/41PKG1@6]M$$( +MEZG7.,^"35J*-0`N`"!XJ8`""[<&CQAOO7S^:3V8N,*6+9P!4/$`6 +MR.12[+3HJE-S"0'C%"\1:0X/)JZ%Z=BH`!Q7>DB'U,Y-#')E!(I%;G.?K1P0 +MX8@>T#O5ME/`/TH0"6!Q@"DV33LK,DGJ\?Q3`-T9!;O]*>XY!X!I$KJBF-1R +M3WIV#7Y*\ZJSMMR*`HBHQQU'N:-E(FV;QGR:[(8,O@'!IV2XOM`! +"QYX`YJ9 +MU"X'@TP$-GZT,Y5IL#V@4F-IB",*_P!?%"@_,!QQYI_0H)/)J.2['QYICJ@& +MR7(XQ0R(^[CFC;)=0!R:(*57J[D4F6T!$I``':G."K8!R<5$2[0?K1(.232" +MR%QSGO4X).?%20<$D<5.3D+XH;)239#@@<=Z:5Z@*YEXSWIFW+BD-JM`JN#Z +MG\4SZ?7S4$$@XH\8'-)[&]$A?VS4J!NPW:NC.&(/>I(+9QWJ1/LGC.[=Q4A> +M:E5X[34CAC]10^Q((#I`/;-05V_M3#C)^GBIP"N/ +M.<4F#$`';R.>]'GJSBF#AB#4`#&!WIW0G3.&,GC@UP_ZU(8`XH\[YK+N]?:1&V.JA6^;VUZ\3PI/^/V*7X3O&TWU;C4+>)F9N%? +MY:R;K1KN,)#;W$5RI^C;FKKS68VW17=T"%9E;TFK/C^+5M4>'3[<'+>]UP:? +M+R!7'QDC:B^'[N1XUDN;>.&7R37+IV@Z9<2&\OFF";A[MRUX^^UK4;CI>4HN +M[IVM6?)-+(/S&=JIIR"<(1/H6H_%UE:6KP6H)BW=/ZJ\]JOQ7<7430HK+'EC +MCY=U>?V;O_-0R!]M17$SR16,F61F9GWTMMVZI>H*DN#FKD7F\?C$L64C0W(E +M_2U;/QHDC_A-1*],H",W]6ZL!=ZM_57M?AU8M>TIM$N2H('06^ORT\K#P`PY%;QV89$>` +MUTM+K2-.S>AM';_EKW4.I+:?$T\F<&)>6 +M)S5SX+MY%03SL<*H&/N31)45&CKA[RXEF2TG6.[C(#(YYX&*3INE_B#'::KO +M4'M_[5ZZ6PMK:;\?)"GK3#=OQ61!JVGMK"1R21R@$%2.>: +MU6V,JRW)8'*G(Q]J\')+%'"KN0K`X#4W0]0E?46MY^+B(\'PV.V*AJF4XINC +MT5O(0DD+KT$EE)^]5[C4=4M8DABE82ALQ$'W#.#2YM0$3`X&$SN!\?6AU0M% +M$DF>LC="6["JNS/C79KV'Q/JT*@:G:+M+XCWKSBK<>O_``_K+WNGL%AD;(9E +MX!)'?_.O(S7MY-._.:XO49UCTCT,/IYS>](T)XP +MMS/$A)4.P!^V37!AV^:FY!^F30L@."!W/>O'G+D[/:QQXJAH`*;B?-YHF&,N1C-6+@+C:.X-(G#.>_`Q +M0_T3(!@,`8[5+C"D'BC;'J$XS]!0MVZO%)A]@CN/K4N'+G'8<5(&7!_BN)PQ +MQ0QM'+DX"KYI_IH`#FE+D'@4Z-2<9[4A);!#4JHP..:)L;S4@=1&.]` +MN2O1,`'&_L:9@*S$?6E/GQV!IW#<#O0%I]A1CN#VJ'4,0<]J(DCMVKI,WUJ&Y+#/&O?FK> +ME:G<_$Y(\MM;W)37L+EX]T:LR_TUZ.SMI=0=7?2Y +M4;I[)7J='MM+ME_.AD61F[;>FFN+"4^/R^1\JEM[N*/U9K:2*/\`4RU%E$+J +MX6"-^IFK[2UCI]Q;NIB22!UP-_BLB_\`@[0;U1<6;S6\PY4QG`K10@/WW''O +MY'S75-+O=/Q^(AD$3+N+?+MJ=)OI+*X26%@I'57URP^$;@VGX:\O([BWV8_- +M/7MVUC:]_9G +=3;KG2IH4;GH8\<53Q\B<22?*;,;5=.3XIL/]I6"J-2BV[U'S +MK]/[U>&=F$K)(C)(ORM7N=/^'?C30;I9E7<@]P1:T]2^%E^(!)??A6L[Q@P9 +M<82J<&E3,,J<)W#H^;Q^F[U:L8(XK@,>KJ^6MR\^!M?AN)#`L;1[ND$5H6WP +M+K`MHI'*QS@;<-Q6?MY/P="2^47$V?AAK:>)!$K+)_57LUN=0MY8DM(K%TR- +MRR=Z\Y\)_#UW;3YNE9@&^3Y:^G6L5I^&=VLD9=ON"?F`TUC:^1+GCQR[L\K= +M:7INJS-/V:W98+K#216\DT.<@ +M*,D#-(-Q^!_\`BO275KZ][:W-M/M6]BXFB;OGO550G+RV.T2^COOR((9HE?.#+P3^U;MO:F. +MP-O<0M(&X63'(K)MIEL9(Y#`K*IQR.5_:MA?B2*WD>*:(%-G!(X'[5/0G'B@ +MH]/U*WDDFL;D;"?9*?%`FGQ7]V9F8QS]B/'-6)=?M[67U3$'!';'84CXFU&. +MYLH[FS"1HYSZD?&#XS0YJQ/&VMF5KT<5E#-)>#8L>54/V)![UFZ=JL4^C66J +M;/2F9LP%N,G)&*V)$M=+*\ +M+;XSPZYSD4I33+ACE>SU(?,LDL\62P&X?8U9N8A=:7!8S2D209P^?I"193(DOY??C%,U-Y(KV6UW_`)D).2.V/M2Y)%M7H=-&B3,%8LN3@_R: +MZ``,3].:!,[>>],A#D[5')KQ/4RO)H^@]/'QV-A;!P1SX-6,W`[4BDK!()?`\^:G`6/)//TJ7Z00.<>:Z11C>7&,X`H +M97V"_4=^1R>U=*OI%U!R>V:Z)-S@L,`&HN7!=M@Z>^::);W14E&(B6[YH`.L +M9[4R<[SO/`/BB0;CN\]\5+-&JZ(V=)?'')IB#"JQ]Q&:492Y>-<*(*""?-#L +MS$.V:1::Z9+<=EY%01W^O%2PP2/-'&-S&J!M6<&PW%&7QCGB@8#:2.]$Z@)D +M_;%9V)Z9/_B<_P`TU/>V>^ +10J-Q/TS1#)7@\=ZY#SQ]:8WH-.DD42=R#XJ3[LCMW +MJ2<.2!Q4LE,AL`$?2H;.>?N:EADD>#3-N6Y\4,I.GL7MY^U$PZS]^*&0X!&> +M*-.]/L*L(J"1G@9YJ5[G/U-2PY/;`KCC#'[YIL'2[#"9=L>*+<"<>:@-D>`2 +M*D*.XY/BE0F[!;NP\9XHE)*8SCO72@$G%0!@$=Q2`8@XR>_>C7@GZ4L$\@^> +M*D9RQ/>K[):#8CU"#SS7-RV,8!J#Y[9HCACQV\4G13!'M(QSG_K7(`34$D$U +M,9Y-,%^3\3,HXJ6&Q:[J;=L%&*!TGMKO>VQ:G:_5NH.O=1S"9M: +M=!H<;^MJ4L[!1[8OTUMQ?&6F:=`T&CZ%92LK,;?U?JJ=OWI28O;X9 +M+C(WS\9:RUVT^(HM[;MB'*K6G;?',DET$O;6,)[=RBO&LO4UX->I"P&&.Y@=-AYP/%?!4WJ[.K[6J_9ZSJMJ56*\E*K\K +MMTU<V*1J-O;7"%!ZF2.2.^?M6:I>WN +M#AQ(O8`U>CNY#PD!+$%N!338GCX],9;_``JS1!_QTT",,Y=\9HK7X0DLKY+C +M_P"H9I%SDQ^KTXQYJ7O;IK<"=90H/&[Q2RXM[5YU,TTQ'`'('-$FV)<5]&W/ +M))'&BP2E%&!E#W`^M+]+3[O'J@02$;ORN,_O65%=SD)&0"OM/[TZ&]LK*\$T +MSJ^UNWVHZ-E%/:*>MZ9:2-AIRT8?>C9Y'-5K^V@>S0AP2QQFO0RMH][$S2*\ +M88#&WL16=*L#2&.V,8A3E6D[?S3;79C'OC3//3*=,O!J,$K[\`-'GQVXK:O; +M+2]9#7=M3@'CS7E_B/5+0F>W1UDN4.U67MN!/_M6%%?7RS(PE.T+ +MBL,F>,3HCAE.5(]6]U<1:A-I]\Z%XW)WCL16C:W$,DPW`2*AW8->"OWN[FX: +MY:5O4?CW?+5[1KB\@EW[@X#=C^FL/[J"9UKT>5GT+\-9WBO/N,((VG=PM>9^ +M'H]5TJZ:PO)H+K3NPYR:G6-0N+^U6VR(EP,^GQS541R!"HF<]\XP16-<0S2Q[3(Q(!P:JZ=^*M78>L[J[<@FM:-L +MC]S6&7U7/HZ<7I6OD9.COJ%I*MK(QDBW] ++GN.*]7.Z3W!N'`W$8-9J",DDX^ +MN:L;AR/K6#]1)*C?^UQM]%X'+=L`T]2B$$'J-4TE)'/>FHXR3QFL&WV=?!?1 +M:4Y]W`S30P#;\<<@"JI?:EEQM/>H.`"PY) +MIT:Y<+DPXT5&8CO]:*?)1L=LT2$;B<P(R-@!';FEO[L]EP14IC:YSR/%0RDYSVILG[%J"&`\GO7$D*`%'12'\A;(?>>:E-BID>379/(\5##EQ\HH902]EQW\TR8;D)'<&E +M`#;G-&2>1Y-0)K\G(```?%,`Z@`>]*(()YYS5A``P)--[&V@B=H(\"H!(&/I +M4R#G'BB0@Y!'/:AHFU0*DEB`U''PQH0`L@/@T>!G-#)>V%N()7/:F#M]\FE- +MC(/FF;L*".^:YL!CAN +M312'D;?!!I9(W$_7D512NQZ^C;**23IH'V4'_\:]<^=GBA\1BYW5S>YJZE/\U5P"$.,!K> +MYZ)OFH%^:NZ^JID:QQ2B2?=U5S)7;>NFK\WZJKB8W;7S]:C`H::Z":3THGWFRU+2M05I+74((ROB5\$G%:X$\' +M7;:KIWJOC9ND^M?G19)5]KLM,6]O5DW?BYMR_P!54IS78IXH8^S]'E]3!+GF+&50_3ZU&GM:V-N98U0YSA!V'@8K;DCE<>2\6'=S +M/;1&>?E0Y")'VVUX76OB:]U6(QP0/9VBY`!7:Y7;YKW]O;)/E[AN",X'850O +M=$LKR!XHU`;!Y%3).2T7!<9W(^>`KN+;N?K3XG7U65NV +ZH^(M/N-)O6CD7=& +MS'8?M52*?<3]:\GU&-Q/>P3BUHUPZ]C5RUD7:5'<>ZLE)-P_JJU!+M[=VKD9 +MU1BC8R2/O3XY!CV^:SX9&;"^:LHWYA7P.:79LJ^S1AP6R3Q5E=VUAOJE&W5] +MJM1$9()[TFR:2Z+D.-I\@TZ,YW9\52BEVN5\"F(Q#$9Z:&06BY#X'FG`X/[F +MJ?J$O]Q3HW!;>*'7V)Z#4]7/M%$6SD;N]5Y).H@#@DT2+DDDT%== +MCD("@D]A5B$-L8D@$`XI"@%0,#&0CTC]:.8G +M>2,<<4M@0J!L/4WC@ +M-VH7RBSN4@#ZBI`Y..]5E/`.>,TX'#C!J69_8R4C@BA4L<8 +M[:CE7//%!783GG-$N2!2U?DYQ1!MI;Z4=CJABDC(_P`Z+<.V/WH5 +M8$X/:H;[=Z0.VQX.4+CN:'YBI\<8I(<@%O&:(N2V?O54)VAR<-MW<`TQL'M^ +M]5P^6^]%ZG5]JEE-LD8J.QX_:E[\C(KF +M?"Y%-A0TMSNSQ1,V1@D55]7_``J5]JYJ@]VKVY2B?.Y +M?+R)7^JNQ]Z[Y:+:?M4F4I@J>]X/FOGFH26MDZM%<1N)%Z<-7F99I&7J9FI4FY +MFJ)3&W`]ZQ2-Y9#TDZ<_-5Y93C<#AADT-#C+ET:8/)-'NR?W-4DF79M\T?K<_L:1IQ?T7Q(!G/< +M#%-MGY&?K6:)U=:DM*#CCO5:Z?,YP>.:=4C&[8F3 +M+!CGSQ^U*D)+KSP#FBW9%`>XJ*-F&"N`!]:;&WYH?N*2N-V!1QG*J!0I%V68 +MVRS?0&IE90^6`W&H`VX'&2XD5P;*9J,]6,\ +M5+&-WCTMOD<@T2\*>>359^'..U&7Z?VJA/;+*N>Q/!%3N.>5I((Q]QVI@;.X +MXJ6%4$W).,?O4%N,']J`'Q4/VX/%!5VQT3D$YHV?DXJL6...:EFRN?-#&]#@ +MW)^AHP<$Y[4C<,`9\T8//?(H#H9D!L^:D\_O2F;&0/XJ5<%3SS2;'2#SW-<7 +M/(%`YX.#2@<]^],3=C]QYR>#4@Y)'^%!X^U0I%%BL<&.[[5#[QV[4HOR&_R^ +M]&7XQ]*78/QZ#5N#X-Z4-P>:!W9^3OFV5-U(^9Q<80\B&ZJ+Y]^*`'FC;O1)1D&/ +M,IDM\U+/NHJ-MG50=&51GXQ`"_M3=O5WH7]S5(Y1JLSEX_XQE1MZ:[]/ZJG% +M(B7*/B2JK1]/WH%/-#(7V\4Y$RG'B/&W93(O=2!3E[-5?(M1XQ+'RUR^:!6& +MRC_FE)R,93)7W,U3CYZ'/3_=H]O_`"U1KRCD(ZOFIO +MMJ[M5EVT/I_+4FKCQD=;WFFR7'<`UDQW.S#` +M\5SW*F"#AN36%!<$*`#QWJW%-T`@]J&F%FPC=/ +M)YH +T<4]91MW9X'BIJAIN]FD)0%8^15B,\D8K-CEQM_SJ[$V9 +MEY^U)E&M$^Q,_:J$[C+G[TYGQ&!FJ,\G20.^:&1$:6&T'Z#%"'`49^M+=ND? +M2NE\_3.:3*=#"V925(Q3(V()((XJNO&<^:E3AV6G079>5@1G/S?Y5UP,N>1V +MI`?I%3,V1G/.>:JK$U3M$QL`V/%03RP\9XI1;$A^E=(YR3_-3LFQ +MHQ.#C@BF"3"FJP?/!J2W4?WI]E2OL?WDX\U,F`<9I( +M;`/TJ=S%L&D+]C02K%*D]^*4[=SY\T>_.3C!-'(;H)NQ^HJ6;@TLG(..]"YZ +MC@\4>0#6U)]0YQNX-<9/-#0TTN +MQWJ8!%0)!S27<"DO.J].:*!T^BX[`DG-J>O=8"LLJ\UP(>'YK +MRMQ?W$[%5#4'X:XF;64/D3MZJY/8*YAM +MHAVI$1RRY''O78J:GLE$AY>,O(%N0U%CI:A7IJ2<-08>'RD-[48YI:\M_3NK +MD7'%5(WA\O\`Y#YW4X.6?I%+^;^FFJO6U3S,0ADQU-3+:XFA?<&Z5HF7BAD3J:B4 +M>08^49&S;ZZ4BV/5^TU.&9^&Y_JKR4B[=U+S)')N5MK5E+$CJ>91/H=M?+PR +M]N*T[:YW8KYQ8ZL\;;9O;7H=/U16(ZJQ<.,BEEY(]FDZ8'/FG^IR0#FO.07R +M[=NZK<=WWP>-N*AK9HFST$$V4`/?-7;:?$N3VKSL=TNT'=S5VVNQCD\U#0-N +MSTCRCT0]59'R&QX-53=*UOC/%09D.=I[^ZFU8EIE]SD9&,XHB0R@^"*H)/T> +M[[4PS?EC'CM16BGLL[LY/;O0MDR9!YI"W"X(/FN,X!X[BI:+;HLASM(SS3\C +M)![&L_UN"15F-L +Q>!P:&Y?$@SVI#/E2GWIO0,L! +MB",^.U-)`5Y,\=S5(3%FIPD!&`U5= +MY/?N,BA,HV]^12:V)Q+2G!(IC-D$_2J7J'U,@T9?"N,^>*8.'VRT&R*DMW^] +M5@PW'!I@?/'TJ:*:X2`$^,&DT5UV7MX"4MGPV?%5S.`6&:1+<`KC/-)H%(M^H?K7&3/&>163+ +M>X)YJM-J2H20:=&CC9M27&&[\TN6[`!&>!7G;G6(Q\W-9=YK9&>:=F?MR/67 +M&IH,@O5"YU5`"=]>-N=9+$]557N;F=N@-AJFV;J!Z:^ULC*HU9%UJTTC;4W- +M5>WL)YEZV;-:UII!#!BM6H-D\DC)5+J=O<=M7;;2G<]:UOVVG*A"[>U:,=I@ +M@8IOBC*4G(P[33%4#*UI0V2(<;>:U([5OIYJTMIR1]Z3G8VK/S&_MJ6[U/\` +M>KG/3_37N2B?+\_]B6]^RI;YJ%L[FHF[5,C:$_$[YJA>5%%)_P"JHC]VVJD8 +MY?.?$YAU-4N#Q4?)4O\`_;2(EA@2H]U3@UW]==\U*S26+B$!U4+>[IJ:%J9& +M7C&/B2?9_53%]K5#=JD;OMMI_(A?,YJ@E=O]55XDRCQ"DZFZ:61_Z:)1U;:ECRU% +MA_\`4A+>]J+YFJ1[ZFLY&V*7N'/YIH;J:E#W42]JSG$WXV/5FV[J/I9FI4?B +MCC_]7S5G*)4N4QJ]3;O-24W'=4+TM1HW"T<>)K\05C'S5*HNVF5#>TU/$8IH +MEW>V@:V7;_55HKU4++5<3.4N93>T1J!H9T9FC;JJ_M]U82VVLW +M4V*TAU1?PX&ZG6FI*X*$UXKU)%Z0S4M+NYA9MK?W:3QR* +M4MGT6*Z5NK/'-.2X_*'/`KP4&NM'L5U9A6I:ZU&X*%JS<&;*5'JO6#%E/>I, +MF?/)K$BOHW?=OJPEVN3UTFRI23-J.4;L9IL-P06!QQ6-%=+N&6YIXG02'J[U +M,V2ZHU99M\6<:% +MIR&8_3FE85]FNTJ>IG[FEO("A`\50$V["YJ7F4IN^OBA]CHMHP()SQ1LVX#' +M>J*S$`@^:-)E&0:;5%5988D+W +H6X8\<&E/+R%\43R=(P>:&[)?!Y_:FEP,-GO6?ZRI\U`]SP>:B6;IW!NU9)N]K\M2YK]0#AN*+%*5FLUP`-PJO/=_UUB76I*H(#<5FW.J +MGG!I2D7Q3V>BFU#&2#S5.?5EW'KKRUWJ1.5W5G3WTC;EW4/DS51B>GO-6!;A +MN:S+G5B1[JR,W4K;0K5=M=(GD(W^:(XY2!RBA4]]-(=J[FW-1QVUW<-_36]9 +M:,H/MYK:L]-C48V5HDD8^\SSECHA/O5NJMJUTB-%!V\5NQ67&WR"UY[<4 +M.=:)W+LS+?3E5N$K0AL^GM6E':X\59CAQV%92DPX[,V*TVXXJ]#;+GM5Q(.1 +MQ5F.(`9`J7(OB5$M%_33A;8&,-LI7R-4K[ZAOF_ +MJKZ$^4O$,]VJ&V5QZ-SM4/3D.7E,EF'54L +M.EJX^[?FN;^FH^1?M0C\CA[FIE"ONJ:)1"7E(ZN;&:[-3\U,)0@3CKKLCW5W +MS5+_`#4_D3+%&(1^9Z%/;4>XM1_.U'R,I?(:/_53%W=34O\`\3IIHZF_IJOY +M#^/B$OBBV]6[]-":F+]/RTI"Y<9!D&@8=-'YW?+4-_55=ADQQY'%:YEZ^FNV +MU)7KJ#20"^*GYJ[#-MVTPKA:J-G?=4RCR%RDA,5]<0+[MU7;?63MVO5-XO=NI4D2LS;?EJ)XHLU]^M +MR/10ZLK*.KFKJ:BK=7J<"O&+$WAFIJFX5MRLU2\)I[T9'M6U#$A<-[FICWNX +M;]U>,:YN5Z:]WDY\FO&+J;8W=633X=5 +M#-ULU2-R^CV*W*E^^T44ERJDM_E7F(M3CS[N*L#4$*GJI5Y#?EN]I+!N5I;7_`&YH +M2HIR3/027*Y/5P>*2]XJOMW5@OJ"Y;)X6J\VHY8]5+L7(WY+_9E<\U6GU`9] +MW`KS=QJ&&]U4Y=1'5U5;\2FSTTVHD@J6YJE-J9ZNJO/27TC,U0JW$[;0K"EQ +MY$N1H3ZD#T[JK>O-*VU=U6K+1I9=K2*S-7H- +,T$#J*\5:QT6LB9YNVL+J=NK +MYJV;/0@6ZUW"O56NE1Q_)VK3ALD4>W]J&TC*7.4CS]GI"JG*<]JUK?3T4XQS +M6O#9\X':KL%FJOV[U,IFB2,R#3SX%7HK)5.<5K16_2#BG>@`>W%9MV+BV9J6 +MWVYJS':X(P.*OQ0=0X\U92`<\5#DF73*"0?:K4-N3XJZD"\\<5:6(9P!@=JE +MR+*"V_&0..]-,/V[U=6$D8`XIGICG(I-@HV9ZP'C(Y'%/@A/`/UJT(?/@^:- +M(3Q4-&B1^'_U/0MOHRO_`"T+>YGKZ/XGR\8>Y(+;[OU4?<4'3MW5Q[42D5[? +M+Q!DY6I&[BE,^%_NT7==U* +M00E_K\AN[Y?%#^JN+4*KU57$O)+R'9J6]S-0JG5_2M-55W-1QL%R_DJB42Y2C+LGY?M1+ +MNW=34/<5PY;JHC$)>4M#&;J_NU+%2VZ@]IJ5XZ6IF4_$)=W-&!\OF@'^5%\I +MJ)&T5&PNG.VH;W?>H[+MHJ"G?V1QM_JH1YHLX]M0>YJ>(.5G,M`4IK-U?:N; +M;02_('8N[;\M2R+U43=JC=U=5*4>0HRX2I@.%W4N2-6IC-U=50_MIFK492*[ +MHJTJ1.JK3>[J6A;"FIXE2_16>-E5MK4OUIHFZ6;;5IEW=-*E'=:)1C((RE+: +M!;49%]U=_M0JVYMU+FB7U*K30;I&6IX1%[LR])JQ9>EJ7)JG5[JSI(6ZFI;6 +M\K-67MERRK[+\FH;E;JI4EXS,VUNFE0Z?<2>U6K5L_A^5VW2%JKV2%GY&4TL +M\S=.YFJY;:==3%KT[X=1<9CVUZ"ST94\4G&*-'D//:LY2-(POLHQVV!5J&'JSBKB6P.< +MTR.%@<8J')OHUX<61%&`@&*GT01CQ5I(#@XIJQ#.32;'7VRHL1!)QP:LQP\U +M:$`(SCZ4R.#`_:ID@TQ:PC8<8SFB6+#''MR3S5H1GZ40B8G..*5@*$>,GZ\T +MJ7()'FM!8>_UYH'@RQ)'\T,:T4$WLN/!-7HEW#C^:,6X![< +T^.(("!VI.)3= +MH_!+>Y*[9N:F,O7U5%?1\CY:491(;Q7-L]]WJI2,H?,$+PU$_FBV^[::Y1U;&]M +M5R*(3NU&14;,;OZ:)E*TA2AR!`Z:,>ZN[+4'_P!5!/\`YG,>FB1>JB`'LJ2. +MMJWQ^03>UJYO:U!(RK'2I'9M +MRTWY![?(-Y?=0+U2?:A5=S4]`NVIE$T\8$QHO%.V]OZJ%>E6HVZ7_IJ9%1S< +M@MVYJ[=N6AW;6:N^7II2-.-=C-S5![5S;=WWHEI$^Y+E426ZO_+1^XT/M_O4 +M66ZOTT2D;<)2[)SU;:GIYH"W4:Y>6:LWXDR#;]-=\S5'5D_JJ?KMHD7T$OMJ +M![BWFN[&H;S06$S>[^]7/W6AW=6:C=U-^JIXF,9#&*U#'/?O0*W4W]5W> +MCSL&GN[>VM2ST8%QN6O0VNG*K'HK4@M%4]N!3>3\`L+?9AVNC*J^VM2VL%W[ +MMHQNZ?VK6CM>X`YJ[#;(#P.`*RE,VCA]LH06FP`2!S4HH/9>*5E)-"%C\T](@=P(\596($'(^E,6+GMP*HD5'`<_; +M/^5/$7V[&G*!G@4PX!I#94]+#'-6$C&3]*)E')/:I7BI<@KD=M&>U24Y(Q3` +M*E1U&J;'5,4R8YQQ4''`^]-89!'B@(Y-3V-;/QK<:#&S,VVLZ[T)PW2M?19! +M:8W&1/=29H;+S*F.:]19I'DO!ND?+[C2[A%;"U6DM9U]RM7TNXBTO)9KJ'_F +MJE=6FF[>J:+_`)JUCG7V83],^6CY\X?]%"QYKV$]CI39Q<0?\U49].L3VNXO +M^:MO3$>>VM4LONJ]RI'NIC> +MYJG:NYJ0*=_Z6HD[M7;?DHB:K^JC\TY2_`U$A5ZJ['3]Z-?=4?W?=2^RLD8R.;W5.[JVM4-[FH9/=T^Z +MID$8\?(EFV[J!FZ=OS4N1LLU1U9ZJ)!'E+Y'2-N:I"MN_O5*K\OS4R/NWZJ( +MQ_`1\0HQU4:]-ZH;=U-4K^E:B02CQ.7S^JB^>N^>N/S5$ +M]EQC42?ZJ[YJY?%)7+\C& +M9=U0SMNW4IF:H+-^FID7XRT,D9:!C2I&;;4$MU+6:T(;503@5>6-/:"* +ML6R19]XSFLW(U4&BI%:_:K<5KSCP:NQ0)]15F%8\]QBI.('W+4.9?` +MK1P=Q5@6YYQY-6UB3/<.:<(`#V_>GA0&)%'P?VI78*-%?TLCGO38H0!@CD4>WJQ1 +M+D9S[J5EU>D04VG@=N:E<`X^],RN,>:@A2Q^M-[%QK3(3&ZG!1S0(@!X^M,4 +M#'&*BPE%',M"%`.!32`V2:A^%!$4'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX>'AX> +M'AX>'AX>'AX>'AX>'AX>'AX>'AX>'A[_P``1"`'T`48#`2(``A$!`Q$!_\0` +M'P```04!`0$!`0$```````````$"`P0%!@<("0H+_\0`M1```@$#`P($`P4% +M!`0```%]`0(#``01!1(A,4$&$U%A!R)Q%#*!D:$((T*QP152T?`D,V)R@@D* +M%A<8&1HE)B7J +#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#Q,7& +MQ\C)RM+3U-76U]C9VN'BX^3EYN?HZ>KQ\O/T]?;W^/GZ_\0`'P$``P$!`0$! +M`0$!`0````````$"`P0%!@<("0H+_\0`M1$``@$"!`0#!`<%!`0``0)W``$" +M`Q$$!2$Q!A)!40=A<1,B,H$(%$*1H;'!"2,S4O`58G+1"A8D-.$E\1<8&1HF +M)R@I*C4V-S@Y.D-$149'2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@H.$ +MA8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:WN+FZPL/$Q<;'R,G*TM/4 +MU=;7V-G:XN/DY>;GZ.GJ\O/T]?;W^/GZ_]H`#`,!``(1`Q$`/P#Y2E\1ZT]G +M+9KJ$T5O*NV6*)MBR+Z,!U_&IK2"*WTZVWZDL"WROYF`KA-O`!'52:JZ9I4] +M_(UO$8XY,!E,IV`]>,FNFTGP['H.LZ1JFLZ=)JFE2?--"L;#D9!4XZ\U#E%: +M,BYC6ZE;R,F&-<;F/'4],=:31KF\@NK6>-@\$S^6\8;=D=""N? +M3\:U/$EMI^K6]S?Z18I;NUX^8PI01K_"@'L*33[S1++P:MG?Z(DE[+?;S>I+ +M^\CC"XVX^N3^%0Y)Q[CO!2:);QRZK##?3 +M"VM?,!G>16*A1Z@<_P#ZZZC4/#^B/;VK:%?RO/=W#1;[B+RX5.[Y5#'ID>M: +M3FH[E&?-I[+:O=QK=FU2:2V\VVP5=QT[]".];GAW3+&7193;6\T5XQ*[V?YS +M'P#QT_*LSP[)>Z;=W&FW:N(%=MP0@KN'!Y]"`1FMCQ9VQD:OH$UBCM-,9$4?*/4>WO5RRMK%[: +MW2!9XY8D#$RIGGKG'0#-69;*\NO&D^GWMN]GYK@F!29#"AYX]<"NDT3PIXCO +MM)U#5M`CNY+6T<";:N-T8Z''<<'@#BHDJCBJIR-U=:OJFIRI= +M[D)0<+&`&0=E_6M'3M4T^PT>ZFUK3/M<$CB*W5Y&\U5Z$H:=>:<@7S(/M*`-+GOCD5:C)R +MO):%6U=]BD=1NOL5W:PVE_)IV-\"%-Q4'N2/ZU/I_B3Q'?Z1IWA?5KBY&EV[ +M%["-X@`&],@9/?J:Z' +P=>6^GZ59&5:%AP6/4@URNM:K?W$\*!)95@ +MDP@)RL>?3TK*%9SG*G&-O,F$KR:2.AM[WQ)HNGW27=O#<4W[P1FFU&^I9U'6)H=)@U+2Y1!? +M`B(Q*[%D('WAT`!]JII=ZG87^GZSK-I+=Q`AF*/M/U!]>]4!/!)<7%W!>E;- +M#NC:<@?A[FNJ\+W6@RZ:\OB:6">""$LL<`;S6D/W1@]!6ZA.ZM;S&W4>VQ,V +MJ0/H5WJ^J:4;B6Y+)9R7,P(';&3R2IKD=(U"`>U87]KR +M7EQ(M]"3:Q?+$@X**3^IQQ4AG%Q?Q0>'X6A595$4LG!WDC&>U;_55RM-7N/D +MON=1Y$=[+Y<%U-;W<1/G))*-A_#I5K38Y;E+J*_62YFN5"Q7$UR?W`3JV,], +M=*/"AM?#-_J5WXET,ZM+-`\#0QL`$ER")<_I^-;-Y>^&M<\,SW4>D7NFWVU8 +MT$4N]&R.22>GY&N5T)1O:=EL1*G*,KQ>AR=M<::JWH^V&98Q^Z=>,_ABNJ\! +MZQH-R?(N)KC36>-H7DBA\PNV,KQVSTXK`ET:VBT^S%E:2P73(`J_>\WGJ<5E +MWM_JVE^("ALV2=@,Q[-N&`_NTXT824FM?43BI;:L[_3=)U.30;R_2Y,,\4S0 +MHBX&[W;//>J?A#3=1EAFLIF$.HB1I(YI%PNP`Y^6DTR;Q#J>EVDWVZ*6>/($ +M<0",><_/ZGZ\UUGAGQC"+ZY;68;:VG:(P0G;N8-WR`#W%84Y4](::/4SY_L] +MCEOB%JUIKFDZ39:1HQA-@#_:=QE6,KCNO<+52T\37MS8^0RV\<-I%OB#3>6L +M@'8@=?:MV\\,(NF3:M:VYM$G!(>.4Y<9Y!';->?>+YK*]GMK>P@^SPJ0I!7D +M^M=="M";7+I;IY$P?M)#_#T5EXAAO=1U;5;33[FW):,'.^3V]ZZ!-5O[22.] +MTR>:.62W"3.)R_F@=R.W_P!>N6L]/`DEN)URBCY&V8ZNNQOZC)_PD&FV'AG3+FV-Y=[I9Y5Y=5`R<_C^-9M +MG,NC:4;,1$3PL56Y3A7'0YK`\+6=Y!J#:O(\MK&[&,RQC)0GL?:K.I7UY$TG +MF&26%/NCJI]ZPG2T4(L>*W6SEMI-298Y(\?*F03VQ7(:Z(G(>*] +M>1V0&0GC=[>]:4$FC/X9 +M/HUBGG3>8F[,A.64,.HY)KR3P!H$S13:Q>:@+00@KN"9\Q>FWCI71R^*X-/F +M^RZ%XDO8=,\K>\1SM9^Z8(P37H4I.G'FD]'Y_P!?,QK0GX5ZM\`=0E\5-JVL3S>3<6DA*JJ?,$R3@>JXQ^ +M5>(>&K^XOO%46K7VDS:F(+J.1'=,[U[H?PKZ;\/>*+&WBO;V'P_;6#00\&'` +M8C^ZP%;Y7B8^TE3B[:WLR)T^1:HK7'Q4M+'4V^P6T+V10K([YC+2@CIGJ,9_ +M$45Y/9Z!>>--5U&71_*F3SC,\3/MV%J*RK8['SJ-TJ5X]&<_-/H>$ZJ^IKJ9 +M@ELS);*46/,>2J!OE&?TYKM5URUMK3S]5UR,3HNR.V6,L5(7[I`X';GUJ_I( +M3QQ_:%G&?#7B+6+*[UO1+C[5:8::X#D?N5!YW=@<5 +ME:]96ES86KZ+87OVI3ON4E"O'E1DD$'D'T(KH]1TWQ3\-I[Z+7_"5S%%JL15 +M2+IS%@GEL#AC]:;H4(\6WL6G:5Y4*EE669AL$.>,L?3]*=24Z.W8KI +M=&GJ[#FE%J]MR7+EW,>;Q<+W6)6N]-NTN);:*"V,%9K^\TJTE0.L97861B3@MU(_'%<7XI\2'78=-W6$ +M-M<6NK:2_:.-XX$CD>``>85Z,<=ZZ'7O%.H^,-/TZ;6KR-WL(!#:D[4 +M8J.Q'0_6O.&:'[`C@?2I;VZ-QY:`86,?*/2G*%]$,]-T'QEHMH]M;7= +MM)*T*[4*QDEMW7<#P:;/?Z1<2WEO;I)B>4/''&A& +TC^(C^E<-X1>:'Q#:W7D +MQSF([RDY(5@!TS7;7\UOK>F7&N:9IDD#0';.(I,)'D\$'J<]SQ7F5L)",FTW +M?3J8S@KBQW6KZWXSM]$$]MK$^HA5)7&Y>,``X^4@#I6KXB\":II/BZWT?5YX +MXI-@>11*"J1GCGT-0NY?KD'THJ.G&5ENOZ8-)/3H<=J.FQQ7\L'$UK'.5!S\K\^HK8 +M\0^)M=/ANS\-7-I9KI>GDR0O':J)1G^%G')%:,EYX?7XUN]%AM;62VNY$D,\B?O8]O4*<]_>KUSH<.C6 +ML#RM<27#G>0IS&Z=_I^-6+?2K+34MKI[&67?+YCI(V$9.H&>HJ:=>"3E!W3V +M,XRBU=/1CKM;>H^';NQ^QWVEWL%YI\J[F2.3:X]<@^ +ME5[/4M"U#Q$CO;W$$&T^5KJ&71_$RVMCH&FRKK5KD2>0,1R#' +M7U%`!UP*C^) +M_@R30;&RU&VUC3]2L;M=RW4)4DGNIQW_`%JL-%2345HMRY4>1*_4YS3K35IM +M.N?L]_I[2_>$?VD"3(ZD#O4.@:W;*&N9XWCO`2'D;!3=ZBG:9X6NH=)EUQ[( +M2P1J5=9.-N>A%-\$S^&$OU@U4R1PODDQC=M/^%:SIPJ1=E?\#*2C),VK+Q3< +M)ISD7HF4'&U@>`>MAAZ$;U=K_P!:F4*4+^TV.@TR_E&\ +MW1$/E8Q"Y^\/:GS337/GQZ1$9FF;?*S0_<(]#_\`KJU"\5Y(L^HP+YS#<\A3 +M&#VP..*O>'M-GE+)Q)IL7BO4/!FL7VB +MZ6ATNU=1>2.H)5@!G'?IBL&#Q#)JUM-IOEV-I)-M#2$;1P.^:BOO$&JZ+97O +MAV#4G&EW,I:3!P)2.A-E9^FQ33&&R6&0-++PRGJV<5N76GS:1+/;:F%@(AWQ(S=<^GK +M3O!UDLSE9O-CE"&6-\\AL_RQ6GM7"+YNA5]#T[POHFNZ3!>Z3=P +*UPL'F1[7 +MX([@^O6N=;P_%>:FD=C-;R7<121[4KC:Y;H1Z=JZ3P=XR31[.Z:*$ZAJ+@-' +M<32$>60,%#GJ/I7-6]WK5QXIU/6K2);87R[&6-01^&1]:W5:@Z%V[:[=4O/S +M//BJG,WL=[?7,NE/=Z)=VT-BY97^U6ARJC'IVJCX=N?$>N/<:1X=OY[NYN&, +MZO-;OOMVN7;/-*-Y<$9)-%>G/,%?]VK+T,U25M69&@Z-=OX +MCNM+FCDMIY(/+D`D"@890R9/?KCWKH?!%Q8^'/&4UY;*+VXTY,KOA$L;;>H8 +M%Y9&J>(?B+K"VWB;4UF4/_`*'"J>7$ +MA+#Y/56`(`W>U>5>(-,D\,^*]3TV2WO-/3S2NPLRR"/)Z'C/]:UM:\2:QJ`A +MMEO6,H@Q:J6(C!^]>['*7*_>&^'+B;0[FYM-)\1B,7"J\4MQ&1%<9&"CLWU +M[_F*DU5/$7AO5?M$VJ3IYREW6(JZ/D#;@`%0H'OTK&CU'4M*@EM;>UCDM[9_ +M](DD198R<]4_SVKOM3UFQU?1TUS68KJTTB""..".V1G\]@V/O8``"_3FM=6K +M,;Z')>='-!Y.E2!X;HAI+>Z3!=ESR"61C/<3$[!%M'^K +M'N0/SKKK*_TK7-#ATS1K&*+4(W\V&>=-I9!EF&?8`8/7VK&\U=0TT&73_-OD +MG;SE<;1,AS@=OUKS9MT91L[JY@YRCL>3ZMK4D@N;2&!/LDC?N_-3+JO8@\51 +MT:5UU"&+[5]FCE<))(2=J@G!)^E1ZI%Y6H3H(VC`*:0(TKG`3/<^U=#<:7J?AZYA>2!9;> +M*=O+95W)/@\?4&E*:CI?49)9"W@9FOH_-#`HJHVT@]^W2M*^N;A='=+0M;6\ +MD:QSI"2JNH.?FQU/O6;X95M8\6M--:Q6\DA9U!7;&!U(.3P/I7H=SKMHW@=O +M#VE)%)//,9)2;?)'^R&[\]J\^LY1J*[TW_X!+C+FT.7U35['5!I4=A;&"PMX +M=L@F?.]QU)('^--,O\` +M]8U['>_#9;CS+YKFY,[)M`$1&[MRN#4<'P@@G#V<=S-;QRH!(K)]WD +M'KS@?@>M:4ZL4;/`SN>2:-K$4EQ91WC&),[]Q4NF0<@'VXZ5T,GB&SU"*4Z) +M<2+=3@QRVTL)>+DX&PD<#'TZUZUH_P`"-.2SO+EK1KA[2WZC=PZ?I6OX +MC3Q-KTD1U>1GCMUSY;E2-@Z].,\<'\JJ))9VVGR:/=V(MR\@\D33%5'/7!(( +M)XK)S3^'=[E4Z3Y;R*_B6\U$6#F[>*XDN9O/4S?>;GG'ISD'WJYJNDMK-@NH +M1Z7;:=:JB-\DQ/U/U-3KIT6G6<$]YI>\[F,L6S>-N.&4]NWK]:F3Q=I$U@]K +M'8R66Z,1Q,")%SGNH)XQR2!QVK&/.H/V;U(=%WW,CQKLM_#NF_9KJ^C>9"DL +M1.49.QR.O]*\[MT^SW8DG:2.)/4(Y928QLV@$Q9.. +M5%<9%LO;S^T[B/=:VR@,C+Q77AZ[Y'>-K&"O%:HQH+C49K@-#Y\F_.S)Z]L_ +ME6IH5GJ9U>/3(/,1Y!N9""`WK^%3^(9+Z6XLI=)M=D,2B1/)^8?I_*NF\6:Y +M=>(-$M]970&T]K8B);BWA_'/X5HI\\5S)*_0<6FM2'Q99:EH.J65K +MJB"=`JNBM]QE[#<.M8]_>:E%&]I+,;.R9RQA23Y=W;]*UMVN^);'3M)-RUZ+ +M=&,46T%HUZG)ZG\37,7L$ECJ(2\MS=1G*N.2RC^E13<'[L>A5TV1R7T45Y!; +MZA:?:&B8-DMD,,]#6G/Y5[>W'E6,,$4A!`!^Z*Q+EK6;6W)EFEC0`1MC!X]: +MT;:PC@N$U"[N6:%LAAU(_"M7%626EQ2TU-MM%BEMX;M6-[&ORNQR0"1[UV?A +MSP+>N\>1R/IC^=4/">N33V,%G8%K@H=N3%\F/]K'IFJWC;QIK +M6G:DFCVK1J(1S(H[DZMXJ\0Q6Z:E?W%[96 +MR>2I9N(^.%SWQ[UB:9>7D%Q+ILB+"I)S(W'ZUK3P[BKN6J+=.VVIKMJFJWEE +MYU]Q_^M7/2:?<:=XH5E58)(YP0Q/$1S^HJU5AT'?6S+_B"RU;3;I;6ZL" +MUP1N;@L#CC(-%&OZ_P"(K'6&EGG>68*8^!E`"0>!T'2BJBI6T0*"ML/\&:+% +M>W44>MZ@+&V@W".,(9?MEI#8V(MUO+?=$8061@9'0$C^$G:?7MS6AI&GZ5>V7V34/$*V]U +M90L8XY8<1M,&(\E3CKCKVY[USM*47S+5E-76H1VRR2Q-8SQ6[O\`(RNI((8\ +M@G/IBL363`DF8;-'FM9C'.XYB8$X!]?ICTK=O;^*XT>QDT?2-0M]3MW>.XE4 +M'RI1R!C\#BJ:IIWBB:'3I=3_`+(F*8MWE!178#D.V,P'5 +M=$O'D14=0'MMYR&4=O<5S/CO1;'[%#/I6MI=)C$MN4(97![>OUH<:=2::>O< +M'"[1U7PV\+Z'83:SI^I&WUK4;V*:RM&3#B%U'W^3R#V(KB+'P/J.C^-++2_$ +M-H8H))?FW/M5D'.=W2M?P1H]QJ&EMJ-W(UO9Z<7"W-LH:SM[N=E,B\Y"GM@]JZ/:SB[/4KF=[%7Q!)I%M;_`-DZ/?0WJ^:D +M=M%$^2Q?@J2!\PXQCM6HG@'PC!X`U8>)=)AM=VN_$5@NJ7H/VPNT4EQ" +M78\TT?1=&L/&]E?7=E(E@T7F1HPX)`ZD>E>@1 +MZ))<:3936_V#4[&YFDEBA@FW20`<_,!]W'TKB=1T^_UG2_/^TH;:`-"L"RG= +M&%YW,/0GI6A\+;^RT76UEN9-YA4+(5!7(/7/J:YZMIT^6H]?R\RTU))+<9J& +MG6IU"X>T=[N0@1F#[/M53 +VQSD=_K5S0-*BA;[($CC8J2OFG"J#V^G.,G.,_E +MVM@PO=9EN;.$1,6.W*`Y&>_X$5H:AHD"ZDC3(89/F'EIRI)SG^OYUQ2KNW*W +ML>[A,++E5T8NFPW:67[O_1I(#E5).[;DY)/;&*Z;PW.]W>MYURMP[*54^:4& +M>V?TZFL/6;M?M#;U^SFV.U=PVL,X`R?SZYS6I\/UBO+XQO$RH[<8(Y.1DM@Y +M`Z_G4\W5'J4Z5M&=?:Z->7%LX#3+H6EC!=B/&7E,H`7I]W/)_.J?AG6+Q]2C@6_A<,- +MPD=5W,`"S#US@8Y_^O1*HD_-'1&'0]0TFV6^M3=RHEK(3AA(`N1CG/\`B*JW +M][H`VZ;J2:=>QXW1>8B,J^XQ@J:S;N[GN-+NK2:,EI9=C;XV*G('7`YY##CK +M@59;1/#^G^&!?:EIB172[@A69F+D>B]OI[5UT\3-HPG1CU.3U31;1?-N;.P6 +M7C"0JQESR?FY/)X[@_2O'_$6E7=Q:7:ZIAPLK".9HR2CY^ZQ/W0.!QV[<5ZI +MX7\6)/J,L,VGRF.6X^1QC>!P,'MCVKL-9T[3M7TFXBB16#V]C[ULJJ2MLSR,13=,\F\9"X%O"VPV\\3XF0`[7 +M;!)/U..A]3VYKHM-M[.XT2&.[%Q;Q7<8V(V%,SGN,XS6AXQNI-6OEU&ZMQ*' +M54O8+:+&-O.\$\;N.H]<5S.I6DFK6#1-JK>5ILA5(9!^\A4$XP/2M4E*FHWV +MZG%42LG;P_J;1Z3J3PM:VYS!=)D$GJN._M6!JPU;[/Y4=\TMO='S9BA +MPN?0CI534_$?_P!5 +M7[*K%IK4RY6F;'@75F\/:O'J-I?(LP&X.X[CJO/4'T-=/XWN(]6Y^^C`J5]1S4TMU<7TJ*MM;HJ +MJ67;U(K8LK+^T]&TU+!K2.^MF=9(E^61P.=Q]>*Y\_64CN0N82PPKD=J[/0?"^FW- +M^EGK&H0V[7F71W]_4_C69X[\)Q>%1`P5+C!(5XQE77US5TZWM&W%,/:7=K&- +MX87RKHQ+?K%&T14%N`&'H?SIPM;N>Y%Q).TT"-^^();<.YJQI4D*/+=R6^RW +MD&$5UYW<`@47L.JZ7<3_`&7?Y#H5<(,Y4^OZ4ZB2EKU!23EJ[#[)[:""ZB,P +M$)G#1&9^":M.VMKA25\HN067.>0.<5=^"_P_\`$]]- +M?ZGX:2S:"RWK+/*^6+%2-JCL0#G/:N'\>:1>>'([6=-04SKA76E:E-\/ +MK?6-7U*XUG5;E=MLTV'*(0`>3R,#R-WX5-X-T[0-2NKFRO9GM;K=M@N9%W0_B>QJAX1U\+: +MZGHOB.6_;173>%@.[$H'R#'8$XR15V_O]+7PGHGV+39AJT%V[-;[MR318'WA +MU!)[5SQP_)LS"5/6R8RX&IVK7>CRW$+3).52&.-09&&"#T[^U.;Q#K,&H:8U +MQ9"UO+*9I24/ER2$]%XYXQU-4[@Z;=Z'<:OI!BTO5--F>:YM9KC9*O\`=*'O +M@^E<_K?Q#N-9TU&O;*+^U=^);I$50Z;<`8]?4UM&A/5[FL4UL>O/\8=.U35[ +M&_NM&2"_6T:VNIG^8.S=SM&<5G>&?&MG%*VNZ8@:XL;=C-:RJ4@Y;:3&O\1P +M><^OM7DWA#6=:N-=LH=,AA?4#(!"IA#!L#H1WKL=!>/3=;OI?$,D*SI=;)K$ +M*,$D'<1V'/&*JO*4(N4M6M@DK(Z*T6]UD:GKGAZQE@T=+CS)W8`(C$`E#C@8 +M))'X5H>'[31+S7/M>KC+.V[>%XE7@@D#ME<<5FWD^CW_`(.NY]*-SIL"NJS6 +MBSE8Y64]6[$\\9KL/!,,`LYMNFQ11ML0+NW,!C=U[>G +%>35J0YU..G<*%)SJ +M*WS-6"_A'F:I!;):11,N3&IPR^O/Y5@ZSX@FMYDN\L-Y+(A^\2W&=W8X_P`F +MM34&CN4FL)@L-O"@EEE1,D*.B\=^>E>;ZEK\=YJ\'VCFWMI`;=-@+$@]U'#$ +M].:YU%U)7/KZ*Y('91:^]]I$4+VT-PY9RC3+\ZA$+=OO=>_>HO`EU+ +M)"BQ2_/&=J(P[+Z#G'7GBN6TB9[$P74NY[A%?:KGY55P0<@=R#760ZH)?#5S +M=13PV$=HI;PG=@.`""NW/!Z<>]>#S7G!)Q[GZ5Z#\.]=N]$TH6MXDDD3(7MHB,[9&XW#.>G;W +M-:RARI=R8SYK]CTZ_P!6MY_%6F:7)]GC8S22/$L@)8`,$XR3V!/U[TOBV6== +M6MKN."2X6RC\O9&_7(P2>P(&.O>O.O"WAC4;#Q-;:MJUT+O5)DWH(6+^3N(X +M8C^(!NG3&,UT/B76)[V&_A1IHQ,\+A)0,`[MS`A>N1R?:X +MOQC:7CZ>MW9W,C:1#;K$^R,84,!@-@Y/(/8\X[UR/ARUNK:`V=E*=BYD3,A0 +M$D`X!X/;OZU8Z3!K +M,+1-2TFZTYV)FA_U&PX#=\>A!'(K6$U5A?J) +M"#NB5,;H\\AO?%9OB>]O[K4;K4Q*#).SF5X_E(#'.T^XKZ&TS0[C2Y-2\5V< +MMHEQ]D>VA@W+\_')8'OC`!'I7S'KDX:\N'C:2!S*1,BMQU[?K7KX?WXJ35F? +M-2TNC-MGA7?YZ,V5^7!Z'UIL*1`@89VG'J:R[>:.XO(WN'V +M19P0IY-7(M4U"YT�IB3;(QV@J.#['K6I;^#M1C\,RZI=6J:?8ZC'-:QFZ51M=)5Q6K/JEE<:F)K<)%%%C:(TV-DCG/.:Y"U2 +MZ=S'`GF.3U(YQ6[%IL\5W'+`3DD;E*\UR5HPC'E;,JO+%69L7LNS55@%K:*/ +M+'[LY^?/?KUJWH8T:*>\M;VTDO%D&(9(\CR_7%)>Q)8ZK;:A*MNSB='D? +M1=1CN]1MA=:6)8)HY(=\CXV/G&SGFOHFCMN=S\,OBEK_@CQ7)X +MCM4M[J=[;[*\NW<445M>6RW$8\T?<;I^)]*Y:-=-,L$;/.B%#YY`!^;G& +M/;I6:Y9;=!G8ZLU])IVCV4^JQ7S36PEVOR;_'KGBNO\(:):RW4<3^( +M9(;66+-U)$K;57'.3T(!`&:\J?2M3@TFRU#8PM[MV2&7?Z=0?2NETS7I=.TU +M]&M#&8KDI'.9.7C*]=K<#:?2N>K2(KR30;:"'PQ>7D,]M$T%]-&2*]R9[QAYDP;J":R_$?A*]T?S7F(`B?86`R +MI;N`?;-=5;P7=A9B\\^2XNWC(#("<`GG)I!K=O+8V]AK;3-9I=^>T9=F5CC) +M&WU..N:5'$SG.Z?N[#A-RV9A:(]QX:UO2?$.C).\L!63>Z8"R#]"*U)9X]=\ +M17D\K>7>SR[E0#Y=Y.3\WKUKU+7[S0;O5-'M+/2K#3]'O[3S;6..4LKOGG@C +MY6]17"R6^E>'/'-K!J(F;3F+27'EH`P.#M*D^_O6<\3S5G2L[VT?)8KZP>`;3M*[3MVH.>>OJ.I->?_$C5X]3\BWMR +M([:/B)<8W>I/O_C7!B5>=V>U@\.H>\REO/;\/ZUU7B*[CM=*LM*MF+DGSY\=/0#\LG\:QM#M$E<33 +M[!'%A59AG)SU`^O\ZJBE!.3/1EK9(U(G=["2XF&0TK!6;G+*4.#Z??JO/>/? +MV=Q8[F"N4^0$X<^I^F./<^U+JR;;5+18U#K<,[?/A@"`3D'L-HQ]:RK!RU\\ +M2\>:N0`<$@7E[?A2T[R&7][;$YB*#J"O?/']/ +M;UGX?60N/#L]BJH9X26!'W#&4"A5!X//X<^]14A*,O>>HXRBX^ZAGA'7+$:< +MEE;L6O4@E>1Y?NC"L2>O+!ESR#QTK1\))*R3I>W'F_:%#+-*V[8V,%#Z=JYO +M3K6**XO(4DV^8Q9YF('EX)#@>N>23GIGOTVI994LB(K8P>,1?,"&_O'JO +MZ?6N6;UT.NG'W=3L;`ROID^FW40`="J,KC:Z'(`(Z'&>/3FLW5_#XTJS\]BH +M4['4!LA5(YR0<8((_P`:O:&L]GHB6S%698P">HXZX)K,\67+Q>&9["4-)'>, +MJOM..2>!_,?2NBHDJ=V%.-YV15\%:A/:R:S=V7F3Q"$;"PSYP7'/7T_'IZUZ +MD^V]T"+48EV,8Q+EC]Y6&0/;G/\`]>O/O"7V72M+U&V^V06<[VC&&-E^4G;Z +M]CD#CITKK-!:.7P59W5E)')`L(1F+$@,HQ^IS7/A:MF+%4[JYY+\6?`FJ2JU +MUI5Y+&)3\UJ'.-N.#M[C``!'ICZ?/NO^'M0TJ^NK34K!EE<#:P<$G)':OL"] +MU(65U'I5];)<1SQ^;:N_RE@23M1ARK#;]#@UY5\?-$N+VRMO$&D6C7*'Y),@ +MB3;TVE3QN4X!`^M>_A*R4;'R^,P^K<3Y\N-+EA,>&(#?><]%/H?0^QJ."Y,- +MM<0(TC.X`!!X]^*E6X9KF18G>-&_05U6DZ-;W4-Y)=,L4UM!O0[<%R2!@_G^ +ME>E)VW/+VU.:FRBP7IA=(#@=>N.M>H>'_B3:Q^`=;\.2VT^HS7P46AD.?(`' +M//:N,@MH)-*FLI6BWD@QAVY7FJ&D:?>6^L$I`CF`?,JDX8?6ITW[$W3O:EI+[+J'Y'=?E`/<4D>M7Q19()$$:YVR]2?:IY/$^HWZ6>G:G,)-/ +ML6/E1.,A1_<..U.@M[*_U:.&WGAMV=P8X=IV,S'[H]ZRJTHM7MJ3:[]Y#_[= +MU#5(`DQ5XH#OE+D+N]OQJ_K>M/XD66XM].&G*(E#C.%D(Z'CC-1>*/!5YI?B +M"UT]V^U2S@,\=N>GMCU^M;.K65KI<-NFF:M'>071(EAD38\3+V(ZCZUSU_=5 +M^PYS+7TJA99LG*D=P?>IXVU/3H[AH[YH&A@"RG)SSV_ +M'\JAGN[:QTZ*VM+<3S2G?)*3]SVXY%9<@@\4^;$"87MCF15)/XY/:N2#Y'[V +MW=',NY)?Z%K-UHZZ]?1Q7-JXVH8R`R'_`&AZ]*?=:'?V=KIVJI>1LSPALHVX +MIGLP]>U:VDZF;7PY)X>VA8))-_F2#&>V`P:-EC(3<`_ +M:G*3E*,8?\,6[MVB0>.=9@U;2=+B7&7;#$JIZ#!%23^/;>XTF6+Q!H%C?74]@(-YA$ +M;>8K$I-D=\,0?7%VL:6/2/ +MB5I[6%EH6GP^+;7Q&NGV\<:6KQL0J@D[2!UQG'KBL*+PUH>L>*+*:TO+"VAW +M*NH(P98XR<9('7'KZ&M+XIZ]]H\;P:Y;+8F="OES1K^Y=>NY_<9`P/2L>]UW +M5+?5[BZM5BD_M&W:&Y*0CA6VD[1VSMZU@U)V<7W)/4W\.>$-'\'W/AS5;JUU +M>[ENC-IK:<^XRJ>-O'W<8YS7FWC?33X2;4%@\/21V5ZP^S23KF2%=HYR..3F +MN6UKQ-0AYHR,QN5^Z<'C//>M[ +M0_$+PZ/<:8R$P7C+)+"\&97*GY2I(Y!/4"N)U'5&U*=+@VD<4J#D)]UL=ZD_ +MMC5CY$\]S<22Q*([8@X,:CL/3K5.CS+49ZOJTLNHZ$OB:TOE@M$'E/;0VYQ; +M.%!*E1GKC.37,:XUYXFT**[6W"*9%14"!6?_`&^!TJOX?\4PQZ/_`&!J,%[9 +MJ7*3&S7YIP1T?)P2/Y5Z5XB\%P:7\*=,UN\OKF*XD13;LB%0(WY*MC@FN*M1 +M=-J<%L[G/*E[UT>*6EAK-MJL++:7,J0S?N=^<9S7=G[=XJDFOM2ACC02*J0; +ML8"GD#OR:Z_P=IMAXAT=8[=1>RV2_-+$63`'1BIY.?TQ7)77AM;34$U&ZMY[ +MBV>8VRR6P8A'7GGZY]>Q]*S=:55ZJS7D;)MNQZ=9W$^I01Z-I8>'2K+DN6R) +MB3G)X[C''&.:Y'Q#)&MV65BP3A0?6MJXCN]'T.VMH9W%LQ\U1TWYZ<]Q7(ZQ +M_AY,]<$ +^W7FNSL"D?A.)I:WK)1@FC +MII-N313U,FYU#49XE\R0Q^6J[L8")ECG_@)_.L/PI:2:AK4-PKLJ1#,A8<*` +M.GYFNATFWC?2+^>60!H\2=,EB[8`^F`3^)%4+RX.F:2K0)Y2W+F4X]\Y_4?K +M41J63@MWH;RAJF]D:'AF*QU'Q[)ID5RT"3M*JS8`5<8;&>H!(Q]*]#T"9H8M +M5NHOW=S:?NI0Q^7#(V[KUPZY'MS7E7@*U1M9C?S%02HQ5LX;<5.T#W+$#%=E +M?WM[:03F6=9$6U!ER.?,=W7!]P`:QQ$;2LNQK3UC=G8^%+"VU+2DEN(_D:0R +M<,1U!SGU!#$5TZ3+:Z=;6JVD:A@65RGS#D@\_A7E/AWQ5J"Z:UF+BWTN&V"E +MW<9=@>1@'VJ+^U[N_N1';^([D#J3P0,GMSQ^5:.C%QN;*5GRGKPD#0KAOFQS +MFL/Q?>65M90_;98XX5<.Y<^ASQ[U7\,6UX;99#>R7(QR9!R:X+Q;<7VK>*&M +MKQ)8;.&1D>9HB_0<;5^O%:RU1Z;JWB'0-0M[06T:W%O)`P9GP6X +MX(4GD=N3Z5'X`UQTC?1HRR_:;>19=QP%9'RK9]QQG_"N,M?#FL:;;Z-J%P?- +MM=1MVDMB5(("R%64\D9Y4_B*Z;PK$LWBRXN+*&0B.-(BQSM\Q/F(![]3^5>' +M7?LJUD=\(*I0N)XZNKK]UYX::,0?N$8D$2+DJ/?J.OJ*J^&-;L];TH07*I%' +MU\0^&H=1MD,=R0NUD3&'SC''3D&O$AHE +M[I7BJ?3KU9;&>XE@D+0G*DG=E\?A@^N3[5[<$E34D?+5GRU'<\M\9>'&M/%[ +M>5;;?-W%X@,!6#%3CV.,_C3-1T*]\/F*/4KDV\TR[]K-_#V_I7JGQDTN+3[@ +MZN+^+Y1<-*Y^;V&37I8:J\1%6>VYXE +M9@XK:LKNV\-QP:?>1F:&2(DR1H&D0D=QZ5 +MRD,>H1(\D4PB6$C9N/(P>QKIO#NI"VU-=3UFU>X\U#&6:,%'=-+&YEW/:?9?F.>A;^[GUH +ME>2;:'"ZN>KZ-/HGAVZG@EM(+B[6(.AW!UW +=P?4'\^*Y4_9)O'E]VW@R?P?< +M3@7,3/N:*-3D1MGH1Z?G6;<:^WB/4S;WL7V'3S(KO;1C@<_,JGK4NMVW@A=` +MN&M]4N[75C-A+>1#M:/I]*J,*B249)^I"4MDSC;FYN+H1A8AL5``0<45G7T\ +MIC2"-3&D?&X9.\^HQ16LM?%>`:Q?Z-X@TFQDM;&ZMT* +M)+M"@*<`L%X`]SS6/XMT#6[+41'>RP1NL0FE>&<%)%?D;<=:I:)XQ\0WGAQO +M#_VQFM(EV11.B^6BGJ"<9ZGCFH]"M;B]U^/2+60LMNC/*DTFU6VC+*/RK":E +M?S1FXW=^QD>*/#=]:QKJ'[DQ2@,J(X+`?2JVCZF26R:3%?VGG;GOE!=H$=0"I!Z@>O:NU@T_PG8:`_A]F@U*"*/%QJ-I +M#\^)>.Y]!4+$>Y9L:YGH?-5]H\\:+>:=;S2VS.8U;&=Q'88_"G:&774 +M8GF!6XCF"B)TZCN,&O1&U:?PJ8?#MHS+!'<.XDF1058D=.,@<"KOB^/P[<7M +MA!IMW'<:G)-*L+O48UTR>&*5OFVEAN+8 +MZ&MW78-1U/PO96NGW.HZ^T""V$K.WE6YV\*J].*P?&=Q:^1IEK::?:0O8*Q: +M="2\X)XW9].E=IX*U/Q!XST*[TS1=0@@FA87$EE;QK$T[;<93N0`.:QA%NFH +M[F<8M1O,)-+T +M*SFBL=3E4W"RI\B2@$J<+T/WAG^F:\PUK4]8\.B]@TK5)K>:_B\J\C(VLPSR +MIR,<>OUKU7X%ZWX:\-^";J\N],^W:@X$RO,HRCE=I`Z]#N(/O4XEKV:G/A'^?6O*O[Y[E*FHQLC`E;9J_//&T# +M'K79:K;M#HXM0`LC3>9L(Y!]/Y_D:H^!-'75O&36(C6658))8H2<--(@)"#W +M(Z#OBMN^-P\;&>/;,'.\CLV,`?7K6N(DKI&M%,R[>%/LX9 +&)C>-BQ[<']>:@ +M\3M!]CTVTEYC,!SCM@X_G_*M:U\F+1'N)&V0+@@C^%>!_458\!:1H?BBY7PO +MKNHI87Y8_89B?EW%B-I/;..GT(]#A&5GS=CJ4;IW.?\`!VDWFIWZQ:=`TGV/ +M]\\@.-H'0D].N/>O3?[-M/%%W/WD1.[&.A(8M^(K!\.>%; +MKPM\3IO#FIQJ)HY_+0EOEG4D$8/NO0CN178:_IT?A:[ADTVIJ:QC=)+J]>G>5!HE\EI*(C-$S-QN4$E3[$<5FJM*3 +M:MH:SHU(TURZ21E>,K634(-,\,Z7;FUDB:5H"2<0(`I<^P&T8^M:GP_T_3(? +M#PBF#QRJS`QKP=Z\ACCG)(K&U3QJ-1UG1;S[,C7ZJ[!1U93@,#ZAL]/]BNYT +MG3;8WIAA92TL:RAL?*W0\?3I]#[U\U7E&IB6XG16O3I*+T_SOJ9&N^)#9Q/: +M?N&1\R.RPGS(PHR7..#SQC&3FN3URWTO48&U676$BO);7=92%"%RV=K'//7M +MZ5V>H^$I&FNA&2]XR;@C#[P7^')X/7//J*\0\1:@+75)]&O +M50IQC(Z8./QP17;AO:N,HRV9XV*]GHXG`_&'Q[:W=C#X=!CO([=F_P!)C3F3 +MGC@XP17G,UQI:6,%S#:);N9,D>:6;@<[N_)_G5_Q7I]E9:BBFYDO"$\V0H%^ +M0[F!''#=`21Z^QK'\0727EU]MCC00N0A\IWK7T="G%01\W5OSLEU>[^V +M6H=;N)8T(*1HO//O76>!/$=[JU]I^F3:=:36EK_KE(P'3')]<_3BN-DT.]FM +MP(8T&XEQDX;'I73?">UTI=<4>)XY8-.C+)&K'Q#96+_`%AI&F'0=.EL&C;,UI?M)GS<\ +MA?8\UY>?%VI:'K%U9Z3<"ZTU;G=;B9-Q*ACC&?4&O?4-KXU^&\$FEZ!!8W;[ +M1*2,MN[D`=OY5C&$H:,F5TCQ'PV-1\/ZZTHO_LK +MFQDU#997\XWS/\J.HR>?3/(JIKVAZ@=2DM[>W#RVQ*2&,Q2NM3TGQ;K'A:PU:.'PVEQ*OV?RYHT.%+ +]"> +M#6''>Z5;VL-G#8-$TY*S3LY4*RM/$9MWO)F>3(@E52-=7+&5)`49 +MOO6E\0Y=)O-DMG?Q7R"-5$BQE3D#ITKG-:T_5[&5+!+.8SEU*1[3N8> +MWUKMK;P]+JIM+&WL/(U%`&>%P,+Q_P#KXK3WXQ:ZO[R+JW-8YC3H/.MHI2D- +MFBKM"2CENGS45T?BZSCU*YB74#':S6R^2R*-HR/\BBN.44G9IF=TNYX?XB:R +M_MFY2QD=[9'*QDG.0#C(]CU_&L\`J`P(YXZ\UTGPSMM"OO%EOI_B%A'9W2O# +MYQ;`B=A\K'Z&NNMM%\-:IX@A\':]*?)I8[D +M8NB^"M0U?P_9WFAW,MS>3NRR0`8"-G@9Z$D`FM+PG8:1%HNH7VHS_9-3MR8Q +M#(&=RP&3(..G!!K:\'W'C;P8M[HR::[QART3/%_""0Q'KD$5E7]_>QRRS:59 +MM;W&]H4A*>:6#*022>,\XZ5QU92J7@GN5:VY-HGC6"U\,W<,;F[CC[M;_PJ\7I<:\+*-8KA[R!XX@T`)`'.TC\Z\>U?3]1T]6$J3(K8\X$ +M8`;T(J[:QM8>'K76M+UE(K^&8[HHWVRQ`\`CU%:?5:>\12ES;G=>(4B\1^+W +M>WBBMKI[Y41VD`MTXX!)Z'(K$FU%K[7'MYX(S/\`:6@=+3!#A>^1UY[U5\`3 +MOJ]Y=VM]]HE)@+H8E!W2#N^>O?FFZK'8>&#%&]C,UXS"99!+M(';I^=#M%JF +M]R$E>USJK/PMX7&C:+XKNM=BO-)NU'VZ6W8R&$GLP'<5@?$2W\- +MZ;>V=OXWZ(M)34;N +M4ETO(V,?O+G[I'?D'&3TQ4=O>(C);6%M);6B/N4,V]V]R3Z<_X5B^"U,] +MM)?7\$3!>,(,L><``<@?X"NCM+)!*9"TC-R5#$#Z#`[5P8BUW%GL4$[)FGO(Y"]M&W4R[OH,UI75TTA$!A,85L/*3DY]AZ50NTFBOH+ +M>V*X$GS7/2BE8=X7#1>)YKU2RM;XE9U.&49SQ[Y`'XUW'CRX +M&MK'J4DJ+<76]+F+G$4JA^``,^QJ,1>_W&M(JZA$&TQ[ +M>%&\K +<%P5QQ@C./Q!_"N1N8D@U2Y<`KY4S!7!^]C(P/ICK7HFF6D;V4[R/\` +M+L;)Q]P[3SCZ<_C7)6FGQ'6;FRO8GD2S4RLR-]_'+8]0Q(%31E9-LW6]C0U7 +MQ!JFJS:!<7\K"]BC7$P^^55QL/X9(_"O0/'TLVK>%],P$W7CA'=&&%+#=D?[ +M(=<\=N*\WO;*ZOM0EU"X\L3.JB.%.%5>R#/8`?I7KFL68_X1[2_,38A*.OL1 +MD'\?F%<\WJK';&UXD5C>O%IBI))]P8;)[CK264#ZE<>=.^(06#R<-@9J/QG;>']+\&1SKK7VS4(6::^2&7?&B;>(\^I8@8_I7,?\ +M)(MS>'2IO#EM9W6"6N;D;U3"==H^]SVSS4WCK0A'H'AO3K"UDB%W;R:E?>8W +MSS,#\H('`!<$X[9`YK:M",8N35BIT*M*,95&UVVUT?X'&:5JVJKJPNHW\NXC +MG209Y`"@$!<]!R/\FOHO3;]4OK'5]\BQS6XV`'"(Y//'Y?G7A&BV/VK3K2_E +MB9=S+&SXX)`''Y']!7LNF6QFT.VCL6>;[,59PO>,\-CW!)KYVM4YJEH[H*R5 +MDY'L$5[:WMFDY`2ZB)!([GO^!KYN_:*L[);[[0ZO!JH1I()U;:)`.'4@\-G* +M''8JW8FO=E7RK1+NW)^<#+#IN[G'Z_G7EW[0#V6L^"M5DB8+J&GVDLX"DC`V +M8<#T.#^(Q[U[E#$MVYCYB=!)-1V_(^/?$]_%#J`+QK*8RI8.3S)?):SE>$M?A%IRG(2:D'LB'M@9,_+)C!%=Q\)OBIXB\.ZI!"4:[ +ML5PUO3$T=KN] +M,2A9UQB,$GDT2E%QO_2(;Z+6=K+'YD[&9LKQ2 +M_:Y+B.*`;'=AE5'09'7ZFK^E^'];L=-CO9K;_0FN%#O)@;F`Y%3>+);!=EII +MT2K$V`[C)92>M<+I*C4=2"WW,J?+&5D1Z=?:E`]L+JXE%WLVVTBG<,=L@=_> +MJXO=5FUF2UL9B+B;#.[GYBR\]:LRZ/#':VVHVMW,F4)$K#J1P1^'-93Z?J#`)X?OK>YW^9<WX5V/@3Q5X?\(Z5-<2P7-U?S3EA:/$!& +M5!^4EC_2N&DUR]4XLG>T3:!(L;,OY5MD[DSP/F';'Z"N-7QC#!J5QJ6;I)Y1&ZQG;M. +M/7'0^G%<%!-Y<$UNT:MY@&">JD=Q4VDA)+R..=@(78*SL,A15.C&]Q/4ZGQ/ +MXLU?Q-INH37<^?/E61HXX5'3^\1S@`"N*B($@#@LN>0#U%=-X9\4W.@7UVNG +M65EM7%6Z"L.T#4SIFJ1SH +M95MV?;,B.060]1D>U;7Q42VAUZ."RU`7]J(5DBD$F["L,A?PJE/HT8M"XSEA +MF/!^]D<5@-'(K[&4ALXQ[TH\LG==`9WOPR^*&K^#+>333$FHZ//N\^PF;Y&S +M_$I[&L"Q5M2U=[I%\F&:\O!'$ZQHPRS-TQ7@5G[S1[=%*4;D7B

L.!K(@CDWE'&6/0MV_ +MI4%\YDMN02S'D-_>Z5A!.R;.V*3T0OP_O;BP\:6NH6V=T(D9E/W77:05([@@ +MX/M7HNNW=GC2?V;)'?!DDEAP7CSU +M4\'/USC\17>C3AK=D)=.FB,I3-N^=I8?W6'W<]NV.O(K+%RNUV-J4+;C_#KM +M'J8MKAU^='#D_=P^%7^8;Z"H;HM8>,](U**!7MIHMKQ2+E3DMF-O;YMI_&J5 +MNTILIK&YCDBU#3)-ZY'+1YR$/KQD@^QZYI+K6A%XB6UN!Y]K'*DKAF/!.2W/ +M7N*S6CLNQ:O>YJZ_#;MXBN9M/B=-*M85N]K."P9G"I&W/S!7./<+FN_UJ_MX +M?!MDL\_+W(53(,#*ABW/88!_(54T_3[:2_\`M>%_-1FQ_ +M`WS#\17+_%G3M0TOP_IVEK<2/;R +0?9[7&"MPYR\LN[V!"]?XO8TX1YVDC3F< +M7YKH4*LBO'C_"OF31M9U2R"FUO'*@#Y7.17L'P^\4W>H: +M=)]IMG+6X!D9>1MYY_0UM./L/B>AWTKUH\Z.]L=&FU2_5%6).1N<]O:LS]HQ +M)](\1Z'=6K[H+6R2VEQ[L6Z>_/Y42Z_>V<'VBVMYA%U\PJ0/K7-^.=UC)O1?J4=#8R:4R1R%H8K@ +M;=O1,CT_X%7K'P_U`Z1<)++&)$=<-&W0CD$?J:\K\&6MQ:;&=%6,^6;A2."6 +M(Z^X%>F6Z&!HX7<.&D^8(,9!/&,]Z^=E.U3GB]4SIKQ3CR26C._FU[3HM':& +MSCE21)-V^1OE_P!T>H(->%_&K68]&T#6I9(D-SJ$`C*@EA'#N4'IW;D^F![U +M[G-I#:IX>']DP*RK$/ESAI1QT]AC.*\'^-5A%XNO#9Z?JFFZ-?Q6Q@N['4&: +M`B7;L+HQ&QD9%`P3D?6O?PU&52495-CYJK5C",E3W/!];\8V]I!>6VDP131Z +ME;!+D36H18W'>/#$].YZ^@KSG&,5M^);86VHM:V\B7%O`/),\2_(Y!/(/.>/ +MTK%=2C#G-?64:<(+W>I\S7J2G*\B1'".LBJ,@Y`K535VDTPP3P*RJ_!48)SV +M-8I;))H!...E:M7,;G7:#XGEL;I%TZ22S9QLD<-U6O1?%MG=^'&2?2]?@NH; +MJS4O+;8.X'G!KR.9M'.A1A(9DU$'D_P,/6O2O!J2MX7N6NH=T,4*O&X&[)]* +MX,4U!)WLNWFIM>,=1U/7_#^E6^DK+/;P0[IO+4@-(!R2.QKGO"LPU"6 +M9[BX%H(D*%#'N)]<5>N?%"QR?VGI<3VZ+$4D6$@8/3##H:\[_MB^L[UYX994 +M\UC]#S^M*G"4[W,TO=LCU"T_L'3;JTCUW4;BYL,LYMXV..F`0.QZ9I?"D6@7 +MEAJGEW]Y:W$B?SKALM(J\L@SCGTKEW3V\6T)-NQ\K8X//8UPYA!2ARPDXNZU_1^I2E*,;=?,O:C;0I>&_.I)+$ +MC8A!Y`?VK8DUB73-;@.IS0W@RBS>4P*F,CG`^E<`=82^TY+*=$6XMR6WH?\` +M68Z-3M2N].N[>&1+L)<,0)(`,,OX5LU/536[[$4ZJZ)I8U9YM&N5NH +M&7A1CY!D&BN?\#6SB%[BTU&0?*$>/^1_G17/-X>4KMV^=C)\G<\'P3TX%*!M +M^97YSC@\TT<&C\*^A-T!Z\K$RKIT_R%R,!G'W@#WK.U^ +XTB=K7^S+6>+9'B=I'!WMG +MJ/08K3UO5+J;P5I>GM?-+;1N^VW(&(V[G\:Y8=Q4Q3W;"YUFC:KH(T*YT[4; +M20R!!+ZU&IR-=0Q".*/>K*-K`9`ZCKU[_I7('H&&<]ZO +MZ%:+14':1Z*^H33:I#/'>PR;&VQJY&W!Z`GIT +MKH9)F1P^["R#$FP_RKEO#.F6R0+D^9,BJX8C(P3_`#Z?E737-U8_V<_S,94& +M8@1U/O[5X.*:O9'LX2+W.:U*?;D)R"Q(/J,XKHKH+!/(AMWL9HBT+AIHB>67ZUA5=HI+<]&$=VSE+E)(3 +M*6/SXVD`]>>M=3\/==?3;KR;AV:T=@2H."&SC@]L]*R=6DMSJ=PT6Q[>3YDQ +MT'J!^.:O^%[6-I&6W3&\;AYI!:-?Y9]_:BK)2I/F1M&-I*QUOCCQ!ISQ0SZ? +M$HN+A&3SI5$897WPI(./3-8.L:H]]IUXFGQS0V#(1.%`+$@GUY';-8SI.FU?=LZWA?9*]3K]_P!Q +MX98:7HT5_#]NO%DCEQ@*/+W`]#D`@#\:]-\.Z9H5NKR6$-S:QRR8+.H9&0>H +MR2?7&<3\N`.367K?P7\26R+_ +M`&/JEI>6J$D1L#&^TG.T#[O7W_"C%X3$3A>"YC.&-PD7R<_+Y/\`X%T9MWI8 +M\5V21V/V-`%`V)*4DP!UVD<].@KE=8^%MCX=BN=2N_$$UW((!+;))%Y6^7.- +MO/+@'KP.YK;L].NM*U1(=1MQI^H.?+C:X0*@;EASTY(Z_6J/Q/U6YN+AK%;W +M[7>0H0$SF(%4SM!ZACD'].M>Q_SQ7*^&M%V:/!/JNHRN;:V+P6 +MXW8;/+$;2#WR?8UG>(OB''82PLD;1QI&3CS9,*%X&-VX\G]1]:Y<-!I^ZKW* +MQE1/=V2+/PV^*%W8:G/X4U^WOH+A"RQ7*IB2!L?,-I)W+G)Z] +Q6-\4O%6GZ= +MX^M+Z_,%Q/+I[+YLAVK-\WR-D\;OP!K:\2:F=2\&S>+[C[+YC(L?EJY4RLI( +M#.>.Q4$`\XQVS7S=XX\2:WK]FFIZLJO!!(8H0D84*?3Z5]5A*4I2BUHD?(XJ +MK%1E&]VR[JD\&N:5>:;`UA8Q23L^<#?NZD9KR:\@>WN'B<[MC%0PZ'%>C^$Y +M+*VO!+>VJS33QD.L@($8/<53U_PJEYJ,<&D2+,LN64KT7O7KT+0NKGD5)W:3 +M//JDA0NVP$N=)F@,H<[FC?854]?#SPKX7OHO$! +MH+2W69;^WO2KR!/D9"?O!NX//O\`A7!3:C--=K;*\S%P!D-QBNGT9=1LQ'*+ +M.2ZA##;!)GYA_45QNC5A*ZD*326QJ)::%IGF7&F&>.%0$,C_`/+7U!]1D5-8 +MZGIVKZC?>9/%:>9;K#L5<1MS]X_3^M<_JWB`Z?<23FWBA$QW-9MR%ZC_`#BL +MG3=8@L-1-[$//7&YD"Y&#U%1*BZD)::O]!?&K%KQ19>'[2XMY+'4\S"1DDB' +M\(Z#'J*YF]O(QJ*N5W,F06]:TM7M7U6!);*RE:1COPJ]C6CX"_LW3Y+W^T=& +M-]>>65BC<\(<)KJ[: +M^N$TQ-ID0R<*?FQ@$_6BN&K0PTIMM?D8NE%NYY8ZLC,C*0P."#P0:0=>:?<3 +M2SSR33G=)(Q=F(ZD]:83Z5[!8X%>2!TIG)YIP7`)IM`AS%#&N`=W.30S;E4! +M0,#DCO33C%.!.W%`Q[!/*&TG>#S41SGUHR>:"2!B@&`)VX[#FKE[875CY#7, +M847$8DC.%?EQG.![>U)@CL_`^IS+;NJD?*-FT\ +MD`YSCOC_`!KJ&$+0R$OF8MC;VXKS2VU,:9JWVFSC!B!PT9Z,.XKOK+4K#4+5 +M9[4.LKMD!OX<]1[UXV-HR4N=+1GKX.JI)0ZH1H&>)&53M#;2?0GI4DT,]E;$ +MS!FCD&#MS_.DN+J>W4PQXP#\W^T16\-5L;_PVL4L"17L)^]CH>S#T_EZ^M>? +M*325SVXQ=M#D?LKR.L<*.C'D1MR'=->6*:T6Y^SS7`\LANH]<>O';K +MSQ6/X>O!'?,EVNZ3<<,3]_OR3WJ2XU:6WU9Y`0RDD`,/RR/445>>4N5>II3B +MFKB:G:W?AJYFMKR+$ZY\O!RK@]&![BL.$/YH?),A;)/?-=3XE\06/B/1(DF4 +MVE[8C,:EBT<@[JIZK]#Q]*S/!EJM[XEL87&5,H)'L/F_I7;0=H.4EJ?0992C +M2IN[9Y;R<>9-(Y+,2>Q)_P`YR:[GP]J$6FSF9XP\B@;" +M>B_2LR!%7&.*1^&(///%>=*5VVSS)5'4DY2ZGJWAOQ>9Y!ND:-BP]/7I7JOA +M_58[F%59NO0U\TZ.VQU921SZUZKX'U!WC0;CQZUWX*JX,\S'86%:&VIZ-XG\ +M/:7XBTY[/4;=)`0?+DVC?&2.JFOF;XJ^'U\-^']4ABTD2ZKI\XF:\5F7,;`; +M2J`X/W5XP>_I7U%IMP9(P&(/O7B_[5F@:EJ-EI][H5Y);ZB4>+REX6Y52&"$ +M]B.2/R[UV8[#0K)36_YHY,AFWBEA:C]V7X-=3S[X;>-9=1L[6>XTTE(A^^@E +MCP#QPRY4$@COS[XKR?XH^*9=3\1SVMKI=G!'9RNPFC57+H"-I4$97&#D@\YZ +M5W7@G7VM/#.RUAMK2\>X\B<20;W24]L\%0V,9['KG/'G?CGQ+I6O>+K:+0(& +MAF,BQ?9Q%L=IUA-)LUDN-/E8SVY8D*Y&.H[9Q6[X +M0^']C#',KW1-667P]!!'#&D<$TXB)VD?> +M(%>I.4:*O+;3U/AW[TKGC&NZ3J7AWQE/I^O6WV>01D1J6RN/K27&HR7%K!I% +MOY5G*H8FZ7`#KUQ73_&33=2\51RZ_]=?(GK%Z&5N9FSI=K;7&LP-)>K'$'P['C)]:I>.=)-MJ$BES+\_[M +MUZ&KW@_0M2U:-)1;.T+$CY.>E2ZC?V]A)#8WFERMLD*,A&"1V.:A5)1GR[@[ +MIG/G0H+/3+74);F*YDF?:UL&^9>?\_G6SX:TW2X[ZYM]0LF663B&,]&PF9"&,Q';T]ZZ/7/$<]Q=6FAQ311:I8*MNDL +M"@)(H7!)]Z\DUK76O]:-[`955@!ACSFM:&\L+FR@\J&5;X-_K&ZFB%*5."3; +M;%&'+%*]SI/%GAS3(D-QJ):74;DJ`JM]P]ZS8?"MSI7B%;"+%QYJE=JC=GC( +MI;*:\N+Y9[NX5Y]QV97N!7:Z%<2Z7K<=Q?[I;B[)25@/]6?X2I'3M6%6I.,= +M'H3=Q9S_`(G^42O,C-\N,D\9]Z\PFTFX>2[1@&2(`-(AR#[UR1:;!O`'A_5%$M]BNR#C**:'&*:/`+B5IV#;5&!VJ,@C@UZC\8_!FA:3I=AXE\,:E'=Z;>/Y8 +M0$;HB!G##KFO,.7'XXKTT[EB88CKQ4LMK/#&DTD+B-QE6(X-3?9E6"-OM";F +M)^3^[S5_4;[_`$>V11OAB0*0IRI/]*3EKH.QCW+1-+F)"BX'!.>>],!JU++% +M)&X6':3]TUH66C02Z,U^;R+[3'*J_92?F=3W'TIN5MPMJ8@I68L<"F*UA."!VH4E6##J#D4]HF7`92N1D9]*8! +M\V*`+9D-V"\GE1F)PV\G]!533M;N(+[[0X1W; +M[QV@9]^F,UN7>H)?3-J*6H@5E,1*L5#^N.N#7ASA.FW?8^PJ86I2T,NPGMT% +MS')%E^3%)P0#Z?E_*J&J-$;H>0^Y!P"?UKHM/ATBU@,>H0L(;E"%=90[JW8C +M`Z9Q7*R`)<.BMD`\'UK2A%.=S;`TG4J*,EIU)VD$D21A%54]%P6/J:VOA^ZQ +M^++)FX&]OSVFL&/@\&M#P],(-/ZUU37N-(^GG!>R<5V?Y'NL4 +MAZ^II96/!((S5>"4D`%C@#`![#K_`%J9OF&.IS7A(^1N:NFMP.]>A>"YB)%! +M->=:6IR,GO79>&IO*ND`XR:[Z#,YZH]HTB7Y1[5YY^TQ)=0Z'X:N[1G5TUJ- +M'QW5HW!!_2NRT.Y#1*<\G]:POCGL;X>27<@^2RN([@_\!S_]:O5E+FIV.#*U +M[+-:,FOM)??H>%^(=+L;E]1>UB1)+^T;S,#[TB]>$&NO[(2:Y;2Q7UD(+V`':K2XX('0\Y_.E)-R +M@K-'!:MGS`O3'?WJ +MISC2BE+2_4Q=HHZC2VAM[BRL_#1?2KF.-OM"S'.X^H'J:['7(M*U#PVS7PMI +MKJ&#YGV;9`X/<=:J?#O3_P"S)KCQ3J5N^I6,2Y$YCPS/CC`]C5CQ=H6M7GQ& +MLM4U!$LK&]T\S-''%D$#!`;T/_UZR6L7RO4F=YNY@^(=3T6W\*Q:+;3V\,%Z +MJSR?,,H^!D?Y]*X"ZTK2KK2VO4U$.\>1]G8Y(/KBNM^(MQX22.S%K;JLTC%9 +M588\M@>O-<;XO%S<7T2:2(A"\05V1<#-.ES0LF]ON#K=')C3S'J"*[K]X,0* +M[3PI'ID^H?8I2(&8Y$Q&=H[\5E>&]#O+[4BK12;K9/F9!G![&M&STK4;'Q(Y +M4[VE!1@Z8&".HKHJUH7LV7>Z:.FT1]!GUJXTS5I#*L6/LMY$,+Q_>Q5[Q3HE +MX;;[;H]V3';@>9O;CD\8JGJ7A0:1")M*N!>K-"3=1D<(PS@@]JP/#FLROHEW +MH-\CY^T!B,GE>*Y<1*T&[76AE-6C>USI-+B>[U.*UU6ZNXK5@D +MCT+7KE%M&FLWD`N8)%X=#T(/M65K^@V^C#3M9T;59;^)3L9G4XC?'0^HYKK= +M7T+Q!=L;Z3R1'):+%QZ@45YA +MW\V2*PA=[1HPJK<\LI/4C!]:J:<980)S;B>$-M9#WIFHQH+^4QV[6\1<[8\Y +MVCTSWKK/!&F17$I1;ZU@#XB9K@CY58_>_"O5E))7+L6K,<1CM[ +M5>TDSSVT^GF%OL[L)&`7+9'8&NR?0;K7+R]_L72K>6VT]PDDT=CH,YYK%U:=%U^Z;37/EI,XA=.Z@\'\J[FXMM`,,[R)<1NX/V94'RN +M?Z5S7AKPMJ^I7-WWE''DL#SGUR*M_"CP6GC#7H;2XNUMK4R!)),XVYZ&NN\2_`[6]-US3H)KR +MV$6I[3!,#\C,>J^QYK6T;P8?A[J4MSK(BF@$K1O!++L$@`P"/QK*I644[;A) +M61Y?\0M"C\/^,]0T2'4%OK:SE\M)U(^9*N+X/F;3[C5]*D6^M;/:\N.2`1GD +M50\7:3]+X5\3WWAVYN;<%U@N(_*FBS\I/N*I2E*" +ME%@M2I=1"YN!<30^7&WW5`KUKX?>'% +NO`%Q:*FU[I'<9_O9RO\A7-6&FV/B3 +M0KG5K.*XWV3`/&@^1?0UZY\/;?RM'MD(SB,"N+$5FXJ.S/6RE6JN?8\&.5?! +M!!!Y%7I+]VLEMPI&#G=GH/0#M5_Q[IC:5XMO[8KM1I3+'Q_"W(_GC\*QL<=* +M+*239^CQA&M%-EB^OWN%B.TIL&"%)P/<55!9B7/4TAX-/7IFA04=BJ=&,970 +M]&.#711T.=GIWA>Z\R%/FH^+^)OA5K@*LVV! +M6P!DG#J:P_!LY&%'K^5=#X^"S?#O7T;&/[/E8Y/HI/\`2NR,M+')%]))'Z%Q8_8975EWM^+L?%6K^%-5\*QE=65[VQN;;SHYH?F +M,9/]X]JU_$'CC18O"WAN[\.:%%]OTY5^W-(N5<@8Y[\]:^F/CO\`!S4X+/4- +M:\`1F2"Z0_;]("[N/[\`/3W0?AZ5\51:#?SO/8V8G2[DF\K[*00S'.`,>M=* +M7*VY;_@?BLHWC=:HZX^--+U>UFN8=`MTO)]R.C<@L>X-58?B)):>'%T"VA-A +M,GRS;3\CFN0U[PKXE\-2"34=+N[10W$C*0N?K4OAWPWJ6K;KBWMI;FY+9BA5 +M& +M7CN+[3Y1`S_+ZD5-"K3=X1T:'*%O0K?$>V>R\47ELFI+?VZR$QS(V0P]:9HO +MBJZTZV2!(H716#`.N3D4FH06%TDE[`#;0`8$;=JZG +MXZO([>)K#1HM-::%8KAQSYGN/2NV\&Z@WBF2TT>ZMH5B"$M=!@),BOGZ\U&\ +MOEC6ZN"RQC"]JZ7P%K(L-9M[DK-/-'*CA,G#!3D@_E7GXO`QFE+K$I.RLCVO +MQ#HNM^%M:DT."1IX+B+S%689*CUS6;I[Z>IEFL+)-2WAA=((\%)<9R/88/YU +MS7B/QKXG\6_$A-0M@L,A4A.4`/#9%9J +MG43:;TZ"Y;*T7N=LMOXEAL+>S:TA%I(PE_>(2@7(! +/Y$5UVL:=%J0L;4ZC]B +MGB3R8T+X5U`_A]>#6?H7BJXE\#Z2^I:A;75K.YB:WD3$BIC^]7">)9M3\2>) +M/[-LYI1INGN7B#G+@>F1SWKEA34(-QE_7_#F5*T7HSH?'VD:OI@MX]-66\1N +M7*IE0?:BMSP9IWB^SL,VNH17E@W$27!R4^A_I16JN>'>&=4\ +M.GPMJ=AJBC[7',LUB=N?E.=ZYKEI+V-HA$%*KN)``_G46LZ;<:;>R03HZ.C8 +M(9<&J?F#`)SD#%?11@K\RZF]VM#N?A;XK7PIK+75U;#4+)SB>V8\..Q_"K_C +M6WTK6O$UQ>ZXYXKIO!>O:W8?:Y+"^\N3 +M86=7.1*#U!]:F<$HW;".]D>H?%?XT6OBGP1X=M[."6#6]/0BYU9UR([JQ$ +ML99[@/\`/QRQ-9\C,[%W8LQ.23U-=A\(/[+E\7PV>LZC'I]E*"6F<#`8#@.K +M>W\/R0W%L)A&TI3[^XX->^^$<_9(U[8KRL1>4HR:M<]S*4K29SGQKT!;S1EU +M:&,?:+/[Y`^]&>OY'G\Z\9'(KZAURRCO-+N;23!6:)H_S&*^8IHG@FD@D!62 +M-BK#T(.#3AIH?;955YH.#Z$3#*TD9[&G`X--D!5MPZ5H>F]/>)L<9%*",TU' +MP.*<61NN0:#H36Z+^AS>1K5E(>TZ<_CBO?=%&Z,'VKYSC8QRHZN&VL#U]Z^A +MO#;M);H0<`BN'%+5'BYKK.+.FMP,#GD5>C;+"LO@77%D.%;3;@-VX\MJYKPNG*MT!K9^(,AA^&GB.1>JZ5< +M8_[]M6J=C"2O5AZK\SY+TR_BLK=[AE4(B'8A[^@QWK[#_9WT*?0_AE8?:T*W +M5X/M,H/4;NG^/XU\=_#'0K[6_&<>G:A9EK2T=)[H./N;3D+[9Z8^OI7VIX>\ +M21;$C;$8`QMSQ7=A(7G?L?1\<8]XBE'#4N]W\ME^IVM?-/[8'PZTJQTI_BGH +M\PTS5K"2,SB)0!<,7`5_]\$C/J.O2OHZUNXIT#*PKP?]N+4V7X76 +V@VWSW.H +M7BMM!_@C!)_4K7;52Y?>/S&DI1G9GS'XZ^.=WXP^'K>'M2T^VCN5"KYP7)D( +MZM[?2K_PU^*]J&T+2+#0(+74[;$:SJ,J_'<>]>%W]I^I]1^&-4%WKVK:]JFU+JQK?`G4;#QYX-U/PGK31QQ0#&'FDY`P#6[IWP[\37NBW&K067FPVY&]%.7.>>!7L?Q)^%?ASPUI +M>0\LUXH#(-NUL+I2\,H6*0=#VKWC6_' +M?AWQC8:CIU^LRW,XS$(/NJPZ`XKQVU\,6\^NI:7DSJ[$CY>K'M73*K%7NP46 +M=5:Z.^@/;7<5UGC.+3KC2-*M=.MX[:YO6P9G;(08R=Q[]* +MXOQ+8-96J6UA>7.H7J)F='4DQXK8TR]U74O#,=E#H,;ESN63K@@\Y]*\ZI.4 +M?>MH_P"KCA2YG:Y#I=MJ&D)M^V6]]"DNV.$\C_>'Y&MWPD[:!K\VJLUK*S1L +M&AD/'..!69<^%M=\,^&I]=O;BV>&6;=]G3[Z\"%SD@$\D5E +M",Y==%UL5R)ST/=(_$;S.;BSMY/(("E(P2N[`YXHKA_"_BU_".EQV2Q)>0G. +MXNA/[SC)!_"BJA&,E>3?W#G!)VL>)ZKJ-UJ-R]Q=S/)(Q^\QR2*JK@8)/7K2 +M=32"O;2L8W%0A6SU%/(5]Q5B#V'K49Z8J;3W\N\B&_`&MSZ7'XHN&L_P"Q+J1X +MYIE?=Y+#.%<=5ST!]Q6GXC\5>'/"]QJ&D^%3=W$,WE2,;B(*GF*`00IY'<9[ +MUR5YU+/?#FAZ.T#5U8;9(L>4X]2#R#7'6-S+9W*W$.`Z'C/2EA56 +M5*U3XD3#FY?>*)!!((((/(-`.*=,[23/(YRS,2?J:;CBNP$:?AA-_B+3AQ_Q +M\Q_^A"OJ_P`++BV3'I7RAX4./$FFYZ?:H_\`T(5]:>&!FW3Z5Y^,5YQ/>RGX +M9&Y<#,/3-?/WQ3TPV'BN:95Q%=_O5XXW?Q#\^?QKZ%9A8<#\OYU#CJCZ7+:CA6\C@OH*=U&#TID;9'6GYH/IT[H;Y;+RN"/ +M2CS,<.N/PIP)'2G;LCE0U`U'^5V(21C(P?I7T#X+F\S3+:3.=T2G]*\`<1@Y +M\O!KVOX;3^;H%DP/2,+^7%D6N#@]S5V(9D"]<]A6=8ME +M5S6MIZAIU)]?RK.&QY+.O\-Q;4CXK0\;VESJ/@C6M.M#_I-S8RPP\XPS(0/U +M-+H4(6)3@9^M;JP[FVXR#Q^=:..R.*I4Y9I]CR;PUX8A\):>-.W)+;RIG"YX!-=-: +MH\/H@C6>*DZDG=L[_1O&,EC,L4[_`"$X!S7A/[1'C>X\0?&&QTB%1<6-M$D( +MC###MRSG/KDX_P"`UE_$CXE6-FKZ?I%P;F]?*^;%\RQ'V/=OI7C\"2S3+(\\ +M_P!M9\ARQ!3WS6E*K*I&\]CRLQG33Y8;]2I\0M1']MW5C;6ZP01S$[#R0?K7 +M.6%K<:ANKUGPW>V#7$MUY#ZGBNF\;7^D7'B:UN8&5+223$S8R4]ZUKKP;;7FCK?64,MQ<"3*83 +MJ,]>.U-?%&I6K_`-IZK/NR`(\_I]*RKZ'4;"6QN;J* +MZB:=3\SD\UW\O@'4)/$$.D>)(H;$30>8DP/W?K5#QG<:AHS)X(KJ&P>.; +M3+V3RE>1=P"Y^\/?K2E.ZYFMARO>R,_POK.KZ0;NZO\`]]+*-DN\<[:[K0]8 +M:.2UDLD*6LB#>HZ[CC'ZU@_$#19X=8N)]/OH;VUE3?A1Z^E8FFM)#86[_;HX +MEN?D"Y^XP/2N'%4(U8NS^XWP\G%WMJ;_`(BN?$>LWMY8BQE9F.(\G(QSV_&N +M3TK1-1M]=1;JS=)HFR\6TC\13WXBBMX'_=C@%OQ`I4)3]C9_U\Q2BXU-5H9TNF_VEI=E;V,4=H\*DR,^ +M/F)//XT5V$UEI%K^[>=]I`92>^:*BU1:70.7\JT/FKPAHMIK=[-:7.JP:?(( +MBT+3<*[?W'?!EU? +M^$W\56-Y#*+ +.8K<6I4AT48^8=B,&N-[YKV'X,ZO#I/@O60VC/?271>$2!_E3 +MX^$VJ^%XM/N4NH[T7,4\/"R1]&1^>><$5YY+ +MI7B#4H;C59;&\GBC.V:)9+>`AYHXN:;?:3\2M.N+31_*L;:8!#;03A"93UWJ1]T^U<:Q,HN[CH]@E)_$T?*2$;N +M:D\Q0<9JYXGTV32?$%]ILJ*CV\S1E5;4_G7UGX9'^C +MK@_6N'$_Q(GNY5\$C=;[E>!_&W3A#XK%VO2ZB#'_`'EX/Z8KWV4?)BO)_CAI +MS36%O?1C<;:0J_J%;'/Y@?G42TL?0X!I5DGLSR$2A!AT*_3I4@FC/0@T`9ZT +MC0(W\(I:,^D2JKX=1XD4FF^;LXS31;@'@?K3UA&>11H6G5?00RLP^4`_A7K/ +MPCG+Z*L;<-'(RD?CG^M>6J%4<"N_^$=QB2[M\C(97'X\?TKGQ"O`Y\PI-T>9 +MO8]HT\$J,UMV!*SK@]#6%I9^0#-;,)*X('X5E26A\](]&T!R84(^;IFNAZQ; +MAUKE_"?F^O&>17J?A?:EHJ*?ND@C-;Y/RUZ4J<:T%S'C.K/# +M5&H;'Y6:WX;N_"?BO4;?5(IXH[&YE@CD(X,B,1GZ<5DV!OY[M[\3+N).0QX8 +M?2O5_P!LM;K3OC=K%G/)(UE+LN84[#S$5C_X]NKQ9;U&^5QM4+A=O441BVM3 +MFJ4UI%61DVF6YK>2YT][LR1@Q':4'>N\^$WC +M_7]"U7R-$C2Z>X181;7"[P<=,=QWKAO#>F3ZWJL=M'\L.562X[*>H/YUC6J**?&W#!)#G>17HD7BC3+77;ZX\07,!N( +MQM:(<`^C#U%4-8T:ZUBUAUGP]!;DS'?YCR<[1Z5QUE)J\7K^+%&34KK8^=]: +M@U*YG@T:6T^RNC$$D8#GUJ9-2LM,T@Z;)?$L=JZI +M%+)N".<#[O7'O7FGBK3I=)UV>RN"6EB?#Y.<_C731Y:L4F:F3_`/JK&%*%&;;Z_P!6.MU95J:26QT_C>Q2^UVUO+2Y +M61+B$`$MPN:=HS:5X:O"+V56DCPWRKG)KEIKJ?R-+N(9-H126`_B&:VIVNK[ +MP]=WW]GQF+("2-PP/IC\*R2:2C+;_@E5(*;O$]<\4/#=V6G:C&-S7,(=D*XV +MY'I17F6@>+]3U!/(U*Y4+;1K'&7`7..**Y<3*2J6-*5-#\IZ$G/YFLCPY\,/%^I^(ETUM+>WFCF99A*=NPKR0>_2O8 +MI2Y5[SN>/%.VY%;>#?M_@T:E9QW":E;R;+BW="`RDD!A_(UZ7\'M,%IH=]I& +MNPW<%O-'ODN@N8($YVOD= ZUN^*K":PLK:S(M8[B2<&6-XR)9%*9QD'!7* +M_KFH=`U26PL+SPI!832PW419WR-T@4[@,$_=KAGB6VXO5?UH3S7T9YQXV\.7 +M,4NMM%XA3*"//#9Z7PEXH,UGJGFV=L^/.@M"%\S';BN;U;PSH>FZ'>ZM9Q75M9VES)'$T[;65L +M<`L/44Z>(3@X):C@VU9G,?M!WOA#5/$\>I>%)'RZ'[7&4P%?.2?Q)KS#J:]F +M\(6'P_\`&/AVW\-6,8TWQ`=S/=73\W#=0H/2O)=5L)=+U&[T^Z4I<6TS1.!S +MR#@UWT9;QML7N4\&@'@TY<'.3BF\"MP-WP"AD\7:8OI-G\@37U;X:X@7%?+? +MPR3?XTL!V!8_^.FOJGP^@$">N*X,2_WJ/>RI?NF_,VI`01ZY^M&D::E)G +MK9?FT:LY4JCU3TZ71`"0?TS6K'\+]>9=S75@H_ +MWF/]*Q>)I?S'L+%45O)'#;C(W5S.T<:G9WUWF>&2$W#%5&=R@G@5UUE> +M>;'M<8;UKCH`\/B6_59`-S*VWZJ*ZFP8N +HR!FNNA+2QY^,@I)2:/C7]N+2[2 +MX^,%E)/M%O0"L,NDB +M/=ZE97R/_'A^=?)\N-QQ6]-.[=SRZW1^0TF@9(H'2IK:&2:011(7=N@%:[&* +M1N^%KB6WMI(HBN9F&6S@KBK_`(B\23S31)'+*MW"X_>`]2*Q="2V@U0Q7Z2; +M0"-H.,-[UU^L^%K:R6.]C90X7+J3D5Q5I4X33GU-DTTDSUSX'MHOC"UO+;Q& +M]O/>W"JBIY?S@=-WZ]*GD,_@'QTV@0)+>6T`)A$I/*-S@5XSIUSJ7A:\BUFS +MNV@E90\>TXKVF6$>/OAR/%FF:G(_B*U&+@,>X'3%]?/VIW5U=ZG-<7DIN)9"=SGO7I7C#Q+J +MNL^$+:RU"Q1I;64[[I4P6Y[XKC[>UTZTB^U72>:DJD8'.PUU8?EA!6]"+2;= +M]S&1T,<46U>X:O6;JZL]9^&5K.7C6:V(1P.LF./Z?K7GL$-@L$5PL+RG!++C +MM740Z2UCX%BNH+F*2.]E\U8E/,8_R*SQ/O6?9G506Z)[+3%?P[9ZA"L<[O(T +M2P#EL@FM72M+6ZM&6YG:$JPW1MT4_3ZUE6MRD.B6ESI4N8M5N&FO!&-Q5 +M5]LT5T7B_1]8MKDNB+>(7(\PMU_SBBNR%2;BKR7X%2=%,]FEO]*(:"*6TMIA +M!',#'$&)*J"7R.01@<^U<';^.=2O-0O#+=R>=*XVWA8*R$9`Y')&.M5;JWU1 +MY]4$NCB[E6Q'V:Z@N2A#'[QR.#CYEQZ&N7O-5TNSU]#@ZGI6MZEXD2W\2ZE';R&.-TN'/RQQD?*0#C''\ +MZXGXDZS::3=/:65Q_:,L$TW\4WUUI6BK:VDZH\<+'(C?:-RC'\);)%8X\9W9\, +M7VC75W,;6\E,DD)^96<=#7/OH42,IDU!8CC),D;*"?0'O5%H)3+)`(]R$G:W +M;ZUUQHTF[Q->1T^FY7TYF%VC(S(0M=5U,K&1_N-O4?7:: +^I=("QPH17R+X3OO +M[/\`$=A=LQ"+*-Y]`>#^AKZH\-7IGA5"P(`KR\:W&HGW/>RJSHR2Z,ZO&Z/. +M1@5ROBA3Y+DUU<7_`![XKF?%$9,3"IJ_`>G#1GSIXQU6&'5-7L6@7S9"H67O +MC:.*N_!'4C%JMSICGY9T$B?[R]?T/Z5=^+OA15T*#Q791G"W!L[\#G:Q&Z)_ +M^!`,O_;/WKBOA[,],="?FG6,^X;@_P`ZW<(U<*TNWXH\";E1QMWW_!GT +M]I7R(J[F;``^8UMP#<-H`QW/<5S^FYR.>M='8=N*^;@NA]#S'.:W!Y>H!B.& +M%2VJAE\MNAXJ[XFB&Z-\=\57LXV"X-9N-I%\PGAQBJ@$\J<&NQL&(`/I7%:: +M3#?SQG^&0\>QY_K77:=(2!D?2O4P\BGK$Z;0B&F//)]*]%T/(1`Q/2O--'E$ +M_U&UO752\:;-V.<9]?QK=L[7R``,8KHH4Y1DWT/)Q=>$Z44MTC +MYS_;]T/[5X`T?6UBW?9+PP2''19%R#^:?K7P[M?I]\?O# +M@\4_"#Q'I(CWS?8VG@'?S(_G7'UVX_&OR[U.0?:&C5"@7@^YKI2M)GGO6"?R +M*KQ8&]2"M6[(W>G7"W:`QN@##<.H-)<0!+&"9(F4'J^>":T/$/VJ7[+-<;5# +MQ`+@8!%$I+;N3&#LWV-#P?IS^+/$;P13Q6]Q)&6&\]<#G%:FM1ZGIVE7$%\@ +ME,9*F0'(.*X*)Y[2X66&1XY%.5=#@CZ&M(ZUK-[9?8GN&DA!^8MUY]36%7#\ +M[3Z(AMMHVD5]9AL2\[.$7!3V_P`BNF\'QZII\]\MF\]M"\1WC<0&'N.]8O@; +M1IKX+Y;!)K63=D]UKVV+1M)EN8;>#-X\\.0JG!7CD5YV)Q')4]FM5^1Z-/D4 +M>:6YX>=6O_(NK+*M$S948SS6&+6]F9W`"!C\R5UOBK39M"U.\L;FSDMV60M# +MO';M4=C:R7-M/=*@#;!N(/3VKJC55-72L1.GSNY'X:MYM54P1VX_T9#YA'0J +M*VE\--)X4EOK-I8B#AXF&".O3_&F^%I#;#[%"Z1/<."23@D=P:]1\5-:0:-% +M;PW$I-2$196D0#._S,P[UA/YHKB_$@GEU +M.:Z,3K%(V4HKO6"I25SS*D_?9W=V;VZ>-=&EN8M)N[O9"&=CY:$@[6; +O][D5 +M-XULX=+UQ-"U"*ZNC8@Q*9&/[LD9RI/49_,5RWA;4=5@A>,3E(([B:W +MTO4;-[FU0/\`9[B00R/GJ%#<$BM.RT'Q!H/A&\GM8$B;'EW190SXS_#Z8K.? +ML5'ETNSIHTIP?,D8VLZV9(&M;^T@G#\HJN0\+5CREI8`[IUX5A0-,GEM[B\> +M3>T9!;)Y;)K9\+:.IO?+NY=CJ-XA;N,=:V7LZ$+HKWZTK,YN6T:-E=0`6/*G +M^=5?)56".2&+?D*Z;Q#9WYS=M;,J#Y0=N..U9UNJW$>Z>(>8%(1O6MHU.97) +MY%>Q2NA;FZ6)U+1A0`0>15>[MU@*F-]\4GW3WJ.>.6&0AV*NO8]:>%=[429P +MJM@>QK1:$;WT(0=DG!QBOH#X*:T;_28E>3,L7[N09].A_+%>`7`W?.!D]S79 +M_!_66TKQ*D!]`W9F'X*\.P>*AKG@FZP%UJP=(&;HEQ'^ +M\B;\"I'T)KYQ\(>'[RT^(,-C>1-%/973>;&PY4QDY!_$8KZC\`RIIOQ#T>]= +MMD:W:JQ]`W']:;\?O`EOHGQAG\2VR(L.L6PEV#^&8'$AQ[X4_5C41J.%*7W' +M'BJ2G7A]_P!V_P"ASME)M*].E=!I\W-F<'FNZ%1WL8SIW5F>Y:9*KH,G)Q6J#D5Q^@WBO +M&C!@K1G='S.+HN$B=U5T9'`*L,$'N*_+OXR^$H_#_Q-U[0P/(C +ML[N14)_B3.4/XJ17ZBBOAS]O/PZ=.^)-KKD<1\G5[)=Q`X,D?R-_X[L_.M)Z +M-,YZ>J:/FBQMKJ^E-I'*6CCY`)XJWXBFEDL[2W;YC;J58CM5[P];001RS-O\ +M[HH'I5C4M$UG3M-:[NK;_1+Y28F(K!U5[2SZ;&CCRP2ON:WPY7P5++I([I%8#. +M.E>A?!SQ"WAS4Y)YB?L]VI1,]"PSUI5X-0?*S'5ZG2VD4VF3WU@AMVF@<@.A +MQO' +M5W4]6MQ;V5S#,]GJ%NN#L.#[D&NMT+Q'\.-:L[N#6X[:VNH$,L;M\N6. +M?E!K'D\!:3J5C-=:=XBAF>2$RQHW4>PKS71>C[G1#$ZI3Z'*^-+F=S;:EJ-X +MVKVDX'[['S*?0FJ$,EG8WH:`.+"[4;CUVUL:,L[^%I_#]_:83+&)F'.X?X]? +MPKB;2U\0H`LMK(UH&*K\O8'K0H\]XR=FOQ/0YHQ2DMG^'_`.[\,^"[C6=0NQ +M:MM=8]UN<]:L)I&NZ/)Y&NVTD(4_ZYCR.O2I/`NJ30I)IJW+17*+OM9E.""/ +MX32ZCXQU;6ICIFN/$[Q<%P,<9KG59.$H3O=$?5VJRJ1V9QFM&[TG5YKAKF2= +M'@LS:B\<=Q:.`%!/*CU +MJ_J_ARP:S6[6(2/(HQ@?E5JOL[:FG*KM7T/+M2MXYD6)I%CPQ;)]3V'M17;? +M\(O9M;*]W/'%(S?=)Y`HKJIU6HK5G/.5.3OH>0#5K@/YJQ1?,/XDST[8J[I. +MII,%CCABM=0$@:"95&PG^ZP/OT-;VD?#GQ#JEJ);.%6'E":,%@&93T/Z5C)X +M3U07QPPJ2Q^.I(Z$UW=]#]@\.G3M6G;R)&(CN,$+D?POW1AZ]#6+XC"JU]JZ//M2\//?JVH>'KZ.[BSLGBDD`=&]?<>AK;\+Y.H)OAW3QVX29L\ +MYZ"H]%T=/"NK"&^N0QED,(BZ!NN&!]*?:O96?B:UF3SWA53B,CD;B>/?!JZE +M1U4X)W5M&15I\L.9.TF;&K7]XED\9A@N83Q)&5^:.N-M%L+J[FM]RP-"S6Y=U*QL?E9&]3ZUR^LQ)Y#W"6R>;O^=B,&-O\*,+7#SSQBDMI'BD616*LK!@0>A%6X+B"&_E,D: +MM'(A4^WO5%F`(VT_(GS/J?X8:\FL^'[:Z##>5VR#T8<&NW+AUQU]J^Y++GVK.C7>S +M-ZJC>Z/1/"OB#;(L3GGI7I>D:@LJ+A^M?/EM<%)0Z'!%=QX3\1D.D4CG(KT: +M->QYN)PRJQ/9HI!D#/!Z5X9^V[X?34_A5!K(CW2:3>HY..DESJ<&CP/9.E45S\ +MZ]$TB6ZNAM^5<;BN>U=]XGMXKS0-*TL2B8(-Q.[B/VK)\-:7&/$HTN^ODMHG +MB.^3.#QVJK(/)U.^T>QNA)"'RDI/4?6O%G.:;>NLV\G?6+4Q:E(H,81\JI[DUI2]M&%U+_`"1-2I"=TX_YGRCJ +MVBPVLS^6T\S+-L3*\GZUV]Y]L.C:+:13"WO(,XFC.UL>]=?KG@G7[R=(1;)' +M"^9$E[-]#6KX7^$9OHX+_6[V:&*%P616^9AZ9K1U9S:NM48SC1IPU>YYK+_: +MM[>2ZK=:@I2PVEE48#GN,?3^==>_B1M0N4AGM(5L3$.(A\W3/Y5T&I>#=`T? +MQ-/I4%YYEE=KOVR'[AQ56;0_#^FL98;A74(2&CY'TS4XI7?-;5&4)2<%"$MS +MSVPN[2S\13WDC;;24[%]4]*Z+6$T756MI=.3%TT>)2!PW&:YWQ7I%@RK>6US +MM&X.8CWYK9\-X31X[[=!&Z-L52<';C&?\^]<-9UAVXI0Z(V?"&FF; +M5H+-!=O"ZXG')7`SS7JO@OPS873/_:+@6R+M@4'/3(YKS";Q3<6VG6MK"$@C +M`V-)&/F;CK7=_"VXCU&UO]'6=XI43":E.*D.M%VUT[7J2M]\\?-_D45ZRK89:3BTSB5 +M*4_>C;4P[Z[N?!^@V&HOI[^9&HC>.,X8#)QGVKSN;QE+XI\8Q736"6AA)5PI +M^9U/7)KOOB!KVJ722Y1[E0[8Y1@>O'3CB +ML*26\L-11EGD/S`[L$8RR\\5$: +48QM>YI2?([[V.'^*PNH],M1.T-W<(%N([J +M-\%$/&TCUXJ'PUKJR6\4ZF&.]A1S_I'*R@C@#T-7?&/@W4(K<`-%)"[^9M\S +M)`/(^E)X(^']YXB::"RC5C:D&XC0#X<1PP2RZG+]D6$@RN_&0?2N+UC14TW5ECLKV*\MY!E2AR0/0U[ +M5/<#Q#JUQ8ZWJ@T]&`\R!5XC&/EYZ$5YS\0]&ATP)J6F,LL2/MD:-N&]\=J[ +M,+6G-OF9-3E4E37=+U06319M;N+S"=W +MW..#_2N/$P]I%26Z.[+L4H2Y7LSVB0_:[YG_`.6$@=A3C2/1YW)W*%VK/(%6K<$)$8!%6&@`8-BI_+.!QVH]FDRM2M; +M0%WY&!5ZYC$5N6&.E);A%Z\<^M17L@;Y5&:EP5AJ]S/C#,Y^M:$$9'+=*BMH +M-S!A6C!"<]..M'VO8VO+*,F<#+QC_EH/4>_P#.N;@WJWRG&.H/ +M:O3[!UM\L0>.U)TTJW1F-%.Q< +M`]JOVMPT;*ZG:^BNX@NX,&&#[@U\ZV]PZ,&5L8->C?#_`%S,JQNW<#FO2HUK'#BL.JL7W/E? +M]HOP7JW@'QYA_`]ZY+P#I>HW_`)UP)8A!"3N# +M/AR?:OO[XL^!].^)7@.XT6Y"1W07S+.X*Y,,H'!^AZ'V-?GWJ'AG7]+U^ZT= +M5>UU"QD9987R"6!Z8[UM4A&,>5[,\J+:N!K%XRG>\LF%9/4=LXKC['09?L=M?Q2)+JLS%)DE.=GM] +M:U9?(FC"7T,:W5I"5"*/O&N9UT]$O0YIQ4)V;/1+WXF6C[;B*R\W2X(S^ZQ@ +MQDUF>!/%'B/7]8'V&2.6W5RWV5ASCL,UP^H0>)]3TFPT7^S_`"7EZ`+M)4=V +M_"N_^!%S;Z5)?:#=VC+>-(#'=JN0&`^Z3VZ4 +IUY3MS,RGAW*5UL87QBNY9O$ +M-M?PH\$NS$\#<;"*5[W2KRT,>G))Y!A!=<8&^MCXN:1::@\U_+>$77.4]2*Y +MSP?Y:-;0W^V*VE)4L.I-AYP?YUW7C];6&)(]-MV1Y5V@'@D>M>=Z#8WVI^(X],E@ +M1XXV(.XX`^I^E8I2O9O1';*36B1J7EE')IZ36]PJ0*1'YAY+_2KVDS:SI$4< +M]O=XNG@HYW%V1E4@W!-[G0:AIVK^(VM3-IL,)6`-\S8SG'-%<]/9:[_9U_81I""`MO*P8`MT93V( +MJ_?7=Q97EKIUE=3"]-J\GF3_`-T#H,=?:O)M6U][R\M=2U&Z-W,D*R'GE_8_ +ME6?=^,-0N0E_%-/;R6\FVW?/&W/*FO0E3-&A)7;/2_!UUJM[+=3RV2P +M64B8)"?)(V>2?K78^&-%^VW5U]H9[*WDE*>0A.'3'+`=/QKG?!5^E[ILB+*7 +M6ZB)F\IOE5RO4#MS61IGB;Q=X9L?L>J(JV\4NQ9)&^9<]L]P16$(P3YF_D:0 +MFY*R1L^+OAJL_B&\AM-3G0FT,T.]OOA>"OU'%<%A_=KKO&GB?4;/2=-U1<2(\F.1AE4C##Z$5YYJFH12WBQS2_:%B#;5 +M;@@'IR.W-*JY23@MF;4/W>MSK)/$-K>WEWI=SJ!MF0A0TT7#8/.T]J[F'2/" +M&M>'VTK2K5;RZ,.3(\F,/]37SI+=:I;S/,`_V4MM!/S@''0YKJOAGXK2YNI= +M*N;HV\L[*;>=#M".#QN'<4XX?DC>U_Q93][1,W/$FFZ=;:3,H2>#4[>0*W.0 +MP],U+I^L>$KW1OL/B33(6RN,Q'8Q^OK6K\31J&LV(6P:$B/Y)Y%`P[8Z@BN' +MT?P_JDD9T<6JW=S>+LAW*,J1SP:BC*SWU"<)>ST0OA3PAX$UCQ!=)->20P6\ +M9>.(\"3G@9^E39`@/+9Z"K(L?$VBW&J:?/;K:+LS(L +MRX;(_NFM_P"''AOQ';-!XD2,PRSL(["60#9*W?Z8]:]!5%%7O&-,^RZE*I$>(@(T*'*[1WKSCQ%<>,!X +MEU*/5+MI+EF*R'[P8X[8KT3X8VL]MX>M4N6+3LF^0MUR3FINF[IFF#H7JW[' +M?VB`@#'&T0C!&:Z(O4]OET+(A!'W1P +:26+:N1^E6X`" +M,$XJMJ)5(\_UJII)7!)F=<83)!^E0Q*9),FJAG:>8A3P#6G91_*!CO7,W=FB +M;+EI"-H[5H11X!)&`*AM8^1QG%7U'0\]:VBM![#0I(P..]07$&Y.GX5?"Y;= +MCFE;CZ4W"Z&IG!ZQIB=<*JEN9:+Q\AK3T:^DLKE)5)R.U8L-P4D,4H*./6K<3Y +MYSWXK"F^A;5M3WSP)X@CO;=,OR0,@FN?^-WPML?%-O<^(]*@$7B".V*!T_Y; +MJ.0#_M#L?P]*X+PQK4NFWJ/YF%!Y!'45[AX3UR#4+5"D@*D<<]*]6GRU8]O9V36=H&#[5;CKV_# +M%=`OBJ+5[FVBD\RUME0+'\Y"LW3FLE%2;G^)DT35-)2XM;G[45 +MP)WQ]T]Q7GKWEI;:L+2.`M;G`C+'[A]?YUIZ?)<:M>)X7T&U\F3:C/?\2E\0+Y+H6MU% +MJ-P)X_DE4]O<5I:)87*>')=3M9SN(P#CEC@\_P`JMZ@-%EM8+&ZM`+NX4-)< +MN,G.,[15_P``7]C-J,_AZX"P$CY2_08XZ&I=/W(V9W"07$ +M(]7@O([%H)7>$]&T_7+`Z3=-%::I +MO/DRRS;`<9&STSGI6%JNGW5LXTU.SX9`V0)1P?SI9-+OFUEDF/"*GFRN>[XD9NNX=AZ5[\?BNG?J>3R-7OZ'2_#V^NM`UL:=+=% +M9[H>6\&?E'IGWI;R_P!8\1ZO)IEW/GY5A2:?<;QJ6HW#)-C56_X1V$QW%Q<`*3TVDG:C/+/,3!&8W*@KVX[UE:U8'1M3FNPASSQ^-:U]!_8_G0F[MX[N +M6(%$;H=WOVJ'2-,O?$.B2:1*CR7<$^+>8'*G/52?2IA-*3J/2)I"C4A-J2]# +M2\-^+M4OKO\`M"YFAMX>%E41?NF;&`6'OZTEM\0KBR\36UY#;)&EI/NQ`3A\ +M'G'X54T;PEXRT]M1TJVM4D26/$Z8#8`.>/0U@WNES6TT/9+&ZX.<5Q%MXMU1_""^'29 +M\64GF6K!ON#_`!K,TV!FLI463>#R4QG:173>!?"G_"01:U,)7@ET_3GNB0.# +MM[&GS1AS/N5##.ZOLR+PU\0-=@L(M+2V@D:6;>LTT>Y\G@\GK7LWAU3M!)R3 +MR:^>_!5_VU0WB-V:N[ +MN!GZ@5S/B;3X[J!E(&<>E>?7H?:B;0J=&+$P<<$NYM*C+E +MO;0^KM(NDN+92'5LC(PDZT:D/,\2I@G3E=/W6?*NL>1(EII#R+@MAV0W]K);VY`9B?7%4X/#F/$4M[-,CV?)DC)SOQP!^M<$)PAHW= +M)?B1R2M[NYUWPO\`'%KH'B"TUN2%Y(BGE3!?O$'TKUOX@^-/!VI:')>QPAK] +M&'EQ,OS'VKYR:TMQ=&*$F`*V0J_P\UV&CZ1LZ`4ES:C4-;A6&V1&N&7?-%] +MY1W-=5X&\6Q:=:3:)JRO>1NC,LT:Y*YZ`UYS\.O$4-O\4;NVNY9ELYBPAW#E +M>>_X4_ +8R<;W]3GA7E*5V=IX_L+ZST6U,-Y]MLX9-B1..HQW-(O##>$+VU:<'R\E+'D5Y_I'C>RCT"VL/+$DJMM"_Q +M8-77IQZ/0=)R=[FAJ4MK>1R):WODF.;!`ZXQQ16>?[#ENGAGB6TFQO=G8_,? +M3-%<,:;IKEN=;JQD[N)Y[\4]&UW2-81C.JVUS"!P`$8C@C&.O0T_X=7'@2WM +MKR#QA'*;N4GRY@O",!P01TKU+XF>(O!L?@Y]-&EMKNK70"V;&XVM!DB//ES.W,]66;N]MHG_TF.Y?37E)C +M8#D$=.O'(IG@_P`4_P#"/^*OM]G`!:3AH9X"?ED1@0"`>_7I[UYW'%)%>1I,C(0XR"/>JP[A5IMV-JT94IZ&QX +MBT_^R=5E^Q3.\`"L=PVD!NQ]:TK.T2]N&U2TLS:JD0`&>"V,9J_XML'O?$5_ +M=Q%DLQ'&BRX^4L%&:M:9J<6BVBV4K)U5AH*M1M-71GBW[.I +M>'4^E;1+WP^__"16\%U]GN@K>5=)M?'8CUKRKQSKAUSQ,\-NWE6\IR$Q@;N_ +MTKO_`!#\8;;5/`4-DPCEU&"-4977&>QKQA;IKG45%TBAPY*L.,4J=%IOLMCD +M@TYNX^%.NR6TOB2-4`-SHTT;*>X]1^=<9J%NLD +M"WSR))LCPX49)]#5GP#(PN;F4OL>6TD7!XXQTI2E^Z;ZH]#D:J(7X;V4:^*8 +M[B/@;&.WW->_:-@*OTKP+X7WC7'B>0.-I6(D#';(KWG2G&%K.O-QJ:G9@XIT +M[Q.JM#@`9K5MB"`,X-8=F^=O./6M>"3'W?Y5I&H=?*7RQQ@'M7,>*9#L*9SE +MA_.M_>=N>GO7->)FSMQG`8?SJ*\_=-(1U+6D'"#D=JW;JY8@5SGC&?2G/)USSQ4+DL.M2V* +MPV0%L]*R=10G-:_YU2O5S&3CBAPNC-NS/-/B#9JVF3RJO*J3].*ROA6DNH0- +M,\C97"@YZX%==XM@\W2KI".L;`?E7/?!48\.PR,.79B?S_\`K5P5:*:3V7JQ_+->"W_B^]U?7]1N1<"VT>6=DBA./D3HOZ#FM)TE!'F8FH +M[6CU/1/BIXBN;O1=&L]"CCDW0J;B1$QE0*XW1='UJ^C8Z9`T[QCS-RCHWH?S +MJY;^.BTDEB8K>XBE011R!?F"CK7IO@;P]=1::NJZ/),@^\]N5X85BZ=3$27] +M:'E*O&C>/4\OL]+"6MPDVES+J49!FG8?*3G/^%:L6HM,SM<0?:9MWR(%QD_3 +M\*]&\?Q026-IDW#:LVHRRKL1=L21K@?4USU\%*$_ +M=9A0JKVCE(I:I=#1O""ZEI\!-_*^6`7)SZ&O.O#EMJNI>(O,>Q\NYFD)DF'5 +M5QR`*]3N'U2:^FLKK3@FF;,^:F,;O6N($.N:7K8-B9MTSGR0L>0P(Z$_2I]L +MU#EEN=%.FTW*YH^//AS!:>$O[9TK5YY9C_Q\12D#)]`*\Y:U@MTBBBF-M.HS +M)(>3FO<8XY&T*]@U`I>R7"Y4+D;&Q7'1^`%MM$OM1FDW>6F\F0'!]@:N%23B +MDD9TJRN^9[GG=SJ3N4CN+KS3$NT,>"1ZFBIY].L+^!)X98HY"<2(PZ&BKO2^ +MU>YV\[6B2)[[Q#IOA_X@$RZ=-,(;G+ENRE!]WWSSZ5NZ_,=;\43P[88VDB2: +MS\S[K*1W['(K5LX8I=4?4RMK1E7;2-'=6QK(T +M^[,>MKHU[;&&:&0IL(#KSVSUQ73:5X$U*Z\6'-S+$C.Q6?;D!AV(-:=GX+U1 +M_&@M[RTCD/FY^UE`"3UR,=:AN$8V6M_S.J&+:G[SU*VH>$5U+P_KNKS:P8A: +M2;H8HL%20!U[US/AW2K;66S=12//:MB*6$8\W'4?7WKUF?PMSJ]E +MY5JPHSJING+?H.OBXQMRJ[/ +M&M=TY_LUTNJVES:1!B!,P^4D?=SZ&O/X9C!<%HL'!X)%?6.J6MG+XKN=)UZ2 +MQC@N8P(TN&`29>F0?6O'=:^'EAIOC:X-\E]_PC8D.7L%\UE&,XSR!CWKOPU5 +MPBU4^7]=S#VKJR\SSE8VN)4FD1D1FYD45VNH:3=VGAU)[N(;9%_<2`=<>OH: +M]3^'O@OX2>(V.F^'/$>IB]<%?L&IQ@).>P#J/E/YUYMXFM]0AU75='O(KNS: +MPE:%;61MQBQTY[U=2KSR2VL=5*#@G?6YA^&M3L[+48Y9V,MM(A26(CVJQX;N +M;:?6@JJ1&(9#COC'%8?:>8LFS#) +MDN*\;^&"#[5<#Y +MR\:*&+="23T_*O6]*;`4$XQTKBQDOWAZ>7QM2.KLY>,$=*U;>4^O/:N=M7^8 +M>U:UO("/?K64*AZ"B:XE.S'M6#XA!:$L!]WFM".;"\YJAJQ\R-E[8]:JI.\2 +MHPLR+39QL!S6M!/G#9XKD+*Y>(/%G)4XK;@N%PH)-8QJV'R'1PRC'!!S5J.4 +MD\XXK"@N`.Y-7H9@PQ753JF;@:;R<8SUIB$GO^%5C+QC/-*DAQG^=="J7,W$ +ML$G)Z&E0$_6F;L@$59M;=[B58HERQK:#N9M$11NGZU5NP-F#7H6D^$;>:`?: +MKE]_^R.!3]3^'GF6C-I]YNE'1)0`#^-=D8Z')4JTT[-GB6O(#;R)UX(KF/A% +M`;?P_&C#)5W&/^!&N_\`%6@ZI8P2M=6-Q$BL5+-&=N?KTKAOAY,R?;[52,P7 +M$BD=QEB1^A%T9)G;A8N2D-^+%_

$[X6B,T\@$**G7#?>/\`WR"/^!"O +M%(+/PS_PCL\VH7MS#J('R0CN:]R^.T=SX:TG07PR_;K9WE8#NS'^@6OG/5;Z +MQ6287%O-Y@R(G7H3[UG!RG.S1XV+JKG:[:'I4=IX>T_PWI>M>&KAKJ_4*LJ. +MF[:WT^M>M^&OC7I8T/[/J47V&]@3;*H3`)`[5\U_"CQQ<>%]3E:1%EM""Y0J +M.&[8]*T]:U&+4-3?6+B'=#>'=Y43<@]A5MSH2O`\>;=V^YZM\0OB?::M?VBV*^(]*>*;R')E@/1%/I73>$+Q/%L`O8<; +M=/\`DEB/KCN*FF=K\"WCM$:)I?WP&VUO3HK>;@/,A^\HZG\:NI1G!M7^9T +M4YQLY)'(ZW9WNE:U/';V\#(XS@H:6-?M(;G1+%II&PTC#CC'%%9*/D +M=T9P:NV?.=CJNJ:?<.=/U&YB:50'V.?F]B*]=^&"Z_%H=KJ5OJ#W]B;DQW5@ +M,;U)[C/Y_G7D.A7$-KX@MI[R(&))AO7T[?I7T9<6VE^&=)^VPPQ,C[9)%5=H +M8=SB(\RM8\.=1TY)HK2C7[6S>[=7!61?FY; +82>K8^M=[?WUS8V-M,T$= +MS)$NXR`X&<4>-=;;4[+3X+"X>&S20R%98 +MQP^>^.HKK])U[2HM-TS5XHK9]4B^2=K=<.&'\8`ZC\*3CRQ51K4JK1<=CM/B +M!IEIJM]]BN;>436KL\*1ONP>N![&H/AUXLAMH;^UL$G>]4`O;L!L;G'0]#BN +M5NM>;5?%4-W;7TUM<2+YSM@J%"]N>F>M=AX"T_2/+F\0VLD,]W+(QN9_.VE? +M]X=,=\UA/F>Q482I+GD9=[I5CJ/C:SN[?2;SPZ/.(GGA7RT+YR&&.!7F:K;2&VEBO9XP':.`[\$'KQQ +M7>/I^GZMI!M?-2"*1/D=,+L/8_G6\:C#L36GJMY609;Y@)G.X)G +M)4=L_7K7:6R[EXX)I8B#B[,^KP+4J::-&WD*X!QFK\$W8$UEQ,._4>]60Q"Y +M!S7+<]!&DMP.,Y]ZBN9B5.",>]9\TY4\C]*H76IJGRMGUZT^=EHAU*;R;D2* +M2/6KEG?[P#NS7*ZUJ\94[>3CI6;H>O*\S0,2&'?M^='))JZ%SJYZK;7.YO6E&HT59-'1I*"/\`Z]68I!CDCBL6WF'` +MSD5?@EQCI793J7,91-6(EL#I6_H<@C^X/F)Y/M7-0-CG-:^FW")*.!S@?6O1 +MHNYS31Z1I-QD#')QS71V,F5!KBM#N%(4#`]A74V,HP`/TKT:;/)Q=.Z->>&& +MYMVAGB26-QAD<9!_"ODWQ=X4D\&_&?6'LR5TRZ,4ZJ1PJNN,9]F!'TKZQ@?( +MQ7EGQMTO4KNXO+BU8BSATQ9YQC@NCL%QQUPS?@*RKT/:1LMS++,0\/7L]F$>9@@K(N?TV_SKY\^.WABS&O:3INDI`NDW>:[GXM:O<#PS::+ITS+<7M]&P4=O+1MQ_\?6N2T37$>_&EZ_9QRP6K8=I +M&RP/J/4UY-6M*$KI:E9I14:WNGG_`,7O`T?A>Y`T[!MY5#,2P] +*HZ?87,^A0 +M12R(QC`:-`,9%>R:O+#BV,IN@@W[%R%(ZY-=+X+\ +M5P:=X8CU`74+E8BEU;I'EB1_6NYO-`N;&QL-&L%MY((DQ*.`[?6O*/%5RWA/ +MQ/+OT>.=)(ML:K\L8&`D3>8"#GVJYX^T_3+Z+9+;H_VE""['E3VKQK4?'5Z^O6=VFGM +M8S6X*,`F1(/?/>MKQ%J&N:]X;6\B2Z\Y3@JH(X]:<\0N7D>_0R]HHLO^&K;6 +MO#@>SM=0+P`81E4$8]**P=%M-4CM4MG%U%-&I9O,8KG)ZT5PNK-?#L>E2Q=% +MP7,M3PKQ,J+K4[Q8\N4B5,?W7`8?SKM?#FI^(?$.E06=RK7ME`!;+"K@22G& +M0,GM@5R4]H^HSZ7#$FV:5?LY0?WE;`_0BO1_`F@0^'O$%E=>(;V/3HU=O)5_ +MXF7CDCH/>O>G)D:;J5_]FOI"[>QG[1-*2?_``#Q +MCQ1H^H:?XGG\.A+9S!F1'5MP<8SUK(TI-1-U]@RT1OC0>I8=J)UG!6 +MMI^IU8><:SY7N>9:/?&:WU6>>2^C.PBU)7@'^$>^:])^#7AV;4-.N;C498Y( +MLCS;?<4++W(('/TK1C^%M]X:OK/5K6ZL=2M5F#$32Y0/C(5@.V.E=5H%]H&L +MW5Y"=/CTF^0L#=VLA$>[T9>A!]1S7-*2F[*.AK6@KI77F6<4ME.Q194X*-W`[X)_"NGTS5_#*>#[:QM[JYMK +MJ2X>).&*H"200>F*B4THVD<_(XRT.=31KH7AU2VCEFCNR&9,5H5O%$T;J]S'%N)SR"Q)'N=I_.K2O)C`?/ITMQ%!&$4#MWKLM0BFM +MQMFMYHR?[T9`KD->F4!E8X;^[WKCE0J0TDK'5&M">S(/#.HW+22Q;))%A0R, +MRC.U`0"3[9(_.NTTW44DVD-Q]>MYK-W-J!P2N.F,X%7X2,A@0*R;1MO'>M*+..]>M19S3.JT*Z^9< +MO^!KNM)E8J#GK[UYAI+^3.H/Z=#7?Z#.60`D`BO1@SCKQO$["V(*CUK`^*]O +M]I^'VK1!2S&$'`[X(K561Q&J0KN9V`)SPHSR?R_7%97Q5O9=/^'FM7<`S(EO +MA![D@?UK9Z:G@R]VHK=SXN^.1N;#Q#HJO*!&+RU&^L+;5K;3[;58X8!YC,GF&/'.!GZGGKS5>.& +M2_T&'6H84B-L#FVDRI8?7TKYR57VC]T[LPG*4I5>AJ>%O!UIJFFI-=W1:^BC +M`$F3C%/5=1\'N&6%KJSW%F:-MI%8V@^)KCQ!+)``MCL7RXHER`S9[M1\6HO$ +M$V@0V54;)=?]FM\/R)77WGDRG.JDT:.F^*+?Q2U_J<:W%K:6Y\H/ +MYF"'_"L7Q+;M=Z;+.$DO-\9V`\D$\9JGX&T;3[;3H[%-2*RW)\V>$GAF`[UA +MZEXOU[PSXKO41#>6+1_ZO;D`#N/05O)NK!^95.IRU$X]#!\`^"()[BXU&\OO +M*DCD(2#^+/9>#_$]A=ZG/?1V6Z>89 +MEP.(Q7>^'=/U9=;@\26C?Z$4V&%!C*GG/UHBI*7/+:?X*OM2MM>DT37+B(0_9_O[L+U`'\ZT-2O+M]2O=3TU- +MWR^6\,Q/RG/;TK'\37VD7T<)U".TMKZ.+YS"Q88_H?K7#7IQ4^>/3\3"-+G> +MB.EU-+_PW +?&&\\N]@F7?#(5R0/3-%H*L8*,9/NCT^M%*4H +M)]C1-+2QQ/@[0I/"OB6RU+Q'#,NV*2YAM98RK/(5^3'J&[$=Q7,^(=6O]>U" +M62172..1MD;-G8"-^#[-EOAK4U_;S2M-^]M2,LV<\XKNP]1SFW6NZ7 +M+(M(U+6I8K$2//%;DK',B\[#]?;BLZE:2?+W.2 +M,>>FYVLB*VT33&\/6T27;I,LK.&"D9!['ZBIK"XN["Z@B2&9I?)=U55/EJH/ +M.[/4U/H+6$&J1Z5<_:#$B>7$N,L^/<]@>])K6OVEUY7V:>XN;V)_(\E050X. +M%+'KC'&:YJDXO0O"4IP]_H6/ACXHM-9U?5;#4A%]DNX_L]PN_&Y3G:P5OXE. +M""*S]"RGDEFD`!&<`J&Y/'K[U4^*'A_P['9Z9K%O$=)N/,VW42C: +M9,=U]>>XK(\6ZN]A=V)GOA&'LQL>%-[-S\N[^N*WC32LHJYI7JNHFV]5TZG6 +M_$#3;FS\3)#H=IF`01R7$:*6QW8U!-KR)KXL=0L88=-O8A"I4<&/Z_YQ5OP' +MKJ:#HT5Y??:KCY3))+Y#.Z`]0Q[+BN9O9?#'B"];6K"&YM[."\6"6#>7!+<[ +MNN0">..E9UJ>JG%Z=41";G!16C.MM/A-*]G+''/]ITZ='-H>CP2'[I)[BH-3 +MO[/P]-9Z??Z8DDJQQ0R)CYE8]7'8\]Z[?P5KCV-I'IEPF1"H*DMDE1T!)]JY +MOXHK9PW<6J6)MO/*^_P`KQLJ&&HT[7N>A3R;Z +MU0K8B3Y>2VEM[G3>6TAV-;]"1E7!Z4.$5%*AT4XP2G6KWQ1DL_#7AG^T+&TC +M6X>=8TX(49R3D`CTKC?`OBB_\1Z]:Z-]E,;2Y_>1R'"`#).#GT]:]>6:T:=1 +M4Y[F.'X9QN)PLL722<%>^O;P13 +M2M-;2H$+-N3:0HY..OI7.66JZ)>2CRI[0^RN`2?H<']*[EBZ&S9Y$,!B9IRA +M%M+>R.C2^A@TB22YC:6)4&41%9V8G`P>O4CO7/-"]_:B+5K*"8[1N2=`_;MG +MI]:N7\L2Z2ZL-I0H3VZ' +C]<5'"OVB-&E*\`'>IQD>]:1ITITWS).YC*=2,U; +MH/N+6TO-#.D31&*T,8C5(7V[`#NXR#SFNN\?T-:4%K=1X&8''M*!_/%.:42'.S8.A/0?_7HB&X+C:!CC +M/>O/EPK@WJDU\SLCQ!BH]4R[:QW`<%DC`'_35/\`&NST30KJ[M?.C-LRC`8B +MYC.W/8X;@UP99(U*>9\Y7MV_6C3]0FMEFMU9RI;S%96(/.!C_/K42X;H05XR +M9K'B"O)V:1Z3)I+6%SMNKBSMRH!(DNHP0.O3.:O)XBT#34WS:Q;R!1PD"L[$ +M^W`'ZUYIXBU6XU6^CB1,;+6)`>N2!R3^)Q^%9MC9W-U=1VENDMW<2G:B1+G) +M'H:VIY%245*39G4SNLW9)'T7H^KQ7J636Z,D<_S*&(R?_K_RK7UNPM=6TR?2 +MKI=T=RA5AZ=\_@<5R_@JVM-/L;"UE,$FI1P^4=C[UA/?+=,YQTKLY#!;1-<3 +M,J+&A+R-Q@=22?2O%Q<(1GRQ6@4Y2;YY'S1\1-//@348]`M]1CNYKVW)6-(F +M4@<\L,X'3UKF[R`WFA(9)5E\M=C1HNTFL[XUZK_:OQZN;C3M0M[V&$Q;&BN/ +M,C50@W`'IGV'K1=7/V:=[U;>5I)%WQQ\AU#4=.U0V^G7,YNIK=<-+NR2.PS6=KMQ--HLU +M[?+<:7O7<)EC;:Y/51GK7FUE?VT5^R1ZE-;7&<(T:90^_/O12JWC[OS,)Y?& +M4G9V/3=0\.0Q7<3Z+&/MK?ZO)R".XKB_BOI7V:QEO[2_GM+M%\J:WF3;N^GM +M6_I.LSO>QSS7LK/$5\LF$_,U;WQ.%MJEK8VEQ';W,MPH=F0'/T]<5X5J.D7]_JTFG:7IJ6LUOES-YVT[1VY-6TL_$=IJ]I+;7%S:E8E$L +MI.&16[_2NJ6)4FI72,:N!E=QL_4]8U72-0N)D&!;B9OWK1MR37-ZYH\L.J3& +M2QAE4[0'D7<#CL>U;OA_4;K3[VS6>2YU*"2$EG5-Y8_0=/QJIXEU^WOYY(XK +M&XFM(3D+#DR,WH:X)5HU8-QW[';AJ%6C54:B5NYEWOA7P\3]NA/E/(=KHHX! +M[X%%0Z=K>M2,X7PM=>1G*AL;L^M%8_5Y]6>ARX=_9_`X3QG/K^I7RW`LX;62 +M+=$UO:#:5QR<^N^*38=K9YQ]17JT<3))\U +MO4^5JPG3FX)7.6\.6%]-KVC02H%:"=7%P$*LN#GJ>M>O07OBF73!>F_6""*6 +M="BJJ23(I(+<]U//;O7%>&;&T&M:6TNKW%TT$?F&&XM]B@=&"L#G([<=JW-; +M@GGNX=NH"2%9V5[1N0ZL#]TXQST]>>M>?B<0W--,]BAA4J-I;D%AK^O75Y-; +MRF:XF=2$4VX#KQ@DDCANWO56W@USQ#I\NE6`AL!I\_[R8J1-OQ]W%T^_^V6.I,9=OF;DF*.Y/J/4="#730IV? +M-)[G)B:D8QY+ZG=:!X1U;4M*F?QK?R26'VG&VXD*M&0"`X!]>.E>6>+]]EK0 +ML$N([J"Q^1)8I-PV]00>];]_JVN:E;O'XAU-YY+93Y=DYP2?5@.OXUS&APPW +M7B;9/`LRMG]UNV*>#W[5WPLKROL<$6[ML[?X2:KXIC%YM<]X?DO8-(O=&6-)DDF$B*K +MY8$=<8[5TDUP=,EL-1O+:&.VELY+4PQ8#D,.2?7!]:YJZYFTAT9+VIVO@F$M +MI8TS4KY;;6HU9EB(+&0#H?Q%97Q0._4-)6V@=+BR&]V:7"RC.1@#N,5F>&=5 +MTVZ\G5(&\G4+=U\Q3*<[5XXSU&*[#XQZ%$VC1WD-](+@HLNF.5*M,&&XHWX? +MRS7.J:;ML:4TJ5;G?0P;.6ZF\*W<4?R)?$R,I))1M^/5U: +MWZ'VV%QM##\,RA&2;DGL^K?^1VOCG4?[-\':K>8^9+5@I]"WRC]37RQ8PR7- +M]!;Q$^9-(J+CU)Q_6OHGXY70MOA]<1AB&N94B"^O.X_RKQ7X76)O_'VCP_PI +M<"5OHGS?TK+-DYXB$/ZU.W@M1P^5U\0^[_!'M6O6S6>J;&B\R%EC8EN00I&X +M'\`?SKRRV\::J;G4X9H;4I]JD6)DC"F(!L`#'5>._/O7O7B!((["YO'C5G@M +MY'4GU"DU\R6=ZYG>Z,<*`RG]WY8*$CN0I)K[ +K)80J=V1D8_$>M4D\;6.]C<6ES! +MOX8JH;]D?#76M#U+P?_`*=8:5IRRW/V:6,(JQ3N`"#@\9(/3GI7C?Q# +MNKJ;Q7?PW%G:V2V\C0I;P1A410>.@&2>N>^?2N["8>&(K3IN%K>9QSA&USNO +M#M_#KTJ6>C^;H`[U-<3RPPR37*B"(R`"660*`/[H)[^U,^$ +M?CB\CM[Z'6KV/^SK"U\T2NOSCYE`7/&[.>_-8GQGU)/$L]EJ=CJ@N]+*;4A! +MVFWE[AE]3UR>O('2HAA)O%>QEI'OOY^1+I1Y;HZ991?!+?3[A;A]NYDCE5V/ +MUPO4M +M<^(ESJFKV.BZ-%;3Z9)LMIKF9]LA;_GH"3P..,YS6F,RRM3M[-W5G?I:Q,:< +M5N6->UVQTV\M?MMW#;QRQL`&R2VTYZ#K]X5K_"W65\4>(9-+T#4SE8PSND97 +MY<@;(?##ZGK_AZWEO(V87_E2!9065)"`3CV"UT?A#PKJGP\N) +M-4L[WR[RW8B8B+_1G`8X.6PQR#V[FN9T:,L+\?[QK1=-RJ4(WYF>E>'K3Q+# +MJ4>EW+6\$2W`5XHH6(!R-Q+G&X]>0/TKTCQ5JT]E/':"U@N;.6"07`,P$BD@ +M!`%)R0W(^N*K^"?&EEXETJ.^&;,R*'"3#&!W[UR_Q`NXFUOS++4=/FN\Q>9$ +MR?ZL!LQ[G)X'4CWYY`%?`NC5E6Y:JU/?S#,8UX0Y(**CT1\9>$B@U*_%U87T +MUG'(Q#VPW>6,\9..>*]0M=7TZ]L1%'//+:L@1)"A5E(''/K3_%FGZ=X8\4:A +MH]G,MF9)VRD4OR,IY4D>I4BJ%Q#:+I5RMUID3>4@,82Z>(L3W^OTKX?&OFK2 +MTUNSZ7#+EA'70U[;4_%"^%39ZK!;:UHR$B*21,/%DG@Y.6/T%8T'A31O)DG@ +MTEHMWS!V?IZX!-&BYL]D^M![^VD3$5L\Y9P>S`]JKW=OK2"6^M3$UM*0L49N +MB9$&>>",$USKFDMS7DC!VBM.YM12Z+'!%;6S.EY;?ZUXT+,R^O/3ZUM36EK= +M68U+4I)"Q0&W*A5X_K52*;6=(AMM1FN;>&64;7>!`VX'L^1R?I3M5O=)N=2@ +ME9+O5+.W(>>".+8$S_0=<4N1MV@CD\QV2!20/U +MK-\3:GX9E\1.INI6,+@G]WGS.GROCK747NGZ->>8?,DCAN),V\+L58=\DX[4 +M6MAINDV5Q%`MK(B$K'MG4;68YGQ6,">(A?VE +BMK'<0_ +M+$C-$ASP.*IVD-[IEQ/'^ZA0N6,@3))[`$]!6^=-G^QHU_P:H?B1J&FZ_X:BM[>YC%Y$H38NY)CR`SCUQGFL;P_J-S# +MJ45];7B`6Q#0(SX1AT?<.^1D8],TSQYI7V75+NZTB]TS['',T8220I):S%0V +MQL\'..#D@CGU%$HRE3C8\>BHU:DKDOAS2;9[E9[&B@CDG +MT!-2ZQK&I:6]S82:2EVBVC1VZ"'>UODY+$=01US6!HVFZM?+)+$_9+\94S*JY,32I1E;W9G@XJDTG4:/._$/A'59)[F_-@T(CD:. +M"YC;O1?AQ/XE +MU%K[3]>LGBLKF7[3'+(0'R""0J_Q`@?A76)\/O!%S?RW=W9RW9F)DS+,0N"> +M^.$GY-Q^8?6NI\(^']9\1$"P@FG +M1G5&&TE5&>6SZUV?Q!^"EM%:7.M>&)G6-/WGV.7YB%'78W?UP?SK-TGQ+8^' +M'L(-#U.X9``MQ'*N4SW*X/6M*LXR24053DLXZG7>+O!\&HV$5UX,L[?3M7TU +M\7$`41F3'7(Z$]P1U&:]'OK'4-<^&.FQ7;6TEU8RK%=%4QY:,,HRCV.16/;W +MNF7=O!KL;B6[B!,N'*EH_4^N/QJA%XS>-;IM/NXX4N5\I(Y`62=0>H.!\P/3 +M%1R:J/<:K)WOL8$=M);`6ZNC")1'D#AL=_I5ZSWG]VT89`P'EMTQP/E/TJO$ +MQ\WG&,XS5R-V>(JN"1CGUK],PE-*G%+=(\JM)IZDD$\N,1/N'),,QP0,XX/^ +M/YU=TK7YM-D,<,IM<_,T$J_NV/K[?45G,)7!5MI4#OQCBGP8\E(7$;IN;*2\ +MCIQ@_E7:[?;5S)2:^%C_`(DW6I>(+:T$>Z!+?.]8VW*Y..<=<8'O4?P/T:0> +M(KK4;J".(VD(4,@X9WR#QVP`>PZTL3H7*KOA:,J$).X=^/I6A8-J-A.[EVAD +M/ +*.AP)/8^O7WKS*V4TZE=5HR^1]-A>*,10P$L"XJSTNM]=_4ZOXFW?V3PM.- +MVWSR(BP[`D%OT%>,>`_".K^)==M+G5OM']GSLY::.W*I]UOXAQG'?"_B#Q!>6]PBR7EO'(D4KLP8JH(X8$YQBNK^(,-QXAUF& +M_1KB*,0JGD3.H$;8YQC/!ZU#X,ANO#FMQ7RR90*5DA\XKO&"`#QSS@_A7T*Q +MW[B^G/Z'A\\5+GZAJ$$$ +MUBTDLEXD>X;&)8C!(XZ?D?6O-+NSTVUO9X=,6YGM01MFG`3S!QD@#&.O0FO0 +M6U;4X[&.S>\;R4B$?E[E3*XVX^49-9-C%I,4Z.T*R*,;A&O+#/JP/IZ5R8>O +M.FI.I*]R9U^;9&U\)IKF"/:WAVU,2*V-0CC",2"<`N^`3]#4OCY=2\2,ELE\ +MEA'"Y^0#S2S8X)Z8//O4MSX[FL$2"RLX;)6R`S,6E)Z``]6[TI+*&['G2@E< +MJ1\Z/G!Z\76C^) +MA<1I/L9!@2OGY@><>@ZU[+XAU6TTGP]=^,6M@'%G\Q@0,\CL5`P.Y&!U]!7S +MN:7H5?:+K_PYW8=>UAR'B/C[0K;5/'%U?)(\M_;HMONA?]W^[4*6"D''3&2: +M\Z^(?B[P+X<\0V=@(]:U(I;XOHIYU7RYCR!E1E@`0>U=1IFH0Z_=R1222:9# +M*28Y)4*RL!DEF(X&<$U\Y?&>W2U^(FKQ1S>2.(A6QV/XUY524X-Q70]&GRSBGW,W7[R[3P^VFF&YEOHYODCF^<`9XY +M!P/Z56M)M2A@=98ULYID!.V1F3'TR-QJ&XAN[;43?WEW)>Y5DMK;3V&\8Y!< +M=A5CP1J&IW6G +W<^NZ'/CS=L4TL1=$![!NQ]:AIV4C2^KBT:D%QJ-OHD$;NE[ +M);Y<&%!NW'GDD\=:QIK*RFLFF$T[27#,\\;Y^0]OF]/PK:=8_-=;2Z>:42`M +M"J'$@QR.*DU.+3%ED2R\/NUU/_KDAR8POH">]1*">J*4Y;&>=6C%OIUO8`21 +M(H1HRH,@QU);OTZ8K-G2WEF6ZDTJSD*2,Y:6+<03W/J1VK;L+?3]C6R6/D7* +M#=YLJ9>(G^`$?RI]MH]S.URV];6VP/,4$GS,=P/_`-57!*VQG)M/1KT/+`TF(CMP1ZY.#15^X1:;.#U6ZG +M73+:Y20H\N)F"\#<7*_EBM+XDWWD84P6U>.V5?,#QJ5=R=T8_N@@_=]CFNY6(12^7;R2P)'!$RK +M&Y'5B"/I116*ZOP +M`L'C.V1-3M88);96$4MJ"A4>@0DH/P4445K47NHX8OF:3U.5M]>U32]?AT>" +MY\RV2]"J95!?!;!^;K7?O?W$5[($("RIO8D>/75I&UJVLW +MEKX2O[F(Q[UA.,KQR/2OF#SY`P((W+E@2,DG-%%=<=7_`%YA1ZGK'P;UB]%Y +M;"9UN(UD*!)!\N&!!!Q@TW58Q9>+(;2U+1V_G+^Z!RO+$=#116=/^/'U_4MK +M0Z)#M<@=!BK]LQ'`[#(HHK]1P^R/)K;DMJQ;:3SNQF@DL@)YYZ?C1178C!F; +MJ&Z&T=X9'C;<.5/7J:OVLSS2Z<7/W5EX'`/S=:**F2]Y?/\`(J+]UFFOSI+N +M.?FS^AJ/93^%&T-+MKW0+B^N#(TB)PH;"\-BN=.P +M6CN8HV*(6&X;N0#Z_2BBINRK(1YY(WD6,J@Q)]U0.@XZ5);!IHUDDD>&S#.B`IO8D+N`S@9_V1117EYU*4::Y7;N>?SHHKYK,-(M+:Q[&#?[R/JCRG0]4N?^$HOK/9!Y/=!117RF5M\DUYGT6;+X?0][_9ZTV"Y^%MI(S2)(-Y# +MJ1D9E;/45J7$[6_C""Q0*T0!8[ADL8998(UE*"&)RJ'MD@=3[UD>-+Z^L`UO:7UQ$ +JGFJO#]MU%%1/23L./PQ)?MUT^HW232F<((POF<[1M[4445SKJ;1V/__9 +` +end +END --- CUT HERE --- Cut Here --- cut here --- kayla0008i.jpg diff --git a/uudecode/BASE64.BAK b/uudecode/BASE64.BAK new file mode 100644 index 0000000..b96f1e8 --- /dev/null +++ b/uudecode/BASE64.BAK @@ -0,0 +1,322 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +!IF "$(CFG)" == "" +CFG=base64 - Win32 Debug +!MESSAGE No configuration specified. Defaulting to base64 - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "base64 - Win32 Release" && "$(CFG)" != "base64 - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Base64.mak" CFG="base64 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "base64 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "base64 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "base64 - Win32 Debug" +RSC=rc.exe +MTL=mktyplib.exe +CPP=cl.exe + +!IF "$(CFG)" == "base64 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Base64.dll" + +CLEAN : + -@erase "$(INTDIR)\base64.obj" + -@erase "$(OUTDIR)\Base64.dll" + -@erase "$(OUTDIR)\Base64.exp" + -@erase "$(OUTDIR)\Base64.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Base64.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Base64.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/Base64.pdb" /machine:I386 /out:"$(OUTDIR)/Base64.dll"\ + /implib:"$(OUTDIR)/Base64.lib" +LINK32_OBJS= \ + "$(INTDIR)\base64.obj" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\Base64.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Base64.exe" + +CLEAN : + -@erase "$(INTDIR)\base64.obj" + -@erase "$(OUTDIR)\Base64.exe" + -@erase "$(OUTDIR)\Base64.map" + -@erase ".\cfile.obj" + -@erase ".\Decode64.obj" + -@erase ".\Uudecode.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Base64.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none\ + /map:"$(INTDIR)/Base64.map" /debug /machine:I386 /out:"$(OUTDIR)/Base64.exe" +LINK32_OBJS= \ + "$(INTDIR)\base64.obj" \ + "..\Exe\mscommon.lib" \ + ".\cfile.obj" \ + ".\Decode64.obj" \ + ".\Uudecode.obj" + +"$(OUTDIR)\Base64.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "base64 - Win32 Release" +# Name "base64 - Win32 Debug" + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\base64.cpp + +!IF "$(CFG)" == "base64 - Win32 Release" + +DEP_CPP_BASE6=\ + {$(INCLUDE)}"\.\Cfile.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\base64.obj" : $(SOURCE) $(DEP_CPP_BASE6) "$(INTDIR)" + $(CPP) /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Base64.pch" /YX /Fo"$(INTDIR)/" /c $(SOURCE) + + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# PROP Exclude_From_Build 0 +DEP_CPP_BASE6=\ + {$(INCLUDE)}"\.\Cfile.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + +# ADD CPP /Zp1 /FA + +"$(INTDIR)\base64.obj" : $(SOURCE) $(DEP_CPP_BASE6) "$(INTDIR)" + $(CPP) /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /FA /Fa"$(INTDIR)/" /Fp"c:\work\exe\msvc42.pch"\ + /YX"windows.h" /Fo"$(INTDIR)/" /c $(SOURCE) + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\masm\Uudecode.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\masm\Decode64.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\masm\cfile.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/BASE64.PLG b/uudecode/BASE64.PLG new file mode 100644 index 0000000..b974814 --- /dev/null +++ b/uudecode/BASE64.PLG @@ -0,0 +1,44 @@ + + +

+

Build Log

+

+--------------------Configuration: base64 - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP72.bat" with contents +[ +@echo off +/parts/ddk/bin/ml /c /Zi /coff masm\Uudecode.asm +] +Creating command line "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP72.bat" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP73.bat" with contents +[ +@echo off +/parts/ddk/bin/ml /c /Zi /coff masm\Decode64.asm +] +Creating command line "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP73.bat" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP74.bat" with contents +[ +@echo off +/parts/ddk/bin/ml /c /Zi /coff masm\cfile.asm +] +Creating command line "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP74.bat" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP75.tmp" with contents +[ +/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /FA /Fa".\msvcobj/" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\uudecode\base64.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP75.tmp" +Performing Custom Build Step on .\masm\Uudecode.asm +The system cannot find the path specified. +Error executing c:\winnt\system32\cmd.exe. +

Output Window

+ + + +

Results

+base64.exe - 1 error(s), 0 warning(s) +
+ + diff --git a/uudecode/Base64.cpp b/uudecode/Base64.cpp new file mode 100644 index 0000000..64e9c36 --- /dev/null +++ b/uudecode/Base64.cpp @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include + +extern "C" +{ + WORD decodeBase64(const char *szPathFileName,char *szPathOutputFileName); +} + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + FindData findFile; + Console winConsole; + String strPathOutputFile; + + if(!lpszCmdLine||!*lpszCmdLine) + { + winConsole.writeLine("BASE64 Version 1.0 Copyright (c) 1997 Diversified Software Solutions."); + winConsole.writeLine("The only faster base64 decoder is in firmware!"); + winConsole.writeLine("mail comments/suggestions to sean@vastnet.net."); + winConsole.writeLine("Syntax: BASE64 [fileflags]"); + winConsole.writeLine("Example: BASE64 *.txt"); + winConsole.read(); + return FALSE; + } + strPathOutputFile.reserve(256); + if(findFile.findFirst(lpszCmdLine)) + { + winConsole.writeLine(findFile.fileName()); + decodeBase64(findFile.fileName(),(LPSTR)strPathOutputFile); + while(findFile.findNext()) + { + winConsole.writeLine(findFile.fileName()); + decodeBase64(findFile.fileName(),(LPSTR)strPathOutputFile); + } + } + return FALSE; +} diff --git a/uudecode/Base64.mak b/uudecode/Base64.mak new file mode 100644 index 0000000..b96f1e8 --- /dev/null +++ b/uudecode/Base64.mak @@ -0,0 +1,322 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +!IF "$(CFG)" == "" +CFG=base64 - Win32 Debug +!MESSAGE No configuration specified. Defaulting to base64 - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "base64 - Win32 Release" && "$(CFG)" != "base64 - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Base64.mak" CFG="base64 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "base64 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "base64 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "base64 - Win32 Debug" +RSC=rc.exe +MTL=mktyplib.exe +CPP=cl.exe + +!IF "$(CFG)" == "base64 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Base64.dll" + +CLEAN : + -@erase "$(INTDIR)\base64.obj" + -@erase "$(OUTDIR)\Base64.dll" + -@erase "$(OUTDIR)\Base64.exp" + -@erase "$(OUTDIR)\Base64.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Base64.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Base64.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/Base64.pdb" /machine:I386 /out:"$(OUTDIR)/Base64.dll"\ + /implib:"$(OUTDIR)/Base64.lib" +LINK32_OBJS= \ + "$(INTDIR)\base64.obj" \ + "..\Exe\mscommon.lib" + +"$(OUTDIR)\Base64.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Base64.exe" + +CLEAN : + -@erase "$(INTDIR)\base64.obj" + -@erase "$(OUTDIR)\Base64.exe" + -@erase "$(OUTDIR)\Base64.map" + -@erase ".\cfile.obj" + -@erase ".\Decode64.obj" + -@erase ".\Uudecode.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Base64.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none\ + /map:"$(INTDIR)/Base64.map" /debug /machine:I386 /out:"$(OUTDIR)/Base64.exe" +LINK32_OBJS= \ + "$(INTDIR)\base64.obj" \ + "..\Exe\mscommon.lib" \ + ".\cfile.obj" \ + ".\Decode64.obj" \ + ".\Uudecode.obj" + +"$(OUTDIR)\Base64.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "base64 - Win32 Release" +# Name "base64 - Win32 Debug" + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\base64.cpp + +!IF "$(CFG)" == "base64 - Win32 Release" + +DEP_CPP_BASE6=\ + {$(INCLUDE)}"\.\Cfile.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\base64.obj" : $(SOURCE) $(DEP_CPP_BASE6) "$(INTDIR)" + $(CPP) /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Base64.pch" /YX /Fo"$(INTDIR)/" /c $(SOURCE) + + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# PROP Exclude_From_Build 0 +DEP_CPP_BASE6=\ + {$(INCLUDE)}"\.\Cfile.hpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + +# ADD CPP /Zp1 /FA + +"$(INTDIR)\base64.obj" : $(SOURCE) $(DEP_CPP_BASE6) "$(INTDIR)" + $(CPP) /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /FA /Fa"$(INTDIR)/" /Fp"c:\work\exe\msvc42.pch"\ + /YX"windows.h" /Fo"$(INTDIR)/" /c $(SOURCE) + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\masm\Uudecode.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\masm\Decode64.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\masm\cfile.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/CFILE.ASM b/uudecode/CFILE.ASM new file mode 100644 index 0000000..d52275b --- /dev/null +++ b/uudecode/CFILE.ASM @@ -0,0 +1,111 @@ +;************************************************************************************* +; MODULE: CFILE.ASM DATE: APRIL 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT LAT MODEL +; FUNCTION : BUFFERED FILE FUNCTIONS +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +.DATA +crlf DB 0Dh,0Ah,00h +.CODE +_FileOpen proc near ; int FileOpen(char *pathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index + CREATEFILE [ebp+08h],[ebp+10h],[ebp+14h],[ebp+18h],[ebp+1Ch] ; call create file + mov esi,[ebp+0Ch] ; move FileInfo ptr to esi + mov [FileInfo ptr [esi]].FileInfo@@mhFileHandle,eax ; store handle + pop esi ; restore source index + pop ebp ; restore previous frame + retn ; return near to caller +_FileOpen endp + +_FileClose proc near ; int CloseFile(FileInfo *pFileInfo); + push ebp ; save prior frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + mov esi,[ebp+08h] + cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle + je @@FileCloseEnd ; handle is not valid + CLOSEHANDLE [FileInfo ptr[esi]].FileInfo@@mhFileHandle ; close handle + mov [FileInfo ptr[esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; set handle to invalid state +@@FileCloseEnd: ; end sync address + pop esi ; restore source index + pop ebp ; restore prior stack frame + retn ; return near to caller +_FileClose endp + +_FileRead proc near ; FileRead(FileInfo *pFileInfo,BYTE *ptrByte); + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move pFileInfo to esi register + mov edi,[ebp+0Ch] ; move ptrByte to destination index register + FREAD esi,edi ; perform read from disk, or cache + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_FileRead endp + +_FileWrite proc near + push ebp ; save previous stack frame + mov ebp,esp ; create new stack frame + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileWrite endp + +_FileReadLine proc near ; int FileReadLine(FileInfo *pFileInfo,char *strLine) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move (pFileInfo *) to source index register + mov edi,[ebp+0Ch] ; move strLine to destination index register + FREADLINE esi,edi ; perform getLine + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileReadLine endp + +_FileWriteLine proc near ; int FileWrite(FileInfo *pFileInfo,char *strLine,int length); + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,[ebp+08h] ; move pFileInfo to source index register + mov edi,[ebp+0Ch] ; move strLine to destination index register + FWRITELINE esi,edi ; write string to file + lea edi,crlf ; get crlf address to edi register + FWRITELINE esi,edi ; write string to file + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileWriteLine endp + +_FileFlush proc near + push ebp ; save previous stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + mov esi,[ebp+08h] ; move pFileInfo to source index register + FFLUSH esi ; flush cache + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_FileFlush endp + +public _FileOpen +public _FileClose +public _FileRead +public _FileWrite +public _FileReadLine +public _FileWriteLine +public _FileFlush +END diff --git a/uudecode/CFILE.HPP b/uudecode/CFILE.HPP new file mode 100644 index 0000000..a3b5980 --- /dev/null +++ b/uudecode/CFILE.HPP @@ -0,0 +1,32 @@ +#ifndef _UUDECODE_CFILE_HPP_ +#define _UUDECODE_CFILE_HPP_ + +class FileInfo +{ +public: + FileInfo(void); + ~FileInfo(); + enum {MaxLength=0x800}; + HANDLE mhFileHandle; + BYTE mszBuffer[MaxLength]; + DWORD mBufferIndex; + BYTE *mpBufferPointer; +}; + +FileInfo::FileInfo(void) +{ + mhFileHandle=(HANDLE)-1; + mBufferIndex=0; + mpBufferPointer=0; +} + +FileInfo::~FileInfo() +{ +} + +extern "C" +{ + int FileOpen(char *pathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes); + void FileClose(FileInfo *pFileInfo); +} +#endif diff --git a/uudecode/Cfile.obj b/uudecode/Cfile.obj new file mode 100644 index 0000000..4a82ad0 Binary files /dev/null and b/uudecode/Cfile.obj differ diff --git a/uudecode/D3.TXT b/uudecode/D3.TXT new file mode 100644 index 0000000..41bf88e --- /dev/null +++ b/uudecode/D3.TXT @@ -0,0 +1,920 @@ +begin 644 d3.jpg +M_]C_X``02D9)1@`!`0```0`!``#_VP!#``@&!@<&!0@'!P<)"0@*#!0-#`L+ +M#!D2$P\4'1H?'AT:'!P@)"XG("(L(QP<*#M/-;RQ0E(UU)C*X'WI%[XKY7#*XVRM`FWT:5+P2L_%@NO#D\ +MA;F#\N?>C76I9RCQY/7?#`>AI?3)+YT?!/0[9J:SS:P+B`L0,!BW3M5/NRK0 +M5;Q#;^%.P;^%\;'WHGANP)B.I"0>?(U".&&5R6&@$X*,H_O1J7%,JVQ^"Z*Q:3AM7+U%,BZ;3Y&(P,8.1]*HQ)'J\&6,QGHZY(! +M]J;7\1$#N,8\KCDVU2+<6*GC4E9=6UUY]]L[C>KGQETJ"^EN1WQ6,M)F2)E) +M&1N,U=07D;872I/+)I^++4J?DQYL/%KP:*.YB8A1(/*.0%KY"'!ZYT@"N +M(QE0.8R@;;SK$`#'U3A(B"01K;1&%'>90,`N`,>E>UK&#(S$IRY8QZ#M4,00)&8SJ'49WY_ +MDM#+LN/0J8$BB8K$`""OE& +M=^YJEO+7/#+J/5G8$`C8;BM7<)%/:O&D@)SDE.:U1/`5=BY=P!C7)N!]#_>K +M\<%7R4MYP^*]X48XX5;7%LV/3K69CX9--P[=_#D5RC(%W^M;"SM9HYC'%(?P +MTF6YX9.OZ-2FLX@&\&)>84D;LQ'(F@<%-7/K5?\`@YII2]V8D4[K$BDM^O>MEV`B): +M)HF.Q*#*GGG?I_.D^U*/3-2U<7^2$[>!PR_M3@#25P,'_-%N("\JL\*L@&G2 +MRA=9/]?>G;:QTKLBF(#.6Z_KO73$S.4P,G8C&,#IGU'>LCD[.7*;DVRD-I'$ +MDD?A*T8.N,:=\=L]Q49+&+:YCMQ(\9`5<8UCF.76KED1(G9R-#;LQ`W]_4&L +MTKW=YJD30$BDPJK(1L.6QYFFP;8L26+0)IGMCK\<'$@.5V.P_E3IL94MX)Q/ +M!'0![4Y9VUHV"PC1W(^48SMV[4G>6D,EW' +MB-8X/#&D,^D`]<'!ISAZPQ3"$R(XU#P]38).=Q3/\-HB3[+^7AUH;@.P@,4F +M`>_WK&?$'$O]H^)\);02B&!8BC@X/7OSWK;2L;DJ=*1R)VY8]<"OF?Q- +MQ!+OB;M^'C6120TBG/B=C]J9@^4N4.D[CRB[%O'QBUAT1QQ6L[J97YE>?E': +M@<>-NL*V%C"D-LB"29AS`Z#W-5/`N,S6D5S9C!65"R[XTN-_Z5>NUGQ2*.[* +M$PL1+-$IR9),:53'O4<7"?/0M&*ECT>;PF1&R5SU%6'"[R*"18YE55:0$S-D +ME1@CE3G'[<`F>XN3+>$A61%Q'%C]P'KCTV%4:C;>M2J<2)%YQZQAC2WNX3+( +MDH(+L!@]@/I5(%'+%:6U'^\\#DAD)$ML"P?Y410!CES.Q]:SF!DT.)NMK[0= +M'D1>@H@B3E_6O`410/ZXHVQL8G!$F.52$2$9P:DHP#GZU,`G:AL=&"(B%#TI +M@6Z&(X4D#&_2H+^A5WPQ$FX/Q6-ERZQI(A[88`__`/5!)T:L<(UT9_P$['WU +M46.V0GK[YJ>GS4S&H&":ML/#@BY$6Z7`83,N6`.Q;K64_P!/N*K`7M)WTHK:D8\@3G;ZXKZ-_NT; +MVR10'#K@AAR^]*R97'AG-R0N>ZNSY'/P&<_$D]G:1^!:K<%1*_([]_Z5M^'_ +M`.GUFD"F_=WF))(5L#>M';\*LHB)/#>64G40"6.20VMC,+>7!,P+C;<8]JQM +MY&@D"`Y447$KMEP[>=O7<4K(@$K`#"KTY8K3'A]B93BX +M\(:X7P]^(7MO'(%\)Y55FQOISO7V^3@G#X(3(966)$U$G&!@5\?LKGAT/AR+ +M%(T\;`\]R<]ZUG'?BB3BMB+2&*6*T*CQ9&&&;TY\J3-R;-+TJ=4[/GW&3%Q# +MCUS/G"/)Y">B]*T/P]QM;$B#B9,MOCRNN[+Z'N*S=W&[W;QQE0JG"86HI$0S +M%WT@C&.YIS5QHM88)OXF\^*X^"\0X5;3V%_'K63S`C<*1OMSK,W'#[72/PH9 +MF*8+%GH:K8/#B;(E89YC5S%647$&:2&-2=$9U9;]X]SBE24ET7'%%*FA +M4,NG6%TCF<^M,Q\"#1S`,-0\H!Q@^]/)/"LO[:7*C +M4-&PV/08'M0+)-L;BT<9NHHH/]J*2/%,NB0#;0`0>Q]JBO")9Y=;.$A+8)V! +M^@K61WAK +M2\/>&)1!9QN"`YRK#]J-B#G?ZUDZ-Z^@$?&+B#2 +MDB(RD?O#G]:(9K>Y<,08W(P03J'WHSV,3P21`YZ@9W'K51^&97(78#;2U4MK +MZ"Y3+N6"01`*6.!@'.:"MX1HBN%QG;5G^5!M.+Z;4>AK3#(<[)B:=&T_%6]JFN +M1B#T!ZTF;^>Z4R!8XHQDZ#S]S68./R`MYB/+XA&Y'KWI +M!X)FXP)F4K%'&0ATX!R/>F%G*`?B$."<%XR`#[U&1#P7]F49P".1"\OO2S6F +MFX%RA'C`],@.*9D=Y0#&I!`_>(Q0Q&L]4U82=$)]:,MR!I88 +M^8'GU],&AW=J;O$PF*P$>51SS^NM-J^E3&N'V&H,<@>]&F@D(5$52Q`T:#MC +M]=:6E39;=HIS$%A+/ +ME(/7_(IV3C,0NFA:<"/2"IP#YN>G568>^,5L_AJHF^8YZC)S67+E251*;+^0 +M%458^7+..M9J^XA%`%\/KVW\NX.U!3BMZCM^T,;YUQ*PU*1C)'?VJJN)U;0 +M=3OMD_2E>(6MQ96-P]Q;:K<*2QAD"D#'/>D1ES1:29EG5;Q9H"HC0DF,LN=/ +M>AQ\/>!PRL]-6CI((IDFD9<^574`D>]:`P*8M$^Z@95EZ&M._;PR +M0:3Y0E!*\B2QL='B+I8*1J&0>6:^=\9X<_#;]H68NA`9'.Q(KZ9Q/@D5OPZ. +M\6=YUE.D@+C&1Z&J7C'PC<<0X3;7G#Y#\"XB8I$MFT(F#AP-\D\S[=*3N^$7]B2+JSFB_^ZD#[TJH*,&W& +M#SK7)*:HJFB[XU'XFB"*/`C!9LG.`.9_/?UJ@`VK5\5D$?#6DC`(N%`UGKOR +M'IUK+Z<4&%_$LTWPL8'LN(0S3%0P&5/R@]:&@XR#@;=CTH@&WIU-#1LYH\8 +MR"YP?UBGN&^)^(,49RTJE,?Q9Y4IR)'Z%,V$[6U]#/'NT,!!).Q'2N$E0*T7'K6./B,LEN0;>Y"W$>.@;SDEBCGB>$(VI1L1L?M573X,N6:BK?D^'_"/#KCBG&OP,1TI +M(A\5_P"!1@Y'KD5]+@AFMI5MR!^R\H;;?MFG[;X.M_AN]GGX?DP3Q95N9DA,@V,C8U5R\^) +M>$V\966^MN7+Q5Y?>JWXYM$CX1>KG0\:^-$P_=(_6*^1V]Y]!":X_D+PNSMIS)XET(64[#).W2VQZ%G\*Y4HR>%)S&U!L",2"92Q5N1W&U%O`8(6*E=OXAR]J33 +MB;B/RJF1L6`Y&F)-K@YN:>#%F3R\-?IV6YBAEBPJ:5`Z"DV8L6?\`NJI5STS5EP\JC`&0%FP,$D;=OO02=+@Y<(7Q +M)V.3<=D>+PH(TBCQNF@`#L!7JJ_#"RDNR'))"J22-SC/2O55AJ"72+VQF=[5 +M68>(FG'J-J\WA&70`4SR/+Z5.UB3AX!UJ\;`#!Z5.:2VG7`=,C?9L$5GOG@: +MNA=_Q4*D`>*@_?ZB@17DDRM#X4U"C_%6,YDM])4^F15M')&PP_/;.V],-&H8 +M$-D'H1S^M5O^R]G!7)>33`F2&,YZHN,BJ^[*_B%*,=]]^E7^F-7P,`\_-M79 +M+6&7S!%<9W!PMK@S)X39 +M*G<#J*KKTM%<"-LG/('8D=Z*$.:(WP6]C?\`A1PPW&\1&G.>1Z&A7EXKR^$R +MZM)QENE+1*KK@\FYYZ'O2]U&T,PU#.1LAJIM//ENH&JG[=P68<\C;TJ2XZ)5\,T-IQ+4I\,X8X\_P##W-:"RNH+ +M=3;VSR3,,EF#$CEG;'?\MJ1X=<22".$0R^%TD.%'T&=Q +M3B1N`%`UX)T2ZL1K@9BN)E49_>7=318XV$; +M*V%SG)WP3W%*7*W+V5R@A&K1L5WU#;;&:IV143M&N)97F1<0#9$ZD;4[$BR? +M(ZYY['E$`T+UP.^^*3N;_`,)#(="AB0H; +M.2>?0UFU8I9G+\>BF^!-HF +MT/(4746_:1#ICJ/UZ562"-8I0(C)$8\'(P4.:)=7MU"\[!R2VZ@\C]:JY+]Y +MG6-<,-6"[C!WR3G[T..%\BP5TRE/PZ%944@J_(C8[9[4LZ:8O#D0/H!!(;<; +MFG(K5B!I8ER,X[M3/_I+XCNW66UX7=/$X&K*Z<8]\=*UPB$HF6$C1PC\)-.! +M$,G+:=&_I5CP(O\`C/"N)KN1F'BOH)\K'EJ^G\Q5E#_IU\1M.OXGALZQ,X+` +MD`8SWS5U;_`7%;"^?BG$;B*T5L@PJVIF';MRJ\M;6BW'@,D:+%EUDP&&&&[# +MIG;M[55<1L^*SQ>!"A%DK9)8$B3)W)/8=JTO#8M3M"4:16;RN#EAZX%:A^'S +MM`8WF#,%QI"9!['>LFGQ[K8%'RRWMVC21+VS#G.(S;G"D#T(JT@C::Q'[-AI +MSG)&WI5IQ"TD+%;BXTG.X`TX/L*JEB:U9X4=^8.<9W^]7^XMHXLT<5C/;2*3 +M&5RH`Y'TKG`9M3-;%L9&5SMO1+B(R!77PF9>8#[D^V*3O+&6RO5=-2!_,AQ] +MZN-AQD^RYNCH3]O,D98Z=+';-5-Q%:R6^6,<\8;90BL-MS]JT?"DLN-V6BZC +M#3Q'KS]"*A=<$\-52--,2QL%(.26/,GZ4VW5HT*;?1F;/A=M&(MO$@`RHP=OF]:N#3EE?DIP7@^!J"#1XWQRZU]KO_`(:X;-:!KBTB=R-QI`V]"-Q6 +M*XC_`*?3%))>$R>+IR?P[[,/8]:OW$^&'"X\HQP;_-$1B#L/85&>VN+5BL\, +MD9!P0ZD4-7P1WJZ-,,RODNX9A+;:&8G0N!GH.U(S@Z@*'#-@8!]/>KKX?LN' +M\4XQ':\0NUM86R2YVU'HN>E+_'DWO-&>.BE"LV`/L!7T'_3[XJG^'96LN(Q3 +M'ATYR'"D^$W?'4'K7T"QX'P3A$2"TLXM1&S!0S-ZYJ[AAEE&UJ0O_(@?E29Y +M?I&.1I\B5"X\`^)<"M..1NE\7,;#24C;3^ +M=4LO^G7`4MFAC@D12.DIR1[UJ?&\-]>EM)&#MOFOG'QY\4?%?#K=Q:<.-K9G +M9KM2)&_+Y:;!J7"*W-=]&#^,.'1?"G%OPMK>F56\QC.[)V!-9N/C-S=.8F4% +MFY8'3UI*YFEN;AYIY&EEU9$9Y5?<(O7EB%L3DKN.P%!/'2 +MM'0]-GCGG2R?Y?N7#)I12NVV3MC->5UC0EF`[DGG1`5/E8\MZ3FB65BS\N=( +M7ZGJ\C<5<1N.XLH+F*2\95B+F)J*LY&;2Y-7J+DJBJ%;)`J`@#_-.#&K4#@YJ*QJD +MCKC`/ZYT3(4'##;'.@;LZN&"A!(E<2!8P0H)-(C&>7*N7'$(5F"RLQ4'?0=P +M*K9+]1*P1V*`G!(`)JU!LXOJ.HA*:2ET6H*CT]Z9MI8H)#+,XP`1@$9)K-&^ +M8G8FAM>L)8X3@E66,0`-:G +M./F7?^M5DG$6AJTEJ/VD8<=\[?GRJ:<3M6;0R +M/#GOYEJM@XW#HPR.R$9&<,*ZMU`263=>9P.55L^T6I?1;S>&Z'Q(6,9^5T;( +MI=(A'\DAT\LU.UF0QYB.0=.U1@XR%DR9-2]^H]Z+VY=HIM'9;+\/DJ"R@].:TI +M-(6&F4!L?(X'>K::4F/QXFU+W&^*I;EDGS@Z2.W*FP;?8MJNB#:H<8.589R* +M]XOC0&(C4AY'^$T/QRB:9!J"G.1SQ4"_AD2Q$'N,\_2FI"VQNS8Q2$CI@C/: +MC2OX9$D9\NK/TH"SQ$`H<@C!4UV,ARZ>'V\)(C@C&.NG>@O$2T +MT?+9/A'BYMX6X@\4<4DPC1%2%B4/#P+N73:1H2V!(XV/S13H1*D>^-UR?Y5N8E`LH\G5JP"< +M8U4S!S84$9^VX/';7@EM9#"W53YE85:NPD)7MO79%"#GYARH<+9ST!--22X0 +MY(Z^(RF!N*FX&E)$VQ^5+DZCFC1DF%QORSFHF%0W-ID19<[@9R*G9G2[1$>5 +MAD`TJK%K9@.:G^M,IY;B,]"<428-<4%DLHG/G4-]-Q2\W"S)&J"!%`.0=B:L +M6\J.0,@"F(F/A+W`Q1T@;=%99\,CG+>,/F7DW2E[SA#6,JRP_)GZCZFK:*<_ +MB"W0'%.RQ)<0:6&<]ZK:FB;FF8OCGP_;\;X1-`RA6D&SAAJXVN@G+[/SX/]...L +MKF$02LHSI$F"WMD?AKQ'MV5@KAU.5[G%?I)[,VSE8CE5(QZ^]5W +M&>`F:^0<5_T[C,I:P=TR?EP6P>U:S_`$]^ +M%$X':W-U<`&[E;0I88TJ.GU-)<57`WE]F^E8S1_)D#[GZ546]W:3<1GL8;F* +M6>V`:6$9#+GEFB\8XU!P3@\]W*"[(ODC4$M(W05\K_TPXO/<_'G$&O,^+Q") +MV)8'Y@0V/M0/"I')N`6=^%S)!-X;$=F_P`@5@.!_P"HO'N"PK;^ +M,MW;)L(Y\DK[-SHX8..`7DJ7(Q_J#\%_[#E#FNN#K^ASQK,U+MK@=P<% +ML[7D*RV>L4:!%<'(&#R':IP9).1Y1T[U +M[5D`#ZU(*8QG!P=JLI+D#*`&)QN/SI.Y627A\JH/.1D4X[$@$;T.68QPNL97 +M6PP,]":)&?4N*A)2=*F9);>9CNN/K1!92'=G`]!5LE@3N\I__44U'PVWZEC] +M:<\R1Y*.F7DI!91#=G8D>M'CMH0?+"6)[Y-7T5G;(`?"4^^]-*H'E5<8["DR +MSFB&"*\%%%:RD#P[K1H<==O2O4IYG]#UC12('!_\K!MAG8FF4BEDR!< +M2EO4C%6BVG#;E"([A(Y?X'&/SH8X5.DHVR,[$]*CR+]A:@V!$G$+;8$NOOO] +MZKY+JV#$#YE^:N7!M+I&$4I20;:6YCZ9VRA&I>NXSV +M-!>>65`EPAU#DP_6]:X69Y4RQS?M5Z\QM1XE74"",] +M#RIK\+%.N)5R?R-%:3Y0'+Z`HPE7*G/4&H-"3EXFP>JD]$"AU)'('#`]*&8-2%D`RI\P +MJ[35,'E,LI0+BV;&S#?%+VR$AA^\IW]JG:/J\W4;,,_:I3?^WNTE0'PVVH%] +M!/[+JURR)&&QD@X)YD;_`-*T_!AQ6^6:WX=)$&&9'UMAL[L\+<1EY226!8_E5O: +MS1.><@TG.D]*FEPERJ)(-2/\N.FYWS2]THM"#*<(.3=_2M<9?1PI1:[+-F,C +MCPTU*>>V,?W]JG`!:,Y=HPA&5&KY364G^)TL8V-PR*C#`0'))H'"YN-?%-QH +MX?!^'LP<274HY=P.Y]**P5$U-M;GBMP!(Q9%.6!PP:6,@&QV^M!3SLI'7:H&OLL[*/PUY4WC:A1#2 +M/>C5!;.$9]JRUU8W3<7?-O\`BD\HCEE;!A&<[^19(4$JHY7;S#(!I63&IJBZL^76(\*0MJT#.`ZID +MYSVK82-HMHQDD`XR:IY;*>TXN%U;LQ(8C.H/IBC3J6VI.%-)V,@@,C9 +M`/O4>6`.@_S2=]?Q6<7[0DL?E4/>KED4>S=@TF3+S +M'K[+ZXXC9VC:9IU#F0PG&1S\/\`S5!';%6)*[D[DGG1'B1T +MQFDO/R=*/IF-+Y-FMX9Q*SOQ*+:=7RN<-O8\A4`=;-Z'%34$)JWW^6HB,'(NI=6W/F +M:'%"TF0@RO4XQ3,<(E^;<#I1V4@$(,`415B;6ZB)HU4`^E*JKX41G2Q(Z;4\ +M`1(V6)]ZE#``6?'/Y1Z4+29<9-%1=643.9)%U'D"V^/:EOP=M;&.YMX(UD1M +M>57!)ZC:KNXA5ETLV,TJUNJQZ5)(.2TEBNTYX^1OL=J^S2<,S*'0D$=,9!J1M9F7"P[\MAM51W +M1"FXR/S9=6-Q9N8[F!XF'1UQ0"@WY5^B.)<#%["8;^SUQG?!3/YUD[[_`$_X +M8Q)BBFAQT1C_`%S3%D^P/:3Z9\C\,]!4XO%B'X=P"#W4.+Z.MB]7U$(J,J9>MQ*&-Y`KDE?EVV:B0 +M<7@('BZAMG!&PK.UT'[U/:B$O6,ZE?!<3<3#DB->_F:ETGSG)Y[FJ\/]14U; +MM4V(1DUD\SN;+5)@0#SIB.0D;?>J=9,4RER!UZ]J7*!(S+='++UQ14/(XWR>?.O52_CF/+.:]5>TP_<0[PWA=UQ*[16=UA#9 +M=@,#'IZUMGEMX5"%&"_K2)Y-_ +M8_'!00K-=PXRK-IP.?Y[5.(J(B48&/L-BM0>P@X8'8Y'7' +M6CS2QQQ#IY=SGOTIJM"I%'(DI;(\OH=S7@Z:"DV#V/(URXBFO9/V+8.>2\Z! +M^"NHJMRJF1$EG.-+;'EGO4#(OFVY\O[U)T4`D'4A.".HJ/X?"\\C/,4*(04C +M42![^W>CD,DBR)N.3?WH4$15M\L5//NM/(@5&4#('+O4;HM"'#KB2#8;,#I(/2 +MM%PRX9)1&S'4%&E3RZU3SVWG+CD2#GUJ[^';07E_'<'E''IJ*I,ISV19K[*$ +MQ"WU'4>6:M9;".]26WF!*/CET/<4M9`23(,;)OBKF#`=B>I(S6N"I'+R2;=F +M'L/]-8;;BDESQ>Z>^C#9A3&,C_E_:M[$(8[46\"+&@PJHHP%'M1P05P1D=J& +MY,7[NM:*Q5MA(&C(\C`JFPQ4)LELGN-J\#"1\A3'\-1;2P\L@/\`Q;8_2B3! +MH8=!)&1_FEE8QC/K@TS&V!AMB-MZ%,FHN.XYU92/2H)(&VR"*J[4$NT9Y@U9 +M0/MH;8U7X,?$R-1&3RS5!1+A",!3S%$H2-J&#G4*(O+TJP#M>KU#,09V+`," +M!SZ5"B>!G^0J$H\K>U=3*EEW.,$$]JY)NIVZ5"T"/R`#J10+E1I50-]0S1X^ +M9/:@.-0]\9J!)3)S67XG?K"PDQD*"%7^([XJ_XU<:5,2'IDUA +M+^87-X<'*(-(/\S6?-/:N#HZ+3^[.GT`*O5M3NA3)P*L +M((^IZBN7.;;/1*HJD`6R#C'TS718#(QFK>.-0"S41'M5\WFI25<^U12:'0G]ECP'B*\1A:TNU5[J,9'(%QW'K +MWJU_VYHF!1]9`U%=@PK#F22SNXKJ$XDB8$8ZU](X=?Q75K%,AR'`/+E6['DM +M'']0TBQ2WP7#*JUV +MDLOV9RRL_P#Y.A_S6A3\'+HM+9\H,G<[T=[C;2FW:JM)2D6`.GV%1BN=3Y!I +MJEX`VEU;G3MGGUHI;?4,XQRZ>]5\,WB4(FD=>9J,AU:EJBK%)D5Y.?+;([4-8]3G&X48S174!CA1DG`HBIH3;? +MOWHB61$049;;'J:X9/+B,;]S475(F>"0Z)1 +MH9MO.,#[U=9)&,#E2T]G%.A5XU(-4T6G]E/+8QD%E09!V(ZU7W-C'(I1QG'6 +MK*XMY^'^?)>#N#NM0UEP"""#R.!_2AI#+,?Q#X;L[R%A)"'QD9(W]\U@N-_" +M9L(_&MWD>,G!4IG'U&U?8VA&E_+N>W2E39K,&TGS<\'K0\KH9&:7Y'P22T=$ +M+#S*.HZ4M@BOK/'OAV.6!YH80DHW)48U>_2OEW$K;\-/A1@-T[4<)6Z8_+CB +M\?NX^O*^A(G'*N>)7"I/*NB-CWIO!C39T.Q/(_>I@OGI]37DB8=A3$=LN=VV +M]!0MI#H1DP8UC][/TJ:@GFQI^*R@.-V)^U.16ENO*(9[G>DO*D:X8RH50>F_ +MWKU:2.%%`THHQV6O4OW_`-!ZQ(V1N%6)@=PO0:$V^RL-\Y4FHZVDE3&&"Y.`? +M3M4Y+EUE;5$BN>ISN*"6F72^B!EYY7G5()L#=W,MLZLR>0';?<5R[N7DMQ

BS1^-'A3E.Q.0:JT?\,9HBF +M1Y64^49(WZFFUB!)E&V@C;ZX-"OCI+28ZX`QS.:T)\BI="4<`C&1M_RSO1E% +MQ(P"NK]@=Z#$S,_[5/<:N5,2`LFF*./OY2:8)_8,#X0!>-HV'73L?U[5PO%< +M;,H##J-JG:-.P\.13MS#)M.&`TGTH)392HJUXN*I[KY(I(K6L +ME>YD\#?2,9[&O1V+QR%V!"#D?:F[9Y(8F`4EFR5$664EED4D8W(]N57; +MZ+\6>@(E5D(V(!!':K?X8;\-087O0O@;!6S*<>XCAV&@2Y-L(V!N!E.6U6OPGQ$I.UBSA0?-'GEG +MJ*JI1E:KV9X9ED3(=3D>AI^,=EPK-B<&?88)O$93(2<]C1)(4GC97`*'F#^5 +M4/`>+?[A8*PP#R<8R0U7H*.H\,$]^PK5%VCR67'+')I^"LN>%D1L('._)6W' +MT-("&2'9D*'KD5I9&9$T$#;F:BZ!ME.K-,4FA7:Y,X+C#!023GI5Q9/@:CS[ +M=JA+9Q0H-4)U9^=%`QZU,0]K&^_:FQG8+B6(D&D[XKCL`I/\`W56UR5.` +M*+%-K8`GWIJH4T.1HRE6#0QLF,:2=LBAJK)D$`D?8U5!6+O!%,,G#* +M>=?,_C#X3(NQ):$"&3)3.P1NH/8>M?5554WT;'Z4&\LHKJV8%<-S4[5&O*&8 +MLK@VO#/SO/PF\M[AH7B\Z\RC!E/L0:5\,J2K#<'KTK[7=?#=IQ"WE`013C)# +M(H&]?)>)VBZ9/*J^/()Q]Z861D[5GDK-$719(3C8C(KU("<[9->I>UC5(TCW$ +ML,;#&6&X!'.G(>*:X%+1J#@Y[?:O0B/"0.2TIW`7]W/2AWD<=I&6(U]%.,Y_ +MQ69M/BC2W3(7=X)X_)&ZL.JBJZ+B%Y#)@N<=,CI5I#B=)\`+GL];<*,V-*LR]6/*GQP^",C +MQ'QG8=S3L2*,Y(44C<1#!V`I:;0SAF$XE`MM,9`F2!L,X%EI,OU(^E>XLN +M)B`5'0AC0K0Z498WU.VVH;XK2I<)@;+31J7XRL)$4"^+(-B<^53_`%J(O>(3 +M\YB@[)M2?#;1=`VJ]AMARQ@=J#)J)M\,D--C@NK8@OXG&3/+[ZS14FOHQM/) +M[$YJU_"+7&M`>7\Z4LDUY+VXWX*Z+B<\4C--&DNKYBV=_J*8@XQ'#,)$1HU; +MYT.X/M4FM@1C`I>2Q',4<=3)=@2T^.1J(+Z"Y4&*92W8&IO))&"Z^=1S7J/: +ML8;9XSE68&F(N(WMN`"QD"[8;^]:X:M/LQST4E^+-9!>)/G0V#_">=&8.4W4 +MGMC>LG_N4+P3`!F'?G6B&6,N$S+/%./:+&P#!Y",XSC +M?H:L`<')SCOTJK28-(ICE5@1C#`&FTN&'E9-/8C>FIB6ARO5!'!7;\JEJ'>B +M`.T&;Y?K4RV:#.W4=ZA:7(`G<@5F_B&\BLXB20TI^4[E2?17*,DLV,D[D^M-Q#.-J#&O+E^C348VSBN5 +M)GI1J$;4X@Q2T-,K2A,@P.17"=LFN*VU<>K$IYQ-IWYU9WDFGK6 +M>7,U[Z`4S'&[;.EIH*FV6J_M%(/Y4G<)MGM3L>R6=Z\F)"7R$QRQ0\,[^'&Q<8@DT[$& +M926Q@D@=*4\7\)(04!!Y%>0]*@UW+*,`8%:8R35B)1=T//.D8.])S7A.=/*@ +MZ0=FRQ/5)9"1[&JYS)$2&;/N<4+=!)(=:12!CGF1@X-#M;_*Z).8V(-!+GAFO39GB;:5I]H^.WEFL>J6WU-&I&I2-T +MWQ]?>D6DTG=2#ZUM_C+\/-Q<>#H!\,:]`'S9)^]9[\)#/A9%W_,5%)>3J8]" +M\L-\.+\,J!<`'8?G71.S'8>VU,W7#O#0F,\MP<N3VR:]2W.)2C9KHHKB)6=4`!YN=LU$V]R[#7(2,]5.11 +M9KVY"#+(5'+I1+8M,I99CJZH&_H:Y]OLUN7/)&.(*N)51O?!_G74@MXCXBPE +M2/4"O2$N2H0(PVRHI*2T$D;,=,G7(;!^U1+]0;#37UR@*PV@(8G+'+?G55W5L3I4E!S..='MR+]=4Z!,;L5)`44Q+;S13YX0F$!M$P,$ +M`@?<8%8`8SGI5%O5N)8V6-L.QP6%5U +M]'%:>$8SJ*8RY/,T.)`3X+VTB!"YV`ZCK5]:(JX(%4-E(&T`$;@;U>V['`W^ +MM)R<,;%<%U;$`;?:FCC&V,4A!NM-H<\JJ+`DAE2*BY\NU>!R<9KS8`))`4;Y +M.V!1M"EPQ5EZ4M<+@9&U<6\-[.T=LP$2?-)C.3Z4*8.K8$SL#S#;C[TIJF/7 +M)DOB:$J4GTG=19` +M?:BYJ.V_6H6F+M%GI2SP#&PZ4^%`72,]L\ZY@-RWH:^@U(JFMM63B@F$@Y7( +MJV:/((%0,66;:H +M9#MT)_E6W%K(OB1CRZ%KF)]'UTM<2G.!SYUFN&?$XED$%UY)#RSSJQ;B4$Q+ +M:QC?K6OT>1FY`Y/TKY+)=>)?R3="Q^U:;XIXP/`DMTDP +M6.-.:Q88A@W?>LV7G@]+Z/@^$IOSP:.`94'.<[BG5%4MAU7<9P! +MC>N?--,W9(N+#1^E,"A)M[40)&.1B(9AI;K@]*J7W@LN)9<;@_)]BB8^# +MJC;+`9.#1`P1"'C!+;YS68^&>+&[M@CN!(@`;?\`.M*L@+@R`DYSD;9IB9X[ +M-BECFXR\$U(2,,DWF["N$C25<'7G(+&O,4UZ]6<\](Q@U$MJYYQUWYT5BDK. +MN-#>8AACH>=19\@:<8SD#^U"=E`!!RW6AC7*2J>9)9 +MM`!\IW--`;8W&:[%:+$H&-Z,J#&_2M4(J*HSRE;L"J*-SFI``<@<40@$U[2* +M,$@'`W(H@F3I4/#',US0.8'UJ%4@I*,.9-+SV:2@]SZ5+!'?%260C_-0A27/ +M#9(O,B9`[;[4L$RO;T*Y-:<,KC!.1TQL*!+:1ODHH!]!0[0U/[,\;=FSIR>^ +MP%!>U+#H!GW-7C1/&_($>U1>#4#E!]JK:7N*:-Y8,*WF3UH<]A;7>9(G"2'F +M.AJV:T7JN/I4?PJ\P-^]1QXIA1E3M'R+B]K);<:N8).C%LCJ#OFJYP%N&5CN +M!6H^+X"GQ!*1R,:G'*&3]$*321*I5SG +M/,>"*'Q*'Q;,2#F-\T<:)K,7O8FUVN4+)W:GQC%H"V +M>0F:]A\1M67SWR:M89EBG+JV`&(&/2J:!Q#Q")M)Y]3GO5BA#`YV"KDGEO5S +M1(,T$@Q9BXTZ0WF'H*SW%63_`&^*33K9I<`=!6@GF,O`%Y;#=R<`#^M9PW"/ +MPN>-AE5;*D\\TO"G=@Y.J+J*4*(G!\HPM:&TGD?&B(:<;%CC-9GA6FYC"!AO +MAJL.(#B-K;$VN-9P%;GCO4E!.5!)TK-">+"T?3<0,H/[R^8&K*VXA;W*:X9- +M0_E6'M.`2WA1[SB4TK.I8CQ-.D_?85?Q\)6TE9+:XE:(+\[M^MO>KGA48VF) +MAEH]FN@'.F8^>U+JH!VIA#C`%)79 +M4AE6ZUV@!R!M46D.,`YH[%;24DP&1D?4T`W:*P4NH/3-1>%9-V4'IN*6FLK3 +M0?$1,>HH+&**+..0.-CG;J:)]:R\/$5LKEH5#20_Q*-6FKRTOK:Y7,4BMCF! +MS%&N"I0KH:`&.>V*EI!'(5'4N,Y&*&954<\5.$!39,IMWJ'A@\O:H-=H#NR_ +M6NBYC<8U+R[U3H)*0-D\]!GAU$[;TX"#O7-(?)Y$4-!J5%!%5/(9(K631CGC([4C/:I-&0PS3L6>4"Y8H9%R?/VXFO$KEYES +MC5NQ]^E.+%XP9!EL'((Z5/B/#!8W1:,`1R;8'('G48&92,:E88Z8P.];)34E +M:.MHL?MX5%>`<;-"Y##D=ZN+.^*#!.5/WJO`MY"?%F978Y#D4 +M7P6).!24[9)^U&\8.OD.?8TI.PTD[?:@78O''DS?$SF8,>0-'M90`,&AW4R& +M=2H#A6R1SS5WAOC^2_U/J)R!'H"ZN60>=09B#@H#@YQWI.VO;>Z@$L5P#J.V +M^<"C1D2R%/$)(.338JW2/-M;>PJ+^(<[>4GETI^.)$`"@#M48HE1<"C=,5MC +M':J,M$"0QMVSS-<`!&Y-3`^E>U8;"C+=A4(1PH^E<^8^09 +M]>6*((]LN?ITKIZX&.PJR@6D9WW]!L*X1GF-O2B;@]Z\<$5"`"A!J8)Q@U)A +MBHY&>8Q4+//$)!N-^]+^&PV!ID>ASGO4&&!GEBH4@#*=/,FA,@(!Z&F@1G<[ +M$53@RP@>^"?[U +MFIH[S]/4OZ:*DJH7EC,<:RLY;)"@L#L0*%(H%K*A.V*NS9B^X1.T>SQMJT9WR +M._TJ@E)6#3S)-2+LTQFJDOHI([9VD900-SS]Z]3:Z86*N=\YKU,#SDHN+ +M:-!\/326R75@X.I6$B9Z#DW]#5S;W824QR(2&V!JK>.:#C:RPKDC4'Y;IR-6 +M,2+GQ6(POKBD9H)LTZ)K)B>[L;"0L6+S:<=LBHB&%?/&&E&<#!S4I(A+&&QT +MR#WJ@O5:&0&3."=E)S690;=!2@T6G$8O#LRXA5>@`WI18?Q5C%([#4H*MZXY +M5%N*BYA6W(T(HP-N=/I;L;-8XHRK-DD9(./6KYBJ8O@REU:3._BQ@C2QQGEM +M5P+)?P<31'4DBE8WHY9 +M&T4HJPMDHN.!Q(YPP^;T/*J_B-@J6P2,`Y.<@\ZM?P_A1.J'9SK`]N8KBPZX +M0,$>8[&EJ5.T3CIF9X---8WJH^=!(P1[[U](MVCN80#N,5D;ZQCEA5T(CE`! +M7U]*M."W_D57."NU'D>_Y(J"I;33P6(!SG;V%,M`5A(`PO7N:Y;2@J.QJ=W< +M@P.JMYB-CZTJ^.RFN2ML&47\@!R.M6)D6*X([,> +MM=.6+=.U"T'7-,LD:-1S'WH=PRTF<:`O(C8'M0B[E2"_@!8^;L7F):;T! +MJFX_P1>):-QS##^]76D*06/,TP8PR8QRYF@3E%VADDFJ92_"_$FX +MAPD)/('N[\(NTM?CCB$4,JJLDNEHV4YN-&",437T#&=%*UFD8PJTG-9@[@$,.1`(-7SQ;D8V/2E7A'I570U2LI@ET +MFRWIN+;*C\(J?/*Y)ZEL?TJ)MQSB +MG<>Y!_7^:L;JW\O+;OUJHE#1MY5.:).PE;186]W/;(1*3*J[ZL;U8VETLUNI +MSYB.1Y[U56SZQI//&Q[T>(".?;8-]LT+!<;'Y6!&1@BDY-MR/7E^N]-LAQ2T +MJX!H47`H>.G-IJ_>!&]4>KR@ECI)\K@9Q6FFTM*$?#*3RZ&@W'`&CU2V'F4G +M>$[X]JU8YI*F=#3YX1^$G11OF11&P5CR63T_E0?#49C+;^AR/2F&7PY>3PMR +M9X%0>2:3F#BC_C;A%RESD?PL0= +MJY'6`*WWP]+XW"("=]`TGTP?SK$22+I8) +MD$[D^OI6O^%0!P=5<;EB>>Y!J-G+]65X4W]CW$^#VW$T(D4>(!A9!LP_O6+O +M^&77"I-$ZDQGY9`-C7TC&H@@^]!O(4>U9)$5D.Q5AL15(Y6EUN3`Z[1\W1P: +M85QC^E$XUPP<.99HFQ%(<:6/+[U7QS$[@U3B>@Q989H[HCQ`P?6ARQ!AMM4$ +M=CUVIA1YH:#W5OQ=_7V?64.<'IBIU6<,OX;R`,D@8>AJQ8 +MZ=R=JW)V>7E%Q=,E7"0!OBHF0#E]Z!XV3D+GWJ611L.-3^B]^IHBX4'3M2K/ +M+GOZ5(2N`,I]C4LCBQC.`,5W8$]?K0Q(".QKQ.YP15@4$(ZG8>U!8Y.PKI8* +MI)8#',YQBJJ]^(N$6.?'OHM0_=0ZC^51M+L.&*[,,;;:8-B*4\T5T=+#Z1J65Y^E![[O@Z./T/'53DV_TZ-G\0_&\$MBT'#'D\5R/VN,$;YVK#W% +MS/Q6X>XNI6EGV!.-Z6"R*V3H(7F#UJ<%QX%UXGA@+S"$G&0=O>@;;Y.QIM)B +MTT:QQ_W!.C1%D.H,,Y5AR/(T=I\6ELJZ5*@Y(V))/6KBW>/B%O<-=6^KP82? +M$4X.?\` +M4^>\1$T7$IHG#`HV,8Y5ZKGB4%YQ;BL]\+81"5LA-6<#85ZGK)%*FSSCQRFW +M)OLUO%8V@O1,@)TMN!U'(U80P1&U8!"\978!22<\N5,<1B5KAD_B0XP/6A6L +MC0N55PP50>H(S_D5FS=C_3F]K(+!/:6X*KXD17IOBJ7B4/XQ2ZY#`[KG\\UJ +M=3-:##J9,$-I;&?I5%,C)=`JK#.Q'0BDQ>UV=&7S7)7VEH\*KE=39R21DK5L +M;KP[=A<2D1@?^-"!J]#UIBYC\/A^4&EF))/I6?8%WQN2=\;["J267Y,S;"<* +MB>Y$NG`!.FK*^4"!8/ER`3CI59:Q3^,LNDX4X4'I5HNA`6D7Q)#S[4N?Y9Z'H:9\4NNJ-,,/RJLO$:-_$ +M3(D<]-A4C&[13QR["\4:161(%U`#!'3%!LYV2?$@TDGGZ^M'C@=F7++AU!4M +MM[C-5_%W%O$8S^S<9.-N?<4R'/Q%M;>3;6-P^C2>=,WMP8(2[`Z1UWK!_#_Q +M2,+#?'0V=*RG96]#ZUNA>1W%H0<,IY^HI<\;A+E%QG&7*$K247N);:-I,9W4 +MC/\`.KF*UNUU.Z"!5P6>=P,5G[*V2RXPEQ#Y"6(QCGG_`*JXO@]Q\XEX<$X-JOS2:,%CD\O3UZU2W9YKJ4D?,2<`XVSC;GM6_C.%JNX)PV+A]IX2 +M.[N0`7=LDX[9Y#TJR5<`#M2LT]\N.@\<-D:9+`U;4:-O6AE:\K9Z_6D],)\C +MJG."*F5S08VZYYTPIV]*:A$N`93[4$P@GG3A%0""J:*4Z%?!&14A$!O36#7- +M(-3:B][$IH0Z'UJFE@*LV!A@*T97?:E+BV67?K0M#L>2N&4,"%&7<\Z +M1S&]=2U;Q=]M\T:9<+[4-CF^1I`'@U;4I,NY^]-6HS;+_P#44"<=:@N#Y*"< +ME;M!TYFKNU?R#;-4DQS?X!W4`_G5M:G]F"*8^B3[&KGA]G?[W$2LV,!N1^]4 +M-W\+S`$VLBOV##2M +M*!63Y&!YC!KZA@,"#@@TI/P3AMUDO;`$]4\M-CE^S=#U1?\`R1_@^?PV_AQ, +M[F)N7E)S1U"')T#0._\`BM6_PIPXY(DF'IG_`!4XOASAT!R4>0_\FVJ.:8Q^ +MH86KY_@R7#^&37DN0NF$$DOCI6SX+$(HV55V#X`]*G*J1)H10H'(`5+AV!#( +M=7-LXZ>]5&3E(YFNU4LT>>BT'(D#`!VSZ4.92R+N"/7>B1Y(Z`'Z[U,Q9)0] +MP#C>GT8SDGU%4<=LZKJ!V]ZU?QE:LKVDN/*"5.W4XJHMX5, +M?(T,I-(]%Z>TL"H0"D<^5-QDHNGYNE,>#CF:]I`\I'UI3=FSQ.-ZY:WUUPZ;7!*4.]+G^#Z1%Q*]G\QX9=*.@* +M@?S(H[W5[X#!+9T<@X#$#\\U5<%^,+6ZA6&\80S]-7RD^AJ]\2-NFH\ZTIVN +M&<#-CEBEME"OY,VO&./6$CK>6!N(\[&`ZL?2F8_C2U5U2:VG1F."-.X]QSK0 +M*(WWP*Z;:%GU,@+=_P!?6HHR\,CSX)?GC_AU_N4=Q\;<)BCD*&661=@H0C)' +MJ:RMY\><5F=A:K%;J3@!5R<>YKZ*>%V4C:WMXRQ).=(SFJV]^#N#WN6$'@2' +MDT9QO[54H9'Y-&EU&@QOYXW_`)\GS*ZXK?WY_P#>7T\H)^4L0/M2;,J*5C.. +M]77'?A>ZX(Q=QXUMG`E7E['M6>:,..F:SM.^3U.!X9P4L55^A)9XXX3'<*&0 +ML#@W;LOK#BD/^VK: +M\0A+S[&*7(P1TW'+%`CA5)A^'O8DRVXSEE]"O6J&.>6VG5AY@IV/<>E&M1%X +MS2.2`-QCF35-&?V=MN/D8N"#Q0P>!""3COG_`)9JO?3%<*,`E6PW8UJ;KAME +M>6BWN<+X7-Q&\C@C7S.<*3^N5?0^'_"0A +M>*XNY/%FA^11\HQRQ1QBV^#/J]9CTJY?+_DJ.%?",9X>D]U*Y8#!B`Y>E)_& +M\RB.PMHQA5U'2O0:$[%B'7Z\Z^5?%'$TN^/2QJX*0_LQ@]N='.*C +M'@\W'49=1EW9'T)1%B#D8'YUZAQW*X^8UZLC3.@FJ-MQ1S%F#O_2G..+B!FP3@9VHD+,]NLA'S*"WEVK3F_(S>G-[&Q`./ +M'=`XSJP0.^*(553YESWJNN8WL^-9B;RR(#@]#GGO3DE_:1/B4AI!@\]JS2B^ +MD=93^-L5:^6Z26.)OVB/R?(R/2JI$FBOP\K#0I.V.=,SWZ:W%N@CU');A",YR=J=X?P298,R:D +MD))P.6*[<6OX=@0Q96Y'K2^%PAV/9^*8*R@:2X,487)7.^VWUJ5Q`L7$TCD9 +M714+-CW]:6>X,%Q&Z`%D(;`ZTY<03WMS)-;P,J.`%+[>7%4UY)EM/O@4XFPA +MM2JII:)-:]^9ZUE+B-N-\15(B?,=R>G>M=0QO0?AOA6E9+ +MK(!?.E1T%,C-8X-F)Q4N/!G^/\.98H;6%3(P\JJJ_*.M7?`.`<2L[02'B&2` +M,PD%E'US3MM&;GB%V=&"%TG*[DU?\(A7\*N2HRO>@GFEM407CBI;BIMY5GXM +M"A/F3)8>PK3HD5W.NM])?H1R25HNYY$BB+;*H'M@5E;_X@X?;*T\]RH7.D!3DGT`K* +MW)^*_B%V@N"EK;@?*#I5OL)Q^4G;/"-HFRHV-,*-0 +MS7-6OG]:(@.:SI#&R.G8]ZCCS4QIR*]X7:K:`4B,>QWZ4PC?:@,FCD.521ZM +M<`M6-#>NF@H_K1-0Q1)BFJ)=*X:YFN9VVJ%4<(ZFAM]ZFS9S0FQUJAD0!'<4 +MIU-@XC^F:0N6TACT%1D +MAV9:]6:+BGXF/)7`5E[^U7UA<+)&&!R#M26C7G/4T6"%H6U1C8].AHW*T$XE +MZA[?2CKRQ2=M('4$4T#MWVV_7ZY4*%M!5-3%#!W.]3Y40MGB:`S^M$=L?WI1 +MVP35-A11"X;8U*V7"*H90QVW/+^U+RDOI`WSTH\6,!AYB>PW%.PKMB<\ND/1 +M%N6H*1MD^E-(YRH1LL>^U**S^*23ASN>X-%0:G`92/4'&:?1FL%Q*W%_P^2V +ME&8\[,#R;O60?AU[9DYB=T!_\B+J!]ZVT4+W#$*V5'[P-'>.2--*(=AC-,CA +MWJV.PZZ6G^*Y1\_U.=A'(6[:#4X^'<2G7*6CA?XGPO\`.ML'<'D0.YJ:AB<' +M)]Z):6*[9H?J\_\`#%'SZ2RXBL[0F',BC455@3U]:765HY2LBLK`[AA@BM'\ +M0>-PSBEKQ#!\!U\.0CH<\Z8ON'1<6MED5E$P'DD[C'7T-"\"Y2-6/U&24994 +MMLO*\&7<:U!%+R0YVZ=#3+K):S/#.I1QS'?U]:\V"NPWK-RF=:+35HJG7`() +M`K6?#''G#)87CY&,1.3N?2LS +M`BY`ZU/)ZU!6!]Z)CMM3#.Q:],7X&?Q]X=!U@\B.M?#"0KDKRR<=<"OI/QK\ +M0);6]+O`"#CRL.HVS1HP[`!$9AC/*@LS/L!Z5:LMM'A=7!B,3 +M,=('>G>&<#ON*,?PMO)(H.DLHV!QU-,6W`KNYM$DM;*>635EGT^4#TKZMP+A +MB<(X/%;`>?&J4\\L>=,A#<>>;R3?)\Y_U#^,/]EO#86L +M#-=F(,LN0`@.=_4U\=_%7+N68,6;?)WSO6K_`-0;EKSXSO2,E8M,8QZ#-9Q( +M';]UOM0VNS1CQ2KAG8[BZY*I%>IF.WDP?V3Y[XKU`W']#;''*NSZ_P`33Q(6 +M`&=JI(&D+*LTCNJXSN2!Z8K07)#C3G?M5?:QO^U94.K4FY% +M&,D+\343P6]V(S'%YD&1Z[?RJBD3QI&D)YMM_*M#Q*"=[-HV8@*-85L#EOR] +MJIK>/%@7SC"G<=]Z6CHM_P!N@<"B/$NE6//##F*U-M<120),B@(1G&,;]OO6 +M5C'[-?-D8VR.57/!9#J>'G@:P#R![TJ?V:LD%L31=EGT88@9W;&W_P"H]*`T +M:W",K,#J)\PJ4F2A._0=_K0Y)D@3+NJ9V&=\?:E",:KE`[2W_``@=G"%L +MGS$?*.E#/$`Q,:ZI)%Y*@U$^_:C1V,=T!(QEG+']\Z5/KI%2EB6.)@H$<9.% +M"C2?M5TBI2W2Y[*.[:Z:"3)$`88*_,QW[0I&S9XN)DQ_)+C(Y;@8S1R6Z#1&JY^R[MV$7%K@*-M0V]*=X078R*% +MSAR?IF@<)2/\9<-.WG8_ETJTMT%M<.Z``,E2>-'LDG,#D#7K34`-\T4OM!JFN"[C(YU[.,=?I08FVQOO154OOW_7] +M:472#Q;\J83EDC[T"-=O:BYP:M<"IIQ4N%*S+XC[NQW-5M_'XEU;P#?G:I&.Z1>"&YE@L>E'ECZU/3B+;MDFH*-+@?KK_`&JB,9*,G[6/ +M_T%*2W07)SL#5I6R^D6-JH>8ECL.E +M-R0*F&1<+UTYV/K6:LOB"R1M#S88GM6GL>(6TR#3*CCD1GI76AC2@HG(R9&Y +MN7@)X:-+OKTZ<\]_6FD@C=_#PVDYR"QQ[5Y[=QIDA;*>FY%-10^$B^W.@CB= +MTRWD5#$:+$@P!C;E7F(ZG/H*B26Y-GM4,S9P#C'I6I<<&?L(L08:9@.PVH@MA^\SM[YJRA*^LH+^RDM;C!1QOZ5BOP/&^".T<:&ZM5)P +M.N/YBOHHB5,Z0*[X8(P1D4,L:ER:<&K>%.+2E%^&?+[RZ@XFH#R"*=?W9A@J +M>V:3?AE^J^549#^\IR#7TV;AMK,Q\2&-QGDR`_TI8\!L2"$@\(_Q0,8_Y4IX +M6^S=B]1CB58[2^GRO\NF?-8N"\0E)\-4=NVK>B_['Q61PGX,Y)YY%;B6QNK) +M\VS^/@_+(,.?_P!AL?K]ZE!QZQ>V\1G5"I*N&."#V-#[V],4X05(Q_T>KU4W)QY?WP;N>2*",O(X3&^&T7Q6 +MW'B`["L=>\:ON)G_`-U*S*>079?M2(9.>,_;'\Z5/,WT=;2^BPA\L[M_069C +M=2R33OJ=SDFBM:V7PY\%2_BEN;^,Q1 +MIN(VQDGM6VX3PZ#A=@EK"H&D98XW8]Z>)K1##YD>0Y#'E@$$_2EA*%M)'.W.F3YED]3BLYQ[B2< +M+X#>73L`$#*H/5N0JFZ0R*W.CY5<2BYXC<3LCB:1O=P,75LGARM*)"QC* +MZG.W+:LO8%_!DB)!0'!U;\Q6IO6A:%Q(R%3G9C@'8UC(7\.=27/AYP0#@>AI +M%''F[@$ENF6QG)/S>F>] +M.6*I8V_AN=3.GI]*"70]Y5+'M78_(=(,C?+_`#/I5?*IG4LY4@].F*E< +M7?COI4:%390:4=&0:HV.ICNIY'UI=`8^%;#P7;1!@'/D&0IW)Z;G^M,1/*Z9 +MGTMJ\A6WL;H>5E8E2,>]( +MSXMO*`QSM]9N+RUL-.J'ETK,74)MYSD;-DBCD#B?@8M\L:L84VVJLMF!&QJ +MVA;R@TOR%)\$]'E]*Z(\;;X[FI!AG;ZU-1UHJ%6R(BZ=*EHQTWHZC&P&:Z1_ +M>BH7O%L=.5>T4734*H),$R&H$XV:C:_2HR+K3(^E4U]!)_8J\43\P#[T/\.F +M3IP!Z5&5M!))VKJRJ5.XP>U`-K@EX2K07(&<41GUC`.U+3R!(7;.,`[U$0KK +M=O'XE/(=POD'T_[J]@&!G;&:H."KKC+MC+DM]ZT$7R5&RG.Y\H^NU9[X;A5[Z'6K*-R&[D=*=B50< +MC7IX[<7Y?KT_7)",B#)S!HZC.?O]*7 +MCV7VP:*S^&NOMG(JT+D+7,\4>5?`/7)%)NF`3&^.XK-\5XR$XBVO.$YCNW\N=1DR]LRX9V?RX'.J6WXBER1 +MJ.S#?/YFM-PA!*^VY7`QC.>M-6/:T!.?QL>,]MJ>AP90FX['&,FFILPL%!:?A0([.:3 +M4/F8DD?GTIQ+_P##^68@?\@/+]J]H(1E4Z.E1U%,$'8]*41)T)958J>9=AOZT03`^5_P"G]*=&28IQH=!V +MRN_<48$$'H*2CD"N5;=3RHNHQ'_A16#0P1CVKF3O71N,@YKGJ,;40)`C)SMN +M*\,@CO71R/<&N,0BLV>6^:@14_$-XW#N%SW2'SJN$/9CL*^0J&D)=G))R36X +M^..,HULMBK>=G#L!T`_S6(4^'$"=RVZBLF5W(];Z-A>/3[WVW_H<*;>6H^(% +MV9/L*+&QVP=SON:;M.'77$9-%M`TK>@V%+_0ZKDHJY.D(HT3'9,GMBBJBL<: +M-ZV5C\"-E3?7"HI_,V]JAD`^>3S-^=,CAE+]#E9_6M/BX +MA\G^G1\[X9\,<5XD08;?PXB?_))Y1_>MCPOX$LK8K)>R&YD`&5Y*/IUK4[C< +M?:I*X-.C@BN^3AZGUG49N(O:OT_W!11)`@BBC14')5``Q4U;'L.8-3<:@#GV +MH1(V/7E]:<]`=@0#G]ZI.P_K2 +M\K'\/GJ3M4+2/1'4S$]S7RO_`%6O)?!M^&1$^>0RMOC(&P_/-?5+;:-F[U\7 +M^-''$_B>?$@T0*(QMVW/YF@E*E8_!CWSHPPLKG&<+C_[4>.VG_B`'H:MUX<# +MRF7'M1EX;I_^0?:D/.=2&G2^RK2.48R0>X%>JV/#<_\`R\O2O4'N)^1WM(^L +MO%JVQ[>M9KB,DOXQXXY&4(=.5/,?2MP\!SR(]#60OK>6WNY&FC(>1BRL!S&] +M.SITC!Z7**R/=]%>L3?A9'DU8"L0,G.<3.9)2$0E1G<8+QD@`Y9B1O]^=1IMBL?Q;O +MMAE,=UC7S7<#JIJ$UT(`4?2V!G"G?ZTC+<-,^(MF'.0;$TS:\+N60,I4=2H' +M+Z\^511^QDFX\O@"L=Q<7`GSDBE:07/M3LW#)_!"""7Q<8P$]?:BI^$)]V*=-F?MDDN!*TI!5<``577L&FVN0! +M^Y6YM_AGB!MP1&J`Y.&?!S]*A_Z5\1F%Y(N#SC7/F^M6H2OH7_4XE?)\XX9; +M9LXV`Z?UJS@:2V.P\AZ8ZUH.)<'M[%E6UB\-!S49YU6-!M[>E*RMJ5,+%..2 +M-H?LKD-MT(VJVB8]]ZS$3&"0[>4_E5Y;7&M`":QSC3M#$_#-':OXD>#S',4I +MQ2R%S;LO(\U/8U&SN`@.K84\A\9#DY-1.T*:<96?/;;X@CM.+OPVZ5X94.`S +M?*>W7K6LCNAHSJZ5\N^)N(3?^HKVZC+6A0M"20&8D`KC?D"":[P;X@NX9OPX +M:2:VWTLZXP-\8P>W2M<])<%*(G'J4Y[9'U.WNU=N>,58Q-D*@;5V +MVQ6IM;O4!OSK%3BZ9KG&^47"L">=2-!B?(HHY8HTS*U3(L`!FEIF.,;CUIH@ +MXI65"VXH9=!P$WN!$X+!F13Y@IW(ZTS-#;M9M/:WDA.G*J3S],&E)82P.#M2 +M<<5Q;,3"P*]48;9]*,>X*5-,A=07CK_YLL1U`VJO4<4MLJR+(O/*'I5X +MMSISXZ,/4#-'BD@N%RC!JM!MT9_\?.N0T+@]B*KKWB%Q*C0^`ZAFQJ8;5L6M +MXW!U*#]*6DL8CR0$=144DNT#PRKL`54`#"D8]*O`-,6QYC-"MK.-.2@>]$NY +M!$C?E0OD)NW1D?B>Y.8X`BVG!.,8T_O=Z6*Y/:G'7&U!" +MC-94,6TMS>/H7E@C(YT@."F1&,B;],;5OQYDH\B)8U)V +M9"T@E6<+@LH[':OI?P^5CLMB0SGZC:L_;<(-L&>0B +M>12Z`EC^%&[M'6W@\7`U$84=!FF(XLHK/EG<^4>O<^@JIM[M7=/$!*C>K>WN +M`^7+-IY'%1,RM-#"+%$"FEI&.3D;_6I#2S8!RP],8%>CE&&*GS-D$]O2NJZ0 +MR:7'F8=-S1`D3'K8ZWT],+N:7DBC_P#C274*=QJ`[>G:NDA0=*')]<59+$8R +M<%74J?L::B?(\-CG(V/K0)D+28"J#SP'W_.C!,ISW&V:="5\"I*@\4GAOX;\ +M^GK3!QL12H(F01R?,.1'\ZE'(T;F*7D?E)ZTQ,!JPI&&ST-4WQ!Q).'\-EE. +MY4>7U/2KHD'%8SXWX;?W@B:U020)DF-?FU=\4.1M1X-.BQPR9XQR.D?/G+7, +MSW%PY9F;+=2378_%NKC1%&SL3LJ[DUY89=?@>$=9.,$8/VKZ5\.<#BX?9\OV +MS`&1^N>P]!66$7)GK=9K(:2"=6_"*CA?P1,T"7%VRZLY_#[\O4]ZVEC;V\$6 +MBWB6(+L4``(^E$MW(R#S7:CE%E.0=+]"-JU0@H]'DM5K,VH?]QD&C`'+([?U +MKG/9QD?Q#G]J(&(VD&/7H:XR:=QN/3I3#(>61D&2=2?Q#I[U,2*3@D4$-V.E +ML<^]0.H%M1!`.=ARJ$VC@.!D?45%U5AD;[_*JB]XK;V\[:YHP%[L.?:J:XD.!'&6/T%?GL\1:XN99W.HR.7/UK['\:7[G@]Q;Q#4X320#S8\EKX-+' +M=6,NBXB=&_Y#8U32EP-P/9R_)HHKK(YY]*:2<$/*7*S`]5W$;47-NP7'BKO&:>52X!S +M]>8J?@[9U,?M1CU +M#U/&0,@@ +M^^U(S8MZM=FS39]CI]&.>(,M=MG:%@N-NE,/$T;%&4@C8TO<0&XM9D1BKLI" +ML#C![USJYVLZNZU:+>"X4+SK/?$_Q=%9V\EE;F3\4C*1S"L.V001M60O^+\3 +M@B>UNKBX5@I!C,8#$^IR-CON-ZI[J-C+.1)$P`4920GG^ZH;!('(^U:L.BJ6 +MZ3,6;67';%#*_P#O;V6=GF=4423R,09%&P8C.S=AO6^^$/ALK$U^T*&WG!>$ +MA]1QG;`_=VV(WWK(_#'!TXMQ.`R6;O8-Y92&(&K'//3&>76OM7#[:UL^'Q65 +MNNB&-=*KG.WK5ZK+2]M,'3XW?N,Q'$^"RVZA5CSI9[Y7!.=O +M>J^XN5U$#!.,GIM0M_1<,3\EG^(A8XVHGA!AMN#5;&Z^&I8]._.FX&"QDFAO +M[#<:7!&X0:?ZBE;%?VDW_%Q@#U%'GFR?#0:G/(=:-:VWX>/]HP9R`PO)>IH.AV/E8]`.=;]WVY[4>>7RH=KY-R4 +M2$KXR.]07N:B,R2=_:F4A*@%\^@%9Z,)R-)2Y<#!.QSO2\@YD"FSN*$8]62"!5MT1%/5( +MQD'GFM-X2XV'/O4&A#;XVJ*;70REY*B&YN83N=:_\A@_>K.RXBOB*"=)R-0; +MK7&MAD[4K+:D*X"FD@@[=!0 +M8'#1-(1C.PS1X^9`SN*;=B*I`"L0'EBV]1Z5.T,;Y08#)3.1LP;P +MG.X^4]Q1'195\VX]MZ@56>,$'##<'K78I"3H?9Q^=1%_JA"7A4#SK,T2-(IR +M'(W'UIZ-`BZ119-DSO0P&YD5:21;FY+E@W&F02#D>=%SL&&QKCIE,'G48CE2 +MIYU`0Z39V8>]2*X&4Y?P_P!J68'.QWJLXEQN/A5LQG<)MS/7TQ5-T%'&YNHK +MD-><2@AD:+4"Z@$IU'K5=-QZ*.)I#+@("=1&-JP/&/B::^N_%BR@7(5@<,15 +M!+=32ZM;N03D@L:3[C9WL/HLG%.;HU]Y\::I2883G.I)/OO62Y=:+#*JL0YQGJ.8H-S^SI_],TT8_B?0^*_%"CA$9@/[>8#0#^Z1 +MSS[5FH(1,YEF;Q)&.2S=35#',6N0NMBHSC._7>KB*=5"DY-"FX)'=6?A7"C2VP+'?/0@53S6\D+^+;N8W[J +M<&N1<2XG','\?4X&!XB@@5I4K.9/TV:_[;,[?VC<)OGMY%SI^4]QWH`O`/\` +MXZO[^VFXJ5:XTZ@28-,1R!QMD'J#S%`+$9\I.*"\I!R!@]Z +MUGE1TD'/>EW52<=Z5:X9?WF^E!:X<\@3[U"43EBYE:`1D<]^E<;\3)G`84$Q +MW"N&R3W[&JLLTW"[WQX0CGSC9J72F%<$8R:!+%OE3]C45<]>8J%U8VPVH;.*DKY&V*GM]/6H +M"+:!GE5==Q.)#@94@>GI5QC<]1GW_73[T"1`<^NPJ!)F1O>'1W*G`"R#O_*L +M_/;2VTI612&_G]:W5S!H.=.1]Z3DMH;B/PY4U+GGRQ6?+@4_W->'4.'['SCC +M'!H^*0ZT*1W2X"2,NH<^1%9>S^%^*07+G6$B8&%P7^>,GS?0_0U]1XAP6:WR +M\698N9QS`]:IV7[TA9,N);6:GCQ9GO03@-A:<)B:*V5@'8$Y;)K102$#8UFH +MI6C?TYU;VUQE1WK#DW;K9MBE5)%XI#IM09(@U.##Y[T*Y%OXE3<\/ +M25"'4$>U4=QPN>V)>U8D#]QC6P,?/(H$D*L&R,YJU:#C,QCC&,O-,9O-. +MKHHR3JQ4UF,@TEO#0=MS55`EWA5DAF^D9IY'BA(C>$Q.<>:48J>U+Z![G)#DQJ?*#G[T]P?X?>\C%QL$(8T\O\?8'X82*Q==9!6<9'([Y[UG.)\-%K +M!J@7]BO-1S7UI[X=X@UQ!X$ART8V]16?+\_F@<\(SQK)CZ7@O8D"`JHWYDT5 +M4'H>E14@#]?KO4]6!OS//-+HY]GB1[?K]?:A-NVU3+#-65!ZG?>IT51S0 +M-ML^O2O$9SBI+Z5T;'G0]A+@'X>!T]:]H[5(L`#7B>E,` +M;[UTA0I)(`'.HD0JKF...,O(P50,DG;%5=E\46]E=A`"T)."</T^,H?W?)]=LN)"X3,;JT9&K(.WH: +ML+:XW/,`"OCUAQ&\X7)F!BJ,=T;Y3]*W'!?B6WO%(/DEP`8V/Y@]: +MG3PW*/*-@LI<$-C.<;'G0'90=1)!U#GSQFEH[J.5,JP4Y^9=JY<['M1TD*\CD=JT(S-'9`8FS^Z: +MZZ^*-:'#CM1,K(,T##0OJYK5D06%Q*-+;,.8HL@.G8?XI=D\0>)&<..W6IPW +M`/D<88?G5IE->430;=P:$!IE(Z,*F_[(Y_=/Y5YV4^;/+>K(C/\`Q-QL<$X> +M'T>))(VA`=A[U\MXGQ:YXC,9+B1BH8Z5R2%K8_ZBF9I+;"-^'1&)<T'?UK+/F5'J_2L&.&%9:N1XL67(R0,9/05T'(_K49[A!%)' +M`#'$Q!(9LL2,XWQ_*E5NFTC3&7]]JE'56;_RX&COFAMD$$^U!UW,F-(\/OCG +M4UBE8CQ')`Z5*HIY4^$@D3$R%M]MJ<29EP,TNL>D``;41%R<'?:AE3!Y'HKE +MPO+(/:F5N,@;TK&O/>H."KMII-)@T/'#@_HTNT"YR!4HGT@YY8ZU"2Y5FV>H +MK\$J@PTA>6]>\554CE2,UVB`Y;%5DW&((\YD7[T2QN0$I1CS)T7IND16WSFO +M5DI./0G(U$>RUZFK`Q#UF!?XD?HQ@AR&S]*@8XC_`-TVT(.W>A^#&.U;:/%V +M+&%>P^@KHB`R<4;2J[`^X-1.W/GM^OO5%V#Y`_;]?KO4&P>='`U'(`Q7/!8] +M,>U6019-MLT>PN6MI<,?*34S`0#G'M2TB8-0AJ(I%D4#5M49(]\C8U46%X1^ +MS]11L^7 +M]&I=/UZ_Y_7.`B\B9Y[CI57/"8G)5/+[\JNR,GWH$D892"`1VJ!1E15KB0;$ +MYZU5<1X/%U"XJ2IC(R<7<3`7%M);RF. +M1<,/L:];SE&`S6NXAPR.[A(("N.3=JQL\,EM.T3C2P.,?UK!GP;?V.GI]0IK +M]2^MIPPJRADU`?TK-VDI&!G%6T,N,;^U8.F:VK1;9!&M!)+`)4WQ\V.>:Z.FS.2VR[,&IPJ+W1Z/2\!,1,G# +MI7B8;ZM'>.VO4T2H">G]Q6EQ3 +M,ZFT[9\LXEQ63AU\T"6TKH`,,_E.3TQ_6JV[XK/4 +MA]);.`%)P36WX39FSL51MF.21G84MP[AT-M&I.'<;ZNE6XW';M6/)/=P:-5J +M?<^,>B,JK)"R'DPQ63BF_P!IXJ"P.E2%;U'*M=IJGXUPTW$1EB4EU&"!S(H( +M-)T_(.DR1C)PETR[CGRH8';&1CKVJ0E)]ZRO!^+B%1;7;$`?(YY#T-:16&G* +ME6'IN*"47%TP,V"6.6UAU;)U$]$"CZ5X#D!RZU)1G>K)9'P]7/-9OXDXLD$;6,+%IF'[0 +MC]T5:\;XHO";#6N#,_E0?U/M6%\/Q?VLK&5I`Q(4\CZFF0AY9T-#I]_]V?2Z +M%)/`U+YF4#GMN=N=#P\;(2`<8*^HJ1C5I7R&`!`P#DYJ+1L(2S$[?+CD/2M1 +MVJ.R/K8G2<#H!L*A']6MQ();.("3Q#XNH>HQ6)M[7R^(PY\LT[:7L +MMC.C'5)&I^0GE[4,9K<<#5>GQ=O%_!N;>[5!I*D;=#M3L=Y$QP'QGH:JK._M +M[Z+Q(G#8^8'8CZ4R51]B!CO6Q/Z//R@XNI+DN8Y@=\\^U,:L^WM6:2>2S<(Q +M)C)V/.K6*Y!',`'E1)@.(UO`VH;IU':BN(ID4Y^HZ4IX^-C^=`>Y%N203X9Y +M_P#$U95#1G:+]G)N.C=Z2FO3;-@ME._;TJNXAQ>*WC8R,`@ZY_E62XA\4S3Y +MCM$"J=B[C<^PH)32->GT>3._@N#2\6XC"UNZSLOA,,-JQ@YKY3<1%IY4CE!B +MU85AGE5G(9;DZYG9SW)SBH"`+G;E27DY/0Z31_T\6MUW_!7Q66PYGWIE;3`W +MIM4QZ472>1Y4MY&;%2$A`,4=(D/)11F4?6N#;(-#N;+0-DV[T-04Z'%&!YY[ +M4(N=6E$U$\MLYJ(/QR$#;]C0WN$B!4[N>0ZT4<*XI/CP8#OMDL-J[P[X7OGX +MY##=QR+$'#M*#D$#M1QQWV9IZG%%-[EP0?AW$W>-983`)-U,AQMWJGNI3%*\ +M<];S_4&\6TA@6(8DG4J&WV7K]:^>I&K+1M;71S,>NRY5?17RP- +M<-E[F5OI@"@KPTD>5\^W_=7(MU/_`'1%MP1M5^\T+]N,GJ>\_L)8<7T?H#P)-O,=^6]0\%\X._K3Y!"YZ@U%O,-_H:V +M'F[%O`DQY`"3T+4+$@8!T"_6G,%>1^]<)##!&?2H2P:,H/+IN:D3O0VC./(W +MWJ&IU."OUJ%G9%)]J3D0_2G3*I&XQ07*=Q4(A$C20RFK2QO.A.,\QVI&1<\O +MRH.2CZEYCM4+[-2I#CW_`%_6AL@)`(YTE8W@E3!.#U%6!\PWY4-`]``3$3S* +MC;?F**KY!(-<9=(R>5"88.I,@]Q4"[&3N-AFAD[8Q44DR#JQ[YHI`9=AMVJ` +M@716&])RPLK:TY]?6GF&`>5"9=BJJ*4$>E +M'632:R&AHM%<,!WJ>*1BEWYD>U.QN&'\ZM`-4"D3(-0L&,5_X08J)!@8/4;T +MR<"D+@-'(LRY!0ALTS'+9-2!E'?%Q9?&)LG4WV%<$9TEABBE;G3DA'![[5`M +M*@SX+#O@YKL'(5DXKATV;=<5ZYMK2_A*31HZD;JPS2[3LI\T<@W_`(:AX[DY +M$3>AJMR+4>;*JXX$UDA-J6DA`SH)R5]NXI!6P^"#D=.5:(R7#C"C3[U5S\*, +MMR)#.XD_A09EFXIA\BL.AGA;YF3&V.5-IQN>V&=7BKGD:K8_`$]!-?@[-@K`G;?M^OM79 +M[B.UM9+B7`C0?>J*P^([6X<1RDPL>6IMF[TG\4<2,LBV,3KI`#,1U.^/M5Q@ +M[IB,>EG+*L4&*W(2$'!?EDTU;QQ?@YR +M[I@J47.QJM3QD`C\+)?Y=2\CZ4Z*7\'H(**^*\#T%MX,/XF16;?)//D>=*:$ +M`=Y(1S_E5]9VWAQ:C\S;GTH,F2NA.?+M7`%H!@;8`I +M26(]N=6[QXZ4M)$,4B,C%&14QO-:S"2"1D<=5-7MC\2`_L[P>&W+Q`-B/7M5 +M=)#MR]\TK)!SQFM./+0&;3XLZ^:Y^S;B:.XB&EPZD;$'(H,=U):/I8$I6*AF +MN+*0M#*R=QT/T-6]O\1(X\.]CTGD)$&1]1S%:8Y4SC9O3,F/F'R1KX[R.9,18Y8@A4_B]*J[FX@BM'O$F&A1G5&?FK&7-_-?W'C3R%FY`'D! +MZ4NZ`:\66HAB3RVH"'AY<]1[5T[G/Y5+3L,_0UQB-)JK)1$MBH-)@5!VI[A +M'")N+3X.8[93YY-.WL/6CC&RISACBYS=)"]C97/$K@16Z_\`V8C9:VG#?AN" +MSC5SEG/S/WJ[L+"SL;5888BB`( +M_P#LK(X(X0VA1Y<$?0[T=H=4BR#?'<D[[5ZNK(_8'Z?YKU +M#;#I'WA;I#S4@]B*()HSCO0FMP>OWJ/@D9P5X&1I89#5[2:65,GG@U/ +M1*O)C4(2*/W./3&:$T,G1B?>B"21=CBN^/MN#4+%&@?D5^HH;1.-\`^W.GO' +M3OCWJ+:3N/RJ$ME:2ZC;S#L10V8]5^U6+`-UH+P@[#GVJ%IB:2,C!U.*O+.\ +M2X0`C#CIWJFDB93E=QWJ*ED8,I(J%&I4Y.1^OU^NM0,88<\@TC97XE&ASAA5 +MBOF]:$H5:,H<@Y]:ZKD$C8>U,:0?KU_7Z_J-HE;<#ZU`K)@ACON>HJ)7?_%! +M4.AP&V[$[4PK%N8YGE4*`N@;I2DD9!Y58$%M^N,T)TVWWJR)E4ZZ?057<3X9 +M'?KJ&%G')\<_>KJ6/!Y$TLP(/(#TH9135,9&3B[1B98;FR?PYT9?7H:['=$8 +MK:/&KH5D0,O4,,BEQPJP9\BUCSU'+^1K%/1)OXLW0UU+Y(S*W@SO^1JQM[K4 +M0B[_>D)>!(KYMYRB_PL,XI4M'-=P[T6/2/N8$]7% +M?@/*V%`&,8KS218R3@^E"C0%23N.U3\)#D8&];^3GG/$CY!<^XKA.0<@8_.I +M-A.GTH9!?KCO4+!.KS9"'2!S-!6-H\J$'/J.?UIW6D,>D;'K4/$C8$9QZU7! +M:;*]HUD\LBX)V)[;TF]@`7RNVK>GKN\MT;&M"Z4B>"-]QEG7.?8\Z;:1E.._\6V:2O;B18V;R$XV! +M?`H7)4%%23M"D5I;QF2""YN[:0+Y-$I*GI\IVI::PXJA"V\]O.$_C32S>F1M +M2KQ7\KB2$@2AM08\JN+9[R&$"22V8D>8`G^=+<4Q\J>8B4*!GKBN122N1#J.DMDY&1GU/I3EE;HO$!)( +MF%T:AJP<^OI0_CRS>JA;D2X=!F"XO[D80(51>6_M5;&C3W/FR23D^U%NY_(4 +M\Y4MG=MJGPY-(+'KR]J+I-AI-)R?DM[2`22@9V',U;Z,;@4K8)HAU$;DT[SK +M'+EG,RRN0'1MRJ#1\J9P*\5H:%V5SQY&?SI:2#TQ5MX>:"T1QN,YHE(-2*5X +M,#<4K)!UJ]>'F,4H\(P=L4V,QL9E!+;Y1E&=)Z#D<4DULRYP*OW@WY&EVA4' +M)7<\S6B.4:J951K)RQO3`)!Q^OU_>K!;?5N`*B;?&05J/(F7P+H?K15YU[1I +MY5+IM[U39*.Y&,4)VVVJ988IGA?";GC%P4B7$2?^20\E']ZD8V^`9SCCBY3= +M)$.&<&N^*EGAB+1(?.Q//T]ZW_#[:YM[=(H[2-(UV`5MA3/"N'2M-2#4N< +M8']:7;Y6]-Q3##=BL@`8[XWY]JZS:!O^53(R-^1%")R&ST%4^"(^3_ZAJS?$ +MD1V_\('UR:H8%V&]:;_4!`W$[>0C?S+G[5F5V3:L\G9U=-C^*8RN0HYU(,=] +M_>E`[`\Q]JZ)G'5<4O::Z8WK;<9^E>I7QWYX%>JMK(?I(2$KDK@&NC(W.QH8 +MF&=P0?;-$#!MP:Z)YD[@,!D;CD:YEH_^0KQ8#8UX'?.?:H0FKJXKIC0]!]ZC +MI#^;DU>U-&PU;J?6H0X]LISL10&M"/E/VIS5MMO7,`<]S5$*UHW'S;^]1"LI +MY_K]?KM9LH.V-Z`8@3L:LEB6>*::,YSV[4&9P`1GWW_`,5" +MQ#)C<@-N.1JVL[_.$?>JENM0#JI^;ZU"=FN5E<`\^^:\01OGZU16G$&C8+(< +MKWJYBF5P#G.>1_7M544=(4YU#-#,14Y0@TQC4-CC(J&64[FJ+3!"4J1E<;U[ +M4"!THF59<,.=#,)7Y3]#O5E$'&H'&X]*`8BWRXH^&!W7([U(*#TQZBH6(E2I +MY5P9Y?XIYDR-C0C`<'?)J%V+_KG42-L`?449E('R_6N`>E0@$*>>?:C1G"G! +MV%F%WH37%W-S=8D_A0`G'O34<"#YU.]2-L0NI1E +M:&F6FA"2T\>/`)!7KVI5.!CQ/$[Z +M*A[*-`=6!WR*5DM(SG`VZ$"KEK24`L[$$M4U]\-V]PI8>5LDX&V3Z=JT;`%CZ'8XQ7 +M4V+874"-B3BEIC8S<>4SYS/PV2RE_8^)(6&XT$`>Q-)-*RR_M49)"NG<=*^F +MRP)(A\7"L5QAE&359>\"AE0B=))#U.4>,BO_`-GSF,'K2%N6@N0)%*X&1G:I+F/!UXZO'FA\&:2- +M_+@JM+@$<\>],++ZUD<3)M+'5L*ZK;<]Z263.V?:C+)]:#D%Q&1 +M\N]<*Y!SRH:R;"B*V:M,&@31`^]+/!L:?/*HE!4+3HIY8/2@&#;:K9X +M,X_.C4AT9"*(1S&U2>$8+"CE,<]MJB_RT5AIE=*N.5+$X)R:9N'QG.::X)P2 +M;C,Y8EH[9#YY,;GT'K_*GXXN7"+R9H8H.- +M0_<\KK==/4OCB/U_N%3E7-\8/TVQ7#&T?R'([=*[J##&=Z<<\BP#9&/>E7&A +M\9R"#@T8N_3<'UJBT)2'0=^5`?P#KES2,1.@GG7-RVF=S2_]M`VL +M8&YPK^O^Z$>&V_2$8IS?./USKRC!QVI2G)>352$O]IML`A3]#7J>%>J_38/;E4UC_C;GT!Q760'J6XKN'D4&$48_S4A&NXSB@!CL"^ +M/<44#K@?2J+)@:3L=JD8$`_P`ZA`Q'K^5>`VQT_E44;4=)V-$(WWJ$%YAA#C-5;@G)SRJX +MF7*$U5284G;D3RJ$0JRY..A[USP_-U-&*D#?:O=]/(GEWJ%@&\IZX]*8M[MX +M#Y6..HZ4-EP=]SZ]*&00N::.LHKE&U(<&K. +MUXH4PLGMD?K]9JJ*HM6().1CWVKNXVQ]?O7$>.=01@BO>$5Y$G^M0ATJ=\#^ +MM0\,<^1J2MC9MZG@`<\_K_O[U1`6GN*X5SFB^9>N2/U^OUCFWH??]?K/I5D! +M%,US0"*-M]#7@HQWJ%@#&/M40H&>_P#2F"OZQ0B,U1:!YQMC>O#GSH@T=6%< +MQ_""=^NU0NSH<*#D`8',U4JPO+UYV_\`#$<)ZG_%*<;XC=-=0<*L0HGN7T&8 +MC(C'4^^*T%KPZ"SMXX%4L$`&H[_6A[9:J(L/,W.H*C9(_A.-QG:K$A%'R*!] +MJ$\.1XL7;EW%1HN,UT*&,';3]QO4DC(.-\&F%`?!&1W[_6O:`1S&:JD78%HM +M'F%#"!<$+O3BKJ&,U`)I)!ZU*)N("+6HU\O6O&W0+E-L?O6.2^3-*?"$BF-\'`^_P"=MMR20"+&QWW!T_X^](-;7D#:3&7]8_,*W&A79@HW)Y#.]+/8(RG +M2V`IVT-L/ISH7%,V8];DCWR8Y+G!P0,\M^M'2?(SJJYN^#++E2H+9VQ@K]\Y +MJIFX1)`WEEVW!U#8?:EO&;<>MQ2[X"+-W-&6;'4&JJ03VK:)E*L.74&I+<`[ +M_F*6\9J525HN5EVY_6IA@PJI2XR?F!II+@`<\&@VM`.(X?;-`=-_6NK*-MZ[ +MK%0BX$YAI&W3UI`S!4;)V[?KZ4W>3HJD$Y!ZT'@W!YN,3^(P9+16\SC][T%. +MQ8W/A!2RPQ0WS=(YPG@LW&KDN28[1#YWQNQ["M]:6L=M"D$"!8E&`J[`"O6] +MO'!`D,$82)!A4&P`IJ-8UFMGJ9V^O"#1#``-3:(9U+LW\Z\@V +MQ4P-N_6F&(@DA`(88-=QOMO7F35V]*'DJ<5"$)!YB1RJ.>AY5-R#RZT)A@YY +M;51:!3;@D?6D!_Y,]\_:GG(8-GK_`#I$@ZM/;.]!(9$^??%0_P#R=NHY!2?S +MI.`94'-=^*KAEX\$0`A8_7N30+>[8@9C!`]:Y^5-]';TSJ"'<'!!/.O:=SG> +MH"Y3;*-]#4A<1$;ZP?;]>M9Z9K);UZH^-"3\Y^V*]54R6C[9K4\CO4<]M_0< +MZ!&S."5.1UU41?,V-P>6U=\\CT=+*-B#CU%=5T.=+BB(=65&9,<^OYU[P5E! +M)B4+UQTJB62R<9SG-1C`9P`/R +MHQ`4`8WKVE@V"-_2H99FP!ELG*O%3HU?NYQ +MFH0\S*82<[8YU7:]=&#OGG_G]?2O9Y +MY^N/U[U1#FWT[UT`D_K]?KWKW-MN=1'+Z?T_7V]*A#I!Q^OU_P!4)QD[CUHQ +MYL/7-#.,_3]?KUJ$1#2`.PJ,S8`0'<['THI8$G&YY9_7TH87+,WTJ%V55I:+ +M)\1Z\;0)D>A.15_*P2,L1RI6SC"O7.EM!4E6QGD>M,C5@0AM1UYT]Q0W4$Y!W9L%>U"PHLG+"@MTGCD*` +M*,X&=^]+%B59B6++@<^8]:("2IB#`*S`DGIO7I(9H,ABQR>0Y&K[Z(N.&`TB +M/<8.3L45X*YRS,-!."<=MJE$BLN!MNU5T_";:9CH98Y""6TG&/3M6IO62>8$<@,;=:3>U20%%"EL>;4.W +M:K:38<,DX#4TA"X7.^ +M^<*$^&,GK\\%PS+26W$(E7^9CONM,S[^XJNN)5C21WV"J232YNA +ML59\O^(7\;XCN3T7`_*AQ94=/O2,EV;F\EN&'_D-74J-'((G4\PRY +MH<7&)[0`6\4$8;8Z4_S75OR>39]1X3HR":^8IQJY_#R+X<.ELDKHV.1D]:[_`+O.5_#F +M*`PXSH*;;'WJ64?3H>*-?\`@#&6%)2\I82:3''K)4$G?ECZ596%RO$.#17(9 +MD$BK*NH@8QOO]MZ^0S<1>Z54N(()$3=59,@8^M/)QFY""/1%H`P%P<HI$ +M2-_)\0__`(VZXVAS&7>&!"?_`"9*JIQURW+T:B2W+\$X)%)RJ@'AQ8!!`()Q^=2R4;Z6ZE6_L.$ +M13-XCO\`BIB#DJ@P2#VRW(?\31[F[`XC'P:.1OVJR3ROG.A.F_?4=O\`ZU\] +M'$IA,UQH3Q2-.K?./O4AQ27/;ZUA!>-B+]G'A6#` +M8.`3G)YU")HXI99([:%7?`8@'S`]]ZED-PT-U'P&T:S9GOYH57Q#)A$&/F(S +MC^^PHL=N>'\$BC@DDNKQ$*)KG.-6?F8Y[U\]N!!%P+=+=TCNFA&@EM6DX.#GWH/#K6'ADL+SWT\MPZ +M':67Q&$@3!;)R1GD?2H0T?!KF47_`!,2REPLXP2?_P"M?RK0 +M:%EP5;#=#7S07EQ;EVBE9"YU-@XR>],IQ2^C^6YD_P#]&I99]%COIK=BDVZ= +M&%623I*H96`KYJO$+N2,:KB0YQ^\:%;\5ODE"+U:LY +M[?K^E?/%XOQ`IO=2[?\`*BCBE^<-^+ESCO5$-_G\_I^N=0=R`,#<]/ZUA6XK +M?G'_`+N7?UQ7/]UOQO\`BI,YQSJ60W">08)R>N>M3!"@MV&:PG^[7Y)'XIP` +M!R^M2;C/$-('XIR#@'E5-EFZ9O#M1G'+?^=5P8S3(.FE=)RW8]JP[<PV]J +MXO'N)*<"XV/_`!%7:*-V.7T_M_BN,,M@'/K6&C^(>).,&<8(S\HH@X_Q'=1, +MH`'\`_76I91LL8YUU<8K&?[_`,1SCQ5&/^`KJ_$/$-(/B)O@_(*EA(UP'I7. +MN/KRK'_^H>(#?6GRY^05+_U!?C]]/_\`-59#1W4?[4;Z01C/ON*A'DJA(RH7 +M&QWS69N..WKQX+1\OX/6A1@J.Z +MOK['._6LR_Q%Q#S99#J;!\O,5!OB"^4D?LN?\/K2?V&*7AFHG6/QA)&=*@`D +MJ-QWH>C*-)\Z:L8.Q-4=GQR[D5T=86`(.2F_7^U+)QJZ<29$>PR`%_S5UY(I +M>#1%3K(((ZX(R*[XA\-D;+`#*GJ.U9Y^/7B*$`BQ)@ME23R]ZXG&[MH@Q$>2 +MNKY3_>JIH*T^S1QVKS1YR`&YG/\`*HZ3&[(X`&>>-S_W6>3C][&-2>&"3OY3 +MO^=3'Q#>R2JS"'R\O)4I$W,OF@DC`#YPPSN,YKH>)+?4R+XA)*KG>J5_B.^9 +MC'B(`YW"G/\`.A?[I.'"A8\$$\C_`'JZKHB=KDLBF`.9&-AZUU0C+^U4(0`? +M#'[V/7%5@XA-(N2$!!R"`?[UTWTOX;Q=*:V4[[[?G0I!-D;E`2[*#I+=>]U5W#N)W$\6'";=ASK3AX;$97:1>:I1^^<=B +M*Z+AU.ZCZ'%5K7C@H1C(K-M)H)PB[>]%\5U!TLRX[$^O\` +M:K(:#1@>4?:N'5_`2/I5"M_X5#AI1X8(['G6NNU`&U?,_C:>1KNWB)\@#-CNJW!)L$73'/>O472I3.!G&>7M7JJRTV?__9 +` +end diff --git a/uudecode/D3.UUE b/uudecode/D3.UUE new file mode 100644 index 0000000..cb953fe --- /dev/null +++ b/uudecode/D3.UUE @@ -0,0 +1,920 @@ +begin 644 c:\work\uudecode\d3.jpg +M_]C_X``02D9)1@`!`0```0`!``#_VP!#``@&!@<&!0@'!P<)"0@*#!0-#`L+ +M#!D2$P\4'1H?'AT:'!P@)"XG("(L(QP<*#M/-;RQ0E(UU)C*X'WI%[XKY7#*XVRM`FWT:5+P2L_%@NO#D\ +MA;F#\N?>C76I9RCQY/7?#`>AI?3)+YT?!/0[9J:SS:P+B`L0,!BW3M5/NRK0 +M5;Q#;^%.P;^%\;'WHGANP)B.I"0>?(U".&&5R6&@$X*,H_O1J7%,JVQ^"Z*Q:3AM7+U%,BZ;3Y&(P,8.1]*HQ)'J\&6,QGHZY(! +M]J;7\1$#N,8\KCDVU2+<6*GC4E9=6UUY]]L[C>KGQETJ"^EN1WQ6,M)F2)E) +M&1N,U=07D;872I/+)I^++4J?DQYL/%KP:*.YB8A1(/*.0%KY"'!ZYT@"N +M(QE0.8R@;;SK$`#'U3A(B"01K;1&%'>90,`N`,>E>UK&#(S$IRY8QZ#M4,00)&8SJ'49WY_ +MDM#+LN/0J8$BB8K$`""OE& +M=^YJEO+7/#+J/5G8$`C8;BM7<)%/:O&D@)SDE.:U1/`5=BY=P!C7)N!]#_>K +M\<%7R4MYP^*]X48XX5;7%LV/3K69CX9--P[=_#D5RC(%W^M;"SM9HYC'%(?P +MTF6YX9.OZ-2FLX@&\&)>84D;LQ'(F@<%-7/K5?\`@YII2]V8D4[K$BDM^O>MEV`B): +M)HF.Q*#*GGG?I_.D^U*/3-2U<7^2$[>!PR_M3@#25P,'_-%N("\JL\*L@&G2 +MRA=9/]?>G;:QTKLBF(#.6Z_KO73$S.4P,G8C&,#IGU'>LCD[.7*;DVRD-I'$ +MDD?A*T8.N,:=\=L]Q49+&+:YCMQ(\9`5<8UCF.76KED1(G9R-#;LQ`W]_4&L +MTKW=YJD30$BDPJK(1L.6QYFFP;8L26+0)IGMCK\<'$@.5V.P_E3IL94MX)Q/ +M!'0![4Y9VUHV"PC1W(^48SMV[4G>6D,EW' +MB-8X/#&D,^D`]<'!ISAZPQ3"$R(XU#P]38).=Q3/\-HB3[+^7AUH;@.P@,4F +M`>_WK&?$'$O]H^)\);02B&!8BC@X/7OSWK;2L;DJ=*1R)VY8]<"OF?Q- +MQ!+OB;M^'C6120TBG/B=C]J9@^4N4.D[CRB[%O'QBUAT1QQ6L[J97YE>?E': +M@<>-NL*V%C"D-LB"29AS`Z#W-5/`N,S6D5S9C!65"R[XTN-_Z5>NUGQ2*.[* +M$PL1+-$IR9),:53'O4<7"?/0M&*ECT>;PF1&R5SU%6'"[R*"18YE55:0$S-D +ME1@CE3G'[<`F>XN3+>$A61%Q'%C]P'KCTV%4:C;>M2J<2)%YQZQAC2WNX3+( +MDH(+L!@]@/I5(%'+%:6U'^\\#DAD)$ML"P?Y410!CES.Q]:SF!DT.)NMK[0= +M'D1>@H@B3E_6O`410/ZXHVQL8G!$F.52$2$9P:DHP#GZU,`G:AL=&"(B%#TI +M@6Z&(X4D#&_2H+^A5WPQ$FX/Q6-ERZQI(A[88`__`/5!)T:L<(UT9_P$['WU +M46.V0GK[YJ>GS4S&H&":ML/#@BY$6Z7`83,N6`.Q;K64_P!/N*K`7M)WTHK:D8\@3G;ZXKZ-_NT; +MVR10'#K@AAR^]*R97'AG-R0N>ZNSY'/P&<_$D]G:1^!:K<%1*_([]_Z5M^'_ +M`.GUFD"F_=WF))(5L#>M';\*LHB)/#>64G40"6.20VMC,+>7!,P+C;<8]JQM +MY&@D"`Y447$KMEP[>=O7<4K(@$K`#"KTY8K3'A]B93BX +M\(:X7P]^(7MO'(%\)Y55FQOISO7V^3@G#X(3(966)$U$G&!@5\?LKGAT/AR+ +M%(T\;`\]R<]ZUG'?BB3BMB+2&*6*T*CQ9&&&;TY\J3-R;-+TJ=4[/GW&3%Q# +MCUS/G"/)Y">B]*T/P]QM;$B#B9,MOCRNN[+Z'N*S=W&[W;QQE0JG"86HI$0S +M%WT@C&.YIS5QHM88)OXF\^*X^"\0X5;3V%_'K63S`C<*1OMSK,W'#[72/PH9 +MF*8+%GH:K8/#B;(E89YC5S%647$&:2&-2=$9U9;]X]SBE24ET7'%%*FA +M4,NG6%TCF<^M,Q\"#1S`,-0\H!Q@^]/)/"LO[:7*C +M4-&PV/08'M0+)-L;BT<9NHHH/]J*2/%,NB0#;0`0>Q]JBO")9Y=;.$A+8)V! +M^@K61WAK +M2\/>&)1!9QN"`YRK#]J-B#G?ZUDZ-Z^@$?&+B#2 +MDB(RD?O#G]:(9K>Y<,08W(P03J'WHSV,3P21`YZ@9W'K51^&97(78#;2U4MK +MZ"Y3+N6"01`*6.!@'.:"MX1HBN%QG;5G^5!M.+Z;4>AK3#(<[)B:=&T_%6]JFN +M1B#T!ZTF;^>Z4R!8XHQDZ#S]S68./R`MYB/+XA&Y'KWI +M!X)FXP)F4K%'&0ATX!R/>F%G*`?B$."<%XR`#[U&1#P7]F49P".1"\OO2S6F +MFX%RA'C`],@.*9D=Y0#&I!`_>(Q0Q&L]4U82=$)]:,MR!I88 +M^8'GU],&AW=J;O$PF*P$>51SS^NM-J^E3&N'V&H,<@>]&F@D(5$52Q`T:#MC +M]=:6E39;=HIS$%A+/ +ME(/7_(IV3C,0NFA:<"/2"IP#YN>G568>^,5L_AJHF^8YZC)S67+E251*;+^0 +M%458^7+..M9J^XA%`%\/KVW\NX.U!3BMZCM^T,;YUQ*PU*1C)'?VJJN)U;0 +M=3OMD_2E>(6MQ96-P]Q;:K<*2QAD"D#'/>D1ES1:29EG5;Q9H"HC0DF,LN=/ +M>AQ\/>!PRL]-6CI((IDFD9<^574`D>]:`P*8M$^Z@95EZ&M._;PR +M0:3Y0E!*\B2QL='B+I8*1J&0>6:^=\9X<_#;]H68NA`9'.Q(KZ9Q/@D5OPZ. +M\6=YUE.D@+C&1Z&J7C'PC<<0X3;7G#Y#\"XB8I$MFT(F#AP-\D\S[=*3N^$7]B2+JSFB_^ZD#[TJH*,&W& +M#SK7)*:HJFB[XU'XFB"*/`C!9LG.`.9_/?UJ@`VK5\5D$?#6DC`(N%`UGKOR +M'IUK+Z<4&%_$LTWPL8'LN(0S3%0P&5/R@]:&@XR#@;=CTH@&WIU-#1LYH\8 +MR"YP?UBGN&^)^(,49RTJE,?Q9Y4IR)'Z%,V$[6U]#/'NT,!!).Q'2N$E0*T7'K6./B,LEN0;>Y"W$>.@;SDEBCGB>$(VI1L1L?M573X,N6:BK?D^'_"/#KCBG&OP,1TI +M(A\5_P"!1@Y'KD5]+@AFMI5MR!^R\H;;?MFG[;X.M_AN]GGX?DP3Q95N9DA,@V,C8U5R\^) +M>$V\966^MN7+Q5Y?>JWXYM$CX1>KG0\:^-$P_=(_6*^1V]Y]!":X_D+PNSMIS)XET(64[#).W2VQZ%G\*Y4HR>%)S&U!L",2"92Q5N1W&U%O`8(6*E=OXAR]J33 +MB;B/RJF1L6`Y&F)-K@YN:>#%F3R\-?IV6YBAEBPJ:5`Z"DV8L6?\`NJI5STS5EP\JC`&0%FP,$D;=OO02=+@Y<(7Q +M)V.3<=D>+PH(TBCQNF@`#L!7JJ_#"RDNR'))"J22-SC/2O55AJ"72+VQF=[5 +M68>(FG'J-J\WA&70`4SR/+Z5.UB3AX!UJ\;`#!Z5.:2VG7`=,C?9L$5GOG@: +MNA=_Q4*D`>*@_?ZB@17DDRM#X4U"C_%6,YDM])4^F15M')&PP_/;.V],-&H8 +M$-D'H1S^M5O^R]G!7)>33`F2&,YZHN,BJ^[*_B%*,=]]^E7^F-7P,`\_-M79 +M+6&7S!%<9W!PMK@S)X39 +M*G<#J*KKTM%<"-LG/('8D=Z*$.:(WP6]C?\`A1PPW&\1&G.>1Z&A7EXKR^$R +MZM)QENE+1*KK@\FYYZ'O2]U&T,PU#.1LAJIM//ENH&JG[=P68<\C;TJ2XZ)5\,T-IQ+4I\,X8X\_P##W-:"RNH+ +M=3;VSR3,,EF#$CEG;'?\MJ1X=<22".$0R^%TD.%'T&=Q +M3B1N`%`UX)T2ZL1K@9BN)E49_>7=318XV$; +M*V%SG)WP3W%*7*W+V5R@A&K1L5WU#;;&:IV143M&N)97F1<0#9$ZD;4[$BR? +M(ZYY['E$`T+UP.^^*3N;_`,)#(="AB0H; +M.2>?0UFU8I9G+\>BF^!-HF +MT/(4746_:1#ICJ/UZ562"-8I0(C)$8\'(P4.:)=7MU"\[!R2VZ@\C]:JY+]Y +MG6-<,-6"[C!WR3G[T..%\BP5TRE/PZ%944@J_(C8[9[4LZ:8O#D0/H!!(;<; +MFG(K5B!I8ER,X[M3/_I+XCNW66UX7=/$X&K*Z<8]\=*UPB$HF6$C1PC\)-.! +M$,G+:=&_I5CP(O\`C/"N)KN1F'BOH)\K'EJ^G\Q5E#_IU\1M.OXGALZQ,X+` +MD`8SWS5U;_`7%;"^?BG$;B*T5L@PJVIF';MRJ\M;6BW'@,D:+%EUDP&&&&[# +MIG;M[55<1L^*SQ>!"A%DK9)8$B3)W)/8=JTO#8M3M"4:16;RN#EAZX%:A^'S +MM`8WF#,%QI"9!['>LFGQ[K8%'RRWMVC21+VS#G.(S;G"D#T(JT@C::Q'[-AI +MSG)&WI5IQ"TD+%;BXTG.X`TX/L*JEB:U9X4=^8.<9W^]7^XMHXLT<5C/;2*3 +M&5RH`Y'TKG`9M3-;%L9&5SMO1+B(R!77PF9>8#[D^V*3O+&6RO5=-2!_,AQ] +MZN-AQD^RYNCH3]O,D98Z=+';-5-Q%:R6^6,<\8;90BL-MS]JT?"DLN-V6BZC +M#3Q'KS]"*A=<$\-52--,2QL%(.26/,GZ4VW5HT*;?1F;/A=M&(MO$@`RHP=OF]:N#3EE?DIP7@^!J"#1XWQRZU]KO_`(:X;-:!KBTB=R-QI`V]"-Q6 +M*XC_`*?3%))>$R>+IR?P[[,/8]:OW$^&'"X\HQP;_-$1B#L/85&>VN+5BL\, +MD9!P0ZD4-7P1WJZ-,,RODNX9A+;:&8G0N!GH.U(S@Z@*'#-@8!]/>KKX?LN' +M\4XQ':\0NUM86R2YVU'HN>E+_'DWO-&>.BE"LV`/L!7T'_3[XJG^'96LN(Q3 +M'ATYR'"D^$W?'4'K7T"QX'P3A$2"TLXM1&S!0S-ZYJ[AAEE&UJ0O_(@?E29Y +M?I&.1I\B5"X\`^)<"M..1NE\7,;#24C;3^ +M=4LO^G7`4MFAC@D12.DIR1[UJ?&\-]>EM)&#MOFOG'QY\4?%?#K=Q:<.-K9G +M9KM2)&_+Y:;!J7"*W-=]&#^,.'1?"G%OPMK>F56\QC.[)V!-9N/C-S=.8F4% +MFY8'3UI*YFEN;AYIY&EEU9$9Y5?<(O7EB%L3DKN.P%!/'2 +MM'0]-GCGG2R?Y?N7#)I12NVV3MC->5UC0EF`[DGG1`5/E8\MZ3FB65BS\N=( +M7ZGJ\C<5<1N.XLH+F*2\95B+F)J*LY&;2Y-7J+DJBJ%;)`J`@#_-.#&K4#@YJ*QJD +MCKC`/ZYT3(4'##;'.@;LZN&"A!(E<2!8P0H)-(C&>7*N7'$(5F"RLQ4'?0=P +M*K9+]1*P1V*`G!(`)JU!LXOJ.HA*:2ET6H*CT]Z9MI8H)#+,XP`1@$9)K-&^ +M8G8FAM>L)8X3@E66,0`-:G +M./F7?^M5DG$6AJTEJ/VD8<=\[?GRJ:<3M6;0R +M/#GOYEJM@XW#HPR.R$9&<,*ZMU`263=>9P.55L^T6I?1;S>&Z'Q(6,9^5T;( +MI=(A'\DAT\LU.UF0QYB.0=.U1@XR%DR9-2]^H]Z+VY=HIM'9;+\/DJ"R@].:TI +M-(6&F4!L?(X'>K::4F/QXFU+W&^*I;EDGS@Z2.W*FP;?8MJNB#:H<8.589R* +M]XOC0&(C4AY'^$T/QRB:9!J"G.1SQ4"_AD2Q$'N,\_2FI"VQNS8Q2$CI@C/: +MC2OX9$D9\NK/TH"SQ$`H<@C!4UV,ARZ>'V\)(C@C&.NG>@O$2T +MT?+9/A'BYMX6X@\4<4DPC1%2%B4/#P+N73:1H2V!(XV/S13H1*D>^-UR?Y5N8E`LH\G5JP"< +M8U4S!S84$9^VX/';7@EM9#"W53YE85:NPD)7MO79%"#GYARH<+9ST!--22X0 +MY(Z^(RF!N*FX&E)$VQ^5+DZCFC1DF%QORSFHF%0W-ID19<[@9R*G9G2[1$>5 +MAD`TJK%K9@.:G^M,IY;B,]"<428-<4%DLHG/G4-]-Q2\W"S)&J"!%`.0=B:L +M6\J.0,@"F(F/A+W`Q1T@;=%99\,CG+>,/F7DW2E[SA#6,JRP_)GZCZFK:*<_ +MB"W0'%.RQ)<0:6&<]ZK:FB;FF8OCGP_;\;X1-`RA6D&SAAJXVN@G+[/SX/]...L +MKF$02LHSI$F"WMD?AKQ'MV5@KAU.5[G%?I)[,VSE8CE5(QZ^]5W +M&>`F:^0<5_T[C,I:P=TR?EP6P>U:S_`$]^ +M%$X':W-U<`&[E;0I88TJ.GU-)<57`WE]F^E8S1_)D#[GZ546]W:3<1GL8;F* +M6>V`:6$9#+GEFB\8XU!P3@\]W*"[(ODC4$M(W05\K_TPXO/<_'G$&O,^+Q") +MV)8'Y@0V/M0/"I')N`6=^%S)!-X;$=F_P`@5@.!_P"HO'N"PK;^ +M,MW;)L(Y\DK[-SHX8..`7DJ7(Q_J#\%_[#E#FNN#K^ASQK,U+MK@=P<% +ML[7D*RV>L4:!%<'(&#R':IP9).1Y1T[U +M[5D`#ZU(*8QG!P=JLI+D#*`&)QN/SI.Y627A\JH/.1D4X[$@$;T.68QPNL97 +M6PP,]":)&?4N*A)2=*F9);>9CNN/K1!92'=G`]!5LE@3N\I__44U'PVWZEC] +M:<\R1Y*.F7DI!91#=G8D>M'CMH0?+"6)[Y-7T5G;(`?"4^^]-*H'E5<8["DR +MSFB&"*\%%%:RD#P[K1H<==O2O4IYG]#UC12('!_\K!MAG8FF4BEDR!< +M2EO4C%6BVG#;E"([A(Y?X'&/SH8X5.DHVR,[$]*CR+]A:@V!$G$+;8$NOOO] +MZKY+JV#$#YE^:N7!M+I&$4I20;:6YCZ9VRA&I>NXSV +M-!>>65`EPAU#DP_6]:X69Y4RQS?M5Z\QM1XE74"",] +M#RIK\+%.N)5R?R-%:3Y0'+Z`HPE7*G/4&H-"3EXFP>JD]$"AU)'('#`]*&8-2%D`RI\P +MJ[35,'E,LI0+BV;&S#?%+VR$AA^\IW]JG:/J\W4;,,_:I3?^WNTE0'PVVH%] +M!/[+JURR)&&QD@X)YD;_`-*T_!AQ6^6:WX=)$&&9'UMAL[L\+<1EY226!8_E5O: +MS1.><@TG.D]*FEPERJ)(-2/\N.FYWS2]THM"#*<(.3=_2M<9?1PI1:[+-F,C +MCPTU*>>V,?W]JG`!:,Y=HPA&5&KY364G^)TL8V-PR*C#`0'))H'"YN-?%-QH +MX?!^'LP<274HY=P.Y]**P5$U-M;GBMP!(Q9%.6!PP:6,@&QV^M!3SLI'7:H&OLL[*/PUY4WC:A1#2 +M/>C5!;.$9]JRUU8W3<7?-O\`BD\HCEE;!A&<[^19(4$JHY7;S#(!I63&IJBZL^76(\*0MJT#.`ZID +MYSVK82-HMHQDD`XR:IY;*>TXN%U;LQ(8C.H/IBC3J6VI.%-)V,@@,C9 +M`/O4>6`.@_S2=]?Q6<7[0DL?E4/>KED4>S=@TF3+S +M'K[+ZXXC9VC:9IU#F0PG&1S\/\`S5!';%6)*[D[DGG1'B1T +MQFDO/R=*/IF-+Y-FMX9Q*SOQ*+:=7RN<-O8\A4`=;-Z'%34$)JWW^6HB,'(NI=6W/F +M:'%"TF0@RO4XQ3,<(E^;<#I1V4@$(,`415B;6ZB)HU4`^E*JKX41G2Q(Z;4\ +M`1(V6)]ZE#``6?'/Y1Z4+29<9-%1=643.9)%U'D"V^/:EOP=M;&.YMX(UD1M +M>57!)ZC:KNXA5ETLV,TJUNJQZ5)(.2TEBNTYX^1OL=J^S2<,S*'0D$=,9!J1M9F7"P[\MAM51W +M1"FXR/S9=6-Q9N8[F!XF'1UQ0"@WY5^B.)<#%["8;^SUQG?!3/YUD[[_`$_X +M8Q)BBFAQT1C_`%S3%D^P/:3Z9\C\,]!4XO%B'X=P"#W4.+Z.MB]7U$(J,J9>MQ*&-Y`KDE?EVV:B0 +M<7@('BZAMG!&PK.UT'[U/:B$O6,ZE?!<3<3#DB->_F:ETGSG)Y[FJ\/]14U; +MM4V(1DUD\SN;+5)@0#SIB.0D;?>J=9,4RER!UZ]J7*!(S+='++UQ14/(XWR>?.O52_CF/+.:]5>TP_<0[PWA=UQ*[16=UA#9 +M=@,#'IZUMGEMX5"%&"_K2)Y-_ +M8_'!00K-=PXRK-IP.?Y[5.(J(B48&/L-BM0>P@X8'8Y'7' +M6CS2QQQ#IY=SGOTIJM"I%'(DI;(\OH=S7@Z:"DV#V/(URXBFO9/V+8.>2\Z! +M^"NHJMRJF1$EG.-+;'EGO4#(OFVY\O[U)T4`D'4A.".HJ/X?"\\C/,4*(04C +M42![^W>CD,DBR)N.3?WH4$15M\L5//NM/(@5&4#('+O4;HM"'#KB2#8;,#I(/2 +MM%PRX9)1&S'4%&E3RZU3SVWG+CD2#GUJ[^';07E_'<'E''IJ*I,ISV19K[*$ +MQ"WU'4>6:M9;".]26WF!*/CET/<4M9`23(,;)OBKF#`=B>I(S6N"I'+R2;=F +M'L/]-8;;BDESQ>Z>^C#9A3&,C_E_:M[$(8[46\"+&@PJHHP%'M1P05P1D=J& +MY,7[NM:*Q5MA(&C(\C`JFPQ4)LELGN-J\#"1\A3'\-1;2P\L@/\`Q;8_2B3! +MH8=!)&1_FEE8QC/K@TS&V!AMB-MZ%,FHN.XYU92/2H)(&VR"*J[4$NT9Y@U9 +M0/MH;8U7X,?$R-1&3RS5!1+A",!3S%$H2-J&#G4*(O+TJP#M>KU#,09V+`," +M!SZ5"B>!G^0J$H\K>U=3*EEW.,$$]JY)NIVZ5"T"/R`#J10+E1I50-]0S1X^ +M9/:@.-0]\9J!)3)S67XG?K"PDQD*"%7^([XJ_XU<:5,2'IDUA +M+^87-X<'*(-(/\S6?-/:N#HZ+3^[.GT`*O5M3NA3)P*L +M((^IZBN7.;;/1*HJD`6R#C'TS718#(QFK>.-0"S41'M5\WFI25<^U12:'0G]ECP'B*\1A:TNU5[J,9'(%QW'K +MWJU_VYHF!1]9`U%=@PK#F22SNXKJ$XDB8$8ZU](X=?Q75K%,AR'`/+E6['DM +M'']0TBQ2WP7#*JUV +MDLOV9RRL_P#Y.A_S6A3\'+HM+9\H,G<[T=[C;2FW:JM)2D6`.GV%1BN=3Y!I +MJEX`VEU;G3MGGUHI;?4,XQRZ>]5\,WB4(FD=>9J,AU:EJBK%)D5Y.?+;([4-8]3G&X48S174!CA1DG`HBIH3;? +MOWHB61$049;;'J:X9/+B,;]S475(F>"0Z)1 +MH9MO.,#[U=9)&,#E2T]G%.A5XU(-4T6G]E/+8QD%E09!V(ZU7W-C'(I1QG'6 +MK*XMY^'^?)>#N#NM0UEP"""#R.!_2AI#+,?Q#X;L[R%A)"'QD9(W]\U@N-_" +M9L(_&MWD>,G!4IG'U&U?8VA&E_+N>W2E39K,&TGS<\'K0\KH9&:7Y'P22T=$ +M+#S*.HZ4M@BOK/'OAV.6!YH80DHW)48U>_2OEW$K;\-/A1@-T[4<)6Z8_+CB +M\?NX^O*^A(G'*N>)7"I/*NB-CWIO!C39T.Q/(_>I@OGI]37DB8=A3$=LN=VV +M]!0MI#H1DP8UC][/TJ:@GFQI^*R@.-V)^U.16ENO*(9[G>DO*D:X8RH50>F_ +MWKU:2.%%`THHQV6O4OW_`-!ZQ(V1N%6)@=PO0:$V^RL-\Y4FHZVDE3&&"Y.`? +M3M4Y+EUE;5$BN>ISN*"6F72^B!EYY7G5()L#=W,MLZLR>0';?<5R[N7DMQ

BS1^-'A3E.Q.0:JT?\,9HBF +M1Y64^49(WZFFUB!)E&V@C;ZX-"OCI+28ZX`QS.:T)\BI="4<`C&1M_RSO1E% +MQ(P"NK]@=Z#$S,_[5/<:N5,2`LFF*./OY2:8)_8,#X0!>-HV'73L?U[5PO%< +M;,H##J-JG:-.P\.13MS#)M.&`TGTH)392HJUXN*I[KY(I(K6L +ME>YD\#?2,9[&O1V+QR%V!"#D?:F[9Y(8F`4EFR5$664EED4D8W(]N57; +MZ+\6>@(E5D(V(!!':K?X8;\-087O0O@;!6S*<>XCAV&@2Y-L(V!N!E.6U6OPGQ$I.UBSA0?-'GEG +MJ*JI1E:KV9X9ED3(=3D>AI^,=EPK-B<&?88)O$93(2<]C1)(4GC97`*'F#^5 +M4/`>+?[A8*PP#R<8R0U7H*.H\,$]^PK5%VCR67'+')I^"LN>%D1L('._)6W' +MT-("&2'9D*'KD5I9&9$T$#;F:BZ!ME.K-,4FA7:Y,X+C#!023GI5Q9/@:CS[ +M=JA+9Q0H-4)U9^=%`QZU,0]K&^_:FQG8+B6(D&D[XKCL`I/\`W56UR5.` +M*+%-K8`GWIJH4T.1HRE6#0QLF,:2=LBAJK)D$`D?8U5!6+O!%,,G#* +M>=?,_C#X3(NQ):$"&3)3.P1NH/8>M?5554WT;'Z4&\LHKJV8%<-S4[5&O*&8 +MLK@VO#/SO/PF\M[AH7B\Z\RC!E/L0:5\,J2K#<'KTK[7=?#=IQ"WE`013C)# +M(H&]?)>)VBZ9/*J^/()Q]Z861D[5GDK-$719(3C8C(KU("<[9->I>UC5(TCW$ +ML,;#&6&X!'.G(>*:X%+1J#@Y[?:O0B/"0.2TIW`7]W/2AWD<=I&6(U]%.,Y_ +MQ69M/BC2W3(7=X)X_)&ZL.JBJZ+B%Y#)@N<=,CI5I#B=)\`+GL];<*,V-*LR]6/*GQP^",C +MQ'QG8=S3L2*,Y(44C<1#!V`I:;0SAF$XE`MM,9`F2!L,X%EI,OU(^E>XLN +M)B`5'0AC0K0Z498WU.VVH;XK2I<)@;+31J7XRL)$4"^+(-B<^53_`%J(O>(3 +M\YB@[)M2?#;1=`VJ]AMARQ@=J#)J)M\,D--C@NK8@OXG&3/+[ZS14FOHQM/) +M[$YJU_"+7&M`>7\Z4LDUY+VXWX*Z+B<\4C--&DNKYBV=_J*8@XQ'#,)$1HU; +MYT.X/M4FM@1C`I>2Q',4<=3)=@2T^.1J(+Z"Y4&*92W8&IO))&"Z^=1S7J/: +ML8;9XSE68&F(N(WMN`"QD"[8;^]:X:M/LQST4E^+-9!>)/G0V#_">=&8.4W4 +MGMC>LG_N4+P3`!F'?G6B&6,N$S+/%./:+&P#!Y",XSC +M?H:L`<')SCOTJK28-(ICE5@1C#`&FTN&'E9-/8C>FIB6ARO5!'!7;\JEJ'>B +M`.T&;Y?K4RV:#.W4=ZA:7(`G<@5F_B&\BLXB20TI^4[E2?17*,DLV,D[D^M-Q#.-J#&O+E^C348VSBN5 +M)GI1J$;4X@Q2T-,K2A,@P.17"=LFN*VU<>K$IYQ-IWYU9WDFGK6 +M>7,U[Z`4S'&[;.EIH*FV6J_M%(/Y4G<)MGM3L>R6=Z\F)"7R$QRQ0\,[^'&Q<8@DT[$& +M926Q@D@=*4\7\)(04!!Y%>0]*@UW+*,`8%:8R35B)1=T//.D8.])S7A.=/*@ +MZ0=FRQ/5)9"1[&JYS)$2&;/N<4+=!)(=:12!CGF1@X-#M;_*Z).8V(-!+GAFO39GB;:5I]H^.WEFL>J6WU-&I&I2-T +MWQ]?>D6DTG=2#ZUM_C+\/-Q<>#H!\,:]`'S9)^]9[\)#/A9%W_,5%)>3J8]" +M\L-\.+\,J!<`'8?G71.S'8>VU,W7#O#0F,\MP<N3VR:]2W.)2C9KHHKB)6=4`!YN=LU$V]R[#7(2,]5.11 +M9KVY"#+(5'+I1+8M,I99CJZH&_H:Y]OLUN7/)&.(*N)51O?!_G74@MXCXBPE +M2/4"O2$N2H0(PVRHI*2T$D;,=,G7(;!^U1+]0;#37UR@*PV@(8G+'+?G55W5L3I4E!S..='MR+]=4Z!,;L5)`44Q+;S13YX0F$!M$P,$ +M`@?<8%8`8SGI5%O5N)8V6-L.QP6%5U +M]'%:>$8SJ*8RY/,T.)`3X+VTB!"YV`ZCK5]:(JX(%4-E(&T`$;@;U>V['`W^ +MM)R<,;%<%U;$`;?:FCC&V,4A!NM-H<\JJ+`DAE2*BY\NU>!R<9KS8`))`4;Y +M.V!1M"EPQ5EZ4M<+@9&U<6\-[.T=LP$2?-)C.3Z4*8.K8$SL#S#;C[TIJF/7 +M)DOB:$J4GTG=19` +M?:BYJ.V_6H6F+M%GI2SP#&PZ4^%`72,]L\ZY@-RWH:^@U(JFMM63B@F$@Y7( +MJV:/((%0,66;:H +M9#MT)_E6W%K(OB1CRZ%KF)]'UTM<2G.!SYUFN&?$XED$%UY)#RSSJQ;B4$Q+ +M:QC?K6OT>1FY`Y/TKY+)=>)?R3="Q^U:;XIXP/`DMTDP +M6.-.:Q88A@W?>LV7G@]+Z/@^$IOSP:.`94'.<[BG5%4MAU7<9P! +MC>N?--,W9(N+#1^E,"A)M[40)&.1B(9AI;K@]*J7W@LN)9<;@_)]BB8^# +MJC;+`9.#1`P1"'C!+;YS68^&>+&[M@CN!(@`;?\`.M*L@+@R`DYSD;9IB9X[ +M-BECFXR\$U(2,,DWF["N$C25<'7G(+&O,4UZ]6<\](Q@U$MJYYQUWYT5BDK. +MN-#>8AACH>=19\@:<8SD#^U"=E`!!RW6AC7*2J>9)9 +MM`!\IW--`;8W&:[%:+$H&-Z,J#&_2M4(J*HSRE;L"J*-SFI``<@<40@$U[2* +M,$@'`W(H@F3I4/#',US0.8'UJ%4@I*,.9-+SV:2@]SZ5+!'?%260C_-0A27/ +M#9(O,B9`[;[4L$RO;T*Y-:<,KC!.1TQL*!+:1ODHH!]!0[0U/[,\;=FSIR>^ +MP%!>U+#H!GW-7C1/&_($>U1>#4#E!]JK:7N*:-Y8,*WF3UH<]A;7>9(G"2'F +M.AJV:T7JN/I4?PJ\P-^]1QXIA1E3M'R+B]K);<:N8).C%LCJ#OFJYP%N&5CN +M!6H^+X"GQ!*1R,:G'*&3]$*321*I5SG +M/,>"*'Q*'Q;,2#F-\T<:)K,7O8FUVN4+)W:GQC%H"V +M>0F:]A\1M67SWR:M89EBG+JV`&(&/2J:!Q#Q")M)Y]3GO5BA#`YV"KDGEO5S +M1(,T$@Q9BXTZ0WF'H*SW%63_`&^*33K9I<`=!6@GF,O`%Y;#=R<`#^M9PW"/ +MPN>-AE5;*D\\TO"G=@Y.J+J*4*(G!\HPM:&TGD?&B(:<;%CC-9GA6FYC"!AO +MAJL.(#B-K;$VN-9P%;GCO4E!.5!)TK-">+"T?3<0,H/[R^8&K*VXA;W*:X9- +M0_E6'M.`2WA1[SB4TK.I8CQ-.D_?85?Q\)6TE9+:XE:(+\[M^MO>KGA48VF) +MAEH]FN@'.F8^>U+JH!VIA#C`%)79 +M4AE6ZUV@!R!M46D.,`YH[%;24DP&1D?4T`W:*P4NH/3-1>%9-V4'IN*6FLK3 +M0?$1,>HH+&**+..0.-CG;J:)]:R\/$5LKEH5#20_Q*-6FKRTOK:Y7,4BMCF! +MS%&N"I0KH:`&.>V*EI!'(5'4N,Y&*&954<\5.$!39,IMWJ'A@\O:H-=H#NR_ +M6NBYC<8U+R[U3H)*0-D\]!GAU$[;TX"#O7-(?)Y$4-!J5%!%5/(9(K631CGC([4C/:I-&0PS3L6>4"Y8H9%R?/VXFO$KEYES +MC5NQ]^E.+%XP9!EL'((Z5/B/#!8W1:,`1R;8'('G48&92,:E88Z8P.];)34E +M:.MHL?MX5%>`<;-"Y##D=ZN+.^*#!.5/WJO`MY"?%F978Y#D4 +M7P6).!24[9)^U&\8.OD.?8TI.PTD[?:@78O''DS?$SF8,>0-'M90`,&AW4R& +M=2H#A6R1SS5WAOC^2_U/J)R!'H"ZN60>=09B#@H#@YQWI.VO;>Z@$L5P#J.V +M^<"C1D2R%/$)(.338JW2/-M;>PJ+^(<[>4GETI^.)$`"@#M48HE1<"C=,5MC +M':J,M$"0QMVSS-<`!&Y-3`^E>U8;"C+=A4(1PH^E<^8^09 +M]>6*((]LN?ITKIZX&.PJR@6D9WW]!L*X1GF-O2B;@]Z\<$5"`"A!J8)Q@U)A +MBHY&>8Q4+//$)!N-^]+^&PV!ID>ASGO4&&!GEBH4@#*=/,FA,@(!Z&F@1G<[ +M$53@RP@>^"?[U +MFIH[S]/4OZ:*DJH7EC,<:RLY;)"@L#L0*%(H%K*A.V*NS9B^X1.T>SQMJT9WR +M._TJ@E)6#3S)-2+LTQFJDOHI([9VD900-SS]Z]3:Z86*N=\YKU,#SDHN+ +M:-!\/326R75@X.I6$B9Z#DW]#5S;W824QR(2&V!JK>.:#C:RPKDC4'Y;IR-6 +M,2+GQ6(POKBD9H)LTZ)K)B>[L;"0L6+S:<=LBHB&%?/&&E&<#!S4I(A+&&QT +MR#WJ@O5:&0&3."=E)S690;=!2@T6G$8O#LRXA5>@`WI18?Q5C%([#4H*MZXY +M5%N*BYA6W(T(HP-N=/I;L;-8XHRK-DD9(./6KYBJ8O@REU:3._BQ@C2QQGEM +M5P+)?P<31'4DBE8WHY9 +M&T4HJPMDHN.!Q(YPP^;T/*J_B-@J6P2,`Y.<@\ZM?P_A1.J'9SK`]N8KBPZX +M0,$>8[&EJ5.T3CIF9X---8WJH^=!(P1[[U](MVCN80#N,5D;ZQCEA5T(CE`! +M7U]*M."W_D57."NU'D>_Y(J"I;33P6(!SG;V%,M`5A(`PO7N:Y;2@J.QJ=W< +M@P.JMYB-CZTJ^.RFN2ML&47\@!R.M6)D6*X([,> +MM=.6+=.U"T'7-,LD:-1S'WH=PRTF<:`O(C8'M0B[E2"_@!8^;L7F):;T! +MJFX_P1>):-QS##^]76D*06/,TP8PR8QRYF@3E%VADDFJ92_"_$FX +MAPD)/('N[\(NTM?CCB$4,JJLDNEHV4YN-&",437T#&=%*UFD8PJTG-9@[@$,.1`(-7SQ;D8V/2E7A'I570U2LI@ET +MFRWIN+;*C\(J?/*Y)ZEL?TJ)MQSB +MG<>Y!_7^:L;JW\O+;OUJHE#1MY5.:).PE;186]W/;(1*3*J[ZL;U8VETLUNI +MSYB.1Y[U56SZQI//&Q[T>(".?;8-]LT+!<;'Y6!&1@BDY-MR/7E^N]-LAQ2T +MJX!H47`H>.G-IJ_>!&]4>KR@ECI)\K@9Q6FFTM*$?#*3RZ&@W'`&CU2V'F4G +M>$[X]JU8YI*F=#3YX1^$G11OF11&P5CR63T_E0?#49C+;^AR/2F&7PY>3PMR +M9X%0>2:3F#BC_C;A%RESD?PL0= +MJY'6`*WWP]+XW"("=]`TGTP?SK$22+I8) +MD$[D^OI6O^%0!P=5<;EB>>Y!J-G+]65X4W]CW$^#VW$T(D4>(!A9!LP_O6+O +M^&77"I-$ZDQGY9`-C7TC&H@@^]!O(4>U9)$5D.Q5AL15(Y6EUN3`Z[1\W1P: +M85QC^E$XUPP<.99HFQ%(<:6/+[U7QS$[@U3B>@Q989H[HCQ`P?6ARQ!AMM4$ +M=CUVIA1YH:#W5OQ=_7V?64.<'IBIU6<,OX;R`,D@8>AJQ8 +MZ=R=JW)V>7E%Q=,E7"0!OBHF0#E]Z!XV3D+GWJ611L.-3^B]^IHBX4'3M2K/ +M+GOZ5(2N`,I]C4LCBQC.`,5W8$]?K0Q(".QKQ.YP15@4$(ZG8>U!8Y.PKI8* +MI)8#',YQBJJ]^(N$6.?'OHM0_=0ZC^51M+L.&*[,,;;:8-B*4\T5T=+#Z1J65Y^E![[O@Z./T/'53DV_TZ-G\0_&\$MBT'#'D\5R/VN,$;YVK#W% +MS/Q6X>XNI6EGV!.-Z6"R*V3H(7F#UJ<%QX%UXGA@+S"$G&0=O>@;;Y.QIM)B +MTT:QQ_W!.C1%D.H,,Y5AR/(T=I\6ELJZ5*@Y(V))/6KBW>/B%O<-=6^KP82? +M$4X.?\` +M4^>\1$T7$IHG#`HV,8Y5ZKGB4%YQ;BL]\+81"5LA-6<#85ZGK)%*FSSCQRFW +M)OLUO%8V@O1,@)TMN!U'(U80P1&U8!"\978!22<\N5,<1B5KAD_B0XP/6A6L +MC0N55PP50>H(S_D5FS=C_3F]K(+!/:6X*KXD17IOBJ7B4/XQ2ZY#`[KG\\UJ +M=3-:##J9,$-I;&?I5%,C)=`JK#.Q'0BDQ>UV=&7S7)7VEH\*KE=39R21DK5L +M;KP[=A<2D1@?^-"!J]#UIBYC\/A^4&EF))/I6?8%WQN2=\;["J267Y,S;"<* +MB>Y$NG`!.FK*^4"!8/ER`3CI59:Q3^,LNDX4X4'I5HNA`6D7Q)#S[4N?Y9Z'H:9\4NNJ-,,/RJLO$:-_$ +M3(D<]-A4C&[13QR["\4:161(%U`#!'3%!LYV2?$@TDGGZ^M'C@=F7++AU!4M +MM[C-5_%W%O$8S^S<9.-N?<4R'/Q%M;>3;6-P^C2>=,WMP8(2[`Z1UWK!_#_Q +M2,+#?'0V=*RG96]#ZUNA>1W%H0<,IY^HI<\;A+E%QG&7*$K247N);:-I,9W4 +MC/\`.KF*UNUU.Z"!5P6>=P,5G[*V2RXPEQ#Y"6(QCGG_`*JXO@]Q\XEX<$X-JOS2:,%CD\O3UZU2W9YKJ4D?,2<`XVSC;GM6_C.%JNX)PV+A]IX2 +M.[N0`7=LDX[9Y#TJR5<`#M2LT]\N.@\<-D:9+`U;4:-O6AE:\K9Z_6D],)\C +MJG."*F5S08VZYYTPIV]*:A$N`93[4$P@GG3A%0""J:*4Z%?!&14A$!O36#7- +M(-3:B][$IH0Z'UJFE@*LV!A@*T97?:E+BV67?K0M#L>2N&4,"%&7<\Z +M1S&]=2U;Q=]M\T:9<+[4-CF^1I`'@U;4I,NY^]-6HS;+_P#44"<=:@N#Y*"< +ME;M!TYFKNU?R#;-4DQS?X!W4`_G5M:G]F"*8^B3[&KGA]G?[W$2LV,!N1^]4 +M-W\+S`$VLBOV##2M +M*!63Y&!YC!KZA@,"#@@TI/P3AMUDO;`$]4\M-CE^S=#U1?\`R1_@^?PV_AQ, +M[F)N7E)S1U"')T#0._\`BM6_PIPXY(DF'IG_`!4XOASAT!R4>0_\FVJ.:8Q^ +MH86KY_@R7#^&37DN0NF$$DOCI6SX+$(HV55V#X`]*G*J1)H10H'(`5+AV!#( +M=7-LXZ>]5&3E(YFNU4LT>>BT'(D#`!VSZ4.92R+N"/7>B1Y(Z`'Z[U,Q9)0] +MP#C>GT8SDGU%4<=LZKJ!V]ZU?QE:LKVDN/*"5.W4XJHMX5, +M?(T,I-(]%Z>TL"H0"D<^5-QDHNGYNE,>#CF:]I`\I'UI3=FSQ.-ZY:WUUPZ;7!*4.]+G^#Z1%Q*]G\QX9=*.@* +M@?S(H[W5[X#!+9T<@X#$#\\U5<%^,+6ZA6&\80S]-7RD^AJ]\2-NFH\ZTIVN +M&<#-CEBEME"OY,VO&./6$CK>6!N(\[&`ZL?2F8_C2U5U2:VG1F."-.X]QSK0 +M*(WWP*Z;:%GU,@+=_P!?6HHR\,CSX)?GC_AU_N4=Q\;<)BCD*&661=@H0C)' +MJ:RMY\><5F=A:K%;J3@!5R<>YKZ*>%V4C:WMXRQ).=(SFJV]^#N#WN6$'@2' +MDT9QO[54H9'Y-&EU&@QOYXW_`)\GS*ZXK?WY_P#>7T\H)^4L0/M2;,J*5C.. +M]77'?A>ZX(Q=QXUMG`E7E['M6>:,..F:SM.^3U.!X9P4L55^A)9XXX3'<*&0 +ML#@W;LOK#BD/^VK: +M\0A+S[&*7(P1TW'+%`CA5)A^'O8DRVXSEE]"O6J&.>6VG5AY@IV/<>E&M1%X +MS2.2`-QCF35-&?V=MN/D8N"#Q0P>!""3COG_`)9JO?3%<*,`E6PW8UJ;KAME +M>6BWN<+X7-Q&\C@C7S.<*3^N5?0^'_"0A +M>*XNY/%FA^11\HQRQ1QBV^#/J]9CTJY?+_DJ.%?",9X>D]U*Y8#!B`Y>E)_& +M\RB.PMHQA5U'2O0:$[%B'7Z\Z^5?%'$TN^/2QJX*0_LQ@]N='.*C +M'@\W'49=1EW9'T)1%B#D8'YUZAQW*X^8UZLC3.@FJ-MQ1S%F#O_2G..+B!FP3@9VHD+,]NLA'S*"WEVK3F_(S>G-[&Q`./ +M'=`XSJP0.^*(553YESWJNN8WL^-9B;RR(#@]#GGO3DE_:1/B4AI!@\]JS2B^ +MD=93^-L5:^6Z26.)OVB/R?(R/2JI$FBOP\K#0I.V.=,SWZ:W%N@CU');A",YR=J=X?P298,R:D +MD))P.6*[<6OX=@0Q96Y'K2^%PAV/9^*8*R@:2X,487)7.^VWUJ5Q`L7$TCD9 +M714+-CW]:6>X,%Q&Z`%D(;`ZTY<03WMS)-;P,J.`%+[>7%4UY)EM/O@4XFPA +MM2JII:)-:]^9ZUE+B-N-\15(B?,=R>G>M=0QO0?AOA6E9+ +MK(!?.E1T%,C-8X-F)Q4N/!G^/\.98H;6%3(P\JJJ_*.M7?`.`<2L[02'B&2` +M,PD%E'US3MM&;GB%V=&"%TG*[DU?\(A7\*N2HRO>@GFEM407CBI;BIMY5GXM +M"A/F3)8>PK3HD5W.NM])?H1R25HNYY$BB+;*H'M@5E;_X@X?;*T\]RH7.D!3DGT`K* +MW)^*_B%V@N"EK;@?*#I5OL)Q^4G;/"-HFRHV-,*-0 +MS7-6OG]:(@.:SI#&R.G8]ZCCS4QIR*]X7:K:`4B,>QWZ4PC?:@,FCD.521ZM +M<`M6-#>NF@H_K1-0Q1)BFJ)=*X:YFN9VVJ%4<(ZFAM]ZFS9S0FQUJAD0!'<4 +MIU-@XC^F:0N6TACT%1D +MAV9:]6:+BGXF/)7`5E[^U7UA<+)&&!R#M26C7G/4T6"%H6U1C8].AHW*T$XE +MZA[?2CKRQ2=M('4$4T#MWVV_7ZY4*%M!5-3%#!W.]3Y40MGB:`S^M$=L?WI1 +MVP35-A11"X;8U*V7"*H90QVW/+^U+RDOI`WSTH\6,!AYB>PW%.PKMB<\ND/1 +M%N6H*1MD^E-(YRH1LL>^U**S^*23ASN>X-%0:G`92/4'&:?1FL%Q*W%_P^2V +ME&8\[,#R;O60?AU[9DYB=T!_\B+J!]ZVT4+W#$*V5'[P-'>.2--*(=AC-,CA +MWJV.PZZ6G^*Y1\_U.=A'(6[:#4X^'<2G7*6CA?XGPO\`.ML'<'D0.YJ:AB<' +M)]Z):6*[9H?J\_\`#%'SZ2RXBL[0F',BC455@3U]:765HY2LBLK`[AA@BM'\ +M0>-PSBEKQ#!\!U\.0CH<\Z8ON'1<6MED5E$P'DD[C'7T-"\"Y2-6/U&24994 +MMLO*\&7<:U!%+R0YVZ=#3+K):S/#.I1QS'?U]:\V"NPWK-RF=:+35HJG7`() +M`K6?#''G#)87CY&,1.3N?2LS +M`BY`ZU/)ZU!6!]Z)CMM3#.Q:],7X&?Q]X=!U@\B.M?#"0KDKRR<=<"OI/QK\ +M0);6]+O`"#CRL.HVS1HP[`!$9AC/*@LS/L!Z5:LMM'A=7!B,3 +M,=('>G>&<#ON*,?PMO)(H.DLHV!QU-,6W`KNYM$DM;*>635EGT^4#TKZMP+A +MB<(X/%;`>?&J4\\L>=,A#<>>;R3?)\Y_U#^,/]EO#86L +M#-=F(,LN0`@.=_4U\=_%7+N68,6;?)WSO6K_`-0;EKSXSO2,E8M,8QZ#-9Q( +M';]UOM0VNS1CQ2KAG8[BZY*I%>IF.WDP?V3Y[XKU`W']#;''*NSZ_P`33Q(6 +M`&=JI(&D+*LTCNJXSN2!Z8K07)#C3G?M5?:QO^U94.K4FY% +M&,D+\343P6]V(S'%YD&1Z[?RJBD3QI&D)YMM_*M#Q*"=[-HV8@*-85L#EOR] +MJIK>/%@7SC"G<=]Z6CHM_P!N@<"B/$NE6//##F*U-M<120),B@(1G&,;]OO6 +M5C'[-?-D8VR.57/!9#J>'G@:P#R![TJ?V:LD%L31=EGT88@9W;&W_P"H]*`T +M:W",K,#J)\PJ4F2A._0=_K0Y)D@3+NJ9V&=\?:E",:KE`[2W_``@=G"%L +MGS$?*.E#/$`Q,:ZI)%Y*@U$^_:C1V,=T!(QEG+']\Z5/KI%2EB6.)@H$<9.% +M"C2?M5TBI2W2Y[*.[:Z:"3)$`88*_,QW[0I&S9XN)DQ_)+C(Y;@8S1R6Z#1&JY^R[MV$7%K@*-M0V]*=X078R*% +MSAR?IF@<)2/\9<-.WG8_ETJTMT%M<.Z``,E2>-'LDG,#D#7K34`-\T4OM!JFN"[C(YU[.,=?I08FVQOO154OOW_7] +M:472#Q;\J83EDC[T"-=O:BYP:M<"IIQ4N%*S+XC[NQW-5M_'XEU;P#?G:I&.Z1>"&YE@L>E'ECZU/3B+;MDFH*-+@?KK_`&JB,9*,G[6/ +M_T%*2W07)SL#5I6R^D6-JH>8ECL.E +M-R0*F&1<+UTYV/K6:LOB"R1M#S88GM6GL>(6TR#3*CCD1GI76AC2@HG(R9&Y +MN7@)X:-+OKTZ<\]_6FD@C=_#PVDYR"QQ[5Y[=QIDA;*>FY%-10^$B^W.@CB= +MTRWD5#$:+$@P!C;E7F(ZG/H*B26Y-GM4,S9P#C'I6I<<&?L(L08:9@.PVH@MA^\SM[YJRA*^LH+^RDM;C!1QOZ5BOP/&^".T<:&ZM5)P +M.N/YBOHHB5,Z0*[X8(P1D4,L:ER:<&K>%.+2E%^&?+[RZ@XFH#R"*=?W9A@J +M>V:3?AE^J^549#^\IR#7TV;AMK,Q\2&-QGDR`_TI8\!L2"$@\(_Q0,8_Y4IX +M6^S=B]1CB58[2^GRO\NF?-8N"\0E)\-4=NVK>B_['Q61PGX,Y)YY%;B6QNK) +M\VS^/@_+(,.?_P!AL?K]ZE!QZQ>V\1G5"I*N&."#V-#[V],4X05(Q_T>KU4W)QY?WP;N>2*",O(X3&^&T7Q6 +MW'B`["L=>\:ON)G_`-U*S*>079?M2(9.>,_;'\Z5/,WT=;2^BPA\L[M_069C +M=2R33OJ=SDFBM:V7PY\%2_BEN;^,Q1 +MIN(VQDGM6VX3PZ#A=@EK"H&D98XW8]Z>)K1##YD>0Y#'E@$$_2EA*%M)'.W.F3YED]3BLYQ[B2< +M+X#>73L`$#*H/5N0JFZ0R*W.CY5<2BYXC<3LCB:1O=P,75LGARM*)"QC* +MZG.W+:LO8%_!DB)!0'!U;\Q6IO6A:%Q(R%3G9C@'8UC(7\.=27/AYP0#@>AI +M%''F[@$ENF6QG)/S>F>] +M.6*I8V_AN=3.GI]*"70]Y5+'M78_(=(,C?+_`#/I5?*IG4LY4@].F*E< +M7?COI4:%390:4=&0:HV.ICNIY'UI=`8^%;#P7;1!@'/D&0IW)Z;G^M,1/*Z9 +MGTMJ\A6WL;H>5E8E2,>]( +MSXMO*`QSM]9N+RUL-.J'ETK,74)MYSD;-DBCD#B?@8M\L:L84VVJLMF!&QJ +MVA;R@TOR%)\$]'E]*Z(\;;X[FI!AG;ZU-1UHJ%6R(BZ=*EHQTWHZC&P&:Z1_ +M>BH7O%L=.5>T4734*H),$R&H$XV:C:_2HR+K3(^E4U]!)_8J\43\P#[T/\.F +M3IP!Z5&5M!))VKJRJ5.XP>U`-K@EX2K07(&<41GUC`.U+3R!(7;.,`[U$0KK +M=O'XE/(=POD'T_[J]@&!G;&:H."KKC+MC+DM]ZT$7R5&RG.Y\H^NU9[X;A5[Z'6K*-R&[D=*=B50< +MC7IX[<7Y?KT_7)",B#)S!HZC.?O]*7 +MCV7VP:*S^&NOMG(JT+D+7,\4>5?`/7)%)NF`3&^.XK-\5XR$XBVO.$YCNW\N=1DR]LRX9V?RX'.J6WXBER1 +MJ.S#?/YFM-PA!*^VY7`QC.>M-6/:T!.?QL>,]MJ>AP90FX['&,FFILPL%!:?A0([.:3 +M4/F8DD?GTIQ+_P##^68@?\@/+]J]H(1E4Z.E1U%,$'8]*41)T)958J>9=AOZT03`^5_P"G]*=&28IQH=!V +MRN_<48$$'H*2CD"N5;=3RHNHQ'_A16#0P1CVKF3O71N,@YKGJ,;40)`C)SMN +M*\,@CO71R/<&N,0BLV>6^:@14_$-XW#N%SW2'SJN$/9CL*^0J&D)=G))R36X +M^..,HULMBK>=G#L!T`_S6(4^'$"=RVZBLF5W(];Z-A>/3[WVW_H<*;>6H^(% +MV9/L*+&QVP=SON:;M.'77$9-%M`TK>@V%+_0ZKDHJY.D(HT3'9,GMBBJBL<: +M-ZV5C\"-E3?7"HI_,V]JAD`^>3S-^=,CAE+]#E9_6M/BX +MA\G^G1\[X9\,<5XD08;?PXB?_))Y1_>MCPOX$LK8K)>R&YD`&5Y*/IUK4[C< +M?:I*X-.C@BN^3AZGUG49N(O:OT_W!11)`@BBC14')5``Q4U;'L.8-3<:@#GV +MH1(V/7E]:<]`=@0#G]ZI.P_K2 +M\K'\/GJ3M4+2/1'4S$]S7RO_`%6O)?!M^&1$^>0RMOC(&P_/-?5+;:-F[U\7 +M^-''$_B>?$@T0*(QMVW/YF@E*E8_!CWSHPPLKG&<+C_[4>.VG_B`'H:MUX<# +MRF7'M1EX;I_^0?:D/.=2&G2^RK2.48R0>X%>JV/#<_\`R\O2O4'N)^1WM(^L +MO%JVQ[>M9KB,DOXQXXY&4(=.5/,?2MP\!SR(]#60OK>6WNY&FC(>1BRL!S&] +M.SITC!Z7**R/=]%>L3?A9'DU8"L0,G.<3.9)2$0E1G<8+QD@`Y9B1O]^=1IMBL?Q;O +MMAE,=UC7S7<#JIJ$UT(`4?2V!G"G?ZTC+<-,^(MF'.0;$TS:\+N60,I4=2H' +M+Z\^511^QDFX\O@"L=Q<7`GSDBE:07/M3LW#)_!"""7Q<8P$]?:BI^$)]V*=-F?MDDN!*TI!5<``577L&FVN0! +M^Y6YM_AGB!MP1&J`Y.&?!S]*A_Z5\1F%Y(N#SC7/F^M6H2OH7_4XE?)\XX9; +M9LXV`Z?UJS@:2V.P\AZ8ZUH.)<'M[%E6UB\-!S49YU6-!M[>E*RMJ5,+%..2 +M-H?LKD-MT(VJVB8]]ZS$3&"0[>4_E5Y;7&M`":QSC3M#$_#-':OXD>#S',4I +MQ2R%S;LO(\U/8U&SN`@.K84\A\9#DY-1.T*:<96?/;;X@CM.+OPVZ5X94.`S +M?*>W7K6LCNAHSJZ5\N^)N(3?^HKVZC+6A0M"20&8D`KC?D"":[P;X@NX9OPX +M:2:VWTLZXP-\8P>W2M<])<%*(G'J4Y[9'U.WNU=N>,58Q-D*@;5V +MVQ6IM;O4!OSK%3BZ9KG&^47"L">=2-!B?(HHY8HTS*U3(L`!FEIF.,;CUIH@ +MXI65"VXH9=!P$WN!$X+!F13Y@IW(ZTS-#;M9M/:WDA.G*J3S],&E)82P.#M2 +M<<5Q;,3"P*]48;9]*,>X*5-,A=07CK_YLL1U`VJO4<4MLJR+(O/*'I5X +MMSISXZ,/4#-'BD@N%RC!JM!MT9_\?.N0T+@]B*KKWB%Q*C0^`ZAFQJ8;5L6M +MXW!U*#]*6DL8CR0$=144DNT#PRKL`54`#"D8]*O`-,6QYC-"MK.-.2@>]$NY +M!$C?E0OD)NW1D?B>Y.8X`BVG!.,8T_O=Z6*Y/:G'7&U!" +MC-94,6TMS>/H7E@C(YT@."F1&,B;],;5OQYDH\B)8U)V +M9"T@E6<+@LH[':OI?P^5CLMB0SGZC:L_;<(-L&>0B +M>12Z`EC^%&[M'6W@\7`U$84=!FF(XLHK/EG<^4>O<^@JIM[M7=/$!*C>K>WN +M`^7+-IY'%1,RM-#"+%$"FEI&.3D;_6I#2S8!RP],8%>CE&&*GS-D$]O2NJZ0 +MR:7'F8=-S1`D3'K8ZWT],+N:7DBC_P#C274*=QJ`[>G:NDA0=*')]<59+$8R +M<%74J?L::B?(\-CG(V/K0)D+28"J#SP'W_.C!,ISW&V:="5\"I*@\4GAOX;\ +M^GK3!QL12H(F01R?,.1'\ZE'(T;F*7D?E)ZTQ,!JPI&&ST-4WQ!Q).'\-EE. +MY4>7U/2KHD'%8SXWX;?W@B:U020)DF-?FU=\4.1M1X-.BQPR9XQR.D?/G+7, +MSW%PY9F;+=2378_%NKC1%&SL3LJ[DUY89=?@>$=9.,$8/VKZ5\.<#BX?9\OV +MS`&1^N>P]!66$7)GK=9K(:2"=6_"*CA?P1,T"7%VRZLY_#[\O4]ZVEC;V\$6 +MBWB6(+L4``(^E$MW(R#S7:CE%E.0=+]"-JU0@H]'DM5K,VH?]QD&C`'+([?U +MKG/9QD?Q#G]J(&(VD&/7H:XR:=QN/3I3#(>61D&2=2?Q#I[U,2*3@D4$-V.E +ML<^]0.H%M1!`.=ARJ$VC@.!D?45%U5AD;[_*JB]XK;V\[:YHP%[L.?:J:XD.!'&6/T%?GL\1:XN99W.HR.7/UK['\:7[G@]Q;Q#4X320#S8\EKX-+' +M=6,NBXB=&_Y#8U32EP-P/9R_)HHKK(YY]*:2<$/*7*S`]5W$;47-NP7'BKO&:>52X!S +M]>8J?@[9U,?M1CU +M#U/&0,@@ +M^^U(S8MZM=FS39]CI]&.>(,M=MG:%@N-NE,/$T;%&4@C8TO<0&XM9D1BKLI" +ML#C![USJYVLZNZU:+>"X4+SK/?$_Q=%9V\EE;F3\4C*1S"L.V001M60O^+\3 +M@B>UNKBX5@I!C,8#$^IR-CON-ZI[J-C+.1)$P`4920GG^ZH;!('(^U:L.BJ6 +MZ3,6;67';%#*_P#O;V6=GF=4423R,09%&P8C.S=AO6^^$/ALK$U^T*&WG!>$ +MA]1QG;`_=VV(WWK(_#'!TXMQ.`R6;O8-Y92&(&K'//3&>76OM7#[:UL^'Q65 +MNNB&-=*KG.WK5ZK+2]M,'3XW?N,Q'$^"RVZA5CSI9[Y7!.=O +M>J^XN5U$#!.,GIM0M_1<,3\EG^(A8XVHGA!AMN#5;&Z^&I8]._.FX&"QDFAO +M[#<:7!&X0:?ZBE;%?VDW_%Q@#U%'GFR?#0:G/(=:-:VWX>/]HP9R`PO)>IH.AV/E8]`.=;]WVY[4>>7RH=KY-R4 +M2$KXR.]07N:B,R2=_:F4A*@%\^@%9Z,)R-)2Y<#!.QSO2\@YD"FSN*$8]62"!5MT1%/5( +MQD'GFM-X2XV'/O4&A#;XVJ*;70REY*B&YN83N=:_\A@_>K.RXBOB*"=)R-0; +MK7&MAD[4K+:D*X"FD@@[=!0 +M8'#1-(1C.PS1X^9`SN*;=B*I`"L0'EBV]1Z5.T,;Y08#)3.1LP;P +MG.X^4]Q1'195\VX]MZ@56>,$'##<'K78I"3H?9Q^=1%_JA"7A4#SK,T2-(IR +M'(W'UIZ-`BZ119-DSO0P&YD5:21;FY+E@W&F02#D>=%SL&&QKCIE,'G48CE2 +MIYU`0Z39V8>]2*X&4Y?P_P!J68'.QWJLXEQN/A5LQG<)MS/7TQ5-T%'&YNHK +MD-><2@AD:+4"Z@$IU'K5=-QZ*.)I#+@("=1&-JP/&/B::^N_%BR@7(5@<,15 +M!+=32ZM;N03D@L:3[C9WL/HLG%.;HU]Y\::I2883G.I)/OO62Y=:+#*JL0YQGJ.8H-S^SI_],TT8_B?0^*_%"CA$9@/[>8#0#^Z1 +MSS[5FH(1,YEF;Q)&.2S=35#',6N0NMBHSC._7>KB*=5"DY-"FX)'=6?A7"C2VP+'?/0@53S6\D+^+;N8W[J +M<&N1<2XG','\?4X&!XB@@5I4K.9/TV:_[;,[?VC<)OGMY%SI^4]QWH`O`/\` +MXZO[^VFXJ5:XTZ@28-,1R!QMD'J#S%`+$9\I.*"\I!R!@]Z +MUGE1TD'/>EW52<=Z5:X9?WF^E!:X<\@3[U"43EBYE:`1D<]^E<;\3)G`84$Q +MW"N&R3W[&JLLTW"[WQX0CGSC9J72F%<$8R:!+%OE3]C45<]>8J%U8VPVH;.*DKY&V*GM]/6H +M"+:!GE5==Q.)#@94@>GI5QC<]1GW_73[T"1`<^NPJ!)F1O>'1W*G`"R#O_*L +M_/;2VTI612&_G]:W5S!H.=.1]Z3DMH;B/PY4U+GGRQ6?+@4_W->'4.'['SCC +M'!H^*0ZT*1W2X"2,NH<^1%9>S^%^*07+G6$B8&%P7^>,GS?0_0U]1XAP6:WR +M\698N9QS`]:IV7[TA9,N);6:GCQ9GO03@-A:<)B:*V5@'8$Y;)K102$#8UFH +MI6C?TYU;VUQE1WK#DW;K9MBE5)%XI#IM09(@U.##Y[T*Y%OXE3<\/ +M25"'4$>U4=QPN>V)>U8D#]QC6P,?/(H$D*L&R,YJU:#C,QCC&,O-,9O-. +MKHHR3JQ4UF,@TEO#0=MS55`EWA5DAF^D9IY'BA(C>$Q.<>:48J>U+Z![G)#DQJ?*#G[T]P?X?>\C%QL$(8T\O\?8'X82*Q==9!6<9'([Y[UG.)\-%K +M!J@7]BO-1S7UI[X=X@UQ!X$ART8V]16?+\_F@<\(SQK)CZ7@O8D"`JHWYDT5 +M4'H>E14@#]?KO4]6!OS//-+HY]GB1[?K]?:A-NVU3+#-65!ZG?>IT51S0 +M-ML^O2O$9SBI+Z5T;'G0]A+@'X>!T]:]H[5(L`#7B>E,` +M;[UTA0I)(`'.HD0JKF...,O(P50,DG;%5=E\46]E=A`"T)."</T^,H?W?)]=LN)"X3,;JT9&K(.WH: +ML+:XW/,`"OCUAQ&\X7)F!BJ,=T;Y3]*W'!?B6WO%(/DEP`8V/Y@]: +MG3PW*/*-@LI<$-C.<;'G0'90=1)!U#GSQFEH[J.5,JP4Y^9=JY<['M1TD*\CD=JT(S-'9`8FS^Z: +MZZ^*-:'#CM1,K(,T##0OJYK5D06%Q*-+;,.8HL@.G8?XI=D\0>)&<..W6IPW +M`/D<88?G5IE->430;=P:$!IE(Z,*F_[(Y_=/Y5YV4^;/+>K(C/\`Q-QL<$X> +M'T>))(VA`=A[U\MXGQ:YXC,9+B1BH8Z5R2%K8_ZBF9I+;"-^'1&)<T'?UK+/F5'J_2L&.&%9:N1XL67(R0,9/05T'(_K49[A!%)' +M`#'$Q!(9LL2,XWQ_*E5NFTC3&7]]JE'56;_RX&COFAMD$$^U!UW,F-(\/OCG +M4UBE8CQ')`Z5*HIY4^$@D3$R%M]MJ<29EP,TNL>D``;41%R<'?:AE3!Y'HKE +MPO+(/:F5N,@;TK&O/>H."KMII-)@T/'#@_HTNT"YR!4HGT@YY8ZU"2Y5FV>H +MK\$J@PTA>6]>\554CE2,UVB`Y;%5DW&((\YD7[T2QN0$I1CS)T7IND16WSFO +M5DI./0G(U$>RUZFK`Q#UF!?XD?HQ@AR&S]*@8XC_`-TVT(.W>A^#&.U;:/%V +M+&%>P^@KHB`R<4;2J[`^X-1.W/GM^OO5%V#Y`_;]?KO4&P>='`U'(`Q7/!8] +M,>U6019-MLT>PN6MI<,?*34S`0#G'M2TB8-0AJ(I%D4#5M49(]\C8U46%X1^ +MS]11L^7 +M]&I=/UZ_Y_7.`B\B9Y[CI57/"8G)5/+[\JNR,GWH$D892"`1VJ!1E15KB0;$ +MYZU5<1X/%U"XJ2IC(R<7<3`7%M);RF. +M1<,/L:];SE&`S6NXAPR.[A(("N.3=JQL\,EM.T3C2P.,?UK!GP;?V.GI]0IK +M]2^MIPPJRADU`?TK-VDI&!G%6T,N,;^U8.F:VK1;9!&M!)+`)4WQ\V.>:Z.FS.2VR[,&IPJ+W1Z/2\!,1,G# +MI7B8;ZM'>.VO4T2H">G]Q6EQ3 +M,ZFT[9\LXEQ63AU\T"6TKH`,,_E.3TQ_6JV[XK/4 +MA]);.`%)P36WX39FSL51MF.21G84MP[AT-M&I.'<;ZNE6XW';M6/)/=P:-5J +M?<^,>B,JK)"R'DPQ63BF_P!IXJ"P.E2%;U'*M=IJGXUPTW$1EB4EU&"!S(H( +M-)T_(.DR1C)PETR[CGRH8';&1CKVJ0E)]ZRO!^+B%1;7;$`?(YY#T-:16&G* +ME6'IN*"47%TP,V"6.6UAU;)U$]$"CZ5X#D!RZU)1G>K)9'P]7/-9OXDXLD$;6,+%IF'[0 +MC]T5:\;XHO";#6N#,_E0?U/M6%\/Q?VLK&5I`Q(4\CZFF0AY9T-#I]_]V?2Z +M%)/`U+YF4#GMN=N=#P\;(2`<8*^HJ1C5I7R&`!`P#DYJ+1L(2S$[?+CD/2M1 +MVJ.R/K8G2<#H!L*A']6MQ();.("3Q#XNH>HQ6)M[7R^(PY\LT[:7L +MMC.C'5)&I^0GE[4,9K<<#5>GQ=O%_!N;>[5!I*D;=#M3L=Y$QP'QGH:JK._M +M[Z+Q(G#8^8'8CZ4R51]B!CO6Q/Z//R@XNI+DN8Y@=\\^U,:L^WM6:2>2S<(Q +M)C)V/.K6*Y!',`'E1)@.(UO`VH;IU':BN(ID4Y^HZ4IX^-C^=`>Y%N203X9Y +M_P#$U95#1G:+]G)N.C=Z2FO3;-@ME._;TJNXAQ>*WC8R,`@ZY_E62XA\4S3Y +MCM$"J=B[C<^PH)32->GT>3._@N#2\6XC"UNZSLOA,,-JQ@YKY3<1%IY4CE!B +MU85AGE5G(9;DZYG9SW)SBH"`+G;E27DY/0Z31_T\6MUW_!7Q66PYGWIE;3`W +MIM4QZ472>1Y4MY&;%2$A`,4=(D/)11F4?6N#;(-#N;+0-DV[T-04Z'%&!YY[ +M4(N=6E$U$\MLYJ(/QR$#;]C0WN$B!4[N>0ZT4<*XI/CP8#OMDL-J[P[X7OGX +MY##=QR+$'#M*#D$#M1QQWV9IZG%%-[EP0?AW$W>-983`)-U,AQMWJGNI3%*\ +M<];S_4&\6TA@6(8DG4J&WV7K]:^>I&K+1M;71S,>NRY5?17RP- +M<-E[F5OI@"@KPTD>5\^W_=7(MU/_`'1%MP1M5^\T+]N,GJ>\_L)8<7T?H#P)-O,=^6]0\%\X._K3Y!"YZ@U%O,-_H:V +M'F[%O`DQY`"3T+4+$@8!T"_6G,%>1^]<)##!&?2H2P:,H/+IN:D3O0VC./(W +MWJ&IU."OUJ%G9%)]J3D0_2G3*I&XQ07*=Q4(A$C20RFK2QO.A.,\QVI&1<\O +MRH.2CZEYCM4+[-2I#CW_`%_6AL@)`(YTE8W@E3!.#U%6!\PWY4-`]``3$3S* +MC;?F**KY!(-<9=(R>5"88.I,@]Q4"[&3N-AFAD[8Q44DR#JQ[YHI`9=AMVJ` +M@716&])RPLK:TY]?6GF&`>5"9=BJJ*4$>E +M'632:R&AHM%<,!WJ>*1BEWYD>U.QN&'\ZM`-4"D3(-0L&,5_X08J)!@8/4;T +MR<"D+@-'(LRY!0ALTS'+9-2!E'?%Q9?&)LG4WV%<$9TEABBE;G3DA'![[5`M +M*@SX+#O@YKL'(5DXKATV;=<5ZYMK2_A*31HZD;JPS2[3LI\T<@W_`(:AX[DY +M$3>AJMR+4>;*JXX$UDA-J6DA`SH)R5]NXI!6P^"#D=.5:(R7#C"C3[U5S\*, +MMR)#.XD_A09EFXIA\BL.AGA;YF3&V.5-IQN>V&=7BKGD:K8_`$]!-?@[-@K`G;?M^OM79 +M[B.UM9+B7`C0?>J*P^([6X<1RDPL>6IMF[TG\4<2,LBV,3KI`#,1U.^/M5Q@ +M[IB,>EG+*L4&*W(2$'!?EDTU;QQ?@YR +M[I@J47.QJM3QD`C\+)?Y=2\CZ4Z*7\'H(**^*\#T%MX,/XF16;?)//D>=*:$ +M`=Y(1S_E5]9VWAQ:C\S;GTH,F2NA.?+M7`%H!@;8`I +M26(]N=6[QXZ4M)$,4B,C%&14QO-:S"2"1D<=5-7MC\2`_L[P>&W+Q`-B/7M5 +M=)#MR]\TK)!SQFM./+0&;3XLZ^:Y^S;B:.XB&EPZD;$'(H,=U):/I8$I6*AF +MN+*0M#*R=QT/T-6]O\1(X\.]CTGD)$&1]1S%:8Y4SC9O3,F/F'R1KX[R.9,18Y8@A4_B]*J[FX@BM'O$F&A1G5&?FK&7-_-?W'C3R%FY`'D! +MZ4NZ`:\66HAB3RVH"'AY<]1[5T[G/Y5+3L,_0UQB-)JK)1$MBH-)@5!VI[A +M'")N+3X.8[93YY-.WL/6CC&RISACBYS=)"]C97/$K@16Z_\`V8C9:VG#?AN" +MSC5SEG/S/WJ[L+"SL;5888BB`( +M_P#LK(X(X0VA1Y<$?0[T=H=4BR#?'<D[[5ZNK(_8'Z?YKU +M#;#I'WA;I#S4@]B*()HSCO0FMP>OWJ/@D9P5X&1I89#5[2:65,GG@U/ +M1*O)C4(2*/W./3&:$T,G1B?>B"21=CBN^/MN#4+%&@?D5^HH;1.-\`^W.GO' +M3OCWJ+:3N/RJ$ME:2ZC;S#L10V8]5^U6+`-UH+P@[#GVJ%IB:2,C!U.*O+.\ +M2X0`C#CIWJFDB93E=QWJ*ED8,I(J%&I4Y.1^OU^NM0,88<\@TC97XE&ASAA5 +MBOF]:$H5:,H<@Y]:ZKD$C8>U,:0?KU_7Z_J-HE;<#ZU`K)@ACON>HJ)7?_%! +M4.AP&V[$[4PK%N8YGE4*`N@;I2DD9!Y58$%M^N,T)TVWWJR)E4ZZ?057<3X9 +M'?KJ&%G')\<_>KJ6/!Y$TLP(/(#TH9135,9&3B[1B98;FR?PYT9?7H:['=$8 +MK:/&KH5D0,O4,,BEQPJP9\BUCSU'+^1K%/1)OXLW0UU+Y(S*W@SO^1JQM[K4 +M0B[_>D)>!(KYMYRB_PL,XI4M'-=P[T6/2/N8$]7% +M?@/*V%`&,8KS218R3@^E"C0%23N.U3\)#D8&];^3GG/$CY!<^XKA.0<@8_.I +M-A.GTH9!?KCO4+!.KS9"'2!S-!6-H\J$'/J.?UIW6D,>D;'K4/$C8$9QZU7! +M:;*]HUD\LBX)V)[;TF]@`7RNVK>GKN\MT;&M"Z4B>"-]QEG7.?8\Z;:1E.._\6V:2O;B18V;R$XV! +M?`H7)4%%23M"D5I;QF2""YN[:0+Y-$I*GI\IVI::PXJA"V\]O.$_C32S>F1M +M2KQ7\KB2$@2AM08\JN+9[R&$"22V8D>8`G^=+<4Q\J>8B4*!GKBN122N1#J.DMDY&1GU/I3EE;HO$!)( +MF%T:AJP<^OI0_CRS>JA;D2X=!F"XO[D80(51>6_M5;&C3W/FR23D^U%NY_(4 +M\Y4MG=MJGPY-(+'KR]J+I-AI-)R?DM[2`22@9V',U;Z,;@4K8)HAU$;DT[SK +M'+EG,RRN0'1MRJ#1\J9P*\5H:%V5SQY&?SI:2#TQ5MX>:"T1QN,YHE(-2*5X +M,#<4K)!UJ]>'F,4H\(P=L4V,QL9E!+;Y1E&=)Z#D<4DULRYP*OW@WY&EVA4' +M)7<\S6B.4:J951K)RQO3`)!Q^OU_>K!;?5N`*B;?&05J/(F7P+H?K15YU[1I +MY5+IM[U39*.Y&,4)VVVJ988IGA?";GC%P4B7$2?^20\E']ZD8V^`9SCCBY3= +M)$.&<&N^*EGAB+1(?.Q//T]ZW_#[:YM[=(H[2-(UV`5MA3/"N'2M-2#4N< +M8']:7;Y6]-Q3##=BL@`8[XWY]JZS:!O^53(R-^1%")R&ST%4^"(^3_ZAJS?$ +MD1V_\('UR:H8%V&]:;_4!`W$[>0C?S+G[5F5V3:L\G9U=-C^*8RN0HYU(,=] +M_>E`[`\Q]JZ)G'5<4O::Z8WK;<9^E>I7QWYX%>JMK(?I(2$KDK@&NC(W.QH8 +MF&=P0?;-$#!MP:Z)YD[@,!D;CD:YEH_^0KQ8#8UX'?.?:H0FKJXKIC0]!]ZC +MI#^;DU>U-&PU;J?6H0X]LISL10&M"/E/VIS5MMO7,`<]S5$*UHW'S;^]1"LI +MY_K]?KM9LH.V-Z`8@3L:LEB6>*::,YSV[4&9P`1GWW_`,5" +MQ#)C<@-N.1JVL[_.$?>JENM0#JI^;ZU"=FN5E<`\^^:\01OGZU16G$&C8+(< +MKWJYBF5P#G.>1_7M544=(4YU#-#,14Y0@TQC4-CC(J&64[FJ+3!"4J1E<;U[ +M4"!THF59<,.=#,)7Y3]#O5E$'&H'&X]*`8BWRXH^&!W7([U(*#TQZBH6(E2I +MY5P9Y?XIYDR-C0C`<'?)J%V+_KG42-L`?449E('R_6N`>E0@$*>>?:C1G"G! +MV%F%WH37%W-S=8D_A0`G'O34<"#YU.]2-L0NI1E +M:&F6FA"2T\>/`)!7KVI5.!CQ/$[Z +M*A[*-`=6!WR*5DM(SG`VZ$"KEK24`L[$$M4U]\-V]PI8>5LDX&V3Z=JT;`%CZ'8XQ7 +M4V+874"-B3BEIC8S<>4SYS/PV2RE_8^)(6&XT$`>Q-)-*RR_M49)"NG<=*^F +MRP)(A\7"L5QAE&359>\"AE0B=))#U.4>,BO_`-GSF,'K2%N6@N0)%*X&1G:I+F/!UXZO'FA\&:2- +M_+@JM+@$<\>],++ZUD<3)M+'5L*ZK;<]Z263.V?:C+)]:#D%Q&1 +M\N]<*Y!SRH:R;"B*V:M,&@31`^]+/!L:?/*HE!4+3HIY8/2@&#;:K9X +M,X_.C4AT9"*(1S&U2>$8+"CE,<]MJB_RT5AIE=*N.5+$X)R:9N'QG.::X)P2 +M;C,Y8EH[9#YY,;GT'K_*GXXN7"+R9H8H.- +M0_<\KK==/4OCB/U_N%3E7-\8/TVQ7#&T?R'([=*[J##&=Z<<\BP#9&/>E7&A +M\9R"#@T8N_3<'UJBT)2'0=^5`?P#KES2,1.@GG7-RVF=S2_]M`VL +M8&YPK^O^Z$>&V_2$8IS?./USKRC!QVI2G)>352$O]IML`A3]#7J>%>J_38/;E4UC_C;GT!Q760'J6XKN'D4&$48_S4A&NXSB@!CL"^ +M/<44#K@?2J+)@:3L=JD8$`_P`ZA`Q'K^5>`VQT_E44;4=)V-$(WWJ$%YAA#C-5;@G)SRJX +MF7*$U5284G;D3RJ$0JRY..A[USP_-U-&*D#?:O=]/(GEWJ%@&\IZX]*8M[MX +M#Y6..HZ4-EP=]SZ]*&00N::.LHKE&U(<&K. +MUXH4PLGMD?K]9JJ*HM6().1CWVKNXVQ]?O7$>.=01@BO>$5Y$G^M0ATJ=\#^ +MM0\,<^1J2MC9MZG@`<\_K_O[U1`6GN*X5SFB^9>N2/U^OUCFWH??]?K/I5D! +M%,US0"*-M]#7@HQWJ%@#&/M40H&>_P#2F"OZQ0B,U1:!YQMC>O#GSH@T=6%< +MQ_""=^NU0NSH<*#D`8',U4JPO+UYV_\`#$<)ZG_%*<;XC=-=0<*L0HGN7T&8 +MC(C'4^^*T%KPZ"SMXX%4L$`&H[_6A[9:J(L/,W.H*C9(_A.-QG:K$A%'R*!] +MJ$\.1XL7;EW%1HN,UT*&,';3]QO4DC(.-\&F%`?!&1W[_6O:`1S&:JD78%HM +M'F%#"!<$+O3BKJ&,U`)I)!ZU*)N("+6HU\O6O&W0+E-L?O6.2^3-*?"$BF-\'`^_P"=MMR20"+&QWW!T_X^](-;7D#:3&7]8_,*W&A79@HW)Y#.]+/8(RG +M2V`IVT-L/ISH7%,V8];DCWR8Y+G!P0,\M^M'2?(SJJYN^#++E2H+9VQ@K]\Y +MJIFX1)`WEEVW!U#8?:EO&;<>MQ2[X"+-W-&6;'4&JJ03VK:)E*L.74&I+<`[ +M_F*6\9J525HN5EVY_6IA@PJI2XR?F!II+@`<\&@VM`.(X?;-`=-_6NK*-MZ[ +MK%0BX$YAI&W3UI`S!4;)V[?KZ4W>3HJD$Y!ZT'@W!YN,3^(P9+16\SC][T%. +MQ8W/A!2RPQ0WS=(YPG@LW&KDN28[1#YWQNQ["M]:6L=M"D$"!8E&`J[`"O6] +MO'!`D,$82)!A4&P`IJ-8UFMGJ9V^O"#1#``-3:(9U+LW\Z\@V +MQ4P-N_6F&(@DA`(88-=QOMO7F35V]*'DJ<5"$)!YB1RJ.>AY5-R#RZT)A@YY +M;51:!3;@D?6D!_Y,]\_:GG(8-GK_`#I$@ZM/;.]!(9$^??%0_P#R=NHY!2?S +MI.`94'-=^*KAEX\$0`A8_7N30+>[8@9C!`]:Y^5-]';TSJ"'<'!!/.O:=SG> +MH"Y3;*-]#4A<1$;ZP?;]>M9Z9K);UZH^-"3\Y^V*]54R6C[9K4\CO4<]M_0< +MZ!&S."5.1UU41?,V-P>6U=\\CT=+*-B#CU%=5T.=+BB(=65&9,<^OYU[P5E! +M)B4+UQTJB62R<9SG-1C`9P`/R +MHQ`4`8WKVE@V"-_2H99FP!ELG*O%3HU?NYQ +MFH0\S*82<[8YU7:]=&#OGG_G]?2O9Y +MY^N/U[U1#FWT[UT`D_K]?KWKW-MN=1'+Z?T_7V]*A#I!Q^OU_P!4)QD[CUHQ +MYL/7-#.,_3]?KUJ$1#2`.PJ,S8`0'<['THI8$G&YY9_7TH87+,WTJ%V55I:+ +M)\1Z\;0)D>A.15_*P2,L1RI6SC"O7.EM!4E6QGD>M,C5@0AM1UYT]Q0W4$Y!W9L%>U"PHLG+"@MTGCD*` +M*,X&=^]+%B59B6++@<^8]:("2IB#`*S`DGIO7I(9H,ABQR>0Y&K[Z(N.&`TB +M/<8.3L45X*YRS,-!."<=MJE$BLN!MNU5T_";:9CH98Y""6TG&/3M6IO62>8$<@,;=:3>U20%%"EL>;4.W +M:K:38<,DX#4TA"X7.^ +M^<*$^&,GK\\%PS+26W$(E7^9CONM,S[^XJNN)5C21WV"J232YNA +ML59\O^(7\;XCN3T7`_*AQ94=/O2,EV;F\EN&'_D-74J-'((G4\PRY +MH<7&)[0`6\4$8;8Z4_S75OR>39]1X3HR":^8IQJY_#R+X<.ELDKHV.1D]:[_`+O.5_#F +M*`PXSH*;;'WJ64?3H>*-?\`@#&6%)2\I82:3''K)4$G?ECZ596%RO$.#17(9 +MD$BK*NH@8QOO]MZ^0S<1>Z54N(()$3=59,@8^M/)QFY""/1%H`P%P<HI$ +M2-_)\0__`(VZXVAS&7>&!"?_`"9*JIQURW+T:B2W+\$X)%)RJ@'AQ8!!`()Q^=2R4;Z6ZE6_L.$ +M13-XCO\`BIB#DJ@P2#VRW(?\31[F[`XC'P:.1OVJR3ROG.A.F_?4=O\`ZU\] +M'$IA,UQH3Q2-.K?./O4AQ27/;ZUA!>-B+]G'A6#` +M8.`3G)YU")HXI99([:%7?`8@'S`]]ZED-PT-U'P&T:S9GOYH57Q#)A$&/F(S +MC^^PHL=N>'\$BC@DDNKQ$*)KG.-6?F8Y[U\]N!!%P+=+=TCNFA&@EM6DX.#GWH/#K6'ADL+SWT\MPZ +M':67Q&$@3!;)R1GD?2H0T?!KF47_`!,2REPLXP2?_P"M?RK0 +M:%EP5;#=#7S07EQ;EVBE9"YU-@XR>],IQ2^C^6YD_P#]&I99]%COIK=BDVZ= +M&%623I*H96`KYJO$+N2,:KB0YQ^\:%;\5ODE"+U:LY +M[?K^E?/%XOQ`IO=2[?\`*BCBE^<-^+ESCO5$-_G\_I^N=0=R`,#<]/ZUA6XK +M?G'_`+N7?UQ7/]UOQO\`BI,YQSJ60W">08)R>N>M3!"@MV&:PG^[7Y)'XIP` +M!R^M2;C/$-('XIR#@'E5-EFZ9O#M1G'+?^=5P8S3(.FE=)RW8]JP[<PV]J +MXO'N)*<"XV/_`!%7:*-V.7T_M_BN,,M@'/K6&C^(>).,&<8(S\HH@X_Q'=1, +MH`'\`_76I91LL8YUU<8K&?[_`,1SCQ5&/^`KJ_$/$-(/B)O@_(*EA(UP'I7. +MN/KRK'_^H>(#?6GRY^05+_U!?C]]/_\`-59#1W4?[4;Z01C/ON*A'DJA(RH7 +M&QWS69N..WKQX+1\OX/6A1@J.Z +MOK['._6LR_Q%Q#S99#J;!\O,5!OB"^4D?LN?\/K2?V&*7AFHG6/QA)&=*@`D +MJ-QWH>C*-)\Z:L8.Q-4=GQR[D5T=86`(.2F_7^U+)QJZ<29$>PR`%_S5UY(I +M>#1%3K(((ZX(R*[XA\-D;+`#*GJ.U9Y^/7B*$`BQ)@ME23R]ZXG&[MH@Q$>2 +MNKY3_>JIH*T^S1QVKS1YR`&YG/\`*HZ3&[(X`&>>-S_W6>3C][&-2>&"3OY3 +MO^=3'Q#>R2JS"'R\O)4I$W,OF@DC`#YPPSN,YKH>)+?4R+XA)*KG>J5_B.^9 +MC'B(`YW"G/\`.A?[I.'"A8\$$\C_`'JZKHB=KDLBF`.9&-AZUU0C+^U4(0`? +M#'[V/7%5@XA-(N2$!!R"`?[UTWTOX;Q=*:V4[[[?G0I!-D;E`2[*#I+=>]U5W#N)W$\6'";=ASK3AX;$97:1>:I1^^<=B +M*Z+AU.ZCZ'%5K7C@H1C(K-M)H)PB[>]%\5U!TLRX[$^O\` +M:K(:#1@>4?:N'5_`2/I5"M_X5#AI1X8(['G6NNU`&U?,_C:>1KNWB)\@#-CNJW!)L$73'/>O472I3.!G&>7M7JJRTV?__9 +` +end \ No newline at end of file diff --git a/uudecode/DECODE.HPP b/uudecode/DECODE.HPP new file mode 100644 index 0000000..b835087 --- /dev/null +++ b/uudecode/DECODE.HPP @@ -0,0 +1,52 @@ +#ifndef _UUDECODE_DECODE_HPP_ +#define _UUDECODE_DECODE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +extern "C" +{ + WORD _cdecl uudecode(const char *szPathFileName,char *szPathOutputFileName); + WORD _cdecl decodeBase64(const char *szPathFileName,char *szPathOutputFileName); +} + +class GenDecode +{ +public: + static bool decode(const String &pathFileName,String &pathOutputFileName); + static bool decode(const String &pathFileName); +private: + GenDecode(void); + virtual ~GenDecode(); +}; + +inline +GenDecode::GenDecode(void) +{ +} + +inline +GenDecode::~GenDecode() +{ +} + +inline +bool GenDecode::decode(const String &pathFileName) +{ + String strPathOutputFileName; + strPathOutputFileName.reserve(256); + return decode(pathFileName,strPathOutputFileName); +} + +inline +bool GenDecode::decode(const String &pathFileName,String &pathOutputFileName) +{ + String strPathOutputFileName; + + strPathOutputFileName.reserve(256); + if(!uudecode((LPSTR)pathFileName,(LPSTR)strPathOutputFileName)) + if(!decodeBase64((LPSTR)pathFileName,strPathOutputFileName))return false; + pathOutputFileName=strPathOutputFileName; + return true; +} +#endif \ No newline at end of file diff --git a/uudecode/DECODE64.HLD b/uudecode/DECODE64.HLD new file mode 100644 index 0000000..faac8f1 --- /dev/null +++ b/uudecode/DECODE64.HLD @@ -0,0 +1,418 @@ +;************************************************************************************* +; MODULE: BASE64.ASM DATE: JANUARY 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : BASE64 DECODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc + +HANDLE STRUC +PHANDLE TYPEDEF FAR PTR HANDLE + HANDLE@@mHandle DD <0> +HANDLE ENDS + +INVALID_HANDLE equ 0FFFFFFFFh + +STRSTR MACRO szStringOne,szStringTwo + push offset szStringTwo ; save string one + push offset szStringOne ; save string two + call _strstr ; call standard library strstr + add esp,08h ; reset stack frame +ENDM + +STRCHR MACRO szString,charByte + push charByte ; save charByte + push offset szString ; save string + call _strchr ; call standard library strchr + add esp,08h ; reset stack frame +ENDM + +STRLEN MACRO szData + push edi ; save destination index register + push ecx ; save ecx register + mov edi,offset szData ; get string to destination index register + mov ecx,0FFFFh ; move 65535 to ecx register + xor eax,eax ; clear eax register + repnz scasb ; scan string + mov eax,0FFFFh ; move 65535 to eax + sub eax,ecx ; subtract number of bytes scanned + dec eax ; decrement result + pop ecx ; restore ecx register + pop edi ; restore destination index register +ENDM + +MEMCPY MACRO szDstData,szSrcData,lengthCopy + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szSrcData ; move source data to source index register + mov edi,offset szDstData ; move destination data to destination index register + mov ecx,lengthCopy ; move number of bytes to copy to ecx register + rep movsb ; copy data + pop edi ; restore destination index register + pop esi ; restore source index register +ENDM + +STRCMP MACRO szStringOne,szStringTwo +LOCAL @@STRCMPnotEqual,@@STRCMPequal,@@STRCMPexit + push ecx ; save ecx register + push edi ; save destination index register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare lengths + jne @@STRCMPnotEqual ; if lengths differ, strings are not equal +@@STRCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string two + cmp al,byte ptr[edi] ; compare with byte from string one + jne @@STRCMPnotEqual ; if bytes differ then we're done + loop @@STRCMPloop ; iterate through string length +@@STRCMPequal: ; equality control + mov eax,0001h ; set return code + jmp @@STRCMPexit ; we're done +@@STRCMPnotEqual: ; inequality control + xor eax,eax ; set return code +@@STRCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM + +STRNCMP MACRO szStringOne,szStringTwo +LOCAL @@STRNCMPloop,@@STRNCMPequal,@@STRNCMPnotEqual,@@STRNCMPexit + push ecx ; save ecx register + push edi ; save edi register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare the lengths + jle @@STRNCMPloop ; string one is less equal to string two + mov ecx,eax ; string two is less, so use it's length +@@STRNCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string one + cmp al,byte ptr[edi] ; compare with byte from string two + jne @@STRNCMPnotEqual ; if byte are unequal, strings are unequal + inc edi ; increment along string two + inc esi ; increment along string one + loop @@STRNCMPloop ; keep going +@@STRNCMPequal: ; string equal sync address + mov eax,0001h ; set return code + jmp @@STRNCMPexit ; we're done +@@STRNCMPnotEqual: ; string unequal sync address + xor eax,eax ; set return code +@@STRNCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM + +CREATEFILE MACRO pathFileName,access,share,open,attribute + push 0000h ; save handle to template (null) + push attribute ; save attributes + push open ; save creation flags + push 0000h ; save security attributes + push share ; save share mode + push access ; save acess mode + push pathFileName ; save path file name + call dword ptr __imp__CreateFileA@28 ; call create +ENDM + +READFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesRead on stack + mov eax,esp ; move bytesRead address to eax + push 0000h ; save overlapped structure address + push eax ; save pointer to bytesRead + push sizeBuffer ; save length of buffer + push offset szBuffer ; save address of read buffer + push hFileHandle ; save file handle + call dword ptr __imp__ReadFile@20 ; call read + mov eax,[esp] ; move bytesRead value to eax + add esp,04h ; remove bytesRead variable from stack +ENDM + +WRITEFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesWritten variable on stack + mov eax,esp ; move bytesWritten address to eax + push 0000h ; save overlapped structure address + push eax ; save bytesWritten address + push sizeBuffer ; save write length + push offset szBuffer ; save address of write buffer + push hFileHandle ; save file handle + call dword ptr __imp__WriteFile@20 ; call write + mov eax,[esp] ; move number of bytes written to eax + add esp,04h ; remove bytesWritten variable from stack +ENDM + +CLOSEHANDLE MACRO handle + push handle ; save file handle + call dword ptr __imp__CloseHandle@4 ; call close +ENDM + +FREAD MACRO sFileInfo,ptrByte + LOCAL @@FREADreadError,@@FREADsimpleRead,@@FREADdone + cmp sFileInfo.FileInfo@@mBufferIndex,00h ; is buffer index zero + jne @@FREADsimpleRead ; if not then just grab next byte + READFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; otherwise we fill the read buffer + cmp eax,0000h ; did we read any data ? + je @@FREADreadError ; if not then we're done + mov sFileInfo.FileInfo@@mBufferIndex,eax ; move number of bytes read to buffer index + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer + jmp @@FREADsimpleRead ; grab next byte +@@FREADreadError: ; read error sync address + xor eax,eax ; set return code + jmp @@FREADdone ; we're done +@@FREADsimpleRead: ; simple read sync address + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov al,byte ptr[eax] ; move byte value to al + mov byte ptr[ptrByte],al ; move byte value to user buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment along lpBufferPointer + dec sFileInfo.FileInfo@@mBufferIndex ; decrement the buffer index + mov eax,01h ; set the return code +@@FREADdone: ; done reading sync +ENDM + +FWRITE MACRO sFileInfo,ptrByte + LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer + cmp sFileInfo.FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength + jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; other wise + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEsimpleWrite: ; simple write sync address + cmp sFileInfo.FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? + jne @@FWRITEuseBuffer ; if not then just use it + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEuseBuffer: ; use buffer sync address + mov cl,byte ptr[ptrByte] ; move byte to write to cl + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov byte ptr[eax],cl ; move byte into buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment buffer pointer + inc sFileInfo.FileInfo@@mBufferIndex ; increment buffer index + mov eax,01h ; set return code +ENDM + +FFLUSH MACRO sFileInfo + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,sFileInfo.FileInfo@@mBufferIndex ; write buffer to disk + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +ENDM + +FGETS MACRO sFileInfo,szBuffer + LOCAL @@FGETScont,@@FGETexit,@@FGETsetError,@@FGETScrlf + push esi ; save source index register + mov esi,offset szBuffer ; move address of buffer into esi +@@FGETScont: ; loop control + FREAD sFileInfo,esi ; read a byte + cmp eax,0000h ; was our read successful? + je @@FGETexit ; if not we're done + cmp byte ptr[esi],0Dh ; is the byte a carriage return? + je @@FGETScrlf ; if yes then jump to handler + inc esi ; increment along esi + jmp @@FGETScont ; keep reading +@@FGETScrlf: ; carriage return control + mov byte ptr[esi],00h ; move null into line data + sub esp,04h ; create temp var on stack + mov esi,esp ; esi points to temp var + FREAD sFileInfo,esi ; read line-feed into temp var + add esp,04h ; restore stack +@@FGETexit: ; exit sync address + pop esi ; restore source index register +ENDM + +FileInfo STRUC + MaxLength equ 800h + FileInfo@@mhFileHandle HANDLE <0> + FileInfo@@mszBuffer DB MaxLength DUP(0) + FileInfo@@mBufferIndex DD (0) + FileInfo@@mlpBufferPointer DD (0) +FileInfo ENDS + +.DATA + inputFile FileInfo <<0>> + outputFile FileInfo <<0>> + lineData DB 400h DUP(0) + szDefaultOutputPathFileName DB 'IMAGE.JPG',00h + szOutputPathFileName DB 0FFh DUP(0) + szFileNameLiteral DB 'filename=',00h + szOutBytes DB 04h DUP(0) + szInputPathFileName DD ? + szBase64ID DB '/9j/',00h + szBase64Vector DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',00h + num DD ? + lineLength DD ? + itemIndex DD ? + numIndex DD ? + valueItem DD ? +.CODE +_decodeBase64 proc near ; WORD decodeBase64(const char *szPathFileName) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push [ebp+8] ; save pathFileName + pop szInputPathFileName ; restore into inputPathFileName + cmp szInputPathFileName,0000h ; is the file na null + je @@error ; if so then we've got an error + CREATEFILE szInputPathFileName,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + mov inputFile.FileInfo@@mhFileHandle,eax ; store the handle + cmp inputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; do we have a valid handle ? + je @@error ; if the handle is invalid then we've got an error + STRLEN szDefaultOutputPathFileName ; get the length of the default file name + MEMCPY szOutputPathFileName,szDefaultOutputPathFileName,eax ; set output file name to default +@@search: ; search sync address + FGETS inputFile,lineData ; get input line + cmp eax,0000h ; did we read anything + je @@end ; if not we're done + STRSTR lineData,szFileNameLiteral ; look for "filename=" literal + cmp eax,0000h ; did we find it + jne @@nameFile ; if so then extract the filename + STRNCMP szBase64ID,lineData ; compare line to base64 identifier + cmp eax,0001h ; if we've got it then we start decoding + je @@beginDecode ; jump to decode handler + jmp @@search ; keep going +@@nameFile: ; nameFile sync address + push eax ; save address of filename literal + push offset szOutputPathFileName ; save address of filename buffer + call _nameFile ; extract the file name + add esp,08h ; reset stack frame + jmp @@search ; keep going +@@beginDecode: ; begin decode sync address + CREATEFILE offset szOutputPathFileName,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL + mov outputFile.FileInfo@@mhFileHandle,eax ; save handle +@@continueDecode: ; continue decode sync address + STRLEN lineData ; get length of lineData + dec eax ; decrement line length + mov lineLength,eax ; move line length into lineLength + mov itemIndex,0000h ; set itemIndex to zero +@@itemLoop: ; itemLoop sync address + mov valueItem,0000h ; set valueItem to zero + mov esi,offset lineData ; move ptr lineData to esi register + add esi,itemIndex ; add itemIndex to address + cmp byte ptr[esi+02h],'=' ; is pChar[2] equal to '='? + je @@assignOne ; if so then num=1 + cmp byte ptr[esi+03h],'=' ; else if pChar[3]='=' + je @@assignTwo ; then num=2 + mov num,0003h ; otherwise num=3 + jmp @@assignContinue ; continue +@@assignOne: ; assignment sync address + mov num,0001h ; assign 1 to num + jmp @@assignContinue ; continue +@@assignTwo: ; assignment sync address + mov num,0002h ; assign two to num + jmp @@assignContinue ; continue +@@assignContinue: ; end assignment sync address + mov numIndex,0000h ; set numIndex to zero +@@numLoop: ; numIndex loop sync address + xor eax,eax ; clear out eax + mov edi,numIndex ; move numIndex into destination index + mov al,byte ptr[esi+edi] ; get the byte at pChar[numIndex] + STRCHR szBase64Vector,eax ; ::strchar(szBase64Vector,pChar[numIndex]) + cmp eax,0000h ; did we find the token + je @@end ; if not then we've got an error + mov edi,eax ; move address of found token to edi (pTok) + sub edi,offset szBase64Vector ; perform (pTok-szBase64Vector) result to edi + mov eax,0003h ; move 3 into eax + sub eax,numIndex ; perform (3-numIndex) result to eax + mov edx,0006h ; move 6 into edx + imul eax,edx ; perform (3-numIndex)*6 result to eax + mov cl,al ; move shift value into cl register + shl edi,cl ; perform (pTok-smszVec)<<((3-numIndex)*6) result to edi + add valueItem,edi ; valueItem+=(pTok-smszVec)<<((3-numIndex)*6) + inc numIndex ; increment numIndex + mov eax,numIndex ; move numIndex into eax register + cmp eax,num ; compare numIndex to num + jle @@numLoop ; loop through <= operation + mov numIndex,0002h ; set numIndex to 2 +@@nextNumLoop: ; next numLoop sync address + mov esi,offset szOutBytes ; move szOutBytes address into esi + mov edi,numIndex ; move numIndex into edi + mov eax,valueItem ; move valueItem into eax register + and eax,000000FFh ; apply bit mask + mov byte ptr[esi+edi],al ; set byte in szOutBytes + shr valueItem,08h ; shift valueItem right 8 bytes + dec numIndex ; decrement numIndex + cmp numIndex,0000h ; compare numIndex to zero + jge @@nextNumLoop ; if >=0 keep going + mov esi,offset szOutBytes ; move szOutBytes to esi + xor edi,edi ; clear edi +@@writeLoop: ; writeLoop sync address + FWRITE outputFile,byte ptr[esi+edi] ; write out the byte + inc edi ; increment edi + cmp edi,num ; compare edi to num + jl @@writeLoop ; if it's less then keep going + add itemIndex,0004h ; increment itemIndex by four + mov eax,itemIndex ; move itemIndex to eax + cmp eax,lineLength ; compare itemIndex to lineLength + jl @@itemLoop ; if it's less that keep going + FGETS inputFile,lineData ; get another line + cmp eax,0000h ; did we get a line? + je @@end ; if not then we're done + jmp @@continueDecode ; otherwise keep going +@@end: ; end sync address + FFLUSH outputFile ; flush the output file + CLOSEHANDLE outputFile.FileInfo@@mhFileHandle ; close output file + CLOSEHANDLE inputFile.FileInfo@@mhFileHandle ; close input file +@@error: ; error sync address + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_decodeBase64 endp +_nameFile proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov edi,[ebp+8] ; move dest string to destination index register + mov esi,[ebp+0Ch] ; move source string to source index register +@@NAMEFILEquoteLoop: ; first quote loop control + mov al,byte ptr[esi] ; move byte into al + cmp al,00h ; is it null? + je @@NAMEFILEerror ; if it's null then we've got an error + cmp al,'"' ; is it the first quote ? + je @@NAMEFILEreadFile ; if so then get the filename + inc esi ; increment along esi + jmp @@NAMEFILEquoteLoop ; keep going +@@NAMEFILEreadFile: ; read file name sync address + inc esi ; skip past the first quote + mov al,byte ptr[esi] ; read from file name + cmp al,'"' ; is the byte the closing quote? + je @@NAMEFILEreadEnd ; if so then we're done + cmp al,00h ; is the byte a null byte? + je @@NAMEFILEreadEnd ; if so then we're done + mov byte ptr[edi],al ; store the byte in destination + inc edi ; increment along destination + jmp @@NAMEFILEreadFile ; keep going +@@NAMEFILEreadEnd: ; read end sync address + mov byte ptr[edi],00h ; null terminate the string + mov eax,0001h ; set return code + jmp @@NAMEFILEend ; we're done +@@NAMEFILEerror: ; error sync address + xor eax,eax ; set error return +@@NAMEFILEend: ; end proc sync address + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_nameFile endp +public _decodeBase64 +extrn __imp__WriteFile@20:near +extrn __imp__CloseHandle@4:near +extrn __imp__CreateFileA@28:near +extrn __imp__GetLastError@0:near +extrn __imp__ReadFile@20:near +extrn __imp__WriteFile@20:near +extrn _strstr:near +extrn _strchr:near +END diff --git a/uudecode/DEVIOCTL.INC b/uudecode/DEVIOCTL.INC new file mode 100644 index 0000000..2d566f1 --- /dev/null +++ b/uudecode/DEVIOCTL.INC @@ -0,0 +1,59 @@ +;************************************************************************************* +; MODULE: DEVIOCTL.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE RELATED CONSTANTS +;************************************************************************************* +FILE_SHARE_READ equ 00000001h +FILE_SHARE_WRITE equ 00000002h +FILE_SHARE_DELETE equ 00000004h +FILE_ATTRIBUTE_READONLY equ 00000001h +FILE_ATTRIBUTE_HIDDEN equ 00000002h +FILE_ATTRIBUTE_SYSTEM equ 00000004h +FILE_ATTRIBUTE_DIRECTORY equ 00000010h +FILE_ATTRIBUTE_ARCHIVE equ 00000020h +FILE_ATTRIBUTE_NORMAL equ 00000080h +FILE_ATTRIBUTE_TEMPORARY equ 00000100h +FILE_ATTRIBUTE_COMPRESSED equ 00000800h +FILE_ATTRIBUTE_OFFLINE equ 00001000h +CREATE_NEW equ 00000001h +CREATE_ALWAYS equ 00000002h +OPEN_EXISTING equ 00000003h +OPEN_ALWAYS equ 00000004h +TRUNCATE_EXISTING equ 00000005h +DELETE equ 00010000h +READ_CONTROL equ 00020000h +WRITE_DAC equ 00040000h +WRITE_OWNER equ 00080000h +SYNCHRONIZE equ 00100000h +STANDARD_RIGHTS_REQUIRED equ 000F0000h +STANDARD_RIGHTS_READ equ READ_CONTROL +STANDARD_RIGHTS_WRITE equ READ_CONTROL +STANDARD_RIGHTS_EXECUTE equ READ_CONTROL +STANDARD_RIGHTS_ALL equ 001F0000h +SPECIFIC_RIGHTS_ALL equ 0000FFFFh +FILE_READ_DATA equ 0001h +FILE_LIST_DIRECTORY equ 0001h +FILE_WRITE_DATA equ 0002h +FILE_ADD_FILE equ 0002h +FILE_APPEND_DATA equ 0004h +FILE_ADD_SUBDIRECTORY equ 0004h +FILE_CREATE_PIPE_INSTANCE equ 0004h +FILE_READ_EA equ 0008h +FILE_WRITE_EA equ 0010h +FILE_EXECUTE equ 0020h +FILE_TRAVERSE equ 0020h +FILE_DELETE_CHILD equ 0040h +FILE_READ_ATTRIBUTES equ 0080h +FILE_WRITE_ATTRIBUTES equ 0100h +FILE_ALL_ACCESS equ STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 1FFh +FILE_GENERIC_READ equ STANDARD_RIGHTS_READ or FILE_READ_DATA or FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE +FILE_GENERIC_WRITE equ STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE +FILE_GENERIC_EXECUTE equ STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or FILE_EXECUTE or SYNCHRONIZE +GENERIC_READ equ 80000000h +GENERIC_WRITE equ 40000000h +GENERIC_EXECUTE equ 20000000h +GENERIC_ALL equ 10000000h + + + diff --git a/uudecode/Decode.cpp b/uudecode/Decode.cpp new file mode 100644 index 0000000..e69de29 diff --git a/uudecode/Decode64.obj b/uudecode/Decode64.obj new file mode 100644 index 0000000..f7e1795 Binary files /dev/null and b/uudecode/Decode64.obj differ diff --git a/uudecode/FILEINFO.HPP b/uudecode/FILEINFO.HPP new file mode 100644 index 0000000..9f9c969 --- /dev/null +++ b/uudecode/FILEINFO.HPP @@ -0,0 +1,27 @@ +#ifndef _UUDECODE_FILEINFO_HPP_ +#define _UUDECODE_FILEINFO_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +class FileInfo +{ +public: + FileInfo(void); + ~FileInfo(); // cannot be virtual + enum{MaxLength=0x800}; + BYTE mBuffer[MaxLength]; + HANDLE mhFileHandle; + DWORD mBufferIndex; + DWORD mlpBufferPointer; +}; + +FileInfo::FileInfo(void) +: mhFileHandle(INVALID_HANDLE_VALUE), mBufferIndex(0), mlpBufferPointer(0) +{ +} + +FileInfo::~FileInfo() +{ +} +#endif \ No newline at end of file diff --git a/uudecode/FILEIO.MAK b/uudecode/FILEIO.MAK new file mode 100644 index 0000000..9e9734d --- /dev/null +++ b/uudecode/FILEIO.MAK @@ -0,0 +1,243 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=fileio - Win32 Debug +!MESSAGE No configuration specified. Defaulting to fileio - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "fileio - Win32 Release" && "$(CFG)" != "fileio - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Fileio.mak" CFG="fileio - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "fileio - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "fileio - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "fileio - Win32 Debug" +RSC=rc.exe +MTL=mktyplib.exe +CPP=cl.exe + +!IF "$(CFG)" == "fileio - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Fileio.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(OUTDIR)\Fileio.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Fileio.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fileio.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Fileio.pdb" /machine:I386 /out:"$(OUTDIR)/Fileio.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "..\exe\mscommon.lib" + +"$(OUTDIR)\Fileio.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Fileio.exe" + +CLEAN : + -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\vc40.idb" + -@erase "$(INTDIR)\vc40.pdb" + -@erase "$(OUTDIR)\Fileio.exe" + -@erase "$(OUTDIR)\Fileio.ilk" + -@erase "$(OUTDIR)\Fileio.pdb" + -@erase ".\cfile.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/Fileio.pch" /YX /Fo"$(INTDIR)/"\ + /Fd"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fileio.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:yes\ + /pdb:"$(OUTDIR)/Fileio.pdb" /debug /machine:I386 /out:"$(OUTDIR)/Fileio.exe" +LINK32_OBJS= \ + "$(INTDIR)\main.obj" \ + "..\exe\mscommon.lib" \ + ".\cfile.obj" + +"$(OUTDIR)\Fileio.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "fileio - Win32 Release" +# Name "fileio - Win32 Debug" + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "fileio - Win32 Release" + +!ELSEIF "$(CFG)" == "fileio - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/FILEIO.MDP b/uudecode/FILEIO.MDP new file mode 100644 index 0000000..bde6829 Binary files /dev/null and b/uudecode/FILEIO.MDP differ diff --git a/uudecode/MAIN.CPP b/uudecode/MAIN.CPP new file mode 100644 index 0000000..1b5f078 --- /dev/null +++ b/uudecode/MAIN.CPP @@ -0,0 +1,154 @@ +#include +#include +#include +#include + +class FileInfo; + +extern "C" +{ + int FileOpen(char *pPathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes); + int FileClose(FileInfo *pFileInfo); + int FileRead(FileInfo *pFileInfo,BYTE *ptrByte); + int FileReadLine(FileInfo *pFileInfo,BYTE *ptrByte); + int FileWriteLine(FileInfo *pFileInfo,BYTE *ptrByte); + int FileFlush(FileInfo *pFileInfo); +} + +class FileInfo +{ +public: + FileInfo(void); + ~FileInfo(); // cannot be virtual + enum{MaxLength=0x800}; + BYTE mBuffer[MaxLength]; + HANDLE mhFileHandle; + DWORD mBufferIndex; + DWORD mlpBufferPointer; +}; + +inline +FileInfo::FileInfo(void) +: mhFileHandle(INVALID_HANDLE_VALUE), mBufferIndex(0), mlpBufferPointer(0) +{ +} + +inline +FileInfo::~FileInfo() +{ +} + +class FileIO +{ +public: + enum Open{CreateNew=CREATE_NEW,CreateAlways=CREATE_ALWAYS,OpenExisting=OPEN_EXISTING, + OpenAlways=OPEN_ALWAYS,TruncateExisting=TRUNCATE_EXISTING}; + enum Share{FileShareRead=FILE_SHARE_READ,FileShareWrite=FILE_SHARE_WRITE,FileShareDelete=FILE_SHARE_DELETE}; + enum Access{GenericRead=GENERIC_READ,GenericWrite=GENERIC_WRITE, + GenericExecute=GENERIC_EXECUTE,GenericAll=GENERIC_ALL}; + enum Attributes{ReadOnly=FILE_ATTRIBUTE_READONLY,Hidden=FILE_ATTRIBUTE_HIDDEN, + System=FILE_ATTRIBUTE_SYSTEM,Directory=FILE_ATTRIBUTE_DIRECTORY, + Archive=FILE_ATTRIBUTE_ARCHIVE,Normal=FILE_ATTRIBUTE_NORMAL, + Temporary=FILE_ATTRIBUTE_TEMPORARY,Compressed=FILE_ATTRIBUTE_COMPRESSED, + Offline=FILE_ATTRIBUTE_OFFLINE}; + int openFile(char *pPathFileName,Access access,Share share,Open open,Attributes attributes); + int closeFile(void); + int readFile(BYTE *ptrByte); + int readLine(BYTE *strLine); + int writeFile(BYTE *strByte); + int flushFile(void); + BOOL isOkay(void)const; +private: + FileInfo mFileInfo; +}; + +inline +int FileIO::openFile(char *pPathFileName,Access access,Share share,Open open,Attributes attributes) +{ + closeFile(); + return !(INVALID_HANDLE_VALUE==(HANDLE)::FileOpen(pPathFileName,&mFileInfo,access,share,open,attributes)); +} + +inline +int FileIO::closeFile(void) +{ + flushFile(); + return ::FileClose(&mFileInfo); +} + +inline +int FileIO::readFile(BYTE *ptrByte) +{ + return ::FileRead(&mFileInfo,ptrByte); +} + +inline +int FileIO::readLine(BYTE *strLine) +{ + return ::FileReadLine(&mFileInfo,strLine); +} + +inline +int FileIO::writeFile(BYTE *strByte) +{ + return ::FileWriteLine(&mFileInfo,strByte); +} + +inline +int FileIO::flushFile(void) +{ + return ::FileFlush(&mFileInfo); +} + +inline +BOOL FileIO::isOkay(void)const +{ + return INVALID_HANDLE_VALUE==mFileInfo.mhFileHandle; +} + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + FileIO openFile; + BYTE ptrByte; + DWORD byteCount; + DWORD elapsedTime; + String strMessage; + char lineString; + +// if(!openFile.openFile(String(lpszCmdLine), +// FileIO::Access(int(FileIO::GenericRead)|int(FileIO::GenericWrite)), +// FileIO::FileShareRead, +// FileIO::OpenExisting, +// FileIO::Normal))return FALSE; + +//#if 0 + if(!openFile.openFile("c:\\smk.lst", + FileIO::Access(int(FileIO::GenericRead)|int(FileIO::GenericWrite)), + FileIO::FileShareWrite, + FileIO::CreateAlways, + FileIO::Normal))return FALSE; + elapsedTime=::GetTickCount(); + for(int lineIndex=0;lineIndex<500000;lineIndex++)openFile.writeFile((BYTE*)"hello there"); + elapsedTime=::GetTickCount()-elapsedTime; + elapsedTime/=1000L; + ::sprintf(strMessage,"%ld bytes read int %ld seconds\n",byteCount,elapsedTime); + ::MessageBox(::GetFocus(),strMessage,(LPSTR)"FileIO",MB_OK); + openFile.closeFile(); +//#endif + +#if 0 + FileHandle logFile; + logFile.open("c:\\smk.lst",FileHandle::ReadWrite,FileHandle::ShareReadWrite,FileHandle::Overwrite); + if(!logFile.isOkay())return FALSE; + elapsedTime=::GetTickCount(); + for(int lineIndex=0;lineIndex<500000;lineIndex++)logFile.writeLine("hello there"); + logFile.flush(); + logFile.close(); + elapsedTime=::GetTickCount()-elapsedTime; + elapsedTime/=1000L; + ::sprintf(strMessage,"%ld bytes read int %ld seconds\n",byteCount,elapsedTime); + ::MessageBox(::GetFocus(),strMessage,(LPSTR)"FileIO",MB_OK); +#endif + return FALSE; +} + diff --git a/uudecode/MASM/CFILE.ASM b/uudecode/MASM/CFILE.ASM new file mode 100644 index 0000000..8f9e374 --- /dev/null +++ b/uudecode/MASM/CFILE.ASM @@ -0,0 +1,83 @@ +;************************************************************************************* +; MODULE: CFILE.ASM DATE: APRIL 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT LAT MODEL +; FUNCTION : BUFFERED FILE FUNCTIONS +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +.CODE + +_FileOpen proc near ; int FileOpen(char *pathFileName,FileInfo *pFileInfo,int access,int share,int open,int attributes) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index + CREATEFILE [ebp+08h],[ebp+10h],[ebp+14h],[ebp+18h],[ebp+1Ch] ; call create file + mov esi,[ebp+0Ch] ; move FileInfo ptr to esi + mov [FileInfo ptr [esi]].FileInfo@@mhFileHandle,eax ; store handle + pop esi ; restore source index + pop ebp ; restore previous frame + retn ; return near to caller +_FileOpen endp + +_FileClose proc near + push ebp ; save prior frame + mov esp,esp ; create new stack frame + push esi ; save source index register + mov esi,[ebp+0Ch] ; move FileInfo ptr to esi + cmp [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; check for valid handle + je @@FileCloseEnd ; handle is not valid + CLOSEHANDLE [FileInfo ptr [esi]].FileInfo@@mhFileHandle ; close handle + mov [FileInfo ptr [esi]].FileInfo@@mhFileHandle,INVALID_HANDLE ; set handle to invalid state +@@FileCloseEnd: ; end sync address + pop esi ; restore source index + pop ebp ; restore prior stack frame + retn ; return near to caller +_FileClose endp + +;FCLOSE MACRO sFileInfo +; LOCAL @@FCLOSEend +; cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE +; je @@FCLOSEend +; CLOSEHANDLE sFileInfo.FileInfo@@mhFileHandle +; mov sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE +;@@FCLOSEend: +;ENDM + +_FileRead proc near + push ebp + mov esp,esp + pop ebp + retn +_FileRead endp +_FileReadLine proc near + push ebp + mov esp,esp + pop ebp + retn +_FileReadLine endp + +_FileWrite proc near + push ebp + mov esp,esp + pop ebp + retn +_FileWrite endp + +_FileFlush proc near + push ebp + mov esp,esp + pop ebp + retn +_FileFlush endp + +public _FileOpen +public _FileClose +public _FileRead +public _FileReadLine +public _FileWrite +public _FileFlush +END diff --git a/uudecode/MASM/DECODE.MAK b/uudecode/MASM/DECODE.MAK new file mode 100644 index 0000000..4e76c02 --- /dev/null +++ b/uudecode/MASM/DECODE.MAK @@ -0,0 +1,228 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=decode - Win32 Debug +!MESSAGE No configuration specified. Defaulting to decode - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "decode - Win32 Release" && "$(CFG)" != "decode - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "decode.mak" CFG="decode - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "decode - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "decode - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "decode - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "decode - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : + +CLEAN : + -@erase + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/decode.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/decode.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/decode.lib" +LIB32_OBJS= \ + + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\..\exe\msuudc.lib" + +CLEAN : + -@erase "..\..\exe\msuudc.lib" + -@erase ".\cfile.obj" + -@erase ".\Decode64.obj" + -@erase ".\Uudecode.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/decode.pch" /YX"windows.h" /Fo"$(INTDIR)/"\ + /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/decode.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\exe\msuudc.lib" +LIB32_FLAGS=/nologo /out:"..\..\exe\msuudc.lib" +LIB32_OBJS= \ + ".\cfile.obj" \ + ".\Decode64.obj" \ + ".\Uudecode.obj" + +"..\..\exe\msuudc.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "decode - Win32 Release" +# Name "decode - Win32 Debug" + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Uudecode.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Decode64.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/MASM/DECODE64.ASM b/uudecode/MASM/DECODE64.ASM new file mode 100644 index 0000000..9fcafa7 --- /dev/null +++ b/uudecode/MASM/DECODE64.ASM @@ -0,0 +1,233 @@ +;************************************************************************************* +; MODULE: DECODE64.ASM DATE: JANUARY 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : BASE64 DECODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +.DATA + inputFile FileInfo <> + outputFile FileInfo <> + lineData DB 400h DUP(0) + szDefaultOutputPathFileName DB 'IMAGE.JPG',00h + szOutputPathFileName DB 0FFh DUP(0) + szFileNameLiteral DB 'filename=',00h + szOutBytes DB 04h DUP(0) + szInputPathFileName DD ? + szBase64ID DB '/9j/',00h + szExtension DB '.JPG',00H + szBase64Vector DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',00h + szBase64End DB '---',00h + num DD ? + lineLength DD ? + itemIndex DD ? + itemCount DD ? + numIndex DD ? + valueItem DD ? +.CODE +_decodeBase64 proc near ; WORD decodeBase64(const char *szPathFileName,char *szPathDecodeFileName) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov itemCount,0000h ; initialize decoded counter to zero + push dword ptr[ebp+8] ; save pathFileName + pop szInputPathFileName ; restore into inputPathFileName + cmp szInputPathFileName,0000h ; is the file na null + je @@error ; if so then we've got an error + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp inputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; do we have a valid handle ? + je @@error ; if the handle is invalid then we've got an error + call _outputName ; get output file name + STRCPY [ebp+0Ch],offset szOutputPathFileName ; copy szOutputPathFileName to supplied buffer +@@search: ; search sync address + FGETS inputFile,lineData ; get input line + cmp eax,0000h ; did we read anything + je @@end ; if not we're done + STRSTR lineData,szFileNameLiteral ; look for "filename=" literal + cmp eax,0000h ; did we find it + jne @@nameFile ; if so then extract the filename + STRNCMP szBase64ID,lineData ; compare line to base64 identifier + cmp eax,0001h ; if we've got it then we start decoding + je @@beginDecode ; jump to decode handler + jmp @@search ; keep going +@@nameFile: ; nameFile sync address + push eax ; save address of filename literal + push offset szOutputPathFileName ; save address of filename buffer + call _nameFile ; extract the file name + add esp,08h ; reset stack frame + jmp @@search ; keep going +@@beginDecode: ; begin decode sync address + FOPEN offset szOutputPathFileName,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL +@@continueDecode: ; continue decode sync address + STRLEN lineData ; get length of lineData + dec eax ; decrement line length + mov lineLength,eax ; move line length into lineLength + mov itemIndex,0000h ; set itemIndex to zero +@@itemLoop: ; itemLoop sync address + mov valueItem,0000h ; set valueItem to zero + mov esi,offset lineData ; move ptr lineData to esi register + add esi,itemIndex ; add itemIndex to address + cmp byte ptr[esi+02h],'=' ; is pChar[2] equal to '='? + je @@assignOne ; if so then num=1 + cmp byte ptr[esi+03h],'=' ; else if pChar[3]='=' + je @@assignTwo ; then num=2 + mov num,0003h ; otherwise num=3 + jmp @@assignContinue ; continue +@@assignOne: ; assignment sync address + mov num,0001h ; assign 1 to num + jmp @@assignContinue ; continue +@@assignTwo: ; assignment sync address + mov num,0002h ; assign two to num + jmp @@assignContinue ; continue +@@assignContinue: ; end assignment sync address + mov numIndex,0000h ; set numIndex to zero +@@numLoop: ; numIndex loop sync address + xor eax,eax ; clear out eax + mov edi,numIndex ; move numIndex into destination index + mov al,byte ptr[esi+edi] ; get the byte at pChar[numIndex] + STRCHR szBase64Vector,eax ; ::strchar(szBase64Vector,pChar[numIndex]) + cmp eax,0000h ; did we find the token + je @@end ; if not then we've got an error + mov edi,eax ; move address of found token to edi (pTok) + sub edi,offset szBase64Vector ; perform (pTok-szBase64Vector) result to edi + mov eax,0003h ; move 3 into eax + sub eax,numIndex ; perform (3-numIndex) result to eax + mov edx,0006h ; move 6 into edx + imul eax,edx ; perform (3-numIndex)*6 result to eax + mov cl,al ; move shift value into cl register + shl edi,cl ; perform (pTok-smszVec)<<((3-numIndex)*6) result to edi + add valueItem,edi ; valueItem+=(pTok-smszVec)<<((3-numIndex)*6) + inc numIndex ; increment numIndex + mov eax,numIndex ; move numIndex into eax register + cmp eax,num ; compare numIndex to num + jle @@numLoop ; loop through <= operation + mov numIndex,0002h ; set numIndex to 2 +@@nextNumLoop: ; next numLoop sync address + mov esi,offset szOutBytes ; move szOutBytes address into esi + mov edi,numIndex ; move numIndex into edi + mov eax,valueItem ; move valueItem into eax register + and eax,000000FFh ; apply bit mask + mov byte ptr[esi+edi],al ; set byte in szOutBytes + shr valueItem,08h ; shift valueItem right 8 bytes + dec numIndex ; decrement numIndex + cmp numIndex,0000h ; compare numIndex to zero + jge @@nextNumLoop ; if >=0 keep going + mov esi,offset szOutBytes ; move szOutBytes to esi + xor edi,edi ; clear edi +@@writeLoop: ; writeLoop sync address + FWRITE outputFile,byte ptr[esi+edi] ; write out the byte + inc edi ; increment edi + cmp edi,num ; compare edi to num + jl @@writeLoop ; if it's less then keep going + add itemIndex,0004h ; increment itemIndex by four + mov eax,itemIndex ; move itemIndex to eax + cmp eax,lineLength ; compare itemIndex to lineLength + jl @@itemLoop ; if it's less that keep going + FGETS inputFile,lineData ; get another line + cmp eax,0000h ; did we get a line? + je @@end ; if not then we're done + STRNCMP lineData,szBase64End ; look for trailer signature + cmp eax,0001h ; if we found it then another image may follow + je @@prepNewImage ; flush and close current output file + jmp @@continueDecode ; otherwise keep going +@@prepNewImage: ; prepNewImage sync address + inc itemCount ; increment decoded counter + FFLUSH outputFile ; flush output file + CLOSEHANDLE outputFile.FileInfo@@mhFileHandle ; close output file + mov outputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; invalidate the handle + jmp @@search ; try to decode another image +@@end: ; end sync address + cmp outputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; is this a valid handle + je @@closePrimary ; is handle is invalid, just close the input file + FFLUSH outputFile ; flush the output file + CLOSEHANDLE outputFile.FileInfo@@mhFileHandle ; close output file +@@closePrimary: ; close primary sync address + CLOSEHANDLE inputFile.FileInfo@@mhFileHandle ; close input file +@@error: ; error sync address + mov eax,itemCount ; move decoded count to eax register + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_decodeBase64 endp +_nameFile proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov edi,[ebp+8] ; move dest string to destination index register + mov esi,[ebp+0Ch] ; move source string to source index register +@@NAMEFILEquoteLoop: ; first quote loop control + mov al,byte ptr[esi] ; move byte into al + cmp al,00h ; is it null? + je @@NAMEFILEerror ; if it's null then we've got an error + cmp al,'"' ; is it the first quote ? + je @@NAMEFILEreadFile ; if so then get the filename + inc esi ; increment along esi + jmp @@NAMEFILEquoteLoop ; keep going +@@NAMEFILEreadFile: ; read file name sync address + inc esi ; skip past the first quote + mov al,byte ptr[esi] ; read from file name + cmp al,'"' ; is the byte the closing quote? + je @@NAMEFILEreadEnd ; if so then we're done + cmp al,00h ; is the byte a null byte? + je @@NAMEFILEreadEnd ; if so then we're done + mov byte ptr[edi],al ; store the byte in destination + inc edi ; increment along destination + jmp @@NAMEFILEreadFile ; keep going +@@NAMEFILEreadEnd: ; read end sync address + mov byte ptr[edi],00h ; null terminate the string + mov eax,0001h ; set return code + jmp @@NAMEFILEend ; we're done +@@NAMEFILEerror: ; error sync address + xor eax,eax ; set error return +@@NAMEFILEend: ; end proc sync address + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_nameFile endp +_outputName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,szInputPathFileName ; set esi to input name address + mov edi,offset szOutputPathFileName ; set edi to output name address + xor ecx,ecx ; clear ecx for indexing +@@copyLoop: ; copy loop sync address + mov al,[esi+ecx] ; get byte from source to al + cmp al,00h ; is this a null byte + je @@copyDone ; if so then we're done copying + mov byte ptr[edi],al ; store the byte into destination + inc edi ; increment destination + inc ecx ; increment source index + jmp @@copyLoop ; loop through the string +@@copyDone: ; copy done sync address + mov byte ptr[edi],00h ; set null terminator +ifdef TASM + STRCHR szOutputPathFileName,'.' ; look for extension marker +else + STRCHR offset szOutputPathFileName,'.' ; look for extension marker +endif + cmp eax,0000h ; did we find it? + je @@nameError ; if not then we set output name to default + mov byte ptr[eax],0000h ; otherwise terminate the string + STRCAT szOutputPathFileName,szExtension ; cat the string with ".jpg" + jmp @@outputDone ; we're done +@@nameError: ; nameError sync address + STRLEN szDefaultOutputPathFileName ; get the length of the default file name + MEMCPY offset szOutputPathFileName,offset szDefaultOutputPathFileName,eax ; set output file name to default +@@outputDone: ; outputDone sync address + pop edi ; restore destination index + pop esi ; restore source index + pop ebp ; restore previous stack frame + retn ; return near to caller +_outputName endp +public _decodeBase64 +END diff --git a/uudecode/MASM/DEVIOCTL.INC b/uudecode/MASM/DEVIOCTL.INC new file mode 100644 index 0000000..2d566f1 --- /dev/null +++ b/uudecode/MASM/DEVIOCTL.INC @@ -0,0 +1,59 @@ +;************************************************************************************* +; MODULE: DEVIOCTL.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE RELATED CONSTANTS +;************************************************************************************* +FILE_SHARE_READ equ 00000001h +FILE_SHARE_WRITE equ 00000002h +FILE_SHARE_DELETE equ 00000004h +FILE_ATTRIBUTE_READONLY equ 00000001h +FILE_ATTRIBUTE_HIDDEN equ 00000002h +FILE_ATTRIBUTE_SYSTEM equ 00000004h +FILE_ATTRIBUTE_DIRECTORY equ 00000010h +FILE_ATTRIBUTE_ARCHIVE equ 00000020h +FILE_ATTRIBUTE_NORMAL equ 00000080h +FILE_ATTRIBUTE_TEMPORARY equ 00000100h +FILE_ATTRIBUTE_COMPRESSED equ 00000800h +FILE_ATTRIBUTE_OFFLINE equ 00001000h +CREATE_NEW equ 00000001h +CREATE_ALWAYS equ 00000002h +OPEN_EXISTING equ 00000003h +OPEN_ALWAYS equ 00000004h +TRUNCATE_EXISTING equ 00000005h +DELETE equ 00010000h +READ_CONTROL equ 00020000h +WRITE_DAC equ 00040000h +WRITE_OWNER equ 00080000h +SYNCHRONIZE equ 00100000h +STANDARD_RIGHTS_REQUIRED equ 000F0000h +STANDARD_RIGHTS_READ equ READ_CONTROL +STANDARD_RIGHTS_WRITE equ READ_CONTROL +STANDARD_RIGHTS_EXECUTE equ READ_CONTROL +STANDARD_RIGHTS_ALL equ 001F0000h +SPECIFIC_RIGHTS_ALL equ 0000FFFFh +FILE_READ_DATA equ 0001h +FILE_LIST_DIRECTORY equ 0001h +FILE_WRITE_DATA equ 0002h +FILE_ADD_FILE equ 0002h +FILE_APPEND_DATA equ 0004h +FILE_ADD_SUBDIRECTORY equ 0004h +FILE_CREATE_PIPE_INSTANCE equ 0004h +FILE_READ_EA equ 0008h +FILE_WRITE_EA equ 0010h +FILE_EXECUTE equ 0020h +FILE_TRAVERSE equ 0020h +FILE_DELETE_CHILD equ 0040h +FILE_READ_ATTRIBUTES equ 0080h +FILE_WRITE_ATTRIBUTES equ 0100h +FILE_ALL_ACCESS equ STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 1FFh +FILE_GENERIC_READ equ STANDARD_RIGHTS_READ or FILE_READ_DATA or FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE +FILE_GENERIC_WRITE equ STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE +FILE_GENERIC_EXECUTE equ STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or FILE_EXECUTE or SYNCHRONIZE +GENERIC_READ equ 80000000h +GENERIC_WRITE equ 40000000h +GENERIC_EXECUTE equ 20000000h +GENERIC_ALL equ 10000000h + + + diff --git a/uudecode/MASM/Decode.bak b/uudecode/MASM/Decode.bak new file mode 100644 index 0000000..4e76c02 --- /dev/null +++ b/uudecode/MASM/Decode.bak @@ -0,0 +1,228 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=decode - Win32 Debug +!MESSAGE No configuration specified. Defaulting to decode - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "decode - Win32 Release" && "$(CFG)" != "decode - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "decode.mak" CFG="decode - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "decode - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "decode - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "decode - Win32 Debug" +CPP=cl.exe + +!IF "$(CFG)" == "decode - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : + +CLEAN : + -@erase + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/decode.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/decode.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/decode.lib" +LIB32_OBJS= \ + + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\..\exe\msuudc.lib" + +CLEAN : + -@erase "..\..\exe\msuudc.lib" + -@erase ".\cfile.obj" + -@erase ".\Decode64.obj" + -@erase ".\Uudecode.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"$(INTDIR)/decode.pch" /YX"windows.h" /Fo"$(INTDIR)/"\ + /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/decode.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\exe\msuudc.lib" +LIB32_FLAGS=/nologo /out:"..\..\exe\msuudc.lib" +LIB32_OBJS= \ + ".\cfile.obj" \ + ".\Decode64.obj" \ + ".\Uudecode.obj" + +"..\..\exe\msuudc.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "decode - Win32 Release" +# Name "decode - Win32 Debug" + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Uudecode.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Decode64.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/MASM/Decode.dsp b/uudecode/MASM/Decode.dsp new file mode 100644 index 0000000..92b40c2 --- /dev/null +++ b/uudecode/MASM/Decode.dsp @@ -0,0 +1,150 @@ +# Microsoft Developer Studio Project File - Name="decode" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=decode - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Decode.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Decode.mak" CFG="decode - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "decode - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "decode - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "decode - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX"windows.h" /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\..\exe\msuudc.lib" + +!ENDIF + +# Begin Target + +# Name "decode - Win32 Release" +# Name "decode - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\cfile.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Decode64.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Uudecode.asm + +!IF "$(CFG)" == "decode - Win32 Release" + +!ELSEIF "$(CFG)" == "decode - Win32 Debug" + +# Begin Custom Build +InputPath=.\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff $(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/uudecode/MASM/Decode.dsw b/uudecode/MASM/Decode.dsw new file mode 100644 index 0000000..5bd65e8 --- /dev/null +++ b/uudecode/MASM/Decode.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "decode"=.\Decode.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/uudecode/MASM/Decode.mdp b/uudecode/MASM/Decode.mdp new file mode 100644 index 0000000..8401dd1 Binary files /dev/null and b/uudecode/MASM/Decode.mdp differ diff --git a/uudecode/MASM/Openfile.inc b/uudecode/MASM/Openfile.inc new file mode 100644 index 0000000..e56f6c9 --- /dev/null +++ b/uudecode/MASM/Openfile.inc @@ -0,0 +1,166 @@ +;************************************************************************************* +; MODULE: OPENFILE.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE HANDLING MACROS +;************************************************************************************* +HANDLE STRUC +PHANDLE TYPEDEF FAR PTR HANDLE + HANDLE@@mHandle DD ? +HANDLE ENDS + +INVALID_HANDLE equ 0FFFFFFFFh + +CREATEFILE MACRO pathFileName,access,share,open,attribute + push 0000h ; save handle to template (null) + push attribute ; save attributes + push open ; save creation flags + push 0000h ; save security attributes + push share ; save share mode + push access ; save acess mode + push pathFileName ; save pathFileName + call dword ptr __imp__CreateFileA@28 ; call create +ENDM + +READFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesRead on stack + mov eax,esp ; move bytesRead address to eax + push 0000h ; save overlapped structure address + push eax ; save pointer to bytesRead + push sizeBuffer ; save length of buffer + push offset szBuffer ; save address of read buffer + push hFileHandle ; save file handle + call dword ptr __imp__ReadFile@20 ; call read + mov eax,[esp] ; move bytesRead value to eax + add esp,04h ; remove bytesRead variable from stack +ENDM + +WRITEFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesWritten variable on stack + mov eax,esp ; move bytesWritten address to eax + push 0000h ; save overlapped structure address + push eax ; save bytesWritten address + push sizeBuffer ; save write length + push offset szBuffer ; save address of write buffer + push hFileHandle ; save file handle + call dword ptr __imp__WriteFile@20 ; call write + mov eax,[esp] ; move number of bytes written to eax + add esp,04h ; remove bytesWritten variable from stack +ENDM + +CLOSEHANDLE MACRO handle + push handle ; save file handle + call dword ptr __imp__CloseHandle@4 ; call close +ENDM + +FOPEN MACRO pathFileName,sFileInfo,access,share,open,attribute + CREATEFILE pathFileName,access,share,open,attribute + mov sFileInfo.FileInfo@@mhFileHandle,eax +ENDM + +FCLOSE MACRO sFileInfo + LOCAL @@FCLOSEend + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FCLOSEend + CLOSEHANDLE sFileInfo.FileInfo@@mhFileHandle + mov sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE +@@FCLOSEend: +ENDM + +FREAD MACRO sFileInfo,ptrByte + LOCAL @@FREADreadError,@@FREADsimpleRead,@@FREADdone + cmp sFileInfo.FileInfo@@mBufferIndex,00h ; is buffer index zero + jne @@FREADsimpleRead ; if not then just grab next byte + READFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; otherwise we fill the read buffer + cmp eax,0000h ; did we read any data ? + je @@FREADreadError ; if not then we're done + mov sFileInfo.FileInfo@@mBufferIndex,eax ; move number of bytes read to buffer index + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer + jmp @@FREADsimpleRead ; grab next byte +@@FREADreadError: ; read error sync address + xor eax,eax ; set return code + jmp @@FREADdone ; we're done +@@FREADsimpleRead: ; simple read sync address + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov al,byte ptr[eax] ; move byte value to al + mov byte ptr[ptrByte],al ; move byte value to user buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment along lpBufferPointer + dec sFileInfo.FileInfo@@mBufferIndex ; decrement the buffer index + mov eax,01h ; set the return code +@@FREADdone: ; done reading sync +ENDM + +FWRITE MACRO sFileInfo,ptrByte + LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer + cmp sFileInfo.FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength + jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; other wise + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEsimpleWrite: ; simple write sync address + cmp sFileInfo.FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? + jne @@FWRITEuseBuffer ; if not then just use it + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEuseBuffer: ; use buffer sync address + mov cl,byte ptr[ptrByte] ; move byte to write to cl + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov byte ptr[eax],cl ; move byte into buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment buffer pointer + inc sFileInfo.FileInfo@@mBufferIndex ; increment buffer index + mov eax,01h ; set return code +ENDM + +FFLUSH MACRO sFileInfo +LOCAL @@FFLUSHexit + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FFLUSHexit + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,sFileInfo.FileInfo@@mBufferIndex ; write buffer to disk + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FFLUSHexit: +ENDM + +FGETS MACRO sFileInfo,szBuffer + LOCAL @@FGETScont,@@FGETexit,@@FGETsetError,@@FGETScrlf,@@FGETlf + push esi ; save source index register + mov esi,offset szBuffer ; move address of buffer into esi +@@FGETScont: ; loop control + FREAD sFileInfo,esi ; read a byte + cmp eax,0000h ; was our read successful? + je @@FGETexit ; if not we're done + cmp byte ptr[esi],0Dh ; is the byte a carriage return? + je @@FGETScrlf ; if yes then jump to handler + cmp byte ptr[esi],0Ah ; is the byte a lone linefeed ? + je @@FGETlf ; if so then handle it + inc esi ; increment along esi + jmp @@FGETScont ; keep reading +@@FGETlf: ; handle the linefeed + jmp @@FGETexit ; we're done here +@@FGETScrlf: ; carriage return control + mov byte ptr[esi],00h ; move null into line data + sub esp,04h ; create temp var on stack + mov esi,esp ; esi points to temp var + FREAD sFileInfo,esi ; read line-feed into temp var + add esp,04h ; restore stack +@@FGETexit: ; exit sync address + pop esi ; restore source index register +ENDM + +FileInfo STRUC + MaxLength equ 800h + FileInfo@@mhFileHandle HANDLE + FileInfo@@mszBuffer DB MaxLength DUP(0) + FileInfo@@mBufferIndex DD (0) + FileInfo@@mlpBufferPointer DD (0) +FileInfo ENDS + +extrn __imp__WriteFile@20:near +extrn __imp__CloseHandle@4:near +extrn __imp__CreateFileA@28:near +extrn __imp__GetLastError@0:near +extrn __imp__ReadFile@20:near + diff --git a/uudecode/MASM/STRING.INC b/uudecode/MASM/STRING.INC new file mode 100644 index 0000000..955c939 --- /dev/null +++ b/uudecode/MASM/STRING.INC @@ -0,0 +1,122 @@ +;************************************************************************************* +; MODULE: STRING.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : STRING RELATED MACROS +;************************************************************************************* +STRSTR MACRO szStringOne,szStringTwo + push offset szStringTwo ; save string one + push offset szStringOne ; save string two + call _strstr ; call standard library strstr + add esp,08h ; reset stack frame +ENDM + +STRCHR MACRO szString,charByte + push charByte ; save charByte + push offset szString ; save string + call _strchr ; call standard library strchr + add esp,08h ; reset stack frame +ENDM + +STRCAT MACRO szDstString,szSrcString + push offset szSrcString ; save source string + push offset szDstString ; save destination string + call _strcat ; call standard library strcat + add esp,08h ; reset stack frame +ENDM + +STRLEN MACRO szData + push edi ; save destination index register + push ecx ; save ecx register + mov edi,offset szData ; get string to destination index register + mov ecx,0FFFFh ; move 65535 to ecx register + xor eax,eax ; clear eax register + repnz scasb ; scan string + mov eax,0FFFFh ; move 65535 to eax + sub eax,ecx ; subtract number of bytes scanned + dec eax ; decrement result + pop ecx ; restore ecx register + pop edi ; restore destination index register +ENDM + +MEMCPY MACRO szDstData,szSrcData,lengthCopy + push esi ; save source index register + push edi ; save destination index register + mov esi,szSrcData ; move source data to source index register + mov edi,szDstData ; move destination data to destination index register + mov ecx,lengthCopy ; move number of bytes to copy to ecx register + rep movsb ; copy data + pop edi ; restore destination index register + pop esi ; restore source index register +ENDM + +STRCPY MACRO szDstData,szSrcData + STRLEN szSrcData ; get length of source string to eax + MEMCPY szDstData,szSrcData,eax ; copy source into destination + push esi ; save source index register + mov esi,szDstData ; move destination string into esi + mov byte ptr[esi+eax],00h ; null terminate the string + pop esi ; restore source index register +ENDM + +STRCMP MACRO szStringOne,szStringTwo +LOCAL @@STRCMPnotEqual,@@STRCMPequal,@@STRCMPexit + push ecx ; save ecx register + push edi ; save destination index register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare lengths + jne @@STRCMPnotEqual ; if lengths differ, strings are not equal +@@STRCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string two + cmp al,byte ptr[edi] ; compare with byte from string one + jne @@STRCMPnotEqual ; if bytes differ then we're done + loop @@STRCMPloop ; iterate through string length +@@STRCMPequal: ; equality control + mov eax,0001h ; set return code + jmp @@STRCMPexit ; we're done +@@STRCMPnotEqual: ; inequality control + xor eax,eax ; set return code +@@STRCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM + +STRNCMP MACRO szStringOne,szStringTwo +LOCAL @@STRNCMPloop,@@STRNCMPequal,@@STRNCMPnotEqual,@@STRNCMPexit + push ecx ; save ecx register + push edi ; save edi register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare the lengths + jle @@STRNCMPloop ; string one is less equal to string two + mov ecx,eax ; string two is less, so use it's length +@@STRNCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string one + cmp al,byte ptr[edi] ; compare with byte from string two + jne @@STRNCMPnotEqual ; if byte are unequal, strings are unequal + inc edi ; increment along string two + inc esi ; increment along string one + loop @@STRNCMPloop ; keep going +@@STRNCMPequal: ; string equal sync address + mov eax,0001h ; set return code + jmp @@STRNCMPexit ; we're done +@@STRNCMPnotEqual: ; string unequal sync address + xor eax,eax ; set return code +@@STRNCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM +extrn _strstr:near +extrn _strchr:near +extrn _strcat:near diff --git a/uudecode/MASM/UUENCODE.ASM b/uudecode/MASM/UUENCODE.ASM new file mode 100644 index 0000000..dd9077e --- /dev/null +++ b/uudecode/MASM/UUENCODE.ASM @@ -0,0 +1,270 @@ +;************************************************************************************* +; MODULE: UUENCODE.ASM DATE: OCTOBER 9,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT LAT MODEL +; FUNCTION : UUENCODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc + +DECODEBYTE MACRO index,offset + mov al,byte ptr [index+offset] ; get byte at index register + offset + sub al,' ' ; subtract space + and al,3Fh ; and with 3Fh +ENDM + +.DATA + inputFile FileInfo <> + outputFile FileInfo <> + status DD (0) + szInputPathFileName DD ? + +; szBeginLine DB 'begin ',0000h +; szEndLine DB 'end',0000h +; szLineData DB 400h DUP(0) +; numItem DB (0) +; charByte DB (0) +; szOutputPathFileName DB 0FFh DUP(0) +.CODE +_uuencode proc near ; void uuencode(char *szInputPathFileName) + push ebp ; save stack frame + mov ebp,esp ; create new stack frame + push esi ; save source index register + push edi ; save destination index register + push dword ptr[ebp+08h] ; save inputPathFileName + pop szInputPathFileName ; restore into szInputPathFileName + cmp szInputPathFileName,0000h ; is the file name null + je @@errorExit ; if so then we're done + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE + je @@errorExit + + call _getUUEFileName + + +@@errorExit: ; error exit sync address + mov eax,status ; set return code + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous frame + retn ; return near to caller +_uuencode endp + + +_getUUEFileName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + mov esi,szInputPathFileName ; move input file name to esi +; STRCHR szInputPathFileName,'.' + push '.' + push szInputPathFileName + call _strchr + add esp,08h + + + + pop ebp ; restore stack frame + retn ; return near to caller +_getUUEFileName endp + + +if 0 +_getOutputFileName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szLineData ; move input line address into source index + mov edi,offset szOutputPathFileName ; move output file name buffer into destination index + xor ecx,ecx ; clear ecx register for counting +@@munchLoop: ; munch loop sync address + mov al,byte ptr[esi] ; get byte from input line + inc esi ; increment esi along input line + cmp al,' ' ; did we read a space + jne @@munchLoop ; if not then keep reading + inc ecx ; increment space counter + cmp ecx,0002h ; is this the second space + jne @@munchLoop ; if not then keep reading +@@copyLoop: ; copy loop sync address + mov al,byte ptr[esi] ; get source byte into al register + mov byte ptr[edi],al ; copy byte into destination + inc esi ; increment along source line + inc edi ; increment along destination + cmp al,0000h ; compare input byte to zero + jne @@copyLoop ; if it's not null then keep going + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_getOutputFileName endp +endif + + + + + +if 0 + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push dword ptr[ebp+08h] ; save inputPathFileName + pop szInputPathFileName ; restore into szInputPathFileName + cmp szInputPathFileName,0000h ; is the file name null + je @@errorExit ; if so then we're done + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE + je @@errorExit + +@@munchLoop: + FGETS inputFile,szLineData ; read a line + cmp eax,0000h ; did the read succeed ? + je @@endRead ; if not then we're done + STRNCMP szBeginLine,szLineData ; compare line to signature + cmp eax,0001h ; did we find the signature + jne @@munchLoop ; if not then keep reading + call _getOutputFileName ; get output file name + FOPEN offset szOutputPathFileName,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE ; was there a problem creating the output file + je @@endRead ; if so then we're done +@@readLoop: ; read loop sync address + mov esi,offset szLineData ; assign input line address to esi + FGETS inputFile,szLineData ; read an input line + cmp eax,0000h ; check for read error + je @@endDecode ; if there was an error, then we're done + xor eax,eax ; clear eax register + DECODEBYTE esi,00h ; decode the byte + mov numItem,al ; move the decoded item into numItem + cmp numItem,0000h ; compare numItem to zero + jle @@endDecode ; if it's less than or equal, we're done + inc esi ; increment line pointer +@@decodeLoop: ; decode loop sync address + cmp numItem,0000h ; compare numItem to zero + jle @@readLoop ; if it's less than or equal, get another line + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemFGE3 ; handle (numItem>=3) + cmp numItem,0001h ; compare numItem to 1 + jge @@handleItemGE1 ; handle (numItem>=1) +@@GE1Ret: ; return sync address + cmp numItem,0002h ; compare numItem to 2 + jge @@handleItemGE2 ; handle (numItem>=2) +@@GE2Ret: ; return sync address + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemGE3 ; handle (numItem>=3) +@@GE3Ret: ; return sync address + add esi,0004h ; increment line pointer + sub numItem,0003h ; subtract 3 from numItem + jmp @@decodeLoop ; keep going +@@handleItemFGE3: ; return sunc address + DECODEBYTE esi,00h ; decode the byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,01h ; decode the byte + mov cl,04h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + jmp @@GE3Ret ; jump back +@@handleItemGE1: ; (numItem>=1) sync address + DECODEBYTE esi,00h ; decode byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; mov shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or the result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE1Ret ; return +@@handleItemGE2: ; (numItem>=2) sync address + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE2Ret ; return +@@handleItemGE3: ; (numItem>=3) sync address + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE3Ret ; return +@@endDecode: ; end decode sync address + FGETS inputFile,szLineData ; get final line from input file s/b 'end' + STRNCMP szLineData,szEndLine ; compare last line to endLine + cmp eax,0000h ; check return + je @@setError ; if it's not equal to 'end' we've got an error + mov status,0001h ; set success + jmp @@endRead ; skip over next instruction(s) +@@setError: ; setError sync address + mov status,0000h ; set failure +@@endRead: ; end read sync address + FCLOSE inputFile ; close input file + FFLUSH outputFile ; flush output file + FCLOSE outputFile ; close output file +@@errorExit: ; error exit sync address + mov eax,status ; set return code + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_uudecode endp +_getOutputFileName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szLineData ; move input line address into source index + mov edi,offset szOutputPathFileName ; move output file name buffer into destination index + xor ecx,ecx ; clear ecx register for counting +@@munchLoop: ; munch loop sync address + mov al,byte ptr[esi] ; get byte from input line + inc esi ; increment esi along input line + cmp al,' ' ; did we read a space + jne @@munchLoop ; if not then keep reading + inc ecx ; increment space counter + cmp ecx,0002h ; is this the second space + jne @@munchLoop ; if not then keep reading +@@copyLoop: ; copy loop sync address + mov al,byte ptr[esi] ; get source byte into al register + mov byte ptr[edi],al ; copy byte into destination + inc esi ; increment along source line + inc edi ; increment along destination + cmp al,0000h ; compare input byte to zero + jne @@copyLoop ; if it's not null then keep going + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_getOutputFileName endp +public _uudecode +endif +public _uuencode +END diff --git a/uudecode/MASM/Uudecode.asm b/uudecode/MASM/Uudecode.asm new file mode 100644 index 0000000..842a3f0 --- /dev/null +++ b/uudecode/MASM/Uudecode.asm @@ -0,0 +1,190 @@ +;************************************************************************************* +; MODULE: DECODE64.ASM DATE: JANUARY 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT LAT MODEL +; FUNCTION : BASE64 DECODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc + +DECODEBYTE MACRO index,offset + mov al,byte ptr [index+offset] ; get byte at index register + offset + sub al,' ' ; subtract space + and al,3Fh ; and with 3Fh +ENDM + +.DATA + inputFile FileInfo <> + outputFile FileInfo <> + szBeginLine DB 'begin ',0000h + szEndLine DB 'end',0000h + szLineData DB 400h DUP(0) + numItem DB (0) + charByte DB (0) + status DD (0) + szOutputPathFileName DB 0FFh DUP(0) + szInputPathFileName DD ? +.CODE +_uudecode proc near ; void uudecode(char *szInputPathFileName,char *szPathDecodedFileName) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push dword ptr[ebp+08h] ; save inputPathFileName + pop szInputPathFileName ; restore into szInputPathFileName + cmp szInputPathFileName,0000h ; is the file name null + je @@errorExit ; if so then we're done + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE + je @@errorExit +@@munchLoop: + FGETS inputFile,szLineData ; read a line + cmp eax,0000h ; did the read succeed ? + je @@endRead ; if not then we're done + STRNCMP szBeginLine,szLineData ; compare line to signature + cmp eax,0001h ; did we find the signature + jne @@munchLoop ; if not then keep reading + call _getOutputFileName ; get output file name + STRCPY [ebp+0Ch],offset szOutputPathFileName ; copy szOutputPathFileName to supplied buffer + FOPEN offset szOutputPathFileName,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE ; was there a problem creating the output file + je @@endRead ; if so then we're done +@@readLoop: ; read loop sync address + mov esi,offset szLineData ; assign input line address to esi + FGETS inputFile,szLineData ; read an input line + cmp eax,0000h ; check for read error + je @@endDecode ; if there was an error, then we're done + xor eax,eax ; clear eax register + DECODEBYTE esi,00h ; decode the byte + mov numItem,al ; move the decoded item into numItem + cmp numItem,0000h ; compare numItem to zero + jle @@endDecode ; if it's less than or equal, we're done + inc esi ; increment line pointer +@@decodeLoop: ; decode loop sync address + cmp numItem,0000h ; compare numItem to zero + jle @@readLoop ; if it's less than or equal, get another line + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemFGE3 ; handle (numItem>=3) + cmp numItem,0001h ; compare numItem to 1 + jge @@handleItemGE1 ; handle (numItem>=1) +@@GE1Ret: ; return sync address + cmp numItem,0002h ; compare numItem to 2 + jge @@handleItemGE2 ; handle (numItem>=2) +@@GE2Ret: ; return sync address + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemGE3 ; handle (numItem>=3) +@@GE3Ret: ; return sync address + add esi,0004h ; increment line pointer + sub numItem,0003h ; subtract 3 from numItem + jmp @@decodeLoop ; keep going +@@handleItemFGE3: ; return sunc address + DECODEBYTE esi,00h ; decode the byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,01h ; decode the byte + mov cl,04h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + jmp @@GE3Ret ; jump back +@@handleItemGE1: ; (numItem>=1) sync address + DECODEBYTE esi,00h ; decode byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; mov shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or the result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE1Ret ; return +@@handleItemGE2: ; (numItem>=2) sync address + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE2Ret ; return +@@handleItemGE3: ; (numItem>=3) sync address + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE3Ret ; return +@@endDecode: ; end decode sync address + FGETS inputFile,szLineData ; get final line from input file s/b 'end' + STRNCMP szLineData,szEndLine ; compare last line to endLine + cmp eax,0000h ; check return + je @@setError ; if it's not equal to 'end' we've got an error + mov status,0001h ; set success + jmp @@endRead ; skip over next instruction(s) +@@setError: ; setError sync address + mov status,0000h ; set failure +@@endRead: ; end read sync address + FCLOSE inputFile ; close input file + FFLUSH outputFile ; flush output file + FCLOSE outputFile ; close output file +@@errorExit: ; error exit sync address + mov eax,status ; set return code + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_uudecode endp +_getOutputFileName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szLineData ; move input line address into source index + mov edi,offset szOutputPathFileName ; move output file name buffer into destination index + xor ecx,ecx ; clear ecx register for counting +@@munchLoop: ; munch loop sync address + mov al,byte ptr[esi] ; get byte from input line + inc esi ; increment esi along input line + cmp al,' ' ; did we read a space + jne @@munchLoop ; if not then keep reading + inc ecx ; increment space counter + cmp ecx,0002h ; is this the second space + jne @@munchLoop ; if not then keep reading +@@copyLoop: ; copy loop sync address + mov al,byte ptr[esi] ; get source byte into al register + mov byte ptr[edi],al ; copy byte into destination + inc esi ; increment along source line + inc edi ; increment along destination + cmp al,0000h ; compare input byte to zero + jne @@copyLoop ; if it's not null then keep going + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_getOutputFileName endp +public _uudecode +END diff --git a/uudecode/N54.NEW b/uudecode/N54.NEW new file mode 100644 index 0000000..d5207a8 --- /dev/null +++ b/uudecode/N54.NEW @@ -0,0 +1,779 @@ +Path: news01.li.net!nntp3.cerf.net!nntp2.cerf.net!news.idt.net!newshub.northeast.verio.net!news.new-york.net!uunet!ffx.uu.net!in3.uu.net!news.uunet.ca!news.netsurf.net!east1.newsfeed.sprint-canada.net!HME1-2.newsfeed.sprint.ca!newscontent-02.sprint.ca.POSTED!yahoo.com +From: shakubu@yahoo.com +Newsgroups: alt.binaries.multimedia.erotica.lesbians,alt.binaries.multimedia.erotica.tickling,alt.binaries.nospam.multimedia.erotica,alt.binaries.nospam.pictures.celebrities,alt.binaries.nospam.teenfem.nonude,alt.binaries.nude,alt.binaries.nude.celebrites,alt.binaries.nude.celebrities,alt.binaries.nude.celebrities.female,alt.binaries.nude.celebrity,alt.binaries.nude.celebrity.female,alt.binaries.nudecelebrities,alt.binaries.nudism.celebrities,alt.binaries.photos.nude-art,alt.binaries.picitures.erotica.amateur +Subject: POSH Spice Nude jpg attached +Message-ID: <13059911.1552@yahoo.com> +Organization: NCCentral +Reply-To: oga@kissalive.com +Lines: 764 +Date: Thursday, 13 May 1999 11:15:52 -0600 +NNTP-Posting-Host: 209.148.197.129 +X-Complaints-To: abuse@sprint.ca +X-Trace: newscontent-02.sprint.ca 926615632 209.148.197.129 (Thu, 13 May 1999 13:13:52 EDT) +NNTP-Posting-Date: Thu, 13 May 1999 13:13:52 EDT +Xref: news01.li.net alt.binaries.multimedia.erotica.lesbians:243637 alt.binaries.multimedia.erotica.tickling:282321 alt.binaries.nospam.multimedia.erotica:158413 alt.binaries.nospam.teenfem.nonude:93698 alt.binaries.nude:118499 alt.binaries.nude.celebrities:1172996 alt.binaries.nude.celebrities.female:866893 alt.binaries.photos.nude-art:90212 + + Hey, check out the pic below, and the rest of Nude Celebrity Central! +at http://ncc.websx.com + + At NCC ( http://ncc.websx.com ) we now have over 100 celebrities in our easy to navigate archive.. click the celebrities name and up will come a bunch of thumbnail pics of her, and they're still ALL FREE! no bullshit like all those other sites that claim to be "free" but require a credit card to get in. + + A few of the celebrities we have are Alicia Silverstone, Liv Tyler, Reese Witherspoon (she's the one in the new movie cruel intentions) Christina Applegate, Christina Ricci, Jennifer Aniston, Ashley Judd, Joey Lauren Adams, Drew Barrymore, Cameron Diaz, AQUA singer Lene Nystorm, ALL the spice girls except sporty.. could find her, Sandra Bullock, Alanis Morrisette, Denise Richards, Claudia Schiffer, Celine Dion, Kate Winslet, Amy Jo Johnston (the PINK power ranger) and tonnes more... you must be 18 or over to enter + +http://ncc.websx.com ALL CELEBRITIES! ALL FREE! +picture below of Victoria Adams-Posh spice (NOTE: pics are better quality on website, i have lowered the file sizes on these for posting purposes) + + + +begin 644 posh.jpg +M_]C_X 02D9)1@ ! @$ E@"6 #_[0X:4&AO=&]S:&]P(#,N, X0DE- ^T +M ! E@ $ 0"6 0 !.$))300- $ >#A"24T#\P +M " .$))300* ! X0DE-)Q H 0 +M ".$))30/U !( "]F9@ ! &QF9@ & ! "]F9@ ! *&9F@ & +M ! #( ! %H & ! #4 ! "T & !.$)) +M30/X !P #_____________________________ ^@ ________ +M_____________________P/H /____________________________\# +MZ #_____________________________ ^@ #A"24T$" $ +M $ ) "0 X0DE-!!0 0 ".$))300, R* +M 0 #D !P K 2T QN !@ ?_8_^ $$I&248 0(! $@ 2 +M__X )D9I;&4@=W)I='1E;B!B>2!!9&]B92!0:&]T;W-H;W"H(#4N,/_N Y! +M9&]B90!D@ '_VP"$ P(" @)" P)"0P1"PH+$14/# P/%1@3$Q43$Q@1 +M# P,# P,$0P,# P,# P,# P,# P,# P,# P,# P,# P,# P!#0L+#0X-$ X. +M$!0.#@X4% X.#@X4$0P,# P,$1$,# P,# P1# P,# P,# P,# P,# P,# P, +M# P,# P,# P,#/_ !$( ' .0,!(@ "$0$#$0'_W0 $ 3_Q $_ !!0$! +M 0$! 0 # $"! 4&!P@)"@L! $% 0$! 0$! $ @,$ +M!08'" D*"Q 00! P($ @4'!@@% PPS 0 "$0,$(1(Q!4%181,B<8$R!A21 +MH;%"(R054L%B,S1R@M%#!R624_#A\6-S-1:BLH,F1)-49$7"HW0V%])5XF7R +MLX3#TW7C\T8GE*2%M)7$U.3TI;7%U>7U5F9VAI:FML;6YO8W1U=G=X>7I[?' +MU^?W$0 " @$"! 0#! 4&!P<&!34! (1 R$Q$@1!46%Q(A,%,H&1%*&Q0B/! +M4M'P,R1BX7*"DD-3%6-S-/$E!A:BLH,')C7"TD235*,79$55-G1EXO*SA,/3 +M=>/S1I2DA;25Q-3D]*6UQ=7E]59F=H:6IK;&UN;V)S='5V=WAY>GM\?_V@ , +M P$ A$#$0 _ ,G[4Z@6_:&VBNV0S:YS)+#MWV:[GO9_-W?^E$$Y%3ZV /DU +MAK6^J(/M)<'?HCM?]+_"?I%'JM&37GV5$/>UA/IDP[VR3_@RZMOTOHU_055] +M;0T.W:GD1$%01C&O-?$:6M82\[B92-3FMW3H.1W'?<[^2E7+MT-)H&L$OG0<2#X?G*Q;>X AQ+Q[6.7PPN>Z2VQP ;S]+U7Q])SU&ZEQK;Z8/K.@/CAS@?<[=K_P!< +MWHF/4@W2"TWPUY#8 F0)D?P3^J_Q_!,*W!\$[N>VO]H"5+8?/_-*5=5/_]!C +M:TY#ZKCMM+!9561_@SN/H,]M;?5H_/J5:SIV'G:L/N @N9V_K?FJZ*G;@YSP +M14(]&QVTML'MR7#:U[[/\_9_(K5G%YY=:7-8QX!!;).[V_NNK:K]#*6UX_J6LIJ/I-L(&CH.[%*&0 +M//-8XOLJ.Y]IT#&#=NUASF(?JM_T#?N=_P"26SAN&3C/_:!JQ:;ZQZ< TG4; +M6EC[6_G.K98@_L[-_P!+;_VU3_Y)'W)<5UKY^#'QZO\ _]%[&7VM!N)EHBK< +M[<=A]S73M8[:_P#-99^E8Q5K=^WTA8[TYD-!($JTW"ZIB8P'4:;*K)VL=:X. +M+B!N^DTN]K?H^_\ 2(+',V SSIQ.O[JH6;(WUZ-W%$>W&NS:P!8Z+'O)?606 +MQS(_. +MSWO_ '_4_P"VDI1U'BPG)$#76C7VMS(Z>W-LMS,-PISWAIVO<[TBYA]MC6#] +M'OV_SGL_2?\ !_GQ]/J7_<5W^8[_ ,FJ^%U'$R;/2KNK&4UH>ZIC][8(WM=7 +M:0SU/8/4V_X-BU/M.3YIU2['^Q9P8KX[']K_ /_2U,RC'KZ032YKO>VZLML] +M1KFG]%994XOW_I?IO9Z?YG^D6(RVMEE;'D,:2722NCZR:']*N?C/J::HMA_V_%ZA7L%;=XNKM#G,+C[6N +M8VHBSUOTGYG^#]54>E=$R<7)#\BAU'IZ@.; P +M#0N.US=@_P Y-G*@?TJ[=O)9.,#I5 [TTJ/JPVVEK@_'K<2VRJMV.-K"!L]2 +MKT,ACFMR*]GVFISW^I_P:T?V/E?Z=G_;9_\ 2Z!T+J?VC$K8>6--;+B-'/ +MKV2/\SZ2U_L^5_H[/O\ _,EG>[SG'5#AXJ^7T?W.+][_ %?\ZL]J/'L-N*KT +MX'__T][-#K\/+Q2+:[&4/:YI:2QYJ)L+=76>_P"E9N9]-8'U>S+:'Y-;+!4X +M5FRIY/M#VC\__@[&^RQ;F5T_#SK'6-==CY+ZQ58UT$,VF:K!ML&RUC?T6YO^ +M#V>HJ^/T#"Z=?]I=DFTZ@AX8*S.D.:?_ ":S85PB0O77R;PX>#@X>"Q\M\1^ +MDF%.93D]9=D8MH-5E-3=S7%PWM;ML;N<&[]C_9O6AF9>17L=OF=-I[PL\/8[ +MZPY'IUMJK 8 RH0R0ULD ?O*UU)O\V3H&[I,B?S?S9W._LHD@ T5$:Q![==4 +M]/47V#:X1Y%6:V5;C;4T5VN@>H.1'&W=.U9-):T[IW>XUE]CG&! !_JMA5LZVRW;4ZPO8?T +MD>?T0K75&!N9>!J'0X:1RUI5;'QG9;W8Q8#9>T55'3<'$AK/3<[VL>J)%Y)# +M^M*OM=$2 QQE_5BG^KX<,JSD " /@5?ZE]6LKKM]#CD#&QZ X>H1O?OG4W_BV*OE +M=<8S&N>QKWFEQ#JZR&1KM;W:UC'[7_\ 6T&R^Q[/>-HY+3,Z .X!_ID5,YK8(U!VNVURW]'_:]56OVI5Y?<5D8W7^D8SR +MW[34#MVN:22"/[(VJ7[:Z-_W(K_Z?_D5#]RC0/N9.(0,*XICZGI;_TOZ)<0K73NG/ZA:^IEU-!8T/G(L%; +M3+ZZMK'N]N]OJ^K_ ,578F>W"[K7=?[LZX;TJGNJ_KWU7"HOQ,?(Z5:P/(W +M91+QUWO]Z%G_7/J^;92ZS.Z9CV$N;Z]'K$MV56[&W,LEOH +M6[_1?[+?I^^JQ8.!@Y?2KZI;TZZRWT[J+LYT5O;D-]7(8ZWT_YQ_ZI^E]_\\G"(&RTR)=1OUDS\U_4 +MJ/VA@8-;;@:*+18YKRZ[[3->26>I^K6M]7U+&?I?]'Z3U1MZP_/R*K;\S"9; +MD![[;-EH#'%IO95>XG?[;#]G_1M?71_@O4^@AYV-= +MG6YS]GL^E_Y-*@KB/=OYW5+L=UV9H-A#0"1M?ZGI^YWTE6_;V3_HJ_ +M^E_Y)9B27"%<1?_9.$))300& ' 0 0 ! 0#_X@Q824-#7U!23T9) +M3$4 0$ Q(3&EN;P(0 !M;G1R4D="(%A96B 'S@ " D !@ Q !A8W-P +M35-&5 !)14,@0 9&5S8P 2 +MD!\@'Z @,"# (4 AT")@(O C@"00)+ E0"70)G G$">@*$ +M HX"F *B JP"M@+! LL"U0+@ NL"]0, PL#%@,A RT#. -# T\#6@-F W(# +M?@.* Y8#H@.N [H#QP/3 ^ #[ /Y! 8$$P0@!"T$.P1(!%4$8P1Q!'X$C 2: +M!*@$M@3$!-,$X03P!/X%#044% +M]@8&!A8&)P8W!D@&609J!GL&C :=!J\&P ;1!N,&]0<'!QD'*P<]!T\'80=T +M!X8'F0>L![\'T@?E!_@("P@?"#((1@A:"&X(@@B6"*H(O@C2".<(^PD0"24) +M.@E/"60)>0F/":0)N@G/">4)^PH1"B<*/0I4"FH*@0J8"JX*Q0K<"O,+"PLB +M"SD+40MI"X +F NP"\@+X0OY#!(,*@Q##%P,=0R.#*<,P S9#/,-#0TF#4 - +M6@UT#8X-J0W##=X-^ X3#BX.20YD#G\.FPZV#M(.[@\)#R4/00]>#WH/E@^S +M#\\/[! )$"800Q!A$'X0FQ"Y$-<0]1$3$3$13Q%M$8P1JA')$>@2!Q(F$D42 +M9!*$$J,2PQ+C$P,3(Q-#$V,3@Q.D$\43Y10&%"<4211J%(L4K13.%/ 5$A4T +M%585>!6;%;T5X!8#%B86219L%H\6LA;6%OH7'1=!%V47B1>N%](7]Q@;&$ 8 +M91B*&*\8U1CZ&2 911EK&9$9MQG=&@0:*AI1&G<:GAK%&NP;%!L[&V,;BANR +M&]H< APJ'%(<>QRC',P<]1T>'4<=:AZ4'KX>Z1\3'SX? +M:1^4'[\?ZB 5($$@;""8(,0@\"$<(4@A=2&A(B>K)]PH#2@_*'$HHBC4*08I."EK*9TIT"H"*C4J:"J;*L\K BLV*VDKG2O1 +M+ 4L.2QN+*(LURT,+4$M=BVK+>$N%BY,+H(NMR[N+R0O6B^1+\<-]1B)& +M9T:K1O!'-4=[1\!(!4A+2)%(UTD=26-)J4GP2C=*?4K$2PQ+4TN:2^),*DQR +M3+I- DU*39--W$XE3FY.MT\ 3TE/DT_=4"=0<5"[40914%&;4>92,5)\4L=3 +M$U-?4ZI3]E1"5(]4VU4H5755PE8/5EQ6J5;W5T17DE?@6"]8?5C+61I9:5FX +M6@=:5EJF6O5;15N56^5<-5R&7-9=)UUX7&EYL7KU?#U]A7[-@!6!78*I@ +M_&%/8:)A]6))8IQB\&-#8Y=CZV1 9)1DZ64]99)EYV8]9I)FZ&<]9Y-GZ6@_ +M:)9H[&E#:9II\6I(:I]J]VM/:Z=K_VQ7;*]M"&U@;;EN$FYK;L1O'F]X;]%P +M*W"&<.!Q.G&5&YXS'DJ>8EYYWI&>J5[!'MC>\)\(7R!?.%]07VA?@%^8G["?R-_A'_E@$> +MJ($*@6N!S8(P@I*"](-7@[J$'82 A..%1X6KA@Z&I+CDTV3MI0@E(J4])5?EAMJ(FHI:C!J-VH^:D5J3'I3BE +MJ:8:IHNF_:=NI^"H4JC$J3>IJ:H_R#W(O,DZR;G*.,JWRS;+MLPUS+7--14B,5H;'! +M8G(S%M'A@J)#%_#QDB2R4V,TPM(U".)S@T1D)B<1 (" 00! @0#!0@" P$ +M !$0(#(3$2!$%1(F$R$P5Q0E*!8G*"%/"1DJ*RPB,5TC.AL08D_]H # ,! +M (1 Q$ /P"N+)=[I;T:8&X5B6$CCS DY+J\QT^&.,H3>FA62]O[S=;7(TC* +MLRO2.-I)"J#Q\OO,3BO-CY? L:31/O6][ET'ANK0P6+T;H1A5$F=:AU!<9X; +M"N/RO<5)%?W'<9'GZ%RDD4!TM#%,S2,E%R*LU&H?NXTTJGJAH']^VV76S1?) +M3]7<^FE;9558RJFA% 0:C_-@5%#;8*11/'?75B5T1Q4.DVY6CAA\8KYEKPU8 +M6K5&,F#VEI*C:R.-,\0P)D!K0+0C*M:8@@/LV@A>.>%F>Y%=<;H JFH +MTE6KYOLPEE.XK&-M>74,T,T1TW0;5H=:BK5J:'PQ2]=Q0G?+B^DN!)>#_NQ3 +MIQJOX3I0GQTU]&+-7N%=-C6'<]OM2TMU;RRET AA6BKE7WF-.'HPJQI[^ %5 +M[+\^](X%BC4DUI^)2G,_%BWE RT%+Q,A>I(8>ZV5#3T'#C'NM2N9.LTIX >G +MGB4@,!.KCG7E_?B&B0A2JQL-0#MEHH>'KPK1!__0I'<;7@G62X?5H 2-J %? +M$9 >PXYN#(KU(HC;;(H[F/5$X25,U=ZC45XT^'5[<5WY)P1;0MDF^[?>['"F +MXIKO+65%<* &D4'RU-2,5TQ:PM":T$-]$VZ;G(;F5$@A "H:9*."UY8WO'I" +MT+ZXT>CM^)HW-KV@W!"II+[H"(NSJ3FO(<^)Q/TUOY '=F#%0Q!- 1P].>(9,$!!> +ME?+0YTIA@1JT9.0H.-!X^O#$&"%:#5FPX4\?;B&X%DW:WFS#<>=1EB&R41K& +MP H"4X%O[,2F2C;SKGD,Z4PQ+-FCET.XH-+ &F?$?W8B16$6QL-)%R)%<+6( +MQTH6_>KGB$M=2#:T8F55":CJJ +M Q6ZM;/05? F9F"*$4I32=!=FS!YZN'^'$TK.A)+<;I92H!>+H5 %C*4-?\ +MBM3A[875_ CB#[9N5M%<27%U(0T%!;A10D\,B010<<\3"DGB W2 +MI9J**%C6E/VX;4E 3L"%51I"\#7,XD8\_$!SS!Y\\$$&!Y":\!G4>-.&) __ +MT:+6+J42U+JU@C:_8KI'N\-()_3BP:3:" +M]F1P2[!0>1S^W$2,AI-NMK<@!8AJ10 YX>D^NN!C2#RWEJWE#G1&!11P'H\< +M0WH0Q49M4I9ADU,L00>21L:4'HRQ(&CJR$$"C5R KB&R":-6R+!02:!B13$6 +M(#+0(9 )9!I8Z=8]X?MQ5;74$1[E"D/2"N9)!GK04\M>&'IL"!"8PE7'G)KK +M%>>? XME0#-KAB'I""58 L "> Y_;A*LA'LE?+4>O(TPQ*-J@H:'5PRS/ +M' @//-32:8))/__22-<[:=_W'\[#[=+!_P"UM OE91Y=&D\Z>;'*S8N55Q]H +MFL::BON/>;6]N4BC),$8U%673)&!\->%",6]?&ZUU+*4*Y/)U7R-5!.D5S Y +M>C&DM2@TTHH_8/UX$P,,E !PX98DE&HE>M 0 .9\,*2F8LAYGB3G@8&S#S @ +MT)SKB))/?-IH#F>/@*\\1($A(IFW$>'#+/QQ)#-X:HZCD"#3B/7@G2" _&H>K&A*T0R=8#KF[%U +M9).H]U0*&G(G%.*T2GL5)0*HVN4F'44'[K, :4X4P:O1C-$T\/ +M5?JSN(@M$X44>(7EBE>V4D*W!%2,2HTC!]#:B@YKSS]6(K5 @5Y%5VT+2,UT +MI6M/:,-&HT$$A9O 'S +Z\L* +MQCT#.M.'IK7$ 2QI^)I()9N"^GEB )7A*>61=)'VCT8: D\01@>4$T.8IE7! +M!$EAV\3/ ]O(,G4>45J,LA[<;>E[DZC8X\GCV5I:.CA<\C[U:^PXNOBK34=U +M2-YQ;W4P2VB&E*ZJ EG?B"?1ECE9.PYCU*K6Y;(A>*U$D=PX;KGRF,&A%,C7 +MD1BEMM05HRR-Q\W(- D% .I6F8&?_3C;7/;'24M!DVEH>RO&I<]0,Z@F72-( +M_3C1A['.O)Z,:KT%27$3W$8F0&/B "1J!SJQ&,E[1JA4QQN=M:26\ @_ +M_]15WY?;;?L$M'GD9*_A@'I <,R0#7'-Z^FPE$UN<[92*FI/K]>-9H-0Q %. +M?,X"0FU>(25= Z#D> A,N<$DDMO;=*=5E:)44$@$NHTE6)IBJ:UIR +M]W,1Z/06;J-+!G)+!NG+&00H(-:<42!]>EZL"%X>A>.(K>62E#$T44;2"XF +MMV>T#4=%8K43>Y2VDDU6T,@C(/X9;53T5.?#%TIO0FL^040N?,@ +M(3.F6?VX6=8)DFME+5&6'I4"0"(YAZ"N8KQ&)X(#_U6F\2_F3/80V +M$-M!<>=F+:U\HSS4ZL_^G' MV,>-3509Z[R/+$SZDP0FR$IPU$\*9:L9*7:Q%_:VUU;*-25$O4J0:&I<*3X>6N +M)61)N"4VF#217B6UO;H?P6CJ4 (K'JS-.5<:,&#ZCUT9*4@/1N)PTT[.EO"M +M*&A;T*.' <\=:F)<87RHL6TL]O>WF-K!>6PD^6E;0';2RZJ9CDP^S$/ GM(S +M2F">Y>/;HEMXB9WR>0%3I' "H(Q7FS4573_$3>RV1/=S2W%L+A(%CD JP/E$ +M@J 56G%J\L.QLK41Q-"6G!U-(6IER J/3C%EK>FEE!4TY%EZ +M);:5DA(D*N6#YT .0%,74LQZL@$,KLH---=6@^RM,"<:L8WM(HUE93J6H/*@ +M\*U.+<;J_()GOY>A /63)B"=513AA_IJ-T+R/__68;E?6&V77R"2P]846.>= +MB)J5]U*>7_J&.'?"JIMKD456@ITQS7$DU0Y9C2F8.?CPQ+\0>@ZZ]B)#!5W$Y7"DH;T+AN4CPZI-MLHXX3%'#JC(9E7FS YU=OB.,&-RWSS6ULHC6HT%C4T7@%'#5EEC1CR1=./W?X07J#6UI:W5*V\ZS9J\JD +M@&@]/O8[E%6VGDOK#([UFL8S')'JC/\ +E%0P/IJ,/=\%MH)?31B^WWLF0E8 +MRQ 4$9>O%*S\O!"T--PFD!BE$719CF.(+'G2F*36"/@?_]<3N'<+6>=VCVJ:ZOUE!D>54#4!J6115AJQ +MR56L-VMJU\OR%54_4GV]TOB]Q$C1JQSB8:2AX$$%D-21G4D\/U8OJRA_$T:WD<\*BHKG7#>1/P!I+&)Z$@U&7HQ +M$>24+[_MR">(Z5J1F&X4/#$5O ML87"HS9 YGT'EBQY)*_HPQ[#MQL +M)XX88&25EU*5H2?8<9W6=6:J1&@H^H459;%#Y9#&7<5I0DBN0]6-763XZF;N +MO5?@*NWZPW\$I%8T8,R>(!S%?$X;.IK!C2.A2;KM/S:-:J8VNXPJ6T9U+*&- +M#J)(HRM_TXP.B59F#/EB8 MRVR[465Q=*(5>?HQ62TKH%15F)\U=.2T]W%DS +M1M;5\B)I.!KL&TM/--87-H.@RF,AD(!SJ!3@&SKJ][&%WM*AZDVM\2J[QVOV +M_'+)SCR62.A.>DDYK34N)>5U1(U>G&['VVG%O=4=9#W=I$C +M4Q+320 0!0J0:',#&KL]BO"*^0;U 9BUN6K)J (9U + $#DS#TXIP-)3+(JP +MJ.PCNI8I8%!2>+S$FI.D@L:#W2,9.S=3*0/0T22K$./=S]7JQ8G)$ZG_] K9WEL-MD?>(TAME7. +M>,.THXCQ-9/NX\[BRJV25[M?SE+3>Q1[+N<[?OTLL>L[:'*'K$F;03D7K34P +M]6.AEQI_*;,&5U<%YBW&TOHI4@E"R(.(S(KF"!C(Y3.O6R@1F6*WN ;RZ=@7 +M(%?(M?#RXMLK"R@T]P; ]?HIGAD +M) 8D3Z3KH*\!PSKA&M2358524GIZ@.8PNVX0$Q]'YHS:%#!0I<\0H\,-"'K_ +M /!ROO:YFN.Y)ZDK$BTA%*>514?IQMHU&AASR[:DG8MVXW1H3 +CJQFD6D.? +M+F0 W,C%/:3B4S.]B[W6WK)L0O5L$MODYE>U1'575 :L'49@GF<4TK*:MY1C +M=M=R+N9MLW/:#?BXT7+.DJ",EI$T^70:%0,R3JQDZ][5?%ZEC30VV3Z@&VV= +M+>XLI;Z]TG2K.A+I6BEB_'P."M$FW8AUUE%!WTI/?WM_M5I);0&0%[=Q31J +MU+05R+*?\.-];IO5C^-0I;ZVL[M;Q&9[A](DM10#\4 MT](('MPEO^32_P"4 +MA;BZSW7=C>?/[5 \4T!,LDR!692"<\JY4_=Q+HJ^0Y(R^W!KD)-8J);I$:2[ +MN= 5PS>\,N*Y\<"J]KD.Q+V2LTU_<.[ 11*':9C0*W(FOIXX3L3HD0VH+#)) +M,7:6JS$5,P@'40(.#:L]+TY8AI\M6%8:%>UQRS7,,5A/F0\TYN&"_A!_AUC, +MTXXLR-54/( F148:0>6HD9T +MQ3BQ5K5L31["][*9;T64RZ9A__1)NMXM(V17W%I +M'90MQ901:UC;B?,3^W'FZX-)4%.OH#=Q;%:;M;172[>O_;C6UW)Y-0I7W0?_ +M !8,66R?&O(FMH%?;T<2/+) H D-69:4;_EC7#G\#MX8X(8WNV1W,9U+F3XX +MFTHL7%@^W;2L$FF&'2:9LHH<^1Q4[2QU1(L=A;+&OFR(PR8K84T0%2!6IRKX +M8&RN7)L(UX4H%X4_MQ&Y,GG16GF7S?&_!69)N +MYK.77(9>DQT.R$LIS(*D^/+#MTLG#]QG6-S$!>[K<0;?#+-"UL9/+&S$YDD\ +ML\^&*<=9TEJHDM;J)@L3>=T)H 5/'ARQFK6M;)L5.4)T[7WZTC7<4MEE0,J= L.H5, +M8%6IP'J.(MD61\5X&Y),9RC;MHTV]E8/KG"F4D@>9QYE+9L17T8E*S:;L+9) +MHK4>P[E;71N$MY(!&K&6,^<%"2",OA('/&WDK)$2*9K8R*S2S+;*U3! 0U6% +MY;1:6(L9$(0L?FKA3Q<+J#"F8\OE&,]TYU$LF]35KC;KY +M7AV0R*;;,*Y DD7,U7XO+]W"Y83UV'4^3RZVF]OK>UO="=5G($7 EB*ZJ*/- +M087!V7CV&5FF$7_8/Y@(;V&_@2>9UC>(CIJC+Y>)-001[OO8L?<=_F^83E#U +M,WVS79YUL[CKM.RGKWDRAXF-01I-,T)'FQ5]%Z---_I)K>07\TW'<+PWNJWZ +MMD1*SQ1H(_)F&8#CG[^+;74)1!*K!__2WVFSCFVZ:UL8IS*5J96)RE6OF+47 +M4GW<<.RKS7YK%/)^1#:/W+OZ26U[N;16R-IF"+12$RX+I ])Q9DS?3?&J&BJ +MU++MVW[4!_VTJK$OE11Q8(!4BN*EDAQ'\1UNO9.B7D)EM[-$8ZR'/!\-R=C6 +M]":VZ-**VIAXCB.''%$M$R@J,JM#7EGSSQ";8C1('J,_^/7BVHC1Z& 4@Y5X +MC$.L!!&Q%2:D>-/[L*GKJ/9'FNOE# D\,,Y@KA#>QO9["$*T9,=:G3GQPM)3 +M8KHF2R[ELEQY+JU1_P")00?748L_X]XU%6.QK)9]HW*A);*&1!GI*"@(X4&& +M5*1H2U;R17NS=LWT@>:%6D&2M\0]6*G@KX$^DEX-Y=DVR2V6 %EC TT!X X> +MV)-)25/!7T/?RI'M&M89 E0 )*59:>!Y'"+ ZK1B/KU$''"O'>-TR?HT(]S[&[JC0OMUXK>8,T);2LG(AJ@_KQ93G50UR_ +MA$?7KX90MTL63>(XNXK)[-"*-*E2%(K333BE3BY9#/;#:HFALRD]U:6[B5)2 +M6M\Z,R+P/K_S8,UJS/A"IRM0:6UFM>G,SB-T<&.16(*E:<:?9B:Y%:4,BX7G +M>\EQL,(VJ!HEDU17>(^FT_[?*1:5L6*+:6OMH>W,TA@FCTZG\Y8 ?=<56F +M$HK*TH5PX.;5WT.@I(>FP(--7E:HIC9*O\ C3W%M;.& +M?__3(VG<39;=;0,+?YFH)CD:1&(8YAF!4Y?"I&."[IN8T,[1-/VW=75Y'NTE +ML+6T) -G;LV@GFS%#0AAR.(SV?&:J%^HFMX,OMEVV>[:_EFFM(;?RP(=*1U. +M1IG^O"X\NO%*"VF9J'Y%ES<6EG&KAWOR:&D5J'2,L@,&2&75IQ6NXSCF3.M*XJF"'4V$L6D$'@&=.5,1S8<""6XB$F1 KP^W$IC<0[;8%DD!H*#/VXG1Z>"NQ9+ +M9(V<1. 5(]WB,6K3P9;&NY[#:N*HH#4II&7'#VQH,>1B5MFN%9BONJ>>$XM& +MA71M);1V,:23M4UX5P)2#<[&C[C'*-"94/C4TI@DCC!Y#<2J#^OGB>;0<1M8 +M;AH:A^W]>"N0KM1#R.ZBDBID*<#B_DF9W6"'<-ML+Z(Q74*31GBKJ#BN]4,F +M4&\^ED%M+ +MSNFJ\51$*:@9 ":@Y98OP5LFO\QEG211M&TPRRA8[CY6549PVL&K@>XT9"^] +MX@MC3ENT,FFMBY;+LFWQWL=U.5N.IP# E0>!TJ?3XXS.?)GM9%WMK7H4\_5@ +M:I#/6HU9EV4LD:E&T_@@R "4*17R5PZ4_L'6 +MQ__4:=QV:7,=J$%8(%#RRHJ]35XCXSZL>?\ R0MS,F#M<16)YG#?TS=I^4TX^ +MNV+;F\K,DC6T,:J-/3B0**#QIC4\:B#?UZ_3U0ZM&$\ Z486$BHSS/KRQD>. +M9-GU% ;'9Z:L0%',GQQ''07D"2W$)E>%9EU4]P',Z +M> PC3DF3U]1;D#6HJ:G+G4XLJFPLQAM5Q28H/>/MX8E"W+;:64LK!]1!Y&N- +M%*OU,MFAD2\Y!B 6S\3GG@Y+U$M08=0.!PH<2T5P5#O;Z=V +M_<=N9[?3%N,9_#DY-Z&PU;1JBJU4RB;!V!T!<;GNER]O<[;*1);Z !J R\Q^ +M'/PQ:^5U&QAO;@X)+':99I+&?:-$NW]5DFWDGFLI8;U02MD8R" +M7C.M$S^_3^' DDY\%?'6#__5,MN])]J>UMY]N%Q!01RWN2HK%J LY4_YCCC4 +MQT?@IM6-4S7N+>AO=\)HHHHX8QI0Q-J5LJ:@0!Q]6'NZU<54'1ZN#3DQ1('C +M("FHY5Y>W$!&*K),:N +MAY?[MN%[&R"4QQ\E0T_3B$DF%FV*(.O!/K#,62IJ>?H.)NU9!70?6E\7T!B0 +MPX#^_&?8M:D,:4D"I)'B?1ADB6363%)A)4J%Q&K!UT+G;;X$BR-5H*4Q?2Z2 +M,[PZD4V\2.3F>-!_P,%K^"5B1M:7!ED4E:',<@W$-$(H! +M0^LU.%Y2+ 1 TL9 %6'WL-/@ACNUW!E7S>%/^>(Y/P*Z#6TO-0IJR)Y94PR? +MJ5NF@N[IV!=[L72WG:*YIDP/E>G)\3,[,SWQI[HXO8=J[_)N][:!I+*:V!>1 +M=3(2&-%]W*A_\.-GU8@R95P6H_FMMTL'MWD9+5[=5,4[L )%7C5@,R?3BI5; +M3T,SCH%*L$IFU6Y8I==((B#__6#N.YA!MZV<(6*YTK +MU&E-09*YZE8:<).6*'?63T=4E5(]GMV8$Z +M3GQYX>K3!@ZVY H5H >/H\<-6K>XK-)8Z+4%:18.-LAGN9"I%%'O-F13^TX.006 Q6G2 +M"%?**>4"@PK6@+0)BZ*1@1\!AXT$-U>-,SGGYJBM,1R80%6\R-0KRKGB6]17 +M4/$J$ DFOW1BU24L$N@6J!736@.)0)E6W2 1WC,5IJH5]->.(OZC(CMV X> +MSH,^>,S3>A9 8L[>6F0SXG[,1,$PB59&(!^*F&>X)!"29YDB@X\\35:",)BO +M.GEJ)'.N)=9(E#"SW.2HJ2,ZG+]N'2?@KLB3<=IM-VBJ7:"ZJ MQ&2&XUTOR +M=?W3AI?[3/>B:AE)[PM=TB@;:;ZTU6IC+6M\#4=0#):^G#TO&YS[8&M4(-JV +M['FKCBJWN]I6FZM$T8"1A*Y#R^P8HO";1Z&FJ/9 H\ ?'/ +M(X5-R/ )*]'(IGQJ,ZXM5F(T#2OJ^&NK/+CEAJN2 8NJ@FFD4&5.7&N&7H0> +M+1_Y= &Y<./+!L6)$\4/GUA@#PH/V82!Q_831QPZ =-34MZ<0V$!O39LSPXB +MGCPQ$_ ;]P. +M&J5V1.LJTH2:X \8FC)+1BH(I[IPU62A 2RBO \F.$>XR)8S,$U +M$A233,TK]N*XGP,[)!,$[$9QN%8>8#FN&>Q*0RM;UP "_,94Q$ZBNB8\62&ZA,4\:RH:^4YC].)6 +MNYGM2-A#NFP/^9VET+,%5,7F"B8T +],9:V8?^RD?1TW8^4U%/+7''XNCA;,HX^68AH.FR:7^+G0CCGC+9:G +MI,>M5!HU0>)IP\,35P6 MPXRH)'*GIPT#DUG;O+*0#4@>]QH,)HADAE%"J4)XK[W$81R_P+$@ +MY+Y H&1 X8&(R2.[+)EDV0I3+[<6H6#&U.3GX&N%LG()FOG#^8TKEAH$D(BC +MD&0)I6E:Y5]F)2%"8U>C"N?&M<3H5L]:.0MI*U4BA'+U84)%-SM_1F).<;>Z +MIXCT8BS&3%NZ00R/&93E"?PU&5&XZLN>"S?Q%;@N=@\C6JET +M973RE7H&J/4 /T8P9*PSM=3)RH2R< U33PH!_3XXMJ +MO45FR:O#+,Y\<2@9(OF72I]@X\<,FF+)YI))J:&F=,-(Z#[2/HH:?%F34^S" +M,:I-I0FMI9;^$]&-@#<1*:"HRK7_P"'&AN+<3I8\GMELL=JUM>P+)_]*EF#9F#$$ #,BN&@# +M9(P32HYTIS_7@:W&52<^&%AL!C##44(J#ZCAH%8PM;.H&0R&!(INQ +MO:;>I U4KQ'ZL.JE%KC*';ER"UK\6&XHI=R2;:8Y$9"N3 J1Z\(\9"NT<\W/ +M;7MKN2%S[AHM>8Y'$-2;J7E WR$MU#-!'>369T:JP%4:0\ FM@=&?/&>UG6( +M,W=2A,4"'=PT%G.1<72KIEED%&7UDCWA_FQ6_7XG-:6XMW2&[L[:>W@M]=A* +MM+O2VJ-7'E60HM!U$^]C32?VC4OX878]O2[;=B:/(TW-=[M;66VDMW,"32Q%H_,@)KFI3Q4T +MQ@?6RTNK>/XD6]>M[6FJF#EDC%793D0?>\<:;/4[Z%M_62BTSY4-/[<6IR+9 +M&;<7S@;-"28SGD:8(17;0WG8KP!R.9PS@$;6T1D+/ISY#B,34F0Z.UDHITTK +MX>C[<#9$!"Q*F1&K/CQPKEHF2*263CI.D5!'+]&& !N+AT8%6/EXU/Z,-"\@ +M,K'<]9TN=(ID?2,)),%CL9QH&K,^E=D/+5U !I0"E?3B:[F>PUMY"U"33 +M.@Y'U8L*;(;6[$C+[<.I*6B>A*T)I3EE@8C14N\-N8R1W 7*FAC[:N*\=.2EG(>NQ4Y[&]&U;CONTW;V-(V$EC'4H60Z7#!N(T^84QJQY$\BI +MN.DM$RJ#N?<;_MUMHN4:XD5C)'/7,(![GI7&A)5;MZC<(0VR!8YI@SQHCY**CU4&&:K;0:U91T?LCO@7T4T&Z/HNI9'DMW-0CU_TQX>@ +M82R28JO;'L6.SWNUO;&>>*&19K;4);60:7+(-5%)R;UX11R@W+/H?__4;MV9 +MW1>0M++%;1S2DF1Y+,B4'GG0_P"7&+^M_=%^K'BQ:.U=JW=]J.S[R[2I&:[= +M==-U:/\ =.KX<9[WKE?%H?!VK8[\J)U*=OME/8;I<6UPNF2-\P":&N8I7QXX +MHO3B_B>BQ9>:Y;"6Y4YYU)XZ<2/!FWJU=0>6&*71!L._*&"H_FKQ/JPQ7;%H/;?=YUA60:N69&6 +M+*OR9_I(,M-[,TAU9L.(Q7:T$/%!+?2Q3PZ'\RG*GH.%LE$L6BAE"[JVPK8W +M418LLD;]-_4*_:,%=66Y/=5G*-AO;?<+V';KV!YK]I-5M>F;08V%/>U4"J*> +M.#)2%*V,"MIKL=.?M/9=RVUX?S /(9 )TC=5C+BA*JW->38PX\=ZMM%:MKL+ +MFV#MN5=Q6:R;Y[;29);.S ZS!E!0U6JLAT_#Y<-[E9*SA,;5?M%OT[O=IWC: +MKW9;Y=##J&2U<*&,#GR*I-/.I;^+%F>MJY.5=ORA>K6I%==CQ;;>W8VY':U( +MZ<-OK%4D%/Q-3FO'WEIBWZ_+05N5J6&:S2SV)9+3,]^YE:A-G$6&M+M- +MJT%)^H5EC!R+%J$-=W"H0K4IP +M R]F&5D$ T>Z7BW&1)(-#XTKXUQ%F@B6639^Z[TPRVMS0+0M'2M2> SKEB*Y +M(<$/%7<9[;N;&2M3I(XGTX+,1U0^@W'K5+<* >(Q79(IM2"2_CCN[.1,BP\R +M>@@R;]VOWG,9(K:>WW2R32J&0+))'7/,@AM!^] +MCGWQJU>+U@TTRVHG28K8DDEVM&TNU[KYH9(LJ@)X+I5<"O1IJJXLVXNB\!4F;4 "!7@6 Q*9:]S6- +M"%8BH8 ^7ABV@EA3!>B&X- 6//3A]"I0/;3>%<*%R<>4K3$;#K4._,2M"QJ* +M\CE0XAC0A!W)NQCCTH_F9J+XUK3$I2+DM"(+24B)$#4( # #F<(WX"-"<'4@ +M!)(-!XFM.=,,F+ !+^7GJ3E3 ZR"OQ'=GO +MMC<>42=.6@JC<<5NK1?7(F&-!&[ZT;02 ,Z\<5\H+> 5;1NK5=Q3F3G@GT&= +M4-8]WM8M$$3:YG8 1K3B?'%M;-*3+>J+79JHIGYJ?I]F(MJ96QA :5;PR&*W +MZ$615I]KBVZ^O-PN[D3VSR%[;;@E*.174[G/G[BXI[>15K'YK&:N!6OL+(.X +M+HW5W=W#))(\9BB&9Z6JFG*GEKA^G552?Y:S_C.K1UM547MXWYW_ 'N)=>V= +MEL8+5)G'5N)0"Q< A2>2KPQYCN]_)R=:^U?YA>UV;7?I4L2W4,4@AT%:^Y4> +M4_PXY],=LB;KJ8'=)ZA2O4#VUQGECGM*YGE[N'61KR0T?__7NY^GNZV>[V^Y +M[5?0026Y!H(S5_O L&/E/ACA8LN6J:M6S-5[TMN/^Y=BO)Y5O+.,RM, +F*( +M ^8#WZ'QPV?%*Y);G5^V]VJ7&[^7Y;%*[EVS<;2PZMU;20QEPH9QD32N*,>- +MIMPSI9NSCR5BK5F4V2:/7F13ERQ=*1C)(*.&0#S%30>O%M7X%ML5^WMK?1[="PN 2Q:IS)PMF-5,;3S-'4UU'E_9EB)+DBM[ +ME(MYN,$6KRJ=3^L<,/72IGRZW2'%LH<*$'EIG^SEQQ4W):D$%%5%*FK#@#EE +MB4R >2B\1PXZN8/JPU7# 5W=6)%:*:T/B3BQ,1@#VJUJ::L\\ B1)!\S"X"R +MR!1Q )X>C"62+.36S&ENUPV32LP'Q&N7IXX50-R;+%V[:"6]C(I^&-9-.8X8 +M2Q%M#H%J2J 5!PVF:2@"!7U( =>>H4;'15>&)?%FK[=%K7?I4OW9M\9MEM). +MIKD9 KM6H)6JUQY+[GB5%!$P +MR7X1X5Q?2JR)M*+HJ;XN/!O+-T40$:C(P0 >GG[,51([<'__T.O,D=2"JMGY +MB0#0X\)S:<#HU5$CD=7:MM.I2Y5*JPK4*RT^)#C=T.ZZ7BSY*P3QU1R3N*'N +M+;-\N]NW*ZDNK>/2]LSL2K*Q)5A_AQZ#MPH:^5G7ZM^7X"=IEZFDCS<0?#P\ +M,\8*FQAEL"&4G, \,^/@<3R@B-"/<=F?698AJBEHQ7P/,9^G%A6M""*U6!2Q +M;S*,CQ Q#9252&D.?@%Y8LM;P4T +MIK+'$$E,B0/5A(+$B628L.(J:>7F?;B((8/,Y8589<]7HPR$D$E0&0L.&=*G +MT?IQ9PK1)-'&IX!J5.1\<2PE!D,#"C%:T]TUSH,1Q!,NO:= +MB8[1IY%/5F/D'/2/[\50F_P(L_!9H$(' 'PSPK7H5L)C8D>[E4TX80AB[NG; +M3>[4P05FA/4B'$Y..-U?N=W +MF:LIH68DZ-\7'(E[7NA!M\4,D-04S)\/;A.^UER.Q7Q<:ELG[AL[-HHI +MM;,U-16A"@\"<8J?:,F2KNM$/CZ]KUE>!T[I)$QX@CCC'CFES)=: IDU2J2: +MB.(L#Z6RQ/%)M>MRN9_94__1ZW=[C863AYH?^WD77#=+*=#*-JCU54XR-87K-Z_P"$6W6AQ/\ +M]E*^K2(MAMX,+!T+@32*H#* "%# FM,=FEU;#&KB#3TL;JVIDY'?2!&J*@#C +M3[<)4WV>IEEN,JR&LA.?EKZN>):(5B]]LZ+I1#<*'5^.=?L.&=X4B9&TM!W+ +M]/H!DU8X67;T07R),E>AR4'T\\3SD2(1?84C2,1QC2J !0 .' #"JR6B*FF&015 )RRX8 +MB1'N$);T/ZG'D +M7UK6SQ52TV>=[*XR@EGB643 !K=UT,X^%AXCTX2_5S)JMJVK?E[=/F*)2<_ +M_]+I^P=N70[=_([UWED@7_LKF72V@CX13X<,@#!4SKC@]CG5_+Y]/RGHJM77^WZ0#ZCBX7M*RC +MN9%EEMY2&>-@P(9?N^\.&-74S-JR>WZ1,*]S:7@Y!A:UJ26 +M5BD\D:\&:E*GQR%<#O!"1TSM391M[HDC R:@6/+PH#BCE.@F5^TZG>6X,D:) +M= .5U"W=4(<<" [ FOJPM\+2B.7Z=#FUO7C+JOXBG?4_M7;KK9&OD++?6@U: +M"^JJ'WA2II3CC1BPTI5?.N7ZBWJ6MRB/:SF_9T4<%P[2&DCB@SK13RQ7>TN3 +MIU.E;8%9E8-E^G$IF;*/8[=Y5()\O(<\L7YHH5' FJGC +MX?;BR!7KL$-N6V6\7FD4'U@<<-P*X;!XMYM[J8I9JUPP^&)2V?IIEC!F[-*; +MM%ZQ-;Z!=YL]UN&WS6UU:5BG0JRD@L*B@-*\0<\)3N8[-)%-^.TGSU.EM-?1PQTG9*K:*^I[;.K._;?M]I/VY"@M%F/34(N7AXCACR +MG2P]G/V76EG6E?GM^0T6[+Q^8(]IC*?A.]7$9$:K0*F=%TX]AT>ABQ6=Z^Y_ +MK_4 +MAFR.' PL^X;V2YN^WI;>V2YTZ]LZNLQ2US*L:ZM;#[N-]+4:2B5_N.7=U5I3 +M\_X;!PVN'\MEN/E+-*0LT[!7D.H*20&%2E?=Q]\V.C7MY;1[[ +M''-IDD6^U#(U^S'1OJ;:LZ'LMW(%J#G^W#8T9\K+!:[I&3,&H/ GPQ!/(77?;.U7E#-%P- +M2%8J#GP:AX'%.2G)-)\2U9K(.2*UM8!'!!T@O!(Z 4\<X +M%<;K=1/2(!.=:G/&G_K:QJV,J2<\[X[1W'>]R7>-OG6.Z4JTEKITZV7,E2/B +M/[V-F.:4==T,L"E.2]=H7EXNR1VJUCF;R/J]]0,B,8.AV8M]&GS6N[9/W:%/ +M9I%I8@?=YX]T:$"@CD873+4D!:4*MZ<>C>94<5^42N).DO?\@VM^ZHS<3JT@ +M"*NI&/#41G0>S'GON5WE[>)5^3'>EOY>0^/ UB;CW-'_U.AQKL ;4FY744M* +MJ.C&30^HBN/--XK*6[5_8;_^DO.G^H8)?;?UK9UWP$PDTZMLVIXV'G0E332< +M-A>.C;K:)^ [^UYXAJ?VU/.Z-JV6.Q;3 \TL\#&VG3W:$$C4Q85I^]C1DIA4 +M79;T5G2=*V5:5?NK;_:<)W&$1NZT KP'ABN4;V B1=0)XCGRPPA?>P]P,=R +M+=LDF'#/WAPPEO4JS*4.>^(YX5BOK)P+ZS998ER#4!&H"O'QP43U6R_W'!3? +MU6HGD6BTOYMS[3N-U6-HTN;:0SPL"I64(0Y4'X&]X8R]CKNV2N2JE-_\G_D: +M^OI>'ZG'[($7 89$-E]N-!V*E]V.,-#7GS P8Y\E68?0PJN9%2,^//CBYHRN +MQDY+KII5>5>."SA!417MG*68H=('(>'LQ4MR]6!H[F2$T8@D>GEA6P:D*CW$ +MFE*9'B3G7!(EJC&*]<\&'\-*X96@K=0A9=>;>&7[<-)#05"^D9'TBF7[<"M\ +M2(#$EIR_YX%!$F^H$Y#U8-!6126PE%& ->>)T'K:!=<;=6VC+6DQZB4!(1Z9KEP'ACS?;Q0^2VL>N^V]I9*^Y^^OM_B +MJ5UV-N6V2;1* 9D4R6>LYFF10^NN.CU;5O5T? +MYCA]_']+(LJ_G..[O')'>3Q,"K([*RGBN? XN>-UECM3G>]J_NU*Q#]1-T+WP2!4HI-3B$M1,B +M++$00IIBVLF6Q+(HH0?TG"VAD(K>Z7JBZ:%#P/F]9'#%-G!HK720$QNV?&N= +M,22>I%+04&1Q ,+@DI4$&GCA4V+9#*W=B!ED.'LQ-;%5D%QRE>=">7@3B;$0 +M%PR5(SS/$X%J0T%(6?'&3MX%DQNC\HM5M"G]V1M;[ZSK2A57!KE7T8\CU*)4=)Y<;<3=1 +MS5"6V(6[:352J2'+(>Z3C7>GMCXU&9__UNK?-[F89K)+EX9)U/RMR&)*2CW0 +M2?@<^4UQY;[1]QM:W#*_X1J65;)[HY;9_4?ZG#N#\BFE07FMHRLL:E@4X\=( +M_P V.SVJK'7D]?V'1HZ-PU5+^8=[QW?]4=IMVNWM[>Y2 :I9!%&K*/$"M?LQ +MDP9L>2T.L/\ MS5IQ]K5OX;6*)N.\2;M*^YR)IFNB9)-- -=:-04\<-G7NU +M+L3FHHE]XU!HN>9K_P #%:'0VV"0B2( &H/+A2N))>QT:;L_;NX!$9FO#,T: +M%HH40+D* B1SGP\,0\B5E^I_N\C/F[%JXU6*V4_J [[Z0[596,VXK\]%+91M +M,HFZ5'*U/F*AG9(S$IF#0\?3BMR]Q=BH;B4&Z7#!!KZ\-+96$(YT@4('V8EV00%HX.="3]E:>-,2G C"8V\PI6F>? +M/#+"I')D .1!%/\)'+&>N.4_@7MP?_]?L$FWJ +MP++<0@'W=6M:>TC'@J=&'RIDQS/MU+[8+[05_N_LI]TO[3?MKGCCW>UHMQ-% +M(J9C))*MEJ^$X]6LM[XTEQM:IKZGT8=,_)?I(]TVGZFB/7;W)-%"D2+;R9T +M.>6%6?*DO96QJIU^D_SV3_F.?3]C;]&IC,?7N7D9GI154MGR-./AC)GSVM=N +MU8LS5]''1+C;DB2#Z9;G/(#<7*QUK)+Y75_,8;8)G]XD[J[E +M$G;>X1/;L-<10$-P8D"N-^/L)KXBXNJU=.3C5AY9:_H/I/ XPO8Z$%^V-,EH +M?"E<\$%.71%C1?)Z<6<=#,8VFIR]G[,)<$5;<<]RF&7O +M"G_CUXA2%B14-*Z>'+/!$D,)MU!TU]F?+"6V%>X;"V?KI0YX$Q;(+5A0'B3R +M-?7P&)33$@G$HR44R]ZE13EATT(2I.0!Z^.8R.&JB&$I.#ZAD3F<,EJ*R47N +M9%-5.=:#T8<()$O5;55=-..&6Q!%N.WQ;QMUS8R "1@7MI#Q$BBH_P"H983) +M@611Y(^HZ-61Q:5YVODA0E3'($.==08T(KC%BZC5'/S/VFJV5.WX'__0N^S[ +MKW/"8HKA)'?H%FD(+HE!Y5"BNK/+'S_)CQ3H_P QWNQA2AKR-!W-HPD[SG=>WYSXL@'M.'JWK\"["O<M4CGD1Z\0TVAV=!V*8 +MZ,Q2G/"U91E+-$"RUX\LS3%VQF,E H,N&%=M02*ONECN275Q>B O8ALW0ZBM +M />4>8#&6_;Q\^$\6;<;324ZD$-PC>8'(CT$XMV&:U"8V5_BV93=:05>3Z-7PE6:'>$,K-JE,D +M1%#7BE&/V898;);A]:OH?__1O'=.^?EDLCQ69B69==A=13L"=9H^J-N!7-2! +M\6.#FZ76XULJMS_J.UU7ER4U=72OS5LO>)MOWI505 \IH2#GGBE*=35:D[#^ +M/=K92<\_MP]65_2(QO%:5-?'E^G"VN,L8!O7<*V +M.WO* &=B$CU4I4^ \!A%J]2RF)-ZE/B[WWM&+EED6N:E1^BF#A)9PJPC=^[8 +M]VVL6W1,,NL-6H92!7$)-3\2:TCR)MNB#7(!S8D9?\L3;8@Z!M,86)2.7+B< +M+6I3D'T50@)RIRPYG@\$L>O37CZ<1$DQ!S'=/J;NUANUS' 8WCAE9%JOFTUR +MJ01B>QTZ9-R]*K6J%UQWMM]T3^/3>I +M8LFD/486'<]O<1ZASYC%KI TR.K3=4)!(RIG7]&%=$'&1Q9)/>9P0R2 <2BE +MA]HPBI.Q5:%NQBFP;PQHMI+XBH"CT<<6UPV?AE3RT7D-@[5W9DUN8XS7W"U2 +M/L&+*=6WDIMV:$R]O3(M'O(E(RT@$\/TXEX$M;-+]I6^W4&N=GZ2.4N%E9 3 +MTZ,"?57"+@W[;*S_ ,0/MU6Z@&M+6\GF*2PM!$/]1QF?9_?B>Y&&LMIW?Y/S +M"4[:MLM!S;;?:QQ\684S8G^S&#_^S)\M.*%MVZKR136[2G_MKM8 #DRKY@13 +MFU<=KK5X5]^/-:QS\F>UGI:L!D5OT_N_O$XTW5MW/_2L7U)[B:_M+.T2WCB".\A* ZB6H/_ ,6,G>Q+ +M%CA?F-_VQVLVV5&SN9470QTCQIPICE))G8D;QW-PB4J2!Q]6"/0AZDK;C-TL +MV!/,8BS(6- +;Q,CY@G3Q]&(T\#-"S>]QDNF2,ME&*Y\:D8MK6$*Q3I.JNFH +M/+G0##-"FVMD %17[I/AQX81C2%;/K%TO//, YG/CBNVPK.C[14J*G,@_P#/ +M!1MHSY!FTA5105RK[,.TBI$7S 0.YR"J3]@KAL=?<@LS@&YN\EW/+2O59C3P +MJ<:GN7W0JD9PU!5/1PS]F&K63/9LL_8O9?>.^S:MK@/RH($MU)Y(@:YT8CS' +M^'5A;)/1:DUR<=;.#OG9WTIL-OC2;=IOS&Z&9CS$(/++)F_Q8BO7\V93D[C> +ME=/]1>C###&!$!&%4 * *_7^W#_4/6T[D=RB>:2)( +MXW045R.&.13[A@M?EG3C\N/&6WQWB*BN".5Y#(TVNK'1)R('''I>W]SKCP(%4K%I?IY23N=,8;PKGJ_PX\+E^X9+W5DWSD[%,"588 +M!)O%DR,[3QQ1T +".714GAJ QZ3[?\ :!V9!_$%TLOM&$[?_Z#O<'=KZ..S_F+L?0QKQR_B'\*[:MLX@5/ +MEBIZI'O:*9U-=6/)9?NG9R95>UVW2RM7^4VK!5*$C__3D[IEK/#4C)30\:G& +M?[MLCI_:=F*[8Y@\0>/LYXXV-HZS0V@D$B%&.=.?V8N@1L\Z6EAPJ,O7Z<"T(@'NBP8 +M >84SH*YUPEK PO9%_'!())X4XY82P,Z3M+$0J1]G/$T1GR#&0G2 !0CX<-9 +M:E0'NAE_+;I8$!F>,HG( MY<7=1T+5TFW"$WLBYB.1CH/\0%,2\2*'VK/8Z#!;VMI#'#!&L, +M$8"QQH JJ!R51AE5+8H=O+)DO%!\O#TG#<1.1'+= T)H !F3B4B':1!>W<8D +M^[_4';[F=[#; RVJ-HFE04'2CJ6->6K/'I.[]MMELZT^3$ +MO;7]5OU6(PVX*;:VL,+'>H[2RBNYE"SS*'M8"-71BX*%7_S&KYSCRG]':^3C +M39/WW_>_\3>VO)DDNZW$D5R)@94?64JP6G(:>?[V6/6TIG^A]/ZEMC&L6)6G +MB,OSO;1,D^XP?)WH\HW"$ '_ !FE&7^+'E^Q]M[-$Z_^RALK9/1>Y#&6^A01 +MSRN(]8K'N$/\IJ4 URIGQQPVM(.V3LY12:Y_VXE.!8,BO'+:=5#SK +MS]&)8027MWILM-:O)E4T]N"DMD-B16S\AX?9BSSH5DJ!@0)"!6N?]V%8<40R +MQ=0^5:C(9. +M6)T96PK;=NM[QW675HCTDKP#'P]6-_342S%V;P6->E!$J1+H%*:5% !C9$F- +MLWCE5$UD449 8&@3()+NIK7+,T!X_JPI#;9''< \_7B9"!9O6Y:-OE"'.1=* +MD>)\?9B)U_ ?&M=2M[IMF/[HVGR1NY/-. +M:K+4>5O+1LL>-KV,KMP7R+Y-#=]!-IE&GVVW6YL=LAB6-[V8S7##X8E\VCA7 +MSTQU5V\M:Y+IN*U^G_$:/I5;_ L$=G\UNQNBVI8P!$N>5,O[\:OL^1_0X)>3 +M/FHE:1_%&03P.0]-<=G%7X&:Q/=;=U8@KIF>3#EA_HIH178LAL9;-'MHLK6X +MJLD'%:/D[9>QS69E%2,QJX#%-E#@NIJI'VS%#.FD9*?,1R +MIA+I =#VN:+IJ*$'U']F!59GNQJ&BXMQ(XD8LCR4L9;1^':RRKF"]*^H>&-_ +M5KHSG=E^Z"6WONLXH#6OF#0:/A!X#GBMZEU:@13E]K''F>OBXJ^3]'M_F.DO0KM]9[W<=SMN%H>G +M86Y$8E:H ""AX\:U/NXV8.0_Y8 +MZ74Q*M5!GRN6,K6J,K>\JGEZ\="K\&:Q<$$-W:*DHJ2,FYC%]3.VT)+C;REW +M'$S54LNEN5">.(==1E;0_]:W=U6D[;&;A%!59%!/@349X7N1;&UY-'V]_P#( +M4E11C4@L>/IRSX8\]'H>@W-920/6:98FK2&D$-QHEU 9+F%']N+:ZLJDC^8U +M.5>M2:Y@>L9X=+42T,;[#?E1<6PK1_.F?/@PQHPV:<&3/360/>=G@OY5^80N +MH-2GCZ\-Q6?LX8S +M.&RUE]LHE5 ,Q3D!Z<-Q9GL&%@H%6-.1IB'HX$8R?5:;)$*$/-7/C4'/'6ZM +M8I)R\CY78+LD\AO7+$]-06;+[N+-6R,BT%V[;B9)U(Y$MPSQ7FO ^*NA$NY# +MI,IJ&R PO(G@1?-5C*5SKGZ<0VH#B1&3/RFII6OJQ6V6H\;SJP;G4:?[\8>[ +MU?JT:\CX[05#<5U7=\)$U$4C7^$4J*8ZWVO \?72_-:K.;V,DY?P/)=\BCN3 +M>K&.FNB&-20M*+GF:\#CA_\ 6V^D\3?&S;L=+Z^SW&4-R+G:[)(R";IP'IX9 +MLV.-U<"^NY_*:[6A%B1H415&9 R'JQZ;#1)&"UB97HA(\I&8'/CC15(J:8SM +MMT=45:Y<^/$8L5D5.IO-N$CF-B/,K @TPKC[,-R) WB9JTRU75L5LY\HKE2CQ-Z-:%E]E +M<9>U5[FKK73E>0GM6QD_F9T)J,9)EE]F7:.$!5RJ3XX=N$9^1M<[7>G;I+Z- +M";2(Z99*KY6) I2NKXARPU<;:GP([J8\D^Z2O-MD4NH PBE%-:@BG/'7QKV: +M',JXL [8MY+:WKQH*)& SLRHJ*2*LSL0HPN-2Q\NZ0NO;+<(HUN9$!M6;1'. +MC*Z,U":!E)KPSQGLG!?=8YMWMHRUO9B +MEVZD#B*@Z3[Q&(S]G-CP6^G^4K^C2U]2HV-@C/>1RQZXY&*4899D_I&.7FSV +MRVHDYM\UC92BHAG:1I;+&*BD TQUY#&K#U*U;MZBVR2%':IKGBQRMQ(0=&0TX\L\3DJK$]>T73*&Z+I&="*\O3CS.S/2SH12 4K3 +M*HJ>?VX: D'=CP4'36G'+#U4$,B-P5S8ZO1^G#"M'L5XQ-.0]TU]7+%E4RMH +MZQ]*9A+M/<^MPJ_*+J?,A04FSRSRQT\>S.7GW0GW'N/;8NPK3M;;V>]N;NX! +MDNF0QQJ6D# 1AO.>0K3%':M_QP6]>LWY>A=-N[-VFPW6WV 1L\GRO5DOBQU] +M;/@ON:,O=T_XL4KKU5^'P^8+9[.O+X_*&V.P0OMYE2$70ABL@133\. +MA U9:O-[V&KA3KI[H?N$MEA^@-MTD']&[P9HVDBCN5K%7030QT4G.GIP_62X +M/\2,[]R_ 5]Y;;9;=):K:*8X+J%9ND6+:6)Y5QKB-C/75@-AW/VSL^USV?>TMSO[>!W +MB=2T;S'I*=:>4UJ5U#W7TJZXIMB6GH-6Q/T>V1]4I^P?E9ZRVO6AOS*2T.31 @.CI9:XG=[N>:Y2V%K;!1H:,,R]23S*[^_\ =TXA4JDI)ERQ +M&/J&FR[5W?LMO.EVIEACVZZ1P4E42Z'=2.-8M)RPMHAK>1E26F4J7N^_DJP" +M+7/(<^?#&7%UL>-^U%CE[B]][WE]3+.%J#44RQ>A>($LT\[LNX74O1TDL(0H +M-1R%<6U;%:@42=%2ZCJ%:FA<\@X=NHPHQ-U#S_Q826%=RD7/=?:H=T3>+*@/_P";$+#D\I_W#O-3U7]X +M/+W1VVPRW6SR-/Y\>=/\0PRQW_2R'FIZK^\''O'P^W#?2OZ/ +M^XCZ]/5$D/S*WEIZHNO9OU5[-V#;]PM6N[6 +MX?=(Q#,_SL,850&6JBC_ '_B.-V.4H@P98;W%I[H[.>6V1=[L$CB?6&-W%7+ +M,5-0,4=Q6=$DG,EO6NDW+1TVS^L/8LEW'N$^^;8NY) ("YO8!&3]_36NK/AJ +MP4O=ODZOE!6ZUB)]I%%]6OI_8S17$>_6#7,>O6T=] %EU,3205/"N%2=7*K: +M?]0-)Z2A9!]7NR#M6XV$^[V+/N$YE>=;R &JG)3R\OCBW K*KE>1,K4J'L> +M=Q_53L7=VMF7>-OA^6CZ0K>POJ X'X:8O;?H5II%([Y^I'9)V%=HDFM=UANI +MTG>6VNT66 Q@@-&1K6IU>82+I;_-BV/9^T5/4K.T=_[=(=F[0V1RFVS;U;7U +MRT\R33SSF1%0!8PJ1HH'N)J9W\S-BO4LT.B_4_ZB;!V3]9=QW4V/4W^.QBBL +MYI;D);_C0@=62(H78HM4_#DTM_%@>XM=5NYOK/VMW1MEA)OFU6]SW+80?+IN:W +MFB%UY-+"HJ]&\^CJ:=?[ODP/7P%87DRP^L':EQV39]K]RV,.Z)MCE]KNXKP6 +M[QJ:^5R QTBNDZ?>7^'5A=8AHG293%^V_47M"#8=]L+S;]ONK[=2ILKWJ1K\ +MH!\,8(+ +Q72R_OZ\+K#T&;4[E;??-HJ +VWI_\ FI_;A55^@SNO4P[]LQ-! +M?0TI05E6GZ\-Q?H0[(FM]]V!6EZE] ?(=%)5'GRISP*KE!R4 $FY;.SL!>V^ +M?Q&5/U@X>&5IHT&Y[2"2;V#Q%)5I^O!#"4;'=MK"BE[ #SI*E/UXF&1R/__2 +M^5, &8 +[](NTME[GO>XK?=(6E_+=BOMTL],IB'S%HJF-7.0Z;:O/[O\:X ' +MGZD[='<&[VUW.&MH@G\WY:[T]*>,(5?RO(J>9.LV "N2_ +M2/ND023V\EG>PZ+V:SDM9Q*EW!MBJUW-;,!IDCBU\]/49)%CU,F ":'Z+]YW +M%K'/;"VGZVWV.ZP1)*=;V^Y7'RMN &51U.MY75F73@ L'9WT1E_KCMW;>YIH +M+C:=YOK_ &QULIG$HGVY'$XU-&JKTY0@K\?P^7 KVGZ+;G<[REI>[C:6]A/ +MLMUO]K?1.\R26ULK@J-*5UB1-,E5]S4Z=3RZ@!%VGV,N^[%W1O#[C#:P=MVD +M=P582$S--.L* 41J+F?WM6CR^\R 'G<'TV[HV';9[^_BC"666W>PW>S>^L9HG=PXCE6%H/< +M_P#<"5PG3_S8 '$/T.[YEW>VVI4MA=7%^VTR5E\D-^ML+OY>5@IHYA.3)KCU +MJZ:_+@ K7<7:&Z[#9;1>WK1-!O=LUW9&)BQZ:2-$P<$+I8.C8 +_ -V_2:7; +MWL-U[5NX[2*#9MHW7:29C^&LVN,N,X2LB>;][ !G9O9"]P[1W+NDE]%9P]NV +M(O&20.6E9Y5B11H5J+5O,?X/WF0 N'U$^B5W9;MJ[31;G;W?:;061GZETEWN +MMLLD88$*-$DFM4\WE^+R^; !1^Y>Q=Z[=O;.VW$Q!;XR+!<(S-'JAG:WE!\H +MD'3D0_!YTTO'K5EP 7+O#Z6;)VW;6SSW7S#R[G:;;*MO)('&BT1KX@RPA*_, +M2KT_NI][S:0"O?4/L_:]C^J6Y]J;=*T.WVMZEG!/6WLK'M.>WL][W3=+W1&QO6I!*VN)%BTFJ3:6==7N8 *K% +M]&.^YH[$P6L545\ %?[F[4W7 +MMRXMHK_0RWD/S-K+&25>/6T1R8(ZE9(W72ZK_P!++@ 38 ,P ?_3^5, &8 + +M'V5WO?=I3;I+9VEO='=MOGVJY%SU*"WN@!+HZ;QT<@9,=6G ^'UJ[F$:VXM +M+(6$.R3]N6=D$ET0V=SIZKJW4ZC3OH7SR.Z_N8 -H^J? +M_L]ONW5C+!!N@ ND2C!#JH2C.K-'K?3\.D <[5]:MR&WV6R[GM]F^VBRLMFO +MKQ4G-T=OLKOYF,*%GC3J)5AD$U_%][ XW_ZQ[#!W%M?=7;U@_\ 4&UWMU+! +M'=7=W>636]RCABT\K_8]IW_:H;>"XL^XK5;2\68/5!'*) +MHY(BC)1T=?BU)]Y< #'N7ZI=R=P[7=6%ZL*G<9;2XW6YC#"2ZEL;?Y:!GJQ5 +M:1^9Q&JZY//@ S>.[6A[+VGM3;-R>]L+>X_-G+PF%[>[EB1)+=26;7&DBN^I +M?(_E?WO= &Z_7GO)-XM-UCBM$N(-T_/+I-#E+F^^7%L7D&ORJ80WDBT>:1V^ +M[I *[WAWU>]SVNT6L]C:V-OLD$EK91VHE_E22M-1S+)*696=O-@ <3?5;=]W +MA&U[AT=OL[ZRL-CW'<;>)Y)EVRQ=2JK&TFEG\NN2FEI=.CR>; H[_[MN^Y- +MUM6FNOG8=JLX-LM+PH8FFBMETK*ZFK:W_>\_NZL _;/>5_L&W[YM\%O!).'JJB194>,HR$.CH..I?O+@ M5]]=^Z[EYYHK.RM+J:YVN\%Q"LV +MI)MF01VI4/*ZT*C\4,K:_P!W !5^Y>\)-\[F;N!=NM-MN'G^:E@LA*L;3L_4 +M>3SR22+K?X4=53_3TX #-^^IO=&_36K[K,;F&UO)K\6S23&)Y9Y>J=0,A\J? +MRX].G1'@ #[I[SO>Y.\;GNJ]M8(KV[G6YGMX>H(2ZTX!G=PK:?\ S, #C??J +MYON\Q]VI^;O/N,>WVVUK +M.S2-:68DZ0=V+.1U7E?S,>&O2ONII7 JP 9@ __U/E3 !F #, &8 ,P 9@ +MS !F "Q=H=G7'<2[M<=<6NW[)9MN&XW&@R,L0D2,!(P1K8M(/B7RZFP /%^E +M0.S7F\G?K)=K6]O+#:[YCTX;N2R@ZY8-(4,:SC3% -+NTK>ZJ>? !;N[_I%M +MU]3RQ_.[K$297U,H2,:6DF>OE_P!.-\ $5]]+-IWC +MLKM)]KD@LM_EV;=MQN=*,\=Z=MN7!K*&THW00])M&F3X]/O8 *-VW]/+W?>T +M=Y[DMKE6BV74;NSB7JSI&(C(LTB!E98'=>CU5630_P#,THNK !94^@N[_F4. +MVR;E$ETE_M.V[H!&S"WEWJ'JV[*=0ZRQ_P N;W//[FM< &UC]!KR[W'8[$;S +M#&V^/O444C0MIB?8W99-=&]V;02K#W/NX %#?3/:OR-M_3N6 ['+,]G8W[VT +M\:RWD-E\W+"ZMYX@&(MHY-+=67S:>GYL G>WTUN>TK2/Y_E*^A-,ONZT\^ "F8 ,P 9@ S !F #, &8 ,P ?_U?E3 +M !F #, &8 ,P 9@ S !F !UVKWAW!VM?37NRW(@DN8)+2ZCDCCFAF@E%'BEB +ME5XY$:G!EP $0=_]TP[%?;$MS&VU7\YNY;9[>!UCN"N@RV^I";9S'Y*P=/R8 +M &'^[O?A6XC>^BE@NK*VVV>VDM;9X6M[*ORH,31F/J05_"FT]5?OX D^HO> +M";5#M:7Y6UM[6>PMR$C$D=M=/KN(EDT]33.Q_$\VIO=]W5@ !VONK>]JL9K. +MPF6".=9XWD5$ZNBZC$,Z"6G4T21J%9-6G_%@ 8O]3.]F^4/YFZRV<]I=1S*J +M"1Y]O3IVDDKA=4K6\?DCZFK >_UF^H37UE?"_A2XVYKUK$I:6BK$=RK\WI4 +M1!?QM3:M0_AP )ML[X[EVWMV][__WAO8EGM6V +MO87>X6R]DQ=S;=%(\<;Q37 +M05-#E497:,OJC;3_ (6P >CZ6=E7VV["JK>6CGLVZ[FO;B.2-VFF@E75J9@"L]U_3C8=GCN'M'W2\-YM.U;MLHCA21(3N3 -#N$JZ1&1[ +ML#HJ]5]'EP -I]HVL7DVU,J+#+>;;V;;3Q(@>L3I+N=PA8$=3KZ0'][1<:?= +MP ,[K_[?]DFWRPV[:=QNV$FZ;WMETLZQ&20[+&908 E!JGITU5]7F\_[F "N +M6/TY[.G[>N^Z9+WXM&FD>5,NI#'/3T^MJ9O)IT +ML "]A_3?;-[V[>SO;WFV;EM-M;;M' ZK"LVU-*JWW6%YO$ !7]2OIFW;/ "Q; +MC]%]@LNZMQ[:?<+P;AL-I>7^Y,\:+% +M#R+Z.]N0MO%Q?7]V]G8[/M&]VT=OTA-IW5HU:"4L"NN/J^5Q\/GZ?FTX _J +ME])MC[2V6]OMNOKJYFV_N";89UN%C"N$MDN4E31FI"OTWU>][_D]W !RS !F +M #, &8 ,P ?_U_E3 !F #, &8 ,P ..U?ZM_,V_I;YW\SZ,NO\NZO6Z&G\6O +M2\_3T?S/AT^]@ <__P"M?.K_ /6OG?RHZ?\ W/4_)Z9TY_)4_P#T< %U^CO] +M:5W'\P^=_+OZ4WC\C^:ZW2^5\OS'R5?+JU>[H_#U^_@ I$?^ZGS>X]/\W^8_ +M['\UT]>M-:?E_7IEIZG2^4U^7W.E@ 51_P!7];;NE\[U_G)?RO3U-?SVM.KT +M:>;YC7T=>G\35T_W< #RY_WE^:LOF?S[YK\QD_+]?S74_,_]7I5\WS?_ )NG +M\7[^ #2/_=[YWN'I_G?SG3__ +1I^9U]/E\Y3X>.GJ?X< "WGK];5^5:1TJ:O_V>G3H_TL &NT?US_5%I^4?F/\ 5%(_DOENM\[IZ(Z> +MC3^+IZ&G3\/1_

?EWY=-[WS/1_*]:]?CY?D^IHZG^CKP :7_\ NQ\QLGS_ .<_,?+G\@Z_ +MS&KY;0:_+Z_]+IUU:/)TO_3P 1VW^Y_S.\?+?F_S&F#\]Z?7KHJ/E_F:?!73 +MT.IY/=Z> #.Y_P#='Y"X_J?\X^0^=_[K\Q^8Z7S_ $Q_,ZOE^9Z5/>_%Z?[N +/ "IX ,P 9@ S !F #__9 +end + + + + + +http://ncc.websx.com for more free pics of this, and many other celebrities diff --git a/uudecode/Openfile.inc b/uudecode/Openfile.inc new file mode 100644 index 0000000..fef0bca --- /dev/null +++ b/uudecode/Openfile.inc @@ -0,0 +1,178 @@ +;************************************************************************************* +; MODULE: OPENFILE.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE HANDLING MACROS +;************************************************************************************* + +HANDLE STRUC +PHANDLE TYPEDEF FAR PTR HANDLE + HANDLE@@mHandle DD ? +HANDLE ENDS + +INVALID_HANDLE equ 0FFFFFFFFh + +CREATEFILE MACRO pathFileName,access,share,open,attribute + push 0000h ; save handle to template (null) + push attribute ; save attributes + push open ; save creation flags + push 0000h ; save security attributes + push share ; save share mode + push access ; save acess mode + push pathFileName ; save pathFileName + call dword ptr __imp__CreateFileA@28 ; call create +ENDM + +READFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesRead on stack + mov eax,esp ; move bytesRead address to eax + push 0000h ; save overlapped structure address + push eax ; save pointer to bytesRead + push sizeBuffer ; save length of buffer + push szBuffer ; save address of read buffer + push hFileHandle ; save file handle + call dword ptr __imp__ReadFile@20 ; call read + mov eax,[esp] ; move bytesRead value to eax + add esp,04h ; remove bytesRead variable from stack +ENDM + +WRITEFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesWritten variable on stack + mov eax,esp ; move bytesWritten address to eax + push 0000h ; save overlapped structure address + push eax ; save bytesWritten address + push sizeBuffer ; save write length + push szBuffer ; save address of write buffer + push hFileHandle ; save file handle + call dword ptr __imp__WriteFile@20 ; call write + mov eax,[esp] ; move number of bytes written to eax + add esp,04h ; remove bytesWritten variable from stack +ENDM + +CLOSEHANDLE MACRO handle + push handle ; save file handle + call dword ptr __imp__CloseHandle@4 ; call close +ENDM + +FOPEN MACRO pathFileName,sFileInfo,access,share,open,attribute + CREATEFILE pathFileName,access,share,open,attribute + mov sFileInfo.FileInfo@@mhFileHandle,eax +ENDM + +FCLOSE MACRO sFileInfo + LOCAL @@FCLOSEend + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FCLOSEend + CLOSEHANDLE sFileInfo.FileInfo@@mhFileHandle + mov sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE +@@FCLOSEend: +ENDM + +FREAD MACRO sFileInfo,ptrByte + LOCAL @@FREADreadError,@@FREADsimpleRead,@@FREADdone + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,00h ; is buffer index zero + jne @@FREADsimpleRead ; if not then just grab next byte + READFILE [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,sFileInfo,MaxLength ; otherwise we fill the read buffer + cmp eax,0000h ; did we read any data ? + je @@FREADreadError ; if not then we're done + mov [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,eax ; move number of bytes read to buffer index + lea eax,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer ; load buffer address into eax register + mov [FileInfo ptr [sFileInfo]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer + jmp @@FREADsimpleRead ; grab next byte +@@FREADreadError: ; read error sync address + xor eax,eax ; set return code + jmp @@FREADdone ; we're done +@@FREADsimpleRead: ; simple read sync address + mov eax,[FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov al,byte ptr[eax] ; move byte value to al + mov byte ptr[ptrByte],al ; move byte value to user buffer + inc [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; increment along lpBufferPointer + dec [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex ; decrement the buffer index + mov eax,01h ; set the return code +@@FREADdone: ; done reading sync +ENDM + +FWRITE MACRO sFileInfo,ptrByte + LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer + push ebx ; macro uses ebx, must preserve it + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength + jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer + lea ebx,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer + WRITEFILE [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,ebx,MaxLength + mov [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,0000h ; set buffer index to zero + lea eax,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer + mov [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEsimpleWrite: ; simple write sync address + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? + jne @@FWRITEuseBuffer ; if not then just use it + lea eax,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer + mov [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEuseBuffer: ; use buffer sync address + mov cl,byte ptr[ptrByte] ; move byte to write to cl + mov eax,[FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov byte ptr[eax],cl ; move byte into buffer + inc [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer ; increment buffer pointer + inc [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex ; increment buffer index + pop ebx ; restore ebx register + mov eax,01h ; set return code +ENDM + +FREADLINE MACRO sFileInfo,szBuffer + LOCAL @@FGETScont,@@FGETexit,@@FGETsetError,@@FGETScrlf + push edi ; save source index register + mov edi,szBuffer ; move address of buffer into esi +@@FGETScont: ; loop control + FREAD sFileInfo,edi ; read a byte + cmp eax,0000h ; was our read successful? + je @@FGETexit ; if not we're done + cmp byte ptr[edi],0Dh ; is the byte a carriage return? + je @@FGETScrlf ; if yes then jump to handler + inc edi ; increment along esi + jmp @@FGETScont ; keep reading +@@FGETScrlf: ; carriage return control + mov byte ptr[edi],00h ; move null into line data + sub esp,04h ; create temp var on stack + mov edi,esp ; esi points to temp var + FREAD sFileInfo,edi ; read line-feed into temp var + add esp,04h ; restore stack +@@FGETexit: ; exit sync address + pop edi ; restore source index register +ENDM + +FWRITELINE MACRO sFileInfo,szBuffer + LOCAL @@FWRITELINEcont,@@FWRITELINEend +@@FWRITELINEcont: + cmp byte ptr[szBuffer],00h + je @@FWRITELINEend + FWRITE sFileInfo,szBuffer + inc szBuffer + jmp @@FWRITELINEcont +@@FWRITELINEend: +ENDM + +FFLUSH MACRO sFileInfo +LOCAL @@FFLUSHexit + cmp [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,INVALID_HANDLE ; valid handle? + je @@FFLUSHexit ; can't flush invalid file + push ebx ; save ebx register + lea ebx,[FileInfo ptr[sFileInfo]].FileInfo@@mszBuffer ; load buffer address into ebx register + WRITEFILE [FileInfo ptr[sFileInfo]].FileInfo@@mhFileHandle,ebx,[FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex ; write buffer to disk + mov [FileInfo ptr[sFileInfo]].FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov [FileInfo ptr[sFileInfo]].FileInfo@@mlpBufferPointer,ebx ; move address of buffer to lpBufferPointer + pop ebx ; restore ebx register +@@FFLUSHexit: +ENDM + +FileInfo STRUC + MaxLength equ 800h + FileInfo@@mszBuffer DB MaxLength DUP(0) ; this field must appear first + FileInfo@@mhFileHandle HANDLE + FileInfo@@mBufferIndex DD (0) + FileInfo@@mlpBufferPointer DD (0) +FileInfo ENDS +extrn __imp__WriteFile@20:near +extrn __imp__CloseHandle@4:near +extrn __imp__CreateFileA@28:near +extrn __imp__GetLastError@0:near +extrn __imp__ReadFile@20:near + diff --git a/uudecode/Release/Uulib.lib b/uudecode/Release/Uulib.lib new file mode 100644 index 0000000..3da0811 Binary files /dev/null and b/uudecode/Release/Uulib.lib differ diff --git a/uudecode/SCRAPS.TXT b/uudecode/SCRAPS.TXT new file mode 100644 index 0000000..fd011ca --- /dev/null +++ b/uudecode/SCRAPS.TXT @@ -0,0 +1,163 @@ + +#if 0 +BOOL UUEncode::encode(const String &srcPathFileName,const String &dstPathFileName) +{ + int ch(0); + char readBuff[45]; + int readCount; + int byteCount; + char *ptrBuff; + String outLine; + BYTE chByte; + + if(srcPathFileName.isNull()||dstPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileHandle writeFile(dstPathFileName,FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite); + if(!writeFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + ::sprintf(outLine,"begin %d %s",644,srcPathFileName); + writeFile.writeLine(outLine); + while(readCount=readView.read(readBuff,45)) + { + ch=chEncode(readCount); + chByte=ch; + writeFile.write(chByte); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + ch=*ptrBuff>>2; + ch=chEncode(ch); + chByte=ch; + writeFile.write(chByte); + ch=(*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F; + ch=chEncode(ch); + chByte=ch; + writeFile.write(chByte); + ch=(ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03; + ch=chEncode(ch); + chByte=ch; + writeFile.write(chByte); + ch=ptrBuff[2]&0x3F; + ch=chEncode(ch); + chByte=ch; + writeFile.write(chByte); + } + writeFile.write((BYTE)'\n'); + if(readCount!=45)break; + } + ch=('\0'?('\0'&0x3F)+' ':'`'); + writeFile.write((BYTE)ch); + writeFile.write((BYTE)'\n'); + ::sprintf(outLine,"end"); + writeFile.writeLine(outLine); + return TRUE; +} +#endif + + + + +#if 0 +FILE_SHARE_READ equ 00000001h +FILE_SHARE_WRITE equ 00000002h +FILE_SHARE_DELETE equ 00000004h +FILE_ATTRIBUTE_READONLY equ 00000001h +FILE_ATTRIBUTE_HIDDEN equ 00000002h +FILE_ATTRIBUTE_SYSTEM equ 00000004h +FILE_ATTRIBUTE_DIRECTORY equ 00000010h +FILE_ATTRIBUTE_ARCHIVE equ 00000020h +FILE_ATTRIBUTE_NORMAL equ 00000080h +FILE_ATTRIBUTE_TEMPORARY equ 00000100h +FILE_ATTRIBUTE_COMPRESSED equ 00000800h +FILE_ATTRIBUTE_OFFLINE equ 00001000h +CREATE_NEW equ 00000001h +CREATE_ALWAYS equ 00000002h +OPEN_EXISTING equ 00000003h +OPEN_ALWAYS equ 00000004h +TRUNCATE_EXISTING equ 00000005h +DELETE equ 00010000h +READ_CONTROL equ 00020000h +WRITE_DAC equ 00040000h +WRITE_OWNER equ 00080000h +SYNCHRONIZE equ 00100000h +STANDARD_RIGHTS_REQUIRED equ 000F0000h +STANDARD_RIGHTS_READ equ READ_CONTROL +STANDARD_RIGHTS_WRITE equ READ_CONTROL +STANDARD_RIGHTS_EXECUTE equ READ_CONTROL +STANDARD_RIGHTS_ALL equ 001F0000h +SPECIFIC_RIGHTS_ALL equ 0000FFFFh +FILE_READ_DATA equ 0001h +FILE_LIST_DIRECTORY equ 0001h +FILE_WRITE_DATA equ 0002h +FILE_ADD_FILE equ 0002h +FILE_APPEND_DATA equ 0004h +FILE_ADD_SUBDIRECTORY equ 0004h +FILE_CREATE_PIPE_INSTANCE equ 0004h +FILE_READ_EA equ 0008h +FILE_WRITE_EA equ 0010h +FILE_EXECUTE equ 0020h +FILE_TRAVERSE equ 0020h +FILE_DELETE_CHILD equ 0040h +FILE_READ_ATTRIBUTES equ 0080h +FILE_WRITE_ATTRIBUTES equ 0100h +FILE_ALL_ACCESS equ STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 1FFh +FILE_GENERIC_READ equ STANDARD_RIGHTS_READ or FILE_READ_DATA or FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE +FILE_GENERIC_WRITE equ STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE +FILE_GENERIC_EXECUTE equ STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or FILE_EXECUTE or SYNCHRONIZE +GENERIC_READ equ 80000000h +GENERIC_WRITE equ 40000000h +GENERIC_EXECUTE equ 20000000h +GENERIC_ALL equ 10000000h +#endif + + FileReadData=0x0001,FileListDirectory=0x0001,FileWriteData=0x0002, + FileAddFile=0x0002,FileAppendData=0x0004,FileAddSubDir=0x0004, + FileCreatePipeInstance=0x0004,FileReadEA=0x0008,FileWriteEA=0x0010, + FileExecute=0x0020,FileTraverse=0x0020,FileDeleteChild=0x0040, + FileReadAttributes=0x0080,FileWriteAttributes=0x0100, + FileAllAccess=StandardRightsRequired|Synchronize|0x1FF, + FileGenericRead=StandardRightsRead|FileReadData|FileReadAttributes|FileReadEA|Synchronize, + + enum Rights{ReadControl=0x00020000,WriteDAC=0x00040000,WriteOwner=0x00080000,Synchronize=0x00100000}; + enum Standard{StandardRightsRequired=0x000F0000,StandardRightsRead=ReadControl, + StandardRightsWrite=ReadControl,StandardRightsExecute=ReadControl, + StandardRightsAll=0x001F0000,SpecificRightsAll=0x0000FFFF}; +;FWRITE MACRO sFileInfo,ptrByte +; LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer +; cmp sFileInfo.FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength +; jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer +; WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; other wise +; mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero +; mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax +; mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +;@@FWRITEsimpleWrite: ; simple write sync address +; cmp sFileInfo.FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? +; jne @@FWRITEuseBuffer ; if not then just use it +; mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax +; mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +;@@FWRITEuseBuffer: ; use buffer sync address +; mov cl,byte ptr[ptrByte] ; move byte to write to cl +; mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax +; mov byte ptr[eax],cl ; move byte into buffer +; inc sFileInfo.FileInfo@@mlpBufferPointer ; increment buffer pointer +; inc sFileInfo.FileInfo@@mBufferIndex ; increment buffer index +; mov eax,01h ; set return code +;ENDM + + + +// char strLine[128]; +// while(openFile.readLine((BYTE*)strLine)); +// openFile.writeFile((BYTE*)"I wonder what line this is?\n"); +// openFile.flushFile(); +//#if 0 +// byteCount=0; +// DWORD elapsedTime(::GetTickCount()); +// while(openFile.readFile(&ptrByte))++byteCount; +// elapsedTime=::GetTickCount()-elapsedTime; +// elapsedTime/=1000L; +// ::sprintf(strMessage,"%ld bytes read int %ld seconds\n",byteCount,elapsedTime); +// ::MessageBox(::GetFocus(),strMessage,(LPSTR)"FileIO",MB_OK); +//#endif +// openFile.closeFile(); diff --git a/uudecode/STRING.INC b/uudecode/STRING.INC new file mode 100644 index 0000000..2b69f2e --- /dev/null +++ b/uudecode/STRING.INC @@ -0,0 +1,113 @@ +;************************************************************************************* +; MODULE: STRING.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : STRING RELATED MACROS +;************************************************************************************* +STRSTR MACRO szStringOne,szStringTwo + push offset szStringTwo ; save string one + push offset szStringOne ; save string two + call _strstr ; call standard library strstr + add esp,08h ; reset stack frame +ENDM + +STRCHR MACRO szString,charByte + push charByte ; save charByte + push offset szString ; save string + call _strchr ; call standard library strchr + add esp,08h ; reset stack frame +ENDM + +STRCAT MACRO szDstString,szSrcString + push offset szSrcString ; save source string + push offset szDstString ; save destination string + call _strcat ; call standard library strcat + add esp,08h ; reset stack frame +ENDM + +STRLEN MACRO szData + push edi ; save destination index register + push ecx ; save ecx register + mov edi,offset szData ; get string to destination index register + mov ecx,0FFFFh ; move 65535 to ecx register + xor eax,eax ; clear eax register + repnz scasb ; scan string + mov eax,0FFFFh ; move 65535 to eax + sub eax,ecx ; subtract number of bytes scanned + dec eax ; decrement result + pop ecx ; restore ecx register + pop edi ; restore destination index register +ENDM + +MEMCPY MACRO szDstData,szSrcData,lengthCopy + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szSrcData ; move source data to source index register + mov edi,offset szDstData ; move destination data to destination index register + mov ecx,lengthCopy ; move number of bytes to copy to ecx register + rep movsb ; copy data + pop edi ; restore destination index register + pop esi ; restore source index register +ENDM + +STRCMP MACRO szStringOne,szStringTwo +LOCAL @@STRCMPnotEqual,@@STRCMPequal,@@STRCMPexit + push ecx ; save ecx register + push edi ; save destination index register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare lengths + jne @@STRCMPnotEqual ; if lengths differ, strings are not equal +@@STRCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string two + cmp al,byte ptr[edi] ; compare with byte from string one + jne @@STRCMPnotEqual ; if bytes differ then we're done + loop @@STRCMPloop ; iterate through string length +@@STRCMPequal: ; equality control + mov eax,0001h ; set return code + jmp @@STRCMPexit ; we're done +@@STRCMPnotEqual: ; inequality control + xor eax,eax ; set return code +@@STRCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM + +STRNCMP MACRO szStringOne,szStringTwo +LOCAL @@STRNCMPloop,@@STRNCMPequal,@@STRNCMPnotEqual,@@STRNCMPexit + push ecx ; save ecx register + push edi ; save edi register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare the lengths + jle @@STRNCMPloop ; string one is less equal to string two + mov ecx,eax ; string two is less, so use it's length +@@STRNCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string one + cmp al,byte ptr[edi] ; compare with byte from string two + jne @@STRNCMPnotEqual ; if byte are unequal, strings are unequal + inc edi ; increment along string two + inc esi ; increment along string one + loop @@STRNCMPloop ; keep going +@@STRNCMPequal: ; string equal sync address + mov eax,0001h ; set return code + jmp @@STRNCMPexit ; we're done +@@STRNCMPnotEqual: ; string unequal sync address + xor eax,eax ; set return code +@@STRNCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM +extrn _strstr:near +extrn _strchr:near +extrn _strcat:near diff --git a/uudecode/TASM/DECODE64.ASM b/uudecode/TASM/DECODE64.ASM new file mode 100644 index 0000000..d48b5f9 --- /dev/null +++ b/uudecode/TASM/DECODE64.ASM @@ -0,0 +1,230 @@ +;************************************************************************************* +; MODULE: DECODE64.ASM DATE: JANUARY 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : BASE64 DECODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +.DATA + inputFile FileInfo <> + outputFile FileInfo <> + lineData DB 400h DUP(0) + szDefaultOutputPathFileName DB 'IMAGE.JPG',00h + szOutputPathFileName DB 0FFh DUP(0) + szFileNameLiteral DB 'filename=',00h + szOutBytes DB 04h DUP(0) + szInputPathFileName DD ? + szBase64ID DB '/9j/',00h + szExtension DB '.JPG',00H + szBase64Vector DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',00h + szBase64End DB '---',00h + num DD ? + lineLength DD ? + itemIndex DD ? + itemCount DD ? + numIndex DD ? + valueItem DD ? +.CODE +_decodeBase64 proc near ; WORD decodeBase64(const char *szPathFileName) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov itemCount,0000h ; initialize decoded counter to zero + push dword ptr[ebp+8] ; save pathFileName + pop szInputPathFileName ; restore into inputPathFileName + cmp szInputPathFileName,0000h ; is the file na null + je @@error ; if so then we've got an error + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp inputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; do we have a valid handle ? + je @@error ; if the handle is invalid then we've got an error + call _outputName ; get output file name +@@search: ; search sync address + FGETS inputFile,lineData ; get input line + cmp eax,0000h ; did we read anything + je @@end ; if not we're done + STRSTR lineData,szFileNameLiteral ; look for "filename=" literal + cmp eax,0000h ; did we find it + jne @@nameFile ; if so then extract the filename + STRNCMP szBase64ID,lineData ; compare line to base64 identifier + cmp eax,0001h ; if we've got it then we start decoding + je @@beginDecode ; jump to decode handler + jmp @@search ; keep going +@@nameFile: ; nameFile sync address + push eax ; save address of filename literal + push offset szOutputPathFileName ; save address of filename buffer + call _nameFile ; extract the file name + add esp,08h ; reset stack frame + jmp @@search ; keep going +@@beginDecode: ; begin decode sync address + mov esi,offset szOutputPathFileName + FOPEN esi,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL +; FOPEN szOutputPathFileName,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL +@@continueDecode: ; continue decode sync address + STRLEN lineData ; get length of lineData + dec eax ; decrement line length + mov lineLength,eax ; move line length into lineLength + mov itemIndex,0000h ; set itemIndex to zero +@@itemLoop: ; itemLoop sync address + mov valueItem,0000h ; set valueItem to zero + mov esi,offset lineData ; move ptr lineData to esi register + add esi,itemIndex ; add itemIndex to address + cmp byte ptr[esi+02h],'=' ; is pChar[2] equal to '='? + je @@assignOne ; if so then num=1 + cmp byte ptr[esi+03h],'=' ; else if pChar[3]='=' + je @@assignTwo ; then num=2 + mov num,0003h ; otherwise num=3 + jmp @@assignContinue ; continue +@@assignOne: ; assignment sync address + mov num,0001h ; assign 1 to num + jmp @@assignContinue ; continue +@@assignTwo: ; assignment sync address + mov num,0002h ; assign two to num + jmp @@assignContinue ; continue +@@assignContinue: ; end assignment sync address + mov numIndex,0000h ; set numIndex to zero +@@numLoop: ; numIndex loop sync address + xor eax,eax ; clear out eax + mov edi,numIndex ; move numIndex into destination index + mov al,byte ptr[esi+edi] ; get the byte at pChar[numIndex] + STRCHR szBase64Vector,eax ; ::strchar(szBase64Vector,pChar[numIndex]) + cmp eax,0000h ; did we find the token + je @@end ; if not then we've got an error + mov edi,eax ; move address of found token to edi (pTok) + sub edi,offset szBase64Vector ; perform (pTok-szBase64Vector) result to edi + mov eax,0003h ; move 3 into eax + sub eax,numIndex ; perform (3-numIndex) result to eax + mov edx,0006h ; move 6 into edx + imul eax,edx ; perform (3-numIndex)*6 result to eax + mov cl,al ; move shift value into cl register + shl edi,cl ; perform (pTok-smszVec)<<((3-numIndex)*6) result to edi + add valueItem,edi ; valueItem+=(pTok-smszVec)<<((3-numIndex)*6) + inc numIndex ; increment numIndex + mov eax,numIndex ; move numIndex into eax register + cmp eax,num ; compare numIndex to num + jle @@numLoop ; loop through <= operation + mov numIndex,0002h ; set numIndex to 2 +@@nextNumLoop: ; next numLoop sync address + mov esi,offset szOutBytes ; move szOutBytes address into esi + mov edi,numIndex ; move numIndex into edi + mov eax,valueItem ; move valueItem into eax register + and eax,000000FFh ; apply bit mask + mov byte ptr[esi+edi],al ; set byte in szOutBytes + shr valueItem,08h ; shift valueItem right 8 bytes + dec numIndex ; decrement numIndex + cmp numIndex,0000h ; compare numIndex to zero + jge @@nextNumLoop ; if >=0 keep going + mov esi,offset szOutBytes ; move szOutBytes to esi + xor edi,edi ; clear edi +@@writeLoop: ; writeLoop sync address + FWRITE outputFile,byte ptr[esi+edi] ; write out the byte + inc edi ; increment edi + cmp edi,num ; compare edi to num + jl @@writeLoop ; if it's less then keep going + add itemIndex,0004h ; increment itemIndex by four + mov eax,itemIndex ; move itemIndex to eax + cmp eax,lineLength ; compare itemIndex to lineLength + jl @@itemLoop ; if it's less that keep going + FGETS inputFile,lineData ; get another line + cmp eax,0000h ; did we get a line? + je @@end ; if not then we're done + STRNCMP lineData,szBase64End ; look for trailer signature + cmp eax,0001h ; if we found it then another image may follow + je @@prepNewImage ; flush and close current output file + jmp @@continueDecode ; otherwise keep going +@@prepNewImage: ; prepNewImage sync address + inc itemCount ; increment decoded counter + FFLUSH outputFile ; flush output file + CLOSEHANDLE outputFile.FileInfo@@mhFileHandle ; close output file + mov outputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; invalidate the handle + jmp @@search ; try to decode another image +@@end: ; end sync address + cmp outputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; is this a valid handle + je @@closePrimary ; is handle is invalid, just close the input file + FFLUSH outputFile ; flush the output file + CLOSEHANDLE outputFile.FileInfo@@mhFileHandle ; close output file +@@closePrimary: ; close primary sync address + CLOSEHANDLE inputFile.FileInfo@@mhFileHandle ; close input file +@@error: ; error sync address + mov eax,itemCount ; move decoded count to eax register + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_decodeBase64 endp +_nameFile proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov edi,[ebp+8] ; move dest string to destination index register + mov esi,[ebp+0Ch] ; move source string to source index register +@@NAMEFILEquoteLoop: ; first quote loop control + mov al,byte ptr[esi] ; move byte into al + cmp al,00h ; is it null? + je @@NAMEFILEerror ; if it's null then we've got an error + cmp al,'"' ; is it the first quote ? + je @@NAMEFILEreadFile ; if so then get the filename + inc esi ; increment along esi + jmp @@NAMEFILEquoteLoop ; keep going +@@NAMEFILEreadFile: ; read file name sync address + inc esi ; skip past the first quote + mov al,byte ptr[esi] ; read from file name + cmp al,'"' ; is the byte the closing quote? + je @@NAMEFILEreadEnd ; if so then we're done + cmp al,00h ; is the byte a null byte? + je @@NAMEFILEreadEnd ; if so then we're done + mov byte ptr[edi],al ; store the byte in destination + inc edi ; increment along destination + jmp @@NAMEFILEreadFile ; keep going +@@NAMEFILEreadEnd: ; read end sync address + mov byte ptr[edi],00h ; null terminate the string + mov eax,0001h ; set return code + jmp @@NAMEFILEend ; we're done +@@NAMEFILEerror: ; error sync address + xor eax,eax ; set error return +@@NAMEFILEend: ; end proc sync address + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_nameFile endp +_outputName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,szInputPathFileName ; set esi to input name address + mov edi,offset szOutputPathFileName ; set edi to output name address + xor ecx,ecx ; clear ecx for indexing +@@copyLoop: ; copy loop sync address + mov al,[esi+ecx] ; get byte from source to al + cmp al,00h ; is this a null byte + je @@copyDone ; if so then we're done copying + mov byte ptr[edi],al ; store the byte into destination + inc edi ; increment destination + inc ecx ; increment source index + jmp @@copyLoop ; loop through the string +@@copyDone: ; copy done sync address + mov byte ptr[edi],00h ; set null terminator + STRCHR szOutputPathFileName,'.' ; look for extension marker + cmp eax,0000h ; did we find it? + je @@nameError ; if not then we set output name to default + mov byte ptr[eax],0000h ; otherwise terminate the string + STRCAT szOutputPathFileName,szExtension ; cat the string with ".jpg" + jmp @@outputDone ; we're done +@@nameError: ; nameError sync address + STRLEN szDefaultOutputPathFileName ; get the length of the default file name + MEMCPY szOutputPathFileName,szDefaultOutputPathFileName,eax ; set output file name to default +@@outputDone: ; outputDone sync address + pop edi ; restore destination index + pop esi ; restore source index + pop ebp ; restore previous stack frame + retn ; return near to caller +_outputName endp +public _decodeBase64 +END diff --git a/uudecode/TASM/DECODE64.BAK b/uudecode/TASM/DECODE64.BAK new file mode 100644 index 0000000..d48b5f9 --- /dev/null +++ b/uudecode/TASM/DECODE64.BAK @@ -0,0 +1,230 @@ +;************************************************************************************* +; MODULE: DECODE64.ASM DATE: JANUARY 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : BASE64 DECODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +.DATA + inputFile FileInfo <> + outputFile FileInfo <> + lineData DB 400h DUP(0) + szDefaultOutputPathFileName DB 'IMAGE.JPG',00h + szOutputPathFileName DB 0FFh DUP(0) + szFileNameLiteral DB 'filename=',00h + szOutBytes DB 04h DUP(0) + szInputPathFileName DD ? + szBase64ID DB '/9j/',00h + szExtension DB '.JPG',00H + szBase64Vector DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',00h + szBase64End DB '---',00h + num DD ? + lineLength DD ? + itemIndex DD ? + itemCount DD ? + numIndex DD ? + valueItem DD ? +.CODE +_decodeBase64 proc near ; WORD decodeBase64(const char *szPathFileName) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov itemCount,0000h ; initialize decoded counter to zero + push dword ptr[ebp+8] ; save pathFileName + pop szInputPathFileName ; restore into inputPathFileName + cmp szInputPathFileName,0000h ; is the file na null + je @@error ; if so then we've got an error + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp inputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; do we have a valid handle ? + je @@error ; if the handle is invalid then we've got an error + call _outputName ; get output file name +@@search: ; search sync address + FGETS inputFile,lineData ; get input line + cmp eax,0000h ; did we read anything + je @@end ; if not we're done + STRSTR lineData,szFileNameLiteral ; look for "filename=" literal + cmp eax,0000h ; did we find it + jne @@nameFile ; if so then extract the filename + STRNCMP szBase64ID,lineData ; compare line to base64 identifier + cmp eax,0001h ; if we've got it then we start decoding + je @@beginDecode ; jump to decode handler + jmp @@search ; keep going +@@nameFile: ; nameFile sync address + push eax ; save address of filename literal + push offset szOutputPathFileName ; save address of filename buffer + call _nameFile ; extract the file name + add esp,08h ; reset stack frame + jmp @@search ; keep going +@@beginDecode: ; begin decode sync address + mov esi,offset szOutputPathFileName + FOPEN esi,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL +; FOPEN szOutputPathFileName,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL +@@continueDecode: ; continue decode sync address + STRLEN lineData ; get length of lineData + dec eax ; decrement line length + mov lineLength,eax ; move line length into lineLength + mov itemIndex,0000h ; set itemIndex to zero +@@itemLoop: ; itemLoop sync address + mov valueItem,0000h ; set valueItem to zero + mov esi,offset lineData ; move ptr lineData to esi register + add esi,itemIndex ; add itemIndex to address + cmp byte ptr[esi+02h],'=' ; is pChar[2] equal to '='? + je @@assignOne ; if so then num=1 + cmp byte ptr[esi+03h],'=' ; else if pChar[3]='=' + je @@assignTwo ; then num=2 + mov num,0003h ; otherwise num=3 + jmp @@assignContinue ; continue +@@assignOne: ; assignment sync address + mov num,0001h ; assign 1 to num + jmp @@assignContinue ; continue +@@assignTwo: ; assignment sync address + mov num,0002h ; assign two to num + jmp @@assignContinue ; continue +@@assignContinue: ; end assignment sync address + mov numIndex,0000h ; set numIndex to zero +@@numLoop: ; numIndex loop sync address + xor eax,eax ; clear out eax + mov edi,numIndex ; move numIndex into destination index + mov al,byte ptr[esi+edi] ; get the byte at pChar[numIndex] + STRCHR szBase64Vector,eax ; ::strchar(szBase64Vector,pChar[numIndex]) + cmp eax,0000h ; did we find the token + je @@end ; if not then we've got an error + mov edi,eax ; move address of found token to edi (pTok) + sub edi,offset szBase64Vector ; perform (pTok-szBase64Vector) result to edi + mov eax,0003h ; move 3 into eax + sub eax,numIndex ; perform (3-numIndex) result to eax + mov edx,0006h ; move 6 into edx + imul eax,edx ; perform (3-numIndex)*6 result to eax + mov cl,al ; move shift value into cl register + shl edi,cl ; perform (pTok-smszVec)<<((3-numIndex)*6) result to edi + add valueItem,edi ; valueItem+=(pTok-smszVec)<<((3-numIndex)*6) + inc numIndex ; increment numIndex + mov eax,numIndex ; move numIndex into eax register + cmp eax,num ; compare numIndex to num + jle @@numLoop ; loop through <= operation + mov numIndex,0002h ; set numIndex to 2 +@@nextNumLoop: ; next numLoop sync address + mov esi,offset szOutBytes ; move szOutBytes address into esi + mov edi,numIndex ; move numIndex into edi + mov eax,valueItem ; move valueItem into eax register + and eax,000000FFh ; apply bit mask + mov byte ptr[esi+edi],al ; set byte in szOutBytes + shr valueItem,08h ; shift valueItem right 8 bytes + dec numIndex ; decrement numIndex + cmp numIndex,0000h ; compare numIndex to zero + jge @@nextNumLoop ; if >=0 keep going + mov esi,offset szOutBytes ; move szOutBytes to esi + xor edi,edi ; clear edi +@@writeLoop: ; writeLoop sync address + FWRITE outputFile,byte ptr[esi+edi] ; write out the byte + inc edi ; increment edi + cmp edi,num ; compare edi to num + jl @@writeLoop ; if it's less then keep going + add itemIndex,0004h ; increment itemIndex by four + mov eax,itemIndex ; move itemIndex to eax + cmp eax,lineLength ; compare itemIndex to lineLength + jl @@itemLoop ; if it's less that keep going + FGETS inputFile,lineData ; get another line + cmp eax,0000h ; did we get a line? + je @@end ; if not then we're done + STRNCMP lineData,szBase64End ; look for trailer signature + cmp eax,0001h ; if we found it then another image may follow + je @@prepNewImage ; flush and close current output file + jmp @@continueDecode ; otherwise keep going +@@prepNewImage: ; prepNewImage sync address + inc itemCount ; increment decoded counter + FFLUSH outputFile ; flush output file + CLOSEHANDLE outputFile.FileInfo@@mhFileHandle ; close output file + mov outputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; invalidate the handle + jmp @@search ; try to decode another image +@@end: ; end sync address + cmp outputFile.FileInfo@@mhFileHandle,INVALID_HANDLE ; is this a valid handle + je @@closePrimary ; is handle is invalid, just close the input file + FFLUSH outputFile ; flush the output file + CLOSEHANDLE outputFile.FileInfo@@mhFileHandle ; close output file +@@closePrimary: ; close primary sync address + CLOSEHANDLE inputFile.FileInfo@@mhFileHandle ; close input file +@@error: ; error sync address + mov eax,itemCount ; move decoded count to eax register + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_decodeBase64 endp +_nameFile proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov edi,[ebp+8] ; move dest string to destination index register + mov esi,[ebp+0Ch] ; move source string to source index register +@@NAMEFILEquoteLoop: ; first quote loop control + mov al,byte ptr[esi] ; move byte into al + cmp al,00h ; is it null? + je @@NAMEFILEerror ; if it's null then we've got an error + cmp al,'"' ; is it the first quote ? + je @@NAMEFILEreadFile ; if so then get the filename + inc esi ; increment along esi + jmp @@NAMEFILEquoteLoop ; keep going +@@NAMEFILEreadFile: ; read file name sync address + inc esi ; skip past the first quote + mov al,byte ptr[esi] ; read from file name + cmp al,'"' ; is the byte the closing quote? + je @@NAMEFILEreadEnd ; if so then we're done + cmp al,00h ; is the byte a null byte? + je @@NAMEFILEreadEnd ; if so then we're done + mov byte ptr[edi],al ; store the byte in destination + inc edi ; increment along destination + jmp @@NAMEFILEreadFile ; keep going +@@NAMEFILEreadEnd: ; read end sync address + mov byte ptr[edi],00h ; null terminate the string + mov eax,0001h ; set return code + jmp @@NAMEFILEend ; we're done +@@NAMEFILEerror: ; error sync address + xor eax,eax ; set error return +@@NAMEFILEend: ; end proc sync address + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore prior stack frame + retn ; return near to caller +_nameFile endp +_outputName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,szInputPathFileName ; set esi to input name address + mov edi,offset szOutputPathFileName ; set edi to output name address + xor ecx,ecx ; clear ecx for indexing +@@copyLoop: ; copy loop sync address + mov al,[esi+ecx] ; get byte from source to al + cmp al,00h ; is this a null byte + je @@copyDone ; if so then we're done copying + mov byte ptr[edi],al ; store the byte into destination + inc edi ; increment destination + inc ecx ; increment source index + jmp @@copyLoop ; loop through the string +@@copyDone: ; copy done sync address + mov byte ptr[edi],00h ; set null terminator + STRCHR szOutputPathFileName,'.' ; look for extension marker + cmp eax,0000h ; did we find it? + je @@nameError ; if not then we set output name to default + mov byte ptr[eax],0000h ; otherwise terminate the string + STRCAT szOutputPathFileName,szExtension ; cat the string with ".jpg" + jmp @@outputDone ; we're done +@@nameError: ; nameError sync address + STRLEN szDefaultOutputPathFileName ; get the length of the default file name + MEMCPY szOutputPathFileName,szDefaultOutputPathFileName,eax ; set output file name to default +@@outputDone: ; outputDone sync address + pop edi ; restore destination index + pop esi ; restore source index + pop ebp ; restore previous stack frame + retn ; return near to caller +_outputName endp +public _decodeBase64 +END diff --git a/uudecode/TASM/DEVIOCTL.INC b/uudecode/TASM/DEVIOCTL.INC new file mode 100644 index 0000000..2d566f1 --- /dev/null +++ b/uudecode/TASM/DEVIOCTL.INC @@ -0,0 +1,59 @@ +;************************************************************************************* +; MODULE: DEVIOCTL.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE RELATED CONSTANTS +;************************************************************************************* +FILE_SHARE_READ equ 00000001h +FILE_SHARE_WRITE equ 00000002h +FILE_SHARE_DELETE equ 00000004h +FILE_ATTRIBUTE_READONLY equ 00000001h +FILE_ATTRIBUTE_HIDDEN equ 00000002h +FILE_ATTRIBUTE_SYSTEM equ 00000004h +FILE_ATTRIBUTE_DIRECTORY equ 00000010h +FILE_ATTRIBUTE_ARCHIVE equ 00000020h +FILE_ATTRIBUTE_NORMAL equ 00000080h +FILE_ATTRIBUTE_TEMPORARY equ 00000100h +FILE_ATTRIBUTE_COMPRESSED equ 00000800h +FILE_ATTRIBUTE_OFFLINE equ 00001000h +CREATE_NEW equ 00000001h +CREATE_ALWAYS equ 00000002h +OPEN_EXISTING equ 00000003h +OPEN_ALWAYS equ 00000004h +TRUNCATE_EXISTING equ 00000005h +DELETE equ 00010000h +READ_CONTROL equ 00020000h +WRITE_DAC equ 00040000h +WRITE_OWNER equ 00080000h +SYNCHRONIZE equ 00100000h +STANDARD_RIGHTS_REQUIRED equ 000F0000h +STANDARD_RIGHTS_READ equ READ_CONTROL +STANDARD_RIGHTS_WRITE equ READ_CONTROL +STANDARD_RIGHTS_EXECUTE equ READ_CONTROL +STANDARD_RIGHTS_ALL equ 001F0000h +SPECIFIC_RIGHTS_ALL equ 0000FFFFh +FILE_READ_DATA equ 0001h +FILE_LIST_DIRECTORY equ 0001h +FILE_WRITE_DATA equ 0002h +FILE_ADD_FILE equ 0002h +FILE_APPEND_DATA equ 0004h +FILE_ADD_SUBDIRECTORY equ 0004h +FILE_CREATE_PIPE_INSTANCE equ 0004h +FILE_READ_EA equ 0008h +FILE_WRITE_EA equ 0010h +FILE_EXECUTE equ 0020h +FILE_TRAVERSE equ 0020h +FILE_DELETE_CHILD equ 0040h +FILE_READ_ATTRIBUTES equ 0080h +FILE_WRITE_ATTRIBUTES equ 0100h +FILE_ALL_ACCESS equ STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 1FFh +FILE_GENERIC_READ equ STANDARD_RIGHTS_READ or FILE_READ_DATA or FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE +FILE_GENERIC_WRITE equ STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE +FILE_GENERIC_EXECUTE equ STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or FILE_EXECUTE or SYNCHRONIZE +GENERIC_READ equ 80000000h +GENERIC_WRITE equ 40000000h +GENERIC_EXECUTE equ 20000000h +GENERIC_ALL equ 10000000h + + + diff --git a/uudecode/TASM/OPENFILE.BAK b/uudecode/TASM/OPENFILE.BAK new file mode 100644 index 0000000..d88ca58 --- /dev/null +++ b/uudecode/TASM/OPENFILE.BAK @@ -0,0 +1,162 @@ +;************************************************************************************* +; MODULE: OPENFILE.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE HANDLING MACROS +;************************************************************************************* +HANDLE STRUC +PHANDLE TYPEDEF FAR PTR HANDLE + HANDLE@@mHandle DD ? +HANDLE ENDS + +INVALID_HANDLE equ 0FFFFFFFFh + +CREATEFILE MACRO pathFileName,access,share,open,attribute + push 0000h ; save handle to template (null) + push attribute ; save attributes + push open ; save creation flags + push 0000h ; save security attributes + push share ; save share mode + push access ; save acess mode + push pathFileName ; save pathFileName + call CreateFileA ; call create +ENDM + +READFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesRead on stack + mov eax,esp ; move bytesRead address to eax + push 0000h ; save overlapped structure address + push eax ; save pointer to bytesRead + push sizeBuffer ; save length of buffer + push offset szBuffer ; save address of read buffer + push hFileHandle ; save file handle + call ReadFile ; call read + mov eax,[esp] ; move bytesRead value to eax + add esp,04h ; remove bytesRead variable from stack +ENDM + +WRITEFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesWritten variable on stack + mov eax,esp ; move bytesWritten address to eax + push 0000h ; save overlapped structure address + push eax ; save bytesWritten address + push sizeBuffer ; save write length + push offset szBuffer ; save address of write buffer + push hFileHandle ; save file handle + call WriteFile ; call write + mov eax,[esp] ; move number of bytes written to eax + add esp,04h ; remove bytesWritten variable from stack +ENDM + +CLOSEHANDLE MACRO handle + push handle ; save file handle + call CloseHandle ; call close +ENDM + +FOPEN MACRO pathFileName,sFileInfo,access,share,open,attribute + CREATEFILE pathFileName,access,share,open,attribute + mov sFileInfo.FileInfo@@mhFileHandle,eax +ENDM + +FCLOSE MACRO sFileInfo + LOCAL @@FCLOSEend + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FCLOSEend + CLOSEHANDLE sFileInfo.FileInfo@@mhFileHandle + mov sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE +@@FCLOSEend: +ENDM + +FREAD MACRO sFileInfo,ptrByte + LOCAL @@FREADreadError,@@FREADsimpleRead,@@FREADdone + cmp sFileInfo.FileInfo@@mBufferIndex,00h ; is buffer index zero + jne @@FREADsimpleRead ; if not then just grab next byte + READFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; otherwise we fill the read buffer + cmp eax,0000h ; did we read any data ? + je @@FREADreadError ; if not then we're done + mov sFileInfo.FileInfo@@mBufferIndex,eax ; move number of bytes read to buffer index + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer + jmp @@FREADsimpleRead ; grab next byte +@@FREADreadError: ; read error sync address + xor eax,eax ; set return code + jmp @@FREADdone ; we're done +@@FREADsimpleRead: ; simple read sync address + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov al,byte ptr[eax] ; move byte value to al + mov byte ptr[ptrByte],al ; move byte value to user buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment along lpBufferPointer + dec sFileInfo.FileInfo@@mBufferIndex ; decrement the buffer index + mov eax,01h ; set the return code +@@FREADdone: ; done reading sync +ENDM + +FWRITE MACRO sFileInfo,ptrByte + LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer + cmp sFileInfo.FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength + jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; other wise + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEsimpleWrite: ; simple write sync address + cmp sFileInfo.FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? + jne @@FWRITEuseBuffer ; if not then just use it + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEuseBuffer: ; use buffer sync address + mov cl,byte ptr[ptrByte] ; move byte to write to cl + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov byte ptr[eax],cl ; move byte into buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment buffer pointer + inc sFileInfo.FileInfo@@mBufferIndex ; increment buffer index + mov eax,01h ; set return code +ENDM + +FFLUSH MACRO sFileInfo +LOCAL @@FFLUSHexit + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FFLUSHexit + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,sFileInfo.FileInfo@@mBufferIndex ; write buffer to disk + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FFLUSHexit: +ENDM + +FGETS MACRO sFileInfo,szBuffer + LOCAL @@FGETScont,@@FGETexit,@@FGETsetError,@@FGETScrlf + push esi ; save source index register + mov esi,offset szBuffer ; move address of buffer into esi +@@FGETScont: ; loop control + FREAD sFileInfo,esi ; read a byte + cmp eax,0000h ; was our read successful? + je @@FGETexit ; if not we're done + cmp byte ptr[esi],0Dh ; is the byte a carriage return? + je @@FGETScrlf ; if yes then jump to handler + inc esi ; increment along esi + jmp @@FGETScont ; keep reading +@@FGETScrlf: ; carriage return control + mov byte ptr[esi],00h ; move null into line data + sub esp,04h ; create temp var on stack + mov esi,esp ; esi points to temp var + FREAD sFileInfo,esi ; read line-feed into temp var + add esp,04h ; restore stack +@@FGETexit: ; exit sync address + pop esi ; restore source index register +ENDM + +FileInfo STRUC + MaxLength equ 800h + FileInfo@@mhFileHandle HANDLE + FileInfo@@mszBuffer DB MaxLength DUP(0) + FileInfo@@mBufferIndex DD (0) + FileInfo@@mlpBufferPointer DD (0) +FileInfo ENDS + +extrn WriteFile:near +extrn CloseHandle:near +extrn CreateFileA:near +extrn GetLastError:near +extrn ReadFile:near + diff --git a/uudecode/TASM/OPENFILE.INC b/uudecode/TASM/OPENFILE.INC new file mode 100644 index 0000000..d88ca58 --- /dev/null +++ b/uudecode/TASM/OPENFILE.INC @@ -0,0 +1,162 @@ +;************************************************************************************* +; MODULE: OPENFILE.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : FILE HANDLING MACROS +;************************************************************************************* +HANDLE STRUC +PHANDLE TYPEDEF FAR PTR HANDLE + HANDLE@@mHandle DD ? +HANDLE ENDS + +INVALID_HANDLE equ 0FFFFFFFFh + +CREATEFILE MACRO pathFileName,access,share,open,attribute + push 0000h ; save handle to template (null) + push attribute ; save attributes + push open ; save creation flags + push 0000h ; save security attributes + push share ; save share mode + push access ; save acess mode + push pathFileName ; save pathFileName + call CreateFileA ; call create +ENDM + +READFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesRead on stack + mov eax,esp ; move bytesRead address to eax + push 0000h ; save overlapped structure address + push eax ; save pointer to bytesRead + push sizeBuffer ; save length of buffer + push offset szBuffer ; save address of read buffer + push hFileHandle ; save file handle + call ReadFile ; call read + mov eax,[esp] ; move bytesRead value to eax + add esp,04h ; remove bytesRead variable from stack +ENDM + +WRITEFILE MACRO hFileHandle,szBuffer,sizeBuffer + sub esp,04h ; create bytesWritten variable on stack + mov eax,esp ; move bytesWritten address to eax + push 0000h ; save overlapped structure address + push eax ; save bytesWritten address + push sizeBuffer ; save write length + push offset szBuffer ; save address of write buffer + push hFileHandle ; save file handle + call WriteFile ; call write + mov eax,[esp] ; move number of bytes written to eax + add esp,04h ; remove bytesWritten variable from stack +ENDM + +CLOSEHANDLE MACRO handle + push handle ; save file handle + call CloseHandle ; call close +ENDM + +FOPEN MACRO pathFileName,sFileInfo,access,share,open,attribute + CREATEFILE pathFileName,access,share,open,attribute + mov sFileInfo.FileInfo@@mhFileHandle,eax +ENDM + +FCLOSE MACRO sFileInfo + LOCAL @@FCLOSEend + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FCLOSEend + CLOSEHANDLE sFileInfo.FileInfo@@mhFileHandle + mov sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE +@@FCLOSEend: +ENDM + +FREAD MACRO sFileInfo,ptrByte + LOCAL @@FREADreadError,@@FREADsimpleRead,@@FREADdone + cmp sFileInfo.FileInfo@@mBufferIndex,00h ; is buffer index zero + jne @@FREADsimpleRead ; if not then just grab next byte + READFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; otherwise we fill the read buffer + cmp eax,0000h ; did we read any data ? + je @@FREADreadError ; if not then we're done + mov sFileInfo.FileInfo@@mBufferIndex,eax ; move number of bytes read to buffer index + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer + jmp @@FREADsimpleRead ; grab next byte +@@FREADreadError: ; read error sync address + xor eax,eax ; set return code + jmp @@FREADdone ; we're done +@@FREADsimpleRead: ; simple read sync address + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov al,byte ptr[eax] ; move byte value to al + mov byte ptr[ptrByte],al ; move byte value to user buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment along lpBufferPointer + dec sFileInfo.FileInfo@@mBufferIndex ; decrement the buffer index + mov eax,01h ; set the return code +@@FREADdone: ; done reading sync +ENDM + +FWRITE MACRO sFileInfo,ptrByte + LOCAL @@FWRITEsimpleWrite,@@FWRITEuseBuffer + cmp sFileInfo.FileInfo@@mBufferIndex,MaxLength ; compare buffer index to MaxLength + jl @@FWRITEsimpleWrite ; if it's less then insert char into buffer + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,MaxLength ; other wise + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEsimpleWrite: ; simple write sync address + cmp sFileInfo.FileInfo@@mlpBufferPointer,0000h ; is buffer pointer null? + jne @@FWRITEuseBuffer ; if not then just use it + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FWRITEuseBuffer: ; use buffer sync address + mov cl,byte ptr[ptrByte] ; move byte to write to cl + mov eax,sFileInfo.FileInfo@@mlpBufferPointer ; move address of buffer to eax + mov byte ptr[eax],cl ; move byte into buffer + inc sFileInfo.FileInfo@@mlpBufferPointer ; increment buffer pointer + inc sFileInfo.FileInfo@@mBufferIndex ; increment buffer index + mov eax,01h ; set return code +ENDM + +FFLUSH MACRO sFileInfo +LOCAL @@FFLUSHexit + cmp sFileInfo.FileInfo@@mhFileHandle,INVALID_HANDLE + je @@FFLUSHexit + WRITEFILE sFileInfo.FileInfo@@mhFileHandle,sFileInfo.FileInfo@@mszBuffer,sFileInfo.FileInfo@@mBufferIndex ; write buffer to disk + mov sFileInfo.FileInfo@@mBufferIndex,0000h ; set buffer index to zero + mov eax,offset sFileInfo.FileInfo@@mszBuffer ; move address of buffer to eax + mov sFileInfo.FileInfo@@mlpBufferPointer,eax ; move address of buffer to lpBufferPointer +@@FFLUSHexit: +ENDM + +FGETS MACRO sFileInfo,szBuffer + LOCAL @@FGETScont,@@FGETexit,@@FGETsetError,@@FGETScrlf + push esi ; save source index register + mov esi,offset szBuffer ; move address of buffer into esi +@@FGETScont: ; loop control + FREAD sFileInfo,esi ; read a byte + cmp eax,0000h ; was our read successful? + je @@FGETexit ; if not we're done + cmp byte ptr[esi],0Dh ; is the byte a carriage return? + je @@FGETScrlf ; if yes then jump to handler + inc esi ; increment along esi + jmp @@FGETScont ; keep reading +@@FGETScrlf: ; carriage return control + mov byte ptr[esi],00h ; move null into line data + sub esp,04h ; create temp var on stack + mov esi,esp ; esi points to temp var + FREAD sFileInfo,esi ; read line-feed into temp var + add esp,04h ; restore stack +@@FGETexit: ; exit sync address + pop esi ; restore source index register +ENDM + +FileInfo STRUC + MaxLength equ 800h + FileInfo@@mhFileHandle HANDLE + FileInfo@@mszBuffer DB MaxLength DUP(0) + FileInfo@@mBufferIndex DD (0) + FileInfo@@mlpBufferPointer DD (0) +FileInfo ENDS + +extrn WriteFile:near +extrn CloseHandle:near +extrn CreateFileA:near +extrn GetLastError:near +extrn ReadFile:near + diff --git a/uudecode/TASM/STRING.INC b/uudecode/TASM/STRING.INC new file mode 100644 index 0000000..2b69f2e --- /dev/null +++ b/uudecode/TASM/STRING.INC @@ -0,0 +1,113 @@ +;************************************************************************************* +; MODULE: STRING.INC DATE: FEBRUARY 2, 1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT FLAT MODEL +; FUNCTION : STRING RELATED MACROS +;************************************************************************************* +STRSTR MACRO szStringOne,szStringTwo + push offset szStringTwo ; save string one + push offset szStringOne ; save string two + call _strstr ; call standard library strstr + add esp,08h ; reset stack frame +ENDM + +STRCHR MACRO szString,charByte + push charByte ; save charByte + push offset szString ; save string + call _strchr ; call standard library strchr + add esp,08h ; reset stack frame +ENDM + +STRCAT MACRO szDstString,szSrcString + push offset szSrcString ; save source string + push offset szDstString ; save destination string + call _strcat ; call standard library strcat + add esp,08h ; reset stack frame +ENDM + +STRLEN MACRO szData + push edi ; save destination index register + push ecx ; save ecx register + mov edi,offset szData ; get string to destination index register + mov ecx,0FFFFh ; move 65535 to ecx register + xor eax,eax ; clear eax register + repnz scasb ; scan string + mov eax,0FFFFh ; move 65535 to eax + sub eax,ecx ; subtract number of bytes scanned + dec eax ; decrement result + pop ecx ; restore ecx register + pop edi ; restore destination index register +ENDM + +MEMCPY MACRO szDstData,szSrcData,lengthCopy + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szSrcData ; move source data to source index register + mov edi,offset szDstData ; move destination data to destination index register + mov ecx,lengthCopy ; move number of bytes to copy to ecx register + rep movsb ; copy data + pop edi ; restore destination index register + pop esi ; restore source index register +ENDM + +STRCMP MACRO szStringOne,szStringTwo +LOCAL @@STRCMPnotEqual,@@STRCMPequal,@@STRCMPexit + push ecx ; save ecx register + push edi ; save destination index register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare lengths + jne @@STRCMPnotEqual ; if lengths differ, strings are not equal +@@STRCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string two + cmp al,byte ptr[edi] ; compare with byte from string one + jne @@STRCMPnotEqual ; if bytes differ then we're done + loop @@STRCMPloop ; iterate through string length +@@STRCMPequal: ; equality control + mov eax,0001h ; set return code + jmp @@STRCMPexit ; we're done +@@STRCMPnotEqual: ; inequality control + xor eax,eax ; set return code +@@STRCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM + +STRNCMP MACRO szStringOne,szStringTwo +LOCAL @@STRNCMPloop,@@STRNCMPequal,@@STRNCMPnotEqual,@@STRNCMPexit + push ecx ; save ecx register + push edi ; save edi register + push esi ; save source index register + mov edi,offset szStringOne ; move string one to destination index register + mov esi,offset szStringTwo ; move string two to source index register + STRLEN szStringOne ; get length of string one + mov ecx,eax ; save length to ecx register + STRLEN szStringTwo ; get length of string two + cmp ecx,eax ; compare the lengths + jle @@STRNCMPloop ; string one is less equal to string two + mov ecx,eax ; string two is less, so use it's length +@@STRNCMPloop: ; loop control + mov al,byte ptr[esi] ; get byte from string one + cmp al,byte ptr[edi] ; compare with byte from string two + jne @@STRNCMPnotEqual ; if byte are unequal, strings are unequal + inc edi ; increment along string two + inc esi ; increment along string one + loop @@STRNCMPloop ; keep going +@@STRNCMPequal: ; string equal sync address + mov eax,0001h ; set return code + jmp @@STRNCMPexit ; we're done +@@STRNCMPnotEqual: ; string unequal sync address + xor eax,eax ; set return code +@@STRNCMPexit: ; exit sync address + pop esi ; restore source index register + pop edi ; restore destination index register + pop ecx ; restore ecx register +ENDM +extrn _strstr:near +extrn _strchr:near +extrn _strcat:near diff --git a/uudecode/TASM/UUDECODE.ASM b/uudecode/TASM/UUDECODE.ASM new file mode 100644 index 0000000..fdb099f --- /dev/null +++ b/uudecode/TASM/UUDECODE.ASM @@ -0,0 +1,191 @@ +;************************************************************************************* +; MODULE: DECODE64.ASM DATE: JANUARY 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT LAT MODEL +; FUNCTION : BASE64 DECODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +LOCALS + +DECODEBYTE MACRO index,offset + mov al,byte ptr [index+offset] ; get byte at index register + offset + sub al,' ' ; subtract space + and al,3Fh ; and with 3Fh +ENDM + +.DATA + inputFile FileInfo <> + outputFile FileInfo <> + szBeginLine DB 'begin ',0000h + szEndLine DB 'end',0000h + szLineData DB 400h DUP(0) + numItem DB (0) + charByte DB (0) + status DD (0) + szOutputPathFileName DB 0FFh DUP(0) + szInputPathFileName DD ? +.CODE +_uudecode proc near ; void uudecode(char *szInputPathFileName) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push dword ptr[ebp+08h] ; save inputPathFileName + pop szInputPathFileName ; restore into szInputPathFileName + cmp szInputPathFileName,0000h ; is the file name null + je @@errorExit ; if so then we're done + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE + je @@errorExit +@@munchLoop: + FGETS inputFile,szLineData ; read a line + cmp eax,0000h ; did the read succeed ? + je @@endRead ; if not then we're done + STRNCMP szBeginLine,szLineData ; compare line to signature + cmp eax,0001h ; did we find the signature + jne @@munchLoop ; if not then keep reading + call _getOutputFileName ; get output file name + mov esi,offset szOutputPathFileName + FOPEN esi,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE ; was there a problem creating the output file + je @@endRead ; if so then we're done +@@readLoop: ; read loop sync address + mov esi,offset szLineData ; assign input line address to esi + FGETS inputFile,szLineData ; read an input line + cmp eax,0000h ; check for read error + je @@endDecode ; if there was an error, then we're done + xor eax,eax ; clear eax register + DECODEBYTE esi,00h ; decode the byte + mov numItem,al ; move the decoded item into numItem + cmp numItem,0000h ; compare numItem to zero + jle @@endDecode ; if it's less than or equal, we're done + inc esi ; increment line pointer +@@decodeLoop: ; decode loop sync address + cmp numItem,0000h ; compare numItem to zero + jle @@readLoop ; if it's less than or equal, get another line + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemFGE3 ; handle (numItem>=3) + cmp numItem,0001h ; compare numItem to 1 + jge @@handleItemGE1 ; handle (numItem>=1) +@@GE1Ret: ; return sync address + cmp numItem,0002h ; compare numItem to 2 + jge @@handleItemGE2 ; handle (numItem>=2) +@@GE2Ret: ; return sync address + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemGE3 ; handle (numItem>=3) +@@GE3Ret: ; return sync address + add esi,0004h ; increment line pointer + sub numItem,0003h ; subtract 3 from numItem + jmp @@decodeLoop ; keep going +@@handleItemFGE3: ; return sunc address + DECODEBYTE esi,00h ; decode the byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,01h ; decode the byte + mov cl,04h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + jmp @@GE3Ret ; jump back +@@handleItemGE1: ; (numItem>=1) sync address + DECODEBYTE esi,00h ; decode byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; mov shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or the result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE1Ret ; return +@@handleItemGE2: ; (numItem>=2) sync address + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE2Ret ; return +@@handleItemGE3: ; (numItem>=3) sync address + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE3Ret ; return +@@endDecode: ; end decode sync address + FGETS inputFile,szLineData ; get final line from input file s/b 'end' + STRNCMP szLineData,szEndLine ; compare last line to endLine + cmp eax,0000h ; check return + je @@setError ; if it's not equal to 'end' we've got an error + mov status,0001h ; set success + jmp @@endRead ; skip over next instruction(s) +@@setError: ; setError sync address + mov status,0000h ; set failure +@@endRead: ; end read sync address + FCLOSE inputFile ; close input file + FFLUSH outputFile ; flush output file + FCLOSE outputFile ; close output file +@@errorExit: ; error exit sync address + mov eax,status ; set return code + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_uudecode endp +_getOutputFileName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szLineData ; move input line address into source index + mov edi,offset szOutputPathFileName ; move output file name buffer into destination index + xor ecx,ecx ; clear ecx register for counting +@@munchLoop: ; munch loop sync address + mov al,byte ptr[esi] ; get byte from input line + inc esi ; increment esi along input line + cmp al,' ' ; did we read a space + jne @@munchLoop ; if not then keep reading + inc ecx ; increment space counter + cmp ecx,0002h ; is this the second space + jne @@munchLoop ; if not then keep reading +@@copyLoop: ; copy loop sync address + mov al,byte ptr[esi] ; get source byte into al register + mov byte ptr[edi],al ; copy byte into destination + inc esi ; increment along source line + inc edi ; increment along destination + cmp al,0000h ; compare input byte to zero + jne @@copyLoop ; if it's not null then keep going + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_getOutputFileName endp +public _uudecode +END diff --git a/uudecode/TASM/UUDECODE.BAK b/uudecode/TASM/UUDECODE.BAK new file mode 100644 index 0000000..fdb099f --- /dev/null +++ b/uudecode/TASM/UUDECODE.BAK @@ -0,0 +1,191 @@ +;************************************************************************************* +; MODULE: DECODE64.ASM DATE: JANUARY 27,1997 +; AUTHOR: SEAN M. KESSLER +; TARGET: 32 BIT LAT MODEL +; FUNCTION : BASE64 DECODER +;************************************************************************************* +.386 +.MODEL FLAT +INCLUDE devioctl.inc +INCLUDE string.inc +INCLUDE openfile.inc +LOCALS + +DECODEBYTE MACRO index,offset + mov al,byte ptr [index+offset] ; get byte at index register + offset + sub al,' ' ; subtract space + and al,3Fh ; and with 3Fh +ENDM + +.DATA + inputFile FileInfo <> + outputFile FileInfo <> + szBeginLine DB 'begin ',0000h + szEndLine DB 'end',0000h + szLineData DB 400h DUP(0) + numItem DB (0) + charByte DB (0) + status DD (0) + szOutputPathFileName DB 0FFh DUP(0) + szInputPathFileName DD ? +.CODE +_uudecode proc near ; void uudecode(char *szInputPathFileName) + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + push dword ptr[ebp+08h] ; save inputPathFileName + pop szInputPathFileName ; restore into szInputPathFileName + cmp szInputPathFileName,0000h ; is the file name null + je @@errorExit ; if so then we're done + FOPEN szInputPathFileName,inputFile,GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE + je @@errorExit +@@munchLoop: + FGETS inputFile,szLineData ; read a line + cmp eax,0000h ; did the read succeed ? + je @@endRead ; if not then we're done + STRNCMP szBeginLine,szLineData ; compare line to signature + cmp eax,0001h ; did we find the signature + jne @@munchLoop ; if not then keep reading + call _getOutputFileName ; get output file name + mov esi,offset szOutputPathFileName + FOPEN esi,outputFile,GENERIC_WRITE,FILE_SHARE_READ,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL + cmp eax,INVALID_HANDLE ; was there a problem creating the output file + je @@endRead ; if so then we're done +@@readLoop: ; read loop sync address + mov esi,offset szLineData ; assign input line address to esi + FGETS inputFile,szLineData ; read an input line + cmp eax,0000h ; check for read error + je @@endDecode ; if there was an error, then we're done + xor eax,eax ; clear eax register + DECODEBYTE esi,00h ; decode the byte + mov numItem,al ; move the decoded item into numItem + cmp numItem,0000h ; compare numItem to zero + jle @@endDecode ; if it's less than or equal, we're done + inc esi ; increment line pointer +@@decodeLoop: ; decode loop sync address + cmp numItem,0000h ; compare numItem to zero + jle @@readLoop ; if it's less than or equal, get another line + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemFGE3 ; handle (numItem>=3) + cmp numItem,0001h ; compare numItem to 1 + jge @@handleItemGE1 ; handle (numItem>=1) +@@GE1Ret: ; return sync address + cmp numItem,0002h ; compare numItem to 2 + jge @@handleItemGE2 ; handle (numItem>=2) +@@GE2Ret: ; return sync address + cmp numItem,0003h ; compare numItem to 3 + jge @@handleItemGE3 ; handle (numItem>=3) +@@GE3Ret: ; return sync address + add esi,0004h ; increment line pointer + sub numItem,0003h ; subtract 3 from numItem + jmp @@decodeLoop ; keep going +@@handleItemFGE3: ; return sunc address + DECODEBYTE esi,00h ; decode the byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,01h ; decode the byte + mov cl,04h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr al,cl ; perform right shift + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save value into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with saved value + FWRITE outputFile,charByte ; write out the char + jmp @@GE3Ret ; jump back +@@handleItemGE1: ; (numItem>=1) sync address + DECODEBYTE esi,00h ; decode byte + mov cl,02h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; mov shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or the result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE1Ret ; return +@@handleItemGE2: ; (numItem>=2) sync address + DECODEBYTE esi,01h ; decode byte + mov cl,04h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,02h ; decode byte + mov cl,02h ; move shift value into cl register + shr ax,cl ; perform right shift + or charByte,al ; or result into charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE2Ret ; return +@@handleItemGE3: ; (numItem>=3) sync address + DECODEBYTE esi,02h ; decode byte + mov cl,06h ; move shift value into cl register + shl ax,cl ; perform left shift + mov charByte,al ; save result into charByte + DECODEBYTE esi,03h ; decode byte + or charByte,al ; or result with charByte + FWRITE outputFile,charByte ; write out the byte + jmp @@GE3Ret ; return +@@endDecode: ; end decode sync address + FGETS inputFile,szLineData ; get final line from input file s/b 'end' + STRNCMP szLineData,szEndLine ; compare last line to endLine + cmp eax,0000h ; check return + je @@setError ; if it's not equal to 'end' we've got an error + mov status,0001h ; set success + jmp @@endRead ; skip over next instruction(s) +@@setError: ; setError sync address + mov status,0000h ; set failure +@@endRead: ; end read sync address + FCLOSE inputFile ; close input file + FFLUSH outputFile ; flush output file + FCLOSE outputFile ; close output file +@@errorExit: ; error exit sync address + mov eax,status ; set return code + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore previous stack frame + retn ; return near to caller +_uudecode endp +_getOutputFileName proc near + push ebp ; save stack frame + mov ebp,esp ; create new frame + push esi ; save source index register + push edi ; save destination index register + mov esi,offset szLineData ; move input line address into source index + mov edi,offset szOutputPathFileName ; move output file name buffer into destination index + xor ecx,ecx ; clear ecx register for counting +@@munchLoop: ; munch loop sync address + mov al,byte ptr[esi] ; get byte from input line + inc esi ; increment esi along input line + cmp al,' ' ; did we read a space + jne @@munchLoop ; if not then keep reading + inc ecx ; increment space counter + cmp ecx,0002h ; is this the second space + jne @@munchLoop ; if not then keep reading +@@copyLoop: ; copy loop sync address + mov al,byte ptr[esi] ; get source byte into al register + mov byte ptr[edi],al ; copy byte into destination + inc esi ; increment along source line + inc edi ; increment along destination + cmp al,0000h ; compare input byte to zero + jne @@copyLoop ; if it's not null then keep going + pop edi ; restore destination index register + pop esi ; restore source index register + pop ebp ; restore stack frame + retn ; return near to caller +_getOutputFileName endp +public _uudecode +END diff --git a/uudecode/TASM/UUDECODE.DSW b/uudecode/TASM/UUDECODE.DSW new file mode 100644 index 0000000..ae33f36 Binary files /dev/null and b/uudecode/TASM/UUDECODE.DSW differ diff --git a/uudecode/TASM/UUDECODE.IDE b/uudecode/TASM/UUDECODE.IDE new file mode 100644 index 0000000..9a2509c Binary files /dev/null and b/uudecode/TASM/UUDECODE.IDE differ diff --git a/uudecode/UUDECODE.BAK b/uudecode/UUDECODE.BAK new file mode 100644 index 0000000..7fe7865 --- /dev/null +++ b/uudecode/UUDECODE.BAK @@ -0,0 +1,313 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +!IF "$(CFG)" == "" +CFG=uudecode - Win32 Debug +!MESSAGE No configuration specified. Defaulting to uudecode - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "uudecode - Win32 Release" && "$(CFG)" !=\ + "uudecode - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Uudecode.mak" CFG="uudecode - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uudecode - Win32 Release" (based on\ + "Win32 (x86) Dynamic-Link Library") +!MESSAGE "uudecode - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "uudecode - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "uudecode - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Uudecode.dll" + +CLEAN : + -@erase "$(INTDIR)\decode.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(OUTDIR)\Uudecode.dll" + -@erase "$(OUTDIR)\Uudecode.exp" + -@erase "$(OUTDIR)\Uudecode.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Uudecode.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Uudecode.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/Uudecode.pdb" /machine:I386 /out:"$(OUTDIR)/Uudecode.dll"\ + /implib:"$(OUTDIR)/Uudecode.lib" +LINK32_OBJS= \ + "$(INTDIR)\decode.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\uulib.lib" + +"$(OUTDIR)\Uudecode.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Uudecode.exe" + +CLEAN : + -@erase "$(INTDIR)\decode.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(OUTDIR)\Uudecode.exe" + -@erase "$(OUTDIR)\Uudecode.map" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Uudecode.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none\ + /map:"$(INTDIR)/Uudecode.map" /debug /machine:I386\ + /out:"$(OUTDIR)/Uudecode.exe" +LINK32_OBJS= \ + "$(INTDIR)\decode.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\uulib.lib" + +"$(OUTDIR)\Uudecode.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "uudecode - Win32 Release" +# Name "uudecode - Win32 Debug" + +!IF "$(CFG)" == "uudecode - Win32 Release" + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "uudecode - Win32 Release" + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\decode.cpp + +!IF "$(CFG)" == "uudecode - Win32 Release" + +DEP_CPP_DECOD=\ + {$(INCLUDE)}"\.\Decode.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\decode.obj" : $(SOURCE) $(DEP_CPP_DECOD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +DEP_CPP_DECOD=\ + {$(INCLUDE)}"\.\Decode.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\decode.obj" : $(SOURCE) $(DEP_CPP_DECOD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\uuencode.cpp +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\uulib.lib + +!IF "$(CFG)" == "uudecode - Win32 Release" + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/UUDECODE.CPP b/uudecode/UUDECODE.CPP new file mode 100644 index 0000000..ef67193 --- /dev/null +++ b/uudecode/UUDECODE.CPP @@ -0,0 +1,107 @@ + + + +static int decode() +{ + extern int errno; + struct passwd *pw; + register int n; + register char ch, *p; + int mode, n1; + char buf[MAXPATHLEN]; + + /* search for header line */ + do{ + if(!fgets(buf,sizeof(buf),stdin)) + { + (void)fprintf(stderr,"uudecode: %s: no \"begin\" line\n", filename); + return(1); + } + }while(strncmp(buf,"begin ",6)); + + (void)sscanf(buf,"begin %o %s",&mode,buf); + /* handle ~user/file format */ + if(buf[0]=='~') + { + if(!(p=index(buf,'/'))) + { + (void)fprintf(stderr, "uudecode: %s: illegal ~user.\n",filename); + return(1); + } + *p++=NULL; + if(!(pw=getpwnam(buf+1))) + { + (void)fprintf(stderr,"uudecode: %s: no user %s.\n",filename,buf); + return(1); + } + n=strlen(pw->pw_dir); + n1=strlen(p); + if(n+n1+2>MAXPATHLEN) + { + (void)fprintf(stderr, "uudecode: %s: path too long.\n",filename); + return(1); + } + bcopy(p,buf+n+1,n1+1); + bcopy(pw->pw_dir,buf,n); + buf[n]='/'; + } + /* create output file, set mode */ + if(!freopen(buf,"w",stdout)||fchmod(fileno(stdout),mode&0666)) + { + (void)fprintf(stderr,"uudecode: %s: %s: %s\n", buf,filename,strerror(errno)); + return(1); + } + // for each input line + for(;;) + { + if(!fgets(p=buf,sizeof(buf),stdin)) + { + (void)fprintf(stderr,"uudecode: %s: short file.\n",filename); + return(1); + } +#define DEC(c) (((c) - ' ') & 077) /* single character decode */ +// '`n' is used to avoid writing out all the characters at the end of the file. + if((n=DEC(*p))<=0)break; + for(++p;n>0;p+=4,n-=3) + if(n>=3) + { + ch=DEC(p[0])<<2|DEC(p[1])>>4; + putchar(ch); + ch=DEC(p[1])<<4|DEC(p[2])>>2; + putchar(ch); + ch=DEC(p[2])<<6|DEC(p[3]); + putchar(ch); + } + else + { + if(n>=1) + { + ch=DEC(p[0])<<2|DEC(p[1])>>4; + putchar(ch); + } + if(n>=2) + { + ch=DEC(p[1])<<4|DEC(p[2])>>2; + putchar(ch); + } + if(n>=3) + { + ch=DEC(p[2])<<6|DEC(p[3]); + putchar(ch); + } + } + } + if(!fgets(buf,sizeof(buf),stdin)||strcmp(buf,"end\n")) + { + (void)fprintf(stderr, "uudecode: %s: no \"end\" line.\n",filename); + return(1); + } + return(0); +} + +static void +usage() +{ + (void)fprintf(stderr, "usage: uudecode [file ...]\n"); + exit(1); +} diff --git a/uudecode/UUDECODE.DSP b/uudecode/UUDECODE.DSP new file mode 100644 index 0000000..99fa7de --- /dev/null +++ b/uudecode/UUDECODE.DSP @@ -0,0 +1,125 @@ +# Microsoft Developer Studio Project File - Name="uudecode" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=uudecode - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "uudecode.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "uudecode.mak" CFG="uudecode - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uudecode - Win32 Release" (based on\ + "Win32 (x86) Dynamic-Link Library") +!MESSAGE "uudecode - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "uudecode - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "uudecode - Win32 Release" +# Name "uudecode - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\decode.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=.\uuencode.cpp +# End Source File +# Begin Source File + +SOURCE=..\Exe\uulib.lib +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Decode.hpp +# End Source File +# Begin Source File + +SOURCE=.\Uuencode.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/uudecode/UUDECODE.DSW b/uudecode/UUDECODE.DSW new file mode 100644 index 0000000..130d9bc --- /dev/null +++ b/uudecode/UUDECODE.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "uudecode"=.\uudecode.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/uudecode/UUDECODE.PLG b/uudecode/UUDECODE.PLG new file mode 100644 index 0000000..c1ee536 --- /dev/null +++ b/uudecode/UUDECODE.PLG @@ -0,0 +1,32 @@ +--------------------Configuration: uudecode - Win32 Debug-------------------- +Begining build with project "C:\WORK\UUDECODE\uudecode.dsp", at root. +Active configuration is Win32 (x86) Dynamic-Link Library (based on Win32 (x86) Dynamic-Link Library) + +Project's tools are: + "32-bit C/C++ Compiler for 80x86" with flags "/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c " + "OLE Type Library Maker" with flags "/nologo /D "_DEBUG" /mktyplib203 /win32 " + "Win32 Resource Compiler" with flags "/l 0x409 /d "_DEBUG" " + "Browser Database Maker" with flags "/nologo /o".\msvcobj/uudecode.bsc" " + "COFF Linker for 80x86" with flags "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map:".\msvcobj/uudecode.map" /debug /machine:I386 /out:".\msvcobj/uudecode.exe" " + "Custom Build" with flags "" + "" with flags "" + +Creating temp file "C:\WINDOWS\TEMP\RSP71F5.TMP" with contents +Creating command line "cl.exe @C:\WINDOWS\TEMP\RSP71F5.TMP" +Creating temp file "C:\WINDOWS\TEMP\RSP71F6.TMP" with contents +Creating command line "link.exe @C:\WINDOWS\TEMP\RSP71F6.TMP" +Compiling... +decode.cpp +uuencode.cpp +Linking... + + + +uudecode.exe - 0 error(s), 0 warning(s) diff --git a/uudecode/UUDECODE.ZIP b/uudecode/UUDECODE.ZIP new file mode 100644 index 0000000..3d64861 Binary files /dev/null and b/uudecode/UUDECODE.ZIP differ diff --git a/uudecode/UUENCODE.CPP b/uudecode/UUENCODE.CPP new file mode 100644 index 0000000..2213c3e --- /dev/null +++ b/uudecode/UUENCODE.CPP @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include + +BOOL UUEncode::encode(String srcPathFileName,Block &lineStrings,BOOL initBlock) +{ + Profile iniProfile; + char readBuff[45]; + int readCount; + int byteCount; + char *ptrBuff; + String outLine; + int ch; + + if(initBlock)lineStrings.remove(); + if(srcPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + iniProfile.makeFileName(srcPathFileName); + ::sprintf(outLine,"begin %d %s\n",644,srcPathFileName); + lineStrings.insert(&outLine); + while(readCount=readView.read(readBuff,sizeof(readBuff))) + { + String lineString; + lineString+=(char)chEncode(readCount); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + ch=*ptrBuff>>2; + lineString+=(char)chEncode(ch); + ch=(*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F; + lineString+=(char)chEncode(ch); + ch=(ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03; + lineString+=(char)chEncode(ch); + ch=ptrBuff[2]&0x3F; + lineString+=(char)chEncode(ch); + } + lineString+='\n'; + lineStrings.insert(&lineString); + if(readCount!=45)break; + } + ch=('\0'?('\0'&0x3F)+' ':'`'); + String lastLine; + lastLine+=(char)ch; + lastLine+='\n'; + lineStrings.insert(&lastLine); + lineStrings.insert(&String("end")); + return TRUE; +} + diff --git a/uudecode/UUENCODE.HPP b/uudecode/UUENCODE.HPP new file mode 100644 index 0000000..f7638a5 --- /dev/null +++ b/uudecode/UUENCODE.HPP @@ -0,0 +1,36 @@ +#ifndef _UUTOOL_UUENCODE_HPP_ +#define _UUTOOL_UUENCODE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +template +class Block; +class String; + +class UUEncode +{ +public: + UUEncode(void); + virtual ~UUEncode(); + BOOL encode(String srcPathFileName,Block &lineStrings,BOOL initBlock=TRUE); +private: + BYTE chEncode(int ch)const; +}; + +inline +UUEncode::UUEncode(void) +{ +} + +inline +UUEncode::~UUEncode() +{ +} + +inline +BYTE UUEncode::chEncode(int ch)const +{ + return (ch?(ch&0x3F)+' ':'`'); +} +#endif \ No newline at end of file diff --git a/uudecode/UUENCODE.TXT b/uudecode/UUENCODE.TXT new file mode 100644 index 0000000..36cf28f Binary files /dev/null and b/uudecode/UUENCODE.TXT differ diff --git a/uudecode/UULIB.BAK b/uudecode/UULIB.BAK new file mode 100644 index 0000000..8411704 --- /dev/null +++ b/uudecode/UULIB.BAK @@ -0,0 +1,226 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=uulib - Win32 Debug +!MESSAGE No configuration specified. Defaulting to uulib - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "uulib - Win32 Release" && "$(CFG)" != "uulib - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "uulib.mak" CFG="uulib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uulib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "uulib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +CPP=cl.exe + +!IF "$(CFG)" == "uulib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : + +CLEAN : + -@erase + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/uulib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/uulib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/uulib.lib" +LIB32_OBJS= \ + + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\uulib.lib" + +CLEAN : + -@erase "..\exe\uulib.lib" + -@erase ".\Cfile.obj" + -@erase ".\Decode64.obj" + -@erase ".\Uudecode.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /W1 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /W1 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/uulib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/uulib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\uulib.lib" +LIB32_FLAGS=/nologo /out:"..\exe\uulib.lib" +LIB32_OBJS= \ + ".\Cfile.obj" \ + ".\Decode64.obj" \ + ".\Uudecode.obj" + +"..\exe\uulib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "uulib - Win32 Release" +# Name "uulib - Win32 Debug" + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Masm\Uudecode.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Masm\Decode64.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Masm\Cfile.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Cfile.asm +InputName=Cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/UULIB.DSW b/uudecode/UULIB.DSW new file mode 100644 index 0000000..c4ae7aa --- /dev/null +++ b/uudecode/UULIB.DSW @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "uulib"=.\uulib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/uudecode/UULIB.PLG b/uudecode/UULIB.PLG new file mode 100644 index 0000000..77ce78b --- /dev/null +++ b/uudecode/UULIB.PLG @@ -0,0 +1,28 @@ + + +

+

Build Log

+

+--------------------Configuration: uulib - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1D2.bat" with contents +[ +@echo off +c:\masm32\bin\ml /c /Zi /coff masm\Uudecode.asm +] +Creating command line "C:\DOCUME~1\TERNET~1\LOCALS~1\Temp\RSP1D2.bat" +

Output Window

+Performing Custom Build Step on .\Masm\Uudecode.asm +Microsoft (R) Macro Assembler Version 6.14.8444 +Copyright (C) Microsoft Corp 1981-1997. All rights reserved. + + Assembling: masm\Uudecode.asm + + + +

Results

+Uudecode.obj - 0 error(s), 0 warning(s) +
+ + diff --git a/uudecode/Uudecode.mak b/uudecode/Uudecode.mak new file mode 100644 index 0000000..7fe7865 --- /dev/null +++ b/uudecode/Uudecode.mak @@ -0,0 +1,313 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +!IF "$(CFG)" == "" +CFG=uudecode - Win32 Debug +!MESSAGE No configuration specified. Defaulting to uudecode - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "uudecode - Win32 Release" && "$(CFG)" !=\ + "uudecode - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Uudecode.mak" CFG="uudecode - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uudecode - Win32 Release" (based on\ + "Win32 (x86) Dynamic-Link Library") +!MESSAGE "uudecode - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "uudecode - Win32 Debug" +CPP=cl.exe +RSC=rc.exe +MTL=mktyplib.exe + +!IF "$(CFG)" == "uudecode - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Uudecode.dll" + +CLEAN : + -@erase "$(INTDIR)\decode.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(OUTDIR)\Uudecode.dll" + -@erase "$(OUTDIR)\Uudecode.exp" + -@erase "$(OUTDIR)\Uudecode.lib" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Uudecode.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Uudecode.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + /pdb:"$(OUTDIR)/Uudecode.pdb" /machine:I386 /out:"$(OUTDIR)/Uudecode.dll"\ + /implib:"$(OUTDIR)/Uudecode.lib" +LINK32_OBJS= \ + "$(INTDIR)\decode.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\uulib.lib" + +"$(OUTDIR)\Uudecode.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Uudecode.exe" + +CLEAN : + -@erase "$(INTDIR)\decode.obj" + -@erase "$(INTDIR)\uuencode.obj" + -@erase "$(OUTDIR)\Uudecode.exe" + -@erase "$(OUTDIR)\Uudecode.map" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h"\ + /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Uudecode.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none\ + /map:"$(INTDIR)/Uudecode.map" /debug /machine:I386\ + /out:"$(OUTDIR)/Uudecode.exe" +LINK32_OBJS= \ + "$(INTDIR)\decode.obj" \ + "$(INTDIR)\uuencode.obj" \ + "..\Exe\mscommon.lib" \ + "..\Exe\uulib.lib" + +"$(OUTDIR)\Uudecode.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "uudecode - Win32 Release" +# Name "uudecode - Win32 Debug" + +!IF "$(CFG)" == "uudecode - Win32 Release" + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\mscommon.lib + +!IF "$(CFG)" == "uudecode - Win32 Release" + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\decode.cpp + +!IF "$(CFG)" == "uudecode - Win32 Release" + +DEP_CPP_DECOD=\ + {$(INCLUDE)}"\.\Decode.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\decode.obj" : $(SOURCE) $(DEP_CPP_DECOD) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +DEP_CPP_DECOD=\ + {$(INCLUDE)}"\.\Decode.hpp"\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Console.hpp"\ + {$(INCLUDE)}"\Common\Coord.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Scrnbuff.hpp"\ + {$(INCLUDE)}"\Common\Smrect.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\decode.obj" : $(SOURCE) $(DEP_CPP_DECOD) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\uuencode.cpp +DEP_CPP_UUENC=\ + {$(INCLUDE)}"\.\Uuencode.hpp"\ + {$(INCLUDE)}"\Common\Block.hpp"\ + {$(INCLUDE)}"\Common\Block.tpp"\ + {$(INCLUDE)}"\Common\Diskinfo.hpp"\ + {$(INCLUDE)}"\Common\except.hpp"\ + {$(INCLUDE)}"\Common\Filemap.hpp"\ + {$(INCLUDE)}"\Common\Filetime.hpp"\ + {$(INCLUDE)}"\Common\Finddata.hpp"\ + {$(INCLUDE)}"\Common\Fixup.hpp"\ + {$(INCLUDE)}"\Common\Openfile.hpp"\ + {$(INCLUDE)}"\Common\overlap.hpp"\ + {$(INCLUDE)}"\Common\Profile.hpp"\ + {$(INCLUDE)}"\Common\Puredwrd.hpp"\ + {$(INCLUDE)}"\Common\Pvector.hpp"\ + {$(INCLUDE)}"\Common\Pvector.tpp"\ + {$(INCLUDE)}"\Common\Pview.hpp"\ + {$(INCLUDE)}"\Common\Stdlib.hpp"\ + {$(INCLUDE)}"\Common\String.hpp"\ + {$(INCLUDE)}"\Common\Systime.hpp"\ + {$(INCLUDE)}"\Common\Types.hpp"\ + {$(INCLUDE)}"\Common\Windows.hpp"\ + + +"$(INTDIR)\uuencode.obj" : $(SOURCE) $(DEP_CPP_UUENC) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\Work\Exe\uulib.lib + +!IF "$(CFG)" == "uudecode - Win32 Release" + +!ELSEIF "$(CFG)" == "uudecode - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/Uudecode.obj b/uudecode/Uudecode.obj new file mode 100644 index 0000000..1bc30b9 Binary files /dev/null and b/uudecode/Uudecode.obj differ diff --git a/uudecode/Uulib.001 b/uudecode/Uulib.001 new file mode 100644 index 0000000..ca83700 --- /dev/null +++ b/uudecode/Uulib.001 @@ -0,0 +1,150 @@ +# Microsoft Developer Studio Project File - Name="uulib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=uulib - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "uulib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "uulib.mak" CFG="uulib - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uulib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "uulib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe + +!IF "$(CFG)" == "uulib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\uulib.lib" + +!ENDIF + +# Begin Target + +# Name "uulib - Win32 Release" +# Name "uulib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Masm\Cfile.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Cfile.asm +InputName=Cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\parts\ddk\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Masm\Decode64.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\parts\ddk\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Masm\Uudecode.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\parts\ddk\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/uudecode/Uulib.dsp b/uudecode/Uulib.dsp new file mode 100644 index 0000000..a91f83f --- /dev/null +++ b/uudecode/Uulib.dsp @@ -0,0 +1,187 @@ +# Microsoft Developer Studio Project File - Name="uulib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=uulib - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Uulib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Uulib.mak" CFG="uulib - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uulib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "uulib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "uulib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 +# ADD RSC /l 0x409 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\uulib.lib" + +!ENDIF + +# Begin Target + +# Name "uulib - Win32 Release" +# Name "uulib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Masm\Cfile.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +# Begin Custom Build +InputPath=.\Masm\Cfile.asm +InputName=Cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + \parts\ddk\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Cfile.asm +InputName=Cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\masm32\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Decode.cpp +# End Source File +# Begin Source File + +SOURCE=.\Masm\Decode64.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +# Begin Custom Build +InputPath=.\Masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + \parts\ddk\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\masm32\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Masm\Uudecode.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +# Begin Custom Build +InputPath=.\Masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + \parts\ddk\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + c:\masm32\bin\ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/uudecode/Uulib.mak b/uudecode/Uulib.mak new file mode 100644 index 0000000..8411704 --- /dev/null +++ b/uudecode/Uulib.mak @@ -0,0 +1,226 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +!IF "$(CFG)" == "" +CFG=uulib - Win32 Debug +!MESSAGE No configuration specified. Defaulting to uulib - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "uulib - Win32 Release" && "$(CFG)" != "uulib - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "uulib.mak" CFG="uulib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uulib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "uulib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +CPP=cl.exe + +!IF "$(CFG)" == "uulib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : + +CLEAN : + -@erase + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/uulib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/uulib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo +LIB32_FLAGS=/nologo /out:"$(OUTDIR)/uulib.lib" +LIB32_OBJS= \ + + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "..\exe\uulib.lib" + +CLEAN : + -@erase "..\exe\uulib.lib" + -@erase ".\Cfile.obj" + -@erase ".\Decode64.obj" + -@erase ".\Uudecode.obj" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /W1 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STRICT" /D "__FLAT__" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /W1 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"\ + /D "STRICT" /D "__FLAT__" /Fp"$(INTDIR)/uulib.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/uulib.bsc" +BSC32_SBRS= \ + +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"..\exe\uulib.lib" +LIB32_FLAGS=/nologo /out:"..\exe\uulib.lib" +LIB32_OBJS= \ + ".\Cfile.obj" \ + ".\Decode64.obj" \ + ".\Uudecode.obj" + +"..\exe\uulib.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) + $(LIB32) @<< + $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "uulib - Win32 Release" +# Name "uulib - Win32 Debug" + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Masm\Uudecode.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Masm\Decode64.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Masm\Cfile.asm + +!IF "$(CFG)" == "uulib - Win32 Release" + +!ELSEIF "$(CFG)" == "uulib - Win32 Debug" + +# Begin Custom Build +InputPath=.\Masm\Cfile.asm +InputName=Cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/uudecode/base64.001 b/uudecode/base64.001 new file mode 100644 index 0000000..6afa76e --- /dev/null +++ b/uudecode/base64.001 @@ -0,0 +1,181 @@ +# Microsoft Developer Studio Project File - Name="base64" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=base64 - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "base64.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "base64.mak" CFG="base64 - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "base64 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "base64 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "base64 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "base64 - Win32 Release" +# Name "base64 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\base64.cpp + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# ADD CPP /Zp1 /FA + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\masm\cfile.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\masm\Decode64.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\Exe\mscommon.lib +# End Source File +# Begin Source File + +SOURCE=.\masm\Uudecode.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Cfile.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/uudecode/base64.dsp b/uudecode/base64.dsp new file mode 100644 index 0000000..6c3514a --- /dev/null +++ b/uudecode/base64.dsp @@ -0,0 +1,179 @@ +# Microsoft Developer Studio Project File - Name="base64" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=base64 - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "base64.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "base64.mak" CFG="base64 - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "base64 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "base64 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "base64 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"\work\exe\msvc42.pch" /YX"windows.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /map /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "base64 - Win32 Release" +# Name "base64 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\base64.cpp + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# ADD CPP /Zp1 /FA + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\masm\cfile.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\cfile.asm +InputName=cfile + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + /parts/ddk/bin/ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\masm\Decode64.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Decode64.asm +InputName=Decode64 + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + /parts/ddk/bin/ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\masm\Uudecode.asm + +!IF "$(CFG)" == "base64 - Win32 Release" + +!ELSEIF "$(CFG)" == "base64 - Win32 Debug" + +# Begin Custom Build +InputPath=.\masm\Uudecode.asm +InputName=Uudecode + +"$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + /parts/ddk/bin/ml /c /Zi /coff masm\$(InputName).asm + +# End Custom Build + +!ENDIF + +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\Cfile.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/uudecode/base64.dsw b/uudecode/base64.dsw new file mode 100644 index 0000000..36ea8cc --- /dev/null +++ b/uudecode/base64.dsw @@ -0,0 +1,44 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "base64"=.\base64.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/uudecode/base64.mdp b/uudecode/base64.mdp new file mode 100644 index 0000000..894d6bb Binary files /dev/null and b/uudecode/base64.mdp differ diff --git a/uudecode/base64.ncb b/uudecode/base64.ncb new file mode 100644 index 0000000..ba009aa Binary files /dev/null and b/uudecode/base64.ncb differ diff --git a/uudecode/base64.opt b/uudecode/base64.opt new file mode 100644 index 0000000..7b124ee Binary files /dev/null and b/uudecode/base64.opt differ diff --git a/uudecode/decomain.cpp b/uudecode/decomain.cpp new file mode 100644 index 0000000..6580feb --- /dev/null +++ b/uudecode/decomain.cpp @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR lpszCmdLine,int /*nCmdShow*/) +{ + FindData findFile; + Console winConsole; + String strPathOutputFileName; + + if(!lpszCmdLine||!*lpszCmdLine) + { + winConsole.writeLine("UUDECODE Version 1.0 Copyright (c) 1997 Diversified Software Solutions."); + winConsole.writeLine("mail comments/suggestions to europa@li.net."); + winConsole.writeLine("Syntax: UUDECODE [fileflags]"); + winConsole.writeLine("Example: UUDECODE *.txt"); + winConsole.read(); + return FALSE; + } + strPathOutputFileName.reserve(256); + if(findFile.findFirst(lpszCmdLine)) + { + winConsole.writeLine(findFile.fileName()); + if(!uudecode(findFile.fileName(),(LPSTR)strPathOutputFileName))winConsole.writeLine("unable to decode file."); + while(findFile.findNext()) + { + winConsole.writeLine(findFile.fileName()); + if(!uudecode(findFile.fileName(),(LPSTR)strPathOutputFileName))winConsole.writeLine("unable to decode file."); + } + } + return FALSE; +} diff --git a/uudecode/smk b/uudecode/smk new file mode 100644 index 0000000..3390a44 --- /dev/null +++ b/uudecode/smk @@ -0,0 +1,3713 @@ + '50 61 74 68 3a 20 69 61 64 2d 73 70 6f 6f 6c 2e ' + '6e 65 77 73 2e 76 65 72 69 6f 2e 6e 65 74 21 69 ' + '61 64 2d 61 72 74 67 65 6e 2e 6e 65 77 73 2e 76 ' + '65 72 69 6f 2e 6e 65 74 21 6e 75 71 2d 70 65 65 ' + '72 2e 6e 65 77 73 2e 76 65 72 69 6f 2e 6e 65 74 ' + '21 6e 65 77 73 2e 76 65 72 69 6f 2e 6e 65 74 21 ' + '6c 6f 67 62 72 69 64 67 65 2e 75 6f 72 65 67 6f ' + '6e 2e 65 64 75 21 73 75 2d 6e 65 77 73 2d 68 75 ' + '62 31 2e 62 62 6e 70 6c 61 6e 65 74 2e 63 6f 6d ' + '21 77 61 73 68 64 63 33 2d 73 6e 68 31 2e 67 74 ' + '65 69 2e 6e 65 74 21 6e 65 77 73 2e 67 74 65 69 ' + '2e 6e 65 74 21 64 66 69 61 74 78 31 2d 73 6e 72 ' + '31 2e 67 74 65 69 2e 6e 65 74 2e 50 4f 53 54 45 ' + '44 21 6e 6f 74 2d 66 6f 72 2d 6d 61 69 6c 0d 0a ' + '46 72 6f 6d 3a 20 56 69 72 67 69 6c 40 48 6f 6d ' + '65 2e 63 6f 6d 20 28 56 69 72 67 69 6c 29 0d 0a ' + '53 75 62 6a 65 63 74 3a 20 2a 2a 20 4a 65 6e 65 ' + '73 20 2a 2a 20 31 73 74 20 54 69 6d 65 20 50 6f ' + '73 74 20 2d 20 6a 65 6e 65 73 30 31 2e 6a 70 67 ' + '28 31 2f 31 29 20 34 31 35 31 31 20 62 79 74 65 ' + '73 0d 0a 4f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a ' + '20 57 68 61 74 20 4d 65 20 4f 72 67 61 6e 69 7a ' + '65 64 3f 0d 0a 52 65 70 6c 79 2d 54 6f 3a 20 43 ' + '6f 6d 6d 65 6e 74 73 20 57 65 6c 63 6f 6d 65 0d ' + '0a 4e 65 77 73 67 72 6f 75 70 73 3a 20 61 6c 74 ' + '2e 62 69 6e 61 72 69 65 73 2e 6e 6f 73 70 61 6d ' + '2e 64 65 6e 69 6d 0d 0a 50 6f 73 74 2d 43 6f 75 ' + '6e 74 3a 20 30 30 30 30 31 37 0d 0a 4c 69 6e 65 ' + '73 3a 20 39 33 32 0d 0a 4d 65 73 73 61 67 65 2d ' + '49 44 3a 20 3c 58 72 4b 71 33 2e 36 34 34 24 74 ' + '65 32 2e 32 34 37 31 34 40 64 66 69 61 74 78 31 ' + '2d 73 6e 72 31 2e 67 74 65 69 2e 6e 65 74 3e 0d ' + '0a 58 2d 54 72 61 63 65 3a 20 39 2f 6d 6f 2b 35 ' + '61 50 65 78 74 53 7a 78 2b 2f 61 45 54 65 76 2b ' + '62 2b 33 67 79 69 2f 6a 6c 46 46 6a 41 51 46 56 ' + '68 47 53 31 4a 6c 71 33 75 51 2f 55 42 31 37 43 ' + '38 6d 70 75 75 6c 59 6d 42 2b 71 57 67 41 2b 56 ' + '78 47 41 45 48 58 21 33 64 6f 68 68 45 77 77 63 ' + '4c 44 72 63 76 77 33 39 55 54 36 63 4d 65 4f 6b ' + '74 2f 70 6a 58 68 59 62 45 66 50 56 61 4f 41 4d ' + '63 54 70 2f 68 33 4e 2f 79 2b 6b 4b 4b 6b 39 53 ' + '6f 62 4a 31 61 73 32 34 71 42 39 73 4f 38 3d 0d ' + '0a 58 2d 43 6f 6d 70 6c 61 69 6e 74 73 2d 54 6f ' + '3a 20 61 62 75 73 65 40 67 74 65 2e 6e 65 74 0d ' + '0a 58 2d 41 62 75 73 65 2d 49 6e 66 6f 3a 20 50 ' + '6c 65 61 73 65 20 62 65 20 73 75 72 65 20 74 6f ' + '20 66 6f 72 77 61 72 64 20 61 20 63 6f 70 79 20 ' + '6f 66 20 41 4c 4c 20 68 65 61 64 65 72 73 0d 0a ' + '58 2d 41 62 75 73 65 2d 49 6e 66 6f 3a 20 4f 74 ' + '68 65 72 77 69 73 65 20 77 65 20 77 69 6c 6c 20 ' + '62 65 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 6f ' + '63 65 73 73 20 79 6f 75 72 20 63 6f 6d 70 6c 61 ' + '69 6e 74 20 70 72 6f 70 65 72 6c 79 0d 0a 4e 4e ' + '54 50 2d 50 6f 73 74 69 6e 67 2d 44 61 74 65 3a ' + '20 46 72 69 2c 20 30 36 20 41 75 67 20 31 39 39 ' + '39 20 32 33 3a 34 34 3a 35 35 20 47 4d 54 0d 0a ' + '44 69 73 74 72 69 62 75 74 69 6f 6e 3a 20 77 6f ' + '72 6c 64 0d 0a 44 61 74 65 3a 20 46 72 69 2c 20 ' + '30 36 20 41 75 67 20 31 39 39 39 20 32 33 3a 34 ' + '34 3a 35 35 20 47 4d 54 0d 0a 58 72 65 66 3a 20 ' + '69 61 64 2d 61 72 74 67 65 6e 2e 6e 65 77 73 2e ' + '76 65 72 69 6f 2e 6e 65 74 20 61 6c 74 2e 62 69 ' + '6e 61 72 69 65 73 2e 6e 6f 73 70 61 6d 2e 64 65 ' + '6e 69 6d 3a 31 36 38 38 37 0d 0a 2a 2a 2a 2a 2a ' + '20 43 6f 6d 6d 65 6e 74 73 20 57 65 6c 63 6f 6d ' + '65 20 2a 2a 2a 2a 2a 0d 0a 42 45 47 49 4e 20 2d ' + '2d 2d 20 43 55 54 20 48 45 52 45 20 2d 2d 2d 20 ' + '43 75 74 20 48 65 72 65 20 2d 2d 2d 20 63 75 74 ' + '20 68 65 72 65 20 2d 2d 2d 20 6a 65 6e 65 73 30 ' + '31 2e 6a 70 67 0d 0a 62 65 67 69 6e 20 36 34 34 ' + '20 6a 65 6e 65 73 30 31 2e 6a 70 67 0d 0a 4d 5f ' + '5d 43 5f 58 60 60 30 32 44 39 29 31 40 60 21 60 ' + '30 24 60 52 60 23 28 60 60 23 5f 56 50 21 23 60 ' + '60 34 23 21 60 30 24 60 50 34 24 21 60 30 25 21 ' + '30 34 26 21 50 50 28 21 50 3c 27 0d 0a 4d 21 50 ' + '5c 2b 22 50 44 2c 24 30 5c 32 24 41 24 2f 24 31 ' + '24 33 25 41 50 37 24 51 30 3a 25 31 24 31 26 22 ' + '24 38 26 41 54 3d 27 51 5c 3f 24 51 3c 42 29 22 ' + '28 3e 29 21 50 3e 27 51 5b 5f 0d 0a 4d 56 50 21 ' + '23 60 30 34 25 21 30 3c 26 21 50 58 28 22 60 58 ' + '3e 25 21 24 34 27 41 58 3e 27 41 58 3e 27 41 58 ' + '3e 27 41 58 3e 27 41 58 3e 27 41 58 3e 27 41 58 ' + '3e 27 41 58 3e 27 41 58 3e 0d 0a 4d 27 41 58 3e ' + '27 41 58 3e 27 41 58 3e 27 41 58 3e 27 41 58 3e ' + '27 41 58 3e 27 41 58 3e 27 41 5b 5f 50 60 60 31 ' + '22 60 27 40 60 48 60 23 60 32 28 60 60 41 24 21 ' + '60 51 24 21 5f 5c 30 60 0d 0a 4d 27 60 60 60 60 ' + '40 2c 21 60 30 24 21 60 60 60 60 60 60 60 60 60 ' + '60 60 60 60 40 2c 21 21 60 34 60 21 40 3c 28 5f ' + '5c 30 60 31 31 60 60 60 40 24 23 60 50 2c 22 21 ' + '60 34 21 21 30 38 25 0d 0a 4d 60 50 30 23 0d 0a ' + '60 30 28 23 60 60 30 31 21 31 28 41 28 43 25 21 ' + '24 53 28 26 30 45 25 41 25 22 2d 32 3c 38 25 42 ' + '21 57 2a 31 48 3b 24 35 29 23 2e 32 50 3f 21 23 ' + '40 4a 2b 31 58 31 3a 52 0d 0a 4d 5c 32 35 43 50 ' + '4d 29 44 3c 5b 2f 5f 51 60 60 3a 60 30 60 23 60 ' + '30 24 21 60 30 60 60 60 60 60 60 60 60 60 60 60 ' + '60 60 60 60 30 28 23 21 60 34 26 5f 5c 30 60 2a ' + '51 24 60 60 40 28 22 0d 0a 4d 60 40 24 24 60 40 ' + '24 25 60 30 24 21 60 60 60 60 60 60 24 22 24 30 ' + '2c 41 24 43 24 42 21 21 2c 52 30 35 25 41 30 40 ' + '34 34 28 55 29 51 2c 56 28 35 5f 5d 48 60 23 60 ' + '2c 21 60 60 28 31 0d 0a 4d 60 51 24 60 2f 50 23 ' + '5c 5e 5b 4f 3d 5f 37 31 2a 57 37 4d 49 3b 3d 35 ' + '33 4f 2a 4c 55 3c 4c 49 54 3d 44 38 5f 5a 47 55 ' + '5b 5e 52 22 5f 43 46 4c 49 3d 2e 44 3b 24 52 5c ' + '4b 5f 41 5f 5c 0d 0a 4d 35 5b 4a 54 45 32 54 45 ' + '2c 23 5d 2e 57 43 46 4f 40 47 50 39 4a 53 5a 35 ' + '4b 24 3d 52 23 4d 26 3e 4b 5e 5b 37 56 33 37 39 ' + '43 3d 36 3c 26 4a 36 53 3f 45 32 24 4b 29 43 51 ' + '57 51 5f 49 0d 0a 4d 37 49 3e 47 52 3c 4d 27 43 ' + '5e 4d 51 35 2a 54 3b 41 45 32 5a 2c 54 38 2f 34 ' + '3c 3f 53 42 44 5a 3f 28 2c 2d 25 2c 3f 33 3d 3e ' + '2e 4b 4c 3f 56 4b 2c 54 3e 3f 5c 50 2a 51 5a 41 ' + '59 4b 54 0d 0a 4d 21 25 4e 54 52 49 28 42 4e 49 ' + '27 3c 3d 51 37 3b 26 35 47 26 5c 3d 2b 38 42 2e ' + '21 26 4e 60 29 44 44 22 5c 44 2c 2e 56 3a 4e 33 ' + '46 2e 32 57 2d 4a 58 2e 21 52 22 2f 4b 34 5b 34 ' + '4d 58 0d 0a 4d 26 43 34 46 36 27 27 53 3d 51 32 ' + '45 4d 39 25 42 23 46 34 2f 44 5c 43 2d 36 38 4d ' + '37 49 45 3d 28 2e 41 58 2e 5a 32 3c 35 54 5c 31 ' + '4d 5d 28 47 43 45 52 60 28 56 22 5f 58 35 3d 4d ' + '38 0d 0a 4d 39 25 4e 23 45 48 53 4d 60 57 22 44 ' + '5f 26 2c 4a 27 32 4b 42 34 39 35 45 35 56 26 2e ' + '57 38 54 32 38 57 27 36 43 58 33 4e 53 3d 33 4d ' + '5f 50 23 59 24 47 5f 5f 60 24 3a 4b 22 4d 55 4d ' + '0d 0a 4d 32 36 58 47 44 3b 3b 5b 49 37 5f 5e 59 ' + '4a 3f 27 4d 53 53 37 42 5e 49 45 5f 44 2f 3c 5d ' + '27 43 58 58 32 59 22 2e 25 4a 5b 24 25 38 5b 33 ' + '56 4a 49 3b 4f 5b 45 5c 35 3e 31 2e 52 55 52 0d ' + '0a 4d 4f 3c 43 4d 43 2a 42 57 3a 48 56 51 3f 4e ' + '2a 4e 49 57 56 5e 3a 4b 36 5e 57 4d 35 4d 21 55 ' + '2a 50 4a 27 5e 23 35 43 25 27 32 26 2f 3f 44 34 ' + '55 33 40 24 23 57 34 2a 23 2b 47 5a 54 32 0d 0a ' + '4d 4b 42 31 27 5f 46 45 2c 4d 2b 39 29 60 2a 39 ' + '5c 34 5b 57 49 5f 41 30 24 2a 4b 44 3e 2a 29 25 ' + '3b 4d 58 53 32 3b 27 51 3d 43 60 2c 29 5e 53 59 ' + '4a 55 60 36 57 4a 2a 34 47 3f 41 3a 3b 0d 0a 4d ' + '27 47 3a 26 60 5b 54 49 31 4d 43 4f 5c 23 54 56 ' + '5c 27 52 23 35 46 24 45 46 29 60 58 5b 35 34 60 ' + '3b 2e 3f 21 2e 3a 4d 51 47 3a 26 56 5d 50 2c 54 ' + '34 22 36 51 54 5a 45 40 30 2f 49 37 0d 0a 4d 31 ' + '3e 55 44 5c 44 59 49 44 3b 39 50 31 52 23 32 54 ' + '52 29 4c 4d 40 27 4d 35 2c 45 4e 47 30 52 27 46 ' + '23 39 5d 53 35 41 3c 26 22 33 27 40 39 5f 46 44 ' + '43 42 31 44 5c 3d 5a 3c 4e 34 46 0d 0a 4d 2a 3e ' + '26 26 2a 44 29 2f 30 39 5a 45 3c 39 5b 4a 4e 2f ' + '57 25 2c 3d 4e 40 58 5b 40 39 49 34 31 22 2c 30 ' + '31 56 51 5f 41 31 52 2c 2f 4d 52 2d 41 48 38 3f ' + '39 38 22 45 48 40 35 5d 57 2e 0d 0a 4d 31 33 39 ' + '2c 39 43 3b 59 32 3c 34 4a 57 3c 4a 56 31 56 2f ' + '27 5e 35 36 39 60 4a 36 42 45 4f 55 3c 3f 4d 32 ' + '4c 41 57 3d 25 3d 53 5e 30 51 5e 43 3c 5f 50 22 ' + '2d 2f 43 34 40 45 4f 55 26 0d 0a 4d 4e 45 42 24 ' + '40 47 43 37 43 3d 56 5f 55 4b 48 59 22 3b 31 33 ' + '43 4a 53 32 2d 25 48 3f 3e 51 4a 43 31 4c 49 59 ' + '3d 3e 30 3a 34 40 2f 58 37 43 4e 26 25 36 2b 47 ' + '5c 51 28 39 22 2e 30 3c 0d 0a 4d 27 5d 4a 42 2f ' + '60 2b 3c 3d 29 5b 35 33 25 3d 3d 45 40 59 3d 24 ' + '45 27 5b 34 46 28 24 51 4b 24 4f 3c 3c 34 3d 4b ' + '51 21 5a 33 27 49 21 26 23 30 4a 51 32 3c 32 38 ' + '58 27 2f 5c 54 2d 41 0d 0a 4d 36 51 42 59 52 58 ' + '27 5b 35 2a 27 24 2b 29 5c 57 3c 35 52 4a 53 53 ' + '2c 5a 44 3d 31 57 38 5e 55 27 2b 40 45 36 28 50 ' + '33 44 34 2c 29 29 2f 33 29 39 37 28 32 33 5a 47 ' + '3b 31 27 28 42 29 0d 0a 4d 2f 40 54 28 29 56 21 ' + '32 3e 30 56 3a 39 23 41 58 42 49 5e 4d 27 39 2b ' + '42 54 5d 43 4b 3f 21 3c 48 3c 58 3b 53 37 3b 26 ' + '60 3b 47 53 30 5b 43 26 4a 22 46 50 44 2b 47 2f ' + '2e 32 22 3c 55 0d 0a 4d 33 25 54 23 52 30 5a 23 ' + '53 50 3a 2e 32 2f 60 39 23 5b 3f 4b 30 2d 46 2e ' + '35 4c 23 2e 3a 38 41 2b 2a 48 29 59 21 49 3f 52 ' + '21 3b 29 34 40 40 39 5d 48 2f 2d 3c 26 57 2e 49 ' + '2f 27 3a 40 0d 0a 4d 3b 2e 37 22 47 40 46 49 42 ' + '59 31 45 38 5d 37 42 46 51 2e 5f 4c 2e 59 34 22 ' + '37 4f 51 46 45 45 42 53 38 5e 4d 2c 46 51 4e 22 ' + '4d 58 4a 60 48 60 35 5f 4f 51 32 3a 56 36 46 45 ' + '56 2b 38 0d 0a 4d 44 24 4b 5d 5a 45 2f 3a 56 2e ' + '59 26 2f 5c 3a 42 30 39 0d 0a 2b 2c 23 5c 55 33 ' + '26 22 4e 2f 2e 5b 4d 5d 5a 31 33 31 52 44 51 52 ' + '47 43 4a 2f 25 21 2c 30 35 60 34 59 2e 3e 3a 2a ' + '34 2e 29 41 0d 0a 4d 43 5a 5c 55 22 40 59 28 60 ' + '27 44 54 2d 41 51 60 2c 51 36 34 40 43 41 4a 2d ' + '46 57 32 2a 57 5c 34 2c 44 36 58 21 56 51 51 42 ' + '49 31 3c 2a 36 53 50 23 32 3e 52 46 4a 56 31 2a ' + '60 29 53 0d 0a 4d 24 33 50 48 53 46 44 2d 44 23 ' + '27 44 54 51 45 5d 31 5f 35 29 5c 5d 4a 44 2a 36 ' + '28 28 26 31 56 25 23 5f 60 2d 27 2a 4e 34 27 54 ' + '4a 29 50 3e 57 40 34 34 3c 56 26 2a 58 5b 5c 23 ' + '5d 5a 0d 0a 4d 60 21 5d 49 2b 40 3b 42 3e 2a 2b ' + '25 54 33 4d 22 27 26 31 53 53 42 48 3d 55 57 2b ' + '5a 3f 28 5c 34 51 38 50 60 51 3b 57 3d 4a 26 21 ' + '60 42 44 44 23 40 3c 34 2c 2e 51 34 4b 25 32 3c ' + '3d 0d 0a 4d 50 3a 41 35 57 23 2b 47 44 3d 40 2a ' + '46 35 33 44 3e 32 3e 3f 57 4a 34 35 4c 60 4d 50 ' + '50 49 3d 60 57 48 59 48 40 34 2e 33 55 25 4e 55 ' + '29 44 2e 54 27 5a 43 5f 60 25 4a 55 2a 21 40 2d ' + '0d 0a 4d 43 4d 51 35 3c 4c 49 39 4c 5d 5a 3b 39 ' + '2a 3b 24 51 2d 45 5e 3a 2c 2b 44 4c 55 24 58 35 ' + '36 21 58 59 59 58 48 30 50 50 35 27 38 55 28 56 ' + '4b 24 52 60 45 53 5d 22 3c 54 24 4a 40 2e 60 0d ' + '0a 4d 23 52 3c 60 55 3a 2a 4b 4d 29 2f 3b 51 32 ' + '29 31 24 4b 27 2f 3f 4f 46 44 4d 4c 54 21 43 5f ' + '2b 34 40 3d 5c 38 25 60 52 47 21 5f 3e 46 39 34 ' + '43 2a 43 44 35 51 58 21 22 47 29 2f 55 4a 0d 0a ' + '4d 46 30 56 41 22 4b 43 3c 55 2b 44 33 3d 44 47 ' + '4c 23 35 45 50 4e 3e 33 32 59 40 4f 52 5d 4a 30 ' + '5d 3d 25 3d 56 51 29 40 3d 4a 26 30 43 26 3f 46 ' + '5c 54 58 49 54 24 47 26 3f 2d 29 2a 27 0d 0a 4d ' + '2f 2f 3a 46 23 31 28 43 5b 5f 36 41 2e 22 51 21 ' + '5c 34 3c 41 60 39 4e 3f 2d 2a 2f 4e 2e 2a 2b 26 ' + '52 26 2e 57 4f 35 3e 34 45 49 22 55 36 36 60 51 ' + '55 34 46 30 38 29 60 5f 3a 44 50 56 0d 0a 4d 47 ' + '4c 5f 29 42 4d 5b 4a 59 41 53 34 3e 51 5a 45 4e ' + '5d 3d 4c 4f 5d 33 41 5f 50 23 2e 2f 42 25 60 2d ' + '4b 3b 2a 5e 4d 3f 56 3f 3a 4a 4d 5b 49 24 46 45 ' + '57 2b 47 54 59 24 39 2f 56 2f 55 0d 0a 4d 4b 59 ' + '2b 5b 36 39 2a 5d 3f 5c 60 57 42 51 37 56 50 47 ' + '3a 2d 55 3b 58 57 29 32 2c 2c 52 5d 51 34 3f 33 ' + '3b 3e 29 4b 36 3b 54 29 32 22 30 32 24 44 27 39 ' + '51 36 4b 49 54 53 42 58 2a 32 0d 0a 4d 23 28 27 ' + '27 5c 35 41 26 3a 32 35 4f 30 22 5b 58 4f 3c 43 ' + '5e 31 37 49 2d 2a 40 37 55 50 51 2e 39 2e 2e 2f ' + '4b 37 48 36 3e 37 2f 27 3f 39 3d 44 44 2a 2b 41 ' + '40 3d 4d 25 3b 53 48 59 24 0d 0a 4d 29 43 2e 59 ' + '3e 51 27 38 55 2d 5e 46 22 54 37 2e 54 60 24 26 ' + '47 3a 3c 44 33 31 4a 35 23 46 33 3d 47 5e 3a 57 ' + '33 2e 31 50 32 2b 2c 24 38 34 4c 57 32 26 2f 29 ' + '53 36 2b 5c 38 41 31 48 0d 0a 4d 45 53 5a 47 4c ' + '5d 29 5f 5d 23 36 5b 2a 49 5e 34 4b 40 5e 26 5b ' + '5f 3e 4c 2b 58 5c 3a 2e 2f 58 37 4f 39 22 4b 2c ' + '5a 50 4f 54 43 59 41 4d 2f 5c 60 47 32 5e 50 33 ' + '58 48 5e 27 30 4d 4e 0d 0a 4d 2b 4c 57 4e 5d 31 ' + '4e 4b 5f 50 60 53 35 3a 33 57 3f 55 35 37 41 37 ' + '3b 47 3d 55 3b 46 3a 4b 2c 22 5d 35 3e 2d 5a 46 ' + '2f 2b 28 3f 31 3e 46 45 36 2c 4e 56 5f 3f 5d 5a ' + '54 2b 3c 3c 5b 3f 0d 0a 4d 2d 34 5b 3d 31 45 3a ' + '54 28 21 5e 3e 35 5e 4d 38 4c 57 35 2d 45 4e 57 ' + '33 4c 33 59 4a 57 43 5d 27 3e 45 29 5b 32 4f 44 ' + '2d 33 2c 5d 2f 2e 5a 48 3c 33 36 5b 3d 23 58 40 ' + '55 2d 60 53 43 0d 0a 4d 2f 46 40 27 33 43 5a 26 ' + '47 29 47 29 30 5c 58 5b 26 48 3e 56 3a 29 3c 33 ' + '49 24 21 26 3a 3a 24 52 3d 50 4b 44 22 5b 32 23 ' + '58 2e 23 33 60 30 4c 4a 40 5e 57 2e 23 5e 55 33 ' + '51 26 42 28 0d 0a 4d 5e 22 51 4a 55 22 49 22 47 ' + '2f 55 49 3c 32 27 21 2b 3d 51 34 45 4d 49 34 3f ' + '33 43 2d 2d 46 3d 2d 2f 30 55 30 3e 34 53 52 49 ' + '49 50 21 34 45 3f 28 2e 2a 35 5c 52 4c 2f 2d 2f ' + '23 60 44 0d 0a 4d 3f 34 3c 26 44 52 4d 4f 31 3c ' + '42 2a 22 2f 38 2f 3c 2c 24 3f 4d 30 32 39 57 4e ' + '4e 2e 5f 28 4b 48 40 21 43 5d 53 33 49 40 2e 27 ' + '5c 22 46 52 26 5a 39 60 2a 44 31 4e 2f 46 34 60 ' + '54 51 0d 0a 4d 43 47 29 5c 42 4a 5c 46 35 42 60 ' + '34 58 51 56 4a 51 2a 52 5d 2c 40 27 21 58 5f 51 ' + '4a 3a 26 2e 50 24 45 35 43 52 22 22 2f 5c 4a 35 ' + '2c 49 22 2c 47 3f 3a 30 3a 26 35 5c 2a 31 47 45 ' + '33 0d 0a 4d 47 5e 2c 34 5a 2f 4a 45 52 3e 53 3c ' + '34 51 4e 2d 5b 23 4d 56 2f 49 5c 5e 23 35 5e 3f ' + '5c 53 33 47 21 50 36 33 27 27 55 4a 40 58 56 49 ' + '28 40 5b 43 27 5e 25 37 45 50 36 37 3b 5b 22 3c ' + '0d 0a 4d 34 42 37 48 44 4c 3d 5a 44 23 26 30 2f ' + '5d 2c 35 21 60 60 39 2f 21 2e 31 34 57 4a 46 2c ' + '4d 4d 2e 30 4b 38 5f 3c 35 52 40 2c 49 29 5b 45 ' + '33 42 46 5e 52 4b 4c 4e 2c 25 39 28 4d 49 5a 0d ' + '0a 4d 37 43 21 5f 47 53 35 39 27 2f 2f 5d 2b 39 ' + '49 45 4e 49 24 32 23 2e 32 48 56 5c 5f 32 45 5c ' + '39 46 21 58 2e 5b 28 5f 3a 44 52 35 57 4c 3f 26 ' + '51 3c 32 38 60 26 33 47 25 3d 3c 39 56 27 0d 0a ' + '4d 27 3b 4e 2c 34 4d 32 34 35 22 22 2e 4c 54 56 ' + '38 2c 49 39 36 27 4d 60 58 49 4c 4a 5d 43 0d 0a ' + '38 5c 51 4f 26 2c 5c 5e 46 2a 39 28 48 38 2a 50 ' + '28 59 2d 29 37 23 52 28 2c 43 44 3c 35 28 2e 0d ' + '0a 4d 21 26 49 58 57 2d 32 3e 50 39 38 30 4b 5a ' + '33 59 27 36 49 51 34 28 41 52 36 23 38 5c 54 4d ' + '2e 39 26 37 28 52 36 48 21 28 3c 58 3c 5c 43 5a ' + '34 5e 40 3e 52 56 30 35 26 55 53 56 5c 54 0d 0a ' + '4d 57 54 52 51 56 4a 31 52 3c 34 46 60 42 35 27 ' + '52 3e 31 51 37 3b 42 4c 41 60 2f 2e 3c 40 54 26 ' + '3d 36 52 50 49 3b 55 32 36 27 3b 42 41 43 23 29 ' + '28 47 2e 31 46 40 24 49 36 31 40 33 47 0d 0a 4d ' + '2d 2c 2f 2a 2a 30 3e 3a 3b 26 5b 4c 29 5e 53 3b ' + '3e 56 3c 55 52 5d 50 32 2e 3a 25 35 2f 4a 27 47 ' + '40 46 47 31 23 3c 4b 3b 5e 23 32 2a 34 32 4f 2c ' + '36 3a 33 3c 3c 59 25 2d 34 27 38 60 0d 0a 4d 3f ' + '25 21 28 51 5d 3b 43 52 2e 2a 3c 40 53 22 5b 2a ' + '3c 59 5b 34 5d 40 5d 22 26 28 56 44 5e 2e 5e 2a ' + '29 5e 35 34 40 58 51 56 2f 54 4b 46 33 40 4b 43 ' + '4a 60 4a 22 3d 4e 25 2f 38 22 49 0d 0a 4d 4c 3f ' + '3f 30 2b 24 40 40 44 5c 42 42 34 38 23 5c 58 2f ' + '3a 48 3f 4a 30 4c 31 57 48 26 26 29 60 32 3e 26 ' + '51 30 54 2e 50 52 5e 34 28 2f 38 35 22 41 43 44 ' + '23 44 3f 32 40 39 36 5d 2d 46 0d 0a 4d 5c 27 2d ' + '33 24 5b 2a 41 2f 44 46 41 45 5d 3a 60 4e 2e 46 ' + '31 44 21 5f 50 49 4c 3e 58 41 3e 50 34 3d 4c 34 ' + '47 57 2c 32 33 52 2a 3d 4e 22 51 41 31 58 2f 5c ' + '60 45 31 32 24 5b 21 22 5b 0d 0a 4d 32 36 50 2d ' + '5e 3c 42 4e 53 45 40 26 2f 3b 5f 36 4e 39 50 36 ' + '38 43 51 58 4b 46 3d 60 31 40 40 46 43 4c 47 5f ' + '60 2a 25 40 43 44 5d 5a 60 4e 2e 31 59 21 25 3d ' + '5a 4e 30 33 40 24 40 38 0d 0a 4d 49 39 28 3d 5c ' + '40 3c 5e 3a 26 22 27 2c 3c 27 3f 51 4d 21 5b 34 ' + '26 32 30 32 33 37 24 40 43 3a 2f 25 60 26 29 3b ' + '47 4d 47 25 23 27 51 4d 3b 2e 3e 3c 45 46 58 26 ' + '57 5f 59 4a 4f 2a 46 0d 0a 4d 58 4c 3c 58 53 31 ' + '37 2c 4c 3a 33 2d 24 48 5b 4d 42 42 50 2f 34 38 ' + '23 56 5e 2f 5c 60 22 44 51 54 54 60 25 52 59 28 ' + '5c 22 41 30 23 3e 35 2f 43 53 31 24 4c 43 3b 35 ' + '5b 34 36 54 60 38 0d 0a 4d 5c 58 25 27 38 4b 21 ' + '47 58 52 48 59 60 49 23 48 36 29 5c 58 53 42 4b ' + '23 60 59 52 2c 38 49 3c 4a 47 47 3b 5d 3f 5c 4a ' + '41 5d 40 22 56 25 29 35 31 51 30 4f 43 29 51 57 ' + '4b 46 29 37 29 0d 0a 4d 2d 60 59 50 32 21 57 4a ' + '41 4c 36 50 58 21 2f 29 25 24 5e 2d 4b 3c 3f 4d ' + '34 26 49 44 28 2a 27 27 3b 46 43 49 40 54 2a 2f ' + '22 3f 4f 50 3a 35 28 36 2b 2a 40 5b 23 2f 2d 2e ' + '46 28 29 60 0d 0a 4d 60 58 49 3b 38 5b 23 53 30 ' + '35 3d 3d 22 40 4e 36 52 33 50 2a 58 5d 5c 42 43 ' + '29 26 3f 60 59 5b 34 60 27 26 3f 27 46 46 54 2a ' + '35 4c 59 5e 49 36 51 5f 25 29 39 2c 4f 52 3a 3d ' + '29 57 58 0d 0a 4d 49 33 3c 27 21 5f 46 44 2d 2a ' + '5d 47 59 2e 3d 3e 49 4e 4e 41 48 46 5f 4a 49 3b ' + '2c 46 59 4f 54 55 5a 27 27 45 5c 43 53 3c 44 4f ' + '24 40 5d 46 4b 35 5e 27 46 44 5f 50 21 48 31 5b ' + '26 56 0d 0a 4d 47 3d 36 32 54 4a 29 33 4b 36 58 ' + '3a 2a 39 33 26 56 55 45 3a 4b 34 39 46 34 3c 5f ' + '5e 51 5d 58 5e 23 41 3b 53 2a 38 29 47 60 45 38 ' + '3e 3a 54 58 43 3c 36 3d 53 4c 22 44 4f 22 58 28 ' + '29 0d 0a 4d 5c 42 4f 21 5f 21 4e 48 22 3e 36 2a ' + '38 4f 52 57 46 4f 48 3c 5c 43 3e 4a 4b 4e 2c 4c ' + '3e 51 5c 24 35 56 58 47 39 59 5f 4a 3b 4e 54 37 ' + '5b 46 39 4b 46 2c 2d 26 31 56 50 3c 55 3e 4c 58 ' + '0d 0a 4d 5f 33 22 52 2a 51 52 2e 3e 2a 52 48 46 ' + '31 44 50 4a 58 38 48 23 5f 41 36 41 49 54 41 3e ' + '2d 32 2f 3a 3f 5c 60 32 4e 42 5a 2e 3d 49 28 54 ' + '34 5a 5e 48 21 33 47 5a 5d 51 37 45 5f 5b 31 0d ' + '0a 4d 25 2a 5f 22 46 48 41 4d 50 2f 58 3e 33 4d ' + '5b 4c 3b 33 56 4b 54 5c 33 31 48 49 26 2e 23 37 ' + '47 2f 43 5f 3b 2b 5c 2d 37 5a 5b 5e 3f 30 3c 58 ' + '2f 4e 51 4d 2f 3a 4b 2e 3a 3f 45 48 5e 2b 0d 0a ' + '4d 4b 55 22 4b 2c 38 5a 4e 46 4a 54 37 32 49 53 ' + '5e 49 4a 4d 50 3d 5a 5c 33 2f 5f 5a 32 2f 48 5f ' + '33 3b 51 46 41 24 46 54 35 3e 4d 50 57 4e 57 3d ' + '35 34 58 45 5f 2a 56 5e 3a 4f 56 50 56 0d 0a 4d ' + '43 3b 5d 2a 52 39 55 3c 2a 3d 45 52 2d 2e 53 35 ' + '38 35 60 35 58 5f 46 44 31 25 40 47 25 36 2b 3f ' + '49 2f 35 57 2d 29 43 32 56 2d 5b 39 58 58 21 49 ' + '4c 38 34 41 37 25 60 60 3d 59 34 3c 0d 0a 4d 54 ' + '55 21 4d 40 26 26 58 21 51 36 3b 54 3a 4f 30 5f ' + '38 48 29 38 3d 4a 2d 45 21 30 25 4f 4b 32 51 52 ' + '3f 56 4a 50 3c 3e 46 4f 55 53 32 3b 5f 21 33 56 ' + '24 46 32 26 59 59 4b 46 37 2c 38 0d 0a 4d 27 47 ' + '25 26 41 60 45 28 60 5b 55 2c 30 2b 23 38 50 5a ' + '4e 59 49 2d 21 3e 53 48 50 4e 30 23 56 49 4c 32 ' + '59 39 43 59 3b 43 5e 3a 59 38 5e 3c 5f 32 46 48 ' + '4e 22 23 5d 5c 34 52 4e 30 57 0d 0a 4d 59 3d 42 ' + '5d 50 3a 3e 33 46 2c 2b 5d 3a 4a 44 38 47 58 5b ' + '27 5f 36 4b 3c 36 26 60 51 57 25 23 35 26 23 35 ' + '2c 31 25 44 45 54 3b 47 3a 3f 5c 4a 2c 2c 31 3b ' + '58 5b 58 59 5f 42 49 3f 49 0d 0a 4d 3c 3d 4e 3a ' + '41 36 31 36 50 3e 50 58 5f 40 54 2d 23 4d 34 22 ' + '51 2b 2a 32 21 5e 5f 5b 35 3b 40 2e 55 30 2f 28 ' + '38 24 34 4a 0d 0a 2d 41 5a 47 49 47 60 53 50 23 ' + '33 2d 56 54 21 4c 3e 32 2a 33 0d 0a 4d 54 37 52 ' + '54 2e 23 4a 54 58 53 56 28 28 2d 2f 42 38 21 55 ' + '37 28 50 36 27 5c 35 35 29 30 2c 23 4c 58 4a 54 ' + '47 49 2d 2a 2e 31 41 45 27 5e 2d 33 24 35 4b 5a ' + '2b 25 5b 43 54 40 57 43 60 0d 0a 4d 25 2b 35 5d ' + '4a 23 29 5b 34 5a 2b 24 45 4e 38 5f 28 4a 49 2a ' + '52 22 2d 3c 40 5d 52 23 35 4f 39 2a 54 52 5d 22 ' + '5a 5f 42 38 42 51 5a 36 52 2a 5a 58 31 2d 5b 24 ' + '24 38 27 5f 60 2b 34 4d 0d 0a 4d 26 42 39 28 33 ' + '40 40 59 26 3a 3d 2b 4d 2c 5c 41 60 5b 5d 4a 42 ' + '40 4f 3e 52 4f 53 5a 60 3f 2f 60 2f 25 36 56 3c ' + '4f 2a 32 50 52 53 4b 47 5e 3a 4a 4a 60 25 24 3f ' + '43 2e 2a 3e 51 2c 39 0d 0a 4d 35 40 31 45 32 2a ' + '33 2b 4a 50 54 26 26 43 57 3c 24 2d 40 58 49 44 ' + '4c 39 2c 36 58 3c 4c 23 44 34 48 4d 55 32 3f 4a ' + '21 4a 25 45 2f 34 4e 3f 56 48 38 3f 4c 28 5b 43 ' + '2a 30 23 55 3d 5a 0d 0a 4d 59 31 46 33 46 41 3b ' + '3f 4d 5d 34 3f 3e 48 43 29 24 4e 5b 2e 32 3f 25 ' + '60 5b 33 2b 4c 2e 50 52 21 25 2e 22 3c 39 48 46 ' + '51 5a 42 43 5a 46 4a 54 3b 40 33 39 49 4e 58 26 ' + '30 3c 3e 3e 2a 0d 0a 4d 49 48 52 4f 38 5a 3d 25 ' + '23 40 4b 56 49 58 60 22 40 5e 23 57 49 23 2f 47 ' + '27 55 5f 5a 34 55 30 30 50 60 5b 34 4b 2a 3f 35 ' + '21 4a 33 4f 3c 2c 3f 3b 52 2a 2e 2d 4c 4f 43 5a ' + '43 2d 35 5b 0d 0a 4d 43 5f 43 27 21 5b 46 46 5d ' + '34 3c 57 5b 42 4a 5b 25 4c 5a 38 60 33 3b 31 57 ' + '27 60 5f 3a 42 21 2a 56 5b 26 2f 5a 3c 34 4a 3d ' + '40 39 32 30 3e 48 34 34 36 58 31 2f 40 59 58 5b ' + '34 47 56 0d 0a 4d 2f 3b 29 35 42 54 43 27 2f 2f ' + '3a 41 3f 21 3c 59 2d 23 24 57 59 41 21 51 52 3a ' + '27 3c 26 46 38 2d 51 40 54 46 2d 2d 48 3a 5f 22 ' + '60 39 58 5e 55 23 2e 56 35 37 60 52 2a 21 52 2d ' + '50 50 0d 0a 4d 3e 23 34 60 58 44 22 44 5c 3b 4a ' + '26 22 45 4c 42 30 4c 28 3c 24 5c 3f 32 49 53 47 ' + '21 27 25 3d 2e 46 5c 25 40 3e 3e 56 2a 34 49 28 ' + '42 3b 29 27 25 23 2a 3b 22 30 2c 36 3b 3a 2c 58 ' + '5f 0d 0a 4d 55 48 52 31 4d 52 51 60 38 46 48 59 ' + '43 42 52 49 59 3a 48 3d 22 3c 4c 56 2c 39 49 2d ' + '23 4e 4d 21 23 23 29 5e 34 2e 49 41 59 48 24 36 ' + '29 25 39 36 59 38 24 5c 54 54 24 3b 4e 47 40 34 ' + '0d 0a 4d 40 4b 4c 22 4c 33 44 2c 56 3f 5c 60 2e ' + '40 2b 5e 41 4c 28 34 48 57 3b 28 48 32 31 41 4f ' + '33 60 53 53 53 5d 5a 25 44 2e 31 4d 2f 32 2a 26 ' + '29 4d 4c 43 29 51 43 29 49 4c 3f 26 50 54 58 0d ' + '0a 4d 21 52 3e 3a 29 2c 27 60 26 21 40 47 2e 3a ' + '21 46 21 38 44 38 29 5e 45 21 40 4b 50 33 5d 3a ' + '45 41 31 24 44 28 2b 5b 43 57 21 4a 24 53 4f 38 ' + '3f 30 5c 34 31 44 60 22 45 4e 5e 2c 5f 53 0d 0a ' + '4d 37 21 32 48 57 27 40 5f 32 40 49 53 5e 46 24 ' + '38 4c 24 39 2f 3b 42 45 2d 44 44 40 3e 2e 55 2c ' + '24 41 2a 40 24 3d 31 4a 27 26 60 22 4f 3c 59 49 ' + '26 33 56 60 5b 21 28 5e 33 44 5d 5a 60 0d 0a 4d ' + '32 5d 52 31 56 25 3c 52 5b 53 44 46 41 37 21 21 ' + '21 5e 41 49 4c 3d 34 31 28 50 39 52 33 43 60 48 ' + '60 60 35 29 27 3f 2d 3c 35 50 3c 3f 33 42 49 53 ' + '4d 33 26 2e 33 32 2a 48 21 41 44 3c 0d 0a 4d 3d ' + '51 30 25 3e 32 23 56 4b 47 29 33 45 3c 24 46 49 ' + '3c 59 29 21 2f 2f 3a 47 56 35 29 34 2b 28 52 48 ' + '3b 53 57 48 60 4b 44 4d 5d 21 33 30 56 24 28 51 ' + '53 30 2e 51 52 3c 3e 3a 60 25 41 0d 0a 4d 31 4f ' + '29 5b 5c 54 21 53 53 43 4c 3a 2c 3d 5c 5d 41 30 ' + '45 40 2e 60 2e 55 27 38 47 5e 50 26 29 21 2f 55 ' + '2d 2b 46 23 40 59 5e 4d 2c 53 45 4a 24 5d 36 33 ' + '58 53 30 27 5a 2f 52 29 3c 32 0d 0a 4d 4f 5a 43 ' + '3b 3a 31 2c 5b 55 3a 4f 28 57 34 2d 41 2f 3b 35 ' + '3b 3d 4f 31 4d 5d 3e 4a 3e 21 2f 52 5f 44 2b 3f ' + '3f 55 3d 3d 22 4b 2f 4f 5d 5d 2c 56 28 5b 5d 2d ' + '3c 5c 37 5f 2b 36 52 3f 24 0d 0a 4d 29 50 59 47 ' + '4a 3f 40 4e 5f 3a 2e 5e 24 31 45 52 4b 3c 55 5d ' + '54 5e 26 5b 5a 23 34 4d 2d 24 2c 48 27 4b 31 3c ' + '23 2f 3f 4e 3a 5f 2d 46 46 52 32 51 37 3a 4d 27 ' + '5b 45 4b 5a 5f 50 23 21 0d 0a 4d 46 48 32 5e 49 ' + '27 2c 60 52 4c 35 5a 51 5d 3a 28 33 4a 39 2c 4c ' + '2c 3f 3a 37 24 5d 49 4a 4d 50 4e 47 37 3a 5e 4a ' + '3d 4c 33 47 26 3f 49 36 47 38 2d 5e 3f 42 2d 50 ' + '34 53 43 43 4d 36 31 0d 0a 4d 5c 30 36 5a 5a 4b ' + '49 52 4e 47 4d 38 23 43 52 26 4b 2b 5e 25 4d 36 ' + '46 40 4e 39 3b 26 59 58 44 31 4c 23 2d 3d 44 47 ' + '4a 53 42 34 3e 33 4b 5b 2f 48 38 28 5d 2c 47 3b ' + '57 59 59 5f 5a 35 0d 0a 4d 59 4f 58 57 24 2c 2f ' + '50 5f 3d 2c 32 33 26 4c 33 43 29 5d 58 5a 33 36 ' + '57 3a 32 22 30 44 2c 59 50 31 51 36 33 5c 3c 36 ' + '5a 4f 5c 2d 57 4c 3b 59 3b 3d 60 58 58 5e 46 54 ' + '5d 5a 49 2d 2c 0d 0a 4d 51 47 3c 33 58 51 25 5b ' + '36 53 5e 49 4a 4d 30 55 30 40 39 4f 33 3b 4a 57 ' + '3f 46 2d 5f 5d 55 37 5b 29 4e 47 3a 55 3e 31 47 ' + '5e 31 5b 56 23 34 3b 31 49 30 5b 3d 57 2f 3a 4b ' + '5c 30 57 2d 0d 0a 4d 4d 27 3e 4a 32 25 33 43 49 ' + '4a 59 60 5a 45 5d 57 3a 4c 26 3d 24 39 36 52 56 ' + '40 5a 43 55 35 3c 31 30 35 23 23 5d 35 35 25 52 ' + '39 2e 47 4d 35 4e 21 46 51 53 0d 0a 56 4a 2e 2d ' + '2c 55 5b 5a 2b 0d 0a 4d 29 26 56 38 2c 49 58 48 ' + '48 5d 49 37 5b 24 54 4a 28 5f 46 5b 32 4f 25 36 ' + '24 2a 58 60 37 4d 32 4c 4d 4c 3a 28 50 33 33 33 ' + '41 43 44 3e 23 30 31 5b 4d 5a 47 51 56 49 50 43 ' + '26 32 57 40 0d 0a 4d 54 35 4c 3f 28 38 31 55 45 ' + '43 33 28 3e 53 32 3d 4c 27 26 3a 36 34 2e 32 22 ' + '3e 60 3e 5f 50 21 4a 3f 26 21 41 58 53 52 26 5f ' + '50 23 3a 40 37 28 2c 23 28 59 58 27 3b 5f 59 49 ' + '43 60 46 0d 0a 4d 60 59 5d 50 5b 54 4d 30 31 27 ' + '44 5c 45 31 40 55 38 42 60 5f 24 58 3b 45 37 25 ' + '32 23 54 2a 35 32 5b 44 29 57 50 2c 3f 51 35 42 ' + '28 44 58 44 34 3d 5e 3c 34 4d 60 38 57 2e 31 56 ' + '52 35 0d 0a 4d 49 41 38 40 44 29 51 40 44 43 5d ' + '43 33 3a 27 29 29 43 3b 56 24 2a 30 5e 2e 2e 58 ' + '5f 46 4a 53 4b 44 60 43 4e 2a 4f 2c 23 28 47 3f ' + '49 5c 39 4a 44 2d 48 21 27 44 3c 34 4e 52 24 46 ' + '42 0d 0a 4d 36 21 2c 30 3c 38 57 3d 5f 50 22 3a ' + '38 22 36 34 2a 3e 51 49 24 39 2e 23 43 5d 5c 34 ' + '38 58 3c 43 3d 51 58 48 3a 2a 30 5a 2f 29 28 5e ' + '47 3a 46 31 2d 5e 35 4d 27 4e 21 58 2d 2b 52 34 ' + '0d 0a 4d 52 58 2f 47 4d 31 2c 3c 44 41 2e 5a 5c ' + '55 2b 21 4d 26 47 39 44 22 39 41 58 38 5c 34 4a ' + '5e 43 2a 41 51 43 53 46 40 4d 49 22 51 2a 5e 31 ' + '35 52 5d 2f 4a 28 44 46 2e 33 50 3a 3a 56 33 0d ' + '0a 4d 2d 3c 37 3b 2a 4d 4c 59 2c 31 53 57 60 53 ' + '35 42 3a 30 4c 4a 32 29 57 51 4d 4a 4a 49 56 37 ' + '2e 21 5b 3f 2d 2e 5d 31 31 3b 2c 49 58 39 26 59 ' + '4a 3b 5e 42 5a 59 27 2c 51 5d 2d 43 43 45 0d 0a ' + '4d 3e 3a 3b 2b 28 4c 44 30 39 3e 2e 56 30 3a 32 ' + '5b 43 3e 56 2c 3d 30 53 42 46 21 60 38 55 28 5b ' + '5b 4e 3f 56 48 3e 40 3c 4d 44 52 2f 55 2c 3c 43 ' + '28 5b 54 3c 48 56 4d 50 3e 22 21 32 34 0d 0a 4d ' + '43 26 51 45 38 59 2f 5f 60 24 4b 41 2a 2d 5a 3b ' + '4f 3b 30 5a 2a 26 5e 48 30 4a 4a 23 45 33 44 26 ' + '46 27 26 30 31 57 53 35 39 33 4d 53 4e 5b 60 54 ' + '58 25 2c 39 52 2e 3e 3a 33 27 34 3e 0d 0a 4d 51 ' + '4c 37 4a 3b 4d 49 60 2f 42 43 52 34 44 60 27 29 ' + '36 45 22 34 4a 4e 58 3f 37 42 42 38 52 2c 5b 32 ' + '40 3d 2d 60 4a 57 39 3c 35 51 40 39 27 2f 55 5e ' + '55 2c 23 47 28 50 3a 48 4b 28 32 0d 0a 4d 30 2f ' + '21 49 52 2c 2c 21 32 33 46 46 32 54 5b 27 33 2c ' + '51 46 2e 2c 3c 3c 55 39 43 3b 3c 5e 36 5b 40 39 ' + '4a 48 36 60 3d 33 5e 4b 42 4b 32 23 4a 2e 2e 56 ' + '2f 5c 4a 3d 24 52 42 35 4b 4d 0d 0a 4d 42 29 42 ' + '3c 3d 53 58 4a 50 49 5f 57 39 42 2e 23 35 3a 35 ' + '4f 34 3c 43 4e 30 3e 5d 2f 44 3f 54 58 22 3e 5f ' + '56 4a 3b 56 34 5a 48 60 27 3b 40 44 3c 44 55 56 ' + '55 32 54 4b 24 5d 37 2f 5e 0d 0a 4d 2d 30 39 2d ' + '5a 4a 32 2c 3e 3c 34 4d 50 35 30 5f 4a 28 53 35 ' + '22 42 5f 48 22 28 4c 2f 3d 40 46 46 44 3b 39 42 ' + '32 50 28 59 49 30 2b 26 2c 60 60 39 37 26 3f 4f ' + '30 60 44 4c 2e 3f 3b 32 0d 0a 4d 39 37 5a 2b 21 ' + '46 2a 2a 56 60 22 33 30 4a 21 4d 29 53 53 44 24 ' + '59 48 28 59 30 3c 2a 50 5b 59 59 2d 3c 58 56 24 ' + '47 2f 32 30 22 2a 33 56 3a 34 24 29 27 57 2d 44 ' + '39 60 2d 24 39 3d 5e 0d 0a 4d 3f 49 51 51 5d 4a ' + '34 29 2c 3b 55 50 22 31 51 51 59 4a 60 3d 51 60 ' + '37 5a 38 5f 42 46 5d 24 4d 57 56 2c 30 5d 31 52 ' + '3c 3c 54 58 5b 26 42 26 31 5e 50 2d 28 5d 4a 4c ' + '26 26 36 29 58 48 0d 0a 4d 52 3d 53 27 42 44 51 ' + '32 35 4c 2c 47 3a 41 5b 34 49 55 22 4d 47 5b 5c ' + '34 33 3d 32 58 2f 5c 54 24 49 27 4a 24 27 44 22 ' + '41 48 2b 3b 38 32 4d 26 22 22 21 47 27 46 48 2b ' + '23 3e 3c 47 53 0d 0a 4d 34 2f 43 21 28 5e 4d 60 ' + '2c 2c 41 29 5b 59 2d 60 52 3b 47 24 41 60 37 4c ' + '2a 27 3e 36 2e 3c 47 40 55 21 2f 34 31 5f 2d 60 ' + '26 50 53 60 5f 3a 45 30 57 4c 38 53 47 55 26 22 ' + '43 43 2e 21 0d 0a 4d 33 25 26 60 2c 5d 41 32 44 ' + '59 38 5f 36 49 3d 42 2c 38 5e 5d 28 35 34 30 52 ' + '5d 31 34 47 4c 33 46 40 38 43 3c 3d 4f 5b 34 31 ' + '39 32 26 2f 44 54 48 25 4c 5c 5d 41 33 2a 54 5e ' + '51 43 44 0d 0a 4d 2a 37 51 53 40 47 27 57 49 2c ' + '49 58 2f 2f 3a 4e 2b 38 58 5e 45 23 2a 51 52 3c ' + '23 43 2d 28 33 54 50 33 40 47 47 4c 2a 21 22 22 ' + '32 2f 2e 33 31 41 2c 4c 3f 4b 42 41 22 5b 32 32 ' + '2e 5f 0d 0a 4d 3e 41 45 4e 44 30 5b 5c 2d 51 30 ' + '4c 2e 2e 33 34 47 4e 3a 60 23 60 60 2f 2d 27 5f ' + '21 37 31 26 5b 3c 3e 3e 21 32 39 4e 32 3f 49 31 ' + '2d 50 51 4a 29 22 2c 27 2d 35 30 2d 5b 60 51 44 ' + '5c 0d 0a 4d 26 4e 2b 5d 29 27 55 2f 3e 4e 5e 48 ' + '25 30 50 26 53 43 5d 4a 45 41 29 47 59 33 4e 58 ' + '57 28 39 2a 48 4c 47 36 55 3e 4a 55 2a 53 36 33 ' + '3d 2d 25 56 3a 4f 2e 53 51 5e 46 53 3b 4a 5d 46 ' + '0d 0a 4d 31 58 26 2e 24 24 34 4d 4f 35 5f 35 33 ' + '35 3d 2f 46 4a 2b 41 44 57 5d 2f 4e 49 26 2e 4f ' + '3f 46 48 58 52 44 2b 57 39 26 41 3b 2c 44 3c 52 ' + '4c 4d 3f 36 3f 41 32 2d 46 40 43 4e 47 35 35 0d ' + '0a 4d 57 3c 3d 2f 4d 57 35 5c 3e 42 45 33 38 53 ' + '55 5d 39 5f 4c 5d 4f 3f 51 4e 42 26 21 33 4e 3d ' + '23 46 4b 37 52 2d 5c 4b 32 43 58 47 4c 2b 2e 36 ' + '3a 27 3c 41 2e 38 36 5a 41 5e 5d 39 46 4e 0d 0a ' + '4d 30 49 3b 5a 4b 23 3f 60 24 2a 59 26 58 43 5a ' + '55 49 36 3b 48 3b 34 51 52 47 45 23 44 35 45 5a ' + '55 2c 3f 50 46 51 5e 35 33 52 3a 5b 28 48 5c 4a ' + '33 3d 47 4b 2b 32 3d 34 42 43 3c 4e 3f 0d 0a 4d ' + '31 3c 3c 2e 2f 25 2f 5e 28 46 3e 3b 33 2b 40 2b ' + '57 3e 2c 43 5b 3d 43 36 3f 5c 29 56 51 4e 2d 29 ' + '35 29 26 2b 56 53 5c 60 5f 30 55 39 46 36 36 53 ' + '46 2d 47 3d 27 2c 29 5f 58 3b 27 53 0d 0a 4d 5f ' + '50 23 2d 35 27 48 47 29 49 54 3f 25 28 24 56 32 ' + '32 31 5f 49 46 44 27 5f 4a 3a 4b 4d 4f 4e 35 50 ' + '4f 42 4f 35 5f 26 2f 50 48 4c 2a 52 5a 4b 49 46 ' + '36 42 3e 30 46 36 2f 52 2d 51 5f 0d 0a 4d 54 59 ' + '4b 52 45 4a 52 4c 50 4b 53 5f 60 25 2c 3a 3d 47 ' + '4c 3e 46 3a 3c 3e 29 49 31 4d 45 55 56 55 3e 43 ' + '2a 41 5e 2e 51 58 4a 41 21 50 33 35 4c 25 43 29 ' + '44 2b 37 2d 2a 31 56 3f 52 2d 0d 0a 4d 2e 27 56 ' + '27 2f 3a 4b 3a 3c 24 4d 58 4b 2f 40 44 59 56 5e ' + '2a 4d 56 59 57 3b 56 21 59 5c 23 5b 55 44 34 4d ' + '25 58 24 24 41 44 49 44 32 5b 43 40 5c 23 2d 28 ' + '34 5d 2e 21 54 58 4a 59 27 0d 0a 4d 4d 2c 3e 31 ' + '56 60 4a 36 41 5e 58 46 2e 4d 57 26 30 22 2e 2c ' + '59 49 52 23 60 38 3d 5c 27 28 4a 4f 23 57 38 43 ' + '46 4b 3d 4e 50 28 52 3e 5d 23 39 3b 32 5b 29 60 ' + '38 53 25 23 56 2f 3a 42 0d 0a 4d 34 58 2f 2e 3e ' + '2e 5d 25 43 21 21 5e 5d 24 52 58 4e 26 30 5e 51 ' + '41 50 3a 45 42 35 36 27 5c 53 39 5b 2f 44 54 3c ' + '37 21 27 2f 47 42 40 30 5b 45 28 5e 3e 2c 44 3f ' + '4e 2a 2e 24 48 54 2e 0d 0a 4d 5f 50 60 39 5f 50 ' + '60 2a 48 2b 30 56 31 4d 56 23 51 51 52 2f 5c 3e ' + '3a 2c 21 33 26 26 5c 40 58 2f 5b 34 4f 43 3b 47 ' + '27 3a 49 34 2a 25 3c 3e 58 2d 46 42 5f 52 2d 2b ' + '5c 45 52 2b 2a 51 0d 0a 4d 5e 44 57 4e 59 60 25 ' + '35 39 28 50 4c 46 5c 3d 4e 55 27 5a 41 3b 5c 5b ' + '2f 28 5f 55 25 2c 39 31 29 3b 40 5d 4d 56 33 32 ' + '3b 4c 3f 31 33 44 60 23 24 58 5b 27 46 49 5e 48 ' + '5b 4e 4d 33 2b 0d 0a 4d 44 3c 4c 2e 3e 53 22 40 ' + '29 5d 2e 3c 47 52 56 2c 55 2b 5b 29 3f 5a 26 40 ' + '5d 3d 26 22 24 46 23 5f 60 2c 3f 51 32 34 28 2c ' + '3b 27 2f 21 5c 55 50 38 44 45 23 59 25 2e 41 2e ' + '54 37 38 29 0d 0a 4d 26 31 50 35 60 2e 2e 23 47 ' + '53 36 43 3b 2e 39 2b 39 45 2f 4e 37 4e 2a 51 34 ' + '3c 42 33 27 55 5c 55 48 56 59 3a 2e 3c 32 60 5d ' + '23 23 47 5d 5a 38 32 35 44 37 52 46 2e 58 2e 57 ' + '56 5c 3c 0d 0a 4d 55 50 34 52 45 5c 38 59 37 5f ' + '2e 4b 2d 5b 27 5a 44 3e 59 31 51 35 2a 25 53 27 ' + '29 5a 3b 3e 3a 42 32 49 41 23 4c 2b 3d 52 40 3b ' + '57 38 51 33 41 28 28 59 32 49 59 52 2a 4a 57 22 ' + '47 3e 0d 0a 4d 36 21 5c 5c 34 51 43 44 40 5c 39 ' + '25 25 25 57 39 38 29 53 2b 47 2e 60 50 25 60 5a ' + '5c 27 27 60 21 48 36 53 4c 23 60 5e 2a 5a 31 42 ' + '28 30 57 47 4c 2a 33 21 4f 38 52 34 5c 3c 5d 43 ' + '32 0d 0a 4d 50 5f 30 4a 3f 51 34 32 2d 5b 3d 57 ' + '3a 49 56 58 45 5a 2e 50 59 59 48 38 5a 4c 4c 40 ' + '40 3b 48 56 2e 3c 26 47 42 30 5b 42 48 5b 26 4a ' + '42 52 4a 53 5c 4b 55 2d 57 48 58 57 3b 55 2c 5e ' + '0d 0a 4d 21 32 23 5b 2b 26 2d 44 47 5b 34 33 2c ' + '3f 3d 58 29 49 3b 2c 39 29 60 35 2f 2d 27 41 43 ' + '29 5a 3f 54 2d 2c 26 52 52 41 35 4f 31 21 21 5b ' + '54 5a 25 52 22 58 53 53 58 4a 4f 27 29 4c 45 0d ' + '0a 4d 43 52 2e 51 2e 3a 39 26 58 5d 32 30 43 51 ' + '35 24 3d 42 27 44 5d 2a 3d 43 5c 48 4a 52 53 4b ' + '5a 22 59 59 52 2a 49 37 2b 41 40 56 31 52 23 33 ' + '27 29 2c 24 3f 43 28 49 2f 4c 25 54 2d 3d 0d 0a ' + '4d 50 36 26 2f 60 4b 42 3c 52 4b 53 47 43 27 2d ' + '2b 52 41 56 47 2f 21 2f 2d 33 43 2c 4b 3b 3c 3e ' + '3a 26 2f 32 22 60 38 4b 28 51 58 50 3c 22 44 4b ' + '44 21 53 59 53 42 49 39 46 22 2c 26 5c 0d 0a 4d ' + '46 41 52 34 57 24 58 50 2e 5d 32 35 38 36 35 22 ' + '44 23 57 23 5a 55 2b 52 4a 53 3b 31 5b 31 56 5f ' + '3a 41 3f 38 35 51 59 53 30 4c 4a 45 4c 2b 33 5a ' + '26 57 31 28 3c 2a 32 3e 5f 3e 43 29 0d 0a 4d 56 ' + '4c 22 4f 40 59 51 32 32 32 49 29 50 2e 5d 24 5b ' + '38 59 51 42 44 23 55 54 36 28 59 35 2b 47 3f 5d ' + '3c 55 2a 52 40 4c 51 27 3a 4a 33 2c 2d 51 28 58 ' + '29 4a 35 2e 55 30 21 30 52 45 27 0d 0a 4d 5b 2b ' + '2a 4f 53 4d 53 59 4a 36 28 29 29 5b 59 29 49 23 ' + '39 57 43 27 3c 5e 2a 2c 4e 60 5e 2f 2d 2d 5d 41 ' + '35 21 2e 51 52 51 5e 34 3f 5a 54 21 2e 60 2c 5d ' + '53 46 4e 44 38 25 26 27 55 2d 0d 0a 4d 22 53 60 ' + '58 51 57 25 23 27 51 48 45 56 23 4d 41 3a 25 42 ' + '25 21 5c 44 5c 54 22 39 37 28 34 5c 43 43 2d 32 ' + '4b 3b 4c 5f 38 58 49 2f 5d 22 3b 26 21 52 48 52 ' + '3e 5d 3d 4e 26 2c 23 51 32 0d 0a 4d 39 33 44 24 ' + '35 2e 5c 38 29 49 60 57 38 36 58 23 51 53 47 4d ' + '34 27 4d 30 51 40 44 4c 33 5d 3a 59 46 57 23 5a ' + '34 2f 30 2d 36 50 3c 44 2e 33 34 39 21 3f 3d 58 ' + '21 4a 22 50 39 53 47 43 0d 0a 4d 2d 25 2b 40 2c ' + '32 4f 38 5c 54 4e 51 57 39 60 29 2e 36 53 57 25 ' + '22 5b 60 60 58 5b 59 48 26 38 5e 2e 55 3c 2c 41 ' + '3c 47 26 3a 49 42 49 5f 39 21 59 2e 2f 2d 23 4d ' + '28 38 43 2f 27 2d 3c 0d 0a 4d 49 52 51 50 23 57 ' + '51 31 2e 22 0d 0a 23 53 34 5d 22 3a 25 52 60 59 ' + '2f 2f 25 60 48 27 29 28 59 48 57 2a 5b 30 23 57 ' + '4a 23 56 2d 35 39 3f 32 25 47 29 38 58 27 26 3a ' + '32 50 29 51 43 4d 57 4a 0d 0a 4d 50 50 26 23 32 ' + '47 3b 4b 3b 3b 5b 32 3e 2a 2e 50 55 5d 47 59 5a ' + '4e 59 5b 3d 48 57 41 35 45 35 3f 55 35 59 4b 35 ' + '35 37 55 59 24 35 4d 55 3a 51 4c 59 49 33 5a 2a ' + '2b 5a 43 4d 5c 4d 28 0d 0a 4d 4e 5d 2b 3e 27 3c ' + '39 35 50 5f 5c 60 35 37 4e 2d 3c 33 59 3f 45 5f ' + '4c 3e 3f 5e 3b 56 35 24 42 54 5e 33 39 5a 43 3d ' + '25 2b 44 39 2a 53 2e 4b 40 35 2f 5f 24 4b 3a 5e ' + '25 5d 3d 4e 5d 24 0d 0a 4d 4f 44 46 4d 49 60 38 ' + '32 57 35 27 5e 49 3a 52 29 38 5e 49 4a 27 27 59 ' + '47 3a 47 2c 59 4e 2c 5b 2f 4e 56 40 5a 4d 3b 5a ' + '51 26 4b 50 4e 49 45 3b 27 22 55 4a 5e 46 4b 4d ' + '29 23 2d 21 4e 0d 0a 4d 43 28 28 50 31 37 50 2b ' + '32 5d 36 4f 5d 2c 4e 24 47 4c 49 42 4b 31 4d 40 ' + '40 4d 37 4a 28 4f 5b 30 4d 3a 23 59 39 38 56 3b ' + '3d 43 4f 36 56 2f 29 37 39 26 33 26 55 59 28 5e ' + '4e 3f 21 46 0d 0a 4d 4c 51 5a 2f 4b 2c 46 41 3a ' + '40 4b 4b 39 52 24 4f 22 59 5e 34 47 3c 3a 5e 41 ' + '3a 49 38 36 3d 57 3a 2b 24 57 59 42 2c 32 25 44 ' + '27 52 47 46 4f 53 51 3d 5f 26 35 5b 3f 56 4a 26 ' + '3a 56 4d 0d 0a 4d 5f 36 21 39 55 38 23 46 4f 4a ' + '27 5d 47 27 51 41 3b 37 56 46 51 56 3d 51 2e 4f ' + '58 52 2c 60 45 26 3b 41 4a 49 39 58 3c 43 2a 3e ' + '2e 33 56 53 34 4f 2b 3a 3b 33 43 5a 2d 52 2d 5c ' + '3b 3d 0d 0a 4d 43 58 28 53 37 53 3f 58 47 54 49 ' + '2d 2e 55 2c 4f 60 4f 5c 60 4e 54 47 2a 3f 49 37 ' + '43 4d 37 56 5e 5d 36 56 55 36 54 5d 2c 45 35 45 ' + '30 5c 2a 57 5e 2d 3f 2d 3f 43 42 52 46 25 41 29 ' + '24 0d 0a 4d 50 2e 5a 2b 45 60 3e 5f 3a 4d 2c 4e ' + '2d 33 36 42 4f 33 59 47 26 39 58 4a 57 2f 59 49 ' + '53 56 4a 58 47 4e 23 3b 4a 53 54 57 2a 5b 5f 57 ' + '4a 4e 56 53 3b 5e 47 5d 35 3e 2f 2b 51 44 3f 30 ' + '0d 0a 4d 35 24 4e 31 2f 55 5c 5d 5d 4d 37 3b 35 ' + '42 4a 44 5f 32 4a 2f 49 4e 49 2b 2e 4d 36 3b 34 ' + '59 38 2a 26 5b 4d 36 3c 41 3c 53 31 43 45 5a 4d ' + '4f 40 43 25 2f 41 29 35 5d 4e 5b 42 4a 3c 37 0d ' + '0a 4d 60 57 3e 3e 30 4d 36 28 33 45 4d 5f 38 54 ' + '46 36 48 5f 39 4a 36 59 33 54 5c 3e 31 44 42 46 ' + '50 44 49 28 5f 5a 36 4a 4b 3a 4c 27 59 5c 42 4b ' + '2f 52 38 5c 3c 38 49 2f 37 39 3b 57 56 36 0d 0a ' + '4d 48 32 26 53 33 36 52 50 27 60 52 60 60 3a 31 ' + '22 22 27 22 38 58 2f 2d 36 38 33 54 4c 3f 2d 29 ' + '5b 38 29 34 4b 2e 43 3b 3b 3d 59 60 5b 3c 47 2f ' + '46 49 56 48 46 59 23 50 44 47 27 5b 26 0d 0a 4d ' + '49 3c 3c 25 45 27 34 2a 38 60 43 24 59 5d 4f 3e ' + '44 50 34 3b 60 26 35 34 28 31 53 57 21 48 46 2f ' + '59 28 39 2f 57 51 5d 2f 4d 31 24 24 59 27 42 41 ' + '30 40 59 21 58 53 5f 4b 32 26 5a 38 0d 0a 4d 3c ' + '2a 58 57 2a 2e 53 3d 30 53 35 4a 28 5f 44 4c 48 ' + '50 30 2e 35 53 35 31 36 5a 4c 5e 3c 5c 34 5e 54 ' + '2e 39 52 23 5b 23 53 35 2c 3e 46 21 3c 41 29 31 ' + '5a 42 59 59 27 28 4a 4f 4c 57 4b 0d 0a 4d 47 52 ' + '2a 54 24 42 50 5b 51 47 26 23 35 3c 43 3a 31 27 ' + '40 60 34 47 48 47 4d 45 3a 60 39 23 31 27 4d 33 ' + '35 33 29 3b 5a 4b 31 21 3d 45 50 30 48 52 21 5f ' + '49 30 4a 51 60 3b 5a 46 45 30 0d 0a 4d 37 3f 39 ' + '51 27 40 5c 39 59 21 4a 55 60 51 56 5b 2d 5f 38 ' + '54 40 60 2d 27 47 28 58 2d 2c 37 2f 49 40 43 40 ' + '5d 41 32 22 5f 49 46 49 22 5e 5a 57 39 23 56 4a ' + '43 3c 47 3b 2e 49 28 58 27 0d 0a 4d 3f 5d 4a 3d ' + '3a 2d 42 33 38 33 50 3f 5f 3a 48 4f 35 51 45 4f ' + '2d 34 55 39 44 45 33 2a 5c 51 5f 2c 29 37 53 56 ' + '48 59 25 29 31 37 34 5c 24 39 49 29 29 3d 34 29 ' + '5d 50 58 49 4e 58 41 42 0d 0a 4d 4e 2e 44 23 42 ' + '48 39 4d 5f 50 60 22 52 30 2c 39 4a 23 29 45 23 ' + '24 3e 59 2d 2a 31 42 39 4e 3e 55 22 3c 59 29 29 ' + '5a 40 33 5f 41 31 30 2f 36 51 5b 4d 47 43 43 40 ' + '58 4b 49 2d 52 4d 50 0d 0a 4d 3c 5c 34 44 58 5a ' + '46 53 53 46 47 2c 3c 2e 35 2d 29 46 43 56 3c 4b ' + '2c 60 23 51 46 4b 3a 4c 21 44 43 26 2c 35 33 22 ' + '5c 58 53 46 47 39 60 37 27 55 48 48 3b 54 36 38 ' + '52 4e 50 27 2e 23 0d 0a 4d 33 35 2b 4b 3c 21 40 ' + '3e 2e 22 3a 4b 39 26 54 60 3d 52 3a 28 4e 3f 34 ' + '29 52 3e 50 26 2a 34 42 36 4f 4c 4f 31 4e 3f 36 ' + '2f 26 30 3f 4b 33 3b 3d 50 39 49 30 31 57 59 4a ' + '4c 44 51 5f 25 0d 0a 4d 4a 2c 23 60 49 4d 49 28 ' + '48 57 59 5e 49 4a 4a 2c 5f 48 31 3d 46 2c 5e 48 ' + '30 3e 3c 55 53 32 25 48 25 2e 2e 50 50 3f 5c 60 ' + '26 45 57 2f 49 5e 44 53 43 4f 4e 2d 30 44 4e 56 ' + '57 38 3f 36 0d 0a 4d 44 52 44 45 35 43 48 4f 53 ' + '60 4b 23 40 24 3d 43 34 41 5d 44 43 24 47 47 44 ' + '34 42 26 31 5c 4a 31 56 60 4b 46 21 2b 5d 5c 47 ' + '2d 60 56 44 51 51 3a 31 49 30 2f 21 2e 32 3a 32 ' + '5c 57 59 0d 0a 4d 43 23 27 25 3c 44 53 28 37 57 ' + '3f 4d 30 40 39 27 2f 4e 2d 23 39 37 26 41 4a 44 ' + '5b 36 28 48 43 50 31 44 5c 3e 3a 30 27 5b 58 5b ' + '3f 36 4e 39 42 32 3a 2e 40 4e 52 54 53 21 40 33 ' + '43 43 0d 0a 4d 53 30 32 4d 47 49 5e 37 2e 3a 36 ' + '4c 46 28 5c 2d 5d 2a 59 59 23 0d 0a 4e 2f 27 54 ' + '2d 23 25 33 4c 5a 31 32 51 52 4e 21 59 2d 27 27 ' + '56 2f 54 51 37 2c 52 44 44 60 5c 34 22 4c 35 3d ' + '44 5c 22 0d 0a 4d 45 39 33 54 24 56 58 32 24 5f ' + '32 42 52 32 51 21 5b 55 23 2d 5e 39 5d 43 34 2e ' + '3e 49 46 5c 5e 2a 2e 41 2d 47 3b 51 4c 28 2f 3f ' + '2e 3a 60 44 40 59 27 3a 4e 58 28 59 5c 34 26 5c ' + '49 44 0d 0a 4d 23 47 2e 2e 5d 23 2a 36 56 2d 21 ' + '52 47 2f 3e 49 28 27 26 57 4f 57 2d 2a 35 4e 49 ' + '40 3e 51 5b 35 53 2c 35 29 37 2f 2f 46 44 23 36 ' + '50 4c 43 21 57 27 42 49 44 31 36 43 38 40 58 59 ' + '49 0d 0a 4d 3a 47 3c 2e 4b 4c 3a 45 43 41 22 21 ' + '56 48 5a 38 35 3a 54 2c 52 2c 3d 5e 3a 41 5c 21 ' + '32 2f 59 48 60 50 27 4e 5b 58 48 22 59 38 47 5a ' + '5d 4a 26 50 38 39 28 52 32 2e 55 23 28 3c 46 48 ' + '0d 0a 4d 29 60 21 21 5e 4d 60 32 2e 5f 54 48 26 ' + '4a 30 36 3e 2e 3c 3c 5d 4a 24 59 5b 39 48 3c 5d ' + '30 48 47 5d 4d 26 50 3a 48 38 4e 2d 50 2e 2e 2a ' + '22 34 59 38 40 3d 4a 24 2f 44 44 3e 2a 41 46 0d ' + '0a 4d 50 33 47 50 3a 26 4b 29 58 54 22 53 60 59 ' + '26 2e 3a 36 59 2e 23 40 5f 3a 42 3f 47 2e 2a 30 ' + '59 29 26 31 50 2c 5d 4a 2a 27 3d 43 22 57 32 3c ' + '5d 4a 36 32 21 37 39 60 21 5c 59 4b 46 28 0d 0a ' + '4d 39 3f 4f 32 44 29 49 28 5f 2e 34 5d 5d 2d 3b ' + '32 5e 49 25 24 50 39 3f 46 36 4a 55 51 3d 32 37 ' + '33 32 22 35 46 38 4d 5e 4a 4f 34 3a 55 23 3b 3e ' + '46 21 26 52 2a 26 5e 3a 4c 3d 5b 2d 3f 0d 0a 4d ' + '34 3d 38 4f 33 3f 3b 5c 50 4b 57 3e 31 5c 54 4c ' + '3f 2a 31 40 57 5d 44 50 40 5d 35 3f 3d 35 22 2a ' + '53 3a 5a 46 36 2d 3f 3c 55 3e 46 44 4d 39 28 59 ' + '3f 33 56 4d 45 45 4a 44 5d 42 31 2c 0d 0a 4d 53 ' + '36 5f 33 28 4b 3d 2d 2d 48 53 3b 47 53 5f 5e 33 ' + '25 4f 2b 2a 36 26 31 45 2f 4e 4a 4e 24 5a 5a 57 ' + '3d 34 37 34 29 29 56 3a 59 42 43 52 4f 33 5e 37 ' + '35 26 36 21 26 35 47 56 3d 35 33 0d 0a 4d 2b 48 ' + '5b 38 50 59 3e 31 30 56 49 5d 3a 25 5d 42 2e 55 ' + '2d 45 42 56 4e 55 35 51 5f 51 2e 4e 2e 4e 3c 4c ' + '57 3d 2b 46 57 36 53 29 5c 52 55 49 36 24 5c 4d ' + '4f 3e 29 3c 50 33 2d 25 28 26 0d 0a 4d 5a 32 2a ' + '5c 57 49 54 47 49 53 5f 57 5a 56 57 5a 3e 49 3f ' + '3b 33 45 26 32 44 39 2b 5f 60 22 3f 28 5e 53 3f ' + '23 27 51 27 3e 3f 40 48 39 59 37 5d 31 30 4f 36 ' + '3f 47 2f 25 3e 50 43 4e 2d 0d 0a 4d 2d 55 39 3f ' + '5d 5a 41 38 25 54 2f 29 27 2d 3f 60 3d 27 55 4a ' + '58 54 5c 5b 45 2b 2c 42 5d 36 56 4f 3d 3a 27 5c ' + '37 50 37 2c 58 41 3b 2a 2e 35 4b 4d 51 39 3b 35 ' + '27 27 46 51 4a 2c 5d 26 0d 0a 4d 5d 4b 2f 50 3d ' + '21 2d 3c 4c 55 45 28 60 27 2f 60 25 3e 39 55 33 ' + '30 2d 37 54 48 45 49 48 37 2a 21 5e 5a 4b 37 4c ' + '3b 2f 37 48 34 44 26 37 60 5e 46 3a 55 29 4d 37 ' + '41 4f 3b 2d 48 47 44 0d 0a 4d 41 45 5d 30 24 59 ' + '2f 29 5b 26 4b 47 41 41 2c 56 41 5a 52 34 3d 27 ' + '40 4d 26 4e 4b 3a 5b 3c 56 45 54 56 27 59 60 2f ' + '57 4a 5c 5e 42 37 34 3a 2c 5c 2e 29 2d 47 5a 3f ' + '2d 36 2b 43 58 36 0d 0a 4d 4c 59 49 39 2b 46 26 ' + '31 54 3a 33 29 21 33 4d 52 3c 55 23 2b 3c 3a 36 ' + '58 5f 50 21 5a 3d 48 5c 3e 33 37 2d 2b 54 52 4c ' + '5a 3f 5b 46 5d 51 2c 5c 45 50 49 21 37 24 40 3f ' + '4c 3f 57 49 5c 0d 0a 4d 31 3f 38 3c 23 46 4d 3a ' + '57 33 33 5b 59 35 3c 58 24 40 5b 58 5c 42 4a 56 ' + '48 56 59 4d 2b 43 49 5f 58 34 47 4c 2d 3c 4e 37 ' + '54 5b 36 54 3d 3e 2b 55 22 3b 49 5d 41 36 5f 3b ' + '5d 51 46 4b 0d 0a 4d 54 3b 38 42 52 3e 50 2d 34 ' + '4b 3d 44 22 5d 32 5d 4a 4c 51 4d 46 30 3e 34 28 ' + '25 3c 54 44 3d 2a 35 4c 4f 4b 5e 39 25 43 2e 23 ' + '56 25 2d 44 21 34 4a 30 3c 39 5b 5f 4f 35 3a 29 ' + '4c 39 37 0d 0a 4d 5a 35 39 41 3c 2e 49 31 4e 50 ' + '49 2c 27 28 39 26 30 31 4f 29 59 5b 34 39 21 35 ' + '5c 43 44 3d 43 32 28 40 3d 53 60 5d 4f 5e 4d 2f ' + '52 51 37 43 4f 30 34 5a 3f 38 51 3c 60 2d 4d 2e ' + '31 34 0d 0a 4d 32 49 4e 37 3c 4f 3c 38 28 48 44 ' + '60 23 60 24 38 23 34 3a 43 3d 4e 50 3c 2c 4f 2e ' + '2a 26 50 24 2f 40 4e 2c 3c 60 58 59 5e 5d 2f 41 ' + '3b 3a 59 3b 53 47 4d 32 42 48 56 44 3b 3e 2a 2d ' + '33 0d 0a 4d 4f 38 2e 21 55 3e 3a 33 4c 45 2e 4e ' + '42 56 51 52 30 35 2f 3c 59 25 2a 4e 44 53 55 60 ' + '3c 26 42 2f 35 24 3c 27 21 2f 3b 5d 5a 42 29 42 ' + '54 31 24 47 3f 25 23 22 4d 42 38 5e 2d 54 47 3f ' + '0d 0a 4d 21 50 3a 34 3c 3e 4a 30 2e 55 2d 21 2a ' + '32 24 3d 50 3f 5c 60 2e 45 31 43 57 60 5f 34 55 ' + '29 35 55 4c 47 27 3d 2f 5c 2a 2a 2a 33 2a 5b 3f ' + '28 59 49 38 29 21 29 5e 39 33 46 42 3b 60 3b 0d ' + '0a 4d 2f 40 54 2c 4b 4c 3f 24 32 54 46 51 33 55 ' + '35 3e 3b 24 44 27 2f 2e 23 53 36 35 26 32 29 40 ' + '30 3d 49 53 35 5e 56 3b 38 57 49 44 59 37 53 30 ' + '43 2e 3e 42 4f 2c 4b 29 56 5b 58 53 5f 2d 0d 0a ' + '4d 30 39 2e 44 27 52 3a 4e 37 34 3f 21 28 5c 27 ' + '5f 60 22 4b 2f 2b 38 2e 60 2c 5d 5a 29 4a 46 2d ' + '3d 21 21 5d 4c 5e 5b 27 32 3c 54 2b 58 57 27 29 ' + '48 32 22 36 28 4a 60 5f 30 3d 58 48 2a 0d 0a 4d ' + '3b 5e 50 40 2e 33 53 51 33 4d 58 29 5a 42 3d 57 ' + '3a 44 60 4a 33 57 4a 37 28 35 42 57 3c 60 5d 5a ' + '0d 0a 60 56 46 36 48 32 25 38 47 28 5e 45 24 44 ' + '44 3e 58 5b 46 5b 26 4a 52 4c 41 29 60 5b 0d 0a ' + '4d 46 42 23 3f 45 2d 45 2c 44 5c 54 4a 26 52 54 ' + '4f 36 56 35 2f 60 2d 26 39 23 45 52 2c 39 2d 35 ' + '44 3b 3b 44 40 5c 24 5c 42 46 25 40 38 56 51 5b ' + '40 3a 21 4b 31 3a 35 5c 52 21 4e 51 49 0d 0a 4d ' + '54 3b 27 3a 59 60 5e 4e 2a 4b 50 2d 26 34 3b 55 ' + '60 3d 58 26 21 42 47 25 4c 28 32 23 40 44 34 34 ' + '31 52 57 4c 36 50 50 2d 4b 3d 5c 54 22 4d 42 2a ' + '31 4c 39 21 58 26 3a 34 5b 4e 50 26 0d 0a 4d 23 ' + '44 43 52 3f 2d 3c 53 3f 44 24 27 4d 46 46 54 2e ' + '33 30 5a 26 31 3d 4a 39 5b 38 4b 4d 5f 29 29 2f ' + '38 24 55 37 21 21 60 28 52 2f 2d 3c 32 32 25 34 ' + '58 52 3c 42 49 3a 2d 25 33 23 3a 0d 0a 4d 34 4d ' + '26 60 30 60 32 3e 3a 3c 51 28 38 44 24 38 60 4a ' + '4f 57 38 3e 3c 35 2e 5c 21 26 57 3d 52 3a 26 2d ' + '43 34 3b 3c 4a 59 50 22 3f 60 48 43 4d 52 58 38 ' + '55 37 35 4c 32 59 37 4c 21 51 0d 0a 4d 34 45 5e ' + '4a 40 2b 4c 38 59 52 33 53 51 30 42 30 59 56 2d ' + '32 57 44 28 2e 3c 3e 3a 29 27 26 54 59 60 57 34 ' + '41 52 33 33 26 41 4e 49 4d 4e 2e 5d 2c 60 38 31 ' + '4c 59 59 5c 3f 53 35 31 37 0d 0a 4d 56 4d 4d 2f ' + '44 5d 5a 3a 29 22 60 25 52 3c 34 35 38 4d 43 45 ' + '3c 4d 44 44 38 2e 2e 2a 23 3e 36 60 53 51 46 45 ' + '26 30 41 5c 43 51 53 31 2c 58 38 23 43 4d 32 5b ' + '22 34 3a 38 51 39 2c 2b 0d 0a 4d 55 3e 57 2d 3c ' + '43 4a 53 25 40 60 31 42 44 27 23 5d 26 3e 60 3e ' + '3a 29 21 4d 21 22 44 38 25 2c 3d 2a 51 53 44 3b ' + '2d 57 57 50 2a 40 27 3c 3e 3e 5e 3a 60 4f 4e 3c ' + '43 51 58 48 36 38 41 0d 0a 4d 41 4d 48 3a 22 46 ' + '2d 38 43 3b 40 3e 2a 24 2c 30 3c 24 5c 34 60 2e ' + '3e 2a 47 2f 3d 60 2e 60 3a 26 25 55 4c 46 3c 40 ' + '60 44 34 24 40 50 49 60 2e 2f 4f 30 39 2e 5b 5b ' + '34 3b 44 25 36 48 0d 0a 4d 27 54 32 53 4a 30 31 ' + '30 4b 29 41 36 21 25 2a 26 32 22 33 51 34 4a 3e ' + '3e 3a 21 49 28 45 43 44 2a 58 5b 47 47 21 4a 3e ' + '3d 4f 21 52 3c 3e 3a 40 40 3d 5f 4b 34 31 52 3c ' + '3b 4e 55 32 32 0d 0a 4d 56 5b 22 53 4d 21 53 59 ' + '2d 22 53 60 59 59 48 39 26 2b 60 38 5b 34 23 47 ' + '22 58 2f 3f 4f 30 54 23 3d 4f 38 55 43 59 25 35 ' + '46 53 43 26 33 5d 2a 2f 3f 54 43 2f 3f 50 2a 21 ' + '4e 50 28 5b 0d 0a 4d 34 51 5f 3e 42 23 5f 47 34 ' + '27 56 47 5b 35 50 5b 47 29 4a 32 3e 47 2f 42 40 ' + '49 4a 57 4c 5f 2f 24 44 4a 37 34 3c 44 37 4a 2c ' + '53 2b 4e 5a 35 4a 47 49 44 5c 54 34 46 51 26 3b ' + '3b 4e 5d 0d 0a 4d 4d 36 38 5b 26 2c 37 2f 5e 5b ' + '33 3b 3a 47 33 3b 2d 34 4e 59 35 39 4e 45 3f 54 ' + '55 5a 54 43 59 4e 2e 2f 52 2b 4d 49 3d 3e 4f 3d ' + '2c 53 52 31 58 33 59 3f 46 49 4d 5a 4c 34 4b 29 ' + '3d 56 0d 0a 4d 34 44 2e 5c 4d 55 31 2d 5e 4a 4a ' + '44 42 56 2c 34 57 49 52 51 52 2a 5b 3b 4e 4d 3f ' + '3b 35 4a 52 54 55 3b 52 59 32 29 29 31 25 4d 5e ' + '3e 45 27 44 35 44 51 3c 4d 28 47 34 38 55 42 45 ' + '5a 0d 0a 4d 55 39 39 46 37 4b 21 4b 26 4f 28 38 ' + '56 43 39 35 35 35 44 37 4a 4b 54 3e 4f 48 34 53 ' + '28 57 37 4d 5d 53 35 43 30 31 29 3e 37 38 41 5d ' + '31 3d 53 35 4f 27 39 43 45 34 45 2b 43 26 31 59 ' + '0d 0a 4d 5a 3e 2f 4a 56 2c 47 35 35 2a 3c 49 4e ' + '39 2a 5d 37 4a 46 47 51 2b 2a 59 31 4d 53 2a 57 ' + '35 37 46 4b 5a 25 48 59 26 57 28 56 56 44 48 51 ' + '21 53 45 24 4a 5b 4d 4f 37 36 57 38 32 3e 49 0d ' + '0a 4d 25 4d 3b 57 35 42 3e 55 46 5f 33 35 42 51 ' + '46 24 2c 5a 5f 49 4b 2a 3f 42 3d 44 28 51 44 3b ' + '53 28 52 4d 5b 3a 2e 60 53 36 5c 4a 52 29 57 37 ' + '59 4a 4c 36 44 4a 52 31 4b 4e 5e 3a 4d 29 0d 0a ' + '4d 2b 39 37 43 58 5a 4a 4a 2c 33 2f 29 22 2c 4e ' + '52 51 39 3a 56 4c 4a 49 5a 5f 32 50 4b 55 4d 41 ' + '2b 3b 57 26 47 2a 5d 4a 5a 40 41 3c 3d 2f 3e 4f ' + '22 37 2e 45 2c 58 5d 32 29 3e 4a 4e 4c 0d 0a 4d ' + '5b 53 34 3d 2b 3d 4c 2a 57 49 3f 2c 2a 5a 35 44 ' + '3a 5b 2e 32 3e 2a 24 49 3a 2f 4a 26 40 37 2b 41 ' + '3b 42 51 3e 3b 24 51 3b 3d 25 4f 2f 57 53 42 46 ' + '52 52 30 53 30 2e 46 49 29 4d 46 5f 0d 0a 4d 49 ' + '5b 3e 3a 5c 37 3b 3a 5b 3b 37 2a 31 52 48 51 32 ' + '5c 22 47 44 55 5b 37 33 54 37 35 30 40 3c 4a 43 ' + '32 44 2a 56 3f 25 3b 31 44 49 27 2d 33 31 33 42 ' + '24 3c 32 24 51 27 40 5f 32 4b 5c 0d 0a 4d 23 3b ' + '58 51 27 2b 42 38 23 4d 59 4a 29 4d 26 46 4c 2b ' + '5e 36 53 3f 4a 28 3f 28 5e 41 27 56 48 5b 2d 58 ' + '3b 39 37 52 47 22 44 54 59 38 5b 5b 2d 37 45 49 ' + '56 41 5c 46 47 31 53 51 45 3b 0d 0a 4d 34 2e 39 ' + '2c 59 51 35 29 37 3d 2c 21 44 2a 2c 2c 3c 35 4a ' + '56 44 4a 42 5d 36 5c 40 44 2a 4c 24 28 2a 5f 4f ' + '34 33 30 31 5a 41 28 41 51 5a 3c 43 31 5f 50 23 ' + '50 2a 59 2c 4f 49 34 5e 43 0d 0a 4d 4b 50 5e 4d ' + '49 5e 31 34 43 3c 5b 46 59 59 5e 4d 2e 42 3c 3b ' + '43 47 53 32 2b 46 57 44 4d 49 57 31 4f 3a 4f 46 ' + '40 35 42 23 4d 3a 4f 2f 52 58 46 4e 53 54 4c 3c ' + '55 2d 56 46 3a 4a 4e 22 0d 0a 4d 60 2f 21 48 58 ' + '26 28 47 2a 27 44 2b 36 3a 29 56 26 26 5c 26 47 ' + '36 54 56 59 46 29 2f 29 4b 29 50 2d 3e 44 3a 49 ' + '2a 2d 43 29 58 2d 0d 0a 24 52 45 23 5a 42 47 2f ' + '55 4a 4d 26 50 28 59 49 54 0d 0a 4d 3b 47 4c 3e ' + '55 29 5a 24 46 2c 44 51 5a 30 44 27 47 47 25 3d ' + '60 60 27 23 3f 2b 34 21 40 22 21 43 49 25 30 56 ' + '30 53 3b 33 54 54 46 50 36 4e 41 4e 3d 4c 51 27 ' + '52 54 2b 2c 34 3a 4e 53 0d 0a 4d 4e 30 59 5c 54 ' + '2c 4f 28 21 5c 43 4f 5e 55 32 51 4a 54 25 2a 2c ' + '5f 38 5e 2a 34 3c 3c 5f 36 46 4a 2c 58 52 3e 30 ' + '3e 2a 35 2e 2e 49 32 4f 3e 46 52 4d 40 2d 51 4e ' + '3b 53 34 47 26 57 25 0d 0a 4d 3c 58 29 2b 27 27 ' + '3f 2d 23 26 30 30 3d 57 3c 43 2d 23 2b 49 5d 23 ' + '52 24 5f 23 41 4f 46 48 4d 5e 51 4c 27 4f 32 48 ' + '51 45 32 49 5b 42 43 2f 34 22 5f 27 21 51 33 29 ' + '3c 3b 2d 21 36 2b 0d 0a 4d 48 26 28 58 5b 35 30 ' + '4e 44 56 53 39 27 38 54 52 56 46 28 35 40 53 43 ' + '4e 32 2a 3b 3c 29 4f 37 28 5b 35 33 56 30 56 58 ' + '45 60 59 39 5c 5d 42 4d 22 57 34 49 21 5b 34 39 ' + '2e 29 42 60 2e 0d 0a 4d 33 32 4d 57 21 5e 45 39 ' + '32 31 3a 3a 3a 28 52 2c 47 47 25 3c 4b 38 44 50 ' + '3f 3b 57 49 31 3c 23 40 43 47 5a 55 2b 4f 4d 57 ' + '29 5f 47 30 23 3f 59 2b 22 4c 41 3b 28 5c 3d 5a ' + '39 4f 2e 51 0d 0a 4d 31 5e 5d 35 26 38 3b 4c 4b ' + '57 2d 24 4c 4f 32 25 2e 2e 23 5f 60 29 34 3d 21 ' + '54 37 25 3c 2b 28 57 26 31 47 42 46 4a 50 35 2c ' + '47 59 43 35 2d 37 5a 43 5d 2a 3b 5a 40 5d 2f 26 ' + '2f 2e 3a 0d 0a 4d 3b 54 2e 5a 2b 48 44 21 34 59 ' + '26 26 3a 49 3e 33 29 35 3c 5f 53 35 2c 52 5b 47 ' + '57 3c 38 2d 27 4f 21 34 3c 5d 5a 21 36 47 4c 38 ' + '22 22 32 60 3c 38 4a 22 5f 5e 5b 47 2f 3b 4f 32 ' + '28 56 0d 0a 4d 26 37 21 5b 46 41 3a 33 24 33 43 ' + '2e 3c 35 30 3a 27 52 4e 2c 2b 4d 2e 21 34 51 4f ' + '46 3c 40 58 50 2c 5c 55 36 38 40 48 23 47 46 42 ' + '31 40 2d 59 5c 26 49 5b 2b 58 45 45 5e 2c 45 33 ' + '51 0d 0a 4d 30 48 34 39 41 4e 5b 22 44 21 5c 4a ' + '30 23 57 4a 32 3d 4f 21 59 29 49 2d 3b 2a 33 33 ' + '54 36 25 50 25 3b 47 41 4c 54 60 38 41 42 33 59 ' + '49 36 5c 24 40 3e 21 31 5b 40 50 29 5b 26 41 42 ' + '0d 0a 4d 36 4e 41 4b 24 24 43 27 3b 2f 2d 2b 39 ' + '4d 4b 38 27 55 48 3f 34 50 32 2f 2d 3c 36 51 44 ' + '43 47 2f 46 49 2a 3d 44 2c 3d 51 53 46 46 59 2f ' + '4a 3b 22 3e 60 2a 4b 4a 23 47 60 48 5d 53 39 0d ' + '0a 4d 29 2f 3e 40 4e 54 36 22 30 23 56 5b 54 29 ' + '3b 21 51 32 42 5b 38 29 5b 40 5d 4a 40 4f 32 23 ' + '5e 30 58 2c 3d 51 21 51 5d 5a 46 2d 4c 2f 43 5e ' + '2a 4b 4c 56 37 2b 22 43 35 5c 44 54 2d 36 0d 0a ' + '4d 29 4a 5d 45 40 24 39 58 5b 55 27 53 44 5d 41 ' + '32 56 38 2b 4e 2f 44 35 53 32 39 5b 5f 60 2c 34 ' + '2c 45 29 41 44 5d 3f 21 4b 42 51 21 2f 56 49 37 ' + '3c 59 4a 32 51 52 60 2e 31 5d 3a 21 49 0d 0a 4d ' + '49 23 22 57 28 4a 3c 40 48 56 32 21 32 43 52 51 ' + '2f 60 26 3a 25 46 26 5c 5f 32 4a 5a 26 57 38 3b ' + '27 21 28 53 46 4e 23 23 3d 5d 40 3a 32 33 43 28 ' + '4a 35 28 2b 24 5e 2a 33 30 4d 48 3a 0d 0a 4d 5b ' + '5c 58 5e 45 60 32 4e 23 30 23 57 55 23 3e 5b 2f ' + '42 44 4d 41 28 39 4e 52 33 30 24 43 5d 5a 45 43 ' + '45 3a 21 41 43 2d 25 43 32 31 21 5e 5f 3e 49 29 ' + '53 51 56 49 39 3b 44 58 5b 55 2e 0d 0a 4d 3e 32 ' + '2a 2a 4c 3b 4d 3d 21 24 43 44 5f 3e 48 57 27 21 ' + '25 2b 52 50 2d 3d 4e 5b 5f 36 45 30 46 53 5c 53 ' + '2b 2c 52 52 2c 52 4c 52 4c 55 2d 41 4e 59 28 5d ' + '54 3e 59 4d 4b 3f 2d 33 36 54 0d 0a 4d 5e 2b 3c ' + '56 55 4a 42 26 55 35 39 4d 4b 3d 32 2d 5c 55 3e ' + '57 5b 3c 33 59 53 57 29 31 2d 29 3d 32 32 36 60 ' + '51 4f 22 4b 2a 57 45 4f 3d 33 27 4f 56 40 31 29 ' + '22 4e 57 3b 5e 46 4a 5c 32 0d 0a 4d 31 4a 57 37 ' + '4d 35 35 5f 35 35 46 5d 2d 4f 3d 56 40 43 39 35 ' + '36 30 5d 2b 3b 3a 2e 2d 24 32 52 32 5b 2a 56 49 ' + '3a 51 29 4a 34 2a 50 51 27 54 5c 3d 2f 5d 5a 41 ' + '4c 58 36 40 45 5d 33 5f 0d 0a 4d 60 2c 35 3a 48 ' + '37 45 49 5a 23 5b 48 56 48 4b 3a 5b 47 57 3b 36 ' + '5a 4a 54 45 58 47 2d 50 5c 5d 26 43 3d 37 2a 5d ' + '33 2c 4b 2a 5b 2d 36 35 3c 52 2b 2c 56 57 3b 4d ' + '4a 57 29 21 29 3c 44 0d 0a 4d 4d 4e 5a 3a 33 2b ' + '38 3b 32 52 2b 28 4b 2d 4e 5e 3a 41 4e 52 4d 3e ' + '58 38 45 55 25 4d 45 56 3f 2b 35 39 5f 3f 36 45 ' + '3e 56 4c 4a 52 2c 5b 35 47 52 31 3b 37 3f 3d 36 ' + '2e 36 2c 46 3d 5c 0d 0a 4d 3c 4c 39 3e 29 4c 3a ' + '2b 3e 38 27 49 32 2f 37 4a 2b 22 3b 27 53 3d 2d ' + '3f 2f 54 5f 2a 3f 3f 5c 60 36 4f 30 5a 2f 3f 41 ' + '50 4c 3b 2d 55 35 2f 2b 42 23 45 2b 42 3e 57 42 ' + '44 34 48 36 32 0d 0a 4d 4c 3f 36 5b 41 40 5e 55 ' + '28 56 38 2d 35 46 54 46 5d 4d 37 38 58 58 57 26 ' + '55 54 35 40 55 3d 34 39 36 3c 4c 58 49 2f 39 45 ' + '5f 22 59 4c 58 5b 51 49 4b 51 3c 2a 2f 55 35 5d ' + '23 5e 26 39 0d 0a 4d 38 5d 37 47 4e 2b 2e 52 4e ' + '24 43 4e 3c 24 48 2d 57 47 50 21 37 40 4d 37 4d ' + '35 3e 2e 30 51 31 4a 4b 3b 4e 47 25 33 5c 2a 5a ' + '4e 4e 44 3a 51 25 3d 4c 32 43 49 28 22 33 33 33 ' + '58 25 39 0d 0a 4d 25 26 37 31 5d 47 54 46 5b 26 ' + '49 52 31 51 3a 46 5c 3d 4b 4a 24 2b 26 24 5e 48 ' + '3c 21 5d 48 51 51 5f 41 32 4b 5b 31 4b 52 26 32 ' + '5b 31 48 50 54 3b 39 5d 25 55 5b 27 0d 0a 42 4a ' + '2e 4b 5f 23 0d 0a 4d 54 3f 51 51 49 2c 2e 4b 5a ' + '27 4a 37 48 5a 46 46 26 36 2c 2f 40 44 58 5c 55 ' + '3c 54 5f 35 3d 32 2d 46 3b 36 5d 42 45 42 45 42 ' + '58 2a 32 43 21 5f 42 4e 51 2e 54 3c 37 25 4a 31 ' + '45 30 2f 0d 0a 4d 2b 3b 37 3a 51 57 28 50 50 33 ' + '2b 58 5b 24 35 4d 56 5b 28 25 35 50 2c 4c 4a 3c ' + '38 5e 45 39 36 49 53 41 47 39 4f 32 3b 3c 60 21 ' + '52 2f 25 31 49 4e 49 49 5a 58 30 40 43 3d 51 53 ' + '58 4a 0d 0a 4d 3e 42 3d 5d 47 49 29 4b 36 2a 59 ' + '4c 53 3c 4c 52 5b 31 57 21 5e 5d 39 44 4d 47 38 ' + '33 57 22 36 59 46 5d 22 31 5f 38 36 2e 60 33 35 ' + '5a 56 4e 48 59 48 4d 48 60 56 24 59 56 5e 2a 37 ' + '2c 0d 0a 4d 55 4b 3e 32 5e 47 29 22 48 2c 3c 46 ' + '58 2c 21 52 2a 42 3e 2e 2c 4e 53 3f 25 46 3c 3d ' + '26 37 2d 48 5e 4a 46 38 31 56 58 43 45 22 4e 30 ' + '58 27 2f 27 2d 3b 25 45 5c 2e 51 46 39 24 4e 2b ' + '0d 0a 4d 51 28 57 3b 27 29 3b 60 53 36 41 48 40 ' + '25 4d 2d 5a 53 52 4c 3c 2b 4d 60 53 5b 4f 57 49 ' + '4e 48 32 42 36 56 24 44 3a 56 59 56 3c 43 2f 3f ' + '25 39 2b 54 4c 23 3f 5e 5f 52 29 54 53 28 4f 0d ' + '0a 4d 2d 2e 4f 5b 22 59 2c 33 49 5a 4a 5d 55 39 ' + '31 44 24 24 47 25 23 26 5f 60 23 43 23 38 53 40 ' + '55 5a 22 53 55 22 5a 3f 32 5f 34 45 41 57 21 29 ' + '3d 4e 32 2e 3c 23 4d 36 37 4a 44 35 4f 4a 0d 0a ' + '4d 25 49 27 4a 2d 42 58 21 42 34 43 3a 2e 5b 27 ' + '5f 60 2b 25 38 39 4f 31 29 5b 31 54 58 5f 37 36 ' + '5a 44 35 3f 2b 3f 30 2f 31 31 43 28 51 47 40 34 ' + '4c 56 3e 4b 42 25 59 35 4d 56 2c 30 29 0d 0a 4d ' + '59 51 58 49 3c 2c 5b 60 3d 30 50 56 2c 58 4b 53 ' + '3c 46 26 34 3e 53 4e 36 35 32 5a 2b 49 26 38 5d ' + '40 5b 54 60 28 59 21 5e 45 2b 32 3b 47 40 5d 5a ' + '44 24 23 29 5e 4d 39 2d 26 4a 44 24 0d 0a 4d 22 ' + '31 5e 58 4a 32 60 30 3c 27 46 4e 39 44 52 23 58 ' + '53 42 40 38 43 3d 44 35 35 25 5a 4f 31 2b 38 29 ' + '2f 2e 21 30 28 60 21 47 27 29 48 53 41 44 53 51 ' + '4e 4a 26 37 49 27 40 60 54 46 2e 0d 0a 4d 33 56 ' + '30 2e 40 43 47 29 48 4e 59 39 41 56 49 39 60 50 ' + '31 53 4e 53 30 4e 29 28 51 43 2f 3f 46 44 32 56 ' + '5f 48 29 31 45 43 55 38 53 53 35 42 26 38 5e 42 ' + '60 3c 55 31 2b 2f 5b 51 56 25 0d 0a 4d 3c 39 37 ' + '23 24 44 40 22 47 37 58 29 3d 3d 25 42 5c 27 29 ' + '44 34 5c 5d 5e 2a 48 2e 53 60 44 3b 4e 5d 36 31 ' + '2f 51 41 41 35 2a 5c 50 2e 3d 57 3a 4a 4a 52 2e ' + '4e 52 36 3b 2b 24 27 40 42 0d 0a 4d 45 4c 5e 30 ' + '3c 5e 2a 4a 33 37 2f 47 2f 2f 3a 4a 4b 57 41 57 ' + '4d 53 51 30 58 54 35 52 48 55 2f 34 50 31 47 4f ' + '56 48 43 29 4e 41 2e 23 55 38 5b 5f 60 27 4b 28 ' + '5f 25 60 52 3b 32 55 26 0d 0a 4d 2b 51 34 26 2c ' + '54 3c 32 45 29 2d 5b 2d 3a 2e 58 58 5b 55 38 24 ' + '58 34 2c 3c 59 4b 22 3a 5b 21 3d 5c 27 44 5c 54 ' + '34 35 55 50 30 3a 29 31 2b 3c 44 3b 52 33 40 2c ' + '2e 51 48 53 2b 47 22 0d 0a 4d 4a 3c 3c 55 42 2b ' + '3c 3b 52 52 40 58 2d 2f 43 4e 2d 56 2c 27 60 5e ' + '4d 29 4a 41 29 56 3a 37 58 40 2d 47 5e 3a 59 47 ' + '29 40 52 21 40 59 52 3a 48 2b 2a 48 30 4a 3c 3c ' + '3e 3a 3d 29 2b 42 0d 0a 4d 2c 22 49 3a 2b 4d 2b ' + '4c 4d 44 5b 40 48 5c 42 4e 23 27 39 43 2f 3c 55 ' + '34 3a 35 3d 4f 23 3c 55 50 47 52 56 2d 55 29 48 ' + '2b 57 48 4d 4a 51 29 60 28 51 31 2d 2b 46 30 5c ' + '5d 41 35 3c 32 0d 0a 4d 25 3c 21 42 23 5f 5b 34 ' + '40 4e 56 32 33 57 49 2d 23 3b 4d 45 58 32 24 24 ' + '5f 36 46 5b 54 29 29 21 58 4a 42 4b 59 28 34 5d ' + '53 33 60 56 22 35 5c 34 2c 3d 55 48 4c 25 4c 5d ' + '5e 59 4b 4c 0d 0a 4d 44 3c 3e 2a 30 4b 39 39 42 ' + '3e 5d 26 53 47 56 5e 3a 37 31 33 27 2a 57 2b 38 ' + '2d 30 51 21 58 53 32 35 3b 3b 56 5b 44 55 29 39 ' + '3e 5d 29 48 2e 51 49 38 4a 51 60 2f 32 2e 55 31 ' + '56 51 5d 0d 0a 4d 21 34 27 4d 47 51 30 4d 28 60 ' + '2d 48 5b 34 23 3c 56 5e 41 41 26 32 3c 2d 53 31 ' + '44 40 27 40 5c 38 49 3a 2f 55 24 40 34 2e 3c 40 ' + '5f 36 41 43 44 5d 3b 27 25 4c 59 4a 30 3c 27 44 ' + '59 49 0d 0a 4d 36 3e 4b 21 4b 4f 47 50 3f 25 28 ' + '3f 29 3d 25 44 4c 24 60 50 2e 23 51 34 25 40 2c ' + '5f 3e 45 25 43 56 5c 35 21 58 2f 2d 21 47 32 5e ' + '42 39 49 23 4f 60 50 3c 26 4e 53 37 24 54 2c 47 ' + '21 0d 0a 4d 5e 5d 2d 5a 22 2b 3d 44 47 5a 39 59 ' + '4a 3d 52 58 2f 57 49 3e 58 40 44 47 4c 2a 24 4c ' + '22 51 48 4c 4a 5e 30 54 2d 41 4c 5e 2a 59 43 41 ' + '4c 3f 3e 45 60 40 40 59 48 29 39 32 2c 44 3f 36 ' + '0d 0a 4d 44 50 3c 2b 38 5c 4c 2d 51 27 57 48 37 ' + '3c 43 2f 54 48 26 3f 44 47 53 30 5b 4c 4a 30 3f ' + '49 42 40 3f 5a 22 51 53 44 27 53 34 2c 51 27 5b ' + '54 29 3b 60 2f 55 2d 60 5b 44 26 41 4c 49 36 0d ' + '0a 4d 2c 39 41 4d 5e 5d 60 36 60 29 5a 4a 25 43 ' + '58 49 33 4d 55 44 34 22 49 2c 5e 27 30 3c 2e 4c ' + '43 2b 4e 36 4d 27 34 29 38 29 2b 37 3f 23 27 3b ' + '4a 46 5b 4c 4f 4e 36 4f 2e 31 37 54 54 60 0d 0a ' + '4d 5d 22 33 59 3a 37 3d 57 57 58 49 2d 4c 2c 3f ' + '49 55 5b 44 45 39 5c 41 27 2c 45 2b 51 2f 35 3a ' + '3b 3b 21 48 33 3e 4a 4c 24 48 33 59 27 5d 4d 21 ' + '4a 25 57 5e 2a 27 37 3a 36 5c 2c 4f 34 0d 0a 4d ' + '3f 52 0d 0a 51 41 3a 3d 48 5e 47 53 51 3f 23 49 ' + '4e 24 57 5e 4a 59 38 2c 4b 3e 56 4c 5a 5c 41 3a ' + '54 45 5d 2d 49 45 44 2a 5f 31 4a 46 2b 2a 53 32 ' + '5f 29 44 5a 50 36 35 55 5a 4e 46 49 54 21 0d 0a ' + '4d 3b 27 5f 3a 52 3f 5b 30 3a 37 5c 2d 47 4b 56 ' + '5d 5d 4d 36 3b 4a 23 55 55 37 55 2d 4d 34 29 38 ' + '26 43 4e 26 36 2d 36 4b 35 51 59 24 38 5c 47 46 ' + '3e 58 4d 5d 60 54 38 28 39 55 4e 2b 43 0d 0a 4d ' + '54 5f 44 37 3f 57 5f 4f 35 2f 5c 60 4c 5f 33 5f ' + '60 2c 2c 42 4a 42 5e 48 33 55 2c 3f 49 37 45 25 ' + '55 3f 36 36 40 5f 22 2d 27 24 4c 32 3b 4d 4b 2a ' + '3e 4a 4a 35 53 2f 3f 2d 29 4f 2d 53 0d 0a 4d 2d ' + '25 5f 33 4e 5a 3a 52 58 32 2a 45 37 53 40 43 55 ' + '35 53 48 44 3d 58 4c 4b 36 2b 51 4f 55 3f 5c 2b ' + '53 37 45 3f 42 23 30 5b 46 54 44 38 32 48 50 2f ' + '5a 3a 3f 3b 37 56 49 3a 3c 5b 33 0d 0a 4d 30 2e ' + '22 39 25 56 5b 4f 46 4b 54 3e 46 5a 49 3b 5a 41 ' + '49 37 4a 3a 43 2f 3b 29 2e 2e 5a 53 2d 55 26 43 ' + '52 2e 43 4e 2f 45 5c 43 59 4b 3c 2a 5a 4d 4c 3a ' + '42 43 44 3a 26 58 31 55 3e 4d 0d 0a 4d 5b 58 45 ' + '4d 4b 31 3b 44 2f 22 52 40 5f 50 21 2d 3e 3f 45 ' + '31 2e 49 25 4a 39 31 2b 43 2a 2e 33 51 2f 35 3a ' + '2d 4a 36 5e 2b 3a 3f 3c 4d 3e 43 4d 59 5c 49 54 ' + '4d 37 53 32 55 47 3a 26 31 0d 0a 4d 36 43 3b 3a ' + '55 3e 4d 54 4a 5f 39 58 45 2d 35 25 5c 32 4c 5e ' + '2a 2c 53 55 4a 21 32 5a 4c 3d 4b 21 4e 3a 31 4a ' + '3e 43 36 5c 5c 33 32 4a 4f 53 34 4a 52 46 37 3a ' + '25 57 3c 35 4a 56 54 4f 0d 0a 4d 59 3b 2a 57 3a ' + '4e 45 34 53 43 3d 50 2c 3a 50 27 51 2d 48 4d 52 ' + '45 55 48 3d 5a 38 50 2e 5a 3b 5c 35 5d 28 54 4b ' + '5e 54 23 35 43 3a 60 3a 59 49 2d 49 2d 3c 23 2f ' + '59 44 3a 3b 46 2f 5b 0d 0a 4d 46 4f 2b 3d 29 53 ' + '5d 21 33 2b 3d 42 2e 47 3d 52 2e 2a 55 32 5f 21 ' + '45 2e 32 46 4f 27 4c 56 3d 3d 5e 2e 31 39 45 49 ' + '39 5d 2a 57 31 47 59 44 33 50 3a 50 3d 60 55 4d ' + '3d 33 21 46 22 5b 0d 0a 4d 27 2b 40 4a 4b 3f 49 ' + '4a 5f 2d 26 4d 53 39 2f 24 5e 26 27 43 2d 3e 39 ' + '54 3f 32 5b 4a 53 55 3d 5d 47 5f 22 21 37 4f 33 ' + '46 5d 3a 2c 4c 36 2a 47 34 59 47 54 3f 31 39 58 ' + '58 51 4f 3e 3c 0d 0a 4d 23 2b 47 40 47 5a 55 4a ' + '50 5b 3f 35 4e 60 22 22 32 5e 34 2d 3f 2b 4b 57 ' + '36 41 3b 3a 42 3b 3c 2a 57 27 55 4b 56 26 47 37 ' + '56 56 57 5f 60 21 2c 43 27 26 5f 27 56 51 30 49 ' + '3b 48 49 51 0d 0a 4d 4d 36 43 55 5d 47 3d 51 52 ' + '26 32 54 39 55 36 3e 24 41 41 5d 55 2d 35 38 34 ' + '4d 59 4d 30 2d 57 25 3c 2c 28 55 33 21 31 43 54 ' + '39 4a 45 2b 2f 22 4c 49 4e 58 28 53 29 4e 60 50 ' + '35 5e 41 0d 0a 4d 4a 5b 3b 4b 3b 4f 26 54 31 56 ' + '4a 5c 43 5d 4f 4f 36 49 40 59 3b 56 3e 42 5f 50 ' + '21 49 51 30 56 4c 3c 24 24 45 4a 5b 4a 2c 4c 49 ' + '5e 3b 51 32 2b 26 5d 41 43 31 41 27 3a 31 2a 40 ' + '52 59 0d 0a 4d 34 2b 51 47 53 37 46 45 4c 59 34 ' + '29 3a 3a 2b 54 59 34 38 43 40 3e 2c 55 3f 54 5e ' + '59 40 4c 42 28 5d 30 39 48 55 4e 2e 46 2e 34 5d ' + '4c 59 5b 34 56 4a 2d 29 33 3c 45 3a 2f 31 3a 3f ' + '4a 0d 0a 4d 4d 51 4a 3c 34 4c 22 50 46 2e 2a 2b ' + '28 58 26 2c 5c 55 44 57 56 40 32 57 45 54 4b 36 ' + '4c 58 22 38 2e 5f 21 59 48 58 44 46 30 44 56 54 ' + '43 46 2c 58 29 5d 2f 5a 27 5a 55 3f 37 36 2f 5d ' + '0d 0a 4d 46 21 38 44 4d 3e 37 52 32 5b 23 4d 34 ' + '32 51 4a 36 43 33 27 45 45 43 3d 56 39 34 5f 50 ' + '5f 4a 2c 31 39 40 60 60 23 40 39 49 35 5b 38 53 ' + '36 5e 36 5d 32 2d 5c 24 5c 2a 3e 3a 54 4b 4e 0d ' + '0a 4d 5c 3b 34 5b 3d 2f 32 4e 49 3d 56 58 4c 22 ' + '49 5a 3a 32 3d 2e 54 5e 38 51 57 2c 3d 5f 28 29 ' + '56 3b 3a 35 2b 5d 2e 3a 59 49 3e 43 51 4f 49 27 ' + '35 5f 3f 59 2b 5a 2c 36 36 34 4b 28 52 2e 0d 0a ' + '4d 2d 49 21 28 50 3a 4b 36 35 5c 4d 53 4a 52 5a ' + '3f 22 5a 4f 2c 55 3e 51 55 32 50 42 45 3e 57 4c ' + '5b 4a 26 2c 32 2f 5b 39 34 27 3c 38 5b 44 55 26 ' + '47 5a 2b 49 26 43 37 5a 31 56 44 22 53 0d 0a 4d ' + '37 29 42 29 5d 39 41 47 2b 39 5b 39 4b 47 3f 48 ' + '34 47 56 3d 2b 5f 4a 22 4b 5d 47 47 36 43 4e 38 ' + '52 56 5a 29 43 53 51 40 35 23 32 58 28 31 53 51 ' + '37 4a 5d 34 3e 57 54 5e 2a 3e 26 56 0d 0a 4d 37 ' + '55 4b 52 3b 2b 21 37 59 22 5f 3a 4c 2a 5e 46 4d ' + '44 41 46 41 47 4d 42 3b 56 2c 40 25 25 27 2e 3c ' + '34 33 5d 60 49 3b 31 27 5f 5a 47 54 54 34 34 3d ' + '36 3c 40 2e 2c 43 46 4e 2c 4c 3b 0d 0a 4d 2d 50 ' + '3c 40 5d 4a 42 53 4f 4d 26 46 55 21 5b 35 5b 2a ' + '5f 24 52 3d 4c 29 35 56 59 54 36 55 3e 33 3a 4c ' + '4c 4d 4c 21 40 60 4e 3c 60 3e 2e 3a 59 49 5e 43 ' + '46 4e 43 48 51 5e 4d 34 53 2f 0d 0a 4d 3d 55 26 ' + '34 58 5c 54 46 35 54 50 30 32 22 30 3a 4e 3a 45 ' + '5c 2d 3a 4f 3b 2c 54 45 4a 5a 57 3c 23 3c 51 46 ' + '2b 4a 5b 55 46 53 5a 2d 5c 30 51 28 29 26 54 52 ' + '59 3c 3b 4c 3c 29 34 4f 54 0d 0a 4d 5c 55 4a 43 ' + '37 5e 58 51 5f 3b 60 47 46 3f 54 56 53 5b 41 56 ' + '49 24 54 5e 39 23 4e 2f 3e 48 2d 45 4b 23 3b 46 ' + '3a 53 46 26 57 26 58 3b 3e 57 2d 34 49 26 45 35 ' + '22 54 5c 29 43 2f 5c 60 0d 0a 4d 34 2a 47 56 49 ' + '51 2b 36 32 24 46 25 2f 0d 0a 24 4b 47 28 21 52 ' + '3a 49 37 3d 45 2c 26 37 54 56 56 5c 55 39 3a 38 ' + '5e 4a 24 23 4b 4f 2f 38 35 25 52 2d 30 23 23 2c ' + '3b 5b 3c 39 52 31 51 33 58 0d 0a 4d 42 3c 4d 46 ' + '3f 2b 3b 37 2a 53 52 60 52 60 60 34 45 55 4e 50 ' + '48 3b 2a 4c 3d 55 3a 23 31 3e 49 44 33 33 38 3b ' + '5e 5d 33 46 54 5e 24 31 44 42 31 50 22 3f 2d 27 ' + '26 41 32 3b 2c 38 46 5a 0d 0a 4d 43 3b 3e 36 52 ' + '23 37 3f 42 49 34 38 39 4b 3a 5d 2f 33 28 45 26 ' + '5a 30 4c 59 58 34 22 4a 39 42 4d 29 59 50 28 36 ' + '57 45 36 59 60 49 5c 3b 24 59 4d 3a 24 31 3a 4b ' + '26 4b 5b 37 3b 21 25 0d 0a 4d 36 2f 5c 60 3a 44 ' + '22 60 43 3e 2f 4b 35 4a 50 5e 27 5b 5b 35 4b 48 ' + '31 36 2e 43 53 40 2a 56 23 2c 5c 3f 33 50 2f 4b ' + '36 59 3b 5f 56 2b 37 5d 52 27 44 55 3f 34 58 58 ' + '33 29 5c 4c 2b 38 0d 0a 4d 5b 35 4c 4f 32 52 45 ' + '54 33 5b 4a 33 5b 48 50 48 4b 5d 27 52 46 5b 40 ' + '55 3c 5f 25 41 46 27 3b 5a 55 56 4e 3f 56 3f 49 ' + '49 2a 32 32 30 3a 43 28 3d 4b 38 22 4e 5f 29 5c ' + '23 25 3e 28 4e 0d 0a 4d 4d 33 55 42 51 47 2c 3b ' + '3a 31 3e 4f 22 4b 3d 2b 41 2e 5d 33 2f 54 3c 55 ' + '54 37 23 2e 4c 44 43 57 3b 52 4a 53 24 59 50 51 ' + '5c 35 53 52 24 2d 42 4f 27 36 2f 51 33 49 5b 52 ' + '3b 29 49 45 0d 0a 4d 42 45 57 3b 3d 4b 3e 5a 4d ' + '4a 2b 34 38 49 45 24 4c 2b 4a 50 5e 4d 3c 5c 58 ' + '32 43 56 3d 2f 2c 57 36 47 2e 3e 2e 3c 35 22 32 ' + '40 4b 4d 57 3d 5a 53 28 5b 4b 47 40 54 5d 29 44 ' + '5c 3d 4a 0d 0a 4d 52 3a 2a 51 4c 54 35 44 2e 3c ' + '59 5b 34 50 32 24 39 53 57 29 4b 2f 41 44 60 5a ' + '32 3c 54 50 33 60 47 27 47 42 48 39 49 49 4f 31 ' + '48 45 5c 4e 23 5d 2a 58 4f 43 29 21 5c 55 34 32 ' + '33 28 0d 0a 4d 28 52 2a 40 52 5e 2f 4f 31 54 37 ' + '39 3a 24 46 3e 4f 53 31 28 51 51 44 5f 36 4a 37 ' + '4b 3c 24 54 51 26 3b 3c 30 22 2e 23 32 3a 27 56 ' + '37 57 3b 27 27 42 4e 45 28 50 2e 57 25 35 2d 58 ' + '2b 0d 0a 4d 5c 59 49 41 59 43 2a 59 59 2d 23 31 ' + '25 54 2d 38 44 24 38 5b 26 42 39 5e 21 47 4d 35 ' + '3f 3f 55 60 3b 40 33 34 44 59 2d 30 35 3d 45 44 ' + '2d 4e 3c 24 3d 4c 54 31 3b 27 3e 4a 3a 32 45 36 ' + '0d 0a 4d 51 58 25 2c 36 33 29 2e 3a 3b 26 5b 2b ' + '21 2e 23 5b 4a 5b 3c 4e 2a 30 26 5b 4f 51 43 29 ' + '4b 4c 59 29 5c 34 41 34 5e 51 5b 4d 43 2b 35 2b ' + '2d 54 59 5c 55 36 3d 5e 3e 57 25 3c 36 3b 52 0d ' + '0a 4d 55 34 54 29 4e 4e 41 59 38 3f 3a 40 38 4b ' + '52 58 49 33 2d 40 55 23 2c 2c 58 4a 3a 26 4d 43 ' + '60 57 34 33 30 45 50 3f 25 30 53 39 59 49 29 3b ' + '24 41 26 2c 22 40 54 35 43 42 57 29 48 32 0d 0a ' + '4d 5f 21 60 5c 34 4d 57 50 2f 4f 56 49 3b 32 2c ' + '2c 4b 5d 3a 26 51 3d 43 50 56 3d 53 35 21 44 37 ' + '47 2f 5b 55 36 39 52 26 27 54 48 37 45 59 49 36 ' + '37 51 4d 43 47 3f 26 3c 2d 32 59 29 2e 0d 0a 4d ' + '4f 3d 46 44 25 5c 39 50 3e 2a 21 59 35 21 3b 5b ' + '34 24 52 39 5c 48 5e 28 5d 60 44 35 46 4f 2b 3e ' + '26 31 4c 5d 36 55 3a 3d 48 27 50 50 59 38 4d 4a ' + '44 34 54 38 5d 4a 5c 35 5d 60 4e 5b 0d 0a 4d 42 ' + '2f 38 4d 4a 5c 3a 31 47 26 32 51 25 39 3d 51 4b ' + '2d 4d 5e 29 5d 34 52 42 30 31 5d 44 2b 3d 5a 5d ' + '4e 34 47 2b 51 2f 45 4e 2c 2c 3c 4b 31 34 55 48 ' + '57 36 46 36 48 32 55 2a 32 50 2a 0d 0a 4d 4f 34 ' + '4f 5a 3a 51 2b 28 5a 33 4a 42 57 2a 4d 27 2c 4d ' + '56 36 52 46 53 4d 36 41 3f 57 35 4f 4a 25 4e 5a ' + '50 5e 4c 44 4a 5c 4c 4f 41 4e 4a 4f 2c 29 3d 57 ' + '26 42 57 43 52 36 4c 34 3b 22 0d 0a 4d 33 5d 35 ' + '25 35 54 29 51 43 45 44 36 49 4b 3e 31 47 3a 2a ' + '2e 26 33 3f 5c 4a 54 45 55 36 21 3f 53 48 56 35 ' + '5f 54 5f 2d 33 5d 2b 5e 2a 28 58 47 44 47 55 3a ' + '21 42 5b 2b 54 5e 40 4f 53 0d 0a 4d 35 2f 5c 60 ' + '5d 32 36 41 3e 34 26 55 32 36 31 50 52 59 45 37 ' + '4a 35 4f 55 35 49 3c 43 43 44 4c 36 2f 29 51 33 ' + '24 31 51 52 3b 36 44 3a 25 48 54 39 4f 3c 55 23 ' + '3c 46 25 4e 46 33 3a 55 0d 0a 4d 2b 55 23 34 29 ' + '3b 4d 36 43 47 39 38 58 45 3b 49 22 35 47 49 38 ' + '2c 28 55 44 43 4e 42 52 5b 4d 4f 34 55 27 28 57 ' + '52 30 44 49 35 24 57 28 2b 25 59 48 2f 35 32 21 ' + '56 33 5d 36 57 49 4a 0d 0a 4d 41 4b 36 45 4e 57 ' + '49 4c 5d 4c 21 28 2f 5a 3a 54 4f 41 5a 5f 46 54 ' + '56 3b 54 5b 4a 39 46 40 3f 4e 26 5d 4d 3e 4a 4c ' + '49 5b 2f 36 2b 3a 3a 5e 3d 25 2c 24 3f 22 25 2a ' + '27 2a 34 39 25 59 0d 0a 4d 2c 35 4a 4e 31 5c 53 ' + '45 4c 29 59 26 39 3c 5e 56 4c 52 58 41 3d 39 36 ' + '3e 4f 49 46 4e 3a 2f 27 23 26 29 2b 39 37 3d 43 ' + '4e 58 37 59 3a 5c 3b 4b 3d 45 29 25 29 5a 49 43 ' + '56 51 4d 5e 4a 0d 0a 4d 46 47 52 2e 36 22 45 42 ' + '45 39 59 55 48 4e 4e 4b 4e 44 37 2f 49 4d 5a 33 ' + '2f 50 53 34 25 55 25 5c 46 52 4a 3b 3b 55 3b 39 ' + '5c 55 38 59 38 5c 33 54 48 32 45 2a 31 5a 4a 53 ' + '4f 59 28 29 0d 0a 4d 2f 32 46 5f 59 4a 5d 2b 38 ' + '37 5c 3c 46 57 4a 57 35 59 2a 51 2a 57 34 36 29 ' + '24 5a 4a 4d 2b 3b 37 25 4d 29 5a 55 4d 29 4e 5f ' + '49 3a 49 43 2e 32 2d 29 38 48 4c 5d 4d 23 3c 39 ' + '37 39 54 0d 0a 4d 58 2d 36 60 36 29 58 36 4f 27 ' + '56 3e 4b 2c 27 39 39 55 3a 2d 45 3b 59 4a 0d 0a ' + '5d 27 39 57 4c 3b 40 3b 39 2f 3d 37 3b 23 28 3c ' + '36 33 27 26 21 49 36 54 4e 51 30 2f 21 2d 36 29 ' + '39 24 22 25 0d 0a 4d 51 54 55 31 31 46 3c 3b 5e ' + '47 38 2a 3a 4c 42 4e 3d 57 4e 5e 55 3a 49 54 3c ' + '5c 54 46 5d 25 37 36 5d 27 25 57 3c 26 5f 4d 4f ' + '4b 35 47 31 25 55 26 22 31 5b 3a 5b 5d 29 5b 37 ' + '2e 21 4d 0d 0a 4d 4a 57 21 2e 50 38 50 5c 40 58 ' + '5f 42 47 31 3d 29 29 2b 3c 34 5a 4d 46 47 4e 3c ' + '35 31 4a 52 5a 46 4d 4f 3a 42 56 4c 54 26 32 47 ' + '32 3f 60 4b 53 46 47 37 2e 48 53 57 34 5c 38 4e ' + '27 5d 0d 0a 4d 36 26 34 25 43 47 4f 5c 55 3a 24 ' + '34 4a 27 28 2a 43 5e 2a 31 28 27 4d 3b 5c 3a 41 ' + '39 29 4f 2e 53 24 52 27 4c 31 35 2c 50 43 43 59 ' + '5d 47 4e 5d 24 55 2a 5a 4e 4b 2e 2f 5c 30 4c 34 ' + '5c 0d 0a 4d 46 2c 2e 25 59 3f 28 58 4a 47 5c 37 ' + '37 5a 5f 40 25 43 47 54 52 58 43 40 4d 49 3f 34 ' + '5f 2c 33 21 5f 42 4c 57 33 57 4d 3b 52 26 57 47 ' + '4d 4b 46 32 53 44 57 5d 3e 23 40 5f 53 35 43 36 ' + '0d 0a 4d 3b 5b 35 3d 31 4e 38 4b 22 56 30 57 3c ' + '2b 29 5e 3b 28 57 2e 21 31 52 49 44 53 51 52 52 ' + '33 49 3a 2d 26 52 4e 35 54 58 2b 3e 36 55 58 30 ' + '4c 4f 3e 2e 34 5c 27 5b 60 35 4c 3a 2b 4b 46 0d ' + '0a 4d 48 37 4e 48 52 31 5a 43 38 36 49 42 34 27 ' + '47 3b 51 40 55 41 30 56 31 5f 60 41 39 5b 2e 32 ' + '35 58 41 50 3c 39 59 25 2e 41 55 32 35 48 40 54 ' + '44 38 4d 58 5c 3b 3c 24 38 3b 2f 57 49 49 0d 0a ' + '4d 56 37 29 2a 23 48 54 39 4d 35 55 39 2b 5d 38 ' + '2b 27 31 38 35 4c 50 51 56 4c 28 5e 58 53 35 53 ' + '37 47 4d 39 47 2d 42 2b 37 5c 2f 2e 48 57 25 44 ' + '26 60 2a 53 39 5f 42 2a 26 51 4c 34 3d 0d 0a 4d ' + '4f 35 2b 43 4c 21 56 60 4a 53 3b 3a 51 5e 2f 38 ' + '37 22 36 44 44 58 47 5d 51 34 39 28 5c 35 3b 3a ' + '2c 49 2e 30 52 52 47 4e 25 40 4d 5b 36 26 34 57 ' + '2d 56 56 34 23 24 59 22 5f 50 23 3e 0d 0a 4d 2a ' + '4b 2d 4a 45 54 4e 4a 5b 38 45 53 29 3b 52 41 33 ' + '5d 2f 4f 36 41 4a 5d 52 5d 49 5c 2f 52 37 26 41 ' + '56 28 2d 56 36 35 38 55 56 5c 43 44 39 2f 5e 26 ' + '3a 5c 55 3d 4d 23 3a 57 4c 56 5a 0d 0a 4d 3c 51 ' + '26 5a 28 3c 60 47 47 2f 54 49 2d 26 3a 52 29 52 ' + '48 5d 43 2e 5d 47 2f 3c 42 58 47 2b 22 58 21 21 ' + '60 37 5f 4b 33 25 3e 52 4e 4d 3d 55 23 34 37 40 ' + '37 2c 3a 38 21 51 5b 46 60 4b 0d 0a 4d 53 54 35 ' + '5f 3a 48 5f 4a 4f 29 4e 3d 48 4c 3f 4c 3a 3b 38 ' + '3a 41 24 28 3d 4c 33 41 50 51 59 5e 5d 2a 44 37 ' + '52 3b 38 57 32 4b 26 3e 37 34 53 4a 34 50 32 2a ' + '32 31 42 56 57 4c 2e 3c 58 0d 0a 4d 25 37 5d 2e ' + '42 46 4f 27 3e 26 5c 5d 2e 31 52 23 47 2f 3a 44 ' + '56 5e 48 51 53 32 50 51 33 3d 21 3f 28 43 28 5b ' + '39 60 2e 2c 54 4e 27 34 34 4d 59 47 5d 3e 29 58 ' + '49 25 2e 2d 50 26 25 2f 0d 0a 4d 27 5f 53 32 3a ' + '31 4c 4c 44 46 35 28 5d 33 4e 2b 3f 36 2b 42 55 ' + '4d 59 37 36 25 32 35 60 21 58 52 22 31 51 36 49 ' + '49 3e 4f 37 33 32 48 27 45 45 2a 31 4d 53 4e 2f ' + '3e 4a 58 45 4c 58 42 0d 0a 4d 5d 53 5a 32 44 44 ' + '39 21 28 5c 54 4a 32 30 37 30 43 45 42 42 36 2d ' + '39 46 50 2c 23 60 29 48 58 57 4c 45 52 42 4d 3f ' + '39 4d 5a 41 28 45 59 2c 3f 32 52 43 2c 4f 35 4d ' + '5b 27 2d 39 4e 48 0d 0a 4d 5a 2b 27 4a 5d 4d 60 ' + '39 31 23 24 54 36 36 39 4e 50 28 27 55 4a 4b 23 ' + '24 55 5d 3f 2d 38 42 36 58 4d 5b 4c 39 22 5c 58 ' + '21 28 4a 49 49 46 48 5a 45 49 3f 51 23 3c 56 2d ' + '50 25 4e 28 47 0d 0a 4d 60 35 24 3b 47 43 26 2a ' + '3b 40 4f 50 35 42 52 59 38 52 23 45 5e 26 4d 2b ' + '4e 2d 5c 50 3c 3b 25 27 59 3b 49 5c 51 51 58 4b ' + '36 43 44 4c 28 5d 2e 34 37 45 4d 22 3b 3f 2f 49 ' + '5b 4c 3c 5c 0d 0a 4d 35 3b 5f 60 2b 5e 2f 4d 59 ' + '48 35 2f 58 36 25 2e 38 35 5f 35 53 58 4a 49 4a ' + '5e 47 37 48 4c 58 28 43 3a 4d 5a 2a 40 4e 58 51 ' + '53 4e 4a 3f 3b 43 5e 23 3a 3f 4a 29 57 56 2a 4f ' + '38 3f 41 0d 0a 4d 58 36 52 37 2c 3d 43 26 29 27 ' + '26 28 5c 49 50 33 5f 50 23 42 4c 5b 5c 29 3b 31 ' + '28 2b 4e 3a 52 5d 37 2f 4e 43 31 3c 5b 3e 3a 4c ' + '32 51 46 57 4d 45 5d 3a 29 42 42 4d 4e 35 32 2e ' + '31 35 0d 0a 4d 2f 33 4b 5e 38 2a 55 5b 26 36 57 ' + '33 44 27 54 39 2e 50 5f 42 43 56 58 5f 40 53 43 ' + '45 52 57 3f 28 2b 34 3d 27 54 22 3d 36 46 4e 44 ' + '36 57 29 27 32 4a 3c 24 3f 5d 42 4b 26 43 5a 2f ' + '48 0d 0a 4d 56 45 48 4d 5b 23 23 25 2a 2e 3e 26 ' + '26 33 33 4d 35 25 4a 38 25 5f 25 51 25 59 49 24 ' + '57 24 2a 2e 51 2f 3a 47 56 4d 47 25 2f 39 45 44 ' + '5d 31 2c 40 41 30 3e 56 3e 55 2b 56 58 57 49 25 ' + '0d 0a 4d 2f 2d 2f 5b 38 5a 23 58 44 55 24 41 2b ' + '3b 33 5d 2d 2a 48 3e 4b 3b 26 47 2d 34 2d 33 55 ' + '53 58 4c 4e 2b 47 3b 3a 5a 2f 3d 60 27 41 43 28 ' + '47 43 5b 34 37 50 58 3d 31 4d 3b 4e 59 5f 24 0d ' + '0a 4d 52 2a 44 47 49 4d 5a 33 2a 3e 2c 42 47 36 ' + '3e 4d 3a 4c 3b 36 57 40 3e 32 34 52 2f 2b 52 51 ' + '2f 38 39 4a 47 25 46 23 3c 5e 35 52 3d 46 3a 5b ' + '37 5a 52 45 5b 4f 33 49 59 39 35 28 2e 56 0d 0a ' + '4d 32 2f 28 5e 4f 25 33 2d 4b 5c 51 44 51 29 5c ' + '2e 51 4e 41 28 34 21 48 3e 50 2d 3e 45 4e 5d 39 ' + '45 4c 26 44 0d 0a 3e 39 35 4e 29 46 27 22 5d 52 ' + '48 5e 5d 21 3b 3f 24 25 41 5a 2b 5f 42 48 28 0d ' + '0a 4d 3f 37 3b 26 57 43 43 5a 35 2d 2d 26 4f 29 ' + '31 5e 2b 39 58 2f 34 4b 3f 58 31 4f 59 3f 33 55 ' + '2b 58 3c 24 2d 55 2a 3c 42 32 57 41 50 2f 4f 37 ' + '43 3d 38 5e 24 28 2b 3e 58 51 48 3d 53 3c 0d 0a ' + '4d 4a 4e 30 2d 43 4d 56 4b 5b 2f 23 4a 35 49 3c ' + '45 37 46 4c 3b 39 28 58 52 3c 2c 25 5b 42 4a 3c ' + '42 3a 31 38 21 3b 4d 4b 35 5b 41 57 38 47 49 26 ' + '30 2a 42 36 2d 32 5b 2b 51 59 37 43 3d 0d 0a 4d ' + '4d 4d 47 52 2f 5f 38 47 51 2d 3a 2e 27 4e 48 30 ' + '28 43 52 2e 2e 4b 25 33 27 2d 4a 2c 3a 3d 3d 43 ' + '2f 47 4d 5b 2a 5e 4e 41 44 55 31 2f 36 30 41 45 ' + '2f 4d 34 5d 51 5d 4a 2a 32 32 54 4d 0d 0a 4d 49 ' + '55 24 45 47 24 5c 4a 47 60 33 3b 59 4b 2a 37 49 ' + '2c 3b 2e 59 5f 55 22 43 59 30 2b 49 58 45 5f 2f ' + '31 58 33 47 4c 5f 21 49 54 35 52 4f 27 2e 26 4b ' + '57 36 4f 3a 2d 39 5a 53 2f 2b 3d 0d 0a 4d 4e 4c ' + '34 29 37 44 4a 2e 2c 27 2f 3a 4c 33 34 4f 5b 2e ' + '4b 42 2e 60 32 56 26 4a 30 32 2c 30 33 4d 39 5e ' + '3e 55 3c 56 33 54 2d 3d 27 37 43 5d 3f 25 46 28 ' + '4d 50 3d 59 50 33 46 47 42 3d 0d 0a 4d 33 59 5c ' + '55 31 4f 3d 29 55 3f 33 49 37 25 50 4a 52 41 33 ' + '43 2a 5d 4a 49 29 3d 25 2e 4a 35 32 41 5e 41 4b ' + '40 52 3e 47 47 25 5b 31 57 31 53 50 47 54 53 54 ' + '22 33 39 29 53 43 25 2c 32 0d 0a 4d 3c 39 5f 3a ' + '4c 32 2e 5b 57 60 5c 5c 54 58 33 59 2e 5b 3d 36 ' + '33 31 4c 56 3b 2b 32 40 47 5a 26 43 36 38 3e 49 ' + '53 56 4b 27 32 59 5a 53 44 5c 42 46 51 33 25 4e ' + '48 47 40 42 49 3b 22 34 0d 0a 4d 4d 54 53 35 2c ' + '42 5b 46 2a 5d 5c 44 54 30 3f 47 2f 54 2d 39 40 ' + '47 50 33 44 5e 3a 3a 29 43 53 53 47 25 2a 42 4a ' + '2d 25 46 35 41 50 31 32 40 5a 58 38 59 2e 31 35 ' + '39 39 55 39 32 4f 44 0d 0a 4d 55 2b 32 40 24 58 ' + '5b 54 2c 36 46 5a 2b 42 32 3b 4e 23 34 5b 57 59 ' + '5e 45 34 45 45 52 33 5d 2a 46 32 58 52 23 34 4d ' + '23 3e 42 58 53 58 21 59 59 48 36 44 29 51 35 38 ' + '32 58 59 4a 2f 35 0d 0a 4d 5a 2e 5f 3a 40 34 4a ' + '4f 31 38 2c 41 38 39 51 37 26 30 47 47 53 35 3c ' + '52 5b 32 30 2a 40 53 39 3a 40 3b 43 36 52 52 54 ' + '4e 24 2e 2e 5d 2b 44 44 52 2d 55 28 3a 32 45 2f ' + '2d 41 32 30 57 0d 0a 4d 57 48 44 41 4b 39 3b 2c ' + '4f 36 2c 5d 43 30 2f 2b 5d 2a 49 46 3b 43 4f 56 ' + '48 29 29 55 53 57 4a 3a 2a 3a 48 4d 32 32 44 44 ' + '54 46 32 30 3c 39 3a 4a 3c 5d 52 4e 23 55 35 33 ' + '4e 3b 59 2d 0d 0a 4d 4e 5b 3e 4d 24 44 2e 21 49 ' + '32 57 27 29 34 3d 43 35 39 5b 47 5b 5f 4f 36 2f ' + '3c 3a 46 4f 2e 53 4a 5c 35 34 3e 5d 47 3d 53 4c ' + '31 4c 3d 35 2d 31 22 34 35 39 59 52 2f 34 3b 5e ' + '58 3f 3d 0d 0a 4d 29 3c 4e 59 3b 5a 4d 34 4e 5a ' + '4a 57 4d 39 46 39 4f 45 4a 49 22 55 45 60 26 57 ' + '33 3d 3d 3b 47 50 4d 3a 51 5a 42 43 37 43 2e 60 ' + '42 4b 4e 37 2f 53 35 5b 57 2b 42 3f 27 38 5c 27 ' + '2f 4c 0d 0a 4d 4c 3f 22 4c 35 52 56 4a 2a 58 40 ' + '2f 49 23 47 5c 51 3e 2f 3b 36 51 5c 33 36 2d 4d ' + '3f 36 53 4d 29 3b 56 54 33 31 5d 2a 5e 44 4e 60 ' + '36 5e 36 4b 25 4d 29 3b 49 3a 45 50 5f 34 4f 26 ' + '21 0d 0a 4d 37 2f 3c 32 47 33 32 37 4d 50 31 4d ' + '57 5e 57 46 4c 3e 37 2a 35 47 37 29 4e 24 3e 2a ' + '2f 28 37 3f 50 45 29 5e 25 5f 25 4b 2c 2d 58 57 ' + '3b 34 36 4f 2b 57 5d 4f 2b 3a 57 2b 56 5d 51 26 ' + '0d 0a 4d 50 45 27 4e 2d 3e 5f 4d 3d 3a 43 55 22 ' + '26 34 31 2c 28 4b 46 2b 5f 50 47 5c 4b 5d 4a 5c ' + '5f 5c 60 25 34 34 4d 59 3c 2c 5c 44 3e 56 38 2d ' + '51 36 42 5e 35 2c 59 5c 43 3c 55 52 51 48 5c 0d ' + '0a 4d 56 57 27 53 35 51 3d 5c 5e 5d 44 4a 50 2b ' + '22 31 46 3b 49 49 2c 5d 4d 29 27 55 4d 55 54 55 ' + '24 53 52 57 2a 37 26 28 56 3e 3e 32 37 3c 4b 5d ' + '32 4b 36 4d 5c 29 3a 4b 2b 49 5d 59 5a 26 0d 0a ' + '4d 5b 5f 3d 47 5a 32 43 35 44 31 30 4c 52 2d 4d ' + '35 4d 55 2c 36 56 4e 3d 4b 32 2d 4d 5f 49 3a 4a ' + '44 3a 30 5e 39 5d 2f 3a 3e 2a 3a 32 32 58 36 35 ' + '31 26 2e 2d 41 3b 46 4c 57 36 2d 2b 43 0d 0a 4d ' + '4e 3d 2f 22 40 4a 54 40 36 4f 26 36 3d 53 4a 3d ' + '44 22 52 32 3e 4e 4b 3e 5b 55 2a 55 58 3f 42 2e ' + '29 49 38 58 57 57 31 43 49 36 31 46 4b 23 43 2a ' + '29 4d 29 31 2c 56 57 5e 27 4d 36 45 0d 0a 4d 21 ' + '44 47 2c 21 31 46 38 38 51 35 3b 58 43 54 44 36 ' + '2c 2c 38 60 35 4e 4b 3b 4e 36 4f 48 2b 32 56 31 ' + '32 32 3a 55 47 24 55 48 47 4d 39 36 4b 51 47 51 ' + '41 3c 42 33 34 3b 2a 54 42 44 35 0d 0a 4d 54 29 ' + '57 2d 4d 4a 49 3e 39 24 5c 47 4c 2a 43 2f 47 4d ' + '2b 46 56 56 32 30 4a 56 57 3a 4b 35 4b 3a 39 2b ' + '23 2c 5e 55 56 56 2d 29 59 4b 38 43 32 2d 4b 3d ' + '26 2c 3a 5e 51 3e 45 4f 5b 4d 0d 0a 4d 39 28 4d ' + '25 41 4f 27 37 3b 50 57 34 4d 3a 2b 25 34 3b 31 ' + '3c 4f 34 49 52 49 45 41 4d 2f 3a 39 52 4b 31 5b ' + '47 37 5f 55 35 36 56 33 36 4b 5b 44 57 2a 4a 5f ' + '2b 36 47 22 4d 57 26 5a 2d 0d 0a 4d 60 56 58 49 ' + '5e 4a 4b 4c 2b 51 32 40 3f 42 58 2d 43 3f 2f 4e ' + '36 4d 2e 22 38 4e 37 2a 36 53 2d 4d 3d 33 2a 23 ' + '54 59 46 5a 4d 4f 3a 4d 3e 54 0d 0a 4f 28 49 35 ' + '24 42 2c 4e 36 5e 36 4a 35 5d 0d 0a 4d 49 5c 2b ' + '4f 27 2b 27 26 4b 31 47 52 2f 54 54 25 55 5c 2c ' + '3b 38 51 3d 3a 3b 3d 53 60 3e 5b 3a 36 5e 3a 4a ' + '4a 32 2c 39 5c 3f 58 46 4f 5e 2b 28 3c 24 4b 53 ' + '35 51 29 5c 47 2e 5b 5e 2a 0d 0a 4d 5c 4c 49 55 ' + '3a 55 47 45 57 4a 4c 4c 37 5d 2f 2b 35 3c 43 55 ' + '22 34 32 48 4c 55 49 2f 24 26 37 3d 55 2b 42 4d ' + '4f 5e 46 2c 5c 34 44 3e 42 30 48 37 58 39 35 29 ' + '49 5f 4b 2b 26 5e 51 2f 0d 0a 4d 2d 38 4d 4f 3d ' + '30 33 48 2d 44 5a 3b 5e 3f 46 4a 51 27 2a 50 5b ' + '4d 4e 51 59 49 56 46 32 5e 34 3d 24 57 46 47 37 ' + '3d 55 3f 48 52 53 5f 60 28 3c 27 5d 29 51 36 5f ' + '48 5e 48 3a 41 49 32 0d 0a 4d 58 34 50 4d 45 22 ' + '23 5e 55 39 3c 4d 55 5a 48 35 31 55 3b 2a 60 53 ' + '43 26 23 46 46 58 4a 33 4c 3c 3c 44 48 5d 28 55 ' + '59 3f 42 3f 37 39 3d 30 5f 22 50 4b 23 27 26 33 ' + '50 57 42 4d 2e 57 0d 0a 4d 55 41 56 4d 2c 37 5d ' + '4f 23 28 38 42 32 51 60 5b 55 59 4f 55 58 41 60 ' + '4e 54 39 29 2f 3e 46 30 53 2b 29 23 2a 46 5f 60 ' + '2e 32 4f 57 25 22 30 59 2a 33 35 5f 38 4b 58 42 ' + '5e 2a 4b 21 5b 0d 0a 4d 52 2e 51 4c 58 46 44 4e ' + '37 58 2a 5e 25 4b 57 46 44 3a 42 2d 27 4c 48 5d ' + '2c 4d 54 5f 2d 44 43 29 46 3c 5f 2a 2c 47 4d 37 ' + '51 2e 5b 29 4c 5d 3d 44 4e 2f 33 5a 40 32 52 4d ' + '5f 50 60 55 0d 0a 4d 3f 3a 3b 21 2b 3f 36 4d 24 ' + '3e 58 43 2e 56 5d 24 31 26 54 3d 53 57 5b 35 34 ' + '56 4e 32 2c 5c 3c 27 51 3c 49 2c 27 33 3d 3f 4d ' + '2d 33 3e 5a 4d 4d 2d 55 26 26 2e 5b 4d 57 28 2a ' + '32 2f 43 0d 0a 4d 2e 2a 48 3a 5b 48 46 4d 3a 44 ' + '23 2d 27 26 4b 52 3f 5e 22 52 43 28 5e 45 3e 2b ' + '47 54 3a 21 3d 31 3f 54 3d 55 4f 3e 4c 59 57 45 ' + '2e 26 53 37 48 3d 29 3b 35 48 2b 35 5b 3e 2b 34 ' + '5b 54 0d 0a 4d 52 31 5f 2a 36 5c 55 35 4a 2b 2e ' + '3e 32 44 5d 30 42 36 34 54 52 5d 5e 26 4f 41 4a ' + '5e 5f 26 52 49 3e 5a 4d 3c 51 27 54 44 21 52 4c ' + '3e 33 59 5f 42 4f 27 3f 56 36 5a 5e 5d 4d 4a 60 ' + '4d 0d 0a 4d 3d 37 3e 34 48 2e 53 4f 5f 50 22 36 ' + '4f 32 36 58 55 46 59 55 4d 3b 3a 39 39 37 40 29 ' + '28 3e 36 33 4f 43 47 53 36 59 4b 5f 60 2c 23 37 ' + '25 4f 3d 4e 4d 45 38 51 53 30 31 28 22 26 31 2c ' + '0d 0a 4d 4c 3e 2c 54 32 3a 3a 58 45 30 51 4e 55 ' + '2a 3f 54 37 3b 3b 36 2f 41 3e 5a 46 42 4d 36 55 ' + '25 21 3d 25 42 54 32 21 5e 4b 4d 35 58 3a 41 3b ' + '5f 41 47 2d 52 40 3c 43 50 57 3b 5b 35 5c 5b 0d ' + '0a 4d 3f 58 3e 4d 35 55 2d 49 5b 3e 55 3d 2b 4a ' + '2b 60 2c 41 37 4a 21 4b 53 56 41 3f 24 3e 4a 36 ' + '46 4a 57 26 45 37 5d 4d 3e 37 3a 52 4f 4c 31 55 ' + '37 29 60 3b 59 4a 26 4a 2a 45 53 4b 31 5d 0d 0a ' + '4d 3f 42 4e 58 53 3b 37 24 4b 31 5e 48 32 3c 51 ' + '48 4f 43 29 5b 34 56 50 45 44 4f 2f 5d 44 36 59 ' + '33 54 4f 30 4f 24 3d 5c 3c 39 26 3e 30 3a 52 55 ' + '22 5a 35 49 3c 36 48 26 2a 3f 2c 44 38 0d 0a 4d ' + '2a 4a 58 5b 5f 50 23 3e 3a 50 4b 53 58 56 55 2a ' + '26 5f 32 38 3a 38 5c 35 4f 27 28 22 53 3b 3c 3c ' + '34 5b 4f 48 50 57 22 35 52 2f 3f 5a 57 2a 58 5e ' + '2a 3b 46 5c 4d 3d 4a 42 26 37 2c 38 0d 0a 4d 5f ' + '43 46 4b 24 5c 45 45 2d 3f 5c 60 5e 56 38 4b 34 ' + '52 53 2c 2e 52 43 40 26 4f 2c 3f 21 47 51 43 5c ' + '2e 3a 5f 4b 3b 51 30 49 3c 5f 43 44 30 4c 34 44 ' + '26 25 38 5c 55 5a 33 31 5b 52 51 0d 0a 4d 4e 54 ' + '2d 49 26 51 4d 37 3d 33 54 2d 50 31 32 4d 26 54 ' + '39 3c 5f 50 60 45 58 3a 45 3f 4c 4b 4d 5a 45 43 ' + '3a 42 31 30 3f 53 2e 26 53 5d 4a 3f 3f 30 37 55 ' + '54 54 3e 2d 32 42 26 25 57 2e 0d 0a 4d 60 5f 3e ' + '4c 56 5e 43 46 46 4d 30 48 41 4d 4b 4c 51 38 56 ' + '4e 48 52 33 5e 5d 3e 2c 42 5e 2a 3d 37 3f 36 59 ' + '5d 2b 55 3b 30 5b 4e 57 32 34 3b 28 2b 42 2a 2f ' + '22 40 38 51 52 3f 59 48 45 0d 0a 4d 5e 42 47 44 ' + '43 25 34 5d 4c 5d 28 55 5b 2d 42 5a 35 42 44 59 ' + '31 42 60 3e 58 26 2a 50 38 48 5d 32 3b 35 3b 34 ' + '51 2a 4f 58 3d 2c 4d 29 5e 5d 37 2b 4a 2a 5c 4c ' + '3f 41 56 32 2f 33 55 24 0d 0a 4d 54 5c 41 5d 51 ' + '59 5b 47 2d 31 28 55 55 38 49 21 3d 22 36 2f 2e ' + '5c 3e 48 43 27 5d 41 32 2d 38 4d 43 36 4e 59 46 ' + '4e 36 44 47 33 29 38 27 4f 56 25 37 3b 3b 35 3b ' + '42 53 5d 2c 4f 24 27 0d 0a 4d 42 3b 2f 26 2f 4f ' + '36 33 5c 30 5a 41 21 38 2b 29 3d 2e 23 2a 42 39 ' + '5f 2b 43 5c 55 43 33 3a 59 4a 5e 48 29 38 5a 43 ' + '39 56 39 42 54 5a 39 5c 27 3e 2e 4b 4f 40 5f 50 ' + '22 45 2b 5b 29 3c 0d 0a 4d 45 3e 54 3e 52 4e 3b ' + '42 3a 58 43 29 34 2b 26 57 3f 21 5b 54 4a 2c 4e ' + '52 47 23 24 2c 26 5b 55 32 54 53 34 3b 4e 5c 4e ' + '56 4d 48 5b 30 45 38 50 32 54 53 23 43 5d 4c 55 ' + '3b 4d 3f 51 30 0d 0a 4d 36 36 3a 59 4c 59 5d 46 ' + '32 3e 45 3e 2a 4a 5b 29 45 2d 31 35 25 46 50 4c ' + '31 3c 33 37 3b 49 2e 5c 54 52 3d 31 59 53 59 5b ' + '35 48 37 4e 46 5a 2b 25 38 22 3c 24 46 3e 37 2a ' + '2b 4e 5b 2a 0d 0a 4d 55 3e 35 54 27 58 42 4c 38 ' + '2f 43 5e 3f 33 48 33 2b 23 2e 55 4d 4e 3a 2e 3b ' + '40 24 41 43 36 57 3e 30 2b 3c 56 5d 55 38 28 54 ' + '48 5d 38 5b 54 38 5d 55 28 48 39 2b 45 5d 51 28 ' + '0d 0a 54 23 31 0d 0a 4d 29 22 4c 43 37 3d 51 4e ' + '43 31 5d 49 59 58 56 55 47 30 4b 3b 30 3a 52 56 ' + '46 2d 3e 52 39 3c 58 43 57 2f 51 40 55 5a 3f 33 ' + '2e 46 57 44 4c 21 52 55 4f 60 4a 59 2f 53 44 3d ' + '52 3f 59 4b 0d 0a 4d 2b 4d 59 5d 23 47 35 3b 50 ' + '36 33 5f 60 28 5c 60 5c 32 29 5b 33 32 3d 26 47 ' + '3b 56 41 3b 3a 39 3d 56 29 39 5b 39 52 36 34 40 ' + '23 27 38 43 5a 54 5d 3d 32 24 2c 4a 52 4f 3b 51 ' + '52 37 23 0d 0a 4d 40 40 24 43 2f 2f 3a 48 4d 39 ' + '2b 50 53 27 55 24 45 5f 23 38 57 21 53 56 5e 50 ' + '4a 3b 4f 35 4b 36 54 5d 23 55 5b 28 2e 60 33 55 ' + '28 4f 38 5e 3a 35 48 3b 44 58 4c 50 24 55 3c 2d ' + '3c 57 0d 0a 4d 2d 48 50 42 2d 50 29 42 39 24 25 ' + '3a 2d 47 60 39 27 28 38 33 51 4a 21 47 3e 2f 3a ' + '21 32 47 2e 42 5a 41 5c 32 4a 45 4b 3a 2d 23 3c ' + '4b 24 37 3d 40 4e 2d 59 2e 3e 5d 37 2b 4a 2f 37 ' + '5b 0d 0a 4d 29 59 45 43 41 36 3a 56 24 37 36 40 ' + '26 36 50 21 47 42 40 46 37 45 5e 43 28 5e 29 28 ' + '4b 4a 55 41 4e 2b 4d 34 3e 3e 57 21 29 58 59 4b ' + '29 4d 5b 32 56 55 2e 53 24 53 36 54 39 38 47 60 ' + '0d 0a 4d 22 43 44 59 2d 3e 44 4d 5d 36 4c 2b 5b ' + '32 53 3b 4c 39 3b 2d 39 2e 40 5f 42 3e 21 46 4a ' + '45 45 38 4f 49 2e 48 31 2e 24 2b 36 50 35 45 23 ' + '2b 56 53 58 2d 33 2a 46 53 37 25 2e 34 35 3d 0d ' + '0a 4d 54 3e 3a 55 37 58 37 37 5c 37 2a 55 4e 5b ' + '51 4a 25 29 30 2d 51 59 2d 38 4c 4e 45 3a 4c 29 ' + '25 42 4d 38 46 46 44 44 28 60 35 21 44 55 5b 3a ' + '5b 26 48 3f 5b 31 2c 43 40 32 30 25 43 4d 0d 0a ' + '4d 2f 5c 46 4d 37 33 24 47 40 4f 26 45 4d 38 51 ' + '5a 49 37 22 4d 5d 2c 5f 32 4e 3e 3f 49 5c 3c 4e ' + '54 3d 4c 2f 36 59 24 3f 2c 4b 52 55 55 3a 50 47 ' + '44 32 3e 54 45 2b 29 50 53 60 3d 42 2c 0d 0a 4d ' + '54 42 2e 5e 35 55 26 26 51 5e 5d 3f 39 3b 39 26 ' + '41 2c 5c 36 48 56 5a 33 22 5a 2f 34 36 26 32 2c ' + '5f 32 4c 3f 58 42 5e 26 2d 2b 55 3b 35 48 31 3a ' + '56 54 3d 4a 40 37 26 55 31 40 3c 23 0d 0a 4d 46 ' + '4e 3a 3f 48 28 5f 31 55 58 5f 5a 44 4f 59 3d 47 ' + '53 50 57 32 27 2f 2d 2d 43 4e 2c 27 4f 37 4a 4b ' + '2b 5e 53 3e 51 4f 5b 22 36 36 57 4f 57 24 44 31 ' + '2a 4c 49 3f 47 28 5b 55 44 5a 59 0d 0a 4d 5f 39 ' + '59 5c 31 5a 34 40 44 40 44 32 59 43 22 5b 40 60 ' + '2c 44 43 25 3c 3c 4f 31 53 31 57 38 5f 37 38 49 ' + '3f 39 30 32 59 50 3e 2e 5d 26 39 53 5a 41 5a 4a ' + '50 4b 59 5b 4a 50 45 35 2b 4e 0d 0a 4d 25 58 59 ' + '36 5c 24 34 48 3a 48 4e 54 2c 57 32 36 5e 4d 38 ' + '33 50 52 31 4f 22 3c 29 3b 31 5a 28 53 3d 31 28 ' + '3b 47 4f 42 42 3e 58 60 27 5b 35 59 58 3a 47 26 ' + '60 37 57 4b 4d 5f 35 34 4f 0d 0a 4d 4a 3a 27 41 ' + '37 35 40 3a 51 45 24 54 4c 57 41 2e 56 2a 59 4b ' + '47 21 5b 5c 35 41 2f 4a 3a 47 2a 54 2a 5a 40 3f ' + '3a 24 5b 34 47 24 3b 2d 58 57 36 35 58 4a 23 3c ' + '4b 57 57 3c 35 59 5d 3b 0d 0a 4d 52 3c 40 58 37 ' + '5b 59 48 37 3a 5c 3d 41 43 49 25 35 51 21 4e 53 ' + '3c 3e 5b 26 57 4f 53 35 3a 3b 34 28 44 23 39 39 ' + '3c 3e 3a 53 21 3b 37 34 42 4a 54 44 43 2a 35 5e ' + '45 2d 33 33 37 3c 47 0d 0a 4d 2e 59 4d 55 2d 49 ' + '23 34 54 5f 48 3b 29 4a 37 3f 27 35 5e 55 35 59 ' + '2d 30 46 44 3b 48 37 3b 35 56 2b 33 44 33 2f 33 ' + '51 35 46 26 50 37 5a 34 45 30 49 53 48 51 23 5e ' + '2e 45 56 39 3b 3b 0d 0a 4d 4e 5d 55 26 46 47 52 ' + '4e 51 35 56 3a 4d 58 36 4a 5c 4d 4d 49 52 30 2b ' + '43 56 5c 54 46 48 5c 41 37 4c 50 31 38 2a 43 3b ' + '4d 4f 53 35 38 25 46 48 34 5d 2f 5c 60 25 3a 58 ' + '40 53 47 49 48 0d 0a 4d 51 22 2f 59 49 4d 2c 2f ' + '54 43 51 2b 52 3f 22 4d 40 4c 43 2f 5e 25 4e 36 ' + '39 4e 25 37 4a 3a 4c 4f 34 4f 42 2b 32 60 41 4d ' + '5d 2c 4d 59 58 38 5f 3b 50 2a 5c 46 25 33 57 5e ' + '44 46 5b 5d 0d 0a 4d 32 54 54 2b 45 3e 45 4a 5d ' + '41 2b 5f 60 26 2f 44 59 5c 5e 2d 30 2d 2e 55 55 ' + '57 34 4b 32 21 58 38 2f 31 45 21 5e 3a 30 5d 35 ' + '23 3e 57 5e 4c 37 3c 46 58 33 37 34 32 5f 5f 60 ' + '2b 3b 3d 0d 0a 4d 2b 35 47 36 4c 3e 5e 3c 2b 5c ' + '4e 5b 57 35 5b 48 46 55 33 30 28 2b 31 27 42 44 ' + '44 51 47 3e 4f 3e 45 5f 28 54 41 34 5c 3f 26 31 ' + '58 4e 56 44 46 4c 5b 41 37 3b 3c 5b 4b 5b 46 5e ' + '3a 4f 0d 0a 4d 3b 36 28 4d 3d 3d 54 49 39 48 33 ' + '5a 3d 58 25 5a 55 3f 50 56 5a 4f 2c 37 3d 42 45 ' + '51 2a 53 3b 4d 4c 47 4e 4a 28 49 5d 32 54 54 4e ' + '55 46 28 43 4e 5d 53 26 4a 52 31 45 2a 31 36 2b ' + '43 0d 0a 4d 26 2f 27 5e 29 48 52 51 3e 42 3f 33 ' + '46 56 5b 5f 60 2e 46 44 3e 45 26 5f 4e 37 49 36 ' + '4c 4a 5b 4f 27 45 3d 49 29 56 39 27 3b 5d 35 36 ' + '38 3f 36 47 2a 2d 5a 52 4d 26 57 4d 56 55 37 28 ' + '0d 0a 4d 52 43 40 59 32 5c 23 30 31 28 55 23 2a ' + '52 5f 57 3a 34 5a 3b 58 46 35 2f 45 49 45 4d 26 ' + '52 5b 38 57 57 38 37 59 46 4a 55 3b 3a 3f 29 3e ' + '29 2a 54 35 53 23 25 5a 38 57 58 3c 5d 31 5f 0d ' + '0a 4d 3a 4b 45 2b 30 59 51 45 26 36 53 2b 4e 2d ' + '4a 31 4d 5a 47 5d 56 48 4e 2b 2e 2a 32 57 5f 50 ' + '22 25 4e 5a 3a 4c 37 3d 4e 29 48 53 22 53 3c 55 ' + '36 46 5f 26 31 31 5e 47 26 52 5b 3a 44 37 0d 0a ' + '4d 3f 33 2c 5d 41 0d 0a 3c 36 50 3a 2e 2e 59 46 ' + '41 42 3b 4a 5d 2d 36 5a 36 4a 4b 38 25 49 4f 42 ' + '26 28 4c 5e 58 21 4a 55 5b 4a 5c 52 42 30 52 56 ' + '51 39 35 5d 53 3b 3a 52 4d 23 3d 31 5c 32 29 0d ' + '0a 4d 26 2f 5c 60 41 49 29 5c 55 24 5e 29 25 2b ' + '29 2d 31 44 3e 5d 3a 2b 55 38 40 48 39 45 48 2b ' + '42 2b 3d 2a 43 5f 60 2a 3f 3d 33 58 52 51 28 35 ' + '3d 48 48 3b 45 55 38 45 3d 4f 29 59 5a 3a 0d 0a ' + '4d 55 43 5c 32 49 4e 47 35 21 56 57 21 2e 53 4f ' + '36 49 3b 26 2a 59 21 32 3d 25 3b 3d 53 36 34 43 ' + '4b 5b 4e 55 36 38 49 45 32 34 3b 2e 55 34 3b 2f ' + '2b 37 31 3c 3b 32 60 52 24 50 33 4e 46 0d 0a 4d ' + '36 5b 3b 4e 60 2a 45 3b 2f 35 3b 2e 2f 3b 26 52 ' + '33 31 24 43 40 3c 4d 32 48 5b 41 5c 45 3d 59 5a ' + '4c 55 48 50 37 39 56 52 2a 27 50 3c 3c 3f 4f 33 ' + '32 2c 39 53 39 44 37 44 35 59 28 39 0d 0a 4d 27 ' + '32 57 44 31 42 3c 5d 4e 46 46 3a 3b 4a 38 2a 31 ' + '3f 5b 30 4d 51 28 26 51 54 4e 4f 35 42 4d 46 2a ' + '5b 3c 2e 4f 4a 2c 27 34 5c 54 42 5c 32 56 44 4e ' + '2f 35 56 29 4c 37 48 37 27 55 4b 0d 0a 4d 31 4a ' + '56 31 43 45 50 45 3b 2c 33 34 4f 50 32 53 4c 3b ' + '3e 29 34 5e 52 54 4e 50 5f 21 57 3c 54 54 31 47 ' + '47 31 4c 3b 21 55 3e 3a 56 38 38 3b 25 29 22 54 ' + '52 4b 4f 2b 34 4e 57 54 5f 33 0d 0a 4d 59 43 27 ' + '28 4b 4b 26 56 30 23 5d 3e 59 53 33 3a 23 2b 34 ' + '59 3b 24 33 31 57 35 47 2e 26 57 48 5c 36 54 3c ' + '42 45 50 5a 4d 25 2d 3c 22 2e 32 28 2a 5b 2d 43 ' + '3d 4d 5a 3a 55 5b 2b 32 5f 0d 0a 4d 36 41 3a 57 ' + '23 4e 5e 3c 5f 50 60 35 35 3f 58 32 44 57 44 31 ' + '32 2c 57 3f 4d 5e 55 33 3b 2b 43 25 2f 51 2e 3a ' + '38 28 30 5a 50 4e 54 30 3b 21 56 23 51 32 58 4d ' + '34 4c 21 3d 2c 48 3f 22 0d 0a 4d 49 51 4c 2f 4e ' + '4a 53 3b 5a 37 4a 34 3c 27 59 3c 52 28 3c 41 37 ' + '24 41 58 2e 3a 49 3a 53 49 28 5f 2d 43 2b 56 51 ' + '4e 25 2b 49 4f 43 5c 58 37 4e 3a 3a 4c 52 47 25 ' + '30 3e 59 26 37 5c 32 0d 0a 4d 37 25 4b 29 2e 27 ' + '42 44 30 4d 4e 5c 35 5a 47 58 25 55 46 32 55 44 ' + '40 45 36 33 4c 56 32 2d 55 3e 26 37 30 3b 55 50 ' + '5c 48 41 3d 55 22 59 38 41 3a 5d 35 48 5f 50 5d ' + '4a 22 50 29 2b 25 0d 0a 4d 29 26 4e 51 4c 58 2f ' + '3e 48 3d 4d 46 54 28 51 3c 3b 3f 31 4a 3f 56 4f ' + '36 5c 55 4a 44 2f 51 53 48 5d 50 48 34 5b 25 4e ' + '28 32 57 32 51 5c 24 23 5d 56 4a 5f 5c 24 5f 26 ' + '36 42 57 4c 45 0d 0a 4d 55 2e 2f 30 26 48 4e 2c ' + '45 27 5d 4e 3a 4c 37 3d 41 3a 5a 49 5c 2c 51 5a ' + '25 4b 60 39 28 49 2d 48 31 48 4e 50 2a 38 3b 47 ' + '5b 3d 2d 3e 2a 5e 28 2f 5b 26 2d 35 54 59 36 4f ' + '4f 41 57 35 0d 0a 4d 54 38 43 27 4e 3b 2b 39 37 ' + '4f 36 43 33 44 43 22 2c 27 22 3e 47 58 47 56 56 ' + '53 55 29 2b 57 33 25 44 32 56 4d 22 39 31 4d 44 ' + '3a 2c 3c 4a 3e 2a 2e 5f 4f 5c 60 34 21 21 27 3c ' + '3a 3d 2e 0d 0a 4d 38 59 58 45 52 38 59 33 41 36 ' + '60 4b 58 5f 5c 60 56 34 3a 55 4a 5e 41 3a 4e 5e ' + '40 5f 24 5a 32 30 2a 5b 27 54 39 49 2e 25 38 43 ' + '5f 5c 35 5d 45 55 3d 48 58 5b 3e 33 2c 29 39 39 ' + '2e 60 0d 0a 4d 5a 23 4d 35 35 33 49 46 34 49 2e ' + '33 59 2f 48 26 50 43 41 47 46 3b 34 2f 31 41 25 ' + '53 28 48 5d 3a 2d 41 54 59 51 58 4a 41 3e 36 3c ' + '2e 47 37 3c 2d 5b 25 49 3d 48 53 4e 50 5d 30 5e ' + '47 0d 0a 4d 5d 2a 54 3b 30 33 31 50 50 33 29 24 ' + '4b 5d 28 23 60 23 44 5c 3f 5a 55 48 26 58 4d 4b ' + '46 2d 5d 2d 44 43 28 52 4f 31 2c 21 52 23 5d 53 ' + '5e 5d 34 58 54 24 4c 53 5e 43 52 57 51 23 23 3e ' + '0d 0a 4d 3a 41 4a 5d 4d 3d 32 60 22 51 3a 2f 2a ' + '2a 4f 4d 37 5b 35 59 53 35 3f 41 56 5c 55 26 5b ' + '45 4d 38 59 4d 45 4c 52 5c 44 47 4d 51 37 4a 5d ' + '30 4e 5f 5d 47 53 4d 49 2d 59 27 2b 45 30 2f 0d ' + '0a 4d 33 45 27 4c 29 53 5f 5c 35 48 5f 41 38 26 ' + '4d 5f 51 3c 26 5d 45 28 5a 4c 3f 37 5a 34 47 31 ' + '32 45 3e 56 43 59 2e 47 5d 46 4d 51 49 55 51 27 ' + '3d 5a 35 4b 3f 49 57 27 4a 23 2e 29 2e 31 0d 0a ' + '4d 57 4b 5a 31 49 34 34 42 51 49 2b 3d 30 51 2f ' + '2f 23 45 33 28 40 5d 50 53 59 49 49 4d 2b 26 32 ' + '55 25 52 28 49 48 59 2e 36 2e 21 57 4a 4f 3a 51 ' + '52 56 49 3e 2e 29 57 2a 39 5b 2c 3a 35 0d 0a 4d ' + '28 56 45 46 3e 33 35 34 36 3b 5c 37 55 4f 3b 3e ' + '47 38 51 2d 22 39 22 22 22 21 40 35 3f 4d 5f 51 ' + '34 46 53 3d 25 27 2c 4b 2b 43 2b 43 29 27 5b 35 ' + '46 4d 4b 5d 5b 3b 32 25 39 28 48 57 0d 0a 4d 42 ' + '30 3b 3e 48 35 51 55 32 36 3e 2c 4b 27 46 57 23 ' + '3c 43 50 31 51 58 4a 47 4c 59 46 47 43 5a 5b 2a ' + '43 33 52 56 47 51 28 5c 2c 5c 34 4a 56 53 43 21 ' + '33 27 22 44 39 4b 54 2c 24 5d 4d 0d 0a 4d 2a 5c ' + '44 2d 51 39 36 53 51 3c 3d 36 57 47 27 56 4b 25 ' + '4f 3d 31 5f 26 30 4b 29 3a 5e 44 55 57 24 3d 4b ' + '3e 4b 5c 57 5b 55 34 54 5b 58 53 4c 59 49 56 4d ' + '2b 4a 54 2a 2d 26 5f 49 3b 44 0d 0a 4d 27 3c 55 ' + '2b 56 52 4d 51 35 5f 39 5a 27 35 3d 2b 54 4a 58 ' + '4c 36 4e 48 2b 3c 45 35 3b 23 48 31 53 43 5a 42 ' + '4c 42 25 3d 2f 45 54 51 3b 31 28 2b 40 29 25 55 ' + '31 49 43 4d 44 59 4b 37 42 0d 0a 4d 47 37 54 33 ' + '2b 3b 2f 45 47 37 41 36 2f 25 21 3b 0d 0a 52 36 ' + '5a 33 44 53 51 4c 24 58 33 3c 4f 57 2d 2f 42 4b ' + '29 3c 46 54 33 49 45 4a 5a 31 2a 5c 34 2e 56 21 ' + '43 4d 60 51 52 57 57 2d 2a 55 0d 0a 4d 35 4b 51 ' + '5d 34 40 44 42 25 51 27 28 59 26 56 57 2f 22 47 ' + '60 59 2e 2a 4f 36 4d 43 2f 25 2e 42 57 2d 55 29 ' + '27 5a 49 2f 49 5d 37 32 21 58 5f 46 4b 25 4a 44 ' + '3c 5b 2f 24 54 44 43 3a 49 0d 0a 4d 38 24 4e 60 ' + '51 59 2a 5d 51 35 2e 44 31 2b 44 54 3e 34 4f 2f ' + '41 56 51 55 3a 58 45 55 49 48 27 41 55 2e 56 3d ' + '41 2b 4d 26 27 60 53 58 4b 3a 4e 4d 2e 36 55 4d ' + '4b 3a 5a 54 5e 58 3a 3e 0d 0a 4d 56 45 29 23 4e ' + '59 52 52 46 4d 4c 32 22 32 2a 2f 35 38 28 60 4b ' + '2f 45 3b 4a 2f 27 3f 47 47 28 48 24 4d 2b 36 54 ' + '45 45 56 2f 5f 5c 60 49 45 53 40 58 2f 39 26 5b ' + '3c 3f 53 34 52 48 54 0d 0a 4d 43 2d 55 4c 5c 55 ' + '3d 36 45 5a 3b 45 39 2b 3a 5a 56 32 5c 5c 24 5e ' + '5a 4d 33 32 3b 3e 3e 59 32 32 22 32 26 55 36 58 ' + '60 52 4b 38 59 3b 42 4b 3a 36 52 29 3c 37 2d 47 ' + '2a 4e 58 4c 32 55 0d 0a 4d 4f 2a 4f 54 2f 3b 46 ' + '44 57 4c 37 59 33 53 36 34 58 32 5d 4d 52 2d 52 ' + '39 5b 43 5f 4c 35 2b 49 26 4a 52 56 5f 24 49 3a ' + '43 2d 3f 36 22 31 51 4c 54 23 48 46 35 3e 28 3f ' + '4a 27 54 25 34 0d 0a 4d 5b 52 54 46 2e 49 36 3c ' + '33 29 5e 37 2d 26 5c 40 5e 47 42 42 5e 2b 27 47 ' + '3e 5a 4d 2b 56 51 4c 2b 46 58 3e 34 58 38 31 2b ' + '44 39 51 52 3a 2a 55 5d 30 3a 5d 3b 56 5c 5c 5e ' + '5e 36 26 29 0d 0a 4d 45 35 3c 5d 42 56 22 30 3a ' + '26 2a 32 3b 3d 4c 4b 36 5e 46 5e 47 28 5d 52 36 ' + '2c 35 59 26 5b 28 2c 3d 46 60 4b 3c 44 45 47 56 ' + '2b 3c 42 5c 4d 40 53 4a 3d 50 57 3c 5c 59 25 3e ' + '46 4c 5b 0d 0a 4d 2e 55 2d 4c 4e 5e 54 5d 31 50 ' + '2c 41 4d 4e 33 47 25 2e 43 54 53 33 55 26 31 49 ' + '52 47 43 60 23 29 30 4a 26 46 4b 56 3f 2f 4d 33 ' + '54 37 32 3b 56 51 44 31 59 54 2c 50 2e 3d 4e 3e ' + '51 4b 0d 0a 4d 24 4d 5d 2a 5e 2a 2d 2f 45 30 56 ' + '4a 4d 3f 56 36 22 52 46 30 3b 41 43 26 3a 5e 50 ' + '4b 49 5d 44 26 3d 45 54 4e 27 3c 57 3c 45 2f 2f ' + '3a 41 4e 3b 52 50 4c 48 25 43 4e 29 58 2b 3e 2c ' + '23 0d 0a 4d 22 48 23 43 28 49 32 48 56 4e 23 5e ' + '4b 39 5c 41 33 36 48 2b 42 38 56 44 44 37 49 37 ' + '2c 31 5a 54 51 43 46 4d 45 5b 5c 31 4a 43 2b 21 ' + '40 5e 22 40 4b 30 55 5b 31 5b 2f 37 4d 34 2d 4f ' + '0d 0a 4d 49 5e 45 53 36 4c 41 29 53 3d 5e 47 41 ' + '36 5b 5c 59 4b 52 26 49 5a 2d 5c 31 5f 21 5e 49 ' + '28 5c 4d 50 2b 5f 33 59 3e 2c 44 5b 42 46 23 59 ' + '4b 2e 33 3a 2b 36 27 57 25 58 4e 43 54 4e 44 0d ' + '0a 4d 57 2c 4e 48 5a 5f 25 3b 37 41 30 30 2d 47 ' + '54 56 27 3f 5b 34 3c 5d 54 3b 37 36 25 32 32 24 ' + '4e 4a 24 43 22 43 47 27 55 4b 25 54 3f 35 48 3d ' + '33 4f 30 5d 46 46 56 3e 55 3f 4e 4f 38 58 0d 0a ' + '4d 5f 50 23 53 35 47 58 4b 5e 29 4b 3f 32 2d 30 ' + '42 55 2e 22 29 3b 43 55 21 4c 39 60 2c 44 3c 60 ' + '24 54 47 2d 2b 39 53 52 40 55 58 5f 39 5a 4a 52 ' + '4e 2d 25 4e 4b 3a 59 3a 50 33 38 57 4a 0d 0a 4d ' + '3b 39 40 4f 3c 2d 59 53 35 41 4b 33 55 58 3f 33 ' + '3a 5c 2a 3b 31 4d 26 36 59 51 37 45 3f 41 4f 58 ' + '46 5e 27 59 38 59 39 28 3f 33 40 3a 58 38 4e 58 ' + '2f 26 32 3a 57 4b 46 5a 54 5e 35 30 0d 0a 4d 28 ' + '5b 4e 2b 55 2f 3d 5b 4a 45 52 34 41 4a 2b 41 56 ' + '39 36 4b 5a 25 49 5a 21 49 39 3b 3a 26 5a 39 3f ' + '3a 54 42 59 2f 25 3e 33 55 46 27 58 3f 4d 3b 31 ' + '4b 46 5d 54 52 26 2a 30 3e 55 2d 0d 0a 4d 46 2c ' + '5f 36 4f 31 3a 57 5c 37 3a 2d 48 5c 2f 36 39 3b ' + '4a 5a 27 60 35 2e 34 52 23 59 4b 59 47 4b 3d 5b ' + '3e 3a 5d 3f 26 59 4e 55 56 2b 58 43 27 38 35 41 ' + '44 52 51 40 3d 3e 23 47 44 3d 0d 0a 4d 3d 27 47 ' + '3d 3e 56 3a 43 4a 34 57 49 36 54 3c 25 4a 4b 27 ' + '38 4c 38 51 51 46 48 4d 5b 21 35 51 54 3c 2b 36 ' + '55 27 3a 48 4f 52 5c 55 3a 43 41 51 43 60 58 2f ' + '3f 2d 3e 37 44 52 5c 49 27 0d 0a 4d 4d 58 48 33 ' + '43 27 3b 2c 31 2d 2f 34 47 45 3c 38 4a 56 45 44 ' + '46 2f 39 57 4b 37 36 23 44 59 60 49 42 56 5e 33 ' + '5d 2c 35 44 53 3d 2d 26 36 2b 25 3f 3a 25 37 26 ' + '3a 3c 45 4a 46 2e 31 36 0d 0a 4d 44 2b 3f 48 2a ' + '5f 36 46 29 3b 40 23 29 5b 54 4e 31 3a 4b 4c 53 ' + '45 4d 41 51 40 3d 43 33 41 23 40 5d 41 5d 2a 4e ' + '41 60 23 56 48 50 42 60 47 42 45 2d 42 5b 39 33 ' + '32 57 5a 4a 38 44 3e 0d 0a 4d 23 40 2b 35 54 4b ' + '53 50 4f 3e 45 4a 49 5b 44 3c 5f 32 41 48 3a 33 ' + '24 22 60 38 2e 3a 47 54 2c 59 53 56 4a 51 26 41 ' + '28 53 33 4d 4f 3f 5a 24 55 2c 45 4c 2e 42 45 5a ' + '38 53 4d 48 4f 32 0d 0a 4d 26 33 51 35 40 31 59 ' + '3c 54 30 43 51 44 46 42 50 4c 5e 23 31 5a 3a 4a ' + '2e 54 3b 2d 4e 3a 4a 55 55 25 24 4d 53 5a 34 42 ' + '5b 35 57 3b 3a 3c 56 4b 39 3f 5c 4e 60 5f 50 21 ' + '59 4a 49 57 34 0d 0a 4d 54 44 5c 51 46 3f 3b 4e ' + '23 3b 4a 5d 56 31 5c 4e 4c 43 43 59 31 2f 33 31 ' + '3f 23 2d 43 27 23 27 3c 4b 2f 2e 52 2e 4b 3b 4e ' + '3f 46 4a 5b 3b 3a 2a 5c 4e 44 32 3a 41 3b 57 24 ' + '2a 3b 23 54 0d 0a 4d 51 4e 3e 33 54 55 59 4e 50 ' + '4f 59 4c 46 2e 36 58 45 51 5c 4a 3b 4e 46 4d 52 ' + '2b 36 0d 0a 2b 42 2a 51 5f 22 49 25 60 54 39 5d ' + '53 58 5a 4a 2d 51 2c 57 44 37 2f 3c 32 4c 54 33 ' + '3b 4d 51 49 31 0d 0a 4d 32 2f 3f 55 3b 45 27 5d ' + '35 27 29 2f 4e 3b 3c 4e 5b 3b 34 48 28 52 5a 4d ' + '2d 28 4b 29 5b 4a 55 5a 2c 29 32 5c 4b 2a 3c 4c ' + '35 49 5a 5e 5a 37 3a 56 55 4f 3b 36 5b 21 4a 5e ' + '42 50 5a 3d 0d 0a 4d 23 2b 5e 26 4d 50 3d 4e 5b ' + '38 42 5d 32 55 38 55 32 3b 31 4b 2f 32 40 54 23 ' + '56 24 44 5b 4b 4e 22 5f 2e 26 4b 50 5d 55 5e 3f ' + '3e 4c 55 4d 3b 2c 53 2c 53 3b 35 43 36 4c 27 59 ' + '3b 2e 5a 0d 0a 4d 24 4e 2c 33 57 2d 4d 4a 26 42 ' + '5a 4c 41 44 2e 52 54 43 43 3b 40 2f 54 4c 58 5e ' + '45 3a 54 26 47 50 30 3a 3a 4c 59 42 30 42 37 56 ' + '2d 59 56 59 4b 59 56 46 42 3a 4f 2a 42 4f 5e 24 ' + '3e 2d 0d 0a 4d 2d 52 5b 36 44 25 3e 4f 5e 23 29 ' + '3b 5e 26 58 45 4c 2b 5a 34 32 2b 3b 48 32 40 46 ' + '3b 43 5e 2a 53 3c 4b 27 25 3c 47 4f 4c 52 5d 37 ' + '42 23 37 39 44 42 3b 3a 2a 49 50 4f 55 3b 32 4d ' + '3e 0d 0a 4d 4e 4f 3d 2b 43 4e 29 2f 35 44 34 28 ' + '37 5c 29 56 4a 3d 2e 4d 2b 3e 50 46 4e 29 26 4d ' + '58 59 48 59 2e 51 44 27 4c 2f 56 4b 39 52 4e 29 ' + '23 41 26 24 4d 47 44 36 41 3d 48 5f 34 3a 56 45 ' + '0d 0a 4d 35 2d 53 2b 4e 39 3a 5c 4d 39 32 29 23 ' + '5c 30 2c 3f 49 29 37 4e 5d 37 5e 28 59 38 3d 36 ' + '32 21 28 2b 3f 54 24 5e 35 41 51 37 41 3d 34 4e ' + '38 29 3d 3e 45 46 40 35 25 31 46 57 26 44 53 0d ' + '0a 4d 46 46 4e 36 31 32 42 3e 5e 4d 52 53 2a 4c ' + '47 42 46 2e 43 3b 52 52 55 32 54 52 37 55 3b 39 ' + '22 4b 3d 2e 57 3d 35 5d 2d 5e 5f 50 21 4f 25 3a ' + '38 43 3a 3c 4d 44 2a 26 56 5b 43 31 4b 5f 0d 0a ' + '4d 60 2c 2d 26 5c 4b 51 31 60 5c 5d 4e 2a 3f 22 ' + '44 3c 42 21 46 3b 43 3d 37 31 35 26 2e 31 4d 47 ' + '30 38 57 25 36 5b 5b 3e 46 42 50 5b 60 4c 2e 22 ' + '4d 3c 44 3c 36 5d 5c 4c 56 35 5d 45 3a 0d 0a 4d ' + '29 42 41 24 2e 5b 2e 36 58 5b 3f 4f 33 48 3b 57 ' + '54 35 38 24 45 2b 24 23 2f 25 36 58 38 46 3d 23 ' + '5b 3c 38 53 34 56 5b 4c 54 3c 3f 4a 28 38 50 52 ' + '5b 52 3f 59 4a 51 22 43 21 60 59 37 0d 0a 4d 3a ' + '48 26 31 5f 43 33 3a 29 3c 4b 5a 2c 43 34 4b 32 ' + '5e 39 27 45 35 3e 2e 57 5c 55 40 51 36 37 51 22 ' + '44 40 56 60 4c 5b 2d 47 5f 5c 60 4b 37 54 2a 5b ' + '56 2d 26 29 2e 3c 5f 46 27 3a 2f 0d 0a 4d 56 49 ' + '24 34 3c 54 2d 51 25 47 3a 37 5f 2a 28 5f 50 4a ' + '46 44 51 2e 33 59 34 53 26 54 43 34 5d 38 54 50 ' + '25 39 4b 3f 3e 5b 5c 3c 23 5f 60 21 4b 37 4d 5f ' + '43 29 38 2e 5c 22 49 28 35 29 0d 0a 4d 56 4e 2a ' + '4f 36 34 24 3a 56 4c 2c 5b 25 27 44 39 59 55 3c ' + '27 5d 3e 2a 53 49 5d 26 4c 49 5b 2a 29 59 55 51 ' + '3c 3f 41 30 60 57 5e 4d 2b 40 47 54 37 29 51 33 ' + '54 36 5d 2f 5e 29 4d 2d 46 0d 0a 4d 44 42 33 35 ' + '38 35 36 28 58 3d 43 26 2f 59 25 2c 55 47 58 21 ' + '54 5b 37 24 46 55 33 58 2b 5e 28 60 4d 5b 4e 2b ' + '52 30 33 33 39 21 3b 52 49 36 4c 23 35 3f 41 41 ' + '44 43 44 44 4d 39 40 3f 0d 0a 4d 33 2c 38 2a 39 ' + '5c 27 4d 37 46 5b 41 2d 36 54 43 35 39 29 2b 36 ' + '5b 4e 2b 36 3b 55 35 5d 30 28 3c 22 49 5c 45 54 ' + '30 5c 24 39 2e 5a 56 3f 31 3f 41 32 51 55 5a 51 ' + '36 2e 51 55 3a 56 41 0d 0a 4d 42 42 31 32 44 5c ' + '44 40 51 4e 38 3f 32 4f 31 37 35 5b 39 3a 3f 3a ' + '32 42 55 4d 3f 35 38 60 41 4e 2c 47 4c 3e 31 37 ' + '43 3f 40 4f 58 5d 57 28 5e 47 5f 25 23 22 3d 36 ' + '38 4b 5a 49 59 28 0d 0a 4d 2f 5b 55 5b 47 34 5b ' + '2a 60 51 2d 3c 36 34 52 52 50 47 56 45 33 47 43 ' + '44 3c 54 31 44 46 51 59 27 2a 2c 3a 39 26 43 37 ' + '2d 4b 3c 45 25 2c 32 52 4a 34 53 43 26 32 2c 42 ' + '47 32 57 4c 45 0d 0a 4d 4f 2c 52 30 29 4e 43 2f ' + '40 5e 2a 53 28 57 4c 4b 24 51 30 56 5c 5c 3c 3d ' + '59 28 47 2a 44 5d 4a 39 3a 3f 42 23 3c 4e 43 32 ' + '51 2d 26 2e 2d 52 46 4d 5d 5d 26 2c 37 3f 3f 31 ' + '37 55 47 33 0d 0a 4d 3b 37 36 39 21 25 3f 29 43 ' + '47 49 45 27 4f 30 5f 3a 47 36 2c 5e 4c 3a 2b 3c ' + '51 3a 3d 3c 42 3e 5b 4c 47 37 5c 4a 35 4e 3e 57 ' + '55 2d 30 5f 50 22 2d 3a 5b 41 4d 50 21 28 22 5b ' + '3b 57 33 0d 0a 4d 4c 2c 39 5f 5d 4a 5d 29 2e 5b ' + '56 5e 47 49 29 29 27 5a 54 38 3b 28 34 5c 47 27 ' + '46 49 38 59 49 31 45 3b 29 4d 2d 38 3d 48 55 4d ' + '58 4f 31 56 47 52 4f 3c 24 35 2a 57 44 47 4a 46 ' + '2b 54 0d 0a 4d 46 60 5b 5b 5c 34 42 2f 33 5d 2f ' + '4e 39 29 2b 5f 60 24 5a 39 28 28 59 2e 58 38 58 ' + '50 33 35 51 54 4c 43 49 44 55 50 44 4c 4c 4b 59 ' + '5d 2c 21 23 47 4a 49 36 32 5a 4e 5a 23 47 4f 5b ' + '3a 0d 0a 4d 3a 24 3e 4b 60 4c 5b 51 47 4e 50 53 ' + '30 5a 39 3c 2d 3a 46 3a 3a 50 45 42 45 40 39 4c ' + '46 2a 34 59 50 2f 4c 2f 5c 3a 52 3b 32 22 5a 3e ' + '32 31 34 21 41 38 5d 5f 34 58 5e 49 49 59 4c 5b ' + '0d 0a 4d 36 54 45 3e 29 39 46 3a 3f 27 39 33 51 ' + '46 41 48 49 2d 55 49 5a 2f 33 31 2d 48 55 5d 3b ' + '41 39 47 44 4d 49 22 32 2f 48 4f 57 51 35 2e 5a ' + '5e 27 29 49 28 49 26 54 4f 34 4b 3a 36 31 51 0d ' + '0a 4d 41 2d 5b 5e 3a 50 49 28 49 4b 46 56 2c 33 ' + '59 21 60 5b 43 5a 55 31 40 32 5e 4d 4b 2a 26 53 ' + '4e 29 59 48 46 35 4f 5e 0d 0a 2c 41 51 53 47 5a ' + '54 46 46 2e 24 58 4b 5b 56 3b 3d 4d 5c 24 3f 24 ' + '0d 0a 4d 45 55 21 29 25 4a 45 53 3a 2b 2d 53 40 ' + '51 27 43 27 42 46 3a 43 5c 29 5a 52 28 48 48 45 ' + '4f 2b 24 32 60 60 23 29 59 2f 5f 60 26 2a 52 4b ' + '3e 51 4e 34 47 42 4f 39 4f 42 3e 5d 24 3a 52 0d ' + '0a 4d 3c 28 54 5f 3f 4f 51 36 3f 4b 44 36 49 53 ' + '5a 56 44 55 4d 3e 57 5f 48 51 4e 39 25 29 3b 57 ' + '2a 2e 2a 2b 38 59 33 46 47 3b 42 43 3c 4c 3f 41 ' + '3c 56 24 5d 53 4a 4e 4c 52 2c 45 4f 3b 40 0d 0a ' + '4d 24 41 2e 53 47 5f 4c 55 32 55 22 3f 32 5d 34 ' + '43 42 47 4c 2b 2a 26 2a 54 2e 39 34 44 22 38 39 ' + '4f 57 4a 5d 5c 29 3a 4e 45 5f 50 23 23 39 4d 4b ' + '56 5a 2d 54 37 46 45 41 47 43 3c 59 39 0d 0a 4d ' + '3c 3d 4a 53 48 5d 2d 36 51 4c 47 54 5d 3c 42 22 ' + '60 45 38 52 4f 44 39 29 49 29 56 50 46 57 51 4c ' + '43 30 37 4e 23 49 3d 56 35 52 32 44 57 59 39 2f ' + '54 53 37 4c 5d 2a 4d 4b 3d 58 38 58 0d 0a 4d 3b ' + '56 2c 40 37 2a 27 21 51 5b 32 2e 57 5e 3d 3e 3d ' + '4d 28 49 38 3b 38 29 27 25 4d 40 29 27 29 27 53 ' + '35 5a 31 3b 39 4d 5b 56 3c 5d 52 30 32 49 24 33 ' + '40 5e 3e 58 51 35 2d 54 30 47 3a 0d 0a 4d 54 27 ' + '2e 44 3c 4c 4a 5a 31 3d 52 41 39 55 5a 48 27 53 ' + '52 31 47 40 34 42 2a 59 44 46 4d 49 2d 32 43 4d ' + '5d 46 49 50 2b 42 3d 3c 3c 4e 21 47 5f 48 2a 48 ' + '5a 45 4b 3e 47 56 5e 47 2d 27 0d 0a 4d 3f 32 31 ' + '31 3a 47 38 48 22 4c 43 3f 2d 58 5b 55 59 5f 34 ' + '5f 5b 33 5d 28 33 34 24 3b 32 58 39 29 49 59 24 ' + '56 53 58 37 2a 43 43 25 31 2f 29 26 2f 38 45 26 ' + '33 37 42 4b 2f 37 2e 57 33 0d 0a 4d 21 4b 2c 2c ' + '41 25 43 2e 48 32 3e 2b 2f 4d 2f 5b 35 46 37 4e ' + '4a 5a 2b 49 4f 58 57 33 49 5b 57 55 28 27 53 2b ' + '3b 5b 47 52 30 51 26 3c 3f 58 55 5c 57 55 43 58 ' + '41 55 5f 34 5b 22 5b 42 0d 0a 4d 41 44 36 56 4d ' + '27 45 2b 2a 4a 27 21 5b 5e 2a 51 5b 2e 52 47 4e ' + '2b 52 2d 4b 46 3d 59 4f 33 27 33 5a 41 52 3a 59 ' + '49 5e 4a 42 47 48 5b 38 3e 41 52 39 2d 4f 48 5d ' + '51 2f 5f 60 26 41 32 0d 0a 4d 52 2f 21 3b 36 55 ' + '49 28 57 58 39 4f 33 39 50 2f 3d 5d 5a 38 4f 5d ' + '48 37 58 2a 3a 3e 58 3b 32 51 2b 2d 29 50 33 5a ' + '3e 3c 55 42 5a 39 39 51 50 41 57 28 59 3b 41 21 ' + '30 57 45 4b 46 5b 0d 0a 4d 24 31 28 5e 4e 3a 59 ' + '37 5a 4a 3d 47 39 27 5e 47 50 5a 2f 39 3a 2f 5c ' + '60 56 4d 50 31 57 3c 3e 47 27 31 29 43 2a 59 52 ' + '4b 29 23 54 40 34 3e 48 5f 24 4f 50 5b 4a 56 4d ' + '36 35 53 39 36 0d 0a 4d 3d 51 3a 57 2b 2d 4e 45 ' + '3b 39 40 60 40 40 27 2d 3e 34 4c 28 48 5b 38 4c ' + '52 38 2c 46 2e 5f 54 49 40 3e 2b 54 52 59 26 25 ' + '21 59 2f 44 54 47 5a 4e 38 2f 5c 60 49 52 3b 5e ' + '33 2f 49 54 0d 0a 4d 3e 49 3a 33 3e 37 4a 3a 2f ' + '49 56 4b 52 22 5a 3a 2f 57 42 33 48 52 3f 27 5e ' + '35 2d 3e 58 4c 56 4e 3b 45 58 3d 3b 45 22 36 5e ' + '26 45 35 59 2e 3e 25 5c 3f 58 35 5c 4b 34 30 29 ' + '29 5a 45 0d 0a 4d 48 5a 50 52 5d 5d 5a 3c 24 26 ' + '41 44 3c 41 47 46 36 31 4c 2d 51 2a 3f 55 23 5b ' + '55 37 5d 56 52 4f 5b 25 28 5e 43 3a 41 3c 56 42 ' + '36 41 55 46 5d 5e 28 59 38 5b 21 5c 3e 47 5a 34 ' + '57 29 0d 0a 4d 2f 3c 5f 59 26 4e 47 55 27 58 30 ' + '4c 33 23 39 3a 41 3c 4d 4a 23 52 24 4f 5a 49 2e ' + '58 28 2e 33 57 5f 3a 4f 45 26 48 37 24 2f 58 2c ' + '56 2c 49 57 56 58 5a 41 24 3e 50 2d 38 5e 4a 57 ' + '25 0d 0a 4d 5d 2b 26 44 2d 4a 4a 60 2e 2d 4b 4f ' + '5d 4a 2f 5b 49 5f 51 30 5f 50 22 53 34 4e 5d 27 ' + '55 5f 34 4f 5b 36 3d 23 4d 23 29 39 36 3d 4d 2e ' + '38 48 43 4c 24 4e 57 49 28 25 39 54 37 5d 4a 2f ' + '0d 0a 4d 50 51 2f 3b 57 25 4d 3c 3a 3d 3e 57 23 ' + '2b 52 2d 54 38 28 3b 2e 3e 55 3f 2a 4b 3b 32 49 ' + '43 3a 42 2e 3e 33 3c 23 5b 41 36 4b 27 3b 50 51 ' + '4a 25 31 21 40 3d 43 32 3f 4a 49 46 2f 5c 60 0d ' + '0a 4d 38 55 5f 29 45 4f 34 5d 32 3e 5a 55 26 36 ' + '3f 33 28 41 49 5c 23 4c 32 25 43 5a 36 59 29 2d ' + '34 22 59 56 38 45 44 3a 30 43 29 52 55 25 29 47 ' + '3d 51 56 49 2b 31 24 59 21 5b 3d 4a 50 52 0d 0a ' + '4d 39 49 32 3e 53 4c 41 5a 3d 3d 4f 39 36 46 60 ' + '2a 4c 44 3a 5b 2f 54 44 34 3c 33 37 39 29 34 37 ' + '34 56 33 47 47 2d 36 3f 30 5a 5d 56 2a 3f 27 3b ' + '58 52 60 2a 52 5d 52 32 5a 2d 27 5a 3e 0d 0a 4d ' + '24 57 3b 31 35 36 25 56 38 2e 59 57 47 4f 44 55 ' + '39 32 25 3c 24 47 4f 35 4e 2e 60 39 56 58 49 5f ' + '48 60 27 40 60 46 48 47 29 4c 57 5d 4e 2c 27 32 ' + '2a 32 50 5c 5c 49 31 48 47 35 43 25 0d 0a 4d 37 ' + '22 4e 21 44 43 25 26 44 30 51 51 57 2d 39 2c 56 ' + '32 2a 4f 49 24 4f 4d 60 58 49 52 30 58 3c 55 38 ' + '22 60 60 34 54 31 2c 22 2a 26 22 3f 54 52 4e 4c ' + '3e 2e 5f 3e 42 35 21 4e 26 3e 55 0d 0a 4d 2f 2a ' + '24 59 51 57 21 48 50 46 60 3f 4b 32 22 5d 45 3c ' + '4a 21 44 60 60 46 41 56 5e 32 2a 4d 46 29 3e 5f ' + '44 55 23 31 43 2f 27 3a 44 5f 56 3a 37 30 45 24 ' + '59 2d 3c 54 38 51 47 5a 54 55 0d 0a 4d 35 38 2f ' + '5f 60 23 31 5b 22 3e 5f 5c 35 28 36 5b 24 22 2f ' + '4f 51 51 53 31 26 2f 28 5e 55 2e 27 60 2f 33 34 ' + '44 3c 47 5b 35 38 49 2d 42 30 4a 21 42 3c 0d 0a ' + '3f 4d 34 2c 2f 60 49 5b 51 59 4b 0d 0a 4d 4d 4f ' + '3f 25 2a 40 4e 53 5c 59 57 2d 47 3b 31 30 4b 55 ' + '2d 4f 5f 4a 4a 47 3d 50 2d 22 47 34 52 4f 4e 37 ' + '59 3a 3b 3c 37 2b 37 2b 3b 35 35 4a 4c 30 56 22 ' + '2c 4b 3e 48 53 2a 3f 54 4d 37 0d 0a 4d 4f 32 56 ' + '3f 2a 2e 34 47 58 46 31 45 55 5a 5a 54 38 5d 33 ' + '53 26 4a 4c 4f 4d 5e 3a 4e 4f 2b 29 48 48 49 26 ' + '50 4e 56 4a 32 4b 4e 37 49 5d 4d 21 22 51 3c 23 ' + '39 4e 2d 30 40 5d 27 3b 25 0d 0a 4d 36 31 2d 2a ' + '5b 2c 53 4a 5c 4a 2b 31 39 35 36 5a 45 5a 3f 5a ' + '3a 4f 3b 4d 2b 4d 54 5f 2a 57 33 2b 5e 44 54 47 ' + '28 47 2b 51 3c 33 2e 24 31 45 5f 57 42 2e 2b 55 ' + '36 5d 56 59 3a 4e 3a 3b 0d 0a 4d 3d 32 36 2d 58 ' + '29 31 57 23 3b 4d 4d 2d 46 55 2d 39 29 25 36 2a ' + '24 36 5a 3f 54 2b 30 5a 48 5d 46 52 3f 5b 4d 27 ' + '29 4e 5f 35 32 44 3b 50 52 30 34 3f 26 29 5a 42 ' + '3b 58 53 40 2a 5f 5b 0d 0a 4d 41 25 2a 52 4a 42 ' + '4b 4d 4e 21 43 3a 56 57 46 47 32 3a 59 3b 37 2f ' + '50 53 29 3e 4f 3a 47 5c 3c 30 48 44 3a 21 3c 48 ' + '4d 3e 23 37 3e 53 4c 46 5a 42 2c 44 58 40 44 43 ' + '43 47 44 43 42 3b 0d 0a 4d 57 2a 4b 3d 2b 35 2f ' + '23 42 2a 34 49 5c 29 32 2f 32 56 5f 51 43 3e 56 ' + '3d 44 54 35 4f 24 44 4b 3b 46 5a 5b 40 39 56 55 ' + '44 37 5e 4b 3a 49 3f 51 2d 26 29 47 27 35 47 24 ' + '2b 35 4c 3a 29 0d 0a 4d 49 2f 50 55 2b 49 3c 35 ' + '51 3c 33 37 31 4e 35 3f 3b 28 26 2f 31 42 4f 34 ' + '3a 31 39 5a 2f 3b 2b 5a 55 4d 38 2c 54 3b 5b 30 ' + '44 40 37 48 5f 3f 5c 60 4e 54 4e 34 3f 48 3f 49 ' + '55 2a 2c 2f 0d 0a 4d 5c 51 58 22 2b 33 2d 31 4e ' + '4c 2c 51 56 4b 28 57 4e 46 4b 2a 55 53 32 5b 47 ' + '33 5b 4c 50 33 2d 26 54 40 5e 39 2f 3b 37 54 27 ' + '36 4b 42 25 3d 31 3e 26 26 32 2b 3a 43 3d 32 5f ' + '50 21 35 0d 0a 4d 3e 27 5e 2b 5b 44 4f 4a 33 2e ' + '37 37 3c 53 3e 54 3e 55 3a 4d 51 3b 42 29 5e 48 ' + '51 31 3d 28 56 5f 41 55 5f 5d 55 35 3f 5f 60 22 ' + '55 5a 60 25 40 2d 49 4b 52 4f 50 4d 29 5e 30 5f ' + '5c 60 0d 0a 4d 33 37 4a 48 43 4e 34 4c 3f 45 5d ' + '4d 35 43 2d 5c 57 26 34 31 4a 43 60 57 23 4e 3a ' + '3d 3b 28 4a 43 3d 43 57 3e 54 34 4a 29 5f 50 60 ' + '51 36 56 5d 29 53 35 4d 2e 41 51 27 37 31 56 3c ' + '56 0d 0a 4d 30 2a 57 42 3b 54 50 32 4f 3c 55 3d ' + '60 60 41 22 3b 3a 35 21 50 32 53 5e 51 4f 3b 35 ' + '40 32 28 34 57 52 60 5d 60 51 35 5d 44 4f 36 41 ' + '4b 59 2c 2c 42 44 3c 25 40 24 29 5e 40 2e 3a 3c ' + '0d 0a 4d 39 4f 34 42 5d 25 34 60 24 30 2f 5c 43 ' + '2e 3a 4a 2c 54 44 5c 28 59 56 43 26 30 21 5e 55 ' + '2f 22 4e 28 59 26 42 37 3c 33 50 2f 4f 45 2a 4c ' + '41 5e 29 39 4e 27 24 36 59 50 30 5b 25 5e 21 0d ' + '0a 4d 5d 47 27 3a 48 21 5d 31 28 29 41 5b 42 44 ' + '3b 47 5f 27 25 60 5b 23 55 32 37 27 30 21 26 50 ' + '51 5e 56 2a 42 50 2a 31 31 51 4b 2a 5f 3a 55 3d ' + '3f 59 21 53 5f 49 33 5a 25 52 33 5b 2d 26 0d 0a ' + '4d 24 49 3b 3a 41 2f 28 34 23 31 51 57 3b 2c 25 ' + '2f 54 28 4a 4e 4d 53 23 3d 56 5c 34 60 33 38 53 ' + '56 5c 4c 3f 2f 3f 2e 3a 5a 3e 35 23 3f 52 52 31 ' + '2f 4f 40 3b 54 36 3c 5f 38 42 4e 47 4d 0d 0a 4d ' + '44 36 3a 2d 25 21 32 3a 2e 5b 2c 36 31 56 59 25 ' + '23 30 4a 3d 5b 27 37 39 32 32 55 36 3b 3e 28 59 ' + '37 4d 28 42 2f 4e 34 2f 46 4c 4b 58 44 4d 5b 26 ' + '5c 5f 26 33 51 4a 37 47 3f 54 57 50 0d 0a 4d 2f ' + '29 51 32 39 4b 3a 39 48 3b 39 3b 42 3d 5d 5b 5e ' + '4b 24 31 4e 5d 46 2c 47 25 3e 37 47 55 2a 5e 43 ' + '43 41 2d 4c 59 3a 39 48 4e 5f 5d 35 2a 3b 48 28 ' + '4b 29 3e 42 58 47 50 39 4a 5d 5c 0d 0a 4d 39 59 ' + '3b 3d 38 58 40 26 53 4c 44 26 23 5f 3e 4b 5a 3b ' + '5c 27 5a 31 3c 36 2d 40 4b 37 34 59 38 2c 3f 3b ' + '47 40 3c 46 4c 4b 58 33 41 4e 55 4d 2b 37 34 59 ' + '3b 46 32 31 4b 45 32 27 34 47 0d 0a 4d 40 23 27 ' + '25 3e 50 4d 54 2c 45 48 51 28 29 22 44 24 60 3d ' + '52 2a 53 40 44 5d 46 4e 31 53 43 4a 39 57 5e 53 ' + '3d 24 45 4e 2f 37 46 30 32 33 4b 44 26 30 35 34 ' + '26 46 5a 2f 3b 37 26 5a 26 0d 0a 4d 32 5a 38 44 ' + '5c 4b 58 48 4b 26 57 46 4e 59 4b 42 5a 50 5c 25 ' + '49 3b 4e 52 47 2f 26 33 47 25 2e 39 37 42 36 36 ' + '59 56 39 3d 4c 2a 48 4b 34 59 47 43 34 4d 43 31 ' + '28 4c 2c 32 4b 25 60 2d 0d 0a 4d 4f 29 52 21 53 ' + '31 57 24 51 23 3c 24 45 3d 47 22 5f 50 22 4d 28 ' + '2c 46 56 59 32 56 53 5e 3c 25 23 32 2b 5d 22 3a ' + '57 38 2b 23 55 5b 38 2f 25 24 3f 35 33 43 44 3c ' + '3c 54 5f 54 22 45 4b 0d 0a 4d 39 59 32 54 4c 5b ' + '4e 56 4e 47 46 42 26 38 29 31 53 24 57 38 23 5d ' + '4a 2f 32 5b 5e 39 26 4e 48 58 58 4c 31 51 32 21 ' + '4e 57 26 3f 4b 37 48 3d 38 5f 24 3a 35 60 5d 53 ' + '29 60 29 48 54 50 0d 0a 4d 49 22 43 2f 46 45 2b ' + '2b 39 56 49 3e 5c 3e 21 30 44 57 4e 30 43 40 5e ' + '2a 49 49 2b 48 32 44 46 5a 38 43 32 5d 31 25 55 ' + '3f 25 39 2f 33 3d 3d 50 29 28 5e 41 4a 53 5f 3a ' + '2b 60 45 45 5c 0d 0a 4d 2e 4d 5c 31 5a 3f 60 5b ' + '52 30 32 25 37 32 2c 3e 5b 51 5f 54 4a 29 35 54 ' + '3a 53 47 4d 56 4d 38 57 5d 3e 59 34 44 40 3e 55 ' + '3e 2a 56 5d 24 4e 37 3f 32 27 43 45 24 24 4a 44 ' + '47 2c 34 47 0d 0a 4d 28 53 58 52 2a 33 37 56 2a ' + '4b 5c 34 3e 30 54 3e 2a 36 59 5f 22 3a 43 28 5d ' + '51 24 49 43 23 46 21 4e 2f 27 44 3f 53 36 45 3c ' + '36 5c 45 53 48 2a 56 52 4e 44 44 5c 58 3a 32 2d ' + '4e 5e 2c 0d 0a 4d 39 2d 37 4d 36 4e 49 51 3c 30 ' + '33 33 36 4c 34 34 39 53 26 4a 51 4b 40 5f 53 32 ' + '48 5b 3e 3a 25 58 48 41 4d 43 4d 37 29 43 32 34 ' + '5f 29 47 5a 26 45 3d 46 47 25 37 58 48 5c 57 39 ' + '3a 3a 0d 0a 4d 5c 47 49 56 55 51 28 4f 4a 41 42 ' + '21 4e 5b 24 58 5c 35 4e 56 26 47 57 2b 46 35 37 ' + '57 22 58 43 40 3c 3b 23 56 2f 47 42 4b 5e 47 56 ' + '2c 3b 27 5c 29 3c 4d 22 2d 30 31 52 54 23 43 56 ' + '4d 0d 0a 4d 57 49 4d 53 3d 36 5a 4c 55 51 2b 2f ' + '5e 27 4e 5b 2b 57 41 53 40 32 43 27 28 5e 5d 2a ' + '34 44 40 47 26 35 54 38 56 44 5f 23 3d 4b 3a 50 ' + '37 2e 4a 36 22 52 3f 42 52 60 54 5c 2f 55 2f 3c ' + '0d 0a 4d 44 23 5e 3a 3d 4a 2e 46 5a 3d 21 4a 34 ' + '26 49 4f 3e 57 23 56 59 60 5d 36 2d 26 5a 34 2f ' + '57 4b 2b 55 57 58 57 4d 28 4d 30 4d 3b 4f 32 60 ' + '5b 32 4e 5f 49 53 2a 47 4c 2f 2f 3c 55 58 5e 0d ' + '0a 4d 5b 55 3f 34 2d 31 4e 2b 54 26 33 54 58 37 ' + '2e 32 4c 37 60 4b 46 52 39 58 51 2d 2c 2f 49 5c ' + '44 5d 35 48 5d 53 5c 31 5f 26 2e 40 3a 29 3c 4b ' + '3b 4b 29 5e 2a 4d 39 58 3d 52 4a 47 2b 2a 0d 0a ' + '4d 56 3a 5c 39 3c 5f 26 4e 4d 3a 41 38 50 51 36 ' + '44 38 31 24 38 44 32 4d 5b 5e 5f 55 4b 53 5d 53 ' + '38 46 59 4f 25 46 56 4b 5d 60 3a 54 3d 2d 41 3a ' + '2d 31 22 24 29 21 29 59 25 3c 2c 5f 36 0d 0a 4d ' + '32 3f 31 5a 46 27 5e 47 51 32 4e 30 43 36 28 2b ' + '4b 34 3b 41 3b 46 5c 47 3d 59 29 3e 37 37 2d 21 ' + '3a 3a 3d 3a 56 5d 50 57 48 48 4a 43 4d 36 4f 22 ' + '30 49 2c 40 60 29 38 38 50 3f 25 26 0d 0a 4d 54 ' + '34 3c 34 28 3f 28 52 32 2c 55 53 33 52 52 39 57 ' + '38 5c 26 2e 27 51 2e 32 57 43 4d 5b 28 3e 32 50 ' + '58 48 34 36 2a 2e 21 39 46 21 31 49 2c 40 3f 4e ' + '23 36 43 2f 26 40 4c 55 3b 53 57 0d 0a 4d 25 38 ' + '2e 48 57 29 39 52 23 5b 35 59 60 25 39 5c 43 35 ' + '31 56 3e 40 4c 3d 48 4d 56 45 38 40 44 3e 2f 48 ' + '2a 49 33 37 34 30 2c 45 50 5f 3f 26 24 25 39 5a ' + '33 53 4d 25 54 4d 42 2c 43 47 0d 0a 4d 25 35 29 ' + '59 37 44 35 4e 40 58 5b 40 26 45 3b 38 56 44 3a ' + '2d 47 3f 4a 3b 5a 33 3f 56 58 26 2a 31 4a 3d 5a ' + '4a 51 44 39 2a 2b 4f 27 2d 39 3c 2c 43 41 57 57 ' + '3f 5c 30 5f 32 4a 5f 58 2e 0d 0a 4d 58 4f 2b 43 ' + '3d 3c 52 4c 24 37 59 2f 26 3a 49 40 54 44 37 37 ' + '55 42 2a 56 3c 2b 21 4f 44 2e 2e 3a 35 3d 3a 45 ' + '4a 44 5c 3e 5a 22 2d 34 35 5c 39 25 36 28 2b 25 ' + '28 51 51 26 22 5f 55 4b 0d 0a 4d 30 4d 3b 34 39 ' + '26 35 58 53 30 25 56 39 54 25 47 2b 29 3c 3e 4f ' + '2d 2a 51 53 58 4a 5a 44 32 59 28 5d 48 32 4b 31 ' + '42 29 60 34 23 21 21 4b 4f 30 38 46 47 3d 21 51 ' + '59 5d 42 53 40 23 40 0d 0a 4d 3e 3a 27 3a 3c 38 ' + '2f 3b 2d 36 36 41 26 2c 23 5a 54 30 42 53 57 4a ' + '27 2b 38 5e 2c 32 46 52 2d 47 3d 43 4d 31 42 27 ' + '3d 35 50 30 5c 3f 3a 42 24 37 26 57 51 33 3b 31 ' + '37 25 25 34 31 60 0d 0a 4d 2d 4e 5c 55 38 43 30 ' + '3c 5d 2f 25 2d 5d 2b 29 59 49 48 30 23 26 2f 59 ' + '4b 25 4f 39 37 26 51 28 37 40 4b 43 5e 3a 3a 25 ' + '60 53 31 4a 40 21 27 5e 25 2e 35 2f 4d 32 4c 3d ' + '36 29 2a 2a 30 0d 0a 4d 56 3e 57 54 48 4f 32 5e ' + '45 2c 31 21 4e 5e 5d 2c 22 5c 40 34 4b 2a 5a 25 ' + '2b 25 44 58 5e 55 26 24 2d 26 25 56 47 29 5b 54 ' + '38 26 32 3e 3e 55 2a 52 39 3b 38 4d 51 41 4a 28 ' + '60 26 43 39 0d 0a 4d 2c 4d 4e 53 56 4a 30 4e 23 ' + '31 56 2d 29 3d 42 52 60 2e 58 4a 2d 4e 23 35 41 ' + '45 26 3f 4b 53 34 21 23 40 46 44 52 48 54 56 29 ' + '56 58 2f 57 25 32 25 59 51 33 4d 49 51 5d 53 37 ' + '24 60 39 0d 0a 4d 28 48 4c 3b 30 44 29 55 58 4a ' + '2c 3c 46 4b 60 37 47 47 4f 34 2f 26 3e 5d 23 29 ' + '38 40 39 53 5d 53 31 25 33 40 4d 4d 5b 35 2e 54 ' + '47 2d 33 52 26 2a 43 4f 33 2a 48 5f 2c 4d 41 24 ' + '57 4b 0d 0a 4d 2c 4b 5e 48 4d 3a 35 51 3e 4b 3b ' + '2d 4d 3a 27 3c 3f 55 34 49 5d 33 41 32 31 3f 33 ' + '43 57 3d 35 39 56 49 37 34 55 52 3c 28 4e 55 3a ' + '5d 56 31 5c 3b 46 3c 4a 59 27 37 25 53 2b 3c 2a ' + '52 0d 0a 4d 2d 4d 33 4b 48 5b 36 21 49 46 3b 56 ' + '5b 3a 33 24 43 2a 56 5b 49 3a 4b 2f 58 4d 4d 47 ' + '49 2a 4a 4b 4d 5e 3a 46 3b 38 4c 3f 26 2e 52 49 ' + '3c 28 48 47 3a 28 2d 4e 5f 4f 34 34 3d 4f 29 2b ' + '0d 0a 4d 2c 4a 49 24 53 2d 5f 33 31 2c 46 36 44 ' + '45 5a 36 4b 48 49 39 24 2e 59 29 26 43 3a 48 44 ' + '5f 28 3c 2f 33 4b 27 27 5f 5a 2b 43 30 5e 41 26 ' + '5c 3c 5a 5f 50 23 5d 4a 2e 2a 32 54 5f 23 46 0d ' + '0a 4d 2e 31 4d 4e 5b 49 36 4a 3d 51 29 29 2a 5b ' + '2d 2a 53 2c 36 5e 3a 45 29 60 23 5c 52 3f 57 3a ' + '3c 4f 54 2b 56 5c 47 56 36 4b 42 54 52 4f 4a 51 ' + '3d 32 4d 36 3e 37 3f 3a 4f 5a 3f 54 4d 35 0d 0a ' + '4d 52 2e 35 48 4d 52 5b 46 5f 50 23 58 55 3b 32 ' + '57 4d 49 4b 39 49 39 29 48 55 44 37 4a 3a 47 3d ' + '5d 44 33 51 32 3a 58 51 2c 5d 27 44 35 36 35 39 ' + '36 35 3f 54 5f 2b 35 42 58 55 33 35 26 0d 0a 4d ' + '4d 38 4b 32 2e 5b 47 40 0d 0a 40 31 3d 4a 49 26 ' + '3e 46 48 5f 22 2c 53 2c 5a 2e 4f 49 5f 55 34 24 ' + '54 33 2a 56 5a 2f 56 4d 5e 46 41 51 21 49 32 41 ' + '31 36 2b 37 23 2a 4b 2d 28 53 2d 4f 5c 60 0d 0a ' + '4d 3d 5c 55 39 5e 4a 2c 5f 4a 43 3c 5d 3a 33 29 ' + '4d 39 3d 57 33 36 3d 4a 3f 36 57 4b 27 56 2d 35 ' + '32 39 42 4f 33 3c 35 51 2f 30 3f 23 24 46 3b 3c ' + '55 5a 52 2e 37 5c 47 4a 4b 51 57 50 4f 0d 0a 4d ' + '29 45 37 35 3f 3c 2a 5d 41 23 4d 3e 3b 3c 57 4c ' + '35 4f 3b 34 38 53 4e 47 2b 31 3d 40 34 59 58 37 ' + '3c 2a 4f 50 5b 3c 23 2f 4f 5f 5a 35 36 41 2a 48 ' + '22 56 5b 21 48 41 26 3d 58 44 57 3d 0d 0a 4d 5a ' + '5a 44 38 4e 3f 55 31 3a 47 44 34 2c 3e 45 4f 5a ' + '3a 3f 3a 4a 5d 51 29 4e 3d 40 42 27 29 37 2d 29 ' + '5d 2d 47 5a 22 3c 44 5c 54 55 27 39 5e 4a 2d 3f ' + '26 22 2f 59 4a 5f 5e 24 5f 23 4c 0d 0a 4d 4f 2f ' + '27 60 54 22 31 51 32 60 52 44 28 2c 5f 4f 31 36 ' + '29 52 38 38 56 3c 60 41 54 27 5f 32 4a 54 60 31 ' + '2b 2f 3e 42 58 39 3c 60 3f 58 58 49 5d 4b 22 59 ' + '43 44 51 43 55 37 27 31 47 5d 0d 0a 4d 5a 3d 5f ' + '30 33 5b 26 31 50 25 4b 34 2a 51 58 37 2a 49 47 ' + '4f 45 27 4b 4c 30 50 33 32 33 37 24 3e 38 23 28 ' + '5a 58 5f 4f 49 31 52 5c 57 30 21 44 30 31 31 2f ' + '29 5f 49 34 52 25 2b 52 2e 0d 0a 4d 26 2d 55 39 ' + '25 2c 4c 31 29 2f 40 3c 55 35 46 3b 49 3b 39 59 ' + '37 35 4f 42 5a 55 4d 5b 3e 36 56 42 41 50 53 28 ' + '42 5f 4d 4c 3f 5f 58 4b 54 57 50 5b 5c 30 5a 3f ' + '4b 34 5b 4a 60 31 28 4c 0d 0a 4d 48 45 59 4b 29 ' + '4e 5f 41 2e 50 4f 3b 48 44 48 35 44 32 3e 31 32 ' + '23 5d 2e 32 2a 50 29 2f 41 53 35 2b 39 31 3e 3a ' + '39 2e 38 30 4d 4a 54 4b 23 2e 2d 51 53 32 47 3b ' + '3d 48 4d 31 41 2d 3d 0d 0a 4d 5b 2f 48 55 5f 49 ' + '54 2d 59 3d 2a 52 2e 22 4a 52 2e 31 4d 5e 49 4b ' + '51 56 49 3f 22 2e 4a 51 37 4c 32 36 2c 44 33 30 ' + '5d 37 4e 5d 50 48 4b 29 3f 42 37 33 34 45 4f 29 ' + '39 55 3b 54 55 43 0d 0a 4d 38 48 33 57 57 55 3a ' + '3f 58 55 39 4d 32 36 55 3a 57 3a 2e 31 37 56 52 ' + '58 37 56 45 4a 2b 3b 5b 30 55 3e 27 4b 39 5b 2b ' + '58 27 4d 29 41 48 37 5e 53 5b 42 35 26 4e 3b 37 ' + '28 50 23 58 4b 0d 0a 4d 55 4e 40 5a 2f 28 5e 48 ' + '31 37 35 53 2a 5a 36 4c 21 22 41 30 3e 39 22 3f ' + '5d 3a 5c 49 49 3c 52 36 5d 59 25 3c 31 47 5c 52 ' + '58 30 25 5f 59 25 3e 54 4e 2d 37 3b 5c 23 4d 4d ' + '50 4e 58 23 0d 0a 4d 22 59 5c 27 47 46 44 45 5d ' + '28 43 2c 57 44 3f 29 46 4f 4a 34 5e 46 51 36 33 ' + '56 52 49 27 4e 53 44 48 2e 5e 3f 5a 4f 4f 37 45 ' + '46 42 47 4e 3d 35 40 4d 4b 38 25 44 27 27 5c 55 ' + '46 36 42 0d 0a 4d 52 56 5c 4d 52 39 2b 42 32 32 ' + '32 39 56 3c 4c 59 5e 4f 43 5d 4a 55 5d 2c 45 44 ' + '4d 5d 33 35 5b 34 5e 49 28 33 54 5f 4f 42 4b 32 ' + '4b 4c 52 3b 47 56 40 2f 50 4d 4f 25 5c 36 57 46 ' + '27 57 0d 0a 4d 4f 3b 51 60 33 4c 3e 51 3f 2f 28 ' + '4b 31 4f 3d 31 4e 28 59 33 4a 35 4f 2d 24 4c 2a ' + '58 57 31 60 5f 5d 2a 48 30 5a 3d 3b 2b 5e 2f 41 ' + '4f 39 57 42 4f 29 39 4f 34 45 38 47 21 59 2e 3a ' + '48 0d 0a 4d 57 4d 4b 29 4a 33 56 55 4b 38 59 43 ' + '4d 22 2c 32 32 47 59 4c 3c 43 21 49 55 39 29 3e ' + '37 36 2b 43 36 21 2c 29 35 5d 2e 54 43 2f 5c 60 ' + '53 5f 5c 60 39 49 35 5c 40 4f 2b 4e 2e 59 37 2f ' + '0d 0a 4d 48 48 2c 4a 41 5b 35 25 59 24 2b 3e 25 ' + '38 58 42 42 56 50 5a 3d 4f 53 3c 22 49 4c 34 35 ' + '54 4d 44 4e 29 26 32 29 56 60 29 21 59 51 4e 49 ' + '22 45 26 44 60 51 41 24 49 4e 49 47 23 2a 21 0d ' + '0a 4d 44 2b 27 58 59 59 4b 30 41 2d 40 5d 47 2b ' + '3d 53 53 53 56 54 34 46 32 22 23 43 4d 5d 3a 35 ' + '3c 5a 35 3c 4f 2e 58 40 31 28 2b 2d 46 3a 2c 2c ' + '57 23 21 3c 5d 5a 3c 45 4c 5c 4c 32 57 2c 0d 0a ' + '4d 42 51 2f 49 28 52 4b 48 3e 58 27 3a 46 5d 25 ' + '5c 45 44 56 2d 4d 31 2e 29 38 4b 5a 35 5f 50 60 ' + '35 49 28 26 32 59 59 28 5f 5b 53 36 45 3e 53 56 ' + '4d 49 22 5d 47 3f 4e 4f 58 22 30 45 48 0d 0a 4d ' + '49 43 58 2e 2f 21 4b 53 46 48 3a 57 3b 5a 3d 2e ' + '2b 3f 31 52 4c 55 42 35 2a 4d 24 57 2a 43 47 5a ' + '35 58 57 37 49 3d 31 55 2d 38 3b 3d 5b 4e 30 30 ' + '31 3d 51 47 43 4d 37 2b 45 5d 31 26 0d 0a 4d 21 ' + '54 58 4f 33 53 47 54 3e 44 5e 29 3f 43 32 55 22 ' + '27 33 4b 32 24 2d 2b 21 29 54 37 2c 38 5c 60 5f ' + '36 4f 29 3a 4a 3b 5f 60 25 21 53 3f 53 57 3c 58 ' + '3d 52 60 4c 3e 3e 58 51 43 46 46 0d 0a 4d 36 2d ' + '45 5a 28 5d 30 51 59 37 4e 60 3f 2d 2e 57 2f 28 ' + '4b 24 48 60 30 33 56 4b 53 3c 47 4a 59 33 2f 33 ' + '41 5f 33 58 51 3d 52 39 47 51 36 59 40 2f 48 31 ' + '2b 52 3e 3e 2a 4e 3a 3f 39 5b 0d 0a 4d 3b 3d 5b ' + '40 49 50 27 49 4e 45 46 60 22 3e 58 46 3f 4d 51 ' + '44 55 3b 47 4f 60 5a 2d 27 27 27 41 22 3e 30 21 ' + '37 2a 5c 47 59 2e 5d 38 4a 54 43 29 44 50 4c 53 ' + '29 58 27 28 25 3b 36 46 56 0d 0a 4d 57 58 3a 27 ' + '55 36 37 4a 44 5c 35 44 26 2b 3f 28 33 47 23 59 ' + '5c 5e 2a 4f 56 5d 55 2d 2b 2c 24 3c 5d 28 49 2e ' + '31 37 25 5d 28 31 29 4d 41 4e 27 21 37 60 5b 43 ' + '5f 50 21 4a 4a 33 33 2d 0d 0a 4d 5a 4a 41 4c 38 ' + '23 55 38 4f 58 39 49 36 3a 33 2f 32 23 32 0d 0a ' + '41 3a 52 33 32 3d 30 56 58 2e 3a 47 5f 60 2a 37 ' + '27 36 42 57 4a 25 53 2a 52 4a 44 3a 3d 60 4b 2f ' + '4d 4b 31 32 29 27 3b 29 3b 0d 0a 4d 4c 21 36 4f ' + '3d 50 5b 34 3b 2b 4b 4e 21 5c 3d 4a 34 42 5d 3b ' + '5b 21 44 23 2d 36 42 39 49 48 53 57 5f 2a 35 5b ' + '3d 34 28 50 2c 3c 5f 36 40 3e 57 44 46 57 3f 28 ' + '2c 35 3d 43 34 4d 2e 53 0d 0a 4d 47 47 47 2f 2d ' + '2e 45 30 44 58 34 3c 3e 3a 4a 52 33 2c 43 4c 48 ' + '48 41 44 39 29 5b 54 5d 58 24 56 45 52 21 5d 3a ' + '4d 51 51 39 2e 55 4f 55 34 52 32 27 26 58 3e 2a ' + '27 28 3a 43 4c 49 56 0d 0a 4d 54 33 2e 53 23 27 ' + '26 3a 4c 4f 26 4a 3c 39 5b 54 3c 38 36 2d 33 47 ' + '4e 3e 33 34 4f 24 39 25 52 51 50 21 53 34 36 3a ' + '49 60 45 33 53 34 45 31 44 5f 3a 46 4a 48 56 55 ' + '23 2b 40 44 23 53 0d 0a 4d 51 34 5c 50 32 5f 28 ' + '48 3c 44 38 5e 4d 2c 35 3e 4a 46 3e 47 5d 25 59 ' + '48 58 55 5a 32 3f 4b 32 3b 2a 4b 38 60 37 49 28 ' + '4a 33 27 53 5d 4a 3a 24 29 3e 42 60 58 51 42 41 ' + '42 4b 3d 60 3b 0d 0a 4d 21 44 40 42 49 34 21 46 ' + '57 3e 23 33 36 34 45 4c 5f 50 60 55 28 33 3b 51 ' + '43 40 34 41 3b 60 35 33 5f 41 31 2b 47 21 5e 45 ' + '24 4a 47 29 49 42 2b 41 42 49 5b 34 46 50 45 26 ' + '46 22 25 59 0d 0a 4d 26 2a 5b 27 34 2a 3a 42 38 ' + '2f 57 4b 45 37 40 46 40 3f 31 60 37 3c 32 33 5e ' + '5d 3d 4c 50 32 2f 25 2c 30 3b 33 40 55 54 46 3d ' + '59 60 5b 35 21 36 56 51 31 21 56 44 43 4f 34 21 ' + '37 23 39 0d 0a 4d 2f 3b 46 46 4c 4f 32 30 2e 5e ' + '2a 38 48 58 29 3a 40 3f 30 2c 3a 58 5f 3a 42 56 ' + '47 29 4a 3e 23 33 60 2e 2e 3f 25 35 5e 42 37 56 ' + '2a 56 44 38 29 48 36 37 5f 24 54 5d 4e 3c 5c 3d ' + '5a 40 0d 0a 4d 4a 2e 3a 35 25 57 30 48 4b 41 43 ' + '59 50 3a 44 59 5b 5e 2a 2c 2b 51 40 3f 4d 31 38 ' + '52 4f 27 57 49 24 52 56 51 23 2a 2c 27 25 31 4c ' + '59 21 5c 54 5f 39 40 59 5c 34 33 23 21 5f 3a 4a ' + '21 0d 0a 4d 4c 5f 29 46 57 3c 56 59 4f 3b 5f 33 ' + '30 2a 2e 4f 49 3f 5c 60 59 4a 4d 2f 25 29 4e 37 ' + '3b 27 28 52 5f 50 21 2d 3a 35 45 3b 31 5e 46 4a ' + '4f 26 4e 5b 5e 4a 4f 3c 58 47 52 5f 4a 3f 5c 60 ' + '0d 0a 4d 2b 2b 52 2c 5e 57 41 3a 34 3f 55 2d 5e ' + '46 47 32 3a 39 3d 4c 36 36 2d 55 57 3f 5c 60 5b ' + '45 3a 43 29 3b 50 51 4c 53 3b 35 36 40 46 55 2e ' + '57 43 35 5f 32 43 44 46 3b 3b 58 49 51 40 35 0d ' + '0a 4d 2b 2b 21 3d 28 52 3b 46 53 4e 55 45 50 4c ' + '3f 4a 2e 57 52 51 55 22 5a 3b 3c 5d 2b 2c 34 35 ' + '36 5f 35 35 5a 2e 5d 4f 39 27 39 48 28 4f 33 3a ' + '42 4d 4b 3e 5b 45 2a 4d 3d 32 4a 50 5f 49 0d 0a ' + '4d 48 45 24 52 45 44 45 44 45 58 40 2b 38 29 5a ' + '42 4c 53 2d 4d 37 5d 2d 2f 3a 55 37 3b 4e 36 2d ' + '36 3b 59 3d 4d 36 40 28 58 56 3b 4a 5a 35 37 59 ' + '4a 44 5b 4f 33 5d 31 25 3b 49 5d 4e 56 0d 0a 4d ' + '47 50 29 59 5c 49 3e 31 41 57 35 4a 5c 2c 2a 4a ' + '4e 5b 4a 5d 56 5a 4a 33 2a 47 4e 3b 3d 37 48 4b ' + '4e 25 39 58 2d 44 47 4f 5f 49 4b 23 4f 38 56 40 ' + '4e 26 43 5e 37 5e 4a 44 55 52 44 2a 0d 0a 4d 23 ' + '58 3e 2c 32 29 29 36 3e 29 45 57 2c 4f 5c 60 3d ' + '48 4b 36 35 48 52 4e 59 5d 54 3a 5d 36 56 44 2a ' + '4f 4a 32 3b 2d 56 56 46 33 30 4d 25 3c 3b 36 49 ' + '3d 45 5c 38 5c 4e 31 3f 3e 58 4c 0d 0a 4d 25 2a ' + '32 2a 4b 32 2e 4b 2d 4e 35 4f 3b 36 35 4b 5d 58 ' + '4d 57 4d 24 3c 2c 3c 2c 3a 5f 2b 26 4d 36 5f 32 ' + '4c 58 46 5f 2d 3b 3d 5f 5c 60 5a 5a 52 5d 32 46 ' + '32 30 4c 54 3a 5b 35 4a 45 29 0d 0a 4d 60 45 2e ' + '2c 42 5d 5c 2c 32 3b 3b 41 55 4b 56 5d 45 56 57 ' + '3b 4a 5e 3e 5a 2b 2c 52 37 46 5a 4f 3e 5a 38 52 ' + '4c 48 57 35 43 43 5e 31 56 39 25 26 37 39 4a 51 ' + '21 37 44 35 37 57 38 2d 36 0d 0a 4d 5f 33 39 45 ' + '32 28 3f 58 55 34 35 55 57 21 3f 26 5a 4d 21 26 ' + '3a 31 43 25 26 57 35 4d 58 4b 4d 31 52 4f 3c 41 ' + '5c 3a 42 2a 2e 33 2b 5b 46 5e 4d 3d 39 33 56 58 ' + '4e 28 54 3f 48 28 3c 3b 0d 0a 4d 5c 5e 33 46 40 ' + '44 51 24 22 22 50 38 4d 5b 4a 59 58 55 56 41 50 ' + '46 37 2f 3f 2f 5b 55 48 43 2e 3d 4d 43 4b 4e 3d ' + '2b 3d 60 59 5b 38 26 54 3f 3e 4b 35 43 3c 29 3c ' + '4b 3b 32 39 22 2d 51 0d 0a 4d 27 5f 29 2d 39 5e ' + '4a 4a 44 55 4c 2e 56 23 40 44 5f 4d 32 3f 40 56 ' + '58 30 4b 24 44 40 21 39 29 24 2f 37 5e 5d 23 3d ' + '2c 37 27 35 46 5b 4a 60 32 26 36 36 55 5d 2f 2c ' + '4a 3e 48 53 47 5d 0d 0a 4d 5a 4d 57 3d 4e 44 4d ' + '48 5d 50 4e 30 31 2f 24 42 2a 2f 2e 21 46 42 55 ' + '53 54 31 4a 4d 50 48 30 5e 48 3b 3b 3c 3c 5e 31 ' + '32 29 4b 4d 54 4e 57 45 42 34 3b 21 2e 26 32 2f ' + '5b 3b 2a 4b 5f 0d 0a 4d 60 28 38 33 57 56 60 43 ' + '32 2a 58 4f 29 45 2e 26 3e 34 58 27 44 5d 4a 3a ' + '4d 4e 51 54 55 42 51 56 32 3f 40 50 60 41 5c 24 ' + '46 40 4e 39 56 2d 4c 45 53 28 4e 26 42 4d 52 32 ' + '2f 26 33 31 0d 0a 4d 37 48 4e 29 59 39 59 24 27 ' + '4d 40 43 43 59 5e 59 49 5d 41 25 3c 32 53 3d 56 ' + '3c 43 51 57 34 34 4b 28 58 51 60 46 3f 2e 21 37 ' + '45 2f 42 3f 31 3b 36 54 4f 59 4b 46 2e 30 45 47 ' + '4e 35 53 0d 0a 4d 47 4f 5b 3f 2d 3e 52 4e 43 26 ' + '4d 59 3d 31 4f 29 4c 21 5d 2b 47 5b 5e 2a 49 3f ' + '24 25 43 3b 0d 0a 3a 45 39 57 34 34 24 42 5e 4f ' + '27 3e 49 44 3e 3e 30 3c 34 56 4b 35 25 4d 52 42 ' + '5b 2c 4f 30 0d 0a 4d 26 4f 28 2b 42 57 4e 27 38 ' + '52 56 59 29 37 29 5c 24 22 4f 38 37 2a 57 43 2c ' + '44 55 44 51 2f 49 40 59 33 50 3a 5c 4d 48 55 59 ' + '3c 3a 25 25 2d 3b 57 5d 4c 3b 42 23 5c 34 58 60 ' + '34 39 2a 0d 0a 4d 35 5b 4b 58 3b 55 43 31 2d 34 ' + '4f 30 2b 26 35 35 3f 4d 4d 38 5f 50 22 4d 39 2a ' + '58 5d 45 33 3c 39 28 2f 32 39 2b 2e 59 43 27 58 ' + '5d 26 35 50 2c 25 30 2e 3a 2e 5c 55 4a 51 4c 3b ' + '3e 3a 0d 0a 4d 58 54 5a 2b 3f 29 26 2d 5a 4d 43 ' + '5a 3c 42 4b 2e 49 2b 24 56 48 42 25 58 55 4d 59 ' + '5d 4e 30 33 50 26 37 5f 4c 35 31 55 5e 52 4d 48 ' + '3b 32 22 36 21 3d 48 3a 33 5c 55 21 56 60 2f 5c ' + '60 0d 0a 4d 54 4b 3f 33 2e 3a 34 47 5e 32 57 2a ' + '41 5e 28 26 54 5b 58 40 4f 40 55 4d 2c 5c 36 27 ' + '41 37 40 2e 3c 3d 52 2f 59 48 2d 36 4e 29 28 58 ' + '49 5b 37 33 25 43 5d 3a 28 41 34 22 5e 51 36 51 ' + '0d 0a 4d 5f 50 23 2d 3a 25 55 55 4a 21 27 41 34 ' + '42 4d 54 22 60 3f 4c 2a 4a 53 2a 46 44 42 55 55 ' + '21 40 43 56 45 53 2a 2f 35 28 5c 2c 3e 21 47 5f ' + '22 48 2d 29 3f 48 32 54 3c 34 2e 46 42 3f 34 0d ' + '0a 4d 56 3a 36 5c 28 28 56 30 5c 42 42 4c 44 4d ' + '5b 49 35 2a 2b 2e 50 31 40 56 2f 48 3e 5e 2a 33 ' + '3e 4f 3a 2d 4a 5c 4d 59 3d 57 2a 42 29 5c 4d 23 ' + '27 26 3e 2c 5e 31 36 3b 2b 3f 53 57 2b 22 0d 0a ' + '4d 32 53 2b 36 5a 4e 31 44 2b 51 47 42 4c 4c 46 ' + '3a 2c 2e 56 2e 2e 26 36 33 34 33 3e 55 2b 58 44 ' + '4d 2b 3a 21 43 2c 4c 54 4c 4a 38 21 30 3c 40 5c ' + '55 46 37 36 4e 36 2d 53 2b 2c 26 43 4f 0d 0a 4d ' + '38 3b 39 54 52 38 48 5e 21 56 5e 45 38 5d 4b 3a ' + '52 5d 3b 52 2c 37 39 49 22 51 2b 3f 33 29 4a 5b ' + '22 46 27 3b 28 53 4e 25 3e 3d 45 5d 3a 56 5d 27 ' + '49 58 4f 5a 33 3c 3f 2d 44 52 36 46 0d 0a 4d 45 ' + '52 28 28 5b 34 53 31 3b 4c 4d 46 33 42 4a 4c 4d ' + '48 42 53 2b 3b 40 40 44 5c 47 27 54 4a 54 50 23 ' + '33 41 2c 23 40 34 51 24 56 53 2c 5b 23 4a 28 50 ' + '2c 55 51 39 2c 57 2f 4f 4c 5d 2f 0d 0a 4d 23 5a ' + '3b 56 45 31 30 4f 3c 31 2a 4c 3a 43 2b 23 51 35 ' + '28 23 54 28 36 44 3f 47 2e 3e 2a 55 39 38 54 3a ' + '38 52 2d 57 2d 2b 45 40 27 49 42 2c 4a 22 3a 51 ' + '4c 5b 3e 2a 4a 43 2b 4c 5b 3d 0d 0a 4d 39 5b 2c ' + '29 4d 50 4b 5c 47 5d 5a 4e 42 27 54 5b 45 40 3c ' + '38 33 51 33 58 34 5d 2f 22 60 3e 3e 55 3d 2e 4e ' + '58 24 4b 52 33 57 48 3b 21 3f 40 53 37 37 3d 3d ' + '2e 58 27 47 2d 2f 36 26 2c 0d 0a 4d 53 4a 56 3c ' + '22 4b 38 41 50 25 5a 21 44 46 49 25 4a 51 44 39 ' + '52 21 4c 60 49 4d 43 45 29 28 35 3d 29 42 2c 21 ' + '3c 3b 3e 5b 59 48 43 24 30 56 5c 38 60 2f 25 24 ' + '5a 5b 57 5e 42 40 5e 3a 0d 0a 4d 25 59 2c 4c 50 ' + '5c 43 42 46 4d 26 2c 47 5d 48 4b 52 4a 36 45 3d ' + '33 43 3a 23 42 4e 22 38 29 56 59 27 5b 34 5b 21 ' + '60 50 3e 56 3a 59 40 3f 34 29 27 5b 55 37 56 2d ' + '4a 57 39 36 38 22 25 0d 0a 4d 43 5d 23 5f 60 2a ' + '55 2c 38 52 3e 35 28 2f 54 49 53 48 29 26 21 38 ' + '23 21 2d 3c 31 45 46 51 57 2f 55 4a 27 5e 41 2d ' + '3c 41 31 52 54 53 3b 31 56 5e 4d 2c 56 5c 23 29 ' + '59 25 24 30 60 30 0d 0a 4d 30 2f 57 4b 46 21 57 ' + '26 42 31 3b 31 23 2a 21 47 2e 2d 51 5c 34 32 2a ' + '26 53 47 4c 2a 42 2c 3b 5c 24 42 47 5b 2c 53 3b ' + '4f 45 4a 31 4e 51 3e 22 51 22 40 3c 35 2e 57 29 ' + '29 51 31 44 38 0d 0a 4d 28 31 3f 56 4a 36 37 26 ' + '34 21 58 2d 23 25 29 4a 50 25 34 4c 3e 26 5b 3e ' + '3a 3c 42 58 26 3f 60 4b 45 35 35 34 5f 3a 42 5e ' + '47 54 48 26 4a 30 2b 5e 3c 3d 51 34 49 56 26 21 ' + '57 48 4d 4e 0d 0a 4d 58 5c 3d 5c 54 59 25 27 3b ' + '25 2a 31 30 21 34 40 60 47 26 3a 44 2a 51 2e 58 ' + '5f 36 43 22 5b 42 50 38 3f 4d 31 2a 4f 55 5b 54 ' + '41 34 56 30 54 38 60 29 25 3c 4f 55 28 49 43 23 ' + '2f 60 25 0d 0a 4d 30 21 53 5e 55 2d 4c 3b 33 5e ' + '52 2c 39 44 48 45 37 4d 51 53 37 2c 23 47 43 4f ' + '31 2b 47 3b 4d 2f 3e 48 25 30 29 27 28 25 25 28 ' + '4f 28 5e 45 25 4d 58 2e 3a 2b 21 2a 5c 54 56 29 ' + '36 46 0d 0a 4d 2a 60 52 33 51 33 42 48 51 44 5d ' + '4a 40 2b 50 33 31 27 29 28 21 48 2b 38 26 53 21 ' + '29 60 5b 55 29 27 28 27 5e 2d 2d 2f 29 5e 55 31 ' + '4d 2e 33 43 4e 23 30 52 3e 40 2c 39 3b 27 47 2d ' + '3c 0d 0a 4d 35 2e 54 54 53 3a 32 32 30 2e 3a 44 ' + '40 3c 59 5b 34 23 59 3a 25 27 4f 40 35 50 58 2f ' + '5b 54 33 60 41 43 51 37 2c 49 50 33 30 51 3d 44 ' + '2c 23 53 43 4d 37 24 27 29 29 27 46 43 37 2e 2f ' + '0d 0a 4d 4f 34 2c 2e 4b 21 27 25 2c 45 4e 5d 27 ' + '59 50 4c 58 45 5f 32 52 4b 31 32 21 3d 53 5e 57 ' + '42 4e 4d 56 4e 39 3b 40 31 30 36 35 52 59 3b 3c ' + '2c 21 3a 4c 47 30 4d 36 45 46 2c 55 50 5c 25 0d ' + '0a 4d 49 25 5b 49 25 44 58 3a 4f 3f 39 5c 51 51 ' + '45 52 2c 5e 39 3b 3f 5c 28 57 4a 4a 53 2f 4e 5d ' + '4f 52 55 35 54 55 60 5b 4c 5c 3c 36 55 2a 4e 33 ' + '50 2c 43 2e 4a 52 2b 28 2a 53 59 21 2d 3b 0d 0a ' + '4d 2b 5e 34 53 2b 4e 48 4b 44 38 4f 27 2b 25 2e ' + '53 36 27 48 48 60 52 4c 4e 55 4f 55 35 35 4e 2b ' + '4e 57 29 39 4d 5a 4b 5f 32 45 0d 0a 39 2c 54 45 ' + '53 2c 5e 55 35 39 35 36 4b 35 46 44 3c 3c 3f 0d ' + '0a 4d 36 4a 4c 4d 2a 3b 5e 43 32 2c 48 4e 36 53 ' + '49 4b 49 56 44 5f 29 41 44 47 43 48 48 43 4a 2c ' + '4a 5b 31 28 4c 3a 3f 49 5e 3a 4b 3d 49 3a 57 4d ' + '50 53 22 56 4d 37 43 33 5d 3e 57 49 49 44 0d 0a ' + '4d 5e 44 3a 4b 23 28 51 44 2c 2e 53 4d 4f 5e 37 ' + '3d 32 44 50 51 50 32 52 3c 43 2a 44 4e 57 40 44 ' + '5d 25 46 57 3b 36 57 3b 4a 48 3a 41 3d 3f 42 3b ' + '43 55 2c 5b 3a 4c 57 2b 3e 47 2c 5a 4f 0d 0a 4d ' + '5a 3b 2f 4e 5d 52 55 46 37 2e 51 49 2d 5e 5d 3d ' + '4d 2a 31 4c 5c 3c 39 24 49 29 5f 53 35 54 44 4c ' + '4c 43 3b 46 5a 4a 2a 52 56 32 37 3a 51 2a 4f 4e ' + '49 56 4e 29 29 38 57 4f 58 33 3b 4d 0d 0a 4d 28 ' + '5b 34 3c 32 28 30 43 5f 28 4a 4d 25 2b 4c 5a 4e ' + '46 44 37 42 5d 2f 4f 48 46 44 45 39 4d 4e 5f 49 ' + '49 24 5a 5e 5a 45 28 56 47 27 43 28 5a 53 3f 3b ' + '2e 4d 3f 30 4d 29 3f 3f 22 4b 2b 0d 0a 4d 37 53 ' + '3d 3e 45 5a 5d 4f 5c 2b 52 5b 48 38 58 56 3b 2d ' + '39 4a 37 26 31 34 48 52 2f 35 56 4a 4c 39 21 47 ' + '56 43 46 4d 36 2e 2c 3b 5d 52 27 26 5c 24 35 44 ' + '36 24 52 22 30 31 4e 3f 4d 36 0d 0a 4d 46 29 3f ' + '5f 60 21 3f 44 37 41 3a 5b 34 53 47 3f 25 25 4a ' + '2d 38 4d 48 3b 3b 4f 58 26 33 33 29 57 32 32 30 ' + '4b 26 4f 29 2f 38 3e 2a 4b 31 50 52 51 31 48 4c ' + '3b 39 43 2f 4e 53 33 5b 3b 0d 0a 4d 54 48 42 53 ' + '4b 5b 43 5f 60 29 55 4b 5f 50 60 2c 49 3f 49 41 ' + '31 4b 23 28 4f 36 2e 2f 34 51 4c 2f 56 2d 38 37 ' + '50 4e 4c 49 55 51 58 3d 4e 38 55 44 60 5f 53 4b ' + '31 55 56 5c 2e 47 36 37 0d 0a 4d 59 46 26 45 57 ' + '5b 5e 43 57 3c 5c 55 4a 3f 56 38 5a 35 5a 3a 57 ' + '2e 4e 3a 46 22 4d 49 26 53 32 38 5e 39 42 2e 50 ' + '5f 52 49 32 5f 21 2e 2f 52 3d 2c 55 5f 43 3e 36 ' + '22 23 34 50 28 5e 27 0d 0a 4d 43 4c 50 4b 39 5c ' + '44 4b 37 41 4b 3e 5c 55 3e 36 30 37 24 24 31 45 ' + '56 2e 47 4a 4a 21 5b 35 56 55 4e 3a 57 39 37 26 ' + '4c 3a 45 2f 3e 32 32 52 29 2d 29 2a 5b 28 4f 40 ' + '29 53 40 3f 58 35 0d 0a 4d 59 56 26 5f 55 3b 30 ' + '39 2f 51 36 55 29 28 39 60 4e 58 3f 34 3f 2d 33 ' + '3b 3a 2a 37 22 3a 5c 43 57 2d 45 2f 3b 3a 41 39 ' + '45 28 40 4b 4e 47 24 40 2f 42 4d 46 5d 54 56 35 ' + '3b 38 52 51 52 0d 0a 4d 51 3f 47 3e 60 3f 49 50 ' + '2a 5c 4d 5c 24 5a 4c 3b 52 36 36 5c 26 44 33 50 ' + '4a 5b 27 3f 46 2f 49 2d 3e 4e 2d 4a 24 43 44 3e ' + '26 3d 59 28 30 56 5f 21 2f 2a 5c 3c 42 44 46 24 ' + '57 4e 44 3b 0d 0a 4d 25 43 49 3f 50 55 49 46 47 ' + '5f 5b 30 55 26 32 32 5b 47 4e 32 22 54 3e 3c 41 ' + '3c 23 42 49 4f 3d 2a 54 43 34 58 39 2b 42 57 42 ' + '3e 55 5d 31 40 56 35 26 2e 31 56 53 37 46 5b 3e ' + '3e 53 40 0d 0a 4d 40 2c 3b 37 23 26 34 4f 50 4c ' + '41 5f 54 4b 3f 54 47 34 51 3d 3a 39 2b 60 40 34 ' + '3b 55 59 53 57 5b 5e 2a 3a 44 52 29 51 4f 5b 2a ' + '36 4d 3f 22 25 55 39 56 2a 57 34 2c 40 4e 38 37 ' + '4e 2f 0d 0a 4d 35 44 28 59 2f 28 5b 26 4f 26 56 ' + '57 50 5f 28 44 4c 34 4d 4a 2b 42 55 46 45 46 3d ' + '4c 49 51 37 55 3f 30 57 47 3e 29 3b 3c 33 3b 45 ' + '38 47 22 2c 3e 23 35 43 35 2b 3a 36 51 3e 2b 25 ' + '4f 0d 0a 4d 24 52 25 4e 59 27 3a 4b 34 41 2a 22 ' + '37 3f 31 5c 54 54 23 58 49 3d 5f 36 5e 27 4f 42 ' + '54 4b 27 3c 28 36 36 55 4f 21 5c 52 23 4d 53 5f ' + '60 21 5f 47 37 49 3b 49 42 3d 28 40 4e 2c 5f 42 ' + '0d 0a 4d 35 38 46 26 37 3b 52 2f 2e 23 5f 40 2a ' + '4b 5f 25 4f 50 43 48 5e 4f 36 29 32 3d 33 27 3c ' + '3b 5c 51 2f 27 5b 35 5c 5c 54 46 50 5e 27 3f 42 ' + '47 33 4f 41 2e 2b 32 5b 28 49 2f 3c 31 4e 4a 0d ' + '0a 4d 4c 53 5c 5b 40 22 3c 47 5f 2e 46 58 5f 3a ' + '21 51 43 29 55 54 3b 55 47 2b 24 3b 2a 53 3e 34 ' + '4d 4c 44 40 37 4a 27 47 25 29 55 29 45 43 4d 57 ' + '4c 29 42 27 4c 5b 46 24 4f 24 3f 48 58 5b 0d 0a ' + '4d 34 52 54 32 5c 4d 29 5d 2d 54 52 59 54 5a 3c ' + '56 59 30 24 52 3b 3e 25 2d 3d 5c 33 30 2a 2b 3e ' + '5a 2c 3a 2c 34 4d 29 32 24 51 58 26 57 2d 33 2f ' + '34 31 50 4b 47 31 40 36 5d 4d 24 24 28 0d 0a 4d ' + '45 5a 47 37 2e 2c 5e 22 33 35 4a 2a 2d 30 60 4e ' + '60 22 21 58 4a 38 60 22 22 5b 3c 26 43 51 41 4f ' + '4f 37 53 5e 3a 33 3c 43 5a 2b 23 21 31 36 44 23 ' + '26 25 24 39 27 47 4d 34 45 33 5e 27 0d 0a 4d 22 ' + '3c 23 27 47 5e 3a 2f 3a 31 4f 28 5b 24 59 4a 30 ' + '41 56 58 3c 5c 46 4c 26 3d 35 35 54 2b 24 3e 56 ' + '38 4e 2c 3c 42 4e 56 43 45 46 3f 44 3e 2a 3c 54 ' + '3e 36 2b 39 50 21 34 2f 24 60 36 0d 0a 4d 52 2e ' + '31 32 5b 2b 33 48 4a 45 2d 53 22 30 27 43 25 22 ' + '5c 31 3a 30 58 2f 29 4a 5a 25 5a 3d 42 48 60 21 ' + '51 37 3e 44 42 27 55 2c 59 2d 23 27 29 45 21 28 ' + '49 25 3b 47 2e 3f 4b 31 50 30 0d 0a 4d 58 38 40 ' + '3e 54 23 4f 35 4d 45 2f 60 2f 54 48 30 22 36 21 ' + '51 40 22 44 56 33 33 4c 4b 2c 44 47 4a 5c 3f 51 ' + '33 60 2d 54 39 21 3b 4f 5d 2a 3e 58 59 21 58 21 ' + '49 24 4b 4a 42 46 2d 31 52 0d 0a 4d 33 57 49 56 ' + '23 37 59 2a 5c 5a 4a 53 4d 4d 52 2a 60 48 42 48 ' + '51 51 55 27 4e 3a 2d 45 28 46 56 3b 51 47 52 3a ' + '5b 28 38 2c 4f 40 27 21 49 56 32 58 4f 4d 60 21 ' + '0d 0a 22 51 59 58 60 59 4a 39 0d 0a 4d 55 22 58 ' + '27 40 54 50 24 2d 47 5a 54 2c 59 35 49 4c 23 56 ' + '40 34 46 2d 49 42 22 2c 2a 5f 50 21 3f 25 22 40 ' + '5f 2c 21 51 51 59 49 5f 30 48 29 2f 29 4a 2e 32 ' + '5b 27 51 59 49 43 4a 40 26 0d 0a 4d 52 37 28 58 ' + '51 30 52 28 5e 5b 43 46 43 3b 29 3d 30 21 52 3a ' + '28 2a 35 37 4a 5b 44 34 46 36 54 21 24 49 60 60 ' + '27 3a 47 2e 22 4b 38 21 52 3c 35 24 32 5b 30 3f ' + '4b 31 28 2e 32 33 32 22 0d 0a 4d 52 25 51 53 47 ' + '4f 34 58 29 2e 3f 25 32 30 3c 24 44 3c 35 2e 33 ' + '44 2b 58 48 3b 29 32 33 39 23 40 40 3c 3d 5a 3a ' + '35 5a 40 2a 59 45 58 53 57 49 46 57 2b 42 44 2d ' + '4a 4d 60 4a 4e 23 5a 0d 0a 4d 47 5c 34 53 5a 3f ' + '37 53 34 24 24 40 58 48 5c 38 27 2d 29 5b 26 5d ' + '24 41 3f 56 53 34 4a 21 4e 50 57 3a 4e 43 2e 26 ' + '28 2f 3e 49 28 2b 39 51 57 4a 31 2f 4c 47 43 2e ' + '5b 3d 51 34 41 3e 0d 0a 4d 3a 45 35 58 5b 3c 54 ' + '37 28 29 4a 4a 2a 3b 48 40 4b 41 4c 35 60 27 2d ' + '24 3e 33 34 43 41 43 5d 31 30 5e 51 28 28 23 49 ' + '60 2f 3b 2d 30 35 56 5f 4d 33 23 43 29 5e 47 42 ' + '49 50 22 4e 2f 0d 0a 4d 2e 3c 34 46 23 24 60 27 ' + '3b 52 2e 3e 5d 27 47 4a 53 42 46 23 41 42 23 34 ' + '60 23 26 21 57 49 57 30 47 33 2e 26 2c 47 43 40 ' + '55 50 5f 5a 55 28 38 60 58 48 5c 3c 59 2f 3a 40 ' + '33 33 5b 21 0d 0a 4d 60 58 5b 3c 46 4e 56 5c 5f ' + '3a 46 24 3c 38 28 4b 40 2e 5f 54 49 2c 3b 3b 25 ' + '24 60 47 27 54 4a 32 2c 40 5f 32 42 5b 38 58 59 ' + '48 55 37 43 4f 35 54 30 59 34 50 3d 48 56 24 43 ' + '25 22 35 0d 0a 4d 29 27 2f 55 4a 52 4c 38 56 24 ' + '27 4f 30 5b 31 44 42 44 32 3f 27 28 29 25 35 35 ' + '2d 42 4a 42 37 27 3f 5a 27 25 35 2f 42 2a 56 4f ' + '5b 5e 57 38 52 2c 47 49 43 56 47 59 42 3a 5a 53 ' + '4e 35 0d 0a 4d 40 54 45 29 59 51 5a 30 22 59 52 ' + '3e 5b 59 4b 2b 4e 5d 3f 3a 31 26 56 2e 4a 41 36 ' + '5e 3b 56 55 5a 5c 33 50 49 2f 5e 2f 56 2a 37 58 ' + '33 4f 26 54 57 55 3b 43 34 2b 3e 29 46 39 4e 25 ' + '3f 0d 0a 4d 59 3a 52 3b 4b 31 4b 4e 2c 29 23 3b ' + '57 24 35 52 49 5e 43 3b 46 4b 4b 53 36 38 56 57 ' + '31 37 3d 54 22 25 39 45 3b 54 46 4b 2f 43 5e 2b ' + '35 4d 34 3e 27 33 5b 3c 27 2b 3e 5d 55 50 3a 3f ' + '0d 0a 4d 2b 52 21 37 27 51 44 43 3a 42 5e 27 5b ' + '4e 31 58 55 44 4e 3b 3e 2e 26 37 52 33 37 2b 49 ' + '56 40 5a 39 3c 32 26 5c 4f 46 46 22 3b 41 5b 4d ' + '52 55 58 5e 5e 55 4b 34 3b 43 49 3e 34 48 4e 0d ' + '0a 4d 5b 49 56 4d 36 3f 29 2d 2b 28 2f 53 26 3d ' + '4a 49 49 52 22 3c 28 31 2f 48 36 48 5f 25 55 45 ' + '3a 36 4b 50 36 48 29 42 57 3d 2f 5a 4a 5c 5d 4a ' + '4f 51 37 3c 37 34 33 30 48 4b 2b 27 45 43 0d 0a ' + '4d 43 59 3d 55 3e 3f 56 3b 4f 5f 2d 30 52 21 5d ' + '4d 31 37 24 53 52 31 36 2c 46 36 31 46 39 47 57 ' + '54 4d 4d 56 5a 49 3e 48 2a 44 4e 23 46 4b 44 37 ' + '46 5c 3f 43 24 4c 36 34 43 30 57 28 45 0d 0a 4d ' + '5f 32 55 3b 2f 51 48 44 43 5f 41 2d 31 2a 5d 2c ' + '48 22 2c 57 5d 36 5a 4c 21 3d 5a 4d 5f 35 37 4d ' + '3f 41 55 38 4d 3e 54 49 4d 24 4e 32 48 28 27 30 ' + '36 5e 4f 52 54 5c 3c 4e 29 47 2d 31 0d 0a 4d 3a ' + '48 5c 34 57 3a 41 3d 5e 4e 47 37 45 4b 2d 39 37 ' + '4c 55 47 3d 43 25 53 24 5b 28 33 5d 30 4b 3b 3a ' + '4b 4c 49 26 5e 4d 2c 46 2e 4d 26 3b 52 55 59 22 ' + '26 37 4b 3d 5a 5d 25 5c 2b 57 22 0d 0a 4d 42 3f ' + '54 46 3f 49 4b 24 46 26 59 3a 3d 49 43 2e 4d 56 ' + '4e 57 57 35 41 2a 29 54 38 3c 47 2b 51 2f 49 4d ' + '4c 38 47 34 2d 59 27 2d 3b 25 49 21 2b 2b 5f 50 ' + '60 2f 4b 33 3b 56 4b 51 55 42 0d 0a 4d 55 59 26 ' + '42 2c 44 3b 32 2b 5f 33 36 4b 49 4e 4c 5a 4b 3b ' + '44 2e 46 44 57 4e 54 3f 54 3f 2b 36 5a 3c 42 39 ' + '4e 2c 37 3c 43 54 4d 4b 2b 2b 27 2c 4a 37 2a 38 ' + '21 53 44 27 50 2a 4e 37 4c 0d 0a 4d 2a 4b 4d 2c ' + '32 5d 2b 43 28 2f 54 49 5e 40 5a 51 48 4e 4d 49 ' + '5a 2e 48 49 5e 25 4e 50 3c 60 3d 46 5f 46 4d 22 ' + '5b 54 5a 58 4c 56 56 24 3e 4b 23 50 60 50 59 25 ' + '3b 51 56 38 39 24 3e 60 0d 0a 4d 55 54 4d 2b 4b ' + '32 2d 2e 53 3e 41 4d 27 3b 5f 45 4b 57 34 2e 49 ' + '2b 3c 5a 2b 27 38 56 50 22 31 41 3f 3a 47 44 5f ' + '36 4f 2e 3f 26 35 42 52 3a 35 29 3e 3a 3f 24 54 ' + '5c 46 3c 26 29 3e 36 0d 0a 4d 29 53 35 53 58 2b ' + '4d 59 25 30 33 53 4c 3c 2a 48 26 2f 4e 33 31 29 ' + '34 35 26 43 4b 41 5b 52 58 45 46 32 54 47 36 2e ' + '5b 43 28 23 28 59 59 58 26 2a 33 49 4e 45 5f 42 ' + '23 27 3a 3a 4b 4f 0d 0a 4d 34 27 4d 5f 5b 35 5a ' + '5a 36 50 4d 4b 3a 3b 5c 3f 29 22 47 4b 33 23 3d ' + '4f 51 36 31 21 4a 56 47 4d 4b 22 31 52 32 31 52 ' + '40 24 25 32 2e 3e 3a 3c 4d 23 32 40 55 4d 26 59 ' + '3b 26 33 33 22 0d 0a 4d 45 4e 42 60 56 5e 53 26 ' + '58 3d 41 51 35 52 29 54 39 36 41 36 32 2b 3d 2a ' + '22 2d 52 47 43 53 57 49 3c 3b 42 36 2a 31 3c 23 ' + '54 50 32 2c 3f 3b 51 5f 45 34 50 56 45 4e 36 32 ' + '31 46 24 32 0d 0a 4d 2e 3f 3b 56 51 33 32 37 54 ' + '30 59 5a 56 38 5e 49 30 57 42 51 5f 46 56 4c 23 ' + '33 2b 56 45 60 58 27 5c 55 49 36 55 51 27 23 60 ' + '54 5c 28 51 44 39 58 5e 47 44 35 4b 3a 41 23 2a ' + '44 29 4d 0d 0a 4d 0d 0a 48 58 55 4e 28 36 34 25 ' + '42 4f 2e 2a 52 39 45 43 43 45 3a 29 60 60 2c 3c ' + '2a 3f 56 4a 5e 2d 46 33 47 5d 26 5b 5c 2c 53 50 ' + '4e 52 5e 4f 2e 54 3c 59 3b 3d 25 53 56 4b 54 2e ' + '4c 37 38 3e 0d 0a 4d 55 36 56 2c 4a 52 57 29 38 ' + '27 2a 47 28 51 5d 4a 5c 27 29 2b 25 27 22 4b 4e ' + '30 4b 60 58 23 34 57 30 5d 30 45 3f 34 36 4d 59 ' + '5e 2b 42 28 5c 27 50 56 2e 56 2a 41 4a 46 34 58 ' + '49 4e 43 0d 0a 4d 54 35 4f 28 30 44 44 2b 4b 54 ' + '24 45 45 29 5e 5d 35 5b 43 34 3d 34 4d 38 44 41 ' + '42 45 38 32 41 4c 51 24 27 57 23 2e 23 32 59 4d ' + '30 24 33 60 58 26 24 53 4e 21 5c 3f 36 41 55 30 ' + '4d 25 0d 0a 4d 24 44 46 3e 4c 43 3d 22 36 5b 22 ' + '4a 4e 53 2f 43 37 39 4b 56 27 51 2f 4a 54 2a 40 ' + '3a 47 3a 2b 4d 2b 58 43 57 4b 53 42 4b 3c 3e 4f ' + '5f 60 60 5f 4b 2b 57 4e 47 4c 25 41 44 3b 28 39 ' + '45 0d 0a 4d 58 21 29 27 3f 5f 2e 4f 28 53 37 4d ' + '59 3c 4e 31 3d 4f 44 4b 43 3a 31 56 25 34 4b 36 ' + '56 42 41 4e 46 3e 2d 2e 5f 2e 3a 58 4f 34 39 55 ' + '43 54 43 54 2c 2f 49 59 53 3e 5d 28 54 29 58 50 ' + '0d 0a 4d 4d 53 2f 24 41 29 34 2e 50 21 5e 56 33 ' + '37 21 41 56 5e 3a 46 59 21 5e 46 33 30 4c 40 2e ' + '22 21 57 2f 3e 4f 27 47 2b 44 5b 2f 3a 51 51 58 ' + '4a 41 48 60 2a 3b 42 3f 2d 3c 4a 5b 47 39 41 0d ' + '0a 4d 53 59 4a 35 26 55 3d 59 59 48 4c 25 35 52 ' + '4f 60 4b 29 56 43 3d 4d 32 54 2c 22 4a 24 58 26 ' + '36 2f 25 21 3c 2a 51 2e 58 23 60 29 48 48 47 29 ' + '59 27 3a 4e 3d 46 38 38 21 58 27 3a 47 38 0d 0a ' + '4d 44 4a 25 39 56 39 58 4a 29 30 3f 33 5f 4a 5c ' + '34 51 4c 60 25 31 57 48 21 52 22 33 5d 3c 34 46 ' + '42 5b 4c 23 38 32 21 28 37 5b 54 29 21 23 27 4a ' + '53 51 56 49 4b 43 3b 44 3f 51 30 4a 22 0d 0a 4d ' + '37 28 27 3a 4a 21 42 56 2b 46 30 45 40 2d 56 2e ' + '21 35 2d 4c 44 60 23 44 59 59 49 5c 54 4b 46 31 ' + '46 21 50 60 2c 34 45 4e 60 3c 3d 5a 26 24 3d 4c ' + '4b 44 5d 38 21 59 38 47 51 5d 2a 29 0d 0a 4d 3f ' + '28 60 59 29 48 48 54 50 56 32 4f 28 4a 51 3b 48 ' + '60 56 55 41 55 3c 54 3d 45 3a 2a 5a 48 34 34 4e ' + '3e 59 48 46 26 2c 4e 31 43 2d 36 2b 40 2b 43 3a ' + '2e 58 2d 28 47 23 2e 3e 5f 60 51 0d 0a 4d 30 5f ' + '54 33 28 21 40 2c 60 38 5b 35 2b 43 22 44 27 42 ' + '43 3b 27 4a 24 58 53 5d 21 30 4d 56 5a 4f 25 29 ' + '41 5d 40 43 4e 2f 4b 34 4e 27 2b 47 27 38 3c 35 ' + '28 26 37 21 5f 42 4e 29 50 51 0d 0a 4d 51 30 51 ' + '4d 27 2b 44 58 22 4b 59 49 5f 49 48 60 23 46 45 ' + '2b 44 27 40 34 5a 2d 32 3c 39 5b 34 41 29 3b 21 ' + '3c 3f 45 40 3e 23 34 4a 48 50 2e 2e 3a 29 4c 3b ' + '53 34 40 3d 31 26 2e 5d 60 0d 0a 4d 4e 32 4f 31 ' + '2c 60 27 26 5f 4c 3a 39 40 2a 53 24 3f 36 45 2f ' + '47 51 56 21 49 57 23 3c 23 4f 30 25 49 5d 41 31 ' + '43 4e 23 56 4a 27 34 2c 30 3c 5d 4a 28 44 43 4d ' + '56 4b 49 2c 3c 3f 34 55 0d 0a 4d 60 2d 56 30 21 ' + '55 44 58 48 44 5c 58 5c 54 39 37 49 2e 2e 5d 33 ' + '41 31 41 30 2f 59 4a 5a 22 5b 54 40 36 58 38 5f ' + '32 48 21 2b 24 5f 36 49 2a 59 37 2f 57 48 45 37 ' + '3a 21 5d 3c 55 28 5a 0d 0a 4d 5f 60 32 43 22 5d ' + '4e 3a 47 3a 22 3e 57 55 4a 26 59 2b 23 2f 26 3c ' + '55 2f 34 48 60 53 56 49 44 5c 4b 5b 28 34 27 2e ' + '2c 3c 59 49 4a 40 3b 42 3f 21 2d 30 2c 2b 59 59 ' + '48 51 40 5c 47 43 0d 0a 4d 46 46 34 5f 56 30 52 ' + '3c 39 5c 55 50 43 50 2e 3a 38 22 2d 57 5b 35 56 ' + '23 40 5f 5c 60 3f 46 40 45 36 2b 56 40 26 42 5c ' + '38 28 58 4a 37 5c 43 5d 5a 2c 2a 22 41 48 27 3a ' + '4e 40 26 52 35 0d 0a 4d 29 48 45 21 27 21 4b 40 ' + '2c 47 39 56 53 31 4a 2d 50 29 2d 22 25 2b 4e 41 ' + '33 4a 3d 51 4b 45 53 51 42 46 2d 44 24 59 25 3d ' + '43 3a 33 51 33 38 59 29 29 24 4d 4f 38 5c 35 50 ' + '37 44 34 3f 0d 0a 4d 2e 33 58 25 31 5c 51 5e 55 ' + '28 43 31 5e 2c 5b 43 37 2d 36 4f 34 24 3c 54 53 ' + '45 28 5e 45 30 26 5a 33 35 39 49 4b 49 4e 47 55 ' + '36 56 34 24 34 46 25 5d 45 25 4f 3d 5a 5d 53 43 ' + '51 2f 47 0d 0a 4d 2c 2b 43 2f 53 4c 36 38 56 5e ' + '45 24 25 30 35 54 41 3c 2b 34 23 50 3a 39 3f 4e ' + '5c 49 43 48 34 4d 56 5a 29 3a 4d 32 3a 3b 2f 5a ' + '3a 52 30 4b 5a 44 3b 3f 49 4b 2f 3d 3e 4f 3f 46 ' + '4b 3e 0d 0a 4d 45 3a 47 3c 56 55 50 4c 2a 3b 49 ' + '35 57 3f 5c 60 23 36 45 52 38 3c 3e 3c 5f 24 59 ' + '28 5c 4d 4d 3b 57 29 33 37 4c 2b 45 58 5d 54 3a ' + '4c 52 5f 54 55 5a 2e 53 4d 49 3d 30 3d 37 3f 32 ' + '59 0d 0a 4d 34 3b 49 5b 29 37 4a 3d 27 4d 4d 2b ' + '4d 45 5f 2e 41 44 36 31 46 5b 3b 3e 46 46 4e 2b ' + '22 34 5e 2f 52 5e 31 5c 4a 45 4d 5b 4e 2a 2f 55 ' + '39 4b 3a 32 2a 2f 5c 60 34 52 55 25 45 24 2b 4a ' + '0d 0a 4d 58 36 22 2d 5e 49 46 4b 5b 32 55 43 49 ' + '5d 51 3b 4e 49 42 32 32 21 55 50 2d 5f 42 4c 42 ' + '5f 5c 60 40 5b 30 3b 55 31 3c 36 3b 53 36 5c 50 ' + '59 34 51 47 60 4b 31 30 40 2f 57 57 27 27 4f 0d ' + '0a 4d 59 27 53 37 35 2d 2b 4f 3d 2f 51 5e 28 41 ' + '44 24 33 2b 4e 2b 3f 2b 4d 4a 3d 29 4f 49 2b 2a ' + '58 32 36 25 40 49 27 35 37 55 52 50 5e 24 3b 40 ' + '56 47 58 3a 5c 4f 28 5b 42 57 56 38 5f 2d 0d 0a ' + '4d 2f 37 4d 56 55 43 3a 5d 5f 39 47 0d 0a 3d 33 ' + '3b 4b 47 32 49 48 34 3b 47 48 38 5c 3c 35 33 51 ' + '5c 42 3c 32 32 3f 2a 3b 2c 3b 35 3d 2e 33 58 49 ' + '4c 2f 5d 49 36 22 4a 2d 32 42 56 5b 55 27 53 0d ' + '0a 4d 4b 5d 2f 5b 55 3e 26 3d 46 24 4b 29 28 43 ' + '29 28 4f 52 4d 37 4e 3d 2f 5e 27 3f 43 33 30 3b ' + '49 39 45 37 3c 40 5d 50 31 3a 54 5d 32 5e 25 45 ' + '5e 28 21 29 3f 3f 41 36 4c 5b 51 40 50 39 0d 0a ' + '4d 3c 38 32 4a 3c 26 45 33 2c 2c 4a 3c 29 57 23 ' + '48 5e 3b 51 5e 46 5b 55 3a 4c 38 28 58 4b 40 2c ' + '3e 4b 4a 5e 36 4d 52 5c 5e 21 4d 3f 41 4e 29 23 ' + '60 4c 3b 31 5b 4e 44 24 35 48 36 57 50 0d 0a 4d ' + '2b 4b 60 4d 48 49 27 2a 51 53 40 3b 3c 2d 51 36 ' + '3f 4d 59 2f 50 3d 22 32 5e 34 37 24 56 3f 41 41 ' + '4b 3a 3e 29 21 24 4b 2b 29 5f 35 37 4c 55 4e 3d ' + '30 4d 59 38 44 4d 28 4b 25 54 52 2d 0d 0a 4d 52 ' + '52 3d 5a 5c 59 5c 29 5f 23 55 57 3b 33 59 4e 45 ' + '39 40 26 5e 33 59 3a 5e 47 36 4c 35 49 5e 26 3d ' + '56 4c 44 39 3d 4f 4e 22 3f 46 60 54 55 43 3a 5e ' + '31 2b 47 43 51 52 5b 4c 5c 4b 3d 0d 0a 4d 3a 37 ' + '49 4e 4a 53 2d 2f 3c 56 34 4d 49 3f 60 5c 32 30 ' + '49 41 32 3a 4c 30 36 37 51 35 48 33 4c 4c 51 36 ' + '5f 54 45 25 28 58 5a 49 3e 56 3a 57 39 38 2b 4b ' + '23 32 31 36 5c 44 54 2e 3c 40 0d 0a 4d 2a 2c 44 ' + '23 2d 28 2d 51 3c 57 2d 48 21 23 3c 2c 44 44 3f ' + '29 33 2f 21 2f 57 4b 3d 49 27 2d 2b 2c 57 2f 36 ' + '52 4c 57 58 39 60 2b 52 56 22 45 2f 46 43 2f 40 ' + '5e 3f 5d 3a 4b 57 32 29 3b 0d 0a 4d 57 4e 38 30 ' + '21 27 2a 30 56 21 56 53 5d 2a 3d 4a 24 41 4f 24 ' + '47 4d 45 24 2d 45 3f 31 5e 57 59 38 49 33 5f 5b ' + '5c 26 45 36 43 4a 39 48 44 4e 52 21 43 60 29 2f ' + '5e 4d 2b 5f 60 2a 23 4d 0d 0a 4d 3b 2d 37 5c 3b ' + '3b 5f 41 54 36 5c 60 2a 4b 4e 34 35 58 47 33 4f ' + '41 4e 51 41 55 2a 37 34 3b 46 32 39 28 55 29 28 ' + '31 3e 5e 21 5f 5c 60 42 4f 32 37 35 4b 5a 5d 5b ' + '3c 50 30 32 2b 2a 2f 0d 0a 4d 3d 26 21 53 59 48 ' + '2b 25 4b 3e 3a 57 2d 4d 2f 4d 36 5d 42 58 46 42 ' + '3b 4f 47 4f 35 35 30 47 2b 52 56 2e 54 32 5e 43 ' + '4f 4f 52 28 28 39 48 45 3f 2e 23 2b 50 33 5e 55 ' + '3b 4d 4f 3a 46 2e 0d 0a 4d 50 2d 4f 3c 30 4d 28 ' + '26 58 36 33 27 28 4b 29 4d 49 45 4c 39 28 59 23 ' + '60 4b 2a 49 51 52 2e 35 5f 3a 4d 41 3f 42 32 2a ' + '57 44 3e 2a 3a 28 25 2d 47 21 28 58 27 5b 35 2f ' + '30 47 27 42 40 0d 0a 4d 48 5d 2f 55 2a 57 44 44 ' + '46 4c 3b 44 3b 22 3f 39 2a 3f 25 60 46 47 51 37 ' + '5d 56 39 46 38 51 53 5d 42 2f 27 2d 36 29 3d 3f ' + '4d 5b 36 37 55 33 24 27 21 27 3b 27 38 34 43 58 ' + '46 55 26 2e 0d 0a 4d 59 4c 48 5b 46 53 22 31 48 ' + '59 53 5a 44 3f 26 23 58 53 30 59 4a 51 2f 26 56 ' + '4d 46 35 4b 54 3c 35 45 23 2d 29 3e 23 38 4c 3e ' + '35 34 2f 56 29 21 5b 55 46 5a 3d 4a 4c 34 5e 43 ' + '36 36 4a 0d 0a 4d 3b 2f 32 46 39 4c 50 25 4e 2c ' + '47 29 26 2a 56 29 24 4d 3d 3c 54 46 3b 33 4d 3d ' + '47 35 2f 34 28 36 2a 39 36 5b 27 28 2f 3f 5e 2a ' + '5c 5f 21 49 2c 44 2d 49 49 56 44 57 54 44 3e 2b ' + '2a 5c 0d 0a 4d 2b 3b 58 53 50 5a 59 53 44 34 49 ' + '33 33 2b 41 43 45 3e 53 55 28 3f 2c 4c 44 4c 5c ' + '36 32 50 26 58 3f 38 55 39 4e 38 41 3d 3a 37 21 ' + '38 53 32 44 32 30 39 50 5e 3f 3c 4e 33 43 5f 36 ' + '4c 0d 0a 4d 49 47 2c 3e 49 22 31 39 33 28 44 4f ' + '59 3f 3f 43 25 2c 55 2d 59 28 4b 56 36 55 57 5f ' + '60 29 44 29 2e 32 2e 56 2f 4d 32 59 29 25 4d 37 ' + '48 3d 2d 26 42 33 2c 25 38 4c 4e 33 40 5f 52 3a ' + '0d 0a 4d 5a 60 60 2c 33 5d 2e 3a 21 2c 5b 3e 3e ' + '5d 2c 41 23 44 5b 35 27 29 4b 51 2f 34 52 4f 29 ' + '48 5e 40 5d 2f 27 51 56 2d 41 3b 21 50 31 53 58 ' + '2d 36 2c 3c 4d 43 56 5e 21 5d 4a 34 34 21 56 0d ' + '0a 4d 24 5c 38 49 48 59 37 5f 60 21 4b 47 39 4c ' + '55 5e 60 44 21 53 43 4e 21 31 3c 4c 5e 21 5b 3a ' + '44 27 60 28 5c 55 29 28 35 22 21 43 3d 32 3f 39 ' + '3d 35 56 30 48 56 45 40 2c 21 21 51 34 5c 0d 0a ' + '4d 60 2c 25 5b 24 59 25 60 5f 2e 31 56 27 2d 32 ' + '2e 3e 57 60 5b 34 42 44 4b 21 28 29 3f 60 5c 5e ' + '3a 47 60 36 2f 29 2f 2f 54 4a 37 5a 30 30 2e 3c ' + '3e 3a 5a 31 31 43 3e 37 26 2c 58 60 48 0d 0a 4d ' + '39 37 56 22 5f 34 3d 5e 31 52 3e 55 3d 2a 4f 49 ' + '25 55 21 52 3e 56 3a 5a 29 2d 53 40 4c 2c 60 26 ' + '48 4e 37 21 3d 4d 40 5a 3e 5e 3a 3a 29 3b 57 31 ' + '34 45 26 28 42 36 5b 59 48 60 2e 4c 0d 0a 4d 39 ' + '5b 34 52 3c 5b 53 4f 2f 60 2f 42 42 30 3b 43 4e ' + '5c 5d 5c 35 2b 2d 26 4a 5a 28 56 3d 29 3f 27 27 ' + '29 49 42 23 22 4a 51 5d 51 26 3a 34 39 32 59 3e ' + '2d 3c 3c 55 38 22 43 38 51 38 5d 0d 0a 4d 41 35 ' + '28 53 3f 5a 2a 43 5c 45 42 2f 29 4a 24 21 2b 43 ' + '25 26 4e 26 2e 22 4e 25 53 53 30 60 24 3c 43 5b ' + '54 51 2e 5e 40 29 23 45 4e 2e 5d 30 4e 22 30 32 ' + '3e 2a 28 2a 22 22 3f 2d 23 4c 0d 0a 4d 53 24 2e ' + '56 3a 31 3a 3a 5a 39 2b 3c 3d 45 59 25 30 31 57 ' + '5e 4f 25 32 50 50 32 2f 2d 27 26 2d 53 26 4a 21 ' + '4d 36 3c 26 50 57 25 26 37 51 43 47 42 40 38 23 ' + '3a 32 2e 5d 24 5a 40 29 44 0d 0a 4d 5f 3b 25 39 ' + '56 29 5a 39 2f 5f 42 3c 5f 50 60 54 55 2f 3e 56 ' + '3e 5e 0d 0a 3c 54 22 44 24 40 47 52 3a 38 4a 43 ' + '3d 4e 21 58 48 38 4d 37 48 59 34 58 2f 2d 2d 43 ' + '60 34 44 5e 33 30 4c 2c 2a 32 0d 0a 4d 2e 55 32 ' + '4f 60 53 53 50 3c 54 22 32 48 2c 23 47 3c 3e 31 ' + '30 4a 2d 51 2f 54 53 31 23 29 37 40 5c 3d 5a 59 ' + '23 53 51 5d 3a 38 57 48 2d 2e 44 44 34 32 3d 52 ' + '23 58 4a 33 5b 4c 43 4d 57 0d 0a 4d 4a 32 3c 2e ' + '32 21 51 34 4c 45 2c 41 4c 60 24 3f 32 48 3b 2e ' + '3e 3f 4e 3a 45 41 44 44 3e 23 33 2d 4e 36 59 5c ' + '34 2c 49 2e 47 4c 37 4d 59 5e 55 24 50 5a 53 5d ' + '5e 2a 26 30 58 21 26 3e 0d 0a 4d 2a 2d 2e 5d 2f ' + '4c 2a 4c 28 4a 22 31 47 40 39 59 4a 35 5b 47 2f ' + '55 2d 32 50 59 2f 3b 60 4b 43 43 23 27 5b 59 49 ' + '4c 27 32 5b 23 22 39 3d 4c 3e 2a 2b 3c 22 3c 3e ' + '3a 40 2d 44 3e 60 32 0d 0a 4d 2a 44 2a 2e 58 59 ' + '2f 42 45 30 46 5b 21 3b 4e 50 5c 39 58 48 45 29 ' + '2a 38 53 43 4f 37 32 40 24 47 25 30 21 40 24 3d ' + '51 32 60 38 40 58 52 3e 5f 3e 43 37 40 47 5a 34 ' + '4c 24 5c 40 5e 3e 0d 0a 4d 2a 44 39 52 51 2f 3e ' + '4b 5b 29 3a 23 38 43 55 22 23 53 53 37 2d 52 56 ' + '2c 38 21 4a 23 59 5b 39 48 43 41 43 51 56 5c 34 ' + '47 31 33 21 27 4d 28 51 53 47 5f 4b 37 28 60 33 ' + '34 24 44 24 55 0d 0a 4d 2c 39 59 2d 2c 25 5e 33 ' + '5c 33 2c 48 58 4a 36 26 51 3a 5b 4a 3b 3d 4c 25 ' + '3c 52 4d 37 4d 33 2f 47 3e 26 2a 21 54 47 4d 4b ' + '4f 3e 56 51 3a 47 3a 5f 35 4e 48 2e 4f 3d 31 53 ' + '22 39 4d 3a 0d 0a 4d 3d 21 48 3c 3b 5e 4d 4a 34 ' + '4c 5b 21 31 5b 38 4f 54 55 4d 51 3f 26 36 46 3a ' + '3d 60 54 26 43 5a 25 39 32 4c 4b 3c 4f 3c 31 3d ' + '3d 3e 2c 3b 3f 55 3f 4a 4a 3d 4f 57 49 32 38 4f ' + '3b 58 39 0d 0a 4d 2b 43 28 57 53 5c 39 3a 52 55 ' + '56 54 5e 28 48 4d 5b 3b 4d 42 27 2a 4b 36 47 3b ' + '3f 27 2c 44 45 54 24 4f 3b 36 2c 29 5b 3d 52 42 ' + '4f 26 4c 4f 34 55 3c 52 49 4e 4a 2b 39 34 4a 3c ' + '4e 31 0d 0a 4d 5d 33 54 37 58 43 54 58 2e 28 51 ' + '28 4b 2a 3e 58 2d 3e 49 22 50 26 26 2e 59 40 3d ' + '2d 41 59 50 2f 25 3f 21 34 57 4a 5b 2e 4b 5b 36 ' + '4a 5f 39 5a 53 4a 4d 4a 35 36 2a 5c 45 2a 4b 5c ' + '4b 0d 0a 4d 4d 54 55 3c 3c 43 43 2b 39 43 44 37 ' + '43 48 5e 59 41 47 45 41 29 5b 23 4d 46 43 41 2d ' + '50 32 2c 32 24 35 5c 50 54 53 58 5f 4e 58 25 31 ' + '2b 46 28 2c 4a 4c 4e 5a 4f 3a 5a 3b 5c 39 5a 3b ' + '0d 0a 4d 3d 47 2b 41 24 45 5f 33 58 4b 3d 39 55 ' + '5d 46 27 22 3b 56 5d 48 5d 2a 45 55 2b 4d 2a 32 ' + '5b 47 2e 2e 55 3c 4b 30 53 52 23 28 2a 2b 47 47 ' + '25 35 3b 32 5e 4c 49 36 5d 38 4e 50 33 2d 36 0d ' + '0a 4d 34 5d 2e 32 30 5e 43 5b 3f 4b 36 52 3a 5e ' + '42 26 5e 36 43 3a 4d 37 54 47 54 40 4b 51 4f 4f ' + '21 2e 32 3e 56 2a 31 4a 2d 4f 3b 37 22 25 21 5a ' + '46 32 2e 32 2e 5e 3f 4d 36 3a 49 3e 57 4e 0d 0a ' + '4d 23 41 51 28 4f 38 60 55 3e 43 4e 59 23 50 44 ' + '21 2b 24 25 4e 21 33 33 38 47 43 58 5d 2c 39 3b ' + '5f 60 60 4a 53 31 21 5f 51 54 54 22 2c 2c 59 3d ' + '5c 39 48 4b 37 58 30 44 4c 4b 59 2b 43 0d 0a 4d ' + '5f 50 22 48 39 49 25 53 44 51 5e 4b 54 58 51 59 ' + '4a 37 4f 3b 49 4b 3c 22 3d 39 30 48 2f 26 5b 51 ' + '32 52 58 4d 5b 35 59 55 2c 54 54 51 27 60 27 28 ' + '27 2d 24 46 56 29 3c 35 5d 26 57 2f 0d 0a 4d 29 ' + '29 27 26 42 50 32 45 25 26 21 45 23 57 60 5e 4d ' + '2b 5d 2b 33 5b 4f 27 4a 40 30 32 24 3b 4f 52 4e ' + '2c 5f 4f 36 35 25 3d 53 44 29 26 30 22 4f 4d 2f ' + '5b 54 5a 26 5d 4c 4b 2a 5c 24 54 0d 0a 4d 53 4a ' + '5e 55 4e 57 56 48 5a 2d 45 25 2f 3a 2a 3e 4d 5a ' + '39 3a 32 2d 41 49 52 54 38 3f 3e 43 39 59 27 2d ' + '35 4b 5e 56 40 3e 53 30 41 50 32 51 51 46 4f 30 ' + '52 4d 48 5d 5b 24 53 32 2a 5c 0d 0a 4d 38 38 23 ' + '26 57 4c 31 36 3d 2a 4c 23 32 26 2e 56 2c 38 41 ' + '33 45 36 44 5b 3f 53 33 3b 37 39 43 27 4f 43 33 ' + '2f 2f 33 2a 3d 2c 4f 21 4a 2c 24 4b 5b 5c 60 2d ' + '27 47 51 56 58 4b 3a 4f 3b 0d 0a 4d 2b 32 5d 39 ' + '23 37 3d 4d 3c 3f 41 4d 31 39 3f 3e 33 40 27 43 ' + '53 37 45 5f 42 2f 35 2b 30 46 3e 57 31 55 44 4e ' + '34 2e 55 36 37 4d 4e 21 2f 5f 4d 36 25 25 3f 37 ' + '52 53 28 50 45 2e 54 2b 0d 0a 4d 42 4c 2c 46 3e ' + '2c 33 48 43 41 45 2e 35 28 5d 36 5d 55 3c 31 3a ' + '41 2d 49 5d 5c 5a 25 58 57 29 57 43 4c 31 36 43 ' + '3a 57 24 2c 44 50 57 60 32 2a 41 57 38 2d 3e 22 ' + '4f 57 4e 5b 46 58 3a 0d 0a 4d 59 3a 35 4f 34 3f ' + '43 57 3f 2b 35 5b 31 4b 42 5c 40 45 57 5b 40 58 ' + '23 3d 43 5e 46 4c 2f 5b 4a 22 39 55 4b 54 3e 35 ' + '47 54 2b 5c 2d 39 57 42 4f 2f 4e 2c 28 28 56 47 ' + '3d 50 4d 3e 39 5e 0d 0a 4d 27 48 5d 35 54 4a 5a ' + '3a 50 4f 29 48 2b 4b 33 4e 50 59 52 3a 47 36 2d ' + '30 4e 2b 5e 55 36 56 52 28 45 50 2c 5e 47 51 53 ' + '35 34 31 52 21 22 48 46 3c 5d 5c 3c 55 47 2f 55 ' + '3c 26 37 27 54 0d 0a 4d 4e 32 2f 5b 2f 34 37 55 ' + '4b 3a 37 46 40 2d 60 22 50 28 3f 3f 45 3e 58 50 ' + '31 36 2d 3c 30 53 32 51 5b 33 28 51 28 21 50 3a ' + '4a 5a 3d 5e 2a 4d 37 38 3e 4c 5b 4a 5b 3c 40 46 ' + '4d 3a 2d 4c 0d 0a 4d 43 5d 53 36 26 37 55 37 2f ' + '48 5a 3c 37 49 36 4f 44 39 2e 43 4f 4a 25 49 2a ' + '4d 4b 28 51 44 42 57 5d 0d 0a 2b 47 4e 2e 2a 5d ' + '37 2e 5a 33 57 21 4e 27 60 57 24 38 2d 39 4a 22 ' + '2c 44 44 58 5e 0d 0a 4d 4e 3a 4c 3b 41 52 2f 4b ' + '36 23 5d 31 29 2a 43 3f 5e 55 51 4d 5d 25 58 27 ' + '2b 3d 4c 60 54 5d 32 42 24 24 27 4a 2d 34 54 45 ' + '29 27 2f 3e 46 48 58 52 33 51 46 4c 26 57 56 3d ' + '3f 21 3f 31 0d 0a 4d 3a 34 59 5d 57 60 53 33 30 ' + '50 23 3b 5c 3c 3c 40 22 4a 49 3f 3c 4e 3f 4f 33 ' + '2b 3d 55 2a 39 39 4c 5c 58 25 29 43 58 45 48 27 ' + '49 53 59 2d 30 35 52 5e 3c 54 29 5a 47 35 2c 40 ' + '35 53 4c 0d 0a 4d 60 4f 3f 40 35 2b 26 46 46 24 ' + '50 5b 3b 4e 51 5b 54 28 29 38 4c 3c 58 60 5c 34 ' + '60 38 5b 52 3c 5c 34 53 60 53 5f 4b 30 34 30 32 ' + '3c 4c 46 3e 3a 45 45 51 4d 2f 3e 48 2e 60 22 50 ' + '59 29 0d 0a 4d 49 54 3a 59 3c 2b 44 3c 47 4f 35 ' + '2d 36 33 3d 27 2d 4e 32 28 59 50 23 35 26 35 5c ' + '60 4a 2e 5d 37 2b 55 41 5a 43 48 23 44 60 47 26 ' + '2a 53 4c 5e 59 46 5c 35 2b 54 2e 2b 30 36 2c 49 ' + '44 0d 0a 4d 47 44 22 49 30 4c 3c 4d 58 60 51 30 ' + '59 2b 23 54 5e 56 3a 45 32 58 23 23 59 3a 26 37 ' + '3e 50 58 54 35 26 38 43 4f 5d 3a 2a 3f 29 31 4c ' + '3d 4c 54 32 24 3b 42 3c 3c 55 51 2e 59 40 40 51 ' + '0d 0a 4d 46 4a 31 2b 3e 50 28 52 2d 40 21 27 3b ' + '46 45 4f 5b 4c 5d 45 50 31 34 49 43 3a 59 53 52 ' + '2f 25 30 52 44 59 53 56 49 4c 47 5b 25 4a 22 26 ' + '60 5c 47 4f 37 24 44 2a 60 25 27 3c 54 52 30 0d ' + '0a 4d 21 36 3b 5a 44 35 52 4b 40 24 3e 31 32 27 ' + '5c 41 3b 28 3f 3e 3e 3a 45 2d 42 49 44 3e 33 37 ' + '39 2f 28 5c 35 23 23 45 51 5c 48 48 39 30 32 5d ' + '45 51 57 5c 54 52 38 3b 44 29 27 3c 26 45 0d 0a ' + '4d 60 23 3b 47 2d 26 32 3e 31 59 2d 30 29 4b 5c ' + '47 28 60 60 60 3f 25 2c 60 5a 40 60 3e 5d 2a 28 ' + '28 29 59 59 53 35 41 60 60 50 29 2d 2d 5b 26 56 ' + '40 42 3d 48 28 5c 22 48 21 28 26 2f 49 0d 0a 4d ' + '34 52 23 47 27 42 42 30 40 59 21 27 2f 3a 41 48 ' + '46 55 30 2a 44 45 42 60 55 27 27 50 51 48 30 60 ' + '4c 40 2f 40 54 3e 21 47 2d 23 29 3e 56 25 4e 28 ' + '29 37 2f 3a 46 23 4d 5d 5c 46 45 2d 0d 0a 4d 43 ' + '28 2f 46 46 3b 4c 2a 22 2e 5e 3c 54 41 49 29 3d ' + '24 48 3c 2b 40 5c 58 48 40 33 4f 51 5f 42 3a 60 ' + '2e 22 32 48 27 29 4b 45 3b 44 47 5a 34 22 49 4c ' + '28 43 44 3e 3a 59 4c 21 43 41 4e 0d 0a 4d 33 31 ' + '32 27 44 3b 3f 21 21 49 39 28 57 24 5f 37 44 35 ' + '31 32 4e 51 5a 5e 3c 55 29 2e 57 2f 54 49 38 2f ' + '2e 31 52 2e 55 24 32 2e 4b 2f 3b 5a 34 23 45 25 ' + '4f 38 38 59 53 5d 3a 38 51 28 0d 0a 4d 30 58 51 ' + '46 45 2c 56 3c 43 4c 51 53 37 21 4e 23 47 4d 31 ' + '3d 24 35 38 39 52 31 46 4e 23 38 2f 55 27 3a 48 ' + '39 4c 24 58 4a 22 30 32 2c 3c 34 25 2f 38 57 50 ' + '22 2f 2d 32 33 4e 38 23 5a 0d 0a 4d 34 4f 3d 50 ' + '21 58 25 33 4e 59 29 25 25 56 2a 5a 38 50 3c 2b ' + '45 4a 59 46 60 26 2a 25 42 22 22 2c 5c 38 49 39 ' + '28 29 50 2a 37 38 3f 39 38 29 21 5e 47 2f 2d 21 ' + '47 50 2f 25 30 47 23 3f 0d 0a 4d 4d 51 30 4d 47 ' + '3d 47 51 35 4c 2b 2f 51 3e 43 3b 2a 2a 32 33 49 ' + '48 27 56 34 27 5f 5c 3a 5d 3c 5e 3d 47 42 41 5c ' + '31 42 59 57 35 53 3e 59 4a 5a 45 2f 5c 55 35 50 ' + '22 24 2e 2c 21 4b 3e 0d 0a 4d 59 5a 29 4f 46 48 ' + '25 5e 3a 4e 5a 5e 4a 49 44 3a 51 51 32 42 32 3f ' + '3d 55 35 53 29 37 3b 3e 4e 46 4b 5c 57 5a 4a 4b ' + '42 38 3c 2f 2f 52 60 35 2e 26 48 60 47 37 57 2d ' + '2d 5e 3a 49 59 5f 0d 0a 4d 31 33 25 2f 22 4e 38 ' + '49 25 50 55 27 24 53 31 4d 4f 43 3f 3a 55 25 4c ' + '4a 2d 40 33 3c 5d 2a 34 38 43 41 2a 34 2d 31 2d ' + '47 32 4f 42 27 34 3b 2f 49 5d 35 49 24 35 4e 53 ' + '35 5a 4b 31 3f 0d 0a 4d 43 48 22 5b 30 37 42 4c ' + '4c 3b 47 4b 2a 3e 57 3b 37 53 5d 3a 43 60 48 3a ' + '3a 5a 22 3a 33 54 48 47 57 46 52 55 2b 32 4d 30 ' + '35 49 2b 37 34 28 28 52 4f 42 35 5c 24 47 25 3a ' + '58 24 5c 27 0d 0a 4d 37 3b 3a 4b 49 57 4a 4f 43 ' + '39 4e 44 5e 4d 3f 47 31 39 29 35 5d 4b 4c 4d 2c ' + '36 5d 4f 35 44 57 3f 42 59 4d 52 5f 50 21 35 34 ' + '49 53 37 38 49 58 48 38 5e 53 5d 27 45 5d 33 3c ' + '2f 3b 53 0d 0a 4d 32 56 44 58 28 21 52 41 53 42 ' + '46 3b 2f 31 40 5d 34 37 2c 2a 2b 43 21 52 3f 5c ' + '4a 5e 2a 3f 22 4f 51 47 3f 3a 33 3c 41 4b 42 31 ' + '59 38 4d 4e 22 27 3b 3d 51 37 54 52 52 55 3f 31 ' + '5d 37 0d 0a 4d 4c 33 3c 36 54 4a 46 30 4f 44 51 ' + '2c 3f 2e 3f 60 4b 32 2e 31 2d 5b 25 46 43 26 2c ' + '3b 48 55 5b 48 52 2d 3b 48 33 5e 33 24 32 3c 32 ' + '5d 4c 47 5a 59 48 25 3b 32 2b 46 29 59 4b 25 37 ' + '44 0d 0a 4d 44 45 38 3b 3d 5f 4d 60 5c 54 25 58 ' + '39 48 5b 3e 21 2b 47 46 2b 26 35 30 5f 33 5a 55 ' + '26 47 4d 3a 56 2d 4e 39 38 55 30 59 53 41 21 56 ' + '27 40 38 4b 3b 44 43 45 3c 3e 32 5c 36 27 3d 53 ' + '0d 0a 4d 2f 3b 31 26 3e 3f 45 30 59 22 29 27 56 ' + '56 55 58 37 36 4f 42 3a 5d 55 36 28 51 50 30 2f ' + '39 56 42 59 60 21 37 3a 59 37 3b 59 4b 57 5d 4f ' + '3b 29 2f 45 5b 41 4e 22 2c 58 27 38 35 30 4f 0d ' + '0a 4d 3d 24 4c 4b 52 21 58 48 55 60 3b 21 59 25 ' + '33 29 2e 32 54 37 21 3c 39 57 28 5e 3e 60 4b 4e ' + '2b 3b 4e 3f 4b 33 58 47 37 55 36 35 4e 56 0d 0a ' + '5a 48 5e 28 4d 2f 4e 2d 29 4f 36 43 44 37 3d 26 ' + '0d 0a 4d 53 27 38 3f 4d 35 32 2a 3f 3c 33 5d 3a ' + '5c 47 55 26 2d 51 2f 3e 50 33 42 55 48 55 50 5a ' + '5d 43 35 52 55 44 37 3a 35 27 3c 3e 5a 4c 45 29 ' + '2d 50 5f 4a 4a 55 21 2b 4d 5b 3d 56 4b 44 39 0d ' + '0a 4d 55 31 42 43 38 52 32 2f 4f 33 58 59 21 43 ' + '56 5e 3a 53 58 39 26 3b 22 5e 3a 4c 48 57 59 41 ' + '37 50 2e 3a 37 39 4c 4a 5e 53 31 41 50 36 52 33 ' + '51 35 45 3d 56 55 41 4f 4a 45 26 57 35 5d 0d 0a ' + '4d 4a 4d 31 24 39 28 29 5b 54 46 52 3a 32 5a 2b ' + '44 2e 2d 49 5c 40 54 5a 2c 59 57 39 5c 35 32 42 ' + '45 56 4e 35 5c 22 46 28 51 23 24 39 5a 3a 26 30 ' + '36 42 59 23 58 27 46 47 60 58 2f 5b 46 0d 0a 4d ' + '4a 3f 4a 24 4f 5d 51 33 48 57 21 3b 3e 3c 54 46 ' + '43 34 4f 31 27 28 51 33 38 56 22 41 3d 48 5c 5d ' + '4a 4a 45 4d 4a 59 48 48 49 22 35 23 42 41 41 52 ' + '2b 59 3c 3b 45 29 51 47 4f 31 60 59 0d 0a 4d 27 ' + '2f 5c 60 47 35 31 36 28 39 45 2f 3c 5c 34 5d 37 ' + '60 3b 23 3e 2a 27 37 56 29 5a 23 34 5d 37 2f 4d ' + '25 24 36 53 44 3b 4e 5d 35 59 29 2e 48 40 23 40 ' + '44 54 32 2b 44 44 44 54 25 3d 3d 0d 0a 4d 43 44 ' + '28 22 40 44 5d 41 35 42 24 2d 4c 38 44 40 24 60 ' + '58 49 22 40 25 30 2c 23 26 3c 54 3c 4e 30 46 31 ' + '50 21 30 42 39 2d 3f 30 40 4f 55 39 5e 48 53 35 ' + '3e 30 43 54 43 5d 3a 2e 38 47 0d 0a 4d 3e 32 2c ' + '3c 3c 34 4d 40 30 4a 21 4c 3c 44 46 49 44 51 49 ' + '34 3c 3c 5c 4d 58 51 33 33 4f 56 21 31 57 2d 2a ' + '53 46 2f 27 26 2a 2c 39 24 48 29 4a 42 47 38 58 ' + '58 21 38 60 5d 30 26 21 34 0d 0a 4d 52 23 26 56 ' + '30 3d 5c 58 48 48 45 21 3d 46 2e 2c 59 58 48 2b ' + '41 5c 2c 28 5f 48 32 3f 59 49 55 5e 33 25 4d 2d ' + '54 22 50 35 60 53 44 40 5d 35 30 53 27 21 53 56 ' + '2d 30 3e 2f 34 57 43 40 0d 0a 4d 2d 56 48 37 52 ' + '3c 44 5d 4a 3b 2b 4a 43 48 27 27 3d 4e 31 47 5f ' + '2a 42 60 29 44 38 5e 2a 35 26 25 59 51 56 5b 42 ' + '43 57 27 55 60 47 38 35 2b 27 5f 60 2c 28 57 39 ' + '3b 22 5d 43 34 23 5f 0d 0a 4d 60 28 3b 29 30 51 ' + '3c 3f 51 31 60 60 59 53 5f 25 60 4d 57 4c 5a 2f ' + '57 25 2f 4b 37 21 4e 4e 40 29 28 3f 28 5b 26 43 ' + '26 2f 34 53 58 53 30 2f 45 5e 30 5d 50 2c 4e 2f ' + '4b 31 52 27 49 58 0d 0a 4d 5b 42 44 5c 2b 2d 44 ' + '5d 5a 2f 3d 55 44 3d 5c 54 2c 3e 42 53 4e 34 40 ' + '23 5a 42 49 60 59 2e 2e 5d 35 45 2f 60 2e 3e 2c ' + '54 58 27 23 43 21 4a 36 39 5f 38 52 34 43 40 42 ' + '41 34 4c 3c 38 0d 0a 4d 5b 3c 55 51 51 43 29 5b ' + '3e 3a 43 45 37 2f 2f 25 21 37 38 33 47 47 2d 24 ' + '4e 32 21 32 55 3f 44 59 51 31 21 4d 49 3b 5a 34 ' + '3d 43 4a 41 42 44 43 28 5f 50 60 5a 2b 3c 2e 56 ' + '2f 57 48 35 0d 0a 4d 38 24 58 2f 3a 48 3b 5b 3d ' + '5a 30 2e 56 51 58 2e 34 2b 43 4e 3a 27 59 42 49 ' + '5c 3c 38 49 28 3c 40 25 4f 26 3a 28 4e 32 56 3f ' + '4f 35 34 29 56 41 52 3c 2d 4d 57 3c 60 54 51 4c ' + '27 4d 5e 0d 0a 4d 5d 35 50 5e 36 5e 5d 25 5a 47 ' + '35 5d 4a 45 45 2d 4c 3c 49 59 38 5c 34 2b 47 60 ' + '2d 2b 57 44 60 5f 36 48 23 3c 24 46 47 30 5b 48 ' + '2b 29 3b 26 2f 25 24 36 50 40 5e 4d 23 4e 34 27 ' + '2e 33 0d 0a 4d 57 49 3b 4c 23 40 43 53 33 24 57 ' + '3b 2b 26 5b 2a 40 3f 30 35 2e 3c 2c 21 46 4a 5e ' + '33 4e 5b 5d 5a 2c 4d 59 53 55 22 44 54 2a 5b 38 ' + '5d 3e 44 38 4a 2e 51 58 5f 3a 45 5b 5c 43 28 4b ' + '46 0d 0a 4d 3f 22 59 25 2d 41 30 54 4d 53 4e 53 ' + '51 31 2c 56 31 40 44 35 35 5d 37 5f 60 60 4a 35 ' + '3c 4d 40 45 3a 2d 23 56 44 3f 43 39 5e 53 34 33 ' + '3e 5d 4a 59 4a 40 5d 56 4b 56 59 32 42 3f 2e 59 ' + '0d 0a 4d 3f 2b 52 29 37 5e 4a 4e 51 5d 5a 5b 59 ' + '3a 2b 3a 3f 4d 34 46 34 49 40 4a 3e 5d 3c 4d 24 ' + '3a 59 2e 5d 35 52 27 2a 3f 47 59 21 4b 5b 36 4a ' + '37 48 3f 55 35 2d 27 42 35 2e 2c 49 21 47 4f 0d ' + '0a 4d 30 27 4d 34 4d 5b 4f 5a 3a 44 5e 55 5a 29 ' + '27 2f 5c 49 44 3f 2a 55 27 5f 60 27 4a 27 3b 5b ' + '4a 29 5f 46 49 32 2e 42 2f 44 3c 56 25 4a 27 5b ' + '42 43 56 4e 53 34 32 31 4c 55 35 28 46 34 0d 0a ' + '4d 31 3b 35 29 51 33 34 4d 56 53 33 25 4d 5d 52 ' + '55 34 48 43 4a 2c 42 4b 57 4a 57 49 4e 48 37 35 ' + '44 57 4b 36 5c 43 2a 35 48 55 41 42 4a 50 4a 31 ' + '4b 5c 4f 53 34 32 40 29 32 5f 43 28 56 0d 0a 4d ' + '4b 2f 58 54 55 3c 46 2d 3b 51 47 46 22 31 4a 23 ' + '5c 57 25 3b 4d 4f 5c 60 26 2d 48 29 42 33 25 2a ' + '38 51 5b 31 42 4f 25 2a 52 3b 4e 45 35 49 35 57 ' + '2e 54 3b 3b 35 5d 4d 22 4d 26 2e 3f 0d 0a 4d 23 ' + '37 51 39 5d 25 37 58 5d 44 22 45 28 4b 39 50 2e ' + '57 34 4d 37 2d 2d 5e 2d 38 44 60 57 50 45 37 44 ' + '38 5b 5e 47 56 55 5c 4b 25 57 2f 4e 56 3b 4a 44 ' + '57 3c 52 4d 4d 57 2d 31 5b 43 27 0d 0a 4d 23 21 ' + '2a 34 33 5b 23 2f 4b 5f 50 59 4a 2d 40 52 3a 43 ' + '41 36 50 56 22 3e 58 2f 46 4f 47 46 48 32 36 4d ' + '44 5a 4d 25 3c 31 4e 29 25 5a 3c 2d 37 46 39 39 ' + '49 26 37 4a 39 46 49 34 46 59 0d 0a 4d 46 4a 29 ' + '33 3c 48 5b 2d 5c 2c 37 42 45 4d 47 4c 4b 3a 5c ' + '34 5e 55 4a 4f 30 53 4b 4f 4b 50 5d 4b 3c 53 51 ' + '2d 4e 2b 2d 4d 4b 36 4d 2d 31 35 46 5d 56 56 4f ' + '2e 47 60 5d 0d 0a 37 27 45 43 28 0d 0a 4d 5d 45 ' + '3b 37 27 37 4e 57 35 48 50 52 2a 30 3f 4a 3a 5c ' + '49 3a 37 42 5b 4f 3d 36 4b 3b 37 3e 26 57 60 5d ' + '5a 51 32 2d 59 39 23 54 44 3c 48 21 60 58 4a 50 ' + '44 43 25 52 3f 27 42 4c 32 2a 0d 0a 4d 3b 3e 5a ' + '3c 5f 2d 35 59 39 33 43 3c 23 41 41 44 54 2d 23 ' + '43 2b 45 54 3a 38 2f 29 2d 27 4e 52 3f 57 2d 34 ' + '44 46 37 39 4d 5c 54 3f 4b 3c 5f 4c 3a 31 49 51 ' + '3f 54 37 51 28 21 47 2f 3c 0d 0a 4d 23 25 2d 4d ' + '47 59 26 3f 4b 36 3a 29 3c 2f 57 53 46 4b 30 38 ' + '4b 45 4f 60 49 4c 2b 2d 26 32 37 23 3b 2d 56 3c ' + '54 51 22 25 2e 57 44 60 27 4d 36 35 22 5b 45 50 ' + '59 5b 59 4a 59 5a 49 39 0d 0a 4d 43 47 4e 3a 41 ' + '48 49 3a 5a 2d 23 3c 33 29 47 5e 33 34 3b 5d 54 ' + '46 5f 50 33 32 35 38 60 23 47 44 54 51 22 2c 47 ' + '2f 42 44 50 3b 56 36 25 59 2f 5e 45 2d 34 5c 47 ' + '5a 27 42 4a 58 3b 5c 0d 0a 4d 53 28 2d 27 22 50 ' + '5d 30 23 59 3c 54 50 3f 44 3a 22 21 22 58 51 56 ' + '25 31 3f 2d 44 40 60 58 26 3e 55 3d 3a 44 4d 2a ' + '23 43 43 4f 35 3a 5a 3f 2c 59 50 3e 2e 3a 3d 34 ' + '43 26 5b 38 46 33 0d 0a 4d 2b 21 43 47 53 51 5e ' + '55 2a 44 29 2b 4b 53 50 23 46 42 57 39 25 60 3e ' + '58 4a 2a 2d 46 26 22 4e 60 21 5d 3a 3b 26 57 59 ' + '48 3f 4e 2a 32 4e 2d 56 21 31 51 47 2a 4a 21 30 ' + '49 25 56 36 38 0d 0a 4d 56 52 53 3f 30 26 49 45 ' + '39 30 5e 36 60 57 26 48 60 56 58 27 26 32 3c 54 ' + '25 50 3c 33 4d 59 5b 55 48 56 38 34 46 52 26 3c ' + '4c 43 59 27 29 2e 3a 26 3b 43 3c 2f 25 30 49 2b ' + '60 4c 2e 55 0d 0a 4d 3c 59 53 44 47 53 34 3d 45 ' + '52 54 30 47 24 3a 59 26 2c 42 41 27 23 40 44 55 ' + '29 3f 43 27 40 3d 4a 60 5c 60 23 5b 54 56 32 50 ' + '52 3c 25 4c 5e 3a 43 29 57 35 53 44 3b 42 50 5b ' + '60 54 29 0d 0a 4d 2e 29 26 25 2b 4c 4e 5a 22 38 ' + '41 3c 60 5e 2e 2a 44 3c 3f 58 46 48 38 59 33 2f ' + '55 4a 23 4e 56 47 5a 34 5e 52 39 4f 38 51 50 22 ' + '2c 5e 3a 24 3e 58 44 35 50 3b 2a 39 4a 2c 5d 36 ' + '2c 5c 0d 0a 4d 35 2b 26 2d 57 43 54 4d 4f 44 3c ' + '40 54 32 5c 2a 3e 3e 33 35 39 5e 27 2e 2e 55 26 ' + '37 5a 3f 56 4a 41 2f 3b 2b 2a 4e 3e 51 2f 21 25 ' + '33 4e 2e 3e 35 49 28 28 51 5d 51 56 49 40 3b 2e ' + '58 0d 0a 4d 58 4a 36 25 34 24 57 29 2e 2c 3f 4f ' + '34 25 4e 2c 27 5d 4a 60 27 51 34 2f 56 58 2f 25 ' + '21 35 56 51 54 33 44 24 59 48 56 3f 44 58 4a 4c ' + '36 2e 2e 2e 3a 45 46 52 4e 3f 2d 23 26 5d 23 40 ' + '0d 0a 4d 57 29 5e 41 48 50 3c 24 59 5b 34 43 3c ' + '2c 60 39 5c 54 38 2f 2f 3f 28 48 23 48 39 44 21 ' + '4c 5e 3a 44 5c 5f 4f 32 46 3b 26 30 2f 58 4a 35 ' + '3c 25 33 53 53 32 3b 27 32 23 53 57 2d 3c 37 0d ' + '0a 4d 2f 28 25 60 59 58 2e 23 32 40 3c 5d 5e 5d ' + '2c 33 3d 43 5d 51 59 52 3e 23 34 40 59 29 27 5e ' + '25 21 58 5e 55 30 49 25 25 42 4c 3c 26 2e 5b 5b ' + '35 23 5b 51 56 5b 34 48 4f 52 26 5f 52 5e 0d 0a ' + '4d 5d 26 37 58 51 5d 2a 37 38 2f 51 5a 23 35 4e ' + '23 58 2d 3c 53 58 26 23 56 49 29 3c 39 58 4a 2f ' + '35 21 34 40 5d 4a 38 44 5a 26 2c 33 4e 2b 3f 32 ' + '46 4a 50 5f 43 2f 28 4a 49 5a 52 40 38 0d 0a 4d ' + '29 27 2d 2a 3e 5a 34 2d 50 3e 3a 21 57 39 5e 33 ' + '4f 46 56 35 2d 3c 57 23 46 4e 21 60 2d 3e 55 28 ' + '5e 39 51 3c 38 30 5c 42 26 5a 4a 2b 59 5d 5e 2a ' + '60 27 46 43 3b 4f 31 29 31 44 26 2f 0d 0a 4d 2c ' + '49 44 4d 5c 55 2b 2f 4e 48 4a 2d 4d 47 35 30 3d ' + '26 35 31 47 58 51 60 22 5f 4d 33 3d 4f 35 57 48 ' + '37 5d 53 35 28 59 31 4a 4c 53 45 58 5f 58 51 45 ' + '31 4d 5a 3a 5b 5d 2f 5a 4a 47 25 0d 0a 4d 28 42 ' + '37 2a 2f 42 32 4a 4b 31 5d 2f 57 48 25 2f 2d 23 ' + '28 37 56 5c 34 59 24 52 47 27 42 2f 26 57 39 33 ' + '28 4f 3d 32 21 33 45 5b 2d 35 3f 28 4d 31 58 51 ' + '2b 27 52 55 52 5e 3a 21 36 26 0d 0a 4d 52 43 5f ' + '46 45 29 52 2c 39 33 29 37 57 2c 55 33 43 59 5a ' + '27 2f 33 5f 3d 48 5d 4f 5f 60 22 55 31 4b 52 43 ' + '44 28 5a 4f 46 49 3c 52 3b 40 57 5d 2d 36 2a 25 ' + '44 5d 52 4b 30 52 39 30 2a 0d 0a 4d 2e 57 3b 31 ' + '2f 5b 3a 3b 29 27 55 3f 55 34 48 5d 4a 43 28 43 ' + '3b 51 44 3d 4d 5a 36 3a 4e 27 53 2a 55 33 5c 53 ' + '2a 4d 2c 35 35 39 4f 5a 3a 51 44 3a 31 37 26 30 ' + '41 45 5d 55 2b 37 3e 4f 0d 0a 4d 4d 4a 5b 4d 35 ' + '45 56 54 2f 49 5f 2b 34 46 4b 43 51 44 3d 3b 57 ' + '3c 44 33 3b 4c 3d 2d 3a 5d 43 4a 46 58 3b 32 56 ' + '56 4c 4b 54 55 5d 2e 48 5d 25 25 3b 49 5a 3a 42 ' + '34 38 46 54 3d 27 4c 0d 0a 4d 3b 2b 34 45 2f 33 ' + '4e 4b 37 4d 5b 51 32 48 3b 3d 53 5c 55 3f 2e 58 ' + '57 46 43 3b 57 3d 2d 37 5b 3f 34 49 48 46 2a 4c ' + '55 3c 53 41 2b 44 3b 3c 5e 2c 4a 2f 3f 3f 42 35 ' + '2c 40 50 57 57 4a 0d 0a 4d 54 29 2e 40 2d 47 4f ' + '37 42 28 3d 39 26 5f 45 4a 57 2b 2b 34 38 59 34 ' + '22 5e 49 5b 4a 45 4a 43 39 39 2b 39 5a 32 56 28 ' + '2c 49 29 5b 3b 3e 46 46 52 37 27 3c 60 55 44 51 ' + '57 2e 53 23 60 0d 0a 4d 5c 35 53 57 2a 46 3c 4c ' + '2e 2c 5d 5a 45 4c 4e 55 39 4e 36 54 4e 38 50 3f ' + '4f 35 53 3e 22 23 41 4e 33 36 25 21 3c 24 2a 60 ' + '23 51 57 4a 57 25 2d 54 60 40 5d 4a 26 46 25 46 ' + '50 43 3d 2f 0d 0a 4d 29 59 48 0d 0a 54 3c 46 2c ' + '2c 33 57 2d 39 4a 53 47 3e 3c 34 5d 39 31 4d 57 ' + '39 58 27 42 49 4a 41 49 4e 5d 46 44 29 30 25 38 ' + '5e 31 35 42 2c 5c 44 38 4b 2d 43 45 51 4d 5f 53 ' + '4a 5b 24 56 39 0d 0a 4d 45 59 5e 55 29 45 26 4d ' + '24 5e 51 2c 5f 3a 4a 24 5b 43 2b 47 5b 54 59 47 ' + '51 26 21 46 4a 2c 5c 47 32 30 2e 5e 3a 26 31 24 ' + '3a 36 26 54 27 5a 23 25 22 27 60 34 39 5e 4d 2b ' + '3d 4e 44 3f 0d 0a 4d 32 4e 45 5c 5f 33 2e 3a 33 ' + '2a 3d 23 22 56 39 32 35 28 51 33 28 56 28 29 28 ' + '28 58 4a 4e 4f 26 3c 5e 3a 45 33 41 56 36 47 30 ' + '37 39 3e 35 40 31 47 2f 53 3f 59 35 55 50 2c 4e ' + '3e 31 56 0d 0a 4d 49 60 3f 49 25 33 2c 56 31 47 ' + '2f 2e 3e 3a 4a 4b 24 55 33 4d 24 51 4c 60 56 2f ' + '25 30 33 52 50 5c 39 58 49 31 3b 24 41 5e 45 3d ' + '28 59 52 33 5f 2d 33 4c 46 3c 4b 38 32 24 25 4e ' + '3e 51 0d 0a 4d 48 3c 45 45 28 2f 42 41 43 44 28 ' + '28 21 27 3f 2d 32 23 54 27 5a 42 44 54 2a 57 38 ' + '33 4c 3c 25 5e 2c 5c 46 4e 3b 3a 26 57 54 4c 4c ' + '22 3f 5a 3c 3c 35 51 2f 32 23 47 2d 2c 4d 56 5d ' + '43 0d 0a 4d 30 56 31 5f 2d 32 51 59 51 58 5b 42 ' + '44 21 4c 60 42 42 24 40 50 3f 4c 2c 34 5b 25 4d ' + '4c 3d 5c 46 2a 26 40 5d 30 3c 42 48 5d 33 2e 23 ' + '34 43 3d 28 38 23 5d 3a 58 27 2b 47 5d 5c 54 4c ' + '0d 0a 4d 4f 54 60 43 27 21 4b 40 56 2d 57 57 2f ' + '25 2b 48 2f 4c 3e 51 2e 23 43 40 42 46 22 33 22 ' + '46 4a 50 3f 2f 21 4a 32 57 34 3f 57 49 5d 45 32 ' + '4f 4c 3f 57 44 58 5c 55 2c 46 60 3c 39 49 28 0d ' + '0a 4d 3b 60 2f 54 4a 3d 53 25 4c 26 44 2b 5d 43 ' + '30 32 4b 25 2a 44 5d 5e 2a 34 5b 3d 53 59 5c 54 ' + '3e 5f 2e 33 43 21 2d 27 28 3b 48 29 4e 51 5e 48 ' + '4a 36 3b 40 54 4c 47 28 2e 2e 5d 22 59 5a 0d 0a ' + '4d 43 40 5c 34 3e 30 23 36 3c 55 52 4d 41 4a 32 ' + '36 5a 3d 4f 44 35 21 2f 2d 27 28 27 39 3b 57 2d ' + '40 4c 2f 59 48 26 2f 2e 3f 26 3e 55 29 5d 30 59 ' + '51 4e 58 2d 3c 39 2f 2d 23 30 54 54 4e 0d 0a 4d ' + '51 57 4a 38 21 25 30 29 21 53 32 37 3c 22 44 4f ' + '2e 4a 5d 2e 3a 2a 21 54 5e 42 58 5b 60 44 47 2d ' + '3c 54 48 2e 30 2a 53 49 2b 4d 60 23 55 3f 3e 4a ' + '3c 56 49 28 4a 3d 5a 2b 21 57 3d 26 0d 0a 4d 4c ' + '5c 5e 60 33 46 4a 4c 5d 5a 4a 59 60 2f 25 3e 3e ' + '4f 3d 38 22 4c 3c 2f 59 4b 25 4e 5d 3c 60 50 48 ' + '2f 2f 53 26 49 5b 26 58 47 4b 39 3d 34 35 3c 59 ' + '3e 4c 4a 5c 55 50 28 3e 27 59 4b 0d 0a 4d 52 4d ' + '51 3f 57 24 5b 25 35 23 34 27 58 3a 58 46 3b 3c ' + '53 2d 32 3a 44 3a 32 34 38 3d 47 52 57 2b 52 2f ' + '37 2e 46 33 57 48 46 26 2f 39 31 4d 5b 46 4b 5a ' + '26 53 59 23 5e 56 4f 5f 55 25 0d 0a 4d 3b 2c 48 ' + '55 24 51 5a 5a 5b 38 2f 4d 33 2d 42 3b 4a 31 4d ' + '41 51 5e 55 5c 32 2d 4f 35 4c 4b 4d 4b 54 36 54 ' + '2b 34 24 5d 23 34 59 31 22 3e 36 34 2f 44 33 4d ' + '5a 4a 59 2f 38 2a 59 41 4d 0d 0a 4d 48 41 56 49 ' + '24 31 52 52 59 27 27 4f 37 38 4a 3a 47 4c 45 24 ' + '41 59 3e 2c 4f 28 25 4e 30 55 25 43 49 3a 41 37 ' + '49 4a 32 3c 2d 30 38 3e 27 52 44 2d 5b 34 38 59 ' + '49 3a 5c 4d 5f 33 4e 4b 0d 0a 4d 44 37 27 25 35 ' + '28 57 41 5c 4f 5c 60 59 23 59 57 34 58 2e 36 3f ' + '49 25 2b 5e 3b 5e 46 46 4a 4f 36 55 33 53 2c 3c ' + '4e 23 52 5c 39 21 4b 5b 3a 38 4f 4d 57 34 60 48 ' + '55 3b 3a 53 34 5f 43 0d 0a 4d 28 54 41 24 2f 5d ' + '2d 3c 57 53 2b 37 27 47 56 55 2f 5f 42 2d 35 37 ' + '28 2e 34 45 2b 42 29 44 25 35 59 25 5a 46 4a 55 ' + '29 5b 46 36 45 32 2b 5c 4d 32 53 33 27 58 52 5c ' + '41 32 5b 35 45 5f 0d 0a 4d 4e 54 3a 5f 49 56 5d ' + '35 30 52 5e 5a 43 56 5e 56 4c 39 26 57 43 52 22 ' + '48 46 37 4a 5a 3a 25 3f 5a 4a 3a 4f 4d 2d 29 43 ' + '43 59 32 28 56 5b 3d 4f 5a 4a 47 3b 5b 46 49 42 ' + '4a 4b 34 3f 33 0d 0a 4d 55 35 21 4d 2b 51 25 2c ' + '4a 5b 45 4b 49 28 5e 47 5e 4a 46 4c 4f 2d 22 57 ' + '4e 3b 5e 46 40 2c 44 3e 30 41 44 51 55 2d 33 2b ' + '3a 58 46 41 3f 3c 26 5a 35 48 46 37 42 41 44 33 ' + '4a 3a 42 34 0d 0a 4d 3e 30 38 5e 34 39 26 53 3b ' + '5a 5a 34 42 56 2f 35 5e 54 55 2e 26 39 5e 26 59 ' + '5f 4a 4b 52 34 42 5b 3d 55 2b 53 29 27 29 4e 35 ' + '4d 4b 35 45 2b 24 43 4a 3e 39 31 2f 48 3d 4d 3f ' + '2b 50 52 0d 0a 4d 5d 4e 2a 54 5b 3a 59 57 38 4b ' + '59 51 38 5a 4c 5c 3b 3b 39 4f 3b 37 48 3d 2f 55 ' + '31 36 28 5a 4a 51 3c 2e 2c 42 45 45 59 28 5d 46 ' + '44 5a 38 27 2f 46 47 5e 49 52 30 23 46 4f 2e 30 ' + '37 52 0d 0a 4d 5b 3d 4e 5a 4b 3c 3d 57 57 50 3e ' + '2d 4e 2a 41 4b 39 48 46 53 54 24 24 56 34 60 2f ' + '3f 2d 37 3b 3a 3f 24 4e 33 56 4b 53 4c 3d 54 4e ' + '54 27 3d 53 35 56 56 4e 51 43 44 5c 55 23 30 2d ' + '4e 0d 0a 4d 53 54 43 52 43 54 30 5d 35 39 27 52 ' + '26 51 58 2d 35 33 3d 2a 55 4f 43 2f 25 30 39 44 ' + '2e 3d 49 5b 5e 5a 46 55 38 45 49 45 5d 53 44 39 ' + '26 2c 58 48 42 30 52 40 5e 22 2a 48 29 2f 54 3e ' + '0d 0a 4d 5b 5b 34 50 53 3f 45 43 27 43 4d 31 36 ' + '42 47 4c 4c 5b 4c 59 2f 3b 4f 30 4d 44 52 39 21 ' + '59 49 22 57 22 58 28 2f 46 4e 2c 58 21 58 5b 42 ' + '49 3a 2b 3b 48 4c 41 53 4d 28 53 53 33 5c 43 0d ' + '0a 4d 29 21 5b 26 4c 5f 55 4e 22 31 35 46 2d 4c ' + '0d 0a 51 3c 47 47 4c 3a 3c 32 27 2a 42 26 2e 55 ' + '46 53 37 2d 29 42 2d 3e 3e 21 50 3a 26 59 3f 24 ' + '40 53 56 49 23 2f 45 32 47 57 49 4f 30 2c 4c 21 ' + '0d 0a 4d 42 22 2c 5e 2e 55 2d 29 60 35 59 2c 5c ' + '3d 53 35 28 33 25 46 49 50 44 21 26 60 3c 4a 50 ' + '51 34 54 35 30 39 28 50 21 56 4a 24 29 56 4e 47 ' + '47 51 30 52 27 29 51 59 2d 2a 23 44 2b 4e 27 0d ' + '0a 4d 3f 2f 5c 60 45 30 2d 5b 5e 51 42 2e 26 2f ' + '21 5b 54 57 28 53 44 38 5e 5d 35 30 56 55 5e 2c ' + '3d 5a 2c 4c 21 2d 43 2f 23 34 35 30 56 26 53 38 ' + '2b 60 5e 2a 2c 4e 42 4d 43 50 3e 55 35 3d 0d 0a ' + '4d 59 2f 3f 4e 2c 42 41 2c 48 56 5d 5e 31 32 3a ' + '56 29 51 2b 32 47 21 28 49 43 2d 44 24 5f 32 4a ' + '37 4a 27 55 2c 40 54 39 3f 22 4e 2c 5e 3e 2a 38 ' + '2e 27 56 52 54 26 52 2a 44 4d 57 5e 5d 0d 0a 4d ' + '35 40 50 57 27 21 49 40 3f 2f 27 54 4a 3a 2a 3c ' + '45 54 2e 24 41 52 35 5f 50 4b 43 28 31 29 42 45 ' + '3b 41 56 27 42 41 44 3b 60 29 5c 54 52 27 39 39 ' + '39 53 53 33 24 3c 23 44 3d 5a 49 21 0d 0a 4d 50 ' + '3e 3a 58 32 60 24 5e 2c 26 44 54 35 55 56 37 4d ' + '58 22 34 4d 47 50 56 3f 25 35 53 2e 60 36 26 3a ' + '31 2b 3c 60 4b 43 2f 2d 29 48 25 28 4d 5e 48 3f ' + '4b 37 26 33 2f 26 3e 31 36 33 2b 0d 0a 4d 3e 58 ' + '29 59 4a 4d 2d 4a 32 48 32 30 3a 3d 26 43 43 39 ' + '4d 32 37 26 26 5b 5c 54 4e 36 5b 60 21 26 3e 21 ' + '37 47 3b 47 36 28 51 5c 57 2d 39 3d 59 4b 39 26 ' + '3e 3a 3d 46 3f 4d 52 2f 36 37 0d 0a 4d 26 49 48 ' + '2c 40 4f 35 22 59 55 35 60 22 3d 5d 3e 2d 4e 3d ' + '39 2b 24 5d 35 35 37 4e 3b 46 3d 4e 40 2d 41 4a ' + '46 56 3b 4a 21 5a 3a 5e 55 4c 43 2a 48 55 39 25 ' + '55 4a 54 54 43 3b 34 57 2d 0d 0a 4d 35 3e 57 4c ' + '29 59 45 5a 56 3b 2d 3a 55 49 49 21 23 21 42 4d ' + '36 48 2d 44 5c 44 43 29 35 2b 4a 3d 4f 3c 3d 4d ' + '37 3b 3b 32 47 3c 5d 3a 55 4f 56 56 47 2a 41 22 ' + '5b 3e 55 3a 2c 3d 49 40 0d 0a 4d 40 38 49 4f 42 ' + '43 2a 34 47 28 50 5b 33 33 25 34 23 2a 55 49 30 ' + '56 32 28 3c 3b 3e 3a 55 28 5b 35 4f 49 59 4a 54 ' + '4d 49 52 31 5d 5a 33 47 38 56 4b 2f 53 26 5f 4d ' + '4a 36 5b 55 2f 5c 60 0d 0a 4d 3e 4b 47 2f 33 5f ' + '33 37 4e 32 42 3f 2b 5c 5f 5d 42 36 5d 5e 52 49 ' + '3b 59 4a 25 4c 5b 46 48 46 5b 35 2c 43 3a 24 5f ' + '24 5b 59 4a 41 3e 35 25 25 29 5f 50 22 4a 48 43 ' + '5d 56 56 4a 44 38 0d 0a 4d 59 3f 2e 3f 24 59 41 ' + '55 2d 34 4e 23 51 34 3f 29 34 4f 5c 60 5f 3b 32 ' + '28 45 41 40 32 48 5d 55 33 40 55 57 5d 3d 3d 5c ' + '55 2a 53 32 36 2b 42 24 21 55 34 2b 3e 5b 49 4a ' + '3a 25 4a 39 26 0d 0a 4d 37 43 26 2f 42 32 3f 39 ' + '5f 35 33 25 5d 4b 35 23 3d 4a 44 3b 4f 4d 4d 49 ' + '5f 28 41 3f 2c 3c 2f 3d 31 4a 5f 5d 25 29 31 5e ' + '4e 43 35 4e 4a 49 2d 3f 44 2f 57 3d 35 26 4f 3d ' + '4a 32 4b 3d 0d 0a 4d 2b 3f 4a 49 42 4d 5b 4a 4a ' + '34 32 51 4e 5b 4a 3b 3b 37 2d 55 3f 57 4a 24 3e ' + '59 4a 40 45 3d 4f 5d 35 35 58 44 52 43 51 22 44 ' + '5a 46 5a 3a 36 31 5f 5a 3a 29 31 55 3b 3a 45 43 ' + '52 55 25 0d 0a 4d 41 5f 5c 60 34 41 2b 3e 5d 4a ' + '2b 59 46 4a 31 5b 5a 46 4c 59 26 56 2a 37 4e 27 ' + '2f 59 49 48 3b 4a 3a 45 23 57 34 32 5d 4a 53 47 ' + '24 57 58 56 2f 35 46 56 5b 4a 2f 49 39 46 49 34 ' + '3f 42 0d 0a 4d 43 43 5f 5d 37 53 35 47 2a 29 34 ' + '4e 34 51 4a 5d 33 3b 4f 2d 32 34 57 27 3d 34 2b ' + '54 4d 31 48 57 22 54 3c 3e 29 4b 5c 30 35 43 27 ' + '53 35 2a 48 4e 56 46 35 23 3e 54 55 2f 24 38 49 ' + '48 0d 0a 4d 45 57 3e 56 40 3a 56 37 3b 5f 35 35 ' + '48 4b 55 34 2b 2b 35 3c 33 2e 34 4e 39 33 3e 54 ' + '31 4a 21 48 39 54 39 46 43 3b 4a 4a 5f 4d 5d 55 ' + '3c 50 5d 55 21 37 27 43 2a 51 3d 4b 4a 35 51 24 ' + '0d 0a 4d 52 5b 4e 49 3a 55 3b 3f 35 33 4d 2e 55 ' + '4e 2a 53 2f 50 5e 5a 4e 36 53 5d 57 34 55 38 4e ' + '24 36 3a 5e 5a 53 3d 42 55 30 3b 51 55 3c 2d 35 ' + '5e 55 55 2d 3c 5b 32 55 3e 38 32 56 56 4c 57 0d ' + '0a 4d 34 56 2a 3c 4c 33 2b 55 2a 55 39 4f 25 39 ' + '3f 4e 34 3e 54 41 55 31 3f 50 58 26 5a 47 36 46 ' + '49 2a 58 2a 24 55 58 4b 55 29 25 5a 30 53 34 4d ' + '2b 4e 59 41 39 4d 4b 3f 57 3a 33 51 52 2a 0d 0a ' + '4d 34 4d 47 54 36 2a 5a 35 4e 4b 2f 27 2d 2e 32 ' + '58 5f 2a 27 2f 60 4b 50 34 26 4e 4d 27 4c 35 55 ' + '39 41 36 49 3a 5a 55 26 58 2a 25 4a 53 3c 26 3b ' + '2a 35 27 4a 4f 36 23 25 45 2f 3e 49 2c 0d 0a 4d ' + '46 3f 2f 29 4b 24 42 4f 48 57 3f 3d 4f 4a 50 45 ' + '56 4e 33 55 54 46 52 49 32 33 2d 4a 2e 34 3b 4c ' + '39 49 4c 2d 50 30 36 21 51 51 36 2d 25 3d 2b 4e ' + '26 36 59 49 58 47 30 32 27 4a 5b 55 0d 0a 4d 2c ' + '56 32 5a 48 55 39 39 4d 5c 36 3c 3c 54 41 49 2c ' + '4c 36 5c 26 4a 3a 37 60 2b 26 2f 3d 55 34 2c 44 ' + '57 31 4c 53 56 49 4e 28 36 37 2f 35 50 51 49 54 ' + '34 4f 42 4c 5a 2e 3b 3c 3e 3a 25 0d 0a 4d 49 52 ' + '26 38 5f 33 46 45 38 35 5d 46 4e 54 4a 3e 49 47 ' + '5b 46 45 4f 28 22 41 60 5c 35 30 24 56 5b 22 59 ' + '4a 37 46 34 49 4e 5e 4f 42 41 5d 43 48 4d 48 50 ' + '28 29 53 51 31 4c 56 58 23 27 0d 0a 4d 3e 4a 2a ' + '53 24 60 40 5e 3a 2d 29 45 26 30 3a 3b 35 25 35 ' + '39 38 38 44 2b 57 0d 0a 48 36 58 38 5c 3c 26 45 ' + '2f 2b 52 25 5c 34 33 52 3d 28 50 3e 3a 26 5b 29 ' + '3c 50 52 51 5b 3f 32 41 39 42 25 0d 0a 4d 53 47 ' + '4d 32 36 45 5c 47 4f 34 2c 58 52 2e 4a 45 38 2e ' + '35 25 52 2d 5e 47 3e 3f 21 59 5f 3a 46 45 50 2c ' + '2d 47 4f 36 3f 5a 52 49 5c 55 60 5d 53 50 3c 47 ' + '4c 3a 2b 38 57 57 39 48 4d 2d 0d 0a 4d 52 3e 3e ' + '3a 42 36 3b 49 57 21 4e 55 39 29 4e 5d 4b 5c 4d ' + '32 59 4b 5d 30 23 41 4e 2a 2b 25 2a 35 46 4c 55 ' + '50 60 2d 50 4a 4f 2f 3d 5f 55 55 42 37 36 49 2a ' + '48 28 23 3c 35 46 57 2e 4a 0d 0a 4d 47 47 21 49 ' + '32 44 37 51 33 56 3e 42 46 55 23 26 32 23 53 35 ' + '2e 3f 35 45 57 27 4b 4b 52 55 57 4a 31 2e 35 57 ' + '35 47 33 57 54 43 3b 45 57 34 2f 44 53 35 31 42 ' + '3e 47 4f 2d 36 21 3b 41 0d 0a 4d 4e 3a 53 2b 47 ' + '35 42 31 5b 4a 52 2c 57 34 4b 3b 30 4b 35 3d 4d ' + '3d 28 47 44 28 57 5e 3a 28 58 59 32 21 52 42 41 ' + '34 5d 5d 2d 28 3d 4a 5b 46 57 2d 31 51 56 55 57 ' + '3c 2d 5f 33 36 5d 39 0d 0a 4d 3a 2c 48 2f 4d 59 ' + '4b 3a 4c 5d 2d 43 34 38 56 35 48 44 44 38 5e 5c ' + '53 53 45 43 48 41 2f 4f 35 4e 4a 4d 4a 55 54 42 ' + '2d 25 21 56 5c 35 4e 51 36 37 26 57 26 23 35 52 ' + '22 55 59 5b 3c 34 0d 0a 4d 2e 3d 3a 29 57 2b 4c ' + '53 2b 3f 33 45 35 4e 24 4b 30 41 4c 5e 47 4d 36 ' + '45 27 3a 58 5c 35 39 43 41 51 56 25 39 32 44 50 ' + '58 5b 2c 56 2a 54 56 58 58 4a 5d 23 3b 2b 47 4d ' + '35 51 28 2e 31 0d 0a 4d 51 35 46 2e 28 60 39 60 ' + '4a 37 28 4f 42 35 24 4d 25 5f 33 33 41 3b 38 26 ' + '2c 3c 55 3c 35 21 46 47 29 25 52 26 50 22 3a 45 ' + '4e 51 54 53 5c 3e 2d 4c 49 37 52 2d 34 4b 5b 5a ' + '41 4f 46 5f 0d 0a 4d 4a 4b 5a 24 5e 3c 47 23 43 ' + '5c 33 47 37 57 2f 31 23 59 44 48 37 5d 53 35 57 ' + '37 4f 48 2c 59 3e 34 4f 24 2c 5d 56 4a 26 56 35 ' + '51 5a 2d 53 4d 34 2f 33 44 2e 37 45 2c 45 46 27 ' + '35 34 4c 0d 0a 4d 2e 45 4a 58 5e 5b 3f 46 4e 3b ' + '5e 46 48 5e 31 3f 4d 30 43 5c 43 41 5b 46 49 45 ' + '22 4f 4e 4a 3a 29 31 22 37 45 28 5a 4e 3b 26 3a ' + '5b 2d 33 5c 55 2c 29 30 40 33 43 4b 4b 4c 43 57 ' + '35 57 0d 0a 4d 53 35 2b 5f 60 23 34 5f 44 33 2b ' + '25 26 28 31 5e 39 5a 25 2f 3b 34 3e 58 4d 31 5f ' + '2e 55 27 52 2c 49 3f 28 3a 2f 5f 35 33 25 57 3d ' + '33 34 4f 5c 60 5c 33 49 49 48 5a 46 5f 49 4a 4f ' + '59 0d 0a 4d 23 5e 2f 42 24 4f 42 42 56 5d 36 5b ' + '5d 2d 22 3a 46 2b 5d 2f 52 54 49 22 59 3c 39 21 ' + '44 26 40 38 3d 2d 27 59 57 3f 2b 34 2d 5f 35 35 ' + '3d 41 44 51 51 59 27 25 3a 59 45 5a 5e 46 4e 56 ' + '0d 0a 4d 55 29 37 4b 4a 23 32 30 22 5e 2a 47 59 ' + '4a 5b 23 2d 4d 56 54 50 4b 41 3a 3c 48 45 51 52 ' + '31 5f 42 3c 4e 5b 3c 56 56 47 28 48 57 3f 5e 3a ' + '40 43 27 59 46 5a 46 4a 2a 53 58 46 57 4f 3c 0d ' + '0a 4d 30 45 5d 55 26 4f 32 55 2b 5e 3a 42 35 4e ' + '4a 43 42 33 2b 45 2a 37 29 23 2d 56 56 42 39 4f ' + '3a 57 53 34 2a 47 57 35 56 5b 4a 27 5a 3a 47 42 ' + '35 2a 34 40 57 5b 35 23 2b 5f 60 2c 55 22 0d 0a ' + '4d 53 3b 46 36 41 34 5b 4f 5b 4d 2a 31 49 27 51 ' + '56 51 45 3c 48 38 4d 34 48 4f 33 33 35 57 3b 4a ' + '50 58 46 5b 45 27 4c 41 25 35 35 3a 46 5f 2f 30 ' + '4d 57 4a 26 3f 4a 2e 3a 4a 34 30 45 2a 0d 0a 4d ' + '28 54 4c 4d 22 53 3d 33 34 21 2f 2d 31 5c 51 36 ' + '4a 58 46 3f 2b 44 24 51 5a 4a 22 33 56 42 49 39 ' + '3f 3a 55 3d 43 49 2f 5a 4a 46 34 32 4e 34 48 42 ' + '49 28 5d 52 5c 34 4d 4d 50 3b 3c 4d 0d 0a 4d 36 ' + '3d 4f 33 5f 3e 4a 2d 47 3f 3d 34 52 43 52 25 52 ' + '44 41 2c 35 5d 3c 30 2b 5b 4d 55 37 3b 3f 36 33 ' + '4d 56 4f 35 2d 58 4f 3d 4e 49 34 44 32 4c 53 3b ' + '3f 45 4a 29 58 48 4c 55 5d 5e 4d 0d 0a 4d 52 2f ' + '31 30 5a 4c 4b 2a 2e 4b 46 4b 4a 3a 42 4b 3d 37 ' + '4a 3c 22 4f 26 2b 24 57 41 46 49 4a 46 58 35 4d ' + '52 4c 55 32 5c 29 49 5b 54 39 27 4d 36 55 23 24 ' + '41 3c 2d 5b 46 49 43 57 4e 58 0d 0a 4d 3b 5d 55 ' + '3e 2c 3a 59 4e 35 5a 3a 3c 45 5d 2e 42 3d 3b 3c ' + '55 46 58 52 43 56 37 27 29 25 5a 2f 36 51 37 5a ' + '4d 54 5b 4a 3e 5d 57 44 59 5c 46 4f 26 2b 4a 3b ' + '38 57 3d 36 33 33 58 3d 35 0d 0a 4d 23 2d 55 4c ' + '55 32 2d 52 5e 43 56 2a 57 2a 45 5e 5e 54 34 34 ' + '45 52 4a 44 4d 5f 45 37 46 28 4d 33 43 53 5b 4e ' + '2a 4c 23 34 24 2a 47 4a 49 35 59 23 3c 47 3d 26 ' + '5e 3b 47 40 5d 37 54 4a 0d 0a 4d 33 3c 3c 5b 5c ' + '4b 53 37 47 4f 51 48 56 47 4a 58 48 5f 51 50 5d ' + '4e 5a 45 29 21 4c 57 55 4e 35 2f 21 3a 42 32 59 ' + '37 52 57 2f 2d 3e 3f 45 4e 5d 49 2b 21 4e 35 49 ' + '3b 37 5f 60 26 59 48 0d 0a 4d 32 48 49 52 33 2f ' + '30 32 37 2a 59 2f 35 50 3e 2a 32 5d 58 4a 4f 4d ' + '57 35 40 4f 4a 22 59 3b 29 58 36 4a 5c 56 48 59 ' + '38 5d 35 2b 4c 37 28 57 59 2b 5f 39 45 3c 5c 55 ' + '36 47 55 60 39 5d 0d 0a 4d 57 60 4b 53 3d 51 4a ' + '26 26 5d 55 34 59 3d 31 27 35 55 35 3b 5c 32 46 ' + '53 54 54 56 48 44 40 4a 36 59 4a 45 2d 4a 39 5a ' + '4e 4a 4f 2f 32 37 54 43 2c 55 30 4a 57 24 5b 3b ' + '30 4b 22 45 51 0d 0a 4d 59 24 4e 31 48 33 5a 44 ' + '23 54 5b 4a 4b 3e 4f 2d 2a 56 55 3d 55 36 4b 2b ' + '31 49 39 3d 4b 32 2a 53 2d 37 48 2d 0d 0a 2c 54 ' + '24 23 4a 2a 5c 35 3a 51 54 36 4c 42 39 59 4e 56 ' + '4c 2b 4a 3d 4e 4b 0d 0a 4d 59 4a 56 3b 2f 30 40 ' + '36 5a 55 57 22 4f 35 36 4e 45 31 51 5f 29 56 4b ' + '33 41 4c 44 34 3e 57 5d 4a 26 54 43 2a 37 2e 34 ' + '43 53 5d 47 49 22 4a 47 2a 3c 5d 4a 55 4b 3f 33 ' + '54 34 58 51 53 0d 0a 4d 36 4f 23 39 5c 58 27 3a ' + '4b 4c 25 46 4a 4f 56 5b 55 2c 49 46 42 32 2c 52 ' + '23 33 53 58 25 37 48 4b 29 35 2e 3c 35 4b 31 36 ' + '5f 32 23 42 47 3e 40 60 3e 57 25 39 4d 56 2b 42 ' + '56 39 4a 36 0d 0a 4d 57 56 59 4a 53 27 3a 58 28 ' + '50 2e 2a 4f 51 30 3d 30 58 5c 55 39 32 60 3c 5c ' + '35 23 44 46 37 33 2a 22 30 3f 3a 4b 34 2d 4e 33 ' + '58 4a 5a 44 22 5c 5c 3c 35 3a 36 28 39 50 21 40 ' + '3d 4a 45 0d 0a 4d 52 2b 2a 22 56 5f 26 30 2e 2e ' + '5d 2d 2c 2f 56 5b 55 3d 36 24 44 38 60 58 49 47 ' + '49 43 47 28 49 2d 40 48 56 39 5a 50 27 43 28 59 ' + '27 25 2f 40 41 2f 60 2f 55 4a 54 28 3f 2f 40 5e ' + '3a 2d 0d 0a 4d 28 33 51 34 2d 26 42 31 5e 27 5f ' + '55 2f 30 4d 4f 48 52 4f 5f 60 22 54 2b 3e 59 47 ' + '4b 5a 2f 58 47 52 5c 38 3e 59 28 2b 3b 5b 4f 55 ' + '34 3f 3c 34 27 33 4d 57 35 51 5b 34 32 44 35 5b ' + '3f 0d 0a 4d 2b 51 21 44 59 36 49 26 5b 3c 56 3a ' + '58 4b 4e 34 5b 3a 29 4e 49 4a 48 59 5c 37 5e 51 ' + '53 26 48 45 34 25 4a 45 31 5b 5a 28 44 35 60 33 ' + '5c 5f 5c 60 54 21 37 42 4e 21 5d 55 30 2f 46 48 ' + '0d 0a 4d 40 2e 2a 54 45 28 43 25 53 5e 2c 32 35 ' + '2e 33 37 35 26 2c 34 53 57 2d 34 33 2d 28 3c 5f ' + '50 22 31 25 25 5e 4b 3d 30 47 57 2c 3a 28 27 57 ' + '2e 57 4d 49 43 45 2e 2f 51 29 34 3b 34 51 31 0d ' + '0a 4d 59 5a 4e 4a 41 38 46 42 49 52 2a 41 51 45 ' + '2b 38 32 5f 2d 31 21 4e 4e 48 35 4d 4a 3b 4a 5b ' + '3d 4d 5a 2a 49 52 2c 3c 5c 31 4e 5b 2a 5b 4a 29 ' + '3e 42 45 2c 5e 25 5f 4e 54 37 3d 3d 55 2a 0d 0a ' + '4d 30 30 45 5f 4b 5c 41 4e 5b 59 3f 25 23 5e 4a ' + '4e 2b 34 2a 4b 55 35 37 24 4f 29 2b 52 27 39 4a ' + '36 5d 53 2d 30 4a 47 35 5f 32 4d 2d 35 35 57 2d ' + '31 51 4c 25 52 5f 44 3c 4a 4c 4e 59 4a 0d 0a 4d ' + '2c 4b 55 35 50 4b 46 56 5b 5a 3b 30 59 31 5f 55 ' + '2e 59 5a 36 48 46 2f 32 57 5d 35 3d 47 3a 56 5b ' + '59 3a 5b 2d 38 45 31 43 27 5f 38 29 4f 3d 37 2c ' + '55 3c 56 57 3b 30 2f 29 4d 48 44 3b 0d 0a 4d 31 ' + '45 5e 31 40 2a 4a 4f 25 23 4f 49 33 32 2b 4e 37 ' + '3b 33 38 55 5f 35 36 33 2d 38 5c 3f 4c 2d 35 57 ' + '38 36 46 51 54 2a 4b 4d 36 42 5a 3e 4a 42 34 32 ' + '59 32 43 2b 4c 47 59 3f 4d 31 2b 0d 0a 4d 4e 57 ' + '3d 33 34 2f 3c 35 50 59 3b 4a 48 43 24 29 3e 34 ' + '4d 23 26 3b 4a 5f 4e 55 2b 25 32 56 5a 40 5d 49 ' + '4a 35 58 5a 36 49 46 34 5f 24 29 3d 57 2d 26 21 ' + '5c 4f 46 40 27 5e 35 25 5c 49 0d 0a 4d 4a 29 26 ' + '54 35 26 50 4e 47 2e 56 48 3b 57 3f 3e 48 5b 2b ' + '4d 48 4a 22 47 3f 56 31 51 4d 5f 4a 48 31 59 48 ' + '4c 58 5d 4d 30 3e 59 4a 3e 28 2e 35 47 2c 4d 60 ' + '34 49 4b 2d 55 3f 3a 4e 3b 0d 0a 4d 3b 30 32 5f ' + '28 27 38 4e 5b 3b 5c 4d 32 52 2b 55 34 33 3d 4a ' + '43 3d 55 3d 35 2a 34 3e 30 48 52 58 32 49 40 2e ' + '25 57 34 4e 32 2d 36 49 43 2d 55 3d 35 30 5f 4d ' + '49 46 4b 34 39 32 2a 5b 0d 0a 4d 48 4a 54 4a 31 ' + '2e 4a 4b 33 3e 5b 4a 36 41 3b 22 46 49 58 45 32 ' + '5f 31 36 3e 2d 45 35 4d 4b 34 4f 55 49 48 46 5a ' + '36 3b 3b 35 49 45 57 3d 2d 2a 45 27 3d 3a 29 31 ' + '43 28 28 52 45 2b 3a 0d 0a 4d 21 3b 34 39 25 5d ' + '55 3d 5f 4d 30 4a 56 59 4d 55 2b 46 42 37 55 2a ' + '4b 33 30 3b 49 26 36 49 58 31 25 5b 4c 52 5d 29 ' + '4a 51 39 3e 45 4a 37 29 4a 47 35 5b 4a 53 49 28 ' + '36 5a 46 49 3b 36 0d 0a 4d 5c 4b 2d 36 37 4d 45 ' + '52 52 4b 5b 2b 5c 46 48 3b 45 3b 4a 49 34 45 58 ' + '53 2c 56 55 4e 46 45 30 5a 3f 3c 32 3e 55 36 4b ' + '35 4c 5f 41 5e 35 56 57 32 25 4a 4b 56 32 25 47 ' + '59 26 34 54 4c 0d 0a 4d 5c 53 3d 2e 59 46 4a 59 ' + '3b 3a 3d 3d 33 25 3c 4a 55 3e 4b 54 5b 58 3d 31 ' + '3c 39 43 56 55 5a 22 53 54 39 34 5c 34 47 26 2a ' + '2d 27 3c 43 52 3d 43 48 29 2b 3b 46 36 4f 30 56 ' + '36 41 51 49 0d 0a 4d 5b 45 4b 54 34 25 40 4a 4a ' + '35 22 3c 55 48 31 36 38 29 5b 3d 5a 27 2c 49 38 ' + '5a 5b 2c 4a 53 54 55 24 3f 22 43 4d 36 47 3b 56 ' + '29 50 21 43 44 35 49 56 5d 48 21 58 4a 59 23 21 ' + '53 56 4b 0d 0a 4d 26 34 46 3a 35 4c 53 28 3b 2f ' + '28 21 51 59 4a 56 45 46 2f 54 55 48 2b 60 60 23 ' + '51 5d 5a 3e 44 2f 2f 3a 4c 59 32 2d 28 50 4f 4c ' + '48 51 56 56 21 35 4a 26 27 4a 53 42 4b 42 36 50 ' + '2e 3c 0d 0a 4d 54 52 2e 25 40 3c 38 4a 27 29 4f ' + '48 55 58 3c 36 31 25 26 60 40 26 2a 47 54 30 31 ' + '43 51 35 49 28 23 40 58 49 4a 51 23 2e 33 32 3b ' + '27 37 56 52 48 4c 31 21 29 51 50 3a 4c 51 50 5c ' + '55 0d 0a 4d 3a 24 60 28 53 43 5a 34 52 2e 23 60 ' + '5f 3a 49 44 40 54 51 3a 50 43 38 3c 38 53 46 42 ' + '36 2b 23 27 27 4d 52 33 53 35 48 31 47 5a 34 30 ' + '42 38 47 2e 2e 2a 35 40 2a 24 3e 2c 47 5a 5c 54 ' + '0d 0a 4d 4a 37 28 29 27 46 4d 21 38 3e 5f 55 59 ' + '48 27 40 52 51 29 27 5c 54 2c 3a 54 34 24 57 4c ' + '4e 2f 21 2d 37 48 45 57 23 43 5e 3a 2c 36 58 21 ' + '5b 3c 0d 0a 54 5e 2e 28 28 22 21 56 49 2e 29 33 ' + '3d 0d 0a 4d 48 5f 21 2b 3e 59 2a 5b 39 4e 3a 46 ' + '2c 4f 37 55 35 25 3f 31 5c 43 59 3a 34 39 31 28 ' + '3b 51 37 2d 4c 5d 5d 3c 57 33 37 2f 5f 50 23 3d ' + '32 2a 45 24 5b 4a 57 55 27 53 59 48 43 31 2d 57 ' + '0d 0a 4d 49 52 22 2e 23 45 2b 42 21 4d 5d 56 5a ' + '48 38 34 31 48 4f 46 49 56 24 5c 27 2a 30 2d 3d ' + '37 34 3e 57 4a 49 32 2c 48 3f 2c 24 2b 50 55 24 ' + '5f 46 42 56 5e 5b 3a 3a 59 31 55 3b 26 5d 4d 0d ' + '0a 4d 35 52 2a 28 33 4e 55 26 31 34 3b 2c 3b 4f ' + '5a 3a 29 45 2a 54 41 32 41 52 21 60 5a 3a 2c 3e ' + '5a 4e 5b 2b 34 27 5f 50 21 35 21 2f 5c 60 59 47 ' + '2c 3e 46 42 31 3e 4a 42 60 27 4c 4a 32 2e 0d 0a ' + '4d 4d 4a 3c 53 2b 41 2b 59 24 2d 4c 5a 45 5e 39 ' + '4a 39 5c 57 5d 2d 3d 4d 5a 5a 39 4d 5a 4d 4d 35 ' + '59 26 54 60 35 5b 34 30 37 49 56 5f 2d 31 2a 4f ' + '34 52 4d 33 25 5d 57 5d 35 32 24 48 5c 0d 0a 4d ' + '49 3c 43 44 36 42 5e 37 5e 5d 31 2b 4d 56 55 57 ' + '52 5d 35 35 26 30 4e 29 25 25 34 3f 2d 4e 51 34 ' + '2c 55 32 59 25 3e 57 51 5e 30 33 3e 55 4a 59 4f ' + '3a 55 21 28 52 4b 27 32 49 27 39 4d 0d 0a 4d 52 ' + '54 57 59 21 5b 3f 28 2d 59 3f 3d 30 2b 55 32 3f ' + '3a 41 35 3d 53 34 5d 60 4e 56 49 45 24 54 5c 38 ' + '24 51 48 4f 25 2e 56 5d 4f 5a 4a 25 3e 45 36 48 ' + '56 5a 37 5f 49 4a 39 25 31 53 3c 0d 0a 4d 40 4d ' + '56 59 4a 5b 3d 4e 36 41 57 3b 36 3a 4e 5e 37 49 ' + '49 32 2d 2e 2d 3d 43 2d 53 35 21 5b 35 53 3b 3d ' + '57 57 48 45 49 24 5e 59 2b 45 34 32 36 5a 4f 5f ' + '2b 31 5e 58 54 2f 4d 5f 4f 34 0d 0a 4d 36 36 5a ' + '4f 54 54 32 44 3b 3c 29 32 5b 29 53 55 3b 3a 47 ' + '49 59 48 22 57 34 3a 59 3e 36 3a 4c 57 58 44 52 ' + '23 3b 5d 2d 3d 5c 53 35 27 35 44 5f 4a 4a 3f 4b ' + '4d 48 44 37 54 24 4f 4d 4a 0d 0a 4d 21 5b 42 57 ' + '46 4e 5b 26 48 3b 53 30 36 24 53 3e 5b 5e 5d 37 ' + '2f 57 36 41 57 3d 36 3a 43 3d 55 2d 5e 4a 49 58 ' + '46 2c 39 23 26 2a 55 23 27 2f 3f 4f 30 2a 57 34 ' + '57 5d 35 3c 53 3d 31 4a 0d 0a 4d 4e 29 35 5c 44 ' + '3d 4e 5a 56 48 36 3a 48 39 4d 4b 34 2b 4d 55 3d ' + '2d 33 28 4a 24 31 43 5f 3f 57 34 4d 4e 55 21 4e ' + '5a 4a 5b 2f 52 4d 34 5c 40 4e 34 39 21 2c 57 2f ' + '35 32 53 4d 3b 3d 46 0d 0a 4d 42 3b 3d 45 4d 4d ' + '27 27 23 28 5b 3b 3d 4d 38 4f 59 26 5c 38 51 58 ' + '42 22 4f 5f 2d 34 2b 60 53 2c 57 33 5c 55 3a 55 ' + '4f 49 5b 27 57 2b 36 49 3b 3a 34 32 48 52 4d 2d ' + '4e 4e 51 3e 57 3e 0d 0a 4d 43 53 4c 26 47 4e 5b ' + '3e 56 4d 32 53 54 38 25 51 4e 36 4f 30 56 4e 47 ' + '2a 4b 27 48 4b 34 40 4d 25 34 5d 4e 21 33 3e 33 ' + '5c 60 4c 2b 3f 39 41 56 4e 43 2a 4a 5e 56 4d 32 ' + '56 4c 25 57 5b 0d 0a 4d 4d 48 51 4e 5a 3f 56 4b ' + '36 43 4d 3e 58 60 59 4a 5b 23 3b 28 23 50 2e 60 ' + '2a 52 45 2c 56 43 41 5d 4c 48 30 36 46 50 3c 43 ' + '53 36 41 3b 56 42 59 59 5b 42 4b 44 3d 4f 51 56 ' + '4a 59 21 21 0d 0a 4d 45 40 2c 35 45 2a 32 2d 2e ' + '25 25 32 2e 57 27 3b 25 36 48 58 33 47 41 3a 4d ' + '31 30 3c 5d 4a 4d 51 50 5d 30 2f 42 49 3c 43 31 ' + '31 39 35 41 42 51 57 25 37 28 58 41 40 3f 36 43 ' + '32 28 3d 0d 0a 4d 43 33 41 22 3f 45 59 58 4b 2d ' + '52 5f 60 57 25 2b 30 4d 28 40 36 5f 46 4b 2c 3c ' + '2e 21 56 59 59 49 44 34 21 23 55 3b 42 30 60 38 ' + '51 56 4a 36 51 4a 28 41 38 30 23 40 34 38 43 21 ' + '34 27 0d 0a 4d 27 2f 5c 60 54 4a 54 54 3e 60 32 ' + '21 53 34 48 48 2f 39 3e 2a 35 45 29 2d 22 25 43 ' + '5c 54 5d 28 40 3d 50 28 5c 35 39 36 28 24 27 28 ' + '5e 45 2c 36 2b 47 4d 50 2a 48 44 35 27 60 3c 5f ' + '3b 0d 0a 4d 2f 5e 35 2f 24 37 56 5b 26 47 2a 21 ' + '47 40 34 50 58 21 49 23 39 34 5d 2b 23 27 2d 36 ' + '24 43 26 33 5d 2a 29 45 27 29 2f 3a 49 37 42 49 ' + '3c 40 4b 44 3d 4d 26 3e 55 32 34 59 28 51 33 60 ' + '0d 0a 4d 2a 45 31 55 26 4a 3b 27 35 2c 34 52 38 ' + '59 51 51 34 27 27 60 5e 5d 2d 38 39 21 27 42 40 ' + '28 59 2d 33 56 2d 3b 2f 51 4b 3c 3a 23 26 53 2c ' + '56 56 4c 5a 5b 54 29 50 57 32 4d 3f 31 39 21 0d ' + '0a 4d 3a 38 57 26 31 2f 3d 32 39 48 3b 2b 53 2a ' + '46 2e 3a 5d 31 39 49 27 44 4f 21 4e 44 3f 2b 5b ' + '43 32 5b 41 25 3b 22 55 36 44 4d 39 55 5d 52 4d ' + '37 54 4e 58 42 54 4f 29 39 4b 4a 27 5f 46 0d 0a ' + '4d 4a 45 3d 36 46 46 5b 3e 4a 3a 2b 5f 60 29 4a ' + '55 43 47 37 56 38 33 5d 2c 5e 36 43 59 5c 58 3f ' + '5d 25 22 51 59 4b 56 24 5d 43 49 33 39 51 3c 30 ' + '3f 5c 55 34 39 5d 2e 4c 33 56 4e 58 4f 0d 0a 4d ' + '5e 3a 4d 4f 3c 43 28 34 5c 3e 33 24 3e 3e 56 4d ' + '34 4c 4f 4e 4a 5d 3c 56 4c 3a 32 3d 2c 52 4c 4f ' + '5d 2d 35 4d 4f 35 5f 59 4a 55 2e 36 2c 49 51 5c ' + '41 32 2b 55 3e 52 49 27 4e 49 43 3e 0d 0a 4d 59 ' + '4a 47 3a 4e 59 4a 3c 43 32 2f 45 59 32 21 35 36 ' + '5d 5d 32 52 5d 35 26 57 33 5b 3a 47 59 4e 4a 45 ' + '28 29 38 49 3c 3e 30 2a 3d 5f 5a 36 48 44 5b 4d ' + '37 3b 3f 44 48 42 3a 3c 48 47 2d 0d 0a 4d 2b 5f ' + '27 5c 42 2d 48 39 4f 3b 5b 3a 45 45 5a 4a 2b 56 ' + '41 4a 29 4e 55 2c 2f 44 22 42 5d 35 24 35 4a 36 ' + '5f 35 37 2b 4d 57 3d 37 4d 48 58 5c 49 25 5f 50 ' + '60 23 45 36 46 2a 4e 55 0d 0a 4f 5a 0d 0a 4d 4a ' + '2a 2d 3e 4b 5e 4a 43 5c 54 59 32 5f 60 55 24 41 ' + '35 5a 4a 5b 27 33 5d 5a 2d 3f 3d 34 3f 57 3f 3d ' + '32 5e 52 4c 44 38 52 2e 3b 57 35 2e 5b 4a 56 4d ' + '34 2d 5b 46 48 39 2f 3d 54 5e 5a 0d 0a 4d 49 44 ' + '24 38 5c 3f 28 45 46 56 5b 4a 21 46 5a 3d 4f 53 ' + '34 4e 31 4c 4c 55 31 55 39 5a 4a 29 21 27 45 2b ' + '59 27 32 2d 4e 3a 49 22 4d 4e 5f 4f 35 2a 4b 5c ' + '4f 53 34 52 2f 4e 57 5a 4a 28 0d 0a 4d 51 5f 60 ' + '31 5c 30 48 51 55 34 3a 5d 2d 3c 4a 5b 32 55 2c ' + '25 36 53 32 2f 44 31 31 3e 5a 48 3b 3d 55 2d 34 ' + '4b 5e 45 3a 42 30 32 43 51 2e 37 53 5e 4a 42 5e ' + '3e 4e 5e 3e 4e 2f 53 35 24 0d 0a 4d 5d 45 51 43 ' + '34 32 3f 5a 4a 5b 59 4a 59 3f 25 3c 57 5a 3a 2f ' + '44 38 5f 24 2f 52 3f 5b 55 24 3f 3f 30 27 3d 4e ' + '48 4d 53 3f 2c 4d 2a 31 4f 26 37 54 33 5b 4f 3d ' + '37 2b 5f 5a 46 4b 46 57 0d 0a 4d 27 56 54 36 3c ' + '2d 5d 5a 31 49 2f 43 28 5a 4e 3b 4d 54 55 50 48 ' + '29 26 3b 59 35 4a 39 31 5c 42 39 5e 2f 30 3f 35 ' + '4e 39 3a 27 2f 53 34 2b 2c 56 3a 24 5d 28 49 5c ' + '3e 29 37 2b 5c 43 26 0d 0a 4d 39 3d 55 30 53 4d ' + '4e 57 34 49 46 3a 48 2b 2d 5e 46 49 44 37 58 52 ' + '54 2c 44 39 3a 21 43 32 49 26 3b 3b 34 24 4d 55 ' + '2b 36 3c 41 55 2a 28 52 31 5c 5b 4a 59 46 4a 60 ' + '4e 58 5d 33 35 38 0d 0a 4d 40 41 43 2f 4f 44 36 ' + '48 2d 3a 4e 28 41 30 53 3d 2a 55 3a 40 4d 29 27 ' + '3b 56 5c 55 49 36 55 45 25 4e 23 3b 51 36 47 3b ' + '30 36 4e 2e 46 35 2c 55 2c 46 45 2a 42 2e 24 49 ' + '28 52 3b 3f 33 0d 0a 4d 36 5c 4b 36 4f 39 5a 3a ' + '49 5e 37 46 4d 2e 56 4d 48 4e 50 59 2d 37 5b 31 ' + '28 3c 5d 2b 43 5a 55 2b 44 3b 5e 56 34 28 3d 2f ' + '50 21 41 3e 3a 54 28 3b 35 30 33 40 35 3e 36 2d ' + '2f 3a 22 2a 0d 0a 4d 4c 36 52 31 39 5d 58 53 46 ' + '4c 57 28 55 34 26 42 49 25 3a 5f 3a 4b 3c 35 4b ' + '53 43 50 3a 4e 51 30 29 5d 31 35 46 25 38 5c 5d ' + '51 42 49 3c 42 55 27 39 37 42 4d 3c 44 27 27 2f ' + '3a 4b 2a 0d 0a 4d 36 4f 27 3b 42 4b 52 31 48 21 ' + '51 43 25 2f 31 28 5e 3c 4e 2c 35 23 45 30 5d 4c ' + '4a 31 50 3c 44 38 58 2d 37 28 48 2e 2e 2a 4c 2b ' + '22 47 29 21 25 36 4b 3e 2e 28 27 57 2b 34 2e 39 ' + '3f 60 0d 0a 4d 4b 31 50 3d 51 35 40 36 59 59 51 ' + '59 2d 36 55 42 33 2f 3c 3c 54 59 25 33 43 44 39 ' + '49 3c 42 54 42 44 45 4f 43 43 27 2f 55 4a 55 27 ' + '3b 43 60 2e 2a 4d 2b 60 40 26 30 31 43 51 33 34 ' + '31 0d 0a 4d 3c 3c 2c 2c 34 4b 56 2a 32 4c 33 27 ' + '60 2e 3e 2e 3a 3c 28 60 23 56 5f 3e 47 41 30 26 ' + '29 25 27 50 3f 56 49 37 38 2a 2d 25 3f 54 4c 43 ' + '47 4f 33 38 48 30 21 40 43 44 34 3e 57 4a 51 31 ' + '0d 0a 4d 2b 44 39 53 5b 4a 35 45 55 3e 44 30 34 ' + '56 47 40 3d 4e 3a 45 3c 60 58 5e 5d 2c 52 4e 2c ' + '3e 3a 40 41 32 51 5e 4d 2d 5b 25 51 4b 33 28 33 ' + '26 5a 47 21 31 53 30 28 40 21 58 5e 4d 2c 34 0d ' + '0a 4d 23 27 26 2a 42 50 45 25 27 2c 4d 22 25 60 ' + '2e 21 33 32 60 3c 43 2f 26 3a 58 40 60 47 44 34 ' + '2d 56 29 2a 40 31 50 23 31 39 52 51 4a 30 48 59 ' + '26 31 37 60 23 2f 3c 3d 5a 2a 48 34 4d 4c 0d 0a ' + '35 58 58 48 32 48 5e 45 2d 50 2e 3e 56 32 3a 41 ' + '5e 3c 58 51 52 3a 33 26 44 44 3f 5f 39 0d 0a 60 ' + '0d 0a 65 6e 64 0d 0a 45 4e 44 20 2d 2d 2d 20 43 ' + '55 54 20 48 45 52 45 20 2d 2d 2d 20 43 75 74 20 ' + '48 65 72 65 20 2d 2d 2d 20 63 75 74 20 68 65 72 ' + '65 20 2d 2d 2d 20 6a 65 6e 65 73 30 31 2e 6a 70 ' + '67 0d 0a ' diff --git a/uudecode/uudecode.mdp b/uudecode/uudecode.mdp new file mode 100644 index 0000000..14bb940 Binary files /dev/null and b/uudecode/uudecode.mdp differ diff --git a/uudecode/uulib.mdp b/uudecode/uulib.mdp new file mode 100644 index 0000000..10a1fcd Binary files /dev/null and b/uudecode/uulib.mdp differ diff --git a/uudecode/uulib.opt b/uudecode/uulib.opt new file mode 100644 index 0000000..932385c Binary files /dev/null and b/uudecode/uulib.opt differ diff --git a/uuencode/Debug/uuencode.lib b/uuencode/Debug/uuencode.lib new file mode 100644 index 0000000..e37f415 Binary files /dev/null and b/uuencode/Debug/uuencode.lib differ diff --git a/uuencode/Debug/vc60.idb b/uuencode/Debug/vc60.idb new file mode 100644 index 0000000..c9baa39 Binary files /dev/null and b/uuencode/Debug/vc60.idb differ diff --git a/uuencode/Release/uuencode.lib b/uuencode/Release/uuencode.lib new file mode 100644 index 0000000..2c4151b Binary files /dev/null and b/uuencode/Release/uuencode.lib differ diff --git a/uuencode/Release/vc60.idb b/uuencode/Release/vc60.idb new file mode 100644 index 0000000..1755363 Binary files /dev/null and b/uuencode/Release/vc60.idb differ diff --git a/uuencode/makefile b/uuencode/makefile new file mode 100644 index 0000000..4304845 --- /dev/null +++ b/uuencode/makefile @@ -0,0 +1,40 @@ + +MODULES=\ + uuencode.cpp + +CC=g++ +LIB=ar +EXEDIR=../exe/ +OPTIM= +CFLAGS=-c -g +INCLUDES= -I.. +LIBS= +LFLAGS=-r +SHELL=/bin/sh +SPACER= +TARGET=uuencode.lib + +OBJS=uuencode.o + +all: $(EXEDIR)$(TARGET) $(MODULES) $(OBJS) + +$(OBJS): $(MODULES) + $(CC) $(CFLAGS) $(INCLUDES) $(MODULES) + +$(OBJS) : makefile + +$(EXEDIR)$(TARGET): $(OBJS) + $(LIB) $(LFLAGS) $(EXEDIR)$(TARGET) $(OBJS) + +uuencode.o : uuencode.cpp uuencode.hpp + +# DO NOT REMOVE + +# $(MODULES) makefile + + + + + + + diff --git a/uuencode/scraps.txt b/uuencode/scraps.txt new file mode 100644 index 0000000..5f1e108 --- /dev/null +++ b/uuencode/scraps.txt @@ -0,0 +1,144 @@ +*/ + +/* +#include +#include +#include +#include +#include + +String UUEncode::encode(Array &encodeBytes) +{ + static char Base64Table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + int length; + int index; + StringBuffer strTempLine; + + strTempLine.growBy(8192); + if(!(length=encodeBytes.size()))return String(); + for(index=0;index +#include +#include +#include +#include +#include + +BOOL UUEncode::encode(GUIWindow &parentWindow,String srcPathFileName,Block &lineStrings,BOOL initBlock)const +{ + Profile iniProfile; + char readBuff[45]; + int readCount; + int byteCount; + int lineCount; + char *ptrBuff; + String outLine; + int ch; + + if(initBlock)lineStrings.remove(); + if(srcPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + iniProfile.makeFileName(srcPathFileName); + srcPathFileName.removeTokens("\\/"); + ::sprintf(outLine,"begin %d %s",644,(char*)srcPathFileName); + lineStrings.insert(&outLine); + Progress encodeProgress(parentWindow,srcPathFileName); + encodeProgress.canCancel(TRUE); + encodeProgress.show(TRUE); + encodeProgress.setText("encoding... (press ESC to cancel)."); + while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;} + readView.rewind(); + encodeProgress.range(lineCount); + while(readCount=readView.read(readBuff,sizeof(readBuff))) + { + String lineString; + char *ptrLine=(LPSTR)lineString; + *(ptrLine++)=chEncode(readCount); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + parentWindow.yieldTask(); + } + lineStrings.insert(&lineString); + encodeProgress++; + if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;} + if(readCount!=sizeof(readBuff))break; + } + String lastLine; + lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`'); + lineStrings.insert(&lastLine); + lineStrings.insert(&String("end")); + return TRUE; +} + +*/ +*/ \ No newline at end of file diff --git a/uuencode/uuencode.cpp b/uuencode/uuencode.cpp new file mode 100644 index 0000000..a53f702 --- /dev/null +++ b/uuencode/uuencode.cpp @@ -0,0 +1,74 @@ +#include +#include +#include + +bool UUEncode::encode(Array &bytes,const String &strName,Block &encodedLines) +{ + File inFile; + int readCount; + char readBuff[45]; + int byteIndex; + int byteCount; + char *ptrBuff; + + encodedLines.remove(); + encodedLines.insert(&String(String("begin 644 ")+strName)); + byteIndex=0; + while(readCount=read(bytes,byteIndex,readBuff,sizeof(readBuff))) + { + StringBuffer stringBuffer; + stringBuffer.append(chEncode(readCount)); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + stringBuffer.append(chEncode(*ptrBuff>>2)); + stringBuffer.append(chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F)); + stringBuffer.append(chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03)); + stringBuffer.append(chEncode(ptrBuff[2]&0x3F)); + } + encodedLines.insert(&stringBuffer.toString()); + if(readCount!=sizeof(readBuff))break; + } + encodedLines.insert(&String("'")); + encodedLines.insert(&String("end")); + return encodedLines.size()?true:false; +} + +String UUEncode::encode(Array &bytes,const String &strName) +{ + StringBuffer stringBuffer; + File inFile; + int readCount; + char readBuff[45]; + int byteIndex; + int byteCount; + char *ptrBuff; + + stringBuffer.append(String("begin 644 ")+strName+String("\n")); + byteIndex=0; + while(readCount=read(bytes,byteIndex,readBuff,sizeof(readBuff))) + { + stringBuffer.append(chEncode(readCount)); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + stringBuffer.append(chEncode(*ptrBuff>>2)); + stringBuffer.append(chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F)); + stringBuffer.append(chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03)); + stringBuffer.append(chEncode(ptrBuff[2]&0x3F)); + } + stringBuffer.append("\n"); + if(readCount!=sizeof(readBuff))break; + } + stringBuffer.append("`\n"); + stringBuffer.append("end\n"); + return stringBuffer.toString(); +} + +DWORD UUEncode::read(Array &bytes,int &byteIndex,char *readBuff,int sizeBuff) +{ + if(byteIndex+sizeBuff>bytes.size())sizeBuff=bytes.size()-byteIndex; + ::memcpy(readBuff,&bytes[byteIndex],sizeBuff); + byteIndex+=sizeBuff; + return sizeBuff; +} + + diff --git a/uuencode/uuencode.cpp~ b/uuencode/uuencode.cpp~ new file mode 100644 index 0000000..d8a57e8 --- /dev/null +++ b/uuencode/uuencode.cpp~ @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include + +BOOL UUEncode::encode(String srcPathFileName,Block &lineStrings,BOOL initBlock)const +{ + Profile iniProfile; + char readBuff[45]; + int readCount; + int byteCount; + int lineCount; + char *ptrBuff; + String outLine; + int ch; + + if(initBlock)lineStrings.remove(); + if(srcPathFileName.isNull())return FALSE; + FileHandle readFile(srcPathFileName,FileHandle::Read,FileHandle::ShareRead); + if(!readFile.isOkay())return FALSE; + FileMap readMap(readFile); + PureViewOfFile readView(readMap); + iniProfile.makeFileName(srcPathFileName); + srcPathFileName.removeTokens("\\/"); + ::sprintf(outLine,"begin %d %s",644,(char*)srcPathFileName); + lineStrings.insert(&outLine); + Progress encodeProgress(parentWindow,srcPathFileName); + encodeProgress.canCancel(TRUE); + encodeProgress.show(TRUE); + encodeProgress.setText("encoding... (press ESC to cancel)."); + while(sizeof(readBuff)==readView.read(readBuff,sizeof(readBuff))){parentWindow.yieldTask();lineCount++;} + readView.rewind(); + encodeProgress.range(lineCount); + while(readCount=readView.read(readBuff,sizeof(readBuff))) + { + String lineString; + char *ptrLine=(LPSTR)lineString; + *(ptrLine++)=chEncode(readCount); + for(ptrBuff=readBuff,byteCount=readCount;byteCount>0;byteCount-=3,ptrBuff+=3) + { + *(ptrLine++)=chEncode(*ptrBuff>>2); + *(ptrLine++)=chEncode((*ptrBuff<<4)&0x30|(ptrBuff[1]>>4)&0x0F); + *(ptrLine++)=chEncode((ptrBuff[1]<<2)&0x3C|(ptrBuff[2]>>6)&0x03); + *(ptrLine++)=chEncode(ptrBuff[2]&0x3F); + parentWindow.yieldTask(); + } + lineStrings.insert(&lineString); + encodeProgress++; + if(!encodeProgress.isOkay()){lineStrings.remove();return FALSE;} + if(readCount!=sizeof(readBuff))break; + } + String lastLine; + lastLine+=(char)('\0'?('\0'&0x3F)+' ':'`'); + lineStrings.insert(&lastLine); + lineStrings.insert(&String("end")); + return TRUE; +} + diff --git a/uuencode/uuencode.dsp b/uuencode/uuencode.dsp new file mode 100644 index 0000000..5796b45 --- /dev/null +++ b/uuencode/uuencode.dsp @@ -0,0 +1,96 @@ +# Microsoft Developer Studio Project File - Name="uuencode" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=uuencode - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "uuencode.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "uuencode.mak" CFG="uuencode - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "uuencode - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "uuencode - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "uuencode - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /Gz /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "uuencode - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "uuencode - Win32 Release" +# Name "uuencode - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\uuencode.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/uuencode/uuencode.dsw b/uuencode/uuencode.dsw new file mode 100644 index 0000000..1adfeca --- /dev/null +++ b/uuencode/uuencode.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "uuencode"=.\uuencode.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/uuencode/uuencode.hpp b/uuencode/uuencode.hpp new file mode 100644 index 0000000..13608b7 --- /dev/null +++ b/uuencode/uuencode.hpp @@ -0,0 +1,41 @@ +#ifndef _UUENCODE_UUENCODE_HPP_ +#define _UUENCODE_UUENCODE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +template +class Array; +class String; + +class UUEncode +{ +public: + UUEncode(void); + virtual ~UUEncode(); + static bool encode(Array &bytes,const String &strName,Block &encodedLines); + static String encode(Array &bytes,const String &strName); +private: + static DWORD read(Array &bytes,int &byteIndex,char *readBuff,int sizeBuff); + static BYTE chEncode(int ch); +}; + +inline +UUEncode::UUEncode(void) +{ +} + +inline +UUEncode::~UUEncode() +{ +} + +inline +BYTE UUEncode::chEncode(int ch) +{ + return (ch?(ch&0x3F)+' ':'`'); +} +#endif diff --git a/uuencode/uuencode.hpp~ b/uuencode/uuencode.hpp~ new file mode 100644 index 0000000..0ec3b67 --- /dev/null +++ b/uuencode/uuencode.hpp~ @@ -0,0 +1,37 @@ +#ifndef _SMTP_UUENCODE_HPP_ +#define _SMTP_UUENCODE_HPP_ +#ifndef _COMMON_WINDOWS_HPP_ +#include +#endif + +template +class Block; +class String; +//class GUIWindow; + +class UUEncode +{ +public: + UUEncode(void); + virtual ~UUEncode(); + BOOL encode(String srcPathFileName,Block &lineStrings,BOOL initBlock=TRUE)const; +private: + BYTE chEncode(int ch)const; +}; + +inline +UUEncode::UUEncode(void) +{ +} + +inline +UUEncode::~UUEncode() +{ +} + +inline +BYTE UUEncode::chEncode(int ch)const +{ + return (ch?(ch&0x3F)+' ':'`'); +} +#endif diff --git a/uuencode/uuencode.ncb b/uuencode/uuencode.ncb new file mode 100644 index 0000000..e553773 Binary files /dev/null and b/uuencode/uuencode.ncb differ diff --git a/uuencode/uuencode.o b/uuencode/uuencode.o new file mode 100644 index 0000000..b97b67b Binary files /dev/null and b/uuencode/uuencode.o differ diff --git a/uuencode/uuencode.opt b/uuencode/uuencode.opt new file mode 100644 index 0000000..dadaf73 Binary files /dev/null and b/uuencode/uuencode.opt differ diff --git a/uuencode/uuencode.plg b/uuencode/uuencode.plg new file mode 100644 index 0000000..45f4da7 --- /dev/null +++ b/uuencode/uuencode.plg @@ -0,0 +1,27 @@ + + +
+

Build Log

+

+--------------------Configuration: uuencode - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP3F.tmp" with contents +[ +/nologo /Gz /MTd /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /Fp"Debug/uuencode.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"D:\work\uuencode\uuencode.cpp" +] +Creating command line "cl.exe @C:\WINNT\Profiles\sean\LOCALS~1\Temp\RSP3F.tmp" +Creating command line "link.exe -lib /nologo /out:"Debug\uuencode.lib" .\Debug\uuencode.obj " +

Output Window

+Compiling... +uuencode.cpp +Creating library... + + + +

Results

+uuencode.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/vidcap/AVICAP.RES b/vidcap/AVICAP.RES new file mode 100644 index 0000000..556ed87 Binary files /dev/null and b/vidcap/AVICAP.RES differ diff --git a/vidcap/AVICAP.RWS b/vidcap/AVICAP.RWS new file mode 100644 index 0000000..dd92542 Binary files /dev/null and b/vidcap/AVICAP.RWS differ diff --git a/vidcap/BMPCAP.CPP b/vidcap/BMPCAP.CPP new file mode 100644 index 0000000..aeac517 --- /dev/null +++ b/vidcap/BMPCAP.CPP @@ -0,0 +1,184 @@ +#include +#include +#include +#include +#include +#include + +BmpCap::BmpCap() +: mSequence(0), mSaveFrames(0), mUseSequence(false) +{ +} + +BmpCap::BmpCap(HWND hParentWnd,DWORD driverIndex) +: mSequence(0), mSaveFrames(false), mUseSequence(false) +{ + initialize(hParentWnd,driverIndex); +} + +BmpCap::~BmpCap() +{ +// mVideoCodec.driverEnable(false); +} + +void BmpCap::initialize(HWND hParentWnd,DWORD driverIndex) +{ + DWORD previewWidth; + DWORD previewHeight; + DriverCaps driverCaps; + ICMOpen icmOpen; + VidReg vidReg; + + mUseSequence=vidReg.getSequencing(); + mCaptureWidth=vidReg.getCaptureWidth(); + mCaptureHeight=vidReg.getCaptureHeight(); + mCaptureFile=vidReg.getCaptureFile(); + mQuality=vidReg.getQuality(); + previewWidth=vidReg.getPreviewWidth(); + previewHeight=vidReg.getPreviewHeight(); + create(hParentWnd,vidReg.getPreviewWidth(),vidReg.getPreviewHeight()); + connect(driverIndex); + if(!isConnected())return; + getDriverCaps(driverCaps); + getVideoFormat(mBitmapInfo); + mBitmapInfo.width(previewWidth); + mBitmapInfo.height(previewHeight); + setVideoFormat(mBitmapInfo); + if(mVideoCodec.openDriver(mBitmapInfo.compression()))message("[BmpCap::initialize]Failed to open decompressor."); + icmOpen.fccType(FOURCC("vidc")); + icmOpen.fccHandler(mBitmapInfo.compression()); + icmOpen.flags(ICMOpen::DeCompress); + icmOpen.version(0); + if(!mVideoCodec.driverProc(icmOpen)){message("[BmpCap::initialize]ICMOpen failed");return;}; + if(!mVideoCodec.driverEnable()){message("[BmpCap::initialize]DriverEnable failed");return;} + getVideoFormat(mBitmapInfo); +} + +// virtuals + +#if 0 +void BmpCap::frameHandler(VIDEOHDR &videoHeader) +{ + if(!saveFrames())return; + MovieData movieData(MovieData::DIBCompressed); + MovieData dstMovieData; + DiskInfo diskInfo; + String srcPathFileName; + String dstPathFileName; + String dstPathFileTempName; + String strTime; + SystemTime systemTime; + + strTime.reserve(512); + ::sprintf(strTime,"%04d%02d%02d%02d%02d%02d%02d", + systemTime.year(),systemTime.month(),systemTime.day(), + systemTime.hour(),systemTime.minute(),systemTime.second(), + systemTime.milliseconds()); + srcPathFileName=strTime+".bmp"; + dstPathFileTempName=strTime+"tmp.jpg"; + if(mUseSequence)dstPathFileName=mCaptureFile.betweenString(0,'.')+String().fromInt(mSequence++)+String(".jpg"); + else dstPathFileName=mCaptureFile; + movieData.size(videoHeader.dwBufferLength); + ::memcpy((BYTE*)&movieData[0],videoHeader.lpData,videoHeader.dwBufferLength); + if(!mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return; + mDstBitmapInfo.width(mCaptureWidth); + mDstBitmapInfo.height(mCaptureHeight); + if(!mVideoCodec.decompressFrame(mBitmapInfo,mDstBitmapInfo,movieData,dstMovieData)) + { + if(!mVideoCodec.decompressFrame(mBitmapInfo,movieData,dstMovieData))return; + if(!mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return; + } + Bitmap frameBitmap(srcPathFileName,mDstBitmapInfo,dstMovieData); + if(BitmapInfo::Bit8==mDstBitmapInfo.bitCount()) + { + PurePalette purePalette(mCaptureStatus.currentPalette()); + frameBitmap.setPalette(purePalette.getPalette(),FALSE); + } + frameBitmap.saveBitmap(); + ImageConverter::convert(srcPathFileName,dstPathFileTempName,mQuality); + diskInfo.rename(dstPathFileTempName,dstPathFileName); + diskInfo.unlink(srcPathFileName); +} +#endif + +void BmpCap::frameHandler(VIDEOHDR &videoHeader) +{ + if(!saveFrames())return; + MovieData movieData(MovieData::DIBCompressed); + + + MovieData dstMovieData; + DiskInfo diskInfo; + String srcPathFileName; + String dstPathFileName; + String dstPathFileTempName; + String strTime; + SystemTime systemTime; + + DWORD elapsedTime; + String strMessage; + strMessage.reserve(512); + + elapsedTime=::GetTickCount(); + + strTime.reserve(512); + ::sprintf(strTime,"%04d%02d%02d%02d%02d%02d%02d", + systemTime.year(),systemTime.month(),systemTime.day(), + systemTime.hour(),systemTime.minute(),systemTime.second(), + systemTime.milliseconds()); + srcPathFileName=strTime+".bmp"; + dstPathFileTempName=strTime+"tmp.jpg"; + if(mUseSequence)dstPathFileName=mCaptureFile.betweenString(0,'.')+String().fromInt(mSequence++)+String(".jpg"); + else dstPathFileName=mCaptureFile; + movieData.size(videoHeader.dwBufferLength); + ::memcpy((BYTE*)&movieData[0],videoHeader.lpData,videoHeader.dwBufferLength); +// if(!mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return; + + if(!(ICERR_OK==mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo)))return; + + mDstBitmapInfo.width(mCaptureWidth); + mDstBitmapInfo.height(mCaptureHeight); + + elapsedTime=::GetTickCount()-elapsedTime; + ::sprintf(strMessage,"[BmpCap::frameHandler] Prologue took (ms) "+String().fromInt(elapsedTime)); + message(strMessage); + elapsedTime=::GetTickCount(); + + if(ICERR_OK!=mVideoCodec.decompressFrame(mBitmapInfo,mDstBitmapInfo,movieData,dstMovieData)) + { + if(ICERR_OK!=mVideoCodec.decompressFrame(mBitmapInfo,movieData,dstMovieData))return; + if(ICERR_OK!=mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return; + } + + elapsedTime=::GetTickCount()-elapsedTime; + ::sprintf(strMessage,"[BmpCap::frameHandler] Decompress frame took (ms) "+String().fromInt(elapsedTime)); + message(strMessage); + elapsedTime=::GetTickCount(); + + Bitmap frameBitmap(srcPathFileName,mDstBitmapInfo,dstMovieData); + if(BitmapInfo::Bit8==mDstBitmapInfo.bitCount()) + { + PurePalette purePalette(mCaptureStatus.currentPalette()); + frameBitmap.setPalette(purePalette.getPalette(),FALSE); + } + frameBitmap.saveBitmap(); + + elapsedTime=::GetTickCount()-elapsedTime; + ::sprintf(strMessage,"[BmpCap::frameHandler] Save bitmap took (ms) "+String().fromInt(elapsedTime)); + message(strMessage); + elapsedTime=::GetTickCount(); + + ImageConverter::convert(srcPathFileName,dstPathFileTempName,mQuality); + + elapsedTime=::GetTickCount()-elapsedTime; + ::sprintf(strMessage,"[BmpCap::frameHandler] Convert to jpeg took (ms) "+String().fromInt(elapsedTime)); + message(strMessage); + + diskInfo.rename(dstPathFileTempName,dstPathFileName); + diskInfo.unlink(srcPathFileName); +} + +void BmpCap::message(const String &message) +{ + return; +} diff --git a/vidcap/BMPCAP.HPP b/vidcap/BMPCAP.HPP new file mode 100644 index 0000000..7b187b6 --- /dev/null +++ b/vidcap/BMPCAP.HPP @@ -0,0 +1,70 @@ +#ifndef _VIDCAP_BMPCAP_HPP_ +#define _VIDCAP_BMPCAP_HPP_ +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif + +#ifndef _CODEC_VIDEOCODEC_HPP_ +#include +#endif + + + + +#ifndef _VIDCAP_VIDCAP_HPP_ +#include +#endif + + +class BmpCap : public VidCap +{ +public: + BmpCap(HWND hParentWnd,DWORD driverIndex); + BmpCap(void); + virtual ~BmpCap(); + void initialize(HWND hParentWnd,DWORD driverIndex); + bool saveFrames(void)const; + void saveFrames(bool saveFrames); + const String &getCaptureFileName(void)const; + void setCaptureFileName(const String &strPathCaptureFile); +protected: + virtual void message(const String &message); + virtual void frameHandler(VIDEOHDR &videoHeader); +private: + BitmapInfo mBitmapInfo; + BitmapInfo mDstBitmapInfo; + CaptureStatus mCaptureStatus; + VideoCodec mVideoCodec; + int mSequence; + bool mSaveFrames; + bool mUseSequence; + DWORD mCaptureWidth; + DWORD mCaptureHeight; + DWORD mQuality; + String mCaptureFile; +}; + +inline +bool BmpCap::saveFrames(void)const +{ + return mSaveFrames; +} + +inline +void BmpCap::saveFrames(bool saveFrames) +{ + mSaveFrames=saveFrames; +} + +inline +const String &BmpCap::getCaptureFileName(void)const +{ + return mCaptureFile; +} + +inline +void BmpCap::setCaptureFileName(const String &strPathCaptureFile) +{ + mCaptureFile=strPathCaptureFile; +} +#endif diff --git a/vidcap/BMPCAP.INI b/vidcap/BMPCAP.INI new file mode 100644 index 0000000..e9619a8 --- /dev/null +++ b/vidcap/BMPCAP.INI @@ -0,0 +1,20 @@ +[OPTIONS] +RATE=50 +SAVE=FRAME.BMP + +[SITES] +S1=SITE1 +S2=SITE2 + +[SITE1] +NAME=EUROPA.DEV.COM +USER=SEAN +PASSWORD=KESSLER +DIRECTORY=C:\WORK + +[SITE2] +NAME=CNCT.COM +USER=SEAN +PASSWORD=CYGNUS-X1 +DIRECTORY=/NEWS + diff --git a/vidcap/CAPPARMS.HPP b/vidcap/CAPPARMS.HPP new file mode 100644 index 0000000..f2751f3 --- /dev/null +++ b/vidcap/CAPPARMS.HPP @@ -0,0 +1,413 @@ +#ifndef _VIDCAP_CAPTUREPARAMS_HPP_ +#define _VIDCAP_CAPTUREPARAMS_HPP_ +#include +#include + +class CaptureParams : private CAPTUREPARMS +{ +public: + CaptureParams(void); + CaptureParams(const CaptureParams &someCaptureParams); + CaptureParams(const CAPTUREPARMS &someCAPTUREPARMS); + virtual ~CaptureParams(void); + CaptureParams &operator=(const CaptureParams &someCaptureParams); + CaptureParams &operator=(const CAPTUREPARMS &someCAPTUREPARMS); + WORD operator==(const CaptureParams &someCaptureParams); + WORD operator==(const CAPTUREPARMS &someCAPTUREPARMS); + DWORD requestMicroSecondsPerFrame(void)const; + void requestMicroSecondsPerFrame(DWORD requestMicroSecondsPerFrame); + WORD hitOkToCapture(void)const; + void hitOkToCapture(WORD hitOkToCapture); + WORD percentDropForError(void)const; + void percentDropForError(WORD percentDropForError); + WORD yield(void)const; + void yield(WORD yield); + DWORD sizeIndex(void)const; + void sizeIndex(DWORD sizeIndex); + WORD chunkGranularity(void)const; + void chunkGranularity(WORD chunkGranularity); + WORD usingDOSMemory(void)const; + void usingDOSMemory(WORD usingDOSMemory); + WORD numVideoRequested(void)const; + void numVideoRequested(WORD numVideoRequested); + WORD captureAudio(void)const; + void captureAudio(WORD captureAudio); + WORD numAudioRequested(void)const; + void numAudioRequested(WORD numAudioRequested); + WORD keyAbort(void)const; + void keyAbort(WORD keyAbort); + WORD abortLeftMouse(void)const; + void abortLeftMouse(WORD abortLeftMouse); + WORD abortRightMouse(void)const; + void abortRightMouse(WORD abortRightMouse); + WORD limitEnabled(void)const; + void limitEnabled(WORD limitEnabled); + WORD timeLimit(void)const; + void timeLimit(WORD timeLimit); + WORD mciControl(void)const; + void mciControl(WORD mciControl); + WORD stepMCIDevice(void)const; + void stepMCIDevice(WORD stepMCIDevice); + DWORD mciStartTime(void)const; + void mciStartTime(DWORD mciStartTime); + DWORD mciStopTime(void)const; + void mciStopTime(DWORD mciStopTime); + WORD stepCaptureAt2x(void)const; + void stepCaptureAt2x(WORD stepCaptureAt2x); + WORD stepCaptureAverageFrames(void)const; + void stepCaptureAverageFrames(WORD stepCaptureAverageFrames); + DWORD audioBufferSize(void)const; + void audioBufferSize(DWORD audioBufferSize); + WORD disableWriteCache(void)const; + void disableWriteCache(WORD disableWriteCache); + UINT streamMaster(void)const; + void streamMaster(UINT streamMaster); +private: + void setZero(void); +}; + +inline +CaptureParams::CaptureParams(void) +{ + setZero(); +} + +inline +CaptureParams::CaptureParams(const CaptureParams &someCaptureParams) +{ + *this=someCaptureParams; +} + +inline +CaptureParams::CaptureParams(const CAPTUREPARMS &someCAPTUREPARMS) +{ + *this=someCAPTUREPARMS; +} + +inline +CaptureParams::~CaptureParams(void) +{ +} + +inline +CaptureParams &CaptureParams::operator=(const CaptureParams &someCaptureParams) +{ + ::memcpy((char*)&((CAPTUREPARMS&)*this),(char*)&((CAPTUREPARMS&)someCaptureParams),sizeof(CAPTUREPARMS)); + return *this; +} + +inline +CaptureParams &CaptureParams::operator=(const CAPTUREPARMS &someCAPTUREPARMS) +{ + ::memcpy((char*)&((CAPTUREPARMS&)*this),(char*)&someCAPTUREPARMS,sizeof(CAPTUREPARMS)); + return *this; +} + +inline +WORD CaptureParams::operator==(const CaptureParams &someCaptureParams) +{ + return ::memcmp((char*)&((CAPTUREPARMS&)*this),(char*)&((CAPTUREPARMS&)someCaptureParams),sizeof(CAPTUREPARMS))?FALSE:TRUE; +} + +inline +WORD CaptureParams::operator==(const CAPTUREPARMS &someCAPTUREPARMS) +{ + return ::memcmp((char*)&((CAPTUREPARMS&)*this),(char*)&someCAPTUREPARMS,sizeof(CAPTUREPARMS))?FALSE:TRUE; +} + +inline +DWORD CaptureParams::requestMicroSecondsPerFrame(void)const +{ + return CAPTUREPARMS::dwRequestMicroSecPerFrame; +} + +inline +void CaptureParams::requestMicroSecondsPerFrame(DWORD requestMicroSecondsPerFrame) +{ + CAPTUREPARMS::dwRequestMicroSecPerFrame=requestMicroSecondsPerFrame; +} + +inline +WORD CaptureParams::hitOkToCapture(void)const +{ + return CAPTUREPARMS::fMakeUserHitOKToCapture; +} + +inline +void CaptureParams::hitOkToCapture(WORD hitOkToCapture) +{ + CAPTUREPARMS::fMakeUserHitOKToCapture=hitOkToCapture; +} + +inline +WORD CaptureParams::percentDropForError(void)const +{ + return CAPTUREPARMS::wPercentDropForError; +} + +inline +void CaptureParams::percentDropForError(WORD percentDropForError) +{ + CAPTUREPARMS::wPercentDropForError=percentDropForError; +} + +inline +WORD CaptureParams::yield(void)const +{ + return CAPTUREPARMS::fYield; +} + +inline +void CaptureParams::yield(WORD yield) +{ + CAPTUREPARMS::fYield=yield; +} + +inline +DWORD CaptureParams::sizeIndex(void)const +{ + return CAPTUREPARMS::dwIndexSize; +} + +inline +void CaptureParams::sizeIndex(DWORD sizeIndex) +{ + CAPTUREPARMS::dwIndexSize=sizeIndex; +} + +inline +WORD CaptureParams::chunkGranularity(void)const +{ + return CAPTUREPARMS::wChunkGranularity; +} + +inline +void CaptureParams::chunkGranularity(WORD chunkGranularity) +{ + CAPTUREPARMS::wChunkGranularity=chunkGranularity; +} + +inline +WORD CaptureParams::usingDOSMemory(void)const +{ + return CAPTUREPARMS::fUsingDOSMemory; +} + +inline +void CaptureParams::usingDOSMemory(WORD usingDOSMemory) +{ + CAPTUREPARMS::fUsingDOSMemory=usingDOSMemory; +} + +inline +WORD CaptureParams::numVideoRequested(void)const +{ + return CAPTUREPARMS::wNumVideoRequested; +} + +inline +void CaptureParams::numVideoRequested(WORD numVideoRequested) +{ + CAPTUREPARMS::wNumVideoRequested=numVideoRequested; +} + +inline +WORD CaptureParams::captureAudio(void)const +{ + return CAPTUREPARMS::fCaptureAudio; +} + +inline +void CaptureParams::captureAudio(WORD captureAudio) +{ + CAPTUREPARMS::fCaptureAudio=captureAudio; +} + +inline +WORD CaptureParams::numAudioRequested(void)const +{ + return CAPTUREPARMS::wNumAudioRequested; +} + +inline +void CaptureParams::numAudioRequested(WORD numAudioRequested) +{ + CAPTUREPARMS::wNumAudioRequested=numAudioRequested; +} + +inline +WORD CaptureParams::keyAbort(void)const +{ + return CAPTUREPARMS::vKeyAbort; +} + +inline +void CaptureParams::keyAbort(WORD keyAbort) +{ + CAPTUREPARMS::vKeyAbort=keyAbort; +} + +inline +WORD CaptureParams::abortLeftMouse(void)const +{ + return CAPTUREPARMS::fAbortLeftMouse; +} + +inline +void CaptureParams::abortLeftMouse(WORD abortLeftMouse) +{ + CAPTUREPARMS::fAbortLeftMouse=abortLeftMouse; +} + +inline +WORD CaptureParams::abortRightMouse(void)const +{ + return CAPTUREPARMS::fAbortRightMouse; +} + +inline +void CaptureParams::abortRightMouse(WORD abortRightMouse) +{ + CAPTUREPARMS::fAbortRightMouse=abortRightMouse; +} + +inline +WORD CaptureParams::limitEnabled(void)const +{ + return CAPTUREPARMS::fLimitEnabled; +} + +inline +void CaptureParams::limitEnabled(WORD limitEnabled) +{ + CAPTUREPARMS::fLimitEnabled=limitEnabled; +} + +inline +WORD CaptureParams::timeLimit(void)const +{ + return CAPTUREPARMS::wTimeLimit; +} + +inline +void CaptureParams::timeLimit(WORD timeLimit) +{ + CAPTUREPARMS::wTimeLimit=timeLimit; +} + +inline +WORD CaptureParams::mciControl(void)const +{ + return CAPTUREPARMS::fMCIControl; +} + +inline +void CaptureParams::mciControl(WORD mciControl) +{ + CAPTUREPARMS::fMCIControl=mciControl; +} + +inline +WORD CaptureParams::stepMCIDevice(void)const +{ + return CAPTUREPARMS::fStepMCIDevice; +} + +inline +void CaptureParams::stepMCIDevice(WORD stepMCIDevice) +{ + CAPTUREPARMS::fStepMCIDevice=stepMCIDevice; +} + +inline +DWORD CaptureParams::mciStartTime(void)const +{ + return CAPTUREPARMS::dwMCIStartTime; +} + +inline +void CaptureParams::mciStartTime(DWORD mciStartTime) +{ + CAPTUREPARMS::dwMCIStartTime=mciStartTime; +} + +inline +DWORD CaptureParams::mciStopTime(void)const +{ + return CAPTUREPARMS::dwMCIStopTime; +} + +inline +void CaptureParams::mciStopTime(DWORD mciStopTime) +{ + CAPTUREPARMS::dwMCIStopTime=mciStopTime; +} + +inline +WORD CaptureParams::stepCaptureAt2x(void)const +{ + return CAPTUREPARMS::fStepCaptureAt2x; +} + +inline +void CaptureParams::stepCaptureAt2x(WORD stepCaptureAt2x) +{ + CAPTUREPARMS::fStepCaptureAt2x=stepCaptureAt2x; +} + + +inline +WORD CaptureParams::stepCaptureAverageFrames(void)const +{ + return CAPTUREPARMS::wStepCaptureAverageFrames; +} + +inline +void CaptureParams::stepCaptureAverageFrames(WORD stepCaptureAverageFrames) +{ + CAPTUREPARMS::wStepCaptureAverageFrames=stepCaptureAverageFrames; +} + +inline +DWORD CaptureParams::audioBufferSize(void)const +{ + return CAPTUREPARMS::dwAudioBufferSize; +} + +inline +void CaptureParams::audioBufferSize(DWORD audioBufferSize) +{ + CAPTUREPARMS::dwAudioBufferSize=audioBufferSize; +} + +inline +WORD CaptureParams::disableWriteCache(void)const +{ + return CAPTUREPARMS::fDisableWriteCache; +} + +inline +void CaptureParams::disableWriteCache(WORD disableWriteCache) +{ + CAPTUREPARMS::fDisableWriteCache=disableWriteCache; +} + +inline +UINT CaptureParams::streamMaster(void)const +{ + return CAPTUREPARMS::AVStreamMaster; +} + +inline +void CaptureParams::streamMaster(UINT streamMaster) +{ + CAPTUREPARMS::AVStreamMaster=streamMaster; +} + +inline +void CaptureParams::setZero(void) +{ + ::memset((char*)&((CAPTUREPARMS&)*this),0,sizeof(CAPTUREPARMS)); +} +#endif + diff --git a/vidcap/CAPSTAT.HPP b/vidcap/CAPSTAT.HPP new file mode 100644 index 0000000..61fe570 --- /dev/null +++ b/vidcap/CAPSTAT.HPP @@ -0,0 +1,329 @@ +#ifndef _VIDCAP_CAPSTATUS_HPP_ +#define _VIDCAP_CAPSTATUS_HPP_ +#include +#include + +class CaptureStatus : private CAPSTATUS +{ +public: + CaptureStatus(void); + CaptureStatus(const CaptureStatus &someCaptureStatus); + CaptureStatus(const CAPSTATUS &someCAPSTATUS); + virtual ~CaptureStatus(); + CaptureStatus &operator=(const CaptureStatus &someCaptureStatus); + CaptureStatus &operator=(const CAPSTATUS &someCAPSTATUS); + WORD operator==(const CaptureStatus &someCaptureStatus)const; + WORD operator==(const CAPSTATUS &someCAPSTATUS)const; + UINT imageWidth(void)const; + void imageWidth(UINT imageWidth); + UINT imageHeight(void)const; + void imageHeight(UINT imageHeight); + WORD liveWindow(void)const; + void liveWindow(WORD liveWindow); + WORD overlayWindow(void)const; + void overlayWindow(WORD overlayWindow); + WORD scale(void)const; + void scale(WORD scale); + Point pointScroll(void)const; + void pointScroll(const Point &pointScroll); + WORD usingDefaultPalette(void)const; + void usingDefaultPalette(WORD usingDefaultPalette); + WORD audioHardware(void)const; + void audioHardware(WORD audioHardware); + WORD capFileExists(void)const; + void capFileExists(WORD capFileExists); + WORD currentVideoFrame(void)const; + void currentVideoFrame(WORD currentVideoFrame); + WORD currentVideoFramedDropped(void)const; + void currentVideoFramesDropped(WORD currentVideoFramesDropped); + WORD currentWaveSamples(void)const; + void currentWaveSamples(WORD currentWaveSamples); + DWORD currentTimeElapsed(void)const; + void currentTimeElapsed(DWORD currentTimeElapsed); + HPALETTE currentPalette(void)const; + void currentPalette(HPALETTE currentPalette); + WORD capturingNow(void)const; + void capturingNow(WORD capturingNow); + DWORD returnVal(void)const; + void returnVal(DWORD returnVal); + WORD numVideoAllocated(void)const; + void numVideoAllocated(WORD numVideoAllocated); + WORD numAudioAllocated(void)const; + void numAudioAllocated(WORD numAudioAllocated); +private: + void setZero(void); +}; + +inline +CaptureStatus::CaptureStatus(void) +{ + setZero(); +} + +inline +CaptureStatus::CaptureStatus(const CaptureStatus &someCaptureStatus) +{ + *this=someCaptureStatus; +} + +inline +CaptureStatus::CaptureStatus(const CAPSTATUS &someCAPSTATUS) +{ + *this=someCAPSTATUS; +} + +inline +CaptureStatus::~CaptureStatus() +{ +} + +inline +CaptureStatus &CaptureStatus::operator=(const CaptureStatus &someCaptureStatus) +{ + ::memcpy((char*)&((CAPSTATUS&)*this),(char*)&((CAPSTATUS&)someCaptureStatus),sizeof(CAPSTATUS)); + return *this; +} + +inline +CaptureStatus &CaptureStatus::operator=(const CAPSTATUS &someCAPSTATUS) +{ + ::memcpy((char*)&((CAPSTATUS&)*this),(char*)&someCAPSTATUS,sizeof(CAPSTATUS)); + return *this; +} + +inline +WORD CaptureStatus::operator==(const CaptureStatus &someCaptureStatus)const +{ + return ::memcmp((char*)&((CAPSTATUS&)*this),(char*)&((CAPSTATUS&)someCaptureStatus),sizeof(CAPSTATUS))?FALSE:TRUE; +} + +inline +WORD CaptureStatus::operator==(const CAPSTATUS &someCAPSTATUS)const +{ + return *this==CaptureStatus(someCAPSTATUS); +} + +inline +UINT CaptureStatus::imageWidth(void)const +{ + return CAPSTATUS::uiImageWidth; +} + +inline +void CaptureStatus::imageWidth(UINT imageWidth) +{ + CAPSTATUS::uiImageWidth=imageWidth; +} + +inline +UINT CaptureStatus::imageHeight(void)const +{ + return CAPSTATUS::uiImageHeight; +} + +inline +void CaptureStatus::imageHeight(UINT imageHeight) +{ + CAPSTATUS::uiImageHeight=imageHeight; +} + +inline +WORD CaptureStatus::liveWindow(void)const +{ + return CAPSTATUS::fLiveWindow; +} + +inline +void CaptureStatus::liveWindow(WORD liveWindow) +{ + CAPSTATUS::fLiveWindow=liveWindow; +} + +inline +WORD CaptureStatus::overlayWindow(void)const +{ + return CAPSTATUS::fOverlayWindow; +} + +inline +void CaptureStatus::overlayWindow(WORD overlayWindow) +{ + CAPSTATUS::fOverlayWindow=overlayWindow; +} + +inline +WORD CaptureStatus::scale(void)const +{ + return CAPSTATUS::fScale; +} + +inline +void CaptureStatus::scale(WORD scale) +{ + CAPSTATUS::fScale=scale; +} + +inline +Point CaptureStatus::pointScroll(void)const +{ + return Point(CAPSTATUS::ptScroll.x,CAPSTATUS::ptScroll.y); +} + +inline +void CaptureStatus::pointScroll(const Point &pointScroll) +{ + CAPSTATUS::ptScroll.x=pointScroll.x(); + CAPSTATUS::ptScroll.y=pointScroll.y(); +} + +inline +WORD CaptureStatus::usingDefaultPalette(void)const +{ + return CAPSTATUS::fUsingDefaultPalette; +} + +inline +void CaptureStatus::usingDefaultPalette(WORD usingDefaultPalette) +{ + CAPSTATUS::fUsingDefaultPalette=usingDefaultPalette; +} + +inline +WORD CaptureStatus::audioHardware(void)const +{ + return CAPSTATUS::fAudioHardware; +} + +inline +void CaptureStatus::audioHardware(WORD audioHardware) +{ + CAPSTATUS::fAudioHardware=audioHardware; +} + +inline +WORD CaptureStatus::capFileExists(void)const +{ + return CAPSTATUS::fCapFileExists; +} + +inline +void CaptureStatus::capFileExists(WORD capFileExists) +{ + CAPSTATUS::fCapFileExists=capFileExists; +} + +inline +WORD CaptureStatus::currentVideoFrame(void)const +{ + return CAPSTATUS::dwCurrentVideoFrame; +} + +inline +void CaptureStatus::currentVideoFrame(WORD currentVideoFrame) +{ + CAPSTATUS::dwCurrentVideoFrame=currentVideoFrame; +} + +inline +WORD CaptureStatus::currentVideoFramedDropped(void)const +{ + return CAPSTATUS::dwCurrentVideoFramesDropped; +} + +inline +void CaptureStatus::currentVideoFramesDropped(WORD currentVideoFramesDropped) +{ + CAPSTATUS::dwCurrentVideoFramesDropped=currentVideoFramesDropped; +} + +inline +WORD CaptureStatus::currentWaveSamples(void)const +{ + return CAPSTATUS::dwCurrentWaveSamples; +} + +inline +void CaptureStatus::currentWaveSamples(WORD currentWaveSamples) +{ + CAPSTATUS::dwCurrentWaveSamples=currentWaveSamples; +} + +inline +DWORD CaptureStatus::currentTimeElapsed(void)const +{ + return CAPSTATUS::dwCurrentTimeElapsedMS; +} + +inline +void CaptureStatus::currentTimeElapsed(DWORD currentTimeElapsed) +{ + CAPSTATUS::dwCurrentTimeElapsedMS=currentTimeElapsed; +} + +inline +HPALETTE CaptureStatus::currentPalette(void)const +{ + return CAPSTATUS::hPalCurrent; +} + +inline +void CaptureStatus::currentPalette(HPALETTE currentPalette) +{ + CAPSTATUS::hPalCurrent=currentPalette; +} + +inline +WORD CaptureStatus::capturingNow(void)const +{ + return CAPSTATUS::fCapturingNow; +} + +inline +void CaptureStatus::capturingNow(WORD capturingNow) +{ + CAPSTATUS::fCapturingNow=capturingNow; +} + +inline +DWORD CaptureStatus::returnVal(void)const +{ + return CAPSTATUS::dwReturn; +} + +inline +void CaptureStatus::returnVal(DWORD returnVal) +{ + CAPSTATUS::dwReturn=returnVal; +} + +inline +WORD CaptureStatus::numVideoAllocated(void)const +{ + return CAPSTATUS::wNumVideoAllocated; +} + +inline +void CaptureStatus::numVideoAllocated(WORD numVideoAllocated) +{ + CAPSTATUS::wNumVideoAllocated=numVideoAllocated; +} + +inline +WORD CaptureStatus::numAudioAllocated(void)const +{ + return CAPSTATUS::wNumAudioAllocated; +} + +inline +void CaptureStatus::numAudioAllocated(WORD numAudioAllocated) +{ + CAPSTATUS::wNumAudioAllocated=numAudioAllocated; +} + +inline +void CaptureStatus::setZero(void) +{ + ::memset((char*)&((CAPSTATUS&)*this),0,sizeof(CAPSTATUS)); +} +#endif + diff --git a/vidcap/DRVCAPS.HPP b/vidcap/DRVCAPS.HPP new file mode 100644 index 0000000..f4f75fe --- /dev/null +++ b/vidcap/DRVCAPS.HPP @@ -0,0 +1,271 @@ +#ifndef _VIDCAP_DRVCAPS_HPP_ +#define _VIDCAP_DRVCAPS_HPP_ +#include + +class DriverCaps : private CAPDRIVERCAPS +{ +public: + DriverCaps(void); + DriverCaps(const DriverCaps &someDriverCaps); + DriverCaps(const CAPDRIVERCAPS &someCAPDRIVERCAPS); + virtual ~DriverCaps(void); + DriverCaps &operator=(const DriverCaps &someDriverCaps); + DriverCaps &operator=(const CAPDRIVERCAPS &someCAPDRIVERCAPS); + WORD operator==(const DriverCaps &someDriverCaps)const; + WORD operator==(const CAPDRIVERCAPS &someCAPDRIVERCAPS)const; + WORD deviceIndex(void)const; + void deviceIndex(WORD deviceIndex); + WORD hasOverlay(void)const; + void hasOverlay(WORD hasOverlay); + WORD hasDlgVideoSource(void)const; + void hasDlgVideoSource(WORD hasDlgVideoSource); + WORD hasDlgVideoFormat(void)const; + void hasDlgVideoFormat(WORD hasDlgVideoFormat); + WORD hasDlgVideoDisplay(void)const; + void hasDlgVideoDisplay(WORD hasDlgVideoDisplay); + WORD captureInitialized(void)const; + void captureInitialized(WORD captureInitialized); + WORD driverSuppliesPalettes(void)const; + void driverSuppliesPalettes(WORD driverSuppliesPalettes); + HANDLE videoIn(void)const; + void videoIn(HANDLE videoIn); + HANDLE videoOut(void)const; + void videoOut(HANDLE videoOut); + HANDLE videoExtIn(void)const; + void videoExtIn(HANDLE videoExtIn); + HANDLE videoExtOut(void)const; + void videoExtOut(HANDLE videoExtOut); +private: + void setZero(void); +}; + +inline +DriverCaps::DriverCaps(void) +{ + setZero(); +} + +inline +DriverCaps::DriverCaps(const DriverCaps &someDriverCaps) +{ + *this=someDriverCaps; +} + +inline +DriverCaps::DriverCaps(const CAPDRIVERCAPS &someCAPDRIVERCAPS) +{ + *this=someCAPDRIVERCAPS; +} + +inline +DriverCaps::~DriverCaps(void) +{ +} + +inline +DriverCaps &DriverCaps::operator=(const DriverCaps &someDriverCaps) +{ + deviceIndex(someDriverCaps.deviceIndex()); + hasOverlay(someDriverCaps.hasOverlay()); + hasDlgVideoSource(someDriverCaps.hasDlgVideoSource()); + hasDlgVideoFormat(someDriverCaps.hasDlgVideoFormat()); + hasDlgVideoDisplay(someDriverCaps.hasDlgVideoDisplay()); + captureInitialized(someDriverCaps.captureInitialized()); + driverSuppliesPalettes(someDriverCaps.driverSuppliesPalettes()); + videoIn(someDriverCaps.videoIn()); + videoOut(someDriverCaps.videoOut()); + videoExtIn(someDriverCaps.videoExtIn()); + videoExtOut(someDriverCaps.videoExtOut()); + return *this; +} + +inline +DriverCaps &DriverCaps::operator=(const CAPDRIVERCAPS &someCAPDRIVERCAPS) +{ + deviceIndex(someCAPDRIVERCAPS.wDeviceIndex); + hasOverlay(someCAPDRIVERCAPS.fHasOverlay); + hasDlgVideoSource(someCAPDRIVERCAPS.fHasDlgVideoSource); + hasDlgVideoFormat(someCAPDRIVERCAPS.fHasDlgVideoFormat); + hasDlgVideoDisplay(someCAPDRIVERCAPS.fHasDlgVideoDisplay); + captureInitialized(someCAPDRIVERCAPS.fCaptureInitialized); + driverSuppliesPalettes(someCAPDRIVERCAPS.fDriverSuppliesPalettes); + videoIn(someCAPDRIVERCAPS.hVideoIn); + videoOut(someCAPDRIVERCAPS.hVideoOut); + videoExtIn(someCAPDRIVERCAPS.hVideoExtIn); + videoExtOut(someCAPDRIVERCAPS.hVideoExtOut); + return *this; +} + +inline +WORD DriverCaps::operator==(const DriverCaps &someDriverCaps)const +{ + return (deviceIndex()==someDriverCaps.deviceIndex()&& + hasOverlay()==someDriverCaps.hasOverlay()&& + hasDlgVideoSource()==someDriverCaps.hasDlgVideoSource()&& + hasDlgVideoFormat()==someDriverCaps.hasDlgVideoFormat()&& + hasDlgVideoDisplay()==someDriverCaps.hasDlgVideoDisplay()&& + captureInitialized()==someDriverCaps.captureInitialized()&& + driverSuppliesPalettes()==someDriverCaps.driverSuppliesPalettes()&& + videoIn()==someDriverCaps.videoIn()&& + videoOut()==someDriverCaps.videoOut()&& + videoExtIn()==someDriverCaps.videoExtIn()&& + videoExtOut()==someDriverCaps.videoExtOut()); +} + +inline +WORD DriverCaps::operator==(const CAPDRIVERCAPS &someCAPDRIVERCAPS)const +{ + DriverCaps driverCaps(someCAPDRIVERCAPS); + return *this==driverCaps; +} + +inline +WORD DriverCaps::deviceIndex(void)const +{ + return CAPDRIVERCAPS::wDeviceIndex; +} + +inline +void DriverCaps::deviceIndex(WORD deviceIndex) +{ + CAPDRIVERCAPS::wDeviceIndex=deviceIndex; +} + +inline +WORD DriverCaps::hasOverlay(void)const +{ + return CAPDRIVERCAPS::fHasOverlay; +} + +inline +void DriverCaps::hasOverlay(WORD hasOverlay) +{ + CAPDRIVERCAPS::fHasOverlay=hasOverlay; +} + +inline +WORD DriverCaps::hasDlgVideoSource(void)const +{ + return CAPDRIVERCAPS::fHasDlgVideoSource; +} + +inline +void DriverCaps::hasDlgVideoSource(WORD hasDlgVideoSource) +{ + CAPDRIVERCAPS::fHasDlgVideoSource=hasDlgVideoSource; +} + +inline +WORD DriverCaps::hasDlgVideoFormat(void)const +{ + return CAPDRIVERCAPS::fHasDlgVideoFormat; +} + +inline +void DriverCaps::hasDlgVideoFormat(WORD hasDlgVideoFormat) +{ + CAPDRIVERCAPS::fHasDlgVideoFormat=hasDlgVideoFormat; +} + +inline +WORD DriverCaps::hasDlgVideoDisplay(void)const +{ + return CAPDRIVERCAPS::fHasDlgVideoDisplay; +} + +inline +void DriverCaps::hasDlgVideoDisplay(WORD hasDlgVideoDisplay) +{ + CAPDRIVERCAPS::fHasDlgVideoDisplay=hasDlgVideoDisplay; +} + +inline +WORD DriverCaps::captureInitialized(void)const +{ + return CAPDRIVERCAPS::fCaptureInitialized; +} + +inline +void DriverCaps::captureInitialized(WORD captureInitialized) +{ + CAPDRIVERCAPS::fCaptureInitialized=captureInitialized; +} + +inline +WORD DriverCaps::driverSuppliesPalettes(void)const +{ + return CAPDRIVERCAPS::fDriverSuppliesPalettes; +} + +inline +void DriverCaps::driverSuppliesPalettes(WORD driverSuppliesPalettes) +{ + CAPDRIVERCAPS::fDriverSuppliesPalettes=driverSuppliesPalettes; +} + +inline +HANDLE DriverCaps::videoIn(void)const +{ + return CAPDRIVERCAPS::hVideoIn; +} + +inline +void DriverCaps::videoIn(HANDLE videoIn) +{ + CAPDRIVERCAPS::hVideoIn=videoIn; +} + +inline +HANDLE DriverCaps::videoOut(void)const +{ + return CAPDRIVERCAPS::hVideoOut; +} + +inline +void DriverCaps::videoOut(HANDLE videoOut) +{ + CAPDRIVERCAPS::hVideoOut=videoOut; +} + +inline +HANDLE DriverCaps::videoExtIn(void)const +{ + return CAPDRIVERCAPS::hVideoExtIn; +} + +inline +void DriverCaps::videoExtIn(HANDLE videoExtIn) +{ + CAPDRIVERCAPS::hVideoExtIn=videoExtIn; +} + +inline +HANDLE DriverCaps::videoExtOut(void)const +{ + return CAPDRIVERCAPS::hVideoExtOut; +} + +inline +void DriverCaps::videoExtOut(HANDLE videoExtOut) +{ + CAPDRIVERCAPS::hVideoExtOut=videoExtOut; +} + +inline +void DriverCaps::setZero(void) +{ + deviceIndex(0); + hasOverlay(0); + hasDlgVideoSource(0); + hasDlgVideoFormat(0); + hasDlgVideoDisplay(0); + captureInitialized(0); + driverSuppliesPalettes(0); + videoIn(0); + videoOut(0); + videoExtIn(0); + videoExtOut(0); +} +#endif + + diff --git a/vidcap/DRVINFO.HPP b/vidcap/DRVINFO.HPP new file mode 100644 index 0000000..4165e16 --- /dev/null +++ b/vidcap/DRVINFO.HPP @@ -0,0 +1,89 @@ +#ifndef _VIDCAP_DRVINFO_HPP_ +#define _VIDCAP_DRVINFO_HPP_ +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _COMMON_BLOCK_HPP_ +#include +#endif + +class DriverInfo +{ +public: + DriverInfo(void); + DriverInfo(const String &nameString,const String &versionString); + DriverInfo(const DriverInfo &someDriverInfo); + virtual ~DriverInfo(); + DriverInfo &operator=(const DriverInfo &someDriverInfo); + WORD operator==(const DriverInfo &someDriverInfo)const; + void driverName(const String &driverName); + String driverName(void)const; + void driverVersion(const String &driverVersion); + String driverVersion(void)const; +private: + String mDriverName; + String mDriverVersion; +}; + +inline +DriverInfo::DriverInfo(void) +{ +} + +inline +DriverInfo::DriverInfo(const String &nameString,const String &versionString) +{ + driverName(nameString); + driverVersion(versionString); +} + +inline +DriverInfo::DriverInfo(const DriverInfo &someDriverInfo) +{ + *this=someDriverInfo; +} + +inline +DriverInfo::~DriverInfo() +{ +} + +inline +DriverInfo &DriverInfo::operator=(const DriverInfo &someDriverInfo) +{ + driverName(someDriverInfo.driverName()); + driverVersion(someDriverInfo.driverVersion()); + return *this; +} + +inline +WORD DriverInfo::operator==(const DriverInfo &someDriverInfo)const +{ + return (driverName()==someDriverInfo.driverName()&& + driverVersion()==someDriverInfo.driverVersion()); +} + +inline +void DriverInfo::driverName(const String &driverName) +{ + mDriverName=driverName; +} + +inline +String DriverInfo::driverName(void)const +{ + return mDriverName; +} + +inline +void DriverInfo::driverVersion(const String &driverVersion) +{ + mDriverVersion=driverVersion; +} + +inline +String DriverInfo::driverVersion(void)const +{ + return mDriverVersion; +} +#endif diff --git a/vidcap/Debug/BMPCAP.obj b/vidcap/Debug/BMPCAP.obj new file mode 100644 index 0000000..094b526 Binary files /dev/null and b/vidcap/Debug/BMPCAP.obj differ diff --git a/vidcap/Debug/VIDCAP.obj b/vidcap/Debug/VIDCAP.obj new file mode 100644 index 0000000..5595a0c Binary files /dev/null and b/vidcap/Debug/VIDCAP.obj differ diff --git a/vidcap/Debug/VidReg.obj b/vidcap/Debug/VidReg.obj new file mode 100644 index 0000000..ad7f93c Binary files /dev/null and b/vidcap/Debug/VidReg.obj differ diff --git a/vidcap/Debug/vc60.idb b/vidcap/Debug/vc60.idb new file mode 100644 index 0000000..1877abd Binary files /dev/null and b/vidcap/Debug/vc60.idb differ diff --git a/vidcap/Debug/vc60.pdb b/vidcap/Debug/vc60.pdb new file mode 100644 index 0000000..535bda8 Binary files /dev/null and b/vidcap/Debug/vc60.pdb differ diff --git a/vidcap/Debug/vidcaplib.lib b/vidcap/Debug/vidcaplib.lib new file mode 100644 index 0000000..4f4fdd6 Binary files /dev/null and b/vidcap/Debug/vidcaplib.lib differ diff --git a/vidcap/Debug/vidcaplib.pch b/vidcap/Debug/vidcaplib.pch new file mode 100644 index 0000000..1e9b315 Binary files /dev/null and b/vidcap/Debug/vidcaplib.pch differ diff --git a/vidcap/MAIN.CPP b/vidcap/MAIN.CPP new file mode 100644 index 0000000..455bb2a --- /dev/null +++ b/vidcap/MAIN.CPP @@ -0,0 +1,9 @@ +#include +#include + +int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR /*lpszCmdLine*/,int nCmdShow) +{ + MainWindow applicationWindow(hInstance); + return applicationWindow.messageLoop(); +} + diff --git a/vidcap/MAIN.HPP b/vidcap/MAIN.HPP new file mode 100644 index 0000000..961faab --- /dev/null +++ b/vidcap/MAIN.HPP @@ -0,0 +1,65 @@ +#ifndef _VIDCAP_MAIN_HPP_ +#define _VIDCAP_MAIN_HPP_ +#include + +class Main +{ +public: + static HINSTANCE processInstance(HWND hWnd); + static HINSTANCE processInstance(void); + static HINSTANCE previousProcessInstance(void); + static void processInstance(HINSTANCE processInstance); + static void previousProcessInstance(HINSTANCE previousProcessInstance); + static void cmdShow(int nCmdShow); +private: + static HINSTANCE smhInstance; + static HINSTANCE smhPrevInstance; + static int smnCmdShow; +}; + +inline +void Main::processInstance(HINSTANCE hProcessInstance) +{ + smhInstance=hProcessInstance; +} + +inline +void Main::previousProcessInstance(HINSTANCE previousProcessInstance) +{ + smhPrevInstance=previousProcessInstance; +} + +inline +void Main::cmdShow(int nCmdShow) +{ +} + +inline +HINSTANCE Main::processInstance(void) +{ + return smhInstance; +} + +inline +HINSTANCE Main::previousProcessInstance(void) +{ + return smhPrevInstance; +} + +#if defined(__FLAT__) +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowLong(hWnd,GWL_HINSTANCE); +} +#else +inline +HINSTANCE Main::processInstance(HWND hWnd) +{ + return (HINSTANCE)::GetWindowWord(hWnd,GWW_HINSTANCE); +} +#endif +#define WM_REACTIVATE WM_USER+1 +#endif + + diff --git a/vidcap/MAINWND.CPP b/vidcap/MAINWND.CPP new file mode 100644 index 0000000..5f3ac19 --- /dev/null +++ b/vidcap/MAINWND.CPP @@ -0,0 +1,246 @@ +#include +#include +#include +#include +#include +#include +#include + +char MainWindow::szClassName[]="Video Capture"; +char MainWindow::szMenuName[]="CAPMENU"; + +MainWindow::MainWindow(HINSTANCE hInstance) +: mPaintHandler(this,&MainWindow::paintHandler), + mDestroyHandler(this,&MainWindow::destroyHandler), + mCommandHandler(this,&MainWindow::commandHandler), + mKeyDownHandler(this,&MainWindow::keyDownHandler), + mSizeHandler(this,&MainWindow::sizeHandler), + mCreateHandler(this,&MainWindow::createHandler), + mTimerHandler(this,&MainWindow::timerHandler), + mhInstance(hInstance) +{ + insertHandlers(); + registerClass(); + ::CreateWindow(szClassName,szClassName, + WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN|WS_SIZEBOX, + CW_USEDEFAULT,CW_USEDEFAULT, + DefaultWidth,DefaultHeight, + NULL,NULL,mhInstance,(LPSTR)this); + mStatusBar=new StatusBarEx(*this,StatusBarID); + mStatusBar.disposition(PointerDisposition::Delete); + show(SW_SHOW); + update(); +} + +MainWindow::~MainWindow() +{ + destroy(); +} + +void MainWindow::insertHandlers(void) +{ + insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + insertHandler(VectorHandler::PaintHandler,&mPaintHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::SizeHandler,&mSizeHandler); + insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + insertHandler(VectorHandler::CreateHandler,&mCreateHandler); + insertHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +void MainWindow::removeHandlers(void) +{ + removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); + removeHandler(VectorHandler::PaintHandler,&mPaintHandler); + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::SizeHandler,&mSizeHandler); + removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler); + removeHandler(VectorHandler::CreateHandler,&mCreateHandler); + removeHandler(VectorHandler::TimerHandler,&mTimerHandler); +} + +void MainWindow::registerClass(void)const +{ + WNDCLASS wndClass; + + if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return; + wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; + wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; + wndClass.cbClsExtra =0; + wndClass.cbWndExtra =sizeof(MainWindow*); + wndClass.hInstance =mhInstance; + wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION); + wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); + wndClass.hbrBackground =(HBRUSH)::GetStockObject(GRAY_BRUSH); + wndClass.lpszMenuName =szMenuName; + wndClass.lpszClassName =szClassName; + ::RegisterClass(&wndClass); + assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass)); +} + +CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/) +{ + mMainMenu=new PureMenu(::GetMenu(*this)); + mMainMenu.disposition(PointerDisposition::Delete); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/) +{ + removeHandlers(); + ::PostQuitMessage(0); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case FILE_EXIT : + close(); + destroy(); + break; + case FILE_OPEN : + handleFileOpen(); + break; + case FILE_CLOSE : + handleFileClose(); + break; + case CAPMENU_OPTIONS_SAVE_FRAMES : + handleSaveFrames(); + break; + case CAPMENU_OPTIONS_PREVIEW : + handlePreview(); + break; + case CAPMENU_OPTIONS_GRABFRAME : + mBitmapCapture->grabFrame(); + break; + case CAPMENU_OPTIONS_GRABFRAMENOSTOP : + mBitmapCapture->grabFrameNoStop(); + break; + case CAPMENU_DIALOGVIDEODISPLAY : + mBitmapCapture->dialogVideoDisplay(); + break; + case CAPMENU_DIALOGVIDEOSOURCE : + mBitmapCapture->dialogVideoSource(); + break; + case CAPMENU_DIALOGVIDEOFORMAT : + mBitmapCapture->dialogVideoFormat(); + break; + case CAPMENU_SETTINGS : + handleSettings(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void MainWindow::checkDriverOptions(void) +{ + DriverCaps driverCaps; + + mBitmapCapture->getDriverCaps(driverCaps); + + if(!driverCaps.hasDlgVideoDisplay())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEODISPLAY,MF_BYCOMMAND|MF_GRAYED); + else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEODISPLAY,PureMenu::ByCommand,PureMenu::ItemEnabled); + if(!driverCaps.hasDlgVideoFormat())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEOFORMAT,MF_BYCOMMAND|MF_GRAYED); + else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOFORMAT,PureMenu::ByCommand,PureMenu::ItemEnabled); + if(!driverCaps.hasDlgVideoSource())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEOSOURCE,MF_BYCOMMAND|MF_GRAYED); + else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOSOURCE,PureMenu::ByCommand,PureMenu::ItemEnabled); +} + +void MainWindow::handleFileOpen(void) +{ + LRESULT driverIndex; + SourceDialog sourceDialog(*this); + driverIndex=sourceDialog.perform(); + if(-1!=driverIndex) + { + if(mBitmapCapture.isOkay())mBitmapCapture.destroy(); + mBitmapCapture=new BmpCap(*this,driverIndex); //,vidReg.getPreviewWidth(),vidReg.getPreviewHeight(),vidReg.getCaptureWidth(),vidReg.getCaptureHeight(),vidReg.getCaptureFile()); + mBitmapCapture.disposition(PointerDisposition::Delete); + if(!mBitmapCapture->isConnected()){::MessageBox(*this,"Failed to connect to device","Device Connect",MB_ICONSTOP);return;} + else + { + mMainMenu->enableMenuItem(FILE_CLOSE,PureMenu::ByCommand,PureMenu::ItemEnabled); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand,PureMenu::ItemEnabled); + mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYPOSITION|MF_UNCHECKED); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAME,PureMenu::ByCommand,PureMenu::ItemEnabled); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAMENOSTOP,PureMenu::ByCommand,PureMenu::ItemEnabled); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand,PureMenu::ItemEnabled); + checkDriverOptions(); + } + } +} + +void MainWindow::handleFileClose(void) +{ + if(mBitmapCapture.isOkay())mBitmapCapture.destroy(); + mMainMenu->enableMenuItem(FILE_CLOSE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEODISPLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOFORMAT,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOSOURCE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_UNCHECKED); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAME,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAMENOSTOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->enableMenuItem(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed)); + mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_UNCHECKED); +} + +void MainWindow::handleSaveFrames(void) +{ + if(!mBitmapCapture->isConnected())return; + if(MF_CHECKED==mMainMenu->getMenuState(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand)) + { + mBitmapCapture->saveFrames(false); + mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_UNCHECKED); + } + else + { + mBitmapCapture->saveFrames(true); + mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_CHECKED); + } +} + +void MainWindow::handlePreview(void) +{ + if(!mBitmapCapture->isConnected())return; + if(MF_CHECKED==mMainMenu->getMenuState(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand)) + { + mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_UNCHECKED); + mBitmapCapture->preview(false); + } + else + { + VidReg vidReg; + mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_CHECKED); + mBitmapCapture->setPreviewRate(vidReg.getPreviewRate()); + mBitmapCapture->preview(true); + } +} + +void MainWindow::handleSettings() +{ + EntryDialog entryDialog(*this); + entryDialog.perform(); +} \ No newline at end of file diff --git a/vidcap/MAINWND.HPP b/vidcap/MAINWND.HPP new file mode 100644 index 0000000..3f7f523 --- /dev/null +++ b/vidcap/MAINWND.HPP @@ -0,0 +1,77 @@ +#ifndef _VIDCAP_MAINWINDOW_HPP_ +#define _VIDCAP_MAINWINDOW_HPP_ +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif + +#ifndef _VIDCAP_BMPCAP_HPP_ +#include +#endif + +#ifndef _COMMON_AVICAP_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif +#ifndef _COMMON_PUREMENU_HPP_ +#include +#endif +#ifndef _STATBAR_STATUSBAREX_HPP_ +#include +#endif + +class MainWindow : public Window +{ +public: + MainWindow(HINSTANCE hInstance); + virtual ~MainWindow(); + static String className(void); +private: + enum{StatusBarID=101}; + enum{DefaultWidth=640,DefaultHeight=480}; + void registerClass(void)const; + void insertHandlers(void); + void removeHandlers(void); + void createPropertySheet(void); + void checkDriverOptions(void); + + CallbackData::ReturnType paintHandler(CallbackData &someCallbackData); + CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData); + CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); + CallbackData::ReturnType timerHandler(CallbackData &someCallbackData); + CallbackData::ReturnType createHandler(CallbackData &someCallbackData); + void handleFileOpen(void); + void handleFileClose(void); + void handlePreview(void); + void handleSaveFrames(void); + void handleSettings(void); + + Callback mPaintHandler; + Callback mDestroyHandler; + Callback mCommandHandler; + Callback mKeyDownHandler; + Callback mSizeHandler; + Callback mTimerHandler; + Callback mCreateHandler; + static char szClassName[]; + static char szMenuName[]; + HINSTANCE mhInstance; + SmartPointer mBitmapCapture; + SmartPointer mMainMenu; + SmartPointer mStatusBar; +}; + +inline +String MainWindow::className(void) +{ + return String(szClassName); +} +#endif + + diff --git a/vidcap/RSRC.H b/vidcap/RSRC.H new file mode 100644 index 0000000..a182ce6 --- /dev/null +++ b/vidcap/RSRC.H @@ -0,0 +1,28 @@ +#define FILE_EXIT 200 +#define FILE_OPEN 201 +#define FILE_CLOSE 202 + +#define SOURCE_LIST 1000 + +#define CAPMENU_DIALOGVIDEODISPLAY 101 +#define CAPMENU_DIALOGVIDEOSOURCE 102 +#define CAPMENU_DIALOGVIDEOFORMAT 103 + +#define CAPMENU_OPTIONS_GRABFRAME 107 +#define CAPMENU_OPTIONS_GRABFRAMENOSTOP 108 +#define CAPMENU_OPTIONS_PREVIEW 109 +#define CAPMENU_SETTINGS 110 +#define CAPMENU_OPTIONS_SAVE_FRAMES 111 + + +#define SETTINGS_BROWSE 101 +#define SETTINGS_USESEQUENCING 102 +#define SETTINGS_CAPTUREFILE 103 +#define SETTINGS_CAPTURE_320x240 104 +#define SETTINGS_CAPTURE_640x480 105 +#define SETTINGS_PREVIEW_320x240 106 +#define SETTINGS_PREVIEW_640x480 107 +#define SETTINGS_PREVIEW_RATE 108 + + + diff --git a/vidcap/RSRC.HPP b/vidcap/RSRC.HPP new file mode 100644 index 0000000..12d22de --- /dev/null +++ b/vidcap/RSRC.HPP @@ -0,0 +1,4 @@ +#ifndef _VIDCAP_RSRC_HPP_ +#define _VIDCAP_RSRC_HPP_ +#include +#endif diff --git a/vidcap/SCRAPS.TXT b/vidcap/SCRAPS.TXT new file mode 100644 index 0000000..735b7ce --- /dev/null +++ b/vidcap/SCRAPS.TXT @@ -0,0 +1,209 @@ +#define capSetCallbackOnError(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_ERROR, 0, (LPARAM)(LPVOID)(fpProc))) +#define capSetCallbackOnStatus(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_STATUS, 0, (LPARAM)(LPVOID)(fpProc))) +#define capSetCallbackOnYield(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_YIELD, 0, (LPARAM)(LPVOID)(fpProc))) +#define capSetCallbackOnFrame(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_FRAME, 0, (LPARAM)(LPVOID)(fpProc))) +#define capSetCallbackOnVideoStream(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, (LPARAM)(LPVOID)(fpProc))) +#define capSetCallbackOnWaveStream(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, (LPARAM)(LPVOID)(fpProc))) +#define capSetCallbackOnCapControl(hwnd, fpProc) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_CALLBACK_CAPCONTROL, 0, (LPARAM)(LPVOID)(fpProc))) + +#define capSetUserData(hwnd, lUser) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_USER_DATA, 0, (LPARAM)lUser)) +#define capGetUserData(hwnd) (AVICapSM(hwnd, WM_CAP_GET_USER_DATA, 0, 0)) + +#define capDriverConnect(hwnd, i) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_CONNECT, (WPARAM)(i), 0L)) +#define capDriverDisconnect(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_DISCONNECT, (WPARAM)0, 0L)) +#define capDriverGetName(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_NAME, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName))) +#define capDriverGetVersion(hwnd, szVer, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_VERSION, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szVer))) +#define capDriverGetCaps(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_GET_CAPS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPDRIVERCAPS)(s))) + +#define capFileSetCaptureFile(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_CAPTURE_FILE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName))) +#define capFileGetCaptureFile(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_GET_CAPTURE_FILE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName))) +#define capFileAlloc(hwnd, dwSize) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_ALLOCATE, 0, (LPARAM)(DWORD)(dwSize))) +#define capFileSaveAs(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEAS, 0, (LPARAM)(LPVOID)(LPTSTR)(szName))) +#define capFileSetInfoChunk(hwnd, lpInfoChunk) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SET_INFOCHUNK, (WPARAM)0, (LPARAM)(LPCAPINFOCHUNK)(lpInfoChunk))) +#define capFileSaveDIB(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_FILE_SAVEDIB, 0, (LPARAM)(LPVOID)(LPTSTR)(szName))) + +#define capEditCopy(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_EDIT_COPY, 0, 0L)) + +#define capSetAudioFormat(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s))) +#define capGetAudioFormat(hwnd, s, wSize) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPWAVEFORMATEX)(s))) +#define capGetAudioFormatSize(hwnd) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_AUDIOFORMAT, (WPARAM)0, (LPARAM)0L)) + +#define capDlgVideoFormat(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0L)) +#define capDlgVideoSource(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0L)) +#define capDlgVideoDisplay(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEODISPLAY, 0, 0L)) +#define capDlgVideoCompression(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0L)) + +#define capGetVideoFormat(hwnd, s, wSize) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s))) +#define capGetVideoFormatSize(hwnd) ((DWORD)AVICapSM(hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0L)) +#define capSetVideoFormat(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_VIDEOFORMAT, (WPARAM)(wSize), (LPARAM)(LPVOID)(s))) + + +#define capOverlay(hwnd, f) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_OVERLAY, (WPARAM)(BOOL)(f), 0L)) +#define capPreviewScale(hwnd, f) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCALE, (WPARAM)(BOOL)f, 0L)) +#define capGetStatus(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_STATUS, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPSTATUS)(s))) +#define capSetScrollPos(hwnd, lpP) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SCROLL, (WPARAM)0, (LPARAM)(LPPOINT)(lpP))) + +#define capGrabFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME, (WPARAM)0, (LPARAM)0L)) +#define capGrabFrameNoStop(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME_NOSTOP, (WPARAM)0, (LPARAM)0L)) + +#define capCaptureSequence(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE, (WPARAM)0, (LPARAM)0L)) +#define capCaptureSequenceNoFile(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SEQUENCE_NOFILE, (WPARAM)0, (LPARAM)0L)) +#define capCaptureStop(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_STOP, (WPARAM)0, (LPARAM)0L)) +#define capCaptureAbort(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_ABORT, (WPARAM)0, (LPARAM)0L)) + +#define capCaptureSingleFrameOpen(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_OPEN, (WPARAM)0, (LPARAM)0L)) +#define capCaptureSingleFrameClose(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME_CLOSE, (WPARAM)0, (LPARAM)0L)) +#define capCaptureSingleFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_SINGLE_FRAME, (WPARAM)0, (LPARAM)0L)) + +#define capCaptureGetSetup(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s))) +#define capCaptureSetSetup(hwnd, s, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_SEQUENCE_SETUP, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPCAPTUREPARMS)(s))) + +#define capSetMCIDeviceName(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_SET_MCI_DEVICE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName))) +#define capGetMCIDeviceName(hwnd, szName, wSize) ((BOOL)AVICapSM(hwnd, WM_CAP_GET_MCI_DEVICE, (WPARAM)(wSize), (LPARAM)(LPVOID)(LPTSTR)(szName))) + +#define capPaletteOpen(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_OPEN, 0, (LPARAM)(LPVOID)(LPTSTR)(szName))) +#define capPaletteSave(hwnd, szName) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_SAVE, 0, (LPARAM)(LPVOID)(LPTSTR)(szName))) +#define capPalettePaste(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_PASTE, (WPARAM) 0, (LPARAM)0L)) +#define capPaletteAuto(hwnd, iFrames, iColors) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_AUTOCREATE, (WPARAM)(iFrames), (LPARAM)(DWORD)(iColors))) +#define capPaletteManual(hwnd, fGrab, iColors) ((BOOL)AVICapSM(hwnd, WM_CAP_PAL_MANUALCREATE, (WPARAM)(fGrab), (LPARAM)(DWORD)(iColors))) + + +#if 0 + if(mhCaptureWnd) + { + ::SendMessage(mhCaptureWnd,WM_CAP_STOP,0,0L); + ::SendMessage(mhCaptureWnd,WM_CAP_DRIVER_DISCONNECT,0,0L); + ::DestroyWindow(mhCaptureWnd); + } + mhCaptureWnd=capCreateCaptureWindow("My Capture Window",WS_CHILD|WS_VISIBLE,0,0,160,120,*this,101); + ::SendMessage(mhCaptureWnd,WM_CAP_DRIVER_CONNECT,0,0L); + ::SendMessage(mhCaptureWnd,WM_CAP_SEQUENCE_NOFILE,0,0L); + ::SendMessage(mhCaptureWnd,WM_CAP_SEQUENCE,0,0L); + +#define capGrabFrame(hwnd) ((BOOL)AVICapSM(hwnd, WM_CAP_GRAB_FRAME, (WPARAM)0, (LPARAM)0L)) + +#endif + + +#if 0 + BITMAPINFOHEADER bitmapInfoHeader; + bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER); + bitmapInfoHeader.biCompression = BI_RGB; + bitmapInfoHeader.biWidth = 160; + bitmapInfoHeader.biHeight = 120; + bitmapInfoHeader.biPlanes = 1; + bitmapInfoHeader.biBitCount = 8; + bitmapInfoHeader.biSizeImage = bitmapInfoHeader.biWidth * bitmapInfoHeader.biHeight * + bitmapInfoHeader.biPlanes * bitmapInfoHeader.biBitCount / 8; + bitmapInfoHeader.biXPelsPerMeter = 0; + bitmapInfoHeader.biYPelsPerMeter = 0; + bitmapInfoHeader.biClrUsed = 0; + bitmapInfoHeader.biClrImportant = 0; + return ::SendMessage(mhCaptureWnd,WM_CAP_SET_VIDEOFORMAT,(WPARAM)sizeof(BITMAPINFOHEADER),(LPARAM)&bitmapInfoHeader); +#endif + + + + + +BmpCap::BmpCap(HWND hParentWnd) +: mSequence(0) +{ + ICMOpen icmOpen; + create(hParentWnd,320,200); + connect(0); + getVideoFormat(mBitmapInfo); + if(!mVideoCodec.openDriver(mBitmapInfo.compression()))::OutputDebugString("Failed to open decompressor\n"); + icmOpen.fccType(CFOURCC("vidc")); + icmOpen.fccHandler(mBitmapInfo.compression()); + icmOpen.flags(ICMOpen::DeCompress); + icmOpen.version(0); + if(!mVideoCodec.driverProc(icmOpen)){::OutputDebugString("ICMOpen failed\n");return;}; +// if(!mVideoCodec.driverLoad())::OutputDebugString("Failed to load driver\n"); + if(!mVideoCodec.driverEnable(true)){::OutputDebugString("DriverEnable failed\n");return;} + getVideoFormat(mBitmapInfo); +// setPreviewRate(500); +// preview(true); +} + + + +STRINGTABLE DISCARDABLE +BEGIN + STRING_OPTIONS "OPTIONS" + STRING_RATE "RATE" + STRING_SAVE "SAVE" + STRING_SITES "SITES" + STRING_NAME "NAME" + STRING_USER "USER" + STRING_PASSWORD "PASSWORD" + STRING_DIRECTORY "DIRECTORY" + STRING_INIFILENAME "BMPCAP.INI" + STRING_UNSET "UNSET" + STRING_DEFAULTRATE "50" +END + + +#define STRING_OPTIONS 101 +#define STRING_RATE 102 +#define STRING_SAVE 103 +#define STRING_SITES 104 +#define STRING_NAME 105 +#define STRING_USER 106 +#define STRING_PASSWORD 107 +#define STRING_DIRECTORY 108 +#define STRING_INIFILENAME 109 +#define STRING_UNSET 110 +#define STRING_DEFAULTRATE 111 +#define STRING_DEFAULTSAVEFILE 112 + + + +void BmpCap::frameHandler(VIDEOHDR &videoHeader) +{ + if(!saveFrames())return; + MovieData movieData(MovieData::DIBCompressed); + MovieData dstMovieData; + DiskInfo diskInfo; + String srcPathFileName; + String dstPathFileName; + String dstPathFileTempName; + String strTime; + SystemTime systemTime; + + strTime.reserve(512); +// srcPathFileName.reserve(1024); + ::sprintf(strTime,"%04d%02d%02d%02d%02d%02d%02d", + systemTime.year(),systemTime.month(),systemTime.day(), + systemTime.hour(),systemTime.minute(),systemTime.second(), + systemTime.milliseconds()); +// ::sprintf(srcPathFileName,"%04d%02d%02d%02d%02d%02d%02d.BMP", +// systemTime.year(),systemTime.month(),systemTime.day(), +// systemTime.hour(),systemTime.minute(),systemTime.second(), +// systemTime.milliseconds()); + srcPathFileName=strTime+".bmp"; + dstPathFileTempName=strTime+"tmp.jpg"; + if(mUseSequence)dstPathFileName=mCaptureFile.betweenString(0,'.')+String().fromInt(mSequence++)+String(".jpg"); + else dstPathFileName=mCaptureFile; + movieData.size(videoHeader.dwBufferLength); + ::memcpy((BYTE*)&movieData[0],videoHeader.lpData,videoHeader.dwBufferLength); + if(!mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return; + mDstBitmapInfo.width(mCaptureWidth); + mDstBitmapInfo.height(mCaptureHeight); + if(!mVideoCodec.decompressFrame(mBitmapInfo,mDstBitmapInfo,movieData,dstMovieData)) + { + if(!mVideoCodec.decompressFrame(mBitmapInfo,movieData,dstMovieData))return; + if(!mVideoCodec.getFormat(mBitmapInfo,mDstBitmapInfo))return; + } + Bitmap frameBitmap(srcPathFileName,mDstBitmapInfo,dstMovieData); + if(BitmapInfo::Bit8==mDstBitmapInfo.bitCount()) + { + PurePalette purePalette(mCaptureStatus.currentPalette()); + frameBitmap.setPalette(purePalette.getPalette(),FALSE); + } + frameBitmap.saveBitmap(); +// ImageConverter::convert(srcPathFileName,dstPathFileName,mQuality); + ImageConverter::convert(srcPathFileName,dstPathFileTempName,mQuality); + diskInfo.rename(dstPathFileTempName,dstPathFileName); + diskInfo.unlink(srcPathFileName); +} diff --git a/vidcap/STDTMPL.CPP b/vidcap/STDTMPL.CPP new file mode 100644 index 0000000..46a0079 --- /dev/null +++ b/vidcap/STDTMPL.CPP @@ -0,0 +1,25 @@ +#define _EXPAND_VECTOR_TEMPLATES_ +#define _EXPAND_BLOCK_TEMPLATES_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef Callback a; +typedef PureVector b; +typedef GlobalData h; +typedef Block i; + diff --git a/vidcap/VIDCAP.CPP b/vidcap/VIDCAP.CPP new file mode 100644 index 0000000..954de20 --- /dev/null +++ b/vidcap/VIDCAP.CPP @@ -0,0 +1,214 @@ +#include + +VidCap::VidCap() +: mIsConnected(false), mhCaptureWnd(0), mhParentWnd(0) +{ +} + +VidCap::~VidCap() +{ + destroy(); +} + +void VidCap::disconnect(void) +{ + if(!isOkay()||!isConnected())return; + ::SendMessage(mhCaptureWnd,WM_CAP_STOP,0,0L); + ::SendMessage(mhCaptureWnd,WM_CAP_DRIVER_DISCONNECT,0,0L); + isConnected(false); +} + + +bool VidCap::create(HWND hParentWnd,DWORD width,DWORD height) +{ + mhParentWnd=hParentWnd; + destroy(); + mhCaptureWnd=capCreateCaptureWindow("VIDCAP",WS_CHILD|WS_VISIBLE,0,0,width,height,hParentWnd,ControlID); + if(0==mhCaptureWnd)return false; + mInstanceData.setInstanceData(mhCaptureWnd,(void*)this); + installHandlers(); + return true; +} + +void VidCap::destroy(void) +{ + if(!isOkay())return; + disconnect(); + removeHandlers(); + mInstanceData.removeInstanceData(mhCaptureWnd); + ::DestroyWindow(mhCaptureWnd); + mhCaptureWnd=0; +} + +bool VidCap::connect(const String &driverName) +{ + Block capDrivers; + + disconnect(); + getDrivers(capDrivers); + for(short itemIndex=0;itemIndex capDrivers; + DriverInfo driverInfo; + + if(!isOkay())return false; + getDrivers(capDrivers); + if(!capDrivers.size()||driverIndex>=capDrivers.size())return false; + disconnect(); + driverInfo=capDrivers[driverIndex]; + if(::SendMessage(mhCaptureWnd,WM_CAP_DRIVER_CONNECT,driverIndex,0L)) + { + ::OutputDebugString(String(String("VidCap::connect OK[")+driverInfo.driverName()+String(" ")+driverInfo.driverVersion()+String("\n")).str()); + isConnected(true); + getCaptureParams(mCaptureParams); + getCaptureStatus(mCaptureStatus); + } + else ::OutputDebugString(String(String("VidCap::connect ERR[")+driverInfo.driverName()+String(" ")+driverInfo.driverVersion()+String("\n")).str()); + return isConnected(); +} + +void VidCap::getDrivers(Block &capDrivers) +{ + short itemIndex(0); + String driverName; + String driverVersion; + + capDrivers.remove(); + while(TRUE) + { + if(!capGetDriverDescription(itemIndex,(LPSTR)driverName,String::MaxString,(LPSTR)driverVersion,String::MaxString))break; + capDrivers.insert(&DriverInfo(driverName,driverVersion)); + itemIndex++; + } +} + +void VidCap::installHandlers(void) +{ + if(!isOkay())return; + capSetCallbackOnError(mhCaptureWnd,(FARPROC)errorCallback); + capSetCallbackOnStatus(mhCaptureWnd,(FARPROC)statusCallback); + capSetCallbackOnFrame(mhCaptureWnd,(FARPROC)frameCallback); + capSetCallbackOnVideoStream(mhCaptureWnd,(FARPROC)videoCallback); +} + +void VidCap::removeHandlers(void) +{ + if(!isOkay())return; + capSetCallbackOnError(mhCaptureWnd,0); + capSetCallbackOnStatus(mhCaptureWnd,0); + capSetCallbackOnFrame(mhCaptureWnd,0); + capSetCallbackOnVideoStream(mhCaptureWnd,0); +} + +bool VidCap::getVideoFormat(BitmapInfo &bitmapInfo) +{ + DWORD sizeData; + GlobalData globalData; + LPBITMAPINFOHEADER lpCaptureFormat; + + if(!isConnected())return false; + globalData.size(::SendMessage(mhCaptureWnd,WM_CAP_GET_VIDEOFORMAT,0,0L)); + lpCaptureFormat=(LPBITMAPINFOHEADER)(BYTE*)&globalData[0]; + ::SendMessage(mhCaptureWnd,WM_CAP_GET_VIDEOFORMAT,(WPARAM)globalData.size(),(LPARAM)(LPVOID)lpCaptureFormat); + bitmapInfo.planes(lpCaptureFormat->biPlanes); + bitmapInfo.width(lpCaptureFormat->biWidth); + bitmapInfo.height(lpCaptureFormat->biHeight); + bitmapInfo.bitCount(BitmapInfo::BitsPerPixel(lpCaptureFormat->biBitCount)); + bitmapInfo.compression(lpCaptureFormat->biCompression); + bitmapInfo.xPelsPerMeter(lpCaptureFormat->biXPelsPerMeter); + bitmapInfo.yPelsPerMeter(lpCaptureFormat->biYPelsPerMeter); + bitmapInfo.colorUsed(lpCaptureFormat->biClrUsed); + bitmapInfo.colorImportant(lpCaptureFormat->biClrImportant); + bitmapInfo.rgbColors(lpCaptureFormat->biClrImportant); + return true; +} + +bool VidCap::dialogVideoSource(void) +{ + DriverCaps driverCaps; + + if(!getDriverCaps(driverCaps))return false; + if(!driverCaps.hasDlgVideoSource())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_DLG_VIDEOSOURCE,0,0L); +} + +bool VidCap::dialogVideoFormat(void) +{ + DriverCaps driverCaps; + + if(!getDriverCaps(driverCaps))return false; + if(!driverCaps.hasDlgVideoFormat())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_DLG_VIDEOFORMAT,0,0L); +} + +bool VidCap::dialogVideoDisplay(void) +{ + DriverCaps driverCaps; + + if(!getDriverCaps(driverCaps))return false; + if(!driverCaps.hasDlgVideoDisplay())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_DLG_VIDEODISPLAY,0,0L); +} + +// ************************** + +void WINAPI VidCap::errorCallback(HWND hCaptureWnd,int nErrorID,LPSTR lpszErrorText) +{ + InstanceData instanceData; + VidCap *lpVideoCapture=((VidCap*)instanceData.getInstanceData(hCaptureWnd)); + lpVideoCapture->errorHandler(nErrorID,String(lpszErrorText)); +} + +void WINAPI VidCap::statusCallback(HWND hCaptureWnd,int nID,LPSTR lpszStatusText) +{ + InstanceData instanceData; + VidCap *lpVideoCapture=((VidCap*)instanceData.getInstanceData(hCaptureWnd)); + lpVideoCapture->statusHandler(nID,String(lpszStatusText)); +} + +void WINAPI VidCap::videoCallback(HWND hCaptureWnd,LPVIDEOHDR lpVideoHeader) +{ + InstanceData instanceData; + VidCap *lpVideoCapture=((VidCap*)instanceData.getInstanceData(hCaptureWnd)); + lpVideoCapture->videoHandler(*lpVideoHeader); +} + +void WINAPI VidCap::frameCallback(HWND hCaptureWnd,LPVIDEOHDR lpVideoHeader) +{ + InstanceData instanceData; + VidCap *lpVideoCapture=((VidCap*)instanceData.getInstanceData(hCaptureWnd)); + lpVideoCapture->frameHandler(*lpVideoHeader); +} + +// virtuals + +void VidCap::errorHandler(int errorID,const String &errorString) +{ + ::OutputDebugString(String(String("VidCap::errorHandler[")+errorString+String("]\n")).str()); +} + +void VidCap::statusHandler(int nID,const String &statusString) +{ + ::OutputDebugString(String(String("VidCap::statusHandler[")+statusString+String("]\n")).str()); +} + +void VidCap::videoHandler(VIDEOHDR &videoHeader) +{ + ::OutputDebugString("VidCap::videoHandler\n"); +} + +void VidCap::frameHandler(VIDEOHDR &videoHeader) +{ + ::OutputDebugString("VidCap::frameHandler\n"); +} + diff --git a/vidcap/VIDCAP.DSW b/vidcap/VIDCAP.DSW new file mode 100644 index 0000000..9e1c9ec --- /dev/null +++ b/vidcap/VIDCAP.DSW @@ -0,0 +1,149 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "avicap"=.\Vidcap.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name common + End Project Dependency + Begin Project Dependency + Project_Dep_Name dialog + End Project Dependency + Begin Project Dependency + Project_Dep_Name bsptree + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpeg6b + End Project Dependency + Begin Project Dependency + Project_Dep_Name jpgimg + End Project Dependency + Begin Project Dependency + Project_Dep_Name codec + End Project Dependency + Begin Project Dependency + Project_Dep_Name statbar + End Project Dependency + Begin Project Dependency + Project_Dep_Name hookproc + End Project Dependency +}}} + +############################################################################### + +Project: "bsptree"=..\BSPTREE\bsptree.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "codec"=..\codec\codec.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "common"=..\COMMON\common.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "dialog"=..\DIALOG\Dialog.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "hookproc"=..\HOOKPROC\hookproc.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpeg6b"="..\..\parts\jpeg-6b\jpeg6b.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "jpgimg"=..\jpgimg\jpgimg.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "statbar"=..\STATBAR\Statbar.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/vidcap/VIDCAP.HPP b/vidcap/VIDCAP.HPP new file mode 100644 index 0000000..9515567 --- /dev/null +++ b/vidcap/VIDCAP.HPP @@ -0,0 +1,210 @@ +#ifndef _VIDCAP_VIDCAP_HPP_ +#define _VIDCAP_VIDCAP_HPP_ +#ifndef _COMMON_AVICAP_HPP_ +#include +#endif +#ifndef _COMMON_INSTANCEDATA_HPP_ +#include +#endif +#ifndef _COMMON_GLOBALDATA_HPP_ +#include +#endif +#ifndef _COMMON_BITMAPINFO_HPP_ +#include +#endif +#ifndef _VIDCAP_DRVINFO_HPP_ +#include +#endif +#ifndef _VIDCAP_CAPTUREPARAMS_HPP_ +#include +#endif +#ifndef _VIDCAP_CAPSTATUS_HPP_ +#include +#endif +#ifndef _VIDCAP_DRVCAPS_HPP_ +#include +#endif + +class VidCap +{ +public: + VidCap(); + virtual ~VidCap(); + bool create(HWND hParentWnd,DWORD width=DefaultWidth,DWORD height=DefaultHeight); + bool connect(const String &driverName); + bool connect(WORD driverIndex); + bool connect(void); + bool sequenceNoFile(void); + bool sequence(void); + bool capStop(void)const; + bool capAbort(void)const; + bool grabFrame(void)const; + bool grabFrameNoStop(void)const; + bool getDriverCaps(DriverCaps &someDriverCaps); + bool getCaptureParams(CaptureParams &someCaptureParams); + bool setCaptureParams(CaptureParams &someCaptureParams); + bool getCaptureStatus(CaptureStatus &someCaptureStatus); + bool getVideoFormat(BitmapInfo &bitmapInfo); + bool setVideoFormat(BitmapInfo &someBitmapInfo); + bool setMCIDeviceName(const String &mciDeviceName); + bool getMCIDeviceName(String &mciDeviceName); + bool setPreviewRate(DWORD milliseconds); + bool dialogVideoSource(void); + bool dialogVideoFormat(void); + bool dialogVideoDisplay(void); + bool preview(bool preview); + bool isConnected(void)const; + bool isOkay(void)const; + void disconnect(void); + static void getDrivers(Block &capDrivers); +protected: + virtual void errorHandler(int errorID,const String &errorString); + virtual void statusHandler(int nID,const String &statusString); + virtual void videoHandler(VIDEOHDR &videoHeader); + virtual void frameHandler(VIDEOHDR &videoHeader); +private: + enum{ControlID=101,DefaultWidth=160,DefaultHeight=120}; + void isConnected(bool isConnected); + void installHandlers(void); + void removeHandlers(void); + void destroy(void); + static void WINAPI errorCallback(HWND hWnd,int nErrorID,LPSTR lpszErrorText); + static void WINAPI statusCallback(HWND hWnd,int nID,LPSTR lpszStatusText); + static void WINAPI videoCallback(HWND hWnd,LPVIDEOHDR lpVideoHeader); + static void WINAPI frameCallback(HWND hWnd,LPVIDEOHDR lpVideoHeader); + HWND mhCaptureWnd; + HWND mhParentWnd; + bool mIsConnected; + InstanceData mInstanceData; + CaptureParams mCaptureParams; + CaptureStatus mCaptureStatus; +}; + +inline +bool VidCap::isConnected(void)const +{ + return mIsConnected; +} + +inline +void VidCap::isConnected(bool isConnected) +{ + mIsConnected=isConnected; +} + +inline +bool VidCap::isOkay(void)const +{ + return (mhCaptureWnd?TRUE:FALSE); +} + +inline +bool VidCap::capStop(void)const +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_STOP,(WPARAM)0,(LPARAM)0); +} + +inline +bool VidCap::capAbort(void)const +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_ABORT,(WPARAM)0,(LPARAM)0); +} + +inline +bool VidCap::grabFrame(void)const +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_GRAB_FRAME,(WPARAM)0,(LPARAM)0); +} + +inline +bool VidCap::grabFrameNoStop(void)const +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_GRAB_FRAME_NOSTOP,(WPARAM)0,(LPARAM)0); +} + +inline +bool VidCap::sequenceNoFile(void) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_SEQUENCE_NOFILE,0,0L); +} + +inline +bool VidCap::sequence(void) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_SEQUENCE,0,0L); +} + +inline +bool VidCap::setPreviewRate(DWORD milliseconds) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_SET_PREVIEWRATE,milliseconds,0L); +} + +inline +bool VidCap::preview(bool preview) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_SET_PREVIEW,preview,0L); +} + +inline +bool VidCap::getCaptureStatus(CaptureStatus &someCaptureStatus) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_GET_STATUS,(WPARAM)sizeof(CAPSTATUS),(LPARAM)(LPVOID)&((CAPSTATUS&)someCaptureStatus)); +} + +inline +bool VidCap::getCaptureParams(CaptureParams &someCaptureParams) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_GET_SEQUENCE_SETUP,(WPARAM)sizeof(CAPTUREPARMS),(LPARAM)(LPVOID)&((CAPTUREPARMS&)someCaptureParams)); +} + +inline +bool VidCap::setCaptureParams(CaptureParams &someCaptureParams) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_SET_SEQUENCE_SETUP,(WPARAM)sizeof(CAPTUREPARMS),(LPARAM)(LPVOID)&((CAPTUREPARMS&)someCaptureParams)); +} + +inline +bool VidCap::getDriverCaps(DriverCaps &someDriverCaps) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_DRIVER_GET_CAPS,(WPARAM)sizeof(CAPDRIVERCAPS),(LPARAM)(LPVOID)&someDriverCaps); +} + +inline +bool VidCap::setVideoFormat(BitmapInfo &someBitmapInfo) +{ + if(!isOkay()||!isConnected())return false; + if(!someBitmapInfo.width()||!someBitmapInfo.height())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_SET_VIDEOFORMAT,(WPARAM)sizeof(BITMAPINFOHEADER),(LPARAM)&((BITMAPINFOHEADER&)someBitmapInfo)); +} + +inline +bool VidCap::setMCIDeviceName(const String &mciDeviceName) +{ + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_SET_MCI_DEVICE,0,(LPARAM)mciDeviceName.str()); +} + +inline +bool VidCap::getMCIDeviceName(String &mciDeviceName) +{ + bool returnCode=false; + + mciDeviceName.reserve(512); + if(!isOkay()||!isConnected())return false; + return ::SendMessage(mhCaptureWnd,WM_CAP_GET_MCI_DEVICE,512,(LPARAM)mciDeviceName.str()); +} +#endif + diff --git a/vidcap/VIDCAP.IDE b/vidcap/VIDCAP.IDE new file mode 100644 index 0000000..6012498 Binary files /dev/null and b/vidcap/VIDCAP.IDE differ diff --git a/vidcap/VIDCAP.MAK b/vidcap/VIDCAP.MAK new file mode 100644 index 0000000..6279960 --- /dev/null +++ b/vidcap/VIDCAP.MAK @@ -0,0 +1,687 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=avicap - Win32 Debug +!MESSAGE No configuration specified. Defaulting to avicap - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "avicap - Win32 Release" && "$(CFG)" != "avicap - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Vidcap.mak" CFG="avicap - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "avicap - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "avicap - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "avicap - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "avicap - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Vidcap.exe" + +CLEAN : + -@erase "$(INTDIR)\Avicap.res" + -@erase "$(INTDIR)\Bmpcap.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Optndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vidcap.obj" + -@erase "$(OUTDIR)\Vidcap.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Vidcap.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Avicap.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Vidcap.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Vidcap.pdb" /machine:I386 /out:"$(OUTDIR)/Vidcap.exe" +LINK32_OBJS= \ + "$(INTDIR)\Avicap.res" \ + "$(INTDIR)\Bmpcap.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Optndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vidcap.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\msdialog.lib" + +"$(OUTDIR)\Vidcap.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Vidcap.exe" + +CLEAN : + -@erase "$(INTDIR)\Avicap.res" + -@erase "$(INTDIR)\Bmpcap.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Optndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vidcap.obj" + -@erase "$(OUTDIR)\Vidcap.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Avicap.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Vidcap.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug\ + /machine:I386 /out:"$(OUTDIR)/Vidcap.exe" +LINK32_OBJS= \ + "$(INTDIR)\Avicap.res" \ + "$(INTDIR)\Bmpcap.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Optndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vidcap.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\msdialog.lib" + +"$(OUTDIR)\Vidcap.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "avicap - Win32 Release" +# Name "avicap - Win32 Debug" + +!IF "$(CFG)" == "avicap - Win32 Release" + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Vidcap.cpp + +!IF "$(CFG)" == "avicap - Win32 Release" + +DEP_CPP_VIDCA=\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Vidcap.obj" : $(SOURCE) $(DEP_CPP_VIDCA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +DEP_CPP_VIDCA=\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Vidcap.obj" : $(SOURCE) $(DEP_CPP_VIDCA) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bmpcap.cpp +DEP_CPP_BMPCA=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Bmpcap.obj" : $(SOURCE) $(DEP_CPP_BMPCA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\main.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\Rsrc.h"\ + {$(INCLUDE)}"\.\rsrc.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Optndlg.cpp +DEP_CPP_OPTND=\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\Rsrc.h"\ + {$(INCLUDE)}"\.\rsrc.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Optndlg.obj" : $(SOURCE) $(DEP_CPP_OPTND) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "avicap - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\commctrl.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\progress.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\qsort.hpp"\ + {$(INCLUDE)}"\common\qsort.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\sortopt.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\commctrl.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\iconbmp.hpp"\ + {$(INCLUDE)}"\common\iconfrm.hpp"\ + {$(INCLUDE)}"\common\iconinfo.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\mmtimer.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\progress.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\pureicon.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\qsort.hpp"\ + {$(INCLUDE)}"\common\qsort.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\sortopt.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Avicap.rc + +"$(INTDIR)\Avicap.res" : $(SOURCE) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "avicap - Win32 Release" + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\msdialog.lib + +!IF "$(CFG)" == "avicap - Win32 Release" + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/vidcap/VIDCAP.MDP b/vidcap/VIDCAP.MDP new file mode 100644 index 0000000..0fdf74d Binary files /dev/null and b/vidcap/VIDCAP.MDP differ diff --git a/vidcap/VIDCAP.OPT b/vidcap/VIDCAP.OPT new file mode 100644 index 0000000..e6d1016 Binary files /dev/null and b/vidcap/VIDCAP.OPT differ diff --git a/vidcap/VIDCAP.ncb b/vidcap/VIDCAP.ncb new file mode 100644 index 0000000..bb23886 Binary files /dev/null and b/vidcap/VIDCAP.ncb differ diff --git a/vidcap/VidReg.cpp b/vidcap/VidReg.cpp new file mode 100644 index 0000000..aacd7e5 --- /dev/null +++ b/vidcap/VidReg.cpp @@ -0,0 +1,150 @@ +#include +#include + +VidReg::VidReg(void) +: + mRegKeySettings(RegKey::CurrentUser), + mVidCapKeyName("Software\\Diversified\\VidCap"), + mSettingsKeyName("Software\\Diversified\\VidCap\\Settings"), + mCaptureFile("CaptureFile"), + mSequencing("Sequencing"), + mPreviewWidth("PreviewWidth"), + mPreviewHeight("PreviewHeight"), + mCaptureWidth("CaptureWidth"), + mCaptureHeight("CaptureHeight"), + mPreviewRate("PreviewRate"), + mQuality("Quality") +{ + guarantee(); +} + +VidReg::~VidReg() +{ +} + +String VidReg::getCaptureFile(void)const +{ + String strCaptureFile; + mRegKeySettings.queryValue(mCaptureFile,strCaptureFile); + + return strCaptureFile; +} + +void VidReg::setCaptureFile(const String &captureFile) +{ + mRegKeySettings.setValue(mCaptureFile,captureFile); +} + +bool VidReg::getSequencing(void)const +{ + String strSequencing; + mRegKeySettings.queryValue(mSequencing,strSequencing); + if(strSequencing==String("true"))return true; + return false; +} + +void VidReg::setSequencing(bool sequencing) +{ + String strSequencing=sequencing?"true":"false"; + mRegKeySettings.setValue(mSequencing,strSequencing); +} + +DWORD VidReg::getPreviewRate(void)const +{ + String strPreviewRate; + mRegKeySettings.queryValue(mPreviewRate,strPreviewRate); + return strPreviewRate.toInt(); +} + +void VidReg::setPreviewRate(DWORD previewRate) +{ + mRegKeySettings.setValue(mPreviewRate,String().fromInt(previewRate)); +} + +DWORD VidReg::getPreviewWidth(void)const +{ + String strPreviewWidth; + mRegKeySettings.queryValue(mPreviewWidth,strPreviewWidth); + return strPreviewWidth.toInt(); +} + +void VidReg::setPreviewWidth(DWORD previewWidth) +{ + mRegKeySettings.setValue(mPreviewWidth,String().fromInt(previewWidth)); +} + +DWORD VidReg::getPreviewHeight(void)const +{ + String strPreviewHeight; + mRegKeySettings.queryValue(mPreviewHeight,strPreviewHeight); + return strPreviewHeight.toInt(); +} + +void VidReg::setPreviewHeight(DWORD previewHeight) +{ + mRegKeySettings.setValue(mPreviewHeight,String().fromInt(previewHeight)); +} + +DWORD VidReg::getCaptureWidth(void)const +{ + String strCaptureWidth; + mRegKeySettings.queryValue(mCaptureWidth,strCaptureWidth); + return strCaptureWidth.toInt(); +} + +void VidReg::setCaptureWidth(DWORD captureWidth) +{ + mRegKeySettings.setValue(mCaptureWidth,String().fromInt(captureWidth)); +} + +DWORD VidReg::getCaptureHeight(void)const +{ + String strCaptureHeight; + mRegKeySettings.queryValue(mCaptureHeight,strCaptureHeight); + return strCaptureHeight.toInt(); +} + +void VidReg::setCaptureHeight(DWORD captureHeight) +{ + mRegKeySettings.setValue(mCaptureHeight,String().fromInt(captureHeight)); +} + +DWORD VidReg::getQuality(void)const +{ + String strQuality; + mRegKeySettings.queryValue(mQuality,strQuality); + return strQuality.toInt(); +} + +void VidReg::setQuality(DWORD quality) +{ + mRegKeySettings.setValue(mQuality,String().fromInt(quality)); +} + +void VidReg::guarantee(void) +{ + if(!mRegKeySettings.openKey(mSettingsKeyName)) + { + DiskInfo diskInfo; + String strCaptureFile; + + diskInfo.getCurrentDirectory(strCaptureFile); + strCaptureFile+="\\capture.jpg"; + mRegKeySettings.createKey(mSettingsKeyName,""); + mRegKeySettings.openKey(mSettingsKeyName); + setCaptureFile(strCaptureFile); + setSequencing(true); + setPreviewWidth(320); + setPreviewHeight(240); + setCaptureWidth(320); + setCaptureHeight(240); + setPreviewRate(250); + setQuality(100); + } +} + +bool VidReg::isOkay(void)const +{ + return mRegKeySettings.isOkay(); +} + diff --git a/vidcap/VidReg.hpp b/vidcap/VidReg.hpp new file mode 100644 index 0000000..32e6ed6 --- /dev/null +++ b/vidcap/VidReg.hpp @@ -0,0 +1,64 @@ +#ifndef _VIDCAP_VIDREG_HPP_ +#define _VIDCAP_VIDREG_HPP_ +#ifndef _COMMON_REGKEY_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _VIDCAP_RSRC_HPP_ +#include +#endif + +class VidReg +{ +public: + VidReg(void); + virtual ~VidReg(); + String getCaptureFile(void)const; + void setCaptureFile(const String &captureFile); + bool getSequencing(void)const; + void setSequencing(bool sequencing); + DWORD getPreviewRate(void)const; + void setPreviewRate(DWORD previewRate); + DWORD getPreviewWidth(void)const; + void setPreviewWidth(DWORD previewWidth); + DWORD getPreviewHeight(void)const; + void setPreviewHeight(DWORD previewHeight); + DWORD getCaptureWidth(void)const; + void setCaptureWidth(DWORD captureWidth); + DWORD getCaptureHeight(void)const; + void setCaptureHeight(DWORD captureHeight); + DWORD getQuality(void)const; + void setQuality(DWORD quality); + bool isOkay(void)const; +private: + VidReg(const VidReg &someVidReg); + VidReg &operator=(const VidReg &someVidReg); + void guarantee(void); + + String mVidCapKeyName; + String mSettingsKeyName; + String mCaptureFile; + String mSequencing; + String mPreviewWidth; + String mPreviewHeight; + String mCaptureWidth; + String mCaptureHeight; + String mPreviewRate; + String mQuality; + RegKey mRegKeySettings; +}; + +inline +VidReg::VidReg(const VidReg &someVidReg) +{ // private implementation + *this=someVidReg; +} + +inline +VidReg &VidReg::operator=(const VidReg &/*someVidReg*/) +{ + return *this; +} +#endif diff --git a/vidcap/Vidcap.001 b/vidcap/Vidcap.001 new file mode 100644 index 0000000..6279960 --- /dev/null +++ b/vidcap/Vidcap.001 @@ -0,0 +1,687 @@ +# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +!IF "$(CFG)" == "" +CFG=avicap - Win32 Debug +!MESSAGE No configuration specified. Defaulting to avicap - Win32 Debug. +!ENDIF + +!IF "$(CFG)" != "avicap - Win32 Release" && "$(CFG)" != "avicap - Win32 Debug" +!MESSAGE Invalid configuration "$(CFG)" specified. +!MESSAGE You can specify a configuration when running NMAKE on this makefile +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Vidcap.mak" CFG="avicap - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "avicap - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "avicap - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE +!ERROR An invalid configuration is specified. +!ENDIF + +!IF "$(OS)" == "Windows_NT" +NULL= +!ELSE +NULL=nul +!ENDIF +################################################################################ +# Begin Project +# PROP Target_Last_Scanned "avicap - Win32 Debug" +MTL=mktyplib.exe +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "avicap - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +OUTDIR=.\Release +INTDIR=.\Release + +ALL : "$(OUTDIR)\Vidcap.exe" + +CLEAN : + -@erase "$(INTDIR)\Avicap.res" + -@erase "$(INTDIR)\Bmpcap.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Optndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vidcap.obj" + -@erase "$(OUTDIR)\Vidcap.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +CPP_PROJ=/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ + /Fp"$(INTDIR)/Vidcap.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\Release/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /win32 +MTL_PROJ=/nologo /D "NDEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Avicap.res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Vidcap.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ + odbccp32.lib /nologo /subsystem:windows /incremental:no\ + /pdb:"$(OUTDIR)/Vidcap.pdb" /machine:I386 /out:"$(OUTDIR)/Vidcap.exe" +LINK32_OBJS= \ + "$(INTDIR)\Avicap.res" \ + "$(INTDIR)\Bmpcap.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Optndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vidcap.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\msdialog.lib" + +"$(OUTDIR)\Vidcap.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "msvcobj" +# PROP Intermediate_Dir "msvcobj" +# PROP Target_Dir "" +OUTDIR=.\msvcobj +INTDIR=.\msvcobj + +ALL : "$(OUTDIR)\Vidcap.exe" + +CLEAN : + -@erase "$(INTDIR)\Avicap.res" + -@erase "$(INTDIR)\Bmpcap.obj" + -@erase "$(INTDIR)\Main.obj" + -@erase "$(INTDIR)\Mainwnd.obj" + -@erase "$(INTDIR)\Optndlg.obj" + -@erase "$(INTDIR)\Stdtmpl.obj" + -@erase "$(INTDIR)\Vidcap.obj" + -@erase "$(OUTDIR)\Vidcap.exe" + +"$(OUTDIR)" : + if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" + +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /c +CPP_PROJ=/nologo /Zp1 /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D\ + "__FLAT__" /D "STRICT" /Fp"c:\work\exe\msvc42.pch" /YX /Fo"$(INTDIR)/" /c +CPP_OBJS=.\msvcobj/ +CPP_SBRS=.\. +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /win32 +MTL_PROJ=/nologo /D "_DEBUG" /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +RSC_PROJ=/l 0x409 /fo"$(INTDIR)/Avicap.res" /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +BSC32_FLAGS=/nologo /o"$(OUTDIR)/Vidcap.bsc" +BSC32_SBRS= \ + +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 +LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ + advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /pdb:none /debug\ + /machine:I386 /out:"$(OUTDIR)/Vidcap.exe" +LINK32_OBJS= \ + "$(INTDIR)\Avicap.res" \ + "$(INTDIR)\Bmpcap.obj" \ + "$(INTDIR)\Main.obj" \ + "$(INTDIR)\Mainwnd.obj" \ + "$(INTDIR)\Optndlg.obj" \ + "$(INTDIR)\Stdtmpl.obj" \ + "$(INTDIR)\Vidcap.obj" \ + "..\exe\mscommon.lib" \ + "..\exe\msdialog.lib" + +"$(OUTDIR)\Vidcap.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) + $(LINK32) @<< + $(LINK32_FLAGS) $(LINK32_OBJS) +<< + +!ENDIF + +.c{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_OBJS)}.obj: + $(CPP) $(CPP_PROJ) $< + +.c{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cpp{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +.cxx{$(CPP_SBRS)}.sbr: + $(CPP) $(CPP_PROJ) $< + +################################################################################ +# Begin Target + +# Name "avicap - Win32 Release" +# Name "avicap - Win32 Debug" + +!IF "$(CFG)" == "avicap - Win32 Release" + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +!ENDIF + +################################################################################ +# Begin Source File + +SOURCE=.\Vidcap.cpp + +!IF "$(CFG)" == "avicap - Win32 Release" + +DEP_CPP_VIDCA=\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Vidcap.obj" : $(SOURCE) $(DEP_CPP_VIDCA) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +DEP_CPP_VIDCA=\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Vidcap.obj" : $(SOURCE) $(DEP_CPP_VIDCA) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Bmpcap.cpp +DEP_CPP_BMPCA=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + + +"$(INTDIR)\Bmpcap.obj" : $(SOURCE) $(DEP_CPP_BMPCA) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Main.cpp +DEP_CPP_MAIN_=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\main.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Main.obj" : $(SOURCE) $(DEP_CPP_MAIN_) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Mainwnd.cpp +DEP_CPP_MAINW=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\Rsrc.h"\ + {$(INCLUDE)}"\.\rsrc.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Mainwnd.obj" : $(SOURCE) $(DEP_CPP_MAINW) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Optndlg.cpp +DEP_CPP_OPTND=\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\Rsrc.h"\ + {$(INCLUDE)}"\.\rsrc.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\diskinfo.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filetime.hpp"\ + {$(INCLUDE)}"\common\finddata.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\profile.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\systime.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Optndlg.obj" : $(SOURCE) $(DEP_CPP_OPTND) "$(INTDIR)" + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Stdtmpl.cpp + +!IF "$(CFG)" == "avicap - Win32 Release" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\commctrl.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\progress.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\qsort.hpp"\ + {$(INCLUDE)}"\common\qsort.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\sortopt.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +DEP_CPP_STDTM=\ + {$(INCLUDE)}"\.\bmpcap.hpp"\ + {$(INCLUDE)}"\.\capparms.hpp"\ + {$(INCLUDE)}"\.\capstat.hpp"\ + {$(INCLUDE)}"\.\drvcaps.hpp"\ + {$(INCLUDE)}"\.\drvinfo.hpp"\ + {$(INCLUDE)}"\.\mainwnd.hpp"\ + {$(INCLUDE)}"\.\optndlg.hpp"\ + {$(INCLUDE)}"\.\rinfo.hpp"\ + {$(INCLUDE)}"\.\vidcap.hpp"\ + {$(INCLUDE)}"\common\assert.hpp"\ + {$(INCLUDE)}"\common\avicap.hpp"\ + {$(INCLUDE)}"\common\bitmap.hpp"\ + {$(INCLUDE)}"\common\block.hpp"\ + {$(INCLUDE)}"\common\block.tpp"\ + {$(INCLUDE)}"\common\bmdata.hpp"\ + {$(INCLUDE)}"\common\bminfo.hpp"\ + {$(INCLUDE)}"\common\boverlay.hpp"\ + {$(INCLUDE)}"\common\callback.hpp"\ + {$(INCLUDE)}"\common\callback.tpp"\ + {$(INCLUDE)}"\common\cbdata.hpp"\ + {$(INCLUDE)}"\common\cbptr.hpp"\ + {$(INCLUDE)}"\common\commctrl.hpp"\ + {$(INCLUDE)}"\common\dwindow.hpp"\ + {$(INCLUDE)}"\common\filemap.hpp"\ + {$(INCLUDE)}"\common\fixup.hpp"\ + {$(INCLUDE)}"\common\font.hpp"\ + {$(INCLUDE)}"\common\gdata.hpp"\ + {$(INCLUDE)}"\common\gdata.tpp"\ + {$(INCLUDE)}"\common\gdiobj.hpp"\ + {$(INCLUDE)}"\common\gdipoint.hpp"\ + {$(INCLUDE)}"\common\guiwnd.hpp"\ + {$(INCLUDE)}"\common\iconbmp.hpp"\ + {$(INCLUDE)}"\common\iconfrm.hpp"\ + {$(INCLUDE)}"\common\iconinfo.hpp"\ + {$(INCLUDE)}"\common\instance.hpp"\ + {$(INCLUDE)}"\common\mmsystem.hpp"\ + {$(INCLUDE)}"\common\mmtimer.hpp"\ + {$(INCLUDE)}"\common\palentry.hpp"\ + {$(INCLUDE)}"\common\pcallbck.hpp"\ + {$(INCLUDE)}"\common\pen.hpp"\ + {$(INCLUDE)}"\common\point.hpp"\ + {$(INCLUDE)}"\common\progress.hpp"\ + {$(INCLUDE)}"\common\purebmp.hpp"\ + {$(INCLUDE)}"\common\purehdc.hpp"\ + {$(INCLUDE)}"\common\pureicon.hpp"\ + {$(INCLUDE)}"\common\purepal.hpp"\ + {$(INCLUDE)}"\common\pvector.hpp"\ + {$(INCLUDE)}"\common\pvector.tpp"\ + {$(INCLUDE)}"\common\qsort.hpp"\ + {$(INCLUDE)}"\common\qsort.tpp"\ + {$(INCLUDE)}"\common\rect.hpp"\ + {$(INCLUDE)}"\common\rgbcolor.hpp"\ + {$(INCLUDE)}"\common\rgbquad.hpp"\ + {$(INCLUDE)}"\common\sortopt.hpp"\ + {$(INCLUDE)}"\common\stdlib.hpp"\ + {$(INCLUDE)}"\common\string.hpp"\ + {$(INCLUDE)}"\common\types.hpp"\ + {$(INCLUDE)}"\common\vfw.hpp"\ + {$(INCLUDE)}"\common\vhandler.hpp"\ + {$(INCLUDE)}"\common\window.hpp"\ + {$(INCLUDE)}"\common\windows.hpp"\ + {$(INCLUDE)}"\common\windowsx.hpp"\ + {$(INCLUDE)}"\dialog\dlgitem.hpp"\ + {$(INCLUDE)}"\dialog\dlgtmpl.hpp"\ + {$(INCLUDE)}"\dialog\dyndlg.hpp"\ + + +"$(INTDIR)\Stdtmpl.obj" : $(SOURCE) $(DEP_CPP_STDTM) "$(INTDIR)" + + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\Avicap.rc + +"$(INTDIR)\Avicap.res" : $(SOURCE) "$(INTDIR)" + $(RSC) $(RSC_PROJ) $(SOURCE) + + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\mscommon.lib + +!IF "$(CFG)" == "avicap - Win32 Release" + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +!ENDIF + +# End Source File +################################################################################ +# Begin Source File + +SOURCE=\work\exe\msdialog.lib + +!IF "$(CFG)" == "avicap - Win32 Release" + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +!ENDIF + +# End Source File +# End Target +# End Project +################################################################################ diff --git a/vidcap/Vidcap.dsp b/vidcap/Vidcap.dsp new file mode 100644 index 0000000..d2ecf91 --- /dev/null +++ b/vidcap/Vidcap.dsp @@ -0,0 +1,186 @@ +# Microsoft Developer Studio Project File - Name="avicap" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=avicap - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Vidcap.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Vidcap.mak" CFG="avicap - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "avicap - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "avicap - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "avicap - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir ".\Release" +# PROP BASE Intermediate_Dir ".\Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir ".\Release" +# PROP Intermediate_Dir ".\Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 + +!ELSEIF "$(CFG)" == "avicap - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir ".\Debug" +# PROP BASE Intermediate_Dir ".\Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir ".\msvcobj" +# PROP Intermediate_Dir ".\msvcobj" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c +# ADD CPP /nologo /Gz /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"\work\exe\msvc42.pch" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib vfw32.lib comctl32.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 + +!ENDIF + +# Begin Target + +# Name "avicap - Win32 Release" +# Name "avicap - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" +# Begin Source File + +SOURCE=.\Avicap.rc +# End Source File +# Begin Source File + +SOURCE=.\Bmpcap.cpp +# End Source File +# Begin Source File + +SOURCE=.\entrydlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Main.cpp +# End Source File +# Begin Source File + +SOURCE=.\Mainwnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\opendir.cpp +# End Source File +# Begin Source File + +SOURCE=.\srcdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Vidcap.cpp +# End Source File +# Begin Source File + +SOURCE=.\VidReg.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" +# Begin Source File + +SOURCE=.\bmpcap.hpp +# End Source File +# Begin Source File + +SOURCE=.\capparms.hpp +# End Source File +# Begin Source File + +SOURCE=.\capstat.hpp +# End Source File +# Begin Source File + +SOURCE=.\drvcaps.hpp +# End Source File +# Begin Source File + +SOURCE=.\drvinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\main.hpp +# End Source File +# Begin Source File + +SOURCE=.\mainwnd.hpp +# End Source File +# Begin Source File + +SOURCE=.\optndlg.hpp +# End Source File +# Begin Source File + +SOURCE=.\rinfo.hpp +# End Source File +# Begin Source File + +SOURCE=.\Rsrc.h +# End Source File +# Begin Source File + +SOURCE=.\rsrc.hpp +# End Source File +# Begin Source File + +SOURCE=.\vidcap.hpp +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/vidcap/Vidcap.plg b/vidcap/Vidcap.plg new file mode 100644 index 0000000..b5f05ff --- /dev/null +++ b/vidcap/Vidcap.plg @@ -0,0 +1,63 @@ + + +
+

Build Log

+

+--------------------Configuration: avicap - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP263.tmp" with contents +[ +/nologo /Gz /MTd /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__FLAT__" /D "STRICT" /Fp"\work\exe\msvc42.pch" /YX /Fo".\msvcobj/" /Fd".\msvcobj/" /FD /c +"D:\work\vidcap\Bmpcap.cpp" +"D:\work\vidcap\entrydlg.cpp" +"D:\work\vidcap\Main.cpp" +"D:\work\vidcap\Mainwnd.cpp" +"D:\work\vidcap\opendir.cpp" +"D:\work\vidcap\srcdlg.cpp" +"D:\work\vidcap\Vidcap.cpp" +"D:\work\vidcap\VidReg.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP263.tmp" +Creating temporary file "C:\DOCUME~1\sean\LOCALS~1\Temp\RSP264.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib vfw32.lib comctl32.lib /nologo /subsystem:windows /pdb:none /debug /machine:I386 /out:".\msvcobj/Vidcap.exe" +.\msvcobj\Bmpcap.obj +.\msvcobj\entrydlg.obj +.\msvcobj\Main.obj +.\msvcobj\Mainwnd.obj +.\msvcobj\opendir.obj +.\msvcobj\srcdlg.obj +.\msvcobj\Vidcap.obj +.\msvcobj\VidReg.obj +.\msvcobj\Avicap.res +\work\exe\mscommon.lib +\work\exe\msdialog.lib +\work\exe\msbsp.lib +"\parts\jpeg-6b\lib\jpeg6b.lib" +\work\exe\jpgimg.lib +\work\codec\Debug\codec.lib +\work\exe\statbar.lib +\work\exe\mshook.lib +] +Creating command line "link.exe @C:\DOCUME~1\sean\LOCALS~1\Temp\RSP264.tmp" +

Output Window

+Compiling... +Bmpcap.cpp +entrydlg.cpp +Main.cpp +Mainwnd.cpp +opendir.cpp +srcdlg.cpp +Vidcap.cpp +VidReg.cpp +Linking... + Creating library .\msvcobj/Vidcap.lib and object .\msvcobj/Vidcap.exp + + + +

Results

+Vidcap.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/vidcap/avicap.aps b/vidcap/avicap.aps new file mode 100644 index 0000000..c7625b9 Binary files /dev/null and b/vidcap/avicap.aps differ diff --git a/vidcap/avicap.rc b/vidcap/avicap.rc new file mode 100644 index 0000000..9df9eaf --- /dev/null +++ b/vidcap/avicap.rc @@ -0,0 +1,181 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +#include "rsrc.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +CAPMENU MENU DISCARDABLE +BEGIN + POPUP "&File" + BEGIN + MENUITEM "&Open...", FILE_OPEN + MENUITEM "&Close", FILE_CLOSE, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Exit", FILE_EXIT + END + POPUP "&Options" + BEGIN + MENUITEM "Save Frames", CAPMENU_OPTIONS_SAVE_FRAMES + , GRAYED + MENUITEM SEPARATOR + MENUITEM "&Grab Frame", CAPMENU_OPTIONS_GRABFRAME + , GRAYED + MENUITEM "Grab Frame &NoStop", CAPMENU_OPTIONS_GRABFRAMENOSTOP + , GRAYED + MENUITEM "&Preview", CAPMENU_OPTIONS_PREVIEW + , GRAYED + END + POPUP "&Configuration" + BEGIN + MENUITEM "&Display...", CAPMENU_DIALOGVIDEODISPLAY + , GRAYED + MENUITEM "&Source...", CAPMENU_DIALOGVIDEOSOURCE + , GRAYED + MENUITEM "&Format...", CAPMENU_DIALOGVIDEOFORMAT + , GRAYED + MENUITEM SEPARATOR + MENUITEM "&Settings...", CAPMENU_SETTINGS + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +SETTINGS DIALOG DISCARDABLE 6, 15, 311, 130 +STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +CAPTION "Settings" +FONT 6, "MS Sans Serif" +BEGIN + EDITTEXT SETTINGS_CAPTUREFILE,49,42,174,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "&Cancel",IDCANCEL,254,20,50,14 + PUSHBUTTON "&OK",IDOK,254,4,50,14 + LTEXT "Capure File:",-1,5,43,43,8 + GROUPBOX "Capture",-1,2,5,251,115 + PUSHBUTTON "...",SETTINGS_BROWSE,223,41,13,14 + CONTROL "Use Sequencing",SETTINGS_USESEQUENCING,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,9,23,69,10 + CONTROL "320x240",SETTINGS_PREVIEW_320x240,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,11,70,43,10 + CONTROL "640x480",SETTINGS_PREVIEW_640x480,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,11,86,43,10 + GROUPBOX "Preview",-1,6,60,69,46 + GROUPBOX "Frame Grab",-1,87,60,69,46 + CONTROL "320x240",SETTINGS_CAPTURE_320x240,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,92,70,43,10 + CONTROL "640x480",SETTINGS_CAPTURE_640x480,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,94,86,43,10 + LTEXT "Preview Rate:",-1,81,24,46,8 + COMBOBOX SETTINGS_PREVIEW_RATE,132,22,62,44,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + LTEXT "(ms)",-1,197,24,14,8 +END + +SOURCE DIALOG DISCARDABLE 0, 0, 284, 122 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Capture Source" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,227,7,50,14 + PUSHBUTTON "Cancel",IDCANCEL,227,24,50,14 + LISTBOX SOURCE_LIST,14,24,204,81,LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""rsrc.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + "SETTINGS", DIALOG + BEGIN + TOPMARGIN, 4 + BOTTOMMARGIN, 103 + END + + "SOURCE", DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 277 + TOPMARGIN, 7 + BOTTOMMARGIN, 115 + END +END +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/vidcap/entrydlg.cpp b/vidcap/entrydlg.cpp new file mode 100644 index 0000000..99d2123 --- /dev/null +++ b/vidcap/entrydlg.cpp @@ -0,0 +1,173 @@ +#include +#include +#include +#include +#include + +WORD EntryDialog::perform() +{ + WORD resultCode(::DialogBoxParam(processInstance(),(LPSTR)"SETTINGS",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this))); + return resultCode; +} + +CallbackData::ReturnType EntryDialog::initDialogHandler(CallbackData &/*someCallbackData*/) +{ + mPreviewRate=new Control(getItem(SETTINGS_PREVIEW_RATE),SETTINGS_PREVIEW_RATE,false); + mPreviewRate.disposition(PointerDisposition::Delete); + setPreviewRates(); + getParams(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType EntryDialog::dialogCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +CallbackData::ReturnType EntryDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + setParams(); + endDialog(true); + break; + case IDCANCEL : + endDialog(false); + break; + case SETTINGS_PREVIEW_640x480 : + if(BN_CLICKED==someCallbackData.wmCommandCommand()) + sendMessage(SETTINGS_PREVIEW_320x240,BM_SETCHECK,0,0L); + break; + case SETTINGS_PREVIEW_320x240 : + if(BN_CLICKED==someCallbackData.wmCommandCommand()) + sendMessage(SETTINGS_PREVIEW_640x480,BM_SETCHECK,0,0L); + break; + case SETTINGS_CAPTURE_320x240 : + if(BN_CLICKED==someCallbackData.wmCommandCommand()) + sendMessage(SETTINGS_CAPTURE_640x480,BM_SETCHECK,0,0L); + break; + case SETTINGS_CAPTURE_640x480 : + if(BN_CLICKED==someCallbackData.wmCommandCommand()) + sendMessage(SETTINGS_CAPTURE_320x240,BM_SETCHECK,0,0L); + break; + case SETTINGS_BROWSE : + handleBrowse(); + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void EntryDialog::handleBrowse(void) +{ + OpenDirectory openDir; + String strDirectory; + String strFileName; + + if(openDir.getOpenDirectory(*this,"Choose Path",".",strDirectory)) + { + Profile profile; + getText(SETTINGS_CAPTUREFILE,strFileName); + profile.makeFileName(strFileName,strFileName); + if(!(strDirectory[(DWORD)strDirectory.length()-1]=='\\'))strDirectory+="\\"; + setText(SETTINGS_CAPTUREFILE,strDirectory+strFileName); + } +} + +void EntryDialog::getParams() +{ + selectPreviewRate(mVidReg.getPreviewRate()); + setText(SETTINGS_CAPTUREFILE,mVidReg.getCaptureFile()); + if(mVidReg.getSequencing())sendMessage(SETTINGS_USESEQUENCING,BM_SETCHECK,true,0); + if(320==mVidReg.getPreviewWidth())sendMessage(SETTINGS_PREVIEW_320x240,BM_SETCHECK,true,0); + else sendMessage(SETTINGS_PREVIEW_640x480,BM_SETCHECK,true,0); + if(320==mVidReg.getCaptureWidth())sendMessage(SETTINGS_CAPTURE_320x240,BM_SETCHECK,true,0); + else sendMessage(SETTINGS_CAPTURE_640x480,BM_SETCHECK,true,0); +} + +void EntryDialog::setParams(void) +{ + String strCaptureFile; + + getText(SETTINGS_CAPTUREFILE,strCaptureFile); + if(!verifyCaptureFile(strCaptureFile))return; + if(!strCaptureFile.isNull())mVidReg.setCaptureFile(strCaptureFile); + mVidReg.setPreviewRate(getPreviewRate()); + if(sendMessage(SETTINGS_USESEQUENCING,BM_GETCHECK,0,0L))mVidReg.setSequencing(true); + else mVidReg.setSequencing(false); + if(sendMessage(SETTINGS_PREVIEW_320x240,BM_GETCHECK,0,0L)) + { + mVidReg.setPreviewWidth(320); + mVidReg.setPreviewHeight(240); + } + else + { + mVidReg.setPreviewWidth(640); + mVidReg.setPreviewHeight(480); + } + if(sendMessage(SETTINGS_CAPTURE_320x240,BM_GETCHECK,0,0L)) + { + mVidReg.setCaptureWidth(320); + mVidReg.setCaptureHeight(240); + } + else + { + mVidReg.setCaptureWidth(640); + mVidReg.setCaptureHeight(480); + } +} + +bool EntryDialog::verifyCaptureFile(const String &strCaptureFile) +{ + Profile profile; + DiskInfo diskInfo; + String strDirectory; + + strDirectory=strCaptureFile; + profile.makeDirectoryName(strDirectory); + if(profile.verifyDirectory(strDirectory))return true; + if(IDCANCEL==::MessageBox(*this,strDirectory,"Create Dirctory",MB_OKCANCEL))return false; + if(!diskInfo.createDirectory(strDirectory))return false; + return true; +} + +void EntryDialog::selectPreviewRate(DWORD previewRate) +{ + String strPreviewRate; + int entries=mPreviewRate->sendMessage(CB_GETCOUNT,0,0L); + bool itemSelected=false; + for(int index=0;indexsendMessage(CB_GETLBTEXT,index,(LPARAM)(LPSTR)strPreviewRate); + if(previewRate==strPreviewRate.toInt()) + { + mPreviewRate->sendMessage(CB_SETCURSEL,index,0L); + itemSelected=true; + break; + } + } + if(!itemSelected)mPreviewRate->sendMessage(CB_SETCURSEL,0,0L); +} + +DWORD EntryDialog::getPreviewRate(void) +{ + String strPreviewRate; + int index=mPreviewRate->sendMessage(CB_GETCURSEL,0,0L); + mPreviewRate->sendMessage(CB_GETLBTEXT,index,(LPARAM)(LPSTR)strPreviewRate); + if(strPreviewRate.isNull())return 0; + return strPreviewRate.toInt(); +} + +void EntryDialog::setPreviewRates(void) +{ + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"25"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"50"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"100"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"150"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"200"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"250"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"500"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"1000"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"15000"); + mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"30000"); +} \ No newline at end of file diff --git a/vidcap/entrydlg.hpp b/vidcap/entrydlg.hpp new file mode 100644 index 0000000..6313286 --- /dev/null +++ b/vidcap/entrydlg.hpp @@ -0,0 +1,78 @@ +#ifndef _VIDCAP_ENTRYDLG_HPP_ +#define _VIDCAP_ENTRYDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_STRING_HPP_ +#include +#endif +#ifndef _VIDCAP_VIDREG_HPP_ +#include +#endif + +class EntryDialog : private DWindow +{ +public: + EntryDialog(const GUIWindow &parentWindow); + virtual ~EntryDialog(); + WORD perform(void); +private: + EntryDialog(const EntryDialog &someEntryDialog); + EntryDialog &operator=(const EntryDialog &someEntryDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + void handleBrowse(void); + void setParams(void); + void getParams(void); + void setPreviewRates(void); + void selectPreviewRate(DWORD previewRate); + DWORD getPreviewRate(void); + bool verifyCaptureFile(const String &strCaptureFile); + + Callback mInitDialogHandler; + Callback mCommandHandler; + Callback mDialogCodeHandler; + SmartPointer mPreviewRate; + VidReg mVidReg; + HWND mhParent; +}; + +inline +EntryDialog::EntryDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&EntryDialog::initDialogHandler); + mCommandHandler.setCallback(this,&EntryDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&EntryDialog::dialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +EntryDialog::EntryDialog(const EntryDialog &someEntryDialog) +: mhParent(someEntryDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&EntryDialog::initDialogHandler); + mCommandHandler.setCallback(this,&EntryDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&EntryDialog::dialogCodeHandler); +} + +inline +EntryDialog::~EntryDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +EntryDialog &EntryDialog::operator=(const EntryDialog &/*someEntryDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/vidcap/opendir.cpp b/vidcap/opendir.cpp new file mode 100644 index 0000000..d24443a --- /dev/null +++ b/vidcap/opendir.cpp @@ -0,0 +1,184 @@ +#include +#include +#include + +OpenDirectory::OpenDirectory(void) +{ +} + +OpenDirectory::~OpenDirectory() +{ +} + +bool OpenDirectory::getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory) +{ + DiskInfo diskInfo; + String strCurrentDirectory; + + if(strInitialDirectory.isNull())diskInfo.getCurrentDirectory(strCurrentDirectory); + else strCurrentDirectory=strInitialDirectory; + owner(parentWindow); + instance(parentWindow.processInstance()); + filter("..;."); + filterPattern("..;."); + fileName(""); + fileTitle(""); + initialDirectory(strCurrentDirectory); + title(titleString); + creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST|OpenDialog::ENABLEHOOK); + OpenDialog::hookProc((LPOFNHOOKPROC)getHookAddress()); + mLastFolderChange=String(""); + if(!getOpenFileName())return false; + strDirectory=mLastFolderChange; + return true; +} + +OpenDirectory::OpenDirectory(const OpenDirectory &someOpenDirectory) +{ // private implementation + *this=someOpenDirectory; +} + +OpenDirectory &OpenDirectory::operator=(const OpenDirectory &/*someOpenDirectory*/) +{ // private implementation + return *this; +} + +UINT OpenDirectory::hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam) +{ + UINT returnCode(false); + switch(uiMsg) + { + case WM_NOTIFY : + { + LPOFNOTIFY pNotify=(LPOFNOTIFY)lParam; + switch(pNotify->hdr.code) + { + case CDN_INITDONE : + ::EnableWindow(::GetDlgItem(getParent(),FileNameEditControlID),false); + returnCode=handleInitDone(); + break; + case CDN_SELCHANGE : + returnCode=handleSelChange(); + break; + case CDN_FOLDERCHANGE : + returnCode=handleFolderChange(); + break; + case CDN_SHAREVIOLATION : + returnCode=handleShareViolation(); + break; + case CDN_HELP : + returnCode=handleHelp(); + break; + case CDN_FILEOK : + returnCode=handleFileOk(); + break; + case CDN_TYPECHANGE : + returnCode=handleTypeChange(); + break; + } + } + } + return returnCode; +} + +// helpers + +bool OpenDirectory::getPathFileName(String &strPathFileName) +{ + if(!getHandle())return false; + strPathFileName.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETFILEPATH,MaxString,(LPARAM)(LPSTR)strPathFileName); +} + +bool OpenDirectory::getFileName(String &strFileName) +{ + if(!getHandle())return false; + strFileName.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETSPEC,MaxString,(LPARAM)(LPSTR)strFileName); +} + +bool OpenDirectory::getFolderPath(String &strFolderPath) +{ + if(!getHandle())return false; + strFolderPath.reserve(MaxString); + return ::SendMessage(getParent(),CDM_GETFOLDERPATH,MaxString,(LPARAM)(LPSTR)strFolderPath); +} + +bool OpenDirectory::hideControl(UINT controlID) +{ + if(!getHandle())return false; + return ::SendMessage(getParent(),CDM_HIDECONTROL,controlID,0); +} + +bool OpenDirectory::setControlText(UINT controlID,const String &strControlText)const +{ + if(!getHandle())return false; + return ::SendMessage(getParent(),CDM_SETCONTROLTEXT,controlID,(LPARAM)(LPSTR)(String&)strControlText); +} + +bool OpenDirectory::getControlText(UINT controlID,String &strControlText)const +{ + if(!getHandle())return false; + strControlText.reserve(MaxString); + return ::SendMessage(getParent(),WM_GETTEXT,MaxString,(LPARAM)(char*)strControlText); +} + +bool OpenDirectory::setDefaultExtension(const String &strDefaultExtension) +{ + if(!getHandle()||strDefaultExtension.isNull())return false; + return ::SendMessage(getParent(),CDM_SETDEFEXT,0,(LPARAM)(LPSTR)(String&)strDefaultExtension); +} + +// virtuals + +UINT OpenDirectory::handleInitDone(void) +{ + return false; +} + +UINT OpenDirectory::handleSelChange(void) +{ + String strFolderPath; + + getFolderPath(strFolderPath); + setControlText(FileNameEditControlID,strFolderPath); + return false; +} + +UINT OpenDirectory::handleFolderChange(void) +{ + String strFolderPath; + + getFolderPath(strFolderPath); + if(strFolderPath==mLastFolderChange) + { + setControlText(FileNameEditControlID,strFolderPath); + ::EndDialog(getParent(),TRUE); + } + else + { + mLastFolderChange=strFolderPath; + setControlText(FileNameEditControlID,strFolderPath); + } + return false; +} + +UINT OpenDirectory::handleShareViolation(void) +{ + return false; +} + +UINT OpenDirectory::handleFileOk(void) +{ + return false; +} + +UINT OpenDirectory::handleHelp(void) +{ + return false; +} + +UINT OpenDirectory::handleTypeChange(void) +{ + return false; +} diff --git a/vidcap/opendir.hpp b/vidcap/opendir.hpp new file mode 100644 index 0000000..6e5065e --- /dev/null +++ b/vidcap/opendir.hpp @@ -0,0 +1,42 @@ +#ifndef _VIDCAP_OPENDIRECTORY_HPP_ +#define _VIDCAP_OPENDIRECTORY_HPP_ +#ifndef _COMMON_OPENDIALOG_HPP_ +#include +#endif +#ifndef _HOOKPROC_OFNHOOK_HPP_ +#include +#endif + +class OpenDirectory : private OpenDialog, private OFNHook +{ +public: + OpenDirectory(void); + virtual ~OpenDirectory(); + bool getOpenDirectory(GUIWindow &parentWindow,const String &titleString,const String &strInitialDirectory,String &strDirectory); +protected: + virtual UINT hookProc(HWND hDlg,UINT uiMsg,WPARAM wParam,LPARAM lParam); + virtual UINT handleInitDone(void); + virtual UINT handleSelChange(void); + virtual UINT handleFolderChange(void); + virtual UINT handleShareViolation(void); + virtual UINT handleFileOk(void); + virtual UINT handleHelp(void); + virtual UINT handleTypeChange(void); + + bool getPathFileName(String &strPathFileName); + bool getFileName(String &strFileName); + bool getFolderPath(String &strFolderPath); + bool hideControl(UINT controlID); + bool setDefaultExtension(const String &strDefaultExtension); + bool getControlText(UINT controlID,String &strControlText)const; + bool setControlText(UINT controlID,const String &strControlText)const; +private: + enum{FileNameEditControlID=0x480}; + enum{MaxString=256}; + OpenDirectory(const OpenDirectory &someOpenDirectory); + OpenDirectory &operator=(const OpenDirectory &someOpenDirectory); + + String mLastFolderChange; +}; +#endif + diff --git a/vidcap/resource.h b/vidcap/resource.h new file mode 100644 index 0000000..b0f25ac --- /dev/null +++ b/vidcap/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by avicap.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40006 +#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/vidcap/srcdlg.cpp b/vidcap/srcdlg.cpp new file mode 100644 index 0000000..971c80d --- /dev/null +++ b/vidcap/srcdlg.cpp @@ -0,0 +1,61 @@ +#include +#include +#include + +LRESULT SourceDialog::perform(void) +{ + mDriverIndex=-1; + ::DialogBoxParam(processInstance(),(LPSTR)"SOURCE",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); + return mDriverIndex; +} + +CallbackData::ReturnType SourceDialog::initDialogHandler(CallbackData &/*someCallbackData*/) +{ + mListBox=new Control(getItem(SOURCE_LIST),SOURCE_LIST,FALSE); + mListBox.disposition(PointerDisposition::Delete); + getDrivers(); + return (CallbackData::ReturnType)FALSE; +} + +CallbackData::ReturnType SourceDialog::dialogCodeHandler(CallbackData &/*someCallbackData*/) +{ + return (CallbackData::ReturnType)DLGC_WANTALLKEYS; +} + +CallbackData::ReturnType SourceDialog::commandHandler(CallbackData &someCallbackData) +{ + switch(someCallbackData.wmCommandID()) + { + case IDOK : + getDriverIndex(); + endDialog(TRUE); + break; + case IDCANCEL : + mDriverIndex=-1; + endDialog(FALSE); + break; + case SOURCE_LIST : + if(LBN_DBLCLK==someCallbackData.wmCommandCommand()){getDriverIndex();endDialog(true);} + break; + } + return (CallbackData::ReturnType)FALSE; +} + +void SourceDialog::getDrivers(void) +{ + Block drivers; + + mListBox->sendMessage(LB_RESETCONTENT,0,0L); + VidCap::getDrivers(drivers); + for(int index=0;indexsendMessage(LB_INSERTSTRING,-1,(LPARAM)String(drivers[index].driverName()+String("[")+ drivers[index].driverVersion()+String("]")).str()); + } + if(drivers.size())mListBox->sendMessage(LB_SETCURSEL,0,0); +} + +LRESULT SourceDialog::getDriverIndex(void) +{ + if(mListBox->sendMessage(LB_GETCOUNT,0,0))return mDriverIndex=mListBox->sendMessage(LB_GETCURSEL,0,0L); + else return mDriverIndex=-1; +} diff --git a/vidcap/srcdlg.hpp b/vidcap/srcdlg.hpp new file mode 100644 index 0000000..4f7ef6e --- /dev/null +++ b/vidcap/srcdlg.hpp @@ -0,0 +1,73 @@ +#ifndef _VIDCAP_SOURCEDLG_HPP_ +#define _VIDCAP_SOURCEDLG_HPP_ +#ifndef _COMMON_DWINDOW_HPP_ +#include +#endif +#ifndef _COMMON_WINDOW_HPP_ +#include +#endif +#ifndef _COMMON_CONTROL_HPP_ +#include +#endif +#ifndef _COMMON_SMARTPOINTER_HPP_ +#include +#endif + +class SourceDialog : private DWindow +{ +public: + SourceDialog(const GUIWindow &parentWindow); + virtual ~SourceDialog(); + LRESULT perform(void); +private: + SourceDialog(const SourceDialog &someSourceDialog); + SourceDialog &operator=(const SourceDialog &someSourceDialog); + CallbackData::ReturnType initDialogHandler(CallbackData &someCallbackData); + CallbackData::ReturnType commandHandler(CallbackData &someCallbackData); + CallbackData::ReturnType dialogCodeHandler(CallbackData &someCallbackData); + void getDrivers(void); + LRESULT getDriverIndex(void); + + Callback mInitDialogHandler; + Callback mCommandHandler; + Callback mDialogCodeHandler; + SmartPointer mListBox; + HWND mhParent; + LRESULT mDriverIndex; +}; + +inline +SourceDialog::SourceDialog(const GUIWindow &parentWindow) +: mhParent(parentWindow) +{ + mInitDialogHandler.setCallback(this,&SourceDialog::initDialogHandler); + mCommandHandler.setCallback(this,&SourceDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&SourceDialog::dialogCodeHandler); + insertHandler(VectorHandler::CommandHandler,&mCommandHandler); + insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + insertHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +SourceDialog::SourceDialog(const SourceDialog &someSourceDialog) +: mhParent(someSourceDialog.mhParent) +{ // no implementation + mInitDialogHandler.setCallback(this,&SourceDialog::initDialogHandler); + mCommandHandler.setCallback(this,&SourceDialog::commandHandler); + mDialogCodeHandler.setCallback(this,&SourceDialog::dialogCodeHandler); +} + +inline +SourceDialog::~SourceDialog() +{ + removeHandler(VectorHandler::CommandHandler,&mCommandHandler); + removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); + removeHandler(VectorHandler::DialogCodeHandler,&mDialogCodeHandler); +} + +inline +SourceDialog &SourceDialog::operator=(const SourceDialog &/*someSourceDialog*/) +{ // no implementation + return *this; +} +#endif \ No newline at end of file diff --git a/vidcap/vidcaplib.dsp b/vidcap/vidcaplib.dsp new file mode 100644 index 0000000..2de3805 --- /dev/null +++ b/vidcap/vidcaplib.dsp @@ -0,0 +1,104 @@ +# Microsoft Developer Studio Project File - Name="vidcaplib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=vidcaplib - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "vidcaplib.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "vidcaplib.mak" CFG="vidcaplib - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "vidcaplib - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "vidcaplib - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "vidcaplib - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ELSEIF "$(CFG)" == "vidcaplib - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "vidcaplib___Win32_Debug" +# PROP BASE Intermediate_Dir "vidcaplib___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "debug" +# PROP Intermediate_Dir "debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /Gz /MTd /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "STRICT" /D "__FLAT__" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + +!ENDIF + +# Begin Target + +# Name "vidcaplib - Win32 Release" +# Name "vidcaplib - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\BMPCAP.CPP +# End Source File +# Begin Source File + +SOURCE=.\VIDCAP.CPP +# End Source File +# Begin Source File + +SOURCE=.\VidReg.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# End Target +# End Project diff --git a/vidcap/vidcaplib.dsw b/vidcap/vidcaplib.dsw new file mode 100644 index 0000000..de1e270 --- /dev/null +++ b/vidcap/vidcaplib.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "vidcaplib"=.\vidcaplib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/vidcap/vidcaplib.opt b/vidcap/vidcaplib.opt new file mode 100644 index 0000000..2b6c1cb Binary files /dev/null and b/vidcap/vidcaplib.opt differ diff --git a/vidcap/vidcaplib.plg b/vidcap/vidcaplib.plg new file mode 100644 index 0000000..4fe952f --- /dev/null +++ b/vidcap/vidcaplib.plg @@ -0,0 +1,16 @@ + + +
+

Build Log

+

+--------------------Configuration: vidcaplib - Win32 Debug-------------------- +

+

Command Lines

+ + + +

Results

+vidcaplib.lib - 0 error(s), 0 warning(s) +
+ + diff --git a/video/MAIN.CPP b/video/MAIN.CPP new file mode 100644 index 0000000..921bb83 --- /dev/null +++ b/video/MAIN.CPP @@ -0,0 +1,15 @@ +#include +#include